platypush/platypush/backend/http/webapp/dist/static/js/4604.78aed65e.js.map

1 line
88 KiB
Plaintext

{"version":3,"file":"static/js/4604.78aed65e.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 hexToRgb(hex) {\n return [\n hex.slice(1, 3),\n hex.slice(3, 5),\n hex.slice(5, 7),\n ].map(_ => parseInt(_, 16))\n }\n\n rgbToHex(rgb) {\n return '#' + rgb.map((x) => {\n let hex = x.toString(16)\n if (hex.length < 2)\n hex = '0' + hex\n return hex\n }).join('')\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 - this.range[0]) * 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=95edc28a&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=95edc28a&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-95edc28a\"]])\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: inline-flex;\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=a6396ae8&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=a6396ae8&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-a6396ae8\"]])\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","hexToRgb","hex","slice","_","rgbToHex","toString","length","join","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","replace","key","addGroup","text","infoModal","show","permitJoin","factoryReset","refresh","devices","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","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":""}