iobroker.lovelace
Version:
With this adapter you can build visualization for ioBroker with Home Assistant Lovelace UI
1 lines • 33.7 kB
JavaScript
"use strict";(self.rspackChunkhome_assistant_frontend=self.rspackChunkhome_assistant_frontend||[]).push([[46866],{67084:function(t,e,i){i.d(e,{A:function(){return s}});const a=(t,e=2)=>{let i=""+t;for(let a=1;a<e;a++)i=parseInt(i)<10**a?`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),o=Math.floor(t%1e3);return e>0?`${e}:${a(i)}:${a(s)}`:i>0?`${i}:${a(s)}`:s>0||o>0?`${s}${o>0?`.${a(o,3)}`:""}`:null}},29961:function(t,e,i){i.a(t,async function(t,a){try{i.d(e,{d:function(){return h},n:function(){return l}});var s=i(72487),o=i(30162),n=t([s,o]);function h(t,e,i){return"month"===t?{formatter:t=>{const a=new Date(t);return 0===a.getMonth()?`{bold|${(0,s.fr)(a,e,i)}}`:(0,s.Wq)(a,e,i)}}:"year"===t?{formatter:t=>(0,s.Pm)(new Date(t),e,i)}:void 0}function l(t,e,i,a){const n=a/60/24,r=new Date(t);if(n>88)return 0===r.getMonth()?`{bold|${(0,s.fr)(r,e,i)}}`:(0,s.Wq)(r,e,i);if(n>35)return 1===r.getDate()?`{bold|${(0,s.sl)(r,e,i)}}`:(0,s.sl)(r,e,i);if(n>7){const t=(0,s.sl)(r,e,i);return 1===r.getDate()?`{bold|${t}}`:t}return n>2?(0,s.gu)(r,e,i):a&&a<5?(0,o.ie)(r,e,i):0===r.getHours()&&0===r.getMinutes()&&0===r.getSeconds()?`{bold|${(0,s.sl)(r,e,i)}}`:(0,o.fU)(r,e,i)}[s,o]=n.then?(await n)():n,a()}catch(r){a(r)}})},1253:function(t,e,i){i.d(e,{mJ:function(){return a}});i(62953);const a=(t,e,i,a,s)=>{const[o]=t,[n,r]=s.viewSize,[h,l]=s.contentSize,d=i instanceof HTMLElement&&"rtl"===getComputedStyle(i).direction,c=o+12,m=o-12-h;let u=d?m:c;(u+h>n||u<0)&&(u=d?c:m),u=Math.max(0,Math.min(u,n-h));return[u,Math.max(0,Math.min(10,r-l))]}},33062:function(t,e,i){i(62953);var a=i(40445),s=i(5124),o=i(67576);let n;class r extends s.WF{willUpdate(t){t.has("color")&&(this.style.backgroundColor=this.color)}render(){return s.s6}constructor(...t){super(...t),this.color="",this.rtl=!1}}r.styles=(0,s.AH)(n||(n=(t=>t)`:host{display:inline-block;margin-inline-end:4px;margin-inline-start:initial;border-radius:10px;width:10px;height:10px;vertical-align:middle}:host([rtl]){direction:rtl}`)),(0,a.Cg)([(0,o.MZ)()],r.prototype,"color",void 0),(0,a.Cg)([(0,o.MZ)({type:Boolean,reflect:!0})],r.prototype,"rtl",void 0),r=(0,a.Cg)([(0,o.EM)("ha-chart-tooltip-marker")],r)},23577:function(t,e,i){i.a(t,async function(t,e){try{i(44114),i(18111),i(22489),i(20116),i(7588),i(61701),i(13579),i(17642),i(58004),i(33853),i(45876),i(32475),i(15024),i(31698),i(62953);var a=i(40445),s=i(5124),o=i(67576),n=i(89784),r=i(90433),h=i(15638),l=i(44439),d=i(1253),c=(i(33062),i(89938)),m=i(95747),u=i(20058),p=i(3461),y=i(1087),g=i(38279),_=i(8549),f=i(53610),v=t([l,f,m,u]);[l,f,m,u]=v.then?(await v)():v;let x,b,w,C,M,$=t=>t;const D=t=>{const e=parseFloat(t);return isFinite(e)?e:null},T=[{mode:"heat",action:"heating",cssVar:"--state-climate-heat-color"},{mode:"cool",action:"cooling",cssVar:"--state-climate-cool-color"},{mode:"dry",action:"drying",cssVar:"--state-climate-dry-color"},{mode:"fan_only",action:"fan",cssVar:"--state-climate-fan_only-color"}],Z=["-current_temperature","-target_temperature","-target_temperature_mode","-target_temperature_mode_low",...T.map(t=>`-${t.action}`),"-current_humidity","-target_humidity","-humidifying","-on"];class S extends s.WF{render(){return(0,s.qy)(x||(x=$` <ha-chart-base .hass="${0}" .data="${0}" .options="${0}" .height="${0}" style="${0}" -hidden="${0}" -unhidden="${0}" -zoom="${0}" .expandLegend="${0}" .hideResetButton="${0}" .clickLabelForMoreInfo="${0}" -label-click="${0}"></ha-chart-base> `),this.hass,this._chartData,this._chartOptions,this.height,(0,n.W)({height:this.height}),this._datasetHidden,this._datasetUnhidden,this._handleDataZoom,this.expandLegend,this.hideResetButton,this.clickForMoreInfo,this._handleLegendLabelClick)}_datasetHidden(t){this._hiddenStats.add(t.detail.id)}_datasetUnhidden(t){this._hiddenStats.delete(t.detail.id)}zoom(t,e){this.shadowRoot.querySelector("ha-chart-base").zoom(t,e,!0)}_handleDataZoom(t){var e,i;(0,y.r)(this,"chart-zoom-with-index",{start:null!==(e=t.detail.start)&&void 0!==e?e:0,end:null!==(i=t.detail.end)&&void 0!==i?i:100,chartIndex:this.chartIndex})}_handleLegendLabelClick(t){const e=t.detail.id;let i=e;if(!this.hass.states[i])for(const a of Z)if(e.endsWith(a)){i=e.slice(0,-a.length);break}this.hass.states[i]&&(0,y.r)(this,"hass-more-info",{entityId:i})}willUpdate(t){if((t.has("data")||t.has("startTime")||t.has("endTime")||this._chartTime<new Date(this.endTime.getTime()-3e5))&&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")||t.has("hass")&&this._hasEntityStatesChanged(t.get("hass"))){const t=(0,h.qC)(this.hass.language,this.hass.translationMetadata.translations);let e=this.minYAxis,i=this.maxYAxis;"number"==typeof e?this.fitYData&&(e=({min:t})=>Math.min(this._roundYAxis(t,Math.floor),this.minYAxis)):this.logarithmicScale&&(e=({min:t})=>{const e=t>0?.95*t:1.05*t;return this._roundYAxis(e,Math.floor)}),"number"==typeof i?this.fitYData&&(i=({max:t})=>Math.max(this._roundYAxis(t,Math.ceil),this.maxYAxis)):this.logarithmicScale&&(i=({max:t})=>{const e=t>0?1.05*t:.95*t;return this._roundYAxis(e,Math.ceil)}),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:this._formatYAxisLabel}},legend:{type:"custom",show:this.showNames,data:this._chartData.map((t,e)=>({dataset:t,entityId:this._entityIds[e]})).filter(t=>!t.dataset.areaStyle).map(t=>{const e=this.hass.states[t.entityId];let i;if(e){const a=t.dataset.id;if(null!=a&&a.endsWith("-current_temperature")||null!=a&&a.endsWith("-target_temperature")||null!=a&&a.endsWith("-target_temperature_mode")||null!=a&&a.endsWith("-target_temperature_mode_low")){let t;t=a.endsWith("-current_temperature")?"current_temperature":a.endsWith("-target_temperature_mode_low")?"target_temp_low":a.endsWith("-target_temperature_mode")?"target_temp_high":"temperature",i=(0,f.computeAttributeValueDisplay)(this.hass.localize,e,this.hass.locale,this.hass.config,this.hass.entities,t)}void 0===i&&(i=this.hass.formatEntityState(e))}return{id:t.dataset.id,name:t.dataset.name,value:i}})},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",renderMode:"html",position:d.mJ,confine:!0,formatter:this._renderTooltip}}}}_hasEntityStatesChanged(t){return this._entityIds.some(e=>{var i,a;return(null===(i=this.hass.states[e])||void 0===i?void 0:i.state)!==(null===(a=t.states[e])||void 0===a?void 0:a.state)})}_generateData(){let t=0;const e=getComputedStyle(this),i=this.data,a=[],s=[],o=[];let n=1/0,h=-1/0;const l=t=>{"number"==typeof t&&Number.isFinite(t)&&(t<n&&(n=t),t>h&&(h=t))};if(0===i.length)return;this._chartTime=new Date;const d=this.endTime,m=this.names||{},u=this.colors||{};i.forEach((i,n)=>{const h=i.domain,c=m[i.entity_id]||i.name,p=u[i.entity_id];let y=null;const _=[],f=(t,e)=>{e&&(t>d||(_.forEach((i,a)=>{null===e[a]&&y&&null!==y[a]&&i.data.push([t,y[a]]),i.data.push([t,e[a]]),l(e[a])}),y=e))},v=(a,h,l,d=!1)=>{l||(l=(0,r.fI)(t,e),t++),_.push({id:a,data:[],type:"line",cursor:"default",name:h,color:l,symbol:"circle",symbolSize:1,step:"end",sampling:"minmax",animationDurationUpdate:0,lineStyle:{width:d?0:1.5},areaStyle:d?{color:l+"7F"}:void 0,tooltip:{show:!d}}),s.push(i.entity_id),o.push(n)};if("thermostat"===h||"climate"===h||"water_heater"===h){const t=i.states.some(t=>{var e;return null===(e=t.attributes)||void 0===e?void 0:e.hvac_action}),a=T.map(({mode:e,action:i,cssVar:a})=>({action:i,cssVar:a,isActive:"climate"===h&&t?t=>{var i;return g.sx[null===(i=t.attributes)||void 0===i?void 0:i.hvac_action]===e}:t=>t.state===e})).filter(({isActive:t})=>i.states.some(t)),s=i.states.some(t=>t.attributes&&t.attributes.target_temp_high!==t.attributes.target_temp_low);v(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"));for(const{action:o,cssVar:n}of a)v(`${i.entity_id}-${o}`,this.showNames?this.hass.localize(`ui.card.climate.${o}`,{name:c}):this.hass.localize(`component.climate.entity_component._.state_attributes.hvac_action.state.${o}`),e.getPropertyValue(n),!0);s?(v(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")),v(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"))):v(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=D(t.attributes.current_temperature),i=[e];for(const{isActive:s}of a)i.push(s(t)?e:null);if(s){const e=D(t.attributes.target_temp_high),a=D(t.attributes.target_temp_low);i.push(e,a),f(new Date(t.last_changed),i)}else{const e=D(t.attributes.temperature);i.push(e),f(new Date(t.last_changed),i)}})}else if("humidifier"===h){const t=i.states.some(t=>{var e;return null===(e=t.attributes)||void 0===e?void 0:e.action}),a=i.states.some(t=>{var e;return null===(e=t.attributes)||void 0===e?void 0:e.current_humidity}),s=t&&i.states.some(t=>{var e;return"humidifying"===(null===(e=t.attributes)||void 0===e?void 0:e.action)}),o=t&&i.states.some(t=>{var e;return"drying"===(null===(e=t.attributes)||void 0===e?void 0:e.action)});v(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&&v(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?v(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):o?v(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):v(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=>{var e;if(!t.attributes)return;const i=D(t.attributes.humidity),n=a?D(null===(e=t.attributes)||void 0===e?void 0:e.current_humidity):i,r=[i];var h;if(a&&r.push(n),s)r.push("humidifying"===(null===(h=t.attributes)||void 0===h?void 0:h.action)?n:null);else if(o){var l;r.push("drying"===(null===(l=t.attributes)||void 0===l?void 0:l.action)?n:null)}else r.push("on"===t.state?n:null);f(new Date(t.last_changed),r)})}else{let t,e;v(i.entity_id,c,p);let a=null;const s=i=>{const s=D(i.state),o=new Date(i.last_changed);if(null!==s&&a){var n;const i=o.getTime(),r=a.getTime(),h=null===(n=e)||void 0===n?void 0:n.getTime();f(a,[(r-h)/(i-h)*(s-t)+t]),f(new Date(r+1),[null]),f(o,[s]),e=o,t=s,a=null}else null!==s&&null===a?(f(o,[s]),e=o,t=s):null===s&&null===a&&void 0!==t&&(a=o)};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&&f(a,[null])}f(d,y);const x=new Date,b=x.getTime()-d.getTime()<=1e3;if("sensor"===h&&b&&1===_.length){const t=this.hass.states[i.entity_id],e=t?D(t.state):null;null!==e&&(_[0].data.push([x,e]),l(e))}Array.prototype.push.apply(a,_)}),this._yAxisFractionDigits=(0,c.G)(n,h),this._chartData=a,this._entityIds=s,this._datasetToDataIndex=o;const p=[];this._chartData.forEach((t,e)=>{var i,a;const s=this._datasetToDataIndex[e],o=this.data[s];if(!o.statistics||0===o.statistics.length)return;const n=null!==(i=null===(a=o.states[0])||void 0===a?void 0:a.last_changed)&&void 0!==i?i:this.endTime.getTime();p.push({show:!1,seriesIndex:e,dimension:0,pieces:[{max:n-.01,colorAlpha:.5},{min:n,colorAlpha:1}]})}),this._visualMap=p.length>0?p:void 0}_clampYAxis(t){if(this.logarithmicScale){if("number"==typeof t)return Math.max(t,Number.EPSILON);if("function"==typeof t)return e=>Math.max(t(e),Number.EPSILON)}return t}_roundYAxis(t,e){return Math.abs(t)<1?t:e(t)}constructor(...t){super(...t),this.data=[],this.showNames=!0,this.clickForMoreInfo=!0,this.paddingYAxis=0,this.logarithmicScale=!1,this.fitYData=!1,this._chartData=[],this._entityIds=[],this._datasetToDataIndex=[],this._hiddenStats=new Set,this._yWidth=25,this._chartTime=new Date,this._yAxisFractionDigits=1,this._renderTooltip=t=>{const e=t[0].axisValue,i=(0,m.yg)(new Date(e),this.hass.locale,this.hass.config),a=[];this._chartData.forEach((i,s)=>{var o;if(!1===(null===(o=i.tooltip)||void 0===o?void 0:o.show)||this._hiddenStats.has(i.id))return;const n=t.find(t=>t.seriesIndex===s);if(n)return void a.push(n);let r;const h=i.data||[];for(let t=h.length-1;t>=0;t--){const i=h[t];if(i&&i[0]<=e&&"number"==typeof i[1]){r=i;break}}r&&a.push({seriesName:i.name,seriesIndex:s,value:r,color:i.color})});const o=this.unit?`${(0,_.A)(this.unit,this.hass.locale)}${this.unit}`:"";return(0,s.qy)(b||(b=$`${0}${0}`),i,a.map(t=>{var e;const i=this._entityIds[t.seriesIndex],a=this.hass.states[i],n=this.hass.entities[i],r=String(t.value[1]),h=a?this.hass.formatEntityState(a,r):`${(0,u.ZV)(r,this.hass.locale,(0,u.ZQ)(void 0,n))}${o}`,l=this._datasetToDataIndex[t.seriesIndex],d=this.data[l];let c=s.s6;if(d.statistics&&d.statistics.length>0){const e=0===d.states.length||t.value[0]<d.states[0].last_changed?this.hass.localize("ui.components.history_charts.source_stats"):this.hass.localize("ui.components.history_charts.source_history");c=(0,s.qy)(w||(w=$`<br>${0}${0}`)," ".repeat(5),e)}return(0,s.qy)(C||(C=$`<br><ha-chart-tooltip-marker .color="${0}"></ha-chart-tooltip-marker> ${0}${0}${0}`),String(null!==(e=t.color)&&void 0!==e?e:""),t.seriesName?(0,s.qy)(M||(M=$`${0}: `),t.seriesName):s.s6,h,c)}))},this._formatYAxisLabel=t=>{const e=(0,u.ZV)(t,this.hass.locale,{maximumFractionDigits:this._yAxisFractionDigits}),i=(0,p.W)(e,12)+5;return i>this._yWidth&&(this._yWidth=i,(0,y.r)(this,"y-width-changed",{value:this._yWidth,chartIndex:this.chartIndex})),e}}}(0,a.Cg)([(0,o.MZ)({attribute:!1})],S.prototype,"hass",void 0),(0,a.Cg)([(0,o.MZ)({attribute:!1})],S.prototype,"data",void 0),(0,a.Cg)([(0,o.MZ)({attribute:!1})],S.prototype,"names",void 0),(0,a.Cg)([(0,o.MZ)({attribute:!1})],S.prototype,"colors",void 0),(0,a.Cg)([(0,o.MZ)()],S.prototype,"unit",void 0),(0,a.Cg)([(0,o.MZ)()],S.prototype,"identifier",void 0),(0,a.Cg)([(0,o.MZ)({attribute:"show-names",type:Boolean})],S.prototype,"showNames",void 0),(0,a.Cg)([(0,o.MZ)({attribute:"click-for-more-info",type:Boolean})],S.prototype,"clickForMoreInfo",void 0),(0,a.Cg)([(0,o.MZ)({attribute:!1})],S.prototype,"startTime",void 0),(0,a.Cg)([(0,o.MZ)({attribute:!1})],S.prototype,"endTime",void 0),(0,a.Cg)([(0,o.MZ)({attribute:!1})],S.prototype,"paddingYAxis",void 0),(0,a.Cg)([(0,o.MZ)({attribute:!1})],S.prototype,"chartIndex",void 0),(0,a.Cg)([(0,o.MZ)({attribute:"logarithmic-scale",type:Boolean})],S.prototype,"logarithmicScale",void 0),(0,a.Cg)([(0,o.MZ)({attribute:!1})],S.prototype,"minYAxis",void 0),(0,a.Cg)([(0,o.MZ)({attribute:!1})],S.prototype,"maxYAxis",void 0),(0,a.Cg)([(0,o.MZ)({attribute:"fit-y-data",type:Boolean})],S.prototype,"fitYData",void 0),(0,a.Cg)([(0,o.MZ)({type:String})],S.prototype,"height",void 0),(0,a.Cg)([(0,o.MZ)({attribute:"expand-legend",type:Boolean})],S.prototype,"expandLegend",void 0),(0,a.Cg)([(0,o.MZ)({attribute:"hide-reset-button",type:Boolean})],S.prototype,"hideResetButton",void 0),(0,a.Cg)([(0,o.wk)()],S.prototype,"_chartData",void 0),(0,a.Cg)([(0,o.wk)()],S.prototype,"_entityIds",void 0),(0,a.Cg)([(0,o.wk)()],S.prototype,"_chartOptions",void 0),(0,a.Cg)([(0,o.wk)()],S.prototype,"_yWidth",void 0),(0,a.Cg)([(0,o.wk)()],S.prototype,"_visualMap",void 0),S=(0,a.Cg)([(0,o.EM)("state-history-chart-line")],S),e()}catch(x){e(x)}})},13672:function(t,e,i){i.a(t,async function(t,e){try{i(44114),i(18111),i(20116),i(7588),i(27495),i(25440),i(79978),i(62953);var a=i(40445),s=i(5124),o=i(67576),n=i(95747),r=i(67084),h=i(15638),l=i(44439),d=i(1253),c=(i(33062),i(72190)),m=i(79144),u=i(79622),p=i(79468),y=i(3461),g=i(1087),_=t([l,n]);[l,n]=_.then?(await _)():_;let f,v,x,b,w=t=>t;class C extends s.WF{render(){return(0,s.qy)(f||(f=w` <ha-chart-base .hass="${0}" .options="${0}" .height="${0}" .data="${0}" small-controls -click="${0}" -zoom="${0}" .hideResetButton="${0}"></ha-chart-base> `),this.hass,this._chartOptions,30*this.data.length+30+"px",this._chartData,this._handleChartClick,this._handleDataZoom,this.hideResetButton)}willUpdate(t){this.isConnected&&(t.has("startTime")||t.has("endTime")||t.has("data")||this._chartTime<new Date(this.endTime.getTime()-3e5))&&this._generateData(),(!this.hasUpdated||t.has("startTime")||t.has("endTime")||t.has("showNames")||t.has("paddingYAxis")||t.has("_yWidth"))&&this._createOptions()}_createOptions(){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.qC)(this.hass.language,this.hass.translationMetadata.translations);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=>{var e;const a=null===(e=this._chartData.find(e=>e.id===t))||void 0===e?void 0:e.name,s=a?Math.min((0,y.W)(a,12)+5,i):0;return s>this._yWidth&&(this._yWidth=s,(0,g.r)(this,"y-width-changed",{value:this._yWidth,chartIndex:this.chartIndex})),a},hideOverlap:!0}},grid:{top:10,bottom:30,left:s?1:a,right:s?a:1},tooltip:{renderMode:"html",position:d.mJ,confine:!0,formatter:this._renderTooltip}}}zoom(t,e){this.shadowRoot.querySelector("ha-chart-base").zoom(t,e,!0)}_handleDataZoom(t){var e,i;(0,g.r)(this,"chart-zoom-with-index",{start:null!==(e=t.detail.start)&&void 0!==e?e:0,end:null!==(i=t.detail.end)&&void 0!==i?i:100,chartIndex:this.chartIndex})}_generateData(){const t=getComputedStyle(this);let e=this.data;e||(e=[]),this._chartTime=new Date;const i=this.startTime,a=this.endTime,s=[],o=this.names||{};e.forEach(e=>{let n,r=null,h=null,l=i;const d=this.showNames?o[e.entity_id]||e.name||e.entity_id:"",m=[];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,l=new Date(i.last_changed);else if(s!==r){n=new Date(i.last_changed);const a=(0,c.c)(r,t,this.hass.states[e.entity_id]);m.push({value:[e.entity_id,l,n,h,a,(0,u.EP)((0,p.xp)(a))>.5?"#000":"#fff"],itemStyle:{color:a}}),r=s,h=i.state_localize,l=n}}),null!==r){const i=(0,c.c)(r,t,this.hass.states[e.entity_id]);m.push({value:[e.entity_id,l,a,h,i,(0,u.EP)((0,p.xp)(i))>.5?"#000":"#fff"],itemStyle:{color:i}})}s.push({id:e.entity_id,data:m,name:d,dimensions:["id","start","end","name","color","textColor"],type:"custom",encode:{x:[1,2],y:0,itemName:3},renderItem:this._renderItem,progressive:0})}),this._chartData=s}_handleChartClick(t){if("axisLabel"===t.detail.targetType){const e=this._chartData[t.detail.dataIndex];e&&(0,g.r)(this,"hass-more-info",{entityId:e.id})}}constructor(...t){super(...t),this.data=[],this.narrow=!1,this.showNames=!0,this.clickForMoreInfo=!0,this.chunked=!1,this.paddingYAxis=0,this._chartData=[],this._yWidth=0,this._chartTime=new Date,this._renderItem=(t,e)=>{const i=e.value(0),a=e.coord([e.value(1),i]),s=e.coord([e.value(2),i]),o=t.coordSys,n=m.default.graphic.clipRectByRect({x:a[0],y:a[1]-10,width:s[0]-a[0],height:20},{x:o.x,y:o.y,width:o.width,height:o.height});if(!n)return null;const r={type:"rect",transition:"shape",shape:n,style:{fill:e.value(4)}},h=e.value(3).replaceAll("\n"," ");return(0,y.W)(h,12)<n.width-8?{type:"group",children:[r,{type:"text",style:Object.assign(Object.assign({},n),{},{x:n.x+4,text:h,fill:e.value(5),fontSize:12,lineHeight:n.height})}]}:r},this._renderTooltip=t=>{const{value:e,name:i,seriesName:a,color:o}=Array.isArray(t)?t[0]:t,l=e[2]-e[1],d=`${this.hass.localize("ui.components.history_charts.duration")}: ${(0,r.A)(l)}`,c=(0,h.qC)(this.hass.language,this.hass.translationMetadata.translations);return(0,s.qy)(v||(v=w`${0}<ha-chart-tooltip-marker .color="${0}" .rtl="${0}"></ha-chart-tooltip-marker>${0}<br>${0}<br>${0}<br>${0}`),a?(0,s.qy)(x||(x=w`<h4 style="text-align:center;margin:0">${0}</h4>`),a):s.s6,String(null!=o?o:""),c,i,(0,n.yg)(new Date(e[1]),this.hass.locale,this.hass.config),(0,n.yg)(new Date(e[2]),this.hass.locale,this.hass.config),d)}}}C.styles=(0,s.AH)(b||(b=w`ha-chart-base{--chart-max-height:none}`)),(0,a.Cg)([(0,o.MZ)({attribute:!1})],C.prototype,"hass",void 0),(0,a.Cg)([(0,o.MZ)({attribute:!1})],C.prototype,"data",void 0),(0,a.Cg)([(0,o.MZ)({type:Boolean})],C.prototype,"narrow",void 0),(0,a.Cg)([(0,o.MZ)({attribute:!1})],C.prototype,"names",void 0),(0,a.Cg)([(0,o.MZ)()],C.prototype,"unit",void 0),(0,a.Cg)([(0,o.MZ)()],C.prototype,"identifier",void 0),(0,a.Cg)([(0,o.MZ)({attribute:"show-names",type:Boolean})],C.prototype,"showNames",void 0),(0,a.Cg)([(0,o.MZ)({attribute:"click-for-more-info",type:Boolean})],C.prototype,"clickForMoreInfo",void 0),(0,a.Cg)([(0,o.MZ)({type:Boolean})],C.prototype,"chunked",void 0),(0,a.Cg)([(0,o.MZ)({attribute:!1})],C.prototype,"startTime",void 0),(0,a.Cg)([(0,o.MZ)({attribute:!1})],C.prototype,"endTime",void 0),(0,a.Cg)([(0,o.MZ)({attribute:!1})],C.prototype,"paddingYAxis",void 0),(0,a.Cg)([(0,o.MZ)({attribute:!1})],C.prototype,"chartIndex",void 0),(0,a.Cg)([(0,o.MZ)({attribute:"hide-reset-button",type:Boolean})],C.prototype,"hideResetButton",void 0),(0,a.Cg)([(0,o.wk)()],C.prototype,"_chartData",void 0),(0,a.Cg)([(0,o.wk)()],C.prototype,"_chartOptions",void 0),(0,a.Cg)([(0,o.wk)()],C.prototype,"_yWidth",void 0),C=(0,a.Cg)([(0,o.EM)("state-history-chart-timeline")],C),e()}catch(f){e(f)}})},66737:function(t,e,i){i.a(t,async function(t,e){try{i(74423),i(44114),i(72712),i(18111),i(7588),i(61701),i(18237),i(62953);var a=i(40445),s=i(5124),o=i(67576),n=i(36312),r=i(26218),h=i(85614),l=i(18350),d=(i(67094),i(23577)),c=i(13672),m=t([l,d,c]);[l,d,c]=m.then?(await m)():m;let u,p,y,g,_,f,v,x,b,w,C,M=t=>t;const $="M12,4C14.1,4 16.1,4.8 17.6,6.3C20.7,9.4 20.7,14.5 17.6,17.6C15.8,19.5 13.3,20.2 10.9,19.9L11.4,17.9C13.1,18.1 14.9,17.5 16.2,16.2C18.5,13.9 18.5,10.1 16.2,7.7C15.1,6.6 13.5,6 12,6V10.6L7,5.6L12,0.6V4M6.3,17.6C3.7,15 3.3,11 5.1,7.9L6.6,9.4C5.5,11.6 5.9,14.4 7.8,16.2C8.3,16.7 8.9,17.1 9.6,17.4L9,19.4C8,19 7.1,18.4 6.3,17.6Z",D=10,T=(t,e)=>t.reduce((t,i,a)=>{const s=Math.floor(a/e);return t[s]||(t[s]=[]),t[s].push(i),t},[]);class Z extends s.WF{render(){if(!(0,n.x)(this.hass.config,"history"))return(0,s.qy)(u||(u=M`<div class="info"> ${0} </div>`),this.hass.localize("ui.components.history_charts.history_disabled"));if(this.isLoadingData&&!this.historyData)return(0,s.qy)(p||(p=M`<div class="info"> ${0} </div>`),this.hass.localize("ui.components.history_charts.loading_history"));if(this._isHistoryEmpty())return(0,s.qy)(y||(y=M`<div class="info"> ${0} </div>`),this.hass.localize("ui.components.history_charts.no_history_found"));const t=this.historyData.timeline.length?(this.virtualize?T(this.historyData.timeline,D):[this.historyData.timeline]).concat(this.historyData.line):this.historyData.line;return this._chartCount=t.length,(0,s.qy)(g||(g=M` ${0} ${0} `),this.virtualize?(0,s.qy)(_||(_=M`<div class="container ha-scrollbar" ="${0}"> <lit-virtualizer scroller class="ha-scrollbar" .items="${0}" .renderItem="${0}"> </lit-virtualizer> </div>`),this._saveScrollPos,t,this._renderHistoryItem):(0,s.qy)(f||(f=M`${0}`),t.map((t,e)=>this._renderHistoryItem(t,e))),this.syncCharts&&this._hasZoomedCharts?(0,s.qy)(v||(v=M`<ha-button size="large" class="reset-button" ="${0}"> <ha-svg-icon slot="start" .path="${0}"></ha-svg-icon> ${0} </ha-button>`),this._handleGlobalZoomReset,$,this.hass.localize("ui.components.history_charts.zoom_reset")):s.s6)}shouldUpdate(t){return(1!==t.size||!t.has("hass"))&&(1!==t.size||!t.has("_maxYWidth")||t.get("_maxYWidth")!==this._maxYWidth)}willUpdate(t){if(this.hasUpdated||(0,h.i)(),[...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{var e,i,a,s;let t=(null!==(e=null===(i=this.historyData)||void 0===i?void 0:i.timeline)&&void 0!==e?e:[]).reduce((t,e)=>Math.min(t,new Date(e.data[0].last_changed).getTime()),(new Date).getTime());t=(null!==(a=null===(s=this.historyData)||void 0===s?void 0:s.line)&&void 0!==a?a:[]).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)}}}updated(t){t.has("_chartCount")&&this._chartCount<this._childYWidths.length&&(this._childYWidths.length=this._chartCount,this._maxYWidth=Math.max(...Object.values(this._childYWidths),0))}_yWidthChanged(t){this._childYWidths[t.detail.chartIndex]=t.detail.value,this._maxYWidth=Math.max(...Object.values(this._childYWidths),0)}_handleTimelineSync(t){if(!this.syncCharts||this._isSyncing)return;const{start:e,end:i,chartIndex:a}=t.detail;this._hasZoomedCharts=0!==e||100!==i,this._syncZoomToAllCharts(e,i,a)}_syncZoomToAllCharts(t,e,i){this._isSyncing=!0,requestAnimationFrame(()=>{this._chartComponents.forEach((a,s)=>{s!==i&&"zoom"in a&&a.zoom(t,e)}),this._isSyncing=!1})}_handleGlobalZoomReset(){this._hasZoomedCharts=!1,this._isSyncing=!0,requestAnimationFrame(()=>{this._chartComponents.forEach(t=>{var e;const i=null===(e=t.renderRoot)||void 0===e?void 0:e.querySelector("ha-chart-base");i&&i.chart&&i.zoom(0,100)}),this._isSyncing=!1})}_isHistoryEmpty(){const t=!this.historyData||!this.historyData.timeline||!this.historyData.line||0===this.historyData.timeline.length&&0===this.historyData.line.length;return!this.isLoadingData&&t}_saveScrollPos(t){this._savedScrollPos=t.target.scrollTop}constructor(...t){super(...t),this.narrow=!1,this.virtualize=!1,this.upToNow=!1,this.showNames=!0,this.clickForMoreInfo=!0,this.isLoadingData=!1,this.logarithmicScale=!1,this.fitYData=!1,this.syncCharts=!1,this._maxYWidth=0,this._childYWidths=[],this._chartCount=0,this._hasZoomedCharts=!1,this._isSyncing=!1,this._renderHistoryItem=(t,e)=>t&&void 0!==e?Array.isArray(t)?(0,s.qy)(w||(w=M`<div class="entry-container timeline"> <state-history-chart-timeline .hass="${0}" .data="${0}" .startTime="${0}" .endTime="${0}" .showNames="${0}" .names="${0}" .narrow="${0}" .chunked="${0}" .paddingYAxis="${0}" .chartIndex="${0}" .clickForMoreInfo="${0}" -width-changed="${0}" -zoom-with-index="${0}" ?hide-reset-button="${0}"></state-history-chart-timeline> </div> `),this.hass,t,this._computedStartTime,this._computedEndTime,this.showNames,this.names,this.narrow,this.virtualize,this._maxYWidth,e,this.clickForMoreInfo,this._yWidthChanged,this._handleTimelineSync,this.syncCharts):(0,s.qy)(b||(b=M`<div class="entry-container line"> <state-history-chart-line .hass="${0}" .unit="${0}" .data="${0}" .identifier="${0}" .showNames="${0}" .startTime="${0}" .endTime="${0}" .paddingYAxis="${0}" .names="${0}" .colors="${0}" .chartIndex="${0}" .clickForMoreInfo="${0}" .logarithmicScale="${0}" .minYAxis="${0}" .maxYAxis="${0}" .fitYData="${0}" -width-changed="${0}" -zoom-with-index="${0}" .height="${0}" .expandLegend="${0}" ?hide-reset-button="${0}"></state-history-chart-line> </div> `),this.hass,t.unit,t.data,t.identifier,this.showNames,this._computedStartTime,this._computedEndTime,this._maxYWidth,this.names,this.colors,e,this.clickForMoreInfo,this.logarithmicScale,this.minYAxis,this.maxYAxis,this.fitYData,this._yWidthChanged,this._handleTimelineSync,this.virtualize?void 0:this.height,this.expandLegend,this.syncCharts):(0,s.qy)(x||(x=M``))}}Z.styles=(0,s.AH)(C||(C=M`: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%;overflow:visible}.entry-container.line{flex:1;padding-top:8px}.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%}.reset-button{position:fixed;bottom:calc(24px + var(--safe-area-inset-bottom));right:calc(24px + var(--safe-area-inset-bottom));z-index:1;--ha-button-box-shadow:var(--ha-box-shadow-l)}`)),(0,a.Cg)([(0,o.MZ)({attribute:!1})],Z.prototype,"hass",void 0),(0,a.Cg)([(0,o.MZ)({attribute:!1})],Z.prototype,"historyData",void 0),(0,a.Cg)([(0,o.MZ)({type:Boolean})],Z.prototype,"narrow",void 0),(0,a.Cg)([(0,o.MZ)({attribute:!1})],Z.prototype,"names",void 0),(0,a.Cg)([(0,o.MZ)({attribute:!1})],Z.prototype,"colors",void 0),(0,a.Cg)([(0,o.MZ)({type:Boolean,reflect:!0})],Z.prototype,"virtualize",void 0),(0,a.Cg)([(0,o.MZ)({attribute:!1})],Z.prototype,"endTime",void 0),(0,a.Cg)([(0,o.MZ)({attribute:!1})],Z.prototype,"startTime",void 0),(0,a.Cg)([(0,o.MZ)({type:Boolean,attribute:"up-to-now"})],Z.prototype,"upToNow",void 0),(0,a.Cg)([(0,o.MZ)({attribute:!1})],Z.prototype,"hoursToShow",void 0),(0,a.Cg)([(0,o.MZ)({attribute:"show-names",type:Boolean})],Z.prototype,"showNames",void 0),(0,a.Cg)([(0,o.MZ)({attribute:"click-for-more-info",type:Boolean})],Z.prototype,"clickForMoreInfo",void 0),(0,a.Cg)([(0,o.MZ)({attribute:"is-loading-data",type:Boolean})],Z.prototype,"isLoadingData",void 0),(0,a.Cg)([(0,o.MZ)({attribute:"logarithmic-scale",type:Boolean})],Z.prototype,"logarithmicScale",void 0),(0,a.Cg)([(0,o.MZ)({attribute:!1})],Z.prototype,"minYAxis",void 0),(0,a.Cg)([(0,o.MZ)({attribute:!1})],Z.prototype,"maxYAxis",void 0),(0,a.Cg)([(0,o.MZ)({attribute:"fit-y-data",type:Boolean})],Z.prototype,"fitYData",void 0),(0,a.Cg)([(0,o.MZ)({type:String})],Z.prototype,"height",void 0),(0,a.Cg)([(0,o.MZ)({attribute:"expand-legend",type:Boolean})],Z.prototype,"expandLegend",void 0),(0,a.Cg)([(0,o.MZ)({attribute:"sync-charts",type:Boolean})],Z.prototype,"syncCharts",void 0),(0,a.Cg)([(0,o.wk)()],Z.prototype,"_maxYWidth",void 0),(0,a.Cg)([(0,o.wk)()],Z.prototype,"_childYWidths",void 0),(0,a.Cg)([(0,o.wk)()],Z.prototype,"_chartCount",void 0),(0,a.Cg)([(0,o.wk)()],Z.prototype,"_hasZoomedCharts",void 0),(0,a.Cg)([(0,o.YG)("state-history-chart-line, state-history-chart-timeline")],Z.prototype,"_chartComponents",void 0),(0,a.Cg)([(0,r.a)(".container")],Z.prototype,"_savedScrollPos",void 0),(0,a.Cg)([(0,o.Ls)({passive:!0})],Z.prototype,"_saveScrollPos",null),Z=(0,a.Cg)([(0,o.EM)("state-history-charts")],Z),e()}catch(u){e(u)}})},89938:function(t,e,i){function a(t,e){const i=e-t;return!Number.isFinite(i)||i<=0?1:Math.max(0,Math.ceil(-Math.log10(i/10)))}i.d(e,{G:function(){return a}})},79144:function(t,e,i){i.d(e,{W:function(){return v.A},default:function(){return s}});var a=i(88648),s=i(79501),o=i(33156),n=i(93275),r=i(73836),h=i(93084),l=i(69913),d=i(85136),c=i(19795),m=i(89516),u=i(11826),p=i(17966),y=i(70255),g=i(83276),_=i(67797),f=i(39378),v=i(67665),x=(i(62953),i(33810));const b=x.A.prototype.filterData;x.A.prototype.filterData=function(t,e){if("boundaryFilter"!==t.get("filterMode"))return void b.call(this,t,e);if(!this.hostedBy(t))return;const i=this._dimName,a=this._window.value,s=this.getTargetSeriesModels();for(const o of s){const t=o.getData(),e=t.mapDimensionsAll(i);if(!e.length)continue;const s=t.getStore(),n=t.getDimensionIndex(e[0]),r=t.count();let h=-1,l=-1;for(let i=0;i<r;i++){const t=s.get(n,i);isNaN(t)||(t<a[0]?h=i:t>a[1]&&-1===l&&(l=i))}t.filterSelf(t=>{if(t===h||t===l)return!0;const e=s.get(n,t);return!isNaN(e)&&e>=a[0]&&e<=a[1]});for(const i of e)t.setApproximateExtent(a,i)}},a.Y([o.a,n.a,r.a,h.a,l.a,d.a,c.a,m.a,u.a,p.a,g._,_.i,f.a,y.a])},3461: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 o=s.measureText(t);return Math.ceil(Math.max(o.actualBoundingBoxRight+o.actualBoundingBoxLeft,o.width))}i.d(e,{W:function(){return s}})}}]);