platypush/platypush/backend/http/webapp/dist/static/js/7503.c8252b66.js.map

1 line
62 KiB
Plaintext

{"version":3,"file":"static/js/7503.c8252b66.js","mappings":"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kBAAmB,CAClB,KACA,EACA,KACA,KACA,MAED,sBAAuB,CACtB,KACA,EACA,KACA,KACA,MAED,WAAY,CACX,KACA,EACA,KACA,KACA,MAED,eAAgB,CACf,KACA,EACA,KACA,KACA,MAED,iBAAkB,CACjB,KACA,EACA,KACA,KACA,MAED,qBAAsB,CACrB,KACA,EACA,KACA,KACA,MAED,WAAY,CACX,KACA,GAED,eAAgB,CACf,KACA,GAED,eAAgB,CACf,KACA,EACA,KACA,MAED,mBAAoB,CACnB,KACA,EACA,KACA,MAED,gBAAiB,CAChB,KACA,GAED,oBAAqB,CACpB,KACA,GAED,eAAgB,CACf,KACA,EACA,KACA,KACA,MAED,mBAAoB,CACnB,KACA,EACA,KACA,KACA,MAED,eAAgB,CACf,IACA,EACA,KACA,KAED,mBAAoB,CACnB,IACA,EACA,KACA,KAED,mBAAoB,CACnB,KACA,EACA,KACA,KACA,MAED,uBAAwB,CACvB,KACA,EACA,KACA,KACA,MAED,UAAW,CACV,KACA,GAED,cAAe,CACd,KACA,GAED,UAAW,CACV,KACA,EACA,KACA,KACA,KACA,MAED,cAAe,CACd,KACA,EACA,KACA,KACA,KACA,MAED,gBAAiB,CAChB,KACA,EACA,KACA,MAED,oBAAqB,CACpB,KACA,EACA,KACA,MAED,UAAW,CACV,KACA,GAED,cAAe,CACd,KACA,GAED,kBAAmB,CAClB,KACA,EACA,KACA,KACA,MAED,sBAAuB,CACtB,KACA,EACA,KACA,KACA,MAED,gBAAiB,CAChB,KACA,EACA,KACA,KACA,MAED,oBAAqB,CACpB,KACA,EACA,KACA,KACA,MAED,cAAe,CACd,KACA,EACA,KACA,KACA,MAED,kBAAmB,CAClB,KACA,EACA,KACA,KACA,MAED,aAAc,CACb,KACA,GAED,iBAAkB,CACjB,KACA,GAED,WAAY,CACX,KACA,EACA,KACA,KACA,MAED,eAAgB,CACf,KACA,EACA,KACA,KACA,MAED,WAAY,CACX,KACA,EACA,KACA,KACA,MAED,eAAgB,CACf,KACA,EACA,KACA,KACA,MAED,sBAAuB,CACtB,KACA,EACA,KACA,KACA,MAED,0BAA2B,CAC1B,KACA,EACA,KACA,KACA,MAED,kBAAmB,CAClB,KACA,EACA,KACA,KACA,MAED,sBAAuB,CACtB,KACA,EACA,KACA,KACA,MAED,gBAAiB,CAChB,GACA,EACA,KACA,IAED,SAAU,CACT,KACA,GAED,cAAe,CACd,KACA,GAED,cAAe,CACd,KACA,EACA,KACA,OAGF,SAASyJ,EAAoB1B,GAC5B,IAAI2B,EAAoBC,EAAE3J,EAAK+H,GAC9B,OAAO6B,QAAQC,UAAUC,MAAK,WAC7B,IAAI1F,EAAI,IAAI2F,MAAM,uBAAyBhC,EAAM,KAEjD,MADA3D,EAAE4F,KAAO,mBACH5F,CACP,IAGD,IAAI6F,EAAMjK,EAAI+H,GAAMpF,EAAKsH,EAAI,GAC7B,OAAOL,QAAQM,IAAID,EAAI9J,MAAM,GAAGH,IAAI0J,EAAoBtF,IAAI0F,MAAK,WAChE,OAAOJ,EAAoBzJ,EAAE0C,EAAa,GAATsH,EAAI,GACtC,GACD,CACAR,EAAoBzH,KAAO,WAAa,OAAOhB,OAAOgB,KAAKhC,EAAM,EACjEyJ,EAAoB9G,GAAK,KACzBwH,EAAOC,QAAUX,C","sources":["webpack://platypush/./src/components/panels/Entities/Entity.vue","webpack://platypush/./src/components/panels/Entities/Entity.vue?6f8a","webpack://platypush/./src/components/panels/Entities/EntityMixin.vue","webpack://platypush/./src/components/panels/Entities/EntityMixin.vue?a9b3","webpack://platypush/./src/components/panels/Entities/Index.vue","webpack://platypush/./src/components/elements/NoItems.vue","webpack://platypush/./src/components/elements/NoItems.vue?70de","webpack://platypush/./src/components/panels/Entities/Index.vue?4523","webpack://platypush/./src/components/panels/Entities/Modal.vue","webpack://platypush/./src/components/elements/ConfirmDialog.vue","webpack://platypush/./src/components/elements/ConfirmDialog.vue?f384","webpack://platypush/./src/components/elements/EditButton.vue","webpack://platypush/./src/components/elements/EditButton.vue?fb20","webpack://platypush/./src/components/elements/NameEditor.vue","webpack://platypush/./src/components/elements/NameEditor.vue?34cf","webpack://platypush/./src/components/panels/Entities/Modal.vue?d45a","webpack://platypush/./src/components/panels/Entities/Selector.vue","webpack://platypush/./src/components/panels/Entities/Selector.vue?bf8b","webpack://platypush/./src/components/panels/Entities|lazy|/^\\.\\/.*$/|groupOptions: {}|namespace object"],"sourcesContent":["<template>\n <div class=\"row item entity-container\" :class=\"{blink: justUpdated}\">\n <component :is=\"component\"\n :value=\"value\"\n :loading=\"loading\"\n :error=\"error || value?.reachable == false\"\n @input=\"$emit('input', $event)\"\n @loading=\"$emit('loading', $event)\"\n />\n </div>\n</template>\n\n<script>\nimport { defineAsyncComponent } from 'vue'\nimport EntityMixin from \"./EntityMixin\"\n\nexport default {\n name: \"Entity\",\n mixins: [EntityMixin],\n emits: ['input', 'loading'],\n\n data() {\n return {\n component: null,\n justUpdated: false,\n }\n },\n\n methods: {\n valuesEqual(a, b) {\n a = {...a}\n b = {...b}\n for (const key of ['updated_at', 'data']) {\n delete a[key]\n delete b[key]\n }\n\n return this.objectsEqual(a, b)\n },\n },\n\n mounted() {\n if (this.type !== 'Entity') {\n const type = this.type.split('_').map((t) =>\n t[0].toUpperCase() + t.slice(1)\n ).join('')\n\n this.$watch(\n () => this.value,\n (newValue, oldValue) => {\n if (this.valuesEqual(oldValue, newValue))\n return false\n\n this.justUpdated = true\n const self = this;\n setTimeout(() => self.justUpdated = false, 1000)\n }\n )\n\n this.component = defineAsyncComponent(\n () => import(`@/components/panels/Entities/${type}`)\n )\n }\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"common\";\n\n.entity-container {\n width: 100%;\n position: relative;\n padding: 0 !important;\n}\n\n.blink {\n animation: blink-animation 1s steps(20, start);\n}\n\n@keyframes blink-animation {\n 0% {\n background: initial\n }\n\n 50% {\n background: $active-bg;\n }\n\n 100% {\n background: initial\n }\n}\n</style>\n","import { render } from \"./Entity.vue?vue&type=template&id=2cf6329b&scoped=true\"\nimport script from \"./Entity.vue?vue&type=script&lang=js\"\nexport * from \"./Entity.vue?vue&type=script&lang=js\"\n\nimport \"./Entity.vue?vue&type=style&index=0&id=2cf6329b&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-2cf6329b\"]])\n\nexport default __exports__","<script>\nimport Utils from \"@/Utils\"\n\nexport default {\n name: \"EntityMixin\",\n mixins: [Utils],\n emits: ['input'],\n props: {\n loading: {\n type: Boolean,\n default: false,\n },\n\n error: {\n type: Boolean,\n default: false,\n },\n\n value: {\n type: Object,\n required: true,\n },\n },\n\n data() {\n return {\n modalVisible: false,\n }\n },\n\n computed: {\n type() {\n let entityType = (this.value.type || '')\n return entityType.split('_').\n map((s) => s.charAt(0).toUpperCase() + s.slice(1)).join('')\n },\n },\n}\n</script>\n","import script from \"./EntityMixin.vue?vue&type=script&lang=js\"\nexport * from \"./EntityMixin.vue?vue&type=script&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__","<template>\n <div class=\"row plugin entities-container\">\n <Loading v-if=\"loading\" />\n\n <header>\n <div class=\"col-11 left\">\n <Selector :entity-groups=\"entityGroups\" :value=\"selector\" @input=\"selector = $event\" />\n </div>\n\n <div class=\"col-1 right\">\n <button title=\"Refresh\" @click=\"refresh(null)\">\n <i class=\"fa fa-sync-alt\" />\n </button>\n </div>\n </header>\n\n <div class=\"groups-canvas\">\n <EntityModal :entity=\"entities[modalEntityId]\"\n :visible=\"modalVisible\" @close=\"onEntityModal(null)\"\n v-if=\"modalEntityId\"\n />\n\n <NoItems v-if=\"!Object.keys(displayGroups || {})?.length\">No entities found</NoItems>\n\n <div class=\"groups-container\" v-else>\n <div class=\"group fade-in\" v-for=\"group in displayGroups\" :key=\"group.name\">\n <div class=\"frame\">\n <div class=\"header\">\n <span class=\"section left\">\n <Icon v-bind=\"entitiesMeta[typesByCategory[group.name]].icon || {}\"\n v-if=\"selector.grouping === 'category' && entitiesMeta[typesByCategory[group.name]]\" />\n <Icon :class=\"pluginIcons[group.name]?.class\" :url=\"pluginIcons[group.name]?.imgUrl\"\n v-else-if=\"selector.grouping === 'plugin' && pluginIcons[group.name]\" />\n </span>\n\n <span class=\"section center\">\n <div class=\"title\" v-text=\"group.name\" />\n </span>\n\n <span class=\"section right\">\n <button title=\"Refresh\" @click=\"refresh(group)\">\n <i class=\"fa fa-sync-alt\" />\n </button>\n </span>\n </div>\n\n <div class=\"body\">\n <div class=\"entity-frame\" @click=\"onEntityModal(entity.id)\"\n v-for=\"entity in group.entities\" :key=\"entity.id\">\n <Entity\n :value=\"entity\"\n @input=\"onEntityInput\"\n :error=\"!!errorEntities[entity.id]\"\n :loading=\"!!loadingEntities[entity.id]\"\n @loading=\"loadingEntities[entity.id] = $event\"\n />\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport Utils from \"@/Utils\"\nimport Loading from \"@/components/Loading\";\nimport Icon from \"@/components/elements/Icon\";\nimport NoItems from \"@/components/elements/NoItems\";\nimport Entity from \"./Entity.vue\";\nimport Selector from \"./Selector.vue\";\nimport EntityModal from \"./Modal\"\nimport icons from '@/assets/icons.json'\nimport meta from './meta.json'\n\nexport default {\n name: \"Entities\",\n components: {Loading, Icon, Entity, Selector, NoItems, EntityModal},\n mixins: [Utils],\n\n props: {\n // Entity scan timeout in seconds\n entityScanTimeout: {\n type: Number,\n default: 30,\n },\n },\n\n data() {\n return {\n loading: false,\n loadingEntities: {},\n errorEntities: {},\n entityTimeouts: {},\n entities: {},\n modalEntityId: null,\n modalVisible: false,\n selector: {\n grouping: 'category',\n selectedEntities: {},\n },\n }\n },\n\n computed: {\n entitiesMeta() {\n return meta\n },\n\n pluginIcons() {\n return icons\n },\n\n entityTypes() {\n return this.groupEntities('type')\n },\n\n typesByCategory() {\n return Object.entries(meta).reduce((obj, [type, meta]) => {\n obj[meta.name_plural] = type\n return obj\n }, {})\n },\n\n entityGroups() {\n return {\n 'id': Object.entries(this.groupEntities('id')).reduce((obj, [id, entities]) => {\n obj[id] = entities[0]\n return obj\n }, {}),\n 'category': this.groupEntities('category'),\n 'plugin': this.groupEntities('plugin'),\n }\n },\n\n displayGroups() {\n return Object.entries(this.entityGroups[this.selector.grouping]).filter(\n (entry) => entry[1].filter(\n (e) => !!this.selector.selectedEntities[e.id]\n ).length > 0\n ).sort((a, b) => a[0].localeCompare(b[0])).map(\n ([grouping, entities]) => {\n return {\n name: grouping,\n entities: entities.filter(\n (e) => e.id in this.selector.selectedEntities\n ),\n }\n }\n )\n },\n },\n\n methods: {\n groupEntities(attr) {\n return Object.values(this.entities).reduce((obj, entity) => {\n const entities = obj[entity[attr]] || {}\n entities[entity.id] = entity\n\n obj[entity[attr]] = Object.values(entities).sort((a, b) => {\n return a.name.localeCompare(b.name)\n })\n\n return obj\n }, {})\n },\n\n async refresh(group) {\n const entities = (group ? group.entities : this.entities) || {}\n const args = {}\n if (group)\n args.plugins = Object.keys(entities.reduce((obj, entity) => {\n obj[entity.plugin] = true\n return obj\n }, {}))\n\n this.loadingEntities = Object.values(entities).reduce((obj, entity) => {\n if (entity.is_query_disabled || entity.is_write_only)\n return obj\n\n const self = this\n const id = entity.id\n if (this.entityTimeouts[id])\n clearTimeout(this.entityTimeouts[id])\n\n this.entityTimeouts[id] = setTimeout(() => {\n if (self.loadingEntities[id])\n delete self.loadingEntities[id]\n if (self.entityTimeouts[id])\n delete self.entityTimeouts[id]\n\n self.errorEntities[id] = entity\n console.warn(`Scan timeout for ${entity.name}`)\n }, this.entityScanTimeout * 1000)\n\n obj[id] = true\n return obj\n }, {})\n\n await this.request('entities.scan', args)\n },\n\n async sync() {\n this.loading = true\n\n try {\n this.entities = (await this.request('entities.get')).reduce((obj, entity) => {\n entity.name = entity?.meta?.name_override || entity.name\n entity.category = meta[entity.type].name_plural\n entity.meta = {\n ...(meta[entity.type] || {}),\n ...(entity.meta || {}),\n }\n\n obj[entity.id] = entity\n return obj\n }, {})\n\n this.selector.selectedEntities = this.entityGroups.id\n } finally {\n this.loading = false\n }\n },\n\n clearEntityTimeouts(entityId) {\n if (this.errorEntities[entityId])\n delete this.errorEntities[entityId]\n if (this.loadingEntities[entityId])\n delete this.loadingEntities[entityId]\n if (this.entityTimeouts[entityId]) {\n clearTimeout(this.entityTimeouts[entityId])\n delete this.entityTimeouts[entityId]\n }\n },\n\n onEntityInput(entity) {\n entity.category = meta[entity.type].name_plural\n this.entities[entity.id] = entity\n this.clearEntityTimeouts(entity.id)\n if (this.loadingEntities[entity.id])\n delete this.loadingEntities[entity.id]\n },\n\n onEntityUpdate(event) {\n const entityId = event.entity.id\n if (entityId == null)\n return\n\n this.clearEntityTimeouts(entityId)\n const entity = {...event.entity}\n if (event.entity?.state == null)\n entity.state = this.entities[entityId]?.state\n if (entity.meta?.name_override?.length)\n entity.name = entity.meta.name_override\n else if (this.entities[entityId]?.meta?.name_override?.length)\n entity.name = this.entities[entityId].meta.name_override\n else\n entity.name = event.entity?.name || this.entities[entityId]?.name\n\n entity.category = meta[entity.type].name_plural\n entity.meta = {\n ...(meta[event.entity.type] || {}),\n ...(this.entities[entityId]?.meta || {}),\n ...(event.entity?.meta || {}),\n }\n\n this.entities[entityId] = entity\n },\n\n onEntityDelete(event) {\n const entityId = event.entity?.id\n if (entityId == null)\n return\n if (entityId === this.modalEntityId)\n this.modalEntityId = null\n if (this.entities[entityId])\n delete this.entities[entityId]\n },\n\n onEntityModal(entityId) {\n if (entityId) {\n this.modalEntityId = entityId\n this.modalVisible = true\n } else {\n this.modalEntityId = null\n this.modalVisible = false\n }\n },\n },\n\n async mounted() {\n this.subscribe(\n this.onEntityUpdate,\n 'on-entity-update',\n 'platypush.message.event.entities.EntityUpdateEvent'\n )\n\n this.subscribe(\n this.onEntityDelete,\n 'on-entity-delete',\n 'platypush.message.event.entities.EntityDeleteEvent'\n )\n\n await this.sync()\n await this.refresh()\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"vars\";\n@import \"~@/style/items\";\n\n.entities-container {\n --groups-per-row: 1;\n\n @include from($desktop) {\n --groups-per-row: 2;\n }\n\n @include from($fullhd) {\n --groups-per-row: 3;\n }\n\n width: 100%;\n height: 100%;\n overflow: auto;\n color: $default-fg-2;\n font-weight: 400;\n\n button {\n background: #ffffff00;\n border: 0;\n\n &:hover {\n color: $default-hover-fg;\n }\n }\n\n header {\n width: calc(100% - 2px);\n height: $selector-height;\n display: flex;\n background: $default-bg-2;\n margin-left: 2px;\n box-shadow: $border-shadow-bottom;\n position: relative;\n z-index: 1;\n\n .right {\n position: absolute;\n right: 0;\n text-align: right;\n margin-right: 0.5em;\n padding-right: 0.5em;\n\n button {\n padding: 0.5em 0;\n }\n }\n }\n\n .groups-canvas {\n width: 100%;\n height: calc(100% - #{$selector-height});\n overflow: auto;\n\n @include until($tablet) {\n padding: 0.5em;\n }\n }\n\n .groups-container {\n @include from($desktop) {\n column-count: var(--groups-per-row);\n }\n }\n\n .group {\n width: 100%;\n max-height: 100%;\n position: relative;\n padding: $main-margin 0;\n display: flex;\n break-inside: avoid;\n\n @include from ($tablet) {\n padding: $main-margin;\n }\n\n .frame {\n @include from($desktop) {\n max-height: calc(100vh - #{$header-height} - #{$main-margin});\n }\n\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n position: relative;\n box-shadow: $group-shadow;\n border-radius: 1em;\n }\n\n .header {\n width: 100%;\n height: $header-height;\n display: table;\n background: $header-bg;\n box-shadow: $header-shadow;\n border-radius: 1em 1em 0 0;\n\n .section {\n height: 100%;\n display: table-cell;\n vertical-align: middle;\n\n &.left, &.right {\n width: 10%;\n }\n\n &.right {\n text-align: right;\n }\n\n &.center {\n width: 80%;\n text-align: center;\n }\n }\n }\n\n .body {\n background: $default-bg-2;\n max-height: calc(100% - #{$header-height});\n overflow: auto;\n flex-grow: 1;\n\n .entity-frame:last-child {\n border-radius: 0 0 1em 1em;\n }\n }\n }\n\n :deep(.modal) {\n @include until($tablet) {\n width: 95%;\n }\n\n .content {\n @include until($tablet) {\n width: 100%;\n }\n\n @include from($tablet) {\n min-width: 30em;\n }\n\n .body {\n padding: 0;\n\n .table-row {\n padding: 0.5em;\n }\n }\n }\n }\n}\n</style>\n","<template>\n<div class=\"no-items-container\">\n <div class=\"no-items fade-in\">\n <slot />\n </div>\n</div>\n</template>\n\n<script>\nexport default {\n name: \"NoItems\",\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.no-items-container {\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n\n .no-items {\n min-width: 100%;\n max-width: 100%;\n\n @include from($tablet) {\n min-width: 80%;\n }\n\n @include from($desktop) {\n min-width: 50%;\n max-width: 35em;\n }\n\n @include from($fullhd) {\n min-width: 33%;\n }\n\n background: $background-color;\n margin: 1em;\n padding: 1em;\n font-size: 1.5em;\n color: $no-items-color;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 1em;\n box-shadow: $border-shadow-bottom;\n }\n}\n</style>\n","import { render } from \"./NoItems.vue?vue&type=template&id=6fec32b5&scoped=true\"\nimport script from \"./NoItems.vue?vue&type=script&lang=js\"\nexport * from \"./NoItems.vue?vue&type=script&lang=js\"\n\nimport \"./NoItems.vue?vue&type=style&index=0&id=6fec32b5&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-6fec32b5\"]])\n\nexport default __exports__","import { render } from \"./Index.vue?vue&type=template&id=1b44ed5e&scoped=true\"\nimport script from \"./Index.vue?vue&type=script&lang=js\"\nexport * from \"./Index.vue?vue&type=script&lang=js\"\n\nimport \"./Index.vue?vue&type=style&index=0&id=1b44ed5e&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-1b44ed5e\"]])\n\nexport default __exports__","<template>\n <Modal :visible=\"visible\" class=\"entity-modal\" :title=\"entity.name || entity.external_id\">\n <ConfirmDialog ref=\"deleteConfirmDiag\" title=\"Confirm entity deletion\" @input=\"onDelete\">\n Are you <b>sure</b> that you want to delete this entity? <br/><br/>\n Note: you should only delete an entity if its plugin has been disabled\n or the entity is no longer reachable.<br/><br/>\n Otherwise, the entity will simply be created again upon the next scan.\n </ConfirmDialog>\n\n <div class=\"table-row\">\n <div class=\"title\">\n Name\n <EditButton @click=\"editName = true\" v-if=\"!editName\" />\n </div>\n <div class=\"value\">\n <NameEditor :value=\"entity.name\" @input=\"onRename\"\n @cancel=\"editName = false\" :disabled=\"loading\" v-if=\"editName\" />\n <span v-text=\"entity.name\" v-else />\n </div>\n </div>\n\n <div class=\"table-row\">\n <div class=\"title\">\n Icon\n <EditButton @click=\"editIcon = true\" v-if=\"!editIcon\" />\n </div>\n <div class=\"value icon-canvas\">\n <span class=\"icon-editor\" v-if=\"editIcon\">\n <NameEditor :value=\"entity.meta?.icon?.class || entity.meta?.icon?.url\" @input=\"onIconEdit\"\n @cancel=\"editIcon = false\" :disabled=\"loading\">\n <button type=\"button\" title=\"Reset\" @click=\"onIconEdit(null)\"\n @touch=\"onIconEdit(null)\">\n <i class=\"fas fa-rotate-left\" />\n </button>\n </NameEditor>\n <span class=\"help\">\n Supported: image URLs or\n <a href=\"https://fontawesome.com/icons\" target=\"_blank\">FontAwesome icon classes</a>.\n </span>\n </span>\n\n <Icon v-bind=\"entity?.meta?.icon || {}\" v-else />\n </div>\n </div>\n\n <div class=\"table-row\">\n <div class=\"title\">\n Icon color\n </div>\n <div class=\"value icon-color-picker\">\n <input type=\"color\" :value=\"entity.meta?.icon?.color\" @change=\"onIconColorEdit\">\n <button type=\"button\" title=\"Reset\" @click=\"onIconColorEdit(null)\"\n @touch=\"onIconColorEdit(null)\">\n <i class=\"fas fa-rotate-left\" />\n </button>\n </div>\n </div>\n\n <div class=\"table-row\">\n <div class=\"title\">Plugin</div>\n <div class=\"value\" v-text=\"entity.plugin\" />\n </div>\n\n <div class=\"table-row\">\n <div class=\"title\">Internal ID</div>\n <div class=\"value\" v-text=\"entity.id\" />\n </div>\n\n <div class=\"table-row\" v-if=\"entity.external_id\">\n <div class=\"title\">External ID</div>\n <div class=\"value\" v-text=\"entity.external_id\" />\n </div>\n\n <div class=\"table-row\" v-if=\"entity.description\">\n <div class=\"title\">Description</div>\n <div class=\"value\" v-text=\"entity.description\" />\n </div>\n\n <div v-for=\"value, attr in entity.data || {}\" :key=\"attr\">\n <div class=\"table-row\" v-if=\"value != null\">\n <div class=\"title\" v-text=\"prettify(attr)\" />\n <div class=\"value\" v-text=\"'' + value\" />\n </div>\n </div>\n\n <div class=\"table-row\" v-if=\"entity.created_at\">\n <div class=\"title\">Created at</div>\n <div class=\"value\" v-text=\"formatDateTime(entity.created_at)\" />\n </div>\n\n <div class=\"table-row\" v-if=\"entity.updated_at\">\n <div class=\"title\">Updated at</div>\n <div class=\"value\" v-text=\"formatDateTime(entity.updated_at)\" />\n </div>\n\n <div class=\"table-row delete-entity-container\">\n <div class=\"title\">Delete Entity</div>\n <div class=\"value\">\n <button @click=\"$refs.deleteConfirmDiag.show()\">\n <i class=\"fas fa-trash\" />\n </button>\n </div>\n </div>\n </Modal>\n</template>\n\n<script>\nimport Modal from \"@/components/Modal\";\nimport Icon from \"@/components/elements/Icon\";\nimport ConfirmDialog from \"@/components/elements/ConfirmDialog\";\nimport EditButton from \"@/components/elements/EditButton\";\nimport NameEditor from \"@/components/elements/NameEditor\";\nimport Utils from \"@/Utils\";\nimport meta from './meta.json'\n\nexport default {\n name: \"Entity\",\n components: {Modal, EditButton, NameEditor, Icon, ConfirmDialog},\n mixins: [Utils],\n emits: ['input', 'loading'],\n props: {\n entity: {\n type: Object,\n required: true,\n },\n\n visible: {\n type: Boolean,\n default: false,\n },\n },\n\n data() {\n return {\n loading: false,\n editName: false,\n editIcon: false,\n }\n },\n\n methods: {\n async onRename(newName) {\n this.loading = true\n\n try {\n const req = {}\n req[this.entity.id] = newName\n await this.request('entities.rename', req)\n } finally {\n this.loading = false\n this.editName = false\n }\n },\n\n async onDelete() {\n this.loading = true\n\n try {\n await this.request('entities.delete', [this.entity.id])\n } finally {\n this.loading = false\n }\n },\n\n async onIconEdit(newIcon) {\n this.loading = true\n\n try {\n const icon = {url: null, class: null}\n if (newIcon?.length) {\n if (newIcon.startsWith('http'))\n icon.url = newIcon\n else\n icon.class = newIcon\n } else {\n icon.url = (meta[this.entity.type] || {})?.icon?.url\n icon.class = (meta[this.entity.type] || {})?.icon?.['class']\n }\n\n const req = {}\n req[this.entity.id] = {icon: icon}\n await this.request('entities.set_meta', req)\n } finally {\n this.loading = false\n this.editIcon = false\n }\n },\n\n async onIconColorEdit(event) {\n this.loading = true\n\n try {\n const icon = this.entity.meta?.icon || {}\n if (event)\n icon.color = event.target.value\n else\n icon.color = null\n\n const req = {}\n req[this.entity.id] = {icon: icon}\n await this.request('entities.set_meta', req)\n } finally {\n this.loading = false\n this.editIcon = false\n }\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n:deep(.modal) {\n .body {\n padding: .5em !important;\n\n .table-row {\n box-shadow: none;\n }\n }\n\n .icon-canvas {\n display: inline-flex;\n align-items: center;\n\n @include until($tablet) {\n .icon-container {\n justify-content: left;\n }\n }\n\n @include from($tablet) {\n .icon-container {\n justify-content: right;\n }\n }\n }\n\n .icon-editor {\n display: flex;\n flex-direction: column;\n }\n\n button {\n border: none;\n background: none;\n padding: 0 0.5em;\n }\n\n .help {\n font-size: 0.75em;\n }\n\n .delete-entity-container {\n color: $error-fg;\n button {\n color: $error-fg;\n }\n }\n}\n</style>\n","<template>\n <Modal ref=\"modal\" :title=\"title\">\n <div class=\"dialog-content\">\n <slot />\n </div>\n\n <form class=\"buttons\" @submit.prevent=\"onConfirm\">\n <button type=\"submit\" class=\"ok-btn\" @click=\"onConfirm\" @touch=\"onConfirm\">\n <i class=\"fas fa-check\" /> &nbsp; {{ confirmText }}\n </button>\n <button type=\"button\" class=\"cancel-btn\" @click=\"close\" @touch=\"close\">\n <i class=\"fas fa-xmark\" /> &nbsp; {{ cancelText }}\n </button>\n </form>\n </Modal>\n</template>\n\n<script>\nimport Modal from \"@/components/Modal\";\n\nexport default {\n emits: ['input', 'click', 'touch'],\n components: {Modal},\n props: {\n title: {\n type: String,\n },\n\n confirmText: {\n type: String,\n default: \"OK\",\n },\n\n cancelText: {\n type: String,\n default: \"Cancel\",\n },\n },\n\n methods: {\n onConfirm() {\n this.$emit('input')\n this.close()\n },\n\n show() {\n this.$refs.modal.show()\n },\n\n close() {\n this.$refs.modal.hide()\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n:deep(.modal) {\n .dialog-content {\n padding: 1em;\n }\n\n .buttons {\n display: flex;\n flex-direction: row;\n justify-content: right;\n padding: 1em 0 1em 1em;\n border: 0;\n border-radius: 0;\n box-shadow: 0 -1px 2px 0 $default-shadow-color;\n\n button {\n margin-right: 1em;\n padding: 0.5em 1em;\n border: 1px solid $border-color-2;\n border-radius: 1em;\n\n &:hover {\n background: $hover-bg;\n }\n }\n }\n}\n</style>\n","import { render } from \"./ConfirmDialog.vue?vue&type=template&id=d543b3e4&scoped=true\"\nimport script from \"./ConfirmDialog.vue?vue&type=script&lang=js\"\nexport * from \"./ConfirmDialog.vue?vue&type=script&lang=js\"\n\nimport \"./ConfirmDialog.vue?vue&type=style&index=0&id=d543b3e4&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-d543b3e4\"]])\n\nexport default __exports__","<template>\n <button class=\"edit-btn\"\n @click=\"proxy($event)\" @touch=\"proxy($event)\" @input=\"proxy($event)\"\n >\n <i class=\"fas fa-pen-to-square\" />\n </button>\n</template>\n\n<script>\nexport default {\n emits: ['input', 'click', 'touch'],\n methods: {\n proxy(e) {\n this.$emit(e.type, e)\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.edit-btn {\n border: 0;\n background: none;\n padding: 0 0.25em;\n margin-left: 0.25em;\n border: 1px solid rgba(0, 0, 0, 0);\n\n &:hover {\n background: $hover-bg;\n border: 1px solid $selected-fg;\n }\n}\n</style>\n","import { render } from \"./EditButton.vue?vue&type=template&id=3344f2bf&scoped=true\"\nimport script from \"./EditButton.vue?vue&type=script&lang=js\"\nexport * from \"./EditButton.vue?vue&type=script&lang=js\"\n\nimport \"./EditButton.vue?vue&type=style&index=0&id=3344f2bf&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-3344f2bf\"]])\n\nexport default __exports__","<template>\n <form @submit.prevent=\"submit\" class=\"name-editor\">\n <input type=\"text\" v-model=\"text\" :disabled=\"disabled\">\n <button type=\"submit\">\n <i class=\"fas fa-circle-check\" />\n </button>\n <button class=\"cancel\" @click=\"$emit('cancel')\" @touch=\"$emit('cancel')\">\n <i class=\"fas fa-ban\" />\n </button>\n <slot />\n </form>\n</template>\n\n<script>\nexport default {\n emits: ['input', 'cancel'],\n props: {\n value: {\n type: String,\n },\n\n disabled: {\n type: Boolean,\n deafult: false,\n },\n },\n\n data() {\n return {\n text: null,\n }\n },\n\n methods: {\n proxy(e) {\n this.$emit(e.type, e)\n },\n\n submit() {\n this.$emit('input', this.text)\n return false\n },\n },\n\n mounted() {\n this.text = this.value\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.name-editor {\n background: #00000000;\n display: inline-flex;\n flex-direction: row;\n padding: 0;\n border: 0;\n border-radius: 0;\n box-shadow: none;\n\n button {\n border: none;\n background: none;\n padding: 0 0.5em;\n\n &.confirm {\n color: $selected-fg;\n }\n\n &.cancel {\n color: $error-fg;\n }\n }\n}\n</style>\n","import { render } from \"./NameEditor.vue?vue&type=template&id=1405d90f&scoped=true\"\nimport script from \"./NameEditor.vue?vue&type=script&lang=js\"\nexport * from \"./NameEditor.vue?vue&type=script&lang=js\"\n\nimport \"./NameEditor.vue?vue&type=style&index=0&id=1405d90f&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-1405d90f\"]])\n\nexport default __exports__","import { render } from \"./Modal.vue?vue&type=template&id=628ff73f&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=628ff73f&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-628ff73f\"]])\n\nexport default __exports__","<template>\n <div class=\"entities-selectors-container\">\n <div class=\"selector\">\n <Dropdown title=\"Group by\" icon-class=\"fas fa-object-ungroup\" ref=\"groupingSelector\">\n <DropdownItem v-for=\"g in visibleGroupings\" :key=\"g\" :text=\"prettifyGroupingName(g)\"\n :item-class=\"{selected: value?.grouping === g}\"\n @click=\"onGroupingChanged(g)\" />\n </Dropdown>\n </div>\n\n <div class=\"selector\" :class=\"{active: isGroupFilterActive}\" v-if=\"value?.grouping\">\n <Dropdown title=\"Filter by\" icon-class=\"fas fa-filter\" ref=\"groupSelector\"\n keep-open-on-item-click>\n <DropdownItem v-for=\"g in sortedGroups\" :key=\"g\" :text=\"g\"\n v-bind=\"iconForGroup(g)\" :item-class=\"{selected: !!selectedGroups[g]}\"\n @click.stop=\"toggleGroup(g)\" />\n </Dropdown>\n </div>\n\n <div class=\"selector\" v-if=\"Object.keys(entityGroups.id || {}).length\">\n <input ref=\"search\" type=\"text\" class=\"search-bar\" placeholder=\"🔎\" v-model=\"searchTerm\">\n </div>\n </div>\n</template>\n\n<script>\nimport Utils from '@/Utils'\nimport Dropdown from \"@/components/elements/Dropdown\";\nimport DropdownItem from \"@/components/elements/DropdownItem\";\nimport meta from './meta.json'\nimport pluginIcons from '@/assets/icons.json'\n\nexport default {\n name: \"Selector\",\n emits: ['input'],\n mixins: [Utils],\n components: {Dropdown, DropdownItem},\n props: {\n entityGroups: {\n type: Object,\n required: true,\n },\n\n value: {\n type: Object,\n required: true,\n },\n },\n\n data() {\n return {\n selectedGroups: {},\n searchTerm: '',\n }\n },\n\n computed: {\n visibleGroupings() {\n return Object.keys(this.entityGroups).filter(\n (grouping) => grouping !== 'id'\n )\n },\n\n sortedGroups() {\n return Object.keys(this.entityGroups[this.value?.grouping] || {}).sort()\n },\n\n typesMeta() {\n return meta\n },\n\n isGroupFilterActive() {\n return Object.keys(this.selectedGroups).length !== this.sortedGroups.length\n },\n\n selectedEntities() {\n return Object.values(this.entityGroups.id).filter((entity) => {\n if (!this.selectedGroups[entity[this.value?.grouping]])\n return false\n\n if (this.searchTerm?.length) {\n const searchTerm = this.searchTerm.toLowerCase()\n return (\n ((entity.name || '').toLowerCase()).indexOf(searchTerm) >= 0 ||\n ((entity.plugin || '').toLowerCase()).indexOf(searchTerm) >= 0 ||\n ((entity.external_id || '').toLowerCase()).indexOf(searchTerm) >= 0 ||\n (entity.id || 0).toString() == searchTerm\n )\n }\n\n return true\n }).reduce((obj, entity) => {\n obj[entity.id] = entity\n return obj\n }, {})\n },\n },\n\n methods: {\n prettifyGroupingName(name) {\n if (!name)\n return ''\n\n name = this.prettify(name)\n if (name.endsWith('y'))\n name = name.slice(0, name.length-1) + 'ie'\n\n name += 's'\n return name\n },\n\n iconForGroup(group) {\n if (this.value.grouping === 'plugin' && pluginIcons[group]) {\n const icon = pluginIcons[group]\n return {\n 'icon-class': icon['class']?.length || !icon.imgUrl?.length ?\n icon['class'] : 'fas fa-gears',\n 'icon-url': icon.imgUrl,\n }\n }\n\n return {}\n },\n\n synchronizeSelectedEntities() {\n const value = {...this.value}\n value.selectedEntities = this.selectedEntities\n this.$emit('input', value)\n },\n\n updateSearchTerm() {\n const value = {...this.value}\n value.searchTerm = this.searchTerm\n value.selectedEntities = this.selectedEntities\n this.$emit('input', value)\n },\n\n refreshGroupFilter(reset) {\n if (reset)\n this.selectedGroups = Object.keys(\n this.entityGroups[this.value?.grouping] || {}\n ).reduce(\n (obj, group) => {\n obj[group] = true\n return obj\n }, {}\n )\n else {\n for (const group of Object.keys(this.entityGroups[this.value?.grouping]))\n if (this.selectedGroups[group] == null)\n this.selectedGroups[group] = true\n }\n\n this.synchronizeSelectedEntities()\n },\n\n toggleGroup(group) {\n this.selectedGroups[group] = !this.selectedGroups[group]\n this.synchronizeSelectedEntities()\n },\n\n onGroupingChanged(grouping) {\n if (!this.entityGroups[grouping] || grouping === this.value?.grouping)\n return false\n\n const value = {...this.value}\n value.grouping = grouping\n this.$emit('input', value)\n },\n },\n\n mounted() {\n this.refreshGroupFilter(true)\n this.$watch(() => this.value?.grouping, () => { this.refreshGroupFilter(true) })\n this.$watch(() => this.searchTerm, this.updateSearchTerm)\n this.$watch(() => this.entityGroups, () => { this.refreshGroupFilter(false) })\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.entities-selectors-container {\n width: 100%;\n display: flex;\n align-items: center;\n\n .selector {\n height: 100%;\n display: inline-flex;\n\n &.active {\n :deep(.dropdown-container) {\n button {\n color: $default-hover-fg;\n }\n }\n }\n }\n\n @media (max-width: 330px) {\n .search-bar {\n display: none;\n }\n }\n\n :deep(.dropdown-container) {\n height: 100%;\n display: flex;\n\n button {\n height: 100%;\n background: $default-bg-2;\n border: 0;\n padding: 0.5em;\n\n &:hover {\n color: $default-hover-fg;\n }\n }\n\n .item {\n padding: 0.5em 4em 0.5em 0.5em;\n border: 0;\n box-shadow: none;\n\n .col-1.icon {\n width: 1.5em;\n }\n\n &.selected {\n font-weight: bold;\n background: #ffffff00;\n }\n\n &:hover {\n background: $hover-bg;\n }\n }\n }\n}\n</style>\n","import { render } from \"./Selector.vue?vue&type=template&id=7babaacc&scoped=true\"\nimport script from \"./Selector.vue?vue&type=script&lang=js\"\nexport * from \"./Selector.vue?vue&type=script&lang=js\"\n\nimport \"./Selector.vue?vue&type=style&index=0&id=7babaacc&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-7babaacc\"]])\n\nexport default __exports__","var map = {\n\t\"./Battery\": [\n\t\t8990,\n\t\t9,\n\t\t6869,\n\t\t8990\n\t],\n\t\"./Battery.vue\": [\n\t\t8990,\n\t\t9,\n\t\t6869,\n\t\t8990\n\t],\n\t\"./BinarySensor\": [\n\t\t9496,\n\t\t9,\n\t\t3490,\n\t\t6869,\n\t\t9496\n\t],\n\t\"./BinarySensor.vue\": [\n\t\t9496,\n\t\t9,\n\t\t3490,\n\t\t6869,\n\t\t9496\n\t],\n\t\"./CurrentSensor\": [\n\t\t6856,\n\t\t9,\n\t\t6869,\n\t\t7009,\n\t\t6856\n\t],\n\t\"./CurrentSensor.vue\": [\n\t\t6856,\n\t\t9,\n\t\t6869,\n\t\t7009,\n\t\t6856\n\t],\n\t\"./Dimmer\": [\n\t\t5060,\n\t\t9,\n\t\t7246,\n\t\t6869,\n\t\t5060\n\t],\n\t\"./Dimmer.vue\": [\n\t\t5060,\n\t\t9,\n\t\t7246,\n\t\t6869,\n\t\t5060\n\t],\n\t\"./EnergySensor\": [\n\t\t6856,\n\t\t9,\n\t\t6869,\n\t\t7009,\n\t\t6856\n\t],\n\t\"./EnergySensor.vue\": [\n\t\t6856,\n\t\t9,\n\t\t6869,\n\t\t7009,\n\t\t6856\n\t],\n\t\"./Entity\": [\n\t\t7503,\n\t\t9\n\t],\n\t\"./Entity.vue\": [\n\t\t7503,\n\t\t9\n\t],\n\t\"./EntityIcon\": [\n\t\t3673,\n\t\t9,\n\t\t6869,\n\t\t3673\n\t],\n\t\"./EntityIcon.vue\": [\n\t\t3673,\n\t\t9,\n\t\t6869,\n\t\t3673\n\t],\n\t\"./EntityMixin\": [\n\t\t7909,\n\t\t9\n\t],\n\t\"./EntityMixin.vue\": [\n\t\t7909,\n\t\t9\n\t],\n\t\"./EnumSensor\": [\n\t\t3390,\n\t\t9,\n\t\t6869,\n\t\t7009,\n\t\t3390\n\t],\n\t\"./EnumSensor.vue\": [\n\t\t3390,\n\t\t9,\n\t\t6869,\n\t\t7009,\n\t\t3390\n\t],\n\t\"./EnumSwitch\": [\n\t\t818,\n\t\t9,\n\t\t6869,\n\t\t818\n\t],\n\t\"./EnumSwitch.vue\": [\n\t\t818,\n\t\t9,\n\t\t6869,\n\t\t818\n\t],\n\t\"./HumiditySensor\": [\n\t\t6856,\n\t\t9,\n\t\t6869,\n\t\t7009,\n\t\t6856\n\t],\n\t\"./HumiditySensor.vue\": [\n\t\t6856,\n\t\t9,\n\t\t6869,\n\t\t7009,\n\t\t6856\n\t],\n\t\"./Index\": [\n\t\t1040,\n\t\t9\n\t],\n\t\"./Index.vue\": [\n\t\t1040,\n\t\t9\n\t],\n\t\"./Light\": [\n\t\t1155,\n\t\t9,\n\t\t3490,\n\t\t7246,\n\t\t6869,\n\t\t1155\n\t],\n\t\"./Light.vue\": [\n\t\t1155,\n\t\t9,\n\t\t3490,\n\t\t7246,\n\t\t6869,\n\t\t1155\n\t],\n\t\"./LinkQuality\": [\n\t\t2235,\n\t\t9,\n\t\t6869,\n\t\t2235\n\t],\n\t\"./LinkQuality.vue\": [\n\t\t2235,\n\t\t9,\n\t\t6869,\n\t\t2235\n\t],\n\t\"./Modal\": [\n\t\t6243,\n\t\t9\n\t],\n\t\"./Modal.vue\": [\n\t\t6243,\n\t\t9\n\t],\n\t\"./NumericSensor\": [\n\t\t6856,\n\t\t9,\n\t\t6869,\n\t\t7009,\n\t\t6856\n\t],\n\t\"./NumericSensor.vue\": [\n\t\t6856,\n\t\t9,\n\t\t6869,\n\t\t7009,\n\t\t6856\n\t],\n\t\"./PowerSensor\": [\n\t\t6856,\n\t\t9,\n\t\t6869,\n\t\t7009,\n\t\t6856\n\t],\n\t\"./PowerSensor.vue\": [\n\t\t6856,\n\t\t9,\n\t\t6869,\n\t\t7009,\n\t\t6856\n\t],\n\t\"./RawSensor\": [\n\t\t6856,\n\t\t9,\n\t\t6869,\n\t\t7009,\n\t\t6856\n\t],\n\t\"./RawSensor.vue\": [\n\t\t6856,\n\t\t9,\n\t\t6869,\n\t\t7009,\n\t\t6856\n\t],\n\t\"./Selector\": [\n\t\t6518,\n\t\t9\n\t],\n\t\"./Selector.vue\": [\n\t\t6518,\n\t\t9\n\t],\n\t\"./Sensor\": [\n\t\t6856,\n\t\t9,\n\t\t6869,\n\t\t7009,\n\t\t6856\n\t],\n\t\"./Sensor.vue\": [\n\t\t6856,\n\t\t9,\n\t\t6869,\n\t\t7009,\n\t\t6856\n\t],\n\t\"./Switch\": [\n\t\t4024,\n\t\t9,\n\t\t3490,\n\t\t6869,\n\t\t4024\n\t],\n\t\"./Switch.vue\": [\n\t\t4024,\n\t\t9,\n\t\t3490,\n\t\t6869,\n\t\t4024\n\t],\n\t\"./TemperatureSensor\": [\n\t\t6856,\n\t\t9,\n\t\t6869,\n\t\t7009,\n\t\t6856\n\t],\n\t\"./TemperatureSensor.vue\": [\n\t\t6856,\n\t\t9,\n\t\t6869,\n\t\t7009,\n\t\t6856\n\t],\n\t\"./VoltageSensor\": [\n\t\t6856,\n\t\t9,\n\t\t6869,\n\t\t7009,\n\t\t6856\n\t],\n\t\"./VoltageSensor.vue\": [\n\t\t6856,\n\t\t9,\n\t\t6869,\n\t\t7009,\n\t\t6856\n\t],\n\t\"./common.scss\": [\n\t\t65,\n\t\t9,\n\t\t4981,\n\t\t65\n\t],\n\t\"./meta\": [\n\t\t7369,\n\t\t3\n\t],\n\t\"./meta.json\": [\n\t\t7369,\n\t\t3\n\t],\n\t\"./vars.scss\": [\n\t\t5207,\n\t\t9,\n\t\t4981,\n\t\t5207\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(2).map(__webpack_require__.e)).then(function() {\n\t\treturn __webpack_require__.t(id, ids[1] | 16)\n\t});\n}\nwebpackAsyncContext.keys = function() { return Object.keys(map); };\nwebpackAsyncContext.id = 7243;\nmodule.exports = webpackAsyncContext;"],"names":["class","justUpdated","component","value","loading","error","reachable","$emit","$event","name","mixins","EntityMixin","emits","data","methods","valuesEqual","a","b","key","this","objectsEqual","mounted","type","split","map","t","toUpperCase","slice","join","$watch","newValue","oldValue","self","setTimeout","__exports__","render","Utils","props","Boolean","default","Object","required","modalVisible","computed","entityType","s","charAt","entityGroups","selector","title","refresh","modalEntityId","entity","entities","visible","onEntityModal","keys","displayGroups","length","group","grouping","entitiesMeta","typesByCategory","icon","pluginIcons","url","imgUrl","id","onEntityInput","errorEntities","loadingEntities","components","Loading","Icon","Entity","Selector","NoItems","EntityModal","entityScanTimeout","Number","entityTimeouts","selectedEntities","meta","icons","entityTypes","groupEntities","entries","reduce","obj","name_plural","filter","entry","e","sort","localeCompare","attr","values","async","args","plugins","plugin","is_query_disabled","is_write_only","clearTimeout","console","warn","request","name_override","category","clearEntityTimeouts","entityId","onEntityUpdate","event","state","onEntityDelete","subscribe","sync","href","target","external_id","ref","onDelete","editName","onRename","disabled","editIcon","onIconEdit","color","onIconColorEdit","description","created_at","updated_at","$refs","deleteConfirmDiag","show","onConfirm","confirmText","close","cancelText","Modal","String","modal","hide","proxy","submit","text","deafult","EditButton","NameEditor","ConfirmDialog","newName","req","newIcon","startsWith","visibleGroupings","g","prettifyGroupingName","onGroupingChanged","isGroupFilterActive","sortedGroups","iconForGroup","selectedGroups","toggleGroup","placeholder","searchTerm","Dropdown","DropdownItem","typesMeta","toLowerCase","indexOf","toString","prettify","endsWith","synchronizeSelectedEntities","updateSearchTerm","refreshGroupFilter","reset","webpackAsyncContext","__webpack_require__","o","Promise","resolve","then","Error","code","ids","all","module","exports"],"sourceRoot":""}