platypush/platypush/backend/http/dist/static/js/chunk-3d60f62e.907e4050.js.map

1 line
96 KiB
Plaintext

{"version":3,"sources":["webpack:///./src/components/elements/RangeSlider.vue?740c","webpack:///./node_modules/@babel/runtime/helpers/esm/classCallCheck.js","webpack:///./node_modules/@babel/runtime/helpers/esm/createClass.js","webpack:///./src/components/panels/Light/color.js","webpack:///./src/components/MenuPanel.vue?28db","webpack:///./node_modules/core-js/modules/es.array.filter.js","webpack:///./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack:///./node_modules/@babel/runtime/helpers/esm/objectSpread2.js","webpack:///./src/components/elements/ToggleSwitch.vue?ebb3","webpack:///./src/components/Light/Animate.vue?0b31","webpack:///./src/components/Light/Groups.vue?c6f4","webpack:///./src/components/Light/Light.vue?969e","webpack:///./src/components/panels/Light/Index.vue?72b0","webpack:///./src/components/panels/Light/Index.vue?2196","webpack:///./src/components/Light/Controls.vue?05cb","webpack:///./src/components/panels/Light/Index.vue","webpack:///./src/components/panels/Panel.vue","webpack:///./src/components/panels/Panel.vue?ceb9","webpack:///./src/components/Light/Groups.vue","webpack:///./src/components/MenuPanel.vue","webpack:///./src/components/MenuPanel.vue?756e","webpack:///./src/components/elements/ToggleSwitch.vue","webpack:///./src/components/elements/ToggleSwitch.vue?7805","webpack:///./src/components/Light/Groups.vue?aa79","webpack:///./src/components/Light/Group.vue","webpack:///./src/components/Light/Light.vue","webpack:///./src/components/Light/Controls.vue","webpack:///./src/components/Light/Controls.vue?0df1","webpack:///./src/components/Light/Light.vue?94a9","webpack:///./src/components/Light/Scene.vue","webpack:///./src/components/Light/Scene.vue?f920","webpack:///./src/components/Light/Animate.vue","webpack:///./src/components/elements/RangeSlider.vue","webpack:///./src/components/elements/RangeSlider.vue?f117","webpack:///./src/components/Light/Animate.vue?18be","webpack:///./src/components/Light/Group.vue?5271","webpack:///./src/components/panels/Light/Index.vue?5e61","webpack:///./src/components/Light/Group.vue?f50d","webpack:///./node_modules/core-js/modules/es.object.get-own-property-descriptors.js","webpack:///./src/components/Light/Controls.vue?eb12","webpack:///./node_modules/core-js/modules/es.object.get-own-property-descriptor.js","webpack:///./src/components/Light/Group.vue?7b21"],"names":["_classCallCheck","instance","Constructor","TypeError","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_createClass","protoProps","staticProps","prototype","ColorConverter","ranges","this","hue","sat","bri","ct","keys","attr","x","xRange","yRange","h","s","l","normalize","a","Math","min","f","n","k","color","max","round","r","g","b","d","parseInt","y","brightness","z","Y","toFixed","X","Z","red","green","blue","pow","isNaN","map","c","parseFloat","rgbToHsl","rgb","xy","getRGB","getXY","xyToRgb","hslToRgb","console","debug","rgbToXY","$","$filter","filter","arrayMethodHasSpeciesSupport","arrayMethodUsesToLength","HAS_SPECIES_SUPPORT","USES_TO_LENGTH","proto","forced","callbackfn","arguments","undefined","_defineProperty","obj","value","ownKeys","object","enumerableOnly","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","push","apply","_objectSpread2","source","forEach","getOwnPropertyDescriptors","defineProperties","class","selectedGroup","groups","loading-groups","loadingGroups","color-converter","colorConverter","$event","$emit","group","lights","displayedLights","scenes","scenesByGroup","animations","animationsByGroup","name","emits","config","type","default","pluginName","String","required","data","loading","mounted","anyLightsOn","groupsSorted","id","state","any_on","disabled","render","onInput","checked","Boolean","methods","event","stopPropagation","__scopeId","components","ToggleSwitch","MenuPanel","computed","entries","sort","localeCompare","values","title","close","selectedView","lightsSorted","light","selectedLight","collapsed","scenesSorted","scene","selectedScene","onSceneSelected","running-animations","ref","expandToggle","on","range","rgbColor","onColorSelect","Loading","Slider","avg","Array","reduce","sum","getColor","toRGB","hex","toString","join","slice","split","t","hsl","rgbToBri","toXY","toHSL","Controls","onSelect","animationRunning","toggleAnimation","selectedAnimation","color_transition","hue_range","sat_range","bri_range","hue_step","sat_step","bri_step","transition_seconds","step","duration","selectedLights","v","toggleSelectAll","input","changed","mouseup","mousedown","getEvent","$refs","self","mixins","Utils","RangeSlider","runningAnimations","animation","lightId","blink","select","eventType","warn","Animate","Light","Scene","groupName","sceneId","Group","Groups","Panel","loadingLights","initialGroup","Number","initialized","groupsByLight","groupId","initSelectedGroup","unwatch","$watch","newVal","refresh","onLightChange","plugin_name","light_id","onAnimationChange","subscribe","unmounted","unsubscribe","DESCRIPTORS","toIndexedObject","getOwnPropertyDescriptorModule","createProperty","stat","sham","O","result","index","fails","nativeGetOwnPropertyDescriptor","FAILS_ON_PRIMITIVES","FORCED","it"],"mappings":"kHAAA,W,4KCAe,SAASA,EAAgBC,EAAUC,GAChD,KAAMD,aAAoBC,GACxB,MAAM,IAAIC,UAAU,qCCFxB,SAASC,EAAkBC,EAAQC,GACjC,IAAK,IAAIC,EAAI,EAAGA,EAAID,EAAME,OAAQD,IAAK,CACrC,IAAIE,EAAaH,EAAMC,GACvBE,EAAWC,WAAaD,EAAWC,aAAc,EACjDD,EAAWE,cAAe,EACtB,UAAWF,IAAYA,EAAWG,UAAW,GACjDC,OAAOC,eAAeT,EAAQI,EAAWM,IAAKN,IAInC,SAASO,EAAad,EAAae,EAAYC,GAG5D,OAFID,GAAYb,EAAkBF,EAAYiB,UAAWF,GACrDC,GAAad,EAAkBF,EAAagB,GACzChB,ECbF,IAAMkB,EAAb,WACI,WAAYC,GAQR,GARgB,UAChBC,KAAKD,OAAS,CACVE,IAAK,CAAC,EAAG,KACTC,IAAK,CAAC,EAAG,KACTC,IAAK,CAAC,EAAG,KACTC,GAAI,CAAC,IAAK,MAGVL,EACA,IAAK,IAAL,MAAmBR,OAAOc,KAAKL,KAAKD,QAApC,gBAAK,IAAMO,EAAI,KACPP,EAAOO,KACPN,KAAKD,OAAOO,GAAQP,EAAOO,KAZ/C,4CAecC,EAAGC,EAAQC,GACjB,OAAOA,EAAO,IAAQF,EAAEC,EAAO,KAAOC,EAAO,GAAGA,EAAO,KAAQD,EAAO,GAAGA,EAAO,MAhBxF,+BAmBaE,EAAGC,EAAGC,GAAG,MACF,CACRZ,KAAKa,UAAUH,EAAGV,KAAKD,OAAOE,IAAK,CAAC,EAAG,MACvCD,KAAKa,UAAUF,EAAGX,KAAKD,OAAOG,IAAK,CAAC,EAAG,MACvCF,KAAKa,UAAUD,EAAGZ,KAAKD,OAAOI,IAAK,CAAC,EAAG,OAH1CO,EADa,KACVC,EADU,KACPC,EADO,KAOdA,GAAK,IACL,IAAME,EAAIH,EAAII,KAAKC,IAAIJ,EAAG,EAAIA,GAAK,IAC7BK,EAAI,SAAAC,GACN,IAAMC,GAAKD,EAAIR,EAAI,IAAM,GACnBU,EAAQR,EAAIE,EAAIC,KAAKM,IAAIN,KAAKC,IAAIG,EAAI,EAAG,EAAIA,EAAG,IAAK,GAC3D,OAAOJ,KAAKO,MAAM,IAAMF,IAG5B,MAAO,CAACH,EAAE,GAAIA,EAAE,GAAIA,EAAE,MAlC9B,+BAqCaM,EAAGC,EAAGC,GACXF,GAAK,IACLC,GAAK,IACLC,GAAK,IACL,IACIf,EAAGC,EADDU,EAAMN,KAAKM,IAAIE,EAAGC,EAAGC,GAAIT,EAAMD,KAAKC,IAAIO,EAAGC,EAAGC,GAC1Cb,GAAKS,EAAML,GAAO,EAE5B,GAAGK,IAAQL,EACPN,EAAIC,EAAI,MACL,CACH,IAAMe,EAAIL,EAAML,EAGhB,OAFAL,EAAIC,EAAI,GAAMc,GAAK,EAAIL,EAAML,GAAOU,GAAKL,EAAML,GAExCK,GACH,KAAKE,EAAGb,GAAKc,EAAIC,GAAKC,GAAKF,EAAIC,EAAI,EAAI,GAAI,MAC3C,KAAKD,EAAGd,GAAKe,EAAIF,GAAKG,EAAI,EAAG,MAC7B,KAAKD,EAAGf,GAAKa,EAAIC,GAAKE,EAAI,EAAG,MAEjChB,GAAK,EAGT,MAAO,CACHiB,SAAS3B,KAAKa,UAAUH,EAAG,CAAC,EAAG,GAAIV,KAAKD,OAAOE,MAC/C0B,SAAS3B,KAAKa,UAAUF,EAAG,CAAC,EAAG,GAAIX,KAAKD,OAAOG,MAC/CyB,SAAS3B,KAAKa,UAAUD,EAAG,CAAC,EAAG,GAAIZ,KAAKD,OAAOI,SA7D3D,8BAiEYI,EAAGqB,EAAGC,GAEQ,MAAdA,IACAA,EAAa7B,KAAKD,OAAOI,IAAI,IAEjC,IAAM2B,EAAI,EAAMvB,EAAIqB,EACdG,GAAKF,GAAc7B,KAAKD,OAAOI,IAAI,GAAG,IAAI6B,QAAQ,GAClDC,EAAKF,EAAIH,EAAKrB,EACd2B,EAAKH,EAAIH,EAAKE,EAGhBK,EAAY,SAAJF,EAAmB,QAAJF,EAAmB,QAAJG,EACtCE,EAAe,SAAJH,EAAmB,SAAJF,EAAmB,QAAJG,EACzCG,EAAa,QAAJJ,EAAmB,QAAJF,EAAmB,QAAJG,EAkC3C,OA/BIC,EAAME,GAAQF,EAAMC,GAASD,EAAM,GACnCC,GAAgBD,EAChBE,GAAcF,EACdA,EAAM,GACCC,EAAQC,GAAQD,EAAQD,GAAOC,EAAQ,GAC9CD,GAAYC,EACZC,GAAcD,EACdA,EAAQ,GACDC,EAAOF,GAAOE,EAAOD,GAASC,EAAO,IAC5CF,GAAYE,EACZD,GAAgBC,EAChBA,EAAO,GAIXF,EAAOA,GAAO,SAAY,MAAQA,EAAM,MAAgBpB,KAAKuB,IAAIH,EAAM,EAAM,KAAQ,KACrFC,EAASA,GAAS,SAAY,MAAQA,EAAQ,MAAgBrB,KAAKuB,IAAIF,EAAQ,EAAM,KAAQ,KAC7FC,EAAQA,GAAQ,SAAY,MAAQA,EAAO,MAAgBtB,KAAKuB,IAAID,EAAO,EAAM,KAAQ,KAGzFF,EAAOpB,KAAKO,MAAY,IAANa,GAClBC,EAASrB,KAAKO,MAAc,IAARc,GACpBC,EAAQtB,KAAKO,MAAa,IAAPe,GAEfE,MAAMJ,KACNA,EAAM,GACNI,MAAMH,KACNA,EAAQ,GACRG,MAAMF,KACNA,EAAO,GAEJ,CAACF,EAAKC,EAAOC,GAAMG,KAAI,SAACC,GAAD,OAAO1B,KAAKC,IAAID,KAAKM,IAAI,EAAGoB,GAAI,UAhHtE,8BAmHYN,EAAKC,EAAOC,GACZF,EAAM,IAAKA,GAAO,KAClBC,EAAQ,IAAKA,GAAS,KACtBC,EAAO,IAAKA,GAAQ,KAGxBF,EAAQA,EAAM,OAAWpB,KAAKuB,KAAKH,EAAM,MAAP,MAA+B,KAAQA,EAAM,MAC/EC,EAAUA,EAAQ,OAAWrB,KAAKuB,KAAKF,EAAQ,MAAT,MAAiC,KAAQA,EAAQ,MACvFC,EAASA,EAAO,OAAWtB,KAAKuB,KAAKD,EAAO,MAAR,MAAgC,KAAQA,EAAO,MAGnF,IAAMJ,EAAY,QAANE,EAAyB,QAARC,EAA0B,QAAPC,EAC1CN,EAAY,QAANI,EAAyB,QAARC,EAA0B,QAAPC,EAC1CH,EAAY,MAANC,EAAyB,OAARC,EAA0B,QAAPC,EAG5C9B,EAAMmC,YAAYT,GAAKA,EAAIF,EAAIG,IAAIF,QAAQ,IAC3CJ,EAAMc,YAAYX,GAAKE,EAAIF,EAAIG,IAAIF,QAAQ,IAO/C,OALIO,MAAMhC,KACNA,EAAI,GACJgC,MAAMX,KACNA,EAAI,GAED,CAACrB,EAAGqB,KA3InB,+BA8IaO,EAAKC,EAAOC,GACjB,OAAOtB,KAAKC,IAAI,EAAIhB,KAAK2C,SAASR,EAAKC,EAAOC,GAAM,GAAIrC,KAAKD,OAAOI,IAAI,MA/IhF,6BAkJWiB,GACH,OAAiB,MAAbA,EAAMe,KAA8B,MAAff,EAAMgB,OAA+B,MAAdhB,EAAMiB,KAC3C,CAACjB,EAAMe,IAAKf,EAAMgB,MAAOhB,EAAMiB,MAC3B,MAAXjB,EAAMG,GAAwB,MAAXH,EAAMI,GAAwB,MAAXJ,EAAMK,EACrC,CAACL,EAAMG,EAAGH,EAAMI,EAAGJ,EAAMK,GAChCL,EAAMwB,IACCxB,EAAMwB,SADjB,IAvJR,4BA2JUxB,GACF,OAAe,MAAXA,EAAMb,GAAwB,MAAXa,EAAMQ,EAClB,CAACR,EAAMb,EAAGa,EAAMQ,GACvBR,EAAMyB,GACCzB,EAAMyB,QADjB,IA9JR,4BAkKUzB,GACF,IAAMwB,EAAM5C,KAAK8C,OAAO1B,GACxB,GAAIwB,EACA,OAAOA,EAEX,IAAMC,EAAK7C,KAAK+C,MAAM3B,GACtB,OAAIyB,GAAMzB,EAAMjB,IACLH,KAAKgD,QAAL,MAAAhD,KAAA,eAAgB6C,GAAhB,QAAoBzB,EAAMjB,OACjCiB,EAAMnB,KAAOmB,EAAMlB,KAAOkB,EAAMjB,IACzBH,KAAKiD,SAAS7B,EAAMnB,IAAKmB,EAAMlB,IAAKkB,EAAMjB,MAErD+C,QAAQC,MAAM,wCACdD,QAAQC,MAAM/B,MA9KtB,2BAiLSA,GACD,IAAMyB,EAAK7C,KAAK+C,MAAM3B,GACtB,GAAIyB,GAAMzB,EAAMjB,IACZ,MAAO,CAAC0C,EAAG,GAAIA,EAAG,GAAIzB,EAAMjB,KAEhC,IAAMyC,EAAM5C,KAAK8C,OAAO1B,GACxB,GAAIwB,EACA,OAAO5C,KAAKoD,QAAL,MAAApD,KAAA,eAAgB4C,IAE3B,GAAIxB,EAAMnB,KAAOmB,EAAMlB,KAAOkB,EAAMjB,IAAK,CACrC,IAAMyC,EAAM5C,KAAKiD,SAAS7B,EAAMnB,IAAKmB,EAAMlB,IAAKkB,EAAMjB,KACtD,OAAOH,KAAKoD,QAAL,MAAApD,KAAA,eAAgB4C,IAG3BM,QAAQC,MAAM,mCACdD,QAAQC,MAAM/B,KAhMtB,4BAmMUA,GACF,GAAIA,EAAMnB,KAAOmB,EAAMlB,KAAOkB,EAAMjB,IAChC,MAAO,CAACiB,EAAMnB,IAAKmB,EAAMlB,IAAKkB,EAAMjB,KAExC,IAAMyC,EAAM5C,KAAK8C,OAAO1B,GACxB,GAAIwB,EACA,OAAO5C,KAAK2C,SAAL,MAAA3C,KAAA,eAAiB4C,IAE5B,IAAMC,EAAK7C,KAAK+C,MAAM3B,GACtB,GAAIyB,GAAMzB,EAAMjB,IAAK,CACjB,IAAMyC,EAAM5C,KAAKgD,QAAL,MAAAhD,KAAA,eAAgB6C,GAAhB,QAAoBzB,EAAMjB,OACtC,OAAOH,KAAK2C,SAAL,MAAA3C,KAAA,eAAiB4C,IAG5BM,QAAQC,MAAM,mCACdD,QAAQC,MAAM/B,OAlNtB,M,2DCAA,W,oCCCA,IAAIiC,EAAI,EAAQ,QACZC,EAAU,EAAQ,QAAgCC,OAClDC,EAA+B,EAAQ,QACvCC,EAA0B,EAAQ,QAElCC,EAAsBF,EAA6B,UAEnDG,EAAiBF,EAAwB,UAK7CJ,EAAE,CAAEtE,OAAQ,QAAS6E,OAAO,EAAMC,QAASH,IAAwBC,GAAkB,CACnFJ,OAAQ,SAAgBO,GACtB,OAAOR,EAAQtD,KAAM8D,EAAYC,UAAU7E,OAAS,EAAI6E,UAAU,QAAKC,O,mKCf5D,SAASC,EAAgBC,EAAKzE,EAAK0E,GAYhD,OAXI1E,KAAOyE,EACT3E,OAAOC,eAAe0E,EAAKzE,EAAK,CAC9B0E,MAAOA,EACP/E,YAAY,EACZC,cAAc,EACdC,UAAU,IAGZ4E,EAAIzE,GAAO0E,EAGND,ECVT,SAASE,EAAQC,EAAQC,GACvB,IAAIjE,EAAOd,OAAOc,KAAKgE,GAEvB,GAAI9E,OAAOgF,sBAAuB,CAChC,IAAIC,EAAUjF,OAAOgF,sBAAsBF,GACvCC,IAAgBE,EAAUA,EAAQjB,QAAO,SAAUkB,GACrD,OAAOlF,OAAOmF,yBAAyBL,EAAQI,GAAKrF,eAEtDiB,EAAKsE,KAAKC,MAAMvE,EAAMmE,GAGxB,OAAOnE,EAGM,SAASwE,EAAe9F,GACrC,IAAK,IAAIE,EAAI,EAAGA,EAAI8E,UAAU7E,OAAQD,IAAK,CACzC,IAAI6F,EAAyB,MAAhBf,UAAU9E,GAAa8E,UAAU9E,GAAK,GAE/CA,EAAI,EACNmF,EAAQ7E,OAAOuF,IAAS,GAAMC,SAAQ,SAAUtF,GAC9CD,EAAeT,EAAQU,EAAKqF,EAAOrF,OAE5BF,OAAOyF,0BAChBzF,OAAO0F,iBAAiBlG,EAAQQ,OAAOyF,0BAA0BF,IAEjEV,EAAQ7E,OAAOuF,IAASC,SAAQ,SAAUtF,GACxCF,OAAOC,eAAeT,EAAQU,EAAKF,OAAOmF,yBAAyBI,EAAQrF,OAKjF,OAAOV,I,oCCjCT,W,6GCAA,W,6DCAA,W,oCCAA,W,kCCAA,W,kCCAA,W,kCCAA,W,gJCCOmG,MAAM,wB,SACJA,MAAM,S,SAINA,MAAM,S,iIALb,eAcM,MAdN,EAcM,CAbkC,MAAb,EAAAC,eAAyB,EAAAC,QAAU7F,OAAOc,KAAK,EAAA+E,QAAQlG,Q,iBAAhF,eAGM,MAHN,EAGM,CAFJ,eACmF,GAD1EkG,OAAQ,EAAAA,OAASC,iBAAgB,EAAAC,cAAgBC,kBAAiB,EAAAC,eAClE,SAAM,+BAAE,EAAAL,cAAgBM,IAAS,SAAM,+BAAE,EAAAC,MAAK,eAAiBD,M,2EAE1E,eAQM,MARN,EAQM,CAPJ,eAM+G,GANvGE,MAAO,EAAAP,OAAO,EAAAD,eAAiBS,OAAQ,EAAAC,gBAAkBC,OAAQ,EAAAC,cAAc,EAAAZ,eAC/EI,kBAAiB,EAAAC,eAAiBQ,WAAY,EAAAC,kBAAkB,EAAAd,eAAiB,QAAK,+BAAE,EAAAA,cAAa,OACrG,cAAY,+BAAE,EAAAO,MAAK,eAAiBD,KAAU,cAAY,+BAAE,EAAAC,MAAK,eAAiBD,KAClF,WAAS,+BAAE,EAAAC,MAAK,YAAcD,KAC9B,WAAS,+BAAE,EAAAC,MAAK,qBAAwB,EAAAP,cAAa,MAASM,MAC9D,cAAY,+BAAE,EAAAC,MAAK,wBAA2B,EAAAP,cAAa,QAAWM,MACtE,iBAAe,+BAAE,EAAAC,MAAK,kBAAoBD,KAAU,gBAAc,iCAAE,EAAAC,MAAK,iBAAmBD,M,6KCZ3F,GACbS,KAAM,QACNC,MAAO,CAAC,WACRnH,MAAO,CAELoH,OAAQ,CACNC,KAAM9G,OACN+G,QAAS,cAIXC,WAAY,CACVF,KAAMG,OACNC,UAAU,IAIdC,KAjBa,WAkBX,MAAO,CACLC,SAAS,IAIbC,QAvBa,WAwBX5G,KAAK0F,MAAM,UAAW1F,QCtBX,I,yFCDNkF,MAAM,oB,EACT,eAEM,OAFDA,MAAM,SAAO,CAChB,eAA8B,KAA3BA,MAAM,uB,KAEX,eAEM,OAFDA,MAAM,cAAa,WAExB,G,GACKA,MAAM,oB,GAMLA,MAAM,c,GAGNA,MAAM,6B,2IAjBhB,eAsBY,Q,WArBV,iBAUM,CAVN,eAUM,MAVN,EAUM,CATJ,EAGA,EAGA,eAEM,MAFN,EAEM,CADJ,eAA8D,GAA/Cf,MAAO,EAAA0C,YAAc,QAAK,+BAAE,EAAAnB,MAAK,a,0CAIpD,eAQM,2BAR2C,EAAAoB,cAAY,SAArBnB,G,wBAAxC,eAQM,OARDT,MAAM,sBAAqDzF,IAAKkG,EAAMoB,GAAK,QAAK,mBAAE,EAAArB,MAAK,SAAWC,EAAMoB,M,CAC3G,eAEO,OAFP,EAEO,eADFpB,EAAMO,MAAN,iBAAwBP,EAAMoB,GAA9B,MAAgC,GAErC,eAGO,OAHP,EAGO,CAFL,eACgD,GADjC5C,MAAOwB,EAAMqB,MAAMC,OAASC,SAAUvB,EAAMoB,MAAO,EAAAzB,eAAa,IAChE,QAAK,mBAAE,EAAAI,MAAK,SAAWC,K,6FCnBvCT,MAAM,e,GACJA,MAAM,W,gDADb,eAIM,MAJN,EAIM,CAHJ,eAEM,MAFN,EAEM,CADJ,eAAQ,wBAMC,OACbgB,KAAM,a,UCLR,EAAOiB,OAAS,EAED,Q,4ECDT,eAEM,OAFDjC,MAAM,UAAQ,CACjB,eAAmB,OAAdA,MAAM,U,MAEPA,MAAM,S,wEARhB,eAYM,OAZDA,MAAK,CAAC,eAAc,UAAoB,EAAAgC,WAAY,QAAK,8BAAE,EAAAE,QAAA,sB,CAE9D,eAAwC,SAAjCf,KAAK,WAAYgB,QAAS,EAAAlD,O,oBACjC,eAQQ,cANN,EAGA,eAEO,OAFP,EAEO,CADL,eAAQ,yB,MAOD,GACb+B,KAAM,eACNC,MAAO,CAAC,SACRnH,MAAO,CACLmF,MAAO,CACLkC,KAAMiB,QACNhB,SAAS,GAGXY,SAAU,CACRb,KAAMiB,QACNhB,SAAS,IAIbiB,QAAS,CACPH,QADO,SACCI,GAEN,GADAA,EAAMC,kBACFzH,KAAKkH,SACP,OAAO,EAETlH,KAAK0F,MAAM,QAAS8B,M,UCjC1B,EAAOL,OAAS,EAChB,EAAOO,UAAY,kBAEJ,Q,YJuBA,GACbxB,KAAM,SACNyB,WAAY,CAACC,eAAcC,aAC3B1B,MAAO,CAAC,SAAU,UAClBnH,MAAO,CACLoG,OAAQ,CACNiB,KAAM9G,OACN+G,QAAS,cAGXhB,cAAe,CACbe,KAAM9G,OACN+G,QAAS,cAGXd,eAAgB,CACda,KAAM9G,OACN+G,QAAS,kBAAM,IAAI,UAIvBwB,SAAU,CACRhB,aADQ,WAEN,OAAOvH,OAAOwI,QAAQ/H,KAAKoF,QACtB4C,MAAK,SAAClH,EAAGW,GAAJ,OAAUX,EAAE,GAAGoF,KAAK+B,cAAcxG,EAAE,GAAGyE,SAC5C1D,KAAI,YAAiB,0BAAfuE,EAAe,KAAXpB,EAAW,KACpB,wCACKA,GADL,IAEEoB,GAAIA,QAKdF,YAZQ,WAaN,cAAoBtH,OAAO2I,OAAOlI,KAAKoF,QAAvC,sBAAWO,EAAI,KACb,UAAIA,QAAJ,IAAIA,GAAJ,UAAIA,EAAOqB,aAAX,aAAI,EAAcC,OAChB,OAAO,EAEX,OAAO,K,UKhEb,EAAOE,OAAS,EAChB,EAAOO,UAAY,kBAEJ,Q,GCPRxC,MAAM,yB,GAEFA,MAAM,oB,SACJA,MAAM,S,EAEP,eAAiC,KAA9BA,MAAM,uBAAqB,S,SAO7BA,MAAM,oB,SAKRA,MAAM,a,SAINA,MAAM,e,GACJA,MAAM,qB,EAEP,eAAmC,KAAhCA,MAAM,yBAAuB,S,EAGhC,eAA+B,KAA5BA,MAAM,qBAAmB,S,EAG5B,eAA+B,KAA5BA,MAAM,qBAAmB,S,SAI3BA,MAAM,gB,SAYNA,MAAM,gB,SASNA,MAAM,+B,SAONA,MAAM,+B,gOA9DjB,eAsEM,MAtEN,EAsEM,CArEJ,eAoEY,Q,wBAnEV,iBAaM,CAbN,eAaM,MAbN,EAaM,CAZqB,EAAAS,O,iBAAzB,eAIM,MAJN,EAIM,CAHJ,eAES,UAFDT,MAAM,WAAWiD,MAAM,OAAQ,QAAK,8BAAE,EAAAC,MAAA,sB,CAC5C,O,sBAIJ,eAC4F,OADvFlD,MAAK,CAAC,aAAY,UAAgC,UAAZ,EAAAmD,e,YACtC,eAAkB,EAAD,WAAG,QAAK,+BAAE,EAAAA,aAA2B,UAAZ,EAAAA,aAAY,gB,yBAEvB,EAAA1C,O,iBAApC,eAEM,MAFN,EAEM,CADJ,eAAkF,GAAnExB,MAAO,EAAAwB,MAAMqB,MAAMC,OAAS,QAAK,+BAAE,EAAAvB,MAAK,eAAiB,EAAAC,U,6CAI9C,EAAAC,QAAWrG,OAAOc,KAAK,EAAAuF,QAAQ1G,Q,iBAI7D,eA+CM,MA/CN,EA+CM,CA9CJ,eAUM,MAVN,EAUM,CATJ,eAES,UAFAgG,MAAK,UAAyB,WAAZ,EAAAmD,cAA4BF,MAAM,SAAU,QAAK,+BAAE,EAAAE,aAAY,Y,CACxF,G,GAEF,eAES,UAFAnD,MAAK,UAAyB,WAAZ,EAAAmD,cAA4BF,MAAM,SAAU,QAAK,+BAAE,EAAAE,aAAY,Y,CACxF,G,GAEF,eAES,UAFAnD,MAAK,UAAyB,YAAZ,EAAAmD,cAA6BF,MAAM,UAAW,QAAK,+BAAE,EAAAE,aAAY,a,CAC1F,G,KAIwC,WAAZ,EAAAA,c,iBAAhC,eAUM,MAVN,EAUM,E,iBATJ,eAQa,c,mBAPX,eAMM,2BALqB,EAAAC,cAAY,SAA1BC,EAAOxB,G,wBADpB,eAMM,OAND7B,MAAK,CAAC,gBAAe,UAAoBqD,EAAMxB,KAAO,EAAAyB,gBACjB/I,IAAKsH,EACzC,QAAK,mBAAE,EAAAyB,cAAgB,EAAAA,gBAAkBD,EAAMxB,GAAE,KAAUwB,EAAMxB,K,CACrE,eAEwE,GAFhEwB,MAAOA,EAAQ5C,MAAO,EAAAA,MAAQ8C,UAAWF,EAAMxB,KAAO,EAAAyB,cACtDjD,kBAAiB,EAAAC,eAAiB,SAAM,mBAAE,EAAAE,MAAK,eAAiB6C,IAChE,WAAS,mBAAE,EAAA7C,MAAK,mBAAsB6C,EAAK,MAAS9C,M,qHAKjB,WAAZ,EAAA4C,c,iBAArC,eAOM,MAPN,EAOM,E,iBANJ,eAKa,c,mBAJX,eAGM,2BAFqB,EAAAK,cAAY,SAA1BC,EAAO5B,G,wBADpB,eAGM,OAHD7B,MAAK,CAAC,gBAAe,UAAoByD,EAAM5B,KAAO,EAAA6B,gBACjBnJ,IAAKsH,EAAK,QAAK,mBAAE,EAAA8B,gBAAgBF,EAAM5B,M,CAC/E,eAAuC,GAA/B4B,MAAOA,EAAQhD,MAAO,EAAAA,O,+DAK4B,UAAZ,EAAA0C,c,iBAApD,eAKM,MALN,EAKM,E,iBAJJ,eAGa,aAFX,eACoD,GADzC1C,MAAO,EAAAA,MAAQC,OAAQ,EAAAA,OAASL,kBAAiB,EAAAC,eACjD,WAAS,+BAAE,EAAAE,MAAK,YAAcD,M,wDAImB,YAAZ,EAAA4C,c,iBAApD,eAKM,MALN,EAKM,E,iBAJJ,eAGa,aAFX,eAC6F,GADnF1C,MAAO,EAAAA,MAAQC,OAAQ,EAAAA,OAASL,kBAAiB,EAAAC,eAAiBsD,qBAAoB,EAAA9C,WACtF,QAAK,+BAAE,EAAAN,MAAK,kBAAoBD,KAAU,OAAI,+BAAE,EAAAC,MAAK,iBAAmBD,M,wHAhDxF,eAEM,MAFN,EAAqE,0B,yFChBlEP,MAAM,O,IAIHA,MAAM,2B,UAKTA,MAAM,e,2IAVb,eAcM,OAdDA,MAAK,CAAC,QAAO,WAAqB,EAAAuD,YAAYM,IAAI,W,CACrD,eAOM,MAPN,EAOM,CANJ,eAEO,QAFD7D,MAAM,aAAc,QAAK,8BAAE,EAAA8D,aAAA,sB,eAC5B,EAAAT,MAAMrC,MAAN,iBAAwB,EAAAqC,MAAMxB,GAA9B,MAAgC,GAErC,eAEO,OAFP,GAEO,CADL,eAA4F,GAA7E5C,MAAO,EAAAoE,MAAMvB,MAAMiC,GAAK/B,SAAU,EAAAP,QAAU,QAAK,+BAAE,EAAAjB,MAAK,SAAW,EAAA6C,U,iCAItD,EAAAE,U,wCAAhC,eAGM,MAHN,GAGM,CAFJ,eACoD,GADzCF,MAAO,EAAAA,MAAQ5B,QAAS,EAAAA,QAAUpB,kBAAiB,EAAAC,eACnD,WAAS,+BAAE,EAAAE,MAAK,YAAcD,M,6ICTtCP,MAAM,O,GACT,eAEM,OAFDA,MAAM,cAAY,CACrB,eAAwB,KAArBA,MAAM,iB,OAENA,MAAM,kB,UAMRA,MAAM,O,GACT,eAEM,OAFDA,MAAM,cAAY,CACrB,eAAqC,KAAlCA,MAAM,8B,OAENA,MAAM,kB,UAMNA,MAAM,O,GACX,eAEO,QAFDA,MAAM,cAAY,CACtB,eAA4B,KAAzBA,MAAM,qB,OAELA,MAAM,kB,qIA3BhB,eA+BM,OA/BDA,MAAM,0BAA2B,QAAK,+BAAEO,EAAOgC,qB,CACnC,EAAAd,S,iBAAf,eAA0B,Y,sBAEM,MAAT,EAAAK,MAAM7G,K,iBAA7B,eAQM,MARN,GAQM,CAPJ,GAGA,eAGM,MAHN,GAGM,CAFJ,eACgH,GADvG+I,MAAO,EAAA1D,eAAezF,OAAOI,IAAM+G,SAAU,EAAAP,QAAUxC,MAAO,EAAA6C,MAAM7G,IACpE,UAAO,+CAAO,EAAAuF,MAAM,EAAA6C,MAAK,oCAA2C5G,SAAS8D,EAAO1G,OAAOoF,WAAK,Y,gEAI9E,MAAR,EAAA6C,MAAM5G,I,iBAA7B,eAQM,MARN,GAQM,CAPJ,GAGA,eAGM,MAHN,GAGM,CAFJ,eACiH,GADxG8I,MAAO,EAAA1D,eAAezF,OAAOK,GAAK8G,SAAU,EAAAP,QAAUxC,MAAO,EAAA6C,MAAM5G,GACnE,UAAO,+CAAO,EAAAsF,MAAM,EAAA6C,MAAK,qCAA4C5G,SAAS8D,EAAO1G,OAAOoF,WAAK,Y,gEAIrF,EAAAgF,U,iBAAzB,eAOQ,QAPR,GAOQ,CANN,GAGA,eAEO,OAFP,GAEO,CADL,eAAqE,SAA9D9C,KAAK,QAASlC,MAAO,EAAAgF,SAAW,SAAM,8CAAO,EAAAC,cAAA,qBAAa,Y,4KAW1D,IACblD,KAAM,WACNyB,WAAY,CAAC0B,WAAA,KAASC,UAAA,MACtBnD,MAAO,CAAC,YAAa,aACrBnH,MAAO,CACLuJ,MAAO,CACLlC,KAAM9G,QAGRqG,OAAQ,CACNS,KAAM9G,QAGRoG,MAAO,CACLU,KAAM9G,QAGRoH,QAAS,CACPN,KAAMiB,QACNhB,SAAS,GAGXd,eAAgB,CACda,KAAM9G,OACN+G,QAAS,kBAAM,IAAI,UAIvBwB,SAAU,CACRd,MADQ,WACA,QACN,aAAIhH,KAAKuI,aAAT,aAAI,EAAYvB,MACd,OAAOhH,KAAKuI,MAAMvB,MAEpB,IAAMA,GAAQ,UAAAhH,KAAK2F,aAAL,eAAYqB,QAAS,GACnC,IAAKhH,KAAK4F,OACR,OAAOoB,EAET,IAAMuC,EAAM,SAANA,EAAOrB,GACX,OAAMA,GAAUA,EAAOhJ,OAGnBgJ,EAAO,aAAcsB,MAChB,gBAAItB,EAAO,GAAG7H,QAAQmC,KAAI,SAACvD,GAChC,OAAOsK,EAAIrB,EAAO1F,KAAI,SAAC2B,GAAD,OAAWA,EAAMlF,UAGpCiJ,EAAOuB,QAAO,SAACC,EAAKvF,GAAN,OAAgBuF,EAAIvF,IAAO,GAAK+D,EAAOhJ,OAPnD,GAUX,wCACK8H,GACAzH,OAAOwI,QACNxI,OAAO2I,OAAOlI,KAAK4F,QAAQ6D,QAAO,SAACvF,EAAKqE,GAOtC,MANA,CAAC,MAAO,MAAO,MAAO,MAAO,KAAM,MAAO,QAAS,OAAQ,MAAMxD,SAAQ,SAACzE,GAAS,MACtD,OAAvB,UAAAiI,EAAMvB,aAAN,eAAc1G,MAChB4D,EAAI5D,GAAJ,0BAAiB4D,EAAI5D,IAAS,IAA9B,CAAmCiI,EAAMvB,MAAM1G,SAI5C4D,IACN,KACLuF,QAAO,SAACvF,EAAD,GAAyB,0BAAlB5D,EAAkB,KAAZ4H,EAAY,KAEhC,OADAhE,EAAI5D,GAAQiJ,EAAIrB,GACThE,IACN,MAIP9C,MAxCQ,WAyCN,OAAOpB,KAAK2J,SAAS3J,KAAKgH,QAG5BmC,SA5CQ,WA6CN,IAAMvG,EAAM5C,KAAKwF,eAAeoE,MAAM5J,KAAKgH,OAC3C,OAAIpE,EACK,IAAMA,EAAIJ,KAAI,SAACjC,GACpB,IAAIsJ,EAAMtJ,EAAEuJ,SAAS,IAGrB,OAFID,EAAI3K,OAAS,IACf2K,EAAM,IAAMA,GACPA,KACNE,KAAK,IAEH,OAIXxC,QAAS,CACP6B,cADO,SACO5B,GAAO,UACb5E,EAAM4E,EAAMzI,OAAOoF,MAAM6F,MAAM,GAAGC,MAAM,gBAAgBzH,KAAI,SAAC0H,GAAD,OAAOvI,SAAS,KAAD,OAAMuI,OACvFlK,KAAK0F,MAAM1F,KAAKuI,MAAQ,YAAc,YAAa,CACjD3F,IAAKA,EACLC,IAAI,EAAA7C,KAAKwF,gBAAepC,QAApB,wBAA+BR,IACnCuH,KAAK,EAAAnK,KAAKwF,gBAAe7C,SAApB,wBAAgCC,IACrCf,YAAY,EAAA7B,KAAKwF,gBAAe4E,SAApB,wBAAgCxH,OAIhD+G,SAXO,SAWE3C,GACP,MAAO,CACLpE,IAAK5C,KAAKwF,eAAeoE,MAAM5C,GAC/BnE,GAAI7C,KAAKwF,eAAe6E,KAAKrD,GAC7BmD,IAAKnK,KAAKwF,eAAe8E,MAAMtD,O,oBCvIvC,GAAOG,OAAS,GAChB,GAAOO,UAAY,kBAEJ,UFcA,IACbxB,KAAM,QACNyB,WAAY,CAAC4C,YAAU3C,gBACvBzB,MAAO,CAAC,SAAU,YAAa,YAAa,YAC5CnH,MAAO,CACLuJ,MAAO,CACLlC,KAAM9G,OACN+G,QAAS,cAGXX,MAAO,CACLU,KAAM9G,OACN+G,QAAS,cAGXK,QAAS,CACPN,KAAMiB,QACNhB,SAAS,GAGXmC,UAAW,CACTpC,KAAMiB,QACNhB,SAAS,GAGXd,eAAgB,CACda,KAAM9G,OACN+G,QAAS,kBAAM,IAAI,UAIvBiB,QAAS,CACPyB,aADO,WAELhJ,KAAK0F,MAAM1F,KAAKyI,UAAY,WAAa,gB,UGnD/C,GAAOtB,OAAS,GAChB,GAAOO,UAAY,kBAEJ,U,6GCPE,EAAAf,S,iBAAf,eAA0B,Y,sBAC1B,eAEM,OAFDzB,MAAM,iBAAkB,QAAK,8BAAE,EAAAsF,SAAA,sB,eAC/B,EAAA7B,MAAMzC,MAAN,iBAAwB,EAAAyC,MAAM5B,GAA9B,MAAgC,I,IAKxB,QACbb,KAAM,QACNC,MAAO,CAAC,UACRnH,MAAO,CACL2J,MAAO,CACLtC,KAAM9G,OACN+G,QAAS,cAGXX,MAAO,CACLU,KAAM9G,OACN+G,QAAS,cAGXK,QAAS,CACPN,KAAMiB,QACNhB,SAAS,IAIbiB,QAAS,CACPiD,SADO,WAEL,GAAIxK,KAAK2G,QACP,OAAO,EAET3G,KAAK0F,MAAM,aC9BjB,GAAOyB,OAAS,GAED,U,2FCDNjC,MAAM,uB,IACJA,MAAM,oB,IACJA,MAAM,O,GACT,eAEM,OAFDA,MAAM,SAAQ,mBAEnB,G,IACKA,MAAM,S,IAKRA,MAAM,O,GACT,eAAkC,OAA7BA,MAAM,SAAQ,aAAS,G,IACvBA,MAAM,S,GAGL,eAA0D,UAAlDf,MAAM,oBAAmB,oBAAgB,G,GACjD,eAAoC,UAA5BA,MAAM,SAAQ,SAAK,G,IAOhCe,MAAM,a,UACJA,MAAM,O,GACT,eAEM,OAFDA,MAAM,SAAQ,eAEnB,G,IACKA,MAAM,S,UAORA,MAAM,O,GACT,eAEM,OAFDA,MAAM,SAAQ,eAEnB,G,IACKA,MAAM,S,UAORA,MAAM,O,GACT,eAEM,OAFDA,MAAM,SAAQ,eAEnB,G,IACKA,MAAM,S,UAORA,MAAM,O,GACT,eAEM,OAFDA,MAAM,SAAQ,cAEnB,G,IACKA,MAAM,S,UAORA,MAAM,O,GACT,eAEM,OAFDA,MAAM,SAAQ,cAEnB,G,IACKA,MAAM,S,UAORA,MAAM,O,GACT,eAEM,OAFDA,MAAM,SAAQ,cAEnB,G,IACKA,MAAM,S,IAORA,MAAM,O,GACT,eAEM,OAFDA,MAAM,SAAQ,qBAEnB,G,IACKA,MAAM,S,IAQRA,MAAM,O,GACT,eAEM,OAFDA,MAAM,SAAQ,wBAEnB,G,IACKA,MAAM,S,IAUZA,MAAM,U,IACJA,MAAM,O,kBAGyH,uB,sMA5HxI,eAwIM,OAxIDA,MAAM,8BAA+B,QAAK,iCAAEO,EAAOgC,qB,CACvC,EAAAd,S,iBAAf,eAA0B,Y,sBAE1B,eAmHM,MAnHN,GAmHM,CAlHJ,eAqBM,MArBN,GAqBM,CApBJ,eAOM,MAPN,GAOM,CANJ,GAGA,eAEM,MAFN,GAEM,CADJ,eAAmE,GAApDxC,MAAO,EAAAsG,iBAAmB,QAAO,EAAAC,iB,gCAIpD,eAUM,MAVN,GAUM,CATJ,GACA,eAOM,MAPN,GAOM,CANJ,eAKQ,cAJN,eAGS,UAHDxF,MAAM,WAAY,QAAK,+BAAE,EAAAyF,kBAAoBlF,EAAO1G,OAAOoF,S,CACjE,GACA,aAOV,eA0FM,MA1FN,GA0FM,CAzFoC,qBAAjB,EAAAwG,mB,iBAAvB,eASM,MATN,GASM,CARJ,GAGA,eAIM,MAJN,GAIM,CAHJ,eAEsF,GAFxEzB,MAAO,EAAA1D,eAAezF,OAAOE,IAAMiH,SAAU,EAAAP,QAC7CxC,MAAO,EAAA6B,WAAW4E,iBAAiBC,UACnC,UAAO,+BAAE,EAAA7E,WAAW4E,iBAAiBC,UAAYpF,EAAO1G,OAAOoF,S,gEAIzC,qBAAjB,EAAAwG,mB,iBAAvB,eASM,MATN,GASM,CARJ,GAGA,eAIM,MAJN,GAIM,CAHJ,eAEsF,GAFxEzB,MAAO,EAAA1D,eAAezF,OAAOG,IAAMgH,SAAU,EAAAP,QAC7CxC,MAAO,EAAA6B,WAAW4E,iBAAiBE,UACnC,UAAO,+BAAE,EAAA9E,WAAW4E,iBAAiBE,UAAYrF,EAAO1G,OAAOoF,S,gEAIzC,qBAAjB,EAAAwG,mB,iBAAvB,eASM,MATN,GASM,CARJ,GAGA,eAIM,MAJN,GAIM,CAHJ,eAEsF,GAFxEzB,MAAO,EAAA1D,eAAezF,OAAOG,IAAMgH,SAAU,EAAAP,QAC7CxC,MAAO,EAAA6B,WAAW4E,iBAAiBG,UACnC,UAAO,+BAAE,EAAA/E,WAAW4E,iBAAiBG,UAAYtF,EAAO1G,OAAOoF,S,gEAIzC,qBAAjB,EAAAwG,mB,iBAAvB,eASM,MATN,GASM,CARJ,GAGA,eAIM,MAJN,GAIM,CAHJ,eAE4F,GAFnFzB,MAAO,EAAA1D,eAAezF,OAAOE,IAAMiH,SAAU,EAAAP,QAC7CxC,MAAO,EAAA6B,WAAW4E,iBAAiBI,SACnC,UAAO,+BAAE,EAAAhF,WAAW4E,iBAAiBI,SAAWtI,WAAW+C,EAAO1G,OAAOoF,U,gEAI9C,qBAAjB,EAAAwG,mB,iBAAvB,eASM,MATN,GASM,CARJ,GAGA,eAIM,MAJN,GAIM,CAHJ,eAE4F,GAFnFzB,MAAO,EAAA1D,eAAezF,OAAOG,IAAMgH,SAAU,EAAAP,QAC7CxC,MAAO,EAAA6B,WAAW4E,iBAAiBK,SACnC,UAAO,+BAAE,EAAAjF,WAAW4E,iBAAiBK,SAAWvI,WAAW+C,EAAO1G,OAAOoF,U,gEAI9C,qBAAjB,EAAAwG,mB,iBAAvB,eASM,MATN,GASM,CARJ,GAGA,eAIM,MAJN,GAIM,CAHJ,eAE4F,GAFnFzB,MAAO,EAAA1D,eAAezF,OAAOI,IAAM+G,SAAU,EAAAP,QAC7CxC,MAAO,EAAA6B,WAAW4E,iBAAiBM,SACnC,UAAO,+BAAE,EAAAlF,WAAW4E,iBAAiBM,SAAWxI,WAAW+C,EAAO1G,OAAOoF,U,gEAItF,eAUM,MAVN,GAUM,CATJ,GAGA,eAKM,MALN,GAKM,CAJJ,eAGQ,cAFN,eACoG,SAD7FkC,KAAK,SAAUlC,MAAO,EAAA6B,WAAW,EAAA2E,mBAAmBQ,mBAAoBC,KAAK,MAC5E,QAAK,+BAAE,EAAApF,WAAW,EAAA2E,mBAAmBQ,mBAAqBzI,WAAW+C,EAAO1G,OAAOoF,U,yBAKjG,eAUM,MAVN,GAUM,CATJ,GAGA,eAKM,MALN,GAKM,CAJJ,eAGQ,cAFN,eAC+H,SADxHkC,KAAK,SAAUlC,MAAO,EAAA6B,WAAW,EAAA2E,mBAAmBU,SAAUD,KAAK,IAClE,QAAK,qCAAE,EAAApF,WAAW,EAAA2E,mBAAmBU,UAAW,UAAA5F,EAAO1G,OAAOoF,aAAd,eAAqBjF,QAASwD,WAAW+C,EAAO1G,OAAOoF,OAAK,Q,6BAO9H,eAeM,MAfN,GAeM,CAdJ,eAMM,MANN,GAMM,CALJ,eAIQ,cAHN,eACgI,SADzHkC,KAAK,WACJgB,QAAS9H,OAAOc,KAAK,EAAAuF,QAAQ1G,SAAWK,OAAO2I,OAAO,EAAAoD,gBAAgB/H,QAAM,SAAEgI,GAAF,OAAQA,KAAGrM,OAAS,QAAK,gCAAE,EAAAsM,gBAAA,sB,+CAKnH,eAKM,2BALiC,EAAA5F,QAAM,SAApB2C,EAAOxB,G,wBAAhC,eAKM,OALD7B,MAAM,MAAqCzF,IAAKsH,G,CACnD,eAGQ,c,eAFN,eAAsG,SAA/FV,KAAK,W,yCAAoB,EAAAiF,eAAevE,GAAE,GAAI,QAAK,mBAAE,EAAAuE,eAAevE,IAAO,EAAAuE,eAAevE,K,oDAAjE,EAAAuE,eAAevE,M,eAAuD,IACtG,eAAGwB,EAAMrC,MAAI,U,4FCpIhBhB,MAAM,gB,0EAAX,eAMM,MANN,GAMM,CALJ,eAIQ,e,mBAHN,eAEwG,2BAAhB,EAAAf,OAAK,SAAdoH,EAAGtM,G,wBAFlF,eAEwG,SAFjGiG,MAAM,SAASmB,KAAK,QAASlC,MAAOoH,EAAIvK,IAAK,EAAAkI,MAAK,GAAM7H,IAAK,EAAA6H,MAAK,GACjEhC,SAAU,EAAAA,SAAW,QAAK,8BAAE,EAAAuE,MAAA,qBAAQ,SAAM,8BAAE,EAAAC,QAAA,qBAAU,UAAO,8BAAE,EAAAC,QAAA,qBAAU,YAAS,8BAAE,EAAAC,UAAA,qBACpF,aAAU,8BAAE,EAAAD,QAAA,qBAAU,WAAQ,8BAAE,EAAAC,UAAA,qBAAY7C,IAAG,gBAAW9J,GAA8BQ,IAAKR,G,0DAM5F,IACbiH,KAAM,cACNC,MAAO,CAAC,QAAS,SAAU,UAAW,aACtCnH,MAAO,CACLkI,SAAU,CACRb,KAAMiB,QACNhB,SAAS,GAGX4C,MAAO,CACL7C,KAAMmD,MACNlD,QAAS,iBAAM,CAAC,EAAG,OAGrBnC,MAAO,CACLkC,KAAMmD,MACNlD,QAAS,iBAAM,CAAC,EAAG,QAIvBiB,QAAS,CACPsE,SADO,SACErE,GACP,wCACKA,GADL,IAEEzI,OAAQ,iCACHyI,EAAMzI,QADL,IAEJoF,MAAO5E,OAAO2I,OAAOlI,KAAK8L,OAAOtJ,KAAI,SAACiJ,GAAD,OAAW/I,WAAW+I,EAAMtH,UAAQ6D,YAK/EyD,MAXO,SAWDjE,GACJxH,KAAK0F,MAAM,QAAS1F,KAAK6L,SAASrE,KAGpCkE,QAfO,SAeClE,GACNxH,KAAK0F,MAAM,SAAU1F,KAAK6L,SAASrE,KAGrCmE,QAnBO,SAmBCnE,GACNxH,KAAK0F,MAAM,UAAW1F,KAAK6L,SAASrE,KAGtCoE,UAvBO,SAuBGpE,GACRxH,KAAK0F,MAAM,YAAa1F,KAAK6L,SAASrE,MAI1CZ,QAhDa,WAiDX,GAAI5G,KAAKmE,MAAO,CACd,IAAM4H,EAAO/L,KACbA,KAAKmE,MAAMY,SAAQ,SAACwG,EAAGtM,GACrB8M,EAAKD,MAAL,gBAAoB7M,IAAKkF,MAAQoH,Q,UC1DzC,GAAOpE,OAAS,GAChB,GAAOO,UAAY,kBAEJ,UF4IA,IACbxB,KAAM,UACN8F,OAAQ,CAACC,EAAA,MACTtE,WAAY,CAACC,eAAc0B,UAAA,KAAQ4C,eAAa7C,WAAA,MAChDlD,MAAO,CAAC,QAAS,QACjBnH,MAAO,CACL4G,OAAQ,CACNS,KAAM9G,QAGRoG,MAAO,CACLU,KAAM9G,QAGRoH,QAAS,CACPN,KAAMiB,QACNhB,SAAS,GAGXd,eAAgB,CACda,KAAM9G,OACN+G,QAAS,kBAAM,IAAI,SAGrB6F,kBAAmB,CACjB9F,KAAM9G,OACN+G,QAAS,eAIbI,KA9Ba,WA+BX,MAAO,CACLiE,kBAAmB,mBACnByB,UAAW,GACXd,eAAgB/L,OAAOc,KAAKL,KAAK4F,QAAQ6D,QAAO,SAACvF,EAAKmI,GAEpD,OADAnI,EAAImI,IAAW,EACRnI,IACN,IACH8B,WAAY,CACV4E,iBAAkB,CAChBC,UAAW7K,KAAKwF,eAAezF,OAAOE,IACtC6K,UAAW,CACTnJ,UAAU3B,KAAKwF,eAAezF,OAAOG,IAAI,GAAKF,KAAKwF,eAAezF,OAAOG,IAAI,IAAI,GACjFF,KAAKwF,eAAezF,OAAOG,IAAI,IAEjC6K,UAAW,CACTpJ,SAAmF,KAAzE3B,KAAKwF,eAAezF,OAAOI,IAAI,GAAKH,KAAKwF,eAAezF,OAAOI,IAAI,KAC7EH,KAAKwF,eAAezF,OAAOI,IAAI,IAGjC6K,SAAUrJ,UAAU3B,KAAKwF,eAAezF,OAAOE,IAAI,GAAKD,KAAKwF,eAAezF,OAAOE,IAAI,IAAM,IAC7FgL,SAAUtJ,UAAU3B,KAAKwF,eAAezF,OAAOG,IAAI,GAAKF,KAAKwF,eAAezF,OAAOG,IAAI,IAAM,IAC7FgL,SAAUvJ,UAAU3B,KAAKwF,eAAezF,OAAOI,IAAI,GAAKH,KAAKwF,eAAezF,OAAOI,IAAI,IAAM,IAC7FgL,mBAAoB,EACpBE,SAAU,MAGZiB,MAAO,CACLnB,mBAAoB,EACpBE,SAAU,SAMlBvD,SAAU,CACR2C,iBADQ,WAEN,OAAOlL,OAAOc,KAAKL,KAAKmM,mBAAmBjN,OAAS,IAIxDqI,QAAS,CACPiE,gBADO,WACW,WACVe,EAAShN,OAAO2I,OAAOlI,KAAKsL,gBAAgB/H,QAAO,SAACgI,GAAD,OAAOA,KAAGrM,OAASK,OAAOc,KAAKL,KAAK4F,QAAQ1G,OACrGK,OAAOc,KAAKL,KAAK4F,QAAQb,SAAQ,SAACsH,GAChC,EAAKf,eAAee,GAAWE,MAInC7B,gBARO,WASL,IAAM8B,EAAYxM,KAAKyK,iBAAmB,OAAS,QAC7Ca,EAAiB/L,OAAOwI,QAAQ/H,KAAKsL,gBAAgB/H,QAAO,SAACgF,GAAD,OAAWA,EAAM,MAAI/F,KAAI,SAAC+F,GAAD,OAAWA,EAAM,MACvG+C,EAAepM,OAKpBc,KAAK0F,MAAM8G,EAAW,CACpB5G,OAAQ0F,EACRc,UAAW,iCACNpM,KAAKgG,WAAWhG,KAAK2K,oBADjB,IAEPyB,UAAWpM,KAAK2K,sBARlB3K,KAAKyM,KAAK,mC,UGlOlB,GAAOtF,OAAS,GAChB,GAAOO,UAAY,kBAEJ,UV2EA,IACbxB,KAAM,QACNC,MAAO,CAAC,QAAS,eAAgB,eAAgB,YAAa,eAAgB,kBAAmB,kBACjGwB,WAAY,CAAC+E,WAAS9E,eAAcC,YAAW8E,SAAOC,SAAOrC,aAC7DvL,MAAO,CACL4G,OAAQ,CACNS,KAAM9G,QAGRoG,MAAO,CACLU,KAAM9G,QAGRuG,OAAQ,CACNO,KAAM9G,QAGRyG,WAAY,CACVK,KAAM9G,OACN+G,QAAS,cAGXd,eAAgB,CACda,KAAM9G,OACN+G,QAAS,kBAAM,IAAI,UAIvBI,KA5Ba,WA6BX,MAAO,CACL8B,cAAe,KACfI,cAAe,KACfP,aAAc,WAIlBP,SAAU,CACRQ,aADQ,WAEN,OAAKtI,KAAK4F,OAGHrG,OAAOwI,QAAQ/H,KAAK4F,QACtBoC,MAAK,SAAClH,EAAGW,GAAJ,OAAUX,EAAE,GAAGoF,KAAK+B,cAAcxG,EAAE,GAAGyE,SAC5C1D,KAAI,YAAiB,0BAAfuE,EAAe,KAAXwB,EAAW,KACpB,wCACKA,GADL,IAEExB,GAAIA,OAPH,IAYX2B,aAfQ,WAgBN,OAAK1I,KAAK8F,OAGHvG,OAAOwI,QAAQ/H,KAAK8F,QACtBkC,MAAK,SAAClH,EAAGW,GAAJ,OAAUX,EAAE,GAAGoF,KAAK+B,cAAcxG,EAAE,GAAGyE,SAC5C1D,KAAI,YAAiB,0BAAfuE,EAAe,KAAX4B,EAAW,KACpB,wCACKA,GADL,IAEE5B,GAAIA,OAPH,IAYX8F,UA7BQ,WA6BI,QACV,iBAAI7M,KAAK2F,aAAT,aAAI,EAAYO,MACPlG,KAAK2F,MAAMO,KACE,OAAlB,UAAAlG,KAAK2F,aAAL,eAAYoB,IACP,UAAP,OAAiB/G,KAAK2F,MAAMoB,GAA5B,KACK,WAIXQ,QAAS,CACPa,MADO,SACDZ,GACJA,EAAMC,kBACNzH,KAAK0F,MAAM,UAGbmD,gBANO,SAMSiE,GACd9M,KAAK4I,cAAgBkE,EACrB9M,KAAK0F,MAAM,eAAgBoH,M,oBW/JjC,GAAO3F,OAAS,EAED,UpBoBA,IACbjB,KAAM,QACNyB,WAAY,CAACoF,SAAOC,UACpBhB,OAAQ,CAACC,EAAA,KAAOgB,GAChB9G,MAAO,CAAC,eAAgB,eAAgB,YAAa,YAAa,eAAgB,kBAAmB,iBACnG,UAAW,iBAEbnH,MAAO,CACL4G,OAAQ,CACNS,KAAM9G,QAGR6F,OAAQ,CACNiB,KAAM9G,QAGRuG,OAAQ,CACNO,KAAM9G,QAGRyG,WAAY,CACVK,KAAM9G,QAGRiG,eAAgB,CACda,KAAM9G,OACN+G,QAAS,kBAAM,IAAI,SAGrB4G,cAAe,CACb7G,KAAM9G,OACN+G,QAAS,cAGXhB,cAAe,CACbe,KAAM9G,OACN+G,QAAS,cAGXC,WAAY,CACVF,KAAMG,QAGR2G,aAAc,CACZ9G,KAAM,CAAC+G,OAAQ5G,UAInBE,KAhDa,WAiDX,MAAO,CACLvB,cAAe,KACfkI,aAAa,IAIjBvF,SAAU,CACRjC,gBADQ,WACU,WACVV,EAAgBnF,KAAKmF,eAAiBnF,KAAKmN,aACjD,OAAqB,MAAjBhI,EACKnF,KAAK4F,OAEP5F,KAAKoF,OAAOD,GAAeS,OAAO6D,QAAO,SAAC7D,EAAQyG,GAEvD,OADAzG,EAAOyG,GAAW,EAAKzG,OAAOyG,GACvBzG,IACN,KAGL0H,cAZQ,WAaN,OAAKtN,KAAKoF,OAGH7F,OAAOwI,QAAQ/H,KAAKoF,QAAQqE,QAAO,SAACvF,EAAD,GAA2B,0BAApBqJ,EAAoB,KAAX5H,EAAW,KAOnE,OANAA,EAAMC,OAAOb,SAAQ,SAACsH,GACfnI,EAAImI,KACPnI,EAAImI,GAAW,IACjBnI,EAAImI,GAASkB,GAAW5H,KAGnBzB,IACN,IAVM,IAaX6B,cA3BQ,WA4BN,IAAK/F,KAAK8F,OACR,MAAO,GAET,IAAMiG,EAAO/L,KACb,OAAOT,OAAOwI,QAAQ/H,KAAK8F,QAAQ2D,QAAO,SAACvF,EAAD,GAA2B,0BAApB4I,EAAoB,KAAXnE,EAAW,KAUnE,OATAA,EAAM/C,OAAOb,SAAQ,SAACsH,GACpB9M,OAAOc,KAAK0L,EAAKuB,cAAcjB,IAAUtH,SAAQ,SAACwI,GAC3CrJ,EAAIqJ,KACPrJ,EAAIqJ,GAAW,IAEjBrJ,EAAIqJ,GAAST,GAAWnE,QAIrBzE,IACN,KAGL+B,kBA9CQ,WA8CY,QACZ8F,EAAO/L,KACPgG,EAAazG,OAAOwI,SAAQ,UAAA/H,KAAKgG,kBAAL,eAAiBZ,SAAU,IAAIqE,QAAO,SAACvF,EAAD,GAA+B,0BAAxBqJ,EAAwB,KAAfnB,EAAe,KAKrG,OAJAlI,EAAIqJ,GAAW,GACXnB,IACFlI,EAAIqJ,GAAS,MAAQnB,GAEhBlI,IACN,IAEH,wCACK8B,GACAzG,OAAOwI,SAAQ,UAAA/H,KAAKgG,kBAAL,eAAiBJ,SAAU,IAAI6D,QAAO,SAACvF,EAAD,GAA+B,4BAAxBmI,EAAwB,KAAfD,EAAe,KAC/EzG,EAAI,UAAIpG,OAAO2I,OAAO6D,EAAKuB,cAAcjB,WAArC,aAAI,EAA6C,GAS3D,OARI1G,GACEyG,GAAyB,MAAZzG,EAAMoB,KAChB7C,EAAIyB,EAAMoB,MACb7C,EAAIyB,EAAMoB,IAAM,IAClB7C,EAAIyB,EAAMoB,IAAIsF,GAAWD,GAItBlI,IACN,OAKTqD,QAAS,CACPiG,kBADO,WAEL,IAAMzB,EAAO/L,KACPyN,EAAUzN,KAAK0N,QAAO,kBAAM3B,EAAKoB,gBAAc,SAACQ,GAC/C5B,EAAKsB,cACRtB,EAAKsB,aAAc,EACnBI,IAC0B,MAAtB1B,EAAK5G,eAAmC,MAAVwI,IAChC5B,EAAK5G,cAAgB4G,EAAKoB,mBAMlCS,QAdO,WAeL5N,KAAK0F,MAAM,YAGbmI,cAlBO,SAkBOrG,GACZ,GAAIA,EAAMsG,cAAgB9N,KAAKuG,WAG/B,GAAKvG,KAAK4F,OAAO4B,EAAMuG,UAAvB,CAKA,IAAM/G,EAAI,kBAAQQ,GACZ6E,EAAUrF,EAAM+G,gBACf/G,EAAM+G,gBACN/G,EAAMX,YACNW,EAAM8G,YAEb9N,KAAK0F,MAAM,gBAAiB,CAC1BqB,GAAIsF,EACJrF,MAAOA,SAZPhH,KAAK4N,WAgBTI,kBAvCO,SAuCWxG,GACZA,EAAMsG,cAAgB9N,KAAKuG,YAG/BvG,KAAK4N,YAIThH,QAhLa,WAiLX5G,KAAKiO,UAAUjO,KAAK6N,cAAe,kBAC/B,wDACJ7N,KAAKiO,UAAUjO,KAAKgO,kBAAmB,sBACnC,2DACA,4DAEJhO,KAAKwN,qBAGPU,UA1La,WA2LXlO,KAAKmO,YAAY,mBACjBnO,KAAKmO,YAAY,yB,oBqBlNrB,GAAOhH,OAAS,EAChB,GAAOO,UAAY,kBAEJ,iB,yDCTf,W,qBCAA,IAAIrE,EAAI,EAAQ,QACZ+K,EAAc,EAAQ,QACtBhK,EAAU,EAAQ,QAClBiK,EAAkB,EAAQ,QAC1BC,EAAiC,EAAQ,QACzCC,EAAiB,EAAQ,QAI7BlL,EAAE,CAAEtE,OAAQ,SAAUyP,MAAM,EAAMC,MAAOL,GAAe,CACtDpJ,0BAA2B,SAAmCX,GAC5D,IAKI5E,EAAKN,EALLuP,EAAIL,EAAgBhK,GACpBK,EAA2B4J,EAA+BrN,EAC1DZ,EAAO+D,EAAQsK,GACfC,EAAS,GACTC,EAAQ,EAEZ,MAAOvO,EAAKnB,OAAS0P,EACnBzP,EAAauF,EAAyBgK,EAAGjP,EAAMY,EAAKuO,WACjC5K,IAAf7E,GAA0BoP,EAAeI,EAAQlP,EAAKN,GAE5D,OAAOwP,M,kCCrBX,W,4CCAA,IAAItL,EAAI,EAAQ,QACZwL,EAAQ,EAAQ,QAChBR,EAAkB,EAAQ,QAC1BS,EAAiC,EAAQ,QAAmD7N,EAC5FmN,EAAc,EAAQ,QAEtBW,EAAsBF,GAAM,WAAcC,EAA+B,MACzEE,GAAUZ,GAAeW,EAI7B1L,EAAE,CAAEtE,OAAQ,SAAUyP,MAAM,EAAM3K,OAAQmL,EAAQP,MAAOL,GAAe,CACtE1J,yBAA0B,SAAkCuK,EAAIxP,GAC9D,OAAOqP,EAA+BT,EAAgBY,GAAKxP,O,gFCb/D","file":"static/js/chunk-3d60f62e.907e4050.js","sourcesContent":["export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./RangeSlider.vue?vue&type=style&index=0&id=0e677180&lang=scss&scoped=true\"","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}","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((c) => Math.min(Math.max(0, c), 255))\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","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./MenuPanel.vue?vue&type=style&index=0&lang=scss\"","'use strict';\nvar $ = require('../internals/export');\nvar $filter = require('../internals/array-iteration').filter;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');\n// Edge 14- issue\nvar USES_TO_LENGTH = arrayMethodUsesToLength('filter');\n\n// `Array.prototype.filter` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.filter\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, {\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","import defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nexport default function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ToggleSwitch.vue?vue&type=style&index=0&id=8fae7678&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Animate.vue?vue&type=style&index=0&id=1739aaba&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Groups.vue?vue&type=style&index=0&id=42318a2b&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Light.vue?vue&type=style&index=0&id=52168252&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Index.vue?vue&type=style&index=1&lang=scss\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Index.vue?vue&type=style&index=0&id=0378547e&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Controls.vue?vue&type=style&index=0&id=e2726892&lang=scss&scoped=true\"","<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\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\nexport default script","<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&bindings={}\"\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&lang=scss\"\nscript.render = render\n\nexport default script","<template>\n <div class=\"power-switch\" :class=\"{disabled: disabled}\" @click=\"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 event.stopPropagation()\n if (this.disabled)\n return false\n\n this.$emit('input', event)\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.power-switch {\n position: relative;\n transition: transform .3s;\n transform: scale(var(--scale, 1)) translateZ(0);\n\n &:active {\n --scale: .96;\n }\n\n &.disabled {\n opacity: 0.6;\n }\n\n input {\n display: none;\n & + label {\n border-radius: 1em;\n display: block;\n cursor: pointer;\n position: relative;\n transition: box-shadow .4s;\n\n &:before {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n border-radius: inherit;\n background: none;\n opacity: var(--gradient, 0);\n transition: opacity .4s;\n }\n\n .switch {\n position: relative;\n display: inline-block;\n vertical-align: top;\n height: 1.4em;\n width: 2.5em;\n border-radius: 1em;\n background: $toggle-bg;\n box-shadow: $toggle-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: $toggle-selected-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: $toggle-dot-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 box-shadow: $toggle-dot-shadow;\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: #A6ACCD;\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: #406046;\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=8fae7678&scoped=true&bindings={\\\"value\\\":\\\"props\\\",\\\"disabled\\\":\\\"props\\\",\\\"onInput\\\":\\\"options\\\"}\"\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=8fae7678&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-8fae7678\"\n\nexport default script","import { render } from \"./Groups.vue?vue&type=template&id=42318a2b&scoped=true&bindings={\\\"groups\\\":\\\"props\\\",\\\"loadingGroups\\\":\\\"props\\\",\\\"colorConverter\\\":\\\"props\\\",\\\"groupsSorted\\\":\\\"options\\\",\\\"anyLightsOn\\\":\\\"options\\\"}\"\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\"\nscript.render = render\nscript.__scopeId = \"data-v-42318a2b\"\n\nexport default script","<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&bindings={\\\"light\\\":\\\"props\\\",\\\"lights\\\":\\\"props\\\",\\\"group\\\":\\\"props\\\",\\\"loading\\\":\\\"props\\\",\\\"colorConverter\\\":\\\"props\\\",\\\"state\\\":\\\"options\\\",\\\"color\\\":\\\"options\\\",\\\"rgbColor\\\":\\\"options\\\",\\\"onColorSelect\\\":\\\"options\\\",\\\"getColor\\\":\\\"options\\\"}\"\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&lang=scss\"\nscript.render = render\nscript.__scopeId = \"data-v-e2726892\"\n\nexport default script","import { render } from \"./Light.vue?vue&type=template&id=52168252&scoped=true&bindings={\\\"light\\\":\\\"props\\\",\\\"group\\\":\\\"props\\\",\\\"loading\\\":\\\"props\\\",\\\"collapsed\\\":\\\"props\\\",\\\"colorConverter\\\":\\\"props\\\",\\\"expandToggle\\\":\\\"options\\\"}\"\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\"\nscript.render = render\nscript.__scopeId = \"data-v-52168252\"\n\nexport default script","<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&bindings={\\\"scene\\\":\\\"props\\\",\\\"group\\\":\\\"props\\\",\\\"loading\\\":\\\"props\\\",\\\"onSelect\\\":\\\"options\\\"}\"\nimport script from \"./Scene.vue?vue&type=script&lang=js\"\nexport * from \"./Scene.vue?vue&type=script&lang=js\"\nscript.render = render\n\nexport default script","<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.warn('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-slider\">\n <label>\n <input class=\"slider\" type=\"range\" :value=\"v\" :min=\"range[0]\" :max=\"range[1]\"\n :disabled=\"disabled\" @input=\"input\" @change=\"changed\" @mouseup=\"mouseup\" @mousedown=\"mousedown\"\n @touchstart=\"mouseup\" @touchend=\"mousedown\" :ref=\"`input_${i}`\" v-for=\"(v, i) in value\" :key=\"i\">\n </label>\n </div>\n</template>\n\n<script>\nexport default {\n name: \"RangeSlider\",\n emits: ['input', 'change', 'mouseup', 'mousedown'],\n props: {\n disabled: {\n type: Boolean,\n default: false,\n },\n\n range: {\n type: Array,\n default: () => [0, 100],\n },\n\n value: {\n type: Array,\n default: () => [0, 100],\n },\n },\n\n methods: {\n getEvent(event) {\n return {\n ...event,\n target: {\n ...event.target,\n value: Object.values(this.$refs).map((input) => parseFloat(input.value)).sort(),\n }\n }\n },\n\n input(event) {\n this.$emit('input', this.getEvent(event))\n },\n\n changed(event) {\n this.$emit('change', this.getEvent(event))\n },\n\n mouseup(event) {\n this.$emit('mouseup', this.getEvent(event))\n },\n\n mousedown(event) {\n this.$emit('mousedown', this.getEvent(event))\n },\n },\n\n mounted() {\n if (this.value) {\n const self = this\n this.value.forEach((v, i) => {\n self.$refs[`input_${i}`].value = v\n })\n }\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.range-slider {\n position: relative;\n display: flex;\n\n label {\n height: 2em;\n }\n\n .slider {\n @include appearance(none);\n @include transition(opacity .2s);\n background: none;\n width: 100%;\n height: 2em;\n position: absolute;\n left: 0;\n top: 0;\n margin: 0;\n padding: 0;\n border-radius: 1em;\n outline: none;\n pointer-events: none;\n overflow: hidden;\n z-index: 20;\n\n @mixin slider-thumb {\n @include appearance(none);\n position: relative;\n width: 1.5em;\n height: 1.5em;\n pointer-events: all;\n border-radius: 50%;\n border: 0;\n background: $slider-thumb-bg;\n cursor: pointer;\n z-index: 10;\n outline: 0;\n }\n\n &::-webkit-slider-thumb { @include slider-thumb }\n &::-moz-range-thumb { @include slider-thumb}\n &::-moz-range-track {\n @include appearance(none);\n position: relative;\n border: 0;\n }\n\n &::-moz-range-progress { height: 1em; }\n\n &:first-child {\n z-index: 21;\n &::-moz-range-progress { background: $slider-bg; }\n }\n\n &:last-child {\n background: $slider-bg;\n &::-moz-range-progress { background: $slider-progress-bg; }\n }\n\n &[disabled] {\n @mixin no-thumb {\n display: none;\n width: 0;\n }\n\n &::-moz-range-progress { background: none; }\n &::-webkit-slider-runnable-track { background: none; }\n &::-moz-range-thumb { @include no-thumb; }\n &::-webkit-slider-thumb { @include no-thumb; }\n }\n }\n}\n</style>","import { render } from \"./RangeSlider.vue?vue&type=template&id=0e677180&scoped=true&bindings={\\\"disabled\\\":\\\"props\\\",\\\"range\\\":\\\"props\\\",\\\"value\\\":\\\"props\\\",\\\"getEvent\\\":\\\"options\\\",\\\"input\\\":\\\"options\\\",\\\"changed\\\":\\\"options\\\",\\\"mouseup\\\":\\\"options\\\",\\\"mousedown\\\":\\\"options\\\"}\"\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=0e677180&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-0e677180\"\n\nexport default script","import { render } from \"./Animate.vue?vue&type=template&id=1739aaba&scoped=true&bindings={\\\"lights\\\":\\\"props\\\",\\\"group\\\":\\\"props\\\",\\\"loading\\\":\\\"props\\\",\\\"colorConverter\\\":\\\"props\\\",\\\"runningAnimations\\\":\\\"props\\\",\\\"selectedAnimation\\\":\\\"data\\\",\\\"animation\\\":\\\"data\\\",\\\"selectedLights\\\":\\\"data\\\",\\\"animations\\\":\\\"data\\\",\\\"animationRunning\\\":\\\"options\\\",\\\"toggleSelectAll\\\":\\\"options\\\",\\\"toggleAnimation\\\":\\\"options\\\"}\"\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=1739aaba&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-1739aaba\"\n\nexport default script","import { render } from \"./Group.vue?vue&type=template&id=4de1a560&bindings={\\\"lights\\\":\\\"props\\\",\\\"group\\\":\\\"props\\\",\\\"scenes\\\":\\\"props\\\",\\\"animations\\\":\\\"props\\\",\\\"colorConverter\\\":\\\"props\\\",\\\"selectedLight\\\":\\\"data\\\",\\\"selectedScene\\\":\\\"data\\\",\\\"selectedView\\\":\\\"data\\\",\\\"lightsSorted\\\":\\\"options\\\",\\\"scenesSorted\\\":\\\"options\\\",\\\"groupName\\\":\\\"options\\\",\\\"close\\\":\\\"options\\\",\\\"onSceneSelected\\\":\\\"options\\\"}\"\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&lang=scss\"\nimport \"./Group.vue?vue&type=style&index=1&lang=scss\"\nscript.render = render\n\nexport default script","import { render } from \"./Index.vue?vue&type=template&id=0378547e&scoped=true&bindings={\\\"lights\\\":\\\"props\\\",\\\"groups\\\":\\\"props\\\",\\\"scenes\\\":\\\"props\\\",\\\"animations\\\":\\\"props\\\",\\\"colorConverter\\\":\\\"props\\\",\\\"loadingLights\\\":\\\"props\\\",\\\"loadingGroups\\\":\\\"props\\\",\\\"pluginName\\\":\\\"props\\\",\\\"initialGroup\\\":\\\"props\\\",\\\"selectedGroup\\\":\\\"data\\\",\\\"initialized\\\":\\\"data\\\",\\\"displayedLights\\\":\\\"options\\\",\\\"groupsByLight\\\":\\\"options\\\",\\\"scenesByGroup\\\":\\\"options\\\",\\\"animationsByGroup\\\":\\\"options\\\",\\\"initSelectedGroup\\\":\\\"options\\\",\\\"refresh\\\":\\\"options\\\",\\\"onLightChange\\\":\\\"options\\\",\\\"onAnimationChange\\\":\\\"options\\\"}\"\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=0378547e&lang=scss&scoped=true\"\nimport \"./Index.vue?vue&type=style&index=1&lang=scss\"\nscript.render = render\nscript.__scopeId = \"data-v-0378547e\"\n\nexport default script","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Group.vue?vue&type=style&index=1&lang=scss\"","var $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar ownKeys = require('../internals/own-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar createProperty = require('../internals/create-property');\n\n// `Object.getOwnPropertyDescriptors` method\n// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptors\n$({ target: 'Object', stat: true, sham: !DESCRIPTORS }, {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIndexedObject(object);\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n var keys = ownKeys(O);\n var result = {};\n var index = 0;\n var key, descriptor;\n while (keys.length > index) {\n descriptor = getOwnPropertyDescriptor(O, key = keys[index++]);\n if (descriptor !== undefined) createProperty(result, key, descriptor);\n }\n return result;\n }\n});\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Controls.vue?vue&type=style&index=1&lang=scss\"","var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar nativeGetOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetOwnPropertyDescriptor(1); });\nvar FORCED = !DESCRIPTORS || FAILS_ON_PRIMITIVES;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor\n$({ target: 'Object', stat: true, forced: FORCED, sham: !DESCRIPTORS }, {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) {\n return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key);\n }\n});\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Group.vue?vue&type=style&index=0&lang=scss\""],"sourceRoot":""}