platypush/platypush/backend/http/webapp/dist/static/js/chunk-0b6bec58.dae9d413.js.map

1 line
97 KiB
Plaintext

{"version":3,"sources":["webpack:///./src/components/elements/FormFooter.vue?502c","webpack:///./src/components/panels/Music/Library.vue?8325","webpack:///./src/components/panels/Music/Index.vue","webpack:///./src/components/elements/FormFooter.vue","webpack:///./src/components/elements/FormFooter.vue?3524","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/panels/Music/Playlist.vue?1c9f","webpack:///./src/components/panels/Music/Playlists.vue","webpack:///./src/components/panels/Music/Playlists.vue?d2dd","webpack:///./src/components/panels/Music/Search.vue","webpack:///./src/components/panels/Music/Search.vue?b16e","webpack:///./src/components/panels/Music/Library.vue","webpack:///./src/components/panels/Music/Library.vue?3483","webpack:///./src/components/panels/Music/Index.vue?080f","webpack:///./src/components/panels/Music/Search.vue?5d40","webpack:///./src/components/panels/Music/Playlists.vue?74be","webpack:///./src/components/panels/Music/Nav.vue?eef5","webpack:///./node_modules/core-js/modules/es.array.splice.js","webpack:///./src/components/panels/Music/Playlist.vue?22b1","webpack:///./src/components/panels/Music/Index.vue?0fca","webpack:///./src/components/panels/Music/Header.vue?0864"],"names":["class","plugin-name","pluginName","status","track","$emit","$event","search","selected-view","selectedView","tracks","loading","devices","selected-device","selectedDevice","active-device","activeDevice","openAddToPlaylist","refreshStatus","selectDevice","playlists","edited-playlist","editedPlaylist","editedPlaylistTracks","results","searchResults","libraryResults","path","title","ref","trackInfo","file","artist","href","$route","fullPath","album","date","time","disc","url","uri","target","addToPlaylistTrack","selectedPlaylists","Array","length","keys","map","type","placeholder","playlistFilter","playlist","i","name","toLowerCase","indexOf","key","checked","addToPlaylist","render","__scopeId","views","view","displayName","iconClass","emits","props","String","collapsed","Boolean","default","Object","playing","library","filter","icon-class","text","disabled","playlistSave","selectedTracks","selectionMode","Set","addTrack","device","id","item-class","selectedTracksSet","has","playingPos","displayedTracks","onTrackDragStart","onTrackDragEnd","onTrackDragOver","draggable","onTrackClick","state","convertTime","mixins","components","DropdownItem","Dropdown","MusicHeader","Loading","data","infoTrack","sourcePos","targetPos","computed","this","positions","self","pos","methods","event","shiftKey","sort","idx","ctrlKey","splice","push","prompt","$refs","body","querySelectorAll","forEach","classList","remove","from","to","add","mounted","$watch","trackElement","offset","offsetTop","parseFloat","getComputedStyle","header","$el","height","scrollTo","trackFilter","displayedPlaylists","Number","editor","formCollapsed","clear","filteredQuery","query","any","result","selectedResults","resultClick","parseInt","play","load","FormFooter","entries","o","reduce","obj","k","v","size","min","Math","max","delete","back","displayedResults","directory","split","pop","slice","join","Modal","Nav","MediaView","Playlist","Playlists","Search","Library","required","config","onStatusEvent","plugin_name","onPlaylistEvent","onNewPlayingTrack","notify","html","image","playlistsModal","isVisible","subscribe","info","unmounted","unsubscribe","$","toAbsoluteIndex","toInteger","toLength","toObject","arraySpeciesCreate","createProperty","arrayMethodHasSpeciesSupport","HAS_SPECIES_SUPPORT","MAX_SAFE_INTEGER","MAXIMUM_ALLOWED_LENGTH_EXCEEDED","proto","forced","start","deleteCount","insertCount","actualDeleteCount","A","O","len","actualStart","argumentsLength","arguments","TypeError"],"mappings":"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","file":"static/js/chunk-0b6bec58.dae9d413.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!./FormFooter.vue?vue&type=style&index=0&id=2495ce8a&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!./Library.vue?vue&type=style&index=0&id=c3245ea8&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)\" @search=\"search\" 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\" :devices=\"devices\"\n :selected-device=\"selectedDevice\" :active-device=\"activeDevice\" v-if=\"selectedView === 'playing'\"\n @play=\"$emit('play', $event)\" @clear=\"$emit('clear')\" @swap=\"$emit('swap-tracks', $event)\"\n @add=\"$emit('add-to-tracklist', $event)\" @remove=\"$emit('remove-from-tracklist', $event)\"\n @move=\"$emit('tracklist-move', $event)\" @save=\"$emit('tracklist-save', $event)\"\n @info=\"$emit('info', $event)\" @add-to-playlist=\"openAddToPlaylist\" @search=\"search\"\n @refresh-status=\"refreshStatus\" @select-device=\"selectDevice\" />\n\n <Playlists :playlists=\"playlists\" :loading=\"loading\" :devices=\"devices\"\n :selected-device=\"selectedDevice\" :active-device=\"activeDevice\" v-else-if=\"selectedView === 'playlists'\"\n :edited-playlist=\"editedPlaylist\" :tracks=\"editedPlaylistTracks\"\n @play=\"$emit('play-playlist', $event)\" @load=\"$emit('load-playlist', $event)\"\n @remove=\"$emit('remove-playlist', $event)\" @playlist-edit=\"$emit('playlist-edit', $event)\"\n @load-track=\"$emit('add-to-tracklist-from-edited-playlist', $event)\"\n @remove-track=\"$emit('remove-from-playlist', $event)\" @info=\"$emit('info', $event)\"\n @playlist-add=\"$emit('playlist-add', $event)\" @add-to-playlist=\"openAddToPlaylist\"\n @track-move=\"$emit('playlist-track-move', $event)\" @search=\"search\"\n @refresh-status=\"refreshStatus\" @select-device=\"selectDevice\" />\n\n <Search :loading=\"loading\" v-else-if=\"selectedView === 'search'\" :devices=\"devices\"\n :selected-device=\"selectedDevice\" :active-device=\"activeDevice\" @search=\"search\"\n :results=\"searchResults\" @clear=\"$emit('search-clear')\" @info=\"$emit('info', $event)\"\n @play=\"$emit('play', $event)\" @load=\"$emit('add-to-tracklist', $event)\"\n @add-to-playlist=\"openAddToPlaylist\" @refresh-status=\"refreshStatus\" @select-device=\"selectDevice\" />\n\n <Library :loading=\"loading\" v-else-if=\"selectedView === 'library'\" :devices=\"devices\"\n :selected-device=\"selectedDevice\" :active-device=\"activeDevice\" @search=\"search\"\n :results=\"libraryResults\" :path=\"path\" @clear=\"$emit('search-clear')\" @info=\"$emit('info', $event)\"\n @play=\"$emit('play', $event)\" @load=\"$emit('add-to-tracklist', $event)\"\n @add-to-playlist=\"openAddToPlaylist\" @cd=\"$emit('cd', $event)\" @refresh-status=\"refreshStatus\"\n @select-device=\"selectDevice\" />\n </div>\n </main>\n </MediaView>\n\n <div class=\"track-info-container\">\n <Modal title=\"Track info\" ref=\"trackInfo\">\n <div class=\"track-info-content\" v-if=\"trackInfo\">\n <div class=\"row file\" v-if=\"trackInfo.file\">\n <div class=\"col-3 attr\">File</div>\n <div class=\"col-9 value\" v-text=\"trackInfo.file\" />\n </div>\n\n <div class=\"row artist\" v-if=\"trackInfo.artist\">\n <div class=\"col-3 attr\">Artist</div>\n <div class=\"col-9 value\">\n <a :href=\"$route.fullPath\" v-text=\"trackInfo.artist\" @click.prevent=\"search({artist: trackInfo.artist})\" />\n </div>\n </div>\n\n <div class=\"row track-title\" v-if=\"trackInfo.title\">\n <div class=\"col-3 attr\">Title</div>\n <div class=\"col-9 value\" v-text=\"trackInfo.title\" />\n </div>\n\n <div class=\"row album\" v-if=\"trackInfo.album\">\n <div class=\"col-3 attr\">Album</div>\n <div class=\"col-9 value\">\n <a :href=\"$route.fullPath\" v-text=\"trackInfo.album\"\n @click.prevent=\"search({artist: trackInfo.artist, album: trackInfo.album})\" />\n </div>\n </div>\n\n <div class=\"row date\" v-if=\"trackInfo.date\">\n <div class=\"col-3 attr\">Date</div>\n <div class=\"col-9 value\" v-text=\"trackInfo.date\" />\n </div>\n\n <div class=\"row duration\" v-if=\"trackInfo.time\">\n <div class=\"col-3 attr\">Duration</div>\n <div class=\"col-9 value\" v-text=\"convertTime(trackInfo.time)\" />\n </div>\n\n <div class=\"row track\" v-if=\"trackInfo.track\">\n <div class=\"col-3 attr\">Track</div>\n <div class=\"col-9 value\" v-text=\"trackInfo.track\" />\n </div>\n\n <div class=\"row disc\" v-if=\"trackInfo.disc\">\n <div class=\"col-3 attr\">Disc</div>\n <div class=\"col-9 value\" v-text=\"trackInfo.disc\" />\n </div>\n\n <div class=\"row url\" v-if=\"trackInfo.url\">\n <div class=\"col-3 attr\">URL</div>\n <div class=\"col-9 value\">\n <a :href=\"trackInfo.url\" v-text=\"trackInfo.uri || trackInfo.url\" target=\"_blank\" />\n </div>\n </div>\n </div>\n </Modal>\n </div>\n\n <div class=\"playlists-modal-container\">\n <Modal title=\"Playlists\" ref=\"playlistsModal\" @close=\"addToPlaylistTrack = null\"\n @open=\"selectedPlaylists = [...Array(playlists.length).keys()].map(() => false)\">\n <div class=\"filter\">\n <label>\n <input type=\"search\" placeholder=\"Filter\" v-model=\"playlistFilter\">\n </label>\n </div>\n\n <div class=\"playlists\">\n <label class=\"row playlist\" v-for=\"(playlist, i) in playlists\" :key=\"i\"\n :class=\"{hidden: playlistFilter?.length > 0 && playlist.name.toLowerCase().indexOf(playlistFilter.toLowerCase()) < 0}\">\n <input type=\"checkbox\" :checked=\"selectedPlaylists[i]\"\n @change=\"selectedPlaylists[i] = $event.target.checked\" />\n <span class=\"name\" v-text=\"playlist.name\" />\n </label>\n </div>\n\n <FormFooter>\n <button @click=\"addToPlaylist\">\n <i class=\"fa fa-plus\" /> &nbsp; Add\n </button>\n </FormFooter>\n </Modal>\n </div>\n</template>\n\n<script>\nimport FormFooter from \"@/components/elements/FormFooter\";\nimport Loading from \"@/components/Loading\";\nimport Modal from \"@/components/Modal\";\nimport MediaUtils from \"@/components/Media/Utils\";\nimport MediaView from \"@/components/Media/View\";\nimport Nav from \"@/components/panels/Music/Nav\";\nimport Playlist from \"@/components/panels/Music/Playlist\";\nimport Playlists from \"@/components/panels/Music/Playlists\";\nimport Search from \"@/components/panels/Music/Search\";\nimport Library from \"@/components/panels/Music/Library\";\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', 'add-to-tracklist', 'remove-from-tracklist',\n 'swap-tracks', 'play-playlist', 'load-playlist', 'remove-playlist', 'tracklist-move', 'tracklist-save',\n 'add-to-tracklist-from-edited-playlist', 'remove-from-playlist', 'info', 'playlist-add', 'add-to-playlist',\n 'playlist-track-move', 'search', 'search-clear', 'cd', 'refresh-status', 'select-device'],\n\n mixins: [Utils, MediaUtils],\n components: {Loading, Modal, Nav, MediaView, Playlist, Playlists, FormFooter, Search, Library},\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 editedPlaylistTracks: {\n type: Array,\n default: () => [],\n },\n\n playlists: {\n type: Array,\n default: () => [],\n },\n\n status: {\n type: Object,\n default: () => {},\n },\n\n editedPlaylist: {\n type: Number,\n },\n\n trackInfo: {\n type: String,\n },\n\n searchResults: {\n type: Array,\n },\n\n libraryResults: {\n type: Array,\n },\n\n path: {\n type: String,\n },\n\n devices: {\n type: Object,\n },\n\n activeDevice: {\n type: String,\n },\n\n selectedDevice: {\n type: String,\n },\n },\n\n data() {\n return {\n selectedView: 'playing',\n selectedPlaylists: [],\n addToPlaylistTrack: null,\n playlistFilter: '',\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 html: `<b>${event.track?.artist}</b><br>${event.track?.title}`,\n image: {\n iconClass: 'fa fa-play',\n },\n })\n\n this.$emit('new-playing-track', event)\n },\n\n async openAddToPlaylist(track) {\n this.addToPlaylistTrack = track\n this.$refs.playlistsModal.isVisible = true\n },\n\n async addToPlaylist() {\n this.$emit('add-to-playlist', {\n track: this.addToPlaylistTrack,\n playlists: [...Array(this.selectedPlaylists.length).keys()].filter((i) => this.selectedPlaylists[i])\n })\n\n this.$refs.playlistsModal.isVisible = false\n this.addToPlaylistTrack = null\n this.playlistFilter = ''\n },\n\n async search(filter) {\n this.$emit('search', filter)\n this.$refs.trackInfo.isVisible = false\n this.selectedView = 'search'\n },\n\n selectDevice(id) {\n this.$emit('select-device', id)\n },\n\n refreshStatus() {\n this.$emit('refresh-status')\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.onNewPlayingTrack, 'on-new-playing-track',\n 'platypush.message.event.music.NewPlayingTrackEvent')\n\n this.$watch(() => this.trackInfo, (info) => {\n if (info != null)\n this.$refs.trackInfo.isVisible = true\n })\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 ::v-deep(button) {\n background: none;\n padding: .5em .75em;\n border: 0;\n\n &:hover {\n border: 0;\n color: $default-hover-fg;\n }\n }\n\n ::v-deep(a) {\n color: $default-fg;\n opacity: 0.65;\n\n &:hover {\n opacity: 0.75;\n border-bottom: 1px dotted;\n }\n }\n}\n\n.playlists-modal-container {\n ::v-deep(.body) {\n display: flex;\n flex-direction: column;\n padding: 0 !important;\n }\n\n ::v-deep(.filter) {\n padding: .33em;\n background-color: $default-bg-6;\n border-bottom: $default-border-2;\n\n input {\n width: 90%;\n }\n }\n\n ::v-deep(.playlists) {\n overflow: auto;\n padding: 1.5em;\n\n label {\n display: flex;\n align-items: center;\n\n &:not(:last-child) {\n margin-bottom: .5em;\n }\n\n .name {\n margin-left: .5em;\n }\n }\n }\n}\n\n.track-info-container {\n ::v-deep(.body) {\n height: 15em;\n overflow: auto;\n\n @include until($tablet) {\n width: 25em;\n }\n\n @include from($tablet) {\n width: 35em;\n }\n\n .file {\n user-select: text;\n }\n }\n}\n</style>\n","<template>\n <div class=\"form-footer\">\n <slot />\n </div>\n</template>\n\n<script>\nexport default {\n name: \"FormFooter\"\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.form-footer {\n height: 5em;\n padding: 1em;\n text-align: right;\n border-top: $default-border-2;\n}\n</style>\n","import { render } from \"./FormFooter.vue?vue&type=template&id=2495ce8a&scoped=true\"\nimport script from \"./FormFooter.vue?vue&type=script&lang=js\"\nexport * from \"./FormFooter.vue?vue&type=script&lang=js\"\n\nimport \"./FormFooter.vue?vue&type=style&index=0&id=2495ce8a&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-2495ce8a\"\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: 'Queue',\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=edee6494&scoped=true\"\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=edee6494&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-edee6494\"\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 ref=\"header\">\n <div class=\"col-8 filter\">\n <label>\n <input type=\"search\" placeholder=\"Filter\" v-model=\"filter\">\n </label>\n </div>\n\n <div class=\"col-4 buttons\">\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=\"playlistSave\" />\n <DropdownItem text=\"Swap tracks\" icon-class=\"fa fa-retweet\" v-if=\"selectedTracks?.length === 2\"\n @click=\"$emit('swap', selectedTracks)\" />\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 = selectedTracks.length === tracks.length ? [] : [...Array(tracks.length).keys()]\" />\n <DropdownItem :text=\"'Remove track' + (selectedTracks.length > 1 ? 's' : '')\"\n icon-class=\"fa fa-trash\" v-if=\"selectedTracks.length > 0\"\n @click=\"$emit('remove', [...(new Set(selectedTracks))])\" />\n <DropdownItem text=\"Clear playlist\" icon-class=\"fa fa-ban\" :disabled=\"!tracks?.length\" @click=\"$emit('clear')\" />\n </Dropdown>\n\n <button title=\"Add track\" @click=\"addTrack\">\n <i class=\"fa fa-plus\"></i>\n </button>\n\n <button title=\"Refresh status\" @click=\"$emit('refresh-status')\" v-if=\"devices != null\">\n <i class=\"fa fa-sync\"></i>\n </button>\n\n <Dropdown title=\"Players\" icon-class=\"fa fa-volume-up\" v-if=\"Object.keys(devices || {}).length\">\n <DropdownItem v-for=\"(device, id) in devices\" :key=\"id\" v-text=\"device.name\"\n :item-class=\"{active: activeDevice === id, selected: selectedDevice === id}\"\n icon-class=\"fa fa-volume-up\" @click=\"$emit('select-device', id)\" />\n </Dropdown>\n </div>\n </MusicHeader>\n </div>\n\n <div class=\"body\" ref=\"body\">\n <div class=\"no-content\" v-if=\"!tracks?.length\">\n No tracks are loaded\n </div>\n\n <div class=\"row track\" @dragstart=\"onTrackDragStart(i)\" @dragend=\"onTrackDragEnd(i)\"\n @dragover=\"onTrackDragOver(i)\" draggable=\"true\"\n :class=\"{selected: selectedTracksSet.has(i), active: status?.playingPos === i, hidden: !displayedTracks.has(i)}\"\n v-for=\"(track, i) in tracks\" :key=\"i\" @click=\"onTrackClick($event, i)\" @dblclick=\"$emit('play', {pos: i})\">\n <div class=\"col-10\">\n <div class=\"title\">\n {{ track.title || '[No Title]' }}\n <div class=\"playing-icon\" :class=\"{paused: status?.state === 'pause'}\"\n v-if=\"status?.playingPos === i && (status?.state === 'play' || status?.state === 'pause')\">\n <span v-for=\"i in [...Array(3).keys()]\" :key=\"i\" />\n </div>\n </div>\n\n <div class=\"artist\" v-if=\"track.artist\">\n <a :href=\"$route.fullPath\" v-text=\"track.artist\"\n @click.prevent=\"$emit('search', {artist: track.artist})\" />\n </div>\n\n <div class=\"album\" v-if=\"track.album\">\n <a :href=\"$route.fullPath\" v-text=\"track.album\"\n @click.prevent=\"$emit('search', {artist: track.artist, album: track.album})\" />\n </div>\n </div>\n\n <div class=\"col-2 right-side\">\n <span class=\"duration\" v-text=\"track.time ? 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\" @click=\"$emit('add-to-playlist', track)\" />\n <DropdownItem text=\"Remove\" icon-class=\"fa fa-trash\" @click=\"$emit('remove', [...(new Set([...selectedTracks, i]))])\" />\n <DropdownItem text=\"Info\" icon-class=\"fa fa-info\" @click=\"$emit('info', tracks[i])\" />\n </Dropdown>\n </span>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\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\";\nimport Loading from \"@/components/Loading\";\n\nexport default {\n name: \"Playlist\",\n mixins: [MediaUtils],\n components: {DropdownItem, Dropdown, MusicHeader, Loading},\n emits: ['play', 'clear', 'add', 'remove', 'swap', 'search', 'move', 'save', 'info', 'refresh-status',\n 'select-device'],\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 devices: {\n type: Object,\n },\n\n selectedDevice: {\n type: String,\n },\n\n activeDevice: {\n type: String,\n },\n },\n\n data() {\n return {\n selectionMode: false,\n selectedTracks: [],\n filter: '',\n infoTrack: null,\n sourcePos: null,\n targetPos: null,\n }\n },\n\n computed: {\n selectedTracksSet() {\n return new Set(this.selectedTracks)\n },\n\n displayedTracks() {\n const positions = [...Array(this.tracks.length).keys()]\n if (!this.filter?.length)\n return new Set(positions)\n\n const self = this\n const filter = (self.filter || '').toLowerCase()\n\n return new Set(\n positions.filter((pos) => {\n const track = this.tracks[pos]\n return (track?.artist || '').toLowerCase().indexOf(filter) >= 0\n || (track?.title || '').toLowerCase().indexOf(filter) >= 0\n || (track?.album || '').toLowerCase().indexOf(filter) >= 0\n })\n )\n },\n },\n\n methods: {\n onTrackClick(event, pos) {\n if (event.shiftKey) {\n const selectedTracks = this.selectedTracks.sort()\n if (!selectedTracks.length) {\n this.selectedTracks = [pos]\n } else if (pos < selectedTracks[0]) {\n this.selectedTracks = [\n ...this.selectedTracks,\n ...[...Array(selectedTracks[0] - pos).keys()].map((i) => i + pos)\n ]\n } else if (pos > selectedTracks[selectedTracks.length - 1]) {\n this.selectedTracks = [\n ...this.selectedTracks,\n ...[...Array(pos - selectedTracks[selectedTracks.length - 1] + 1).keys()].\n map((i) => i + selectedTracks[selectedTracks.length - 1])\n ]\n }\n } else {\n const idx = this.selectedTracks.indexOf(pos)\n if (this.selectionMode || event.ctrlKey) {\n if (idx >= 0)\n this.selectedTracks.splice(idx, 1)\n else\n this.selectedTracks.push(pos)\n } else {\n if (idx >= 0)\n this.selectedTracks = []\n else\n this.selectedTracks = [pos]\n }\n }\n },\n\n addTrack() {\n const track = prompt('Item path or URL')\n if (!track?.length)\n return\n\n this.$emit('add', track)\n },\n\n onTrackDragStart(track) {\n this.sourcePos = track\n },\n\n onTrackDragEnd() {\n this.$refs.body.querySelectorAll('.track').forEach((track) => track.classList.remove('dragover'));\n if (this.sourcePos == null || this.targetPos == null || this.sourcePos === this.targetPos)\n return\n\n this.$emit('move', {from: this.sourcePos, to: this.targetPos})\n this.sourcePos = null\n this.targetPos = null\n },\n\n onTrackDragOver(track) {\n this.targetPos = track\n const tracks = this.$refs.body.querySelectorAll('.track')\n tracks.forEach((track) => track.classList.remove('dragover'));\n [...tracks][track].classList.add('dragover')\n },\n\n playlistSave() {\n const name = prompt('Playlist name')\n if (!name?.length)\n return\n\n this.$emit('save', name)\n },\n },\n\n mounted() {\n const self = this\n this.$watch(() => self.status?.playingPos, (pos) => {\n if (pos == null)\n return\n\n const trackElement = [...self.$refs.body.querySelectorAll('.track')][pos]\n const offset = trackElement.offsetTop - parseFloat(getComputedStyle(self.$refs.header.$el).height)\n self.$refs.body.scrollTo(0, offset)\n })\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import 'vars.scss';\n@import 'track.scss';\n@import '../../Media/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 direction: rtl;\n\n .dropdown-container {\n direction: ltr;\n }\n }\n }\n\n .body {\n height: calc(100% - #{$music-header-height} - #{$media-ctrl-panel-height});\n overflow: auto;\n }\n\n .no-content {\n height: 100%;\n }\n}\n\n.playing-icon {\n display: inline-block;\n position: relative;\n margin-left: .75em;\n width: 1.5em;\n height: 1em;\n\n @keyframes playing_bar {\n 0% {\n height: 0\n }\n 12.5% {\n height: 75%\n }\n 25% {\n height: 100%\n }\n 37.5% {\n height: 10%\n }\n 50% {\n height: 40%\n }\n 62.5% {\n height: 50%\n }\n 75% {\n height: 30%\n }\n 87.5% {\n height: 55%\n }\n 100% {\n height: 0\n }\n }\n\n span {\n @include animation(0.2s);\n display: block;\n position: absolute;\n bottom: 0;\n width: .25em;\n height: 100%;\n background: $default-hover-fg-2;\n animation-name: playing_bar;\n animation-iteration-count: infinite;\n\n &:nth-child(1){\n left: 0;\n animation-duration: 2s;\n }\n\n &:nth-child(2){\n left: 6px;\n animation-duration: 4s;\n }\n\n &:nth-child(3){\n left: 12px;\n animation-duration: 1s;\n }\n }\n\n &.paused {\n span {\n animation-play-state: paused;\n }\n }\n}\n\n::v-deep(.track-info-content) {\n .attr {\n opacity: 0.75;\n }\n\n .value {\n text-align: right;\n }\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 ::v-deep(.dropdown) {\n .item.active {\n color: $default-hover-fg;\n }\n\n .item.selected {\n font-weight: bold;\n }\n }\n}\n</style>\n","import { render } from \"./Header.vue?vue&type=template&id=8beb55c6&scoped=true\"\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=8beb55c6&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-8beb55c6\"\n\nexport default script","import { render } from \"./Playlist.vue?vue&type=template&id=ee1cc6f4&scoped=true\"\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=ee1cc6f4&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-ee1cc6f4\"\n\nexport default script","<template>\n <Loading v-if=\"loading\" />\n\n <div class=\"editor-container fade-in\" v-else-if=\"editedPlaylist != null\">\n <div class=\"header-container\">\n <MusicHeader ref=\"header\">\n <div class=\"col-8 filter\">\n <button class=\"back-btn\" title=\"Back\" @click=\"$emit('playlist-edit', null)\">\n <i class=\"fas fa-arrow-left\" />\n </button>\n\n <label class=\"search-box\">\n <input type=\"search\" placeholder=\"Filter\" v-model=\"trackFilter\">\n </label>\n </div>\n\n <div class=\"buttons pull-right\">\n <Dropdown title=\"Players\" icon-class=\"fa fa-volume-up\" v-if=\"Object.keys(devices || {}).length\">\n <DropdownItem v-for=\"(device, id) in devices\" :key=\"id\" v-text=\"device.name\"\n :item-class=\"{active: activeDevice === id, selected: selectedDevice === id}\"\n icon-class=\"fa fa-volume-up\" @click=\"$emit('select-device', id)\" />\n </Dropdown>\n\n <button title=\"Refresh status\" @click=\"$emit('refresh-status')\" v-if=\"devices != null\">\n <i class=\"fa fa-sync\"></i>\n </button>\n\n <button class=\"add-btn\" title=\"Add track\" @click=\"addTrack\">\n <i class=\"fas fa-plus\" />\n </button>\n </div>\n </MusicHeader>\n </div>\n\n <div class=\"editor\" ref=\"editor\">\n <div class=\"no-content\" v-if=\"!tracks?.length\">\n No tracks found\n </div>\n\n <div class=\"row track\" draggable=\"true\" v-for=\"(track, i) in tracks\" :key=\"i\"\n :class=\"{selected: selectedTracksSet.has(i), active: status?.playingPos === i, hidden: !displayedTracks.has(i)}\"\n @dragstart=\"onTrackDragStart(i)\" @dragend=\"onTrackDragEnd(i)\" @dragover=\"onTrackDragOver(i)\"\n @click=\"onTrackClick($event, i)\" @dblclick=\"$emit('load-track', {pos: i, play: true})\">\n <div class=\"col-10\">\n <div class=\"title\">\n {{ track.title || '[No Title]' }}\n </div>\n\n <div class=\"artist\" v-if=\"track.artist\">\n <a :href=\"$route.fullPath\" v-text=\"track.artist\" @click.prevent=\"$emit('search', {artist: track.artist})\" />\n </div>\n\n <div class=\"album\" v-if=\"track.album\">\n <a :href=\"$route.fullPath\" v-text=\"track.album\"\n @click.prevent=\"$emit('search', {artist: track.artist, album: track.album})\" />\n </div>\n </div>\n\n <div class=\"col-2 right-side\">\n <span class=\"duration\" v-text=\"track.time ? 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('load-track', {pos: i, play: true})\" />\n <DropdownItem text=\"Add to queue\" icon-class=\"fa fa-plus\" @click=\"$emit('load-track', {pos: i, play: false})\" />\n <DropdownItem text=\"Add to playlist\" icon-class=\"fa fa-list-ul\" @click=\"$emit('add-to-playlist', track)\" />\n <DropdownItem text=\"Remove\" icon-class=\"fa fa-trash\" @click=\"$emit('remove-track', [...(new Set([...selectedTracks, i]))])\" />\n <DropdownItem text=\"Info\" icon-class=\"fa fa-info\" @click.stop=\"$emit('info', tracks[i])\" />\n </Dropdown>\n </span>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"playlists fade-in\" v-else>\n <div class=\"header-container\">\n <MusicHeader ref=\"header\">\n <div class=\"col-8 filter\">\n <label>\n <input type=\"search\" placeholder=\"Filter\" v-model=\"filter\">\n </label>\n </div>\n\n <div class=\"col-4 buttons\">\n <Dropdown title=\"Players\" icon-class=\"fa fa-volume-up\" v-if=\"Object.keys(devices || {}).length\">\n <DropdownItem v-for=\"(device, id) in devices\" :key=\"id\" v-text=\"device.name\"\n :item-class=\"{active: activeDevice === id, selected: selectedDevice === id}\"\n icon-class=\"fa fa-volume-up\" @click=\"$emit('select-device', id)\" />\n </Dropdown>\n\n <button title=\"Refresh status\" @click=\"$emit('refresh-status')\" v-if=\"devices != null\">\n <i class=\"fa fa-sync\"></i>\n </button>\n </div>\n </MusicHeader>\n </div>\n\n <div class=\"body\" ref=\"body\">\n <div class=\"no-content\" v-if=\"!playlists?.length\">\n No playlists found\n </div>\n\n <div class=\"row playlist\" :class=\"{hidden: !displayedPlaylists.has(i)}\"\n v-for=\"(playlist, i) in playlists\" :key=\"i\" @click=\"$emit('playlist-edit', i)\"\n @dblclick=\"$emit('load', i)\">\n <div class=\"col-10\">\n <div class=\"name\" v-text=\"playlist.name || '[No Name]'\" />\n </div>\n\n <div class=\"col-2 right-side\">\n <span class=\"actions\">\n <Dropdown title=\"Actions\" icon-class=\"fa fa-ellipsis-h\">\n <DropdownItem text=\"Play\" icon-class=\"fa fa-play\" @click.stop=\"$emit('play', i)\" />\n <DropdownItem text=\"Load\" icon-class=\"fa fa-list-ul\" @click.stop=\"$emit('load', i)\" />\n <DropdownItem text=\"Edit\" icon-class=\"fa fa-edit\" @click.stop=\"$emit('playlist-edit', i)\" />\n <DropdownItem text=\"Remove\" icon-class=\"fa fa-trash\" @click.stop=\"$emit('remove', i)\" />\n </Dropdown>\n </span>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\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\";\nimport Loading from \"@/components/Loading\";\n\nexport default {\n name: \"Playlists\",\n mixins: [MediaUtils],\n components: {DropdownItem, Dropdown, MusicHeader, Loading},\n emits: ['play', 'load', 'remove', 'playlist-edit', 'search', 'remove-track', 'load-track', 'info',\n 'playlist-add', 'add-to-playlist', 'track-move', 'refresh-status', 'select-device'],\n\n props: {\n playlists: {\n type: Array,\n default: () => [],\n },\n\n loading: {\n type: Boolean,\n default: false,\n },\n\n tracks: {\n type: Array,\n default: () => [],\n },\n\n editedPlaylist: {\n type: Number,\n },\n\n devices: {\n type: Object,\n },\n\n selectedDevice: {\n type: String,\n },\n\n activeDevice: {\n type: String,\n },\n },\n\n data() {\n return {\n selectedTracks: [],\n filter: '',\n trackFilter: '',\n sourcePos: null,\n targetPos: null,\n }\n },\n\n computed: {\n selectedTracksSet() {\n return new Set(this.selectedTracks)\n },\n\n displayedPlaylists() {\n const positions = [...Array(this.playlists.length).keys()]\n if (!this.filter?.length)\n return new Set(positions)\n\n const self = this\n const filter = (self.filter || '').toLowerCase()\n\n return new Set(\n positions.filter((pos) => {\n const track = this.playlists[pos]\n return (track?.name || '').toLowerCase().indexOf(filter) >= 0\n })\n )\n },\n\n displayedTracks() {\n const positions = [...Array(this.tracks.length).keys()]\n if (!this.trackFilter?.length)\n return new Set(positions)\n\n const self = this\n const filter = (self.trackFilter || '').toLowerCase()\n\n return new Set(\n positions.filter((pos) => {\n const track = this.tracks[pos]\n return (track?.artist || '').toLowerCase().indexOf(filter) >= 0\n || (track?.title || '').toLowerCase().indexOf(filter) >= 0\n || (track?.album || '').toLowerCase().indexOf(filter) >= 0\n })\n )\n },\n },\n\n methods: {\n onTrackClick(event, pos) {\n if (event.shiftKey) {\n const selectedTracks = this.selectedTracks.sort()\n if (!selectedTracks.length) {\n this.selectedTracks = [pos]\n } else if (pos < selectedTracks[0]) {\n this.selectedTracks = [\n ...this.selectedTracks,\n ...[...Array(selectedTracks[0] - pos).keys()].map((i) => i + pos)\n ]\n } else if (pos > selectedTracks[selectedTracks.length - 1]) {\n this.selectedTracks = [\n ...this.selectedTracks,\n ...[...Array(pos - selectedTracks[selectedTracks.length - 1] + 1).keys()].\n map((i) => i + selectedTracks[selectedTracks.length - 1])\n ]\n }\n } else {\n const idx = this.selectedTracks.indexOf(pos)\n if (event.ctrlKey) {\n if (idx >= 0)\n this.selectedTracks.splice(idx, 1)\n else\n this.selectedTracks.push(pos)\n } else {\n if (idx >= 0)\n this.selectedTracks = []\n else\n this.selectedTracks = [pos]\n }\n }\n },\n\n addTrack() {\n const track = prompt('Track path or URL')\n if (!track?.length)\n return\n\n this.$emit('playlist-add', track)\n },\n\n onTrackDragStart(track) {\n this.sourcePos = track\n },\n\n onTrackDragEnd() {\n this.$refs.editor.querySelectorAll('.track').forEach((track) => track.classList.remove('dragover'));\n if (this.sourcePos == null || this.targetPos == null || this.sourcePos === this.targetPos)\n return\n\n this.$emit('track-move', {from: this.sourcePos, to: this.targetPos, playlist: this.editedPlaylist})\n this.sourcePos = null\n this.targetPos = null\n },\n\n onTrackDragOver(track) {\n this.targetPos = track\n const tracks = this.$refs.editor.querySelectorAll('.track')\n tracks.forEach((track) => track.classList.remove('dragover'));\n [...tracks][track].classList.add('dragover')\n },\n\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import 'vars.scss';\n@import 'track.scss';\n@import '../../Media/vars.scss';\n\n.playlists {\n width: 100%;\n display: flex;\n flex-direction: column;\n\n .header-container {\n .filter {\n input {\n width: 100%;\n }\n }\n }\n\n .body {\n height: calc(100% - #{$music-header-height} - #{$media-ctrl-panel-height});\n overflow: auto;\n }\n\n .no-content {\n height: 100%;\n }\n\n .playlist {\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 &.active {\n background: $active-bg;\n }\n\n &.selected {\n background: $selected-bg;\n }\n\n .right-side {\n display: flex;\n justify-content: flex-end;\n }\n }\n\n .header {\n .buttons {\n align-items: flex-end;\n justify-content: flex-end;\n }\n }\n}\n\n.editor-container {\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n\n .header-container {\n width: 100%;\n }\n\n ::v-deep(.header) {\n .back-btn {\n padding-left: .25em;\n }\n\n .add-btn {\n float: right;\n }\n\n .search-box {\n input {\n width: 65%;\n }\n }\n }\n\n .editor {\n width: 100%;\n height: calc(100% - #{$music-header-height} - #{$media-ctrl-panel-height});\n display: flex;\n flex-direction: column;\n overflow: auto;\n }\n}\n</style>\n","import { render } from \"./Playlists.vue?vue&type=template&id=c01651b6&scoped=true\"\nimport script from \"./Playlists.vue?vue&type=script&lang=js\"\nexport * from \"./Playlists.vue?vue&type=script&lang=js\"\n\nimport \"./Playlists.vue?vue&type=style&index=0&id=c01651b6&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-c01651b6\"\n\nexport default script","<template>\n <div class=\"search fade-in\" :class=\"{'form-collapsed': formCollapsed}\">\n <div class=\"form-container\" v-if=\"!formCollapsed\" @submit.prevent=\"$emit('search', filteredQuery)\">\n <form class=\"search-form\">\n <div class=\"row\">\n <label>\n <input type=\"text\" placeholder=\"Any\" v-model=\"query.any\" />\n </label>\n </div>\n\n <div class=\"row\">\n <label>\n <input type=\"text\" placeholder=\"Artist\" v-model=\"query.artist\" />\n </label>\n </div>\n\n <div class=\"row\">\n <label>\n <input type=\"text\" placeholder=\"Title\" v-model=\"query.title\" />\n </label>\n </div>\n\n <div class=\"row\">\n <label>\n <input type=\"text\" placeholder=\"Album\" v-model=\"query.album\" />\n </label>\n </div>\n\n <FormFooter>\n <button @click=\"clear\">\n <i class=\"icon fa fa-times\" />\n <span class=\"btn-title\">Clear</span>\n </button>\n\n <button type=\"submit\">\n <i class=\"icon fa fa-search\" />\n <span class=\"btn-title\">Search</span>\n </button>\n </FormFooter>\n </form>\n </div>\n\n <MusicHeader v-else>\n <label class=\"search-box\">\n <input type=\"search\" placeholder=\"Filter\" v-model=\"filter\">\n </label>\n\n <span class=\"buttons\">\n <button @click=\"clear\">\n <i class=\"icon fa fa-times\" />\n <span class=\"btn-title\">Clear</span>\n </button>\n </span>\n </MusicHeader>\n\n <div class=\"results\">\n <div class=\"row track\" :class=\"{selected: selectedResults.has(i), hidden: !displayedTracks.has(i)}\"\n v-for=\"(result, i) in results\" :key=\"i\" @click=\"resultClick(i, $event)\">\n <div class=\"col-10\">\n <div class=\"title\">\n {{ result.title || '[No Title]' }}\n </div>\n\n <div class=\"artist\" v-text=\"result.artist\" v-if=\"result.artist?.length\" />\n <div class=\"album\" v-text=\"result.album\" v-if=\"result.album?.length\" />\n </div>\n\n <div class=\"col-2 right-side\">\n <span class=\"duration\" v-text=\"result.time && parseInt(result.time) ? convertTime(result.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=\"play(i)\" />\n <DropdownItem text=\"Add to queue\" icon-class=\"fa fa-plus\" @click=\"load(i)\" />\n <DropdownItem text=\"Add to playlist\" icon-class=\"fa fa-list-ul\" @click=\"$emit('add-to-playlist', result)\" />\n <DropdownItem text=\"Info\" icon-class=\"fa fa-info\" @click=\"$emit('info', result)\" />\n </Dropdown>\n </span>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport Dropdown from \"@/components/elements/Dropdown\";\nimport DropdownItem from \"@/components/elements/DropdownItem\";\nimport FormFooter from \"@/components/elements/FormFooter\";\nimport MediaUtils from \"@/components/Media/Utils\";\nimport MusicHeader from \"@/components/panels/Music/Header\";\n\nexport default {\n name: \"Search\",\n components: {Dropdown, DropdownItem, FormFooter, MusicHeader},\n mixins: [MediaUtils],\n emits: ['search', 'clear', 'play', 'load', 'add-to-playlist', 'info', 'refresh-status', 'select-device'],\n props: {\n loading: {\n type: Boolean,\n default: false,\n },\n\n results: {\n type: Array,\n },\n\n devices: {\n type: Object,\n },\n\n selectedDevice: {\n type: String,\n },\n\n activeDevice: {\n type: String,\n },\n },\n\n data() {\n return {\n selectedResults: new Set(),\n filter: '',\n query: {\n any: '',\n artist: '',\n title: '',\n album: '',\n },\n }\n },\n\n computed: {\n formCollapsed() {\n return this.results?.length > 0\n },\n\n filteredQuery() {\n return Object.entries(this.query).filter((o) => o[1]?.length).reduce((obj, [k, v]) => {\n obj[k] = v\n return obj\n }, {})\n },\n\n displayedTracks() {\n return new Set([...Array(this.results?.length || 0).keys()].filter((i) => {\n const result = this.results[i]\n if (!this.filter?.length)\n return result\n\n const filter = this.filter.toLowerCase()\n return (result?.artist || '').toLowerCase().indexOf(filter) >= 0 ||\n (result?.title || '').toLowerCase().indexOf(filter) >= 0 ||\n (result?.album || '').toLowerCase().indexOf(filter) >= 0\n }))\n },\n },\n\n methods: {\n clear() {\n this.$emit('clear')\n this.selectedResults = new Set()\n },\n\n resultClick(pos, event) {\n if (event.shiftKey) {\n if (this.selectedResults.size > 0 && !this.selectedResults.has(pos)) {\n const results = [...this.selectedResults]\n const min = Math.min(Math.min(results), pos)\n const max = Math.max(Math.max(results), pos)\n this.selectedResults = new Set([...Array(max-min+1).keys()].map((i) => i+min))\n }\n } else {\n if (!event.ctrlKey)\n this.selectedResults = new Set()\n if (this.selectedResults.has(pos))\n this.selectedResults.delete(pos)\n else\n this.selectedResults.add(pos)\n }\n },\n\n play(pos) {\n this.$emit('play', this.results[pos])\n if (this.selectedResults.size)\n this.selectedResults.forEach((result) => {\n this.$emit('load', result)\n })\n },\n\n load(pos) {\n if (!this.selectedResults.has(pos))\n this.selectedResults.add(pos)\n\n this.selectedResults.forEach((i) => {\n this.$emit('load', this.results[i])\n })\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import 'vars.scss';\n@import 'track.scss';\n@import '../../Media/vars.scss';\n\n.search {\n width: 100%;\n height: calc(100% - #{$media-ctrl-panel-height});\n display: flex;\n flex-direction: column;\n\n &:not(.form-collapsed) {\n justify-content: center;\n align-items: center;\n }\n\n .form-container {\n width: 100%;\n height: 100%;\n display: flex;\n flex-grow: 1;\n align-items: center;\n justify-content: center;\n }\n\n form {\n width: calc(100% - 2em);\n max-width: 30em;\n height: 17em;\n background: $default-bg-5;\n display: flex;\n padding: 2em;\n border-radius: 1.5em;\n\n .row {\n margin: .25em 0;\n }\n\n input[type=text] {\n width: 100%;\n }\n\n ::v-deep(.form-footer) {\n height: 3em;\n padding-right: 0;\n border: 0;\n }\n\n ::v-deep(button) {\n border: 0;\n\n &[type=submit] {\n background: none;\n }\n\n &:hover {\n border: 0;\n color: $default-hover-fg-2;\n }\n }\n }\n\n .results {\n height: calc(100% - #{$music-header-height});\n flex-grow: 1;\n overflow: auto;\n }\n\n ::v-deep(.header) {\n display: flex;\n width: 100%;\n align-items: center;\n\n .search-box {\n width: 70%;\n\n input[type=search] {\n width: 100%;\n }\n }\n\n .buttons {\n width: 30%;\n display: inline-flex;\n justify-content: flex-end;\n margin: 0;\n }\n }\n}\n</style>\n","import { render } from \"./Search.vue?vue&type=template&id=6fe42598&scoped=true\"\nimport script from \"./Search.vue?vue&type=script&lang=js\"\nexport * from \"./Search.vue?vue&type=script&lang=js\"\n\nimport \"./Search.vue?vue&type=style&index=0&id=6fe42598&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-6fe42598\"\n\nexport default script","<template>\n <div class=\"library fade-in\">\n <Loading v-if=\"loading\" />\n\n <MusicHeader>\n <label class=\"search-box\">\n <input type=\"search\" placeholder=\"Filter\" v-model=\"filter\">\n </label>\n </MusicHeader>\n\n <div class=\"results\">\n <div class=\"row track back-track\" @click=\"back\" v-if=\"path !== '/'\">\n <div class=\"icon-container\">\n <i class=\"icon fa fa-folder\" />\n </div>\n <div class=\"result-container\">\n <div class=\"title\">..</div>\n </div>\n </div>\n\n <div class=\"row track\" :class=\"{selected: selectedResults.has(i), hidden: !displayedResults.has(i)}\"\n v-for=\"(result, i) in results\" :key=\"i\" @click=\"resultClick(i, $event)\">\n <div class=\"col-10 left-side\">\n <div class=\"icon-container\">\n <i class=\"icon fa fa-folder\" v-if=\"result.directory\" />\n <i class=\"icon fa fa-music\" v-else-if=\"result.file\" />\n </div>\n\n <div class=\"info\">\n <div class=\"title\">\n <span v-if=\"result.directory\" v-text=\"result.directory.split('/').pop()\" />\n <span v-else-if=\"result.title\" v-text=\"result.title\" />\n </div>\n\n <div class=\"artist-album\">\n <div class=\"artist\" v-text=\"result.artist\" v-if=\"result.artist?.length\" />\n <div class=\"album\" v-text=\"result.album\" v-if=\"result.album?.length\" />\n </div>\n </div>\n </div>\n\n <div class=\"col-2 right-side\">\n <span class=\"duration\" v-text=\"result.time && parseInt(result.time) ? convertTime(result.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=\"play(i)\" />\n <DropdownItem text=\"Add to queue\" icon-class=\"fa fa-plus\" @click=\"load(i)\" />\n <DropdownItem text=\"Add to playlist\" icon-class=\"fa fa-list-ul\" @click=\"$emit('add-to-playlist', result)\" />\n <DropdownItem text=\"Info\" icon-class=\"fa fa-info\" @click=\"$emit('info', result)\" />\n </Dropdown>\n </span>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport Loading from \"@/components/Loading\";\nimport Dropdown from \"@/components/elements/Dropdown\";\nimport DropdownItem from \"@/components/elements/DropdownItem\";\nimport MediaUtils from \"@/components/Media/Utils\";\nimport MusicHeader from \"@/components/panels/Music/Header\";\n\nexport default {\n name: \"Library\",\n components: {Dropdown, DropdownItem, MusicHeader, Loading},\n mixins: [MediaUtils],\n emits: ['search', 'play', 'load', 'add-to-playlist', 'info', 'cd', 'refresh-status', 'select-device'],\n props: {\n loading: {\n type: Boolean,\n default: false,\n },\n\n results: {\n type: Array,\n },\n\n path: {\n type: String,\n },\n\n devices: {\n type: Object,\n },\n\n selectedDevice: {\n type: String,\n },\n\n activeDevice: {\n type: String,\n },\n },\n\n data() {\n return {\n selectedResults: new Set(),\n filter: '',\n query: {\n any: '',\n artist: '',\n title: '',\n album: '',\n },\n }\n },\n\n computed: {\n displayedResults() {\n return new Set([...Array(this.results?.length || 0).keys()].filter((i) => {\n const result = this.results[i]\n if (!this.filter?.length)\n return result\n\n const filter = this.filter.toLowerCase()\n return (result?.artist || '').toLowerCase().indexOf(filter) >= 0 ||\n (result?.title || '').toLowerCase().indexOf(filter) >= 0 ||\n (result?.album || '').toLowerCase().indexOf(filter) >= 0 ||\n (result?.directory || '').toLowerCase().indexOf(filter) >= 0\n }))\n },\n },\n\n methods: {\n resultClick(pos, event) {\n if (event.shiftKey) {\n if (this.selectedResults.size > 0 && !this.selectedResults.has(pos)) {\n const results = [...this.selectedResults]\n const min = Math.min(Math.min(results), pos)\n const max = Math.max(Math.max(results), pos)\n this.selectedResults = new Set([...Array(max-min+1).keys()].map((i) => i+min))\n }\n } else if (event.ctrlKey) {\n if (this.selectedResults.has(pos))\n this.selectedResults.delete(pos)\n else\n this.selectedResults.add(pos)\n } else {\n if (this.results[pos].directory) {\n this.$emit('cd', this.results[pos].directory)\n } else {\n this.selectedResults = new Set()\n if (this.selectedResults.has(pos))\n this.selectedResults.delete(pos)\n else\n this.selectedResults.add(pos)\n }\n }\n },\n\n play(pos) {\n this.$emit('play', this.results[pos])\n if (this.selectedResults.size)\n this.selectedResults.forEach((result) => {\n this.$emit('load', result)\n })\n },\n\n load(pos) {\n if (!this.selectedResults.has(pos))\n this.selectedResults.add(pos)\n\n this.selectedResults.forEach((i) => {\n this.$emit('load', this.results[i])\n })\n },\n\n back() {\n const path = this.path.split('/')\n this.$emit('cd', path.slice(0, path.length-1).join('/'))\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import 'track.scss';\n\n.library {\n width: 100%;\n display: flex;\n flex-direction: column;\n\n .results {\n overflow: auto;\n height: 100%;\n\n .track {\n display: flex;\n align-items: center;\n justify-content: left;\n\n .left-side {\n display: inline-flex;\n align-items: center;\n }\n }\n\n .icon {\n opacity: .5;\n margin-right: .75em;\n }\n }\n\n ::v-deep(.header) {\n display: flex;\n width: 100%;\n align-items: center;\n\n .search-box {\n width: 70%;\n\n input[type=search] {\n width: 100%;\n }\n }\n\n .buttons {\n width: 30%;\n display: inline-flex;\n justify-content: right;\n margin: 0;\n }\n }\n}\n</style>\n","import { render } from \"./Library.vue?vue&type=template&id=c3245ea8&scoped=true\"\nimport script from \"./Library.vue?vue&type=script&lang=js\"\nexport * from \"./Library.vue?vue&type=script&lang=js\"\n\nimport \"./Library.vue?vue&type=style&index=0&id=c3245ea8&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-c3245ea8\"\n\nexport default script","import { render } from \"./Index.vue?vue&type=template&id=2cd8b8d5&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=2cd8b8d5&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-2cd8b8d5\"\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!./Search.vue?vue&type=style&index=0&id=6fe42598&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!./Playlists.vue?vue&type=style&index=0&id=c01651b6&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=edee6494&lang=scss&scoped=true\"","'use strict';\nvar $ = require('../internals/export');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toInteger = require('../internals/to-integer');\nvar toLength = require('../internals/to-length');\nvar toObject = require('../internals/to-object');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar createProperty = require('../internals/create-property');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('splice');\n\nvar max = Math.max;\nvar min = Math.min;\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_LENGTH_EXCEEDED = 'Maximum allowed length exceeded';\n\n// `Array.prototype.splice` method\n// https://tc39.es/ecma262/#sec-array.prototype.splice\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n splice: function splice(start, deleteCount /* , ...items */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var actualStart = toAbsoluteIndex(start, len);\n var argumentsLength = arguments.length;\n var insertCount, actualDeleteCount, A, k, from, to;\n if (argumentsLength === 0) {\n insertCount = actualDeleteCount = 0;\n } else if (argumentsLength === 1) {\n insertCount = 0;\n actualDeleteCount = len - actualStart;\n } else {\n insertCount = argumentsLength - 2;\n actualDeleteCount = min(max(toInteger(deleteCount), 0), len - actualStart);\n }\n if (len + insertCount - actualDeleteCount > MAX_SAFE_INTEGER) {\n throw TypeError(MAXIMUM_ALLOWED_LENGTH_EXCEEDED);\n }\n A = arraySpeciesCreate(O, actualDeleteCount);\n for (k = 0; k < actualDeleteCount; k++) {\n from = actualStart + k;\n if (from in O) createProperty(A, k, O[from]);\n }\n A.length = actualDeleteCount;\n if (insertCount < actualDeleteCount) {\n for (k = actualStart; k < len - actualDeleteCount; k++) {\n from = k + actualDeleteCount;\n to = k + insertCount;\n if (from in O) O[to] = O[from];\n else delete O[to];\n }\n for (k = len; k > len - actualDeleteCount + insertCount; k--) delete O[k - 1];\n } else if (insertCount > actualDeleteCount) {\n for (k = len - actualDeleteCount; k > actualStart; k--) {\n from = k + actualDeleteCount - 1;\n to = k + insertCount - 1;\n if (from in O) O[to] = O[from];\n else delete O[to];\n }\n }\n for (k = 0; k < insertCount; k++) {\n O[k + actualStart] = arguments[k + 2];\n }\n O.length = len - actualDeleteCount + insertCount;\n return A;\n }\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!./Playlist.vue?vue&type=style&index=0&id=ee1cc6f4&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=2cd8b8d5&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!./Header.vue?vue&type=style&index=0&id=8beb55c6&lang=scss&scoped=true\""],"sourceRoot":""}