platypush/platypush/backend/http/dist/static/js/chunk-37df3df6.8441b420.js.map

1 line
54 KiB
Plaintext

{"version":3,"sources":["webpack:///./src/components/elements/DropdownItem.vue?88d4","webpack:///./src/components/panels/Music/Index.vue","webpack:///./src/components/Media/View.vue","webpack:///./src/components/Media/Controls.vue","webpack:///./src/components/Media/Utils.vue","webpack:///./src/components/Media/Utils.vue?c9e1","webpack:///./src/components/Media/Controls.vue?9965","webpack:///./src/components/Media/View.vue?55b2","webpack:///./src/components/panels/Music/Nav.vue","webpack:///./src/components/panels/Music/Nav.vue?72ba","webpack:///./src/components/panels/Music/Playlist.vue","webpack:///./src/components/panels/Music/Header.vue","webpack:///./src/components/panels/Music/Header.vue?ac30","webpack:///./src/components/elements/Dropdown.vue","webpack:///./src/components/elements/Dropdown.vue?ce46","webpack:///./src/components/elements/DropdownItem.vue","webpack:///./src/components/elements/DropdownItem.vue?41ff","webpack:///./src/components/panels/Music/Playlist.vue?1c9f","webpack:///./src/components/panels/Music/Index.vue?080f","webpack:///./src/components/elements/Dropdown.vue?a084","webpack:///./node_modules/core-js/modules/es.string.repeat.js","webpack:///./src/components/panels/Music/Header.vue?78d1","webpack:///./src/components/panels/Music/Index.vue?4c2f","webpack:///./src/components/Media/View.vue?4cb6","webpack:///./src/components/panels/Music/Playlist.vue?c996","webpack:///./src/components/Media/Controls.vue?d58f","webpack:///./src/components/panels/Music/Nav.vue?c585"],"names":["class","loading","plugin-name","pluginName","status","track","$emit","$event","selected-view","selectedView","tracks","expanded","buttons","previous","title","stop","state","next","disabled","muted","value","volume","range","volumeRange","target","consume","random","repeat","convertTime","elapsed","duration","album","href","artist","name","methods","time","parseFloat","t","h","parseInt","m","s","attr","ret","push","join","components","Slider","mixins","Utils","emits","props","type","Object","default","Array","data","lastSync","this","computed","getTime","Date","mounted","self","$watch","setInterval","Math","round","render","__scopeId","Controls","String","required","views","view","key","displayName","iconClass","collapsed","Boolean","playing","search","playlists","library","placeholder","$refs","addToPlaylistModal","visible","icon-class","text","length","savePlaylistModal","selectionMode","selectedTracks","keys","i","ref","toggle","id","items","documentClickHndl","event","element","dropdown","parentElement","close","document","removeEventListener","open","addEventListener","setTimeout","style","left","top","getComputedStyle","button","height","maxOffset","maxLeft","window","innerWidth","container","offsetLeft","width","clientWidth","clicked","$parent","DropdownItem","Dropdown","Modal","MusicHeader","Nav","MediaView","Playlist","config","playingPos","onStatusEvent","plugin_name","onPlaylistEvent","onNewPlayingTrack","notify","subscribe","unmounted","unsubscribe","$","proto"],"mappings":"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","file":"static/js/chunk-37df3df6.8441b420.js","sourcesContent":["export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./DropdownItem.vue?vue&type=style&index=0&id=607f43da&lang=scss&scoped=true\"","<template>\n <Loading v-if=\"loading\" />\n\n <MediaView :plugin-name=\"pluginName\" :status=\"status\" :track=\"track\" @play=\"$emit('play', $event)\"\n @pause=\"$emit('pause')\" @stop=\"$emit('stop')\" @previous=\"$emit('previous')\" @next=\"$emit('next')\"\n @set-volume=\"$emit('set-volume', $event)\" @seek=\"$emit('seek', $event)\" @consume=\"$emit('consume', $event)\"\n @repeat=\"$emit('repeat', $event)\" @random=\"$emit('random', $event)\" v-else>\n <main>\n <div class=\"nav-container\">\n <Nav :selected-view=\"selectedView\" @input=\"selectedView = $event\" />\n </div>\n\n <div class=\"view-container\">\n <Playlist :tracks=\"tracks\" :status=\"status\" :loading=\"loading\" v-if=\"selectedView === 'playing'\"\n @play=\"$emit('play', $event)\" @clear=\"$emit('clear')\" />\n </div>\n </main>\n </MediaView>\n</template>\n\n<script>\nimport MediaView from \"@/components/Media/View\";\nimport Nav from \"@/components/panels/Music/Nav\";\nimport Playlist from \"@/components/panels/Music/Playlist\";\nimport Utils from \"@/Utils\";\n\nexport default {\n name: \"Music\",\n emits: ['play', 'pause', 'stop', 'clear', 'previous', 'next', 'set-volume', 'seek', 'consume', 'repeat', 'random',\n 'status-update', 'playlist-update', 'new-playing-track'],\n mixins: [Utils],\n components: {Nav, MediaView, Playlist},\n props: {\n pluginName: {\n type: String,\n required: true,\n },\n\n loading: {\n type: Boolean,\n default: false,\n },\n\n config: {\n type: Object,\n default: () => {},\n },\n\n tracks: {\n type: Array,\n default: () => [],\n },\n\n status: {\n type: Object,\n default: () => {},\n },\n },\n\n data() {\n return {\n selectedView: 'playing',\n }\n },\n\n computed: {\n track() {\n if (this.status?.playingPos == null)\n return null\n\n return this.tracks[this.status.playingPos]\n }\n },\n\n methods: {\n async onStatusEvent(event) {\n if (event.plugin_name !== this.pluginName)\n return\n\n this.$emit('status-update', event)\n },\n\n async onPlaylistEvent(event) {\n if (event.plugin_name !== this.pluginName)\n return\n\n this.$emit('playlist-update', event)\n },\n\n async onNewPlayingTrack(event) {\n if (event.plugin_name !== this.pluginName)\n return\n\n this.notify({\n title: event.track?.artist,\n text: event.track?.title,\n iconClass: 'fa fa-play',\n })\n\n this.$emit('new-playing-track', event)\n },\n },\n\n mounted() {\n this.subscribe(this.onStatusEvent, 'on-status-update',\n 'platypush.message.event.music.MusicPlayEvent',\n 'platypush.message.event.music.MusicPauseEvent',\n 'platypush.message.event.music.MusicStopEvent',\n 'platypush.message.event.music.SeekChangeEvent',\n 'platypush.message.event.music.VolumeChangeEvent',\n 'platypush.message.event.music.MuteChangeEvent',\n 'platypush.message.event.music.PlaybackRepeatModeChangeEvent',\n 'platypush.message.event.music.PlaybackRandomModeChangeEvent',\n 'platypush.message.event.music.PlaybackConsumeModeChangeEvent',\n 'platypush.message.event.music.PlaybackSingleModeChangeEvent',\n )\n\n this.subscribe(this.onPlaylistEvent, 'on-playlist-update',\n 'platypush.message.event.music.PlaylistChangeEvent')\n\n this.subscribe(this.onPlaylistEvent, 'on-new-playing-track',\n 'platypush.message.event.music.NewPlayingTrackEvent')\n },\n\n unmounted() {\n this.unsubscribe('on-status-update')\n this.unsubscribe('on-playlist-update')\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\nmain {\n height: 100%;\n background: $background-color;\n display: flex;\n flex-direction: row-reverse;\n\n .view-container {\n display: flex;\n flex-grow: 1;\n overflow: auto;\n }\n}\n</style>\n","<template>\n <div class=\"media-container\">\n <div class=\"view-container\">\n <slot />\n </div>\n <div class=\"controls-container\">\n <Controls :status=\"status\" :track=\"track\" @play=\"$emit('play', $event)\" @pause=\"$emit('pause', $event)\"\n @stop=\"$emit('stop')\" @previous=\"$emit('previous')\" @next=\"$emit('next')\" @seek=\"$emit('seek', $event)\"\n @set-volume=\"$emit('set-volume', $event)\" @consume=\"$emit('consume', $event)\"\n @repeat=\"$emit('repeat', $event)\" @random=\"$emit('random', $event)\" />\n </div>\n </div>\n</template>\n\n<script>\nimport Controls from \"@/components/Media/Controls\";\n\nexport default {\n name: \"View\",\n components: {Controls},\n emits: ['play', 'pause', 'stop', 'next', 'previous', 'set-volume', 'seek', 'consume', 'random', 'repeat'],\n props: {\n pluginName: {\n type: String,\n required: true,\n },\n\n status: {\n type: Object,\n default: () => {},\n },\n\n track: {\n type: Object,\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import 'vars.scss';\n\n.media-container {\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n position: relative;\n\n .view-container {\n height: calc(100% - #{$media-ctrl-panel-height});\n overflow: auto;\n }\n\n .controls-container {\n width: 100%;\n position: absolute;\n bottom: 0;\n border-top: $default-border-2;\n background: $default-bg-2;\n box-shadow: $border-shadow-top;\n }\n}\n</style>\n","<template>\n <div class=\"extension fade-in\" :class=\"{hidden: !expanded}\">\n <div class=\"row\">\n <div class=\"col-3\">\n </div>\n <div class=\"col-6\">\n <div class=\"buttons\">\n <button @click=\"$emit('previous')\" title=\"Play previous track\" v-if=\"buttons.previous\">\n <i class=\"icon fa fa-step-backward\"></i>\n </button>\n <button @click=\"$emit('stop')\" v-if=\"buttons.stop && status.state !== 'stop'\" title=\"Stop playback\">\n <i class=\"icon fa fa-stop\"></i>\n </button>\n <button @click=\"$emit('next')\" title=\"Play next track\" v-if=\"buttons.next\">\n <i class=\"icon fa fa-step-forward\"></i>\n </button>\n </div>\n </div>\n <div class=\"col-3\">\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"col-9 volume-container\">\n <div class=\"col-1\">\n <button :disabled=\"status.muted == null\" @click=\"$emit(status.muted ? 'unmute' : 'mute')\">\n <i class=\"icon fa fa-volume-up\"></i>\n </button>\n </div>\n <div class=\"col-11 volume-slider\">\n <Slider :value=\"status.volume\" :range=\"volumeRange\" :disabled=\"status.volume == null\"\n @mouseup=\"$emit('set-volume', $event.target.value)\" />\n </div>\n </div>\n\n <div class=\"col-3 list-controls\">\n <button @click=\"$emit('consume', !status.consume)\" :class=\"{enabled: status.consume}\"\n title=\"Toggle consume mode\" v-if=\"buttons.consume\">\n <i class=\"icon fa fa-utensils\"></i>\n </button>\n\n <button @click=\"$emit('random', !status.random)\" :class=\"{enabled: status.random}\"\n title=\"Toggle shuffle\" v-if=\"buttons.random\">\n <i class=\"icon fa fa-random\"></i>\n </button>\n\n <button @click=\"$emit('repeat', !status.repeat)\" :class=\"{enabled: status.repeat}\"\n title=\"Toggle repeat\" v-if=\"buttons.repeat\">\n <i class=\"icon fa fa-redo\"></i>\n </button>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"col-s-2 col-m-1 time\">\n <span class=\"elapsed-time\"\n v-text=\"elapsed != null && status.state !== 'stop' ? convertTime(elapsed) : '-:--'\"></span>\n </div>\n <div class=\"col-s-8 col-m-10\">\n <Slider :value=\"elapsed\" :range=\"[0, duration]\" :disabled=\"!duration || status.state === 'stop'\"\n @mouseup=\"$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 </div>\n\n <div class=\"controls\">\n <div class=\"playback-controls mobile tablet col-2\">\n <button @click=\"$emit(status.state === 'play' ? 'pause' : 'play')\"\n :title=\"status.state === 'play' ? 'Pause' : 'Play'\">\n <i class=\"icon play-pause fa fa-pause\" v-if=\"status.state === 'play'\"></i>\n <i class=\"icon play-pause fa fa-play\" v-else></i>\n </button>\n </div>\n\n <div class=\"track-container col-s-8 col-m-8 col-l-3\">\n <div class=\"track-info\" v-if=\"track && status?.state !== 'stop'\">\n <div class=\"title\">\n <a href=\"#\" v-text=\"track.title\" @click=\"$emit('search', {album: track.album})\" v-if=\"track.album\"></a>\n <span v-text=\"track.title\" v-else></span>\n </div>\n <div class=\"artist\" v-if=\"track.artist\">\n <a href=\"#\" v-text=\"track.artist\" @click=\"$emit('search', {artist: track.artist})\"></a>\n </div>\n </div>\n </div>\n\n <div class=\"playback-controls desktop col-6\">\n <div class=\"row buttons\">\n <button @click=\"$emit('previous')\" title=\"Play previous track\" v-if=\"buttons.previous\">\n <i class=\"icon fa fa-step-backward\"></i>\n </button>\n <button @click=\"$emit(status.state === 'play' ? 'pause' : 'play')\"\n :title=\"status.state === 'play' ? 'Pause' : 'Play'\">\n <i class=\"icon play-pause fa fa-pause\" v-if=\"status.state === 'play'\"></i>\n <i class=\"icon play-pause fa fa-play\" v-else></i>\n </button>\n <button @click=\"$emit('stop')\" v-if=\"buttons.stop && status.state !== 'stop'\" title=\"Stop playback\">\n <i class=\"icon fa fa-stop\"></i>\n </button>\n <button @click=\"$emit('next')\" title=\"Play next track\" v-if=\"buttons.next\">\n <i class=\"icon fa fa-step-forward\"></i>\n </button>\n </div>\n\n <div class=\"row\">\n <div class=\"col-1 time\">\n <span class=\"elapsed-time\"\n v-text=\"elapsed != null && status.state !== 'stop' ? convertTime(elapsed) : '-:--'\"></span>\n </div>\n <div class=\"col-10\">\n <Slider :value=\"elapsed\" :range=\"[0, duration]\" :disabled=\"!duration || status.state === 'stop'\"\n @mouseup=\"$emit('seek', $event.target.value)\" />\n </div>\n <div class=\"col-1 time\">\n <span class=\"total-time\"\n v-text=\"duration && status.state !== 'stop' ? convertTime(duration) : '-:--'\"></span>\n </div>\n </div>\n </div>\n\n <div class=\"col-2 pull-right mobile tablet right-buttons\">\n <button @click=\"expanded = !expanded\" :title=\"expanded ? 'Show more controls' : 'Hide extra controls'\">\n <i class=\"fas\" :class=\"[`fa-chevron-${expanded ? 'down' : 'up'}`]\" />\n </button>\n </div>\n\n <div class=\"col-3 pull-right desktop\">\n <div class=\"row list-controls\">\n <button @click=\"$emit('consume')\" :class=\"{enabled: status.consume}\" title=\"Toggle consume mode\" v-if=\"buttons.consume\">\n <i class=\"icon fa fa-utensils\"></i>\n </button>\n <button @click=\"$emit('random')\" :class=\"{enabled: status.random}\" title=\"Toggle shuffle\" v-if=\"buttons.random\">\n <i class=\"icon fa fa-random\"></i>\n </button>\n <button @click=\"$emit('repeat')\" :class=\"{enabled: status.repeat}\" title=\"Toggle repeat\" v-if=\"buttons.repeat\">\n <i class=\"icon fa fa-redo\"></i>\n </button>\n </div>\n\n <div class=\"row volume-container\">\n <div class=\"col-2\">\n <button :disabled=\"status.muted == null\" @click=\"$emit(status.muted ? 'unmute' : 'mute')\">\n <i class=\"icon fa fa-volume-up\"></i>\n </button>\n </div>\n <div class=\"col-10\">\n <Slider :value=\"status.volume\" :range=\"volumeRange\" :disabled=\"status.volume == null\"\n @mouseup=\"$emit('set-volume', $event.target.value)\" />\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport Utils from \"@/Utils\"\nimport MediaUtils from \"@/components/Media/Utils\";\nimport Slider from \"@/components/elements/Slider\";\n\nexport default {\n name: \"Controls\",\n components: {Slider},\n mixins: [Utils, MediaUtils],\n emits: ['search', 'previous', 'next', 'play', 'pause', 'stop', 'seek', 'consume', 'random', 'repeat',\n 'set-volume', 'mute', 'unmute'],\n\n props: {\n track: {\n type: Object,\n },\n\n status: {\n type: Object,\n default: () => {},\n },\n\n // Enabled playback buttons\n buttons: {\n type: Object,\n default: () => {\n return {\n previous: true,\n next: true,\n stop: true,\n consume: true,\n random: true,\n repeat: true,\n }\n },\n },\n\n // Volume range\n volumeRange: {\n type: Array,\n default: () => [0, 100],\n }\n },\n\n data() {\n return {\n expanded: false,\n lastSync: 0,\n elapsed: this.status?.elapsed,\n }\n },\n\n computed: {\n duration() {\n return this.status?.duration != null ? this.status.duration : this.track?.duration\n },\n },\n\n methods: {\n getTime() {\n return (new Date()).getTime() / 1000\n }\n },\n\n mounted() {\n const self = this\n\n this.$watch(() => self.track, (track) => {\n if (!track || self.status?.state !== 'play')\n self.lastSync = this.getTime()\n })\n\n this.$watch(() => self.status, () => {\n self.lastSync = this.getTime()\n })\n\n setInterval(() => {\n if (self.status?.state === 'play')\n self.elapsed = (self.status?.elapsed || 0) + Math.round(this.getTime() - self.lastSync)\n }, 1000)\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import 'vars.scss';\n\nbutton {\n border: 0;\n &:hover {\n border: 0;\n\n .icon {\n color: $default-hover-fg;\n }\n }\n\n &.enabled {\n color: $selected-fg;\n }\n}\n\n.extension {\n box-shadow: $border-shadow-bottom;\n flex-direction: column;\n display: none;\n overflow: hidden;\n\n @include until($desktop) {\n display: flex;\n }\n\n .row {\n display: flex;\n }\n\n .buttons {\n justify-content: center;\n margin: 0;\n }\n\n .volume-container,\n .list-controls {\n display: flex;\n align-items: center;\n\n button {\n padding: 0 .25em;\n }\n }\n\n .list-controls {\n margin-top: -.5em;\n flex-flow: row-reverse;\n }\n\n .time {\n &:first-child {\n margin-left: .25em;\n }\n\n &:last-child {\n margin-right: .25em;\n }\n }\n\n .volume-slider {\n margin-left: 2.25em;\n }\n}\n\n.controls {\n width: 100%;\n height: $media-ctrl-panel-height;\n display: flex;\n padding: 1em .5em;\n overflow: hidden;\n\n .row {\n width: 100%;\n display: flex;\n }\n\n .track-container {\n display: flex;\n flex-direction: column;\n justify-content: center;\n margin-left: 0;\n\n @include until($tablet) {\n align-items: center;\n }\n\n a {\n color: initial;\n text-decoration: none;\n\n &:hover {\n color: $default-hover-fg;\n }\n }\n\n .artist, .title {\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .artist {\n opacity: 0.6;\n letter-spacing: .04em;\n }\n\n .title {\n font-weight: normal;\n font-size: 1em;\n letter-spacing: .05em;\n margin-bottom: .25em;\n }\n }\n\n .playback-controls {\n &.mobile {\n display: none;\n\n @include until($tablet) {\n display: flex !important;\n align-items: center;\n }\n }\n\n &.tablet {\n display: none;\n\n @media screen and (min-width: $tablet) and (max-width: $desktop - 1) {\n display: flex !important;\n align-items: center;\n }\n }\n\n .row {\n justify-content: center;\n }\n\n .buttons {\n height: 50%;\n align-items: center;\n }\n\n button {\n padding: 0;\n margin: 0 .75em;\n\n .play-pause {\n color: $play-btn-fg;\n font-size: 1.75em;\n\n &:hover {\n color: $default-hover-fg-2;\n }\n }\n }\n }\n\n .list-controls {\n height: 50%;\n opacity: 0.7;\n display: flex;\n align-items: center;\n margin-bottom: 1em;\n flex-flow: row-reverse;\n }\n\n .mobile.right-buttons {\n @include until ($desktop) {\n display: flex;\n align-items: center;\n justify-content: right;\n }\n }\n\n .pull-right {\n button {\n padding: 0;\n }\n\n .volume-container {\n button {\n background: none;\n }\n }\n }\n\n .seek-slider {\n width: 75%;\n }\n\n .volume-slider {\n width: 75%;\n margin-right: 1rem;\n }\n}\n\n.time {\n font-size: .7em;\n position: relative;\n}\n\n.elapsed-time {\n text-align: right;\n float: right;\n}\n\n.mobile {\n @include from($tablet) {\n display: none;\n }\n}\n\n.tablet {\n @media screen and (max-width: $tablet), screen and (min-width: $desktop - 1) {\n display: none;\n }\n}\n\n.desktop {\n @include until($desktop) {\n display: none;\n }\n}\n</style>\n","<script>\nexport default {\n name: \"Utils\",\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}\n</script>\n","import script from \"./Utils.vue?vue&type=script&lang=js\"\nexport * from \"./Utils.vue?vue&type=script&lang=js\"\n\nexport default script","import { render } from \"./Controls.vue?vue&type=template&id=0d70c0de&scoped=true&bindings={\\\"track\\\":\\\"props\\\",\\\"status\\\":\\\"props\\\",\\\"buttons\\\":\\\"props\\\",\\\"volumeRange\\\":\\\"props\\\",\\\"expanded\\\":\\\"data\\\",\\\"lastSync\\\":\\\"data\\\",\\\"elapsed\\\":\\\"data\\\",\\\"duration\\\":\\\"options\\\",\\\"getTime\\\":\\\"options\\\"}\"\nimport script from \"./Controls.vue?vue&type=script&lang=js\"\nexport * from \"./Controls.vue?vue&type=script&lang=js\"\n\nimport \"./Controls.vue?vue&type=style&index=0&id=0d70c0de&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-0d70c0de\"\n\nexport default script","import { render } from \"./View.vue?vue&type=template&id=b6f41ec8&scoped=true&bindings={\\\"pluginName\\\":\\\"props\\\",\\\"status\\\":\\\"props\\\",\\\"track\\\":\\\"props\\\"}\"\nimport script from \"./View.vue?vue&type=script&lang=js\"\nexport * from \"./View.vue?vue&type=script&lang=js\"\n\nimport \"./View.vue?vue&type=style&index=0&id=b6f41ec8&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-b6f41ec8\"\n\nexport default script","<template>\n <nav>\n <li v-for=\"(view, name) in views\" :key=\"name\" :title=\"view.displayName\"\n :class=\"{selected: name === selectedView}\" @click=\"$emit('input', name)\">\n <i :class=\"view.iconClass\" />\n </li>\n </nav>\n</template>\n\n<script>\nexport default {\n name: \"Nav\",\n emits: ['input'],\n props: {\n selectedView: {\n type: String,\n },\n\n collapsed: {\n type: Boolean,\n default: false,\n },\n\n views: {\n type: Object,\n default: () => {\n return {\n playing: {\n iconClass: 'fas fa-play',\n displayName: 'Now Playing',\n },\n\n search: {\n iconClass: 'fas fa-search',\n displayName: 'Search',\n },\n\n playlists: {\n iconClass: 'fas fa-list-ul',\n displayName: 'Playlists',\n },\n\n library: {\n iconClass: 'fas fa-compact-disc',\n displayName: 'Library',\n },\n }\n }\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import 'vars.scss';\n\nnav {\n width: $music-nav-width;\n height: 100%;\n background: $nav-collapsed-bg;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n box-shadow: 2.5px 0 4.5px 2px $nav-collapsed-fg;\n margin-left: 2.5px;\n overflow: hidden;\n\n li {\n display: flex;\n align-items: center;\n font-size: 1.2em;\n cursor: pointer;\n list-style: none;\n padding: .6em;\n opacity: 0.7;\n\n &.selected,\n &:hover {\n border-radius: 1.2em;\n margin: 0 0.2em;\n }\n\n &:hover {\n background: $nav-entry-collapsed-hover-bg;\n }\n\n &.selected {\n background: $nav-entry-collapsed-selected-bg;\n }\n\n }\n}\n</style>\n","import { render } from \"./Nav.vue?vue&type=template&id=04a75b69&scoped=true&bindings={\\\"selectedView\\\":\\\"props\\\",\\\"collapsed\\\":\\\"props\\\",\\\"views\\\":\\\"props\\\"}\"\nimport script from \"./Nav.vue?vue&type=script&lang=js\"\nexport * from \"./Nav.vue?vue&type=script&lang=js\"\n\nimport \"./Nav.vue?vue&type=style&index=0&id=04a75b69&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-04a75b69\"\n\nexport default script","<template>\n <Loading v-if=\"loading\" />\n\n <div class=\"playlist fade-in\" v-else>\n <div class=\"header-container\">\n <MusicHeader>\n <div class=\"col-8 filter\">\n <label>\n <input type=\"search\" placeholder=\"Filter\">\n </label>\n </div>\n\n <div class=\"col-4 buttons\">\n <button title=\"Add item\" @click=\"$refs.addToPlaylistModal.visible = true\">\n <i class=\"fa fa-plus\"></i>\n </button>\n\n <Dropdown title=\"Actions\" icon-class=\"fa fa-ellipsis-h\">\n <DropdownItem text=\"Save as playlist\" icon-class=\"fa fa-save\" :disabled=\"!tracks?.length\"\n @click=\"$refs.savePlaylistModal.visible = true\" />\n <DropdownItem text=\"Swap tracks\" icon-class=\"fa fa-retweet\" :disabled=\"tracks?.length !== 2 || !selectionMode\" />\n <DropdownItem :text=\"selectionMode ? 'End selection' : 'Start selection'\" icon-class=\"far fa-check-square\"\n :disabled=\"!tracks?.length\" @click=\"selectionMode = !selectionMode\" />\n <DropdownItem :text=\"selectedTracks?.length === tracks?.length ? 'Unselect all' : 'Select all'\"\n icon-class=\"fa fa-check-double\" :disabled=\"!tracks?.length\"\n @click=\"selectedTracks = [...Array(tracks.length).keys()]\" />\n <DropdownItem text=\"Clear playlist\" icon-class=\"fa fa-ban\" :disabled=\"!tracks?.length\" @click=\"$emit('clear')\" />\n </Dropdown>\n </div>\n </MusicHeader>\n </div>\n\n <div class=\"body\">\n <div class=\"no-content\" v-if=\"!tracks?.length\">\n No tracks are loaded\n </div>\n\n <div class=\"row track\" v-for=\"(track, i) in tracks\" :key=\"i\" @dblclick=\"$emit('play', {pos: i})\">\n <div class=\"col-10\">\n <div class=\"title\" v-text=\"track.title || '[No Title]'\" />\n <div class=\"artist\" v-text=\"track.artist || '[No Artist]'\" />\n <div class=\"album\" v-text=\"track.album\" v-if=\"track.album\" />\n </div>\n\n <div class=\"col-2 right-side\">\n <span class=\"duration\" v-text=\"convertTime(track.time)\" />\n\n <span class=\"actions\">\n <Dropdown title=\"Actions\" icon-class=\"fa fa-ellipsis-h\">\n <DropdownItem text=\"Play\" icon-class=\"fa fa-play\" @click=\"$emit('play', {pos: i})\" />\n <DropdownItem text=\"Add to playlist\" icon-class=\"fa fa-list-ul\" />\n </Dropdown>\n </span>\n </div>\n </div>\n </div>\n </div>\n\n <Modal :visible=\"false\" ref=\"addToPlaylistModal\">\n </Modal>\n\n <Modal :visible=\"false\" ref=\"savePlaylistModal\">\n </Modal>\n</template>\n\n<script>\nimport Modal from \"@/components/Modal\";\nimport MusicHeader from \"@/components/panels/Music/Header\";\nimport MediaUtils from \"@/components/Media/Utils\";\nimport Dropdown from \"@/components/elements/Dropdown\";\nimport DropdownItem from \"@/components/elements/DropdownItem\";\n\nexport default {\n name: \"Playlist\",\n mixins: [MediaUtils],\n components: {DropdownItem, Dropdown, Modal, MusicHeader},\n emits: ['play', 'clear', 'add-to-playlist'],\n props: {\n tracks: {\n type: Array,\n default: () => [],\n },\n\n loading: {\n type: Boolean,\n default: false,\n },\n\n status: {\n type: Object,\n default: () => {},\n }\n },\n\n data() {\n return {\n selectionMode: false,\n selectedTracks: [],\n }\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import 'vars.scss';\n\n.playlist {\n width: 100%;\n display: flex;\n flex-direction: column;\n\n .header-container {\n button {\n border: 0;\n background: none;\n }\n\n .filter {\n input {\n width: 100%;\n }\n }\n\n .buttons {\n display: flex;\n justify-content: right;\n }\n }\n\n .body {\n height: calc(100% - #{$music-header-height});\n overflow: auto;\n }\n\n .no-content {\n height: 100%;\n }\n\n .track {\n display: flex;\n justify-content: center;\n padding: .75em .25em .25em .25em;\n box-shadow: 0 2.5px 2px -1px $default-shadow-color;\n cursor: pointer;\n\n &:hover {\n background: $hover-bg;\n }\n\n .title {\n font-size: 1em;\n font-weight: normal;\n margin: 0;\n }\n\n .artist, .album {\n display: inline-flex;\n opacity: 0.7;\n font-size: .9em;\n }\n\n .artist {\n margin-right: .25em;\n }\n\n .album {\n @include until($tablet) {\n display: none;\n }\n\n &::before {\n content: \"\\2022\";\n margin-right: .25em;\n }\n }\n\n .right-side {\n display: flex;\n justify-content: right;\n }\n\n .duration,\n .actions {\n display: inline-flex;\n align-items: center;\n }\n\n .duration {\n font-size: .85em;\n opacity: .7;\n }\n\n .actions {\n ::v-deep button {\n opacity: .7;\n }\n }\n }\n}\n\n::v-deep button {\n background: none;\n padding: .5em .75em;\n border: 0;\n}\n</style>\n","<template>\n <div class=\"header\">\n <slot />\n </div>\n</template>\n\n<script>\nexport default {\n name: \"Header\"\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import 'vars.scss';\n\n.header {\n width: 100%;\n height: $music-header-height;\n background: $menu-panel-bg;\n padding: .5em;\n box-shadow: $border-shadow-bottom;\n}\n</style>\n","import { render } from \"./Header.vue?vue&type=template&id=25f0cdf5&scoped=true&bindings={}\"\nimport script from \"./Header.vue?vue&type=script&lang=js\"\nexport * from \"./Header.vue?vue&type=script&lang=js\"\n\nimport \"./Header.vue?vue&type=style&index=0&id=25f0cdf5&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-25f0cdf5\"\n\nexport default script","<template>\n <div class=\"dropdown-container\" ref=\"container\">\n <button :title=\"title\" ref=\"button\" @click.stop=\"toggle\">\n <i class=\"icon\" :class=\"iconClass\" v-if=\"iconClass\" />\n <span class=\"text\" v-text=\"text\" v-if=\"text\" />\n </button>\n\n <div class=\"dropdown fade-in\" :id=\"id\" :class=\"{hidden: !visible}\" ref=\"dropdown\">\n <slot />\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: \"Dropdown\",\n emits: ['click'],\n props: {\n id: {\n type: String,\n },\n\n items: {\n type: Array,\n default: () => [],\n },\n\n iconClass: {\n type: String,\n },\n\n text: {\n type: String,\n },\n\n title: {\n type: String,\n },\n },\n\n data() {\n return {\n visible: false,\n }\n },\n\n methods: {\n documentClickHndl(event) {\n if (!this.visible)\n return\n\n let element = event.target\n while (element) {\n if (element === this.$refs.dropdown.element) {\n return\n }\n\n element = element.parentElement\n }\n\n this.close()\n },\n\n close() {\n this.visible = false\n document.removeEventListener('click', this.documentClickHndl)\n },\n\n open() {\n document.addEventListener('click', this.documentClickHndl)\n this.visible = true\n\n setTimeout(() => {\n const element = this.$refs.dropdown\n element.style.left = 0\n element.style.top = parseFloat(getComputedStyle(this.$refs.button).height) + 'px'\n\n const maxOffset = 45\n const maxLeft = window.innerWidth - maxOffset\n const left = this.$refs.container.offsetLeft + element.offsetLeft\n const width = element.clientWidth\n\n if (left + width >= maxLeft) {\n element.style.left = -(parseFloat(getComputedStyle(this.$refs.button).width) + maxOffset) + 'px'\n }\n }, 10)\n },\n\n toggle() {\n this.visible ? this.close() : this.open()\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.dropdown-container {\n position: relative;\n display: flex;\n flex-direction: column;\n\n .dropdown {\n position: absolute;\n width: max-content;\n background: $dropdown-bg;\n border-radius: .25em;\n border: $default-border-3;\n box-shadow: $dropdown-shadow;\n display: flex;\n flex-direction: column;\n z-index: 1;\n }\n}\n</style>\n","import { render } from \"./Dropdown.vue?vue&type=template&id=a2c79a74&scoped=true&bindings={\\\"id\\\":\\\"props\\\",\\\"items\\\":\\\"props\\\",\\\"iconClass\\\":\\\"props\\\",\\\"text\\\":\\\"props\\\",\\\"title\\\":\\\"props\\\",\\\"visible\\\":\\\"data\\\",\\\"documentClickHndl\\\":\\\"options\\\",\\\"close\\\":\\\"options\\\",\\\"open\\\":\\\"options\\\",\\\"toggle\\\":\\\"options\\\"}\"\nimport script from \"./Dropdown.vue?vue&type=script&lang=js\"\nexport * from \"./Dropdown.vue?vue&type=script&lang=js\"\n\nimport \"./Dropdown.vue?vue&type=style&index=0&id=a2c79a74&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-a2c79a74\"\n\nexport default script","<template>\n <div class=\"row item\" @click=\"clicked\">\n <div class=\"col-1 icon\">\n <i :class=\"iconClass\" v-if=\"iconClass\" />\n </div>\n <div class=\"col-11 text\" v-text=\"text\" />\n </div>\n</template>\n\n<script>\nexport default {\n name: \"DropdownItem\",\n props: {\n iconClass: {\n type: String,\n },\n\n text: {\n type: String,\n },\n\n disabled: {\n type: Boolean,\n default: false,\n },\n },\n\n methods: {\n clicked(event) {\n this.$parent.$emit('click', event)\n this.$parent.visible = false\n }\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.item {\n display: flex;\n padding: .5em .25em;\n cursor: pointer;\n align-items: center;\n\n &:hover {\n background: $hover-bg;\n }\n\n &.disabled {\n color: $dropdown-disabled-color;\n cursor: initial;\n }\n\n .icon {\n margin: 0 .5rem;\n }\n}\n</style>\n","import { render } from \"./DropdownItem.vue?vue&type=template&id=607f43da&scoped=true&bindings={\\\"iconClass\\\":\\\"props\\\",\\\"text\\\":\\\"props\\\",\\\"disabled\\\":\\\"props\\\",\\\"clicked\\\":\\\"options\\\"}\"\nimport script from \"./DropdownItem.vue?vue&type=script&lang=js\"\nexport * from \"./DropdownItem.vue?vue&type=script&lang=js\"\n\nimport \"./DropdownItem.vue?vue&type=style&index=0&id=607f43da&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-607f43da\"\n\nexport default script","import { render } from \"./Playlist.vue?vue&type=template&id=1c0ed8fb&scoped=true&bindings={\\\"tracks\\\":\\\"props\\\",\\\"loading\\\":\\\"props\\\",\\\"status\\\":\\\"props\\\",\\\"selectionMode\\\":\\\"data\\\",\\\"selectedTracks\\\":\\\"data\\\"}\"\nimport script from \"./Playlist.vue?vue&type=script&lang=js\"\nexport * from \"./Playlist.vue?vue&type=script&lang=js\"\n\nimport \"./Playlist.vue?vue&type=style&index=0&id=1c0ed8fb&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-1c0ed8fb\"\n\nexport default script","import { render } from \"./Index.vue?vue&type=template&id=446cd6ea&scoped=true&bindings={\\\"pluginName\\\":\\\"props\\\",\\\"loading\\\":\\\"props\\\",\\\"config\\\":\\\"props\\\",\\\"tracks\\\":\\\"props\\\",\\\"status\\\":\\\"props\\\",\\\"selectedView\\\":\\\"data\\\",\\\"track\\\":\\\"options\\\",\\\"onStatusEvent\\\":\\\"options\\\",\\\"onPlaylistEvent\\\":\\\"options\\\",\\\"onNewPlayingTrack\\\":\\\"options\\\"}\"\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=446cd6ea&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-446cd6ea\"\n\nexport default script","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Dropdown.vue?vue&type=style&index=0&id=a2c79a74&lang=scss&scoped=true\"","var $ = require('../internals/export');\nvar repeat = require('../internals/string-repeat');\n\n// `String.prototype.repeat` method\n// https://tc39.github.io/ecma262/#sec-string.prototype.repeat\n$({ target: 'String', proto: true }, {\n repeat: repeat\n});\n","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Header.vue?vue&type=style&index=0&id=25f0cdf5&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Index.vue?vue&type=style&index=0&id=446cd6ea&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./View.vue?vue&type=style&index=0&id=b6f41ec8&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Playlist.vue?vue&type=style&index=0&id=1c0ed8fb&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Controls.vue?vue&type=style&index=0&id=0d70c0de&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Nav.vue?vue&type=style&index=0&id=04a75b69&lang=scss&scoped=true\""],"sourceRoot":""}