platypush/platypush/backend/http/webapp/dist/static/js/app.aead5f10.js.map

1 line
189 KiB
Plaintext

{"version":3,"file":"static/js/app.aead5f10.js","mappings":"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,CAACC,EAAAA,GAET3F,MAAO,CACLqM,cAAe,CACb3L,KAAM8I,SAIV3I,IAAAA,GACE,MAAO,CACL+Y,YAAa,KACbE,aAAc,KAElB,EAEA7Z,QAAS,CACP,aAAM8b,GACJ7b,KAAK4Z,aAAe5Z,KAAKsS,aAAa,iBACtCtS,KAAK0Z,kBAAoB1Z,KAAKuH,QAAQ,2BAA4B,CAAC2U,cAAelc,KAAK4Z,cACzF,GAGFrT,OAAAA,GACEvG,KAAK6b,SACP,GStCF,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,SAAS3T,KAEpE,S,uBCTA,IAAIqC,EAAM,CACT,iBAAkB,CACjB,KACA,KACA,MAED,6BAA8B,CAC7B,KACA,MAED,mBAAoB,CACnB,KACA,KACA,MAED,uBAAwB,CACvB,KACA,KACA,MAED,0BAA2B,CAC1B,IACA,KACA,KAED,2BAA4B,CAC3B,KACA,KACA,MAED,mBAAoB,CACnB,KACA,KACA,MAED,mBAAoB,CACnB,KACA,MAED,kBAAmB,CAClB,KACA,MAED,gBAAiB,CAChB,KACA,KACA,KACA,MAED,mBAAoB,CACnB,KACA,KACA,KACA,KACA,MAED,gBAAiB,CAChB,KACA,KACA,KACA,KACA,MAED,uBAAwB,CACvB,KACA,KACA,KACA,KACA,KACA,MAED,mBAAoB,CACnB,KACA,KACA,KACA,KACA,KACA,MAED,yBAA0B,CACzB,KACA,KACA,KACA,KACA,KACA,MAED,mBAAoB,CACnB,KACA,KACA,KACA,KACA,KACA,MAED,gBAAiB,CAChB,KACA,KACA,KACA,MAED,mBAAoB,CACnB,KACA,KACA,KACA,KACA,MAED,wBAAyB,CACxB,KACA,KACA,KACA,MAED,uBAAwB,CACvB,KACA,KACA,KACA,KACA,MAED,mBAAoB,CACnB,KACA,KACA,KACA,MAED,mBAAoB,CACnB,MAED,gBAAiB,CAChB,IACA,KAED,kBAAmB,CAClB,KACA,KACA,KACA,MAED,cAAe,CACd,KACA,KACA,MAED,oBAAqB,CACpB,KACA,KACA,MAED,sBAAuB,CACtB,KACA,MAED,qBAAsB,CACrB,KACA,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","sources":["webpack://platypush/./src/bus.js","webpack://platypush/./src/App.vue","webpack://platypush/./src/components/Notifications.vue","webpack://platypush/./src/components/Notification.vue","webpack://platypush/./src/components/Notification.vue?deb2","webpack://platypush/./src/components/Notifications.vue?e79f","webpack://platypush/./src/Events.vue","webpack://platypush/./src/Events.vue?0562","webpack://platypush/./src/components/VoiceAssistant.vue","webpack://platypush/./src/components/VoiceAssistant.vue?e102","webpack://platypush/./src/components/Ntfy.vue","webpack://platypush/./src/components/Ntfy.vue?4660","webpack://platypush/./src/components/Pushbullet.vue","webpack://platypush/./src/components/Pushbullet.vue?a5f8","webpack://platypush/./src/App.vue?7ccd","webpack://platypush/./src/views/Dashboard.vue","webpack://platypush/./src/components/widgets/Row.vue","webpack://platypush/./src/components/widgets/Row.vue?bc29","webpack://platypush/./src/components/widgets/Widget.vue","webpack://platypush/./src/components/widgets/Widget.vue?043c","webpack://platypush/./src/views/Dashboard.vue?040e","webpack://platypush/./src/views/NotFound.vue","webpack://platypush/./src/views/NotFound.vue?0aab","webpack://platypush/./src/views/Login.vue","webpack://platypush/./src/views/Login.vue?240b","webpack://platypush/./src/views/Register.vue","webpack://platypush/./src/views/Register.vue?157d","webpack://platypush/./src/views/Panel.vue","webpack://platypush/./src/components/Nav.vue","webpack://platypush/./src/components/Nav.vue?1f44","webpack://platypush/./src/views/Panel.vue?792f","webpack://platypush/./src/views/Plugin.vue","webpack://platypush/./src/views/Plugin.vue?41f6","webpack://platypush/./src/router/index.js","webpack://platypush/./src/registerServiceWorker.js","webpack://platypush/./src/main.js","webpack://platypush/./src/utils/Api.vue","webpack://platypush/./src/utils/Api.vue?331a","webpack://platypush/./src/utils/Clipboard.vue","webpack://platypush/./src/utils/Clipboard.vue?9589","webpack://platypush/./src/utils/Cookies.vue","webpack://platypush/./src/utils/Cookies.vue?0832","webpack://platypush/./src/utils/DateTime.vue","webpack://platypush/./src/utils/DateTime.vue?3df3","webpack://platypush/./src/utils/Events.vue","webpack://platypush/./src/utils/Events.vue?ad6c","webpack://platypush/./src/utils/Notification.vue","webpack://platypush/./src/utils/Notification.vue?b668","webpack://platypush/./src/utils/Screen.vue","webpack://platypush/./src/utils/Screen.vue?714e","webpack://platypush/./src/utils/Text.vue","webpack://platypush/./src/utils/Text.vue?61b3","webpack://platypush/./src/utils/Types.vue","webpack://platypush/./src/utils/Types.vue?2b41","webpack://platypush/./src/Utils.vue","webpack://platypush/./src/Utils.vue?83c2","webpack://platypush/./src/components/Loading.vue","webpack://platypush/./src/components/Loading.vue?1ccf","webpack://platypush/./src/components/Modal.vue","webpack://platypush/./src/components/Modal.vue?db1b","webpack://platypush/./src/components/elements/ConfirmDialog.vue","webpack://platypush/./src/components/elements/ConfirmDialog.vue?f384","webpack://platypush/./src/components/elements/Dropdown.vue","webpack://platypush/./src/components/elements/Dropdown.vue?e934","webpack://platypush/./src/components/elements/DropdownItem.vue","webpack://platypush/./src/components/elements/DropdownItem.vue?d591","webpack://platypush/./src/components/elements/Icon.vue","webpack://platypush/./src/components/elements/Icon.vue?fdba","webpack://platypush/./src/components/panels/Settings/Index.vue","webpack://platypush/./src/components/panels/Settings/Token.vue","webpack://platypush/./src/components/panels/Settings/Token.vue?4a12","webpack://platypush/./src/components/panels/Settings/Users.vue","webpack://platypush/./src/components/elements/FloatingButton.vue","webpack://platypush/./src/components/elements/FloatingButton.vue?d72c","webpack://platypush/./src/components/panels/Settings/Users.vue?407b","webpack://platypush/./src/components/panels/Settings/Integrations.vue","webpack://platypush/./src/components/panels/Settings/Integrations.vue?a933","webpack://platypush/./src/components/panels/Settings/Index.vue?0df9","webpack://platypush/./src/components/panels/ lazy ^\\.\\/.*\\/Index$ namespace object","webpack://platypush/./src/components/widgets/ lazy ^\\.\\/.*\\/Index$ namespace object","webpack://platypush/webpack/bootstrap","webpack://platypush/webpack/runtime/chunk loaded","webpack://platypush/webpack/runtime/compat get default export","webpack://platypush/webpack/runtime/create fake namespace object","webpack://platypush/webpack/runtime/define property getters","webpack://platypush/webpack/runtime/ensure chunk","webpack://platypush/webpack/runtime/get javascript chunk filename","webpack://platypush/webpack/runtime/get mini-css chunk filename","webpack://platypush/webpack/runtime/global","webpack://platypush/webpack/runtime/hasOwnProperty shorthand","webpack://platypush/webpack/runtime/load script","webpack://platypush/webpack/runtime/make namespace object","webpack://platypush/webpack/runtime/publicPath","webpack://platypush/webpack/runtime/css loading","webpack://platypush/webpack/runtime/jsonp chunk loading","webpack://platypush/webpack/startup"],"sourcesContent":["import mitt from 'mitt'\n\nconst bus = mitt()\n\nbus.publishEntity = (entity) => {\n bus.emit('entity-update', entity)\n}\n\nbus.onEntity = (callback) => {\n bus.on('entity-update', callback)\n}\n\nbus.publishNotification = (notification) => {\n bus.emit('notification-create', notification)\n}\n\nbus.onNotification = (callback) => {\n bus.on('notification-create', callback)\n}\n\nexport { bus }\n","<template>\n <Events ref=\"events\" v-if=\"hasWebsocket\" />\n <Notifications ref=\"notifications\" />\n <VoiceAssistant ref=\"voice-assistant\" v-if=\"hasAssistant\" />\n <Pushbullet ref=\"pushbullet\" v-if=\"hasPushbullet\" />\n <Ntfy ref=\"ntfy\" v-if=\"hasNtfy\" />\n <ConfirmDialog ref=\"pwaDialog\" @input=\"installPWA\">\n Would you like to install this application locally?\n </ConfirmDialog>\n\n <router-view />\n</template>\n\n<script>\nimport ConfirmDialog from \"@/components/elements/ConfirmDialog\";\nimport Notifications from \"@/components/Notifications\";\nimport Utils from \"@/Utils\";\nimport Events from \"@/Events\";\nimport VoiceAssistant from \"@/components/VoiceAssistant\";\nimport { bus } from \"@/bus\";\nimport Ntfy from \"@/components/Ntfy\";\nimport Pushbullet from \"@/components/Pushbullet\";\n\nexport default {\n name: 'App',\n mixins: [Utils],\n components: {\n ConfirmDialog, Pushbullet, Ntfy, Notifications, Events, VoiceAssistant\n },\n\n data() {\n return {\n config: {},\n userAuthenticated: false,\n pwaInstallEvent: null,\n }\n },\n\n computed: {\n hasWebsocket() {\n return this.userAuthenticated &&\n 'backend.http' in this.config\n },\n\n hasAssistant() {\n return this.hasWebsocket\n },\n\n hasPushbullet() {\n return this.hasWebsocket && (\n 'pushbullet' in this.config ||\n 'backend.pushbullet' in this.config\n )\n },\n\n hasNtfy() {\n return this.hasWebsocket && 'ntfy' in this.config\n },\n },\n\n methods: {\n onNotification(notification) {\n this.$refs.notifications.create(notification)\n },\n\n async initConfig() {\n this.config = await this.request('config.get', {}, 60000, false)\n this.userAuthenticated = true\n },\n\n installPWA() {\n if (this.pwaInstallEvent)\n this.pwaInstallEvent.prompt()\n\n this.$refs.pwaDialog.close()\n }\n },\n\n created() {\n this.initConfig()\n },\n\n beforeMount() {\n if (this.getCookie('pwa-dialog-shown')?.length)\n return\n\n window.addEventListener('beforeinstallprompt', (e) => {\n e.preventDefault()\n this.pwaInstallEvent = e\n this.$refs.pwaDialog.show()\n\n this.setCookie('pwa-dialog-shown', '1', {\n expires: new Date(new Date().getTime() + 365 * 24 * 60 * 60 * 1000)\n })\n })\n },\n\n mounted() {\n bus.onNotification(this.onNotification)\n },\n}\n</script>\n\n<!--suppress CssUnusedSymbol -->\n<style lang=\"scss\">\n$fa-font-path: \"~@fortawesome/fontawesome-free/webfonts\";\n@import \"~@fortawesome/fontawesome-free/scss/fontawesome\";\n@import \"~@fortawesome/fontawesome-free/scss/solid\"; // fas\n@import \"~@fortawesome/fontawesome-free/scss/regular\"; // far\n@import \"~@fortawesome/fontawesome-free/scss/brands\"; // fab\n\nhtml, body {\n width: 100%;\n height: 100%;\n margin: 0;\n overflow: auto;\n}\n\n#app {\n font-family: BlinkMacSystemFont,-apple-system,Avenir,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,Helvetica,Verdana,Arial,sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n width: 100%;\n height: 100%;\n color: #2c3e50;\n}\n</style>\n","<template>\n <div class=\"notifications\">\n <Notification v-for=\"(notification, id, index) in notifications\"\n :key=\"index\"\n :id=\"id\"\n :text=\"notification.text\"\n :html=\"notification.html\"\n :title=\"notification.title\"\n :link=\"notification.link\"\n :image=\"notification.image\"\n :warning=\"notification.warning\"\n :error=\"notification.error\"\n @clicked=\"destroy\">\n </Notification>\n </div>\n</template>\n\n<script>\nimport Notification from \"@/components/Notification\";\n\nexport default {\n name: \"Notifications\",\n components: {Notification},\n props: {\n duration: {\n // Default notification duration in milliseconds\n type: Number,\n default: 10000,\n }\n },\n\n data: function() {\n return {\n index: 0,\n notifications: {},\n timeouts: {},\n };\n },\n\n methods: {\n create: function(args) {\n const id = this.index++;\n this.notifications[id] = args;\n\n if (args.duration == null) {\n args.duration = this.duration;\n }\n\n const duration = args.duration ? parseInt(args.duration) : 0;\n if (duration) {\n this.timeouts[id] = setTimeout(this.destroy.bind(null, id), duration);\n }\n },\n\n destroy: function(id) {\n delete this.notifications[id];\n delete this.timeouts[id];\n },\n },\n}\n</script>\n\n<style scoped>\n.notifications {\n position: fixed;\n bottom: 0;\n right: 0;\n width: 25em;\n z-index: 1000;\n}\n</style>","<template>\n <div class=\"notification fade-in\" :class=\"{warning: warning, error: error}\" @click=\"clicked\">\n <div class=\"title\" v-if=\"title\" v-text=\"title\"></div>\n <div class=\"body\">\n <div class=\"image col-3\" v-if=\"image || warning || error\">\n <div class=\"row\">\n <img :src=\"image.src\" v-if=\"image && image.src\" alt=\"\">\n <i :class=\"['fa', 'fa-' + image.icon]\" :style=\"image.color ? '--color: ' + image.color : ''\"\n v-else-if=\"image && image.icon\"></i>\n <i :class=\"image.iconClass\" :style=\"image.color ? '--color: ' + image.color : ''\"\n v-else-if=\"image && image.iconClass\"></i>\n <i class=\"fa fa-exclamation\" v-else-if=\"warning\"></i>\n <i class=\"fa fa-times\" v-else-if=\"error\"></i>\n </div>\n </div>\n <div class=\"text col-9\" v-if=\"text && !!image\" v-text=\"text\"></div>\n <div class=\"text col-9\" v-if=\"html && !!image\" v-html=\"html\"></div>\n <div class=\"text row horizontal-center\" v-if=\"text && !image\" v-text=\"text\"></div>\n <div class=\"text row horizontal-center\" v-if=\"html && !image\" v-html=\"html\"></div>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: \"Notification\",\n props: ['id','text','html','title','image','link','error','warning'],\n\n methods: {\n clicked() {\n if (this.link) {\n window.open(this.link, '_blank');\n }\n\n this.$emit('clicked', this.id);\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.notification {\n background: $notification-bg;\n border: $notification-border;\n border-radius: 1em;\n margin-bottom: 0.25em !important;\n margin-right: 0.1em;\n padding: 0.5em;\n cursor: pointer;\n\n &:hover {\n background: $notification-hover-bg;\n &.warning { background: $notification-warning-hover-bg; }\n &.error { background: $notification-error-hover-bg; }\n }\n\n &.warning {\n background: $notification-warning-bg;\n border: $notification-warning-border;\n .image { --color: $notification-warning-icon-color; }\n }\n\n &.error {\n background: $notification-error-bg;\n border: $notification-error-border;\n .image { --color: $notification-error-icon-color; }\n }\n\n .title {\n color: $notification-title-fg;\n font-size: 1.25em;\n font-weight: normal;\n margin: 0.25em 0;\n padding: 0;\n letter-spacing: 0.07em;\n }\n\n .body {\n @extend .vertical-center;\n height: 6em;\n overflow: hidden;\n padding-bottom: 0.1em;\n letter-spacing: 0.05em;\n }\n\n .image {\n height: 100%;\n text-align: center;\n --color: $notification-icon-color;\n\n .row {\n @extend .vertical-center;\n @extend .horizontal-center;\n width: 100%;\n height: 100%;\n\n .fa {\n font-size: 2.5em;\n color: var(--color);\n }\n\n img {\n width: 80%;\n height: 80%;\n }\n }\n }\n}\n</style>","import { render } from \"./Notification.vue?vue&type=template&id=7646705e&scoped=true\"\nimport script from \"./Notification.vue?vue&type=script&lang=js\"\nexport * from \"./Notification.vue?vue&type=script&lang=js\"\n\nimport \"./Notification.vue?vue&type=style&index=0&id=7646705e&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-7646705e\"]])\n\nexport default __exports__","import { render } from \"./Notifications.vue?vue&type=template&id=6dc8bebc&scoped=true\"\nimport script from \"./Notifications.vue?vue&type=script&lang=js\"\nexport * from \"./Notifications.vue?vue&type=script&lang=js\"\n\nimport \"./Notifications.vue?vue&type=style&index=0&id=6dc8bebc&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-6dc8bebc\"]])\n\nexport default __exports__","<template>\n <div/>\n</template>\n\n<script>\nimport { bus } from \"@/bus\";\n\nexport default {\n name: \"Events\",\n\n data() {\n return {\n ws: null,\n initialized: false,\n pending: false,\n opened: false,\n timeout: null,\n reconnectMsecs: 1000,\n minReconnectMsecs: 1000,\n maxReconnectMsecs: 30000,\n handlers: {},\n handlerNameToEventTypes: {},\n }\n },\n\n methods: {\n onWebsocketTimeout() {\n console.log('Websocket reconnection timed out, retrying')\n this.reconnectMsecs = Math.min(this.reconnectMsecs * 2, this.maxReconnectMsecs)\n this.pending = false\n if (this.ws)\n this.ws.close()\n\n this.onClose()\n },\n\n onMessage(event) {\n const handlers = []\n event = event.data\n\n if (typeof event === 'string') {\n try {\n event = JSON.parse(event)\n } catch (e) {\n console.warn('Received invalid non-JSON event')\n console.warn(event)\n }\n }\n\n console.debug(event)\n if (event.type !== 'event') {\n // Discard non-event messages\n return\n }\n\n if (null in this.handlers) { // lgtm [js/implicit-operand-conversion]\n handlers.push(this.handlers[null]) // lgtm [js/implicit-operand-conversion]\n }\n\n if (event.args.type in this.handlers) {\n handlers.push(...Object.values(this.handlers[event.args.type]))\n }\n\n for (let handler of handlers) {\n if (!handler)\n continue\n\n if (handler instanceof Array)\n handler = handler[0]\n else if (handler instanceof Object && !(handler instanceof Function))\n handler = Object.values(handler)[0]\n\n handler(event.args)\n }\n },\n\n onOpen() {\n if (this.opened) {\n console.log(\"There's already an opened websocket connection, closing the newly opened one\")\n if (this.ws) {\n this.ws.onclose = () => {}\n this.ws.close()\n }\n }\n\n console.log('Websocket connection successful')\n this.opened = true\n this.reconnectMsecs = this.minReconnectMsecs\n\n if (this.pending) {\n this.pending = false\n }\n\n if (this.timeout) {\n clearTimeout(this.timeout)\n this.timeout = undefined\n }\n },\n\n onError(error) {\n console.error('Websocket error')\n console.error(error)\n },\n\n onClose(event) {\n if (event) {\n console.log(\n `Websocket closed - code: ${event.code} - reason: ${event.reason}. ` +\n `Retrying in ${this.reconnectMsecs / 1000}s`\n )\n }\n\n this.opened = false\n\n if (!this.pending) {\n this.pending = true\n this.init()\n }\n },\n\n init() {\n try {\n const protocol = location.protocol === 'https:' ? 'wss' : 'ws'\n const url = `${protocol}://${location.host}/ws/events`\n this.ws = new WebSocket(url)\n } catch (err) {\n console.error('Websocket initialization error')\n console.error(err)\n return\n }\n\n this.pending = true\n this.timeout = setTimeout(this.onWebsocketTimeout, this.reconnectMsecs)\n this.ws.onmessage = this.onMessage\n this.ws.onopen = this.onOpen\n this.ws.onerror = this.onError\n this.ws.onclose = this.onClose\n this.initialized = true\n },\n\n subscribe(msg) {\n const handler = msg.handler\n const events = msg.events.length ? msg.events : [null]\n const handlerName = msg.handlerName\n\n for (const event of events) {\n if (!(event in this.handlers)) {\n this.handlers[event] = {}\n }\n\n if (!(handlerName in this.handlerNameToEventTypes)) {\n this.handlerNameToEventTypes[handlerName] = events\n }\n\n this.handlers[event][handlerName] = handler\n }\n\n return () => {\n this.unsubscribe(handlerName)\n }\n },\n\n unsubscribe(handlerName) {\n const events = this.handlerNameToEventTypes[handlerName]\n if (!events)\n return\n\n for (const event of events) {\n if (!this.handlers[event]?.[handlerName])\n continue\n\n delete this.handlers[event][handlerName]\n if (!Object.keys(this.handlers[event]).length)\n delete this.handlers[event]\n }\n\n delete this.handlerNameToEventTypes[handlerName]\n },\n },\n\n created() {\n bus.on('subscribe', this.subscribe)\n bus.on('unsubscribe', this.unsubscribe)\n this.init()\n },\n}\n</script>\n","import { render } from \"./Events.vue?vue&type=template&id=6a0e6afd\"\nimport script from \"./Events.vue?vue&type=script&lang=js\"\nexport * from \"./Events.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=\"assistant-modal\">\n <Modal ref=\"assistantModal\">\n <div class=\"icon\">\n <i class=\"fa fa-bell\" v-if=\"state.alerting\"></i>\n <i class=\"fa fa-volume-up\" v-else-if=\"state.responding\"></i>\n <i class=\"fa fa-comment-dots\" v-else-if=\"state.speechRecognized\"></i>\n <i class=\"fa fa-microphone\" v-else></i>\n </div>\n\n <div class=\"text\">\n <div class=\"listening\" v-if=\"state.listening\">\n <span>Assistant listening</span>\n </div>\n <div class=\"speech-recognized\" v-else-if=\"state.speechRecognized\">\n <span v-text=\"phrase\"></span>\n </div>\n <div class=\"responding\" v-else-if=\"state.responding\">\n <span v-text=\"responseText\"></span>\n </div>\n </div>\n </Modal>\n </div>\n</template>\n\n<script>\nimport Modal from \"@/components/Modal\";\nimport Utils from \"@/Utils\";\n\nexport default {\n name: \"VoiceAssistant\",\n components: {Modal},\n mixins: [Utils],\n\n data() {\n return {\n responseText: '',\n phrase: '',\n hideTimeout: undefined,\n\n state: {\n listening: false,\n speechRecognized: false,\n responding: false,\n alerting: false,\n },\n };\n },\n\n methods: {\n reset() {\n this.state.listening = false\n this.state.speechRecognized = false\n this.state.responding = false\n this.state.alerting = false\n this.phrase = ''\n this.responseText = ''\n },\n\n conversationStart() {\n this.reset()\n this.state.listening = true\n this.$refs.assistantModal.show()\n\n if (this.hideTimeout) {\n clearTimeout(this.hideTimeout)\n this.hideTimeout = undefined\n }\n },\n\n conversationEnd() {\n const self = this\n\n this.hideTimeout = setTimeout(() => {\n this.reset()\n self.$refs.assistantModal.close()\n self.hideTimeout = undefined\n }, 4000)\n },\n\n speechRecognized(event) {\n this.reset()\n this.state.speechRecognized = true\n this.phrase = event.phrase\n this.$refs.assistantModal.show()\n },\n\n response(event) {\n this.reset()\n this.state.responding = true\n this.responseText = event.response_text\n this.$refs.assistantModal.show()\n },\n\n alertOn() {\n this.reset()\n this.state.alerting = true\n this.$refs.assistantModal.show()\n },\n\n alertOff() {\n this.reset()\n this.state.alerting = false\n this.$refs.assistantModal.close()\n },\n\n registerHandlers() {\n this.subscribe(this.conversationStart, null, 'platypush.message.event.assistant.ConversationStartEvent')\n this.subscribe(this.alertOn, null, 'platypush.message.event.assistant.AlertStartedEvent')\n this.subscribe(this.alertOff, null, 'platypush.message.event.assistant.AlertEndEvent')\n this.subscribe(this.speechRecognized, null, 'platypush.message.event.assistant.SpeechRecognizedEvent')\n this.subscribe(this.response, null, 'platypush.message.event.assistant.ResponseEvent')\n this.subscribe(this.conversationEnd, null,\n 'platypush.message.event.assistant.ConversationEndEvent',\n 'platypush.message.event.assistant.NoResponseEvent',\n 'platypush.message.event.assistant.ConversationTimeoutEvent')\n },\n },\n\n mounted() {\n this.registerHandlers()\n },\n}\n</script>\n\n<style lang=\"scss\">\n$icon-color: #7e8;\n$icon-border: 1px solid #ccc;\n$icon-shadow: 2px 2px 2px #ccc;\n\n.assistant-modal {\n .modal {\n .body {\n width: 50vw;\n height: 50vh;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n text-align: center;\n\n .icon {\n font-size: 3em;\n color: $icon-color;\n box-shadow: $icon-shadow;\n border: $icon-border;\n border-radius: 3em;\n padding: 1em;\n }\n\n .text {\n margin-top: 2.5em;\n }\n }\n }\n}\n</style>\n","import { render } from \"./VoiceAssistant.vue?vue&type=template&id=3f009270\"\nimport script from \"./VoiceAssistant.vue?vue&type=script&lang=js\"\nexport * from \"./VoiceAssistant.vue?vue&type=script&lang=js\"\n\nimport \"./VoiceAssistant.vue?vue&type=style&index=0&id=3f009270&lang=scss\"\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 />\n</template>\n\n<script>\nimport Utils from \"@/Utils\";\n\nexport default {\n name: \"Ntfy\",\n mixins: [Utils],\n\n methods: {\n onMessage(event) {\n this.notify({\n title: event.title,\n text: event.message,\n image: {\n icon: 'bell',\n },\n })\n },\n },\n\n mounted() {\n this.subscribe(this.onMessage, null, 'platypush.message.event.ntfy.NotificationEvent')\n },\n}\n</script>\n","import { render } from \"./Ntfy.vue?vue&type=template&id=1c4a4708\"\nimport script from \"./Ntfy.vue?vue&type=script&lang=js\"\nexport * from \"./Ntfy.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 />\n</template>\n\n<script>\nimport Utils from \"@/Utils\";\n\nexport default {\n name: \"Pushbullet\",\n mixins: [Utils],\n\n methods: {\n onMessage(event) {\n if (event.push_type === 'mirror') {\n this.notify({\n title: event.title,\n text: event.body,\n image: {\n src: event.icon ? 'data:image/png;base64, ' + event.icon : undefined,\n icon: event.icon ? undefined : 'bell',\n },\n });\n }\n },\n },\n\n mounted() {\n this.subscribe(this.onMessage, null, 'platypush.message.event.pushbullet.PushbulletEvent')\n },\n}\n</script>\n","import { render } from \"./Pushbullet.vue?vue&type=template&id=bf9869d4\"\nimport script from \"./Pushbullet.vue?vue&type=script&lang=js\"\nexport * from \"./Pushbullet.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__","import { render } from \"./App.vue?vue&type=template&id=56afd0b4\"\nimport script from \"./App.vue?vue&type=script&lang=js\"\nexport * from \"./App.vue?vue&type=script&lang=js\"\n\nimport \"./App.vue?vue&type=style&index=0&id=56afd0b4&lang=scss\"\n\nimport exportComponent from \"../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <Loading v-if=\"loading\" />\n\n <div id=\"dashboard\" class=\"col-12\" :class=\"classes\" :style=\"style\">\n <Row v-for=\"(row, i) in rows\" :key=\"i\" :class=\"row.class\" :style=\"row.style\">\n <keep-alive v-for=\"(widget, j) in row.widgets\" :key=\"j\">\n <Widget :style=\"widget.style\" :class=\"widget.class\">\n <component :is=\"widget.component\" v-bind=\"getWidgetProps(widget)\" />\n </Widget>\n </keep-alive>\n </Row>\n </div>\n</template>\n\n<script>\nimport { defineAsyncComponent, shallowRef } from 'vue'\nimport Utils from '@/Utils'\nimport Loading from \"@/components/Loading\";\nimport Row from \"@/components/widgets/Row\";\nimport Widget from \"@/components/widgets/Widget\";\n\nexport default {\n name: 'Dashboard',\n mixins: [Utils],\n components: {Widget, Loading, Row},\n props: {\n // Refresh interval in seconds.\n refreshSeconds: {\n type: Number,\n required: false,\n default: 0,\n },\n },\n\n data() {\n return {\n rows: [],\n loading: false,\n style: undefined,\n class: undefined,\n }\n },\n\n computed: {\n classes() {\n return this.class\n },\n },\n\n methods: {\n getWidgetProps(widget) {\n const props = {...widget.props}\n if (props.class)\n delete props.class\n\n return props\n },\n\n parseTemplate(name, tmpl) {\n const node = new DOMParser().parseFromString(tmpl, 'text/xml').childNodes[0]\n const self = this\n this.style = node.attributes.style?.nodeValue\n this.class = node.attributes.class?.nodeValue\n\n this.rows = [...node.getElementsByTagName('Row')].map((row) => {\n return {\n style: row.attributes.style?.nodeValue,\n class: row.attributes.class?.nodeValue,\n widgets: [...row.children].map((el) => {\n const component = shallowRef(\n defineAsyncComponent(\n () => import(`@/components/widgets/${el.nodeName}/Index`)\n )\n )\n\n const style = el.attributes.style?.nodeValue\n const classes = el.attributes.class?.nodeValue\n const attrs = [...el.attributes].reduce((obj, node) => {\n if (node.nodeName !== 'style') {\n obj[node.nodeName] = node.nodeValue\n }\n\n return obj\n }, {\n content: el.innerHTML,\n })\n\n const widget = {\n component: component,\n style: style,\n class: classes,\n props: attrs || {},\n }\n\n self.$options.components[el.nodeName] = component\n return widget\n })\n }\n })\n\n this.loading = false\n },\n\n async refreshDashboard() {\n this.loading = true\n this.widgets = []\n const name = this.$route.params.name\n const template = (await this.request('config.get_dashboard', { name: name }))\n\n if (!template) {\n this.notifyError(`Dashboard ${name} not found`)\n }\n\n this.parseTemplate(name, template)\n },\n },\n\n mounted() {\n this.refreshDashboard()\n if (this.refreshSeconds) {\n const self = this\n setInterval(() => {\n self.refreshDashboard()\n }, parseInt((this.refreshSeconds*1000).toFixed(0)))\n }\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"~lato-font/scss/public-api\";\n$lato-font-path: \"~lato-font/fonts\";\n\n@include lato-include-font('medium');\n\n#dashboard {\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n margin: 0;\n padding: 1em 1em 0 1em;\n background: $dashboard-bg;\n background-size: cover;\n font-family: Lato, proxima-nova, Helvetica Neue, Arial, sans-serif;\n\n .blurred {\n filter: blur(0.075em);\n }\n}\n</style>\n\n<style>\nhtml {\n overflow: auto !important;\n}\n</style>\n","<template>\n <div class=\"row\" :class=\"classes\" :style=\"style\">\n <slot />\n </div>\n</template>\n\n<script>\nexport default {\n name: \"Row\",\n props: {\n // Class override\n class: {\n type: String,\n required: false,\n default: '',\n },\n\n // Style override\n style: {\n type: String,\n required: false,\n default: '',\n },\n },\n\n computed: {\n classes() {\n return this.class\n },\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.row {\n width: 100%;\n height: 49%;\n\n &:not(:last-child) {\n margin-bottom: 1%;\n }\n}\n</style>\n","import { render } from \"./Row.vue?vue&type=template&id=1b4663f2&scoped=true\"\nimport script from \"./Row.vue?vue&type=script&lang=js\"\nexport * from \"./Row.vue?vue&type=script&lang=js\"\n\nimport \"./Row.vue?vue&type=style&index=0&id=1b4663f2&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-1b4663f2\"]])\n\nexport default __exports__","<template>\n <div :style=\"style\" :class=\"classes\">\n <slot />\n </div>\n</template>\n\n<script>\nexport default {\n name: \"Widget\",\n props: {\n // Widget style override\n style: {\n type: String,\n required: false,\n default: '',\n },\n\n // Widget class override\n class: {\n type: String,\n required: false,\n default: '',\n },\n },\n\n computed: {\n classes() {\n return (this.class?.length ? this.class.split(' ') : ['col-3']).concat(['widget', 'column'])\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.widget {\n height: calc(100% - 1em);\n background: $background-color;\n border-radius: 5px;\n display: flex;\n justify-content: center;\n align-content: center;\n position: relative;\n overflow: hidden;\n box-shadow: 0 3px 3px 0 rgba(0,0,0,0.16), 0 0 0 1px rgba(0,0,0,0.08);\n}\n</style>\n","import { render } from \"./Widget.vue?vue&type=template&id=5df52982&scoped=true\"\nimport script from \"./Widget.vue?vue&type=script&lang=js\"\nexport * from \"./Widget.vue?vue&type=script&lang=js\"\n\nimport \"./Widget.vue?vue&type=style&index=0&id=5df52982&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-5df52982\"]])\n\nexport default __exports__","import { render } from \"./Dashboard.vue?vue&type=template&id=54e0248a&scoped=true\"\nimport script from \"./Dashboard.vue?vue&type=script&lang=js\"\nexport * from \"./Dashboard.vue?vue&type=script&lang=js\"\n\nimport \"./Dashboard.vue?vue&type=style&index=0&id=54e0248a&lang=scss&scoped=true\"\nimport \"./Dashboard.vue?vue&type=style&index=1&id=54e0248a&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-54e0248a\"]])\n\nexport default __exports__","<template>\n <h1>Object not found</h1>\n</template>\n\n<script>\nexport default {\n name: \"NotFound\"\n}\n</script>\n\n","import { render } from \"./NotFound.vue?vue&type=template&id=49501f4d\"\nimport script from \"./NotFound.vue?vue&type=script&lang=js\"\nexport * from \"./NotFound.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=\"login-container\">\n <form class=\"login\" method=\"POST\">\n <div class=\"header\">\n <span class=\"logo\">\n <img src=\"/logo.svg\" alt=\"logo\" />\n </span>\n <span class=\"text\">Platypush</span>\n </div>\n\n <div class=\"row\">\n <label>\n <input type=\"text\" name=\"username\" placeholder=\"Username\">\n </label>\n </div>\n\n <div class=\"row\">\n <label>\n <input type=\"password\" name=\"password\" placeholder=\"Password\">\n </label>\n </div>\n\n <div class=\"row\" v-if=\"_register\">\n <label>\n <input type=\"password\" name=\"confirm_password\" placeholder=\"Confirm password\">\n </label>\n </div>\n\n <div class=\"row buttons\">\n <input type=\"submit\" class=\"btn btn-primary\" :value=\"_register ? 'Register' : 'Login'\">\n </div>\n\n <div class=\"row pull-right\">\n <label class=\"checkbox\">\n <input type=\"checkbox\" name=\"remember\">&nbsp;\n Keep me logged in on this device &nbsp;\n </label>\n </div>\n </form>\n </div>\n</template>\n\n<script>\nimport Utils from \"@/Utils\";\n\nexport default {\n name: \"Login\",\n mixins: [Utils],\n props: {\n // Set to true for a registration form, false for a login form\n register: {\n type: Boolean,\n required: false,\n default: false,\n },\n },\n\n computed: {\n _register() {\n return this.parseBoolean(this.register)\n },\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\nbody {\n width: 100vw;\n height: 100vh;\n margin: 0;\n}\n\n.login-container {\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n background: $default-bg-6;\n}\n\n.header {\n font-size: 1.2em;\n margin-bottom: 2em;\n display: flex;\n justify-content: center;\n align-items: center;\n\n .logo {\n width: 3em;\n height: 3em;\n display: inline-flex;\n background-size: cover;\n }\n\n .text {\n font-family: Poppins, sans-serif;\n margin-left: .5em;\n }\n}\n\nform {\n display: flex;\n flex-direction: column;\n padding: 4em;\n border: $default-border-3;\n border-radius: 3em;\n box-shadow: 2px 2px 3px 3px $border-color-2;\n background: $background-color;\n\n .row {\n margin: 0.5em 0;\n }\n\n input[type=text],\n input[type=password] {\n width: 100%;\n }\n\n input[type=submit],\n input[type=password] {\n border-radius: 1em;\n }\n\n input[type=password] {\n padding: .25em .5em;\n }\n\n .checkbox {\n display: flex;\n font-size: 0.8em;\n }\n\n .buttons {\n text-align: center;\n\n input[type=submit] {\n padding: .5em .75em;\n }\n }\n}\n\na {\n color: $default-link-fg;\n}\n</style>\n","import { render } from \"./Login.vue?vue&type=template&id=af0b14d0&scoped=true\"\nimport script from \"./Login.vue?vue&type=script&lang=js\"\nexport * from \"./Login.vue?vue&type=script&lang=js\"\n\nimport \"./Login.vue?vue&type=style&index=0&id=af0b14d0&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-af0b14d0\"]])\n\nexport default __exports__","<template>\n <Login :register=\"true\" />\n</template>\n\n<script>\nimport Login from \"@/views/Login\";\n\nexport default {\n name: \"Register\",\n mixins: [Login],\n components: {Login},\n props: {\n register: {\n type: Boolean,\n required: false,\n default: true,\n },\n },\n}\n</script>\n","import { render } from \"./Register.vue?vue&type=template&id=1244b238\"\nimport script from \"./Register.vue?vue&type=script&lang=js\"\nexport * from \"./Register.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 <main>\n <Loading v-if=\"loading\" />\n <Nav :panels=\"components\"\n :selected-panel=\"selectedPanel\"\n :selected-config-panel=\"selectedConfigPanel\"\n :hostname=\"hostname\"\n @select=\"selectedPanel = $event\"\n @select-config=\"selectedConfigPanel = $event\"\n v-else\n />\n\n <div class=\"canvas\" v-if=\"selectedPanel === 'settings'\">\n <div class=\"panel\">\n <Settings :selected-panel=\"selectedConfigPanel\" />\n </div>\n </div>\n\n <div class=\"canvas\" v-else>\n <div class=\"panel\" :class=\"{hidden: name !== selectedPanel}\" v-for=\"(panel, name) in components\" :key=\"name\">\n <component :is=\"panel.component\" :config=\"panel.config\" :plugin-name=\"name\" v-if=\"name === selectedPanel\" />\n </div>\n </div>\n </main>\n</template>\n\n<script>\nimport { defineAsyncComponent, shallowRef } from \"vue\";\nimport Utils from '@/Utils'\nimport Loading from \"@/components/Loading\";\nimport Nav from \"@/components/Nav\";\nimport Settings from \"@/components/panels/Settings/Index\";\n\nexport default {\n name: 'Panel',\n mixins: [Utils],\n components: {Settings, Nav, Loading},\n\n data() {\n return {\n loading: false,\n plugins: {},\n backends: {},\n procedures: {},\n components: {},\n hostname: undefined,\n selectedPanel: undefined,\n selectedConfigPanel: 'users',\n }\n },\n\n methods: {\n initSelectedPanel() {\n const match = this.$route.hash.match('#?([a-zA-Z0-9.]+)[?]?(.*)')\n const plugin = match ? match[1] : 'entities'\n if (plugin?.length)\n this.selectedPanel = plugin\n },\n\n initPanels() {\n const self = this\n this.components = {}\n\n Object.entries(this.plugins).forEach(async ([name, plugin]) => {\n const componentName = name.split('.').map((token) => token[0].toUpperCase() + token.slice(1)).join('')\n let comp = null\n try {\n comp = await import(`@/components/panels/${componentName}/Index`)\n } catch (e) {\n return\n }\n\n const component = shallowRef(defineAsyncComponent(async () => { return comp }))\n self.$options.components[name] = component\n self.components[name] = {\n component: component,\n pluginName: name,\n config: plugin,\n }\n })\n },\n\n async parseConfig() {\n [this.plugins, this.backends, this.procedures, this.hostname] =\n await Promise.all([\n this.request('config.get_plugins'),\n this.request('config.get_backends'),\n this.request('config.get_procedures'),\n this.request('config.get_device_id'),\n ])\n\n this.initializeDefaultViews()\n },\n\n initializeDefaultViews() {\n this.plugins.execute = {}\n this.plugins.entities = {}\n },\n },\n\n async mounted() {\n this.loading = true\n\n try {\n await this.parseConfig()\n this.initPanels()\n this.initSelectedPanel()\n } finally {\n this.loading = false\n }\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\nmain {\n height: 100%;\n display: flex;\n\n @include until($tablet) {\n flex-direction: column;\n }\n\n .canvas {\n display: flex;\n flex-grow: 100;\n background: $menu-panel-bg;\n overflow: auto;\n\n .panel {\n width: 100%;\n height: 100%;\n display: flex;\n margin: 0 !important;\n box-shadow: none !important;\n overflow: auto;\n }\n }\n}\n</style>\n\n<style>\nhtml {\n overflow: auto !important;\n}\n</style>\n","<template>\n <nav :class=\"{collapsed: collapsed}\">\n <div class=\"toggler\" @click=\"collapsed = !collapsed\">\n <i class=\"fas fa-bars\" />\n <span class=\"hostname\" v-if=\"hostname\" v-text=\"hostname\" />\n </div>\n\n <ul class=\"plugins\" v-if=\"selectedPanel === 'settings'\">\n <li class=\"entry\" title=\"Home\" @click=\"onItemClick('entities')\">\n <a href=\"/#\">\n <i class=\"fas fa-home\" />\n <span class=\"name\" v-if=\"!collapsed\">Home</span>\n </a>\n </li>\n\n <li v-for=\"config, name in configSections\" :key=\"name\" class=\"entry\"\n :class=\"{selected: name === selectedConfigPanel}\"\n :title=\"config.name\" @click=\"$emit('select-config', name)\">\n <a href=\"/#settings\">\n <span class=\"icon\">\n <i :class=\"config.icon['class']\" v-if=\"config.icon?.['class']\" />\n <img :src=\"config.icon?.imgUrl\" v-else-if=\"config.icon?.imgUrl\" alt=\"name\"/>\n <i class=\"fas fa-puzzle-piece\" v-else />\n </span>\n <span class=\"name\" v-if=\"!collapsed\" v-text=\"config.name\" />\n </a>\n </li>\n </ul>\n\n <ul class=\"plugins\" v-else>\n <li v-for=\"name in panelNames\" :key=\"name\" class=\"entry\" :class=\"{selected: name === selectedPanel}\"\n :title=\"name\" @click=\"onItemClick(name)\">\n <a :href=\"`/#${name}`\">\n <span class=\"icon\">\n <i :class=\"icons[name].class\" v-if=\"icons[name]?.class\" />\n <img :src=\"icons[name].imgUrl\" v-else-if=\"icons[name]?.imgUrl\" alt=\"name\"/>\n <i class=\"fas fa-puzzle-piece\" v-else />\n </span>\n <span class=\"name\" v-if=\"!collapsed\" v-text=\"name == 'entities' ? 'Home' : name\" />\n </a>\n </li>\n </ul>\n\n <ul class=\"footer\">\n <li :class=\"{selected: selectedPanel === 'settings'}\" title=\"Settings\" @click=\"onItemClick('settings')\">\n <a href=\"/#settings\">\n <span class=\"icon\">\n <i class=\"fa fa-cog\" />\n </span>\n <span class=\"name\" v-if=\"!collapsed\">Settings</span>\n </a>\n </li>\n\n <li title=\"Logout\" @click=\"onItemClick('logout')\">\n <a href=\"/logout\">\n <span class=\"icon\">\n <i class=\"fas fa-sign-out-alt\" />\n </span>\n <span class=\"name\" v-if=\"!collapsed\">Logout</span>\n </a>\n </li>\n </ul>\n </nav>\n</template>\n\n<script>\nimport icons from '@/assets/icons.json'\nimport Utils from \"@/Utils\";\nimport configSections from '@/components/panels/Settings/sections.json';\n\nexport default {\n name: \"Nav\",\n emits: ['select', 'select-config'],\n mixins: [Utils],\n props: {\n panels: {\n type: Object,\n required: true,\n },\n\n selectedPanel: {\n type: String,\n },\n\n selectedConfigPanel: {\n type: String,\n },\n\n hostname: {\n type: String,\n },\n },\n\n computed: {\n panelNames() {\n let panelNames = Object.keys(this.panels)\n const homeIdx = panelNames.indexOf('entities')\n if (homeIdx >= 0)\n return ['entities'].concat((panelNames.slice(0, homeIdx).concat(panelNames.slice(homeIdx+1))).sort())\n return panelNames.sort()\n },\n\n collapsedDefault() {\n if (this.isMobile() || this.isTablet())\n return true\n return false\n },\n },\n\n methods: {\n onItemClick(name) {\n this.$emit('select', name)\n this.collapsed = this.isMobile() ? true : this.collapsedDefault\n },\n },\n\n data() {\n return {\n collapsed: true,\n icons: icons,\n host: null,\n configSections: configSections,\n }\n },\n\n mounted() {\n this.collapsed = this.collapsedDefault\n },\n}\n</script>\n\n<!--suppress SassScssResolvedByNameOnly -->\n<style lang=\"scss\" scoped>\n$toggler-height: 2em;\n$footer-collapsed-height: 4em;\n$footer-expanded-height: 7.1em;\n\nnav {\n @media screen and (max-width: #{$tablet - 1px}) {\n width: 100%;\n height: 100vh;\n background: $nav-bg;\n color: $nav-fg;\n box-shadow: $nav-box-shadow-main;\n\n &.collapsed {\n box-shadow: 1px 1px 1px 1px $default-shadow-color;\n margin-bottom: 2px;\n z-index: 1;\n }\n\n &:not(.collapsed) {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 5;\n }\n }\n\n @media screen and (min-width: $tablet) {\n width: calc(16em - 2vw);\n min-width: calc(16em - 2vw);\n height: 100%;\n overflow: auto;\n background: $nav-bg;\n color: $nav-fg;\n box-shadow: $nav-box-shadow-main;\n z-index: 1;\n }\n\n @media screen and (min-width: $desktop) {\n width: 20em;\n min-width: 20em;\n }\n\n li {\n border-bottom: $nav-entry-border;\n cursor: pointer;\n list-style: none;\n\n a {\n display: block;\n color: $nav-fg;\n padding: 1em 0.5em;\n text-decoration: none;\n\n &:hover {\n color: $nav-fg;\n }\n }\n\n &.selected {\n background: $nav-entry-selected-bg;\n border: 1px solid rgba(0, 0, 0, 0);\n }\n\n &:hover {\n background: $nav-entry-hover-bg;\n border: 1px solid rgba(0, 0, 0, 0);\n }\n\n .name {\n margin-left: 0.5em;\n }\n\n .icon {\n margin-right: 0.5em;\n }\n }\n\n .toggler {\n width: 100%;\n height: $toggler-height;\n background: $nav-toggler-bg;\n display: flex;\n font-size: 1.5em;\n cursor: pointer;\n padding: 0.4em;\n align-items: center;\n box-shadow: $nav-toggler-shadow;\n }\n\n .hostname {\n font-size: 0.7em;\n margin-top: -0.2em;\n\n @media screen and (min-width: $tablet) {\n margin-left: 1em;\n }\n\n @media screen and (max-width: #{$tablet - 1px}) {\n text-align: right;\n margin-right: 0.25em;\n flex-grow: 1;\n }\n }\n\n .plugins {\n height: calc(100% - #{$toggler-height} - #{$footer-expanded-height} - 1em);\n overflow: auto;\n }\n\n .footer {\n height: $footer-expanded-height;\n background: $nav-footer-bg;\n padding: 0;\n margin: 0;\n\n li:last-child {\n border: 0;\n }\n }\n\n ul {\n li {\n .icon {\n margin-right: 0;\n\n & img {\n width: 1.25em;\n height: 1.25em;\n }\n }\n }\n }\n\n &.collapsed {\n display: flex;\n flex-direction: column;\n\n @media screen and (min-width: $tablet) {\n width: 2.5em;\n min-width: 2.5em;\n max-width: 2.5em;\n background: $nav-collapsed-bg;\n color: $nav-collapsed-fg;\n box-shadow: $nav-box-shadow-collapsed;\n\n .hostname {\n display: none;\n }\n }\n\n @media screen and (max-width: #{$tablet - 1px}) {\n height: auto;\n }\n\n a {\n color: $nav-collapsed-fg;\n padding: 0.25em 0;\n &:hover {\n color: $nav-collapsed-fg;\n }\n }\n\n .toggler {\n height: $toggler-height;\n text-align: center;\n box-shadow: none;\n background: $nav-toggler-collapsed-bg;\n\n @media screen and (max-width: #{$tablet - 1px}) {\n background: $nav-toggler-collapsed-mobile-bg;\n color: $nav-toggler-collapsed-mobile-fg;\n }\n }\n\n .footer {\n height: $footer-collapsed-height;\n background: none;\n padding: 0;\n margin-bottom: .5em;\n box-shadow: none;\n }\n\n @media screen and (max-width: #{$tablet - 1px}) {\n .footer {\n display: none;\n }\n }\n\n ul {\n display: flex;\n flex-direction: column;\n justify-content: center;\n height: calc(100% - #{$toggler-height} - #{$footer-collapsed-height});\n overflow: hidden;\n\n &.plugins {\n @media screen and (min-width: $tablet) and (max-width: #{$desktop - 1px}) {\n margin: 2em 0;\n }\n }\n\n &:hover {\n overflow: auto;\n }\n\n li {\n border: none;\n padding: 0;\n text-align: center;\n\n &.selected,\n &:hover {\n border-radius: 1em;\n margin: 0 0.2em;\n }\n\n &.selected {\n background: $nav-entry-collapsed-selected-bg;\n }\n\n &:hover {\n background: $nav-entry-collapsed-hover-bg;\n }\n\n .icon {\n margin-right: 0;\n }\n\n @media screen and (max-width: #{$tablet - 1px}) {\n display: none;\n }\n }\n }\n }\n}\n</style>\n","import { render } from \"./Nav.vue?vue&type=template&id=831e98ec&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=831e98ec&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-831e98ec\"]])\n\nexport default __exports__","import { render } from \"./Panel.vue?vue&type=template&id=2e3e2cc6&scoped=true\"\nimport script from \"./Panel.vue?vue&type=script&lang=js\"\nexport * from \"./Panel.vue?vue&type=script&lang=js\"\n\nimport \"./Panel.vue?vue&type=style&index=0&id=2e3e2cc6&lang=scss&scoped=true\"\nimport \"./Panel.vue?vue&type=style&index=1&id=2e3e2cc6&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-2e3e2cc6\"]])\n\nexport default __exports__","<template>\n <main>\n <Loading v-if=\"loading\" />\n <div class=\"canvas\" v-else>\n <component :is=\"component\" :config=\"config\" :plugin-name=\"pluginName\" />\n </div>\n </main>\n</template>\n\n<script>\nimport { defineAsyncComponent, shallowRef } from \"vue\";\nimport Utils from '@/Utils'\nimport Loading from \"@/components/Loading\";\nimport Nav from \"@/components/Nav\";\nimport Settings from \"@/components/panels/Settings/Index\";\n\nexport default {\n name: 'Panel',\n mixins: [Utils],\n components: {Settings, Nav, Loading},\n\n data() {\n return {\n loading: false,\n config: {},\n plugins: {},\n backends: {},\n procedures: {},\n component: undefined,\n hostname: undefined,\n selectedPanel: undefined,\n }\n },\n\n computed: {\n pluginName() {\n return this.$route.params.plugin\n },\n },\n\n methods: {\n async initPanel() {\n const componentName = this.pluginName.split('.').map((token) => token[0].toUpperCase() + token.slice(1)).join('')\n let comp = null\n\n try {\n comp = await import(`@/components/panels/${componentName}/Index`)\n } catch (e) {\n console.error(e)\n this.notify({\n error: true,\n title: `Cannot load plugin ${this.pluginName}`,\n text: e.toString(),\n })\n\n return\n }\n\n this.component = shallowRef(defineAsyncComponent(async () => { return comp }))\n this.$options.components[componentName] = this.component\n },\n\n async initConfig() {\n const config = await this.request('config.get')\n this.config = config[this.pluginName] || {}\n this.hostname = await this.request('config.get_device_id')\n },\n },\n\n async mounted() {\n this.loading = true\n\n try {\n await this.initConfig()\n await this.initPanel()\n } finally {\n this.loading = false\n }\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\nmain {\n height: 100%;\n display: flex;\n\n @media screen and (max-width: $tablet) {\n flex-direction: column;\n }\n\n .canvas {\n display: flex;\n flex-grow: 100;\n background: $menu-panel-bg;\n overflow: auto;\n\n .panel {\n width: 100%;\n height: 100%;\n display: flex;\n margin: 0 !important;\n box-shadow: none !important;\n overflow: auto;\n }\n }\n}\n</style>\n\n<style>\nhtml {\n overflow: auto !important;\n}\n</style>\n","import { render } from \"./Plugin.vue?vue&type=template&id=e339182c&scoped=true\"\nimport script from \"./Plugin.vue?vue&type=script&lang=js\"\nexport * from \"./Plugin.vue?vue&type=script&lang=js\"\n\nimport \"./Plugin.vue?vue&type=style&index=0&id=e339182c&lang=scss&scoped=true\"\nimport \"./Plugin.vue?vue&type=style&index=1&id=e339182c&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-e339182c\"]])\n\nexport default __exports__","import { createWebHistory, createRouter } from \"vue-router\";\nimport Dashboard from \"@/views/Dashboard.vue\";\nimport NotFound from \"@/views/NotFound\";\nimport Login from \"@/views/Login\";\nimport Register from \"@/views/Register\";\nimport Panel from \"@/views/Panel\";\nimport Plugin from \"@/views/Plugin\";\n\nconst routes = [\n {\n path: \"/\",\n name: \"Panel\",\n component: Panel,\n },\n\n {\n path: \"/dashboard/:name\",\n name: \"Dashboard\",\n component: Dashboard,\n },\n\n {\n path: \"/plugin/:plugin\",\n name: \"Plugin\",\n component: Plugin,\n },\n\n {\n path: \"/login\",\n name: \"Login\",\n component: Login,\n },\n\n {\n path: \"/register\",\n name: \"Register\",\n component: Register,\n },\n\n {\n path: \"/:catchAll(.*)\",\n component: NotFound,\n },\n];\n\nconst router = createRouter({\n history: createWebHistory(),\n routes,\n});\n\nexport default router;\n","/* eslint-disable no-console */\n\nimport { register } from 'register-service-worker'\n\nif (process.env.NODE_ENV === 'production') {\n register(`${process.env.BASE_URL}service-worker.js`, {\n ready () {\n console.log(\n 'App is being served from cache by a service worker.\\n' +\n 'For more details, visit https://goo.gl/AFskqB'\n )\n },\n registered () {\n console.log('Service worker has been registered.')\n },\n cached () {\n console.log('Content has been cached for offline use.')\n },\n updatefound () {\n console.log('New content is downloading.')\n },\n updated () {\n console.log('New content is available; please refresh.')\n },\n offline () {\n console.log('No internet connection found. App is running in offline mode.')\n },\n error (error) {\n console.error('Error during service worker registration:', error)\n }\n })\n}\n","import { createApp } from 'vue'\nimport App from '@/App.vue'\nimport router from '@/router'\nimport './registerServiceWorker'\n\nconst app = createApp(App)\napp.config.globalProperties._config = window.config\napp.use(router).mount('#app')\n","<script>\nimport axios from 'axios'\n\nexport default {\n name: \"Api\",\n methods: {\n execute(request, timeout=60000, showError=true) {\n const opts = {};\n\n if (!('target' in request) || !request['target']) {\n request['target'] = 'localhost'\n }\n\n if (!('type' in request) || !request['type']) {\n request['type'] = 'request'\n }\n\n if (timeout) {\n opts.timeout = timeout\n }\n\n return new Promise((resolve, reject) => {\n axios.post('/execute', request, opts)\n .then((response) => {\n response = response.data.response\n if (!response.errors?.length) {\n resolve(response.output);\n } else {\n const error = response.errors?.[0] || response\n this.notify({\n text: error,\n error: true,\n })\n\n reject(error)\n }\n })\n .catch((error) => {\n // No users present -> redirect to the registration page\n if (\n error?.response?.data?.code === 412 &&\n window.location.href.indexOf('/register') < 0\n ) {\n window.location.href = '/register?redirect=' + window.location.href\n return\n }\n\n // Unauthorized -> redirect to the login page\n if (\n error?.response?.data?.code === 401 &&\n window.location.href.indexOf('/login') < 0\n ) {\n window.location.href = '/login?redirect=' + window.location.href\n return\n }\n\n console.log(error)\n if (showError)\n this.notify({\n text: error,\n error: true,\n })\n\n reject(error)\n })\n })\n },\n\n request(action, args={}, timeout=60000, showError=true) {\n return this.execute({\n type: 'request',\n action: action,\n args: args,\n }, timeout, showError);\n }\n },\n}\n</script>\n\n","import script from \"./Api.vue?vue&type=script&lang=js\"\nexport * from \"./Api.vue?vue&type=script&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__","<script>\nexport default {\n name: \"Clipboard\",\n methods: {\n async copyToClipboard(text) {\n await navigator.clipboard.writeText(text)\n this.notify({\n text: 'Copied to the clipboard',\n image: {\n icon: 'clipboard',\n },\n })\n },\n },\n}\n</script>\n\n","import script from \"./Clipboard.vue?vue&type=script&lang=js\"\nexport * from \"./Clipboard.vue?vue&type=script&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__","<script>\nexport default {\n name: \"Cookies\",\n methods: {\n getCookies() {\n return document.cookie.split(/;\\s*/).reduce((obj, item) => {\n const [k, v] = item.split('=')\n obj[k] = v\n return obj\n }, {})\n },\n\n getCookie(name) {\n return this.getCookies()[name]\n },\n\n setCookie(name, value, opts) {\n document.cookie = (\n `${name}=${value}; path=${opts?.path || '/'}` + (\n opts?.expires ? `; expires=${opts?.expires.toISOString()}` : ''\n )\n )\n },\n\n deleteCookie(name) {\n document.cookie = (\n `${name}=; expires=1970-01-01T00:00:00Z`\n )\n },\n }\n}\n</script>\n","import script from \"./Cookies.vue?vue&type=script&lang=js\"\nexport * from \"./Cookies.vue?vue&type=script&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__","<script>\nexport default {\n name: \"DateTime\",\n methods: {\n formatDate(date, year=false) {\n if (typeof date === 'string')\n date = new Date(Date.parse(date))\n\n return date.toDateString().substring(0, year ? 15 : 10)\n },\n\n formatTime(date, seconds=true) {\n if (typeof date === 'string')\n date = new Date(Date.parse(date))\n\n return date.toTimeString().substring(0, seconds ? 8 : 5)\n },\n\n formatDateTime(date, year=false, seconds=true) {\n if (typeof date === 'string')\n date = new Date(Date.parse(date))\n\n return `${this.formatDate(date, year)}, ${this.formatTime(date, seconds)}`\n },\n },\n}\n</script>\n","import script from \"./DateTime.vue?vue&type=script&lang=js\"\nexport * from \"./DateTime.vue?vue&type=script&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__","<script>\nimport { bus } from \"@/bus\";\n\nexport default {\n name: \"Events\",\n computed: {\n _eventsReady() {\n return this.$root.$refs.events?.initialized\n },\n },\n\n methods: {\n subscribe(handler, handlerName, ...events) {\n const subFunc = () => {\n bus.emit('subscribe', {\n events: events,\n handler: handler,\n handlerName: handlerName || this.generateId(),\n })\n }\n\n if (this._eventsReady) {\n subFunc()\n return\n }\n\n const self = this\n const unwatch = this.$watch( () => self._eventsReady, (newVal) => {\n if (newVal) {\n subFunc()\n unwatch()\n }\n })\n\n return unwatch\n },\n\n unsubscribe(handlerName) {\n bus.emit('unsubscribe', handlerName)\n },\n\n generateId() {\n return btoa([...Array(11).keys()].map(() => String.fromCharCode(Math.round(Math.random() * 255))))\n },\n }\n}\n</script>\n","import script from \"./Events.vue?vue&type=script&lang=js\"\nexport * from \"./Events.vue?vue&type=script&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__","<script>\nimport { bus } from \"@/bus\";\n\nexport default {\n name: \"Notification\",\n methods: {\n notify(notification) {\n bus.publishNotification(notification)\n },\n\n notifyWarning(msg) {\n this.notify({\n text: msg,\n warning: true,\n })\n },\n\n notifyError(msg) {\n this.notify({\n text: msg,\n error: true,\n })\n\n throw msg\n },\n }\n}\n</script>\n","import script from \"./Notification.vue?vue&type=script&lang=js\"\nexport * from \"./Notification.vue?vue&type=script&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__","<script>\nexport default {\n name: \"Screen\",\n methods: {\n isMobile() {\n return window.matchMedia(\"only screen and (max-width: 768px)\").matches\n },\n\n isTablet() {\n return (\n !this.isMobile() &&\n window.matchMedia(\"only screen and (max-width: 1023px)\").matches\n )\n },\n\n isDesktop() {\n return window.matchMedia(\"only screen and (min-width: 1024px)\").matches\n },\n },\n}\n</script>\n","import script from \"./Screen.vue?vue&type=script&lang=js\"\nexport * from \"./Screen.vue?vue&type=script&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__","<script>\nexport default {\n name: \"Text\",\n methods: {\n capitalize(text) {\n if (!text?.length)\n return text\n\n return text.charAt(0).toUpperCase() + text.slice(1)\n },\n\n prettify(text) {\n return text.split('_').map((t) => this.capitalize(t)).join(' ')\n },\n\n indent(text, spaces = 2) {\n return text.split('\\n').map((t) => `${' '.repeat(spaces)}${t}`).join('\\n')\n },\n },\n}\n</script>\n","import script from \"./Text.vue?vue&type=script&lang=js\"\nexport * from \"./Text.vue?vue&type=script&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__","<script>\nexport default {\n name: \"Types\",\n methods: {\n parseBoolean(value) {\n if (typeof value === 'string') {\n value = value.toLowerCase()\n if (value === 'true')\n return true\n if (value === 'false')\n return false\n\n return !!parseInt(value)\n }\n\n return !!value\n },\n\n convertSize(value) {\n if (typeof value === 'string')\n value = parseInt(value)\n\n let unit = null\n const units = ['B', 'KB', 'MB', 'GB', 'TB']\n\n units.forEach((u, i) => {\n if (value <= 1024 && unit == null) {\n unit = u\n } else if (value > 1024) {\n if (i === units.length-1) {\n unit = u\n } else {\n value = value/1024\n }\n }\n })\n\n return `${value.toFixed(2)} ${unit}`\n },\n\n convertTime(time) {\n const t = {}\n const ret = []\n\n time = parseFloat(time); // Normalize strings\n t.d = Math.round(time/86400)\n t.h = Math.round(time/3600 - t.d*24)\n t.m = Math.round(time/60 - (t.d*24 + t.h*60))\n t.s = Math.round(time - (t.d*24 + t.h*3600 + t.m*60), 1)\n\n if (parseInt(t.d)) {\n let d = t.d + ' day'\n if (t.d > 1) {\n d += 's'\n }\n ret.push(d)\n }\n\n if (parseInt(t.h)) {\n let h = t.h + ' hour'\n if (t.h > 1) {\n h += 's'\n }\n ret.push(h)\n }\n\n if (parseInt(t.m)) {\n let m = t.m + ' minute'\n if (t.m > 1) {\n m += 's'\n }\n ret.push(m)\n }\n\n let s = t.s + ' second'\n if (t.s > 1) {\n s += 's'\n }\n ret.push(s)\n\n return ret.join(' ')\n },\n\n objectsEqual(a, b) {\n if (typeof(a) !== 'object' || typeof(b) !== 'object')\n return false\n\n if (a == null || b == null) {\n return a == null && b == null\n }\n\n for (const p of Object.keys(a || {})) {\n switch(typeof(a[p])) {\n case 'object':\n if (!this.objectsEqual(a[p], b[p]))\n return false\n break\n\n case 'function':\n if (a[p].toString() != b[p]?.toString())\n return false\n break\n\n default:\n if (a[p] != b[p])\n return false\n break\n }\n }\n\n for (const p of Object.keys(b || {}))\n if (a[p] == null && b[p] != null)\n return false\n\n return true\n },\n },\n}\n</script>\n","import script from \"./Types.vue?vue&type=script&lang=js\"\nexport * from \"./Types.vue?vue&type=script&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__","<script>\nimport Api from \"@/utils/Api\";\nimport Clipboard from \"@/utils/Clipboard\";\nimport Cookies from \"@/utils/Cookies\";\nimport DateTime from \"@/utils/DateTime\";\nimport Events from \"@/utils/Events\";\nimport Notification from \"@/utils/Notification\";\nimport Screen from \"@/utils/Screen\";\nimport Text from \"@/utils/Text\";\nimport Types from \"@/utils/Types\";\n\nexport default {\n name: \"Utils\",\n mixins: [\n Api,\n Clipboard,\n Cookies,\n DateTime,\n Events,\n Notification,\n Screen,\n Text,\n Types,\n ],\n}\n</script>\n","import script from \"./Utils.vue?vue&type=script&lang=js\"\nexport * from \"./Utils.vue?vue&type=script&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__","<template>\n <div class=\"loading\">\n <div class=\"icon\">\n <div v-for=\"n in 4\" :key=\"n\" />\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.loading {\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 3em;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: $loading-bg;\n opacity: 0.5;\n}\n\n.icon {\n display: inline-block;\n position: relative;\n width: 80px;\n height: 80px;\n\n div {\n position: absolute;\n top: 33px;\n width: 13px;\n height: 13px;\n border-radius: 50%;\n background: #fff;\n animation-timing-function: cubic-bezier(0, 1, 1, 0);\n\n &:nth-child(1) {\n left: 8px;\n animation: lds-ellipsis1 0.6s infinite;\n }\n\n &:nth-child(2) {\n left: 8px;\n animation: lds-ellipsis2 0.6s infinite;\n }\n\n &:nth-child(3) {\n left: 32px;\n animation: lds-ellipsis2 0.6s infinite;\n }\n\n &:nth-child(4) {\n left: 56px;\n animation: lds-ellipsis3 0.6s infinite;\n }\n }\n}\n\n@keyframes lds-ellipsis1 {\n 0% {\n transform: scale(0);\n }\n 100% {\n transform: scale(1);\n }\n}\n\n@keyframes lds-ellipsis3 {\n 0% {\n transform: scale(1);\n }\n 100% {\n transform: scale(0);\n }\n}\n\n@keyframes lds-ellipsis2 {\n 0% {\n transform: translate(0, 0);\n }\n 100% {\n transform: translate(24px, 0);\n }\n}\n</style>","import { render } from \"./Loading.vue?vue&type=template&id=4d9c871b&scoped=true\"\nconst script = {}\n\nimport \"./Loading.vue?vue&type=style&index=0&id=4d9c871b&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-4d9c871b\"]])\n\nexport default __exports__","<template>\n <div class=\"modal-container fade-in\" :id=\"id\" :class=\"{hidden: !isVisible}\"\n :style=\"{'--z-index': zIndex}\" @click=\"close\">\n <div class=\"modal\" :class=\"$attrs.class\">\n <div class=\"content\" :style=\"{'--width': width, '--height': height}\" @click=\"$event.stopPropagation()\">\n <div class=\"header\" v-if=\"title\">\n <div class=\"title\" v-text=\"title\" v-if=\"title\" />\n <button title=\"Close\" alt=\"Close\" @click=\"close\">\n <i class=\"fas fa-xmark\" />\n </button>\n </div>\n <div class=\"body\">\n <slot @modal-close=\"close\" />\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: \"Modal\",\n emits: ['close', 'open'],\n props: {\n // Modal ID\n id: {\n type: String,\n },\n\n // Modal title\n title: {\n type: String,\n },\n\n // Modal width\n width: {\n type: [Number, String],\n },\n\n // Modal height\n height: {\n type: [Number, String],\n },\n\n // Modal initial visibility value\n visible: {\n type: Boolean,\n default: false,\n },\n\n // Modal timeout in seconds\n timeout: {\n type: [Number, String],\n },\n\n // Modal z-index level\n level: {\n type: Number,\n default: 1,\n },\n },\n\n data() {\n return {\n timeoutId: undefined,\n prevVisible: this.visible,\n isVisible: this.visible,\n }\n },\n\n computed: {\n zIndex() {\n return 500 + this.level\n },\n },\n\n methods: {\n close() {\n this.prevVisible = this.isVisible\n this.isVisible = false\n },\n\n hide() {\n this.close()\n },\n\n show() {\n this.prevVisible = this.isVisible\n this.isVisible = true\n },\n\n toggle() {\n if (this.isVisible)\n this.close()\n else\n this.show()\n },\n\n onKeyUp(event) {\n event.stopPropagation()\n if (event.key === 'Escape') {\n this.close()\n }\n },\n },\n\n mounted() {\n const self = this\n const visibleHndl = (visible) => {\n if (!visible)\n self.$emit('close')\n else\n self.$emit('open')\n\n self.isVisible = visible\n }\n\n document.body.addEventListener('keyup', this.onKeyUp)\n this.$watch(() => this.visible, visibleHndl)\n this.$watch(() => this.isVisible, visibleHndl)\n },\n\n unmounted() {\n document.body.removeEventListener('keyup', this.onKeyUp)\n },\n\n updated() {\n this.prevVisible = this.isVisible\n if (this.isVisible) {\n // Make sure that a newly opened or visible+updated modal always comes to the front\n let maxZIndex = parseInt(getComputedStyle(this.$el).zIndex)\n let outermostModals = []\n\n for (const modal of document.querySelectorAll('.modal-container:not(.hidden)')) {\n const zIndex = parseInt(getComputedStyle(modal).zIndex)\n\n if (zIndex > maxZIndex) {\n maxZIndex = zIndex\n outermostModals = [modal]\n } else if (zIndex === maxZIndex) {\n outermostModals.push(modal)\n }\n }\n\n if (outermostModals.indexOf(this.$el) < 0 || outermostModals.length > 1) {\n this.$el.style.zIndex = maxZIndex+1\n }\n }\n\n if (this.isVisible && this.timeout && !this.timeoutId) {\n const handler = (self) => {\n return () => {\n // self.modalClose()\n self.close()\n self.timeoutId = undefined\n }\n }\n\n this.timeoutId = setTimeout(handler(this), 0+this.timeout)\n }\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n$icon-size: 1.5em;\n$icon-margin: 0.5em;\n\n.modal-container {\n position: fixed;\n display: flex;\n align-items: center;\n justify-content: center;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: var(--z-index);\n background: rgba(10,10,10,0.9);\n\n .modal {\n display: flex;\n\n .content {\n --width: auto;\n --height: auto;\n width: var(--width);\n height: var(--height);\n border-radius: 0.5em;\n background: $modal-body-bg;\n }\n\n .header {\n display: flex;\n position: relative;\n border-bottom: $modal-header-border;\n border-radius: 0.5em 0.5em 0 0;\n padding: 0.5em;\n text-align: center;\n justify-content: center;\n align-items: center;\n background: $modal-header-bg;\n text-transform: uppercase;\n\n button {\n width: $icon-size;\n height: $icon-size;\n position: absolute;\n right: 0;\n margin: auto $icon-margin;\n padding: 0;\n border: 0;\n background: transparent;\n\n &:hover {\n color: $default-hover-fg;\n }\n }\n }\n\n .body {\n max-height: 75vh;\n overflow: auto;\n padding: 2em;\n }\n }\n}\n</style>\n","import { render } from \"./Modal.vue?vue&type=template&id=18f9fdba&scoped=true\"\nimport script from \"./Modal.vue?vue&type=script&lang=js\"\nexport * from \"./Modal.vue?vue&type=script&lang=js\"\n\nimport \"./Modal.vue?vue&type=style&index=0&id=18f9fdba&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-18f9fdba\"]])\n\nexport default __exports__","<template>\n <Modal ref=\"modal\" :title=\"title\">\n <div class=\"dialog-content\">\n <slot />\n </div>\n\n <form class=\"buttons\" @submit.prevent=\"onConfirm\">\n <button type=\"submit\" class=\"ok-btn\" @click=\"onConfirm\" @touch=\"onConfirm\">\n <i class=\"fas fa-check\" /> &nbsp; {{ confirmText }}\n </button>\n <button type=\"button\" class=\"cancel-btn\" @click=\"close\" @touch=\"close\">\n <i class=\"fas fa-xmark\" /> &nbsp; {{ cancelText }}\n </button>\n </form>\n </Modal>\n</template>\n\n<script>\nimport Modal from \"@/components/Modal\";\n\nexport default {\n emits: ['input', 'click', 'touch'],\n components: {Modal},\n props: {\n title: {\n type: String,\n },\n\n confirmText: {\n type: String,\n default: \"OK\",\n },\n\n cancelText: {\n type: String,\n default: \"Cancel\",\n },\n },\n\n methods: {\n onConfirm() {\n this.$emit('input')\n this.close()\n },\n\n show() {\n this.$refs.modal.show()\n },\n\n close() {\n this.$refs.modal.hide()\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n:deep(.modal) {\n .dialog-content {\n padding: 1em;\n }\n\n .body {\n padding: 1.5em;\n }\n\n .buttons {\n display: flex;\n flex-direction: row;\n justify-content: right;\n margin-bottom: 1em;\n border: 0;\n border-radius: 0;\n\n button {\n margin-right: 1em;\n padding: 0.5em 1em;\n border: 1px solid $border-color-2;\n border-radius: 1em;\n\n &:hover {\n background: $hover-bg;\n }\n }\n }\n}\n</style>\n","import { render } from \"./ConfirmDialog.vue?vue&type=template&id=db648f4c&scoped=true\"\nimport script from \"./ConfirmDialog.vue?vue&type=script&lang=js\"\nexport * from \"./ConfirmDialog.vue?vue&type=script&lang=js\"\n\nimport \"./ConfirmDialog.vue?vue&type=style&index=0&id=db648f4c&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-db648f4c\"]])\n\nexport default __exports__","<template>\n <div class=\"dropdown-container\" ref=\"container\">\n <button :title=\"title\" ref=\"button\" @click.stop=\"toggle($event)\">\n <i class=\"icon\" :class=\"iconClass\" v-if=\"iconClass\" />\n <span class=\"text\" v-text=\"text\" v-if=\"text\" />\n </button>\n\n <div class=\"dropdown fade-in\" :id=\"id\" :class=\"{hidden: !visible}\" ref=\"dropdown\">\n <slot />\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: \"Dropdown\",\n emits: ['click'],\n props: {\n id: {\n type: String,\n },\n\n items: {\n type: Array,\n default: () => [],\n },\n\n iconClass: {\n default: 'fa fa-ellipsis-h',\n },\n\n text: {\n type: String,\n },\n\n title: {\n type: String,\n },\n\n keepOpenOnItemClick: {\n type: Boolean,\n default: false,\n },\n },\n\n data() {\n return {\n visible: false,\n }\n },\n\n methods: {\n documentClickHndl(event) {\n if (!this.visible)\n return\n\n let element = event.target\n while (element) {\n if (!this.$refs.dropdown)\n break\n if (element === this.$refs.dropdown.element)\n return\n\n element = element.parentElement\n }\n\n this.close()\n },\n\n close() {\n this.visible = false\n document.removeEventListener('click', this.documentClickHndl)\n },\n\n open() {\n document.addEventListener('click', this.documentClickHndl)\n this.visible = true\n\n setTimeout(() => {\n const element = this.$refs.dropdown\n element.style.left = 0\n element.style.top = parseFloat(getComputedStyle(this.$refs.button).height) + 'px'\n\n if (element.getBoundingClientRect().left > window.innerWidth/2)\n element.style.left = (-element.clientWidth + parseFloat(getComputedStyle(this.$refs.button).width)) + 'px'\n\n if (element.getBoundingClientRect().top > window.innerHeight/2)\n element.style.top = (-element.clientHeight + parseFloat(getComputedStyle(this.$refs.button).height)) + 'px'\n }, 10)\n },\n\n toggle(event) {\n event.stopPropagation()\n this.$emit('click')\n this.visible ? this.close() : this.open()\n },\n\n onKeyUp(event) {\n event.stopPropagation()\n if (event.key === 'Escape') {\n this.close()\n }\n },\n },\n\n mounted() {\n document.body.addEventListener('keyup', this.onKeyUp)\n },\n\n unmounted() {\n document.body.removeEventListener('keyup', this.onKeyUp)\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.dropdown-container {\n position: relative;\n display: inline-flex;\n flex-direction: column;\n\n button {\n background: $default-bg-2;\n border: 0;\n padding: 0.5em;\n\n &:hover {\n color: $default-hover-fg;\n }\n }\n\n .dropdown {\n position: absolute;\n width: max-content;\n background: $dropdown-bg;\n border-radius: .25em;\n border: $default-border-3;\n box-shadow: $dropdown-shadow;\n display: flex;\n flex-direction: column;\n z-index: 1;\n }\n}\n\n:deep(.dropdown-container) {\n button {\n width: 100%;\n height: 100%;\n color: $default-fg-2;\n background: $dropdown-bg;\n border: 0;\n padding: 0.75em 0.5em;\n text-align: left;\n letter-spacing: 0.01em;\n\n &:hover {\n background: $hover-bg;\n color: $default-fg-2;\n }\n\n .text {\n padding-left: 0.25em;\n }\n }\n}\n\n</style>\n","import { render } from \"./Dropdown.vue?vue&type=template&id=5b964c03&scoped=true\"\nimport script from \"./Dropdown.vue?vue&type=script&lang=js\"\nexport * from \"./Dropdown.vue?vue&type=script&lang=js\"\n\nimport \"./Dropdown.vue?vue&type=style&index=0&id=5b964c03&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-5b964c03\"]])\n\nexport default __exports__","<template>\n <div class=\"row item\" :class=\"itemClass\" @click=\"clicked\">\n <div class=\"col-2 icon\" v-if=\"iconClass?.length || iconUrl?.length\">\n <Icon :class=\"iconClass\" :url=\"iconUrl\" />\n </div>\n <div class=\"text\" :class=\"{'col-10': iconClass != null}\" v-text=\"text\" />\n </div>\n</template>\n\n<script>\nimport Icon from \"@/components/elements/Icon\";\n\nexport default {\n name: \"DropdownItem\",\n components: {Icon},\n props: {\n iconClass: {\n type: String,\n },\n\n iconUrl: {\n type: String,\n },\n\n text: {\n type: String,\n },\n\n disabled: {\n type: Boolean,\n default: false,\n },\n\n itemClass: {}\n },\n\n methods: {\n clicked(event) {\n if (this.disabled)\n return false\n\n this.$parent.$emit('click', event)\n if (!this.$parent.keepOpenOnItemClick)\n this.$parent.visible = false\n }\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.item {\n display: flex;\n padding: 0.75em 0.5em;\n cursor: pointer;\n align-items: center;\n color: $default-fg-2;\n border: 0;\n box-shadow: none;\n\n &:hover {\n background: $hover-bg;\n }\n\n &.selected {\n font-weight: bold;\n }\n\n &.disabled {\n color: $dropdown-disabled-color;\n cursor: initial;\n }\n\n .text {\n text-align: left;\n margin-left: 0.5em;\n }\n\n .icon {\n width: 1.5em;\n display: inline-flex;\n align-items: center;\n }\n\n ::v-deep(.icon-container) {\n width: 2em;\n display: inline-flex;\n align-items: center;\n\n .icon {\n margin: 0 1.5em 0 .5em;\n }\n }\n}\n</style>\n","import { render } from \"./DropdownItem.vue?vue&type=template&id=282d16b4&scoped=true\"\nimport script from \"./DropdownItem.vue?vue&type=script&lang=js\"\nexport * from \"./DropdownItem.vue?vue&type=script&lang=js\"\n\nimport \"./DropdownItem.vue?vue&type=style&index=0&id=282d16b4&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-282d16b4\"]])\n\nexport default __exports__","<template>\n <div class=\"icon-container\">\n <img class=\"icon\" :src=\"url\" :alt=\"alt\" v-if=\"url?.length\">\n <i class=\"icon\" :class=\"className\" :style=\"{color: color}\"\n v-else-if=\"className?.length\" />\n </div>\n</template>\n\n<script>\nexport default {\n props: {\n class: {\n type: String,\n },\n url: {\n type: String,\n },\n color: {\n type: String,\n default: '',\n },\n alt: {\n type: String,\n default: '',\n },\n },\n\n computed: {\n className() {\n return this.class\n }\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.icon-container {\n display: inline-flex;\n width: $icon-container-size;\n justify-content: center;\n text-align: center;\n\n .icon {\n width: 1em;\n height: 1em;\n }\n}\n</style>\n","import { render } from \"./Icon.vue?vue&type=template&id=706a3bd1&scoped=true\"\nimport script from \"./Icon.vue?vue&type=script&lang=js\"\nexport * from \"./Icon.vue?vue&type=script&lang=js\"\n\nimport \"./Icon.vue?vue&type=style&index=0&id=706a3bd1&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-706a3bd1\"]])\n\nexport default __exports__","<template>\n <div class=\"settings-container\">\n <main>\n <Users :session-token=\"sessionToken\" :current-user=\"currentUser\"\n v-if=\"selectedPanel === 'users' && currentUser\" />\n <Token :session-token=\"sessionToken\" :current-user=\"currentUser\"\n v-else-if=\"selectedPanel === 'tokens' && currentUser\" />\n <Integrations v-else-if=\"selectedPanel === 'integrations'\" />\n </main>\n </div>\n</template>\n\n<script>\nimport Token from \"@/components/panels/Settings/Token\";\nimport Users from \"@/components/panels/Settings/Users\";\nimport Integrations from \"@/components/panels/Settings/Integrations\";\nimport Utils from \"@/Utils\";\n\nexport default {\n name: \"Settings\",\n components: {Users, Token, Integrations},\n mixins: [Utils],\n\n props: {\n selectedPanel: {\n type: String,\n },\n },\n\n data() {\n return {\n currentUser: null,\n sessionToken: null,\n }\n },\n\n methods: {\n async refresh() {\n this.sessionToken = this.getCookies()['session_token']\n this.currentUser = await this.request('user.get_user_by_session', {session_token: this.sessionToken})\n }\n },\n\n mounted() {\n this.refresh()\n }\n}\n</script>\n\n<style lang=\"scss\">\n$header-height: 3em;\n\n.settings-container {\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n\n header {\n width: 100%;\n height: $header-height;\n display: flex;\n background: $background-color;\n box-shadow: $border-shadow-bottom;\n padding: .5em;\n\n select {\n width: 100%;\n }\n\n button {\n padding-top: .25em;\n }\n }\n\n main {\n height: calc(100% - #{$header-height});\n overflow: auto;\n }\n\n button {\n background: none;\n border: none;\n\n &:hover {\n border: none;\n color: $default-hover-fg;\n }\n }\n\n form {\n padding: 0;\n border: none;\n border-radius: 0;\n box-shadow: none;\n\n input {\n margin-bottom: 1em;\n }\n }\n\n input[type=password] {\n border-radius: 1em;\n }\n}\n</style>\n","<template>\n <div class=\"token-container\">\n <Loading v-if=\"loading\" />\n\n <Modal ref=\"tokenModal\">\n <div class=\"token-container\">\n <label>\n This is your generated token. Treat it carefully and do not share it with untrusted parties.<br/>\n Also, make sure to save it - it WILL NOT be displayed again.\n </label>\n\n <textarea class=\"token\" v-text=\"token\" @focus=\"onTokenSelect\" />\n </div>\n </Modal>\n\n <Modal ref=\"sessionTokenModal\">\n <div class=\"token-container\">\n <label>\n This is your current session token.\n It will be invalidated once you log out of the current session.\n </label>\n\n <textarea class=\"token\" v-text=\"sessionToken\" @focus=\"onTokenSelect\" />\n </div>\n </Modal>\n\n <div class=\"body\">\n <div class=\"description\">\n <p>\n Platypush provides two types of tokens:\n\n <ul>\n <li>\n <b>JWT tokens</b> are bearer-only, and they contain encrypted\n authentication information.<br/>\n They can be used as permanent or time-based tokens to\n authenticate with the Platypush API.\n </li>\n\n <li>\n <b>Session tokens</b> are randomly generated tokens stored on the\n application database. A session token generated in this session\n will expire when you log out of it.\n </li>\n </ul>\n </p>\n\n <p>Generate a JWT authentication token that can be used for API calls to the <code>/execute</code> endpoint.</p><br/>\n <p>You can include the token in your requests in any of the following ways:</p>\n\n <ul>\n <li>Specify it on the <code>Authorization: Bearer</code> header;</li>\n <li>Specify it on the <code>X-Token</code> header;</li>\n <li>\n Specify it as a URL parameter: <code>http://site:8008/execute?token=...</code>\n for a JWT token and <code>...?session_token=...</code> for a\n session token;\n </li>\n <li>Specify it on the body of your JSON request:\n <code>{\"type\":\"request\", \"action\", \"...\", \"token\":\"...\"}</code> for\n a JWT token, or <code>\"session_token\"</code> for a session token.\n </li>\n </ul>\n\n <p>Confirm your credentials in order to generate a new JWT token.</p>\n <p>\n <i>Show session token</i> will instead show the token cookie associated\n to the current session.\n </p>\n </div>\n\n <div class=\"form-container\">\n <form @submit.prevent=\"generateToken\" ref=\"generateTokenForm\">\n <label>\n <span>Username</span>\n <span>\n <input type=\"text\" name=\"username\" :value=\"currentUser.username\" disabled>\n </span>\n </label>\n\n <label>\n <span>Confirm password</span>\n <span>\n <input type=\"password\" name=\"password\">\n </span>\n </label>\n\n <label>\n <span>Token validity in days</span>\n <span>\n <input type=\"text\" name=\"validityDays\">\n </span>\n <span class=\"note\">\n Decimal values are also supported - e.g. <i>0.5</i> means half a\n day (12 hours). An empty or zero value means that the token has\n no expiry date.\n </span>\n </label>\n\n <label>\n <input type=\"submit\" class=\"btn btn-primary\" value=\"Generate JWT token\">\n </label>\n\n <label>\n <input type=\"button\" class=\"btn btn-default\" value=\"Show session token\"\n @click.stop=\"$refs.sessionTokenModal.show()\">\n </label>\n </form>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport axios from \"axios\";\nimport Loading from \"@/components/Loading\";\nimport Utils from \"@/Utils\";\nimport Modal from \"@/components/Modal\";\n\nexport default {\n name: \"Token\",\n components: {Modal, Loading},\n mixins: [Utils],\n\n props: {\n currentUser: {\n type: Object,\n required: true,\n },\n\n sessionToken: {\n type: String,\n required: true,\n },\n },\n\n data() {\n return {\n loading: false,\n token: null,\n }\n },\n\n methods: {\n async generateToken(event) {\n const username = this.currentUser.username\n const password = event.target.password.value\n let validityDays = event.target.validityDays?.length ? parseInt(event.target.validityDays.value) : 0\n if (!validityDays)\n validityDays = null\n\n this.loading = true\n try {\n this.token = (await axios.post('/auth', {\n username: username,\n password: password,\n expiry_days: validityDays,\n })).data.token\n\n if (this.token?.length)\n this.$refs.tokenModal.show()\n } catch (e) {\n console.error(e.toString())\n this.notify({\n text: e.toString(),\n error: true,\n })\n } finally {\n this.loading = false\n }\n },\n\n onTokenSelect(event) {\n event.target.select()\n document.execCommand('copy')\n\n this.notify({\n text: 'Token copied to clipboard',\n image: {\n iconClass: 'fa fa-check',\n }\n })\n },\n }\n}\n</script>\n\n<style lang=\"scss\">\n.token-container {\n width: 100%;\n display: flex;\n flex-direction: column;\n margin-top: .15em;\n\n label {\n width: 100%;\n }\n\n .body {\n background: $background-color;\n display: flex;\n\n .description {\n text-align: left;\n padding: 1em;\n }\n }\n\n ul {\n margin: 1em .5em;\n\n li {\n list-style: initial;\n }\n }\n\n .form-container {\n display: flex;\n }\n\n form {\n max-width: 250pt;\n\n .note {\n display: block;\n font-size: .75em;\n margin: -.75em 0 2em 0;\n }\n\n span {\n input {\n width: 100%;\n }\n }\n }\n\n input[type=password] {\n border-radius: 1em;\n }\n\n .modal {\n .content {\n width: 90%;\n }\n\n .body {\n margin-top: 0;\n }\n }\n\n .token-container {\n label {\n display: flex;\n flex-direction: column;\n\n span {\n display: block;\n width: 100%;\n }\n }\n\n textarea {\n width: 100%;\n height: 10em;\n margin-top: 1em;\n border-radius: 1em;\n border: none;\n background: $active-glow-bg-1;\n padding: 1em;\n }\n }\n\n .btn {\n border-radius: 1em;\n }\n}\n\n@media screen and (max-width: calc(#{$desktop} - 1px)) {\n .token-container {\n .body {\n flex-direction: column;\n }\n }\n\n .form-container {\n justify-content: center;\n box-shadow: $border-shadow-top;\n margin-top: -1em;\n padding-top: 1em;\n }\n}\n\n@media screen and (min-width: $desktop) {\n .token-container {\n justify-content: center;\n align-items: center;\n\n .description {\n width: 50%;\n }\n\n .form-container {\n width: 50%;\n justify-content: right;\n padding: 1em;\n\n label {\n text-align: left;\n }\n }\n\n .body {\n max-width: 650pt;\n flex-direction: row;\n justify-content: left;\n margin-top: 1.5em;\n border-radius: 1em;\n border: $default-border-2;\n }\n }\n}\n</style>\n","import { render } from \"./Token.vue?vue&type=template&id=2d3c7d78\"\nimport script from \"./Token.vue?vue&type=script&lang=js\"\nexport * from \"./Token.vue?vue&type=script&lang=js\"\n\nimport \"./Token.vue?vue&type=style&index=0&id=2d3c7d78&lang=scss\"\n\nimport exportComponent from \"../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <Loading v-if=\"loading\" />\n\n <Modal ref=\"addUserModal\" title=\"Add User\">\n <form action=\"#\" method=\"POST\" ref=\"addUserForm\" @submit=\"createUser\">\n <label>\n <input type=\"text\" name=\"username\" placeholder=\"Username\" :disabled=\"commandRunning\">\n </label>\n <label>\n <input type=\"password\" name=\"password\" placeholder=\"Password\" :disabled=\"commandRunning\">\n </label>\n <label>\n <input type=\"password\" name=\"confirm_password\" placeholder=\"Confirm password\" :disabled=\"commandRunning\">\n </label>\n <label>\n <input type=\"submit\" class=\"btn btn-primary\" value=\"Create User\" :disabled=\"commandRunning\">\n </label>\n </form>\n </Modal>\n\n <Modal ref=\"changePasswordModal\" title=\"Change Password\">\n <form action=\"#\" method=\"POST\" ref=\"changePasswordForm\" @submit=\"changePassword\">\n <label>\n <input type=\"text\" name=\"username\" placeholder=\"Username\" :value=\"selectedUser\" disabled=\"disabled\">\n </label>\n <label>\n <input type=\"password\" name=\"password\" placeholder=\"Current password\" :disabled=\"commandRunning\">\n </label>\n <label>\n <input type=\"password\" name=\"new_password\" placeholder=\"New password\" :disabled=\"commandRunning\">\n </label>\n <label>\n <input type=\"password\" name=\"confirm_new_password\" placeholder=\"Confirm new password\" :disabled=\"commandRunning\">\n </label>\n <label>\n <input type=\"submit\" class=\"btn btn-primary\" value=\"Change Password\" :disabled=\"commandRunning\">\n </label>\n </form>\n </modal>\n\n <div class=\"body\">\n <ul class=\"users-list\">\n <li v-for=\"user in users\" :key=\"user.user_id\" class=\"item user\" @click=\"selectedUser = user.username\">\n <div class=\"name col-8\" v-text=\"user.username\" />\n <div class=\"actions pull-right col-4\">\n <Dropdown title=\"User Actions\" icon-class=\"fa fa-ellipsis\">\n <DropdownItem text=\"Change Password\" :disabled=\"commandRunning\" icon-class=\"fa fa-key\"\n @click=\"showChangePasswordModal(user)\" />\n <DropdownItem text=\"Delete User\" :disabled=\"commandRunning\" icon-class=\"fa fa-trash\"\n @click=\"$refs.deleteUserDialog.show()\" />\n </Dropdown>\n </div>\n </li>\n </ul>\n\n <FloatingButton icon-class=\"fa fa-plus\" text=\"Add User\" @click=\"showAddUserModal\" />\n\n <ConfirmDialog ref=\"deleteUserDialog\" @input=\"deleteUser(selectedUser)\">\n Are you sure that you want to remove the user {{ selectedUser }}?\n </ConfirmDialog>\n </div>\n</template>\n\n<script>\nimport ConfirmDialog from \"@/components/elements/ConfirmDialog\";\nimport Dropdown from \"@/components/elements/Dropdown\";\nimport Modal from \"@/components/Modal\";\nimport Loading from \"@/components/Loading\";\nimport Utils from \"@/Utils\";\nimport DropdownItem from \"@/components/elements/DropdownItem\";\nimport FloatingButton from \"@/components/elements/FloatingButton\";\n\nexport default {\n name: \"Users\",\n components: {ConfirmDialog, Dropdown, DropdownItem, FloatingButton, Loading, Modal},\n mixins: [Utils],\n\n props: {\n sessionToken: {\n type: String,\n required: true,\n },\n\n currentUser: {\n type: Object,\n required: true,\n }\n },\n\n data() {\n return {\n users: [],\n commandRunning: false,\n loading: false,\n selectedUser: null,\n }\n },\n\n methods: {\n async refresh() {\n this.loading = true\n try {\n this.users = await this.request('user.get_users')\n } finally {\n this.loading = false\n }\n },\n\n async createUser(event) {\n event.preventDefault()\n\n const form = [...this.$refs.addUserForm.querySelectorAll('input[name]')].reduce((map, input) => {\n map[input.name] = input.value\n return map\n }, {})\n\n if (form.password !== form.confirm_password) {\n this.notify({\n title: 'Unable to create user',\n text: 'Please check that the passwords match',\n error: true,\n image: {\n iconClass: 'fas fa-times',\n },\n })\n\n return\n }\n\n this.commandRunning = true\n try {\n await this.request('user.create_user', {\n username: form.username,\n password: form.password,\n session_token: this.sessionToken,\n })\n } finally {\n this.commandRunning = false\n }\n\n this.notify({\n text: 'User ' + form.username + ' created',\n image: {\n iconClass: 'fas fa-check',\n },\n })\n\n this.$refs.addUserModal.close()\n await this.refresh()\n },\n\n async changePassword(event) {\n event.preventDefault()\n\n const form = [...this.$refs.changePasswordForm.querySelectorAll('input[name]')].reduce((map, input) => {\n map[input.name] = input.value\n return map\n }, {})\n\n if (form.new_password !== form.confirm_new_password) {\n this.notify({\n title: 'Unable to update password',\n text: 'Please check that the passwords match',\n error: true,\n image: {\n iconClass: 'fas fa-times',\n },\n })\n\n return\n }\n\n this.commandRunning = true\n let success = false\n\n try {\n success = await this.request('user.update_password', {\n username: form.username,\n old_password: form.password,\n new_password: form.new_password,\n })\n } finally {\n this.commandRunning = false\n }\n\n if (success) {\n this.$refs.changePasswordModal.close()\n this.notify({\n text: 'Password successfully updated',\n image: {\n iconClass: 'fas fa-check',\n },\n })\n } else {\n this.notify({\n title: 'Unable to update password',\n text: 'The current password is incorrect',\n error: true,\n image: {\n iconClass: 'fas fa-times',\n },\n })\n }\n },\n\n async deleteUser(user) {\n this.commandRunning = true\n try {\n await this.request('user.delete_user', {\n username: user,\n session_token: this.sessionToken,\n })\n } finally {\n this.commandRunning = false\n }\n\n this.notify({\n text: `User ${user} removed`,\n image: {\n iconClass: 'fas fa-check',\n },\n })\n\n this.selectedUser = null\n await this.refresh()\n },\n\n showAddUserModal() {\n this.$refs.addUserModal.show()\n this.$nextTick(() => {\n this.$refs.addUserForm.reset()\n this.$refs.addUserForm.username.focus()\n })\n },\n\n showChangePasswordModal(user) {\n this.$refs.changePasswordModal.show()\n this.$nextTick(() => {\n this.$refs.changePasswordForm.password.focus()\n this.selectedUser = user.username\n })\n },\n },\n\n mounted() {\n this.refresh()\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.settings-container {\n .body {\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n }\n\n .modal {\n .body {\n height: auto;\n }\n }\n\n form {\n label {\n display: block;\n text-align: center;\n }\n }\n\n .users-list {\n background: $background-color;\n margin-top: .15em;\n height: max-content;\n\n .user {\n display: flex;\n align-items: center;\n padding: .75em;\n\n &:not(:last-child) {\n box-shadow: $border-shadow-bottom;\n }\n\n &:hover {\n background: $hover-bg;\n }\n\n .actions {\n display: inline-flex;\n justify-content: right;\n\n button {\n background: none !important;\n width: min-content;\n }\n }\n }\n }\n\n @media screen and (max-width: $desktop) {\n .users-list {\n width: 100%;\n }\n }\n\n @media screen and (min-width: $desktop) {\n .users-list {\n min-width: 400pt;\n max-width: 600pt;\n margin-top: 1em;\n border-radius: 1em;\n box-shadow: $border-shadow-bottom;\n\n .user {\n border-radius: 0;\n\n &:first-child {\n border-top-left-radius: 1em;\n border-top-right-radius: 1em;\n }\n\n &:last-child {\n border-bottom-left-radius: 1em;\n border-bottom-right-radius: 1em;\n }\n }\n }\n }\n}\n\n:deep(.dropdown-container) {\n button {\n background: none !important;\n }\n}\n\n:deep(.modal) {\n .btn {\n border-radius: 1em;\n }\n}\n</style>\n","<template>\n <div class=\"floating-btn\" :class=\"className\">\n <button type=\"button\" class=\"btn btn-primary\" :title=\"title\" @click=\"$emit('click', $event)\">\n <Icon :class=\"iconClass\" :url=\"iconUrl\" />\n </button>\n </div>\n</template>\n\n<script>\nimport Icon from \"@/components/elements/Icon\";\n\nexport default {\n name: \"FloatingButton\",\n components: {Icon},\n emits: [\"click\"],\n\n props: {\n iconClass: {\n type: String,\n },\n iconUrl: {\n type: String,\n },\n class: {\n type: String,\n },\n title: {\n type: String,\n },\n },\n\n computed: {\n className() {\n return this.class\n }\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.floating-btn {\n position: fixed;\n bottom: 0;\n right: 0;\n margin: auto 1em 1em auto;\n\n button {\n background: $active-glow-bg-2 !important;\n color: $selected-fg !important;\n width: 4em;\n height: 4em;\n border-radius: 2em;\n border: none !important;\n padding: 0;\n box-shadow: $border-shadow-bottom-right;\n\n &:hover {\n background: $hover-bg-2 !important;\n color: $hover-fg !important;\n }\n }\n\n :deep(button) {\n .icon-container {\n width: 4em;\n\n .icon {\n margin: auto;\n }\n }\n }\n}\n</style>\n","import { render } from \"./FloatingButton.vue?vue&type=template&id=133e57f8&scoped=true\"\nimport script from \"./FloatingButton.vue?vue&type=script&lang=js\"\nexport * from \"./FloatingButton.vue?vue&type=script&lang=js\"\n\nimport \"./FloatingButton.vue?vue&type=style&index=0&id=133e57f8&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-133e57f8\"]])\n\nexport default __exports__","import { render } from \"./Users.vue?vue&type=template&id=510035f2&scoped=true\"\nimport script from \"./Users.vue?vue&type=script&lang=js\"\nexport * from \"./Users.vue?vue&type=script&lang=js\"\n\nimport \"./Users.vue?vue&type=style&index=0&id=510035f2&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-510035f2\"]])\n\nexport default __exports__","<template>\n <div class=\"integrations-container\">\n <Loading v-if=\"loading\" />\n\n <div class=\"body\">\n <!-- TODO -->\n </div>\n </div>\n</template>\n\n<script>\nimport Loading from \"@/components/Loading\";\nimport Utils from \"@/Utils\";\n\nexport default {\n name: \"Integrations\",\n components: {Loading},\n mixins: [Utils],\n\n data() {\n return {\n loading: false,\n plugins: {},\n backends: {},\n }\n },\n\n methods: {\n async loadIntegrations() {\n this.loading = true\n\n try {\n [this.plugins, this.backends] =\n await Promise.all([\n this.request('inspect.get_all_plugins'),\n this.request('inspect.get_all_backends'),\n ])\n } finally {\n this.loading = false\n }\n },\n },\n\n mounted() {\n this.loadIntegrations()\n }\n}\n</script>\n\n<style lang=\"scss\">\n.integrations-container {\n width: 100%;\n display: flex;\n flex-direction: column;\n margin-top: .15em;\n\n .body {\n background: $background-color;\n display: flex;\n }\n}\n</style>\n","import { render } from \"./Integrations.vue?vue&type=template&id=13775dc2\"\nimport script from \"./Integrations.vue?vue&type=script&lang=js\"\nexport * from \"./Integrations.vue?vue&type=script&lang=js\"\n\nimport \"./Integrations.vue?vue&type=style&index=0&id=13775dc2&lang=scss\"\n\nimport exportComponent from \"../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./Index.vue?vue&type=template&id=45d2ac97\"\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=45d2ac97&lang=scss\"\n\nimport exportComponent from \"../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","var map = {\n\t\"./Camera/Index\": [\n\t\t5324,\n\t\t8039,\n\t\t5324\n\t],\n\t\"./CameraAndroidIpcam/Index\": [\n\t\t5794,\n\t\t5794\n\t],\n\t\"./CameraCv/Index\": [\n\t\t6148,\n\t\t8039,\n\t\t6148\n\t],\n\t\"./CameraFfmpeg/Index\": [\n\t\t9334,\n\t\t8039,\n\t\t9334\n\t],\n\t\"./CameraGstreamer/Index\": [\n\t\t813,\n\t\t8039,\n\t\t813\n\t],\n\t\"./CameraIrMlx90640/Index\": [\n\t\t7381,\n\t\t8039,\n\t\t7381\n\t],\n\t\"./CameraPi/Index\": [\n\t\t8895,\n\t\t8039,\n\t\t8895\n\t],\n\t\"./Entities/Index\": [\n\t\t6217,\n\t\t4558\n\t],\n\t\"./Execute/Index\": [\n\t\t6086,\n\t\t6086\n\t],\n\t\"./Light/Index\": [\n\t\t7184,\n\t\t2471,\n\t\t5040,\n\t\t7184\n\t],\n\t\"./LightHue/Index\": [\n\t\t2976,\n\t\t2471,\n\t\t5040,\n\t\t7184,\n\t\t2976\n\t],\n\t\"./Media/Index\": [\n\t\t7143,\n\t\t2471,\n\t\t4186,\n\t\t8053,\n\t\t7143\n\t],\n\t\"./MediaMplayer/Index\": [\n\t\t3518,\n\t\t2471,\n\t\t4186,\n\t\t8053,\n\t\t7143,\n\t\t3518\n\t],\n\t\"./MediaMpv/Index\": [\n\t\t4765,\n\t\t2471,\n\t\t4186,\n\t\t8053,\n\t\t7143,\n\t\t4765\n\t],\n\t\"./MediaOmxplayer/Index\": [\n\t\t7819,\n\t\t2471,\n\t\t4186,\n\t\t8053,\n\t\t7143,\n\t\t7819\n\t],\n\t\"./MediaVlc/Index\": [\n\t\t2614,\n\t\t2471,\n\t\t4186,\n\t\t8053,\n\t\t7143,\n\t\t2614\n\t],\n\t\"./Music/Index\": [\n\t\t7473,\n\t\t2471,\n\t\t4186,\n\t\t7473\n\t],\n\t\"./MusicMpd/Index\": [\n\t\t1309,\n\t\t2471,\n\t\t4186,\n\t\t7473,\n\t\t1309\n\t],\n\t\"./MusicSnapcast/Index\": [\n\t\t7126,\n\t\t2471,\n\t\t5040,\n\t\t7126\n\t],\n\t\"./MusicSpotify/Index\": [\n\t\t2068,\n\t\t2471,\n\t\t4186,\n\t\t7473,\n\t\t2068\n\t],\n\t\"./Rtorrent/Index\": [\n\t\t2183,\n\t\t8053,\n\t\t3664,\n\t\t2183\n\t],\n\t\"./Settings/Index\": [\n\t\t7950\n\t],\n\t\"./Sound/Index\": [\n\t\t746,\n\t\t746\n\t],\n\t\"./Torrent/Index\": [\n\t\t8784,\n\t\t8053,\n\t\t3664,\n\t\t8784\n\t],\n\t\"./Tts/Index\": [\n\t\t3732,\n\t\t8069,\n\t\t3732\n\t],\n\t\"./TtsGoogle/Index\": [\n\t\t7605,\n\t\t8069,\n\t\t2853\n\t],\n\t\"./TvSamsungWs/Index\": [\n\t\t4589,\n\t\t4589\n\t],\n\t\"./ZigbeeMqtt/Index\": [\n\t\t1259,\n\t\t2471,\n\t\t5040,\n\t\t1259\n\t],\n\t\"./Zwave/Index\": [\n\t\t2732,\n\t\t2471,\n\t\t5040,\n\t\t7880,\n\t\t2732\n\t],\n\t\"./ZwaveMqtt/Index\": [\n\t\t1088,\n\t\t2471,\n\t\t5040,\n\t\t7880,\n\t\t1088\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(1).map(__webpack_require__.e)).then(function() {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = function() { return Object.keys(map); };\nwebpackAsyncContext.id = 3379;\nmodule.exports = webpackAsyncContext;","var map = {\n\t\"./Calendar/Index\": [\n\t\t5638,\n\t\t5638\n\t],\n\t\"./Camera/Index\": [\n\t\t446,\n\t\t446\n\t],\n\t\"./Component/Index\": [\n\t\t1449,\n\t\t2471,\n\t\t5040,\n\t\t1449\n\t],\n\t\"./DateTime/Index\": [\n\t\t4619,\n\t\t1391,\n\t\t4619\n\t],\n\t\"./DateTimeWeather/Index\": [\n\t\t9962,\n\t\t3594,\n\t\t1391,\n\t\t9962\n\t],\n\t\"./ImageCarousel/Index\": [\n\t\t306,\n\t\t3594,\n\t\t1391,\n\t\t306\n\t],\n\t\"./Music/Index\": [\n\t\t311,\n\t\t311\n\t],\n\t\"./Plugin/Index\": [\n\t\t8179,\n\t\t8179\n\t],\n\t\"./RssNews/Index\": [\n\t\t6523,\n\t\t6523\n\t],\n\t\"./Weather/Index\": [\n\t\t3594,\n\t\t3594\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(1).map(__webpack_require__.e)).then(function() {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = function() { return Object.keys(map); };\nwebpackAsyncContext.id = 6725;\nmodule.exports = webpackAsyncContext;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","var getProto = Object.getPrototypeOf ? function(obj) { return Object.getPrototypeOf(obj); } : function(obj) { return obj.__proto__; };\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach(function(key) { def[key] = function() { return value[key]; }; });\n\t}\n\tdef['default'] = function() { return value; };\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"static/js/\" + chunkId + \".\" + {\"65\":\"ae7df477\",\"169\":\"ebdd7044\",\"306\":\"a139d88b\",\"311\":\"53c79e43\",\"446\":\"3838f95e\",\"729\":\"1b92c9f7\",\"746\":\"a224bfe3\",\"813\":\"f3c00542\",\"984\":\"ae424e7e\",\"1088\":\"811c36c9\",\"1259\":\"60521b48\",\"1309\":\"d63f5b10\",\"1391\":\"a76844c2\",\"1449\":\"aa1903cd\",\"2068\":\"e2e8323e\",\"2183\":\"263eca15\",\"2217\":\"6b927594\",\"2460\":\"567e73f6\",\"2471\":\"da49c64a\",\"2614\":\"149a696d\",\"2732\":\"a3a54d65\",\"2853\":\"029e124b\",\"2893\":\"519a1554\",\"2976\":\"4b5b4cc2\",\"3368\":\"cb04738a\",\"3369\":\"c099f8d0\",\"3518\":\"077e8d35\",\"3559\":\"df95d103\",\"3594\":\"b8c83afa\",\"3664\":\"b7220b65\",\"3732\":\"91319992\",\"3798\":\"fcfdd0e0\",\"3826\":\"cc264dd1\",\"3835\":\"11129165\",\"4186\":\"3c5deb68\",\"4558\":\"8cb997f2\",\"4589\":\"ae919252\",\"4619\":\"5cc35c65\",\"4765\":\"b350d580\",\"5040\":\"f02b705d\",\"5207\":\"7f241e21\",\"5324\":\"951c9777\",\"5329\":\"444a9cf1\",\"5638\":\"81819cbe\",\"5794\":\"b197a88d\",\"6086\":\"a1fd4de5\",\"6148\":\"dd9a06c6\",\"6362\":\"95da0eb4\",\"6523\":\"3445266d\",\"6561\":\"fc5ef77b\",\"7126\":\"6533d90e\",\"7143\":\"906ef709\",\"7184\":\"9ea9c343\",\"7381\":\"b3d695f6\",\"7473\":\"4ee3575e\",\"7523\":\"367c2045\",\"7590\":\"6cda174b\",\"7819\":\"e661cd01\",\"7880\":\"0c88e774\",\"8039\":\"951792f1\",\"8053\":\"22e4ed09\",\"8069\":\"51c1e8b1\",\"8179\":\"38545471\",\"8391\":\"119357c7\",\"8621\":\"0aa03df1\",\"8769\":\"5ea5c0cb\",\"8784\":\"97993463\",\"8825\":\"b660e217\",\"8895\":\"7253f99a\",\"9334\":\"6d290b2d\",\"9624\":\"5124c411\",\"9962\":\"64e06a14\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"static/css/\" + chunkId + \".\" + {\"65\":\"cf69abd6\",\"169\":\"939fa55e\",\"306\":\"fbbaf2b7\",\"311\":\"504d6c0b\",\"446\":\"ed463bd2\",\"729\":\"9ff67cd4\",\"746\":\"25e7d5ff\",\"984\":\"e32851e8\",\"1259\":\"72a7d113\",\"1391\":\"1b22f65c\",\"1449\":\"8f1b2b15\",\"2217\":\"2d57b466\",\"2460\":\"26f651a5\",\"2471\":\"a6a32303\",\"2893\":\"f9230237\",\"2976\":\"234438b4\",\"3368\":\"428fba28\",\"3369\":\"6039e606\",\"3559\":\"dbf9c689\",\"3594\":\"3a165bb4\",\"3664\":\"c92d9d38\",\"3798\":\"75e0f6b2\",\"3826\":\"0de7c131\",\"3835\":\"e07b6aab\",\"4186\":\"b6585c35\",\"4558\":\"ebdecea6\",\"4589\":\"6d3a8446\",\"5040\":\"fcf11255\",\"5207\":\"950597e1\",\"5329\":\"6e70371b\",\"5638\":\"25d1c562\",\"5794\":\"49b1f262\",\"6086\":\"08e8f8f2\",\"6523\":\"4bf56b11\",\"6561\":\"208265a1\",\"7126\":\"a0725ecc\",\"7143\":\"539db457\",\"7184\":\"6ad0f775\",\"7473\":\"16d1dc39\",\"7523\":\"22ccd2ae\",\"7590\":\"079e3fe8\",\"7880\":\"a114eea0\",\"8039\":\"22b025de\",\"8053\":\"2e68c420\",\"8069\":\"58663e3e\",\"8179\":\"8db287b9\",\"8391\":\"8217f6c4\",\"8621\":\"cb98ee18\",\"8769\":\"41af0eac\",\"8825\":\"05c5466d\",\"9624\":\"fe6b5dbe\",\"9962\":\"bec1b050\"}[chunkId] + \".css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","var inProgress = {};\nvar dataWebpackPrefix = \"platypush:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"/\";","if (typeof document === \"undefined\") return;\nvar createStylesheet = function(chunkId, fullhref, oldTag, resolve, reject) {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tvar onLinkComplete = function(event) {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + realHref + \")\");\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tif (linkTag.parentNode) linkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\tif (oldTag) {\n\t\toldTag.parentNode.insertBefore(linkTag, oldTag.nextSibling);\n\t} else {\n\t\tdocument.head.appendChild(linkTag);\n\t}\n\treturn linkTag;\n};\nvar findStylesheet = function(href, fullhref) {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = function(chunkId) {\n\treturn new Promise(function(resolve, reject) {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, null, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t2143: 0\n};\n\n__webpack_require__.f.miniCss = function(chunkId, promises) {\n\tvar cssChunks = {\"65\":1,\"169\":1,\"306\":1,\"311\":1,\"446\":1,\"729\":1,\"746\":1,\"984\":1,\"1259\":1,\"1391\":1,\"1449\":1,\"2217\":1,\"2460\":1,\"2471\":1,\"2893\":1,\"2976\":1,\"3368\":1,\"3369\":1,\"3559\":1,\"3594\":1,\"3664\":1,\"3798\":1,\"3826\":1,\"3835\":1,\"4186\":1,\"4558\":1,\"4589\":1,\"5040\":1,\"5207\":1,\"5329\":1,\"5638\":1,\"5794\":1,\"6086\":1,\"6523\":1,\"6561\":1,\"7126\":1,\"7143\":1,\"7184\":1,\"7473\":1,\"7523\":1,\"7590\":1,\"7880\":1,\"8039\":1,\"8053\":1,\"8069\":1,\"8179\":1,\"8391\":1,\"8621\":1,\"8769\":1,\"8825\":1,\"9624\":1,\"9962\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(function() {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, function(e) {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t2143: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(!/^(80(39|53|69)|(139|247|656)1|3826|5040)$/.test(chunkId)) {\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkplatypush\"] = self[\"webpackChunkplatypush\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [4998], function() { return __webpack_require__(1789); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["bus","mitt","publishEntity","entity","emit","onEntity","callback","on","publishNotification","notification","onNotification","$options","hasWebsocket","_createBlock","_component_Events","ref","_createVNode","_component_Notifications","hasAssistant","_component_VoiceAssistant","hasPushbullet","_component_Pushbullet","hasNtfy","_component_Ntfy","_component_ConfirmDialog","onInput","installPWA","_component_router_view","class","_createElementBlock","_hoisted_1","_Fragment","_renderList","_ctx","notifications","id","index","_component_Notification","key","text","html","title","link","image","warning","error","onClicked","destroy","_normalizeClass","$props","onClick","_cache","args","clicked","_toDisplayString","_createElementVNode","_hoisted_2","_hoisted_3","_hoisted_4","src","alt","icon","style","_normalizeStyle","color","iconClass","_hoisted_6","_hoisted_7","innerHTML","name","props","methods","this","window","open","$emit","__exports__","components","Notification","duration","type","Number","default","data","timeouts","create","parseInt","setTimeout","bind","ws","initialized","pending","opened","timeout","reconnectMsecs","minReconnectMsecs","maxReconnectMsecs","handlers","handlerNameToEventTypes","onWebsocketTimeout","console","log","Math","min","close","onClose","onMessage","event","JSON","parse","e","warn","debug","push","Object","values","handler","Array","Function","onOpen","onclose","clearTimeout","undefined","onError","code","reason","init","protocol","location","url","host","WebSocket","err","onmessage","onopen","onerror","subscribe","msg","events","length","handlerName","unsubscribe","keys","created","_hoisted_9","_component_Modal","$data","state","alerting","responding","speechRecognized","_hoisted_5","listening","_hoisted_8","_hoisted_10","_hoisted_11","phrase","_hoisted_13","responseText","Modal","mixins","Utils","hideTimeout","reset","conversationStart","$refs","assistantModal","show","conversationEnd","self","response","response_text","alertOn","alertOff","registerHandlers","mounted","notify","message","push_type","body","ConfirmDialog","Pushbullet","Ntfy","Notifications","Events","VoiceAssistant","config","userAuthenticated","pwaInstallEvent","computed","initConfig","request","prompt","pwaDialog","beforeMount","getCookie","addEventListener","preventDefault","setCookie","expires","Date","getTime","render","loading","_component_Loading","classes","rows","row","i","_component_Row","widgets","widget","j","_KeepAlive","_component_Widget","_resolveDynamicComponent","component","_normalizeProps","_guardReactiveProps","getWidgetProps","_renderSlot","$slots","String","required","split","concat","Widget","Loading","Row","refreshSeconds","parseTemplate","tmpl","node","DOMParser","parseFromString","childNodes","attributes","nodeValue","getElementsByTagName","map","children","el","shallowRef","defineAsyncComponent","nodeName","attrs","reduce","obj","content","refreshDashboard","$route","params","template","notifyError","setInterval","toFixed","method","placeholder","_register","value","register","Boolean","parseBoolean","_component_Login","Login","_component_Nav","panels","selectedPanel","selectedConfigPanel","hostname","onSelect","$event","onSelectConfig","_component_Settings","panel","hidden","href","collapsed","onItemClick","configSections","selected","imgUrl","panelNames","_hoisted_16","icons","_hoisted_18","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","emits","homeIdx","indexOf","slice","sort","collapsedDefault","isMobile","isTablet","Settings","Nav","plugins","backends","procedures","initSelectedPanel","match","hash","plugin","initPanels","entries","forEach","async","componentName","token","toUpperCase","join","comp","pluginName","parseConfig","Promise","all","initializeDefaultViews","execute","entities","initPanel","toString","routes","path","Panel","Dashboard","Plugin","Register","NotFound","router","createRouter","history","createWebHistory","ready","registered","cached","updatefound","updated","offline","app","createApp","App","globalProperties","_config","use","mount","showError","opts","resolve","reject","axios","then","errors","output","catch","action","copyToClipboard","navigator","clipboard","writeText","getCookies","document","cookie","item","k","v","toISOString","deleteCookie","formatDate","date","year","toDateString","substring","formatTime","seconds","toTimeString","formatDateTime","_eventsReady","$root","subFunc","generateId","unwatch","$watch","newVal","btoa","fromCharCode","round","random","notifyWarning","matchMedia","matches","isDesktop","capitalize","charAt","prettify","t","indent","spaces","repeat","toLowerCase","convertSize","unit","units","u","convertTime","time","ret","parseFloat","d","h","m","s","objectsEqual","a","b","p","Api","Clipboard","Cookies","DateTime","Screen","Text","Types","n","script","isVisible","zIndex","$attrs","width","height","stopPropagation","onModalClose","visible","level","timeoutId","prevVisible","hide","toggle","onKeyUp","visibleHndl","unmounted","removeEventListener","maxZIndex","getComputedStyle","$el","outermostModals","modal","querySelectorAll","onSubmit","_withModifiers","onConfirm","onTouch","confirmText","cancelText","items","keepOpenOnItemClick","documentClickHndl","element","target","dropdown","parentElement","left","top","button","getBoundingClientRect","innerWidth","clientWidth","innerHeight","clientHeight","itemClass","iconUrl","_component_Icon","Icon","disabled","$parent","className","currentUser","_component_Users","sessionToken","_component_Token","_component_Integrations","onFocus","onTokenSelect","generateToken","username","_hoisted_14","_hoisted_15","sessionTokenModal","password","validityDays","expiry_days","tokenModal","select","execCommand","createUser","commandRunning","changePassword","selectedUser","users","user","user_id","_component_Dropdown","_component_DropdownItem","showChangePasswordModal","deleteUserDialog","_component_FloatingButton","showAddUserModal","deleteUser","Dropdown","DropdownItem","FloatingButton","refresh","form","addUserForm","input","confirm_password","session_token","addUserModal","changePasswordForm","new_password","confirm_new_password","success","old_password","changePasswordModal","$nextTick","focus","loadIntegrations","Users","Token","Integrations","webpackAsyncContext","req","__webpack_require__","o","Error","ids","module","exports","__webpack_module_cache__","moduleId","cachedModule","__webpack_modules__","call","deferred","O","result","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","every","splice","r","getter","__esModule","leafPrototypes","getProto","getPrototypeOf","__proto__","mode","ns","def","current","getOwnPropertyNames","definition","defineProperty","enumerable","get","f","chunkId","promises","miniCssF","g","globalThis","prop","prototype","hasOwnProperty","inProgress","dataWebpackPrefix","l","done","needAttach","scripts","getAttribute","createElement","charset","nc","setAttribute","onScriptComplete","prev","onload","doneFns","parentNode","removeChild","head","appendChild","Symbol","toStringTag","createStylesheet","fullhref","oldTag","linkTag","rel","onLinkComplete","errorType","realHref","insertBefore","nextSibling","findStylesheet","existingLinkTags","tag","dataHref","existingStyleTags","loadStylesheet","installedCssChunks","miniCss","cssChunks","installedChunks","installedChunkData","test","promise","loadingEnded","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""}