@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-CQwhffym-DAGw4Xy_.mjs","sources":["../fesm2022/eternalheart-angular-file-preview-index-CQwhffym.mjs"],"sourcesContent":["import * as i0 from '@angular/core';\nimport { signal, input, inject, DestroyRef, viewChild, computed, effect, untracked, afterNextRender, ChangeDetectionStrategy, Component } from '@angular/core';\nimport * as i1 from 'lucide-angular';\nimport { Play, Pause, SkipBack, SkipForward, Repeat, VolumeX, Volume1, Volume2, LucideAngularModule } from 'lucide-angular';\nimport { L as LocaleService, g as getFallbackTranslator } from './eternalheart-angular-file-preview-eternalheart-angular-file-preview-DXwNhxAB.mjs';\nimport { formatTime } from '@eternalheart/file-preview-core';\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';\n\nfunction createAudioPlayer() {\n const isPlaying = signal(false);\n const isLoading = signal(true);\n const currentTime = signal(0);\n const duration = signal(0);\n const volume = signal(1);\n const isMuted = signal(false);\n const isLoop = signal(false);\n const error = signal(null);\n let audio = null;\n let unbind = null;\n const bind = (el) => {\n unbind?.();\n unbind = null;\n audio = el;\n if (!el)\n return;\n isLoading.set(true);\n error.set(null);\n const onTimeUpdate = () => {\n if (!isNaN(el.currentTime))\n currentTime.set(el.currentTime);\n };\n const onDurationChange = () => {\n if (!isNaN(el.duration) && isFinite(el.duration))\n duration.set(el.duration);\n };\n const onCanPlay = () => {\n isLoading.set(false);\n onDurationChange();\n };\n const onWaiting = () => isLoading.set(true);\n const onPlaying = () => {\n isLoading.set(false);\n isPlaying.set(true);\n };\n const onPlay = () => isPlaying.set(true);\n const onPause = () => isPlaying.set(false);\n const onEnded = () => isPlaying.set(false);\n const onError = () => {\n error.set('audio.load_failed');\n isLoading.set(false);\n };\n el.addEventListener('timeupdate', onTimeUpdate);\n el.addEventListener('loadedmetadata', onDurationChange);\n el.addEventListener('durationchange', onDurationChange);\n el.addEventListener('canplay', onCanPlay);\n el.addEventListener('waiting', onWaiting);\n el.addEventListener('playing', onPlaying);\n el.addEventListener('play', onPlay);\n el.addEventListener('pause', onPause);\n el.addEventListener('ended', onEnded);\n el.addEventListener('error', onError);\n if (el.readyState >= 3) {\n isLoading.set(false);\n onDurationChange();\n }\n unbind = () => {\n el.removeEventListener('timeupdate', onTimeUpdate);\n el.removeEventListener('loadedmetadata', onDurationChange);\n el.removeEventListener('durationchange', onDurationChange);\n el.removeEventListener('canplay', onCanPlay);\n el.removeEventListener('waiting', onWaiting);\n el.removeEventListener('playing', onPlaying);\n el.removeEventListener('play', onPlay);\n el.removeEventListener('pause', onPause);\n el.removeEventListener('ended', onEnded);\n el.removeEventListener('error', onError);\n };\n };\n const togglePlay = () => {\n if (!audio)\n return;\n if (audio.paused)\n void audio.play();\n else\n audio.pause();\n };\n const seek = (time) => {\n if (!audio)\n return;\n audio.currentTime = time;\n currentTime.set(time);\n };\n const skip = (seconds) => {\n if (!audio)\n return;\n audio.currentTime = Math.max(0, Math.min(audio.currentTime + seconds, audio.duration || Infinity));\n currentTime.set(audio.currentTime);\n };\n const setVolume = (v) => {\n volume.set(v);\n if (audio)\n audio.volume = v;\n if (v > 0 && isMuted()) {\n isMuted.set(false);\n if (audio)\n audio.muted = false;\n }\n };\n const toggleMute = () => {\n const next = !isMuted();\n isMuted.set(next);\n if (audio)\n audio.muted = next;\n };\n const toggleLoop = () => {\n const next = !isLoop();\n isLoop.set(next);\n if (audio)\n audio.loop = next;\n };\n const formattedCurrent = () => formatTime(currentTime());\n const formattedDuration = () => formatTime(duration());\n const destroy = () => {\n unbind?.();\n unbind = null;\n audio = null;\n };\n return {\n isPlaying,\n isLoading,\n currentTime,\n duration,\n volume,\n isMuted,\n isLoop,\n error,\n bind,\n togglePlay,\n seek,\n skip,\n setVolume,\n toggleMute,\n toggleLoop,\n formattedCurrent,\n formattedDuration,\n destroy,\n };\n}\n\nclass AudioRenderer {\n constructor() {\n this.url = input.required();\n this.fileName = input.required();\n this.emitter = new ToolbarEventEmitter();\n this.locale = inject(LocaleService, { optional: true });\n this.destroyRef = inject(DestroyRef);\n this.t = this.locale?.t() ?? getFallbackTranslator();\n this.formatTime = formatTime;\n this.Math = Math;\n this.playIcon = Play;\n this.pauseIcon = Pause;\n this.skipBackIcon = SkipBack;\n this.skipForwardIcon = SkipForward;\n this.repeatIcon = Repeat;\n this.player = createAudioPlayer();\n this.isPlaying = this.player.isPlaying;\n this.isLoop = this.player.isLoop;\n this.currentTime = this.player.currentTime;\n this.duration = this.player.duration;\n this.volume = this.player.volume;\n this.isMuted = this.player.isMuted;\n this.error = this.player.error;\n this.togglePlay = this.player.togglePlay;\n this.toggleMute = this.player.toggleMute;\n this.toggleLoop = this.player.toggleLoop;\n this.showVolume = signal(false);\n this.isCompact = signal(false);\n this.controlScale = signal(1);\n this.isDragging = signal(false);\n this.dragTime = signal(0);\n this.containerRef = viewChild('containerRef');\n this.volumeRef = viewChild('volumeRef');\n this.audioEl = viewChild('audioRef');\n this.volumeHideTimer = null;\n this.resizeObserver = null;\n this.bindRaf = 0;\n this.vinylBase = 260;\n this.vinylHeightBase = 240;\n this.displayTime = computed(() => this.isDragging() ? this.dragTime() : this.currentTime());\n this.progress = computed(() => this.duration() > 0 ? this.displayTime() / this.duration() : 0);\n this.vinylScale = computed(() => (this.isCompact() ? 0.72 : 1));\n this.finalVinylScale = computed(() => this.vinylScale() * this.controlScale());\n this.volumeIcon = computed(() => {\n if (this.isMuted() || this.volume() === 0)\n return VolumeX;\n if (this.volume() < 0.5)\n return Volume1;\n return Volume2;\n });\n this.timeRowClass = computed(() => this.isCompact()\n ? 'afp-flex afp-justify-between afp-text-fg-tertiary afp-text-[10px] afp-mt-1.5'\n : 'afp-flex afp-justify-between afp-text-fg-tertiary afp-text-xs afp-mt-2.5');\n this.getToolbarGroups = () => [];\n this.onToolbarChange = (listener) => this.emitter.subscribe(listener);\n this.checkSize = () => {\n const el = this.containerRef()?.nativeElement;\n if (!el)\n return;\n this.isCompact.set(el.clientHeight < 580);\n const width = el.clientWidth;\n const baseWidth = 464;\n const minVisualWidth = 320;\n const minScale = minVisualWidth / baseWidth;\n const scale = width >= baseWidth ? 1 : Math.max(minScale, width / baseWidth);\n this.controlScale.set(scale);\n };\n this.handleClickOutside = (e) => {\n const el = this.volumeRef()?.nativeElement;\n if (el && !el.contains(e.target)) {\n this.showVolume.set(false);\n }\n };\n effect(() => {\n this.url();\n const el = this.audioEl()?.nativeElement ?? null;\n untracked(() => {\n cancelAnimationFrame(this.bindRaf);\n this.bindRaf = requestAnimationFrame(() => {\n this.player.bind(el);\n });\n });\n });\n afterNextRender(() => {\n this.checkSize();\n const el = this.containerRef()?.nativeElement;\n if (el) {\n this.resizeObserver = new ResizeObserver(() => this.checkSize());\n this.resizeObserver.observe(el);\n }\n document.addEventListener('mousedown', this.handleClickOutside);\n });\n this.destroyRef.onDestroy(() => {\n document.removeEventListener('mousedown', this.handleClickOutside);\n if (this.volumeHideTimer !== null)\n clearTimeout(this.volumeHideTimer);\n cancelAnimationFrame(this.bindRaf);\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n this.player.destroy();\n });\n }\n skip(seconds) {\n const dur = this.duration();\n const next = Math.max(0, Math.min(this.currentTime() + seconds, dur || Infinity));\n this.player.seek(next);\n }\n onProgressPointerDown() {\n this.dragTime.set(this.currentTime());\n this.isDragging.set(true);\n }\n onProgressInput(e) {\n const value = parseFloat(e.target.value);\n if (this.isDragging()) {\n this.dragTime.set(value);\n }\n else {\n this.player.seek(value);\n }\n }\n onProgressPointerUp(e) {\n const value = parseFloat(e.target.value);\n this.player.seek(value);\n this.isDragging.set(false);\n }\n onVolumeInput(e) {\n this.player.setVolume(parseFloat(e.target.value));\n }\n handleVolumeEnter() {\n if (this.volumeHideTimer !== null)\n clearTimeout(this.volumeHideTimer);\n this.showVolume.set(true);\n }\n handleVolumeLeave() {\n this.volumeHideTimer = window.setTimeout(() => {\n this.showVolume.set(false);\n }, 300);\n }\n vinylBoxStyle() {\n const scale = this.finalVinylScale();\n const compact = this.isCompact();\n const m = compact ? `${-(this.vinylHeightBase * (1 - scale)) / 2}px` : '0';\n return `width:${this.vinylBase}px;height:${this.vinylHeightBase}px;transform:scale(${scale});transform-origin:center center;margin-top:${m};margin-bottom:${m}`;\n }\n glowStyle() {\n return `width:220px;height:220px;top:18px;left:8px;background:radial-gradient(circle, rgba(234,5,96,0.16) 0%, rgba(136,34,255,0.08) 42%, transparent 70%);opacity:${this.isPlaying() ? 0.7 : 0.2};transition:opacity 0.5s`;\n }\n vinylStyle() {\n const playing = this.isPlaying();\n const shadow = playing\n ? '0 0 36px rgba(241,7,18,0.18), 0 0 20px rgba(136,34,255,0.14), 0 8px 32px rgba(0,0,0,0.4), inset 0 0 20px rgba(0,0,0,0.4)'\n : '0 8px 32px rgba(0,0,0,0.4), inset 0 0 20px rgba(0,0,0,0.4)';\n return `width:200px;height:200px;top:28px;left:18px;background:radial-gradient(circle at center, transparent 95%, rgba(30,30,30,0.8) 95.5%, #111 97%),radial-gradient(circle at center, transparent 38%, rgba(50,50,50,0.5) 38.15%, transparent 38.4%),radial-gradient(circle at center, transparent 45%, rgba(50,50,50,0.3) 45.15%, transparent 45.4%),radial-gradient(circle at center, transparent 52%, rgba(50,50,50,0.5) 52.15%, transparent 52.4%),radial-gradient(circle at center, transparent 59%, rgba(50,50,50,0.3) 59.15%, transparent 59.4%),radial-gradient(circle at center, transparent 66%, rgba(50,50,50,0.5) 66.15%, transparent 66.4%),radial-gradient(circle at center, transparent 73%, rgba(50,50,50,0.3) 73.15%, transparent 73.4%),radial-gradient(circle at center, transparent 80%, rgba(50,50,50,0.4) 80.15%, transparent 80.4%),radial-gradient(circle at center, transparent 87%, rgba(50,50,50,0.3) 87.15%, transparent 87.4%),conic-gradient(from 0deg, #1c1c1c, #232323, #1a1a1a, #262626, #1c1c1c, #212121, #1a1a1a, #252525, #1c1c1c, #232323, #1a1a1a, #262626, #1c1c1c);box-shadow:${shadow};animation:afp-vinyl-spin 8s linear infinite;animation-play-state:${playing ? 'running' : 'paused'}`;\n }\n labelStyle() {\n return 'width:34%;height:34%;top:33%;left:33%;background:radial-gradient(circle at 40% 38%, #FA31A1, #F10712, #EA0560, #8822FF);box-shadow:inset 0 1px 3px rgba(255,255,255,0.25), inset 0 -1px 3px rgba(0,0,0,0.3), 0 0 8px rgba(0,0,0,0.3)';\n }\n spindleStyle() {\n return 'width:14%;height:14%;top:43%;left:43%;background:radial-gradient(circle at 40% 40%, #333, #0d0d0d);box-shadow:inset 0 1px 3px rgba(0,0,0,0.9), 0 0 2px rgba(0,0,0,0.5)';\n }\n tonearmStyle() {\n return `top:-6px;right:2px;width:100px;height:120px;transform-origin:76px 16px;z-index:5;transform:rotate(${this.isPlaying() ? 16 : 0}deg);transition:transform 0.8s cubic-bezier(0.4, 0, 0.2, 1)`;\n }\n panelStyle() {\n const scale = this.controlScale();\n const transform = scale < 1 ? `scale(${scale})` : undefined;\n const marginBottom = scale < 1 ? `${-(1 - scale) * 100}px` : undefined;\n return `width:448px;backdrop-filter:blur(16px)${transform ? `;transform:${transform};transform-origin:top center` : ''}${marginBottom ? `;margin-bottom:${marginBottom}` : ''}`;\n }\n progressFillStyle() {\n return `width:${this.progress() * 100}%;background:var(--fp-accent-gradient);box-shadow:${this.isPlaying() ? '0 0 8px rgba(136,34,255,0.4)' : 'none'};transition:${this.isDragging() ? 'none' : 'width 0.1s linear'}`;\n }\n playBtnStyle() {\n return 'background:var(--fp-accent-gradient);color:var(--fp-fg-inverse);box-shadow:0 4px 20px rgba(136,34,255,0.35)';\n }\n volumePopupStyle() {\n return 'left:50%;margin-left:-27px;backdrop-filter:blur(16px)';\n }\n volumeFillStyle() {\n const h = (this.isMuted() ? 0 : this.volume()) * 100;\n return `width:3px;height:${h}%;background:var(--fp-accent-hover);transition:height 0.1s linear`;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"19.2.25\", ngImport: i0, type: AudioRenderer, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"19.2.25\", type: AudioRenderer, isStandalone: true, selector: \"afp-audio-renderer\", inputs: { url: { classPropertyName: \"url\", publicName: \"url\", isSignal: true, isRequired: true, transformFunction: null }, fileName: { classPropertyName: \"fileName\", publicName: \"fileName\", 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 }, { propertyName: \"volumeRef\", first: true, predicate: [\"volumeRef\"], descendants: true, isSignal: true }, { propertyName: \"audioEl\", first: true, predicate: [\"audioRef\"], descendants: true, isSignal: true }], ngImport: i0, template: `\n @if (error(); as err) {\n <afp-renderer-error [message]=\"t(err)\" />\n } @else {\n <div\n #containerRef\n class=\"afp-flex afp-flex-col afp-items-center afp-justify-center afp-w-full afp-h-full afp-select-none afp-overflow-auto\"\n [class.afp-p-3]=\"isCompact()\"\n [class.afp-gap-3]=\"isCompact()\"\n [class.afp-p-6]=\"!isCompact()\"\n [class.afp-gap-6]=\"!isCompact()\"\n >\n <div class=\"afp-relative afp-flex-shrink-0\" [attr.style]=\"vinylBoxStyle()\">\n <div\n class=\"afp-absolute afp-rounded-full\"\n [attr.style]=\"glowStyle()\"\n ></div>\n\n <div\n class=\"afp-absolute afp-rounded-full afp-overflow-hidden\"\n [attr.style]=\"vinylStyle()\"\n >\n <div class=\"afp-absolute afp-rounded-full\" [attr.style]=\"labelStyle()\">\n <div class=\"afp-absolute afp-rounded-full\" [attr.style]=\"spindleStyle()\"></div>\n </div>\n </div>\n\n <div class=\"afp-absolute\" [attr.style]=\"tonearmStyle()\">\n <svg width=\"100\" height=\"120\" viewBox=\"0 0 100 120\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"76\" cy=\"16\" r=\"13\" fill=\"rgba(0,0,0,0.3)\" />\n <circle cx=\"76\" cy=\"16\" r=\"11\" fill=\"url(#afp-baseGrad)\" />\n <circle cx=\"76\" cy=\"16\" r=\"6\" fill=\"url(#afp-baseInnerGrad)\" />\n <circle cx=\"76\" cy=\"16\" r=\"2.5\" fill=\"#222\" stroke=\"#555\" stroke-width=\"0.5\" />\n <path d=\"M74 22 L56 88\" stroke=\"url(#afp-armGrad)\" stroke-width=\"3.5\" stroke-linecap=\"round\" />\n <rect x=\"50\" y=\"86\" width=\"12\" height=\"7\" rx=\"1.5\" fill=\"url(#afp-headGrad)\" />\n <rect x=\"52.5\" y=\"92\" width=\"7\" height=\"9\" rx=\"1\" fill=\"url(#afp-cartridgeGrad)\" />\n <line x1=\"56\" y1=\"101\" x2=\"56\" y2=\"105\" stroke=\"#bbb\" stroke-width=\"1.2\" stroke-linecap=\"round\" />\n <circle cx=\"56\" cy=\"105.5\" r=\"0.8\" fill=\"#ddd\" />\n\n <defs>\n <radialGradient id=\"afp-baseGrad\" cx=\"40%\" cy=\"35%\">\n <stop offset=\"0%\" stop-color=\"#555\" />\n <stop offset=\"100%\" stop-color=\"#1a1a1a\" />\n </radialGradient>\n <radialGradient id=\"afp-baseInnerGrad\" cx=\"40%\" cy=\"35%\">\n <stop offset=\"0%\" stop-color=\"#666\" />\n <stop offset=\"100%\" stop-color=\"#333\" />\n </radialGradient>\n <linearGradient id=\"afp-armGrad\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stop-color=\"#555\" />\n <stop offset=\"50%\" stop-color=\"#444\" />\n <stop offset=\"100%\" stop-color=\"#333\" />\n </linearGradient>\n <linearGradient id=\"afp-headGrad\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stop-color=\"#555\" />\n <stop offset=\"100%\" stop-color=\"#333\" />\n </linearGradient>\n <linearGradient id=\"afp-cartridgeGrad\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stop-color=\"#444\" />\n <stop offset=\"100%\" stop-color=\"#222\" />\n </linearGradient>\n </defs>\n </svg>\n </div>\n </div>\n\n <div\n class=\"afp-text-center afp-max-w-md afp-flex-shrink-0\"\n [class.afp-px-2]=\"isCompact()\"\n [class.afp-px-4]=\"!isCompact()\"\n >\n <div\n class=\"afp-font-medium afp-truncate afp-text-fg-primary\"\n [class.afp-text-sm]=\"isCompact()\"\n [class.afp-text-lg]=\"!isCompact()\"\n >\n {{ fileName() }}\n </div>\n </div>\n\n <div class=\"afp-w-full afp-flex afp-justify-center afp-flex-shrink-0\">\n <div\n class=\"afp-rounded-2xl afp-border afp-bg-surface-1 afp-border-line-weak\"\n [class.afp-p-3]=\"isCompact()\"\n [class.afp-p-5]=\"!isCompact()\"\n [attr.style]=\"panelStyle()\"\n >\n <div [class.afp-mb-3]=\"isCompact()\" [class.afp-mb-5]=\"!isCompact()\">\n <div class=\"afp-relative afp-h-4 afp-flex afp-items-center\">\n <div class=\"afp-absolute afp-w-full afp-h-[5px] afp-rounded-full afp-bg-surface-2\"></div>\n <div class=\"afp-absolute afp-h-[5px] afp-rounded-full afp-pointer-events-none\" [attr.style]=\"progressFillStyle()\"></div>\n <input\n type=\"range\"\n min=\"0\"\n [max]=\"duration() > 0 ? duration() : currentTime() || 100\"\n step=\"any\"\n [value]=\"displayTime()\"\n [disabled]=\"duration() <= 0\"\n [attr.aria-label]=\"t('audio.aria.progress')\"\n class=\"audio-slider afp-absolute afp-w-full\"\n (pointerdown)=\"onProgressPointerDown()\"\n (input)=\"onProgressInput($event)\"\n (pointerup)=\"onProgressPointerUp($event)\"\n (pointercancel)=\"isDragging.set(false)\"\n />\n </div>\n <div [class]=\"timeRowClass()\">\n <span style=\"font-variant-numeric: tabular-nums\">{{ formatTime(displayTime()) }}</span>\n <span style=\"font-variant-numeric: tabular-nums\">{{ duration() > 0 ? formatTime(duration()) : '--:--' }}</span>\n </div>\n </div>\n\n <div\n class=\"afp-flex afp-items-center afp-justify-center\"\n [class.afp-gap-2]=\"isCompact()\"\n [class.afp-gap-3]=\"!isCompact()\"\n >\n <button\n type=\"button\"\n class=\"afp-rounded-full afp-flex afp-items-center afp-justify-center afp-transition-colors audio-ctrl-btn afp-flex-shrink-0\"\n [class.afp-w-8]=\"isCompact()\"\n [class.afp-h-8]=\"isCompact()\"\n [class.afp-w-9]=\"!isCompact()\"\n [class.afp-h-9]=\"!isCompact()\"\n [class.afp-bg-accent-soft]=\"isLoop()\"\n [class.afp-text-accent]=\"isLoop()\"\n [class.afp-bg-surface-2]=\"!isLoop()\"\n [class.afp-text-fg-tertiary]=\"!isLoop()\"\n [attr.aria-label]=\"isLoop() ? t('audio.aria.loop_off') : t('audio.aria.loop_on')\"\n (click)=\"toggleLoop()\"\n >\n <i-lucide [img]=\"repeatIcon\" [class]=\"isCompact() ? 'afp-w-3.5 afp-h-3.5' : 'afp-w-4 afp-h-4'\" />\n </button>\n\n <button\n type=\"button\"\n class=\"afp-rounded-full afp-flex afp-items-center afp-justify-center afp-transition-colors audio-ctrl-btn afp-bg-surface-2 afp-text-fg-secondary afp-flex-shrink-0\"\n [class.afp-w-9]=\"isCompact()\"\n [class.afp-h-9]=\"isCompact()\"\n [class.afp-w-10]=\"!isCompact()\"\n [class.afp-h-10]=\"!isCompact()\"\n [attr.aria-label]=\"t('audio.aria.backward_10')\"\n (click)=\"skip(-10)\"\n >\n <i-lucide [img]=\"skipBackIcon\" [class]=\"isCompact() ? 'afp-w-4 afp-h-4' : 'afp-w-[18px] afp-h-[18px]'\" />\n </button>\n\n <button\n type=\"button\"\n class=\"afp-rounded-full afp-flex afp-items-center afp-justify-center audio-ctrl-btn afp-flex-shrink-0\"\n [class.afp-w-12]=\"isCompact()\"\n [class.afp-h-12]=\"isCompact()\"\n [class.afp-w-14]=\"!isCompact()\"\n [class.afp-h-14]=\"!isCompact()\"\n [attr.style]=\"playBtnStyle()\"\n [attr.aria-label]=\"isPlaying() ? t('audio.aria.pause') : t('audio.aria.play')\"\n (click)=\"togglePlay()\"\n >\n @if (isPlaying()) {\n <i-lucide [img]=\"pauseIcon\" [class]=\"isCompact() ? 'afp-w-5 afp-h-5' : 'afp-w-6 afp-h-6'\" />\n } @else {\n <i-lucide [img]=\"playIcon\" [class]=\"isCompact() ? 'afp-w-5 afp-h-5 afp-ml-0.5' : 'afp-w-6 afp-h-6 afp-ml-0.5'\" />\n }\n </button>\n\n <button\n type=\"button\"\n class=\"afp-rounded-full afp-flex afp-items-center afp-justify-center afp-transition-colors audio-ctrl-btn afp-bg-surface-2 afp-text-fg-secondary afp-flex-shrink-0\"\n [class.afp-w-9]=\"isCompact()\"\n [class.afp-h-9]=\"isCompact()\"\n [class.afp-w-10]=\"!isCompact()\"\n [class.afp-h-10]=\"!isCompact()\"\n [attr.aria-label]=\"t('audio.aria.forward_10')\"\n (click)=\"skip(10)\"\n >\n <i-lucide [img]=\"skipForwardIcon\" [class]=\"isCompact() ? 'afp-w-4 afp-h-4' : 'afp-w-[18px] afp-h-[18px]'\" />\n </button>\n\n <div\n #volumeRef\n class=\"afp-relative\"\n (mouseenter)=\"handleVolumeEnter()\"\n (mouseleave)=\"handleVolumeLeave()\"\n >\n <button\n type=\"button\"\n class=\"afp-rounded-full afp-flex afp-items-center afp-justify-center afp-transition-colors audio-ctrl-btn afp-flex-shrink-0\"\n [class.afp-w-8]=\"isCompact()\"\n [class.afp-h-8]=\"isCompact()\"\n [class.afp-w-9]=\"!isCompact()\"\n [class.afp-h-9]=\"!isCompact()\"\n [class.afp-bg-accent-soft]=\"showVolume()\"\n [class.afp-text-accent]=\"showVolume()\"\n [class.afp-bg-surface-2]=\"!showVolume()\"\n [class.afp-text-fg-secondary]=\"!showVolume()\"\n [attr.aria-label]=\"isMuted() ? t('audio.aria.unmute') : t('audio.aria.mute')\"\n (click)=\"toggleMute()\"\n >\n <i-lucide [img]=\"volumeIcon()\" [class]=\"isCompact() ? 'afp-w-3.5 afp-h-3.5' : 'afp-w-4 afp-h-4'\" />\n </button>\n\n @if (showVolume()) {\n <div\n class=\"afp-absolute afp-bottom-full afp-mb-2 afp-rounded-xl afp-p-3 afp-border afp-bg-surface-3 afp-border-line afp-volume-popup\"\n [attr.style]=\"volumePopupStyle()\"\n (mouseenter)=\"handleVolumeEnter()\"\n (mouseleave)=\"handleVolumeLeave()\"\n >\n <div class=\"afp-flex afp-flex-col afp-items-center afp-gap-2\" style=\"height: 100px\">\n <div class=\"afp-relative afp-flex afp-items-center afp-justify-center\" style=\"width: 24px; height: 80px\">\n <div class=\"afp-absolute afp-rounded-full afp-bg-surface-2\" style=\"width: 3px; height: 100%\"></div>\n <div\n class=\"afp-absolute afp-bottom-0 afp-rounded-full afp-pointer-events-none\"\n [attr.style]=\"volumeFillStyle()\"\n ></div>\n <input\n type=\"range\"\n min=\"0\"\n max=\"1\"\n step=\"0.01\"\n [value]=\"isMuted() ? 0 : volume()\"\n [attr.aria-label]=\"t('audio.aria.volume')\"\n class=\"volume-slider-vertical afp-absolute\"\n style=\"width: 80px; height: 24px; transform: rotate(-90deg); transform-origin: center center\"\n (input)=\"onVolumeInput($event)\"\n />\n </div>\n <span class=\"afp-text-[10px] afp-tabular-nums afp-text-fg-tertiary\">\n {{ Math.round((isMuted() ? 0 : volume()) * 100) }}\n </span>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n\n <audio #audioRef [src]=\"url()\" class=\"afp-hidden\"></audio>\n </div>\n }\n `, isInline: true, styles: [\".audio-ctrl-btn{border:0;cursor:pointer}.afp-volume-popup{animation:afp-fade-in .2s ease}@keyframes afp-fade-in{0%{opacity:0}to{opacity:1}}\\n\"], dependencies: [{ 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\"] }, { 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: AudioRenderer, decorators: [{\n type: Component,\n args: [{ selector: 'afp-audio-renderer', standalone: true, imports: [LucideAngularModule, RendererError], changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'afp-block afp-w-full afp-h-full' }, template: `\n @if (error(); as err) {\n <afp-renderer-error [message]=\"t(err)\" />\n } @else {\n <div\n #containerRef\n class=\"afp-flex afp-flex-col afp-items-center afp-justify-center afp-w-full afp-h-full afp-select-none afp-overflow-auto\"\n [class.afp-p-3]=\"isCompact()\"\n [class.afp-gap-3]=\"isCompact()\"\n [class.afp-p-6]=\"!isCompact()\"\n [class.afp-gap-6]=\"!isCompact()\"\n >\n <div class=\"afp-relative afp-flex-shrink-0\" [attr.style]=\"vinylBoxStyle()\">\n <div\n class=\"afp-absolute afp-rounded-full\"\n [attr.style]=\"glowStyle()\"\n ></div>\n\n <div\n class=\"afp-absolute afp-rounded-full afp-overflow-hidden\"\n [attr.style]=\"vinylStyle()\"\n >\n <div class=\"afp-absolute afp-rounded-full\" [attr.style]=\"labelStyle()\">\n <div class=\"afp-absolute afp-rounded-full\" [attr.style]=\"spindleStyle()\"></div>\n </div>\n </div>\n\n <div class=\"afp-absolute\" [attr.style]=\"tonearmStyle()\">\n <svg width=\"100\" height=\"120\" viewBox=\"0 0 100 120\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"76\" cy=\"16\" r=\"13\" fill=\"rgba(0,0,0,0.3)\" />\n <circle cx=\"76\" cy=\"16\" r=\"11\" fill=\"url(#afp-baseGrad)\" />\n <circle cx=\"76\" cy=\"16\" r=\"6\" fill=\"url(#afp-baseInnerGrad)\" />\n <circle cx=\"76\" cy=\"16\" r=\"2.5\" fill=\"#222\" stroke=\"#555\" stroke-width=\"0.5\" />\n <path d=\"M74 22 L56 88\" stroke=\"url(#afp-armGrad)\" stroke-width=\"3.5\" stroke-linecap=\"round\" />\n <rect x=\"50\" y=\"86\" width=\"12\" height=\"7\" rx=\"1.5\" fill=\"url(#afp-headGrad)\" />\n <rect x=\"52.5\" y=\"92\" width=\"7\" height=\"9\" rx=\"1\" fill=\"url(#afp-cartridgeGrad)\" />\n <line x1=\"56\" y1=\"101\" x2=\"56\" y2=\"105\" stroke=\"#bbb\" stroke-width=\"1.2\" stroke-linecap=\"round\" />\n <circle cx=\"56\" cy=\"105.5\" r=\"0.8\" fill=\"#ddd\" />\n\n <defs>\n <radialGradient id=\"afp-baseGrad\" cx=\"40%\" cy=\"35%\">\n <stop offset=\"0%\" stop-color=\"#555\" />\n <stop offset=\"100%\" stop-color=\"#1a1a1a\" />\n </radialGradient>\n <radialGradient id=\"afp-baseInnerGrad\" cx=\"40%\" cy=\"35%\">\n <stop offset=\"0%\" stop-color=\"#666\" />\n <stop offset=\"100%\" stop-color=\"#333\" />\n </radialGradient>\n <linearGradient id=\"afp-armGrad\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stop-color=\"#555\" />\n <stop offset=\"50%\" stop-color=\"#444\" />\n <stop offset=\"100%\" stop-color=\"#333\" />\n </linearGradient>\n <linearGradient id=\"afp-headGrad\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stop-color=\"#555\" />\n <stop offset=\"100%\" stop-color=\"#333\" />\n </linearGradient>\n <linearGradient id=\"afp-cartridgeGrad\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stop-color=\"#444\" />\n <stop offset=\"100%\" stop-color=\"#222\" />\n </linearGradient>\n </defs>\n </svg>\n </div>\n </div>\n\n <div\n class=\"afp-text-center afp-max-w-md afp-flex-shrink-0\"\n [class.afp-px-2]=\"isCompact()\"\n [class.afp-px-4]=\"!isCompact()\"\n >\n <div\n class=\"afp-font-medium afp-truncate afp-text-fg-primary\"\n [class.afp-text-sm]=\"isCompact()\"\n [class.afp-text-lg]=\"!isCompact()\"\n >\n {{ fileName() }}\n </div>\n </div>\n\n <div class=\"afp-w-full afp-flex afp-justify-center afp-flex-shrink-0\">\n <div\n class=\"afp-rounded-2xl afp-border afp-bg-surface-1 afp-border-line-weak\"\n [class.afp-p-3]=\"isCompact()\"\n [class.afp-p-5]=\"!isCompact()\"\n [attr.style]=\"panelStyle()\"\n >\n <div [class.afp-mb-3]=\"isCompact()\" [class.afp-mb-5]=\"!isCompact()\">\n <div class=\"afp-relative afp-h-4 afp-flex afp-items-center\">\n <div class=\"afp-absolute afp-w-full afp-h-[5px] afp-rounded-full afp-bg-surface-2\"></div>\n <div class=\"afp-absolute afp-h-[5px] afp-rounded-full afp-pointer-events-none\" [attr.style]=\"progressFillStyle()\"></div>\n <input\n type=\"range\"\n min=\"0\"\n [max]=\"duration() > 0 ? duration() : currentTime() || 100\"\n step=\"any\"\n [value]=\"displayTime()\"\n [disabled]=\"duration() <= 0\"\n [attr.aria-label]=\"t('audio.aria.progress')\"\n class=\"audio-slider afp-absolute afp-w-full\"\n (pointerdown)=\"onProgressPointerDown()\"\n (input)=\"onProgressInput($event)\"\n (pointerup)=\"onProgressPointerUp($event)\"\n (pointercancel)=\"isDragging.set(false)\"\n />\n </div>\n <div [class]=\"timeRowClass()\">\n <span style=\"font-variant-numeric: tabular-nums\">{{ formatTime(displayTime()) }}</span>\n <span style=\"font-variant-numeric: tabular-nums\">{{ duration() > 0 ? formatTime(duration()) : '--:--' }}</span>\n </div>\n </div>\n\n <div\n class=\"afp-flex afp-items-center afp-justify-center\"\n [class.afp-gap-2]=\"isCompact()\"\n [class.afp-gap-3]=\"!isCompact()\"\n >\n <button\n type=\"button\"\n class=\"afp-rounded-full afp-flex afp-items-center afp-justify-center afp-transition-colors audio-ctrl-btn afp-flex-shrink-0\"\n [class.afp-w-8]=\"isCompact()\"\n [class.afp-h-8]=\"isCompact()\"\n [class.afp-w-9]=\"!isCompact()\"\n [class.afp-h-9]=\"!isCompact()\"\n [class.afp-bg-accent-soft]=\"isLoop()\"\n [class.afp-text-accent]=\"isLoop()\"\n [class.afp-bg-surface-2]=\"!isLoop()\"\n [class.afp-text-fg-tertiary]=\"!isLoop()\"\n [attr.aria-label]=\"isLoop() ? t('audio.aria.loop_off') : t('audio.aria.loop_on')\"\n (click)=\"toggleLoop()\"\n >\n <i-lucide [img]=\"repeatIcon\" [class]=\"isCompact() ? 'afp-w-3.5 afp-h-3.5' : 'afp-w-4 afp-h-4'\" />\n </button>\n\n <button\n type=\"button\"\n class=\"afp-rounded-full afp-flex afp-items-center afp-justify-center afp-transition-colors audio-ctrl-btn afp-bg-surface-2 afp-text-fg-secondary afp-flex-shrink-0\"\n [class.afp-w-9]=\"isCompact()\"\n [class.afp-h-9]=\"isCompact()\"\n [class.afp-w-10]=\"!isCompact()\"\n [class.afp-h-10]=\"!isCompact()\"\n [attr.aria-label]=\"t('audio.aria.backward_10')\"\n (click)=\"skip(-10)\"\n >\n <i-lucide [img]=\"skipBackIcon\" [class]=\"isCompact() ? 'afp-w-4 afp-h-4' : 'afp-w-[18px] afp-h-[18px]'\" />\n </button>\n\n <button\n type=\"button\"\n class=\"afp-rounded-full afp-flex afp-items-center afp-justify-center audio-ctrl-btn afp-flex-shrink-0\"\n [class.afp-w-12]=\"isCompact()\"\n [class.afp-h-12]=\"isCompact()\"\n [class.afp-w-14]=\"!isCompact()\"\n [class.afp-h-14]=\"!isCompact()\"\n [attr.style]=\"playBtnStyle()\"\n [attr.aria-label]=\"isPlaying() ? t('audio.aria.pause') : t('audio.aria.play')\"\n (click)=\"togglePlay()\"\n >\n @if (isPlaying()) {\n <i-lucide [img]=\"pauseIcon\" [class]=\"isCompact() ? 'afp-w-5 afp-h-5' : 'afp-w-6 afp-h-6'\" />\n } @else {\n <i-lucide [img]=\"playIcon\" [class]=\"isCompact() ? 'afp-w-5 afp-h-5 afp-ml-0.5' : 'afp-w-6 afp-h-6 afp-ml-0.5'\" />\n }\n </button>\n\n <button\n type=\"button\"\n class=\"afp-rounded-full afp-flex afp-items-center afp-justify-center afp-transition-colors audio-ctrl-btn afp-bg-surface-2 afp-text-fg-secondary afp-flex-shrink-0\"\n [class.afp-w-9]=\"isCompact()\"\n [class.afp-h-9]=\"isCompact()\"\n [class.afp-w-10]=\"!isCompact()\"\n [class.afp-h-10]=\"!isCompact()\"\n [attr.aria-label]=\"t('audio.aria.forward_10')\"\n (click)=\"skip(10)\"\n >\n <i-lucide [img]=\"skipForwardIcon\" [class]=\"isCompact() ? 'afp-w-4 afp-h-4' : 'afp-w-[18px] afp-h-[18px]'\" />\n </button>\n\n <div\n #volumeRef\n class=\"afp-relative\"\n (mouseenter)=\"handleVolumeEnter()\"\n (mouseleave)=\"handleVolumeLeave()\"\n >\n <button\n type=\"button\"\n class=\"afp-rounded-full afp-flex afp-items-center afp-justify-center afp-transition-colors audio-ctrl-btn afp-flex-shrink-0\"\n [class.afp-w-8]=\"isCompact()\"\n [class.afp-h-8]=\"isCompact()\"\n [class.afp-w-9]=\"!isCompact()\"\n [class.afp-h-9]=\"!isCompact()\"\n [class.afp-bg-accent-soft]=\"showVolume()\"\n [class.afp-text-accent]=\"showVolume()\"\n [class.afp-bg-surface-2]=\"!showVolume()\"\n [class.afp-text-fg-secondary]=\"!showVolume()\"\n [attr.aria-label]=\"isMuted() ? t('audio.aria.unmute') : t('audio.aria.mute')\"\n (click)=\"toggleMute()\"\n >\n <i-lucide [img]=\"volumeIcon()\" [class]=\"isCompact() ? 'afp-w-3.5 afp-h-3.5' : 'afp-w-4 afp-h-4'\" />\n </button>\n\n @if (showVolume()) {\n <div\n class=\"afp-absolute afp-bottom-full afp-mb-2 afp-rounded-xl afp-p-3 afp-border afp-bg-surface-3 afp-border-line afp-volume-popup\"\n [attr.style]=\"volumePopupStyle()\"\n (mouseenter)=\"handleVolumeEnter()\"\n (mouseleave)=\"handleVolumeLeave()\"\n >\n <div class=\"afp-flex afp-flex-col afp-items-center afp-gap-2\" style=\"height: 100px\">\n <div class=\"afp-relative afp-flex afp-items-center afp-justify-center\" style=\"width: 24px; height: 80px\">\n <div class=\"afp-absolute afp-rounded-full afp-bg-surface-2\" style=\"width: 3px; height: 100%\"></div>\n <div\n class=\"afp-absolute afp-bottom-0 afp-rounded-full afp-pointer-events-none\"\n [attr.style]=\"volumeFillStyle()\"\n ></div>\n <input\n type=\"range\"\n min=\"0\"\n max=\"1\"\n step=\"0.01\"\n [value]=\"isMuted() ? 0 : volume()\"\n [attr.aria-label]=\"t('audio.aria.volume')\"\n class=\"volume-slider-vertical afp-absolute\"\n style=\"width: 80px; height: 24px; transform: rotate(-90deg); transform-origin: center center\"\n (input)=\"onVolumeInput($event)\"\n />\n </div>\n <span class=\"afp-text-[10px] afp-tabular-nums afp-text-fg-tertiary\">\n {{ Math.round((isMuted() ? 0 : volume()) * 100) }}\n </span>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n\n <audio #audioRef [src]=\"url()\" class=\"afp-hidden\"></audio>\n </div>\n }\n `, styles: [\".audio-ctrl-btn{border:0;cursor:pointer}.afp-volume-popup{animation:afp-fade-in .2s ease}@keyframes afp-fade-in{0%{opacity:0}to{opacity:1}}\\n\"] }]\n }], ctorParameters: () => [] });\n\nexport { AudioRenderer };\n//# sourceMappingURL=eternalheart-angular-file-preview-index-CQwhffym.mjs.map\n"],"names":["formatTime"],"mappings":";;;;;;;;AASA,SAAS,iBAAiB,GAAG;AAC7B,IAAI,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;AACnC,IAAI,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC;AAClC,IAAI,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC;AACjC,IAAI,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC;AAC9B,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC;AAC5B,IAAI,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC;AACjC,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;AAChC,IAAI,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;AAC9B,IAAI,IAAI,KAAK,GAAG,IAAI;AACpB,IAAI,IAAI,MAAM,GAAG,IAAI;AACrB,IAAI,MAAM,IAAI,GAAG,CAAC,EAAE,KAAK;AACzB,QAAQ,MAAM,IAAI;AAClB,QAAQ,MAAM,GAAG,IAAI;AACrB,QAAQ,KAAK,GAAG,EAAE;AAClB,QAAQ,IAAI,CAAC,EAAE;AACf,YAAY;AACZ,QAAQ,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,QAAQ,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACvB,QAAQ,MAAM,YAAY,GAAG,MAAM;AACnC,YAAY,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC;AACtC,gBAAgB,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC;AAC/C,QAAQ,CAAC;AACT,QAAQ,MAAM,gBAAgB,GAAG,MAAM;AACvC,YAAY,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC;AAC5D,gBAAgB,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC;AACzC,QAAQ,CAAC;AACT,QAAQ,MAAM,SAAS,GAAG,MAAM;AAChC,YAAY,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AAChC,YAAY,gBAAgB,EAAE;AAC9B,QAAQ,CAAC;AACT,QAAQ,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACnD,QAAQ,MAAM,SAAS,GAAG,MAAM;AAChC,YAAY,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AAChC,YAAY,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AAC/B,QAAQ,CAAC;AACT,QAAQ,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AAChD,QAAQ,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AAClD,QAAQ,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AAClD,QAAQ,MAAM,OAAO,GAAG,MAAM;AAC9B,YAAY,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC;AAC1C,YAAY,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AAChC,QAAQ,CAAC;AACT,QAAQ,EAAE,CAAC,gBAAgB,CAAC,YAAY,EAAE,YAAY,CAAC;AACvD,QAAQ,EAAE,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;AAC/D,QAAQ,EAAE,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;AAC/D,QAAQ,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC;AACjD,QAAQ,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC;AACjD,QAAQ,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC;AACjD,QAAQ,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC;AAC3C,QAAQ,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC;AAC7C,QAAQ,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC;AAC7C,QAAQ,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC;AAC7C,QAAQ,IAAI,EAAE,CAAC,UAAU,IAAI,CAAC,EAAE;AAChC,YAAY,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AAChC,YAAY,gBAAgB,EAAE;AAC9B,QAAQ;AACR,QAAQ,MAAM,GAAG,MAAM;AACvB,YAAY,EAAE,CAAC,mBAAmB,CAAC,YAAY,EAAE,YAAY,CAAC;AAC9D,YAAY,EAAE,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;AACtE,YAAY,EAAE,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;AACtE,YAAY,EAAE,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC;AACxD,YAAY,EAAE,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC;AACxD,YAAY,EAAE,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC;AACxD,YAAY,EAAE,CAAC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC;AAClD,YAAY,EAAE,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC;AACpD,YAAY,EAAE,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC;AACpD,YAAY,EAAE,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC;AACpD,QAAQ,CAAC;AACT,IAAI,CAAC;AACL,IAAI,MAAM,UAAU,GAAG,MAAM;AAC7B,QAAQ,IAAI,CAAC,KAAK;AAClB,YAAY;AACZ,QAAQ,IAAI,KAAK,CAAC,MAAM;AACxB,YAAY,KAAK,KAAK,CAAC,IAAI,EAAE;AAC7B;AACA,YAAY,KAAK,CAAC,KAAK,EAAE;AACzB,IAAI,CAAC;AACL,IAAI,MAAM,IAAI,GAAG,CAAC,IAAI,KAAK;AAC3B,QAAQ,IAAI,CAAC,KAAK;AAClB,YAAY;AACZ,QAAQ,KAAK,CAAC,WAAW,GAAG,IAAI;AAChC,QAAQ,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAC7B,IAAI,CAAC;AACL,IAAI,MAAM,IAAI,GAAG,CAAC,OAAO,KAAK;AAC9B,QAAQ,IAAI,CAAC,KAAK;AAClB,YAAY;AACZ,QAAQ,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,GAAG,OAAO,EAAE,KAAK,CAAC,QAAQ,IAAI,QAAQ,CAAC,CAAC;AAC1G,QAAQ,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC;AAC1C,IAAI,CAAC;AACL,IAAI,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK;AAC7B,QAAQ,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AACrB,QAAQ,IAAI,KAAK;AACjB,YAAY,KAAK,CAAC,MAAM,GAAG,CAAC;AAC5B,QAAQ,IAAI,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,EAAE;AAChC,YAAY,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AAC9B,YAAY,IAAI,KAAK;AACrB,gBAAgB,KAAK,CAAC,KAAK,GAAG,KAAK;AACnC,QAAQ;AACR,IAAI,CAAC;AACL,IAAI,MAAM,UAAU,GAAG,MAAM;AAC7B,QAAQ,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE;AAC/B,QAAQ,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,QAAQ,IAAI,KAAK;AACjB,YAAY,KAAK,CAAC,KAAK,GAAG,IAAI;AAC9B,IAAI,CAAC;AACL,IAAI,MAAM,UAAU,GAAG,MAAM;AAC7B,QAAQ,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE;AAC9B,QAAQ,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,QAAQ,IAAI,KAAK;AACjB,YAAY,KAAK,CAAC,IAAI,GAAG,IAAI;AAC7B,IAAI,CAAC;AACL,IAAI,MAAM,gBAAgB,GAAG,MAAMA,EAAU,CAAC,WAAW,EAAE,CAAC;AAC5D,IAAI,MAAM,iBAAiB,GAAG,MAAMA,EAAU,CAAC,QAAQ,EAAE,CAAC;AAC1D,IAAI,MAAM,OAAO,GAAG,MAAM;AAC1B,QAAQ,MAAM,IAAI;AAClB,QAAQ,MAAM,GAAG,IAAI;AACrB,QAAQ,KAAK,GAAG,IAAI;AACpB,IAAI,CAAC;AACL,IAAI,OAAO;AACX,QAAQ,SAAS;AACjB,QAAQ,SAAS;AACjB,QAAQ,WAAW;AACnB,QAAQ,QAAQ;AAChB,QAAQ,MAAM;AACd,QAAQ,OAAO;AACf,QAAQ,MAAM;AACd,QAAQ,KAAK;AACb,QAAQ,IAAI;AACZ,QAAQ,UAAU;AAClB,QAAQ,IAAI;AACZ,QAAQ,IAAI;AACZ,QAAQ,SAAS;AACjB,QAAQ,UAAU;AAClB,QAAQ,UAAU;AAClB,QAAQ,gBAAgB;AACxB,QAAQ,iBAAiB;AACzB,QAAQ,OAAO;AACf,KAAK;AACL;;AAEA,MAAM,aAAa,CAAC;AACpB,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE;AACnC,QAAQ,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAE;AACxC,QAAQ,IAAI,CAAC,OAAO,GAAG,IAAI,mBAAmB,EAAE;AAChD,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC/D,QAAQ,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC5C,QAAQ,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,qBAAqB,EAAE;AAC5D,QAAQ,IAAI,CAAC,UAAU,GAAGA,EAAU;AACpC,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI;AACxB,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI;AAC5B,QAAQ,IAAI,CAAC,SAAS,GAAG,KAAK;AAC9B,QAAQ,IAAI,CAAC,YAAY,GAAG,QAAQ;AACpC,QAAQ,IAAI,CAAC,eAAe,GAAG,WAAW;AAC1C,QAAQ,IAAI,CAAC,UAAU,GAAG,MAAM;AAChC,QAAQ,IAAI,CAAC,MAAM,GAAG,iBAAiB,EAAE;AACzC,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS;AAC9C,QAAQ,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM;AACxC,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW;AAClD,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ;AAC5C,QAAQ,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM;AACxC,QAAQ,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO;AAC1C,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK;AACtC,QAAQ,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU;AAChD,QAAQ,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU;AAChD,QAAQ,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU;AAChD,QAAQ,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC;AACvC,QAAQ,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;AACtC,QAAQ,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC;AACrC,QAAQ,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC;AACvC,QAAQ,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC;AACjC,QAAQ,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC,cAAc,CAAC;AACrD,QAAQ,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,WAAW,CAAC;AAC/C,QAAQ,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,UAAU,CAAC;AAC5C,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI;AACnC,QAAQ,IAAI,CAAC,cAAc,GAAG,IAAI;AAClC,QAAQ,IAAI,CAAC,OAAO,GAAG,CAAC;AACxB,QAAQ,IAAI,CAAC,SAAS,GAAG,GAAG;AAC5B,QAAQ,IAAI,CAAC,eAAe,GAAG,GAAG;AAClC,QAAQ,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AACnG,QAAQ,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AACtG,QAAQ,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;AACvE,QAAQ,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;AACtF,QAAQ,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,MAAM;AACzC,YAAY,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;AACrD,gBAAgB,OAAO,OAAO;AAC9B,YAAY,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG;AACnC,gBAAgB,OAAO,OAAO;AAC9B,YAAY,OAAO,OAAO;AAC1B,QAAQ,CAAC,CAAC;AACV,QAAQ,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS;AACzD,cAAc;AACd,cAAc,0EAA0E,CAAC;AACzF,QAAQ,IAAI,CAAC,gBAAgB,GAAG,MAAM,EAAE;AACxC,QAAQ,IAAI,CAAC,eAAe,GAAG,CAAC,QAAQ,KAAK,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC;AAC7E,QAAQ,IAAI,CAAC,SAAS,GAAG,MAAM;AAC/B,YAAY,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE,aAAa;AACzD,YAAY,IAAI,CAAC,EAAE;AACnB,gBAAgB;AAChB,YAAY,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,GAAG,GAAG,CAAC;AACrD,YAAY,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW;AACxC,YAAY,MAAM,SAAS,GAAG,GAAG;AACjC,YAAY,MAAM,cAAc,GAAG,GAAG;AACtC,YAAY,MAAM,QAAQ,GAAG,cAAc,GAAG,SAAS;AACvD,YAAY,MAAM,KAAK,GAAG,KAAK,IAAI,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,GAAG,SAAS,CAAC;AACxF,YAAY,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AACxC,QAAQ,CAAC;AACT,QAAQ,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC,KAAK;AACzC,YAAY,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,aAAa;AACtD,YAAY,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;AAC9C,gBAAgB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1C,YAAY;AACZ,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,MAAM;AACrB,YAAY,IAAI,CAAC,GAAG,EAAE;AACtB,YAAY,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,IAAI,IAAI;AAC5D,YAAY,SAAS,CAAC,MAAM;AAC5B,gBAAgB,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC;AAClD,gBAAgB,IAAI,CAAC,OAAO,GAAG,qBAAqB,CAAC,MAAM;AAC3D,oBAAoB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;AACxC,gBAAgB,CAAC,CAAC;AAClB,YAAY,CAAC,CAAC;AACd,QAAQ,CAAC,CAAC;AACV,QAAQ,eAAe,CAAC,MAAM;AAC9B,YAAY,IAAI,CAAC,SAAS,EAAE;AAC5B,YAAY,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE,aAAa;AACzD,YAAY,IAAI,EAAE,EAAE;AACpB,gBAAgB,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;AAChF,gBAAgB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;AAC/C,YAAY;AACZ,YAAY,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC;AAC3E,QAAQ,CAAC,CAAC;AACV,QAAQ,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM;AACxC,YAAY,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC;AAC9E,YAAY,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI;AAC7C,gBAAgB,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC;AAClD,YAAY,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC;AAC9C,YAAY,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE;AAC7C,YAAY,IAAI,CAAC,cAAc,GAAG,IAAI;AACtC,YAAY,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;AACjC,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ,IAAI,IAAI,CAAC,OAAO,EAAE;AAClB,QAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE;AACnC,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,OAAO,EAAE,GAAG,IAAI,QAAQ,CAAC,CAAC;AACzF,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AAC9B,IAAI;AACJ,IAAI,qBAAqB,GAAG;AAC5B,QAAQ,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AAC7C,QAAQ,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACjC,IAAI;AACJ,IAAI,eAAe,CAAC,CAAC,EAAE;AACvB,QAAQ,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;AAChD,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;AAC/B,YAAY,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;AACpC,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AACnC,QAAQ;AACR,IAAI;AACJ,IAAI,mBAAmB,CAAC,CAAC,EAAE;AAC3B,QAAQ,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;AAChD,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AAC/B,QAAQ,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAClC,IAAI;AACJ,IAAI,aAAa,CAAC,CAAC,EAAE;AACrB,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACzD,IAAI;AACJ,IAAI,iBAAiB,GAAG;AACxB,QAAQ,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI;AACzC,YAAY,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC;AAC9C,QAAQ,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACjC,IAAI;AACJ,IAAI,iBAAiB,GAAG;AACxB,QAAQ,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM;AACvD,YAAY,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AACtC,QAAQ,CAAC,EAAE,GAAG,CAAC;AACf,IAAI;AACJ,IAAI,aAAa,GAAG;AACpB,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,EAAE;AAC5C,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE;AACxC,QAAQ,MAAM,CAAC,GAAG,OAAO,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,eAAe,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;AAClF,QAAQ,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE,KAAK,CAAC,4CAA4C,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;AACvK,IAAI;AACJ,IAAI,SAAS,GAAG;AAChB,QAAQ,OAAO,CAAC,0JAA0J,EAAE,IAAI,CAAC,SAAS,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC,wBAAwB,CAAC;AAClO,IAAI;AACJ,IAAI,UAAU,GAAG;AACjB,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE;AACxC,QAAQ,MAAM,MAAM,GAAG;AACvB,cAAc;AACd,cAAc,4DAA4D;AAC1E,QAAQ,OAAO,CAAC,gjCAAgjC,EAAE,MAAM,CAAC,kEAAkE,EAAE,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAC,CAAC;AAC7qC,IAAI;AACJ,IAAI,UAAU,GAAG;AACjB,QAAQ,OAAO,sOAAsO;AACrP,IAAI;AACJ,IAAI,YAAY,GAAG;AACnB,QAAQ,OAAO,wKAAwK;AACvL,IAAI;AACJ,IAAI,YAAY,GAAG;AACnB,QAAQ,OAAO,CAAC,kGAAkG,EAAE,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,2DAA2D,CAAC;AAC1M,IAAI;AACJ,IAAI,UAAU,GAAG;AACjB,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE;AACzC,QAAQ,MAAM,SAAS,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS;AACnE,QAAQ,MAAM,YAAY,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS;AAC9E,QAAQ,OAAO,CAAC,sCAAsC,EAAE,SAAS,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,4BAA4B,CAAC,GAAG,EAAE,CAAC,EAAE,YAAY,GAAG,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AACvL,IAAI;AACJ,IAAI,iBAAiB,GAAG;AACxB,QAAQ,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,GAAG,CAAC,kDAAkD,EAAE,IAAI,CAAC,SAAS,EAAE,GAAG,8BAA8B,GAAG,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,MAAM,GAAG,mBAAmB,CAAC,CAAC;AAC7N,IAAI;AACJ,IAAI,YAAY,GAAG;AACnB,QAAQ,OAAO,6GAA6G;AAC5H,IAAI;AACJ,IAAI,gBAAgB,GAAG;AACvB,QAAQ,OAAO,uDAAuD;AACtE,IAAI;AACJ,IAAI,eAAe,GAAG;AACtB,QAAQ,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,GAAG;AAC5D,QAAQ,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC,iEAAiE,CAAC;AACvG,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AAChL,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,iCAAiC,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,cAAc,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE;AACr0B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,+IAA+I,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,sBAAsB,EAAE,QAAQ,EAAE,oDAAoD,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,CAAC,uBAAuB,CAAC,MAAM,EAAE,CAAC,CAAC;AAC/mB;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC;AACxH,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,oBAAoB,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,mBAAmB,EAAE,aAAa,CAAC,EAAE,eAAe,EAAE,uBAAuB,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,iCAAiC,EAAE,EAAE,QAAQ,EAAE;AACrO;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,+IAA+I,CAAC,EAAE;AAChK,SAAS,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,CAAC;;;;"}
@@ -0,0 +1,164 @@
1
+ import * as i0 from '@angular/core';
2
+ import { input, inject, signal, computed, effect, ChangeDetectionStrategy, Component } from '@angular/core';
3
+ import { DomSanitizer } from '@angular/platform-browser';
4
+ import { L as LocaleService, R as RequestService, g as getFallbackTranslator, e as e0 } from './eternalheart-angular-file-preview-eternalheart-angular-file-preview-UobTf36G.mjs';
5
+ import { R as RendererError } from './eternalheart-angular-file-preview-eternalheart-angular-file-preview-RendererError-DtNihCIX-DtNihCIX.mjs';
6
+ import { c as createShikiHighlight } from './eternalheart-angular-file-preview-eternalheart-angular-file-preview-shiki-highlight-CL9cG481-BKfwdOpN.mjs';
7
+
8
+ class XmlRenderer {
9
+ constructor() {
10
+ this.url = input.required();
11
+ this.fileName = input.required();
12
+ this.locale = inject(LocaleService, { optional: true });
13
+ this.request = inject(RequestService, { optional: true });
14
+ this.sanitizer = inject(DomSanitizer);
15
+ this.t = this.locale?.t() ?? getFallbackTranslator();
16
+ this.content = signal('');
17
+ this.loading = signal(true);
18
+ this.error = signal(null);
19
+ this.xmlLang = signal('xml');
20
+ this.shiki = createShikiHighlight(() => this.content(), () => this.xmlLang());
21
+ this.lineHtmls = this.shiki.lineHtmls;
22
+ this.lines = computed(() => this.content().split('\n'));
23
+ this.getToolbarGroups = () => [];
24
+ effect(() => {
25
+ this.url();
26
+ void this.load();
27
+ });
28
+ effect(() => {
29
+ this.content();
30
+ this.xmlLang();
31
+ void this.shiki.highlight();
32
+ });
33
+ }
34
+ trust(html) {
35
+ return this.sanitizer.bypassSecurityTrustHtml(html);
36
+ }
37
+ indentXml(xml) {
38
+ const PADDING = ' ';
39
+ const reg = /(>)(<)(\/*)/g;
40
+ const formatted = xml.replace(reg, '$1\n$2$3');
41
+ let pad = 0;
42
+ return formatted
43
+ .split('\n')
44
+ .map((line) => {
45
+ let indent = 0;
46
+ if (/^<\/\w/.test(line)) {
47
+ pad = Math.max(pad - 1, 0);
48
+ }
49
+ else if (/^<\w[^>]*[^/]>.*$/.test(line) && !/<.+<\/.+>$/.test(line)) {
50
+ indent = 1;
51
+ }
52
+ const padded = PADDING.repeat(pad) + line;
53
+ pad += indent;
54
+ return padded;
55
+ })
56
+ .join('\n');
57
+ }
58
+ prettyPrintXml(xml) {
59
+ try {
60
+ const parser = new DOMParser();
61
+ const doc = parser.parseFromString(xml, 'application/xml');
62
+ if (doc.querySelector('parsererror'))
63
+ return xml;
64
+ const serializer = new XMLSerializer();
65
+ const serialized = serializer.serializeToString(doc);
66
+ return this.indentXml(serialized);
67
+ }
68
+ catch {
69
+ return xml;
70
+ }
71
+ }
72
+ async load() {
73
+ this.loading.set(true);
74
+ this.error.set(null);
75
+ try {
76
+ const fetcher = this.request?.fetcher() ?? ((u, init) => fetch(u, init));
77
+ const raw = await e0(this.url(), { fetcher });
78
+ this.content.set(this.prettyPrintXml(raw));
79
+ }
80
+ catch (err) {
81
+ console.error(err);
82
+ this.error.set(this.t('xml.load_failed'));
83
+ }
84
+ finally {
85
+ this.loading.set(false);
86
+ }
87
+ }
88
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: XmlRenderer, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
89
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.25", type: XmlRenderer, isStandalone: true, selector: "afp-xml-renderer", inputs: { url: { classPropertyName: "url", publicName: "url", isSignal: true, isRequired: true, transformFunction: null }, fileName: { classPropertyName: "fileName", publicName: "fileName", isSignal: true, isRequired: true, transformFunction: null } }, host: { classAttribute: "afp-block afp-w-full afp-h-full" }, ngImport: i0, template: `
90
+ @if (loading()) {
91
+ <div class="afp-flex afp-items-center afp-justify-center afp-w-full afp-h-full">
92
+ <div
93
+ 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"
94
+ ></div>
95
+ </div>
96
+ } @else if (error()) {
97
+ <afp-renderer-error [message]="error()!" />
98
+ } @else if (lineHtmls().length === 0) {
99
+ <div class="afp-w-full afp-h-full afp-overflow-auto" style="background: var(--fp-code-bg);">
100
+ <pre
101
+ class="afp-py-6 afp-px-4 afp-text-fg-primary afp-font-mono afp-text-sm afp-whitespace-pre-wrap afp-break-words"
102
+ >{{ content() }}</pre>
103
+ </div>
104
+ } @else {
105
+ <div class="afp-w-full afp-h-full afp-overflow-auto" style="background: var(--fp-code-bg);">
106
+ <div
107
+ class="afp-code-block with-line-numbers afp-w-full"
108
+ [style.gridTemplateRows]="'repeat(' + lines().length + ', auto) minmax(1.5rem, 1fr)'"
109
+ >
110
+ @for (line of lines(); track $index) {
111
+ <span class="afp-code-gutter">{{ $index + 1 }}</span>
112
+ <span class="afp-code-line" [innerHTML]="trust(lineHtmls()[$index] ?? '')"></span>
113
+ }
114
+ <span class="afp-code-gutter-filler"></span>
115
+ <span class="afp-code-line-filler"></span>
116
+ </div>
117
+ </div>
118
+ }
119
+ `, isInline: true, dependencies: [{ kind: "component", type: RendererError, selector: "afp-renderer-error", inputs: ["message", "detail", "showIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
120
+ }
121
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: XmlRenderer, decorators: [{
122
+ type: Component,
123
+ args: [{
124
+ selector: 'afp-xml-renderer',
125
+ standalone: true,
126
+ imports: [RendererError],
127
+ changeDetection: ChangeDetectionStrategy.OnPush,
128
+ host: { class: 'afp-block afp-w-full afp-h-full' },
129
+ template: `
130
+ @if (loading()) {
131
+ <div class="afp-flex afp-items-center afp-justify-center afp-w-full afp-h-full">
132
+ <div
133
+ 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"
134
+ ></div>
135
+ </div>
136
+ } @else if (error()) {
137
+ <afp-renderer-error [message]="error()!" />
138
+ } @else if (lineHtmls().length === 0) {
139
+ <div class="afp-w-full afp-h-full afp-overflow-auto" style="background: var(--fp-code-bg);">
140
+ <pre
141
+ class="afp-py-6 afp-px-4 afp-text-fg-primary afp-font-mono afp-text-sm afp-whitespace-pre-wrap afp-break-words"
142
+ >{{ content() }}</pre>
143
+ </div>
144
+ } @else {
145
+ <div class="afp-w-full afp-h-full afp-overflow-auto" style="background: var(--fp-code-bg);">
146
+ <div
147
+ class="afp-code-block with-line-numbers afp-w-full"
148
+ [style.gridTemplateRows]="'repeat(' + lines().length + ', auto) minmax(1.5rem, 1fr)'"
149
+ >
150
+ @for (line of lines(); track $index) {
151
+ <span class="afp-code-gutter">{{ $index + 1 }}</span>
152
+ <span class="afp-code-line" [innerHTML]="trust(lineHtmls()[$index] ?? '')"></span>
153
+ }
154
+ <span class="afp-code-gutter-filler"></span>
155
+ <span class="afp-code-line-filler"></span>
156
+ </div>
157
+ </div>
158
+ }
159
+ `,
160
+ }]
161
+ }], ctorParameters: () => [] });
162
+
163
+ export { XmlRenderer };
164
+ //# sourceMappingURL=eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CSCTj7ft-BfqruUyY.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CSCTj7ft-BfqruUyY.mjs","sources":["../fesm2022/eternalheart-angular-file-preview-index-CSCTj7ft.mjs"],"sourcesContent":["import * as i0 from '@angular/core';\nimport { input, inject, signal, computed, effect, ChangeDetectionStrategy, Component } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\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 { c as createShikiHighlight } from './eternalheart-angular-file-preview-shiki-highlight-CL9cG481.mjs';\nimport { fetchTextUtf8 } from '@eternalheart/file-preview-core';\n\nclass XmlRenderer {\n constructor() {\n this.url = input.required();\n this.fileName = input.required();\n this.locale = inject(LocaleService, { optional: true });\n this.request = inject(RequestService, { optional: true });\n this.sanitizer = inject(DomSanitizer);\n this.t = this.locale?.t() ?? getFallbackTranslator();\n this.content = signal('');\n this.loading = signal(true);\n this.error = signal(null);\n this.xmlLang = signal('xml');\n this.shiki = createShikiHighlight(() => this.content(), () => this.xmlLang());\n this.lineHtmls = this.shiki.lineHtmls;\n this.lines = computed(() => this.content().split('\\n'));\n this.getToolbarGroups = () => [];\n effect(() => {\n this.url();\n void this.load();\n });\n effect(() => {\n this.content();\n this.xmlLang();\n void this.shiki.highlight();\n });\n }\n trust(html) {\n return this.sanitizer.bypassSecurityTrustHtml(html);\n }\n indentXml(xml) {\n const PADDING = ' ';\n const reg = /(>)(<)(\\/*)/g;\n const formatted = xml.replace(reg, '$1\\n$2$3');\n let pad = 0;\n return formatted\n .split('\\n')\n .map((line) => {\n let indent = 0;\n if (/^<\\/\\w/.test(line)) {\n pad = Math.max(pad - 1, 0);\n }\n else if (/^<\\w[^>]*[^/]>.*$/.test(line) && !/<.+<\\/.+>$/.test(line)) {\n indent = 1;\n }\n const padded = PADDING.repeat(pad) + line;\n pad += indent;\n return padded;\n })\n .join('\\n');\n }\n prettyPrintXml(xml) {\n try {\n const parser = new DOMParser();\n const doc = parser.parseFromString(xml, 'application/xml');\n if (doc.querySelector('parsererror'))\n return xml;\n const serializer = new XMLSerializer();\n const serialized = serializer.serializeToString(doc);\n return this.indentXml(serialized);\n }\n catch {\n return xml;\n }\n }\n async load() {\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 raw = await fetchTextUtf8(this.url(), { fetcher });\n this.content.set(this.prettyPrintXml(raw));\n }\n catch (err) {\n console.error(err);\n this.error.set(this.t('xml.load_failed'));\n }\n finally {\n this.loading.set(false);\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"19.2.25\", ngImport: i0, type: XmlRenderer, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"19.2.25\", type: XmlRenderer, isStandalone: true, selector: \"afp-xml-renderer\", inputs: { url: { classPropertyName: \"url\", publicName: \"url\", isSignal: true, isRequired: true, transformFunction: null }, fileName: { classPropertyName: \"fileName\", publicName: \"fileName\", isSignal: true, isRequired: true, transformFunction: null } }, host: { classAttribute: \"afp-block afp-w-full afp-h-full\" }, ngImport: i0, template: `\n @if (loading()) {\n <div class=\"afp-flex afp-items-center afp-justify-center afp-w-full afp-h-full\">\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 } @else if (error()) {\n <afp-renderer-error [message]=\"error()!\" />\n } @else if (lineHtmls().length === 0) {\n <div class=\"afp-w-full afp-h-full afp-overflow-auto\" style=\"background: var(--fp-code-bg);\">\n <pre\n class=\"afp-py-6 afp-px-4 afp-text-fg-primary afp-font-mono afp-text-sm afp-whitespace-pre-wrap afp-break-words\"\n >{{ content() }}</pre>\n </div>\n } @else {\n <div class=\"afp-w-full afp-h-full afp-overflow-auto\" style=\"background: var(--fp-code-bg);\">\n <div\n class=\"afp-code-block with-line-numbers afp-w-full\"\n [style.gridTemplateRows]=\"'repeat(' + lines().length + ', auto) minmax(1.5rem, 1fr)'\"\n >\n @for (line of lines(); track $index) {\n <span class=\"afp-code-gutter\">{{ $index + 1 }}</span>\n <span class=\"afp-code-line\" [innerHTML]=\"trust(lineHtmls()[$index] ?? '')\"></span>\n }\n <span class=\"afp-code-gutter-filler\"></span>\n <span class=\"afp-code-line-filler\"></span>\n </div>\n </div>\n }\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: XmlRenderer, decorators: [{\n type: Component,\n args: [{\n selector: 'afp-xml-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 @if (loading()) {\n <div class=\"afp-flex afp-items-center afp-justify-center afp-w-full afp-h-full\">\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 } @else if (error()) {\n <afp-renderer-error [message]=\"error()!\" />\n } @else if (lineHtmls().length === 0) {\n <div class=\"afp-w-full afp-h-full afp-overflow-auto\" style=\"background: var(--fp-code-bg);\">\n <pre\n class=\"afp-py-6 afp-px-4 afp-text-fg-primary afp-font-mono afp-text-sm afp-whitespace-pre-wrap afp-break-words\"\n >{{ content() }}</pre>\n </div>\n } @else {\n <div class=\"afp-w-full afp-h-full afp-overflow-auto\" style=\"background: var(--fp-code-bg);\">\n <div\n class=\"afp-code-block with-line-numbers afp-w-full\"\n [style.gridTemplateRows]=\"'repeat(' + lines().length + ', auto) minmax(1.5rem, 1fr)'\"\n >\n @for (line of lines(); track $index) {\n <span class=\"afp-code-gutter\">{{ $index + 1 }}</span>\n <span class=\"afp-code-line\" [innerHTML]=\"trust(lineHtmls()[$index] ?? '')\"></span>\n }\n <span class=\"afp-code-gutter-filler\"></span>\n <span class=\"afp-code-line-filler\"></span>\n </div>\n </div>\n }\n `,\n }]\n }], ctorParameters: () => [] });\n\nexport { XmlRenderer };\n//# sourceMappingURL=eternalheart-angular-file-preview-index-CSCTj7ft.mjs.map\n"],"names":["fetchTextUtf8"],"mappings":";;;;;;;AAQA,MAAM,WAAW,CAAC;AAClB,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE;AACnC,QAAQ,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAE;AACxC,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC/D,QAAQ,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACjE,QAAQ,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC;AAC7C,QAAQ,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,qBAAqB,EAAE;AAC5D,QAAQ,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC;AACjC,QAAQ,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC;AACnC,QAAQ,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;AACjC,QAAQ,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC;AACpC,QAAQ,IAAI,CAAC,KAAK,GAAG,oBAAoB,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;AACrF,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS;AAC7C,QAAQ,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC/D,QAAQ,IAAI,CAAC,gBAAgB,GAAG,MAAM,EAAE;AACxC,QAAQ,MAAM,CAAC,MAAM;AACrB,YAAY,IAAI,CAAC,GAAG,EAAE;AACtB,YAAY,KAAK,IAAI,CAAC,IAAI,EAAE;AAC5B,QAAQ,CAAC,CAAC;AACV,QAAQ,MAAM,CAAC,MAAM;AACrB,YAAY,IAAI,CAAC,OAAO,EAAE;AAC1B,YAAY,IAAI,CAAC,OAAO,EAAE;AAC1B,YAAY,KAAK,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;AACvC,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ,IAAI,KAAK,CAAC,IAAI,EAAE;AAChB,QAAQ,OAAO,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,IAAI,CAAC;AAC3D,IAAI;AACJ,IAAI,SAAS,CAAC,GAAG,EAAE;AACnB,QAAQ,MAAM,OAAO,GAAG,IAAI;AAC5B,QAAQ,MAAM,GAAG,GAAG,cAAc;AAClC,QAAQ,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC;AACtD,QAAQ,IAAI,GAAG,GAAG,CAAC;AACnB,QAAQ,OAAO;AACf,aAAa,KAAK,CAAC,IAAI;AACvB,aAAa,GAAG,CAAC,CAAC,IAAI,KAAK;AAC3B,YAAY,IAAI,MAAM,GAAG,CAAC;AAC1B,YAAY,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACrC,gBAAgB,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;AAC1C,YAAY;AACZ,iBAAiB,IAAI,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACjF,gBAAgB,MAAM,GAAG,CAAC;AAC1B,YAAY;AACZ,YAAY,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI;AACrD,YAAY,GAAG,IAAI,MAAM;AACzB,YAAY,OAAO,MAAM;AACzB,QAAQ,CAAC;AACT,aAAa,IAAI,CAAC,IAAI,CAAC;AACvB,IAAI;AACJ,IAAI,cAAc,CAAC,GAAG,EAAE;AACxB,QAAQ,IAAI;AACZ,YAAY,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE;AAC1C,YAAY,MAAM,GAAG,GAAG,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,iBAAiB,CAAC;AACtE,YAAY,IAAI,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC;AAChD,gBAAgB,OAAO,GAAG;AAC1B,YAAY,MAAM,UAAU,GAAG,IAAI,aAAa,EAAE;AAClD,YAAY,MAAM,UAAU,GAAG,UAAU,CAAC,iBAAiB,CAAC,GAAG,CAAC;AAChE,YAAY,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;AAC7C,QAAQ;AACR,QAAQ,MAAM;AACd,YAAY,OAAO,GAAG;AACtB,QAAQ;AACR,IAAI;AACJ,IAAI,MAAM,IAAI,GAAG;AACjB,QAAQ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AAC9B,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5B,QAAQ,IAAI;AACZ,YAAY,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACpF,YAAY,MAAM,GAAG,GAAG,MAAMA,EAAa,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;AACpE,YAAY,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;AACtD,QAAQ;AACR,QAAQ,OAAO,GAAG,EAAE;AACpB,YAAY,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;AAC9B,YAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;AACrD,QAAQ;AACR,gBAAgB;AAChB,YAAY,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACnC,QAAQ;AACR,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AAC9K,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,iCAAiC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE;AACpf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,CAAC,uBAAuB,CAAC,MAAM,EAAE,CAAC,CAAC;AAClN;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;AACtH,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,QAAQ,EAAE,kBAAkB;AAChD,oBAAoB,UAAU,EAAE,IAAI;AACpC,oBAAoB,OAAO,EAAE,CAAC,aAAa,CAAC;AAC5C,oBAAoB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AACnE,oBAAoB,IAAI,EAAE,EAAE,KAAK,EAAE,iCAAiC,EAAE;AACtE,oBAAoB,QAAQ,EAAE;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,CAAC;AACH,iBAAiB;AACjB,SAAS,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,CAAC;;;;"}