platypush/platypush/backend/http/webapp/dist/static/js/7841.8b124a1f.js.map

1 line
44 KiB
Plaintext

{"version":3,"file":"static/js/7841.8b124a1f.js","mappings":"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","sources":["webpack://platypush/./src/components/Media/ProgressBar.vue","webpack://platypush/./src/components/Media/ProgressBar.vue?32c3","webpack://platypush/./src/components/Media/Utils.vue","webpack://platypush/./src/components/Media/Utils.vue?af63","webpack://platypush/./src/components/elements/Slider.vue","webpack://platypush/./src/components/elements/Slider.vue?787f","webpack://platypush/./src/components/widgets/Music/Index.vue","webpack://platypush/./src/components/widgets/Music/Index.vue?d0a3","webpack://platypush/./src/mixins/Music/Status.vue","webpack://platypush/./src/mixins/Music/Status.vue?daf1"],"sourcesContent":["<template>\n <div class=\"progress-bar-container\">\n <div class=\"col-s-2 col-m-1 time\">\n <span class=\"elapsed-time\"\n v-text=\"elapsed != null && (status.state === 'play' || status.state === 'pause') ? convertTime(elapsed) : '-:--'\"></span>\n </div>\n <div class=\"col-s-8 col-m-10 time-bar\">\n <Slider :value=\"elapsed\" :range=\"[0, duration]\" :disabled=\"!duration || status.state === 'stop'\"\n @change=\"$emit('seek', $event.target.value)\" />\n </div>\n <div class=\"col-s-2 col-m-1 time\">\n <span class=\"total-time\"\n v-text=\"duration && status.state !== 'stop' ? convertTime(duration) : '-:--'\"></span>\n </div>\n </div>\n</template>\n\n<script>\nimport MediaUtils from \"@/components/Media/Utils\";\nimport Slider from \"@/components/elements/Slider\";\n\nexport default {\n components: {Slider},\n emits: ['seek'],\n mixins: [MediaUtils],\n\n props: {\n elapsed: {\n type: Number,\n },\n\n duration: {\n type: Number,\n },\n\n // Current player status\n status: {\n type: Object,\n default: () => ({}),\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n$time-width: 2.5em;\n\n.progress-bar-container {\n width: 100%;\n display: flex;\n align-items: center;\n\n .time {\n width: $time-width;\n font-size: .7em;\n position: relative;\n margin-left: 0;\n }\n\n .elapsed-time {\n text-align: right;\n float: right;\n }\n\n .time-bar {\n width: calc(100% - #{$time-width * 2} - 2em);\n flex-grow: 1;\n margin: 0 .5em;\n }\n}\n</style>\n","import { render } from \"./ProgressBar.vue?vue&type=template&id=3894ad4d&scoped=true\"\nimport script from \"./ProgressBar.vue?vue&type=script&lang=js\"\nexport * from \"./ProgressBar.vue?vue&type=script&lang=js\"\n\nimport \"./ProgressBar.vue?vue&type=style&index=0&id=3894ad4d&lang=scss&scoped=true\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-3894ad4d\"]])\n\nexport default __exports__","<script>\nimport Utils from \"@/Utils\";\n\nexport default {\n name: \"Utils\",\n mixins: [Utils],\n\n computed: {\n audioExtensions() {\n return new Set([\n '3gp', 'aa', 'aac', 'aax', 'act', 'aiff', 'amr', 'ape', 'au',\n 'awb', 'dct', 'dss', 'dvf', 'flac', 'gsm', 'iklax', 'ivs',\n 'm4a', 'm4b', 'm4p', 'mmf', 'mp3', 'mpc', 'msv', 'nmf', 'nsf',\n 'ogg,', 'opus', 'ra,', 'raw', 'sln', 'tta', 'vox', 'wav',\n 'wma', 'wv', 'webm', '8svx',\n ])\n },\n\n videoExtensions() {\n return new Set([\n 'webm', 'mkv', 'flv', 'flv', 'vob', 'ogv', 'ogg', 'drc', 'gif',\n 'gifv', 'mng', 'avi', 'mts', 'm2ts', 'mov', 'qt', 'wmv', 'yuv',\n 'rm', 'rmvb', 'asf', 'amv', 'mp4', 'm4p', 'm4v', 'mpg', 'mp2',\n 'mpeg', 'mpe', 'mpv', 'mpg', 'mpeg', 'm2v', 'm4v', 'svi',\n '3gp', '3g2', 'mxf', 'roq', 'nsv', 'flv', 'f4v', 'f4p', 'f4a', 'f4b',\n ])\n },\n\n mediaExtensions() {\n return new Set([...this.videoExtensions, ...this.audioExtensions])\n },\n },\n\n methods: {\n convertTime(time) {\n time = parseFloat(time); // Normalize strings\n const t = {}\n t.h = '' + parseInt(time/3600)\n t.m = '' + parseInt(time/60 - t.h*60)\n t.s = '' + parseInt(time - (t.h*3600 + t.m*60))\n\n for (const attr of ['m','s']) {\n if (parseInt(t[attr]) < 10) {\n t[attr] = '0' + t[attr]\n }\n }\n\n const ret = []\n if (parseInt(t.h)) {\n ret.push(t.h)\n }\n\n ret.push(t.m, t.s)\n return ret.join(':')\n },\n\n async startStreaming(resource, pluginName, download=false) {\n let url = resource\n let subtitles = null\n\n if (resource instanceof Object) {\n url = resource.url\n subtitles = resource.subtitles\n } else {\n resource = {url: url}\n }\n\n const ret = await this.request(`${pluginName}.start_streaming`, {\n media: url,\n subtitles: subtitles,\n download: download,\n })\n\n return {...resource, ...ret}\n },\n\n async stopStreaming(mediaId, pluginName) {\n await this.request(`${pluginName}.stop_streaming`, {media_id: mediaId})\n },\n },\n}\n</script>\n","import script from \"./Utils.vue?vue&type=script&lang=js\"\nexport * from \"./Utils.vue?vue&type=script&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__","<template>\n <label class=\"slider-wrapper\">\n <span class=\"range-labels\" :class=\"{'with-label': withLabel}\" v-if=\"withRange\">\n <span class=\"label left\" v-if=\"withRange\" v-text=\"range[0]\" />\n <span class=\"label right\" v-if=\"withRange\" v-text=\"range[1]\" />\n </span>\n\n <span class=\"slider-container\">\n <input class=\"slider\"\n type=\"range\"\n :class=\"{'with-label': withLabel}\"\n :min=\"range[0]\"\n :max=\"range[1]\"\n :step=\"step\"\n :disabled=\"disabled\"\n :value=\"value\"\n ref=\"range\"\n @input.stop=\"$emit('input', $event)\"\n @change.stop=\"$emit('change', $event)\">\n\n <span class=\"label\" v-if=\"withLabel\" v-text=\"value\" ref=\"label\"></span>\n </span>\n </label>\n</template>\n\n<script>\nexport default {\n emits: ['input', 'change'],\n props: {\n value: {\n type: Number,\n },\n\n disabled: {\n type: Boolean,\n default: false,\n },\n\n range: {\n type: Array,\n default: () => [0, 100],\n },\n\n step: {\n type: Number,\n default: 1,\n },\n\n withLabel: {\n type: Boolean,\n default: false,\n },\n\n withRange: {\n type: Boolean,\n default: false,\n }\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n$label-width: 3em;\n$thumb-height: 1em;\n$slider-height: 0.5em;\n\n.slider-wrapper {\n width: 100%;\n display: flex;\n position: relative;\n flex-direction: column;\n\n .slider-container {\n width: 100%;\n display: flex;\n position: relative;\n }\n\n input.slider {\n width: 100%;\n background: none;\n height: 1.5em;\n position: relative;\n border-radius: 0.5em;\n cursor: pointer;\n outline: none;\n overflow: hidden;\n transition: all ease 100ms;\n @include appearance(none);\n\n &:active {\n filter: brightness(80%);\n cursor: grabbing;\n }\n\n &:hover {\n filter: saturate(130%);\n }\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n filter: grayscale(1);\n }\n\n /* Chrome and friends */\n &::-webkit-slider-runnable-track {\n position: relative;\n border-radius: $slider-height;\n background: linear-gradient($slider-bg 0 0) scroll no-repeat center /\n 100% calc(#{$slider-height} + 1px);\n }\n\n &::-webkit-slider-runnable-track,\n &::-webkit-slider-thumb {\n -webkit-appearance: none;\n transition: all ease 100ms;\n height: $thumb-height;\n }\n\n &::-webkit-slider-thumb {\n --clip-top: calc((#{$thumb-height} - #{$slider-height}) * 0.5);\n --clip-bottom: calc(#{$thumb-height} - var(--clip-top));\n --clip-further: calc(100% + 1px);\n\n width: $thumb-height;\n background: $slider-progress-bg;\n box-shadow: calc(-100vmax - #{$thumb-height} + 2.5px) #{$slider-height} #{$slider-height} 100vmax #{$slider-progress-bg};\n border-radius: $thumb-height;\n cursor: grab;\n\n &:hover {\n filter: brightness(130%) blur(1px);\n cursor: grab;\n }\n\n clip-path: polygon(\n 100% -1px,\n #{$slider-height} -1px,\n 0 var(--clip-top),\n -100vmax var(--clip-top),\n -100vmax var(--clip-bottom),\n 0 var(--clip-bottom),\n #{$slider-height} 100%,\n var(--clip-further) var(--clip-further)\n );\n }\n\n /* Firefox */\n &::-moz-range-track {\n background: $slider-bg;\n position: relative;\n height: $slider-height;\n border-radius: 0.5em;\n box-shadow: inset 1px 0px 3px 0 $slider-track-shadow;\n }\n\n &::-moz-range-thumb {\n $thumb-height: 1.125em;\n width: $thumb-height;\n height: $thumb-height;\n position: relative;\n background: $slider-thumb-bg;\n border-radius: 50%;\n border: none;\n cursor: grabbing;\n transition: all ease 100ms;\n @include appearance(none);\n\n &:hover {\n filter: brightness(130%) blur(1px);\n cursor: grab;\n }\n\n &:disabled {\n background: $slider-thumb-disabled-bg;\n cursor: not-allowed;\n }\n }\n\n &::-moz-range-progress {\n width: 100%;\n height: $slider-height;\n cursor: pointer;\n background: $slider-progress-bg;\n border-radius: 0.5em 0 0 0.5em;\n }\n }\n\n .range-labels {\n width: 100%;\n display: flex;\n\n .left {\n text-align: left;\n }\n\n .right {\n @extend .pull-right;\n flex-grow: 1;\n }\n }\n\n .label {\n width: $label-width;\n position: relative;\n font-weight: normal;\n text-align: center;\n }\n\n .with-label {\n width: calc(100% - $label-width);\n }\n}\n</style>\n","import { render } from \"./Slider.vue?vue&type=template&id=d90e850c&scoped=true\"\nimport script from \"./Slider.vue?vue&type=script&lang=js\"\nexport * from \"./Slider.vue?vue&type=script&lang=js\"\n\nimport \"./Slider.vue?vue&type=style&index=0&id=d90e850c&lang=scss&scoped=true\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-d90e850c\"]])\n\nexport default __exports__","<template>\n <Loading v-if=\"loading\" />\n <div class=\"music\" v-else>\n <div class=\"background\" v-if=\"image\">\n <div class=\"image\" :style=\"{backgroundImage: 'url(' + image + ')'}\" />\n </div>\n\n <div class=\"foreground\">\n <div class=\"top\">\n <div class=\"section\" :class=\"{'has-image': !!image, 'has-progress': status?.state === 'play'}\">\n <div class=\"track\">\n <div class=\"unknown\" v-if=\"!status\">[Unknown state]</div>\n <div class=\"no-track\" v-if=\"status && status.state === 'stop'\">No media is being played</div>\n <div class=\"artist\" v-if=\"status && status.state !== 'stop' && track && track.artist\" v-text=\"track.artist\"></div>\n <div class=\"title\" v-if=\"status && status.state !== 'stop' && track && track.title\" v-text=\"track.title\"></div>\n </div>\n\n <div class=\"progress-bar\" v-if=\"status?.state === 'play'\">\n <div class=\"row\">\n <ProgressBar\n :duration=\"track.time\"\n :elapsed=\"status.elapsed\"\n :status=\"status\"\n @seek=\"seek\" />\n </div>\n </div>\n\n <div class=\"controls\" v-if=\"_withControls && status\">\n <button title=\"Previous\" @click=\"prev\">\n <i class=\"fa fa-step-backward\" />\n </button>\n <button class=\"play-pause\" @click=\"playPause\"\n :title=\"status.state === 'play' ? 'Pause' : 'Play'\">\n <i class=\"fa fa-pause\" v-if=\"status.state === 'play'\" />\n <i class=\"fa fa-play\" v-else />\n </button>\n <button title=\"Stop\" @click=\"stop\" v-if=\"status.state !== 'stop'\">\n <i class=\"fa fa-stop\" />\n </button>\n <button title=\"Next\" @click=\"next\">\n <i class=\"fa fa-step-forward\" />\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"bottom\">\n <div class=\"playback-status section\" :class=\"{'has-image': !!image}\" v-if=\"status\">\n <div class=\"status-property col-4 volume fade-in\" v-if=\"!showVolumeBar\">\n <button title=\"Volume\" @click=\"showVolumeBar = true\">\n <i class=\"fa fa-volume-up\" />\n &nbsp; {{ status.volume }}%\n </button>\n </div>\n\n <div class=\"status-property col-4 volume fade-in\" v-else>\n <div class=\"row\">\n <i class=\"fa fa-volume-up\" /> &nbsp;\n <Slider :range=\"[0, 100]\" :value=\"status.volume\" @change=\"setVolume\" />\n </div>\n </div>\n\n <div class=\"status-property col-2\">\n <button title=\"Random\" @click=\"random\">\n <i class=\"fas fa-random\" :class=\"{active: status.random}\"></i>\n </button>\n </div>\n <div class=\"status-property col-2\">\n <button title=\"Repeat\" @click=\"repeat\">\n <i class=\"fas fa-redo\" :class=\"{active: status.repeat}\"></i>\n </button>\n </div>\n <div class=\"status-property col-2\">\n <button title=\"Single\" @click=\"single\">\n <i class=\"fa fa-bullseye\" :class=\"{active: status.single}\"></i>\n </button>\n </div>\n <div class=\"status-property col-2\">\n <button title=\"Consume\" @click=\"consume\">\n <i class=\"fa fa-utensils\" :class=\"{active: status.consume}\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport Utils from \"@/Utils\";\nimport Loading from \"@/components/Loading\";\nimport Status from \"@/mixins/Music/Status\";\nimport ProgressBar from \"@/components/Media/ProgressBar\";\nimport Slider from \"@/components/elements/Slider\";\n\nexport default {\n name: \"Music\",\n components: {Loading, ProgressBar, Slider},\n mixins: [Status, Utils],\n props: {\n // Music plugin to use (default: music.mopidy).\n plugin: {\n type: String,\n default: 'music.mopidy',\n },\n\n // Refresh interval in seconds.\n refreshSeconds: {\n type: Number,\n default: 60,\n },\n\n // Set to true if you also want to include music controls in the widget.\n withControls: {\n type: Boolean,\n default: true,\n },\n },\n\n data() {\n return {\n track: null,\n status: {},\n timer: null,\n loading: false,\n showVolumeBar: false,\n images: {},\n maxImages: 100,\n\n syncTime: {\n timestamp: null,\n elapsed: null,\n },\n }\n },\n\n computed: {\n _withControls() {\n return this.parseBoolean(this.withControls)\n },\n \n _refreshSeconds() {\n return parseFloat(this.refreshSeconds)\n },\n\n trackUri() {\n return this.track?.uri || this.track?.file\n },\n\n image() {\n if (this.status?.state === 'stop')\n return null\n\n return this.images[this.trackUri] || this.track?.image || this.status?.image\n },\n },\n\n methods: {\n async refresh() {\n this.loading = true\n\n try {\n let status = await this.request(`${this.plugin}.status`) || {}\n let track = await this.request(`${this.plugin}.current_track`)\n\n this._parseStatus(status)\n this._parseTrack(track)\n\n if (status.state === 'play' && !this.timer)\n this.startTimer()\n else if (status.state !== 'play' && this.timer)\n this.stopTimer()\n\n if (status.state !== 'stop' && !this.image)\n await this.refreshImage()\n } finally {\n this.loading = false\n }\n },\n\n async refreshImage() {\n if (!this.trackUri)\n return\n\n if (!this.images[this.trackUri]) {\n const trackImage = (\n await this.request(`${this.plugin}.get_images`, {resources: [this.trackUri]})\n )[this.trackUri]\n\n if (Object.keys(this.images).length > this.maxImages) {\n delete this.images[Object.keys(this.images)[0]]\n }\n\n this.images[this.trackUri] = trackImage\n }\n\n return this.images[this.trackUri]\n },\n\n async _parseStatus(status) {\n const statusPlugin = status.pluginName\n if (statusPlugin && this.plugin && statusPlugin !== this.plugin)\n return // Ignore status updates from other plugins\n\n if (!status || Object.keys(status).length === 0)\n status = await this.request(`${this.plugin}.status`) || {}\n if (!this.status)\n this.status = {}\n\n this.status = this.parseStatus(status)\n },\n\n async _parseTrack(track) {\n if (!track || track.length === 0) {\n track = await this.request(`${this.plugin}.current_track`)\n }\n\n if (!this.track)\n this.track = {}\n\n for (const [attr, value] of Object.entries(track)) {\n if (['id','pos','time','track','disc'].indexOf(attr) >= 0) {\n this.track[attr] = parseInt(value)\n } else {\n this.track[attr] = value\n }\n }\n },\n\n showNewTrackNotification() {\n this.notify({\n html: '<b>' + (this.track.artist || '[No Artist]') + '</b><br>' +\n (this.track.title || '[No Title]'),\n image: {\n icon: 'play',\n }\n })\n },\n\n async seek(position) {\n await this.request(`${this.plugin}.seek`, {position: position})\n },\n\n async setVolume(event) {\n await this.request(`${this.plugin}.set_volume`, {volume: event.target.value})\n this.showVolumeBar = false\n },\n\n async random() {\n await this.request(`${this.plugin}.random`)\n },\n\n async repeat() {\n await this.request(`${this.plugin}.repeat`)\n },\n\n async consume() {\n await this.request(`${this.plugin}.consume`)\n },\n\n async single() {\n await this.request(`${this.plugin}.single`)\n },\n\n async onNewPlayingTrack(event) {\n let previousTrack = null\n\n if (this.track) {\n previousTrack = {\n file: this.track.file,\n artist: this.track.artist,\n title: this.track.title,\n }\n }\n\n this.status.state = 'play'\n this.status.elapsed = 0\n this.track = {}\n this._parseTrack(event.track)\n\n let status = event.status ? event.status : await this.request(`${this.plugin}.status`)\n this._parseStatus(status)\n this.startTimer()\n\n if (!previousTrack || (this.track.file !== previousTrack.file\n || this.track.artist !== previousTrack.artist\n || this.track.title !== previousTrack.title)) {\n this.showNewTrackNotification()\n }\n\n if (!this.image)\n await this.refreshImage()\n },\n\n onMusicStop(event) {\n this.status.state = 'stop'\n this.status.elapsed = 0\n this._parseStatus(event.status)\n this._parseTrack(event.track)\n this.stopTimer()\n },\n\n async onMusicPlay(event) {\n this.status.state = 'play'\n this._parseStatus(event.status)\n this._parseTrack(event.track)\n this.startTimer()\n\n if (!this.image)\n await this.refreshImage()\n },\n\n async onMusicPause(event) {\n this.status.state = 'pause'\n this._parseStatus(event.status)\n this._parseTrack(event.track)\n\n this.syncTime.timestamp = new Date()\n this.syncTime.elapsed = this.status.elapsed\n\n if (!this.image)\n await this.refreshImage()\n },\n\n onSeekChange(event) {\n if (event.position != null)\n this.status.elapsed = parseFloat(event.position)\n if (event.status)\n this._parseStatus(event.status)\n if (event.track)\n this._parseTrack(event.track)\n\n this.syncTime.timestamp = new Date()\n this.syncTime.elapsed = this.status.elapsed\n },\n\n onVolumeChange(event) {\n if (event.volume != null)\n this.status.volume = parseFloat(event.volume)\n if (event.status)\n this._parseStatus(event.status)\n if (event.track)\n this._parseTrack(event.track)\n },\n\n onRepeatChange(event) {\n this.status.repeat = event.state\n },\n\n onRandomChange(event) {\n this.status.random = event.state\n },\n\n onConsumeChange(event) {\n this.status.consume = event.state\n },\n\n onSingleChange(event) {\n this.status.single = event.state\n },\n\n startTimer() {\n if (this.timer != null) {\n this.stopTimer()\n }\n\n this.syncTime.timestamp = new Date()\n this.syncTime.elapsed = this.status.elapsed\n this.timer = setInterval(this.timerFunc, 1000)\n },\n\n stopTimer() {\n if (this.timer == null) {\n clearInterval(this.timer)\n this.timer = null\n }\n },\n\n timerFunc() {\n if (this.status.state !== 'play' || this.status.elapsed == null) {\n return\n }\n\n this.status.elapsed = this.syncTime.elapsed +\n ((new Date()).getTime()/1000) - (this.syncTime.timestamp.getTime()/1000)\n },\n\n async _run(action, args) {\n args = args || {}\n await this.request(`music.mpd.${action}`, args)\n await this.refresh()\n },\n\n async playPause() {\n return await this._run('pause')\n },\n\n async stop() {\n return await this._run('stop')\n },\n\n async prev() {\n return await this._run('previous')\n },\n\n async next() {\n return await this._run('next')\n },\n },\n\n mounted() {\n this.refresh()\n if (this._refreshSeconds) {\n setInterval(this.refresh, this._refreshSeconds * 1000)\n }\n\n this.subscribe(this.onNewPlayingTrack, 'widget-music-on-new-track', 'platypush.message.event.music.NewPlayingTrackEvent')\n this.subscribe(this.onMusicStop, 'widget-music-on-music-stop', 'platypush.message.event.music.MusicStopEvent')\n this.subscribe(this.onMusicPlay, 'widget-music-on-music-play', 'platypush.message.event.music.MusicPlayEvent')\n this.subscribe(this.onMusicPause, 'widget-music-on-music-pause', 'platypush.message.event.music.MusicPauseEvent')\n this.subscribe(this.onSeekChange, 'widget-music-on-music-seek', 'platypush.message.event.music.SeekChangeEvent')\n this.subscribe(this.onVolumeChange, 'widget-music-on-volume-change', 'platypush.message.event.music.VolumeChangeEvent')\n this.subscribe(this.onRepeatChange, 'widget-music-on-repeat-change', 'platypush.message.event.music.PlaybackRepeatModeChangeEvent')\n this.subscribe(this.onRandomChange, 'widget-music-on-random-change', 'platypush.message.event.music.PlaybackRandomModeChangeEvent')\n this.subscribe(this.onConsumeChange, 'widget-music-on-consume-change', 'platypush.message.event.music.PlaybackConsumeModeChangeEvent')\n this.subscribe(this.onSingleChange, 'widget-music-on-single-change', 'platypush.message.event.music.PlaybackSingleModeChangeEvent')\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n$playback-status-color: #757f70;\n$bottom-height: 2em;\n\n.music {\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n position: relative;\n\n .background {\n width: 100%;\n height: 100%;\n position: absolute;\n\n .image {\n width: 100%;\n height: 100%;\n background-size: cover;\n background-position: center;\n filter: contrast(0.15) opacity(0.5);\n }\n }\n\n @mixin top {\n width: 100%;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n position: relative;\n }\n\n .foreground {\n @include top;\n height: 100%;\n }\n\n .top {\n @include top;\n height: calc(100% - #{$bottom-height});\n\n .section {\n flex-direction: column;\n\n &.has-image {\n padding: 1em;\n border-radius: 1em;\n }\n\n &.has-progress {\n width: calc(100% - 0.5em);\n padding: 1.5em 0.25em;\n }\n }\n }\n\n .bottom {\n width: 100%;\n height: $bottom-height;\n\n .section {\n border-top: $default-border-2;\n\n &.has-image {\n border-top: none;\n box-shadow: 0 0 0.25em rgba(0, 0, 0, 0.15);\n }\n }\n }\n\n .section {\n display: flex;\n align-items: center;\n justify-content: center;\n\n &.has-image {\n background: rgba(255, 255, 255, 0.4);\n box-shadow: 0 0 0.25em rgba(0, 0, 0, 0.15);\n }\n }\n\n .track {\n text-align: center;\n\n .unknown,\n .no-track {\n font-size: 2em;\n }\n\n .artist {\n font-size: 1.9em;\n font-weight: bold;\n margin-bottom: .25em;\n }\n\n .title {\n font-size: 1.8em;\n font-weight: normal;\n }\n }\n\n .progress-bar {\n width: 100%;\n height: 1em;\n font-size: 1.2em;\n position: relative;\n margin-top: 1.5em;\n margin-bottom: .75em;\n padding: 0 .5em;\n }\n\n .playback-status {\n color: $playback-status-color;\n\n .status-property {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n }\n\n .active {\n color: $default-hover-fg;\n\n &:hover {\n color: $playback-status-color !important;\n }\n }\n\n button {\n color: $playback-status-color;\n padding: 0.25em 0.5em;\n border-top: 1px solid transparent;\n\n &:hover {\n border-top: 1px solid $default-hover-fg;\n }\n }\n }\n\n .controls {\n display: flex;\n margin-top: .5em;\n font-size: 1.2em;\n }\n\n button {\n background: none;\n border: none;\n cursor: pointer;\n\n &:hover {\n color: $default-hover-fg !important;\n }\n\n &.play-pause {\n color: $selected-fg !important;\n font-size: 1.5em;\n }\n }\n\n .volume {\n .row {\n width: calc(100% - 1em);\n margin: 0 .5em;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n }\n}\n</style>\n","import { render } from \"./Index.vue?vue&type=template&id=3f481e2d&scoped=true\"\nimport script from \"./Index.vue?vue&type=script&lang=js\"\nexport * from \"./Index.vue?vue&type=script&lang=js\"\n\nimport \"./Index.vue?vue&type=style&index=0&id=3f481e2d&lang=scss&scoped=true\"\n\nimport exportComponent from \"../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-3f481e2d\"]])\n\nexport default __exports__","<script>\nexport default {\n methods: {\n parseStatus(status) {\n return Object.entries(status).reduce((obj, [k, v]) => {\n switch (k) {\n case 'bitrate':\n case 'volume':\n obj[k] = parseInt(v)\n break\n\n case 'consume':\n case 'random':\n case 'repeat':\n case 'single':\n obj[k] = !!parseInt(+v)\n break\n\n case 'playing_pos':\n case 'song': // Legacy mpd format\n obj.playingPos = parseInt(v)\n break\n\n case 'time':\n if (v.split) { // Handle the `elapsed:duration` legacy mpd format\n v = v.split(':')\n\n if (v.length === 1) {\n obj.elapsed = parseInt(v[0])\n } else {\n obj.elapsed = parseInt(v[0])\n obj.duration = parseInt(v[1])\n }\n } else {\n obj.elapsed = v\n }\n break\n\n case 'track':\n if (v?.time != null) {\n obj.duration = v.time\n }\n\n if (v?.playlistPos != null) {\n obj.playingPos = v.pos\n }\n break\n\n case 'duration':\n obj.duration = parseInt(v)\n break\n\n case 'elapsed':\n break\n\n default:\n obj[k] = v\n break\n }\n\n return obj\n }, {})\n },\n }\n}\n</script>\n","import script from \"./Status.vue?vue&type=script&lang=js\"\nexport * from \"./Status.vue?vue&type=script&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__"],"names":["class","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_toDisplayString","$props","elapsed","status","state","_ctx","convertTime","_hoisted_4","_createVNode","_component_Slider","value","range","duration","disabled","onChange","_cache","$event","$emit","target","_hoisted_5","components","Slider","emits","mixins","MediaUtils","props","type","Number","Object","default","__exports__","render","name","Utils","computed","audioExtensions","Set","videoExtensions","mediaExtensions","this","methods","time","parseFloat","t","h","parseInt","m","s","attr","ret","push","join","startStreaming","resource","pluginName","download","url","subtitles","request","media","stopStreaming","mediaId","media_id","withRange","_normalizeClass","withLabel","min","max","step","ref","onInput","_withModifiers","Boolean","Array","_hoisted_13","_hoisted_18","_hoisted_20","$data","loading","_createBlock","_component_Loading","key","$options","image","style","_normalizeStyle","backgroundImage","_hoisted_3","_hoisted_6","_hoisted_7","track","artist","title","_hoisted_10","_hoisted_11","_component_ProgressBar","onSeek","seek","_withControls","_hoisted_12","onClick","args","prev","playPause","_hoisted_16","_hoisted_17","stop","next","_hoisted_22","showVolumeBar","_hoisted_25","_hoisted_26","_hoisted_27","volume","setVolume","_hoisted_23","_hoisted_24","_hoisted_28","random","active","_hoisted_29","repeat","_hoisted_30","single","_hoisted_31","consume","Loading","ProgressBar","Status","plugin","String","refreshSeconds","withControls","data","timer","images","maxImages","syncTime","timestamp","parseBoolean","_refreshSeconds","trackUri","uri","file","refresh","_parseStatus","_parseTrack","stopTimer","startTimer","refreshImage","trackImage","resources","keys","length","statusPlugin","parseStatus","entries","indexOf","showNewTrackNotification","notify","html","icon","position","event","onNewPlayingTrack","previousTrack","onMusicStop","onMusicPlay","onMusicPause","Date","onSeekChange","onVolumeChange","onRepeatChange","onRandomChange","onConsumeChange","onSingleChange","setInterval","timerFunc","clearInterval","getTime","_run","action","mounted","subscribe","reduce","obj","k","v","playingPos","split","playlistPos","pos"],"sourceRoot":""}