platypush/platypush/backend/http/webapp/dist/static/js/app.90b230c8.js.map

1 line
154 KiB
Plaintext

{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/components/Nav.vue?4f4d","webpack:///./src/components/panels lazy ^\\.\\/.*\\/Index$ namespace object","webpack:///./src/components/panels/Settings/Token.vue?d82e","webpack:///./src/components/Modal.vue?b206","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/Cookies.vue","webpack:///./src/utils/Cookies.vue?b76d","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/Screen.vue","webpack:///./src/utils/Screen.vue?1002","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/components/elements/DropdownItem.vue","webpack:///./src/components/elements/DropdownItem.vue?41ff","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/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/views/Plugin.vue","webpack:///./src/views/Plugin.vue?e1db","webpack:///./src/router/index.js","webpack:///./src/main.js","webpack:///./src/components/widgets/Row.vue?ba30","webpack:///./src/components/panels/Settings/Index.vue","webpack:///./src/components/panels/Settings/Token.vue","webpack:///./src/components/panels/Settings/Token.vue?5b43","webpack:///./src/components/panels/Settings/Users.vue","webpack:///./src/components/panels/Settings/Users.vue?f312","webpack:///./src/components/panels/Settings/Index.vue?6dad","webpack:///./src/components/Modal.vue","webpack:///./src/components/Modal.vue?9db4","webpack:///./src/views/Dashboard.vue?dde3","webpack:///./src/components/panels/Settings/Index.vue?2ad0","webpack:///./src/components/elements/Dropdown.vue?81d6","webpack:///./src/views/Plugin.vue?f4e1","webpack:///./src/views/Login.vue?c2ae","webpack:///./src/components/elements/Dropdown.vue","webpack:///./src/components/elements/Dropdown.vue?ce46","webpack:///./src/views/Panel.vue?8bdb","webpack:///./src/components/panels/Settings/Users.vue?19be","webpack:///./src/components/widgets lazy ^\\.\\/.*\\/Index$ namespace object","webpack:///./src/App.vue?e90a","webpack:///./src/components/VoiceAssistant.vue?06f1","webpack:///./src/views/Plugin.vue?6675","webpack:///./src/components/widgets/Widget.vue?5b90","webpack:///./src/views/Dashboard.vue?7a53","webpack:///./src/views/Panel.vue?1637","webpack:///./src/components/elements/DropdownItem.vue?b60d","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","getCookies","cookie","split","reduce","obj","item","k","v","formatDate","date","year","Date","parse","toDateString","substring","formatTime","seconds","toTimeString","formatDateTime","computed","_eventsReady","$root","$refs","events","initialized","subscribe","handler","handlerName","subFunc","bus","emit","generateId","self","unwatch","$watch","newVal","unsubscribe","btoa","Array","String","fromCharCode","Math","round","random","notification","warn","msg","warning","isMobile","matchMedia","matches","isTablet","isDesktop","parseBoolean","toLowerCase","parseInt","convertSize","unit","units","forEach","u","toFixed","mixins","Api","Cookies","Notification","Events","DateTime","Screen","Types","itemClass","clicked","iconClass","props","disabled","Boolean","default","$parent","$emit","visible","ref","hasAssistant","hasPushbullet","notifications","index","html","title","link","image","destroy","alt","icon","style","color","open","components","duration","Number","timeouts","wsPort","ws","pending","opened","reconnectMsecs","handlers","handlerNameToEventTypes","onWebsocketTimeout","log","close","onClose","onMessage","JSON","debug","values","Function","onOpen","onclose","onError","reason","init","protocol","location","url","hostname","WebSocket","onmessage","onopen","created","on","state","alerting","responding","speechRecognized","listening","Modal","Utils","responseText","phrase","hideTimeout","reset","conversationStart","assistantModal","show","conversationEnd","response_text","alertOn","alertOff","registerHandlers","mounted","push_type","body","Pushbullet","Notifications","VoiceAssistant","config","userAuthenticated","hasWebsocket","onNotification","initConfig","classes","rows","row","widgets","widget","component","getWidgetProps","required","concat","Widget","Loading","Row","refreshSeconds","loading","parseTemplate","tmpl","node","DOMParser","parseFromString","childNodes","attributes","nodeValue","children","el","nodeName","attrs","content","innerHTML","$options","refreshDashboard","$route","params","template","setInterval","method","placeholder","_register","register","Login","panels","selected-panel","selectedPanel","$event","panel","plugin-name","collapsed","sort","onItemClick","icons","imgUrl","emits","host","hash","Settings","Nav","plugins","backends","procedures","initSelectedPanel","match","plugin","initPanels","entries","componentName","token","toUpperCase","join","comp","pluginName","parseConfig","initializeDefaultViews","switches","initPanel","toString","routes","path","Panel","Dashboard","Plugin","Register","NotFound","router","createRouter","history","createWebHistory","app","createApp","App","globalProperties","_config","use","mount","selectedView","selected","usersView","addUserModal","session-token","sessionToken","current-user","currentUser","onTokenSelect","generateToken","username","password","validityDays","expiry_days","tokenModal","select","execCommand","createUser","commandRunning","changePassword","selectedUser","users","user","user_id","icon-class","changePasswordModal","deleteUser","DropdownItem","Dropdown","refresh","preventDefault","form","addUserForm","querySelectorAll","input","confirm_password","session_token","changePasswordForm","new_password","confirm_new_password","success","old_password","confirm","Users","Token","isVisible","zIndex","width","height","stopPropagation","level","timeoutId","prevVisible","hide","toggle","visibleHndl","updated","maxZIndex","getComputedStyle","$el","outermostModals","modal","indexOf","items","documentClickHndl","element","dropdown","parentElement","removeEventListener","addEventListener","left","top","parseFloat","button","getBoundingClientRect","innerWidth","clientWidth","innerHeight","clientHeight","mitt"],"mappings":"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lBgH,EAAaA,EAAWG,QACxB,IAAI,IAAI5G,EAAI,EAAGA,EAAIyG,EAAWvG,OAAQF,IAAKP,EAAqBgH,EAAWzG,IAC3E,IAAIU,EAAsBiG,EAI1B/F,EAAgBJ,KAAK,CAAC,EAAE,kBAEjBM,K,6EC1QT,W,yECAA,IAAI+F,EAAM,CACT,iBAAkB,CACjB,OACA,kBAED,6BAA8B,CAC7B,OACA,kBAED,mBAAoB,CACnB,OACA,iBACA,kBAED,uBAAwB,CACvB,OACA,iBACA,kBAED,0BAA2B,CAC1B,OACA,iBACA,kBAED,2BAA4B,CAC3B,OACA,iBACA,kBAED,mBAAoB,CACnB,OACA,iBACA,kBAED,kBAAmB,CAClB,OACA,kBAED,gBAAiB,CAChB,OACA,iBACA,iBACA,kBAED,mBAAoB,CACnB,OACA,iBACA,iBACA,iBACA,kBAED,gBAAiB,CAChB,OACA,iBACA,iBACA,iBACA,kBAED,uBAAwB,CACvB,OACA,iBACA,iBACA,iBACA,iBACA,kBAED,mBAAoB,CACnB,OACA,iBACA,iBACA,iBACA,iBACA,kBAED,yBAA0B,CACzB,OACA,iBACA,iBACA,iBACA,iBACA,kBAED,mBAAoB,CACnB,OACA,iBACA,iBACA,iBACA,iBACA,kBAED,gBAAiB,CAChB,OACA,iBACA,iBACA,kBAED,mBAAoB,CACnB,OACA,iBACA,iBACA,iBACA,kBAED,wBAAyB,CACxB,OACA,iBACA,iBACA,kBAED,uBAAwB,CACvB,QACA,iBACA,iBACA,iBACA,kBAED,mBAAoB,CACnB,OACA,iBACA,iBACA,kBAED,mBAAoB,CACnB,QAED,gBAAiB,CAChB,OACA,kBAED,mBAAoB,CACnB,OACA,kBAED,4BAA6B,CAC5B,OACA,iBACA,iBACA,kBAED,+BAAgC,CAC/B,OACA,iBACA,iBACA,kBAED,gCAAiC,CAChC,OACA,iBACA,iBACA,kBAED,8BAA+B,CAC9B,OACA,iBACA,iBACA,kBAED,6BAA8B,CAC7B,OACA,iBACA,iBACA,kBAED,sCAAuC,CACtC,OACA,iBACA,iBACA,kBAED,8BAA+B,CAC9B,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","file":"static/js/app.90b230c8.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-01c1b3b0\":\"e53aa42f\",\"chunk-06539e5d\":\"71e8e73b\",\"chunk-5d632024\":\"1b5ac971\",\"chunk-0127d4fc\":\"a10585f1\",\"chunk-07773226\":\"8df3ca2d\",\"chunk-0827360a\":\"832f08b4\",\"chunk-35986630\":\"2deb9299\",\"chunk-41adab28\":\"c070d036\",\"chunk-60dbbc82\":\"1e9259bf\",\"chunk-972487d6\":\"50c26261\",\"chunk-c4aee99e\":\"b70ad5c7\",\"chunk-6ee47cbe\":\"3d51c5e6\",\"chunk-14965a61\":\"1d7339b2\",\"chunk-2d0ac54d\":\"d666dc77\",\"chunk-2d0b21a7\":\"59ca0ac9\",\"chunk-37779247\":\"042dd9b7\",\"chunk-49f94906\":\"b96fc78b\",\"chunk-5d57b054\":\"8fb7b99f\",\"chunk-cc8a6536\":\"9cd55708\",\"chunk-2d2091df\":\"2eea6c5c\",\"chunk-09eaa919\":\"22084f8d\",\"chunk-1b24f8bf\":\"da3d43c1\",\"chunk-44b22f6e\":\"9b730fcd\",\"chunk-b6886800\":\"1a2c1829\",\"chunk-31bc5041\":\"150e0d32\",\"chunk-36760726\":\"5007ff45\",\"chunk-40ee55e4\":\"5487788f\",\"chunk-55f142bc\":\"f287d0c8\",\"chunk-57f8147d\":\"392752be\",\"chunk-2d0d6b06\":\"c30e3dbb\",\"chunk-2d22495e\":\"ab1a60c2\",\"chunk-5c4852cd\":\"a1e4850b\",\"chunk-5d73ace1\":\"e7dea834\",\"chunk-3cd152ac\":\"7ba8b690\",\"chunk-0b6bec58\":\"dae9d413\",\"chunk-2d21da1a\":\"228a810a\",\"chunk-746dfdf7\":\"996f7b5a\",\"chunk-9684cd10\":\"8ab232e2\",\"chunk-c7dc785e\":\"1fa68197\",\"chunk-2d0b270c\":\"76b89971\",\"chunk-2d0c1eb0\":\"7d3a54c7\",\"chunk-2d21b0dc\":\"548e37ff\",\"chunk-2d231217\":\"c20a3396\",\"chunk-74fb6755\":\"adfe5442\",\"chunk-2d0aa612\":\"d6557933\",\"chunk-2d0c229a\":\"b202b7c9\",\"chunk-2d0d5f97\":\"4a7eb0b7\",\"chunk-2d0da3df\":\"a451aa44\",\"chunk-2d208116\":\"a219a6df\",\"chunk-a018ff46\":\"f5ec4b17\",\"chunk-2d0cc2be\":\"7b1ad454\",\"chunk-2d237d41\":\"7d190124\",\"chunk-cb35d852\":\"b66b8b63\",\"chunk-d8561e02\":\"24122872\",\"chunk-da0a28d2\":\"e49720f2\"}[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-01c1b3b0\":1,\"chunk-06539e5d\":1,\"chunk-5d632024\":1,\"chunk-0127d4fc\":1,\"chunk-07773226\":1,\"chunk-0827360a\":1,\"chunk-35986630\":1,\"chunk-41adab28\":1,\"chunk-60dbbc82\":1,\"chunk-972487d6\":1,\"chunk-c4aee99e\":1,\"chunk-6ee47cbe\":1,\"chunk-14965a61\":1,\"chunk-37779247\":1,\"chunk-49f94906\":1,\"chunk-5d57b054\":1,\"chunk-cc8a6536\":1,\"chunk-09eaa919\":1,\"chunk-1b24f8bf\":1,\"chunk-44b22f6e\":1,\"chunk-b6886800\":1,\"chunk-31bc5041\":1,\"chunk-36760726\":1,\"chunk-40ee55e4\":1,\"chunk-55f142bc\":1,\"chunk-57f8147d\":1,\"chunk-5c4852cd\":1,\"chunk-5d73ace1\":1,\"chunk-3cd152ac\":1,\"chunk-0b6bec58\":1,\"chunk-9684cd10\":1,\"chunk-c7dc785e\":1,\"chunk-74fb6755\":1,\"chunk-a018ff46\":1,\"chunk-cb35d852\":1,\"chunk-d8561e02\":1,\"chunk-da0a28d2\":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-01c1b3b0\":\"49966cbb\",\"chunk-06539e5d\":\"37b27d9c\",\"chunk-5d632024\":\"bb85baf2\",\"chunk-0127d4fc\":\"b7f95919\",\"chunk-07773226\":\"00825bd8\",\"chunk-0827360a\":\"8e7e5444\",\"chunk-35986630\":\"bd3b7f3a\",\"chunk-41adab28\":\"78406910\",\"chunk-60dbbc82\":\"5c3bc0a9\",\"chunk-972487d6\":\"be8ac43d\",\"chunk-c4aee99e\":\"68974036\",\"chunk-6ee47cbe\":\"b8680cd4\",\"chunk-14965a61\":\"1a144eeb\",\"chunk-2d0ac54d\":\"31d6cfe0\",\"chunk-2d0b21a7\":\"31d6cfe0\",\"chunk-37779247\":\"a6f0d13a\",\"chunk-49f94906\":\"7312a86d\",\"chunk-5d57b054\":\"4f0d3995\",\"chunk-cc8a6536\":\"c8b393bb\",\"chunk-2d2091df\":\"31d6cfe0\",\"chunk-09eaa919\":\"c3536909\",\"chunk-1b24f8bf\":\"63ffd53d\",\"chunk-44b22f6e\":\"14e74e94\",\"chunk-b6886800\":\"68419247\",\"chunk-31bc5041\":\"ae7653b1\",\"chunk-36760726\":\"0450b3c1\",\"chunk-40ee55e4\":\"ccd10b0b\",\"chunk-55f142bc\":\"8e09018c\",\"chunk-57f8147d\":\"e92e7302\",\"chunk-2d0d6b06\":\"31d6cfe0\",\"chunk-2d22495e\":\"31d6cfe0\",\"chunk-5c4852cd\":\"661cd024\",\"chunk-5d73ace1\":\"f5d7ed65\",\"chunk-3cd152ac\":\"f967907e\",\"chunk-0b6bec58\":\"6da6a3a7\",\"chunk-2d21da1a\":\"31d6cfe0\",\"chunk-746dfdf7\":\"31d6cfe0\",\"chunk-9684cd10\":\"8b950853\",\"chunk-c7dc785e\":\"ad2e6c5e\",\"chunk-2d0b270c\":\"31d6cfe0\",\"chunk-2d0c1eb0\":\"31d6cfe0\",\"chunk-2d21b0dc\":\"31d6cfe0\",\"chunk-2d231217\":\"31d6cfe0\",\"chunk-74fb6755\":\"02567377\",\"chunk-2d0aa612\":\"31d6cfe0\",\"chunk-2d0c229a\":\"31d6cfe0\",\"chunk-2d0d5f97\":\"31d6cfe0\",\"chunk-2d0da3df\":\"31d6cfe0\",\"chunk-2d208116\":\"31d6cfe0\",\"chunk-a018ff46\":\"558929df\",\"chunk-2d0cc2be\":\"31d6cfe0\",\"chunk-2d237d41\":\"31d6cfe0\",\"chunk-cb35d852\":\"d3e279aa\",\"chunk-d8561e02\":\"3472d8be\",\"chunk-da0a28d2\":\"4d42c4be\"}[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","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=7cd654a6&lang=scss&scoped=true\"","var map = {\n\t\"./Camera/Index\": [\n\t\t\"1ed9\",\n\t\t\"chunk-74fb6755\"\n\t],\n\t\"./CameraAndroidIpcam/Index\": [\n\t\t\"4626\",\n\t\t\"chunk-36760726\"\n\t],\n\t\"./CameraCv/Index\": [\n\t\t\"6b85\",\n\t\t\"chunk-74fb6755\",\n\t\t\"chunk-2d0da3df\"\n\t],\n\t\"./CameraFfmpeg/Index\": [\n\t\t\"a2e4\",\n\t\t\"chunk-74fb6755\",\n\t\t\"chunk-2d208116\"\n\t],\n\t\"./CameraGstreamer/Index\": [\n\t\t\"48aa\",\n\t\t\"chunk-74fb6755\",\n\t\t\"chunk-2d0c229a\"\n\t],\n\t\"./CameraIrMlx90640/Index\": [\n\t\t\"1184\",\n\t\t\"chunk-74fb6755\",\n\t\t\"chunk-2d0aa612\"\n\t],\n\t\"./CameraPi/Index\": [\n\t\t\"7129\",\n\t\t\"chunk-74fb6755\",\n\t\t\"chunk-2d0d5f97\"\n\t],\n\t\"./Execute/Index\": [\n\t\t\"10ff\",\n\t\t\"chunk-5c4852cd\"\n\t],\n\t\"./Light/Index\": [\n\t\t\"cf99\",\n\t\t\"chunk-06539e5d\",\n\t\t\"chunk-6ee47cbe\",\n\t\t\"chunk-cc8a6536\"\n\t],\n\t\"./LightHue/Index\": [\n\t\t\"a84f\",\n\t\t\"chunk-06539e5d\",\n\t\t\"chunk-6ee47cbe\",\n\t\t\"chunk-cc8a6536\",\n\t\t\"chunk-2d2091df\"\n\t],\n\t\"./Media/Index\": [\n\t\t\"3951\",\n\t\t\"chunk-6ee47cbe\",\n\t\t\"chunk-3cd152ac\",\n\t\t\"chunk-9684cd10\",\n\t\t\"chunk-c7dc785e\"\n\t],\n\t\"./MediaMplayer/Index\": [\n\t\t\"47a8\",\n\t\t\"chunk-6ee47cbe\",\n\t\t\"chunk-3cd152ac\",\n\t\t\"chunk-9684cd10\",\n\t\t\"chunk-c7dc785e\",\n\t\t\"chunk-2d0c1eb0\"\n\t],\n\t\"./MediaMpv/Index\": [\n\t\t\"23b7\",\n\t\t\"chunk-6ee47cbe\",\n\t\t\"chunk-3cd152ac\",\n\t\t\"chunk-9684cd10\",\n\t\t\"chunk-c7dc785e\",\n\t\t\"chunk-2d0b270c\"\n\t],\n\t\"./MediaOmxplayer/Index\": [\n\t\t\"eede\",\n\t\t\"chunk-6ee47cbe\",\n\t\t\"chunk-3cd152ac\",\n\t\t\"chunk-9684cd10\",\n\t\t\"chunk-c7dc785e\",\n\t\t\"chunk-2d231217\"\n\t],\n\t\"./MediaVlc/Index\": [\n\t\t\"bdae\",\n\t\t\"chunk-6ee47cbe\",\n\t\t\"chunk-3cd152ac\",\n\t\t\"chunk-9684cd10\",\n\t\t\"chunk-c7dc785e\",\n\t\t\"chunk-2d21b0dc\"\n\t],\n\t\"./Music/Index\": [\n\t\t\"0d41\",\n\t\t\"chunk-6ee47cbe\",\n\t\t\"chunk-3cd152ac\",\n\t\t\"chunk-0b6bec58\"\n\t],\n\t\"./MusicMpd/Index\": [\n\t\t\"d1b9\",\n\t\t\"chunk-6ee47cbe\",\n\t\t\"chunk-3cd152ac\",\n\t\t\"chunk-0b6bec58\",\n\t\t\"chunk-2d21da1a\"\n\t],\n\t\"./MusicSnapcast/Index\": [\n\t\t\"d5eb\",\n\t\t\"chunk-06539e5d\",\n\t\t\"chunk-6ee47cbe\",\n\t\t\"chunk-5d57b054\"\n\t],\n\t\"./MusicSpotify/Index\": [\n\t\t\"2a628\",\n\t\t\"chunk-6ee47cbe\",\n\t\t\"chunk-3cd152ac\",\n\t\t\"chunk-0b6bec58\",\n\t\t\"chunk-746dfdf7\"\n\t],\n\t\"./Rtorrent/Index\": [\n\t\t\"4d91\",\n\t\t\"chunk-9684cd10\",\n\t\t\"chunk-a018ff46\",\n\t\t\"chunk-2d0cc2be\"\n\t],\n\t\"./Settings/Index\": [\n\t\t\"68c5\"\n\t],\n\t\"./Sound/Index\": [\n\t\t\"dbf7\",\n\t\t\"chunk-40ee55e4\"\n\t],\n\t\"./Switches/Index\": [\n\t\t\"6341\",\n\t\t\"chunk-31bc5041\"\n\t],\n\t\"./Switches/LightHue/Index\": [\n\t\t\"0219\",\n\t\t\"chunk-06539e5d\",\n\t\t\"chunk-5d632024\",\n\t\t\"chunk-35986630\"\n\t],\n\t\"./Switches/Smartthings/Index\": [\n\t\t\"6e68\",\n\t\t\"chunk-06539e5d\",\n\t\t\"chunk-5d632024\",\n\t\t\"chunk-972487d6\"\n\t],\n\t\"./Switches/SwitchTplink/Index\": [\n\t\t\"d11f\",\n\t\t\"chunk-06539e5d\",\n\t\t\"chunk-5d632024\",\n\t\t\"chunk-c4aee99e\"\n\t],\n\t\"./Switches/SwitchWemo/Index\": [\n\t\t\"bedd\",\n\t\t\"chunk-06539e5d\",\n\t\t\"chunk-5d632024\",\n\t\t\"chunk-60dbbc82\"\n\t],\n\t\"./Switches/Switchbot/Index\": [\n\t\t\"0022\",\n\t\t\"chunk-06539e5d\",\n\t\t\"chunk-5d632024\",\n\t\t\"chunk-0127d4fc\"\n\t],\n\t\"./Switches/SwitchbotBluetooth/Index\": [\n\t\t\"0022\",\n\t\t\"chunk-06539e5d\",\n\t\t\"chunk-5d632024\",\n\t\t\"chunk-0127d4fc\"\n\t],\n\t\"./Switches/ZigbeeMqtt/Index\": [\n\t\t\"65d6\",\n\t\t\"chunk-06539e5d\",\n\t\t\"chunk-5d632024\",\n\t\t\"chunk-07773226\"\n\t],\n\t\"./Switches/Zwave/Index\": [\n\t\t\"e170\",\n\t\t\"chunk-06539e5d\",\n\t\t\"chunk-5d632024\",\n\t\t\"chunk-0827360a\"\n\t],\n\t\"./Switches/ZwaveMqtt/Index\": [\n\t\t\"8b26\",\n\t\t\"chunk-06539e5d\",\n\t\t\"chunk-5d632024\",\n\t\t\"chunk-41adab28\"\n\t],\n\t\"./Torrent/Index\": [\n\t\t\"fd7d\",\n\t\t\"chunk-9684cd10\",\n\t\t\"chunk-a018ff46\",\n\t\t\"chunk-2d237d41\"\n\t],\n\t\"./Tts/Index\": [\n\t\t\"e184\",\n\t\t\"chunk-57f8147d\",\n\t\t\"chunk-2d22495e\"\n\t],\n\t\"./TtsGoogle/Index\": [\n\t\t\"742e\",\n\t\t\"chunk-57f8147d\",\n\t\t\"chunk-2d0d6b06\"\n\t],\n\t\"./TvSamsungWs/Index\": [\n\t\t\"0f3a\",\n\t\t\"chunk-cb35d852\"\n\t],\n\t\"./ZigbeeMqtt/Index\": [\n\t\t\"655e\",\n\t\t\"chunk-06539e5d\",\n\t\t\"chunk-6ee47cbe\",\n\t\t\"chunk-37779247\"\n\t],\n\t\"./Zwave/Index\": [\n\t\t\"234d\",\n\t\t\"chunk-06539e5d\",\n\t\t\"chunk-6ee47cbe\",\n\t\t\"chunk-14965a61\",\n\t\t\"chunk-2d0b21a7\"\n\t],\n\t\"./ZwaveMqtt/Index\": [\n\t\t\"18a1\",\n\t\t\"chunk-06539e5d\",\n\t\t\"chunk-6ee47cbe\",\n\t\t\"chunk-14965a61\",\n\t\t\"chunk-2d0ac54d\"\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!./Token.vue?vue&type=style&index=0&id=5f9053de&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!./Modal.vue?vue&type=style&index=0&id=010fadd6&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: \"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}\n</script>\n","import script from \"./Cookies.vue?vue&type=script&lang=js\"\nexport * from \"./Cookies.vue?vue&type=script&lang=js\"\n\nexport default script","<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\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, 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\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 warn(msg) {\n this.notify({\n text: msg,\n warning: true,\n })\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: \"Screen\",\n methods: {\n isMobile() {\n return window.matchMedia(\"only screen and (max-width: 760px)\").matches\n },\n\n isTablet() {\n return !this.isMobile() && window.matchMedia(\"only screen and (max-width: 960px)\").matches\n },\n\n isDesktop() {\n return window.matchMedia(\"only screen and (min-width: 1152px)\").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\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 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}\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 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 Types from \"@/utils/Types\";\n\nexport default {\n name: \"Utils\",\n mixins: [Api, Cookies, Notification, Events, DateTime, Screen, 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 <div class=\"row item\" :class=\"itemClass\" @click=\"clicked\">\n <div class=\"col-1 icon\" v-if=\"iconClass\">\n <i :class=\"iconClass\" />\n </div>\n <div class=\"text\" :class=\"{'col-11': iconClass != null}\" v-text=\"text\" />\n </div>\n</template>\n\n<script>\nexport default {\n name: \"DropdownItem\",\n props: {\n iconClass: {\n type: String,\n },\n\n text: {\n type: String,\n },\n\n disabled: {\n type: Boolean,\n default: false,\n },\n\n itemClass: {\n type: String,\n }\n },\n\n methods: {\n clicked(event) {\n this.$parent.$emit('click', event)\n this.$parent.visible = false\n }\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.item {\n display: flex;\n padding: .5em .25em;\n cursor: pointer;\n align-items: center;\n\n &:hover {\n background: $hover-bg;\n }\n\n &.disabled {\n color: $dropdown-disabled-color;\n cursor: initial;\n }\n\n .icon {\n margin: 0 .5rem;\n }\n}\n</style>\n","import { render } from \"./DropdownItem.vue?vue&type=template&id=e44d79c8&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=e44d79c8&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-e44d79c8\"\n\nexport default script","<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\"\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\"\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 handlerNameToEventTypes: {},\n }\n },\n\n methods: {\n onWebsocketTimeout() {\n console.log('Websocket reconnection timed out, retrying')\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\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 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=26b9b70f\"\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, 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\"\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, 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\"\nscript.render = render\n\nexport default script","import { render } from \"./App.vue?vue&type=template&id=618fbb8c\"\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=618fbb8c&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=\"getWidgetProps(widget)\" />\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 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 = defineAsyncComponent(\n () => import(`@/components/widgets/${el.nodeName}/Index`)\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.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@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\"\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?.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\"\nscript.render = render\nscript.__scopeId = \"data-v-5df52982\"\n\nexport default script","import { render } from \"./Dashboard.vue?vue&type=template&id=5c64bb76&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=5c64bb76&lang=scss&scoped=true\"\nimport \"./Dashboard.vue?vue&type=style&index=1&id=5c64bb76&lang=css\"\nscript.render = render\nscript.__scopeId = \"data-v-5c64bb76\"\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\"\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}\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.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 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\na {\n color: $default-link-fg;\n}\n</style>\n","import { render } from \"./Login.vue?vue&type=template&id=d32baf50\"\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=d32baf50&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\"\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=\"canvas\" v-if=\"selectedPanel === 'settings'\">\n <div class=\"panel\">\n <Settings />\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} 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 }\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 this.initializeDefaultViews()\n },\n\n initializeDefaultViews() {\n this.plugins.execute = {}\n this.plugins.switches = {}\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 @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","<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\">\n <li v-for=\"name in Object.keys(panels).sort()\" :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\" />\n </a>\n </li>\n </ul>\n\n <ul class=\"footer\">\n <li :class=\"{selected: selectedPanel === 'settings'}\" title=\"Settings\" @click=\"onItemClick('settings')\">\n <!--suppress HtmlUnknownAnchorTarget -->\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 <!--suppress HtmlUnknownTarget -->\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\";\n\nexport default {\n name: \"Nav\",\n emits: ['select'],\n mixins: [Utils],\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 onItemClick(name) {\n this.$emit('select', name)\n this.collapsed = true\n },\n },\n\n data() {\n return {\n collapsed: true,\n icons: icons,\n host: null,\n }\n },\n\n mounted() {\n if (this.isMobile() && !this.$root.$route.hash.length)\n this.collapsed = false\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.5em;\n\nnav {\n @media screen and (max-width: $tablet) {\n width: 100%;\n height: 100vh;\n background: $nav-bg;\n color: $nav-fg;\n box-shadow: $nav-box-shadow-main;\n\n &:not(.collapsed) {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 2;\n }\n }\n\n @media screen and (min-width: $tablet) {\n 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 margin-right: 2px;\n }\n\n @media screen and (min-width: $desktop) {\n width: 16em;\n }\n\n li {\n border: $nav-entry-border;\n cursor: pointer;\n list-style: none;\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 .name {\n margin-left: 0.5em;\n }\n\n .icon {\n margin-right: 0.5em;\n }\n }\n\n .toggler {\n width: 100%;\n display: flex;\n background: $nav-toggler-bg;\n font-size: 1.5em;\n cursor: pointer;\n padding: 0.6em;\n align-items: center;\n box-shadow: $nav-toggler-shadow;\n }\n\n .hostname {\n font-size: 0.7em;\n\n @media screen and (min-width: $tablet) {\n margin-left: 1em;\n }\n\n @media screen and (max-width: $tablet) {\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} - 1.4em);\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\n &.collapsed {\n display: flex;\n flex-direction: column;\n\n @media screen and (min-width: $tablet) {\n width: 2.5em;\n min-width: unset;\n max-width: unset;\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) {\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 background: none;\n text-align: center;\n padding: 0.4em;\n box-shadow: none;\n }\n\n .footer {\n height: $footer-collapsed-height;\n background: none;\n padding: 0;\n margin-bottom: .5em;\n }\n\n @media screen and (max-width: $tablet) {\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 justify-content: left;\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) {\n display: none;\n }\n }\n }\n }\n}\n</style>\n","import { render } from \"./Nav.vue?vue&type=template&id=7cd654a6&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=7cd654a6&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-7cd654a6\"\n\nexport default script","import { render } from \"./Panel.vue?vue&type=template&id=5ec69f95&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=5ec69f95&lang=scss&scoped=true\"\nimport \"./Panel.vue?vue&type=style&index=1&id=5ec69f95&lang=css\"\nscript.render = render\nscript.__scopeId = \"data-v-5ec69f95\"\n\nexport default script","<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} 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 = defineAsyncComponent(async () => { return comp })\n this.$options.components[name] = 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=67571c94&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=67571c94&lang=scss&scoped=true\"\nimport \"./Plugin.vue?vue&type=style&index=1&id=67571c94&lang=css\"\nscript.render = render\nscript.__scopeId = \"data-v-67571c94\"\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\";\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","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!./Row.vue?vue&type=style&index=0&id=1b4663f2&lang=scss&scoped=true\"","<template>\n <div class=\"settings-container\">\n <header>\n <div class=\"col-8\">\n <select title=\"View\" @change=\"selectedView = $event.target.value\">\n <option value=\"users\" :selected=\"selectedView === 'users'\">Users</option>\n <option value=\"token\" :selected=\"selectedView === 'token'\">Generate Token</option>\n </select>\n </div>\n\n <div class=\"col-4 pull-right\">\n <button title=\"Add User\" @click=\"$refs.usersView.$refs.addUserModal.show()\" v-if=\"selectedView === 'users'\">\n <i class=\"fa fa-plus\" />\n </button>\n </div>\n </header>\n\n <main>\n <Users :session-token=\"sessionToken\" :current-user=\"currentUser\"\n v-if=\"selectedView === 'users'\" ref=\"usersView\" />\n <Token :session-token=\"sessionToken\" :current-user=\"currentUser\"\n v-else-if=\"selectedView === 'token'\" ref=\"tokenView\" />\n </main>\n </div>\n</template>\n\n<script>\nimport Token from \"@/components/panels/Settings/Token\";\nimport Users from \"@/components/panels/Settings/Users\";\nimport Utils from \"@/Utils\";\n\nexport default {\n name: \"Settings\",\n components: {Users, Token},\n mixins: [Utils],\n\n data() {\n return {\n selectedView: 'users',\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\n <textarea class=\"token\" v-text=\"token\" @focus=\"onTokenSelect\" />\n </label>\n </div>\n </Modal>\n\n <div class=\"body\">\n <div class=\"description\">\n <p>Generate a JWT authentication token that can be used for API calls to the <tt>/execute</tt> 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 <tt>Authorization: Bearer</tt> header;</li>\n <li>Specify it on the <tt>X-Token</tt> header;</li>\n <li>Specify it as a URL parameter: <tt>http://site:8008/execute?token=...</tt>;</li>\n <li>Specify it on the body of your JSON request: <tt>{\"type\":\"request\", \"action\", \"...\", \"token\":\"...\"}</tt>.</li>\n </ul>\n\n Confirm your credentials in order to generate a new token.\n </div>\n\n <div class=\"form-container\">\n <form @submit.prevent=\"generateToken\" ref=\"generateTokenForm\">\n <label>\n Username\n <input type=\"text\" name=\"username\" :value=\"currentUser.username\" disabled>\n </label>\n\n <label>\n Password\n <input type=\"password\" name=\"password\">\n </label>\n\n <label>\n Token validity in days\n <input type=\"text\" name=\"validityDays\">\n <span class=\"note\">\n Decimal values are also supported (e.g. <i>0.5</i> to identify 6 hours). An empty or zero value means that\n the token has no expiry date.\n </span>\n </label>\n\n <input type=\"submit\" value=\"Generate token\">\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\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 margin-top: .15em;\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\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\n textarea {\n height: 10em;\n margin-top: 1em;\n border-radius: 1em;\n }\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\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=5f9053de\"\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=5f9053de&lang=scss\"\nscript.render = render\n\nexport default script","<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\n <input type=\"submit\" value=\"Create User\" :disabled=\"commandRunning\">\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 <input type=\"submit\" value=\"Change Password\" :disabled=\"commandRunning\">\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-cog\">\n <DropdownItem text=\"Change Password\" :disabled=\"commandRunning\" icon-class=\"fa fa-key\"\n @click=\"selectedUser = user.username; $refs.changePasswordModal.show()\" />\n <DropdownItem text=\"Delete User\" :disabled=\"commandRunning\" icon-class=\"fa fa-trash\"\n @click=\"deleteUser(user)\" />\n </Dropdown>\n </div>\n </li>\n </ul>\n </div>\n</template>\n\n<script>\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\";\n\nexport default {\n name: \"Users\",\n components: {DropdownItem, Loading, Modal, Dropdown},\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 // onTokenFocus(event) {\n // event.target.select()\n // this.document.execCommand('copy')\n // event.target.setAttribute('disabled', true)\n //\n // this.notify({\n // text: 'Token copied to the clipboard',\n // image: {\n // iconClass: 'fas fa-copy',\n // },\n // })\n // },\n //\n // onTokenBlur(event) {\n // event.target.select()\n // this.document.execCommand('copy')\n // event.target.removeAttribute('disabled')\n //\n // this.notify({\n // text: 'Token copied to clipboard',\n // image: {\n // iconClass: 'fas fa-copy',\n // },\n // })\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 if (!confirm('Are you sure that you want to remove the user ' + user.username + '?'))\n return\n\n this.commandRunning = true\n try {\n await this.request('user.delete_user', {\n username: user.username,\n session_token: this.sessionToken,\n })\n } finally {\n this.commandRunning = false\n }\n\n this.notify({\n text: 'User ' + user.username + ' removed',\n image: {\n iconClass: 'fas fa-check',\n },\n })\n\n await this.refresh()\n },\n },\n\n mounted() {\n this.refresh()\n },\n}\n</script>\n\n<style lang=\"scss\">\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 .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 box-shadow: $border-shadow-bottom;\n\n &:hover {\n background: $hover-bg;\n }\n\n .actions {\n display: inline-flex;\n justify-content: right;\n\n button {\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: 1em;\n }\n }\n }\n}\n</style>\n","import { render } from \"./Users.vue?vue&type=template&id=2153f27b\"\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=2153f27b&lang=scss\"\nscript.render = render\n\nexport default script","import { render } from \"./Index.vue?vue&type=template&id=d5c06b82\"\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=d5c06b82&lang=scss\"\nscript.render = render\n\nexport default script","<template>\n <div class=\"modal-container fade-in\" :id=\"id\" :class=\"{hidden: !isVisible}\" :style=\"{'--z-index': zIndex}\" @click=\"close\">\n <div class=\"modal\">\n <div class=\"content\" :style=\"{'--width': width, '--height': height}\" @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 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\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 this.$watch(() => this.visible, visibleHndl)\n this.$watch(() => this.isVisible, visibleHndl)\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 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 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=010fadd6&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=010fadd6&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-010fadd6\"\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!./Dashboard.vue?vue&type=style&index=0&id=5c64bb76&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Index.vue?vue&type=style&index=0&id=d5c06b82&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!./Dropdown.vue?vue&type=style&index=0&id=00fa59b4&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!./Plugin.vue?vue&type=style&index=0&id=67571c94&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&id=d32baf50&lang=scss\"","<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 type: String,\n default: 'fa fa-ellipsis-h',\n },\n\n text: {\n type: String,\n },\n\n title: {\n type: String,\n },\n },\n\n data() {\n return {\n visible: false,\n }\n },\n\n methods: {\n documentClickHndl(event) {\n if (!this.visible)\n return\n\n let element = event.target\n while (element) {\n if (!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}\n</script>\n\n<style lang=\"scss\" scoped>\n.dropdown-container {\n position: relative;\n display: flex;\n flex-direction: column;\n\n .dropdown {\n position: absolute;\n width: max-content;\n background: $dropdown-bg;\n border-radius: .25em;\n border: $default-border-3;\n box-shadow: $dropdown-shadow;\n display: flex;\n flex-direction: column;\n z-index: 1;\n }\n}\n</style>\n","import { render } from \"./Dropdown.vue?vue&type=template&id=00fa59b4&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=00fa59b4&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-00fa59b4\"\n\nexport default script","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&id=5ec69f95&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!./Users.vue?vue&type=style&index=0&id=2153f27b&lang=scss\"","var map = {\n\t\"./Calendar/Index\": [\n\t\t\"3c97\",\n\t\t\"chunk-09eaa919\"\n\t],\n\t\"./Camera/Index\": [\n\t\t\"9b92\",\n\t\t\"chunk-5d73ace1\"\n\t],\n\t\"./Component/Index\": [\n\t\t\"9b3c\",\n\t\t\"chunk-06539e5d\",\n\t\t\"chunk-6ee47cbe\",\n\t\t\"chunk-49f94906\"\n\t],\n\t\"./DateTime/Index\": [\n\t\t\"365a\",\n\t\t\"chunk-01c1b3b0\"\n\t],\n\t\"./DateTimeWeather/Index\": [\n\t\t\"3737\",\n\t\t\"chunk-1b24f8bf\",\n\t\t\"chunk-01c1b3b0\",\n\t\t\"chunk-b6886800\"\n\t],\n\t\"./ImageCarousel/Index\": [\n\t\t\"c845\",\n\t\t\"chunk-1b24f8bf\",\n\t\t\"chunk-01c1b3b0\",\n\t\t\"chunk-44b22f6e\"\n\t],\n\t\"./Music/Index\": [\n\t\t\"bcf7\",\n\t\t\"chunk-da0a28d2\"\n\t],\n\t\"./Plugin/Index\": [\n\t\t\"dabe\",\n\t\t\"chunk-d8561e02\"\n\t],\n\t\"./RssNews/Index\": [\n\t\t\"c306\",\n\t\t\"chunk-55f142bc\"\n\t],\n\t\"./Weather/Index\": [\n\t\t\"5b43\",\n\t\t\"chunk-1b24f8bf\"\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--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&id=618fbb8c&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!./VoiceAssistant.vue?vue&type=style&index=0&id=3f009270&lang=scss\"","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!./Plugin.vue?vue&type=style&index=1&id=67571c94&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!./Widget.vue?vue&type=style&index=0&id=5df52982&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&id=5c64bb76&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!./Panel.vue?vue&type=style&index=0&id=5ec69f95&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!./DropdownItem.vue?vue&type=style&index=0&id=e44d79c8&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!./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":""}