{"version":3,"file":"sixbell-telco-sdk-components-audio-player.mjs","sources":["../../../projects/sdk/components/audio-player/services/audio.service.ts","../../../projects/sdk/components/audio-player/button-play/button-play.component.ts","../../../projects/sdk/components/audio-player/button-play/button-play.component.html","../../../projects/sdk/components/audio-player/audio-timeline/audio-timeline.component.ts","../../../projects/sdk/components/audio-player/audio-timeline/audio-timeline.component.html","../../../projects/sdk/components/audio-player/track-info/track-info.component.ts","../../../projects/sdk/components/audio-player/track-info/track-info.component.html","../../../projects/sdk/components/audio-player/volume-control/volume-control.component.ts","../../../projects/sdk/components/audio-player/volume-control/volume-control.component.html","../../../projects/sdk/components/audio-player/src/audio-player.component.ts","../../../projects/sdk/components/audio-player/src/audio-player.component.html","../../../projects/sdk/components/audio-player/sixbell-telco-sdk-components-audio-player.ts"],"sourcesContent":["// audio-player.service.ts\nimport { HttpClient } from '@angular/common/http';\nimport { computed, inject, Injectable, signal } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport { Track } from '../src/audio-player.component';\n\n@Injectable({ providedIn: 'root' })\nexport class AudioPlayerService {\n\tprivate audio = new Audio();\n\tprivate readonly http = inject(HttpClient);\n\tprivate readonly objectUrls = new Map<string, string>();\n\n\t// State signals\n\tprivate readonly _tracks = signal<Track[]>([]);\n\tprivate readonly _currentTrackIndex = signal<number>(-1);\n\tprivate readonly _isPlaying = signal(false);\n\tprivate readonly _duration = signal(0);\n\tprivate readonly _currentTime = signal(0);\n\tprivate readonly _volume = signal(1);\n\tprivate readonly _isMuted = signal(false);\n\tprivate readonly _lastVolume = signal(1);\n\tprivate readonly _isBuffering = signal(false);\n\tprivate readonly _isInitializing = signal(false);\n\tprivate readonly _autoPlayNext = signal(false);\n\tprivate readonly _error = signal<ErrorEvent | null>(null);\n\n\t// Readonly signals\n\tpublic tracks = this._tracks.asReadonly();\n\tpublic currentTrackIndex = this._currentTrackIndex.asReadonly();\n\tpublic isPlaying = this._isPlaying.asReadonly();\n\tpublic duration = this._duration.asReadonly();\n\tpublic currentTime = this._currentTime.asReadonly();\n\tpublic volume = this._volume.asReadonly();\n\tpublic isMuted = this._isMuted.asReadonly();\n\tpublic isBuffering = this._isBuffering.asReadonly();\n\tpublic isInitializing = this._isInitializing.asReadonly();\n\tpublic currentTrack = computed(() => this.tracks()[this.currentTrackIndex()] || undefined);\n\tpublic autoPlayNext = this._autoPlayNext.asReadonly();\n\tpublic error = this._error.asReadonly();\n\n\tconstructor() {\n\t\tthis.setupAudioListeners();\n\t\tthis.restoreVolumeSettings();\n\t}\n\n\tprivate setupAudioListeners() {\n\t\tthis.audio.addEventListener('loadedmetadata', () => this.updateDuration());\n\t\tthis.audio.addEventListener('timeupdate', () => this.updateTime());\n\t\tthis.audio.addEventListener('playing', () => this.setPlaying(true));\n\t\tthis.audio.addEventListener('pause', () => this.setPlaying(false));\n\t\tthis.audio.addEventListener('ended', () => this.handleEnded());\n\t\tthis.audio.addEventListener('waiting', () => this._isBuffering.set(true));\n\t\tthis.audio.addEventListener('error', (e) => {\n\t\t\tthis._error.set(e);\n\t\t\tconsole.error('Audio error:', e);\n\t\t});\n\t}\n\n\tprivate async getAuthenticatedAudioUrl(track: Track): Promise<string> {\n\t\tif (!this.objectUrls.has(track.url)) {\n\t\t\tconst blob = await firstValueFrom(\n\t\t\t\tthis.http.get(track.url, {\n\t\t\t\t\tresponseType: 'blob',\n\t\t\t\t\theaders: { Accept: 'audio/mpeg' },\n\t\t\t\t}),\n\t\t\t);\n\t\t\tthis.objectUrls.set(track.url, URL.createObjectURL(blob));\n\t\t}\n\t\treturn this.objectUrls.get(track.url)!;\n\t}\n\n\tpublic async playTrack(index: number) {\n\t\tif (index < 0 || index >= this.tracks().length) return;\n\n\t\tthis._isInitializing.set(true);\n\t\tthis._currentTrackIndex.set(index);\n\t\tconst track = this.tracks()[index];\n\n\t\t// Get authenticated URL\n\t\tconst authenticatedUrl = await this.getAuthenticatedAudioUrl(track);\n\n\t\t// Set audio source\n\t\tthis.audio.src = authenticatedUrl;\n\t\tthis.audio.load();\n\n\t\ttry {\n\t\t\t// Wait for audio to be ready\n\t\t\tawait new Promise<void>((resolve, reject) => {\n\t\t\t\tthis.audio.addEventListener('canplay', () => resolve(), { once: true });\n\t\t\t\tthis.audio.addEventListener('error', () => reject(new Error('Failed to load audio')), { once: true });\n\t\t\t});\n\n\t\t\tawait this.audio.play();\n\t\t} catch (error) {\n\t\t\tconsole.error('Error playing track:', error);\n\t\t\tthis._error.set(error as ErrorEvent);\n\t\t\tthis._isPlaying.set(false);\n\t\t} finally {\n\t\t\tthis._isInitializing.set(false);\n\t\t}\n\t}\n\n\tpublic init() {\n\t\tthis.audio = new Audio();\n\t\tthis.setupAudioListeners();\n\t\tthis.restoreVolumeSettings();\n\t}\n\n\tpublic cleanup() {\n\t\tthis.audio.pause();\n\t\tthis.audio.src = '';\n\t\tfor (const url of this.objectUrls.values()) {\n\t\t\tURL.revokeObjectURL(url);\n\t\t}\n\t\tthis.objectUrls.clear();\n\n\t\t// reset signals\n\t\tthis._tracks.set([]);\n\t\tthis._currentTrackIndex.set(-1);\n\t\tthis._isPlaying.set(false);\n\t\tthis._duration.set(0);\n\t\tthis._currentTime.set(0);\n\t\tthis._volume.set(1);\n\t\tthis._isMuted.set(false);\n\t\tthis._lastVolume.set(1);\n\t\tthis._isBuffering.set(false);\n\t\tthis._isInitializing.set(false);\n\t\tthis._autoPlayNext.set(false);\n\t\tthis._error.set(null);\n\t}\n\n\tpublic async togglePlay() {\n\t\tif (!this.checkIfTrackIsLoaded()) return;\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-unused-expressions\n\t\tthis.audio.paused ? await this.audio.play() : this.audio.pause();\n\t}\n\n\tpublic async previous() {\n\t\tthis.clearCurrentTime();\n\n\t\tconst totalTracks = this.tracks().length;\n\t\tif (totalTracks === 0) return;\n\n\t\tconst newIndex = (this.currentTrackIndex() - 1 + totalTracks) % totalTracks;\n\t\tawait this.playTrack(newIndex);\n\t}\n\n\tpublic async next() {\n\t\tthis.clearCurrentTime();\n\n\t\tconst totalTracks = this.tracks().length;\n\t\tif (totalTracks === 0) return;\n\n\t\tconst newIndex = (this.currentTrackIndex() + 1) % totalTracks;\n\t\tawait this.playTrack(newIndex);\n\t}\n\n\tpublic setTracks(tracks: Track[]) {\n\t\tthis._tracks.set(tracks);\n\t}\n\n\tpublic setCurrentTrackIndex(index: number) {\n\t\tthis._currentTrackIndex.set(index);\n\t}\n\n\tprivate setPlaying(playing: boolean) {\n\t\tthis._isPlaying.set(playing);\n\t\tthis._isBuffering.set(false);\n\t}\n\n\tpublic setAutoPlayNext(autoPlayNext: boolean) {\n\t\tthis._autoPlayNext.set(autoPlayNext);\n\t}\n\n\tpublic setVolume(volume: number) {\n\t\tthis._volume.set(volume);\n\t\tthis.audio.volume = volume;\n\t\tif (volume > 0) this._lastVolume.set(volume);\n\n\t\tlocalStorage.setItem('volume', JSON.stringify(this.volume()));\n\t}\n\n\tpublic setMuted(muted: boolean) {\n\t\tthis._isMuted.set(muted);\n\t\tif (muted) {\n\t\t\tthis._lastVolume.set(this.volume());\n\t\t\tthis.setVolume(0);\n\t\t} else {\n\t\t\tthis.setVolume(this._lastVolume());\n\t\t}\n\n\t\tlocalStorage.setItem('isMuted', JSON.stringify(this.isMuted()));\n\t}\n\n\tpublic seekTo(time: number) {\n\t\tthis.audio.currentTime = time;\n\t}\n\n\tpublic isPlayingATrack() {\n\t\treturn this.audio.src !== '' && !this.audio.paused;\n\t}\n\n\t// Private handlers\n\tprivate updateDuration() {\n\t\tthis._duration.set(this.audio.duration);\n\t\tthis._isInitializing.set(false);\n\t}\n\n\tprivate updateTime() {\n\t\tthis._currentTime.set(this.audio.currentTime);\n\t}\n\n\tprivate handleEnded() {\n\t\tthis._isPlaying.set(false);\n\t\tif (this._autoPlayNext()) this.next();\n\t}\n\n\tprivate clearCurrentTime() {\n\t\tthis.audio.currentTime = 0;\n\t\tthis._currentTime.set(0);\n\t}\n\n\tprivate restoreVolumeSettings() {\n\t\tconst volume = localStorage.getItem('volume');\n\t\tconst isMuted = localStorage.getItem('isMuted');\n\n\t\tif (volume) this.setVolume(JSON.parse(volume));\n\t\tif (isMuted) this.setMuted(JSON.parse(isMuted));\n\t}\n\n\tprivate checkIfTrackIsLoaded() {\n\t\treturn this.audio.src !== '';\n\t}\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, input, output, signal } from '@angular/core';\nimport { matPause, matPlayArrow } from '@ng-icons/material-icons/baseline';\nimport { ButtonComponent, ButtonSizeProps, ButtonVariantProps } from '@sixbell-telco/sdk/components/button';\nimport { IconComponent } from '@sixbell-telco/sdk/components/icon';\nimport { heroMusicalNoteMini } from '@sixbell-telco/sdk/components/icon/heroicons/mini';\nimport { cn } from '@sixbell-telco/sdk/utils/cn';\nimport { AudioPlayerService } from '../services/audio.service';\n\n@Component({\n\tselector: 'st-button-play',\n\timports: [IconComponent, CommonModule, ButtonComponent],\n\ttemplateUrl: './button-play.component.html',\n\tstyles: '',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ButtonPlayComponent {\n\taudioService = inject(AudioPlayerService);\n\n\tvariant = input<ButtonVariantProps>();\n\tghost = input<boolean>(false);\n\toutline = input<boolean>(false);\n\tcircle = input<boolean>(false);\n\tsquare = input<boolean>(false);\n\tglass = input<boolean>(false);\n\tsize = input<ButtonSizeProps>();\n\tshadow = input<boolean>(false);\n\tasButton = input<boolean>(false);\n\n\tisHovered = signal<boolean>(false);\n\ttrackIndex = input.required<number>();\n\n\ttogglePlay = output();\n\n\ticonMusicNote = heroMusicalNoteMini;\n\ticonPlay = matPlayArrow;\n\ticonPause = matPause;\n\n\twaveBars = [\n\t\t{ delay: '0.4s', class: 'h-1/5 animate-wave w-[2px] rounded-full bg-current' },\n\t\t{ delay: '0.3s', class: 'h-3/5 animate-wave w-[2px] rounded-full bg-current' },\n\t\t{ delay: '0.2s', class: 'h-full animate-wave w-[2px] rounded-full bg-current' },\n\t\t{ delay: '0.3s', class: 'h-3/5 animate-wave w-[2px] rounded-full bg-current' },\n\t\t{ delay: '0.4s', class: 'h-1/5 animate-wave w-[2px] rounded-full bg-current' },\n\t];\n\n\tbuttonClass = computed(() => {\n\t\treturn cn(\n\t\t\t'absolute top-1/2 left-1/2 inline-flex -translate-x-1/2 -translate-y-1/2 items-center justify-center align-top opacity-0 transition-opacity duration-200',\n\t\t\t{\n\t\t\t\t'opacity-100': (this.audioService.isPlaying() && this.trackIndex() === this.audioService.currentTrackIndex()) || this.isHovered(),\n\t\t\t},\n\t\t);\n\t});\n\n\twaveBarsClass = computed(() => {\n\t\treturn cn('absolute top-1/2 left-1/2 h-6 w-6 -translate-x-1/2 -translate-y-1/2 opacity-0 transition-opacity duration-200', {\n\t\t\t'opacity-100': this.audioService.isPlaying() && this.trackIndex() === this.audioService.currentTrackIndex() && !this.isHovered(),\n\t\t});\n\t});\n\n\ticonClass = computed(() => {\n\t\treturn cn(\n\t\t\t'absolute top-1/2 left-1/2 inline-flex -translate-x-1/2 -translate-y-1/2 items-center justify-center align-top text-lg opacity-0 transition-opacity duration-200',\n\t\t\t{\n\t\t\t\t'opacity-100': !this.audioService.isPlaying() || this.trackIndex() !== this.audioService.currentTrackIndex() || this.isHovered(),\n\t\t\t},\n\t\t);\n\t});\n\n\ticon = computed(() => {\n\t\treturn this.audioService.isPlaying() && this.trackIndex() === this.audioService.currentTrackIndex() ? this.iconPause : this.iconPlay;\n\t});\n\n\thandleHover(isHovered: boolean) {\n\t\tthis.isHovered.set(isHovered);\n\t}\n\n\tasync handleTogglePlay() {\n\t\tif (this.trackIndex() === this.audioService.currentTrackIndex()) {\n\t\t\tawait this.audioService.togglePlay();\n\t\t} else {\n\t\t\tawait this.audioService.playTrack(this.trackIndex());\n\t\t}\n\t\tthis.togglePlay.emit();\n\t}\n}\n","@let waveBarsVar = waveBarsClass();\n@let iconClassVar = iconClass();\n@let iconVar = icon();\n\n@if (!asButton()) {\n\t<div\n\t\tclass=\"from-primary to-primary-gradient relative grid h-10 min-h-10 w-10 min-w-10 place-content-center rounded-sm bg-linear-to-br text-lg text-white\"\n\t\t(mouseenter)=\"handleHover(true)\"\n\t\t(mouseleave)=\"handleHover(false)\"\n\t>\n\t\t<st-icon [icon]=\"iconMusicNote\"></st-icon>\n\n\t\t<div [class]=\"buttonClass()\">\n\t\t\t<st-button [circle]=\"true\" size=\"sm\" [shadow]=\"true\" variant=\"secondary\" (click)=\"handleTogglePlay()\">\n\t\t\t\t<div class=\"relative h-full w-full\">\n\t\t\t\t\t<div [class]=\"waveBarsVar\">\n\t\t\t\t\t\t<div class=\"flex h-full w-full items-center justify-between\">\n\t\t\t\t\t\t\t@for (bar of waveBars; track $index) {\n\t\t\t\t\t\t\t\t<div [class]=\"bar.class\" [style.--i]=\"bar.delay\"></div>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div [class]=\"iconClassVar\">\n\t\t\t\t\t\t<st-icon [icon]=\"iconVar\"></st-icon>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</st-button>\n\t\t</div>\n\t</div>\n} @else {\n\t<st-button\n\t\t[variant]=\"variant()\"\n\t\t[ghost]=\"ghost()\"\n\t\t[outline]=\"outline()\"\n\t\t[circle]=\"circle()\"\n\t\t[square]=\"square()\"\n\t\t[glass]=\"glass()\"\n\t\t[size]=\"size()\"\n\t\t[shadow]=\"shadow()\"\n\t\t(click)=\"handleTogglePlay()\"\n\t\t(mouseenter)=\"handleHover(true)\"\n\t\t(mouseleave)=\"handleHover(false)\"\n\t>\n\t\t<div class=\"relative h-full w-full\">\n\t\t\t<div [class]=\"waveBarsVar\">\n\t\t\t\t<div class=\"flex h-full w-full items-center justify-between\">\n\t\t\t\t\t@for (bar of waveBars; track $index) {\n\t\t\t\t\t\t<div [class]=\"bar.class\" [style.--i]=\"bar.delay\"></div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div [class]=\"iconClassVar\">\n\t\t\t\t<st-icon [icon]=\"iconVar\"></st-icon>\n\t\t\t</div>\n\t\t</div>\n\t</st-button>\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, ElementRef, inject, input, output, signal, viewChild } from '@angular/core';\nimport { TextDirective } from '@sixbell-telco/sdk/directives/text';\nimport { cn } from '@sixbell-telco/sdk/utils/cn';\nimport { TimePipe } from '@sixbell-telco/sdk/utils/pipes/time';\nimport { AudioPlayerService } from '../services/audio.service';\n\n@Component({\n\tselector: 'st-timeline',\n\timports: [CommonModule, TimePipe, TextDirective],\n\ttemplateUrl: './audio-timeline.component.html',\n\tstyles: '',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\thost: {\n\t\t'(document:mousemove)': 'onDrag($event)',\n\t\t'(document:touchmove)': 'onDrag($event)',\n\t\t'(document:mouseup)': 'stopDrag()',\n\t\t'(document:touchend)': 'stopDrag()',\n\t},\n})\nexport class AudioTimelineComponent {\n\ttimeline = viewChild<ElementRef<HTMLElement>>('timeline');\n\n\t/**\n\t * Stop event propagation for activation events\n\t * @defaultValue false\n\t */\n\tstopPropagation = input<boolean>(false);\n\n\t/**\n\t * Event emitted on click\n\t */\n\tclicked = output<MouseEvent>();\n\n\t/**\n\t * Event emitted on pointer down\n\t */\n\tpointerDown = output<PointerEvent>();\n\n\t/**\n\t * Event emitted on activation (click or pointer down)\n\t */\n\ttriggered = output<void>();\n\n\taudioService = inject(AudioPlayerService);\n\tisDragging = signal(false);\n\tisHovered = signal(false);\n\n\ttimelineClass = computed(() =>\n\t\tcn('bg-neutral relative h-1 w-full cursor-pointer rounded-full', { 'h-[6px]': this.isHovered() || this.isDragging() }),\n\t);\n\n\ttimelineCircleClass = computed(() =>\n\t\tcn(\n\t\t\t'bg-tertiary shadow-main absolute top-1/2 h-3 w-3 -translate-y-1/2 transform cursor-grab rounded-full transition-opacity duration-200',\n\t\t\tthis.isHovered() || this.isDragging() ? 'opacity-100' : 'opacity-0',\n\t\t),\n\t);\n\n\t// Handle timeline hover\n\thandleTimelineHover(isHovered: boolean) {\n\t\tthis.isHovered.set(isHovered);\n\t}\n\n\t// Start dragging\n\tstartDrag(event: MouseEvent | TouchEvent) {\n\t\tevent.preventDefault(); // Prevent default behavior\n\t\tif (this.stopPropagation()) {\n\t\t\tevent.stopPropagation(); // Stop event propagation\n\t\t}\n\t\tthis.isDragging.set(true);\n\t\tthis.updateProgress(event);\n\t}\n\n\t// Handle dragging\n\tonDrag(event: MouseEvent | TouchEvent) {\n\t\tif (this.isDragging()) {\n\t\t\tthis.updateProgress(event);\n\t\t}\n\t}\n\n\t// Stop dragging\n\tstopDrag() {\n\t\tthis.isDragging.set(false);\n\t}\n\n\t// Update progress based on mouse/touch position\n\tupdateProgress(event: MouseEvent | TouchEvent) {\n\t\tconst timelineRect = this.timeline()?.nativeElement.getBoundingClientRect();\n\t\tif (!timelineRect) return;\n\n\t\tconst clientX = this.getClientX(event);\n\t\tconst newProgress = Math.max(0, Math.min(1, (clientX - timelineRect.left) / timelineRect.width));\n\n\t\tthis.audioService.seekTo(newProgress * this.audioService.duration());\n\t}\n\n\tprivate getClientX(event: MouseEvent | TouchEvent): number {\n\t\treturn event instanceof MouseEvent ? event.clientX : event.touches[0].clientX;\n\t}\n\n\tseek(event: MouseEvent) {\n\t\tif (!this.isDragging()) {\n\t\t\tthis.updateProgress(event);\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t * Handle pointer down activation\n\t */\n\thandlePointerDown(event: PointerEvent) {\n\t\tif (this.stopPropagation()) {\n\t\t\tevent.stopPropagation();\n\t\t}\n\t\tthis.pointerDown.emit(event);\n\t\tthis.triggered.emit();\n\t}\n\n\t/**\n\t * @internal\n\t * Handle click activation\n\t */\n\thandleClick(event: MouseEvent) {\n\t\tif (this.stopPropagation()) {\n\t\t\tevent.stopPropagation();\n\t\t}\n\t\tthis.clicked.emit(event);\n\t\tthis.triggered.emit();\n\t\tthis.seek(event);\n\t}\n}\n","<!-- eslint-disable @angular-eslint/template/interactive-supports-focus -->\n<!-- eslint-disable @angular-eslint/template/click-events-have-key-events -->\n\n<!-- Progress Bar -->\n<div class=\"grid w-full grid-cols-[1fr_5fr_1fr] items-center gap-4\">\n\t<!-- Current Time Display -->\n\t<div class=\"text-tertiary inline-flex min-h-5 items-center justify-end align-top select-none\">\n\t\t@if (!audioService.isInitializing()) {\n\t\t\t@if (audioService.isBuffering()) {\n\t\t\t\t<span class=\"loading loading-ring loading-xs\"></span>\n\t\t\t} @else {\n\t\t\t\t<span stText=\"10\">{{ audioService.currentTime() | time }}</span>\n\t\t\t}\n\t\t}\n\t</div>\n\n\t<div\n\t\t[class]=\"timelineClass()\"\n\t\t(click)=\"handleClick($event)\"\n\t\t#timeline\n\t\t(mouseenter)=\"handleTimelineHover(true)\"\n\t\t(mouseleave)=\"handleTimelineHover(false)\"\n\t>\n\t\t<!-- Progress Bar Background -->\n\t\t<div class=\"bg-primary absolute h-full rounded-full\" [style.width]=\"(audioService.currentTime() / audioService.duration()) * 100 + '%'\"></div>\n\n\t\t<!-- Draggable Circle -->\n\t\t<div\n\t\t\t[style.left]=\"\n\t\t\t\t'calc(' +\n\t\t\t\t(audioService.currentTime() / audioService.duration()) * 100 +\n\t\t\t\t'% - ' +\n\t\t\t\t(audioService.currentTime() / audioService.duration() === 1 ? '6px' : '3px') +\n\t\t\t\t')'\n\t\t\t\"\n\t\t\t[class]=\"timelineCircleClass()\"\n\t\t\t#circle\n\t\t\t(pointerdown)=\"handlePointerDown($event); startDrag($event)\"\n\t\t></div>\n\t</div>\n\n\t<!-- Total Time Display -->\n\t<div class=\"text-tertiary inline-flex min-h-5 items-center justify-start align-top select-none\">\n\t\t@if (audioService.isInitializing()) {\n\t\t\t<span class=\"loading loading-ring loading-xs\"></span>\n\t\t} @else {\n\t\t\t<span stText=\"10\">{{ audioService.duration() | time }}</span>\n\t\t}\n\t</div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { IconComponent } from '@sixbell-telco/sdk/components/icon';\nimport { heroMusicalNoteMini } from '@sixbell-telco/sdk/components/icon/heroicons/mini';\nimport { TextDirective } from '@sixbell-telco/sdk/directives/text';\nimport { Track } from '../src/audio-player.component';\n\n@Component({\n\tselector: 'st-track-info',\n\timports: [IconComponent, CommonModule, TextDirective, TranslatePipe],\n\ttemplateUrl: './track-info.component.html',\n\tstyles: '',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TrackInfoComponent {\n\tcurrentTrack = input<Track | undefined>();\n\n\ticonMusicNote = heroMusicalNoteMini;\n}\n","<div class=\"relative flex max-w-80 items-center gap-4 overflow-x-hidden whitespace-nowrap\">\n\t<div class=\"flex items-center gap-3\">\n\t\t<!-- Album/Track Icon -->\n\t\t<div class=\"from-primary to-primary-gradient grid h-12 min-h-12 w-12 min-w-12 place-content-center rounded-sm bg-linear-to-br text-white\">\n\t\t\t<st-icon [icon]=\"iconMusicNote\" size=\"md\"></st-icon>\n\t\t</div>\n\n\t\t<!-- Track Info -->\n\t\t@let currentTrackVar = this.currentTrack();\n\t\t<div class=\"min-w-0 flex-1\">\n\t\t\t<p stText=\"7\" stTextWeight=\"medium\" stTextColor=\"base\">\n\t\t\t\t{{ currentTrackVar?.title ?? 'sdk.audioPlayer.trackInfo.title' | translate }}\n\t\t\t</p>\n\t\t\t<p stText=\"8\" stTextColor=\"base\">\n\t\t\t\t{{ currentTrackVar?.description ?? 'sdk.audioPlayer.trackInfo.description' | translate }}\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t<div class=\"from-base-200 pointer-events-none absolute inset-y-0 right-0 w-12 bg-linear-to-l to-transparent\"></div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, ElementRef, inject, input, output, signal, viewChild } from '@angular/core';\nimport { matVolumeDownOutline, matVolumeMuteOutline, matVolumeUpOutline } from '@ng-icons/material-icons/outline';\nimport { ButtonComponent } from '@sixbell-telco/sdk/components/button';\nimport { IconComponent } from '@sixbell-telco/sdk/components/icon';\nimport { cn } from '@sixbell-telco/sdk/utils/cn';\nimport { AudioPlayerService } from '../services/audio.service';\n\n@Component({\n\tselector: 'st-volume-control',\n\timports: [IconComponent, CommonModule, ButtonComponent],\n\ttemplateUrl: './volume-control.component.html',\n\tstyles: '',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\thost: {\n\t\t'(document:mousemove)': 'onVolumeDrag($event)',\n\t\t'(document:touchmove)': 'onVolumeDrag($event)',\n\t\t'(document:mouseup)': 'stopVolumeDrag()',\n\t\t'(document:touchend)': 'stopVolumeDrag()',\n\t},\n})\nexport class VolumeControlComponent {\n\tvolumeTimeline = viewChild<ElementRef<HTMLAudioElement>>('volumeTimeline');\n\taudioService = inject(AudioPlayerService);\n\n\t/**\n\t * Stop event propagation for activation events\n\t * @defaultValue false\n\t */\n\tstopPropagation = input<boolean>(false);\n\n\t/**\n\t * Event emitted on click\n\t */\n\tclicked = output<MouseEvent>();\n\n\t/**\n\t * Event emitted on pointer down\n\t */\n\tpointerDown = output<PointerEvent>();\n\n\t/**\n\t * Event emitted on activation (click or pointer down)\n\t */\n\ttriggered = output<void>();\n\n\tisVolumeDragging = signal(false);\n\tisVolumeHovered = signal(false);\n\n\ticonVolumeUp = matVolumeUpOutline;\n\ticonVolumeDown = matVolumeDownOutline;\n\ticonVolumeMute = matVolumeMuteOutline;\n\n\tvolumeTimelineClass = computed(() => {\n\t\treturn cn('bg-neutral relative h-1 w-20 cursor-pointer rounded-full', {\n\t\t\t'h-[6px]': this.isVolumeHovered() || this.isVolumeDragging(),\n\t\t});\n\t});\n\n\tvolumeTimelineCircleClass = computed(() => {\n\t\treturn cn(\n\t\t\t'bg-tertiary shadow-main absolute top-1/2 h-3 w-3 -translate-y-1/2 transform cursor-grab rounded-full transition-opacity duration-200',\n\t\t\tthis.isVolumeHovered() || this.isVolumeDragging() ? 'opacity-100' : 'opacity-0',\n\t\t);\n\t});\n\n\t// Handle volume hover\n\thandleVolumeHover(isHovered: boolean) {\n\t\tthis.isVolumeHovered.set(isHovered);\n\t}\n\n\t// Start volume drag\n\tstartVolumeDrag(event: MouseEvent | TouchEvent) {\n\t\tevent.preventDefault(); // Prevent default behavior\n\t\tif (this.stopPropagation()) {\n\t\t\tevent.stopPropagation(); // Prevent event propagation\n\t\t}\n\t\tthis.isVolumeDragging.set(true);\n\t\tthis.updateVolume(event);\n\t}\n\n\t// Handle volume drag\n\tonVolumeDrag(event: MouseEvent | TouchEvent) {\n\t\tif (this.isVolumeDragging()) {\n\t\t\tthis.updateVolume(event);\n\t\t}\n\t}\n\n\t// Stop volume drag\n\tstopVolumeDrag() {\n\t\tthis.isVolumeDragging.set(false);\n\t}\n\n\tprivate getClientX(event: MouseEvent | TouchEvent): number {\n\t\treturn event instanceof MouseEvent ? event.clientX : event.touches[0].clientX;\n\t}\n\n\tupdateVolume(event: MouseEvent | TouchEvent) {\n\t\tconst volumeTimelineRect = this.volumeTimeline()?.nativeElement.getBoundingClientRect();\n\t\tif (!volumeTimelineRect) return;\n\n\t\tconst clientX = this.getClientX(event);\n\t\tconst newVolume = Math.max(0, Math.min(1, (clientX - volumeTimelineRect.left) / volumeTimelineRect.width));\n\n\t\tthis.audioService.setVolume(newVolume);\n\t}\n\n\t// Seek volume on click\n\tseekVolume(event: MouseEvent) {\n\t\tif (!this.isVolumeDragging()) {\n\t\t\tthis.updateVolume(event);\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t * Handle pointer down activation\n\t */\n\thandlePointerDown(event: PointerEvent) {\n\t\tif (this.stopPropagation()) {\n\t\t\tevent.stopPropagation();\n\t\t}\n\t\tthis.pointerDown.emit(event);\n\t\tthis.triggered.emit();\n\t}\n\n\t/**\n\t * @internal\n\t * Handle click activation\n\t */\n\thandleClick(event: MouseEvent) {\n\t\tif (this.stopPropagation()) {\n\t\t\tevent.stopPropagation();\n\t\t}\n\t\tthis.clicked.emit(event);\n\t\tthis.triggered.emit();\n\t\tthis.seekVolume(event);\n\t}\n\n\ttoggleMute() {\n\t\tthis.audioService.setMuted(!this.audioService.isMuted());\n\t}\n}\n","<!-- eslint-disable @angular-eslint/template/interactive-supports-focus -->\n<!-- eslint-disable @angular-eslint/template/click-events-have-key-events -->\n\n<!-- Volume Control -->\n<div class=\"flex items-center justify-end gap-2\">\n\t<!-- Mute/Unmute Button -->\n\t<st-button [ghost]=\"true\" size=\"sm\" [circle]=\"true\" (click)=\"toggleMute()\">\n\t\t@if (audioService.volume() === 0) {\n\t\t\t<st-icon [icon]=\"iconVolumeMute\" size=\"sm\"></st-icon>\n\t\t} @else if (audioService.volume() > 0.5) {\n\t\t\t<st-icon [icon]=\"iconVolumeUp\" size=\"sm\"></st-icon>\n\t\t} @else {\n\t\t\t<st-icon [icon]=\"iconVolumeDown\" size=\"sm\"></st-icon>\n\t\t}\n\t</st-button>\n\n\t<!-- Custom Volume Progress Bar -->\n\t<div\n\t\t[class]=\"volumeTimelineClass()\"\n\t\t(click)=\"handleClick($event)\"\n\t\t#volumeTimeline\n\t\t(mouseenter)=\"handleVolumeHover(true)\"\n\t\t(mouseleave)=\"handleVolumeHover(false)\"\n\t>\n\t\t<!-- Volume Progress Bar Background -->\n\t\t<div class=\"bg-primary absolute h-full rounded-full\" [style.width]=\"audioService.volume() * 100 + '%'\"></div>\n\n\t\t<!-- Draggable Volume Circle -->\n\t\t<div\n\t\t\t[style.left]=\"'calc(' + audioService.volume() * 100 + '% - ' + (audioService.volume() === 1 ? '6px' : '3px') + ')'\"\n\t\t\t[class]=\"volumeTimelineCircleClass()\"\n\t\t\t#volumeCircle\n\t\t\t(pointerdown)=\"handlePointerDown($event); startVolumeDrag($event)\"\n\t\t></div>\n\t</div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, DestroyRef, effect, inject, input, model, signal } from '@angular/core';\nimport { matPause, matPlayArrow, matSkipNext, matSkipPrevious } from '@ng-icons/material-icons/baseline';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ButtonComponent } from '@sixbell-telco/sdk/components/button';\nimport { IconComponent } from '@sixbell-telco/sdk/components/icon';\nimport { heroMusicalNoteMini } from '@sixbell-telco/sdk/components/icon/heroicons/mini';\nimport { TextDirective } from '@sixbell-telco/sdk/directives/text';\nimport { cn } from '@sixbell-telco/sdk/utils/cn';\nimport { AudioTimelineComponent } from '../audio-timeline/audio-timeline.component';\nimport { ButtonPlayComponent } from '../button-play/button-play.component';\nimport { AudioPlayerService } from '../services/audio.service';\nimport { TrackInfoComponent } from '../track-info/track-info.component';\nimport { VolumeControlComponent } from '../volume-control/volume-control.component';\nexport interface Track {\n\ttitle: string;\n\tdescription: string;\n\turl: string;\n}\n\nexport type AudioPlayerVariantProps = 'default' | 'fixed';\n\n@Component({\n\tselector: 'st-audio-player',\n\timports: [\n\t\tCommonModule,\n\t\tButtonComponent,\n\t\tTextDirective,\n\t\tVolumeControlComponent,\n\t\tTrackInfoComponent,\n\t\tAudioTimelineComponent,\n\t\tButtonPlayComponent,\n\t\tTranslatePipe,\n\t\tIconComponent,\n\t],\n\ttemplateUrl: './audio-player.component.html',\n\tstyles: '',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AudioPlayerComponent {\n\taudioPlayerService = inject(AudioPlayerService);\n\tprivate readonly destroyRef = inject(DestroyRef);\n\n\tvariant = input<AudioPlayerVariantProps>('default');\n\tshadow = input<boolean>(false);\n\topened = model<boolean>(false);\n\n\ttracks = input<Track[]>([]);\n\tshowTrackList = input(false);\n\tcurrentTrackIndex = model<number>(-1);\n\tcurrentTrack = computed<Track | undefined>(() => {\n\t\tconst tracks = this.tracks();\n\t\treturn this.currentTrackIndex() >= 0 && tracks ? tracks[this.currentTrackIndex()] : undefined;\n\t});\n\n\ticonSkipPrevious = matSkipPrevious;\n\ticonSkipNext = matSkipNext;\n\ticonPlay = matPlayArrow;\n\ticonPause = matPause;\n\ticonMusicNote = heroMusicalNoteMini;\n\n\toffScreen = signal<boolean>(false);\n\n\tplayerClass = computed(() =>\n\t\tcn(\n\t\t\t'relative grid w-full translate-y-0 grid-cols-[minmax(0,1fr)_minmax(0,2fr)_minmax(0,1fr)] items-center gap-4',\n\t\t\t{\n\t\t\t\t'shadow-main': this.shadow(),\n\t\t\t},\n\t\t\t{\n\t\t\t\t'bg-base-200 border-neutral fixed bottom-0 left-0 z-50 transform border-t p-4 transition-transform duration-300': this.variant() === 'fixed',\n\t\t\t},\n\t\t\t{\n\t\t\t\t'animate-fade-in-up animate-steps-modern animate-duration-300': this.opened() && this.variant() === 'fixed',\n\t\t\t},\n\t\t\t{\n\t\t\t\t'animate-fade-out-down animate-steps-modern animate-duration-300': !this.opened() && this.variant() === 'fixed',\n\t\t\t},\n\t\t\t{\n\t\t\t\t'pointer-events-none invisible fixed bottom-5 -z-10': this.offScreen() && this.variant() === 'fixed',\n\t\t\t},\n\t\t),\n\t);\n\n\tconstructor() {\n\t\t// Sync tracks with service\n\t\teffect(() => {\n\t\t\tthis.audioPlayerService.setTracks(this.tracks());\n\t\t});\n\n\t\t// One-way sync from service to component\n\t\teffect(() => {\n\t\t\tthis.currentTrackIndex.set(this.audioPlayerService.currentTrackIndex());\n\t\t});\n\n\t\tthis.destroyRef.onDestroy(() => {\n\t\t\tthis.audioPlayerService.cleanup();\n\t\t});\n\t}\n\n\tentering = signal(false);\n\tleaving = signal(false);\n\n\thandleAnimationEnd(event: AnimationEvent) {\n\t\tif (this.variant() !== 'fixed') return;\n\n\t\tif (event.animationName === 'fade-out-down' && !this.opened()) {\n\t\t\tthis.offScreen.set(true);\n\t\t\tthis.leaving.set(false);\n\t\t}\n\n\t\tif (event.animationName === 'fade-in-up' && this.opened()) {\n\t\t\tthis.entering.set(false);\n\t\t}\n\t}\n\n\thandleAnimationStart(event: AnimationEvent) {\n\t\tif (this.variant() !== 'fixed') return;\n\n\t\tif (event.animationName === 'fade-in-up' && this.opened()) {\n\t\t\tthis.offScreen.set(false);\n\t\t\tthis.entering.set(true);\n\t\t}\n\n\t\tif (event.animationName === 'fade-out-down' && !this.opened()) {\n\t\t\tthis.leaving.set(true);\n\t\t}\n\t}\n\n\t// Simplify methods to call service\n\tasync playTrack(index: number) {\n\t\tawait this.audioPlayerService.playTrack(index);\n\t}\n\n\tasync togglePlay() {\n\t\tawait this.audioPlayerService.togglePlay();\n\t}\n\n\tasync previous() {\n\t\tawait this.audioPlayerService.previous();\n\t}\n\n\tasync next() {\n\t\tawait this.audioPlayerService.next();\n\t}\n\n\t/**\n\t * @internal\n\t * Handles timeline/volume interactions\n\t */\n\thandleInteraction() {\n\t\tif (this.variant() === 'fixed' && !this.opened()) {\n\t\t\tthis.opened.set(true);\n\t\t}\n\t}\n\n\thandleOpen() {\n\t\tthis.opened.set(true);\n\t}\n\n\thandleClose() {\n\t\tthis.opened.set(false);\n\t}\n}\n","<div class=\"flex w-full flex-col gap-4\">\n\t<!-- Track List -->\n\t@if (showTrackList()) {\n\t\t<div class=\"rounded-box border-neutral shadow-main mb-4 border\">\n\t\t\t<div class=\"p-4\">\n\t\t\t\t<h4 stText=\"4\">{{ 'sdk.audioPlayer.trackListTitle' | translate }}</h4>\n\t\t\t\t<div class=\"max-h-[300px] space-y-2 overflow-y-auto\">\n\t\t\t\t\t@for (track of tracks(); track $index; let i = $index) {\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=\"rounded-field hover:bg-base-300 flex cursor-pointer items-center gap-2 p-2\"\n\t\t\t\t\t\t\t[class.bg-base-300]=\"audioPlayerService.currentTrackIndex() === i\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<st-button-play [trackIndex]=\"i\" (click)=\"handleOpen()\"> </st-button-play>\n\t\t\t\t\t\t\t<div class=\"flex-1\">\n\t\t\t\t\t\t\t\t<div stText=\"7\">{{ track.title }}</div>\n\t\t\t\t\t\t\t\t<div stText=\"8\">{{ track.description }}</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t}\n\n\t<div [class]=\"playerClass()\" (animationend)=\"handleAnimationEnd($event)\" (animationstart)=\"handleAnimationStart($event)\">\n\t\t<!-- close button -->\n\t\t@if (variant() === 'fixed') {\n\t\t\t<div\n\t\t\t\tclass=\"group/close btn btn-ghost btn-square btn-primary btn-xs absolute top-1 right-1 grid place-content-center gap-0 hover:cursor-pointer\"\n\t\t\t\ttabindex=\"0\"\n\t\t\t\t(click)=\"handleClose()\"\n\t\t\t\t(keydown.enter)=\"handleClose()\"\n\t\t\t\taria-label=\"Close player\"\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tclass=\"bg-primary group-hover/close:bg-primary-content group-active/close:bg-primary-content group-focus-within/close:bg-primary-content relative h-0.5 w-4 translate-y-0.5 rounded-full transition-transform duration-300 ease-in-out group-focus-within/close:rotate-45 group-hover/close:rotate-45 group-active/close:rotate-45\"\n\t\t\t\t></div>\n\t\t\t\t<div\n\t\t\t\t\tclass=\"bg-primary group-hover/close:bg-primary-content group-active/close:bg-primary-content group-focus-within/close:bg-primary-content h-0.5 w-4 rounded-full transition-transform duration-300 ease-in-out group-focus-within/close:-rotate-45 group-hover/close:-rotate-45 group-active/close:-rotate-45\"\n\t\t\t\t></div>\n\t\t\t</div>\n\t\t}\n\n\t\t<!-- track info -->\n\t\t<div class=\"min-w-0\">\n\t\t\t<!-- Added min-w-0 to prevent overflow -->\n\t\t\t<st-track-info [currentTrack]=\"currentTrack()\"></st-track-info>\n\t\t</div>\n\n\t\t<div class=\"min-w-0\">\n\t\t\t<!-- Center section -->\n\t\t\t<!-- Your controls content -->\n\t\t\t<div class=\"grid items-center\">\n\t\t\t\t<!-- Controls -->\n\t\t\t\t<div class=\"flex items-center justify-center gap-2\">\n\t\t\t\t\t<st-button (click)=\"previous()\" [ghost]=\"true\" [circle]=\"true\" size=\"sm\">\n\t\t\t\t\t\t<st-icon [icon]=\"iconSkipPrevious\" size=\"sm\"></st-icon>\n\t\t\t\t\t</st-button>\n\n\t\t\t\t\t<st-button (click)=\"togglePlay()\" [circle]=\"true\" size=\"sm\" [shadow]=\"true\">\n\t\t\t\t\t\t<st-icon [icon]=\"audioPlayerService.isPlaying() ? iconPause : iconPlay\" size=\"sm\"></st-icon>\n\t\t\t\t\t</st-button>\n\n\t\t\t\t\t<st-button (click)=\"next()\" [ghost]=\"true\" [circle]=\"true\" size=\"sm\">\n\t\t\t\t\t\t<st-icon [icon]=\"iconSkipNext\" size=\"sm\"></st-icon>\n\t\t\t\t\t</st-button>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- Progress Bar -->\n\t\t\t\t<st-timeline (triggered)=\"handleInteraction()\"></st-timeline>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<!-- Volume Control -->\n\t\t<div class=\"min-w-0 justify-self-end\">\n\t\t\t<!-- Right-aligned -->\n\t\t\t<st-volume-control (triggered)=\"handleInteraction()\"></st-volume-control>\n\t\t</div>\n\t</div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}