2024-03-07 18:15:52 +00:00
function t ( t , e , i , n ) { var r , s = arguments . length , a = s < 3 ? e : null === n ? n = Object . getOwnPropertyDescriptor ( e , i ) : n ; if ( "object" == typeof Reflect && "function" == typeof Reflect . decorate ) a = Reflect . decorate ( t , e , i , n ) ; else for ( var o = t . length - 1 ; o >= 0 ; o -- ) ( r = t [ o ] ) && ( a = ( s < 3 ? r ( a ) : s > 3 ? r ( e , i , a ) : r ( e , i ) ) || a ) ; return s > 3 && a && Object . defineProperty ( e , i , a ) , a } const e = window , i = e . ShadowRoot && ( void 0 === e . ShadyCSS || e . ShadyCSS . nativeShadow ) && "adoptedStyleSheets" in Document . prototype && "replace" in CSSStyleSheet . prototype , n = Symbol ( ) , r = new WeakMap ; class s { constructor ( t , e , i ) { if ( this . _$cssResult$ = ! 0 , i !== n ) throw Error ( "CSSResult is not constructable. Use `unsafeCSS` or `css` instead." ) ; this . cssText = t , this . t = e } get styleSheet ( ) { let t = this . o ; const e = this . t ; if ( i && void 0 === t ) { const i = void 0 !== e && 1 === e . length ; i && ( t = r . get ( e ) ) , void 0 === t && ( ( this . o = t = new CSSStyleSheet ) . replaceSync ( this . cssText ) , i && r . set ( e , t ) ) } return t } toString ( ) { return this . cssText } } const a = i ? t => t : t => t instanceof CSSStyleSheet ? ( t => { let e = "" ; for ( const i of t . cssRules ) e += i . cssText ; return ( t => new s ( "string" == typeof t ? t : t + "" , void 0 , n ) ) ( e ) } ) ( t ) : t ; var o ; const l = window , c = l . trustedTypes , h = c ? c . emptyScript : "" , u = l . reactiveElementPolyfillSupport , d = { toAttribute ( t , e ) { switch ( e ) { case Boolean : t = t ? h : null ; break ; case Object : case Array : t = null == t ? t : JSON . stringify ( t ) } return t } , fromAttribute ( t , e ) { let i = t ; switch ( e ) { case Boolean : i = null !== t ; break ; case Number : i = null === t ? null : Number ( t ) ; break ; case Object : case Array : try { i = JSON . parse ( t ) } catch ( t ) { i = null } } return i } } , f = ( t , e ) => e !== t && ( e == e || t == t ) , m = { attribute : ! 0 , type : String , converter : d , reflect : ! 1 , hasChanged : f } , p = "finalized" ; class g extends HTMLElement { constructor ( ) { super ( ) , this . _$Ei = new Map , this . isUpdatePending = ! 1 , this . hasUpdated = ! 1 , this . _$El = null , this . u ( ) } static addInitializer ( t ) { var e ; this . finalize ( ) , ( null !== ( e = this . h ) && void 0 !== e ? e : this . h = [ ] ) . push ( t ) } static get observedAttributes ( ) { this . finalize ( ) ; const t = [ ] ; return this . elementProperties . forEach ( ( ( e , i ) => { const n = this . _$Ep ( i , e ) ; void 0 !== n && ( this . _$Ev . set ( n , i ) , t . push ( n ) ) } ) ) , t } static createProperty ( t , e = m ) { if ( e . state && ( e . attribute = ! 1 ) , this . finalize ( ) , this . elementProperties . set ( t , e ) , ! e . noAccessor && ! this . prototype . hasOwnProperty ( t ) ) { const i = "symbol" == typeof t ? Symbol ( ) : "__" + t , n = this . getPropertyDescriptor ( t , i , e ) ; void 0 !== n && Object . defineProperty ( this . prototype , t , n ) } } static getPropertyDescriptor ( t , e , i ) { return { get ( ) { return this [ e ] } , set ( n ) { const r = this [ t ] ; this [ e ] = n , this . requestUpdate ( t , r , i ) } , configurable : ! 0 , enumerable : ! 0 } } static getPropertyOptions ( t ) { return this . elementProperties . get ( t ) || m } static finalize ( ) { if ( this . hasOwnProperty ( p ) ) return ! 1 ; this [ p ] = ! 0 ; const t = Object . getPrototypeOf ( this ) ; if ( t . finalize ( ) , void 0 !== t . h && ( this . h = [ ... t . h ] ) , this . elementProperties = new Map ( t . elementProperties ) , this . _$Ev = new Map , this . hasOwnProperty ( "properties" ) ) { const t = this . properties , e = [ ... Object . getOwnPropertyNames ( t ) , ... Object . getOwnPropertySymbols ( t ) ] ; for ( const i of e ) this . createProperty ( i , t [ i ] ) } return this . elementStyles = this . finalizeStyles ( this . styles ) , ! 0 } static finalizeStyles ( t ) { const e = [ ] ; if ( Array . isArray ( t ) ) { const i = new Set ( t . flat ( 1 / 0 ) . reverse ( ) ) ; for ( const t of i ) e . unshift ( a ( t ) ) } else void 0 !== t && e . push ( a ( t ) ) ; return e } static _$Ep ( t , e ) { const i = e . attribute ; return ! 1 === i ? void 0 : "string" == typeof i ? i : "string" == typeof t ? t . toLowerCase ( ) : void 0 } u ( ) { var t ; this . _$E _ = new Promise ( ( t => this . enableUpdating = t ) ) , this . _$AL = new Map , this . _$Eg ( ) , this . requestUpdate ( ) , null === ( t = this . constructor . h ) || void 0 === t || t . forEach ( ( t => t ( this ) ) ) } addController ( t ) { var e , i ; ( null !== ( e = this . _$ES ) && void 0 !== e ? e : this . _$ES = [ ] ) . push ( t ) , void 0 !== this . renderRoot && this . isConnected && ( null === ( i = t . hostConnected ) || void 0 === i || i . call ( t ) ) } removeController ( t ) { var e ; null === ( e = this . _$ES ) || void 0 === e || e . splice ( this . _$ES . indexOf ( t ) >>> 0 , 1 ) } _$Eg ( ) { this . constructor . elementProperties . forEach ( ( ( t , e ) => { this . hasOwnProperty ( e ) && ( this . _$Ei . set ( e , this [ e ] ) , delete this [ e ] ) } ) ) } createRenderRoot ( ) { var t ; const n = null !== ( t = this . shadowRoot ) && void 0 !== t ? t : this . attachShadow ( this . constructor . shadowRootOptions ) ; return ( ( t , n ) => { i ? t . adoptedStyleSheets = n . map ( ( t => t instanceof CSSStyleSheet ? t : t . styleSheet ) ) : n . forEach ( ( i => { const n = document . createElement ( " st
2023-04-09 18:06:11 +00:00
: host {
position : relative ;
display : block ;
2023-08-09 20:28:00 +00:00
-- state - inactive - color : var ( -- paper - item - icon - color ) ;
2023-04-09 18:06:11 +00:00
}
ha - card {
cursor : pointer ;
overflow : hidden ;
box - sizing : border - box ;
position : relative ;
display : flex ;
justify - content : center ;
align - items : center ;
line - height : normal ;
- webkit - touch - callout : none ; /* iOS Safari */
- webkit - user - select : none ; /* Safari */
- khtml - user - select : none ; /* Konqueror HTML */
- moz - user - select : none ; /* Old versions of Firefox */
- ms - user - select : none ; /* Internet Explorer/Edge */
user - select : none ; / * N o n - p r e f i x e d v e r s i o n , c u r r e n t l y
supported by Chrome , Opera and Firefox * /
}
ha - card . disabled {
pointer - events : none ;
cursor : default ;
}
: host ( . tooltip ) . tooltiptext {
pointer - events : none ;
opacity : 0 ;
text - align : center ;
padding : 4 px ;
border - radius : var ( -- ha - card - border - radius , 4 px ) ;
box - shadow : var (
-- ha - card - box - shadow ,
0 px 2 px 1 px - 1 px rgba ( 0 , 0 , 0 , 0.2 ) ,
0 px 1 px 1 px 0 px rgba ( 0 , 0 , 0 , 0.14 ) ,
0 px 1 px 3 px 0 px rgba ( 0 , 0 , 0 , 0.12 )
) ;
background : var ( -- ha - card - background , var ( -- card - background - color , white ) ) ;
border : 1 px solid var ( -- primary - text - color ) ;
color : var ( -- primary - text - color ) ;
position : absolute ;
top : 50 % ;
left : 50 % ;
transform : translate ( - 50 % , - 50 % ) ;
}
: host ( . tooltip : hover ) span . tooltiptext {
opacity : 1 ;
transition - delay : 1.5 s ;
}
2023-08-09 20:28:00 +00:00
: not ( ha - state - icon ) ha - icon ,
ha - state - icon {
2023-04-09 18:06:11 +00:00
display : inline - block ;
margin : auto ;
-- mdc - icon - size : 100 % ;
-- iron - icon - width : 100 % ;
-- iron - icon - height : 100 % ;
}
ha - card . button - card - main {
padding : 4 % 0 px ;
text - transform : none ;
font - weight : 400 ;
font - size : 1.2 rem ;
align - items : center ;
text - align : center ;
letter - spacing : normal ;
width : 100 % ;
}
. ellipsis {
text - overflow : ellipsis ;
white - space : nowrap ;
overflow : hidden ;
}
2023-08-09 20:28:00 +00:00
2023-04-09 18:06:11 +00:00
# overlay {
align - items : flex - start ;
justify - content : flex - end ;
padding : 8 px 7 px ;
opacity : 0.5 ;
/* DO NOT override items below */
position : absolute ;
left : 0 ;
right : 0 ;
top : 0 ;
bottom : 0 ;
display : flex ;
}
# lock {
- webkit - animation - fill - mode : both ;
animation - fill - mode : both ;
margin : unset ;
width : 24 px ;
}
. invalid {
animation : blink 1 s cubic - bezier ( 0.68 , - 0.55 , 0.27 , 1.55 ) infinite ;
}
. hidden {
visibility : hidden ;
opacity : 0 ;
transition : visibility 0 s 1 s , opacity 1 s linear ;
}
@ keyframes blink {
0 % {
opacity : 0 ;
}
50 % {
opacity : 1 ;
}
100 % {
opacity : 0 ;
}
}
@ - webkit - keyframes rotating /* Safari and Chrome */ {
from {
- webkit - transform : rotate ( 0 deg ) ;
- o - transform : rotate ( 0 deg ) ;
transform : rotate ( 0 deg ) ;
}
to {
- webkit - transform : rotate ( 360 deg ) ;
- o - transform : rotate ( 360 deg ) ;
transform : rotate ( 360 deg ) ;
}
}
@ keyframes rotating {
from {
- ms - transform : rotate ( 0 deg ) ;
- moz - transform : rotate ( 0 deg ) ;
- webkit - transform : rotate ( 0 deg ) ;
- o - transform : rotate ( 0 deg ) ;
transform : rotate ( 0 deg ) ;
}
to {
- ms - transform : rotate ( 360 deg ) ;
- moz - transform : rotate ( 360 deg ) ;
- webkit - transform : rotate ( 360 deg ) ;
- o - transform : rotate ( 360 deg ) ;
transform : rotate ( 360 deg ) ;
}
}
[ rotating ] {
- webkit - animation : rotating 2 s linear infinite ;
- moz - animation : rotating 2 s linear infinite ;
- ms - animation : rotating 2 s linear infinite ;
- o - animation : rotating 2 s linear infinite ;
animation : rotating 2 s linear infinite ;
}
# container {
display : grid ;
width : 100 % ;
height : 100 % ;
text - align : center ;
align - items : center ;
}
# img - cell {
display : flex ;
grid - area : i ;
height : 100 % ;
width : 100 % ;
max - width : 100 % ;
max - height : 100 % ;
align - self : center ;
justify - self : center ;
overflow : hidden ;
justify - content : center ;
align - items : center ;
position : relative ;
}
2023-08-09 20:28:00 +00:00
ha - state - icon # icon {
2023-04-09 18:06:11 +00:00
height : 100 % ;
width : 100 % ;
max - height : 100 % ;
position : absolute ;
}
img # icon {
display : block ;
height : auto ;
width : 100 % ;
position : absolute ;
}
# name {
grid - area : n ;
max - width : 100 % ;
align - self : center ;
justify - self : center ;
/* margin: auto; */
}
# state {
grid - area : s ;
max - width : 100 % ;
align - self : center ;
justify - self : center ;
/* margin: auto; */
}
# label {
grid - area : l ;
max - width : 100 % ;
align - self : center ;
justify - self : center ;
}
# container . vertical {
grid - template - areas : 'i' 'n' 's' 'l' ;
grid - template - columns : 1 fr ;
grid - template - rows : 1 fr min - content min - content min - content ;
}
/* Vertical No Icon */
# container . vertical . no - icon {
grid - template - areas : 'n' 's' 'l' ;
grid - template - columns : 1 fr ;
grid - template - rows : 1 fr min - content 1 fr ;
}
# container . vertical . no - icon # state {
align - self : center ;
}
# container . vertical . no - icon # name {
align - self : end ;
}
# container . vertical . no - icon # label {
align - self : start ;
}
/* Vertical No Icon No Name */
# container . vertical . no - icon . no - name {
grid - template - areas : 's' 'l' ;
grid - template - columns : 1 fr ;
grid - template - rows : 1 fr 1 fr ;
}
# container . vertical . no - icon . no - name # state {
align - self : end ;
}
# container . vertical . no - icon . no - name # label {
align - self : start ;
}
/* Vertical No Icon No State */
# container . vertical . no - icon . no - state {
grid - template - areas : 'n' 'l' ;
grid - template - columns : 1 fr ;
grid - template - rows : 1 fr 1 fr ;
}
# container . vertical . no - icon . no - state # name {
align - self : end ;
}
# container . vertical . no - icon . no - state # label {
align - self : start ;
}
/* Vertical No Icon No Label */
# container . vertical . no - icon . no - label {
grid - template - areas : 'n' 's' ;
grid - template - columns : 1 fr ;
grid - template - rows : 1 fr 1 fr ;
}
# container . vertical . no - icon . no - label # name {
align - self : end ;
}
# container . vertical . no - icon . no - label # state {
align - self : start ;
}
/* Vertical No Icon No Label No Name */
# container . vertical . no - icon . no - label . no - name {
grid - template - areas : 's' ;
grid - template - columns : 1 fr ;
grid - template - rows : 1 fr ;
}
# container . vertical . no - icon . no - label . no - name # state {
align - self : center ;
}
/* Vertical No Icon No Label No State */
# container . vertical . no - icon . no - label . no - state {
grid - template - areas : 'n' ;
grid - template - columns : 1 fr ;
grid - template - rows : 1 fr ;
}
# container . vertical . no - icon . no - label . no - state # name {
align - self : center ;
}
/* Vertical No Icon No Name No State */
# container . vertical . no - icon . no - name . no - state {
grid - template - areas : 'l' ;
grid - template - columns : 1 fr ;
grid - template - rows : 1 fr ;
}
# container . vertical . no - icon . no - name . no - state # label {
align - self : center ;
}
# container . icon _name _state {
grid - template - areas : 'i n' 'l l' ;
grid - template - columns : 40 % 1 fr ;
grid - template - rows : 1 fr min - content ;
}
# container . icon _name {
grid - template - areas : 'i n' 's s' 'l l' ;
grid - template - columns : 40 % 1 fr ;
grid - template - rows : 1 fr min - content min - content ;
}
# container . icon _state {
grid - template - areas : 'i s' 'n n' 'l l' ;
grid - template - columns : 40 % 1 fr ;
grid - template - rows : 1 fr min - content min - content ;
}
# container . name _state {
grid - template - areas : 'i' 'n' 'l' ;
grid - template - columns : 1 fr ;
grid - template - rows : 1 fr min - content min - content ;
}
# container . name _state . no - icon {
grid - template - areas : 'n' 'l' ;
grid - template - columns : 1 fr ;
grid - template - rows : 1 fr 1 fr ;
}
# container . name _state . no - icon # name {
align - self : end ;
}
# container . name _state . no - icon # label {
align - self : start ;
}
# container . name _state . no - icon . no - label {
grid - template - areas : 'n' ;
grid - template - columns : 1 fr ;
grid - template - rows : 1 fr ;
}
# container . name _state . no - icon . no - label # name {
align - self : center ;
}
/* icon_name_state2nd default */
# container . icon _name _state2nd {
grid - template - areas : 'i n' 'i s' 'i l' ;
grid - template - columns : 40 % 1 fr ;
grid - template - rows : 1 fr min - content 1 fr ;
}
# container . icon _name _state2nd # name {
align - self : end ;
}
# container . icon _name _state2nd # state {
align - self : center ;
}
# container . icon _name _state2nd # label {
align - self : start ;
}
/* icon_name_state2nd No Label */
# container . icon _name _state2nd . no - label {
grid - template - areas : 'i n' 'i s' ;
grid - template - columns : 40 % 1 fr ;
grid - template - rows : 1 fr 1 fr ;
}
# container . icon _name _state2nd # name {
align - self : end ;
}
# container . icon _name _state2nd # state {
align - self : start ;
}
/* icon_state_name2nd Default */
# container . icon _state _name2nd {
grid - template - areas : 'i s' 'i n' 'i l' ;
grid - template - columns : 40 % 1 fr ;
grid - template - rows : 1 fr min - content 1 fr ;
}
# container . icon _state _name2nd # state {
align - self : end ;
}
# container . icon _state _name2nd # name {
align - self : center ;
}
# container . icon _state _name2nd # label {
align - self : start ;
}
/* icon_state_name2nd No Label */
# container . icon _state _name2nd . no - label {
grid - template - areas : 'i s' 'i n' ;
grid - template - columns : 40 % 1 fr ;
grid - template - rows : 1 fr 1 fr ;
}
# container . icon _state _name2nd # state {
align - self : end ;
}
# container . icon _state _name2nd # name {
align - self : start ;
}
# container . icon _label {
grid - template - areas : 'i l' 'n n' 's s' ;
grid - template - columns : 40 % 1 fr ;
grid - template - rows : 1 fr min - content min - content ;
}
[ style *= '--aspect-ratio' ] > : first - child {
width : 100 % ;
}
[ style *= '--aspect-ratio' ] > img {
height : auto ;
}
@ supports ( -- custom : property ) {
[ style *= '--aspect-ratio' ] {
position : relative ;
}
[ style *= '--aspect-ratio' ] : : before {
content : '' ;
display : block ;
padding - bottom : calc ( 100 % / ( v a r ( - - a s p e c t - r a t i o ) ) ) ;
}
[ style *= '--aspect-ratio' ] > : first - child {
position : absolute ;
top : 0 ;
left : 0 ;
height : 100 % ;
}
}
2024-03-07 18:15:52 +00:00
` ;var de,fe,me,pe,ge;!function(t){t.language="language",t.system="system",t.comma_decimal="comma_decimal",t.decimal_comma="decimal_comma",t.space_comma="space_comma",t.none="none"}(de||(de={})),function(t){t.language="language",t.system="system",t.am_pm="12",t.twenty_four="24"}(fe||(fe={})),function(t){t.local="local",t.server="server"}(me||(me={})),function(t){t.language="language",t.system="system",t.DMY="DMY",t.MDY="MDY",t.YMD="YMD"}(pe||(pe={})),function(t){t.language="language",t.monday="monday",t.tuesday="tuesday",t.wednesday="wednesday",t.thursday="thursday",t.friday="friday",t.saturday="saturday",t.sunday="sunday"}(ge||(ge={}));const _e=(t,e,i)=>{const n=e?(t=>{switch(t.number_format){case de.comma_decimal:return["en-US","en"];case de.decimal_comma:return["de","es","it"];case de.space_comma:return["fr","sv","cs"];case de.system:return;default:return t.language}})(e):void 0;if(Number.isNaN=Number.isNaN||function t(e){return"number"==typeof e&&t(e)},(null==e?void 0:e.number_format)!==de.none&&!Number.isNaN(Number(t))&&Intl)try{return new Intl.NumberFormat(n,be(t,i)).format(Number(t))}catch(r){return console.error(r),new Intl.NumberFormat(void 0,be(t,i)).format(Number(t))}return"string"==typeof t?t: ` $ { ( ( t , e = 2 ) => Math . round ( t * 10 * * e ) / 10 * * e ) ( t , null == i ? void 0 : i . maximumFractionDigits ) . toString ( ) } $ { "currency" === ( null == i ? void 0 : i . style ) ? ` ${ i . currency } ` : "" } ` },ve=(t,e,i)=>{var n;let r=null==i?void 0:i.display_precision;return void 0!==e&&(r=e),null!=r?{maximumFractionDigits:r,minimumFractionDigits:r}:Number.isInteger(Number(null===(n=t.attributes)||void 0===n?void 0:n.step))&&Number.isInteger(Number(t.state))?{maximumFractionDigits:0}:null!=t.attributes.step?{maximumFractionDigits:Math.ceil(Math.log10(1/t.attributes.step))}:void 0},be=(t,e)=>{const i=Object.assign({maximumFractionDigits:2},e);if("string"!=typeof t)return i;if(!e||void 0===e.minimumFractionDigits&&void 0===e.maximumFractionDigits){const e=t.indexOf(".")>-1?t.split(".")[1].length:0;i.minimumFractionDigits=e,i.maximumFractionDigits=e}return i};var ye,we, $ e,Ae,xe;!function(t){t.language="language",t.system="system",t.comma_decimal="comma_decimal",t.decimal_comma="decimal_comma",t.space_comma="space_comma",t.none="none"}(ye||(ye={})),function(t){t.language="language",t.system="system",t.am_pm="12",t.twenty_four="24"}(we||(we={})),function(t){t.local="local",t.server="server"}( $ e||( $ e={})),function(t){t.language="language",t.system="system",t.DMY="DMY",t.MDY="MDY",t.YMD="YMD"}(Ae||(Ae={})),function(t){t.language="language",t.monday="monday",t.tuesday="tuesday",t.wednesday="wednesday",t.thursday="thursday",t.friday="friday",t.saturday="saturday",t.sunday="sunday"}(xe||(xe={}));const ke=(t,e=2)=>{let i=""+t;for(let n=1;n<e;n++)i=parseInt(i)<10**n? ` 0 $ { i } ` :i;return i};const Se={ms:1,s:1e3,min:6e4,h:36e5,d:864e5},Ee=(t,e)=>function(t){const e=Math.floor(t/1e3/3600),i=Math.floor(t/1e3%3600/60),n=Math.floor(t/1e3%3600%60),r=Math.floor(t%1e3);return e>0? ` $ { e } : $ { ke ( i ) } : $ { ke ( n ) } ` :i>0? ` $ { i } : $ { ke ( n ) } ` :n>0||r>0? ` $ { n } $ { r > 0 ? ` . ${ ke ( r , 3 ) } ` : "" } ` :null}(parseFloat(t)*Se[e])||"0";var Oe=Number.isNaN||function(t){return"number"==typeof t&&t!=t};function Te(t,e){if(t.length!==e.length)return!1;for(var i=0;i<t.length;i++)if(n=t[i],r=e[i],!(n===r||Oe(n)&&Oe(r)))return!1;var n,r;return!0}function Ce(t,e){void 0===e&&(e=Te);var i=null;function n(){for(var n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];if(i&&i.lastThis===this&&e(n,i.lastArgs))return i.lastResult;var s=t.apply(this,n);return i={lastResult:s,lastArgs:n,lastThis:this},s}return n.clear=function(){i=null},n}const Me=Ce(((t,e)=>new Intl.DateTimeFormat(t.language,{weekday:"long",month:"long",day:"numeric",timeZone:"server"===t.time_zone?e:void 0}))),je=(t,e,i)=>He(e,i.time_zone).format(t),He=Ce(((t,e)=>new Intl.DateTimeFormat(t.language,{year:"numeric",month:"long",day:"numeric",timeZone:"server"===t.time_zone?e:void 0}))),De=(t,e,i)=>{var n,r,s,a;const o=Re(e,i.time_zone);if(e.date_format===pe.language||e.date_format===pe.system)return o.format(t);const l=o.formatToParts(t),c=null===(n=l.find((t=>"literal"===t.type)))||void 0=
2023-08-09 20:28:00 +00:00
< ha - relative - time
id = "relative-time"
class = "ellipsis"
. hass = "${this._hass}"
. datetime = "${t}"
. capitalize = "${e}"
> < / h a - r e l a t i v e - t i m e >
2024-03-07 18:15:52 +00:00
` :""}_getTemplateHelpers(){return{localize:this._localize.bind(this),formatDateTime:t=>Ge(new Date(t),this._hass.locale,this._hass.config),formatShortDateTimeWithYear:t=>{return e=new Date(t),i=this._hass.locale,n=this._hass.config,Ke(i,n.time_zone).format(e);var e,i,n},formatShortDateTime:t=>{return e=new Date(t),i=this._hass.locale,n=this._hass.config,Je(i,n.time_zone).format(e);var e,i,n},formatDateTimeWithSeconds:t=>{return e=new Date(t),i=this._hass.locale,n=this._hass.config,Xe(i,n.time_zone).format(e);var e,i,n},formatDateTimeNumeric:t=>{return e=new Date(t),i=this._hass.locale,n=this._hass.config, ` $ { De ( e , i , n ) } , $ { Ue ( e , i , n ) } ` ;var e,i,n},relativeTime:this._relativeTime.bind(this),formatTime:t=>Ue(new Date(t),this._hass.locale,this._hass.config),formatTimeWithSeconds:t=>{return e=new Date(t),i=this._hass.locale,n=this._hass.config,We(i,n.time_zone).format(e);var e,i,n},formatTimeWeekday:t=>{return e=new Date(t),i=this._hass.locale,n=this._hass.config,qe(i,n.time_zone).format(e);var e,i,n},formatTime24h:t=>{return e=new Date(t),i=this._hass.locale,n=this._hass.config,Ze(i,n.time_zone).format(e);var e,i,n},formatDateWeekdayDay:t=>{return e=new Date(t),i=this._hass.locale,n=this._hass.config,Me(i,n.time_zone).format(e);var e,i,n},formatDate:t=>je(new Date(t),this._hass.locale,this._hass.config),formatDateNumeric:t=>De(new Date(t),this._hass.locale,this._hass.config),formatDateShort:t=>{return e=new Date(t),i=this._hass.locale,n=this._hass.config,Ne(i,n.time_zone).format(e);var e,i,n},formatDateMonthYear:t=>{return e=new Date(t),i=this._hass.locale,n=this._hass.config,Pe(i,n.time_zone).format(e);var e,i,n},formatDateMonth:t=>{return e=new Date(t),i=this._hass.locale,n=this._hass.config,ze(i,n.time_zone).format(e);var e,i,n},formatDateYear:t=>{return e=new Date(t),i=this._hass.locale,n=this._hass.config,Ie(i,n.time_zone).format(e);var e,i,n},formatDateWeekday:t=>{return e=new Date(t),i=this._hass.locale,n=this._hass.config,Le(i,n.time_zone).format(e);var e,i,n},formatDateWeekdayShort:t=>{return e=new Date(t),i=this._hass.locale,n=this._hass.config,Fe(i,n.time_zone).format(e);var e,i,n}}}_evalTemplate(t,e){try{return new Function("states","entity","user","hass","variables","html","helpers", ` 'use strict' ; $ { e } ` ).call(this,this._hass.states,t,this._hass.user,this._hass,this._evaledVariables,P,this._getTemplateHelpers())}catch(_t){const i=e.length<=100?e.trim(): ` $ { e . trim ( ) . substring ( 0 , 98 ) } ... ` ;throw _t.message= ` $ { _t . name } : $ { _t . message } in '${i}' ` ,_t.name="ButtonCardJSTemplateError",_t}}_objectEvalTemplate(t,e){const i= $ i(e);return this._getTemplateOrValue(t,i)}_getTemplateOrValue(t,e){if(["number","boolean"].includes(typeof e))return e;if(!e)return e;if("object"==typeof e)return Object.keys(e).forEach((i=>{e[i]=this._getTemplateOrValue(t,e[i])})),e;const i=e.trim();return"[[["===i.substring(0,3)&&"]]]"===i.slice(-3)?this._evalTemplate(t,i.slice(3,-3)):e}_getColorForLightEntity(t,e,i){let n=te;return Xt.includes(n)&&(n=ae(Qt)),t&&(se(t)?(n=t.attributes.rgb_color? ` rgb ( $ { t . attributes . rgb _color . join ( "," ) } ) ` :e&&t.attributes.color_temp&&t.attributes.min_mireds&&t.attributes.max_mireds?function(t,e,i){const n=new Wt("rgb(255, 160, 0)"),r=new Wt("rgb(166, 209, 255)"),s=new Wt("white"),a=(t-e)/(i-e)*100;return a<50?qt(r).mix(s,2*a).toRgbString():qt(s).mix(n,2*(a-50)).toRgbString()}(t.attributes.color_temp,t.attributes.min_mireds,t.attributes.max_mireds):xi(t,t.state,i)||te,t.attributes.brightness&&(n=function(t,e,i){const n=new Wt(ie(t,e));if(n.isValid){const t=n.mix("black",100-i).toString();if(t)return t}return e}(this,n,(t.attributes.brightness+245)/5))):n=xi(t,t.state,i)||te),n}_buildCssColorAttribute(t,e){var i,n;let r,s="";return(null==e?void 0:e.color)?s=e.color:this._config.color&&(s=this._config.color),Jt.includes(s)&&(!t||t&&"light"!==ee(t.entity_id))&&(s=""),r=Jt.includes(s)?this._getColorForLightEntity(t,"auto-no-temperature"!==s,null===(i=this._config)||void 0===i?void 0:i.color_type):s||(t&&xi(t,t.state,null===(n=this._config)||void 0===n?void 0:n.color_type)||te),r}_buildIcon(t,e){if(!this._config.show_icon)ret
2023-04-09 18:06:11 +00:00
< ha - relative - time
id = "label"
class = "ellipsis"
. hass = "${this._hass}"
. datetime = "${t.last_changed}"
2023-08-09 20:28:00 +00:00
style = $ { gt ( e ) }
2023-04-09 18:06:11 +00:00
> < / h a - r e l a t i v e - t i m e >
2023-08-09 20:28:00 +00:00
` :void 0}_buildLabel(t,e){if(!this._config.show_label)return;let i;return i=(null==e?void 0:e.label)?e.label:this._config.label,this._getTemplateOrValue(t,i)}_buildCustomFields(t,e){let i=P ` ` ;const n={},r={};return this._config.custom_fields&&Object.keys(this._config.custom_fields).forEach((e=>{const i=this._config.custom_fields[e];i.card?i.do_not_eval?r[e]= $ i(i.card):r[e]=this._objectEvalTemplate(t,i.card):n[e]=this._getTemplateOrValue(t,i)})),(null==e?void 0:e.custom_fields)&&Object.keys(e.custom_fields).forEach((i=>{const s=e.custom_fields[i];s.card?s.do_not_eval?r[i]= $ i(s.card):r[i]=this._objectEvalTemplate(t,s.card):n[i]=this._getTemplateOrValue(t,s)})),Object.keys(n).forEach((r=>{if(null!=n[r]){const s=Object.assign(Object.assign({},this._buildCustomStyleGeneric(t,e,r)),{"grid-area":r});i=P `
2023-04-09 18:06:11 +00:00
$ { i }
2023-08-09 20:28:00 +00:00
< div id = $ { r } class = "ellipsis" style = $ { gt ( s ) } > $ { this . _unsafeHTMLorNot ( n [ r ] ) } < / d i v >
2024-03-07 18:15:52 +00:00
` }})),Object.keys(r).forEach((n=>{if(null!=r[n]){const s=Object.assign(Object.assign({},this._buildCustomStyleGeneric(t,e,n)),{"grid-area":n});let a;wt(this._cardsConfig[n],r[n])?a=this._cards[n]:(a=this._createCard(r[n]),this._cards[n]=a,this._cardsConfig[n]= $ i(r[n])),a.hass=this._hass,i=P `
2023-04-09 18:06:11 +00:00
$ { i }
< div
id = $ { n }
@ action = $ { this . _stopPropagation }
@ click = $ { this . _stopPropagation }
@ touchstart = $ { this . _stopPropagation }
@ mousedown = $ { this . _stopPropagation }
@ mouseup = $ { this . _stopPropagation }
@ touchend = $ { this . _stopPropagation }
@ touchcancel = $ { this . _stopPropagation }
2023-08-09 20:28:00 +00:00
style = $ { gt ( s ) }
2023-04-09 18:06:11 +00:00
>
2024-03-07 18:15:52 +00:00
$ { a }
2023-04-09 18:06:11 +00:00
< / d i v >
2024-03-07 18:15:52 +00:00
` }})),i}_hasChildCards(t){return!!t&&Object.keys(t).some((e=>!!t[e].card))}_isClickable(t,e){const i=this._getTemplateOrValue(t,this._config.tap_action.action),n=this._getTemplateOrValue(t,this._config.hold_action.action),r=this._getTemplateOrValue(t,this._config.double_tap_action.action),s=this._hasChildCards(this._config.custom_fields)||!(!e||!this._hasChildCards(e.custom_fields));return"none"!=i||"none"!=n||"none"!=r||s}_rotate(t){return!!(null==t?void 0:t.spin)}_blankCardColoredHtml(t){const e=Object.assign({background:"none","box-shadow":"none","border-style":"none"},t);return P `
2023-08-09 20:28:00 +00:00
< ha - card class = "disabled" style = $ { gt ( e ) } >
2023-04-09 18:06:11 +00:00
< div > < / d i v >
< / h a - c a r d >
2024-03-07 18:15:52 +00:00
` }_cardHtml(){var t,e,i,n;const r=this._getMatchingConfigState(this._stateObj);let s="var(--state-inactive-color)";(null==r?void 0:r.color)&&!Jt.includes(r.color)?s=r.color:(null===(t=this._config)||void 0===t?void 0:t.color)&&!Jt.includes(this._config.color)?this._stateObj?se(this._stateObj)&&(s=(null===(e=this._config)||void 0===e?void 0:e.color)||s):s=this._config.color:s=this._buildCssColorAttribute(this._stateObj,r);let a=s,o={},l={};const c={},h=this._buildStyleGeneric(this._stateObj,r,"lock"),u=this._buildStyleGeneric(this._stateObj,r,"card"),d=this._buildStyleGeneric(this._stateObj,r,"tooltip"),f={"button-card-main":!0,disabled:!this._isClickable(this._stateObj,r)};switch((null===(i=this._config)||void 0===i?void 0:i.tooltip)&&this.classList.add("tooltip"),u.width&&(this.style.setProperty("flex","0 0 auto"),this.style.setProperty("max-width","fit-content")),this._config.color_type){case"blank-card":return this._blankCardColoredHtml(u);case"card":case"label-card":{const t=function(t,e){const i=new Wt(ie(t,e)).getLuminance(),n=new Wt({r:225,g:225,b:225}),r=n.getLuminance(),s=new Wt({r:28,g:28,b:28}),a=s.getLuminance();return 0===i||(Math.max(i,r)+.05)/Math.min(i,r+.05)>(Math.max(i,a)+.05)/Math.min(i,a+.05)?n.toRgbString():s.toRgbString()}(this,s);o.color=t,l.color=t,o["background-color"]=s,o=Object.assign(Object.assign({},o),u),a="inherit";break}default:o=u}this._config.aspect_ratio?(c["--aspect-ratio"]=this._config.aspect_ratio,o.position="absolute"):c.display="inline",this.style.setProperty("--button-card-light-color",this._getColorForLightEntity(this._stateObj,!0)),this.style.setProperty("--button-card-light-color-no-temperature",this._getColorForLightEntity(this._stateObj,!1)),l=Object.assign(Object.assign({},l),h);const m=this._config.extra_styles?P `
2023-04-09 18:06:11 +00:00
< style >
$ { this . _getTemplateOrValue ( this . _stateObj , this . _config . extra _styles ) }
< / s t y l e >
2023-08-09 20:28:00 +00:00
` :P ` ` ;return P `
$ { m }
< div id = "aspect-ratio" style = $ { gt ( c ) } >
2023-04-09 18:06:11 +00:00
< ha - card
id = "card"
2023-08-09 20:28:00 +00:00
class = $ { bt ( f ) }
2024-03-07 18:15:52 +00:00
style = $ { gt ( o ) }
2023-04-09 18:06:11 +00:00
@ action = $ { this . _handleAction }
@ focus = "${this.handleRippleFocus}"
@ blur = "${this.handleRippleBlur}"
@ mousedown = "${this.handleRippleActivate}"
@ mouseup = "${this.handleRippleDeactivate}"
@ touchstart = "${this.handleRippleActivate}"
@ touchend = "${this.handleRippleDeactivate}"
@ touchcancel = "${this.handleRippleDeactivate}"
2024-03-07 18:15:52 +00:00
. actionHandler = $ { kt ( { hasDoubleClick : "none" !== this . _config . double _tap _action . action , hasHold : "none" !== this . _config . hold _action . action , repeat : this . _config . hold _action . repeat , repeatLimit : this . _config . hold _action . repeat _limit } ) }
2023-04-09 18:06:11 +00:00
. config = "${this._config}"
>
2024-03-07 18:15:52 +00:00
$ { this . _buttonContent ( this . _stateObj , r , a ) }
2023-04-09 18:06:11 +00:00
< mwc - ripple id = "ripple" > < / m w c - r i p p l e >
< / h a - c a r d >
2023-08-09 20:28:00 +00:00
$ { this . _getLock ( l ) }
2023-04-09 18:06:11 +00:00
< / d i v >
2023-08-09 20:28:00 +00:00
$ { ( null === ( n = this . _config ) || void 0 === n ? void 0 : n . tooltip ) ? P `
< span class = "tooltiptext" style = $ { gt ( d ) } >
2023-04-09 18:06:11 +00:00
$ { this . _getTemplateOrValue ( this . _stateObj , this . _config . tooltip ) }
< / s p a n >
` :""}
2023-08-09 20:28:00 +00:00
` }_getLock(t){return this._config.lock&&this._getTemplateOrValue(this._stateObj,this._config.lock.enabled)?P `
2023-04-09 18:06:11 +00:00
< div
id = "overlay"
2023-08-09 20:28:00 +00:00
style = $ { gt ( t ) }
2023-04-09 18:06:11 +00:00
@ action = $ { this . _handleUnlockType }
2024-03-07 18:15:52 +00:00
. actionHandler = $ { kt ( { hasDoubleClick : "double_tap" === this . _config . lock . unlock , hasHold : "hold" === this . _config . lock . unlock } ) }
2023-04-09 18:06:11 +00:00
. config = "${this._config}"
>
< ha - icon id = "lock" icon = "mdi:lock-outline" > < / h a - i c o n >
< / d i v >
2024-03-07 18:15:52 +00:00
` :P ` ` }_buttonContent(t,e,i){const n=this._buildName(t,e),r=(null==e?void 0:e.state_display)||this._config.state_display||void 0,s=this._config.show_state&&r?this._getTemplateOrValue(t,r):void 0,a=s||this._buildStateString(t),o=function(t,e){if(!t&&!e)return;let i;return i=e?t? ` $ { t } : $ { e } ` :e:t,i}(n,a);switch(this._config.layout){case"icon_name_state":case"name_state":return this._gridHtml(t,e,this._config.layout,i,o,void 0);default:return this._gridHtml(t,e,this._config.layout,i,n,a)}}_unsafeHTMLorNot(t){return t.strings||t.values?t:vt( ` $ { t } ` )}_gridHtml(t,e,i,n,r,s){const a=this._getIconHtml(t,e,n),o=[i],l=this._buildLabel(t,e),c=this._buildStyleGeneric(t,e,"name"),h=this._buildStyleGeneric(t,e,"state"),u=this._buildStyleGeneric(t,e,"label"),d=this._buildLastChanged(t,u),f=this._buildStyleGeneric(t,e,"grid");return a||o.push("no-icon"),r||o.push("no-name"),s||o.push("no-state"),l||d||o.push("no-label"),P `
< div id = "container" class = $ { o . join ( " " ) } style = $ { gt ( f ) } >
$ { a || "" }
2023-08-09 20:28:00 +00:00
$ { r ? P `
< div id = "name" class = "ellipsis" style = $ { gt ( c ) } >
$ { this . _unsafeHTMLorNot ( r ) }
2023-04-09 18:06:11 +00:00
< / d i v >
` :""}
2023-08-09 20:28:00 +00:00
$ { s ? P `
< div id = "state" class = "ellipsis" style = $ { gt ( h ) } >
$ { this . _unsafeHTMLorNot ( s ) }
2023-04-09 18:06:11 +00:00
< / d i v >
` :""}
2023-08-09 20:28:00 +00:00
$ { l && ! d ? P `
< div id = "label" class = "ellipsis" style = $ { gt ( u ) } >
$ { this . _unsafeHTMLorNot ( l ) }
2023-04-09 18:06:11 +00:00
< / d i v >
` :""}
$ { d || "" } $ { this . _buildCustomFields ( t , e ) }
< / d i v >
2024-03-07 18:15:52 +00:00
` }_getIconHtml(t,e,i){const n=this._buildIcon(t,e),r=this._buildEntityPicture(t,e),s=this._buildStyleGeneric(t,e,"entity_picture"),a=this._buildStyleGeneric(t,e,"icon"),o=this._buildStyleGeneric(t,e,"img_cell"),l=this._buildStyleGeneric(t,e,"card"),c=Object.assign({color:i,width:this._config.size,"--ha-icon-display":l.height?"inline":void 0,position:this._config.aspect_ratio||l.height?"absolute":"relative"},a),h=Object.assign(Object.assign({},c),s),u=this._buildLiveStream(h),d=this._config.show_icon&&(n||t);if(d||r){let i;return t&&(i=ee(t.entity_id)),P `
< div id = "img-cell" style = $ { gt ( o ) } >
2023-08-09 20:28:00 +00:00
$ { ! d || r || u ? "" : P `
< ha - state - icon
. state = $ { t }
2024-03-07 18:15:52 +00:00
. stateObj = $ { t }
. hass = $ { this . _hass }
2023-08-09 20:28:00 +00:00
? data - domain = $ { i }
data - state = $ { ( t => null != t ? t : I ) ( null == t ? void 0 : t . state ) }
style = $ { gt ( c ) }
2023-04-09 18:06:11 +00:00
. icon = "${n}"
id = "icon"
? rotating = $ { this . _rotate ( e ) }
2023-08-09 20:28:00 +00:00
> < / h a - s t a t e - i c o n >
2023-04-09 18:06:11 +00:00
` }
$ { u || "" }
2023-08-09 20:28:00 +00:00
$ { r && ! u ? P `
2023-04-09 18:06:11 +00:00
< img
src = "${r}"
2023-08-09 20:28:00 +00:00
style = $ { gt ( h ) }
2023-04-09 18:06:11 +00:00
id = "icon"
? rotating = $ { this . _rotate ( e ) }
/ >
` :""}
< / d i v >
2023-08-09 20:28:00 +00:00
` }}_buildLiveStream(t){return this._config.show_live_stream&&this._config.entity&&"camera"===ee(this._config.entity)?P `
2023-04-09 18:06:11 +00:00
< hui - image
. hass = $ { this . _hass }
. cameraImage = $ { this . _config . entity }
. entity = $ { this . _config . entity }
cameraView = "live"
2023-08-09 20:28:00 +00:00
style = $ { gt ( t ) }
2023-04-09 18:06:11 +00:00
> < / h u i - i m a g e >
2024-03-07 18:15:52 +00:00
` :void 0}_configFromLLTemplates(t,e){const i=e.template;if(!i)return e;let n,r={};const s=i&&Array.isArray(i)?i:[i];return null==s||s.forEach((e=>{var i;if(!(null===(i=t.config.button_card_templates)||void 0===i?void 0:i[e]))throw new Error( ` Button - card template '${e}' is missing ! ` );const s=this._configFromLLTemplates(t,t.config.button_card_templates[e]);r=ne(r,s),n=re(n,s.state)})),r=ne(r,e),r.state=re(n,e.state),r}setConfig(t){if(!t)throw new Error("Invalid configuration");this._initialSetupComplete&&(this._initialSetupComplete=!1),this._cards={},this._cardsConfig={};const e=function(){let t=document.querySelector("home-assistant");if(t=t&&t.shadowRoot,t=t&&t.querySelector("home-assistant-main"),t=t&&t.shadowRoot,t=t&&t.querySelector("app-drawer-layout partial-panel-resolver, ha-drawer partial-panel-resolver"),t=t&&t.shadowRoot||t,t=t&&t.querySelector("ha-panel-lovelace"),t=t&&t.shadowRoot,t=t&&t.querySelector("hui-root"),t){const e=t.lovelace;return e.current_view=t.___curView,e}return null}()||function(){let t=document.querySelector("hc-main");if(t=t&&t.shadowRoot,t=t&&t.querySelector("hc-lovelace"),t=t&&t.shadowRoot,t=t&&(t.querySelector("hui-view")||t.querySelector("hui-panel-view")),t){const e=t.lovelace;return e.current_view=t.___curView,e}return null}();let i= $ i(t);i=this._configFromLLTemplates(e,i),this._config=Object.assign(Object.assign({type:"custom:button-card",group_expand:!1,hold_action:{action:"none"},double_tap_action:{action:"none"},layout:"vertical",size:"40%",color_type:"icon",show_name:!0,show_state:!1,show_icon:!0,show_units:!0,show_label:!1,show_entity_picture:!1,show_live_stream:!1,card_size:3},i),{lock:Object.assign({enabled:!1,duration:5,unlock:"tap"},i.lock)}),this._initialSetupComplete||this._finishSetup()}_loopGroup(t){t&&t.forEach((t=>{var e,i;(null===(e=this._hass)||void 0===e?void 0:e.states[t])&&((null===(i=this._hass.states[t].attributes)||void 0===i?void 0:i.entity_id)?this._loopGroup(this._hass.states[t].attributes.entity_id):this._entities.includes(t)||this._entities.push(t))}))}_expandTriggerGroups(){var t;this._hass&&(null===(t=this._config)||void 0===t?void 0:t.group_expand)&&this._entities&&this._entities.forEach((t=>{var e,i,n,r,s;(null===(n=null===(i=null===(e=this._hass)||void 0===e?void 0:e.states[t])||void 0===i?void 0:i.attributes)||void 0===n?void 0:n.entity_id)&&this._loopGroup(null===(s=null===(r=this._hass)||void 0===r?void 0:r.states[t].attributes)||void 0===s?void 0:s.entity_id)}))}getCardSize(){var t;return(null===(t=this._config)||void 0===t?void 0:t.card_size)||3}_evalActions(t,e){var i,n,r,s,a;const o= $ i(t),l=t=>t?(Object.keys(t).forEach((e=>{"object"==typeof t[e]?t[e]=l(t[e]):t[e]=this._getTemplateOrValue(this._stateObj,t[e])})),t):t;return"entity"===(null===(n=null===(i=o[e])||void 0===i?void 0:i.service_data)||void 0===n?void 0:n.entity_id)&&(o[e].service_data.entity_id=t.entity),"entity"===(null===(s=null===(r=o[e])||void 0===r?void 0:r.data)||void 0===s?void 0:s.entity_id)&&(o[e].data.entity_id=t.entity),o[e]=l(o[e]),!o[e].confirmation&&o.confirmation&&(o[e].confirmation=l(o.confirmation)),(null===(a=o[e])||void 0===a?void 0:a.entity)&&(o.entity=o[e].entity),o}handleRippleActivate(t){this._ripple.then((e=>e&&"function"==typeof e.startPress&&this._rippleHandlers.startPress(t)))}handleRippleDeactivate(){this._ripple.then((t=>t&&"function"==typeof t.endPress&&this._rippleHandlers.endPress()))}handleRippleFocus(){this._ripple.then((t=>t&&"function"==typeof t.startFocus&&this._rippleHandlers.startFocus()))}handleRippleBlur(){this._ripple.then((t=>t&&"function"==typeof t.endFocus&&this._rippleHandlers.endFocus()))}_handleAction(t){var e;if(null===(e=t.detail)||void 0===e?void 0:e.action)switch(t.detail.action){case"tap":case"hold":case"double_tap":const e=this._config;if(!e)return;const i=t.detail.action,n=this._evalActions(e, ` $ { i } _action ` );(async(t,e,i,n)=>{yt(t,"hass-action",{config:i,action:n})})(this,this._hass,n,i)}}_handleUnlockType(t){const e=this._config;e&&e.lock.unlock===t.detail.action&&this._handleLock()}_handleLock(){var t;const e=this.shadowRoo