UNPKG

iobroker.lovelace

Version:

With this adapter you can build visualization for ioBroker with Home Assistant Lovelace UI

1 lines 18.8 kB
export const __rspack_esm_id=63608;export const __rspack_esm_ids=[63608];export const __webpack_modules__={51938(t,e,i){i.a(t,async function(t,e){try{i(18111),i(22489);var o=i(62826),s=i(5124),a=i(22441),n=i(6412),r=i(89784),h=i(1087),c=(i(48374),i(98079)),l=i(84337),d=i(22675),p=i(88827),v=i(59241),_=i(65063),u=(i(64841),t([p]));p=(u.then?(await u)():u)[0];const b=t=>t.currentTarget.dataset.kind;class g extends s.WF{updated(t){if((t.has("entry")||t.has("stateObj"))&&this.entry&&this.stateObj){const t=this.entry.options?.cover;this._favoritePositions=(0,c.dx)(this.stateObj)?(0,l.S)(t?.favorite_positions??c.Et):[],this._favoriteTiltPositions=(0,c.Av)(this.stateObj)?(0,l.S)(t?.favorite_tilt_positions??c.Et):[]}}_localizeFavorite(t,e,i){return this.hass.localize(`ui.dialogs.more_info_control.cover.${"position"===t?"favorite_position":"favorite_tilt_position"}.${e}`,i)}_getFavorites(t){return"position"===t?this._favoritePositions:this._favoriteTiltPositions}_getCurrentValue(t){const e="position"===t?this.stateObj.attributes.current_position:this.stateObj.attributes.current_tilt_position;return null==e?void 0:e}async _save(t){if(!this.entry)return;const e={...this.entry.options?.cover??{}};(0,c.dx)(this.stateObj)&&(e.favorite_positions=this._favoritePositions),(0,c.Av)(this.stateObj)&&(e.favorite_tilt_positions=this._favoriteTiltPositions);const i=await(0,v.G_)(this.hass,this.entry.entity_id,{options_domain:"cover",options:{...e,...t}});(0,h.r)(this,"entity-entry-updated",i.entity_entry)}async _setFavorites(t,e){const i=(0,l.S)(e);if("position"===t)return this._favoritePositions=i,void await this._save({favorite_positions:i});this._favoriteTiltPositions=i,await this._save({favorite_tilt_positions:i})}_move(t,e,i){const o=this._getFavorites(t).concat(),s=o.splice(e,1)[0];o.splice(i,0,s),this._setFavorites(t,o)}_applyFavorite(t,e){const i=this._getFavorites(t)[e];void 0!==i&&("position"!==t?this.hass.callService("cover","set_cover_tilt_position",{entity_id:this.stateObj.entity_id,tilt_position:i}):this.hass.callService("cover","set_cover_position",{entity_id:this.stateObj.entity_id,position:i}))}async _promptFavoriteValue(t,e){const i=await(0,_.an)(this,{title:this._localizeFavorite(t,void 0===e?"add_title":"edit_title"),inputLabel:this.hass.localize("position"===t?"ui.card.cover.position":"ui.card.cover.tilt_position"),inputType:"number",inputMin:"0",inputMax:"100",inputSuffix:p.rM.cover.current_position,defaultValue:void 0===e?void 0:String(e)});if(null===i||""===i.trim())return;const o=Number(i);return isNaN(o)?void 0:Math.max(0,Math.min(100,o))}async _addFavorite(t){const e=await this._promptFavoriteValue(t);void 0!==e&&await this._setFavorites(t,[...this._getFavorites(t),e])}async _editFavorite(t,e){const i=this._getFavorites(t),o=i[e];if(void 0===o)return;const s=await this._promptFavoriteValue(t,o);if(void 0===s)return;const a=[...i];a[e]=s,await this._setFavorites(t,a)}async _deleteFavorite(t,e){await(0,_.dk)(this,{destructive:!0,title:this._localizeFavorite(t,"delete_confirm_title"),text:this._localizeFavorite(t,"delete_confirm_text"),confirmText:this._localizeFavorite(t,"delete_confirm_action")})&&await this._setFavorites(t,this._getFavorites(t).filter((t,i)=>i!==e))}_renderKindSection(t,e,i,o,a){return this.editMode||0!==i.length?s.qy` <section class="group"> ${a?s.qy`<h4>${e}</h4>`:s.s6} <ha-more-info-favorites data-kind="${t}" .items="${i}" .renderItem="${this._renderFavoriteButton(t)}" .deleteLabel="${this._deleteLabel(t)}" .editMode="${this.editMode??!1}" .disabled="${this.stateObj.state===d.Hh}" .isAdmin="${Boolean(this.hass.user?.is_admin)}" .showDone="${o}" .addLabel="${this._localizeFavorite(t,"add")}" .doneLabel="${this.hass.localize("ui.dialogs.more_info_control.exit_edit_mode")}" @favorite-item-action="${this._handleFavoriteAction}" @favorite-item-moved="${this._handleFavoriteMoved}" @favorite-item-delete="${this._handleFavoriteDelete}" @favorite-item-add="${this._handleFavoriteAdd}" @favorite-item-done="${this._handleFavoriteDone}"></ha-more-info-favorites> </section> `:s.s6}render(){if(!this.stateObj||!this.entry)return s.s6;const t=(0,c.dx)(this.stateObj),e=(0,c.Av)(this.stateObj),i=[!!t&&(this.editMode||this._favoritePositions.length>0),!!e&&(this.editMode||this._favoriteTiltPositions.length>0)].filter(Boolean).length>1,o=t&&!e;return s.qy` <div class="groups"> ${t?this._renderKindSection("position",this.hass.localize("ui.card.cover.position"),this._favoritePositions,o,i):s.s6} ${e?this._renderKindSection("tilt",this.hass.localize("ui.card.cover.tilt_position"),this._favoriteTiltPositions,!0,i):s.s6} </div> `}constructor(...t){super(...t),this._favoritePositions=[],this._favoriteTiltPositions=[],this._renderFavoriteButton=t=>(e,i,o)=>{const a=this._getCurrentValue(t)===e,h=this._localizeFavorite(t,o?"edit":"set",{value:`${e}%`});return s.qy` <ha-control-button class="${(0,n.H)({active:a})}" style="${(0,r.W)({"--control-button-border-radius":"var(--ha-border-radius-pill)",width:"72px",height:"36px"})}" .label="${h}" .disabled="${this.stateObj.state===d.Hh}"> ${e}% </ha-control-button> `},this._deleteLabel=t=>e=>this._localizeFavorite(t,"delete",{number:e+1}),this._handleFavoriteAction=t=>{t.stopPropagation();const e=b(t),{action:i,index:o}=t.detail;"hold"===i&&this.hass.user?.is_admin?(0,h.r)(this,"toggle-edit-mode",!0):this.editMode?this._editFavorite(e,o):this._applyFavorite(e,o)},this._handleFavoriteMoved=t=>{t.stopPropagation();const e=b(t);this._move(e,t.detail.oldIndex,t.detail.newIndex)},this._handleFavoriteDelete=t=>{t.stopPropagation();const e=b(t);this._deleteFavorite(e,t.detail.index)},this._handleFavoriteAdd=t=>{t.stopPropagation();const e=b(t);this._addFavorite(e)},this._handleFavoriteDone=t=>{t.stopPropagation(),(0,h.r)(this,"toggle-edit-mode",!1)}}}g.styles=s.AH`:host{display:block;width:100%}.groups{display:flex;flex-direction:column;align-items:center;gap:var(--ha-space-3)}.group{width:100%;max-width:384px;margin:0}.group ha-more-info-favorites{--favorite-items-max-width:384px;--favorite-item-active-background-color:var(--state-cover-active-color)}h4{margin:0 0 var(--ha-space-2);color:var(--secondary-text-color);font-size:var(--ha-font-size-s);font-weight:var(--ha-font-weight-medium);text-align:center}`,(0,o.Cg)([(0,a.MZ)({attribute:!1})],g.prototype,"hass",void 0),(0,o.Cg)([(0,a.MZ)({attribute:!1})],g.prototype,"stateObj",void 0),(0,o.Cg)([(0,a.MZ)({attribute:!1})],g.prototype,"entry",void 0),(0,o.Cg)([(0,a.MZ)({attribute:!1})],g.prototype,"editMode",void 0),(0,o.Cg)([(0,a.wk)()],g.prototype,"_favoritePositions",void 0),(0,o.Cg)([(0,a.wk)()],g.prototype,"_favoriteTiltPositions",void 0),g=(0,o.Cg)([(0,a.EM)("ha-more-info-cover-favorite-positions")],g),e()}catch(t){e(t)}})},21771(t,e,i){i.a(t,async function(t,o){try{i.r(e);var s=i(62826),a=i(5124),n=i(22441),r=i(82286),h=(i(39826),i(62501)),c=i(59241),l=i(98079),d=i(40160),p=i(16558),v=i(20380),_=i(71377),u=i(51938),b=i(6531),g=i(37863),y=t([h,d,p,v,_,u,b]);[h,d,p,v,_,u,b]=y.then?(await y)():y;const O="M3,6H21V8H3V6M3,11H21V13H3V11M3,16H21V18H3V16Z",$="M9,3L5,7H8V14H10V7H13M16,17V10H14V17H11L15,21L19,17H16Z";class f extends a.WF{_setMode(t){this._mode=t.currentTarget.mode}willUpdate(t){if(super.willUpdate(t),t.has("stateObj")&&this.stateObj){const e=this.stateObj.entity_id,i=t.get("stateObj")?.entity_id;this._mode&&e===i||(this._mode=(0,l.nX)(this.stateObj)?"position":"button")}}get _stateOverride(){const t=this.hass.formatEntityState(this.stateObj),e=(0,l.ns)(this.stateObj,this.hass);return e?`${t} · ${e}`:t}render(){if(!this.hass||!this.stateObj)return a.s6;const t=(0,l.dx)(this.stateObj),e=(0,l.Av)(this.stateObj),i=Boolean(this.entry&&(this.editMode||(0,l.dx)(this.stateObj)&&(0,c.fs)(this.entry.options?.cover?.favorite_positions)||(0,l.Av)(this.stateObj)&&(0,c.fs)(this.entry.options?.cover?.favorite_tilt_positions))),o=(0,r.$)(this.stateObj,l.Jp.OPEN)||(0,r.$)(this.stateObj,l.Jp.CLOSE)||(0,r.$)(this.stateObj,l.Jp.STOP),s=(0,r.$)(this.stateObj,l.Jp.OPEN_TILT)||(0,r.$)(this.stateObj,l.Jp.CLOSE_TILT)||(0,r.$)(this.stateObj,l.Jp.STOP_TILT),n=(0,r.$)(this.stateObj,l.Jp.OPEN)&&(0,r.$)(this.stateObj,l.Jp.CLOSE)&&!(0,r.$)(this.stateObj,l.Jp.STOP)&&!s&&!t&&!e;return a.qy` <ha-more-info-state-header .hass="${this.hass}" .stateObj="${this.stateObj}" .stateOverride="${this._stateOverride}"></ha-more-info-state-header> <div class="controls"> <div class="main-control"> ${"position"===this._mode?a.qy` ${t?a.qy` <ha-state-control-cover-position .stateObj="${this.stateObj}" .hass="${this.hass}"></ha-state-control-cover-position> `:a.s6} ${e?a.qy` <ha-state-control-cover-tilt-position .stateObj="${this.stateObj}" .hass="${this.hass}"></ha-state-control-cover-tilt-position> `:a.s6} `:a.s6} ${"button"===this._mode?a.qy` ${n?a.qy` <ha-state-control-cover-toggle .stateObj="${this.stateObj}" .hass="${this.hass}"></ha-state-control-cover-toggle> `:o||s?a.qy` <ha-state-control-cover-buttons .stateObj="${this.stateObj}" .hass="${this.hass}"></ha-state-control-cover-buttons> `:a.s6} `:a.s6} </div> ${(t||e)&&(o||s)?a.qy` <ha-icon-button-group> <ha-icon-button-toggle .label="${this.hass.localize("ui.dialogs.more_info_control.cover.switch_mode.position")}" .selected="${"position"===this._mode}" .path="${O}" .mode="${"position"}" @click="${this._setMode}"></ha-icon-button-toggle> <ha-icon-button-toggle .label="${this.hass.localize("ui.dialogs.more_info_control.cover.switch_mode.button")}" .selected="${"button"===this._mode}" .path="${$}" .mode="${"button"}" @click="${this._setMode}"></ha-icon-button-toggle> </ha-icon-button-group> `:a.s6} </div> ${i?a.qy` <ha-more-info-cover-favorite-positions .hass="${this.hass}" .stateObj="${this.stateObj}" .entry="${this.entry}" .editMode="${this.editMode}"></ha-more-info-cover-favorite-positions> `:a.s6} `}static get styles(){return[g.K,a.AH`.main-control{display:flex;flex-direction:row;align-items:center}.main-control>*{margin:0 var(--ha-space-2)}`]}}(0,s.Cg)([(0,n.MZ)({attribute:!1})],f.prototype,"hass",void 0),(0,s.Cg)([(0,n.MZ)({attribute:!1})],f.prototype,"stateObj",void 0),(0,s.Cg)([(0,n.MZ)({attribute:!1})],f.prototype,"entry",void 0),(0,s.Cg)([(0,n.MZ)({attribute:!1})],f.prototype,"editMode",void 0),(0,s.Cg)([(0,n.wk)()],f.prototype,"_mode",void 0),f=(0,s.Cg)([(0,n.EM)("more-info-cover")],f),o()}catch(t){o(t)}})},40160(t,e,i){i.a(t,async function(t,e){try{i(44114);var o=i(62826),s=i(5124),a=i(22441),n=i(75751),r=i(22786),h=i(48548),c=i(82286),l=(i(48374),i(28624),i(10223)),d=(i(67094),i(98079)),p=t([l]);l=(p.then?(await p)():p)[0];const v="M19,6.41L17.59,5L7,15.59V9H5V19H15V17H8.41L19,6.41Z",_="M5,17.59L15.59,7H9V5H19V15H17V8.41L6.41,19L5,17.59Z",u="M18,18H6V6H18V18Z",b=(0,r.A)(t=>{const e=(0,c.$)(t,d.Jp.OPEN),i=(0,c.$)(t,d.Jp.CLOSE),o=(0,c.$)(t,d.Jp.STOP),s=(0,c.$)(t,d.Jp.OPEN_TILT),a=(0,c.$)(t,d.Jp.CLOSE_TILT),n=(0,c.$)(t,d.Jp.STOP_TILT);if((e||i)&&(s||a))return{type:"cross",buttons:[e?"open":"none",a?"close-tilt":"none",o||n?"stop":"none",s?"open-tilt":"none",i?"close":"none"]};if(e||i){const t=[];return e&&t.push("open"),o&&t.push("stop"),i&&t.push("close"),{type:"line",buttons:t}}if(s||a){const t=[];return s&&t.push("open-tilt"),n&&t.push("stop"),a&&t.push("close-tilt"),{type:"line",buttons:t}}return{type:"line",buttons:[]}});class g extends s.WF{_onOpenTap(t){t.stopPropagation(),this.hass.callService("cover","open_cover",{entity_id:this.stateObj.entity_id})}_onCloseTap(t){t.stopPropagation(),this.hass.callService("cover","close_cover",{entity_id:this.stateObj.entity_id})}_onOpenTiltTap(t){t.stopPropagation(),this.hass.callService("cover","open_cover_tilt",{entity_id:this.stateObj.entity_id})}_onCloseTiltTap(t){t.stopPropagation(),this.hass.callService("cover","close_cover_tilt",{entity_id:this.stateObj.entity_id})}_onStopTap(t){t.stopPropagation(),(0,c.$)(this.stateObj,d.Jp.STOP)&&this.hass.callService("cover","stop_cover",{entity_id:this.stateObj.entity_id}),(0,c.$)(this.stateObj,d.Jp.STOP_TILT)&&this.hass.callService("cover","stop_cover_tilt",{entity_id:this.stateObj.entity_id})}renderButton(t){return"open"===t?s.qy` <ha-control-button .label="${this.hass.localize("ui.card.cover.open_cover")}" @click="${this._onOpenTap}" .disabled="${!(0,d.pc)(this.stateObj)}" data-button="open"> <ha-svg-icon .path="${(0,h.i)(this.stateObj)}"></ha-svg-icon> </ha-control-button> `:"close"===t?s.qy` <ha-control-button .label="${this.hass.localize("ui.card.cover.close_cover")}" @click="${this._onCloseTap}" .disabled="${!(0,d.hJ)(this.stateObj)}" data-button="close"> <ha-svg-icon .path="${(0,h.R)(this.stateObj)}"></ha-svg-icon> </ha-control-button> `:"stop"===t?s.qy` <ha-control-button .label="${this.hass.localize("ui.card.cover.stop_cover")}" @click="${this._onStopTap}" .disabled="${!(0,d.lg)(this.stateObj)&&!(0,d.UE)(this.stateObj)}" data-button="stop"> <ha-svg-icon .path="${u}"></ha-svg-icon> </ha-control-button> `:"open-tilt"===t?s.qy` <ha-control-button .label="${this.hass.localize("ui.card.cover.open_tilt_cover")}" @click="${this._onOpenTiltTap}" .disabled="${!(0,d.uB)(this.stateObj)}" data-button="open-tilt"> <ha-svg-icon .path="${_}"></ha-svg-icon> </ha-control-button> `:"close-tilt"===t?s.qy` <ha-control-button .label="${this.hass.localize("ui.card.cover.close_tilt_cover")}" @click="${this._onCloseTiltTap}" .disabled="${!(0,d.Yx)(this.stateObj)}" data-button="close-tilt"> <ha-svg-icon .path="${v}"></ha-svg-icon> </ha-control-button> `:s.s6}render(){const t=b(this.stateObj);return s.qy` ${"line"===t.type?s.qy` <ha-control-button-group vertical> ${(0,n.u)(t.buttons,t=>t,t=>this.renderButton(t))} </ha-control-button-group> `:s.s6} ${"cross"===t.type?s.qy` <div class="cross-container"> ${(0,n.u)(t.buttons,t=>t,t=>this.renderButton(t))} </div> `:s.s6} `}}g.styles=s.AH`ha-control-button-group{height:45vh;max-height:320px;min-height:200px;--control-button-group-spacing:10px;--control-button-group-thickness:100px}.cross-container{height:45vh;max-height:320px;min-height:200px;display:grid;gap:10px;grid-template-columns:repeat(3,min(100px,25vw,15vh));grid-template-rows:repeat(3,min(100px,25vw,15vh));grid-template-areas:". open ." "close-tilt stop open-tilt" ". close ."}.cross-container>*{width:100%;height:100%}.cross-container>[data-button=open]{grid-area:open}.cross-container>[data-button=close]{grid-area:close}.cross-container>[data-button=open-tilt]{grid-area:open-tilt}.cross-container>[data-button=close-tilt]{grid-area:close-tilt}.cross-container>[data-button=stop]{grid-area:stop}ha-control-button{--control-button-border-radius:var(--ha-border-radius-6xl);--mdc-icon-size:24px}`,(0,o.Cg)([(0,a.MZ)({attribute:!1})],g.prototype,"hass",void 0),(0,o.Cg)([(0,a.MZ)({attribute:!1})],g.prototype,"stateObj",void 0),g=(0,o.Cg)([(0,a.EM)("ha-state-control-cover-buttons")],g),e()}catch(t){e(t)}})},16558(t,e,i){i.a(t,async function(t,e){try{var o=i(62826),s=i(5124),a=i(22441),n=i(89784),r=i(53610),h=i(52658),c=i(10223),l=i(22675),d=i(88827),p=t([c,r,d]);[c,r,d]=p.then?(await p)():p;class v extends s.WF{updated(t){if(t.has("stateObj")){const t=this.stateObj?.attributes.current_position;this.value=null!=t?Math.round(t):void 0}}_valueChanged(t){const{value:e}=t.detail;"number"!=typeof e||isNaN(e)||this.hass.callService("cover","set_cover_position",{entity_id:this.stateObj.entity_id,position:e})}render(){const t=(0,h.Se)(this.stateObj,"open"),e=(0,h.Se)(this.stateObj);return s.qy` <ha-control-slider touch-action="none" vertical .value="${this.value}" min="0" max="100" show-handle mode="end" @value-changed="${this._valueChanged}" .label="${(0,r.computeAttributeNameDisplay)(this.hass.localize,this.stateObj,this.hass.entities,"current_position")}" style="${(0,n.W)({"--state-cover-inactive-color":t,"--control-slider-color":e,"--control-slider-background":e})}" .disabled="${this.stateObj.state===l.Hh}" .unit="${d.rM.cover.current_position}" .locale="${this.hass.locale}"> </ha-control-slider> `}}v.styles=s.AH`ha-control-slider{height:45vh;max-height:320px;min-height:200px;--control-slider-thickness:130px;--control-slider-border-radius:var(--ha-border-radius-6xl);--control-slider-color:var(--primary-color);--control-slider-background:var(--disabled-color);--control-slider-background-opacity:0.2;--control-slider-tooltip-font-size:var(--ha-font-size-xl)}`,(0,o.Cg)([(0,a.MZ)({attribute:!1})],v.prototype,"hass",void 0),(0,o.Cg)([(0,a.MZ)({attribute:!1})],v.prototype,"stateObj",void 0),(0,o.Cg)([(0,a.wk)()],v.prototype,"value",void 0),v=(0,o.Cg)([(0,a.EM)("ha-state-control-cover-position")],v),e()}catch(t){e(t)}})},71377(t,e,i){i.a(t,async function(t,e){try{var o=i(62826),s=i(5124),a=i(22441),n=i(6412),r=i(89784),h=i(52658),c=(i(48374),i(25094),i(93367)),l=i(22675),d=i(88360),p=i(59815),v=t([c]);c=(v.then?(await v)():v)[0];class _ extends s.WF{_valueChanged(t){t.target.checked?this._turnOn():this._turnOff()}_turnOn(){this._callService(!0)}_turnOff(){this._callService(!1)}async _callService(t){this.hass&&this.stateObj&&((0,d.j)(this,"light"),await this.hass.callService("cover",t?"open_cover":"close_cover",{entity_id:this.stateObj.entity_id}))}render(){const t=(0,h.Se)(this.stateObj,"open"),e=(0,h.Se)(this.stateObj,"closed"),i="open"===this.stateObj.state||"closing"===this.stateObj.state||"opening"===this.stateObj.state,o="closed"===this.stateObj.state;return this.stateObj.attributes.assumed_state||this.stateObj.state===l.HV?s.qy` <div class="buttons"> <ha-control-button .label="${this.hass.localize("ui.card.cover.open_cover")}" @click="${this._turnOn}" .disabled="${this.stateObj.state===l.Hh}" class="${(0,n.H)({active:i})}" style="${(0,r.W)({"--color":t})}"> <ha-state-icon .stateObj="${this.stateObj}" stateValue="open"></ha-state-icon> </ha-control-button> <ha-control-button .label="${this.hass.localize("ui.card.cover.close_cover")}" @click="${this._turnOff}" .disabled="${this.stateObj.state===l.Hh}" class="${(0,n.H)({active:o})}" style="${(0,r.W)({"--color":e})}"> <ha-state-icon .stateObj="${this.stateObj}" stateValue="closed"></ha-state-icon> </ha-control-button> </div> `:s.qy` <ha-control-switch touch-action="none" vertical reversed .checked="${i}" @change="${this._valueChanged}" .label="${i?this.hass.localize("ui.card.cover.close_cover"):this.hass.localize("ui.card.cover.open_cover")}" style="${(0,r.W)({"--control-switch-on-color":t,"--control-switch-off-color":e})}" .disabled="${this.stateObj.state===l.Hh}"> <ha-state-icon slot="icon-on" .stateObj="${this.stateObj}" stateValue="open"></ha-state-icon> <ha-state-icon slot="icon-off" .stateObj="${this.stateObj}" stateValue="closed"></ha-state-icon> </ha-control-switch> `}}_.styles=[p.e],(0,o.Cg)([(0,a.MZ)({attribute:!1})],_.prototype,"hass",void 0),(0,o.Cg)([(0,a.MZ)({attribute:!1})],_.prototype,"stateObj",void 0),_=(0,o.Cg)([(0,a.EM)("ha-state-control-cover-toggle")],_),e()}catch(t){e(t)}})}};