platypush/platypush/backend/http/webapp/dist/static/js/7067.96ec64d6.js.map

1 line
73 KiB
Plaintext

{"version":3,"file":"static/js/7067.96ec64d6.js","mappings":"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","sources":["webpack://platypush/./src/components/elements/Slider.vue","webpack://platypush/./src/components/elements/Slider.vue?787f","webpack://platypush/./src/components/elements/ToggleSwitch.vue","webpack://platypush/./src/components/elements/ToggleSwitch.vue?94aa","webpack://platypush/./src/components/panels/MusicSnapcast/Index.vue","webpack://platypush/./src/components/panels/MusicSnapcast/Host.vue","webpack://platypush/./src/components/panels/MusicSnapcast/Group.vue","webpack://platypush/./src/components/panels/MusicSnapcast/Client.vue","webpack://platypush/./src/components/panels/MusicSnapcast/Client.vue?98bc","webpack://platypush/./src/components/panels/MusicSnapcast/Group.vue?12df","webpack://platypush/./src/components/panels/MusicSnapcast/Host.vue?8888","webpack://platypush/./src/components/panels/MusicSnapcast/modals/Host.vue","webpack://platypush/./src/components/panels/MusicSnapcast/modals/Host.vue?b4e2","webpack://platypush/./src/components/panels/MusicSnapcast/modals/Group.vue","webpack://platypush/./src/components/panels/MusicSnapcast/modals/Group.vue?b9ce","webpack://platypush/./src/components/panels/MusicSnapcast/modals/Client.vue","webpack://platypush/./src/components/panels/MusicSnapcast/modals/Client.vue?144d","webpack://platypush/./src/components/panels/MusicSnapcast/Index.vue?a513"],"sourcesContent":["<template>\n <label class=\"slider-wrapper\">\n <span class=\"range-labels\" :class=\"{'with-label': withLabel}\" v-if=\"withRange\">\n <span class=\"label left\" v-if=\"withRange\" v-text=\"range[0]\" />\n <span class=\"label right\" v-if=\"withRange\" v-text=\"range[1]\" />\n </span>\n\n <span class=\"slider-container\">\n <input class=\"slider\"\n type=\"range\"\n :class=\"{'with-label': withLabel}\"\n :min=\"range[0]\"\n :max=\"range[1]\"\n :step=\"step\"\n :disabled=\"disabled\"\n :value=\"value\"\n ref=\"range\"\n @input.stop=\"onUpdate\"\n @change.stop=\"onUpdate\">\n\n <div class=\"track\" :class=\"{'with-label': withLabel}\">\n <div class=\"track-inner\" ref=\"track\"></div>\n </div>\n <div class=\"thumb\" ref=\"thumb\"></div>\n <span class=\"label\" v-if=\"withLabel\" v-text=\"value\" ref=\"label\"></span>\n </span>\n </label>\n</template>\n\n<script>\nexport default {\n name: \"Slider\",\n emits: ['input', 'change', 'mouseup', 'mousedown', 'touchstart', 'touchend', 'keyup', 'keydown'],\n props: {\n value: {\n type: Number,\n },\n\n disabled: {\n type: Boolean,\n default: false,\n },\n\n range: {\n type: Array,\n default: () => [0, 100],\n },\n\n step: {\n type: Number,\n default: 1,\n },\n\n withLabel: {\n type: Boolean,\n default: false,\n },\n\n withRange: {\n type: Boolean,\n default: false,\n }\n },\n\n methods: {\n onUpdate(event) {\n this.update(event.target.value)\n this.$emit(event.type, {\n ...event,\n target: {\n ...event.target,\n value: this.$refs.range.value,\n }\n })\n },\n\n update(value) {\n const sliderWidth = this.$refs.range.clientWidth\n const percent = (value - this.range[0]) / (this.range[1] - this.range[0])\n const innerWidth = percent * sliderWidth\n const thumb = this.$refs.thumb\n\n thumb.style.left = `${innerWidth - thumb.clientWidth / 2}px`\n this.$refs.thumb.style.transform = `translate(-${percent}%, -50%)`\n this.$refs.track.style.width = `${innerWidth}px`\n },\n },\n\n mounted() {\n if (this.value != null)\n this.update(this.value)\n this.$watch(() => this.value, (newValue) => this.update(newValue))\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n$label-width: 3em;\n\n.slider-wrapper {\n width: 100%;\n display: flex;\n position: relative;\n flex-direction: column;\n\n .slider-container {\n width: 100%;\n display: flex;\n position: relative;\n }\n\n .slider {\n width: 100%;\n cursor: pointer;\n opacity: 0;\n\n &::-ms-tooltip {\n display: none;\n }\n }\n\n .range-labels {\n width: 100%;\n display: flex;\n\n &.with-label {\n width: calc(100% - $label-width);\n }\n\n .left {\n text-align: left;\n }\n\n .right {\n @extend .pull-right;\n flex-grow: 1;\n }\n }\n\n .track {\n width: 100%;\n height: 0.75em;\n background: $slider-bg;\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n border-radius: 0.5em;\n box-shadow: inset 1px 0px 3px 0 $slider-track-shadow;\n pointer-events: none;\n\n .track-inner {\n width: 0;\n height: 100%;\n background: $slider-progress-bg;\n border-radius: 0.5em 0 0 0.5em;\n }\n\n &.with-label {\n width: calc(100% - $label-width);\n }\n }\n\n .thumb {\n width: 1.25em;\n height: 1.25em;\n background: $slider-thumb-bg;\n position: absolute;\n top: 50%;\n left: 0;\n transform: translate(0%, -50%);\n border-radius: 50%;\n box-shadow: 1px 0px 2px 0 $slider-thumb-shadow;\n pointer-events: none;\n }\n\n .label {\n width: $label-width;\n position: relative;\n font-weight: normal;\n text-align: center;\n }\n}\n</style>\n","import { render } from \"./Slider.vue?vue&type=template&id=4b38623f&scoped=true\"\nimport script from \"./Slider.vue?vue&type=script&lang=js\"\nexport * from \"./Slider.vue?vue&type=script&lang=js\"\n\nimport \"./Slider.vue?vue&type=style&index=0&id=4b38623f&lang=scss&scoped=true\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-4b38623f\"]])\n\nexport default __exports__","<template>\n <div class=\"power-switch\" :class=\"{disabled: disabled}\" @click.stop=\"onInput\">\n <!--suppress HtmlFormInputWithoutLabel -->\n <input type=\"checkbox\" :checked=\"value\" :id=\"id\">\n <label>\n <!--suppress HtmlUnknownTag -->\n <div class=\"switch\">\n <div class=\"dot\" />\n </div>\n <span class=\"label\">\n <slot />\n </span>\n </label>\n </div>\n</template>\n\n<script>\nexport default {\n name: \"ToggleSwitch\",\n emits: ['input'],\n props: {\n id: {\n type: String,\n },\n\n value: {\n type: Boolean,\n default: false,\n },\n\n disabled: {\n type: Boolean,\n default: false,\n },\n },\n\n methods: {\n onInput(event) {\n if (this.disabled)\n return false\n\n this.$emit('input', event)\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.power-switch {\n position: relative;\n transition: transform .3s;\n transform: scale(var(--scale, 1)) translateZ(0);\n\n &:active {\n --scale: .96;\n }\n\n &.disabled {\n opacity: 0.6;\n }\n\n input {\n display: none;\n & + label {\n border-radius: 1em;\n display: inline-flex;\n cursor: pointer;\n position: relative;\n transition: box-shadow .4s;\n\n &:before {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n border-radius: inherit;\n background: none;\n opacity: var(--gradient, 0);\n transition: opacity .4s;\n }\n\n .switch {\n position: relative;\n display: inline-block;\n vertical-align: top;\n height: 1.4em;\n width: 2.5em;\n border-radius: 1em;\n background: $slider-bg;\n box-shadow: inset 1px 0px 3px 0 $slider-track-shadow;\n\n &:before {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n border-radius: inherit;\n background: $slider-progress-bg;\n opacity: var(--gradient, 0);\n transition: opacity .4s;\n }\n\n .dot {\n background: $toggle-dot-bg;\n position: absolute;\n width: 1.5em;\n height: 1.5em;\n border-radius: 50%;\n box-shadow: 1px 0px 3.5px 0 $slider-thumb-shadow;\n left: -0.25em;\n top: -0.05em;\n transform: translateX(var(--offset, 0));\n transition: transform .4s, box-shadow .4s;\n\n &:before {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n border-radius: inherit;\n background: $toggle-selected-dot-bg;\n opacity: var(--gradient, 0);\n transition: opacity .4s;\n }\n }\n }\n\n span {\n line-height: 2em;\n font-size: 1.2em;\n color: var(--text, #646B8C);\n font-weight: 500;\n display: inline-block;\n vertical-align: top;\n position: relative;\n margin-left: 0.5em;\n transition: color .4s;\n }\n\n & + span {\n text-align: center;\n display: block;\n position: absolute;\n left: 0;\n right: 0;\n top: 100%;\n opacity: 0;\n font-size: 1em;\n font-weight: 500;\n color: $slider-bg;\n transform: translateY(0.2em);\n transition: opacity .4s, transform .4s;\n }\n }\n\n &:not(:checked) {\n & + label {\n pointer-events: none;\n & + span {\n opacity: 1;\n transform: translateY(0.6em);\n }\n }\n }\n\n &:checked {\n & + label {\n --offset: 1.5em;\n --text: $slider-progress-bg;\n --gradient: 1;\n --shadow: rgba(0, 39, 6, .1);\n }\n }\n }\n}\n</style>\n","import { render } from \"./ToggleSwitch.vue?vue&type=template&id=eff375b6&scoped=true\"\nimport script from \"./ToggleSwitch.vue?vue&type=script&lang=js\"\nexport * from \"./ToggleSwitch.vue?vue&type=script&lang=js\"\n\nimport \"./ToggleSwitch.vue?vue&type=style&index=0&id=eff375b6&lang=scss&scoped=true\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-eff375b6\"]])\n\nexport default __exports__","<template>\n <div class=\"music-snapcast-container\">\n <Loading v-if=\"loading\" />\n\n <div class=\"info\">\n <Modal title=\"Server info\" ref=\"modalHost\">\n <ModalHost :info=\"hosts[selectedHost]\" v-if=\"selectedHost\" />\n </Modal>\n </div>\n\n <div class=\"info\">\n <Modal title=\"Group info\" ref=\"modalGroup\">\n <ModalGroup :group=\"hosts[selectedHost].groups[selectedGroup]\" :streams=\"hosts[selectedHost].streams\"\n :clients=\"clientsByHost[selectedHost]\" :loading=\"loading\" @add-client=\"addClientToGroup\"\n @remove-client=\"removeClientFromGroup\" @stream-change=\"streamChange\"\n @rename-group=\"renameGroup($event)\" v-if=\"selectedGroup\" />\n </Modal>\n </div>\n\n <div class=\"info\">\n <Modal title=\"Client info\" ref=\"modalClient\">\n <ModalClient :client=\"hosts[selectedHost].groups[selectedGroup].clients[selectedClient]\" :loading=\"loading\"\n @remove-client=\"removeClient\" @rename-client=\"renameClient($event)\" v-if=\"selectedClient\" />\n </Modal>\n </div>\n\n <Host v-for=\"(host, id) in hosts\" :key=\"id\"\n :server=\"host.server\"\n :streams=\"host.streams\"\n :groups=\"host.groups\"\n @group-mute-toggle=\"groupMute($event)\"\n @client-mute-toggle=\"clientMute($event)\"\n @client-volume-change=\"clientSetVolume($event)\"\n @modal-show=\"onModalShow($event)\" />\n </div>\n</template>\n\n<script>\nimport Modal from \"@/components/Modal\";\nimport Utils from \"@/Utils\";\nimport Host from \"@/components/panels/MusicSnapcast/Host\";\nimport ModalHost from \"@/components/panels/MusicSnapcast/modals/Host\";\nimport ModalGroup from \"@/components/panels/MusicSnapcast/modals/Group\";\nimport ModalClient from \"@/components/panels/MusicSnapcast/modals/Client\";\nimport Loading from \"@/components/Loading\";\n\nexport default {\n name: \"MusicSnapcast\",\n mixins: [Utils],\n components: {Loading, Modal, Host, ModalHost, ModalGroup, ModalClient},\n\n data: function() {\n return {\n loading: false,\n hosts: {},\n ports: {},\n selectedHost: null,\n selectedGroup: null,\n selectedClient: null,\n }\n },\n\n computed: {\n clientsByHost() {\n return Object.entries(this.hosts).reduce((hosts, [name, info]) => {\n hosts[name] = {}\n\n Object.values(info.groups).forEach((group) => {\n Object.entries(group.clients).forEach(([clientId, client]) => {\n hosts[name][clientId] = client\n })\n })\n\n return hosts\n }, {})\n },\n },\n\n methods: {\n parseServerStatus(status) {\n status.server = status.server || {\n host: status.server.host || {\n name: status.host\n }\n }\n\n status.server.host.port = this.ports[status.host]\n this.hosts[status.server.host.name] = {\n ...status,\n groups: status.groups.map((group) => {\n return {\n ...group,\n clients: group.clients.reduce((clients, client) => {\n clients[client.id] = client\n return clients\n }, {}),\n }\n }).reduce((groups, group) => {\n groups[group.id] = group\n return groups\n }, {}),\n\n streams: status.streams.reduce((streams, stream) => {\n streams[stream.id] = stream\n return streams\n }, {}),\n }\n },\n\n async refresh() {\n this.loading = true\n\n try {\n const statuses = await this.request('music.snapcast.status')\n this.hosts = {}\n\n statuses.forEach((status) => {\n this.ports[status.host] = status.port\n this.parseServerStatus(status)\n })\n } finally {\n this.loading = false\n }\n },\n\n async refreshHost(host) {\n if (!(host in this.hosts))\n return\n\n this.parseServerStatus(await this.request('music.snapcast.status', {\n host: host,\n port: this.ports[host]\n }))\n },\n\n async addClientToGroup(clientId) {\n this.loading = true\n\n try {\n if (!this.selectedHost || !this.selectedGroup || !(clientId in this.clientsByHost[this.selectedHost]))\n return\n\n const clients = [...new Set([clientId,\n ...Object.keys(this.hosts[this.selectedHost].groups[this.selectedGroup].clients)])]\n\n await this.request('music.snapcast.group_set_clients', {\n host: this.selectedHost,\n port: this.ports[this.selectedHost],\n group: this.selectedGroup,\n clients: clients,\n })\n\n await this.refreshHost(this.selectedHost)\n } finally {\n this.loading = false\n }\n },\n\n async removeClientFromGroup(clientId) {\n this.loading = true\n\n try {\n if (!this.selectedHost || !this.selectedGroup || !(clientId in this.clientsByHost[this.selectedHost]))\n return\n\n const clients = new Set([...Object.keys(this.hosts[this.selectedHost].groups[this.selectedGroup].clients)])\n if (!clients.has(clientId))\n return\n\n clients.delete(clientId)\n\n await this.request('music.snapcast.group_set_clients', {\n host: this.selectedHost,\n port: this.ports[this.selectedHost],\n group: this.selectedGroup,\n clients: [...clients],\n })\n\n await this.refreshHost(this.selectedHost)\n } finally {\n this.loading = false\n }\n },\n\n async renameGroup(name) {\n this.loading = true\n\n try {\n if (!this.selectedHost || !this.selectedGroup)\n return\n\n await this.request('music.snapcast.set_group_name', {\n host: this.selectedHost,\n port: this.ports[this.selectedHost],\n group: this.selectedGroup,\n name: name,\n })\n\n await this.refreshHost(this.selectedHost)\n } finally {\n this.loading = false\n }\n },\n\n async renameClient(name) {\n this.loading = true\n\n try {\n if (!this.selectedHost || !this.selectedClient)\n return\n\n await this.request('music.snapcast.set_client_name', {\n host: this.selectedHost,\n port: this.ports[this.selectedHost],\n client: this.selectedClient,\n name: name,\n })\n\n await this.refreshHost(this.selectedHost)\n } finally {\n this.loading = false\n }\n },\n\n async removeClient() {\n this.loading = true\n\n try {\n if (!(this.selectedHost && this.selectedClient))\n return\n\n await this.request('music.snapcast.delete_client', {\n host: this.selectedHost,\n port: this.ports[this.selectedHost],\n client: this.selectedClient,\n })\n\n this.$refs.modalClient.close()\n await this.refreshHost(this.selectedHost)\n } finally {\n this.loading = false\n }\n },\n\n async streamChange(streamId) {\n this.loading = true\n\n try {\n await this.request('music.snapcast.group_set_stream', {\n host: this.selectedHost,\n port: this.ports[this.selectedHost],\n group: this.selectedGroup,\n stream_id: streamId,\n })\n\n await this.refreshHost(this.selectedHost)\n } finally {\n this.loading = false\n }\n },\n\n onClientUpdate(event) {\n Object.keys(this.hosts[event.host].groups).forEach((groupId) => {\n if (event.client.id in this.hosts[event.host].groups[groupId].clients) {\n this.hosts[event.host].groups[groupId].clients[event.client.id] = event.client\n }\n })\n },\n\n onGroupStreamChange(event) {\n this.hosts[event.host].groups[event.group].stream_id = event.stream\n },\n\n onServerUpdate(event) {\n this.parseServerStatus(event.server)\n },\n\n onStreamUpdate(event) {\n this.hosts[event.host].streams[event.stream.id] = event.stream\n },\n\n onClientVolumeChange(event) {\n Object.keys(this.hosts[event.host].groups).forEach((groupId) => {\n if (!(event.client in this.hosts[event.host].groups[groupId].clients))\n return\n\n if (event.volume != null)\n this.hosts[event.host].groups[groupId].clients[event.client].config.volume.percent = event.volume\n\n if (event.muted != null)\n this.hosts[event.host].groups[groupId].clients[event.client].config.volume.muted = event.muted\n })\n },\n\n onGroupMuteChange(event) {\n this.hosts[event.host].groups[event.group].muted = event.muted\n },\n\n modalShow(event) {\n switch(event.type) {\n case 'host':\n this.modal[event.type].info = this.hosts[event.host]\n break\n case 'group':\n this.modal[event.type].info.server = this.hosts[event.host].server\n this.modal[event.type].info.group = this.hosts[event.host].groups[event.group]\n this.modal[event.type].info.streams = this.hosts[event.host].streams\n this.modal[event.type].info.clients = {}\n\n for (const group of Object.values(this.hosts[event.host].groups)) {\n for (const client of Object.values(group.clients)) {\n this.modal[event.type].info.clients[client.id] = client\n }\n }\n\n break\n case 'client':\n this.modal[event.type].info = this.hosts[event.host].groups[event.group].clients[event.client]\n this.modal[event.type].info.server = this.hosts[event.host].server\n break\n }\n\n this.modal[event.type].visible = true\n },\n\n async groupMute(event) {\n await this.request('music.snapcast.mute', {\n group: event.group,\n host: event.host,\n port: this.ports[event.host],\n mute: event.muted,\n })\n\n await this.refreshHost(event.host)\n },\n\n async clientMute(event) {\n await this.request('music.snapcast.mute', {\n client: event.client,\n host: event.host,\n port: this.ports[event.host],\n mute: event.muted,\n })\n\n await this.refreshHost(event.host)\n },\n\n async clientSetVolume(event) {\n await this.request('music.snapcast.volume', {\n client: event.client,\n host: event.host,\n port: this.ports[event.host],\n volume: event.volume,\n })\n\n await this.refreshHost(event.host)\n },\n\n onModalShow(event) {\n switch (event.type) {\n case 'host':\n this.selectedHost = event.host\n this.$refs.modalHost.show()\n break\n\n case 'group':\n this.selectedHost = event.host\n this.selectedGroup = event.group\n this.$refs.modalGroup.show()\n break\n\n case 'client':\n this.selectedHost = event.host\n this.selectedGroup = event.group\n this.selectedClient = event.client\n this.$refs.modalClient.show()\n break\n }\n }\n },\n\n mounted() {\n this.refresh()\n\n this.subscribe(this.onClientUpdate, null,\n 'platypush.message.event.music.snapcast.ClientConnectedEvent',\n 'platypush.message.event.music.snapcast.ClientDisconnectedEvent',\n 'platypush.message.event.music.snapcast.ClientNameChangeEvent')\n\n this.subscribe(this.onGroupStreamChange, null, 'platypush.message.event.music.snapcast.GroupStreamChangeEvent')\n this.subscribe(this.onServerUpdate, null, 'platypush.message.event.music.snapcast.ServerUpdateEvent')\n this.subscribe(this.onStreamUpdate, null, 'platypush.message.event.music.snapcast.StreamUpdateEvent')\n this.subscribe(this.onClientVolumeChange, null, 'platypush.message.event.music.snapcast.ClientVolumeChangeEvent')\n this.subscribe(this.onGroupMuteChange, null, 'platypush.message.event.music.snapcast.GroupMuteChangeEvent')\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.music-snapcast-container {\n width: 100%;\n overflow: auto;\n background: $background-color;\n}\n\n:deep(.info) {\n .modal {\n .content {\n width: 90%;\n max-width: 800px;\n }\n\n .body {\n padding: 0;\n }\n }\n\n .row {\n display: flex;\n align-items: center;\n border-radius: .75em;\n padding: 1em;\n\n @include until($tablet) {\n flex-direction: column;\n border-bottom: $default-border;\n }\n\n @include from($desktop) {\n padding: 1em 2em;\n }\n\n .label {\n margin-bottom: 0;\n }\n\n .value {\n display: flex;\n\n @include from($tablet) {\n justify-content: right;\n }\n\n @include until($tablet) {\n width: 100%;\n margin-left: 0;\n }\n }\n\n @include until($tablet) {\n .label {\n width: 100%;\n display: flex;\n }\n }\n\n &:nth-child(odd) {\n background: $background-color;\n }\n\n &:nth-child(even) {\n background: $default-bg-3;\n }\n\n &:hover {\n background: $hover-bg;\n }\n }\n\n .buttons {\n background: initial;\n margin-top: 1.5em;\n padding-top: 1.5em;\n border-top: $default-border-2;\n display: flex;\n justify-content: center;\n }\n}\n\n@media screen and (max-width: calc(#{$tablet} - 1)) {\n .music-snapcast-container {\n .modal {\n width: 95vw;\n }\n }\n}\n\n@media screen and (min-width: $tablet) {\n .music-snapcast-container {\n .modal {\n width: 70vw;\n }\n }\n}\n\n@media screen and (min-width: $desktop) {\n .music-snapcast-container {\n .modal {\n width: 45vw;\n }\n }\n}\n\n:deep(.modal-container) {\n .modal {\n .content {\n @include until($tablet) {\n width: 95vw;\n }\n\n @include from($tablet) {\n min-width: 600px;\n }\n }\n }\n}\n</style>\n","<template>\n <div class=\"host\">\n <div class=\"header\">\n <div class=\"col-10 name\" @click=\"$emit('modal-show', {type: 'host', host: server.host.name})\">\n <i class=\"icon fa fa-server\"></i>\n {{ server.host.name }}\n </div>\n <div class=\"col-2 buttons pull-right\">\n <button type=\"button\" @click=\"collapsed = !collapsed\">\n <i class=\"icon fa\" :class=\"{'fa-chevron-up': !collapsed, 'fa-chevron-down': collapsed}\"></i>\n </button>\n </div>\n </div>\n\n <div class=\"group-container\" v-if=\"!collapsed\">\n <Group v-for=\"(group, id) in groups\" :key=\"id\"\n :id=\"group.id\"\n :name=\"group.name\"\n :server=\"server.host\"\n :muted=\"group.muted\"\n :clients=\"group.clients\"\n :stream=\"streams[group.stream_id]\"\n @modal-show=\"$emit('modal-show', $event)\"\n @group-mute-toggle=\"$emit('group-mute-toggle', $event)\"\n @client-mute-toggle=\"$emit('client-mute-toggle', $event)\"\n @client-volume-change=\"$emit('client-volume-change', $event)\"\n />\n </div>\n </div>\n</template>\n\n<script>\nimport Group from \"@/components/panels/MusicSnapcast/Group\";\n\nexport default {\n name: \"Host\",\n emits: ['modal-show', 'group-mute-toggle', 'client-mute-toggle', 'client-volume-change'],\n components: {Group},\n\n props: {\n groups: {\n type: Object,\n default: () => {},\n },\n\n server: {\n type: Object,\n default: () => {},\n },\n\n streams: {\n type: Object,\n default: () => {},\n },\n },\n\n data() {\n return {\n collapsed: false,\n }\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.host {\n width: 95%;\n max-width: 1000px;\n margin: 1em auto;\n border: $default-border-2;\n border-radius: .5em;\n box-shadow: $border-shadow-bottom-right;\n background: $default-bg-2;\n\n .header {\n padding: .5em;\n background: $default-bg-5;\n border-bottom: $default-border-2;\n border-radius: .5em .5em 0 0;\n display: flex;\n align-items: center;\n\n .name {\n text-transform: uppercase;\n\n &:hover {\n color: $default-hover-fg;\n cursor: pointer;\n }\n }\n\n .buttons {\n margin-bottom: 0;\n }\n\n button {\n padding: 0;\n border: 0;\n background: none;\n &:hover { color: $default-hover-fg; }\n }\n }\n}\n</style>\n","<template>\n <div class=\"group\">\n <div class=\"head\">\n <div class=\"col-10 name\" @click=\"$emit('modal-show', {type: 'group', group: id, host: server.name})\">\n <i class=\"icon fa\" :class=\"{'fa-play': stream.status === 'playing', 'fa-stop': stream.status !== 'playing'}\"></i>\n {{ name || stream.id || id }}\n </div>\n\n <div class=\"col-2 switch pull-right\">\n <ToggleSwitch :value=\"!muted\"\n @input=\"$emit('group-mute-toggle', {host: server.name, group: id, muted: !muted})\" />\n </div>\n </div>\n\n <div class=\"body\">\n <Client v-for=\"client in clients\" :key=\"client.id\"\n :config=\"client.config\"\n :connected=\"client.connected\"\n :server=\"server\"\n :host=\"client.host\"\n :groupId=\"id\"\n :id=\"client.id\"\n :lastSeen=\"client.lastSeen\"\n :snapclient=\"client.snapclient\"\n @modal-show=\"$emit('modal-show', $event)\"\n @volume-change=\"$emit('client-volume-change', $event)\"\n @mute-toggle=\"$emit('client-mute-toggle', $event)\" />\n </div>\n </div>\n</template>\n\n<script>\nimport ToggleSwitch from \"@/components/elements/ToggleSwitch\";\nimport Client from \"@/components/panels/MusicSnapcast/Client\";\n\nexport default {\n name: \"Group\",\n components: {Client, ToggleSwitch},\n emits: ['group-mute-toggle', 'modal-show', 'client-volume-change', 'client-mute-toggle'],\n props: {\n id: {\n type: String,\n },\n\n clients: {\n type: Object,\n default: () => {},\n },\n\n muted: {\n type: Boolean,\n },\n\n name: {\n type: String,\n },\n\n stream: {\n type: Object,\n },\n\n server: {\n type: Object,\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.group {\n .head {\n display: flex;\n background: $default-bg-4;\n border-top: $default-border-2;\n border-bottom: $default-border-2;\n border-radius: 0;\n cursor: pointer;\n\n &:hover {\n color: $default-hover-fg;\n }\n }\n\n .head,\n .client {\n display: flex;\n align-items: center;\n padding: 1em .5em;\n }\n}\n</style>\n","<template>\n <div class=\"row client\" :class=\"{offline: !connected}\">\n <div class=\"col-s-12 col-m-3 name\" v-text=\"config.name?.length ? config.name : host.name\"\n @click=\"$emit('modal-show', {type: 'client', client: id, group: groupId, host: server.name})\">\n </div>\n\n <div class=\"col-s-12 col-m-9 controls\">\n <div class=\"col-10 slider-container\">\n <Slider :range=\"[0, 100]\" :value=\"config.volume.percent\"\n @mouseup=\"$emit('volume-change', {host: server.name, client: id, volume: $event.target.value})\" />\n </div>\n\n <div class=\"col-2 switch pull-right\">\n <ToggleSwitch :value=\"!config.volume.muted\"\n @input=\"$emit('mute-toggle', {host: server.name, client: id, muted: !config.volume.muted})\" />\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport ToggleSwitch from \"@/components/elements/ToggleSwitch\";\nimport Slider from \"@/components/elements/Slider\";\n\nexport default {\n name: \"Client\",\n components: {Slider, ToggleSwitch},\n emits: ['volume-change', 'mute-toggle', 'modal-show'],\n\n props: {\n config: {\n type: Object,\n required: true,\n },\n\n connected: {\n type: Boolean,\n default: false,\n },\n\n host: {\n type: Object,\n required: true,\n },\n\n id: {\n type: String,\n required: true,\n },\n\n groupId: {\n type: String,\n required: true,\n },\n\n lastSeen: {\n type: Object,\n default: () => {},\n },\n\n snapclient: {\n type: Object,\n required: true,\n },\n\n server: {\n type: Object,\n required: true,\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.client {\n @include until($tablet) {\n flex-direction: column;\n border-bottom: $default-border;\n }\n\n .name, .controls {\n @include until($tablet) {\n width: 100%;\n display: flex;\n }\n }\n\n &.offline {\n color: $disabled-fg;\n }\n\n &:hover {\n background: $hover-bg;\n }\n\n .name {\n @include until($tablet) {\n padding-bottom: .5em;\n }\n\n &:hover {\n color: $default-hover-fg;\n cursor: pointer;\n }\n }\n\n .slider-container {\n padding-right: 1em;\n }\n}\n</style>\n","import { render } from \"./Client.vue?vue&type=template&id=31229f1a&scoped=true\"\nimport script from \"./Client.vue?vue&type=script&lang=js\"\nexport * from \"./Client.vue?vue&type=script&lang=js\"\n\nimport \"./Client.vue?vue&type=style&index=0&id=31229f1a&lang=scss&scoped=true\"\n\nimport exportComponent from \"../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-31229f1a\"]])\n\nexport default __exports__","import { render } from \"./Group.vue?vue&type=template&id=748fccb4&scoped=true\"\nimport script from \"./Group.vue?vue&type=script&lang=js\"\nexport * from \"./Group.vue?vue&type=script&lang=js\"\n\nimport \"./Group.vue?vue&type=style&index=0&id=748fccb4&lang=scss&scoped=true\"\n\nimport exportComponent from \"../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-748fccb4\"]])\n\nexport default __exports__","import { render } from \"./Host.vue?vue&type=template&id=7bce419a&scoped=true\"\nimport script from \"./Host.vue?vue&type=script&lang=js\"\nexport * from \"./Host.vue?vue&type=script&lang=js\"\n\nimport \"./Host.vue?vue&type=style&index=0&id=7bce419a&lang=scss&scoped=true\"\n\nimport exportComponent from \"../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-7bce419a\"]])\n\nexport default __exports__","<template>\n <div class=\"info\">\n <div class=\"row\" v-if=\"info?.server?.host?.ip?.length\">\n <div class=\"label col-3\">IP Address</div>\n <div class=\"value col-9\" v-text=\"info.server.host.ip\"></div>\n </div>\n\n <div class=\"row\" v-if=\"info?.server?.host?.mac?.length\">\n <div class=\"label col-3\">MAC Address</div>\n <div class=\"value col-9\" v-text=\"info.server.host.mac\"></div>\n </div>\n\n <div class=\"row\" v-if=\"info?.server?.host?.name?.length\">\n <div class=\"label col-3\">Name</div>\n <div class=\"value col-9\" v-text=\"info.server.host.name\"></div>\n </div>\n\n <div class=\"row\" v-if=\"info?.server?.host?.port\">\n <div class=\"label col-3\">Port</div>\n <div class=\"value col-9\" v-text=\"info.server.host.port\"></div>\n </div>\n\n <div class=\"row\" v-if=\"info?.server?.host?.os?.length\">\n <div class=\"label col-3\">OS</div>\n <div class=\"value col-9\" v-text=\"info.server.host.os\"></div>\n </div>\n\n <div class=\"row\" v-if=\"info?.server?.host?.arch?.length\">\n <div class=\"label col-3\">Architecture</div>\n <div class=\"value col-9\" v-text=\"info.server.host.arch\"></div>\n </div>\n\n <div class=\"row\" v-if=\"info?.server?.snapserver?.name?.length\">\n <div class=\"label col-3\">Server name</div>\n <div class=\"value col-9\" v-text=\"info.server.snapserver.name\"></div>\n </div>\n\n <div class=\"row\" v-if=\"info?.server?.snapserver?.version?.length\">\n <div class=\"label col-3\">Server version</div>\n <div class=\"value col-9\" v-text=\"info.server.snapserver.version\"></div>\n </div>\n\n <div class=\"row\" v-if=\"info?.server?.snapserver?.protocolVersion\">\n <div class=\"label col-3\">Protocol version</div>\n <div class=\"value col-9\" v-text=\"info.server.snapserver.protocolVersion\"></div>\n </div>\n\n <div class=\"row\" v-if=\"info?.server?.snapserver?.controlProtocolVersion\">\n <div class=\"label col-3\">Control protocol version</div>\n <div class=\"value col-9\" v-text=\"info.server.snapserver.controlProtocolVersion\"></div>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: \"HostModal\",\n props: {\n info: {\n type: Object,\n default: () => {},\n }\n }\n}\n</script>\n\n<style scoped>\n\n</style>","import { render } from \"./Host.vue?vue&type=template&id=4b0dc9f8\"\nimport script from \"./Host.vue?vue&type=script&lang=js\"\nexport * from \"./Host.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"../../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"info\">\n <div class=\"section name\">\n <div class=\"title\">Name</div>\n <div class=\"row\">\n <div class=\"name-value\">\n <span class=\"name\" v-text=\"group.name?.length ? group.name : 'default'\" />\n <button class=\"pull-right\" title=\"Rename\" @click=\"renameGroup\">\n <i class=\"fa fa-edit\" />\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"section clients\" v-if=\"Object.keys(group?.clients || {}).length > 0\">\n <div class=\"title\">Clients</div>\n <div class=\"row\" ref=\"groupClients\" v-for=\"(client, id) in (clients || {})\" :key=\"id\">\n <label class=\"client\" :for=\"'snapcast-client-' + client.id\">\n <input type=\"checkbox\"\n class=\"client\"\n :id=\"`snapcast-client-${client.id}`\"\n :value=\"client.id\"\n :checked=\"client.id in group.clients\"\n :disabled=\"loading\"\n @input=\"$emit($event.target.checked ? 'add-client' : 'remove-client', client.id)\">\n {{ client.host.name }}\n </label>\n </div>\n </div>\n\n <div class=\"section streams\" v-if=\"group?.stream_id\">\n <div class=\"title\">Stream</div>\n <div class=\"row\">\n <div class=\"label col-3\">ID</div>\n <div class=\"value col-9\">\n <label>\n <select ref=\"streamSelect\" @change=\"$emit('stream-change', $event.target.value)\">\n <option\n v-for=\"(stream, id) in streams\" :key=\"id\"\n v-text=\"streams[group.stream_id].id\"\n :name=\"stream.id\"\n :value=\"stream.id\"\n :disabled=\"loading\"\n :selected=\"stream.id === group.stream_id\">\n </option>\n </select>\n </label>\n </div>\n </div>\n\n <div class=\"row\" v-if=\"streams?.[group.stream_id]?.status\">\n <div class=\"label col-m-3\">Status</div>\n <div class=\"value col-m-9\" v-text=\"streams[group.stream_id].status\"></div>\n </div>\n\n <div class=\"row\" v-if=\"streams?.[group?.stream_id]?.uri?.host\">\n <div class=\"label col-s-12 col-m-3\">Host</div>\n <div class=\"value col-s-12 col-m-9\" v-text=\"streams[group.stream_id].uri.host\"></div>\n </div>\n\n <div class=\"row\" v-if=\"streams?.[group?.stream_id]?.uri?.path\">\n <div class=\"label col-s-12 col-m-3\">Path</div>\n <div class=\"value col-s-12 col-m-9\" v-text=\"streams[group.stream_id].uri.path\"></div>\n </div>\n\n <div class=\"row\" v-if=\"streams?.[group?.stream_id]?.uri?.raw\">\n <div class=\"label col-s-12 col-m-3\">URI</div>\n <div class=\"value col-s-12 col-m-9\" v-text=\"streams[group.stream_id].uri.raw\"></div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: \"GroupModal\",\n emits: ['add-client', 'remove-client', 'stream-change', 'rename-group'],\n props: {\n loading: {\n type: Boolean,\n default: false,\n },\n\n group: {\n type: Object,\n },\n\n clients: {\n type: Object,\n },\n\n streams: {\n type: Object,\n },\n },\n\n methods: {\n renameGroup() {\n const name = (prompt('New group name', this.group.name) || '').trim()\n if (!name?.length)\n return\n\n this.$emit('rename-group', name)\n }\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.info {\n .row {\n display: flex;\n align-items: center;\n }\n\n .section {\n padding: 1.5em;\n\n .row {\n align-items: normal;\n }\n }\n\n label.client {\n width: 100%;\n }\n\n .title {\n font-size: 1em;\n padding-left: .5em;\n padding-bottom: .5em;\n margin-bottom: .5em;\n border-bottom: $default-border;\n }\n\n .client {\n display: flex;\n align-items: center;\n\n input {\n margin-right: .5em;\n }\n }\n\n .name-value {\n display: flex;\n align-items: center;\n\n button {\n background: none;\n border: none;\n margin: 0 1em;\n padding: 0;\n\n &:hover {\n color: $default-hover-fg-2;\n }\n }\n }\n}\n</style>\n","import { render } from \"./Group.vue?vue&type=template&id=353ffa58&scoped=true\"\nimport script from \"./Group.vue?vue&type=script&lang=js\"\nexport * from \"./Group.vue?vue&type=script&lang=js\"\n\nimport \"./Group.vue?vue&type=style&index=0&id=353ffa58&lang=scss&scoped=true\"\n\nimport exportComponent from \"../../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-353ffa58\"]])\n\nexport default __exports__","<template>\n <div class=\"client-modal\">\n <div class=\"info\" v-if=\"client\">\n <div class=\"row\">\n <div class=\"label col-s-12 col-m-3\">ID</div>\n <div class=\"value col-s-12 col-m-9\" v-text=\"client.id\"></div>\n </div>\n\n <div class=\"row\" v-if=\"client.config?.name?.length || client.host?.name\">\n <div class=\"label col-s-12 col-m-3\">Name</div>\n <div class=\"value col-s-12 col-m-9\">\n <span class=\"name\" v-text=\"client.config?.name || client.host?.name\"></span>\n <button title=\"Rename\" @click=\"renameClient\">\n <i class=\"fa fa-edit\" />\n </button>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"label col-s-12 col-m-3\">Connected</div>\n <div class=\"value col-s-12 col-m-9\" v-text=\"client.connected\"></div>\n </div>\n\n <div class=\"row\">\n <div class=\"label col-s-12 col-m-3\">Volume</div>\n <div class=\"value col-s-12 col-m-9\">{{ client.config.volume.percent }}%</div>\n </div>\n\n <div class=\"row\">\n <div class=\"label col-s-12 col-m-3\">Muted</div>\n <div class=\"value col-s-12 col-m-9\" v-text=\"client.config.volume.muted\"></div>\n </div>\n\n <div class=\"row\">\n <div class=\"label col-s-12 col-m-3\">Latency</div>\n <div class=\"value col-s-12 col-m-9\" v-text=\"client.config.latency\"></div>\n </div>\n\n <div class=\"row\" v-if=\"client.host.ip && client.host.ip.length\">\n <div class=\"label col-s-12 col-m-3\">IP Address</div>\n <div class=\"value col-s-12 col-m-9\" v-text=\"client.host.ip\"></div>\n </div>\n\n <div class=\"row\" v-if=\"client.host.mac && client.host.mac.length\">\n <div class=\"label col-s-12 col-m-3\">MAC Address</div>\n <div class=\"value col-s-12 col-m-9\" v-text=\"client.host.mac\"></div>\n </div>\n\n <div class=\"row\" v-if=\"client.host.os && client.host.os.length\">\n <div class=\"label col-s-12 col-m-3\">OS</div>\n <div class=\"value col-s-12 col-m-9\" v-text=\"client.host.os\"></div>\n </div>\n\n <div class=\"row\" v-if=\"client.host.arch && client.host.arch.length\">\n <div class=\"label col-s-12 col-m-3\">Architecture</div>\n <div class=\"value col-s-12 col-m-9\" v-text=\"client.host.arch\"></div>\n </div>\n\n <div class=\"row\">\n <div class=\"label col-s-12 col-m-3\">Client name</div>\n <div class=\"value col-s-12 col-m-9\" v-text=\"client.snapclient.name\"></div>\n </div>\n\n <div class=\"row\">\n <div class=\"label col-s-12 col-m-3\">Client version</div>\n <div class=\"value col-s-12 col-m-9\" v-text=\"client.snapclient.version\"></div>\n </div>\n\n <div class=\"row\">\n <div class=\"label col-s-12 col-m-3\">Protocol version</div>\n <div class=\"value col-s-12 col-m-9\" v-text=\"client.snapclient.protocolVersion\"></div>\n </div>\n </div>\n\n <div class=\"buttons\">\n <div class=\"row\">\n <button type=\"button\" :disabled=\"loading\" @click=\"removeClient\">\n <i class=\"fas fa-trash\" />\n <span class=\"name\">Remove client</span>\n </button>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: \"ClientModal\",\n emits: ['remove-client', 'rename-client'],\n props: {\n loading: {\n type: Boolean,\n default: false,\n },\n\n client: {\n type: Object,\n },\n },\n\n methods: {\n removeClient() {\n if (!window.confirm('Are you sure that you want to remove this client?'))\n return\n\n this.$emit('remove-client')\n },\n\n renameClient() {\n const name = (window.prompt('New client name',\n this.client.config.name?.length ? this.client.config.name : this.client.host.name) || '').trim()\n\n if (!name.length)\n return\n\n this.$emit('rename-client', name)\n },\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.client-modal {\n max-height: 75vh;\n display: flex;\n flex-direction: column;\n\n .info {\n height: 80%;\n overflow: auto;\n }\n\n button {\n background: none;\n border: none;\n padding: 0;\n margin: 0 .5em;\n\n &:hover {\n color: $default-hover-fg-2;\n }\n }\n\n .buttons {\n height: 20%;\n margin: 0 !important;\n padding: 0 !important;\n\n .row {\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n padding: 0;\n\n &:hover {\n background: none;\n }\n\n button {\n width: 100%;\n height: 100%;\n padding: 1em;\n color: #900;\n border-color: #900;\n\n .name {\n margin-left: .5em;\n }\n\n &:hover {\n background: $hover-bg;\n }\n }\n }\n }\n}\n</style>\n","import { render } from \"./Client.vue?vue&type=template&id=0e55ac54&scoped=true\"\nimport script from \"./Client.vue?vue&type=script&lang=js\"\nexport * from \"./Client.vue?vue&type=script&lang=js\"\n\nimport \"./Client.vue?vue&type=style&index=0&id=0e55ac54&lang=scss&scoped=true\"\n\nimport exportComponent from \"../../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-0e55ac54\"]])\n\nexport default __exports__","import { render } from \"./Index.vue?vue&type=template&id=27dfcbf6&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=27dfcbf6&lang=scss&scoped=true\"\n\nimport exportComponent from \"../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-27dfcbf6\"]])\n\nexport default __exports__"],"names":["class","ref","_createElementBlock","_hoisted_1","$props","withRange","_normalizeClass","withLabel","_toDisplayString","range","_createElementVNode","_hoisted_4","type","min","max","step","disabled","value","onInput","_cache","_withModifiers","args","$options","onUpdate","onChange","_hoisted_6","_hoisted_7","name","emits","props","Number","Boolean","default","Array","methods","event","this","update","target","$emit","$refs","sliderWidth","clientWidth","percent","innerWidth","thumb","style","left","transform","track","width","mounted","$watch","newValue","__exports__","render","onClick","checked","id","_hoisted_2","_hoisted_3","_renderSlot","_ctx","$slots","undefined","String","loading","_createBlock","_component_Loading","key","_createVNode","_component_Modal","title","selectedHost","_component_ModalHost","info","hosts","selectedGroup","_component_ModalGroup","group","groups","streams","clients","clientsByHost","onAddClient","addClientToGroup","onRemoveClient","removeClientFromGroup","onStreamChange","streamChange","onRenameGroup","$event","renameGroup","selectedClient","_component_ModalClient","client","removeClient","onRenameClient","renameClient","_Fragment","_renderList","host","_component_Host","server","onGroupMuteToggle","groupMute","onClientMuteToggle","clientMute","onClientVolumeChange","clientSetVolume","onModalShow","$data","collapsed","_hoisted_5","_component_Group","muted","stream","stream_id","status","_component_ToggleSwitch","_component_Client","config","connected","groupId","lastSeen","snapclient","onVolumeChange","onMuteToggle","offline","length","_component_Slider","volume","onMouseup","components","Slider","ToggleSwitch","Object","required","Client","Group","data","ip","mac","_hoisted_8","_hoisted_9","port","_hoisted_11","_hoisted_12","os","_hoisted_14","_hoisted_15","arch","_hoisted_17","_hoisted_18","snapserver","_hoisted_20","_hoisted_21","version","_hoisted_23","_hoisted_24","protocolVersion","_hoisted_26","_hoisted_27","controlProtocolVersion","_hoisted_29","_hoisted_30","keys","_hoisted_10","for","_hoisted_13","_hoisted_16","selected","_hoisted_19","uri","_hoisted_22","path","_hoisted_25","raw","_hoisted_28","prompt","trim","_hoisted_48","_hoisted_49","latency","_hoisted_31","_hoisted_33","_hoisted_34","_hoisted_36","_hoisted_37","_hoisted_39","_hoisted_40","_hoisted_42","_hoisted_43","_hoisted_45","_hoisted_46","window","confirm","mixins","Utils","Loading","Modal","Host","ModalHost","ModalGroup","ModalClient","ports","computed","entries","reduce","values","forEach","clientId","parseServerStatus","map","refresh","statuses","request","refreshHost","Set","has","delete","modalClient","close","streamId","onClientUpdate","onGroupStreamChange","onServerUpdate","onStreamUpdate","onGroupMuteChange","modalShow","modal","visible","mute","modalHost","show","modalGroup","subscribe"],"sourceRoot":""}