{"version":3,"file":"le2xx-ngx-audio-player.mjs","sources":["../../../projects/ngx-audio-player/src/lib/service/audio-player-service/audio-player.service.ts","../../../projects/ngx-audio-player/src/lib/pipe/seconds-to-minutes.ts","../../../projects/ngx-audio-player/src/lib/component/ngx-audio-player/ngx-audio-player.component.ts","../../../projects/ngx-audio-player/src/lib/component/ngx-audio-player/ngx-audio-player.component.html","../../../projects/ngx-audio-player/src/lib/ngx-audio-player.module.ts","../../../projects/ngx-audio-player/src/lib/model/track.model.ts","../../../projects/ngx-audio-player/src/public_api.ts","../../../projects/ngx-audio-player/src/le2xx-ngx-audio-player.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { Track } from '../../model/track.model';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class AudioPlayerService {\r\n\r\n  // Dynamic update of playlist\r\n  tracks: Track[] = [];\r\n  playlistSubject$: BehaviorSubject<Track[]> =\r\n    new BehaviorSubject<Track[]>(this.tracks);\r\n\r\n  // Get the current track\r\n  currentTrack: Track = null;\r\n  currentTrackSubject$: BehaviorSubject<Track> =\r\n    new BehaviorSubject<Track>(this.currentTrack);\r\n\r\n  // Get the current time\r\n  currentTime: any = null;\r\n  currentTimeSubject$: BehaviorSubject<any> =\r\n    new BehaviorSubject<any>(this.currentTime);\r\n\r\n  setPlaylist(tracks: Track[]) {\r\n    this.tracks = tracks;\r\n    this.playlistSubject$.next(this.tracks);\r\n  }\r\n\r\n  getPlaylist(): Observable<Track[]> {\r\n    return this.playlistSubject$.asObservable();\r\n  }\r\n\r\n  setCurrentTrack(currentTrack: Track) {\r\n    this.currentTrack = currentTrack;\r\n    this.currentTrackSubject$.next(this.currentTrack);\r\n  }\r\n\r\n  getCurrentTrack(): Observable<Track> {\r\n    return this.currentTrackSubject$.asObservable();\r\n  }\r\n\r\n  setCurrentTime(currentTime: any) {\r\n    this.currentTime = currentTime;\r\n    this.currentTimeSubject$.next(this.currentTime);\r\n  }\r\n\r\n  getCurrentTime(): Observable<any> {\r\n    return this.currentTimeSubject$.asObservable();\r\n  }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n/*\r\n * Transform seconds to minutes:seconds\r\n * Example : 270 -> 02:30\r\n*/\r\n@Pipe({ name: 'secondsToMinutes' })\r\nexport class SecondsToMinutesPipe implements PipeTransform {\r\n    transform(time: number): string {\r\n        const hours = ('0' + Math.floor(time / 3600)).slice(-2);\r\n        const minutes = ('0' + Math.floor((time % 3600) / 60)).slice(-2);\r\n        const seconds = ('0' + time % 60).slice(-2);\r\n        if (hours !== '00') { return `${hours}:${minutes}:${seconds}`; }\r\n        return `${minutes}:${seconds}`;\r\n    }\r\n}\r\n","import { Component, OnInit, Input, ViewChild, Output, ElementRef, OnChanges, SimpleChanges, EventEmitter } from '@angular/core';\r\nimport { Track } from '../../model/track.model';\r\nimport { AudioPlayerService } from '../../service/audio-player-service/audio-player.service';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { MatSlider } from '@angular/material/slider';\r\n\r\nclass EventResponse {\r\n    event: string;\r\n    track: Track;\r\n}\r\n\r\n@Component({\r\n    selector: 'mat-advanced-audio-player,ngx-audio-player',\r\n    templateUrl: './ngx-audio-player.component.html',\r\n    styleUrls: ['./ngx-audio-player.component.css']\r\n})\r\nexport class AudioPlayerComponent implements OnInit, OnChanges {\r\n\r\n    audioPlayerService: AudioPlayerService;\r\n    constructor(elem: ElementRef) {\r\n        if (elem.nativeElement.tagName.toLowerCase() === 'mat-advanced-audio-player') {\r\n            console.warn(`'mat-advanced-audio-player' selector is deprecated; use 'ngx-audio-player' instead.`);\r\n        }\r\n        this.audioPlayerService = new AudioPlayerService();\r\n    }\r\n\r\n    @Input()\r\n    set playlist(playlist: Track[]) {\r\n        this.audioPlayerService.setPlaylist(playlist);\r\n    }\r\n\r\n    @ViewChild(MatPaginator, { static: false }) set matPaginator(mp: MatPaginator) {\r\n        this.paginator = mp;\r\n        this.setDataSourceAttributes();\r\n    }\r\n\r\n\r\n    displayedColumns: string[];\r\n    dataSource = new MatTableDataSource<Track>();\r\n    paginator: MatPaginator;\r\n\r\n    timeLineDuration: MatSlider;\r\n    mediaType: string = null;\r\n\r\n    tracks: Track[] = [];\r\n\r\n    // all || one || none\r\n    @Input() repeat: 'all' | 'one' | 'none' = 'all';\r\n    @Input() displayTitle = true;\r\n    @Input() displayPlaylist = true;\r\n    @Input() displayVolumeControls = true;\r\n    @Input() displayVolumeSlider = false;\r\n    @Input() displayRepeatControls = true;\r\n    @Input() pageSizeOptions = [10, 20, 30];\r\n    @Input() expanded = true;\r\n    @Input() autoPlay = false;\r\n    @Input() disablePositionSlider = false;\r\n    @Input() displayArtist = false;\r\n    @Input() displayDuration = false;\r\n\r\n    // Support for internationalization\r\n    @Input() tableHeader = 'Playlist';\r\n    @Input() titleHeader = 'Title';\r\n    @Input() artistHeader = 'Artist';\r\n    @Input() durationHeader = 'Duration';\r\n\r\n    currentIndex = 0;\r\n\r\n    @Output()\r\n    trackPlaying: EventEmitter<EventResponse> = new EventEmitter<EventResponse>();\r\n    @Output()\r\n    trackPaused: EventEmitter<EventResponse> = new EventEmitter<EventResponse>();\r\n    @Output()\r\n    trackEnded: EventEmitter<EventResponse> = new EventEmitter<EventResponse>();\r\n    @Output()\r\n    nextTrackRequested: EventEmitter<EventResponse> = new EventEmitter<EventResponse>();\r\n    @Output()\r\n    previousTrackRequested: EventEmitter<EventResponse> = new EventEmitter<EventResponse>();\r\n    @Output()\r\n    trackSelected: EventEmitter<EventResponse> = new EventEmitter<EventResponse>();\r\n\r\n    @ViewChild('audioPlayer', { static: true }) player: ElementRef;\r\n\r\n    iOS = (/iPad|iPhone|iPod/.test(navigator.platform)\r\n        || (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1));\r\n\r\n    loaderDisplay = false;\r\n    isPlaying = false;\r\n    currentTime = 0;\r\n    volume = 0.1;\r\n    toggledVolume = 1.0;\r\n    duration = 0.01;\r\n\r\n    private startOffsetValue = 0;\r\n    @Input()\r\n    set startOffset(seconds: number) {\r\n        this.startOffsetValue = seconds;\r\n        this.player.nativeElement.currentTime = seconds;\r\n    }\r\n    get startOffset(): number {\r\n        return this.startOffsetValue;\r\n    }\r\n\r\n    @Input()\r\n    public endOffset = 0;\r\n\r\n    /**\r\n     * Allow to start the current track\r\n     */\r\n    @Input()\r\n    public play() {\r\n        if (!this.isPlaying) {\r\n            setTimeout(() => {\r\n                this.isPlaying = true;\r\n                this.player.nativeElement.play();\r\n            }, 50);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Allow to pause the current track\r\n     */\r\n    @Input()\r\n    public pause() {\r\n        if (this.isPlaying) {\r\n            setTimeout(() => {\r\n                this.isPlaying = false;\r\n                this.player.nativeElement.pause();\r\n            }, 50);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Allow to stop the current track\r\n     */\r\n    @Input()\r\n    public stop() {\r\n        setTimeout(() => {\r\n            this.isPlaying = false;\r\n            this.player.nativeElement.pause();\r\n            this.player.nativeElement.currentTime = 0;\r\n        }, 50);\r\n    }\r\n\r\n    currTimePosChanged(event) {\r\n        this.player.nativeElement.currentTime = event;\r\n    }\r\n\r\n    currVolumeChanged(event) {\r\n        this.volume = event;\r\n        this.toggledVolume = event;\r\n        this.player.nativeElement.volume = event;\r\n    }\r\n\r\n    bindPlayerEvent(): void {\r\n\r\n        this.player.nativeElement.addEventListener('playing', () => {\r\n            this.isPlaying = true;\r\n            this.emitEventResponse('TrackPlaying', this.trackPlaying);\r\n            this.mediaType = '';\r\n            if (this.tracks[this.currentIndex].mediaType !== 'stream') {\r\n                this.duration = Math.floor(this.player.nativeElement.duration);\r\n            } else {\r\n                this.mediaType = 'stream';\r\n            }\r\n        });\r\n        this.player.nativeElement.addEventListener('pause', () => {\r\n            this.isPlaying = false;\r\n            this.emitEventResponse('TrackPaused', this.trackPaused);\r\n        });\r\n        this.player.nativeElement.addEventListener('timeupdate', () => {\r\n            this.currentTime = Math.floor(this.player.nativeElement.currentTime);\r\n            // BUG: Commenting for `ended` event not firing #66\r\n            // if (this.currentTime >= this.duration - this.endOffset) {\r\n            //     this.player.nativeElement.pause();\r\n            // }\r\n        });\r\n        this.player.nativeElement.addEventListener('volume', () => {\r\n            this.volume = Math.floor(this.player.nativeElement.volume);\r\n        });\r\n        if (!this.iOS) {\r\n            this.player.nativeElement.addEventListener('loadstart', () => {\r\n                this.loaderDisplay = true;\r\n            });\r\n        }\r\n        this.player.nativeElement.addEventListener('loadedmetadata', () => {\r\n            this.loaderDisplay = false;\r\n            if (this.tracks[this.currentIndex].mediaType !== 'stream') {\r\n                this.duration = Math.floor(this.player.nativeElement.duration);\r\n            } else {\r\n                this.duration = 0;\r\n            }\r\n        });\r\n        this.player.nativeElement.addEventListener('ended', () => {\r\n            this.emitEventResponse('TrackEnded', this.trackEnded);\r\n        });\r\n\r\n    }\r\n    emitEventResponse(event: string, emitter: EventEmitter<EventResponse>) {\r\n        const eventResponse: EventResponse = new EventResponse();\r\n        eventResponse.event = event;\r\n        eventResponse.track = this.audioPlayerService.currentTrack;\r\n        emitter.emit(eventResponse);\r\n    }\r\n\r\n    playBtnHandler(): void {\r\n        if (this.loaderDisplay) {\r\n            return;\r\n        }\r\n        if (this.player.nativeElement.paused) {\r\n            if (this.currentTime >= this.duration - this.endOffset) {\r\n                this.player.nativeElement.currentTime = this.startOffset;\r\n            } else {\r\n                this.player.nativeElement.currentTime = this.currentTime;\r\n            }\r\n\r\n            this.player.nativeElement.play();\r\n        } else {\r\n            this.currentTime = this.player.nativeElement.currentTime;\r\n            this.player.nativeElement.pause();\r\n        }\r\n    }\r\n\r\n    triggerPlay(track?: Track): void {\r\n\r\n        if (track) {\r\n            this.startOffset = track.startOffset || 0;\r\n            this.endOffset = track.endOffset || 0;\r\n        }\r\n\r\n        setTimeout(() => {\r\n            this.player.nativeElement.play();\r\n        }, 50);\r\n\r\n    }\r\n\r\n    toggleVolume() {\r\n        if (this.volume === 0) {\r\n            this.setVolume(this.toggledVolume);\r\n        } else {\r\n            this.toggledVolume = this.volume;\r\n            this.setVolume(0);\r\n        }\r\n    }\r\n\r\n    muted() {\r\n        if (this.volume === 0) {\r\n            return;\r\n        }\r\n        this.toggledVolume = this.volume;\r\n        this.setVolume(0);\r\n    }\r\n\r\n    unMuted() {\r\n        this.setVolume(this.toggledVolume);\r\n    }\r\n\r\n    forward(timeDiff: number) {\r\n      this.currTimePosChanged(this.currentTime + timeDiff);\r\n    }\r\n\r\n    rewind(timeDiff: number) {\r\n      this.currTimePosChanged(this.currentTime - timeDiff);\r\n    }\r\n\r\n    toggleRepeat() {\r\n        if (this.repeat === 'none') {\r\n            this.repeat = 'all';\r\n        } else if (this.repeat === 'all') {\r\n            if (this.tracks.length > 1) {\r\n                this.repeat = 'one';\r\n            } else {\r\n                this.repeat = 'none';\r\n            }\r\n        } else if (this.repeat === 'one' && this.tracks.length > 1) {\r\n            this.repeat = 'none';\r\n        }\r\n    }\r\n\r\n    private setVolume(vol) {\r\n        this.volume = vol;\r\n        this.player.nativeElement.volume = this.volume;\r\n    }\r\n\r\n    ngOnInit() {\r\n\r\n        this.bindPlayerEvent();\r\n\r\n        // auto play next track\r\n        this.player.nativeElement.addEventListener('ended', () => {\r\n            if (this.mediaType !== 'stream' && this.checkIfSongHasStartedSinceAtleastTwoSeconds()) {\r\n                if (this.repeat === 'all') {\r\n                    this.nextSong();\r\n                } else if (this.repeat === 'one') {\r\n                    this.triggerPlay();\r\n                } else if (this.repeat === 'none') {\r\n                    // Do nothing\r\n                }\r\n            } else {\r\n                this.triggerPlay();\r\n            }\r\n        });\r\n\r\n        this.player.nativeElement.addEventListener('timeupdate', () => {\r\n            this.audioPlayerService.setCurrentTime(this.player.nativeElement.currentTime);\r\n        });\r\n\r\n        // Subscribe to playlist observer from AudioPlayerService and\r\n        // update the playlist within MatAdvancedAudioPlayerComponent\r\n        this.audioPlayerService.getPlaylist().subscribe(tracks => {\r\n            if (tracks !== null && tracks.length > 0) {\r\n                this.tracks = tracks;\r\n                this.initialize();\r\n            }\r\n        });\r\n\r\n    }\r\n\r\n    ngOnChanges(changes: SimpleChanges) {\r\n        if (changes.hasOwnProperty('displayArtist') || changes.hasOwnProperty('displayDuration')) {\r\n            this.buildDisplayedColumns();\r\n        }\r\n    }\r\n\r\n    private buildDisplayedColumns() {\r\n        this.displayedColumns = ['title'];\r\n        if (this.displayArtist) {\r\n            this.displayedColumns.push('artist');\r\n        }\r\n        if (this.displayDuration) {\r\n            this.displayedColumns.push('duration');\r\n        }\r\n        this.displayedColumns.push('status');\r\n    }\r\n\r\n    initialize() {\r\n        this.buildDisplayedColumns();\r\n\r\n        // populate indexs for the track and configure\r\n        // material table data source and paginator\r\n        this.setDataSourceAttributes();\r\n\r\n\r\n        this.player.nativeElement.currentTime = this.startOffset;\r\n        this.updateCurrentTrack();\r\n\r\n        if (this.autoPlay) {\r\n            this.triggerPlay();\r\n        }\r\n    }\r\n\r\n    setDataSourceAttributes() {\r\n        let index = 1;\r\n        if (this.tracks) {\r\n            this.tracks.forEach((track: Track) => {\r\n                track.index = index++;\r\n            });\r\n            this.dataSource = new MatTableDataSource<Track>(this.tracks);\r\n            this.dataSource.paginator = this.paginator;\r\n        }\r\n    }\r\n\r\n    nextSong(): void {\r\n        if (this.displayPlaylist === true\r\n            && (((this.currentIndex + 1) % this.paginator.pageSize) === 0\r\n                || (this.currentIndex + 1) === this.paginator.length)) {\r\n            if (this.paginator.hasNextPage()) {\r\n                this.paginator.nextPage();\r\n            } else if (!this.paginator.hasNextPage()) {\r\n                this.paginator.firstPage();\r\n            }\r\n        }\r\n        this.currentTime = 0;\r\n        this.duration = 0.01;\r\n        if ((this.currentIndex + 1) >= this.tracks.length) {\r\n            this.currentIndex = 0;\r\n        } else {\r\n            this.currentIndex++;\r\n        }\r\n        this.updateCurrentTrack();\r\n        this.emitEventResponse('NextTrackRequested', this.nextTrackRequested);\r\n        this.triggerPlay();\r\n    }\r\n\r\n    previousSong(): void {\r\n        this.currentTime = 0;\r\n        this.duration = 0.01;\r\n        if (!this.checkIfSongHasStartedSinceAtleastTwoSeconds()) {\r\n            if (this.displayPlaylist === true\r\n                && (((this.currentIndex) % this.paginator.pageSize) === 0\r\n                    || (this.currentIndex === 0))) {\r\n                if (this.paginator.hasPreviousPage()) {\r\n                    this.paginator.previousPage();\r\n                } else if (!this.paginator.hasPreviousPage()) {\r\n                    this.paginator.lastPage();\r\n                }\r\n            }\r\n            if ((this.currentIndex - 1) < 0) {\r\n                this.currentIndex = (this.tracks.length - 1);\r\n            } else {\r\n                this.currentIndex--;\r\n            }\r\n        } else {\r\n            this.resetSong();\r\n        }\r\n        this.updateCurrentTrack();\r\n        this.emitEventResponse('PreviousTrackRequested', this.previousTrackRequested);\r\n        this.triggerPlay();\r\n    }\r\n\r\n    resetSong(): void {\r\n        this.player.nativeElement.src = this.tracks[this.currentIndex].link;\r\n    }\r\n\r\n    selectTrack(index: number): void {\r\n        this.currentIndex = index - 1;\r\n        this.updateCurrentTrack();\r\n        this.emitEventResponse('TrackSelected', this.trackSelected);\r\n        this.triggerPlay();\r\n    }\r\n\r\n    checkIfSongHasStartedSinceAtleastTwoSeconds(): boolean {\r\n        return this.player.nativeElement.currentTime > 2;\r\n    }\r\n\r\n    updateCurrentTrack() {\r\n        this.audioPlayerService.setCurrentTrack(this.tracks[this.currentIndex]);\r\n    }\r\n\r\n}\r\n","<mat-card class=\"ngx-d-flex ngx-content-center ngx-audio-player z-depth-1 mat-elevation-z2\" style=\"margin: 0px;\">\r\n\r\n    <audio #audioPlayer [src]=\"tracks[currentIndex]?.link\"></audio>\r\n\r\n    <button type=\"button\" *ngIf=\"tracks.length > 1\" (click)='previousSong();' [disabled]=\"loaderDisplay\" class=\"ngx-p-1\"\r\n        mat-button>\r\n        <mat-icon aria-hidden=\"true\">\r\n            <!-- Skip previous icon (skip_previous) -->\r\n            <svg height=\"32\" viewBox=\"0 0 24 24\" width=\"32\" xmlns=\"http://www.w3.org/2000/svg\">\r\n                <path d=\"M6 6h2v12H6zm3.5 6l8.5 6V6z\" />\r\n                <path d=\"M0 0h32v32H0z\" fill=\"none\" />\r\n            </svg>\r\n        </mat-icon>\r\n    </button>\r\n    <button type=\"button\" (click)='playBtnHandler();' [disabled]=\"loaderDisplay\" class=\"ngx-p-1 play-pause\" mat-button>\r\n\r\n        <svg *ngIf=\"loaderDisplay\" height=\"34px\" preserveAspectRatio=\"xMidYMid\"\r\n            style=\"margin: auto; display: block; shape-rendering: auto;\" viewBox=\"0 0 100 100\" width=\"34px\"\r\n            xmlns=\"http://www.w3.org/2000/svg\">\r\n            <g transform=\"rotate(0 50 50)\">\r\n                <rect fill=\"#7a7a7a\" height=\"12\" rx=\"3\" ry=\"6\" width=\"6\" x=\"47\" y=\"20\">\r\n                    <animate attributeName=\"opacity\" begin=\"-0.9166666666666666s\" dur=\"1s\" keyTimes=\"0;1\"\r\n                        repeatCount=\"indefinite\" values=\"1;0\" />\r\n                </rect>\r\n            </g>\r\n            <g transform=\"rotate(30 50 50)\">\r\n                <rect fill=\"#7a7a7a\" height=\"12\" rx=\"3\" ry=\"6\" width=\"6\" x=\"47\" y=\"20\">\r\n                    <animate attributeName=\"opacity\" begin=\"-0.8333333333333334s\" dur=\"1s\" keyTimes=\"0;1\"\r\n                        repeatCount=\"indefinite\" values=\"1;0\" />\r\n                </rect>\r\n            </g>\r\n            <g transform=\"rotate(60 50 50)\">\r\n                <rect fill=\"#7a7a7a\" height=\"12\" rx=\"3\" ry=\"6\" width=\"6\" x=\"47\" y=\"20\">\r\n                    <animate attributeName=\"opacity\" begin=\"-0.75s\" dur=\"1s\" keyTimes=\"0;1\" repeatCount=\"indefinite\"\r\n                        values=\"1;0\" />\r\n                </rect>\r\n            </g>\r\n            <g transform=\"rotate(90 50 50)\">\r\n                <rect fill=\"#7a7a7a\" height=\"12\" rx=\"3\" ry=\"6\" width=\"6\" x=\"47\" y=\"20\">\r\n                    <animate attributeName=\"opacity\" begin=\"-0.6666666666666666s\" dur=\"1s\" keyTimes=\"0;1\"\r\n                        repeatCount=\"indefinite\" values=\"1;0\" />\r\n                </rect>\r\n            </g>\r\n            <g transform=\"rotate(120 50 50)\">\r\n                <rect fill=\"#7a7a7a\" height=\"12\" rx=\"3\" ry=\"6\" width=\"6\" x=\"47\" y=\"20\">\r\n                    <animate attributeName=\"opacity\" begin=\"-0.5833333333333334s\" dur=\"1s\" keyTimes=\"0;1\"\r\n                        repeatCount=\"indefinite\" values=\"1;0\" />\r\n                </rect>\r\n            </g>\r\n            <g transform=\"rotate(150 50 50)\">\r\n                <rect fill=\"#7a7a7a\" height=\"12\" rx=\"3\" ry=\"6\" width=\"6\" x=\"47\" y=\"20\">\r\n                    <animate attributeName=\"opacity\" begin=\"-0.5s\" dur=\"1s\" keyTimes=\"0;1\" repeatCount=\"indefinite\"\r\n                        values=\"1;0\" />\r\n                </rect>\r\n            </g>\r\n            <g transform=\"rotate(180 50 50)\">\r\n                <rect fill=\"#7a7a7a\" height=\"12\" rx=\"3\" ry=\"6\" width=\"6\" x=\"47\" y=\"20\">\r\n                    <animate attributeName=\"opacity\" begin=\"-0.4166666666666667s\" dur=\"1s\" keyTimes=\"0;1\"\r\n                        repeatCount=\"indefinite\" values=\"1;0\" />\r\n                </rect>\r\n            </g>\r\n            <g transform=\"rotate(210 50 50)\">\r\n                <rect fill=\"#7a7a7a\" height=\"12\" rx=\"3\" ry=\"6\" width=\"6\" x=\"47\" y=\"20\">\r\n                    <animate attributeName=\"opacity\" begin=\"-0.3333333333333333s\" dur=\"1s\" keyTimes=\"0;1\"\r\n                        repeatCount=\"indefinite\" values=\"1;0\" />\r\n                </rect>\r\n            </g>\r\n            <g transform=\"rotate(240 50 50)\">\r\n                <rect fill=\"#7a7a7a\" height=\"12\" rx=\"3\" ry=\"6\" width=\"6\" x=\"47\" y=\"20\">\r\n                    <animate attributeName=\"opacity\" begin=\"-0.25s\" dur=\"1s\" keyTimes=\"0;1\" repeatCount=\"indefinite\"\r\n                        values=\"1;0\" />\r\n                </rect>\r\n            </g>\r\n            <g transform=\"rotate(270 50 50)\">\r\n                <rect fill=\"#7a7a7a\" height=\"12\" rx=\"3\" ry=\"6\" width=\"6\" x=\"47\" y=\"20\">\r\n                    <animate attributeName=\"opacity\" begin=\"-0.16666666666666666s\" dur=\"1s\" keyTimes=\"0;1\"\r\n                        repeatCount=\"indefinite\" values=\"1;0\" />\r\n                </rect>\r\n            </g>\r\n            <g transform=\"rotate(300 50 50)\">\r\n                <rect fill=\"#7a7a7a\" height=\"12\" rx=\"3\" ry=\"6\" width=\"6\" x=\"47\" y=\"20\">\r\n                    <animate attributeName=\"opacity\" begin=\"-0.08333333333333333s\" dur=\"1s\" keyTimes=\"0;1\"\r\n                        repeatCount=\"indefinite\" values=\"1;0\" />\r\n                </rect>\r\n            </g>\r\n            <g transform=\"rotate(330 50 50)\">\r\n                <rect fill=\"#7a7a7a\" height=\"12\" rx=\"3\" ry=\"6\" width=\"6\" x=\"47\" y=\"20\">\r\n                    <animate attributeName=\"opacity\" begin=\"0s\" dur=\"1s\" keyTimes=\"0;1\" repeatCount=\"indefinite\"\r\n                        values=\"1;0\" />\r\n                </rect>\r\n            </g>\r\n        </svg>\r\n\r\n        <mat-icon *ngIf=\"!loaderDisplay && !isPlaying\" aria-hidden=\"true\" class=\"play-track\">\r\n            <!-- Play icon (play_arrow) -->\r\n            <svg height=\"32\" viewBox=\"0 0 24 24\" width=\"32\" xmlns=\"http://www.w3.org/2000/svg\">\r\n                <path d=\"M8 5v14l11-7z\" />\r\n                <path d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n            </svg>\r\n        </mat-icon>\r\n        <mat-icon *ngIf=\"!loaderDisplay && isPlaying\" aria-hidden=\"true\" class=\"pause-track\">\r\n            <!-- Pause icon (pause) -->\r\n            <svg height=\"32\" viewBox=\"0 0 24 24\" width=\"32\" xmlns=\"http://www.w3.org/2000/svg\">\r\n                <path d=\"M6 19h4V5H6v14zm8-14v14h4V5h-4z\" />\r\n                <path d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n            </svg>\r\n        </mat-icon>\r\n    </button>\r\n    <button type=\"button\" *ngIf=\"tracks.length > 1\" (click)='nextSong();' [disabled]=\"loaderDisplay\"\r\n        class=\"ngx-p-1 skip-next\" mat-button>\r\n        <mat-icon aria-hidden=\"true\" class=\"next-track\">\r\n            <!-- Skip next icon (skip_next) -->\r\n            <svg height=\"32\" viewBox=\"0 0 24 24\" width=\"32\" xmlns=\"http://www.w3.org/2000/svg\">\r\n                <path d=\"M6 18l8.5-6L6 6v12zM16 6v12h2V6h-2z\" />\r\n                <path d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n            </svg>\r\n        </mat-icon>\r\n    </button>\r\n\r\n    <div class=\"ngx-col\">\r\n        <div class=\"ngx-d-flex ngx-flex-fill ngx-content-center\">\r\n            <div class=\"ngx-d-none ngx-d-sm-block ngx-py-3 ngx-px-1\" style=\"font-size: 12px\">\r\n                <span *ngIf=\"duration !== 0.01\">\r\n                    {{currentTime | secondsToMinutes}}\r\n                </span>\r\n            </div>\r\n\r\n            <mat-slider\r\n                    *ngIf=\"mediaType !== 'stream'\"\r\n                    [disabled]=\"disablePositionSlider\"\r\n                    [min]=\"startOffset\"\r\n                    [max]=\"duration-endOffset\"\r\n                    style=\"width: 100%\"\r\n            >\r\n                <input matSliderThumb [value]=\"currentTime\" (valueChange)=\"currTimePosChanged($event)\">\r\n            </mat-slider>\r\n\r\n            <mat-slider\r\n                    *ngIf=\"mediaType === 'stream'\"\r\n                    [disabled]=\"true\"\r\n                    [min]=\"startOffset\"\r\n                    [max]=\"currentTime\"\r\n                    style=\"width: 100%\"\r\n            >\r\n                <input matSliderThumb [value]=\"currentTime\">\r\n            </mat-slider>\r\n\r\n            <div class=\"ngx-py-3 ngx-px-1\" style=\"font-size: 12px; text-align: right\">\r\n                <span *ngIf=\"mediaType !== null && mediaType !== 'stream' && duration !== 0.01\">\r\n                    -{{duration-currentTime | secondsToMinutes }}\r\n                </span>\r\n                <span *ngIf=\"mediaType === 'stream'\">\r\n                    STREAM\r\n                </span>\r\n            </div>\r\n        </div>\r\n    </div>\r\n    <button type=\"button\" (click)='toggleRepeat();' *ngIf=\"displayRepeatControls\"\r\n        class=\"ngx-p-1 volume justify-content-center\" mat-button>\r\n        <mat-icon *ngIf=\"repeat === 'none'\" aria-hidden=\"true\" class=\"volume-mute justify-content-center\">\r\n            <!-- Repeat None -->\r\n            <svg height=\"24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 22 22\">\r\n                <g>\r\n                    <g>\r\n                        <path d=\"m0,0l24,0l0,24l-24,0l0,-24z\" fill=\"none\" />\r\n                        <path\r\n                            d=\"m8,20l0,1.932a0.5,0.5 0 0 1 -0.82,0.385l-4.12,-3.433a0.5,0.5 0 0 1 0.322,-0.884l14.618,0a2,2 0 0 0 2,-2l0,-8l2,0l0,8a4,4 0 0 1 -4,4l-10,0zm8,-16l0,-1.932a0.5,0.5 0 0 1 0.82,-0.385l4.12,3.433a0.5,0.5 0 0 1 -0.321,0.884l-14.619,0a2,2 0 0 0 -2,2l0,8l-2,0l0,-8a4,4 0 0 1 4,-4l10,0z\" />\r\n                        <path d=\"M 3 0 L 22.4164 22.2706 L 21 24 L 1.5836 1.8128 L 3 0\"></path>\r\n                    </g>\r\n                    <!-- <line xmlns=\"http://www.w3.org/2000/svg\" id=\"svg_4\" y2=\"22.27056\" x2=\"22.41638\" y1=\"1.81276\" x1=\"1.58362\" stroke-width=\"2\" fill=\"none\"/> -->\r\n                </g>\r\n            </svg>\r\n        </mat-icon>\r\n        <mat-icon *ngIf=\"repeat === 'all'\" aria-hidden=\"true\" class=\"volume-mute\">\r\n            <!-- Repeat All -->\r\n            <svg height=\"24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 22 22\">\r\n                <g>\r\n                    <path fill=\"none\" d=\"M0 0h24v24H0z\" />\r\n                    <path\r\n                        d=\"M8 20v1.932a.5.5 0 0 1-.82.385l-4.12-3.433A.5.5 0 0 1 3.382 18H18a2 2 0 0 0 2-2V8h2v8a4 4 0 0 1-4 4H8zm8-16V2.068a.5.5 0 0 1 .82-.385l4.12 3.433a.5.5 0 0 1-.321.884H6a2 2 0 0 0-2 2v8H2V8a4 4 0 0 1 4-4h10z\" />\r\n                </g>\r\n            </svg>\r\n        </mat-icon>\r\n        <mat-icon *ngIf=\"repeat === 'one'\" aria-hidden=\"true\" class=\"volume-up\">\r\n            <!-- Repeat ONE -->\r\n            <svg height=\"24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 22 22\">\r\n                <g>\r\n                    <path fill=\"none\" d=\"M0 0h24v24H0z\" />\r\n                    <path\r\n                        d=\"M8 20v1.932a.5.5 0 0 1-.82.385l-4.12-3.433A.5.5 0 0 1 3.382 18H18a2 2 0 0 0 2-2V8h2v8a4 4 0 0 1-4 4H8zm8-16V2.068a.5.5 0 0 1 .82-.385l4.12 3.433a.5.5 0 0 1-.321.884H6a2 2 0 0 0-2 2v8H2V8a4 4 0 0 1 4-4h10zm-5 4h2v8h-2v-6H9V9l2-1z\" />\r\n                </g>\r\n            </svg>\r\n        </mat-icon>\r\n    </button>\r\n    <button type=\"button\" *ngIf=\"displayVolumeControls\" class=\"ngx-p-1 volume\" mat-button>\r\n        <mat-icon (click)='toggleVolume();' *ngIf=\"volume === 0\" aria-hidden=\"true\" class=\"volume-mute\">\r\n            <!-- Volume mute icon (volume_off) -->\r\n            <svg height=\"28\" viewBox=\"0 0 24 24\" width=\"28\" xmlns=\"http://www.w3.org/2000/svg\">\r\n                <path\r\n                    d=\"M16.5 12c0-1.77-1.02-3.29-2.5-4.03v2.21l2.45 2.45c.03-.2.05-.41.05-.63zm2.5 0c0 .94-.2 1.82-.54 2.64l1.51 1.51C20.63 14.91 21 13.5 21 12c0-4.28-2.99-7.86-7-8.77v2.06c2.89.86 5 3.54 5 6.71zM4.27 3L3 4.27 7.73 9H3v6h4l5 5v-6.73l4.25 4.25c-.67.52-1.42.93-2.25 1.18v2.06c1.38-.31 2.63-.95 3.69-1.81L19.73 21 21 19.73l-9-9L4.27 3zM12 4L9.91 6.09 12 8.18V4z\" />\r\n                <path d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n            </svg>\r\n        </mat-icon>\r\n        <mat-icon (click)='toggleVolume();' *ngIf=\"volume > 0\" aria-hidden=\"true\" class=\"volume-up\">\r\n            <!-- Volume up icon (volume_up) -->\r\n            <svg height=\"28\" viewBox=\"0 0 24 24\" width=\"28\" xmlns=\"http://www.w3.org/2000/svg\">\r\n                <path\r\n                    d=\"M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM14 3.23v2.06c2.89.86 5 3.54 5 6.71s-2.11 5.85-5 6.71v2.06c4.01-.91 7-4.49 7-8.77s-2.99-7.86-7-8.77z\" />\r\n                <path d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n            </svg>\r\n        </mat-icon>\r\n        <mat-slider\r\n                *ngIf=\"displayVolumeSlider\"\r\n                [min]=\"0\"\r\n                max=\"1\"\r\n                step=\"0.01\"\r\n        >\r\n            <input matSliderThumb [value]=\"volume\" (valueChange)=\"currVolumeChanged($event)\">\r\n        </mat-slider>\r\n    </button>\r\n</mat-card>\r\n\r\n<mat-card *ngIf=\"displayTitle\" class=\"mat-elevation-z1 ngx-audio-player\">\r\n    <div style=\"text-align: center;\">\r\n        <div style=\"margin: 1px 2px; padding: 0.5em; font-weight: 400; font-size: 16px;\">\r\n            <div style=\"padding: 0.3em;\" *ngIf=\"!isPlaying\">{{\r\n                tracks[currentIndex]?.title }}{{\r\n                displayArtist && tracks[currentIndex]?.artist ?\r\n                ' | ' + tracks[currentIndex]?.artist : ''}}</div>\r\n\r\n            <marquee *ngIf=\"isPlaying\" behavior=\"scroll\" direction=\"left\">{{\r\n                tracks[currentIndex]?.title\r\n                }}{{ displayArtist && tracks[currentIndex]?.artist ? ' | ' + tracks[currentIndex]?.artist : ''}}\r\n            </marquee>\r\n        </div>\r\n        <div class=\"clear\"></div>\r\n    </div>\r\n</mat-card>\r\n\r\n<mat-accordion class=\"ngx-audio-player\" *ngIf=\"displayPlaylist && tracks.length > 1\">\r\n    <mat-expansion-panel [expanded]=\"expanded\">\r\n        <mat-expansion-panel-header>\r\n            {{tableHeader}}\r\n        </mat-expansion-panel-header>\r\n        <table [dataSource]=\"dataSource\" class=\"mat-elevation-z6\" mat-table>\r\n            <ng-container matColumnDef=\"title\">\r\n                <th *matHeaderCellDef mat-header-cell>{{titleHeader}}</th>\r\n                <td (click)=\"selectTrack(element.index)\" *matCellDef=\"let element\" mat-cell>\r\n                    {{element.title}}\r\n                </td>\r\n            </ng-container>\r\n            <ng-container matColumnDef=\"artist\">\r\n                <th *matHeaderCellDef mat-header-cell>{{artistHeader}}</th>\r\n                <td (click)=\"selectTrack(element.index)\" *matCellDef=\"let element\" mat-cell>\r\n                    {{element?.artist ? element?.artist : ''}}\r\n                </td>\r\n            </ng-container>\r\n            <ng-container matColumnDef=\"duration\">\r\n                <th *matHeaderCellDef mat-header-cell>{{durationHeader}}</th>\r\n                <td (click)=\"selectTrack(element.index)\" *matCellDef=\"let element\" mat-cell>\r\n                    {{element?.duration ? (element?.duration | secondsToMinutes) : ''}}\r\n                </td>\r\n            </ng-container>\r\n            <ng-container matColumnDef=\"status\">\r\n                <th *matHeaderCellDef mat-header-cell></th>\r\n                <td *matCellDef=\"let element\" mat-cell>\r\n                    <div *ngIf=\"tracks[currentIndex]?.title === element.title\">\r\n                        <!-- <mat-icon *ngIf=\"isPlaying\" aria-hidden=\"true\">\r\n                          <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path d=\"M6 19h4V5H6v14zm8-14v14h4V5h-4z\"/><path d=\"M0 0h24v24H0z\" fill=\"none\"/></svg>\r\n                        </mat-icon> -->\r\n                        <mat-icon *ngIf=\"isPlaying\" aria-hidden=\"true\" class=\"currently-playing\">\r\n                            <!-- Play icon (play_arrow) -->\r\n                            <svg height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\">\r\n                                <path d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n                                <path\r\n                                    d=\"M12 3v9.28c-.47-.17-.97-.28-1.5-.28C8.01 12 6 14.01 6 16.5S8.01 21 10.5 21c2.31 0 4.2-1.75 4.45-4H15V6h4V3h-7z\" />\r\n                            </svg>\r\n                        </mat-icon>\r\n                    </div>\r\n                </td>\r\n            </ng-container>\r\n            <tr *matHeaderRowDef=\"displayedColumns\" mat-header-row></tr>\r\n            <tr *matRowDef=\"let row; columns: displayedColumns;\" class=\"mat-select-content\" mat-row></tr>\r\n        </table>\r\n        <mat-paginator [pageSizeOptions]=\"pageSizeOptions\" showFirstLastButtons></mat-paginator>\r\n    </mat-expansion-panel>\r\n</mat-accordion>\r\n","import { NgModule } from '@angular/core';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SecondsToMinutesPipe } from './pipe/seconds-to-minutes';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { AudioPlayerComponent } from './component/ngx-audio-player/ngx-audio-player.component';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatSliderModule } from '@angular/material/slider';\r\n\r\n@NgModule({\r\n  declarations: [SecondsToMinutesPipe, AudioPlayerComponent],\r\n  imports: [\r\n    CommonModule,\r\n    FormsModule,\r\n    MatButtonModule,\r\n    MatCardModule,\r\n    MatTableModule,\r\n    MatFormFieldModule,\r\n    MatSliderModule,\r\n    MatExpansionModule,\r\n    MatPaginatorModule,\r\n    MatIconModule\r\n  ],\r\n  exports: [AudioPlayerComponent]\r\n})\r\nexport class NgxAudioPlayerModule {\r\n}\r\n","export class Track {\r\n  index?: number;\r\n  link: string;\r\n  title: string;\r\n  mediaType?: string;\r\n  startOffset?: number;\r\n  endOffset?: number;\r\n  duration?: number;\r\n  artist?: string;\r\n  public toString = (): string => {\r\n    return `Track (index: ${this.index}, title: ${this.title})`;\r\n  }\r\n}\r\n","/*\r\n * Public API Surface of ngx-audio-player\r\n */\r\n\r\nexport * from './lib/component/ngx-audio-player/ngx-audio-player.component';\r\nexport * from './lib/ngx-audio-player.module';\r\nexport * from './lib/model/track.model';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i9.SecondsToMinutesPipe"],"mappings":"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"}