@eternalheart/angular-file-preview 1.6.5 → 1.6.6

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 (58) hide show
  1. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-UobTf36G.mjs → eternalheart-angular-file-preview-eternalheart-angular-file-preview-RPRQhVCg.mjs} +39 -32
  2. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-RPRQhVCg.mjs.map +1 -0
  3. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-pG0Ko5mI-DthQJg-X.mjs → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-3-0UYUJy-CD5hv6Xd.mjs} +27 -8
  4. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-3-0UYUJy-CD5hv6Xd.mjs.map +1 -0
  5. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-D35x1nwM-CugEEXjg.mjs → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-5zqP72gq-lAwuxCQV.mjs} +2 -2
  6. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-D35x1nwM-CugEEXjg.mjs.map → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-5zqP72gq-lAwuxCQV.mjs.map} +1 -1
  7. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CDjKPqyW-CmX5sdkL.mjs → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-71x_jK0V-BwzFr9L0.mjs} +2 -2
  8. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CDjKPqyW-CmX5sdkL.mjs.map → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-71x_jK0V-BwzFr9L0.mjs.map} +1 -1
  9. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Bv3JRXKn-B4Wewc-4.mjs → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-7KavuB8u-CFBWzMGm.mjs} +2 -2
  10. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Bv3JRXKn-B4Wewc-4.mjs.map → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-7KavuB8u-CFBWzMGm.mjs.map} +1 -1
  11. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-DsNNZ59Q-C8MaSME6.mjs → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-B-TVstXS-Dh1KMX_8.mjs} +2 -2
  12. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-DsNNZ59Q-C8MaSME6.mjs.map → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-B-TVstXS-Dh1KMX_8.mjs.map} +1 -1
  13. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-6dZS_Cfs-B1itLV5R.mjs → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-B4L1kfY--BHy3x_oj.mjs} +2 -2
  14. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-6dZS_Cfs-B1itLV5R.mjs.map → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-B4L1kfY--BHy3x_oj.mjs.map} +1 -1
  15. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-D9jJNzeM-mWX59Aj2.mjs → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-B56pscOG-ClsvukS5.mjs} +4 -5
  16. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-B56pscOG-ClsvukS5.mjs.map +1 -0
  17. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-DbmuvdvN-C29uLyt2.mjs → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-BNU3NWQp-C5U5krn9.mjs} +2 -2
  18. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-DbmuvdvN-C29uLyt2.mjs.map → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-BNU3NWQp-C5U5krn9.mjs.map} +1 -1
  19. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-B1ANUCTy-BRs7TMLn.mjs → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-BbRwLog8-B9Sw6HEr.mjs} +2 -2
  20. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-B1ANUCTy-BRs7TMLn.mjs.map → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-BbRwLog8-B9Sw6HEr.mjs.map} +1 -1
  21. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-BGqTRZbm-CAOLRw20.mjs → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-BeL4xzpS-eYswtncp.mjs} +2 -2
  22. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-BGqTRZbm-CAOLRw20.mjs.map → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-BeL4xzpS-eYswtncp.mjs.map} +1 -1
  23. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-C518mdUd-B5SCzrzU.mjs → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-BeTNUne--CwUzGLn3.mjs} +2 -2
  24. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-C518mdUd-B5SCzrzU.mjs.map → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-BeTNUne--CwUzGLn3.mjs.map} +1 -1
  25. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-DufW2Fuc-CTosCut6.mjs → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-C3uCX4wD-CoZ795pn.mjs} +3 -3
  26. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-DufW2Fuc-CTosCut6.mjs.map → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-C3uCX4wD-CoZ795pn.mjs.map} +1 -1
  27. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-C0McUoqT-DJ35bhIz.mjs → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CBbnvps8-ClkiJKQ9.mjs} +2 -2
  28. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-C0McUoqT-DJ35bhIz.mjs.map → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CBbnvps8-ClkiJKQ9.mjs.map} +1 -1
  29. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Cb1RLXeO-Bj9gjS1Z.mjs → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CMeATokn-iD-SSbnK.mjs} +2 -2
  30. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Cb1RLXeO-Bj9gjS1Z.mjs.map → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CMeATokn-iD-SSbnK.mjs.map} +1 -1
  31. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CHi9tOe0-NOeQYAnM.mjs → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CZQnGY6g-DexFUJLU.mjs} +2 -2
  32. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CHi9tOe0-NOeQYAnM.mjs.map → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CZQnGY6g-DexFUJLU.mjs.map} +1 -1
  33. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-TSTa_Q7E-DBhkL6pV.mjs → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Cjjsjooa-24Qg-LjD.mjs} +2 -2
  34. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-TSTa_Q7E-DBhkL6pV.mjs.map → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Cjjsjooa-24Qg-LjD.mjs.map} +1 -1
  35. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CSCTj7ft-BfqruUyY.mjs → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CpiK7yUb-T48dTv66.mjs} +3 -3
  36. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CSCTj7ft-BfqruUyY.mjs.map → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CpiK7yUb-T48dTv66.mjs.map} +1 -1
  37. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index--7d8Hgi0-D-sg24Qs.mjs → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CyO8N29I-CMesNfcT.mjs} +2 -2
  38. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index--7d8Hgi0-D-sg24Qs.mjs.map → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CyO8N29I-CMesNfcT.mjs.map} +1 -1
  39. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Cw90Kdyg-BzrW_cyx.mjs → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-D6UfVKL_-CAqlAQIN.mjs} +2 -2
  40. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Cw90Kdyg-BzrW_cyx.mjs.map → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-D6UfVKL_-CAqlAQIN.mjs.map} +1 -1
  41. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-DWe1kVtU-CJlU6sOy.mjs +597 -0
  42. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-DWe1kVtU-CJlU6sOy.mjs.map +1 -0
  43. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-BEaqpRV8-BidVIVlO.mjs → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-QydIBtJH-Dw052TRv.mjs} +2 -2
  44. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-BEaqpRV8-BidVIVlO.mjs.map → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-QydIBtJH-Dw052TRv.mjs.map} +1 -1
  45. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-shiki-highlight-CL9cG481-BKfwdOpN.mjs → eternalheart-angular-file-preview-eternalheart-angular-file-preview-shiki-highlight-CE3FZF7D-BjdXRpvN.mjs} +2 -2
  46. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-shiki-highlight-CL9cG481-BKfwdOpN.mjs.map → eternalheart-angular-file-preview-eternalheart-angular-file-preview-shiki-highlight-CE3FZF7D-BjdXRpvN.mjs.map} +1 -1
  47. package/lib/fesm2022/eternalheart-angular-file-preview.mjs +1 -1
  48. package/lib/index.css +340 -60
  49. package/lib/index.d.ts +1 -1
  50. package/lib/renderers/Audio/index.d.ts +1 -18
  51. package/lib/renderers/Cad/index.d.ts +1 -0
  52. package/lib/version.d.ts +1 -0
  53. package/package.json +2 -1
  54. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-UobTf36G.mjs.map +0 -1
  55. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CQwhffym-DAGw4Xy_.mjs +0 -823
  56. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CQwhffym-DAGw4Xy_.mjs.map +0 -1
  57. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-D9jJNzeM-mWX59Aj2.mjs.map +0 -1
  58. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-pG0Ko5mI-DthQJg-X.mjs.map +0 -1
