{"version":3,"file":"enlivensystems-ngx-audio-player.mjs","sources":["../../../projects/ngx-audio-player/src/lib/component/base/base-audio-player-components.ts","../../../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/mat-advanced-audio-player/mat-advanced-audio-player.component.ts","../../../projects/ngx-audio-player/src/lib/component/mat-advanced-audio-player/mat-advanced-audio-player.component.html","../../../projects/ngx-audio-player/src/lib/component/mat-basic-audio-player/mat-basic-audio-player.component.ts","../../../projects/ngx-audio-player/src/lib/component/mat-basic-audio-player/mat-basic-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/enlivensystems-ngx-audio-player.ts"],"sourcesContent":["import { ViewChild, ElementRef, Directive } from '@angular/core';\r\nimport { MatSlider } from '@angular/material/slider';\r\nimport {DeviceDetectorService} from 'ngx-device-detector';\r\n\r\n@Directive()\nexport class BaseAudioPlayerFunctions {\r\n\r\n    constructor(public deviceService: DeviceDetectorService) {}\r\n\r\n    @ViewChild('audioPlayer', {static: true}) player: ElementRef;\r\n    timeLineDuration: MatSlider;\r\n\r\n    loaderDisplay = false;\r\n    isPlaying = false;\r\n    currentTime = 0;\r\n    volume = 0.1;\r\n    duration = 0.01;\r\n\r\n    currTimePosChanged(event) {\r\n        this.player.nativeElement.currentTime = event.value;\r\n    }\r\n\r\n    bindPlayerEvent(): void {\r\n        this.player.nativeElement.addEventListener('playing', () => {\r\n            this.isPlaying = true;\r\n            this.duration = Math.floor(this.player.nativeElement.duration);\r\n        });\r\n        this.player.nativeElement.addEventListener('pause', () => {\r\n            this.isPlaying = false;\r\n        });\r\n        this.player.nativeElement.addEventListener('timeupdate', () => {\r\n            this.currentTime = Math.floor(this.player.nativeElement.currentTime);\r\n        });\r\n        this.player.nativeElement.addEventListener('volume', () => {\r\n            this.volume = Math.floor(this.player.nativeElement.volume);\r\n        });\r\n        this.player.nativeElement.addEventListener('loadstart', () => {\r\n            this.loaderDisplay = true;\r\n        });\r\n        if (this.deviceService.browser !== 'Safari') {\r\n            this.player.nativeElement.addEventListener('loadeddata', () => {\r\n                this.loaderDisplay = false;\r\n                this.duration = Math.floor(this.player.nativeElement.duration);\r\n            });\r\n        } else {\r\n            // loadeddata doesn't really work on iOS safari\r\n            // progress however doesn't work on Edge\r\n            this.player.nativeElement.addEventListener('progress', (event) => {\r\n                this.loaderDisplay = false;\r\n                this.duration = Math.floor(this.player.nativeElement.duration);\r\n            });\r\n        }\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            this.player.nativeElement.play(this.currentTime);\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    play(): void {\r\n        setTimeout(() => {\r\n            this.player.nativeElement.play();\r\n        }, 0);\r\n    }\r\n\r\n    toggleVolume() {\r\n        if (this.volume === 0) {\r\n            this.setVolume(1.0);\r\n        } else {\r\n            this.setVolume(0);\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}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { Track } from '../../model/track.model';\r\n\r\n@Injectable()\r\nexport class AudioPlayerService {\r\n\r\n  playlist: Track[] = [];\r\n\r\n  indexSong = 0;\r\n  currentTrack: BehaviorSubject<{}> = new BehaviorSubject(this.playlist[this.indexSong]);\r\n  currentTime = 0;\r\n  duration = 0;\r\n\r\n  constructor() {\r\n\r\n  }\r\n\r\n  init(): void {\r\n    this.updateCurrentSong();\r\n  }\r\n\r\n  nextSong(): void {\r\n    if ((this.indexSong + 1) >= this.playlist.length) {\r\n      this.indexSong = 0;\r\n    } else {\r\n      this.indexSong++;\r\n    }\r\n    this.updateCurrentSong();\r\n  }\r\n\r\n  previousSong(): void {\r\n    if ((this.indexSong - 1) < 0) {\r\n      this.indexSong = (this.playlist.length - 1);\r\n    } else {\r\n      this.indexSong--;\r\n    }\r\n    this.updateCurrentSong();\r\n  }\r\n\r\n  resetPlaylist(): void {\r\n    this.indexSong = 0;\r\n    this.updateCurrentSong();\r\n  }\r\n\r\n  selectATrack(index: number): void {\r\n    this.indexSong = index - 1;\r\n    this.updateCurrentSong();\r\n  }\r\n\r\n  updateCurrentSong(): void {\r\n    const current = this.playlist[this.indexSong];\r\n    const previous = ((this.indexSong - 1) >= 0) ? this.playlist[this.indexSong - 1] : this.playlist[this.playlist.length - 1];\r\n    const next = ((this.indexSong + 1) >= this.playlist.length) ? this.playlist[0] : this.playlist[this.indexSong + 1];\r\n    this.currentTrack.next([\r\n      previous,\r\n      current,\r\n      next\r\n    ]);\r\n  }\r\n\r\n  getSubjectCurrentTrack(): BehaviorSubject<{}> {\r\n    return this.currentTrack;\r\n  }\r\n\r\n  getPlaylist(): Track[] {\r\n    return this.playlist;\r\n  }\r\n\r\n  setPlaylist(playlist: Track[]) {\r\n    this.playlist = playlist;\r\n  }\r\n\r\n  getIndexSong() {\r\n    return this.indexSong;\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 minutes = ('0' + Math.floor(time / 60)).slice(-2);\r\n        const seconds = ('0' + time % 60).slice(-2);\r\n        return `${minutes}:${seconds}`;\r\n    }\r\n}\r\n","import {\r\n    Component,\r\n    OnInit,\r\n    Input,\r\n    ViewChild,\r\n    Output,\r\n    EventEmitter\r\n} from '@angular/core';\r\nimport { AudioPlayerService } from '../../service/audio-player-service/audio-player.service';\r\nimport { Track } from '../../model/track.model';\r\nimport { BaseAudioPlayerFunctions } from '../base/base-audio-player-components';\r\nimport { MatSlider } from '@angular/material/slider';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport {DeviceDetectorService} from 'ngx-device-detector';\r\n\r\n@Component({\r\n    selector: 'mat-advanced-audio-player',\r\n    templateUrl: './mat-advanced-audio-player.component.html',\r\n    styleUrls: ['./mat-advanced-audio-player.component.css']\r\n})\r\nexport class MatAdvancedAudioPlayerComponent extends BaseAudioPlayerFunctions implements OnInit {\r\n\r\n    displayedColumns: string[] = ['title', 'status', 'functions'];\r\n    timeLineDuration: MatSlider;\r\n\r\n    dataSource = new MatTableDataSource<Track>();\r\n\r\n    paginator: MatPaginator;\r\n\r\n    playlistData: Track[] = [];\r\n\r\n    Infinity = Infinity;\r\n\r\n    @Input()\r\n    displayTitle = true;\r\n\r\n    @Input()\r\n    displayPlaylist = true;\r\n\r\n    @Input()\r\n    pageSizeOptions = [10, 20, 30];\r\n\r\n    @Input()\r\n    expanded = true;\r\n\r\n    @Input()\r\n    autoPlay = false;\r\n\r\n    @Input()\r\n    displayVolumeControls = true;\r\n\r\n    @Input()\r\n    audioLoadingErrorText = 'Failed to load: ';\r\n    @Input()\r\n    audioLoadingInProgressText = 'Please wait while the audio is loading: ';\r\n\r\n    @Input()\r\n    clearPlaylistText = 'Clear playlist';\r\n\r\n    @Input()\r\n    errorColor = '#D65251';\r\n    @Input()\r\n    errorText = 'Failed to load the song, click here to try again!';\r\n\r\n    @Input()\r\n    removePlaylistElementEnabled = false;\r\n\r\n    @Input()\r\n    removePlaylistElementText = 'Remove';\r\n\r\n    @Input()\r\n    playlistTitleText = 'Play List';\r\n\r\n    @Output()\r\n    clearPlaylist: EventEmitter<void> = new EventEmitter();\r\n\r\n    @Output()\r\n    removePlaylistElementByID: EventEmitter<string> = new EventEmitter();\r\n\r\n    @Output()\r\n    playerLoadError: EventEmitter<any> = new EventEmitter();\r\n\r\n    audioLoadingError = false;\r\n    playlistTrack: any;\r\n    currentTrack: Track;\r\n\r\n    constructor(deviceService: DeviceDetectorService,\r\n                private playlistService: AudioPlayerService) {\r\n        super(deviceService);\r\n    }\r\n\r\n    ngOnInit() {\r\n        this.setDataSourceAttributes();\r\n        this.bindPlayerEvent();\r\n        this.player.nativeElement.addEventListener('canplay', () => {\r\n            this.audioLoadingError = false;\r\n        });\r\n        this.player.nativeElement.addEventListener('ended', () => {\r\n            if (this.checkIfSongHasStartedSinceAtleastTwoSeconds()) {\r\n                this.removePlaylistElementByID.emit(this.currentTrack.id);\r\n                this.nextSong();\r\n            }\r\n        });\r\n        this.player.nativeElement.addEventListener('error', (event) => {\r\n            console.log('Error while loading audio:');\r\n            console.log(event);\r\n            this.audioLoadingError = true;\r\n            this.playerLoadError.emit(this.playlistTrack);\r\n        });\r\n        this.player.nativeElement.addEventListener('loadstart', () => {\r\n            this.audioLoadingError = false;\r\n        });\r\n        this.player.nativeElement.addEventListener('waiting', () => {\r\n            this.audioLoadingError = false;\r\n        });\r\n        this.playlistService.setPlaylist(this.playlistData);\r\n        this.playlistService.getSubjectCurrentTrack().subscribe((playlistTrack) => {\r\n            this.playlistTrack = playlistTrack;\r\n            if (this.playlistTrack && this.playlistTrack[1]) {\r\n                this.currentTrack = this.playlistTrack[1];\r\n            }\r\n        });\r\n        this.player.nativeElement.currentTime = 0;\r\n        this.playlistService.init();\r\n        if (this.autoPlay) {\r\n            super.play();\r\n        }\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    setDataSourceAttributes() {\r\n        let index = 1;\r\n        if (this.playlistData) {\r\n            this.playlistData.forEach(data => {\r\n                data.index = index++;\r\n            });\r\n            this.dataSource = new MatTableDataSource<Track>(this.playlistData);\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.playlistService.indexSong + 1) % this.paginator.pageSize) === 0\r\n                || (this.playlistService.indexSong + 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        const shouldPlay = this.playlistService.indexSong + 1 < this.playlistService.playlist.length;\r\n        this.playlistService.nextSong();\r\n        // Stop, if we reached the end of the playlist\r\n        if (shouldPlay) {\r\n            this.play();\r\n        }\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.playlistService.indexSong) % this.paginator.pageSize) === 0\r\n                    || (this.playlistService.indexSong) === 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            this.playlistService.previousSong();\r\n        } else {\r\n            this.resetSong();\r\n        }\r\n        this.play();\r\n    }\r\n\r\n    resetSong(): void {\r\n        this.player.nativeElement.src = this.currentTrack ? this.currentTrack.link : this.playlistTrack[1].link;\r\n    }\r\n\r\n    retryOrPlay(): void {\r\n        if (!this.audioLoadingError) {\r\n            this.playBtnHandler();\r\n        } else {\r\n            this.nextSong();\r\n            // @note These do not work for retrying the current song!\r\n            // this.previousSong();\r\n            // this.currentTime = 0;\r\n            // this.duration = 0.01;\r\n            // this.play();\r\n        }\r\n    }\r\n\r\n    selectTrack(index: number): void {\r\n        this.playlistService.selectATrack(index);\r\n        setTimeout(() => {\r\n            this.player.nativeElement.play();\r\n        }, 0);\r\n    }\r\n\r\n    /*\r\n    Should be called when the playlist changes. Sets GUI elements without resetting the current state.\r\n     */\r\n    setPlaylist(playlist: Track[]): void {\r\n        // If the new playlist is empty, pause\r\n        if (playlist !== undefined &&\r\n            playlist.length === 0) {\r\n            this.player.nativeElement.pause();\r\n        }\r\n        // Check if something was removed\r\n        // If something was and it's the currently playing element, pause go to the next song\r\n        if (playlist !== undefined &&\r\n            this.playlistData.length > playlist.length &&\r\n            this.playlistTrack && this.playlistTrack[1] &&\r\n            this.playlistData.find(e => e && e.link === this.playlistTrack[1].link) &&\r\n            !playlist.find(e => e && e.link === this.playlistTrack[1].link)) {\r\n            console.log('Currently playing element was removed from the playlist, pausing going to the next...');\r\n            this.player.nativeElement.pause();\r\n            this.nextSong();\r\n        }\r\n        // Set state and GUI in accordance with the playlist changes.\r\n        this.playlistData = playlist;\r\n        this.setDataSourceAttributes();\r\n        this.playlistService.setPlaylist(this.playlistData);\r\n    }\r\n\r\n    checkIfSongHasStartedSinceAtleastTwoSeconds(): boolean {\r\n        return this.player.nativeElement.currentTime > 2;\r\n    }\r\n\r\n    @Input()\r\n    set playlist(playlist: Track[]) {\r\n        this.setPlaylist(playlist);\r\n        // this.playlistData = playlist;\r\n        // this.ngOnInit();\r\n    }\r\n}\r\n","<mat-card class=\"d-flex justify-content-center ngx-advanced-audio-player z-depth-1 mat-elevation-z2\" style=\"margin: 0px;\">\r\n\r\n  <audio [src]=\"currentTrack ? currentTrack.link : ''\" #audioPlayer></audio>\r\n\r\n  <!-- [disabled]=\"loaderDisplay\" -->\r\n    <button class=\"p-1 skip-prev\" mat-button (click)='previousSong();'>\r\n      <mat-icon fontSet=\"material-icons-round\"\r\n                aria-hidden=\"true\"\r\n                style=\"width: 32px; height: 32px; font-size: 30px;\">\r\n        <!-- Skip previous icon (skip_previous) -->\r\n        <!--\r\n        <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 24 24\"><path d=\"M6 6h2v12H6zm3.5 6l8.5 6V6z\"/><path d=\"M0 0h32v32H0z\" fill=\"none\"/></svg>\r\n        -->\r\n        skip_previous\r\n      </mat-icon>\r\n    </button>\r\n\r\n    <button mat-button class=\"p-1 play-pause\"\r\n            [class.audio-loading]=\"loaderDisplay\"\r\n            [class.audio-loading-error]=\"audioLoadingError\"\r\n            [disabled]=\"loaderDisplay && !audioLoadingError\"\r\n            (click)='retryOrPlay()'>\r\n        <mat-icon *ngIf=\"!loaderDisplay && !audioLoadingError && !isPlaying\"\r\n                  class=\"play-track\"\r\n                  fontSet=\"material-icons-round\"\r\n                  aria-hidden=\"true\"\r\n                  style=\"width: 32px; height: 32px; font-size: 30px;\">\r\n          <!-- Play icon (play_arrow) -->\r\n          <!--\r\n          <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 24 24\"><path d=\"M8 5v14l11-7z\"/><path d=\"M0 0h24v24H0z\" fill=\"none\"/></svg>\r\n          -->\r\n          play_arrow\r\n        </mat-icon>\r\n        <mat-icon *ngIf=\"!loaderDisplay && !audioLoadingError && isPlaying\"\r\n                  class=\"pause-track\"\r\n                  fontSet=\"material-icons-round\"\r\n                  aria-hidden=\"true\"\r\n                  style=\"width: 32px; height: 32px; font-size: 30px;\">\r\n          <!-- Pause icon (pause) -->\r\n          <!--\r\n          <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 24 24\"><path d=\"M6 19h4V5H6v14zm8-14v14h4V5h-4z\"/><path d=\"M0 0h24v24H0z\" fill=\"none\"/></svg>\r\n          -->\r\n          pause\r\n        </mat-icon>\r\n        <mat-icon *ngIf=\"audioLoadingError\"\r\n                  [matTooltip]=\"errorText\"\r\n                  fontSet=\"material-icons-round\">\r\n          <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" [attr.fill]=\"errorColor\" width=\"32\" height=\"32\">\r\n            <path d=\"M0 0h24v24H0z\" fill=\"none\"/>\r\n            <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z\"/>\r\n          </svg>\r\n        </mat-icon>\r\n    </button>\r\n\r\n  <!-- [disabled]=\"loaderDisplay\" -->\r\n    <button mat-button class=\"p-1 skip-next\" (click)='nextSong();'>\r\n      <mat-icon class=\"next-track\"\r\n                fontSet=\"material-icons-round\"\r\n                aria-hidden=\"true\"\r\n                style=\"width: 32px; height: 32px; font-size: 30px;\">\r\n        <!-- Skip next icon (skip_next) -->\r\n        <!--\r\n        <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 24 24\"><path d=\"M6 18l8.5-6L6 6v12zM16 6v12h2V6h-2z\"/><path d=\"M0 0h24v24H0z\" fill=\"none\"/></svg>\r\n        -->\r\n        skip_next\r\n      </mat-icon>\r\n    </button>\r\n\r\n  <div class=\"col\">\r\n    <div class=\"d-flex flex-fill justify-content-center\">\r\n      <div class=\"d-none d-sm-block py-3 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      <mat-slider class=\"d-none d-sm-block flex-fill p-1\" style=\"width: 100%\" min=\"0\" max=\"{{duration}}\" value=\"{{currentTime}}\"\r\n        (change)=\"currTimePosChanged($event)\"></mat-slider>\r\n\r\n      <div class=\"py-3 px-1\" style=\"font-size: 12px; text-align: right\">\r\n        <span *ngIf=\"duration !== 0.01 && duration !== Infinity\">\r\n          -{{duration-currentTime | secondsToMinutes }}\r\n        </span>\r\n      </div>\r\n    </div>\r\n  </div>\r\n  <button *ngIf=\"displayVolumeControls\" mat-button class=\"p-1 volume\" (click)='toggleVolume();'>\r\n    <mat-icon *ngIf=\"volume === 0\"\r\n              class=\"volume-mute\"\r\n              fontSet=\"material-icons-round\"\r\n              aria-hidden=\"true\"\r\n              style=\"width: 28px; height: 28px; font-size: 30px;\">\r\n      <!-- Volume mute icon (volume_off) -->\r\n      <!--\r\n      <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"28\" height=\"28\" viewBox=\"0 0 24 24\"><path 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\"/><path d=\"M0 0h24v24H0z\" fill=\"none\"/></svg>\r\n      -->\r\n      volume_off\r\n    </mat-icon>\r\n    <mat-icon *ngIf=\"volume > 0\"\r\n              class=\"volume-up\"\r\n              fontSet=\"material-icons-round\"\r\n              aria-hidden=\"true\"\r\n              style=\"width: 28px; height: 28px; font-size: 26px;\">\r\n      <!-- Volume up icon (volume_up) -->\r\n      <!--\r\n      <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"28\" height=\"28\" viewBox=\"0 0 24 24\"><path 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\"/><path d=\"M0 0h24v24H0z\" fill=\"none\"/></svg>\r\n      -->\r\n      volume_up\r\n    </mat-icon>\r\n  </button>\r\n</mat-card>\r\n\r\n<mat-card *ngIf=\"displayTitle\" class=\"mat-elevation-z1 title-card\">\r\n  <div style=\"text-align: center;\">\r\n    <div *ngIf=\"currentTrack\"\r\n         style=\"margin: 1px 2px; padding: 1em\">\r\n      <span *ngIf=\"!isPlaying\">\r\n        <span *ngIf=\"loaderDisplay && !audioLoadingError\">{{audioLoadingInProgressText}}</span>\r\n        <span *ngIf=\"audioLoadingError\">{{audioLoadingErrorText}}</span>\r\n        {{ currentTrack.title }}\r\n      </span>\r\n      <marquee *ngIf=\"isPlaying\" behavior=\"scroll\" direction=\"left\">\r\n        <span *ngIf=\"loaderDisplay && !audioLoadingError\">{{audioLoadingInProgressText}}</span>\r\n        <span *ngIf=\"audioLoadingError\">{{audioLoadingErrorText}}</span>\r\n        {{ currentTrack.title }}\r\n      </marquee>\r\n      <!--\r\n      Would be nice, see: https://github.com/shivarajnaidu/ng-marquee/issues/10\r\n      <ng-marquee *ngIf=\"isPlaying\"\r\n                  behavior=\"scroll\"\r\n                  direction=\"left\"\r\n                  speed=\"normal\"\r\n                  [stopOnHover]=\"true\">\r\n        <mark>\r\n          <span *ngIf=\"loaderDisplay && !audioLoadingError\">{{audioLoadingInProgressText}}</span>\r\n          <span *ngIf=\"audioLoadingError\">{{audioLoadingErrorText}}</span>\r\n          {{ currentTrack.title }}\r\n        </mark>\r\n      </ng-marquee>\r\n      -->\r\n    </div>\r\n    <div class=\"clear\"></div>\r\n  </div>\r\n</mat-card>\r\n\r\n<mat-accordion *ngIf=\"displayPlaylist\">\r\n  <mat-expansion-panel [expanded]=\"expanded\">\r\n    <mat-expansion-panel-header style=\"position: relative\">\r\n      {{playlistTitleText}}\r\n\r\n      <button mat-flat-button\r\n              class=\"clearer\"\r\n              *ngIf=\"removePlaylistElementEnabled\"\r\n              (click)=\"clearPlaylist.emit()\">\r\n        {{clearPlaylistText}}\r\n      </button>\r\n    </mat-expansion-panel-header>\r\n    <table mat-table [dataSource]=\"dataSource\" class=\"mat-elevation-z6\">\r\n      <ng-container matColumnDef=\"title\">\r\n        <th mat-header-cell *matHeaderCellDef> Title </th>\r\n        <td mat-cell *matCellDef=\"let element\" (click)=\"selectTrack(element.index)\"> {{element.title}} </td>\r\n      </ng-container>\r\n      <ng-container matColumnDef=\"status\">\r\n        <th mat-header-cell *matHeaderCellDef> </th>\r\n        <td mat-cell *matCellDef=\"let element\">\r\n          <div *ngIf=\"currentTrack && currentTrack.title === element.title\">\r\n            <mat-icon *ngIf=\"isPlaying\"\r\n                      class=\"currently-playing\"\r\n                      fontSet=\"material-icons-round\"\r\n                      aria-hidden=\"true\"\r\n                      style=\"width: 24px; height: 24px; font-size: 22px;\">\r\n              <!-- Play icon (play_arrow) -->\r\n              <!--\r\n              <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path 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\"/></svg>\r\n              -->\r\n              play_arrow\r\n            </mat-icon>\r\n          </div>\r\n        </td>\r\n      </ng-container>\r\n      <ng-container matColumnDef=\"functions\">\r\n        <th mat-header-cell *matHeaderCellDef></th>\r\n        <td mat-cell *matCellDef=\"let element\">\r\n          <button *ngIf=\"removePlaylistElementEnabled && element\"\r\n                  class=\"playlist-element-remover\"\r\n                  (click)=\"removePlaylistElementByID.emit(element.id)\">\r\n            {{removePlaylistElementText}}\r\n          </button>\r\n        </td>\r\n      </ng-container>\r\n      <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\r\n      <tr class=\"mat-select-content\" mat-row *matRowDef=\"let row; columns: displayedColumns;\"></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 { Component, OnInit, Input } from '@angular/core';\r\nimport { BaseAudioPlayerFunctions } from '../base/base-audio-player-components';\r\nimport {DeviceDetectorService} from 'ngx-device-detector';\r\n\r\n@Component({\r\n    selector: 'mat-basic-audio-player',\r\n    templateUrl: './mat-basic-audio-player.component.html',\r\n    styleUrls: ['./mat-basic-audio-player.component.css']\r\n})\r\nexport class MatBasicAudioPlayerComponent extends BaseAudioPlayerFunctions implements OnInit {\r\n\r\n    @Input()\r\n    title: string;\r\n\r\n    @Input()\r\n    audioUrl: string;\r\n\r\n    @Input()\r\n    displayTitle = false;\r\n\r\n    @Input()\r\n    autoPlay = false;\r\n\r\n    @Input()\r\n    displayVolumeControls = true;\r\n\r\n    constructor(deviceService: DeviceDetectorService) {\r\n        super(deviceService);\r\n    }\r\n\r\n    ngOnInit() {\r\n        this.bindPlayerEvent();\r\n        if (this.autoPlay) {\r\n            super.play();\r\n        }\r\n    }\r\n\r\n    resetSong(): void {\r\n        this.player.nativeElement.src = this.audioUrl;\r\n    }\r\n\r\n}\r\n","<mat-card class=\"d-flex ngx-basic-audio-player z-depth-1 mat-elevation-z1\">\r\n    <audio [src]=\"audioUrl\" #audioPlayer></audio>\r\n    <button mat-button (click)='playBtnHandler();' class=\"ngx-basic-audio-player-button-handler\"\r\n        style=\"font-size: 14px!important;\" [disabled]=\"loaderDisplay\">\r\n            <mat-icon *ngIf=\"!loaderDisplay && !isPlaying\"\r\n                      class=\"play-track\"\r\n                      fontSet=\"material-icons-round\"\r\n                      aria-hidden=\"true\"\r\n                      style=\"width: 32px; height: 32px; font-size: 30px;\">\r\n                <!-- Play icon (play_arrow) -->\r\n                <!--\r\n                <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 24 24\"><path d=\"M8 5v14l11-7z\"/><path d=\"M0 0h24v24H0z\" fill=\"none\"/></svg>\r\n                -->\r\n                play_arrow\r\n            </mat-icon>\r\n            <mat-icon *ngIf=\"!loaderDisplay && isPlaying\"\r\n                      class=\"pause-track\"\r\n                      fontSet=\"material-icons-round\"\r\n                      aria-hidden=\"true\"\r\n                      style=\"width: 32px; height: 32px; font-size: 30px;\">\r\n                <!-- Pause icon (pause) -->\r\n                <!--\r\n                <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 24 24\"><path d=\"M6 19h4V5H6v14zm8-14v14h4V5h-4z\"/><path d=\"M0 0h24v24H0z\" fill=\"none\"/></svg>\r\n                -->\r\n                pause\r\n            </mat-icon>\r\n    </button>\r\n    <div class=\"flex-fill pl-1 ngx-basic-audio-player-slider\">\r\n        <mat-slider style=\"width: 100%\" min=\"0\" max=\"{{duration}}\" value=\"{{currentTime}}\"\r\n            (change)=\"currTimePosChanged($event)\"></mat-slider>\r\n    </div>\r\n    <div class=\"d-flex ngx-basic-audio-player-duration\">\r\n        <span *ngIf=\"duration !== 0.01\" class=\"pl-2 pr-3 my-auto\" style=\"font-size: 14px!important;\">\r\n            -{{duration-currentTime |\r\n            secondsToMinutes }}\r\n        </span>\r\n    </div>\r\n    <button *ngIf=\"displayVolumeControls\" mat-button (click)='toggleVolume();'\r\n        style=\"padding: 0px!important; min-width:48px!important;\">\r\n        <mat-icon *ngIf=\"volume === 0\"\r\n                  class=\"volume-mute\"\r\n                  fontSet=\"material-icons-round\"\r\n                  aria-hidden=\"true\"\r\n                  style=\"width: 28px; height: 28px; font-size: 26px;\">\r\n            <!-- Volume mute icon (volume_off) -->\r\n            <!--\r\n            <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"28\" height=\"28\" viewBox=\"0 0 24 24\"><path 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\"/><path d=\"M0 0h24v24H0z\" fill=\"none\"/></svg>\r\n            -->\r\n            volume_off\r\n          </mat-icon>\r\n          <mat-icon *ngIf=\"volume > 0\"\r\n                    class=\"volume-up\"\r\n                    fontSet=\"material-icons-round\"\r\n                    aria-hidden=\"true\"\r\n                    style=\"width: 28px; height: 28px; font-size: 26px;\">\r\n            <!-- Volume up icon (volume_up) -->\r\n            <!--\r\n            <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"28\" height=\"28\" viewBox=\"0 0 24 24\"><path 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\"/><path d=\"M0 0h24v24H0z\" fill=\"none\"/></svg>\r\n            -->\r\n              volume_up\r\n          </mat-icon>\r\n    </button>\r\n</mat-card>\r\n\r\n<mat-card class=\"z-depth-1 mat-elevation-z1\" *ngIf=\"displayTitle && title !== ''\">\r\n    <div style=\"text-align: center;\">\r\n        <div style=\"margin: 1px 2px; padding: 1em\">\r\n            {{ title }}\r\n        </div>\r\n    </div>\r\n</mat-card>","import { NgModule } from '@angular/core';\r\n\r\nimport { MatSliderModule } from '@angular/material/slider';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatButtonModule } from '@angular/material/button';\r\n\r\nimport { MatBasicAudioPlayerComponent } from './component/mat-basic-audio-player/mat-basic-audio-player.component';\r\nimport { AudioPlayerService } from './service/audio-player-service/audio-player.service';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SecondsToMinutesPipe } from './pipe/seconds-to-minutes';\r\nimport { MatAdvancedAudioPlayerComponent } from './component/mat-advanced-audio-player/mat-advanced-audio-player.component';\r\n\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport {MatTooltipModule} from '@angular/material/tooltip';\r\nimport {DeviceDetectorModule} from 'ngx-device-detector';\r\n\r\n@NgModule({\r\n  declarations: [MatBasicAudioPlayerComponent, SecondsToMinutesPipe, MatAdvancedAudioPlayerComponent],\r\n  imports: [CommonModule, FormsModule, MatButtonModule, MatCardModule, MatTableModule, MatFormFieldModule,\r\n    MatSliderModule, MatExpansionModule, MatPaginatorModule, MatIconModule, MatTooltipModule,\r\n    DeviceDetectorModule.forRoot()],\r\n  exports: [MatBasicAudioPlayerComponent, MatAdvancedAudioPlayerComponent],\r\n  providers: [AudioPlayerService]\r\n})\r\nexport class NgxAudioPlayerModule {\r\n  constructor() {\r\n  }\r\n}\r\n","export class Track {\r\n  id?: string;\r\n  index?: number;\r\n  link: string;\r\n  title: string;\r\n}\r\n","/*\r\n * Public API Surface of ngx-audio-player\r\n */\r\n\r\nexport * from './lib/component/mat-advanced-audio-player/mat-advanced-audio-player.component';\r\nexport * from './lib/component/mat-basic-audio-player/mat-basic-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":["i2.AudioPlayerService","i12.SecondsToMinutesPipe","i2","i3","i4","i5","i6","i7.SecondsToMinutesPipe"],"mappings":"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"}