@eternalheart/angular-file-preview 1.6.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +879 -0
  3. package/README.zh-CN.md +876 -0
  4. package/lib/LICENSE +22 -0
  5. package/lib/README.md +879 -0
  6. package/lib/components/preview/file-preview-toolbar.d.ts +19 -0
  7. package/lib/components/preview/nav-arrows.d.ts +25 -0
  8. package/lib/components/preview/renderer-outlet.d.ts +23 -0
  9. package/lib/components/preview/toolbar-button.d.ts +12 -0
  10. package/lib/components/resizable-split.d.ts +32 -0
  11. package/lib/di/locale.service.d.ts +12 -0
  12. package/lib/di/request.service.d.ts +20 -0
  13. package/lib/di/theme-mode.d.ts +6 -0
  14. package/lib/di/theme.service.d.ts +9 -0
  15. package/lib/fesm2022/eternalheart-angular-file-preview-avifLoader-BP3fgcMm-CZsJ9svm.mjs +55 -0
  16. package/lib/fesm2022/eternalheart-angular-file-preview-avifLoader-BP3fgcMm-CZsJ9svm.mjs.map +1 -0
  17. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-RendererError-DtNihCIX-DtNihCIX.mjs +58 -0
  18. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-RendererError-DtNihCIX-DtNihCIX.mjs.map +1 -0
  19. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-UobTf36G.mjs +5835 -0
  20. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-UobTf36G.mjs.map +1 -0
  21. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-base.types-D5x7QPey-D5x7QPey.mjs +17 -0
  22. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-base.types-D5x7QPey-D5x7QPey.mjs.map +1 -0
  23. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index--7d8Hgi0-D-sg24Qs.mjs +284 -0
  24. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index--7d8Hgi0-D-sg24Qs.mjs.map +1 -0
  25. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-6dZS_Cfs-B1itLV5R.mjs +703 -0
  26. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-6dZS_Cfs-B1itLV5R.mjs.map +1 -0
  27. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-B1ANUCTy-BRs7TMLn.mjs +231 -0
  28. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-B1ANUCTy-BRs7TMLn.mjs.map +1 -0
  29. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-BEaqpRV8-BidVIVlO.mjs +552 -0
  30. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-BEaqpRV8-BidVIVlO.mjs.map +1 -0
  31. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-BGqTRZbm-CAOLRw20.mjs +688 -0
  32. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-BGqTRZbm-CAOLRw20.mjs.map +1 -0
  33. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Bv3JRXKn-B4Wewc-4.mjs +273 -0
  34. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Bv3JRXKn-B4Wewc-4.mjs.map +1 -0
  35. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-C0McUoqT-DJ35bhIz.mjs +288 -0
  36. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-C0McUoqT-DJ35bhIz.mjs.map +1 -0
  37. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-C518mdUd-B5SCzrzU.mjs +550 -0
  38. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-C518mdUd-B5SCzrzU.mjs.map +1 -0
  39. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CDjKPqyW-CmX5sdkL.mjs +102 -0
  40. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CDjKPqyW-CmX5sdkL.mjs.map +1 -0
  41. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CHi9tOe0-NOeQYAnM.mjs +516 -0
  42. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CHi9tOe0-NOeQYAnM.mjs.map +1 -0
  43. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CQwhffym-DAGw4Xy_.mjs +823 -0
  44. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CQwhffym-DAGw4Xy_.mjs.map +1 -0
  45. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CSCTj7ft-BfqruUyY.mjs +164 -0
  46. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CSCTj7ft-BfqruUyY.mjs.map +1 -0
  47. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Cb1RLXeO-Bj9gjS1Z.mjs +655 -0
  48. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Cb1RLXeO-Bj9gjS1Z.mjs.map +1 -0
  49. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Cw90Kdyg-BzrW_cyx.mjs +207 -0
  50. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Cw90Kdyg-BzrW_cyx.mjs.map +1 -0
  51. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-D35x1nwM-CugEEXjg.mjs +199 -0
  52. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-D35x1nwM-CugEEXjg.mjs.map +1 -0
  53. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-D9jJNzeM-mWX59Aj2.mjs +194 -0
  54. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-D9jJNzeM-mWX59Aj2.mjs.map +1 -0
  55. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-DbmuvdvN-C29uLyt2.mjs +94 -0
  56. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-DbmuvdvN-C29uLyt2.mjs.map +1 -0
  57. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-DsNNZ59Q-C8MaSME6.mjs +468 -0
  58. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-DsNNZ59Q-C8MaSME6.mjs.map +1 -0
  59. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-DufW2Fuc-CTosCut6.mjs +193 -0
  60. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-DufW2Fuc-CTosCut6.mjs.map +1 -0
  61. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-TSTa_Q7E-DBhkL6pV.mjs +184 -0
  62. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-TSTa_Q7E-DBhkL6pV.mjs.map +1 -0
  63. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-pG0Ko5mI-DthQJg-X.mjs +492 -0
  64. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-pG0Ko5mI-DthQJg-X.mjs.map +1 -0
  65. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-shiki-highlight-CL9cG481-BKfwdOpN.mjs +68 -0
  66. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-shiki-highlight-CL9cG481-BKfwdOpN.mjs.map +1 -0
  67. package/lib/fesm2022/eternalheart-angular-file-preview-heicLoader-CH_raQNn-BSXHd_oi.mjs +36 -0
  68. package/lib/fesm2022/eternalheart-angular-file-preview-heicLoader-CH_raQNn-BSXHd_oi.mjs.map +1 -0
  69. package/lib/fesm2022/eternalheart-angular-file-preview-jp2Loader-ldvCSsvm-DJEhfimG.mjs +121 -0
  70. package/lib/fesm2022/eternalheart-angular-file-preview-jp2Loader-ldvCSsvm-DJEhfimG.mjs.map +1 -0
  71. package/lib/fesm2022/eternalheart-angular-file-preview-psdLoader-D5CkupyY-D5Gegcdg.mjs +78 -0
  72. package/lib/fesm2022/eternalheart-angular-file-preview-psdLoader-D5CkupyY-D5Gegcdg.mjs.map +1 -0
  73. package/lib/fesm2022/eternalheart-angular-file-preview-rawLoader-0mLvxCNp-CCXn9Rdp.mjs +81 -0
  74. package/lib/fesm2022/eternalheart-angular-file-preview-rawLoader-0mLvxCNp-CCXn9Rdp.mjs.map +1 -0
  75. package/lib/fesm2022/eternalheart-angular-file-preview-tiffLoader-CmUAD1vO-0JqIws9t.mjs +59 -0
  76. package/lib/fesm2022/eternalheart-angular-file-preview-tiffLoader-CmUAD1vO-0JqIws9t.mjs.map +1 -0
  77. package/lib/fesm2022/eternalheart-angular-file-preview.mjs +2 -0
  78. package/lib/fesm2022/eternalheart-angular-file-preview.mjs.map +1 -0
  79. package/lib/file-preview-content.d.ts +65 -0
  80. package/lib/file-preview-embed.d.ts +30 -0
  81. package/lib/file-preview-modal.d.ts +34 -0
  82. package/lib/fp-core.d.ts +1 -0
  83. package/lib/index.css +2119 -0
  84. package/lib/index.d.ts +11 -0
  85. package/lib/renderers/Audio/index.d.ts +74 -0
  86. package/lib/renderers/Cad/index.d.ts +45 -0
  87. package/lib/renderers/Cad/toolbar.d.ts +15 -0
  88. package/lib/renderers/Csv/index.d.ts +26 -0
  89. package/lib/renderers/Doc/index.d.ts +19 -0
  90. package/lib/renderers/Docx/index.d.ts +42 -0
  91. package/lib/renderers/Epub/index.d.ts +57 -0
  92. package/lib/renderers/Font/font-preview-line.d.ts +26 -0
  93. package/lib/renderers/Font/index.d.ts +52 -0
  94. package/lib/renderers/Image/index.d.ts +79 -0
  95. package/lib/renderers/Json/index.d.ts +61 -0
  96. package/lib/renderers/Markdown/index.d.ts +35 -0
  97. package/lib/renderers/Mobi/index.d.ts +51 -0
  98. package/lib/renderers/Msg/index.d.ts +47 -0
  99. package/lib/renderers/Pdf/index.d.ts +55 -0
  100. package/lib/renderers/Ppt/index.d.ts +19 -0
  101. package/lib/renderers/Pptx/index.d.ts +29 -0
  102. package/lib/renderers/RendererError.d.ts +9 -0
  103. package/lib/renderers/RendererLoading.d.ts +7 -0
  104. package/lib/renderers/Subtitle/index.d.ts +25 -0
  105. package/lib/renderers/Text/index.d.ts +29 -0
  106. package/lib/renderers/Unsupported/index.d.ts +15 -0
  107. package/lib/renderers/Video/index.d.ts +28 -0
  108. package/lib/renderers/Xlsx/index.d.ts +25 -0
  109. package/lib/renderers/Xml/index.d.ts +26 -0
  110. package/lib/renderers/Zip/index.d.ts +58 -0
  111. package/lib/renderers/Zip/tree-item.d.ts +29 -0
  112. package/lib/renderers/base.types.d.ts +10 -0
  113. package/lib/renderers/lazy.d.ts +23 -0
  114. package/lib/renderers/registry.d.ts +13 -0
  115. package/lib/renderers/toolbar.types.d.ts +19 -0
  116. package/lib/types.d.ts +26 -0
  117. package/lib/utils/audio-player.d.ts +20 -0
  118. package/lib/utils/shiki-highlight.d.ts +7 -0
  119. package/package.json +119 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-6dZS_Cfs-B1itLV5R.mjs","sources":["../fesm2022/eternalheart-angular-file-preview-index-6dZS_Cfs.mjs"],"sourcesContent":["import * as i0 from '@angular/core';\nimport { input, inject, DestroyRef, signal, viewChild, computed, afterNextRender, effect, untracked, ChangeDetectionStrategy, Component } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { L as LocaleService, g as getFallbackTranslator } from './eternalheart-angular-file-preview-eternalheart-angular-file-preview-DXwNhxAB.mjs';\nimport * as pdfjsLib from 'pdfjs-dist/legacy/build/pdf.mjs';\nimport * as i1 from 'lucide-angular';\nimport { X, Menu, ChevronLeft, ChevronRight, ZoomOut, ZoomIn, RefreshCw, LucideAngularModule } from 'lucide-angular';\nimport { R as RendererError } from './eternalheart-angular-file-preview-RendererError-DtNihCIX.mjs';\nimport { T as ToolbarEventEmitter } from './eternalheart-angular-file-preview-base.types-D5x7QPey.mjs';\nimport { installUint8ArrayHexBase64Polyfill, getPdfDocumentOptions, configurePdfWorker } from '@eternalheart/file-preview-core';\n\ninstallUint8ArrayHexBase64Polyfill();\n/**\n * 准备 PDF worker。\n * - 浏览器:使用 CDN 上的 legacy worker(独立 worker 线程,性能好)。\n * - Electron:worker 独立作用域缺 Uint8Array hex/base64 polyfill,会抛 `toHex is not a function`。\n * 将 worker 模块挂到 `globalThis.pdfjsWorker`,强制 pdfjs 主线程执行 worker 逻辑,\n * 复用主线程已装的 polyfill,并绕开 CDN / worker 作用域问题。\n */\nlet pdfWorkerPrepared = null;\nfunction preparePdfWorker() {\n if (pdfWorkerPrepared)\n return pdfWorkerPrepared;\n pdfWorkerPrepared = (async () => {\n const isElectron = typeof navigator !== 'undefined' && /electron/i.test(navigator.userAgent);\n if (isElectron) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const g = globalThis;\n if (typeof globalThis !== 'undefined' && !g.pdfjsWorker) {\n // @ts-ignore - pdfjs worker 无类型声明\n const workerModule = await import(/* webpackChunkName: \"pdf.worker\" */ /* @vite-ignore */ 'pdfjs-dist/legacy/build/pdf.worker.mjs');\n g.pdfjsWorker = workerModule;\n }\n }\n const configuredOptions = getPdfDocumentOptions();\n configurePdfWorker(pdfjsLib, {\n ...configuredOptions,\n workerSrc: pdfjsLib.GlobalWorkerOptions.workerSrc || undefined,\n });\n })();\n return pdfWorkerPrepared;\n}\nclass PdfRenderer {\n constructor() {\n this.url = input.required();\n this.emitter = new ToolbarEventEmitter();\n this.locale = inject(LocaleService, { optional: true });\n this.sanitizer = inject(DomSanitizer);\n this.destroyRef = inject(DestroyRef);\n this.t = this.locale?.t() ?? getFallbackTranslator();\n this.xIcon = X;\n this.zoom = signal(1);\n this.currentPage = signal(1);\n this.showOutline = signal(false);\n this.numPages = signal(0);\n this.error = signal(null);\n this.loading = signal(true);\n this.outline = signal([]);\n this.activeOutlineItem = signal(null);\n this.scrollContainerRef = viewChild('scrollContainerRef');\n this.outlinePageMap = new Map();\n this.pdfDoc = null;\n this.pageStates = new Map();\n this.observer = null;\n this.zoomWatchReady = false;\n this.outlineHtml = computed(() => {\n const items = this.outline();\n this.activeOutlineItem();\n if (items.length === 0)\n return '';\n return `<ul>${this.renderOutlineItemsHtml(items)}</ul>`;\n });\n this.getToolbarGroups = () => {\n const groups = [];\n if (this.numPages() === 0)\n return groups;\n if (this.outline().length > 0) {\n groups.push({\n items: [\n {\n type: 'button',\n icon: Menu,\n tooltip: this.t('toolbar.outline'),\n action: this.handleToggleOutline,\n active: this.showOutline(),\n },\n ],\n });\n }\n groups.push({\n items: [\n {\n type: 'button',\n icon: ChevronLeft,\n tooltip: this.t('toolbar.prev_page'),\n action: this.handlePrevPage,\n disabled: this.currentPage() <= 1,\n },\n {\n type: 'text',\n content: `${this.currentPage()} / ${this.numPages()}`,\n minWidth: '4rem',\n },\n {\n type: 'button',\n icon: ChevronRight,\n tooltip: this.t('toolbar.next_page'),\n action: this.handleNextPage,\n disabled: this.currentPage() >= this.numPages(),\n },\n ],\n });\n groups.push({\n items: [\n {\n type: 'button',\n icon: ZoomOut,\n tooltip: this.t('toolbar.zoom_out'),\n action: this.handleZoomOut,\n disabled: this.zoom() <= 0.5,\n },\n {\n type: 'text',\n content: `${Math.round(this.zoom() * 100)}%`,\n minWidth: '3rem',\n },\n {\n type: 'button',\n icon: ZoomIn,\n tooltip: this.t('toolbar.zoom_in'),\n action: this.handleZoomIn,\n disabled: this.zoom() >= 3,\n },\n ],\n });\n groups.push({\n items: [\n {\n type: 'button',\n icon: RefreshCw,\n tooltip: this.t('toolbar.reset'),\n action: this.handleReset,\n },\n ],\n });\n return groups;\n };\n this.onToolbarChange = (listener) => this.emitter.subscribe(listener);\n this.handleZoomIn = () => {\n this.zoom.update((v) => Math.min(3, v + 0.1));\n };\n this.handleZoomOut = () => {\n this.zoom.update((v) => Math.max(0.5, v - 0.1));\n };\n this.handleReset = () => {\n this.zoom.set(1);\n };\n this.handlePrevPage = () => {\n const container = this.scrollContainerRef()?.nativeElement;\n if (!container)\n return;\n const pages = container.querySelectorAll('[data-page-number]');\n const targetPage = pages[Math.max(0, this.currentPage() - 2)];\n if (targetPage) {\n targetPage.scrollIntoView({ behavior: 'smooth', block: 'start' });\n }\n };\n this.handleNextPage = () => {\n const container = this.scrollContainerRef()?.nativeElement;\n if (!container)\n return;\n const pages = container.querySelectorAll('[data-page-number]');\n const targetPage = pages[Math.min(pages.length - 1, this.currentPage())];\n if (targetPage) {\n targetPage.scrollIntoView({ behavior: 'smooth', block: 'start' });\n }\n };\n this.handleToggleOutline = () => {\n this.showOutline.update((v) => !v);\n };\n this.handleScroll = () => {\n if (!this.scrollContainerRef()?.nativeElement || this.pageStates.size === 0)\n return;\n const container = this.scrollContainerRef().nativeElement;\n const scrollTop = container.scrollTop;\n const containerHeight = container.clientHeight;\n const scrollCenter = scrollTop + containerHeight / 2;\n let currentVisiblePage = 1;\n let minDistance = Infinity;\n this.pageStates.forEach((state, pageNumber) => {\n const rect = state.element.getBoundingClientRect();\n const containerRect = container.getBoundingClientRect();\n const pageCenter = rect.top - containerRect.top + rect.height / 2 + scrollTop;\n const distance = Math.abs(scrollCenter - pageCenter);\n if (distance < minDistance) {\n minDistance = distance;\n currentVisiblePage = pageNumber;\n }\n });\n if (currentVisiblePage !== this.currentPage()) {\n this.currentPage.set(currentVisiblePage);\n if (this.outlinePageMap.size > 0) {\n this.updateActiveOutlineByPage(currentVisiblePage);\n }\n }\n };\n afterNextRender(() => {\n this.observer = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n const pageNumber = Number(entry.target.getAttribute('data-page-number'));\n if (!pageNumber)\n return;\n if (entry.isIntersecting) {\n void this.renderPage(pageNumber, this.zoom());\n }\n else {\n const state = this.pageStates.get(pageNumber);\n if (state && state.rendered) {\n this.clearPageCanvas(pageNumber);\n }\n }\n });\n }, {\n root: this.scrollContainerRef()?.nativeElement ?? null,\n rootMargin: '500px 0px',\n threshold: 0,\n });\n const container = this.scrollContainerRef()?.nativeElement;\n if (container) {\n container.addEventListener('scroll', this.handleScroll);\n }\n if (this.numPages() > 0) {\n this.initPagePlaceholders();\n }\n });\n this.destroyRef.onDestroy(() => {\n if (this.observer) {\n this.observer.disconnect();\n this.observer = null;\n }\n const container = this.scrollContainerRef()?.nativeElement;\n if (container) {\n container.removeEventListener('scroll', this.handleScroll);\n }\n this.pageStates.forEach((state) => {\n if (state.renderTask) {\n state.renderTask.cancel();\n }\n });\n this.pageStates.clear();\n if (this.pdfDoc) {\n try {\n this.pdfDoc.destroy();\n }\n catch {\n // ignore\n }\n this.pdfDoc = null;\n }\n });\n effect(() => {\n this.zoom();\n this.currentPage();\n this.numPages();\n this.showOutline();\n this.outline().length;\n this.emitter.notify();\n });\n effect(() => {\n const url = this.url();\n if (url) {\n untracked(() => {\n void this.loadPdf();\n });\n }\n });\n effect(() => {\n const val = this.numPages();\n if (val > 0) {\n untracked(() => {\n queueMicrotask(() => this.initPagePlaceholders());\n });\n }\n });\n effect(() => {\n this.zoom();\n if (!this.zoomWatchReady) {\n this.zoomWatchReady = true;\n return;\n }\n untracked(() => {\n this.pageStates.forEach((state, pageNumber) => {\n if (state.rendered) {\n this.clearPageCanvas(pageNumber);\n }\n });\n window.setTimeout(() => {\n if (this.observer && this.scrollContainerRef()?.nativeElement) {\n this.pageStates.forEach((state) => {\n this.observer?.unobserve(state.element);\n this.observer?.observe(state.element);\n });\n }\n }, 150);\n });\n });\n }\n trust(html) {\n return this.sanitizer.bypassSecurityTrustHtml(html);\n }\n onOutlineClick(e) {\n const target = e.target;\n const button = target.closest('[data-outline-key]');\n if (!button)\n return;\n const itemKey = button.getAttribute('data-outline-key');\n const destStr = button.getAttribute('data-outline-dest');\n if (!itemKey || !destStr)\n return;\n try {\n const dest = JSON.parse(destStr);\n void this.handleOutlineClick(dest, itemKey);\n }\n catch (err) {\n console.error('解析大纲目标失败:', err);\n }\n }\n async buildOutlinePageMap(items, pdfDocument, depth = 0) {\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n const itemKey = `${item.title}-${i}-${depth}`;\n try {\n let pageNumber = null;\n const dest = item.dest;\n if (typeof dest === 'string') {\n const namedDest = await pdfDocument.getDestination?.(dest);\n if (Array.isArray(namedDest) && namedDest[0] && typeof namedDest[0] === 'object') {\n const idx = await pdfDocument.getPageIndex?.(namedDest[0]);\n if (idx != null)\n pageNumber = idx + 1;\n }\n }\n else if (Array.isArray(dest) && dest[0] && typeof dest[0] === 'object') {\n const idx = await pdfDocument.getPageIndex?.(dest[0]);\n if (idx != null)\n pageNumber = idx + 1;\n }\n if (pageNumber !== null && pageNumber > 0) {\n this.outlinePageMap.set(itemKey, pageNumber);\n }\n if (item.items && item.items.length > 0) {\n await this.buildOutlinePageMap(item.items, pdfDocument, depth + 1);\n }\n }\n catch {\n // 静默失败\n }\n }\n }\n updateActiveOutlineByPage(page) {\n let closestItem = null;\n let closestDistance = Infinity;\n this.outlinePageMap.forEach((itemPage, itemKey) => {\n if (itemPage <= page) {\n const distance = page - itemPage;\n if (distance < closestDistance) {\n closestDistance = distance;\n closestItem = itemKey;\n }\n }\n });\n if (closestItem !== this.activeOutlineItem()) {\n this.activeOutlineItem.set(closestItem);\n }\n }\n async handleOutlineClick(dest, itemKey) {\n if (!this.pdfDoc || !this.scrollContainerRef()?.nativeElement)\n return;\n try {\n let pageNumber;\n if (typeof dest === 'string') {\n const namedDest = await this.pdfDoc.getDestination?.(dest);\n if (Array.isArray(namedDest) && namedDest[0]) {\n const idx = await this.pdfDoc.getPageIndex?.(namedDest[0]);\n if (idx == null)\n return;\n pageNumber = idx + 1;\n }\n else {\n return;\n }\n }\n else if (Array.isArray(dest) && dest[0]) {\n const idx = await this.pdfDoc.getPageIndex?.(dest[0]);\n if (idx == null)\n return;\n pageNumber = idx + 1;\n }\n else {\n return;\n }\n this.activeOutlineItem.set(itemKey);\n const pages = this.scrollContainerRef().nativeElement.querySelectorAll('[data-page-number]');\n const targetPage = pages[pageNumber - 1];\n if (targetPage) {\n targetPage.scrollIntoView({ behavior: 'smooth', block: 'start' });\n }\n window.setTimeout(() => {\n this.showOutline.set(false);\n }, 300);\n }\n catch (err) {\n console.error('大纲跳转失败:', err);\n }\n }\n renderOutlineItemsHtml(items, depth = 0) {\n return items.map((item, i) => {\n const itemKey = `${item.title}-${i}-${depth}`;\n const isActive = this.activeOutlineItem() === itemKey;\n const activeClass = isActive\n ? 'afp-bg-surface-2 afp-text-fg-primary afp-font-medium'\n : 'afp-text-fg-secondary hover:afp-text-fg-primary hover:afp-bg-surface-2';\n let html = `<li style=\"margin-left: ${depth > 0 ? 16 : 0}px;\">\n <button\n data-outline-key=\"${itemKey}\"\n data-outline-dest=\"${JSON.stringify(item.dest).replace(/\"/g, '&quot;')}\"\n class=\"afp-w-full afp-text-left afp-py-2 afp-px-3 afp-text-sm afp-rounded afp-transition-all afp-truncate ${activeClass}\"\n title=\"${item.title}\"\n >\n ${item.title}\n </button>`;\n if (item.items && item.items.length > 0) {\n html += `<ul>${this.renderOutlineItemsHtml(item.items, depth + 1)}</ul>`;\n }\n html += '</li>';\n return html;\n }).join('');\n }\n async renderPage(pageNumber, scale) {\n if (!this.pdfDoc)\n return;\n const state = this.pageStates.get(pageNumber);\n if (!state || state.rendering)\n return;\n state.rendering = true;\n try {\n const page = await this.pdfDoc.getPage(pageNumber);\n const viewport = page.getViewport({ scale });\n const outputScale = typeof window !== 'undefined' ? window.devicePixelRatio || 1 : 1;\n // 页面盒子使用当前 PDF viewport 的真实尺寸;容器不足时再等比缩小。\n // Angular 模板中的 pdf-pages 是全宽容器,若不覆盖页面宽度,所有页面都会被撑成容器宽度。\n state.element.style.width = `${viewport.width}px`;\n state.element.style.maxWidth = '100%';\n state.element.style.aspectRatio = `${viewport.width} / ${viewport.height}`;\n state.element.style.minHeight = '0';\n const canvas = document.createElement('canvas');\n // Canvas 位图按 DPR 放大,避免 Retina 等高 DPI 屏幕把 1x 位图插值放大后发糊。\n canvas.width = Math.ceil(viewport.width * outputScale);\n canvas.height = Math.ceil(viewport.height * outputScale);\n // Canvas 填满与 PDF 同比例的页面盒子,高度由自身宽高比自动计算。\n canvas.style.width = '100%';\n canvas.style.maxWidth = '100%';\n canvas.style.height = 'auto';\n canvas.style.borderRadius = '0';\n canvas.style.display = 'block';\n const ctx = canvas.getContext('2d');\n if (!ctx)\n return;\n const renderTask = page.render({\n canvasContext: ctx,\n viewport,\n transform: outputScale === 1 ? undefined : [outputScale, 0, 0, outputScale, 0, 0],\n });\n state.renderTask = renderTask;\n await renderTask.promise;\n state.element.innerHTML = '';\n state.element.appendChild(canvas);\n state.rendered = true;\n }\n catch (err) {\n if (err?.name !== 'RenderingCancelledException') {\n console.error(`渲染页面 ${pageNumber} 失败:`, err);\n }\n }\n finally {\n state.rendering = false;\n state.renderTask = null;\n }\n }\n clearPageCanvas(pageNumber) {\n const state = this.pageStates.get(pageNumber);\n if (!state)\n return;\n if (state.renderTask) {\n state.renderTask.cancel();\n state.renderTask = null;\n }\n const canvas = state.element.querySelector('canvas');\n if (canvas) {\n const ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n }\n }\n state.element.innerHTML = '';\n state.rendered = false;\n state.rendering = false;\n }\n initPagePlaceholders() {\n if (!this.pdfDoc || !this.scrollContainerRef()?.nativeElement)\n return;\n const wrapper = this.scrollContainerRef().nativeElement.querySelector('.pdf-pages');\n if (!wrapper)\n return;\n wrapper.innerHTML = '';\n this.pageStates.clear();\n for (let i = 1; i <= this.numPages(); i++) {\n const pageDiv = document.createElement('div');\n pageDiv.className = 'afp-pdf-page-placeholder afp-relative afp-flex afp-justify-center';\n pageDiv.setAttribute('data-page-number', String(i));\n wrapper.appendChild(pageDiv);\n this.pageStates.set(i, {\n element: pageDiv,\n rendered: false,\n rendering: false,\n renderTask: null,\n });\n if (this.observer) {\n this.observer.observe(pageDiv);\n }\n }\n }\n async loadPdf() {\n this.error.set(null);\n this.loading.set(true);\n this.numPages.set(0);\n if (this.pdfDoc) {\n try {\n this.pdfDoc.destroy();\n }\n catch {\n // ignore\n }\n this.pdfDoc = null;\n }\n try {\n await preparePdfWorker();\n const loadingTask = pdfjsLib.getDocument({\n url: this.url(),\n ...getPdfDocumentOptions(),\n });\n this.pdfDoc = await loadingTask.promise;\n const total = this.pdfDoc.numPages;\n this.numPages.set(total);\n this.currentPage.set(1);\n try {\n const outlineData = await this.pdfDoc.getOutline();\n if (outlineData) {\n this.outline.set(outlineData);\n this.outlinePageMap.clear();\n await this.buildOutlinePageMap(outlineData, this.pdfDoc);\n this.updateActiveOutlineByPage(this.currentPage());\n }\n }\n catch (err) {\n console.warn('PDF 大纲提取失败:', err);\n }\n this.loading.set(false);\n }\n catch (err) {\n console.error('PDF 加载错误:', err);\n this.error.set(this.t('pdf.load_failed'));\n this.loading.set(false);\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"19.2.25\", ngImport: i0, type: PdfRenderer, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"19.2.25\", type: PdfRenderer, isStandalone: true, selector: \"afp-pdf-renderer\", inputs: { url: { classPropertyName: \"url\", publicName: \"url\", isSignal: true, isRequired: true, transformFunction: null } }, host: { classAttribute: \"afp-block afp-w-full afp-h-full\" }, viewQueries: [{ propertyName: \"scrollContainerRef\", first: true, predicate: [\"scrollContainerRef\"], descendants: true, isSignal: true }], ngImport: i0, template: `\n <div #containerRef class=\"afp-relative afp-w-full afp-h-full\">\n @if (outline().length > 0) {\n <div\n class=\"afp-absolute afp-inset-0 afp-z-20 afp-flex afp-transition-opacity afp-duration-300\"\n [style.opacity]=\"showOutline() ? 1 : 0\"\n [style.pointer-events]=\"showOutline() ? 'auto' : 'none'\"\n >\n <div\n class=\"afp-w-72 afp-max-w-[80%] afp-h-full afp-bg-surface-overlay afp-backdrop-blur-xl afp-border-r afp-border-line-weak afp-flex afp-flex-col afp-shadow-2xl afp-transition-transform afp-duration-300\"\n [style.transform]=\"showOutline() ? 'translateX(0)' : 'translateX(-100%)'\"\n >\n <div class=\"afp-flex afp-items-center afp-justify-between afp-px-4 afp-py-3 afp-border-b afp-border-line-weak afp-flex-shrink-0\">\n <span class=\"afp-text-fg-primary afp-font-medium afp-text-sm\">{{ t('toolbar.outline') }}</span>\n <button\n type=\"button\"\n class=\"afp-text-fg-tertiary hover:afp-text-fg-primary afp-transition-colors\"\n (click)=\"showOutline.set(false)\"\n >\n <i-lucide [img]=\"xIcon\" class=\"afp-w-4 afp-h-4\" />\n </button>\n </div>\n <div\n class=\"afp-flex-1 afp-overflow-y-auto afp-py-4 afp-px-1 outline-items\"\n [innerHTML]=\"trust(outlineHtml())\"\n (click)=\"onOutlineClick($event)\"\n ></div>\n </div>\n <div\n class=\"afp-flex-1 afp-transition-opacity afp-duration-300\"\n [style.background]=\"showOutline() ? 'rgba(0,0,0,0.3)' : 'transparent'\"\n (click)=\"showOutline.set(false)\"\n ></div>\n </div>\n }\n\n <div #scrollContainerRef class=\"afp-pdf-container afp-w-full afp-h-full afp-overflow-auto\">\n @if (error()) {\n <afp-renderer-error [message]=\"error()!\" />\n }\n\n @if (!error() && loading()) {\n <div class=\"afp-flex afp-items-center afp-justify-center afp-min-h-screen\">\n <div\n class=\"afp-w-12 afp-h-12 afp-border-4 afp-border-line-strong afp-border-t-spinner-head afp-rounded-full afp-animate-spin\"\n ></div>\n </div>\n }\n\n @if (!error()) {\n <div class=\"afp-flex afp-flex-col afp-items-center afp-w-full\">\n <div class=\"pdf-pages afp-flex afp-flex-col afp-gap-4 afp-w-full afp-items-center\"></div>\n </div>\n }\n </div>\n </div>\n `, isInline: true, dependencies: [{ kind: \"component\", type: RendererError, selector: \"afp-renderer-error\", inputs: [\"message\", \"detail\", \"showIcon\"] }, { kind: \"ngmodule\", type: LucideAngularModule }, { kind: \"component\", type: i1.LucideAngularComponent, selector: \"lucide-angular, lucide-icon, i-lucide, span-lucide\", inputs: [\"class\", \"name\", \"img\", \"color\", \"absoluteStrokeWidth\", \"size\", \"strokeWidth\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"19.2.25\", ngImport: i0, type: PdfRenderer, decorators: [{\n type: Component,\n args: [{\n selector: 'afp-pdf-renderer',\n standalone: true,\n imports: [RendererError, LucideAngularModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'afp-block afp-w-full afp-h-full' },\n template: `\n <div #containerRef class=\"afp-relative afp-w-full afp-h-full\">\n @if (outline().length > 0) {\n <div\n class=\"afp-absolute afp-inset-0 afp-z-20 afp-flex afp-transition-opacity afp-duration-300\"\n [style.opacity]=\"showOutline() ? 1 : 0\"\n [style.pointer-events]=\"showOutline() ? 'auto' : 'none'\"\n >\n <div\n class=\"afp-w-72 afp-max-w-[80%] afp-h-full afp-bg-surface-overlay afp-backdrop-blur-xl afp-border-r afp-border-line-weak afp-flex afp-flex-col afp-shadow-2xl afp-transition-transform afp-duration-300\"\n [style.transform]=\"showOutline() ? 'translateX(0)' : 'translateX(-100%)'\"\n >\n <div class=\"afp-flex afp-items-center afp-justify-between afp-px-4 afp-py-3 afp-border-b afp-border-line-weak afp-flex-shrink-0\">\n <span class=\"afp-text-fg-primary afp-font-medium afp-text-sm\">{{ t('toolbar.outline') }}</span>\n <button\n type=\"button\"\n class=\"afp-text-fg-tertiary hover:afp-text-fg-primary afp-transition-colors\"\n (click)=\"showOutline.set(false)\"\n >\n <i-lucide [img]=\"xIcon\" class=\"afp-w-4 afp-h-4\" />\n </button>\n </div>\n <div\n class=\"afp-flex-1 afp-overflow-y-auto afp-py-4 afp-px-1 outline-items\"\n [innerHTML]=\"trust(outlineHtml())\"\n (click)=\"onOutlineClick($event)\"\n ></div>\n </div>\n <div\n class=\"afp-flex-1 afp-transition-opacity afp-duration-300\"\n [style.background]=\"showOutline() ? 'rgba(0,0,0,0.3)' : 'transparent'\"\n (click)=\"showOutline.set(false)\"\n ></div>\n </div>\n }\n\n <div #scrollContainerRef class=\"afp-pdf-container afp-w-full afp-h-full afp-overflow-auto\">\n @if (error()) {\n <afp-renderer-error [message]=\"error()!\" />\n }\n\n @if (!error() && loading()) {\n <div class=\"afp-flex afp-items-center afp-justify-center afp-min-h-screen\">\n <div\n class=\"afp-w-12 afp-h-12 afp-border-4 afp-border-line-strong afp-border-t-spinner-head afp-rounded-full afp-animate-spin\"\n ></div>\n </div>\n }\n\n @if (!error()) {\n <div class=\"afp-flex afp-flex-col afp-items-center afp-w-full\">\n <div class=\"pdf-pages afp-flex afp-flex-col afp-gap-4 afp-w-full afp-items-center\"></div>\n </div>\n }\n </div>\n </div>\n `,\n }]\n }], ctorParameters: () => [] });\n\nexport { PdfRenderer };\n//# sourceMappingURL=eternalheart-angular-file-preview-index-6dZS_Cfs.mjs.map\n"],"names":["installUint8ArrayHexBase64Polyfill","getPdfDocumentOptions","configurePdfWorker"],"mappings":"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"}
@@ -0,0 +1,231 @@
1
+ import * as i0 from '@angular/core';
2
+ import { input, inject, DestroyRef, signal, viewChild, afterNextRender, effect, untracked, ChangeDetectionStrategy, Component } from '@angular/core';
3
+ import ExcelJS from 'exceljs';
4
+ import Spreadsheet from 'x-data-spreadsheet';
5
+ import { L as LocaleService, R as RequestService, g as getFallbackTranslator, C as Cg, s as sg, y as yg, c as gg } from './eternalheart-angular-file-preview-eternalheart-angular-file-preview-UobTf36G.mjs';
6
+ import { R as RendererError } from './eternalheart-angular-file-preview-eternalheart-angular-file-preview-RendererError-DtNihCIX-DtNihCIX.mjs';
7
+
8
+ class XlsxRenderer {
9
+ constructor() {
10
+ this.url = input.required();
11
+ this.locale = inject(LocaleService, { optional: true });
12
+ this.request = inject(RequestService, { optional: true });
13
+ this.destroyRef = inject(DestroyRef);
14
+ this.t = this.locale?.t() ?? getFallbackTranslator();
15
+ this.loading = signal(true);
16
+ this.error = signal(null);
17
+ this.containerRef = viewChild('containerRef');
18
+ this.sheetData = null;
19
+ this.resizeObserver = null;
20
+ this.resizeTimeout = null;
21
+ this.lastDimensions = { width: 0, height: 0 };
22
+ this.urlWatchReady = false;
23
+ this.getToolbarGroups = () => [];
24
+ afterNextRender(() => {
25
+ const el = this.containerRef()?.nativeElement;
26
+ if (!el)
27
+ return;
28
+ let isInitialRender = true;
29
+ this.resizeObserver = new ResizeObserver(() => {
30
+ if (isInitialRender) {
31
+ isInitialRender = false;
32
+ this.lastDimensions = this.calculateDimensions();
33
+ return;
34
+ }
35
+ const newDimensions = this.calculateDimensions();
36
+ const widthDiff = Math.abs(this.lastDimensions.width - newDimensions.width);
37
+ const heightDiff = Math.abs(this.lastDimensions.height - newDimensions.height);
38
+ if (widthDiff < 10 && heightDiff < 10)
39
+ return;
40
+ this.lastDimensions = newDimensions;
41
+ if (this.resizeTimeout !== null)
42
+ clearTimeout(this.resizeTimeout);
43
+ this.resizeTimeout = window.setTimeout(() => {
44
+ if (this.sheetData)
45
+ this.mountSpreadsheet();
46
+ }, 500);
47
+ });
48
+ this.resizeObserver.observe(el);
49
+ this.urlWatchReady = true;
50
+ window.setTimeout(() => {
51
+ requestAnimationFrame(() => void this.loadExcel());
52
+ }, 100);
53
+ });
54
+ this.destroyRef.onDestroy(() => {
55
+ if (this.resizeObserver)
56
+ this.resizeObserver.disconnect();
57
+ if (this.resizeTimeout !== null)
58
+ clearTimeout(this.resizeTimeout);
59
+ this.sheetData = null;
60
+ const el = this.containerRef()?.nativeElement;
61
+ if (el)
62
+ el.innerHTML = '';
63
+ });
64
+ effect(() => {
65
+ const newUrl = this.url();
66
+ if (!this.urlWatchReady)
67
+ return;
68
+ if (newUrl) {
69
+ untracked(() => {
70
+ void this.loadExcel();
71
+ });
72
+ }
73
+ });
74
+ }
75
+ calculateDimensions() {
76
+ const el = this.containerRef()?.nativeElement;
77
+ if (!el)
78
+ return { width: 800, height: 600 };
79
+ const rawWidth = el.clientWidth;
80
+ const rawHeight = el.clientHeight;
81
+ const width = rawWidth > 100 ? rawWidth : 800;
82
+ const height = rawHeight > 100 ? rawHeight : 600;
83
+ return { width, height };
84
+ }
85
+ mountSpreadsheet() {
86
+ const el = this.containerRef()?.nativeElement;
87
+ if (!el || !this.sheetData)
88
+ return;
89
+ el.innerHTML = '';
90
+ const { width, height } = this.calculateDimensions();
91
+ const isMobile = width < 640;
92
+ const s = new Spreadsheet(el, {
93
+ mode: 'read',
94
+ showToolbar: false,
95
+ showContextmenu: false,
96
+ showGrid: true,
97
+ row: {
98
+ len: 100,
99
+ height: 25,
100
+ },
101
+ col: {
102
+ len: 26,
103
+ width: isMobile ? 80 : 100,
104
+ indexWidth: isMobile ? 40 : 60,
105
+ minWidth: isMobile ? 40 : 60,
106
+ },
107
+ view: {
108
+ height: () => height,
109
+ width: () => width,
110
+ },
111
+ });
112
+ s.loadData(this.sheetData);
113
+ }
114
+ async loadExcel() {
115
+ if (!this.containerRef()?.nativeElement)
116
+ return;
117
+ this.loading.set(true);
118
+ this.error.set(null);
119
+ try {
120
+ const fetcher = this.request?.fetcher() ?? ((u, init) => fetch(u, init));
121
+ const response = await fetcher(this.url(), {
122
+ mode: 'cors',
123
+ credentials: 'omit',
124
+ redirect: 'follow',
125
+ });
126
+ if (!response.ok) {
127
+ if (response.status === 404)
128
+ throw new Error(this.t('xlsx.not_found'));
129
+ if (response.status === 403)
130
+ throw new Error('无权限访问此文件');
131
+ throw new Error(`文件加载失败 (${response.status})`);
132
+ }
133
+ const arrayBuffer = await response.arrayBuffer();
134
+ if (arrayBuffer.byteLength === 0) {
135
+ throw new Error('文件为空');
136
+ }
137
+ const data = Cg(arrayBuffer)
138
+ ? sg(yg(arrayBuffer))
139
+ : gg(await new ExcelJS.Workbook().xlsx.load(arrayBuffer));
140
+ this.sheetData = data;
141
+ this.mountSpreadsheet();
142
+ this.loading.set(false);
143
+ }
144
+ catch (err) {
145
+ console.error('Excel 解析错误:', err);
146
+ let errorMsg = this.t('xlsx.parse_failed');
147
+ if (err instanceof Error)
148
+ errorMsg = err.message;
149
+ this.error.set(errorMsg);
150
+ this.loading.set(false);
151
+ }
152
+ }
153
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: XlsxRenderer, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
154
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.25", type: XlsxRenderer, isStandalone: true, selector: "afp-xlsx-renderer", inputs: { url: { classPropertyName: "url", publicName: "url", isSignal: true, isRequired: true, transformFunction: null } }, host: { classAttribute: "afp-block afp-w-full afp-h-full" }, viewQueries: [{ propertyName: "containerRef", first: true, predicate: ["containerRef"], descendants: true, isSignal: true }], ngImport: i0, template: `
155
+ <div class="afp-relative afp-flex afp-flex-col afp-items-center afp-w-full afp-h-full">
156
+ @if (loading()) {
157
+ <div
158
+ class="afp-absolute afp-inset-0 afp-flex afp-items-center afp-justify-center afp-bg-surface-toolbar afp-backdrop-blur-sm afp-z-10"
159
+ >
160
+ <div class="afp-text-center">
161
+ <div
162
+ class="afp-w-10 afp-h-10 md:afp-w-12 md:afp-h-12 afp-mx-auto afp-mb-3 afp-border-4 afp-border-line-strong afp-border-t-spinner-head afp-rounded-full afp-animate-spin"
163
+ ></div>
164
+ <p class="afp-text-xs md:afp-text-sm afp-text-fg-secondary afp-font-medium">{{ t('xlsx.loading') }}</p>
165
+ </div>
166
+ </div>
167
+ }
168
+
169
+ @if (error() && !loading()) {
170
+ <afp-renderer-error
171
+ [message]="t('xlsx.load_failed')"
172
+ [detail]="error()!"
173
+ class="afp-absolute afp-inset-0 afp-bg-surface-toolbar afp-backdrop-blur-sm afp-z-10"
174
+ />
175
+ }
176
+
177
+ @if (!error()) {
178
+ <div
179
+ #containerRef
180
+ class="xlsx-spreadsheet-container afp-w-full afp-h-full"
181
+ [style.opacity]="loading() ? 0 : 1"
182
+ ></div>
183
+ }
184
+ </div>
185
+ `, isInline: true, dependencies: [{ kind: "component", type: RendererError, selector: "afp-renderer-error", inputs: ["message", "detail", "showIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
186
+ }
187
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: XlsxRenderer, decorators: [{
188
+ type: Component,
189
+ args: [{
190
+ selector: 'afp-xlsx-renderer',
191
+ standalone: true,
192
+ imports: [RendererError],
193
+ changeDetection: ChangeDetectionStrategy.OnPush,
194
+ host: { class: 'afp-block afp-w-full afp-h-full' },
195
+ template: `
196
+ <div class="afp-relative afp-flex afp-flex-col afp-items-center afp-w-full afp-h-full">
197
+ @if (loading()) {
198
+ <div
199
+ class="afp-absolute afp-inset-0 afp-flex afp-items-center afp-justify-center afp-bg-surface-toolbar afp-backdrop-blur-sm afp-z-10"
200
+ >
201
+ <div class="afp-text-center">
202
+ <div
203
+ class="afp-w-10 afp-h-10 md:afp-w-12 md:afp-h-12 afp-mx-auto afp-mb-3 afp-border-4 afp-border-line-strong afp-border-t-spinner-head afp-rounded-full afp-animate-spin"
204
+ ></div>
205
+ <p class="afp-text-xs md:afp-text-sm afp-text-fg-secondary afp-font-medium">{{ t('xlsx.loading') }}</p>
206
+ </div>
207
+ </div>
208
+ }
209
+
210
+ @if (error() && !loading()) {
211
+ <afp-renderer-error
212
+ [message]="t('xlsx.load_failed')"
213
+ [detail]="error()!"
214
+ class="afp-absolute afp-inset-0 afp-bg-surface-toolbar afp-backdrop-blur-sm afp-z-10"
215
+ />
216
+ }
217
+
218
+ @if (!error()) {
219
+ <div
220
+ #containerRef
221
+ class="xlsx-spreadsheet-container afp-w-full afp-h-full"
222
+ [style.opacity]="loading() ? 0 : 1"
223
+ ></div>
224
+ }
225
+ </div>
226
+ `,
227
+ }]
228
+ }], ctorParameters: () => [] });
229
+
230
+ export { XlsxRenderer };
231
+ //# sourceMappingURL=eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-B1ANUCTy-BRs7TMLn.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-B1ANUCTy-BRs7TMLn.mjs","sources":["../fesm2022/eternalheart-angular-file-preview-index-B1ANUCTy.mjs"],"sourcesContent":["import * as i0 from '@angular/core';\nimport { input, inject, DestroyRef, signal, viewChild, afterNextRender, effect, untracked, ChangeDetectionStrategy, Component } from '@angular/core';\nimport ExcelJS from 'exceljs';\nimport Spreadsheet from 'x-data-spreadsheet';\nimport { L as LocaleService, R as RequestService, g as getFallbackTranslator } from './eternalheart-angular-file-preview-eternalheart-angular-file-preview-DXwNhxAB.mjs';\nimport { R as RendererError } from './eternalheart-angular-file-preview-RendererError-DtNihCIX.mjs';\nimport { isLegacyXls, convertLegacyXlsToSpreadsheetData, parseLegacyXls, convertWorkbookToSpreadsheetData } from '@eternalheart/file-preview-core';\n\nclass XlsxRenderer {\n constructor() {\n this.url = input.required();\n this.locale = inject(LocaleService, { optional: true });\n this.request = inject(RequestService, { optional: true });\n this.destroyRef = inject(DestroyRef);\n this.t = this.locale?.t() ?? getFallbackTranslator();\n this.loading = signal(true);\n this.error = signal(null);\n this.containerRef = viewChild('containerRef');\n this.sheetData = null;\n this.resizeObserver = null;\n this.resizeTimeout = null;\n this.lastDimensions = { width: 0, height: 0 };\n this.urlWatchReady = false;\n this.getToolbarGroups = () => [];\n afterNextRender(() => {\n const el = this.containerRef()?.nativeElement;\n if (!el)\n return;\n let isInitialRender = true;\n this.resizeObserver = new ResizeObserver(() => {\n if (isInitialRender) {\n isInitialRender = false;\n this.lastDimensions = this.calculateDimensions();\n return;\n }\n const newDimensions = this.calculateDimensions();\n const widthDiff = Math.abs(this.lastDimensions.width - newDimensions.width);\n const heightDiff = Math.abs(this.lastDimensions.height - newDimensions.height);\n if (widthDiff < 10 && heightDiff < 10)\n return;\n this.lastDimensions = newDimensions;\n if (this.resizeTimeout !== null)\n clearTimeout(this.resizeTimeout);\n this.resizeTimeout = window.setTimeout(() => {\n if (this.sheetData)\n this.mountSpreadsheet();\n }, 500);\n });\n this.resizeObserver.observe(el);\n this.urlWatchReady = true;\n window.setTimeout(() => {\n requestAnimationFrame(() => void this.loadExcel());\n }, 100);\n });\n this.destroyRef.onDestroy(() => {\n if (this.resizeObserver)\n this.resizeObserver.disconnect();\n if (this.resizeTimeout !== null)\n clearTimeout(this.resizeTimeout);\n this.sheetData = null;\n const el = this.containerRef()?.nativeElement;\n if (el)\n el.innerHTML = '';\n });\n effect(() => {\n const newUrl = this.url();\n if (!this.urlWatchReady)\n return;\n if (newUrl) {\n untracked(() => {\n void this.loadExcel();\n });\n }\n });\n }\n calculateDimensions() {\n const el = this.containerRef()?.nativeElement;\n if (!el)\n return { width: 800, height: 600 };\n const rawWidth = el.clientWidth;\n const rawHeight = el.clientHeight;\n const width = rawWidth > 100 ? rawWidth : 800;\n const height = rawHeight > 100 ? rawHeight : 600;\n return { width, height };\n }\n mountSpreadsheet() {\n const el = this.containerRef()?.nativeElement;\n if (!el || !this.sheetData)\n return;\n el.innerHTML = '';\n const { width, height } = this.calculateDimensions();\n const isMobile = width < 640;\n const s = new Spreadsheet(el, {\n mode: 'read',\n showToolbar: false,\n showContextmenu: false,\n showGrid: true,\n row: {\n len: 100,\n height: 25,\n },\n col: {\n len: 26,\n width: isMobile ? 80 : 100,\n indexWidth: isMobile ? 40 : 60,\n minWidth: isMobile ? 40 : 60,\n },\n view: {\n height: () => height,\n width: () => width,\n },\n });\n s.loadData(this.sheetData);\n }\n async loadExcel() {\n if (!this.containerRef()?.nativeElement)\n return;\n this.loading.set(true);\n this.error.set(null);\n try {\n const fetcher = this.request?.fetcher() ?? ((u, init) => fetch(u, init));\n const response = await fetcher(this.url(), {\n mode: 'cors',\n credentials: 'omit',\n redirect: 'follow',\n });\n if (!response.ok) {\n if (response.status === 404)\n throw new Error(this.t('xlsx.not_found'));\n if (response.status === 403)\n throw new Error('无权限访问此文件');\n throw new Error(`文件加载失败 (${response.status})`);\n }\n const arrayBuffer = await response.arrayBuffer();\n if (arrayBuffer.byteLength === 0) {\n throw new Error('文件为空');\n }\n const data = isLegacyXls(arrayBuffer)\n ? convertLegacyXlsToSpreadsheetData(parseLegacyXls(arrayBuffer))\n : convertWorkbookToSpreadsheetData(await new ExcelJS.Workbook().xlsx.load(arrayBuffer));\n this.sheetData = data;\n this.mountSpreadsheet();\n this.loading.set(false);\n }\n catch (err) {\n console.error('Excel 解析错误:', err);\n let errorMsg = this.t('xlsx.parse_failed');\n if (err instanceof Error)\n errorMsg = err.message;\n this.error.set(errorMsg);\n this.loading.set(false);\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"19.2.25\", ngImport: i0, type: XlsxRenderer, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"19.2.25\", type: XlsxRenderer, isStandalone: true, selector: \"afp-xlsx-renderer\", inputs: { url: { classPropertyName: \"url\", publicName: \"url\", isSignal: true, isRequired: true, transformFunction: null } }, host: { classAttribute: \"afp-block afp-w-full afp-h-full\" }, viewQueries: [{ propertyName: \"containerRef\", first: true, predicate: [\"containerRef\"], descendants: true, isSignal: true }], ngImport: i0, template: `\n <div class=\"afp-relative afp-flex afp-flex-col afp-items-center afp-w-full afp-h-full\">\n @if (loading()) {\n <div\n class=\"afp-absolute afp-inset-0 afp-flex afp-items-center afp-justify-center afp-bg-surface-toolbar afp-backdrop-blur-sm afp-z-10\"\n >\n <div class=\"afp-text-center\">\n <div\n class=\"afp-w-10 afp-h-10 md:afp-w-12 md:afp-h-12 afp-mx-auto afp-mb-3 afp-border-4 afp-border-line-strong afp-border-t-spinner-head afp-rounded-full afp-animate-spin\"\n ></div>\n <p class=\"afp-text-xs md:afp-text-sm afp-text-fg-secondary afp-font-medium\">{{ t('xlsx.loading') }}</p>\n </div>\n </div>\n }\n\n @if (error() && !loading()) {\n <afp-renderer-error\n [message]=\"t('xlsx.load_failed')\"\n [detail]=\"error()!\"\n class=\"afp-absolute afp-inset-0 afp-bg-surface-toolbar afp-backdrop-blur-sm afp-z-10\"\n />\n }\n\n @if (!error()) {\n <div\n #containerRef\n class=\"xlsx-spreadsheet-container afp-w-full afp-h-full\"\n [style.opacity]=\"loading() ? 0 : 1\"\n ></div>\n }\n </div>\n `, isInline: true, dependencies: [{ kind: \"component\", type: RendererError, selector: \"afp-renderer-error\", inputs: [\"message\", \"detail\", \"showIcon\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"19.2.25\", ngImport: i0, type: XlsxRenderer, decorators: [{\n type: Component,\n args: [{\n selector: 'afp-xlsx-renderer',\n standalone: true,\n imports: [RendererError],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'afp-block afp-w-full afp-h-full' },\n template: `\n <div class=\"afp-relative afp-flex afp-flex-col afp-items-center afp-w-full afp-h-full\">\n @if (loading()) {\n <div\n class=\"afp-absolute afp-inset-0 afp-flex afp-items-center afp-justify-center afp-bg-surface-toolbar afp-backdrop-blur-sm afp-z-10\"\n >\n <div class=\"afp-text-center\">\n <div\n class=\"afp-w-10 afp-h-10 md:afp-w-12 md:afp-h-12 afp-mx-auto afp-mb-3 afp-border-4 afp-border-line-strong afp-border-t-spinner-head afp-rounded-full afp-animate-spin\"\n ></div>\n <p class=\"afp-text-xs md:afp-text-sm afp-text-fg-secondary afp-font-medium\">{{ t('xlsx.loading') }}</p>\n </div>\n </div>\n }\n\n @if (error() && !loading()) {\n <afp-renderer-error\n [message]=\"t('xlsx.load_failed')\"\n [detail]=\"error()!\"\n class=\"afp-absolute afp-inset-0 afp-bg-surface-toolbar afp-backdrop-blur-sm afp-z-10\"\n />\n }\n\n @if (!error()) {\n <div\n #containerRef\n class=\"xlsx-spreadsheet-container afp-w-full afp-h-full\"\n [style.opacity]=\"loading() ? 0 : 1\"\n ></div>\n }\n </div>\n `,\n }]\n }], ctorParameters: () => [] });\n\nexport { XlsxRenderer };\n//# sourceMappingURL=eternalheart-angular-file-preview-index-B1ANUCTy.mjs.map\n"],"names":["isLegacyXls","convertLegacyXlsToSpreadsheetData","parseLegacyXls","convertWorkbookToSpreadsheetData"],"mappings":"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"}