{"version":3,"file":"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/ngx-audio-player.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { Track } from '../../model/track.model';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AudioPlayerService {\n\n  // Dynamic update of playlist\n  tracks: Track[] = [];\n  playlistSubject$: BehaviorSubject<Track[]> =\n    new BehaviorSubject<Track[]>(this.tracks);\n\n  // Get the current track\n  currentTrack: Track = null;\n  currentTrackSubject$: BehaviorSubject<Track> =\n    new BehaviorSubject<Track>(this.currentTrack);\n\n  // Get the current time\n  currentTime: any = null;\n  currentTimeSubject$: BehaviorSubject<any> =\n    new BehaviorSubject<any>(this.currentTime);\n\n  setPlaylist(tracks: Track[]) {\n    this.tracks = tracks;\n    this.playlistSubject$.next(this.tracks);\n  }\n\n  getPlaylist(): Observable<Track[]> {\n    return this.playlistSubject$.asObservable();\n  }\n\n  setCurrentTrack(currentTrack: Track) {\n    this.currentTrack = currentTrack;\n    this.currentTrackSubject$.next(this.currentTrack);\n  }\n\n  getCurrentTrack(): Observable<Track> {\n    return this.currentTrackSubject$.asObservable();\n  }\n\n  setCurrentTime(currentTime: any) {\n    this.currentTime = currentTime;\n    this.currentTimeSubject$.next(this.currentTime);\n  }\n\n  getCurrentTime(): Observable<any> {\n    return this.currentTimeSubject$.asObservable();\n  }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n/*\n * Transform seconds to minutes:seconds\n * Example : 270 -> 02:30\n*/\n@Pipe({ name: 'secondsToMinutes' })\nexport class SecondsToMinutesPipe implements PipeTransform {\n    transform(time: number): string {\n        const hours = ('0' + Math.floor(time / 3600)).slice(-2);\n        const minutes = ('0' + Math.floor((time % 3600) / 60)).slice(-2);\n        const seconds = ('0' + time % 60).slice(-2);\n        if (hours !== '00') { return `${hours}:${minutes}:${seconds}`; }\n        return `${minutes}:${seconds}`;\n    }\n}\n","\nimport { Component, OnInit, Input, ViewChild, Output, ElementRef, OnChanges, SimpleChanges, EventEmitter } from '@angular/core';\nimport { Track } from '../../model/track.model';\nimport { MatSlider } from '@angular/material/slider';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { MatPaginator } from '@angular/material/paginator';\nimport { AudioPlayerService } from '../../service/audio-player-service/audio-player.service';\n\nclass EventResponse {\n    event: string;\n    track: Track;\n}\n\n@Component({\n    selector: 'mat-advanced-audio-player,ngx-audio-player',\n    templateUrl: './ngx-audio-player.component.html',\n    styleUrls: ['./ngx-audio-player.component.css']\n})\nexport class AudioPlayerComponent implements OnInit, OnChanges {\n\n    audioPlayerService: AudioPlayerService;\n    constructor(elem: ElementRef) {\n        if (elem.nativeElement.tagName.toLowerCase() === 'mat-advanced-audio-player') {\n            console.warn(`'mat-advanced-audio-player' selector is deprecated; use 'ngx-audio-player' instead.`);\n        }\n        this.audioPlayerService = new AudioPlayerService();\n    }\n\n    @Input()\n    set playlist(playlist: Track[]) {\n        this.audioPlayerService.setPlaylist(playlist);\n    }\n\n    @ViewChild(MatPaginator, { static: false }) set matPaginator(mp: MatPaginator) {\n        this.paginator = mp;\n        this.setDataSourceAttributes();\n    }\n\n\n    displayedColumns: string[];\n    dataSource = new MatTableDataSource<Track>();\n    paginator: MatPaginator;\n\n    timeLineDuration: MatSlider;\n    mediaType: string = null;\n\n    tracks: Track[] = [];\n\n    // all || one || none\n    @Input() repeat: \"all\" | \"one\" | \"none\" = 'all';\n    @Input() displayTitle = true;\n    @Input() displayPlaylist = true;\n    @Input() displayVolumeControls = true;\n    @Input() displayVolumeSlider = false;\n    @Input() displayRepeatControls = true;\n    @Input() pageSizeOptions = [10, 20, 30];\n    @Input() expanded = true;\n    @Input() autoPlay = false;\n    @Input() disablePositionSlider = false;\n    @Input() displayArtist = false;\n    @Input() displayDuration = false;\n\n    // Support for internationalization\n    @Input() tableHeader = 'Playlist';\n    @Input() titleHeader = 'Title';\n    @Input() artistHeader = 'Artist';\n    @Input() durationHeader = 'Duration';\n\n    currentIndex = 0;\n\n    @Output()\n    trackPlaying: EventEmitter<EventResponse> = new EventEmitter<EventResponse>();\n    @Output()\n    trackPaused: EventEmitter<EventResponse> = new EventEmitter<EventResponse>();\n    @Output()\n    trackEnded: EventEmitter<EventResponse> = new EventEmitter<EventResponse>();\n    @Output()\n    nextTrackRequested: EventEmitter<EventResponse> = new EventEmitter<EventResponse>();\n    @Output()\n    previousTrackRequested: EventEmitter<EventResponse> = new EventEmitter<EventResponse>();\n    @Output()\n    trackSelected: EventEmitter<EventResponse> = new EventEmitter<EventResponse>();\n\n    @ViewChild('audioPlayer', { static: true }) player: ElementRef;\n\n    iOS = (/iPad|iPhone|iPod/.test(navigator.platform)\n        || (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1));\n\n    loaderDisplay = false;\n    isPlaying = false;\n    currentTime = 0;\n    volume = 0.1;\n    toggledVolume = 1.0;\n    duration = 0.01;\n\n    private startOffsetValue = 0;\n    @Input()\n    set startOffset(seconds: number) {\n        this.startOffsetValue = seconds;\n        this.player.nativeElement.currentTime = seconds;\n    }\n    get startOffset(): number {\n        return this.startOffsetValue;\n    }\n\n    @Input()\n    public endOffset = 0;\n\n    /**\n     * Allow to start the current track\n     */\n    @Input()\n    public play() {\n        if (!this.isPlaying) {\n            setTimeout(() => {\n                this.isPlaying = true;\n                this.player.nativeElement.play();\n            }, 50);\n        }\n    }\n\n    /**\n     * Allow to pause the current track\n     */\n    @Input()\n    public pause() {\n        if (this.isPlaying) {\n            setTimeout(() => {\n                this.isPlaying = false;\n                this.player.nativeElement.pause();\n            }, 50);\n        }\n    }\n\n    /**\n     * Allow to stop the current track\n     */\n    @Input()\n    public stop() {\n        setTimeout(() => {\n            this.isPlaying = false;\n            this.player.nativeElement.pause();\n            this.player.nativeElement.currentTime = 0;\n        }, 50);\n    }\n\n    currTimePosChanged(event) {\n        this.player.nativeElement.currentTime = event.value;\n    }\n\n    currVolumeChanged(event) {\n        this.volume = event.value;\n        this.toggledVolume = event.value;\n        this.player.nativeElement.volume = event.value;\n    }\n\n    bindPlayerEvent(): void {\n\n        this.player.nativeElement.addEventListener('playing', () => {\n            this.isPlaying = true;\n            this.emitEventResponse(\"TrackPlaying\", this.trackPlaying);\n            this.mediaType = '';\n            if (this.tracks[this.currentIndex].mediaType !== 'stream') {\n                this.duration = Math.floor(this.player.nativeElement.duration);\n            } else {\n                this.mediaType = 'stream';\n            }\n        });\n        this.player.nativeElement.addEventListener('pause', () => {\n            this.isPlaying = false;\n            this.emitEventResponse(\"TrackPaused\", this.trackPaused);\n        });\n        this.player.nativeElement.addEventListener('timeupdate', () => {\n            this.currentTime = Math.floor(this.player.nativeElement.currentTime);\n            // BUG: Commenting for `ended` event not firing #66\n            // if (this.currentTime >= this.duration - this.endOffset) {\n            //     this.player.nativeElement.pause();\n            // }\n        });\n        this.player.nativeElement.addEventListener('volume', () => {\n            this.volume = Math.floor(this.player.nativeElement.volume);\n        });\n        if (!this.iOS) {\n            this.player.nativeElement.addEventListener('loadstart', () => {\n                this.loaderDisplay = true;\n            });\n        }\n        this.player.nativeElement.addEventListener('loadedmetadata', () => {\n            this.loaderDisplay = false;\n            if (this.tracks[this.currentIndex].mediaType !== 'stream') {\n                this.duration = Math.floor(this.player.nativeElement.duration);\n            } else {\n                this.duration = 0;\n            }\n        });\n        this.player.nativeElement.addEventListener('ended', () => {\n            this.emitEventResponse(\"TrackEnded\", this.trackEnded);\n        });\n\n    }\n    emitEventResponse(event: string, emitter: EventEmitter<EventResponse>) {\n        let eventResponse: EventResponse = new EventResponse();\n        eventResponse.event = event;\n        eventResponse.track = this.audioPlayerService.currentTrack;\n        emitter.emit(eventResponse);\n    }\n\n    playBtnHandler(): void {\n        if (this.loaderDisplay) {\n            return;\n        }\n        if (this.player.nativeElement.paused) {\n            if (this.currentTime >= this.duration - this.endOffset) {\n                this.player.nativeElement.currentTime = this.startOffset;\n            } else {\n                this.player.nativeElement.currentTime = this.currentTime;\n            }\n\n            this.player.nativeElement.play();\n        } else {\n            this.currentTime = this.player.nativeElement.currentTime;\n            this.player.nativeElement.pause();\n        }\n    }\n\n    triggerPlay(track?: Track): void {\n\n        if (track) {\n            this.startOffset = track.startOffset || 0;\n            this.endOffset = track.endOffset || 0;\n        }\n\n        setTimeout(() => {\n            this.player.nativeElement.play();\n        }, 50);\n\n    }\n\n    toggleVolume() {\n        if (this.volume === 0) {\n            this.setVolume(this.toggledVolume);\n        } else {\n            this.toggledVolume = this.volume;\n            this.setVolume(0);\n        }\n    }\n\n    toggleRepeat() {\n        if (this.repeat === 'none') {\n            this.repeat = 'all';\n        } else if (this.repeat === 'all') {\n            if (this.tracks.length > 1) {\n                this.repeat = 'one';\n            } else {\n                this.repeat = 'none';\n            }\n        } else if (this.repeat === 'one' && this.tracks.length > 1) {\n            this.repeat = 'none';\n        }\n    }\n\n    private setVolume(vol) {\n        this.volume = vol;\n        this.player.nativeElement.volume = this.volume;\n    }\n\n    ngOnInit() {\n\n        this.bindPlayerEvent();\n\n        // auto play next track\n        this.player.nativeElement.addEventListener('ended', () => {\n            if (this.mediaType !== 'stream' && this.checkIfSongHasStartedSinceAtleastTwoSeconds()) {\n                if (this.repeat === 'all') {\n                    this.nextSong();\n                } else if (this.repeat === 'one') {\n                    this.triggerPlay();\n                } else if (this.repeat === 'none') {\n                    // Do nothing\n                }\n            } else {\n                this.triggerPlay();\n            }\n        });\n\n        this.player.nativeElement.addEventListener('timeupdate', () => {\n            this.audioPlayerService.setCurrentTime(this.player.nativeElement.currentTime);\n        });\n\n        // Subscribe to playlist observer from AudioPlayerService and\n        // update the playlist within MatAdvancedAudioPlayerComponent\n        this.audioPlayerService.getPlaylist().subscribe(tracks => {\n            if (tracks !== null && tracks.length > 0) {\n                this.tracks = tracks;\n                this.initialize();\n            }\n        });\n\n    }\n\n    ngOnChanges(changes: SimpleChanges) {\n        if (changes.hasOwnProperty('displayArtist') || changes.hasOwnProperty('displayDuration')) {\n            this.buildDisplayedColumns();\n        }\n    }\n\n    private buildDisplayedColumns() {\n        this.displayedColumns = ['title'];\n        if (this.displayArtist) {\n            this.displayedColumns.push('artist');\n        }\n        if (this.displayDuration) {\n            this.displayedColumns.push('duration');\n        }\n        this.displayedColumns.push('status');\n    }\n\n    initialize() {\n        this.buildDisplayedColumns();\n\n        // populate indexs for the track and configure\n        // material table data source and paginator\n        this.setDataSourceAttributes();\n\n\n        this.player.nativeElement.currentTime = this.startOffset;\n        this.updateCurrentTrack();\n\n        if (this.autoPlay) {\n            this.triggerPlay();\n        }\n    }\n\n    setDataSourceAttributes() {\n        let index = 1;\n        if (this.tracks) {\n            this.tracks.forEach((track: Track) => {\n                track.index = index++;\n            });\n            this.dataSource = new MatTableDataSource<Track>(this.tracks);\n            this.dataSource.paginator = this.paginator;\n        }\n    }\n\n    nextSong(): void {\n        if (this.displayPlaylist === true\n            && (((this.currentIndex + 1) % this.paginator.pageSize) === 0\n                || (this.currentIndex + 1) === this.paginator.length)) {\n            if (this.paginator.hasNextPage()) {\n                this.paginator.nextPage();\n            } else if (!this.paginator.hasNextPage()) {\n                this.paginator.firstPage();\n            }\n        }\n        this.currentTime = 0;\n        this.duration = 0.01;\n        if ((this.currentIndex + 1) >= this.tracks.length) {\n            this.currentIndex = 0;\n        } else {\n            this.currentIndex++;\n        }\n        this.updateCurrentTrack();\n        this.emitEventResponse(\"NextTrackRequested\", this.nextTrackRequested);\n        this.triggerPlay();\n    }\n\n    previousSong(): void {\n        this.currentTime = 0;\n        this.duration = 0.01;\n        if (!this.checkIfSongHasStartedSinceAtleastTwoSeconds()) {\n            if (this.displayPlaylist === true\n                && (((this.currentIndex) % this.paginator.pageSize) === 0\n                    || (this.currentIndex === 0))) {\n                if (this.paginator.hasPreviousPage()) {\n                    this.paginator.previousPage();\n                } else if (!this.paginator.hasPreviousPage()) {\n                    this.paginator.lastPage();\n                }\n            }\n            if ((this.currentIndex - 1) < 0) {\n                this.currentIndex = (this.tracks.length - 1);\n            } else {\n                this.currentIndex--;\n            }\n        } else {\n            this.resetSong();\n        }\n        this.updateCurrentTrack();\n        this.emitEventResponse(\"PreviousTrackRequested\", this.previousTrackRequested);\n        this.triggerPlay();\n    }\n\n    resetSong(): void {\n        this.player.nativeElement.src = this.tracks[this.currentIndex].link;\n    }\n\n    selectTrack(index: number): void {\n        this.currentIndex = index - 1;\n        this.updateCurrentTrack();\n        this.emitEventResponse(\"TrackSelected\", this.trackSelected);\n        this.triggerPlay();\n    }\n\n    checkIfSongHasStartedSinceAtleastTwoSeconds(): boolean {\n        return this.player.nativeElement.currentTime > 2;\n    }\n\n    updateCurrentTrack() {\n        this.audioPlayerService.setCurrentTrack(this.tracks[this.currentIndex]);\n    }\n\n}\n","<mat-card class=\"ngx-d-flex ngx-content-center ngx-audio-player z-depth-1 mat-elevation-z2\" style=\"margin: 0px;\">\n\n    <audio #audioPlayer [src]=\"tracks[currentIndex]?.link\"></audio>\n\n    <button type=\"button\" *ngIf=\"tracks.length > 1\" (click)='previousSong();' [disabled]=\"loaderDisplay\" class=\"ngx-p-1\"\n        mat-button>\n        <mat-icon aria-hidden=\"true\">\n            <!-- Skip previous icon (skip_previous) -->\n            <svg height=\"32\" viewBox=\"0 0 24 24\" width=\"32\" xmlns=\"http://www.w3.org/2000/svg\">\n                <path d=\"M6 6h2v12H6zm3.5 6l8.5 6V6z\" />\n                <path d=\"M0 0h32v32H0z\" fill=\"none\" />\n            </svg>\n        </mat-icon>\n    </button>\n    <button type=\"button\" (click)='playBtnHandler();' [disabled]=\"loaderDisplay\" class=\"ngx-p-1 play-pause\" mat-button>\n\n        <svg *ngIf=\"loaderDisplay\" height=\"34px\" preserveAspectRatio=\"xMidYMid\"\n            style=\"margin: auto; display: block; shape-rendering: auto;\" viewBox=\"0 0 100 100\" width=\"34px\"\n            xmlns=\"http://www.w3.org/2000/svg\">\n            <g transform=\"rotate(0 50 50)\">\n                <rect fill=\"#7a7a7a\" height=\"12\" rx=\"3\" ry=\"6\" width=\"6\" x=\"47\" y=\"20\">\n                    <animate attributeName=\"opacity\" begin=\"-0.9166666666666666s\" dur=\"1s\" keyTimes=\"0;1\"\n                        repeatCount=\"indefinite\" values=\"1;0\" />\n                </rect>\n            </g>\n            <g transform=\"rotate(30 50 50)\">\n                <rect fill=\"#7a7a7a\" height=\"12\" rx=\"3\" ry=\"6\" width=\"6\" x=\"47\" y=\"20\">\n                    <animate attributeName=\"opacity\" begin=\"-0.8333333333333334s\" dur=\"1s\" keyTimes=\"0;1\"\n                        repeatCount=\"indefinite\" values=\"1;0\" />\n                </rect>\n            </g>\n            <g transform=\"rotate(60 50 50)\">\n                <rect fill=\"#7a7a7a\" height=\"12\" rx=\"3\" ry=\"6\" width=\"6\" x=\"47\" y=\"20\">\n                    <animate attributeName=\"opacity\" begin=\"-0.75s\" dur=\"1s\" keyTimes=\"0;1\" repeatCount=\"indefinite\"\n                        values=\"1;0\" />\n                </rect>\n            </g>\n            <g transform=\"rotate(90 50 50)\">\n                <rect fill=\"#7a7a7a\" height=\"12\" rx=\"3\" ry=\"6\" width=\"6\" x=\"47\" y=\"20\">\n                    <animate attributeName=\"opacity\" begin=\"-0.6666666666666666s\" dur=\"1s\" keyTimes=\"0;1\"\n                        repeatCount=\"indefinite\" values=\"1;0\" />\n                </rect>\n            </g>\n            <g transform=\"rotate(120 50 50)\">\n                <rect fill=\"#7a7a7a\" height=\"12\" rx=\"3\" ry=\"6\" width=\"6\" x=\"47\" y=\"20\">\n                    <animate attributeName=\"opacity\" begin=\"-0.5833333333333334s\" dur=\"1s\" keyTimes=\"0;1\"\n                        repeatCount=\"indefinite\" values=\"1;0\" />\n                </rect>\n            </g>\n            <g transform=\"rotate(150 50 50)\">\n                <rect fill=\"#7a7a7a\" height=\"12\" rx=\"3\" ry=\"6\" width=\"6\" x=\"47\" y=\"20\">\n                    <animate attributeName=\"opacity\" begin=\"-0.5s\" dur=\"1s\" keyTimes=\"0;1\" repeatCount=\"indefinite\"\n                        values=\"1;0\" />\n                </rect>\n            </g>\n            <g transform=\"rotate(180 50 50)\">\n                <rect fill=\"#7a7a7a\" height=\"12\" rx=\"3\" ry=\"6\" width=\"6\" x=\"47\" y=\"20\">\n                    <animate attributeName=\"opacity\" begin=\"-0.4166666666666667s\" dur=\"1s\" keyTimes=\"0;1\"\n                        repeatCount=\"indefinite\" values=\"1;0\" />\n                </rect>\n            </g>\n            <g transform=\"rotate(210 50 50)\">\n                <rect fill=\"#7a7a7a\" height=\"12\" rx=\"3\" ry=\"6\" width=\"6\" x=\"47\" y=\"20\">\n                    <animate attributeName=\"opacity\" begin=\"-0.3333333333333333s\" dur=\"1s\" keyTimes=\"0;1\"\n                        repeatCount=\"indefinite\" values=\"1;0\" />\n                </rect>\n            </g>\n            <g transform=\"rotate(240 50 50)\">\n                <rect fill=\"#7a7a7a\" height=\"12\" rx=\"3\" ry=\"6\" width=\"6\" x=\"47\" y=\"20\">\n                    <animate attributeName=\"opacity\" begin=\"-0.25s\" dur=\"1s\" keyTimes=\"0;1\" repeatCount=\"indefinite\"\n                        values=\"1;0\" />\n                </rect>\n            </g>\n            <g transform=\"rotate(270 50 50)\">\n                <rect fill=\"#7a7a7a\" height=\"12\" rx=\"3\" ry=\"6\" width=\"6\" x=\"47\" y=\"20\">\n                    <animate attributeName=\"opacity\" begin=\"-0.16666666666666666s\" dur=\"1s\" keyTimes=\"0;1\"\n                        repeatCount=\"indefinite\" values=\"1;0\" />\n                </rect>\n            </g>\n            <g transform=\"rotate(300 50 50)\">\n                <rect fill=\"#7a7a7a\" height=\"12\" rx=\"3\" ry=\"6\" width=\"6\" x=\"47\" y=\"20\">\n                    <animate attributeName=\"opacity\" begin=\"-0.08333333333333333s\" dur=\"1s\" keyTimes=\"0;1\"\n                        repeatCount=\"indefinite\" values=\"1;0\" />\n                </rect>\n            </g>\n            <g transform=\"rotate(330 50 50)\">\n                <rect fill=\"#7a7a7a\" height=\"12\" rx=\"3\" ry=\"6\" width=\"6\" x=\"47\" y=\"20\">\n                    <animate attributeName=\"opacity\" begin=\"0s\" dur=\"1s\" keyTimes=\"0;1\" repeatCount=\"indefinite\"\n                        values=\"1;0\" />\n                </rect>\n            </g>\n        </svg>\n\n        <mat-icon *ngIf=\"!loaderDisplay && !isPlaying\" aria-hidden=\"true\" class=\"play-track\">\n            <!-- Play icon (play_arrow) -->\n            <svg height=\"32\" viewBox=\"0 0 24 24\" width=\"32\" xmlns=\"http://www.w3.org/2000/svg\">\n                <path d=\"M8 5v14l11-7z\" />\n                <path d=\"M0 0h24v24H0z\" fill=\"none\" />\n            </svg>\n        </mat-icon>\n        <mat-icon *ngIf=\"!loaderDisplay && isPlaying\" aria-hidden=\"true\" class=\"pause-track\">\n            <!-- Pause icon (pause) -->\n            <svg height=\"32\" viewBox=\"0 0 24 24\" width=\"32\" xmlns=\"http://www.w3.org/2000/svg\">\n                <path d=\"M6 19h4V5H6v14zm8-14v14h4V5h-4z\" />\n                <path d=\"M0 0h24v24H0z\" fill=\"none\" />\n            </svg>\n        </mat-icon>\n    </button>\n    <button type=\"button\" *ngIf=\"tracks.length > 1\" (click)='nextSong();' [disabled]=\"loaderDisplay\"\n        class=\"ngx-p-1 skip-next\" mat-button>\n        <mat-icon aria-hidden=\"true\" class=\"next-track\">\n            <!-- Skip next icon (skip_next) -->\n            <svg height=\"32\" viewBox=\"0 0 24 24\" width=\"32\" xmlns=\"http://www.w3.org/2000/svg\">\n                <path d=\"M6 18l8.5-6L6 6v12zM16 6v12h2V6h-2z\" />\n                <path d=\"M0 0h24v24H0z\" fill=\"none\" />\n            </svg>\n        </mat-icon>\n    </button>\n\n    <div class=\"ngx-col\">\n        <div class=\"ngx-d-flex ngx-flex-fill ngx-content-center\">\n            <div class=\"ngx-d-none ngx-d-sm-block ngx-py-3 ngx-px-1\" style=\"font-size: 12px\">\n                <span *ngIf=\"duration !== 0.01\">\n                    {{currentTime | secondsToMinutes}}\n                </span>\n            </div>\n\n            <mat-slider *ngIf=\"mediaType !== 'stream'\" [disabled]=\"disablePositionSlider\"\n                (change)=\"currTimePosChanged($event)\" [min]=\"startOffset\"\n                class=\"ngx-d-none ngx-d-sm-block ngx-flex-fill ngx-p-1 ngx-slider\" max=\"{{duration-endOffset}}\"\n                style=\"width: 100%\" value=\"{{currentTime}}\"></mat-slider>\n            <mat-slider *ngIf=\"mediaType === 'stream'\" [disabled]=\"true\" [min]=\"startOffset\"\n                class=\"ngx-d-none ngx-d-sm-block ngx-flex-fill ngx-p-1\" max=\"{{currentTime}}\" style=\"width: 100%\"\n                value=\"{{currentTime}}\"></mat-slider>\n\n            <div class=\"ngx-py-3 ngx-px-1\" style=\"font-size: 12px; text-align: right\">\n                <span *ngIf=\"mediaType !== null && mediaType !== 'stream' && duration !== 0.01\">\n                    -{{duration-currentTime | secondsToMinutes }}\n                </span>\n                <span *ngIf=\"mediaType === 'stream'\">\n                    STREAM\n                </span>\n            </div>\n        </div>\n    </div>\n    <button type=\"button\" (click)='toggleRepeat();' *ngIf=\"displayRepeatControls\"\n        class=\"ngx-p-1 volume justify-content-center\" mat-button>\n        <mat-icon *ngIf=\"repeat === 'none'\" aria-hidden=\"true\" class=\"volume-mute justify-content-center\">\n            <!-- Repeat None -->\n            <svg height=\"24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 22 22\">\n                <g>\n                    <g>\n                        <path d=\"m0,0l24,0l0,24l-24,0l0,-24z\" fill=\"none\" />\n                        <path\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\" />\n                        <path d=\"M 3 0 L 22.4164 22.2706 L 21 24 L 1.5836 1.8128 L 3 0\"></path>\n                    </g>\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\"/> -->\n                </g>\n            </svg>\n        </mat-icon>\n        <mat-icon *ngIf=\"repeat === 'all'\" aria-hidden=\"true\" class=\"volume-mute\">\n            <!-- Repeat All -->\n            <svg height=\"24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 22 22\">\n                <g>\n                    <path fill=\"none\" d=\"M0 0h24v24H0z\" />\n                    <path\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\" />\n                </g>\n            </svg>\n        </mat-icon>\n        <mat-icon *ngIf=\"repeat === 'one'\" aria-hidden=\"true\" class=\"volume-up\">\n            <!-- Repeat ONE -->\n            <svg height=\"24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 22 22\">\n                <g>\n                    <path fill=\"none\" d=\"M0 0h24v24H0z\" />\n                    <path\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\" />\n                </g>\n            </svg>\n        </mat-icon>\n    </button>\n    <button type=\"button\" *ngIf=\"displayVolumeControls\" class=\"ngx-p-1 volume\" mat-button>\n        <mat-icon (click)='toggleVolume();' *ngIf=\"volume === 0\" aria-hidden=\"true\" class=\"volume-mute\">\n            <!-- Volume mute icon (volume_off) -->\n            <svg height=\"28\" viewBox=\"0 0 24 24\" width=\"28\" xmlns=\"http://www.w3.org/2000/svg\">\n                <path\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\" />\n                <path d=\"M0 0h24v24H0z\" fill=\"none\" />\n            </svg>\n        </mat-icon>\n        <mat-icon (click)='toggleVolume();' *ngIf=\"volume > 0\" aria-hidden=\"true\" class=\"volume-up\">\n            <!-- Volume up icon (volume_up) -->\n            <svg height=\"28\" viewBox=\"0 0 24 24\" width=\"28\" xmlns=\"http://www.w3.org/2000/svg\">\n                <path\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\" />\n                <path d=\"M0 0h24v24H0z\" fill=\"none\" />\n            </svg>\n        </mat-icon>\n        <mat-slider *ngIf=\"displayVolumeSlider\" (change)=\"currVolumeChanged($event)\" [min]=\"0\"\n            class=\"ngx-d-none ngx-d-sm-block ngx-p-1 ngx-volume ngx-slider\" max=\"1\" step=\"0.01\"\n            value=\"{{volume}}\"></mat-slider>\n    </button>\n</mat-card>\n\n<mat-card *ngIf=\"displayTitle\" class=\"mat-elevation-z1 ngx-audio-player\">\n    <div style=\"text-align: center;\">\n        <div style=\"margin: 1px 2px; padding: 0.5em; font-weight: 400; font-size: 16px;\">\n            <div style=\"padding: 0.3em;\" *ngIf=\"!isPlaying\">{{\n                tracks[currentIndex]?.title }}{{\n                displayArtist && tracks[currentIndex]?.artist ?\n                ' | ' + tracks[currentIndex]?.artist : ''}}</div>\n\n            <marquee *ngIf=\"isPlaying\" behavior=\"scroll\" direction=\"left\">{{\n                tracks[currentIndex]?.title\n                }}{{ displayArtist && tracks[currentIndex]?.artist ? ' | ' + tracks[currentIndex]?.artist : ''}}\n            </marquee>\n        </div>\n        <div class=\"clear\"></div>\n    </div>\n</mat-card>\n\n<mat-accordion class=\"ngx-audio-player\" *ngIf=\"displayPlaylist && tracks.length > 1\">\n    <mat-expansion-panel [expanded]=\"expanded\">\n        <mat-expansion-panel-header>\n            {{tableHeader}}\n        </mat-expansion-panel-header>\n        <table [dataSource]=\"dataSource\" class=\"mat-elevation-z6\" mat-table>\n            <ng-container matColumnDef=\"title\">\n                <th *matHeaderCellDef mat-header-cell>{{titleHeader}}</th>\n                <td (click)=\"selectTrack(element.index)\" *matCellDef=\"let element\" mat-cell>\n                    {{element.title}}\n                </td>\n            </ng-container>\n            <ng-container matColumnDef=\"artist\">\n                <th *matHeaderCellDef mat-header-cell>{{artistHeader}}</th>\n                <td (click)=\"selectTrack(element.index)\" *matCellDef=\"let element\" mat-cell>\n                    {{element?.artist ? element?.artist : ''}}\n                </td>\n            </ng-container>\n            <ng-container matColumnDef=\"duration\">\n                <th *matHeaderCellDef mat-header-cell>{{durationHeader}}</th>\n                <td (click)=\"selectTrack(element.index)\" *matCellDef=\"let element\" mat-cell>\n                    {{element?.duration ? (element?.duration | secondsToMinutes) : ''}}\n                </td>\n            </ng-container>\n            <ng-container matColumnDef=\"status\">\n                <th *matHeaderCellDef mat-header-cell></th>\n                <td *matCellDef=\"let element\" mat-cell>\n                    <div *ngIf=\"tracks[currentIndex]?.title === element.title\">\n                        <!-- <mat-icon *ngIf=\"isPlaying\" aria-hidden=\"true\">\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>\n                        </mat-icon> -->\n                        <mat-icon *ngIf=\"isPlaying\" aria-hidden=\"true\" class=\"currently-playing\">\n                            <!-- Play icon (play_arrow) -->\n                            <svg height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\">\n                                <path d=\"M0 0h24v24H0z\" fill=\"none\" />\n                                <path\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\" />\n                            </svg>\n                        </mat-icon>\n                    </div>\n                </td>\n            </ng-container>\n            <tr *matHeaderRowDef=\"displayedColumns\" mat-header-row></tr>\n            <tr *matRowDef=\"let row; columns: displayedColumns;\" class=\"mat-select-content\" mat-row></tr>\n        </table>\n        <mat-paginator [pageSizeOptions]=\"pageSizeOptions\" showFirstLastButtons></mat-paginator>\n    </mat-expansion-panel>\n</mat-accordion>","import { NgModule } from '@angular/core';\n\nimport { MatSliderModule } from '@angular/material/slider';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport { CommonModule } from '@angular/common';\nimport { SecondsToMinutesPipe } from './pipe/seconds-to-minutes';\n\nimport { FormsModule } from '@angular/forms';\nimport { MatIconModule } from '@angular/material/icon';\nimport { AudioPlayerComponent } from './component/ngx-audio-player/ngx-audio-player.component';\n\n@NgModule({\n  declarations: [SecondsToMinutesPipe, AudioPlayerComponent],\n  imports: [CommonModule, FormsModule, MatButtonModule, MatCardModule, MatTableModule, MatFormFieldModule,\n    MatSliderModule, MatExpansionModule, MatPaginatorModule, MatIconModule],\n  exports: [AudioPlayerComponent]\n})\nexport class NgxAudioPlayerModule {\n}\n","export class Track {\n  index?: number;\n  link: string;\n  title: string;\n  mediaType?: string;\n  startOffset?: number;\n  endOffset?: number;\n  duration?: number;\n  artist?: string;\n  public toString = (): string => {\n    return `Track (index: ${this.index}, title: ${this.title})`;\n  }\n}\n","/*\n * Public API Surface of ngx-audio-player\n */\n\nexport * from './lib/component/ngx-audio-player/ngx-audio-player.component';\nexport * from './lib/ngx-audio-player.module';\nexport * from './lib/model/track.model';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i9.SecondsToMinutesPipe"],"mappings":"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"}