UNPKG

iobroker.lovelace

Version:

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

2 lines 26.5 kB
export const __webpack_ids__=["6473"];export const __webpack_modules__={20451:function(t,e,i){i.d(e,{Z:()=>s});const a=(t,e=2)=>{let i=""+t;for(let t=1;t<e;t++)i=parseInt(i)<10**t?`0${i}`:i;return i};function s(t){const e=Math.floor(t/1e3/3600),i=Math.floor(t/1e3%3600/60),s=Math.floor(t/1e3%3600%60),n=Math.floor(t%1e3);return e>0?`${e}:${a(i)}:${a(s)}`:i>0?`${i}:${a(s)}`:s>0||n>0?`${s}${n>0?`.${a(n,3)}`:""}`:null}},31146:function(t,e,i){i.d(e,{i:()=>s});const a=(0,i(93826).P)((t=>{history.replaceState({scrollPosition:t},"")}),300),s=t=>e=>({kind:"method",placement:"prototype",key:e.key,descriptor:{set(t){a(t),this[`__${String(e.key)}`]=t},get(){return this[`__${String(e.key)}`]||history.state?.scrollPosition},enumerable:!0,configurable:!0},finisher(i){const a=i.prototype.connectedCallback;i.prototype.connectedCallback=function(){a.call(this);const i=this[e.key];i&&this.updateComplete.then((()=>{const e=this.renderRoot.querySelector(t);e&&setTimeout((()=>{e.scrollTop=i}),0)}))}}})},67650:function(t,e,i){i.a(t,(async function(t,e){try{var a=i(44249),s=(i(92745),i(9359),i(1331),i(31526),i(52924),i(92519),i(42179),i(89256),i(24931),i(88463),i(57449),i(19814),i(57243)),n=i(15093),o=i(69634),r=i(50875),h=i(20172),d=i(25179),l=i(64214),c=i(50602),u=i(48066),m=i(36522),y=i(350),p=i(87974),f=t([l,d,c]);[l,d,c]=f.then?(await f)():f;const _=t=>{const e=parseFloat(t);return isFinite(e)?e:null};let k=(0,a.Z)(null,(function(t,e){return{F:class extends e{constructor(...e){super(...e),t(this)}},d:[{kind:"field",decorators:[(0,n.Cb)({attribute:!1})],key:"hass",value:void 0},{kind:"field",decorators:[(0,n.Cb)({attribute:!1})],key:"data",value:()=>[]},{kind:"field",decorators:[(0,n.Cb)({attribute:!1})],key:"names",value:void 0},{kind:"field",decorators:[(0,n.Cb)()],key:"unit",value:void 0},{kind:"field",decorators:[(0,n.Cb)()],key:"identifier",value:void 0},{kind:"field",decorators:[(0,n.Cb)({attribute:"show-names",type:Boolean})],key:"showNames",value:()=>!0},{kind:"field",decorators:[(0,n.Cb)({attribute:"click-for-more-info",type:Boolean})],key:"clickForMoreInfo",value:()=>!0},{kind:"field",decorators:[(0,n.Cb)({attribute:!1})],key:"startTime",value:void 0},{kind:"field",decorators:[(0,n.Cb)({attribute:!1})],key:"endTime",value:void 0},{kind:"field",decorators:[(0,n.Cb)({attribute:!1,type:Number})],key:"paddingYAxis",value:()=>0},{kind:"field",decorators:[(0,n.Cb)({attribute:!1,type:Number})],key:"chartIndex",value:void 0},{kind:"field",decorators:[(0,n.Cb)({attribute:"logarithmic-scale",type:Boolean})],key:"logarithmicScale",value:()=>!1},{kind:"field",decorators:[(0,n.Cb)({attribute:!1,type:Number})],key:"minYAxis",value:void 0},{kind:"field",decorators:[(0,n.Cb)({attribute:!1,type:Number})],key:"maxYAxis",value:void 0},{kind:"field",decorators:[(0,n.Cb)({attribute:"fit-y-data",type:Boolean})],key:"fitYData",value:()=>!1},{kind:"field",decorators:[(0,n.Cb)({type:String})],key:"height",value:void 0},{kind:"field",decorators:[(0,n.Cb)({attribute:"expand-legend",type:Boolean})],key:"expandLegend",value:void 0},{kind:"field",decorators:[(0,n.SB)()],key:"_chartData",value:()=>[]},{kind:"field",decorators:[(0,n.SB)()],key:"_entityIds",value:()=>[]},{kind:"field",key:"_datasetToDataIndex",value:()=>[]},{kind:"field",decorators:[(0,n.SB)()],key:"_chartOptions",value:void 0},{kind:"field",key:"_hiddenStats",value:()=>new Set},{kind:"field",decorators:[(0,n.SB)()],key:"_yWidth",value:()=>25},{kind:"field",decorators:[(0,n.SB)()],key:"_visualMap",value:void 0},{kind:"field",key:"_chartTime",value:()=>new Date},{kind:"method",key:"render",value:function(){return s.dy` <ha-chart-base .hass="${this.hass}" .data="${this._chartData}" .options="${this._chartOptions}" .height="${this.height}" style="${(0,o.V)({height:this.height})}" @dataset-hidden="${this._datasetHidden}" @dataset-unhidden="${this._datasetUnhidden}" .expandLegend="${this.expandLegend}"></ha-chart-base> `}},{kind:"field",key:"_renderTooltip",value(){return t=>{const e=t[0].axisValue,i=(0,l.E8)(new Date(e),this.hass.locale,this.hass.config)+"<br>",a=[];this._chartData.forEach(((i,s)=>{if(!1===i.tooltip?.show||this._hiddenStats.has(i.name))return;const n=t.find((t=>t.seriesIndex===s));if(n)return void a.push(n);let o;const r=i.data||[];for(let t=r.length-1;t>=0;t--){const i=r[t];if(i&&i[0]<=e&&"number"==typeof i[1]){o=i;break}}o&&a.push({seriesName:i.name,seriesIndex:s,value:o,marker:`<span style="display:inline-block;margin-right:4px;border-radius:10px;width:10px;height:10px;background-color:${i.color};"></span>`})}));const s=this.unit?`${(0,p.L)(this.unit,this.hass.locale)}${this.unit}`:"";return i+a.map((t=>{const e=this._entityIds[t.seriesIndex],i=this.hass.states[e],a=this.hass.entities[e],n=String(t.value[1]);let o=i?this.hass.formatEntityState(i,n):`${(0,c.uf)(n,this.hass.locale,(0,c.l4)(void 0,a))}${s}`;const r=this._datasetToDataIndex[t.seriesIndex],h=this.data[r];if(h.statistics&&h.statistics.length>0){o+="<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";o+=0===h.states.length||t.value[0]<h.states[0].last_changed?`${this.hass.localize("ui.components.history_charts.source_stats")}`:`${this.hass.localize("ui.components.history_charts.source_history")}`}return t.seriesName?`${t.marker} ${t.seriesName}: ${o}`:`${t.marker} ${o}`})).join("<br>")}}},{kind:"method",key:"_datasetHidden",value:function(t){this._hiddenStats.add(t.detail.name)}},{kind:"method",key:"_datasetUnhidden",value:function(t){this._hiddenStats.delete(t.detail.name)}},{kind:"method",key:"willUpdate",value:function(t){if((t.has("data")||t.has("startTime")||t.has("endTime")||this._chartTime<new Date(this.endTime.getTime()-d.Q))&&this._generateData(),!this.hasUpdated||t.has("showNames")||t.has("startTime")||t.has("endTime")||t.has("unit")||t.has("logarithmicScale")||t.has("minYAxis")||t.has("maxYAxis")||t.has("fitYData")||t.has("paddingYAxis")||t.has("_visualMap")||t.has("_yWidth")){const t=(0,h.HE)(this.hass);let e=this.minYAxis,i=this.maxYAxis;"number"==typeof e?this.fitYData&&(e=({min:t})=>Math.min(t,this.minYAxis)):this.logarithmicScale&&(e=({min:t})=>Math.floor(t>0?.95*t:1.05*t)),"number"==typeof i?this.fitYData&&(i=({max:t})=>Math.max(t,this.maxYAxis)):this.logarithmicScale&&(i=({max:t})=>Math.ceil(t>0?1.05*t:.95*t)),this._chartOptions={xAxis:{type:"time",min:this.startTime,max:this.endTime},yAxis:{type:this.logarithmicScale?"log":"value",name:this.unit,min:this._clampYAxis(e),max:this._clampYAxis(i),position:t?"right":"left",scale:!0,nameGap:2,nameTextStyle:{align:"left"},axisLine:{show:!1},axisLabel:{margin:5,formatter:t=>{const e=t>=1||t<=-1?void 0:{maximumFractionDigits:Math.max(2,-Math.floor(Math.log10(Math.abs(t%1||1))))},i=(0,c.uf)(t,this.hass.locale,e),a=(0,u.U)(i,12)+5;return a>this._yWidth&&(this._yWidth=a,(0,m.B)(this,"y-width-changed",{value:this._yWidth,chartIndex:this.chartIndex})),i}}},legend:{show:this.showNames},grid:{top:15,left:t?1:Math.max(this.paddingYAxis,this._yWidth),right:t?Math.max(this.paddingYAxis,this._yWidth):1,bottom:20},visualMap:this._visualMap,tooltip:{trigger:"axis",appendTo:document.body,formatter:this._renderTooltip}}}}},{kind:"method",key:"_generateData",value:function(){let t=0;const e=getComputedStyle(this),i=this.data,a=[],s=[],n=[];if(0===i.length)return;this._chartTime=new Date;const o=this.endTime,h=this.names||{};i.forEach(((i,d)=>{const l=i.domain,c=h[i.entity_id]||i.name;let u=null;const m=[],p=(t,e)=>{e&&(t>o||(m.forEach(((i,a)=>{null===e[a]&&u&&null!==u[a]&&i.data.push([t,u[a]]),i.data.push([t,e[a]])})),u=e))},f=(a,o,h,l=!1)=>{h||(h=(0,r.hZ)(t,e),t++),m.push({id:a,data:[],type:"line",cursor:"default",name:o,color:h,symbol:"circle",symbolSize:1,step:"end",sampling:"minmax",animationDurationUpdate:0,lineStyle:{width:l?0:1.5},areaStyle:l?{color:h+"7F"}:void 0,tooltip:{show:!l}}),s.push(i.entity_id),n.push(d)};if("thermostat"===l||"climate"===l||"water_heater"===l){const t=i.states.some((t=>t.attributes?.hvac_action)),a="climate"===l&&t?t=>"heat"===y.hB[t.attributes?.hvac_action]:t=>"heat"===t.state,s="climate"===l&&t?t=>"cool"===y.hB[t.attributes?.hvac_action]:t=>"cool"===t.state,n=i.states.some(a),o=i.states.some(s),r=i.states.some((t=>t.attributes&&t.attributes.target_temp_high!==t.attributes.target_temp_low));f(i.entity_id+"-current_temperature",this.showNames?this.hass.localize("ui.card.climate.current_temperature",{name:c}):this.hass.localize("component.climate.entity_component._.state_attributes.current_temperature.name")),n&&f(i.entity_id+"-heating",this.showNames?this.hass.localize("ui.card.climate.heating",{name:c}):this.hass.localize("component.climate.entity_component._.state_attributes.hvac_action.state.heating"),e.getPropertyValue("--state-climate-heat-color"),!0),o&&f(i.entity_id+"-cooling",this.showNames?this.hass.localize("ui.card.climate.cooling",{name:c}):this.hass.localize("component.climate.entity_component._.state_attributes.hvac_action.state.cooling"),e.getPropertyValue("--state-climate-cool-color"),!0),r?(f(i.entity_id+"-target_temperature_mode",this.showNames?this.hass.localize("ui.card.climate.target_temperature_mode",{name:c,mode:this.hass.localize("ui.card.climate.high")}):this.hass.localize("component.climate.entity_component._.state_attributes.target_temp_high.name")),f(i.entity_id+"-target_temperature_mode_low",this.showNames?this.hass.localize("ui.card.climate.target_temperature_mode",{name:c,mode:this.hass.localize("ui.card.climate.low")}):this.hass.localize("component.climate.entity_component._.state_attributes.target_temp_low.name"))):f(i.entity_id+"-target_temperature",this.showNames?this.hass.localize("ui.card.climate.target_temperature_entity",{name:c}):this.hass.localize("component.climate.entity_component._.state_attributes.temperature.name")),i.states.forEach((t=>{if(!t.attributes)return;const e=_(t.attributes.current_temperature),i=[e];if(n&&i.push(a(t)?e:null),o&&i.push(s(t)?e:null),r){const e=_(t.attributes.target_temp_high),a=_(t.attributes.target_temp_low);i.push(e,a),p(new Date(t.last_changed),i)}else{const e=_(t.attributes.temperature);i.push(e),p(new Date(t.last_changed),i)}}))}else if("humidifier"===l){const t=i.states.some((t=>t.attributes?.action)),a=i.states.some((t=>t.attributes?.current_humidity)),s=t&&i.states.some((t=>"humidifying"===t.attributes?.action)),n=t&&i.states.some((t=>"drying"===t.attributes?.action));f(i.entity_id+"-target_humidity",this.showNames?this.hass.localize("ui.card.humidifier.target_humidity_entity",{name:c}):this.hass.localize("component.humidifier.entity_component._.state_attributes.humidity.name")),a&&f(i.entity_id+"-current_humidity",this.showNames?this.hass.localize("ui.card.humidifier.current_humidity_entity",{name:c}):this.hass.localize("component.humidifier.entity_component._.state_attributes.current_humidity.name")),s?f(i.entity_id+"-humidifying",this.showNames?this.hass.localize("ui.card.humidifier.humidifying",{name:c}):this.hass.localize("component.humidifier.entity_component._.state_attributes.action.state.humidifying"),e.getPropertyValue("--state-humidifier-on-color"),!0):n?f(i.entity_id+"-drying",this.showNames?this.hass.localize("ui.card.humidifier.drying",{name:c}):this.hass.localize("component.humidifier.entity_component._.state_attributes.action.state.drying"),e.getPropertyValue("--state-humidifier-on-color"),!0):f(i.entity_id+"-on",this.showNames?this.hass.localize("ui.card.humidifier.on_entity",{name:c}):this.hass.localize("component.humidifier.entity_component._.state.on"),void 0,!0),i.states.forEach((t=>{if(!t.attributes)return;const e=_(t.attributes.humidity),i=a?_(t.attributes?.current_humidity):e,o=[e];a&&o.push(i),s?o.push("humidifying"===t.attributes?.action?i:null):n?o.push("drying"===t.attributes?.action?i:null):o.push("on"===t.state?i:null),p(new Date(t.last_changed),o)}))}else{let t,e;f(i.entity_id,c);let a=null;const s=i=>{const s=_(i.state),n=new Date(i.last_changed);if(null!==s&&a){const i=n.getTime(),o=a.getTime(),r=e?.getTime();p(a,[(o-r)/(i-r)*(s-t)+t]),p(new Date(o+1),[null]),p(n,[s]),e=n,t=s,a=null}else null!==s&&null===a?(p(n,[s]),e=n,t=s):null===s&&null===a&&void 0!==t&&(a=n)};if(i.statistics){const t=i.states&&0!==i.states.length?i.states[0].last_changed:0;for(const e of i.statistics){if(t&&e.last_changed>=t)break;s(e)}}i.states.forEach((t=>{s(t)})),null!==a&&p(a,[null])}p(o,u),Array.prototype.push.apply(a,m)})),this._chartData=a,this._entityIds=s,this._datasetToDataIndex=n;const d=[];this._chartData.forEach(((t,e)=>{const i=this._datasetToDataIndex[e],a=this.data[i];if(!a.statistics||0===a.statistics.length)return;const s=a.states[0]?.last_changed??this.endTime.getTime();d.push({show:!1,seriesIndex:e,dimension:0,pieces:[{max:s-.01,colorAlpha:.5},{min:s,colorAlpha:1}]})})),this._visualMap=d.length>0?d:void 0}},{kind:"method",key:"_clampYAxis",value:function(t){if(this.logarithmicScale){if("number"==typeof t)return Math.max(t,.1);if("function"==typeof t)return e=>Math.max(t(e),.1)}return t}}]}}),s.oi);customElements.define("state-history-chart-line",k),e()}catch(t){e(t)}}))},15815:function(t,e,i){i.a(t,(async function(t,e){try{var a=i(44249),s=(i(92745),i(9359),i(1331),i(31526),i(57243)),n=i(15093),o=i(64214),r=i(20451),h=i(20172),d=i(25179),l=i(31428),c=i(85803),u=i(37723),m=i(11259),y=i(48066),p=i(36522),f=t([o,d]);[o,d]=f.then?(await f)():f;(0,a.Z)([(0,n.Mo)("state-history-chart-timeline")],(function(t,e){return{F:class extends e{constructor(...e){super(...e),t(this)}},d:[{kind:"field",decorators:[(0,n.Cb)({attribute:!1})],key:"hass",value:void 0},{kind:"field",decorators:[(0,n.Cb)({attribute:!1})],key:"data",value:()=>[]},{kind:"field",decorators:[(0,n.Cb)({type:Boolean})],key:"narrow",value:()=>!1},{kind:"field",decorators:[(0,n.Cb)({attribute:!1})],key:"names",value:void 0},{kind:"field",decorators:[(0,n.Cb)()],key:"unit",value:void 0},{kind:"field",decorators:[(0,n.Cb)()],key:"identifier",value:void 0},{kind:"field",decorators:[(0,n.Cb)({attribute:"show-names",type:Boolean})],key:"showNames",value:()=>!0},{kind:"field",decorators:[(0,n.Cb)({attribute:"click-for-more-info",type:Boolean})],key:"clickForMoreInfo",value:()=>!0},{kind:"field",decorators:[(0,n.Cb)({type:Boolean})],key:"chunked",value:()=>!1},{kind:"field",decorators:[(0,n.Cb)({attribute:!1})],key:"startTime",value:void 0},{kind:"field",decorators:[(0,n.Cb)({attribute:!1})],key:"endTime",value:void 0},{kind:"field",decorators:[(0,n.Cb)({attribute:!1,type:Number})],key:"paddingYAxis",value:()=>0},{kind:"field",decorators:[(0,n.Cb)({attribute:!1,type:Number})],key:"chartIndex",value:void 0},{kind:"field",decorators:[(0,n.SB)()],key:"_chartData",value:()=>[]},{kind:"field",decorators:[(0,n.SB)()],key:"_chartOptions",value:void 0},{kind:"field",decorators:[(0,n.SB)()],key:"_yWidth",value:()=>0},{kind:"field",key:"_chartTime",value:()=>new Date},{kind:"method",key:"render",value:function(){return s.dy` <ha-chart-base .hass="${this.hass}" .options="${this._chartOptions}" .height="${30*this.data.length+30+"px"}" .data="${this._chartData}" @chart-click="${this._handleChartClick}"></ha-chart-base> `}},{kind:"field",key:"_renderItem",value:()=>(t,e)=>{const i=e.value(0),a=e.coord([e.value(1),i]),s=e.coord([e.value(2),i]),n=t.coordSys,o=c.default.graphic.clipRectByRect({x:a[0],y:a[1]-10,width:s[0]-a[0],height:20},{x:n.x,y:n.y,width:n.width,height:n.height});if(!o)return null;const r={type:"rect",transition:"shape",shape:o,style:{fill:e.value(4)}},h=e.value(3);return(0,y.U)(h,12)<o.width-8?{type:"group",children:[r,{type:"text",style:{...o,x:o.x+4,text:h,fill:e.value(5),fontSize:12,lineHeight:o.height}}]}:r}},{kind:"field",key:"_renderTooltip",value(){return t=>{const{value:e,name:i,marker:a,seriesName:s}=Array.isArray(t)?t[0]:t,n=s?`<h4 style="text-align: center; margin: 0;">${s}</h4>`:"",h=e[2]-e[1],d=`${this.hass.localize("ui.components.history_charts.duration")}: ${(0,r.Z)(h)}`;return[n,[a+i,(0,o.E8)(new Date(e[1]),this.hass.locale,this.hass.config),(0,o.E8)(new Date(e[2]),this.hass.locale,this.hass.config),d].join("<br>")].join("")}}},{kind:"method",key:"willUpdate",value:function(t){(t.has("startTime")||t.has("endTime")||t.has("data")||this._chartTime<new Date(this.endTime.getTime()-d.Q))&&this._generateData(),(!this.hasUpdated||t.has("startTime")||t.has("endTime")||t.has("showNames")||t.has("paddingYAxis")||t.has("_yWidth"))&&this._createOptions()}},{kind:"method",key:"_createOptions",value:function(){const t=this.narrow,e=this.chunked||this.showNames,i=t?105:185,a=e?Math.max(this.paddingYAxis,this._yWidth):0,s=(0,h.HE)(this.hass);this._chartOptions={xAxis:{type:"time",min:this.startTime,max:this.endTime,axisTick:{show:!0},splitLine:{show:!1}},yAxis:{type:"category",inverse:!0,position:s?"right":"left",triggerEvent:!0,axisTick:{show:!1},axisLine:{show:!1},axisLabel:{show:e,width:a,overflow:"truncate",margin:5,formatter:t=>{const e=this._chartData.find((e=>e.id===t))?.name,a=e?Math.min((0,y.U)(e,12)+5,i):0;return a>this._yWidth&&(this._yWidth=a,(0,p.B)(this,"y-width-changed",{value:this._yWidth,chartIndex:this.chartIndex})),e},hideOverlap:!0}},grid:{top:10,bottom:30,left:s?1:a,right:s?a:1},tooltip:{appendTo:document.body,formatter:this._renderTooltip}}}},{kind:"method",key:"_generateData",value:function(){const t=getComputedStyle(this);let e=this.data;e||(e=[]),this._chartTime=new Date;const i=this.startTime,a=this.endTime,s=[],n=this.names||{};e.forEach((e=>{let o,r=null,h=null,d=i;const c=this.showNames?n[e.entity_id]||e.name||e.entity_id:"",y=[];if(e.data.forEach((i=>{let s=i.state;if(s||(s=null),!(new Date(i.last_changed)>a))if(null===r)r=s,h=i.state_localize,d=new Date(i.last_changed);else if(s!==r){o=new Date(i.last_changed);const a=(0,l.U)(r,t,this.hass.states[e.entity_id]);y.push({value:[e.entity_id,d,o,h,a,(0,u.T2)((0,m.wK)(a))>.5?"#000":"#fff"],itemStyle:{color:a}}),r=s,h=i.state_localize,d=o}})),null!==r){const i=(0,l.U)(r,t,this.hass.states[e.entity_id]);y.push({value:[e.entity_id,d,a,h,i,(0,u.T2)((0,m.wK)(i))>.5?"#000":"#fff"],itemStyle:{color:i}})}s.push({id:e.entity_id,data:y,name:c,dimensions:["id","start","end","name","color","textColor"],type:"custom",encode:{x:[1,2],y:0,itemName:3},renderItem:this._renderItem})})),this._chartData=s}},{kind:"method",key:"_handleChartClick",value:function(t){if("axisLabel"===t.detail.targetType){const e=this._chartData[t.detail.dataIndex];e&&(0,p.B)(this,"hass-more-info",{entityId:e.id})}}},{kind:"field",static:!0,key:"styles",value:()=>s.iv`ha-chart-base{--chart-max-height:none}`}]}}),s.oi);e()}catch(t){e(t)}}))},71489:function(t,e,i){i.a(t,(async function(t,e){try{var a=i(44249),s=(i(92745),i(9359),i(70104),i(48136),i(57243)),n=i(15093),o=i(72344),r=i(31146),h=i(47641),d=i(67650),l=i(15815),c=t([d,l]);[d,l]=c.then?(await c)():c;const u=10,m=(t,e)=>t.reduce(((t,i,a)=>{const s=Math.floor(a/e);return t[s]||(t[s]=[]),t[s].push(i),t}),[]);(0,a.Z)([(0,n.Mo)("state-history-charts")],(function(t,e){return{F:class extends e{constructor(...e){super(...e),t(this)}},d:[{kind:"field",decorators:[(0,n.Cb)({attribute:!1})],key:"hass",value:void 0},{kind:"field",decorators:[(0,n.Cb)({attribute:!1})],key:"historyData",value:void 0},{kind:"field",decorators:[(0,n.Cb)({type:Boolean})],key:"narrow",value:()=>!1},{kind:"field",decorators:[(0,n.Cb)({attribute:!1})],key:"names",value:void 0},{kind:"field",decorators:[(0,n.Cb)({type:Boolean,reflect:!0})],key:"virtualize",value:()=>!1},{kind:"field",decorators:[(0,n.Cb)({attribute:!1})],key:"endTime",value:void 0},{kind:"field",decorators:[(0,n.Cb)({attribute:!1})],key:"startTime",value:void 0},{kind:"field",decorators:[(0,n.Cb)({type:Boolean,attribute:"up-to-now"})],key:"upToNow",value:()=>!1},{kind:"field",decorators:[(0,n.Cb)({attribute:!1,type:Number})],key:"hoursToShow",value:void 0},{kind:"field",decorators:[(0,n.Cb)({attribute:"show-names",type:Boolean})],key:"showNames",value:()=>!0},{kind:"field",decorators:[(0,n.Cb)({attribute:"click-for-more-info",type:Boolean})],key:"clickForMoreInfo",value:()=>!0},{kind:"field",decorators:[(0,n.Cb)({attribute:"is-loading-data",type:Boolean})],key:"isLoadingData",value:()=>!1},{kind:"field",decorators:[(0,n.Cb)({attribute:"logarithmic-scale",type:Boolean})],key:"logarithmicScale",value:()=>!1},{kind:"field",decorators:[(0,n.Cb)({attribute:!1,type:Number})],key:"minYAxis",value:void 0},{kind:"field",decorators:[(0,n.Cb)({attribute:!1,type:Number})],key:"maxYAxis",value:void 0},{kind:"field",decorators:[(0,n.Cb)({attribute:"fit-y-data",type:Boolean})],key:"fitYData",value:()=>!1},{kind:"field",decorators:[(0,n.Cb)({type:String})],key:"height",value:void 0},{kind:"field",decorators:[(0,n.Cb)({attribute:"expand-legend",type:Boolean})],key:"expandLegend",value:void 0},{kind:"field",key:"_computedStartTime",value:void 0},{kind:"field",key:"_computedEndTime",value:void 0},{kind:"field",decorators:[(0,n.SB)()],key:"_maxYWidth",value:()=>0},{kind:"field",decorators:[(0,n.SB)()],key:"_childYWidths",value:()=>[]},{kind:"field",decorators:[(0,n.SB)()],key:"_chartCount",value:()=>0},{kind:"field",decorators:[(0,r.i)(".container")],key:"_savedScrollPos",value:void 0},{kind:"method",key:"render",value:function(){if(!(0,o.p)(this.hass,"history"))return s.dy`<div class="info"> ${this.hass.localize("ui.components.history_charts.history_disabled")} </div>`;if(this.isLoadingData&&!this.historyData)return s.dy`<div class="info"> ${this.hass.localize("ui.components.history_charts.loading_history")} </div>`;if(this._isHistoryEmpty())return s.dy`<div class="info"> ${this.hass.localize("ui.components.history_charts.no_history_found")} </div>`;const t=this.historyData.timeline.length?(this.virtualize?m(this.historyData.timeline,u):[this.historyData.timeline]).concat(this.historyData.line):this.historyData.line;return this._chartCount=t.length,this.virtualize?s.dy`<div class="container ha-scrollbar" @scroll="${this._saveScrollPos}"> <lit-virtualizer scroller class="ha-scrollbar" .items="${t}" .renderItem="${this._renderHistoryItem}"> </lit-virtualizer> </div>`:s.dy`${t.map(((t,e)=>this._renderHistoryItem(t,e)))}`}},{kind:"field",key:"_renderHistoryItem",value(){return(t,e)=>t&&void 0!==e?Array.isArray(t)?s.dy`<div class="entry-container timeline"> <state-history-chart-timeline .hass="${this.hass}" .data="${t}" .startTime="${this._computedStartTime}" .endTime="${this._computedEndTime}" .showNames="${this.showNames}" .names="${this.names}" .narrow="${this.narrow}" .chunked="${this.virtualize}" .paddingYAxis="${this._maxYWidth}" .chartIndex="${e}" .clickForMoreInfo="${this.clickForMoreInfo}" @y-width-changed="${this._yWidthChanged}"></state-history-chart-timeline> </div> `:s.dy`<div class="entry-container line"> <state-history-chart-line .hass="${this.hass}" .unit="${t.unit}" .data="${t.data}" .identifier="${t.identifier}" .showNames="${this.showNames}" .startTime="${this._computedStartTime}" .endTime="${this._computedEndTime}" .paddingYAxis="${this._maxYWidth}" .names="${this.names}" .chartIndex="${e}" .clickForMoreInfo="${this.clickForMoreInfo}" .logarithmicScale="${this.logarithmicScale}" .minYAxis="${this.minYAxis}" .maxYAxis="${this.maxYAxis}" .fitYData="${this.fitYData}" @y-width-changed="${this._yWidthChanged}" .height="${this.virtualize?void 0:this.height}" .expandLegend="${this.expandLegend}"></state-history-chart-line> </div> `:s.dy``}},{kind:"method",key:"shouldUpdate",value:function(t){return(1!==t.size||!t.has("hass"))&&(1!==t.size||!t.has("_maxYWidth")||t.get("_maxYWidth")!==this._maxYWidth)}},{kind:"method",key:"willUpdate",value:function(t){if(this.hasUpdated||(0,h.o)(),[...t.keys()].some((t=>!["_maxYWidth","_childYWidths","_chartCount"].includes(t)))){const t=new Date;if(this._computedEndTime=this.upToNow||!this.endTime||this.endTime>t?t:this.endTime,this.startTime)this._computedStartTime=this.startTime;else if(this.hoursToShow)this._computedStartTime=new Date((new Date).getTime()-3600*this.hoursToShow*1e3);else{let t=(this.historyData?.timeline??[]).reduce(((t,e)=>Math.min(t,new Date(e.data[0].last_changed).getTime())),(new Date).getTime());t=(this.historyData?.line??[]).reduce(((t,e)=>Math.min(t,e.data.reduce(((t,e)=>Math.min(t,new Date(e.states[0].last_changed).getTime())),t))),t),this._computedStartTime=new Date(t)}}}},{kind:"method",key:"updated",value:function(t){t.has("_chartCount")&&this._chartCount<this._childYWidths.length&&(this._childYWidths.length=this._chartCount,this._maxYWidth=Math.max(...Object.values(this._childYWidths),0))}},{kind:"method",key:"_yWidthChanged",value:function(t){this._childYWidths[t.detail.chartIndex]=t.detail.value,this._maxYWidth=Math.max(...Object.values(this._childYWidths),0)}},{kind:"method",key:"_isHistoryEmpty",value:function(){const t=!this.historyData||!this.historyData.timeline||!this.historyData.line||0===this.historyData.timeline.length&&0===this.historyData.line.length;return!this.isLoadingData&&t}},{kind:"method",decorators:[(0,n.hO)({passive:!0})],key:"_saveScrollPos",value:function(t){this._savedScrollPos=t.target.scrollTop}},{kind:"field",static:!0,key:"styles",value:()=>s.iv`:host{display:flex;flex-direction:column;min-height:60px}:host([virtualize]){height:100%}.info{text-align:center;line-height:60px;color:var(--secondary-text-color)}.container{max-height:var(--history-max-height)}.entry-container{width:100%}.entry-container.line{flex:1;padding-top:8px;overflow:hidden}.entry-container:hover{z-index:1}:host([virtualize]) .entry-container{padding-left:1px;padding-right:1px;padding-inline-start:1px;padding-inline-end:1px}.entry-container.timeline:first-child{margin-top:var(--timeline-top-margin)}.entry-container:not(:first-child){border-top:2px solid var(--divider-color);margin-top:16px}.container,lit-virtualizer{height:100%;width:100%}lit-virtualizer{contain:size layout!important}state-history-chart-line,state-history-chart-timeline{width:100%}`}]}}),s.oi);e()}catch(t){e(t)}}))},85803:function(t,e,i){i.r(e),i.d(e,{default:()=>v});var a=i(1420),s=i(88375),n=i(33755),o=i(76504),r=i(86596),h=i(94439),d=i(7521),l=i(39718),c=i(32169),u=i(88232),m=i(84716),y=i(94927),p=i(22394),f=i(40716),_=i(32687),k=i(91475);a.D([n.N,o.N,r.N,h.N,d.N,l.N,c.N,u.N,m.N,y.N,f.T,_.z,k.N,p.N]);const v=s},47641:function(t,e,i){i.d(e,{o:()=>a});const a=async()=>{await i.e("31026").then(i.bind(i,35714))}},48066:function(t,e,i){let a;function s(t,e,i="Roboto, Noto, sans-serif"){a||(a=document.createElement("canvas"));const s=a.getContext("2d");if(!s)return 0;s.font=`${e}px ${i}`;const n=s.measureText(t);return Math.ceil(Math.max(n.actualBoundingBoxRight+n.actualBoundingBoxLeft,n.width))}i.d(e,{U:()=>s})}}; //# sourceMappingURL=6473.cfe7aced4da67bef.js.map