@@ -1 +0,0 @@
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":"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AAa,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;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-D9jJNzeM-mWX59Aj2.mjs","sources":["../fesm2022/eternalheart-angular-file-preview-index-D9jJNzeM.mjs"],"sourcesContent":["import * as i0 from '@angular/core';\nimport { input, inject, DestroyRef, signal, viewChild, effect, untracked, ChangeDetectionStrategy, Component } from '@angular/core';\nimport videojs from 'video.js';\nimport 'video.js/dist/video-js.css';\nimport { L as LocaleService, 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 { T as ToolbarEventEmitter } from './eternalheart-angular-file-preview-base.types-D5x7QPey.mjs';\nimport { getVideoMimeType } from '@eternalheart/file-preview-core';\n\nconst BROWSER_UNSUPPORTED_EXTS = new Set(['avi', 'wmv', 'flv']);\nclass VideoRenderer {\n constructor() {\n this.url = input.required();\n this.fileName = input(undefined);\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.error = signal(null);\n this.isLoading = signal(true);\n this.videoContainerRef = viewChild('videoContainerRef');\n this.player = null;\n this.getToolbarGroups = () => [];\n this.onToolbarChange = (listener) => this.emitter.subscribe(listener);\n effect(() => {\n const el = this.videoContainerRef()?.nativeElement;\n if (el && !this.player) {\n untracked(() => this.initPlayer(el));\n }\n });\n effect(() => {\n const url = this.url();\n untracked(() => {\n if (this.player && !this.player.isDisposed()) {\n this.player.src({ src: url, type: getVideoMimeType(url) });\n }\n });\n });\n this.destroyRef.onDestroy(() => {\n if (this.player && !this.player.isDisposed()) {\n this.player.dispose();\n this.player = null;\n }\n });\n }\n getVideoExt(url, fileName) {\n const source = fileName || url;\n return source.split('.').pop()?.toLowerCase().split('?')[0] || '';\n }\n initPlayer(container) {\n if (this.player)\n return;\n const videoExt = this.getVideoExt(this.url(), this.fileName());\n if (BROWSER_UNSUPPORTED_EXTS.has(videoExt)) {\n this.error.set({\n title: this.t('video.unsupported_title'),\n detail: this.t('video.unsupported_detail', { format: videoExt.toUpperCase() }),\n });\n this.isLoading.set(false);\n return;\n }\n const videoElement = document.createElement('video-js');\n videoElement.classList.add('vjs-big-play-centered', 'vjs-theme-apple');\n container.appendChild(videoElement);\n const videoType = getVideoMimeType(this.url());\n let sources;\n if (videoType === 'video/quicktime') {\n sources = [\n { src: this.url(), type: 'video/quicktime' },\n { src: this.url(), type: 'video/mp4' },\n ];\n }\n else {\n sources = [{ src: this.url(), type: videoType }];\n }\n const player = videojs(videoElement, {\n controls: true,\n fill: true,\n preload: 'auto',\n controlBar: {\n children: [\n 'playToggle',\n 'volumePanel',\n 'currentTimeDisplay',\n 'timeDivider',\n 'durationDisplay',\n 'progressControl',\n 'remainingTimeDisplay',\n 'fullscreenToggle',\n ],\n volumePanel: {\n inline: false,\n },\n },\n html5: {\n vhs: {\n overrideNative: true,\n },\n nativeVideoTracks: false,\n nativeAudioTracks: false,\n nativeTextTracks: false,\n },\n sources,\n });\n const videoEl = player.el().querySelector('video');\n if (videoEl) {\n videoEl.style.objectFit = 'contain';\n }\n player.on('loadeddata', () => {\n this.isLoading.set(false);\n });\n player.on('error', () => {\n const err = player.error();\n console.warn('[VideoRenderer] Video playback error:', err?.message || 'Unknown error');\n if (err?.code === 4) {\n this.error.set({\n title: this.t('video.unsupported_title'),\n detail: this.t('video.unsupported_detail', {\n format: videoExt ? videoExt.toUpperCase() : this.t('common.unknown_error'),\n }),\n });\n }\n else {\n this.error.set({\n title: this.t('video.load_failed'),\n detail: err?.message || this.t('common.unknown_error'),\n });\n }\n this.isLoading.set(false);\n });\n this.player = player;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"19.2.25\", ngImport: i0, type: VideoRenderer, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"19.2.25\", type: VideoRenderer, isStandalone: true, selector: \"afp-video-renderer\", inputs: { url: { classPropertyName: \"url\", publicName: \"url\", isSignal: true, isRequired: true, transformFunction: null }, fileName: { classPropertyName: \"fileName\", publicName: \"fileName\", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: \"afp-block afp-w-full afp-h-full\" }, viewQueries: [{ propertyName: \"videoContainerRef\", first: true, predicate: [\"videoContainerRef\"], descendants: true, isSignal: true }], ngImport: i0, template: `\n @if (error(); as err) {\n <afp-renderer-error [message]=\"err.title\" [detail]=\"err.detail\" />\n } @else {\n <div class=\"afp-flex afp-items-center afp-justify-center afp-w-full afp-h-full\">\n <div class=\"afp-w-full afp-h-full afp-relative\">\n @if (isLoading()) {\n <div class=\"afp-absolute afp-inset-0 afp-flex afp-items-center afp-justify-center afp-bg-surface-3 afp-backdrop-blur-sm afp-z-10\">\n <div class=\"afp-text-center\">\n <div class=\"afp-w-12 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\"></div>\n <p class=\"afp-text-sm afp-text-fg-secondary afp-font-medium\">{{ t('video.loading') }}</p>\n </div>\n </div>\n }\n\n <div\n #videoContainerRef\n class=\"afp-overflow-hidden afp-w-full afp-h-full\"\n style=\"box-shadow: 0 20px 60px rgba(0, 0, 0, 0.4), 0 0 0 1px rgba(255, 255, 255, 0.05)\"\n ></div>\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: VideoRenderer, decorators: [{\n type: Component,\n args: [{\n selector: 'afp-video-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 (error(); as err) {\n <afp-renderer-error [message]=\"err.title\" [detail]=\"err.detail\" />\n } @else {\n <div class=\"afp-flex afp-items-center afp-justify-center afp-w-full afp-h-full\">\n <div class=\"afp-w-full afp-h-full afp-relative\">\n @if (isLoading()) {\n <div class=\"afp-absolute afp-inset-0 afp-flex afp-items-center afp-justify-center afp-bg-surface-3 afp-backdrop-blur-sm afp-z-10\">\n <div class=\"afp-text-center\">\n <div class=\"afp-w-12 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\"></div>\n <p class=\"afp-text-sm afp-text-fg-secondary afp-font-medium\">{{ t('video.loading') }}</p>\n </div>\n </div>\n }\n\n <div\n #videoContainerRef\n class=\"afp-overflow-hidden afp-w-full afp-h-full\"\n style=\"box-shadow: 0 20px 60px rgba(0, 0, 0, 0.4), 0 0 0 1px rgba(255, 255, 255, 0.05)\"\n ></div>\n </div>\n </div>\n }\n `,\n }]\n }], ctorParameters: () => [] });\n\nexport { VideoRenderer };\n//# sourceMappingURL=eternalheart-angular-file-preview-index-D9jJNzeM.mjs.map\n"],"names":["getVideoMimeType"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-pG0Ko5mI-DthQJg-X.mjs","sources":["../fesm2022/eternalheart-angular-file-preview-index-pG0Ko5mI.mjs"],"sourcesContent":["import * as i0 from '@angular/core';\nimport { input, inject, viewChild, signal, afterNextRender, effect, untracked, DestroyRef, ChangeDetectionStrategy, Component } from '@angular/core';\nimport * as THREE from 'three';\nimport { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';\nimport { DXFLoader } from 'three-dxf-loader';\nimport { STLLoader } from 'three/examples/jsm/loaders/STLLoader.js';\nimport { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader.js';\nimport { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';\nimport { L as LocaleService, R as RequestService, g as getFallbackTranslator } from './eternalheart-angular-file-preview-eternalheart-angular-file-preview-DXwNhxAB.mjs';\nimport { T as ToolbarEventEmitter } from './eternalheart-angular-file-preview-base.types-D5x7QPey.mjs';\nimport { RotateCcw, Box, Grid3x3, Axis3d } from 'lucide-angular';\n\nfunction getCadToolbarGroups(ctx) {\n return [\n {\n items: [\n {\n type: 'button',\n icon: RotateCcw,\n tooltip: ctx.t('toolbar.reset'),\n action: () => ctx.cadRef?.resetView(),\n },\n ],\n },\n {\n items: [\n {\n type: 'button',\n icon: Box,\n tooltip: ctx.wireframe ? ctx.t('cad.solid') : ctx.t('cad.wireframe'),\n active: ctx.wireframe,\n action: () => ctx.cadRef?.toggleWireframe(),\n },\n {\n type: 'button',\n icon: Grid3x3,\n tooltip: ctx.t('cad.grid'),\n active: ctx.showGrid,\n action: () => ctx.cadRef?.toggleGrid(),\n },\n {\n type: 'button',\n icon: Axis3d,\n tooltip: ctx.t('cad.axes'),\n active: ctx.showAxes,\n action: () => ctx.cadRef?.toggleAxes(),\n },\n ],\n },\n ];\n}\n\nclass CadRenderer {\n constructor() {\n this.url = input.required();\n this.file = input(undefined);\n this.fileName = input(undefined);\n this.locale = inject(LocaleService, { optional: true });\n this.request = inject(RequestService, { optional: true });\n this.t = this.locale?.t() ?? getFallbackTranslator();\n this.container = viewChild('containerRef');\n this.toolbarEmitter = new ToolbarEventEmitter();\n this.mounted = signal(false);\n this.loading = signal(true);\n this.error = signal(null);\n this.wireframe = signal(false);\n this.showGrid = signal(true);\n this.showAxes = signal(true);\n this.scene = null;\n this.camera = null;\n this.renderer = null;\n this.controls = null;\n this.model = null;\n this.grid = null;\n this.axes = null;\n this.animationId = null;\n this.abortController = null;\n this.isCleanedUp = false;\n this.getToolbarGroups = () => {\n return getCadToolbarGroups({\n cadRef: {\n resetView: () => this.resetView(),\n toggleWireframe: () => this.toggleWireframe(),\n toggleGrid: () => this.toggleGrid(),\n toggleAxes: () => this.toggleAxes(),\n },\n wireframe: this.wireframe(),\n showGrid: this.showGrid(),\n showAxes: this.showAxes(),\n t: this.t,\n });\n };\n this.onToolbarChange = (listener) => this.toolbarEmitter.subscribe(listener);\n this.handleResize = () => {\n const container = this.container()?.nativeElement;\n if (!container || !this.camera || !this.renderer || this.isCleanedUp)\n return;\n const newWidth = container.clientWidth;\n const newHeight = container.clientHeight;\n this.camera.aspect = newWidth / newHeight;\n this.camera.updateProjectionMatrix();\n this.renderer.setSize(newWidth, newHeight);\n };\n afterNextRender(() => this.mounted.set(true));\n effect(() => {\n const url = this.url();\n const mounted = this.mounted();\n if (!mounted || !url)\n return;\n untracked(() => {\n this.cleanup();\n this.loading.set(true);\n this.error.set(null);\n this.initScene();\n });\n });\n inject(DestroyRef).onDestroy(() => this.cleanup());\n }\n getExtension(url, fileName, file) {\n if (file?.name) {\n return file.name.split('.').pop()?.toLowerCase() || '';\n }\n if (fileName) {\n return fileName.split('.').pop()?.toLowerCase() || '';\n }\n return url.split('.').pop()?.toLowerCase().split('?')[0] || '';\n }\n resetView() {\n if (!this.controls || !this.camera || !this.model)\n return;\n const box = new THREE.Box3().setFromObject(this.model);\n const center = box.getCenter(new THREE.Vector3());\n const size = box.getSize(new THREE.Vector3());\n const maxDim = Math.max(size.x, size.y, size.z);\n const fov = this.camera.fov * (Math.PI / 180);\n let cameraZ = Math.abs(maxDim / 2 / Math.tan(fov / 2));\n cameraZ *= 1.5;\n this.camera.position.set(center.x + cameraZ, center.y + cameraZ, center.z + cameraZ);\n this.camera.lookAt(center);\n this.controls.target.copy(center);\n this.controls.update();\n }\n toggleWireframe() {\n this.wireframe.update((v) => !v);\n const wf = this.wireframe();\n if (this.model) {\n this.model.traverse((child) => {\n if (child instanceof THREE.Mesh) {\n const material = child.material;\n if (material) {\n if (Array.isArray(material)) {\n material.forEach((mat) => {\n mat.wireframe = wf;\n });\n }\n else {\n material.wireframe = wf;\n }\n }\n }\n });\n }\n this.toolbarEmitter.notify();\n }\n toggleGrid() {\n this.showGrid.update((v) => !v);\n if (this.grid) {\n this.grid.visible = this.showGrid();\n }\n this.toolbarEmitter.notify();\n }\n toggleAxes() {\n this.showAxes.update((v) => !v);\n if (this.axes) {\n this.axes.visible = this.showAxes();\n }\n this.toolbarEmitter.notify();\n }\n disposeMaterial(material) {\n if (material.map)\n material.map.dispose();\n if (material.lightMap)\n material.lightMap.dispose();\n if (material.bumpMap)\n material.bumpMap.dispose();\n if (material.normalMap)\n material.normalMap.dispose();\n if (material.specularMap)\n material.specularMap.dispose();\n if (material.envMap)\n material.envMap.dispose();\n material.dispose();\n }\n disposeThreeResources(obj) {\n obj.traverse((child) => {\n if (child.geometry) {\n child.geometry.dispose();\n }\n if (child.material) {\n if (Array.isArray(child.material)) {\n child.material.forEach((mat) => {\n this.disposeMaterial(mat);\n });\n }\n else {\n this.disposeMaterial(child.material);\n }\n }\n });\n }\n initScene() {\n const container = this.container()?.nativeElement;\n if (!container)\n return;\n this.isCleanedUp = false;\n this.abortController = new AbortController();\n const width = container.clientWidth;\n const height = container.clientHeight;\n this.scene = new THREE.Scene();\n this.scene.background = new THREE.Color(0x1a1a1a);\n this.camera = new THREE.PerspectiveCamera(45, width / height, 0.1, 10000);\n this.camera.position.set(100, 100, 100);\n this.renderer = new THREE.WebGLRenderer({ antialias: true });\n this.renderer.setSize(width, height);\n this.renderer.setPixelRatio(window.devicePixelRatio);\n container.appendChild(this.renderer.domElement);\n this.controls = new OrbitControls(this.camera, this.renderer.domElement);\n this.controls.enableDamping = true;\n this.controls.dampingFactor = 0.05;\n const ambientLight = new THREE.AmbientLight(0xffffff, 0.6);\n this.scene.add(ambientLight);\n const directionalLight1 = new THREE.DirectionalLight(0xffffff, 0.8);\n directionalLight1.position.set(1, 1, 1);\n this.scene.add(directionalLight1);\n const directionalLight2 = new THREE.DirectionalLight(0xffffff, 0.4);\n directionalLight2.position.set(-1, -1, -1);\n this.scene.add(directionalLight2);\n this.grid = new THREE.GridHelper(200, 20, 0x444444, 0x222222);\n this.grid.visible = this.showGrid();\n this.scene.add(this.grid);\n this.axes = new THREE.AxesHelper(100);\n this.axes.visible = this.showAxes();\n this.scene.add(this.axes);\n this.loadModel();\n const animate = () => {\n if (this.isCleanedUp)\n return;\n this.animationId = requestAnimationFrame(animate);\n this.controls?.update();\n if (this.scene && this.camera && this.renderer) {\n this.renderer.render(this.scene, this.camera);\n }\n };\n animate();\n window.addEventListener('resize', this.handleResize);\n }\n loadModel() {\n if (!this.scene || !this.camera || !this.controls || this.isCleanedUp)\n return;\n const ext = this.getExtension(this.url(), this.fileName(), this.file());\n let loader;\n const manager = new THREE.LoadingManager();\n if (ext === 'dxf') {\n loader = new DXFLoader();\n }\n else if (ext === 'stl') {\n loader = new STLLoader(manager);\n }\n else if (ext === 'obj') {\n loader = new OBJLoader(manager);\n }\n else if (ext === 'gltf' || ext === 'glb') {\n loader = new GLTFLoader(manager);\n }\n else {\n this.error.set(this.t('cad.parse_failed'));\n this.loading.set(false);\n return;\n }\n const handleLoadSuccess = (object, loadedExt) => {\n if (this.isCleanedUp)\n return;\n if (!object) {\n this.error.set(this.t('cad.parse_failed'));\n this.loading.set(false);\n return;\n }\n let loadedModel;\n if (loadedExt === 'stl') {\n const geometry = object;\n const material = new THREE.MeshPhongMaterial({\n color: 0x888888,\n flatShading: true,\n side: THREE.DoubleSide,\n });\n loadedModel = new THREE.Mesh(geometry, material);\n }\n else if (loadedExt === 'gltf' || loadedExt === 'glb') {\n loadedModel = object.scene;\n }\n else {\n loadedModel = object;\n loadedModel.traverse((child) => {\n if (child instanceof THREE.Mesh && !child.material) {\n child.material = new THREE.MeshPhongMaterial({\n color: 0x888888,\n side: THREE.DoubleSide,\n });\n }\n });\n }\n this.scene.add(loadedModel);\n this.model = loadedModel;\n const box = new THREE.Box3().setFromObject(loadedModel);\n const center = box.getCenter(new THREE.Vector3());\n const size = box.getSize(new THREE.Vector3());\n const maxDim = Math.max(size.x, size.y, size.z);\n const fov = this.camera.fov * (Math.PI / 180);\n let cameraZ = Math.abs(maxDim / 2 / Math.tan(fov / 2));\n cameraZ *= 1.5;\n this.camera.position.set(center.x + cameraZ, center.y + cameraZ, center.z + cameraZ);\n this.camera.lookAt(center);\n this.controls.target.copy(center);\n this.controls.update();\n this.loading.set(false);\n this.toolbarEmitter.notify();\n };\n const handleLoadError = (err) => {\n if (this.isCleanedUp)\n return;\n if (err.name === 'AbortError') {\n return;\n }\n this.error.set(this.t('cad.load_failed'));\n this.loading.set(false);\n };\n const file = this.file();\n const fetcher = this.request?.fetcher() ?? ((u, init) => fetch(u, init));\n const loadPromise = file\n ? file.arrayBuffer()\n : fetcher(this.url(), { signal: this.abortController?.signal }).then(response => {\n if (this.isCleanedUp)\n return undefined;\n if (!response.ok)\n throw new Error('Failed to fetch file');\n return response.arrayBuffer();\n });\n loadPromise\n .then((data) => {\n if (this.isCleanedUp || !data)\n return;\n if (ext === 'stl') {\n const object = loader.parse(data);\n handleLoadSuccess(object, ext);\n }\n else if (ext === 'obj') {\n const decoder = new TextDecoder('utf-8');\n const text = decoder.decode(data);\n const object = loader.parse(text);\n handleLoadSuccess(object, ext);\n }\n else if (ext === 'gltf' || ext === 'glb') {\n loader.parse(data, '', (gltf) => {\n if (!this.isCleanedUp) {\n handleLoadSuccess(gltf, ext);\n }\n }, (err) => handleLoadError(err));\n }\n else if (ext === 'dxf') {\n const decoder = new TextDecoder('utf-8');\n const text = decoder.decode(data);\n const origSetFromPoints = THREE.BufferGeometry.prototype.setFromPoints;\n THREE.BufferGeometry.prototype.setFromPoints = function (points) {\n const filtered = (points || []).filter((p) => p && p.x !== undefined && p.y !== undefined);\n return origSetFromPoints.call(this, filtered);\n };\n try {\n loader.loadString(text, (dxfData) => {\n if (!this.isCleanedUp) {\n const obj = dxfData?.entity || dxfData;\n handleLoadSuccess(obj, ext);\n }\n }, (err) => {\n handleLoadError(err);\n });\n }\n catch (err) {\n handleLoadError(err);\n }\n finally {\n THREE.BufferGeometry.prototype.setFromPoints = origSetFromPoints;\n }\n }\n })\n .catch((err) => {\n if (!this.isCleanedUp) {\n handleLoadError(err);\n }\n });\n }\n cleanup() {\n this.isCleanedUp = true;\n if (this.abortController) {\n this.abortController.abort();\n }\n if (this.animationId !== null) {\n cancelAnimationFrame(this.animationId);\n this.animationId = null;\n }\n window.removeEventListener('resize', this.handleResize);\n if (this.model) {\n this.disposeThreeResources(this.model);\n this.scene?.remove(this.model);\n this.model = null;\n }\n if (this.grid) {\n this.grid.geometry.dispose();\n this.grid.material.dispose();\n this.scene?.remove(this.grid);\n this.grid = null;\n }\n if (this.axes) {\n this.axes.geometry.dispose();\n this.axes.material.dispose();\n this.scene?.remove(this.axes);\n this.axes = null;\n }\n this.controls?.dispose();\n this.renderer?.dispose();\n const container = this.container()?.nativeElement;\n if (container && this.renderer?.domElement && container.contains(this.renderer.domElement)) {\n container.removeChild(this.renderer.domElement);\n }\n this.scene = null;\n this.camera = null;\n this.renderer = null;\n this.controls = null;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"19.2.25\", ngImport: i0, type: CadRenderer, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"19.2.25\", type: CadRenderer, isStandalone: true, selector: \"afp-cad-renderer\", inputs: { url: { classPropertyName: \"url\", publicName: \"url\", isSignal: true, isRequired: true, transformFunction: null }, file: { classPropertyName: \"file\", publicName: \"file\", isSignal: true, isRequired: false, transformFunction: null }, fileName: { classPropertyName: \"fileName\", publicName: \"fileName\", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: \"afp-block afp-w-full afp-h-full\" }, viewQueries: [{ propertyName: \"container\", first: true, predicate: [\"containerRef\"], descendants: true, isSignal: true }], ngImport: i0, template: `\n <div #containerRef class=\"afp-relative afp-w-full afp-h-full afp-bg-media-bg\">\n @if (error()) {\n <div class=\"afp-absolute afp-inset-0 afp-flex afp-items-center afp-justify-center afp-bg-surface-3 afp-z-10\">\n <div class=\"afp-text-center\">\n <p class=\"afp-text-fg-primary\">{{ error() }}</p>\n </div>\n </div>\n }\n\n @if (loading()) {\n <div class=\"afp-absolute afp-inset-0 afp-flex afp-items-center afp-justify-center afp-bg-surface-3 afp-z-10\">\n <div class=\"afp-text-center\">\n <div class=\"afp-inline-block afp-w-8 afp-h-8 afp-border-4 afp-border-spinner-track afp-border-t-spinner-head afp-rounded-full afp-animate-spin\"></div>\n <p class=\"afp-mt-4 afp-text-fg-secondary\">{{ t('cad.loading') }}</p>\n </div>\n </div>\n }\n </div>\n `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"19.2.25\", ngImport: i0, type: CadRenderer, decorators: [{\n type: Component,\n args: [{\n selector: 'afp-cad-renderer',\n standalone: true,\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 afp-bg-media-bg\">\n @if (error()) {\n <div class=\"afp-absolute afp-inset-0 afp-flex afp-items-center afp-justify-center afp-bg-surface-3 afp-z-10\">\n <div class=\"afp-text-center\">\n <p class=\"afp-text-fg-primary\">{{ error() }}</p>\n </div>\n </div>\n }\n\n @if (loading()) {\n <div class=\"afp-absolute afp-inset-0 afp-flex afp-items-center afp-justify-center afp-bg-surface-3 afp-z-10\">\n <div class=\"afp-text-center\">\n <div class=\"afp-inline-block afp-w-8 afp-h-8 afp-border-4 afp-border-spinner-track afp-border-t-spinner-head afp-rounded-full afp-animate-spin\"></div>\n <p class=\"afp-mt-4 afp-text-fg-secondary\">{{ t('cad.loading') }}</p>\n </div>\n </div>\n }\n </div>\n `,\n }]\n }], ctorParameters: () => [] });\n\nexport { CadRenderer };\n//# sourceMappingURL=eternalheart-angular-file-preview-index-pG0Ko5mI.mjs.map\n"],"names":[],"mappings":";;;;;;;;;;;;AAYA,SAAS,mBAAmB,CAAC,GAAG,EAAE;AAClC,IAAI,OAAO;AACX,QAAQ;AACR,YAAY,KAAK,EAAE;AACnB,gBAAgB;AAChB,oBAAoB,IAAI,EAAE,QAAQ;AAClC,oBAAoB,IAAI,EAAE,SAAS;AACnC,oBAAoB,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC;AACnD,oBAAoB,MAAM,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE;AACzD,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,QAAQ;AACR,YAAY,KAAK,EAAE;AACnB,gBAAgB;AAChB,oBAAoB,IAAI,EAAE,QAAQ;AAClC,oBAAoB,IAAI,EAAE,GAAG;AAC7B,oBAAoB,OAAO,EAAE,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC;AACxF,oBAAoB,MAAM,EAAE,GAAG,CAAC,SAAS;AACzC,oBAAoB,MAAM,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,eAAe,EAAE;AAC/D,iBAAiB;AACjB,gBAAgB;AAChB,oBAAoB,IAAI,EAAE,QAAQ;AAClC,oBAAoB,IAAI,EAAE,OAAO;AACjC,oBAAoB,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC;AAC9C,oBAAoB,MAAM,EAAE,GAAG,CAAC,QAAQ;AACxC,oBAAoB,MAAM,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE;AAC1D,iBAAiB;AACjB,gBAAgB;AAChB,oBAAoB,IAAI,EAAE,QAAQ;AAClC,oBAAoB,IAAI,EAAE,MAAM;AAChC,oBAAoB,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC;AAC9C,oBAAoB,MAAM,EAAE,GAAG,CAAC,QAAQ;AACxC,oBAAoB,MAAM,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE;AAC1D,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,KAAK;AACL;;AAEA,MAAM,WAAW,CAAC;AAClB,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE;AACnC,QAAQ,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC;AACpC,QAAQ,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC;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,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,qBAAqB,EAAE;AAC5D,QAAQ,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,cAAc,CAAC;AAClD,QAAQ,IAAI,CAAC,cAAc,GAAG,IAAI,mBAAmB,EAAE;AACvD,QAAQ,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC;AACpC,QAAQ,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC;AACnC,QAAQ,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;AACjC,QAAQ,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;AACtC,QAAQ,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC;AACpC,QAAQ,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC;AACpC,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI;AACzB,QAAQ,IAAI,CAAC,MAAM,GAAG,IAAI;AAC1B,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI;AAC5B,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI;AAC5B,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI;AACzB,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI;AACxB,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI;AACxB,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI;AAC/B,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI;AACnC,QAAQ,IAAI,CAAC,WAAW,GAAG,KAAK;AAChC,QAAQ,IAAI,CAAC,gBAAgB,GAAG,MAAM;AACtC,YAAY,OAAO,mBAAmB,CAAC;AACvC,gBAAgB,MAAM,EAAE;AACxB,oBAAoB,SAAS,EAAE,MAAM,IAAI,CAAC,SAAS,EAAE;AACrD,oBAAoB,eAAe,EAAE,MAAM,IAAI,CAAC,eAAe,EAAE;AACjE,oBAAoB,UAAU,EAAE,MAAM,IAAI,CAAC,UAAU,EAAE;AACvD,oBAAoB,UAAU,EAAE,MAAM,IAAI,CAAC,UAAU,EAAE;AACvD,iBAAiB;AACjB,gBAAgB,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;AAC3C,gBAAgB,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AACzC,gBAAgB,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AACzC,gBAAgB,CAAC,EAAE,IAAI,CAAC,CAAC;AACzB,aAAa,CAAC;AACd,QAAQ,CAAC;AACT,QAAQ,IAAI,CAAC,eAAe,GAAG,CAAC,QAAQ,KAAK,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,QAAQ,CAAC;AACpF,QAAQ,IAAI,CAAC,YAAY,GAAG,MAAM;AAClC,YAAY,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,aAAa;AAC7D,YAAY,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,WAAW;AAChF,gBAAgB;AAChB,YAAY,MAAM,QAAQ,GAAG,SAAS,CAAC,WAAW;AAClD,YAAY,MAAM,SAAS,GAAG,SAAS,CAAC,YAAY;AACpD,YAAY,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,QAAQ,GAAG,SAAS;AACrD,YAAY,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAAE;AAChD,YAAY,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC;AACtD,QAAQ,CAAC;AACT,QAAQ,eAAe,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACrD,QAAQ,MAAM,CAAC,MAAM;AACrB,YAAY,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AAClC,YAAY,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;AAC1C,YAAY,IAAI,CAAC,OAAO,IAAI,CAAC,GAAG;AAChC,gBAAgB;AAChB,YAAY,SAAS,CAAC,MAAM;AAC5B,gBAAgB,IAAI,CAAC,OAAO,EAAE;AAC9B,gBAAgB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtC,gBAAgB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACpC,gBAAgB,IAAI,CAAC,SAAS,EAAE;AAChC,YAAY,CAAC,CAAC;AACd,QAAQ,CAAC,CAAC;AACV,QAAQ,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;AAC1D,IAAI;AACJ,IAAI,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE;AACtC,QAAQ,IAAI,IAAI,EAAE,IAAI,EAAE;AACxB,YAAY,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;AAClE,QAAQ;AACR,QAAQ,IAAI,QAAQ,EAAE;AACtB,YAAY,OAAO,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;AACjE,QAAQ;AACR,QAAQ,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AACtE,IAAI;AACJ,IAAI,SAAS,GAAG;AAChB,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK;AACzD,YAAY;AACZ,QAAQ,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;AAC9D,QAAQ,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;AACzD,QAAQ,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;AACrD,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AACvD,QAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC;AACrD,QAAQ,IAAI,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AAC9D,QAAQ,OAAO,IAAI,GAAG;AACtB,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC;AAC5F,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;AAClC,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AACzC,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AAC9B,IAAI;AACJ,IAAI,eAAe,GAAG;AACtB,QAAQ,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACxC,QAAQ,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE;AACnC,QAAQ,IAAI,IAAI,CAAC,KAAK,EAAE;AACxB,YAAY,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,KAAK;AAC3C,gBAAgB,IAAI,KAAK,YAAY,KAAK,CAAC,IAAI,EAAE;AACjD,oBAAoB,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ;AACnD,oBAAoB,IAAI,QAAQ,EAAE;AAClC,wBAAwB,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;AACrD,4BAA4B,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK;AACtD,gCAAgC,GAAG,CAAC,SAAS,GAAG,EAAE;AAClD,4BAA4B,CAAC,CAAC;AAC9B,wBAAwB;AACxB,6BAA6B;AAC7B,4BAA4B,QAAQ,CAAC,SAAS,GAAG,EAAE;AACnD,wBAAwB;AACxB,oBAAoB;AACpB,gBAAgB;AAChB,YAAY,CAAC,CAAC;AACd,QAAQ;AACR,QAAQ,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;AACpC,IAAI;AACJ,IAAI,UAAU,GAAG;AACjB,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACvC,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE;AACvB,YAAY,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC/C,QAAQ;AACR,QAAQ,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;AACpC,IAAI;AACJ,IAAI,UAAU,GAAG;AACjB,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACvC,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE;AACvB,YAAY,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC/C,QAAQ;AACR,QAAQ,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;AACpC,IAAI;AACJ,IAAI,eAAe,CAAC,QAAQ,EAAE;AAC9B,QAAQ,IAAI,QAAQ,CAAC,GAAG;AACxB,YAAY,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE;AAClC,QAAQ,IAAI,QAAQ,CAAC,QAAQ;AAC7B,YAAY,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE;AACvC,QAAQ,IAAI,QAAQ,CAAC,OAAO;AAC5B,YAAY,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE;AACtC,QAAQ,IAAI,QAAQ,CAAC,SAAS;AAC9B,YAAY,QAAQ,CAAC,SAAS,CAAC,OAAO,EAAE;AACxC,QAAQ,IAAI,QAAQ,CAAC,WAAW;AAChC,YAAY,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE;AAC1C,QAAQ,IAAI,QAAQ,CAAC,MAAM;AAC3B,YAAY,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE;AACrC,QAAQ,QAAQ,CAAC,OAAO,EAAE;AAC1B,IAAI;AACJ,IAAI,qBAAqB,CAAC,GAAG,EAAE;AAC/B,QAAQ,GAAG,CAAC,QAAQ,CAAC,CAAC,KAAK,KAAK;AAChC,YAAY,IAAI,KAAK,CAAC,QAAQ,EAAE;AAChC,gBAAgB,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE;AACxC,YAAY;AACZ,YAAY,IAAI,KAAK,CAAC,QAAQ,EAAE;AAChC,gBAAgB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;AACnD,oBAAoB,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK;AACpD,wBAAwB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;AACjD,oBAAoB,CAAC,CAAC;AACtB,gBAAgB;AAChB,qBAAqB;AACrB,oBAAoB,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC;AACxD,gBAAgB;AAChB,YAAY;AACZ,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ,IAAI,SAAS,GAAG;AAChB,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,aAAa;AACzD,QAAQ,IAAI,CAAC,SAAS;AACtB,YAAY;AACZ,QAAQ,IAAI,CAAC,WAAW,GAAG,KAAK;AAChC,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,EAAE;AACpD,QAAQ,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW;AAC3C,QAAQ,MAAM,MAAM,GAAG,SAAS,CAAC,YAAY;AAC7C,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE;AACtC,QAAQ,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;AACzD,QAAQ,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,CAAC,iBAAiB,CAAC,EAAE,EAAE,KAAK,GAAG,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC;AACjF,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC/C,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,KAAK,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AACpE,QAAQ,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;AAC5C,QAAQ,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,gBAAgB,CAAC;AAC5D,QAAQ,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;AACvD,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;AAChF,QAAQ,IAAI,CAAC,QAAQ,CAAC,aAAa,GAAG,IAAI;AAC1C,QAAQ,IAAI,CAAC,QAAQ,CAAC,aAAa,GAAG,IAAI;AAC1C,QAAQ,MAAM,YAAY,GAAG,IAAI,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC;AAClE,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC;AACpC,QAAQ,MAAM,iBAAiB,GAAG,IAAI,KAAK,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,CAAC;AAC3E,QAAQ,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC/C,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC;AACzC,QAAQ,MAAM,iBAAiB,GAAG,IAAI,KAAK,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,CAAC;AAC3E,QAAQ,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAClD,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC;AACzC,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC;AACrE,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC3C,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;AAC7C,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC3C,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,QAAQ,IAAI,CAAC,SAAS,EAAE;AACxB,QAAQ,MAAM,OAAO,GAAG,MAAM;AAC9B,YAAY,IAAI,IAAI,CAAC,WAAW;AAChC,gBAAgB;AAChB,YAAY,IAAI,CAAC,WAAW,GAAG,qBAAqB,CAAC,OAAO,CAAC;AAC7D,YAAY,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE;AACnC,YAAY,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC5D,gBAAgB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;AAC7D,YAAY;AACZ,QAAQ,CAAC;AACT,QAAQ,OAAO,EAAE;AACjB,QAAQ,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC;AAC5D,IAAI;AACJ,IAAI,SAAS,GAAG;AAChB,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,WAAW;AAC7E,YAAY;AACZ,QAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;AAC/E,QAAQ,IAAI,MAAM;AAClB,QAAQ,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,cAAc,EAAE;AAClD,QAAQ,IAAI,GAAG,KAAK,KAAK,EAAE;AAC3B,YAAY,MAAM,GAAG,IAAI,SAAS,EAAE;AACpC,QAAQ;AACR,aAAa,IAAI,GAAG,KAAK,KAAK,EAAE;AAChC,YAAY,MAAM,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC;AAC3C,QAAQ;AACR,aAAa,IAAI,GAAG,KAAK,KAAK,EAAE;AAChC,YAAY,MAAM,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC;AAC3C,QAAQ;AACR,aAAa,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,KAAK,EAAE;AAClD,YAAY,MAAM,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC;AAC5C,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC;AACtD,YAAY,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACnC,YAAY;AACZ,QAAQ;AACR,QAAQ,MAAM,iBAAiB,GAAG,CAAC,MAAM,EAAE,SAAS,KAAK;AACzD,YAAY,IAAI,IAAI,CAAC,WAAW;AAChC,gBAAgB;AAChB,YAAY,IAAI,CAAC,MAAM,EAAE;AACzB,gBAAgB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC;AAC1D,gBAAgB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACvC,gBAAgB;AAChB,YAAY;AACZ,YAAY,IAAI,WAAW;AAC3B,YAAY,IAAI,SAAS,KAAK,KAAK,EAAE;AACrC,gBAAgB,MAAM,QAAQ,GAAG,MAAM;AACvC,gBAAgB,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,iBAAiB,CAAC;AAC7D,oBAAoB,KAAK,EAAE,QAAQ;AACnC,oBAAoB,WAAW,EAAE,IAAI;AACrC,oBAAoB,IAAI,EAAE,KAAK,CAAC,UAAU;AAC1C,iBAAiB,CAAC;AAClB,gBAAgB,WAAW,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAChE,YAAY;AACZ,iBAAiB,IAAI,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,KAAK,EAAE;AAClE,gBAAgB,WAAW,GAAG,MAAM,CAAC,KAAK;AAC1C,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,WAAW,GAAG,MAAM;AACpC,gBAAgB,WAAW,CAAC,QAAQ,CAAC,CAAC,KAAK,KAAK;AAChD,oBAAoB,IAAI,KAAK,YAAY,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;AACxE,wBAAwB,KAAK,CAAC,QAAQ,GAAG,IAAI,KAAK,CAAC,iBAAiB,CAAC;AACrE,4BAA4B,KAAK,EAAE,QAAQ;AAC3C,4BAA4B,IAAI,EAAE,KAAK,CAAC,UAAU;AAClD,yBAAyB,CAAC;AAC1B,oBAAoB;AACpB,gBAAgB,CAAC,CAAC;AAClB,YAAY;AACZ,YAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC;AACvC,YAAY,IAAI,CAAC,KAAK,GAAG,WAAW;AACpC,YAAY,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,aAAa,CAAC,WAAW,CAAC;AACnE,YAAY,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;AAC7D,YAAY,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;AACzD,YAAY,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAC3D,YAAY,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC;AACzD,YAAY,IAAI,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AAClE,YAAY,OAAO,IAAI,GAAG;AAC1B,YAAY,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC;AAChG,YAAY,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;AACtC,YAAY,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AAC7C,YAAY,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AAClC,YAAY,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACnC,YAAY,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;AACxC,QAAQ,CAAC;AACT,QAAQ,MAAM,eAAe,GAAG,CAAC,GAAG,KAAK;AACzC,YAAY,IAAI,IAAI,CAAC,WAAW;AAChC,gBAAgB;AAChB,YAAY,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE;AAC3C,gBAAgB;AAChB,YAAY;AACZ,YAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;AACrD,YAAY,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACnC,QAAQ,CAAC;AACT,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AAChC,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAChF,QAAQ,MAAM,WAAW,GAAG;AAC5B,cAAc,IAAI,CAAC,WAAW;AAC9B,cAAc,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI;AAC7F,gBAAgB,IAAI,IAAI,CAAC,WAAW;AACpC,oBAAoB,OAAO,SAAS;AACpC,gBAAgB,IAAI,CAAC,QAAQ,CAAC,EAAE;AAChC,oBAAoB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC;AAC3D,gBAAgB,OAAO,QAAQ,CAAC,WAAW,EAAE;AAC7C,YAAY,CAAC,CAAC;AACd,QAAQ;AACR,aAAa,IAAI,CAAC,CAAC,IAAI,KAAK;AAC5B,YAAY,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI;AACzC,gBAAgB;AAChB,YAAY,IAAI,GAAG,KAAK,KAAK,EAAE;AAC/B,gBAAgB,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;AACjD,gBAAgB,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC;AAC9C,YAAY;AACZ,iBAAiB,IAAI,GAAG,KAAK,KAAK,EAAE;AACpC,gBAAgB,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC;AACxD,gBAAgB,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;AACjD,gBAAgB,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;AACjD,gBAAgB,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC;AAC9C,YAAY;AACZ,iBAAiB,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,KAAK,EAAE;AACtD,gBAAgB,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,KAAK;AACjD,oBAAoB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AAC3C,wBAAwB,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC;AACpD,oBAAoB;AACpB,gBAAgB,CAAC,EAAE,CAAC,GAAG,KAAK,eAAe,CAAC,GAAG,CAAC,CAAC;AACjD,YAAY;AACZ,iBAAiB,IAAI,GAAG,KAAK,KAAK,EAAE;AACpC,gBAAgB,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC;AACxD,gBAAgB,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;AACjD,gBAAgB,MAAM,iBAAiB,GAAG,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,aAAa;AACtF,gBAAgB,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,aAAa,GAAG,UAAU,MAAM,EAAE;AACjF,oBAAoB,MAAM,QAAQ,GAAG,CAAC,MAAM,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC;AAC9G,oBAAoB,OAAO,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC;AACjE,gBAAgB,CAAC;AACjB,gBAAgB,IAAI;AACpB,oBAAoB,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,OAAO,KAAK;AACzD,wBAAwB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AAC/C,4BAA4B,MAAM,GAAG,GAAG,OAAO,EAAE,MAAM,IAAI,OAAO;AAClE,4BAA4B,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC;AACvD,wBAAwB;AACxB,oBAAoB,CAAC,EAAE,CAAC,GAAG,KAAK;AAChC,wBAAwB,eAAe,CAAC,GAAG,CAAC;AAC5C,oBAAoB,CAAC,CAAC;AACtB,gBAAgB;AAChB,gBAAgB,OAAO,GAAG,EAAE;AAC5B,oBAAoB,eAAe,CAAC,GAAG,CAAC;AACxC,gBAAgB;AAChB,wBAAwB;AACxB,oBAAoB,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,aAAa,GAAG,iBAAiB;AACpF,gBAAgB;AAChB,YAAY;AACZ,QAAQ,CAAC;AACT,aAAa,KAAK,CAAC,CAAC,GAAG,KAAK;AAC5B,YAAY,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACnC,gBAAgB,eAAe,CAAC,GAAG,CAAC;AACpC,YAAY;AACZ,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ,IAAI,OAAO,GAAG;AACd,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI;AAC/B,QAAQ,IAAI,IAAI,CAAC,eAAe,EAAE;AAClC,YAAY,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;AACxC,QAAQ;AACR,QAAQ,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE;AACvC,YAAY,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC;AAClD,YAAY,IAAI,CAAC,WAAW,GAAG,IAAI;AACnC,QAAQ;AACR,QAAQ,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC;AAC/D,QAAQ,IAAI,IAAI,CAAC,KAAK,EAAE;AACxB,YAAY,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC;AAClD,YAAY,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AAC1C,YAAY,IAAI,CAAC,KAAK,GAAG,IAAI;AAC7B,QAAQ;AACR,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE;AACvB,YAAY,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;AACxC,YAAY,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;AACxC,YAAY,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AACzC,YAAY,IAAI,CAAC,IAAI,GAAG,IAAI;AAC5B,QAAQ;AACR,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE;AACvB,YAAY,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;AACxC,YAAY,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;AACxC,YAAY,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AACzC,YAAY,IAAI,CAAC,IAAI,GAAG,IAAI;AAC5B,QAAQ;AACR,QAAQ,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE;AAChC,QAAQ,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE;AAChC,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,aAAa;AACzD,QAAQ,IAAI,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE,UAAU,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;AACpG,YAAY,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;AAC3D,QAAQ;AACR,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI;AACzB,QAAQ,IAAI,CAAC,MAAM,GAAG,IAAI;AAC1B,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI;AAC5B,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI;AAC5B,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,IAAI,EAAE,EAAE,iBAAiB,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,iCAAiC,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,cAAc,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE;AACruB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,CAAC,uBAAuB,CAAC,MAAM,EAAE,CAAC,CAAC;AAC3E;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,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;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,CAAC;AACH,iBAAiB;AACjB,SAAS,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,CAAC;;;;"}