platypush/platypush/backend/http/webapp/dist/static/js/9751.13b1d6f1.js.map

1 line
92 KiB
Plaintext

{"version":3,"file":"static/js/9751.13b1d6f1.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=\"$emit('input', $event)\"\n @change.stop=\"$emit('change', $event)\">\n\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 emits: ['input', 'change'],\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</script>\n\n<style lang=\"scss\" scoped>\n$label-width: 3em;\n$thumb-height: 1em;\n$slider-height: 0.5em;\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 input.slider {\n width: 100%;\n background: none;\n height: 1.5em;\n position: relative;\n border-radius: 0.5em;\n cursor: pointer;\n outline: none;\n overflow: hidden;\n transition: all ease 100ms;\n @include appearance(none);\n\n &:active {\n filter: brightness(80%);\n cursor: grabbing;\n }\n\n &:hover {\n filter: saturate(130%);\n }\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n filter: grayscale(1);\n }\n\n /* Chrome and friends */\n &::-webkit-slider-runnable-track {\n position: relative;\n border-radius: $slider-height;\n background: linear-gradient($slider-bg 0 0) scroll no-repeat center /\n 100% calc(#{$slider-height} + 1px);\n }\n\n &::-webkit-slider-runnable-track,\n &::-webkit-slider-thumb {\n -webkit-appearance: none;\n transition: all ease 100ms;\n height: $thumb-height;\n }\n\n &::-webkit-slider-thumb {\n --clip-top: calc((#{$thumb-height} - #{$slider-height}) * 0.5);\n --clip-bottom: calc(#{$thumb-height} - var(--clip-top));\n --clip-further: calc(100% + 1px);\n\n width: $thumb-height;\n background: $slider-progress-bg;\n box-shadow: calc(-100vmax - #{$thumb-height} + 2.5px) #{$slider-height} #{$slider-height} 100vmax #{$slider-progress-bg};\n border-radius: $thumb-height;\n cursor: grab;\n\n &:hover {\n filter: brightness(130%) blur(1px);\n cursor: grab;\n }\n\n clip-path: polygon(\n 100% -1px,\n #{$slider-height} -1px,\n 0 var(--clip-top),\n -100vmax var(--clip-top),\n -100vmax var(--clip-bottom),\n 0 var(--clip-bottom),\n #{$slider-height} 100%,\n var(--clip-further) var(--clip-further)\n );\n }\n\n /* Firefox */\n &::-moz-range-track {\n background: $slider-bg;\n position: relative;\n height: $slider-height;\n border-radius: 0.5em;\n box-shadow: inset 1px 0px 3px 0 $slider-track-shadow;\n }\n\n &::-moz-range-thumb {\n $thumb-height: 1.125em;\n width: $thumb-height;\n height: $thumb-height;\n position: relative;\n background: $slider-thumb-bg;\n border-radius: 50%;\n border: none;\n cursor: grabbing;\n transition: all ease 100ms;\n @include appearance(none);\n\n &:hover {\n filter: brightness(130%) blur(1px);\n cursor: grab;\n }\n\n &:disabled {\n background: $slider-thumb-disabled-bg;\n cursor: not-allowed;\n }\n }\n\n &::-moz-range-progress {\n width: 100%;\n height: $slider-height;\n cursor: pointer;\n background: $slider-progress-bg;\n border-radius: 0.5em 0 0 0.5em;\n }\n }\n\n .range-labels {\n width: 100%;\n display: flex;\n\n .left {\n text-align: left;\n }\n\n .right {\n @extend .pull-right;\n flex-grow: 1;\n }\n }\n\n .label {\n width: $label-width;\n position: relative;\n font-weight: normal;\n text-align: center;\n }\n\n .with-label {\n width: calc(100% - $label-width);\n }\n}\n</style>\n","import { render } from \"./Slider.vue?vue&type=template&id=d90e850c&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=d90e850c&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-d90e850c\"]])\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\" :id=\"id\">\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 id: {\n type: String,\n },\n\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=eff375b6&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=eff375b6&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-eff375b6\"]])\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 @change.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 @change.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=9c012c62&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=9c012c62&lang=scss&scoped=true\"\nimport \"./Controls.vue?vue&type=style&index=1&id=9c012c62&lang=scss\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-9c012c62\"]])\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 @change=\"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 @change=\"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 @change=\"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=44c83513&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=44c83513&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-44c83513\"]])\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","_createElementBlock","_hoisted_1","$props","withRange","_normalizeClass","withLabel","_toDisplayString","range","_createElementVNode","_hoisted_4","type","step","disabled","value","ref","onInput","_cache","_withModifiers","$event","_ctx","$emit","onChange","emits","props","Number","Boolean","default","Array","__exports__","render","onClick","args","$options","checked","id","_hoisted_2","_hoisted_3","_renderSlot","$slots","undefined","name","String","methods","event","$data","selectedGroup","groups","_createVNode","_component_Groups","loadingGroups","colorConverter","onSelect","onToggle","_component_Group","group","lights","displayedLights","scenes","scenesByGroup","animations","animationsByGroup","onClose","onLightToggle","onGroupToggle","onSetLight","onSetGroup","groupId","onSelectScene","sceneId","onStartAnimation","onStopAnimation","config","pluginName","required","data","loading","mounted","_createBlock","_component_MenuPanel","_component_ToggleSwitch","anyLightsOn","_Fragment","_renderList","groupsSorted","key","_hoisted_6","_hoisted_7","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","target","_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","onMouseup","_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","onUpdate","onMousedown","onTouchstart","onTouchend","onKeyup","onKeydown","$refs","input","mixins","Utils","RangeSlider","runningAnimations","animation","lightId","blink","select","eventType","notifyWarning","Animate","Light","Scene","Group","Groups","Panel","loadingLights","initialGroup","initialized","groupsByLight","self","initSelectedGroup","unwatch","$watch","newVal","refresh","onLightChange","plugin_name","light_id","onAnimationChange","subscribe","unmounted","unsubscribe"],"sourceRoot":""}