platypush/platypush/backend/http/dist/static/js/app.9f4771bd.js.map

1 line
96 KiB
Plaintext

{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/components/panels lazy ^\\.\\/.*\\/Index$ namespace object","webpack:///./src/components/widgets/Widget.vue?3b20","webpack:///./src/views/Login.vue?8803","webpack:///./src/views/Dashboard.vue?3fc1","webpack:///./src/components/Modal.vue?ac45","webpack:///./src/views/Panel.vue?292e","webpack:///./src/components/Notifications.vue?889e","webpack:///./src/components/Loading.vue","webpack:///./src/components/Loading.vue?7548","webpack:///./src/utils/Api.vue","webpack:///./src/utils/Api.vue?802b","webpack:///./src/utils/DateTime.vue","webpack:///./src/utils/DateTime.vue?bf16","webpack:///./src/utils/Events.vue","webpack:///./src/utils/Events.vue?1e73","webpack:///./src/utils/Notification.vue","webpack:///./src/utils/Notification.vue?22ca","webpack:///./src/utils/Types.vue","webpack:///./src/utils/Types.vue?9245","webpack:///./src/Utils.vue","webpack:///./src/Utils.vue?967a","webpack:///./src/components/Loading.vue?71ef","webpack:///./src/App.vue","webpack:///./src/components/Notifications.vue","webpack:///./src/components/Notification.vue","webpack:///./src/components/Notification.vue?db3c","webpack:///./src/components/Notifications.vue?f186","webpack:///./src/Events.vue","webpack:///./src/Events.vue?924b","webpack:///./src/components/VoiceAssistant.vue","webpack:///./src/components/Modal.vue","webpack:///./src/components/Modal.vue?9db4","webpack:///./src/components/VoiceAssistant.vue?5925","webpack:///./src/components/Pushbullet.vue","webpack:///./src/components/Pushbullet.vue?8301","webpack:///./src/App.vue?dfb6","webpack:///./src/views/Dashboard.vue","webpack:///./src/components/widgets/Row.vue","webpack:///./src/components/widgets/Row.vue?6d87","webpack:///./src/components/widgets/Widget.vue","webpack:///./src/components/widgets/Widget.vue?bb16","webpack:///./src/views/Dashboard.vue?8dc4","webpack:///./src/views/NotFound.vue","webpack:///./src/views/NotFound.vue?8fd3","webpack:///./src/views/Login.vue","webpack:///./src/views/Login.vue?e63b","webpack:///./src/views/Register.vue","webpack:///./src/views/Register.vue?be94","webpack:///./src/views/Panel.vue","webpack:///./src/components/Nav.vue","webpack:///./src/components/Nav.vue?ce9d","webpack:///./src/views/Panel.vue?166a","webpack:///./src/router/index.js","webpack:///./src/main.js","webpack:///./src/components/VoiceAssistant.vue?24c7","webpack:///./src/components/widgets/Row.vue?ba30","webpack:///./src/components/Nav.vue?283e","webpack:///./src/views/Dashboard.vue?ab6f","webpack:///./src/App.vue?7fbe","webpack:///./src/components/widgets lazy ^\\.\\/.*\\/Index$ namespace object","webpack:///./src/views/Panel.vue?7311","webpack:///./src/components/Notification.vue?5dad","webpack:///./src/bus.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","installedCssChunks","jsonpScriptSrc","p","exports","module","l","e","promises","cssChunks","Promise","resolve","reject","href","fullhref","existingLinkTags","document","getElementsByTagName","tag","dataHref","getAttribute","rel","existingStyleTags","linkTag","createElement","type","onload","onerror","event","request","target","src","err","Error","code","parentNode","removeChild","head","appendChild","then","installedChunkData","promise","onScriptComplete","script","charset","timeout","nc","setAttribute","error","clearTimeout","chunk","errorType","realSrc","message","name","undefined","setTimeout","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","console","jsonpArray","window","oldJsonpFunction","slice","map","webpackAsyncContext","req","ids","id","keys","class","render","__scopeId","methods","execute","opts","a","post","response","errors","notify","text","output","catch","action","args","this","formatDate","date","toDateString","substring","formatTime","seconds","toTimeString","computed","_eventsReady","$root","$refs","events","initialized","subscribe","handler","subFunc","bus","emit","self","unwatch","$watch","newVal","notification","msg","parseBoolean","toLowerCase","parseInt","mixins","Api","Notification","Events","DateTime","Types","hasWebsocket","ref","ws-port","config","websocket_port","hasAssistant","hasPushbullet","notifications","index","html","title","link","image","warning","destroy","clicked","alt","icon","style","color","iconClass","props","open","$emit","components","duration","Number","default","timeouts","wsPort","ws","pending","opened","reconnectMsecs","handlers","onWebsocketTimeout","log","close","onclose","onMessage","JSON","parse","warn","debug","Array","onOpen","onError","onClose","reason","init","protocol","location","url","hostname","WebSocket","onmessage","onopen","unsubscribe","idx","indexOf","created","on","state","alerting","responding","speechRecognized","listening","isVisible","zIndex","width","height","$event","stopPropagation","String","visible","Boolean","level","timeoutId","prevVisible","show","toggle","updated","maxZIndex","getComputedStyle","$el","outermostModals","querySelectorAll","modal","Modal","Utils","responseText","phrase","hideTimeout","reset","conversationStart","assistantModal","conversationEnd","response_text","alertOn","alertOff","registerHandlers","mounted","push_type","body","Pushbullet","Notifications","VoiceAssistant","userAuthenticated","onNotification","initConfig","loading","classes","rows","row","widgets","widget","component","required","split","concat","Widget","Loading","Row","refreshSeconds","parseTemplate","tmpl","node","DOMParser","parseFromString","childNodes","attributes","nodeValue","children","el","nodeName","attrs","reduce","obj","$options","refreshDashboard","$route","params","template","setInterval","toFixed","method","placeholder","_register","register","Login","panels","selected-panel","selectedPanel","panel","plugin-name","collapsed","icons","displayName","emits","token","toUpperCase","join","host","Nav","plugins","backends","procedures","initSelectedPanel","match","hash","plugin","initPanels","entries","forEach","componentName","comp","pluginName","parseConfig","routes","path","Panel","Dashboard","Register","NotFound","router","createRouter","history","createWebHistory","app","createApp","App","globalProperties","_config","use","mount","mitt"],"mappings":"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","file":"static/js/app.9f4771bd.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded CSS chunks\n \tvar installedCssChunks = {\n \t\t\"app\": 0\n \t}\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"static/js/\" + ({}[chunkId]||chunkId) + \".\" + {\"chunk-0a24466a\":\"ebe2c04f\",\"chunk-2d2091df\":\"377ea7b0\",\"chunk-16a3f845\":\"3bdbbdb5\",\"chunk-4bbbb9a3\":\"c1ba820e\",\"chunk-24ff873d\":\"0f916e0f\",\"chunk-5710a9bc\":\"5aba1b9a\",\"chunk-62a3d08e\":\"cd0ca5eb\",\"chunk-ac6aae98\":\"dda16597\",\"chunk-e8078048\":\"bc52467d\"}[chunkId] + \".js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// mini-css-extract-plugin CSS loading\n \t\tvar cssChunks = {\"chunk-0a24466a\":1,\"chunk-16a3f845\":1,\"chunk-4bbbb9a3\":1,\"chunk-24ff873d\":1,\"chunk-5710a9bc\":1,\"chunk-62a3d08e\":1,\"chunk-ac6aae98\":1,\"chunk-e8078048\":1};\n \t\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n \t\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n \t\t\tpromises.push(installedCssChunks[chunkId] = new Promise(function(resolve, reject) {\n \t\t\t\tvar href = \"static/css/\" + ({}[chunkId]||chunkId) + \".\" + {\"chunk-0a24466a\":\"2793b349\",\"chunk-2d2091df\":\"31d6cfe0\",\"chunk-16a3f845\":\"79277e60\",\"chunk-4bbbb9a3\":\"c0cffcb7\",\"chunk-24ff873d\":\"c68a1871\",\"chunk-5710a9bc\":\"b05a2ff9\",\"chunk-62a3d08e\":\"698b2d60\",\"chunk-ac6aae98\":\"a322204e\",\"chunk-e8078048\":\"67cca65c\"}[chunkId] + \".css\";\n \t\t\t\tvar fullhref = __webpack_require__.p + href;\n \t\t\t\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n \t\t\t\tfor(var i = 0; i < existingLinkTags.length; i++) {\n \t\t\t\t\tvar tag = existingLinkTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n \t\t\t\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return resolve();\n \t\t\t\t}\n \t\t\t\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n \t\t\t\tfor(var i = 0; i < existingStyleTags.length; i++) {\n \t\t\t\t\tvar tag = existingStyleTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\");\n \t\t\t\t\tif(dataHref === href || dataHref === fullhref) return resolve();\n \t\t\t\t}\n \t\t\t\tvar linkTag = document.createElement(\"link\");\n \t\t\t\tlinkTag.rel = \"stylesheet\";\n \t\t\t\tlinkTag.type = \"text/css\";\n \t\t\t\tlinkTag.onload = resolve;\n \t\t\t\tlinkTag.onerror = function(event) {\n \t\t\t\t\tvar request = event && event.target && event.target.src || fullhref;\n \t\t\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + request + \")\");\n \t\t\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n \t\t\t\t\terr.request = request;\n \t\t\t\t\tdelete installedCssChunks[chunkId]\n \t\t\t\t\tlinkTag.parentNode.removeChild(linkTag)\n \t\t\t\t\treject(err);\n \t\t\t\t};\n \t\t\t\tlinkTag.href = fullhref;\n\n \t\t\t\tvar head = document.getElementsByTagName(\"head\")[0];\n \t\t\t\thead.appendChild(linkTag);\n \t\t\t}).then(function() {\n \t\t\t\tinstalledCssChunks[chunkId] = 0;\n \t\t\t}));\n \t\t}\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\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\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","var map = {\n\t\"./Light/Index\": [\n\t\t\"cf99\",\n\t\t\"chunk-0a24466a\"\n\t],\n\t\"./LightHue/Index\": [\n\t\t\"a84f\",\n\t\t\"chunk-0a24466a\",\n\t\t\"chunk-2d2091df\"\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 webpackAsyncContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackAsyncContext.id = \"0f0c\";\nmodule.exports = webpackAsyncContext;","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Widget.vue?vue&type=style&index=0&id=8c529832&lang=scss&scoped=true\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Login.vue?vue&type=style&index=0&lang=scss\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Dashboard.vue?vue&type=style&index=0&id=0ba67711&lang=scss&scoped=true\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Modal.vue?vue&type=style&index=0&id=62975272&lang=scss&scoped=true\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Panel.vue?vue&type=style&index=0&id=1ddc0b24&lang=scss&scoped=true\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Notifications.vue?vue&type=style&index=0&id=6dc8bebc&scoped=true&lang=css\"","<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\"\nscript.render = render\nscript.__scopeId = \"data-v-4d9c871b\"\n\nexport default script","<script>\nimport axios from 'axios'\n\nexport default {\n name: \"Api\",\n methods: {\n execute(request, timeout=60000) {\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 this.notify({\n text: error,\n error: true,\n })\n\n reject(error)\n })\n })\n },\n\n request(action, args={}, timeout=60000) {\n return this.execute({\n type: 'request',\n action: action,\n args: args,\n }, timeout);\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\nexport default script","<script>\nexport default {\n name: \"DateTime\",\n methods: {\n formatDate(date) {\n return date.toDateString().substring(0, 10)\n },\n\n formatTime(date, seconds=true) {\n return date.toTimeString().substring(0, seconds ? 8 : 5)\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\nexport default script","<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, ...events) {\n const subFunc = () => {\n bus.emit('subscribe', {\n events: events,\n handler: handler,\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 }\n}\n</script>\n","import script from \"./Events.vue?vue&type=script&lang=js\"\nexport * from \"./Events.vue?vue&type=script&lang=js\"\n\nexport default script","<script>\nimport { bus } from \"@/bus\";\n\nexport default {\n name: \"Notification\",\n methods: {\n notify(notification) {\n bus.emit('notification-create', notification)\n },\n\n error(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\nexport default script","<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}\n</script>\n","import script from \"./Types.vue?vue&type=script&lang=js\"\nexport * from \"./Types.vue?vue&type=script&lang=js\"\n\nexport default script","<script>\nimport Api from \"@/utils/Api\";\nimport DateTime from \"@/utils/DateTime\";\nimport Events from \"@/utils/Events\";\nimport Notification from \"@/utils/Notification\";\nimport Types from \"@/utils/Types\";\n\nexport default {\n name: \"Utils\",\n mixins: [Api, Notification, Events, DateTime, Types],\n}\n</script>\n","import script from \"./Utils.vue?vue&type=script&lang=js\"\nexport * from \"./Utils.vue?vue&type=script&lang=js\"\n\nexport default script","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Loading.vue?vue&type=style&index=0&id=4d9c871b&lang=scss&scoped=true\"","<template>\n <Events ref=\"events\" :ws-port=\"config['backend.http'].websocket_port\" v-if=\"hasWebsocket\" />\n <Notifications ref=\"notifications\" />\n <VoiceAssistant ref=\"voice-assistant\" v-if=\"hasAssistant\" />\n <Pushbullet ref=\"pushbullet\" v-if=\"hasPushbullet\" />\n\n <router-view />\n</template>\n\n<script>\nimport Notifications from \"@/components/Notifications\";\nimport Utils from \"@/Utils\";\nimport Events from \"@/Events\";\nimport VoiceAssistant from \"@/components/VoiceAssistant\";\nimport { bus } from \"@/bus\";\nimport Pushbullet from \"@/components/Pushbullet\";\n\nexport default {\n name: 'App',\n mixins: [Utils],\n components: {Pushbullet, Notifications, Events, VoiceAssistant},\n\n data() {\n return {\n config: {},\n userAuthenticated: false,\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\n methods: {\n onNotification(notification) {\n this.$refs.notifications.create(notification)\n },\n\n async initConfig() {\n this.config = await this.request('config.get')\n this.userAuthenticated = true\n }\n },\n\n created() {\n this.initConfig()\n },\n\n mounted() {\n bus.on('notification-create', 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: Avenir, Helvetica, 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&bindings={\\\"id\\\":\\\"props\\\",\\\"text\\\":\\\"props\\\",\\\"html\\\":\\\"props\\\",\\\"title\\\":\\\"props\\\",\\\"image\\\":\\\"props\\\",\\\"link\\\":\\\"props\\\",\\\"error\\\":\\\"props\\\",\\\"warning\\\":\\\"props\\\",\\\"clicked\\\":\\\"options\\\"}\"\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\"\nscript.render = render\nscript.__scopeId = \"data-v-7646705e\"\n\nexport default script","import { render } from \"./Notifications.vue?vue&type=template&id=6dc8bebc&scoped=true&bindings={\\\"duration\\\":\\\"props\\\",\\\"create\\\":\\\"options\\\",\\\"destroy\\\":\\\"options\\\"}\"\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\"\nscript.render = render\nscript.__scopeId = \"data-v-6dc8bebc\"\n\nexport default script","<template>\n <div/>\n</template>\n\n<script>\nimport { bus } from \"@/bus\";\n\nexport default {\n name: \"Events\",\n props: {\n wsPort: {\n type: Number,\n default: 8009,\n }\n },\n\n data() {\n return {\n ws: null,\n initialized: false,\n pending: false,\n opened: false,\n timeout: null,\n reconnectMsecs: 30000,\n handlers: {},\n }\n },\n\n methods: {\n onWebsocketTimeout() {\n return function() {\n console.log('Websocket reconnection timed out, retrying')\n this.pending = false\n this.close()\n this.onclose()\n }\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) {\n handlers.push(this.handlers[null])\n }\n\n if (event.args.type in this.handlers) {\n handlers.push(...this.handlers[event.args.type])\n }\n\n for (let handler of handlers) {\n if (handler instanceof Array)\n handler = 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 this.onclose = () => {}\n this.close()\n }\n\n console.log('Websocket connection successful')\n this.opened = true\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('Websocket closed - code: ' + event.code + ' - reason: ' + event.reason)\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.hostname}:${this.wsPort}`\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\n for (const event of events) {\n if (!(event in this.handlers)) {\n this.handlers[event] = []\n }\n\n this.handlers[event].push(handler)\n }\n },\n\n unsubscribe(msg) {\n const handler = msg.handler\n const events = msg.events.length ? msg.events : [null]\n\n for (const event of events) {\n if (!(event in this.handlers))\n continue\n\n const idx = this.handlers[event].indexOf(handler)\n if (idx < 0)\n continue\n\n this.handlers[event] = this.handlers[event].splice(idx, 1)[1]\n if (!this.handlers[event].length)\n delete this.handlers[event]\n }\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=341517ce&bindings={\\\"wsPort\\\":\\\"props\\\",\\\"ws\\\":\\\"data\\\",\\\"initialized\\\":\\\"data\\\",\\\"pending\\\":\\\"data\\\",\\\"opened\\\":\\\"data\\\",\\\"timeout\\\":\\\"data\\\",\\\"reconnectMsecs\\\":\\\"data\\\",\\\"handlers\\\":\\\"data\\\",\\\"onWebsocketTimeout\\\":\\\"options\\\",\\\"onMessage\\\":\\\"options\\\",\\\"onOpen\\\":\\\"options\\\",\\\"onError\\\":\\\"options\\\",\\\"onClose\\\":\\\"options\\\",\\\"init\\\":\\\"options\\\",\\\"subscribe\\\":\\\"options\\\",\\\"unsubscribe\\\":\\\"options\\\"}\"\nimport script from \"./Events.vue?vue&type=script&lang=js\"\nexport * from \"./Events.vue?vue&type=script&lang=js\"\nscript.render = render\n\nexport default script","<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, 'platypush.message.event.assistant.ConversationStartEvent')\n this.subscribe(this.alertOn, 'platypush.message.event.assistant.AlertStartedEvent')\n this.subscribe(this.alertOff, 'platypush.message.event.assistant.AlertEndEvent')\n this.subscribe(this.speechRecognized, 'platypush.message.event.assistant.SpeechRecognizedEvent')\n this.subscribe(this.response, 'platypush.message.event.assistant.ResponseEvent')\n this.subscribe(this.conversationEnd,\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","<template>\n <div class=\"modal-container fade-in\" :id=\"id\" :class=\"{hidden: !isVisible}\" :style=\"{'--z-index': zIndex}\" @click=\"close\">\n <div class=\"modal\" :style=\"{'--width': width, '--height': height}\">\n <div class=\"content\" @click=\"$event.stopPropagation()\">\n <div class=\"header\" v-text=\"title\" v-if=\"title\"></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 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 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\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.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 --width: auto;\n --height: auto;\n width: var(--width);\n height: var(--height);\n display: flex;\n\n .content {\n border-radius: 0.5em;\n background: $modal-body-bg;\n }\n\n .header {\n display: flex;\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\n .body {\n max-height: 75vh;\n overflow: auto;\n padding: 2em;\n }\n }\n}\n</style>","import { render } from \"./Modal.vue?vue&type=template&id=62975272&scoped=true&bindings={\\\"id\\\":\\\"props\\\",\\\"title\\\":\\\"props\\\",\\\"width\\\":\\\"props\\\",\\\"height\\\":\\\"props\\\",\\\"visible\\\":\\\"props\\\",\\\"timeout\\\":\\\"props\\\",\\\"level\\\":\\\"props\\\",\\\"timeoutId\\\":\\\"data\\\",\\\"prevVisible\\\":\\\"data\\\",\\\"isVisible\\\":\\\"data\\\",\\\"zIndex\\\":\\\"options\\\",\\\"close\\\":\\\"options\\\",\\\"show\\\":\\\"options\\\",\\\"toggle\\\":\\\"options\\\"}\"\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=62975272&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-62975272\"\n\nexport default script","import { render } from \"./VoiceAssistant.vue?vue&type=template&id=217404dc&bindings={\\\"responseText\\\":\\\"data\\\",\\\"phrase\\\":\\\"data\\\",\\\"hideTimeout\\\":\\\"data\\\",\\\"state\\\":\\\"data\\\",\\\"reset\\\":\\\"options\\\",\\\"conversationStart\\\":\\\"options\\\",\\\"conversationEnd\\\":\\\"options\\\",\\\"speechRecognized\\\":\\\"options\\\",\\\"response\\\":\\\"options\\\",\\\"alertOn\\\":\\\"options\\\",\\\"alertOff\\\":\\\"options\\\",\\\"registerHandlers\\\":\\\"options\\\"}\"\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&lang=scss\"\nscript.render = render\n\nexport default script","<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, 'platypush.message.event.pushbullet.PushbulletEvent')\n },\n}\n</script>\n","import { render } from \"./Pushbullet.vue?vue&type=template&id=1fbf801e&bindings={\\\"onMessage\\\":\\\"options\\\"}\"\nimport script from \"./Pushbullet.vue?vue&type=script&lang=js\"\nexport * from \"./Pushbullet.vue?vue&type=script&lang=js\"\nscript.render = render\n\nexport default script","import { render } from \"./App.vue?vue&type=template&id=130607d8&bindings={\\\"config\\\":\\\"data\\\",\\\"userAuthenticated\\\":\\\"data\\\",\\\"hasWebsocket\\\":\\\"options\\\",\\\"hasAssistant\\\":\\\"options\\\",\\\"hasPushbullet\\\":\\\"options\\\",\\\"onNotification\\\":\\\"options\\\",\\\"initConfig\\\":\\\"options\\\"}\"\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&lang=scss\"\nscript.render = render\n\nexport default script","<template>\n <Loading v-if=\"loading\" />\n\n <div id=\"dashboard\" class=\"columns is-mobile\" :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=\"widget.props\" />\n </Widget>\n </keep-alive>\n </Row>\n </div>\n</template>\n\n<script>\nimport { defineAsyncComponent } 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 parseTemplate(name, tmpl) {\n const node = new DOMParser().parseFromString(tmpl, 'text/xml').childNodes[0]\n const self = this\n this.style = node.attributes.style ? node.attributes.style.nodeValue : undefined\n this.class = node.attributes.class ? node.attributes.class.nodeValue : undefined\n\n this.rows = [...node.getElementsByTagName('Row')].map((row) => {\n return {\n style: row.attributes.style ? row.attributes.style.nodeValue : undefined,\n class: row.attributes.class ? row.attributes.class.nodeValue : undefined,\n widgets: [...row.children].map((el) => {\n const component = defineAsyncComponent(\n () => import(`@/components/widgets/${el.nodeName}/Index`)\n )\n\n const style = el.attributes.style ? el.attributes.style.nodeValue : undefined\n const classes = el.attributes.class ? el.attributes.class.nodeValue : undefined\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\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.error(`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#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\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&bindings={\\\"class\\\":\\\"props\\\",\\\"style\\\":\\\"props\\\",\\\"classes\\\":\\\"options\\\"}\"\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\"\nscript.render = render\nscript.__scopeId = \"data-v-1b4663f2\"\n\nexport default script","<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 && 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=8c529832&scoped=true&bindings={\\\"style\\\":\\\"props\\\",\\\"class\\\":\\\"props\\\",\\\"classes\\\":\\\"options\\\"}\"\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=8c529832&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-8c529832\"\n\nexport default script","import { render } from \"./Dashboard.vue?vue&type=template&id=0ba67711&scoped=true&bindings={\\\"refreshSeconds\\\":\\\"props\\\",\\\"rows\\\":\\\"data\\\",\\\"loading\\\":\\\"data\\\",\\\"style\\\":\\\"data\\\",\\\"class\\\":\\\"data\\\",\\\"classes\\\":\\\"options\\\",\\\"parseTemplate\\\":\\\"options\\\",\\\"refreshDashboard\\\":\\\"options\\\"}\"\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=0ba67711&lang=scss&scoped=true\"\nimport \"./Dashboard.vue?vue&type=style&index=1&lang=css\"\nscript.render = render\nscript.__scopeId = \"data-v-0ba67711\"\n\nexport default script","<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&bindings={}\"\nimport script from \"./NotFound.vue?vue&type=script&lang=js\"\nexport * from \"./NotFound.vue?vue&type=script&lang=js\"\nscript.render = render\n\nexport default script","<template>\n <div class=\"login-container\">\n <form class=\"login\" method=\"POST\">\n <div class=\"description\">\n {{ _register ? 'Welcome' : 'Authenticate' }} to platypush\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 pull-right\">\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\">\nbody {\n width: 100vw;\n height: 100vh;\n margin: 0;\n overflow-x: hidden;\n}\n\n.login-container {\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.description {\n margin-bottom: 2em;\n text-align: center;\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\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 border-radius: 1em;\n }\n\n .checkbox {\n display: flex;\n font-size: 0.8em;\n }\n}\n\na {\n color: $default-link-fg;\n}\n</style>\n","import { render } from \"./Login.vue?vue&type=template&id=4aa616d8&bindings={\\\"register\\\":\\\"props\\\",\\\"_register\\\":\\\"options\\\"}\"\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&lang=scss\"\nscript.render = render\n\nexport default script","<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&bindings={\\\"register\\\":\\\"props\\\"}\"\nimport script from \"./Register.vue?vue&type=script&lang=js\"\nexport * from \"./Register.vue?vue&type=script&lang=js\"\nscript.render = render\n\nexport default script","<template>\n <main>\n <Loading v-if=\"loading\" />\n <Nav :panels=\"components\" :selected-panel=\"selectedPanel\" :hostname=\"hostname\"\n @select=\"selectedPanel = $event\" v-else />\n\n <div class=\"panel-container\">\n <div class=\"panel\" 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} from \"vue\";\nimport Utils from '@/Utils'\nimport Loading from \"@/components/Loading\";\nimport Nav from \"@/components/Nav\";\n\nexport default {\n name: 'Panel',\n mixins: [Utils],\n components: {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 }\n },\n\n methods: {\n initSelectedPanel() {\n const match = this.$route.hash.match('#?([a-zA-Z0-9.]+)[?]?(.*)')\n if (!match)\n return\n\n const plugin = match[1]\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 = 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 },\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 .panel-container {\n display: flex;\n flex-grow: 100;\n }\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</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=\"!collapsed && hostname\" v-text=\"hostname\" />\n </div>\n\n <li v-for=\"name in Object.keys(panels)\" :key=\"name\" class=\"entry\" :class=\"{selected: name === selectedPanel}\"\n @click=\"$emit('select', name)\">\n <a :href=\"`/#${name}`\">\n <span class=\"icon\">\n <i :class=\"icons[name].class\" v-if=\"icons[name]?.class\" />\n <i class=\"fas fa-puzzle-piece\" v-else />\n </span>\n <span class=\"name\" v-if=\"!collapsed\">{{ displayName(name) }}</span>\n </a>\n </li>\n </nav>\n</template>\n\n<script>\nimport { icons } from '@/assets/icons.json'\n\nexport default {\n name: \"Nav\",\n emits: ['select'],\n props: {\n panels: {\n type: Object,\n required: true,\n },\n\n selectedPanel: {\n type: String,\n },\n\n hostname: {\n type: String,\n },\n },\n\n methods: {\n displayName(name) {\n return name.split('.').map((token) => token[0].toUpperCase() + token.slice(1)).join(' ')\n },\n },\n\n data() {\n return {\n collapsed: false,\n icons: icons,\n host: null,\n }\n },\n}\n</script>\n\n<!--suppress SassScssResolvedByNameOnly -->\n<style lang=\"scss\" scoped>\nnav {\n width: 20%;\n min-width: 12.5em;\n max-width: 25em;\n height: 100%;\n overflow: auto;\n background: $nav-bg;\n color: $nav-fg;\n box-shadow: $nav-box-shadow-main;\n margin-right: 4px;\n\n li {\n box-shadow: $nav-box-shadow-entry;\n cursor: pointer;\n\n a {\n display: block;\n color: $nav-fg;\n padding: 1em 0.25em;\n &:hover {\n color: $nav-fg;\n }\n }\n\n &:hover {\n background: $nav-entry-hover-bg;\n }\n\n &.selected {\n background: $nav-entry-selected-bg;\n }\n\n .icon {\n margin-right: 0.5em;\n }\n\n .name {\n text-transform: capitalize;\n }\n }\n\n .toggler {\n width: 100%;\n display: flex;\n font-size: 1.5em;\n cursor: pointer;\n padding: 0.4em;\n\n .hostname {\n font-size: 0.7em;\n margin-left: 1em;\n }\n }\n\n &.collapsed {\n width: 2.5em;\n min-width: unset;\n max-width: unset;\n background: initial;\n color: $nav-collapsed-fg;\n box-shadow: $nav-box-shadow-collapsed;\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 text-align: center;\n margin-bottom: 3em;\n }\n\n li {\n box-shadow: 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 }\n}\n</style>\n","import { render } from \"./Nav.vue?vue&type=template&id=01ad1e76&scoped=true&bindings={\\\"panels\\\":\\\"props\\\",\\\"selectedPanel\\\":\\\"props\\\",\\\"hostname\\\":\\\"props\\\",\\\"displayName\\\":\\\"options\\\",\\\"collapsed\\\":\\\"data\\\",\\\"icons\\\":\\\"data\\\",\\\"host\\\":\\\"data\\\"}\"\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=01ad1e76&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-01ad1e76\"\n\nexport default script","import { render } from \"./Panel.vue?vue&type=template&id=1ddc0b24&scoped=true&bindings={\\\"loading\\\":\\\"data\\\",\\\"plugins\\\":\\\"data\\\",\\\"backends\\\":\\\"data\\\",\\\"procedures\\\":\\\"data\\\",\\\"components\\\":\\\"data\\\",\\\"hostname\\\":\\\"data\\\",\\\"selectedPanel\\\":\\\"data\\\",\\\"initSelectedPanel\\\":\\\"options\\\",\\\"initPanels\\\":\\\"options\\\",\\\"parseConfig\\\":\\\"options\\\"}\"\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=1ddc0b24&lang=scss&scoped=true\"\nimport \"./Panel.vue?vue&type=style&index=1&lang=css\"\nscript.render = render\nscript.__scopeId = \"data-v-1ddc0b24\"\n\nexport default script","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\";\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: \"/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","import { createApp } from 'vue'\nimport App from '@/App.vue'\nimport router from '@/router'\n\nconst app = createApp(App)\napp.config.globalProperties._config = window.config\napp.use(router).mount('#app')\n","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./VoiceAssistant.vue?vue&type=style&index=0&lang=scss\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Row.vue?vue&type=style&index=0&id=1b4663f2&lang=scss&scoped=true\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Nav.vue?vue&type=style&index=0&id=01ad1e76&lang=scss&scoped=true\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Dashboard.vue?vue&type=style&index=1&lang=css\"","export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../node_modules/vue-loader-v16/dist/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./App.vue?vue&type=style&index=0&lang=scss\"","var map = {\n\t\"./Calendar/Index\": [\n\t\t\"3c97\",\n\t\t\"chunk-62a3d08e\"\n\t],\n\t\"./DateTime/Index\": [\n\t\t\"365a\",\n\t\t\"chunk-4bbbb9a3\"\n\t],\n\t\"./DateTimeWeather/Index\": [\n\t\t\"3737\",\n\t\t\"chunk-16a3f845\",\n\t\t\"chunk-4bbbb9a3\",\n\t\t\"chunk-5710a9bc\"\n\t],\n\t\"./ImageCarousel/Index\": [\n\t\t\"c845\",\n\t\t\"chunk-16a3f845\",\n\t\t\"chunk-4bbbb9a3\",\n\t\t\"chunk-24ff873d\"\n\t],\n\t\"./Music/Index\": [\n\t\t\"bcf7\",\n\t\t\"chunk-ac6aae98\"\n\t],\n\t\"./RssNews/Index\": [\n\t\t\"c306\",\n\t\t\"chunk-e8078048\"\n\t],\n\t\"./Weather/Index\": [\n\t\t\"5b43\",\n\t\t\"chunk-16a3f845\"\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 webpackAsyncContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackAsyncContext.id = \"cdb9\";\nmodule.exports = webpackAsyncContext;","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Panel.vue?vue&type=style&index=1&lang=css\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Notification.vue?vue&type=style&index=0&id=7646705e&lang=scss&scoped=true\"","import mitt from 'mitt';\n\nconst bus = mitt();\n\nexport { bus };\n"],"sourceRoot":""}