UNPKG

65.7 kBSource Map (JSON)View Raw
1{"version":3,"file":"bmat-angular-media-players.js","sources":["ng://@bmat/angular/media-players/lib/format-duration/format-duration.pipe.ts","ng://@bmat/angular/media-players/lib/bm-media-output/bm-media-output.component.ts","ng://@bmat/angular/media-players/lib/progress-bar/progress-bar.component.ts","ng://@bmat/angular/media-players/lib/audio/bm-audio.component.ts","ng://@bmat/angular/media-players/lib/tokens/connected-player-close-request.ts","ng://@bmat/angular/media-players/lib/tokens/connected-player-src.token.ts","ng://@bmat/angular/media-players/lib/tokens/connected-player-volume.token.ts","ng://@bmat/angular/media-players/lib/components/connected-video-player/connected-video-player.component.ts","ng://@bmat/angular/media-players/lib/services/connected-media-remote/connected-media-remote.service.ts","ng://@bmat/angular/media-players/lib/components/connected-audio-player/connected-audio-player.component.ts","ng://@bmat/angular/media-players/lib/format-duration/format-duration.pipe.module.ts","ng://@bmat/angular/media-players/lib/media-progress-slider/drag-observable.ts","ng://@bmat/angular/media-players/lib/media-progress-slider/mouseover-relative-coordinates-observable.ts","ng://@bmat/angular/media-players/lib/media-progress-slider/media-progress-slider.component.ts","ng://@bmat/angular/media-players/lib/media-progress-slider/media-progress-tooltip.directive.ts","ng://@bmat/angular/media-players/lib/media-progress-slider/media-progress-slider.component.module.ts","ng://@bmat/angular/media-players/lib/progress-bar/progress-bar.component.module.ts","ng://@bmat/angular/media-players/lib/media-players.module.ts"],"sourcesContent":["/**\n * Angular Pipe. ParseDurationPipe.\n * Transforms second to HH:MM:SS\n */\nimport { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'bmParseDuration',\n})\nexport class ParseDurationPipe implements PipeTransform {\n // tslint:disable-next-line:no-any\n public transform(value: any, format: string = 'HH:MM:SS') {\n const coerceInteger = Number.parseInt(value, 10);\n if (Number.isNaN(coerceInteger)) {\n return 'N/A';\n }\n\n const seconds = coerceInteger % 60;\n const minutes = Math.floor(coerceInteger / 60) % 60;\n const hours = Math.floor(coerceInteger / 3600);\n\n return format\n .split(':')\n .map(segment => {\n const { length } = segment;\n if (length === 0) {\n throw new TypeError('Invalid format. Empty segment.');\n }\n if (length > 2) {\n throw new TypeError('Invalid format for segment ' + segment);\n }\n if (segment.length === 2 && segment[0] !== segment[1]) {\n throw new TypeError('Invalid format for segment ' + segment);\n }\n\n let val: string;\n switch (segment[0]) {\n case 'H':\n val = hours.toString();\n break;\n case 'M':\n val = minutes.toString();\n break;\n case 'S':\n val = seconds.toString();\n break;\n default:\n throw new TypeError('Invalid format for segment ' + segment);\n }\n while (val.length < length) {\n val = '0' + val;\n }\n return val;\n })\n .join(':');\n }\n}\n","/**\n * Angular Component. BMMediaOutput\n * Used in media players. To transclude and allow definition of custom controls\n */\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport { ParseDurationPipe } from '../format-duration/format-duration.pipe';\n\n@Component({\n selector: 'bm-media-output',\n templateUrl: 'bm-media-output.component.html',\n styleUrls: ['bm-media-output.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class BMMediaOutputComponent {\n @Input() public format = 'MM:SS';\n\n @Input()\n public set time(v: number) {\n if (v || v === 0) {\n this.innerTime = this.formater.transform(Math.max(0, v), this.format);\n this.changeDetectorRef.markForCheck();\n }\n }\n\n public innerTime!: string;\n\n private formater: ParseDurationPipe = new ParseDurationPipe();\n\n constructor(private changeDetectorRef: ChangeDetectorRef) {\n this.changeDetectorRef.detach();\n }\n}\n","/**\n * Angular Component BMProgressBar\n * Polyfill/Stylable progress bar\n */\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n HostBinding,\n Input,\n} from '@angular/core';\n\n@Component({\n selector: 'bm-progress',\n templateUrl: 'progress-bar.component.html',\n styleUrls: ['progress-bar.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ProgressBarComponent {\n @HostBinding('attr.aria-valuemin') public readonly min = 0;\n @HostBinding('attr.role') public readonly role = 'progressbar';\n\n @HostBinding('attr.aria-valuemax')\n @Input()\n public max = 100;\n\n @HostBinding('attr.aria-valuenow')\n @Input()\n public set value(v: number) {\n this._value = Math.min(Math.max(0, Number.isNaN(v) ? 0 : v), this.max);\n this.innerWidth = Math.round((10000 * this._value) / this.max) / 100;\n\n this._cdr.markForCheck();\n }\n public get value() {\n return this._value;\n }\n\n /**\n * Sets if the bar should display or not an animation after value changes\n */\n @Input()\n @HostBinding('attr.static')\n public staticBar = false;\n\n public innerWidth!: number;\n\n private _value = 0;\n\n constructor(private _cdr: ChangeDetectorRef) {}\n}\n","/**\n * Angular Component. Audio media player\n */\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n Renderer2,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { Subscription, timer } from 'rxjs';\nimport { tap } from 'rxjs/operators';\n\nimport { BMMediaOutputComponent } from '../bm-media-output/bm-media-output.component';\nimport { ProgressBarComponent } from '../progress-bar/progress-bar.component';\n\nexport type PreloadValues = 'auto' | 'metadata' | 'none';\n\n@Component({\n selector: 'bm-audio-player',\n templateUrl: 'bm-audio.component.html',\n styleUrls: ['bm-audio.component.scss', 'bm-audio.shadow-dom.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n // tslint:disable-next-line:use-component-view-encapsulation\n encapsulation: ViewEncapsulation.None,\n})\nexport class BMATAudioPlayerComponent implements AfterContentInit {\n /**\n * Threshold of time to consider a mousedown a hold event.\n */\n public static HOLD_TIME = 200;\n /**\n * Playback rate when playing audio in accelerated mode.\n */\n public static ACCELERATED_RATE = 3;\n\n // Forward attributes to audio\n @Input() public autoplay = false;\n @Input() public controls = false;\n @Input() public loop = false;\n @Input() public muted = false;\n @Input() public preload: PreloadValues = 'none';\n @Input()\n public set src(v: string) {\n this._src = v;\n\n this.isDisabled = !v;\n }\n public get src() {\n return this._src;\n }\n\n /**\n * Echo of play HTMLAudioElement event\n */\n @Output() public play = new EventEmitter<null>();\n /**\n * Echo of play HTMLAudioElement event\n */\n @Output() public pause = new EventEmitter<null>();\n\n @ViewChild('audio', { static: true }) public audioElement!: ElementRef<\n HTMLMediaElement\n >;\n\n public isDisabled = true;\n public isLoading = false;\n public isPlaying = false;\n\n @ContentChild(ProgressBarComponent, { static: true })\n private progressBar!: ProgressBarComponent;\n @ContentChild(BMMediaOutputComponent, { static: true })\n private mediaOutput!: BMMediaOutputComponent;\n\n private _mouseDownTime!: number;\n private _timerSubscription!: Subscription;\n private _playBackTimerSubscription!: Subscription;\n private _isMouseDown = false;\n private _src!: string;\n\n private _progressUpdater$ = timer(500, 500).pipe(\n tap(this.calculateElapsed.bind(this)),\n );\n\n constructor(private _renderer: Renderer2) {}\n\n public ngAfterContentInit() {\n if (this.progressBar) {\n this.progressBar.value = 0;\n this.progressBar.staticBar = true;\n }\n if (this.mediaOutput) {\n this.mediaOutput.time = 0;\n }\n }\n\n public onButtonMousedown(event: MouseEvent) {\n event.preventDefault();\n this._mouseDownTime = new Date().getTime();\n this._isMouseDown = true;\n this._playBackTimerSubscription = timer(\n BMATAudioPlayerComponent.HOLD_TIME,\n ).subscribe(() => {\n const now = new Date().getTime();\n const deltaTime = now - this._mouseDownTime;\n if (this._isMouseDown && deltaTime > BMATAudioPlayerComponent.HOLD_TIME) {\n this._renderer.setProperty(\n this.audioElement.nativeElement,\n 'playbackRate',\n BMATAudioPlayerComponent.ACCELERATED_RATE,\n );\n }\n });\n }\n\n public onloadeddata(event: Event) {\n event.stopPropagation();\n this.isLoading = true;\n }\n\n public ondurationchange() {\n this.calculateElapsed();\n }\n\n public oncanplay(event: Event) {\n event.stopPropagation();\n this.isLoading = false;\n }\n\n public onplay(event: Event) {\n event.stopPropagation();\n this.isPlaying = true;\n this.play.emit();\n if (this.progressBar) {\n this._timerSubscription = this._progressUpdater$.subscribe();\n }\n }\n\n public onplaying(event: Event) {\n event.stopPropagation();\n this.isPlaying = true;\n this.isLoading = false;\n }\n\n public onpause(event: Event) {\n event.stopPropagation();\n this.isPlaying = false;\n this.pause.emit();\n if (this._timerSubscription) {\n this._timerSubscription.unsubscribe();\n }\n }\n\n public onwaiting(event: Event) {\n event.stopPropagation();\n this.isLoading = true;\n }\n\n public onended(event: Event) {\n this.isPlaying = false;\n event.stopPropagation();\n if (this._timerSubscription) {\n this._timerSubscription.unsubscribe();\n this.progressBar.value = 100;\n }\n }\n\n public togglePlay() {\n this._renderer.setProperty(\n this.audioElement.nativeElement,\n 'playbackRate',\n 1,\n );\n this._isMouseDown = false;\n const now = new Date().getTime();\n const deltaTime = now - this._mouseDownTime;\n this._playBackTimerSubscription.unsubscribe();\n if (deltaTime > BMATAudioPlayerComponent.HOLD_TIME) {\n return;\n }\n\n if (this.audioElement && this.audioElement.nativeElement) {\n if (this.isPlaying) {\n this.audioElement.nativeElement.pause();\n } else {\n this.audioElement.nativeElement.play();\n }\n }\n }\n\n private calculateElapsed() {\n const nativeAudio = this.audioElement.nativeElement;\n if (this.progressBar) {\n const currentPosition = Math.min(\n 100,\n (100 * nativeAudio.currentTime) / nativeAudio.duration,\n );\n this.progressBar.value =\n !Number.isNaN(currentPosition) && currentPosition > 0\n ? currentPosition\n : 0;\n }\n if (this.mediaOutput) {\n this.mediaOutput.time = nativeAudio.currentTime;\n }\n }\n}\n","import { InjectionToken } from '@angular/core';\n\n/**\n * Injection token to provide the\n */\nexport const CONNECTED_PLAYER_CLOSE_REQUEST = new InjectionToken<() => void>(\n 'bmat.angular.media-players.connected-player-close-request',\n);\n","import { InjectionToken } from '@angular/core';\n\n/**\n * Injection token to provide the\n */\nexport const CONNECTED_PLAYER_SRC = new InjectionToken<string>(\n 'bmat.angular.media-players.connected-player-src',\n);\n","import { InjectionToken } from '@angular/core';\n\n/**\n * Injection token to provide the\n */\nexport const CONNECTED_PLAYER_VOLUME = new InjectionToken<number>(\n 'bmat.angular.media-players.connected-player-volume',\n);\n","import { DOCUMENT } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n HostBinding,\n HostListener,\n Inject,\n ViewChild,\n} from '@angular/core';\n\nimport { CONNECTED_PLAYER_CLOSE_REQUEST } from '../../tokens/connected-player-close-request';\nimport { CONNECTED_PLAYER_SRC } from '../../tokens/connected-player-src.token';\nimport { CONNECTED_PLAYER_VOLUME } from '../../tokens/connected-player-volume.token';\n\n@Component({\n selector: 'bm-connected-video-player',\n templateUrl: 'connected-video-player.component.html',\n styleUrls: ['connected-video-player.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\n/**\n * Connected video player, to be called using the remote service\n */\nexport class ConnectedVideoPlayerComponent {\n public autoplay = true;\n public isPlaying!: boolean;\n public src: string;\n public volume: number;\n\n @ViewChild('videoElement', { read: ElementRef, static: true })\n private _videoElement!: ElementRef<HTMLVideoElement>;\n\n @ViewChild('fullscreenWrapper', { read: ElementRef, static: true })\n private _fullscreenWrapper!: ElementRef<HTMLElement>;\n\n @HostBinding('class.focus-within')\n public get focusWithin() {\n return this._focusWithin;\n }\n\n private _focusWithin = false;\n\n private _closeRequest: () => void;\n\n constructor(\n @Inject(CONNECTED_PLAYER_SRC) src: string,\n // tslint:disable-next-line:no-any\n @Inject(CONNECTED_PLAYER_CLOSE_REQUEST) _closeRequest: any,\n // tslint:disable-next-line:no-any\n @Inject(DOCUMENT) private _document: any,\n @Inject(CONNECTED_PLAYER_VOLUME) volume: number,\n private _cdr: ChangeDetectorRef,\n ) {\n this.src = src;\n this._closeRequest = _closeRequest;\n this.volume = volume;\n }\n\n @HostListener('focusin')\n public onFocusin() {\n this._focusWithin = true;\n }\n @HostListener('focusout')\n public onFocusout() {\n this._focusWithin = false;\n }\n\n @HostListener('document:keydown', ['$event'])\n public onDocumentKeydown(e: KeyboardEvent) {\n if (e.key === 'Escape') {\n this._closeRequest();\n }\n }\n\n public close() {\n this._closeRequest();\n }\n\n public onMediaEnded() {\n this._closeRequest();\n }\n\n public checkAfterVideoElement() {\n this._cdr.markForCheck();\n }\n\n public onVideoPlay() {\n this.isPlaying = true;\n this._cdr.markForCheck();\n }\n\n public onVideoPause() {\n this.isPlaying = false;\n this._cdr.markForCheck();\n }\n\n public togglePlay() {\n if (this._videoElement) {\n if (this._videoElement.nativeElement.paused) {\n this._videoElement.nativeElement.play();\n } else {\n this._videoElement.nativeElement.pause();\n }\n }\n }\n\n public onSliderSeek($event: number) {\n if (this._videoElement) {\n this._videoElement.nativeElement.currentTime = $event;\n }\n }\n\n public toggleFullScreen() {\n if (\n this._fullscreenWrapper &&\n this._fullscreenWrapper.nativeElement.requestFullscreen\n ) {\n if (this._document.fullscreenElement) {\n this._document.exitFullscreen();\n } else {\n this._fullscreenWrapper.nativeElement\n .requestFullscreen()\n .catch(err => console.error(err));\n }\n }\n }\n\n public displayFullScreenBtn() {\n return (\n this._fullscreenWrapper &&\n this._fullscreenWrapper.nativeElement.requestFullscreen\n );\n }\n}\n","import { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal, PortalInjector } from '@angular/cdk/portal';\nimport { ElementRef, Injectable, Injector } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\nimport { ConnectedAudioPlayerComponent } from '../../components/connected-audio-player/connected-audio-player.component';\nimport { ConnectedVideoPlayerComponent } from '../../components/connected-video-player/connected-video-player.component';\nimport { CONNECTED_PLAYER_CLOSE_REQUEST } from '../../tokens/connected-player-close-request';\nimport { CONNECTED_PLAYER_SRC } from '../../tokens/connected-player-src.token';\nimport { CONNECTED_PLAYER_VOLUME } from '../../tokens/connected-player-volume.token';\n\nexport enum PlayerType {\n Audio,\n Video,\n}\n\nexport interface OpenPlayerOptions {\n playerType: PlayerType;\n volume: number;\n}\n\nconst defaultOptions = {\n playerType: PlayerType.Audio,\n volume: 1,\n};\n\nexport enum ConnectedPlayerEventTypes {\n OPEN = 'OPEN',\n CLOSE = 'CLOSE',\n}\n\nexport interface ConnectedPlayerEvent {\n kind: ConnectedPlayerEventTypes;\n source: ElementRef | HTMLElement | null;\n}\n\n@Injectable({\n providedIn: 'root',\n})\n/**\n * Remote to display always a single player connected\n * to another component. Used in tables.\n */\nexport class ConnectedMediaRemoteService {\n private _overlayRef!: OverlayRef;\n private _playerEventsSubject = new Subject<ConnectedPlayerEvent>();\n\n constructor(private _injector: Injector, private _overlay: Overlay) {}\n\n public getEvents() {\n return new Observable<ConnectedPlayerEvent>(observer => {\n const subs = this._playerEventsSubject.subscribe(observer);\n\n return () => {\n subs.unsubscribe();\n };\n });\n }\n\n public open(\n src: string,\n host: ElementRef | HTMLElement | null,\n options: Partial<OpenPlayerOptions> = {},\n ) {\n this.close();\n\n const actualOptions: OpenPlayerOptions = {\n ...defaultOptions,\n ...options,\n };\n\n if (host === null && actualOptions.playerType === PlayerType.Audio) {\n throw new TypeError('Audio players should be connected to a host.');\n }\n\n switch (actualOptions.playerType) {\n case PlayerType.Audio:\n this.setUpAudioPlayer(\n src,\n host as ElementRef | HTMLElement,\n actualOptions,\n );\n break;\n case PlayerType.Video:\n this.setUpVideoPlayer(src, actualOptions);\n break;\n default:\n throw new TypeError('Unknown PlayerType.');\n }\n\n this._playerEventsSubject.next({\n kind: ConnectedPlayerEventTypes.OPEN,\n source: host,\n });\n }\n\n public isOpen() {\n return this._overlayRef.hasAttached();\n }\n\n public close() {\n if (this._overlayRef) {\n this._overlayRef.dispose();\n\n this._playerEventsSubject.next({\n kind: ConnectedPlayerEventTypes.CLOSE,\n source: null,\n });\n }\n }\n\n private setUpAudioPlayer(\n src: string,\n host: ElementRef | HTMLElement,\n options: OpenPlayerOptions,\n ) {\n const domEle =\n host && (host as ElementRef<HTMLElement>).nativeElement\n ? (host as ElementRef<HTMLElement>).nativeElement\n : (host as HTMLElement);\n\n if (!domEle) {\n throw new TypeError('Invalid host element');\n }\n\n const providers = new WeakMap();\n providers.set(CONNECTED_PLAYER_SRC, src);\n providers.set(CONNECTED_PLAYER_VOLUME, options.volume);\n const portalInjector = new PortalInjector(this._injector, providers);\n\n const componentPortal = new ComponentPortal(\n ConnectedAudioPlayerComponent,\n null,\n portalInjector,\n );\n\n const positionStrategy = this._overlay\n .position()\n .flexibleConnectedTo(domEle)\n .withPositions([\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n },\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n },\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n },\n ]);\n\n const scrollStrategy = this._overlay.scrollStrategies.reposition();\n\n this._overlayRef = this._overlay.create({\n positionStrategy,\n scrollStrategy,\n });\n return this._overlayRef.attach(componentPortal);\n }\n\n private setUpVideoPlayer(src: string, options: OpenPlayerOptions) {\n const providers = new WeakMap();\n providers.set(CONNECTED_PLAYER_SRC, src);\n providers.set(CONNECTED_PLAYER_CLOSE_REQUEST, this.close.bind(this));\n providers.set(CONNECTED_PLAYER_VOLUME, options.volume);\n const portalInjector = new PortalInjector(this._injector, providers);\n\n const componentPortal = new ComponentPortal(\n ConnectedVideoPlayerComponent,\n null,\n portalInjector,\n );\n\n const positionStrategy = this._overlay\n .position()\n .global()\n .centerHorizontally()\n .centerVertically();\n\n const scrollStrategy = this._overlay.scrollStrategies.block();\n\n this._overlayRef = this._overlay.create({\n positionStrategy,\n scrollStrategy,\n hasBackdrop: true,\n });\n\n this._overlayRef.backdropClick().subscribe(() => this.close());\n\n return this._overlayRef.attach(componentPortal);\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n HostListener,\n Inject,\n ViewChild,\n} from '@angular/core';\n\nimport { ConnectedMediaRemoteService } from '../../services/connected-media-remote/connected-media-remote.service';\nimport { CONNECTED_PLAYER_SRC } from '../../tokens/connected-player-src.token';\nimport { CONNECTED_PLAYER_VOLUME } from '../../tokens/connected-player-volume.token';\n\n@Component({\n selector: 'bm-connected-audio-player',\n templateUrl: 'connected-audio-player.component.html',\n styleUrls: ['connected-audio-player.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\n/**\n * Connected audio player. Created by a ComponentPortal\n */\nexport class ConnectedAudioPlayerComponent {\n public src: string;\n public volume: number;\n\n public get duration() {\n if (this._audioElement && this._audioElement.nativeElement) {\n return this._audioElement.nativeElement.duration;\n }\n return 0;\n }\n\n public get currentTime() {\n if (this._audioElement && this._audioElement.nativeElement) {\n return this._audioElement.nativeElement.currentTime;\n }\n return 0;\n }\n\n @ViewChild('audioElement', { read: ElementRef, static: true })\n private _audioElement!: ElementRef<HTMLAudioElement>;\n\n constructor(\n @Inject(CONNECTED_PLAYER_SRC) src: string,\n @Inject(CONNECTED_PLAYER_VOLUME) volume: number,\n private _cdr: ChangeDetectorRef,\n private _elementRef: ElementRef,\n private _remote: ConnectedMediaRemoteService,\n ) {\n this.src = src;\n this.volume = volume;\n }\n\n @HostListener('document:click', ['$event'])\n public onDocumentClick(e: MouseEvent) {\n if (this._remote.isOpen() && !this._audioElement.nativeElement.paused) {\n let parent: HTMLElement = e.target as HTMLElement;\n while (\n parent &&\n parent.tagName !== 'BODY' &&\n parent !== this._elementRef.nativeElement\n ) {\n parent = parent.parentElement as HTMLElement;\n }\n if (parent !== this._elementRef.nativeElement) {\n this._remote.close();\n }\n }\n }\n\n @HostListener('document:keydown', ['$event'])\n public onDocumentKeydown(e: KeyboardEvent) {\n if (\n this._remote.isOpen() &&\n !this._audioElement.nativeElement.paused &&\n e.key === 'Escape'\n ) {\n this._remote.close();\n }\n }\n\n public onSliderSeek($event: number) {\n if (this._audioElement) {\n this._audioElement.nativeElement.currentTime = $event;\n }\n }\n\n public onTimeupdate() {\n this._cdr.markForCheck();\n }\n\n public onMediaEnded() {\n this._remote.close();\n }\n\n public close(e: Event) {\n e.preventDefault();\n this._remote.close();\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { ParseDurationPipe } from './format-duration.pipe';\n\n@NgModule({\n declarations: [ParseDurationPipe],\n exports: [ParseDurationPipe],\n})\n/**\n * Module with the duration pipe\n */\nexport class ParseDurationPipeModule {}\n","import { fromEvent, Observable } from 'rxjs';\nimport { map, takeUntil } from 'rxjs/operators';\n\n/**\n * Observable Drag. Return relative position without the first\n * container, or body, with position non static.\n */\nexport function dragObservable(\n mousedownEvent: MouseEvent,\n doc: Document = document,\n container: HTMLElement | null = null,\n): Observable<number> {\n if (!container) {\n container = mousedownEvent.target as HTMLElement;\n while (\n container.tagName !== 'BODY' &&\n getComputedStyle(container).getPropertyValue('position') !== 'static'\n ) {\n container = container.parentElement as HTMLElement;\n }\n }\n\n const { left, width } = container.getBoundingClientRect();\n const offsetX = mousedownEvent.offsetX;\n const mouseup = fromEvent<MouseEvent>(doc, 'mouseup');\n const mousemove = fromEvent<MouseEvent>(doc, 'mousemove');\n\n return mousemove.pipe(\n map(mousemoveEvent => {\n mousemoveEvent.preventDefault();\n return Math.min(\n 1,\n Math.max(0, (mousemoveEvent.clientX - offsetX - left) / width),\n );\n }),\n takeUntil(mouseup),\n );\n}\n","import { fromEvent, Observable } from 'rxjs';\nimport { map, startWith, takeUntil } from 'rxjs/operators';\n\n/**\n * Observable Drag. Return relative position without the first\n * container, or body, with position non static.\n */\nexport function mouseoverRelativeCoordinatesObservable(\n mouseenterEvent: MouseEvent,\n doc: Document = document,\n container: HTMLElement | null = null,\n): Observable<number> {\n mouseenterEvent.preventDefault();\n\n if (!container) {\n container = mouseenterEvent.target as HTMLElement;\n while (\n container.tagName !== 'BODY' &&\n getComputedStyle(container).getPropertyValue('position') !== 'static'\n ) {\n container = container.parentElement as HTMLElement;\n }\n }\n\n const { left, width } = container.getBoundingClientRect();\n const mouseleave = fromEvent<MouseEvent>(container, 'mouseleave');\n const mousemove = fromEvent<MouseEvent>(doc, 'mousemove');\n\n return mousemove.pipe(\n map(mousemoveEvent => {\n mousemoveEvent.preventDefault();\n return Math.min(1, Math.max(0, (mousemoveEvent.clientX - left) / width));\n }),\n takeUntil(mouseleave),\n startWith(\n Math.min(1, Math.max(0, (mouseenterEvent.clientX - left) / width)),\n ),\n );\n}\n","import { Directionality } from '@angular/cdk/bidi';\nimport {\n DOWN_ARROW,\n LEFT_ARROW,\n PAGE_DOWN,\n PAGE_UP,\n RIGHT_ARROW,\n UP_ARROW,\n} from '@angular/cdk/keycodes';\nimport { DOCUMENT } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n Inject,\n Input,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { debounceTime } from 'rxjs/operators';\n\nimport { dragObservable } from './drag-observable';\nimport { mouseoverRelativeCoordinatesObservable } from './mouseover-relative-coordinates-observable';\n\n@Component({\n selector: 'bm-media-progress-slider',\n templateUrl: 'media-progress-slider.component.html',\n styleUrls: ['media-progress-slider.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\n/**\n * Media progress slider\n */\nexport class MediaProgressSliderComponent {\n @HostBinding('attr.aria-valuemax')\n @Input()\n public duration!: number;\n\n @HostBinding('attr.aria-valuenow')\n @Input()\n public set value(v: number) {\n this._value = v;\n }\n\n public get value() {\n return this._value;\n }\n\n @HostBinding('attr.aria-valuemin')\n @Input()\n public valuemin = 0;\n\n @HostBinding('attr.tabindex')\n @Input()\n public tabindex = 0;\n\n @HostBinding('attr.role') public readonly role = 'slider';\n\n @Output() public seek = new EventEmitter<number>();\n\n public pointerTime!: number;\n\n @ViewChild('doneBar', { read: ElementRef, static: true })\n private _doneBar!: ElementRef<HTMLElement>;\n @ViewChild('previewBar', { read: ElementRef, static: false })\n private _previewBar!: ElementRef<HTMLElement>;\n\n private _isDragging = false;\n private _isOver = false;\n private _value!: number;\n\n constructor(\n public _elementRef: ElementRef<HTMLElement>,\n // tslint:disable-next-line:no-any\n @Inject(DOCUMENT) private _document: any,\n private _cdr: ChangeDetectorRef,\n private _dir: Directionality,\n ) {}\n\n @HostListener('mouseenter', ['$event'])\n public onMouseenter($event: MouseEvent) {\n this._isOver = true;\n\n mouseoverRelativeCoordinatesObservable(\n $event,\n this._document,\n this._elementRef.nativeElement,\n ).subscribe({\n next: val => {\n this.pointerTime = val * (this.duration || 0);\n const overTime = Math.max(\n 0,\n this.getRelativeLeft(this.pointerTime) -\n this.getRelativeLeft(this.value),\n );\n if (\n overTime > 0 &&\n this._previewBar &&\n this._previewBar.nativeElement\n ) {\n const relativeLeft = this.getRelativeLeft(this.value);\n this._previewBar.nativeElement.style.left = `${relativeLeft}px`;\n this._previewBar.nativeElement.style.width = `${overTime}px`;\n }\n this._cdr.markForCheck();\n },\n error: () => {\n this._isOver = false;\n },\n complete: () => {\n this._isOver = false;\n this._cdr.markForCheck();\n },\n });\n }\n\n @HostListener('click', ['$event'])\n public onClick(e: MouseEvent) {\n if (!this._isDragging) {\n e.preventDefault();\n const { offsetX } = e;\n const { width } = this._elementRef.nativeElement.getBoundingClientRect();\n const percent = offsetX / width;\n this.seek.emit(percent * (this.duration || 0));\n }\n }\n\n // tslint:disable-next-line:cyclomatic-complexity\n @HostListener('keydown', ['$event'])\n public onKeydown(e: KeyboardEvent) {\n let emitChanges = false;\n if (this.duration) {\n const bigStep = 0.1 * this.duration;\n\n switch (e.keyCode) {\n case DOWN_ARROW: {\n e.preventDefault();\n this._value = Math.max(0, this._value - 1);\n emitChanges = true;\n break;\n }\n case UP_ARROW: {\n e.preventDefault();\n this._value = Math.min(this.duration, this._value + 1);\n emitChanges = true;\n break;\n }\n case LEFT_ARROW: {\n e.preventDefault();\n this._value = Math.min(\n Math.max(0, this._value + (this._dir.value === 'ltr' ? -1 : 1)),\n this.duration,\n );\n emitChanges = true;\n break;\n }\n case RIGHT_ARROW: {\n e.preventDefault();\n this._value = Math.min(\n Math.max(0, this._value + (this._dir.value === 'ltr' ? 1 : -1)),\n this.duration,\n );\n emitChanges = true;\n break;\n }\n\n case PAGE_UP:\n e.preventDefault();\n this._value = Math.max(0, this._value + bigStep);\n emitChanges = true;\n break;\n case PAGE_DOWN:\n e.preventDefault();\n this._value = Math.max(0, this._value - bigStep);\n emitChanges = true;\n break;\n default:\n }\n }\n if (emitChanges) {\n this.seek.emit(this.value);\n }\n }\n\n public getRelativeLeft(value: number) {\n if (this._elementRef.nativeElement && value && this.duration) {\n const { width } = this._elementRef.nativeElement.getBoundingClientRect();\n const relative = value / (this.duration - this.valuemin);\n return relative * width;\n }\n return 0;\n }\n\n public showThumb() {\n return this._isDragging || this._isOver;\n }\n\n public showPreviewBar() {\n return this._isOver && !this._isDragging;\n }\n\n public onThumbMousedown($event: MouseEvent) {\n this._cdr.detach();\n this._isDragging = true;\n const dragObservable$ = dragObservable(\n $event,\n this._document,\n this._elementRef.nativeElement,\n );\n\n // The two observables with different throttles target components\n // that should update at different rates. The bounced targets the\n // the time tooltip, while the non bounced targets the dragged thumb\n // and bars.\n dragObservable$\n .pipe(debounceTime(15))\n .subscribe(() => this._cdr.detectChanges());\n\n dragObservable$.subscribe({\n next: val => {\n this._value = val * (this.duration || 0);\n const relativeLeft = this.getRelativeLeft(this.value);\n ($event.target as HTMLElement).style.left = `${relativeLeft}px`;\n if (this._doneBar && this._doneBar.nativeElement) {\n this._doneBar.nativeElement.style.width = `${relativeLeft}px`;\n }\n this.seek.emit(this.value);\n },\n error: () => {\n this._cdr.reattach();\n },\n complete: () => {\n this._cdr.reattach();\n setTimeout(() => {\n this._isDragging = false;\n }, 10);\n },\n });\n }\n}\n","import {\n FlexibleConnectedPositionStrategy,\n Overlay,\n OverlayRef,\n} from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { DOCUMENT } from '@angular/common';\nimport {\n Directive,\n ElementRef,\n Inject,\n Input,\n OnDestroy,\n Renderer2,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\n\nimport { mouseoverRelativeCoordinatesObservable } from './mouseover-relative-coordinates-observable';\n\nexport interface ProgressTooltipContext {\n value: number;\n}\n\n@Directive({\n selector: '[bmMediaProgressTooltip]',\n})\n/**\n * Directive to attach\n */\nexport class MediaProgressTooltipDirective implements OnDestroy {\n @Input()\n public set bmMediaProgressTooltip(v: ElementRef | HTMLElement) {\n if (this._teardownListener) {\n this._teardownListener();\n }\n\n if (v) {\n this._bmMediaProgressTooltip = v;\n this._hostDOMEle = (v as ElementRef).nativeElement\n ? (v as ElementRef).nativeElement\n : (v as HTMLElement);\n\n this._teardownListener = this._render.listen(\n this._hostDOMEle,\n 'mouseenter',\n this.onMouseenter.bind(this),\n );\n } else {\n this._hostDOMEle = null;\n }\n }\n public get bmMediaProgressTooltip() {\n return this._bmMediaProgressTooltip;\n }\n\n @Input() public value!: number;\n\n private _overlayRef!: OverlayRef | null;\n private _positionStategy!: FlexibleConnectedPositionStrategy | null;\n private _bmMediaProgressTooltip!: ElementRef | HTMLElement;\n private _templatePortal!: TemplatePortal<ProgressTooltipContext>;\n private _teardownListener!: () => void;\n private _hostDOMEle!: HTMLElement | null;\n\n constructor(\n private _templateRef: TemplateRef<ProgressTooltipContext>,\n private _viewContainerRef: ViewContainerRef,\n private _overlay: Overlay,\n // tslint:disable-next-line:no-any\n @Inject(DOCUMENT) private _document: any,\n private _render: Renderer2,\n ) {\n this._templatePortal = new TemplatePortal<ProgressTooltipContext>(\n this._templateRef,\n this._viewContainerRef,\n );\n }\n\n public ngOnDestroy() {\n this.tearDownPortals();\n if (this._teardownListener) {\n this._teardownListener();\n }\n }\n\n public onMouseenter($event: MouseEvent) {\n if (!this._hostDOMEle || this._templatePortal.isAttached) {\n return;\n }\n\n this.tearDownPortals();\n const { width } = this._hostDOMEle.getBoundingClientRect();\n\n this._positionStategy = this._overlay\n .position()\n .flexibleConnectedTo(this._hostDOMEle)\n .withPositions([\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n },\n ])\n .withDefaultOffsetY(-5);\n\n this._overlayRef = this._overlay.create({\n positionStrategy: this._positionStategy,\n });\n\n const { rootNodes } = this._overlayRef.attach(this._templatePortal);\n const getOffset = () => {\n if (rootNodes && rootNodes.length) {\n return (rootNodes[0] as HTMLElement).getBoundingClientRect().width / 2;\n }\n return 0;\n };\n\n mouseoverRelativeCoordinatesObservable($event, this._document).subscribe({\n next: val => {\n if (this._positionStategy) {\n this._positionStategy\n .withDefaultOffsetX(val * width - getOffset())\n .reapplyLastPosition();\n }\n },\n complete: () => {\n this.tearDownPortals();\n },\n });\n }\n\n private tearDownPortals() {\n if (this._templatePortal && this._templatePortal.isAttached) {\n this._templatePortal.detach();\n }\n\n if (this._overlayRef) {\n this._overlayRef.detach();\n this._overlayRef.dispose();\n }\n\n if (this._positionStategy) {\n this._positionStategy.dispose();\n }\n }\n}\n","import { BidiModule } from '@angular/cdk/bidi';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { ParseDurationPipeModule } from '../format-duration/format-duration.pipe.module';\nimport { MediaProgressSliderComponent } from './media-progress-slider.component';\nimport { MediaProgressTooltipDirective } from './media-progress-tooltip.directive';\n\n@NgModule({\n imports: [BidiModule, CommonModule, ParseDurationPipeModule],\n declarations: [MediaProgressSliderComponent, MediaProgressTooltipDirective],\n exports: [MediaProgressSliderComponent, MediaProgressTooltipDirective],\n})\n/**\n * Module with the duration pipe\n */\nexport class MediaProgressSliderComponentModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { ProgressBarComponent } from './progress-bar.component';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [ProgressBarComponent],\n exports: [ProgressBarComponent],\n})\n/**\n * Module with the duration pipe\n */\nexport class ProgressBarComponentModule {}\n","/**\n * BMAT MediaPlayers Module\n */\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { BMATAudioPlayerComponent } from './audio/bm-audio.component';\nimport { BMMediaOutputComponent } from './bm-media-output/bm-media-output.component';\nimport { ConnectedAudioPlayerComponent } from './components/connected-audio-player/connected-audio-player.component';\nimport { ConnectedVideoPlayerComponent } from './components/connected-video-player/connected-video-player.component';\nimport { ParseDurationPipeModule } from './format-duration/format-duration.pipe.module';\nimport { MediaProgressSliderComponentModule } from './media-progress-slider/media-progress-slider.component.module';\nimport { ProgressBarComponentModule } from './progress-bar/progress-bar.component.module';\nimport { ConnectedMediaRemoteService } from './services/connected-media-remote/connected-media-remote.service';\n\n@NgModule({\n imports: [\n CommonModule,\n OverlayModule,\n ParseDurationPipeModule,\n ProgressBarComponentModule,\n MediaProgressSliderComponentModule,\n ],\n declarations: [\n BMATAudioPlayerComponent,\n BMMediaOutputComponent,\n ConnectedAudioPlayerComponent,\n ConnectedVideoPlayerComponent,\n ],\n exports: [\n BMATAudioPlayerComponent,\n BMMediaOutputComponent,\n ConnectedAudioPlayerComponent,\n ConnectedVideoPlayerComponent,\n ParseDurationPipeModule,\n ProgressBarComponentModule,\n MediaProgressSliderComponentModule,\n ],\n entryComponents: [\n ConnectedAudioPlayerComponent,\n ConnectedVideoPlayerComponent,\n ],\n})\nexport class BMATMediaPlayersModule {\n // tslint:disable-next-line:function-name\n public static forRoot(): ModuleWithProviders {\n return {\n ngModule: BMATMediaPlayersModule,\n providers: [ConnectedMediaRemoteService],\n };\n }\n}\n"],"names":[],"mappings":"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"}
\No newline at end of file