platypush/platypush/backend/http/webapp/dist/static/js/4604.ac359b97.js.map

1 line
87 KiB
Plaintext

{"version":3,"file":"static/js/4604.ac359b97.js","mappings":"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","sources":["webpack://platypush/./src/components/panels/Light/color.js","webpack://platypush/./src/components/elements/Slider.vue","webpack://platypush/./src/components/elements/Slider.vue?787f","webpack://platypush/./src/components/elements/ToggleSwitch.vue","webpack://platypush/./src/components/elements/ToggleSwitch.vue?94aa","webpack://platypush/./src/components/panels/ZigbeeMqtt/Index.vue","webpack://platypush/./src/components/panels/ZigbeeMqtt/Device.vue","webpack://platypush/./src/components/panels/ZigbeeMqtt/Device.vue?8b6d","webpack://platypush/./src/components/panels/ZigbeeMqtt/Group.vue","webpack://platypush/./src/components/panels/ZigbeeMqtt/Group.vue?46cd","webpack://platypush/./src/components/panels/ZigbeeMqtt/Index.vue?dac0"],"sourcesContent":["export class ColorConverter {\n constructor(ranges) {\n this.ranges = {\n hue: [0, 360],\n sat: [0, 100],\n bri: [0, 100],\n ct: [154, 500],\n }\n\n if (ranges)\n for (const attr of Object.keys(this.ranges))\n if (ranges[attr])\n this.ranges[attr] = ranges[attr]\n }\n\n normalize(x, xRange, yRange) {\n return yRange[0] + (((x-xRange[0]) * (yRange[1]-yRange[0])) / (xRange[1]-xRange[0]))\n }\n\n hslToRgb(h, s, l) {\n [h, s, l] = [\n this.normalize(h, this.ranges.hue, [0, 360]),\n this.normalize(s, this.ranges.sat, [0, 100]),\n this.normalize(l, this.ranges.bri, [0, 100]),\n ]\n\n l /= 100\n const a = s * Math.min(l, 1 - l) / 100\n const f = n => {\n const k = (n + h / 30) % 12\n const color = l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1)\n return Math.round(255 * color)\n }\n\n return [f(0), f(8), f(4)]\n }\n\n rgbToHsl(r, g, b){\n r /= 255\n g /= 255\n b /= 255;\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if(max === min){\n h = s = 0; // achromatic\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\n switch(max){\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n }\n h /= 6;\n }\n\n return [\n parseInt(this.normalize(h, [0, 1], this.ranges.hue)),\n parseInt(this.normalize(s, [0, 1], this.ranges.sat)),\n parseInt(this.normalize(l, [0, 1], this.ranges.bri)),\n ]\n }\n\n xyToRgb(x, y, brightness) {\n // Set to maximum brightness if no custom value was given (Not the slick ECMAScript 6 way for compatibility reasons)\n if (brightness == null)\n brightness = this.ranges.bri[1];\n\n const z = 1.0 - x - y;\n const Y = (brightness / (this.ranges.bri[1]-1)).toFixed(2);\n const X = (Y / y) * x;\n const Z = (Y / y) * z;\n\n //Convert to RGB using Wide RGB D65 conversion\n let red \t= X * 1.656492 - Y * 0.354851 - Z * 0.255038;\n let green = -X * 0.707196 + Y * 1.655397 + Z * 0.036152;\n let blue \t= X * 0.051713 - Y * 0.121364 + Z * 1.011530;\n\n //If red, green or blue is larger than 1.0 set it back to the maximum of 1.0\n if (red > blue && red > green && red > 1.0) {\n green = green / red;\n blue = blue / red;\n red = 1.0;\n } else if (green > blue && green > red && green > 1.0) {\n red = red / green;\n blue = blue / green;\n green = 1.0;\n } else if (blue > red && blue > green && blue > 1.0) {\n red = red / blue;\n green = green / blue;\n blue = 1.0;\n }\n\n //Reverse gamma correction\n red \t= red <= 0.0031308 ? 12.92 * red : (1.0 + 0.055) * Math.pow(red, (1.0 / 2.4)) - 0.055;\n green \t= green <= 0.0031308 ? 12.92 * green : (1.0 + 0.055) * Math.pow(green, (1.0 / 2.4)) - 0.055;\n blue \t= blue <= 0.0031308 ? 12.92 * blue : (1.0 + 0.055) * Math.pow(blue, (1.0 / 2.4)) - 0.055;\n\n //Convert normalized decimal to decimal\n red \t= Math.round(red * 255);\n green \t= Math.round(green * 255);\n blue \t= Math.round(blue * 255);\n\n if (isNaN(red))\n red = 0;\n if (isNaN(green))\n green = 0;\n if (isNaN(blue))\n blue = 0;\n\n return [red, green, blue].map(\n (c) => Math.min(Math.max(0, c), 255)) // lgtm [js/automatic-semicolon-insertion]\n }\n\n rgbToXY(red, green, blue) {\n if (red > 1) { red /= 255; }\n if (green > 1) { green /= 255; }\n if (blue > 1) { blue /= 255; }\n\n //Apply a gamma correction to the RGB values, which makes the color more vivid and more the like the color displayed on the screen of your device\n red \t= (red > 0.04045) ? Math.pow((red + 0.055) / (1.0 + 0.055), 2.4) : (red / 12.92);\n green \t= (green > 0.04045) ? Math.pow((green + 0.055) / (1.0 + 0.055), 2.4) : (green / 12.92);\n blue \t= (blue > 0.04045) ? Math.pow((blue + 0.055) / (1.0 + 0.055), 2.4) : (blue / 12.92);\n\n //RGB values to XYZ using the Wide RGB D65 conversion formula\n const X \t\t= red * 0.664511 + green * 0.154324 + blue * 0.162028;\n const Y \t\t= red * 0.283881 + green * 0.668433 + blue * 0.047685;\n const Z \t\t= red * 0.000088 + green * 0.072310 + blue * 0.986039;\n\n //Calculate the xy values from the XYZ values\n let x \t\t= parseFloat((X / (X + Y + Z)).toFixed(4));\n let y \t\t= parseFloat((Y / (X + Y + Z)).toFixed(4));\n\n if (isNaN(x))\n x = 0;\n if (isNaN(y))\n y = 0;\n\n return [x, y];\n }\n\n rgbToBri(red, green, blue) {\n return Math.min(2 * this.rgbToHsl(red, green, blue)[2], this.ranges.bri[1])\n }\n\n getRGB(color) {\n if (color.red != null && color.green != null && color.blue != null)\n return [color.red, color.green, color.blue]\n if (color.r != null && color.g != null && color.b != null)\n return [color.r, color.g, color.b]\n if (color.rgb)\n return color.rgb\n }\n\n getXY(color) {\n if (color.x != null && color.y != null)\n return [color.x, color.y]\n if (color.xy)\n return color.xy\n }\n\n toRGB(color) {\n const rgb = this.getRGB(color)\n if (rgb)\n return rgb\n\n const xy = this.getXY(color)\n if (xy && color.bri)\n return this.xyToRgb(...xy, color.bri)\n if (color.hue && color.sat && color.bri)\n return this.hslToRgb(color.hue, color.sat, color.bri)\n\n console.debug('Could not determine color space')\n console.debug(color)\n }\n\n toXY(color) {\n const xy = this.getXY(color)\n if (xy && color.bri)\n return [xy[0], xy[1], color.bri]\n\n const rgb = this.getRGB(color)\n if (rgb)\n return this.rgbToXY(...rgb)\n\n if (color.hue && color.sat && color.bri) {\n const rgb = this.hslToRgb(color.hue, color.sat, color.bri)\n return this.rgbToXY(...rgb)\n }\n\n console.debug('Could not determine color space')\n console.debug(color)\n }\n\n toHSL(color) {\n if (color.hue && color.sat && color.bri)\n return [color.hue, color.sat, color.bri]\n\n const rgb = this.getRGB(color)\n if (rgb)\n return this.rgbToHsl(...rgb)\n\n const xy = this.getXY(color)\n if (xy && color.bri) {\n const rgb = this.xyToRgb(...xy, color.bri)\n return this.rgbToHsl(...rgb)\n }\n\n console.debug('Could not determine color space')\n console.debug(color)\n }\n}\n","<template>\n <label class=\"slider-wrapper\">\n <input class=\"slider\" type=\"range\" ref=\"range\" :min=\"range[0]\" :max=\"range[1]\"\n :step=\"step\" :disabled=\"disabled\" :value=\"value\"\n @input.stop=\"onUpdate\"\n @change.stop=\"onUpdate\"\n @mouseup.stop=\"onUpdate\"\n @mousedown.stop=\"onUpdate\"\n @touchstart.stop=\"onUpdate\"\n @touchend.stop=\"onUpdate\"\n @keyup.stop=\"onUpdate\"\n @keydown.stop=\"onUpdate\">\n\n <div class=\"track\">\n <div class=\"track-inner\" ref=\"track\"></div>\n </div>\n <div class=\"thumb\" ref=\"thumb\"></div>\n <span class=\"label\" v-if=\"withLabel\" v-text=\"value\"></span>\n </label>\n</template>\n\n<script>\nexport default {\n name: \"Slider\",\n emits: ['input', 'change', 'mouseup', 'mousedown', 'touchstart', 'touchend', 'keyup', 'keydown'],\n props: {\n value: {\n type: Number,\n },\n\n disabled: {\n type: Boolean,\n default: false,\n },\n\n range: {\n type: Array,\n default: () => [0, 100],\n },\n\n step: {\n type: Number,\n default: 1,\n },\n\n withLabel: {\n type: Boolean,\n default: false,\n }\n },\n\n methods: {\n onUpdate(event) {\n this.update(event.target.value)\n this.$emit(event.type, {\n ...event,\n target: {\n ...event.target,\n value: this.$refs.range.value,\n }\n })\n },\n\n update(value) {\n const percent = (value * 100) / (this.range[1] - this.range[0])\n this.$refs.thumb.style.left = `${percent}%`\n this.$refs.thumb.style.transform = `translate(-${percent}%, -50%)`\n this.$refs.track.style.width = `${percent}%`\n },\n },\n\n mounted() {\n if (this.value != null)\n this.update(this.value)\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.slider-wrapper {\n width: 100%;\n display: flex;\n position: relative;\n\n .slider {\n width: 100%;\n cursor: pointer;\n opacity: 0;\n\n &::-ms-tooltip {\n display: none;\n }\n }\n\n .track {\n width: 100%;\n height: 0.75em;\n background: $slider-bg;\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n border-radius: 0.5em;\n box-shadow: inset 1px 0px 3px 0 $slider-track-shadow;\n pointer-events: none;\n\n .track-inner {\n width: 0;\n height: 100%;\n background: $slider-progress-bg;\n border-radius: 0.5em 0 0 0.5em;\n }\n }\n\n .thumb {\n width: 1.25em;\n height: 1.25em;\n background: $slider-thumb-bg;\n position: absolute;\n top: 50%;\n left: 0;\n transform: translate(0%, -50%);\n border-radius: 50%;\n box-shadow: 1px 0px 2px 0 $slider-thumb-shadow;\n pointer-events: none;\n }\n\n label {\n position: relative;\n .label {\n font-weight: normal;\n text-align: center;\n }\n }\n}\n</style>\n","import { render } from \"./Slider.vue?vue&type=template&id=288acf82&scoped=true\"\nimport script from \"./Slider.vue?vue&type=script&lang=js\"\nexport * from \"./Slider.vue?vue&type=script&lang=js\"\n\nimport \"./Slider.vue?vue&type=style&index=0&id=288acf82&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-288acf82\"]])\n\nexport default __exports__","<template>\n <div class=\"power-switch\" :class=\"{disabled: disabled}\" @click.stop=\"onInput\">\n <!--suppress HtmlFormInputWithoutLabel -->\n <input type=\"checkbox\" :checked=\"value\">\n <label>\n <!--suppress HtmlUnknownTag -->\n <div class=\"switch\">\n <div class=\"dot\" />\n </div>\n <span class=\"label\">\n <slot />\n </span>\n </label>\n </div>\n</template>\n\n<script>\nexport default {\n name: \"ToggleSwitch\",\n emits: ['input'],\n props: {\n value: {\n type: Boolean,\n default: false,\n },\n\n disabled: {\n type: Boolean,\n default: false,\n },\n },\n\n methods: {\n onInput(event) {\n if (this.disabled)\n return false\n\n this.$emit('input', event)\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.power-switch {\n position: relative;\n transition: transform .3s;\n transform: scale(var(--scale, 1)) translateZ(0);\n\n &:active {\n --scale: .96;\n }\n\n &.disabled {\n opacity: 0.6;\n }\n\n input {\n display: none;\n & + label {\n border-radius: 1em;\n display: block;\n cursor: pointer;\n position: relative;\n transition: box-shadow .4s;\n\n &:before {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n border-radius: inherit;\n background: none;\n opacity: var(--gradient, 0);\n transition: opacity .4s;\n }\n\n .switch {\n position: relative;\n display: inline-block;\n vertical-align: top;\n height: 1.4em;\n width: 2.5em;\n border-radius: 1em;\n background: $slider-bg;\n box-shadow: inset 1px 0px 3px 0 $slider-track-shadow;\n\n &:before {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n border-radius: inherit;\n background: $slider-progress-bg;\n opacity: var(--gradient, 0);\n transition: opacity .4s;\n }\n\n .dot {\n background: $toggle-dot-bg;\n position: absolute;\n width: 1.5em;\n height: 1.5em;\n border-radius: 50%;\n box-shadow: 1px 0px 3.5px 0 $slider-thumb-shadow;\n left: -0.25em;\n top: -0.05em;\n transform: translateX(var(--offset, 0));\n transition: transform .4s, box-shadow .4s;\n\n &:before {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n border-radius: inherit;\n background: $toggle-selected-dot-bg;\n opacity: var(--gradient, 0);\n transition: opacity .4s;\n }\n }\n }\n\n span {\n line-height: 2em;\n font-size: 1.2em;\n color: var(--text, #646B8C);\n font-weight: 500;\n display: inline-block;\n vertical-align: top;\n position: relative;\n margin-left: 0.5em;\n transition: color .4s;\n }\n\n & + span {\n text-align: center;\n display: block;\n position: absolute;\n left: 0;\n right: 0;\n top: 100%;\n opacity: 0;\n font-size: 1em;\n font-weight: 500;\n color: $slider-bg;\n transform: translateY(0.2em);\n transition: opacity .4s, transform .4s;\n }\n }\n\n &:not(:checked) {\n & + label {\n pointer-events: none;\n & + span {\n opacity: 1;\n transform: translateY(0.6em);\n }\n }\n }\n\n &:checked {\n & + label {\n --offset: 1.5em;\n --text: $slider-progress-bg;\n --gradient: 1;\n --shadow: rgba(0, 39, 6, .1);\n }\n }\n }\n}\n</style>\n","import { render } from \"./ToggleSwitch.vue?vue&type=template&id=8e097228&scoped=true\"\nimport script from \"./ToggleSwitch.vue?vue&type=script&lang=js\"\nexport * from \"./ToggleSwitch.vue?vue&type=script&lang=js\"\n\nimport \"./ToggleSwitch.vue?vue&type=style&index=0&id=8e097228&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-8e097228\"]])\n\nexport default __exports__","<template>\n <div class=\"zigbee-container\">\n <Loading v-if=\"loading\" />\n\n <Modal title=\"Network Info\" ref=\"infoModal\">\n <div class=\"info-body\" v-if=\"status.info\">\n <div class=\"row\">\n <div class=\"param-name\">State</div>\n <div class=\"param-value\" v-text=\"status.state\" />\n </div>\n\n <div class=\"row\">\n <div class=\"param-name\">Permit Join</div>\n <div class=\"param-value\" v-text=\"status.info.permit_join\" />\n </div>\n\n <div class=\"row\" v-if=\"status.info.network\">\n <div class=\"param-name\">Network Channel</div>\n <div class=\"param-value\" v-text=\"status.info.network.channel\" />\n </div>\n\n <div class=\"row\">\n <div class=\"param-name\">Zigbee2MQTT Version</div>\n <div class=\"param-value\" v-text=\"status.info.version\" />\n </div>\n\n <div class=\"row\" v-if=\"status.info.config?.mqtt\">\n <div class=\"param-name\">MQTT Server</div>\n <div class=\"param-value\" v-text=\"status.info.config.mqtt.server\" />\n </div>\n\n <div class=\"row\" v-if=\"status.info.config?.serial\">\n <div class=\"param-name\">Serial Port</div>\n <div class=\"param-value\" v-text=\"status.info.config.serial.port\" />\n </div>\n\n <div class=\"row\" v-if=\"status.info.coordinator?.type\">\n <div class=\"param-name\">Firmware Type</div>\n <div class=\"param-value\" v-text=\"status.info.coordinator.type\" />\n </div>\n\n <div class=\"row\" v-if=\"status.info.coordinator?.meta\">\n <div class=\"param-name\">Firmware Version</div>\n <div class=\"param-value\">\n {{ status.info.coordinator.meta.maintrel }}.{{ status.info.coordinator.meta.majorrel }}.{{ status.info.coordinator.meta.minorrel }}\n </div>\n </div>\n\n <div class=\"row\" v-if=\"status.info.coordinator?.meta\">\n <div class=\"param-name\">Firmware Revision</div>\n <div class=\"param-value\" v-text=\"status.info.coordinator.meta.revision\" />\n </div>\n </div>\n </Modal>\n\n <div class=\"view-options\">\n <div class=\"view-selector col-s-8 col-m-9 col-l-10\">\n <label>\n <select :value=\"selected.view\" @change=\"this.selected.view = $event.target.value\">\n <option v-for=\"(enabled, view) in views\"\n v-text=\"(view[0].toUpperCase() + view.slice(1)).replace('_', ' ')\"\n :key=\"view\" :selected=\"enabled\" :value=\"view\">\n </option>\n </select>\n </label>\n </div>\n\n <div class=\"buttons\">\n <button class=\"btn btn-default\" title=\"Add Group\" v-if=\"selected.view === 'groups'\"\n :disabled=\"loading\" @click=\"addGroup\">\n <i class=\"fa fa-plus\"></i>\n </button>\n\n <Dropdown ref=\"networkCommandsDropdown\" icon-class=\"fa fa-cog\" title=\"Network commands\">\n <DropdownItem text=\"Network Info\" :disabled=\"loading\" @click=\"$refs.infoModal.show()\" />\n <DropdownItem text=\"Permit Join\" :disabled=\"loading\" @click=\"permitJoin(true)\"\n v-if=\"!status.info?.permit_join\" />\n <DropdownItem text=\"Disable Join\" :disabled=\"loading\" @click=\"permitJoin(false)\" v-else/>\n <DropdownItem text=\"Factory Reset\" :disabled=\"loading\" @click=\"factoryReset\" />\n </Dropdown>\n\n <button class=\"btn btn-default\" title=\"Refresh network\" :disabled=\"loading\" @click=\"refresh\">\n <i class=\"fa fa-sync-alt\"></i>\n </button>\n </div>\n </div>\n\n <div class=\"view-container\">\n <div class=\"view devices\" v-if=\"selected.view === 'devices'\">\n <div class=\"no-items\" v-if=\"!Object.keys(devices).length\">\n <div class=\"loading\" v-if=\"loading\">Loading devices...</div>\n <div class=\"empty\" v-else>No devices found on the network</div>\n </div>\n\n <Device v-for=\"(device, id) in devices\" :key=\"id\"\n :device=\"device\" :groups=\"groups\" :selected=\"selected.deviceId === id\"\n @select=\"selected.deviceId = selected.deviceId === id ? null : id\"\n @rename=\"refreshDevices\" @remove=\"refreshDevices\" @groups-edit=\"refreshGroups\" />\n </div>\n\n <div class=\"view groups\" v-else-if=\"selected.view === 'groups'\">\n <div class=\"no-items\" v-if=\"!Object.keys(groups).length\">\n <div class=\"loading\" v-if=\"loading\">Loading groups...</div>\n <div class=\"empty\" v-else>No groups available on the network</div>\n </div>\n\n <Group v-for=\"(group, id) in groups\" :key=\"id\" :group=\"group\" :devices=\"devices\"\n :selected=\"selected.groupId === id\"\n @select=\"selected.groupId = selected.groupId === id ? null : id\"\n @rename=\"refreshGroups\" @remove=\"refreshGroups\" @edit=\"refreshGroups\" />\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport Dropdown from \"../../elements/Dropdown\"\nimport DropdownItem from \"@/components/elements/DropdownItem\"\nimport Loading from \"@/components/Loading\"\nimport Utils from \"@/Utils\"\n\nimport Device from \"@/components/panels/ZigbeeMqtt/Device\";\nimport Group from \"@/components/panels/ZigbeeMqtt/Group\";\nimport Modal from \"@/components/Modal\";\n\nexport default {\n name: \"ZigbeeMqtt\",\n components: {Modal, Dropdown, DropdownItem, Loading, Device, Group},\n mixins: [Utils],\n\n data() {\n return {\n devices: {},\n groups: {},\n status: {},\n loading: false,\n selected: {\n view: 'devices',\n deviceId: undefined,\n groupId: undefined,\n },\n views: {\n devices: true,\n groups: true,\n },\n modal: {\n group: {\n visible: false,\n },\n },\n }\n },\n\n methods: {\n async refreshDevices() {\n this.loading = true\n\n try {\n this.devices = (await this.request('zigbee.mqtt.devices')).reduce((devices, device) => {\n if (device.friendly_name in this.devices) {\n device = {\n values: this.devices[device.friendly_name].values || {},\n ...this.devices[device.friendly_name],\n }\n }\n\n devices[device.friendly_name] = device\n return devices\n }, {})\n } finally {\n this.loading = false\n }\n },\n\n async refreshGroups() {\n this.loading = true\n try {\n this.groups = (await this.request('zigbee.mqtt.groups')).reduce((groups, group) => {\n groups[group.id] = group\n return groups\n }, {})\n } finally {\n this.loading = false\n }\n },\n\n async refreshInfo() {\n this.loading = true\n try {\n this.status = await this.request('zigbee.mqtt.info')\n } finally {\n this.loading = false\n }\n },\n\n refresh() {\n this.refreshDevices()\n this.refreshGroups()\n this.refreshInfo()\n },\n\n updateProperties(device, props) {\n this.devices[device].values = props\n },\n\n async addGroup() {\n const name = prompt('Group name')\n if (!(name && name.length)) {\n return\n }\n\n this.loading = true\n try {\n await this.request('zigbee.mqtt.group_add', {name: name})\n } finally {\n this.loading = false\n }\n\n await this.refreshGroups()\n },\n\n async permitJoin(permit) {\n const args = {permit: !!permit}\n if (permit) {\n let seconds = prompt('Join allow period in seconds (0 or empty for no time limits)', '60')\n args.seconds = seconds.length ? parseInt(seconds) : null\n }\n\n this.loading = true\n try {\n await this.request('zigbee.mqtt.permit_join', args)\n setTimeout(this.refreshInfo, 1000)\n } finally {\n this.loading = false\n }\n },\n\n async factoryReset() {\n if (!confirm('Are you SURE that you want to do a device factory reset?')) {\n if (!confirm('Are you REALLY sure? ALL network information and custom firmware will be lost!!'))\n return\n }\n\n this.loading = true\n try {\n await this.request('zigbee.mqtt.factory_reset')\n } finally {\n this.loading = false\n }\n },\n\n async addToGroup(device, group) {\n this.loading = true\n await this.request('zigbee.mqtt.group_add_device', {\n device: device,\n group: group,\n })\n\n this.loading = false\n const self = this\n\n setTimeout(() => {\n self.refresh()\n self.refreshGroups()\n }, 100)\n },\n },\n\n created() {\n this.subscribe(() => {\n this.notify({\n text: 'WARNING: The controller is offline',\n error: true,\n })\n }, 'on-zigbee-offline', 'platypush.message.event.zigbee.mqtt.ZigbeeMqttOfflineEvent')\n\n this.subscribe(() => {\n this.notify({\n text: 'The controller is now online',\n iconClass: 'fas fa-check',\n })\n }, 'on-zigbee-online', 'platypush.message.event.zigbee.mqtt.ZigbeeMqttOnlineEvent')\n\n this.subscribe(() => {\n this.notify({\n text: 'Failed to remove the device',\n error: true,\n })\n }, 'on-zigbee-device-remove-failed', 'platypush.message.event.zigbee.mqtt.ZigbeeMqttDeviceRemovedFailedEvent')\n\n this.subscribe(() => {\n this.notify({\n text: 'Failed to add the group',\n error: true,\n })\n }, 'on-zigbee-group-add-failed', 'platypush.message.event.zigbee.mqtt.ZigbeeMqttGroupAddedFailedEvent')\n\n this.subscribe(() => {\n this.notify({\n text: 'Failed to remove group',\n error: true,\n })\n }, 'on-zigbee-group-remove-failed', 'platypush.message.event.zigbee.mqtt.ZigbeeMqttGroupRemovedFailedEvent')\n\n this.subscribe(() => {\n this.notify({\n text: 'Failed to remove the devices from group',\n error: true,\n })\n }, 'on-zigbee-remove-all-failed',\n 'platypush.message.event.zigbee.mqtt.ZigbeeMqttGroupRemoveAllFailedEvent')\n\n this.subscribe((event) => {\n this.notify({\n text: event.error || '[Unknown error]',\n error: true,\n })\n }, 'on-zigbee-error', 'platypush.message.event.zigbee.mqtt.ZigbeeMqttErrorEvent')\n\n this.subscribe(this.refresh, 'on-zigbee-device-update',\n 'platypush.message.event.zigbee.mqtt.ZigbeeMqttOnlineEvent',\n 'platypush.message.event.zigbee.mqtt.ZigbeeMqttDevicePairingEvent',\n 'platypush.message.event.zigbee.mqtt.ZigbeeMqttDeviceConnectedEvent',\n 'platypush.message.event.zigbee.mqtt.ZigbeeMqttDeviceBannedEvent',\n 'platypush.message.event.zigbee.mqtt.ZigbeeMqttDeviceRemovedEvent',\n 'platypush.message.event.zigbee.mqtt.ZigbeeMqttDeviceWhitelistedEvent',\n 'platypush.message.event.zigbee.mqtt.ZigbeeMqttDeviceRenamedEvent',\n 'platypush.message.event.zigbee.mqtt.ZigbeeMqttDeviceBindEvent',\n 'platypush.message.event.zigbee.mqtt.ZigbeeMqttDeviceUnbindEvent',\n )\n\n this.subscribe(this.refreshGroups, 'on-zigbee-group-update',\n 'platypush.message.event.zigbee.mqtt.ZigbeeMqttGroupAddedEvent',\n 'platypush.message.event.zigbee.mqtt.ZigbeeMqttGroupRemovedEvent',\n 'platypush.message.event.zigbee.mqtt.ZigbeeMqttGroupRemoveAllEvent',\n )\n },\n\n mounted() {\n this.refresh()\n },\n\n unmounted() {\n this.unsubscribe('on-zigbee-error')\n this.unsubscribe('on-zigbee-remove-all-failed')\n this.unsubscribe('on-zigbee-group-remove-failed')\n this.unsubscribe('on-zigbee-group-add-failed')\n this.unsubscribe('on-zigbee-device-remove-failed')\n this.unsubscribe('on-zigbee-online')\n this.unsubscribe('on-zigbee-offline')\n this.unsubscribe('on-zigbee-device-update')\n this.unsubscribe('on-zigbee-group-update')\n },\n}\n</script>\n\n<style lang=\"scss\">\n@import \"common\";\n\n.zigbee-container {\n width: 100%;\n height: 100%;\n padding: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n overflow: auto;\n\n .no-items {\n padding: 2em;\n font-size: 1.5em;\n color: $no-items-color;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .view-options {\n display: flex;\n width: 100%;\n height: $header-height;\n justify-content: space-between;\n align-items: center;\n padding: 0;\n background: $header-bg;\n border-bottom: $default-border-2;\n box-shadow: $border-shadow-bottom;\n\n .view-selector {\n display: inline-flex;\n padding-left: .5em;\n\n label {\n width: 100%;\n }\n }\n\n .buttons {\n display: inline-flex;\n margin: 0;\n\n button {\n background: none;\n border: none;\n padding: 0 .75em;\n\n &:hover {\n color: $default-hover-fg;\n }\n }\n\n .dropdown {\n .item {\n padding: .5em 2em .5em .5em;\n }\n }\n }\n }\n\n .view-container {\n width: 100%;\n height: calc(100% - #{$header-height});\n display: flex;\n justify-content: center;\n overflow: auto;\n }\n\n .view {\n height: max-content;\n background: $view-bg;\n border: $view-border;\n box-shadow: $view-box-shadow;\n }\n\n @media screen and (max-width: $tablet) {\n .view {\n width: 100%;\n }\n }\n\n @media screen and (min-width: $tablet) {\n .view {\n width: 100%;\n }\n }\n\n @media screen and (min-width: $desktop) {\n .view {\n min-width: 400pt;\n max-width: 750pt;\n border-radius: 1.5em;\n }\n\n .view-container {\n padding-top: 2em;\n }\n }\n\n .params {\n background: $params-bg;\n padding-bottom: 1em;\n\n .section {\n display: flex;\n flex-direction: column;\n padding: 0 1em;\n\n &:not(:first-child) {\n padding-top: 1em;\n }\n\n .header {\n display: flex;\n align-items: center;\n font-weight: bold;\n border-bottom: $param-section-header-border;\n }\n }\n\n }\n\n .btn-value-name-edit {\n padding: 0;\n }\n\n .modal {\n .section {\n .header {\n background: none;\n padding: .5em 0;\n }\n\n .body {\n padding: 0;\n }\n }\n\n .network-info {\n min-width: 600pt;\n }\n }\n\n .error {\n color: $error-color;\n }\n\n .device, .group {\n .actions {\n .row {\n cursor: pointer;\n }\n }\n\n form {\n margin-bottom: 0;\n }\n\n .param-value {\n input[type=text] {\n text-align: right;\n }\n }\n }\n\n .info-body {\n margin: -2em;\n padding: 0;\n\n .row {\n padding: 1em .5em;\n\n .param-name {\n font-weight: bold;\n }\n }\n }\n\n @media screen and (max-width: $tablet) {\n .info-body {\n width: 100vw;\n }\n }\n\n @media screen and (min-width: $tablet) {\n .info-body {\n width: 80vw;\n }\n }\n\n @media screen and (min-width: $desktop) {\n .info-body {\n width: 60vw;\n max-width: 30em;\n }\n }\n}\n</style>\n","<template>\n <div class=\"item device\" :class=\"{selected: selected}\">\n <Loading v-if=\"loading\" />\n\n <Modal class=\"groups-modal\" ref=\"groupsModal\" title=\"Device groups\">\n <Loading v-if=\"loading\" />\n\n <form class=\"content\" @submit.prevent=\"manageGroups\">\n <div class=\"groups\">\n <label class=\"row group\" v-for=\"(group, id) in groups\" :key=\"id\">\n <input type=\"checkbox\" :value=\"id\" :checked=\"associatedGroups.has(parseInt(group.id))\">\n <span class=\"name\" v-text=\"group.friendly_name?.length ? group.friendly_name : `[Group #${group.id}]`\" />\n </label>\n </div>\n\n <div class=\"footer buttons\">\n <button type=\"submit\">Save</button>\n </div>\n </form>\n </Modal>\n\n <div class=\"row name header vertical-center\" :class=\"{selected: selected}\"\n v-text=\"device.friendly_name || device.ieee_address\" @click=\"$emit('select')\" />\n\n <div class=\"params\" v-if=\"selected\">\n <div class=\"row\">\n <div class=\"param-name\">Name</div>\n <div class=\"param-value\">\n <div class=\"name-edit\" :class=\"{hidden: !editName}\">\n <form @submit.prevent=\"rename\">\n <label>\n <input type=\"text\" name=\"name\" ref=\"name\" :value=\"device.friendly_name\">\n </label>\n\n <span class=\"buttons\">\n <button type=\"button\" class=\"btn btn-default\" @click=\"editName = false\">\n <i class=\"fas fa-times\"></i>\n </button>\n\n <button type=\"submit\" class=\"btn btn-default\">\n <i class=\"fa fa-check\"></i>\n </button>\n </span>\n </form>\n </div>\n\n <div class=\"name-edit\" :class=\"{hidden: editName}\">\n <span v-text=\"device.friendly_name\"></span>\n <span class=\"buttons\">\n <button type=\"button\" class=\"btn btn-default\" @click=\"editName = true\">\n <i class=\"fa fa-edit\"></i>\n </button>\n </span>\n </div>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"param-name\">IEEE Address</div>\n <div class=\"param-value\" v-text=\"device.ieee_address\"></div>\n </div>\n\n <div class=\"row\" v-if=\"device.network_address\">\n <div class=\"param-name\">Network Address</div>\n <div class=\"param-value\" v-text=\"device.network_address\"></div>\n </div>\n\n <div class=\"row\">\n <div class=\"param-name\">Type</div>\n <div class=\"param-value\" v-text=\"device.type\"></div>\n </div>\n\n <div class=\"row\" v-if=\"device.definition?.vendor\">\n <div class=\"param-name\">Vendor</div>\n <div class=\"param-value\">\n {{ device.definition.vendor }}\n </div>\n </div>\n\n <div class=\"row\" v-if=\"device.definition?.model\">\n <div class=\"param-name\">Model</div>\n <div class=\"param-value\">\n {{ device.definition.model }}\n </div>\n </div>\n\n <div class=\"row\" v-if=\"device.model_id\">\n <div class=\"param-name\">Model ID</div>\n <div class=\"param-value\">\n {{ device.model_id }}\n </div>\n </div>\n\n <div class=\"row\" v-if=\"device.definition?.description\">\n <div class=\"param-name\">Description</div>\n <div class=\"param-value\">\n {{ device.definition.description }}\n </div>\n </div>\n\n <div class=\"row\" v-if=\"device.software_build_id\">\n <div class=\"param-name\">Software Build ID</div>\n <div class=\"param-value\">\n {{ device.software_build_id }}\n </div>\n </div>\n\n <div class=\"row\" v-if=\"device.definition?.date_code\">\n <div class=\"param-name\">Date Code</div>\n <div class=\"param-value\">\n {{ device.definition.date_code }}\n </div>\n </div>\n\n <div class=\"row\" v-if=\"device.power_source\">\n <div class=\"param-name\">Power Source</div>\n <div class=\"param-value\">\n {{ device.power_source }}\n </div>\n </div>\n\n <div class=\"section values\" v-if=\"Object.keys(displayedValues).length\">\n <div class=\"header\">\n <div class=\"title\">Values</div>\n </div>\n\n <div class=\"body\">\n <div class=\"row value\" v-for=\"(value, property) in displayedValues\" :key=\"property\">\n <div class=\"param-name\">\n {{ value.description }}\n <span class=\"text\" v-if=\"rgbColor != null && (value.value?.x != null && value.value?.y != null) ||\n (value.value?.hue != null && value.value?.saturation != null)\">Color</span>\n <span class=\"name\" v-text=\"value.property\" v-if=\"value.property\" />\n <span class=\"unit\" v-text=\"value.unit\" v-if=\"value.unit\" />\n </div>\n\n <div class=\"param-value\">\n <ToggleSwitch :value=\"value.value_on != null ? value.value === value.value_on : !!value.value\"\n :disabled=\"!value.writable\" v-if=\"value.type === 'binary'\"\n @input=\"setValue(value, $event)\" />\n\n <Slider :with-label=\"true\" :range=\"[value.value_min, value.value_max]\" :value=\"value.value\"\n :disabled=\"!value.writable\" @change=\"setValue(value, $event)\"\n v-else-if=\"value.type === 'numeric' && value.value_min != null && value.value_max != null\" />\n\n <label v-else-if=\"value.type === 'numeric' && (value.value_min == null || value.value_max == null)\">\n <input type=\"number\" :with-label=\"true\" :value=\"value.value\" :disabled=\"!value.writable\"\n @change=\"setValue(value, $event)\" />\n </label>\n\n <label v-else-if=\"value.type === 'enum'\">\n <select :value=\"value.readable && value.value != null ? value.value : ''\"\n @change=\"setValue(value, $event)\">\n <option v-if=\"!value.readable\" />\n <option v-for=\"option in value.values\" :key=\"option\" :value=\"option\" v-text=\"option\"\n :selected=\"value.readable && value.value === option\" :disabled=\"!value.writable\" />\n </select>\n </label>\n\n <label v-else-if=\"rgbColor != null && (value.value?.x != null && value.value?.y != null) ||\n (value.value?.hue != null && value.value?.saturation != null)\">\n <input type=\"color\" @change.stop=\"setValue(value, $event)\"\n :value=\"'#' + rgbColor.map((i) => { i = Number(i).toString(16); return i.length === 1 ? '0' + i : i }).join('')\" />\n </label>\n\n <label v-else>\n <input type=\"text\" :disabled=\"!value.writable\" :value=\"value.value\" @change=\"setValue(value, $event)\" />\n </label>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"section actions\">\n <div class=\"header\">\n <div class=\"title\">Actions</div>\n </div>\n\n <div class=\"body\">\n <div class=\"row\" @click=\"$refs.groupsModal.show()\">\n <div class=\"param-name\">Manage groups</div>\n <div class=\"param-value\">\n <i class=\"fa fa-network-wired\" />\n </div>\n </div>\n\n <div class=\"row\" @click=\"otaUpdatesAvailable ? installOtaUpdates() : checkOtaUpdates()\">\n <div class=\"param-name\" v-if=\"!otaUpdatesAvailable\">Check for updates</div>\n <div class=\"param-name\" v-else>Install updates</div>\n <div class=\"param-value\">\n <i class=\"fa fa-sync-alt\" />\n </div>\n </div>\n\n <div class=\"row\" @click=\"remove(false)\">\n <div class=\"param-name\">Remove Device</div>\n <div class=\"param-value\">\n <i class=\"fa fa-trash\" />\n </div>\n </div>\n\n <div class=\"row error\" @click=\"remove(true)\">\n <div class=\"param-name\">Force Remove Device</div>\n <div class=\"param-value\">\n <i class=\"fa fa-trash\" />\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport Loading from \"@/components/Loading\";\nimport Slider from \"@/components/elements/Slider\";\nimport ToggleSwitch from \"@/components/elements/ToggleSwitch\";\nimport Utils from \"@/Utils\";\nimport {ColorConverter} from \"@/components/panels/Light/color\";\nimport Modal from \"@/components/Modal\";\n\nexport default {\n name: \"Device\",\n components: {Modal, ToggleSwitch, Slider, Loading},\n mixins: [Utils],\n emits: ['select', 'rename', 'remove', 'groups-edit'],\n\n props: {\n device: {\n type: Object,\n required: true,\n },\n\n groups: {\n type: Object,\n default: () => {},\n },\n\n selected: {\n type: Boolean,\n default: false,\n },\n },\n\n data() {\n return {\n editName: false,\n loading: false,\n status: {},\n otaUpdatesAvailable: false,\n }\n },\n\n computed: {\n values() {\n if (!this.device.definition?.exposes)\n return {}\n\n const extractValues = (values) => {\n const extractValue = (value, root) => {\n if (!value.features) {\n if (value.property)\n root[value.property] = value\n\n return\n }\n\n if (value.property) {\n root[value.property] = root[value.property] || {}\n root = root[value.property]\n }\n\n for (const feature of value.features)\n extractValue(feature, root)\n }\n\n const ret = {}\n for (const value of values)\n extractValue(value, ret)\n\n return ret\n }\n\n return extractValues(this.device.definition.exposes)\n },\n\n displayedValues() {\n const ret = {}\n const mergeValues = (obj, [key, value]) => {\n if (key in this.status)\n value = {\n ...value,\n value: this.status[key]\n }\n\n if (value.access != null) {\n value.readable = !!(value.access & 0x1)\n value.writable = !!(value.access & 0x2)\n delete value.access\n }\n\n obj[key] = value\n Object.entries(value).filter((v) => v[1] instanceof Object).reduce(mergeValues, obj[key])\n return obj\n }\n\n Object.entries(this.values).reduce(mergeValues, ret)\n return ret\n },\n\n rgbColor() {\n if (!this.displayedValues.color)\n return\n\n const color = this.displayedValues.color?.value\n if (!color)\n return\n\n if (color.x != null && color.y != null) {\n const converter = new ColorConverter({\n bri: [this.displayedValues.brightness?.value_min || 0, this.displayedValues.brightness?.value_max || 255],\n })\n\n return converter.xyToRgb(color.x, color.y, this.displayedValues.brightness.value)\n } else\n if (color.hue != null && (color.saturation != null || color.sat != null)) {\n const satAttr = color.saturation != null ? 'saturation' : 'sat'\n const converter = new ColorConverter({\n hue: [this.displayedValues.color.hue?.value_min || 0, this.displayedValues.color.hue.value_max || 65535],\n sat: [this.displayedValues.color[satAttr]?.value_min || 0, this.displayedValues.color[satAttr].value_max || 255],\n bri: [this.displayedValues.brightness?.value_min || 0, this.displayedValues.brightness?.value_max || 255],\n })\n\n return converter.hslToRgb(color.hue, color[satAttr], this.displayedValues.brightness.value)\n }\n\n return null\n },\n\n associatedGroups() {\n return new Set(Object.values(this.groups)\n .filter((group) => new Set(\n (group.members || []).map((member) => member.ieee_address)).has(this.device.ieee_address))\n .map((group) => parseInt(group.id)))\n },\n },\n\n methods: {\n async refresh() {\n this.loading = true\n try {\n this.status = await this.request('zigbee.mqtt.device_get',\n {device: this.device.friendly_name || this.device.ieee_address})\n } finally {\n this.loading = false\n }\n },\n\n async rename() {\n const name = (this.$refs.name.value || '').trim()\n if (!name.length || name === this.device.friendly_name)\n return\n\n this.loading = true\n try {\n await this.request('zigbee.mqtt.device_rename', {\n device: this.device.friendly_name?.length ? this.device.friendly_name : this.device.ieee_address,\n name: name,\n })\n\n this.$emit('rename', {name: this.device.friendly_name, newName: name});\n } finally {\n this.editName = false\n this.loading = false\n }\n },\n\n async remove(force) {\n if (!confirm('Are you really sure that you want to remove this device from the network?'))\n return\n\n force = !!force\n this.loading = true\n try {\n await this.request('zigbee.mqtt.device_remove', {\n device: this.device.friendly_name?.length ? this.device.friendly_name : this.device.ieee_address,\n force: force,\n })\n\n this.$emit('remove', {device: this.device.friendly_name || this.device.ieee_address});\n } finally {\n this.loading = false\n }\n },\n\n async setValue(value, event) {\n const request = {\n device: this.device.friendly_name || this.device.ieee_address,\n property: value.property,\n value: null,\n }\n\n switch (value.type) {\n case 'binary':\n if (value.value_toggle) {\n request.value = value.value_toggle\n } else if (value.value_on && value.value_off) {\n request.value = value.value === value.value_on ? value.value_off : value.value_on\n } else {\n request.value = !value.value\n }\n break\n\n case 'numeric':\n request.value = parseFloat(event.target.value)\n break\n\n case 'enum':\n if (event.target.value?.length) {\n request.value = event.target.value\n }\n break\n\n default:\n if ((value.x != null && value.y != null) || (value.hue != null && (value.saturation != null || value.sat != null))) {\n request.property = 'color'\n const rgb = event.target.value.slice(1)\n .split(/([0-9a-fA-F]{2})/)\n .filter((_, i) => i % 2)\n .map((i) => parseInt(i, 16))\n\n if ((value.x != null && value.y != null)) {\n const converter = new ColorConverter({\n bri: [this.displayedValues.brightness?.value_min || 0, this.displayedValues.brightness?.value_max || 255],\n })\n\n const xy = converter.rgbToXY(...rgb)\n request.value = {\n color: {\n x: xy[0],\n y: xy[1],\n }\n }\n } else {\n const satAttr = this.displayedValues.color.saturation != null ? 'saturation' : 'sat'\n const converter = new ColorConverter({\n hue: [this.displayedValues.color.hue?.value_min || 0, this.displayedValues.color.hue.value_max || 65535],\n sat: [this.displayedValues.color[satAttr]?.value_min || 0, this.displayedValues.color[satAttr].value_max || 255],\n bri: [this.displayedValues.brightness?.value_min || 0, this.displayedValues.brightness?.value_max || 255],\n })\n\n const hsl = converter.rgbToHsl(...rgb)\n request.value = {\n brightness: hsl[2],\n color: {\n hue: hsl[0],\n }\n }\n\n request.value.color[satAttr] = hsl[1]\n }\n }\n break\n }\n\n if (request.value == null)\n return\n\n this.loading = true\n try {\n await this.request('zigbee.mqtt.device_set', request)\n await this.refresh()\n } finally {\n this.loading = false\n }\n },\n\n async manageGroups(event) {\n const groups = [...event.target.querySelectorAll('input[type=checkbox]')].reduce((obj, element) => {\n const groupId = parseInt(element.value)\n if (element.checked && !this.associatedGroups.has(groupId))\n obj.add.add(groupId)\n else if (!element.checked && this.associatedGroups.has(groupId))\n obj.remove.add(groupId)\n\n return obj\n }, {add: new Set(), remove: new Set()})\n\n const editGroups = async (action) => {\n await Promise.all([...groups[action]].map(async (groupId) => {\n await this.request(`zigbee.mqtt.group_${action}_device`, {\n group: this.groups[groupId].friendly_name,\n device: this.device.friendly_name?.length ? this.device.friendly_name : this.device.ieee_address,\n })\n }))\n }\n\n this.loading = true\n try {\n await Promise.all(Object.keys(groups).map(editGroups))\n this.$emit('groups-edit', groups)\n } finally {\n this.loading = false\n }\n },\n\n async checkOtaUpdates() {\n this.loading = true\n try {\n this.otaUpdatesAvailable = (await this.request('zigbee.mqtt.device_check_ota_updates', {\n device: this.device.friendly_name?.length ? this.device.friendly_name : this.device.ieee_address,\n })).update_available\n\n if (this.otaUpdatesAvailable)\n this.notify({\n text: 'A firmware update is available for the device',\n image: {\n iconClass: 'fa fa-sync-alt',\n }\n })\n else\n this.notify({\n text: 'The device is up to date',\n image: {\n iconClass: 'fa fa-check',\n }\n })\n } finally {\n this.loading = false\n }\n },\n\n async installOtaUpdates() {\n this.loading = true\n try {\n await this.request('zigbee.mqtt.device_install_ota_updates', {\n device: this.device.friendly_name?.length ? this.device.friendly_name : this.device.ieee_address,\n })\n } finally {\n this.loading = false\n }\n },\n },\n\n mounted() {\n this.$watch(() => this.selected, (newValue) => {\n if (newValue)\n this.refresh()\n })\n\n this.$watch(() => this.status.update_available, (newValue) => {\n this.otaUpdatesAvailable = newValue\n })\n\n this.subscribe((event) => {\n if (event.device !== this.device.friendly_name && event.device !== this.device.ieee_address)\n return\n\n this.status = {...this.status, ...event.properties}\n }, `on-property-change-${this.device.ieee_address}`,\n 'platypush.message.event.zigbee.mqtt.ZigbeeMqttDevicePropertySetEvent')\n },\n\n unmounted() {\n this.unsubscribe(`on-property-change-${this.device.ieee_address}`)\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"common\";\n\n.groups-modal {\n .content {\n min-width: 20em;\n margin: -2em;\n padding: 0;\n border: none;\n box-shadow: none;\n }\n\n .group {\n width: 100%;\n display: flex;\n align-items: center;\n padding: .5em 1em !important;\n\n input[type=checkbox] {\n margin-right: 1em;\n }\n }\n\n .groups {\n width: 100%;\n height: calc(100% - 3.5em);\n display: flex;\n justify-content: center;\n align-items: center;\n overflow: auto;\n }\n\n .footer {\n width: 100%;\n height: 3.5em;\n display: flex;\n justify-content: right;\n align-items: center;\n padding: 0;\n background: $default-bg-2;\n border-top: $default-border-2;\n }\n}\n\n@media screen and (max-width: $tablet) {\n .section.actions {\n .row {\n flex-direction: row-reverse;\n justify-content: left;\n\n .param-name {\n width: auto;\n }\n\n .param-value {\n width: 1.5em;\n margin-right: .5em;\n }\n }\n }\n}\n</style>\n","import { render } from \"./Device.vue?vue&type=template&id=b05d09fc&scoped=true\"\nimport script from \"./Device.vue?vue&type=script&lang=js\"\nexport * from \"./Device.vue?vue&type=script&lang=js\"\n\nimport \"./Device.vue?vue&type=style&index=0&id=b05d09fc&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-b05d09fc\"]])\n\nexport default __exports__","<template>\n <div class=\"item group\" :class=\"{selected: selected}\">\n <Loading v-if=\"loading\" />\n <div class=\"row name header vertical-center\" :class=\"{selected: selected}\"\n v-text=\"group.friendly_name\" @click=\"$emit('select')\" />\n\n <div class=\"params\" v-if=\"selected\">\n <div class=\"section devices\">\n <div class=\"header\">\n <div class=\"title\">Devices</div>\n </div>\n\n <div class=\"body\">\n <form>\n <label class=\"row\" v-for=\"(device, id) in devices\" :key=\"id\">\n <input type=\"checkbox\" :checked=\"members.has(device.ieee_address)\" :value=\"device.ieee_address\"\n @change=\"toggleDevice(device.ieee_address)\" />\n <span class=\"label\" v-text=\"device.friendly_name?.length ? device.friendly_name : device.ieee_address\" />\n </label>\n </form>\n </div>\n </div>\n\n <div class=\"section actions\">\n <div class=\"header\">\n <div class=\"title\">Actions</div>\n </div>\n\n <div class=\"body\">\n <div class=\"row\" @click=\"rename\">\n <div class=\"col-10\">Rename Group</div>\n <div class=\"buttons col-2 pull-right\">\n <i class=\"fa fa-edit\"></i>\n </div>\n </div>\n\n <div class=\"row\" @click=\"remove\">\n <div class=\"col-10\">Remove Group</div>\n <div class=\"buttons col-2 pull-right\">\n <i class=\"fa fa-trash\"></i>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport Loading from \"@/components/Loading\";\nimport Utils from \"@/Utils\";\n\nexport default {\n name: \"Group\",\n emits: ['select', 'remove', 'edit'],\n mixins: [Utils],\n components: {Loading},\n\n props: {\n group: {\n type: Object,\n required: true,\n },\n\n devices: {\n type: Object,\n default: () => { return {} },\n },\n\n selected: {\n type: Boolean,\n default: false,\n },\n },\n\n data() {\n return {\n loading: false,\n values: {},\n }\n },\n\n computed: {\n devicesByAddress() {\n return Object.entries(this.devices).reduce((obj, entry) => {\n const device = entry[1]\n obj[device.ieee_address] = device\n return obj\n }, {})\n },\n\n members() {\n return new Set((this.group.members || []).map((member) => member.ieee_address))\n },\n },\n\n methods: {\n async remove() {\n if (!confirm('Are you sure that you want to remove this group?'))\n return\n\n this.loading = true\n try {\n await this.request('zigbee.mqtt.group_remove', {name: this.group.friendly_name})\n this.$emit('remove', {name: this.group.friendly_name})\n } finally {\n this.loading = false\n }\n },\n\n async rename() {\n let name = prompt('New group name', this.group.friendly_name)\n if (!name?.length)\n return\n\n name = name.trim()\n this.loading = true\n\n try {\n await this.request('zigbee.mqtt.group_rename', {\n group: this.group.friendly_name || this.group.id,\n name: name,\n })\n\n this.$emit('rename', {name: this.group.friendly_name, newName: name})\n } finally {\n this.loading = false\n }\n },\n\n async toggleDevice(ieeeAddress) {\n const device = this.devicesByAddress[ieeeAddress]\n const name = device.friendly_name?.length ? device.friendly_name : ieeeAddress\n const method = this.members.has(ieeeAddress) ? 'remove' : 'add'\n\n this.loading = true\n try {\n await this.request(`zigbee.mqtt.group_${method}_device`, {\n group: this.group.friendly_name,\n device: name,\n })\n\n this.$emit('edit', {device: name, method: method})\n } finally {\n this.loading = false\n }\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"common\";\n\n.section {\n padding-left: 1em !important;\n}\n\nform {\n margin: 0;\n padding: 0;\n border: none;\n box-shadow: none;\n\n .row {\n background: none !important;\n\n &:hover {\n background: $hover-bg !important;\n }\n\n .label {\n margin-left: .75em;\n font-weight: normal;\n }\n }\n}\n</style>\n","import { render } from \"./Group.vue?vue&type=template&id=7667f7ba&scoped=true\"\nimport script from \"./Group.vue?vue&type=script&lang=js\"\nexport * from \"./Group.vue?vue&type=script&lang=js\"\n\nimport \"./Group.vue?vue&type=style&index=0&id=7667f7ba&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-7667f7ba\"]])\n\nexport default __exports__","import { render } from \"./Index.vue?vue&type=template&id=b15233ac\"\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=b15233ac&lang=scss\"\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]])\n\nexport default __exports__"],"names":["ColorConverter","constructor","ranges","this","hue","sat","bri","ct","attr","Object","keys","normalize","x","xRange","yRange","hslToRgb","h","s","l","a","Math","min","f","n","k","color","max","round","rgbToHsl","r","g","b","d","parseInt","xyToRgb","y","brightness","z","Y","toFixed","X","Z","red","green","blue","pow","isNaN","map","c","rgbToXY","parseFloat","rgbToBri","getRGB","rgb","getXY","xy","toRGB","console","debug","toXY","toHSL","class","ref","type","range","step","disabled","value","onUpdate","withLabel","name","emits","props","Number","Boolean","default","Array","methods","event","update","target","$emit","$refs","percent","thumb","style","left","transform","track","width","mounted","__exports__","render","onInput","checked","loading","title","status","info","state","permit_join","network","channel","version","config","mqtt","server","serial","port","coordinator","meta","maintrel","majorrel","minorrel","revision","selected","view","$event","views","enabled","toUpperCase","slice","replace","key","addGroup","text","infoModal","show","permitJoin","factoryReset","refresh","devices","length","device","id","groups","deviceId","refreshDevices","refreshGroups","group","groupId","manageGroups","associatedGroups","has","friendly_name","ieee_address","editName","rename","network_address","definition","vendor","model","model_id","description","software_build_id","date_code","power_source","displayedValues","property","rgbColor","unit","value_on","writable","setValue","value_min","value_max","readable","values","option","i","toString","join","groupsModal","otaUpdatesAvailable","installOtaUpdates","checkOtaUpdates","remove","components","Modal","ToggleSwitch","Slider","Loading","mixins","Utils","required","data","computed","exposes","extractValues","extractValue","root","features","feature","ret","mergeValues","obj","access","entries","filter","v","reduce","converter","saturation","satAttr","Set","members","member","async","request","trim","newName","force","confirm","value_toggle","value_off","split","_","hsl","querySelectorAll","element","add","editGroups","Promise","all","action","update_available","notify","image","iconClass","$watch","newValue","subscribe","properties","unmounted","unsubscribe","toggleDevice","devicesByAddress","entry","prompt","ieeeAddress","method","Dropdown","DropdownItem","Device","Group","undefined","modal","visible","refreshInfo","updateProperties","permit","args","seconds","setTimeout","self","created","error"],"sourceRoot":""}