UNPKG

iobroker.lovelace

Version:

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

86 lines (84 loc) 170 kB
const e="undefined"!=typeof globalThis&&globalThis||"undefined"!=typeof self&&self||"undefined"!=typeof global&&global;function t(e,t,i,s){var o,n=arguments.length,r=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(n<3?o(r):n>3?o(t,i,r):o(t,i))||r);return n>3&&r&&Object.defineProperty(t,i,r),r}void 0!==e.EventTarget&&function(e){try{new e}catch(e){return!1}return!0}(e.EventTarget)||(e.EventTarget=function(){function e(){this.__listeners=new Map}return e.prototype=Object.create(Object.prototype),e.prototype.addEventListener=function(e,t,i){if(arguments.length<2)throw new TypeError(`TypeError: Failed to execute 'addEventListener' on 'EventTarget': 2 arguments required, but only ${arguments.length} present.`);const s=this.__listeners,o=e.toString();s.has(o)||s.set(o,new Map);const n=s.get(o);n.has(t)||n.set(t,i)},e.prototype.removeEventListener=function(e,t,i){if(arguments.length<2)throw new TypeError(`TypeError: Failed to execute 'addEventListener' on 'EventTarget': 2 arguments required, but only ${arguments.length} present.`);const s=this.__listeners,o=e.toString();if(s.has(o)){const e=s.get(o);e.has(t)&&e.delete(t)}},e.prototype.dispatchEvent=function(e){if(!(e instanceof Event))throw new TypeError("Failed to execute 'dispatchEvent' on 'EventTarget': parameter 1 is not of type 'Event'.");const t=e.type,i=this.__listeners.get(t);if(i)for(const[t,s]of i.entries()){try{"function"==typeof t?t.call(this,e):t&&"function"==typeof t.handleEvent&&t.handleEvent(e)}catch(e){setTimeout(()=>{throw e})}s&&s.once&&i.delete(t)}return!0},e}()),"function"==typeof SuppressedError&&SuppressedError;const i=globalThis,s=i.ShadowRoot&&(void 0===i.ShadyCSS||i.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,o=Symbol(),n=new WeakMap;let r=class{constructor(e,t,i){if(this._$cssResult$=!0,i!==o)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=e,this.t=t}get styleSheet(){let e=this.o;const t=this.t;if(s&&void 0===e){const i=void 0!==t&&1===t.length;i&&(e=n.get(t)),void 0===e&&((this.o=e=new CSSStyleSheet).replaceSync(this.cssText),i&&n.set(t,e))}return e}toString(){return this.cssText}};const a=(e,...t)=>{const i=1===e.length?e[0]:t.reduce((t,i,s)=>t+(e=>{if(!0===e._$cssResult$)return e.cssText;if("number"==typeof e)return e;throw Error("Value passed to 'css' function must be a 'css' function result: "+e+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(i)+e[s+1],e[0]);return new r(i,e,o)},l=s?e=>e:e=>e instanceof CSSStyleSheet?(e=>{let t="";for(const i of e.cssRules)t+=i.cssText;return(e=>new r("string"==typeof e?e:e+"",void 0,o))(t)})(e):e,{is:d,defineProperty:c,getOwnPropertyDescriptor:h,getOwnPropertyNames:u,getOwnPropertySymbols:p,getPrototypeOf:v}=Object,_=globalThis,g=_.trustedTypes,m=g?g.emptyScript:"",w=_.reactiveElementPolyfillSupport,b=(e,t)=>e,f={toAttribute(e,t){switch(t){case Boolean:e=e?m:null;break;case Object:case Array:e=null==e?e:JSON.stringify(e)}return e},fromAttribute(e,t){let i=e;switch(t){case Boolean:i=null!==e;break;case Number:i=null===e?null:Number(e);break;case Object:case Array:try{i=JSON.parse(e)}catch(e){i=null}}return i}},y=(e,t)=>!d(e,t),A={attribute:!0,type:String,converter:f,reflect:!1,useDefault:!1,hasChanged:y};Symbol.metadata??=Symbol("metadata"),_.litPropertyMetadata??=new WeakMap;let E=class extends HTMLElement{static addInitializer(e){this._$Ei(),(this.l??=[]).push(e)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(e,t=A){if(t.state&&(t.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(e)&&((t=Object.create(t)).wrapped=!0),this.elementProperties.set(e,t),!t.noAccessor){const i=Symbol(),s=this.getPropertyDescriptor(e,i,t);void 0!==s&&c(this.prototype,e,s)}}static getPropertyDescriptor(e,t,i){const{get:s,set:o}=h(this.prototype,e)??{get(){return this[t]},set(e){this[t]=e}};return{get:s,set(t){const n=s?.call(this);o?.call(this,t),this.requestUpdate(e,n,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(e){return this.elementProperties.get(e)??A}static _$Ei(){if(this.hasOwnProperty(b("elementProperties")))return;const e=v(this);e.finalize(),void 0!==e.l&&(this.l=[...e.l]),this.elementProperties=new Map(e.elementProperties)}static finalize(){if(this.hasOwnProperty(b("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(b("properties"))){const e=this.properties,t=[...u(e),...p(e)];for(const i of t)this.createProperty(i,e[i])}const e=this[Symbol.metadata];if(null!==e){const t=litPropertyMetadata.get(e);if(void 0!==t)for(const[e,i]of t)this.elementProperties.set(e,i)}this._$Eh=new Map;for(const[e,t]of this.elementProperties){const i=this._$Eu(e,t);void 0!==i&&this._$Eh.set(i,e)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(e){const t=[];if(Array.isArray(e)){const i=new Set(e.flat(1/0).reverse());for(const e of i)t.unshift(l(e))}else void 0!==e&&t.push(l(e));return t}static _$Eu(e,t){const i=t.attribute;return!1===i?void 0:"string"==typeof i?i:"string"==typeof e?e.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(e=>this.enableUpdating=e),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(e=>e(this))}addController(e){(this._$EO??=new Set).add(e),void 0!==this.renderRoot&&this.isConnected&&e.hostConnected?.()}removeController(e){this._$EO?.delete(e)}_$E_(){const e=new Map,t=this.constructor.elementProperties;for(const i of t.keys())this.hasOwnProperty(i)&&(e.set(i,this[i]),delete this[i]);e.size>0&&(this._$Ep=e)}createRenderRoot(){const e=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return((e,t)=>{if(s)e.adoptedStyleSheets=t.map(e=>e instanceof CSSStyleSheet?e:e.styleSheet);else for(const s of t){const t=document.createElement("style"),o=i.litNonce;void 0!==o&&t.setAttribute("nonce",o),t.textContent=s.cssText,e.appendChild(t)}})(e,this.constructor.elementStyles),e}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(e=>e.hostConnected?.())}enableUpdating(e){}disconnectedCallback(){this._$EO?.forEach(e=>e.hostDisconnected?.())}attributeChangedCallback(e,t,i){this._$AK(e,i)}_$ET(e,t){const i=this.constructor.elementProperties.get(e),s=this.constructor._$Eu(e,i);if(void 0!==s&&!0===i.reflect){const o=(void 0!==i.converter?.toAttribute?i.converter:f).toAttribute(t,i.type);this._$Em=e,null==o?this.removeAttribute(s):this.setAttribute(s,o),this._$Em=null}}_$AK(e,t){const i=this.constructor,s=i._$Eh.get(e);if(void 0!==s&&this._$Em!==s){const e=i.getPropertyOptions(s),o="function"==typeof e.converter?{fromAttribute:e.converter}:void 0!==e.converter?.fromAttribute?e.converter:f;this._$Em=s;const n=o.fromAttribute(t,e.type);this[s]=n??this._$Ej?.get(s)??n,this._$Em=null}}requestUpdate(e,t,i){if(void 0!==e){const s=this.constructor,o=this[e];if(i??=s.getPropertyOptions(e),!((i.hasChanged??y)(o,t)||i.useDefault&&i.reflect&&o===this._$Ej?.get(e)&&!this.hasAttribute(s._$Eu(e,i))))return;this.C(e,t,i)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(e,t,{useDefault:i,reflect:s,wrapped:o},n){i&&!(this._$Ej??=new Map).has(e)&&(this._$Ej.set(e,n??t??this[e]),!0!==o||void 0!==n)||(this._$AL.has(e)||(this.hasUpdated||i||(t=void 0),this._$AL.set(e,t)),!0===s&&this._$Em!==e&&(this._$Eq??=new Set).add(e))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(e){Promise.reject(e)}const e=this.scheduleUpdate();return null!=e&&await e,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[e,t]of this._$Ep)this[e]=t;this._$Ep=void 0}const e=this.constructor.elementProperties;if(e.size>0)for(const[t,i]of e){const{wrapped:e}=i,s=this[t];!0!==e||this._$AL.has(t)||void 0===s||this.C(t,void 0,i,s)}}let e=!1;const t=this._$AL;try{e=this.shouldUpdate(t),e?(this.willUpdate(t),this._$EO?.forEach(e=>e.hostUpdate?.()),this.update(t)):this._$EM()}catch(t){throw e=!1,this._$EM(),t}e&&this._$AE(t)}willUpdate(e){}_$AE(e){this._$EO?.forEach(e=>e.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(e)),this.updated(e)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(e){return!0}update(e){this._$Eq&&=this._$Eq.forEach(e=>this._$ET(e,this[e])),this._$EM()}updated(e){}firstUpdated(e){}};E.elementStyles=[],E.shadowRootOptions={mode:"open"},E[b("elementProperties")]=new Map,E[b("finalized")]=new Map,w?.({ReactiveElement:E}),(_.reactiveElementVersions??=[]).push("2.1.1");const S=globalThis,$=S.trustedTypes,C=$?$.createPolicy("lit-html",{createHTML:e=>e}):void 0,x="$lit$",I=`lit$${Math.random().toFixed(9).slice(2)}$`,q="?"+I,M=`<${q}>`,T=document,P=()=>T.createComment(""),k=e=>null===e||"object"!=typeof e&&"function"!=typeof e,R=Array.isArray,O="[ \t\n\f\r]",L=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,D=/-->/g,j=/>/g,B=RegExp(`>|${O}(?:([^\\s"'>=/]+)(${O}*=${O}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,"g"),U=/'/g,H=/"/g,N=/^(?:script|style|textarea|title)$/i,G=(e=>(t,...i)=>({_$litType$:e,strings:t,values:i}))(1),Y=Symbol.for("lit-noChange"),V=Symbol.for("lit-nothing"),Q=new WeakMap,F=T.createTreeWalker(T,129);function z(e,t){if(!R(e)||!e.hasOwnProperty("raw"))throw Error("invalid template strings array");return void 0!==C?C.createHTML(t):t}class K{constructor({strings:e,_$litType$:t},i){let s;this.parts=[];let o=0,n=0;const r=e.length-1,a=this.parts,[l,d]=((e,t)=>{const i=e.length-1,s=[];let o,n=2===t?"<svg>":3===t?"<math>":"",r=L;for(let t=0;t<i;t++){const i=e[t];let a,l,d=-1,c=0;for(;c<i.length&&(r.lastIndex=c,l=r.exec(i),null!==l);)c=r.lastIndex,r===L?"!--"===l[1]?r=D:void 0!==l[1]?r=j:void 0!==l[2]?(N.test(l[2])&&(o=RegExp("</"+l[2],"g")),r=B):void 0!==l[3]&&(r=B):r===B?">"===l[0]?(r=o??L,d=-1):void 0===l[1]?d=-2:(d=r.lastIndex-l[2].length,a=l[1],r=void 0===l[3]?B:'"'===l[3]?H:U):r===H||r===U?r=B:r===D||r===j?r=L:(r=B,o=void 0);const h=r===B&&e[t+1].startsWith("/>")?" ":"";n+=r===L?i+M:d>=0?(s.push(a),i.slice(0,d)+x+i.slice(d)+I+h):i+I+(-2===d?t:h)}return[z(e,n+(e[i]||"<?>")+(2===t?"</svg>":3===t?"</math>":"")),s]})(e,t);if(this.el=K.createElement(l,i),F.currentNode=this.el.content,2===t||3===t){const e=this.el.content.firstChild;e.replaceWith(...e.childNodes)}for(;null!==(s=F.nextNode())&&a.length<r;){if(1===s.nodeType){if(s.hasAttributes())for(const e of s.getAttributeNames())if(e.endsWith(x)){const t=d[n++],i=s.getAttribute(e).split(I),r=/([.?@])?(.*)/.exec(t);a.push({type:1,index:o,name:r[2],strings:i,ctor:"."===r[1]?ee:"?"===r[1]?te:"@"===r[1]?ie:X}),s.removeAttribute(e)}else e.startsWith(I)&&(a.push({type:6,index:o}),s.removeAttribute(e));if(N.test(s.tagName)){const e=s.textContent.split(I),t=e.length-1;if(t>0){s.textContent=$?$.emptyScript:"";for(let i=0;i<t;i++)s.append(e[i],P()),F.nextNode(),a.push({type:2,index:++o});s.append(e[t],P())}}}else if(8===s.nodeType)if(s.data===q)a.push({type:2,index:o});else{let e=-1;for(;-1!==(e=s.data.indexOf(I,e+1));)a.push({type:7,index:o}),e+=I.length-1}o++}}static createElement(e,t){const i=T.createElement("template");return i.innerHTML=e,i}}function W(e,t,i=e,s){if(t===Y)return t;let o=void 0!==s?i._$Co?.[s]:i._$Cl;const n=k(t)?void 0:t._$litDirective$;return o?.constructor!==n&&(o?._$AO?.(!1),void 0===n?o=void 0:(o=new n(e),o._$AT(e,i,s)),void 0!==s?(i._$Co??=[])[s]=o:i._$Cl=o),void 0!==o&&(t=W(e,o._$AS(e,t.values),o,s)),t}let J=class{constructor(e,t){this._$AV=[],this._$AN=void 0,this._$AD=e,this._$AM=t}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(e){const{el:{content:t},parts:i}=this._$AD,s=(e?.creationScope??T).importNode(t,!0);F.currentNode=s;let o=F.nextNode(),n=0,r=0,a=i[0];for(;void 0!==a;){if(n===a.index){let t;2===a.type?t=new Z(o,o.nextSibling,this,e):1===a.type?t=new a.ctor(o,a.name,a.strings,this,e):6===a.type&&(t=new se(o,this,e)),this._$AV.push(t),a=i[++r]}n!==a?.index&&(o=F.nextNode(),n++)}return F.currentNode=T,s}p(e){let t=0;for(const i of this._$AV)void 0!==i&&(void 0!==i.strings?(i._$AI(e,i,t),t+=i.strings.length-2):i._$AI(e[t])),t++}};class Z{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(e,t,i,s){this.type=2,this._$AH=V,this._$AN=void 0,this._$AA=e,this._$AB=t,this._$AM=i,this.options=s,this._$Cv=s?.isConnected??!0}get parentNode(){let e=this._$AA.parentNode;const t=this._$AM;return void 0!==t&&11===e?.nodeType&&(e=t.parentNode),e}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(e,t=this){e=W(this,e,t),k(e)?e===V||null==e||""===e?(this._$AH!==V&&this._$AR(),this._$AH=V):e!==this._$AH&&e!==Y&&this._(e):void 0!==e._$litType$?this.$(e):void 0!==e.nodeType?this.T(e):(e=>R(e)||"function"==typeof e?.[Symbol.iterator])(e)?this.k(e):this._(e)}O(e){return this._$AA.parentNode.insertBefore(e,this._$AB)}T(e){this._$AH!==e&&(this._$AR(),this._$AH=this.O(e))}_(e){this._$AH!==V&&k(this._$AH)?this._$AA.nextSibling.data=e:this.T(T.createTextNode(e)),this._$AH=e}$(e){const{values:t,_$litType$:i}=e,s="number"==typeof i?this._$AC(e):(void 0===i.el&&(i.el=K.createElement(z(i.h,i.h[0]),this.options)),i);if(this._$AH?._$AD===s)this._$AH.p(t);else{const e=new J(s,this),i=e.u(this.options);e.p(t),this.T(i),this._$AH=e}}_$AC(e){let t=Q.get(e.strings);return void 0===t&&Q.set(e.strings,t=new K(e)),t}k(e){R(this._$AH)||(this._$AH=[],this._$AR());const t=this._$AH;let i,s=0;for(const o of e)s===t.length?t.push(i=new Z(this.O(P()),this.O(P()),this,this.options)):i=t[s],i._$AI(o),s++;s<t.length&&(this._$AR(i&&i._$AB.nextSibling,s),t.length=s)}_$AR(e=this._$AA.nextSibling,t){for(this._$AP?.(!1,!0,t);e!==this._$AB;){const t=e.nextSibling;e.remove(),e=t}}setConnected(e){void 0===this._$AM&&(this._$Cv=e,this._$AP?.(e))}}class X{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(e,t,i,s,o){this.type=1,this._$AH=V,this._$AN=void 0,this.element=e,this.name=t,this._$AM=s,this.options=o,i.length>2||""!==i[0]||""!==i[1]?(this._$AH=Array(i.length-1).fill(new String),this.strings=i):this._$AH=V}_$AI(e,t=this,i,s){const o=this.strings;let n=!1;if(void 0===o)e=W(this,e,t,0),n=!k(e)||e!==this._$AH&&e!==Y,n&&(this._$AH=e);else{const s=e;let r,a;for(e=o[0],r=0;r<o.length-1;r++)a=W(this,s[i+r],t,r),a===Y&&(a=this._$AH[r]),n||=!k(a)||a!==this._$AH[r],a===V?e=V:e!==V&&(e+=(a??"")+o[r+1]),this._$AH[r]=a}n&&!s&&this.j(e)}j(e){e===V?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,e??"")}}class ee extends X{constructor(){super(...arguments),this.type=3}j(e){this.element[this.name]=e===V?void 0:e}}class te extends X{constructor(){super(...arguments),this.type=4}j(e){this.element.toggleAttribute(this.name,!!e&&e!==V)}}class ie extends X{constructor(e,t,i,s,o){super(e,t,i,s,o),this.type=5}_$AI(e,t=this){if((e=W(this,e,t,0)??V)===Y)return;const i=this._$AH,s=e===V&&i!==V||e.capture!==i.capture||e.once!==i.once||e.passive!==i.passive,o=e!==V&&(i===V||s);s&&this.element.removeEventListener(this.name,this,i),o&&this.element.addEventListener(this.name,this,e),this._$AH=e}handleEvent(e){"function"==typeof this._$AH?this._$AH.call(this.options?.host??this.element,e):this._$AH.handleEvent(e)}}class se{constructor(e,t,i){this.element=e,this.type=6,this._$AN=void 0,this._$AM=t,this.options=i}get _$AU(){return this._$AM._$AU}_$AI(e){W(this,e)}}const oe={I:Z},ne=S.litHtmlPolyfillSupport;ne?.(K,Z),(S.litHtmlVersions??=[]).push("3.3.1");const re=globalThis;let ae=class extends E{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){const e=super.createRenderRoot();return this.renderOptions.renderBefore??=e.firstChild,e}update(e){const t=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(e),this._$Do=((e,t,i)=>{const s=i?.renderBefore??t;let o=s._$litPart$;if(void 0===o){const e=i?.renderBefore??null;s._$litPart$=o=new Z(t.insertBefore(P(),e),e,void 0,i??{})}return o._$AI(e),o})(t,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return Y}};ae._$litElement$=!0,ae.finalized=!0,re.litElementHydrateSupport?.({LitElement:ae});const le=re.litElementPolyfillSupport;le?.({LitElement:ae}),(re.litElementVersions??=[]).push("4.2.1");const de={attribute:!0,type:String,converter:f,reflect:!1,hasChanged:y},ce=(e=de,t,i)=>{const{kind:s,metadata:o}=i;let n=globalThis.litPropertyMetadata.get(o);if(void 0===n&&globalThis.litPropertyMetadata.set(o,n=new Map),"setter"===s&&((e=Object.create(e)).wrapped=!0),n.set(i.name,e),"accessor"===s){const{name:s}=i;return{set(i){const o=t.get.call(this);t.set.call(this,i),this.requestUpdate(s,o,e)},init(t){return void 0!==t&&this.C(s,void 0,e,t),t}}}if("setter"===s){const{name:s}=i;return function(i){const o=this[s];t.call(this,i),this.requestUpdate(s,o,e)}}throw Error("Unsupported decorator location: "+s)};function he(e){return(t,i)=>"object"==typeof i?ce(e,t,i):((e,t,i)=>{const s=t.hasOwnProperty(i);return t.constructor.createProperty(i,e),s?Object.getOwnPropertyDescriptor(t,i):void 0})(e,t,i)}function ue(e){return he({...e,state:!0,attribute:!1})}const pe=(e,t,i)=>(i.configurable=!0,i.enumerable=!0,Reflect.decorate&&"object"!=typeof t&&Object.defineProperty(e,t,i),i);function ve(e,t){return(i,s,o)=>{const n=t=>t.renderRoot?.querySelector(e)??null;if(t){const{get:e,set:t}="object"==typeof s?i:o??(()=>{const e=Symbol();return{get(){return this[e]},set(t){this[e]=t}}})();return pe(i,s,{get(){let i=e.call(this);return void 0===i&&(i=n(this),(null!==i||this.hasUpdated)&&t.call(this,i)),i}})}return pe(i,s,{get(){return n(this)}})}}function _e(e){return(t,i)=>pe(t,i,{async get(){return await this.updateComplete,this.renderRoot?.querySelector(e)??null}})}class ge extends ae{setConfig(e){}render(){return G` <div>Nothing to configure.</div> `}}customElements.get("browser-player-editor")||(customElements.define("browser-player-editor",ge),window.customCards=window.customCards||[],window.customCards.push({type:"browser-player",name:"Browser Player",preview:!0}));class me extends ae{static getConfigElement(){return document.createElement("browser-player-editor")}static getStubConfig(){return{}}_reconnect(){var e;(null===(e=window.browser_mod)||void 0===e?void 0:e.registered)||("hui-card-preview"===this.parentElement.localName?this.removeAttribute("hidden"):this.setAttribute("hidden",""))}async connectedCallback(){var e;super.connectedCallback(),await(null===(e=window.browser_mod)||void 0===e?void 0:e.connectionPromise),this._reconnect()}async setConfig(e){for(var t,i,s,o,n;!window.browser_mod;)await new Promise(e=>setTimeout(e,1e3));for(const e of["play","pause","ended","volumechange","canplay","loadeddata"])null===(i=null===(t=window.browser_mod)||void 0===t?void 0:t._audio_player)||void 0===i||i.addEventListener(e,()=>this.requestUpdate());null===(o=null===(s=window.browser_mod)||void 0===s?void 0:s._video_player)||void 0===o||o.addEventListener(event,()=>this.requestUpdate()),null===(n=window.browser_mod)||void 0===n||n.addEventListener("browser-mod-ready",()=>this._reconnect())}handleMute(e){window.browser_mod.player.muted=!window.browser_mod.player.muted}handleVolumeChange(e){const t=parseFloat(e.target.value);window.browser_mod.player.volume=t/100}handleMoreInfo(e){var t,i;this.dispatchEvent(new CustomEvent("hass-more-info",{bubbles:!0,composed:!0,cancelable:!1,detail:{entityId:null===(i=null===(t=window.browser_mod.browserEntities)||void 0===t?void 0:t.player)||void 0===i?void 0:i.entity_id}}))}handlePlayPause(e){!window.browser_mod.player.src||window.browser_mod.player.paused||window.browser_mod.player.ended?(window.browser_mod.player.play(),window.browser_mod._show_video_player()):window.browser_mod.player.pause()}handleVolumeDown(e){window.browser_mod.player.volume=Math.max(window.browser_mod.player.volume-.1,0)}handleVolumeUp(e){window.browser_mod.player.volume=Math.min(window.browser_mod.player.volume+.1,1)}handleReload(e){const t=window.browser_mod.player.src&&!window.browser_mod.player.paused&&!window.browser_mod.player.ended;window.browser_mod.player.load(),t&&window.browser_mod.player.play()}render(){var e,t,i;return window.browser_mod?(null===(e=window.browser_mod)||void 0===e?void 0:e.registered)?(null===(t=window.browser_mod)||void 0===t?void 0:t.browserEntities)?(null===(i=window.browser_mod)||void 0===i?void 0:i.playerEnabled)?G` <ha-card> <div class="card-content"> <ha-icon-button @click=${this.handleMute}> <ha-icon .icon=${window.browser_mod.player.muted?"mdi:volume-off":"mdi:volume-high"} ></ha-icon> </ha-icon-button> <ha-icon-button @click=${this.handleVolumeDown}> <ha-icon .icon=${"mdi:volume-minus"}></ha-icon> </ha-icon-button> <ha-icon-button @click=${this.handleVolumeUp}> <ha-icon .icon=${"mdi:volume-plus"}></ha-icon> </ha-icon-button> <ha-slider labeled .min=${0} .max=${100} .step=${1} .disabled=${window.browser_mod.player.muted} .value=${100*window.browser_mod.player.volume} @change=${this.handleVolumeChange} ></ha-slider> ${"stopped"===window.browser_mod.player_state?G`<div class="placeholder"></div>`:G` <ha-icon-button @click=${this.handlePlayPause} highlight> <ha-icon .icon=${!window.browser_mod.player.src||window.browser_mod.player.ended||window.browser_mod.player.paused?"mdi:play":"mdi:pause"} ></ha-icon> </ha-icon-button> `} <ha-icon-button @click=${this.handleReload}> <ha-icon .icon=${"mdi:reload"}></ha-icon> </ha-icon-button> <ha-icon-button @click=${this.handleMoreInfo}> <ha-icon .icon=${"mdi:cog"}></ha-icon> </ha-icon-button> </div> <div class="browser-id">${window.browser_mod.browserID}</div> </ha-card> `:G` <ha-card> <ha-alert> Media player disabled for this browser. </ha-alert> </ha-card> `:(window.setTimeout(()=>this.requestUpdate(),100),G``):G` <ha-card> <ha-alert> This browser is not registered to Browser Mod. </ha-alert> </ha-card> `:(window.setTimeout(()=>this.requestUpdate(),100),G``)}static get styles(){return a` :host([hidden]) { display: none; } :host([edit-mode="true"]) { display: block !important; } paper-icon-button[highlight] { color: var(--accent-color); } .card-content { display: flex; justify-content: center; align-items: center; } .placeholder { width: 24px; padding: 8px; } .browser-id { opacity: 0.7; font-size: xx-small; margin-top: -10px; user-select: all; -webkit-user-select: all; -moz-user-select: all; -ms-user-select: all; } ha-icon-button ha-icon { display: flex; } ha-slider { flex-grow: 2; flex-shrink: 2; width: 100%; } `}}var we;t([he()],me.prototype,"hass",void 0),t([he({attribute:"edit-mode",reflect:!0})],me.prototype,"editMode",void 0),customElements.get("browser-player")||customElements.define("browser-player",me);const be=new WeakMap,fe=()=>{};we=Symbol.toStringTag;let ye=class e{constructor(e){this.subscribers=[],this.settlement=null,this[we]="Unpromise",this.promise="function"==typeof e?new Promise(e):e;const t=this.promise.then(e=>{const{subscribers:t}=this;this.subscribers=null,this.settlement={status:"fulfilled",value:e},null==t||t.forEach(({resolve:t})=>{t(e)})});"catch"in t&&t.catch(e=>{const{subscribers:t}=this;this.subscribers=null,this.settlement={status:"rejected",reason:e},null==t||t.forEach(({reject:t})=>{t(e)})})}subscribe(){let e,t;const{settlement:i}=this;if(null===i){if(null===this.subscribers)throw new Error("Unpromise settled but still has subscribers");const i=function(){let e,t;return{promise:new Promise((i,s)=>{e=i,t=s}),resolve:e,reject:t}}();this.subscribers=function(e,t){return[...e,t]}(this.subscribers,i),e=i.promise,t=()=>{null!==this.subscribers&&(this.subscribers=function(e,t){const i=e.indexOf(t);return-1!==i?function(e,t){return[...e.slice(0,t),...e.slice(t+1)]}(e,i):e}(this.subscribers,i))}}else{const{status:s}=i;e="fulfilled"===s?Promise.resolve(i.value):Promise.reject(i.reason),t=fe}return Object.assign(e,{unsubscribe:t})}then(e,t){const i=this.subscribe(),{unsubscribe:s}=i;return Object.assign(i.then(e,t),{unsubscribe:s})}catch(e){const t=this.subscribe(),{unsubscribe:i}=t;return Object.assign(t.catch(e),{unsubscribe:i})}finally(e){const t=this.subscribe(),{unsubscribe:i}=t;return Object.assign(t.finally(e),{unsubscribe:i})}static proxy(t){const i=e.getSubscribablePromise(t);return typeof i<"u"?i:e.createSubscribablePromise(t)}static createSubscribablePromise(t){const i=new e(t);return be.set(t,i),be.set(i,i),i}static getSubscribablePromise(e){return be.get(e)}static resolve(t){const i="object"==typeof t&&null!==t&&"then"in t&&"function"==typeof t.then?t:Promise.resolve(t);return e.proxy(i).subscribe()}static async any(t){const i=(Array.isArray(t)?t:[...t]).map(e.resolve);try{return await Promise.any(i)}finally{i.forEach(({unsubscribe:e})=>{e()})}}static async race(t){const i=(Array.isArray(t)?t:[...t]).map(e.resolve);try{return await Promise.race(i)}finally{i.forEach(({unsubscribe:e})=>{e()})}}static async raceReferences(e){const t=e.map(Ae);try{return await Promise.race(t)}finally{for(const e of t)e.unsubscribe()}}};function Ae(e){return ye.proxy(e).then(()=>[e])}const Ee="SELECTTREE-TIMEOUT",Se="browser-mod-close-anchor";async function $e(e,t=!1){var i;if((null===(i=e.localName)||void 0===i?void 0:i.includes("-"))&&await customElements.whenDefined(e.localName),e.updateComplete&&await e.updateComplete,t&&(e.pageRendered&&await e.pageRendered,e._panelState)){let t=0;for(;"loaded"!==e._panelState&&t++<5;)await new Promise(e=>setTimeout(e,100))}}async function Ce(e,t,i=!1){let s=[e];for("string"==typeof t&&(t=t.split(/(\$| )/));""===t[t.length-1];)t.pop();for(const[e,i]of t.entries()){const e=s[0];if(!e)return null;i.trim().length&&($e(e),s="$"===i?[e.shadowRoot]:e.querySelectorAll(i))}return i?s:s[0]}async function xe(e,t,i=!1,s=1e4){return ye.race([Ce(e,t,i),new Promise((e,t)=>setTimeout(()=>t(new Error(Ee)),s))]).catch(e=>{if(!e.message||e.message!==Ee)throw e;return null})}async function Ie(e){let t=await i(e);for(;null===t;)await new Promise(e=>setTimeout(e,100)),t=await i(e);return t||null;async function i(e){let t=await xe(e,"home-assistant$home-assistant-main$ha-panel-lovelace$hui-root");if(!t){let t=await xe(e,"home-assistant$home-assistant-main$partial-panel-resolver>*");if("ha-panel-lovelace"!==(null==t?void 0:t.localName))return!1}return t||(t=await xe(e,"hc-main $ hc-lovelace $ hui-view")),t||(t=await xe(e,"hc-main $ hc-lovelace $ hui-panel-view")),t}}async function qe(){var e;void 0===(null!==(e=customElements.get("home-assistant"))&&void 0!==e?e:customElements.get("hc-main"))&&await ye.race([customElements.whenDefined("home-assistant"),customElements.whenDefined("hc-main")]);const t=customElements.get("home-assistant")?"home-assistant":"hc-main";for(;!document.querySelector(t);)await new Promise(e=>window.setTimeout(e,100));return document.querySelector(t)}async function Me(){const e=await qe();for(;!e.hass;)await new Promise(e=>window.setTimeout(e,100));return e.hass}async function Te(e){(await qe()).provideHass(e)}const Pe=async()=>{var e,t,i;if(void 0!==window.loadCardHelpers)return;await customElements.whenDefined("partial-panel-resolver");const s=document.createElement("partial-panel-resolver")._getRoutes([{component_name:"lovelace",url_path:"a"}]);await(null===(i=null===(t=null===(e=null==s?void 0:s.routes)||void 0===e?void 0:e.a)||void 0===t?void 0:t.load)||void 0===i?void 0:i.call(t));try{const e=document.createElement("ha-panel-lovelace");e.hass=await Me(),e.panel={config:{mode:"yaml"}},await e._fetchConfig(!1)}catch(e){}},ke=async()=>{if(customElements.get("ha-form"))return;await Pe();const e=await window.loadCardHelpers();if(!e)return;const t=await e.createCardElement({type:"button"});t&&await t.constructor.getConfigElement()};function Re(e=!1){return function(t,i,s){const o=s.value;let n;const r=function(...t){if(e&&!1===n&&(n=!0),void 0!==n)return;n=!1;const i=o.bind(this)(...t);return n?(n=void 0,r.bind(this)(...t)):(n=void 0,i)};s.value=r}}function Oe(e){return"string"==typeof e&&"iframe"===e.toLowerCase()}function Le(e){if(null==e||!1===e)return!1;if(e instanceof HTMLElement){if(Oe(e.tagName))return!0;for(const t of e.children)if(Le(t))return!0;return!1}if("string"==typeof e)return/<iframe[\s>]/i.test(e);if(Array.isArray(e))return e.some(e=>Le(e));if("object"==typeof e&&!Array.isArray(e)){const t=e;if(Oe(t.type))return!0;for(const e of Object.keys(t))if("type"!==e&&Le(t[e]))return!0}return!1}const De=(e,t,i=!1)=>{let s;const o=(...o)=>{const n=i&&!s;clearTimeout(s),s=window.setTimeout(()=>{s=void 0,e(...o)},t),n&&e(...o)};return o.cancel=()=>{clearTimeout(s)},o};function je(e){return null==e||Array.isArray(e)?e:[e]}const Be=e=>e&&String(e[0]).toUpperCase()+String(e).slice(1)||"",Ue=e=>e&&String(e).replace(/([a-z])([A-Z])/g,"$1 $2")||"";function He(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(!(e instanceof Object&&t instanceof Object))return!1;for(const i in e)if(e.hasOwnProperty(i)){if(!t.hasOwnProperty(i))return!1;if(e[i]!==t[i]){if("object"!=typeof e[i])return!1;if(!He(e[i],t[i]))return!1}}for(const i in t)if(t.hasOwnProperty(i)&&!e.hasOwnProperty(i))return!1;return!0}const Ne=e=>class extends e{constructor(){super(...arguments),this.ready=!1,this._connected=!1,this._recallIdPromise=Promise.resolve(),this.connectionPromise=new Promise(e=>{this._connectionResolve=e}),this.browserEntities={},this.onReady=()=>{this.ready=!0,this.LOG("Integration ready: browser_mod loaded and update received"),this.fireBrowserEvent("browser-mod-ready"),window.setTimeout(()=>this.sendUpdate({}),1e3),this.syncSession||(this._recallIdPromise=this.recall_id()),this.syncSession&&this.store_session(),this.userReady().then(()=>{this.onUserReady()}).catch(e=>{console.log(`Browser Mod: ${e}. User Frontend settings have not been applied`)})},this.onConnected=()=>{this._connected=!0,this.LOG("WebSocket connected")},this.onDisconnected=()=>{this.ready=!1,this._connected=!1,this.LOG("WebSocket disconnected"),this.fireBrowserEvent("browser-mod-disconnected")},this.onUserReady=()=>{this.LOG("Hass user data ready"),this.fireBrowserEvent("browser-mod-user-ready")}}LOG(...e){if(void 0===window.browser_mod_log)return;const t=new Date;if(console.log(`${t.toLocaleTimeString()}`,...e),this._connected)try{this.connection.sendMessage({type:"browser_mod/log",message:e[0]})}catch(e){console.log("Browser Mod: Error sending log:",e)}}fireBrowserEvent(e,t=void 0){this.dispatchEvent(new CustomEvent(e,{detail:t,bubbles:!0}))}async entitiesReady(){if(this.ready&&!this.registered)return!1;if(Object.keys(this.browserEntities).length>0)return!0;{let e=0;for(;0===Object.keys(this.browserEntities).length&&e++<20;)if(await new Promise(e=>setTimeout(e,500)),this.ready&&!this.registered)return!1;if(Object.keys(this.browserEntities).length>0)return!0;throw new Error("Browser entities not available after 10 seconds")}}async userReady(){const e=new Promise((e,t)=>setTimeout(()=>t(new Error("recall_id did not return within 5000ms")),5e3));if(await ye.race([this._recallIdPromise,e]),this.user)return!0;{let e=0;for(;!this.user&&e++<20;)await new Promise(e=>setTimeout(e,500));if(this.user)return!0;throw new Error("User data not available after 10 seconds")}}incoming_message(e){var t;if(this._connected||this.onConnected(),e.command)this.LOG("Command:",e),this.fireBrowserEvent(`command-${e.command}`,e);else if(e.browserEntities){let t=this.browserEntities;this.browserEntities=e.browserEntities,He(t,this.browserEntities)||this.fireBrowserEvent("browser-mod-entities-update")}else e.result&&this.update_config(e.result);null===(t=this._connectionResolve)||void 0===t||t.call(this),this._connectionResolve=void 0}update_config(e){var t;this.LOG("Receive:",e);let i=!1;!this.registered&&(null===(t=e.browsers)||void 0===t?void 0:t[this.browserID])&&(i=!0),this._data=e,this.registered||!0!==this.global_settings.autoRegister||(this.registered=!0),this.ready||this.onReady(),this.fireBrowserEvent("browser-mod-config-update"),i&&this.sendUpdate({})}async connect(){const e=(await Me()).connection;this.connection=e;const t=()=>{this.LOG("Subscribing to browser_mod/connect events"),e.subscribeMessage(e=>this.incoming_message(e),{type:"browser_mod/connect",browserID:this.browserID})};t(),e.subscribeEvents(e=>{var i;"browser_mod"===(null===(i=e.data)||void 0===i?void 0:i.component)&&(this.LOG("Detected browser_mod component load"),t())},"component_loaded"),e.addEventListener("ready",()=>{this.onConnected()}),e.addEventListener("disconnected",()=>{this.onDisconnected()}),window.addEventListener("connection-status",e=>{"connected"===e.detail&&this.onConnected(),"disconnected"===e.detail&&this.onDisconnected()}),Te(this)}get config(){var e,t;return null!==(t=null===(e=this._data)||void 0===e?void 0:e.config)&&void 0!==t?t:{}}get user(){var e;return null===(e=this.hass)||void 0===e?void 0:e.user}get browsers(){var e,t;return null!==(t=null===(e=this._data)||void 0===e?void 0:e.browsers)&&void 0!==t?t:[]}get registered(){var e;return void 0!==(null===(e=this.browsers)||void 0===e?void 0:e[this.browserID])}get browser_locked(){var e,t;return null===(t=null===(e=this.browsers)||void 0===e?void 0:e[this.browserID])||void 0===t?void 0:t.locked}set registered(e){(async()=>{if(e){if(this.registered||this.global_settings.lockRegister)return;await this.connection.sendMessage({type:"browser_mod/register",browserID:this.browserID})}else{if(!this.registered)return;await this.connection.sendMessage({type:"browser_mod/unregister",browserID:this.browserID})}})()}async _reregister(e={}){await this.connection.sendMessage({type:"browser_mod/register",browserID:this.browserID,data:Object.assign(Object.assign({},this.browsers[this.browserID]),e)})}get global_settings(){var e,t;const i={},s=null!==(t=null===(e=this._data)||void 0===e?void 0:e.settings)&&void 0!==t?t:{};for(const[e,t]of Object.entries(s))null!==t&&(i[e]=t);return i}get user_settings(){var e,t,i,s;const o={},n=null!==(s=null===(t=null===(e=this._data)||void 0===e?void 0:e.user_settings)||void 0===t?void 0:t[null===(i=this.user)||void 0===i?void 0:i.id])&&void 0!==s?s:{};for(const[e,t]of Object.entries(n))null!==t&&(o[e]=t);return o}get browser_settings(){var e,t,i;const s={},o=null!==(i=null===(t=null===(e=this.browsers)||void 0===e?void 0:e[this.browserID])||void 0===t?void 0:t.settings)&&void 0!==i?i:{};for(const[e,t]of Object.entries(o))null!==t&&(s[e]=t);return s}get settings(){return Object.assign(Object.assign(Object.assign({},this.global_settings),this.browser_settings),this.user_settings)}set_setting(e,t,i){var s;switch(i){case"global":this.connection.sendMessage({type:"browser_mod/settings",key:e,value:t});break;case"user":{const i=this.user.id;this.connection.sendMessage({type:"browser_mod/settings",user:i,key:e,value:t});break}case"browser":{const i=null===(s=this.browsers[this.browserID])||void 0===s?void 0:s.settings;i[e]=t,this._reregister({settings:i});break}}}get cameraEnabled(){return this.registered?this.browsers[this.browserID].camera:null}set cameraEnabled(e){this._reregister({camera:e})}get go2rtcEnabled(){return this.registered?this.browsers[this.browserID].go2rtc:null}set go2rtcEnabled(e){this._reregister({go2rtc:e})}get playerEnabled(){var e,t,i;return this.registered?null!==(i=null===(t=null===(e=this.browserEntities)||void 0===e?void 0:e.player)||void 0===t?void 0:t.enabled)&&void 0!==i&&i:null}get screenEnabled(){var e,t,i;return this.registered?null!==(i=null===(t=null===(e=this.browserEntities)||void 0===e?void 0:e.screen)||void 0===t?void 0:t.enabled)&&void 0!==i&&i:null}sendUpdate(e){if(this.ready&&this.registered){this.LOG("Send:",e);try{this.connection.sendMessage({type:"browser_mod/update",browserID:this.browserID,data:e})}catch(e){console.log("Browser Mod: Error sending update:",e)}}}browserIDChanged(e,t){var i,s;this.fireBrowserEvent("browser-mod-config-update"),void 0!==(null===(i=this.browsers)||void 0===i?void 0:i[e])&&void 0===(null===(s=this.browsers)||void 0===s?void 0:s[this.browserID])&&(async()=>{await this.connection.sendMessage({type:"browser_mod/register",browserID:e,data:Object.assign(Object.assign({},this.browsers[e]),{browserID:this.browserID})})})()}},Ge="browser_mod-screen_state",Ye=e=>class extends e{constructor(){super(),this._listeners={},this._brightness=255;const e=this._panel=document.createElement("div");document.body.append(e),e.classList.add("browser-mod-blackout"),e.attachShadow({mode:"open"});const t=document.createElement("style");e.shadowRoot.append(t),t.innerHTML="\n :host {\n background: rgba(0,0,0, var(--darkness));\n position: fixed;\n left: 0;\n top: 0;\n bottom: 0;\n right: 0;\n width: 100%;\n height: 100%;\n z-index: 10000;\n display: block;\n pointer-events: none;\n }\n :host([dark]) {\n background: rgba(0,0,0,1);\n }\n ",this.addEventListener("browser-mod-user-ready",()=>{this.entitiesReady().then(()=>{this.screenEnabled&&(this.addEventListener("command-screen_off",()=>this._screen_off()),this.addEventListener("command-screen_on",e=>this._screen_on(e)),this.addEventListener("fully-update",()=>this.send_screen_status()),this.addEventListener("browser-mod-disconnected",()=>this._screen_save_state()),this._screen_restore_state())}).catch(e=>{console.warn(`Browser Mod: ${e}. Timeout waiting for browser entities to be ready. Screen light sensor will not be available`)})},{once:!0})}send_screen_status(){this._screen_state=!this._panel.hasAttribute("dark");let e=this._brightness;this.fully&&(this._screen_state=this.fully_screen,e=this.fully_brightness),this.sendUpdate({screen_on:this._screen_state,screen_brightness:e}),this._screen_save_state()}_screen_save_state(){if(this.settings.saveScreenState){let e={screen_on:this._screen_state,screen_brightness:this._brightness};localStorage.setItem(Ge,JSON.stringify(e))}}_screen_restore_state(){if(this.settings.saveScreenState){const e=localStorage.getItem(Ge);if(e){const{screen_on:t,screen_brightness:i}=JSON.parse(e);this._screen_state=t,this._brightness=i,this._screen_state?this._screen_on({detail:{brightness:this._brightness}}):this._screen_off()}else this._screen_on()}else this._screen_on()}_screen_off(){this.fully?this.fully_screen=!1:this._panel.setAttribute("dark",""),this.send_screen_status();const e=()=>this._screen_on();for(const t of["pointerdown","pointermove","keydown"])this._listeners[t]=e,window.addEventListener(t,e)}_screen_on(e=void 0){var t,i;this.fully?(this.fully_screen=!0,(null===(t=null==e?void 0:e.detail)||void 0===t?void 0:t.brightness)&&(this.fully_brightness=e.detail.brightness)):((null===(i=null==e?void 0:e.detail)||void 0===i?void 0:i.brightness)&&(this._brightness=e.detail.brightness,this._panel.style.setProperty("--darkness",1-e.detail.brightness/255)),this._panel.removeAttribute("dark")),this.send_screen_status();for(const e of["pointerdown","pointermove","keydown"])this._listeners[e]&&(window.removeEventListener(e,this._listeners[e]),this._listeners[e]=void 0)}},Ve=e=>{class i extends e{constructor(){super(),this._canPlayVideo=!1,this._canPlayAudio=!1,this.addEventListener("browser-mod-entities-update",()=>{this._setup_media_player()},{once:!0})}_setup_media_player(){if(this.playerEnabled){this._audio_player=new Audio,this._audio_player.muted=!0,this._video_player=document.createElement("video"),this._video_player.setAttribute("playsinline",""),this._video_player.controls=!0,this._video_player.style.setProperty("width","100%"),this._video_player.muted=!0,this.player=this._audio_player,this._player_enabled=!1,this.extra={};for(const e of["play","pause","ended","volumechange"])this._audio_player.addEventListener(e,()=>this._player_update()),this._video_player.addEventListener(e,()=>this._player_update());for(const e of["timeupdate"])this._audio_player.addEventListener(e,()=>this._player_update_throttled()),this._video_player.addEventListener(e,()=>this._player_update_throttled());this.videoInteraction.then(()=>{this._player_enabled=!0,this._canPlayVideo=!0,this._player_update()}),this.audioInteraction.then(()=>{this._canPlayAudio=!0,this._video_player.muted=!1,this._audio_player.muted=!1,this._player_update()}),this.addEventListener("command-player-play",e=>{var t,i,s,o,n,r;if(this.player.src&&void 0===(null===(t=e.detail)||void 0===t?void 0:t.media_content_id))return this.player.play(),void this._show_video_player();(this.player.src||void 0!==(null===(i=e.detail)||void 0===i?void 0:i.media_content_id))&&(this.player.src&&this.player.pause(),(null===(s=e.detail)||void 0===s?void 0:s.media_type)&&((null===(o=e.detail)||void 0===o?void 0:o.media_type.startsWith("video"))?this.player=this._video_player:this.player=this._audio_player),(null===(n=e.detail)||void 0===n?void 0:n.media_content_id)&&(this.player.src=e.detail.media_content_id),this.extra=null===(r=e.detail)||void 0===r?void 0:r.extra,this.player.play(),this._show_video_player())}),this.addEventListener("command-player-pause",e=>this.player.pause()),this.addEventListener("command-player-stop",e=>{this.player.src=null,this.player.pause()}),this.addEventListener("command-player-set-volume",e=>{var t;void 0!==(null===(t=e.detail)||void 0===t?void 0:t.volume_level)&&(this.player.volume=e.detail.volume_level)}),this.addEventListener("command-player-mute",e=>{var t;void 0!==(null===(t=e.detail)||void 0===t?void 0:t.mute)?this.player.muted=Boolean(e.detail.mute):this.player.muted=!this.player.muted}),this.addEventListener("command-player-seek",e=>{this.player.currentTime=e.detail.position,setTimeout(()=>this._player_update(),10)}),this.addEventListener("command-player-turn-off",e=>{this.player===this._video_player&&this._video_player.isConnected?this.closePopup({tag:"media_player"}):this.player.src&&this.player.pause(),this.player.src="",this._player_update()}),this._player_update()}}_show_video_player(){var e;this.player===this._video_player&&this.player.src&&!this._video_player.isConnected?(xe(document,"home-assistant $ dialog-media-player-browse").then(e=>null==e?void 0:e.closeDialog()),this.showPopup(Object.assign({title:void 0,content:this._video_player,dismiss_action:()=>this._video_player.pause(),initial_style:"wide",tag:"media_player"},null===(e=this.extra)||void 0===e?void 0:e.popup))):this.player!==this._video_player&&this._video_player.isConnected&&this.closePopup({tag:"media_player"})}_player_update_throttled(){this._player_update()}_player_update(){const e=this._player_enabled?this.player.src&&this.player.src!==window.location.href?this.player.ended?"stopped":this.player.paused?"paused":"playing":"off":"unavailable";this.sendUpdate({player:{volume:this.player.volume,muted:this.player.muted,src:this.player.src,state:e,media_duration:this.player.duration,media_position:this.player.currentTime,extra:Object.assign(Object.assign({},this.extra),{videoInteractionRequired:!this._canPlayVideo,audioInteractionRequired:!this._canPlayAudio})}})}}var s;return t([(s=3e3,function(e,t,i){const o=i.value;let n;i.value=function(...e){if(!n)return n=setTimeout(()=>n=void 0,s),o.bind(this)(...e)}})],i.prototype,"_player_update_throttled",null),i},Qe=e=>class extends e{constructor(){super(),this._framerate=2,this.cameraError=!1,this.addEventListener("browser-mod-user-ready",()=>{this._setup_camera()},{once:!0})}async _setup_camera(){var e;if(this._cameraVideo)return;if(await this.connectionPromise,await this.videoInteraction,!this.cameraEnabled)return;if(this.fully)return this.update_camera();const t=document.createElement("div");document.body.append(t),t.classList.add("browser-mod-camera"),t.attachShadow({mode:"open"});const i=document.createElement("style");t.shadowRoot.append(i),i.innerHTML="\n :host {\n display: none;\n }";const s=this._cameraVideo=document.createElement("video");t.shadowRoot.append(s),s.autoplay=!0,s.playsInline=!0,s.style.display="none";const o=this._canvas=document.createElement("canvas");if(t.shadowRoot.append(o),o.style.display="none",!navigator.mediaDevices)return this.cameraError=!0,void this.fireBrowserEvent("browser-mod-config-update");try{let t=!0;if(null===(e=this.settings)||void 0===e?void 0:e.cameraResolution){const e=this.settings.cameraResolution.match(/(\d+)\s*x\s*(\d+)/i);if(e){const i=parseInt(e[1],10);t={width:{ideal:i},height:{ideal:parseInt(e[2],10)}}}}const i=await navigator.mediaDevices.getUserMedia({video:t,audio:!1});s.srcObject=i,s.play(),this.update_camera()}catch(e){if("NotAllowedError"!==e.name)throw e;this.cameraError=!0,this.fireBrowserEvent("browser-mod-config-update")}}async update_camera(){var e,t;if(!this.cameraEnabled){const t=null===(e=this._cameraVideo)||void 0===e?void 0:e.srcObject;return void(t&&(t.getTracks().forEach(e=>e.stop()),this._cameraVideo.srcObject=void 0))}if(this.fully)this.sendUpdate({camera:this.fully_camera});else if(null===(t=this._cameraVideo)||void 0===t?void 0:t.videoWidth){const e=this._cameraVideo,t=e.videoWidth,i=e.videoHeight;this._canvas.width=t,this._canvas.height=i;this._canvas.getContext("2d").drawImage(e,0,0,t,i),this.sendUpdate({camera:this._canvas.toDataURL("image/jpeg")})}const i=Math.round(1e3/this._framerate);setTimeout(()=>this.update_camera(),i)}},Fe=e=>class extends e{constructor(){super(),this.videoInteraction=new Promise(e=>{this._videoInteractionResolve=e}),this.audioInteraction=new Promise(e=>{this._audioInteractionResolve=e}),this.addEventListener("browser-mod-user-ready",()=>{this.entitiesReady().then(()=>{(this.playerEnabled||this.cameraEnabled||this.go2rtcEnabled)&&!this._versionNotificationPending&&(this._audioRequired=this.playerEnabled,this.setupInteraction())}).catch(e=>{console.warn(`Browser Mod: Failed to wait for browser entities to be ready. Interaction-dependent features may be unavailable. Error: ${e}`)})},{once:!0})}_clearInteract(){this._video.remove(),this._video=void 0,this._interactElement.remove(),this._interactElement=void 0}_checkInteraction(e=void 0){if(!this._interactElement)return;const t=this._video.play();void 0!==t&&t.then(()=>{if(this._videoInteractionResolve(),this._video.pause(),this._audioRequired){this._video.muted=!1,this._video.currentTime=0;const t=this._video.play();void 0!==t&&t.then(()=>{this._audioInteractionResolve(),this._video.pause()}).catch(t=>{e&&!this.settings.hideInteractIcon?e():this._clearInteract()})}}).catch(t=>{e&&!this.settings.hideInteractIcon?e():this._clearInteract()})}minimalInteraction(){if(!this._interactElement)return;const e=document.createElement("span");e.textContent="Browser Mod",this._interactElement.shadowRoot.append(e);const t=document.createElement("ha-icon");t.setAttribute("id","tap"),t.icon="mdi:gesture-tap",this._interactElement.shadowRoot.append(t),this._interactElement.setAttribute("minimal","");const i=this.settings.fullInteraction?()=>this.fullInteraction():void 0;this._interactElement.addEventListener("pointerdown",()=>{this._checkInteraction(i)},{once:!0}),this._interactElement.addEventListener("touchstart",()=>{this._checkInteraction(i)},{once:!0})}fullInteraction(){if(!this._interactElement)return;const e=document.createElement("ha-icon-button");e.setAttribute("id","close");const t=document.createElement("ha-icon");t.setAttribute("icon","mdi:close"),e.append(t),e.addEventListener("pointerdown",()=>{this._clearInteract()}),e.addEventListener("touchstart",()=>{this._clearInteract()}),this._interactElement.shadowRoot.append(e);const i=document.createElement("source");i.setAttribute("type","audio/mp3"),i.setAttribute("src","data:audio/mp3;base64,//PkZAAghSh2AGt5kB6KMR2UyNNIZ0w1cy0UjhQODThmk5GSO2XN4qMilGCwWFgEAHCRoeBgCMjBUNwYCFRYjHGEHmXHB2A3BgzackLAAKCgQQBCAwYRCFZlRJhBwhHjBQsEoNODHE81tKBZwdYgG5rZkB4OrkoDC4EVEDjDEGGRUHkSUg0+F7qwL/WMlyLBl2Ee0ZCQEuETGBhiD8ARhmaBQiHMUYa4OIgz1xg4QChUAEDmKcbR5TWf4J3KGiiDBkEaMiHdLZRAtoMgpfK5XclqFRjMHJxwembghkglpC3YgCHSQqUHOh2hnggABAWiAMijpxiGk3wHLNIJBdeik0kC8YWAQ9Lekww0AgPQAInqqKdvMzuJSC2tiq4N4A5Tuu87rXmcopBAI0+cIpnGCMOGp2flERh55nygeKReWT9FF37jG89Y5Y27dSvcksFNJYkrQkgpu7Fn6JTIy/yMrKxI/8rDEiNJWSqIlFx8SI1Lq5YwvKMorEouPkiNAuomsZME6BdRc4Qi4nJG82E1E2XubxVpzglqzNVDl2BvEFzQMuaUACwZmxpOhdgqKTDq8aAnWtE3bTjNMccvkajwlAOhTPpQcrjhewtoYY8bSEcJURKjABgUEQACosHH4ghg//PkREwdqRqyAKzoALvqNVwBWdABOhwYPM6Ja+uuIINgoeIgwGKMqVVMOLAQ8AhQMPhT4GADGVLmhTmlLgoe4yKi+TCjTIizGAk8TClTMlzKkUSl+Q0/LOQCFAwda7K15A4B6xDAEiggYEGpsXgAgYWEFs19GLImREmBAhANLRUphxpECMIESjbm48v3fkrRl6qwgIGyeN5e+i5AICMeLCB7cKURAAMIeVR4MALkYyYMOiPDc/ES6MQRuJfQhJJilLBAAGCLAAgIMEYG7ada7DL1AdZslmlYTOgyQ6ADFJGQDYiDqCEKZ9KDk8cL2FtDDHjaQjhKiJUYAMCgiAAVFg4/EEMB0ODB5nRLX11xBBsFDxEGAxRlSqphxYCHgEKBh8KfAwAYypc0Kc0pcFD3GRUXyYUaZEWYwEniYUqZkuZUiiUvyGn5ZyAQoGDrXZWvIHAPWIYAkUEDAg1Ni8AEDCwgtmvoxZEyIkwIEIBpaKlMONIgRhAiUbc3Hl+78laMvVWEBA2TxvL30XIBARjxYQPbhSiIABhDyqPBgBcjGTBh0R4bn4ixYcNHQzqLDFShsWw4EQedbeJkBAYWGsS0BLww2F6+N1v0hC1hgTBImGuDMYogflLyVbMFsCcQANAY//PkRDocbTjoAM54ADO6ccgBm+gACxWA1pkSjFsA8M