{"version":3,"file":"tethys-pro-media.mjs","sources":["../../../../packages/components/media/media-base.component.ts","../../../../packages/components/media/time.util.ts","../../../../packages/components/media/media.pipe.ts","../../../../packages/components/media/progress.component.ts","../../../../packages/components/media/controls.component.ts","../../../../packages/components/media/audio-controls.component.ts","../../../../packages/components/media/audio-player.component.ts","../../../../packages/components/media/video-player.component.ts","../../../../packages/components/media/module.ts","../../../../packages/components/media/tethys-pro-media.ts"],"sourcesContent":["import { Directive, OnInit, input, output } from '@angular/core';\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\nimport { isString } from '@tethys/cdk';\nimport { MixinBase, mixinUnsubscribe } from 'ngx-tethys/core';\nimport { ThySliderType } from 'ngx-tethys/slider';\n\nexport const DEFAULT_PLAYBACK_RATES = [0.5, 1, 1.25, 1.5, 2];\n\n/**\n * @internal\n */\n@Directive({\n    selector: '[thyMediaPlayerBase]',\n    standalone: true\n})\nexport class ThyMediaPlayerBaseComponent extends mixinUnsubscribe(MixinBase) implements OnInit {\n    public errorTips!: { formatError: string; networkError: string };\n\n    public showErrorTip = false;\n\n    public showMedia = true;\n\n    public errorTipText: string = '';\n\n    public set fileSrc(value: string | SafeUrl) {\n        if (isString(value)) {\n            this.internalFileSrc = this.sanitizer.bypassSecurityTrustResourceUrl(value);\n        } else {\n            this.internalFileSrc = value;\n        }\n    }\n\n    public get fileSrc() {\n        return this.internalFileSrc;\n    }\n\n    private internalFileSrc: SafeUrl = '';\n\n    /**\n     * 缓存值（0-100）\n     */\n    bufferedValue = 0;\n\n    /**\n     * 进度值（0-100）\n     */\n    progressValue = 0;\n\n    /**\n     * 进度类型\n     */\n    readonly thyProgressType = input<ThySliderType>('primary');\n\n    /**\n     * 媒体元数据被加载完成后触发 能拿到媒体尺寸、时长等\n     */\n    readonly thyLoadedMetadata = output<HTMLVideoElement | HTMLAudioElement>();\n\n    constructor(public sanitizer: DomSanitizer) {\n        super();\n    }\n\n    ngOnInit(): void {}\n\n    onLoadedmetadata(event: Event) {}\n\n    onCanPlay() {\n        this.showErrorTip = false;\n    }\n\n    onError(event: Event) {\n        const errorCode = (event.target as HTMLMediaElement).error?.code;\n\n        if (errorCode === 3 || errorCode === 4) {\n            this.errorTipText = this.errorTips['formatError'];\n        } else {\n            this.errorTipText = this.errorTips['networkError'];\n        }\n        setTimeout(() => {\n            this.showErrorTip = true;\n        }, 1000);\n    }\n}\n","import { isNumber } from '@tethys/cdk';\n\n// Time helpers\nexport const getHours = (value: number) => Math.trunc((value / 60 / 60) % 60);\nexport const getMinutes = (value: number) => Math.trunc((value / 60) % 60);\nexport const getSeconds = (value: number) => Math.trunc(value % 60);\n\n// Format time to UI friendly string\nexport function formatTime(time = 0, displayHours = false, inverted = false): string {\n    if (!isNumber(time) || isNaN(time)) {\n        return formatTime(undefined, displayHours, inverted);\n    }\n\n    // Format time component to add leading zero\n    const format = (value: number) => `0${value}`.slice(-2);\n    // Breakdown to hours, mins, secs\n    let hours: string | number = getHours(time);\n    const mins = getMinutes(time);\n    const secs = getSeconds(time);\n\n    // Do we need to display hours?\n    if (displayHours || hours > 0) {\n        hours = `${hours}:`;\n    } else {\n        hours = '';\n    }\n\n    return `${inverted && time > 0 ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { formatTime } from './time.util';\n\n@Pipe({ name: 'thyTimeFormat', standalone: true })\nexport class ThyTimeFormatPipe implements PipeTransform {\n    constructor() {}\n\n    transform(time = 0, displayHours = false, inverted = false): string {\n        return formatTime(time, displayHours, inverted);\n    }\n}\n\n@Pipe({ name: 'thyVolumeFormat', standalone: true })\nexport class ThyVolumeFormatPipe implements PipeTransform {\n    constructor() {}\n\n    transform(volume: number | undefined): number {\n        return Number(((volume || 0) * 100).toFixed(0));\n    }\n}\n","import {\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    ElementRef,\n    NgZone,\n    OnInit,\n    effect,\n    input,\n    numberAttribute,\n    output,\n    viewChild\n} from '@angular/core';\nimport { useHostRenderer } from '@tethys/cdk/dom';\nimport { MixinBase, mixinUnsubscribe } from 'ngx-tethys/core';\nimport { ThySliderType } from 'ngx-tethys/slider';\nimport { clamp } from 'ngx-tethys/util';\nimport { Observable, Subscription, distinctUntilChanged, fromEvent, map, pluck, takeUntil, tap } from 'rxjs';\n\n@Component({\n    selector: 'thy-media-progress',\n    host: {\n        class: 'thy-media-progress',\n        '[class.thy-media-progress-vertical]': 'thyDirection() === \"vertical\"',\n        '[class.thy-media-progress-horizontal]': 'thyDirection() === \"horizontal\"'\n    },\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    template: `\n        <div class=\"thy-media-progress-rail\" #progressRail>\n            <div class=\"thy-media-progress-track\" #progressTrack>\n                <div class=\"thy-media-progress-pointer\" #progressPointer></div>\n            </div>\n            <div class=\"thy-media-progress-buffer\" #progressBuffer></div>\n        </div>\n    `,\n    standalone: true\n})\nexport class ThyMediaProgressComponent extends mixinUnsubscribe(MixinBase) implements OnInit, AfterViewInit {\n    readonly progressRail = viewChild<ElementRef>('progressRail');\n\n    readonly progressTrack = viewChild<ElementRef>('progressTrack');\n\n    readonly progressBuffer = viewChild<ElementRef>('progressBuffer');\n\n    /**\n     * 进度值\n     */\n    readonly thyProgressValue = input<number, unknown>(0, { transform: numberAttribute });\n\n    /**\n     * 缓存值\n     */\n    readonly thyBufferedValue = input<number, unknown>(0, { transform: numberAttribute });\n\n    /**\n     * 进度条方向\n     */\n    readonly thyDirection = input<'horizontal' | 'vertical'>('horizontal');\n\n    /**\n     * 进度主题类型 primary | success | info | warning | danger\n     */\n    readonly thyProgressType = input<ThySliderType | undefined>();\n\n    /**\n     * 移动结束后回调\n     */\n    readonly thyAfterChange = output<number>();\n\n    /**\n     * 移动开始\n     */\n    readonly thyMoveStart = output<void>();\n\n    /**\n     * 移动中\n     */\n    readonly thyMove = output<void>();\n\n    /**\n     * 移动结束\n     */\n    readonly thyMoveEnd = output<void>();\n\n    get dimension() {\n        return this.thyDirection() === 'horizontal' ? 'width' : 'height';\n    }\n\n    private dragStartListener: Observable<number> | undefined;\n\n    private dragMoveListener: Observable<number> | undefined;\n\n    private dragEndListener: Observable<Event> | undefined;\n\n    private dragStartHandler: Subscription | undefined;\n\n    private dragMoveHandler: Subscription | undefined;\n\n    private dragEndHandler: Subscription | undefined;\n\n    private hostRenderer = useHostRenderer();\n\n    typeClassName = '';\n\n    progressValue = 0;\n\n    constructor(\n        private cdr: ChangeDetectorRef,\n        private ref: ElementRef,\n        private ngZone: NgZone\n    ) {\n        super();\n        effect(() => {\n            const value = this.thyProgressValue() as number;\n            this.setValue(value);\n        });\n\n        effect(() => {\n            const progressBuffer = this.progressBuffer();\n            const bufferedValue = this.thyBufferedValue() as number;\n            if (progressBuffer && bufferedValue) {\n                const validValue = bufferedValue <= 0 ? 0 : bufferedValue >= 100 ? 100 : bufferedValue;\n                (progressBuffer as ElementRef).nativeElement.style[this.dimension] = `${validValue}%`;\n            }\n        });\n\n        effect(() => {\n            const type = this.thyProgressType() as ThySliderType;\n            if (type) {\n                if (this.typeClassName) {\n                    this.hostRenderer.removeClass(this.typeClassName);\n                }\n                this.hostRenderer.addClass(type ? `thy-media-progress-${type}` : '');\n                this.typeClassName = `thy-media-progress-${type}`;\n            }\n        });\n    }\n\n    ngOnInit(): void {\n        this.subscribeMouseListeners(['start']);\n    }\n\n    ngAfterViewInit() {\n        this.registerMouseEventsListeners();\n        this.subscribeMouseListeners(['start']);\n    }\n\n    private setValue(value: number) {\n        if (this.progressValue !== value) {\n            this.progressValue = value <= 0 ? 0 : value >= 100 ? 100 : value;\n            this.updateTrackAndPointer();\n        }\n    }\n\n    private updateTrackAndPointer() {\n        (this.progressTrack() as ElementRef).nativeElement.style[this.dimension] = `${this.progressValue}%`;\n        this.cdr.markForCheck();\n    }\n\n    private unsubscribeMouseListeners(actions: string[] = ['start', 'move', 'end']) {\n        if (actions.includes('start') && this.dragStartHandler) {\n            this.dragStartHandler.unsubscribe();\n            this.dragStartHandler = undefined;\n        }\n        if (actions.includes('move') && this.dragMoveHandler) {\n            this.dragMoveHandler.unsubscribe();\n            this.dragMoveHandler = undefined;\n        }\n        if (actions.includes('end') && this.dragEndHandler) {\n            this.dragEndHandler.unsubscribe();\n            this.dragEndHandler = undefined;\n        }\n    }\n\n    private subscribeMouseListeners(actions: string[] = ['start', 'move', 'end']) {\n        if (actions.includes('start') && this.dragStartListener && !this.dragStartHandler) {\n            this.dragStartHandler = this.dragStartListener.subscribe(this.mouseStartMoving.bind(this));\n        }\n\n        if (actions.includes('move') && this.dragMoveListener && !this.dragMoveHandler) {\n            this.dragMoveHandler = this.dragMoveListener.subscribe(this.mouseMoving.bind(this));\n        }\n\n        if (actions.includes('end') && this.dragEndListener && !this.dragEndHandler) {\n            this.dragEndHandler = this.dragEndListener.subscribe(this.mouseStopMoving.bind(this));\n        }\n    }\n\n    private mouseStartMoving(value: number) {\n        this.pointerController(true);\n        this.setValue(value);\n    }\n\n    private mouseMoving(value: number) {\n        this.setValue(value);\n        this.cdr.markForCheck();\n    }\n\n    private mouseStopMoving(): void {\n        this.pointerController(false);\n        this.cdr.markForCheck();\n        this.thyAfterChange.emit(this.progressValue);\n    }\n\n    private pointerController(movable: boolean) {\n        if (movable) {\n            this.subscribeMouseListeners(['move', 'end']);\n        } else {\n            this.unsubscribeMouseListeners(['move', 'end']);\n        }\n    }\n\n    private registerMouseEventsListeners() {\n        const dimension = this.thyDirection() === 'vertical' ? 'pageY' : 'pageX';\n        this.dragStartListener = this.ngZone.runOutsideAngular(() => {\n            return (fromEvent(this.ref.nativeElement, 'mousedown') as Observable<MouseEvent>).pipe(\n                tap((e: MouseEvent) => {\n                    e.stopPropagation();\n                    e.preventDefault();\n                }),\n                pluck(dimension),\n                map((position: number, index) => this.mousePositionToAdaptiveValue(position)),\n                tap(() => {\n                    this.thyMoveStart.emit();\n                })\n            );\n        });\n\n        this.dragEndListener = this.ngZone.runOutsideAngular(() => {\n            return fromEvent(document, 'mouseup').pipe(\n                tap(() => {\n                    this.thyMoveEnd.emit();\n                })\n            );\n        });\n\n        this.dragMoveListener = this.ngZone.runOutsideAngular(() => {\n            const dimension = this.thyDirection() === 'vertical' ? 'pageY' : 'pageX';\n            return (fromEvent(document, 'mousemove') as Observable<MouseEvent>).pipe(\n                tap((e: MouseEvent) => {\n                    e.stopPropagation();\n                    e.preventDefault();\n                    this.thyMove.emit();\n                }),\n                pluck(dimension),\n                map((position: number) => this.mousePositionToAdaptiveValue(position)),\n                distinctUntilChanged(),\n                tap(() => {\n                    this.thyMove.emit();\n                }),\n                takeUntil(this.dragEndListener as Observable<Event>)\n            );\n        });\n    }\n\n    private mousePositionToAdaptiveValue(position: number): number {\n        const dimension = this.thyDirection() === 'vertical' ? 'clientHeight' : 'clientWidth';\n        const progressStartPosition = this.getProgressPagePosition();\n        const progressLength = (this.progressRail() as ElementRef).nativeElement[dimension];\n        const ratio = this.convertPointerPositionToRatio(position, progressStartPosition, progressLength);\n        return parseFloat((ratio * 100).toFixed(2));\n    }\n\n    private getProgressPagePosition(): number {\n        const rect = this.ref.nativeElement.getBoundingClientRect();\n        const window = this.ref.nativeElement.ownerDocument.defaultView;\n        const orientFields: string[] = this.thyDirection() === 'vertical' ? ['bottom', 'pageYOffset'] : ['left', 'pageXOffset'];\n        // const orientFields: string[] = ['left', 'pageXOffset'];\n        return rect[orientFields[0]] + window[orientFields[1]];\n    }\n\n    private convertPointerPositionToRatio(pointerPosition: number, startPosition: number, totalLength: number) {\n        return clamp(Math.abs(pointerPosition - startPosition) / totalLength, 0, 1);\n    }\n\n    ngOnDestroy(): void {\n        this.unsubscribeMouseListeners();\n        super.ngOnDestroy();\n    }\n}\n","import { ChangeDetectorRef, Component, DOCUMENT, ElementRef, inject, input, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { useHostRenderer } from '@tethys/cdk/dom';\nimport { ThyActionModule } from 'ngx-tethys/action';\nimport { MixinBase, mixinUnsubscribe } from 'ngx-tethys/core';\nimport { ThyDropdownModule } from 'ngx-tethys/dropdown';\nimport { ThyIconModule } from 'ngx-tethys/icon';\nimport { ThySliderType } from 'ngx-tethys/slider';\nimport { DEFAULT_PLAYBACK_RATES } from './media-base.component';\nimport { ThyTimeFormatPipe, ThyVolumeFormatPipe } from './media.pipe';\nimport { ThyMediaProgressComponent } from './progress.component';\n\nimport { injectLocale } from '@tethys/pro/i18n';\n\n@Component({\n    selector: 'thy-video-controls',\n    host: {\n        class: 'thy-media-controls'\n    },\n    template: `\n        <thy-media-progress\n            class=\"controls-progress\"\n            [thyProgressValue]=\"progressValue\"\n            [thyBufferedValue]=\"bufferedValue\"\n            [thyProgressType]=\"progressType()\"\n            (thyMoveStart)=\"onMouseStart()\"\n            (thyMoveEnd)=\"onMouseEnd()\"\n            (thyMoveMove)=\"onMouseMove()\"\n            (thyAfterChange)=\"afterProgressChange($event)\"\n        ></thy-media-progress>\n        <div class=\"controls-main\">\n            <div class=\"d-flex align-items-center controls-left\">\n                <a\n                    class=\"controls-play thy-action\"\n                    [class.disabled]=\"!mediaHtmlElement?.duration\"\n                    href=\"javascript:;\"\n                    (click)=\"playOrPause()\"\n                >\n                    <thy-icon [class.paused-image]=\"!isPlaying\" [thyIconName]=\"isPlaying ? 'pause' : 'play-fill'\"></thy-icon>\n                </a>\n\n                <div class=\"controls-time\">\n                    {{ mediaHtmlElement?.currentTime | thyTimeFormat }} /\n                    <span class=\"duration-time\">{{ mediaHtmlElement?.duration | thyTimeFormat }}</span>\n                </div>\n            </div>\n            <div class=\"d-flex controls-right\">\n                <a\n                    class=\"mr-2 controls-muted\"\n                    thyAction\n                    href=\"javascript:;\"\n                    (click)=\"muted()\"\n                    thyDropdownActive=\"active\"\n                    [thyDropdown]=\"volume\"\n                    thyPanelClass=\"volume-dropdown-panel\"\n                    [thyPlacement]=\"placement\"\n                    [thyTrigger]=\"'hover'\"\n                    [thyPopoverOptions]=\"popoverOptions\"\n                    (thyActiveChange)=\"actionActiveChange($event)\"\n                >\n                    <thy-icon [thyIconName]=\"mediaHtmlElement?.muted ? 'muted' : 'volume'\"></thy-icon>\n                </a>\n\n                <a class=\"mr-2\" thyAction href=\"javascript:;\" (click)=\"toggleFullscreen()\">\n                    <thy-icon [thyIconName]=\"'arrows-alt'\"></thy-icon>\n                </a>\n\n                <a\n                    thyAction\n                    [thyDropdown]=\"playbackRate\"\n                    [thyPlacement]=\"'topRight'\"\n                    thyDropdownActive=\"active\"\n                    thyPanelClass=\"playback-rate-dropdown-panel\"\n                    (thyActiveChange)=\"actionActiveChange($event)\"\n                    class=\"controls-playback-rate\"\n                    href=\"javascript:;\"\n                    >{{ locale().speed }}</a\n                >\n            </div>\n        </div>\n\n        <thy-dropdown-menu #volume>\n            <div class=\"volume-progress-container\">\n                <span class=\"mb-2\">{{ mediaHtmlElement?.volume | thyVolumeFormat }}%</span>\n\n                <thy-media-progress\n                    class=\"volume-progress\"\n                    [thyDirection]=\"'vertical'\"\n                    [thyProgressType]=\"progressType()\"\n                    [thyProgressValue]=\"mediaHtmlElement?.volume | thyVolumeFormat\"\n                    (thyAfterChange)=\"afterVolumeChange($event)\"\n                ></thy-media-progress>\n            </div>\n        </thy-dropdown-menu>\n\n        <thy-dropdown-menu #playbackRate>\n            @for (item of playBackRates; track $index) {\n                <a\n                    [class.active]=\"mediaHtmlElement?.playbackRate === item\"\n                    thyDropdownMenuItem\n                    href=\"javascript:;\"\n                    (click)=\"playBackRateChange(item)\"\n                >\n                    <span>{{ item }}X</span>\n                </a>\n            }\n        </thy-dropdown-menu>\n    `,\n    imports: [\n        FormsModule,\n        ThyIconModule,\n        ThyDropdownModule,\n        ThyActionModule,\n        ThyMediaProgressComponent,\n        ThyTimeFormatPipe,\n        ThyVolumeFormatPipe\n    ]\n})\nexport class ThyVideoControlsComponent extends mixinUnsubscribe(MixinBase) implements OnInit {\n    locale = injectLocale();\n\n    /**\n     * 进度主题类型 primary | success | info | warning | danger\n     */\n    readonly progressType = input.required<ThySliderType>({ alias: 'thyProgressType' });\n\n    /**\n     * 媒体组件\n     */\n    readonly media = input.required<ElementRef>({ alias: 'thyMedia' });\n\n    public get isPlaying(): boolean {\n        return !!this.mediaHtmlElement?.duration && !this.mediaHtmlElement?.paused;\n    }\n\n    public get mediaHtmlElement(): HTMLMediaElement | undefined {\n        return this.media()?.nativeElement;\n    }\n\n    /**\n     * 进度值\n     */\n    public progressValue: number = 0;\n\n    /**\n     * 缓存值\n     */\n    bufferedValue: number = 0;\n\n    tempVolume: number = 1;\n\n    popoverOptions = { insideClosable: false, outsideClosable: false };\n\n    private hostRenderer = useHostRenderer();\n\n    playBackRates = DEFAULT_PLAYBACK_RATES;\n\n    placement = 'topCenter' as any;\n\n    get isFullscreen() {\n        return this.document?.fullscreen && this.document?.fullscreenElement === this.mediaHtmlElement;\n    }\n\n    private document: any = inject(DOCUMENT);\n\n    constructor(private cdr: ChangeDetectorRef) {\n        super();\n    }\n\n    ngOnInit(): void {\n        this.hostRenderer.addClass('thy-media-controls-paused');\n    }\n\n    actionActiveChange(active: boolean) {\n        if (active) {\n            this.hostRenderer.addClass('thy-media-controls-paused');\n            this.hostRenderer.removeClass('thy-media-controls-playing');\n        } else {\n            if (!this.mediaHtmlElement?.paused) {\n                this.hostRenderer.addClass('thy-media-controls-playing');\n                this.hostRenderer.removeClass('thy-media-controls-paused');\n            }\n        }\n    }\n\n    onCanPlay() {\n        if (this.mediaHtmlElement) {\n            this.mediaHtmlElement.ontimeupdate = this.onTimeUpdate;\n            this.mediaHtmlElement.onwaiting = this.onWaiting;\n        }\n\n        this.cdr.markForCheck();\n    }\n\n    /**\n     * 播放时间更新\n     * 非禁用或当前时间为总时长重新设置进度\n     */\n    onTimeUpdate = () => {\n        if (this.mediaHtmlElement) {\n            const { currentTime, duration, paused } = this.mediaHtmlElement;\n            if (currentTime === duration || !paused) {\n                this.setProgressValue();\n            }\n        }\n    };\n\n    onWaiting = () => {\n        if (this.mediaHtmlElement) {\n            const { currentTime, duration, paused } = this.mediaHtmlElement;\n            if (currentTime === duration || !paused) {\n                this.setProgressValue();\n            }\n        }\n    };\n\n    /**\n     * 设置进度以及缓存\n     * 根据最新播放时间和总时长计算进度\n     * 根据最新缓存和总时长重新计算缓存\n     */\n    setProgressValue() {\n        const { currentTime, duration, buffered } = this.mediaHtmlElement!;\n        let ratio = currentTime / duration;\n        this.progressValue = Math.round(ratio * 100);\n        if (ratio !== 0 && ratio !== 1) {\n            const bufferedValue = (((buffered?.end && buffered.end(ratio)) || 0) / duration) * 100;\n            this.bufferedValue = Math.round(bufferedValue);\n        }\n        if (this.progressValue === 100) {\n            this.mediaHtmlElement!.currentTime = 0;\n            this.setProgressValue();\n        }\n        this.cdr.markForCheck();\n    }\n\n    onMouseStart() {\n        this.onPause();\n    }\n\n    onMouseMove() {\n        this.mediaHtmlElement?.pause();\n    }\n\n    onMouseEnd() {\n        this.onPlay();\n    }\n\n    playOrPause() {\n        if (this.mediaHtmlElement?.duration) {\n            if (this.mediaHtmlElement.paused) {\n                this.onPlay();\n                this.hostRenderer.addClass('thy-media-controls-playing');\n                this.hostRenderer.removeClass('thy-media-controls-paused');\n            } else {\n                this.onPause();\n                this.hostRenderer.addClass('thy-media-controls-paused');\n                this.hostRenderer.removeClass('thy-media-controls-playing');\n            }\n        }\n    }\n\n    onPlay() {\n        if (this.mediaHtmlElement?.duration) {\n            this.mediaHtmlElement.play && this.mediaHtmlElement.play();\n            this.hostRenderer.removeClass('thy-media-controls-paused');\n            this.tempVolume = this.mediaHtmlElement.volume;\n            this.cdr.markForCheck();\n        }\n    }\n\n    /**\n     * 暂停播放\n     * chrome 50后触发video.play会返回promise对象 播放失败会inject\n     */\n    onPause() {\n        const playPromise = this.mediaHtmlElement?.play && this.mediaHtmlElement?.play();\n\n        if (playPromise !== undefined) {\n            playPromise\n                .then(() => {\n                    this.mediaHtmlElement?.pause();\n                    this.cdr.markForCheck();\n                })\n                .catch(() => {});\n        }\n    }\n\n    afterVolumeChange(value: number) {\n        if (this.mediaHtmlElement) {\n            this.mediaHtmlElement.volume = value / 100;\n            this.tempVolume = this.mediaHtmlElement.volume;\n            this.mediaHtmlElement.muted = false;\n            this.cdr.markForCheck();\n        }\n    }\n\n    muted() {\n        if (this.mediaHtmlElement) {\n            this.mediaHtmlElement.volume = this.mediaHtmlElement.muted ? this.tempVolume : 0;\n            this.mediaHtmlElement.muted = !this.mediaHtmlElement.muted;\n            this.cdr.markForCheck();\n        }\n    }\n\n    toggleFullscreen() {\n        const mediaElement = this.mediaHtmlElement as any;\n        if (!this.isFullscreen) {\n            if (mediaElement.requestFullscreen) {\n                mediaElement.requestFullscreen();\n            } else if (mediaElement.mozRequestFullScreen) {\n                mediaElement.mozRequestFullScreen();\n            } else if (mediaElement.webkitRequestFullscreen) {\n                mediaElement.webkitRequestFullscreen();\n            } else if (mediaElement.msRequestFullscreen) {\n                mediaElement.msRequestFullscreen();\n            }\n        } else {\n            if (this.document['mozCancelFullScreen']) {\n                this.document.mozCancelFullScreen();\n            } else if (this.document.webkitExitFullscreen) {\n                this.document.webkitExitFullscreen();\n            } else if (this.document.msExitFullscreen) {\n                this.document.msExitFullscreen();\n            } else {\n                this.document?.exitFullscreen();\n            }\n        }\n    }\n\n    /**\n     * 进度条点击事件\n     * 根据当前播放时间\n     * 设置缓存值\n     * buffered.end 取值为 0-1\n     */\n    afterProgressChange(value: number) {\n        const { duration, buffered } = this.mediaHtmlElement!;\n\n        const currentTime = (value / 100) * duration;\n        // 防止 duration 值为NaN\n        if (isFinite(currentTime)) {\n            this.mediaHtmlElement!.currentTime = currentTime;\n            const ratio = this.mediaHtmlElement!.currentTime / duration;\n            if (ratio !== 0 && ratio !== 1) {\n                this.bufferedValue = (((buffered?.end && buffered.end(ratio)) || 0) / duration) * 100;\n            }\n        }\n        this.cdr.markForCheck();\n    }\n\n    playBackRateChange(rate: number) {\n        this.mediaHtmlElement!.playbackRate = rate;\n        this.cdr.markForCheck();\n    }\n\n    ngOnDestroy(): void {}\n}\n","import { ChangeDetectorRef, Component, OnInit, input } from '@angular/core';\nimport { injectLocale } from '@tethys/pro/i18n';\nimport { ThyActionModule } from 'ngx-tethys/action';\nimport { ThyDropdownModule } from 'ngx-tethys/dropdown';\nimport { ThyFlexibleTextModule } from 'ngx-tethys/flexible-text';\nimport { ThyIconModule } from 'ngx-tethys/icon';\nimport { ThyVideoControlsComponent } from './controls.component';\nimport { ThyTimeFormatPipe } from './media.pipe';\nimport { ThyMediaProgressComponent } from './progress.component';\n\n@Component({\n    selector: 'thy-audio-controls',\n    host: {\n        class: 'thy-media-controls thy-media-controls-audio'\n    },\n    template: `\n        <ng-container>\n            <div class=\"controls-main\">\n                <a\n                    class=\"controls-play thy-action\"\n                    [class.disabled]=\"!mediaHtmlElement?.duration\"\n                    href=\"javascript:;\"\n                    (click)=\"playOrPause()\"\n                >\n                    <thy-icon [class.paused-image]=\"!isPlaying\" [thyIconName]=\"isPlaying ? 'pause' : 'play-fill'\"></thy-icon>\n                </a>\n                <div class=\"controls-content\">\n                    @if (!errorTips()) {\n                        <div class=\"file-description\" [class.hidden]=\"!fileName()\">\n                            <thy-flexible-text class=\"file-name\" [thyTooltipContent]=\"fileName()\"> {{ fileName() }}</thy-flexible-text>\n                            @if (fileSize()) {\n                                <span class=\"file-size\">{{ fileSize() }}</span>\n                            }\n                        </div>\n                    } @else {\n                        <thy-flexible-text [thyTooltipContent]=\"errorTips()\" class=\"error-tip\">\n                            {{ errorTips() }}\n                        </thy-flexible-text>\n                    }\n\n                    <div class=\"d-flex align-items-center\">\n                        <div class=\"current-time mr-4\">\n                            {{ mediaHtmlElement?.currentTime | thyTimeFormat }}\n                        </div>\n\n                        <thy-media-progress\n                            class=\"controls-progress\"\n                            [thyProgressValue]=\"progressValue\"\n                            [thyBufferedValue]=\"bufferedValue\"\n                            [thyProgressType]=\"progressType()\"\n                            (thyMoveStart)=\"onMouseStart()\"\n                            (thyMoveEnd)=\"onMouseEnd()\"\n                            (thyAfterChange)=\"afterProgressChange($event)\"\n                        ></thy-media-progress>\n                    </div>\n                </div>\n                <div class=\"controls-right\">\n                    <a\n                        [class.hidden]=\"errorTips()\"\n                        thyAction\n                        thyDropdownActive=\"active\"\n                        [thyDropdown]=\"menu\"\n                        class=\"controls-playback-rate\"\n                        thyPanelClass=\"playback-rate-dropdown-panel\"\n                        href=\"javascript:;\"\n                        >{{ locale().speed }}</a\n                    >\n\n                    <div class=\"duration-time\">\n                        {{ mediaHtmlElement?.duration | thyTimeFormat }}\n                    </div>\n                </div>\n            </div>\n        </ng-container>\n\n        <thy-dropdown-menu #menu>\n            @for (item of playBackRates; track $index) {\n                <a\n                    [class.active]=\"mediaHtmlElement?.playbackRate === item\"\n                    thyDropdownMenuItem\n                    href=\"javascript:;\"\n                    (click)=\"playBackRateChange(item)\"\n                >\n                    <span>{{ item }}X</span>\n                </a>\n            }\n        </thy-dropdown-menu>\n    `,\n    imports: [ThyIconModule, ThyFlexibleTextModule, ThyDropdownModule, ThyActionModule, ThyMediaProgressComponent, ThyTimeFormatPipe]\n})\nexport class ThyAudioControlsComponent extends ThyVideoControlsComponent implements OnInit {\n    locale = injectLocale();\n\n    readonly fileName = input.required<string>({ alias: 'thyFileName' });\n\n    readonly fileSize = input.required<number | string>({ alias: 'thyFileSize' });\n\n    readonly errorTips = input.required<string>({ alias: 'thyErrorTips' });\n\n    constructor(private changeDetectorRef: ChangeDetectorRef) {\n        super(changeDetectorRef);\n    }\n}\n","import {\n    AfterViewInit,\n    ChangeDetectorRef,\n    Component,\n    ElementRef,\n    HostBinding,\n    Input,\n    OnInit,\n    input,\n    model,\n    viewChild\n} from '@angular/core';\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\nimport { injectLocale } from '@tethys/pro/i18n';\nimport { coerceBooleanProperty } from 'ngx-tethys/util';\nimport { ThyAudioControlsComponent } from './audio-controls.component';\nimport { ThyVideoControlsComponent } from './controls.component';\nimport { ThyMediaPlayerBaseComponent } from './media-base.component';\n\n@Component({\n    selector: 'thy-audio-player',\n    template: `\n        <div class=\"media-content audio-content\">\n            @if (showMedia) {\n                <audio\n                    #audioElement\n                    class=\"audio\"\n                    [src]=\"thySrc\"\n                    [muted]=\"false\"\n                    [autoplay]=\"thyAutoPlay()\"\n                    (loadedmetadata)=\"onLoadedmetadata($event)\"\n                    (error)=\"onError($event)\"\n                    (canplay)=\"onCanPlay()\"\n                ></audio>\n            }\n            <thy-audio-controls\n                #controls\n                [thyMedia]=\"audio\"\n                [thyErrorTips]=\"errorTipText\"\n                [thyProgressType]=\"thyProgressType()\"\n                [thyFileName]=\"thyFileName()\"\n                [thyFileSize]=\"thyFileSize()\"\n            >\n            </thy-audio-controls>\n        </div>\n    `,\n    imports: [ThyAudioControlsComponent]\n})\nexport class ThyAudioPlayerComponent extends ThyMediaPlayerBaseComponent implements OnInit, AfterViewInit {\n    @HostBinding('class') class = 'thy-audio-player thy-media-player';\n\n    readonly audioElement = viewChild.required<ElementRef<HTMLAudioElement>>('audioElement');\n\n    readonly controls = viewChild.required<ThyVideoControlsComponent>('controls');\n\n    locale = injectLocale();\n\n    /**\n     * 媒体资源的url\n     * angular 21.0.4 到 21.1.0 版本中，当 audio[src] 经过 bypassSecurityTrustResourceUrl 转换后，编译阶段不会清理\n     */\n    @Input() thySrc: string | SafeUrl = '';\n\n    /**\n     * 当下载到足够播放的媒体文件，是否可以自动播放\n     */\n    readonly thyAutoPlay = input(false, { transform: coerceBooleanProperty });\n\n    /**\n     * 文件大小\n     */\n    readonly thyFileSize = input.required<number | string>();\n\n    /**\n     * 文件名称\n     */\n    readonly thyFileName = model<string>('');\n\n    public errorTips = {\n        formatError: this.locale().audioFormatError,\n        networkError: this.locale().networkError\n    };\n\n    public audio!: ElementRef;\n\n    constructor(\n        public sanitizer: DomSanitizer,\n        public cdr: ChangeDetectorRef\n    ) {\n        super(sanitizer);\n    }\n\n    ngAfterViewInit() {\n        this.audio = this.audioElement();\n        this.cdr.detectChanges();\n    }\n\n    onLoadedmetadata(event: Event) {\n        this.thyLoadedMetadata.emit(this.audio?.nativeElement);\n    }\n\n    onCanPlay() {\n        const { src } = this.audio?.nativeElement;\n\n        const match = src.match(/([^\\/]+\\.mp3|[^\\/]+\\.(wav|ogg|flac|aac|m4a))$/i);\n\n        this.thyFileName.set(this.thyFileName() || (match && match[0]) || '');\n\n        this.controls()?.onCanPlay && this.controls()?.onCanPlay();\n    }\n}\n","import {\n    AfterViewInit,\n    ChangeDetectorRef,\n    Component,\n    ElementRef,\n    HostBinding,\n    Input,\n    OnDestroy,\n    OnInit,\n    input,\n    viewChild\n} from '@angular/core';\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\nimport { useHostRenderer } from '@tethys/cdk/dom';\nimport { injectLocale } from '@tethys/pro/i18n';\nimport { coerceBooleanProperty } from 'ngx-tethys/util';\nimport { ThyVideoControlsComponent } from './controls.component';\nimport { DEFAULT_PLAYBACK_RATES, ThyMediaPlayerBaseComponent } from './media-base.component';\n\n@Component({\n    selector: 'thy-video-player',\n    template: `\n        @if (showMedia) {\n            <video\n                #videoElement\n                class=\"media-content\"\n                [src]=\"fileSrc\"\n                [muted]=\"true\"\n                [autoplay]=\"thyAutoPlay()\"\n                (loadedmetadata)=\"onLoadedmetadata($event)\"\n                (error)=\"onError($event)\"\n                (canplay)=\"onCanPlay()\"\n            ></video>\n        }\n        @if (showErrorTip) {\n            <div class=\"error-tip\">\n                {{ errorTipText }}\n            </div>\n        }\n        <thy-video-controls #controls [thyMedia]=\"video\" [thyProgressType]=\"thyProgressType()\"></thy-video-controls>\n    `,\n    imports: [ThyVideoControlsComponent]\n})\nexport class ThyVideoPlayerComponent extends ThyMediaPlayerBaseComponent implements OnInit, AfterViewInit, OnDestroy {\n    @HostBinding('class') class = 'thy-video-player thy-media-player';\n\n    readonly videoElement = viewChild.required<ElementRef>('videoElement');\n\n    readonly controls = viewChild.required<ThyVideoControlsComponent>('controls');\n\n    locale = injectLocale();\n\n    /**\n     * 媒体资源的url\n     */\n    @Input() set thySrc(src: string | SafeUrl) {\n        this.fileSrc = src;\n    }\n\n    /**\n     * 当下载到足够播放的媒体文件，是否可以自动播放\n     */\n    readonly thyAutoPlay = input(false, { transform: coerceBooleanProperty });\n\n    public errorTips = {\n        formatError: this.locale().videoFormatError,\n        networkError: this.locale().networkError\n    };\n\n    playBackRates = DEFAULT_PLAYBACK_RATES;\n\n    private hostRenderer = useHostRenderer();\n\n    public video!: ElementRef;\n\n    constructor(\n        public sanitizer: DomSanitizer,\n        public cdr: ChangeDetectorRef\n    ) {\n        super(sanitizer);\n    }\n\n    ngOnInit(): void {}\n\n    ngAfterViewInit() {\n        this.video = this.videoElement();\n        this.cdr.detectChanges();\n    }\n\n    onCanPlay() {\n        this.showErrorTip = false;\n        this.controls()?.onCanPlay && this.controls()?.onCanPlay();\n    }\n\n    onLoadedmetadata(event: Event) {\n        this.thyLoadedMetadata.emit(this.video?.nativeElement);\n    }\n\n    ngOnDestroy() {\n        super.ngOnDestroy();\n    }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ThyActionModule } from 'ngx-tethys/action';\nimport { ThyDropdownModule } from 'ngx-tethys/dropdown';\nimport { ThyIconModule } from 'ngx-tethys/icon';\nimport { ThyAudioControlsComponent } from './audio-controls.component';\nimport { ThyAudioPlayerComponent } from './audio-player.component';\nimport { ThyVideoControlsComponent } from './controls.component';\nimport { ThyTimeFormatPipe, ThyVolumeFormatPipe } from './media.pipe';\nimport { ThyMediaProgressComponent } from './progress.component';\nimport { ThyVideoPlayerComponent } from './video-player.component';\n@NgModule({\n    imports: [\n        CommonModule,\n        FormsModule,\n        ThyIconModule,\n        ThyDropdownModule,\n        ThyActionModule,\n        ThyVideoPlayerComponent,\n        ThyAudioPlayerComponent,\n        ThyMediaProgressComponent,\n        ThyVideoControlsComponent,\n        ThyAudioControlsComponent,\n        ThyTimeFormatPipe,\n        ThyVolumeFormatPipe\n    ],\n    exports: [ThyVideoPlayerComponent, ThyAudioPlayerComponent],\n    providers: []\n})\nexport class ThyProMediaModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i4"],"mappings":"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"}