platypush/platypush/backend/http/webapp/dist/static/js/7184.eba2f522.js.map

1 line
92 KiB
Plaintext

{"version":3,"file":"static/js/7184.eba2f522.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/Light/Index.vue","webpack://platypush/./src/components/panels/Panel.vue","webpack://platypush/./src/components/panels/Panel.vue?40a7","webpack://platypush/./src/components/Light/Groups.vue","webpack://platypush/./src/components/MenuPanel.vue","webpack://platypush/./src/components/MenuPanel.vue?e8bb","webpack://platypush/./src/components/Light/Groups.vue?f495","webpack://platypush/./src/components/Light/Group.vue","webpack://platypush/./src/components/Light/Light.vue","webpack://platypush/./src/components/Light/Controls.vue","webpack://platypush/./src/components/Light/Controls.vue?5766","webpack://platypush/./src/components/Light/Light.vue?eed6","webpack://platypush/./src/components/Light/Scene.vue","webpack://platypush/./src/components/Light/Scene.vue?87a4","webpack://platypush/./src/components/Light/Animate.vue","webpack://platypush/./src/components/elements/RangeSlider.vue","webpack://platypush/./src/components/elements/RangeSlider.vue?500a","webpack://platypush/./src/components/Light/Animate.vue?a3c2","webpack://platypush/./src/components/Light/Group.vue?06ce","webpack://platypush/./src/components/panels/Light/Index.vue?36e9"],"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 <span class=\"range-labels\" :class=\"{'with-label': withLabel}\" v-if=\"withRange\">\n <span class=\"label left\" v-if=\"withRange\" v-text=\"range[0]\" />\n <span class=\"label right\" v-if=\"withRange\" v-text=\"range[1]\" />\n </span>\n\n <span class=\"slider-container\">\n <input class=\"slider\"\n type=\"range\"\n :class=\"{'with-label': withLabel}\"\n :min=\"range[0]\"\n :max=\"range[1]\"\n :step=\"step\"\n :disabled=\"disabled\"\n :value=\"value\"\n ref=\"range\"\n @input.stop=\"onUpdate\"\n @change.stop=\"onUpdate\">\n\n <div class=\"track\" :class=\"{'with-label': withLabel}\">\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\" ref=\"label\"></span>\n </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 withRange: {\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 sliderWidth = this.$refs.range.clientWidth\n const percent = (value - this.range[0]) / (this.range[1] - this.range[0])\n const innerWidth = percent * sliderWidth\n const thumb = this.$refs.thumb\n\n thumb.style.left = `${innerWidth - thumb.clientWidth / 2}px`\n this.$refs.thumb.style.transform = `translate(-${percent}%, -50%)`\n this.$refs.track.style.width = `${innerWidth}px`\n },\n },\n\n mounted() {\n if (this.value != null)\n this.update(this.value)\n this.$watch(() => this.value, (newValue) => this.update(newValue))\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n$label-width: 3em;\n\n.slider-wrapper {\n width: 100%;\n display: flex;\n position: relative;\n flex-direction: column;\n\n .slider-container {\n width: 100%;\n display: flex;\n position: relative;\n }\n\n .slider {\n width: 100%;\n cursor: pointer;\n opacity: 0;\n\n &::-ms-tooltip {\n display: none;\n }\n }\n\n .range-labels {\n width: 100%;\n display: flex;\n\n &.with-label {\n width: calc(100% - $label-width);\n }\n\n .left {\n text-align: left;\n }\n\n .right {\n @extend .pull-right;\n flex-grow: 1;\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 &.with-label {\n width: calc(100% - $label-width);\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 width: $label-width;\n position: relative;\n font-weight: normal;\n text-align: center;\n }\n}\n</style>\n","import { render } from \"./Slider.vue?vue&type=template&id=4b38623f&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=4b38623f&lang=scss&scoped=true\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-4b38623f\"]])\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 \"../../../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=\"plugin lights-plugin\">\n <div class=\"panel\" v-if=\"selectedGroup == null && groups && Object.keys(groups).length\">\n <Groups :groups=\"groups\" :loading-groups=\"loadingGroups\" :color-converter=\"colorConverter\"\n @select=\"selectedGroup = $event\" @toggle=\"$emit('group-toggle', $event)\" />\n </div>\n <div class=\"panel\" v-else>\n <Group :group=\"groups[selectedGroup]\" :lights=\"displayedLights\" :scenes=\"scenesByGroup[selectedGroup]\"\n :color-converter=\"colorConverter\" :animations=\"animationsByGroup[selectedGroup]\" @close=\"selectedGroup = null\"\n @light-toggle=\"$emit('light-toggle', $event)\" @group-toggle=\"$emit('group-toggle', $event)\"\n @set-light=\"$emit('set-light', $event)\"\n @set-group=\"$emit('set-group', {groupId: selectedGroup, value: $event})\"\n @select-scene=\"$emit('select-scene', {groupId: selectedGroup, sceneId: $event})\"\n @start-animation=\"$emit('start-animation', $event)\" @stop-animation=\"$emit('stop-animation', $event)\" />\n </div>\n </div>\n</template>\n\n<script>\nimport Utils from \"@/Utils\";\nimport Panel from \"@/components/panels/Panel\";\nimport Groups from \"@/components/Light/Groups\";\nimport Group from \"@/components/Light/Group\";\nimport {ColorConverter} from \"@/components/panels/Light/color\";\n\n/**\n * Generic component for light plugins panels.\n */\nexport default {\n name: \"Light\",\n components: {Group, Groups},\n mixins: [Utils, Panel],\n emits: ['group-toggle', 'light-toggle', 'set-light', 'set-group', 'select-scene', 'start-animation', 'stop-animation',\n 'refresh', 'light-changed'],\n\n props: {\n lights: {\n type: Object,\n },\n\n groups: {\n type: Object,\n },\n\n scenes: {\n type: Object,\n },\n\n animations: {\n type: Object,\n },\n\n colorConverter: {\n type: Object,\n default: () => new ColorConverter(),\n },\n\n loadingLights: {\n type: Object,\n default: () => {},\n },\n\n loadingGroups: {\n type: Object,\n default: () => {},\n },\n\n pluginName: {\n type: String,\n },\n\n initialGroup: {\n type: [Number, String],\n },\n },\n\n data() {\n return {\n selectedGroup: null,\n initialized: false,\n }\n },\n\n computed: {\n displayedLights() {\n const selectedGroup = this.selectedGroup || this.initialGroup\n if (selectedGroup == null)\n return this.lights\n\n return this.groups[selectedGroup].lights.reduce((lights, lightId) => {\n lights[lightId] = this.lights[lightId]\n return lights\n }, {})\n },\n\n groupsByLight() {\n if (!this.groups)\n return {}\n\n return Object.entries(this.groups).reduce((obj, [groupId, group]) => {\n group.lights.forEach((lightId) => {\n if (!obj[lightId])\n obj[lightId] = {}\n obj[lightId][groupId] = group\n })\n\n return obj\n }, {})\n },\n\n scenesByGroup() {\n if (!this.scenes)\n return {}\n\n const self = this\n return Object.entries(this.scenes).reduce((obj, [sceneId, scene]) => {\n scene.lights.forEach((lightId) => {\n Object.keys(self.groupsByLight[lightId]).forEach((groupId) => {\n if (!obj[groupId])\n obj[groupId] = {}\n\n obj[groupId][sceneId] = scene\n })\n })\n\n return obj\n }, {})\n },\n\n animationsByGroup() {\n const self = this\n const animations = Object.entries(this.animations?.groups || {}).reduce((obj, [groupId, animation]) => {\n obj[groupId] = {}\n if (animation)\n obj[groupId][null] = animation // lgtm [js/implicit-operand-conversion]\n\n return obj\n }, {})\n\n return {\n ...animations,\n ...Object.entries(this.animations?.lights || {}).reduce((obj, [lightId, animation]) => {\n const group = Object.values(self.groupsByLight[lightId])?.[0]\n if (group) {\n if (animation && group.id != null) {\n if (!obj[group.id])\n obj[group.id] = {}\n obj[group.id][lightId] = animation\n }\n }\n\n return obj\n }, {})\n }\n }\n },\n\n methods: {\n initSelectedGroup() {\n const self = this\n const unwatch = this.$watch(() => self.initialGroup, (newVal) => {\n if (!self.initialized) {\n self.initialized = true\n unwatch()\n if (self.selectedGroup == null && newVal != null) {\n self.selectedGroup = self.initialGroup\n }\n }\n })\n },\n\n refresh() {\n this.$emit('refresh')\n },\n\n onLightChange(event) {\n if (event.plugin_name !== this.pluginName)\n return\n\n if (!this.lights[event.light_id]) {\n this.refresh()\n return\n }\n\n const state = {...event}\n const lightId = state.light_id\n delete state.light_id\n delete state.type\n delete state.plugin_name\n\n this.$emit('light-changed', {\n id: lightId,\n state: state,\n })\n },\n\n onAnimationChange(event) {\n if (event.plugin_name !== this.pluginName)\n return\n\n this.refresh()\n },\n },\n\n mounted() {\n this.subscribe(this.onLightChange, 'on-light-change',\n 'platypush.message.event.light.LightStatusChangeEvent')\n this.subscribe(this.onAnimationChange, 'on-animation-change',\n 'platypush.message.event.light.LightAnimationStartedEvent',\n 'platypush.message.event.light.LightAnimationStoppedEvent')\n\n this.initSelectedGroup()\n },\n\n unmounted() {\n this.unsubscribe('on-light-change')\n this.unsubscribe('on-animation-change')\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.plugin {\n width: 100%;\n height: 100%;\n display: flex;\n}\n\n.panel {\n width: 100%;\n height: 100%;\n box-shadow: none;\n overflow: auto;\n}\n</style>\n\n<style lang=\"scss\">\n.lights-plugin {\n .menu-panel {\n ul {\n li:not(.header) {\n padding: 1.5em 1em;\n }\n }\n }\n}\n</style>","<script>\nexport default {\n name: \"Panel\",\n emits: ['mounted'],\n props: {\n // Plugin configuration.\n config: {\n type: Object,\n default: () => {},\n },\n\n // Plugin name.\n pluginName: {\n type: String,\n required: true,\n },\n },\n\n data() {\n return {\n loading: false,\n }\n },\n\n mounted() {\n this.$emit('mounted', this)\n }\n}\n</script>\n","import script from \"./Panel.vue?vue&type=script&lang=js\"\nexport * from \"./Panel.vue?vue&type=script&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__","<template>\n <MenuPanel>\n <div class=\"panel-row header\">\n <div class=\"col-3\">\n <i class=\"icon fas fa-home\" />\n </div>\n <div class=\"col-6 name\">\n Rooms\n </div>\n <div class=\"col-3 pull-right\">\n <ToggleSwitch :value=\"anyLightsOn\" @input=\"$emit('toggle')\" />\n </div>\n </div>\n\n <div class=\"panel-row row group\" v-for=\"group in groupsSorted\" :key=\"group.id\" @click=\"$emit('select', group.id)\">\n <span class=\"name col-9\">\n {{ group.name || `[Group ${group.id}]` }}\n </span>\n <span class=\"controls col-3 pull-right\">\n <ToggleSwitch :value=\"group.state.any_on\" :disabled=\"group.id in (loadingGroups || {})\"\n @input=\"$emit('toggle', group)\" />\n </span>\n </div>\n </MenuPanel>\n</template>\n\n<script>\nimport MenuPanel from \"@/components/MenuPanel\";\nimport ToggleSwitch from \"@/components/elements/ToggleSwitch\";\nimport {ColorConverter} from \"@/components/panels/Light/color\";\n\nexport default {\n name: \"Groups\",\n components: {ToggleSwitch, MenuPanel},\n emits: ['select', 'toggle'],\n props: {\n groups: {\n type: Object,\n default: () => {},\n },\n\n loadingGroups: {\n type: Object,\n default: () => {},\n },\n\n colorConverter: {\n type: Object,\n default: () => new ColorConverter(),\n },\n },\n\n computed: {\n groupsSorted() {\n return Object.entries(this.groups)\n .sort((a, b) => a[1].name.localeCompare(b[1].name))\n .map(([id, group]) => {\n return {\n ...group,\n id: id,\n }\n })\n },\n\n anyLightsOn() {\n for (const group of Object.values(this.groups))\n if (group?.state?.any_on)\n return true\n\n return false\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.header {\n display: flex;\n align-items: center;\n padding-top: 0.75em !important;\n padding-bottom: 0.75em !important;\n\n .icon {\n margin-left: 0.5em;\n }\n\n .name {\n text-align: center;\n }\n}\n\n.group {\n display: flex;\n align-items: center;\n}\n</style>\n","<template>\n <div class=\"menu-panel\">\n <div class=\"content\">\n <slot />\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: \"MenuPanel\",\n}\n</script>\n\n<style lang=\"scss\">\n.menu-panel {\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n background: $menu-panel-bg;\n padding-top: 2em;\n\n .content {\n background: $menu-panel-content-bg;\n border-radius: 15px;\n box-shadow: $plugin-panel-shadow;\n border: 0;\n\n .panel-row {\n display: flex;\n margin: 0 !important;\n padding: 1em;\n box-shadow: $plugin-panel-entry-shadow;\n cursor: pointer;\n border: 0;\n letter-spacing: 0.05em;\n\n &:hover {\n background: $hover-bg;\n }\n\n &:first-child {\n border-radius: 15px 15px 0 0;\n box-shadow: $plugin-panel-first-entry-shadow;\n }\n\n &:last-child {\n border-radius: 0 0 15px 15px;\n box-shadow: $plugin-panel-last-entry-shadow;\n }\n }\n\n .header {\n background: $menu-header-bg;\n font-weight: bold;\n box-shadow: $menu-header-shadow;\n\n &:hover {\n background: $menu-header-bg;\n }\n }\n }\n}\n\n@media screen and (max-width: $desktop) {\n .menu-panel {\n padding-top: 0;\n\n .content {\n min-width: 100%;\n\n .row {\n &:first-child {\n border-radius: 0;\n }\n\n &:last-child {\n border-radius: 0;\n }\n }\n }\n }\n}\n\n@media screen and (min-width: $desktop) {\n .menu-panel {\n .content {\n min-width: 75%;\n }\n }\n}\n\n@media screen and (min-width: $widescreen) {\n .menu-panel {\n .content {\n min-width: 50%;\n }\n }\n}\n\n@media screen and (min-width: $fullhd) {\n .menu-panel {\n .content {\n min-width: 35%;\n }\n }\n}\n</style>\n","import { render } from \"./MenuPanel.vue?vue&type=template&id=02113104\"\nimport script from \"./MenuPanel.vue?vue&type=script&lang=js\"\nexport * from \"./MenuPanel.vue?vue&type=script&lang=js\"\n\nimport \"./MenuPanel.vue?vue&type=style&index=0&id=02113104&lang=scss\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./Groups.vue?vue&type=template&id=42318a2b&scoped=true\"\nimport script from \"./Groups.vue?vue&type=script&lang=js\"\nexport * from \"./Groups.vue?vue&type=script&lang=js\"\n\nimport \"./Groups.vue?vue&type=style&index=0&id=42318a2b&lang=scss&scoped=true\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-42318a2b\"]])\n\nexport default __exports__","<template>\n <div class=\"light-group-container\">\n <MenuPanel>\n <div class=\"panel-row header\">\n <div class=\"col-3\" v-if=\"group\">\n <button class=\"back-btn\" title=\"Back\" @click=\"close\">\n <i class=\"fas fa-chevron-left\" />\n </button>\n </div>\n\n <div class=\"col-6 name\" :class=\"{selected: selectedView === 'group'}\"\n v-text=\"groupName\" @click=\"selectedView = selectedView === 'group' ? null : 'group'\" />\n\n <div class=\"col-3 pull-right\" v-if=\"group\">\n <ToggleSwitch :value=\"group.state.any_on\" @input=\"$emit('group-toggle', group)\" />\n </div>\n </div>\n\n <div class=\"no-lights\" v-if=\"!lights || !Object.keys(lights).length\">\n No lights found\n </div>\n\n <div class=\"lights-view\" v-else>\n <div class=\"row view-selector\">\n <button :class=\"{selected: selectedView === 'lights'}\" title=\"Lights\" @click=\"selectedView = 'lights'\">\n <i class=\"icon fas fa-lightbulb\" />\n </button>\n <button :class=\"{selected: selectedView === 'scenes'}\" title=\"Scenes\" @click=\"selectedView = 'scenes'\">\n <i class=\"icon far fa-image\" />\n </button>\n <button :class=\"{selected: selectedView === 'animate'}\" title=\"Animate\" @click=\"selectedView = 'animate'\">\n <i class=\"icon fas fa-video\" />\n </button>\n </div>\n\n <div class=\"view fade-in\" v-if=\"selectedView === 'lights'\">\n <keep-alive>\n <div class=\"panel-row row\" :class=\"{expanded: light.id === selectedLight}\"\n v-for=\"(light, id) in lightsSorted\" :key=\"id\"\n @click=\"selectedLight = selectedLight === light.id ? null : light.id\">\n <Light :light=\"light\" :group=\"group\" :collapsed=\"light.id !== selectedLight\"\n :color-converter=\"colorConverter\" @toggle=\"$emit('light-toggle', light)\"\n @set-light=\"$emit('set-light', {light: light, value: $event})\" />\n </div>\n </keep-alive>\n </div>\n\n <div class=\"view fade-in\" v-else-if=\"selectedView === 'scenes'\">\n <keep-alive>\n <div class=\"panel-row row\" :class=\"{selected: scene.id === selectedScene}\"\n v-for=\"(scene, id) in scenesSorted\" :key=\"id\" @click=\"onSceneSelected(scene.id)\">\n <Scene :scene=\"scene\" :group=\"group\" />\n </div>\n </keep-alive>\n </div>\n\n <div class=\"view group-controls fade-in\" v-else-if=\"selectedView === 'group'\">\n <keep-alive>\n <Controls :group=\"group\" :lights=\"lights\" :color-converter=\"colorConverter\"\n @set-group=\"$emit('set-group', $event)\" />\n </keep-alive>\n </div>\n\n <div class=\"view group-controls fade-in\" v-else-if=\"selectedView === 'animate'\">\n <keep-alive>\n <Animate :group=\"group\" :lights=\"lights\" :color-converter=\"colorConverter\" :running-animations=\"animations\"\n @start=\"$emit('start-animation', $event)\" @stop=\"$emit('stop-animation', $event)\" />\n </keep-alive>\n </div>\n </div>\n </MenuPanel>\n </div>\n</template>\n\n<script>\nimport Light from \"@/components/Light/Light\";\nimport Scene from \"@/components/Light/Scene\";\nimport Controls from \"@/components/Light/Controls\";\nimport MenuPanel from \"@/components/MenuPanel\";\nimport ToggleSwitch from \"@/components/elements/ToggleSwitch\";\nimport {ColorConverter} from \"@/components/panels/Light/color\";\nimport Animate from \"@/components/Light/Animate\";\n\nexport default {\n name: \"Group\",\n emits: ['close', 'group-toggle', 'light-toggle', 'set-light', 'select-scene', 'start-animation', 'stop-animation'],\n components: {Animate, ToggleSwitch, MenuPanel, Light, Scene, Controls},\n props: {\n lights: {\n type: Object,\n },\n\n group: {\n type: Object,\n },\n\n scenes: {\n type: Object,\n },\n\n animations: {\n type: Object,\n default: () => {},\n },\n\n colorConverter: {\n type: Object,\n default: () => new ColorConverter(),\n },\n },\n\n data() {\n return {\n selectedLight: null,\n selectedScene: null,\n selectedView: 'lights',\n }\n },\n\n computed: {\n lightsSorted() {\n if (!this.lights)\n return []\n\n return Object.entries(this.lights)\n .sort((a, b) => a[1].name.localeCompare(b[1].name))\n .map(([id, light]) => {\n return {\n ...light,\n id: id,\n }\n })\n },\n\n scenesSorted() {\n if (!this.scenes)\n return []\n\n return Object.entries(this.scenes)\n .sort((a, b) => a[1].name.localeCompare(b[1].name))\n .map(([id, scene]) => {\n return {\n ...scene,\n id: id,\n }\n })\n },\n\n groupName() {\n if (this.group?.name)\n return this.group.name\n if (this.group?.id != null)\n return `[Group ${this.group.id}]`\n return 'Lights'\n },\n },\n\n methods: {\n close(event) {\n event.stopPropagation()\n this.$emit('close')\n },\n\n onSceneSelected(sceneId) {\n this.selectedScene = sceneId\n this.$emit('select-scene', sceneId)\n },\n },\n}\n</script>\n\n<style lang=\"scss\">\n.light-group-container {\n width: 100%;\n min-height: 100%;\n\n .row.panel-row {\n flex-direction: column;\n\n &.expanded,\n &.selected {\n background: $selected-bg;\n }\n }\n\n .header {\n padding: 0.5em !important;\n display: flex;\n align-items: center;\n\n .back-btn {\n border: 0;\n background: none;\n\n &:hover {\n border: 0;\n color: $default-hover-fg;\n }\n }\n\n .name {\n text-align: center;\n\n &.selected {\n color: $selected-fg;\n }\n\n &:hover {\n color: $default-hover-fg;\n }\n }\n }\n\n .view-selector {\n width: 100%;\n border-radius: 0;\n\n button {\n width: 33.3%;\n padding: 1.5em;\n text-align: left;\n opacity: 0.8;\n box-shadow: $plugin-panel-entry-shadow;\n border-right: 0;\n\n &.selected {\n background: $selected-bg;\n }\n\n &:hover {\n background: $hover-bg;\n }\n }\n\n .icon {\n width: 100%;\n text-align: center;\n font-size: 1.2em;\n }\n }\n}\n</style>\n\n<style lang=\"scss\">\n.light-group-container {\n .group-controls {\n margin: 0;\n padding: 1em;\n background-color: $default-bg-6;\n border-radius: 0 0 1em 1em;\n\n .controls {\n margin: 0;\n padding: 1em;\n }\n }\n}\n</style>\n","<template>\n <div class=\"light\" :class=\"{expanded: !collapsed}\" ref=\"element\">\n <div class=\"row\">\n <span class=\"name col-9\" @click=\"expandToggle\">\n {{ light.name || `[Light ${light.id}]` }}\n </span>\n <span class=\"toggle col-3 pull-right\">\n <ToggleSwitch :value=\"light.state.on\" :disabled=\"loading\" @input=\"$emit('toggle', light)\" />\n </span>\n </div>\n\n <div class=\"row fade-in\" v-if=\"!collapsed\">\n <Controls :light=\"light\" :loading=\"loading\" :color-converter=\"colorConverter\"\n @set-light=\"$emit('set-light', $event)\" />\n </div>\n </div>\n</template>\n\n<script>\nimport ToggleSwitch from \"@/components/elements/ToggleSwitch\";\nimport Controls from \"@/components/Light/Controls\";\nimport {ColorConverter} from \"@/components/panels/Light/color\";\n\nexport default {\n name: \"Light\",\n components: {Controls, ToggleSwitch},\n emits: ['toggle', 'set-light', 'collapsed', 'expanded'],\n props: {\n light: {\n type: Object,\n default: () => {},\n },\n\n group: {\n type: Object,\n default: () => {},\n },\n\n loading: {\n type: Boolean,\n default: false,\n },\n\n collapsed: {\n type: Boolean,\n default: true,\n },\n\n colorConverter: {\n type: Object,\n default: () => new ColorConverter(),\n },\n },\n\n methods: {\n expandToggle() {\n this.$emit(this.collapsed ? 'expanded' : 'collapsed')\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.expanded {\n .name {\n font-size: 1.25em;\n }\n}\n</style>\n","<template>\n <div class=\"controls light-controls\" @click=\"$event.stopPropagation()\">\n <Loading v-if=\"loading\" />\n\n <div class=\"row\" v-if=\"state.bri != null\">\n <div class=\"col-1 icon\">\n <i class=\"fas fa-sun\" />\n </div>\n <div class=\"col-11 control\">\n <Slider :range=\"colorConverter.ranges.bri\" :disabled=\"loading\" :value=\"state.bri\"\n @mouseup.stop=\"$emit(light ? 'set-light' : 'set-group', {brightness: parseInt($event.target.value)})\" />\n </div>\n </div>\n\n <div class=\"row\" v-if=\"state.ct != null\">\n <div class=\"col-1 icon\">\n <i class=\"fas fa-thermometer-half\" />\n </div>\n <div class=\"col-11 control\">\n <Slider :range=\"colorConverter.ranges.ct\" :disabled=\"loading\" :value=\"state.ct\"\n @mouseup.stop=\"$emit(light ? 'set-light' : 'set-group', {temperature: parseInt($event.target.value)})\" />\n </div>\n </div>\n\n <label class=\"row\" v-if=\"rgbColor\">\n <span class=\"col-1 icon\">\n <i class=\"fas fa-palette\" />\n </span>\n <span class=\"col-11 control\">\n <input type=\"color\" :value=\"rgbColor\" @change.stop=\"onColorSelect\" />\n </span>\n </label>\n </div>\n</template>\n\n<script>\nimport Slider from \"@/components/elements/Slider\";\nimport Loading from \"@/components/Loading\";\nimport {ColorConverter} from \"@/components/panels/Light/color\";\n\nexport default {\n name: \"Controls\",\n components: {Loading, Slider},\n emits: ['set-light', 'set-group'],\n props: {\n light: {\n type: Object,\n },\n\n lights: {\n type: Object,\n },\n\n group: {\n type: Object,\n },\n\n loading: {\n type: Boolean,\n default: false,\n },\n\n colorConverter: {\n type: Object,\n default: () => new ColorConverter(),\n },\n },\n\n computed: {\n state() {\n if (this.light?.state)\n return this.light.state\n\n const state = this.group?.state || {}\n if (!this.lights)\n return state\n\n const avg = (values) => {\n if (!(values && values.length))\n return 0\n\n if (values[0] instanceof Array)\n return [...values[0].keys()].map((i) => {\n return avg(values.map((value) => value[i]))\n })\n\n return values.reduce((sum, value) => sum+value, 0) / values.length\n }\n\n return {\n ...state,\n ...Object.entries(\n Object.values(this.lights).reduce((obj, light) => {\n ['bri', 'hue', 'sat', 'rgb', 'xy', 'red', 'green', 'blue', 'ct'].forEach((attr) => {\n if (light.state?.[attr] != null) {\n obj[attr] = [...(obj[attr] || []), light.state[attr]]\n }\n })\n\n return obj\n }, {})\n ).reduce((obj, [attr, values]) => {\n obj[attr] = avg(values)\n return obj\n }, {})\n }\n },\n\n color() {\n return this.getColor(this.state)\n },\n\n rgbColor() {\n const rgb = this.colorConverter.toRGB(this.state)\n if (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 return null\n },\n },\n\n methods: {\n onColorSelect(event) {\n const rgb = event.target.value.slice(1).split(/(?=(?:..)*$)/).map((t) => parseInt(`0x${t}`))\n this.$emit(this.light ? 'set-light' : 'set-group', {\n rgb: rgb,\n xy: this.colorConverter.rgbToXY(...rgb),\n hsl: this.colorConverter.rgbToHsl(...rgb),\n brightness: this.colorConverter.rgbToBri(...rgb),\n })\n },\n\n getColor(state) {\n return {\n rgb: this.colorConverter.toRGB(state),\n xy: this.colorConverter.toXY(state),\n hsl: this.colorConverter.toHSL(state),\n }\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n$light-controls-bg: white;\n\n.controls {\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n margin-top: 2.25em;\n background: $light-controls-bg;\n padding: 0.5em 1em;\n border-radius: 1em;\n box-shadow: $plugin-panel-shadow;\n\n .row {\n width: 100%;\n display: flex;\n align-items: center;\n }\n\n .control {\n padding-top: 0.25em;\n }\n\n .icon {\n opacity: 0.7;\n }\n\n input[type=color] {\n width: 100%;\n border: 0;\n }\n}\n</style>\n\n<style lang=\"scss\">\n.light-controls {\n .row {\n .slider {\n margin-top: 0.4em;\n }\n }\n}\n</style>\n","import { render } from \"./Controls.vue?vue&type=template&id=e2726892&scoped=true\"\nimport script from \"./Controls.vue?vue&type=script&lang=js\"\nexport * from \"./Controls.vue?vue&type=script&lang=js\"\n\nimport \"./Controls.vue?vue&type=style&index=0&id=e2726892&lang=scss&scoped=true\"\nimport \"./Controls.vue?vue&type=style&index=1&id=e2726892&lang=scss\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-e2726892\"]])\n\nexport default __exports__","import { render } from \"./Light.vue?vue&type=template&id=52168252&scoped=true\"\nimport script from \"./Light.vue?vue&type=script&lang=js\"\nexport * from \"./Light.vue?vue&type=script&lang=js\"\n\nimport \"./Light.vue?vue&type=style&index=0&id=52168252&lang=scss&scoped=true\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-52168252\"]])\n\nexport default __exports__","<template>\n <Loading v-if=\"loading\" />\n <div class=\"scene row name\" @click=\"onSelect\">\n {{ scene.name || `[Scene ${scene.id}]` }}\n </div>\n</template>\n\n<script>\nexport default {\n name: \"Light\",\n emits: ['select'],\n props: {\n scene: {\n type: Object,\n default: () => {},\n },\n\n group: {\n type: Object,\n default: () => {},\n },\n\n loading: {\n type: Boolean,\n default: false,\n },\n },\n\n methods: {\n onSelect() {\n if (this.loading)\n return false\n\n this.$emit('select')\n },\n },\n}\n</script>\n","import { render } from \"./Scene.vue?vue&type=template&id=6934d062\"\nimport script from \"./Scene.vue?vue&type=script&lang=js\"\nexport * from \"./Scene.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"controls animation-controls\" @click=\"$event.stopPropagation()\">\n <Loading v-if=\"loading\" />\n\n <div class=\"animation-container\">\n <div class=\"animation-header\">\n <div class=\"row\">\n <div class=\"col-3\">\n Run Animation\n </div>\n <div class=\"col-9\">\n <ToggleSwitch :value=\"animationRunning\" @input=\"toggleAnimation\" />\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"col-3\">Animation</div>\n <div class=\"col-9\">\n <label>\n <select class=\"selector\" @click=\"selectedAnimation = $event.target.value\">\n <option value=\"color_transition\">Color transition</option>\n <option value=\"blink\">Blink</option>\n </select>\n </label>\n </div>\n </div>\n </div>\n\n <div class=\"animation\">\n <div class=\"row\" v-if=\"selectedAnimation === 'color_transition'\">\n <div class=\"col-3\">\n Hue range\n </div>\n <div class=\"col-9\">\n <RangeSlider :range=\"colorConverter.ranges.hue\" :disabled=\"loading\"\n :value=\"animations.color_transition.hue_range\"\n @mouseup=\"animations.color_transition.hue_range = $event.target.value\" />\n </div>\n </div>\n\n <div class=\"row\" v-if=\"selectedAnimation === 'color_transition'\">\n <div class=\"col-3\">\n Sat range\n </div>\n <div class=\"col-9\">\n <RangeSlider :range=\"colorConverter.ranges.sat\" :disabled=\"loading\"\n :value=\"animations.color_transition.sat_range\"\n @mouseup=\"animations.color_transition.sat_range = $event.target.value\" />\n </div>\n </div>\n\n <div class=\"row\" v-if=\"selectedAnimation === 'color_transition'\">\n <div class=\"col-3\">\n Bri range\n </div>\n <div class=\"col-9\">\n <RangeSlider :range=\"colorConverter.ranges.sat\" :disabled=\"loading\"\n :value=\"animations.color_transition.bri_range\"\n @mouseup=\"animations.color_transition.bri_range = $event.target.value\" />\n </div>\n </div>\n\n <div class=\"row\" v-if=\"selectedAnimation === 'color_transition'\">\n <div class=\"col-3\">\n Hue step\n </div>\n <div class=\"col-9\">\n <Slider :range=\"colorConverter.ranges.hue\" :disabled=\"loading\"\n :value=\"animations.color_transition.hue_step\"\n @mouseup=\"animations.color_transition.hue_step = parseFloat($event.target.value)\" />\n </div>\n </div>\n\n <div class=\"row\" v-if=\"selectedAnimation === 'color_transition'\">\n <div class=\"col-3\">\n Sat step\n </div>\n <div class=\"col-9\">\n <Slider :range=\"colorConverter.ranges.sat\" :disabled=\"loading\"\n :value=\"animations.color_transition.sat_step\"\n @mouseup=\"animations.color_transition.sat_step = parseFloat($event.target.value)\" />\n </div>\n </div>\n\n <div class=\"row\" v-if=\"selectedAnimation === 'color_transition'\">\n <div class=\"col-3\">\n Bri step\n </div>\n <div class=\"col-9\">\n <Slider :range=\"colorConverter.ranges.bri\" :disabled=\"loading\"\n :value=\"animations.color_transition.bri_step\"\n @mouseup=\"animations.color_transition.bri_step = parseFloat($event.target.value)\" />\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"col-3\">\n Refresh seconds\n </div>\n <div class=\"col-9\">\n <label>\n <input type=\"number\" :value=\"animations[selectedAnimation].transition_seconds\" step=\"0.1\"\n @input=\"animations[selectedAnimation].transition_seconds = parseFloat($event.target.value)\" >\n </label>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"col-3\">\n Duration (seconds)\n </div>\n <div class=\"col-9\">\n <label>\n <input type=\"number\" :value=\"animations[selectedAnimation].duration\" step=\"5\"\n @input=\"animations[selectedAnimation].duration = $event.target.value?.length ? parseFloat($event.target.value) : null\" >\n </label>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"lights\">\n <div class=\"row\">\n <label>\n <input type=\"checkbox\"\n :checked=\"Object.keys(lights).length === Object.values(selectedLights).filter((v) => v).length\" @click=\"toggleSelectAll\">\n Select all lights\n </label>\n </div>\n\n <div class=\"row\" v-for=\"(light, id) in lights\" :key=\"id\">\n <label>\n <input type=\"checkbox\" v-model=\"selectedLights[id]\" @input=\"selectedLights[id] = !selectedLights[id]\">\n {{ light.name }}\n </label>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport Loading from \"@/components/Loading\";\nimport {ColorConverter} from \"@/components/panels/Light/color\";\nimport RangeSlider from \"@/components/elements/RangeSlider\";\nimport Slider from \"@/components/elements/Slider\";\nimport ToggleSwitch from \"@/components/elements/ToggleSwitch\";\nimport Utils from \"@/Utils\";\n\nexport default {\n name: \"Animate\",\n mixins: [Utils],\n components: {ToggleSwitch, Slider, RangeSlider, Loading},\n emits: ['start', 'stop'],\n props: {\n lights: {\n type: Object,\n },\n\n group: {\n type: Object,\n },\n\n loading: {\n type: Boolean,\n default: false,\n },\n\n colorConverter: {\n type: Object,\n default: () => new ColorConverter(),\n },\n\n runningAnimations: {\n type: Object,\n default: () => {},\n }\n },\n\n data() {\n return {\n selectedAnimation: 'color_transition',\n animation: {},\n selectedLights: Object.keys(this.lights).reduce((obj, lightId) => {\n obj[lightId] = true\n return obj\n }, {}),\n animations: {\n color_transition: {\n hue_range: this.colorConverter.ranges.hue,\n sat_range: [\n parseInt((this.colorConverter.ranges.sat[1] - this.colorConverter.ranges.sat[0])/2),\n this.colorConverter.ranges.sat[1]\n ],\n bri_range: [\n parseInt((this.colorConverter.ranges.bri[1] - this.colorConverter.ranges.bri[0]) * 0.75),\n this.colorConverter.ranges.bri[1]\n ],\n\n hue_step: parseInt((this.colorConverter.ranges.hue[1] - this.colorConverter.ranges.hue[0]) / 25),\n sat_step: parseInt((this.colorConverter.ranges.sat[1] - this.colorConverter.ranges.sat[0]) / 50),\n bri_step: parseInt((this.colorConverter.ranges.bri[1] - this.colorConverter.ranges.bri[0]) / 50),\n transition_seconds: 1,\n duration: null,\n },\n\n blink: {\n transition_seconds: 1,\n duration: null,\n },\n },\n }\n },\n\n computed: {\n animationRunning() {\n return Object.keys(this.runningAnimations).length > 0\n },\n },\n\n methods: {\n toggleSelectAll() {\n const select = Object.values(this.selectedLights).filter((v) => v).length < Object.keys(this.lights).length\n Object.keys(this.lights).forEach((lightId) => {\n this.selectedLights[lightId] = select\n })\n },\n\n toggleAnimation() {\n const eventType = this.animationRunning ? 'stop' : 'start'\n const selectedLights = Object.entries(this.selectedLights).filter((light) => light[1]).map((light) => light[0])\n if (!selectedLights.length) {\n this.notifyWarning('No lights have been selected')\n return\n }\n\n this.$emit(eventType, {\n lights: selectedLights,\n animation: {\n ...this.animations[this.selectedAnimation],\n animation: this.selectedAnimation,\n },\n })\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n$light-controls-bg: white;\n\n.animation-container {\n width: 100%;\n\n .animation-header,\n .animation {\n padding-bottom: 0.5em;\n margin-bottom: 0.5em;\n box-shadow: $border-shadow-bottom;\n }\n}\n\n.controls {\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n margin-top: 2.25em;\n background: $light-controls-bg;\n padding: 0.5em 1em;\n border-radius: 1em;\n box-shadow: $plugin-panel-shadow;\n\n .selector {\n width: 100%;\n }\n\n .row {\n width: 100%;\n display: flex;\n align-items: center;\n padding: 0.5em 0;\n\n & > div:last-child {\n text-align: right;\n }\n }\n\n .control {\n padding-top: 0.25em;\n }\n\n .lights {\n padding-top: 0.5em;\n width: 100%;\n\n .row {\n display: flex;\n align-items: center;\n }\n\n label {\n width: 100%;\n }\n }\n}\n</style>\n","<template>\n <div class=\"range-wrapper\">\n <input class=\"slider\" type=\"range\" :value=\"v\" :min=\"range[0]\" :max=\"range[1]\" :step=\"step\"\n :disabled=\"disabled\" ref=\"ranges\"\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 v-for=\"(v, i) in value\" :key=\"i\">\n </div>\n</template>\n\n<script>\nexport default {\n name: \"RangeSlider\",\n emits: ['input', 'change', 'mouseup', 'mousedown', 'touchstart', 'touchend', 'keyup', 'keydown'],\n props: {\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 value: {\n type: Array,\n default: () => [0, 100],\n },\n },\n\n methods: {\n onUpdate(event) {\n this.$emit(event.type, {\n ...event,\n target: {\n ...event.target,\n value: this.$refs.ranges.map((input) => parseFloat(input.value)).sort(),\n }\n })\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.range-wrapper {\n width: 100%;\n position: relative;\n\n @mixin runnable-track {\n width: 100%;\n height: 0.75em;\n cursor: pointer;\n animate: 0.2s;\n background: $slider-bg;\n border-radius: 0.5em;\n box-shadow: inset 1px 0px 3px 0 $slider-track-shadow;\n border: 0;\n }\n\n @mixin thumb {\n width: 1.25em;\n height: 1.25em;\n background: $slider-thumb-bg;\n position: relative;\n z-index: 2;\n border-radius: 50%;\n box-shadow: 1px 0px 2px 0 $slider-thumb-shadow;\n cursor: pointer;\n }\n\n input[type=range] {\n width: 100%;\n position: absolute;\n left: 0;\n bottom: 0;\n outline: none;\n @include appearance(none);\n\n &:focus, &:hover {\n outline: none;\n border: 0;\n }\n\n &::-webkit-slider-runnable-track {\n @include runnable-track;\n }\n\n &::-moz-range-track {\n @include runnable-track;\n }\n\n &::-ms-track {\n width: 100%;\n height: 0.75em;\n cursor: pointer;\n animate: 0.2s;\n background: transparent;\n border-color: transparent;\n color: transparent;\n }\n\n &::-ms-fill-lower,\n &::-ms-fill-upper {\n background: $slider-progress-bg;\n border-radius: 1px;\n box-shadow: none;\n border: 0;\n }\n\n &::-webkit-slider-thumb {\n @include thumb;\n @include appearance(none);\n margin-top: -0.25em;\n }\n\n &::-moz-range-thumb {\n @include thumb;\n }\n\n &::-ms-thumb {\n @include thumb;\n }\n }\n}\n</style>\n\n","import { render } from \"./RangeSlider.vue?vue&type=template&id=981c5de0&scoped=true\"\nimport script from \"./RangeSlider.vue?vue&type=script&lang=js\"\nexport * from \"./RangeSlider.vue?vue&type=script&lang=js\"\n\nimport \"./RangeSlider.vue?vue&type=style&index=0&id=981c5de0&lang=scss&scoped=true\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-981c5de0\"]])\n\nexport default __exports__","import { render } from \"./Animate.vue?vue&type=template&id=71cae6ae&scoped=true\"\nimport script from \"./Animate.vue?vue&type=script&lang=js\"\nexport * from \"./Animate.vue?vue&type=script&lang=js\"\n\nimport \"./Animate.vue?vue&type=style&index=0&id=71cae6ae&lang=scss&scoped=true\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-71cae6ae\"]])\n\nexport default __exports__","import { render } from \"./Group.vue?vue&type=template&id=4de1a560\"\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=4de1a560&lang=scss\"\nimport \"./Group.vue?vue&type=style&index=1&id=4de1a560&lang=scss\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./Index.vue?vue&type=template&id=781dd72c&scoped=true\"\nimport script from \"./Index.vue?vue&type=script&lang=js\"\nexport * from \"./Index.vue?vue&type=script&lang=js\"\n\nimport \"./Index.vue?vue&type=style&index=0&id=781dd72c&lang=scss&scoped=true\"\nimport \"./Index.vue?vue&type=style&index=1&id=781dd72c&lang=scss\"\n\nimport exportComponent from \"../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-781dd72c\"]])\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","_createElementBlock","_hoisted_1","$props","withRange","_normalizeClass","withLabel","_toDisplayString","range","_createElementVNode","_hoisted_4","type","step","disabled","value","onInput","_cache","_withModifiers","args","$options","onUpdate","onChange","_hoisted_6","_hoisted_7","name","emits","props","Number","Boolean","default","Array","methods","event","update","target","$emit","$refs","sliderWidth","clientWidth","percent","innerWidth","thumb","style","left","transform","track","width","mounted","$watch","newValue","__exports__","render","onClick","checked","_hoisted_2","_hoisted_3","_renderSlot","_ctx","$slots","undefined","$data","selectedGroup","groups","_createVNode","_component_Groups","loadingGroups","colorConverter","onSelect","$event","onToggle","_component_Group","group","lights","displayedLights","scenes","scenesByGroup","animations","animationsByGroup","onClose","onLightToggle","onGroupToggle","onSetLight","onSetGroup","groupId","onSelectScene","sceneId","onStartAnimation","onStopAnimation","config","pluginName","String","required","data","loading","_createBlock","_component_MenuPanel","_component_ToggleSwitch","anyLightsOn","_Fragment","_renderList","groupsSorted","key","id","state","any_on","components","ToggleSwitch","MenuPanel","computed","entries","sort","localeCompare","values","_hoisted_11","_hoisted_13","_hoisted_15","title","close","selected","selectedView","groupName","_hoisted_9","_hoisted_10","_hoisted_17","_KeepAlive","lightsSorted","light","expanded","selectedLight","_component_Light","collapsed","_hoisted_19","scenesSorted","scene","selectedScene","onSceneSelected","_component_Scene","_hoisted_21","_component_Controls","_hoisted_22","_component_Animate","onStart","onStop","_hoisted_8","expandToggle","on","stopPropagation","_component_Loading","_component_Slider","onMouseup","_hoisted_5","temperature","rgbColor","onColorSelect","Loading","Slider","avg","i","reduce","sum","obj","forEach","getColor","split","t","hsl","Controls","animationRunning","toggleAnimation","selectedAnimation","_hoisted_12","_hoisted_14","_component_RangeSlider","color_transition","hue_range","_hoisted_16","_hoisted_18","sat_range","_hoisted_20","bri_range","_hoisted_23","_hoisted_24","hue_step","_hoisted_25","_hoisted_26","_hoisted_27","sat_step","_hoisted_28","_hoisted_29","_hoisted_30","bri_step","_hoisted_31","_hoisted_32","_hoisted_33","transition_seconds","_hoisted_35","_hoisted_36","_hoisted_37","duration","_hoisted_39","_hoisted_40","selectedLights","filter","v","toggleSelectAll","onMousedown","onTouchstart","onTouchend","onKeyup","onKeydown","input","mixins","Utils","RangeSlider","runningAnimations","animation","lightId","blink","select","eventType","notifyWarning","Animate","Light","Scene","Group","Groups","Panel","loadingLights","initialGroup","initialized","groupsByLight","self","initSelectedGroup","unwatch","newVal","refresh","onLightChange","plugin_name","light_id","onAnimationChange","subscribe","unmounted","unsubscribe"],"sourceRoot":""}