iobroker.lovelace
Version:
With this adapter you can build visualization for ioBroker with Home Assistant Lovelace UI
1 lines • 15.4 kB
JavaScript
export const __rspack_esm_id=92524;export const __rspack_esm_ids=[92524];export const __webpack_modules__={81310(a,t,e){e.a(a,async function(a,t){try{var o=e(62826),i=e(5124),s=e(22441),r=e(6412),n=e(26218),l=e(91926),p=e(90248),c=e(2054),h=e(14503),d=a([p,c]);[p,c]=d.then?(await d)():d;class v extends i.WF{render(){return i.qy` <div class="toolbar ${(0,r.H)({narrow:this.narrow})}"> <div class="toolbar-content"> ${this.mainPage||history.state?.root?i.qy` <ha-menu-button .hass="${this.hass}" .narrow="${this.narrow}"></ha-menu-button> `:this.backPath?i.qy` <ha-icon-button-arrow-prev href="${this.backPath}" .hass="${this.hass}"></ha-icon-button-arrow-prev> `:i.qy` <ha-icon-button-arrow-prev .hass="${this.hass}" ="${this._backTapped}"></ha-icon-button-arrow-prev> `} <div class="main-title"> <slot name="header">${this.header}</slot> </div> <slot name="toolbar-icon"></slot> </div> </div> <div class="${(0,r.H)({content:!0,"ha-scrollbar":this.scrollable,"not-scrollable":!this.scrollable})}" ="${this._saveScrollPos}"> <slot></slot> </div> <div id="fab"> <slot name="fab"></slot> </div> `}_saveScrollPos(a){this._savedScrollPos=a.target.scrollTop}_backTapped(){this.backCallback?this.backCallback():(0,l.OE)()}static get styles(){return[h.dp,i.AH`:host{display:block;height:100%;background-color:var(--primary-background-color);overflow:hidden;position:relative}:host([narrow]){width:100%;position:fixed}.toolbar{background-color:var(--app-header-background-color);padding-top:var(--safe-area-inset-top);padding-right:var(--safe-area-inset-right)}:host([narrow]) .toolbar{padding-left:var(--safe-area-inset-left)}.toolbar-content{display:flex;align-items:center;font-size:var(--ha-font-size-xl);height:var(--header-height);font-weight:var(--ha-font-weight-normal);color:var(--app-header-text-color,#fff);border-bottom:var(--app-header-border-bottom,none);box-sizing:border-box;padding:8px 12px}.toolbar a{color:var(--sidebar-text-color);text-decoration:none}::slotted([slot=toolbar-icon]),ha-icon-button-arrow-prev,ha-menu-button{display:flex;align-items:center;pointer-events:auto;color:var(--sidebar-icon-color)}.main-title{margin-inline-start:var(--ha-space-6);line-height:var(--ha-line-height-normal);min-width:0;flex-grow:1;overflow-wrap:break-word;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}.narrow .main-title{margin-inline-start:var(--ha-space-2)}.content{position:relative;width:calc(100% - var(--safe-area-inset-right,0px));height:calc(100% - 1px - var(--header-height,0px) - var(--safe-area-inset-top,0px) - var(--safe-area-inset-bottom,0px));padding-bottom:var(--safe-area-inset-bottom,0px);margin-right:var(--safe-area-inset-right);overflow-y:auto;overflow:auto;-webkit-overflow-scrolling:touch}.content.not-scrollable{overflow:hidden;display:flex;flex-direction:column}:host([narrow]) .content{width:calc(100% - var(--safe-area-inset-left,0px) - var(--safe-area-inset-right,0px));margin-left:var(--safe-area-inset-left)}#fab{position:absolute;right:calc(16px + var(--safe-area-inset-right,0px));inset-inline-end:calc(16px + var(--safe-area-inset-right,0px));inset-inline-start:initial;bottom:calc(16px + var(--safe-area-inset-bottom,0px));z-index:1;display:flex;flex-wrap:wrap;justify-content:flex-end;gap:var(--ha-space-2);--ha-button-box-shadow:var(--ha-box-shadow-l)}:host([narrow]) #fab.tabs{bottom:calc(84px + var(--safe-area-inset-bottom,0px))}#fab[is-wide]{bottom:calc(24px + var(--safe-area-inset-bottom,0px));right:calc(24px + var(--safe-area-inset-right,0px));inset-inline-end:calc(24px + var(--safe-area-inset-right,0px));inset-inline-start:initial}`]}constructor(...a){super(...a),this.mainPage=!1,this.narrow=!1,this.scrollable=!0}}(0,o.Cg)([(0,s.MZ)({attribute:!1})],v.prototype,"hass",void 0),(0,o.Cg)([(0,s.MZ)()],v.prototype,"header",void 0),(0,o.Cg)([(0,s.MZ)({type:Boolean,attribute:"main-page"})],v.prototype,"mainPage",void 0),(0,o.Cg)([(0,s.MZ)({type:String,attribute:"back-path"})],v.prototype,"backPath",void 0),(0,o.Cg)([(0,s.MZ)({attribute:!1})],v.prototype,"backCallback",void 0),(0,o.Cg)([(0,s.MZ)({type:Boolean,reflect:!0})],v.prototype,"narrow",void 0),(0,o.Cg)([(0,s.MZ)({type:Boolean})],v.prototype,"scrollable",void 0),(0,o.Cg)([(0,n.a)(".content")],v.prototype,"_savedScrollPos",void 0),(0,o.Cg)([(0,s.Ls)({passive:!0})],v.prototype,"_saveScrollPos",null),v=(0,o.Cg)([(0,s.EM)("hass-subpage")],v),t()}catch(a){t(a)}})},80888(a,t,e){e.a(a,async function(a,t){try{e(18111),e(61701);var o=e(62826),i=e(10058),s=e(5124),r=e(22441),n=(e(67094),e(67398)),l=(e(94969),e(55380)),p=a([i,l]);[i,l]=p.then?(await p)():p;const c="M12 2C6.5 2 2 6.5 2 12S6.5 22 12 22 22 17.5 22 12 17.5 2 12 2M10 17L5 12L6.41 10.59L10 14.17L17.59 6.58L19 8L10 17Z",h="M11,18H13V16H11V18M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M12,20C7.59,20 4,16.41 4,12C4,7.59 7.59,4 12,4C16.41,4 20,7.59 20,12C20,16.41 16.41,20 12,20M12,6A4,4 0 0,0 8,10H10A2,2 0 0,1 12,8A2,2 0 0,1 14,10C14,12 11,11.75 11,15H13C13,12.75 16,12.5 16,10A4,4 0 0,0 12,6Z";class d extends s.WF{render(){return s.qy` <div class="app"> <div class="icon-wrapper"> ${this.iconImage?s.qy` <img class="icon-image" src="${this.iconImage}" .title="${this.iconTitle}" alt="${this.iconTitle??""}"> `:s.qy` <ha-svg-icon class="app-icon" .path="${this.icon}" .title="${this.iconTitle}"></ha-svg-icon> `} </div> <div> <div class="title-row"> <div class="title"> ${(0,n.z)(this.title,this.stage)} </div> </div> <div class="addition"> ${this.description} ${!1===this.available?" (Not available)":""} </div> </div> </div> ${this.tags?.length||void 0!==this.state||this.installed?s.qy` <div class="footer"> ${void 0!==this.state?s.qy`<supervisor-apps-state .state="${this.state||"unknown"}"></supervisor-apps-state>`:this.installed?s.qy`<div class="installed"> <ha-svg-icon .path="${c}"></ha-svg-icon> <span>${this.hass.localize("ui.panel.config.apps.state.installed")}</span> </div>`:s.qy`<span></span>`} ${this.tags?.length?s.qy`<div class="tags"> ${this.tags.map(a=>s.qy`<supervisor-apps-tag .variant="${a.variant}" .iconPath="${a.iconPath}" .label="${a.label}"></supervisor-apps-tag>`)} </div>`:s.s6} </div> `:s.s6} `}constructor(...a){super(...a),this.stage="stable",this.installed=!1,this.available=!0,this.icon=h}}d.styles=s.AH`.app{margin-bottom:var(--ha-space-2);gap:var(--ha-space-4);display:flex}.icon-wrapper{position:relative;margin-top:var(--ha-space-1);width:40px;height:40px;flex-shrink:0}.app-icon{margin-left:var(--ha-space-2);margin-top:var(--ha-space-2);color:var(--secondary-text-color)}.icon-image{max-height:40px;max-width:40px}.title{flex:1;min-width:0;color:var(--primary-text-color);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.title-row{display:flex;align-items:center;gap:var(--ha-space-2);min-width:0}.addition{color:var(--secondary-text-color);margin-top:var(--ha-space-1);overflow:hidden;position:relative;height:2.4em;line-height:var(--ha-line-height-condensed)}.footer{border-top:var(--ha-border-width-sm) solid var(--ha-color-border-neutral-quiet);padding-top:var(--ha-space-2);display:flex;gap:var(--ha-space-2);flex-wrap:wrap;justify-content:space-between}.tags{display:flex;gap:var(--ha-space-2)}.installed{display:inline-flex;align-items:center;gap:var(--ha-space-2);color:var(--ha-color-text-secondary);font-size:var(--ha-font-size-m)}.installed ha-svg-icon{--mdc-icon-size:16px;color:var(--ha-color-on-success-normal)}`,(0,o.Cg)([(0,r.MZ)({attribute:!1})],d.prototype,"hass",void 0),(0,o.Cg)([(0,r.MZ)()],d.prototype,"title",void 0),(0,o.Cg)([(0,r.MZ)()],d.prototype,"stage",void 0),(0,o.Cg)([(0,r.MZ)()],d.prototype,"state",void 0),(0,o.Cg)([(0,r.MZ)({type:Boolean})],d.prototype,"installed",void 0),(0,o.Cg)([(0,r.MZ)()],d.prototype,"description",void 0),(0,o.Cg)([(0,r.MZ)({type:Boolean})],d.prototype,"available",void 0),(0,o.Cg)([(0,r.MZ)({attribute:!1})],d.prototype,"tags",void 0),(0,o.Cg)([(0,r.MZ)({attribute:!1})],d.prototype,"iconTitle",void 0),(0,o.Cg)([(0,r.MZ)({attribute:!1})],d.prototype,"iconClass",void 0),(0,o.Cg)([(0,r.MZ)()],d.prototype,"icon",void 0),(0,o.Cg)([(0,r.MZ)({attribute:!1})],d.prototype,"iconImage",void 0),d=(0,o.Cg)([(0,r.EM)("supervisor-apps-card-content")],d),t()}catch(a){t(a)}})},58503(a,t,e){e.a(a,async function(a,o){try{e.r(t),e.d(t,{HaConfigAppsInstalled:()=>V});e(74423),e(44114),e(18111),e(22489),e(61701);var i=e(62826),s=e(5124),r=e(22441),n=e(22786),l=e(91926),p=e(52220),c=e(18350),h=(e(76776),e(26300)),d=(e(67094),e(36866)),v=e(22130),g=e(47351),b=e(65063),u=e(28794),f=e(23296),y=e(81310),m=e(67398),x=e(80888),w=e(93560),C=a([c,h,d,u,f,y,x]);[c,h,d,u,f,y,x]=C.then?(await C)():C;const L="M23,12L20.56,14.78L20.9,18.46L17.29,19.28L15.4,22.46L12,21L8.6,22.47L6.71,19.29L3.1,18.47L3.44,14.78L1,12L3.44,9.21L3.1,5.53L6.71,4.72L8.6,1.54L12,3L15.4,1.54L17.29,4.72L20.9,5.54L20.56,9.22L23,12M20.33,12L18.5,9.89L18.74,7.1L16,6.5L14.58,4.07L12,5.18L9.42,4.07L8,6.5L5.26,7.09L5.5,9.88L3.67,12L5.5,14.1L5.26,16.9L8,17.5L9.42,19.93L12,18.81L14.58,19.92L16,17.5L18.74,16.89L18.5,14.1L20.33,12M11,15H13V17H11V15M11,7H13V13H11V7",$="M12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22M12,7L7,12H10V16H14V12H17L12,7Z",_="M12,7L17,12H14V16H10V12H7L12,7M12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22M12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20Z",A="M6,22A3,3 0 0,1 3,19C3,18.4 3.18,17.84 3.5,17.37L9,7.81V6A1,1 0 0,1 8,5V4A2,2 0 0,1 10,2H14A2,2 0 0,1 16,4V5A1,1 0 0,1 15,6V7.81L20.5,17.37C20.82,17.84 21,18.4 21,19A3,3 0 0,1 18,22H6M5,19A1,1 0 0,0 6,20H18A1,1 0 0,0 19,19C19,18.79 18.93,18.59 18.82,18.43L16.53,14.47L14,17L8.93,11.93L5.18,18.43C5.07,18.59 5,18.79 5,19M13,10A1,1 0 0,0 12,11A1,1 0 0,0 13,12A1,1 0 0,0 14,11A1,1 0 0,0 13,10Z",M="M20.5,11H19V7C19,5.89 18.1,5 17,5H13V3.5A2.5,2.5 0 0,0 10.5,1A2.5,2.5 0 0,0 8,3.5V5H4A2,2 0 0,0 2,7V10.8H3.5C5,10.8 6.2,12 6.2,13.5C6.2,15 5,16.2 3.5,16.2H2V20A2,2 0 0,0 4,22H7.8V20.5C7.8,19 9,17.8 10.5,17.8C12,17.8 13.2,19 13.2,20.5V22H17A2,2 0 0,0 19,20V16H20.5A2.5,2.5 0 0,0 23,13.5A2.5,2.5 0 0,0 20.5,11Z",k="M17.65,6.35C16.2,4.9 14.21,4 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20C15.73,20 18.84,17.45 19.73,14H17.65C16.83,16.33 14.61,18 12,18A6,6 0 0,1 6,12A6,6 0 0,1 12,6C13.66,6 15.14,6.69 16.22,7.78L13,11H20V4L17.65,6.35Z",H="M4 4V6H20V4M4 7L3 12V14H4V20H13C12.95 19.66 12.92 19.31 12.92 18.95C12.92 17.73 13.3 16.53 14 15.53V14H15.54C16.54 13.33 17.71 12.96 18.91 12.96C19.62 12.96 20.33 13.09 21 13.34V12L20 7M6 14H12V18H6M18 15V18H15V20H18V23H20V20H23V18H20V15";class V extends s.WF{firstUpdated(){this._loadData()}render(){if(this._error)return s.qy` <hass-error-screen .hass="${this.hass}" .error="${this._error}"></hass-error-screen> `;if(!this._addonInfo)return s.qy` <hass-loading-screen .hass="${this.hass}" .narrow="${this.narrow}"></hass-loading-screen> `;const a=this._getAddons(this._addonInfo.addons,this._filter);return s.qy` <hass-subpage .hass="${this.hass}" .narrow="${this.narrow}" .route="${this.route}" back-path="/config" .header="${this.hass.localize("ui.panel.config.apps.caption")}"> <ha-icon-button slot="toolbar-icon" ="${this._handleCheckUpdates}" .path="${k}" .label="${this.hass.localize("ui.panel.config.apps.store.check_updates")}"></ha-icon-button> <div class="search"> <ha-input-search appearance="outlined" .value="${this._filter}" ="${this._handleSearchChange}"> </ha-input-search> </div> <div class="content"> ${0===a.length?s.qy` <ha-card outlined> <div class="card-content"> <button class="link" ="${this._openStore}"> ${this.hass.localize("ui.panel.config.apps.installed.no_apps")} </button> </div> </ha-card> `:a.map(a=>s.qy` <ha-card role="button" tabindex="0" outlined .addon="${a}" ="${this._addonTapped}" aria-label="${(0,m.z)(a.name,a.stage)}"> <div class="card-content"> <supervisor-apps-card-content .hass="${this.hass}" .title="${a.name}" .stage="${a.stage}" .description="${a.description}" available .tags="${this._getAppTags(a)}" .state="${a.state}" .icon="${a.update_available?$:M}" .iconTitle="${"started"!==a.state?this.hass.localize("ui.panel.config.apps.installed.app_stopped"):a.update_available?this.hass.localize("ui.panel.config.apps.installed.app_update_available"):this.hass.localize("ui.panel.config.apps.installed.app_running")}" .iconImage="${a.icon?`/api/hassio/addons/${a.slug}/icon`:void 0}"></supervisor-apps-card-content> </div> </ha-card> `)} </div> <ha-button size="large" href="/config/apps/available"> <ha-svg-icon slot="start" .path="${H}"></ha-svg-icon> ${this.hass.localize("ui.panel.config.apps.installed.add_app")} </ha-button> </hass-subpage> `}_handleSearchChange(a){this._filter=a.target.value}async _loadData(){try{this._addonInfo=await(0,v.fetchHassioAddonsInfo)(this.hass)}catch(a){this._error=a.message||this.hass.localize("ui.panel.config.apps.error_loading")}}async _handleCheckUpdates(){try{await(0,v.reloadHassioAddons)(this.hass)}catch(a){(0,b.showAlertDialog)(this,{text:(0,g.VR)(a)})}finally{this._loadData()}}_addonTapped(a){const t=a.currentTarget.addon;(0,l.oo)(`/config/app/${t.slug}/info`)}_openStore(){(0,l.oo)("/config/apps/available")}_getAppTags(a){const t=[];return a.update_available&&t.push({label:this.hass.localize("ui.panel.config.apps.state.update_available"),variant:"brand",iconPath:_}),"stable"!==a.stage&&t.push({label:this.hass.localize(`ui.panel.config.apps.dashboard.capability.stages.${a.stage}`),variant:"experimental"===a.stage?"warning":"danger",iconPath:"experimental"===a.stage?A:L}),t}constructor(...a){super(...a),this.narrow=!1,this._getAddons=(0,n.A)((a,t)=>{let e=a;if(t){const o=t.toLowerCase();e=a.filter(a=>a.name.toLowerCase().includes(o)||a.description.toLowerCase().includes(o)||a.slug.toLowerCase().includes(o))}return e.sort((a,t)=>(0,p.SH)(a.name,t.name,this.hass.locale.language))})}}V.styles=[w.g,s.AH`:host{display:block;height:100%;background-color:var(--primary-background-color)}ha-card{cursor:pointer;overflow:hidden}ha-card:hover{background-color:var(--ha-color-fill-neutral-quiet-resting)}.search{position:sticky;top:0;z-index:2}ha-input-search{padding:var(--ha-space-3) var(--ha-space-2);background:var(--sidebar-background-color);border-bottom:1px solid var(--divider-color)}.content{padding:var(--ha-space-4);margin-bottom:var(--ha-space-18);gap:var(--ha-space-4);display:grid;grid-template-columns:repeat(auto-fill,minmax(min(336px,100%),1fr))}.card-content{padding:var(--ha-space-4) var(--ha-space-4) var(--ha-space-2)}button.link{color:var(--primary-color);background:0 0;border:none;padding:0;font:inherit;text-align:left;text-decoration:underline;cursor:pointer}ha-button[size=large]{position:fixed;right:calc(var(--ha-space-4) + var(--safe-area-inset-right));bottom:calc(var(--ha-space-4) + var(--safe-area-inset-bottom));inset-inline-end:calc(var(--ha-space-4) + var(--safe-area-inset-right));inset-inline-start:initial;z-index:1;--ha-button-box-shadow:var(--ha-box-shadow-l)}`],(0,i.Cg)([(0,r.MZ)({attribute:!1})],V.prototype,"hass",void 0),(0,i.Cg)([(0,r.MZ)({type:Boolean})],V.prototype,"narrow",void 0),(0,i.Cg)([(0,r.MZ)({attribute:!1})],V.prototype,"route",void 0),(0,i.Cg)([(0,r.wk)()],V.prototype,"_addonInfo",void 0),(0,i.Cg)([(0,r.wk)()],V.prototype,"_filter",void 0),(0,i.Cg)([(0,r.wk)()],V.prototype,"_error",void 0),V=(0,i.Cg)([(0,r.EM)("ha-config-apps-installed")],V),o()}catch(a){o(a)}})}};