homematic-manager 3.2.1 → 3.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,21 +1,21 @@
1
- (function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))s(a);new MutationObserver(a=>{for(const i of a)if(i.type==="childList")for(const o of i.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&s(o)}).observe(document,{childList:!0,subtree:!0});function n(a){const i={};return a.integrity&&(i.integrity=a.integrity),a.referrerPolicy&&(i.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?i.credentials="include":a.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function s(a){if(a.ep)return;a.ep=!0;const i=n(a);fetch(a.href,i)}})();const Ku=!1;var wi=Array.isArray,$m=Array.prototype.indexOf,no=Array.prototype.includes,_o=Array.from,Yu=Object.defineProperty,Aa=Object.getOwnPropertyDescriptor,qu=Object.getOwnPropertyDescriptors,$u=Object.prototype,Xm=Array.prototype,Eo=Object.getPrototypeOf,Jd=Object.isExtensible;const Hn=()=>{};function Qm(r){for(var e=0;e<r.length;e++)r[e]()}function Xu(){var r,e,n=new Promise((s,a)=>{r=s,e=a});return{promise:n,resolve:r,reject:e}}function ec(r,e){if(Array.isArray(r))return r;if(!(Symbol.iterator in r))return Array.from(r);const n=[];for(const s of r)if(n.push(s),n.length===e)break;return n}const rr=2,Ia=4,yo=8,Qu=1<<24,as=16,es=32,Os=64,ml=128,rd=256,Zr=512,qn=1024,Vn=2048,ls=4096,wr=8192,Nr=16384,ja=32768,ro=1<<25,ha=65536,so=1<<17,Zm=1<<18,Wa=1<<19,Jm=1<<20,Es=1<<25,ma=65536,ao=1<<21,Ta=1<<22,Ys=1<<23,Ns=Symbol("$state"),Zu=Symbol("component"),ev=Symbol("legacy props"),tv=Symbol(""),Ju=Symbol("attributes"),vl=Symbol("class"),pl=Symbol("style"),gl=Symbol("text"),Vi=Symbol("form reset"),ki=new class extends Error{name="StaleReactionError";message="The reaction that called `getAbortSignal()` was re-run or destroyed"},nv=!!globalThis.document?.contentType&&globalThis.document.contentType.includes("xml"),rv=1,sv=2,ef=4,av=8,iv=16,ov=1,lv=4,dv=8,cv=16,tf=1,uv=2,Yn=Symbol("uninitialized"),fv="http://www.w3.org/1999/xhtml";function hv(){console.warn("https://svelte.dev/e/derived_inert")}function mv(){console.warn("https://svelte.dev/e/select_multiple_invalid_value")}function vv(){console.warn("https://svelte.dev/e/svelte_boundary_reset_noop")}function nf(r){return r===this.v}function rf(r,e){return r!=r?e==e:r!==e||r!==null&&typeof r=="object"||typeof r=="function"}function sf(r){return!rf(r,this.v)}function sd(r){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function pv(){throw new Error("https://svelte.dev/e/async_derived_orphan")}function gv(r,e,n){throw new Error("https://svelte.dev/e/each_key_duplicate")}function bv(r){throw new Error("https://svelte.dev/e/effect_in_teardown")}function _v(){throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function Ev(r){throw new Error("https://svelte.dev/e/effect_orphan")}function yv(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}function Sv(r){throw new Error("https://svelte.dev/e/props_invalid_value")}function wv(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function kv(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}function Av(){throw new Error("https://svelte.dev/e/state_unsafe_mutation")}function Tv(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}let Rv=!1;const xv=[];function zi(r,e=!1,n=!1){return ji(r,new Map,"",xv,null,n)}function ji(r,e,n,s,a=null,i=!1){if(typeof r=="object"&&r!==null){var o=e.get(r);if(o!==void 0)return o;if(r instanceof Map)return new Map(r);if(r instanceof Set)return new Set(r);if(wi(r)){var l=Array(r.length);e.set(r,l),a!==null&&e.set(a,l);for(var f=0;f<r.length;f+=1){var p=r[f];f in r&&(l[f]=ji(p,e,n,s,null,i))}return l}if(Eo(r)===$u){l={},e.set(r,l),a!==null&&e.set(a,l);for(var _ of Object.keys(r))l[_]=ji(r[_],e,n,s,null,i);return l}if(r instanceof Date)return r.getTime(),structuredClone(r);if(typeof r.toJSON=="function"&&!i)return ji(r.toJSON(),e,n,s,r)}if(r instanceof EventTarget)return r;try{return structuredClone(r)}catch{return r}}function Dv(r){let e=r.p;for(;e!==null&&e.c===null;)e=e.p;return e?.c??null}function ad(r,e){return r===null&&sd(),r.c??=new Map(Dv(r)||void 0)}let zn=null;function Na(r){zn=r}function af(r){return ad(zn).get(r)}function of(r,e){return ad(zn).set(r,e),e}function lf(r){return ad(zn).has(r)}function ct(r,e=!1,n){zn={p:zn,i:!1,c:null,e:null,s:r,x:null,r:Kt,l:null}}function ut(r){var e=zn,n=e.e;if(n!==null){e.e=null;for(var s of n)Rf(s)}return r!==void 0&&(e.x=r),e.i=!0,zn=e.p,id(r)}function id(r={}){return Yu(r,Zu,{value:!0}),r}function df(){return!0}let ia=[];function cf(){var r=ia;ia=[],Qm(r)}function Is(r){if(ia.length===0&&!di){var e=ia;queueMicrotask(()=>{e===ia&&cf()})}ia.push(r)}function Iv(){for(;ia.length>0;)cf()}const Nv=-7169;function Fn(r,e){r.f=r.f&Nv|e}function od(r){(r.f&Zr)!==0||r.deps===null?Fn(r,qn):Fn(r,ls)}function uf(r){if(r!==null)for(const e of r)(e.f&rr)===0||(e.f&ma)===0||(e.f^=ma,uf(e.deps))}function ff(r,e,n){(r.f&Vn)!==0?e.add(r):(r.f&ls)!==0&&n.add(r),uf(r.deps),Fn(r,qn)}let Oi=!1;function Cv(r){var e=Oi;try{return Oi=!1,[r(),Oi]}finally{Oi=e}}let tc=!1;function Pv(){tc||(tc=!0,document.addEventListener("reset",r=>{Promise.resolve().then(()=>{if(!r.defaultPrevented)for(const e of r.target.elements)e[Vi]?.()})},{capture:!0}))}function Ka(r){var e=$t,n=Kt;ts(null),ks(null);try{return r()}finally{ts(e),ks(n)}}function ld(r,e,n,s=n){r.addEventListener(e,()=>Ka(n));const a=r[Vi];a?r[Vi]=()=>{a(),s(!0)}:r[Vi]=()=>s(!0),Pv()}function Mv(r,e,n,s){const a=fi;var i=r.filter(E=>!E.settled),o=e.map(a);if(n.length===0&&i.length===0){s(o);return}var l=Kt,f=Ov(),p=i.length===1?i[0].promise:i.length>1?Promise.all(i.map(E=>E.promise)):null;function _(E){if((l.f&Nr)===0){f();try{s([...o,...E])}catch(b){_s(b,l)}io()}}var g=hf();if(n.length===0){p.then(()=>_([])).finally(g);return}function k(){Promise.all(n.map(E=>Lv(E))).then(_).catch(E=>_s(E,l)).finally(g)}p?p.then(()=>{f(),k(),io()}):k()}function Ov(){var r=Kt,e=$t,n=zn,s=Ct;return function(i=!0){ks(r),ts(e),Na(n),i&&(r.f&Nr)===0&&(s?.activate(),s?.apply())}}function io(r=!0){ks(null),ts(null),Na(null),r&&Ct?.deactivate()}function hf(){var r=Kt,e=r.b,n=Ct,s=!!e?.is_rendered();return e?.update_pending_count(1,n),n.increment(s,r),()=>{e?.update_pending_count(-1,n),n.decrement(s,r)}}function fi(r){var e=rr|Vn;return Kt!==null&&(Kt.f|=Wa),{ctx:zn,deps:null,effects:null,equals:nf,f:e,fn:r,reactions:null,rv:0,v:Yn,wv:0,parent:Kt,ac:null}}const ai=Symbol("obsolete");function Lv(r,e,n){let s=Kt;s===null&&pv();var a=void 0,i=Xs(Yn),o=!$t,l=new Set;return Qv(()=>{var f=Kt,p=Xu();a=p.promise;try{Promise.resolve(r()).then(p.resolve,E=>{E!==ki&&p.reject(E)}).finally(io)}catch(E){p.reject(E),io()}var _=Ct;if(o){if((f.f&ja)!==0)var g=hf();if(s.b?.is_rendered())_.async_deriveds.get(f)?.reject(ai);else for(const E of l.values())E.reject(ai);l.add(p),_.async_deriveds.set(f,p)}const k=(E,b=void 0)=>{g?.(),l.delete(p),b!==ai&&(_.activate(),b?(i.f|=Ys,Ca(i,b)):((i.f&Ys)!==0&&(i.f^=Ys),Ca(i,E)),_.deactivate())};p.promise.then(k,E=>k(null,E||"unknown"))}),hd(()=>{for(const f of l)f.reject(ai)}),new Promise(f=>{function p(_){function g(){_===a?f(i):p(a)}_.then(g,g)}p(a)})}function c(r){const e=fi(r);return Cf(e),e}function mf(r){const e=fi(r);return e.equals=sf,e}function Fv(r){var e=r.effects;if(e!==null){r.effects=null;for(var n=0;n<e.length;n+=1)Cr(e[n])}}function dd(r){var e,n=Kt,s=r.parent;if(!Ls&&s!==null&&r.v!==Yn&&(s.f&(Nr|wr))!==0)return hv(),r.v;ks(s);try{r.f&=~ma,Fv(r),e=Lf(r)}finally{ks(n)}return e}function vf(r){var e=dd(r);if(!r.equals(e)&&(r.wv=Mf(),(!Ct?.is_fork||r.deps===null)&&(Ct!==null?(Ct.capture(r,e,!0),bl?.capture(r,e,!0)):r.v=e,r.deps===null))){Fn(r,qn);return}Ls||(is!==null?(fd()||Ct?.is_fork)&&is.set(r,e):od(r))}function Gv(r){if(r.effects!==null)for(const e of r.effects)(e.teardown||e.ac)&&(e.teardown?.(),e.ac!==null&&Ka(()=>{e.ac.abort(ki),e.ac=null}),e.fn!==null&&(e.teardown=Hn),hi(e,0),md(e))}function pf(r){if(r.effects!==null)for(const e of r.effects)e.teardown&&e.fn!==null&&Pa(e)}let Go=null,Ea=null,Ct=null,bl=null,is=null,_l=null,di=!1,Uo=!1,Sa=null,Wi=null;var nc=0;let Uv=1;class $s{id=Uv++;#e=!1;linked=!0;#n=null;#t=null;async_deriveds=new Map;current=new Map;previous=new Map;#s=new Set;#a=new Set;#r=0;#i=new Map;#l=null;#o=[];#d=[];#c=new Set;#u=new Set;#f=new Map;#h=new Set;is_fork=!1;#m=!1;constructor(){Ea===null?Go=Ea=this:(Ea.#t=this,this.#n=Ea),Ea=this}#v(){if(this.is_fork)return!0;for(const s of this.#i.keys()){for(var e=s,n=!1;e.parent!==null;){if(this.#f.has(e)){n=!0;break}e=e.parent}if(!n)return!0}return!1}skip_effect(e){this.#f.has(e)||this.#f.set(e,{d:[],m:[]}),this.#h.delete(e)}unskip_effect(e,n=s=>this.schedule(s)){var s=this.#f.get(e);if(s){this.#f.delete(e);for(var a of s.d)Fn(a,Vn),n(a);for(a of s.m)Fn(a,ls),n(a)}this.#h.add(e)}#_(){this.#e=!0,nc++>1e3&&(this.#y(),Hv());for(const f of this.#c)this.#u.delete(f),Fn(f,Vn),this.schedule(f);for(const f of this.#u)Fn(f,ls),this.schedule(f);const e=this.#o;this.#o=[],this.apply();var n=Sa=[],s=[],a=Wi=[];for(const f of e)try{this.#p(f,n,s)}catch(p){throw _f(f),this.#v()||this.discard(),p}if(Ct=null,a.length>0){var i=$s.ensure();for(const f of a)i.schedule(f)}if(Sa=null,Wi=null,this.#v()){this.#g(s),this.#g(n);for(const[f,p]of this.#f)bf(f,p);a.length>0&&Ct.#_();return}const o=this.#b();if(o){this.#g(s),this.#g(n),o.#E(this);return}this.#c.clear(),this.#u.clear();for(const f of this.#s)f(this);this.#s.clear(),bl=this,rc(s),rc(n),bl=null,this.#l?.resolve();var l=Ct;if(this.#r===0&&(this.#o.length===0||l!==null)&&this.#y(),this.#o.length>0)if(l!==null){const f=l;f.#o.push(...this.#o.filter(p=>!f.#o.includes(p)))}else l=this;l!==null&&(ys.clear(),l.#_())}#p(e,n,s){e.f^=qn;for(var a=e.first;a!==null;){var i=a.f,o=(i&(es|Os))!==0,l=o&&(i&qn)!==0,f=l||(i&wr)!==0||this.#f.has(a);if(!f&&a.fn!==null){o?a.f^=qn:(i&Ia)!==0?n.push(a):xi(a)&&((i&as)!==0&&this.#u.add(a),Pa(a));var p=a.first;if(p!==null){a=p;continue}}for(;a!==null;){var _=a.next;if(_!==null){a=_;break}a=a.parent}}}#b(){for(var e=this.#n;e!==null;){if(!e.is_fork){for(const[n,[,s]]of this.current)if(e.current.has(n)&&!s)return e}e=e.#n}return null}#E(e){for(const[s,a]of e.current)!this.previous.has(s)&&e.previous.has(s)&&this.previous.set(s,e.previous.get(s)),this.current.set(s,a);for(const[s,a]of e.async_deriveds){const i=this.async_deriveds.get(s);i&&a.promise.then(i.resolve).catch(i.reject)}e.async_deriveds.clear(),this.transfer_effects(e.#c,e.#u);const n=s=>{var a=s.reactions;if(a!==null&&!((s.f&rr)!==0&&(s.f&(Vn|ls))===0))for(const l of a){var i=l.f;if((i&rr)!==0)n(l);else{var o=l;i&(Ta|as)&&!this.async_deriveds.has(o)&&(this.#u.delete(o),Fn(o,Vn),this.schedule(o))}}};for(const s of this.current.keys())n(s);this.oncommit(()=>e.discard()),e.#y(),Ct=this,this.#_()}#g(e){for(var n=0;n<e.length;n+=1)ff(e[n],this.#c,this.#u)}capture(e,n,s=!1){e.v!==Yn&&!this.previous.has(e)&&this.previous.set(e,e.v),(e.f&Ys)===0&&(this.current.set(e,[n,s]),is?.set(e,n)),this.is_fork||(e.v=n)}activate(){Ct=this}deactivate(){Ct=null,is=null}flush(){try{Uo=!0,Ct=this,this.#_()}finally{nc=0,_l=null,Sa=null,Wi=null,Uo=!1,Ct=null,is=null,ys.clear()}}discard(){for(const e of this.#a)e(this);this.#a.clear();for(const e of this.async_deriveds.values())e.reject(ai);this.#y(),this.#l?.resolve()}register_created_effect(e){this.#d.push(e)}#S(){for(let g=Go;g!==null;g=g.#t){var e=g.id<this.id,n=[];for(const[k,[E,b]]of this.current){if(g.current.has(k)){var s=g.current.get(k)[0];if(e&&E!==s)g.current.set(k,[E,b]);else continue}n.push(k)}if(e)for(const[k,E]of this.async_deriveds){const b=g.async_deriveds.get(k);b&&E.promise.then(b.resolve).catch(b.reject)}var a=[...g.current.keys()].filter(k=>!g.current.get(k)[1]);if(!(!g.#e||a.length===0)){var i=a.filter(k=>!this.current.has(k));if(i.length===0)e&&g.discard();else if(n.length>0){if(e)for(const k of this.#h)g.unskip_effect(k,E=>{(E.f&(as|Ta))!==0?g.schedule(E):g.#g([E])});g.activate();var o=new Set,l=new Map;for(var f of n)gf(f,i,o,l);l=new Map;var p=[...g.current].filter(([k,E])=>{const b=this.current.get(k);return b?b[0]!==E[0]||b[1]!==E[1]:!0}).map(([k])=>k);if(p.length>0)for(const k of this.#d)(k.f&(Nr|wr|so))===0&&cd(k,p,l)&&((k.f&(Ta|as))!==0?(Fn(k,Vn),g.schedule(k)):g.#c.add(k));if(g.#o.length>0&&!g.#m){g.apply();for(var _ of g.#o)g.#p(_,[],[]);g.#o=[]}g.deactivate()}}}}increment(e,n){if(this.#r+=1,e){let s=this.#i.get(n)??0;this.#i.set(n,s+1)}}decrement(e,n){if(this.#r-=1,e){let s=this.#i.get(n)??0;s===1?this.#i.delete(n):this.#i.set(n,s-1)}this.#m||(this.#m=!0,Is(()=>{this.#m=!1,this.linked&&this.flush()}))}transfer_effects(e,n){for(const s of e)this.#c.add(s);for(const s of n)this.#u.add(s);e.clear(),n.clear()}oncommit(e){this.#s.add(e)}ondiscard(e){this.#a.add(e)}settled(){return(this.#l??=Xu()).promise}static ensure(){if(Ct===null){const e=Ct=new $s;!Uo&&!di&&Is(()=>{e.#e||e.flush()})}return Ct}apply(){{is=null;return}}schedule(e){if(_l=e,e.b?.is_pending&&(e.f&(Ia|yo|Qu))!==0&&(e.f&ja)===0){e.b.defer_effect(e);return}for(var n=e;n.parent!==null;){n=n.parent;var s=n.f;if(Sa!==null&&n===Kt&&($t===null||($t.f&rr)===0))return;if((s&(Os|es))!==0){if((s&qn)===0)return;n.f^=qn}}this.#o.push(n)}#y(){if(this.linked){var e=this.#n,n=this.#t;e===null?Go=n:e.#t=n,n===null?Ea=e:n.#n=e,this.linked=!1}}}function Bv(r){var e=di;di=!0;try{for(var n;;){if(Iv(),Ct===null)return n;Ct.flush()}}finally{di=e}}function Hv(){try{yv()}catch(r){_s(r,_l)}}let xs=null;function rc(r){var e=r.length;if(e!==0){for(var n=0;n<e;){var s=r[n++];if((s.f&(Nr|wr))===0&&xi(s)&&(xs=new Set,Pa(s),s.deps===null&&s.first===null&&s.nodes===null&&s.teardown===null&&s.ac===null&&Df(s),xs?.size>0)){ys.clear();for(const a of xs){if((a.f&(Nr|wr))!==0)continue;const i=[a];let o=a.parent;for(;o!==null;)xs.has(o)&&(xs.delete(o),i.push(o)),o=o.parent;for(let l=i.length-1;l>=0;l--){const f=i[l];(f.f&(Nr|wr))===0&&Pa(f)}}xs.clear()}}xs=null}}function gf(r,e,n,s){if(!n.has(r)&&(n.add(r),r.reactions!==null))for(const a of r.reactions){const i=a.f;(i&rr)!==0?gf(a,e,n,s):(i&(Ta|as))!==0&&(i&Vn)===0&&cd(a,e,s)&&(Fn(a,Vn),ud(a))}}function cd(r,e,n){const s=n.get(r);if(s!==void 0)return s;if(r.deps!==null)for(const a of r.deps){if(no.call(e,a))return!0;if((a.f&rr)!==0&&cd(a,e,n))return n.set(a,!0),!0}return n.set(r,!1),!1}function ud(r){Ct.schedule(r)}function bf(r,e){if(!((r.f&es)!==0&&(r.f&qn)!==0)){(r.f&Vn)!==0?e.d.push(r):(r.f&ls)!==0&&e.m.push(r),Fn(r,qn);for(var n=r.first;n!==null;)bf(n,e),n=n.next}}function _f(r){Fn(r,qn);for(var e=r.first;e!==null;)_f(e),e=e.next}let oo=new Set;const ys=new Map;let Ef=!1;function Xs(r,e){var n={f:0,v:r,reactions:null,equals:nf,rv:0,wv:0};return n}function C(r,e){const n=Xs(r);return Cf(n),n}function Vv(r,e=!1,n=!0){const s=Xs(r);return e||(s.equals=sf),s}function u(r,e,n=!1){$t!==null&&(!os||($t.f&so)!==0)&&df()&&($t.f&(rr|as|Ta|so))!==0&&(Ss===null||!Ss.has(r))&&Av();let s=n?We(e):e;return Ca(r,s,Wi)}function Ca(r,e,n=null){if(!r.equals(e)){Ls?ys.set(r,e):ys.has(r)||ys.set(r,r.v);var s=$s.ensure();if(s.capture(r,e),(r.f&rr)!==0){const a=r;(r.f&Vn)!==0&&dd(a),is===null&&od(a)}r.wv=Mf(),yf(r,Vn,n),Kt!==null&&(Kt.f&qn)!==0&&(Kt.f&(es|Os))===0&&($r===null?ep([r]):$r.push(r)),!s.is_fork&&oo.size>0&&!Ef&&zv()}return e}function zv(){Ef=!1;for(const r of oo){(r.f&qn)!==0&&Fn(r,ls);let e;try{e=xi(r)}catch{e=!0}e&&Pa(r)}oo.clear()}function gs(r){u(r,r.v+1)}function yf(r,e,n){var s=r.reactions;if(s!==null)for(var a=s.length,i=0;i<a;i++){var o=s[i],l=o.f,f=(l&Vn)===0;if(f&&Fn(o,e),(l&so)!==0)oo.add(o);else if((l&rr)!==0){var p=o;is?.delete(p),(l&ma)===0&&(l&Zr&&(Kt===null||(Kt.f&ao)===0)&&(o.f|=ma),yf(p,ls,n))}else if(f){var _=o;(l&as)!==0&&xs!==null&&xs.add(_),n!==null?n.push(_):ud(_)}}}function We(r){if(typeof r!="object"||r===null||Ns in r||Zu in r)return r;const e=Eo(r);if(e!==$u&&e!==Xm)return r;var n=new Map,s=wi(r),a=C(0),i=Ps,o=l=>{if(Ps===i)return l();var f=$t,p=Ps;ts(null),ic(i);var _=l();return ts(f),ic(p),_};return s&&n.set("length",C(r.length)),new Proxy(r,{defineProperty(l,f,p){(!("value"in p)||p.configurable===!1||p.enumerable===!1||p.writable===!1)&&wv();var _=n.get(f);return _===void 0?o(()=>{var g=C(p.value);return n.set(f,g),g}):u(_,p.value,!0),!0},deleteProperty(l,f){var p=n.get(f);if(p===void 0){if(f in l){const _=o(()=>C(Yn));n.set(f,_),gs(a)}}else u(p,Yn),gs(a);return!0},get(l,f,p){if(f===Ns)return r;var _=n.get(f),g=f in l;if(_===void 0&&(!g||Aa(l,f)?.writable)&&(_=o(()=>{var E=We(g?l[f]:Yn),b=C(E);return b}),n.set(f,_)),_!==void 0){var k=t(_);return k===Yn?void 0:k}return Reflect.get(l,f,p)},getOwnPropertyDescriptor(l,f){var p=Reflect.getOwnPropertyDescriptor(l,f);if(p&&"value"in p){var _=n.get(f);_&&(p.value=t(_))}else if(p===void 0){var g=n.get(f),k=g?.v;if(g!==void 0&&k!==Yn)return{enumerable:!0,configurable:!0,value:k,writable:!0}}return p},has(l,f){if(f===Ns)return!0;var p=n.get(f),_=p!==void 0&&p.v!==Yn||Reflect.has(l,f);if(p!==void 0||Kt!==null&&(!_||Aa(l,f)?.writable)){p===void 0&&(p=o(()=>{var k=_?We(l[f]):Yn,E=C(k);return E}),n.set(f,p));var g=t(p);if(g===Yn)return!1}return _},set(l,f,p,_){var g=n.get(f),k=f in l;if(s&&f==="length")for(var E=p;E<g.v;E+=1){var b=n.get(E+"");b!==void 0?u(b,Yn):E in l&&(b=o(()=>C(Yn)),n.set(E+"",b))}if(g===void 0)(!k||Aa(l,f)?.writable)&&(g=o(()=>C(void 0)),u(g,We(p)),n.set(f,g));else{k=g.v!==Yn;var w=o(()=>We(p));u(g,w)}var x=Reflect.getOwnPropertyDescriptor(l,f);if(x?.set&&x.set.call(_,p),!k){if(s&&typeof f=="string"){var D=n.get("length"),N=Number(f);Number.isInteger(N)&&N>=D.v&&u(D,N+1)}gs(a)}return!0},ownKeys(l){t(a);var f=Reflect.ownKeys(l).filter(g=>{var k=n.get(g);return k===void 0||k.v!==Yn});for(var[p,_]of n)_.v!==Yn&&!(p in l)&&f.push(p);return f},setPrototypeOf(){kv()}})}function sc(r){try{if(r!==null&&typeof r=="object"&&Ns in r)return r[Ns]}catch{}return r}function Sf(r,e){return Object.is(sc(r),sc(e))}var va,wf,kf,Af;function jv(){if(va===void 0){va=window,wf=/Firefox/.test(navigator.userAgent);var r=Element.prototype,e=Node.prototype,n=Text.prototype;kf=Aa(e,"firstChild").get,Af=Aa(e,"nextSibling").get,Jd(r)&&(r[vl]=void 0,r[Ju]=null,r[pl]=void 0,r.__e=void 0),Jd(n)&&(n[gl]=void 0)}}function Cs(r=""){return document.createTextNode(r)}function bs(r){return kf.call(r)}function Ai(r){return Af.call(r)}function A(r,e){return bs(r)}function Ne(r,e=!1){{var n=bs(r);return n instanceof Comment&&n.data===""?Ai(n):n}}function m(r,e=!1){return bs(r)}function d(r,e=1,n=!1){let s=r;for(;e--;)s=Ai(s);return s}function Wv(r){r.textContent=""}function Tf(){return!1}function Kv(r,e,n){return n?document.createElement(r,{is:n}):document.createElement(r)}function Yv(r){var e=Kt;if(e===null)return $t.f|=Ys,r;if((e.f&ja)===0&&(e.f&Ia)===0)throw r;_s(r,e)}function _s(r,e){if(!(e!==null&&(e.f&Nr)!==0)){for(;e!==null;){if((e.f&ml)!==0&&(e.f&(Nr|ro))===0){if((e.f&ja)===0)throw r;try{e.b.error(r);return}catch(n){r=n}}e=e.parent}throw r}}function qv(r){Kt===null&&($t===null&&Ev(),_v()),Ls&&bv()}function $v(r,e){var n=e.last;n===null?e.last=e.first=r:(n.next=r,r.prev=n,e.last=r)}function Gs(r,e){var n=Kt;n!==null&&(n.f&wr)!==0&&(r|=wr);var s={ctx:zn,deps:null,nodes:null,f:r|Vn|Zr,first:null,fn:e,last:null,next:null,parent:n,b:n&&n.b,prev:null,teardown:null,wv:0,ac:null};Ct?.register_created_effect(s);var a=s;if((r&Ia)!==0)Sa!==null?Sa.push(s):$s.ensure().schedule(s);else if(e!==null){try{Pa(s)}catch(o){throw Cr(s),o}a.deps===null&&a.teardown===null&&a.nodes===null&&a.first===a.last&&(a.f&Wa)===0&&(a=a.first,(r&as)!==0&&(r&ha)!==0&&a!==null&&(a.f|=ha))}if(a!==null&&(a.parent=n,n!==null&&$v(a,n),$t!==null&&($t.f&rr)!==0&&(r&Os)===0)){var i=$t;(i.effects??=[]).push(a)}return s}function fd(){return $t!==null&&!os}function hd(r){const e=Gs(yo,null);return Fn(e,qn),e.teardown=r,e}function ot(r){qv();var e=Kt.f,n=!$t&&(e&es)!==0&&zn!==null&&!zn.i;if(n){var s=zn;(s.e??=[]).push(r)}else return Rf(r)}function Rf(r){return Gs(Ia|Jm,r)}function Xv(r){$s.ensure();const e=Gs(Os|Wa,r);return(n={})=>new Promise(s=>{n.outro?da(e,()=>{Cr(e),s(void 0)}):(Cr(e),s(void 0))})}function So(r){return Gs(Ia,r)}function Qv(r){return Gs(Ta|Wa,r)}function Ti(r,e=0){return Gs(yo|e,r)}function S(r,e=[],n=[],s=[]){Mv(s,e,n,a=>{Gs(yo,()=>{r(...a.map(t))})})}function Ri(r,e=0){var n=Gs(as|e,r);return n}function Xr(r){return Gs(es|Wa,r)}function xf(r){var e=r.teardown;if(e!==null){const n=Ls,s=$t;ac(!0),ts(null);try{e.call(null)}catch(a){_s(a,r.parent)}finally{ac(n),ts(s)}}}function md(r,e=!1){var n=r.first;for(r.first=r.last=null;n!==null;){const a=n.ac;a!==null&&Ka(()=>{a.abort(ki)});var s=n.next;(n.f&Os)!==0?n.parent=null:Cr(n,e),n=s}}function Zv(r){for(var e=r.first;e!==null;){var n=e.next;(e.f&es)===0&&Cr(e),e=n}}function Cr(r,e=!0){var n=!1;(e||(r.f&Zm)!==0)&&r.nodes!==null&&r.nodes.end!==null&&(Jv(r.nodes.start,r.nodes.end),n=!0),r.f|=ro,md(r,e&&!n),hi(r,0);var s=r.nodes&&r.nodes.t;if(s!==null)for(const i of s)i.stop();xf(r),r.f^=ro,r.f|=Nr;var a=r.parent;a!==null&&a.first!==null&&Df(r),r.next=r.prev=r.teardown=r.ctx=r.deps=r.fn=r.nodes=r.ac=r.b=null}function Jv(r,e){for(;r!==null;){var n=r===e?null:Ai(r);r.remove(),r=n}}function Df(r){var e=r.parent,n=r.prev,s=r.next;n!==null&&(n.next=s),s!==null&&(s.prev=n),e!==null&&(e.first===r&&(e.first=s),e.last===r&&(e.last=n))}function da(r,e,n=!0){var s=[];r.f|=rd,If(r,s,!0);var a=()=>{n&&Cr(r),e&&e()},i=s.length;if(i>0){var o=()=>--i||a();for(var l of s)l.out(o)}else a()}function If(r,e,n){if((r.f&wr)===0){r.f^=wr;var s=r.nodes&&r.nodes.t;if(s!==null)for(const l of s)(l.is_global||n)&&e.push(l);for(var a=r.first;a!==null;){var i=a.next;if((a.f&Os)===0){var o=(a.f&ha)!==0||(a.f&es)!==0&&(r.f&as)!==0;If(a,e,o?n:!1)}a=i}}}function lo(r){r.f&=~rd,Nf(r,!0)}function Nf(r,e){if((r.f&rd)===0&&(r.f&wr)!==0){r.f^=wr,(r.f&qn)===0&&(Fn(r,Vn),$s.ensure().schedule(r));for(var n=r.first;n!==null;){var s=n.next,a=(n.f&ha)!==0||(n.f&es)!==0;Nf(n,a?e:!1),n=s}var i=r.nodes&&r.nodes.t;if(i!==null)for(const o of i)(o.is_global||e)&&o.in()}}function vd(r,e){if(r.nodes)for(var n=r.nodes.start,s=r.nodes.end;n!==null;){var a=n===s?null:Ai(n);e.append(n),n=a}}let Ki=!1,Ls=!1;function ac(r){Ls=r}let $t=null,os=!1;function ts(r){$t=r}let Kt=null;function ks(r){Kt=r}let Ss=null;function Cf(r){$t!==null&&(Ss??=new Set).add(r)}let Dr=null,Vr=0,$r=null;function ep(r){$r=r}let Pf=1,oa=0,Ps=oa;function ic(r){Ps=r}function Mf(){return++Pf}function xi(r){var e=r.f;if((e&Vn)!==0)return!0;if(e&rr&&(r.f&=~ma),(e&ls)!==0){for(var n=r.deps,s=n.length,a=0;a<s;a++){var i=n[a];if(xi(i)&&vf(i),i.wv>r.wv)return!0}(e&Zr)!==0&&is===null&&Fn(r,qn)}return!1}function Of(r,e,n=!0){var s=r.reactions;if(s!==null&&!(Ss!==null&&Ss.has(r)))for(var a=0;a<s.length;a++){var i=s[a];(i.f&rr)!==0?Of(i,e,!1):e===i&&(n?Fn(i,Vn):(i.f&qn)!==0&&Fn(i,ls),ud(i))}}function Lf(r){var e=Dr,n=Vr,s=$r,a=$t,i=Ss,o=zn,l=os,f=Ps,p=r.f;Dr=null,Vr=0,$r=null,$t=(p&(es|Os))===0?r:null,Ss=null,Na(r.ctx),os=!1,Ps=++oa,r.ac!==null&&(Ka(()=>{r.ac.abort(ki)}),r.ac=null);try{r.f|=ao;var _=r.fn,g=_();r.f|=ja;var k=oc(r);if(df()&&$r!==null&&!os&&k!==null&&(r.f&(rr|ls|Vn))===0)for(var E=0;E<$r.length;E++)Of($r[E],r);if(a!==null&&a!==r){if(oa++,a.deps!==null)for(let b=0;b<n;b+=1)a.deps[b].rv=oa;if(e!==null)for(const b of e)b.rv=oa;$r!==null&&(s===null?s=$r:s.push(...$r))}return(r.f&Ys)!==0&&(r.f^=Ys),g}catch(b){return oc(r),Yv(b)}finally{r.f^=ao,Dr=e,Vr=n,$r=s,$t=a,Ss=i,Na(o),os=l,Ps=f}}function oc(r){var e=r.deps,n=Ct?.is_fork;if(Dr!==null){var s;if(n||hi(r,Vr),e!==null&&Vr>0)for(e.length=Vr+Dr.length,s=0;s<Dr.length;s++)e[Vr+s]=Dr[s];else r.deps=e=Dr;if(fd()&&(r.f&Zr)!==0)for(s=Vr;s<e.length;s++)(e[s].reactions??=[]).push(r)}else!n&&e!==null&&Vr<e.length&&(hi(r,Vr),e.length=Vr);return e}function tp(r,e){let n=e.reactions;if(n!==null){var s=$m.call(n,r);if(s!==-1){var a=n.length-1;a===0?n=e.reactions=null:(n[s]=n[a],n.pop())}}if(n===null&&(e.f&rr)!==0&&(Dr===null||!no.call(Dr,e))){var i=e;(i.f&Zr)!==0&&(i.f^=Zr,i.f&=~ma),i.v!==Yn&&od(i),i.ac!==null&&Ka(()=>{i.ac.abort(ki),i.ac=null,Fn(i,Vn)}),Gv(i),hi(i,0)}}function hi(r,e){var n=r.deps;if(n!==null)for(var s=e;s<n.length;s++)tp(r,n[s])}function Pa(r){var e=r.f;if((e&Nr)===0){Fn(r,qn);var n=Kt,s=Ki;Kt=r,Ki=(e&(es|Os))===0;try{(e&(as|Qu))!==0?Zv(r):md(r),xf(r);var a=Lf(r);r.teardown=typeof a=="function"?a:null,r.wv=Pf;var i;Ku&&Rv&&(r.f&Vn)!==0&&r.deps}finally{Ki=s,Kt=n}}}async function Ma(){await Promise.resolve(),Bv()}function t(r){var e=r.f,n=(e&rr)!==0;if($t!==null&&!os){var s=Kt!==null&&(Kt.f&Nr)!==0;if(!s&&(Ss===null||!Ss.has(r))){var a=$t.deps;if(($t.f&ao)!==0)r.rv<oa&&(r.rv=oa,Dr===null&&a!==null&&a[Vr]===r?Vr++:Dr===null?Dr=[r]:Dr.push(r));else{$t.deps??=[],no.call($t.deps,r)||$t.deps.push(r);var i=r.reactions;i===null?r.reactions=[$t]:no.call(i,$t)||i.push($t)}}}if(Ls&&ys.has(r))return ys.get(r);if(n){var o=r;if(Ls){var l=o.v;return((o.f&qn)===0&&o.reactions!==null||Gf(o))&&(l=dd(o)),ys.set(o,l),l}var f=(o.f&Zr)===0&&!os&&$t!==null&&(Ki||($t.f&Zr)!==0),p=(o.f&ja)===0;xi(o)&&(f&&(o.f|=Zr),vf(o)),f&&!p&&(pf(o),Ff(o))}if(is?.has(r))return is.get(r);if((r.f&Ys)!==0)throw r.v;return r.v}function Ff(r){if(r.f|=Zr,r.deps!==null)for(const e of r.deps)(e.reactions??=[]).push(r),(e.f&rr)!==0&&(e.f&Zr)===0&&(pf(e),Ff(e))}function Gf(r){if(r.v===Yn)return!0;if(r.deps===null)return!1;for(const e of r.deps)if(ys.has(e)||(e.f&rr)!==0&&Gf(e))return!0;return!1}function sr(r){var e=os;try{return os=!0,r()}finally{os=e}}function np(r){if(!(typeof r!="object"||!r||r instanceof EventTarget)){if(Ns in r)El(r);else if(!Array.isArray(r))for(let e in r){const n=r[e];typeof n=="object"&&n&&Ns in n&&El(n)}}}function El(r,e=new Set){if(typeof r=="object"&&r!==null&&!(r instanceof EventTarget)&&!e.has(r)){e.add(r),r instanceof Date&&r.getTime();for(let s in r)try{El(r[s],e)}catch{}const n=Eo(r);if(n!==Object.prototype&&n!==Array.prototype&&n!==Map.prototype&&n!==Set.prototype&&n!==Date.prototype){const s=qu(n);for(let a in s){const i=s[a].get;if(i)try{i.call(r)}catch{}}}}}const rp=["touchstart","touchmove"];function sp(r){return rp.includes(r)}const ii=Symbol("events"),Uf=new Set,yl=new Set;function ap(r,e,n,s={}){function a(i){if(s.capture||Sl.call(e,i),!i.cancelBubble)return Ka(()=>n?.call(this,i))}return r.startsWith("pointer")||r.startsWith("touch")||r==="wheel"?Is(()=>{e.addEventListener(r,a,s)}):e.addEventListener(r,a,s),a}function Ir(r,e,n,s,a){var i={capture:s,passive:a},o=ap(r,e,n,i);(e===document.body||e===window||e===document||e instanceof HTMLMediaElement)&&hd(()=>{e.removeEventListener(r,o,i)})}function re(r,e,n){(e[ii]??={})[r]=n}function Et(r){for(var e=0;e<r.length;e++)Uf.add(r[e]);for(var n of yl)n(r)}let Bo=null,Ho=!1;function Sl(r){var e=this,n=e.ownerDocument,s=r.type,a=r.composedPath?.()||[],i=a[0]||r.target;Bo=r,Ho||(Ho=!0,setTimeout(()=>{Ho=!1,Bo=null}));var o=0,l=Bo===r&&r[ii];if(l){var f=a.indexOf(l);if(f!==-1&&(e===document||e===window)){r[ii]=e;return}var p=a.indexOf(e);if(p===-1)return;f<=p&&(o=f)}if(i=a[o]||r.target,i!==e){Yu(r,"currentTarget",{configurable:!0,get(){return i||n}});var _=$t,g=Kt;ts(null),ks(null);try{for(var k,E=[];i!==null&&i!==e;){try{var b=i[ii]?.[s];b!=null&&(!i.disabled||r.target===i)&&b.call(i,r)}catch(w){k?E.push(w):k=w}if(r.cancelBubble)break;o++,i=o<a.length?a[o]:null}if(k){for(let w of E)queueMicrotask(()=>{throw w});throw k}}finally{r[ii]=e,delete r.currentTarget,ts(_),ks(g)}}}const ip=globalThis?.window?.trustedTypes&&globalThis.window.trustedTypes.createPolicy("svelte-trusted-html",{createHTML:r=>r});function op(r){return ip?.createHTML(r)??r}function Bf(r){var e=Kv("template");return e.innerHTML=op(r.replaceAll("<!>","<!---->")),e.content}function Oa(r,e){var n=Kt;n.nodes===null&&(n.nodes={start:r,end:e,a:null,t:null})}function y(r,e){var n=(e&tf)!==0,s=(e&uv)!==0,a,i=!r.startsWith("<!>");return()=>{a===void 0&&(a=Bf(i?r:"<!>"+r),n||(a=bs(a)));var o=s||wf?document.importNode(a,!0):a.cloneNode(!0);if(n){var l=bs(o),f=o.lastChild;Oa(l,f)}else Oa(o,o);return o}}function lp(r,e,n="svg"){var s=!r.startsWith("<!>"),a=(e&tf)!==0,i=`<${n}>${s?r:"<!>"+r}</${n}>`,o;return()=>{if(!o){var l=Bf(i),f=bs(l);if(a)for(o=document.createDocumentFragment();bs(f);)o.appendChild(bs(f));else o=bs(f)}var p=o.cloneNode(!0);if(a){var _=bs(p),g=p.lastChild;Oa(_,g)}else Oa(p,p);return p}}function Mr(r,e){return lp(r,e,"svg")}function Cn(r=""){{var e=Cs(r+"");return Oa(e,e),e}}function St(){var r=document.createDocumentFragment(),e=document.createComment(""),n=Cs();return r.append(e,n),Oa(e,n),r}function v(r,e){r!==null&&r.before(e)}function dp(r){let e=0,n=Xs(0),s;return()=>{fd()&&(t(n),Ti(()=>(e===0&&(s=sr(()=>r(()=>gs(n)))),e+=1,()=>{Is(()=>{e-=1,e===0&&(s?.(),s=void 0,gs(n))})})))}}var cp=ha|Wa;function Hf(r,e,n,s){new up(r,e,n,s)}class up{parent;is_pending=!1;transform_error;#e;#n=null;#t;#s;#a;#r=null;#i=null;#l=null;#o=null;#d=0;#c=0;#u=!1;#f=new Set;#h=new Set;#m=null;#v=dp(()=>(this.#m=Xs(this.#d),()=>{this.#m=null}));constructor(e,n,s,a){this.#e=e,this.#t=n,this.#s=i=>{var o=Kt;o.b=this,o.f|=ml,s(i)},this.parent=Kt.b,this.transform_error=a??this.parent?.transform_error??(i=>i),this.#a=Ri(()=>{this.#g()},cp)}#_(){try{this.#r=Xr(()=>this.#s(this.#e))}catch(e){this.error(e)}}#p(e){const n=this.#t.failed,{reset:s,invoke_onerror:a}=this.#b(e);Is(a),n&&(this.#l=Xr(()=>{n(this.#e,()=>e,()=>s)}))}#b(e){var n=!1,s=!1;const a=()=>{if(n){vv();return}n=!0,s&&Tv(),this.#l!==null&&da(this.#l,()=>{this.#l=null}),this.#y(()=>{this.#g()})};return{reset:a,invoke_onerror:()=>{try{s=!0,this.#t.onerror?.(e,a),s=!1}catch(o){_s(o,this.#a&&this.#a.parent)}}}}#E(){const e=this.#t.pending;e&&(this.is_pending=!0,this.#i=Xr(()=>e(this.#e)),Is(()=>{var n=this.#o=document.createDocumentFragment(),s=Cs(),a=!1;if(n.append(s),this.#r=this.#y(()=>{try{return Xr(()=>this.#s(s))}catch(i){try{this.error(i),a=!0}catch(o){_s(o,this.#a.parent)}return null}}),this.#r===null){this.#o=null,a&&this.#S(Ct);return}this.#c===0&&(this.#e.before(n),this.#o=null,da(this.#i,()=>{this.#i=null}),this.#S(Ct))}))}#g(){try{if(this.is_pending=this.has_pending_snippet(),this.#c=0,this.#d=0,this.#r=Xr(()=>{this.#s(this.#e)}),this.#c>0){var e=this.#o=document.createDocumentFragment();vd(this.#r,e);const n=this.#t.pending;this.#i=Xr(()=>n(this.#e))}else this.#S(Ct)}catch(n){this.error(n)}}#S(e){this.is_pending=!1,e.transfer_effects(this.#f,this.#h)}defer_effect(e){ff(e,this.#f,this.#h)}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!this.#t.pending}#y(e){var n=Kt,s=$t,a=zn;ks(this.#a),ts(this.#a),Na(this.#a.ctx);try{return $s.ensure(),e()}finally{ks(n),ts(s),Na(a)}}#w(e,n){if(!this.has_pending_snippet()){this.parent&&this.parent.#w(e,n);return}this.#c+=e,this.#c===0&&(this.#S(n),this.#i&&da(this.#i,()=>{this.#i=null}),this.#o&&(this.#e.before(this.#o),this.#o=null))}update_pending_count(e,n){this.#w(e,n),this.#d+=e,!(!this.#m||this.#u)&&(this.#u=!0,Is(()=>{this.#u=!1,this.#m&&Ca(this.#m,this.#d)}))}get_effect_pending(){return this.#v(),t(this.#m)}error(e){if(!this.#t.onerror&&!this.#t.failed)throw e;Ct?.is_fork?(this.#r&&Ct.skip_effect(this.#r),this.#i&&Ct.skip_effect(this.#i),this.#l&&Ct.skip_effect(this.#l),Ct.oncommit(()=>{this.#k(e)})):this.#k(e)}#k(e){this.#r&&(Cr(this.#r),this.#r=null),this.#i&&(Cr(this.#i),this.#i=null),this.#l&&(Cr(this.#l),this.#l=null);let n=this.#t.failed;const s=a=>{const{reset:i,invoke_onerror:o}=this.#b(a);o(),n&&(this.#l=this.#y(()=>{try{return Xr(()=>{var l=Kt;l.b=this,l.f|=ml,n(this.#e,()=>a,()=>i)})}catch(l){return _s(l,this.#a.parent),null}}))};Is(()=>{var a;try{a=this.transform_error(e)}catch(i){_s(i,this.#a&&this.#a.parent);return}a!==null&&typeof a=="object"&&typeof a.then=="function"?a.then(s,i=>_s(i,this.#a&&this.#a.parent)):s(a)})}}function h(r,e){var n=e==null?"":typeof e=="object"?`${e}`:e;n!==(r[gl]??=r.nodeValue)&&(r[gl]=n,r.nodeValue=`${n}`)}function fp(r,e){return hp(r,e)}const Li=new Map;function hp(r,{target:e,anchor:n,props:s={},events:a,context:i,intro:o=!0,transformError:l}){jv();var f=void 0,p=Xv(()=>{var _=n??e.appendChild(Cs());Hf(_,{pending:()=>{}},E=>{ct({});var b=zn;i&&(b.c=i),a&&(s.$$events=a),f=r(E,s)||id(),ut()},l);var g=new Set,k=E=>{for(var b=0;b<E.length;b++){var w=E[b];if(!g.has(w)){g.add(w);var x=sp(w);for(const R of[e,document]){var D=Li.get(R);D===void 0&&(D=new Map,Li.set(R,D));var N=D.get(w);N===void 0?(R.addEventListener(w,Sl,{passive:x}),D.set(w,1)):D.set(w,N+1)}}}};return k(_o(Uf)),yl.add(k),()=>{for(var E of g)for(const x of[e,document]){var b=Li.get(x),w=b.get(E);--w==0?(x.removeEventListener(E,Sl),b.delete(E),b.size===0&&Li.delete(x)):b.set(E,w)}yl.delete(k),_!==n&&_.parentNode?.removeChild(_)}});return mp.set(f,p),f}let mp=new WeakMap;class pd{anchor;#e=new Map;#n=new Map;#t=new Map;#s=new Set;#a=!0;constructor(e,n=!0){this.anchor=e,this.#a=n}#r=e=>{if(this.#e.has(e)){var n=this.#e.get(e),s=this.#n.get(n);if(s)lo(s),this.#s.delete(n);else{var a=this.#t.get(n);a&&(lo(a.effect),this.#n.set(n,a.effect),this.#t.delete(n),a.fragment.lastChild.remove(),this.anchor.before(a.fragment),s=a.effect)}for(const[i,o]of this.#e){if(this.#e.delete(i),i===e)break;const l=this.#t.get(o);l&&(Cr(l.effect),this.#t.delete(o))}for(const[i,o]of this.#n){if(i===n||this.#s.has(i))continue;const l=()=>{if(Array.from(this.#e.values()).includes(i)){var p=document.createDocumentFragment();vd(o,p),p.append(Cs()),this.#t.set(i,{effect:o,fragment:p})}else Cr(o);this.#s.delete(i),this.#n.delete(i)};this.#a||!s?(this.#s.add(i),da(o,l,!1)):l()}}};#i=e=>{this.#e.delete(e);const n=Array.from(this.#e.values());for(const[s,a]of this.#t)n.includes(s)||(Cr(a.effect),this.#t.delete(s))};ensure(e,n){var s=Ct,a=Tf();if(n&&!this.#n.has(e)&&!this.#t.has(e))if(a){var i=document.createDocumentFragment(),o=Cs();i.append(o),this.#t.set(e,{effect:Xr(()=>n(o)),fragment:i})}else this.#n.set(e,Xr(()=>n(this.anchor)));if(this.#e.set(s,e),a){for(const[l,f]of this.#n)l===e?s.unskip_effect(f):s.skip_effect(f);for(const[l,f]of this.#t)l===e?s.unskip_effect(f.effect):s.skip_effect(f.effect);s.oncommit(this.#r),s.ondiscard(this.#i)}else this.#r(s)}}function W(r,e,n=!1){var s=new pd(r),a=n?ha:0;function i(o,l){s.ensure(o,l)}Ri(()=>{var o=!1;e((l,f=0)=>{o=!0,i(f,l)}),o||i(-1,null)},a)}const vp=Symbol("NaN");function pp(r,e,n){var s=new pd(r);Ri(()=>{var a=e();a!==a&&(a=vp),s.ensure(a,n)})}function co(r,e){return e}function gp(r,e,n){for(var s=[],a=e.length,i,o=e.length,l=0;l<a;l++){let g=e[l];da(g,()=>{if(i){if(i.pending.delete(g),i.done.add(g),i.pending.size===0){var k=r.outrogroups;wl(r,_o(i.done)),k.delete(i),k.size===0&&(r.outrogroups=null)}}else o-=1},!1)}if(o===0){var f=s.length===0&&n!==null&&r.pending.size===0;if(f){var p=n,_=p.parentNode;Wv(_),_.append(p),r.items.clear()}wl(r,e,!f)}else i={pending:new Set(e),done:new Set},(r.outrogroups??=new Set).add(i)}function wl(r,e,n=!0){var s;if(r.pending.size>0){s=new Set;for(const o of r.pending.values())for(const l of o)s.add(r.items.get(l).e)}for(var a=0;a<e.length;a++){var i=e[a];if(s?.has(i)){i.f|=Es;const o=document.createDocumentFragment();vd(i,o)}else Cr(e[a],n)}}var lc;function Xe(r,e,n,s,a,i=null){var o=r,l=new Map,f=(e&ef)!==0;if(f){var p=r;o=p.appendChild(Cs())}var _=null,g=mf(()=>{var R=n();return wi(R)?R:R==null?[]:_o(R)}),k,E=new Map,b=!0;function w(R){(N.effect.f&Nr)===0&&(N.pending.delete(R),N.fallback=_,bp(N,k,o,e,s),_!==null&&(k.length===0?(_.f&Es)===0?lo(_):(_.f^=Es,oi(_,null,o)):da(_,()=>{_=null})))}function x(R){N.pending.delete(R)}var D=Ri(()=>{k=t(g);for(var R=k.length,M=new Set,z=Ct,$=Tf(),le=0;le<R;le+=1){var fe=k[le],de=s(fe,le),B=b?null:l.get(de);B?(B.v&&Ca(B.v,fe),B.i&&Ca(B.i,le),$&&z.unskip_effect(B.e)):(B=_p(l,b?o:lc??=Cs(),fe,de,le,a,e,n),b||(B.e.f|=Es),l.set(de,B)),M.add(de)}if(R===0&&i&&!_&&(b?_=Xr(()=>i(o)):(_=Xr(()=>i(lc??=Cs())),_.f|=Es)),R>M.size&&gv(),!b)if(E.set(z,M),$){for(const[oe,K]of l)M.has(oe)||z.skip_effect(K.e);z.oncommit(w),z.ondiscard(x)}else w(z);t(g)}),N={effect:D,items:l,pending:E,outrogroups:null,fallback:_};b=!1}function Ja(r){for(;r!==null&&(r.f&es)===0;)r=r.next;return r}function bp(r,e,n,s,a){var i=(s&av)!==0,o=e.length,l=r.items,f=Ja(r.effect.first),p,_=null,g,k=[],E=[],b,w,x,D;if(i)for(D=0;D<o;D+=1)b=e[D],w=a(b,D),x=l.get(w).e,(x.f&Es)===0&&(x.nodes?.a?.measure(),(g??=new Set).add(x));for(D=0;D<o;D+=1){if(b=e[D],w=a(b,D),x=l.get(w).e,r.outrogroups!==null)for(const B of r.outrogroups)B.pending.delete(x),B.done.delete(x);if((x.f&wr)!==0&&(lo(x),i&&(x.nodes?.a?.unfix(),(g??=new Set).delete(x))),(x.f&Es)!==0)if(x.f^=Es,x===f)oi(x,null,n);else{var N=_?_.next:f;x===r.effect.last&&(r.effect.last=x.prev),x.prev&&(x.prev.next=x.next),x.next&&(x.next.prev=x.prev),zs(r,_,x),zs(r,x,N),oi(x,N,n),_=x,k=[],E=[],f=Ja(_.next);continue}if(x!==f){if(p!==void 0&&p.has(x)){if(k.length<E.length){var R=E[0],M;_=R.prev;var z=k[0],$=k[k.length-1];for(M=0;M<k.length;M+=1)oi(k[M],R,n);for(M=0;M<E.length;M+=1)p.delete(E[M]);zs(r,z.prev,$.next),zs(r,_,z),zs(r,$,R),f=R,_=$,D-=1,k=[],E=[]}else p.delete(x),oi(x,f,n),zs(r,x.prev,x.next),zs(r,x,_===null?r.effect.first:_.next),zs(r,_,x),_=x;continue}for(k=[],E=[];f!==null&&f!==x;)(p??=new Set).add(f),E.push(f),f=Ja(f.next);if(f===null)continue}(x.f&Es)===0&&k.push(x),_=x,f=Ja(x.next)}if(r.outrogroups!==null){for(const B of r.outrogroups)B.pending.size===0&&(wl(r,_o(B.done)),r.outrogroups?.delete(B));r.outrogroups.size===0&&(r.outrogroups=null)}if(f!==null||p!==void 0){var le=[];if(p!==void 0)for(x of p)(x.f&wr)===0&&le.push(x);for(;f!==null;)(f.f&wr)===0&&f!==r.fallback&&le.push(f),f=Ja(f.next);var fe=le.length;if(fe>0){var de=(s&ef)!==0&&o===0?n:null;if(i){for(D=0;D<fe;D+=1)le[D].nodes?.a?.measure();for(D=0;D<fe;D+=1)le[D].nodes?.a?.fix()}gp(r,le,de)}}i&&Is(()=>{if(g!==void 0)for(x of g)x.nodes?.a?.apply()})}function _p(r,e,n,s,a,i,o,l){var f=(o&rv)!==0?(o&iv)===0?Vv(n,!1,!1):Xs(n):null,p=(o&sv)!==0?Xs(a):null;return{v:f,i:p,e:Xr(()=>(i(e,f??n,p??a,l),()=>{r.delete(s)}))}}function oi(r,e,n){if(r.nodes)for(var s=r.nodes.start,a=r.nodes.end,i=e&&(e.f&Es)===0?e.nodes.start:n;s!==null;){var o=Ai(s);if(i.before(s),s===a)return;s=o}}function zs(r,e,n){e===null?r.effect.first=n:e.next=n,n===null?r.effect.last=e:n.prev=e}function qs(r,e,...n){var s=new pd(r);Ri(()=>{const a=e()??null;s.ensure(a,a&&(i=>a(i,...n)))},ha)}function Vf(r,e,n){So(()=>{var s=sr(()=>e(r,n?.())||{});if(n&&s?.update){var a=!1,i={};Ti(()=>{var o=n();np(o),a&&rf(i,o)&&(i=o,s.update(o))}),a=!0}if(s?.destroy)return()=>s.destroy()})}function zf(r){var e,n,s="";if(typeof r=="string"||typeof r=="number")s+=r;else if(typeof r=="object")if(Array.isArray(r)){var a=r.length;for(e=0;e<a;e++)r[e]&&(n=zf(r[e]))&&(s&&(s+=" "),s+=n)}else for(n in r)r[n]&&(s&&(s+=" "),s+=n);return s}function Ep(){for(var r,e,n=0,s="",a=arguments.length;n<a;n++)(r=arguments[n])&&(e=zf(r))&&(s&&(s+=" "),s+=e);return s}function yp(r){return typeof r=="object"?Ep(r):r??""}const dc=[...`
1
+ (function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))s(a);new MutationObserver(a=>{for(const i of a)if(i.type==="childList")for(const o of i.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&s(o)}).observe(document,{childList:!0,subtree:!0});function n(a){const i={};return a.integrity&&(i.integrity=a.integrity),a.referrerPolicy&&(i.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?i.credentials="include":a.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function s(a){if(a.ep)return;a.ep=!0;const i=n(a);fetch(a.href,i)}})();const Ku=!1;var wi=Array.isArray,$m=Array.prototype.indexOf,no=Array.prototype.includes,_o=Array.from,Yu=Object.defineProperty,Aa=Object.getOwnPropertyDescriptor,qu=Object.getOwnPropertyDescriptors,$u=Object.prototype,Xm=Array.prototype,Eo=Object.getPrototypeOf,Jd=Object.isExtensible;const Hn=()=>{};function Qm(r){for(var e=0;e<r.length;e++)r[e]()}function Xu(){var r,e,n=new Promise((s,a)=>{r=s,e=a});return{promise:n,resolve:r,reject:e}}function ec(r,e){if(Array.isArray(r))return r;if(!(Symbol.iterator in r))return Array.from(r);const n=[];for(const s of r)if(n.push(s),n.length===e)break;return n}const rr=2,Ia=4,yo=8,Qu=1<<24,as=16,es=32,Os=64,ml=128,rd=256,Zr=512,qn=1024,Vn=2048,ls=4096,wr=8192,Nr=16384,ja=32768,ro=1<<25,ha=65536,so=1<<17,Zm=1<<18,Wa=1<<19,Jm=1<<20,Es=1<<25,ma=65536,ao=1<<21,Ta=1<<22,Ys=1<<23,Ns=Symbol("$state"),Zu=Symbol("component"),ev=Symbol("legacy props"),tv=Symbol(""),Ju=Symbol("attributes"),vl=Symbol("class"),pl=Symbol("style"),gl=Symbol("text"),Vi=Symbol("form reset"),ki=new class extends Error{name="StaleReactionError";message="The reaction that called `getAbortSignal()` was re-run or destroyed"},nv=!!globalThis.document?.contentType&&globalThis.document.contentType.includes("xml"),rv=1,sv=2,ef=4,av=8,iv=16,ov=1,lv=4,dv=8,cv=16,tf=1,uv=2,Yn=Symbol("uninitialized"),fv="http://www.w3.org/1999/xhtml";function hv(){console.warn("https://svelte.dev/e/derived_inert")}function mv(){console.warn("https://svelte.dev/e/select_multiple_invalid_value")}function vv(){console.warn("https://svelte.dev/e/svelte_boundary_reset_noop")}function nf(r){return r===this.v}function rf(r,e){return r!=r?e==e:r!==e||r!==null&&typeof r=="object"||typeof r=="function"}function sf(r){return!rf(r,this.v)}function sd(r){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function pv(){throw new Error("https://svelte.dev/e/async_derived_orphan")}function gv(r,e,n){throw new Error("https://svelte.dev/e/each_key_duplicate")}function bv(r){throw new Error("https://svelte.dev/e/effect_in_teardown")}function _v(){throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function Ev(r){throw new Error("https://svelte.dev/e/effect_orphan")}function yv(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}function Sv(r){throw new Error("https://svelte.dev/e/props_invalid_value")}function wv(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function kv(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}function Av(){throw new Error("https://svelte.dev/e/state_unsafe_mutation")}function Tv(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}let Rv=!1;const xv=[];function zi(r,e=!1,n=!1){return ji(r,new Map,"",xv,null,n)}function ji(r,e,n,s,a=null,i=!1){if(typeof r=="object"&&r!==null){var o=e.get(r);if(o!==void 0)return o;if(r instanceof Map)return new Map(r);if(r instanceof Set)return new Set(r);if(wi(r)){var l=Array(r.length);e.set(r,l),a!==null&&e.set(a,l);for(var f=0;f<r.length;f+=1){var p=r[f];f in r&&(l[f]=ji(p,e,n,s,null,i))}return l}if(Eo(r)===$u){l={},e.set(r,l),a!==null&&e.set(a,l);for(var _ of Object.keys(r))l[_]=ji(r[_],e,n,s,null,i);return l}if(r instanceof Date)return r.getTime(),structuredClone(r);if(typeof r.toJSON=="function"&&!i)return ji(r.toJSON(),e,n,s,r)}if(r instanceof EventTarget)return r;try{return structuredClone(r)}catch{return r}}function Dv(r){let e=r.p;for(;e!==null&&e.c===null;)e=e.p;return e?.c??null}function ad(r,e){return r===null&&sd(),r.c??=new Map(Dv(r)||void 0)}let zn=null;function Na(r){zn=r}function af(r){return ad(zn).get(r)}function of(r,e){return ad(zn).set(r,e),e}function lf(r){return ad(zn).has(r)}function ut(r,e=!1,n){zn={p:zn,i:!1,c:null,e:null,s:r,x:null,r:Kt,l:null}}function ft(r){var e=zn,n=e.e;if(n!==null){e.e=null;for(var s of n)Rf(s)}return r!==void 0&&(e.x=r),e.i=!0,zn=e.p,id(r)}function id(r={}){return Yu(r,Zu,{value:!0}),r}function df(){return!0}let ia=[];function cf(){var r=ia;ia=[],Qm(r)}function Is(r){if(ia.length===0&&!di){var e=ia;queueMicrotask(()=>{e===ia&&cf()})}ia.push(r)}function Iv(){for(;ia.length>0;)cf()}const Nv=-7169;function Fn(r,e){r.f=r.f&Nv|e}function od(r){(r.f&Zr)!==0||r.deps===null?Fn(r,qn):Fn(r,ls)}function uf(r){if(r!==null)for(const e of r)(e.f&rr)===0||(e.f&ma)===0||(e.f^=ma,uf(e.deps))}function ff(r,e,n){(r.f&Vn)!==0?e.add(r):(r.f&ls)!==0&&n.add(r),uf(r.deps),Fn(r,qn)}let Oi=!1;function Cv(r){var e=Oi;try{return Oi=!1,[r(),Oi]}finally{Oi=e}}let tc=!1;function Pv(){tc||(tc=!0,document.addEventListener("reset",r=>{Promise.resolve().then(()=>{if(!r.defaultPrevented)for(const e of r.target.elements)e[Vi]?.()})},{capture:!0}))}function Ka(r){var e=$t,n=Kt;ts(null),ks(null);try{return r()}finally{ts(e),ks(n)}}function ld(r,e,n,s=n){r.addEventListener(e,()=>Ka(n));const a=r[Vi];a?r[Vi]=()=>{a(),s(!0)}:r[Vi]=()=>s(!0),Pv()}function Mv(r,e,n,s){const a=fi;var i=r.filter(E=>!E.settled),o=e.map(a);if(n.length===0&&i.length===0){s(o);return}var l=Kt,f=Ov(),p=i.length===1?i[0].promise:i.length>1?Promise.all(i.map(E=>E.promise)):null;function _(E){if((l.f&Nr)===0){f();try{s([...o,...E])}catch(b){_s(b,l)}io()}}var g=hf();if(n.length===0){p.then(()=>_([])).finally(g);return}function k(){Promise.all(n.map(E=>Lv(E))).then(_).catch(E=>_s(E,l)).finally(g)}p?p.then(()=>{f(),k(),io()}):k()}function Ov(){var r=Kt,e=$t,n=zn,s=Ct;return function(i=!0){ks(r),ts(e),Na(n),i&&(r.f&Nr)===0&&(s?.activate(),s?.apply())}}function io(r=!0){ks(null),ts(null),Na(null),r&&Ct?.deactivate()}function hf(){var r=Kt,e=r.b,n=Ct,s=!!e?.is_rendered();return e?.update_pending_count(1,n),n.increment(s,r),()=>{e?.update_pending_count(-1,n),n.decrement(s,r)}}function fi(r){var e=rr|Vn;return Kt!==null&&(Kt.f|=Wa),{ctx:zn,deps:null,effects:null,equals:nf,f:e,fn:r,reactions:null,rv:0,v:Yn,wv:0,parent:Kt,ac:null}}const ai=Symbol("obsolete");function Lv(r,e,n){let s=Kt;s===null&&pv();var a=void 0,i=Xs(Yn),o=!$t,l=new Set;return Qv(()=>{var f=Kt,p=Xu();a=p.promise;try{Promise.resolve(r()).then(p.resolve,E=>{E!==ki&&p.reject(E)}).finally(io)}catch(E){p.reject(E),io()}var _=Ct;if(o){if((f.f&ja)!==0)var g=hf();if(s.b?.is_rendered())_.async_deriveds.get(f)?.reject(ai);else for(const E of l.values())E.reject(ai);l.add(p),_.async_deriveds.set(f,p)}const k=(E,b=void 0)=>{g?.(),l.delete(p),b!==ai&&(_.activate(),b?(i.f|=Ys,Ca(i,b)):((i.f&Ys)!==0&&(i.f^=Ys),Ca(i,E)),_.deactivate())};p.promise.then(k,E=>k(null,E||"unknown"))}),hd(()=>{for(const f of l)f.reject(ai)}),new Promise(f=>{function p(_){function g(){_===a?f(i):p(a)}_.then(g,g)}p(a)})}function c(r){const e=fi(r);return Cf(e),e}function mf(r){const e=fi(r);return e.equals=sf,e}function Fv(r){var e=r.effects;if(e!==null){r.effects=null;for(var n=0;n<e.length;n+=1)Cr(e[n])}}function dd(r){var e,n=Kt,s=r.parent;if(!Ls&&s!==null&&r.v!==Yn&&(s.f&(Nr|wr))!==0)return hv(),r.v;ks(s);try{r.f&=~ma,Fv(r),e=Lf(r)}finally{ks(n)}return e}function vf(r){var e=dd(r);if(!r.equals(e)&&(r.wv=Mf(),(!Ct?.is_fork||r.deps===null)&&(Ct!==null?(Ct.capture(r,e,!0),bl?.capture(r,e,!0)):r.v=e,r.deps===null))){Fn(r,qn);return}Ls||(is!==null?(fd()||Ct?.is_fork)&&is.set(r,e):od(r))}function Gv(r){if(r.effects!==null)for(const e of r.effects)(e.teardown||e.ac)&&(e.teardown?.(),e.ac!==null&&Ka(()=>{e.ac.abort(ki),e.ac=null}),e.fn!==null&&(e.teardown=Hn),hi(e,0),md(e))}function pf(r){if(r.effects!==null)for(const e of r.effects)e.teardown&&e.fn!==null&&Pa(e)}let Go=null,Ea=null,Ct=null,bl=null,is=null,_l=null,di=!1,Uo=!1,Sa=null,Wi=null;var nc=0;let Uv=1;class $s{id=Uv++;#e=!1;linked=!0;#n=null;#t=null;async_deriveds=new Map;current=new Map;previous=new Map;#s=new Set;#a=new Set;#r=0;#i=new Map;#l=null;#o=[];#d=[];#c=new Set;#u=new Set;#f=new Map;#h=new Set;is_fork=!1;#m=!1;constructor(){Ea===null?Go=Ea=this:(Ea.#t=this,this.#n=Ea),Ea=this}#v(){if(this.is_fork)return!0;for(const s of this.#i.keys()){for(var e=s,n=!1;e.parent!==null;){if(this.#f.has(e)){n=!0;break}e=e.parent}if(!n)return!0}return!1}skip_effect(e){this.#f.has(e)||this.#f.set(e,{d:[],m:[]}),this.#h.delete(e)}unskip_effect(e,n=s=>this.schedule(s)){var s=this.#f.get(e);if(s){this.#f.delete(e);for(var a of s.d)Fn(a,Vn),n(a);for(a of s.m)Fn(a,ls),n(a)}this.#h.add(e)}#_(){this.#e=!0,nc++>1e3&&(this.#y(),Hv());for(const f of this.#c)this.#u.delete(f),Fn(f,Vn),this.schedule(f);for(const f of this.#u)Fn(f,ls),this.schedule(f);const e=this.#o;this.#o=[],this.apply();var n=Sa=[],s=[],a=Wi=[];for(const f of e)try{this.#p(f,n,s)}catch(p){throw _f(f),this.#v()||this.discard(),p}if(Ct=null,a.length>0){var i=$s.ensure();for(const f of a)i.schedule(f)}if(Sa=null,Wi=null,this.#v()){this.#g(s),this.#g(n);for(const[f,p]of this.#f)bf(f,p);a.length>0&&Ct.#_();return}const o=this.#b();if(o){this.#g(s),this.#g(n),o.#E(this);return}this.#c.clear(),this.#u.clear();for(const f of this.#s)f(this);this.#s.clear(),bl=this,rc(s),rc(n),bl=null,this.#l?.resolve();var l=Ct;if(this.#r===0&&(this.#o.length===0||l!==null)&&this.#y(),this.#o.length>0)if(l!==null){const f=l;f.#o.push(...this.#o.filter(p=>!f.#o.includes(p)))}else l=this;l!==null&&(ys.clear(),l.#_())}#p(e,n,s){e.f^=qn;for(var a=e.first;a!==null;){var i=a.f,o=(i&(es|Os))!==0,l=o&&(i&qn)!==0,f=l||(i&wr)!==0||this.#f.has(a);if(!f&&a.fn!==null){o?a.f^=qn:(i&Ia)!==0?n.push(a):xi(a)&&((i&as)!==0&&this.#u.add(a),Pa(a));var p=a.first;if(p!==null){a=p;continue}}for(;a!==null;){var _=a.next;if(_!==null){a=_;break}a=a.parent}}}#b(){for(var e=this.#n;e!==null;){if(!e.is_fork){for(const[n,[,s]]of this.current)if(e.current.has(n)&&!s)return e}e=e.#n}return null}#E(e){for(const[s,a]of e.current)!this.previous.has(s)&&e.previous.has(s)&&this.previous.set(s,e.previous.get(s)),this.current.set(s,a);for(const[s,a]of e.async_deriveds){const i=this.async_deriveds.get(s);i&&a.promise.then(i.resolve).catch(i.reject)}e.async_deriveds.clear(),this.transfer_effects(e.#c,e.#u);const n=s=>{var a=s.reactions;if(a!==null&&!((s.f&rr)!==0&&(s.f&(Vn|ls))===0))for(const l of a){var i=l.f;if((i&rr)!==0)n(l);else{var o=l;i&(Ta|as)&&!this.async_deriveds.has(o)&&(this.#u.delete(o),Fn(o,Vn),this.schedule(o))}}};for(const s of this.current.keys())n(s);this.oncommit(()=>e.discard()),e.#y(),Ct=this,this.#_()}#g(e){for(var n=0;n<e.length;n+=1)ff(e[n],this.#c,this.#u)}capture(e,n,s=!1){e.v!==Yn&&!this.previous.has(e)&&this.previous.set(e,e.v),(e.f&Ys)===0&&(this.current.set(e,[n,s]),is?.set(e,n)),this.is_fork||(e.v=n)}activate(){Ct=this}deactivate(){Ct=null,is=null}flush(){try{Uo=!0,Ct=this,this.#_()}finally{nc=0,_l=null,Sa=null,Wi=null,Uo=!1,Ct=null,is=null,ys.clear()}}discard(){for(const e of this.#a)e(this);this.#a.clear();for(const e of this.async_deriveds.values())e.reject(ai);this.#y(),this.#l?.resolve()}register_created_effect(e){this.#d.push(e)}#S(){for(let g=Go;g!==null;g=g.#t){var e=g.id<this.id,n=[];for(const[k,[E,b]]of this.current){if(g.current.has(k)){var s=g.current.get(k)[0];if(e&&E!==s)g.current.set(k,[E,b]);else continue}n.push(k)}if(e)for(const[k,E]of this.async_deriveds){const b=g.async_deriveds.get(k);b&&E.promise.then(b.resolve).catch(b.reject)}var a=[...g.current.keys()].filter(k=>!g.current.get(k)[1]);if(!(!g.#e||a.length===0)){var i=a.filter(k=>!this.current.has(k));if(i.length===0)e&&g.discard();else if(n.length>0){if(e)for(const k of this.#h)g.unskip_effect(k,E=>{(E.f&(as|Ta))!==0?g.schedule(E):g.#g([E])});g.activate();var o=new Set,l=new Map;for(var f of n)gf(f,i,o,l);l=new Map;var p=[...g.current].filter(([k,E])=>{const b=this.current.get(k);return b?b[0]!==E[0]||b[1]!==E[1]:!0}).map(([k])=>k);if(p.length>0)for(const k of this.#d)(k.f&(Nr|wr|so))===0&&cd(k,p,l)&&((k.f&(Ta|as))!==0?(Fn(k,Vn),g.schedule(k)):g.#c.add(k));if(g.#o.length>0&&!g.#m){g.apply();for(var _ of g.#o)g.#p(_,[],[]);g.#o=[]}g.deactivate()}}}}increment(e,n){if(this.#r+=1,e){let s=this.#i.get(n)??0;this.#i.set(n,s+1)}}decrement(e,n){if(this.#r-=1,e){let s=this.#i.get(n)??0;s===1?this.#i.delete(n):this.#i.set(n,s-1)}this.#m||(this.#m=!0,Is(()=>{this.#m=!1,this.linked&&this.flush()}))}transfer_effects(e,n){for(const s of e)this.#c.add(s);for(const s of n)this.#u.add(s);e.clear(),n.clear()}oncommit(e){this.#s.add(e)}ondiscard(e){this.#a.add(e)}settled(){return(this.#l??=Xu()).promise}static ensure(){if(Ct===null){const e=Ct=new $s;!Uo&&!di&&Is(()=>{e.#e||e.flush()})}return Ct}apply(){{is=null;return}}schedule(e){if(_l=e,e.b?.is_pending&&(e.f&(Ia|yo|Qu))!==0&&(e.f&ja)===0){e.b.defer_effect(e);return}for(var n=e;n.parent!==null;){n=n.parent;var s=n.f;if(Sa!==null&&n===Kt&&($t===null||($t.f&rr)===0))return;if((s&(Os|es))!==0){if((s&qn)===0)return;n.f^=qn}}this.#o.push(n)}#y(){if(this.linked){var e=this.#n,n=this.#t;e===null?Go=n:e.#t=n,n===null?Ea=e:n.#n=e,this.linked=!1}}}function Bv(r){var e=di;di=!0;try{for(var n;;){if(Iv(),Ct===null)return n;Ct.flush()}}finally{di=e}}function Hv(){try{yv()}catch(r){_s(r,_l)}}let xs=null;function rc(r){var e=r.length;if(e!==0){for(var n=0;n<e;){var s=r[n++];if((s.f&(Nr|wr))===0&&xi(s)&&(xs=new Set,Pa(s),s.deps===null&&s.first===null&&s.nodes===null&&s.teardown===null&&s.ac===null&&Df(s),xs?.size>0)){ys.clear();for(const a of xs){if((a.f&(Nr|wr))!==0)continue;const i=[a];let o=a.parent;for(;o!==null;)xs.has(o)&&(xs.delete(o),i.push(o)),o=o.parent;for(let l=i.length-1;l>=0;l--){const f=i[l];(f.f&(Nr|wr))===0&&Pa(f)}}xs.clear()}}xs=null}}function gf(r,e,n,s){if(!n.has(r)&&(n.add(r),r.reactions!==null))for(const a of r.reactions){const i=a.f;(i&rr)!==0?gf(a,e,n,s):(i&(Ta|as))!==0&&(i&Vn)===0&&cd(a,e,s)&&(Fn(a,Vn),ud(a))}}function cd(r,e,n){const s=n.get(r);if(s!==void 0)return s;if(r.deps!==null)for(const a of r.deps){if(no.call(e,a))return!0;if((a.f&rr)!==0&&cd(a,e,n))return n.set(a,!0),!0}return n.set(r,!1),!1}function ud(r){Ct.schedule(r)}function bf(r,e){if(!((r.f&es)!==0&&(r.f&qn)!==0)){(r.f&Vn)!==0?e.d.push(r):(r.f&ls)!==0&&e.m.push(r),Fn(r,qn);for(var n=r.first;n!==null;)bf(n,e),n=n.next}}function _f(r){Fn(r,qn);for(var e=r.first;e!==null;)_f(e),e=e.next}let oo=new Set;const ys=new Map;let Ef=!1;function Xs(r,e){var n={f:0,v:r,reactions:null,equals:nf,rv:0,wv:0};return n}function C(r,e){const n=Xs(r);return Cf(n),n}function Vv(r,e=!1,n=!0){const s=Xs(r);return e||(s.equals=sf),s}function u(r,e,n=!1){$t!==null&&(!os||($t.f&so)!==0)&&df()&&($t.f&(rr|as|Ta|so))!==0&&(Ss===null||!Ss.has(r))&&Av();let s=n?We(e):e;return Ca(r,s,Wi)}function Ca(r,e,n=null){if(!r.equals(e)){Ls?ys.set(r,e):ys.has(r)||ys.set(r,r.v);var s=$s.ensure();if(s.capture(r,e),(r.f&rr)!==0){const a=r;(r.f&Vn)!==0&&dd(a),is===null&&od(a)}r.wv=Mf(),yf(r,Vn,n),Kt!==null&&(Kt.f&qn)!==0&&(Kt.f&(es|Os))===0&&($r===null?ep([r]):$r.push(r)),!s.is_fork&&oo.size>0&&!Ef&&zv()}return e}function zv(){Ef=!1;for(const r of oo){(r.f&qn)!==0&&Fn(r,ls);let e;try{e=xi(r)}catch{e=!0}e&&Pa(r)}oo.clear()}function gs(r){u(r,r.v+1)}function yf(r,e,n){var s=r.reactions;if(s!==null)for(var a=s.length,i=0;i<a;i++){var o=s[i],l=o.f,f=(l&Vn)===0;if(f&&Fn(o,e),(l&so)!==0)oo.add(o);else if((l&rr)!==0){var p=o;is?.delete(p),(l&ma)===0&&(l&Zr&&(Kt===null||(Kt.f&ao)===0)&&(o.f|=ma),yf(p,ls,n))}else if(f){var _=o;(l&as)!==0&&xs!==null&&xs.add(_),n!==null?n.push(_):ud(_)}}}function We(r){if(typeof r!="object"||r===null||Ns in r||Zu in r)return r;const e=Eo(r);if(e!==$u&&e!==Xm)return r;var n=new Map,s=wi(r),a=C(0),i=Ps,o=l=>{if(Ps===i)return l();var f=$t,p=Ps;ts(null),ic(i);var _=l();return ts(f),ic(p),_};return s&&n.set("length",C(r.length)),new Proxy(r,{defineProperty(l,f,p){(!("value"in p)||p.configurable===!1||p.enumerable===!1||p.writable===!1)&&wv();var _=n.get(f);return _===void 0?o(()=>{var g=C(p.value);return n.set(f,g),g}):u(_,p.value,!0),!0},deleteProperty(l,f){var p=n.get(f);if(p===void 0){if(f in l){const _=o(()=>C(Yn));n.set(f,_),gs(a)}}else u(p,Yn),gs(a);return!0},get(l,f,p){if(f===Ns)return r;var _=n.get(f),g=f in l;if(_===void 0&&(!g||Aa(l,f)?.writable)&&(_=o(()=>{var E=We(g?l[f]:Yn),b=C(E);return b}),n.set(f,_)),_!==void 0){var k=t(_);return k===Yn?void 0:k}return Reflect.get(l,f,p)},getOwnPropertyDescriptor(l,f){var p=Reflect.getOwnPropertyDescriptor(l,f);if(p&&"value"in p){var _=n.get(f);_&&(p.value=t(_))}else if(p===void 0){var g=n.get(f),k=g?.v;if(g!==void 0&&k!==Yn)return{enumerable:!0,configurable:!0,value:k,writable:!0}}return p},has(l,f){if(f===Ns)return!0;var p=n.get(f),_=p!==void 0&&p.v!==Yn||Reflect.has(l,f);if(p!==void 0||Kt!==null&&(!_||Aa(l,f)?.writable)){p===void 0&&(p=o(()=>{var k=_?We(l[f]):Yn,E=C(k);return E}),n.set(f,p));var g=t(p);if(g===Yn)return!1}return _},set(l,f,p,_){var g=n.get(f),k=f in l;if(s&&f==="length")for(var E=p;E<g.v;E+=1){var b=n.get(E+"");b!==void 0?u(b,Yn):E in l&&(b=o(()=>C(Yn)),n.set(E+"",b))}if(g===void 0)(!k||Aa(l,f)?.writable)&&(g=o(()=>C(void 0)),u(g,We(p)),n.set(f,g));else{k=g.v!==Yn;var w=o(()=>We(p));u(g,w)}var x=Reflect.getOwnPropertyDescriptor(l,f);if(x?.set&&x.set.call(_,p),!k){if(s&&typeof f=="string"){var D=n.get("length"),N=Number(f);Number.isInteger(N)&&N>=D.v&&u(D,N+1)}gs(a)}return!0},ownKeys(l){t(a);var f=Reflect.ownKeys(l).filter(g=>{var k=n.get(g);return k===void 0||k.v!==Yn});for(var[p,_]of n)_.v!==Yn&&!(p in l)&&f.push(p);return f},setPrototypeOf(){kv()}})}function sc(r){try{if(r!==null&&typeof r=="object"&&Ns in r)return r[Ns]}catch{}return r}function Sf(r,e){return Object.is(sc(r),sc(e))}var va,wf,kf,Af;function jv(){if(va===void 0){va=window,wf=/Firefox/.test(navigator.userAgent);var r=Element.prototype,e=Node.prototype,n=Text.prototype;kf=Aa(e,"firstChild").get,Af=Aa(e,"nextSibling").get,Jd(r)&&(r[vl]=void 0,r[Ju]=null,r[pl]=void 0,r.__e=void 0),Jd(n)&&(n[gl]=void 0)}}function Cs(r=""){return document.createTextNode(r)}function bs(r){return kf.call(r)}function Ai(r){return Af.call(r)}function A(r,e){return bs(r)}function Ne(r,e=!1){{var n=bs(r);return n instanceof Comment&&n.data===""?Ai(n):n}}function m(r,e=!1){return bs(r)}function d(r,e=1,n=!1){let s=r;for(;e--;)s=Ai(s);return s}function Wv(r){r.textContent=""}function Tf(){return!1}function Kv(r,e,n){return n?document.createElement(r,{is:n}):document.createElement(r)}function Yv(r){var e=Kt;if(e===null)return $t.f|=Ys,r;if((e.f&ja)===0&&(e.f&Ia)===0)throw r;_s(r,e)}function _s(r,e){if(!(e!==null&&(e.f&Nr)!==0)){for(;e!==null;){if((e.f&ml)!==0&&(e.f&(Nr|ro))===0){if((e.f&ja)===0)throw r;try{e.b.error(r);return}catch(n){r=n}}e=e.parent}throw r}}function qv(r){Kt===null&&($t===null&&Ev(),_v()),Ls&&bv()}function $v(r,e){var n=e.last;n===null?e.last=e.first=r:(n.next=r,r.prev=n,e.last=r)}function Gs(r,e){var n=Kt;n!==null&&(n.f&wr)!==0&&(r|=wr);var s={ctx:zn,deps:null,nodes:null,f:r|Vn|Zr,first:null,fn:e,last:null,next:null,parent:n,b:n&&n.b,prev:null,teardown:null,wv:0,ac:null};Ct?.register_created_effect(s);var a=s;if((r&Ia)!==0)Sa!==null?Sa.push(s):$s.ensure().schedule(s);else if(e!==null){try{Pa(s)}catch(o){throw Cr(s),o}a.deps===null&&a.teardown===null&&a.nodes===null&&a.first===a.last&&(a.f&Wa)===0&&(a=a.first,(r&as)!==0&&(r&ha)!==0&&a!==null&&(a.f|=ha))}if(a!==null&&(a.parent=n,n!==null&&$v(a,n),$t!==null&&($t.f&rr)!==0&&(r&Os)===0)){var i=$t;(i.effects??=[]).push(a)}return s}function fd(){return $t!==null&&!os}function hd(r){const e=Gs(yo,null);return Fn(e,qn),e.teardown=r,e}function ot(r){qv();var e=Kt.f,n=!$t&&(e&es)!==0&&zn!==null&&!zn.i;if(n){var s=zn;(s.e??=[]).push(r)}else return Rf(r)}function Rf(r){return Gs(Ia|Jm,r)}function Xv(r){$s.ensure();const e=Gs(Os|Wa,r);return(n={})=>new Promise(s=>{n.outro?da(e,()=>{Cr(e),s(void 0)}):(Cr(e),s(void 0))})}function So(r){return Gs(Ia,r)}function Qv(r){return Gs(Ta|Wa,r)}function Ti(r,e=0){return Gs(yo|e,r)}function S(r,e=[],n=[],s=[]){Mv(s,e,n,a=>{Gs(yo,()=>{r(...a.map(t))})})}function Ri(r,e=0){var n=Gs(as|e,r);return n}function Xr(r){return Gs(es|Wa,r)}function xf(r){var e=r.teardown;if(e!==null){const n=Ls,s=$t;ac(!0),ts(null);try{e.call(null)}catch(a){_s(a,r.parent)}finally{ac(n),ts(s)}}}function md(r,e=!1){var n=r.first;for(r.first=r.last=null;n!==null;){const a=n.ac;a!==null&&Ka(()=>{a.abort(ki)});var s=n.next;(n.f&Os)!==0?n.parent=null:Cr(n,e),n=s}}function Zv(r){for(var e=r.first;e!==null;){var n=e.next;(e.f&es)===0&&Cr(e),e=n}}function Cr(r,e=!0){var n=!1;(e||(r.f&Zm)!==0)&&r.nodes!==null&&r.nodes.end!==null&&(Jv(r.nodes.start,r.nodes.end),n=!0),r.f|=ro,md(r,e&&!n),hi(r,0);var s=r.nodes&&r.nodes.t;if(s!==null)for(const i of s)i.stop();xf(r),r.f^=ro,r.f|=Nr;var a=r.parent;a!==null&&a.first!==null&&Df(r),r.next=r.prev=r.teardown=r.ctx=r.deps=r.fn=r.nodes=r.ac=r.b=null}function Jv(r,e){for(;r!==null;){var n=r===e?null:Ai(r);r.remove(),r=n}}function Df(r){var e=r.parent,n=r.prev,s=r.next;n!==null&&(n.next=s),s!==null&&(s.prev=n),e!==null&&(e.first===r&&(e.first=s),e.last===r&&(e.last=n))}function da(r,e,n=!0){var s=[];r.f|=rd,If(r,s,!0);var a=()=>{n&&Cr(r),e&&e()},i=s.length;if(i>0){var o=()=>--i||a();for(var l of s)l.out(o)}else a()}function If(r,e,n){if((r.f&wr)===0){r.f^=wr;var s=r.nodes&&r.nodes.t;if(s!==null)for(const l of s)(l.is_global||n)&&e.push(l);for(var a=r.first;a!==null;){var i=a.next;if((a.f&Os)===0){var o=(a.f&ha)!==0||(a.f&es)!==0&&(r.f&as)!==0;If(a,e,o?n:!1)}a=i}}}function lo(r){r.f&=~rd,Nf(r,!0)}function Nf(r,e){if((r.f&rd)===0&&(r.f&wr)!==0){r.f^=wr,(r.f&qn)===0&&(Fn(r,Vn),$s.ensure().schedule(r));for(var n=r.first;n!==null;){var s=n.next,a=(n.f&ha)!==0||(n.f&es)!==0;Nf(n,a?e:!1),n=s}var i=r.nodes&&r.nodes.t;if(i!==null)for(const o of i)(o.is_global||e)&&o.in()}}function vd(r,e){if(r.nodes)for(var n=r.nodes.start,s=r.nodes.end;n!==null;){var a=n===s?null:Ai(n);e.append(n),n=a}}let Ki=!1,Ls=!1;function ac(r){Ls=r}let $t=null,os=!1;function ts(r){$t=r}let Kt=null;function ks(r){Kt=r}let Ss=null;function Cf(r){$t!==null&&(Ss??=new Set).add(r)}let Dr=null,Vr=0,$r=null;function ep(r){$r=r}let Pf=1,oa=0,Ps=oa;function ic(r){Ps=r}function Mf(){return++Pf}function xi(r){var e=r.f;if((e&Vn)!==0)return!0;if(e&rr&&(r.f&=~ma),(e&ls)!==0){for(var n=r.deps,s=n.length,a=0;a<s;a++){var i=n[a];if(xi(i)&&vf(i),i.wv>r.wv)return!0}(e&Zr)!==0&&is===null&&Fn(r,qn)}return!1}function Of(r,e,n=!0){var s=r.reactions;if(s!==null&&!(Ss!==null&&Ss.has(r)))for(var a=0;a<s.length;a++){var i=s[a];(i.f&rr)!==0?Of(i,e,!1):e===i&&(n?Fn(i,Vn):(i.f&qn)!==0&&Fn(i,ls),ud(i))}}function Lf(r){var e=Dr,n=Vr,s=$r,a=$t,i=Ss,o=zn,l=os,f=Ps,p=r.f;Dr=null,Vr=0,$r=null,$t=(p&(es|Os))===0?r:null,Ss=null,Na(r.ctx),os=!1,Ps=++oa,r.ac!==null&&(Ka(()=>{r.ac.abort(ki)}),r.ac=null);try{r.f|=ao;var _=r.fn,g=_();r.f|=ja;var k=oc(r);if(df()&&$r!==null&&!os&&k!==null&&(r.f&(rr|ls|Vn))===0)for(var E=0;E<$r.length;E++)Of($r[E],r);if(a!==null&&a!==r){if(oa++,a.deps!==null)for(let b=0;b<n;b+=1)a.deps[b].rv=oa;if(e!==null)for(const b of e)b.rv=oa;$r!==null&&(s===null?s=$r:s.push(...$r))}return(r.f&Ys)!==0&&(r.f^=Ys),g}catch(b){return oc(r),Yv(b)}finally{r.f^=ao,Dr=e,Vr=n,$r=s,$t=a,Ss=i,Na(o),os=l,Ps=f}}function oc(r){var e=r.deps,n=Ct?.is_fork;if(Dr!==null){var s;if(n||hi(r,Vr),e!==null&&Vr>0)for(e.length=Vr+Dr.length,s=0;s<Dr.length;s++)e[Vr+s]=Dr[s];else r.deps=e=Dr;if(fd()&&(r.f&Zr)!==0)for(s=Vr;s<e.length;s++)(e[s].reactions??=[]).push(r)}else!n&&e!==null&&Vr<e.length&&(hi(r,Vr),e.length=Vr);return e}function tp(r,e){let n=e.reactions;if(n!==null){var s=$m.call(n,r);if(s!==-1){var a=n.length-1;a===0?n=e.reactions=null:(n[s]=n[a],n.pop())}}if(n===null&&(e.f&rr)!==0&&(Dr===null||!no.call(Dr,e))){var i=e;(i.f&Zr)!==0&&(i.f^=Zr,i.f&=~ma),i.v!==Yn&&od(i),i.ac!==null&&Ka(()=>{i.ac.abort(ki),i.ac=null,Fn(i,Vn)}),Gv(i),hi(i,0)}}function hi(r,e){var n=r.deps;if(n!==null)for(var s=e;s<n.length;s++)tp(r,n[s])}function Pa(r){var e=r.f;if((e&Nr)===0){Fn(r,qn);var n=Kt,s=Ki;Kt=r,Ki=(e&(es|Os))===0;try{(e&(as|Qu))!==0?Zv(r):md(r),xf(r);var a=Lf(r);r.teardown=typeof a=="function"?a:null,r.wv=Pf;var i;Ku&&Rv&&(r.f&Vn)!==0&&r.deps}finally{Ki=s,Kt=n}}}async function Ma(){await Promise.resolve(),Bv()}function t(r){var e=r.f,n=(e&rr)!==0;if($t!==null&&!os){var s=Kt!==null&&(Kt.f&Nr)!==0;if(!s&&(Ss===null||!Ss.has(r))){var a=$t.deps;if(($t.f&ao)!==0)r.rv<oa&&(r.rv=oa,Dr===null&&a!==null&&a[Vr]===r?Vr++:Dr===null?Dr=[r]:Dr.push(r));else{$t.deps??=[],no.call($t.deps,r)||$t.deps.push(r);var i=r.reactions;i===null?r.reactions=[$t]:no.call(i,$t)||i.push($t)}}}if(Ls&&ys.has(r))return ys.get(r);if(n){var o=r;if(Ls){var l=o.v;return((o.f&qn)===0&&o.reactions!==null||Gf(o))&&(l=dd(o)),ys.set(o,l),l}var f=(o.f&Zr)===0&&!os&&$t!==null&&(Ki||($t.f&Zr)!==0),p=(o.f&ja)===0;xi(o)&&(f&&(o.f|=Zr),vf(o)),f&&!p&&(pf(o),Ff(o))}if(is?.has(r))return is.get(r);if((r.f&Ys)!==0)throw r.v;return r.v}function Ff(r){if(r.f|=Zr,r.deps!==null)for(const e of r.deps)(e.reactions??=[]).push(r),(e.f&rr)!==0&&(e.f&Zr)===0&&(pf(e),Ff(e))}function Gf(r){if(r.v===Yn)return!0;if(r.deps===null)return!1;for(const e of r.deps)if(ys.has(e)||(e.f&rr)!==0&&Gf(e))return!0;return!1}function sr(r){var e=os;try{return os=!0,r()}finally{os=e}}function np(r){if(!(typeof r!="object"||!r||r instanceof EventTarget)){if(Ns in r)El(r);else if(!Array.isArray(r))for(let e in r){const n=r[e];typeof n=="object"&&n&&Ns in n&&El(n)}}}function El(r,e=new Set){if(typeof r=="object"&&r!==null&&!(r instanceof EventTarget)&&!e.has(r)){e.add(r),r instanceof Date&&r.getTime();for(let s in r)try{El(r[s],e)}catch{}const n=Eo(r);if(n!==Object.prototype&&n!==Array.prototype&&n!==Map.prototype&&n!==Set.prototype&&n!==Date.prototype){const s=qu(n);for(let a in s){const i=s[a].get;if(i)try{i.call(r)}catch{}}}}}const rp=["touchstart","touchmove"];function sp(r){return rp.includes(r)}const ii=Symbol("events"),Uf=new Set,yl=new Set;function ap(r,e,n,s={}){function a(i){if(s.capture||Sl.call(e,i),!i.cancelBubble)return Ka(()=>n?.call(this,i))}return r.startsWith("pointer")||r.startsWith("touch")||r==="wheel"?Is(()=>{e.addEventListener(r,a,s)}):e.addEventListener(r,a,s),a}function Ir(r,e,n,s,a){var i={capture:s,passive:a},o=ap(r,e,n,i);(e===document.body||e===window||e===document||e instanceof HTMLMediaElement)&&hd(()=>{e.removeEventListener(r,o,i)})}function re(r,e,n){(e[ii]??={})[r]=n}function Et(r){for(var e=0;e<r.length;e++)Uf.add(r[e]);for(var n of yl)n(r)}let Bo=null,Ho=!1;function Sl(r){var e=this,n=e.ownerDocument,s=r.type,a=r.composedPath?.()||[],i=a[0]||r.target;Bo=r,Ho||(Ho=!0,setTimeout(()=>{Ho=!1,Bo=null}));var o=0,l=Bo===r&&r[ii];if(l){var f=a.indexOf(l);if(f!==-1&&(e===document||e===window)){r[ii]=e;return}var p=a.indexOf(e);if(p===-1)return;f<=p&&(o=f)}if(i=a[o]||r.target,i!==e){Yu(r,"currentTarget",{configurable:!0,get(){return i||n}});var _=$t,g=Kt;ts(null),ks(null);try{for(var k,E=[];i!==null&&i!==e;){try{var b=i[ii]?.[s];b!=null&&(!i.disabled||r.target===i)&&b.call(i,r)}catch(w){k?E.push(w):k=w}if(r.cancelBubble)break;o++,i=o<a.length?a[o]:null}if(k){for(let w of E)queueMicrotask(()=>{throw w});throw k}}finally{r[ii]=e,delete r.currentTarget,ts(_),ks(g)}}}const ip=globalThis?.window?.trustedTypes&&globalThis.window.trustedTypes.createPolicy("svelte-trusted-html",{createHTML:r=>r});function op(r){return ip?.createHTML(r)??r}function Bf(r){var e=Kv("template");return e.innerHTML=op(r.replaceAll("<!>","<!---->")),e.content}function Oa(r,e){var n=Kt;n.nodes===null&&(n.nodes={start:r,end:e,a:null,t:null})}function y(r,e){var n=(e&tf)!==0,s=(e&uv)!==0,a,i=!r.startsWith("<!>");return()=>{a===void 0&&(a=Bf(i?r:"<!>"+r),n||(a=bs(a)));var o=s||wf?document.importNode(a,!0):a.cloneNode(!0);if(n){var l=bs(o),f=o.lastChild;Oa(l,f)}else Oa(o,o);return o}}function lp(r,e,n="svg"){var s=!r.startsWith("<!>"),a=(e&tf)!==0,i=`<${n}>${s?r:"<!>"+r}</${n}>`,o;return()=>{if(!o){var l=Bf(i),f=bs(l);if(a)for(o=document.createDocumentFragment();bs(f);)o.appendChild(bs(f));else o=bs(f)}var p=o.cloneNode(!0);if(a){var _=bs(p),g=p.lastChild;Oa(_,g)}else Oa(p,p);return p}}function Mr(r,e){return lp(r,e,"svg")}function Cn(r=""){{var e=Cs(r+"");return Oa(e,e),e}}function St(){var r=document.createDocumentFragment(),e=document.createComment(""),n=Cs();return r.append(e,n),Oa(e,n),r}function v(r,e){r!==null&&r.before(e)}function dp(r){let e=0,n=Xs(0),s;return()=>{fd()&&(t(n),Ti(()=>(e===0&&(s=sr(()=>r(()=>gs(n)))),e+=1,()=>{Is(()=>{e-=1,e===0&&(s?.(),s=void 0,gs(n))})})))}}var cp=ha|Wa;function Hf(r,e,n,s){new up(r,e,n,s)}class up{parent;is_pending=!1;transform_error;#e;#n=null;#t;#s;#a;#r=null;#i=null;#l=null;#o=null;#d=0;#c=0;#u=!1;#f=new Set;#h=new Set;#m=null;#v=dp(()=>(this.#m=Xs(this.#d),()=>{this.#m=null}));constructor(e,n,s,a){this.#e=e,this.#t=n,this.#s=i=>{var o=Kt;o.b=this,o.f|=ml,s(i)},this.parent=Kt.b,this.transform_error=a??this.parent?.transform_error??(i=>i),this.#a=Ri(()=>{this.#g()},cp)}#_(){try{this.#r=Xr(()=>this.#s(this.#e))}catch(e){this.error(e)}}#p(e){const n=this.#t.failed,{reset:s,invoke_onerror:a}=this.#b(e);Is(a),n&&(this.#l=Xr(()=>{n(this.#e,()=>e,()=>s)}))}#b(e){var n=!1,s=!1;const a=()=>{if(n){vv();return}n=!0,s&&Tv(),this.#l!==null&&da(this.#l,()=>{this.#l=null}),this.#y(()=>{this.#g()})};return{reset:a,invoke_onerror:()=>{try{s=!0,this.#t.onerror?.(e,a),s=!1}catch(o){_s(o,this.#a&&this.#a.parent)}}}}#E(){const e=this.#t.pending;e&&(this.is_pending=!0,this.#i=Xr(()=>e(this.#e)),Is(()=>{var n=this.#o=document.createDocumentFragment(),s=Cs(),a=!1;if(n.append(s),this.#r=this.#y(()=>{try{return Xr(()=>this.#s(s))}catch(i){try{this.error(i),a=!0}catch(o){_s(o,this.#a.parent)}return null}}),this.#r===null){this.#o=null,a&&this.#S(Ct);return}this.#c===0&&(this.#e.before(n),this.#o=null,da(this.#i,()=>{this.#i=null}),this.#S(Ct))}))}#g(){try{if(this.is_pending=this.has_pending_snippet(),this.#c=0,this.#d=0,this.#r=Xr(()=>{this.#s(this.#e)}),this.#c>0){var e=this.#o=document.createDocumentFragment();vd(this.#r,e);const n=this.#t.pending;this.#i=Xr(()=>n(this.#e))}else this.#S(Ct)}catch(n){this.error(n)}}#S(e){this.is_pending=!1,e.transfer_effects(this.#f,this.#h)}defer_effect(e){ff(e,this.#f,this.#h)}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!this.#t.pending}#y(e){var n=Kt,s=$t,a=zn;ks(this.#a),ts(this.#a),Na(this.#a.ctx);try{return $s.ensure(),e()}finally{ks(n),ts(s),Na(a)}}#w(e,n){if(!this.has_pending_snippet()){this.parent&&this.parent.#w(e,n);return}this.#c+=e,this.#c===0&&(this.#S(n),this.#i&&da(this.#i,()=>{this.#i=null}),this.#o&&(this.#e.before(this.#o),this.#o=null))}update_pending_count(e,n){this.#w(e,n),this.#d+=e,!(!this.#m||this.#u)&&(this.#u=!0,Is(()=>{this.#u=!1,this.#m&&Ca(this.#m,this.#d)}))}get_effect_pending(){return this.#v(),t(this.#m)}error(e){if(!this.#t.onerror&&!this.#t.failed)throw e;Ct?.is_fork?(this.#r&&Ct.skip_effect(this.#r),this.#i&&Ct.skip_effect(this.#i),this.#l&&Ct.skip_effect(this.#l),Ct.oncommit(()=>{this.#k(e)})):this.#k(e)}#k(e){this.#r&&(Cr(this.#r),this.#r=null),this.#i&&(Cr(this.#i),this.#i=null),this.#l&&(Cr(this.#l),this.#l=null);let n=this.#t.failed;const s=a=>{const{reset:i,invoke_onerror:o}=this.#b(a);o(),n&&(this.#l=this.#y(()=>{try{return Xr(()=>{var l=Kt;l.b=this,l.f|=ml,n(this.#e,()=>a,()=>i)})}catch(l){return _s(l,this.#a.parent),null}}))};Is(()=>{var a;try{a=this.transform_error(e)}catch(i){_s(i,this.#a&&this.#a.parent);return}a!==null&&typeof a=="object"&&typeof a.then=="function"?a.then(s,i=>_s(i,this.#a&&this.#a.parent)):s(a)})}}function h(r,e){var n=e==null?"":typeof e=="object"?`${e}`:e;n!==(r[gl]??=r.nodeValue)&&(r[gl]=n,r.nodeValue=`${n}`)}function fp(r,e){return hp(r,e)}const Li=new Map;function hp(r,{target:e,anchor:n,props:s={},events:a,context:i,intro:o=!0,transformError:l}){jv();var f=void 0,p=Xv(()=>{var _=n??e.appendChild(Cs());Hf(_,{pending:()=>{}},E=>{ut({});var b=zn;i&&(b.c=i),a&&(s.$$events=a),f=r(E,s)||id(),ft()},l);var g=new Set,k=E=>{for(var b=0;b<E.length;b++){var w=E[b];if(!g.has(w)){g.add(w);var x=sp(w);for(const R of[e,document]){var D=Li.get(R);D===void 0&&(D=new Map,Li.set(R,D));var N=D.get(w);N===void 0?(R.addEventListener(w,Sl,{passive:x}),D.set(w,1)):D.set(w,N+1)}}}};return k(_o(Uf)),yl.add(k),()=>{for(var E of g)for(const x of[e,document]){var b=Li.get(x),w=b.get(E);--w==0?(x.removeEventListener(E,Sl),b.delete(E),b.size===0&&Li.delete(x)):b.set(E,w)}yl.delete(k),_!==n&&_.parentNode?.removeChild(_)}});return mp.set(f,p),f}let mp=new WeakMap;class pd{anchor;#e=new Map;#n=new Map;#t=new Map;#s=new Set;#a=!0;constructor(e,n=!0){this.anchor=e,this.#a=n}#r=e=>{if(this.#e.has(e)){var n=this.#e.get(e),s=this.#n.get(n);if(s)lo(s),this.#s.delete(n);else{var a=this.#t.get(n);a&&(lo(a.effect),this.#n.set(n,a.effect),this.#t.delete(n),a.fragment.lastChild.remove(),this.anchor.before(a.fragment),s=a.effect)}for(const[i,o]of this.#e){if(this.#e.delete(i),i===e)break;const l=this.#t.get(o);l&&(Cr(l.effect),this.#t.delete(o))}for(const[i,o]of this.#n){if(i===n||this.#s.has(i))continue;const l=()=>{if(Array.from(this.#e.values()).includes(i)){var p=document.createDocumentFragment();vd(o,p),p.append(Cs()),this.#t.set(i,{effect:o,fragment:p})}else Cr(o);this.#s.delete(i),this.#n.delete(i)};this.#a||!s?(this.#s.add(i),da(o,l,!1)):l()}}};#i=e=>{this.#e.delete(e);const n=Array.from(this.#e.values());for(const[s,a]of this.#t)n.includes(s)||(Cr(a.effect),this.#t.delete(s))};ensure(e,n){var s=Ct,a=Tf();if(n&&!this.#n.has(e)&&!this.#t.has(e))if(a){var i=document.createDocumentFragment(),o=Cs();i.append(o),this.#t.set(e,{effect:Xr(()=>n(o)),fragment:i})}else this.#n.set(e,Xr(()=>n(this.anchor)));if(this.#e.set(s,e),a){for(const[l,f]of this.#n)l===e?s.unskip_effect(f):s.skip_effect(f);for(const[l,f]of this.#t)l===e?s.unskip_effect(f.effect):s.skip_effect(f.effect);s.oncommit(this.#r),s.ondiscard(this.#i)}else this.#r(s)}}function W(r,e,n=!1){var s=new pd(r),a=n?ha:0;function i(o,l){s.ensure(o,l)}Ri(()=>{var o=!1;e((l,f=0)=>{o=!0,i(f,l)}),o||i(-1,null)},a)}const vp=Symbol("NaN");function pp(r,e,n){var s=new pd(r);Ri(()=>{var a=e();a!==a&&(a=vp),s.ensure(a,n)})}function co(r,e){return e}function gp(r,e,n){for(var s=[],a=e.length,i,o=e.length,l=0;l<a;l++){let g=e[l];da(g,()=>{if(i){if(i.pending.delete(g),i.done.add(g),i.pending.size===0){var k=r.outrogroups;wl(r,_o(i.done)),k.delete(i),k.size===0&&(r.outrogroups=null)}}else o-=1},!1)}if(o===0){var f=s.length===0&&n!==null&&r.pending.size===0;if(f){var p=n,_=p.parentNode;Wv(_),_.append(p),r.items.clear()}wl(r,e,!f)}else i={pending:new Set(e),done:new Set},(r.outrogroups??=new Set).add(i)}function wl(r,e,n=!0){var s;if(r.pending.size>0){s=new Set;for(const o of r.pending.values())for(const l of o)s.add(r.items.get(l).e)}for(var a=0;a<e.length;a++){var i=e[a];if(s?.has(i)){i.f|=Es;const o=document.createDocumentFragment();vd(i,o)}else Cr(e[a],n)}}var lc;function Xe(r,e,n,s,a,i=null){var o=r,l=new Map,f=(e&ef)!==0;if(f){var p=r;o=p.appendChild(Cs())}var _=null,g=mf(()=>{var R=n();return wi(R)?R:R==null?[]:_o(R)}),k,E=new Map,b=!0;function w(R){(N.effect.f&Nr)===0&&(N.pending.delete(R),N.fallback=_,bp(N,k,o,e,s),_!==null&&(k.length===0?(_.f&Es)===0?lo(_):(_.f^=Es,oi(_,null,o)):da(_,()=>{_=null})))}function x(R){N.pending.delete(R)}var D=Ri(()=>{k=t(g);for(var R=k.length,M=new Set,z=Ct,$=Tf(),le=0;le<R;le+=1){var fe=k[le],de=s(fe,le),B=b?null:l.get(de);B?(B.v&&Ca(B.v,fe),B.i&&Ca(B.i,le),$&&z.unskip_effect(B.e)):(B=_p(l,b?o:lc??=Cs(),fe,de,le,a,e,n),b||(B.e.f|=Es),l.set(de,B)),M.add(de)}if(R===0&&i&&!_&&(b?_=Xr(()=>i(o)):(_=Xr(()=>i(lc??=Cs())),_.f|=Es)),R>M.size&&gv(),!b)if(E.set(z,M),$){for(const[oe,K]of l)M.has(oe)||z.skip_effect(K.e);z.oncommit(w),z.ondiscard(x)}else w(z);t(g)}),N={effect:D,items:l,pending:E,outrogroups:null,fallback:_};b=!1}function Ja(r){for(;r!==null&&(r.f&es)===0;)r=r.next;return r}function bp(r,e,n,s,a){var i=(s&av)!==0,o=e.length,l=r.items,f=Ja(r.effect.first),p,_=null,g,k=[],E=[],b,w,x,D;if(i)for(D=0;D<o;D+=1)b=e[D],w=a(b,D),x=l.get(w).e,(x.f&Es)===0&&(x.nodes?.a?.measure(),(g??=new Set).add(x));for(D=0;D<o;D+=1){if(b=e[D],w=a(b,D),x=l.get(w).e,r.outrogroups!==null)for(const B of r.outrogroups)B.pending.delete(x),B.done.delete(x);if((x.f&wr)!==0&&(lo(x),i&&(x.nodes?.a?.unfix(),(g??=new Set).delete(x))),(x.f&Es)!==0)if(x.f^=Es,x===f)oi(x,null,n);else{var N=_?_.next:f;x===r.effect.last&&(r.effect.last=x.prev),x.prev&&(x.prev.next=x.next),x.next&&(x.next.prev=x.prev),zs(r,_,x),zs(r,x,N),oi(x,N,n),_=x,k=[],E=[],f=Ja(_.next);continue}if(x!==f){if(p!==void 0&&p.has(x)){if(k.length<E.length){var R=E[0],M;_=R.prev;var z=k[0],$=k[k.length-1];for(M=0;M<k.length;M+=1)oi(k[M],R,n);for(M=0;M<E.length;M+=1)p.delete(E[M]);zs(r,z.prev,$.next),zs(r,_,z),zs(r,$,R),f=R,_=$,D-=1,k=[],E=[]}else p.delete(x),oi(x,f,n),zs(r,x.prev,x.next),zs(r,x,_===null?r.effect.first:_.next),zs(r,_,x),_=x;continue}for(k=[],E=[];f!==null&&f!==x;)(p??=new Set).add(f),E.push(f),f=Ja(f.next);if(f===null)continue}(x.f&Es)===0&&k.push(x),_=x,f=Ja(x.next)}if(r.outrogroups!==null){for(const B of r.outrogroups)B.pending.size===0&&(wl(r,_o(B.done)),r.outrogroups?.delete(B));r.outrogroups.size===0&&(r.outrogroups=null)}if(f!==null||p!==void 0){var le=[];if(p!==void 0)for(x of p)(x.f&wr)===0&&le.push(x);for(;f!==null;)(f.f&wr)===0&&f!==r.fallback&&le.push(f),f=Ja(f.next);var fe=le.length;if(fe>0){var de=(s&ef)!==0&&o===0?n:null;if(i){for(D=0;D<fe;D+=1)le[D].nodes?.a?.measure();for(D=0;D<fe;D+=1)le[D].nodes?.a?.fix()}gp(r,le,de)}}i&&Is(()=>{if(g!==void 0)for(x of g)x.nodes?.a?.apply()})}function _p(r,e,n,s,a,i,o,l){var f=(o&rv)!==0?(o&iv)===0?Vv(n,!1,!1):Xs(n):null,p=(o&sv)!==0?Xs(a):null;return{v:f,i:p,e:Xr(()=>(i(e,f??n,p??a,l),()=>{r.delete(s)}))}}function oi(r,e,n){if(r.nodes)for(var s=r.nodes.start,a=r.nodes.end,i=e&&(e.f&Es)===0?e.nodes.start:n;s!==null;){var o=Ai(s);if(i.before(s),s===a)return;s=o}}function zs(r,e,n){e===null?r.effect.first=n:e.next=n,n===null?r.effect.last=e:n.prev=e}function qs(r,e,...n){var s=new pd(r);Ri(()=>{const a=e()??null;s.ensure(a,a&&(i=>a(i,...n)))},ha)}function Vf(r,e,n){So(()=>{var s=sr(()=>e(r,n?.())||{});if(n&&s?.update){var a=!1,i={};Ti(()=>{var o=n();np(o),a&&rf(i,o)&&(i=o,s.update(o))}),a=!0}if(s?.destroy)return()=>s.destroy()})}function zf(r){var e,n,s="";if(typeof r=="string"||typeof r=="number")s+=r;else if(typeof r=="object")if(Array.isArray(r)){var a=r.length;for(e=0;e<a;e++)r[e]&&(n=zf(r[e]))&&(s&&(s+=" "),s+=n)}else for(n in r)r[n]&&(s&&(s+=" "),s+=n);return s}function Ep(){for(var r,e,n=0,s="",a=arguments.length;n<a;n++)(r=arguments[n])&&(e=zf(r))&&(s&&(s+=" "),s+=e);return s}function yp(r){return typeof r=="object"?Ep(r):r??""}const dc=[...`
2
2
  \r\f \v\uFEFF`];function Sp(r,e,n){var s=r==null?"":""+r;if(e&&(s=s?s+" "+e:e),n){for(var a of Object.keys(n))if(n[a])s=s?s+" "+a:a;else if(s.length)for(var i=a.length,o=0;(o=s.indexOf(a,o))>=0;){var l=o+i;(o===0||dc.includes(s[o-1]))&&(l===s.length||dc.includes(s[l]))?s=(o===0?"":s.substring(0,o))+s.substring(l+1):o=l}}return s===""?null:s}function cc(r,e=!1){var n=e?" !important;":";",s="";for(var a of Object.keys(r)){var i=r[a];i!=null&&i!==""&&(s+=" "+a+": "+i+n)}return s}function wp(r,e){if(e){var n="",s,a;return Array.isArray(e)?(s=e[0],a=e[1]):s=e,s&&(n+=cc(s)),a&&(n+=cc(a,!0)),n=n.trim(),n===""?null:n}return String(r)}function _t(r,e,n,s,a,i){var o=r[vl];if(o!==n||o===void 0){var l=Sp(n,s,i);l==null?r.removeAttribute("class"):e?r.className=l:r.setAttribute("class",l),r[vl]=n}else if(i&&a!==i)for(var f in i){var p=!!i[f];(a==null||p!==!!a[f])&&r.classList.toggle(f,p)}return i}function Vo(r,e={},n,s){for(var a in n){var i=n[a];e[a]!==i&&(n[a]==null?r.style.removeProperty(a):r.style.setProperty(a,i,s))}}function Un(r,e,n,s){var a=r[pl];if(a!==e){var i=wp(e,s);i==null?r.removeAttribute("style"):r.style.cssText=i,r[pl]=e}else s&&(Array.isArray(s)?(Vo(r,n?.[0],s[0]),Vo(r,n?.[1],s[1],"important")):Vo(r,n,s));return s}function kp(r,e){e?r.hasAttribute("selected")||r.setAttribute("selected",""):r.removeAttribute("selected")}function Ap(r,e){var n=r.__defaultValue,s=r.multiple,a=s?n??[]:null;if(!(s&&!wi(a))){r.selectedIndex;for(var i of r.options){var o=Ra(i);kp(i,s?a.includes(o):Sf(o,n))}}}function Bn(r,e,n=!1){if(r.multiple){if(e==null)return;if(!wi(e))return mv();for(var s of r.options)s.selected=e.includes(Ra(s));return}for(s of r.options){var a=Ra(s);if(Sf(a,e)){s.selected=!0;return}}(!n||e!==void 0)&&(r.selectedIndex=-1)}function Xt(r){var e=new MutationObserver(n=>{n.every(Tp)||("__defaultValue"in r&&Ap(r),"__value"in r&&Bn(r,r.__value))});e.observe(r,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),hd(()=>{e.disconnect()})}function kr(r,e,n=e){var s=new WeakSet,a=!0;ld(r,"change",i=>{var o=i?"[selected]":":checked",l;if(r.multiple)l=[].map.call(r.querySelectorAll(o),Ra);else{var f=r.querySelector(o)??r.querySelector("option:not([disabled])");l=f&&Ra(f)}n(l),r.__value=l,Ct!==null&&s.add(Ct)}),So(()=>{var i=e();if(r===document.activeElement){var o=Ct;if(s.has(o))return}if(Bn(r,i,a),a&&i===void 0){var l=r.querySelector(":checked");l!==null&&(i=Ra(l),n(i))}r.__value=i,a=!1})}function Ra(r){return"__value"in r?r.__value:r.value}function Tp(r){if(r.target.closest("selectedcontent")!==null)return!0;if(r.type==="childList"){var e=[...r.addedNodes,...r.removedNodes];return e.length>0&&e.every(n=>n.nodeName==="SELECTEDCONTENT")}return!1}const Rp=Symbol("is custom element"),xp=Symbol("is html"),Dp=nv?"progress":"PROGRESS";function ln(r,e){var n=gd(r);n.value===(n.value=e??void 0)||r.value===e&&(e!==0||r.nodeName!==Dp)||(r.value=e??"")}function Pr(r,e){var n=gd(r);n.checked!==(n.checked=e??void 0)&&(r.checked=e)}function T(r,e,n,s){var a=gd(r);a[e]!==(a[e]=n)&&(e==="loading"&&(r[tv]=n),n==null?r.removeAttribute(e):typeof n!="string"&&Ip(r).has(e)?r[e]=n:r.setAttribute(e,n))}function gd(r){return r[Ju]??={[Rp]:r.nodeName.includes("-"),[xp]:r.namespaceURI===fv}}var uc=new Map;function Ip(r){var e=r.getAttribute("is")||r.nodeName,n=uc.get(e);if(n)return n;uc.set(e,n=new Set);for(var s,a=r,i=Element.prototype;i!==a;){s=qu(a);for(var o in s)s[o].set&&o!=="innerHTML"&&o!=="textContent"&&o!=="innerText"&&n.add(o);a=Eo(a)}return n}function xn(r,e,n=e){var s=new WeakSet;ld(r,"input",async a=>{var i=a?r.defaultValue:r.value;if(i=zo(r)?jo(i):i,n(i),Ct!==null&&s.add(Ct),await Ma(),i!==(i=e())){var o=r.selectionStart,l=r.selectionEnd,f=r.value.length;if(r.value=i??"",l!==null){var p=r.value.length;o===l&&l===f&&p>f?(r.selectionStart=p,r.selectionEnd=p):(r.selectionStart=o,r.selectionEnd=Math.min(l,p))}}}),sr(e)==null&&r.value&&(n(zo(r)?jo(r.value):r.value),Ct!==null&&s.add(Ct)),Ti(()=>{var a=e();if(r===document.activeElement){var i=Ct;if(s.has(i))return}zo(r)&&a===jo(r.value)||r.type==="date"&&!a&&!r.value||a!==r.value&&(r.value=a??"")})}function vr(r,e,n=e){ld(r,"change",s=>{var a=s?r.defaultChecked:r.checked;n(a)}),sr(e)==null&&n(r.checked),Ti(()=>{var s=e();r.checked=!!s})}function zo(r){var e=r.type;return e==="number"||e==="range"}function jo(r){return r===""?null:+r}function Wo(r,e){return r===e||r?.[Ns]===e}function fn(r=id(),e,n,s){var a=zn.r,i=Kt;return So(()=>{var o,l;return Ti(()=>{o=l,l=s?.()||[],sr(()=>{Wo(n(...l),r)||(e(r,...l),o&&Wo(n(...o),r)&&e(null,...o))})}),()=>{let f=i;for(;f!==a&&f.parent!==null&&f.parent.f&ro;)f=f.parent;const p=()=>{l&&Wo(n(...l),r)&&e(null,...l)},_=f.teardown;f.teardown=()=>{p(),_?.()}}}),r}function H(r,e,n,s){var a=!0,i=(n&dv)!==0,o=(n&cv)!==0,l=s,f=!0,p=void 0,_=()=>o&&a?(p??=fi(s),t(p)):(f&&(f=!1,l=o?sr(s):s),l);let g;if(i){var k=Ns in r||ev in r;g=Aa(r,e)?.set??(k&&e in r?M=>r[e]=M:void 0)}var E,b=!1;i?[E,b]=Cv(()=>r[e]):E=r[e],E===void 0&&s!==void 0&&(E=_(),g&&(Sv(),g(E)));var w;if(w=()=>{var M=r[e];return M===void 0?_():(f=!0,M)},(n&lv)===0)return w;if(g){var x=r.$$legacy;return(function(M,z){return arguments.length>0?((!z||x||b)&&g(z?w():M),M):w()})}var D=!1,N=((n&ov)!==0?fi:mf)(()=>(D=!1,w()));i&&t(N);var R=Kt;return(function(M,z){if(arguments.length>0){const $=z?t(N):i?We(M):M;return u(N,$),D=!0,l!==void 0&&(l=$),M}return Ls&&D||(R.f&Nr)!==0?N.v:t(N)})}function Np(r){zn===null&&sd(),ot(()=>{const e=sr(r);if(typeof e=="function")return e})}function Cp(r){zn===null&&sd(),Np(()=>()=>sr(r))}const Pp="5";typeof window<"u"&&((window.__svelte??={}).v??=new Set).add(Pp);const kl=Symbol("homematic-manager.data-table");function Mp(r){of(kl,r)}function Op(){return lf(kl)?af(kl):void 0}function Lp(r,e={}){return r.replace(/\{(\w+)\}/g,(n,s)=>{const a=e[s];return a===void 0?n:String(a)})}function jf(r,e,n){!n||r.defaultPrevented||r.button!==0||r.metaKey||r.ctrlKey||(r.preventDefault(),n(e).then(s=>{s||window.open(e,"_blank","noopener,noreferrer")}))}var Fp=y(`<a class="hmm-github svelte-t2m24p" target="_blank" rel="noopener noreferrer"><svg width="16" height="16" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><path fill="currentColor" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38
3
3
  0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01
4
4
  1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95
5
5
  0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27
6
6
  2-.27s1.36.09 2 .27c1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82
7
7
  2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0
8
- .21.15.46.55.38A8.01 8.01 0 0 0 16 8c0-4.42-3.58-8-8-8Z"></path></svg></a>`);function Gp(r,e){ct(e,!0);let n=H(e,"openExternal",3,void 0),s=H(e,"testId",3,void 0);function a(o){jf(o,e.href,n())}var i=Fp();S(()=>{T(i,"href",e.href),T(i,"title",e.label),T(i,"aria-label",e.label),T(i,"data-testid",s())}),re("click",i,a),v(r,i),ut()}Et(["click"]);const Wf={ok:"✔",busy:"↻",absent:"–",bad:"✕"};function Kf(r){return r.subscribing===!0||(r.waiting===!0||r.reconnecting===!0)&&!r.connected?"busy":r.connected?"ok":r.absent===!0?"absent":"bad"}function Up(r){return r.filter(e=>!e.connected&&e.subscribing!==!0&&e.unreachable===!0).map(e=>e.name)}function Bp(r){const e=r.map(n=>Kf(n));return e.includes("bad")?"bad":e.includes("busy")?"busy":e.includes("ok")?"ok":"absent"}function Hp(r,e,n){if(r.callbackFailure!==void 0){const{port:s,inUse:a}=r.callbackFailure;return{text:a?n.portInUse(s):n.portFailed(s),bad:!0}}if(r.callbackUrl!==void 0)return{text:e?`${r.callbackUrl} · ${n.publish}`:r.callbackUrl,bad:!1}}function Vp(r){return r.find(e=>e.callbackWarning!==void 0)?.callbackWarning}function zp(r,e,n){const s=r.lite===!0?["lite-rpc",`${r.host}:${String(r.port)}`]:[r.protocol,`${n.port} ${String(r.port)}`];return r.tls===!0&&s.push(n.tls),e?.devices!==void 0&&s.push(n.devices(e.devices)),e?.dutyCycle!==void 0&&s.push(n.dutyCycle(e.dutyCycle)),s}var jp=y('<span role="img"> </span>');function Wp(r,e){ct(e,!0);let n=H(e,"backendConnected",3,!0),s=H(e,"allConnectedText",3,"Connected"),a=H(e,"someNotConnectedText",3,"Not connected"),i=H(e,"notPresentText",3,"Not present"),o=H(e,"subscribingText",3,"Subscribing"),l=H(e,"waitingText",3,"Waiting"),f=H(e,"reconnectingText",3,"Reconnecting"),p=H(e,"testId",3,void 0);const _=c(()=>Bp(e.interfaces)),g=c(()=>{if(!n())return a();switch(t(_)){case"ok":return s();case"busy":return e.interfaces.some(w=>w.subscribing===!0)?o():e.interfaces.some(w=>w.reconnecting===!0&&!w.connected)?f():l();case"absent":return i();default:return a()}});var k=jp();let E;var b=m(k,!0);S(()=>{E=_t(k,1,`hmm-connection hmm-connection-${t(_)??""}`,"svelte-18vw5u5",E,{"hmm-connection-offline":!n()}),T(k,"aria-label",t(g)),T(k,"title",t(g)),T(k,"data-mark",t(_)),T(k,"data-testid",p()),h(b,Wf[t(_)])}),v(r,k),ut()}var Kp=y('<span class="hmm-interface-warn svelte-m4i49t" aria-hidden="true">⚠</span>'),Yp=y('<button type="button" role="option"><span class="hmm-interface-store-dot svelte-m4i49t" aria-hidden="true"></span> <span class="hmm-interface-store-label svelte-m4i49t"> </span></button>'),qp=y('<div role="option" aria-selected="false" aria-disabled="true"><span class="hmm-interface-store-dot svelte-m4i49t" aria-hidden="true"></span> <span class="hmm-interface-store-label svelte-m4i49t"> </span></div>'),$p=y("<span> </span>"),Xp=y('<button type="button" role="option"><span class="hmm-interface-item-head svelte-m4i49t"><span class="hmm-interface-item-name svelte-m4i49t"> </span> <span><span class="hmm-interface-glyph svelte-m4i49t" aria-hidden="true"> </span> </span></span> <span class="hmm-interface-item-line svelte-m4i49t"> </span> <!></button>'),Qp=y('<button type="button" class="hmm-interface-retry svelte-m4i49t" data-testid="interface-callback-use-auto"> </button>'),Zp=y('<div class="hmm-interface-warning svelte-m4i49t" role="alert" data-testid="interface-callback-warning"><span class="svelte-m4i49t"> </span> <!></div>'),Jp=y('<div class="hmm-interface-foot svelte-m4i49t"><button type="button" class="hmm-interface-retry svelte-m4i49t"> </button></div>'),eg=y('<div class="hmm-interface-menu svelte-m4i49t"><div class="hmm-interface-head svelte-m4i49t"><span class="hmm-interface-host svelte-m4i49t" data-testid="interface-host"> </span> <span class="hmm-interface-backend svelte-m4i49t" data-testid="interface-backend"> </span></div> <div class="hmm-interface-list svelte-m4i49t" role="listbox"><!> <!></div> <!> <!></div>'),tg=y('<div class="hmm-interface svelte-m4i49t"><button type="button" class="hmm-interface-trigger svelte-m4i49t" aria-haspopup="listbox"><!> <!> <span class="hmm-interface-trigger-name svelte-m4i49t"> </span> <span class="hmm-interface-arrow svelte-m4i49t" aria-hidden="true">▾</span></button> <!></div>');function ng(r,e){ct(e,!0);let n=H(e,"selected",3,""),s=H(e,"host",3,""),a=H(e,"backendConnected",3,!0),i=H(e,"details",19,()=>({})),o=H(e,"label",3,"Select an interface"),l=H(e,"listLabel",3,"Interfaces"),f=H(e,"connectedText",3,"Connected"),p=H(e,"notConnectedText",3,"Not connected"),_=H(e,"notPresentText",3,"Not present"),g=H(e,"notAnsweringText",3,"Not answering"),k=H(e,"retryText",3,"Retry now"),E=H(e,"onretry",3,void 0),b=H(e,"subscribingText",3,"Subscribing"),w=H(e,"waitingText",3,"Waiting"),x=H(e,"reconnectingText",3,"Reconnecting"),D=H(e,"allConnectedText",3,"All interfaces are connected"),N=H(e,"someNotConnectedText",3,"Not every interface is connected"),R=H(e,"portLabel",3,"Port"),M=H(e,"tlsLabel",3,"TLS"),z=H(e,"devicesLabel",3,L=>`${String(L)} devices`),$=H(e,"dutyCycleLabel",3,L=>`Duty cycle ${String(L)} %`),le=H(e,"publishCallbackPorts",3,!1),fe=H(e,"callbackPortInUseLabel",3,L=>`Callback port ${String(L)} is in use`),de=H(e,"callbackPortFailedLabel",3,L=>`Callback port ${String(L)} cannot be opened`),B=H(e,"publishPortText",3,"Publish this port unchanged"),oe=H(e,"callbackWarningLabel",3,L=>L.reason==="notLocal"?`The callback address ${L.address} is not an address of this machine; ${L.auto} is used instead`:`The callback address ${L.address} is not in the CCU's network; the CCU may not reach it and send no events`),K=H(e,"useAutomaticText",3,"Use automatic"),X=H(e,"onuseautomatic",3,void 0),se=H(e,"onselect",3,void 0),j=H(e,"store",3,void 0),ne=H(e,"storeTestId",3,void 0),ye=H(e,"testId",3,void 0),xe=C(!1),ie=C(0),Ae=C(void 0),Te=C(void 0),me=C(void 0),P=C(void 0);const ce=c(()=>Vp(e.interfaces)),be=c(()=>[t(P),t(me)].filter(L=>L!==void 0)),ee=c(()=>E()===void 0?[]:Up(e.interfaces));let he=We([]);const G=c(()=>[...j()!==void 0&&j().selectable?[j().id]:[],...e.interfaces.map(L=>L.name)]),Q=c(()=>t(G).indexOf(n())),q=c(()=>j()!==void 0&&j().id===n()?j().label:n()),Y=c(()=>j()!==void 0&&j().selectable?0:-1);function ae(L,Pe){if(L==="bad"&&Pe.unreachable===!0)return g();switch(L){case"ok":return f();case"busy":return Pe.subscribing===!0?b():Pe.reconnecting===!0?x():w();case"absent":return _();default:return p()}}function J(L){return zp(L,i()[L.name],{port:R(),tls:M(),devices:z(),dutyCycle:$()}).join(" · ")}function ve(){u(ie,t(Q)<0?0:t(Q),!0),u(xe,!0)}function ge(L){u(xe,!1),L&&t(Te)?.focus()}function te(L){ge(!0),L!==n()&&se()?.(L)}function O(L){t(G).length!==0&&u(ie,(t(ie)+L+t(G).length)%t(G).length)}ot(()=>{t(xe)&&he[t(ie)]?.focus()});function U(L){if(L.key==="ArrowDown"||L.key==="ArrowUp"){L.preventDefault(),t(xe)?O(L.key==="ArrowDown"?1:-1):ve();return}L.key==="Escape"&&t(xe)&&(L.preventDefault(),ge(!0))}function I(L,Pe){switch(L.key){case"ArrowDown":{L.preventDefault(),O(1);break}case"ArrowUp":{L.preventDefault(),O(-1);break}case"Home":{L.preventDefault(),u(ie,0);break}case"End":{L.preventDefault(),u(ie,t(G).length-1);break}case"Enter":case" ":{L.preventDefault(),te(t(G)[Pe]??"");break}case"Escape":{L.preventDefault(),ge(!0);break}case"Tab":{const Ge=t(be)[0];if(!L.shiftKey&&Ge!==void 0){L.preventDefault(),Ge.focus();break}ge(!1);break}}}function F(L){const Pe=t(be).findIndex(Ge=>Ge===L.currentTarget);if(L.key==="Escape")L.preventDefault(),ge(!0);else if(L.key==="Tab"&&L.shiftKey)L.preventDefault(),(t(be)[Pe-1]??he[t(ie)])?.focus();else if(L.key==="Tab"){const Ge=t(be)[Pe+1];Ge===void 0?ge(!1):(L.preventDefault(),Ge.focus())}}function Ee(L){t(xe)&&t(Ae)&&L.target instanceof Node&&!t(Ae).contains(L.target)&&ge(!1)}var Ie=tg();Ir("mousedown",va,Ee);var Me=A(Ie),Ve=A(Me);{let L=c(()=>ye()===void 0?void 0:`${ye()}-summary`);Wp(Ve,{get interfaces(){return e.interfaces},get backendConnected(){return a()},get allConnectedText(){return D()},get someNotConnectedText(){return N()},get notPresentText(){return _()},get subscribingText(){return b()},get waitingText(){return w()},get reconnectingText(){return x()},get testId(){return t(L)}})}var ze=d(Ve,2);{var nt=L=>{var Pe=Kp();S(Ge=>{T(Pe,"title",Ge),T(Pe,"data-testid",ye()===void 0?void 0:`${ye()}-callback-warning`)},[()=>oe()(t(ce))]),v(L,Pe)};W(ze,L=>{t(ce)!==void 0&&L(nt)})}var Ze=d(ze,2),_e=m(Ze,!0);fn(Me,L=>u(Te,L),()=>t(Te));var Se=d(Me,2);{var V=L=>{var Pe=eg(),Ge=A(Pe),qe=A(Ge),we=m(qe,!0),Ce=d(qe,2),Oe=m(Ce,!0),Be=d(Ge,2),pe=A(Be);{var De=dt=>{var ke=St(),Le=Ne(ke);{var $e=lt=>{var Je=Yp();let Pt;var Tt=d(A(Je),2),Lt=m(Tt,!0);fn(Je,Qt=>he[t(Y)]=Qt,()=>he?.[t(Y)]),S(()=>{Pt=_t(Je,1,`hmm-interface-store hmm-meta-${j().mark??""}`,"svelte-m4i49t",Pt,{"hmm-interface-item-current":j().id===n()}),T(Je,"aria-selected",j().id===n()),T(Je,"tabindex",t(Y)===t(ie)?0:-1),T(Je,"title",j().title),T(Je,"data-mark",j().mark),T(Je,"data-provider",j().provider),T(Je,"data-testid",ne()),h(Lt,j().label)}),re("click",Je,()=>te(j().id)),re("keydown",Je,Qt=>I(Qt,t(Y))),v(lt,Je)},at=lt=>{var Je=qp(),Pt=d(A(Je),2),Tt=m(Pt,!0);S(()=>{_t(Je,1,`hmm-interface-store hmm-interface-store-off hmm-meta-${j().mark??""}`,"svelte-m4i49t"),T(Je,"title",j().title),T(Je,"data-mark",j().mark),T(Je,"data-provider",j().provider),T(Je,"data-testid",ne()),h(Tt,j().label)}),v(lt,Je)};W(Le,lt=>{j().selectable?lt($e):lt(at,-1)})}v(dt,ke)};W(pe,dt=>{j()!==void 0&&dt(De)})}var Ue=d(pe,2);Xe(Ue,19,()=>e.interfaces,dt=>dt.name,(dt,ke,Le)=>{const $e=c(()=>Kf(t(ke))),at=c(()=>t(Y)+1+t(Le)),lt=c(()=>Hp(t(ke),le(),{portInUse:fe(),portFailed:de(),publish:B()}));var Je=Xp();let Pt;var Tt=A(Je),Lt=A(Tt),Qt=m(Lt,!0),pn=d(Lt,2),wn=A(pn),tn=m(wn,!0),bn=d(wn),Pn=d(Tt,2),$n=m(Pn,!0),Xn=d(Pn,2);{var Zt=Ft=>{var Jt=$p();let Qn;var Mn=m(Jt,!0);S(()=>{Qn=_t(Jt,1,"hmm-interface-item-callback svelte-m4i49t",null,Qn,{"hmm-interface-item-callback-bad":t(lt).bad}),T(Jt,"data-testid",`interface-callback-${t(ke).name}`),h(Mn,t(lt).text)}),v(Ft,Jt)};W(Xn,Ft=>{t(lt)!==void 0&&Ft(Zt)})}fn(Je,(Ft,Jt)=>he[Jt]=Ft,Ft=>he?.[Ft],()=>[t(at)]),S((Ft,Jt)=>{Pt=_t(Je,1,"hmm-interface-item svelte-m4i49t",null,Pt,{"hmm-interface-item-current":t(ke).name===n()}),T(Je,"aria-selected",t(ke).name===n()),T(Je,"tabindex",t(at)===t(ie)?0:-1),T(Je,"title",t($e)==="bad"?t(ke).error??p():void 0),T(Je,"data-testid",`interface-item-${t(ke).name}`),h(Qt,t(ke).name),_t(pn,1,`hmm-interface-mark hmm-interface-mark-${t($e)??""}`,"svelte-m4i49t"),T(pn,"data-mark",t($e)),h(tn,Wf[t($e)]),h(bn,` ${Ft??""}`),h($n,Jt)},[()=>ae(t($e),t(ke)),()=>J(t(ke))]),re("click",Je,()=>te(t(ke).name)),re("keydown",Je,Ft=>I(Ft,t(at))),v(dt,Je)});var Fe=d(Be,2);{var Ye=dt=>{var ke=Zp(),Le=A(ke),$e=m(Le,!0),at=d(Le,2);{var lt=Je=>{var Pt=Qp(),Tt=m(Pt,!0);fn(Pt,Lt=>u(P,Lt),()=>t(P)),S(()=>h(Tt,K())),re("click",Pt,()=>{ge(!1),X()()}),re("keydown",Pt,F),v(Je,Pt)};W(at,Je=>{X()!==void 0&&Je(lt)})}S(Je=>h($e,Je),[()=>oe()(t(ce))]),v(dt,ke)};W(Fe,dt=>{t(ce)!==void 0&&dt(Ye)})}var tt=d(Fe,2);{var ft=dt=>{var ke=Jp(),Le=A(ke),$e=m(Le,!0);fn(Le,at=>u(me,at),()=>t(me)),S(()=>{T(Le,"data-testid",ye()===void 0?void 0:`${ye()}-retry`),h($e,k())}),re("click",Le,()=>E()?.(t(ee))),re("keydown",Le,F),v(dt,ke)};W(tt,dt=>{t(ee).length>0&&dt(ft)})}S(()=>{h(we,s()===""?"—":s()),h(Oe,a()?f():p()),T(Be,"aria-label",l())}),v(L,Pe)};W(Se,L=>{t(xe)&&L(V)})}fn(Ie,L=>u(Ae,L),()=>t(Ae)),S(()=>{T(Ie,"data-testid",ye()),T(Me,"aria-expanded",t(xe)),T(Me,"aria-label",o()),T(Me,"title",o()),T(Me,"data-testid",ye()===void 0?void 0:`${ye()}-trigger`),h(_e,t(q))}),re("click",Me,()=>t(xe)?ge(!1):ve()),re("keydown",Me,U),v(r,Ie),ut()}Et(["click","keydown"]);var rg=y('<div class="hmm-loader svelte-v1tg6x" role="status" aria-live="polite"><div class="hmm-loader-box svelte-v1tg6x"><div class="hmm-loader-spinner svelte-v1tg6x" aria-hidden="true"></div> <div class="hmm-loader-text svelte-v1tg6x"> </div></div></div>');function sg(r,e){let n=H(e,"visible",3,!1),s=H(e,"text",3,"Loading Homematic Manager..."),a=H(e,"testId",3,void 0);var i=St(),o=Ne(i);{var l=f=>{var p=rg(),_=A(p),g=d(A(_),2),k=m(g,!0);S(()=>{T(p,"data-testid",a()),h(k,s())}),v(f,p)};W(o,f=>{n()&&f(l)})}v(r,i)}function ag(r){return r===void 0||!r.reachable?"bad":r.writable?"ok":"readonly"}function ig(r,e){return r===void 0?"":[e.label,r.reachable?e.reachable:e.unreachable,r.reachable?r.writable?e.writable:e.readOnly:void 0,e.detail(r),r.implementation,r.error,r.certificate===void 0?void 0:e.certificate?.(r.certificate)??r.certificate.code].filter(s=>s!==void 0&&s!=="").join(" · ")}class yr extends Error{kind;faultCode;faultString;problems;constructor(e){super(e.message),this.name="ApiRequestError",this.kind=e.kind,e.faultCode!==void 0&&(this.faultCode=e.faultCode),e.faultString!==void 0&&(this.faultString=e.faultString),e.problems!==void 0&&(this.problems=e.problems)}toApiError(){return{...{message:this.message,kind:this.kind},...this.faultCode===void 0?{}:{faultCode:this.faultCode},...this.faultString===void 0?{}:{faultString:this.faultString},...this.problems===void 0?{}:{problems:this.problems}}}}function Yf(r){if(typeof r!="object"||r===null)return!1;const e=r;return typeof e.message=="string"&&typeof e.kind=="string"}function Di(r,e="internal"){return r instanceof yr?r:Yf(r)?new yr(r):r instanceof Error?new yr({message:r.message,kind:e}):new yr({message:String(r),kind:e})}const Al=5,og=5e3,lg=15e3;class dg{#e=C(We([]));get items(){return t(this.#e)}set items(e){u(this.#e,e,!0)}#n;#t;#s;#a;#r;#i=new Set;#l;#o=new Map;#d=1;constructor(e,n={}){this.#n=n.max??20,this.#t=n.now??(()=>Date.now()),this.#s=n.infoTtlMs??og,this.#a=n.warnTtlMs??lg,this.#r=n.hintFor,this.#l=e.on("notice",s=>{s.level!=="debug"&&this.push(s.level,s.message,s.interfaceName)})}get visible(){return this.items.slice(Math.max(0,this.items.length-Al))}get hidden(){return Math.max(0,this.items.length-Al)}push(e,n,s){const a=this.#d;this.#d+=1;const i={id:a,level:e,message:n,timestamp:this.#t(),...s===void 0?{}:{interfaceName:s}},o=[...this.items,i],l=o.length>this.#n?o.slice(0,o.length-this.#n):[];for(const f of l)this.#h(f.id);return this.items=l.length>0?o.slice(l.length):o,this.#f(a,e),e!=="info"&&this.#c(n),a}#c(e){const n=this.#r?.(e);n===void 0||n===""||this.#i.has(n)||(this.#i.add(n),this.push("error",n))}fromError(e,n){const s=Di(e),a=s.faultCode===void 0?"":` (${s.faultString??s.message}, ${String(s.faultCode)})`,i=`${n===void 0?"":`${n}: `}${s.message}${a}`;return this.push("error",i)}dismiss(e){this.#h(e),this.items=this.items.filter(n=>n.id!==e)}clear(){for(const e of[...this.#o.keys()])this.#h(e);this.items=[]}dispose(){this.clear(),this.#l()}#u(e){return e==="info"?this.#s:e==="warn"?this.#a:0}#f(e,n){const s=this.#u(n);if(s<=0)return;const a=setTimeout(()=>{this.#o.delete(e),this.items=this.items.filter(i=>i.id!==e)},s);a.unref?.(),this.#o.set(e,a)}#h(e){const n=this.#o.get(e);n!==void 0&&(clearTimeout(n),this.#o.delete(e))}}var cg=y('<button type="button" class="hmm-notices-more svelte-1pqi0mh"> </button>'),ug=y("<strong> </strong>"),fg=y('<div><span class="hmm-notice-text svelte-1pqi0mh"><!> </span> <button type="button" class="hmm-notice-close svelte-1pqi0mh">✕</button></div>'),hg=y('<div class="hmm-notices svelte-1pqi0mh" role="log" aria-live="polite"><!> <!></div>');function mg(r,e){ct(e,!0);let n=H(e,"ondismiss",3,void 0),s=H(e,"dismissLabel",3,"Dismiss"),a=H(e,"visibleCount",3,Al),i=H(e,"moreLabel",3,w=>`${w} more`),o=H(e,"lessLabel",3,"Show fewer"),l=H(e,"testId",3,void 0),f=C(!1);const p=c(()=>Math.max(0,e.notices.length-a())),_=c(()=>t(f)?e.notices:e.notices.slice(e.notices.length-Math.min(e.notices.length,a())));ot(()=>{t(p)===0&&t(f)&&u(f,!1)});var g=hg(),k=A(g);{var E=w=>{var x=cg(),D=m(x,!0);S(N=>{T(x,"data-testid",l()===void 0?void 0:`${l()}-more`),T(x,"aria-expanded",t(f)),h(D,N)},[()=>t(f)?o():i()(t(p))]),re("click",x,()=>u(f,!t(f))),v(w,x)};W(k,w=>{t(p)>0&&w(E)})}var b=d(k,2);Xe(b,17,()=>t(_),w=>w.id,(w,x)=>{var D=fg();let N;var R=A(D),M=A(R);{var z=fe=>{var de=ug(),B=m(de,!0);S(()=>h(B,t(x).interfaceName)),v(fe,de)};W(M,fe=>{t(x).interfaceName!==void 0&&fe(z)})}var $=d(M),le=d(R,2);S(()=>{N=_t(D,1,"hmm-notice svelte-1pqi0mh",null,N,{"hmm-notice-warn":t(x).level==="warn","hmm-notice-error":t(x).level==="error"}),h($,` ${t(x).message??""}`),T(le,"aria-label",s())}),re("click",le,()=>n()?.(t(x).id)),v(w,D)}),S(()=>T(g,"data-testid",l())),v(r,g),ut()}Et(["click"]);function uo(r){return r===void 0?"":typeof r=="string"?r:typeof r=="number"||typeof r=="boolean"?String(r):JSON.stringify(r)}function qf(r,e){return new Date(r).toLocaleTimeString(e,{hour12:!1})}function ca(r,e){const n=new Date(r);return`${n.toLocaleDateString(e)} ${n.toLocaleTimeString(e,{hour12:!1})}`}function vg(r){return r<1e3?`${Math.round(r)} ms`:`${(r/1e3).toFixed(2)} s`}function fc(r){return r.map(e=>typeof e=="string"?e:JSON.stringify(e)).join(", ")}const Yi={minWidth:320,minHeight:160},Tl=32;function pg(r,e){return{...r,minHeight:Math.max(0,Math.min(r.minHeight,e.height-Tl))}}function La(r,e,n){return Math.min(Math.max(r,e),Math.max(e,n))}function $f(r,e){return{...r,left:Math.round(La(r.left,0,e.width-r.width)),top:Math.round(La(r.top,0,e.height-r.height))}}function gg(r,e,n,s){return $f({...r,left:r.left+e,top:r.top+n},s)}function bg(r,e,n,s,a,i=Yi){const o=r.left+r.width,l=r.top+r.height,f=e==="w",p=e==="n",_=f||e==="e"||e==="se",g=p||e==="s"||e==="se",k=Math.max(i.minWidth,f?o:a.width-r.left),E=Math.max(i.minHeight,p?l:a.height-r.top),b=_?Math.round(La(r.width+(f?-n:n),i.minWidth,Math.min(k,a.width))):r.width,w=g?Math.round(La(r.height+(p?-s:s),i.minHeight,Math.min(E,a.height))):r.height;return $f({left:f?o-b:r.left,top:p?l-w:r.top,width:b,height:w},a)}const _g=.5,fo=120;function bd(r,e){return{min:fo,max:Math.max(fo,r-e)}}function Ko(r,e){const{min:n,max:s}=bd(r,e);return Math.round(La(r*_g,n,s))}function hc(r,e,n,s){const{min:a,max:i}=bd(n,s);return Math.round(La(r-e,a,i))}const Xf=new Map;function mc(r,e){Xf.set(r,e)}function Eg(r){return Xf.get(r)}const Qf=new Map;function yg(r,e){Qf.set(r,e)}function Sg(r){return Qf.get(r)}var wg=y('<li class="hmm-rpclog-entry hmm-rpclog-pending svelte-7sszxb"><span class="hmm-rpclog-spinner svelte-7sszxb" aria-hidden="true"></span> <span class="hmm-rpclog-origin svelte-7sszxb"> </span> <span class="hmm-rpclog-method hmm-mono svelte-7sszxb"> </span> <span class="hmm-rpclog-params hmm-mono svelte-7sszxb"> </span> <span class="hmm-rpclog-status svelte-7sszxb"> </span></li>'),kg=y('<li><span class="hmm-rpclog-time svelte-7sszxb"> </span> <span class="hmm-rpclog-origin svelte-7sszxb"> </span> <span class="hmm-rpclog-method hmm-mono svelte-7sszxb"> </span> <span class="hmm-rpclog-params hmm-mono svelte-7sszxb"> </span> <span class="hmm-rpclog-status svelte-7sszxb"><!></span> <span class="hmm-rpclog-duration svelte-7sszxb"> </span> <button type="button" class="hmm-rpclog-open svelte-7sszxb">▸</button></li>'),Ag=y('<li class="hmm-rpclog-empty svelte-7sszxb"> </li>'),Tg=y('<aside class="hmm-rpclog svelte-7sszxb"><div class="hmm-rpclog-handle svelte-7sszxb" role="separator" aria-orientation="horizontal" tabindex="0" data-resize="n"></div> <header class="hmm-rpclog-head svelte-7sszxb"><strong class="hmm-rpclog-title svelte-7sszxb"> </strong> <label class="hmm-rpclog-filter svelte-7sszxb"><input type="checkbox"/> </label> <button type="button" class="hmm-button"> </button> <button type="button" class="hmm-rpclog-close svelte-7sszxb">✕</button></header> <ol class="hmm-rpclog-list svelte-7sszxb"><!> <!> <!></ol></aside>');function Rg(r,e){ct(e,!0);let n=H(e,"open",15,!1),s=H(e,"pending",19,()=>[]),a=H(e,"title",3,"RPC log"),i=H(e,"emptyText",3,"No RPC calls yet"),o=H(e,"pendingText",3,"in progress"),l=H(e,"clearLabel",3,"Clear"),f=H(e,"closeLabel",3,"Close"),p=H(e,"resizeLabel",3,"Resize the RPC log"),_=H(e,"hideBackground",15,!1),g=H(e,"hideBackgroundLabel",3,"Hide background calls"),k=H(e,"originLabels",19,()=>({console:"console",ui:"UI",background:"background"})),E=H(e,"openLabel",3,"Open in console"),b=H(e,"onopen",3,void 0),w=H(e,"reservedHeight",3,void 0),x=H(e,"onclear",3,void 0),D=H(e,"testId",3,void 0);function N(K){const X=uo(K.result);return K.resultBytes===void 0?X:`${X} (${String(Math.round(K.resultBytes/1024))} kB)`}const R="rpclog";let M=C(We(Eg(R)));function z(){if(w()!==void 0)return w();const K=getComputedStyle(document.documentElement).getPropertyValue("--hmm-header-height"),X=Number.parseFloat(K);return Number.isFinite(X)?X:36}ot(()=>{n()&&t(M)===void 0&&u(M,Ko(window.innerHeight,z()),!0)});function $(K){if(K.button!==0)return;const X=t(M)??Ko(window.innerHeight,z()),se=K.clientY;K.preventDefault();const j=ye=>{u(M,hc(X,ye.clientY-se,window.innerHeight,z()),!0)},ne=()=>{window.removeEventListener("pointermove",j),window.removeEventListener("pointerup",ne),window.removeEventListener("pointercancel",ne),t(M)!==void 0&&mc(R,t(M))};window.addEventListener("pointermove",j),window.addEventListener("pointerup",ne),window.addEventListener("pointercancel",ne)}const le=c(()=>n()&&t(M)!==void 0?bd(window.innerHeight,z()).max:fo);function fe(K){const X=K.key==="ArrowUp"?-20:K.key==="ArrowDown"?20:0;if(X===0)return;K.preventDefault();const se=t(M)??Ko(window.innerHeight,z());u(M,hc(se,X,window.innerHeight,z()),!0),mc(R,t(M))}var de=St(),B=Ne(de);{var oe=K=>{var X=Tg();let se;var j=A(X),ne=d(j,2),ye=A(ne),xe=m(ye,!0),ie=d(ye,2),Ae=A(ie),Te=d(Ae),me=d(ie,2),P=m(me,!0),ce=d(me,2),be=d(ne,2),ee=A(be);Xe(ee,17,s,q=>q.id,(q,Y)=>{var ae=wg(),J=d(A(ae),2),ve=m(J,!0),ge=d(J,2),te=m(ge),O=d(ge,2),U=m(O,!0),I=d(O,2),F=m(I,!0);S(Ee=>{h(ve,k().ui),h(te,`${t(Y).interfaceName??""} ${t(Y).method??""}`),h(U,Ee),h(F,o())},[()=>fc(t(Y).params)]),v(q,ae)});var he=d(ee,2);Xe(he,17,()=>e.entries,q=>q.id,(q,Y)=>{var ae=kg();let J;var ve=A(ae),ge=m(ve,!0),te=d(ve,2),O=m(te,!0),U=d(te,2),I=m(U),F=d(U,2),Ee=m(F,!0),Ie=d(F,2),Me=A(Ie);{var Ve=Se=>{var V=Cn();S(L=>h(V,L),[()=>N(t(Y))]),v(Se,V)},ze=Se=>{var V=Cn();S(()=>h(V,t(Y).error??"")),v(Se,V)};W(Me,Se=>{t(Y).ok?Se(Ve):Se(ze,-1)})}var nt=d(Ie,2),Ze=m(nt,!0),_e=d(nt,2);S((Se,V,L)=>{J=_t(ae,1,"hmm-rpclog-entry svelte-7sszxb",null,J,{"hmm-rpclog-failed":!t(Y).ok,"hmm-rpclog-background":t(Y).origin==="background"}),T(ae,"data-origin",t(Y).origin),h(ge,Se),h(O,k()[t(Y).origin]),h(I,`${t(Y).interfaceName??""} ${t(Y).method??""}`),h(Ee,V),h(Ze,L),T(_e,"title",E()),T(_e,"aria-label",`${E()}: ${t(Y).method}`)},[()=>qf(t(Y).timestamp),()=>fc(t(Y).params),()=>vg(t(Y).durationMs)]),re("click",_e,()=>b()?.(t(Y))),v(q,ae)});var G=d(he,2);{var Q=q=>{var Y=Ag(),ae=m(Y,!0);S(()=>h(ae,i())),v(q,Y)};W(G,q=>{e.entries.length===0&&s().length===0&&q(Q)})}S(()=>{T(X,"aria-label",a()),T(X,"data-testid",D()),se=Un(X,"",se,{height:t(M)===void 0?void 0:`${t(M)}px`}),T(j,"aria-label",p()),T(j,"aria-valuenow",t(M)??0),T(j,"aria-valuemin",fo),T(j,"aria-valuemax",t(le)),T(j,"data-testid",D()===void 0?void 0:`${D()}-resize`),h(xe,a()),T(Ae,"data-testid",D()===void 0?void 0:`${D()}-hide-background`),h(Te,` ${g()??""}`),h(P,l()),T(ce,"aria-label",f())}),re("pointerdown",j,$),re("keydown",j,fe),vr(Ae,_),re("click",me,()=>x()?.()),re("click",ce,()=>n(!1)),v(K,X)};W(B,K=>{n()&&K(oe)})}v(r,de),ut()}Et(["pointerdown","keydown","click"]);var xg=y('<button type="button" class="hmm-dialog-close svelte-jby388">✕</button>'),Dg=y('<div class="hmm-dialog-buttons svelte-jby388"><!></div>'),Ig=y('<div aria-hidden="true"></div>'),Ng=y('<dialog><div><span class="hmm-dialog-title svelte-jby388"> </span> <!></div> <div class="hmm-dialog-body svelte-jby388"><!></div> <!> <!></dialog>');function En(r,e){ct(e,!0);let n=H(e,"open",15,!1),s=H(e,"title",3,""),a=H(e,"modal",3,!0),i=H(e,"width",3,"640px"),o=H(e,"height",3,void 0),l=H(e,"closable",3,!0),f=H(e,"onclose",3,void 0),p=H(e,"children",3,void 0),_=H(e,"buttons",3,void 0),g=H(e,"closeLabel",3,"Close"),k=H(e,"minWidth",3,void 0),E=H(e,"minHeight",3,void 0),b=H(e,"movable",3,!0),w=H(e,"top",3,void 0),x=H(e,"testId",3,void 0),D=C(void 0),N,R=C(void 0);const M=c(()=>x()??s()),z=c(()=>Number(/^(\d+)px$/.exec(i())?.[1]??Number.NaN)),$=c(()=>({minWidth:k()??(Number.isNaN(t(z))?Yi.minWidth:Math.max(Yi.minWidth,t(z))),minHeight:E()??Yi.minHeight}));ot(()=>{const Q=t(D);Q&&(n()&&!Q.open?(N=document.activeElement instanceof HTMLElement?document.activeElement:void 0,u(R,t(M)===""?void 0:Sg(t(M)),!0),a()?Q.showModal():Q.show()):!n()&&Q.open&&Q.close())});function le(){n(!1),t(D)?.open&&t(D).close(),f()?.(),N?.focus(),N=void 0}function fe(){return{width:window.innerWidth,height:window.innerHeight}}function de(Q,q){const Y=t(D);if(!Y||!b()||Q.button!==0)return;const ae=Y.getBoundingClientRect(),J={left:ae.left,top:ae.top,width:ae.width,height:ae.height},ve=Q.clientX,ge=Q.clientY;Q.preventDefault();const te=U=>{const I=U.clientX-ve,F=U.clientY-ge;u(R,q==="move"?gg(J,I,F,fe()):bg(J,q,I,F,fe(),pg(t($),fe())),!0)},O=()=>{window.removeEventListener("pointermove",te),window.removeEventListener("pointerup",O),window.removeEventListener("pointercancel",O),t(R)&&t(M)!==""&&yg(t(M),t(R))};window.addEventListener("pointermove",te),window.addEventListener("pointerup",O),window.addEventListener("pointercancel",O)}function B(Q){Q.target.closest("button")===null&&de(Q,"move")}const oe=["n","e","s","w","se"];function K(Q){Q.preventDefault(),l()&&le()}var X=Ng();let se,j;var ne=A(X);let ye;var xe=A(ne),ie=m(xe,!0),Ae=d(xe,2);{var Te=Q=>{var q=xg();S(()=>T(q,"aria-label",g())),re("click",q,le),v(Q,q)};W(Ae,Q=>{l()&&Q(Te)})}var me=d(ne,2),P=A(me);{var ce=Q=>{var q=St(),Y=Ne(q);qs(Y,p),v(Q,q)};W(P,Q=>{p()&&Q(ce)})}var be=d(me,2);{var ee=Q=>{var q=Dg(),Y=A(q);qs(Y,_),v(Q,q)};W(be,Q=>{_()&&Q(ee)})}var he=d(be,2);{var G=Q=>{var q=St(),Y=Ne(q);Xe(Y,16,()=>oe,ae=>ae,(ae,J)=>{var ve=Ig();S(()=>{_t(ve,1,`hmm-dialog-resize hmm-dialog-resize-${J??""}`,"svelte-jby388"),T(ve,"data-resize",J)}),re("pointerdown",ve,ge=>de(ge,J)),v(ae,ve)}),v(Q,q)};W(he,Q=>{b()&&Q(G)})}fn(X,Q=>u(D,Q),()=>t(D)),S(()=>{se=_t(X,1,"hmm-dialog svelte-jby388",null,se,{"hmm-dialog-placed":t(R)!==void 0}),T(X,"data-testid",x()),T(X,"aria-label",s()===""?void 0:s()),j=Un(X,"",j,{width:t(R)===void 0?i():`${t(R).width}px`,height:t(R)===void 0?o():`${t(R).height}px`,"min-height":t(R)===void 0&&E()!==void 0?`min(${E()}px, calc(100vh - ${Tl}px))`:void 0,"margin-top":t(R)===void 0?w():void 0,"max-height":t(R)===void 0&&w()!==void 0?`calc(100vh - ${w()} - ${Tl/2}px)`:void 0,left:t(R)===void 0?void 0:`${t(R).left}px`,top:t(R)===void 0?void 0:`${t(R).top}px`}),ye=_t(ne,1,"hmm-dialog-titlebar svelte-jby388",null,ye,{"hmm-dialog-titlebar-movable":b()}),h(ie,s())}),Ir("cancel",X,K),Ir("close",X,()=>{n()&&le()}),re("pointerdown",ne,B),v(r,X),ut()}Et(["pointerdown","click"]);var Cg=y('<button type="button" class="hmm-button"> </button>'),Pg=y('<p class="hmm-progress-last hmm-mono svelte-1r0w7uc"> </p>'),Mg=y('<p class="hmm-progress-line svelte-1r0w7uc"> </p> <progress class="hmm-progress svelte-1r0w7uc"></progress> <!>',1);function Zf(r,e){ct(e,!0);let n=H(e,"progress",3,void 0),s=H(e,"title",3,"RPC execution"),a=H(e,"cancelLabel",3,void 0),i=H(e,"oncancel",3,void 0),o=H(e,"testId",3,void 0),l=c(()=>n()!==void 0);En(r,{get title(){return s()},modal:!0,closable:!1,width:"420px",get testId(){return o()},get open(){return t(l)},set open(p){u(l,p)},buttons:p=>{var _=St(),g=Ne(_);{var k=E=>{var b=Cg(),w=m(b,!0);S(()=>h(w,a())),re("click",b,()=>i()?.()),v(E,b)};W(g,E=>{a()!==void 0&&E(k)})}v(p,_)},children:(p,_)=>{var g=St(),k=Ne(g);{var E=b=>{var w=Mg(),x=Ne(w),D=m(x),N=d(x,2),R=d(N,2);{var M=z=>{var $=Pg(),le=m($);S(()=>h(le,`${n().last.address??""}
8
+ .21.15.46.55.38A8.01 8.01 0 0 0 16 8c0-4.42-3.58-8-8-8Z"></path></svg></a>`);function Gp(r,e){ut(e,!0);let n=H(e,"openExternal",3,void 0),s=H(e,"testId",3,void 0);function a(o){jf(o,e.href,n())}var i=Fp();S(()=>{T(i,"href",e.href),T(i,"title",e.label),T(i,"aria-label",e.label),T(i,"data-testid",s())}),re("click",i,a),v(r,i),ft()}Et(["click"]);const Wf={ok:"✔",busy:"↻",absent:"–",bad:"✕"};function Kf(r){return r.subscribing===!0||(r.waiting===!0||r.reconnecting===!0)&&!r.connected?"busy":r.connected?"ok":r.absent===!0?"absent":"bad"}function Up(r){return r.filter(e=>!e.connected&&e.subscribing!==!0&&e.unreachable===!0).map(e=>e.name)}function Bp(r){const e=r.map(n=>Kf(n));return e.includes("bad")?"bad":e.includes("busy")?"busy":e.includes("ok")?"ok":"absent"}function Hp(r,e,n){if(r.callbackFailure!==void 0){const{port:s,inUse:a}=r.callbackFailure;return{text:a?n.portInUse(s):n.portFailed(s),bad:!0}}if(r.callbackUrl!==void 0)return{text:e?`${r.callbackUrl} · ${n.publish}`:r.callbackUrl,bad:!1}}function Vp(r){return r.find(e=>e.callbackWarning!==void 0)?.callbackWarning}function zp(r,e,n){const s=r.lite===!0?["lite-rpc",`${r.host}:${String(r.port)}`]:[r.protocol,`${n.port} ${String(r.port)}`];return r.tls===!0&&s.push(n.tls),e?.devices!==void 0&&s.push(n.devices(e.devices)),e?.dutyCycle!==void 0&&s.push(n.dutyCycle(e.dutyCycle)),s}var jp=y('<span role="img"> </span>');function Wp(r,e){ut(e,!0);let n=H(e,"backendConnected",3,!0),s=H(e,"allConnectedText",3,"Connected"),a=H(e,"someNotConnectedText",3,"Not connected"),i=H(e,"notPresentText",3,"Not present"),o=H(e,"subscribingText",3,"Subscribing"),l=H(e,"waitingText",3,"Waiting"),f=H(e,"reconnectingText",3,"Reconnecting"),p=H(e,"testId",3,void 0);const _=c(()=>Bp(e.interfaces)),g=c(()=>{if(!n())return a();switch(t(_)){case"ok":return s();case"busy":return e.interfaces.some(w=>w.subscribing===!0)?o():e.interfaces.some(w=>w.reconnecting===!0&&!w.connected)?f():l();case"absent":return i();default:return a()}});var k=jp();let E;var b=m(k,!0);S(()=>{E=_t(k,1,`hmm-connection hmm-connection-${t(_)??""}`,"svelte-18vw5u5",E,{"hmm-connection-offline":!n()}),T(k,"aria-label",t(g)),T(k,"title",t(g)),T(k,"data-mark",t(_)),T(k,"data-testid",p()),h(b,Wf[t(_)])}),v(r,k),ft()}var Kp=y('<span class="hmm-interface-warn svelte-m4i49t" aria-hidden="true">⚠</span>'),Yp=y('<button type="button" role="option"><span class="hmm-interface-store-dot svelte-m4i49t" aria-hidden="true"></span> <span class="hmm-interface-store-label svelte-m4i49t"> </span></button>'),qp=y('<div role="option" aria-selected="false" aria-disabled="true"><span class="hmm-interface-store-dot svelte-m4i49t" aria-hidden="true"></span> <span class="hmm-interface-store-label svelte-m4i49t"> </span></div>'),$p=y("<span> </span>"),Xp=y('<button type="button" role="option"><span class="hmm-interface-item-head svelte-m4i49t"><span class="hmm-interface-item-name svelte-m4i49t"> </span> <span><span class="hmm-interface-glyph svelte-m4i49t" aria-hidden="true"> </span> </span></span> <span class="hmm-interface-item-line svelte-m4i49t"> </span> <!></button>'),Qp=y('<button type="button" class="hmm-interface-retry svelte-m4i49t" data-testid="interface-callback-use-auto"> </button>'),Zp=y('<div class="hmm-interface-warning svelte-m4i49t" role="alert" data-testid="interface-callback-warning"><span class="svelte-m4i49t"> </span> <!></div>'),Jp=y('<div class="hmm-interface-foot svelte-m4i49t"><button type="button" class="hmm-interface-retry svelte-m4i49t"> </button></div>'),eg=y('<div class="hmm-interface-menu svelte-m4i49t"><div class="hmm-interface-head svelte-m4i49t"><span class="hmm-interface-host svelte-m4i49t" data-testid="interface-host"> </span> <span class="hmm-interface-backend svelte-m4i49t" data-testid="interface-backend"> </span></div> <div class="hmm-interface-list svelte-m4i49t" role="listbox"><!> <!></div> <!> <!></div>'),tg=y('<div class="hmm-interface svelte-m4i49t"><button type="button" class="hmm-interface-trigger svelte-m4i49t" aria-haspopup="listbox"><!> <!> <span class="hmm-interface-trigger-name svelte-m4i49t"> </span> <span class="hmm-interface-arrow svelte-m4i49t" aria-hidden="true">▾</span></button> <!></div>');function ng(r,e){ut(e,!0);let n=H(e,"selected",3,""),s=H(e,"host",3,""),a=H(e,"backendConnected",3,!0),i=H(e,"details",19,()=>({})),o=H(e,"label",3,"Select an interface"),l=H(e,"listLabel",3,"Interfaces"),f=H(e,"connectedText",3,"Connected"),p=H(e,"notConnectedText",3,"Not connected"),_=H(e,"notPresentText",3,"Not present"),g=H(e,"notAnsweringText",3,"Not answering"),k=H(e,"retryText",3,"Retry now"),E=H(e,"onretry",3,void 0),b=H(e,"subscribingText",3,"Subscribing"),w=H(e,"waitingText",3,"Waiting"),x=H(e,"reconnectingText",3,"Reconnecting"),D=H(e,"allConnectedText",3,"All interfaces are connected"),N=H(e,"someNotConnectedText",3,"Not every interface is connected"),R=H(e,"portLabel",3,"Port"),M=H(e,"tlsLabel",3,"TLS"),z=H(e,"devicesLabel",3,L=>`${String(L)} devices`),$=H(e,"dutyCycleLabel",3,L=>`Duty cycle ${String(L)} %`),le=H(e,"publishCallbackPorts",3,!1),fe=H(e,"callbackPortInUseLabel",3,L=>`Callback port ${String(L)} is in use`),de=H(e,"callbackPortFailedLabel",3,L=>`Callback port ${String(L)} cannot be opened`),B=H(e,"publishPortText",3,"Publish this port unchanged"),oe=H(e,"callbackWarningLabel",3,L=>L.reason==="notLocal"?`The callback address ${L.address} is not an address of this machine; ${L.auto} is used instead`:`The callback address ${L.address} is not in the CCU's network; the CCU may not reach it and send no events`),K=H(e,"useAutomaticText",3,"Use automatic"),X=H(e,"onuseautomatic",3,void 0),se=H(e,"onselect",3,void 0),j=H(e,"store",3,void 0),ne=H(e,"storeTestId",3,void 0),ye=H(e,"testId",3,void 0),xe=C(!1),ie=C(0),Ae=C(void 0),Te=C(void 0),me=C(void 0),P=C(void 0);const ce=c(()=>Vp(e.interfaces)),be=c(()=>[t(P),t(me)].filter(L=>L!==void 0)),ee=c(()=>E()===void 0?[]:Up(e.interfaces));let he=We([]);const G=c(()=>[...j()!==void 0&&j().selectable?[j().id]:[],...e.interfaces.map(L=>L.name)]),Q=c(()=>t(G).indexOf(n())),q=c(()=>j()!==void 0&&j().id===n()?j().label:n()),Y=c(()=>j()!==void 0&&j().selectable?0:-1);function ae(L,Pe){if(L==="bad"&&Pe.unreachable===!0)return g();switch(L){case"ok":return f();case"busy":return Pe.subscribing===!0?b():Pe.reconnecting===!0?x():w();case"absent":return _();default:return p()}}function J(L){return zp(L,i()[L.name],{port:R(),tls:M(),devices:z(),dutyCycle:$()}).join(" · ")}function ve(){u(ie,t(Q)<0?0:t(Q),!0),u(xe,!0)}function ge(L){u(xe,!1),L&&t(Te)?.focus()}function te(L){ge(!0),L!==n()&&se()?.(L)}function O(L){t(G).length!==0&&u(ie,(t(ie)+L+t(G).length)%t(G).length)}ot(()=>{t(xe)&&he[t(ie)]?.focus()});function U(L){if(L.key==="ArrowDown"||L.key==="ArrowUp"){L.preventDefault(),t(xe)?O(L.key==="ArrowDown"?1:-1):ve();return}L.key==="Escape"&&t(xe)&&(L.preventDefault(),ge(!0))}function I(L,Pe){switch(L.key){case"ArrowDown":{L.preventDefault(),O(1);break}case"ArrowUp":{L.preventDefault(),O(-1);break}case"Home":{L.preventDefault(),u(ie,0);break}case"End":{L.preventDefault(),u(ie,t(G).length-1);break}case"Enter":case" ":{L.preventDefault(),te(t(G)[Pe]??"");break}case"Escape":{L.preventDefault(),ge(!0);break}case"Tab":{const Ge=t(be)[0];if(!L.shiftKey&&Ge!==void 0){L.preventDefault(),Ge.focus();break}ge(!1);break}}}function F(L){const Pe=t(be).findIndex(Ge=>Ge===L.currentTarget);if(L.key==="Escape")L.preventDefault(),ge(!0);else if(L.key==="Tab"&&L.shiftKey)L.preventDefault(),(t(be)[Pe-1]??he[t(ie)])?.focus();else if(L.key==="Tab"){const Ge=t(be)[Pe+1];Ge===void 0?ge(!1):(L.preventDefault(),Ge.focus())}}function Ee(L){t(xe)&&t(Ae)&&L.target instanceof Node&&!t(Ae).contains(L.target)&&ge(!1)}var Ie=tg();Ir("mousedown",va,Ee);var Me=A(Ie),Ve=A(Me);{let L=c(()=>ye()===void 0?void 0:`${ye()}-summary`);Wp(Ve,{get interfaces(){return e.interfaces},get backendConnected(){return a()},get allConnectedText(){return D()},get someNotConnectedText(){return N()},get notPresentText(){return _()},get subscribingText(){return b()},get waitingText(){return w()},get reconnectingText(){return x()},get testId(){return t(L)}})}var ze=d(Ve,2);{var nt=L=>{var Pe=Kp();S(Ge=>{T(Pe,"title",Ge),T(Pe,"data-testid",ye()===void 0?void 0:`${ye()}-callback-warning`)},[()=>oe()(t(ce))]),v(L,Pe)};W(ze,L=>{t(ce)!==void 0&&L(nt)})}var Ze=d(ze,2),_e=m(Ze,!0);fn(Me,L=>u(Te,L),()=>t(Te));var Se=d(Me,2);{var V=L=>{var Pe=eg(),Ge=A(Pe),qe=A(Ge),we=m(qe,!0),Ce=d(qe,2),Oe=m(Ce,!0),Be=d(Ge,2),pe=A(Be);{var De=ct=>{var ke=St(),Le=Ne(ke);{var $e=lt=>{var Je=Yp();let Pt;var Tt=d(A(Je),2),Lt=m(Tt,!0);fn(Je,Qt=>he[t(Y)]=Qt,()=>he?.[t(Y)]),S(()=>{Pt=_t(Je,1,`hmm-interface-store hmm-meta-${j().mark??""}`,"svelte-m4i49t",Pt,{"hmm-interface-item-current":j().id===n()}),T(Je,"aria-selected",j().id===n()),T(Je,"tabindex",t(Y)===t(ie)?0:-1),T(Je,"title",j().title),T(Je,"data-mark",j().mark),T(Je,"data-provider",j().provider),T(Je,"data-testid",ne()),h(Lt,j().label)}),re("click",Je,()=>te(j().id)),re("keydown",Je,Qt=>I(Qt,t(Y))),v(lt,Je)},at=lt=>{var Je=qp(),Pt=d(A(Je),2),Tt=m(Pt,!0);S(()=>{_t(Je,1,`hmm-interface-store hmm-interface-store-off hmm-meta-${j().mark??""}`,"svelte-m4i49t"),T(Je,"title",j().title),T(Je,"data-mark",j().mark),T(Je,"data-provider",j().provider),T(Je,"data-testid",ne()),h(Tt,j().label)}),v(lt,Je)};W(Le,lt=>{j().selectable?lt($e):lt(at,-1)})}v(ct,ke)};W(pe,ct=>{j()!==void 0&&ct(De)})}var Ue=d(pe,2);Xe(Ue,19,()=>e.interfaces,ct=>ct.name,(ct,ke,Le)=>{const $e=c(()=>Kf(t(ke))),at=c(()=>t(Y)+1+t(Le)),lt=c(()=>Hp(t(ke),le(),{portInUse:fe(),portFailed:de(),publish:B()}));var Je=Xp();let Pt;var Tt=A(Je),Lt=A(Tt),Qt=m(Lt,!0),pn=d(Lt,2),wn=A(pn),tn=m(wn,!0),bn=d(wn),Pn=d(Tt,2),$n=m(Pn,!0),Xn=d(Pn,2);{var Zt=Ft=>{var Jt=$p();let Qn;var Mn=m(Jt,!0);S(()=>{Qn=_t(Jt,1,"hmm-interface-item-callback svelte-m4i49t",null,Qn,{"hmm-interface-item-callback-bad":t(lt).bad}),T(Jt,"data-testid",`interface-callback-${t(ke).name}`),h(Mn,t(lt).text)}),v(Ft,Jt)};W(Xn,Ft=>{t(lt)!==void 0&&Ft(Zt)})}fn(Je,(Ft,Jt)=>he[Jt]=Ft,Ft=>he?.[Ft],()=>[t(at)]),S((Ft,Jt)=>{Pt=_t(Je,1,"hmm-interface-item svelte-m4i49t",null,Pt,{"hmm-interface-item-current":t(ke).name===n()}),T(Je,"aria-selected",t(ke).name===n()),T(Je,"tabindex",t(at)===t(ie)?0:-1),T(Je,"title",t($e)==="bad"?t(ke).error??p():void 0),T(Je,"data-testid",`interface-item-${t(ke).name}`),h(Qt,t(ke).name),_t(pn,1,`hmm-interface-mark hmm-interface-mark-${t($e)??""}`,"svelte-m4i49t"),T(pn,"data-mark",t($e)),h(tn,Wf[t($e)]),h(bn,` ${Ft??""}`),h($n,Jt)},[()=>ae(t($e),t(ke)),()=>J(t(ke))]),re("click",Je,()=>te(t(ke).name)),re("keydown",Je,Ft=>I(Ft,t(at))),v(ct,Je)});var Fe=d(Be,2);{var Ye=ct=>{var ke=Zp(),Le=A(ke),$e=m(Le,!0),at=d(Le,2);{var lt=Je=>{var Pt=Qp(),Tt=m(Pt,!0);fn(Pt,Lt=>u(P,Lt),()=>t(P)),S(()=>h(Tt,K())),re("click",Pt,()=>{ge(!1),X()()}),re("keydown",Pt,F),v(Je,Pt)};W(at,Je=>{X()!==void 0&&Je(lt)})}S(Je=>h($e,Je),[()=>oe()(t(ce))]),v(ct,ke)};W(Fe,ct=>{t(ce)!==void 0&&ct(Ye)})}var tt=d(Fe,2);{var ht=ct=>{var ke=Jp(),Le=A(ke),$e=m(Le,!0);fn(Le,at=>u(me,at),()=>t(me)),S(()=>{T(Le,"data-testid",ye()===void 0?void 0:`${ye()}-retry`),h($e,k())}),re("click",Le,()=>E()?.(t(ee))),re("keydown",Le,F),v(ct,ke)};W(tt,ct=>{t(ee).length>0&&ct(ht)})}S(()=>{h(we,s()===""?"—":s()),h(Oe,a()?f():p()),T(Be,"aria-label",l())}),v(L,Pe)};W(Se,L=>{t(xe)&&L(V)})}fn(Ie,L=>u(Ae,L),()=>t(Ae)),S(()=>{T(Ie,"data-testid",ye()),T(Me,"aria-expanded",t(xe)),T(Me,"aria-label",o()),T(Me,"title",o()),T(Me,"data-testid",ye()===void 0?void 0:`${ye()}-trigger`),h(_e,t(q))}),re("click",Me,()=>t(xe)?ge(!1):ve()),re("keydown",Me,U),v(r,Ie),ft()}Et(["click","keydown"]);var rg=y('<div class="hmm-loader svelte-v1tg6x" role="status" aria-live="polite"><div class="hmm-loader-box svelte-v1tg6x"><div class="hmm-loader-spinner svelte-v1tg6x" aria-hidden="true"></div> <div class="hmm-loader-text svelte-v1tg6x"> </div></div></div>');function sg(r,e){let n=H(e,"visible",3,!1),s=H(e,"text",3,"Loading Homematic Manager..."),a=H(e,"testId",3,void 0);var i=St(),o=Ne(i);{var l=f=>{var p=rg(),_=A(p),g=d(A(_),2),k=m(g,!0);S(()=>{T(p,"data-testid",a()),h(k,s())}),v(f,p)};W(o,f=>{n()&&f(l)})}v(r,i)}function ag(r){return r===void 0||!r.reachable?"bad":r.writable?"ok":"readonly"}function ig(r,e){return r===void 0?"":[e.label,r.reachable?e.reachable:e.unreachable,r.reachable?r.writable?e.writable:e.readOnly:void 0,e.detail(r),r.implementation,r.error,r.certificate===void 0?void 0:e.certificate?.(r.certificate)??r.certificate.code].filter(s=>s!==void 0&&s!=="").join(" · ")}class yr extends Error{kind;faultCode;faultString;problems;constructor(e){super(e.message),this.name="ApiRequestError",this.kind=e.kind,e.faultCode!==void 0&&(this.faultCode=e.faultCode),e.faultString!==void 0&&(this.faultString=e.faultString),e.problems!==void 0&&(this.problems=e.problems)}toApiError(){return{...{message:this.message,kind:this.kind},...this.faultCode===void 0?{}:{faultCode:this.faultCode},...this.faultString===void 0?{}:{faultString:this.faultString},...this.problems===void 0?{}:{problems:this.problems}}}}function Yf(r){if(typeof r!="object"||r===null)return!1;const e=r;return typeof e.message=="string"&&typeof e.kind=="string"}function Di(r,e="internal"){return r instanceof yr?r:Yf(r)?new yr(r):r instanceof Error?new yr({message:r.message,kind:e}):new yr({message:String(r),kind:e})}const Al=5,og=5e3,lg=15e3;class dg{#e=C(We([]));get items(){return t(this.#e)}set items(e){u(this.#e,e,!0)}#n;#t;#s;#a;#r;#i=new Set;#l;#o=new Map;#d=1;constructor(e,n={}){this.#n=n.max??20,this.#t=n.now??(()=>Date.now()),this.#s=n.infoTtlMs??og,this.#a=n.warnTtlMs??lg,this.#r=n.hintFor,this.#l=e.on("notice",s=>{s.level!=="debug"&&this.push(s.level,s.message,s.interfaceName)})}get visible(){return this.items.slice(Math.max(0,this.items.length-Al))}get hidden(){return Math.max(0,this.items.length-Al)}push(e,n,s){const a=this.#d;this.#d+=1;const i={id:a,level:e,message:n,timestamp:this.#t(),...s===void 0?{}:{interfaceName:s}},o=[...this.items,i],l=o.length>this.#n?o.slice(0,o.length-this.#n):[];for(const f of l)this.#h(f.id);return this.items=l.length>0?o.slice(l.length):o,this.#f(a,e),e!=="info"&&this.#c(n),a}#c(e){const n=this.#r?.(e);n===void 0||n===""||this.#i.has(n)||(this.#i.add(n),this.push("error",n))}fromError(e,n){const s=Di(e),a=s.faultCode===void 0?"":` (${s.faultString??s.message}, ${String(s.faultCode)})`,i=`${n===void 0?"":`${n}: `}${s.message}${a}`;return this.push("error",i)}dismiss(e){this.#h(e),this.items=this.items.filter(n=>n.id!==e)}clear(){for(const e of[...this.#o.keys()])this.#h(e);this.items=[]}dispose(){this.clear(),this.#l()}#u(e){return e==="info"?this.#s:e==="warn"?this.#a:0}#f(e,n){const s=this.#u(n);if(s<=0)return;const a=setTimeout(()=>{this.#o.delete(e),this.items=this.items.filter(i=>i.id!==e)},s);a.unref?.(),this.#o.set(e,a)}#h(e){const n=this.#o.get(e);n!==void 0&&(clearTimeout(n),this.#o.delete(e))}}var cg=y('<button type="button" class="hmm-notices-more svelte-1pqi0mh"> </button>'),ug=y("<strong> </strong>"),fg=y('<div><span class="hmm-notice-text svelte-1pqi0mh"><!> </span> <button type="button" class="hmm-notice-close svelte-1pqi0mh">✕</button></div>'),hg=y('<div class="hmm-notices svelte-1pqi0mh" role="log" aria-live="polite"><!> <!></div>');function mg(r,e){ut(e,!0);let n=H(e,"ondismiss",3,void 0),s=H(e,"dismissLabel",3,"Dismiss"),a=H(e,"visibleCount",3,Al),i=H(e,"moreLabel",3,w=>`${w} more`),o=H(e,"lessLabel",3,"Show fewer"),l=H(e,"testId",3,void 0),f=C(!1);const p=c(()=>Math.max(0,e.notices.length-a())),_=c(()=>t(f)?e.notices:e.notices.slice(e.notices.length-Math.min(e.notices.length,a())));ot(()=>{t(p)===0&&t(f)&&u(f,!1)});var g=hg(),k=A(g);{var E=w=>{var x=cg(),D=m(x,!0);S(N=>{T(x,"data-testid",l()===void 0?void 0:`${l()}-more`),T(x,"aria-expanded",t(f)),h(D,N)},[()=>t(f)?o():i()(t(p))]),re("click",x,()=>u(f,!t(f))),v(w,x)};W(k,w=>{t(p)>0&&w(E)})}var b=d(k,2);Xe(b,17,()=>t(_),w=>w.id,(w,x)=>{var D=fg();let N;var R=A(D),M=A(R);{var z=fe=>{var de=ug(),B=m(de,!0);S(()=>h(B,t(x).interfaceName)),v(fe,de)};W(M,fe=>{t(x).interfaceName!==void 0&&fe(z)})}var $=d(M),le=d(R,2);S(()=>{N=_t(D,1,"hmm-notice svelte-1pqi0mh",null,N,{"hmm-notice-warn":t(x).level==="warn","hmm-notice-error":t(x).level==="error"}),h($,` ${t(x).message??""}`),T(le,"aria-label",s())}),re("click",le,()=>n()?.(t(x).id)),v(w,D)}),S(()=>T(g,"data-testid",l())),v(r,g),ft()}Et(["click"]);function uo(r){return r===void 0?"":typeof r=="string"?r:typeof r=="number"||typeof r=="boolean"?String(r):JSON.stringify(r)}function qf(r,e){return new Date(r).toLocaleTimeString(e,{hour12:!1})}function ca(r,e){const n=new Date(r);return`${n.toLocaleDateString(e)} ${n.toLocaleTimeString(e,{hour12:!1})}`}function vg(r){return r<1e3?`${Math.round(r)} ms`:`${(r/1e3).toFixed(2)} s`}function fc(r){return r.map(e=>typeof e=="string"?e:JSON.stringify(e)).join(", ")}const Yi={minWidth:320,minHeight:160},Tl=32;function pg(r,e){return{...r,minHeight:Math.max(0,Math.min(r.minHeight,e.height-Tl))}}function La(r,e,n){return Math.min(Math.max(r,e),Math.max(e,n))}function $f(r,e){return{...r,left:Math.round(La(r.left,0,e.width-r.width)),top:Math.round(La(r.top,0,e.height-r.height))}}function gg(r,e,n,s){return $f({...r,left:r.left+e,top:r.top+n},s)}function bg(r,e,n,s,a,i=Yi){const o=r.left+r.width,l=r.top+r.height,f=e==="w",p=e==="n",_=f||e==="e"||e==="se",g=p||e==="s"||e==="se",k=Math.max(i.minWidth,f?o:a.width-r.left),E=Math.max(i.minHeight,p?l:a.height-r.top),b=_?Math.round(La(r.width+(f?-n:n),i.minWidth,Math.min(k,a.width))):r.width,w=g?Math.round(La(r.height+(p?-s:s),i.minHeight,Math.min(E,a.height))):r.height;return $f({left:f?o-b:r.left,top:p?l-w:r.top,width:b,height:w},a)}const _g=.5,fo=120;function bd(r,e){return{min:fo,max:Math.max(fo,r-e)}}function Ko(r,e){const{min:n,max:s}=bd(r,e);return Math.round(La(r*_g,n,s))}function hc(r,e,n,s){const{min:a,max:i}=bd(n,s);return Math.round(La(r-e,a,i))}const Xf=new Map;function mc(r,e){Xf.set(r,e)}function Eg(r){return Xf.get(r)}const Qf=new Map;function yg(r,e){Qf.set(r,e)}function Sg(r){return Qf.get(r)}var wg=y('<li class="hmm-rpclog-entry hmm-rpclog-pending svelte-7sszxb"><span class="hmm-rpclog-spinner svelte-7sszxb" aria-hidden="true"></span> <span class="hmm-rpclog-origin svelte-7sszxb"> </span> <span class="hmm-rpclog-method hmm-mono svelte-7sszxb"> </span> <span class="hmm-rpclog-params hmm-mono svelte-7sszxb"> </span> <span class="hmm-rpclog-status svelte-7sszxb"> </span></li>'),kg=y('<li><span class="hmm-rpclog-time svelte-7sszxb"> </span> <span class="hmm-rpclog-origin svelte-7sszxb"> </span> <span class="hmm-rpclog-method hmm-mono svelte-7sszxb"> </span> <span class="hmm-rpclog-params hmm-mono svelte-7sszxb"> </span> <span class="hmm-rpclog-status svelte-7sszxb"><!></span> <span class="hmm-rpclog-duration svelte-7sszxb"> </span> <button type="button" class="hmm-rpclog-open svelte-7sszxb">▸</button></li>'),Ag=y('<li class="hmm-rpclog-empty svelte-7sszxb"> </li>'),Tg=y('<aside class="hmm-rpclog svelte-7sszxb"><div class="hmm-rpclog-handle svelte-7sszxb" role="separator" aria-orientation="horizontal" tabindex="0" data-resize="n"></div> <header class="hmm-rpclog-head svelte-7sszxb"><strong class="hmm-rpclog-title svelte-7sszxb"> </strong> <label class="hmm-rpclog-filter svelte-7sszxb"><input type="checkbox"/> </label> <button type="button" class="hmm-button"> </button> <button type="button" class="hmm-rpclog-close svelte-7sszxb">✕</button></header> <ol class="hmm-rpclog-list svelte-7sszxb"><!> <!> <!></ol></aside>');function Rg(r,e){ut(e,!0);let n=H(e,"open",15,!1),s=H(e,"pending",19,()=>[]),a=H(e,"title",3,"RPC log"),i=H(e,"emptyText",3,"No RPC calls yet"),o=H(e,"pendingText",3,"in progress"),l=H(e,"clearLabel",3,"Clear"),f=H(e,"closeLabel",3,"Close"),p=H(e,"resizeLabel",3,"Resize the RPC log"),_=H(e,"hideBackground",15,!1),g=H(e,"hideBackgroundLabel",3,"Hide background calls"),k=H(e,"originLabels",19,()=>({console:"console",ui:"UI",background:"background"})),E=H(e,"openLabel",3,"Open in console"),b=H(e,"onopen",3,void 0),w=H(e,"reservedHeight",3,void 0),x=H(e,"onclear",3,void 0),D=H(e,"testId",3,void 0);function N(K){const X=uo(K.result);return K.resultBytes===void 0?X:`${X} (${String(Math.round(K.resultBytes/1024))} kB)`}const R="rpclog";let M=C(We(Eg(R)));function z(){if(w()!==void 0)return w();const K=getComputedStyle(document.documentElement).getPropertyValue("--hmm-header-height"),X=Number.parseFloat(K);return Number.isFinite(X)?X:36}ot(()=>{n()&&t(M)===void 0&&u(M,Ko(window.innerHeight,z()),!0)});function $(K){if(K.button!==0)return;const X=t(M)??Ko(window.innerHeight,z()),se=K.clientY;K.preventDefault();const j=ye=>{u(M,hc(X,ye.clientY-se,window.innerHeight,z()),!0)},ne=()=>{window.removeEventListener("pointermove",j),window.removeEventListener("pointerup",ne),window.removeEventListener("pointercancel",ne),t(M)!==void 0&&mc(R,t(M))};window.addEventListener("pointermove",j),window.addEventListener("pointerup",ne),window.addEventListener("pointercancel",ne)}const le=c(()=>n()&&t(M)!==void 0?bd(window.innerHeight,z()).max:fo);function fe(K){const X=K.key==="ArrowUp"?-20:K.key==="ArrowDown"?20:0;if(X===0)return;K.preventDefault();const se=t(M)??Ko(window.innerHeight,z());u(M,hc(se,X,window.innerHeight,z()),!0),mc(R,t(M))}var de=St(),B=Ne(de);{var oe=K=>{var X=Tg();let se;var j=A(X),ne=d(j,2),ye=A(ne),xe=m(ye,!0),ie=d(ye,2),Ae=A(ie),Te=d(Ae),me=d(ie,2),P=m(me,!0),ce=d(me,2),be=d(ne,2),ee=A(be);Xe(ee,17,s,q=>q.id,(q,Y)=>{var ae=wg(),J=d(A(ae),2),ve=m(J,!0),ge=d(J,2),te=m(ge),O=d(ge,2),U=m(O,!0),I=d(O,2),F=m(I,!0);S(Ee=>{h(ve,k().ui),h(te,`${t(Y).interfaceName??""} ${t(Y).method??""}`),h(U,Ee),h(F,o())},[()=>fc(t(Y).params)]),v(q,ae)});var he=d(ee,2);Xe(he,17,()=>e.entries,q=>q.id,(q,Y)=>{var ae=kg();let J;var ve=A(ae),ge=m(ve,!0),te=d(ve,2),O=m(te,!0),U=d(te,2),I=m(U),F=d(U,2),Ee=m(F,!0),Ie=d(F,2),Me=A(Ie);{var Ve=Se=>{var V=Cn();S(L=>h(V,L),[()=>N(t(Y))]),v(Se,V)},ze=Se=>{var V=Cn();S(()=>h(V,t(Y).error??"")),v(Se,V)};W(Me,Se=>{t(Y).ok?Se(Ve):Se(ze,-1)})}var nt=d(Ie,2),Ze=m(nt,!0),_e=d(nt,2);S((Se,V,L)=>{J=_t(ae,1,"hmm-rpclog-entry svelte-7sszxb",null,J,{"hmm-rpclog-failed":!t(Y).ok,"hmm-rpclog-background":t(Y).origin==="background"}),T(ae,"data-origin",t(Y).origin),h(ge,Se),h(O,k()[t(Y).origin]),h(I,`${t(Y).interfaceName??""} ${t(Y).method??""}`),h(Ee,V),h(Ze,L),T(_e,"title",E()),T(_e,"aria-label",`${E()}: ${t(Y).method}`)},[()=>qf(t(Y).timestamp),()=>fc(t(Y).params),()=>vg(t(Y).durationMs)]),re("click",_e,()=>b()?.(t(Y))),v(q,ae)});var G=d(he,2);{var Q=q=>{var Y=Ag(),ae=m(Y,!0);S(()=>h(ae,i())),v(q,Y)};W(G,q=>{e.entries.length===0&&s().length===0&&q(Q)})}S(()=>{T(X,"aria-label",a()),T(X,"data-testid",D()),se=Un(X,"",se,{height:t(M)===void 0?void 0:`${t(M)}px`}),T(j,"aria-label",p()),T(j,"aria-valuenow",t(M)??0),T(j,"aria-valuemin",fo),T(j,"aria-valuemax",t(le)),T(j,"data-testid",D()===void 0?void 0:`${D()}-resize`),h(xe,a()),T(Ae,"data-testid",D()===void 0?void 0:`${D()}-hide-background`),h(Te,` ${g()??""}`),h(P,l()),T(ce,"aria-label",f())}),re("pointerdown",j,$),re("keydown",j,fe),vr(Ae,_),re("click",me,()=>x()?.()),re("click",ce,()=>n(!1)),v(K,X)};W(B,K=>{n()&&K(oe)})}v(r,de),ft()}Et(["pointerdown","keydown","click"]);var xg=y('<button type="button" class="hmm-dialog-close svelte-jby388">✕</button>'),Dg=y('<div class="hmm-dialog-buttons svelte-jby388"><!></div>'),Ig=y('<div aria-hidden="true"></div>'),Ng=y('<dialog><div><span class="hmm-dialog-title svelte-jby388"> </span> <!></div> <div class="hmm-dialog-body svelte-jby388"><!></div> <!> <!></dialog>');function En(r,e){ut(e,!0);let n=H(e,"open",15,!1),s=H(e,"title",3,""),a=H(e,"modal",3,!0),i=H(e,"width",3,"640px"),o=H(e,"height",3,void 0),l=H(e,"closable",3,!0),f=H(e,"onclose",3,void 0),p=H(e,"children",3,void 0),_=H(e,"buttons",3,void 0),g=H(e,"closeLabel",3,"Close"),k=H(e,"minWidth",3,void 0),E=H(e,"minHeight",3,void 0),b=H(e,"movable",3,!0),w=H(e,"top",3,void 0),x=H(e,"testId",3,void 0),D=C(void 0),N,R=C(void 0);const M=c(()=>x()??s()),z=c(()=>Number(/^(\d+)px$/.exec(i())?.[1]??Number.NaN)),$=c(()=>({minWidth:k()??(Number.isNaN(t(z))?Yi.minWidth:Math.max(Yi.minWidth,t(z))),minHeight:E()??Yi.minHeight}));ot(()=>{const Q=t(D);Q&&(n()&&!Q.open?(N=document.activeElement instanceof HTMLElement?document.activeElement:void 0,u(R,t(M)===""?void 0:Sg(t(M)),!0),a()?Q.showModal():Q.show()):!n()&&Q.open&&Q.close())});function le(){n(!1),t(D)?.open&&t(D).close(),f()?.(),N?.focus(),N=void 0}function fe(){return{width:window.innerWidth,height:window.innerHeight}}function de(Q,q){const Y=t(D);if(!Y||!b()||Q.button!==0)return;const ae=Y.getBoundingClientRect(),J={left:ae.left,top:ae.top,width:ae.width,height:ae.height},ve=Q.clientX,ge=Q.clientY;Q.preventDefault();const te=U=>{const I=U.clientX-ve,F=U.clientY-ge;u(R,q==="move"?gg(J,I,F,fe()):bg(J,q,I,F,fe(),pg(t($),fe())),!0)},O=()=>{window.removeEventListener("pointermove",te),window.removeEventListener("pointerup",O),window.removeEventListener("pointercancel",O),t(R)&&t(M)!==""&&yg(t(M),t(R))};window.addEventListener("pointermove",te),window.addEventListener("pointerup",O),window.addEventListener("pointercancel",O)}function B(Q){Q.target.closest("button")===null&&de(Q,"move")}const oe=["n","e","s","w","se"];function K(Q){Q.preventDefault(),l()&&le()}var X=Ng();let se,j;var ne=A(X);let ye;var xe=A(ne),ie=m(xe,!0),Ae=d(xe,2);{var Te=Q=>{var q=xg();S(()=>T(q,"aria-label",g())),re("click",q,le),v(Q,q)};W(Ae,Q=>{l()&&Q(Te)})}var me=d(ne,2),P=A(me);{var ce=Q=>{var q=St(),Y=Ne(q);qs(Y,p),v(Q,q)};W(P,Q=>{p()&&Q(ce)})}var be=d(me,2);{var ee=Q=>{var q=Dg(),Y=A(q);qs(Y,_),v(Q,q)};W(be,Q=>{_()&&Q(ee)})}var he=d(be,2);{var G=Q=>{var q=St(),Y=Ne(q);Xe(Y,16,()=>oe,ae=>ae,(ae,J)=>{var ve=Ig();S(()=>{_t(ve,1,`hmm-dialog-resize hmm-dialog-resize-${J??""}`,"svelte-jby388"),T(ve,"data-resize",J)}),re("pointerdown",ve,ge=>de(ge,J)),v(ae,ve)}),v(Q,q)};W(he,Q=>{b()&&Q(G)})}fn(X,Q=>u(D,Q),()=>t(D)),S(()=>{se=_t(X,1,"hmm-dialog svelte-jby388",null,se,{"hmm-dialog-placed":t(R)!==void 0}),T(X,"data-testid",x()),T(X,"aria-label",s()===""?void 0:s()),j=Un(X,"",j,{width:t(R)===void 0?i():`${t(R).width}px`,height:t(R)===void 0?o():`${t(R).height}px`,"min-height":t(R)===void 0&&E()!==void 0?`min(${E()}px, calc(100vh - ${Tl}px))`:void 0,"margin-top":t(R)===void 0?w():void 0,"max-height":t(R)===void 0&&w()!==void 0?`calc(100vh - ${w()} - ${Tl/2}px)`:void 0,left:t(R)===void 0?void 0:`${t(R).left}px`,top:t(R)===void 0?void 0:`${t(R).top}px`}),ye=_t(ne,1,"hmm-dialog-titlebar svelte-jby388",null,ye,{"hmm-dialog-titlebar-movable":b()}),h(ie,s())}),Ir("cancel",X,K),Ir("close",X,()=>{n()&&le()}),re("pointerdown",ne,B),v(r,X),ft()}Et(["pointerdown","click"]);var Cg=y('<button type="button" class="hmm-button"> </button>'),Pg=y('<p class="hmm-progress-last hmm-mono svelte-1r0w7uc"> </p>'),Mg=y('<p class="hmm-progress-line svelte-1r0w7uc"> </p> <progress class="hmm-progress svelte-1r0w7uc"></progress> <!>',1);function Zf(r,e){ut(e,!0);let n=H(e,"progress",3,void 0),s=H(e,"title",3,"RPC execution"),a=H(e,"cancelLabel",3,void 0),i=H(e,"oncancel",3,void 0),o=H(e,"testId",3,void 0),l=c(()=>n()!==void 0);En(r,{get title(){return s()},modal:!0,closable:!1,width:"420px",get testId(){return o()},get open(){return t(l)},set open(p){u(l,p)},buttons:p=>{var _=St(),g=Ne(_);{var k=E=>{var b=Cg(),w=m(b,!0);S(()=>h(w,a())),re("click",b,()=>i()?.()),v(E,b)};W(g,E=>{a()!==void 0&&E(k)})}v(p,_)},children:(p,_)=>{var g=St(),k=Ne(g);{var E=b=>{var w=Mg(),x=Ne(w),D=m(x),N=d(x,2),R=d(N,2);{var M=z=>{var $=Pg(),le=m($);S(()=>h(le,`${n().last.address??""}
9
9
  ${n().last.paramset??""}
10
- ${n().last.ok?"✔":"✕"}`)),v(z,$)};W(R,z=>{n().last&&z(M)})}S(()=>{h(D,`${n().done??""} / ${n().total??""}`),T(N,"max",n().total),ln(N,n().done)}),v(b,w)};W(k,b=>{n()&&b(E)})}v(p,g)},$$slots:{buttons:!0,default:!0}}),ut()}Et(["click"]);var Og=y('<span class="hmm-tab-badge svelte-126ak3w"> </span>'),Lg=y('<button type="button" role="tab"><span> </span> <!></button>'),Fg=y('<div class="hmm-tabs svelte-126ak3w" role="tablist"></div>');function Gg(r,e){ct(e,!0);let n=H(e,"active",15,""),s=H(e,"onselect",3,void 0),a=H(e,"label",3,"Tabs"),i=H(e,"testId",3,void 0);function o(p){n(p),s()?.(p)}function l(p,_){if(p.key!=="ArrowLeft"&&p.key!=="ArrowRight")return;p.preventDefault();const g=p.key==="ArrowRight"?1:-1,k=e.tabs[(_+g+e.tabs.length)%e.tabs.length];k&&o(k.id)}var f=Fg();Xe(f,23,()=>e.tabs,p=>p.id,(p,_,g)=>{var k=Lg();let E;var b=A(k),w=m(b,!0),x=d(b,2);{var D=N=>{var R=Og(),M=m(R);S(()=>h(M,`(${t(_).badge??""})`)),v(N,R)};W(x,N=>{t(_).badge!==void 0&&t(_).badge!==""&&N(D)})}S(()=>{E=_t(k,1,"hmm-tab svelte-126ak3w",null,E,{"hmm-tab-active":t(_).id===n()}),T(k,"id",`tab-${t(_).id}`),T(k,"aria-selected",t(_).id===n()),T(k,"aria-controls",`panel-${t(_).id}`),T(k,"tabindex",t(_).id===n()?0:-1),h(w,t(_).label)}),re("click",k,()=>o(t(_).id)),re("keydown",k,N=>l(N,t(g))),v(p,k)}),S(()=>{T(f,"aria-label",a()),T(f,"data-testid",i())}),v(r,f),ut()}Et(["click","keydown"]);var Ug=y('<button type="button" class="hmm-theme-switch svelte-mls84d"><span aria-hidden="true"> </span></button>');function Bg(r,e){ct(e,!0);let n=H(e,"theme",3,"system"),s=H(e,"labelFor",3,void 0),a=H(e,"onclick",3,void 0),i=H(e,"testId",3,void 0);const o={system:"◐",light:"☀",dark:"☾"},l=c(()=>s()?.(n())??`Theme: ${n()}`);var f=Ug(),p=A(f),_=m(p,!0);S(()=>{T(f,"aria-label",t(l)),T(f,"title",t(l)),T(f,"data-testid",i()),h(_,o[n()])}),re("click",f,()=>a()?.()),v(r,f),ut()}Et(["click"]);const Hg=160,Vg=600;function Jf(r,e){return r.length>e?`${r.slice(0,e-1).trimEnd()}…`:r}function zg(r){const e=(r??"").split(`
10
+ ${n().last.ok?"✔":"✕"}`)),v(z,$)};W(R,z=>{n().last&&z(M)})}S(()=>{h(D,`${n().done??""} / ${n().total??""}`),T(N,"max",n().total),ln(N,n().done)}),v(b,w)};W(k,b=>{n()&&b(E)})}v(p,g)},$$slots:{buttons:!0,default:!0}}),ft()}Et(["click"]);var Og=y('<span class="hmm-tab-badge svelte-126ak3w"> </span>'),Lg=y('<button type="button" role="tab"><span> </span> <!></button>'),Fg=y('<div class="hmm-tabs svelte-126ak3w" role="tablist"></div>');function Gg(r,e){ut(e,!0);let n=H(e,"active",15,""),s=H(e,"onselect",3,void 0),a=H(e,"label",3,"Tabs"),i=H(e,"testId",3,void 0);function o(p){n(p),s()?.(p)}function l(p,_){if(p.key!=="ArrowLeft"&&p.key!=="ArrowRight")return;p.preventDefault();const g=p.key==="ArrowRight"?1:-1,k=e.tabs[(_+g+e.tabs.length)%e.tabs.length];k&&o(k.id)}var f=Fg();Xe(f,23,()=>e.tabs,p=>p.id,(p,_,g)=>{var k=Lg();let E;var b=A(k),w=m(b,!0),x=d(b,2);{var D=N=>{var R=Og(),M=m(R);S(()=>h(M,`(${t(_).badge??""})`)),v(N,R)};W(x,N=>{t(_).badge!==void 0&&t(_).badge!==""&&N(D)})}S(()=>{E=_t(k,1,"hmm-tab svelte-126ak3w",null,E,{"hmm-tab-active":t(_).id===n()}),T(k,"id",`tab-${t(_).id}`),T(k,"aria-selected",t(_).id===n()),T(k,"aria-controls",`panel-${t(_).id}`),T(k,"tabindex",t(_).id===n()?0:-1),h(w,t(_).label)}),re("click",k,()=>o(t(_).id)),re("keydown",k,N=>l(N,t(g))),v(p,k)}),S(()=>{T(f,"aria-label",a()),T(f,"data-testid",i())}),v(r,f),ft()}Et(["click","keydown"]);var Ug=y('<button type="button" class="hmm-theme-switch svelte-mls84d"><span aria-hidden="true"> </span></button>');function Bg(r,e){ut(e,!0);let n=H(e,"theme",3,"system"),s=H(e,"labelFor",3,void 0),a=H(e,"onclick",3,void 0),i=H(e,"testId",3,void 0);const o={system:"◐",light:"☀",dark:"☾"},l=c(()=>s()?.(n())??`Theme: ${n()}`);var f=Ug(),p=A(f),_=m(p,!0);S(()=>{T(f,"aria-label",t(l)),T(f,"title",t(l)),T(f,"data-testid",i()),h(_,o[n()])}),re("click",f,()=>a()?.()),v(r,f),ft()}Et(["click"]);const Hg=160,Vg=600;function Jf(r,e){return r.length>e?`${r.slice(0,e-1).trimEnd()}…`:r}function zg(r){const e=(r??"").split(`
11
11
  `).map(n=>n.trim()).find(n=>n!=="");return Jf(e??"",Hg)}function jg(r){const e=r??"",n=e.indexOf(`
12
- Headers:`);return Jf((n===-1?e:e.slice(0,n)).trim(),Vg)}var Wg=y(': <span data-testid="update-error-reason"> </span>',1),Kg=y('<a class="hmm-update-link svelte-puqwbv" target="_blank" rel="noopener noreferrer" data-testid="update-releases"> </a>'),Yg=y('<span class="hmm-update-text svelte-puqwbv"> <!></span> <!>',1),qg=y('<span class="hmm-update-text svelte-puqwbv"> </span>'),$g=y('<button type="button" class="hmm-button" data-testid="update-download"> </button>'),Xg=y('<button type="button" class="hmm-button" data-testid="update-install"> </button>'),Qg=y('<div><!> <!> <button type="button" class="hmm-button" data-testid="update-dismiss"> </button></div>');function Zg(r,e){ct(e,!0);let n=H(e,"state",3,void 0),s=H(e,"releasesUrl",3,void 0),a=H(e,"openExternal",3,void 0),i=H(e,"testId",3,void 0);const o=c(()=>{if(!n())return"";switch(n().phase){case"available":return e.labels.available;case"downloading":return`${e.labels.downloading} ${n().percent===void 0?"":`${String(Math.round(n().percent))} %`}`;case"downloaded":return e.labels.downloaded;case"installOnQuit":return e.labels.installOnQuit;case"error":return n().failed==="check"?e.labels.checkFailed:n().failed==="download"?e.labels.downloadFailed:e.labels.failed;default:return""}}),l=c(()=>n()?.phase==="error"),f=c(()=>n()?.install==="link"),p=c(()=>t(l)?zg(n()?.message):"");var _=St(),g=Ne(_);{var k=E=>{var b=Qg();let w;var x=A(b);{var D=fe=>{var de=Yg(),B=Ne(de),oe=A(B),K=d(oe);{var X=ne=>{var ye=Wg(),xe=d(Ne(ye)),ie=m(xe,!0);S(()=>h(ie,t(p))),v(ne,ye)};W(K,ne=>{t(p)!==""&&ne(X)})}var se=d(B,2);{var j=ne=>{var ye=Kg(),xe=m(ye,!0);S(()=>{T(ye,"href",s()),h(xe,e.labels.releases)}),re("click",ye,ie=>jf(ie,s(),a())),v(ne,ye)};W(se,ne=>{s()&&ne(j)})}S(ne=>{T(B,"title",ne),h(oe,`${t(o)??""}${n().version===void 0?"":` (${n().version})`}`)},[()=>jg(n().message)||void 0]),v(fe,de)},N=fe=>{var de=qg(),B=m(de);S(()=>h(B,`${t(o)??""}${n().version===void 0?"":` ${n().version}`}`)),v(fe,de)};W(x,fe=>{t(l)?fe(D):fe(N,-1)})}var R=d(x,2);{var M=fe=>{var de=$g(),B=m(de,!0);S(()=>{T(de,"title",t(f)?e.labels.downloadInBrowser:void 0),h(B,e.labels.download)}),re("click",de,()=>e.ondownload()),v(fe,de)},z=fe=>{var de=Xg(),B=m(de,!0);S(()=>h(B,e.labels.install)),re("click",de,()=>e.oninstall()),v(fe,de)};W(R,fe=>{n().phase==="available"?fe(M):n().phase==="downloaded"&&fe(z,1)})}var $=d(R,2),le=m($,!0);S(()=>{w=_t(b,1,"hmm-update svelte-puqwbv",null,w,{"hmm-update-failed":t(l)}),T(b,"role",t(l)?"alert":"status"),T(b,"data-testid",i()),T(b,"data-phase",n().phase),T(b,"data-install",n().install??"app"),h(le,e.labels.dismiss)}),re("click",$,()=>e.ondismiss()),v(E,b)};W(g,E=>{n()&&t(o)!==""&&E(k)})}v(r,_),ut()}Et(["click"]);const eh=300,Jg=280,js=4;function eb(r,e,n=0){const s=Math.min(Jg,e.width-2*js),a=Math.max(js,Math.min(r.left,e.width-s-js)),i=r.bottom+js;return n>0&&i+n>e.height-js&&r.top-js-n>=js?{left:a,top:r.top-js-n}:{left:a,top:i}}var tb=y('<span class="hmm-tooltip svelte-vstuih" role="tooltip"> </span>');function Rl(r,e){ct(e,!0);let n=H(e,"testId",3,void 0),s=C(void 0),a=C(0);const i=c(()=>eb(e.anchor,{width:window.innerWidth,height:window.innerHeight},t(a)));ot(()=>{e.text,t(s)&&u(a,t(s).offsetHeight,!0)});var o=tb();let l;var f=m(o,!0);fn(o,p=>u(s,p),()=>t(s)),S((p,_)=>{T(o,"data-testid",n()),l=Un(o,"",l,{left:p,top:_}),h(f,e.text)},[()=>`${String(t(i).left)}px`,()=>`${String(t(i).top)}px`]),v(r,o),ut()}var nb=y('<span class="hmm-tooltip-anchor svelte-11extwn"><!> <!></span>');function mi(r,e){ct(e,!0);let n=H(e,"delayMs",3,eh),s=H(e,"testId",3,void 0),a=C(void 0),i=C(void 0),o;function l(){if(e.text===""||!t(i))return;const{left:w,top:x,bottom:D}=t(i).getBoundingClientRect();u(a,{left:w,top:x,bottom:D},!0)}function f(){e.text===""||t(a)!==void 0||(p(),o=setTimeout(l,n()))}function p(){o!==void 0&&(clearTimeout(o),o=void 0)}function _(){p(),u(a,void 0)}ot(()=>p);var g=nb(),k=A(g);qs(k,()=>e.children);var E=d(k,2);{var b=w=>{Rl(w,{get text(){return e.text},get anchor(){return t(a)}})};W(E,w=>{t(a)!==void 0&&e.text!==""&&w(b)})}fn(g,w=>u(i,w),()=>t(i)),S(()=>{T(g,"data-testid",s()),T(g,"data-tooltip",e.text===""?void 0:e.text)}),Ir("pointerenter",g,f),Ir("pointerleave",g,_),re("pointerdown",g,_),re("focusin",g,l),re("focusout",g,_),re("keydown",g,w=>{w.key==="Escape"&&_()}),v(r,g),ut()}Et(["pointerdown","focusin","focusout","keydown"]);var rb=y('<button type="button"><span aria-hidden="true"> </span></button>');function Dt(r,e){ct(e,!0);let n=H(e,"icon",3,"•"),s=H(e,"disabled",3,!1),a=H(e,"reason",3,void 0),i=H(e,"pressed",3,void 0),o=H(e,"busy",3,!1),l=H(e,"onclick",3,void 0),f=H(e,"testId",3,void 0);const p=c(()=>f()===void 0?void 0:`${f()}-tooltip`);{let _=c(()=>s()&&a()!==void 0?`${e.title} — ${a()}`:e.title);mi(r,{get text(){return t(_)},get testId(){return t(p)},children:(g,k)=>{var E=rb();let b;var w=A(E);let x;var D=m(w,!0);S(()=>{b=_t(E,1,"hmm-toolbar-button svelte-cmlgq7",null,b,{"hmm-toolbar-button-pressed":i()===!0}),T(E,"aria-label",e.title),T(E,"aria-pressed",i()),T(E,"aria-busy",o()?"true":void 0),T(E,"data-testid",f()),E.disabled=s()||o(),x=_t(w,1,"hmm-toolbar-icon svelte-cmlgq7",null,x,{"hmm-toolbar-icon-busy":o()}),h(D,n())}),re("click",E,()=>l()?.()),v(g,E)},$$slots:{default:!0}})}ut()}Et(["click"]);const xl=Symbol("homematic-manager.stores");function sb(r){return of(xl,r),r}function Ot(){if(!lf(xl))throw new Error("no stores in context - wrap the component in App.svelte or call setStores() in a parent");return af(xl)}const th=["devices","links","rssi","console","messages","events"],nh="groups",ab=["rooms","functions","metadata"],qi="devices",_d="#store";function rh(r){return r===_d}function vi(r){return ab.includes(r)}function vc(r){return r===void 0||!r.reachable?[]:r.flat===!0?["rooms","functions"]:["metadata"]}function ib(r){return th.includes(r)||r===nh||vi(r)}function ob(r){const e=r.replace(/^#/,"").split("/"),n=decodeURIComponent(e[1]??""),s=decodeURIComponent(e[2]??"");return{interfaceName:n,tab:ib(s)?s:qi}}function lb(r,e){return r===""?"":`#/${encodeURIComponent(r)}/${e}`}function db(r,e={}){switch(r){case"BidCos-Wired":return["devices","links","console","events"];case"CUxD":return["devices","console","events"];case"BidCos-RF":return[...th];case"VirtualDevices":return e.heatingGroups===!0?["devices",nh,"links","console","messages","events"]:["devices","links","console","messages","events"];default:return/hmip/i.test(r)?["devices","links","rssi","console","messages","events"]:["devices","links","console","messages","events"]}}var cb=y('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="change-set-clear"> </button> <button type="button" class="hmm-button" data-testid="change-set-apply"> </button>',1),ub=y('<p data-testid="change-set-empty"> </p>'),fb=y('<p class="hmm-change-call svelte-1uqsmm6"> </p>'),hb=y('<tr><td class="hmm-mono svelte-1uqsmm6"> </td><td class="svelte-1uqsmm6"> </td><td class="hmm-change-new svelte-1uqsmm6"> </td></tr>'),mb=y('<table class="hmm-change-table svelte-1uqsmm6"><tbody></tbody></table>'),vb=y('<p class="hmm-change-error svelte-1uqsmm6"> </p>'),pb=y('<li class="hmm-change svelte-1uqsmm6"><div class="hmm-change-head svelte-1uqsmm6"><span class="hmm-change-title svelte-1uqsmm6"> </span> <button type="button" class="hmm-button"> </button></div> <!> <!> <!></li>'),gb=y('<ol class="hmm-changes svelte-1uqsmm6" data-testid="change-set-list"></ol> <p class="hmm-change-count svelte-1uqsmm6" data-testid="change-set-count"> </p>',1),bb=y("<!> <!>",1);function _b(r,e){ct(e,!0);let n=H(e,"open",15,!1);const s=Ot(),a=s.i18n.t,i=s.changeSet,o=c(()=>i.count);function l(p){const _=i.outcome(p.id);return _===void 0?void 0:{ok:_.ok,..._.error?{error:_.error}:{}}}async function f(){const p=i.interfaces;await i.apply();for(const _ of p)await s.links.load(_);i.empty&&n(!1)}{const p=g=>{var k=cb(),E=Ne(k),b=m(E,!0),w=d(E,2),x=m(w,!0),D=d(w,2),N=m(D,!0);S((R,M,z)=>{h(b,R),w.disabled=i.empty||i.applying,h(x,M),D.disabled=i.empty||i.applying,h(N,z)},[()=>a("Close"),()=>a("Discard all"),()=>a("Apply")]),re("click",E,()=>n(!1)),re("click",w,()=>i.clear()),re("click",D,()=>{f()}),v(g,k)};let _=c(()=>a("Pending changes"));En(r,{get title(){return t(_)},width:"820px",testId:"change-set-dialog",get open(){return n()},set open(g){n(g)},buttons:p,children:(g,k)=>{var E=bb(),b=Ne(E);{var w=R=>{var M=ub(),z=m(M,!0);S($=>h(z,$),[()=>a("Nothing is staged")]),v(R,M)},x=R=>{var M=gb(),z=Ne(M);Xe(z,21,()=>i.changes,fe=>fe.id,(fe,de)=>{const B=c(()=>l(t(de)));var oe=pb(),K=A(oe),X=A(K),se=m(X,!0),j=d(X,2),ne=m(j,!0),ye=d(K,2);Xe(ye,16,()=>t(de).calls,me=>me,(me,P)=>{var ce=fb(),be=m(ce,!0);S(()=>h(be,P)),v(me,ce)});var xe=d(ye,2);{var ie=me=>{var P=mb(),ce=A(P);Xe(ce,21,()=>t(de).lines,be=>be.label,(be,ee)=>{var he=hb(),G=A(he),Q=m(G,!0),q=d(G),Y=m(q,!0),ae=d(q),J=m(ae,!0);S(()=>{h(Q,t(ee).label),h(Y,t(ee).from??""),h(J,t(ee).to??"")}),v(be,he)}),v(me,P)};W(xe,me=>{t(de).lines.length>0&&me(ie)})}var Ae=d(xe,2);{var Te=me=>{var P=vb(),ce=m(P,!0);S(()=>{T(P,"data-testid",`change-error-${t(de).id}`),h(ce,t(B).error)}),v(me,P)};W(Ae,me=>{t(B)&&!t(B).ok&&me(Te)})}S(me=>{T(oe,"data-testid",`change-${t(de).id}`),h(se,t(de).title),j.disabled=i.applying,T(j,"data-testid",`change-remove-${t(de).id}`),h(ne,me)},[()=>a("Remove")]),re("click",j,()=>i.remove(t(de).id)),v(fe,oe)});var $=d(z,2),le=m($,!0);S(fe=>h(le,fe),[()=>a("{count} changes staged",{},t(o))]),v(R,M)};W(b,R=>{i.empty?R(w):R(x,-1)})}var D=d(b,2);{var N=R=>{{let M=c(()=>s.rpcLog.progress??{done:i.applied,total:t(o)}),z=c(()=>a("Cancel"));Zf(R,{get progress(){return t(M)},get cancelLabel(){return t(z)},oncancel:()=>{i.cancel()}})}};W(D,R=>{i.applying&&R(N)})}v(g,E)},$$slots:{buttons:!0,default:!0}})}ut()}Et(["click"]);const Eb=Object.freeze({ip:{env:"HMM_CALLBACK_IP",cli:"--callback-ip"},xmlrpcPort:{env:"HMM_CALLBACK_XMLRPC_PORT",cli:"--callback-xmlrpc-port"},binrpcPort:{env:"HMM_CALLBACK_BINRPC_PORT",cli:"--callback-binrpc-port"}});function yb(r){const{env:e,cli:n}=Eb[r];return`${e} / ${n}`}const pc=Object.freeze(["auto","local","occulite","rega"]),Sb={"interfaces.changed":!0,"rega.changed":!0,"devices.changed":!0,"names.changed":!0,"meta.changed":!0,"meta.enums.changed":!0,"meta.objects.changed":!0,"rpc.event":!0,"serviceMessages.changed":!0,"rpcLog.appended":!0,"write.progress":!0,"unreach.changed":!0,"config.changed":!0,"pairing.changed":!0,notice:!0};Object.freeze(Object.keys(Sb));const ms={manifest:"manifest.json",profiles:r=>`profiles/${r}.json`,receiverTypeAliases:"receiver-type-aliases.json",masterMetadata:"master-metadata.json",optionPresets:"option-presets.json",crossValidations:"cross-validations.json",translations:r=>`translations/${r}.json`,deviceIcons:"device-icons.json",timeSelectors:"easymode-time-selectors.json",masterForms:"master-forms.json"},wb=/\$\{(\w+)\}/gu;function Ed(r,e){return r.template.replace(wb,(n,s)=>e(s))}const yd={"BidCos-RF":{name:"BidCos-RF",port:2001,tlsPort:42001,localPort:32001,localBinrpc:!0,protocol:"xmlrpc",init:!0,ping:!0,dutyCycle:!0},"BidCos-Wired":{name:"BidCos-Wired",port:2e3,tlsPort:42e3,localPort:32e3,localBinrpc:!0,protocol:"xmlrpc",init:!0,ping:!0},"HmIP-RF":{name:"HmIP-RF",port:2010,tlsPort:42010,localPort:32010,protocol:"xmlrpc",init:!0,ping:!0,pingTimeout:600,pingInterval:30,dutyCycle:!0,serviceMessages:!1},VirtualDevices:{name:"VirtualDevices",port:9292,tlsPort:49292,localPort:39292,path:"/groups",protocol:"xmlrpc",init:!0,ping:!1,serviceMessages:!1,installMode:!1},CUxD:{name:"CUxD",port:8701,protocol:"binrpc",init:!0,ping:!0,ident:"CUxD",serviceMessages:!1,installMode:!1}},kb=Object.keys(yd),Ab=["BidCos-RF","HmIP-RF","VirtualDevices","BidCos-Wired"];function Sd(r){return Object.prototype.hasOwnProperty.call(yd,r)}function Tb(r){return Sd(r)?yd[r]:void 0}function Rb(r){return Tb(r)?.installMode!==!1}function xb(r){const e=[];return r.name.trim()===""?e.push({code:"empty-name"}):Sd(r.name)&&e.push({code:"reserved-name",name:r.name}),r.host.trim()===""&&e.push({code:"empty-host"}),(!Number.isInteger(r.port)||r.port<1||r.port>65535)&&e.push({code:"invalid-port",port:r.port}),e}const sh=0;class gc extends Error{address;constructor(e,n){super(`invalid address ${JSON.stringify(e)}: ${n}`),this.name="AddressError",this.address=e}}const Db=/^\d+$/;function ds(r){if(r==="")return;const e=r.indexOf(":");if(e===-1)return{address:r,device:r,isDevice:!0,isChannel:!1,isMaintenance:!1};const n=r.slice(0,e),s=r.slice(e+1);if(n===""||!Db.test(s))return;const a=Number.parseInt(s,10);return{address:r,device:n,index:a,channel:r,isDevice:!1,isChannel:!0,isMaintenance:a===sh}}function Ib(r){const e=ds(r);if(!e)throw r===""?new gc(r,"empty"):new gc(r,"expected SERIAL or SERIAL:INDEX with a numeric index");return e}function Ds(r){return ds(r)?.isDevice===!0}function Nb(r){return ds(r)?.isChannel===!0}function aa(r){return ds(r)?.isMaintenance===!0}function Fa(r){return Ib(r).device}function Fi(r,e){const n=ds(r),s=ds(e);return!n||!s?n?-1:s?1:r<e?-1:r>e?1:0:n.device!==s.device?n.device<s.device?-1:1:(n.index??-1)-(s.index??-1)}function wd(r,e,n,s){const a=e.trim(),i=ds(r);if(a===""||i===void 0||i.isMaintenance)return[];if(!i.isDevice)return[{address:r,name:a}];const o=[{address:r,name:a},{address:`${r}:0`,name:`${a}:0`}];if(!s.channels)return o;const l=new Set([0]);for(const f of n){const p=ds(f);p?.index===void 0||p.device!==r||l.has(p.index)||(l.add(p.index),o.push({address:f,name:`${a}:${String(p.index)}`}))}return o}function ah(r){if(Array.isArray(r))return r.filter(e=>typeof e=="string");if(typeof r=="string"){const e=r.split(/[\s,]+/).filter(n=>n!=="");return e.length>0?e:[]}}const Yo={VISIBLE:1,INTERNAL:2,DONT_DELETE:8};function Gi(r){const e=typeof r=="number"?r:0,n=(e&Yo.VISIBLE)!==0,s=(e&Yo.INTERNAL)!==0,a=(e&Yo.DONT_DELETE)!==0,i=[];return n&&i.push("Visible"),s&&i.push("Internal"),a&&i.push("DontDelete"),{visible:n,internal:s,dontDelete:a,unknownBits:e&-12,labels:i}}const Cb={ALWAYS:1,BURST:2,CONFIG:4,WAKEUP:8,LAZY_CONFIG:16};function Pb(r){const e=typeof r=="number"?r:0,n=[];for(const[s,a]of Object.entries(Cb))(e&a)!==0&&n.push(s);return n}function kd(r){return r.ROAMING===!0||r.ROAMING===1}const Mb=["NONE","SENDER","RECEIVER"];function Ob(r){return Mb[r??0]??"NONE"}const Lb=["HM-RCV-50","HMW-RCV-50","HmIP-RCV-50","CENTRAL"];function qo(r){return Lb.includes(r)}function ua(r){return typeof r.PARENT=="string"&&r.PARENT!==""}function Ga(r,e,n,s){let a="",i=e;if(ua(e)){if(!s)throw new Error(`cannot build a paramset identity for channel ${e.ADDRESS} without its device`);a=e.TYPE,i=s}const o=i.FIRMWARE??"",l=i.VERSION===void 0?"":String(i.VERSION);return[r,i.TYPE,o,l,a,n].join("/")}function As(r){return r===void 0||r.trim()===""?[]:r.trim().split(/\s+/)}class Fb{interfaceName;#e=new Map;#n=[];#t=[];#s=new Map;#a=new Map;#r=new Map;constructor(e,n=[]){this.interfaceName=e;for(const s of n)this.#i(s);this.#n.sort(Fi),this.#t.sort(Fi);for(const s of this.#s.values())s.sort(Fi)}#i(e){const{ADDRESS:n}=e;if(this.#e.set(n,e),ua(e)){this.#t.push(n);const s=this.#s.get(e.PARENT);s?s.push(n):this.#s.set(e.PARENT,[n])}else this.#n.push(n);for(const s of As(e.LINK_SOURCE_ROLES))bc(this.#a,s,n);for(const s of As(e.LINK_TARGET_ROLES))bc(this.#r,s,n)}get size(){return this.#e.size}has(e){return this.#e.has(e)}get(e){return this.#e.get(e)}require(e){const n=this.#e.get(e);if(!n)throw new Error(`unknown address ${e} on interface ${this.interfaceName}`);return n}devices(){return this.#n.map(e=>this.require(e))}channels(){return this.#t.map(e=>this.require(e))}all(){return[...this.#e.values()].sort((e,n)=>Fi(e.ADDRESS,n.ADDRESS))}childrenOf(e){const n=this.#s.get(e);return n?n.map(a=>this.require(a)):(this.#e.get(e)?.CHILDREN??[]).map(a=>this.#e.get(a)).filter(a=>a!==void 0)}parentOf(e){const n=this.#e.get(e);if(!(!n||!ua(n)))return this.#e.get(n.PARENT)}maintenanceChannelOf(e){const n=ds(e);if(n)return this.#e.get(`${n.device}:${sh}`)}isCentral(e){const n=this.#e.get(e);if(!n)return!1;if(qo(n.TYPE))return!0;const s=n.PARENT_TYPE??this.parentOf(e)?.TYPE;return s!==void 0&&qo(s)}centralDevices(){return this.devices().filter(e=>qo(e.TYPE))}sourceRole(e){return[...this.#a.get(e)??[]]}targetRole(e){return[...this.#r.get(e)??[]]}sourceRoles(){return[...this.#a.keys()].sort()}targetRoles(){return[...this.#r.keys()].sort()}paramsetIdentity(e,n){const s=this.#e.get(e);if(!s)return;if(!ua(s))return Ga(this.interfaceName,s,n);const a=this.parentOf(e);if(a)return Ga(this.interfaceName,s,n,a)}}function bc(r,e,n){const s=r.get(e);s?s.push(n):r.set(e,[n])}const Ad=8,Gb="SMOKE_DETECTOR",Ub="HmIP-SWSD-Group",Bb=/^\*GROUP_([1-8])$/;function ih(r){return`GROUP_${String(r)}`}function Td(r){return`*GROUP_${String(r)}`}function na(r){return Bb.test(r)}function oh(r){return r.TYPE===Gb&&(r.PARENT??"")!==""}function Hb(r){let e=!1;const n=[];for(let s=1;s<=Ad;s+=1){const a=r[ih(s)];a!==void 0&&(e=!0,(a===!0||a===1)&&n.push(s))}return e?n:void 0}function Vb(r){const e=[];for(const n of r.devices())for(const s of r.childrenOf(n.ADDRESS)){const a=s.TEAM_CHANNELS??[];if(a.length!==0){e.push({address:n.ADDRESS,kind:"team",teamChannel:s.ADDRESS,teamTag:s.TEAM_TAG??"",members:[...a]});break}}return e}function lh(r,e){const n=r.get(e)?.TEAM??"";if(n==="")return;const a=r.get(n)?.PARENT??"";return a!==""&&r.has(a)?a:void 0}function zb(r){const e=[];for(let n=1;n<=Ad;n+=1){const s=Object.entries(r).filter(([,a])=>a?.includes(n)===!0).map(([a])=>a).sort();s.length>0&&e.push({address:Td(n),kind:"hmip",number:n,members:s})}return e}function jb(r){const e=new Set;for(const n of Object.values(r))for(const s of n??[])e.add(s);for(let n=1;n<=Ad;n+=1)if(!e.has(n))return n}function Wb(r){return{ADDRESS:Td(r),TYPE:Ub,PARENT:"",CHILDREN:[],PARAMSETS:[],FLAGS:0}}function Kb(r,e){return{added:e.filter(n=>!r.includes(n)),removed:r.filter(n=>!e.includes(n))}}const Yb="0123456789ABCEFGHJKLMNPQRSTUWXYZ",qb=26;function pi(r){return r.replace(/[\s-]/g,"").toUpperCase()}function $i(r){return/^[0-9A-F]{24}$/.test(pi(r))}const $b=new RegExp(`^[0-7][${Yb}]{${String(qb-1)}}$`);function _c(r){const e=pi(r);return/^[0-9A-F]{32}$/.test(e)||$b.test(e)}function Xb(r){const e=pi(r),n=/[A-Z0-9]{4}SG([0-9A-F]{24})DLK([0-9A-F]{32})/.exec(e);if(n?.[1]&&n[2])return{sgtin:n[1],key:n[2]};if($i(e))return{sgtin:e,key:""}}const Ec={SENDER_BROKEN:1,RECEIVER_BROKEN:2};function Qb(r){const e=typeof r=="number"?r:0,n=(e&Ec.SENDER_BROKEN)!==0,s=(e&Ec.RECEIVER_BROKEN)!==0;return{senderBroken:n,receiverBroken:s,broken:n||s,unknownBits:e&-4}}function Zb(r){const e=ds(r.SENDER),n=ds(r.RECEIVER);return e!==void 0&&n!==void 0&&e.device===n.device}function Dl(r){const e=Qb(r.FLAGS);return!e.broken||!Zb(r)?e:{senderBroken:!1,receiverBroken:!1,broken:!1,unknownBits:e.unknownBits}}function dh(r){return ua(r)&&!aa(r.ADDRESS)&&As(r.LINK_SOURCE_ROLES).length>0}function Jb(r){return ua(r)&&!aa(r.ADDRESS)&&As(r.LINK_TARGET_ROLES).length>0}function e_(r,e){if(!dh(r)||!Jb(e))return[];const n=new Set(As(e.LINK_TARGET_ROLES));return As(r.LINK_SOURCE_ROLES).filter(s=>n.has(s))}function t_(r,e){return r.ADDRESS!==e.ADDRESS&&e_(r,e).length>0}function ch(r){return r.channels().filter(e=>dh(e))}function Rd(r){return typeof r=="object"&&r!==null&&"explicitDouble"in r&&typeof r.explicitDouble=="number"}function yc(r){return typeof r=="number"?r:Rd(r)?r.explicitDouble:void 0}function n_(r,e){const n=yc(r),s=yc(e);return n!==void 0||s!==void 0?n===s:r===e}const Sc={abortDeleteDevice:{name:"abortDeleteDevice",params:[{name:"address",type:"device_address"}],returns:"void",help:{de:"Diese Methode bricht einen anhängigen Löschvorgang für ein Gerät ab.<br>Es können nur Löschvorgänge abgebrochen werden, die mit dem Flag DELETE_FLAG_DEFER ausgeführt wurden."}},activateLinkParamset:{name:"activateLinkParamset",params:[{name:"address",type:"channel_address"},{name:"peer_address",type:"channel_address"},{name:"long_press",type:"boolean"}],returns:"void",help:{de:"Mit dieser Methode wird ein Link-Parameterset aktiviert. Das logische Gerät verhält sich dann so als ob es direkt von dem entsprechenden zugeordneten Gerät angesteuert worden wäre. Hiermit kann z.B. ein Link-Parameter-Set getestet werden. Der Parameter address ist die Addresses des anzusprechenden logischen Gerätes. Der Parameter peer_address ist die Addresse des Kommunikationspartners, dessen Link-Parameter-Set aktiviert werden soll. Der Parameter long_press gibt an, ob das Parameterset für den langen Tastendruck aktiviert werden soll."}},addDevice:{name:"addDevice",params:[{name:"address",type:"string"},{name:"mode",type:"integer",optional:["rfd"]}],returns:"DeviceDescription",help:{de:"Diese Methode lernt ein Gerät anhand seiner Seriennummer an die CCU an. Diese Funktion wird nicht von jedem Gerät unterstützt. Rückgabewert ist die DeviceDescription des neu angelernten Geräts.<br>Der optionale Parameter mode bestimmt die Art des Installations-Modus:<br>1 = Normaler Installations-Modus<br>2 = Während des Anlernens werden in den Parametersets „MASTER“ default Parameter gesetzt und alle bestehenden Verknüpfungen werden gelöscht."}},addLink:{name:"addLink",params:[{name:"sender",type:"channel_address"},{name:"receiver",type:"channel_address"},{name:"name",type:"string",optional:["rfd","hs485d"]},{name:"description",type:"string",optional:["rfd","hs485d"]}],returns:"void",help:{de:"Diese Methode erstellt eine Kommunikationsbeziehung zwischen zwei logischen Geräten. Die Parameter sender und receiver bezeichnen die beiden zu verknüpfenden Partner. Die Parameter name und description sind optional und beschreiben die Verknüpfung näher."}},addVirtualDeviceInstance:{name:"addVirtualDeviceInstance",params:[],returns:"",help:{de:"leider nicht von eQ-3 dokumentiert."}},changeKey:{name:"changeKey",params:[{name:"passphrase",type:"string"}],returns:"void",help:{de:"Diese Methode ändert den vom Schnittstellenprozess verwendeten AES-Schlüssel. Der Schlüssel wird ebenfalls in allen angelernten Geräten getauscht."}},clearConfigCache:{name:"clearConfigCache",params:[{name:"address",type:"device_address"}],returns:"void",help:{de:"Diese Methode löscht alle zu einem Gerät in der CCU gespeicherten Konfigurationsdaten. Diese werden nicht sofort wieder vom Gerät abgefragt, sondern wenn sie das nächste mal benötigt werden."}},deleteDevice:{name:"deleteDevice",params:[{name:"address",type:"device_address"},{name:"flags",type:"integer",bitmask:{1:"DELETE_FLAG_RESET",2:"DELETE_FLAG_FORCE",4:"DELETE_FLAG_DEFER"}}],returns:"DeviceDescription",help:{de:"Diese Methode löscht ein Gerät aus dem Schnittstellenprozess.<br>Der Parameter address ist die Addresse des zu löschenden Gerätes.<br>Flags ist ein bitweises oder folgender Werte:<ul><li>DELETE_FLAG_RESET Das Gerät wird vor dem Löschen in den Werkszustand zurückgesetzt </li><li>DELETE_FLAG_FORCE Das Gerät wird auch gelöscht, wenn es nicht erreichbar ist </li><li>DELETE_FLAG_DEFER Wenn das Gerät nicht erreichbar ist, wird es bei nächster Gelegenheit gelöscht</li></ul>Bei Homematic IP sind die Flags 0x01 und 0x04 nicht mehr vorhanden und das Löschen von Geräten ist per Default so, als wenn diese Flags gesetzt worden wären."}},determineParameter:{name:"determineParameter",params:[{name:"address",type:"device_address"},{name:"paramset_key",type:"string"},{name:"parameter_id",type:"string"}],returns:"void",help:{de:"Mit dieser Methode wird ein Parameter eines Parameter-Sets automatisch bestimmt. Der Parameter kann bei erfolgreicher Ausführung anschließend sofort über getParamset gelesen werden.<br>Der Parameter address ist die Addresses eines logischen Gerätes.<br>Der Parameter paramset_key ist „MASTER“, „VALUES“ oder die Adresse eines Kommunikationspartners für das entsprechende Link-Parameter-Set (siehe getLinkPeers). Der Parameter parameter_id bestimmt den automatisch zu bestimmenden Parameter."}},getDeviceDescription:{name:"getDeviceDescription",params:[{name:"address",type:"device_address"}],returns:"DeviceDescription",help:{de:"Diese Methode gibt die Gerätebeschreibung des als address übergebenen Gerätes zurück."}},getInstallMode:{name:"getInstallMode",params:[],returns:"Integer",help:{de:"Diese Methode gibt die verbliebene Restzeit in Sekunden im Anlernmodus zurück. Der Wert 0 bedeutet, der Anlernmodus ist nicht aktiv."}},getKeyMismatchDevice:{name:"getKeyMismatchDevice",params:[{name:"reset",type:"bool"}],returns:"String",help:{de:"Diese Methode gibt die Seriennummer des letzten Gerätes zurück, das aufgrund eines falschen AES-Schlüssels nicht angelernt werden konnte. Mit reset=true wird diese Information im Schnittstellenprozess zurückgesetzt."}},getLGWStatus:{name:"getLGWStatus",params:[],returns:"",help:{de:"Gibt den Status des Wired-LAN-Gateways zurück."}},getLinkInfo:{name:"getLinkInfo",params:[{name:"sender",type:"device_address"},{name:"receiver",type:"device_address"}],returns:"Array",help:{de:"Diese Methode gibt den Namen und die Beschreibung für eine bestehende Kommunikationsbeziehung zurück. Die Parameter sender_address und receiver_address bezeichnen die beiden verknüpften Partner."}},getLinkPeers:{name:"getLinkPeers",params:[{name:"address",type:"device_address"}],returns:"",help:{de:"Diese Methode gibt alle einem logischen Gerät zugeordneten Kommunikationspartner zurück. Die zurückgegebenen Werte können als Parameter paramset_key für getParamset() und putParamset() verwendet werden. Der Parameter address ist die Adresse eines logischen Gerätes."}},getLinks:{name:"getLinks",params:[{name:"address",type:"address"},{name:"flags",type:"integer",optional:["rfd","hs485d"],bitmask:{1:"GL_FLAG_GROUP",2:"GL_FLAG_SENDER_PARAMSET",4:"GL_FLAG_RECEIVER_PARAMSET"}}],returns:"Array",help:{de:"Diese Methode gibt alle einem logischen Kanal oder Gerät zugeordneten Kommunikationsbeziehungen zurück.<br>Der Parameter address ist die Kanal- oder Geräteadresse des logischen Objektes, auf das sich die Abfrage bezieht. Bei address==&quot;&quot; werden alle Kommunikationsbeziehungen des gesamten Schnittstellenprozesses zurückgegeben.<br>Der Parameter flags ist ein bitweises oder folgender Werte:<ul><li>GL_FLAG_GROUP Wenn address einen Kanal bezeichnet, der sich in einer Gruppe befindet, werden die Kommunikationsbeziehungen für alle Kanäle der Gruppe zurückgegeben.</li><li>GL_FLAG_SENDER_PARAMSET Das Feld SENDER_PARAMSET des Rückgabewertes wird gefüllt. </li><li>GL_FLAG_RECEIVER_PARAMSET Das Feld RECEIVER_PARAMSET des Rückgabewertes wird gefüllt.</li></ul>flags ist optional. Defaultwert ist 0x00."}},getMetadata:{name:"getMetadata",params:[{name:"object_id",type:"string"},{name:"data_id",type:"string"}],returns:"Variant",help:{de:"Diese Methode gibt ein Metadatum zu einem Objekt zurück.<br><b>object_id</b> ist die Id des Metadaten-Objekts. Üblicherweise ist dies die Seriennummer eines Gerätes oder Kanals.<br><b>data_id</b> ist die Id des abzufragenden Metadatums. Diese Id kann frei gewählt werden. Der Rückgabewert entspricht in Datentyp und Wert der zuvor an setMetadata() als Parameter value übergebenen Variablen. "}},getAllMetadata:{name:"getAllMetadata",params:[{name:"object_id",type:"string"}],returns:"Struct",help:{de:"Diese Methode gibt alle zuvor gesetzten Metadaten zu einem Objekt zurück.<br><b>object_id</b> ist die Id des Metadaten-Objekts. Üblicherweise ist dies die Seriennummer eines Gerätes oder Kanals. Durch Übergabe einer beliebigen Id können aber auch eigene Metadaten-Objekte angelegt werden.<br>Der Rückgabewert ist ein Struct, der zu jedem zuvor gesetzten Metadatum ein Feld enthält. Der Feldname ist der zuvor an setMetadata() als Parameter data_id übergebene Wert. Der Wert des Feldes entspricht in Datentyp und Wert der zuvor an setMetadata() als Parameter value übergebenen Variablen. "}},getParamset:{name:"getParamset",params:[{name:"address",type:"address"},{name:"paramset_key",type:"string"},{name:"mode",type:"integer",optional:["rfd"]}],returns:"",help:{de:"Mit dieser Methode wird ein komplettes Parameter-Set für ein logisches Gerät gelesen. Der Parameter address ist die Addresses eines logischen Gerätes. Der Parameter paramset_key ist „MASTER“, „VALUES“ oder die Adresse eines Kommunikationspartners für das entsprechende Link-Parameter-Set (siehe getLinkPeers).<br>Dem optionalen Parameter mode können folgende Werte übergeben werden (nur rfd):<ul><li>0 default: Keien Auswirkung, die Funktion verhält sicht wie der Aufruf ohne mode</li><li>1 UndefinedValues: Jeder Eintrag innerhalb des zurückgelieferten Paramset ins eine Struktur mit folgendem Aufbau:<br>„UNDEFINED“(Boolean) Flag ob der angeforderte Wert initial gesetzt wurde und somit wahrscheinlich nicht der Realität entspricht oder ob der Wert von einem Gerät empfangen wurde, true = Wert wurde initial gesetzt und noch nicht verändert, false = der Wert wurde neu gesetzt <br>„VALUE“(ValueType) Wert des angeforderten Parameter.<br>UndefindeValues kann nur für Parameter aus dem Parameterset „VALUES“ abgefragt werden. Bei HomeMatic IP gibt es für bestimmte Geräte zusätzlich den paramset_type„SERVICE“, welche Geräte dies sind, ist der jeweiligen DeviceDescription zu entnehmen.Ebenso ist dieses Parameter Set kanalübergreifend, so dass es über die XML-RPCSchnittstellefür alle Kanäle abgefragt werden kann, aber immer dieselben Parameterzurückliefert.<br>Hinweis: Diese Parameter werden bei jeder Anfrage direkt vom Gerät abgefragt, deshalbsollten sie wegen der DutyCycle Belastung nicht sehr häufig abgefragt werden."}},getParamsetDescription:{name:"getParamsetDescription",params:[{name:"address",type:"address"},{name:"paramset_type",type:"paramset_type"}],returns:"",help:{de:"Mit dieser Methode wird die Beschreibung eines Parameter-Sets ermittelt. Der Parameter address ist die Adresse eines logischen Gerätes (z.B. von listDevices zurückgegeben). Der Parameter paramset_type ist „MASTER“, „VALUES“ oder „LINK“.Bei HomeMatic IP gibt es für bestimmte Geräte zusätzlich den paramset_typeSERVICE, welche Geräte dies sind, ist der jeweiligen DeviceDescription zu entnehmen.Ebenso ist dieses Parameter Set kanalübergreifend, so dass es über die XML-RPCSchnittstellefür alle Kanäle abgefragt werden kann, aber immer dieselben Parameter zurückliefert. "}},getParamsetId:{name:"getParamsetId",params:[{name:"address",type:"address"},{name:"type",type:"string"}],returns:"",help:{de:"Diese Methode gibt die Id eines Parametersets zurück. Diese wird verwendet, um spezialisierte Konfigurationsdialoge (Easymode) den Parametersets zuzuordnen."}},getServiceMessages:{name:"getServiceMessages",params:[],returns:"",help:{de:"Diese Methode gibt eine Liste aller vorhandenen Servicemeldungen in Form eines Arrays zurück."}},getValue:{name:"getValue",params:[{name:"address",type:"device_address"},{name:"value_key",type:"string"},{name:"mode",type:"integer",optional:["rfd"]}],returns:"",help:{de:"Mit dieser Methode wird ein einzelner Wert aus dem Parameter-Set „VALUES“ gelesen. Der Parameter address ist die Addresse eines logischen Gerätes. Der Parameter value_key ist der Name des zu lesenden Wertes. Die möglichen Werte für value_key ergeben sich aus der ParamsetDescription des entsprechenden Parameter-Sets „VALUES“.<br>Dem Parameter mode können folgende Werte übergeben werden:<ul><li>0 default: Keien Auswirkung, die Funktion verhält sicht wie der Aufruf ohne mode</li><li>1 UndefinedValues: Es wird ein Struktur zurückgeliefert die folgenden Aufbau hat:<br>„UNDEFINED“(Boolean) Flag ob der angeforderte Wert initial gesetzt wurde und somit wahrscheinlich nicht der Realität entspricht oder ob der Wert von eimen Gerät empfangen wurde, true = Wert wurde initial gesetzt und noch nicht verändert, false = der Wert wurde neu gesetzt<br>„VALUE“(ValueType) Wert des angeforderten Parameter.</li></ul><br>UndefindeValues kann nur für Parameter aus dem Parameterset „VALUES“ abgefragt werden die mit OPERATIONS = Read gekenzeichnet sind."}},getVersion:{name:"getVersion",params:[],returns:"",help:{de:"Liefert die Version des BidCoS-Service."}},listBidcosInterfaces:{name:"listBidcosInterfaces",params:[],returns:"",help:{de:"Diese Methode gibt eine Liste aller vorhandenen BidCoS-Interfaces in Form eines Arrays von Structs zurück"}},listDevices:{name:"listDevices",params:[],returns:"",help:{de:"Diese Methode gibt alle dem Schnittstellenprozess bekannten Geräte in Form von Gerätebeschreibungen zurück."}},listReplaceableDevices:{name:"listReplaceableDevices",params:[{name:"newDeviceAddress",type:"device_address"}],returns:"",help:{de:"Mit dieser Funktionen kann eine Liste der Geräte angefordert werden die durch das übergebene Gerät ersetzt werden können.<br>Über den Parameter newDeviceAddress wird die Adresse des neuen Geräts übergeben für die die möglichen Tauschpartner ermittelt werden sollen."}},listTeams:{name:"listTeams",params:[],returns:"",help:{de:"Diese Methode gibt alle dem Schnittstellenprozess bekannten Teams in Form von Gerätebeschreibungen zurück."}},logLevel:{name:"logLevel",params:[{name:"level",type:"integer",optional:["rfd","hs485d"],values:{0:"LOG_ALL",1:"LOG_DEBUG",2:"LOG_INFO",3:"LOG_NOTICE",4:"LOG_WARNING",5:"LOG_ERROR",6:"LOG_FATAL_ERROR"}}],returns:"",help:{de:"Diese Methode gibt den aktuellen Log-Level zurück bzw. setzt diesen."}},ping:{name:"ping",params:[{name:"callerId",type:"string"}],returns:"bool",help:{de:"Beim Aufruf dieser Funktion wird ein Event (im Folgenden PONG genannt) erzeugt und an alle registrierten Logikschichten versandt. Da das PONG Event an alle registrierten Logikschichten (wie bei allen anderen Events auch) verschickt wird, muss in einer Logikschicht damit gerechnet werden, ein PONG Event zu empfangen ohne zuvor ping aufgerufen zu haben. Der Parameter callerId ist vom Aufrufer zu übergeben und wird als Wert des PONG Events verwendet. Der Inhalt des String ist unerheblich. Tritt während der Verarbeitung keine Exception auf, so wird von der Methode true zurückgegeben. Das PONG Event wird über die event Methode der Logikschicht ausgeliefert. Die Adresse ist dabei immer „CENTRAL“, der key lautet „PONG“ und der Wert ist die im ping Aufrufübergebene callerId"}},putParamset:{name:"putParamset",params:[{name:"address",type:"address"},{name:"paramset_key",type:"string"},{name:"set",type:"paramset"}],returns:"",help:{de:"Mit dieser Methode wird ein komplettes Parameter-Set für ein logisches Gerät geschrieben. Der Parameter address ist die Addresses eines logischen Gerätes. Der Parameter paramset_key ist „MASTER“, „VALUES“ oder die Adresse eines Kommunikationspartners für das entsprechende Link-Parameter-Set (siehe getLinkPeers). Der Parameter set ist das zu schreibende Parameter-Set. In set nicht vorhandene Member werden einfach nicht geschrieben und behalten ihren alten Wert.<br>Bei HomeMatic IP kann address auch die spezielle Adresse ALL_SMOKE_DETECTORS sein, welche für die Übertragung über Funk nicht eine Geräteadresse sondern die Multicast Adresse (0xF00005) für alle Rauchmelder verwendet und somit auch alle in Funkreichweite befindlichen Rauchmelder des Funknetzwerkes diesen ausführen sollten."}},removeLink:{name:"removeLink",params:[{name:"sender",type:"device_address"},{name:"receiver",type:"device_address"}],returns:"",help:{de:"Diese Methode löscht eine Kommunikationsbeziehung zwischen zwei Geräten. Die Parameter sender und receiver bezeichnen die beiden Kommunikationspartner deren Kommunikationszuordnung gelöscht werden soll."}},replaceDevice:{name:"replaceDevice",params:[{name:"oldDeviceAddress",type:"device_address"},{name:"newDeviceAddress",type:"device_address"}],returns:"",help:{de:"Mit dieser Funktion kann ein altes gegen ein neues Gerät ausgetauscht werden. Alle direkten Geräteverknüpfungen und Konfigurationen werden auf das neue Gerät kopiert und das alte Gerät gelöscht. Die Beiden Geräte müssen hinsichtlich ihrer Funktionalität kompatibel sein. Mit der Methode listReplaceableDevice() kann eine List kompatibeler Geräte abgefragt werden. Das neue Gerät muss an dem Schnittstellenprozess angemeldet sein und darf noch nicht in Verknüpfungen verwendet werden. Über die Parameter oldDeviceAddress und newDeviceAddress wird der Methode die Adresse des alten Gerätes und des neuen Gerätes übergeben. Der Rückgabewert ist true wenn der Tausch erfolgreich war, ansonsten false"}},reportValueUsage:{name:"reportValueUsage",params:[{name:"address",type:"channel_address"},{name:"value_id",type:"string"},{name:"ref_counter",type:"integer"}],returns:"",help:{de:"Diese Methode teilt dem Interfaceprozess in ref_counter mit, wie oft der Wert value_id des Kanals address innerhalb der Logikschicht (z.B. in Programmen) verwendet wird. Dadurch kann der Interfaceprozess die Verbindung mit der entsprechenden Komponente herstellen bzw. löschen. Diese Funktion sollte bei jeder Änderung aufgerufen werden.<br>Der Rückgabewert ist true, wenn die Aktion sofort durchgeführt wurde. Er ist false, wenn die entsprechende Komponente nicht erreicht werden konnte und vom Benutzer zunächst in den Config-Mode gebracht werden muss. Der Interfaceprozess hat dann aber die neue Einstellung übernommen und wird sie bei nächster Gelegenheit automatisch an die Komponente übertragen. In diesem Fall ist dann auch der Wert CONFIG_PENDING im Kanal MAINTENANCE der Komponente gesetzt."}},restoreConfigToDevice:{name:"restoreConfigToDevice",params:[{name:"address",type:"device_address"}],returns:"",help:{de:"Diese Methode überträgt alle zu einem Gerät in der CCU gespeicherten Konfigurationsdaten erneut an das Gerät."}},rssiInfo:{name:"rssiInfo",params:[],returns:"",help:{de:"Gibt ein zweidimensionales assoziatives Array zurück, dessen Schlüssel die Geräteadressen sind. Die Felder des assoziativen Arrays sind Tupel, die die Empfangsfeldstärken zwischen beiden Schlüsselgeräten für beide Richtungen in dbm angeben. ein Wert von 65536 bedeutet, dass keine Informationen vorliegen.<ul><li>Rückgabewert[<Gerät 1>][<Gerät 2>][0] Empfangsfeldstärke an Gerät 1 für Sendungen von Gerät 2</li><li>Rückgabewert[<Gerät 1>][<Gerät 2>][1] Empfangsfeldstärke an Gerät 2 für Sendungen von Gerät 1</li></ul>"}},searchDevices:{name:"searchDevices",params:[],returns:"",help:{de:"Diese Methode durchsucht den Bus nach neuen Geräten und gibt die Anzahl gefundener Geräte zurück. Die neu gefundenen Geräte werden mit newDevices der Logikschicht gemeldet."}},setBidcosInterface:{name:"setBidcosInterface",params:[{name:"device_address",type:"device_address"},{name:"interface_address",type:"interface_address"},{name:"roaming",type:"boolean"}],returns:"",help:{de:"Diese Methode setzt das für die Kommunikation mit dem durch device_address spezifizierten Gerät verwendete Bidcos-Interface. Die Seriennummer des in Zukunft für die Kommunikation mit diesem Gerät zu verwendenden Interfaces wird in interface_address übergeben. Ist der Parameter roaming gesetzt, so wird die Interfacezuordnung für das Gerät automatisch in Abhängigkeit von der Empfangsfeldstärke angepasst. Das ist für nicht ortsfeste Geräte wie Fernbedienungen sinnvoll."}},setInstallMode:{name:"setInstallMode",params:[{name:"on",type:"boolean"},{name:"time",type:"integer",optional:["rfd"]},{name:"mode",type:"integer",optional:["rfd"]}],returns:"",help:{de:"Diese Methode aktiviert und deaktiviert den Installations-Modus, in dem neue Geräte an der HomeMatic-CCU angemeldet werden können.<br>Der Parameter on bestimmt, ob der Installations-Modus aktiviert oder deaktiviert werden soll.<br>Der Parameter time bestimmt die Zeit in Sekunden die der Installations-Modus aktiviert ist<br>Der Parameter mode bestimmt die Art des Installations-Modus:<ul><li>1 = Normaler Installations-Modus</li><li>2 = Während des Anlernens werden in den Parametersets „MASTER“ default Parameter gesetzt und alle bestehenden Verknüpfungen werden gelöscht.</li></ul>"}},setInterfaceClock:{name:"setInterfaceClock",params:[{name:"utcSeconds",type:"integer"},{name:"offsetMinutes",type:"integer"}],returns:"",help:{de:"Setzt die UTC Zeit für alle Interfaces, die dies benötigen.<br>Mit dem Parameter utcSeconds werden die Sekunden seti 01.01.1970 00:00 Uhr (UTC) gesetzt.<br>Über den Parameter offsetMinutes wird der Offset in Minuten entsprechend der jeweiligen Zeitzone übergeben.<br>Der Rückgabewert der Methode ist false im Fehlerfall, ansonsten true."}},setLinkInfo:{name:"setLinkInfo",params:[{name:"sender",type:"channel_address"},{name:"receiver",type:"channel_address"},{name:"name",type:"string"},{name:"description",type:"string"}],returns:"",help:{de:"Diese Methode ändert die beschreibenden Texte einer Kommunikationsbeziehung. Die Spezifikation Parameter sender und receiver bezeichnen die beiden zu verknüpfenden Partner. Die Parameter name und description beschreiben die Verknüpfung textuell."}},setMetadata:{name:"setMetadata",params:[{name:"object_id",type:"string"},{name:"data_id",type:"string"},{name:"value",type:"variant"}],returns:"void",help:{de:"Diese Methode setzt ein Metadatum zu einem Objekt.<br><b>object_id</b> ist die Id des Metadaten-Objekts. Üblicherweise ist dies die Seriennummer eines Gerätes oder Kanals. Durch Übergabe einer beliebigen Id können aber auch eigene Metadaten-Objekte angelegt werden. <br><b>data_id</b> ist die Id des zu setzenden Metadatums. Diese Id kann frei gewählt werden. <br><b>value</b> ist eine beliebige Variable. Diese wird gespeichert und kann später mittels getMetadata() und getAllMetadata() wieder abgefragt werden."}},setRFLGWInfoLED:{name:"setRFLGWInfoLED",params:[{name:"mode",type:"integer",optional:["rfd"],values:{0:"OFF",1:"ON",2:"FLASH_SLOW",3:"FLASH_FAST"}}],returns:"",help:{de:"Steuert die LED von verbundenen LAN Gateways (HMLGW2) an."}},setTeam:{name:"setTeam",params:[{name:"channel_address",type:"channel_address"},{name:"team_address",type:"team_address"}],returns:"",help:{de:"Diese Methode fügt den Kanal channel_address zum Team team_address hinzu. Bei team_address==““ wird der Kanal channel_address seinem eigenen Team zugeordnet. Dabei muss team_address entweder leer sein (““) oder eine Seriennummer eines existierenden Teams enthalten. Teams werden dabei je nach Bedarf erzeugt und gelöscht."}},setTempKey:{name:"setTempKey",params:[{name:"passphrase",type:"string"}],returns:"",help:{de:"Diese Methode ändert den von der CCU verwendeten temporären AES-Schlüssel. Der temporäre AES-Schlüssel wird verwendet, um ein Gerät anzulernen, in dem ein anderer Schlüssel gespeichert ist als der Schlüssel der CCU."}},setValue:{name:"setValue",params:[{name:"address",type:"channel_address"},{name:"value_key",type:"value_key"},{name:"value",type:"mixed"}],returns:"",help:{de:"Mit dieser Methode wird ein einzelner Wert aus dem Parameter-Set „VALUES“ geschrieben. Der Parameter address ist die Addresse eines logischen Gerätes. Der Parameter value_key ist der Name des zu schreibenden Wertes. Die möglichen Werte für value_key ergeben sich aus der ParamsetDescription des entsprechenden Parameter-Sets „VALUES“. Der Parameter value ist der zu schreibende Wert.<br>Bei HomeMatic IP kann address auch die spezielle Adresse ALL_SMOKE_DETECTORS sein, welche für die Übertragung über Funk nicht eine Geräteadresse sondern die Multicast Adresse (0xF00005) für alle Rauchmelder verwendet und somit auch alle in Funkreichweite befindlichen Rauchmelder des Funknetzwerkes diesen ausführen sollten."}},"system.listMethods":{name:"system.listMethods",params:[],returns:"",help:{}},"system.methodHelp":{name:"system.methodHelp",params:[{name:"method",type:"string"}],returns:"",help:{}},updateFirmware:{name:"updateFirmware",params:[{name:"device",type:"device_address"}],returns:"",help:{de:"Diese Methode führt ein Firmware-Update für das in device angegebene Gerät durch. Das Gerät wird durch seine Seriennummer spezifiziert. Der Rückgabewert gibt an, ob das Firmware-Update erfolgreich war."}},installFirmware:{name:"installFirmware",params:[{name:"device",type:"device_address"}],returns:"boolean",help:{de:"Mit dieser Methode teilt die Logikschicht dem Schnittstellenprozess mit, dass ein Gerät die über Background OTAU aufgespielte Firmware aktiveren soll."}},setInstallModeWithWhitelist:{name:"setInstallModeWithWhitelist",params:[{name:"on",type:"boolean"},{name:"time",type:"integer"},{name:"whitelistValues",type:"RpcStruct[]"}],returns:"void",help:{de:"Mit dieser Methode teilt die Logikschicht dem Schnittstellenprozess mit, dass ein oder mehrere Geräte über die Whitelist für die Inkludierung freigeschaltet werden sollen für den angegebenen Zeitraum. <ul><li>on, gibt an ob die Install Mode aktiviert oder deaktiviert werden soll. Wenn der Wert „false“ ist haben die weiteren Parameter keine Auswirkung auf die Aktion. </li><li> time, gibt die Zeit in Sekunden an, nach der der Install Mode deaktiviert werden soll. Der Defaultwert ist 30 Sekunden. </li><li>whiteListValues, gibt die Geräte an, die inkludiert werden sollen, dies ist ein Array aus RPC Structs, welche folgende Daten haben: <ul><li> ADDRESS, gibt die SGTIN bzw. ID des Gerätes an, das inkludiert werden soll. </li><li> KEY_MODE, gibt den Typen des Keys an, der für die Inklusion verwendet werden soll. Dieser Wert ist ein String mit folgenden unterstützten Werten: <ul><li>LOCAL </li><li>MASTER und DEFAULT werden zur Zeit vom crRFD noch nicht unterstützt</li></ul> </li><li> KEY, gibt den zu verwendenden Geräteschlüssel an, der bei der Inklusion verwendet werden soll. Dieser Wert ist der Hexstring des 16 Byte langen Schlüssels </li></ul></li></ul> Wenn der KEY_MODE oder KEY nicht angegeben ist wird der Master Key vom Key-Server für die Inklusion versucht zu nutzten. Die Whitelist wird beim Ablauf des Install Mode zurückgesetzt."}}},wc={suppressServiceMessages:{name:"suppressServiceMessages",params:[{name:"address",type:"channel_address"},{name:"parameter",type:"value_key"},{name:"suppress",type:"bool"}],returns:"void",help:{de:"Unterdrückt die Servicemeldung eines Parameters mit dem Service-Flag (nur HmIP). Der Parameter address ist die Kanaladresse, parameter der Name eines Parameters mit dem Service-Flag in seiner Beschreibung oder „“ für alle Service-Parameter des Kanals. Mit suppress=true meldet die Schnittstelle einen Wert, der keine Meldung auslöst (UNREACH wird immer false); suppress=false hebt die Unterdrückung wieder auf.",en:'Suppresses the service message of a parameter with the Service flag (HmIP only). The parameter address is the channel address, parameter the name of a parameter carrying the Service flag in its description, or "" for every service parameter of the channel. With suppress=true the interface reports a value that raises no message (UNREACH is always false); suppress=false lifts the suppression again.'}},getSuppressedServiceMessages:{name:"getSuppressedServiceMessages",params:[{name:"address",type:"channel_address"}],returns:"String[]",help:{de:"Gibt die Namen der Parameter zurück, deren Servicemeldungen für den Kanal address zurzeit unterdrückt sind (nur HmIP, siehe suppressServiceMessages).",en:"Returns the names of the parameters whose service messages are currently suppressed for the channel address (HmIP only, see suppressServiceMessages)."}}};function r_(r){return Object.prototype.hasOwnProperty.call(Sc,r)?Sc[r]:Object.prototype.hasOwnProperty.call(wc,r)?wc[r]:void 0}function s_(r){return{name:r,params:[],returns:"",help:{}}}new TextDecoder("utf-8",{fatal:!0});const a_={WRITE:2};function Jr(r){return(r.OPERATIONS&a_.WRITE)!==0}function Us(r){if(!r)return;const e=r.VALUE_LIST;return Array.isArray(e)?e:void 0}function uh(r,e){const n=Us(r)?.indexOf(e)??-1;return n===-1?void 0:n}function nr(r,e){const n=r[e];if(typeof n=="number")return n;if(typeof n=="string"&&r.TYPE==="ENUM")return uh(r,n)}function i_(r,e){if(!(typeof e!="number"||!r.SPECIAL))return r.SPECIAL.find(n=>n.VALUE===e)}function o_(r,e){return i_(r,e)!==void 0}function xd(r){return Object.keys(r).sort((e,n)=>{const s=r[e]?.TAB_ORDER??Number.MAX_SAFE_INTEGER,a=r[n]?.TAB_ORDER??Number.MAX_SAFE_INTEGER;return s!==a?s-a:e<n?-1:1})}const fh="100%",l_="�C",d_="°C",c_="°C";function ho(r){const e=r?.UNIT;return e===void 0||e===""||e==='""'?"":e===fh?"%":e===l_||e===d_?c_:e}function u_(r){return r?.UNIT===fh}function hh(r){return u_(r)?100:1}function fa(r,e){if(r!==void 0)return mh(r*hh(e))}function kc(r,e){if(r!==void 0)return mh(r/hh(e))}function mh(r){return Number.isFinite(r)?Number.parseFloat(r.toPrecision(10)):r}const f_=[.1,1,5,10,60,300,600,3600],Ac=["BASE_100_MS","BASE_1_S","BASE_5_S","BASE_10_S","BASE_1_M","BASE_5_M","BASE_10_M","BASE_1_H"],h_=31,m_="NOT_USED";function vh(r){return r?.SPECIAL?.find(e=>e.ID===m_)?.VALUE}function Dd(r){return Math.round(r*10)/10}const v_={"10MS":.01,"100MS":.1,S:1,"1S":1,"5S":5,"10S":10,M:60,"1M":60,"5M":300,"10M":600,H:3600,"1H":3600,D:86400},Tc="_BASE",p_="_FACTOR",Rc="_UNIT",g_="_VALUE",xc="_TIME";function wo(r){const e=[];for(const[n,s]of Object.entries(r)){const a=E_(r,n,s)??y_(r,n,s);a&&e.push(a)}return e}function Id(r,e){return b_(r[e.unitParam],r[e.countParam],e)}function b_(r,e,n){const s=__(r,n),a=s===void 0?void 0:n.units[s],i=typeof e=="number"?e:Number.NaN;if(!(s===void 0||a===void 0||!Number.isInteger(i)||i<0||i>n.maxCount))return{seconds:Dd(a.seconds*i),unitIndex:s,unitSeconds:a.seconds,count:i,maximal:s===n.units.length-1&&i===n.maxCount}}function __(r,e){if(typeof r=="number"&&Number.isInteger(r)&&r>=0&&r<e.units.length)return r;if(typeof r=="string"){const n=e.units.findIndex(s=>s.name===r);return n===-1?void 0:n}}function ph(r,e){if(!Number.isFinite(r)||r<0||e.units.length===0)return;let n,s=Number.POSITIVE_INFINITY;for(const[a,i]of e.units.entries()){const o=Math.min(e.maxCount,Math.max(0,Math.round(r/i.seconds))),l=Dd(i.seconds*o),f=Math.abs(l-r);f<s&&(s=f,n={seconds:l,unitIndex:a,unitSeconds:i.seconds,count:o,maximal:a===e.units.length-1&&o===e.maxCount,exact:f===0})}return n}function Nd(r,e){const n=ph(r,e);if(n)return{[e.unitParam]:n.unitIndex,[e.countParam]:n.count}}function gh(r){const e=r.units.at(-1);return e===void 0?0:Dd(e.seconds*r.maxCount)}function E_(r,e,n){if(!e.endsWith(Tc))return;const s=e.slice(0,-Tc.length),a=`${s}${p_}`,i=r[a];if(!i)return;const o=bh(Us(n)??Ac,l=>f_[Ac.indexOf(l)]);if(o)return{name:s.endsWith(xc)?s.slice(0,-xc.length):s,kind:"base-factor",unitParam:e,countParam:a,units:o,maxCount:nr(i,"MAX")??h_}}function y_(r,e,n){if(!e.endsWith(Rc))return;const s=e.slice(0,-Rc.length),a=`${s}${g_}`,i=r[a],o=Us(n);if(!i||!o||o.length===0)return;const l=nr(i,"MAX"),f=bh(o,p=>v_[p]);if(!(l===void 0||!f))return{name:s,kind:"unit-value",unitParam:e,countParam:a,units:f,maxCount:l}}function bh(r,e){const n=[];for(const s of r){const a=e(s);if(a===void 0)return;n.push({name:s,seconds:a})}return n}const S_=new Set;function w_(r){return S_.has(r)?"name":"index"}function Il(r,e,n={}){const s=Rd(r)?r.explicitDouble:r;if(!e)return typeof s=="boolean"||typeof s=="string"?s:String(s);switch(e.TYPE){case"ACTION":case"BOOL":return k_(s);case"FLOAT":{const a=Cd(Eh(Number.parseFloat(String(s))),e,n);return n.explicitDouble===!1?a:{explicitDouble:a}}case"ENUM":return A_(s,e,n);case"INTEGER":return _h(s,e,n);case"STRING":return String(s);default:return String(s)}}function k_(r){if(r==="false")return!1;if(typeof r=="string"){const e=Number(r);return Number.isNaN(e)?!0:e!==0}return!!r}function A_(r,e,n){const s=Us(e);if(!s)return _h(r,e,n);if(typeof r=="string"){const i=uh(e,r);if(i!==void 0)return n.enumAs==="name"?r:i}const a=T_(r);return a===void 0?String(r):n.enumAs==="name"?s[a]??String(r):Cd(a,e,n)}function T_(r){if(typeof r=="boolean")return Number(r);const e=Number.parseInt(String(r),10);return Number.isFinite(e)?e:void 0}function _h(r,e,n){return typeof r=="boolean"?Number(r):Cd(R_(r),e,n)}function R_(r){return Eh(Number.parseInt(String(r),10))}function Eh(r){return Number.isFinite(r)?r:0}function Cd(r,e,n){if(n.clamp!==!0)return r;const s=typeof e.MIN=="number"?e.MIN:void 0,a=typeof e.MAX=="number"?e.MAX:void 0;return s!==void 0&&r<s?s:a!==void 0&&r>a?a:r}const x_=255;function $o(r,e,n,s={}){if(!n)return[Sr(r,"unknown-parameter",`${r} is not part of this paramset`)];if(s.requireWritable!==!1&&!Jr(n))return[Sr(r,"not-writable",`${r} is read-only (OPERATIONS ${n.OPERATIONS})`)];const a=Rd(e)?e.explicitDouble:e;switch(n.TYPE){case"BOOL":case"ACTION":return typeof a=="boolean"?[]:[Sr(r,"wrong-type",`${r} expects a boolean, got ${gi(a)}`)];case"INTEGER":return Dc(r,a,n,!0);case"FLOAT":return Dc(r,a,n,!1);case"ENUM":return D_(r,a,n);case"STRING":return I_(r,a,s);default:return typeof a=="object"?[Sr(r,"wrong-type",`${r} expects a scalar, got ${gi(a)}`)]:[]}}function Dc(r,e,n,s){return typeof e!="number"?[Sr(r,"wrong-type",`${r} expects a number, got ${gi(e)}`)]:Number.isFinite(e)?s&&!Number.isInteger(e)?[Sr(r,"wrong-type",`${r} expects a whole number, got ${e}`)]:o_(n,e)?[]:yh(r,e,n):[Sr(r,"not-finite",`${r} is ${e}, which XML-RPC cannot encode`)]}function D_(r,e,n){const s=Us(n);return typeof e=="string"?s?s.includes(e)?[]:[Sr(r,"not-in-value-list",`${r} does not accept ${e}`,s.join(", "))]:[Sr(r,"not-in-value-list",`${r} has no VALUE_LIST to resolve ${e} against`)]:typeof e!="number"||!Number.isInteger(e)?[Sr(r,"wrong-type",`${r} expects an enum name or index, got ${gi(e)}`)]:s&&(e<0||e>=s.length)?[Sr(r,"not-in-value-list",`${r} has no value at index ${e}`,s.length-1)]:yh(r,e,n)}function I_(r,e,n){if(typeof e!="string")return[Sr(r,"wrong-type",`${r} expects a string, got ${gi(e)}`)];const s=n.maxStringLength??x_;return e.length>s?[Sr(r,"string-too-long",`${r} is longer than ${s} characters`,s)]:[]}function yh(r,e,n){const s=nr(n,"MIN"),a=nr(n,"MAX");return s!==void 0&&e<s?[Sr(r,"below-min",`${r} is below its minimum of ${s}`,s)]:a!==void 0&&e>a?[Sr(r,"above-max",`${r} is above its maximum of ${a}`,a)]:[]}function Sr(r,e,n,s){return s===void 0?{param:r,code:e,message:n}:{param:r,code:e,message:n,limit:s}}function gi(r){return r===null?"null":typeof r}function N_(r,e,n,s={}){const a={},i=[],o=[],l=[],f=s.writeAll===!0,p=s.enumAs===void 0?{}:{enumAs:s.enumAs},_=s.maxStringLength===void 0?{}:{maxStringLength:s.maxStringLength};for(const g of C_(e,n,f)){const k=n[g];if(!k){l.push(...$o(g,e[g],void 0)),o.push({param:g,reason:"unknown-parameter"});continue}const E=Object.prototype.hasOwnProperty.call(e,g);if(!Jr(k)){E&&l.push(...$o(g,e[g],k)),o.push({param:g,reason:"not-writable"});continue}const b=E?e[g]:r[g]??k.DEFAULT,w=Il(b,k,p);if(!f&&P_(r,g,b,k,p)){o.push({param:g,reason:"unchanged"});continue}const x=$o(g,w,k,_);if(x.length>0){l.push(...x),o.push({param:g,reason:"invalid"});continue}a[g]=w,i.push(g)}return{values:a,changed:i,skipped:o,problems:l}}function C_(r,e,n){if(!n)return Object.keys(r);const s=Object.keys(e);for(const a of Object.keys(r))a in e||s.push(a);return s}function P_(r,e,n,s,a){if(!Object.prototype.hasOwnProperty.call(r,e))return!1;const i={...a,explicitDouble:!1};return n_(Il(r[e],s,i),Il(n,s,i))}function M_(r,e,n,s){const a=r.paramsetIdentity(e,n);if(a===void 0)throw new Error(`no paramset identity for ${e} ${n} on ${r.interfaceName}`);const i=[],o=[];for(const l of s??r.all().map(f=>f.ADDRESS)){if(l===e){o.push({address:l,reason:"same-channel",identity:a});continue}if(!r.has(l)){o.push({address:l,reason:"unknown-address"});continue}const f=r.paramsetIdentity(l,n);if(f===void 0){o.push({address:l,reason:"no-identity"});continue}f===a?i.push(l):o.push({address:l,reason:"different-identity",identity:f})}return{identity:a,eligible:i,ineligible:o}}const ci="UI_HINT",vs=0,O_={id:vs,key:"expert",name:{de:"Experte",en:"Expert"},description:{de:"Alle Parameter des Verknuepfungs-Parametersatzes",en:"All link paramset parameters"},params:{}};function L_(r,e){return r!==""?r:"CHANNEL_OPERATION_MODE"in e?"shutter":"blind"}function F_(r,e){let n;return"channelMode"in r?n=e.channelMode===r.channelMode:"deviceType"in r?n=e.deviceType===r.deviceType:"deviceTypeIncludes"in r?n=e.deviceType.includes(r.deviceTypeIncludes):n=e.channel===r.channel,r.not===!0?!n:n}async function G_(r,e,n){const s=r.some(l=>l.when.some(f=>"channelMode"in f));let a;if(s){let l;try{l=await e.channelMode?.()??""}catch{l=""}a=L_(l,n)}const i={deviceType:e.deviceType,channel:e.channel,channelMode:a},o=r.find(l=>l.when.every(f=>F_(f,i)));return{...o===void 0?{}:{branch:o},...a===void 0?{}:{channelMode:a}}}function U_(r,e){for(const n of r.trim().split(/\s+/u)){const s=n.split("="),a=s.length===2?s[1]??"":n;if(a!==""&&Object.prototype.hasOwnProperty.call(e,a))return a}return""}class B_{#e;constructor(e){this.#e=e}async profilesFor(e,n){const s=await this.#e.receiverTypeAliases(),a=Ic(e,s),o=[...(await this.#e.receiverProfiles(a))?.senders[n]??[]];return o.some(l=>l.id===vs)||o.push(O_),o.sort((l,f)=>l.id-f.id)}async linkMetadataFor(e,n){const s=await this.#e.receiverTypeAliases();return(await this.#e.receiverProfiles(Ic(e,s)))?.senderMetadata?.[n]}applyProfile(e,n,s,a={}){const i=a.keepCurrent??!0,o={...n},l=[];for(const[f,p]of Object.entries(e.params)){if(!(f in s)){l.push({param:f,code:"unknown-parameter",message:`profile ${e.key} sets ${f}, which this description does not have`});continue}const _=z_(p,i?n[f]:void 0);if(_===void 0){l.push({param:f,code:"empty-list",message:`profile ${e.key} offers no value for ${f}`});continue}o[f]=_}return ci in s&&(o[ci]=String(e.id)),{values:o,problems:l}}detectProfile(e,n){const s=e[ci],a=s===void 0||s===""?void 0:n.find(l=>String(l.id)===String(s));if(a&&(a.id===vs||Nc(a,e)!==void 0))return a;let i,o;for(const l of[...n].sort((f,p)=>f.id-p.id)){const f=Nc(l,e);f!==void 0&&H_(f,o)&&(o=f,i=l)}return i??a}async masterFormId(e){return U_(e,await this.#e.masterForms())}async masterMetadataFor(e,n,s={},a="",i){const o=(await this.#e.masterMetadata())[e],l=a===""?void 0:(await this.#e.masterForms())[a],f=l?.controls?l:o;let p=f?.controls,_;if(f?.branches&&i){const b=await G_(f.branches,i,n);b.branch&&(p=b.branch.controls),_=b.channelMode}const g=await this.#e.optionPresets(),k=await this.#e.crossValidations(),E=j_(n,o).map(([b,w])=>{const x=g[o?.optionPresets?.[b]??""],D={name:b,description:w,visible:W_(b,o,s)};return x===void 0?D:{...D,preset:x}});return{channelType:e,parameters:E,...p?{controls:p}:{},...l?.internalKey?{internalKey:l.internalKey}:{},..._===void 0?{}:{channelMode:_},problems:k.filter(b=>K_(b,n)).filter(b=>!Y_(b,s)).map(b=>({id:b.id,errorKey:b.errorKey,params:Sh(b)}))}}}function Ic(r,e){let n=r;const s=new Set([n]);let a=e[n];for(;a!==void 0&&!s.has(a);)n=a,s.add(n),a=e[n];return n}function Nc(r,e){let n=0,s=0,a=0;for(const[i,o]of Object.entries(r.params)){if(!(i in e)){a+=1;continue}if(!V_(o,e[i]))return;n+=1,o.kind==="fixed"&&(s+=1)}return n===0?void 0:{present:n,fixed:s,missing:a}}function H_(r,e){return e===void 0?!0:r.present!==e.present?r.present>e.present:r.fixed!==e.fixed?r.fixed>e.fixed:r.missing<e.missing}function V_(r,e){switch(r.kind){case"fixed":return mo(e,r.value);case"list":return r.values.some(n=>mo(e,n));case"range":{const n=Number(e);return e===""||Number.isNaN(n)?!0:n>=r.min&&n<=r.max||n===r.default}}}function z_(r,e){switch(r.kind){case"fixed":return r.value;case"list":return e!==void 0&&r.values.some(n=>mo(e,n))?e:r.default??r.values[0];case"range":{const n=typeof e=="number"?e:Number(e);return Number.isFinite(n)&&n>=r.min&&n<=r.max?n:r.default??r.min}}}function mo(r,e){if(r===e)return!0;if(r===void 0||e===void 0)return!1;if(typeof r=="boolean"||typeof e=="boolean")return!!r==!!e;const n=Number(r),s=Number(e);return!Number.isNaN(n)&&!Number.isNaN(s)?n===s:String(r)===String(e)}function j_(r,e){const n=xd(r),s=new Map((e?.parameterOrder??[]).map((a,i)=>[a,i]));return Object.entries(r).sort(([a],[i])=>{const o=s.get(a),l=s.get(i);return o!==void 0&&l!==void 0?o-l:o!==void 0?-1:l!==void 0?1:n.indexOf(a)-n.indexOf(i)})}function W_(r,e,n){const s=(e?.conditionalVisibility??[]).filter(a=>a.show.includes(r));return s.length===0?!0:s.some(a=>mo(n[a.trigger],a.triggerValue))}function Sh(r){return r.rule==="between"?[r.param,r.minParam,r.maxParam]:[r.paramA,r.paramB]}function K_(r,e){return Sh(r).every(n=>n in e)}function Y_(r,e){if(r.rule==="between"){const a=Number(e[r.param]),i=Number(e[r.minParam]),o=Number(e[r.maxParam]);return!Number.isFinite(a)||!Number.isFinite(i)||!Number.isFinite(o)?!0:a>=i&&a<=o}const n=Number(e[r.paramA]),s=Number(e[r.paramB]);return!Number.isFinite(n)||!Number.isFinite(s)?!0:r.rule==="gte"?n>=s:n<=s}function Xo(r,e){return e===void 0?r:{...r,label:e}}function wh(r,e){const n=new Map(wo(e).map(o=>[o.unitParam,o])),s=[],a=new Set,i=(o,l)=>{a.has(o)||(a.add(o),s.push(l))};for(const o of r??[])if((o.requires??[]).every(l=>l in e))switch(o.kind){case"time":{const l=n.get(`${o.prefix}_BASE`)??n.get(`${o.prefix}_UNIT`);l&&i(`time:${l.name}`,Xo({kind:"time",pair:l,selector:o.selector},o.label));break}case"param":{if(o.param in e){const l=(o.also??[]).filter(p=>p in e),f={kind:"param",param:o.param,also:l,...o.option===void 0?{}:{option:o.option}};i(`param:${o.param}`,Xo(f,o.label))}break}case"subset":{const l={kind:"subset",subsets:o.subsets,...o.names===void 0?{}:{names:o.names}};i(`subset:${o.subsets.join(",")}`,Xo(l,o.label));break}}return s.length>0?s:void 0}function q_(r,e){return wh(r?.controls,e)}function Nl(r,e=[]){const n=new Set;for(const s of r??[])if(s.kind==="time")n.add(s.pair.unitParam),n.add(s.pair.countParam);else if(s.kind==="param"){n.add(s.param);for(const a of s.also)n.add(a)}else for(const a of e)if(s.subsets.includes(a.id))for(const i of a.params)n.add(i);return n}const $_=["CONFIG_PENDING","DUTY_CYCLE","FAULT_REPORTING","LOWBAT","LOW_BAT","SABOTAGE","UNREACH","STICKY_UNREACH","UPDATE_PENDING"],kh="ERROR",X_=["STICKY_UNREACH","SABOTAGE"];function Q_(r){return $_.includes(r)||r.startsWith(kh)}function vo(r){return X_.includes(r)||r.startsWith(kh)}function Z_(r,e){const n=r?.TYPE==="ENUM"?r.VALUE_LIST:void 0;if(n===void 0)return;const s=typeof e=="number"?n[e]:typeof e=="string"&&n.includes(e)?e:"";return s===void 0||s===""?void 0:s}const J_=[{step:1,min:-30,bars:4,label:"Very good (maximum)"},{step:2,min:-40,bars:4,label:"Very good"},{step:3,min:-50,bars:4,label:"Good"},{step:4,min:-60,bars:3,label:"Good (normal operation)"},{step:5,min:-70,bars:3,label:"Sufficient"},{step:6,min:-80,bars:2,label:"Sufficient to weak"},{step:7,min:-90,bars:1,label:"Poor"},{step:8,min:Number.NEGATIVE_INFINITY,bars:0,label:"Critical"}];function po(r){if(!(typeof r!="number"||!Number.isFinite(r))){if(r>-127&&r<0)return r;if(r>1&&r<127)return-r;if(r>-256&&r<-129)return-r-256;if(r>129&&r<256)return r-256}}function e1(r){const e={};for(const[n,s]of Object.entries(r)){const a={};for(const[i,o]of Object.entries(s))a[i]=r1(po(o[0]),po(o[1]));e[n]=a}return e}function t1(r){const e=po(r);if(e!==void 0)return J_.find(n=>e>=n.min)}function Ua(r){const e=r.DESCRIPTION?.trim()??"";return e===""?r.ADDRESS:e}function Cc(r,e){const n=r.INTERFACE??"";if(n==="")return"";const s=e.find(a=>a.ADDRESS===n);return s?Ua(s):n}const Pc=["RSSI_DEVICE","RSSI_PEER"];class n1{#e={};#n;constructor(e={}){this.#n=e.centralAddress}get centralAddress(){return this.#n}setCentralAddress(e){this.#n=e}applyRssiInfo(e){this.#e=e1(e)}applyHmipValue(e,n,s){const a=this.#n,i=po(s);return a===void 0||i===void 0||!Pc.includes(n)?!1:(n==="RSSI_DEVICE"?(this.#t(a,e,{rx:i}),this.#t(e,a,{tx:i})):(this.#t(e,a,{rx:i}),this.#t(a,e,{tx:i})),!0)}applyHmipParamset(e,n){let s=!1;for(const a of Pc){const i=n[a];i!==void 0&&(s=this.applyHmipValue(e,a,i)||s)}return s}get(e,n){return this.#e[e]?.[n]}peersOf(e){return Object.keys(this.#e[e]??{}).sort()}toJSON(){const e={};for(const[n,s]of Object.entries(this.#e))e[n]={...s};return e}bestInterfaceFor(e,n){let s,a=Number.NEGATIVE_INFINITY;for(const i of n){const o=this.get(e,i);o?.tx!==void 0&&o.tx>a&&(a=o.tx,s={address:i,...o})}return s}#t(e,n,s){const a=this.#e[e]??={};a[n]={...a[n],...s}}}function r1(r,e){const n={};return r!==void 0&&(n.rx=r),e!==void 0&&(n.tx=e),n}const Cl=6,Mc=["switch","marginal","unheard","keep","unmeasured","roaming"];function s1(r,e,n,s={}){const a=Math.max(0,s.marginDb??Cl),i=[];for(const o of r){const l=o.INTERFACE??"";if(l===""||(o.PARENT??"")!=="")continue;const f=n.get(o.ADDRESS,l)?.tx,p=n.bestInterfaceFor(o.ADDRESS,e),_=p?.tx!==void 0&&f!==void 0?p.tx-f:void 0;let g;o.ROAMING===!0||o.ROAMING===1?g="roaming":p===void 0?g="unmeasured":p.address===l?g="keep":_===void 0?g="unheard":_<=0?g="keep":g=_>=a?"switch":"marginal",i.push({address:o.ADDRESS,configured:l,configuredTx:f,best:p?.address,bestTx:p?.tx,gain:_,verdict:g})}return i.sort((o,l)=>Mc.indexOf(o.verdict)-Mc.indexOf(l.verdict)||(l.gain??Number.NEGATIVE_INFINITY)-(o.gain??Number.NEGATIVE_INFINITY)||o.address.localeCompare(l.address))}const Ah=8192;class a1{#e=[];#n;constructor(e=Ah){if(!Number.isInteger(e)||e<1)throw new RangeError(`ring buffer capacity must be a positive integer, got ${e}`);this.#n=e}get capacity(){return this.#n}get size(){return this.#e.length}get full(){return this.#e.length===this.#n}push(e){return this.#e.push(e),this.#e.length>this.#n?this.#e.shift():void 0}toArray(){return[...this.#e]}filter(e){return this.#e.filter(n=>e(n))}clear(){this.#e.length=0}}function i1(r,e){return e.interfaceName!==void 0&&r.interfaceName!==e.interfaceName||!Oc(r.address??"",e.address)||!Oc(r.datapoint??"",e.datapoint)?!1:e.text!==void 0&&e.text!==""?`${r.address??""} ${r.datapoint??""} ${String(r.value)}`.toLowerCase().includes(e.text.toLowerCase()):!0}function o1(r,e){return r.filter(n=>i1(n,e))}function Oc(r,e){return e===void 0||e===""?!0:r.toLowerCase().includes(e.toLowerCase())}const Xi=1,Lc=8,Fc=255,ko=32,Gc=16*1024;class kt extends Error{code;detail;constructor(e,n,s){super(n??e),this.name="MetaError",this.code=e,this.detail=s}}const Uc=Object.freeze({room:{name:{de:"Räume",en:"Rooms"},tree:[]},function:{name:{de:"Gewerke",en:"Functions"},tree:[]}});function l1(){return{format:Xi,revision:0,objects:{},enums:{room:{name:{...Uc.room?.name},tree:[]},function:{name:{...Uc.function?.name},tree:[]}}}}const d1=/^[a-z0-9][a-z0-9-]*$/,c1=/^[a-z0-9-]+$/;function Pd(r){const e=r.indexOf(".");if(!(e<=0||e===r.length-1))return{interfaceName:r.slice(0,e),address:r.slice(e+1)}}function u1(r,e){return`${r}.${e}`}function Pl(r){const e=Pd(r);if(!e)throw new kt("invalid-ref",`${r} is not <interface>.<address>`);return e}function pa(r){return r.length<=ko&&d1.test(r)}function Bc(r){if(!pa(r))throw new kt("invalid-id",`${r} is not a valid id`);return r}function Ml(r){return r.length<=ko&&c1.test(r)}function la(r){if(typeof r!="string")throw new kt("invalid-name","a name has to be a string");const e=r.trim();if(e==="")throw new kt("invalid-name","a name may not be empty");if(/[\u0000-\u001f\u007f]/.test(e))throw new kt("invalid-name","a name may not contain control characters");if(Th(e)>Fc)throw new kt("invalid-name",`a name may not be longer than ${String(Fc)} bytes`);return e}function Th(r){return new TextEncoder().encode(r).length}function xa(r){const e=r.split("/"),n=e[0];if(n===void 0||n===""||!pa(n))return;const s=e.slice(1);if(!s.some(a=>!pa(a)))return{enumId:n,ids:s}}function Qi(r,e){return`${r}/${e}`}function f1(r){const e=r.lastIndexOf("/");return e<=0?void 0:r.slice(0,e)}function Ws(r,e){return r===e||r.startsWith(`${e}/`)}function Ks(r,e){let n=r,s;for(const a of e){if(s=n.find(i=>i.id===a),!s)return;n=s.children??[]}return s}function Ii(r,e){const n=[],s=(a,i,o,l)=>{for(const f of a){const p=Qi(i,f.id),_=[...l,f.name];n.push({path:p,node:f,depth:o,trail:_}),s(f.children??[],p,o+1,_)}};return s(e.tree,r,1,[]),n}function Rh(r,e){return new Set(Ii(r,e).map(n=>n.path))}function h1(r){let e=0;const n=(s,a)=>{for(const i of s)e=Math.max(e,a),n(i.children??[],a+1)};return n(r,1),e}function Ol(r){if(h1(r)>Lc)throw new kt("too-deep",`a tree may not be deeper than ${String(Lc)} levels`)}function Ms(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function m1(r){if(!Ms(r))throw new kt("invalid-name","an object has to be an object");const e=la(r.name),n=Ll(r.enums),s=go(r.meta);return r.orphaned===!0?{name:e,enums:n,meta:s,orphaned:!0}:{name:e,enums:n,meta:s}}function Ll(r){if(r==null)return[];if(!Array.isArray(r))throw new kt("unknown-path","enums has to be an array of node paths");const e=[];for(const n of r){if(typeof n!="string"||xa(n)===void 0)throw new kt("unknown-path",`${String(n)} is not a node path`);if(e.includes(n))throw new kt("duplicate-path",`${n} is listed twice`);e.push(n)}return e}function go(r){if(r==null)return{};if(!Ms(r))throw new kt("invalid-id","meta has to be an object of namespaces");for(const e of Object.keys(r))if(!pa(e))throw new kt("invalid-id",`${e} is not a valid meta namespace`);if(Th(JSON.stringify(r))>Gc)throw new kt("invalid-id",`meta may not be larger than ${String(Gc)} bytes`);return r}function v1(r){if(!Ms(r))throw new kt("invalid-id","a node has to be an object");const e=r.id;if(typeof e!="string"||!pa(e))throw new kt("invalid-id",`${String(e)} is not a valid node id`);const n=la(r.name),s=r.icon;if(s!==void 0&&(typeof s!="string"||!Ml(s)))throw new kt("invalid-id",`${JSON.stringify(s)} is not a valid icon name`);const a=xh(r.children);return{id:e,name:n,...typeof s=="string"?{icon:s}:{},...a.length>0?{children:a}:{}}}function xh(r){if(r==null)return[];if(!Array.isArray(r))throw new kt("invalid-id","children has to be an array of nodes");const e=r.map(s=>v1(s)),n=new Set;for(const s of e){if(n.has(s.id))throw new kt("duplicate-id",`${s.id} is used twice among its siblings`);n.add(s.id)}return e}function p1(r,e){if(!pa(r))throw new kt("invalid-id",`${r} is not a valid enum id`);if(!Ms(e))throw new kt("invalid-name",`enum ${r} has to be an object`);const n=Fl(e.name),s=xh(e.tree);return Ol(s),{name:n,tree:s}}function Fl(r){if(!Ms(r))throw new kt("invalid-name","an enum name has to be an object of languages");const e={};for(const[n,s]of Object.entries(r)){if(typeof s!="string")throw new kt("invalid-name",`the ${n} name has to be a string`);e[n]=la(s)}if(e.en===void 0)throw new kt("invalid-name","an enum needs at least an English name");return e}function Gl(r){if(!Ms(r))throw new kt("format-unsupported","a document has to be an object");const e=r.format;if(e!==Xi)throw new kt("format-unsupported",`format ${String(e)} is newer than this implementation reads (${String(Xi)})`);const n=r.revision;if(typeof n!="number"||!Number.isInteger(n)||n<0)throw new kt("format-unsupported","revision has to be an integer of at least 0");const s={},a=r.enums;if(a!=null){if(!Ms(a))throw new kt("unknown-enum","enums has to be an object");for(const[f,p]of Object.entries(a))s[f]=p1(f,p)}const i=Dh(s),o={},l=r.objects;if(l!=null){if(!Ms(l))throw new kt("unknown-object","objects has to be an object");for(const[f,p]of Object.entries(l)){Pl(f);const _=m1(p);for(const g of _.enums)if(!i.has(g))throw new kt("unknown-path",`${f}: ${g} does not exist`,{ref:f,path:g});o[f]=_}}return{format:Xi,revision:n,objects:o,enums:s}}function Dh(r){const e=new Set;for(const[n,s]of Object.entries(r))for(const a of Rh(n,s))e.add(a);return e}function Hc(r,e){return JSON.stringify(Ul(r),void 0,e)}function g1(r,e){return Hc({...r,revision:0})===Hc({...e,revision:0})}function Ul(r){if(Array.isArray(r))return r.map(e=>Ul(e));if(Ms(r)){const e={};for(const n of Object.keys(r).sort())e[n]=Ul(r[n]);return e}return r}function Vc(r,e){const n=e.slice(0,-1),s=e[e.length-1],i=(n.length===0?r:Ks(r,n)?.children??[]).findIndex(o=>o.id===s);return i===-1?void 0:i}function Bl(r,e,n,s){if(e.length===0)return _1(r,n,s);const[a,...i]=e;return r.map(o=>o.id===a?{...o,children:Bl(o.children??[],i,n,s)}:o)}function Hl(r,e){const[n,...s]=e;return n===void 0?r:s.length===0?r.filter(a=>a.id!==n):r.map(a=>{if(a.id!==n)return a;const i=Hl(a.children??[],s);return i.length===0?b1(a):{...a,children:i}})}function b1(r){return{id:r.id,name:r.name,...r.icon===void 0?{}:{icon:r.icon}}}function _1(r,e,n){const s=[...r],a=n===void 0?s.length:Math.max(0,Math.min(s.length,Math.trunc(n)));return s.splice(a,0,e),s}const E1=1e3;let y1=class Ih{#e;#n;#t;#s=[];#a;#r;#i;constructor(e={}){const n=e.document??l1();this.#e=n.revision,this.#n=new Map(Object.entries(n.objects)),this.#t=new Map(Object.entries(n.enums)),this.#a=e.eventHistory??E1,this.#r=n.revision,this.#i=e.onEvent}get revision(){return this.#e}get size(){return this.#n.size}document(){return{format:1,revision:this.#e,objects:Object.fromEntries([...this.#n].sort(([e],[n])=>e<n?-1:e>n?1:0)),enums:Object.fromEntries([...this.#t])}}load(e){this.#e=e.revision,this.#n=new Map(Object.entries(e.objects)),this.#t=new Map(Object.entries(e.enums)),this.#s.length=0,this.#r=e.revision}get(e){const n=this.#n.get(e);if(!n)throw new kt("unknown-object",`${e} is not in the store`);return n}find(e){return this.#n.get(e)}objects(){return Object.fromEntries(this.#n)}enums(){return Object.fromEntries(this.#t)}getEnum(e){const n=this.#t.get(e);if(!n)throw new kt("unknown-enum",`${e} is not an enum`);return n}query(e,n){this.#d(e);const s=[];for(const[a,i]of this.#n)i.enums.some(o=>Ws(o,e))&&(n!==void 0&&i.orphaned===!0!==n||s.push(a));return s.sort()}since(e){return!Number.isInteger(e)||e<0||e>this.#e||e<this.#r?{revision:this.#e,resync:!0}:{revision:this.#e,events:this.#s.filter(n=>n.revision>e)}}set(e,n){if(Pl(e),n.orphaned!==void 0)throw new kt("forbidden","orphaned is set by the process that owns the addresses");const s=this.#n.get(e),a=n.name===void 0?s?.name:la(n.name);if(a===void 0)throw new kt("invalid-name",`${e} is new and needs a name`);const i=n.enums===void 0?s?.enums??[]:this.#o(Ll(n.enums)),o=n.meta===void 0?s?.meta??{}:S1(s?.meta??{},n.meta);return this.#l(e,ei(a,i,o,s?.orphaned===!0))}put(e,n){Pl(e);const s=this.#n.get(e),a=la(n.name),i=this.#o(Ll(n.enums)),o=go(n.meta);return this.#l(e,ei(a,i,o,s?.orphaned===!0))}delete(e){return this.#n.has(e)?(this.#n.delete(e),this.#v([{kind:"object.deleted",ref:e}])):{revision:this.#e,changed:!1}}bulk(e,n=[]){const s=this.#_(),a=[];for(const[i,o]of Object.entries(e))s.set(i,o).changed&&a.push({kind:"object.updated",ref:i,value:s.get(i)});for(const i of n)s.delete(i).changed&&a.push({kind:"object.deleted",ref:i});return a.length===0?{revision:this.#e,changed:!1}:(this.#p(s),this.#v(a))}setOrphaned(e,n){const s=this.get(e);if(s.orphaned===!0===n)return{revision:this.#e,changed:!1};const a=ei(s.name,s.enums,s.meta,n);return this.#n.set(e,a),this.#v([{kind:"object.updated",ref:e,value:a}])}createEnum(e,n){if(Bc(e),this.#t.has(e))throw new kt("duplicate-id",`${e} exists`);const s={name:Fl(n),tree:[]};return this.#t.set(e,s),this.#v([{kind:"enum.created",enum:e,value:s}])}updateEnum(e,n){const s=this.getEnum(e),a={name:Fl(n),tree:s.tree};return JSON.stringify(a.name)===JSON.stringify(s.name)?{revision:this.#e,changed:!1}:(this.#t.set(e,a),this.#v([{kind:"enum.updated",enum:e,value:a}]))}deleteEnum(e,n="refuse"){const s=this.getEnum(e),a=this.#f([...Rh(e,s)]);if(a.refs.length>0&&n!=="detach")throw new kt("has-members",`${e} still has members`,{refs:[...a.refs]});return this.#t.delete(e),this.#h(a),this.#v([{kind:"enum.deleted",enum:e}])}createNode(e,n,s,a,i={}){const o=this.getEnum(e);Bc(s);const l=la(a);if(i.icon!==void 0&&!Ml(i.icon))throw new kt("invalid-id",`${i.icon} is not a valid icon name`);const f=n??e,p=this.#u(e,f);if((p.length===0?o.tree:Ks(o.tree,p)?.children??[]).some(E=>E.id===s))throw new kt("duplicate-id",`${Qi(f,s)} exists`);const g={id:s,name:l,...i.icon===void 0?{}:{icon:i.icon}},k=Bl(o.tree,p,g,i.position);return Ol(k),this.#t.set(e,{name:o.name,tree:k}),this.#v([{kind:"node.created",enum:e,path:Qi(f,s),value:g}])}updateNode(e,n){const{enumId:s,ids:a}=this.#c(e),i=this.getEnum(s),o=Ks(i.tree,a);if(!o)throw new kt("unknown-path",`${e} does not exist`);const l=n.name===void 0?o.name:la(n.name);if(n.icon!==void 0&&!Ml(n.icon))throw new kt("invalid-id",`${n.icon} is not a valid icon name`);const f=n.icon??o.icon,p=a.slice(0,-1);let _=p,g=[s,...p].join("/");if(n.parent!==void 0){const R=n.parent??s;if(Ws(R,e))throw new kt("invalid-move",`${e} cannot be moved under itself`);_=this.#u(s,R),g=R}const k=Qi(g,o.id),E=k!==e;if(E&&(_.length===0?i.tree:Ks(i.tree,_)?.children??[]).some(M=>M.id===o.id))throw new kt("duplicate-id",`${k} exists`);const b={id:o.id,name:l,...f===void 0?{}:{icon:f},...o.children===void 0?{}:{children:o.children}},w=Hl(i.tree,a),x=n.position??(E?void 0:Vc(i.tree,a)),D=Bl(w,_,b,x);if(Ol(D),JSON.stringify(D)===JSON.stringify(i.tree))return{revision:this.#e,changed:!1};this.#t.set(s,{name:i.name,tree:D});const N=[];return E?(this.#m(e,k),N.push({kind:"node.moved",enum:s,from:e,to:k})):n.position!==void 0&&x!==Vc(i.tree,a)?N.push({kind:"node.moved",enum:s,from:e,to:e}):N.push({kind:"node.updated",enum:s,path:e,value:b}),this.#v(N)}deleteNode(e,n="refuse"){const{enumId:s,ids:a}=this.#c(e),i=this.getEnum(s);if(!Ks(i.tree,a))throw new kt("unknown-path",`${e} does not exist`);const l=this.#f([e]);if(l.refs.length>0&&n!=="detach")throw new kt("has-members",`${e} still has members`,{refs:[...l.refs]});return this.#t.set(s,{name:i.name,tree:Hl(i.tree,a)}),this.#h(l),this.#v([{kind:"node.deleted",enum:s,path:e}])}import(e,n="replace"){const s=Gl(e),a=this.document(),i=n==="merge"?Gl({format:1,revision:a.revision,objects:{...a.objects,...s.objects},enums:{...a.enums,...s.enums}}):s;return g1(a,i)?{revision:this.#e,changed:!1}:(this.#n=new Map(Object.entries(i.objects)),this.#t=new Map(Object.entries(i.enums)),this.#v([{kind:"import",objects:Object.keys(i.objects).length,enums:Object.keys(i.enums).length}]))}#l(e,n){const s=this.#n.get(e);return s&&JSON.stringify(s)===JSON.stringify(n)?{revision:this.#e,changed:!1}:(this.#n.set(e,n),this.#v([{kind:"object.updated",ref:e,value:n}]))}#o(e){const n=Dh(this.enums());for(const s of e)if(!n.has(s))throw new kt("unknown-path",`${s} does not exist`,{path:s});return e}#d(e){const n=xa(e);if(!n)throw new kt("unknown-path",`${e} is not a node path`);const s=this.getEnum(n.enumId);if(n.ids.length>0&&!Ks(s.tree,n.ids))throw new kt("unknown-path",`${e} does not exist`)}#c(e){const n=xa(e);if(!n||n.ids.length===0)throw new kt("unknown-path",`${e} is not a node path`);return{enumId:n.enumId,ids:n.ids}}#u(e,n){const s=xa(n);if(!s||s.enumId!==e)throw new kt("unknown-path",`${n} is not a path of ${e}`);if(s.ids.length>0&&!Ks(this.getEnum(e).tree,s.ids))throw new kt("unknown-path",`${n} does not exist`);return s.ids}#f(e){const n=[];for(const[s,a]of this.#n)a.enums.some(i=>e.some(o=>Ws(i,o)))&&n.push(s);return{paths:e,refs:n.sort()}}#h(e){for(const n of e.refs){const s=this.#n.get(n);if(!s)continue;const a=s.enums.filter(i=>!e.paths.some(o=>Ws(i,o)));this.#n.set(n,ei(s.name,a,s.meta,s.orphaned===!0))}}#m(e,n){for(const[s,a]of this.#n){if(!a.enums.some(o=>Ws(o,e)))continue;const i=a.enums.map(o=>Ws(o,e)?`${n}${o.slice(e.length)}`:o);this.#n.set(s,ei(a.name,i,a.meta,a.orphaned===!0))}}#v(e){this.#e+=1;for(const n of e){const s={...n,revision:this.#e};this.#s.push(s),this.#i?.(s)}for(;this.#s.length>this.#a;){const n=this.#s.shift();n&&(this.#r=n.revision)}return{revision:this.#e,changed:!0}}#_(){return new Ih({document:this.document(),eventHistory:0})}#p(e){const n=e.document();this.#n=new Map(Object.entries(n.objects)),this.#t=new Map(Object.entries(n.enums))}};function ei(r,e,n,s){return s?{name:r,enums:e,meta:n,orphaned:!0}:{name:r,enums:e,meta:n}}function S1(r,e){const n={...r};for(const[s,a]of Object.entries(go(e)))a===null?delete n[s]:n[s]=a;return go(n)}function Nh(r,e,n){return e?.name[n]??e?.name.en??r}function zc(r,e,n={}){const s=new Set;for(const i of e){const o=xa(i);if(!(!o||o.ids.length===0)&&!(n.enumId!==void 0&&o.enumId!==n.enumId)&&(s.add(i),n.ancestors===!0))for(let l=1;l<o.ids.length;l+=1)s.add([o.enumId,...o.ids.slice(0,l)].join("/"))}const a=[];for(const[i,o]of Object.entries(r))if(!(n.enumId!==void 0&&i!==n.enumId))for(const l of Ii(i,o))s.has(l.path)&&!a.includes(l.node.name)&&a.push(l.node.name);return a}function w1(r){const e={};for(const[n,s]of Object.entries(r))e[n]=Ii(n,s);return e}function k1(r,e,n={}){return{name:e.name,rooms:zc(r,e.enums,{...n,enumId:"room"}),functions:zc(r,e.enums,{...n,enumId:"function"}),paths:e.enums,orphaned:e.orphaned===!0}}const A1=[[/ä/g,"ae"],[/ö/g,"oe"],[/ü/g,"ue"],[/ß/g,"ss"],[/å/g,"a"],[/æ/g,"ae"],[/ø/g,"oe"]];function jc(r){let e=r.toLowerCase();for(const[n,s]of A1)e=e.replace(n,s);return e=e.normalize("NFKD").replace(/[̀-ͯ]/g,"").replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,ko),pa(e)?e:""}function Ch(r,e=[]){const n=new Set(e),s=jc(r)===""?"node":jc(r);if(!n.has(s))return s;for(let a=2;a<1e3;a+=1){const i=`${s.slice(0,ko-String(a).length-1)}-${String(a)}`;if(!n.has(i))return i}throw new Error(`no free id for ${r}`)}const Ph={"Homematic Manager Address":{de:"Homematic Manager Adresse",en:"Homematic Manager Address"},"CCU Address":{de:"CCU Adresse",en:"CCU Address"},Select:{de:"Auswählen",en:"Select"},"Save & Restart":{de:"Speichern und Neustarten",en:"Save & Restart"},Error:{de:"Fehler",en:"Error"},Devices:{de:"Geräte",en:"Devices"},Device:{de:"Gerät",en:"Device"},introduced:{de:"gefunden",en:"introduced"},New:{de:"Neue",en:"New"},Events:{de:"Ereignisse",en:"Events"},Cancel:{de:"Abbrechen",en:"Cancel"},OK:{de:"OK",en:"OK"},Delete:{de:"Löschen",en:"Delete"},Save:{de:"Speichern",en:"Save"},"Create and edit":{de:"Anlegen und Bearbeiten",en:"Create and edit"},Create:{de:"Anlegen",en:"Create"},"Please choose one or more channels":{de:"Bitte einen oder mehrere Kanäle auswählen",en:"Please choose one or more channels"},Refresh:{de:"Aktualisieren",en:"Refresh"},"Delete device":{de:"Gerät löschen",en:"Delete device"},"Rename device":{de:"Gerät umbenennen",en:"Rename device"},"Pair devices":{de:"Geräte anlernen",en:"Pair devices"},Links:{de:"Verknüpfungen",en:"Links"},"Delete link":{de:"Verknüpfung löschen",en:"Delete link"},"Edit link":{de:"Verknüpfung bearbeiten",en:"Edit link"},"Test link":{de:"Verknüpfung testen",en:"Test link"},"Create link":{de:"Verknüpfung anlegen",en:"Create link"},RSSI:{de:"Funk",en:"RSSI"},"RPC Console":{de:"RPC Konsole",en:"RPC Console"},"Service messages":{de:"Servicemeldungen",en:"Service messages"},"Send request":{de:"Befehl senden",en:"Send request"},Parameters:{de:"Parameter",en:"Parameters"},Response:{de:"Antwort",en:"Response"},Help:{de:"Hilfe",en:"Help"},Settings:{de:"Einstellungen",en:"Settings"},"Please choose one or more links":{de:"mehrere Verknüpfungen bearbeiten",en:"Please choose one or more links"},"Kanäle überschreiben":{de:"Kanäle überschreiben",en:"Kanäle überschreiben"},"Normaler Anlernmodus":{de:"Normaler Anlernmodus",en:"Normaler Anlernmodus"},"Default-Parameter in Paramset MASTER schreiben, bestehende Verknüpfungen löschen":{de:"Default-Parameter in Paramset MASTER schreiben, bestehende Verknüpfungen löschen",en:"Default-Parameter in Paramset MASTER schreiben, bestehende Verknüpfungen löschen"},Sender:{de:"Sender",en:"Sender"},Receiver:{de:"Empfänger",en:"Receiver"},"Ablernen und Gerät auf Werkseinstellungen zurücksetzen":{de:"Ablernen und Gerät auf Werkseinstellungen zurücksetzen",en:"Ablernen und Gerät auf Werkseinstellungen zurücksetzen"},"Nur ablernen (Direktverknüpfungen bleiben erhalten)":{de:"Nur ablernen (Direktverknüpfungen bleiben erhalten)",en:"Nur ablernen (Direktverknüpfungen bleiben erhalten)"},"Falls Gerät nicht erreichbar:":{de:"Falls Gerät nicht erreichbar:",en:"Falls Gerät nicht erreichbar:"},"bei nächster Gelegenheit löschen":{de:"bei nächster Gelegenheit löschen",en:"bei nächster Gelegenheit löschen"},"Nur aus Schnittstellenprozess löschen":{de:"Nur aus Schnittstellenprozess löschen",en:"Nur aus Schnittstellenprozess löschen"},Disconnected:{de:"Verbindung unterbrochen",en:"Disconnected"},"Which device do you want to replace?":{de:"Welches Gerät wollen sie ersetzen?",en:"Which device do you want to replace?"},"Gerät löschen":{de:"Gerät löschen",en:"Gerät löschen"},"Acknowledge service messages":{de:"Servicemeldung bestätigen",en:"Acknowledge service messages"},"Acknowledge all service messages":{de:"Alle Servicemeldungen bestätigen",en:"Acknowledge all service messages"},Interfaces:{de:"Interfaces",en:"Interfaces"},"Edit device":{de:"Gerät bearbeiten",en:"Edit device"},undefined:{de:"undefined",en:"undefined"},"Please select method":{de:"Bitte eine Methode auswählen",en:"Please select method"},saveAsNewTemplate:{de:"als neue Profilvorlage speichern",en:"saveAsNewTemplate"},"Replace device":{de:"Gerät tauschen",en:"Replace device"},"Update firmware":{de:"Firmware aktualisieren",en:"Update firmware"},clearConfigCache:{de:"clearConfigCache",en:"clearConfigCache"},restoreConfigToDevice:{de:"restoreConfigToDevice",en:"restoreConfigToDevice"},Rename:{de:"Umbenennen",en:"Rename"},"MASTER Paramset":{de:"MASTER Paramset",en:"MASTER Paramset"},updateFirmware:{de:"Firmware aktualisieren",en:"updateFirmware"},Replace:{de:"Gerät tauschen",en:"Replace"},"VALUES Paramset":{de:"VALUES Paramset",en:"VALUES Paramset"},"Activate long":{de:"Empfägnerprofil testen (langer Tastendruck)",en:"Activate long"},"Activate short":{de:"Empfängerprofil testen (kurzer Tastendruck)",en:"Activate short"},putParamset:{de:"Parameter übernehmen",en:"putParamset"},putParamsetClose:{de:"Parameter übernehmen und schließen",en:"putParamsetClose"},"New service message":{de:"Neue Servicemeldung",en:"New service message"},"RPC execution":{de:"RPC wird ausgeführt",en:"RPC execution"},"about Homematic Manager":{de:"Über Homematic Manager",en:"about Homematic Manager"},"Saving and reconnecting…":{de:"Wird gespeichert, die Verbindung wird neu aufgebaut…",en:"Saving and reconnecting…"},"This tab could not be drawn.":{de:"Dieser Reiter konnte nicht gezeichnet werden.",en:"This tab could not be drawn."},"Try again":{de:"Erneut versuchen",en:"Try again"},"The device list could not be read - press Refresh to try again":{de:"Die Geräteliste konnte nicht gelesen werden - mit Aktualisieren erneut versuchen",en:"The device list could not be read - press Refresh to try again"},"Loading Homematic Manager...":{de:"Lade Homematic Manager...",en:"Loading Homematic Manager..."},"Check all":{de:"Alle auswählen",en:"Check all"},"Uncheck all":{de:"Auswahl entfernen",en:"Uncheck all"},"{count} devices":{de:{one:"{count} Gerät",other:"{count} Geräte"},en:{one:"{count} device",other:"{count} devices"}},"{count} channels":{de:{one:"{count} Kanal",other:"{count} Kanäle"},en:{one:"{count} channel",other:"{count} channels"}},"{count} links":{de:{one:"{count} Verknüpfung",other:"{count} Verknüpfungen"},en:{one:"{count} link",other:"{count} links"}},"{count} service messages":{de:{one:"{count} Servicemeldung",other:"{count} Servicemeldungen"},en:{one:"{count} service message",other:"{count} service messages"}},"{count} events":{de:{one:"{count} Ereignis",other:"{count} Ereignisse"},en:{one:"{count} event",other:"{count} events"}},"{count} parameters will be written":{de:{one:"{count} Parameter wird geschrieben",other:"{count} Parameter werden geschrieben"},en:{one:"{count} parameter will be written",other:"{count} parameters will be written"}},"{count} channels selected":{de:{one:"{count} Kanal ausgewählt",other:"{count} Kanäle ausgewählt"},en:{one:"{count} channel selected",other:"{count} channels selected"}},"Connected to {host}":{de:"Verbunden mit {host}",en:"Connected to {host}"},"Interface {interface} is not answering":{de:"Schnittstelle {interface} antwortet nicht",en:"Interface {interface} is not answering"},"Writing {paramset} of {address}":{de:"Schreibe {paramset} von {address}",en:"Writing {paramset} of {address}"},"RPC log":{de:"RPC-Protokoll",en:"RPC log"},"No RPC calls yet":{de:"Noch keine RPC-Aufrufe",en:"No RPC calls yet"},"in progress":{de:"läuft",en:"in progress"},Clear:{de:"Leeren",en:"Clear"},Close:{de:"Schließen",en:"Close"},"Resize the RPC log":{de:"Größe des RPC-Protokolls ändern",en:"Resize the RPC log"},"Hide background calls":{de:"Hintergrundaufrufe ausblenden",en:"Hide background calls"},"Open in console":{de:"In der Konsole öffnen",en:"Open in console"},"Origin: console":{de:"Konsole",en:"console"},"Origin: UI":{de:"UI",en:"UI"},"Origin: background":{de:"Hintergrund",en:"background"}};function T1(r,e){return r==="tr"?"other":e===1?"one":"other"}function Qo(r,e){return r.replace(/\{(\w+)\}/g,(n,s)=>{const a=e[s];return a===void 0?n:String(a)})}const R1=["en","de"];class x1{language;#e;#n;constructor(e,n={}){this.language=e,this.#e=n.catalogue??Ph;const s=n.fallbacks??R1;this.#n=[e,...s.filter(a=>a!==e)]}has(e){return this.#t(e)!==void 0}t(e,n={},s){const a=this.#t(e),i=s===void 0?n:{count:s,...n};if(a===void 0)return Qo(e,i);const[o,l]=a;if(typeof o=="string")return Qo(o,i);const f=T1(l,s??0);return Qo(o[f],i)}#t(e){const n=Object.prototype.hasOwnProperty.call(this.#e,e)?this.#e[e]:void 0;if(n)for(const s of this.#n){const a=n[s];if(a!==void 0)return[a,s]}}}function D1(r,e={}){return new x1(r,e)}class Wc{#e;constructor(e,...n){this.#e=[e,...n].filter(s=>s!==void 0)}get languages(){return this.#e.map(e=>e.language)}channelType(e){return this.#n(n=>n.channelTypes,wa(e))??e}deviceModel(e){return this.#n(n=>n.deviceModels,wa(e))??e}parameter(e,n){return this.#n(s=>s.parameters,Zo(e,n))??e}parameterValue(e,n,s){const a=Zo(`${e}|${n}`,s);return a.push(...wa(n)),this.#n(i=>i.parameterValues,a)??n}specialValue(e,n,s){const a=this.parameterValue(e,n,s);return a!==n?a:this.#n(i=>i.parameters,wa(n))??n}parameterHelp(e,n){return this.#n(s=>s.parameterHelp,Zo(e,n))}uiLabel(e){return this.#n(n=>n.uiLabels,Md([e,e.toLowerCase()]))??e}#n(e,n){for(const s of this.#e)for(const a of n){const i=e(s)[a];if(i!==void 0&&i!=="")return i}}}function Zo(r,e){const n=r.replace(/^(?:SHORT|LONG)_/i,"");return Md((n===r?[r]:[r,n]).flatMap(a=>{const i=wa(a);if(e===void 0||e==="")return i;const o=wa(e).map(l=>`${l}|${a}`);return[...o,...o.map(l=>l.toUpperCase()),...i]}))}function wa(r){return Md([r,r.toUpperCase()])}function Md(r){return[...new Set(r)]}const I1={Filter:{de:"Filter",en:"Filter"},"Filter all columns":{de:"Alle Spalten filtern",en:"Filter all columns"},Language:{de:"Sprache",en:"Language"},"Browser language":{de:"Sprache des Browsers",en:"Browser language"},"Resize the RPC log":{de:"Größe des RPC-Protokolls ändern",en:"Resize the RPC log"},Theme:{de:"Design",en:"Theme"},"Theme: light":{de:"Design: hell",en:"Theme: light"},"Theme: dark":{de:"Design: dunkel",en:"Theme: dark"},"Theme: system":{de:"Design: System",en:"Theme: system"},Close:{de:"Schließen",en:"Close"},Apply:{de:"Übernehmen",en:"Apply"},Connected:{de:"Verbunden",en:"Connected"},"Not connected":{de:"Nicht verbunden",en:"Not connected"},"Not present":{de:"Nicht vorhanden",en:"Not present"},"Not answering":{de:"Antwortet nicht",en:"Not answering"},"Retry now":{de:"Jetzt erneut versuchen",en:"Retry now"},Subscribing:{de:"Anmeldung läuft",en:"Subscribing"},Waiting:{de:"Wartet",en:"Waiting"},Reconnecting:{de:"Verbindet neu",en:"Reconnecting"},"Pending changes":{de:"Offene Änderungen",en:"Pending changes"},"Logged in as {user}":{de:"Angemeldet als {user}",en:"Logged in as {user}"},"Log out":{de:"Abmelden",en:"Log out"},Team:{de:"Team",en:"Team"},"Own team":{de:"Eigenes Team",en:"Own team"},Members:{de:"Mitglieder",en:"Members"},Groups:{de:"Gruppen",en:"Groups"},Loading:{de:"Wird geladen",en:"Loading"},"Heating groups":{de:"Heizungsgruppen",en:"Heating groups"},"New group":{de:"Neue Gruppe",en:"New group"},"Edit group":{de:"Gruppe bearbeiten",en:"Edit group"},"Delete group":{de:"Gruppe löschen",en:"Delete group"},"Group name":{de:"Gruppenname",en:"Group name"},"Group type":{de:"Gruppentyp",en:"Group type"},"Virtual device":{de:"Virtuelles Gerät",en:"Virtual device"},"No groups yet":{de:"Noch keine Gruppen",en:"No groups yet"},"{count} groups":{de:{one:"{count} Gruppe",other:"{count} Gruppen"},en:{one:"{count} group",other:"{count} groups"}},"Select a group":{de:"Eine Gruppe auswählen",en:"Select a group"},"Addable devices":{de:"Hinzufügbare Geräte",en:"Addable devices"},"Already connected devices":{de:"Bereits verknüpfte Geräte",en:"Already connected devices"},"There are no other devices available":{de:"Es sind keine weiteren Geräte vorhanden",en:"There are no other devices available"},"There are no devices in the group":{de:"Es sind keine Geräte in der Gruppe",en:"There are no devices in the group"},"Configuration pending: {list}":{de:"Konfiguration ausstehend: {list}",en:"Configuration pending: {list}"},"The direct device connections of these devices are still being configured":{de:"Die direkten Verknüpfungen dieser Geräte werden noch konfiguriert",en:"The direct device connections of these devices are still being configured"},"The members leave the group and the virtual device {device} is removed":{de:"Die Mitglieder verlassen die Gruppe, das virtuelle Gerät {device} wird entfernt",en:"The members leave the group and the virtual device {device} is removed"},"Needs the administrator role on the system":{de:"Erfordert die Administratorrolle auf dem System",en:"Needs the administrator role on the system"},"Heating groups are not available here":{de:"Heizungsgruppen sind hier nicht verfügbar",en:"Heating groups are not available here"},Heating_Control:{de:"Heizungssteuerung",en:"Heating control"},"HmIP-Heizungssteuerung":{de:"HmIP-Heizungssteuerung",en:"HmIP heating control"},"This channel does not belong to a team":{de:"Dieser Kanal gehört zu keinem Team",en:"This channel does not belong to a team"},"The interface knows no other team yet":{de:"Die Schnittstelle kennt noch kein anderes Team",en:"The interface knows no other team yet"},"Smoke group":{de:"Rauchmeldergruppe",en:"Smoke group"},"Smoke group {n}":{de:"Rauchmeldergruppe {n}",en:"Smoke group {n}"},"{count} detectors":{de:{one:"{count} Melder",other:"{count} Melder"},en:{one:"{count} detector",other:"{count} detectors"}},"New smoke group":{de:"Neue Rauchmeldergruppe",en:"New smoke group"},"Internal key…":{de:"Interne Taste…",en:"Internal key…"},"The names reach the CCU once the device is confirmed in the ReGa inbox.":{de:"Die Namen kommen auf der CCU an, sobald das Gerät im ReGa-Posteingang bestätigt ist.",en:"The names reach the CCU once the device is confirmed in the ReGa inbox."},"The profile names {count} parameters this firmware does not have":{de:{one:"Das Profil nennt {count} Parameter, den diese Firmware nicht hat",other:"Das Profil nennt {count} Parameter, die diese Firmware nicht hat"},en:{one:"The profile names {count} parameter this firmware does not have",other:"The profile names {count} parameters this firmware does not have"}},"Only available on HmIP interfaces":{de:"Nur auf HmIP-Schnittstellen verfügbar",en:"Only available on HmIP interfaces"},"This interface has no smoke detector":{de:"Diese Schnittstelle hat keinen Rauchmelder",en:"This interface has no smoke detector"},"All eight smoke groups are in use":{de:"Alle acht Rauchmeldergruppen sind belegt",en:"All eight smoke groups are in use"},"in {team}":{de:"in {team}",en:"in {team}"},"also in {groups}":{de:"auch in {groups}",en:"also in {groups}"},"A new group takes the lowest free number.":{de:"Eine neue Gruppe bekommt die niedrigste freie Nummer.",en:"A new group takes the lowest free number."},"Changes are written to the detectors and take effect once each detector has picked them up.":{de:"Änderungen werden in die Melder geschrieben und gelten, sobald jeder Melder sie übernommen hat.",en:"Changes are written to the detectors and take effect once each detector has picked them up."},"cannot be grouped - no GROUP parameters":{de:"nicht gruppierbar - keine GROUP-Parameter",en:"cannot be grouped - no GROUP parameters"},"Confirm the ReGa inbox":{de:"ReGa-Posteingang bestätigen",en:"Confirm the ReGa inbox"},"Confirm the ReGa inbox automatically":{de:"ReGa-Posteingang automatisch bestätigen",en:"Confirm the ReGa inbox automatically"},"The ReGa inbox is empty":{de:"Der ReGa-Posteingang ist leer",en:"The ReGa inbox is empty"},Confirmed:{de:"Bestätigt",en:"Confirmed"},Template:{de:"Vorlage",en:"Template"},"Save as template":{de:"Als Vorlage speichern",en:"Save as template"},"Apply template":{de:"Vorlage anwenden",en:"Apply template"},"Delete template":{de:"Vorlage löschen",en:"Delete template"},"Template name":{de:"Name der Vorlage",en:"Template name"},"No template for this pair of channel types":{de:"Keine Vorlage für diese Kanaltypen",en:"No template for this pair of channel types"},"Create link as sender":{de:"Verknüpfung als Sender anlegen",en:"Create link as sender"},"Create link as receiver":{de:"Verknüpfung als Empfänger anlegen",en:"Create link as receiver"},"Show links":{de:"Verknüpfungen anzeigen",en:"Show links"},Unreach:{de:"Ausfälle",en:"Unreach"},"Reset the unreach counters":{de:"Ausfallzähler zurücksetzen",en:"Reset the unreach counters"},"Acknowledge STICKY_UNREACH automatically as they occur":{de:"STICKY_UNREACH automatisch bestätigen, sobald sie auftreten",en:"Acknowledge STICKY_UNREACH automatically as they occur"},"Acknowledging is a write to the device. Switching this on asks once about the messages already in the list.":{de:"Das Bestätigen schreibt in das Gerät. Beim Einschalten wird einmal gefragt, was mit den Meldungen geschieht, die schon in der Liste stehen.",en:"Acknowledging is a write to the device. Switching this on asks once about the messages already in the list."},"Acknowledge the messages already in the list?":{de:"Die Meldungen in der Liste auch bestätigen?",en:"Acknowledge the messages already in the list?"},"{count} STICKY_UNREACH messages are already listed. New ones are acknowledged automatically from now on.":{de:{one:"In der Liste steht schon 1 STICKY_UNREACH-Meldung. Neue werden ab jetzt automatisch bestätigt.",other:"In der Liste stehen schon {count} STICKY_UNREACH-Meldungen. Neue werden ab jetzt automatisch bestätigt."},en:{one:"1 STICKY_UNREACH message is already listed. New ones are acknowledged automatically from now on.",other:"{count} STICKY_UNREACH messages are already listed. New ones are acknowledged automatically from now on."}},"Each acknowledgement is a write to the device. Afterwards the list no longer shows which devices were away; the unreach counter in the RSSI tab keeps that.":{de:"Jede Bestätigung schreibt in das Gerät. Danach zeigt die Liste nicht mehr, welche Geräte nicht erreichbar waren; der Ausfallzähler im Reiter Funk behält das.",en:"Each acknowledgement is a write to the device. Afterwards the list no longer shows which devices were away; the unreach counter in the RSSI tab keeps that."},"Acknowledge existing":{de:"Vorhandene bestätigen",en:"Acknowledge existing"},"Only new ones":{de:"Nur neue",en:"Only new ones"},"{count} messages in the list are acknowledged when this is saved":{de:{one:"Die Meldung in der Liste wird beim Speichern bestätigt",other:"Die {count} Meldungen in der Liste werden beim Speichern bestätigt"},en:{one:"The message in the list is acknowledged when this is saved",other:"The {count} messages in the list are acknowledged when this is saved"}},"Used for every pair without its own name":{de:"Gilt für jedes Paar ohne eigenen Namen",en:"Used for every pair without its own name"},"Nothing is staged":{de:"Nichts vorgemerkt",en:"Nothing is staged"},"Add to pending changes":{de:"Zu den offenen Änderungen",en:"Add to pending changes"},"Discard all":{de:"Alle verwerfen",en:"Discard all"},"{count} changes staged":{de:{one:"Eine Änderung vorgemerkt",other:"{count} Änderungen vorgemerkt"},en:{one:"One change staged",other:"{count} changes staged"}},"The camera is only available over https or on localhost. Open the page with its https address (the CCU serves it on its https port too, with a certificate warning) or type the key in by hand.":{de:"Die Kamera ist nur über https oder auf localhost verfügbar. Öffnen Sie die Seite über ihre https-Adresse (die CCU liefert sie auch über ihren https-Port aus, mit Zertifikatswarnung) oder geben Sie den Schlüssel von Hand ein.",en:"The camera is only available over https or on localhost. Open the page with its https address (the CCU serves it on its https port too, with a certificate warning) or type the key in by hand."},"Add by serial number":{de:"Per Seriennummer anlernen",en:"Add by serial number"},"RPC log":{de:"RPC-Protokoll",en:"RPC log"},"Show RPC log":{de:"RPC-Protokoll anzeigen",en:"Show RPC log"},"No RPC calls yet":{de:"Noch keine RPC-Aufrufe",en:"No RPC calls yet"},"in progress":{de:"läuft",en:"in progress"},"up to date":{de:"aktuell",en:"up to date"},"queued for transfer":{de:"wartet auf die Übertragung",en:"queued for transfer"},transferring:{de:"wird übertragen",en:"transferring"},"waiting for the device":{de:"wartet auf das Gerät",en:"waiting for the device"},installing:{de:"wird installiert",en:"installing"},"update pending":{de:"Update ausstehend",en:"update pending"},"firmware requested":{de:"angefordert …",en:"requested …"},"firmware requested hint":{de:"Das Update ist angefordert. Ein Batteriegerät beginnt erst, wenn es das nächste Mal wach ist; manche Geräte wollen dafür ihre Systemtaste gedrückt bekommen.",en:"The update has been requested. A battery device starts only when it is awake the next time; some want their system button pressed for it."},"firmware queued hint":{de:"Die Firmware liegt auf dem System und wartet, bis sie an der Reihe ist: Die Schnittstelle überträgt an ein Gerät nach dem anderen.",en:"The firmware is on the system and waits for its turn: the interface transfers to one device at a time."},"firmware transfer hint":{de:"Die Firmware wird im Hintergrund an das Gerät übertragen, an ein Gerät nach dem anderen. Ein Batteriegerät empfängt sie nur, solange es wach ist; das kann 8 bis 42 Stunden dauern. Danach erscheint der Button zum Installieren.",en:"The firmware is being transferred to the device in the background, one device after the other. A battery device receives it only while awake; this can take 8 to 42 hours. The install button appears once it is through."},"firmware interrupted hint":{de:"Das Gerät hat nicht geantwortet; die Übertragung wird von selbst dort fortgesetzt, wo sie stehen geblieben ist, sobald das Gerät wieder erreichbar ist.",en:"The device did not answer; the transfer continues by itself from where it stopped once the device is reachable again."},"firmware install pending hint":{de:"Das Gerät wartet auf die Installation. Bei einem Batteriegerät muss eventuell die Systemtaste gedrückt werden.",en:"The device waits for the install. A battery device may need its system button pressed."},Duration:{de:"Dauer",en:"Duration"},Method:{de:"Methode",en:"Method"},Result:{de:"Ergebnis",en:"Result"},Interface:{de:"Schnittstelle",en:"Interface"},Channels:{de:"Kanäle",en:"Channels"},Name:{de:"Name",en:"Name"},Timestamp:{de:"Zeitstempel",en:"Timestamp"},Value:{de:"Wert",en:"Value"},Message:{de:"Meldung",en:"Message"},Since:{de:"Seit",en:"Since"},"First reported, from the CCU":{de:"Erste Meldung, von der CCU",en:"First reported, from the CCU"},"First seen by the Homematic Manager":{de:"Vom Homematic Manager zuerst gesehen",en:"First seen by the Homematic Manager"},"Last changed, from the openccu-lite system":{de:"Letzte Änderung, vom openccu-lite-System",en:"Last changed, from the openccu-lite system"},"since {time}":{de:"seit {time}",en:"since {time}"},restored:{de:"wiederhergestellt",en:"restored"},"Last change: {time}":{de:"Letzte Änderung: {time}",en:"Last change: {time}"},"Last report: {time}":{de:"Letzte Meldung: {time}",en:"Last report: {time}"},"Restored by the system from its own file; no device has reported it since the system started.":{de:"Vom System aus seiner eigenen Datei wiederhergestellt; seit dem Start des Systems hat es kein Gerät gemeldet.",en:"Restored by the system from its own file; no device has reported it since the system started."},"The openccu-lite system's clock":{de:"Die Uhr des openccu-lite-Systems",en:"The openccu-lite system's clock"},"Listed by the CCU only; the interface no longer reports it":{de:"Nur von der CCU geführt; die Schnittstelle meldet sie nicht mehr",en:"Listed by the CCU only; the interface no longer reports it"},Clear:{de:"Leeren",en:"Clear"},"No data":{de:"Keine Daten",en:"No data"},"Nothing selected":{de:"Nichts ausgewählt",en:"Nothing selected"},"Comes with task 8":{de:"Diese Funktion kommt mit Aufgabe 8.",en:"This function arrives with task 8."},"Select an interface":{de:"Schnittstelle auswählen",en:"Select an interface"},"All interfaces are connected":{de:"Alle Schnittstellen verbunden",en:"All interfaces are connected"},"Not every interface is connected":{de:"Nicht jede Schnittstelle ist verbunden",en:"Not every interface is connected"},"Duty cycle {value} %":{de:"Duty Cycle {value} %",en:"Duty cycle {value} %"},"Callback port {port} is in use":{de:"Callback-Port {port} ist belegt",en:"Callback port {port} is in use"},"Callback port {port} cannot be opened":{de:"Callback-Port {port} lässt sich nicht öffnen",en:"Callback port {port} cannot be opened"},"Publish this port unchanged":{de:"Diesen Port unverändert veröffentlichen",en:"Publish this port unchanged"},"Use ReGa":{de:"ReGa verwenden",en:"Use ReGa"},"Detect interfaces":{de:"Schnittstellen erkennen",en:"Detect interfaces"},Interfaces:{de:"Schnittstellen",en:"Interfaces"},"Callback address":{de:"Callback-Adresse",en:"Callback address"},"Automatic ({address}, {why})":{de:"Automatisch ({address}, {why})",en:"Automatic ({address}, {why})"},"in the CCU's network":{de:"im Netz der CCU",en:"in the CCU's network"},"on the route to the CCU":{de:"auf dem Weg zur CCU",en:"on the route to the CCU"},"the CCU is on this machine":{de:"die CCU ist auf diesem Rechner",en:"the CCU is on this machine"},"no better match":{de:"keine bessere Wahl",en:"no better match"},"not in the CCU's network":{de:"nicht im Netz der CCU",en:"not in the CCU's network"},"link-local":{de:"link-lokal",en:"link-local"},"Use automatic":{de:"Automatisch verwenden",en:"Use automatic"},"The callback address {address} is not an address of this machine; {auto} is used instead":{de:"Die Callback-Adresse {address} ist keine Adresse dieses Rechners; stattdessen wird {auto} verwendet",en:"The callback address {address} is not an address of this machine; {auto} is used instead"},"The callback address {address} is not in the CCU's network; the CCU may not reach it and send no events":{de:"Die Callback-Adresse {address} liegt nicht im Netz der CCU; die CCU erreicht sie womöglich nicht und sendet keine Ereignisse",en:"The callback address {address} is not in the CCU's network; the CCU may not reach it and send no events"},"Automatic takes this machine's address in the CCU's network, else the one on the route to the CCU":{de:"Automatisch nimmt die Adresse dieses Rechners im Netz der CCU, sonst die auf dem Weg zur CCU",en:"Automatic takes this machine's address in the CCU's network, else the one on the route to the CCU"},"Callback XML-RPC port":{de:"Callback-Port XML-RPC",en:"Callback XML-RPC port"},"Callback BIN-RPC port":{de:"Callback-Port BIN-RPC",en:"Callback BIN-RPC port"},"Use TLS":{de:"TLS verwenden",en:"Use TLS"},"Use Auth":{de:"Authentifizierung verwenden",en:"Use Auth"},"Auth User":{de:"Benutzer",en:"Auth User"},"Auth Pass":{de:"Passwort",en:"Auth Pass"},"RPC Delay (ms)":{de:"RPC-Pause (ms)",en:"RPC Delay (ms)"},"RPC Log Folder":{de:"RPC-Log-Verzeichnis",en:"RPC Log Folder"},"Clear Cache":{de:"Cache leeren",en:"Clear Cache"},"Discovered CCUs":{de:"Gefundene CCUs",en:"Discovered CCUs"},Discover:{de:"Suchen",en:"Discover"},"Free port":{de:"freier Port",en:"Free port"},"0 picks a free port":{de:"0 wählt einen freien Port",en:"0 picks a free port"},"0 uses port {port}, or a free one when it is taken":{de:"0 verwendet Port {port} oder, wenn er belegt ist, einen freien",en:"0 uses port {port}, or a free one when it is taken"},"Set at start ({option})":{de:"Beim Start festgelegt ({option})",en:"Set at start ({option})"},Certificate:{de:"Zertifikat",en:"Certificate"},"The certificate of {url} is not trusted ({code})":{de:"Dem Zertifikat von {url} wird nicht vertraut ({code})",en:"The certificate of {url} is not trusted ({code})"},"The certificate of {url} is not trusted ({code}). Until it is, whether this is an openccu-lite system is not known.":{de:"Dem Zertifikat von {url} wird nicht vertraut ({code}). Bis dahin ist unbekannt, ob dies ein openccu-lite-System ist.",en:"The certificate of {url} is not trusted ({code}). Until it is, whether this is an openccu-lite system is not known."},"{subject}, issued by {issuer}, valid until {validTo}":{de:"{subject}, ausgestellt von {issuer}, gültig bis {validTo}",en:"{subject}, issued by {issuer}, valid until {validTo}"},"Trust this certificate":{de:"Diesem Zertifikat vertrauen",en:"Trust this certificate"},"Trust the CA {name}":{de:"Der CA {name} vertrauen",en:"Trust the CA {name}"},"A trusted certificate holds whatever name the system is reached by, until it is renewed; a trusted CA also covers its renewals, but the name must match the certificate.":{de:"Ein vertrautes Zertifikat gilt unter jedem Namen des Systems, bis es erneuert wird; eine vertraute CA gilt auch für Erneuerungen, aber der Name muss zum Zertifikat passen.",en:"A trusted certificate holds whatever name the system is reached by, until it is renewed; a trusted CA also covers its renewals, but the name must match the certificate."},"Trusted certificates":{de:"Vertraute Zertifikate",en:"Trusted certificates"},"{count} certificates or CAs of the system are trusted":{de:{one:"{count} Zertifikat oder CA des Systems wird vertraut",other:"{count} Zertifikaten oder CAs des Systems wird vertraut"},en:{one:"{count} certificate or CA of the system is trusted",other:"{count} certificates or CAs of the system are trusted"}},"Forget them":{de:"Vergessen",en:"Forget them"},"Unsubscribe when idle":{de:"Abmelden bei Inaktivität",en:"Unsubscribe when idle"},"Default ({time})":{de:"Voreinstellung ({time})",en:"Default ({time})"},"Never unsubscribe":{de:"Nie abmelden",en:"Never unsubscribe"},"{count} seconds":{de:{one:"{count} Sekunde",other:"{count} Sekunden"},en:{one:"{count} second",other:"{count} seconds"}},"{count} minutes":{de:{one:"{count} Minute",other:"{count} Minuten"},en:{one:"{count} minute",other:"{count} minutes"}},"{count} hours":{de:{one:"{count} Stunde",other:"{count} Stunden"},en:{one:"{count} hour",other:"{count} hours"}},"With no page open, the event subscriptions are dropped after this time and taken up again when a page is opened":{de:"Ist keine Seite geöffnet, werden die Event-Anmeldungen nach dieser Zeit beendet und beim Öffnen einer Seite wieder aufgenommen",en:"With no page open, the event subscriptions are dropped after this time and taken up again when a page is opened"},Dismiss:{de:"Ausblenden",en:"Dismiss"},"{count} more":{de:{one:"{count} weitere",other:"{count} weitere"},en:{one:"{count} more",other:"{count} more"}},"Show fewer":{de:"Weniger anzeigen",en:"Show fewer"},"Add device":{de:"Gerät anlernen",en:"Add device"},"Pair device":{de:"Gerät anlernen",en:"Pair device"},"reportValueUsage 0":{de:"reportValueUsage 0",en:"reportValueUsage 0"},"reportValueUsage 1":{de:"reportValueUsage 1",en:"reportValueUsage 1"},"Expand row":{de:"Zeile aufklappen",en:"Expand row"},"Collapse row":{de:"Zeile zuklappen",en:"Collapse row"},"Sorted ascending":{de:"Aufsteigend sortiert",en:"Sorted ascending"},"Sorted descending":{de:"Absteigend sortiert",en:"Sorted descending"},"Showing {shown} of {total}":{de:"Zeige {shown} von {total}",en:"Showing {shown} of {total}"},"No devices - the interface has not reported any yet":{de:"Keine Geräte - die Schnittstelle hat noch keine gemeldet",en:"No devices - the interface has not reported any yet"},"No device matches the room or function filter":{de:"Kein Gerät passt zum Raum- oder Gewerkefilter",en:"No device matches the room or function filter"},"No row matches the filter":{de:"Keine Zeile passt zum Filter",en:"No row matches the filter"},"Clear filter":{de:"Filter löschen",en:"Clear filter"},"Resize column {column}":{de:"Breite der Spalte {column} ändern",en:"Resize column {column}"},"Fit column to content":{de:"Spaltenbreite an den Inhalt anpassen",en:"Fit column to content"},"Reset column widths":{de:"Spaltenbreiten zurücksetzen",en:"Reset column widths"},"Column widths":{de:"Spaltenbreiten",en:"Column widths"},"Copy name":{de:"Namen kopieren",en:"Copy name"},"Copy address":{de:"Adresse kopieren",en:"Copy address"},Copied:{de:"Kopiert",en:"Copied"},"Could not copy - the text is selected":{de:"Kopieren nicht möglich - der Text ist markiert",en:"Could not copy - the text is selected"},Configured:{de:"Konfiguriert",en:"Configured"},"Use {interface} as receiver":{de:"{interface} als Empfänger verwenden",en:"Use {interface} as receiver"},"Assign the best receiver":{de:"Besten Empfänger zuweisen",en:"Assign the best receiver"},"Best receiver":{de:"Bester Empfänger",en:"Best receiver"},"Only one interface":{de:"Nur eine Schnittstelle",en:"Only one interface"},"Which interface receives each device best, from the levels the interfaces last measured. Nothing is written until you confirm; every device is one setBidcosInterface.":{de:"Welche Schnittstelle jedes Gerät am besten empfängt, aus den zuletzt gemessenen Pegeln. Geschrieben wird erst nach Bestätigung, jedes Gerät ist ein setBidcosInterface.",en:"Which interface receives each device best, from the levels the interfaces last measured. Nothing is written until you confirm; every device is one setBidcosInterface."},Margin:{de:"Mindestabstand",en:"Margin"},"A switch is proposed only when the best interface receives the device at least this much better than the configured one - two reads of the same link differ by a few dB.":{de:"Ein Wechsel wird nur vorgeschlagen, wenn die beste Schnittstelle das Gerät um mindestens so viel besser empfängt als die konfigurierte - zwei Messungen derselben Strecke unterscheiden sich um einige dB.",en:"A switch is proposed only when the best interface receives the device at least this much better than the configured one - two reads of the same link differ by a few dB."},Proposed:{de:"Vorgeschlagen",en:"Proposed"},"Very good (maximum)":{de:"Sehr gut (Maximum)",en:"Very good (maximum)"},"Very good":{de:"Sehr gut",en:"Very good"},Good:{de:"Gut",en:"Good"},"Good (normal operation)":{de:"Gut (Normalbetrieb)",en:"Good (normal operation)"},Sufficient:{de:"Ausreichend",en:"Sufficient"},"Sufficient to weak":{de:"Ausreichend bis schwach",en:"Sufficient to weak"},Poor:{de:"Schlecht",en:"Poor"},Critical:{de:"Kritisch",en:"Critical"},Gain:{de:"Gewinn",en:"Gain"},"Below the margin":{de:"Unter dem Mindestabstand",en:"Below the margin"},"Not heard by the configured receiver":{de:"Vom konfigurierten Empfänger nicht gehört",en:"Not heard by the configured receiver"},"Every device is on the receiver that hears it best":{de:"Jedes Gerät ist auf dem Empfänger, der es am besten hört",en:"Every device is on the receiver that hears it best"},"Not listed: {keep} on their best receiver, {unmeasured} without a measurement, {roaming} roaming":{de:"Nicht aufgeführt: {keep} auf ihrem besten Empfänger, {unmeasured} ohne Messwert, {roaming} mit Roaming",en:"Not listed: {keep} on their best receiver, {unmeasured} without a measurement, {roaming} roaming"},"Assign ({count})":{de:"Zuweisen ({count})",en:"Assign ({count})"},"{done} of {total} assigned":{de:"{done} von {total} zugewiesen",en:"{done} of {total} assigned"},install:{de:"installieren",en:"install"},"Install firmware {version}":{de:"Firmware {version} installieren",en:"Install firmware {version}"},"Overwrite channel names":{de:"Kanalnamen überschreiben",en:"Overwrite channel names"},"Do you really want to delete the device {name}?":{de:"Wollen Sie das Gerät {name} wirklich löschen?",en:"Do you really want to delete the device {name}?"},"Unlearn and reset the device to factory defaults":{de:"Ablernen und Gerät auf Werkseinstellungen zurücksetzen",en:"Unlearn and reset the device to factory defaults"},"Unlearn only (direct links are kept)":{de:"Nur ablernen (Direktverknüpfungen bleiben erhalten)",en:"Unlearn only (direct links are kept)"},"If the device cannot be reached:":{de:"Falls Gerät nicht erreichbar:",en:"If the device cannot be reached:"},"Delete at the next opportunity":{de:"Bei nächster Gelegenheit löschen",en:"Delete at the next opportunity"},"Delete from the interface process only":{de:"Nur aus dem Schnittstellenprozess löschen",en:"Delete from the interface process only"},"New device":{de:"Neues Gerät",en:"New device"},"No suitable device available":{de:"Kein passendes Gerät vorhanden",en:"No suitable device available"},"Select a device":{de:"Ein Gerät auswählen",en:"Select a device"},"Select one or more channels":{de:"Einen oder mehrere Kanäle auswählen",en:"Select one or more channels"},"This device carries the DontDelete flag":{de:"Dieses Gerät trägt das Flag DontDelete",en:"This device carries the DontDelete flag"},"Only available on BidCos interfaces":{de:"Nur bei BidCos-Schnittstellen verfügbar",en:"Only available on BidCos interfaces"},"This interface cannot pair devices":{de:"Diese Schnittstelle kann keine Geräte anlernen",en:"This interface cannot pair devices"},"reportValueUsage {value}: {count} datapoints on {channels} channels":{de:"reportValueUsage {value}: {count} Datenpunkte auf {channels} Kanälen",en:"reportValueUsage {value}: {count} datapoints on {channels} channels"},"SERVICE Paramset":{de:"SERVICE Parametersatz",en:"SERVICE Paramset"},Preview:{de:"Vorschau",en:"Preview"},Write:{de:"Schreiben",en:"Write"},Parameter:{de:"Parameter",en:"Parameter"},"Current value":{de:"Aktueller Wert",en:"Current value"},"New value":{de:"Neuer Wert",en:"New value"},"Nothing has changed - nothing will be written":{de:"Nichts geändert - es wird nichts geschrieben",en:"Nothing has changed - nothing will be written"},"Write every parameter, not only the changed ones":{de:"Alle Parameter schreiben, nicht nur die geänderten",en:"Write every parameter, not only the changed ones"},"Show hidden parameters":{de:"Ausgeblendete Parameter zeigen",en:"Show hidden parameters"},"Suppress all":{de:"Alle unterdrücken",en:"Suppress all"},suppressed:{de:"unterdrückt",en:"suppressed"},"not suppressed":{de:"nicht unterdrückt",en:"not suppressed"},Suppress:{de:"Unterdrücken",en:"Suppress"},Unsuppress:{de:"Unterdrückung aufheben",en:"Unsuppress"},"Service message suppression":{de:"Unterdrückung von Servicemeldungen",en:"Service message suppression"},"Nothing is sent until Apply; the preview lists every call first.":{de:"Bis „Übernehmen“ wird nichts gesendet; die Vorschau zeigt vorher jeden Aufruf.",en:"Nothing is sent until Apply; the preview lists every call first."},"{count} calls will be made":{de:{one:"{count} Aufruf wird gesendet",other:"{count} Aufrufe werden gesendet"},en:{one:"{count} call will be made",other:"{count} calls will be made"}},"Routing table":{de:"Routing-Tabelle",en:"Routing table"},"Read from the device itself; every read costs duty cycle, so it is read once when this opens.":{de:"Direkt vom Gerät gelesen; jedes Lesen kostet Duty Cycle, deshalb einmal beim Öffnen.",en:"Read from the device itself; every read costs duty cycle, so it is read once when this opens."},"No routes: the device reported an empty table.":{de:"Keine Routen: das Gerät hat eine leere Tabelle gemeldet.",en:"No routes: the device reported an empty table."},Destination:{de:"Ziel",en:"Destination"},"Next hop":{de:"Nächster Hop",en:"Next hop"},Hops:{de:"Hops",en:"Hops"},hops:{de:{one:"Hop",other:"Hops"},en:{one:"hop",other:"hops"}},Neighbour:{de:"Nachbar",en:"Neighbour"},Static:{de:"Statisch",en:"Static"},Router:{de:"Router",en:"Router"},"Access controller":{de:"Access Controller",en:"Access controller"},Portable:{de:"Tragbar",en:"Portable"},"Listener mode":{de:"Empfangsmodus",en:"Listener mode"},Valid:{de:"Gültig",en:"Valid"},"Unsuppress all":{de:"Keine unterdrücken",en:"Unsuppress all"},"A suppressed one reports a value that raises no message; the CCU shows it as inactive.":{de:"Eine unterdrückte meldet einen Wert, der keine Meldung auslöst; die CCU zeigt sie als inaktiv.",en:"A suppressed one reports a value that raises no message; the CCU shows it as inactive."},"The CCU stops reporting {datapoint} for this channel: the HmIP interface reports a value that raises no message (suppressServiceMessages). The device's other messages are not affected. Undo with “Unsuppress”.":{de:"Die Zentrale meldet {datapoint} für diesen Kanal nicht mehr: die HmIP-Schnittstelle liefert dafür einen Wert, der keine Meldung auslöst (suppressServiceMessages). Andere Meldungen des Geräts sind nicht betroffen. Rückgängig mit „Unterdrückung aufheben“.",en:"The CCU stops reporting {datapoint} for this channel: the HmIP interface reports a value that raises no message (suppressServiceMessages). The device's other messages are not affected. Undo with “Unsuppress”."},"The CCU reports {datapoint} for this channel again: lifts the suppression (suppressServiceMessages with suppress=false).":{de:"Die Zentrale meldet {datapoint} für diesen Kanal wieder: hebt die Unterdrückung auf (suppressServiceMessages mit suppress=false).",en:"The CCU reports {datapoint} for this channel again: lifts the suppression (suppressServiceMessages with suppress=false)."},"other firmware or device type":{de:"andere Firmware oder anderer Gerätetyp",en:"other firmware or device type"},"Add link":{de:"Verknüpfung anlegen",en:"Add link"},"No channel of this interface can be the sender of a link":{de:"Kein Kanal dieser Schnittstelle kann Sender einer Verknüpfung sein",en:"No channel of this interface can be the sender of a link"},"Select one link":{de:"Eine Verknüpfung auswählen",en:"Select one link"},"No channel can receive from this sender":{de:"Kein Kanal kann von diesem Sender empfangen",en:"No channel can receive from this sender"},"{count} defective links":{de:{one:"{count} defekte Verknüpfung",other:"{count} defekte Verknüpfungen"},en:{one:"{count} defective link",other:"{count} defective links"}},"Defective link":{de:"Defekte Verknüpfung",en:"Defective link"},Profile:{de:"Profil",en:"Profile"},"Expert view":{de:"Expertenansicht",en:"Expert view"},"Short key press":{de:"Kurzer Tastendruck",en:"Short key press"},"Long key press":{de:"Langer Tastendruck",en:"Long key press"},"Not active":{de:"Nicht aktiv",en:"Not active"},Permanent:{de:"dauerhaft",en:"permanent"},"Enter value":{de:"Wert eingeben",en:"Enter value"},"Marked: the parameters the easy mode of this channel shows":{de:"Markiert: die Parameter, die der Easy-Mode dieses Kanals zeigt",en:"Marked: the parameters the easy mode of this channel shows"},"Marked: the parameters the easy mode of this profile shows":{de:"Markiert: die Parameter, die der Easy-Mode dieses Profils zeigt",en:"Marked: the parameters the easy mode of this profile shows"},"The CCU's form for this profile is not known here: every parameter is shown, the ones the profile fixes greyed out.":{de:"Die Maske der CCU für dieses Profil ist hier nicht bekannt: alle Parameter werden gezeigt, die vom Profil festgelegten ausgegraut.",en:"The CCU's form for this profile is not known here: every parameter is shown, the ones the profile fixes greyed out."},"Repair configuration":{de:"Konfiguration reparieren",en:"Repair configuration"},"Communication disturbed":{de:"Kommunikation gestört",en:"Communication disturbed"},"Communication was disturbed":{de:"Kommunikation war gestört",en:"Communication was disturbed"},"Low battery":{de:"Batterie schwach",en:"Low battery"},"Configuration pending":{de:"Konfiguration ausstehend",en:"Configuration pending"},"Update pending":{de:"Update ausstehend",en:"Update pending"},Sabotage:{de:"Sabotage",en:"Sabotage"},Fault:{de:"Fehler",en:"Fault"},"Fault report":{de:"Fehlermeldung",en:"Fault report"},"The configuration could not be transferred to the device":{de:"Die Konfiguration konnte nicht zum Gerät übertragen werden",en:"The configuration could not be transferred to the device"},"A configuration is queued; the device takes it when it next wakes up":{de:"Eine Konfiguration ist eingereiht; das Gerät übernimmt sie beim nächsten Aufwachen",en:"A configuration is queued; the device takes it when it next wakes up"},"On BidCos a pending configuration is normal: it is queued and the device takes it when it next wakes up.":{de:"Bei BidCos ist eine ausstehende Konfiguration normal: sie ist eingereiht und das Gerät übernimmt sie beim nächsten Aufwachen.",en:"On BidCos a pending configuration is normal: it is queued and the device takes it when it next wakes up."},"These channels store a parameter their description does not have. No RPC method removes it: the device has to be deleted and paired again, or a CCU backup from before the bad write restored.":{de:"Diese Kanäle speichern einen Parameter, den ihre Beschreibung nicht kennt. Keine RPC-Methode entfernt ihn: das Gerät muss gelöscht und neu angelernt werden, oder ein CCU-Backup von vor dem fehlerhaften Schreibvorgang eingespielt werden.",en:"These channels store a parameter their description does not have. No RPC method removes it: the device has to be deleted and paired again, or a CCU backup from before the bad write restored."},"Nothing has to be corrected":{de:"Es muss nichts korrigiert werden",en:"Nothing has to be corrected"},"Additional BidCos recovery":{de:"Zusätzliche BidCos-Reparatur",en:"Additional BidCos recovery"},Channel:{de:"Kanal",en:"Channel"},"Read back":{de:"Rückgelesen",en:"Read back"},"The interface answered ok but stored something else":{de:"Die Schnittstelle hat ok geantwortet, aber etwas anderes gespeichert",en:"The interface answered ok but stored something else"},"What was sent":{de:"Gesendet",en:"What was sent"},"Only STICKY_UNREACH and SABOTAGE can be acknowledged":{de:"Nur STICKY_UNREACH und SABOTAGE lassen sich bestätigen",en:"Only STICKY_UNREACH and SABOTAGE can be acknowledged"},"{count} of {total} on this box":{de:"{count} von {total} auf dieser Zentrale",en:"{count} of {total} on this box"},"Also on this box: {list}. Click to switch to {next}.":{de:"Außerdem auf dieser Zentrale: {list}. Ein Klick wechselt zu {next}.",en:"Also on this box: {list}. Click to switch to {next}."},Pause:{de:"Anhalten",en:"Pause"},"Events per device":{de:"Ereignisse je Gerät",en:"Events per device"},Peer:{de:"Gegenstelle",en:"Peer"},"Heard best by {address}":{de:"Am besten empfangen von {address}",en:"Heard best by {address}"},History:{de:"Verlauf",en:"History"},optional:{de:"optional",en:"optional"},Mode:{de:"Modus",en:"Mode"},"Serial number":{de:"Seriennummer",en:"Serial number"},"Temporary key":{de:"Temporärer Schlüssel",en:"Temporary key"},"The security key of the system the device was last paired to, if it holds one. Leave it empty otherwise: the system asks for it when a device is refused for its key.":{de:"Der Sicherheitsschlüssel des Systems, an dem das Gerät zuletzt angelernt war, falls es einen trägt. Sonst leer lassen: Das System fragt danach, wenn ein Gerät wegen seines Schlüssels abgewiesen wird.",en:"The security key of the system the device was last paired to, if it holds one. Leave it empty otherwise: the system asks for it when a device is refused for its key."},"Security key of the other system":{de:"Sicherheitsschlüssel des anderen Systems",en:"Security key of the other system"},"The device {serial} could not be paired: it holds a security key this system does not know. Enter the security key of the system it was paired to and try again.":{de:"Das Gerät {serial} konnte nicht angelernt werden: Es trägt einen Sicherheitsschlüssel, den dieses System nicht kennt. Geben Sie den Sicherheitsschlüssel des Systems ein, an dem es angelernt war, und versuchen Sie es erneut.",en:"The device {serial} could not be paired: it holds a security key this system does not know. Enter the security key of the system it was paired to and try again."},"Set the key and try again":{de:"Schlüssel setzen und erneut versuchen",en:"Set the key and try again"},"Normal install mode":{de:"Normaler Anlernmodus",en:"Normal install mode"},"Write the MASTER defaults and delete the existing links":{de:"Default-Parameter in Paramset MASTER schreiben, bestehende Verknüpfungen löschen",en:"Write the MASTER defaults and delete the existing links"},"With SGTIN and key":{de:"Mit SGTIN und Schlüssel",en:"With SGTIN and key"},"With SGTIN only (key server)":{de:"Nur mit SGTIN (Key Server)",en:"With SGTIN only (key server)"},"Any device (no SGTIN)":{de:"Beliebiges Gerät (ohne SGTIN)",en:"Any device (no SGTIN)"},"Works offline: the key from the sticker is all the interface needs.":{de:"Funktioniert offline: Der Schlüssel vom Aufkleber ist alles, was die Schnittstelle braucht.",en:"Works offline: the key from the sticker is all the interface needs."},"The key comes from eQ-3's key server: the box needs internet access.":{de:"Der Schlüssel kommt vom Key Server von eQ-3: Die Zentrale braucht Internetzugang.",en:"The key comes from eQ-3's key server: the box needs internet access."},"Pairs the next device in factory state that asks to join. Without a key the interface asks eQ-3's key server, so the box needs internet access unless a local key mapping is configured.":{de:"Lernt das nächste Gerät im Werkszustand an, das sich meldet. Ohne Schlüssel fragt die Schnittstelle den Key Server von eQ-3, die Zentrale braucht also Internetzugang, sofern keine lokale Schlüsselzuordnung eingerichtet ist.",en:"Pairs the next device in factory state that asks to join. Without a key the interface asks eQ-3's key server, so the box needs internet access unless a local key mapping is configured."},"Pairs the next device in factory state that asks to join, if its key is on the system: the system's key mode never asks eQ-3's key server. {count} device keys are stored on the system.":{de:{one:"Lernt das nächste Gerät im Werkszustand an, das sich meldet, sofern sein Schlüssel auf dem System liegt: Der Schlüsselmodus des Systems fragt den Key Server von eQ-3 nie. Auf dem System ist {count} Geräteschlüssel gespeichert.",other:"Lernt das nächste Gerät im Werkszustand an, das sich meldet, sofern sein Schlüssel auf dem System liegt: Der Schlüsselmodus des Systems fragt den Key Server von eQ-3 nie. Auf dem System sind {count} Geräteschlüssel gespeichert."},en:{one:"Pairs the next device in factory state that asks to join, if its key is on the system: the system's key mode never asks eQ-3's key server. {count} device key is stored on the system.",other:"Pairs the next device in factory state that asks to join, if its key is on the system: the system's key mode never asks eQ-3's key server. {count} device keys are stored on the system."}},"The install mode has ended and no device has joined. A device that is still paired with another central sends no inclusion request: reset it to factory state and start again.":{de:"Der Anlernmodus ist abgelaufen, und kein Gerät hat sich angemeldet. Ein Gerät, das noch an einer anderen Zentrale angelernt ist, sendet keine Anlernanfrage: Gerät auf Werkseinstellungen zurücksetzen und erneut starten.",en:"The install mode has ended and no device has joined. A device that is still paired with another central sends no inclusion request: reset it to factory state and start again."},"The install mode has ended and no device has joined. Put the device into its pairing mode and start again. A device that holds another system's security key is reported here and that key asked for; a factory reset does not remove it.":{de:"Der Anlernmodus ist abgelaufen, und kein Gerät hat sich angemeldet. Bringen Sie das Gerät in den Anlernmodus und starten Sie erneut. Ein Gerät mit dem Sicherheitsschlüssel eines anderen Systems wird hier gemeldet und der Schlüssel abgefragt; ein Zurücksetzen auf Werkseinstellungen entfernt ihn nicht.",en:"The install mode has ended and no device has joined. Put the device into its pairing mode and start again. A device that holds another system's security key is reported here and that key asked for; a factory reset does not remove it."},"QR scanner":{de:"QR-Scanner",en:"QR scanner"},Scan:{de:"Scannen",en:"Scan"},Stop:{de:"Stoppen",en:"Stop"},"The key from the sticker (26 characters, dashes optional), or scan the QR code.":{de:"Der Schlüssel vom Aufkleber (26 Zeichen, Bindestriche optional), oder den QR-Code scannen.",en:"The key from the sticker (26 characters, dashes optional), or scan the QR code."},"An access point (HAP, DRAP) is paired like a device: factory-reset it, start the install mode, then power it. System and access point must be in the same network.":{de:"Ein Access Point (HAP, DRAP) wird wie ein Gerät angelernt: auf Werkseinstellungen zurücksetzen, den Anlernmodus starten, dann mit Strom versorgen. System und Access Point müssen im selben Netzwerk sein.",en:"An access point (HAP, DRAP) is paired like a device: factory-reset it, start the install mode, then power it. System and access point must be in the same network."},"That is not a HomematicIP device code":{de:"Das ist kein HomematicIP-Gerätecode",en:"That is not a HomematicIP device code"},"Start install mode":{de:"Anlernmodus aktivieren",en:"Start install mode"},"{count} seconds left":{de:{one:"Noch {count} Sekunde",other:"Noch {count} Sekunden"},en:{one:"{count} second left",other:"{count} seconds left"}},"BidCos-Wired has no install mode; the interface searches its bus for new devices.":{de:"BidCos-Wired hat keinen Anlernmodus; die Schnittstelle durchsucht ihren Bus nach neuen Geräten.",en:"BidCos-Wired has no install mode; the interface searches its bus for new devices."},"A new version is available":{de:"Eine neue Version ist verfügbar",en:"A new version is available"},Downloading:{de:"Wird geladen",en:"Downloading"},"The update is ready and will be installed when you quit":{de:"Die Aktualisierung ist bereit und wird beim Beenden installiert",en:"The update is ready and will be installed when you quit"},"The update will be installed when you quit":{de:"Die Aktualisierung wird beim Beenden installiert",en:"The update will be installed when you quit"},Download:{de:"Herunterladen",en:"Download"},"Install on quit":{de:"Beim Beenden installieren",en:"Install on quit"},"The update check failed":{de:"Die Suche nach Aktualisierungen ist fehlgeschlagen",en:"The update check failed"},"The download of the update failed":{de:"Das Herunterladen der Aktualisierung ist fehlgeschlagen",en:"The download of the update failed"},"The update failed":{de:"Die Aktualisierung ist fehlgeschlagen",en:"The update failed"},"Releases on GitHub":{de:"Versionen auf GitHub",en:"Releases on GitHub"},"Opens the installer of the new version in your browser":{de:"Öffnet das Installationsprogramm der neuen Version im Browser",en:"Opens the installer of the new version in your browser"},"Device data":{de:"Gerätedaten",en:"Device data"},"Homematic Manager on GitHub":{de:"Homematic Manager auf GitHub",en:"Homematic Manager on GitHub"},Connection:{de:"Verbindung",en:"Connection"},Callback:{de:"Rückruf",en:"Callback"},Behaviour:{de:"Verhalten",en:"Behaviour"},"Configured interfaces":{de:"Konfigurierte Schnittstellen",en:"Configured interfaces"},"An extra interface is connected once it is ticked here":{de:"Eine zusätzliche Schnittstelle wird verbunden, sobald sie hier angehakt ist",en:"An extra interface is connected once it is ticked here"},"Host name or address of the CCU":{de:"Hostname oder Adresse der CCU",en:"Host name or address of the CCU"},"Searches the network for CCUs over UDP":{de:"Sucht per UDP im Netz nach CCUs",en:"Searches the network for CCUs over UDP"},"The encrypted ports of the CCU":{de:"Die verschlüsselten Ports der CCU",en:"The encrypted ports of the CCU"},"The address the interface processes call back to":{de:"Die Adresse, an die die Schnittstellenprozesse zurückrufen",en:"The address the interface processes call back to"},"Probes the known ports in the background":{de:"Prüft die bekannten Ports im Hintergrund",en:"Probes the known ports in the background"},"ReGa supplies the friendly names":{de:"ReGa liefert die Anzeigenamen",en:"ReGa supplies the friendly names"},"Only possible with ReGa":{de:"Nur mit ReGa möglich",en:"Only possible with ReGa"},"Switched off: the system has no ReGaHSS":{de:"Abgeschaltet: das System hat kein ReGaHSS",en:"Switched off: the system has no ReGaHSS"},"Shortest pause between two writes":{de:"Kürzeste Pause zwischen zwei Schreibzugriffen",en:"Shortest pause between two writes"},"Empty switches the dumps off":{de:"Leer schaltet die Mitschrift ab",en:"Empty switches the dumps off"},"Discards the caches when this is saved":{de:"Verwirft die Caches beim Speichern",en:"Discards the caches when this is saved"},"Extra interfaces":{de:"Zusätzliche Schnittstellen",en:"Extra interfaces"},"Add interface":{de:"Schnittstelle hinzufügen",en:"Add interface"},Remove:{de:"Entfernen",en:"Remove"},Host:{de:"Host",en:"Host"},Port:{de:"Port",en:"Port"},Path:{de:"Pfad",en:"Path"},Protocol:{de:"Protokoll",en:"Protocol"},"Searching...":{de:"Suche läuft...",en:"Searching..."},"Show the raw parameters as well":{de:"Rohe Parameter zusätzlich anzeigen",en:"Show the raw parameters as well"},Durations:{de:"Zeitdauern",en:"Durations"},"A duration is stored as a unit and a count; both are shown next to the seconds.":{de:"Eine Zeitdauer wird als Einheit und Faktor gespeichert; beides steht neben den Sekunden.",en:"A duration is stored as a unit and a count; both are shown next to the seconds."},seconds:{de:"Sekunden",en:"seconds"},unit:{de:"Einheit",en:"unit"},count:{de:"Faktor",en:"count"},"Not used / for ever":{de:"Nicht benutzt / dauerhaft",en:"Not used / for ever"},"The device holds a value this pair cannot express":{de:"Das Gerät hält einen Wert, den dieses Paar nicht ausdrücken kann",en:"The device holds a value this pair cannot express"},"The device can only do {seconds}":{de:"Das Gerät kann nur {seconds}",en:"The device can only do {seconds}"},"Week programme":{de:"Wochenprogramm",en:"Week programme"},"Switching programme":{de:"Schaltprogramm",en:"Switching programme"},Weekday:{de:"Wochentag",en:"Weekday"},Weekdays:{de:"Wochentage",en:"Weekdays"},Slot:{de:"Abschnitt",en:"Slot"},until:{de:"bis",en:"until"},Copy:{de:"Kopieren",en:"Copy"},"Copy day to":{de:"Tag kopieren nach",en:"Copy day to"},"Copy profile to":{de:"Profil kopieren nach",en:"Copy profile to"},Monday:{de:"Montag",en:"Monday"},Tuesday:{de:"Dienstag",en:"Tuesday"},Wednesday:{de:"Mittwoch",en:"Wednesday"},Thursday:{de:"Donnerstag",en:"Thursday"},Friday:{de:"Freitag",en:"Friday"},Saturday:{de:"Samstag",en:"Saturday"},Sunday:{de:"Sonntag",en:"Sunday"},"The end times of a day rise until {end}, and the last one is {end}":{de:"Die Endzeiten eines Tages steigen bis {end}, und die letzte ist {end}",en:"The end times of a day rise until {end}, and the last one is {end}"},"{day}: end time {slot} is not after the one before it":{de:"{day}: Endzeit {slot} liegt nicht nach der vorherigen",en:"{day}: end time {slot} is not after the one before it"},"{day}: end time {slot} comes after the day has ended":{de:"{day}: Endzeit {slot} liegt hinter dem Ende des Tages",en:"{day}: end time {slot} comes after the day has ended"},"{day}: the last end time must be {end}":{de:"{day}: die letzte Endzeit muss {end} sein",en:"{day}: the last end time must be {end}"},"A time between 00:00 and {end}":{de:"Eine Zeit zwischen 00:00 und {end}",en:"A time between 00:00 and {end}"},Time:{de:"Zeit",en:"Time"},Level:{de:"Stufe",en:"Level"},Condition:{de:"Bedingung",en:"Condition"},"Astro offset":{de:"Astro-Versatz",en:"Astro offset"},"Target channels":{de:"Zielkanäle",en:"Target channels"},Unused:{de:"Unbenutzt",en:"Unused"},"No weekday chosen - the slot does nothing":{de:"Kein Wochentag gewählt - der Abschnitt tut nichts",en:"No weekday chosen - the slot does nothing"},"Blind calibration":{de:"Jalousie-Kalibrierung",en:"Blind calibration"},"The running times of a reference run, in plain seconds next to the value the device stores.":{de:"Die Laufzeiten einer Referenzfahrt, in Sekunden neben dem Wert, den das Gerät speichert.",en:"The running times of a reference run, in plain seconds next to the value the device stores."},"Named options":{de:"Benannte Auswahlen",en:"Named options"},"These values have names in the CCU string table that the description does not carry.":{de:"Diese Werte haben Namen in der CCU-Zeichenkettentabelle, die die Beschreibung nicht mitliefert.",en:"These values have names in the CCU string table that the description does not carry."},Rooms:{de:"Räume",en:"Rooms"},Functions:{de:"Gewerke",en:"Functions"},Room:{de:"Raum",en:"Room"},Function:{de:"Gewerk",en:"Function"},"All rooms":{de:"Alle Räume",en:"All rooms"},"All functions":{de:"Alle Gewerke",en:"All functions"},"Assign to room":{de:"Raum zuordnen",en:"Assign to room"},"Assign to function":{de:"Gewerk zuordnen",en:"Assign to function"},"Rooms and functions":{de:"Räume und Gewerke",en:"Rooms and functions"},"Filter rooms":{de:"Räume filtern",en:"Filter rooms"},"Filter functions":{de:"Gewerke filtern",en:"Filter functions"},"No match":{de:"Kein Treffer",en:"No match"},"New room…":{de:"Neuer Raum…",en:"New room…"},"New function…":{de:"Neues Gewerk…",en:"New function…"},"Name of the new room":{de:"Name des neuen Raums",en:"Name of the new room"},"Name of the new function":{de:"Name des neuen Gewerks",en:"Name of the new function"},"Not saved: {message}":{de:"Nicht gespeichert: {message}",en:"Not saved: {message}"},"The name was not saved":{de:"Der Name wurde nicht gespeichert",en:"The name was not saved"},"{count} changes were not saved":{de:{one:"Eine Änderung wurde nicht gespeichert. Sie ist markiert; Übernehmen versucht sie erneut.",other:"{count} Änderungen wurden nicht gespeichert. Sie sind markiert; Übernehmen versucht sie erneut."},en:{one:"One change was not saved. It is marked; Apply tries it again.",other:"{count} changes were not saved. They are marked; Apply tries them again."}},"{count} rows selected":{de:{one:"Eine Zeile ausgewählt",other:"{count} Zeilen ausgewählt"},en:{one:"One row selected",other:"{count} rows selected"}},"Select one or more rows":{de:"Eine oder mehrere Zeilen auswählen",en:"Select one or more rows"},"The store does not take writes":{de:"Der Speicher nimmt keine Änderungen an",en:"The store does not take writes"},"No store connected":{de:"Kein Speicher verbunden",en:"No store connected"},"No rooms yet":{de:"Noch keine Räume",en:"No rooms yet"},"No functions yet":{de:"Noch keine Gewerke",en:"No functions yet"},Add:{de:"Anlegen",en:"Add"},"Add below":{de:"Darunter anlegen",en:"Add below"},Move:{de:"Verschieben",en:"Move"},"Move to":{de:"Verschieben nach",en:"Move to"},"Top level":{de:"Oberste Ebene",en:"Top level"},"New name":{de:"Neuer Name",en:"New name"},"Delete and detach":{de:"Löschen und Zuordnungen entfernen",en:"Delete and detach"},"Still assigned here - the assignments are removed with the node:":{de:"Noch zugeordnet - die Zuordnungen werden mit dem Knoten entfernt:",en:"Still assigned here - the assignments are removed with the node:"},"Nothing is assigned here":{de:"Hier ist nichts zugeordnet",en:"Nothing is assigned here"},"A floor is a room with rooms below it: add one, then add rooms below it.":{de:"Eine Etage ist ein Raum mit Räumen darunter: erst die Etage anlegen, dann Räume darunter.",en:"A floor is a room with rooms below it: add one, then add rooms below it."},"Rooms are a flat list on this system: no floors, no room below another.":{de:"Räume sind auf diesem System eine flache Liste: keine Etagen, kein Raum unter einem anderen.",en:"Rooms are a flat list on this system: no floors, no room below another."},Metadata:{de:"Metadaten",en:"Metadata"},Taxonomy:{de:"Taxonomie",en:"Taxonomy"},"New taxonomy":{de:"Neue Taxonomie",en:"New taxonomy"},"No taxonomies yet":{de:"Noch keine Taxonomien",en:"No taxonomies yet"},"{count} taxonomies":{de:{one:"{count} Taxonomie",other:"{count} Taxonomien"},en:{one:"{count} taxonomy",other:"{count} taxonomies"}},"{count} rooms":{de:{one:"{count} Raum",other:"{count} Räume"},en:{one:"{count} room",other:"{count} rooms"}},"{count} functions":{de:{one:"{count} Gewerk",other:"{count} Gewerke"},en:{one:"{count} function",other:"{count} functions"}},"Select a row":{de:"Eine Zeile auswählen",en:"Select a row"},"Select a node":{de:"Einen Knoten auswählen",en:"Select a node"},"Select a taxonomy or a node":{de:"Eine Taxonomie oder einen Knoten auswählen",en:"Select a taxonomy or a node"},"Names and rooms":{de:"Namen und Räume",en:"Names and rooms"},"Where names, rooms and functions are kept":{de:"Wo Namen, Räume und Gewerke gespeichert sind",en:"Where names, rooms and functions are kept"},Store:{de:"Speicher",en:"Store"},Automatic:{de:"Automatisch",en:"Automatic"},"This profile":{de:"Dieses Profil",en:"This profile"},"API token":{de:"API-Token",en:"API token"},"Only needed off the box":{de:"Nur nötig, wenn nicht auf der Box",en:"Only needed off the box"},"From the pairing, or the system's API tokens page":{de:"Aus der Kopplung oder von der API-Token-Seite des Systems",en:"From the pairing, or the system's API tokens page"},"Test connection":{de:"Verbindung testen",en:"Test connection"},"Testing…":{de:"Test läuft…",en:"Testing…"},"Nothing answers at {url} ({reason})":{de:"Unter {url} antwortet nichts ({reason})",en:"Nothing answers at {url} ({reason})"},"macOS may be blocking the local network: allow Homematic Manager under System Settings → Privacy & Security → Local Network, then quit and restart it":{de:"macOS blockiert womöglich das lokale Netzwerk: Homematic Manager unter Systemeinstellungen → Datenschutz & Sicherheit → Lokales Netzwerk erlauben, dann die App beenden und neu starten",en:"macOS may be blocking the local network: allow Homematic Manager under System Settings → Privacy & Security → Local Network, then quit and restart it"},"The certificate of {url} is not trusted ({code}); it can be trusted under Names and rooms":{de:"Dem Zertifikat von {url} wird nicht vertraut ({code}); unter Namen und Räume kann es vertraut werden",en:"The certificate of {url} is not trusted ({code}); it can be trusted under Names and rooms"},"A CCU or OpenCCU at {url}: XML-RPC with callbacks":{de:"Eine CCU oder OpenCCU unter {url}: XML-RPC mit Rückrufen",en:"A CCU or OpenCCU at {url}: XML-RPC with callbacks"},"openccu-lite ({implementation}) at {url}: lite-rpc, no callbacks":{de:"openccu-lite ({implementation}) unter {url}: lite-rpc, keine Rückrufe",en:"openccu-lite ({implementation}) at {url}: lite-rpc, no callbacks"},"no API token: pair the application with the system":{de:"kein API-Token: die Anwendung mit dem System koppeln",en:"no API token: pair the application with the system"},"the API token is refused":{de:"das API-Token wird abgelehnt",en:"the API token is refused"},"the API token reads names only: pair for devices and values":{de:"das API-Token liest nur Namen: für Geräte und Werte koppeln",en:"the API token reads names only: pair for devices and values"},"the API token is accepted":{de:"das API-Token wird akzeptiert",en:"the API token is accepted"},"None: an openccu-lite system does not call a remote client back; the events come from its stream.":{de:"Keiner: ein openccu-lite-System ruft einen entfernten Client nicht zurück; die Ereignisse kommen aus seinem Stream.",en:"None: an openccu-lite system does not call a remote client back; the events come from its stream."},Pair:{de:"Koppeln",en:"Pair"},"Asking the system…":{de:"Das System wird gefragt…",en:"Asking the system…"},"Approve it on the system's Status page: the same code is shown there.":{de:"Auf der Statusseite des Systems bestätigen: dort wird derselbe Code angezeigt.",en:"Approve it on the system's Status page: the same code is shown there."},"Paired: the token is in the field above. Save to connect.":{de:"Gekoppelt: das Token steht im Feld oben. Speichern verbindet.",en:"Paired: the token is in the field above. Save to connect."},"Asks an openccu-lite system for an API token: a code appears here and on its Status page, where an administrator approves it. The token replaces the one above, and the certificate is trusted from then on.":{de:"Fragt ein openccu-lite-System nach einem API-Token: ein Code erscheint hier und auf seiner Statusseite, wo ihn ein Administrator bestätigt. Das Token ersetzt das oben, und dem Zertifikat wird von da an vertraut.",en:"Asks an openccu-lite system for an API token: a code appears here and on its Status page, where an administrator approves it. The token replaces the one above, and the certificate is trusted from then on."},Reachable:{de:"Erreichbar",en:"Reachable"},Unreachable:{de:"Nicht erreichbar",en:"Unreachable"},"Read-only":{de:"Nur lesen",en:"Read-only"},Writable:{de:"Schreibbar",en:"Writable"},ro:{de:"ro",en:"ro"},"default {value}":{de:"Standard {value}",en:"default {value}"},"revision {revision}, {count} objects":{de:"Revision {revision}, {count} Objekte",en:"revision {revision}, {count} objects"},Routers:{de:"Router",en:"Routers"},Routing:{de:"Routing",en:"Routing"},View:{de:"Ansicht",en:"View"},on:{de:"an",en:"on"},off:{de:"aus",en:"off"},unknown:{de:"unbekannt",en:"unknown"},"Reading…":{de:"Wird gelesen…",en:"Reading…"},"Routes for other HmIP devices":{de:"Leitet für andere HmIP-Geräte weiter",en:"Routes for other HmIP devices"},"No device of this interface can route":{de:"Kein Gerät dieser Schnittstelle kann routen",en:"No device of this interface can route"},"{routing} of {capable} route":{de:{one:"{routing} von {capable} routet",other:"{routing} von {capable} routen"},en:{one:"{routing} of {capable} routes",other:"{routing} of {capable} route"}},"Switch routing on":{de:"Routing einschalten",en:"Switch routing on"},"Switch routing off":{de:"Routing ausschalten",en:"Switch routing off"},"Switch routing on?":{de:"Routing einschalten?",en:"Switch routing on?"},"Switch routing off?":{de:"Routing ausschalten?",en:"Switch routing off?"},"Switch on":{de:"Einschalten",en:"Switch on"},"Switch off":{de:"Ausschalten",en:"Switch off"},"The device then forwards frames for other HmIP devices that cannot reach the access point directly. The routes of the network change over the next minutes.":{de:"Das Gerät leitet dann Funktelegramme anderer HmIP-Geräte weiter, die den Access Point nicht direkt erreichen. Die Routen des Netzes ändern sich in den nächsten Minuten.",en:"The device then forwards frames for other HmIP devices that cannot reach the access point directly. The routes of the network change over the next minutes."},"Devices that reach the access point through this one have to find another route; until they do they may be unreachable.":{de:"Geräte, die den Access Point über dieses Gerät erreichen, müssen eine andere Route finden; bis dahin sind sie womöglich nicht erreichbar.",en:"Devices that reach the access point through this one have to find another route; until they do they may be unreachable."},"Writes ROUTER_MODULE_ENABLED = {value} to the MASTER paramset of {address}.":{de:"Schreibt ROUTER_MODULE_ENABLED = {value} in den MASTER-Parametersatz von {address}.",en:"Writes ROUTER_MODULE_ENABLED = {value} to the MASTER paramset of {address}."},"The interface offers no routing table for this device":{de:"Die Schnittstelle bietet für dieses Gerät keine Routing-Tabelle an",en:"The interface offers no routing table for this device"},"Read once from the device itself: costs duty cycle":{de:"Einmal direkt vom Gerät gelesen: kostet Duty Cycle",en:"Read once from the device itself: costs duty cycle"},List:{de:"Liste",en:"List"},Graph:{de:"Graph",en:"Graph"},"Access point":{de:"Access Point",en:"Access point"},Routes:{de:"Routen",en:"Routes"},"Routing graph":{de:"Routing-Graph",en:"Routing graph"},"Read routing tables":{de:"Routing-Tabellen lesen",en:"Read routing tables"},"No router that routes offers its routing table":{de:"Kein routender Router bietet seine Routing-Tabelle an",en:"No router that routes offers its routing table"},"Each table is read from its router over the air, one after the other":{de:"Jede Tabelle wird per Funk von ihrem Router gelesen, eine nach der anderen",en:"Each table is read from its router over the air, one after the other"},"Reading {done} of {total}…":{de:"Lese {done} von {total}…",en:"Reading {done} of {total}…"},"Last read {time}":{de:"Zuletzt gelesen {time}",en:"Last read {time}"},"Not read yet: the graph shows every device directly at the access point.":{de:"Noch nicht gelesen: der Graph zeigt jedes Gerät direkt am Access Point.",en:"Not read yet: the graph shows every device directly at the access point."},"Each router is asked once per read, over the air, with a pause between them; the result is kept until the next read. Entries of battery devices are what the router last heard and may be stale.":{de:"Jeder Router wird pro Lesen einmal per Funk gefragt, mit einer Pause dazwischen; das Ergebnis bleibt bis zum nächsten Lesen. Einträge von Batteriegeräten sind, was der Router zuletzt gehört hat, und können veraltet sein.",en:"Each router is asked once per read, over the air, with a pause between them; the result is kept until the next read. Entries of battery devices are what the router last heard and may be stale."},"Not answered":{de:"Nicht geantwortet",en:"Not answered"},"Route from a table":{de:"Route aus einer Tabelle",en:"Route from a table"},"Assumed: no table lists it":{de:"Angenommen: keine Tabelle nennt sie",en:"Assumed: no table lists it"},"No routes read yet":{de:"Noch keine Routen gelesen",en:"No routes read yet"},"The router did not answer: {error}":{de:"Der Router hat nicht geantwortet: {error}",en:"The router did not answer: {error}"},"Read from the device at {time}; not read again here.":{de:"Am {time} vom Gerät gelesen; hier nicht erneut gelesen.",en:"Read from the device at {time}; not read again here."}},N1={...Ph,...I1},Od=["de","en"],Vl="en",C1={de:"Deutsch",en:"English",tr:"Türkçe"};function Mh(){if(typeof navigator>"u")return[];const r=navigator.languages;return r!==void 0&&r.length>0?r:navigator.language===""?[]:[navigator.language]}function P1(r=Mh()){for(const e of r){const n=e.toLowerCase().split("-")[0],s=Od.find(a=>a===n);if(s!==void 0)return s}return Vl}function M1(r,e=Mh()){return(r===void 0||r==="auto"?void 0:Od.find(s=>s===r))??P1(e)}class O1{#e=C(Vl);#n=c(()=>D1(t(this.#e),{catalogue:N1}));constructor(e=Vl){u(this.#e,e,!0)}get language(){return t(this.#e)}set language(e){u(this.#e,e,!0)}t=(e,n={},s)=>t(this.#n).t(e,n,s);has=e=>t(this.#n).has(e)}var L1=y("<option> </option>"),F1=y('<select class="hmm-select hmm-language svelte-oq8zre"><option> </option><!></select>');function G1(r,e){ct(e,!0);let n=H(e,"language",15,"auto"),s=H(e,"label",3,"Language"),a=H(e,"autoLabel",3,"Browser language"),i=H(e,"onchange",3,void 0),o=H(e,"testId",3,void 0);var l=F1(),f=A(l),p=m(f,!0);f.value=f.__value="auto";var _=d(f);Xe(_,16,()=>Od,k=>k,(k,E)=>{var b=L1(),w=m(b,!0),x={};S(()=>{h(w,C1[E]),x!==(x=E)&&(b.value=(b.__value=x)??"")}),v(k,b)});var g;Xt(l),S(()=>{T(l,"aria-label",s()),T(l,"title",s()),T(l,"data-testid",o()),h(p,a()),g!==(g=n())&&(l.value=(l.__value=g)??"",Bn(l,g))}),re("change",l,k=>{n(k.currentTarget.value),i()?.(n())}),v(r,l),ut()}Et(["change"]);function U1(r,e){const n=e.trim().toLowerCase();return n===""?[...r]:r.filter(s=>[s.label,s.hint,s.description,s.value].some(a=>a!==void 0&&a.toLowerCase().includes(n)))}function Kc(r,e,n){for(let s=e+n;s>=0&&s<r.length;s+=n)if(r[s]?.disabled!==!0)return s;return e}var B1=y('<button type="button" class="hmm-multiselect-link svelte-vbwhwd"> </button> <button type="button" class="hmm-multiselect-link svelte-vbwhwd"> </button>',1),H1=y('<span class="hmm-multiselect-check" aria-hidden="true"> </span>'),V1=y('<span class="hmm-multiselect-hint svelte-vbwhwd"> </span>'),z1=y('<span class="hmm-multiselect-description svelte-vbwhwd"> </span>'),j1=y('<span class="hmm-multiselect-lines svelte-vbwhwd"><span class="hmm-multiselect-line svelte-vbwhwd"><span class="hmm-multiselect-label svelte-vbwhwd"> </span> <!></span> <!></span>'),W1=y("<span> </span>"),K1=y('<li><button type="button" role="option" tabindex="-1"><!> <!></button></li>'),Y1=y('<li class="hmm-multiselect-empty svelte-vbwhwd">—</li>'),q1=y('<div class="hmm-multiselect-menu svelte-vbwhwd"><div class="hmm-multiselect-head svelte-vbwhwd"><input class="hmm-input hmm-multiselect-filter svelte-vbwhwd" type="search" autocomplete="off"/> <!></div> <ul class="hmm-multiselect-list svelte-vbwhwd" role="listbox"><!> <!></ul></div>'),$1=y('<div><button type="button" class="hmm-button hmm-multiselect-button svelte-vbwhwd" aria-haspopup="listbox"><span class="hmm-multiselect-text svelte-vbwhwd"> </span> <span class="hmm-multiselect-arrow" aria-hidden="true">▾</span></button> <!></div>');function bi(r,e){ct(e,!0);let n=H(e,"selected",31,()=>We([])),s=H(e,"multiple",3,!0),a=H(e,"placeholder",3,""),i=H(e,"filterLabel",3,"Filter"),o=H(e,"checkAllLabel",3,"Check all"),l=H(e,"uncheckAllLabel",3,"Uncheck all"),f=H(e,"summary",3,void 0),p=H(e,"disabled",3,!1),_=H(e,"label",3,void 0),g=H(e,"onchange",3,void 0),k=H(e,"testId",3,void 0),E=H(e,"inline",3,!1),b=C(!1),w=C(""),x=C(void 0),D=C(void 0),N=C(void 0),R=C(0);const M=`hmm-multiselect-${Math.random().toString(36).slice(2,8)}`,z=c(()=>new Set(n())),$=c(()=>U1(e.options,t(w))),le=c(()=>t(b)&&t($)[t(R)]?`${M}-${t(R)}`:void 0),fe=c(()=>n().length===0?a():f()?f()(n(),e.options):n().length===1?e.options.find(G=>G.value===n()[0])?.label??n()[0]??"":`${n().length}`);function de(G){n(G),g()?.(G)}function B(){const G=t($).findIndex(Q=>t(z).has(Q.value));u(R,G<0?0:G,!0),u(b,!0)}function oe(G){u(b,!1),G&&t(D)?.focus()}function K(G){if(G.disabled!==!0){if(!s()){de([G.value]),oe(!0);return}de(t(z).has(G.value)?n().filter(Q=>Q!==G.value):[...n(),G.value])}}function X(){de(t($).filter(G=>G.disabled!==!0).map(G=>G.value))}function se(){de([])}function j(G){t(b)&&t(x)&&G.target instanceof Node&&!t(x).contains(G.target)&&u(b,!1)}ot(()=>{t(w),u(R,0)}),ot(()=>{if(!t(b)||!t(N))return;const G=t(N).querySelector(`#${M}-${t(R)}`);typeof G?.scrollIntoView=="function"&&G.scrollIntoView({block:"nearest"})});function ne(G){switch(G.key){case"ArrowDown":G.preventDefault(),u(R,Kc(t($),t(R),1),!0);break;case"ArrowUp":G.preventDefault(),u(R,Kc(t($),t(R),-1),!0);break;case"Enter":{G.preventDefault();const Q=t($)[t(R)];Q&&K(Q);break}case"Escape":G.preventDefault(),G.stopPropagation(),oe(!0);break;case"Tab":oe(!1);break}}function ye(G){!t(b)&&(G.key==="ArrowDown"||G.key==="ArrowUp")&&(G.preventDefault(),B())}function xe(G){G.key==="Escape"&&t(b)&&oe(!0)}function ie(G){return!!G.hint||!!G.description}function Ae(G){G.focus()}var Te=$1();Ir("mousedown",va,j),Ir("keydown",va,xe);let me;var P=A(Te),ce=A(P),be=m(ce,!0);fn(P,G=>u(D,G),()=>t(D));var ee=d(P,2);{var he=G=>{var Q=q1(),q=A(Q),Y=A(q);So(()=>xn(Y,()=>t(w),U=>u(w,U))),Vf(Y,U=>Ae?.(U));var ae=d(Y,2);{var J=U=>{var I=B1(),F=Ne(I),Ee=m(F,!0),Ie=d(F,2),Me=m(Ie,!0);S(()=>{h(Ee,o()),h(Me,l())}),re("click",F,X),re("click",Ie,se),v(U,I)};W(ae,U=>{s()&&U(J)})}var ve=d(q,2),ge=A(ve);Xe(ge,19,()=>t($),U=>U.value,(U,I,F)=>{var Ee=K1(),Ie=A(Ee);let Me;var Ve=A(Ie);{var ze=V=>{var L=H1(),Pe=m(L,!0);S(Ge=>h(Pe,Ge),[()=>t(z).has(t(I).value)?"☑":"☐"]),v(V,L)};W(Ve,V=>{s()&&V(ze)})}var nt=d(Ve,2);{var Ze=V=>{var L=j1(),Pe=A(L),Ge=A(Pe),qe=m(Ge,!0),we=d(Ge,2);{var Ce=pe=>{var De=V1(),Ue=m(De,!0);S(()=>h(Ue,t(I).hint)),v(pe,De)};W(we,pe=>{t(I).hint&&pe(Ce)})}var Oe=d(Pe,2);{var Be=pe=>{var De=z1(),Ue=m(De,!0);S(()=>{T(De,"title",t(I).description),h(Ue,t(I).description)}),v(pe,De)};W(Oe,pe=>{t(I).description&&pe(Be)})}S(pe=>{T(Pe,"title",pe),h(qe,t(I).label)},[()=>[t(I).label,t(I).hint].filter(Boolean).join(" ")]),v(V,L)},_e=c(()=>ie(t(I))),Se=V=>{var L=W1(),Pe=m(L,!0);S(()=>h(Pe,t(I).label)),v(V,L)};W(nt,V=>{t(_e)?V(Ze):V(Se,-1)})}S((V,L,Pe)=>{T(Ie,"id",`${M}-${t(F)}`),Me=_t(Ie,1,"hmm-multiselect-option svelte-vbwhwd",null,Me,{"hmm-multiselect-two-lines":V,"hmm-multiselect-selected":L,"hmm-multiselect-highlight":t(F)===t(R)}),T(Ie,"aria-selected",Pe),Ie.disabled=t(I).disabled===!0},[()=>ie(t(I)),()=>t(z).has(t(I).value),()=>t(z).has(t(I).value)]),re("mousedown",Ie,V=>V.preventDefault()),re("mousemove",Ie,()=>u(R,t(F),!0)),re("click",Ie,()=>K(t(I))),v(U,Ee)});var te=d(ge,2);{var O=U=>{var I=Y1();v(U,I)};W(te,U=>{t($).length===0&&U(O)})}fn(ve,U=>u(N,U),()=>t(N)),S(()=>{T(Y,"placeholder",i()),T(Y,"aria-label",i()),T(Y,"aria-controls",`${M}-list`),T(Y,"aria-activedescendant",t(le)),T(ve,"aria-multiselectable",s()),T(ve,"id",`${M}-list`),T(ve,"aria-label",_())}),re("keydown",Y,ne),v(G,Q)};W(ee,G=>{t(b)&&G(he)})}fn(Te,G=>u(x,G),()=>t(x)),S(()=>{me=_t(Te,1,"hmm-multiselect svelte-vbwhwd",null,me,{"hmm-multiselect-inline":E()}),T(Te,"data-testid",k()),T(P,"aria-expanded",t(b)),T(P,"aria-controls",`${M}-list`),T(P,"aria-label",_()),P.disabled=p(),h(be,t(fe))}),re("click",P,()=>t(b)?oe(!0):B()),re("keydown",P,ye),v(r,Te),ut()}Et(["click","keydown","mousedown","mousemove"]);async function Oh(r,e,n){try{const s=await r.request("rpc.call",e,"getSuppressedServiceMessages",[n]);return Array.isArray(s)?s.filter(a=>typeof a=="string"):[]}catch{return}}async function Lh(r,e,n,s,a){await r.request("rpc.call",e,"suppressServiceMessages",[n,s,a])}function X1(r,e,n){return`suppressServiceMessages(${r}, ${JSON.stringify(e)}, ${n?"true":"false"})`}function _i(r,e=""){return/hmip/i.test(r)||/hmip/i.test(e)}const Fh="macOS may be blocking the local network: allow Homematic Manager under System Settings → Privacy & Security → Local Network, then quit and restart it",Q1=/\b(EHOSTUNREACH|EHOSTDOWN)\b/,Z1=new Set(["timeout","EHOSTUNREACH","EHOSTDOWN"]);function J1(r,e){return r==="darwin"&&e!==void 0&&Q1.test(e)}function eE(r,e){return r==="darwin"&&e!==void 0&&Z1.has(e)}function tE(r,e){return[...new Set([...kb,...e.map(n=>n.name).filter(n=>n!==""),...r])]}function zl(r,e,n){return n!==""&&!Sd(n)&&r.every((s,a)=>a===e||s.name!==n)}function nE(r,e,n,s,a,i){const o=zl(e,n,s),l=o?r.includes(s):i,f=[...r],p=o?f.indexOf(s):-1;return p>=0&&f.splice(p,1),l&&zl(e,n,a)&&!f.includes(a)&&f.splice(p>=0?p:f.length,0,a),{interfaces:f,ticked:l}}function rE(r,e,n){const s=e[n]?.name??"";return zl(e,n,s)?r.filter(a=>a!==s):[...r]}const sE=[9e5,18e5,36e5,144e5,0],jl="default";function aE(r,e){const n=sE.filter(a=>a!==r);e!==void 0&&e!==r&&!n.includes(e)&&n.push(e);const s=n.filter(a=>a>0).sort((a,i)=>a-i);return n.includes(0)?[...s,0]:s}function iE(r,e){return r===void 0||r===e?jl:String(r)}function oE(r){return r>=36e5&&r%36e5===0?{unit:"hours",count:r/36e5}:r%6e4===0?{unit:"minutes",count:r/6e4}:{unit:"seconds",count:Math.round(r/1e3)}}var lE=y('<button type="button" class="hmm-button" data-testid="auto-ack-only-new"> </button> <button type="button" class="hmm-button" data-testid="auto-ack-existing"> </button>',1),dE=y('<p class="hmm-autoack-question svelte-2iq8s1" data-testid="auto-ack-question-text"> </p> <p class="hmm-autoack-help svelte-2iq8s1"> </p>',1);function cE(r,e){ct(e,!0);let n=H(e,"open",15,!1);const a=Ot().i18n.t;function i(o){n(!1),o()}{const o=f=>{var p=lE(),_=Ne(p),g=m(_,!0),k=d(_,2),E=m(k,!0);S((b,w)=>{h(g,b),h(E,w)},[()=>a("Only new ones"),()=>a("Acknowledge existing")]),re("click",_,()=>i(e.onlynew)),re("click",k,()=>i(e.onacknowledge)),v(f,p)};let l=c(()=>a("Acknowledge the messages already in the list?"));En(r,{get title(){return t(l)},width:"480px",get onclose(){return e.oncancel},testId:"auto-ack-question",get open(){return n()},set open(f){n(f)},buttons:o,children:(f,p)=>{var _=dE(),g=Ne(_),k=m(g,!0),E=d(g,2),b=m(E,!0);S((w,x)=>{h(k,w),h(b,x)},[()=>a("{count} STICKY_UNREACH messages are already listed. New ones are acknowledged automatically from now on.",{},e.count),()=>a("Each acknowledgement is a write to the device. Afterwards the list no longer shows which devices were away; the unreach counter in the RSSI tab keeps that.")]),v(f,_)},$$slots:{buttons:!0,default:!0}})}ut()}Et(["click"]);var uE=y('<span class="hmm-config-busy svelte-1xydm3c" role="status" aria-live="polite" data-testid="config-saving"><span class="hmm-config-busy-spinner svelte-1xydm3c" aria-hidden="true" data-testid="config-saving-spinner"></span> </span>'),fE=y('<span class="hmm-config-error svelte-1xydm3c" data-testid="config-error"> </span>'),hE=y('<button type="button" class="hmm-button hmm-config-test svelte-1xydm3c" data-testid="config-test"> </button> <!> <!> <button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="config-save"> </button>',1),mE=y('<small data-testid="config-test-result"> </small>'),ti=y("<option> </option>"),vE=y('<small class="hmm-config-help svelte-1xydm3c" data-testid="config-callback-lite"> </small>'),pE=y('<span class="hmm-config-warning svelte-1xydm3c" role="alert" data-testid="config-callback-ip-warning"><span> </span> <button type="button" class="hmm-button" data-testid="config-callback-ip-use-auto"> </button></span>'),gE=y('<div class="hmm-config-grid svelte-1xydm3c"><label class="hmm-config-row svelte-1xydm3c"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><select class="hmm-select hmm-config-wide svelte-1xydm3c" data-testid="config-callback-ip"><option data-testid="config-callback-ip-auto"> </option><!><!></select> <small class="hmm-config-help svelte-1xydm3c" data-testid="config-callback-ip-hint"> </small> <!></span></label> <label class="hmm-config-row svelte-1xydm3c"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><input class="hmm-input hmm-config-narrow svelte-1xydm3c" type="number" min="0" data-testid="config-callback-xmlrpc-port"/> <small class="hmm-config-help svelte-1xydm3c" data-testid="config-callback-xmlrpc-port-hint"> </small></span></label> <label class="hmm-config-row svelte-1xydm3c"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><input class="hmm-input hmm-config-narrow svelte-1xydm3c" type="number" min="0" data-testid="config-callback-binrpc-port"/> <small class="hmm-config-help svelte-1xydm3c" data-testid="config-callback-binrpc-port-hint"> </small></span></label></div>'),bE=y('<button type="button" class="hmm-button" data-testid="config-trust-ca"> </button>'),_E=y('<div class="hmm-config-row svelte-1xydm3c" data-testid="config-certificate"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><small class="hmm-config-warning svelte-1xydm3c" data-testid="config-certificate-problem"> </small> <small class="hmm-config-help hmm-config-certificate svelte-1xydm3c" data-testid="config-certificate-details"> </small> <span class="hmm-config-buttons svelte-1xydm3c"><button type="button" class="hmm-button" data-testid="config-trust-certificate"> </button> <!></span> <small class="hmm-config-help svelte-1xydm3c"> </small></span></div>'),EE=y('<div class="hmm-config-row svelte-1xydm3c" data-testid="config-trusted"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><small class="hmm-config-help svelte-1xydm3c" data-testid="config-trusted-count"> </small> <button type="button" class="hmm-button" data-testid="config-forget-trust"> </button></span></div>'),yE=y('<button type="button" class="hmm-button" data-testid="config-pairing-cancel"> </button>'),SE=y('<button type="button" class="hmm-button" data-testid="config-pair"> </button>'),wE=y('<span class="hmm-config-buttons svelte-1xydm3c" data-testid="config-pairing"><!></span>'),kE=y('<span class="hmm-config-code svelte-1xydm3c" data-testid="config-pairing-code"> </span> <small class="hmm-config-help svelte-1xydm3c"> </small>',1),AE=y('<small class="hmm-config-help svelte-1xydm3c" data-testid="config-pairing-requesting"> </small>'),TE=y('<small class="hmm-config-note svelte-1xydm3c" data-testid="config-pairing-done"> </small>'),RE=y('<small class="hmm-config-warning svelte-1xydm3c" data-testid="config-pairing-failed"> </small>'),xE=y('<input type="checkbox" disabled="" data-testid="config-rega"/> <small class="hmm-config-help svelte-1xydm3c"> </small>',1),DE=y('<input type="checkbox" data-testid="config-rega"/> <small class="hmm-config-help svelte-1xydm3c"> </small>',1),IE=y('<label class="hmm-config-row svelte-1xydm3c"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><input type="checkbox" data-testid="config-auto-confirm-inbox"/> <small class="hmm-config-help svelte-1xydm3c"> </small></span></label>'),NE=y('<small class="hmm-config-note svelte-1xydm3c" data-testid="config-auto-ack-existing-note"> </small>'),CE=y('<select class="hmm-select" disabled="" data-testid="config-idle"><option> </option></select> <small class="hmm-config-help svelte-1xydm3c" data-testid="config-idle-pinned"> </small>',1),PE=y('<select class="hmm-select" data-testid="config-idle"><option> </option><!></select> <small class="hmm-config-help svelte-1xydm3c"> </small>',1),ME=y('<label class="hmm-config-row svelte-1xydm3c"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><!></span></label>'),OE=y('<span class="hmm-config-problem svelte-1xydm3c"> </span>'),LE=y('<div class="hmm-config-extra-row svelte-1xydm3c"><input class="hmm-input"/> <input class="hmm-input"/> <input class="hmm-input" type="number"/> <select class="hmm-select"><option>xmlrpc</option><option>binrpc</option></select> <input class="hmm-input"/> <button type="button" class="hmm-button">✕</button> <!></div>'),FE=y('<p data-testid="config-host-info" class="svelte-1xydm3c"> <span class="hmm-mono"> </span></p>'),GE=y('<div class="hmm-config svelte-1xydm3c"><div class="hmm-config-columns svelte-1xydm3c"><div class="hmm-config-column svelte-1xydm3c"><section class="hmm-config-section"><h3 class="hmm-config-title svelte-1xydm3c"> </h3> <div class="hmm-config-grid svelte-1xydm3c"><label class="hmm-config-row svelte-1xydm3c"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><input class="hmm-input hmm-config-wide svelte-1xydm3c" data-testid="config-host"/> <small class="hmm-config-help svelte-1xydm3c"> </small> <!></span></label> <div class="hmm-config-row svelte-1xydm3c"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><span class="hmm-config-inline svelte-1xydm3c"><select class="hmm-select hmm-config-wide svelte-1xydm3c" data-testid="config-discovered"><option> </option><!></select> <button type="button" class="hmm-button" data-testid="config-discover"> </button></span> <small class="hmm-config-help svelte-1xydm3c"> </small></span></div> <label class="hmm-config-row svelte-1xydm3c"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><input type="checkbox"/> <small class="hmm-config-help svelte-1xydm3c"> </small></span></label> <label class="hmm-config-row svelte-1xydm3c"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><input type="checkbox"/></span></label> <label class="hmm-config-row svelte-1xydm3c"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><input class="hmm-input hmm-config-wide svelte-1xydm3c"/></span></label> <label class="hmm-config-row svelte-1xydm3c"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><input class="hmm-input hmm-config-wide svelte-1xydm3c" type="password"/></span></label></div></section> <section class="hmm-config-section"><h3 class="hmm-config-title svelte-1xydm3c"> </h3> <!></section> <section class="hmm-config-section" data-testid="config-meta"><h3 class="hmm-config-title svelte-1xydm3c"> </h3> <div class="hmm-config-grid svelte-1xydm3c"><label class="hmm-config-row svelte-1xydm3c"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><select class="hmm-select" data-testid="config-meta-provider"></select> <small class="hmm-config-help svelte-1xydm3c" data-testid="config-meta-state"> </small></span></label> <!> <!> <label class="hmm-config-row svelte-1xydm3c"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><span class="hmm-config-inline svelte-1xydm3c"><input class="hmm-input hmm-config-wide svelte-1xydm3c" type="password" autocomplete="off" data-testid="config-meta-token"/> <!></span> <small class="hmm-config-help svelte-1xydm3c"> </small> <!></span></label></div></section></div> <div class="hmm-config-column svelte-1xydm3c"><section class="hmm-config-section"><h3 class="hmm-config-title svelte-1xydm3c"> </h3> <div class="hmm-config-grid svelte-1xydm3c"><div class="hmm-config-row svelte-1xydm3c"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><!> <small class="hmm-config-help svelte-1xydm3c" data-testid="config-interfaces-hint"> </small></span></div> <label class="hmm-config-row svelte-1xydm3c"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><input type="checkbox"/> <small class="hmm-config-help svelte-1xydm3c"> </small></span></label></div></section> <section class="hmm-config-section"><h3 class="hmm-config-title svelte-1xydm3c">ReGa</h3> <div class="hmm-config-grid svelte-1xydm3c"><label class="hmm-config-row svelte-1xydm3c"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><!></span></label> <!></div></section> <section class="hmm-config-section"><h3 class="hmm-config-title svelte-1xydm3c"> </h3> <div class="hmm-config-grid svelte-1xydm3c"><label class="hmm-config-row svelte-1xydm3c"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><!></span></label> <label class="hmm-config-row svelte-1xydm3c"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><input class="hmm-input hmm-config-narrow svelte-1xydm3c" type="number" min="0"/> <small class="hmm-config-help svelte-1xydm3c"> </small></span></label> <label class="hmm-config-row svelte-1xydm3c"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><input type="checkbox" data-testid="config-auto-ack-unreach"/> <small class="hmm-config-help svelte-1xydm3c"> </small> <!></span></label> <!> <label class="hmm-config-row svelte-1xydm3c"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><input class="hmm-input hmm-config-wide svelte-1xydm3c"/> <small class="hmm-config-help svelte-1xydm3c"> </small></span></label> <label class="hmm-config-row svelte-1xydm3c"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><input type="checkbox" data-testid="config-clear-cache"/> <small class="hmm-config-help svelte-1xydm3c"> </small></span></label></div></section></div></div> <fieldset class="hmm-config-extra svelte-1xydm3c"><legend class="svelte-1xydm3c"> </legend> <!> <button type="button" class="hmm-button" data-testid="config-extra-add"> </button></fieldset> <div class="hmm-config-info svelte-1xydm3c" data-testid="config-info"><p class="svelte-1xydm3c"> <!> &middot; AGPL-3.0-or-later &middot; &copy; 2014-2026 Sebastian "Hobbyquaker" Raff</p> <!> <p class="svelte-1xydm3c">HomeMatic und BidCoS sind eingetragene Warenzeichen der eQ-3 AG.</p></div></div>'),UE=y("<!> <!>",1);function BE(r,e){ct(e,!0);let n=H(e,"open",15,!1);const s=Ot(),a=s.i18n.t;let i=C(void 0),o=C(!1),l=C(!1),f=C(!1),p=C(!1),_=C(!1),g=C(void 0),k=C(""),E=C(!1);const b=c(()=>s.app.config?.connection),w=c(()=>s.app.config?.callbackDefaultPorts),x=c(()=>s.app.config?.callbackPinned);function D(we){return t(x)?.[we]===!0}function N(we){return a("Set at start ({option})",{option:yb(we)})}const R=c(()=>s.app.config?.idleUnsubscribe);function M(we){if(we===0)return a("Never unsubscribe");const{unit:Ce,count:Oe}=oE(we);return Ce==="hours"?a("{count} hours",{},Oe):Ce==="minutes"?a("{count} minutes",{},Oe):a("{count} seconds",{},Oe)}function z(we){t(i)&&(we===jl?delete t(i).idleUnsubscribeMs:t(i).idleUnsubscribeMs=Number(we))}const $=c(()=>t(l)||t(i)===void 0||t(b)===void 0||JSON.stringify(zi(t(i)))!==JSON.stringify(t(b))||t(o)!==(t(b).auth!==void 0));ot(()=>{if(n()&&t(i)===void 0){s.app.saveError="",u(he,!1),u(G,!1);const we=s.app.config?.connection;u(i,we?structuredClone(zi(we)):{host:"",interfaces:[...Ab],autoDetect:!0,extraInterfaces:[],tls:!1,rega:!0,callback:{ip:"",xmlrpcPort:0,binrpcPort:0},language:s.app.languageChoice,writePaceMs:250,rpcLogFolder:""},!0),u(o,t(i).auth!==void 0);const{extraInterfaces:Ce,interfaces:Oe}=t(i);fe=Ce.map(Be=>Oe.includes(Be.name))}if(!n()){u(i,void 0);const we=s.app.pairing?.state;(we==="requesting"||we==="code")&&s.app.cancelPairing(),u(g,void 0),u(k,""),u(E,!1)}});const le=c(()=>tE(t(i)?.interfaces??[],t(i)?.extraInterfaces??[]).map(we=>({value:we,label:we})));let fe=[];const de=c(()=>s.app.config?.localAddresses??[]);let B;ot(()=>{if(!n()||t(i)===void 0){B=void 0;return}const we=t(i).host.trim();if(we===B)return;const Oe=setTimeout(()=>{B=we,s.app.loadCallbackAddresses(we)},B===void 0?0:400);return()=>{clearTimeout(Oe)}});const oe=c(()=>s.app.callbackAddresses!==void 0&&s.app.callbackAddresses.host===t(i)?.host.trim()?s.app.callbackAddresses:void 0),K=c(()=>{if(t(oe)===void 0)return a("Automatic");const{address:we,reason:Ce}=t(oe).auto,Oe={subnet:a("in the CCU's network"),route:a("on the route to the CCU"),loopback:a("the CCU is on this machine"),first:a("no better match")}[Ce];return a("Automatic ({address}, {why})",{address:we,why:Oe})}),X=c(()=>t(oe)===void 0?t(de).map(we=>({address:we,label:we})):t(oe).addresses.map(we=>{const Ce=[...t(oe).hostAddress!==void 0&&!we.inSubnet?[a("not in the CCU's network")]:[],...we.linkLocal===!0?[a("link-local")]:[]];return{address:we.address,label:Ce.length===0?we.address:`${we.address} (${Ce.join(", ")})`}})),se=c(()=>{const we=t(i)?.callback.ip??"";if(we===""||t(oe)===void 0||t(oe).keepsConfigured===!0||D("ip")||t(i)?.local===!0||we==="127.0.0.1")return"";const Ce=t(oe).addresses.find(Oe=>Oe.address===we);return Ce===void 0?a("The callback address {address} is not an address of this machine; {auto} is used instead",{address:we,auto:t(oe).auto.address}):t(oe).hostAddress!==void 0&&!Ce.inSubnet&&we!==t(oe).auto.address?a("The callback address {address} is not in the CCU's network; the CCU may not reach it and send no events",{address:we}):""}),j=c(()=>s.app.config?.discovered??[]),ne=c(()=>s.app.config?.version??""),ye=c(()=>s.meta.manifest),xe=c(()=>s.host.info),ie=c(()=>t(ye)===void 0?"":`${t(ye).sources.map(we=>`${we.name} ${we.version}`).join(", ")} (${t(ye).generatedAt.slice(0,10)})`),Ae=c(()=>t(xe)===void 0?"":`Electron ${t(xe).electron} · Chromium ${t(xe).chrome} · Node ${t(xe).node} · ${t(xe).platform} ${t(xe).arch}`);async function Te(){if(!t(i))return;u(f,!0);const we=te(),Ce=await s.app.save(we,we.autoAckStickyUnreach===!0&&t(G)?{acknowledgeExisting:!0}:void 0);Ce&&t(l)&&(await s.app.clearCaches(),u(l,!1)),u(f,!1),Ce&&(s.app.setLanguage(we.language??"auto"),s.i18n.language=s.app.language,n(!1),await s.start())}async function me(){u(p,!0),await s.app.discover(),u(p,!1)}function P(){if(!t(i))return;const we={name:"",host:"",port:2001,protocol:"xmlrpc",path:""};t(i).extraInterfaces=[...t(i).extraInterfaces,we],fe=[...fe,!0]}function ce(we,Ce){const Oe=t(i)?.extraInterfaces[we];if(!t(i)||!Oe||Oe.name===Ce)return;const Be=nE(t(i).interfaces,t(i).extraInterfaces,we,Oe.name,Ce,fe[we]??!1);fe[we]=Be.ticked,t(i).extraInterfaces[we]={...Oe,name:Ce},t(i).interfaces=Be.interfaces}function be(we){t(i)&&(t(i).interfaces=rE(t(i).interfaces,t(i).extraInterfaces,we),t(i).extraInterfaces=t(i).extraInterfaces.filter((Ce,Oe)=>Oe!==we),fe=fe.filter((Ce,Oe)=>Oe!==we))}const ee=c(()=>s.serviceMessages.messages.filter(we=>we.datapoint==="STICKY_UNREACH"&&we.value!==!1&&!_i(we.interfaceName,s.interfaces.typeOf(we.interfaceName))).length);let he=C(!1),G=C(!1),Q;function q(we){if(!t(i))return;const Ce=t(i).autoAckStickyUnreach;t(i).autoAckStickyUnreach=we,u(G,!1),we&&t(b)?.autoAckStickyUnreach!==!0&&t(ee)>0&&(Q=Ce,u(he,!0))}function Y(){t(i)&&(Q===void 0?delete t(i).autoAckStickyUnreach:t(i).autoAckStickyUnreach=Q),u(G,!1)}const ae=c(()=>s.interfaces.rega?.reason==="openccu-lite"&&t(i)!==void 0&&t(i).host.trim()===(t(b)?.host??"").trim()),J=c(()=>{if(t(i)===void 0||t(i).local===!0)return!1;const we=t(i).host.trim();return we===""?!1:t(g)!==void 0&&t(k)===we?t(g).kind==="openccu-lite":s.interfaces.states.some(Ce=>Ce.lite===!0)&&we===(t(b)?.host??"").trim()}),ve=c(()=>{if(t(i)===void 0||t(g)===void 0||t(k)!==t(i).host.trim())return"";if(t(g).kind==="unreachable"){if(t(g).reason==="certificate"&&t(g).certificate!==void 0)return a("The certificate of {url} is not trusted ({code}); it can be trusted under Names and rooms",{url:t(g).certificate.url,code:t(g).certificate.code});const Ce=a("Nothing answers at {url} ({reason})",{url:t(g).url,reason:t(g).reason??"error"});return eE(t(xe)?.platform,t(g).reason)?`${Ce}. ${a(Fh)}`:Ce}if(t(g).kind==="ccu")return a("A CCU or OpenCCU at {url}: XML-RPC with callbacks",{url:t(g).url});const we={none:()=>a("no API token: pair the application with the system"),refused:()=>a("the API token is refused"),"names-only":()=>a("the API token reads names only: pair for devices and values"),full:()=>a("the API token is accepted")}[t(g).token?.state??"none"]();return`${a("openccu-lite ({implementation}) at {url}: lite-rpc, no callbacks",{implementation:t(g).implementation??"occulited",url:t(g).url})} · ${we}`}),ge=c(()=>s.app.pairing);ot(()=>{t(ge)?.state==="approved"&&t(i)!==void 0&&(t(i).metaToken=t(ge).token,t(ge).fingerprint256!==""&&ze("certificates",t(ge).fingerprint256),u(E,!0),s.app.pairing=void 0)});function te(){const we={...structuredClone(zi(t(i))),...t(o)&&t(i)?.auth?{auth:{...t(i).auth}}:{}};return t(o)||delete we.auth,we}async function O(){if(!t(i))return;u(_,!0);const we=t(i).host.trim(),Ce=await s.app.testConnection(te());u(g,Ce,!0),u(k,we,!0),u(_,!1)}async function U(){t(i)&&(u(E,!1),await s.app.pair(te()))}function I(we){t(i)&&(t(i).autoConfirmRegaInbox=we)}const F={auto:()=>a("Automatic"),local:()=>a("This profile"),occulite:()=>"occulited",rega:()=>"ReGaHSS"},Ee=c(()=>s.taxonomy.state),Ie=c(()=>t(Ee)===void 0?a("No store connected"):[F[t(Ee).provider](),t(Ee).reachable?a("Reachable"):a("Unreachable"),t(Ee).reachable?t(Ee).writable?a("Writable"):a("Read-only"):void 0,a("revision {revision}, {count} objects",{revision:t(Ee).revision,count:t(Ee).objects}),t(Ee).implementation,t(Ee).error].filter(Ce=>Ce!==void 0&&Ce!=="").join(" · ")),Me=c(()=>t(Ee)?.certificate??(t(g)!==void 0&&t(k)===(t(i)?.host.trim()??"")?t(g).certificate:void 0)),Ve=c(()=>(t(i)?.systemTrust?.certificates?.length??0)+(t(i)?.systemTrust?.cas?.length??0));function ze(we,Ce){if(!t(i))return;const Oe=t(i).systemTrust??{},Be=Oe[we]??[];Be.includes(Ce)||(t(i).systemTrust={...Oe,[we]:[...Be,Ce]})}function nt(we,Ce){return t(i)?.systemTrust?.[we]?.includes(Ce)===!0}function Ze(){t(i)&&delete t(i).systemTrust}function _e(we){t(i)&&pc.some(Ce=>Ce===we)&&(t(i).metaProvider=we)}function Se(we){t(i)&&(t(i).metaToken=we)}function V(we){t(i)&&(t(i).language=we)}function L(we,Ce){if(!t(i))return;const Oe=t(i).auth??{user:"",password:""};t(i).auth={...Oe,[we]:Ce}}var Pe=UE(),Ge=Ne(Pe);{const we=Oe=>{var Be=hE(),pe=Ne(Be),De=m(pe,!0),Ue=d(pe,2);{var Fe=$e=>{var at=uE(),lt=d(A(at),1,!0);S(Je=>h(lt,Je),[()=>a("Saving and reconnecting…")]),v($e,at)};W(Ue,$e=>{t(f)&&$e(Fe)})}var Ye=d(Ue,2);{var tt=$e=>{var at=fE(),lt=m(at);S(Je=>h(lt,`${Je??""}: ${s.app.saveError??""}`),[()=>a("Error")]),v($e,at)};W(Ye,$e=>{s.app.saveError!==""&&$e(tt)})}var ft=d(Ye,2),dt=m(ft,!0),ke=d(ft,2),Le=m(ke,!0);S(($e,at,lt,Je)=>{pe.disabled=$e,h(De,at),h(dt,lt),ke.disabled=t(f)||!t($),h(Le,Je)},[()=>t(_)||t(i)===void 0||t(i).host.trim()==="",()=>t(_)?a("Testing…"):a("Test connection"),()=>a("Cancel"),()=>a("Save & Restart")]),re("click",pe,()=>{O()}),re("click",ft,()=>n(!1)),re("click",ke,()=>{Te()}),v(Oe,Be)};let Ce=c(()=>a("Settings"));En(Ge,{get title(){return t(Ce)},width:"960px",testId:"config-dialog",get open(){return n()},set open(Oe){n(Oe)},buttons:we,children:(Oe,Be)=>{var pe=St(),De=Ne(pe);{var Ue=Fe=>{var Ye=GE(),tt=A(Ye),ft=A(tt),dt=A(ft),ke=A(dt),Le=m(ke,!0),$e=d(ke,2),at=A($e),lt=A(at),Je=m(lt,!0),Pt=d(lt,2),Tt=A(Pt),Lt=d(Tt,2),Qt=m(Lt,!0),pn=d(Lt,2);{var wn=Qe=>{var mt=mE(),gt=m(mt,!0);S(()=>{_t(mt,1,yp(t(g)?.reachable===!1||t(g)?.reason==="certificate"?"hmm-config-warning":"hmm-config-help"),"svelte-1xydm3c"),h(gt,t(ve))}),v(Qe,mt)};W(pn,Qe=>{t(ve)!==""&&Qe(wn)})}var tn=d(at,2),bn=A(tn),Pn=m(bn,!0),$n=d(bn,2),Xn=A($n),Zt=A(Xn),Ft=A(Zt),Jt=m(Ft,!0);Ft.value=Ft.__value="";var Qn=d(Ft);Xe(Qn,17,()=>t(j),Qe=>Qe.address,(Qe,mt)=>{var gt=ti(),Yt=m(gt),qt={};S(()=>{h(Yt,`${t(mt).address??""} ${t(mt).serial??""??""} ${t(mt).firmware??""??""}`),qt!==(qt=t(mt).address)&&(gt.value=(gt.__value=qt)??"")}),v(Qe,gt)});var Mn=d(Zt,2),Or=m(Mn,!0),zr=d(Xn,2),Zn=m(zr,!0),jn=d(tn,2),Lr=A(jn),cs=m(Lr,!0),ar=d(Lr,2),Ar=A(ar),jr=d(Ar,2),cr=m(jr,!0),Tr=d(jn,2),ur=A(Tr),ns=m(ur,!0),Fr=d(ur,2),pr=A(Fr),gr=d(Tr,2),ue=A(gr),He=m(ue,!0),Vt=d(ue,2),yn=A(Vt),ir=d(gr,2),it=A(ir),bt=m(it,!0),It=d(it,2),et=A(It),rt=d(dt,2),je=A(rt),vt=m(je,!0),At=d(je,2);{var zt=Qe=>{var mt=vE(),gt=m(mt,!0);S(Yt=>h(gt,Yt),[()=>a("None: an openccu-lite system does not call a remote client back; the events come from its stream.")]),v(Qe,mt)},hn=Qe=>{var mt=gE(),gt=A(mt),Yt=A(gt),qt=m(Yt,!0),xt=d(Yt,2),en=A(xt),Bt=A(en),Nt=m(Bt,!0);Bt.value=Bt.__value="";var an=d(Bt);Xe(an,17,()=>t(X),Nn=>Nn.address,(Nn,xr)=>{var Hr=ti(),ss=m(Hr,!0),hs={};S(()=>{h(ss,t(xr).label),hs!==(hs=t(xr).address)&&(Hr.value=(Hr.__value=hs)??"")}),v(Nn,Hr)});var on=d(an);{var Ln=Nn=>{var xr=ti(),Hr=m(xr,!0),ss={};S(()=>{h(Hr,t(i).callback.ip),ss!==(ss=t(i).callback.ip)&&(xr.value=(xr.__value=ss)??"")}),v(Nn,xr)},Er=c(()=>t(i).callback.ip!==""&&!t(X).some(Nn=>Nn.address===t(i)?.callback.ip));W(on,Nn=>{t(Er)&&Nn(Ln)})}Xt(en);var er=d(en,2),rs=m(er,!0),vn=d(er,2);{var Kn=Nn=>{var xr=pE(),Hr=A(xr),ss=m(Hr,!0),hs=d(Hr,2),Lo=m(hs,!0);S(Fo=>{h(ss,t(se)),h(Lo,Fo)},[()=>a("Use automatic")]),re("click",hs,()=>{t(i)&&(t(i).callback.ip="")}),v(Nn,xr)};W(vn,Nn=>{t(se)!==""&&Nn(Kn)})}var tr=d(gt,2),Sn=A(tr),hr=m(Sn,!0),mr=d(Sn,2),Br=A(mr),Rs=d(Br,2),ea=m(Rs,!0),ta=d(tr,2),_a=A(ta),Co=m(_a,!0),Po=d(_a,2),Za=A(Po),Mo=d(Za,2),Oo=m(Mo,!0);S((Nn,xr,Hr,ss,hs,Lo,Fo,Km,Ym,qm)=>{h(qt,Nn),en.disabled=xr,T(en,"title",Hr),h(Nt,t(K)),h(rs,ss),h(hr,hs),Br.disabled=Lo,h(ea,Fo),h(Co,Km),Za.disabled=Ym,h(Oo,qm)},[()=>a("Homematic Manager Address"),()=>D("ip"),()=>a("Automatic takes this machine's address in the CCU's network, else the one on the route to the CCU"),()=>D("ip")?N("ip"):a("The address the interface processes call back to"),()=>a("Callback XML-RPC port"),()=>D("xmlrpcPort"),()=>D("xmlrpcPort")?N("xmlrpcPort"):t(w)&&t(w).xmlrpc!==0?a("0 uses port {port}, or a free one when it is taken",{port:String(t(w).xmlrpc)}):a("0 picks a free port"),()=>a("Callback BIN-RPC port"),()=>D("binrpcPort"),()=>D("binrpcPort")?N("binrpcPort"):t(w)&&t(w).binrpc!==0?a("0 uses port {port}, or a free one when it is taken",{port:String(t(w).binrpc)}):a("0 picks a free port")]),kr(en,()=>t(i).callback.ip,Nn=>t(i).callback.ip=Nn),xn(Br,()=>t(i).callback.xmlrpcPort,Nn=>t(i).callback.xmlrpcPort=Nn),xn(Za,()=>t(i).callback.binrpcPort,Nn=>t(i).callback.binrpcPort=Nn),v(Qe,mt)};W(At,Qe=>{t(J)?Qe(zt):Qe(hn,-1)})}var Ht=d(rt,2),Mt=A(Ht),kn=m(Mt,!0),An=d(Mt,2),dn=A(An),_n=A(dn),or=m(_n,!0),Gn=d(_n,2),cn=A(Gn);Xe(cn,20,()=>pc,Qe=>Qe,(Qe,mt)=>{var gt=ti(),Yt=m(gt,!0),qt={};S(xt=>{h(Yt,xt),qt!==(qt=mt)&&(gt.value=(gt.__value=qt)??"")},[()=>F[mt]()]),v(Qe,gt)});var jt;Xt(cn);var Rt=d(cn,2),pt=m(Rt,!0),ht=d(dn,2);{var Gt=Qe=>{var mt=_E(),gt=A(mt),Yt=m(gt,!0),qt=d(gt,2),xt=A(qt),en=m(xt,!0),Bt=d(xt,2),Nt=m(Bt),an=d(Bt,2),on=A(an),Ln=m(on,!0),Er=d(on,2);{var er=Kn=>{const tr=c(()=>t(Me).ca);var Sn=bE(),hr=m(Sn,!0);S((mr,Br)=>{Sn.disabled=mr,h(hr,Br)},[()=>nt("cas",t(tr).pem),()=>a("Trust the CA {name}",{name:t(tr).subject})]),re("click",Sn,()=>ze("cas",t(tr).pem)),v(Kn,Sn)};W(Er,Kn=>{t(Me).ca!==void 0&&Kn(er)})}var rs=d(an,2),vn=m(rs,!0);S((Kn,tr,Sn,hr,mr,Br)=>{h(Yt,Kn),h(en,tr),h(Nt,`${Sn??""}${t(Me).certificate.altNames===void 0?"":` · ${t(Me).certificate.altNames}`} \\u00b7 SHA-256
13
- ${t(Me).certificate.fingerprint256??""}`),on.disabled=hr,h(Ln,mr),h(vn,Br)},[()=>a("Certificate"),()=>a("The certificate of {url} is not trusted ({code}). Until it is, whether this is an openccu-lite system is not known.",{url:t(Me).url,code:t(Me).code}),()=>a("{subject}, issued by {issuer}, valid until {validTo}",{subject:t(Me).certificate.subject,issuer:t(Me).certificate.issuer,validTo:t(Me).certificate.validTo}),()=>nt("certificates",t(Me).certificate.fingerprint256),()=>a("Trust this certificate"),()=>a("A trusted certificate holds whatever name the system is reached by, until it is renewed; a trusted CA also covers its renewals, but the name must match the certificate.")]),re("click",on,()=>ze("certificates",t(Me).certificate.fingerprint256)),v(Qe,mt)};W(ht,Qe=>{t(Me)!==void 0&&Qe(Gt)})}var nn=d(ht,2);{var Tn=Qe=>{var mt=EE(),gt=A(mt),Yt=m(gt,!0),qt=d(gt,2),xt=A(qt),en=m(xt,!0),Bt=d(xt,2),Nt=m(Bt,!0);S((an,on,Ln)=>{h(Yt,an),h(en,on),h(Nt,Ln)},[()=>a("Trusted certificates"),()=>a("{count} certificates or CAs of the system are trusted",{},t(Ve)),()=>a("Forget them")]),re("click",Bt,Ze),v(Qe,mt)};W(nn,Qe=>{t(Ve)>0&&Qe(Tn)})}var Dn=d(nn,2),Jn=A(Dn),lr=m(Jn,!0),us=d(Jn,2),Bs=A(us),Rn=A(Bs),gn=d(Rn,2);{var Rr=Qe=>{var mt=wE(),gt=A(mt);{var Yt=xt=>{var en=yE(),Bt=m(en,!0);S(Nt=>h(Bt,Nt),[()=>a("Cancel")]),re("click",en,()=>{s.app.cancelPairing()}),v(xt,en)},qt=xt=>{var en=SE(),Bt=m(en,!0);S((Nt,an,on)=>{en.disabled=Nt,T(en,"title",an),h(Bt,on)},[()=>t(i).host.trim()==="",()=>a("Asks an openccu-lite system for an API token: a code appears here and on its Status page, where an administrator approves it. The token replaces the one above, and the certificate is trusted from then on."),()=>a("Pair")]),re("click",en,()=>{U()}),v(xt,en)};W(gt,xt=>{t(ge)?.state==="requesting"||t(ge)?.state==="code"?xt(Yt):xt(qt,-1)})}v(Qe,mt)};W(gn,Qe=>{t(i).local!==!0&&Qe(Rr)})}var Wr=d(Bs,2),Ts=m(Wr,!0),fs=d(Wr,2);{var Hs=Qe=>{var mt=St(),gt=Ne(mt);{var Yt=Bt=>{var Nt=kE(),an=Ne(Nt),on=m(an,!0),Ln=d(an,2),Er=m(Ln,!0);S(er=>{h(on,t(ge).code),h(Er,er)},[()=>a("Approve it on the system's Status page: the same code is shown there.")]),v(Bt,Nt)},qt=Bt=>{var Nt=AE(),an=m(Nt,!0);S(on=>h(an,on),[()=>a("Asking the system…")]),v(Bt,Nt)},xt=Bt=>{var Nt=TE(),an=m(Nt,!0);S(on=>h(an,on),[()=>a("Paired: the token is in the field above. Save to connect.")]),v(Bt,Nt)},en=Bt=>{var Nt=RE(),an=m(Nt,!0);S(()=>h(an,t(ge).message)),v(Bt,Nt)};W(gt,Bt=>{t(ge)?.state==="code"?Bt(Yt):t(ge)?.state==="requesting"?Bt(qt,1):t(E)?Bt(xt,2):t(ge)?.state==="failed"&&Bt(en,3)})}v(Qe,mt)};W(fs,Qe=>{t(i).local!==!0&&Qe(Hs)})}var ba=d(ft,2),Ni=A(ba),Ya=A(Ni),To=m(Ya,!0),Ro=d(Ya,2),Ci=A(Ro),Z=A(Ci),Re=m(Z,!0),Ke=d(Z,2),st=A(Ke);{let Qe=c(()=>a("Interfaces")),mt=c(()=>a("Filter")),gt=c(()=>a("Check all")),Yt=c(()=>a("Uncheck all")),qt=c(()=>a("Select"));bi(st,{get options(){return t(le)},get label(){return t(Qe)},get filterLabel(){return t(mt)},get checkAllLabel(){return t(gt)},get uncheckAllLabel(){return t(Yt)},summary:xt=>xt.join(", "),get placeholder(){return t(qt)},get selected(){return t(i).interfaces},set selected(xt){t(i).interfaces=xt}})}var Ut=d(st,2),wt=m(Ut,!0),yt=d(Ci,2),In=A(yt),mn=m(In,!0),fr=d(In,2),Wn=A(fr),On=d(Wn,2),Wt=m(On,!0),rn=d(Ni,2),sn=d(A(rn),2),un=A(sn),Kr=A(un),Vs=m(Kr,!0),Yr=d(Kr,2),Gr=A(Yr);{var Qs=Qe=>{var mt=xE(),gt=Ne(mt);Pr(gt,!1);var Yt=d(gt,2),qt=m(Yt,!0);S(xt=>h(qt,xt),[()=>a("Switched off: the system has no ReGaHSS")]),v(Qe,mt)},qa=Qe=>{var mt=DE(),gt=Ne(mt),Yt=d(gt,2),qt=m(Yt,!0);S(xt=>h(qt,xt),[()=>a("ReGa supplies the friendly names")]),vr(gt,()=>t(i).rega,xt=>t(i).rega=xt),v(Qe,mt)};W(Gr,Qe=>{t(ae)?Qe(Qs):Qe(qa,-1)})}var xo=d(un,2);{var Do=Qe=>{var mt=IE(),gt=A(mt),Yt=m(gt,!0),qt=d(gt,2),xt=A(qt),en=d(xt,2),Bt=m(en,!0);S((Nt,an)=>{h(Yt,Nt),xt.disabled=!t(i).rega,Pr(xt,t(i).autoConfirmRegaInbox===!0),h(Bt,an)},[()=>a("Confirm the ReGa inbox automatically"),()=>a("Only possible with ReGa")]),re("change",xt,Nt=>I(Nt.currentTarget.checked)),v(Qe,mt)};W(xo,Qe=>{t(ae)||Qe(Do)})}var Io=d(rn,2),Pi=A(Io),br=m(Pi,!0),Ur=d(Pi,2),dr=A(Ur),Zs=A(dr),$a=m(Zs,!0),Xa=d(Zs,2),Js=A(Xa);{let Qe=c(()=>t(i).language??"auto"),mt=c(()=>a("Language")),gt=c(()=>a("Browser language"));G1(Js,{get language(){return t(Qe)},get label(){return t(mt)},get autoLabel(){return t(gt)},testId:"config-language",onchange:V})}var Mi=d(dr,2),_r=A(Mi),Qa=m(_r,!0),ym=d(_r,2),Fd=A(ym),Sm=d(Fd,2),wm=m(Sm,!0),Gd=d(Mi,2),Ud=A(Gd),km=m(Ud,!0),Am=d(Ud,2),No=A(Am),Bd=d(No,2),Tm=m(Bd,!0),Rm=d(Bd,2);{var xm=Qe=>{var mt=NE(),gt=m(mt,!0);S(Yt=>h(gt,Yt),[()=>a("{count} messages in the list are acknowledged when this is saved",{},t(ee))]),v(Qe,mt)};W(Rm,Qe=>{t(G)&&t(i).autoAckStickyUnreach===!0&&Qe(xm)})}var Hd=d(Gd,2);{var Dm=Qe=>{var mt=ME(),gt=A(mt),Yt=m(gt,!0),qt=d(gt,2),xt=A(qt);{var en=Nt=>{var an=CE(),on=Ne(an),Ln=A(on),Er=m(Ln,!0),er={},rs=d(on,2),vn=m(rs,!0);S((Kn,tr,Sn)=>{h(Er,Kn),er!==(er=tr)&&(Ln.__value=er),h(vn,Sn)},[()=>M(t(R).pinnedMs),()=>M(t(R).pinnedMs),()=>a("Set at start ({option})",{option:"HMM_IDLE_UNSUBSCRIBE / --idle-unsubscribe"})]),v(Nt,an)},Bt=Nt=>{var an=PE(),on=Ne(an),Ln=A(on),Er=m(Ln,!0),er={},rs=d(Ln);Xe(rs,16,()=>aE(t(R).defaultMs,t(i).idleUnsubscribeMs),Sn=>Sn,(Sn,hr)=>{var mr=ti(),Br=m(mr,!0),Rs={};S((ea,ta)=>{h(Br,ea),Rs!==(Rs=ta)&&(mr.value=(mr.__value=Rs)??"")},[()=>M(hr),()=>String(hr)]),v(Sn,mr)});var vn;Xt(on);var Kn=d(on,2),tr=m(Kn,!0);S((Sn,hr,mr)=>{h(Er,Sn),er!==(er=jl)&&(Ln.value=(Ln.__value=er)??""),vn!==(vn=hr)&&(on.value=(on.__value=vn)??"",Bn(on,vn)),h(tr,mr)},[()=>a("Default ({time})",{time:M(t(R).defaultMs)}),()=>iE(t(i).idleUnsubscribeMs,t(R).defaultMs),()=>a("With no page open, the event subscriptions are dropped after this time and taken up again when a page is opened")]),re("change",on,Sn=>z(Sn.currentTarget.value)),v(Nt,an)};W(xt,Nt=>{t(R).pinnedMs!==void 0?Nt(en):Nt(Bt,-1)})}S(Nt=>h(Yt,Nt),[()=>a("Unsubscribe when idle")]),v(Qe,mt)};W(Hd,Qe=>{t(R)!==void 0&&Qe(Dm)})}var Vd=d(Hd,2),zd=A(Vd),Im=m(zd,!0),Nm=d(zd,2),jd=A(Nm),Cm=d(jd,2),Pm=m(Cm,!0),Mm=d(Vd,2),Wd=A(Mm),Om=m(Wd,!0),Lm=d(Wd,2),Kd=A(Lm),Fm=d(Kd,2),Gm=m(Fm,!0),Yd=d(tt,2),qd=A(Yd),Um=m(qd,!0),$d=d(qd,2);Xe($d,17,()=>t(i).extraInterfaces,co,(Qe,mt,gt)=>{const Yt=c(()=>xb(t(mt)));var qt=LE(),xt=A(qt),en=d(xt,2),Bt=d(en,2),Nt=d(Bt,2),an=A(Nt);an.value=an.__value="xmlrpc";var on=d(an);on.value=on.__value="binrpc",Xt(Nt);var Ln=d(Nt,2),Er=d(Ln,2),er=d(Er,2);{var rs=vn=>{var Kn=OE(),tr=m(Kn,!0);S((Sn,hr)=>{T(Kn,"data-testid",Sn),h(tr,hr)},[()=>`config-extra-problem-${String(gt)}`,()=>t(Yt).join(", ")]),v(vn,Kn)};W(er,vn=>{t(Yt).length>0&&vn(rs)})}S((vn,Kn,tr,Sn,hr,mr,Br,Rs,ea,ta,_a)=>{T(qt,"data-testid",vn),T(xt,"placeholder",Kn),T(xt,"aria-label",tr),ln(xt,t(mt).name),T(en,"placeholder",Sn),T(en,"aria-label",hr),T(Bt,"placeholder",mr),T(Bt,"aria-label",Br),T(Nt,"aria-label",Rs),T(Ln,"placeholder",ea),T(Ln,"aria-label",ta),T(Er,"aria-label",_a)},[()=>`config-extra-${String(gt)}`,()=>a("Name"),()=>`${a("Name")} ${String(gt)}`,()=>a("Host"),()=>`${a("Host")} ${String(gt)}`,()=>a("Port"),()=>`${a("Port")} ${String(gt)}`,()=>`${a("Protocol")} ${String(gt)}`,()=>a("Path"),()=>`${a("Path")} ${String(gt)}`,()=>`${a("Remove")} ${String(gt)}`]),re("input",xt,vn=>ce(gt,vn.currentTarget.value)),xn(en,()=>t(mt).host,vn=>t(mt).host=vn),xn(Bt,()=>t(mt).port,vn=>t(mt).port=vn),kr(Nt,()=>t(mt).protocol,vn=>t(mt).protocol=vn),xn(Ln,()=>t(mt).path,vn=>t(mt).path=vn),re("click",Er,()=>be(gt)),v(Qe,qt)});var Xd=d($d,2),Bm=m(Xd,!0),Hm=d(Yd,2),Qd=A(Hm),Zd=A(Qd),Vm=d(Zd);{var zm=Qe=>{var mt=Cn();S(gt=>h(mt,`· ${gt??""}: ${t(ie)??""}`),[()=>a("Device data")]),v(Qe,mt)};W(Vm,Qe=>{t(ie)!==""&&Qe(zm)})}var jm=d(Qd,2);{var Wm=Qe=>{var mt=FE(),gt=A(mt),Yt=d(gt),qt=m(Yt,!0);S(()=>{h(gt,`${t(Ae)??""} · `),h(qt,t(xe)?.logFile??"")}),v(Qe,mt)};W(jm,Qe=>{t(Ae)!==""&&Qe(Wm)})}S((Qe,mt,gt,Yt,qt,xt,en,Bt,Nt,an,on,Ln,Er,er,rs,vn,Kn,tr,Sn,hr,mr,Br,Rs,ea,ta,_a,Co,Po,Za,Mo,Oo,Nn,xr,Hr,ss,hs)=>{h(Le,Qe),h(Je,mt),h(Qt,gt),h(Pn,Yt),T(Zt,"aria-label",qt),Zt.disabled=t(j).length===0,h(Jt,xt),Mn.disabled=t(p),h(Or,en),h(Zn,Bt),h(cs,Nt),h(cr,an),h(ns,on),h(He,Ln),yn.disabled=!t(o),ln(yn,t(i).auth?.user??""),h(bt,Er),et.disabled=!t(o),ln(et,t(i).auth?.password??""),h(vt,er),h(kn,rs),h(or,vn),jt!==(jt=t(i).metaProvider??"auto")&&(cn.value=(cn.__value=jt)??"",Bn(cn,jt)),h(pt,t(Ie)),h(lr,Kn),ln(Rn,t(i).metaToken??""),h(Ts,tr),h(To,Sn),h(Re,hr),h(wt,mr),h(mn,Br),h(Wt,Rs),h(Vs,ea),h(br,ta),h($a,_a),h(Qa,Co),h(wm,Po),h(km,Za),Pr(No,t(i).autoAckStickyUnreach===!0),h(Tm,Mo),h(Im,Oo),h(Pm,Nn),h(Om,xr),h(Gm,Hr),h(Um,ss),h(Bm,hs),h(Zd,`Homematic Manager ${t(ne)??""} `)},[()=>a("Connection"),()=>a("CCU Address"),()=>a("Host name or address of the CCU"),()=>a("Discovered CCUs"),()=>a("Discovered CCUs"),()=>t(p)?a("Searching..."):a("Select"),()=>a("Discover"),()=>a("Searches the network for CCUs over UDP"),()=>a("Use TLS"),()=>a("The encrypted ports of the CCU"),()=>a("Use Auth"),()=>a("Auth User"),()=>a("Auth Pass"),()=>a("Callback"),()=>a("Names and rooms"),()=>a("Store"),()=>a("API token"),()=>t(J)?a("From the pairing, or the system's API tokens page"):a("Only needed off the box"),()=>a("Interfaces"),()=>a("Configured interfaces"),()=>a("An extra interface is connected once it is ticked here"),()=>a("Detect interfaces"),()=>a("Probes the known ports in the background"),()=>a("Use ReGa"),()=>a("Behaviour"),()=>a("Language"),()=>a("RPC Delay (ms)"),()=>a("Shortest pause between two writes"),()=>a("Acknowledge STICKY_UNREACH automatically as they occur"),()=>a("Acknowledging is a write to the device. Switching this on asks once about the messages already in the list."),()=>a("RPC Log Folder"),()=>a("Empty switches the dumps off"),()=>a("Clear Cache"),()=>a("Discards the caches when this is saved"),()=>a("Extra interfaces"),()=>a("Add interface")]),xn(Tt,()=>t(i).host,Qe=>t(i).host=Qe),re("change",Zt,Qe=>{t(i)&&Qe.currentTarget.value!==""&&(t(i).host=Qe.currentTarget.value)}),re("click",Mn,()=>{me()}),vr(Ar,()=>t(i).tls,Qe=>t(i).tls=Qe),vr(pr,()=>t(o),Qe=>u(o,Qe)),re("input",yn,Qe=>L("user",Qe.currentTarget.value)),re("input",et,Qe=>L("password",Qe.currentTarget.value)),re("change",cn,Qe=>_e(Qe.currentTarget.value)),re("input",Rn,Qe=>Se(Qe.currentTarget.value)),vr(Wn,()=>t(i).autoDetect,Qe=>t(i).autoDetect=Qe),xn(Fd,()=>t(i).writePaceMs,Qe=>t(i).writePaceMs=Qe),re("change",No,Qe=>q(Qe.currentTarget.checked)),xn(jd,()=>t(i).rpcLogFolder,Qe=>t(i).rpcLogFolder=Qe),vr(Kd,()=>t(l),Qe=>u(l,Qe)),re("click",Xd,P),v(Fe,Ye)};W(De,Fe=>{t(i)&&Fe(Ue)})}v(Oe,pe)},$$slots:{buttons:!0,default:!0}})}var qe=d(Ge,2);cE(qe,{get count(){return t(ee)},onacknowledge:()=>u(G,!0),onlynew:()=>u(G,!1),oncancel:Y,get open(){return t(he)},set open(we){u(he,we,!0)}}),v(r,Pe),ut()}Et(["click","change","input"]);var HE=y('<div class="hmm-toolbar-trailing svelte-1ld6r3r"><!></div>'),VE=y('<div class="hmm-toolbar svelte-1ld6r3r" role="toolbar"><div class="hmm-toolbar-group svelte-1ld6r3r"><!></div> <!></div>');function zE(r,e){let n=H(e,"label",3,"Toolbar"),s=H(e,"children",3,void 0),a=H(e,"trailing",3,void 0),i=H(e,"testId",3,void 0);var o=VE(),l=A(o),f=A(l);{var p=k=>{var E=St(),b=Ne(E);qs(b,s),v(k,E)};W(f,k=>{s()&&k(p)})}var _=d(l,2);{var g=k=>{var E=HE(),b=A(E);qs(b,a),v(k,E)};W(_,k=>{a()&&k(g)})}S(()=>{T(o,"aria-label",n()),T(o,"data-testid",i())}),v(r,o)}const jE=["address","device_address","channel_address","interface_address","team_address"];function WE(r){if(r.values)return"select";if(r.bitmask)return"flags";switch(r.type){case"bool":case"boolean":return"bool";case"integer":return"number";case"paramset":return"struct";case"RpcStruct[]":return"json";case"mixed":case"variant":return"variant";default:return"text"}}function KE(r){return jE.includes(r.type)}function Jo(r){return(r_(r)??s_(r)).params.map(n=>({name:n.name,type:n.type,kind:WE(n),optional:n.optional??[],...n.values?{options:n.values}:{},...n.bitmask?{options:n.bitmask}:{}}))}function Wl(r){switch(r.kind){case"bool":return!1;case"number":case"flags":return 0;case"struct":return[];case"variant":return{type:"string",value:""};case"select":return Object.keys(r.options??{})[0]??"";default:return""}}function Yc(r){switch(r.type){case"bool":return r.value==="true"||r.value==="1";case"integer":return Number.parseInt(r.value,10)||0;case"double":return Number.parseFloat(r.value)||0;default:return r.value}}function ni(r){return typeof r=="object"?JSON.stringify(r):String(r)}function YE(r,e){switch(r.kind){case"bool":return e===!0||e==="true";case"number":case"flags":return typeof e=="number"?e:Number.parseInt(ni(e),10)||0;case"struct":{const n={};for(const s of Array.isArray(e)?e:[])s.key!==""&&(n[s.key]=Yc(s));return n}case"variant":{const n=e;return Yc({type:n.type,value:n.value})}case"json":return $E(ni(e));case"select":return/^-?\d+$/.test(ni(e))?Number(e):ni(e);default:return ni(e)}}function qE(r,e){return r.map((n,s)=>YE(n,e[s]??Wl(n)))}function $E(r){if(r.trim()==="")return[];try{return JSON.parse(r)}catch{return[]}}function XE(r){if(r.trim()==="")return!0;try{return JSON.parse(r),!0}catch{return!1}}var QE=y("<span> </span>"),ZE=y("<!> <!>",1),qc=y("<option> </option>"),JE=y('<p class="hmm-console-hint svelte-17kjuug"> </p>'),ey=y('<input type="checkbox"/>'),ty=y('<input class="hmm-input" type="number"/>'),ny=y('<select class="hmm-select"></select>'),ry=y('<label><input type="checkbox"/> <span> </span></label>'),sy=y('<div class="hmm-console-flags svelte-17kjuug"><!> <span class="hmm-console-arg-type svelte-17kjuug"> </span></div>'),ay=y('<div class="hmm-console-struct-row svelte-17kjuug"><input class="hmm-input"/> <select class="hmm-select"><option>string</option><option>integer</option><option>double</option><option>bool</option></select> <input class="hmm-input"/> <button type="button" class="hmm-button">✕</button></div>'),iy=y('<div class="hmm-console-struct svelte-17kjuug"><!> <button type="button" class="hmm-button">+</button></div>'),oy=y('<div class="hmm-console-struct-row svelte-17kjuug"><select class="hmm-select"><option>string</option><option>integer</option><option>double</option><option>bool</option></select> <input class="hmm-input"/></div>'),ly=y("<textarea></textarea>"),dy=y('<input class="hmm-input"/>'),cy=y('<span class="hmm-console-arg-type svelte-17kjuug"> </span>'),uy=y('<div class="hmm-console-arg svelte-17kjuug"><label class="hmm-console-arg-label svelte-17kjuug"> <span class="hmm-console-arg-type svelte-17kjuug"> </span></label> <!> <!></div>'),fy=y("<option></option>"),hy=y('<span class="hmm-console-error svelte-17kjuug" data-testid="console-error"> </span>'),my=y('<section class="hmm-console-help svelte-17kjuug" data-testid="console-help-section"><h3 class="svelte-17kjuug"> </h3> <p data-testid="console-help"> </p></section>'),vy=y('<div class="hmm-page svelte-17kjuug"><!> <div class="hmm-console-top svelte-17kjuug"><select class="hmm-select hmm-console-method svelte-17kjuug" data-testid="console-method"><option> </option><!></select> <output class="hmm-console-params hmm-mono svelte-17kjuug" data-testid="console-params"> </output> <button type="button" class="hmm-button" data-testid="console-send-button"> </button></div> <div class="hmm-console-columns svelte-17kjuug"><section class="hmm-console-panel svelte-17kjuug"><h3 class="svelte-17kjuug"> </h3> <!> <!> <datalist id="hmm-console-addresses"></datalist></section> <section class="hmm-console-panel hmm-console-output svelte-17kjuug" data-testid="console-output"><h3 class="svelte-17kjuug"> <!></h3> <textarea class="hmm-console-response hmm-mono svelte-17kjuug" data-testid="console-response" readonly=""></textarea></section></div> <!></div>');function py(r,e){ct(e,!0);const n=Ot(),s=n.i18n.t;let a=C(""),i=C(We([])),o=C(void 0);const l=c(()=>n.app.selectedInterface),f=c(()=>n.console.of(t(l))),p=c(()=>t(a)===""?[]:Jo(t(a))),_=c(()=>n.console.method(t(l),t(a))),g=c(()=>n.devices.index(t(l))?.all().map(te=>te.ADDRESS)??[]),k=c(()=>qE(t(p),t(i)));ot(()=>{n.console.load(t(l))}),ot(()=>{const te=n.console.takeRecall(t(l));te!==void 0&&le(te)});function E(te){u(a,te,!0),u(i,Jo(te).map(O=>Wl(O)),!0),u(o,void 0)}function b(te,O){u(i,t(i).map((U,I)=>I===te?O:U),!0)}function w(te){const O=t(i)[te];return Array.isArray(O)?O:[]}function x(te){const O=t(i)[te];return typeof O=="object"&&!Array.isArray(O)?O:{type:"string",value:""}}function D(te){b(te,[...w(te),{key:"",type:"string",value:""}])}function N(te,O,U){b(te,w(te).map((I,F)=>F===O?{...I,...U}:I))}function R(te,O){b(te,w(te).filter((U,I)=>I!==O))}function M(te,O,U){const I=typeof t(i)[te]=="number"?t(i)[te]:0;b(te,U?I|O:I&~O)}async function z(){t(a)!==""&&u(o,await n.console.call(t(l),t(a),t(k)),!0)}function $(te){return typeof te=="object"&&te!==null&&!Array.isArray(te)}function le(te){u(a,te.method,!0);const O=Jo(te.method);u(i,O.map((U,I)=>{const F=te.params[I];return U.kind==="struct"&&$(F)?Object.entries(F).map(([Ee,Ie])=>({key:Ee,type:typeof Ie=="boolean"?"bool":typeof Ie=="number"?"double":"string",value:String(Ie)})):U.kind==="json"?JSON.stringify(F??[]):U.kind==="bool"?F===!0:U.kind==="number"||U.kind==="flags"?typeof F=="number"?F:0:F===void 0?Wl(U):String(F)}),!0),u(o,void 0)}var fe=vy(),de=A(fe);{const te=U=>{var I=QE(),F=m(I);S(Ee=>h(F,`${t(f).length??""} ${Ee??""}`),[()=>s("Method")]),v(U,I)};let O=c(()=>s("RPC Console"));zE(de,{get label(){return t(O)},trailing:te,children:(U,I)=>{var F=ZE(),Ee=Ne(F);{let Me=c(()=>s("Send request")),Ve=c(()=>t(a)===""||n.console.running),ze=c(()=>s("Please select method"));Dt(Ee,{get title(){return t(Me)},icon:"▸",get disabled(){return t(Ve)},get reason(){return t(ze)},testId:"console-send",onclick:()=>{z()}})}var Ie=d(Ee,2);{let Me=c(()=>s("Clear"));Dt(Ie,{get title(){return t(Me)},icon:"⌫",testId:"console-clear",onclick:()=>{u(o,void 0)}})}v(U,F)},$$slots:{trailing:!0,default:!0}})}var B=d(de,2),oe=A(B),K=A(oe),X=m(K,!0);K.value=K.__value="";var se=d(K);Xe(se,17,()=>t(f),te=>te.name,(te,O)=>{var U=qc(),I=m(U,!0),F={};S(()=>{h(I,t(O).name),F!==(F=t(O).name)&&(U.value=(U.__value=F)??"")}),v(te,U)});var j;Xt(oe);var ne=d(oe,2),ye=m(ne),xe=d(ne,2),ie=m(xe,!0),Ae=d(B,2),Te=A(Ae),me=A(Te),P=m(me,!0),ce=d(me,2);{var be=te=>{var O=JE(),U=m(O,!0);S(I=>h(U,I),[()=>t(a)===""?s("Please select method"):s("No data")]),v(te,O)};W(ce,te=>{t(p).length===0&&te(be)})}var ee=d(ce,2);Xe(ee,19,()=>t(p),te=>te.name,(te,O,U)=>{var I=uy(),F=A(I),Ee=A(F),Ie=d(Ee),Me=m(Ie,!0),Ve=d(F,2);{var ze=we=>{var Ce=ey();S(()=>{T(Ce,"id",`arg-input-${t(O).name}`),Pr(Ce,t(i)[t(U)]===!0)}),re("change",Ce,Oe=>b(t(U),Oe.currentTarget.checked)),v(we,Ce)},nt=we=>{var Ce=ty();S(Oe=>{T(Ce,"id",`arg-input-${t(O).name}`),ln(Ce,Oe)},[()=>String(t(i)[t(U)]??0)]),re("input",Ce,Oe=>b(t(U),Number(Oe.currentTarget.value))),v(we,Ce)},Ze=we=>{var Ce=ny();Xe(Ce,21,()=>Object.entries(t(O).options??{}),([Be,pe])=>Be,(Be,pe)=>{var De=c(()=>ec(t(pe),2));let Ue=()=>t(De)[0],Fe=()=>t(De)[1];var Ye=qc(),tt=m(Ye),ft={};S(()=>{h(tt,`${Fe()??""} (${Ue()??""})`),ft!==(ft=Ue())&&(Ye.value=(Ye.__value=ft)??"")}),v(Be,Ye)});var Oe;Xt(Ce),S(Be=>{T(Ce,"id",`arg-input-${t(O).name}`),Oe!==(Oe=Be)&&(Ce.value=(Ce.__value=Oe)??"",Bn(Ce,Oe))},[()=>String(t(i)[t(U)]??"")]),re("change",Ce,Be=>b(t(U),Be.currentTarget.value)),v(we,Ce)},_e=we=>{var Ce=sy(),Oe=A(Ce);Xe(Oe,17,()=>Object.entries(t(O).options??{}),([De,Ue])=>De,(De,Ue)=>{var Fe=c(()=>ec(t(Ue),2));let Ye=()=>t(Fe)[0],tt=()=>t(Fe)[1];var ft=ry(),dt=A(ft),ke=d(dt,2),Le=m(ke,!0);S($e=>{Pr(dt,$e),h(Le,tt())},[()=>(t(i)[t(U)]&Number(Ye()))!==0]),re("change",dt,$e=>M(t(U),Number(Ye()),$e.currentTarget.checked)),v(De,ft)});var Be=d(Oe,2),pe=m(Be);S(De=>h(pe,`= ${De??""}`),[()=>String(t(i)[t(U)]??0)]),v(we,Ce)},Se=we=>{var Ce=iy(),Oe=A(Ce);Xe(Oe,17,()=>w(t(U)),co,(pe,De,Ue)=>{var Fe=ay(),Ye=A(Fe),tt=d(Ye,2),ft=A(tt);ft.value=ft.__value="string";var dt=d(ft);dt.value=dt.__value="integer";var ke=d(dt);ke.value=ke.__value="double";var Le=d(ke);Le.value=Le.__value="bool";var $e;Xt(tt);var at=d(tt,2),lt=d(at,2);S((Je,Pt,Tt,Lt)=>{T(Ye,"aria-label",Je),ln(Ye,t(De).key),T(tt,"aria-label",Pt),$e!==($e=t(De).type)&&(tt.value=(tt.__value=$e)??"",Bn(tt,$e)),T(at,"aria-label",Tt),ln(at,t(De).value),T(lt,"aria-label",Lt)},[()=>`${t(O).name} ${String(Ue)} key`,()=>`${t(O).name} ${String(Ue)} type`,()=>`${t(O).name} ${String(Ue)} value`,()=>`${t(O).name} ${String(Ue)} remove`]),re("input",Ye,Je=>N(t(U),Ue,{key:Je.currentTarget.value})),re("change",tt,Je=>N(t(U),Ue,{type:Je.currentTarget.value})),re("input",at,Je=>N(t(U),Ue,{value:Je.currentTarget.value})),re("click",lt,()=>R(t(U),Ue)),v(pe,Fe)});var Be=d(Oe,2);S(()=>T(Be,"data-testid",`arg-${t(O).name}-add`)),re("click",Be,()=>D(t(U))),v(we,Ce)},V=we=>{var Ce=oy(),Oe=A(Ce),Be=A(Oe);Be.value=Be.__value="string";var pe=d(Be);pe.value=pe.__value="integer";var De=d(pe);De.value=De.__value="double";var Ue=d(De);Ue.value=Ue.__value="bool";var Fe;Xt(Oe);var Ye=d(Oe,2);S((tt,ft)=>{T(Oe,"aria-label",`${t(O).name} type`),Fe!==(Fe=tt)&&(Oe.value=(Oe.__value=Fe)??"",Bn(Oe,Fe)),T(Ye,"id",`arg-input-${t(O).name}`),ln(Ye,ft)},[()=>x(t(U)).type,()=>x(t(U)).value]),re("change",Oe,tt=>b(t(U),{...x(t(U)),type:tt.currentTarget.value})),re("input",Ye,tt=>b(t(U),{...x(t(U)),value:tt.currentTarget.value})),v(we,Ce)},L=we=>{var Ce=ly();let Oe;S((Be,pe)=>{T(Ce,"id",`arg-input-${t(O).name}`),Oe=_t(Ce,1,"hmm-input hmm-console-json svelte-17kjuug",null,Oe,{"hmm-console-invalid":Be}),ln(Ce,pe)},[()=>!XE(String(t(i)[t(U)]??"")),()=>String(t(i)[t(U)]??"")]),re("input",Ce,Be=>b(t(U),Be.currentTarget.value)),v(we,Ce)},Pe=we=>{var Ce=dy();S((Oe,Be)=>{T(Ce,"id",`arg-input-${t(O).name}`),T(Ce,"list",Oe),ln(Ce,Be)},[()=>KE(t(O))?"hmm-console-addresses":void 0,()=>String(t(i)[t(U)]??"")]),re("input",Ce,Oe=>b(t(U),Oe.currentTarget.value)),v(we,Ce)};W(Ve,we=>{t(O).kind==="bool"?we(ze):t(O).kind==="number"?we(nt,1):t(O).kind==="select"?we(Ze,2):t(O).kind==="flags"?we(_e,3):t(O).kind==="struct"?we(Se,4):t(O).kind==="variant"?we(V,5):t(O).kind==="json"?we(L,6):we(Pe,-1)})}var Ge=d(Ve,2);{var qe=we=>{var Ce=cy(),Oe=m(Ce);S((Be,pe)=>h(Oe,`${Be??""}: ${pe??""}`),[()=>s("optional"),()=>t(O).optional.join(", ")]),v(we,Ce)};W(Ge,we=>{t(O).optional.length>0&&we(qe)})}S(()=>{T(I,"data-testid",`arg-${t(O).name}`),T(F,"for",`arg-input-${t(O).name}`),h(Ee,`${t(O).name??""} `),h(Me,t(O).type)}),v(te,I)});var he=d(ee,2);Xe(he,20,()=>t(g),te=>te,(te,O)=>{var U=fy(),I={};S(()=>{I!==(I=O)&&(U.value=(U.__value=I)??"")}),v(te,U)});var G=d(Te,2),Q=A(G),q=A(Q),Y=d(q);{var ae=te=>{var O=hy(),U=m(O,!0);S(()=>h(U,t(o).error)),v(te,O)};W(Y,te=>{t(o)&&!t(o).ok&&te(ae)})}var J=d(Q,2),ve=d(Ae,2);{var ge=te=>{var O=my(),U=A(O),I=m(U,!0),F=d(U,2),Ee=m(F,!0);S(Ie=>{h(I,t(_).name),h(Ee,Ie)},[()=>t(_).help.replace(/<[^>]*>/g," ").replace(/\s+/g," ").trim()]),v(te,O)};W(ve,te=>{t(_)?.help&&te(ge)})}S((te,O,U,I,F,Ee,Ie,Me)=>{T(oe,"aria-label",te),h(X,O),j!==(j=t(a))&&(oe.value=(oe.__value=j)??"",Bn(oe,j)),h(ye,`${t(a)??""}(${U??""})`),xe.disabled=t(a)===""||n.console.running,h(ie,I),h(P,F),h(q,`${Ee??""} `),T(J,"aria-label",Ie),ln(J,Me)},[()=>s("Please select method"),()=>s("Please select method"),()=>JSON.stringify(t(k)).slice(1,-1),()=>s("Send request"),()=>s("Parameters"),()=>s("Response"),()=>s("Response"),()=>t(o)===void 0?"":t(o).ok?JSON.stringify(t(o).result,void 0,2):`${t(o).error??""}${t(o).faultCode===void 0?"":` (${t(o).faultCode})`}`]),re("change",oe,te=>E(te.currentTarget.value)),re("click",xe,()=>{z()}),v(r,fe),ut()}Et(["change","click","input"]);function gy(r,e,n,s,a=4){const i=Math.max(a,s.width-n.width-a),o=Math.max(a,s.height-n.height-a);return{x:Math.min(Math.max(a,r),i),y:Math.min(Math.max(a,e),o)}}var by=y('<div class="hmm-context-separator svelte-192vamk" role="separator"></div>'),_y=y('<button type="button" role="menuitem"> </button>'),Ey=y('<div class="hmm-context-menu svelte-192vamk" role="menu"></div>');function Ld(r,e){ct(e,!0);let n=H(e,"open",15,!1),s=H(e,"x",3,0),a=H(e,"y",3,0),i=H(e,"onselect",3,void 0),o=H(e,"onclose",3,void 0),l=H(e,"label",3,"Menu"),f=H(e,"testId",3,void 0),p=C(void 0),_=C(We({x:0,y:0}));ot(()=>{if(!n()||!t(p))return;const D=t(p).getBoundingClientRect();u(_,gy(s(),a(),{width:D.width||180,height:D.height||0},{width:window.innerWidth,height:window.innerHeight}),!0),t(p).querySelector("button:not(:disabled)")?.focus()});function g(){n(!1),o()?.()}function k(D){D.disabled===!0||D.separator===!0||(g(),i()?.(D.id))}function E(D){n()&&D.key==="Escape"&&(D.preventDefault(),g())}var b=St();Ir("keydown",va,E),Ir("mousedown",va,D=>{n()&&t(p)&&D.target instanceof Node&&!t(p).contains(D.target)&&g()});var w=Ne(b);{var x=D=>{var N=Ey();let R;Xe(N,21,()=>e.items,M=>M.id,(M,z)=>{var $=St(),le=Ne($);{var fe=B=>{var oe=by();v(B,oe)},de=B=>{var oe=_y();let K;var X=m(oe,!0);S(()=>{K=_t(oe,1,"hmm-context-item svelte-192vamk",null,K,{"hmm-context-danger":t(z).danger===!0}),oe.disabled=t(z).disabled===!0,h(X,t(z).label??t(z).id)}),re("click",oe,()=>k(t(z))),v(B,oe)};W(le,B=>{t(z).separator===!0?B(fe):B(de,-1)})}v(M,$)}),fn(N,M=>u(p,M),()=>t(p)),S(()=>{T(N,"aria-label",l()),T(N,"data-testid",f()),R=Un(N,"",R,{left:`${t(_).x}px`,top:`${t(_).y}px`})}),v(D,N)};W(w,D=>{n()&&D(x)})}v(r,b),ut()}Et(["click"]);function yy(){return globalThis.navigator?.clipboard}async function Sy(r,e={}){const n=yy();if(typeof n?.writeText=="function")try{return await n.writeText(r),"clipboard"}catch{}return wy(r,e.host)?"selection":"failed"}function wy(r,e=document.body){const n=e.ownerDocument,s=n.activeElement,a=n.createElement("textarea");a.value=r,a.readOnly=!0,a.tabIndex=-1,a.setAttribute("aria-hidden","true"),Object.assign(a.style,{position:"fixed",top:"0",left:"0",width:"1px",height:"1px",padding:"0",border:"0",opacity:"0",pointerEvents:"none"}),e.append(a);try{return a.focus({preventScroll:!0}),a.select(),a.setSelectionRange(0,r.length),n.execCommand("copy")}catch{return!1}finally{a.remove(),(s instanceof HTMLElement||s instanceof SVGElement)&&s.focus({preventScroll:!0})}}const ky="data-measure-skip";function Ay(r){return r.scrollWidth>r.clientWidth}function Ty(r){return(r.innerText||r.textContent||"").replace(/\s+/g," ").trim()}function Ry(r,e){if(e.length===0)return[];const n=document.createElement("div");n.setAttribute("aria-hidden","true"),Object.assign(n.style,{position:"absolute",left:"0",top:"0",width:"max-content",height:"0",overflow:"visible",visibility:"hidden",pointerEvents:"none"});const s=e.map(a=>{const i=getComputedStyle(a),o=a.cloneNode(!0);for(const l of o.querySelectorAll(`[${ky}]`))l.remove();for(const l of[o,...o.querySelectorAll("[data-testid], [id]")])l.removeAttribute("data-testid"),l.removeAttribute("id");return Object.assign(o.style,{display:"block",position:"static",width:"max-content",minWidth:"0",maxWidth:"none",height:"auto",overflow:"visible",fontFamily:i.fontFamily,fontSize:i.fontSize,fontStyle:i.fontStyle,fontWeight:i.fontWeight,letterSpacing:i.letterSpacing}),n.append(o),o});r.append(n);try{return s.map(a=>a.getBoundingClientRect().width)}finally{n.remove()}}const Ei=40,xy=1200,Dy=600,$c=10;function yi(r,e=Ei,n=xy){return Number.isFinite(r)?Math.round(Math.min(Math.max(r,e),Math.max(e,n))):e}function Iy(r,e=Ei,n=Dy){const s=r.filter(a=>Number.isFinite(a)&&a>0);if(s.length!==0)return yi(Math.ceil(Math.max(...s)),e,n)}function Ui(r){return r.fixed!==!0&&r.hidden!==!0}function Xc(r){return r.keepMinWidth!==!0||r.minWidth===void 0?Ei:Math.max(Ei,Math.round(r.minWidth))}function Ny(r){const e={};if(r===null||typeof r!="object"||Array.isArray(r))return e;for(const[n,s]of Object.entries(r))typeof s=="number"&&Number.isFinite(s)&&(e[n]=yi(s));return e}const Cy=30,Gh=20,Ba=Gh+12,Py=22,My=Py+12;function Kl(r,e){if(e.value)return e.value(r);const n=r[e.key];if(n!=null)return typeof n=="string"||typeof n=="number"||typeof n=="boolean"?n:String(n)}function ui(r,e){const n=Kl(r,e);return n===void 0?"":String(n)}function Zi(r){return r.sortable!==!1&&r.hidden!==!0}function Uh(r){return r.filterable!==!1&&r.hidden!==!0}function Qc(r,e){return r.toLowerCase().includes(e.toLowerCase())}function Zc(r,e,n,s){for(const a of e){const i=s[a.key];if(i!==void 0&&i!==""&&!Qc(ui(r,a),i))return!1}return n.trim()===""?!0:e.filter(a=>Uh(a)).some(a=>Qc(ui(r,a),n))}function Oy(r,e){const n=r===void 0||r==="",s=e===void 0||e==="";return n||s?n&&s?0:n?1:-1:typeof r=="number"&&typeof e=="number"?r-e:typeof r=="boolean"&&typeof e=="boolean"?Number(r)-Number(e):String(r).localeCompare(String(e),void 0,{numeric:!0,sensitivity:"base"})}function Ly(r){const{rows:e,columns:n,getId:s,children:a,expanded:i}=r,o=r.globalFilter??"",l=r.columnFilters??{},f=r.subColumns??n,_=o.trim()!==""||Object.values(l).some(E=>E!=="")?e.filter(E=>Zc(E,n,o,l)||(a?.(E)??[]).some(b=>Zc(b,f,o,l))):[...e],g=r.sort;if(g){const E=n.find(b=>b.key===g.key);if(E&&Zi(E)){const b=g.direction==="asc"?1:-1;_.sort((w,x)=>b*Oy(Kl(w,E),Kl(x,E)))}}const k=[];for(const E of _){const b=s(E),w=a?.(E)??[],x=i.has(b);if(k.push({id:b,key:b,row:E,depth:0,hasChildren:w.length>0,expanded:x,rootId:b,kind:"row"}),!!x){r.subHeader===!0&&w.length>0&&k.push({id:`${b}::header`,key:`${b}::header`,row:E,depth:1,hasChildren:!1,expanded:!1,rootId:b,kind:"header"});for(const D of w)k.push({id:s(D),key:`${b}/${s(D)}`,row:D,depth:1,hasChildren:!1,expanded:!1,rootId:b,kind:"row"})}}return k}function Fy(r,e,n,s,a=6){if(r===0||s<=0)return{start:0,end:0};const i=Math.max(1,Math.ceil((n<=0?s:n)/s)),o=Math.max(0,Math.min(r-1,Math.floor(e/s)-a)),l=Math.min(r,o+i+a*2);return{start:o,end:l}}const Yl=56,Jc=120,eu=22;function Gy(r,e){if(r.width===void 0&&e===void 0)return`minmax(${Yl}px, ${Jc}fr)`;if(r.fixed&&r.width!==void 0)return`${r.width}px`;if(e!==void 0)return`${e}px`;const n=r.width??Jc;return`minmax(${Bh(r)}px, ${n}fr)`}function Bh(r){return r.minWidth!==void 0?r.minWidth:Math.min(r.width??Yl,Yl)}function Uy(r,e){return r.fixed&&r.width!==void 0?r.width:e!==void 0?e:Bh(r)}function tu(r){return{key:r.key,width:r.width,fixed:r.fixed===!0,...r.minWidth===void 0?{}:{minWidth:r.minWidth},...r.keepMinWidth===!0&&r.minWidth!==void 0?{keepMinWidth:!0}:{}}}function By(r,e){return e===void 0||r.keepMinWidth!==!0||r.minWidth===void 0?e:Math.max(e,r.minWidth)}function Hh(r,e={}){const n=r.expander?[`${eu}px`]:[];let s=r.expander?eu:0;for(const a of r.tracks){const i=a.fixed?void 0:By(a,e[a.key]);n.push(Gy(a,i)),s+=Uy(a,i)}return{template:n.join(" "),minWidth:s}}function Hy(r,e,n){const s=r.filter(f=>f.hidden!==!0).map(f=>tu(f)),a=[];let i=0;for(const f of e??[]){if(f.hidden===!0)continue;const p=s.findIndex(_=>_.key===f.key);if(p>=0){i=p+1;continue}s.splice(i,0,tu(f)),a.push(f.key),i+=1}const o=n?2:1,l={};for(const[f,p]of s.entries())l[p.key]=f+o;return{template:Hh({tracks:s,expander:n}).template,track:l,tracks:s,expander:n,subKeys:a}}function Vy(r,e,n){const s=new Set(r.subKeys),a={};for(const[i,o]of Object.entries(e))s.has(i)||(a[i]=o);for(const[i,o]of Object.entries(n))s.has(i)&&(a[i]=o);return a}function zy(r,e,n){const s=new Set(e.filter(i=>i.hidden!==!0).map(i=>i.key)),a=[];for(const i of r){const o=i.columns.filter(l=>s.has(l)).map(l=>n.track[l]).filter(l=>l!==void 0);o.length!==0&&a.push({key:i.key,label:i.label,sublabel:i.sublabel,start:Math.min(...o),end:Math.max(...o)+1})}return a}function jy(r,e){return r.trim()!==""||Object.values(e).some(n=>n.trim()!=="")}function Wy(r,e,n){const s=r.findIndex(l=>l.id===e),a=r.findIndex(l=>l.id===n);if(s===-1||a===-1)return a===-1?[]:[n];const[i,o]=s<=a?[s,a]:[a,s];return r.slice(i,o+1).filter(l=>l.kind!=="header").map(l=>l.id)}function Ky(r,e,n,s,a){if(a.shift===!0&&n!==void 0)return{selected:Wy(r,n,s),anchorId:n};if(a.ctrl===!0){const i=new Set(e);return i.has(s)?i.delete(s):i.add(s),{selected:[...i],anchorId:s}}return{selected:[s],anchorId:s}}var Yy=y('<div role="separator" aria-orientation="vertical" tabindex="0" data-measure-skip=""></div>'),qy=y('<span class="hmm-table-caption svelte-16k18c8"> </span>'),$y=y('<div class="hmm-table-actions svelte-16k18c8" role="toolbar"><!></div>'),nu=y('<span class="hmm-table-count svelte-16k18c8"> </span>'),Xy=y('<div class="hmm-table-band svelte-16k18c8"><!> <!> <div class="hmm-table-trailing svelte-16k18c8"><!> <!></div></div>'),Qy=y('<span class="hmm-th-group-sub svelte-16k18c8"> </span>'),Zy=y('<div class="hmm-th hmm-th-group svelte-16k18c8" role="columnheader"><span class="hmm-th-group-label"> </span> <!></div>'),Jy=y('<div class="hmm-table-groups svelte-16k18c8" role="row"></div>'),eS=y('<div class="hmm-th hmm-th-expander svelte-16k18c8" role="columnheader"></div>'),tS=y('<span class="hmm-th-sort svelte-16k18c8" aria-hidden="true"> </span>'),nS=y('<button type="button" class="hmm-th-button svelte-16k18c8"><span class="hmm-th-label"> </span> <!></button>'),rS=y('<span class="hmm-th-label"> </span>'),sS=y('<div class="hmm-th svelte-16k18c8" role="columnheader"><!> <!></div>'),aS=y('<div class="hmm-th hmm-th-sub-only svelte-16k18c8"><!></div>'),iS=y('<div class="hmm-tf-spacer"></div>'),oS=y('<input class="hmm-input hmm-tf-input svelte-16k18c8" type="search"/>'),lS=y('<div class="hmm-tf svelte-16k18c8"><!></div>'),dS=y('<div class="hmm-table-filters svelte-16k18c8"><!> <!></div>'),cS=y('<span> </span> <button type="button" class="hmm-button hmm-table-clear svelte-16k18c8"> </button>',1),uS=y('<div class="hmm-table-empty svelte-16k18c8"><!></div>'),fS=y('<button type="button" class="hmm-expander svelte-16k18c8"> </button>'),hS=y('<div class="hmm-td hmm-td-expander svelte-16k18c8"><!></div>'),mS=y(" <!>",1),vS=Mr('<path d="M1.5 5.2 4 7.7 8.5 2.3"></path>'),pS=Mr('<rect x="3.5" y="3.5" width="5.5" height="5.5" rx="1"></rect><path d="M6.5 1.5h-4a1 1 0 0 0-1 1v4"></path>',1),gS=y('<button type="button" data-measure-skip=""><svg class="hmm-copy-icon svelte-16k18c8" viewBox="0 0 10 10" aria-hidden="true"><!></svg></button>'),bS=y('<div role="gridcell"><!> <!></div>'),_S=y('<div role="row" tabindex="-1"><!> <!></div>'),ES=y('<div class="hmm-table-spacer svelte-16k18c8"><div class="hmm-table-rows svelte-16k18c8"></div></div>'),yS=y('<div class="hmm-table svelte-16k18c8"><!> <div role="grid" tabindex="0"><!> <div class="hmm-table-head svelte-16k18c8" role="row"><!> <!> <!></div> <!> <div class="hmm-table-body svelte-16k18c8"><!></div></div> <!> <!> <span class="hmm-table-announce svelte-16k18c8" role="status" aria-live="polite"> </span> <!></div>');function Fs(r,e){ct(e,!0);const n=(Z,Re=Hn,Ke=Hn)=>{var st=Yy();let Ut;S(wt=>{Ut=_t(st,1,"hmm-th-resize svelte-16k18c8",null,Ut,{"hmm-th-resize-active":t(Mn)===Re().key}),T(st,"aria-label",wt),T(st,"data-testid",Ke())},[()=>ie("Resize column {column}",{column:Re().label})]),re("pointerdown",st,wt=>zr(wt,Re().key)),re("pointermove",st,Zn),re("pointerup",st,wt=>Lr(wt,Re())),Ir("pointercancel",st,jn),Ir("lostpointercapture",st,jn),re("dblclick",st,wt=>{wt.preventDefault(),Qn||Ft(Re().key)}),re("keydown",st,wt=>cs(wt,Re().key)),v(Z,st)};let s=H(e,"columnGroups",3,void 0),a=H(e,"scope",3,void 0),i=H(e,"subRows",3,void 0),o=H(e,"subColumns",3,void 0),l=H(e,"rowHeight",3,Cy),f=H(e,"height",3,void 0),p=H(e,"overscan",3,6),_=H(e,"columnFilterRow",3,!0),g=H(e,"caption",3,void 0),k=H(e,"emptyText",3,""),E=H(e,"noMatchText",3,"No row matches the filter"),b=H(e,"clearFilterLabel",3,"Clear filter"),w=H(e,"showingText",3,void 0),x=H(e,"filterLabel",3,"Filter"),D=H(e,"toolbar",3,void 0),N=H(e,"toolbarLabel",3,void 0),R=H(e,"status",3,void 0),M=H(e,"countText",3,void 0),z=H(e,"selected",31,()=>We([])),$=H(e,"expanded",31,()=>We([])),le=H(e,"filter",15,""),fe=H(e,"sort",15,void 0),de=H(e,"onactivate",3,void 0),B=H(e,"onrowcontextmenu",3,void 0),oe=H(e,"renameColumn",3,"name"),K=H(e,"canRename",3,void 0),X=H(e,"onrename",3,void 0),se=H(e,"cell",3,void 0),j=H(e,"tableId",3,void 0),ne=H(e,"subTableId",3,void 0),ye=H(e,"testId",3,void 0);const xe=Op();function ie(Z,Re={}){return xe?.t===void 0?Lp(Z,Re):xe.t(Z,Re)}let Ae=C(We({})),Te=C(0),me=C(0),P=C(0),ce=C(0),be=C(void 0),ee=C(void 0),he=C(void 0),G=C(void 0),Q=C(void 0),q=C(void 0);const Y=c(()=>e.columns.filter(Z=>Z.hidden!==!0)),ae=c(()=>(o()??e.columns).filter(Z=>Z.hidden!==!0)),J=c(()=>i()!==void 0),ve=c(()=>Hy(e.columns,o(),t(J)));let ge=C({}),te=C({}),O=C(void 0);const U=c(()=>{const Z=xe?.columnWidths;return j()===void 0||Z===void 0?t(ge):Z.widths(j())}),I=c(()=>{const Z=xe?.columnWidths;return ne()===void 0||Z===void 0?t(te):Z.widths(ne())}),F=c(()=>Object.keys(t(U)).length>0),Ee=c(()=>Object.keys(t(I)).length>0),Ie=c(()=>new Set(t(ve).subKeys)),Me=c(()=>t(ae).filter(Z=>t(Ie).has(Z.key)&&Ui(Z))),Ve=c(()=>{const Z=Vy(t(ve),t(U),t(I));return Hh(t(ve),t(O)===void 0?Z:{...Z,[t(O).key]:t(O).width})}),ze=c(()=>zy(s()??[],e.columns,t(ve))),nt=c(()=>new Set($())),Ze=c(()=>g()!==void 0||D()!==void 0||R()!==void 0||M()!==void 0),_e=c(()=>new Set(z())),Se=c(()=>Ly({rows:e.rows,columns:e.columns,getId:e.getId,children:i(),expanded:t(nt),globalFilter:le(),columnFilters:t(Ae),sort:fe(),subColumns:o(),subHeader:o()!==void 0})),V=c(()=>f()??t(me)),L=c(()=>Fy(t(Se).length,t(Te),t(V),l(),p())),Pe=c(()=>t(Se).slice(t(L).start,t(L).end)),Ge=c(()=>jy(le(),t(Ae))),qe=c(()=>t(Se).filter(Z=>Z.depth===0).length),we=c(()=>t(Ge)&&e.rows.length>0);function Ce(){u(Ae,{},!0)}let Oe=sr(()=>a());ot(()=>{a()!==Oe&&(Oe=a(),Ce(),le(""),t(ee)&&(t(ee).scrollTop=0,u(Te,0)))}),ot(()=>{const Z=t(ee);if(!Z)return;const Re=()=>{f()===void 0&&u(me,Z.clientHeight,!0),u(ce,Z.offsetWidth-Z.clientWidth)};Re();const Ke=new ResizeObserver(Re);return Ke.observe(Z),()=>{Ke.disconnect()}});function Be(Z){u(Te,Z.scrollTop,!0);const Re=Z.scrollLeft===0?"":`translateX(${String(-Z.scrollLeft)}px)`;for(const Ke of[t(G),t(Q),t(q)])Ke&&Ke.style.transform!==Re&&(Ke.style.transform=Re);vt(),An()}function pe(Z){Zi(Z)&&(fe()?.key!==Z.key?fe({key:Z.key,direction:"asc"}):fe().direction==="asc"?fe({key:Z.key,direction:"desc"}):fe(void 0))}function De(Z){$(t(nt).has(Z)?$().filter(Re=>Re!==Z):[...$(),Z])}function Ue(Z,Re){if(Z.kind==="header")return;const Ke=Ky(t(Se),z(),t(be),Z.id,Re);z(Ke.selected),u(be,Ke.anchorId,!0),u(P,t(Se).findIndex(st=>st.id===Z.id),!0)}function Fe(Z,Re){Ue(Z,{ctrl:Re.ctrlKey||Re.metaKey,shift:Re.shiftKey})}function Ye(Z,Re){!B()||Z.kind==="header"||(Re.preventDefault(),t(_e).has(Z.id)||Ue(Z,{}),B()(Z.row,Re))}const tt='button, input, select, textarea, a[href], [contenteditable="true"]';function ft(Z){return Z.target instanceof Element&&Z.target.closest(tt)!==null}const dt='input, select, textarea, [contenteditable="true"]',ke=new Set(["ArrowDown","ArrowUp","ArrowLeft","ArrowRight","Home","End"]);function Le(Z){return Z.target instanceof Element&&Z.target.closest(dt)!==null}function $e(Z){return Z?.kind==="row"&&X()!==void 0&&(K()?.(Z.row)??!0)}function at(Z,Re){if(Z.kind!=="row")return;const Ke=lt(Re)?.dataset.columnKey;if(Ke===oe()&&!ft(Re)&&$e(Z)){window.getSelection()?.removeAllRanges(),X()?.(Z.row);return}const st=(Z.depth>0?t(ae):t(Y)).find(Ut=>Ut.key===Ke);if(st?.onactivate!==void 0&&!ft(Re)){window.getSelection()?.removeAllRanges(),st.onactivate(Z.row);return}de()?.(Z.row)}function lt(Z){if(!(Z.target instanceof Element))return null;const Re=Z.target.closest("[data-column-key]");if(Re!==null)return Re;const Ke=Z.target.closest("[data-row-id]");if(Ke===null)return null;for(const st of Ke.querySelectorAll("[data-column-key]")){const Ut=st.getBoundingClientRect();if(Z.clientX>=Ut.left&&Z.clientX<Ut.right)return st}return null}function Je(Z,Re){!$e(Z)||!t(_e).has(Z.id)||ft(Re)||(Re.preventDefault(),X()?.(Z.row))}function Pt(){const Z=t(ee);if(!Z)return;const Re=t(P)*l(),Ke=t(V)===0?Z.clientHeight:t(V);Re<Z.scrollTop?Z.scrollTop=Re:Re+l()>Z.scrollTop+Ke&&(Z.scrollTop=Re+l()-Ke)}function Tt(Z,Re){if(t(Se).length===0)return;const Ke=Math.min(t(Se).length-1,Math.max(0,t(P)+Z)),st=t(Se)[Ke];st&&(u(P,Ke,!0),Ue(st,{shift:Re}),Pt())}function Lt(Z){if(ke.has(Z.key)&&Le(Z))return;const Re=t(Se)[t(P)];switch(Z.key){case"ArrowDown":Z.preventDefault(),Tt(1,Z.shiftKey);break;case"ArrowUp":Z.preventDefault(),Tt(-1,Z.shiftKey);break;case"Home":Z.preventDefault(),Tt(-t(Se).length,Z.shiftKey);break;case"End":Z.preventDefault(),Tt(t(Se).length,Z.shiftKey);break;case"ArrowRight":Re?.hasChildren===!0&&!Re.expanded&&(Z.preventDefault(),De(Re.id));break;case"ArrowLeft":Re?.hasChildren===!0&&Re.expanded&&(Z.preventDefault(),De(Re.id));break;case"Enter":if(ft(Z))break;Re&&de()?(Z.preventDefault(),de()(Re.row)):Je(Re,Z);break;case"F2":Je(Re,Z);break;case" ":Re&&!ft(Z)&&(Z.preventDefault(),Ue(Re,{ctrl:!0}));break;case"Escape":je();break}}const Qt=2,pn=4,wn=14;function tn(Z){return t(Ie).has(Z)?"sub":"table"}function bn(Z){const Re=(tn(Z)==="sub"?t(ae):t(Y)).find(Ke=>Ke.key===Z);return Re===void 0?Ei:Xc(Re)}function Pn(Z,Re){const Ke=xe?.columnWidths,st=tn(Z),Ut=st==="sub"?ne():j(),wt=yi(Re,bn(Z));Ut!==void 0&&Ke!==void 0?Ke.set(Ut,Z,wt):st==="sub"?u(te,{...t(te),[Z]:wt}):u(ge,{...t(ge),[Z]:wt})}function $n(Z){const Re=xe?.columnWidths,Ke=Z==="sub"?ne():j();Ke!==void 0&&Re!==void 0?Re.reset(Ke):Z==="sub"?u(te,{}):u(ge,{})}function Xn(Z,Re){if(Z===void 0||tn(Z)!==Re)return;const Ke=t(Re==="sub"?ae:Y).find(st=>st.key===Z);return Ke!==void 0&&Ui(Ke)?Ke:void 0}function Zt(Z){const Re=`[data-column-key="${CSS.escape(Z)}"]`;return(tn(Z)==="sub"?t(ee)?.querySelector(`.hmm-tr-subhead ${Re}`):t(Q)?.querySelector(Re))??void 0}function Ft(Z){const Re=tn(Z),Ke=Xn(Z,Re),st=Zt(Z);if(!t(he)||!Ke||!st)return;const Ut=t(ee)?[...t(ee).querySelectorAll(`.hmm-td[data-column-key="${CSS.escape(Z)}"]`)]:[],[wt=0,...yt]=Ry(t(he),[st,...Ut]),In=Re==="table"&&Zi(Ke)&&fe()?.key!==Z?wt+wn:wt,mn=Iy([In,...yt],Xc(Ke));mn!==void 0&&Pn(Z,mn)}let Jt,Qn=!1,Mn=C(void 0);function Or(Z){return Z.currentTarget.closest("[data-column-key]")}function zr(Z,Re){const Ke=Or(Z);if(!(Z.button!==0||!Ke)){Z.preventDefault();try{Z.currentTarget.setPointerCapture(Z.pointerId)}catch{}Qn=Z.pointerType==="touch"||Z.pointerType==="pen",Jt={key:Re,pointerId:Z.pointerId,startX:Z.clientX,startWidth:Ke.getBoundingClientRect().width,min:bn(Re),touch:Qn,moved:!1},je()}}function Zn(Z){const Re=Jt;if(Re?.pointerId!==Z.pointerId)return;const Ke=Z.clientX-Re.startX;if(!Re.moved&&Math.abs(Ke)<(Re.touch?pn:Qt))return;Re.moved||(Re.moved=!0,u(Mn,Re.key,!0));const st=yi(Re.startWidth+Ke,Re.min);(t(O)?.key!==Re.key||t(O).width!==st)&&u(O,{key:Re.key,width:st})}function jn(Z){const Re=Jt;Re?.pointerId===Z.pointerId&&(Jt=void 0,u(Mn,void 0),Re.moved&&t(O)?.key===Re.key&&Pn(Re.key,t(O).width),u(O,void 0))}function Lr(Z,Re){const Ke=Jt;jn(Z),Ke?.pointerId===Z.pointerId&&Ke.touch&&!Ke.moved&&tn(Re.key)==="table"&&pe(Re)}function cs(Z,Re){if(Z.key==="ArrowLeft"||Z.key==="ArrowRight"){const Ke=Or(Z);if(Ke){const st=Z.key==="ArrowRight"?$c:-$c;Pn(Re,Ke.getBoundingClientRect().width+st)}}else if(Z.key==="Enter")Ft(Re);else if(Z.key!=="Tab")return;Z.key!=="Tab"&&(Z.preventDefault(),Z.stopPropagation())}let ar=C(!1),Ar=C(0),jr=C(0),cr=C(void 0),Tr=C("table");const ur=c(()=>[{id:"fit",label:ie("Fit column to content"),disabled:Xn(t(cr),t(Tr))===void 0},{id:"reset",label:ie("Reset column widths"),disabled:t(Tr)==="sub"?!t(Ee):!t(F)}]);function ns(Z){const Re=Z.target instanceof Element?Z.target:null;if(!Re)return;const Ke=t(Q)?.contains(Re)===!0||t(G)?.contains(Re)===!0;if(!Ke&&Re.closest(".hmm-tr-subhead")===null)return;Z.preventDefault();const st=Re.closest("[data-column-key]");u(cr,st?.dataset.columnKey,!0),u(Tr,Ke&&(t(cr)===void 0||!t(Ie).has(t(cr)))?"table":"sub",!0),u(Ar,Z.clientX,!0),u(jr,Z.clientY,!0),u(ar,!0),je()}function Fr(Z){Z==="fit"&&t(cr)!==void 0?Ft(t(cr)):Z==="reset"&&$n(t(Tr))}let pr=C(void 0),gr,ue,He,Vt;function yn(Z){return Jt===void 0&&!Z.classList.contains("hmm-td-fixed")&&Ay(Z)}function ir(Z,Re){je(),ue=Z,He=Re,Vt=setTimeout(()=>{Vt=void 0,rt(Z)},eh)}function it(Z){const Ke=(Z.target instanceof Element?Z.target.closest(".hmm-td, .hmm-th"):null)??void 0;Ke!==gr&&(gr=Ke,!(Ke!==void 0&&Ke===ue)&&(Ke!==void 0&&yn(Ke)?ir(Ke,"pointer"):He==="pointer"&&je()))}function bt(Z){try{return Z.matches(":focus-visible")}catch{return!1}}function It(Z){const Re=Z.target instanceof HTMLElement?Z.target:void 0,Ke=Re?.closest(".hmm-td, .hmm-th")??void 0;Re===void 0||Ke===void 0||Ke===ue||Re.classList.contains("hmm-th-resize")||!bt(Re)||yn(Ke)&&ir(Ke,"focus")}function et(){He==="focus"&&je()}function rt(Z){if(ue!==Z||!Z.isConnected)return;const Re=Ty(Z.querySelector(".hmm-th-label")??Z);if(Re==="")return;const{left:Ke,top:st,bottom:Ut}=Z.getBoundingClientRect();u(pr,{text:Re,anchor:{left:Ke,top:st,bottom:Ut}})}function je(){Vt!==void 0&&(clearTimeout(Vt),Vt=void 0),ue=void 0,He=void 0,t(pr)!==void 0&&u(pr,void 0)}function vt(){je(),gr=void 0}function At(){He==="pointer"&&je(),gr=void 0}ot(()=>()=>{Vt!==void 0&&clearTimeout(Vt)});const zt=1500,hn=4e3;let Ht=C(void 0),Mt;function kn(Z,Re){return`${Z.key}\0${Re.key}`}function An(){Mt!==void 0&&(clearTimeout(Mt),Mt=void 0),t(Ht)!==void 0&&u(Ht,void 0)}async function dn(Z,Re,Ke){Z.stopPropagation();const st=Z.currentTarget;if(!(st instanceof HTMLElement))return;const Ut=await Sy(ui(Re.row,Ke),{host:t(he)});if(je(),An(),!st.isConnected)return;const wt=Ut!=="failed";wt||_n(st);const{left:yt,top:In,bottom:mn}=st.getBoundingClientRect();u(Ht,{key:kn(Re,Ke),ok:wt,text:ie(wt?"Copied":"Could not copy - the text is selected"),anchor:{left:yt,top:In,bottom:mn}}),Mt=setTimeout(An,wt?zt:hn)}function _n(Z){const Re=Z.closest(".hmm-td"),Ke=window.getSelection();if(!Re||!Ke)return;const st=document.createRange();st.selectNodeContents(Re),st.setEndBefore(Z),Ke.removeAllRanges(),Ke.addRange(st)}ot(()=>()=>{Mt!==void 0&&clearTimeout(Mt)});var or=yS(),Gn=A(or);{var cn=Z=>{var Re=Xy(),Ke=A(Re);{var st=Wt=>{var rn=qy(),sn=m(rn,!0);S(()=>h(sn,g())),v(Wt,rn)};W(Ke,Wt=>{g()!==void 0&&Wt(st)})}var Ut=d(Ke,2);{var wt=Wt=>{var rn=$y(),sn=A(rn);qs(sn,D),S(()=>T(rn,"aria-label",N()??g()??x())),v(Wt,rn)};W(Ut,Wt=>{D()&&Wt(wt)})}var yt=d(Ut,2),In=A(yt);{var mn=Wt=>{var rn=St(),sn=Ne(rn);qs(sn,R),v(Wt,rn)};W(In,Wt=>{R()&&Wt(mn)})}var fr=d(In,2);{var Wn=Wt=>{var rn=nu(),sn=m(rn,!0);S(un=>{T(rn,"data-testid",ye()===void 0?void 0:`${ye()}-count`),h(sn,un)},[()=>w()(t(qe),e.rows.length)]),v(Wt,rn)},On=Wt=>{var rn=nu(),sn=m(rn,!0);S(()=>{T(rn,"data-testid",ye()===void 0?void 0:`${ye()}-count`),h(sn,M())}),v(Wt,rn)};W(fr,Wt=>{t(we)&&w()!==void 0?Wt(Wn):M()!==void 0&&Wt(On,1)})}v(Z,Re)};W(Gn,Z=>{t(Ze)&&Z(cn)})}var jt=d(Gn,2);let Rt,pt;var ht=A(jt);{var Gt=Z=>{var Re=Jy();Xe(Re,21,()=>t(ze),Ke=>Ke.key,(Ke,st)=>{var Ut=Zy();let wt;var yt=A(Ut),In=m(yt,!0),mn=d(yt,2);{var fr=Wn=>{var On=Qy(),Wt=m(On,!0);S(()=>h(Wt,t(st).sublabel)),v(Wn,On)};W(mn,Wn=>{t(st).sublabel!==void 0&&t(st).sublabel!==""&&Wn(fr)})}S(Wn=>{T(Ut,"aria-colspan",t(st).end-t(st).start),T(Ut,"data-testid",ye()===void 0?void 0:`${ye()}-group-${t(st).key}`),wt=Un(Ut,"",wt,{"grid-column":Wn}),h(In,t(st).label)},[()=>`${String(t(st).start)} / ${String(t(st).end)}`]),v(Ke,Ut)}),fn(Re,Ke=>u(G,Ke),()=>t(G)),v(Z,Re)};W(ht,Z=>{t(ze).length>0&&Z(Gt)})}var nn=d(ht,2),Tn=A(nn);{var Dn=Z=>{var Re=eS();v(Z,Re)};W(Tn,Z=>{t(J)&&Z(Dn)})}var Jn=d(Tn,2);Xe(Jn,17,()=>t(Y),Z=>Z.key,(Z,Re)=>{var Ke=sS();let st;var Ut=A(Ke);{var wt=On=>{var Wt=nS();let rn;var sn=A(Wt),un=m(sn,!0),Kr=d(sn,2);{var Vs=Yr=>{var Gr=tS(),Qs=m(Gr,!0);S(()=>h(Qs,fe().direction==="asc"?"▲":"▼")),v(Yr,Gr)};W(Kr,Yr=>{fe()?.key===t(Re).key&&Yr(Vs)})}S(()=>{rn=Un(Wt,"",rn,{"justify-content":t(Re).align==="right"?"flex-end":t(Re).align==="center"?"center":"flex-start"}),h(un,t(Re).label)}),re("click",Wt,()=>pe(t(Re))),v(On,Wt)},yt=c(()=>Zi(t(Re))),In=On=>{var Wt=rS(),rn=m(Wt,!0);S(()=>h(rn,t(Re).label)),v(On,Wt)};W(Ut,On=>{t(yt)?On(wt):On(In,-1)})}var mn=d(Ut,2);{var fr=On=>{n(On,()=>t(Re),()=>ye()===void 0?void 0:`${ye()}-resize-${t(Re).key}`)},Wn=c(()=>Ui(t(Re)));W(mn,On=>{t(Wn)&&On(fr)})}S(()=>{T(Ke,"aria-label",t(Re).label===""?void 0:t(Re).label),T(Ke,"data-column-key",t(Re).key),T(Ke,"aria-sort",fe()?.key===t(Re).key?fe().direction==="asc"?"ascending":"descending":"none"),st=Un(Ke,"",st,{"grid-column":t(ve).track[t(Re).key],"text-align":t(Re).align??"left"})}),v(Z,Ke)});var lr=d(Jn,2);Xe(lr,17,()=>t(Me),Z=>Z.key,(Z,Re)=>{var Ke=aS();let st;var Ut=A(Ke);n(Ut,()=>t(Re),()=>ye()===void 0?void 0:`${ye()}-resize-${t(Re).key}`),S(()=>{T(Ke,"data-column-key",t(Re).key),st=Un(Ke,"",st,{"grid-column":t(ve).track[t(Re).key],"grid-row":"1"})}),v(Z,Ke)}),fn(nn,Z=>u(Q,Z),()=>t(Q));var us=d(nn,2);{var Bs=Z=>{var Re=dS(),Ke=A(Re);{var st=wt=>{var yt=iS();v(wt,yt)};W(Ke,wt=>{t(J)&&wt(st)})}var Ut=d(Ke,2);Xe(Ut,17,()=>t(Y),wt=>wt.key,(wt,yt)=>{var In=lS();let mn;var fr=A(In);{var Wn=Wt=>{var rn=oS();S(()=>{T(rn,"aria-label",`${x()}: ${t(yt).label}`),ln(rn,t(Ae)[t(yt).key]??"")}),re("input",rn,sn=>{u(Ae,{...t(Ae),[t(yt).key]:sn.currentTarget.value},!0)}),v(Wt,rn)},On=c(()=>Uh(t(yt)));W(fr,Wt=>{t(On)&&Wt(Wn)})}S(()=>mn=Un(In,"",mn,{"grid-column":t(ve).track[t(yt).key]})),v(wt,In)}),fn(Re,wt=>u(q,wt),()=>t(q)),v(Z,Re)};W(us,Z=>{_()&&Z(Bs)})}var Rn=d(us,2);let gn;var Rr=A(Rn);{var Wr=Z=>{var Re=uS(),Ke=A(Re);{var st=wt=>{var yt=cS(),In=Ne(yt),mn=m(In,!0),fr=d(In,2),Wn=m(fr,!0);S(()=>{h(mn,E()),T(fr,"data-testid",ye()===void 0?void 0:`${ye()}-clear-filter`),h(Wn,b())}),re("click",fr,Ce),v(wt,yt)},Ut=wt=>{var yt=Cn();S(()=>h(yt,k())),v(wt,yt)};W(Ke,wt=>{t(we)?wt(st):wt(Ut,-1)})}v(Z,Re)},Ts=Z=>{var Re=ES();let Ke;var st=A(Re);let Ut;Xe(st,23,()=>t(Pe),wt=>wt.key,(wt,yt,In)=>{var mn=_S();let fr,Wn;var On=A(mn);{var Wt=sn=>{var un=hS(),Kr=A(un);{var Vs=Yr=>{var Gr=fS(),Qs=m(Gr,!0);S(()=>{T(Gr,"aria-expanded",t(yt).expanded),T(Gr,"aria-label",t(yt).expanded?"Collapse row":"Expand row"),h(Qs,t(yt).expanded?"−":"+")}),re("click",Gr,qa=>{qa.stopPropagation(),De(t(yt).id)}),v(Yr,Gr)};W(Kr,Yr=>{t(yt).hasChildren&&Yr(Vs)})}v(sn,un)};W(On,sn=>{t(J)&&sn(Wt)})}var rn=d(On,2);Xe(rn,17,()=>t(yt).depth>0?t(ae):t(Y),sn=>sn.key,(sn,un)=>{var Kr=bS();let Vs,Yr;var Gr=A(Kr);{var Qs=br=>{var Ur=mS(),dr=Ne(Ur),Zs=d(dr);{var $a=Js=>{n(Js,()=>t(un),()=>ye()===void 0?void 0:`${ye()}-sub-resize-${t(un).key}`)},Xa=c(()=>t(Ie).has(t(un).key)&&Ui(t(un)));W(Zs,Js=>{t(Xa)&&Js($a)})}S(()=>h(dr,`${t(un).label??""} `)),v(br,Ur)},qa=br=>{var Ur=St(),dr=Ne(Ur);qs(dr,se,()=>t(yt).row,()=>t(un),()=>t(yt)),v(br,Ur)},xo=br=>{var Ur=Cn();S(dr=>h(Ur,dr),[()=>ui(t(yt).row,t(un))]),v(br,Ur)};W(Gr,br=>{t(yt).kind==="header"?br(Qs):se()?br(qa,1):br(xo,-1)})}var Do=d(Gr,2);{var Io=br=>{const Ur=c(()=>kn(t(yt),t(un)));var dr=gS();let Zs;var $a=A(dr),Xa=A($a);{var Js=_r=>{var Qa=vS();v(_r,Qa)},Mi=_r=>{var Qa=pS();v(_r,Qa)};W(Xa,_r=>{t(Ht)?.key===t(Ur)&&t(Ht).ok?_r(Js):_r(Mi,-1)})}S(_r=>{Zs=_t(dr,1,"hmm-copy svelte-16k18c8",null,Zs,{"hmm-copy-shown":t(Ht)?.key===t(Ur)}),T(dr,"tabindex",t(L).start+t(In)===t(P)?0:-1),T(dr,"aria-label",_r)},[()=>t(un).copy==="name"?ie("Copy name"):ie("Copy address")]),re("click",dr,_r=>{dn(_r,t(yt),t(un))}),re("dblclick",dr,_r=>{_r.stopPropagation()}),v(br,dr)},Pi=c(()=>t(un).copy!==void 0&&t(yt).kind==="row"&&ui(t(yt).row,t(un))!=="");W(Do,br=>{t(Pi)&&br(Io)})}S(()=>{Vs=_t(Kr,1,"hmm-td svelte-16k18c8",null,Vs,{"hmm-td-fixed":t(un).fixed===!0,"hmm-td-copy":t(un).copy!==void 0&&t(yt).kind==="row","hmm-mono":t(un).mono===!0&&t(yt).kind==="row"}),T(Kr,"data-column-key",t(un).key),Yr=Un(Kr,"",Yr,{"grid-column":t(ve).track[t(un).key],"text-align":t(un).align??"left"})}),v(sn,Kr)}),S((sn,un)=>{fr=_t(mn,1,"hmm-tr svelte-16k18c8",null,fr,{"hmm-tr-even":(t(L).start+t(In))%2===1,"hmm-tr-selected":sn,"hmm-tr-child":t(yt).depth>0&&t(yt).kind==="row","hmm-tr-subhead":t(yt).kind==="header"}),T(mn,"aria-selected",un),T(mn,"data-row-id",t(yt).id),T(mn,"data-row-kind",t(yt).kind),Wn=Un(mn,"",Wn,{height:`${l()}px`})},[()=>t(_e).has(t(yt).id),()=>t(yt).kind==="header"?void 0:t(_e).has(t(yt).id)]),re("click",mn,sn=>Fe(t(yt),sn)),re("dblclick",mn,sn=>at(t(yt),sn)),re("contextmenu",mn,sn=>Ye(t(yt),sn)),v(wt,mn)}),S(()=>{Ke=Un(Re,"",Ke,{height:`${t(Se).length*l()}px`}),Ut=Un(st,"",Ut,{transform:`translateY(${t(L).start*l()}px)`})}),v(Z,Re)};W(Rr,Z=>{t(Se).length===0?Z(Wr):Z(Ts,-1)})}fn(Rn,Z=>u(ee,Z),()=>t(ee));var fs=d(jt,2);{var Hs=Z=>{{let Re=c(()=>ye()===void 0?void 0:`${ye()}-tooltip`);Rl(Z,{get text(){return t(pr).text},get anchor(){return t(pr).anchor},get testId(){return t(Re)}})}};W(fs,Z=>{t(pr)!==void 0&&Z(Hs)})}var ba=d(fs,2);{var Ni=Z=>{{let Re=c(()=>ye()===void 0?void 0:`${ye()}-copied`);Rl(Z,{get text(){return t(Ht).text},get anchor(){return t(Ht).anchor},get testId(){return t(Re)}})}};W(ba,Z=>{t(Ht)!==void 0&&Z(Ni)})}var Ya=d(ba,2),To=m(Ya,!0),Ro=d(Ya,2);{var Ci=Z=>{{let Re=c(()=>ie("Column widths")),Ke=c(()=>ye()===void 0?void 0:`${ye()}-columns-menu`);Ld(Z,{get items(){return t(ur)},get x(){return t(Ar)},get y(){return t(jr)},get label(){return t(Re)},get testId(){return t(Ke)},onselect:Fr,get open(){return t(ar)},set open(st){u(ar,st,!0)}})}};W(Ro,Z=>{t(ar)&&Z(Ci)})}fn(or,Z=>u(he,Z),()=>t(he)),S((Z,Re)=>{T(or,"data-testid",ye()),Rt=_t(jt,1,"hmm-table-grid svelte-16k18c8",null,Rt,{"hmm-table-resizing":t(Mn)!==void 0}),T(jt,"aria-rowcount",t(Se).length),T(jt,"aria-colcount",t(Y).length),pt=Un(jt,"",pt,{"--hmm-table-columns":t(Ve).template,"--hmm-table-min-width":Z,"--hmm-table-gutter":Re}),gn=Un(Rn,"",gn,{height:f()===void 0?void 0:`${f()}px`}),h(To,t(Ht)?.text??"")},[()=>`${String(t(Ve).minWidth)}px`,()=>`${String(t(ce))}px`]),re("keydown",jt,Lt),re("contextmenu",jt,ns),re("pointerover",jt,it),Ir("pointerleave",jt,At),re("pointerdown",jt,je),re("focusin",jt,It),re("focusout",jt,et),Ir("scroll",Rn,Z=>Be(Z.currentTarget)),v(r,or),ut()}Et(["pointerdown","pointermove","pointerup","dblclick","keydown","contextmenu","pointerover","focusin","focusout","click","input"]);var SS=y('<img class="hmm-device-image svelte-rwoeeb"/>'),wS=y('<span class="hmm-device-image hmm-device-image-fallback svelte-rwoeeb"> </span>');function Ha(r,e){ct(e,!0);let n=H(e,"deviceType",3,""),s=H(e,"src",3,void 0),a=H(e,"size",3,Gh),i=H(e,"title",3,void 0),o=H(e,"testId",3,void 0),l=C(!1);ot(()=>{s(),u(l,!1)});const f=c(()=>s()!==void 0&&s()!==""&&!t(l)),p=c(()=>n().replace(/^(HmIPW?|HM|HMW)-/i,"").replace(/[^A-Za-z0-9]/g,"").slice(0,2).toUpperCase());var _=St(),g=Ne(_);{var k=b=>{var w=SS();S(()=>{T(w,"src",s()),T(w,"alt",n()),T(w,"title",i()??n()),T(w,"width",a()),T(w,"height",a()),T(w,"data-testid",o())}),Ir("error",w,()=>u(l,!0)),v(b,w)},E=b=>{var w=wS();let x;var D=m(w,!0);S(N=>{T(w,"title",i()??n()),T(w,"aria-label",n()===""?void 0:n()),T(w,"role",n()===""?void 0:"img"),T(w,"data-testid",o()),x=Un(w,"",x,{width:`${a()}px`,height:`${a()}px`,"font-size":N}),h(D,t(p))},[()=>`${Math.max(6,Math.round(a()*.5))}px`]),v(b,w)};W(g,b=>{t(f)?b(k):b(E,-1)})}v(r,_),ut()}var kS=Mr("<path></path>"),AS=y('<span class="hmm-router-badge svelte-jakst8" role="img"><svg viewBox="0 0 24 24" width="12" height="12" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"></svg></span>');function TS(r,e){let n=H(e,"testId",3,void 0);const s=["M4 14h16a2 2 0 0 1 2 2v2a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2v-2a2 2 0 0 1 2-2z","M6 17h.01M10 17h.01","M15 10v4","M17.8 7.2a4 4 0 0 0-5.6 0","M20.7 4.3a8 8 0 0 0-11.4 0"];var a=AS(),i=A(a);Xe(i,20,()=>s,o=>o,(o,l)=>{var f=kS();S(()=>T(f,"d",l)),v(o,f)}),S(()=>{T(a,"title",e.title),T(a,"aria-label",e.label),T(a,"data-testid",n())}),v(r,a)}const RS={unlink:["M9 17H7a5 5 0 0 1 0-10h2","M15 7h2a5 5 0 0 1 4 8","M8 12h3","M3 3l18 18"],history:["M3 12a9 9 0 1 0 3-6.7L3 8","M3 3v5h5","M12 7v5l3 2"],battery:["M4 7h13a2 2 0 0 1 2 2v6a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2z","M22 10v4","M5 10v4"],alert:["M12 4l9 16H3l9-16z","M12 10v4M12 17.2h.01"],shield:["M12 3l7 3v5.5c0 4.4-3 8.3-7 9.5-4-1.2-7-5.1-7-9.5V6z"],"x-circle":["M3 12a9 9 0 1 0 18 0a9 9 0 1 0-18 0","M9.2 9.2l5.6 5.6M14.8 9.2l-5.6 5.6"],settings:["M9 12a3 3 0 1 0 6 0a3 3 0 1 0-6 0","M19.4 15a1.7 1.7 0 0 0 .3 1.8l.1.1a2 2 0 1 1-2.8 2.8l-.1-.1a1.7 1.7 0 0 0-1.8-.3 1.7 1.7 0 0 0-1 1.5V21a2 2 0 1 1-4 0v-.1a1.7 1.7 0 0 0-1.1-1.5 1.7 1.7 0 0 0-1.8.3l-.1.1a2 2 0 1 1-2.8-2.8l.1-.1a1.7 1.7 0 0 0 .3-1.8 1.7 1.7 0 0 0-1.5-1H3a2 2 0 1 1 0-4h.1a1.7 1.7 0 0 0 1.5-1.1 1.7 1.7 0 0 0-.3-1.8l-.1-.1a2 2 0 1 1 2.8-2.8l.1.1a1.7 1.7 0 0 0 1.8.3H9a1.7 1.7 0 0 0 1-1.5V3a2 2 0 1 1 4 0v.1a1.7 1.7 0 0 0 1 1.5 1.7 1.7 0 0 0 1.8-.3l.1-.1a2 2 0 1 1 2.8 2.8l-.1.1a1.7 1.7 0 0 0-.3 1.8V9a1.7 1.7 0 0 0 1.5 1H21a2 2 0 1 1 0 4h-.1a1.7 1.7 0 0 0-1.5 1z"],"arrow-up":["M3 12a9 9 0 1 0 18 0a9 9 0 1 0-18 0","M12 16V8","M8.5 11.5L12 8l3.5 3.5"]};var xS=Mr("<path></path>"),DS=y('<span role="img"><svg viewBox="0 0 24 24" width="12" height="12" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="svelte-1litlhm"></svg></span>');function IS(r,e){ct(e,!0);var n=DS();let s;var a=A(n);Xe(a,20,()=>RS[e.mark.icon],i=>i,(i,o)=>{var l=xS();S(()=>T(l,"d",o)),v(i,l)}),S(()=>{s=_t(n,1,`hmm-service-badge hmm-service-badge-${e.mark.tone??""}`,"svelte-1litlhm",s,{"hmm-service-badge-solid":e.mark.datapoint==="UNREACH"}),T(n,"data-datapoint",e.mark.datapoint),T(n,"data-tone",e.mark.tone),T(n,"title",e.title),T(n,"aria-label",e.label)}),v(r,n),ut()}var NS=y('<span class="hmm-primary-caption"> </span>'),CS=y('<button type="button"><span class="hmm-primary-icon svelte-1a5hxwr" aria-hidden="true"> </span> <!></button>'),PS=y('<span class="hmm-primary-button hmm-primary-measure svelte-1a5hxwr" aria-hidden="true"><span class="hmm-primary-icon svelte-1a5hxwr"> </span> <span class="hmm-primary-caption"> </span></span>'),MS=y('<span class="hmm-primary-slot svelte-1a5hxwr"><!> <!></span>');function Vh(r,e){ct(e,!0);let n=H(e,"icon",3,"+"),s=H(e,"disabled",3,!1),a=H(e,"reason",3,void 0),i=H(e,"compact",3,void 0),o=H(e,"onclick",3,void 0),l=H(e,"testId",3,void 0),f=C(void 0),p=C(void 0),_=C(0),g=C(0);ot(()=>{const M=t(f),z=t(p);if(i()!==void 0||!M||!z)return;const $=()=>{u(_,Math.ceil(z.getBoundingClientRect().width),!0),u(g,M.getBoundingClientRect().width,!0)};$();const le=new ResizeObserver($);return le.observe(M),le.observe(z),()=>{le.disconnect()}});const k=c(()=>i()??(t(_)>0&&t(g)>0&&t(g)<t(_)-1)),E=c(()=>s()&&a()!==void 0?`${e.caption} — ${a()}`:t(k)?e.caption:""),b=c(()=>l()===void 0?void 0:`${l()}-tooltip`);var w=MS();let x;var D=A(w);mi(D,{get text(){return t(E)},get testId(){return t(b)},children:(M,z)=>{var $=CS();let le;var fe=A($),de=m(fe,!0),B=d(fe,2);{var oe=K=>{var X=NS(),se=m(X,!0);S(()=>{T(X,"data-testid",l()===void 0?void 0:`${l()}-caption`),h(se,e.caption)}),v(K,X)};W(B,K=>{t(k)||K(oe)})}S(()=>{le=_t($,1,"hmm-primary-button svelte-1a5hxwr",null,le,{"hmm-primary-compact":t(k)}),T($,"aria-label",e.caption),T($,"data-testid",l()),T($,"data-compact",t(k)?"true":"false"),$.disabled=s(),h(de,n())}),re("click",$,()=>o()?.()),v(M,$)},$$slots:{default:!0}});var N=d(D,2);{var R=M=>{var z=PS(),$=A(z),le=m($,!0),fe=d($,2),de=m(fe,!0);fn(z,B=>u(p,B),()=>t(p)),S(()=>{h(le,n()),h(de,e.caption)}),v(M,z)};W(N,M=>{i()===void 0&&M(R)})}fn(w,M=>u(f,M),()=>t(f)),S(M=>x=Un(w,"",x,{"flex-basis":M}),[()=>t(_)>0?`${String(t(_))}px`:void 0]),v(r,w),ut()}Et(["click"]);const OS={UNREACH:{icon:"unlink",tone:"red",label:"Communication disturbed"},STICKY_UNREACH:{icon:"history",tone:"grey",label:"Communication was disturbed"},ERROR:{icon:"alert",tone:"red",label:"Fault"},ERROR_CODE:{icon:"alert",tone:"red",label:"Fault"},SABOTAGE:{icon:"shield",tone:"red",label:"Sabotage"},FAULT_REPORTING:{icon:"x-circle",tone:"red",label:"Fault report"},LOWBAT:{icon:"battery",tone:"orange",label:"Low battery"},LOW_BAT:{icon:"battery",tone:"orange",label:"Low battery"},CONFIG_PENDING:{icon:"settings",tone:"blue",label:"Configuration pending"},UPDATE_PENDING:{icon:"arrow-up",tone:"blue",label:"Update pending"}},ru={red:0,orange:1,blue:2,grey:3},su=84,Bi=150,au=190,iu=180;function el(r,e,n=2){const s=[];for(const i of e){if(Fa(i.address)!==r)continue;const o=OS[i.datapoint];!o||s.some(l=>l.datapoint===i.datapoint)||s.push({datapoint:i.datapoint,...o,address:i.address})}const a=s.some(i=>i.datapoint==="UNREACH");return s.filter(i=>!(a&&i.datapoint==="STICKY_UNREACH")).sort((i,o)=>ru[i.tone]-ru[o.tone]).slice(0,n)}function zh(r,e){if(r==="CONFIG_PENDING")return e?"The configuration could not be transferred to the device":"A configuration is queued; the device takes it when it next wakes up"}function LS(r,e,n={channel:!1}){const s=[];let a=!1;for(const i of ah(r)??[]){if(i==="LINK"||n.channel&&i==="SERVICE")continue;const o=e(i);o===void 0?a=!0:o!=="empty"&&s.push(i)}return{names:s,pending:a}}function FS(r,e){return e&&r==="CONFIG_PENDING"}const GS={UP_TO_DATE:{status:"up to date"},NEW_FIRMWARE_AVAILABLE:{status:"queued for transfer",hint:"firmware queued hint"},DELIVER_FIRMWARE_IMAGE:{status:"transferring",hint:"firmware transfer hint"},DO_UPDATE_PENDING:{status:"installing",hint:"firmware install pending hint"},PERFORMING_UPDATE:{status:"installing"},LIVE_DELIVER_FIRMWARE_IMAGE:{status:"installing"}};function ou(r,e){return r!==void 0&&r!==""&&r!=="0.0.0"&&r!==e}function US(r,e={}){const n=r.FIRMWARE??"",s=r.AVAILABLE_FIRMWARE,a=e.busy===!0,i=r.FIRMWARE_UPDATE_STATE;if(i!==void 0&&i!==""){if((i==="READY_FOR_UPDATE"||i==="LIVE_NEW_FIRMWARE_AVAILABLE")&&ou(s,n))return{firmware:n,available:s,...a?{}:{action:"install"},busy:a};const o=GS[i];if(o!==void 0){const l=e.transfer;if(i==="DELIVER_FIRMWARE_IMAGE"&&l!==void 0&&l.state!=="done"){const f=l.percent>=0?{percent:l.percent}:{};return l.state==="interrupted"?{firmware:n,status:"waiting for the device",hint:"firmware interrupted hint",...f,busy:a}:{firmware:n,status:o.status,...o.hint===void 0?{}:{hint:o.hint},...f,busy:a}}return{firmware:n,status:o.status,...o.hint===void 0?{}:{hint:o.hint},busy:a}}}return e.updatePending===!0?{firmware:n,status:"update pending",busy:a}:ou(s,n)?{firmware:n,available:s,...a?{}:{action:"update"},busy:a}:{firmware:n,busy:a}}function jh(r,e){const n=r[e];return n?Ii(e,n).map(s=>({path:s.path,label:s.node.name,depth:s.depth,hasChildren:(s.node.children?.length??0)>0})):[]}function ql(r,e=" "){return`${e.repeat(Math.max(0,r.depth-1))}${r.label}`}function Va(r,e){return r!==void 0&&r.enums.some(n=>Ws(n,e))}function Wh(r,e,n){return Va(r,n)||e.some(s=>Va(s,n))}function lu(r,e,n){return Va(r,n)||Va(e,n)}function Ao(r,e){return Object.entries(r).filter(([,n])=>Va(n,e)).map(([n])=>n).sort((n,s)=>n.localeCompare(s))}function $l(r,e){return r===void 0?[]:e==="room"?r.rooms:r.functions}function Kh(r,e,n){const s=$l(r,n);if(s.length>0)return[...s];const a=[];for(const i of e)for(const o of $l(i,n))a.includes(o)||a.push(o);return a}function BS(r,e){return e===null||!Ws(e,r)}function HS(r,e){const n=r.ADDRESS.lastIndexOf(":"),s=r.PARENT??(n<0?r.ADDRESS:r.ADDRESS.slice(0,n)),a=r.INDEX===void 0?r.ADDRESS.slice(n+1):String(r.INDEX);return{value:r.ADDRESS,label:e(r.ADDRESS)??r.ADDRESS,hint:e(s)??s,description:`${a}: ${r.TYPE}`}}var VS=y('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="add-link-stage"> </button> <button type="button" class="hmm-button" data-testid="add-link-create"> </button> <button type="button" class="hmm-button" data-testid="add-link-create-edit"> </button>',1),zS=y('<span class="hmm-add-link-label svelte-w1ajeb"> </span> <div class="hmm-add-link-field svelte-w1ajeb"><input class="hmm-input hmm-add-link-input svelte-w1ajeb" data-testid="add-link-name-all"/> <span class="hmm-add-link-roles hmm-add-link-under svelte-w1ajeb"> </span></div> <span class="hmm-add-link-label svelte-w1ajeb"> </span> <div class="hmm-add-link-field svelte-w1ajeb"><input class="hmm-input hmm-add-link-input svelte-w1ajeb" data-testid="add-link-description-all"/></div>',1),jS=y('<span></span> <span class="hmm-add-link-empty svelte-w1ajeb" data-testid="add-link-none"> </span>',1),WS=y('<tr><td class="hmm-mono svelte-w1ajeb"> </td><td class="hmm-mono svelte-w1ajeb"> </td><td class="svelte-w1ajeb"><input class="hmm-input svelte-w1ajeb"/></td><td class="svelte-w1ajeb"><input class="hmm-input svelte-w1ajeb"/></td></tr>'),KS=y('<table class="hmm-pair-names svelte-w1ajeb" data-testid="add-link-pairs"><thead><tr><th class="svelte-w1ajeb"> </th><th class="svelte-w1ajeb"> </th><th class="svelte-w1ajeb"> </th><th class="svelte-w1ajeb"> </th></tr></thead><tbody></tbody></table>'),YS=y('<div class="hmm-add-link svelte-w1ajeb"><span class="hmm-add-link-label svelte-w1ajeb"> </span> <div class="hmm-add-link-field svelte-w1ajeb"><!> <span class="hmm-add-link-roles svelte-w1ajeb"> </span></div> <span class="hmm-add-link-label svelte-w1ajeb"> </span> <div class="hmm-add-link-field svelte-w1ajeb"><!> <span class="hmm-add-link-roles svelte-w1ajeb"> </span></div> <!> <!></div> <!>',1);function Yh(r,e){ct(e,!0);let n=H(e,"open",15,!1),s=H(e,"onedit",3,void 0),a=H(e,"presetSenders",19,()=>[]),i=H(e,"presetReceivers",19,()=>[]);const o=Ot(),l=o.i18n.t;let f=C(We([])),p=C(We([])),_=C(!1),g=C(We({})),k=C(""),E=C("");const b=c(()=>o.app.selectedInterface),w=c(()=>o.devices.index(t(b)));ot(()=>{n()&&(u(f,[...a()],!0),u(p,[...i()],!0),u(g,{},!0),u(k,""),u(E,""))});const x=c(()=>t(w)?ch(t(w)).map(B=>M(B)):[]),D=c(()=>{const B=t(w);if(!B||t(f).length===0)return[];const oe=t(f).map(K=>B.get(K)).filter(K=>K!==void 0);return B.channels().filter(K=>oe.every(X=>t_(X,K))).map(K=>M(K))}),N=c(()=>[...new Set(t(f).flatMap(B=>As(t(w)?.get(B)?.LINK_SOURCE_ROLES)))].join(" ")),R=c(()=>[...new Set(t(p).flatMap(B=>As(t(w)?.get(B)?.LINK_TARGET_ROLES)))].join(" "));function M(B){return HS(B,oe=>o.names.name(oe))}function z(){return t(f).flatMap(B=>t(p).map(oe=>{const K=t(g)[$(B,oe)],X=K?.name.trim()===""||K===void 0?t(k).trim():K.name.trim(),se=K?.description.trim()===""||K===void 0?t(E).trim():K.description.trim();return{sender:B,receiver:oe,...X===""?{}:{name:X},...se===""?{}:{description:se}}}))}function $(B,oe){return`${B}>${oe}`}function le(B,oe,K,X){const se=$(B,oe),j=t(g)[se]??{name:"",description:""};u(g,{...t(g),[se]:{...j,[K]:X}},!0)}function fe(){const B=z();B.length!==0&&(o.changeSet.stage({kind:"linkAdd",interfaceName:t(b),title:l("{count} links",{},B.length),pairs:B,calls:B.map(oe=>`addLink(${oe.sender}, ${oe.receiver}, ${JSON.stringify(oe.name??"")})`),lines:B.map(oe=>({label:`${o.nameOf(oe.sender)} → ${o.nameOf(oe.receiver)}`,to:oe.name??""}))}),n(!1))}async function de(B){u(_,!0);const oe=await o.links.addPairs(t(b),z());if(u(_,!1),oe===0)return;n(!1);const K=t(f)[0],X=t(p)[0];B&&K!==void 0&&X!==void 0&&s()?.({sender:K,receiver:X})}{const B=K=>{var X=VS(),se=Ne(X),j=m(se,!0),ne=d(se,2),ye=m(ne,!0),xe=d(ne,2),ie=m(xe,!0),Ae=d(xe,2),Te=m(Ae,!0);S((me,P,ce,be)=>{h(j,me),ne.disabled=t(_)||t(p).length===0,h(ye,P),xe.disabled=t(_)||t(p).length===0,h(ie,ce),Ae.disabled=t(_)||t(p).length===0,h(Te,be)},[()=>l("Cancel"),()=>l("Add to pending changes"),()=>l("Create"),()=>l("Create and edit")]),re("click",se,()=>n(!1)),re("click",ne,fe),re("click",xe,()=>{de(!1)}),re("click",Ae,()=>{de(!0)}),v(K,X)};let oe=c(()=>l("Create link"));En(r,{get title(){return t(oe)},width:"720px",top:"min(12vh, 96px)",testId:"add-link-dialog",get open(){return n()},set open(K){n(K)},buttons:B,children:(K,X)=>{var se=YS(),j=Ne(se),ne=A(j),ye=m(ne,!0),xe=d(ne,2),ie=A(xe);{let te=c(()=>l("Sender")),O=c(()=>l("Select")),U=c(()=>l("Filter")),I=c(()=>l("Check all")),F=c(()=>l("Uncheck all"));bi(ie,{get options(){return t(x)},get label(){return t(te)},get placeholder(){return t(O)},get filterLabel(){return t(U)},get checkAllLabel(){return t(I)},get uncheckAllLabel(){return t(F)},summary:Ee=>l("{count} channels selected",{},Ee.length),testId:"add-link-senders",inline:!0,get selected(){return t(f)},set selected(Ee){u(f,Ee,!0)}})}var Ae=d(ie,2),Te=m(Ae),me=d(xe,2),P=m(me,!0),ce=d(me,2),be=A(ce);{let te=c(()=>t(f).length===0),O=c(()=>l("Receiver")),U=c(()=>t(f).length===0?l("Sender"):l("Select")),I=c(()=>l("Filter")),F=c(()=>l("Check all")),Ee=c(()=>l("Uncheck all"));bi(be,{get options(){return t(D)},get disabled(){return t(te)},get label(){return t(O)},get placeholder(){return t(U)},get filterLabel(){return t(I)},get checkAllLabel(){return t(F)},get uncheckAllLabel(){return t(Ee)},summary:Ie=>l("{count} channels selected",{},Ie.length),testId:"add-link-receivers",inline:!0,get selected(){return t(p)},set selected(Ie){u(p,Ie,!0)}})}var ee=d(be,2),he=m(ee),G=d(ce,2);{var Q=te=>{var O=zS(),U=Ne(O),I=m(U,!0),F=d(U,2),Ee=A(F),Ie=d(Ee,2),Me=m(Ie,!0),Ve=d(F,2),ze=m(Ve,!0),nt=d(Ve,2),Ze=A(nt);S((_e,Se,V,L,Pe)=>{h(I,_e),T(Ee,"aria-label",Se),h(Me,V),h(ze,L),T(Ze,"aria-label",Pe)},[()=>l("Name"),()=>l("Name"),()=>l("Used for every pair without its own name"),()=>l("Description"),()=>l("Description")]),xn(Ee,()=>t(k),_e=>u(k,_e)),xn(Ze,()=>t(E),_e=>u(E,_e)),v(te,O)},q=c(()=>z().length>0);W(G,te=>{t(q)&&te(Q)})}var Y=d(G,2);{var ae=te=>{var O=jS(),U=d(Ne(O),2),I=m(U,!0);S(F=>h(I,F),[()=>l("No channel can receive from this sender")]),v(te,O)};W(Y,te=>{t(f).length>0&&t(D).length===0&&te(ae)})}var J=d(j,2);{var ve=te=>{var O=KS(),U=A(O),I=A(U),F=A(I),Ee=m(F,!0),Ie=d(F),Me=m(Ie,!0),Ve=d(Ie),ze=m(Ve,!0),nt=d(Ve),Ze=m(nt,!0),_e=d(U);Xe(_e,21,z,Se=>$(Se.sender,Se.receiver),(Se,V)=>{var L=WS(),Pe=A(L),Ge=m(Pe,!0),qe=d(Pe),we=m(qe,!0),Ce=d(qe),Oe=A(Ce),Be=d(Ce),pe=A(Be);S((De,Ue,Fe,Ye,tt,ft,dt)=>{T(L,"data-testid",De),h(Ge,Ue),h(we,Fe),T(Oe,"aria-label",Ye),ln(Oe,tt),T(Oe,"placeholder",t(k)),T(pe,"aria-label",ft),ln(pe,dt),T(pe,"placeholder",t(E))},[()=>`add-link-pair-${$(t(V).sender,t(V).receiver)}`,()=>o.nameOf(t(V).sender),()=>o.nameOf(t(V).receiver),()=>`${l("Name")} ${t(V).sender} ${t(V).receiver}`,()=>t(g)[$(t(V).sender,t(V).receiver)]?.name??"",()=>`${l("Description")} ${t(V).sender} ${t(V).receiver}`,()=>t(g)[$(t(V).sender,t(V).receiver)]?.description??""]),re("input",Oe,De=>le(t(V).sender,t(V).receiver,"name",De.currentTarget.value)),re("input",pe,De=>le(t(V).sender,t(V).receiver,"description",De.currentTarget.value)),v(Se,L)}),S((Se,V,L,Pe)=>{h(Ee,Se),h(Me,V),h(ze,L),h(Ze,Pe)},[()=>l("Sender"),()=>l("Receiver"),()=>l("Name"),()=>l("Description")]),v(te,O)},ge=c(()=>z().length>1);W(J,te=>{t(ge)&&te(ve)})}S((te,O)=>{h(ye,te),h(Te,`LINK_SOURCE_ROLES: ${t(N)??""}`),h(P,O),h(he,`LINK_TARGET_ROLES: ${t(R)??""}`)},[()=>l("Sender"),()=>l("Receiver")]),v(K,se)},$$slots:{buttons:!0,default:!0}})}ut()}Et(["click","input"]);var qS=y('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="smoke-group-apply"> </button>',1),$S=y('— TEAM_TAG <span class="hmm-mono"> </span>',1),XS=y('<p class="hmm-smoke-muted svelte-1spai3u"><span class="hmm-mono"> </span> <!></p>'),du=y('<p class="hmm-smoke-muted svelte-1spai3u"> </p>'),QS=y('<p class="hmm-smoke-muted svelte-1spai3u" data-testid="smoke-group-none"> </p>'),ZS=y('<li class="svelte-1spai3u"><label><input type="checkbox"/> <span class="hmm-smoke-member-name svelte-1spai3u"> </span> <span class="hmm-mono hmm-smoke-member-id svelte-1spai3u"> </span> <span class="hmm-smoke-member-note svelte-1spai3u"> </span></label></li>'),JS=y('<ul class="hmm-smoke-list svelte-1spai3u" data-testid="smoke-group-candidates"></ul>'),e0=y('<div class="hmm-smoke-form svelte-1spai3u"><!> <p class="hmm-smoke-heading svelte-1spai3u"> </p> <!></div>');function t0(r,e){ct(e,!0);let n=H(e,"open",15,!1),s=H(e,"group",3,void 0),a=H(e,"isNew",3,!1);const i=Ot(),o=i.i18n.t;let l=C(We([])),f=C(!1);const p=c(()=>i.app.selectedInterface),_=c(()=>i.devices.index(t(p))),g=c(()=>i.smokeGroups.of(t(p))),k=c(()=>s()?.kind==="hmip"&&i.smokeGroups.isLoading(t(p))),E=c(()=>{if(s()===void 0||t(_)===void 0)return[];const z=s();return t(_).channels().filter($=>($.TEAM_CHANNELS??[]).length>0?!1:z.kind==="team"?($.TEAM_TAG??"")!==""&&$.TEAM_TAG===z.teamTag:oh($))});function b(z){return s()?.kind==="team"||(t(g)[z]??null)!==null}function w(z){if(s()===void 0)return"";if(s().kind==="team"){const le=t(_)===void 0?void 0:lh(t(_),z);return le===void 0||le===s().address||(t(_)?.get(t(_).get(z)?.TEAM??"")?.TEAM_CHANNELS??[]).length<2?"":o("in {team}",{team:i.nameOf(le)})}const $=(t(g)[z]??[]).filter(le=>le!==s().number);return $.length===0?"":o("also in {groups}",{groups:$.map(le=>o("Smoke group {n}",{n:le})).join(", ")})}ot(()=>{n()&&sr(()=>{u(l,[...s()?.members??[]],!0)})});function x(z,$){u(l,$?[...t(l),z]:t(l).filter(le=>le!==z),!0)}const D=c(()=>Kb(s()?.members??[],t(l))),N=c(()=>t(D).added.length>0||t(D).removed.length>0),R=c(()=>s()===void 0?"":s().kind==="team"?`${o("Team")}: ${i.nameOf(s().address)}`:o("Smoke group {n}",{n:s().number??0}));async function M(){if(s()===void 0||!t(N))return;const{added:z,removed:$}=t(D);u(f,!0);try{if(s().kind==="team"){const de=s().teamChannel??"";await i.devices.setTeams(t(p),[...z.map(oe=>({address:oe,teamAddress:de})),...$.map(oe=>({address:oe,teamAddress:""}))])===z.length+$.length&&n(!1);return}const le=await i.smokeGroups.setMembers(t(p),s().number??0,z,$),fe=le.filter(de=>!de.ok);for(const de of fe)i.notices.push("error",`${i.nameOf(de.address)}: ${de.problems.map(B=>B.message).join("; ")||(de.faultString??"")}`,t(p));fe.length===0&&le.length===z.length+$.length&&n(!1)}finally{u(f,!1)}}En(r,{get title(){return t(R)},width:"600px",testId:"smoke-group-dialog",get open(){return n()},set open($){n($)},buttons:$=>{var le=qS(),fe=Ne(le),de=m(fe,!0),B=d(fe,2),oe=m(B,!0);S((K,X)=>{h(de,K),B.disabled=t(f)||!t(N),h(oe,X)},[()=>o("Cancel"),()=>o("Apply")]),re("click",fe,()=>n(!1)),re("click",B,()=>{M()}),v($,le)},children:($,le)=>{var fe=St(),de=Ne(fe);{var B=oe=>{var K=e0(),X=A(K);{var se=P=>{var ce=XS(),be=A(ce),ee=m(be,!0),he=d(be,2);{var G=Q=>{var q=$S(),Y=d(Ne(q)),ae=m(Y,!0);S(()=>h(ae,s().teamTag)),v(Q,q)};W(he,Q=>{s().teamTag&&Q(G)})}S(()=>h(ee,s().address)),v(P,ce)},j=P=>{var ce=du(),be=m(ce);S((ee,he)=>h(be,`${ee??""}
14
- ${he??""}`),[()=>a()?o("A new group takes the lowest free number."):"",()=>o("Changes are written to the detectors and take effect once each detector has picked them up.")]),v(P,ce)};W(X,P=>{s().kind==="team"?P(se):P(j,-1)})}var ne=d(X,2),ye=m(ne,!0),xe=d(ne,2);{var ie=P=>{var ce=du(),be=m(ce,!0);S(ee=>h(be,ee),[()=>o("Loading")]),v(P,ce)},Ae=c(()=>t(k)&&t(E).some(P=>!(P.ADDRESS in t(g)))),Te=P=>{var ce=QS(),be=m(ce,!0);S(ee=>h(be,ee),[()=>o("This interface has no smoke detector")]),v(P,ce)},me=P=>{var ce=JS();Xe(ce,21,()=>t(E),be=>be.ADDRESS,(be,ee)=>{const he=c(()=>b(t(ee).ADDRESS));var G=ZS(),Q=A(G);let q;var Y=A(Q),ae=d(Y,2),J=m(ae,!0),ve=d(ae,2),ge=m(ve,!0),te=d(ve,2),O=m(te,!0);S((U,I,F)=>{q=_t(Q,1,"hmm-smoke-member svelte-1spai3u",null,q,{"hmm-smoke-member-off":!t(he)}),Y.disabled=!t(he),Pr(Y,U),T(Y,"data-testid",`smoke-group-member-${t(ee).ADDRESS}`),h(J,I),h(ge,t(ee).ADDRESS),h(O,F)},[()=>t(l).includes(t(ee).ADDRESS),()=>i.nameOf(t(ee).ADDRESS),()=>t(he)?w(t(ee).ADDRESS):o("cannot be grouped - no GROUP parameters")]),re("change",Y,U=>x(t(ee).ADDRESS,U.currentTarget.checked)),v(be,G)}),v(P,ce)};W(xe,P=>{t(Ae)?P(ie):t(E).length===0?P(Te,1):P(me,-1)})}S(P=>h(ye,P),[()=>o("Members")]),v(oe,K)};W(de,oe=>{s()!==void 0&&oe(B)})}v($,fe)},$$slots:{buttons:!0,default:!0}}),ut()}Et(["click","change"]);var n0=y('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="team-apply"> </button>',1),r0=y('<p data-testid="team-none"> </p>'),s0=y("<option> </option>"),a0=y('<p class="hmm-team-members svelte-1ervkxt" data-testid="team-members"> </p>'),i0=y('<p class="hmm-team-empty svelte-1ervkxt" data-testid="team-empty"> </p>'),o0=y('<p><span class="hmm-mono"> </span> — TEAM_TAG <span class="hmm-mono"> </span></p> <label class="hmm-team-row svelte-1ervkxt"><span> </span> <select class="hmm-select" data-testid="team-select"><option> </option><!></select></label> <!> <!>',1);function l0(r,e){ct(e,!0);let n=H(e,"open",15,!1),s=H(e,"address",3,"");const a=Ot(),i=a.i18n.t;let o=C(We([])),l=C(""),f=C(!1);const p=c(()=>a.app.selectedInterface),_=c(()=>a.devices.index(t(p))),g=c(()=>t(_)?.get(s())),k=c(()=>t(g)?.TEAM_TAG??""),E=c(()=>t(g)?.TEAM??""),b=c(()=>t(o).filter(D=>(D.TEAM_TAG??"")===t(k)));ot(()=>{!n()||t(p)===""||s()===""||(u(l,t(E),!0),a.devices.teams(t(p)).then(D=>{u(o,D,!0)}))});function w(D){const N=D.TEAM_CHANNELS??[];return N.length===0?i("No data"):N.map(R=>a.nameOf(R)).join(", ")}async function x(){u(f,!0);const D=await a.devices.setTeam(t(p),s(),t(l));u(f,!1),D&&n(!1)}{const D=R=>{var M=n0(),z=Ne(M),$=m(z,!0),le=d(z,2),fe=m(le,!0);S((de,B)=>{h($,de),le.disabled=t(f)||t(k)===""||t(l)===t(E),h(fe,B)},[()=>i("Cancel"),()=>i("Apply")]),re("click",z,()=>n(!1)),re("click",le,()=>{x()}),v(R,M)};let N=c(()=>i("Team"));En(r,{get title(){return t(N)},width:"560px",testId:"team-dialog",get open(){return n()},set open(R){n(R)},buttons:D,children:(R,M)=>{var z=St(),$=Ne(z);{var le=de=>{var B=r0(),oe=m(B,!0);S(K=>h(oe,K),[()=>i("This channel does not belong to a team")]),v(de,B)},fe=de=>{var B=o0(),oe=Ne(B),K=A(oe),X=m(K,!0),se=d(K,2),j=m(se,!0),ne=d(oe,2),ye=A(ne),xe=m(ye,!0),ie=d(ye,2),Ae=A(ie),Te=m(Ae,!0);Ae.value=Ae.__value="";var me=d(Ae);Xe(me,17,()=>t(b),he=>he.ADDRESS,(he,G)=>{var Q=s0(),q=m(Q),Y={};S(ae=>{h(q,`${ae??""} (${t(G).ADDRESS??""})`),Y!==(Y=t(G).ADDRESS)&&(Q.value=(Q.__value=Y)??"")},[()=>a.nameOf(t(G).ADDRESS)]),v(he,Q)}),Xt(ie);var P=d(ne,2);{var ce=he=>{const G=c(()=>t(b).find(ae=>ae.ADDRESS===t(l)));var Q=St(),q=Ne(Q);{var Y=ae=>{var J=a0(),ve=m(J);S((ge,te)=>h(ve,`${ge??""}: ${te??""}`),[()=>i("Members"),()=>w(t(G))]),v(ae,J)};W(q,ae=>{t(G)&&ae(Y)})}v(he,Q)};W(P,he=>{t(l)!==""&&he(ce)})}var be=d(P,2);{var ee=he=>{var G=i0(),Q=m(G,!0);S(q=>h(Q,q),[()=>i("The interface knows no other team yet")]),v(he,G)};W(be,he=>{t(b).length===0&&he(ee)})}S((he,G)=>{h(X,s()),h(j,t(k)),h(xe,he),h(Te,G)},[()=>i("Team"),()=>i("Own team")]),kr(ie,()=>t(l),he=>u(l,he)),v(de,B)};W($,de=>{t(k)===""?de(le):de(fe,-1)})}v(R,z)},$$slots:{buttons:!0,default:!0}})}ut()}Et(["click"]);function qh(r,e){return Id(e,r.pair)?.seconds}function d0(r,e){return qh(r,e)===r.notUsedSeconds}function $h(r,e){const n=ph(e,r.pair),s=Nd(e,r.pair);if(!(!n||!s))return{values:s,exact:n.exact,seconds:n.seconds}}function c0(r,e){const n=[];for(const s of wo(r.description)){const a=r.description[s.unitParam],i=r.description[s.countParam];if(!a||!i||e.has(s.unitParam)||e.has(s.countParam))continue;const o=vh(i);n.push({pair:s,unitDescription:a,countDescription:i,writable:Jr(a)&&Jr(i),notUsedSeconds:o??gh(s),notUsedFromSpecial:o!==void 0})}if(n.length!==0)return{kind:"duration-pairs",id:"duration-pairs",covers:n.flatMap(s=>[s.pair.unitParam,s.pair.countParam]),pairs:n}}function Si(r){if(!Number.isFinite(r))return"—";if(r===0)return"0 s";if(r<1)return`${Math.round(r*1e3)} ms`;const e=[];let n=Math.round(r*10)/10;const s=Math.floor(n/3600);s>0&&(e.push(`${s} h`),n-=s*3600);const a=Math.floor(n/60);return a>0&&(e.push(`${a} min`),n-=a*60),n>0&&e.push(`${Math.round(n*10)/10} s`),e.join(" ")}const u0=["REFERENCE_RUNNING_TIME_TOP_BOTTOM","REFERENCE_RUNNING_TIME_BOTTOM_TOP","REFERENCE_RUNNING_TIME_SLATS"],f0=["CHANGE_OVER_DELAY","DELAY_COMPENSATION"],h0=["REFERENCE_RUN_COUNTER","ENDPOSITION_AUTO_DETECT"];function m0(r,e){if(r.source.kind==="seconds"){const i=e[r.source.param];return typeof i=="number"?i:void 0}const n=r.source.view,s=n.pair.units[Xh(n,e)],a=e[n.pair.countParam];if(!(s===void 0||typeof a!="number"))return Math.round(s.seconds*a*1e3)/1e3}function v0(r,e){if(r.source.kind==="seconds")return`${r.source.param} = ${String(e[r.source.param]??"—")}`;const n=r.source.view,s=n.pair.units[Xh(n,e)];return`${String(e[n.pair.countParam]??"—")} × ${s?.name??"—"}`}function p0(r,e){if(!(!Number.isFinite(e)||e<0)){if(r.source.kind==="seconds"){const n=nr(r.source.description,"MAX");return n!==void 0&&e>n?void 0:{values:{[r.source.param]:e},exact:!0,seconds:e}}return $h(r.source.view,e)}}function g0(r,e){const{description:n}=r,s=new Map(wo(n).map(f=>[f.name,f])),a=[],i=[];for(const f of u0){const p=n[f],_=s.get(f);if(p){a.push({id:f,source:{kind:"seconds",param:f,description:p},writable:Jr(p)}),i.push(f);continue}const g=_&&n[_.unitParam],k=_&&n[_.countParam];if(!_||!g||!k)continue;const E=vh(k),b={pair:_,unitDescription:g,countDescription:k,writable:Jr(g)&&Jr(k),notUsedSeconds:E??gh(_),notUsedFromSpecial:E!==void 0};a.push({id:f,source:{kind:"pair",view:b},writable:b.writable}),i.push(_.unitParam,_.countParam)}if(a.length===0||i.some(f=>e.has(f)))return;const o=cu(n,f0),l=cu(n,h0);return{kind:"blind-calibration",id:"blind-calibration",covers:[...i,...o.map(f=>f.param),...l.map(f=>f.param)],runningTimes:a,delays:o,extras:l}}function cu(r,e){return e.flatMap(n=>{const s=r[n];return s?[{param:n,description:s}]:[]})}function Xh(r,e){const n=e[r.pair.unitParam];return typeof n=="number"?n:r.pair.units.findIndex(s=>s.name===n)}function b0(r,e,n){const s=[];for(const[a,i]of Object.entries(r.description)){const o=Us(i);if(i.TYPE!=="ENUM"||!o||o.length===0||e.has(a))continue;const l=n.preset(a),f=l?_0(l.presets,o,n):E0(a,o,n);!f||f.length===0||s.push({param:a,description:i,options:f,writable:Jr(i),...l===void 0?{}:{presetId:l.id}})}if(s.length!==0)return{kind:"enum-options",id:"enum-options",covers:s.map(a=>a.param),fields:s}}function _0(r,e,n){const s=[];for(const a of r){const i=typeof a.value=="number"?a.value:Number(a.value);if(!Number.isInteger(i))return;s.push({value:i,label:Ed(a,o=>n.uiLabel(o)),raw:e[i]??"",named:!0})}return s}function E0(r,e,n){const s=[];let a=!1;for(const[i,o]of e.entries()){const l=n.optionByName(r,o),f=n.optionByIndex(r,i);l===void 0&&f!==void 0?(a=!0,s.push({value:i,label:f,raw:o,named:!0})):s.push({value:i,label:l??o,raw:o,named:l!==void 0})}return a?s:void 0}function ws(r,e){return`${r}_WP_${e}`}const y0=/^(\d+)_WP_(.+)$/,uu=["WEEKDAY","TIME","CONDITION","ASTRO_TYPE","ASTRO_OFFSET","LEVEL","LEVEL_2","DURATION","RAMP_TIME","OUTPUT_BEHAVIOUR","TARGET_CHANNELS"],S0=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];function w0(r,e){return typeof r=="number"&&(r&1<<e)!==0}function k0(r,e,n){const s=typeof r=="number"?r:0;return n?s|1<<e:s&~(1<<e)}function A0(r,e){const n=r[ws(e,"FIXED_HOUR")],s=r[ws(e,"FIXED_MINUTE")];return typeof n!="number"||typeof s!="number"?"":`${String(n).padStart(2,"0")}:${String(s).padStart(2,"0")}`}function T0(r,e){const n=/^(\d{1,2}):([0-5]\d)$/.exec(e.trim()),s=n?Number(n[1]):Number.NaN;if(!(!n||s>23))return{[ws(r,"FIXED_HOUR")]:s,[ws(r,"FIXED_MINUTE")]:Number(n[2])}}function R0(r,e){const n=r[ws(e,"WEEKDAY")];return typeof n!="number"||n===0}function x0(r,e){const{description:n}=r,s=new Map,a=[];for(const w of Object.keys(n)){const x=y0.exec(w),D=x?.[1],N=x?.[2];if(!x||D===void 0||N===void 0)continue;let R=s.get(D);R||(R=new Set,s.set(D,R)),R.add(N),a.push(w)}const i=[...s.keys()].sort((w,x)=>Number(w)-Number(x)),o=i[0],l=o===void 0?void 0:s.get(o);if(o===void 0||!l||!l.has("WEEKDAY")||a.some(w=>e.has(w)))return;const f=[...l].sort().join(",");for(const w of i)if([...s.get(w)??[]].sort().join(",")!==f)return;const p=new Map(wo(n).map(w=>[w.name,w])),_={},g=[],k=new Set,E=(w,x,D)=>{const N=n[ws(o,D[0]??"")];if(!(!N||D.some(R=>!l.has(R)))){g.push({id:w,kind:x,fields:D,description:N});for(const R of D)k.add(R)}};E("WEEKDAY","weekday",["WEEKDAY"]),E("TIME","time",["FIXED_HOUR","FIXED_MINUTE"]);for(const w of[...l].sort()){if(k.has(w)||!w.endsWith("_BASE"))continue;const x=w.slice(0,-5);if(!l.has(`${x}_FACTOR`))continue;let D=!0;for(const N of i){const R=p.get(`${N}_WP_${x}`);if(!R){D=!1;break}_[`${N}:${x}`]=R}D&&E(x,"duration",[w,`${x}_FACTOR`])}for(const w of[...l].sort())k.has(w)||E(w,n[ws(o,w)]?.TYPE==="ENUM"?"enum":"number",[w]);if(k.size!==l.size)return;g.sort((w,x)=>fu(w.id)-fu(x.id)||(w.id<x.id?-1:1));const b=n[ws(o,"WEEKDAY")];return{kind:"switch-week-profile",id:"switch-week-profile",covers:a,slots:i,columns:g,durations:_,writable:b!==void 0&&Jr(b)}}function fu(r){const e=uu.indexOf(r);return e===-1?uu.length:e}const Ji=["MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY","SUNDAY"],D0=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],hu=["ENDTIME","TIMEOUT"],mu=["TEMPERATURE","TEMPERATUR"],I0=/^(?:(P\d+)_)?([A-Z]+)_([A-Z]+)_(\d+)$/;function Qr(r,e,n){return`${r}_${e}_${n}`}function Xl(r,e,n,s,a){return{endTime:vu(e[Qr(n.endTimePrefix,s,a)]),value:vu(e[Qr(n.valuePrefix,s,a)])}}function N0(r,e){const n=[];for(const s of r.profiles)for(const a of r.days){let i=0,o=!1;for(let l=1;l<=r.slots;l+=1){const{endTime:f}=Xl(r,e,s,a,l);f!==void 0&&(o?f!==r.dayEnd&&n.push({profile:s.id,day:a,slot:l,code:"after-day-end"}):f<=i&&n.push({profile:s.id,day:a,slot:l,code:"not-increasing"}),f>=r.dayEnd&&(o=!0),i=f)}o||n.push({profile:s.id,day:a,slot:r.slots,code:"day-not-closed"})}return n}function C0(r,e,n,s,a){const i={};for(const o of a)if(!(o===s||!r.days.includes(o)))for(let l=1;l<=r.slots;l+=1)Qh(i,e,n,s,n,o,l);return i}function P0(r,e,n,s){const a={};for(const i of s)if(i.id!==n.id)for(const o of r.days)for(let l=1;l<=r.slots;l+=1)Qh(a,e,n,o,i,o,l);return a}function ri(r){if(r===void 0||!Number.isFinite(r)||r<0)return"";const e=Math.floor(r/60),n=Math.round(r%60);return`${String(e).padStart(2,"0")}:${String(n).padStart(2,"0")}`}function M0(r){const e=/^(\d{1,2}):([0-5]\d)$/.exec(r.trim());if(!e)return;const n=Number(e[1])*60+Number(e[2]);return n>1440?void 0:n}function O0(r,e){const{description:n}=r,s=[],a=new Map;let i=0;for(const b of Object.keys(n)){const w=I0.exec(b),x=w?.[3],D=w?.[2];if(!w||!x||!D||!Ji.includes(x)||!hu.includes(D)&&!mu.includes(D))continue;const N=w[1]??"";s.push(b);let R=a.get(N);R||(R=new Set,a.set(N,R)),R.add(D),i=Math.max(i,Number(w[4]))}if(s.length===0||i===0)return;const o=[];let l="",f="";for(const[b,w]of[...a].sort(([x],[D])=>x<D?-1:1)){const x=[...w].find(R=>hu.includes(R)),D=[...w].find(R=>mu.includes(R));if(w.size!==2||x===void 0||D===void 0||l!==""&&(x!==l||D!==f))return;l=x,f=D;const N=b===""?"":`${b}_`;o.push({id:b,endTimePrefix:`${N}${x}`,valuePrefix:`${N}${D}`})}const p=[];for(const b of o)for(const w of Ji)for(let x=1;x<=i;x+=1)p.push(Qr(b.endTimePrefix,w,x),Qr(b.valuePrefix,w,x));if(p.length!==s.length||p.some(b=>!(b in n)||e.has(b)))return;const _=o[0],g=_&&n[Qr(_.endTimePrefix,"MONDAY",1)],k=_&&n[Qr(_.valuePrefix,"MONDAY",1)],E=g===void 0?void 0:nr(g,"MAX");if(!(!g||!k||E===void 0))return{kind:"week-profile",id:"week-profile",covers:p,profiles:o,days:Ji,slots:i,endTimeField:l,valueField:f,endTimeDescription:g,valueDescription:k,dayEnd:E,writable:Jr(g)&&Jr(k)}}function Qh(r,e,n,s,a,i,o){const l=e[Qr(n.endTimePrefix,s,o)],f=e[Qr(n.valuePrefix,s,o)];l!==void 0&&(r[Qr(a.endTimePrefix,i,o)]=l),f!==void 0&&(r[Qr(a.valuePrefix,i,o)]=f)}function vu(r){return typeof r=="number"&&Number.isFinite(r)?r:void 0}const L0={optionByName:()=>{},optionByIndex:()=>{},preset:()=>{},uiLabel:r=>r},F0=[O0,x0,g0,c0,b0];function G0(r,e=L0){const n=[],s=new Set;for(const a of F0){const i=a(r,s,e);if(i){n.push(i);for(const o of i.covers)s.add(o)}}return n}function U0(r){return new Set(r.flatMap(e=>e.covers))}function B0(r){switch(r.TYPE){case"BOOL":return"bool";case"ACTION":return"action";case"ENUM":return"enum";case"INTEGER":return"integer";case"FLOAT":return"float";case"STRING":return"string";default:return"unknown"}}function Zh(r,e){const n=e?e.parameters.map(a=>a.name):xd(r),s=new Map((e?.parameters??[]).map(a=>[a.name,a]));return n.map(a=>{const i=r[a];if(!i)return;const o=fa(nr(i,"MIN"),i),l=fa(nr(i,"MAX"),i),f=s.get(a)?.preset,p=Us(i);return{name:a,description:i,kind:B0(i),writable:Jr(i),unit:ho(i),step:i.TYPE==="FLOAT"?.1:1,special:i.SPECIAL??[],visible:s.get(a)?.visible??!0,...o===void 0?{}:{min:o},...l===void 0?{}:{max:l},...p===void 0?{}:{valueList:p},...f===void 0?{}:{preset:f}}}).filter(a=>a!==void 0)}function li(r,e,n,s){const a=N_(r,e,n,{enumAs:w_(s.interfaceName),...s.writeAll===!0?{writeAll:!0}:{}});return{targets:[...s.targets],entries:a.changed.map(i=>({param:i,from:za(r[i],n[i]),to:za(a.values[i],n[i])})),values:a.values,skipped:a.skipped,problems:a.problems}}function H0(r,e,n){const s=(l,f,p)=>`putParamset(${l}←${f}, LINK, ${JSON.stringify(p)})`,a=e?.values??{},i=Object.keys(r.values).length>0,o=Object.keys(a).length>0;return{targets:n.map(l=>`${l.receiver}←${l.sender}`),entries:[...r.entries.map(l=>({...l,side:"receiver"})),...(e?.entries??[]).map(l=>({...l,side:"sender"}))],values:r.values,senderValues:a,skipped:[...r.skipped,...e?.skipped??[]],problems:[...r.problems,...e?.problems??[]],calls:[...i?n.map(l=>s(l.receiver,l.sender,r.values)):[],...o?n.map(l=>s(l.sender,l.receiver,a)):[]]}}function pu(r){const e=r.senderValues??{};return{...Object.keys(r.values).length>0?{receiverToSender:r.values}:{},...Object.keys(e).length>0?{senderToReceiver:e}:{}}}function za(r,e){if(r===void 0)return"—";const n=typeof r=="object"&&r!==null&&"explicitDouble"in r?r.explicitDouble:r;return e?.TYPE==="ENUM"&&typeof n=="number"?Us(e)?.[n]??String(n):typeof n=="boolean"?n?"true":"false":String(n)}function Ql(r,e,n){return Object.keys(r).map(s=>{const a=za(r[s],n[s]),i=za(e[s],n[s]);return{param:s,sent:a,stored:i,differs:a!==i}})}function Jh(r){return xd(r).filter(e=>Q_(e)?e!=="DUTY_CYCLE"||r[e]?.TYPE==="BOOL":!1)}function V0(r){const e=Object.entries(r.edits).filter(([s,a])=>r.suppressed.includes(s)!==a).sort(([s],[a])=>s.localeCompare(a)),n=s=>s?r.labels.suppressed:r.labels.unsuppressed;return{targets:[r.address],entries:e.map(([s,a])=>({param:s,from:n(!a),to:n(a)})),values:{},skipped:[],problems:[],calls:e.map(([s,a])=>X1(r.address,s,a))}}const z0=[ci,"UI_TEMPLATE"];function tl(r,e={}){const n=e.expert===!0,s=n?{}:e.profile?.params??{},a=n?[]:e.metadata?.parameterOrder??[],i=n?{}:e.metadata?.optionPresets??{},o=e.presets??{},l=Zh(r).filter(p=>!z0.includes(p.name)),f=new Map(a.map((p,_)=>[p,_]));return l.sort((p,_)=>(f.get(p.name)??Number.MAX_SAFE_INTEGER)-(f.get(_.name)??Number.MAX_SAFE_INTEGER)),l.map(p=>{const _=s[p.name],g=o[i[p.name]??""];return{...p,...g===void 0?{}:{preset:g},fixedByProfile:_?.kind==="fixed",..._?.kind==="list"?{allowed:_.values}:{},..._?.kind==="range"?{range:{min:_.min,max:_.max}}:{}}})}function gu(r,e){const n=r.name;return n[e]??n.en??n.de??r.key}function j0(r,e){const n=r.description;return n[e]??n.en??n.de??""}var W0=y('<span class="hmm-param-id svelte-1qr2qb3"> </span>'),K0=y('<input type="checkbox" class="svelte-1qr2qb3"/>'),nl=y("<option> </option>"),Y0=y('<select class="hmm-select hmm-param-enum svelte-1qr2qb3"></select>'),q0=y('<input class="hmm-input hmm-param-number svelte-1qr2qb3" type="number"/>'),$0=y('<select class="hmm-select hmm-param-special svelte-1qr2qb3"><option> </option><!></select>'),X0=y('<select class="hmm-select hmm-param-preset svelte-1qr2qb3"><option>…</option><!></select>'),Q0=y("<!> <!> <!>",1),Z0=y('<input class="hmm-input hmm-param-text svelte-1qr2qb3" type="text"/>'),J0=y('<span class="hmm-param-unit svelte-1qr2qb3"> </span>'),ew=y("<span> </span>"),tw=y('<div class="hmm-param-set svelte-1qr2qb3"><button type="button" class="hmm-button">setValue</button></div>'),nw=y('<label class="hmm-param-suppress svelte-1qr2qb3"><input type="checkbox"/> <span> </span></label>'),rw=y('<div class="hmm-param-flag svelte-1qr2qb3"><span class="hmm-param-ro"> </span></div>'),sw=y('<div class="hmm-param-range svelte-1qr2qb3"> </div>'),aw=y('<div class="hmm-param-default svelte-1qr2qb3"> </div>'),iw=y('<p class="hmm-param-help hmm-param-table-wide svelte-1qr2qb3"> </p>'),ow=y('<div><div class="hmm-param-label svelte-1qr2qb3"><span> </span> <!></div> <div class="hmm-param-control svelte-1qr2qb3"><!> <!> <!></div> <!> <!> <!> <!> <!> <!></div>');function Da(r,e){ct(e,!0);let n=H(e,"help",3,void 0),s=H(e,"valueLabel",3,void 0),a=H(e,"presetLabel",3,void 0),i=H(e,"valueState",3,void 0),o=H(e,"onset",3,void 0),l=H(e,"changed",3,!1),f=H(e,"disabled",3,!1),p=H(e,"entry",3,!1),_=H(e,"suppressed",3,void 0),g=H(e,"onsuppress",3,void 0),k=H(e,"suppressLabel",3,""),E=H(e,"suppressTitle",3,void 0),b=H(e,"suppressChanged",3,!1);const w=Ot(),x=w.i18n.t,D=c(()=>f()||!e.field.writable),N=c(()=>e.field.kind==="integer"||e.field.kind==="float"),R=c(()=>t(N)?fa(X(e.value),e.field.description):e.value),M=c(()=>t(R)===void 0||t(R)===null?"":String(t(R))),z=c(()=>X(e.value)??-1),$=c(()=>e.field.special.find(V=>V.VALUE===X(e.value)));let le=C(void 0);const fe=c(()=>t($)!==void 0&&!p()&&(t(le)===void 0||t(le).on!==e.value));let de=C(void 0),B;ot(()=>{const V=X(e.value);V!==void 0&&t($)===void 0&&(B=V)});const oe=c(()=>e.field.preset?.presets.find(V=>V.value===X(e.value))),K=c(()=>e.label!==e.field.name);function X(V){if(typeof V=="number")return V;if(typeof V=="string"&&V.trim()!==""&&Number.isFinite(Number(V)))return Number(V)}function se(V){if(V==="")return;const L=kc(Number(V),e.field.description);L!==void 0&&Number.isFinite(L)&&e.onchange(L)}function j(V){return s()?s()(V):V}function ne(V){const L=j(V);return L!==V?L:w.meta.specialLabel(e.field.name,V)}function ye(V){if(V===void 0||e.field.special.some(Pe=>Pe.VALUE===V))return!1;const L=fa(V,e.field.description);return typeof L=="number"&&(e.field.min===void 0||L>=e.field.min)&&(e.field.max===void 0||L<=e.field.max)}function xe(){const V=X(e.field.description.DEFAULT);return ye(V)?V:ye(B)?B:kc(e.field.min??0,e.field.description)??0}async function ie(V){const L=e.field.special.find(Pe=>Pe.ID===V);if(L){u(le,void 0),e.onchange(L.VALUE);return}u(le,{on:e.value,draft:xe()},!0),await Ma(),t(de)?.focus(),t(de)?.select()}function Ae(V){const L=[x("Last change: {time}",{time:V.lc===void 0?"–":ca(V.lc)}),x("Last report: {time}",{time:ca(V.ts)})];return V.confirmed||L.push(x("Restored by the system from its own file; no device has reported it since the system started.")),L.push(x("The openccu-lite system's clock")),L.join(`
15
- `)}var Te=ow();let me;var P=A(Te),ce=A(P),be=m(ce,!0),ee=d(ce,2);{var he=V=>{var L=W0(),Pe=m(L,!0);S(()=>h(Pe,e.field.name)),v(V,L)};W(ee,V=>{t(K)&&V(he)})}var G=d(P,2),Q=A(G);{var q=V=>{var L=K0();S(()=>{Pr(L,e.value===!0||e.value==="true"||e.value===1),L.disabled=t(D),T(L,"aria-label",e.label)}),re("change",L,Pe=>e.onchange(Pe.currentTarget.checked)),v(V,L)},Y=V=>{var L=Y0();Xe(L,22,()=>e.field.valueList??[],Ge=>Ge,(Ge,qe,we,Ce)=>{var Oe=nl(),Be=m(Oe,!0),pe={};S((De,Ue)=>{h(Be,De),pe!==(pe=Ue)&&(Oe.value=(Oe.__value=pe)??"")},[()=>j(qe),()=>String(t(we))]),v(Ge,Oe)});var Pe;Xt(L),S(Ge=>{L.disabled=t(D),T(L,"aria-label",e.label),Pe!==(Pe=Ge)&&(L.value=(L.__value=Pe)??"",Bn(L,Pe))},[()=>String(t(z))]),re("change",L,Ge=>e.onchange(Number(Ge.currentTarget.value))),v(V,L)},ae=V=>{var L=Q0(),Pe=Ne(L);{var Ge=Be=>{var pe=q0();fn(pe,De=>u(de,De),()=>t(de)),S(De=>{T(pe,"min",e.field.min),T(pe,"max",e.field.max),T(pe,"step",e.field.step),pe.disabled=t(D),T(pe,"aria-label",e.label),ln(pe,De)},[()=>t($)===void 0?t(M):String(fa(t(le)!==void 0&&t(le).on===e.value?t(le).draft:xe(),e.field.description))]),re("input",pe,De=>se(De.currentTarget.value)),v(Be,pe)};W(Pe,Be=>{t(fe)||Be(Ge)})}var qe=d(Pe,2);{var we=Be=>{var pe=$0(),De=A(pe),Ue=m(De,!0);De.value=De.__value="";var Fe=d(De);Xe(Fe,17,()=>e.field.special,tt=>tt.ID,(tt,ft)=>{var dt=nl(),ke=m(dt,!0),Le={};S($e=>{h(ke,$e),Le!==(Le=t(ft).ID)&&(dt.value=(dt.__value=Le)??"")},[()=>ne(t(ft).ID)]),v(tt,dt)});var Ye;Xt(pe),S(tt=>{pe.disabled=t(D),T(pe,"aria-label",`${e.label} SPECIAL`),h(Ue,tt),Ye!==(Ye=t(fe)?t($)?.ID??"":"")&&(pe.value=(pe.__value=Ye)??"",Bn(pe,Ye))},[()=>x("Enter value")]),re("change",pe,tt=>{ie(tt.currentTarget.value)}),v(Be,pe)};W(qe,Be=>{e.field.special.length>0&&Be(we)})}var Ce=d(qe,2);{var Oe=Be=>{var pe=X0(),De=A(pe);De.value=De.__value="";var Ue=d(De);Xe(Ue,17,()=>e.field.preset.presets,Ye=>String(Ye.value),(Ye,tt,ft,dt)=>{var ke=nl(),Le=m(ke,!0),$e={};S((at,lt)=>{h(Le,at),$e!==($e=lt)&&(ke.value=(ke.__value=$e)??"")},[()=>Ed(t(tt),a()??j),()=>String(t(tt).value)]),v(Ye,ke)});var Fe;Xt(pe),S(Ye=>{pe.disabled=t(D),T(pe,"aria-label",`${e.label} presets`),Fe!==(Fe=Ye)&&(pe.value=(pe.__value=Fe)??"",Bn(pe,Fe))},[()=>t(oe)===void 0?"":String(t(oe).value)]),re("change",pe,Ye=>{const tt=e.field.preset?.presets.find(ft=>String(ft.value)===Ye.currentTarget.value);tt!==void 0&&e.onchange(tt.value)}),v(Be,pe)};W(Ce,Be=>{e.field.preset&&Be(Oe)})}v(V,L)},J=V=>{var L=Z0();S(()=>{L.disabled=t(D),T(L,"aria-label",e.label),ln(L,t(M))}),re("input",L,Pe=>e.onchange(Pe.currentTarget.value)),v(V,L)};W(Q,V=>{e.field.kind==="bool"||e.field.kind==="action"?V(q):e.field.kind==="enum"?V(Y,1):t(N)?V(ae,2):V(J,-1)})}var ve=d(Q,2);{var ge=V=>{var L=J0(),Pe=m(L,!0);S(()=>h(Pe,e.field.unit)),v(V,L)};W(ve,V=>{e.field.unit!==""&&!t(fe)&&V(ge)})}var te=d(ve,2);{var O=V=>{var L=ew();let Pe;var Ge=m(L,!0);S((qe,we,Ce)=>{Pe=_t(L,1,"hmm-param-since svelte-1qr2qb3",null,Pe,{"hmm-param-restored":!i().confirmed}),T(L,"title",qe),T(L,"data-testid",`since-${e.field.name}`),T(L,"data-confirmed",we),h(Ge,Ce)},[()=>Ae(i()),()=>String(i().confirmed),()=>i().confirmed?x("since {time}",{time:ca(i().lc??i().ts)}):x("restored")]),v(V,L)};W(te,V=>{i()&&V(O)})}var U=d(G,2);{var I=V=>{var L=tw(),Pe=m(L);S(()=>{Pe.disabled=t(D),T(Pe,"data-testid",`set-${e.field.name}`)}),re("click",Pe,()=>o()()),v(V,L)};W(U,V=>{o()&&V(I)})}var F=d(U,2);{var Ee=V=>{var L=nw(),Pe=A(L),Ge=d(Pe,2),qe=m(Ge,!0);S(()=>{T(L,"title",E()),Pr(Pe,_()===!0),T(Pe,"data-testid",`suppress-${e.field.name}`),h(qe,k())}),re("change",Pe,we=>g()(we.currentTarget.checked)),v(V,L)};W(F,V=>{g()&&V(Ee)})}var Ie=d(F,2);{var Me=V=>{var L=rw(),Pe=A(L),Ge=m(Pe,!0);S((qe,we)=>{T(Pe,"title",qe),h(Ge,we)},[()=>x("Read-only"),()=>x("ro")]),v(V,L)};W(Ie,V=>{e.field.writable||V(Me)})}var Ve=d(Ie,2);{var ze=V=>{var L=sw(),Pe=m(L);S(()=>h(Pe,`${e.field.min??"−∞"??""} … ${e.field.max??"∞"??""}`)),v(V,L)};W(Ve,V=>{(e.field.min!==void 0||e.field.max!==void 0)&&!t(fe)&&V(ze)})}var nt=d(Ve,2);{var Ze=V=>{const L=c(()=>e.field.special.find(qe=>qe.VALUE===X(e.field.description.DEFAULT)));var Pe=aw(),Ge=m(Pe,!0);S(qe=>h(Ge,qe),[()=>x("default {value}",{value:t(L)?ne(t(L).ID):String(e.field.description.DEFAULT)})]),v(V,Pe)};W(nt,V=>{e.field.description.DEFAULT!==void 0&&V(Ze)})}var _e=d(nt,2);{var Se=V=>{var L=iw(),Pe=m(L,!0);S(()=>h(Pe,n())),v(V,L)};W(_e,V=>{n()&&V(Se)})}S(()=>{me=_t(Te,1,"hmm-param hmm-param-table-row svelte-1qr2qb3",null,me,{"hmm-param-changed":l()||b()}),T(Te,"data-testid",`param-${e.field.name}`),T(ce,"title",e.field.name),h(be,e.label)}),v(r,Te),ut()}Et(["change","input","click"]);var lw=y('<button type="button" class="hmm-button" data-testid="write-stage"> </button>'),dw=y('<button type="button" class="hmm-button"> </button> <!> <button type="button" class="hmm-button" data-testid="write-confirm"> </button>',1),cw=y('<p class="hmm-preview-call svelte-1aaq6az"> </p>'),uw=y('<p class="hmm-preview-call svelte-1aaq6az">putParamset(<span class="hmm-mono"> </span>, <span class="hmm-mono"> </span>, <span class="hmm-mono"> </span>)</p>'),bu=y("<li> </li>"),fw=y('<ul class="hmm-preview-warnings svelte-1aaq6az" data-testid="preview-warnings"></ul>'),hw=y('<p data-testid="preview-empty"> </p>'),_u=y('<span class="hmm-preview-side svelte-1aaq6az"> </span>'),mw=y('<tr><td class="hmm-mono svelte-1aaq6az"> <!></td><td class="svelte-1aaq6az"> </td><td class="hmm-preview-new svelte-1aaq6az"> </td></tr>'),vw=y('<table class="hmm-preview-table svelte-1aaq6az"><thead><tr><th class="svelte-1aaq6az"> </th><th class="svelte-1aaq6az"> </th><th class="svelte-1aaq6az"> </th></tr></thead><tbody></tbody></table> <p class="hmm-preview-count svelte-1aaq6az"><!></p>',1),pw=y('<ul class="hmm-preview-problems svelte-1aaq6az" data-testid="preview-problems"></ul>'),gw=y('<tr><td class="hmm-mono svelte-1aaq6az"> <!></td><td class="svelte-1aaq6az"> </td><td class="svelte-1aaq6az"> </td></tr>'),bw=y('<p class="hmm-preview-warn svelte-1aaq6az" data-testid="readback-warning"> </p>'),_w=y('<table class="hmm-preview-table svelte-1aaq6az" data-testid="preview-readback"><thead><tr><th class="svelte-1aaq6az"> </th><th class="svelte-1aaq6az"> </th><th class="svelte-1aaq6az"> </th></tr></thead><tbody></tbody></table> <!>',1),Ew=y('<li><span class="hmm-mono"> </span> </li>'),yw=y('<ul class="hmm-preview-results svelte-1aaq6az" data-testid="preview-results"></ul>'),Sw=y("<!> <!> <!> <!> <!> <!>",1);function Zl(r,e){ct(e,!0);let n=H(e,"open",15,!1),s=H(e,"preview",3,void 0),a=H(e,"paramset",3,"MASTER"),i=H(e,"warnings",19,()=>[]),o=H(e,"writing",3,!1),l=H(e,"results",19,()=>[]),f=H(e,"readBack",19,()=>[]),p=H(e,"onstage",3,void 0),_=H(e,"confirmLabel",3,void 0),g=H(e,"countText",3,void 0);const E=Ot().i18n.t,b=c(()=>s()===void 0||s().entries.length===0),w=520;{const x=N=>{var R=dw(),M=Ne(R),z=m(M,!0),$=d(M,2);{var le=B=>{var oe=lw(),K=m(oe,!0);S(X=>{oe.disabled=o()||t(b),h(K,X)},[()=>E("Add to pending changes")]),re("click",oe,()=>p()()),v(B,oe)};W($,B=>{p()&&B(le)})}var fe=d($,2),de=m(fe,!0);S((B,oe)=>{h(z,B),fe.disabled=o()||t(b),h(de,oe)},[()=>E("Close"),()=>_()??E("Write")]),re("click",M,()=>n(!1)),re("click",fe,()=>e.onconfirm()),v(N,R)};let D=c(()=>E("Preview"));En(r,{get title(){return t(D)},width:"960px",minWidth:360,minHeight:w,testId:"write-preview",get open(){return n()},set open(N){n(N)},buttons:x,children:(N,R)=>{var M=St(),z=Ne(M);{var $=le=>{var fe=Sw(),de=Ne(fe);{var B=P=>{var ce=St(),be=Ne(ce);Xe(be,18,()=>s().calls,ee=>ee,(ee,he,G)=>{var Q=cw(),q=m(Q,!0);S(Y=>{T(Q,"data-testid",Y),h(q,he)},[()=>`preview-call-${String(t(G))}`]),v(ee,Q)}),v(P,ce)},oe=P=>{var ce=St(),be=Ne(ce);Xe(be,16,()=>s().targets,ee=>ee,(ee,he)=>{var G=uw(),Q=d(A(G)),q=m(Q,!0),Y=d(Q,2),ae=m(Y,!0),J=d(Y,2),ve=m(J,!0);S(ge=>{T(G,"data-testid",`preview-call-${he}`),h(q,he),h(ae,a()),h(ve,ge)},[()=>JSON.stringify(s().values)]),v(ee,G)}),v(P,ce)};W(de,P=>{s().calls?P(B):P(oe,-1)})}var K=d(de,2);{var X=P=>{var ce=fw();Xe(ce,20,i,be=>be,(be,ee)=>{var he=bu(),G=m(he,!0);S(()=>h(G,ee)),v(be,he)}),v(P,ce)};W(K,P=>{i().length>0&&P(X)})}var se=d(K,2);{var j=P=>{var ce=hw(),be=m(ce,!0);S(ee=>h(be,ee),[()=>E("Nothing has changed - nothing will be written")]),v(P,ce)},ne=P=>{var ce=vw(),be=Ne(ce),ee=A(be),he=A(ee),G=A(he),Q=m(G,!0),q=d(G),Y=m(q,!0),ae=d(q),J=m(ae,!0),ve=d(ee);Xe(ve,21,()=>s().entries,I=>`${I.side??""}:${I.param}`,(I,F)=>{var Ee=mw(),Ie=A(Ee),Me=A(Ie),Ve=d(Me);{var ze=V=>{var L=_u(),Pe=m(L,!0);S(Ge=>h(Pe,Ge),[()=>t(F).side==="sender"?E("Sender"):E("Receiver")]),v(V,L)};W(Ve,V=>{t(F).side&&V(ze)})}var nt=d(Ie),Ze=m(nt,!0),_e=d(nt),Se=m(_e,!0);S(()=>{T(Ee,"data-testid",t(F).side==="sender"?`preview-sender-${t(F).param}`:`preview-${t(F).param}`),h(Me,t(F).param),h(Ze,t(F).from),h(Se,t(F).to)}),v(I,Ee)});var ge=d(be,2),te=A(ge);{var O=I=>{var F=Cn();S(()=>h(F,g())),v(I,F)},U=I=>{var F=Cn();S(Ee=>h(F,`${Ee??""} ×
16
- ${s().targets.length??""}`),[()=>E("{count} parameters will be written",{},s().entries.length)]),v(I,F)};W(te,I=>{g()!==void 0?I(O):I(U,-1)})}S((I,F,Ee)=>{h(Q,I),h(Y,F),h(J,Ee)},[()=>E("Parameter"),()=>E("Current value"),()=>E("New value")]),v(P,ce)};W(se,P=>{t(b)?P(j):P(ne,-1)})}var ye=d(se,2);{var xe=P=>{var ce=pw();Xe(ce,21,()=>s().problems,be=>`${be.param}-${be.code}`,(be,ee)=>{var he=bu(),G=m(he);S(()=>h(G,`${t(ee).param??""}: ${t(ee).message??""}`)),v(be,he)}),v(P,ce)};W(ye,P=>{s().problems.length>0&&P(xe)})}var ie=d(ye,2);{var Ae=P=>{var ce=_w(),be=Ne(ce),ee=A(be),he=A(ee),G=A(he),Q=m(G,!0),q=d(G),Y=m(q,!0),ae=d(q),J=m(ae,!0),ve=d(ee);Xe(ve,21,f,U=>`${U.side??""}:${U.param}`,(U,I)=>{var F=gw();let Ee;var Ie=A(F),Me=A(Ie),Ve=d(Me);{var ze=V=>{var L=_u(),Pe=m(L,!0);S(Ge=>h(Pe,Ge),[()=>t(I).side==="sender"?E("Sender"):E("Receiver")]),v(V,L)};W(Ve,V=>{t(I).side&&V(ze)})}var nt=d(Ie),Ze=m(nt,!0),_e=d(nt),Se=m(_e,!0);S(()=>{T(F,"data-testid",t(I).side==="sender"?`readback-sender-${t(I).param}`:`readback-${t(I).param}`),Ee=_t(F,1,"svelte-1aaq6az",null,Ee,{"hmm-preview-differs":t(I).differs}),h(Me,t(I).param),h(Ze,t(I).sent),h(Se,t(I).stored)}),v(U,F)});var ge=d(be,2);{var te=U=>{var I=bw(),F=m(I,!0);S(Ee=>h(F,Ee),[()=>E("The interface answered ok but stored something else")]),v(U,I)},O=c(()=>f().some(U=>U.differs));W(ge,U=>{t(O)&&U(te)})}S((U,I,F)=>{h(Q,U),h(Y,I),h(J,F)},[()=>E("Parameter"),()=>E("What was sent"),()=>E("Read back")]),v(P,ce)};W(ie,P=>{f().length>0&&P(Ae)})}var Te=d(ie,2);{var me=P=>{var ce=yw();Xe(ce,21,l,be=>`${be.address}-${be.peer??""}-${be.paramset}`,(be,ee)=>{var he=Ew();let G;var Q=A(he),q=m(Q),Y=d(Q);S(()=>{G=_t(he,1,"svelte-1aaq6az",null,G,{"hmm-preview-failed":!t(ee).ok}),h(q,`${t(ee).address??""}${t(ee).peer===void 0?"":`←${t(ee).peer}`}`),h(Y,` ${t(ee).ok?"✔":`✕ ${t(ee).faultString??""}`}`)}),v(be,he)}),v(P,ce)};W(Te,P=>{l().length>0&&P(me)})}v(le,fe)};W(z,le=>{s()&&le($)})}v(N,M)},$$slots:{buttons:!0,default:!0}})}ut()}Et(["click"]);function eo(r,e){if(!r)return;const n=r;return n[e]??n.en??n.de}function ww(r){return r<1?`${String(Math.round(r*1e3))} ms`:r<60?`${String(r)} s`:r<3600?`${String(Math.round(r/60*100)/100)} min`:`${String(Math.round(r/3600*100)/100)} h`}function kw(r,e,n){const s=eo(r.label,e);return s!==void 0?s:"seconds"in r?ww(r.seconds):n(r.special==="notActive"?"Not active":r.special==="permanent"?"Permanent":"Enter value")}function Aw(r,e,n){const s=Id(e,n);if(s===void 0)return-1;const a=r.findIndex(i=>"seconds"in i?!s.maximal&&Math.abs(i.seconds-s.seconds)<1e-6:i.special==="notActive"?s.seconds===0:i.special==="permanent"?s.maximal:!1);return a>=0?a:r.findIndex(i=>"special"in i&&i.special==="enterValue")}function Tw(r,e){if("seconds"in r)return Nd(r.seconds,e);if(r.special==="notActive")return{[e.unitParam]:0,[e.countParam]:0};if(r.special==="permanent")return{[e.unitParam]:e.units.length-1,[e.countParam]:e.maxCount}}function em(r,e){if(r===e)return!0;if(typeof r=="boolean"||typeof e=="boolean")return!!r==!!e;const n=Number(r),s=Number(e);return!Number.isNaN(n)&&!Number.isNaN(s)&&n===s}function Rw(r,e=[]){return r.flatMap(n=>e.filter(s=>s.id===n))}function xw(r,e,n){return r.findIndex(s=>Object.entries(s.values).every(([a,i])=>!(a in n)||em(e[a],i)))}function Dw(r,e){return Object.fromEntries(Object.entries(r.values).filter(([n])=>n in e))}function Iw(r,e){return r.presets.findIndex(n=>em(n.value,e)||String(n.value)===String(e))}var Nw=y('<h5 class="hmm-link-press hmm-param-table-wide svelte-1fgjxm" data-testid="link-easy-press"> </h5>'),Eu=y('<option disabled="">—</option>'),rl=y("<option> </option>"),Cw=y('<select class="hmm-select svelte-1fgjxm"><!><!></select>'),Pw=y('<div><span class="hmm-link-easy-label svelte-1fgjxm"> </span> <!></div> <!>',1),Mw=y('<div><span class="hmm-link-easy-label svelte-1fgjxm"> </span> <select class="hmm-select svelte-1fgjxm"><!><option> </option></select></div> <!>',1),Ow=y('<div class="hmm-link-easy-row hmm-param-table-row svelte-1fgjxm" data-testid="easy-subset"><span class="hmm-link-easy-label svelte-1fgjxm"> </span> <select class="hmm-select svelte-1fgjxm"><!><!></select></div>'),Lw=y("<!> <!>",1),Fw=y('<div class="hmm-link-easy hmm-param-table-span"></div>');function tm(r,e){ct(e,!0);let n=H(e,"subsets",19,()=>[]),s=H(e,"testId",3,"easy-form");const a=Ot(),i=a.i18n.t,o=c(()=>a.i18n.language);let l=C(We({}));function f(N){const R=N===void 0?"":N.kind==="time"?N.pair.unitParam:N.kind==="param"?N.param:"";return R.startsWith("SHORT_")?"SHORT":R.startsWith("LONG_")?"LONG":void 0}const p=c(()=>e.form.some(N=>f(N)==="SHORT")&&e.form.some(N=>f(N)==="LONG"));function _(N){if(!t(p))return;const R=f(e.form[N]),M=N===0?void 0:f(e.form[N-1]);if(!(R===void 0||R===M))return i(R==="SHORT"?"Short key press":"Long key press")}function g(N,R){return eo(N.label,t(o))??a.meta.parameterLabel(R,e.channelType)}function k(N){return N.option===void 0?void 0:e.presets[N.option]}let E=C(We({}));function b(N,R,M){const z=R.presets[M];u(E,{...t(E),[N.param]:z===void 0},!0),z!==void 0&&w(N,z.value)}function w(N,R){e.onchange(Object.fromEntries([N.param,...N.also].map(M=>[M,R])))}function x(N,R){const M=(e.timeSelectors[N.selector]??[])[R];if(M===void 0)return;const z=Tw(M,N.pair);u(l,{...t(l),[N.pair.name]:z===void 0},!0),z!==void 0&&e.onchange(z)}var D=Fw();Xe(D,23,()=>e.form,N=>N.kind==="time"?N.pair.name:N.kind==="param"?N.param:`subset-${String(N.subsets)}`,(N,R,M)=>{const z=c(()=>_(t(M)));var $=Lw(),le=Ne($);{var fe=X=>{var se=Nw(),j=m(se,!0);S(()=>h(j,t(z))),v(X,se)};W(le,X=>{t(z)&&X(fe)})}var de=d(le,2);{var B=X=>{const se=c(()=>e.timeSelectors[t(R).selector]??[]),j=c(()=>Aw(t(se),e.values,t(R).pair)),ne=c(()=>t(se).findIndex(G=>"special"in G&&G.special==="enterValue")),ye=c(()=>t(l)[t(R).pair.name]===!0||t(j)>=0&&t(j)===t(ne)||t(se).length===0),xe=c(()=>g(t(R),t(R).pair.countParam));var ie=Pw(),Ae=Ne(ie);let Te;var me=A(Ae),P=m(me,!0),ce=d(me,2);{var be=G=>{var Q=Cw(),q=A(Q);{var Y=ve=>{var ge=Eu();ge.value=ge.__value="-1",v(ve,ge)};W(q,ve=>{t(j)<0&&ve(Y)})}var ae=d(q);Xe(ae,17,()=>t(se),co,(ve,ge,te)=>{var O=rl(),U=m(O,!0),I={};S((F,Ee)=>{h(U,F),I!==(I=Ee)&&(O.value=(O.__value=I)??"")},[()=>kw(t(ge),t(o),i),()=>String(te)]),v(ve,O)});var J;Xt(Q),S(ve=>{T(Q,"aria-label",t(xe)),T(Q,"data-testid",`easy-time-select-${t(R).pair.name}`),J!==(J=ve)&&(Q.value=(Q.__value=J)??"",Bn(Q,J))},[()=>String(t(ye)&&t(ne)>=0?t(ne):t(j))]),re("change",Q,ve=>x(t(R),Number(ve.currentTarget.value))),v(G,Q)};W(ce,G=>{t(se).length>0&&G(be)})}var ee=d(Ae,2);{var he=G=>{var Q=St(),q=Ne(Q);Xe(q,16,()=>[t(R).pair.unitParam,t(R).pair.countParam],Y=>Y,(Y,ae)=>{const J=c(()=>e.fields.get(ae));var ve=St(),ge=Ne(ve);{var te=O=>{{let U=c(()=>e.values[ae]??t(J).description.DEFAULT),I=c(()=>a.meta.parameterLabel(ae,e.channelType)),F=c(()=>a.meta.parameterHelp(ae,e.channelType)),Ee=c(()=>e.changed(ae));Da(O,{get field(){return t(J)},get value(){return t(U)},get label(){return t(I)},get help(){return t(F)},get changed(){return t(Ee)},valueLabel:Ie=>a.meta.valueLabel(ae,Ie,e.channelType),presetLabel:Ie=>a.meta.uiLabel(Ie),onchange:Ie=>e.onchange({[ae]:Ie})})}};W(ge,O=>{t(J)&&O(te)})}v(Y,ve)}),v(G,Q)};W(ee,G=>{t(ye)&&G(he)})}S(G=>{Te=_t(Ae,1,"hmm-link-easy-row hmm-param-table-row svelte-1fgjxm",null,Te,{"hmm-param-changed":G}),T(Ae,"data-testid",`easy-time-${t(R).pair.name}`),h(P,t(xe))},[()=>e.changed(t(R).pair.unitParam)||e.changed(t(R).pair.countParam)]),v(X,ie)},oe=X=>{const se=c(()=>e.fields.get(t(R).param)),j=c(()=>k(t(R)));var ne=St(),ye=Ne(ne);{var xe=Ae=>{const Te=c(()=>e.values[t(R).param]??t(se).description.DEFAULT),me=c(()=>Iw(t(j),t(Te))),P=c(()=>t(E)[t(R).param]===!0||t(me)<0),ce=c(()=>g(t(R),t(R).param));var be=Mw(),ee=Ne(be);let he;var G=A(ee),Q=m(G,!0),q=d(G,2),Y=A(q);Xe(Y,17,()=>t(j).presets,co,(O,U,I)=>{var F=rl(),Ee=m(F,!0),Ie={};S((Me,Ve)=>{h(Ee,Me),Ie!==(Ie=Ve)&&(F.value=(F.__value=Ie)??"")},[()=>Ed(t(U),Me=>a.meta.uiLabel(Me)),()=>String(I)]),v(O,F)});var ae=d(Y),J=m(ae,!0);ae.value=ae.__value="-1";var ve;Xt(q);var ge=d(ee,2);{var te=O=>{{let U=c(()=>a.meta.parameterLabel(t(R).param,e.channelType)),I=c(()=>a.meta.parameterHelp(t(R).param,e.channelType)),F=c(()=>e.changed(t(R).param));Da(O,{get field(){return t(se)},get value(){return t(Te)},entry:!0,get label(){return t(U)},get help(){return t(I)},get changed(){return t(F)},valueLabel:Ee=>a.meta.valueLabel(t(R).param,Ee,e.channelType),presetLabel:Ee=>a.meta.uiLabel(Ee),onchange:Ee=>w(t(R),Ee)})}};W(ge,O=>{t(P)&&O(te)})}S((O,U,I)=>{he=_t(ee,1,"hmm-link-easy-row hmm-param-table-row svelte-1fgjxm",null,he,{"hmm-param-changed":O}),T(ee,"data-testid",`easy-preset-${t(R).param}`),h(Q,t(ce)),T(q,"aria-label",t(ce)),T(q,"data-testid",`easy-preset-select-${t(R).param}`),h(J,U),ve!==(ve=I)&&(q.value=(q.__value=ve)??"",Bn(q,ve))},[()=>e.changed(t(R).param),()=>i("Enter value"),()=>String(t(P)?-1:t(me))]),re("change",q,O=>b(t(R),t(j),Number(O.currentTarget.value))),v(Ae,be)},ie=Ae=>{{let Te=c(()=>e.values[t(R).param]??t(se).description.DEFAULT),me=c(()=>g(t(R),t(R).param)),P=c(()=>a.meta.parameterHelp(t(R).param,e.channelType)),ce=c(()=>e.changed(t(R).param));Da(Ae,{get field(){return t(se)},get value(){return t(Te)},get label(){return t(me)},get help(){return t(P)},get changed(){return t(ce)},valueLabel:be=>a.meta.valueLabel(t(R).param,be,e.channelType),presetLabel:be=>a.meta.uiLabel(be),onchange:be=>w(t(R),be)})}};W(ye,Ae=>{t(se)&&t(j)?Ae(xe):t(se)&&Ae(ie,1)})}v(X,ne)},K=X=>{const se=c(()=>Rw(t(R).subsets,n()));var j=St(),ne=Ne(j);{var ye=xe=>{const ie=c(()=>xw(t(se),e.values,e.description)),Ae=c(()=>eo(t(R).label,t(o))??i("Mode"));var Te=Ow(),me=A(Te),P=m(me,!0),ce=d(me,2),be=A(ce);{var ee=Q=>{var q=Eu();q.value=q.__value="-1",v(Q,q)};W(be,Q=>{t(ie)<0&&Q(ee)})}var he=d(be);Xe(he,19,()=>t(se),Q=>Q.id,(Q,q,Y)=>{var ae=rl(),J=m(ae,!0),ve={};S((ge,te)=>{h(J,ge),ve!==(ve=te)&&(ae.value=(ae.__value=ve)??"")},[()=>eo(t(R).names?.[t(R).subsets.indexOf(t(q).id)],t(o))??a.meta.parameterLabel(t(q).key,e.channelType),()=>String(t(Y))]),v(Q,ae)});var G;Xt(ce),S(Q=>{h(P,t(Ae)),T(ce,"aria-label",t(Ae)),G!==(G=Q)&&(ce.value=(ce.__value=G)??"",Bn(ce,G))},[()=>String(t(ie))]),re("change",ce,Q=>{const q=t(se)[Number(Q.currentTarget.value)];q&&e.onchange(Dw(q,e.description))}),v(xe,Te)};W(ne,xe=>{t(se).length>0&&xe(ye)})}v(X,j)};W(de,X=>{t(R).kind==="time"?X(B):t(R).kind==="param"?X(oe,1):X(K,-1)})}v(N,$)}),S(()=>T(D,"data-testid",s())),v(r,D),ut()}Et(["change"]);var Gw=y('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="link-preview"> </button>',1),Uw=y("<p> </p>"),Bw=y('<p data-testid="link-paramset-failed"> </p>'),Hw=y('<div class="hmm-link-targets svelte-1xlqelt"><!></div>'),Vw=y('<div class="hmm-link-list hmm-param-table svelte-1xlqelt" data-testid="link-sender-params"></div>'),zw=y('<section class="hmm-link-section svelte-1xlqelt"><h4 class="svelte-1xlqelt"><button type="button" class="hmm-link-toggle svelte-1xlqelt" data-testid="link-sender-toggle"> </button> </h4> <!></section>'),yu=y("<option> </option>"),jw=y('<p class="hmm-link-profile-text svelte-1xlqelt" data-testid="link-profile-description"> </p>'),Ww=y('<p class="hmm-link-hint svelte-1xlqelt" data-testid="link-easy-legend"><span class="hmm-link-easy-swatch svelte-1xlqelt" aria-hidden="true"></span> </p>'),Kw=y('<p class="hmm-link-hint svelte-1xlqelt" data-testid="link-easy-unknown"> </p>'),Yw=y("<div><!></div>"),qw=y('<li><span class="hmm-mono"> </span> </li>'),$w=y('<ul class="hmm-link-results svelte-1xlqelt" data-testid="link-results"></ul>'),Xw=y('<div class="hmm-link-info svelte-1xlqelt"><label class="svelte-1xlqelt"><span> </span> <input class="hmm-input" data-testid="link-name"/></label> <label class="svelte-1xlqelt"><span>DESCRIPTION</span> <input class="hmm-input" data-testid="link-description"/></label> <button type="button" class="hmm-button" data-testid="link-info-save"> </button></div> <!> <!> <section class="hmm-link-section svelte-1xlqelt"><h4 class="svelte-1xlqelt"> </h4> <div class="hmm-link-profile svelte-1xlqelt"><div class="hmm-link-row svelte-1xlqelt"><label class="svelte-1xlqelt"><span> </span> <select class="hmm-select" data-testid="link-profile"></select></label> <label class="hmm-link-expert svelte-1xlqelt"><input type="checkbox" data-testid="link-expert"/> <span> </span></label></div> <!> <div class="hmm-link-row svelte-1xlqelt"><label class="svelte-1xlqelt"><span> </span> <select class="hmm-select" data-testid="link-template"><option> </option><!></select></label> <label class="svelte-1xlqelt"><span> </span> <input class="hmm-input" data-testid="link-template-name"/></label> <button type="button" class="hmm-button" data-testid="link-template-save"> </button> <button type="button" class="hmm-button" data-testid="link-template-delete"> </button></div></div> <!> <div class="hmm-link-list hmm-param-table svelte-1xlqelt" data-testid="link-receiver-params"><!></div></section> <!>',1),Qw=y("<!> <!>",1);function nm(r,e){ct(e,!0);let n=H(e,"open",15,!1),s=H(e,"sender",3,""),a=H(e,"receiver",3,"");const i=Ot(),o=i.i18n.t;let l=C(void 0),f=C(We({})),p=C(void 0),_=C(We({})),g=C(We({})),k=C(We({})),E=C(We([])),b=C(void 0),w=C(We(vs)),x=C(!1),D=C(void 0),N=C(""),R=C(""),M=C(We([])),z=C(!1),$=C(void 0),le=C(We([])),fe=C(We([])),de=C(!1),B=0,oe=C(""),K=C(""),X=0,se=C(""),j=C("");const ne=c(()=>i.app.selectedInterface),ye=c(()=>i.devices.index(t(ne))),xe=c(()=>t(ye)?.get(s())?.TYPE??""),ie=c(()=>t(ye)?.get(a())?.TYPE??""),Ae=c(()=>`${i.nameOf(s())} → ${i.nameOf(a())} (${s()} ${a()})`),Te=c(()=>t(E).find(_e=>_e.id===t(w))),me=c(()=>{const _e=t(ye),Se=_e?.get(a()),V=_e?.get(s());if(!_e||!Se||!V)return"";const L=_e.get(Se.PARENT??""),Pe=_e.get(V.PARENT??"");return!L||!Pe?"":[Ga(t(ne),Se,"LINK",L),Ga(t(ne),V,"LINK",Pe)].join("|")}),P=c(()=>i.links.templates.filter(_e=>_e.identity===t(me))),ce=c(()=>t(l)?tl(t(l),{metadata:t(b),presets:i.meta.presets,profile:t(Te),expert:t(x)}):[]),be=c(()=>t(p)?tl(t(p),{expert:!0}):[]),ee=c(()=>t(D)??t(be).length>0),he=c(()=>t(l)&&t(Te)&&t(Te).id!==vs?q_(t(Te),t(l)):void 0),G=c(()=>t(x)?void 0:t(he)),Q=c(()=>t(x)?Nl(t(he),t(b)?.subsets):new Set),q=c(()=>new Map((t(l)?tl(t(l),{metadata:t(b),presets:i.meta.presets,profile:t(Te)}):[]).map(_e=>[_e.name,_e]))),Y=c(()=>U()),ae=c(()=>i.links.of(t(ne)).filter(_e=>!(_e.SENDER===s()&&_e.RECEIVER===a())&&(t(ye)?.get(_e.SENDER)?.TYPE??"")===t(xe)&&(t(ye)?.get(_e.RECEIVER)?.TYPE??"")===t(ie)).map(_e=>({value:`${_e.SENDER};${_e.RECEIVER}`,label:`${i.nameOf(_e.SENDER)} → ${i.nameOf(_e.RECEIVER)}`})));ot(()=>{if(!n()||t(ne)===""||s()===""||a()==="")return;const _e=B+=1,Se={interfaceName:t(ne),sender:s(),receiver:a()};u(de,!0),u(oe,""),u(l,void 0),u(f,{},!0),u(p,void 0),u(_,{},!0),u(g,{},!0),u(k,{},!0),u(D,void 0),(async()=>{const[V,L,Pe,Ge,qe]=await Promise.all([i.paramsets.describe(Se.interfaceName,Se.receiver,"LINK"),i.paramsets.read(Se.interfaceName,Se.receiver,Se.sender),i.paramsets.describe(Se.interfaceName,Se.sender,"LINK"),i.paramsets.read(Se.interfaceName,Se.sender,Se.receiver),i.links.info(Se.interfaceName,Se.sender,Se.receiver)]);_e===B&&(u(l,V,!0),u(f,L??{},!0),u(p,Pe,!0),u(_,Ge??{},!0),u(N,qe?.NAME??"",!0),u(R,qe?.DESCRIPTION??"",!0),u(g,{},!0),u(k,{},!0),u(M,[],!0),u(le,[],!0),u(fe,[],!0),u(de,!1),u(oe,`${Se.interfaceName}|${Se.sender}|${Se.receiver}#${String(_e)}`))})()}),ot(()=>{if(!n()||t(ie)===""||t(xe)==="")return;const _e=`${t(ie)}|${t(xe)}`;if(_e===t(K))return;const Se=X+=1;u(K,""),u(E,[],!0),Promise.all([i.meta.profilesFor(t(ie),t(xe)),i.meta.linkMetadataFor(t(ie),t(xe)),i.meta.loadPresets()]).then(([V,L])=>{Se===X&&(u(E,V,!0),u(b,L,!0),u(K,_e))})});let J="",ve;ot(()=>{if(t(oe)===""||t(K)!==`${t(ie)}|${t(xe)}`||t(E).length===0)return;const _e=`${t(oe)}|${t(K)}`;if(J===_e)return;J=_e;const Se=i.meta.engine.detectProfile(t(f),t(E));ve=Se?.id,u(w,Se?.id??vs,!0),u(x,t(w)===vs)}),ot(()=>{const _e=t(me);n()&&_e!==""&&i.links.loadTemplates(_e)});async function ge(){const _e=t(se).trim();if(_e===""||t(me)===""||!t(l))return;const Se=li(t(f),t(g),t(l),{interfaceName:t(ne),targets:[a()],writeAll:!0}).values,V=t(p)?li(t(_),t(k),t(p),{interfaceName:t(ne),targets:[s()],writeAll:!0}).values:{},L={name:_e,identity:t(me),...t(Te)===void 0?{}:{profileId:t(Te).id,profileName:gu(t(Te),i.i18n.language)},receiver:Se,...Object.keys(V).length>0?{sender:V}:{},createdAt:Date.now()};await i.links.saveTemplate(L)&&(u(se,""),u(j,_e,!0),i.notices.push("info",`${o("Save as template")}: ${_e}`))}function te(_e){const Se=t(P).find(V=>V.name===_e);Se&&(Se.profileId!==void 0&&t(E).some(V=>V.id===Se.profileId)&&(u(w,Se.profileId,!0),u(x,t(w)===vs)),u(g,{...t(g),...Se.receiver},!0),Se.sender&&s()!==a()&&u(k,{...t(k),...Se.sender},!0))}function O(_e){u(w,_e,!0),u(x,_e===vs);const Se=t(E).find(qe=>qe.id===_e);if(!Se||!t(l))return;const V=_e===ve,L=i.meta.engine.applyProfile(Se,V?t(f):U(),t(l),{keepCurrent:V}),Pe={};for(const qe of[...Object.keys(Se.params),ci]){const we=L.values[qe];we!==void 0&&(Pe[qe]=we)}u(g,{...t(g),...Pe},!0);const Ge=L.problems.filter(qe=>qe.code==="unknown-parameter");Ge.length>0&&i.notices.push("info",`${o("The profile names {count} parameters this firmware does not have",{},Ge.length)}: ${Ge.map(qe=>qe.param).join(", ")}`);for(const qe of L.problems.filter(we=>we.code!=="unknown-parameter"))i.notices.push("warn",`${qe.param}: ${qe.message}`)}function U(){const _e={...t(f)};for(const[Se,V]of Object.entries(t(g)))(typeof V=="boolean"||typeof V=="number"||typeof V=="string")&&(_e[Se]=V);return _e}function I(_e,Se,V){return Object.prototype.hasOwnProperty.call(V,_e.name)?V[_e.name]:Se[_e.name]??_e.description.DEFAULT}async function F(){await i.links.setInfo(t(ne),s(),a(),t(N),t(R))}function Ee(){const _e=t(M).map(Se=>{const[V,L]=Se.split(";");return{sender:V??"",receiver:L??""}});return[{sender:s(),receiver:a()},..._e]}function Ie(){if(!t(l))return;u(le,[],!0),u(fe,[],!0);const _e=Ee(),Se=li(t(f),t(g),t(l),{interfaceName:t(ne),targets:_e.map(L=>`${L.receiver}←${L.sender}`)}),V=t(p)&&s()!==a()?li(t(_),t(k),t(p),{interfaceName:t(ne),targets:_e.map(L=>`${L.sender}←${L.receiver}`)}):void 0;u($,H0(Se,V,_e),!0),u(z,!0)}function Me(){const _e=t($);if(!_e)return;const Se=pu(_e);if(Se.receiverToSender===void 0&&Se.senderToReceiver===void 0)return;const V=Ee();i.changeSet.stage({kind:"linkParamset",interfaceName:t(ne),title:`LINK — ${i.nameOf(s())} → ${i.nameOf(a())}`,links:V,values:Se,calls:[..._e.calls??[]],lines:_e.entries.map(L=>({label:L.side==="sender"?`${o("Sender")}: ${L.param}`:L.param,from:L.from,to:L.to}))}),u(z,!1),n(!1)}async function Ve(){const _e=t($);if(!_e)return;const Se=pu(_e);if(Se.receiverToSender===void 0&&Se.senderToReceiver===void 0)return;const V=await i.paramsets.putLink(t(ne),Ee(),Se);u(le,V,!0);const L=[];if(Se.receiverToSender!==void 0){const Pe=await i.paramsets.read(t(ne),a(),s());Pe&&t(l)&&(L.push(...Ql(Se.receiverToSender,Pe,t(l)).map(Ge=>({...Ge,side:"receiver"}))),u(f,Pe,!0),u(g,{},!0))}if(Se.senderToReceiver!==void 0){const Pe=await i.paramsets.read(t(ne),s(),a());Pe&&t(p)&&(L.push(...Ql(Se.senderToReceiver,Pe,t(p)).map(Ge=>({...Ge,side:"sender"}))),u(_,Pe,!0),u(k,{},!0))}u(fe,L,!0),V.length>0&&V.every(Pe=>Pe.ok)&&!t(fe).some(Pe=>Pe.differs)&&u(z,!1)}var ze=Qw(),nt=Ne(ze);En(nt,{get title(){return t(Ae)},width:"960px",height:"min(640px, calc(100vh - 32px))",minWidth:560,minHeight:320,testId:"link-paramset-dialog",get open(){return n()},set open(Se){n(Se)},buttons:Se=>{var V=Gw(),L=Ne(V),Pe=m(L,!0),Ge=d(L,2),qe=m(Ge,!0);S((we,Ce)=>{h(Pe,we),Ge.disabled=!t(l),h(qe,Ce)},[()=>o("Close"),()=>o("Preview")]),re("click",L,()=>n(!1)),re("click",Ge,Ie),v(Se,V)},children:(Se,V)=>{var L=St(),Pe=Ne(L);{var Ge=Ce=>{var Oe=Uw(),Be=m(Oe,!0);S(pe=>h(Be,pe),[()=>o("Loading Homematic Manager...")]),v(Ce,Oe)},qe=Ce=>{var Oe=Bw(),Be=m(Oe,!0);S(pe=>h(Be,pe),[()=>o("No data")]),v(Ce,Oe)},we=Ce=>{var Oe=Xw(),Be=Ne(Oe),pe=A(Be),De=A(pe),Ue=m(De,!0),Fe=d(De,2),Ye=d(pe,2),tt=d(A(Ye),2),ft=d(Ye,2),dt=m(ft,!0),ke=d(Be,2);{var Le=et=>{var rt=Hw(),je=A(rt);{let vt=c(()=>o("Please choose one or more links")),At=c(()=>o("Please choose one or more links")),zt=c(()=>o("Filter")),hn=c(()=>o("Check all")),Ht=c(()=>o("Uncheck all"));bi(je,{get options(){return t(ae)},get label(){return t(vt)},get placeholder(){return t(At)},get filterLabel(){return t(zt)},get checkAllLabel(){return t(hn)},get uncheckAllLabel(){return t(Ht)},summary:Mt=>o("{count} links",{},Mt.length),testId:"link-targets",get selected(){return t(M)},set selected(Mt){u(M,Mt,!0)}})}v(et,rt)};W(ke,et=>{t(ae).length>0&&et(Le)})}var $e=d(ke,2);{var at=et=>{var rt=zw(),je=A(rt),vt=A(je),At=m(vt,!0),zt=d(vt),hn=d(je,2);{var Ht=Mt=>{var kn=Vw();Xe(kn,21,()=>t(be),An=>An.name,(An,dn)=>{{let _n=c(()=>I(t(dn),t(_),t(k))),or=c(()=>i.meta.parameterLabel(t(dn).name,t(xe))),Gn=c(()=>i.meta.parameterHelp(t(dn).name,t(xe))),cn=c(()=>Object.prototype.hasOwnProperty.call(t(k),t(dn).name));Da(An,{get field(){return t(dn)},get value(){return t(_n)},get label(){return t(or)},get help(){return t(Gn)},get changed(){return t(cn)},valueLabel:jt=>i.meta.valueLabel(t(dn).name,jt,t(xe)),presetLabel:jt=>i.meta.uiLabel(jt),onchange:jt=>u(k,{...t(k),[t(dn).name]:jt},!0)})}}),v(Mt,kn)};W(hn,Mt=>{t(ee)&&Mt(Ht)})}S((Mt,kn)=>{T(vt,"aria-expanded",t(ee)),h(At,t(ee)?"−":"+"),h(zt,` ${Mt??""}: ${kn??""} (${s()??""})`)},[()=>o("Sender"),()=>i.nameOf(s())]),re("click",vt,()=>u(D,!t(ee))),v(et,rt)};W($e,et=>{s()!==a()&&et(at)})}var lt=d($e,2),Je=A(lt),Pt=m(Je),Tt=d(Je,2),Lt=A(Tt),Qt=A(Lt),pn=A(Qt),wn=m(pn,!0),tn=d(pn,2);Xe(tn,21,()=>t(E),et=>et.id,(et,rt)=>{var je=yu(),vt=m(je,!0),At={};S((zt,hn)=>{h(vt,zt),At!==(At=hn)&&(je.value=(je.__value=At)??"")},[()=>gu(t(rt),i.i18n.language),()=>String(t(rt).id)]),v(et,je)});var bn;Xt(tn);var Pn=d(Qt,2),$n=A(Pn),Xn=d($n,2),Zt=m(Xn,!0),Ft=d(Lt,2);{var Jt=et=>{var rt=jw(),je=m(rt,!0);S(vt=>h(je,vt),[()=>j0(t(Te),i.i18n.language)]),v(et,rt)};W(Ft,et=>{t(Te)&&!t(x)&&et(Jt)})}var Qn=d(Ft,2),Mn=A(Qn),Or=A(Mn),zr=m(Or,!0),Zn=d(Or,2),jn=A(Zn),Lr=m(jn,!0);jn.value=jn.__value="";var cs=d(jn);Xe(cs,17,()=>t(P),et=>et.name,(et,rt)=>{var je=yu(),vt=m(je),At={};S(()=>{h(vt,`${t(rt).name??""}${t(rt).profileName===void 0?"":` — ${t(rt).profileName}`}`),At!==(At=t(rt).name)&&(je.value=(je.__value=At)??"")}),v(et,je)});var ar;Xt(Zn);var Ar=d(Mn,2),jr=A(Ar),cr=m(jr,!0),Tr=d(jr,2),ur=d(Ar,2),ns=m(ur,!0),Fr=d(ur,2),pr=m(Fr,!0),gr=d(Tt,2);{var ue=et=>{var rt=Ww(),je=d(A(rt),1,!0);S(vt=>h(je,vt),[()=>o("Marked: the parameters the easy mode of this profile shows")]),v(et,rt)},He=et=>{var rt=Kw(),je=m(rt,!0);S(vt=>h(je,vt),[()=>o("The CCU's form for this profile is not known here: every parameter is shown, the ones the profile fixes greyed out.")]),v(et,rt)};W(gr,et=>{t(x)&&t(Q).size>0?et(ue):!t(x)&&!t(G)&&t(Te)&&t(Te).id!==vs&&et(He,1)})}var Vt=d(gr,2),yn=A(Vt);{var ir=et=>{{let rt=c(()=>t(b)?.subsets);tm(et,{get form(){return t(G)},testId:"link-easy-form",get fields(){return t(q)},get values(){return t(Y)},changed:je=>Object.prototype.hasOwnProperty.call(t(g),je),get description(){return t(l)},get channelType(){return t(ie)},get subsets(){return t(rt)},get presets(){return i.meta.presets},get timeSelectors(){return i.meta.timeSelectors},onchange:je=>u(g,{...t(g),...je},!0)})}},it=et=>{var rt=St(),je=Ne(rt);Xe(je,17,()=>t(ce),vt=>vt.name,(vt,At)=>{var zt=Yw();let hn;var Ht=A(zt);{let Mt=c(()=>I(t(At),t(f),t(g))),kn=c(()=>i.meta.parameterLabel(t(At).name,t(ie))),An=c(()=>i.meta.parameterHelp(t(At).name,t(ie))),dn=c(()=>Object.prototype.hasOwnProperty.call(t(g),t(At).name));Da(Ht,{get field(){return t(At)},get value(){return t(Mt)},get label(){return t(kn)},get help(){return t(An)},get changed(){return t(dn)},get disabled(){return t(At).fixedByProfile},valueLabel:_n=>i.meta.valueLabel(t(At).name,_n,t(ie)),presetLabel:_n=>i.meta.uiLabel(_n),onchange:_n=>u(g,{...t(g),[t(At).name]:_n},!0)})}S(Mt=>hn=_t(zt,1,"hmm-link-easy-mark hmm-param-table-span svelte-1xlqelt",null,hn,{"hmm-link-easy-marked":Mt}),[()=>t(Q).has(t(At).name)]),v(vt,zt)}),v(et,rt)};W(yn,et=>{t(G)&&t(l)?et(ir):et(it,-1)})}var bt=d(lt,2);{var It=et=>{var rt=$w();Xe(rt,21,()=>t(le),je=>`${je.address}-${je.peer??""}`,(je,vt)=>{var At=qw();let zt;var hn=A(At),Ht=m(hn,!0),Mt=d(hn);S(()=>{zt=_t(At,1,"svelte-1xlqelt",null,zt,{"hmm-link-failed":!t(vt).ok}),h(Ht,t(vt).address),h(Mt,` ${t(vt).ok?"✔":`✕ ${t(vt).faultString??""}`}`)}),v(je,At)}),v(et,rt)};W(bt,et=>{t(le).length>0&&et(It)})}S((et,rt,je,vt,At,zt,hn,Ht,Mt,kn,An,dn,_n)=>{h(Ue,et),h(dt,rt),h(Pt,`${je??""}: ${vt??""} (${a()??""})`),h(wn,At),bn!==(bn=zt)&&(tn.value=(tn.__value=bn)??"",Bn(tn,bn)),h(Zt,hn),h(zr,Ht),Zn.disabled=t(P).length===0,h(Lr,Mt),ar!==(ar=t(j))&&(Zn.value=(Zn.__value=ar)??"",Bn(Zn,ar)),h(cr,kn),ur.disabled=An,h(ns,dn),Fr.disabled=t(j)==="",h(pr,_n)},[()=>o("Name"),()=>o("Apply"),()=>o("Receiver"),()=>i.nameOf(a()),()=>o("Profile"),()=>String(t(w)),()=>o("Expert view"),()=>o("Template"),()=>t(P).length===0?o("No template for this pair of channel types"):o("Apply template"),()=>o("Template name"),()=>t(se).trim()===""||t(me)==="",()=>o("Save as template"),()=>o("Delete template")]),xn(Fe,()=>t(N),et=>u(N,et)),xn(tt,()=>t(R),et=>u(R,et)),re("click",ft,()=>{F()}),re("change",tn,et=>O(Number(et.currentTarget.value))),vr($n,()=>t(x),et=>u(x,et)),re("change",Zn,et=>{u(j,et.currentTarget.value,!0),te(t(j))}),xn(Tr,()=>t(se),et=>u(se,et)),re("click",ur,()=>{ge()}),re("click",Fr,()=>{const et=t(j);u(j,""),i.links.removeTemplate(et,t(me))}),v(Ce,Oe)};W(Pe,Ce=>{t(de)&&!t(l)?Ce(Ge):t(l)?Ce(we,-1):Ce(qe,1)})}v(Se,L)},$$slots:{buttons:!0,default:!0}});var Ze=d(nt,2);Zl(Ze,{get preview(){return t($)},paramset:"LINK",get results(){return t(le)},get readBack(){return t(fe)},get writing(){return i.paramsets.writing},onstage:Me,onconfirm:()=>{Ve()},get open(){return t(z)},set open(_e){u(z,_e,!0)}}),v(r,ze),ut()}Et(["click","change"]);var Zw=y('<span class="hmm-blind-warn svelte-6iyslx"> </span>'),Jw=y('<div class="hmm-blind-row svelte-6iyslx"><div class="hmm-blind-label svelte-6iyslx"><span> </span> <span class="hmm-blind-id svelte-6iyslx"> </span></div> <div class="hmm-blind-control svelte-6iyslx"><input class="hmm-input hmm-blind-number svelte-6iyslx" type="number" min="0" step="0.01"/> <span class="hmm-blind-unit svelte-6iyslx">s</span> <span class="hmm-blind-raw svelte-6iyslx"> </span></div> <div class="hmm-blind-meta svelte-6iyslx"><span> </span> <!></div></div>'),ek=y('<div class="hmm-blind-row svelte-6iyslx"><div class="hmm-blind-label svelte-6iyslx"><span> </span> <span class="hmm-blind-id svelte-6iyslx"> </span></div> <div class="hmm-blind-control svelte-6iyslx"><input class="hmm-input hmm-blind-number svelte-6iyslx" type="number" step="0.1"/> <span class="hmm-blind-unit svelte-6iyslx">s</span></div> <div class="hmm-blind-meta svelte-6iyslx"><span> </span></div></div>'),tk=y('<input type="checkbox"/>'),nk=y('<input class="hmm-input hmm-blind-number svelte-6iyslx" type="number" step="1"/>'),rk=y('<div class="hmm-blind-row svelte-6iyslx"><div class="hmm-blind-label svelte-6iyslx"><span> </span> <span class="hmm-blind-id svelte-6iyslx"> </span></div> <div class="hmm-blind-control svelte-6iyslx"><!></div> <div class="hmm-blind-meta svelte-6iyslx"></div></div>'),sk=y('<div class="hmm-editor svelte-6iyslx" data-testid="editor-blind-calibration"><h3 class="svelte-6iyslx"> </h3> <p class="hmm-editor-hint svelte-6iyslx"> </p> <!> <!> <!></div>');function ak(r,e){ct(e,!0);const n=Ot(),s=n.i18n.t;let a=C(We({}));function i(D){return n.meta.parameterLabel(D,e.channelType)}function o(D,N){if(N==="")return;const R=p0(D,Number(N));R&&(u(a,R.exact||R.seconds===Number(N)?Object.fromEntries(Object.entries(t(a)).filter(([M])=>M!==D.id)):{...t(a),[D.id]:R.seconds},!0),e.onchange(R.values))}function l(D,N){N===""||!Number.isFinite(Number(N))||f(D.param,Number(N))}function f(D,N){e.onchange({[D]:N})}var p=sk(),_=A(p),g=m(_,!0),k=d(_,2),E=m(k,!0),b=d(k,2);Xe(b,17,()=>e.spec.runningTimes,D=>D.id,(D,N)=>{const R=c(()=>m0(t(N),e.values));var M=Jw(),z=A(M),$=A(z),le=m($,!0),fe=d($,2),de=m(fe,!0),B=d(z,2),oe=A(B),K=d(oe,4),X=m(K,!0),se=d(B,2),j=A(se),ne=m(j,!0),ye=d(j,2);{var xe=ie=>{var Ae=Zw(),Te=m(Ae,!0);S(me=>{T(Ae,"data-testid",`blind-${t(N).id}-inexact`),h(Te,me)},[()=>s("The device can only do {seconds}",{seconds:Si(t(a)[t(N).id]??0)})]),v(ie,Ae)};W(ye,ie=>{t(a)[t(N).id]!==void 0&&ie(xe)})}S((ie,Ae,Te,me)=>{T(M,"data-testid",`blind-${t(N).id}`),h(le,ie),h(de,t(N).id),oe.disabled=!t(N).writable,T(oe,"aria-label",Ae),T(oe,"data-testid",`blind-${t(N).id}-seconds`),ln(oe,t(R)??""),T(K,"data-testid",`blind-${t(N).id}-raw`),h(X,Te),h(ne,me)},[()=>i(t(N).id),()=>i(t(N).id),()=>v0(t(N),e.values),()=>t(R)===void 0?"—":Si(t(R))]),re("input",oe,ie=>o(t(N),ie.currentTarget.value)),v(D,M)});var w=d(b,2);Xe(w,17,()=>e.spec.delays,D=>D.param,(D,N)=>{var R=ek(),M=A(R),z=A(M),$=m(z,!0),le=d(z,2),fe=m(le,!0),de=d(M,2),B=A(de),oe=d(de,2),K=A(oe),X=m(K);S((se,j,ne,ye,xe,ie)=>{T(R,"data-testid",`blind-${t(N).param}`),h($,se),h(fe,t(N).param),T(B,"min",j),T(B,"max",ne),T(B,"aria-label",ye),T(B,"data-testid",`blind-${t(N).param}-value`),ln(B,e.values[t(N).param]??""),h(X,`${xe??""} … ${ie??""}`)},[()=>i(t(N).param),()=>nr(t(N).description,"MIN"),()=>nr(t(N).description,"MAX"),()=>i(t(N).param),()=>nr(t(N).description,"MIN")??"−∞",()=>nr(t(N).description,"MAX")??"∞"]),re("input",B,se=>l(t(N),se.currentTarget.value)),v(D,R)});var x=d(w,2);Xe(x,17,()=>e.spec.extras,D=>D.param,(D,N)=>{var R=rk(),M=A(R),z=A(M),$=m(z,!0),le=d(z,2),fe=m(le,!0),de=d(M,2),B=A(de);{var oe=X=>{var se=tk();S(j=>{T(se,"aria-label",j),T(se,"data-testid",`blind-${t(N).param}-value`),Pr(se,e.values[t(N).param]===!0)},[()=>i(t(N).param)]),re("change",se,j=>f(t(N).param,j.currentTarget.checked)),v(X,se)},K=X=>{var se=nk();S((j,ne,ye)=>{T(se,"min",j),T(se,"max",ne),T(se,"aria-label",ye),T(se,"data-testid",`blind-${t(N).param}-value`),ln(se,e.values[t(N).param]??"")},[()=>nr(t(N).description,"MIN"),()=>nr(t(N).description,"MAX"),()=>i(t(N).param)]),re("input",se,j=>l(t(N),j.currentTarget.value)),v(X,se)};W(B,X=>{t(N).description.TYPE==="BOOL"?X(oe):X(K,-1)})}S(X=>{T(R,"data-testid",`blind-${t(N).param}`),h($,X),h(fe,t(N).param)},[()=>i(t(N).param)]),v(D,R)}),S((D,N)=>{h(g,D),h(E,N)},[()=>s("Blind calibration"),()=>s("The running times of a reference run, in plain seconds next to the value the device stores.")]),v(r,p),ut()}Et(["input","change"]);var ik=y("<option> </option>"),Su=y('<span class="hmm-duration-broken svelte-1jozrc9"> </span>'),ok=y("<span> </span>"),lk=y('<div class="hmm-duration svelte-1jozrc9"><div class="hmm-duration-label svelte-1jozrc9"><span> </span> <span class="hmm-duration-id svelte-1jozrc9"> </span></div> <div class="hmm-duration-control svelte-1jozrc9"><input class="hmm-input hmm-duration-seconds svelte-1jozrc9" type="number" min="0" step="0.1"/> <span class="hmm-duration-unit svelte-1jozrc9">s</span> <select class="hmm-select"></select> <input class="hmm-input hmm-duration-count svelte-1jozrc9" type="number" min="0" step="1"/> <label class="hmm-duration-notused svelte-1jozrc9"><input type="checkbox"/> <span> </span></label></div> <div class="hmm-duration-meta svelte-1jozrc9"><!> <!></div></div>'),dk=y('<div class="hmm-editor svelte-1jozrc9" data-testid="editor-duration-pairs"><h3 class="svelte-1jozrc9"> </h3> <p class="hmm-editor-hint svelte-1jozrc9"> </p> <!></div>');function ck(r,e){ct(e,!0);const n=Ot(),s=n.i18n.t;let a=C(We({}));function i(R){return n.meta.parameterLabel(R.pair.unitParam,e.channelType)}function o(R){return qh(R,e.values)}function l(R,M){const z=$h(R,M);z&&(u(a,z.exact?Object.fromEntries(Object.entries(t(a)).filter(([$])=>$!==R.pair.name)):{...t(a),[R.pair.name]:z.seconds},!0),e.onchange(z.values))}function f(R,M){const z=Number(M);M===""||!Number.isFinite(z)||l(R,z)}function p(R,M){const z=Number(M),$=o(R),le=R.pair.units[z];if(le===void 0||$===void 0)return;const fe=Math.min(R.pair.maxCount,Math.max(0,Math.round($/le.seconds)));g({[R.pair.unitParam]:z,[R.pair.countParam]:fe})}function _(R,M){const z=Number(M);M===""||!Number.isInteger(z)||g({[R.pair.countParam]:z})}function g(R){e.onchange(R)}function k(R){const M=e.values[R.pair.unitParam];return typeof M=="number"?M:R.pair.units.findIndex(z=>z.name===M)}var E=dk(),b=A(E),w=m(b,!0),x=d(b,2),D=m(x,!0),N=d(x,2);Xe(N,17,()=>e.spec.pairs,R=>R.pair.name,(R,M)=>{const z=c(()=>o(t(M))),$=c(()=>d0(t(M),e.values));var le=lk(),fe=A(le),de=A(fe),B=m(de,!0),oe=d(de,2),K=m(oe),X=d(fe,2),se=A(X),j=d(se,4);Xe(j,23,()=>t(M).pair.units,G=>G.name,(G,Q,q)=>{var Y=ik(),ae=m(Y,!0),J={};S(ve=>{h(ae,t(Q).name),J!==(J=ve)&&(Y.value=(Y.__value=J)??"")},[()=>String(t(q))]),v(G,Y)});var ne;Xt(j);var ye=d(j,2),xe=d(ye,2),ie=A(xe),Ae=d(ie,2),Te=m(Ae,!0),me=d(X,2),P=A(me);{var ce=G=>{var Q=Su(),q=m(Q,!0);S(Y=>h(q,Y),[()=>s("The device holds a value this pair cannot express")]),v(G,Q)},be=G=>{var Q=ok(),q=m(Q,!0);S(Y=>h(q,Y),[()=>Si(t(z))]),v(G,Q)};W(P,G=>{t(z)===void 0?G(ce):G(be,-1)})}var ee=d(P,2);{var he=G=>{var Q=Su(),q=m(Q,!0);S(Y=>{T(Q,"data-testid",`duration-${t(M).pair.name}-inexact`),h(q,Y)},[()=>s("The device can only do {seconds}",{seconds:Si(t(a)[t(M).pair.name]??0)})]),v(G,Q)};W(ee,G=>{t(a)[t(M).pair.name]!==void 0&&G(he)})}S((G,Q,q,Y,ae,J)=>{T(le,"data-testid",`duration-${t(M).pair.name}`),h(B,G),h(K,`${t(M).pair.unitParam??""} / ${t(M).pair.countParam??""}`),se.disabled=!t(M).writable||t($),T(se,"aria-label",Q),T(se,"data-testid",`duration-${t(M).pair.name}-seconds`),ln(se,t(z)??""),j.disabled=!t(M).writable,T(j,"aria-label",q),T(j,"data-testid",`duration-${t(M).pair.name}-unit`),ne!==(ne=Y)&&(j.value=(j.__value=ne)??"",Bn(j,ne)),T(ye,"max",t(M).pair.maxCount),ye.disabled=!t(M).writable,T(ye,"aria-label",ae),T(ye,"data-testid",`duration-${t(M).pair.name}-count`),ln(ye,e.values[t(M).pair.countParam]??""),ie.disabled=!t(M).writable,Pr(ie,t($)),T(ie,"data-testid",`duration-${t(M).pair.name}-not-used`),h(Te,J),T(me,"data-testid",`duration-${t(M).pair.name}-result`)},[()=>i(t(M)),()=>`${i(t(M))} ${s("seconds")}`,()=>`${i(t(M))} ${s("unit")}`,()=>String(k(t(M))),()=>`${i(t(M))} ${s("count")}`,()=>s("Not used / for ever")]),re("input",se,G=>f(t(M),G.currentTarget.value)),re("change",j,G=>p(t(M),G.currentTarget.value)),re("input",ye,G=>_(t(M),G.currentTarget.value)),re("change",ie,G=>l(t(M),G.currentTarget.checked?t(M).notUsedSeconds:0)),v(R,le)}),S((R,M)=>{h(w,R),h(D,M)},[()=>s("Durations"),()=>s("A duration is stored as a unit and a count; both are shown next to the seconds.")]),v(r,E),ut()}Et(["input","change"]);var wu=y("<option> </option>"),uk=y("<span> </span>"),fk=y('<div class="hmm-enum-row svelte-1d7xvi9"><div class="hmm-enum-label svelte-1d7xvi9"><span> </span> <span class="hmm-enum-id svelte-1d7xvi9"> </span></div> <div class="hmm-enum-control svelte-1d7xvi9"><select class="hmm-select"><!><!></select> <span class="hmm-enum-raw svelte-1d7xvi9"> </span></div> <div class="hmm-enum-meta svelte-1d7xvi9"><!></div></div>'),hk=y('<div class="hmm-editor svelte-1d7xvi9" data-testid="editor-enum-options"><h3 class="svelte-1d7xvi9"> </h3> <p class="hmm-editor-hint svelte-1d7xvi9"> </p> <!></div>');function mk(r,e){ct(e,!0);const n=Ot(),s=n.i18n.t;function a(b){return n.meta.parameterLabel(b,e.channelType)}function i(b){const w=e.values[b.param];return typeof w=="number"?w:b.options.find(x=>x.raw===w)?.value??-1}function o(b){const w=i(b);return w>=0&&!b.options.some(x=>x.value===w)?w:void 0}function l(b,w){return b.description.VALUE_LIST?.[w]??String(w)}var f=hk(),p=A(f),_=m(p,!0),g=d(p,2),k=m(g,!0),E=d(g,2);Xe(E,17,()=>e.spec.fields,b=>b.param,(b,w)=>{const x=c(()=>i(t(w))),D=c(()=>o(t(w)));var N=fk(),R=A(N),M=A(R),z=m(M,!0),$=d(M,2),le=m($,!0),fe=d(R,2),de=A(fe),B=A(de);{var oe=ie=>{var Ae=wu(),Te=m(Ae),me={};S((P,ce)=>{h(Te,`${P??""} (${t(D)??""})`),me!==(me=ce)&&(Ae.value=(Ae.__value=me)??"")},[()=>l(t(w),t(D)),()=>String(t(D))]),v(ie,Ae)};W(B,ie=>{t(D)!==void 0&&ie(oe)})}var K=d(B);Xe(K,17,()=>t(w).options,ie=>ie.value,(ie,Ae)=>{var Te=wu(),me=m(Te,!0),P={};S(ce=>{h(me,t(Ae).label),P!==(P=ce)&&(Te.value=(Te.__value=P)??"")},[()=>String(t(Ae).value)]),v(ie,Te)});var X;Xt(de);var se=d(de,2),j=m(se,!0),ne=d(fe,2),ye=A(ne);{var xe=ie=>{var Ae=uk(),Te=m(Ae,!0);S(()=>{T(Ae,"data-testid",`enum-${t(w).param}-preset`),h(Te,t(w).presetId)}),v(ie,Ae)};W(ye,ie=>{t(w).presetId!==void 0&&ie(xe)})}S((ie,Ae,Te,me)=>{T(N,"data-testid",`enum-${t(w).param}`),h(z,ie),h(le,t(w).param),de.disabled=!t(w).writable,T(de,"aria-label",Ae),T(de,"data-testid",`enum-${t(w).param}-select`),X!==(X=Te)&&(de.value=(de.__value=X)??"",Bn(de,X)),T(se,"data-testid",`enum-${t(w).param}-raw`),h(j,me)},[()=>a(t(w).param),()=>a(t(w).param),()=>String(t(x)),()=>t(x)<0?"—":`${l(t(w),t(x))} (${t(x)})`]),re("change",de,ie=>e.onchange({[t(w).param]:Number(ie.currentTarget.value)})),v(b,N)}),S((b,w)=>{h(_,b),h(k,w)},[()=>s("Named options"),()=>s("These values have names in the CCU string table that the description does not carry.")]),v(r,f),ut()}Et(["change"]);var vk=y('<th class="svelte-hdzef5"> </th>'),pk=y('<label class="svelte-hdzef5"><input type="checkbox"/> <span> </span></label>'),gk=y('<div class="hmm-switch-days svelte-hdzef5"><!> <span class="hmm-switch-raw svelte-hdzef5"> </span></div>'),bk=y('<input class="hmm-input hmm-switch-time svelte-hdzef5" type="text" inputmode="numeric"/>'),_k=y('<input class="hmm-input hmm-switch-number svelte-hdzef5" type="number" min="0" step="0.1"/> <span class="hmm-switch-raw svelte-hdzef5"> </span>',1),Ek=y("<option> </option>"),yk=y('<select class="hmm-select"></select>'),Sk=y('<span class="hmm-switch-raw svelte-hdzef5"> </span>'),wk=y('<input class="hmm-input hmm-switch-number svelte-hdzef5" type="number"/> <!>',1),kk=y('<td class="svelte-hdzef5"><!></td>'),Ak=y('<tr><td class="hmm-switch-index svelte-hdzef5"> </td><!></tr>'),Tk=y('<div class="hmm-editor svelte-hdzef5" data-testid="editor-switch-week-profile"><h3 class="svelte-hdzef5"> </h3> <p class="hmm-editor-hint svelte-hdzef5"> </p> <label class="hmm-switch-option svelte-hdzef5"><input type="checkbox" data-testid="switch-show-unused"/> <span> </span></label> <div class="hmm-switch-scroll svelte-hdzef5"><table class="hmm-switch-table svelte-hdzef5"><thead><tr><th class="svelte-hdzef5"> </th><!></tr></thead><tbody></tbody></table></div></div>');function Rk(r,e){ct(e,!0);const n=Ot(),s=n.i18n.t;let a=C(!1);const i=c(()=>e.spec.slots.filter(se=>t(a)||!R0(e.values,se)));function o(se){return se.id==="TIME"?s("Time"):se.id==="WEEKDAY"?s("Weekdays"):n.meta.parameterLabel(se.id,e.channelType)}function l(se,j){return e.values[ws(se,j)]}function f(se,j,ne){e.onchange({[ws(se,j)]:ne})}function p(se,j){const ne=T0(se,j);ne&&e.onchange(ne)}function _(se,j){const ne=e.spec.durations[`${se}:${j.id}`];return ne===void 0?void 0:Id(e.values,ne)?.seconds}function g(se,j,ne){const ye=e.spec.durations[`${se}:${j.id}`],xe=Number(ne);if(ye===void 0||ne===""||!Number.isFinite(xe))return;const ie=Nd(xe,ye);ie&&e.onchange(ie)}function k(se,j,ne){const ye=Number(ne);ne===""||!Number.isFinite(ye)||f(se,j,ye)}var E=Tk(),b=A(E),w=m(b,!0),x=d(b,2),D=m(x,!0),N=d(x,2),R=A(N),M=d(R,2),z=m(M,!0),$=d(N,2),le=A($),fe=A(le),de=A(fe),B=A(de),oe=m(B,!0),K=d(B);Xe(K,17,()=>e.spec.columns,se=>se.id,(se,j)=>{var ne=vk(),ye=m(ne,!0);S(xe=>h(ye,xe),[()=>o(t(j))]),v(se,ne)});var X=d(fe);Xe(X,20,()=>t(i),se=>se,(se,j)=>{var ne=Ak(),ye=A(ne),xe=m(ye,!0),ie=d(ye);Xe(ie,17,()=>e.spec.columns,Ae=>Ae.id,(Ae,Te)=>{var me=kk(),P=A(me);{var ce=Q=>{var q=gk(),Y=A(q);Xe(Y,18,()=>S0,ve=>ve,(ve,ge,te)=>{var O=pk(),U=A(O),I=d(U,2),F=m(I,!0);S((Ee,Ie,Me,Ve)=>{T(O,"title",Ee),U.disabled=!e.spec.writable,T(U,"aria-label",Ie),T(U,"data-testid",`switch-${j}-day-${t(te)}`),Pr(U,Me),h(F,Ve)},[()=>s(ge),()=>s(ge),()=>w0(l(j,"WEEKDAY"),t(te)),()=>s(ge).slice(0,2)]),re("change",U,Ee=>f(j,"WEEKDAY",k0(l(j,"WEEKDAY"),t(te),Ee.currentTarget.checked))),v(ve,O)});var ae=d(Y,2),J=m(ae,!0);S(ve=>{T(ae,"data-testid",`switch-${j}-mask`),h(J,ve)},[()=>String(l(j,"WEEKDAY")??"—")]),v(Q,q)},be=Q=>{var q=bk();S((Y,ae)=>{q.disabled=!e.spec.writable,T(q,"aria-label",Y),T(q,"data-testid",`switch-${j}-time`),ln(q,ae)},[()=>`${s("Time")} ${j}`,()=>A0(e.values,j)]),re("change",q,Y=>p(j,Y.currentTarget.value)),v(Q,q)},ee=Q=>{var q=_k(),Y=Ne(q),ae=d(Y,2),J=m(ae,!0);S((ve,ge,te)=>{Y.disabled=!e.spec.writable,T(Y,"aria-label",ve),T(Y,"data-testid",`switch-${j}-${t(Te).id}`),ln(Y,ge),T(ae,"data-testid",`switch-${j}-${t(Te).id}-result`),h(J,te)},[()=>`${o(t(Te))} ${j}`,()=>_(j,t(Te))??"",()=>Si(_(j,t(Te))??Number.NaN)]),re("input",Y,ve=>g(j,t(Te),ve.currentTarget.value)),v(Q,q)},he=Q=>{var q=yk();Xe(q,22,()=>Us(t(Te).description)??[],ae=>ae,(ae,J,ve)=>{var ge=Ek(),te=m(ge,!0),O={};S((U,I)=>{h(te,U),O!==(O=I)&&(ge.value=(ge.__value=O)??"")},[()=>n.meta.valueLabel(t(Te).id,J,e.channelType),()=>String(t(ve))]),v(ae,ge)});var Y;Xt(q),S((ae,J)=>{q.disabled=!e.spec.writable,T(q,"aria-label",ae),T(q,"data-testid",`switch-${j}-${t(Te).id}`),Y!==(Y=J)&&(q.value=(q.__value=Y)??"",Bn(q,Y))},[()=>`${o(t(Te))} ${j}`,()=>String(l(j,t(Te).id)??"")]),re("change",q,ae=>f(j,t(Te).id,Number(ae.currentTarget.value))),v(Q,q)},G=Q=>{var q=wk(),Y=Ne(q),ae=d(Y,2);{var J=ge=>{var te=Sk(),O=m(te,!0);S(U=>h(O,U),[()=>ho(t(Te).description)]),v(ge,te)},ve=c(()=>ho(t(Te).description)!=="");W(ae,ge=>{t(ve)&&ge(J)})}S((ge,te,O,U)=>{T(Y,"min",ge),T(Y,"max",te),T(Y,"step",t(Te).description.TYPE==="FLOAT"?.01:1),Y.disabled=!e.spec.writable,T(Y,"aria-label",O),T(Y,"data-testid",`switch-${j}-${t(Te).id}`),ln(Y,U)},[()=>nr(t(Te).description,"MIN"),()=>nr(t(Te).description,"MAX"),()=>`${o(t(Te))} ${j}`,()=>l(j,t(Te).id)??""]),re("input",Y,ge=>k(j,t(Te).id,ge.currentTarget.value)),v(Q,q)};W(P,Q=>{t(Te).kind==="weekday"?Q(ce):t(Te).kind==="time"?Q(be,1):t(Te).kind==="duration"?Q(ee,2):t(Te).kind==="enum"?Q(he,3):Q(G,-1)})}v(Ae,me)}),S(()=>{T(ne,"data-testid",`switch-slot-${j}`),h(xe,j)}),v(se,ne)}),S((se,j,ne,ye)=>{h(w,se),h(D,j),h(z,ne),h(oe,ye)},[()=>s("Switching programme"),()=>s("No weekday chosen - the slot does nothing"),()=>s("Unused"),()=>s("Slot")]),vr(R,()=>t(a),se=>u(a,se)),v(r,E),ut()}Et(["change","input"]);var ku=y('<button type="button"> </button>'),Au=y("<option> </option>"),xk=y('<div class="hmm-week-bar svelte-1du5x7x"><!> <span class="hmm-week-spacer svelte-1du5x7x"></span> <label class="hmm-week-copy svelte-1du5x7x"><span> </span> <select class="hmm-select" data-testid="week-copy-profile-target"><option>—</option><!></select></label> <button type="button" class="hmm-button" data-testid="week-copy-profile"> </button></div>'),Dk=y('<span class="hmm-week-unit svelte-1du5x7x"> </span>'),Ik=y('<tr><td class="hmm-week-index svelte-1du5x7x"> </td><td class="hmm-week-from svelte-1du5x7x"> </td><td class="svelte-1du5x7x"><input class="hmm-input hmm-week-time svelte-1du5x7x" type="text" inputmode="numeric"/></td><td class="svelte-1du5x7x"><input class="hmm-input hmm-week-value svelte-1du5x7x" type="number" step="0.5"/> <!></td></tr>'),Nk=y("<li> </li>"),Ck=y('<ul class="hmm-week-problems svelte-1du5x7x" data-testid="week-problems"></ul>'),Pk=y('<div class="hmm-editor svelte-1du5x7x" data-testid="editor-week-profile"><h3 class="svelte-1du5x7x"> </h3> <p class="hmm-editor-hint svelte-1du5x7x"> </p> <!> <div class="hmm-week-bar svelte-1du5x7x"><!> <span class="hmm-week-spacer svelte-1du5x7x"></span> <label class="hmm-week-copy svelte-1du5x7x"><span> </span> <select class="hmm-select" data-testid="week-copy-day-target"><option> </option><!></select></label> <button type="button" class="hmm-button" data-testid="week-copy-day"> </button></div> <table class="hmm-week-table svelte-1du5x7x"><thead><tr><th class="svelte-1du5x7x"> </th><th class="svelte-1du5x7x"> </th><th class="svelte-1du5x7x"> </th><th class="svelte-1du5x7x"> </th></tr></thead><tbody></tbody></table> <!></div>');function Mk(r,e){ct(e,!0);const n=Ot(),s=n.i18n.t;let a=C(0),i=C(We(Ji[0]??"MONDAY")),o=C("*"),l=C("");const f=c(()=>e.spec.profiles[t(a)]??e.spec.profiles[0]),p=c(()=>ho(e.spec.valueDescription)),_=c(()=>N0(e.spec,e.values)),g=c(()=>fa(nr(e.spec.valueDescription,"MIN"),e.spec.valueDescription)),k=c(()=>fa(nr(e.spec.valueDescription,"MAX"),e.spec.valueDescription)),E=c(()=>n.meta.parameterLabel(e.spec.valueField,e.channelType)),b=c(()=>t(_).filter(I=>I.profile===(t(f)?.id??"")));function w(I){const F=e.spec.days.indexOf(I),Ee=D0[F];return Ee===void 0?I:s(Ee)}function x(I){return I===""?s("Week programme"):`${s("Profile")} ${I.slice(1)}`}function D(I){return!t(f)||I===1?ri(0):ri(Xl(e.spec,e.values,t(f),t(i),I-1).endTime??0)}function N(I,F){const Ee=M0(F);Ee===void 0||!t(f)||e.onchange({[Qr(t(f).endTimePrefix,t(i),I)]:Ee})}function R(I,F){const Ee=Number(F);F===""||!Number.isFinite(Ee)||!t(f)||e.onchange({[Qr(t(f).valuePrefix,t(i),I)]:Ee})}function M(){if(!t(f))return;const I=t(o)==="*"?e.spec.days:[t(o)];e.onchange(C0(e.spec,e.values,t(f),t(i),I))}function z(){const I=e.spec.profiles.find(F=>F.id===t(l));!t(f)||!I||e.onchange(P0(e.spec,e.values,t(f),[I]))}function $(I){const F={day:w(I.day),slot:String(I.slot),end:ri(e.spec.dayEnd)};switch(I.code){case"not-increasing":return s("{day}: end time {slot} is not after the one before it",F);case"after-day-end":return s("{day}: end time {slot} comes after the day has ended",F);case"day-not-closed":return s("{day}: the last end time must be {end}",F)}}var le=Pk(),fe=A(le),de=m(fe,!0),B=d(fe,2),oe=m(B,!0),K=d(B,2);{var X=I=>{var F=xk(),Ee=A(F);Xe(Ee,19,()=>e.spec.profiles,V=>V.id,(V,L,Pe)=>{var Ge=ku();let qe;var we=m(Ge,!0);S(Ce=>{qe=_t(Ge,1,"hmm-button svelte-1du5x7x",null,qe,{"hmm-week-active":t(Pe)===t(a)}),T(Ge,"data-testid",`week-profile-${t(L).id}`),h(we,Ce)},[()=>x(t(L).id)]),re("click",Ge,()=>u(a,t(Pe),!0)),v(V,Ge)});var Ie=d(Ee,4),Me=A(Ie),Ve=m(Me,!0),ze=d(Me,2),nt=A(ze);nt.value=nt.__value="";var Ze=d(nt);Xe(Ze,17,()=>e.spec.profiles,V=>V.id,(V,L)=>{var Pe=St(),Ge=Ne(Pe);{var qe=we=>{var Ce=Au(),Oe=m(Ce,!0),Be={};S(pe=>{h(Oe,pe),Be!==(Be=t(L).id)&&(Ce.value=(Ce.__value=Be)??"")},[()=>x(t(L).id)]),v(we,Ce)};W(Ge,we=>{t(L).id!==t(f)?.id&&we(qe)})}v(V,Pe)}),Xt(ze);var _e=d(Ie,2),Se=m(_e,!0);S((V,L)=>{h(Ve,V),_e.disabled=!e.spec.writable||t(l)==="",h(Se,L)},[()=>s("Copy profile to"),()=>s("Copy")]),kr(ze,()=>t(l),V=>u(l,V)),re("click",_e,z),v(I,F)};W(K,I=>{e.spec.profiles.length>1&&I(X)})}var se=d(K,2),j=A(se);Xe(j,16,()=>e.spec.days,I=>I,(I,F)=>{var Ee=ku();let Ie;var Me=m(Ee,!0);S(Ve=>{Ie=_t(Ee,1,"hmm-button svelte-1du5x7x",null,Ie,{"hmm-week-active":F===t(i)}),T(Ee,"data-testid",`week-day-${F}`),h(Me,Ve)},[()=>w(F)]),re("click",Ee,()=>u(i,F,!0)),v(I,Ee)});var ne=d(j,4),ye=A(ne),xe=m(ye,!0),ie=d(ye,2),Ae=A(ie),Te=m(Ae,!0);Ae.value=Ae.__value="*";var me=d(Ae);Xe(me,16,()=>e.spec.days,I=>I,(I,F)=>{var Ee=St(),Ie=Ne(Ee);{var Me=Ve=>{var ze=Au(),nt=m(ze,!0),Ze={};S(_e=>{h(nt,_e),Ze!==(Ze=F)&&(ze.value=(ze.__value=Ze)??"")},[()=>w(F)]),v(Ve,ze)};W(Ie,Ve=>{F!==t(i)&&Ve(Me)})}v(I,Ee)}),Xt(ie);var P=d(ne,2),ce=m(P,!0),be=d(se,2),ee=A(be),he=A(ee),G=A(he),Q=m(G,!0),q=d(G),Y=m(q,!0),ae=d(q),J=m(ae,!0),ve=d(ae),ge=m(ve,!0),te=d(ee);Xe(te,20,()=>Array.from({length:e.spec.slots},(I,F)=>F+1),I=>I,(I,F)=>{const Ee=c(()=>t(f)?Xl(e.spec,e.values,t(f),t(i),F):void 0);var Ie=Ik(),Me=A(Ie),Ve=m(Me,!0),ze=d(Me),nt=m(ze,!0),Ze=d(ze),_e=A(Ze),Se=d(Ze),V=A(Se),L=d(V,2);{var Pe=Ge=>{var qe=Dk(),we=m(qe,!0);S(()=>h(we,t(p))),v(Ge,qe)};W(L,Ge=>{t(p)!==""&&Ge(Pe)})}S((Ge,qe,we,Ce)=>{T(Ie,"data-testid",`week-slot-${F}`),h(Ve,F),h(nt,Ge),_e.disabled=!e.spec.writable,T(_e,"aria-label",qe),T(_e,"data-testid",`week-slot-${F}-endtime`),ln(_e,we),T(V,"min",t(g)),T(V,"max",t(k)),V.disabled=!e.spec.writable,T(V,"aria-label",Ce),T(V,"data-testid",`week-slot-${F}-value`),ln(V,t(Ee)?.value??"")},[()=>D(F),()=>`${s("until")} ${F}`,()=>ri(t(Ee)?.endTime),()=>`${s("Value")} ${F}`]),re("change",_e,Ge=>N(F,Ge.currentTarget.value)),re("input",V,Ge=>R(F,Ge.currentTarget.value)),v(I,Ie)});var O=d(be,2);{var U=I=>{var F=Ck();Xe(F,21,()=>t(b),Ee=>`${Ee.day}-${Ee.slot}-${Ee.code}`,(Ee,Ie)=>{var Me=Nk(),Ve=m(Me,!0);S(ze=>h(Ve,ze),[()=>$(t(Ie))]),v(Ee,Me)}),v(I,F)};W(O,I=>{t(b).length>0&&I(U)})}S((I,F,Ee,Ie,Me,Ve,ze,nt)=>{h(de,I),h(oe,F),h(xe,Ee),h(Te,Ie),P.disabled=!e.spec.writable,h(ce,Me),h(Q,Ve),h(Y,ze),h(J,nt),h(ge,t(E))},[()=>s("Week programme"),()=>s("The end times of a day rise until {end}, and the last one is {end}",{end:ri(e.spec.dayEnd)}),()=>s("Copy day to"),()=>s("Weekdays"),()=>s("Copy"),()=>s("Slot"),()=>s("Time"),()=>s("until")]),kr(ie,()=>t(o),I=>u(o,I)),re("click",P,M),v(r,le),ut()}Et(["click","change","input"]);function Ok(r,e){var n=St(),s=Ne(n);Xe(s,17,()=>e.specs,a=>a.id,(a,i)=>{var o=St(),l=Ne(o);{var f=E=>{ak(E,{get spec(){return t(i)},get values(){return e.values},get channelType(){return e.channelType},get onchange(){return e.onchange}})},p=E=>{ck(E,{get spec(){return t(i)},get values(){return e.values},get channelType(){return e.channelType},get onchange(){return e.onchange}})},_=E=>{mk(E,{get spec(){return t(i)},get values(){return e.values},get channelType(){return e.channelType},get onchange(){return e.onchange}})},g=E=>{Rk(E,{get spec(){return t(i)},get values(){return e.values},get channelType(){return e.channelType},get onchange(){return e.onchange}})},k=E=>{Mk(E,{get spec(){return t(i)},get values(){return e.values},get channelType(){return e.channelType},get onchange(){return e.onchange}})};W(l,E=>{t(i).kind==="blind-calibration"?E(f):t(i).kind==="duration-pairs"?E(p,1):t(i).kind==="enum-options"?E(_,2):t(i).kind==="switch-week-profile"?E(g,3):t(i).kind==="week-profile"&&E(k,4)})}v(a,o)}),v(r,n)}class Lk extends Map{#e=new Map;#n=C(0);#t=C(0);#s=Ps||-1;constructor(e){if(super(),e){for(var[n,s]of e)super.set(n,s);this.#t.v=super.size}}#a(e){return Ps===this.#s?C(e):Xs(e)}has(e){var n=this.#e,s=n.get(e);if(s===void 0)if(super.has(e))s=this.#a(0),n.set(e,s);else return t(this.#n),!1;return t(s),!0}forEach(e,n){this.#r(),super.forEach(e,n)}get(e){var n=this.#e,s=n.get(e);if(s===void 0)if(super.has(e))s=this.#a(0),n.set(e,s);else{t(this.#n);return}return t(s),super.get(e)}getOrInsert(e,n){return super.has(e)||this.set(e,n),this.get(e)}getOrInsertComputed(e,n){return super.has(e)||this.set(e,n(e)),this.get(e)}set(e,n){var s=this.#e,a=s.get(e),i=super.get(e),o=super.set(e,n),l=this.#n;if(a===void 0)a=this.#a(0),s.set(e,a),u(this.#t,super.size),gs(l);else if(i!==n){gs(a);var f=l.reactions===null?null:new Set(l.reactions),p=f===null||!a.reactions?.every(_=>f.has(_));p&&gs(l)}return o}delete(e){var n=this.#e,s=n.get(e),a=super.delete(e);return s!==void 0&&(n.delete(e),u(s,-1)),a&&(u(this.#t,super.size),gs(this.#n)),a}clear(){if(super.size!==0){super.clear();var e=this.#e;u(this.#t,0);for(var n of e.values())u(n,-1);gs(this.#n),e.clear()}}#r(){t(this.#n);var e=this.#e;if(this.#t.v!==e.size){for(var n of super.keys())if(!e.has(n)){var s=this.#a(0);e.set(n,s)}}for([,s]of this.#e)t(s)}keys(){return t(this.#n),super.keys()}values(){return this.#r(),super.values()}entries(){return this.#r(),super.entries()}[Symbol.iterator](){return this.entries()}get size(){return t(this.#t),super.size}}const Jl="DYNAMIC_ROUTE_";function qr(r,e,n){return r[`${Jl}${e}_${String(n)}`]}function sl(r){return typeof r=="string"?r:typeof r=="number"?String(r):""}function ra(r){return r===!0||r===1||r==="true"||r==="1"}function Tu(r){if(typeof r=="number"&&Number.isFinite(r))return r;if(typeof r=="string"&&r.trim()!==""&&Number.isFinite(Number(r)))return Number(r)}function rm(r){const e=new Set;for(const n of Object.keys(r))if(n.startsWith(`${Jl}IP_DESTINATION_ADDRESS_`)){const s=Number(n.slice(`${Jl}IP_DESTINATION_ADDRESS_`.length));Number.isInteger(s)&&e.add(s)}return[...e].sort((n,s)=>n-s).map(n=>({index:n,destination:sl(qr(r,"IP_DESTINATION_ADDRESS",n)),nextHop:sl(qr(r,"NEXT_HOP_ADDRESS",n)),distance:Tu(qr(r,"DISTANCE",n))??0,rssi:Tu(qr(r,"RSSI",n)),isStatic:ra(qr(r,"IS_STATIC_ROUTE",n)),isNeighbour:ra(qr(r,"IS_NEIGHBOUR",n)),macSequenceValid:ra(qr(r,"IS_MAC_SEQUENCE_NUMBER_VALID",n)),accessController:ra(qr(r,"OM_ACCESS_CONTROLLER",n)),router:ra(qr(r,"OM_ROUTER",n)),portable:ra(qr(r,"OM_PORTABLE_DEVICE",n)),listenerMode:sl(qr(r,"OM_LISTENER_MODE",n)),omValid:ra(qr(r,"OM_VALID",n))})).filter(n=>n.destination!=="")}function Fk(r,e){const n=new Map([[r,{id:r,router:!0,accessController:!1,portable:!1}]]),s=new Map,a=(o,l)=>{o===""||n.has(o)||n.set(o,{id:o,router:l?.router??!1,accessController:l?.accessController??!1,portable:l?.portable??!1})},i=o=>{const l=`${o.from}>${o.to}`,f=s.get(l);(!f||f.distance===void 0&&o.distance!==void 0)&&s.set(l,o)};for(const o of e)a(o.destination,o),o.isNeighbour||o.nextHop===""||o.nextHop===o.destination?i({from:r,to:o.destination,distance:o.distance,rssi:o.rssi,isStatic:o.isStatic}):(a(o.nextHop),i({from:r,to:o.nextHop,distance:o.distance,rssi:o.rssi,isStatic:o.isStatic}),i({from:o.nextHop,to:o.destination,isStatic:o.isStatic}));return{self:r,nodes:[...n.values()],edges:[...s.values()]}}var Gk=y("<p> </p>"),Uk=Mr('<text class="hmm-routing-edge svelte-10p79ns"> <!></text>'),Bk=Mr("<line></line><!>",1),Hk=Mr('<text text-anchor="middle" class="hmm-routing-mark svelte-10p79ns">AC</text>'),Vk=Mr('<text text-anchor="middle" class="hmm-routing-mark svelte-10p79ns">R</text>'),zk=Mr('<text text-anchor="middle" class="hmm-routing-mark svelte-10p79ns">P</text>'),jk=Mr('<g><circle class="svelte-10p79ns"></circle><text text-anchor="middle" class="svelte-10p79ns"> </text><!></g>'),Wk=y('<tr><td class="svelte-10p79ns"> </td><td class="svelte-10p79ns"><span class="hmm-mono"> </span> </td><td class="svelte-10p79ns"><span class="hmm-mono"> </span></td><td class="svelte-10p79ns"> </td><td class="svelte-10p79ns"> </td><td class="svelte-10p79ns"> </td><td class="svelte-10p79ns"> </td><td class="svelte-10p79ns"> </td><td class="svelte-10p79ns"> </td><td class="svelte-10p79ns"> </td><td class="svelte-10p79ns"> </td><td class="svelte-10p79ns"> </td></tr>'),Kk=y('<svg class="hmm-routing-graph svelte-10p79ns" role="img"><!><!></svg> <table class="hmm-table hmm-routing-list svelte-10p79ns"><thead><tr><th class="svelte-10p79ns">#</th><th class="svelte-10p79ns"> </th><th class="svelte-10p79ns"> </th><th class="svelte-10p79ns"> </th><th class="svelte-10p79ns">RSSI</th><th class="svelte-10p79ns"> </th><th class="svelte-10p79ns"> </th><th class="svelte-10p79ns"> </th><th class="svelte-10p79ns"> </th><th class="svelte-10p79ns"> </th><th class="svelte-10p79ns"> </th><th class="svelte-10p79ns"> </th></tr></thead><tbody></tbody></table>',1),Yk=y('<div class="hmm-routing svelte-10p79ns" data-testid="routing-table"><p class="hmm-routing-hint svelte-10p79ns"> </p> <!></div>');function sm(r,e){ct(e,!0);let n=H(e,"values",19,()=>({})),s=H(e,"cached",3,void 0),a=H(e,"readAt",3,void 0);const i=Ot(),o=i.i18n.t,l=c(()=>s()===void 0?rm(n()):[...s()]),f=c(()=>Fk(e.self,t(l))),p=R=>{const M=i.nameOf(R);return M&&M!==R?M:R},_=560,g=c(()=>{const R=new Lk,M=_/2,z=_/2;R.set(t(f).self,{x:M,y:z});const $=t(f).edges.filter(de=>de.from===t(f).self).map(de=>de.to),le=t(f).nodes.map(de=>de.id).filter(de=>de!==t(f).self&&!$.includes(de)),fe=(de,B,oe)=>{de.forEach((K,X)=>{const se=oe+2*Math.PI*X/Math.max(de.length,1);R.set(K,{x:M+B*Math.cos(se),y:z+B*Math.sin(se)})})};return fe($,_*.26,-Math.PI/2),fe(le,_*.44,-Math.PI/2+Math.PI/Math.max(le.length,1)),R}),k=R=>t(g).get(R)??{x:_/2,y:_/2};var E=Yk(),b=A(E),w=m(b,!0),x=d(b,2);{var D=R=>{var M=Gk(),z=m(M,!0);S($=>h(z,$),[()=>o("No routes: the device reported an empty table.")]),v(R,M)},N=R=>{var M=Kk(),z=Ne(M),$=A(z);Xe($,17,()=>t(f).edges,ae=>`${ae.from}>${ae.to}`,(ae,J)=>{const ve=c(()=>k(t(J).from)),ge=c(()=>k(t(J).to));var te=Bk(),O=Ne(te);let U;var I=d(O);{var F=Ee=>{var Ie=Uk(),Me=A(Ie),Ve=d(Me);{var ze=nt=>{var Ze=Cn();S(()=>h(Ze,`, ${t(J).rssi??""} dBm`)),v(nt,Ze)};W(Ve,nt=>{t(J).rssi!==void 0&&nt(ze)})}S(nt=>{T(Ie,"x",(t(ve).x+t(ge).x)/2),T(Ie,"y",(t(ve).y+t(ge).y)/2-4),h(Me,`${t(J).distance??""}
17
- ${nt??""}`)},[()=>o("hops",{},t(J).distance)]),v(Ee,Ie)};W(I,Ee=>{t(J).distance!==void 0&&Ee(F)})}S(()=>{T(O,"x1",t(ve).x),T(O,"y1",t(ve).y),T(O,"x2",t(ge).x),T(O,"y2",t(ge).y),U=_t(O,0,"svelte-10p79ns",null,U,{"hmm-routing-static":t(J).isStatic})}),v(ae,te)});var le=d($);Xe(le,17,()=>t(f).nodes,ae=>ae.id,(ae,J)=>{const ve=c(()=>k(t(J).id));var ge=jk();let te;var O=A(ge),U=d(O),I=m(U,!0),F=d(U);{var Ee=Ve=>{var ze=Hk();S(()=>{T(ze,"x",t(ve).x),T(ze,"y",t(ve).y+4)}),v(Ve,ze)},Ie=Ve=>{var ze=Vk();S(()=>{T(ze,"x",t(ve).x),T(ze,"y",t(ve).y+4)}),v(Ve,ze)},Me=Ve=>{var ze=zk();S(()=>{T(ze,"x",t(ve).x),T(ze,"y",t(ve).y+4)}),v(Ve,ze)};W(F,Ve=>{t(J).accessController?Ve(Ee):t(J).router?Ve(Ie,1):t(J).portable&&Ve(Me,2)})}S(Ve=>{te=_t(ge,0,"hmm-routing-node svelte-10p79ns",null,te,{"hmm-routing-self":t(J).id===t(f).self,"hmm-routing-router":t(J).router}),T(O,"cx",t(ve).x),T(O,"cy",t(ve).y),T(O,"r",t(J).id===t(f).self?22:16),T(U,"x",t(ve).x),T(U,"y",t(ve).y+30),h(I,Ve)},[()=>p(t(J).id)]),v(ae,ge)});var fe=d(z,2),de=A(fe),B=A(de),oe=d(A(B)),K=m(oe,!0),X=d(oe),se=m(X,!0),j=d(X),ne=m(j,!0),ye=d(j,2),xe=m(ye,!0),ie=d(ye),Ae=m(ie,!0),Te=d(ie),me=m(Te,!0),P=d(Te),ce=m(P,!0),be=d(P),ee=m(be,!0),he=d(be),G=m(he,!0),Q=d(he),q=m(Q,!0),Y=d(de);Xe(Y,21,()=>t(l),ae=>ae.index,(ae,J)=>{var ve=Wk(),ge=A(ve),te=m(ge,!0),O=d(ge),U=A(O),I=m(U,!0),F=d(U),Ee=d(O),Ie=A(Ee),Me=m(Ie,!0),Ve=d(Ee),ze=m(Ve,!0),nt=d(Ve),Ze=m(nt,!0),_e=d(nt),Se=m(_e,!0),V=d(_e),L=m(V,!0),Pe=d(V),Ge=m(Pe,!0),qe=d(Pe),we=m(qe,!0),Ce=d(qe),Oe=m(Ce,!0),Be=d(Ce),pe=m(Be,!0),De=d(Be),Ue=m(De,!0);S((Fe,Ye,tt)=>{T(ve,"data-testid",Fe),h(te,t(J).index),h(I,t(J).destination),h(F,` ${Ye??""}`),h(Me,t(J).nextHop),h(ze,t(J).distance),h(Ze,tt),h(Se,t(J).isNeighbour?"✔":""),h(L,t(J).isStatic?"✔":""),h(Ge,t(J).router?"✔":""),h(we,t(J).accessController?"✔":""),h(Oe,t(J).portable?"✔":""),h(pe,t(J).listenerMode),h(Ue,t(J).omValid?"✔":"")},[()=>`route-${String(t(J).index)}`,()=>p(t(J).destination)!==t(J).destination?p(t(J).destination):"",()=>t(J).rssi===void 0?"":`${String(t(J).rssi)} dBm`]),v(ae,ve)}),S((ae,J,ve,ge,te,O,U,I,F,Ee,Ie,Me)=>{T(z,"viewBox",ae),T(z,"aria-label",J),h(K,ve),h(se,ge),h(ne,te),h(xe,O),h(Ae,U),h(me,I),h(ce,F),h(ee,Ee),h(G,Ie),h(q,Me)},[()=>`0 0 ${String(_)} ${String(_)}`,()=>o("Routing table"),()=>o("Destination"),()=>o("Next hop"),()=>o("Hops"),()=>o("Neighbour"),()=>o("Static"),()=>o("Router"),()=>o("Access controller"),()=>o("Portable"),()=>o("Listener mode"),()=>o("Valid")]),v(R,M)};W(x,R=>{t(l).length===0?R(D):R(N,-1)})}S(R=>h(w,R),[()=>a()===void 0?o("Read from the device itself; every read costs duty cycle, so it is read once when this opens."):o("Read from the device at {time}; not read again here.",{time:ca(a(),i.i18n.language)})]),v(r,E),ut()}var qk=y('<div><div class="hmm-param-label svelte-ery515"><span> </span></div> <div class="hmm-param-control svelte-ery515"><label class="hmm-param-suppress svelte-ery515"><input type="checkbox"/> <span> </span></label></div></div>');function $k(r,e){ct(e,!0);let n=H(e,"title",3,void 0),s=H(e,"changed",3,!1);var a=qk();let i;var o=A(a),l=A(o),f=m(l,!0),p=d(o,2),_=A(p),g=A(_),k=d(g,2),E=m(k,!0);S(()=>{i=_t(a,1,"hmm-param hmm-param-table-row svelte-ery515",null,i,{"hmm-param-changed":s()}),T(a,"data-testid",`suppress-row-${e.name}`),h(f,e.name),T(_,"title",n()),Pr(g,e.suppressed),T(g,"data-testid",`suppress-${e.name}`),h(E,e.label)}),re("change",g,b=>e.onchange(b.currentTarget.checked)),v(r,a),ut()}Et(["change"]);var Xk=y('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="paramset-preview"> </button>',1),Qk=y("<p> </p>"),Zk=y('<p data-testid="paramset-failed"> </p>'),Jk=y('<label class="hmm-paramset-option svelte-onngst"><input type="checkbox" data-testid="paramset-expert"/> <span> </span></label>'),eA=y('<label class="hmm-paramset-option svelte-onngst"><input type="checkbox" data-testid="paramset-show-covered"/> <span> </span></label>'),tA=y('<button type="button" class="hmm-button" data-testid="paramset-internal-key"> </button>'),nA=y('<label class="hmm-paramset-option svelte-onngst"><input type="checkbox" data-testid="paramset-show-hidden"/> <span> </span></label>'),rA=y("<li> </li>"),sA=y('<ul class="hmm-paramset-warnings svelte-onngst" data-testid="paramset-warnings"></ul>'),aA=y('<p class="hmm-paramset-legend svelte-onngst" data-testid="paramset-easy-legend"><span class="hmm-paramset-easy-swatch svelte-onngst" aria-hidden="true"></span> </p>'),iA=y("<div><!></div>"),oA=y('<div class="hmm-paramset-suppress svelte-onngst" data-testid="paramset-service-messages"><span class="hmm-paramset-suppress-hint svelte-onngst"> </span> <button type="button" class="hmm-button" data-testid="suppress-all"> </button> <button type="button" class="hmm-button" data-testid="unsuppress-all"> </button> <button type="button" class="hmm-button" data-testid="suppress-apply"> </button></div>'),lA=y('<li><span class="hmm-mono"> </span> </li>'),dA=y('<ul class="hmm-paramset-results svelte-onngst" data-testid="paramset-results"></ul>'),cA=y('<div class="hmm-paramset-top svelte-onngst"><!> <label class="hmm-paramset-option svelte-onngst"><input type="checkbox" data-testid="paramset-write-all"/> <span> </span></label> <!> <!> <!> <!></div> <!> <!> <!> <!> <div><!> <!> <!></div> <!> <!>',1),uA=y("<!> <!> <!> <!>",1);function am(r,e){ct(e,!0);let n=H(e,"open",15,!1),s=H(e,"interfaceName",3,""),a=H(e,"address",3,""),i=H(e,"paramset",3,"MASTER");const o=Ot(),l=o.i18n.t;let f=C(void 0),p=C(We({})),_=C(We({})),g=C(We({})),k=C(void 0),E=C(""),b=C(!1),w=C(We([])),x=C(!1),D=C(!1),N=C(!1),R=C(!1),M=C(!1),z=C(void 0),$=C(We([])),le=C(We([])),fe=0,de=C(void 0),B=C(We({})),oe=C(void 0),K=C(!1),X=C(void 0),se=C(!1);const j=c(()=>_i(s(),o.interfaces.typeOf(s()))),ne=c(()=>n()&&t(j)&&/:0$/.test(a())&&(i()==="MASTER"||i()==="VALUES"));ot(()=>{if(!t(ne)){u(de,void 0),u(B,{},!0),u(oe,void 0);return}const ke={interfaceName:s(),address:a(),paramset:i()};u(B,{},!0),sr(()=>{o.paramsets.suppressedServiceMessages(ke.interfaceName,ke.address).then(Le=>{ke.address===a()&&ke.interfaceName===s()&&u(de,Le,!0)}),ke.paramset==="MASTER"&&o.paramsets.describe(ke.interfaceName,ke.address,"VALUES").then(Le=>{ke.address===a()&&ke.interfaceName===s()&&u(oe,Le,!0)})})});const ye=c(()=>{if(t(de)===void 0)return[];const ke=i()==="VALUES"?t(f):t(oe);return ke?Jh(ke):[]}),xe=c(()=>i()==="MASTER"?t(ye):[]);function ie(ke){return t(B)[ke]??t(de)?.includes(ke)===!0}function Ae(ke){return ke in t(B)&&t(B)[ke]!==(t(de)?.includes(ke)===!0)}const Te=c(()=>t(ye).some(ke=>Ae(ke)));function me(ke,Le){u(B,{...t(B),[ke]:Le},!0)}function P(ke){u(B,Object.fromEntries(t(ye).map(Le=>[Le,ke])),!0)}function ce(){u(X,V0({address:a(),suppressed:t(de)??[],edits:t(B),labels:{suppressed:l("suppressed"),unsuppressed:l("not suppressed")}}),!0),u(K,!0)}async function be(){const ke=t(X);if(ke){u(se,!0);try{for(const Le of ke.entries)await o.paramsets.suppressServiceMessages(s(),a(),Le.param,t(B)[Le.param]===!0);u(de,await o.paramsets.suppressedServiceMessages(s(),a()),!0),u(B,{},!0)}finally{u(se,!1),u(K,!1)}}}const ee=c(()=>o.devices.index(s())),he=c(()=>t(ee)?.get(a())?.TYPE??""),G=c(()=>`${i()} — ${o.nameOf(a())} (${a()})`),Q=c(()=>t(f)?Zh(t(f),t(k)):[]),q=c(()=>({optionByName:(ke,Le)=>o.meta.valueLabelIfKnown(ke,Le,t(he)),optionByIndex:(ke,Le)=>o.meta.valueLabelIfKnown(ke,String(Le),t(he)),preset:ke=>t(k)?.parameters.find(Le=>Le.name===ke)?.preset,uiLabel:ke=>o.meta.uiLabel(ke)})),Y=c(()=>t(f)?G0({interfaceName:s(),address:a(),channelType:t(he),paramset:i(),description:t(f)},t(q)):[]),ae=c(()=>t(N)||t(R)?new Set:U0(t(Y))),J=c(()=>t(Q).filter(ke=>(t(D)||ke.visible)&&!t(ae).has(ke.name))),ve=c(()=>i()==="MASTER"&&t(f)?wh(t(k)?.controls,t(f)):void 0),ge=c(()=>t(R)?void 0:t(ve)),te=c(()=>t(R)?Nl(t(ve)):new Set),O=c(()=>new Map(t(Q).map(ke=>[ke.name,ke]))),U=c(()=>Nl(t(ve))),I=c(()=>t(R)?[]:t(ge)?t(Y).filter(ke=>!ke.covers.every(Le=>t(U).has(Le))):t(Y));ot(()=>{n()&&i()==="MASTER"&&o.meta.loadPresets()});const F=c(()=>i()==="VALUES"),Ee=c(()=>i()==="MASTER"),Ie=c(()=>{if(!t(Ee)||!t(ee)||a()===""||!t(ee).has(a()))return;const ke=t(ee).all().filter(Le=>Le.TYPE===t(he)&&Le.ADDRESS!==a()).map(Le=>Le.ADDRESS);return M_(t(ee),a(),i(),ke)}),Me=c(()=>t(Ie)?[...t(Ie).eligible.map(ke=>({value:ke,label:`${o.nameOf(ke)} (${ke})`})),...t(Ie).ineligible.filter(ke=>ke.reason==="different-identity").map(ke=>({value:ke.address,label:`${o.nameOf(ke.address)} (${ke.address}) — ${l("other firmware or device type")}`,disabled:!0}))]:[]),Ve=c(()=>(t(k)?.problems??[]).map(ke=>`${ke.params.join(", ")}: ${o.meta.uiLabel(ke.errorKey)}`));ot(()=>{if(!n()||s()===""||a()==="")return;const ke=fe+=1,Le={interfaceName:s(),address:a(),paramset:i()};o.paramsets.open(Le.interfaceName,Le.address,Le.paramset).then($e=>{ke===fe&&(u(f,$e?.description,!0),u(p,$e?.values??{},!0),u(_,{},!0),Le.paramset==="VALUES"&&Be(ke),u(g,{},!0),u($,[],!0),u(le,[],!0),u(w,[],!0),u(x,!1),u(R,!1))})}),ot(()=>{const ke=t(f);if(!n()||!ke||i()!=="MASTER"||t(he)===""){u(k,void 0),ze=void 0;return}const Le=Ze(),$e=t(E),at=nt(s(),a());o.meta.masterView(t(he),ke,Le,$e,at).then(lt=>{u(k,lt,!0)})});let ze;function nt(ke,Le){const $e=`${ke}|${Le}`,at=Le.indexOf(":"),lt=at<0?Le:Le.slice(0,at);return{deviceType:t(ee)?.get(Le)?.PARENT_TYPE||t(ee)?.get(lt)?.TYPE||"",channel:at<0?-1:Number(Le.slice(at+1)),channelMode:()=>(ze?.key!==$e&&(ze={key:$e,answer:o.paramsets.channelMode(ke,Le)}),ze.answer)}}ot(()=>{if(!n()||i()!=="MASTER"||a()===""){u(E,"");return}const ke=`${s()}|${a()}`;u(E,""),o.paramsets.paramsetId(s(),a()).then(Le=>o.meta.masterFormId(Le)).then(Le=>{`${s()}|${a()}`===ke&&u(E,Le,!0)})});function Ze(){const ke={...t(p)};for(const[Le,$e]of Object.entries(t(g)))(typeof $e=="boolean"||typeof $e=="number"||typeof $e=="string")&&(ke[Le]=$e);return ke}function _e(ke){return Object.prototype.hasOwnProperty.call(t(g),ke.name)?t(g)[ke.name]:t(p)[ke.name]??ke.description.DEFAULT}function Se(ke){return Object.prototype.hasOwnProperty.call(t(g),ke.name)}function V(ke,Le){u(g,{...t(g),[ke.name]:Le},!0)}function L(ke){u(g,{...t(g),...ke},!0)}function Pe(ke){return o.meta.parameterLabel(ke.name,t(he))}function Ge(ke){const Le=o.meta.parameterHelp(ke.name,t(he));return Le===void 0?void 0:Le.replace(/<[^>]*>/g," ").replace(/\s+/g," ").trim()}function qe(){t(f)&&(u($,[],!0),u(le,[],!0),u(z,li(t(p),t(g),t(f),{interfaceName:s(),targets:[a(),...t(w)],writeAll:t(x)}),!0),u(M,!0))}async function we(){const ke=t(z);if(!ke||!t(f))return;const Le=await o.paramsets.put(s(),[...ke.targets],i(),ke.values,t(x)?{writeAll:!0}:void 0);u($,Le,!0);const $e=await o.paramsets.read(s(),a(),i());$e&&(u(le,Ql(ke.values,$e,t(f)),!0),u(p,$e,!0),i()==="VALUES"&&Be(fe),u(g,{},!0)),Le.length>0&&Le.every(at=>at.ok)&&!t(le).some(at=>at.differs)&&u(M,!1)}function Ce(){const ke=t(z);!ke||ke.entries.length===0||(o.changeSet.stage({kind:"paramset",interfaceName:s(),title:`${i()} — ${o.nameOf(a())} (${a()})`,targets:[...ke.targets],paramset:i(),values:ke.values,writeAll:t(x),calls:ke.targets.map(Le=>`putParamset(${Le}, ${i()}, ${JSON.stringify(ke.values)})`),lines:ke.entries.map(Le=>({label:Le.param,from:Le.from,to:Le.to}))}),u(M,!1),n(!1))}function Oe(ke,Le){if(ke.kind==="enum"&&typeof Le=="number"){const $e=ke.valueList?.[Le];if($e!==void 0)return`${o.meta.valueLabel(ke.name,$e,t(he))} (${Le})`}return String(Le)}async function Be(ke){const Le=await o.paramsets.valueStates(s(),a());ke===fe&&u(_,Le,!0)}async function pe(ke){const Le=_e(ke),$e=typeof Le=="boolean"||typeof Le=="number"||typeof Le=="string"?Le:!1;await o.paramsets.setValue(s(),a(),ke.name,$e)&&(u(g,Object.fromEntries(Object.entries(t(g)).filter(([lt])=>lt!==ke.name)),!0),u(p,{...t(p),[ke.name]:$e},!0),Be(fe),o.notices.push("info",`setValue ${o.nameOf(a())} (${a()}) ${ke.name} = ${Oe(ke,$e)}`))}var De=uA(),Ue=Ne(De);En(Ue,{get title(){return t(G)},width:"900px",height:"min(640px, calc(100vh - 32px))",minWidth:520,minHeight:320,testId:"paramset-dialog",get open(){return n()},set open(Le){n(Le)},buttons:Le=>{var $e=Xk(),at=Ne($e),lt=m(at,!0),Je=d(at,2),Pt=m(Je,!0);S((Tt,Lt)=>{h(lt,Tt),Je.disabled=!t(f),h(Pt,Lt)},[()=>l("Close"),()=>l("Preview")]),re("click",at,()=>n(!1)),re("click",Je,qe),v(Le,$e)},children:(Le,$e)=>{var at=St(),lt=Ne(at);{var Je=Lt=>{var Qt=Qk(),pn=m(Qt,!0);S(wn=>h(pn,wn),[()=>l("Loading Homematic Manager...")]),v(Lt,Qt)},Pt=Lt=>{var Qt=Zk(),pn=m(Qt,!0);S(wn=>h(pn,wn),[()=>l("No data")]),v(Lt,Qt)},Tt=Lt=>{var Qt=cA(),pn=Ne(Qt),wn=A(pn);{var tn=it=>{{let bt=c(()=>l("Please choose one or more channels")),It=c(()=>l("Please choose one or more channels")),et=c(()=>l("Filter")),rt=c(()=>l("Check all")),je=c(()=>l("Uncheck all"));bi(it,{get options(){return t(Me)},get label(){return t(bt)},get placeholder(){return t(It)},get filterLabel(){return t(et)},get checkAllLabel(){return t(rt)},get uncheckAllLabel(){return t(je)},summary:vt=>l("{count} channels selected",{},vt.length),testId:"paramset-targets",get selected(){return t(w)},set selected(vt){u(w,vt,!0)}})}};W(wn,it=>{t(Ee)&&t(Me).length>0&&it(tn)})}var bn=d(wn,2),Pn=A(bn),$n=d(Pn,2),Xn=m($n,!0),Zt=d(bn,2);{var Ft=it=>{var bt=Jk(),It=A(bt),et=d(It,2),rt=m(et,!0);S(je=>h(rt,je),[()=>l("Expert view")]),vr(It,()=>t(R),je=>u(R,je)),v(it,bt)};W(Zt,it=>{t(ve)&&it(Ft)})}var Jt=d(Zt,2);{var Qn=it=>{var bt=eA(),It=A(bt),et=d(It,2),rt=m(et,!0);S(je=>h(rt,je),[()=>l("Show the raw parameters as well")]),vr(It,()=>t(N),je=>u(N,je)),v(it,bt)};W(Jt,it=>{t(Y).length>0&&!t(ve)&&it(Qn)})}var Mn=d(Jt,2);{var Or=it=>{var bt=tA(),It=m(bt,!0);S(et=>h(It,et),[()=>l("Internal key…")]),re("click",bt,()=>u(b,!0)),v(it,bt)};W(Mn,it=>{t(k)?.internalKey&&it(Or)})}var zr=d(Mn,2);{var Zn=it=>{var bt=nA(),It=A(bt),et=d(It,2),rt=m(et,!0);S(je=>h(rt,je),[()=>l("Show hidden parameters")]),vr(It,()=>t(D),je=>u(D,je)),v(it,bt)},jn=c(()=>t(Q).some(it=>!it.visible)&&!t(ge));W(zr,it=>{t(jn)&&it(Zn)})}var Lr=d(pn,2);{var cs=it=>{var bt=sA();Xe(bt,20,()=>t(Ve),It=>It,(It,et)=>{var rt=rA(),je=m(rt,!0);S(()=>h(je,et)),v(It,rt)}),v(it,bt)};W(Lr,it=>{t(Ve).length>0&&it(cs)})}var ar=d(Lr,2);{let it=c(Ze);Ok(ar,{get specs(){return t(I)},get values(){return t(it)},get channelType(){return t(he)},onchange:L})}var Ar=d(ar,2);{var jr=it=>{{let bt=c(()=>a().split(":")[0]??a());sm(it,{get values(){return t(p)},get self(){return t(bt)}})}};W(Ar,it=>{i()==="ROUTING_TABLE"&&it(jr)})}var cr=d(Ar,2);{var Tr=it=>{var bt=aA(),It=d(A(bt),1,!0);S(et=>h(It,et),[()=>l("Marked: the parameters the easy mode of this channel shows")]),v(it,bt)};W(cr,it=>{t(R)&&t(te).size>0&&it(Tr)})}var ur=d(cr,2);let ns;var Fr=A(ur);{var pr=it=>{{let bt=c(Ze);tm(it,{get form(){return t(ge)},get fields(){return t(O)},get values(){return t(bt)},changed:It=>Object.prototype.hasOwnProperty.call(t(g),It),get description(){return t(f)},get channelType(){return t(he)},get presets(){return o.meta.presets},get timeSelectors(){return o.meta.timeSelectors},onchange:L,testId:"paramset-easy-form"})}};W(Fr,it=>{t(ge)&&t(f)&&it(pr)})}var gr=d(Fr,2);Xe(gr,17,()=>t(ge)?[]:t(J),it=>it.name,(it,bt)=>{const It=c(()=>t(ye).includes(t(bt).name));var et=iA();let rt;var je=A(et);{let vt=c(()=>_e(t(bt))),At=c(()=>Pe(t(bt))),zt=c(()=>Ge(t(bt))),hn=c(()=>Se(t(bt))),Ht=c(()=>t(F)?t(_)[t(bt).name]:void 0),Mt=c(()=>t(F)&&t(bt).writable?()=>{pe(t(bt))}:void 0),kn=c(()=>t(It)?ie(t(bt).name):void 0),An=c(()=>t(It)?Gn=>me(t(bt).name,Gn):void 0),dn=c(()=>l("suppressed")),_n=c(()=>l("A suppressed one reports a value that raises no message; the CCU shows it as inactive.")),or=c(()=>t(It)&&Ae(t(bt).name));Da(je,{get field(){return t(bt)},get value(){return t(vt)},get label(){return t(At)},get help(){return t(zt)},get changed(){return t(hn)},valueLabel:Gn=>o.meta.valueLabel(t(bt).name,Gn,t(he)),presetLabel:Gn=>o.meta.uiLabel(Gn),get valueState(){return t(Ht)},onchange:Gn=>V(t(bt),Gn),get onset(){return t(Mt)},get suppressed(){return t(kn)},get onsuppress(){return t(An)},get suppressLabel(){return t(dn)},get suppressTitle(){return t(_n)},get suppressChanged(){return t(or)}})}S(vt=>rt=_t(et,1,"hmm-paramset-easy-mark hmm-param-table-span svelte-onngst",null,rt,{"hmm-paramset-easy-marked":vt}),[()=>t(te).has(t(bt).name)]),v(it,et)});var ue=d(gr,2);Xe(ue,16,()=>t(xe),it=>it,(it,bt)=>{{let It=c(()=>ie(bt)),et=c(()=>Ae(bt)),rt=c(()=>l("suppressed")),je=c(()=>l("A suppressed one reports a value that raises no message; the CCU shows it as inactive."));$k(it,{get name(){return bt},get suppressed(){return t(It)},get changed(){return t(et)},get label(){return t(rt)},get title(){return t(je)},onchange:vt=>me(bt,vt)})}});var He=d(ur,2);{var Vt=it=>{var bt=oA(),It=A(bt),et=m(It),rt=d(It,2),je=m(rt,!0),vt=d(rt,2),At=m(vt,!0),zt=d(vt,2),hn=m(zt,!0);S((Ht,Mt,kn,An,dn)=>{h(et,`${Ht??""} — ${Mt??""}`),h(je,kn),h(At,An),zt.disabled=!t(Te)||t(se),h(hn,dn)},[()=>l("Service message suppression"),()=>l("Nothing is sent until Apply; the preview lists every call first."),()=>l("Suppress all"),()=>l("Unsuppress all"),()=>l("Apply")]),re("click",rt,()=>P(!0)),re("click",vt,()=>P(!1)),re("click",zt,ce),v(it,bt)};W(He,it=>{t(ye).length>0&&it(Vt)})}var yn=d(He,2);{var ir=it=>{var bt=dA();Xe(bt,21,()=>t($),It=>`${It.address}-${It.paramset}`,(It,et)=>{var rt=lA();let je;var vt=A(rt),At=m(vt,!0),zt=d(vt);S(()=>{je=_t(rt,1,"svelte-onngst",null,je,{"hmm-paramset-failed":!t(et).ok}),h(At,t(et).address),h(zt,` ${t(et).ok?"✔":`✕ ${t(et).faultString??""}`}`)}),v(It,rt)}),v(it,bt)};W(yn,it=>{t($).length>0&&it(ir)})}S(it=>{h(Xn,it),ns=_t(ur,1,"hmm-paramset-list hmm-param-table svelte-onngst",null,ns,{"hmm-paramset-raw":i()==="ROUTING_TABLE"})},[()=>l("Write every parameter, not only the changed ones")]),vr(Pn,()=>t(x),it=>u(x,it)),v(Lt,Qt)};W(lt,Lt=>{o.paramsets.loading&&!t(f)?Lt(Je):t(f)?Lt(Tt,-1):Lt(Pt,1)})}v(Le,at)},$$slots:{buttons:!0,default:!0}});var Fe=d(Ue,2);Zl(Fe,{get preview(){return t(z)},get paramset(){return i()},get warnings(){return t(Ve)},get results(){return t($)},get readBack(){return t(le)},get writing(){return o.paramsets.writing},onstage:Ce,onconfirm:()=>{we()},get open(){return t(M)},set open(ke){u(M,ke,!0)}});var Ye=d(Fe,2);{var tt=ke=>{{let Le=c(()=>l("Apply")),$e=c(()=>l("{count} calls will be made",{},t(X)?.entries.length??0));Zl(ke,{get preview(){return t(X)},paramset:"VALUES",get writing(){return t(se)},get confirmLabel(){return t(Le)},get countText(){return t($e)},onconfirm:()=>{be()},get open(){return t(K)},set open(at){u(K,at,!0)}})}};W(Ye,ke=>{t(K)&&ke(tt)})}var ft=d(Ye,2);{var dt=ke=>{nm(ke,{get sender(){return a()},get receiver(){return a()},get open(){return t(b)},set open(Le){u(b,Le,!0)}})};W(ft,ke=>{t(b)&&ke(dt)})}v(r,De),ut()}Et(["click"]);const fA="modulepreload",hA=function(r,e){return new URL(r,e).href},Ru={},mA=function(e,n,s){let a=Promise.resolve();if(n&&n.length>0){let p=function(_){return Promise.all(_.map(g=>Promise.resolve(g).then(k=>({status:"fulfilled",value:k}),k=>({status:"rejected",reason:k}))))};const o=document.getElementsByTagName("link"),l=document.querySelector("meta[property=csp-nonce]"),f=l?.nonce||l?.getAttribute("nonce");a=p(n.map(_=>{if(_=hA(_,s),_ in Ru)return;Ru[_]=!0;const g=_.endsWith(".css"),k=g?'[rel="stylesheet"]':"";if(s)for(let b=o.length-1;b>=0;b--){const w=o[b];if(w.href===_&&(!g||w.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${_}"]${k}`))return;const E=document.createElement("link");if(E.rel=g?"stylesheet":fA,g||(E.as="script"),E.crossOrigin="",E.href=_,f&&E.setAttribute("nonce",f),document.head.appendChild(E),g)return new Promise((b,w)=>{E.addEventListener("load",b),E.addEventListener("error",()=>w(new Error(`Unable to preload CSS for ${_}`)))})}))}function i(o){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=o,window.dispatchEvent(l),!l.defaultPrevented)throw o}return a.then(o=>{for(const l of o||[])l.status==="rejected"&&i(l.reason);return e().catch(i)})};var vA=y('<video class="hmm-qr svelte-1e4doc5" autoplay="" playsinline=""></video>',2);function pA(r,e){ct(e,!0);let n=H(e,"active",3,!1),s=H(e,"onerror",3,void 0),a=H(e,"createReader",3,void 0),i=H(e,"insecureContextMessage",3,"The camera needs https or localhost."),o=H(e,"testId",3,void 0),l=C(void 0),f;ot(()=>{if(!n()){g();return}const w=t(l);if(!w)return;if(!p()){s()?.(i());return}const x={cancelled:!1};return(async()=>{try{const N=await(a()?await a()():await _()).decodeFromVideoDevice(void 0,w,R=>{R&&e.onscan(R.getText())});x.cancelled?N.stop():f=N}catch(D){s()?.(D instanceof Error?D.message:String(D))}})(),()=>{x.cancelled=!0,g()}});function p(){return globalThis.navigator?.mediaDevices!==void 0&&globalThis.isSecureContext}async function _(){const{BrowserQRCodeReader:w}=await mA(async()=>{const{BrowserQRCodeReader:x}=await import("./index-BN6QZh6-.js");return{BrowserQRCodeReader:x}},[],import.meta.url);return new w}function g(){f?.stop(),f=void 0}Cp(g);var k=St(),E=Ne(k);{var b=w=>{var x=vA();x.muted=!0,fn(x,D=>u(l,D),()=>t(l)),S(()=>T(x,"data-testid",o())),v(w,x)};W(E,w=>{n()&&w(b)})}v(r,k),ut()}var gA=y('<button type="button" class="hmm-button"> </button>'),bA=y('<p> </p> <button type="button" class="hmm-button" data-testid="add-device-search">searchDevices</button>',1),_A=y("<option> </option>"),EA=y('<label class="hmm-add-row svelte-rkdrrf"><span class="svelte-rkdrrf">KEY</span> <input data-testid="add-device-key"/></label> <div class="hmm-add-row svelte-rkdrrf"><span class="svelte-rkdrrf"></span> <p class="hmm-add-hint svelte-rkdrrf" data-testid="add-device-key-hint"> </p></div>',1),yA=y('<span class="hmm-add-error svelte-rkdrrf" data-testid="add-device-scan-error"> </span>'),SA=y('<label class="hmm-add-row svelte-rkdrrf"><span class="svelte-rkdrrf">SGTIN</span> <input data-testid="add-device-sgtin"/></label> <!> <div class="hmm-add-row svelte-rkdrrf"><span class="svelte-rkdrrf"> </span> <div class="svelte-rkdrrf"><button type="button" class="hmm-button" data-testid="add-device-scan"> </button> <!></div></div> <!>',1),wA=y('<label class="hmm-add-row svelte-rkdrrf"><span class="svelte-rkdrrf"> </span> <select class="hmm-select svelte-rkdrrf" data-testid="add-device-hmip-mode"><option> </option><!><option> </option></select></label> <div class="hmm-add-row svelte-rkdrrf"><span class="svelte-rkdrrf"></span> <p class="hmm-add-hint svelte-rkdrrf" data-testid="add-device-hmip-hint"> </p></div> <div class="hmm-add-row svelte-rkdrrf"><span class="svelte-rkdrrf"></span> <p class="hmm-add-hint svelte-rkdrrf" data-testid="add-device-ap-hint"> </p></div> <!>',1),kA=y('<section class="hmm-add-key-question svelte-rkdrrf" role="alert" data-testid="add-device-key-mismatch"><h4 class="svelte-rkdrrf"> </h4> <p class="svelte-rkdrrf"> </p> <button type="button" class="hmm-button" data-testid="add-device-key-retry"> </button></section>'),AA=y('<label class="hmm-add-row svelte-rkdrrf"><span class="svelte-rkdrrf"> </span> <select class="hmm-select svelte-rkdrrf" data-testid="add-device-mode"><option> </option><option> </option></select></label> <label class="hmm-add-row svelte-rkdrrf"><span class="svelte-rkdrrf"> </span> <span class="hmm-add-inline svelte-rkdrrf"><input class="hmm-input hmm-mono svelte-rkdrrf" data-testid="add-device-serial"/> <button type="button" class="hmm-button" data-testid="add-device-serial-start"> </button></span></label> <label class="hmm-add-row svelte-rkdrrf"><span class="svelte-rkdrrf"> </span> <input class="hmm-input hmm-mono svelte-rkdrrf" data-testid="add-device-temp-key"/></label> <div class="hmm-add-row svelte-rkdrrf"><span class="svelte-rkdrrf"></span> <p class="hmm-add-hint svelte-rkdrrf" data-testid="add-device-temp-key-hint"> </p></div> <!>',1),TA=y('<span data-testid="add-device-countdown"> </span> <button type="button" class="hmm-button" data-testid="add-device-stop"> </button>',1),RA=y('<p class="hmm-add-notice svelte-rkdrrf" role="status" data-testid="add-device-nothing-joined"> </p>'),xA=y('<label class="hmm-add-row svelte-rkdrrf"><span class="svelte-rkdrrf"> </span> <span class="svelte-rkdrrf"><input class="hmm-input hmm-add-seconds svelte-rkdrrf" type="number" min="10" max="300"/> s</span></label> <div class="hmm-add-actions svelte-rkdrrf"><button type="button" class="hmm-button" data-testid="add-device-start"> </button> <!></div> <!>',1),DA=y('<span data-testid="add-device-inbox-result"> </span>'),IA=y('<p class="hmm-add-notice svelte-rkdrrf" role="status" data-testid="add-device-names-waiting"> </p>'),NA=y('<div class="hmm-add-actions svelte-rkdrrf"><button type="button" class="hmm-button" data-testid="add-device-confirm-inbox"> </button> <!></div> <!>',1),CA=y('<label class="hmm-add-row svelte-rkdrrf"><span class="hmm-mono svelte-rkdrrf"> </span> <input class="hmm-input svelte-rkdrrf"/></label>'),PA=y('<section class="hmm-add-paired svelte-rkdrrf" data-testid="add-device-paired"><h4 class="svelte-rkdrrf"> </h4> <!> <label class="hmm-add-channels svelte-rkdrrf"><input type="checkbox" data-testid="add-device-rename-children"/> <span> </span></label> <button type="button" class="hmm-button" data-testid="add-device-name-save"> </button></section>'),MA=y("<!> <!> <!> <!>",1);function OA(r,e){ct(e,!0);let n=H(e,"open",15,!1),s=H(e,"createReader",3,void 0);const a=Ot(),i=a.i18n.t,o=1e3,l=5;let f=C(60),p=C(1),_=C(""),g=C(""),k=C("KEY"),E=C(void 0),b=C(""),w=C(""),x=C(!1),D=C(""),N=C(0),R=C(!1),M=C(We([])),z=C(We({})),$=C(!0),le=C(""),fe=C(!1),de=C(""),B,oe=!1,K=C(void 0),X=0,se=0;const j=c(()=>a.app.selectedInterface),ne=c(()=>a.interfaces.typeOf(t(j))),ye=c(()=>!t(ne).startsWith("BidCos")&&t(ne)!=="CUxD"),xe=c(()=>t(ne)==="BidCos-Wired"),ie=c(()=>t(k)==="ANY"?!0:t(k)==="SGTIN"?$i(t(b)):$i(t(b))&&_c(t(w))),Ae=c(()=>t(E)?.keyserver_mode==="LOCAL"),Te=c(()=>t(k)==="KEY"?i("Works offline: the key from the sticker is all the interface needs."):t(k)==="SGTIN"?i("The key comes from eQ-3's key server: the box needs internet access."):t(Ae)?i("Pairs the next device in factory state that asks to join, if its key is on the system: the system's key mode never asks eQ-3's key server. {count} device keys are stored on the system.",{},t(E)?.device_keys??0):i("Pairs the next device in factory state that asks to join. Without a key the interface asks eQ-3's key server, so the box needs internet access unless a local key mapping is configured."));ot(()=>{if(!n()||!t(ye))return;let J=!0;return a.devices.hmipPairing().then(ve=>{J&&u(E,ve,!0)}),()=>{J=!1}}),ot(()=>{t(Ae)&&t(k)==="SGTIN"&&u(k,"KEY")}),ot(()=>{n()||(u(x,!1),u(N,0),u(M,[],!0),u(z,{},!0),u($,!0),u(le,""),u(fe,!1),u(de,""),u(g,""),G())}),ot(()=>{t(k)==="ANY"&&u(x,!1)}),ot(()=>{if(n())return a.transport.on("devices.changed",J=>{if(J.interfaceName!==t(j)||J.kind!=="new")return;const ve=J.addresses.filter(ge=>!ge.includes(":")&&!t(M).includes(ge));ve.length>0&&(u(M,[...t(M),...ve],!0),u(de,""),G())})}),ot(()=>{if(!n()||t(N)<=0)return;const J=se,ve=setInterval(()=>{X+=1,a.devices.installModeSeconds(t(j)).then(ge=>{J===se&&(u(N,ge,!0),ge<=0&&(t(M).length===0&&u(fe,!0),G()))}),!t(ye)&&X%l===0&&a.devices.keyMismatchDevice(t(j)).then(ge=>{J===se&&ge!==""&&be(ge)})},o);return()=>{clearInterval(ve)}});async function me(J){u(R,!0),u(fe,!1),u(de,""),se+=1,X=0;const{tempKey:ve,...ge}=J;B=ge,ve!==void 0&&(oe=!0);const te=await a.devices.tryInstallMode(t(j),!0,{seconds:t(f),...J});if(u(R,!1),te!==null){if(!t(ye)&&J.address!==void 0&&await ce())return;a.notices.fromError(te,"setInstallMode");return}J.address===void 0&&u(N,t(f),!0)}async function P(){se+=1,await a.devices.setInstallMode(t(j),!1),u(N,0),await G()}async function ce(){const J=await a.devices.keyMismatchDevice(t(j));return J===""?!1:(await ee(J),!0)}async function be(J){se+=1,u(N,0),await a.devices.setInstallMode(t(j),!1),await ee(J)}async function ee(J){u(de,J,!0),await Ma(),t(K)?.focus()}async function he(){const J=t(g).trim();J===""||B===void 0||await me({...B,tempKey:J})}async function G(){oe&&(oe=!1,await a.devices.setTempKey(t(j),""))}async function Q(){u(R,!0),await a.console.call(t(j),"searchDevices",[""]),u(R,!1),await a.devices.load(t(j),{refresh:!0})}function q(J){const ve=Xb(J);if(!ve){u(D,i("That is not a HomematicIP device code"),!0);return}u(D,""),u(b,ve.sgtin,!0),ve.key!==""&&u(w,ve.key,!0),u(x,!1)}async function Y(){u(R,!0);const J=await a.devices.confirmRegaInbox();u(R,!1),u(le,J.length===0?i("The ReGa inbox is empty"):`${i("Confirmed")}: ${J.join(", ")}`,!0)}async function ae(){const J=t(M).flatMap(ve=>wd(ve,t(z)[ve]??"",a.devices.channels(t(j),ve).map(ge=>ge.ADDRESS),{channels:t($)}));J.length!==0&&await a.names.rename(J)&&u(M,t(M).filter(ve=>(t(z)[ve]??"").trim()===""),!0)}{const J=ge=>{var te=gA(),O=m(te,!0);S(U=>h(O,U),[()=>i("Close")]),re("click",te,()=>n(!1)),v(ge,te)};let ve=c(()=>i("Add device"));En(r,{get title(){return t(ve)},width:"680px",testId:"add-device-dialog",get open(){return n()},set open(ge){n(ge)},buttons:J,children:(ge,te)=>{var O=MA(),U=Ne(O);{var I=_e=>{var Se=bA(),V=Ne(Se),L=m(V,!0),Pe=d(V,2);S(Ge=>{h(L,Ge),Pe.disabled=t(R)},[()=>i("BidCos-Wired has no install mode; the interface searches its bus for new devices.")]),re("click",Pe,()=>{Q()}),v(_e,Se)},F=_e=>{var Se=wA(),V=Ne(Se),L=A(V),Pe=m(L,!0),Ge=d(L,2),qe=A(Ge),we=m(qe,!0);qe.value=qe.__value="KEY";var Ce=d(qe);{var Oe=Le=>{var $e=_A(),at=m($e,!0);$e.value=$e.__value="SGTIN",S(lt=>h(at,lt),[()=>i("With SGTIN only (key server)")]),v(Le,$e)};W(Ce,Le=>{t(Ae)||Le(Oe)})}var Be=d(Ce),pe=m(Be,!0);Be.value=Be.__value="ANY",Xt(Ge);var De=d(V,2),Ue=d(A(De),2),Fe=m(Ue,!0),Ye=d(De,2),tt=d(A(Ye),2),ft=m(tt,!0),dt=d(Ye,2);{var ke=Le=>{var $e=SA(),at=Ne($e),lt=d(A(at),2);let Je;var Pt=d(at,2);{var Tt=Zt=>{var Ft=EA(),Jt=Ne(Ft),Qn=d(A(Jt),2);let Mn;var Or=d(Jt,2),zr=d(A(Or),2),Zn=m(zr,!0);S((jn,Lr)=>{Mn=_t(Qn,1,"hmm-input hmm-mono svelte-rkdrrf",null,Mn,{"hmm-add-invalid":jn}),ln(Qn,t(w)),h(Zn,Lr)},[()=>t(w)!==""&&!_c(t(w)),()=>i("The key from the sticker (26 characters, dashes optional), or scan the QR code.")]),re("input",Qn,jn=>u(w,pi(jn.currentTarget.value),!0)),v(Zt,Ft)};W(Pt,Zt=>{t(k)==="KEY"&&Zt(Tt)})}var Lt=d(Pt,2),Qt=A(Lt),pn=m(Qt,!0),wn=d(Qt,2),tn=A(wn),bn=m(tn,!0),Pn=d(tn,2);{var $n=Zt=>{var Ft=yA(),Jt=m(Ft,!0);S(()=>h(Jt,t(D))),v(Zt,Ft)};W(Pn,Zt=>{t(D)!==""&&Zt($n)})}var Xn=d(Lt,2);{let Zt=c(()=>i("The camera is only available over https or on localhost. Open the page with its https address (the CCU serves it on its https port too, with a certificate warning) or type the key in by hand."));pA(Xn,{get active(){return t(x)},get createReader(){return s()},get insecureContextMessage(){return t(Zt)},onscan:q,onerror:Ft=>{u(D,Ft,!0),u(x,!1)},testId:"add-device-video"})}S((Zt,Ft,Jt)=>{Je=_t(lt,1,"hmm-input hmm-mono svelte-rkdrrf",null,Je,{"hmm-add-invalid":Zt}),ln(lt,t(b)),h(pn,Ft),h(bn,Jt)},[()=>t(b)!==""&&!$i(t(b)),()=>i("QR scanner"),()=>t(x)?i("Stop"):i("Scan")]),re("input",lt,Zt=>u(b,pi(Zt.currentTarget.value),!0)),re("click",tn,()=>{u(D,""),u(x,!t(x))}),v(Le,$e)};W(dt,Le=>{t(k)!=="ANY"&&Le(ke)})}S((Le,$e,at,lt)=>{h(Pe,Le),h(we,$e),h(pe,at),h(Fe,t(Te)),h(ft,lt)},[()=>i("Mode"),()=>i("With SGTIN and key"),()=>i("Any device (no SGTIN)"),()=>i("An access point (HAP, DRAP) is paired like a device: factory-reset it, start the install mode, then power it. System and access point must be in the same network.")]),kr(Ge,()=>t(k),Le=>u(k,Le)),v(_e,Se)},Ee=_e=>{var Se=AA(),V=Ne(Se),L=A(V),Pe=m(L,!0),Ge=d(L,2),qe=A(Ge),we=m(qe,!0);qe.value=qe.__value=1;var Ce=d(qe),Oe=m(Ce,!0);Ce.value=Ce.__value=2,Xt(Ge);var Be=d(V,2),pe=A(Be),De=m(pe,!0),Ue=d(pe,2),Fe=A(Ue),Ye=d(Fe,2),tt=m(Ye,!0),ft=d(Be,2),dt=A(ft),ke=m(dt,!0),Le=d(dt,2);fn(Le,Tt=>u(K,Tt),()=>t(K));var $e=d(ft,2),at=d(A($e),2),lt=m(at,!0),Je=d($e,2);{var Pt=Tt=>{var Lt=kA(),Qt=A(Lt),pn=m(Qt,!0),wn=d(Qt,2),tn=m(wn,!0),bn=d(wn,2),Pn=m(bn,!0);S(($n,Xn,Zt,Ft)=>{h(pn,$n),h(tn,Xn),bn.disabled=Zt,h(Pn,Ft)},[()=>i("Security key of the other system"),()=>i("The device {serial} could not be paired: it holds a security key this system does not know. Enter the security key of the system it was paired to and try again.",{serial:t(de)}),()=>t(R)||t(g).trim()==="",()=>i("Set the key and try again")]),re("click",bn,()=>{he()}),v(Tt,Lt)};W(Je,Tt=>{t(de)!==""&&Tt(Pt)})}S((Tt,Lt,Qt,pn,wn,tn,bn,Pn)=>{h(Pe,Tt),h(we,Lt),h(Oe,Qt),h(De,pn),Ye.disabled=wn,h(tt,tn),h(ke,bn),h(lt,Pn)},[()=>i("Mode"),()=>i("Normal install mode"),()=>i("Write the MASTER defaults and delete the existing links"),()=>i("Serial number"),()=>t(R)||t(_).trim()==="",()=>i("Add by serial number"),()=>i("Temporary key"),()=>i("The security key of the system the device was last paired to, if it holds one. Leave it empty otherwise: the system asks for it when a device is refused for its key.")]),kr(Ge,()=>t(p),Tt=>u(p,Tt)),xn(Fe,()=>t(_),Tt=>u(_,Tt)),re("click",Ye,()=>{me({mode:t(p),address:t(_).trim(),...t(g).trim()===""?{}:{tempKey:t(g).trim()}})}),xn(Le,()=>t(g),Tt=>u(g,Tt)),v(_e,Se)};W(U,_e=>{t(xe)?_e(I):t(ye)?_e(F,1):_e(Ee,-1)})}var Ie=d(U,2);{var Me=_e=>{var Se=xA(),V=Ne(Se),L=A(V),Pe=m(L,!0),Ge=d(L,2),qe=A(Ge),we=d(V,2),Ce=A(we),Oe=m(Ce,!0),Be=d(Ce,2);{var pe=Fe=>{var Ye=TA(),tt=Ne(Ye),ft=m(tt,!0),dt=d(tt,2),ke=m(dt,!0);S((Le,$e)=>{h(ft,Le),h(ke,$e)},[()=>i("{count} seconds left",{},t(N)),()=>i("Stop")]),re("click",dt,()=>{P()}),v(Fe,Ye)};W(Be,Fe=>{t(N)>0&&Fe(pe)})}var De=d(we,2);{var Ue=Fe=>{var Ye=RA(),tt=m(Ye,!0);S(ft=>h(tt,ft),[()=>t(ye)?i("The install mode has ended and no device has joined. A device that is still paired with another central sends no inclusion request: reset it to factory state and start again."):i("The install mode has ended and no device has joined. Put the device into its pairing mode and start again. A device that holds another system's security key is reported here and that key asked for; a factory reset does not remove it.")]),v(Fe,Ye)};W(De,Fe=>{t(fe)&&Fe(Ue)})}S((Fe,Ye)=>{h(Pe,Fe),Ce.disabled=t(R)||t(ye)&&!t(ie),h(Oe,Ye)},[()=>i("Duration"),()=>i("Start install mode")]),xn(qe,()=>t(f),Fe=>u(f,Fe)),re("click",Ce,()=>{me(t(ye)?t(k)==="ANY"?{hmipKeyMode:"ANY"}:{hmipKeyMode:t(k),hmipKey:{sgtin:t(b),key:t(k)==="SGTIN"?"":t(w)}}:{mode:t(p),...t(g).trim()===""?{}:{tempKey:t(g).trim()}})}),v(_e,Se)};W(Ie,_e=>{t(xe)||_e(Me)})}var Ve=d(Ie,2);{var ze=_e=>{var Se=NA(),V=Ne(Se),L=A(V),Pe=m(L,!0),Ge=d(L,2);{var qe=Oe=>{var Be=DA(),pe=m(Be,!0);S(()=>h(pe,t(le))),v(Oe,Be)};W(Ge,Oe=>{t(le)!==""&&Oe(qe)})}var we=d(V,2);{var Ce=Oe=>{var Be=IA(),pe=m(Be,!0);S(De=>h(pe,De),[()=>i("The names reach the CCU once the device is confirmed in the ReGa inbox.")]),v(Oe,Be)};W(we,Oe=>{(a.interfaces.rega.pendingNames?.length??0)>0&&Oe(Ce)})}S(Oe=>{L.disabled=t(R),h(Pe,Oe)},[()=>i("Confirm the ReGa inbox")]),re("click",L,()=>{Y()}),v(_e,Se)};W(Ve,_e=>{a.interfaces.rega?.enabled===!0&&_e(ze)})}var nt=d(Ve,2);{var Ze=_e=>{var Se=PA(),V=A(Se),L=m(V,!0),Pe=d(V,2);Xe(Pe,16,()=>t(M),pe=>pe,(pe,De)=>{var Ue=CA(),Fe=A(Ue),Ye=m(Fe,!0),tt=d(Fe,2);S((ft,dt)=>{h(Ye,De),T(tt,"placeholder",ft),T(tt,"aria-label",dt),ln(tt,t(z)[De]??"")},[()=>i("Name"),()=>`${i("Name")} ${De}`]),re("input",tt,ft=>u(z,{...t(z),[De]:ft.currentTarget.value},!0)),v(pe,Ue)});var Ge=d(Pe,2),qe=A(Ge),we=d(qe,2),Ce=m(we,!0),Oe=d(Ge,2),Be=m(Oe,!0);S((pe,De,Ue)=>{h(L,pe),h(Ce,De),h(Be,Ue)},[()=>i("New"),()=>i("Overwrite channel names"),()=>i("Apply")]),vr(qe,()=>t($),pe=>u($,pe)),re("click",Oe,()=>{ae()}),v(_e,Se)};W(nt,_e=>{t(M).length>0&&_e(Ze)})}v(ge,O)},$$slots:{buttons:!0,default:!0}})}ut()}Et(["click","input"]);const LA=10;function ed(r,e,n){return r(e)?.enums.includes(n)===!0}function FA(r){return r.endsWith(":0")}function im(r,e,n){if(ed(n,r.ref,e))return"on";const s=r.channels.filter(i=>!FA(i)),a=s.filter(i=>ed(n,i,e)).length;return a===0?"off":a===s.length?"on":"mixed"}function GA(r,e,n){let s=0,a=0;for(const i of r){const o=im(i,e,n);o==="on"?s+=1:o==="off"&&(a+=1)}return r.length===0||a===r.length?"off":s===r.length?"on":"mixed"}function UA(r,e,n){return Object.fromEntries(e.map(s=>[s,GA(r,s,n)]))}function BA(r,e){return r==="mixed"?e==="mixed"?"on":e==="on"?"off":"mixed":e==="on"?"off":"on"}function HA(r,e,n){return r.filter(s=>{const a=n[s];return a!==void 0&&a!=="mixed"&&a!==(e[s]??"off")})}function VA(r,e,n,s){const a=[];for(const i of e){const o=n[i]==="on",l=new Set;for(const f of r){if(o){im(f,i,s)!=="on"&&l.add(f.ref);continue}for(const p of[f.ref,...f.channels])ed(s,p,i)&&l.add(p)}l.size>0&&a.push({path:i,on:o,refs:[...l]})}return a}function xu(r){return r.normalize("NFD").replace(/\p{M}/gu,"").toLocaleLowerCase()}function zA(r,e){const n=xu(e.trim());if(n==="")return[...r];const s=r.filter(a=>xu(a.label).includes(n));return r.filter(a=>s.includes(a)||s.some(i=>i.path.startsWith(`${a.path}/`)))}var jA=y('<input type="text" class="hmm-input hmm-assign-filter svelte-2lvopk"/>'),WA=y('<span class="hmm-assign-error svelte-2lvopk" data-testid="assign-error"> </span>'),KA=y('<label data-testid="assign-row"><input type="checkbox" data-testid="assign-check" class="svelte-2lvopk"/> <span class="hmm-assign-name svelte-2lvopk"> </span> <!></label>'),YA=y('<p class="hmm-assign-empty svelte-2lvopk"> </p>'),qA=y('<input type="text" class="hmm-input svelte-2lvopk"/> <button type="button" class="hmm-button"> </button>',1),$A=y('<button type="button" class="hmm-button"> </button>'),XA=y('<section class="hmm-assign-side svelte-2lvopk"><h3 class="hmm-assign-heading svelte-2lvopk"> </h3> <!> <div class="hmm-assign-list svelte-2lvopk" role="group"></div> <div class="hmm-assign-new svelte-2lvopk"><!></div></section>');function Du(r,e){ct(e,!0);let n=H(e,"desired",15),s=H(e,"failures",15);const a=Ot(),i=a.i18n.t,o=a.taxonomy;let l=C(""),f=C(!1),p=C(""),_=C(!1),g=C(void 0),k=C(void 0),E=C(void 0),b=C(void 0);const w=c(()=>o.options(e.enumId)),x=c(()=>zA(t(w),t(l))),D=c(()=>t(w).length>LA),N=c(()=>e.enumId==="room");function R(){u(l,""),u(b,void 0),u(f,!1),u(p,"")}function M(){if(t(k)!==void 0){t(k).focus();return}t(g)?.querySelector('input[type="checkbox"]')?.focus()}function z(ee){return n()[ee]??e.initial[ee]??"off"}function $(ee,he){const G=Q=>{ee.checked=Q==="on",ee.indeterminate=Q==="mixed"};return G(he),{update:G}}function le(ee,he){const G=BA(e.initial[ee]??"off",z(ee));n({...n(),[ee]:G}),s()[ee]!==void 0&&s(Object.fromEntries(Object.entries(s()).filter(([Q])=>Q!==ee))),he.checked=G==="on",he.indeterminate=G==="mixed"}function fe(ee){ee.key==="Enter"&&(ee.preventDefault(),e.onsave())}function de(ee){t(b)===void 0&&t(g)!==void 0&&t(g).offsetHeight>0&&u(b,t(g).offsetHeight,!0),u(l,ee.currentTarget.value,!0)}function B(ee){ee.key==="Enter"&&(ee.preventDefault(),t(g)?.querySelector('input[type="checkbox"]')?.focus())}async function oe(){u(f,!0),await Ma(),t(E)?.focus()}async function K(){const ee=t(p).trim();if(ee===""||t(_))return;u(_,!0);const he=await o.createNode(e.enumId,void 0,ee);u(_,!1),he!==void 0&&(n({...n(),[he]:"on"}),u(p,""),u(f,!1),await Ma(),t(g)?.querySelector(`[data-path="${CSS.escape(he)}"] input`)?.focus())}function X(ee){ee.key==="Enter"&&(ee.preventDefault(),K())}var se={reset:R,focus:M},j=XA(),ne=A(j),ye=m(ne,!0),xe=d(ne,2);{var ie=ee=>{var he=jA();fn(he,G=>u(k,G),()=>t(k)),S((G,Q)=>{ln(he,t(l)),T(he,"placeholder",G),T(he,"aria-label",Q),T(he,"data-testid",`assign-filter-${e.enumId}`)},[()=>t(N)?i("Filter rooms"):i("Filter functions"),()=>t(N)?i("Filter rooms"):i("Filter functions")]),re("input",he,de),re("keydown",he,B),v(ee,he)};W(xe,ee=>{t(D)&&ee(ie)})}var Ae=d(xe,2);let Te;Xe(Ae,21,()=>t(x),ee=>ee.path,(ee,he)=>{const G=c(()=>z(t(he).path)),Q=c(()=>s()[t(he).path]);var q=KA();let Y,ae;var J=A(q);Vf(J,(U,I)=>$?.(U,I),()=>t(G));var ve=d(J,2),ge=m(ve,!0),te=d(ve,2);{var O=U=>{var I=WA(),F=m(I,!0);S(Ee=>h(F,Ee),[()=>i("Not saved: {message}",{message:t(Q)})]),v(U,I)};W(te,U=>{t(Q)!==void 0&&U(O)})}S(U=>{Y=_t(q,1,"hmm-assign-row svelte-2lvopk",null,Y,{"hmm-assign-row-failed":t(Q)!==void 0}),T(q,"data-path",t(he).path),T(q,"data-state",t(G)),ae=Un(q,"",ae,{"padding-inline-start":U}),J.disabled=e.saving,h(ge,t(he).label)},[()=>`${String(6+(t(he).depth-1)*18)}px`]),re("change",J,U=>le(t(he).path,U.currentTarget)),re("keydown",J,fe),v(ee,q)},ee=>{var he=YA(),G=m(he,!0);S(Q=>{T(he,"data-testid",`assign-empty-${e.enumId}`),h(G,Q)},[()=>t(w).length>0?i("No match"):t(N)?i("No rooms yet"):i("No functions yet")]),v(ee,he)}),fn(Ae,ee=>u(g,ee),()=>t(g));var me=d(Ae,2),P=A(me);{var ce=ee=>{var he=qA(),G=Ne(he);fn(G,Y=>u(E,Y),()=>t(E));var Q=d(G,2),q=m(Q,!0);S((Y,ae,J,ve)=>{T(G,"aria-label",Y),T(G,"placeholder",ae),G.disabled=t(_),T(G,"data-testid",`assign-new-name-${e.enumId}`),Q.disabled=J,T(Q,"data-testid",`assign-create-${e.enumId}`),h(q,ve)},[()=>t(N)?i("Name of the new room"):i("Name of the new function"),()=>t(N)?i("Name of the new room"):i("Name of the new function"),()=>t(_)||t(p).trim()==="",()=>i("Create")]),re("keydown",G,X),xn(G,()=>t(p),Y=>u(p,Y)),re("click",Q,()=>{K()}),v(ee,he)},be=ee=>{var he=$A(),G=m(he,!0);S(Q=>{T(he,"data-testid",`assign-new-${e.enumId}`),h(G,Q)},[()=>t(N)?i("New room…"):i("New function…")]),re("click",he,()=>{oe()}),v(ee,he)};W(P,ee=>{t(f)?ee(ce):ee(be,-1)})}return S((ee,he,G,Q)=>{T(j,"aria-label",ee),T(j,"data-testid",`assign-side-${e.enumId}`),h(ye,he),T(Ae,"aria-label",G),T(Ae,"data-testid",`assign-list-${e.enumId}`),Te=Un(Ae,"",Te,{"min-height":Q})},[()=>t(N)?i("Rooms"):i("Functions"),()=>t(N)?i("Rooms"):i("Functions"),()=>t(N)?i("Rooms"):i("Functions"),()=>t(b)===void 0?void 0:`${String(t(b))}px`]),v(r,j),ut(se)}Et(["input","keydown","change","click"]);var QA=y('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="assign-apply"> </button>',1),ZA=y('<p class="hmm-assign-address svelte-17ogdox" data-testid="assign-address"> </p>'),JA=y('<label class="hmm-assign-children svelte-17ogdox"><input type="checkbox" data-testid="assign-rename-children"/> <span> </span></label>'),eT=y('<p class="hmm-assign-summary hmm-assign-name-error svelte-17ogdox" role="alert" data-testid="assign-name-error"> </p>'),tT=y('<div class="hmm-assign-name-row svelte-17ogdox"><label class="hmm-assign-name-field svelte-17ogdox"><span> </span> <input class="hmm-input svelte-17ogdox" data-testid="assign-name"/></label> <!></div> <!>',1),nT=y('<p class="hmm-assign-summary svelte-17ogdox" role="alert" data-testid="assign-summary"> </p>'),rT=y('<!> <!> <p class="hmm-assign-count svelte-17ogdox" data-testid="assign-count"> </p> <div class="hmm-assign-sides svelte-17ogdox"><!> <!></div> <!>',1);function sT(r,e){ct(e,!0);const n=["room","function"];let s=H(e,"open",15,!1),a=H(e,"targets",19,()=>[]),i=H(e,"address",3,""),o=H(e,"canRename",3,!1),l=H(e,"focus",3,"room");const f=Ot(),p=f.i18n.t,_=f.taxonomy,g=()=>({room:{},function:{}});let k=C(We(g())),E=C(We(g())),b=C(We({room:{},function:{}})),w=C(""),x=C(!0),D=C(!1),N=C(!1),R=C(void 0),M=C(void 0),z=C(void 0),$=!1;const le=c(()=>i()!==""&&o()),fe=c(()=>i()!==""&&Ds(i())),de=c(()=>t(fe)?f.devices.channels(f.app.selectedInterface,i()).map(ie=>ie.ADDRESS):[]),B=c(()=>n.reduce((ie,Ae)=>ie+Object.keys(t(b)[Ae]).length,0)),oe=ie=>_.view(ie);function K(ie){return _.options(ie).map(Ae=>Ae.path)}function X(ie){const Ae=K(ie);return[...Ae,...Object.keys(t(E)[ie]).filter(Te=>!Ae.includes(Te))]}function se(ie,Ae){return t(E)[ie][Ae]??t(k)[ie][Ae]??"off"}ot(()=>{s()&&!$&&sr(()=>{const ie=g();for(const Ae of n)ie[Ae]=UA(a(),K(Ae),oe);u(k,ie,!0),u(E,{room:{...ie.room},function:{...ie.function}},!0),u(b,{room:{},function:{}},!0),u(w,i()===""?"":f.knownName(i())??"",!0),u(x,!0),u(D,!1),t(M)?.reset(),t(z)?.reset(),j()}),$=s()});async function j(){if(await Ma(),l()==="name"&&t(le)){t(R)?.focus();return}(l()==="function"?t(z):t(M))?.focus()}function ne(){const ie=t(w).trim();return!t(le)||ie===""||ie===(f.knownName(i())??"")?[]:wd(i(),ie,t(de),{channels:t(x)})}async function ye(){if(!t(N)){u(N,!0);try{const ie=ne(),Ae=ie.length===0?!0:await f.names.rename(ie);u(D,!Ae);const Te={room:[],function:[]},me=[];for(const ee of n)Te[ee]=HA(X(ee),t(k)[ee],t(E)[ee]),me.push(...VA(a(),Te[ee],t(E)[ee],oe));const P=me.length===0?[]:await _.assignEach(me),ce={room:{...t(k).room},function:{...t(k).function}},be={room:{},function:{}};for(const ee of n)for(const he of Te[ee]){const G=P.find(Q=>Q.path===he);G!==void 0&&!G.ok?be[ee][he]=G.message:ce[ee][he]=se(ee,he)}u(k,ce,!0),u(b,be,!0),Ae&&n.every(ee=>Object.keys(be[ee]).length===0)&&s(!1)}finally{u(N,!1)}}}function xe(ie){ie.key==="Enter"&&(ie.preventDefault(),ye())}{const ie=P=>{var ce=QA(),be=Ne(ce),ee=m(be,!0),he=d(be,2),G=m(he,!0);S((Q,q)=>{be.disabled=t(N),h(ee,Q),he.disabled=t(N)||a().length===0,h(G,q)},[()=>p("Cancel"),()=>p("Apply")]),re("click",be,()=>s(!1)),re("click",he,()=>{ye()}),v(P,ce)};let Ae=c(()=>p("Rooms and functions")),Te=c(()=>!t(N)),me=c(()=>p("Close"));En(r,{get title(){return t(Ae)},width:"760px",minWidth:320,get closable(){return t(Te)},get closeLabel(){return t(me)},testId:"assign-dialog",get open(){return s()},set open(P){s(P)},buttons:ie,children:(P,ce)=>{var be=rT(),ee=Ne(be);{var he=O=>{var U=ZA(),I=m(U,!0);S(()=>h(I,i())),v(O,U)};W(ee,O=>{i()!==""&&O(he)})}var G=d(ee,2);{var Q=O=>{var U=tT(),I=Ne(U),F=A(I),Ee=A(F),Ie=m(Ee,!0),Me=d(Ee,2);fn(Me,_e=>u(R,_e),()=>t(R));var Ve=d(F,2);{var ze=_e=>{var Se=JA(),V=A(Se),L=d(V,2),Pe=m(L,!0);S(Ge=>{V.disabled=t(N),h(Pe,Ge)},[()=>p("Overwrite channel names")]),vr(V,()=>t(x),Ge=>u(x,Ge)),v(_e,Se)};W(Ve,_e=>{t(fe)&&_e(ze)})}var nt=d(I,2);{var Ze=_e=>{var Se=eT(),V=m(Se,!0);S(L=>h(V,L),[()=>p("The name was not saved")]),v(_e,Se)};W(nt,_e=>{t(D)&&_e(Ze)})}S(_e=>{h(Ie,_e),Me.disabled=t(N)},[()=>p("Name")]),re("keydown",Me,xe),xn(Me,()=>t(w),_e=>u(w,_e)),v(O,U)};W(G,O=>{t(le)&&O(Q)})}var q=d(G,2),Y=m(q,!0),ae=d(q,2),J=A(ae);fn(Du(J,{enumId:"room",get initial(){return t(k).room},get saving(){return t(N)},onsave:()=>{ye()},get desired(){return t(E).room},set desired(O){t(E).room=O},get failures(){return t(b).room},set failures(O){t(b).room=O}}),O=>u(M,O,!0),()=>t(M));var ve=d(J,2);fn(Du(ve,{enumId:"function",get initial(){return t(k).function},get saving(){return t(N)},onsave:()=>{ye()},get desired(){return t(E).function},set desired(O){t(E).function=O},get failures(){return t(b).function},set failures(O){t(b).function=O}}),O=>u(z,O,!0),()=>t(z));var ge=d(ae,2);{var te=O=>{var U=nT(),I=m(U,!0);S(F=>h(I,F),[()=>p("{count} changes were not saved",{},t(B))]),v(O,U)};W(ge,O=>{t(B)>0&&O(te)})}S(O=>h(Y,O),[()=>p("{count} rows selected",{},a().length)]),v(P,be)},$$slots:{buttons:!0,default:!0}})}ut()}Et(["click","keydown"]);var aT=y('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button hmm-danger svelte-y0v77l" data-testid="delete-device-confirm"> </button>',1),iT=y('<h4 class="svelte-y0v77l"> </h4> <p class="hmm-delete-address svelte-y0v77l"> </p> <select class="hmm-select hmm-delete-select svelte-y0v77l"><option> </option><option> </option></select> <p> </p> <select class="hmm-select hmm-delete-select svelte-y0v77l"><option> </option><option> </option></select> <p class="hmm-delete-flags svelte-y0v77l"> </p>',1);function oT(r,e){ct(e,!0);let n=H(e,"open",15,!1),s=H(e,"address",3,"");const a=Ot(),i=a.i18n.t;let o=C(1),l=C(4),f=C(!1);const p=c(()=>t(o)+t(l)),_=c(()=>a.nameOf(s()));ot(()=>{n()&&(u(o,1),u(l,4))});async function g(){u(f,!0);const k=await a.devices.remove(a.app.selectedInterface,s(),t(p));u(f,!1),k&&n(!1)}{const k=b=>{var w=aT(),x=Ne(w),D=m(x,!0),N=d(x,2),R=m(N,!0);S((M,z)=>{h(D,M),N.disabled=t(f),h(R,z)},[()=>i("Cancel"),()=>i("Delete")]),re("click",x,()=>n(!1)),re("click",N,()=>{g()}),v(b,w)};let E=c(()=>i("Delete device"));En(r,{get title(){return t(E)},width:"560px",testId:"delete-device-dialog",get open(){return n()},set open(b){n(b)},buttons:k,children:(b,w)=>{var x=iT(),D=Ne(x),N=m(D,!0),R=d(D,2),M=m(R,!0),z=d(R,2),$=A(z),le=m($,!0);$.value=$.__value=1;var fe=d($),de=m(fe,!0);fe.value=fe.__value=0,Xt(z);var B=d(z,2),oe=m(B,!0),K=d(B,2),X=A(K),se=m(X,!0);X.value=X.__value=4;var j=d(X),ne=m(j,!0);j.value=j.__value=2,Xt(K);var ye=d(K,2),xe=m(ye);S((ie,Ae,Te,me,P,ce,be,ee)=>{h(N,ie),h(M,s()),T(z,"aria-label",Ae),h(le,Te),h(de,me),h(oe,P),T(K,"aria-label",ce),h(se,be),h(ne,ee),h(xe,`FLAGS = ${t(p)??""}`)},[()=>i("Do you really want to delete the device {name}?",{name:t(_)}),()=>i("Delete device"),()=>i("Unlearn and reset the device to factory defaults"),()=>i("Unlearn only (direct links are kept)"),()=>i("If the device cannot be reached:"),()=>i("If the device cannot be reached:"),()=>i("Delete at the next opportunity"),()=>i("Delete from the interface process only")]),kr(z,()=>t(o),ie=>u(o,ie)),kr(K,()=>t(l),ie=>u(l,ie)),v(b,x)},$$slots:{buttons:!0,default:!0}})}ut()}Et(["click"]);var lT=y('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="rename-save"> </button>',1),dT=y('<label class="hmm-rename-children svelte-111tkcw"><input type="checkbox" data-testid="rename-children"/> <span> </span></label>'),cT=y('<p class="hmm-rename-address svelte-111tkcw"> </p> <input class="hmm-input hmm-rename-input svelte-111tkcw" data-testid="rename-input"/> <!>',1);function uT(r,e){ct(e,!0);let n=H(e,"open",15,!1),s=H(e,"address",3,"");const a=Ot(),i=a.i18n.t;let o=C(""),l=C(!0),f=C(!1);const p=c(()=>s()!==""&&Ds(s())),_=c(()=>t(p)?a.devices.channels(a.app.selectedInterface,s()).map(E=>E.ADDRESS):[]);ot(()=>{n()&&(u(o,a.knownName(s())??"",!0),u(l,!0))});const g=c(()=>wd(s(),t(o),t(_),{channels:t(l)}));async function k(){const E=t(g);if(E.length===0)return;u(f,!0);const b=await a.names.rename(E);u(f,!1),b&&n(!1)}{const E=w=>{var x=lT(),D=Ne(x),N=m(D,!0),R=d(D,2),M=m(R,!0);S((z,$)=>{h(N,z),R.disabled=t(f)||t(g).length===0,h(M,$)},[()=>i("Cancel"),()=>i("Apply")]),re("click",D,()=>n(!1)),re("click",R,()=>{k()}),v(w,x)};let b=c(()=>i("Rename"));En(r,{get title(){return t(b)},width:"520px",testId:"rename-dialog",get open(){return n()},set open(w){n(w)},buttons:E,children:(w,x)=>{var D=cT(),N=Ne(D),R=m(N,!0),M=d(N,2),z=d(M,2);{var $=le=>{var fe=dT(),de=A(fe),B=d(de,2),oe=m(B,!0);S(K=>h(oe,K),[()=>i("Overwrite channel names")]),vr(de,()=>t(l),K=>u(l,K)),v(le,fe)};W(z,le=>{t(p)&&le($)})}S(le=>{h(R,s()),T(M,"aria-label",le)},[()=>i("Name")]),re("keydown",M,le=>{le.key==="Enter"&&k()}),xn(M,()=>t(o),le=>u(o,le)),v(w,D)},$$slots:{buttons:!0,default:!0}})}ut()}Et(["click","keydown"]);var fT=y('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="repair-confirm"> </button>',1),hT=y('<p class="hmm-repair-note svelte-g84sn7" data-testid="repair-bidcos-note"> </p>'),mT=y("<p> </p>"),vT=y('<p data-testid="repair-failed"> </p>'),pT=y('→ <span class="hmm-mono" data-testid="repair-pending-after"> </span>',1),gT=y('<li class="hmm-mono"> </li>'),bT=y('<div class="hmm-repair-unrepairable svelte-g84sn7" data-testid="repair-unrepairable"><p> </p> <ul class="svelte-g84sn7"></ul></div>'),_T=y('<tr><td class="hmm-mono svelte-g84sn7"> </td><td class="hmm-mono svelte-g84sn7"> </td><td class="svelte-g84sn7"> </td><td class="svelte-g84sn7"> </td><td class="svelte-g84sn7"> </td></tr>'),ET=y('<table class="hmm-repair-table svelte-g84sn7" data-testid="repair-corrections"><thead><tr><th class="svelte-g84sn7"> </th><th class="svelte-g84sn7"> </th><th class="svelte-g84sn7"> </th><th class="svelte-g84sn7"> </th><th class="svelte-g84sn7"> </th></tr></thead><tbody></tbody></table>'),yT=y('<p data-testid="repair-nothing"> </p>'),ST=y('<label class="hmm-repair-recovery svelte-g84sn7"><span> </span> <select class="hmm-select" data-testid="repair-recovery"><option>—</option><option>clearConfigCache</option><option>restoreConfigToDevice</option></select></label>'),wT=y('<li><span class="hmm-mono"> </span> </li>'),kT=y('<ul class="hmm-repair-results svelte-g84sn7" data-testid="repair-results"></ul>'),AT=y('<p>CONFIG_PENDING: <span class="hmm-mono"> </span> <!></p> <!> <!> <!> <!>',1),TT=y('<p class="hmm-repair-address svelte-g84sn7"> <span class="hmm-mono"> </span></p> <!> <!>',1);function RT(r,e){ct(e,!0);let n=H(e,"open",15,!1),s=H(e,"address",3,"");const a=Ot(),i=a.i18n.t;let o=C(void 0),l=C(void 0),f=C(!1),p=C(!1),_=C("none"),g=0;const k=c(()=>a.app.selectedInterface),E=c(()=>!a.interfaces.typeOf(t(k)).startsWith("BidCos")),b=c(()=>t(l)??t(o)),w=c(()=>t(b)?.channels.flatMap(D=>D.corrected.map(N=>({channel:D,c:N})))??[]);ot(()=>{if(!n()||s()===""||t(k)==="")return;const D=g+=1;u(f,!0),u(l,void 0),u(_,"none"),a.devices.repairConfig(t(k),s(),{dryRun:!0}).then(N=>{D===g&&(u(o,N,!0),u(f,!1))})});async function x(){u(p,!0),u(l,await a.devices.repairConfig(t(k),s(),{...t(E)||t(_)==="none"?{}:{bidcosRecovery:t(_)}}),!0),u(p,!1),t(l)&&(await a.devices.load(t(k),{refresh:!0}),await a.serviceMessages.load())}{const D=R=>{var M=fT(),z=Ne(M),$=m(z,!0),le=d(z,2),fe=m(le,!0);S((de,B)=>{h($,de),le.disabled=t(p)||t(b)===void 0||t(l)!==void 0,h(fe,B)},[()=>i("Close"),()=>i("Repair configuration")]),re("click",z,()=>n(!1)),re("click",le,()=>{x()}),v(R,M)};let N=c(()=>i("Repair configuration"));En(r,{get title(){return t(N)},width:"720px",testId:"repair-dialog",get open(){return n()},set open(R){n(R)},buttons:D,children:(R,M)=>{var z=TT(),$=Ne(z),le=A($),fe=d(le),de=m(fe,!0),B=d($,2);{var oe=ne=>{var ye=hT(),xe=m(ye,!0);S(ie=>h(xe,ie),[()=>i("On BidCos a pending configuration is normal: it is queued and the device takes it when it next wakes up.")]),v(ne,ye)};W(B,ne=>{t(E)||ne(oe)})}var K=d(B,2);{var X=ne=>{var ye=mT(),xe=m(ye,!0);S(ie=>h(xe,ie),[()=>i("Loading Homematic Manager...")]),v(ne,ye)},se=ne=>{var ye=vT(),xe=m(ye,!0);S(ie=>h(xe,ie),[()=>i("No data")]),v(ne,ye)},j=ne=>{var ye=AT(),xe=Ne(ye),ie=d(A(xe)),Ae=m(ie,!0),Te=d(ie,2);{var me=ae=>{var J=pT(),ve=d(Ne(J)),ge=m(ve,!0);S(te=>h(ge,te),[()=>String(t(l).configPendingAfter??"—")]),v(ae,J)};W(Te,ae=>{t(l)&&ae(me)})}var P=d(xe,2);{var ce=ae=>{var J=bT(),ve=A(J),ge=m(ve,!0),te=d(ve,2);Xe(te,20,()=>t(b).unrepairable,O=>O,(O,U)=>{var I=gT(),F=m(I,!0);S(()=>h(F,U)),v(O,I)}),S(O=>h(ge,O),[()=>i("These channels store a parameter their description does not have. No RPC method removes it: the device has to be deleted and paired again, or a CCU backup from before the bad write restored.")]),v(ae,J)};W(P,ae=>{t(b).unrepairable.length>0&&ae(ce)})}var be=d(P,2);{var ee=ae=>{var J=ET(),ve=A(J),ge=A(ve),te=A(ge),O=m(te,!0),U=d(te),I=m(U,!0),F=d(U),Ee=m(F,!0),Ie=d(F),Me=m(Ie,!0),Ve=d(Ie),ze=m(Ve,!0),nt=d(ve);Xe(nt,21,()=>t(w),Ze=>`${Ze.channel.address}-${Ze.c.parameter}`,(Ze,_e)=>{var Se=_T(),V=A(Se),L=m(V,!0),Pe=d(V),Ge=m(Pe,!0),qe=d(Pe),we=m(qe,!0),Ce=d(qe),Oe=m(Ce,!0),Be=d(Ce),pe=m(Be,!0);S((De,Ue)=>{h(L,t(_e).channel.address),h(Ge,t(_e).c.parameter),h(we,De),h(Oe,Ue),h(pe,t(_e).c.reason)},[()=>za(t(_e).c.stored,void 0),()=>za(t(_e).c.replacement,void 0)]),v(Ze,Se)}),S((Ze,_e,Se,V,L)=>{h(O,Ze),h(I,_e),h(Ee,Se),h(Me,V),h(ze,L)},[()=>i("Channel"),()=>i("Parameter"),()=>i("Current value"),()=>i("New value"),()=>i("Message")]),v(ae,J)},he=ae=>{var J=yT(),ve=m(J,!0);S(ge=>h(ve,ge),[()=>i("Nothing has to be corrected")]),v(ae,J)};W(be,ae=>{t(w).length>0?ae(ee):ae(he,-1)})}var G=d(be,2);{var Q=ae=>{var J=ST(),ve=A(J),ge=m(ve,!0),te=d(ve,2),O=A(te);O.value=O.__value="none";var U=d(O);U.value=U.__value="clearConfigCache";var I=d(U);I.value=I.__value="restoreConfigToDevice",Xt(te),S(F=>h(ge,F),[()=>i("Additional BidCos recovery")]),kr(te,()=>t(_),F=>u(_,F)),v(ae,J)};W(G,ae=>{t(E)||ae(Q)})}var q=d(G,2);{var Y=ae=>{var J=kT();Xe(J,21,()=>t(l).channels,ve=>ve.address,(ve,ge)=>{var te=wT();let O;var U=A(te),I=m(U,!0),F=d(U);S(()=>{O=_t(te,1,"svelte-g84sn7",null,O,{"hmm-repair-failed":!t(ge).write.ok}),h(I,t(ge).address),h(F,` ${t(ge).write.ok?"✔":`✕ ${t(ge).write.faultString??""}`}`)}),v(ve,te)}),v(ae,J)};W(q,ae=>{t(l)&&ae(Y)})}S(ae=>h(Ae,ae),[()=>String(t(b).configPendingBefore??"—")]),v(ne,ye)};W(K,ne=>{t(f)?ne(X):t(b)?ne(j,-1):ne(se,1)})}S(ne=>{h(le,`${ne??""} `),h(de,s())},[()=>a.nameOf(s())]),v(R,z)},$$slots:{buttons:!0,default:!0}})}ut()}Et(["click"]);var xT=y('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="replace-device-confirm"> </button>',1),DT=y("<p> </p>"),IT=y('<p data-testid="replace-none"> </p>'),NT=y("<option> </option>"),CT=y('<select class="hmm-select hmm-replace-select svelte-novg4s"></select>'),PT=y('<h4 class="svelte-novg4s"> </h4> <p class="hmm-replace-new svelte-novg4s"> <span class="hmm-mono"> </span></p> <!>',1);function MT(r,e){ct(e,!0);let n=H(e,"open",15,!1),s=H(e,"address",3,"");const a=Ot(),i=a.i18n.t;let o=C(We([])),l=C(""),f=C(!1),p=C(!1);const _=c(()=>t(o).filter(k=>!k.ADDRESS.includes(":")));ot(()=>{if(!n()||s()==="")return;const k=s();u(f,!0),u(l,""),a.devices.replaceable(a.app.selectedInterface,k).then(E=>{u(o,E,!0),u(l,E.find(b=>!b.ADDRESS.includes(":"))?.ADDRESS??"",!0),u(f,!1)})});async function g(){u(p,!0);const k=await a.devices.replace(a.app.selectedInterface,t(l),s());u(p,!1),k&&n(!1)}{const k=b=>{var w=xT(),x=Ne(w),D=m(x,!0),N=d(x,2),R=m(N,!0);S((M,z)=>{h(D,M),N.disabled=t(p)||t(l)==="",h(R,z)},[()=>i("Cancel"),()=>i("Replace")]),re("click",x,()=>n(!1)),re("click",N,()=>{g()}),v(b,w)};let E=c(()=>i("Replace device"));En(r,{get title(){return t(E)},width:"560px",testId:"replace-device-dialog",get open(){return n()},set open(b){n(b)},buttons:k,children:(b,w)=>{var x=PT(),D=Ne(x),N=m(D,!0),R=d(D,2),M=A(R),z=d(M),$=m(z,!0),le=d(R,2);{var fe=oe=>{var K=DT(),X=m(K,!0);S(se=>h(X,se),[()=>i("Loading Homematic Manager...")]),v(oe,K)},de=oe=>{var K=IT(),X=m(K,!0);S(se=>h(X,se),[()=>i("No suitable device available")]),v(oe,K)},B=oe=>{var K=CT();Xe(K,21,()=>t(_),X=>X.ADDRESS,(X,se)=>{var j=NT(),ne=m(j),ye={};S(xe=>{h(ne,`${xe??""} (${t(se).ADDRESS??""})`),ye!==(ye=t(se).ADDRESS)&&(j.value=(j.__value=ye)??"")},[()=>a.nameOf(t(se).ADDRESS)]),v(X,j)}),Xt(K),S(X=>T(K,"aria-label",X),[()=>i("Replace device")]),kr(K,()=>t(l),X=>u(l,X)),v(oe,K)};W(le,oe=>{t(f)?oe(fe):t(_).length===0?oe(de,1):oe(B,-1)})}S((oe,K)=>{h(N,oe),h(M,`${K??""}: `),h($,s())},[()=>i("Which device do you want to replace?"),()=>i("New device")]),v(b,x)},$$slots:{buttons:!0,default:!0}})}ut()}Et(["click"]);var OT=y("<!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!>",1),Iu=y("<option> </option>"),LT=y('<select class="hmm-select hmm-taxonomy-filter svelte-1fmr35a" data-testid="devices-filter-room"><option> </option><!></select> <select class="hmm-select hmm-taxonomy-filter svelte-1fmr35a" data-testid="devices-filter-function"><option> </option><!></select>',1),FT=y('<button type="button" class="hmm-inline-button hmm-inline-button-first svelte-1fmr35a">✎</button> <span> </span>',1),GT=y('<button type="button" class="hmm-inline-button svelte-1fmr35a">⚒</button>'),UT=y("<!> <!>",1),BT=y('<span class="hmm-msg-cell svelte-1fmr35a"></span>'),HT=y('<span class="hmm-firmware-status svelte-1fmr35a"> </span>'),VT=y('<button type="button" class="hmm-inline-button hmm-firmware-action svelte-1fmr35a"> </button>'),zT=y('<span class="hmm-firmware-status svelte-1fmr35a"> <!></span>'),jT=y('<span class="hmm-firmware-cell svelte-1fmr35a"><span class="hmm-firmware-version svelte-1fmr35a"> </span> <!></span>'),WT=y('<button type="button" class="hmm-inline-button svelte-1fmr35a"> </button>'),KT=y("<span></span>"),YT=y('<span title="AES_ACTIVE" aria-label="AES_ACTIVE" role="img">🔑</span>'),qT=y('<span class="hmm-type-cell svelte-1fmr35a"><span class="hmm-type-text svelte-1fmr35a"> </span> <!></span>'),$T=y('<span class="hmm-roaming svelte-1fmr35a" title="ROAMING" aria-label="ROAMING" role="img">⇄</span>'),XT=y("<span> </span> <!>",1),QT=y('<div class="hmm-page svelte-1fmr35a"><div class="hmm-page-grid svelte-1fmr35a"><!></div></div> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!>',1);function ZT(r,e){ct(e,!0);const n=Ot(),s=n.i18n.t;let a=C(We([])),i=C(We([])),o=C(!1),l=C(0),f=C(0),p=C(""),_=C(!1),g=C(!1),k=C(!1),E=C(!1),b=C(!1),w=C(""),x=C(!1),D=C(We([])),N=C(We([])),R=C(!1),M=C(!1),z=C(""),$=C(void 0),le=C(!1),fe=C(""),de=C("MASTER"),B=C(!1),oe=C("room"),K=C(We([])),X=C(""),se=C(""),j=C("");const ne=c(()=>n.app.selectedInterface),ye=c(()=>n.interfaces.typeOf(t(ne))),xe=c(()=>n.devices.index(t(ne))),ie=c(()=>_i(t(ne),t(ye))),Ae=c(()=>t(ie)&&t(xe)!==void 0?t(xe).channels().filter(ue=>oh(ue)).map(ue=>ue.ADDRESS):[]);ot(()=>{if(t(ne)===""||t(xe)===void 0||!t(ie))return;const ue=t(ne),He=t(Ae);sr(()=>{n.smokeGroups.sync(ue,He)})});const Te=c(()=>t(ye)==="HmIP-RF");ot(()=>{if(t(ne)===""||t(xe)===void 0||!t(Te))return;const ue=t(ne);sr(()=>{n.routers.ensure(ue)})});const me=c(()=>n.smokeGroups.of(t(ne))),P=c(()=>t(xe)===void 0?[]:[...Vb(t(xe)),...t(ie)?zb(t(me)):[]]),ce=c(()=>Object.fromEntries(t(P).map(ue=>[ue.address,ue]))),be=c(()=>t(P).filter(ue=>ue.kind==="hmip").map(ue=>Wb(ue.number??0))),ee=c(()=>jb(t(me)));function he(ue){return ue in t(ce)}function G(ue){return(t(ce)[ue]?.members??[]).map(He=>t(xe)?.get(He)).filter(He=>He!==void 0)}function Q(ue){const He=[],Vt=t(xe)===void 0?void 0:lh(t(xe),ue);Vt!==void 0&&He.push(n.nameOf(Vt));for(const yn of t(me)[ue]??[])He.push(s("Smoke group {n}",{n:yn}));return He}function q(ue){const He=t(ce)[ue.ADDRESS];if(He!==void 0)return s("{count} detectors",{},He.members.length);const Vt=Ds(ue.ADDRESS)?n.devices.channels(t(ne),ue.ADDRESS).map(yn=>yn.ADDRESS):[ue.ADDRESS];return[...new Set(Vt.flatMap(yn=>Q(yn)))].join(", ")}function Y(ue){const He=t(ce)[ue]?.number;return na(ue)&&He!==void 0?s("Smoke group {n}",{n:He}):n.nameOf(ue)}function ae(ue){if(!na(ue.ADDRESS))return el(ue.ADDRESS,t(F));const He={};for(const Vt of G(ue.ADDRESS))for(const yn of el(Fa(Vt.ADDRESS),t(F),99))He[yn.datapoint]=yn;return Object.values(He)}function J(ue){return G(ue)[0]?.PARENT_TYPE??"HmIP-SWSD"}function ve(ue){u($,void 0),u(z,ue,!0),u(M,!0)}function ge(){t(ee)!==void 0&&(u($,{address:Td(t(ee)),kind:"hmip",number:t(ee),members:[]},!0),u(z,""),u(M,!0))}const te=c(()=>t($)??(t(z)===""?void 0:t(ce)[t(z)])),O=c(()=>t(ie)&&t(Ae).length>0&&t(ee)!==void 0),U=c(()=>t(ie)?t(Ae).length===0?s("This interface has no smoke detector"):s("All eight smoke groups are in use"):s("Only available on HmIP interfaces")),I=c(()=>[...t(be),...n.devices.devices(t(ne))]),F=c(()=>n.serviceMessages.of(t(ne))),Ee=c(()=>n.radio.gateways(t(ne)));ot(()=>{t(ye)==="BidCos-RF"&&n.radio.ensureGateways(t(ne))}),ot(()=>{t(ne),u(a,[],!0),u(i,[],!0),u(se,""),u(j,"")});const Ie=c(()=>n.taxonomy),Me=c(()=>t(Ie).options("room")),Ve=c(()=>t(Ie).options("function")),ze=c(()=>[t(se),t(j)].filter(ue=>ue!==""));ot(()=>{t(se)!==""&&!t(Me).some(ue=>ue.path===t(se))&&u(se,""),t(j)!==""&&!t(Ve).some(ue=>ue.path===t(j))&&u(j,"")});function nt(ue){return t(Ie).refOf(t(ne),ue)}function Ze(ue){return t(Ie).view(nt(ue))}function _e(ue){return n.devices.channels(t(ne),ue.ADDRESS).map(He=>Ze(He.ADDRESS))}function Se(ue,He){return(Ds(ue.ADDRESS)?Kh(Ze(ue.ADDRESS),_e(ue),He):$l(Ze(ue.ADDRESS),He)).join(", ")}const V=c(()=>t(ze).length===0?t(I):t(I).filter(ue=>t(ze).every(He=>na(ue.ADDRESS)?G(ue.ADDRESS).some(Vt=>L(Vt,He)):Wh(Ze(ue.ADDRESS),_e(ue),He))));function L(ue,He){return lu(Ze(ue.ADDRESS),Ze(Fa(ue.ADDRESS)),He)}ot(()=>{t(ne)!==""&&n.links.ensure(t(ne))});const Pe=c(()=>n.devices.isLoading(t(ne))?s("Loading Homematic Manager..."):n.devices.hasFailed(t(ne))?s("The device list could not be read - press Refresh to try again"):t(xe)===void 0?s("Loading Homematic Manager..."):t(I).length>0?s("No device matches the room or function filter"):s("No devices - the interface has not reported any yet")),Ge=c(()=>t(a).length===1?t(a)[0]??"":""),qe=c(()=>t(Ge)!==""&&Ds(t(Ge))?t(Ge):""),we=c(()=>t(a).filter(ue=>!Ds(ue)&&!aa(ue)));function Ce(ue){return ue!==""&&!aa(ue)&&!na(ue)}const Oe=c(()=>Ce(t(Ge))),Be=c(()=>t(qe)!==""&&Gi(t(xe)?.get(t(qe))?.FLAGS).dontDelete),pe=c(()=>t(qe)!==""&&!na(t(qe))?t(qe):""),De=c(()=>t(pe)!==""&&!t(Be)),Ue=c(()=>t(ye).startsWith("BidCos")),Fe=c(()=>Rb(t(ye)));function Ye(ue){switch(ue){case"device":return s("Select a device");case"channel":return s("Select one or more channels");case"delete":return t(Be)?s("This device carries the DontDelete flag"):s("Select a device");case"bidcos":return s("Only available on BidCos interfaces")}}const tt=c(()=>[{key:"icon",label:"",width:Ba,fixed:!0,sortable:!1,filterable:!1,align:"center",value:()=>""},{key:"name",label:s("Name"),width:170,copy:"name",value:ue=>Y(ue.ADDRESS)},{key:"ADDRESS",label:"ADDRESS",width:150,mono:!0,copy:"address"},{key:"rooms",label:s("Rooms"),width:120,value:ue=>Se(ue,"room"),onactivate:ue=>Je("room",ue.ADDRESS)},{key:"functions",label:s("Functions"),width:110,value:ue=>Se(ue,"function"),onactivate:ue=>Je("function",ue.ADDRESS)},{key:"smokeGroup",label:s("Smoke group"),width:150,minWidth:70,keepMinWidth:!0,hidden:t(P).length===0,value:ue=>q(ue)},{key:"msgs",label:"Msgs",width:su,minWidth:su,keepMinWidth:!0,align:"center",filterable:!1,sortable:!1,value:ue=>ae(ue).map(He=>He.datapoint).join(" ")},{key:"TYPE",label:"TYPE",width:150},{key:"SUBTYPE",label:"SUBTYPE",width:90,hidden:t(ye)!=="HmIP-RF"},{key:"FIRMWARE",label:"FIRMWARE",width:au,minWidth:au,keepMinWidth:!0,value:ue=>`${ue.FIRMWARE??""} ${ue.AVAILABLE_FIRMWARE??""}`.trim()},{key:"PARAMSETS",label:"PARAMSETS",width:Bi,minWidth:Bi,keepMinWidth:!0,sortable:!1,value:ue=>dt(ue).names.join(" ")},{key:"FLAGS",label:"FLAGS",width:130,value:ue=>Gi(ue.FLAGS).labels.join(" ")},{key:"INTERFACE",label:"INTERFACE",width:130,hidden:t(ye)!=="BidCos-RF",value:ue=>Cc(ue,t(Ee))},{key:"RX_MODE",label:"RX_MODE",width:130,hidden:t(ye)==="BidCos-Wired",value:ue=>Pb(ue.RX_MODE).join(" ")}]),ft=c(()=>[{key:"name",label:s("Name"),width:170,copy:"name",value:ue=>n.nameOf(ue.ADDRESS)},{key:"ADDRESS",label:"ADDRESS",width:150,mono:!0,copy:"address"},{key:"rooms",label:s("Rooms"),width:120,value:ue=>Se(ue,"room"),onactivate:ue=>Je("room",ue.ADDRESS)},{key:"functions",label:s("Functions"),width:110,value:ue=>Se(ue,"function"),onactivate:ue=>Je("function",ue.ADDRESS)},{key:"smokeGroup",label:s("Smoke group"),width:150,hidden:t(P).length===0,value:ue=>q(ue)},{key:"TYPE",label:"TYPE",width:150},{key:"DIRECTION",label:"DIRECTION",width:100,value:ue=>Ob(ue.DIRECTION)},{key:"PARAMSETS",label:"PARAMSETS",width:Bi,minWidth:Bi,keepMinWidth:!0,sortable:!1,value:ue=>dt(ue).names.join(" ")},{key:"FLAGS",label:"FLAGS",width:130,value:ue=>Gi(ue.FLAGS).labels.join(" ")},{key:"links",label:s("Links"),width:60,align:"right",filterable:!1,value:ue=>{const He=n.links.forAddress(t(ne),ue.ADDRESS).length;return He===0?"":He}},{key:"AES_ACTIVE",label:"AES_ACTIVE",width:90,hidden:t(ye)!=="BidCos-RF",value:ue=>ue.AES_ACTIVE?"🔑":""}]);function dt(ue){const He=Ds(ue.ADDRESS)?void 0:t(xe)?.parentOf(ue.ADDRESS),Vt=_i(t(ne),t(ye))&&aa(ue.ADDRESS),yn=Nb(ue.ADDRESS)||ua(ue);return LS(ue.PARAMSETS,ir=>{const it=n.paramsets.contentOf(t(ne),ue,ir,He);return ir!=="MASTER"||it!=="empty"||!Vt?it:n.paramsets.contentOf(t(ne),ue,"VALUES",He,"service-messages")},{channel:yn})}function ke(ue){const He=t(xe)?.get(ue);return{canSend:As(He?.LINK_SOURCE_ROLES).length>0,canReceive:As(He?.LINK_TARGET_ROLES).length>0,links:n.links.forAddress(t(ne),ue).length}}function Le(ue){const He=n.devices.channels(t(ne),ue.ADDRESS),Vt=he(ue.ADDRESS)?G(ue.ADDRESS):[];if(t(ze).length===0)return[...He,...Vt];const yn=Ze(ue.ADDRESS);return[...He.filter(ir=>t(ze).every(it=>lu(Ze(ir.ADDRESS),yn,it))),...Vt.filter(ir=>t(ze).every(it=>L(ir,it)))]}function $e(ue){return{ref:nt(ue),channels:Ds(ue)?n.devices.channels(t(ne),ue).map(He=>nt(He.ADDRESS)):[]}}function at(ue,He){He.length!==0&&(u(oe,ue,!0),u(K,He.map(Vt=>$e(Vt)),!0),u(X,He.length===1?He[0]??"":"",!0),u(B,!0))}function lt(ue,He){at(ue,He===void 0||t(a).includes(He)?t(a):[He])}function Je(ue,He){t(Ie).writable&&at(ue,[He])}const Pt=c(()=>t(a).length>0&&t(Ie).writable),Tt=c(()=>t(Ie).available?t(Ie).writable?s("Select one or more rows"):s("The store does not take writes"):s("No store connected")),Lt=c(()=>Math.max(3,...t(V).map(ue=>{const He=pn(ue);return He.busy||He.action!==void 0||He.status!==void 0?He.firmware.length:0})));function Qt(ue){return el(ue,t(F),99).some(He=>He.datapoint==="UPDATE_PENDING")}function pn(ue){return US(ue,{busy:n.devices.firmwareBusy.includes(ue.ADDRESS),updatePending:Qt(ue.ADDRESS)})}async function wn(ue){const He=pn(ue);He.action==="install"?await n.devices.installFirmware(t(ne),ue.ADDRESS):He.action==="update"&&await n.devices.updateFirmware(t(ne),[ue.ADDRESS])}ot(()=>{const ue=t(ne),He=ue===""?0:n.devices.firmwarePollMs(ue);if(He<=0)return;const Vt=setInterval(()=>{n.devices.load(ue,{refresh:!0})},He);return()=>{clearInterval(Vt)}});function tn(ue){u(w,ue,!0),u(_,!0)}function bn(ue){u(w,ue,!0),u(g,!0)}function Pn(ue){u(w,ue,!0),u(k,!0)}function $n(ue){u(w,ue,!0),u(E,!0)}async function Xn(ue){const He=[...t(we)];if(He.length===0)return;const Vt=await n.devices.reportValueUsage(t(ne),He,ue);n.notices.push("info",s("reportValueUsage {value}: {count} datapoints on {channels} channels",{value:ue,count:Vt,channels:He.length}))}function Zt(ue,He){u(fe,ue,!0),u(de,He,!0),u(le,!0)}function Ft(ue,He){u(p,ue.ADDRESS,!0),u(l,He.clientX,!0),u(f,He.clientY,!0),u(o,!0)}const Jt=c(()=>{const ue=t(xe)?.get(t(p));return ue===void 0?[]:dt(ue).names.map(He=>({id:`paramset:${He}`,label:s(`${He} Paramset`)}))}),Qn=c(()=>na(t(p))?[{id:"smokeGroup",label:`${s("Members")}…`}]:Ds(t(p))?[...he(t(p))?[{id:"smokeGroup",label:`${s("Members")}…`},{id:"sep0",separator:!0}]:[],{id:"rename",label:s("Rename")},...t(Jt),{id:"sep1",separator:!0},{id:"restore",label:s("restoreConfigToDevice"),disabled:!t(Ue)},{id:"clear",label:s("clearConfigCache"),disabled:!t(Ue)},{id:"repair",label:s("Repair configuration")},{id:"sep2",separator:!0},{id:"assign:room",label:`${s("Assign to room")}…`,disabled:!t(Ie).writable},{id:"assign:function",label:`${s("Assign to function")}…`,disabled:!t(Ie).writable},{id:"sep3",separator:!0},{id:"replace",label:s("Replace"),disabled:Mn(t(p))},{id:"delete",label:s("Delete"),danger:!0,disabled:Mn(t(p))}]:[{id:"rename",label:s("Rename"),disabled:!Ce(t(p))},{id:"usage1",label:"reportValueUsage 1",disabled:aa(t(p))},{id:"usage0",label:"reportValueUsage 0",disabled:aa(t(p))},{id:"sep1",separator:!0},...t(Jt).length===0?[]:[...t(Jt),{id:"sep2",separator:!0}],{id:"assign:room",label:`${s("Assign to room")}…`,disabled:!t(Ie).writable},{id:"assign:function",label:`${s("Assign to function")}…`,disabled:!t(Ie).writable},{id:"sep3",separator:!0},{id:"link:sender",label:s("Create link as sender"),disabled:!ke(t(p)).canSend},{id:"link:receiver",label:s("Create link as receiver"),disabled:!ke(t(p)).canReceive},{id:"link:show",label:`${s("Show links")} (${String(ke(t(p)).links)})`,disabled:ke(t(p)).links===0},{id:"team",label:s("Team"),disabled:(t(xe)?.get(t(p))?.TEAM_TAG??"")===""}]);function Mn(ue){return Gi(t(xe)?.get(ue)?.FLAGS).dontDelete}async function Or(ue){const He=t(p);if(ue.startsWith("paramset:")){Zt(He,ue.slice(9));return}if(ue==="assign:room"||ue==="assign:function"){lt(ue==="assign:room"?"room":"function",He);return}switch(ue){case"link:sender":u(D,[He],!0),u(N,[],!0),u(x,!0);break;case"link:receiver":u(D,[],!0),u(N,[He],!0),u(x,!0);break;case"team":u(w,He,!0),u(R,!0);break;case"smokeGroup":ve(He);break;case"link:show":n.app.linksFilter=He,n.app.setTab("links");break;case"rename":tn(He);break;case"restore":await n.devices.restoreConfig(t(ne),He);break;case"clear":await n.devices.clearConfigCache(t(ne),He);break;case"repair":$n(He);break;case"replace":Pn(He);break;case"delete":bn(He);break;case"usage1":case"usage0":await n.devices.reportValueUsage(t(ne),[He],ue==="usage1"?1:0);break}}var zr=QT(),Zn=Ne(zr),jn=A(Zn),Lr=A(jn);{const ue=rt=>{var je=OT(),vt=Ne(je);{let Rt=c(()=>s("Pair device")),pt=c(()=>!t(Fe)),ht=c(()=>s("This interface cannot pair devices"));Vh(vt,{get caption(){return t(Rt)},icon:"+",get disabled(){return t(pt)},get reason(){return t(ht)},testId:"devices-add",onclick:()=>u(b,!0)})}var At=d(vt,2);{let Rt=c(()=>s("Rename device")),pt=c(()=>!t(Oe)),ht=c(()=>Ye("device"));Dt(At,{get title(){return t(Rt)},icon:"✎",get disabled(){return t(pt)},get reason(){return t(ht)},testId:"devices-rename",onclick:()=>tn(t(Ge))})}var zt=d(At,2);{let Rt=c(()=>s("Assign to room")),pt=c(()=>!t(Pt));Dt(zt,{get title(){return t(Rt)},icon:"⌂",get disabled(){return t(pt)},get reason(){return t(Tt)},testId:"devices-assign-room",onclick:()=>lt("room")})}var hn=d(zt,2);{let Rt=c(()=>s("Assign to function")),pt=c(()=>!t(Pt));Dt(hn,{get title(){return t(Rt)},icon:"⚑",get disabled(){return t(pt)},get reason(){return t(Tt)},testId:"devices-assign-function",onclick:()=>lt("function")})}var Ht=d(hn,2);{let Rt=c(()=>s("Rooms and functions")),pt=c(()=>!t(Ie).available),ht=c(()=>s("No store connected"));Dt(Ht,{get title(){return t(Rt)},icon:"⊞",get disabled(){return t(pt)},get reason(){return t(ht)},testId:"devices-taxonomy",onclick:()=>{n.selectInterface(_d)}})}var Mt=d(Ht,2);{let Rt=c(()=>t(we).length===0),pt=c(()=>Ye("channel"));Dt(Mt,{title:"reportValueUsage 1",icon:"⇩",get disabled(){return t(Rt)},get reason(){return t(pt)},testId:"devices-usage-1",onclick:()=>{Xn(1)}})}var kn=d(Mt,2);{let Rt=c(()=>t(we).length===0),pt=c(()=>Ye("channel"));Dt(kn,{title:"reportValueUsage 0",icon:"⇧",get disabled(){return t(Rt)},get reason(){return t(pt)},testId:"devices-usage-0",onclick:()=>{Xn(0)}})}var An=d(kn,2);{let Rt=c(()=>s("restoreConfigToDevice")),pt=c(()=>t(qe)===""||!t(Ue)),ht=c(()=>t(Ue)?Ye("device"):Ye("bidcos"));Dt(An,{get title(){return t(Rt)},icon:"⟲",get disabled(){return t(pt)},get reason(){return t(ht)},testId:"devices-restore",onclick:()=>{n.devices.restoreConfig(t(ne),t(qe))}})}var dn=d(An,2);{let Rt=c(()=>s("clearConfigCache")),pt=c(()=>t(qe)===""||!t(Ue)),ht=c(()=>t(Ue)?Ye("device"):Ye("bidcos"));Dt(dn,{get title(){return t(Rt)},icon:"⌫",get disabled(){return t(pt)},get reason(){return t(ht)},testId:"devices-clear",onclick:()=>{n.devices.clearConfigCache(t(ne),t(qe))}})}var _n=d(dn,2);{let Rt=c(()=>s("Repair configuration")),pt=c(()=>t(pe)===""),ht=c(()=>Ye("device"));Dt(_n,{get title(){return t(Rt)},icon:"⚒",get disabled(){return t(pt)},get reason(){return t(ht)},testId:"devices-repair",onclick:()=>$n(t(pe))})}var or=d(_n,2);{let Rt=c(()=>s("New smoke group")),pt=c(()=>!t(O));Dt(or,{get title(){return t(Rt)},icon:"◎",get disabled(){return t(pt)},get reason(){return t(U)},testId:"devices-smoke-group-new",onclick:ge})}var Gn=d(or,2);{let Rt=c(()=>s("Replace device")),pt=c(()=>!t(De)),ht=c(()=>Ye("delete"));Dt(Gn,{get title(){return t(Rt)},icon:"⇄",get disabled(){return t(pt)},get reason(){return t(ht)},testId:"devices-replace",onclick:()=>Pn(t(qe))})}var cn=d(Gn,2);{let Rt=c(()=>s("Delete device")),pt=c(()=>!t(De)),ht=c(()=>Ye("delete"));Dt(cn,{get title(){return t(Rt)},icon:"🗑",get disabled(){return t(pt)},get reason(){return t(ht)},testId:"devices-delete",onclick:()=>bn(t(qe))})}var jt=d(cn,2);{let Rt=c(()=>s("Refresh"));Dt(jt,{get title(){return t(Rt)},icon:"⟳",testId:"devices-refresh",onclick:()=>{n.devices.load(t(ne),{refresh:!0}),n.smokeGroups.refresh(t(ne),t(Ae))}})}v(rt,je)},He=rt=>{var je=St(),vt=Ne(je);{var At=zt=>{var hn=LT(),Ht=Ne(hn),Mt=A(Ht),kn=m(Mt,!0);Mt.value=Mt.__value="";var An=d(Mt);Xe(An,17,()=>t(Me),cn=>cn.path,(cn,jt)=>{var Rt=Iu(),pt=m(Rt,!0),ht={};S(Gt=>{h(pt,Gt),ht!==(ht=t(jt).path)&&(Rt.value=(Rt.__value=ht)??"")},[()=>ql(t(jt)," ")]),v(cn,Rt)}),Xt(Ht);var dn=d(Ht,2),_n=A(dn),or=m(_n,!0);_n.value=_n.__value="";var Gn=d(_n);Xe(Gn,17,()=>t(Ve),cn=>cn.path,(cn,jt)=>{var Rt=Iu(),pt=m(Rt,!0),ht={};S(Gt=>{h(pt,Gt),ht!==(ht=t(jt).path)&&(Rt.value=(Rt.__value=ht)??"")},[()=>ql(t(jt)," ")]),v(cn,Rt)}),Xt(dn),S((cn,jt,Rt,pt)=>{T(Ht,"aria-label",cn),h(kn,jt),T(dn,"aria-label",Rt),h(or,pt)},[()=>s("Room"),()=>s("All rooms"),()=>s("Function"),()=>s("All functions")]),kr(Ht,()=>t(se),cn=>u(se,cn)),kr(dn,()=>t(j),cn=>u(j,cn)),v(zt,hn)};W(vt,zt=>{t(Ie).available&&zt(At)})}v(rt,je)},Vt=(rt,je=Hn,vt=Hn,At=Hn)=>{var zt=St(),hn=Ne(zt);{var Ht=pt=>{const ht=c(()=>na(je().ADDRESS)?J(je().ADDRESS):je().TYPE);{let Gt=c(()=>n.host.deviceImageUrl(t(ht))),nn=c(()=>`device-image-${je().ADDRESS}`);Ha(pt,{get deviceType(){return t(ht)},get src(){return t(Gt)},get testId(){return t(nn)}})}},Mt=pt=>{var ht=FT(),Gt=Ne(ht),nn=d(Gt,2),Tn=m(nn,!0);S((Dn,Jn)=>{T(Gt,"data-testid",`smoke-group-members-${je().ADDRESS}`),T(Gt,"title",Dn),T(nn,"data-testid",`smoke-group-${je().ADDRESS}`),h(Tn,Jn)},[()=>s("Members"),()=>q(je())]),re("click",Gt,Dn=>{Dn.stopPropagation(),ve(je().ADDRESS)}),v(pt,ht)},kn=c(()=>vt().key==="smokeGroup"&&he(je().ADDRESS)&&At().depth===0),An=pt=>{var ht=BT();Xe(ht,21,()=>ae(je()),Gt=>Gt.datapoint,(Gt,nn)=>{const Tn=c(()=>zh(t(nn).datapoint,!t(Ue)));var Dn=UT(),Jn=Ne(Dn);{let Rn=c(()=>s(t(nn).label)),gn=c(()=>`${s(t(nn).label)} (${t(nn).datapoint} ${t(nn).address})${t(Tn)===void 0?"":` — ${s(t(Tn))}`}`);IS(Jn,{get mark(){return t(nn)},get label(){return t(Rn)},get title(){return t(gn)}})}var lr=d(Jn,2);{var us=Rn=>{var gn=GT();S(Rr=>{T(gn,"data-testid",`repair-${je().ADDRESS}`),T(gn,"title",Rr)},[()=>s("Repair configuration")]),re("click",gn,Rr=>{Rr.stopPropagation(),$n(je().ADDRESS)}),v(Rn,gn)},Bs=c(()=>FS(t(nn).datapoint,!t(Ue)));W(lr,Rn=>{t(Bs)&&Rn(us)})}v(Gt,Dn)}),S(()=>T(ht,"data-testid",`msgs-${je().ADDRESS}`)),v(pt,ht)},dn=pt=>{const ht=c(()=>pn(je()));var Gt=jT();let nn;var Tn=A(Gt),Dn=m(Tn,!0),Jn=d(Tn,2);{var lr=Rn=>{var gn=HT(),Rr=m(gn,!0);S((Wr,Ts)=>{T(gn,"title",Wr),T(gn,"data-testid",`firmware-status-${je().ADDRESS}`),h(Rr,Ts)},[()=>s("firmware requested hint"),()=>s("firmware requested")]),v(Rn,gn)},us=Rn=>{var gn=VT(),Rr=m(gn);S((Wr,Ts)=>{T(gn,"data-testid",`firmware-${je().ADDRESS}`),T(gn,"title",Wr),h(Rr,`${Ts??""} ${t(ht).available??""??""}`)},[()=>s("Install firmware {version}",{version:t(ht).available??""}),()=>s("install")]),re("click",gn,Wr=>{Wr.stopPropagation(),wn(je())}),v(Rn,gn)},Bs=Rn=>{var gn=zT(),Rr=A(gn),Wr=d(Rr);{var Ts=fs=>{var Hs=Cn();S(ba=>h(Hs,ba),[()=>` · ${String(t(ht).percent)} %`]),v(fs,Hs)};W(Wr,fs=>{t(ht).percent!==void 0&&fs(Ts)})}S((fs,Hs)=>{T(gn,"title",fs),T(gn,"data-testid",`firmware-status-${je().ADDRESS}`),h(Rr,Hs)},[()=>s(t(ht).hint??t(ht).status),()=>s(t(ht).status)]),v(Rn,gn)};W(Jn,Rn=>{t(ht).busy&&t(ht).status===void 0?Rn(lr):t(ht).action&&!t(ht).busy?Rn(us,1):t(ht).status&&Rn(Bs,2)})}S(()=>{T(Gt,"data-testid",`firmware-cell-${je().ADDRESS}`),nn=Un(Gt,"",nn,{"grid-template-columns":`${t(Lt)}ch minmax(0, max-content)`}),h(Dn,t(ht).firmware)}),v(pt,Gt)},_n=pt=>{const ht=c(()=>dt(je()));var Gt=KT();Xe(Gt,20,()=>t(ht).names,nn=>nn,(nn,Tn)=>{var Dn=WT(),Jn=m(Dn,!0);S(()=>{T(Dn,"data-testid",`paramset-${je().ADDRESS}-${Tn}`),h(Jn,Tn)}),re("click",Dn,lr=>{lr.stopPropagation(),Zt(je().ADDRESS,Tn)}),v(nn,Dn)}),S(()=>{T(Gt,"data-testid",`paramsets-${je().ADDRESS}`),T(Gt,"aria-busy",t(ht).pending)}),v(pt,Gt)},or=pt=>{var ht=St(),Gt=Ne(ht);{var nn=Tn=>{var Dn=YT();v(Tn,Dn)};W(Gt,Tn=>{je().AES_ACTIVE&&Tn(nn)})}v(pt,ht)},Gn=pt=>{var ht=qT(),Gt=A(ht),nn=m(Gt,!0),Tn=d(Gt,2);{let Dn=c(()=>s("Routes for other HmIP devices")),Jn=c(()=>s("Router")),lr=c(()=>`router-${je().ADDRESS}`);TS(Tn,{get title(){return t(Dn)},get label(){return t(Jn)},get testId(){return t(lr)}})}S(()=>h(nn,je().TYPE)),v(pt,ht)},cn=c(()=>vt().key==="TYPE"&&At().depth===0&&t(Te)&&n.routers.isRouting(t(ne),je().ADDRESS)),jt=pt=>{var ht=XT(),Gt=Ne(ht),nn=m(Gt,!0),Tn=d(Gt,2);{var Dn=lr=>{var us=$T();v(lr,us)},Jn=c(()=>kd(je()));W(Tn,lr=>{t(Jn)&&lr(Dn)})}S(lr=>{T(Gt,"data-testid",`receiver-${je().ADDRESS}`),h(nn,lr)},[()=>Cc(je(),t(Ee))]),v(pt,ht)},Rt=pt=>{var ht=Cn();S(Gt=>h(ht,Gt),[()=>vt().value?vt().value(je())??"":je()[vt().key]??""]),v(pt,ht)};W(hn,pt=>{vt().key==="icon"?pt(Ht):t(kn)?pt(Mt,1):vt().key==="msgs"&&At().depth===0?pt(An,2):vt().key==="FIRMWARE"&&At().depth===0?pt(dn,3):vt().key==="PARAMSETS"?pt(_n,4):vt().key==="AES_ACTIVE"?pt(or,5):t(cn)?pt(Gn,6):vt().key==="INTERFACE"&&At().depth===0?pt(jt,7):pt(Rt,-1)})}v(rt,zt)};let yn=c(()=>s("Devices")),ir=c(()=>s("Filter")),it=c(()=>s("No row matches the filter")),bt=c(()=>s("Clear filter")),It=c(()=>s("Devices")),et=c(()=>s("{count} devices",{},t(V).length));Fs(Lr,{get rows(){return t(V)},get columns(){return t(tt)},get subColumns(){return t(ft)},getId:rt=>rt.ADDRESS,subRows:Le,get scope(){return t(ne)},get caption(){return t(yn)},get filterLabel(){return t(ir)},get emptyText(){return t(Pe)},get noMatchText(){return t(it)},get clearFilterLabel(){return t(bt)},showingText:(rt,je)=>s("Showing {shown} of {total}",{shown:rt,total:je}),onrowcontextmenu:Ft,canRename:rt=>Ce(rt.ADDRESS),onrename:rt=>tn(rt.ADDRESS),get toolbarLabel(){return t(It)},get countText(){return t(et)},tableId:"devices",subTableId:"devices-channels",testId:"devices-table",get selected(){return t(a)},set selected(rt){u(a,rt,!0)},get expanded(){return t(i)},set expanded(rt){u(i,rt,!0)},toolbar:ue,status:He,cell:Vt,$$slots:{toolbar:!0,status:!0,cell:!0}})}var cs=d(Zn,2);{let ue=c(()=>s("Devices"));Ld(cs,{get items(){return t(Qn)},get x(){return t(l)},get y(){return t(f)},get label(){return t(ue)},testId:"devices-menu",onselect:He=>{Or(He)},get open(){return t(o)},set open(He){u(o,He,!0)}})}var ar=d(cs,2);uT(ar,{get address(){return t(w)},get open(){return t(_)},set open(ue){u(_,ue,!0)}});var Ar=d(ar,2);oT(Ar,{get address(){return t(w)},get open(){return t(g)},set open(ue){u(g,ue,!0)}});var jr=d(Ar,2);MT(jr,{get address(){return t(w)},get open(){return t(k)},set open(ue){u(k,ue,!0)}});var cr=d(jr,2);OA(cr,{get open(){return t(b)},set open(ue){u(b,ue,!0)}});var Tr=d(cr,2);Yh(Tr,{get presetSenders(){return t(D)},get presetReceivers(){return t(N)},get open(){return t(x)},set open(ue){u(x,ue,!0)}});var ur=d(Tr,2);l0(ur,{get address(){return t(w)},get open(){return t(R)},set open(ue){u(R,ue,!0)}});var ns=d(ur,2);{let ue=c(()=>t($)!==void 0);t0(ns,{get group(){return t(te)},get isNew(){return t(ue)},get open(){return t(M)},set open(He){u(M,He,!0)}})}var Fr=d(ns,2);RT(Fr,{get address(){return t(w)},get open(){return t(E)},set open(ue){u(E,ue,!0)}});var pr=d(Fr,2);{let ue=c(()=>Ce(t(X)));sT(pr,{get focus(){return t(oe)},get targets(){return t(K)},get address(){return t(X)},get canRename(){return t(ue)},get open(){return t(B)},set open(He){u(B,He,!0)}})}var gr=d(pr,2);am(gr,{get interfaceName(){return t(ne)},get address(){return t(fe)},get paramset(){return t(de)},get open(){return t(le)},set open(ue){u(le,ue,!0)}}),v(r,zr),ut()}Et(["click"]);var JT=y('<!> <!> <input class="hmm-input hmm-events-filter svelte-dzof1w" type="search" placeholder="ADDRESS" data-testid="events-filter-address"/> <input class="hmm-input hmm-events-filter svelte-dzof1w" type="search" placeholder="PARAM" data-testid="events-filter-datapoint"/>',1),eR=y('<span data-testid="events-paused"> </span>'),tR=y('<div class="hmm-page svelte-dzof1w"><div class="hmm-page-grid svelte-dzof1w"><!></div></div>');function nR(r,e){ct(e,!0);const n=Ot(),s=n.i18n.t;let a=C(We([])),i=C(""),o=C(""),l=C(!1),f=C(We([]));const p=c(()=>n.app.selectedInterface),_=c(()=>({interfaceName:t(p),...t(i).trim()===""?{}:{address:t(i).trim()},...t(o).trim()===""?{}:{datapoint:t(o).trim()}})),g=c(()=>n.events.filtered(t(_))),k=c(()=>t(l)?t(f):t(g)),E=c(()=>[{key:"timestamp",label:s("Timestamp"),width:110,value:N=>qf(N.timestamp)},{key:"method",label:s("Method"),width:110},{key:"name",label:s("Name"),width:200,copy:"name",value:N=>N.address===void 0?"":n.nameOf(N.address)},{key:"address",label:"ADDRESS",width:150,mono:!0,copy:"address"},{key:"datapoint",label:"PARAM",width:180},{key:"value",label:"VALUE",width:140,value:N=>uo(N.value??N.payload)},{key:"count",label:s("Events per device"),width:120,align:"right",filterable:!1,value:N=>N.address===void 0?"":n.events.countFor(N.address)}]);function b(){u(f,t(l)?[]:[...t(g)],!0),u(l,!t(l))}var w=tR(),x=A(w),D=A(x);{const N=de=>{var B=JT(),oe=Ne(B);{let j=c(()=>s("Pause"));Dt(oe,{get title(){return t(j)},icon:"⏸",get pressed(){return t(l)},testId:"events-pause",onclick:()=>b()})}var K=d(oe,2);{let j=c(()=>s("Clear"));Dt(K,{get title(){return t(j)},icon:"⌫",testId:"events-clear",onclick:()=>{n.events.clear()}})}var X=d(K,2),se=d(X,2);S((j,ne)=>{T(X,"aria-label",j),T(se,"aria-label",ne)},[()=>`${s("Filter")} ADDRESS`,()=>`${s("Filter")} PARAM`]),xn(X,()=>t(i),j=>u(i,j)),xn(se,()=>t(o),j=>u(o,j)),v(de,B)},R=de=>{var B=St(),oe=Ne(B);{var K=X=>{var se=eR(),j=m(se,!0);S(ne=>h(j,ne),[()=>s("Pause")]),v(X,se)};W(oe,X=>{t(l)&&X(K)})}v(de,B)};let M=c(()=>s("Events")),z=c(()=>s("Filter")),$=c(()=>s("No data")),le=c(()=>s("Events")),fe=c(()=>s("{count} events",{},t(k).length));Fs(D,{get rows(){return t(k)},get scope(){return t(p)},get columns(){return t(E)},getId:de=>String(de.seq),get caption(){return t(M)},get filterLabel(){return t(z)},get emptyText(){return t($)},get toolbarLabel(){return t(le)},get countText(){return t(fe)},tableId:"events",testId:"events-table",get selected(){return t(a)},set selected(de){u(a,de,!0)},toolbar:N,status:R,$$slots:{toolbar:!0,status:!0}})}v(r,w),ut()}var rR=y('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button hmm-group-delete-danger svelte-o268m5" data-testid="group-delete-apply"> </button>',1),sR=y("<li> </li>"),aR=y('<ul class="hmm-group-delete-members svelte-o268m5" data-testid="group-delete-members"></ul>'),iR=y('<p class="hmm-group-delete-subject svelte-o268m5" data-testid="group-delete-subject"> </p> <p class="hmm-group-delete-note svelte-o268m5"> </p> <!>',1);function oR(r,e){ct(e,!0);let n=H(e,"open",15,!1),s=H(e,"group",3,void 0);const a=Ot(),i=a.i18n.t;let o=C(!1);ot(()=>{n()&&u(o,!1)});function l(p){const _=a.names.name(p.id);return _===void 0?p.id:`${_} (${p.id})`}async function f(){if(t(o)||s()===void 0)return;u(o,!0);const p=await a.groups.remove(s().id);u(o,!1),p&&n(!1)}{const p=g=>{var k=rR(),E=Ne(k),b=m(E,!0),w=d(E,2),x=m(w,!0);S((D,N)=>{h(b,D),w.disabled=t(o)||s()===void 0,h(x,N)},[()=>i("Cancel"),()=>i("Delete")]),re("click",E,()=>n(!1)),re("click",w,()=>{f()}),v(g,k)};let _=c(()=>i("Delete group"));En(r,{get title(){return t(_)},width:"480px",testId:"group-delete-dialog",get open(){return n()},set open(g){n(g)},buttons:p,children:(g,k)=>{var E=St(),b=Ne(E);{var w=x=>{var D=iR(),N=Ne(D),R=m(N,!0),M=d(N,2),z=m(M,!0),$=d(M,2);{var le=fe=>{var de=aR();Xe(de,21,()=>s().members,B=>B.id,(B,oe)=>{var K=sR(),X=m(K,!0);S(se=>h(X,se),[()=>l(t(oe))]),v(B,K)}),v(fe,de)};W($,fe=>{s().members.length>0&&fe(le)})}S(fe=>{h(R,s().name),h(z,fe)},[()=>i("The members leave the group and the virtual device {device} is removed",{device:s().device})]),v(x,D)};W(b,x=>{s()!==void 0&&x(w)})}v(g,E)},$$slots:{buttons:!0,default:!0}})}ut()}Et(["click"]);var lR=y('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="group-save"> </button>',1),dR=y("<option> </option>"),cR=y('<select class="hmm-select" data-testid="group-type"></select>'),uR=y('<span data-testid="group-type"> </span>'),fR=y('<div class="hmm-group-row svelte-1gbrlxm"><span> </span> <span class="hmm-mono" data-testid="group-device"> </span></div>'),hR=y('<p class="hmm-group-muted svelte-1gbrlxm"> </p>'),mR=y('<p class="hmm-group-muted svelte-1gbrlxm" data-testid="group-no-candidates"> </p>'),vR=y('<li class="svelte-1gbrlxm"><label class="hmm-group-member svelte-1gbrlxm"><input type="checkbox"/> <span class="hmm-group-member-name svelte-1gbrlxm"> </span> <span class="hmm-mono hmm-group-member-id svelte-1gbrlxm"> </span> <span class="hmm-group-member-type svelte-1gbrlxm"> </span></label></li>'),pR=y('<ul class="hmm-group-list svelte-1gbrlxm" data-testid="group-candidates"></ul>'),gR=y('<li class="hmm-group-member svelte-1gbrlxm"><span class="hmm-group-member-name svelte-1gbrlxm"> </span> <span class="hmm-mono hmm-group-member-id svelte-1gbrlxm"> </span> <span class="hmm-group-member-type svelte-1gbrlxm"> </span></li>'),bR=y('<p class="hmm-group-heading svelte-1gbrlxm"> </p> <ul class="hmm-group-list hmm-group-list-muted svelte-1gbrlxm" data-testid="group-connected"></ul>',1),_R=y('<div class="hmm-group-form svelte-1gbrlxm"><label class="hmm-group-row svelte-1gbrlxm"><span> </span> <input class="hmm-input" maxlength="64" data-testid="group-name"/></label> <label class="hmm-group-row svelte-1gbrlxm"><span> </span> <!></label> <!> <p class="hmm-group-heading svelte-1gbrlxm"> </p> <!> <!></div>');function ER(r,e){ct(e,!0);let n=H(e,"open",15,!1),s=H(e,"group",3,void 0);const a=Ot(),i=a.i18n.t;let o=C(""),l=C(""),f=C(We([])),p=C(We([])),_=C(We([])),g=C(We([])),k=C(We([])),E=C(!1),b=C(!1),w=C(We([]));const x=c(()=>s()===void 0),D=c(()=>t(p).find(K=>K.id===t(l))),N=c(()=>{if(t(x))return t(D)?.assignable??[];const K=new Set(t(k).map(X=>X.id));return[...t(k),...t(_).filter(X=>!K.has(X.id))]}),R=c(()=>t(x)?t(D)?.leftover??[]:t(g)),M=c(()=>s()!==void 0&&t(o).trim()!==s().name),z=c(()=>!t(x)&&[...t(f)].sort().join(`
12
+ Headers:`);return Jf((n===-1?e:e.slice(0,n)).trim(),Vg)}var Wg=y(': <span data-testid="update-error-reason"> </span>',1),Kg=y('<a class="hmm-update-link svelte-puqwbv" target="_blank" rel="noopener noreferrer" data-testid="update-releases"> </a>'),Yg=y('<span class="hmm-update-text svelte-puqwbv"> <!></span> <!>',1),qg=y('<span class="hmm-update-text svelte-puqwbv"> </span>'),$g=y('<button type="button" class="hmm-button" data-testid="update-download"> </button>'),Xg=y('<button type="button" class="hmm-button" data-testid="update-install"> </button>'),Qg=y('<div><!> <!> <button type="button" class="hmm-button" data-testid="update-dismiss"> </button></div>');function Zg(r,e){ut(e,!0);let n=H(e,"state",3,void 0),s=H(e,"releasesUrl",3,void 0),a=H(e,"openExternal",3,void 0),i=H(e,"testId",3,void 0);const o=c(()=>{if(!n())return"";switch(n().phase){case"available":return e.labels.available;case"downloading":return`${e.labels.downloading} ${n().percent===void 0?"":`${String(Math.round(n().percent))} %`}`;case"downloaded":return e.labels.downloaded;case"installOnQuit":return e.labels.installOnQuit;case"error":return n().failed==="check"?e.labels.checkFailed:n().failed==="download"?e.labels.downloadFailed:e.labels.failed;default:return""}}),l=c(()=>n()?.phase==="error"),f=c(()=>n()?.install==="link"),p=c(()=>t(l)?zg(n()?.message):"");var _=St(),g=Ne(_);{var k=E=>{var b=Qg();let w;var x=A(b);{var D=fe=>{var de=Yg(),B=Ne(de),oe=A(B),K=d(oe);{var X=ne=>{var ye=Wg(),xe=d(Ne(ye)),ie=m(xe,!0);S(()=>h(ie,t(p))),v(ne,ye)};W(K,ne=>{t(p)!==""&&ne(X)})}var se=d(B,2);{var j=ne=>{var ye=Kg(),xe=m(ye,!0);S(()=>{T(ye,"href",s()),h(xe,e.labels.releases)}),re("click",ye,ie=>jf(ie,s(),a())),v(ne,ye)};W(se,ne=>{s()&&ne(j)})}S(ne=>{T(B,"title",ne),h(oe,`${t(o)??""}${n().version===void 0?"":` (${n().version})`}`)},[()=>jg(n().message)||void 0]),v(fe,de)},N=fe=>{var de=qg(),B=m(de);S(()=>h(B,`${t(o)??""}${n().version===void 0?"":` ${n().version}`}`)),v(fe,de)};W(x,fe=>{t(l)?fe(D):fe(N,-1)})}var R=d(x,2);{var M=fe=>{var de=$g(),B=m(de,!0);S(()=>{T(de,"title",t(f)?e.labels.downloadInBrowser:void 0),h(B,e.labels.download)}),re("click",de,()=>e.ondownload()),v(fe,de)},z=fe=>{var de=Xg(),B=m(de,!0);S(()=>h(B,e.labels.install)),re("click",de,()=>e.oninstall()),v(fe,de)};W(R,fe=>{n().phase==="available"?fe(M):n().phase==="downloaded"&&fe(z,1)})}var $=d(R,2),le=m($,!0);S(()=>{w=_t(b,1,"hmm-update svelte-puqwbv",null,w,{"hmm-update-failed":t(l)}),T(b,"role",t(l)?"alert":"status"),T(b,"data-testid",i()),T(b,"data-phase",n().phase),T(b,"data-install",n().install??"app"),h(le,e.labels.dismiss)}),re("click",$,()=>e.ondismiss()),v(E,b)};W(g,E=>{n()&&t(o)!==""&&E(k)})}v(r,_),ft()}Et(["click"]);const eh=300,Jg=280,js=4;function eb(r,e,n=0){const s=Math.min(Jg,e.width-2*js),a=Math.max(js,Math.min(r.left,e.width-s-js)),i=r.bottom+js;return n>0&&i+n>e.height-js&&r.top-js-n>=js?{left:a,top:r.top-js-n}:{left:a,top:i}}var tb=y('<span class="hmm-tooltip svelte-vstuih" role="tooltip"> </span>');function Rl(r,e){ut(e,!0);let n=H(e,"testId",3,void 0),s=C(void 0),a=C(0);const i=c(()=>eb(e.anchor,{width:window.innerWidth,height:window.innerHeight},t(a)));ot(()=>{e.text,t(s)&&u(a,t(s).offsetHeight,!0)});var o=tb();let l;var f=m(o,!0);fn(o,p=>u(s,p),()=>t(s)),S((p,_)=>{T(o,"data-testid",n()),l=Un(o,"",l,{left:p,top:_}),h(f,e.text)},[()=>`${String(t(i).left)}px`,()=>`${String(t(i).top)}px`]),v(r,o),ft()}var nb=y('<span class="hmm-tooltip-anchor svelte-11extwn"><!> <!></span>');function mi(r,e){ut(e,!0);let n=H(e,"delayMs",3,eh),s=H(e,"testId",3,void 0),a=C(void 0),i=C(void 0),o;function l(){if(e.text===""||!t(i))return;const{left:w,top:x,bottom:D}=t(i).getBoundingClientRect();u(a,{left:w,top:x,bottom:D},!0)}function f(){e.text===""||t(a)!==void 0||(p(),o=setTimeout(l,n()))}function p(){o!==void 0&&(clearTimeout(o),o=void 0)}function _(){p(),u(a,void 0)}ot(()=>p);var g=nb(),k=A(g);qs(k,()=>e.children);var E=d(k,2);{var b=w=>{Rl(w,{get text(){return e.text},get anchor(){return t(a)}})};W(E,w=>{t(a)!==void 0&&e.text!==""&&w(b)})}fn(g,w=>u(i,w),()=>t(i)),S(()=>{T(g,"data-testid",s()),T(g,"data-tooltip",e.text===""?void 0:e.text)}),Ir("pointerenter",g,f),Ir("pointerleave",g,_),re("pointerdown",g,_),re("focusin",g,l),re("focusout",g,_),re("keydown",g,w=>{w.key==="Escape"&&_()}),v(r,g),ft()}Et(["pointerdown","focusin","focusout","keydown"]);var rb=y('<button type="button"><span aria-hidden="true"> </span></button>');function Dt(r,e){ut(e,!0);let n=H(e,"icon",3,"•"),s=H(e,"disabled",3,!1),a=H(e,"reason",3,void 0),i=H(e,"pressed",3,void 0),o=H(e,"busy",3,!1),l=H(e,"onclick",3,void 0),f=H(e,"testId",3,void 0);const p=c(()=>f()===void 0?void 0:`${f()}-tooltip`);{let _=c(()=>s()&&a()!==void 0?`${e.title} — ${a()}`:e.title);mi(r,{get text(){return t(_)},get testId(){return t(p)},children:(g,k)=>{var E=rb();let b;var w=A(E);let x;var D=m(w,!0);S(()=>{b=_t(E,1,"hmm-toolbar-button svelte-cmlgq7",null,b,{"hmm-toolbar-button-pressed":i()===!0}),T(E,"aria-label",e.title),T(E,"aria-pressed",i()),T(E,"aria-busy",o()?"true":void 0),T(E,"data-testid",f()),E.disabled=s()||o(),x=_t(w,1,"hmm-toolbar-icon svelte-cmlgq7",null,x,{"hmm-toolbar-icon-busy":o()}),h(D,n())}),re("click",E,()=>l()?.()),v(g,E)},$$slots:{default:!0}})}ft()}Et(["click"]);const xl=Symbol("homematic-manager.stores");function sb(r){return of(xl,r),r}function Ot(){if(!lf(xl))throw new Error("no stores in context - wrap the component in App.svelte or call setStores() in a parent");return af(xl)}const th=["devices","links","rssi","console","messages","events"],nh="groups",ab=["rooms","functions","metadata"],qi="devices",_d="#store";function rh(r){return r===_d}function vi(r){return ab.includes(r)}function vc(r){return r===void 0||!r.reachable?[]:r.flat===!0?["rooms","functions"]:["metadata"]}function ib(r){return th.includes(r)||r===nh||vi(r)}function ob(r){const e=r.replace(/^#/,"").split("/"),n=decodeURIComponent(e[1]??""),s=decodeURIComponent(e[2]??"");return{interfaceName:n,tab:ib(s)?s:qi}}function lb(r,e){return r===""?"":`#/${encodeURIComponent(r)}/${e}`}function db(r,e={}){switch(r){case"BidCos-Wired":return["devices","links","console","events"];case"CUxD":return["devices","console","events"];case"BidCos-RF":return[...th];case"VirtualDevices":return e.heatingGroups===!0?["devices",nh,"links","console","messages","events"]:["devices","links","console","messages","events"];default:return/hmip/i.test(r)?["devices","links","rssi","console","messages","events"]:["devices","links","console","messages","events"]}}var cb=y('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="change-set-clear"> </button> <button type="button" class="hmm-button" data-testid="change-set-apply"> </button>',1),ub=y('<p data-testid="change-set-empty"> </p>'),fb=y('<p class="hmm-change-call svelte-1uqsmm6"> </p>'),hb=y('<tr><td class="hmm-mono svelte-1uqsmm6"> </td><td class="svelte-1uqsmm6"> </td><td class="hmm-change-new svelte-1uqsmm6"> </td></tr>'),mb=y('<table class="hmm-change-table svelte-1uqsmm6"><tbody></tbody></table>'),vb=y('<p class="hmm-change-error svelte-1uqsmm6"> </p>'),pb=y('<li class="hmm-change svelte-1uqsmm6"><div class="hmm-change-head svelte-1uqsmm6"><span class="hmm-change-title svelte-1uqsmm6"> </span> <button type="button" class="hmm-button"> </button></div> <!> <!> <!></li>'),gb=y('<ol class="hmm-changes svelte-1uqsmm6" data-testid="change-set-list"></ol> <p class="hmm-change-count svelte-1uqsmm6" data-testid="change-set-count"> </p>',1),bb=y("<!> <!>",1);function _b(r,e){ut(e,!0);let n=H(e,"open",15,!1);const s=Ot(),a=s.i18n.t,i=s.changeSet,o=c(()=>i.count);function l(p){const _=i.outcome(p.id);return _===void 0?void 0:{ok:_.ok,..._.error?{error:_.error}:{}}}async function f(){const p=i.interfaces;await i.apply();for(const _ of p)await s.links.load(_);i.empty&&n(!1)}{const p=g=>{var k=cb(),E=Ne(k),b=m(E,!0),w=d(E,2),x=m(w,!0),D=d(w,2),N=m(D,!0);S((R,M,z)=>{h(b,R),w.disabled=i.empty||i.applying,h(x,M),D.disabled=i.empty||i.applying,h(N,z)},[()=>a("Close"),()=>a("Discard all"),()=>a("Apply")]),re("click",E,()=>n(!1)),re("click",w,()=>i.clear()),re("click",D,()=>{f()}),v(g,k)};let _=c(()=>a("Pending changes"));En(r,{get title(){return t(_)},width:"820px",testId:"change-set-dialog",get open(){return n()},set open(g){n(g)},buttons:p,children:(g,k)=>{var E=bb(),b=Ne(E);{var w=R=>{var M=ub(),z=m(M,!0);S($=>h(z,$),[()=>a("Nothing is staged")]),v(R,M)},x=R=>{var M=gb(),z=Ne(M);Xe(z,21,()=>i.changes,fe=>fe.id,(fe,de)=>{const B=c(()=>l(t(de)));var oe=pb(),K=A(oe),X=A(K),se=m(X,!0),j=d(X,2),ne=m(j,!0),ye=d(K,2);Xe(ye,16,()=>t(de).calls,me=>me,(me,P)=>{var ce=fb(),be=m(ce,!0);S(()=>h(be,P)),v(me,ce)});var xe=d(ye,2);{var ie=me=>{var P=mb(),ce=A(P);Xe(ce,21,()=>t(de).lines,be=>be.label,(be,ee)=>{var he=hb(),G=A(he),Q=m(G,!0),q=d(G),Y=m(q,!0),ae=d(q),J=m(ae,!0);S(()=>{h(Q,t(ee).label),h(Y,t(ee).from??""),h(J,t(ee).to??"")}),v(be,he)}),v(me,P)};W(xe,me=>{t(de).lines.length>0&&me(ie)})}var Ae=d(xe,2);{var Te=me=>{var P=vb(),ce=m(P,!0);S(()=>{T(P,"data-testid",`change-error-${t(de).id}`),h(ce,t(B).error)}),v(me,P)};W(Ae,me=>{t(B)&&!t(B).ok&&me(Te)})}S(me=>{T(oe,"data-testid",`change-${t(de).id}`),h(se,t(de).title),j.disabled=i.applying,T(j,"data-testid",`change-remove-${t(de).id}`),h(ne,me)},[()=>a("Remove")]),re("click",j,()=>i.remove(t(de).id)),v(fe,oe)});var $=d(z,2),le=m($,!0);S(fe=>h(le,fe),[()=>a("{count} changes staged",{},t(o))]),v(R,M)};W(b,R=>{i.empty?R(w):R(x,-1)})}var D=d(b,2);{var N=R=>{{let M=c(()=>s.rpcLog.progress??{done:i.applied,total:t(o)}),z=c(()=>a("Cancel"));Zf(R,{get progress(){return t(M)},get cancelLabel(){return t(z)},oncancel:()=>{i.cancel()}})}};W(D,R=>{i.applying&&R(N)})}v(g,E)},$$slots:{buttons:!0,default:!0}})}ft()}Et(["click"]);const Eb=Object.freeze({ip:{env:"HMM_CALLBACK_IP",cli:"--callback-ip"},xmlrpcPort:{env:"HMM_CALLBACK_XMLRPC_PORT",cli:"--callback-xmlrpc-port"},binrpcPort:{env:"HMM_CALLBACK_BINRPC_PORT",cli:"--callback-binrpc-port"}});function yb(r){const{env:e,cli:n}=Eb[r];return`${e} / ${n}`}const pc=Object.freeze(["auto","local","occulite","rega"]),Sb={"interfaces.changed":!0,"rega.changed":!0,"devices.changed":!0,"names.changed":!0,"meta.changed":!0,"meta.enums.changed":!0,"meta.objects.changed":!0,"rpc.event":!0,"serviceMessages.changed":!0,"rpcLog.appended":!0,"write.progress":!0,"unreach.changed":!0,"config.changed":!0,"pairing.changed":!0,notice:!0};Object.freeze(Object.keys(Sb));const ms={manifest:"manifest.json",profiles:r=>`profiles/${r}.json`,receiverTypeAliases:"receiver-type-aliases.json",masterMetadata:"master-metadata.json",optionPresets:"option-presets.json",crossValidations:"cross-validations.json",translations:r=>`translations/${r}.json`,deviceIcons:"device-icons.json",timeSelectors:"easymode-time-selectors.json",masterForms:"master-forms.json"},wb=/\$\{(\w+)\}/gu;function Ed(r,e){return r.template.replace(wb,(n,s)=>e(s))}const yd={"BidCos-RF":{name:"BidCos-RF",port:2001,tlsPort:42001,localPort:32001,localBinrpc:!0,protocol:"xmlrpc",init:!0,ping:!0,dutyCycle:!0},"BidCos-Wired":{name:"BidCos-Wired",port:2e3,tlsPort:42e3,localPort:32e3,localBinrpc:!0,protocol:"xmlrpc",init:!0,ping:!0},"HmIP-RF":{name:"HmIP-RF",port:2010,tlsPort:42010,localPort:32010,protocol:"xmlrpc",init:!0,ping:!0,pingTimeout:600,pingInterval:30,dutyCycle:!0,serviceMessages:!1},VirtualDevices:{name:"VirtualDevices",port:9292,tlsPort:49292,localPort:39292,path:"/groups",protocol:"xmlrpc",init:!0,ping:!1,serviceMessages:!1,installMode:!1},CUxD:{name:"CUxD",port:8701,protocol:"binrpc",init:!0,ping:!0,ident:"CUxD",serviceMessages:!1,installMode:!1}},kb=Object.keys(yd),Ab=["BidCos-RF","HmIP-RF","VirtualDevices","BidCos-Wired"];function Sd(r){return Object.prototype.hasOwnProperty.call(yd,r)}function Tb(r){return Sd(r)?yd[r]:void 0}function Rb(r){return Tb(r)?.installMode!==!1}function xb(r){const e=[];return r.name.trim()===""?e.push({code:"empty-name"}):Sd(r.name)&&e.push({code:"reserved-name",name:r.name}),r.host.trim()===""&&e.push({code:"empty-host"}),(!Number.isInteger(r.port)||r.port<1||r.port>65535)&&e.push({code:"invalid-port",port:r.port}),e}const sh=0;class gc extends Error{address;constructor(e,n){super(`invalid address ${JSON.stringify(e)}: ${n}`),this.name="AddressError",this.address=e}}const Db=/^\d+$/;function ds(r){if(r==="")return;const e=r.indexOf(":");if(e===-1)return{address:r,device:r,isDevice:!0,isChannel:!1,isMaintenance:!1};const n=r.slice(0,e),s=r.slice(e+1);if(n===""||!Db.test(s))return;const a=Number.parseInt(s,10);return{address:r,device:n,index:a,channel:r,isDevice:!1,isChannel:!0,isMaintenance:a===sh}}function Ib(r){const e=ds(r);if(!e)throw r===""?new gc(r,"empty"):new gc(r,"expected SERIAL or SERIAL:INDEX with a numeric index");return e}function Ds(r){return ds(r)?.isDevice===!0}function Nb(r){return ds(r)?.isChannel===!0}function aa(r){return ds(r)?.isMaintenance===!0}function Fa(r){return Ib(r).device}function Fi(r,e){const n=ds(r),s=ds(e);return!n||!s?n?-1:s?1:r<e?-1:r>e?1:0:n.device!==s.device?n.device<s.device?-1:1:(n.index??-1)-(s.index??-1)}function wd(r,e,n,s){const a=e.trim(),i=ds(r);if(a===""||i===void 0||i.isMaintenance)return[];if(!i.isDevice)return[{address:r,name:a}];const o=[{address:r,name:a},{address:`${r}:0`,name:`${a}:0`}];if(!s.channels)return o;const l=new Set([0]);for(const f of n){const p=ds(f);p?.index===void 0||p.device!==r||l.has(p.index)||(l.add(p.index),o.push({address:f,name:`${a}:${String(p.index)}`}))}return o}function ah(r){if(Array.isArray(r))return r.filter(e=>typeof e=="string");if(typeof r=="string"){const e=r.split(/[\s,]+/).filter(n=>n!=="");return e.length>0?e:[]}}const Yo={VISIBLE:1,INTERNAL:2,DONT_DELETE:8};function Gi(r){const e=typeof r=="number"?r:0,n=(e&Yo.VISIBLE)!==0,s=(e&Yo.INTERNAL)!==0,a=(e&Yo.DONT_DELETE)!==0,i=[];return n&&i.push("Visible"),s&&i.push("Internal"),a&&i.push("DontDelete"),{visible:n,internal:s,dontDelete:a,unknownBits:e&-12,labels:i}}const Cb={ALWAYS:1,BURST:2,CONFIG:4,WAKEUP:8,LAZY_CONFIG:16};function Pb(r){const e=typeof r=="number"?r:0,n=[];for(const[s,a]of Object.entries(Cb))(e&a)!==0&&n.push(s);return n}function kd(r){return r.ROAMING===!0||r.ROAMING===1}const Mb=["NONE","SENDER","RECEIVER"];function Ob(r){return Mb[r??0]??"NONE"}const Lb=["HM-RCV-50","HMW-RCV-50","HmIP-RCV-50","CENTRAL"];function qo(r){return Lb.includes(r)}function ua(r){return typeof r.PARENT=="string"&&r.PARENT!==""}function Ga(r,e,n,s){let a="",i=e;if(ua(e)){if(!s)throw new Error(`cannot build a paramset identity for channel ${e.ADDRESS} without its device`);a=e.TYPE,i=s}const o=i.FIRMWARE??"",l=i.VERSION===void 0?"":String(i.VERSION);return[r,i.TYPE,o,l,a,n].join("/")}function As(r){return r===void 0||r.trim()===""?[]:r.trim().split(/\s+/)}class Fb{interfaceName;#e=new Map;#n=[];#t=[];#s=new Map;#a=new Map;#r=new Map;constructor(e,n=[]){this.interfaceName=e;for(const s of n)this.#i(s);this.#n.sort(Fi),this.#t.sort(Fi);for(const s of this.#s.values())s.sort(Fi)}#i(e){const{ADDRESS:n}=e;if(this.#e.set(n,e),ua(e)){this.#t.push(n);const s=this.#s.get(e.PARENT);s?s.push(n):this.#s.set(e.PARENT,[n])}else this.#n.push(n);for(const s of As(e.LINK_SOURCE_ROLES))bc(this.#a,s,n);for(const s of As(e.LINK_TARGET_ROLES))bc(this.#r,s,n)}get size(){return this.#e.size}has(e){return this.#e.has(e)}get(e){return this.#e.get(e)}require(e){const n=this.#e.get(e);if(!n)throw new Error(`unknown address ${e} on interface ${this.interfaceName}`);return n}devices(){return this.#n.map(e=>this.require(e))}channels(){return this.#t.map(e=>this.require(e))}all(){return[...this.#e.values()].sort((e,n)=>Fi(e.ADDRESS,n.ADDRESS))}childrenOf(e){const n=this.#s.get(e);return n?n.map(a=>this.require(a)):(this.#e.get(e)?.CHILDREN??[]).map(a=>this.#e.get(a)).filter(a=>a!==void 0)}parentOf(e){const n=this.#e.get(e);if(!(!n||!ua(n)))return this.#e.get(n.PARENT)}maintenanceChannelOf(e){const n=ds(e);if(n)return this.#e.get(`${n.device}:${sh}`)}isCentral(e){const n=this.#e.get(e);if(!n)return!1;if(qo(n.TYPE))return!0;const s=n.PARENT_TYPE??this.parentOf(e)?.TYPE;return s!==void 0&&qo(s)}centralDevices(){return this.devices().filter(e=>qo(e.TYPE))}sourceRole(e){return[...this.#a.get(e)??[]]}targetRole(e){return[...this.#r.get(e)??[]]}sourceRoles(){return[...this.#a.keys()].sort()}targetRoles(){return[...this.#r.keys()].sort()}paramsetIdentity(e,n){const s=this.#e.get(e);if(!s)return;if(!ua(s))return Ga(this.interfaceName,s,n);const a=this.parentOf(e);if(a)return Ga(this.interfaceName,s,n,a)}}function bc(r,e,n){const s=r.get(e);s?s.push(n):r.set(e,[n])}const Ad=8,Gb="SMOKE_DETECTOR",Ub="HmIP-SWSD-Group",Bb=/^\*GROUP_([1-8])$/;function ih(r){return`GROUP_${String(r)}`}function Td(r){return`*GROUP_${String(r)}`}function na(r){return Bb.test(r)}function oh(r){return r.TYPE===Gb&&(r.PARENT??"")!==""}function Hb(r){let e=!1;const n=[];for(let s=1;s<=Ad;s+=1){const a=r[ih(s)];a!==void 0&&(e=!0,(a===!0||a===1)&&n.push(s))}return e?n:void 0}function Vb(r){const e=[];for(const n of r.devices())for(const s of r.childrenOf(n.ADDRESS)){const a=s.TEAM_CHANNELS??[];if(a.length!==0){e.push({address:n.ADDRESS,kind:"team",teamChannel:s.ADDRESS,teamTag:s.TEAM_TAG??"",members:[...a]});break}}return e}function lh(r,e){const n=r.get(e)?.TEAM??"";if(n==="")return;const a=r.get(n)?.PARENT??"";return a!==""&&r.has(a)?a:void 0}function zb(r){const e=[];for(let n=1;n<=Ad;n+=1){const s=Object.entries(r).filter(([,a])=>a?.includes(n)===!0).map(([a])=>a).sort();s.length>0&&e.push({address:Td(n),kind:"hmip",number:n,members:s})}return e}function jb(r){const e=new Set;for(const n of Object.values(r))for(const s of n??[])e.add(s);for(let n=1;n<=Ad;n+=1)if(!e.has(n))return n}function Wb(r){return{ADDRESS:Td(r),TYPE:Ub,PARENT:"",CHILDREN:[],PARAMSETS:[],FLAGS:0}}function Kb(r,e){return{added:e.filter(n=>!r.includes(n)),removed:r.filter(n=>!e.includes(n))}}const Yb="0123456789ABCEFGHJKLMNPQRSTUWXYZ",qb=26;function pi(r){return r.replace(/[\s-]/g,"").toUpperCase()}function $i(r){return/^[0-9A-F]{24}$/.test(pi(r))}const $b=new RegExp(`^[0-7][${Yb}]{${String(qb-1)}}$`);function _c(r){const e=pi(r);return/^[0-9A-F]{32}$/.test(e)||$b.test(e)}function Xb(r){const e=pi(r),n=/[A-Z0-9]{4}SG([0-9A-F]{24})DLK([0-9A-F]{32})/.exec(e);if(n?.[1]&&n[2])return{sgtin:n[1],key:n[2]};if($i(e))return{sgtin:e,key:""}}const Ec={SENDER_BROKEN:1,RECEIVER_BROKEN:2};function Qb(r){const e=typeof r=="number"?r:0,n=(e&Ec.SENDER_BROKEN)!==0,s=(e&Ec.RECEIVER_BROKEN)!==0;return{senderBroken:n,receiverBroken:s,broken:n||s,unknownBits:e&-4}}function Zb(r){const e=ds(r.SENDER),n=ds(r.RECEIVER);return e!==void 0&&n!==void 0&&e.device===n.device}function Dl(r){const e=Qb(r.FLAGS);return!e.broken||!Zb(r)?e:{senderBroken:!1,receiverBroken:!1,broken:!1,unknownBits:e.unknownBits}}function dh(r){return ua(r)&&!aa(r.ADDRESS)&&As(r.LINK_SOURCE_ROLES).length>0}function Jb(r){return ua(r)&&!aa(r.ADDRESS)&&As(r.LINK_TARGET_ROLES).length>0}function e_(r,e){if(!dh(r)||!Jb(e))return[];const n=new Set(As(e.LINK_TARGET_ROLES));return As(r.LINK_SOURCE_ROLES).filter(s=>n.has(s))}function t_(r,e){return r.ADDRESS!==e.ADDRESS&&e_(r,e).length>0}function ch(r){return r.channels().filter(e=>dh(e))}function Rd(r){return typeof r=="object"&&r!==null&&"explicitDouble"in r&&typeof r.explicitDouble=="number"}function yc(r){return typeof r=="number"?r:Rd(r)?r.explicitDouble:void 0}function n_(r,e){const n=yc(r),s=yc(e);return n!==void 0||s!==void 0?n===s:r===e}const Sc={abortDeleteDevice:{name:"abortDeleteDevice",params:[{name:"address",type:"device_address"}],returns:"void",help:{de:"Diese Methode bricht einen anhängigen Löschvorgang für ein Gerät ab.<br>Es können nur Löschvorgänge abgebrochen werden, die mit dem Flag DELETE_FLAG_DEFER ausgeführt wurden."}},activateLinkParamset:{name:"activateLinkParamset",params:[{name:"address",type:"channel_address"},{name:"peer_address",type:"channel_address"},{name:"long_press",type:"boolean"}],returns:"void",help:{de:"Mit dieser Methode wird ein Link-Parameterset aktiviert. Das logische Gerät verhält sich dann so als ob es direkt von dem entsprechenden zugeordneten Gerät angesteuert worden wäre. Hiermit kann z.B. ein Link-Parameter-Set getestet werden. Der Parameter address ist die Addresses des anzusprechenden logischen Gerätes. Der Parameter peer_address ist die Addresse des Kommunikationspartners, dessen Link-Parameter-Set aktiviert werden soll. Der Parameter long_press gibt an, ob das Parameterset für den langen Tastendruck aktiviert werden soll."}},addDevice:{name:"addDevice",params:[{name:"address",type:"string"},{name:"mode",type:"integer",optional:["rfd"]}],returns:"DeviceDescription",help:{de:"Diese Methode lernt ein Gerät anhand seiner Seriennummer an die CCU an. Diese Funktion wird nicht von jedem Gerät unterstützt. Rückgabewert ist die DeviceDescription des neu angelernten Geräts.<br>Der optionale Parameter mode bestimmt die Art des Installations-Modus:<br>1 = Normaler Installations-Modus<br>2 = Während des Anlernens werden in den Parametersets „MASTER“ default Parameter gesetzt und alle bestehenden Verknüpfungen werden gelöscht."}},addLink:{name:"addLink",params:[{name:"sender",type:"channel_address"},{name:"receiver",type:"channel_address"},{name:"name",type:"string",optional:["rfd","hs485d"]},{name:"description",type:"string",optional:["rfd","hs485d"]}],returns:"void",help:{de:"Diese Methode erstellt eine Kommunikationsbeziehung zwischen zwei logischen Geräten. Die Parameter sender und receiver bezeichnen die beiden zu verknüpfenden Partner. Die Parameter name und description sind optional und beschreiben die Verknüpfung näher."}},addVirtualDeviceInstance:{name:"addVirtualDeviceInstance",params:[],returns:"",help:{de:"leider nicht von eQ-3 dokumentiert."}},changeKey:{name:"changeKey",params:[{name:"passphrase",type:"string"}],returns:"void",help:{de:"Diese Methode ändert den vom Schnittstellenprozess verwendeten AES-Schlüssel. Der Schlüssel wird ebenfalls in allen angelernten Geräten getauscht."}},clearConfigCache:{name:"clearConfigCache",params:[{name:"address",type:"device_address"}],returns:"void",help:{de:"Diese Methode löscht alle zu einem Gerät in der CCU gespeicherten Konfigurationsdaten. Diese werden nicht sofort wieder vom Gerät abgefragt, sondern wenn sie das nächste mal benötigt werden."}},deleteDevice:{name:"deleteDevice",params:[{name:"address",type:"device_address"},{name:"flags",type:"integer",bitmask:{1:"DELETE_FLAG_RESET",2:"DELETE_FLAG_FORCE",4:"DELETE_FLAG_DEFER"}}],returns:"DeviceDescription",help:{de:"Diese Methode löscht ein Gerät aus dem Schnittstellenprozess.<br>Der Parameter address ist die Addresse des zu löschenden Gerätes.<br>Flags ist ein bitweises oder folgender Werte:<ul><li>DELETE_FLAG_RESET Das Gerät wird vor dem Löschen in den Werkszustand zurückgesetzt </li><li>DELETE_FLAG_FORCE Das Gerät wird auch gelöscht, wenn es nicht erreichbar ist </li><li>DELETE_FLAG_DEFER Wenn das Gerät nicht erreichbar ist, wird es bei nächster Gelegenheit gelöscht</li></ul>Bei Homematic IP sind die Flags 0x01 und 0x04 nicht mehr vorhanden und das Löschen von Geräten ist per Default so, als wenn diese Flags gesetzt worden wären."}},determineParameter:{name:"determineParameter",params:[{name:"address",type:"device_address"},{name:"paramset_key",type:"string"},{name:"parameter_id",type:"string"}],returns:"void",help:{de:"Mit dieser Methode wird ein Parameter eines Parameter-Sets automatisch bestimmt. Der Parameter kann bei erfolgreicher Ausführung anschließend sofort über getParamset gelesen werden.<br>Der Parameter address ist die Addresses eines logischen Gerätes.<br>Der Parameter paramset_key ist „MASTER“, „VALUES“ oder die Adresse eines Kommunikationspartners für das entsprechende Link-Parameter-Set (siehe getLinkPeers). Der Parameter parameter_id bestimmt den automatisch zu bestimmenden Parameter."}},getDeviceDescription:{name:"getDeviceDescription",params:[{name:"address",type:"device_address"}],returns:"DeviceDescription",help:{de:"Diese Methode gibt die Gerätebeschreibung des als address übergebenen Gerätes zurück."}},getInstallMode:{name:"getInstallMode",params:[],returns:"Integer",help:{de:"Diese Methode gibt die verbliebene Restzeit in Sekunden im Anlernmodus zurück. Der Wert 0 bedeutet, der Anlernmodus ist nicht aktiv."}},getKeyMismatchDevice:{name:"getKeyMismatchDevice",params:[{name:"reset",type:"bool"}],returns:"String",help:{de:"Diese Methode gibt die Seriennummer des letzten Gerätes zurück, das aufgrund eines falschen AES-Schlüssels nicht angelernt werden konnte. Mit reset=true wird diese Information im Schnittstellenprozess zurückgesetzt."}},getLGWStatus:{name:"getLGWStatus",params:[],returns:"",help:{de:"Gibt den Status des Wired-LAN-Gateways zurück."}},getLinkInfo:{name:"getLinkInfo",params:[{name:"sender",type:"device_address"},{name:"receiver",type:"device_address"}],returns:"Array",help:{de:"Diese Methode gibt den Namen und die Beschreibung für eine bestehende Kommunikationsbeziehung zurück. Die Parameter sender_address und receiver_address bezeichnen die beiden verknüpften Partner."}},getLinkPeers:{name:"getLinkPeers",params:[{name:"address",type:"device_address"}],returns:"",help:{de:"Diese Methode gibt alle einem logischen Gerät zugeordneten Kommunikationspartner zurück. Die zurückgegebenen Werte können als Parameter paramset_key für getParamset() und putParamset() verwendet werden. Der Parameter address ist die Adresse eines logischen Gerätes."}},getLinks:{name:"getLinks",params:[{name:"address",type:"address"},{name:"flags",type:"integer",optional:["rfd","hs485d"],bitmask:{1:"GL_FLAG_GROUP",2:"GL_FLAG_SENDER_PARAMSET",4:"GL_FLAG_RECEIVER_PARAMSET"}}],returns:"Array",help:{de:"Diese Methode gibt alle einem logischen Kanal oder Gerät zugeordneten Kommunikationsbeziehungen zurück.<br>Der Parameter address ist die Kanal- oder Geräteadresse des logischen Objektes, auf das sich die Abfrage bezieht. Bei address==&quot;&quot; werden alle Kommunikationsbeziehungen des gesamten Schnittstellenprozesses zurückgegeben.<br>Der Parameter flags ist ein bitweises oder folgender Werte:<ul><li>GL_FLAG_GROUP Wenn address einen Kanal bezeichnet, der sich in einer Gruppe befindet, werden die Kommunikationsbeziehungen für alle Kanäle der Gruppe zurückgegeben.</li><li>GL_FLAG_SENDER_PARAMSET Das Feld SENDER_PARAMSET des Rückgabewertes wird gefüllt. </li><li>GL_FLAG_RECEIVER_PARAMSET Das Feld RECEIVER_PARAMSET des Rückgabewertes wird gefüllt.</li></ul>flags ist optional. Defaultwert ist 0x00."}},getMetadata:{name:"getMetadata",params:[{name:"object_id",type:"string"},{name:"data_id",type:"string"}],returns:"Variant",help:{de:"Diese Methode gibt ein Metadatum zu einem Objekt zurück.<br><b>object_id</b> ist die Id des Metadaten-Objekts. Üblicherweise ist dies die Seriennummer eines Gerätes oder Kanals.<br><b>data_id</b> ist die Id des abzufragenden Metadatums. Diese Id kann frei gewählt werden. Der Rückgabewert entspricht in Datentyp und Wert der zuvor an setMetadata() als Parameter value übergebenen Variablen. "}},getAllMetadata:{name:"getAllMetadata",params:[{name:"object_id",type:"string"}],returns:"Struct",help:{de:"Diese Methode gibt alle zuvor gesetzten Metadaten zu einem Objekt zurück.<br><b>object_id</b> ist die Id des Metadaten-Objekts. Üblicherweise ist dies die Seriennummer eines Gerätes oder Kanals. Durch Übergabe einer beliebigen Id können aber auch eigene Metadaten-Objekte angelegt werden.<br>Der Rückgabewert ist ein Struct, der zu jedem zuvor gesetzten Metadatum ein Feld enthält. Der Feldname ist der zuvor an setMetadata() als Parameter data_id übergebene Wert. Der Wert des Feldes entspricht in Datentyp und Wert der zuvor an setMetadata() als Parameter value übergebenen Variablen. "}},getParamset:{name:"getParamset",params:[{name:"address",type:"address"},{name:"paramset_key",type:"string"},{name:"mode",type:"integer",optional:["rfd"]}],returns:"",help:{de:"Mit dieser Methode wird ein komplettes Parameter-Set für ein logisches Gerät gelesen. Der Parameter address ist die Addresses eines logischen Gerätes. Der Parameter paramset_key ist „MASTER“, „VALUES“ oder die Adresse eines Kommunikationspartners für das entsprechende Link-Parameter-Set (siehe getLinkPeers).<br>Dem optionalen Parameter mode können folgende Werte übergeben werden (nur rfd):<ul><li>0 default: Keien Auswirkung, die Funktion verhält sicht wie der Aufruf ohne mode</li><li>1 UndefinedValues: Jeder Eintrag innerhalb des zurückgelieferten Paramset ins eine Struktur mit folgendem Aufbau:<br>„UNDEFINED“(Boolean) Flag ob der angeforderte Wert initial gesetzt wurde und somit wahrscheinlich nicht der Realität entspricht oder ob der Wert von einem Gerät empfangen wurde, true = Wert wurde initial gesetzt und noch nicht verändert, false = der Wert wurde neu gesetzt <br>„VALUE“(ValueType) Wert des angeforderten Parameter.<br>UndefindeValues kann nur für Parameter aus dem Parameterset „VALUES“ abgefragt werden. Bei HomeMatic IP gibt es für bestimmte Geräte zusätzlich den paramset_type„SERVICE“, welche Geräte dies sind, ist der jeweiligen DeviceDescription zu entnehmen.Ebenso ist dieses Parameter Set kanalübergreifend, so dass es über die XML-RPCSchnittstellefür alle Kanäle abgefragt werden kann, aber immer dieselben Parameterzurückliefert.<br>Hinweis: Diese Parameter werden bei jeder Anfrage direkt vom Gerät abgefragt, deshalbsollten sie wegen der DutyCycle Belastung nicht sehr häufig abgefragt werden."}},getParamsetDescription:{name:"getParamsetDescription",params:[{name:"address",type:"address"},{name:"paramset_type",type:"paramset_type"}],returns:"",help:{de:"Mit dieser Methode wird die Beschreibung eines Parameter-Sets ermittelt. Der Parameter address ist die Adresse eines logischen Gerätes (z.B. von listDevices zurückgegeben). Der Parameter paramset_type ist „MASTER“, „VALUES“ oder „LINK“.Bei HomeMatic IP gibt es für bestimmte Geräte zusätzlich den paramset_typeSERVICE, welche Geräte dies sind, ist der jeweiligen DeviceDescription zu entnehmen.Ebenso ist dieses Parameter Set kanalübergreifend, so dass es über die XML-RPCSchnittstellefür alle Kanäle abgefragt werden kann, aber immer dieselben Parameter zurückliefert. "}},getParamsetId:{name:"getParamsetId",params:[{name:"address",type:"address"},{name:"type",type:"string"}],returns:"",help:{de:"Diese Methode gibt die Id eines Parametersets zurück. Diese wird verwendet, um spezialisierte Konfigurationsdialoge (Easymode) den Parametersets zuzuordnen."}},getServiceMessages:{name:"getServiceMessages",params:[],returns:"",help:{de:"Diese Methode gibt eine Liste aller vorhandenen Servicemeldungen in Form eines Arrays zurück."}},getValue:{name:"getValue",params:[{name:"address",type:"device_address"},{name:"value_key",type:"string"},{name:"mode",type:"integer",optional:["rfd"]}],returns:"",help:{de:"Mit dieser Methode wird ein einzelner Wert aus dem Parameter-Set „VALUES“ gelesen. Der Parameter address ist die Addresse eines logischen Gerätes. Der Parameter value_key ist der Name des zu lesenden Wertes. Die möglichen Werte für value_key ergeben sich aus der ParamsetDescription des entsprechenden Parameter-Sets „VALUES“.<br>Dem Parameter mode können folgende Werte übergeben werden:<ul><li>0 default: Keien Auswirkung, die Funktion verhält sicht wie der Aufruf ohne mode</li><li>1 UndefinedValues: Es wird ein Struktur zurückgeliefert die folgenden Aufbau hat:<br>„UNDEFINED“(Boolean) Flag ob der angeforderte Wert initial gesetzt wurde und somit wahrscheinlich nicht der Realität entspricht oder ob der Wert von eimen Gerät empfangen wurde, true = Wert wurde initial gesetzt und noch nicht verändert, false = der Wert wurde neu gesetzt<br>„VALUE“(ValueType) Wert des angeforderten Parameter.</li></ul><br>UndefindeValues kann nur für Parameter aus dem Parameterset „VALUES“ abgefragt werden die mit OPERATIONS = Read gekenzeichnet sind."}},getVersion:{name:"getVersion",params:[],returns:"",help:{de:"Liefert die Version des BidCoS-Service."}},listBidcosInterfaces:{name:"listBidcosInterfaces",params:[],returns:"",help:{de:"Diese Methode gibt eine Liste aller vorhandenen BidCoS-Interfaces in Form eines Arrays von Structs zurück"}},listDevices:{name:"listDevices",params:[],returns:"",help:{de:"Diese Methode gibt alle dem Schnittstellenprozess bekannten Geräte in Form von Gerätebeschreibungen zurück."}},listReplaceableDevices:{name:"listReplaceableDevices",params:[{name:"newDeviceAddress",type:"device_address"}],returns:"",help:{de:"Mit dieser Funktionen kann eine Liste der Geräte angefordert werden die durch das übergebene Gerät ersetzt werden können.<br>Über den Parameter newDeviceAddress wird die Adresse des neuen Geräts übergeben für die die möglichen Tauschpartner ermittelt werden sollen."}},listTeams:{name:"listTeams",params:[],returns:"",help:{de:"Diese Methode gibt alle dem Schnittstellenprozess bekannten Teams in Form von Gerätebeschreibungen zurück."}},logLevel:{name:"logLevel",params:[{name:"level",type:"integer",optional:["rfd","hs485d"],values:{0:"LOG_ALL",1:"LOG_DEBUG",2:"LOG_INFO",3:"LOG_NOTICE",4:"LOG_WARNING",5:"LOG_ERROR",6:"LOG_FATAL_ERROR"}}],returns:"",help:{de:"Diese Methode gibt den aktuellen Log-Level zurück bzw. setzt diesen."}},ping:{name:"ping",params:[{name:"callerId",type:"string"}],returns:"bool",help:{de:"Beim Aufruf dieser Funktion wird ein Event (im Folgenden PONG genannt) erzeugt und an alle registrierten Logikschichten versandt. Da das PONG Event an alle registrierten Logikschichten (wie bei allen anderen Events auch) verschickt wird, muss in einer Logikschicht damit gerechnet werden, ein PONG Event zu empfangen ohne zuvor ping aufgerufen zu haben. Der Parameter callerId ist vom Aufrufer zu übergeben und wird als Wert des PONG Events verwendet. Der Inhalt des String ist unerheblich. Tritt während der Verarbeitung keine Exception auf, so wird von der Methode true zurückgegeben. Das PONG Event wird über die event Methode der Logikschicht ausgeliefert. Die Adresse ist dabei immer „CENTRAL“, der key lautet „PONG“ und der Wert ist die im ping Aufrufübergebene callerId"}},putParamset:{name:"putParamset",params:[{name:"address",type:"address"},{name:"paramset_key",type:"string"},{name:"set",type:"paramset"}],returns:"",help:{de:"Mit dieser Methode wird ein komplettes Parameter-Set für ein logisches Gerät geschrieben. Der Parameter address ist die Addresses eines logischen Gerätes. Der Parameter paramset_key ist „MASTER“, „VALUES“ oder die Adresse eines Kommunikationspartners für das entsprechende Link-Parameter-Set (siehe getLinkPeers). Der Parameter set ist das zu schreibende Parameter-Set. In set nicht vorhandene Member werden einfach nicht geschrieben und behalten ihren alten Wert.<br>Bei HomeMatic IP kann address auch die spezielle Adresse ALL_SMOKE_DETECTORS sein, welche für die Übertragung über Funk nicht eine Geräteadresse sondern die Multicast Adresse (0xF00005) für alle Rauchmelder verwendet und somit auch alle in Funkreichweite befindlichen Rauchmelder des Funknetzwerkes diesen ausführen sollten."}},removeLink:{name:"removeLink",params:[{name:"sender",type:"device_address"},{name:"receiver",type:"device_address"}],returns:"",help:{de:"Diese Methode löscht eine Kommunikationsbeziehung zwischen zwei Geräten. Die Parameter sender und receiver bezeichnen die beiden Kommunikationspartner deren Kommunikationszuordnung gelöscht werden soll."}},replaceDevice:{name:"replaceDevice",params:[{name:"oldDeviceAddress",type:"device_address"},{name:"newDeviceAddress",type:"device_address"}],returns:"",help:{de:"Mit dieser Funktion kann ein altes gegen ein neues Gerät ausgetauscht werden. Alle direkten Geräteverknüpfungen und Konfigurationen werden auf das neue Gerät kopiert und das alte Gerät gelöscht. Die Beiden Geräte müssen hinsichtlich ihrer Funktionalität kompatibel sein. Mit der Methode listReplaceableDevice() kann eine List kompatibeler Geräte abgefragt werden. Das neue Gerät muss an dem Schnittstellenprozess angemeldet sein und darf noch nicht in Verknüpfungen verwendet werden. Über die Parameter oldDeviceAddress und newDeviceAddress wird der Methode die Adresse des alten Gerätes und des neuen Gerätes übergeben. Der Rückgabewert ist true wenn der Tausch erfolgreich war, ansonsten false"}},reportValueUsage:{name:"reportValueUsage",params:[{name:"address",type:"channel_address"},{name:"value_id",type:"string"},{name:"ref_counter",type:"integer"}],returns:"",help:{de:"Diese Methode teilt dem Interfaceprozess in ref_counter mit, wie oft der Wert value_id des Kanals address innerhalb der Logikschicht (z.B. in Programmen) verwendet wird. Dadurch kann der Interfaceprozess die Verbindung mit der entsprechenden Komponente herstellen bzw. löschen. Diese Funktion sollte bei jeder Änderung aufgerufen werden.<br>Der Rückgabewert ist true, wenn die Aktion sofort durchgeführt wurde. Er ist false, wenn die entsprechende Komponente nicht erreicht werden konnte und vom Benutzer zunächst in den Config-Mode gebracht werden muss. Der Interfaceprozess hat dann aber die neue Einstellung übernommen und wird sie bei nächster Gelegenheit automatisch an die Komponente übertragen. In diesem Fall ist dann auch der Wert CONFIG_PENDING im Kanal MAINTENANCE der Komponente gesetzt."}},restoreConfigToDevice:{name:"restoreConfigToDevice",params:[{name:"address",type:"device_address"}],returns:"",help:{de:"Diese Methode überträgt alle zu einem Gerät in der CCU gespeicherten Konfigurationsdaten erneut an das Gerät."}},rssiInfo:{name:"rssiInfo",params:[],returns:"",help:{de:"Gibt ein zweidimensionales assoziatives Array zurück, dessen Schlüssel die Geräteadressen sind. Die Felder des assoziativen Arrays sind Tupel, die die Empfangsfeldstärken zwischen beiden Schlüsselgeräten für beide Richtungen in dbm angeben. ein Wert von 65536 bedeutet, dass keine Informationen vorliegen.<ul><li>Rückgabewert[<Gerät 1>][<Gerät 2>][0] Empfangsfeldstärke an Gerät 1 für Sendungen von Gerät 2</li><li>Rückgabewert[<Gerät 1>][<Gerät 2>][1] Empfangsfeldstärke an Gerät 2 für Sendungen von Gerät 1</li></ul>"}},searchDevices:{name:"searchDevices",params:[],returns:"",help:{de:"Diese Methode durchsucht den Bus nach neuen Geräten und gibt die Anzahl gefundener Geräte zurück. Die neu gefundenen Geräte werden mit newDevices der Logikschicht gemeldet."}},setBidcosInterface:{name:"setBidcosInterface",params:[{name:"device_address",type:"device_address"},{name:"interface_address",type:"interface_address"},{name:"roaming",type:"boolean"}],returns:"",help:{de:"Diese Methode setzt das für die Kommunikation mit dem durch device_address spezifizierten Gerät verwendete Bidcos-Interface. Die Seriennummer des in Zukunft für die Kommunikation mit diesem Gerät zu verwendenden Interfaces wird in interface_address übergeben. Ist der Parameter roaming gesetzt, so wird die Interfacezuordnung für das Gerät automatisch in Abhängigkeit von der Empfangsfeldstärke angepasst. Das ist für nicht ortsfeste Geräte wie Fernbedienungen sinnvoll."}},setInstallMode:{name:"setInstallMode",params:[{name:"on",type:"boolean"},{name:"time",type:"integer",optional:["rfd"]},{name:"mode",type:"integer",optional:["rfd"]}],returns:"",help:{de:"Diese Methode aktiviert und deaktiviert den Installations-Modus, in dem neue Geräte an der HomeMatic-CCU angemeldet werden können.<br>Der Parameter on bestimmt, ob der Installations-Modus aktiviert oder deaktiviert werden soll.<br>Der Parameter time bestimmt die Zeit in Sekunden die der Installations-Modus aktiviert ist<br>Der Parameter mode bestimmt die Art des Installations-Modus:<ul><li>1 = Normaler Installations-Modus</li><li>2 = Während des Anlernens werden in den Parametersets „MASTER“ default Parameter gesetzt und alle bestehenden Verknüpfungen werden gelöscht.</li></ul>"}},setInterfaceClock:{name:"setInterfaceClock",params:[{name:"utcSeconds",type:"integer"},{name:"offsetMinutes",type:"integer"}],returns:"",help:{de:"Setzt die UTC Zeit für alle Interfaces, die dies benötigen.<br>Mit dem Parameter utcSeconds werden die Sekunden seti 01.01.1970 00:00 Uhr (UTC) gesetzt.<br>Über den Parameter offsetMinutes wird der Offset in Minuten entsprechend der jeweiligen Zeitzone übergeben.<br>Der Rückgabewert der Methode ist false im Fehlerfall, ansonsten true."}},setLinkInfo:{name:"setLinkInfo",params:[{name:"sender",type:"channel_address"},{name:"receiver",type:"channel_address"},{name:"name",type:"string"},{name:"description",type:"string"}],returns:"",help:{de:"Diese Methode ändert die beschreibenden Texte einer Kommunikationsbeziehung. Die Spezifikation Parameter sender und receiver bezeichnen die beiden zu verknüpfenden Partner. Die Parameter name und description beschreiben die Verknüpfung textuell."}},setMetadata:{name:"setMetadata",params:[{name:"object_id",type:"string"},{name:"data_id",type:"string"},{name:"value",type:"variant"}],returns:"void",help:{de:"Diese Methode setzt ein Metadatum zu einem Objekt.<br><b>object_id</b> ist die Id des Metadaten-Objekts. Üblicherweise ist dies die Seriennummer eines Gerätes oder Kanals. Durch Übergabe einer beliebigen Id können aber auch eigene Metadaten-Objekte angelegt werden. <br><b>data_id</b> ist die Id des zu setzenden Metadatums. Diese Id kann frei gewählt werden. <br><b>value</b> ist eine beliebige Variable. Diese wird gespeichert und kann später mittels getMetadata() und getAllMetadata() wieder abgefragt werden."}},setRFLGWInfoLED:{name:"setRFLGWInfoLED",params:[{name:"mode",type:"integer",optional:["rfd"],values:{0:"OFF",1:"ON",2:"FLASH_SLOW",3:"FLASH_FAST"}}],returns:"",help:{de:"Steuert die LED von verbundenen LAN Gateways (HMLGW2) an."}},setTeam:{name:"setTeam",params:[{name:"channel_address",type:"channel_address"},{name:"team_address",type:"team_address"}],returns:"",help:{de:"Diese Methode fügt den Kanal channel_address zum Team team_address hinzu. Bei team_address==““ wird der Kanal channel_address seinem eigenen Team zugeordnet. Dabei muss team_address entweder leer sein (““) oder eine Seriennummer eines existierenden Teams enthalten. Teams werden dabei je nach Bedarf erzeugt und gelöscht."}},setTempKey:{name:"setTempKey",params:[{name:"passphrase",type:"string"}],returns:"",help:{de:"Diese Methode ändert den von der CCU verwendeten temporären AES-Schlüssel. Der temporäre AES-Schlüssel wird verwendet, um ein Gerät anzulernen, in dem ein anderer Schlüssel gespeichert ist als der Schlüssel der CCU."}},setValue:{name:"setValue",params:[{name:"address",type:"channel_address"},{name:"value_key",type:"value_key"},{name:"value",type:"mixed"}],returns:"",help:{de:"Mit dieser Methode wird ein einzelner Wert aus dem Parameter-Set „VALUES“ geschrieben. Der Parameter address ist die Addresse eines logischen Gerätes. Der Parameter value_key ist der Name des zu schreibenden Wertes. Die möglichen Werte für value_key ergeben sich aus der ParamsetDescription des entsprechenden Parameter-Sets „VALUES“. Der Parameter value ist der zu schreibende Wert.<br>Bei HomeMatic IP kann address auch die spezielle Adresse ALL_SMOKE_DETECTORS sein, welche für die Übertragung über Funk nicht eine Geräteadresse sondern die Multicast Adresse (0xF00005) für alle Rauchmelder verwendet und somit auch alle in Funkreichweite befindlichen Rauchmelder des Funknetzwerkes diesen ausführen sollten."}},"system.listMethods":{name:"system.listMethods",params:[],returns:"",help:{}},"system.methodHelp":{name:"system.methodHelp",params:[{name:"method",type:"string"}],returns:"",help:{}},updateFirmware:{name:"updateFirmware",params:[{name:"device",type:"device_address"}],returns:"",help:{de:"Diese Methode führt ein Firmware-Update für das in device angegebene Gerät durch. Das Gerät wird durch seine Seriennummer spezifiziert. Der Rückgabewert gibt an, ob das Firmware-Update erfolgreich war."}},installFirmware:{name:"installFirmware",params:[{name:"device",type:"device_address"}],returns:"boolean",help:{de:"Mit dieser Methode teilt die Logikschicht dem Schnittstellenprozess mit, dass ein Gerät die über Background OTAU aufgespielte Firmware aktiveren soll."}},setInstallModeWithWhitelist:{name:"setInstallModeWithWhitelist",params:[{name:"on",type:"boolean"},{name:"time",type:"integer"},{name:"whitelistValues",type:"RpcStruct[]"}],returns:"void",help:{de:"Mit dieser Methode teilt die Logikschicht dem Schnittstellenprozess mit, dass ein oder mehrere Geräte über die Whitelist für die Inkludierung freigeschaltet werden sollen für den angegebenen Zeitraum. <ul><li>on, gibt an ob die Install Mode aktiviert oder deaktiviert werden soll. Wenn der Wert „false“ ist haben die weiteren Parameter keine Auswirkung auf die Aktion. </li><li> time, gibt die Zeit in Sekunden an, nach der der Install Mode deaktiviert werden soll. Der Defaultwert ist 30 Sekunden. </li><li>whiteListValues, gibt die Geräte an, die inkludiert werden sollen, dies ist ein Array aus RPC Structs, welche folgende Daten haben: <ul><li> ADDRESS, gibt die SGTIN bzw. ID des Gerätes an, das inkludiert werden soll. </li><li> KEY_MODE, gibt den Typen des Keys an, der für die Inklusion verwendet werden soll. Dieser Wert ist ein String mit folgenden unterstützten Werten: <ul><li>LOCAL </li><li>MASTER und DEFAULT werden zur Zeit vom crRFD noch nicht unterstützt</li></ul> </li><li> KEY, gibt den zu verwendenden Geräteschlüssel an, der bei der Inklusion verwendet werden soll. Dieser Wert ist der Hexstring des 16 Byte langen Schlüssels </li></ul></li></ul> Wenn der KEY_MODE oder KEY nicht angegeben ist wird der Master Key vom Key-Server für die Inklusion versucht zu nutzten. Die Whitelist wird beim Ablauf des Install Mode zurückgesetzt."}}},wc={suppressServiceMessages:{name:"suppressServiceMessages",params:[{name:"address",type:"channel_address"},{name:"parameter",type:"value_key"},{name:"suppress",type:"bool"}],returns:"void",help:{de:"Unterdrückt die Servicemeldung eines Parameters mit dem Service-Flag (nur HmIP). Der Parameter address ist die Kanaladresse, parameter der Name eines Parameters mit dem Service-Flag in seiner Beschreibung oder „“ für alle Service-Parameter des Kanals. Mit suppress=true meldet die Schnittstelle einen Wert, der keine Meldung auslöst (UNREACH wird immer false); suppress=false hebt die Unterdrückung wieder auf.",en:'Suppresses the service message of a parameter with the Service flag (HmIP only). The parameter address is the channel address, parameter the name of a parameter carrying the Service flag in its description, or "" for every service parameter of the channel. With suppress=true the interface reports a value that raises no message (UNREACH is always false); suppress=false lifts the suppression again.'}},getSuppressedServiceMessages:{name:"getSuppressedServiceMessages",params:[{name:"address",type:"channel_address"}],returns:"String[]",help:{de:"Gibt die Namen der Parameter zurück, deren Servicemeldungen für den Kanal address zurzeit unterdrückt sind (nur HmIP, siehe suppressServiceMessages).",en:"Returns the names of the parameters whose service messages are currently suppressed for the channel address (HmIP only, see suppressServiceMessages)."}}};function r_(r){return Object.prototype.hasOwnProperty.call(Sc,r)?Sc[r]:Object.prototype.hasOwnProperty.call(wc,r)?wc[r]:void 0}function s_(r){return{name:r,params:[],returns:"",help:{}}}new TextDecoder("utf-8",{fatal:!0});const a_={WRITE:2};function Jr(r){return(r.OPERATIONS&a_.WRITE)!==0}function Us(r){if(!r)return;const e=r.VALUE_LIST;return Array.isArray(e)?e:void 0}function uh(r,e){const n=Us(r)?.indexOf(e)??-1;return n===-1?void 0:n}function nr(r,e){const n=r[e];if(typeof n=="number")return n;if(typeof n=="string"&&r.TYPE==="ENUM")return uh(r,n)}function i_(r,e){if(!(typeof e!="number"||!r.SPECIAL))return r.SPECIAL.find(n=>n.VALUE===e)}function o_(r,e){return i_(r,e)!==void 0}function xd(r){return Object.keys(r).sort((e,n)=>{const s=r[e]?.TAB_ORDER??Number.MAX_SAFE_INTEGER,a=r[n]?.TAB_ORDER??Number.MAX_SAFE_INTEGER;return s!==a?s-a:e<n?-1:1})}const fh="100%",l_="�C",d_="°C",c_="°C";function ho(r){const e=r?.UNIT;return e===void 0||e===""||e==='""'?"":e===fh?"%":e===l_||e===d_?c_:e}function u_(r){return r?.UNIT===fh}function hh(r){return u_(r)?100:1}function fa(r,e){if(r!==void 0)return mh(r*hh(e))}function kc(r,e){if(r!==void 0)return mh(r/hh(e))}function mh(r){return Number.isFinite(r)?Number.parseFloat(r.toPrecision(10)):r}const f_=[.1,1,5,10,60,300,600,3600],Ac=["BASE_100_MS","BASE_1_S","BASE_5_S","BASE_10_S","BASE_1_M","BASE_5_M","BASE_10_M","BASE_1_H"],h_=31,m_="NOT_USED";function vh(r){return r?.SPECIAL?.find(e=>e.ID===m_)?.VALUE}function Dd(r){return Math.round(r*10)/10}const v_={"10MS":.01,"100MS":.1,S:1,"1S":1,"5S":5,"10S":10,M:60,"1M":60,"5M":300,"10M":600,H:3600,"1H":3600,D:86400},Tc="_BASE",p_="_FACTOR",Rc="_UNIT",g_="_VALUE",xc="_TIME";function wo(r){const e=[];for(const[n,s]of Object.entries(r)){const a=E_(r,n,s)??y_(r,n,s);a&&e.push(a)}return e}function Id(r,e){return b_(r[e.unitParam],r[e.countParam],e)}function b_(r,e,n){const s=__(r,n),a=s===void 0?void 0:n.units[s],i=typeof e=="number"?e:Number.NaN;if(!(s===void 0||a===void 0||!Number.isInteger(i)||i<0||i>n.maxCount))return{seconds:Dd(a.seconds*i),unitIndex:s,unitSeconds:a.seconds,count:i,maximal:s===n.units.length-1&&i===n.maxCount}}function __(r,e){if(typeof r=="number"&&Number.isInteger(r)&&r>=0&&r<e.units.length)return r;if(typeof r=="string"){const n=e.units.findIndex(s=>s.name===r);return n===-1?void 0:n}}function ph(r,e){if(!Number.isFinite(r)||r<0||e.units.length===0)return;let n,s=Number.POSITIVE_INFINITY;for(const[a,i]of e.units.entries()){const o=Math.min(e.maxCount,Math.max(0,Math.round(r/i.seconds))),l=Dd(i.seconds*o),f=Math.abs(l-r);f<s&&(s=f,n={seconds:l,unitIndex:a,unitSeconds:i.seconds,count:o,maximal:a===e.units.length-1&&o===e.maxCount,exact:f===0})}return n}function Nd(r,e){const n=ph(r,e);if(n)return{[e.unitParam]:n.unitIndex,[e.countParam]:n.count}}function gh(r){const e=r.units.at(-1);return e===void 0?0:Dd(e.seconds*r.maxCount)}function E_(r,e,n){if(!e.endsWith(Tc))return;const s=e.slice(0,-Tc.length),a=`${s}${p_}`,i=r[a];if(!i)return;const o=bh(Us(n)??Ac,l=>f_[Ac.indexOf(l)]);if(o)return{name:s.endsWith(xc)?s.slice(0,-xc.length):s,kind:"base-factor",unitParam:e,countParam:a,units:o,maxCount:nr(i,"MAX")??h_}}function y_(r,e,n){if(!e.endsWith(Rc))return;const s=e.slice(0,-Rc.length),a=`${s}${g_}`,i=r[a],o=Us(n);if(!i||!o||o.length===0)return;const l=nr(i,"MAX"),f=bh(o,p=>v_[p]);if(!(l===void 0||!f))return{name:s,kind:"unit-value",unitParam:e,countParam:a,units:f,maxCount:l}}function bh(r,e){const n=[];for(const s of r){const a=e(s);if(a===void 0)return;n.push({name:s,seconds:a})}return n}const S_=new Set;function w_(r){return S_.has(r)?"name":"index"}function Il(r,e,n={}){const s=Rd(r)?r.explicitDouble:r;if(!e)return typeof s=="boolean"||typeof s=="string"?s:String(s);switch(e.TYPE){case"ACTION":case"BOOL":return k_(s);case"FLOAT":{const a=Cd(Eh(Number.parseFloat(String(s))),e,n);return n.explicitDouble===!1?a:{explicitDouble:a}}case"ENUM":return A_(s,e,n);case"INTEGER":return _h(s,e,n);case"STRING":return String(s);default:return String(s)}}function k_(r){if(r==="false")return!1;if(typeof r=="string"){const e=Number(r);return Number.isNaN(e)?!0:e!==0}return!!r}function A_(r,e,n){const s=Us(e);if(!s)return _h(r,e,n);if(typeof r=="string"){const i=uh(e,r);if(i!==void 0)return n.enumAs==="name"?r:i}const a=T_(r);return a===void 0?String(r):n.enumAs==="name"?s[a]??String(r):Cd(a,e,n)}function T_(r){if(typeof r=="boolean")return Number(r);const e=Number.parseInt(String(r),10);return Number.isFinite(e)?e:void 0}function _h(r,e,n){return typeof r=="boolean"?Number(r):Cd(R_(r),e,n)}function R_(r){return Eh(Number.parseInt(String(r),10))}function Eh(r){return Number.isFinite(r)?r:0}function Cd(r,e,n){if(n.clamp!==!0)return r;const s=typeof e.MIN=="number"?e.MIN:void 0,a=typeof e.MAX=="number"?e.MAX:void 0;return s!==void 0&&r<s?s:a!==void 0&&r>a?a:r}const x_=255;function $o(r,e,n,s={}){if(!n)return[Sr(r,"unknown-parameter",`${r} is not part of this paramset`)];if(s.requireWritable!==!1&&!Jr(n))return[Sr(r,"not-writable",`${r} is read-only (OPERATIONS ${n.OPERATIONS})`)];const a=Rd(e)?e.explicitDouble:e;switch(n.TYPE){case"BOOL":case"ACTION":return typeof a=="boolean"?[]:[Sr(r,"wrong-type",`${r} expects a boolean, got ${gi(a)}`)];case"INTEGER":return Dc(r,a,n,!0);case"FLOAT":return Dc(r,a,n,!1);case"ENUM":return D_(r,a,n);case"STRING":return I_(r,a,s);default:return typeof a=="object"?[Sr(r,"wrong-type",`${r} expects a scalar, got ${gi(a)}`)]:[]}}function Dc(r,e,n,s){return typeof e!="number"?[Sr(r,"wrong-type",`${r} expects a number, got ${gi(e)}`)]:Number.isFinite(e)?s&&!Number.isInteger(e)?[Sr(r,"wrong-type",`${r} expects a whole number, got ${e}`)]:o_(n,e)?[]:yh(r,e,n):[Sr(r,"not-finite",`${r} is ${e}, which XML-RPC cannot encode`)]}function D_(r,e,n){const s=Us(n);return typeof e=="string"?s?s.includes(e)?[]:[Sr(r,"not-in-value-list",`${r} does not accept ${e}`,s.join(", "))]:[Sr(r,"not-in-value-list",`${r} has no VALUE_LIST to resolve ${e} against`)]:typeof e!="number"||!Number.isInteger(e)?[Sr(r,"wrong-type",`${r} expects an enum name or index, got ${gi(e)}`)]:s&&(e<0||e>=s.length)?[Sr(r,"not-in-value-list",`${r} has no value at index ${e}`,s.length-1)]:yh(r,e,n)}function I_(r,e,n){if(typeof e!="string")return[Sr(r,"wrong-type",`${r} expects a string, got ${gi(e)}`)];const s=n.maxStringLength??x_;return e.length>s?[Sr(r,"string-too-long",`${r} is longer than ${s} characters`,s)]:[]}function yh(r,e,n){const s=nr(n,"MIN"),a=nr(n,"MAX");return s!==void 0&&e<s?[Sr(r,"below-min",`${r} is below its minimum of ${s}`,s)]:a!==void 0&&e>a?[Sr(r,"above-max",`${r} is above its maximum of ${a}`,a)]:[]}function Sr(r,e,n,s){return s===void 0?{param:r,code:e,message:n}:{param:r,code:e,message:n,limit:s}}function gi(r){return r===null?"null":typeof r}function N_(r,e,n,s={}){const a={},i=[],o=[],l=[],f=s.writeAll===!0,p=s.enumAs===void 0?{}:{enumAs:s.enumAs},_=s.maxStringLength===void 0?{}:{maxStringLength:s.maxStringLength};for(const g of C_(e,n,f)){const k=n[g];if(!k){l.push(...$o(g,e[g],void 0)),o.push({param:g,reason:"unknown-parameter"});continue}const E=Object.prototype.hasOwnProperty.call(e,g);if(!Jr(k)){E&&l.push(...$o(g,e[g],k)),o.push({param:g,reason:"not-writable"});continue}const b=E?e[g]:r[g]??k.DEFAULT,w=Il(b,k,p);if(!f&&P_(r,g,b,k,p)){o.push({param:g,reason:"unchanged"});continue}const x=$o(g,w,k,_);if(x.length>0){l.push(...x),o.push({param:g,reason:"invalid"});continue}a[g]=w,i.push(g)}return{values:a,changed:i,skipped:o,problems:l}}function C_(r,e,n){if(!n)return Object.keys(r);const s=Object.keys(e);for(const a of Object.keys(r))a in e||s.push(a);return s}function P_(r,e,n,s,a){if(!Object.prototype.hasOwnProperty.call(r,e))return!1;const i={...a,explicitDouble:!1};return n_(Il(r[e],s,i),Il(n,s,i))}function M_(r,e,n,s){const a=r.paramsetIdentity(e,n);if(a===void 0)throw new Error(`no paramset identity for ${e} ${n} on ${r.interfaceName}`);const i=[],o=[];for(const l of s??r.all().map(f=>f.ADDRESS)){if(l===e){o.push({address:l,reason:"same-channel",identity:a});continue}if(!r.has(l)){o.push({address:l,reason:"unknown-address"});continue}const f=r.paramsetIdentity(l,n);if(f===void 0){o.push({address:l,reason:"no-identity"});continue}f===a?i.push(l):o.push({address:l,reason:"different-identity",identity:f})}return{identity:a,eligible:i,ineligible:o}}const ci="UI_HINT",vs=0,O_={id:vs,key:"expert",name:{de:"Experte",en:"Expert"},description:{de:"Alle Parameter des Verknuepfungs-Parametersatzes",en:"All link paramset parameters"},params:{}};function L_(r,e){return r!==""?r:"CHANNEL_OPERATION_MODE"in e?"shutter":"blind"}function F_(r,e){let n;return"channelMode"in r?n=e.channelMode===r.channelMode:"deviceType"in r?n=e.deviceType===r.deviceType:"deviceTypeIncludes"in r?n=e.deviceType.includes(r.deviceTypeIncludes):n=e.channel===r.channel,r.not===!0?!n:n}async function G_(r,e,n){const s=r.some(l=>l.when.some(f=>"channelMode"in f));let a;if(s){let l;try{l=await e.channelMode?.()??""}catch{l=""}a=L_(l,n)}const i={deviceType:e.deviceType,channel:e.channel,channelMode:a},o=r.find(l=>l.when.every(f=>F_(f,i)));return{...o===void 0?{}:{branch:o},...a===void 0?{}:{channelMode:a}}}function U_(r,e){for(const n of r.trim().split(/\s+/u)){const s=n.split("="),a=s.length===2?s[1]??"":n;if(a!==""&&Object.prototype.hasOwnProperty.call(e,a))return a}return""}class B_{#e;constructor(e){this.#e=e}async profilesFor(e,n){const s=await this.#e.receiverTypeAliases(),a=Ic(e,s),o=[...(await this.#e.receiverProfiles(a))?.senders[n]??[]];return o.some(l=>l.id===vs)||o.push(O_),o.sort((l,f)=>l.id-f.id)}async linkMetadataFor(e,n){const s=await this.#e.receiverTypeAliases();return(await this.#e.receiverProfiles(Ic(e,s)))?.senderMetadata?.[n]}applyProfile(e,n,s,a={}){const i=a.keepCurrent??!0,o={...n},l=[];for(const[f,p]of Object.entries(e.params)){if(!(f in s)){l.push({param:f,code:"unknown-parameter",message:`profile ${e.key} sets ${f}, which this description does not have`});continue}const _=z_(p,i?n[f]:void 0);if(_===void 0){l.push({param:f,code:"empty-list",message:`profile ${e.key} offers no value for ${f}`});continue}o[f]=_}return ci in s&&(o[ci]=String(e.id)),{values:o,problems:l}}detectProfile(e,n){const s=e[ci],a=s===void 0||s===""?void 0:n.find(l=>String(l.id)===String(s));if(a&&(a.id===vs||Nc(a,e)!==void 0))return a;let i,o;for(const l of[...n].sort((f,p)=>f.id-p.id)){const f=Nc(l,e);f!==void 0&&H_(f,o)&&(o=f,i=l)}return i??a}async masterFormId(e){return U_(e,await this.#e.masterForms())}async masterMetadataFor(e,n,s={},a="",i){const o=(await this.#e.masterMetadata())[e],l=a===""?void 0:(await this.#e.masterForms())[a],f=l?.controls?l:o;let p=f?.controls,_;if(f?.branches&&i){const b=await G_(f.branches,i,n);b.branch&&(p=b.branch.controls),_=b.channelMode}const g=await this.#e.optionPresets(),k=await this.#e.crossValidations(),E=j_(n,o).map(([b,w])=>{const x=g[o?.optionPresets?.[b]??""],D={name:b,description:w,visible:W_(b,o,s)};return x===void 0?D:{...D,preset:x}});return{channelType:e,parameters:E,...p?{controls:p}:{},...l?.internalKey?{internalKey:l.internalKey}:{},..._===void 0?{}:{channelMode:_},problems:k.filter(b=>K_(b,n)).filter(b=>!Y_(b,s)).map(b=>({id:b.id,errorKey:b.errorKey,params:Sh(b)}))}}}function Ic(r,e){let n=r;const s=new Set([n]);let a=e[n];for(;a!==void 0&&!s.has(a);)n=a,s.add(n),a=e[n];return n}function Nc(r,e){let n=0,s=0,a=0;for(const[i,o]of Object.entries(r.params)){if(!(i in e)){a+=1;continue}if(!V_(o,e[i]))return;n+=1,o.kind==="fixed"&&(s+=1)}return n===0?void 0:{present:n,fixed:s,missing:a}}function H_(r,e){return e===void 0?!0:r.present!==e.present?r.present>e.present:r.fixed!==e.fixed?r.fixed>e.fixed:r.missing<e.missing}function V_(r,e){switch(r.kind){case"fixed":return mo(e,r.value);case"list":return r.values.some(n=>mo(e,n));case"range":{const n=Number(e);return e===""||Number.isNaN(n)?!0:n>=r.min&&n<=r.max||n===r.default}}}function z_(r,e){switch(r.kind){case"fixed":return r.value;case"list":return e!==void 0&&r.values.some(n=>mo(e,n))?e:r.default??r.values[0];case"range":{const n=typeof e=="number"?e:Number(e);return Number.isFinite(n)&&n>=r.min&&n<=r.max?n:r.default??r.min}}}function mo(r,e){if(r===e)return!0;if(r===void 0||e===void 0)return!1;if(typeof r=="boolean"||typeof e=="boolean")return!!r==!!e;const n=Number(r),s=Number(e);return!Number.isNaN(n)&&!Number.isNaN(s)?n===s:String(r)===String(e)}function j_(r,e){const n=xd(r),s=new Map((e?.parameterOrder??[]).map((a,i)=>[a,i]));return Object.entries(r).sort(([a],[i])=>{const o=s.get(a),l=s.get(i);return o!==void 0&&l!==void 0?o-l:o!==void 0?-1:l!==void 0?1:n.indexOf(a)-n.indexOf(i)})}function W_(r,e,n){const s=(e?.conditionalVisibility??[]).filter(a=>a.show.includes(r));return s.length===0?!0:s.some(a=>mo(n[a.trigger],a.triggerValue))}function Sh(r){return r.rule==="between"?[r.param,r.minParam,r.maxParam]:[r.paramA,r.paramB]}function K_(r,e){return Sh(r).every(n=>n in e)}function Y_(r,e){if(r.rule==="between"){const a=Number(e[r.param]),i=Number(e[r.minParam]),o=Number(e[r.maxParam]);return!Number.isFinite(a)||!Number.isFinite(i)||!Number.isFinite(o)?!0:a>=i&&a<=o}const n=Number(e[r.paramA]),s=Number(e[r.paramB]);return!Number.isFinite(n)||!Number.isFinite(s)?!0:r.rule==="gte"?n>=s:n<=s}function Xo(r,e){return e===void 0?r:{...r,label:e}}function wh(r,e){const n=new Map(wo(e).map(o=>[o.unitParam,o])),s=[],a=new Set,i=(o,l)=>{a.has(o)||(a.add(o),s.push(l))};for(const o of r??[])if((o.requires??[]).every(l=>l in e))switch(o.kind){case"time":{const l=n.get(`${o.prefix}_BASE`)??n.get(`${o.prefix}_UNIT`);l&&i(`time:${l.name}`,Xo({kind:"time",pair:l,selector:o.selector},o.label));break}case"param":{if(o.param in e){const l=(o.also??[]).filter(p=>p in e),f={kind:"param",param:o.param,also:l,...o.option===void 0?{}:{option:o.option}};i(`param:${o.param}`,Xo(f,o.label))}break}case"subset":{const l={kind:"subset",subsets:o.subsets,...o.names===void 0?{}:{names:o.names}};i(`subset:${o.subsets.join(",")}`,Xo(l,o.label));break}}return s.length>0?s:void 0}function q_(r,e){return wh(r?.controls,e)}function Nl(r,e=[]){const n=new Set;for(const s of r??[])if(s.kind==="time")n.add(s.pair.unitParam),n.add(s.pair.countParam);else if(s.kind==="param"){n.add(s.param);for(const a of s.also)n.add(a)}else for(const a of e)if(s.subsets.includes(a.id))for(const i of a.params)n.add(i);return n}const $_=["CONFIG_PENDING","DUTY_CYCLE","FAULT_REPORTING","LOWBAT","LOW_BAT","SABOTAGE","UNREACH","STICKY_UNREACH","UPDATE_PENDING"],kh="ERROR",X_=["STICKY_UNREACH","SABOTAGE"];function Q_(r){return $_.includes(r)||r.startsWith(kh)}function vo(r){return X_.includes(r)||r.startsWith(kh)}function Z_(r,e){const n=r?.TYPE==="ENUM"?r.VALUE_LIST:void 0;if(n===void 0)return;const s=typeof e=="number"?n[e]:typeof e=="string"&&n.includes(e)?e:"";return s===void 0||s===""?void 0:s}const J_=[{step:1,min:-30,bars:4,label:"Very good (maximum)"},{step:2,min:-40,bars:4,label:"Very good"},{step:3,min:-50,bars:4,label:"Good"},{step:4,min:-60,bars:3,label:"Good (normal operation)"},{step:5,min:-70,bars:3,label:"Sufficient"},{step:6,min:-80,bars:2,label:"Sufficient to weak"},{step:7,min:-90,bars:1,label:"Poor"},{step:8,min:Number.NEGATIVE_INFINITY,bars:0,label:"Critical"}];function po(r){if(!(typeof r!="number"||!Number.isFinite(r))){if(r>-127&&r<0)return r;if(r>1&&r<127)return-r;if(r>-256&&r<-129)return-r-256;if(r>129&&r<256)return r-256}}function e1(r){const e={};for(const[n,s]of Object.entries(r)){const a={};for(const[i,o]of Object.entries(s))a[i]=r1(po(o[0]),po(o[1]));e[n]=a}return e}function t1(r){const e=po(r);if(e!==void 0)return J_.find(n=>e>=n.min)}function Ua(r){const e=r.DESCRIPTION?.trim()??"";return e===""?r.ADDRESS:e}function Cc(r,e){const n=r.INTERFACE??"";if(n==="")return"";const s=e.find(a=>a.ADDRESS===n);return s?Ua(s):n}const Pc=["RSSI_DEVICE","RSSI_PEER"];class n1{#e={};#n;constructor(e={}){this.#n=e.centralAddress}get centralAddress(){return this.#n}setCentralAddress(e){this.#n=e}applyRssiInfo(e){this.#e=e1(e)}applyHmipValue(e,n,s){const a=this.#n,i=po(s);return a===void 0||i===void 0||!Pc.includes(n)?!1:(n==="RSSI_DEVICE"?(this.#t(a,e,{rx:i}),this.#t(e,a,{tx:i})):(this.#t(e,a,{rx:i}),this.#t(a,e,{tx:i})),!0)}applyHmipParamset(e,n){let s=!1;for(const a of Pc){const i=n[a];i!==void 0&&(s=this.applyHmipValue(e,a,i)||s)}return s}get(e,n){return this.#e[e]?.[n]}peersOf(e){return Object.keys(this.#e[e]??{}).sort()}toJSON(){const e={};for(const[n,s]of Object.entries(this.#e))e[n]={...s};return e}bestInterfaceFor(e,n){let s,a=Number.NEGATIVE_INFINITY;for(const i of n){const o=this.get(e,i);o?.tx!==void 0&&o.tx>a&&(a=o.tx,s={address:i,...o})}return s}#t(e,n,s){const a=this.#e[e]??={};a[n]={...a[n],...s}}}function r1(r,e){const n={};return r!==void 0&&(n.rx=r),e!==void 0&&(n.tx=e),n}const Cl=6,Mc=["switch","marginal","unheard","keep","unmeasured","roaming"];function s1(r,e,n,s={}){const a=Math.max(0,s.marginDb??Cl),i=[];for(const o of r){const l=o.INTERFACE??"";if(l===""||(o.PARENT??"")!=="")continue;const f=n.get(o.ADDRESS,l)?.tx,p=n.bestInterfaceFor(o.ADDRESS,e),_=p?.tx!==void 0&&f!==void 0?p.tx-f:void 0;let g;o.ROAMING===!0||o.ROAMING===1?g="roaming":p===void 0?g="unmeasured":p.address===l?g="keep":_===void 0?g="unheard":_<=0?g="keep":g=_>=a?"switch":"marginal",i.push({address:o.ADDRESS,configured:l,configuredTx:f,best:p?.address,bestTx:p?.tx,gain:_,verdict:g})}return i.sort((o,l)=>Mc.indexOf(o.verdict)-Mc.indexOf(l.verdict)||(l.gain??Number.NEGATIVE_INFINITY)-(o.gain??Number.NEGATIVE_INFINITY)||o.address.localeCompare(l.address))}const Ah=8192;class a1{#e=[];#n;constructor(e=Ah){if(!Number.isInteger(e)||e<1)throw new RangeError(`ring buffer capacity must be a positive integer, got ${e}`);this.#n=e}get capacity(){return this.#n}get size(){return this.#e.length}get full(){return this.#e.length===this.#n}push(e){return this.#e.push(e),this.#e.length>this.#n?this.#e.shift():void 0}toArray(){return[...this.#e]}filter(e){return this.#e.filter(n=>e(n))}clear(){this.#e.length=0}}function i1(r,e){return e.interfaceName!==void 0&&r.interfaceName!==e.interfaceName||!Oc(r.address??"",e.address)||!Oc(r.datapoint??"",e.datapoint)?!1:e.text!==void 0&&e.text!==""?`${r.address??""} ${r.datapoint??""} ${String(r.value)}`.toLowerCase().includes(e.text.toLowerCase()):!0}function o1(r,e){return r.filter(n=>i1(n,e))}function Oc(r,e){return e===void 0||e===""?!0:r.toLowerCase().includes(e.toLowerCase())}const Xi=1,Lc=8,Fc=255,ko=32,Gc=16*1024;class kt extends Error{code;detail;constructor(e,n,s){super(n??e),this.name="MetaError",this.code=e,this.detail=s}}const Uc=Object.freeze({room:{name:{de:"Räume",en:"Rooms"},tree:[]},function:{name:{de:"Gewerke",en:"Functions"},tree:[]}});function l1(){return{format:Xi,revision:0,objects:{},enums:{room:{name:{...Uc.room?.name},tree:[]},function:{name:{...Uc.function?.name},tree:[]}}}}const d1=/^[a-z0-9][a-z0-9-]*$/,c1=/^[a-z0-9-]+$/;function Pd(r){const e=r.indexOf(".");if(!(e<=0||e===r.length-1))return{interfaceName:r.slice(0,e),address:r.slice(e+1)}}function u1(r,e){return`${r}.${e}`}function Pl(r){const e=Pd(r);if(!e)throw new kt("invalid-ref",`${r} is not <interface>.<address>`);return e}function pa(r){return r.length<=ko&&d1.test(r)}function Bc(r){if(!pa(r))throw new kt("invalid-id",`${r} is not a valid id`);return r}function Ml(r){return r.length<=ko&&c1.test(r)}function la(r){if(typeof r!="string")throw new kt("invalid-name","a name has to be a string");const e=r.trim();if(e==="")throw new kt("invalid-name","a name may not be empty");if(/[\u0000-\u001f\u007f]/.test(e))throw new kt("invalid-name","a name may not contain control characters");if(Th(e)>Fc)throw new kt("invalid-name",`a name may not be longer than ${String(Fc)} bytes`);return e}function Th(r){return new TextEncoder().encode(r).length}function xa(r){const e=r.split("/"),n=e[0];if(n===void 0||n===""||!pa(n))return;const s=e.slice(1);if(!s.some(a=>!pa(a)))return{enumId:n,ids:s}}function Qi(r,e){return`${r}/${e}`}function f1(r){const e=r.lastIndexOf("/");return e<=0?void 0:r.slice(0,e)}function Ws(r,e){return r===e||r.startsWith(`${e}/`)}function Ks(r,e){let n=r,s;for(const a of e){if(s=n.find(i=>i.id===a),!s)return;n=s.children??[]}return s}function Ii(r,e){const n=[],s=(a,i,o,l)=>{for(const f of a){const p=Qi(i,f.id),_=[...l,f.name];n.push({path:p,node:f,depth:o,trail:_}),s(f.children??[],p,o+1,_)}};return s(e.tree,r,1,[]),n}function Rh(r,e){return new Set(Ii(r,e).map(n=>n.path))}function h1(r){let e=0;const n=(s,a)=>{for(const i of s)e=Math.max(e,a),n(i.children??[],a+1)};return n(r,1),e}function Ol(r){if(h1(r)>Lc)throw new kt("too-deep",`a tree may not be deeper than ${String(Lc)} levels`)}function Ms(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function m1(r){if(!Ms(r))throw new kt("invalid-name","an object has to be an object");const e=la(r.name),n=Ll(r.enums),s=go(r.meta);return r.orphaned===!0?{name:e,enums:n,meta:s,orphaned:!0}:{name:e,enums:n,meta:s}}function Ll(r){if(r==null)return[];if(!Array.isArray(r))throw new kt("unknown-path","enums has to be an array of node paths");const e=[];for(const n of r){if(typeof n!="string"||xa(n)===void 0)throw new kt("unknown-path",`${String(n)} is not a node path`);if(e.includes(n))throw new kt("duplicate-path",`${n} is listed twice`);e.push(n)}return e}function go(r){if(r==null)return{};if(!Ms(r))throw new kt("invalid-id","meta has to be an object of namespaces");for(const e of Object.keys(r))if(!pa(e))throw new kt("invalid-id",`${e} is not a valid meta namespace`);if(Th(JSON.stringify(r))>Gc)throw new kt("invalid-id",`meta may not be larger than ${String(Gc)} bytes`);return r}function v1(r){if(!Ms(r))throw new kt("invalid-id","a node has to be an object");const e=r.id;if(typeof e!="string"||!pa(e))throw new kt("invalid-id",`${String(e)} is not a valid node id`);const n=la(r.name),s=r.icon;if(s!==void 0&&(typeof s!="string"||!Ml(s)))throw new kt("invalid-id",`${JSON.stringify(s)} is not a valid icon name`);const a=xh(r.children);return{id:e,name:n,...typeof s=="string"?{icon:s}:{},...a.length>0?{children:a}:{}}}function xh(r){if(r==null)return[];if(!Array.isArray(r))throw new kt("invalid-id","children has to be an array of nodes");const e=r.map(s=>v1(s)),n=new Set;for(const s of e){if(n.has(s.id))throw new kt("duplicate-id",`${s.id} is used twice among its siblings`);n.add(s.id)}return e}function p1(r,e){if(!pa(r))throw new kt("invalid-id",`${r} is not a valid enum id`);if(!Ms(e))throw new kt("invalid-name",`enum ${r} has to be an object`);const n=Fl(e.name),s=xh(e.tree);return Ol(s),{name:n,tree:s}}function Fl(r){if(!Ms(r))throw new kt("invalid-name","an enum name has to be an object of languages");const e={};for(const[n,s]of Object.entries(r)){if(typeof s!="string")throw new kt("invalid-name",`the ${n} name has to be a string`);e[n]=la(s)}if(e.en===void 0)throw new kt("invalid-name","an enum needs at least an English name");return e}function Gl(r){if(!Ms(r))throw new kt("format-unsupported","a document has to be an object");const e=r.format;if(e!==Xi)throw new kt("format-unsupported",`format ${String(e)} is newer than this implementation reads (${String(Xi)})`);const n=r.revision;if(typeof n!="number"||!Number.isInteger(n)||n<0)throw new kt("format-unsupported","revision has to be an integer of at least 0");const s={},a=r.enums;if(a!=null){if(!Ms(a))throw new kt("unknown-enum","enums has to be an object");for(const[f,p]of Object.entries(a))s[f]=p1(f,p)}const i=Dh(s),o={},l=r.objects;if(l!=null){if(!Ms(l))throw new kt("unknown-object","objects has to be an object");for(const[f,p]of Object.entries(l)){Pl(f);const _=m1(p);for(const g of _.enums)if(!i.has(g))throw new kt("unknown-path",`${f}: ${g} does not exist`,{ref:f,path:g});o[f]=_}}return{format:Xi,revision:n,objects:o,enums:s}}function Dh(r){const e=new Set;for(const[n,s]of Object.entries(r))for(const a of Rh(n,s))e.add(a);return e}function Hc(r,e){return JSON.stringify(Ul(r),void 0,e)}function g1(r,e){return Hc({...r,revision:0})===Hc({...e,revision:0})}function Ul(r){if(Array.isArray(r))return r.map(e=>Ul(e));if(Ms(r)){const e={};for(const n of Object.keys(r).sort())e[n]=Ul(r[n]);return e}return r}function Vc(r,e){const n=e.slice(0,-1),s=e[e.length-1],i=(n.length===0?r:Ks(r,n)?.children??[]).findIndex(o=>o.id===s);return i===-1?void 0:i}function Bl(r,e,n,s){if(e.length===0)return _1(r,n,s);const[a,...i]=e;return r.map(o=>o.id===a?{...o,children:Bl(o.children??[],i,n,s)}:o)}function Hl(r,e){const[n,...s]=e;return n===void 0?r:s.length===0?r.filter(a=>a.id!==n):r.map(a=>{if(a.id!==n)return a;const i=Hl(a.children??[],s);return i.length===0?b1(a):{...a,children:i}})}function b1(r){return{id:r.id,name:r.name,...r.icon===void 0?{}:{icon:r.icon}}}function _1(r,e,n){const s=[...r],a=n===void 0?s.length:Math.max(0,Math.min(s.length,Math.trunc(n)));return s.splice(a,0,e),s}const E1=1e3;let y1=class Ih{#e;#n;#t;#s=[];#a;#r;#i;constructor(e={}){const n=e.document??l1();this.#e=n.revision,this.#n=new Map(Object.entries(n.objects)),this.#t=new Map(Object.entries(n.enums)),this.#a=e.eventHistory??E1,this.#r=n.revision,this.#i=e.onEvent}get revision(){return this.#e}get size(){return this.#n.size}document(){return{format:1,revision:this.#e,objects:Object.fromEntries([...this.#n].sort(([e],[n])=>e<n?-1:e>n?1:0)),enums:Object.fromEntries([...this.#t])}}load(e){this.#e=e.revision,this.#n=new Map(Object.entries(e.objects)),this.#t=new Map(Object.entries(e.enums)),this.#s.length=0,this.#r=e.revision}get(e){const n=this.#n.get(e);if(!n)throw new kt("unknown-object",`${e} is not in the store`);return n}find(e){return this.#n.get(e)}objects(){return Object.fromEntries(this.#n)}enums(){return Object.fromEntries(this.#t)}getEnum(e){const n=this.#t.get(e);if(!n)throw new kt("unknown-enum",`${e} is not an enum`);return n}query(e,n){this.#d(e);const s=[];for(const[a,i]of this.#n)i.enums.some(o=>Ws(o,e))&&(n!==void 0&&i.orphaned===!0!==n||s.push(a));return s.sort()}since(e){return!Number.isInteger(e)||e<0||e>this.#e||e<this.#r?{revision:this.#e,resync:!0}:{revision:this.#e,events:this.#s.filter(n=>n.revision>e)}}set(e,n){if(Pl(e),n.orphaned!==void 0)throw new kt("forbidden","orphaned is set by the process that owns the addresses");const s=this.#n.get(e),a=n.name===void 0?s?.name:la(n.name);if(a===void 0)throw new kt("invalid-name",`${e} is new and needs a name`);const i=n.enums===void 0?s?.enums??[]:this.#o(Ll(n.enums)),o=n.meta===void 0?s?.meta??{}:S1(s?.meta??{},n.meta);return this.#l(e,ei(a,i,o,s?.orphaned===!0))}put(e,n){Pl(e);const s=this.#n.get(e),a=la(n.name),i=this.#o(Ll(n.enums)),o=go(n.meta);return this.#l(e,ei(a,i,o,s?.orphaned===!0))}delete(e){return this.#n.has(e)?(this.#n.delete(e),this.#v([{kind:"object.deleted",ref:e}])):{revision:this.#e,changed:!1}}bulk(e,n=[]){const s=this.#_(),a=[];for(const[i,o]of Object.entries(e))s.set(i,o).changed&&a.push({kind:"object.updated",ref:i,value:s.get(i)});for(const i of n)s.delete(i).changed&&a.push({kind:"object.deleted",ref:i});return a.length===0?{revision:this.#e,changed:!1}:(this.#p(s),this.#v(a))}setOrphaned(e,n){const s=this.get(e);if(s.orphaned===!0===n)return{revision:this.#e,changed:!1};const a=ei(s.name,s.enums,s.meta,n);return this.#n.set(e,a),this.#v([{kind:"object.updated",ref:e,value:a}])}createEnum(e,n){if(Bc(e),this.#t.has(e))throw new kt("duplicate-id",`${e} exists`);const s={name:Fl(n),tree:[]};return this.#t.set(e,s),this.#v([{kind:"enum.created",enum:e,value:s}])}updateEnum(e,n){const s=this.getEnum(e),a={name:Fl(n),tree:s.tree};return JSON.stringify(a.name)===JSON.stringify(s.name)?{revision:this.#e,changed:!1}:(this.#t.set(e,a),this.#v([{kind:"enum.updated",enum:e,value:a}]))}deleteEnum(e,n="refuse"){const s=this.getEnum(e),a=this.#f([...Rh(e,s)]);if(a.refs.length>0&&n!=="detach")throw new kt("has-members",`${e} still has members`,{refs:[...a.refs]});return this.#t.delete(e),this.#h(a),this.#v([{kind:"enum.deleted",enum:e}])}createNode(e,n,s,a,i={}){const o=this.getEnum(e);Bc(s);const l=la(a);if(i.icon!==void 0&&!Ml(i.icon))throw new kt("invalid-id",`${i.icon} is not a valid icon name`);const f=n??e,p=this.#u(e,f);if((p.length===0?o.tree:Ks(o.tree,p)?.children??[]).some(E=>E.id===s))throw new kt("duplicate-id",`${Qi(f,s)} exists`);const g={id:s,name:l,...i.icon===void 0?{}:{icon:i.icon}},k=Bl(o.tree,p,g,i.position);return Ol(k),this.#t.set(e,{name:o.name,tree:k}),this.#v([{kind:"node.created",enum:e,path:Qi(f,s),value:g}])}updateNode(e,n){const{enumId:s,ids:a}=this.#c(e),i=this.getEnum(s),o=Ks(i.tree,a);if(!o)throw new kt("unknown-path",`${e} does not exist`);const l=n.name===void 0?o.name:la(n.name);if(n.icon!==void 0&&!Ml(n.icon))throw new kt("invalid-id",`${n.icon} is not a valid icon name`);const f=n.icon??o.icon,p=a.slice(0,-1);let _=p,g=[s,...p].join("/");if(n.parent!==void 0){const R=n.parent??s;if(Ws(R,e))throw new kt("invalid-move",`${e} cannot be moved under itself`);_=this.#u(s,R),g=R}const k=Qi(g,o.id),E=k!==e;if(E&&(_.length===0?i.tree:Ks(i.tree,_)?.children??[]).some(M=>M.id===o.id))throw new kt("duplicate-id",`${k} exists`);const b={id:o.id,name:l,...f===void 0?{}:{icon:f},...o.children===void 0?{}:{children:o.children}},w=Hl(i.tree,a),x=n.position??(E?void 0:Vc(i.tree,a)),D=Bl(w,_,b,x);if(Ol(D),JSON.stringify(D)===JSON.stringify(i.tree))return{revision:this.#e,changed:!1};this.#t.set(s,{name:i.name,tree:D});const N=[];return E?(this.#m(e,k),N.push({kind:"node.moved",enum:s,from:e,to:k})):n.position!==void 0&&x!==Vc(i.tree,a)?N.push({kind:"node.moved",enum:s,from:e,to:e}):N.push({kind:"node.updated",enum:s,path:e,value:b}),this.#v(N)}deleteNode(e,n="refuse"){const{enumId:s,ids:a}=this.#c(e),i=this.getEnum(s);if(!Ks(i.tree,a))throw new kt("unknown-path",`${e} does not exist`);const l=this.#f([e]);if(l.refs.length>0&&n!=="detach")throw new kt("has-members",`${e} still has members`,{refs:[...l.refs]});return this.#t.set(s,{name:i.name,tree:Hl(i.tree,a)}),this.#h(l),this.#v([{kind:"node.deleted",enum:s,path:e}])}import(e,n="replace"){const s=Gl(e),a=this.document(),i=n==="merge"?Gl({format:1,revision:a.revision,objects:{...a.objects,...s.objects},enums:{...a.enums,...s.enums}}):s;return g1(a,i)?{revision:this.#e,changed:!1}:(this.#n=new Map(Object.entries(i.objects)),this.#t=new Map(Object.entries(i.enums)),this.#v([{kind:"import",objects:Object.keys(i.objects).length,enums:Object.keys(i.enums).length}]))}#l(e,n){const s=this.#n.get(e);return s&&JSON.stringify(s)===JSON.stringify(n)?{revision:this.#e,changed:!1}:(this.#n.set(e,n),this.#v([{kind:"object.updated",ref:e,value:n}]))}#o(e){const n=Dh(this.enums());for(const s of e)if(!n.has(s))throw new kt("unknown-path",`${s} does not exist`,{path:s});return e}#d(e){const n=xa(e);if(!n)throw new kt("unknown-path",`${e} is not a node path`);const s=this.getEnum(n.enumId);if(n.ids.length>0&&!Ks(s.tree,n.ids))throw new kt("unknown-path",`${e} does not exist`)}#c(e){const n=xa(e);if(!n||n.ids.length===0)throw new kt("unknown-path",`${e} is not a node path`);return{enumId:n.enumId,ids:n.ids}}#u(e,n){const s=xa(n);if(!s||s.enumId!==e)throw new kt("unknown-path",`${n} is not a path of ${e}`);if(s.ids.length>0&&!Ks(this.getEnum(e).tree,s.ids))throw new kt("unknown-path",`${n} does not exist`);return s.ids}#f(e){const n=[];for(const[s,a]of this.#n)a.enums.some(i=>e.some(o=>Ws(i,o)))&&n.push(s);return{paths:e,refs:n.sort()}}#h(e){for(const n of e.refs){const s=this.#n.get(n);if(!s)continue;const a=s.enums.filter(i=>!e.paths.some(o=>Ws(i,o)));this.#n.set(n,ei(s.name,a,s.meta,s.orphaned===!0))}}#m(e,n){for(const[s,a]of this.#n){if(!a.enums.some(o=>Ws(o,e)))continue;const i=a.enums.map(o=>Ws(o,e)?`${n}${o.slice(e.length)}`:o);this.#n.set(s,ei(a.name,i,a.meta,a.orphaned===!0))}}#v(e){this.#e+=1;for(const n of e){const s={...n,revision:this.#e};this.#s.push(s),this.#i?.(s)}for(;this.#s.length>this.#a;){const n=this.#s.shift();n&&(this.#r=n.revision)}return{revision:this.#e,changed:!0}}#_(){return new Ih({document:this.document(),eventHistory:0})}#p(e){const n=e.document();this.#n=new Map(Object.entries(n.objects)),this.#t=new Map(Object.entries(n.enums))}};function ei(r,e,n,s){return s?{name:r,enums:e,meta:n,orphaned:!0}:{name:r,enums:e,meta:n}}function S1(r,e){const n={...r};for(const[s,a]of Object.entries(go(e)))a===null?delete n[s]:n[s]=a;return go(n)}function Nh(r,e,n){return e?.name[n]??e?.name.en??r}function zc(r,e,n={}){const s=new Set;for(const i of e){const o=xa(i);if(!(!o||o.ids.length===0)&&!(n.enumId!==void 0&&o.enumId!==n.enumId)&&(s.add(i),n.ancestors===!0))for(let l=1;l<o.ids.length;l+=1)s.add([o.enumId,...o.ids.slice(0,l)].join("/"))}const a=[];for(const[i,o]of Object.entries(r))if(!(n.enumId!==void 0&&i!==n.enumId))for(const l of Ii(i,o))s.has(l.path)&&!a.includes(l.node.name)&&a.push(l.node.name);return a}function w1(r){const e={};for(const[n,s]of Object.entries(r))e[n]=Ii(n,s);return e}function k1(r,e,n={}){return{name:e.name,rooms:zc(r,e.enums,{...n,enumId:"room"}),functions:zc(r,e.enums,{...n,enumId:"function"}),paths:e.enums,orphaned:e.orphaned===!0}}const A1=[[/ä/g,"ae"],[/ö/g,"oe"],[/ü/g,"ue"],[/ß/g,"ss"],[/å/g,"a"],[/æ/g,"ae"],[/ø/g,"oe"]];function jc(r){let e=r.toLowerCase();for(const[n,s]of A1)e=e.replace(n,s);return e=e.normalize("NFKD").replace(/[̀-ͯ]/g,"").replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,ko),pa(e)?e:""}function Ch(r,e=[]){const n=new Set(e),s=jc(r)===""?"node":jc(r);if(!n.has(s))return s;for(let a=2;a<1e3;a+=1){const i=`${s.slice(0,ko-String(a).length-1)}-${String(a)}`;if(!n.has(i))return i}throw new Error(`no free id for ${r}`)}const Ph={"Homematic Manager Address":{de:"Homematic Manager Adresse",en:"Homematic Manager Address"},"CCU Address":{de:"CCU Adresse",en:"CCU Address"},Select:{de:"Auswählen",en:"Select"},"Save & Restart":{de:"Speichern und Neustarten",en:"Save & Restart"},Error:{de:"Fehler",en:"Error"},Devices:{de:"Geräte",en:"Devices"},Device:{de:"Gerät",en:"Device"},introduced:{de:"gefunden",en:"introduced"},New:{de:"Neue",en:"New"},Events:{de:"Ereignisse",en:"Events"},Cancel:{de:"Abbrechen",en:"Cancel"},OK:{de:"OK",en:"OK"},Delete:{de:"Löschen",en:"Delete"},Save:{de:"Speichern",en:"Save"},"Create and edit":{de:"Anlegen und Bearbeiten",en:"Create and edit"},Create:{de:"Anlegen",en:"Create"},"Please choose one or more channels":{de:"Bitte einen oder mehrere Kanäle auswählen",en:"Please choose one or more channels"},Refresh:{de:"Aktualisieren",en:"Refresh"},"Delete device":{de:"Gerät löschen",en:"Delete device"},"Rename device":{de:"Gerät umbenennen",en:"Rename device"},"Pair devices":{de:"Geräte anlernen",en:"Pair devices"},Links:{de:"Verknüpfungen",en:"Links"},"Delete link":{de:"Verknüpfung löschen",en:"Delete link"},"Edit link":{de:"Verknüpfung bearbeiten",en:"Edit link"},"Test link":{de:"Verknüpfung testen",en:"Test link"},"Create link":{de:"Verknüpfung anlegen",en:"Create link"},RSSI:{de:"Funk",en:"RSSI"},"RPC Console":{de:"RPC Konsole",en:"RPC Console"},"Service messages":{de:"Servicemeldungen",en:"Service messages"},"Send request":{de:"Befehl senden",en:"Send request"},Parameters:{de:"Parameter",en:"Parameters"},Response:{de:"Antwort",en:"Response"},Help:{de:"Hilfe",en:"Help"},Settings:{de:"Einstellungen",en:"Settings"},"Please choose one or more links":{de:"mehrere Verknüpfungen bearbeiten",en:"Please choose one or more links"},"Kanäle überschreiben":{de:"Kanäle überschreiben",en:"Kanäle überschreiben"},"Normaler Anlernmodus":{de:"Normaler Anlernmodus",en:"Normaler Anlernmodus"},"Default-Parameter in Paramset MASTER schreiben, bestehende Verknüpfungen löschen":{de:"Default-Parameter in Paramset MASTER schreiben, bestehende Verknüpfungen löschen",en:"Default-Parameter in Paramset MASTER schreiben, bestehende Verknüpfungen löschen"},Sender:{de:"Sender",en:"Sender"},Receiver:{de:"Empfänger",en:"Receiver"},"Ablernen und Gerät auf Werkseinstellungen zurücksetzen":{de:"Ablernen und Gerät auf Werkseinstellungen zurücksetzen",en:"Ablernen und Gerät auf Werkseinstellungen zurücksetzen"},"Nur ablernen (Direktverknüpfungen bleiben erhalten)":{de:"Nur ablernen (Direktverknüpfungen bleiben erhalten)",en:"Nur ablernen (Direktverknüpfungen bleiben erhalten)"},"Falls Gerät nicht erreichbar:":{de:"Falls Gerät nicht erreichbar:",en:"Falls Gerät nicht erreichbar:"},"bei nächster Gelegenheit löschen":{de:"bei nächster Gelegenheit löschen",en:"bei nächster Gelegenheit löschen"},"Nur aus Schnittstellenprozess löschen":{de:"Nur aus Schnittstellenprozess löschen",en:"Nur aus Schnittstellenprozess löschen"},Disconnected:{de:"Verbindung unterbrochen",en:"Disconnected"},"Which device do you want to replace?":{de:"Welches Gerät wollen sie ersetzen?",en:"Which device do you want to replace?"},"Gerät löschen":{de:"Gerät löschen",en:"Gerät löschen"},"Acknowledge service messages":{de:"Servicemeldung bestätigen",en:"Acknowledge service messages"},"Acknowledge all service messages":{de:"Alle Servicemeldungen bestätigen",en:"Acknowledge all service messages"},Interfaces:{de:"Interfaces",en:"Interfaces"},"Edit device":{de:"Gerät bearbeiten",en:"Edit device"},undefined:{de:"undefined",en:"undefined"},"Please select method":{de:"Bitte eine Methode auswählen",en:"Please select method"},saveAsNewTemplate:{de:"als neue Profilvorlage speichern",en:"saveAsNewTemplate"},"Replace device":{de:"Gerät tauschen",en:"Replace device"},"Update firmware":{de:"Firmware aktualisieren",en:"Update firmware"},clearConfigCache:{de:"clearConfigCache",en:"clearConfigCache"},restoreConfigToDevice:{de:"restoreConfigToDevice",en:"restoreConfigToDevice"},Rename:{de:"Umbenennen",en:"Rename"},"MASTER Paramset":{de:"MASTER Paramset",en:"MASTER Paramset"},updateFirmware:{de:"Firmware aktualisieren",en:"updateFirmware"},Replace:{de:"Gerät tauschen",en:"Replace"},"VALUES Paramset":{de:"VALUES Paramset",en:"VALUES Paramset"},"Activate long":{de:"Empfägnerprofil testen (langer Tastendruck)",en:"Activate long"},"Activate short":{de:"Empfängerprofil testen (kurzer Tastendruck)",en:"Activate short"},putParamset:{de:"Parameter übernehmen",en:"putParamset"},putParamsetClose:{de:"Parameter übernehmen und schließen",en:"putParamsetClose"},"New service message":{de:"Neue Servicemeldung",en:"New service message"},"RPC execution":{de:"RPC wird ausgeführt",en:"RPC execution"},"about Homematic Manager":{de:"Über Homematic Manager",en:"about Homematic Manager"},"Saving and reconnecting…":{de:"Wird gespeichert, die Verbindung wird neu aufgebaut…",en:"Saving and reconnecting…"},"This tab could not be drawn.":{de:"Dieser Reiter konnte nicht gezeichnet werden.",en:"This tab could not be drawn."},"Try again":{de:"Erneut versuchen",en:"Try again"},"The device list could not be read - press Refresh to try again":{de:"Die Geräteliste konnte nicht gelesen werden - mit Aktualisieren erneut versuchen",en:"The device list could not be read - press Refresh to try again"},"Loading Homematic Manager...":{de:"Lade Homematic Manager...",en:"Loading Homematic Manager..."},"Check all":{de:"Alle auswählen",en:"Check all"},"Uncheck all":{de:"Auswahl entfernen",en:"Uncheck all"},"{count} devices":{de:{one:"{count} Gerät",other:"{count} Geräte"},en:{one:"{count} device",other:"{count} devices"}},"{count} channels":{de:{one:"{count} Kanal",other:"{count} Kanäle"},en:{one:"{count} channel",other:"{count} channels"}},"{count} links":{de:{one:"{count} Verknüpfung",other:"{count} Verknüpfungen"},en:{one:"{count} link",other:"{count} links"}},"{count} service messages":{de:{one:"{count} Servicemeldung",other:"{count} Servicemeldungen"},en:{one:"{count} service message",other:"{count} service messages"}},"{count} events":{de:{one:"{count} Ereignis",other:"{count} Ereignisse"},en:{one:"{count} event",other:"{count} events"}},"{count} parameters will be written":{de:{one:"{count} Parameter wird geschrieben",other:"{count} Parameter werden geschrieben"},en:{one:"{count} parameter will be written",other:"{count} parameters will be written"}},"{count} channels selected":{de:{one:"{count} Kanal ausgewählt",other:"{count} Kanäle ausgewählt"},en:{one:"{count} channel selected",other:"{count} channels selected"}},"Connected to {host}":{de:"Verbunden mit {host}",en:"Connected to {host}"},"Interface {interface} is not answering":{de:"Schnittstelle {interface} antwortet nicht",en:"Interface {interface} is not answering"},"Writing {paramset} of {address}":{de:"Schreibe {paramset} von {address}",en:"Writing {paramset} of {address}"},"RPC log":{de:"RPC-Protokoll",en:"RPC log"},"No RPC calls yet":{de:"Noch keine RPC-Aufrufe",en:"No RPC calls yet"},"in progress":{de:"läuft",en:"in progress"},Clear:{de:"Leeren",en:"Clear"},Close:{de:"Schließen",en:"Close"},"Resize the RPC log":{de:"Größe des RPC-Protokolls ändern",en:"Resize the RPC log"},"Hide background calls":{de:"Hintergrundaufrufe ausblenden",en:"Hide background calls"},"Open in console":{de:"In der Konsole öffnen",en:"Open in console"},"Origin: console":{de:"Konsole",en:"console"},"Origin: UI":{de:"UI",en:"UI"},"Origin: background":{de:"Hintergrund",en:"background"}};function T1(r,e){return r==="tr"?"other":e===1?"one":"other"}function Qo(r,e){return r.replace(/\{(\w+)\}/g,(n,s)=>{const a=e[s];return a===void 0?n:String(a)})}const R1=["en","de"];class x1{language;#e;#n;constructor(e,n={}){this.language=e,this.#e=n.catalogue??Ph;const s=n.fallbacks??R1;this.#n=[e,...s.filter(a=>a!==e)]}has(e){return this.#t(e)!==void 0}t(e,n={},s){const a=this.#t(e),i=s===void 0?n:{count:s,...n};if(a===void 0)return Qo(e,i);const[o,l]=a;if(typeof o=="string")return Qo(o,i);const f=T1(l,s??0);return Qo(o[f],i)}#t(e){const n=Object.prototype.hasOwnProperty.call(this.#e,e)?this.#e[e]:void 0;if(n)for(const s of this.#n){const a=n[s];if(a!==void 0)return[a,s]}}}function D1(r,e={}){return new x1(r,e)}class Wc{#e;constructor(e,...n){this.#e=[e,...n].filter(s=>s!==void 0)}get languages(){return this.#e.map(e=>e.language)}channelType(e){return this.#n(n=>n.channelTypes,wa(e))??e}deviceModel(e){return this.#n(n=>n.deviceModels,wa(e))??e}parameter(e,n){return this.#n(s=>s.parameters,Zo(e,n))??e}parameterValue(e,n,s){const a=Zo(`${e}|${n}`,s);return a.push(...wa(n)),this.#n(i=>i.parameterValues,a)??n}specialValue(e,n,s){const a=this.parameterValue(e,n,s);return a!==n?a:this.#n(i=>i.parameters,wa(n))??n}parameterHelp(e,n){return this.#n(s=>s.parameterHelp,Zo(e,n))}uiLabel(e){return this.#n(n=>n.uiLabels,Md([e,e.toLowerCase()]))??e}#n(e,n){for(const s of this.#e)for(const a of n){const i=e(s)[a];if(i!==void 0&&i!=="")return i}}}function Zo(r,e){const n=r.replace(/^(?:SHORT|LONG)_/i,"");return Md((n===r?[r]:[r,n]).flatMap(a=>{const i=wa(a);if(e===void 0||e==="")return i;const o=wa(e).map(l=>`${l}|${a}`);return[...o,...o.map(l=>l.toUpperCase()),...i]}))}function wa(r){return Md([r,r.toUpperCase()])}function Md(r){return[...new Set(r)]}const I1={Filter:{de:"Filter",en:"Filter"},"Filter all columns":{de:"Alle Spalten filtern",en:"Filter all columns"},Language:{de:"Sprache",en:"Language"},"Browser language":{de:"Sprache des Browsers",en:"Browser language"},"Resize the RPC log":{de:"Größe des RPC-Protokolls ändern",en:"Resize the RPC log"},Theme:{de:"Design",en:"Theme"},"Theme: light":{de:"Design: hell",en:"Theme: light"},"Theme: dark":{de:"Design: dunkel",en:"Theme: dark"},"Theme: system":{de:"Design: System",en:"Theme: system"},Close:{de:"Schließen",en:"Close"},Apply:{de:"Übernehmen",en:"Apply"},Connected:{de:"Verbunden",en:"Connected"},"Not connected":{de:"Nicht verbunden",en:"Not connected"},"Not present":{de:"Nicht vorhanden",en:"Not present"},"Not answering":{de:"Antwortet nicht",en:"Not answering"},"Retry now":{de:"Jetzt erneut versuchen",en:"Retry now"},Subscribing:{de:"Anmeldung läuft",en:"Subscribing"},Waiting:{de:"Wartet",en:"Waiting"},Reconnecting:{de:"Verbindet neu",en:"Reconnecting"},"Pending changes":{de:"Offene Änderungen",en:"Pending changes"},"Logged in as {user}":{de:"Angemeldet als {user}",en:"Logged in as {user}"},"Log out":{de:"Abmelden",en:"Log out"},Team:{de:"Team",en:"Team"},"Own team":{de:"Eigenes Team",en:"Own team"},Members:{de:"Mitglieder",en:"Members"},Groups:{de:"Gruppen",en:"Groups"},Loading:{de:"Wird geladen",en:"Loading"},"Heating groups":{de:"Heizungsgruppen",en:"Heating groups"},"New group":{de:"Neue Gruppe",en:"New group"},"Edit group":{de:"Gruppe bearbeiten",en:"Edit group"},"Delete group":{de:"Gruppe löschen",en:"Delete group"},"Group name":{de:"Gruppenname",en:"Group name"},"Group type":{de:"Gruppentyp",en:"Group type"},"Virtual device":{de:"Virtuelles Gerät",en:"Virtual device"},"No groups yet":{de:"Noch keine Gruppen",en:"No groups yet"},"{count} groups":{de:{one:"{count} Gruppe",other:"{count} Gruppen"},en:{one:"{count} group",other:"{count} groups"}},"Select a group":{de:"Eine Gruppe auswählen",en:"Select a group"},"Addable devices":{de:"Hinzufügbare Geräte",en:"Addable devices"},"Already connected devices":{de:"Bereits verknüpfte Geräte",en:"Already connected devices"},"There are no other devices available":{de:"Es sind keine weiteren Geräte vorhanden",en:"There are no other devices available"},"There are no devices in the group":{de:"Es sind keine Geräte in der Gruppe",en:"There are no devices in the group"},"Configuration pending: {list}":{de:"Konfiguration ausstehend: {list}",en:"Configuration pending: {list}"},"The direct device connections of these devices are still being configured":{de:"Die direkten Verknüpfungen dieser Geräte werden noch konfiguriert",en:"The direct device connections of these devices are still being configured"},"The members leave the group and the virtual device {device} is removed":{de:"Die Mitglieder verlassen die Gruppe, das virtuelle Gerät {device} wird entfernt",en:"The members leave the group and the virtual device {device} is removed"},"Needs the administrator role on the system":{de:"Erfordert die Administratorrolle auf dem System",en:"Needs the administrator role on the system"},"Heating groups are not available here":{de:"Heizungsgruppen sind hier nicht verfügbar",en:"Heating groups are not available here"},Heating_Control:{de:"Heizungssteuerung",en:"Heating control"},"HmIP-Heizungssteuerung":{de:"HmIP-Heizungssteuerung",en:"HmIP heating control"},"This channel does not belong to a team":{de:"Dieser Kanal gehört zu keinem Team",en:"This channel does not belong to a team"},"The interface knows no other team yet":{de:"Die Schnittstelle kennt noch kein anderes Team",en:"The interface knows no other team yet"},"Smoke group":{de:"Rauchmeldergruppe",en:"Smoke group"},"Smoke group {n}":{de:"Rauchmeldergruppe {n}",en:"Smoke group {n}"},"{count} detectors":{de:{one:"{count} Melder",other:"{count} Melder"},en:{one:"{count} detector",other:"{count} detectors"}},"New smoke group":{de:"Neue Rauchmeldergruppe",en:"New smoke group"},"Internal key…":{de:"Interne Taste…",en:"Internal key…"},"The names reach the CCU once the device is confirmed in the ReGa inbox.":{de:"Die Namen kommen auf der CCU an, sobald das Gerät im ReGa-Posteingang bestätigt ist.",en:"The names reach the CCU once the device is confirmed in the ReGa inbox."},"The profile names {count} parameters this firmware does not have":{de:{one:"Das Profil nennt {count} Parameter, den diese Firmware nicht hat",other:"Das Profil nennt {count} Parameter, die diese Firmware nicht hat"},en:{one:"The profile names {count} parameter this firmware does not have",other:"The profile names {count} parameters this firmware does not have"}},"Only available on HmIP interfaces":{de:"Nur auf HmIP-Schnittstellen verfügbar",en:"Only available on HmIP interfaces"},"This interface has no smoke detector":{de:"Diese Schnittstelle hat keinen Rauchmelder",en:"This interface has no smoke detector"},"All eight smoke groups are in use":{de:"Alle acht Rauchmeldergruppen sind belegt",en:"All eight smoke groups are in use"},"in {team}":{de:"in {team}",en:"in {team}"},"also in {groups}":{de:"auch in {groups}",en:"also in {groups}"},"A new group takes the lowest free number.":{de:"Eine neue Gruppe bekommt die niedrigste freie Nummer.",en:"A new group takes the lowest free number."},"Changes are written to the detectors and take effect once each detector has picked them up.":{de:"Änderungen werden in die Melder geschrieben und gelten, sobald jeder Melder sie übernommen hat.",en:"Changes are written to the detectors and take effect once each detector has picked them up."},"cannot be grouped - no GROUP parameters":{de:"nicht gruppierbar - keine GROUP-Parameter",en:"cannot be grouped - no GROUP parameters"},"Confirm the ReGa inbox":{de:"ReGa-Posteingang bestätigen",en:"Confirm the ReGa inbox"},"Confirm the ReGa inbox automatically":{de:"ReGa-Posteingang automatisch bestätigen",en:"Confirm the ReGa inbox automatically"},"The ReGa inbox is empty":{de:"Der ReGa-Posteingang ist leer",en:"The ReGa inbox is empty"},Confirmed:{de:"Bestätigt",en:"Confirmed"},Template:{de:"Vorlage",en:"Template"},"Save as template":{de:"Als Vorlage speichern",en:"Save as template"},"Apply template":{de:"Vorlage anwenden",en:"Apply template"},"Delete template":{de:"Vorlage löschen",en:"Delete template"},"Template name":{de:"Name der Vorlage",en:"Template name"},"No template for this pair of channel types":{de:"Keine Vorlage für diese Kanaltypen",en:"No template for this pair of channel types"},"Create link as sender":{de:"Verknüpfung als Sender anlegen",en:"Create link as sender"},"Create link as receiver":{de:"Verknüpfung als Empfänger anlegen",en:"Create link as receiver"},"Show links":{de:"Verknüpfungen anzeigen",en:"Show links"},Unreach:{de:"Ausfälle",en:"Unreach"},"Reset the unreach counters":{de:"Ausfallzähler zurücksetzen",en:"Reset the unreach counters"},"Acknowledge STICKY_UNREACH automatically as they occur":{de:"STICKY_UNREACH automatisch bestätigen, sobald sie auftreten",en:"Acknowledge STICKY_UNREACH automatically as they occur"},"Acknowledging is a write to the device. Switching this on asks once about the messages already in the list.":{de:"Das Bestätigen schreibt in das Gerät. Beim Einschalten wird einmal gefragt, was mit den Meldungen geschieht, die schon in der Liste stehen.",en:"Acknowledging is a write to the device. Switching this on asks once about the messages already in the list."},"Acknowledge the messages already in the list?":{de:"Die Meldungen in der Liste auch bestätigen?",en:"Acknowledge the messages already in the list?"},"{count} STICKY_UNREACH messages are already listed. New ones are acknowledged automatically from now on.":{de:{one:"In der Liste steht schon 1 STICKY_UNREACH-Meldung. Neue werden ab jetzt automatisch bestätigt.",other:"In der Liste stehen schon {count} STICKY_UNREACH-Meldungen. Neue werden ab jetzt automatisch bestätigt."},en:{one:"1 STICKY_UNREACH message is already listed. New ones are acknowledged automatically from now on.",other:"{count} STICKY_UNREACH messages are already listed. New ones are acknowledged automatically from now on."}},"Each acknowledgement is a write to the device. Afterwards the list no longer shows which devices were away; the unreach counter in the RSSI tab keeps that.":{de:"Jede Bestätigung schreibt in das Gerät. Danach zeigt die Liste nicht mehr, welche Geräte nicht erreichbar waren; der Ausfallzähler im Reiter Funk behält das.",en:"Each acknowledgement is a write to the device. Afterwards the list no longer shows which devices were away; the unreach counter in the RSSI tab keeps that."},"Acknowledge existing":{de:"Vorhandene bestätigen",en:"Acknowledge existing"},"Only new ones":{de:"Nur neue",en:"Only new ones"},"{count} messages in the list are acknowledged when this is saved":{de:{one:"Die Meldung in der Liste wird beim Speichern bestätigt",other:"Die {count} Meldungen in der Liste werden beim Speichern bestätigt"},en:{one:"The message in the list is acknowledged when this is saved",other:"The {count} messages in the list are acknowledged when this is saved"}},"Used for every pair without its own name":{de:"Gilt für jedes Paar ohne eigenen Namen",en:"Used for every pair without its own name"},"Nothing is staged":{de:"Nichts vorgemerkt",en:"Nothing is staged"},"Add to pending changes":{de:"Zu den offenen Änderungen",en:"Add to pending changes"},"Discard all":{de:"Alle verwerfen",en:"Discard all"},"{count} changes staged":{de:{one:"Eine Änderung vorgemerkt",other:"{count} Änderungen vorgemerkt"},en:{one:"One change staged",other:"{count} changes staged"}},"The camera is only available over https or on localhost. Open the page with its https address (the CCU serves it on its https port too, with a certificate warning) or type the key in by hand.":{de:"Die Kamera ist nur über https oder auf localhost verfügbar. Öffnen Sie die Seite über ihre https-Adresse (die CCU liefert sie auch über ihren https-Port aus, mit Zertifikatswarnung) oder geben Sie den Schlüssel von Hand ein.",en:"The camera is only available over https or on localhost. Open the page with its https address (the CCU serves it on its https port too, with a certificate warning) or type the key in by hand."},"Add by serial number":{de:"Per Seriennummer anlernen",en:"Add by serial number"},"RPC log":{de:"RPC-Protokoll",en:"RPC log"},"Show RPC log":{de:"RPC-Protokoll anzeigen",en:"Show RPC log"},"No RPC calls yet":{de:"Noch keine RPC-Aufrufe",en:"No RPC calls yet"},"in progress":{de:"läuft",en:"in progress"},"up to date":{de:"aktuell",en:"up to date"},"queued for transfer":{de:"wartet auf die Übertragung",en:"queued for transfer"},transferring:{de:"wird übertragen",en:"transferring"},"waiting for the device":{de:"wartet auf das Gerät",en:"waiting for the device"},installing:{de:"wird installiert",en:"installing"},"update pending":{de:"Update ausstehend",en:"update pending"},"firmware requested":{de:"angefordert …",en:"requested …"},"firmware requested hint":{de:"Das Update ist angefordert. Ein Batteriegerät beginnt erst, wenn es das nächste Mal wach ist; manche Geräte wollen dafür ihre Systemtaste gedrückt bekommen.",en:"The update has been requested. A battery device starts only when it is awake the next time; some want their system button pressed for it."},"firmware queued hint":{de:"Die Firmware liegt auf dem System und wartet, bis sie an der Reihe ist: Die Schnittstelle überträgt an ein Gerät nach dem anderen.",en:"The firmware is on the system and waits for its turn: the interface transfers to one device at a time."},"firmware transfer hint":{de:"Die Firmware wird im Hintergrund an das Gerät übertragen, an ein Gerät nach dem anderen. Ein Batteriegerät empfängt sie nur, solange es wach ist; das kann 8 bis 42 Stunden dauern. Danach erscheint der Button zum Installieren.",en:"The firmware is being transferred to the device in the background, one device after the other. A battery device receives it only while awake; this can take 8 to 42 hours. The install button appears once it is through."},"firmware interrupted hint":{de:"Das Gerät hat nicht geantwortet; die Übertragung wird von selbst dort fortgesetzt, wo sie stehen geblieben ist, sobald das Gerät wieder erreichbar ist.",en:"The device did not answer; the transfer continues by itself from where it stopped once the device is reachable again."},"firmware install pending hint":{de:"Das Gerät wartet auf die Installation. Bei einem Batteriegerät muss eventuell die Systemtaste gedrückt werden.",en:"The device waits for the install. A battery device may need its system button pressed."},Duration:{de:"Dauer",en:"Duration"},Method:{de:"Methode",en:"Method"},Result:{de:"Ergebnis",en:"Result"},Interface:{de:"Schnittstelle",en:"Interface"},Channels:{de:"Kanäle",en:"Channels"},Name:{de:"Name",en:"Name"},Timestamp:{de:"Zeitstempel",en:"Timestamp"},Value:{de:"Wert",en:"Value"},Message:{de:"Meldung",en:"Message"},Since:{de:"Seit",en:"Since"},"First reported, from the CCU":{de:"Erste Meldung, von der CCU",en:"First reported, from the CCU"},"First seen by the Homematic Manager":{de:"Vom Homematic Manager zuerst gesehen",en:"First seen by the Homematic Manager"},"Last changed, from the openccu-lite system":{de:"Letzte Änderung, vom openccu-lite-System",en:"Last changed, from the openccu-lite system"},"since {time}":{de:"seit {time}",en:"since {time}"},restored:{de:"wiederhergestellt",en:"restored"},"Last change: {time}":{de:"Letzte Änderung: {time}",en:"Last change: {time}"},"Last report: {time}":{de:"Letzte Meldung: {time}",en:"Last report: {time}"},"Restored by the system from its own file; no device has reported it since the system started.":{de:"Vom System aus seiner eigenen Datei wiederhergestellt; seit dem Start des Systems hat es kein Gerät gemeldet.",en:"Restored by the system from its own file; no device has reported it since the system started."},"The openccu-lite system's clock":{de:"Die Uhr des openccu-lite-Systems",en:"The openccu-lite system's clock"},"Listed by the CCU only; the interface no longer reports it":{de:"Nur von der CCU geführt; die Schnittstelle meldet sie nicht mehr",en:"Listed by the CCU only; the interface no longer reports it"},Clear:{de:"Leeren",en:"Clear"},"No data":{de:"Keine Daten",en:"No data"},"Nothing selected":{de:"Nichts ausgewählt",en:"Nothing selected"},"Comes with task 8":{de:"Diese Funktion kommt mit Aufgabe 8.",en:"This function arrives with task 8."},"Select an interface":{de:"Schnittstelle auswählen",en:"Select an interface"},"All interfaces are connected":{de:"Alle Schnittstellen verbunden",en:"All interfaces are connected"},"Not every interface is connected":{de:"Nicht jede Schnittstelle ist verbunden",en:"Not every interface is connected"},"Duty cycle {value} %":{de:"Duty Cycle {value} %",en:"Duty cycle {value} %"},"Callback port {port} is in use":{de:"Callback-Port {port} ist belegt",en:"Callback port {port} is in use"},"Callback port {port} cannot be opened":{de:"Callback-Port {port} lässt sich nicht öffnen",en:"Callback port {port} cannot be opened"},"Publish this port unchanged":{de:"Diesen Port unverändert veröffentlichen",en:"Publish this port unchanged"},"Use ReGa":{de:"ReGa verwenden",en:"Use ReGa"},"Detect interfaces":{de:"Schnittstellen erkennen",en:"Detect interfaces"},Interfaces:{de:"Schnittstellen",en:"Interfaces"},"Callback address":{de:"Callback-Adresse",en:"Callback address"},"Automatic ({address}, {why})":{de:"Automatisch ({address}, {why})",en:"Automatic ({address}, {why})"},"in the CCU's network":{de:"im Netz der CCU",en:"in the CCU's network"},"on the route to the CCU":{de:"auf dem Weg zur CCU",en:"on the route to the CCU"},"the CCU is on this machine":{de:"die CCU ist auf diesem Rechner",en:"the CCU is on this machine"},"no better match":{de:"keine bessere Wahl",en:"no better match"},"not in the CCU's network":{de:"nicht im Netz der CCU",en:"not in the CCU's network"},"link-local":{de:"link-lokal",en:"link-local"},"Use automatic":{de:"Automatisch verwenden",en:"Use automatic"},"The callback address {address} is not an address of this machine; {auto} is used instead":{de:"Die Callback-Adresse {address} ist keine Adresse dieses Rechners; stattdessen wird {auto} verwendet",en:"The callback address {address} is not an address of this machine; {auto} is used instead"},"The callback address {address} is not in the CCU's network; the CCU may not reach it and send no events":{de:"Die Callback-Adresse {address} liegt nicht im Netz der CCU; die CCU erreicht sie womöglich nicht und sendet keine Ereignisse",en:"The callback address {address} is not in the CCU's network; the CCU may not reach it and send no events"},"Automatic takes this machine's address in the CCU's network, else the one on the route to the CCU":{de:"Automatisch nimmt die Adresse dieses Rechners im Netz der CCU, sonst die auf dem Weg zur CCU",en:"Automatic takes this machine's address in the CCU's network, else the one on the route to the CCU"},"Callback XML-RPC port":{de:"Callback-Port XML-RPC",en:"Callback XML-RPC port"},"Callback BIN-RPC port":{de:"Callback-Port BIN-RPC",en:"Callback BIN-RPC port"},"Use TLS":{de:"TLS verwenden",en:"Use TLS"},"Use Auth":{de:"Authentifizierung verwenden",en:"Use Auth"},"Auth User":{de:"Benutzer",en:"Auth User"},"Auth Pass":{de:"Passwort",en:"Auth Pass"},"RPC Delay (ms)":{de:"RPC-Pause (ms)",en:"RPC Delay (ms)"},"RPC Log Folder":{de:"RPC-Log-Verzeichnis",en:"RPC Log Folder"},"Clear Cache":{de:"Cache leeren",en:"Clear Cache"},"Discovered CCUs":{de:"Gefundene CCUs",en:"Discovered CCUs"},Discover:{de:"Suchen",en:"Discover"},"Free port":{de:"freier Port",en:"Free port"},"0 picks a free port":{de:"0 wählt einen freien Port",en:"0 picks a free port"},"0 uses port {port}, or a free one when it is taken":{de:"0 verwendet Port {port} oder, wenn er belegt ist, einen freien",en:"0 uses port {port}, or a free one when it is taken"},"Set at start ({option})":{de:"Beim Start festgelegt ({option})",en:"Set at start ({option})"},Certificate:{de:"Zertifikat",en:"Certificate"},"The certificate of {url} is not trusted ({code})":{de:"Dem Zertifikat von {url} wird nicht vertraut ({code})",en:"The certificate of {url} is not trusted ({code})"},"The certificate of {url} is not trusted ({code}). Until it is, whether this is an openccu-lite system is not known.":{de:"Dem Zertifikat von {url} wird nicht vertraut ({code}). Bis dahin ist unbekannt, ob dies ein openccu-lite-System ist.",en:"The certificate of {url} is not trusted ({code}). Until it is, whether this is an openccu-lite system is not known."},"{subject}, issued by {issuer}, valid until {validTo}":{de:"{subject}, ausgestellt von {issuer}, gültig bis {validTo}",en:"{subject}, issued by {issuer}, valid until {validTo}"},"Trust this certificate":{de:"Diesem Zertifikat vertrauen",en:"Trust this certificate"},"Trust the CA {name}":{de:"Der CA {name} vertrauen",en:"Trust the CA {name}"},"A trusted certificate holds whatever name the system is reached by, until it is renewed; a trusted CA also covers its renewals, but the name must match the certificate.":{de:"Ein vertrautes Zertifikat gilt unter jedem Namen des Systems, bis es erneuert wird; eine vertraute CA gilt auch für Erneuerungen, aber der Name muss zum Zertifikat passen.",en:"A trusted certificate holds whatever name the system is reached by, until it is renewed; a trusted CA also covers its renewals, but the name must match the certificate."},"Trusted certificates":{de:"Vertraute Zertifikate",en:"Trusted certificates"},"{count} certificates or CAs of the system are trusted":{de:{one:"{count} Zertifikat oder CA des Systems wird vertraut",other:"{count} Zertifikaten oder CAs des Systems wird vertraut"},en:{one:"{count} certificate or CA of the system is trusted",other:"{count} certificates or CAs of the system are trusted"}},"Forget them":{de:"Vergessen",en:"Forget them"},"Unsubscribe when idle":{de:"Abmelden bei Inaktivität",en:"Unsubscribe when idle"},"Default ({time})":{de:"Voreinstellung ({time})",en:"Default ({time})"},"Never unsubscribe":{de:"Nie abmelden",en:"Never unsubscribe"},"{count} seconds":{de:{one:"{count} Sekunde",other:"{count} Sekunden"},en:{one:"{count} second",other:"{count} seconds"}},"{count} minutes":{de:{one:"{count} Minute",other:"{count} Minuten"},en:{one:"{count} minute",other:"{count} minutes"}},"{count} hours":{de:{one:"{count} Stunde",other:"{count} Stunden"},en:{one:"{count} hour",other:"{count} hours"}},"With no page open, the event subscriptions are dropped after this time and taken up again when a page is opened":{de:"Ist keine Seite geöffnet, werden die Event-Anmeldungen nach dieser Zeit beendet und beim Öffnen einer Seite wieder aufgenommen",en:"With no page open, the event subscriptions are dropped after this time and taken up again when a page is opened"},Dismiss:{de:"Ausblenden",en:"Dismiss"},"{count} more":{de:{one:"{count} weitere",other:"{count} weitere"},en:{one:"{count} more",other:"{count} more"}},"Show fewer":{de:"Weniger anzeigen",en:"Show fewer"},"Add device":{de:"Gerät anlernen",en:"Add device"},"Pair device":{de:"Gerät anlernen",en:"Pair device"},"reportValueUsage 0":{de:"reportValueUsage 0",en:"reportValueUsage 0"},"reportValueUsage 1":{de:"reportValueUsage 1",en:"reportValueUsage 1"},"Expand row":{de:"Zeile aufklappen",en:"Expand row"},"Collapse row":{de:"Zeile zuklappen",en:"Collapse row"},"Sorted ascending":{de:"Aufsteigend sortiert",en:"Sorted ascending"},"Sorted descending":{de:"Absteigend sortiert",en:"Sorted descending"},"Showing {shown} of {total}":{de:"Zeige {shown} von {total}",en:"Showing {shown} of {total}"},"No devices - the interface has not reported any yet":{de:"Keine Geräte - die Schnittstelle hat noch keine gemeldet",en:"No devices - the interface has not reported any yet"},"No device matches the room or function filter":{de:"Kein Gerät passt zum Raum- oder Gewerkefilter",en:"No device matches the room or function filter"},"No row matches the filter":{de:"Keine Zeile passt zum Filter",en:"No row matches the filter"},"Clear filter":{de:"Filter löschen",en:"Clear filter"},"Resize column {column}":{de:"Breite der Spalte {column} ändern",en:"Resize column {column}"},"Fit column to content":{de:"Spaltenbreite an den Inhalt anpassen",en:"Fit column to content"},"Reset column widths":{de:"Spaltenbreiten zurücksetzen",en:"Reset column widths"},"Column widths":{de:"Spaltenbreiten",en:"Column widths"},"Copy name":{de:"Namen kopieren",en:"Copy name"},"Copy address":{de:"Adresse kopieren",en:"Copy address"},Copied:{de:"Kopiert",en:"Copied"},"Could not copy - the text is selected":{de:"Kopieren nicht möglich - der Text ist markiert",en:"Could not copy - the text is selected"},Configured:{de:"Konfiguriert",en:"Configured"},"Use {interface} as receiver":{de:"{interface} als Empfänger verwenden",en:"Use {interface} as receiver"},"Assign the best receiver":{de:"Besten Empfänger zuweisen",en:"Assign the best receiver"},"Best receiver":{de:"Bester Empfänger",en:"Best receiver"},"Only one interface":{de:"Nur eine Schnittstelle",en:"Only one interface"},"Which interface receives each device best, from the levels the interfaces last measured. Nothing is written until you confirm; every device is one setBidcosInterface.":{de:"Welche Schnittstelle jedes Gerät am besten empfängt, aus den zuletzt gemessenen Pegeln. Geschrieben wird erst nach Bestätigung, jedes Gerät ist ein setBidcosInterface.",en:"Which interface receives each device best, from the levels the interfaces last measured. Nothing is written until you confirm; every device is one setBidcosInterface."},Margin:{de:"Mindestabstand",en:"Margin"},"A switch is proposed only when the best interface receives the device at least this much better than the configured one - two reads of the same link differ by a few dB.":{de:"Ein Wechsel wird nur vorgeschlagen, wenn die beste Schnittstelle das Gerät um mindestens so viel besser empfängt als die konfigurierte - zwei Messungen derselben Strecke unterscheiden sich um einige dB.",en:"A switch is proposed only when the best interface receives the device at least this much better than the configured one - two reads of the same link differ by a few dB."},Proposed:{de:"Vorgeschlagen",en:"Proposed"},"Very good (maximum)":{de:"Sehr gut (Maximum)",en:"Very good (maximum)"},"Very good":{de:"Sehr gut",en:"Very good"},Good:{de:"Gut",en:"Good"},"Good (normal operation)":{de:"Gut (Normalbetrieb)",en:"Good (normal operation)"},Sufficient:{de:"Ausreichend",en:"Sufficient"},"Sufficient to weak":{de:"Ausreichend bis schwach",en:"Sufficient to weak"},Poor:{de:"Schlecht",en:"Poor"},Critical:{de:"Kritisch",en:"Critical"},Gain:{de:"Gewinn",en:"Gain"},"Below the margin":{de:"Unter dem Mindestabstand",en:"Below the margin"},"Not heard by the configured receiver":{de:"Vom konfigurierten Empfänger nicht gehört",en:"Not heard by the configured receiver"},"Every device is on the receiver that hears it best":{de:"Jedes Gerät ist auf dem Empfänger, der es am besten hört",en:"Every device is on the receiver that hears it best"},"Not listed: {keep} on their best receiver, {unmeasured} without a measurement, {roaming} roaming":{de:"Nicht aufgeführt: {keep} auf ihrem besten Empfänger, {unmeasured} ohne Messwert, {roaming} mit Roaming",en:"Not listed: {keep} on their best receiver, {unmeasured} without a measurement, {roaming} roaming"},"Assign ({count})":{de:"Zuweisen ({count})",en:"Assign ({count})"},"{done} of {total} assigned":{de:"{done} von {total} zugewiesen",en:"{done} of {total} assigned"},install:{de:"installieren",en:"install"},"Install firmware {version}":{de:"Firmware {version} installieren",en:"Install firmware {version}"},"Overwrite channel names":{de:"Kanalnamen überschreiben",en:"Overwrite channel names"},"Do you really want to delete the device {name}?":{de:"Wollen Sie das Gerät {name} wirklich löschen?",en:"Do you really want to delete the device {name}?"},"Unlearn and reset the device to factory defaults":{de:"Ablernen und Gerät auf Werkseinstellungen zurücksetzen",en:"Unlearn and reset the device to factory defaults"},"Unlearn only (direct links are kept)":{de:"Nur ablernen (Direktverknüpfungen bleiben erhalten)",en:"Unlearn only (direct links are kept)"},"If the device cannot be reached:":{de:"Falls Gerät nicht erreichbar:",en:"If the device cannot be reached:"},"Delete at the next opportunity":{de:"Bei nächster Gelegenheit löschen",en:"Delete at the next opportunity"},"Delete from the interface process only":{de:"Nur aus dem Schnittstellenprozess löschen",en:"Delete from the interface process only"},"New device":{de:"Neues Gerät",en:"New device"},"No suitable device available":{de:"Kein passendes Gerät vorhanden",en:"No suitable device available"},"Select a device":{de:"Ein Gerät auswählen",en:"Select a device"},"Select one or more channels":{de:"Einen oder mehrere Kanäle auswählen",en:"Select one or more channels"},"This device carries the DontDelete flag":{de:"Dieses Gerät trägt das Flag DontDelete",en:"This device carries the DontDelete flag"},"Only available on BidCos interfaces":{de:"Nur bei BidCos-Schnittstellen verfügbar",en:"Only available on BidCos interfaces"},"This interface cannot pair devices":{de:"Diese Schnittstelle kann keine Geräte anlernen",en:"This interface cannot pair devices"},"reportValueUsage {value}: {count} datapoints on {channels} channels":{de:"reportValueUsage {value}: {count} Datenpunkte auf {channels} Kanälen",en:"reportValueUsage {value}: {count} datapoints on {channels} channels"},"SERVICE Paramset":{de:"SERVICE Parametersatz",en:"SERVICE Paramset"},Preview:{de:"Vorschau",en:"Preview"},Write:{de:"Schreiben",en:"Write"},Parameter:{de:"Parameter",en:"Parameter"},"Current value":{de:"Aktueller Wert",en:"Current value"},"New value":{de:"Neuer Wert",en:"New value"},"Nothing has changed - nothing will be written":{de:"Nichts geändert - es wird nichts geschrieben",en:"Nothing has changed - nothing will be written"},"Write every parameter, not only the changed ones":{de:"Alle Parameter schreiben, nicht nur die geänderten",en:"Write every parameter, not only the changed ones"},"Show hidden parameters":{de:"Ausgeblendete Parameter zeigen",en:"Show hidden parameters"},"Suppress all":{de:"Alle unterdrücken",en:"Suppress all"},suppressed:{de:"unterdrückt",en:"suppressed"},"not suppressed":{de:"nicht unterdrückt",en:"not suppressed"},Suppress:{de:"Unterdrücken",en:"Suppress"},Unsuppress:{de:"Unterdrückung aufheben",en:"Unsuppress"},"Service message suppression":{de:"Unterdrückung von Servicemeldungen",en:"Service message suppression"},"Nothing is sent until Apply; the preview lists every call first.":{de:"Bis „Übernehmen“ wird nichts gesendet; die Vorschau zeigt vorher jeden Aufruf.",en:"Nothing is sent until Apply; the preview lists every call first."},"{count} calls will be made":{de:{one:"{count} Aufruf wird gesendet",other:"{count} Aufrufe werden gesendet"},en:{one:"{count} call will be made",other:"{count} calls will be made"}},"Routing table":{de:"Routing-Tabelle",en:"Routing table"},"Read from the device itself; every read costs duty cycle, so it is read once when this opens.":{de:"Direkt vom Gerät gelesen; jedes Lesen kostet Duty Cycle, deshalb einmal beim Öffnen.",en:"Read from the device itself; every read costs duty cycle, so it is read once when this opens."},"No routes: the device reported an empty table.":{de:"Keine Routen: das Gerät hat eine leere Tabelle gemeldet.",en:"No routes: the device reported an empty table."},Destination:{de:"Ziel",en:"Destination"},"Next hop":{de:"Nächster Hop",en:"Next hop"},Hops:{de:"Hops",en:"Hops"},hops:{de:{one:"Hop",other:"Hops"},en:{one:"hop",other:"hops"}},Neighbour:{de:"Nachbar",en:"Neighbour"},Static:{de:"Statisch",en:"Static"},Router:{de:"Router",en:"Router"},"Access controller":{de:"Access Controller",en:"Access controller"},Portable:{de:"Tragbar",en:"Portable"},"Listener mode":{de:"Empfangsmodus",en:"Listener mode"},Valid:{de:"Gültig",en:"Valid"},"Unsuppress all":{de:"Keine unterdrücken",en:"Unsuppress all"},"A suppressed one reports a value that raises no message; the CCU shows it as inactive.":{de:"Eine unterdrückte meldet einen Wert, der keine Meldung auslöst; die CCU zeigt sie als inaktiv.",en:"A suppressed one reports a value that raises no message; the CCU shows it as inactive."},"The CCU stops reporting {datapoint} for this channel: the HmIP interface reports a value that raises no message (suppressServiceMessages). The device's other messages are not affected. Undo with “Unsuppress”.":{de:"Die Zentrale meldet {datapoint} für diesen Kanal nicht mehr: die HmIP-Schnittstelle liefert dafür einen Wert, der keine Meldung auslöst (suppressServiceMessages). Andere Meldungen des Geräts sind nicht betroffen. Rückgängig mit „Unterdrückung aufheben“.",en:"The CCU stops reporting {datapoint} for this channel: the HmIP interface reports a value that raises no message (suppressServiceMessages). The device's other messages are not affected. Undo with “Unsuppress”."},"The CCU reports {datapoint} for this channel again: lifts the suppression (suppressServiceMessages with suppress=false).":{de:"Die Zentrale meldet {datapoint} für diesen Kanal wieder: hebt die Unterdrückung auf (suppressServiceMessages mit suppress=false).",en:"The CCU reports {datapoint} for this channel again: lifts the suppression (suppressServiceMessages with suppress=false)."},"other firmware or device type":{de:"andere Firmware oder anderer Gerätetyp",en:"other firmware or device type"},"Add link":{de:"Verknüpfung anlegen",en:"Add link"},"No channel of this interface can be the sender of a link":{de:"Kein Kanal dieser Schnittstelle kann Sender einer Verknüpfung sein",en:"No channel of this interface can be the sender of a link"},"Select one link":{de:"Eine Verknüpfung auswählen",en:"Select one link"},"No channel can receive from this sender":{de:"Kein Kanal kann von diesem Sender empfangen",en:"No channel can receive from this sender"},"{count} defective links":{de:{one:"{count} defekte Verknüpfung",other:"{count} defekte Verknüpfungen"},en:{one:"{count} defective link",other:"{count} defective links"}},"Defective link":{de:"Defekte Verknüpfung",en:"Defective link"},Profile:{de:"Profil",en:"Profile"},"Expert view":{de:"Expertenansicht",en:"Expert view"},"Short key press":{de:"Kurzer Tastendruck",en:"Short key press"},"Long key press":{de:"Langer Tastendruck",en:"Long key press"},"Not active":{de:"Nicht aktiv",en:"Not active"},Permanent:{de:"dauerhaft",en:"permanent"},"Enter value":{de:"Wert eingeben",en:"Enter value"},"Marked: the parameters the easy mode of this channel shows":{de:"Markiert: die Parameter, die der Easy-Mode dieses Kanals zeigt",en:"Marked: the parameters the easy mode of this channel shows"},"Marked: the parameters the easy mode of this profile shows":{de:"Markiert: die Parameter, die der Easy-Mode dieses Profils zeigt",en:"Marked: the parameters the easy mode of this profile shows"},"The CCU's form for this profile is not known here: every parameter is shown, the ones the profile fixes greyed out.":{de:"Die Maske der CCU für dieses Profil ist hier nicht bekannt: alle Parameter werden gezeigt, die vom Profil festgelegten ausgegraut.",en:"The CCU's form for this profile is not known here: every parameter is shown, the ones the profile fixes greyed out."},"Repair configuration":{de:"Konfiguration reparieren",en:"Repair configuration"},"Communication disturbed":{de:"Kommunikation gestört",en:"Communication disturbed"},"Communication was disturbed":{de:"Kommunikation war gestört",en:"Communication was disturbed"},"Low battery":{de:"Batterie schwach",en:"Low battery"},"Configuration pending":{de:"Konfiguration ausstehend",en:"Configuration pending"},"Update pending":{de:"Update ausstehend",en:"Update pending"},Sabotage:{de:"Sabotage",en:"Sabotage"},Fault:{de:"Fehler",en:"Fault"},"Fault report":{de:"Fehlermeldung",en:"Fault report"},"The configuration could not be transferred to the device":{de:"Die Konfiguration konnte nicht zum Gerät übertragen werden",en:"The configuration could not be transferred to the device"},"A configuration is queued; the device takes it when it next wakes up":{de:"Eine Konfiguration ist eingereiht; das Gerät übernimmt sie beim nächsten Aufwachen",en:"A configuration is queued; the device takes it when it next wakes up"},"On BidCos a pending configuration is normal: it is queued and the device takes it when it next wakes up.":{de:"Bei BidCos ist eine ausstehende Konfiguration normal: sie ist eingereiht und das Gerät übernimmt sie beim nächsten Aufwachen.",en:"On BidCos a pending configuration is normal: it is queued and the device takes it when it next wakes up."},"These channels store a parameter their description does not have. No RPC method removes it: the device has to be deleted and paired again, or a CCU backup from before the bad write restored.":{de:"Diese Kanäle speichern einen Parameter, den ihre Beschreibung nicht kennt. Keine RPC-Methode entfernt ihn: das Gerät muss gelöscht und neu angelernt werden, oder ein CCU-Backup von vor dem fehlerhaften Schreibvorgang eingespielt werden.",en:"These channels store a parameter their description does not have. No RPC method removes it: the device has to be deleted and paired again, or a CCU backup from before the bad write restored."},"Nothing has to be corrected":{de:"Es muss nichts korrigiert werden",en:"Nothing has to be corrected"},"Additional BidCos recovery":{de:"Zusätzliche BidCos-Reparatur",en:"Additional BidCos recovery"},Channel:{de:"Kanal",en:"Channel"},"Read back":{de:"Rückgelesen",en:"Read back"},"The interface answered ok but stored something else":{de:"Die Schnittstelle hat ok geantwortet, aber etwas anderes gespeichert",en:"The interface answered ok but stored something else"},"What was sent":{de:"Gesendet",en:"What was sent"},"Only STICKY_UNREACH and SABOTAGE can be acknowledged":{de:"Nur STICKY_UNREACH und SABOTAGE lassen sich bestätigen",en:"Only STICKY_UNREACH and SABOTAGE can be acknowledged"},"{count} of {total} on this box":{de:"{count} von {total} auf dieser Zentrale",en:"{count} of {total} on this box"},"Also on this box: {list}. Click to switch to {next}.":{de:"Außerdem auf dieser Zentrale: {list}. Ein Klick wechselt zu {next}.",en:"Also on this box: {list}. Click to switch to {next}."},Pause:{de:"Anhalten",en:"Pause"},"Events per device":{de:"Ereignisse je Gerät",en:"Events per device"},Peer:{de:"Gegenstelle",en:"Peer"},"Heard best by {address}":{de:"Am besten empfangen von {address}",en:"Heard best by {address}"},History:{de:"Verlauf",en:"History"},optional:{de:"optional",en:"optional"},Mode:{de:"Modus",en:"Mode"},"Serial number":{de:"Seriennummer",en:"Serial number"},"Temporary key":{de:"Temporärer Schlüssel",en:"Temporary key"},"The security key of the system the device was last paired to, if it holds one. Leave it empty otherwise: the system asks for it when a device is refused for its key.":{de:"Der Sicherheitsschlüssel des Systems, an dem das Gerät zuletzt angelernt war, falls es einen trägt. Sonst leer lassen: Das System fragt danach, wenn ein Gerät wegen seines Schlüssels abgewiesen wird.",en:"The security key of the system the device was last paired to, if it holds one. Leave it empty otherwise: the system asks for it when a device is refused for its key."},"Security key of the other system":{de:"Sicherheitsschlüssel des anderen Systems",en:"Security key of the other system"},"The device {serial} could not be paired: it holds a security key this system does not know. Enter the security key of the system it was paired to and try again.":{de:"Das Gerät {serial} konnte nicht angelernt werden: Es trägt einen Sicherheitsschlüssel, den dieses System nicht kennt. Geben Sie den Sicherheitsschlüssel des Systems ein, an dem es angelernt war, und versuchen Sie es erneut.",en:"The device {serial} could not be paired: it holds a security key this system does not know. Enter the security key of the system it was paired to and try again."},"Set the key and try again":{de:"Schlüssel setzen und erneut versuchen",en:"Set the key and try again"},"Normal install mode":{de:"Normaler Anlernmodus",en:"Normal install mode"},"Write the MASTER defaults and delete the existing links":{de:"Default-Parameter in Paramset MASTER schreiben, bestehende Verknüpfungen löschen",en:"Write the MASTER defaults and delete the existing links"},"With SGTIN and key":{de:"Mit SGTIN und Schlüssel",en:"With SGTIN and key"},"With SGTIN only (key server)":{de:"Nur mit SGTIN (Key Server)",en:"With SGTIN only (key server)"},"Any device (no SGTIN)":{de:"Beliebiges Gerät (ohne SGTIN)",en:"Any device (no SGTIN)"},"Works offline: the key from the sticker is all the interface needs.":{de:"Funktioniert offline: Der Schlüssel vom Aufkleber ist alles, was die Schnittstelle braucht.",en:"Works offline: the key from the sticker is all the interface needs."},"The key comes from eQ-3's key server: the box needs internet access.":{de:"Der Schlüssel kommt vom Key Server von eQ-3: Die Zentrale braucht Internetzugang.",en:"The key comes from eQ-3's key server: the box needs internet access."},"Pairs the next device in factory state that asks to join. Without a key the interface asks eQ-3's key server, so the box needs internet access unless a local key mapping is configured.":{de:"Lernt das nächste Gerät im Werkszustand an, das sich meldet. Ohne Schlüssel fragt die Schnittstelle den Key Server von eQ-3, die Zentrale braucht also Internetzugang, sofern keine lokale Schlüsselzuordnung eingerichtet ist.",en:"Pairs the next device in factory state that asks to join. Without a key the interface asks eQ-3's key server, so the box needs internet access unless a local key mapping is configured."},"Pairs the next device in factory state that asks to join, if its key is on the system: the system's key mode never asks eQ-3's key server. {count} device keys are stored on the system.":{de:{one:"Lernt das nächste Gerät im Werkszustand an, das sich meldet, sofern sein Schlüssel auf dem System liegt: Der Schlüsselmodus des Systems fragt den Key Server von eQ-3 nie. Auf dem System ist {count} Geräteschlüssel gespeichert.",other:"Lernt das nächste Gerät im Werkszustand an, das sich meldet, sofern sein Schlüssel auf dem System liegt: Der Schlüsselmodus des Systems fragt den Key Server von eQ-3 nie. Auf dem System sind {count} Geräteschlüssel gespeichert."},en:{one:"Pairs the next device in factory state that asks to join, if its key is on the system: the system's key mode never asks eQ-3's key server. {count} device key is stored on the system.",other:"Pairs the next device in factory state that asks to join, if its key is on the system: the system's key mode never asks eQ-3's key server. {count} device keys are stored on the system."}},"The install mode has ended and no device has joined. A device that is still paired with another central sends no inclusion request: reset it to factory state and start again.":{de:"Der Anlernmodus ist abgelaufen, und kein Gerät hat sich angemeldet. Ein Gerät, das noch an einer anderen Zentrale angelernt ist, sendet keine Anlernanfrage: Gerät auf Werkseinstellungen zurücksetzen und erneut starten.",en:"The install mode has ended and no device has joined. A device that is still paired with another central sends no inclusion request: reset it to factory state and start again."},"The install mode has ended and no device has joined. Put the device into its pairing mode and start again. A device that holds another system's security key is reported here and that key asked for; a factory reset does not remove it.":{de:"Der Anlernmodus ist abgelaufen, und kein Gerät hat sich angemeldet. Bringen Sie das Gerät in den Anlernmodus und starten Sie erneut. Ein Gerät mit dem Sicherheitsschlüssel eines anderen Systems wird hier gemeldet und der Schlüssel abgefragt; ein Zurücksetzen auf Werkseinstellungen entfernt ihn nicht.",en:"The install mode has ended and no device has joined. Put the device into its pairing mode and start again. A device that holds another system's security key is reported here and that key asked for; a factory reset does not remove it."},"QR scanner":{de:"QR-Scanner",en:"QR scanner"},Scan:{de:"Scannen",en:"Scan"},Stop:{de:"Stoppen",en:"Stop"},"The key from the sticker (26 characters, dashes optional), or scan the QR code.":{de:"Der Schlüssel vom Aufkleber (26 Zeichen, Bindestriche optional), oder den QR-Code scannen.",en:"The key from the sticker (26 characters, dashes optional), or scan the QR code."},"An access point (HAP, DRAP) is paired like a device: factory-reset it, start the install mode, then power it. System and access point must be in the same network.":{de:"Ein Access Point (HAP, DRAP) wird wie ein Gerät angelernt: auf Werkseinstellungen zurücksetzen, den Anlernmodus starten, dann mit Strom versorgen. System und Access Point müssen im selben Netzwerk sein.",en:"An access point (HAP, DRAP) is paired like a device: factory-reset it, start the install mode, then power it. System and access point must be in the same network."},"That is not a HomematicIP device code":{de:"Das ist kein HomematicIP-Gerätecode",en:"That is not a HomematicIP device code"},"Start install mode":{de:"Anlernmodus aktivieren",en:"Start install mode"},"{count} seconds left":{de:{one:"Noch {count} Sekunde",other:"Noch {count} Sekunden"},en:{one:"{count} second left",other:"{count} seconds left"}},"BidCos-Wired has no install mode; the interface searches its bus for new devices.":{de:"BidCos-Wired hat keinen Anlernmodus; die Schnittstelle durchsucht ihren Bus nach neuen Geräten.",en:"BidCos-Wired has no install mode; the interface searches its bus for new devices."},"A new version is available":{de:"Eine neue Version ist verfügbar",en:"A new version is available"},Downloading:{de:"Wird geladen",en:"Downloading"},"The update is ready and will be installed when you quit":{de:"Die Aktualisierung ist bereit und wird beim Beenden installiert",en:"The update is ready and will be installed when you quit"},"The update will be installed when you quit":{de:"Die Aktualisierung wird beim Beenden installiert",en:"The update will be installed when you quit"},Download:{de:"Herunterladen",en:"Download"},"Install on quit":{de:"Beim Beenden installieren",en:"Install on quit"},"The update check failed":{de:"Die Suche nach Aktualisierungen ist fehlgeschlagen",en:"The update check failed"},"The download of the update failed":{de:"Das Herunterladen der Aktualisierung ist fehlgeschlagen",en:"The download of the update failed"},"The update failed":{de:"Die Aktualisierung ist fehlgeschlagen",en:"The update failed"},"Releases on GitHub":{de:"Versionen auf GitHub",en:"Releases on GitHub"},"Opens the installer of the new version in your browser":{de:"Öffnet das Installationsprogramm der neuen Version im Browser",en:"Opens the installer of the new version in your browser"},"Device data":{de:"Gerätedaten",en:"Device data"},"Homematic Manager on GitHub":{de:"Homematic Manager auf GitHub",en:"Homematic Manager on GitHub"},Connection:{de:"Verbindung",en:"Connection"},Callback:{de:"Rückruf",en:"Callback"},Behaviour:{de:"Verhalten",en:"Behaviour"},"Configured interfaces":{de:"Konfigurierte Schnittstellen",en:"Configured interfaces"},"An extra interface is connected once it is ticked here":{de:"Eine zusätzliche Schnittstelle wird verbunden, sobald sie hier angehakt ist",en:"An extra interface is connected once it is ticked here"},"Host name or address of the CCU":{de:"Hostname oder Adresse der CCU",en:"Host name or address of the CCU"},"Searches the network for CCUs over UDP":{de:"Sucht per UDP im Netz nach CCUs",en:"Searches the network for CCUs over UDP"},"The encrypted ports of the CCU":{de:"Die verschlüsselten Ports der CCU",en:"The encrypted ports of the CCU"},"The address the interface processes call back to":{de:"Die Adresse, an die die Schnittstellenprozesse zurückrufen",en:"The address the interface processes call back to"},"Probes the known ports in the background":{de:"Prüft die bekannten Ports im Hintergrund",en:"Probes the known ports in the background"},"ReGa supplies the friendly names":{de:"ReGa liefert die Anzeigenamen",en:"ReGa supplies the friendly names"},"Only possible with ReGa":{de:"Nur mit ReGa möglich",en:"Only possible with ReGa"},"Switched off: the system has no ReGaHSS":{de:"Abgeschaltet: das System hat kein ReGaHSS",en:"Switched off: the system has no ReGaHSS"},"Shortest pause between two writes":{de:"Kürzeste Pause zwischen zwei Schreibzugriffen",en:"Shortest pause between two writes"},"Empty switches the dumps off":{de:"Leer schaltet die Mitschrift ab",en:"Empty switches the dumps off"},"Discards the caches when this is saved":{de:"Verwirft die Caches beim Speichern",en:"Discards the caches when this is saved"},"Extra interfaces":{de:"Zusätzliche Schnittstellen",en:"Extra interfaces"},"Add interface":{de:"Schnittstelle hinzufügen",en:"Add interface"},Remove:{de:"Entfernen",en:"Remove"},Host:{de:"Host",en:"Host"},Port:{de:"Port",en:"Port"},Path:{de:"Pfad",en:"Path"},Protocol:{de:"Protokoll",en:"Protocol"},"Searching...":{de:"Suche läuft...",en:"Searching..."},"Show the raw parameters as well":{de:"Rohe Parameter zusätzlich anzeigen",en:"Show the raw parameters as well"},Durations:{de:"Zeitdauern",en:"Durations"},"A duration is stored as a unit and a count; both are shown next to the seconds.":{de:"Eine Zeitdauer wird als Einheit und Faktor gespeichert; beides steht neben den Sekunden.",en:"A duration is stored as a unit and a count; both are shown next to the seconds."},seconds:{de:"Sekunden",en:"seconds"},unit:{de:"Einheit",en:"unit"},count:{de:"Faktor",en:"count"},"Not used / for ever":{de:"Nicht benutzt / dauerhaft",en:"Not used / for ever"},"The device holds a value this pair cannot express":{de:"Das Gerät hält einen Wert, den dieses Paar nicht ausdrücken kann",en:"The device holds a value this pair cannot express"},"The device can only do {seconds}":{de:"Das Gerät kann nur {seconds}",en:"The device can only do {seconds}"},"Week programme":{de:"Wochenprogramm",en:"Week programme"},"Switching programme":{de:"Schaltprogramm",en:"Switching programme"},Weekday:{de:"Wochentag",en:"Weekday"},Weekdays:{de:"Wochentage",en:"Weekdays"},Slot:{de:"Abschnitt",en:"Slot"},until:{de:"bis",en:"until"},Copy:{de:"Kopieren",en:"Copy"},"Copy day to":{de:"Tag kopieren nach",en:"Copy day to"},"Copy profile to":{de:"Profil kopieren nach",en:"Copy profile to"},Monday:{de:"Montag",en:"Monday"},Tuesday:{de:"Dienstag",en:"Tuesday"},Wednesday:{de:"Mittwoch",en:"Wednesday"},Thursday:{de:"Donnerstag",en:"Thursday"},Friday:{de:"Freitag",en:"Friday"},Saturday:{de:"Samstag",en:"Saturday"},Sunday:{de:"Sonntag",en:"Sunday"},"The end times of a day rise until {end}, and the last one is {end}":{de:"Die Endzeiten eines Tages steigen bis {end}, und die letzte ist {end}",en:"The end times of a day rise until {end}, and the last one is {end}"},"{day}: end time {slot} is not after the one before it":{de:"{day}: Endzeit {slot} liegt nicht nach der vorherigen",en:"{day}: end time {slot} is not after the one before it"},"{day}: end time {slot} comes after the day has ended":{de:"{day}: Endzeit {slot} liegt hinter dem Ende des Tages",en:"{day}: end time {slot} comes after the day has ended"},"{day}: the last end time must be {end}":{de:"{day}: die letzte Endzeit muss {end} sein",en:"{day}: the last end time must be {end}"},"A time between 00:00 and {end}":{de:"Eine Zeit zwischen 00:00 und {end}",en:"A time between 00:00 and {end}"},Time:{de:"Zeit",en:"Time"},Level:{de:"Stufe",en:"Level"},Condition:{de:"Bedingung",en:"Condition"},"Astro offset":{de:"Astro-Versatz",en:"Astro offset"},"Target channels":{de:"Zielkanäle",en:"Target channels"},Unused:{de:"Unbenutzt",en:"Unused"},"No weekday chosen - the slot does nothing":{de:"Kein Wochentag gewählt - der Abschnitt tut nichts",en:"No weekday chosen - the slot does nothing"},"Blind calibration":{de:"Jalousie-Kalibrierung",en:"Blind calibration"},"The running times of a reference run, in plain seconds next to the value the device stores.":{de:"Die Laufzeiten einer Referenzfahrt, in Sekunden neben dem Wert, den das Gerät speichert.",en:"The running times of a reference run, in plain seconds next to the value the device stores."},"Named options":{de:"Benannte Auswahlen",en:"Named options"},"These values have names in the CCU string table that the description does not carry.":{de:"Diese Werte haben Namen in der CCU-Zeichenkettentabelle, die die Beschreibung nicht mitliefert.",en:"These values have names in the CCU string table that the description does not carry."},Rooms:{de:"Räume",en:"Rooms"},Functions:{de:"Gewerke",en:"Functions"},Room:{de:"Raum",en:"Room"},Function:{de:"Gewerk",en:"Function"},"All rooms":{de:"Alle Räume",en:"All rooms"},"All functions":{de:"Alle Gewerke",en:"All functions"},"Assign to room":{de:"Raum zuordnen",en:"Assign to room"},"Assign to function":{de:"Gewerk zuordnen",en:"Assign to function"},"Rooms and functions":{de:"Räume und Gewerke",en:"Rooms and functions"},"Filter rooms":{de:"Räume filtern",en:"Filter rooms"},"Filter functions":{de:"Gewerke filtern",en:"Filter functions"},"No match":{de:"Kein Treffer",en:"No match"},"New room…":{de:"Neuer Raum…",en:"New room…"},"New function…":{de:"Neues Gewerk…",en:"New function…"},"Name of the new room":{de:"Name des neuen Raums",en:"Name of the new room"},"Name of the new function":{de:"Name des neuen Gewerks",en:"Name of the new function"},"Not saved: {message}":{de:"Nicht gespeichert: {message}",en:"Not saved: {message}"},"The name was not saved":{de:"Der Name wurde nicht gespeichert",en:"The name was not saved"},"{count} changes were not saved":{de:{one:"Eine Änderung wurde nicht gespeichert. Sie ist markiert; Übernehmen versucht sie erneut.",other:"{count} Änderungen wurden nicht gespeichert. Sie sind markiert; Übernehmen versucht sie erneut."},en:{one:"One change was not saved. It is marked; Apply tries it again.",other:"{count} changes were not saved. They are marked; Apply tries them again."}},"{count} rows selected":{de:{one:"Eine Zeile ausgewählt",other:"{count} Zeilen ausgewählt"},en:{one:"One row selected",other:"{count} rows selected"}},"Select one or more rows":{de:"Eine oder mehrere Zeilen auswählen",en:"Select one or more rows"},"The store does not take writes":{de:"Der Speicher nimmt keine Änderungen an",en:"The store does not take writes"},"No store connected":{de:"Kein Speicher verbunden",en:"No store connected"},"No rooms yet":{de:"Noch keine Räume",en:"No rooms yet"},"No functions yet":{de:"Noch keine Gewerke",en:"No functions yet"},Add:{de:"Anlegen",en:"Add"},"Add below":{de:"Darunter anlegen",en:"Add below"},Move:{de:"Verschieben",en:"Move"},"Move to":{de:"Verschieben nach",en:"Move to"},"Top level":{de:"Oberste Ebene",en:"Top level"},"New name":{de:"Neuer Name",en:"New name"},"Delete and detach":{de:"Löschen und Zuordnungen entfernen",en:"Delete and detach"},"Still assigned here - the assignments are removed with the node:":{de:"Noch zugeordnet - die Zuordnungen werden mit dem Knoten entfernt:",en:"Still assigned here - the assignments are removed with the node:"},"Nothing is assigned here":{de:"Hier ist nichts zugeordnet",en:"Nothing is assigned here"},"A floor is a room with rooms below it: add one, then add rooms below it.":{de:"Eine Etage ist ein Raum mit Räumen darunter: erst die Etage anlegen, dann Räume darunter.",en:"A floor is a room with rooms below it: add one, then add rooms below it."},"Rooms are a flat list on this system: no floors, no room below another.":{de:"Räume sind auf diesem System eine flache Liste: keine Etagen, kein Raum unter einem anderen.",en:"Rooms are a flat list on this system: no floors, no room below another."},Metadata:{de:"Metadaten",en:"Metadata"},Taxonomy:{de:"Taxonomie",en:"Taxonomy"},"New taxonomy":{de:"Neue Taxonomie",en:"New taxonomy"},"No taxonomies yet":{de:"Noch keine Taxonomien",en:"No taxonomies yet"},"{count} taxonomies":{de:{one:"{count} Taxonomie",other:"{count} Taxonomien"},en:{one:"{count} taxonomy",other:"{count} taxonomies"}},"{count} rooms":{de:{one:"{count} Raum",other:"{count} Räume"},en:{one:"{count} room",other:"{count} rooms"}},"{count} functions":{de:{one:"{count} Gewerk",other:"{count} Gewerke"},en:{one:"{count} function",other:"{count} functions"}},"Select a row":{de:"Eine Zeile auswählen",en:"Select a row"},"Select a node":{de:"Einen Knoten auswählen",en:"Select a node"},"Select a taxonomy or a node":{de:"Eine Taxonomie oder einen Knoten auswählen",en:"Select a taxonomy or a node"},"Names and rooms":{de:"Namen und Räume",en:"Names and rooms"},"Where names, rooms and functions are kept":{de:"Wo Namen, Räume und Gewerke gespeichert sind",en:"Where names, rooms and functions are kept"},Store:{de:"Speicher",en:"Store"},Automatic:{de:"Automatisch",en:"Automatic"},"This profile":{de:"Dieses Profil",en:"This profile"},"API token":{de:"API-Token",en:"API token"},"Only needed off the box":{de:"Nur nötig, wenn nicht auf der Box",en:"Only needed off the box"},"From the pairing, or the system's API tokens page":{de:"Aus der Kopplung oder von der API-Token-Seite des Systems",en:"From the pairing, or the system's API tokens page"},"Test connection":{de:"Verbindung testen",en:"Test connection"},"Testing…":{de:"Test läuft…",en:"Testing…"},"Nothing answers at {url} ({reason})":{de:"Unter {url} antwortet nichts ({reason})",en:"Nothing answers at {url} ({reason})"},"macOS may be blocking the local network: allow Homematic Manager under System Settings → Privacy & Security → Local Network, then quit and restart it":{de:"macOS blockiert womöglich das lokale Netzwerk: Homematic Manager unter Systemeinstellungen → Datenschutz & Sicherheit → Lokales Netzwerk erlauben, dann die App beenden und neu starten",en:"macOS may be blocking the local network: allow Homematic Manager under System Settings → Privacy & Security → Local Network, then quit and restart it"},"The certificate of {url} is not trusted ({code}); it can be trusted under Names and rooms":{de:"Dem Zertifikat von {url} wird nicht vertraut ({code}); unter Namen und Räume kann es vertraut werden",en:"The certificate of {url} is not trusted ({code}); it can be trusted under Names and rooms"},"A CCU or OpenCCU at {url}: XML-RPC with callbacks":{de:"Eine CCU oder OpenCCU unter {url}: XML-RPC mit Rückrufen",en:"A CCU or OpenCCU at {url}: XML-RPC with callbacks"},"openccu-lite ({implementation}) at {url}: lite-rpc, no callbacks":{de:"openccu-lite ({implementation}) unter {url}: lite-rpc, keine Rückrufe",en:"openccu-lite ({implementation}) at {url}: lite-rpc, no callbacks"},"no API token: pair the application with the system":{de:"kein API-Token: die Anwendung mit dem System koppeln",en:"no API token: pair the application with the system"},"the API token is refused":{de:"das API-Token wird abgelehnt",en:"the API token is refused"},"the API token reads names only: pair for devices and values":{de:"das API-Token liest nur Namen: für Geräte und Werte koppeln",en:"the API token reads names only: pair for devices and values"},"the API token is accepted":{de:"das API-Token wird akzeptiert",en:"the API token is accepted"},"None: an openccu-lite system does not call a remote client back; the events come from its stream.":{de:"Keiner: ein openccu-lite-System ruft einen entfernten Client nicht zurück; die Ereignisse kommen aus seinem Stream.",en:"None: an openccu-lite system does not call a remote client back; the events come from its stream."},Pair:{de:"Koppeln",en:"Pair"},"Asking the system…":{de:"Das System wird gefragt…",en:"Asking the system…"},"Approve it on the system's Status page: the same code is shown there.":{de:"Auf der Statusseite des Systems bestätigen: dort wird derselbe Code angezeigt.",en:"Approve it on the system's Status page: the same code is shown there."},"Paired: the token is in the field above. Save to connect.":{de:"Gekoppelt: das Token steht im Feld oben. Speichern verbindet.",en:"Paired: the token is in the field above. Save to connect."},"Asks an openccu-lite system for an API token: a code appears here and on its Status page, where an administrator approves it. The token replaces the one above, and the certificate is trusted from then on.":{de:"Fragt ein openccu-lite-System nach einem API-Token: ein Code erscheint hier und auf seiner Statusseite, wo ihn ein Administrator bestätigt. Das Token ersetzt das oben, und dem Zertifikat wird von da an vertraut.",en:"Asks an openccu-lite system for an API token: a code appears here and on its Status page, where an administrator approves it. The token replaces the one above, and the certificate is trusted from then on."},Reachable:{de:"Erreichbar",en:"Reachable"},Unreachable:{de:"Nicht erreichbar",en:"Unreachable"},"Read-only":{de:"Nur lesen",en:"Read-only"},Writable:{de:"Schreibbar",en:"Writable"},ro:{de:"ro",en:"ro"},"default {value}":{de:"Standard {value}",en:"default {value}"},"revision {revision}, {count} objects":{de:"Revision {revision}, {count} Objekte",en:"revision {revision}, {count} objects"},Routers:{de:"Router",en:"Routers"},Routing:{de:"Routing",en:"Routing"},View:{de:"Ansicht",en:"View"},on:{de:"an",en:"on"},off:{de:"aus",en:"off"},unknown:{de:"unbekannt",en:"unknown"},"Reading…":{de:"Wird gelesen…",en:"Reading…"},"Routes for other HmIP devices":{de:"Leitet für andere HmIP-Geräte weiter",en:"Routes for other HmIP devices"},"No device of this interface can route":{de:"Kein Gerät dieser Schnittstelle kann routen",en:"No device of this interface can route"},"{routing} of {capable} route":{de:{one:"{routing} von {capable} routet",other:"{routing} von {capable} routen"},en:{one:"{routing} of {capable} routes",other:"{routing} of {capable} route"}},"Switch routing on":{de:"Routing einschalten",en:"Switch routing on"},"Switch routing off":{de:"Routing ausschalten",en:"Switch routing off"},"Switch routing on?":{de:"Routing einschalten?",en:"Switch routing on?"},"Switch routing off?":{de:"Routing ausschalten?",en:"Switch routing off?"},"Switch on":{de:"Einschalten",en:"Switch on"},"Switch off":{de:"Ausschalten",en:"Switch off"},"The device then forwards frames for other HmIP devices that cannot reach the access point directly. The routes of the network change over the next minutes.":{de:"Das Gerät leitet dann Funktelegramme anderer HmIP-Geräte weiter, die den Access Point nicht direkt erreichen. Die Routen des Netzes ändern sich in den nächsten Minuten.",en:"The device then forwards frames for other HmIP devices that cannot reach the access point directly. The routes of the network change over the next minutes."},"Devices that reach the access point through this one have to find another route; until they do they may be unreachable.":{de:"Geräte, die den Access Point über dieses Gerät erreichen, müssen eine andere Route finden; bis dahin sind sie womöglich nicht erreichbar.",en:"Devices that reach the access point through this one have to find another route; until they do they may be unreachable."},"Writes ROUTER_MODULE_ENABLED = {value} to the MASTER paramset of {address}.":{de:"Schreibt ROUTER_MODULE_ENABLED = {value} in den MASTER-Parametersatz von {address}.",en:"Writes ROUTER_MODULE_ENABLED = {value} to the MASTER paramset of {address}."},"The interface offers no routing table for this device":{de:"Die Schnittstelle bietet für dieses Gerät keine Routing-Tabelle an",en:"The interface offers no routing table for this device"},"Read once from the device itself: costs duty cycle":{de:"Einmal direkt vom Gerät gelesen: kostet Duty Cycle",en:"Read once from the device itself: costs duty cycle"},List:{de:"Liste",en:"List"},Graph:{de:"Graph",en:"Graph"},"Access point":{de:"Access Point",en:"Access point"},Routes:{de:"Routen",en:"Routes"},"Routing graph":{de:"Routing-Graph",en:"Routing graph"},"Read routing tables":{de:"Routing-Tabellen lesen",en:"Read routing tables"},"No router that routes offers its routing table":{de:"Kein routender Router bietet seine Routing-Tabelle an",en:"No router that routes offers its routing table"},"Each table is read from its router over the air, one after the other":{de:"Jede Tabelle wird per Funk von ihrem Router gelesen, eine nach der anderen",en:"Each table is read from its router over the air, one after the other"},"Reading {done} of {total}…":{de:"Lese {done} von {total}…",en:"Reading {done} of {total}…"},"Last read {time}":{de:"Zuletzt gelesen {time}",en:"Last read {time}"},"Not read yet: the graph shows every device directly at the access point.":{de:"Noch nicht gelesen: der Graph zeigt jedes Gerät direkt am Access Point.",en:"Not read yet: the graph shows every device directly at the access point."},"Each router is asked once per read, over the air, with a pause between them; the result is kept until the next read. Entries of battery devices are what the router last heard and may be stale.":{de:"Jeder Router wird pro Lesen einmal per Funk gefragt, mit einer Pause dazwischen; das Ergebnis bleibt bis zum nächsten Lesen. Einträge von Batteriegeräten sind, was der Router zuletzt gehört hat, und können veraltet sein.",en:"Each router is asked once per read, over the air, with a pause between them; the result is kept until the next read. Entries of battery devices are what the router last heard and may be stale."},"Not answered":{de:"Nicht geantwortet",en:"Not answered"},"Route from a table":{de:"Route aus einer Tabelle",en:"Route from a table"},"Assumed: no table lists it":{de:"Angenommen: keine Tabelle nennt sie",en:"Assumed: no table lists it"},"No routes read yet":{de:"Noch keine Routen gelesen",en:"No routes read yet"},"The router did not answer: {error}":{de:"Der Router hat nicht geantwortet: {error}",en:"The router did not answer: {error}"},"Read from the device at {time}; not read again here.":{de:"Am {time} vom Gerät gelesen; hier nicht erneut gelesen.",en:"Read from the device at {time}; not read again here."}},N1={...Ph,...I1},Od=["de","en"],Vl="en",C1={de:"Deutsch",en:"English",tr:"Türkçe"};function Mh(){if(typeof navigator>"u")return[];const r=navigator.languages;return r!==void 0&&r.length>0?r:navigator.language===""?[]:[navigator.language]}function P1(r=Mh()){for(const e of r){const n=e.toLowerCase().split("-")[0],s=Od.find(a=>a===n);if(s!==void 0)return s}return Vl}function M1(r,e=Mh()){return(r===void 0||r==="auto"?void 0:Od.find(s=>s===r))??P1(e)}class O1{#e=C(Vl);#n=c(()=>D1(t(this.#e),{catalogue:N1}));constructor(e=Vl){u(this.#e,e,!0)}get language(){return t(this.#e)}set language(e){u(this.#e,e,!0)}t=(e,n={},s)=>t(this.#n).t(e,n,s);has=e=>t(this.#n).has(e)}var L1=y("<option> </option>"),F1=y('<select class="hmm-select hmm-language svelte-oq8zre"><option> </option><!></select>');function G1(r,e){ut(e,!0);let n=H(e,"language",15,"auto"),s=H(e,"label",3,"Language"),a=H(e,"autoLabel",3,"Browser language"),i=H(e,"onchange",3,void 0),o=H(e,"testId",3,void 0);var l=F1(),f=A(l),p=m(f,!0);f.value=f.__value="auto";var _=d(f);Xe(_,16,()=>Od,k=>k,(k,E)=>{var b=L1(),w=m(b,!0),x={};S(()=>{h(w,C1[E]),x!==(x=E)&&(b.value=(b.__value=x)??"")}),v(k,b)});var g;Xt(l),S(()=>{T(l,"aria-label",s()),T(l,"title",s()),T(l,"data-testid",o()),h(p,a()),g!==(g=n())&&(l.value=(l.__value=g)??"",Bn(l,g))}),re("change",l,k=>{n(k.currentTarget.value),i()?.(n())}),v(r,l),ft()}Et(["change"]);function U1(r,e){const n=e.trim().toLowerCase();return n===""?[...r]:r.filter(s=>[s.label,s.hint,s.description,s.value].some(a=>a!==void 0&&a.toLowerCase().includes(n)))}function Kc(r,e,n){for(let s=e+n;s>=0&&s<r.length;s+=n)if(r[s]?.disabled!==!0)return s;return e}var B1=y('<button type="button" class="hmm-multiselect-link svelte-vbwhwd"> </button> <button type="button" class="hmm-multiselect-link svelte-vbwhwd"> </button>',1),H1=y('<span class="hmm-multiselect-check" aria-hidden="true"> </span>'),V1=y('<span class="hmm-multiselect-hint svelte-vbwhwd"> </span>'),z1=y('<span class="hmm-multiselect-description svelte-vbwhwd"> </span>'),j1=y('<span class="hmm-multiselect-lines svelte-vbwhwd"><span class="hmm-multiselect-line svelte-vbwhwd"><span class="hmm-multiselect-label svelte-vbwhwd"> </span> <!></span> <!></span>'),W1=y("<span> </span>"),K1=y('<li><button type="button" role="option" tabindex="-1"><!> <!></button></li>'),Y1=y('<li class="hmm-multiselect-empty svelte-vbwhwd">—</li>'),q1=y('<div class="hmm-multiselect-menu svelte-vbwhwd"><div class="hmm-multiselect-head svelte-vbwhwd"><input class="hmm-input hmm-multiselect-filter svelte-vbwhwd" type="search" autocomplete="off"/> <!></div> <ul class="hmm-multiselect-list svelte-vbwhwd" role="listbox"><!> <!></ul></div>'),$1=y('<div><button type="button" class="hmm-button hmm-multiselect-button svelte-vbwhwd" aria-haspopup="listbox"><span class="hmm-multiselect-text svelte-vbwhwd"> </span> <span class="hmm-multiselect-arrow" aria-hidden="true">▾</span></button> <!></div>');function bi(r,e){ut(e,!0);let n=H(e,"selected",31,()=>We([])),s=H(e,"multiple",3,!0),a=H(e,"placeholder",3,""),i=H(e,"filterLabel",3,"Filter"),o=H(e,"checkAllLabel",3,"Check all"),l=H(e,"uncheckAllLabel",3,"Uncheck all"),f=H(e,"summary",3,void 0),p=H(e,"disabled",3,!1),_=H(e,"label",3,void 0),g=H(e,"onchange",3,void 0),k=H(e,"testId",3,void 0),E=H(e,"inline",3,!1),b=C(!1),w=C(""),x=C(void 0),D=C(void 0),N=C(void 0),R=C(0);const M=`hmm-multiselect-${Math.random().toString(36).slice(2,8)}`,z=c(()=>new Set(n())),$=c(()=>U1(e.options,t(w))),le=c(()=>t(b)&&t($)[t(R)]?`${M}-${t(R)}`:void 0),fe=c(()=>n().length===0?a():f()?f()(n(),e.options):n().length===1?e.options.find(G=>G.value===n()[0])?.label??n()[0]??"":`${n().length}`);function de(G){n(G),g()?.(G)}function B(){const G=t($).findIndex(Q=>t(z).has(Q.value));u(R,G<0?0:G,!0),u(b,!0)}function oe(G){u(b,!1),G&&t(D)?.focus()}function K(G){if(G.disabled!==!0){if(!s()){de([G.value]),oe(!0);return}de(t(z).has(G.value)?n().filter(Q=>Q!==G.value):[...n(),G.value])}}function X(){de(t($).filter(G=>G.disabled!==!0).map(G=>G.value))}function se(){de([])}function j(G){t(b)&&t(x)&&G.target instanceof Node&&!t(x).contains(G.target)&&u(b,!1)}ot(()=>{t(w),u(R,0)}),ot(()=>{if(!t(b)||!t(N))return;const G=t(N).querySelector(`#${M}-${t(R)}`);typeof G?.scrollIntoView=="function"&&G.scrollIntoView({block:"nearest"})});function ne(G){switch(G.key){case"ArrowDown":G.preventDefault(),u(R,Kc(t($),t(R),1),!0);break;case"ArrowUp":G.preventDefault(),u(R,Kc(t($),t(R),-1),!0);break;case"Enter":{G.preventDefault();const Q=t($)[t(R)];Q&&K(Q);break}case"Escape":G.preventDefault(),G.stopPropagation(),oe(!0);break;case"Tab":oe(!1);break}}function ye(G){!t(b)&&(G.key==="ArrowDown"||G.key==="ArrowUp")&&(G.preventDefault(),B())}function xe(G){G.key==="Escape"&&t(b)&&oe(!0)}function ie(G){return!!G.hint||!!G.description}function Ae(G){G.focus()}var Te=$1();Ir("mousedown",va,j),Ir("keydown",va,xe);let me;var P=A(Te),ce=A(P),be=m(ce,!0);fn(P,G=>u(D,G),()=>t(D));var ee=d(P,2);{var he=G=>{var Q=q1(),q=A(Q),Y=A(q);So(()=>xn(Y,()=>t(w),U=>u(w,U))),Vf(Y,U=>Ae?.(U));var ae=d(Y,2);{var J=U=>{var I=B1(),F=Ne(I),Ee=m(F,!0),Ie=d(F,2),Me=m(Ie,!0);S(()=>{h(Ee,o()),h(Me,l())}),re("click",F,X),re("click",Ie,se),v(U,I)};W(ae,U=>{s()&&U(J)})}var ve=d(q,2),ge=A(ve);Xe(ge,19,()=>t($),U=>U.value,(U,I,F)=>{var Ee=K1(),Ie=A(Ee);let Me;var Ve=A(Ie);{var ze=V=>{var L=H1(),Pe=m(L,!0);S(Ge=>h(Pe,Ge),[()=>t(z).has(t(I).value)?"☑":"☐"]),v(V,L)};W(Ve,V=>{s()&&V(ze)})}var nt=d(Ve,2);{var Ze=V=>{var L=j1(),Pe=A(L),Ge=A(Pe),qe=m(Ge,!0),we=d(Ge,2);{var Ce=pe=>{var De=V1(),Ue=m(De,!0);S(()=>h(Ue,t(I).hint)),v(pe,De)};W(we,pe=>{t(I).hint&&pe(Ce)})}var Oe=d(Pe,2);{var Be=pe=>{var De=z1(),Ue=m(De,!0);S(()=>{T(De,"title",t(I).description),h(Ue,t(I).description)}),v(pe,De)};W(Oe,pe=>{t(I).description&&pe(Be)})}S(pe=>{T(Pe,"title",pe),h(qe,t(I).label)},[()=>[t(I).label,t(I).hint].filter(Boolean).join(" ")]),v(V,L)},_e=c(()=>ie(t(I))),Se=V=>{var L=W1(),Pe=m(L,!0);S(()=>h(Pe,t(I).label)),v(V,L)};W(nt,V=>{t(_e)?V(Ze):V(Se,-1)})}S((V,L,Pe)=>{T(Ie,"id",`${M}-${t(F)}`),Me=_t(Ie,1,"hmm-multiselect-option svelte-vbwhwd",null,Me,{"hmm-multiselect-two-lines":V,"hmm-multiselect-selected":L,"hmm-multiselect-highlight":t(F)===t(R)}),T(Ie,"aria-selected",Pe),Ie.disabled=t(I).disabled===!0},[()=>ie(t(I)),()=>t(z).has(t(I).value),()=>t(z).has(t(I).value)]),re("mousedown",Ie,V=>V.preventDefault()),re("mousemove",Ie,()=>u(R,t(F),!0)),re("click",Ie,()=>K(t(I))),v(U,Ee)});var te=d(ge,2);{var O=U=>{var I=Y1();v(U,I)};W(te,U=>{t($).length===0&&U(O)})}fn(ve,U=>u(N,U),()=>t(N)),S(()=>{T(Y,"placeholder",i()),T(Y,"aria-label",i()),T(Y,"aria-controls",`${M}-list`),T(Y,"aria-activedescendant",t(le)),T(ve,"aria-multiselectable",s()),T(ve,"id",`${M}-list`),T(ve,"aria-label",_())}),re("keydown",Y,ne),v(G,Q)};W(ee,G=>{t(b)&&G(he)})}fn(Te,G=>u(x,G),()=>t(x)),S(()=>{me=_t(Te,1,"hmm-multiselect svelte-vbwhwd",null,me,{"hmm-multiselect-inline":E()}),T(Te,"data-testid",k()),T(P,"aria-expanded",t(b)),T(P,"aria-controls",`${M}-list`),T(P,"aria-label",_()),P.disabled=p(),h(be,t(fe))}),re("click",P,()=>t(b)?oe(!0):B()),re("keydown",P,ye),v(r,Te),ft()}Et(["click","keydown","mousedown","mousemove"]);async function Oh(r,e,n){try{const s=await r.request("rpc.call",e,"getSuppressedServiceMessages",[n]);return Array.isArray(s)?s.filter(a=>typeof a=="string"):[]}catch{return}}async function Lh(r,e,n,s,a){await r.request("rpc.call",e,"suppressServiceMessages",[n,s,a])}function X1(r,e,n){return`suppressServiceMessages(${r}, ${JSON.stringify(e)}, ${n?"true":"false"})`}function _i(r,e=""){return/hmip/i.test(r)||/hmip/i.test(e)}const Fh="macOS may be blocking the local network: allow Homematic Manager under System Settings → Privacy & Security → Local Network, then quit and restart it",Q1=/\b(EHOSTUNREACH|EHOSTDOWN)\b/,Z1=new Set(["timeout","EHOSTUNREACH","EHOSTDOWN"]);function J1(r,e){return r==="darwin"&&e!==void 0&&Q1.test(e)}function eE(r,e){return r==="darwin"&&e!==void 0&&Z1.has(e)}function tE(r,e){return[...new Set([...kb,...e.map(n=>n.name).filter(n=>n!==""),...r])]}function zl(r,e,n){return n!==""&&!Sd(n)&&r.every((s,a)=>a===e||s.name!==n)}function nE(r,e,n,s,a,i){const o=zl(e,n,s),l=o?r.includes(s):i,f=[...r],p=o?f.indexOf(s):-1;return p>=0&&f.splice(p,1),l&&zl(e,n,a)&&!f.includes(a)&&f.splice(p>=0?p:f.length,0,a),{interfaces:f,ticked:l}}function rE(r,e,n){const s=e[n]?.name??"";return zl(e,n,s)?r.filter(a=>a!==s):[...r]}const sE=[9e5,18e5,36e5,144e5,0],jl="default";function aE(r,e){const n=sE.filter(a=>a!==r);e!==void 0&&e!==r&&!n.includes(e)&&n.push(e);const s=n.filter(a=>a>0).sort((a,i)=>a-i);return n.includes(0)?[...s,0]:s}function iE(r,e){return r===void 0||r===e?jl:String(r)}function oE(r){return r>=36e5&&r%36e5===0?{unit:"hours",count:r/36e5}:r%6e4===0?{unit:"minutes",count:r/6e4}:{unit:"seconds",count:Math.round(r/1e3)}}var lE=y('<button type="button" class="hmm-button" data-testid="auto-ack-only-new"> </button> <button type="button" class="hmm-button" data-testid="auto-ack-existing"> </button>',1),dE=y('<p class="hmm-autoack-question svelte-2iq8s1" data-testid="auto-ack-question-text"> </p> <p class="hmm-autoack-help svelte-2iq8s1"> </p>',1);function cE(r,e){ut(e,!0);let n=H(e,"open",15,!1);const a=Ot().i18n.t;function i(o){n(!1),o()}{const o=f=>{var p=lE(),_=Ne(p),g=m(_,!0),k=d(_,2),E=m(k,!0);S((b,w)=>{h(g,b),h(E,w)},[()=>a("Only new ones"),()=>a("Acknowledge existing")]),re("click",_,()=>i(e.onlynew)),re("click",k,()=>i(e.onacknowledge)),v(f,p)};let l=c(()=>a("Acknowledge the messages already in the list?"));En(r,{get title(){return t(l)},width:"480px",get onclose(){return e.oncancel},testId:"auto-ack-question",get open(){return n()},set open(f){n(f)},buttons:o,children:(f,p)=>{var _=dE(),g=Ne(_),k=m(g,!0),E=d(g,2),b=m(E,!0);S((w,x)=>{h(k,w),h(b,x)},[()=>a("{count} STICKY_UNREACH messages are already listed. New ones are acknowledged automatically from now on.",{},e.count),()=>a("Each acknowledgement is a write to the device. Afterwards the list no longer shows which devices were away; the unreach counter in the RSSI tab keeps that.")]),v(f,_)},$$slots:{buttons:!0,default:!0}})}ft()}Et(["click"]);var uE=y('<span class="hmm-config-busy svelte-1xydm3c" role="status" aria-live="polite" data-testid="config-saving"><span class="hmm-config-busy-spinner svelte-1xydm3c" aria-hidden="true" data-testid="config-saving-spinner"></span> </span>'),fE=y('<span class="hmm-config-error svelte-1xydm3c" data-testid="config-error"> </span>'),hE=y('<button type="button" class="hmm-button hmm-config-test svelte-1xydm3c" data-testid="config-test"> </button> <!> <!> <button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="config-save"> </button>',1),mE=y('<small data-testid="config-test-result"> </small>'),ti=y("<option> </option>"),vE=y('<small class="hmm-config-help svelte-1xydm3c" data-testid="config-callback-lite"> </small>'),pE=y('<span class="hmm-config-warning svelte-1xydm3c" role="alert" data-testid="config-callback-ip-warning"><span> </span> <button type="button" class="hmm-button" data-testid="config-callback-ip-use-auto"> </button></span>'),gE=y('<div class="hmm-config-grid svelte-1xydm3c"><label class="hmm-config-row svelte-1xydm3c"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><select class="hmm-select hmm-config-wide svelte-1xydm3c" data-testid="config-callback-ip"><option data-testid="config-callback-ip-auto"> </option><!><!></select> <small class="hmm-config-help svelte-1xydm3c" data-testid="config-callback-ip-hint"> </small> <!></span></label> <label class="hmm-config-row svelte-1xydm3c"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><input class="hmm-input hmm-config-narrow svelte-1xydm3c" type="number" min="0" data-testid="config-callback-xmlrpc-port"/> <small class="hmm-config-help svelte-1xydm3c" data-testid="config-callback-xmlrpc-port-hint"> </small></span></label> <label class="hmm-config-row svelte-1xydm3c"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><input class="hmm-input hmm-config-narrow svelte-1xydm3c" type="number" min="0" data-testid="config-callback-binrpc-port"/> <small class="hmm-config-help svelte-1xydm3c" data-testid="config-callback-binrpc-port-hint"> </small></span></label></div>'),bE=y('<button type="button" class="hmm-button" data-testid="config-trust-ca"> </button>'),_E=y('<div class="hmm-config-row svelte-1xydm3c" data-testid="config-certificate"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><small class="hmm-config-warning svelte-1xydm3c" data-testid="config-certificate-problem"> </small> <small class="hmm-config-help hmm-config-certificate svelte-1xydm3c" data-testid="config-certificate-details"> </small> <span class="hmm-config-buttons svelte-1xydm3c"><button type="button" class="hmm-button" data-testid="config-trust-certificate"> </button> <!></span> <small class="hmm-config-help svelte-1xydm3c"> </small></span></div>'),EE=y('<div class="hmm-config-row svelte-1xydm3c" data-testid="config-trusted"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><small class="hmm-config-help svelte-1xydm3c" data-testid="config-trusted-count"> </small> <button type="button" class="hmm-button" data-testid="config-forget-trust"> </button></span></div>'),yE=y('<button type="button" class="hmm-button" data-testid="config-pairing-cancel"> </button>'),SE=y('<button type="button" class="hmm-button" data-testid="config-pair"> </button>'),wE=y('<span class="hmm-config-buttons svelte-1xydm3c" data-testid="config-pairing"><!></span>'),kE=y('<span class="hmm-config-code svelte-1xydm3c" data-testid="config-pairing-code"> </span> <small class="hmm-config-help svelte-1xydm3c"> </small>',1),AE=y('<small class="hmm-config-help svelte-1xydm3c" data-testid="config-pairing-requesting"> </small>'),TE=y('<small class="hmm-config-note svelte-1xydm3c" data-testid="config-pairing-done"> </small>'),RE=y('<small class="hmm-config-warning svelte-1xydm3c" data-testid="config-pairing-failed"> </small>'),xE=y('<input type="checkbox" disabled="" data-testid="config-rega"/> <small class="hmm-config-help svelte-1xydm3c"> </small>',1),DE=y('<input type="checkbox" data-testid="config-rega"/> <small class="hmm-config-help svelte-1xydm3c"> </small>',1),IE=y('<label class="hmm-config-row svelte-1xydm3c"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><input type="checkbox" data-testid="config-auto-confirm-inbox"/> <small class="hmm-config-help svelte-1xydm3c"> </small></span></label>'),NE=y('<small class="hmm-config-note svelte-1xydm3c" data-testid="config-auto-ack-existing-note"> </small>'),CE=y('<select class="hmm-select" disabled="" data-testid="config-idle"><option> </option></select> <small class="hmm-config-help svelte-1xydm3c" data-testid="config-idle-pinned"> </small>',1),PE=y('<select class="hmm-select" data-testid="config-idle"><option> </option><!></select> <small class="hmm-config-help svelte-1xydm3c"> </small>',1),ME=y('<label class="hmm-config-row svelte-1xydm3c"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><!></span></label>'),OE=y('<span class="hmm-config-problem svelte-1xydm3c"> </span>'),LE=y('<div class="hmm-config-extra-row svelte-1xydm3c"><input class="hmm-input"/> <input class="hmm-input"/> <input class="hmm-input" type="number"/> <select class="hmm-select"><option>xmlrpc</option><option>binrpc</option></select> <input class="hmm-input"/> <button type="button" class="hmm-button">✕</button> <!></div>'),FE=y('<p data-testid="config-host-info" class="svelte-1xydm3c"> <span class="hmm-mono"> </span></p>'),GE=y('<div class="hmm-config svelte-1xydm3c"><div class="hmm-config-columns svelte-1xydm3c"><div class="hmm-config-column svelte-1xydm3c"><section class="hmm-config-section"><h3 class="hmm-config-title svelte-1xydm3c"> </h3> <div class="hmm-config-grid svelte-1xydm3c"><label class="hmm-config-row svelte-1xydm3c"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><input class="hmm-input hmm-config-wide svelte-1xydm3c" data-testid="config-host"/> <small class="hmm-config-help svelte-1xydm3c"> </small> <!></span></label> <div class="hmm-config-row svelte-1xydm3c"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><span class="hmm-config-inline svelte-1xydm3c"><select class="hmm-select hmm-config-wide svelte-1xydm3c" data-testid="config-discovered"><option> </option><!></select> <button type="button" class="hmm-button" data-testid="config-discover"> </button></span> <small class="hmm-config-help svelte-1xydm3c"> </small></span></div> <label class="hmm-config-row svelte-1xydm3c"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><input type="checkbox"/> <small class="hmm-config-help svelte-1xydm3c"> </small></span></label> <label class="hmm-config-row svelte-1xydm3c"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><input type="checkbox"/></span></label> <label class="hmm-config-row svelte-1xydm3c"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><input class="hmm-input hmm-config-wide svelte-1xydm3c"/></span></label> <label class="hmm-config-row svelte-1xydm3c"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><input class="hmm-input hmm-config-wide svelte-1xydm3c" type="password"/></span></label></div></section> <section class="hmm-config-section"><h3 class="hmm-config-title svelte-1xydm3c"> </h3> <!></section> <section class="hmm-config-section" data-testid="config-meta"><h3 class="hmm-config-title svelte-1xydm3c"> </h3> <div class="hmm-config-grid svelte-1xydm3c"><label class="hmm-config-row svelte-1xydm3c"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><select class="hmm-select" data-testid="config-meta-provider"></select> <small class="hmm-config-help svelte-1xydm3c" data-testid="config-meta-state"> </small></span></label> <!> <!> <label class="hmm-config-row svelte-1xydm3c"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><span class="hmm-config-inline svelte-1xydm3c"><input class="hmm-input hmm-config-wide svelte-1xydm3c" type="password" autocomplete="off" data-testid="config-meta-token"/> <!></span> <small class="hmm-config-help svelte-1xydm3c"> </small> <!></span></label></div></section></div> <div class="hmm-config-column svelte-1xydm3c"><section class="hmm-config-section"><h3 class="hmm-config-title svelte-1xydm3c"> </h3> <div class="hmm-config-grid svelte-1xydm3c"><div class="hmm-config-row svelte-1xydm3c"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><!> <small class="hmm-config-help svelte-1xydm3c" data-testid="config-interfaces-hint"> </small></span></div> <label class="hmm-config-row svelte-1xydm3c"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><input type="checkbox"/> <small class="hmm-config-help svelte-1xydm3c"> </small></span></label></div></section> <section class="hmm-config-section"><h3 class="hmm-config-title svelte-1xydm3c">ReGa</h3> <div class="hmm-config-grid svelte-1xydm3c"><label class="hmm-config-row svelte-1xydm3c"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><!></span></label> <!></div></section> <section class="hmm-config-section"><h3 class="hmm-config-title svelte-1xydm3c"> </h3> <div class="hmm-config-grid svelte-1xydm3c"><label class="hmm-config-row svelte-1xydm3c"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><!></span></label> <label class="hmm-config-row svelte-1xydm3c"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><input class="hmm-input hmm-config-narrow svelte-1xydm3c" type="number" min="0"/> <small class="hmm-config-help svelte-1xydm3c"> </small></span></label> <label class="hmm-config-row svelte-1xydm3c"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><input type="checkbox" data-testid="config-auto-ack-unreach"/> <small class="hmm-config-help svelte-1xydm3c"> </small> <!></span></label> <!> <label class="hmm-config-row svelte-1xydm3c"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><input class="hmm-input hmm-config-wide svelte-1xydm3c"/> <small class="hmm-config-help svelte-1xydm3c"> </small></span></label> <label class="hmm-config-row svelte-1xydm3c"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><input type="checkbox" data-testid="config-clear-cache"/> <small class="hmm-config-help svelte-1xydm3c"> </small></span></label></div></section></div></div> <fieldset class="hmm-config-extra svelte-1xydm3c"><legend class="svelte-1xydm3c"> </legend> <!> <button type="button" class="hmm-button" data-testid="config-extra-add"> </button></fieldset> <div class="hmm-config-info svelte-1xydm3c" data-testid="config-info"><p class="svelte-1xydm3c"> <!> &middot; AGPL-3.0-or-later &middot; &copy; 2014-2026 Sebastian "Hobbyquaker" Raff</p> <!> <p class="svelte-1xydm3c">HomeMatic und BidCoS sind eingetragene Warenzeichen der eQ-3 AG.</p></div></div>'),UE=y("<!> <!>",1);function BE(r,e){ut(e,!0);let n=H(e,"open",15,!1);const s=Ot(),a=s.i18n.t;let i=C(void 0),o=C(!1),l=C(!1),f=C(!1),p=C(!1),_=C(!1),g=C(void 0),k=C(""),E=C(!1);const b=c(()=>s.app.config?.connection),w=c(()=>s.app.config?.callbackDefaultPorts),x=c(()=>s.app.config?.callbackPinned);function D(we){return t(x)?.[we]===!0}function N(we){return a("Set at start ({option})",{option:yb(we)})}const R=c(()=>s.app.config?.idleUnsubscribe);function M(we){if(we===0)return a("Never unsubscribe");const{unit:Ce,count:Oe}=oE(we);return Ce==="hours"?a("{count} hours",{},Oe):Ce==="minutes"?a("{count} minutes",{},Oe):a("{count} seconds",{},Oe)}function z(we){t(i)&&(we===jl?delete t(i).idleUnsubscribeMs:t(i).idleUnsubscribeMs=Number(we))}const $=c(()=>t(l)||t(i)===void 0||t(b)===void 0||JSON.stringify(zi(t(i)))!==JSON.stringify(t(b))||t(o)!==(t(b).auth!==void 0));ot(()=>{if(n()&&t(i)===void 0){s.app.saveError="",u(he,!1),u(G,!1);const we=s.app.config?.connection;u(i,we?structuredClone(zi(we)):{host:"",interfaces:[...Ab],autoDetect:!0,extraInterfaces:[],tls:!1,rega:!0,callback:{ip:"",xmlrpcPort:0,binrpcPort:0},language:s.app.languageChoice,writePaceMs:250,rpcLogFolder:""},!0),u(o,t(i).auth!==void 0);const{extraInterfaces:Ce,interfaces:Oe}=t(i);fe=Ce.map(Be=>Oe.includes(Be.name))}if(!n()){u(i,void 0);const we=s.app.pairing?.state;(we==="requesting"||we==="code")&&s.app.cancelPairing(),u(g,void 0),u(k,""),u(E,!1)}});const le=c(()=>tE(t(i)?.interfaces??[],t(i)?.extraInterfaces??[]).map(we=>({value:we,label:we})));let fe=[];const de=c(()=>s.app.config?.localAddresses??[]);let B;ot(()=>{if(!n()||t(i)===void 0){B=void 0;return}const we=t(i).host.trim();if(we===B)return;const Oe=setTimeout(()=>{B=we,s.app.loadCallbackAddresses(we)},B===void 0?0:400);return()=>{clearTimeout(Oe)}});const oe=c(()=>s.app.callbackAddresses!==void 0&&s.app.callbackAddresses.host===t(i)?.host.trim()?s.app.callbackAddresses:void 0),K=c(()=>{if(t(oe)===void 0)return a("Automatic");const{address:we,reason:Ce}=t(oe).auto,Oe={subnet:a("in the CCU's network"),route:a("on the route to the CCU"),loopback:a("the CCU is on this machine"),first:a("no better match")}[Ce];return a("Automatic ({address}, {why})",{address:we,why:Oe})}),X=c(()=>t(oe)===void 0?t(de).map(we=>({address:we,label:we})):t(oe).addresses.map(we=>{const Ce=[...t(oe).hostAddress!==void 0&&!we.inSubnet?[a("not in the CCU's network")]:[],...we.linkLocal===!0?[a("link-local")]:[]];return{address:we.address,label:Ce.length===0?we.address:`${we.address} (${Ce.join(", ")})`}})),se=c(()=>{const we=t(i)?.callback.ip??"";if(we===""||t(oe)===void 0||t(oe).keepsConfigured===!0||D("ip")||t(i)?.local===!0||we==="127.0.0.1")return"";const Ce=t(oe).addresses.find(Oe=>Oe.address===we);return Ce===void 0?a("The callback address {address} is not an address of this machine; {auto} is used instead",{address:we,auto:t(oe).auto.address}):t(oe).hostAddress!==void 0&&!Ce.inSubnet&&we!==t(oe).auto.address?a("The callback address {address} is not in the CCU's network; the CCU may not reach it and send no events",{address:we}):""}),j=c(()=>s.app.config?.discovered??[]),ne=c(()=>s.app.config?.version??""),ye=c(()=>s.meta.manifest),xe=c(()=>s.host.info),ie=c(()=>t(ye)===void 0?"":`${t(ye).sources.map(we=>`${we.name} ${we.version}`).join(", ")} (${t(ye).generatedAt.slice(0,10)})`),Ae=c(()=>t(xe)===void 0?"":`Electron ${t(xe).electron} · Chromium ${t(xe).chrome} · Node ${t(xe).node} · ${t(xe).platform} ${t(xe).arch}`);async function Te(){if(!t(i))return;u(f,!0);const we=te(),Ce=await s.app.save(we,we.autoAckStickyUnreach===!0&&t(G)?{acknowledgeExisting:!0}:void 0);Ce&&t(l)&&(await s.app.clearCaches(),u(l,!1)),u(f,!1),Ce&&(s.app.setLanguage(we.language??"auto"),s.i18n.language=s.app.language,n(!1),await s.start())}async function me(){u(p,!0),await s.app.discover(),u(p,!1)}function P(){if(!t(i))return;const we={name:"",host:"",port:2001,protocol:"xmlrpc",path:""};t(i).extraInterfaces=[...t(i).extraInterfaces,we],fe=[...fe,!0]}function ce(we,Ce){const Oe=t(i)?.extraInterfaces[we];if(!t(i)||!Oe||Oe.name===Ce)return;const Be=nE(t(i).interfaces,t(i).extraInterfaces,we,Oe.name,Ce,fe[we]??!1);fe[we]=Be.ticked,t(i).extraInterfaces[we]={...Oe,name:Ce},t(i).interfaces=Be.interfaces}function be(we){t(i)&&(t(i).interfaces=rE(t(i).interfaces,t(i).extraInterfaces,we),t(i).extraInterfaces=t(i).extraInterfaces.filter((Ce,Oe)=>Oe!==we),fe=fe.filter((Ce,Oe)=>Oe!==we))}const ee=c(()=>s.serviceMessages.messages.filter(we=>we.datapoint==="STICKY_UNREACH"&&we.value!==!1&&!_i(we.interfaceName,s.interfaces.typeOf(we.interfaceName))).length);let he=C(!1),G=C(!1),Q;function q(we){if(!t(i))return;const Ce=t(i).autoAckStickyUnreach;t(i).autoAckStickyUnreach=we,u(G,!1),we&&t(b)?.autoAckStickyUnreach!==!0&&t(ee)>0&&(Q=Ce,u(he,!0))}function Y(){t(i)&&(Q===void 0?delete t(i).autoAckStickyUnreach:t(i).autoAckStickyUnreach=Q),u(G,!1)}const ae=c(()=>s.interfaces.rega?.reason==="openccu-lite"&&t(i)!==void 0&&t(i).host.trim()===(t(b)?.host??"").trim()),J=c(()=>{if(t(i)===void 0||t(i).local===!0)return!1;const we=t(i).host.trim();return we===""?!1:t(g)!==void 0&&t(k)===we?t(g).kind==="openccu-lite":s.interfaces.states.some(Ce=>Ce.lite===!0)&&we===(t(b)?.host??"").trim()}),ve=c(()=>{if(t(i)===void 0||t(g)===void 0||t(k)!==t(i).host.trim())return"";if(t(g).kind==="unreachable"){if(t(g).reason==="certificate"&&t(g).certificate!==void 0)return a("The certificate of {url} is not trusted ({code}); it can be trusted under Names and rooms",{url:t(g).certificate.url,code:t(g).certificate.code});const Ce=a("Nothing answers at {url} ({reason})",{url:t(g).url,reason:t(g).reason??"error"});return eE(t(xe)?.platform,t(g).reason)?`${Ce}. ${a(Fh)}`:Ce}if(t(g).kind==="ccu")return a("A CCU or OpenCCU at {url}: XML-RPC with callbacks",{url:t(g).url});const we={none:()=>a("no API token: pair the application with the system"),refused:()=>a("the API token is refused"),"names-only":()=>a("the API token reads names only: pair for devices and values"),full:()=>a("the API token is accepted")}[t(g).token?.state??"none"]();return`${a("openccu-lite ({implementation}) at {url}: lite-rpc, no callbacks",{implementation:t(g).implementation??"occulited",url:t(g).url})} · ${we}`}),ge=c(()=>s.app.pairing);ot(()=>{t(ge)?.state==="approved"&&t(i)!==void 0&&(t(i).metaToken=t(ge).token,t(ge).fingerprint256!==""&&ze("certificates",t(ge).fingerprint256),u(E,!0),s.app.pairing=void 0)});function te(){const we={...structuredClone(zi(t(i))),...t(o)&&t(i)?.auth?{auth:{...t(i).auth}}:{}};return t(o)||delete we.auth,we}async function O(){if(!t(i))return;u(_,!0);const we=t(i).host.trim(),Ce=await s.app.testConnection(te());u(g,Ce,!0),u(k,we,!0),u(_,!1)}async function U(){t(i)&&(u(E,!1),await s.app.pair(te()))}function I(we){t(i)&&(t(i).autoConfirmRegaInbox=we)}const F={auto:()=>a("Automatic"),local:()=>a("This profile"),occulite:()=>"occulited",rega:()=>"ReGaHSS"},Ee=c(()=>s.taxonomy.state),Ie=c(()=>t(Ee)===void 0?a("No store connected"):[F[t(Ee).provider](),t(Ee).reachable?a("Reachable"):a("Unreachable"),t(Ee).reachable?t(Ee).writable?a("Writable"):a("Read-only"):void 0,a("revision {revision}, {count} objects",{revision:t(Ee).revision,count:t(Ee).objects}),t(Ee).implementation,t(Ee).error].filter(Ce=>Ce!==void 0&&Ce!=="").join(" · ")),Me=c(()=>t(Ee)?.certificate??(t(g)!==void 0&&t(k)===(t(i)?.host.trim()??"")?t(g).certificate:void 0)),Ve=c(()=>(t(i)?.systemTrust?.certificates?.length??0)+(t(i)?.systemTrust?.cas?.length??0));function ze(we,Ce){if(!t(i))return;const Oe=t(i).systemTrust??{},Be=Oe[we]??[];Be.includes(Ce)||(t(i).systemTrust={...Oe,[we]:[...Be,Ce]})}function nt(we,Ce){return t(i)?.systemTrust?.[we]?.includes(Ce)===!0}function Ze(){t(i)&&delete t(i).systemTrust}function _e(we){t(i)&&pc.some(Ce=>Ce===we)&&(t(i).metaProvider=we)}function Se(we){t(i)&&(t(i).metaToken=we)}function V(we){t(i)&&(t(i).language=we)}function L(we,Ce){if(!t(i))return;const Oe=t(i).auth??{user:"",password:""};t(i).auth={...Oe,[we]:Ce}}var Pe=UE(),Ge=Ne(Pe);{const we=Oe=>{var Be=hE(),pe=Ne(Be),De=m(pe,!0),Ue=d(pe,2);{var Fe=$e=>{var at=uE(),lt=d(A(at),1,!0);S(Je=>h(lt,Je),[()=>a("Saving and reconnecting…")]),v($e,at)};W(Ue,$e=>{t(f)&&$e(Fe)})}var Ye=d(Ue,2);{var tt=$e=>{var at=fE(),lt=m(at);S(Je=>h(lt,`${Je??""}: ${s.app.saveError??""}`),[()=>a("Error")]),v($e,at)};W(Ye,$e=>{s.app.saveError!==""&&$e(tt)})}var ht=d(Ye,2),ct=m(ht,!0),ke=d(ht,2),Le=m(ke,!0);S(($e,at,lt,Je)=>{pe.disabled=$e,h(De,at),h(ct,lt),ke.disabled=t(f)||!t($),h(Le,Je)},[()=>t(_)||t(i)===void 0||t(i).host.trim()==="",()=>t(_)?a("Testing…"):a("Test connection"),()=>a("Cancel"),()=>a("Save & Restart")]),re("click",pe,()=>{O()}),re("click",ht,()=>n(!1)),re("click",ke,()=>{Te()}),v(Oe,Be)};let Ce=c(()=>a("Settings"));En(Ge,{get title(){return t(Ce)},width:"960px",testId:"config-dialog",get open(){return n()},set open(Oe){n(Oe)},buttons:we,children:(Oe,Be)=>{var pe=St(),De=Ne(pe);{var Ue=Fe=>{var Ye=GE(),tt=A(Ye),ht=A(tt),ct=A(ht),ke=A(ct),Le=m(ke,!0),$e=d(ke,2),at=A($e),lt=A(at),Je=m(lt,!0),Pt=d(lt,2),Tt=A(Pt),Lt=d(Tt,2),Qt=m(Lt,!0),pn=d(Lt,2);{var wn=Qe=>{var mt=mE(),gt=m(mt,!0);S(()=>{_t(mt,1,yp(t(g)?.reachable===!1||t(g)?.reason==="certificate"?"hmm-config-warning":"hmm-config-help"),"svelte-1xydm3c"),h(gt,t(ve))}),v(Qe,mt)};W(pn,Qe=>{t(ve)!==""&&Qe(wn)})}var tn=d(at,2),bn=A(tn),Pn=m(bn,!0),$n=d(bn,2),Xn=A($n),Zt=A(Xn),Ft=A(Zt),Jt=m(Ft,!0);Ft.value=Ft.__value="";var Qn=d(Ft);Xe(Qn,17,()=>t(j),Qe=>Qe.address,(Qe,mt)=>{var gt=ti(),Yt=m(gt),qt={};S(()=>{h(Yt,`${t(mt).address??""} ${t(mt).serial??""??""} ${t(mt).firmware??""??""}`),qt!==(qt=t(mt).address)&&(gt.value=(gt.__value=qt)??"")}),v(Qe,gt)});var Mn=d(Zt,2),Or=m(Mn,!0),zr=d(Xn,2),Zn=m(zr,!0),jn=d(tn,2),Lr=A(jn),cs=m(Lr,!0),ar=d(Lr,2),Ar=A(ar),jr=d(Ar,2),cr=m(jr,!0),Tr=d(jn,2),ur=A(Tr),ns=m(ur,!0),Fr=d(ur,2),pr=A(Fr),gr=d(Tr,2),ue=A(gr),He=m(ue,!0),Vt=d(ue,2),yn=A(Vt),ir=d(gr,2),it=A(ir),bt=m(it,!0),It=d(it,2),et=A(It),rt=d(ct,2),je=A(rt),vt=m(je,!0),At=d(je,2);{var zt=Qe=>{var mt=vE(),gt=m(mt,!0);S(Yt=>h(gt,Yt),[()=>a("None: an openccu-lite system does not call a remote client back; the events come from its stream.")]),v(Qe,mt)},hn=Qe=>{var mt=gE(),gt=A(mt),Yt=A(gt),qt=m(Yt,!0),xt=d(Yt,2),en=A(xt),Bt=A(en),Nt=m(Bt,!0);Bt.value=Bt.__value="";var an=d(Bt);Xe(an,17,()=>t(X),Nn=>Nn.address,(Nn,xr)=>{var Hr=ti(),ss=m(Hr,!0),hs={};S(()=>{h(ss,t(xr).label),hs!==(hs=t(xr).address)&&(Hr.value=(Hr.__value=hs)??"")}),v(Nn,Hr)});var on=d(an);{var Ln=Nn=>{var xr=ti(),Hr=m(xr,!0),ss={};S(()=>{h(Hr,t(i).callback.ip),ss!==(ss=t(i).callback.ip)&&(xr.value=(xr.__value=ss)??"")}),v(Nn,xr)},Er=c(()=>t(i).callback.ip!==""&&!t(X).some(Nn=>Nn.address===t(i)?.callback.ip));W(on,Nn=>{t(Er)&&Nn(Ln)})}Xt(en);var er=d(en,2),rs=m(er,!0),vn=d(er,2);{var Kn=Nn=>{var xr=pE(),Hr=A(xr),ss=m(Hr,!0),hs=d(Hr,2),Lo=m(hs,!0);S(Fo=>{h(ss,t(se)),h(Lo,Fo)},[()=>a("Use automatic")]),re("click",hs,()=>{t(i)&&(t(i).callback.ip="")}),v(Nn,xr)};W(vn,Nn=>{t(se)!==""&&Nn(Kn)})}var tr=d(gt,2),Sn=A(tr),hr=m(Sn,!0),mr=d(Sn,2),Br=A(mr),Rs=d(Br,2),ea=m(Rs,!0),ta=d(tr,2),_a=A(ta),Co=m(_a,!0),Po=d(_a,2),Za=A(Po),Mo=d(Za,2),Oo=m(Mo,!0);S((Nn,xr,Hr,ss,hs,Lo,Fo,Km,Ym,qm)=>{h(qt,Nn),en.disabled=xr,T(en,"title",Hr),h(Nt,t(K)),h(rs,ss),h(hr,hs),Br.disabled=Lo,h(ea,Fo),h(Co,Km),Za.disabled=Ym,h(Oo,qm)},[()=>a("Homematic Manager Address"),()=>D("ip"),()=>a("Automatic takes this machine's address in the CCU's network, else the one on the route to the CCU"),()=>D("ip")?N("ip"):a("The address the interface processes call back to"),()=>a("Callback XML-RPC port"),()=>D("xmlrpcPort"),()=>D("xmlrpcPort")?N("xmlrpcPort"):t(w)&&t(w).xmlrpc!==0?a("0 uses port {port}, or a free one when it is taken",{port:String(t(w).xmlrpc)}):a("0 picks a free port"),()=>a("Callback BIN-RPC port"),()=>D("binrpcPort"),()=>D("binrpcPort")?N("binrpcPort"):t(w)&&t(w).binrpc!==0?a("0 uses port {port}, or a free one when it is taken",{port:String(t(w).binrpc)}):a("0 picks a free port")]),kr(en,()=>t(i).callback.ip,Nn=>t(i).callback.ip=Nn),xn(Br,()=>t(i).callback.xmlrpcPort,Nn=>t(i).callback.xmlrpcPort=Nn),xn(Za,()=>t(i).callback.binrpcPort,Nn=>t(i).callback.binrpcPort=Nn),v(Qe,mt)};W(At,Qe=>{t(J)?Qe(zt):Qe(hn,-1)})}var Ht=d(rt,2),Mt=A(Ht),kn=m(Mt,!0),An=d(Mt,2),dn=A(An),_n=A(dn),or=m(_n,!0),Gn=d(_n,2),cn=A(Gn);Xe(cn,20,()=>pc,Qe=>Qe,(Qe,mt)=>{var gt=ti(),Yt=m(gt,!0),qt={};S(xt=>{h(Yt,xt),qt!==(qt=mt)&&(gt.value=(gt.__value=qt)??"")},[()=>F[mt]()]),v(Qe,gt)});var jt;Xt(cn);var Rt=d(cn,2),pt=m(Rt,!0),dt=d(dn,2);{var Gt=Qe=>{var mt=_E(),gt=A(mt),Yt=m(gt,!0),qt=d(gt,2),xt=A(qt),en=m(xt,!0),Bt=d(xt,2),Nt=m(Bt),an=d(Bt,2),on=A(an),Ln=m(on,!0),Er=d(on,2);{var er=Kn=>{const tr=c(()=>t(Me).ca);var Sn=bE(),hr=m(Sn,!0);S((mr,Br)=>{Sn.disabled=mr,h(hr,Br)},[()=>nt("cas",t(tr).pem),()=>a("Trust the CA {name}",{name:t(tr).subject})]),re("click",Sn,()=>ze("cas",t(tr).pem)),v(Kn,Sn)};W(Er,Kn=>{t(Me).ca!==void 0&&Kn(er)})}var rs=d(an,2),vn=m(rs,!0);S((Kn,tr,Sn,hr,mr,Br)=>{h(Yt,Kn),h(en,tr),h(Nt,`${Sn??""}${t(Me).certificate.altNames===void 0?"":` · ${t(Me).certificate.altNames}`} \\u00b7 SHA-256
13
+ ${t(Me).certificate.fingerprint256??""}`),on.disabled=hr,h(Ln,mr),h(vn,Br)},[()=>a("Certificate"),()=>a("The certificate of {url} is not trusted ({code}). Until it is, whether this is an openccu-lite system is not known.",{url:t(Me).url,code:t(Me).code}),()=>a("{subject}, issued by {issuer}, valid until {validTo}",{subject:t(Me).certificate.subject,issuer:t(Me).certificate.issuer,validTo:t(Me).certificate.validTo}),()=>nt("certificates",t(Me).certificate.fingerprint256),()=>a("Trust this certificate"),()=>a("A trusted certificate holds whatever name the system is reached by, until it is renewed; a trusted CA also covers its renewals, but the name must match the certificate.")]),re("click",on,()=>ze("certificates",t(Me).certificate.fingerprint256)),v(Qe,mt)};W(dt,Qe=>{t(Me)!==void 0&&Qe(Gt)})}var nn=d(dt,2);{var Tn=Qe=>{var mt=EE(),gt=A(mt),Yt=m(gt,!0),qt=d(gt,2),xt=A(qt),en=m(xt,!0),Bt=d(xt,2),Nt=m(Bt,!0);S((an,on,Ln)=>{h(Yt,an),h(en,on),h(Nt,Ln)},[()=>a("Trusted certificates"),()=>a("{count} certificates or CAs of the system are trusted",{},t(Ve)),()=>a("Forget them")]),re("click",Bt,Ze),v(Qe,mt)};W(nn,Qe=>{t(Ve)>0&&Qe(Tn)})}var Dn=d(nn,2),Jn=A(Dn),lr=m(Jn,!0),us=d(Jn,2),Bs=A(us),Rn=A(Bs),gn=d(Rn,2);{var Rr=Qe=>{var mt=wE(),gt=A(mt);{var Yt=xt=>{var en=yE(),Bt=m(en,!0);S(Nt=>h(Bt,Nt),[()=>a("Cancel")]),re("click",en,()=>{s.app.cancelPairing()}),v(xt,en)},qt=xt=>{var en=SE(),Bt=m(en,!0);S((Nt,an,on)=>{en.disabled=Nt,T(en,"title",an),h(Bt,on)},[()=>t(i).host.trim()==="",()=>a("Asks an openccu-lite system for an API token: a code appears here and on its Status page, where an administrator approves it. The token replaces the one above, and the certificate is trusted from then on."),()=>a("Pair")]),re("click",en,()=>{U()}),v(xt,en)};W(gt,xt=>{t(ge)?.state==="requesting"||t(ge)?.state==="code"?xt(Yt):xt(qt,-1)})}v(Qe,mt)};W(gn,Qe=>{t(i).local!==!0&&Qe(Rr)})}var Wr=d(Bs,2),Ts=m(Wr,!0),fs=d(Wr,2);{var Hs=Qe=>{var mt=St(),gt=Ne(mt);{var Yt=Bt=>{var Nt=kE(),an=Ne(Nt),on=m(an,!0),Ln=d(an,2),Er=m(Ln,!0);S(er=>{h(on,t(ge).code),h(Er,er)},[()=>a("Approve it on the system's Status page: the same code is shown there.")]),v(Bt,Nt)},qt=Bt=>{var Nt=AE(),an=m(Nt,!0);S(on=>h(an,on),[()=>a("Asking the system…")]),v(Bt,Nt)},xt=Bt=>{var Nt=TE(),an=m(Nt,!0);S(on=>h(an,on),[()=>a("Paired: the token is in the field above. Save to connect.")]),v(Bt,Nt)},en=Bt=>{var Nt=RE(),an=m(Nt,!0);S(()=>h(an,t(ge).message)),v(Bt,Nt)};W(gt,Bt=>{t(ge)?.state==="code"?Bt(Yt):t(ge)?.state==="requesting"?Bt(qt,1):t(E)?Bt(xt,2):t(ge)?.state==="failed"&&Bt(en,3)})}v(Qe,mt)};W(fs,Qe=>{t(i).local!==!0&&Qe(Hs)})}var ba=d(ht,2),Ni=A(ba),Ya=A(Ni),To=m(Ya,!0),Ro=d(Ya,2),Ci=A(Ro),Z=A(Ci),Re=m(Z,!0),Ke=d(Z,2),st=A(Ke);{let Qe=c(()=>a("Interfaces")),mt=c(()=>a("Filter")),gt=c(()=>a("Check all")),Yt=c(()=>a("Uncheck all")),qt=c(()=>a("Select"));bi(st,{get options(){return t(le)},get label(){return t(Qe)},get filterLabel(){return t(mt)},get checkAllLabel(){return t(gt)},get uncheckAllLabel(){return t(Yt)},summary:xt=>xt.join(", "),get placeholder(){return t(qt)},get selected(){return t(i).interfaces},set selected(xt){t(i).interfaces=xt}})}var Ut=d(st,2),wt=m(Ut,!0),yt=d(Ci,2),In=A(yt),mn=m(In,!0),fr=d(In,2),Wn=A(fr),On=d(Wn,2),Wt=m(On,!0),rn=d(Ni,2),sn=d(A(rn),2),un=A(sn),Kr=A(un),Vs=m(Kr,!0),Yr=d(Kr,2),Gr=A(Yr);{var Qs=Qe=>{var mt=xE(),gt=Ne(mt);Pr(gt,!1);var Yt=d(gt,2),qt=m(Yt,!0);S(xt=>h(qt,xt),[()=>a("Switched off: the system has no ReGaHSS")]),v(Qe,mt)},qa=Qe=>{var mt=DE(),gt=Ne(mt),Yt=d(gt,2),qt=m(Yt,!0);S(xt=>h(qt,xt),[()=>a("ReGa supplies the friendly names")]),vr(gt,()=>t(i).rega,xt=>t(i).rega=xt),v(Qe,mt)};W(Gr,Qe=>{t(ae)?Qe(Qs):Qe(qa,-1)})}var xo=d(un,2);{var Do=Qe=>{var mt=IE(),gt=A(mt),Yt=m(gt,!0),qt=d(gt,2),xt=A(qt),en=d(xt,2),Bt=m(en,!0);S((Nt,an)=>{h(Yt,Nt),xt.disabled=!t(i).rega,Pr(xt,t(i).autoConfirmRegaInbox===!0),h(Bt,an)},[()=>a("Confirm the ReGa inbox automatically"),()=>a("Only possible with ReGa")]),re("change",xt,Nt=>I(Nt.currentTarget.checked)),v(Qe,mt)};W(xo,Qe=>{t(ae)||Qe(Do)})}var Io=d(rn,2),Pi=A(Io),br=m(Pi,!0),Ur=d(Pi,2),dr=A(Ur),Zs=A(dr),$a=m(Zs,!0),Xa=d(Zs,2),Js=A(Xa);{let Qe=c(()=>t(i).language??"auto"),mt=c(()=>a("Language")),gt=c(()=>a("Browser language"));G1(Js,{get language(){return t(Qe)},get label(){return t(mt)},get autoLabel(){return t(gt)},testId:"config-language",onchange:V})}var Mi=d(dr,2),_r=A(Mi),Qa=m(_r,!0),ym=d(_r,2),Fd=A(ym),Sm=d(Fd,2),wm=m(Sm,!0),Gd=d(Mi,2),Ud=A(Gd),km=m(Ud,!0),Am=d(Ud,2),No=A(Am),Bd=d(No,2),Tm=m(Bd,!0),Rm=d(Bd,2);{var xm=Qe=>{var mt=NE(),gt=m(mt,!0);S(Yt=>h(gt,Yt),[()=>a("{count} messages in the list are acknowledged when this is saved",{},t(ee))]),v(Qe,mt)};W(Rm,Qe=>{t(G)&&t(i).autoAckStickyUnreach===!0&&Qe(xm)})}var Hd=d(Gd,2);{var Dm=Qe=>{var mt=ME(),gt=A(mt),Yt=m(gt,!0),qt=d(gt,2),xt=A(qt);{var en=Nt=>{var an=CE(),on=Ne(an),Ln=A(on),Er=m(Ln,!0),er={},rs=d(on,2),vn=m(rs,!0);S((Kn,tr,Sn)=>{h(Er,Kn),er!==(er=tr)&&(Ln.__value=er),h(vn,Sn)},[()=>M(t(R).pinnedMs),()=>M(t(R).pinnedMs),()=>a("Set at start ({option})",{option:"HMM_IDLE_UNSUBSCRIBE / --idle-unsubscribe"})]),v(Nt,an)},Bt=Nt=>{var an=PE(),on=Ne(an),Ln=A(on),Er=m(Ln,!0),er={},rs=d(Ln);Xe(rs,16,()=>aE(t(R).defaultMs,t(i).idleUnsubscribeMs),Sn=>Sn,(Sn,hr)=>{var mr=ti(),Br=m(mr,!0),Rs={};S((ea,ta)=>{h(Br,ea),Rs!==(Rs=ta)&&(mr.value=(mr.__value=Rs)??"")},[()=>M(hr),()=>String(hr)]),v(Sn,mr)});var vn;Xt(on);var Kn=d(on,2),tr=m(Kn,!0);S((Sn,hr,mr)=>{h(Er,Sn),er!==(er=jl)&&(Ln.value=(Ln.__value=er)??""),vn!==(vn=hr)&&(on.value=(on.__value=vn)??"",Bn(on,vn)),h(tr,mr)},[()=>a("Default ({time})",{time:M(t(R).defaultMs)}),()=>iE(t(i).idleUnsubscribeMs,t(R).defaultMs),()=>a("With no page open, the event subscriptions are dropped after this time and taken up again when a page is opened")]),re("change",on,Sn=>z(Sn.currentTarget.value)),v(Nt,an)};W(xt,Nt=>{t(R).pinnedMs!==void 0?Nt(en):Nt(Bt,-1)})}S(Nt=>h(Yt,Nt),[()=>a("Unsubscribe when idle")]),v(Qe,mt)};W(Hd,Qe=>{t(R)!==void 0&&Qe(Dm)})}var Vd=d(Hd,2),zd=A(Vd),Im=m(zd,!0),Nm=d(zd,2),jd=A(Nm),Cm=d(jd,2),Pm=m(Cm,!0),Mm=d(Vd,2),Wd=A(Mm),Om=m(Wd,!0),Lm=d(Wd,2),Kd=A(Lm),Fm=d(Kd,2),Gm=m(Fm,!0),Yd=d(tt,2),qd=A(Yd),Um=m(qd,!0),$d=d(qd,2);Xe($d,17,()=>t(i).extraInterfaces,co,(Qe,mt,gt)=>{const Yt=c(()=>xb(t(mt)));var qt=LE(),xt=A(qt),en=d(xt,2),Bt=d(en,2),Nt=d(Bt,2),an=A(Nt);an.value=an.__value="xmlrpc";var on=d(an);on.value=on.__value="binrpc",Xt(Nt);var Ln=d(Nt,2),Er=d(Ln,2),er=d(Er,2);{var rs=vn=>{var Kn=OE(),tr=m(Kn,!0);S((Sn,hr)=>{T(Kn,"data-testid",Sn),h(tr,hr)},[()=>`config-extra-problem-${String(gt)}`,()=>t(Yt).join(", ")]),v(vn,Kn)};W(er,vn=>{t(Yt).length>0&&vn(rs)})}S((vn,Kn,tr,Sn,hr,mr,Br,Rs,ea,ta,_a)=>{T(qt,"data-testid",vn),T(xt,"placeholder",Kn),T(xt,"aria-label",tr),ln(xt,t(mt).name),T(en,"placeholder",Sn),T(en,"aria-label",hr),T(Bt,"placeholder",mr),T(Bt,"aria-label",Br),T(Nt,"aria-label",Rs),T(Ln,"placeholder",ea),T(Ln,"aria-label",ta),T(Er,"aria-label",_a)},[()=>`config-extra-${String(gt)}`,()=>a("Name"),()=>`${a("Name")} ${String(gt)}`,()=>a("Host"),()=>`${a("Host")} ${String(gt)}`,()=>a("Port"),()=>`${a("Port")} ${String(gt)}`,()=>`${a("Protocol")} ${String(gt)}`,()=>a("Path"),()=>`${a("Path")} ${String(gt)}`,()=>`${a("Remove")} ${String(gt)}`]),re("input",xt,vn=>ce(gt,vn.currentTarget.value)),xn(en,()=>t(mt).host,vn=>t(mt).host=vn),xn(Bt,()=>t(mt).port,vn=>t(mt).port=vn),kr(Nt,()=>t(mt).protocol,vn=>t(mt).protocol=vn),xn(Ln,()=>t(mt).path,vn=>t(mt).path=vn),re("click",Er,()=>be(gt)),v(Qe,qt)});var Xd=d($d,2),Bm=m(Xd,!0),Hm=d(Yd,2),Qd=A(Hm),Zd=A(Qd),Vm=d(Zd);{var zm=Qe=>{var mt=Cn();S(gt=>h(mt,`· ${gt??""}: ${t(ie)??""}`),[()=>a("Device data")]),v(Qe,mt)};W(Vm,Qe=>{t(ie)!==""&&Qe(zm)})}var jm=d(Qd,2);{var Wm=Qe=>{var mt=FE(),gt=A(mt),Yt=d(gt),qt=m(Yt,!0);S(()=>{h(gt,`${t(Ae)??""} · `),h(qt,t(xe)?.logFile??"")}),v(Qe,mt)};W(jm,Qe=>{t(Ae)!==""&&Qe(Wm)})}S((Qe,mt,gt,Yt,qt,xt,en,Bt,Nt,an,on,Ln,Er,er,rs,vn,Kn,tr,Sn,hr,mr,Br,Rs,ea,ta,_a,Co,Po,Za,Mo,Oo,Nn,xr,Hr,ss,hs)=>{h(Le,Qe),h(Je,mt),h(Qt,gt),h(Pn,Yt),T(Zt,"aria-label",qt),Zt.disabled=t(j).length===0,h(Jt,xt),Mn.disabled=t(p),h(Or,en),h(Zn,Bt),h(cs,Nt),h(cr,an),h(ns,on),h(He,Ln),yn.disabled=!t(o),ln(yn,t(i).auth?.user??""),h(bt,Er),et.disabled=!t(o),ln(et,t(i).auth?.password??""),h(vt,er),h(kn,rs),h(or,vn),jt!==(jt=t(i).metaProvider??"auto")&&(cn.value=(cn.__value=jt)??"",Bn(cn,jt)),h(pt,t(Ie)),h(lr,Kn),ln(Rn,t(i).metaToken??""),h(Ts,tr),h(To,Sn),h(Re,hr),h(wt,mr),h(mn,Br),h(Wt,Rs),h(Vs,ea),h(br,ta),h($a,_a),h(Qa,Co),h(wm,Po),h(km,Za),Pr(No,t(i).autoAckStickyUnreach===!0),h(Tm,Mo),h(Im,Oo),h(Pm,Nn),h(Om,xr),h(Gm,Hr),h(Um,ss),h(Bm,hs),h(Zd,`Homematic Manager ${t(ne)??""} `)},[()=>a("Connection"),()=>a("CCU Address"),()=>a("Host name or address of the CCU"),()=>a("Discovered CCUs"),()=>a("Discovered CCUs"),()=>t(p)?a("Searching..."):a("Select"),()=>a("Discover"),()=>a("Searches the network for CCUs over UDP"),()=>a("Use TLS"),()=>a("The encrypted ports of the CCU"),()=>a("Use Auth"),()=>a("Auth User"),()=>a("Auth Pass"),()=>a("Callback"),()=>a("Names and rooms"),()=>a("Store"),()=>a("API token"),()=>t(J)?a("From the pairing, or the system's API tokens page"):a("Only needed off the box"),()=>a("Interfaces"),()=>a("Configured interfaces"),()=>a("An extra interface is connected once it is ticked here"),()=>a("Detect interfaces"),()=>a("Probes the known ports in the background"),()=>a("Use ReGa"),()=>a("Behaviour"),()=>a("Language"),()=>a("RPC Delay (ms)"),()=>a("Shortest pause between two writes"),()=>a("Acknowledge STICKY_UNREACH automatically as they occur"),()=>a("Acknowledging is a write to the device. Switching this on asks once about the messages already in the list."),()=>a("RPC Log Folder"),()=>a("Empty switches the dumps off"),()=>a("Clear Cache"),()=>a("Discards the caches when this is saved"),()=>a("Extra interfaces"),()=>a("Add interface")]),xn(Tt,()=>t(i).host,Qe=>t(i).host=Qe),re("change",Zt,Qe=>{t(i)&&Qe.currentTarget.value!==""&&(t(i).host=Qe.currentTarget.value)}),re("click",Mn,()=>{me()}),vr(Ar,()=>t(i).tls,Qe=>t(i).tls=Qe),vr(pr,()=>t(o),Qe=>u(o,Qe)),re("input",yn,Qe=>L("user",Qe.currentTarget.value)),re("input",et,Qe=>L("password",Qe.currentTarget.value)),re("change",cn,Qe=>_e(Qe.currentTarget.value)),re("input",Rn,Qe=>Se(Qe.currentTarget.value)),vr(Wn,()=>t(i).autoDetect,Qe=>t(i).autoDetect=Qe),xn(Fd,()=>t(i).writePaceMs,Qe=>t(i).writePaceMs=Qe),re("change",No,Qe=>q(Qe.currentTarget.checked)),xn(jd,()=>t(i).rpcLogFolder,Qe=>t(i).rpcLogFolder=Qe),vr(Kd,()=>t(l),Qe=>u(l,Qe)),re("click",Xd,P),v(Fe,Ye)};W(De,Fe=>{t(i)&&Fe(Ue)})}v(Oe,pe)},$$slots:{buttons:!0,default:!0}})}var qe=d(Ge,2);cE(qe,{get count(){return t(ee)},onacknowledge:()=>u(G,!0),onlynew:()=>u(G,!1),oncancel:Y,get open(){return t(he)},set open(we){u(he,we,!0)}}),v(r,Pe),ft()}Et(["click","change","input"]);var HE=y('<div class="hmm-toolbar-trailing svelte-1ld6r3r"><!></div>'),VE=y('<div class="hmm-toolbar svelte-1ld6r3r" role="toolbar"><div class="hmm-toolbar-group svelte-1ld6r3r"><!></div> <!></div>');function zE(r,e){let n=H(e,"label",3,"Toolbar"),s=H(e,"children",3,void 0),a=H(e,"trailing",3,void 0),i=H(e,"testId",3,void 0);var o=VE(),l=A(o),f=A(l);{var p=k=>{var E=St(),b=Ne(E);qs(b,s),v(k,E)};W(f,k=>{s()&&k(p)})}var _=d(l,2);{var g=k=>{var E=HE(),b=A(E);qs(b,a),v(k,E)};W(_,k=>{a()&&k(g)})}S(()=>{T(o,"aria-label",n()),T(o,"data-testid",i())}),v(r,o)}const jE=["address","device_address","channel_address","interface_address","team_address"];function WE(r){if(r.values)return"select";if(r.bitmask)return"flags";switch(r.type){case"bool":case"boolean":return"bool";case"integer":return"number";case"paramset":return"struct";case"RpcStruct[]":return"json";case"mixed":case"variant":return"variant";default:return"text"}}function KE(r){return jE.includes(r.type)}function Jo(r){return(r_(r)??s_(r)).params.map(n=>({name:n.name,type:n.type,kind:WE(n),optional:n.optional??[],...n.values?{options:n.values}:{},...n.bitmask?{options:n.bitmask}:{}}))}function Wl(r){switch(r.kind){case"bool":return!1;case"number":case"flags":return 0;case"struct":return[];case"variant":return{type:"string",value:""};case"select":return Object.keys(r.options??{})[0]??"";default:return""}}function Yc(r){switch(r.type){case"bool":return r.value==="true"||r.value==="1";case"integer":return Number.parseInt(r.value,10)||0;case"double":return Number.parseFloat(r.value)||0;default:return r.value}}function ni(r){return typeof r=="object"?JSON.stringify(r):String(r)}function YE(r,e){switch(r.kind){case"bool":return e===!0||e==="true";case"number":case"flags":return typeof e=="number"?e:Number.parseInt(ni(e),10)||0;case"struct":{const n={};for(const s of Array.isArray(e)?e:[])s.key!==""&&(n[s.key]=Yc(s));return n}case"variant":{const n=e;return Yc({type:n.type,value:n.value})}case"json":return $E(ni(e));case"select":return/^-?\d+$/.test(ni(e))?Number(e):ni(e);default:return ni(e)}}function qE(r,e){return r.map((n,s)=>YE(n,e[s]??Wl(n)))}function $E(r){if(r.trim()==="")return[];try{return JSON.parse(r)}catch{return[]}}function XE(r){if(r.trim()==="")return!0;try{return JSON.parse(r),!0}catch{return!1}}var QE=y("<span> </span>"),ZE=y("<!> <!>",1),qc=y("<option> </option>"),JE=y('<p class="hmm-console-hint svelte-17kjuug"> </p>'),ey=y('<input type="checkbox"/>'),ty=y('<input class="hmm-input" type="number"/>'),ny=y('<select class="hmm-select"></select>'),ry=y('<label><input type="checkbox"/> <span> </span></label>'),sy=y('<div class="hmm-console-flags svelte-17kjuug"><!> <span class="hmm-console-arg-type svelte-17kjuug"> </span></div>'),ay=y('<div class="hmm-console-struct-row svelte-17kjuug"><input class="hmm-input"/> <select class="hmm-select"><option>string</option><option>integer</option><option>double</option><option>bool</option></select> <input class="hmm-input"/> <button type="button" class="hmm-button">✕</button></div>'),iy=y('<div class="hmm-console-struct svelte-17kjuug"><!> <button type="button" class="hmm-button">+</button></div>'),oy=y('<div class="hmm-console-struct-row svelte-17kjuug"><select class="hmm-select"><option>string</option><option>integer</option><option>double</option><option>bool</option></select> <input class="hmm-input"/></div>'),ly=y("<textarea></textarea>"),dy=y('<input class="hmm-input"/>'),cy=y('<span class="hmm-console-arg-type svelte-17kjuug"> </span>'),uy=y('<div class="hmm-console-arg svelte-17kjuug"><label class="hmm-console-arg-label svelte-17kjuug"> <span class="hmm-console-arg-type svelte-17kjuug"> </span></label> <!> <!></div>'),fy=y("<option></option>"),hy=y('<span class="hmm-console-error svelte-17kjuug" data-testid="console-error"> </span>'),my=y('<section class="hmm-console-help svelte-17kjuug" data-testid="console-help-section"><h3 class="svelte-17kjuug"> </h3> <p data-testid="console-help"> </p></section>'),vy=y('<div class="hmm-page svelte-17kjuug"><!> <div class="hmm-console-top svelte-17kjuug"><select class="hmm-select hmm-console-method svelte-17kjuug" data-testid="console-method"><option> </option><!></select> <output class="hmm-console-params hmm-mono svelte-17kjuug" data-testid="console-params"> </output> <button type="button" class="hmm-button" data-testid="console-send-button"> </button></div> <div class="hmm-console-columns svelte-17kjuug"><section class="hmm-console-panel svelte-17kjuug"><h3 class="svelte-17kjuug"> </h3> <!> <!> <datalist id="hmm-console-addresses"></datalist></section> <section class="hmm-console-panel hmm-console-output svelte-17kjuug" data-testid="console-output"><h3 class="svelte-17kjuug"> <!></h3> <textarea class="hmm-console-response hmm-mono svelte-17kjuug" data-testid="console-response" readonly=""></textarea></section></div> <!></div>');function py(r,e){ut(e,!0);const n=Ot(),s=n.i18n.t;let a=C(""),i=C(We([])),o=C(void 0);const l=c(()=>n.app.selectedInterface),f=c(()=>n.console.of(t(l))),p=c(()=>t(a)===""?[]:Jo(t(a))),_=c(()=>n.console.method(t(l),t(a))),g=c(()=>n.devices.index(t(l))?.all().map(te=>te.ADDRESS)??[]),k=c(()=>qE(t(p),t(i)));ot(()=>{n.console.load(t(l))}),ot(()=>{const te=n.console.takeRecall(t(l));te!==void 0&&le(te)});function E(te){u(a,te,!0),u(i,Jo(te).map(O=>Wl(O)),!0),u(o,void 0)}function b(te,O){u(i,t(i).map((U,I)=>I===te?O:U),!0)}function w(te){const O=t(i)[te];return Array.isArray(O)?O:[]}function x(te){const O=t(i)[te];return typeof O=="object"&&!Array.isArray(O)?O:{type:"string",value:""}}function D(te){b(te,[...w(te),{key:"",type:"string",value:""}])}function N(te,O,U){b(te,w(te).map((I,F)=>F===O?{...I,...U}:I))}function R(te,O){b(te,w(te).filter((U,I)=>I!==O))}function M(te,O,U){const I=typeof t(i)[te]=="number"?t(i)[te]:0;b(te,U?I|O:I&~O)}async function z(){t(a)!==""&&u(o,await n.console.call(t(l),t(a),t(k)),!0)}function $(te){return typeof te=="object"&&te!==null&&!Array.isArray(te)}function le(te){u(a,te.method,!0);const O=Jo(te.method);u(i,O.map((U,I)=>{const F=te.params[I];return U.kind==="struct"&&$(F)?Object.entries(F).map(([Ee,Ie])=>({key:Ee,type:typeof Ie=="boolean"?"bool":typeof Ie=="number"?"double":"string",value:String(Ie)})):U.kind==="json"?JSON.stringify(F??[]):U.kind==="bool"?F===!0:U.kind==="number"||U.kind==="flags"?typeof F=="number"?F:0:F===void 0?Wl(U):String(F)}),!0),u(o,void 0)}var fe=vy(),de=A(fe);{const te=U=>{var I=QE(),F=m(I);S(Ee=>h(F,`${t(f).length??""} ${Ee??""}`),[()=>s("Method")]),v(U,I)};let O=c(()=>s("RPC Console"));zE(de,{get label(){return t(O)},trailing:te,children:(U,I)=>{var F=ZE(),Ee=Ne(F);{let Me=c(()=>s("Send request")),Ve=c(()=>t(a)===""||n.console.running),ze=c(()=>s("Please select method"));Dt(Ee,{get title(){return t(Me)},icon:"▸",get disabled(){return t(Ve)},get reason(){return t(ze)},testId:"console-send",onclick:()=>{z()}})}var Ie=d(Ee,2);{let Me=c(()=>s("Clear"));Dt(Ie,{get title(){return t(Me)},icon:"⌫",testId:"console-clear",onclick:()=>{u(o,void 0)}})}v(U,F)},$$slots:{trailing:!0,default:!0}})}var B=d(de,2),oe=A(B),K=A(oe),X=m(K,!0);K.value=K.__value="";var se=d(K);Xe(se,17,()=>t(f),te=>te.name,(te,O)=>{var U=qc(),I=m(U,!0),F={};S(()=>{h(I,t(O).name),F!==(F=t(O).name)&&(U.value=(U.__value=F)??"")}),v(te,U)});var j;Xt(oe);var ne=d(oe,2),ye=m(ne),xe=d(ne,2),ie=m(xe,!0),Ae=d(B,2),Te=A(Ae),me=A(Te),P=m(me,!0),ce=d(me,2);{var be=te=>{var O=JE(),U=m(O,!0);S(I=>h(U,I),[()=>t(a)===""?s("Please select method"):s("No data")]),v(te,O)};W(ce,te=>{t(p).length===0&&te(be)})}var ee=d(ce,2);Xe(ee,19,()=>t(p),te=>te.name,(te,O,U)=>{var I=uy(),F=A(I),Ee=A(F),Ie=d(Ee),Me=m(Ie,!0),Ve=d(F,2);{var ze=we=>{var Ce=ey();S(()=>{T(Ce,"id",`arg-input-${t(O).name}`),Pr(Ce,t(i)[t(U)]===!0)}),re("change",Ce,Oe=>b(t(U),Oe.currentTarget.checked)),v(we,Ce)},nt=we=>{var Ce=ty();S(Oe=>{T(Ce,"id",`arg-input-${t(O).name}`),ln(Ce,Oe)},[()=>String(t(i)[t(U)]??0)]),re("input",Ce,Oe=>b(t(U),Number(Oe.currentTarget.value))),v(we,Ce)},Ze=we=>{var Ce=ny();Xe(Ce,21,()=>Object.entries(t(O).options??{}),([Be,pe])=>Be,(Be,pe)=>{var De=c(()=>ec(t(pe),2));let Ue=()=>t(De)[0],Fe=()=>t(De)[1];var Ye=qc(),tt=m(Ye),ht={};S(()=>{h(tt,`${Fe()??""} (${Ue()??""})`),ht!==(ht=Ue())&&(Ye.value=(Ye.__value=ht)??"")}),v(Be,Ye)});var Oe;Xt(Ce),S(Be=>{T(Ce,"id",`arg-input-${t(O).name}`),Oe!==(Oe=Be)&&(Ce.value=(Ce.__value=Oe)??"",Bn(Ce,Oe))},[()=>String(t(i)[t(U)]??"")]),re("change",Ce,Be=>b(t(U),Be.currentTarget.value)),v(we,Ce)},_e=we=>{var Ce=sy(),Oe=A(Ce);Xe(Oe,17,()=>Object.entries(t(O).options??{}),([De,Ue])=>De,(De,Ue)=>{var Fe=c(()=>ec(t(Ue),2));let Ye=()=>t(Fe)[0],tt=()=>t(Fe)[1];var ht=ry(),ct=A(ht),ke=d(ct,2),Le=m(ke,!0);S($e=>{Pr(ct,$e),h(Le,tt())},[()=>(t(i)[t(U)]&Number(Ye()))!==0]),re("change",ct,$e=>M(t(U),Number(Ye()),$e.currentTarget.checked)),v(De,ht)});var Be=d(Oe,2),pe=m(Be);S(De=>h(pe,`= ${De??""}`),[()=>String(t(i)[t(U)]??0)]),v(we,Ce)},Se=we=>{var Ce=iy(),Oe=A(Ce);Xe(Oe,17,()=>w(t(U)),co,(pe,De,Ue)=>{var Fe=ay(),Ye=A(Fe),tt=d(Ye,2),ht=A(tt);ht.value=ht.__value="string";var ct=d(ht);ct.value=ct.__value="integer";var ke=d(ct);ke.value=ke.__value="double";var Le=d(ke);Le.value=Le.__value="bool";var $e;Xt(tt);var at=d(tt,2),lt=d(at,2);S((Je,Pt,Tt,Lt)=>{T(Ye,"aria-label",Je),ln(Ye,t(De).key),T(tt,"aria-label",Pt),$e!==($e=t(De).type)&&(tt.value=(tt.__value=$e)??"",Bn(tt,$e)),T(at,"aria-label",Tt),ln(at,t(De).value),T(lt,"aria-label",Lt)},[()=>`${t(O).name} ${String(Ue)} key`,()=>`${t(O).name} ${String(Ue)} type`,()=>`${t(O).name} ${String(Ue)} value`,()=>`${t(O).name} ${String(Ue)} remove`]),re("input",Ye,Je=>N(t(U),Ue,{key:Je.currentTarget.value})),re("change",tt,Je=>N(t(U),Ue,{type:Je.currentTarget.value})),re("input",at,Je=>N(t(U),Ue,{value:Je.currentTarget.value})),re("click",lt,()=>R(t(U),Ue)),v(pe,Fe)});var Be=d(Oe,2);S(()=>T(Be,"data-testid",`arg-${t(O).name}-add`)),re("click",Be,()=>D(t(U))),v(we,Ce)},V=we=>{var Ce=oy(),Oe=A(Ce),Be=A(Oe);Be.value=Be.__value="string";var pe=d(Be);pe.value=pe.__value="integer";var De=d(pe);De.value=De.__value="double";var Ue=d(De);Ue.value=Ue.__value="bool";var Fe;Xt(Oe);var Ye=d(Oe,2);S((tt,ht)=>{T(Oe,"aria-label",`${t(O).name} type`),Fe!==(Fe=tt)&&(Oe.value=(Oe.__value=Fe)??"",Bn(Oe,Fe)),T(Ye,"id",`arg-input-${t(O).name}`),ln(Ye,ht)},[()=>x(t(U)).type,()=>x(t(U)).value]),re("change",Oe,tt=>b(t(U),{...x(t(U)),type:tt.currentTarget.value})),re("input",Ye,tt=>b(t(U),{...x(t(U)),value:tt.currentTarget.value})),v(we,Ce)},L=we=>{var Ce=ly();let Oe;S((Be,pe)=>{T(Ce,"id",`arg-input-${t(O).name}`),Oe=_t(Ce,1,"hmm-input hmm-console-json svelte-17kjuug",null,Oe,{"hmm-console-invalid":Be}),ln(Ce,pe)},[()=>!XE(String(t(i)[t(U)]??"")),()=>String(t(i)[t(U)]??"")]),re("input",Ce,Be=>b(t(U),Be.currentTarget.value)),v(we,Ce)},Pe=we=>{var Ce=dy();S((Oe,Be)=>{T(Ce,"id",`arg-input-${t(O).name}`),T(Ce,"list",Oe),ln(Ce,Be)},[()=>KE(t(O))?"hmm-console-addresses":void 0,()=>String(t(i)[t(U)]??"")]),re("input",Ce,Oe=>b(t(U),Oe.currentTarget.value)),v(we,Ce)};W(Ve,we=>{t(O).kind==="bool"?we(ze):t(O).kind==="number"?we(nt,1):t(O).kind==="select"?we(Ze,2):t(O).kind==="flags"?we(_e,3):t(O).kind==="struct"?we(Se,4):t(O).kind==="variant"?we(V,5):t(O).kind==="json"?we(L,6):we(Pe,-1)})}var Ge=d(Ve,2);{var qe=we=>{var Ce=cy(),Oe=m(Ce);S((Be,pe)=>h(Oe,`${Be??""}: ${pe??""}`),[()=>s("optional"),()=>t(O).optional.join(", ")]),v(we,Ce)};W(Ge,we=>{t(O).optional.length>0&&we(qe)})}S(()=>{T(I,"data-testid",`arg-${t(O).name}`),T(F,"for",`arg-input-${t(O).name}`),h(Ee,`${t(O).name??""} `),h(Me,t(O).type)}),v(te,I)});var he=d(ee,2);Xe(he,20,()=>t(g),te=>te,(te,O)=>{var U=fy(),I={};S(()=>{I!==(I=O)&&(U.value=(U.__value=I)??"")}),v(te,U)});var G=d(Te,2),Q=A(G),q=A(Q),Y=d(q);{var ae=te=>{var O=hy(),U=m(O,!0);S(()=>h(U,t(o).error)),v(te,O)};W(Y,te=>{t(o)&&!t(o).ok&&te(ae)})}var J=d(Q,2),ve=d(Ae,2);{var ge=te=>{var O=my(),U=A(O),I=m(U,!0),F=d(U,2),Ee=m(F,!0);S(Ie=>{h(I,t(_).name),h(Ee,Ie)},[()=>t(_).help.replace(/<[^>]*>/g," ").replace(/\s+/g," ").trim()]),v(te,O)};W(ve,te=>{t(_)?.help&&te(ge)})}S((te,O,U,I,F,Ee,Ie,Me)=>{T(oe,"aria-label",te),h(X,O),j!==(j=t(a))&&(oe.value=(oe.__value=j)??"",Bn(oe,j)),h(ye,`${t(a)??""}(${U??""})`),xe.disabled=t(a)===""||n.console.running,h(ie,I),h(P,F),h(q,`${Ee??""} `),T(J,"aria-label",Ie),ln(J,Me)},[()=>s("Please select method"),()=>s("Please select method"),()=>JSON.stringify(t(k)).slice(1,-1),()=>s("Send request"),()=>s("Parameters"),()=>s("Response"),()=>s("Response"),()=>t(o)===void 0?"":t(o).ok?JSON.stringify(t(o).result,void 0,2):`${t(o).error??""}${t(o).faultCode===void 0?"":` (${t(o).faultCode})`}`]),re("change",oe,te=>E(te.currentTarget.value)),re("click",xe,()=>{z()}),v(r,fe),ft()}Et(["change","click","input"]);function gy(r,e,n,s,a=4){const i=Math.max(a,s.width-n.width-a),o=Math.max(a,s.height-n.height-a);return{x:Math.min(Math.max(a,r),i),y:Math.min(Math.max(a,e),o)}}var by=y('<div class="hmm-context-separator svelte-192vamk" role="separator"></div>'),_y=y('<button type="button" role="menuitem"> </button>'),Ey=y('<div class="hmm-context-menu svelte-192vamk" role="menu"></div>');function Ld(r,e){ut(e,!0);let n=H(e,"open",15,!1),s=H(e,"x",3,0),a=H(e,"y",3,0),i=H(e,"onselect",3,void 0),o=H(e,"onclose",3,void 0),l=H(e,"label",3,"Menu"),f=H(e,"testId",3,void 0),p=C(void 0),_=C(We({x:0,y:0}));ot(()=>{if(!n()||!t(p))return;const D=t(p).getBoundingClientRect();u(_,gy(s(),a(),{width:D.width||180,height:D.height||0},{width:window.innerWidth,height:window.innerHeight}),!0),t(p).querySelector("button:not(:disabled)")?.focus()});function g(){n(!1),o()?.()}function k(D){D.disabled===!0||D.separator===!0||(g(),i()?.(D.id))}function E(D){n()&&D.key==="Escape"&&(D.preventDefault(),g())}var b=St();Ir("keydown",va,E),Ir("mousedown",va,D=>{n()&&t(p)&&D.target instanceof Node&&!t(p).contains(D.target)&&g()});var w=Ne(b);{var x=D=>{var N=Ey();let R;Xe(N,21,()=>e.items,M=>M.id,(M,z)=>{var $=St(),le=Ne($);{var fe=B=>{var oe=by();v(B,oe)},de=B=>{var oe=_y();let K;var X=m(oe,!0);S(()=>{K=_t(oe,1,"hmm-context-item svelte-192vamk",null,K,{"hmm-context-danger":t(z).danger===!0}),oe.disabled=t(z).disabled===!0,h(X,t(z).label??t(z).id)}),re("click",oe,()=>k(t(z))),v(B,oe)};W(le,B=>{t(z).separator===!0?B(fe):B(de,-1)})}v(M,$)}),fn(N,M=>u(p,M),()=>t(p)),S(()=>{T(N,"aria-label",l()),T(N,"data-testid",f()),R=Un(N,"",R,{left:`${t(_).x}px`,top:`${t(_).y}px`})}),v(D,N)};W(w,D=>{n()&&D(x)})}v(r,b),ft()}Et(["click"]);function yy(){return globalThis.navigator?.clipboard}async function Sy(r,e={}){const n=yy();if(typeof n?.writeText=="function")try{return await n.writeText(r),"clipboard"}catch{}return wy(r,e.host)?"selection":"failed"}function wy(r,e=document.body){const n=e.ownerDocument,s=n.activeElement,a=n.createElement("textarea");a.value=r,a.readOnly=!0,a.tabIndex=-1,a.setAttribute("aria-hidden","true"),Object.assign(a.style,{position:"fixed",top:"0",left:"0",width:"1px",height:"1px",padding:"0",border:"0",opacity:"0",pointerEvents:"none"}),e.append(a);try{return a.focus({preventScroll:!0}),a.select(),a.setSelectionRange(0,r.length),n.execCommand("copy")}catch{return!1}finally{a.remove(),(s instanceof HTMLElement||s instanceof SVGElement)&&s.focus({preventScroll:!0})}}const ky="data-measure-skip";function Ay(r){return r.scrollWidth>r.clientWidth}function Ty(r){return(r.innerText||r.textContent||"").replace(/\s+/g," ").trim()}function Ry(r,e){if(e.length===0)return[];const n=document.createElement("div");n.setAttribute("aria-hidden","true"),Object.assign(n.style,{position:"absolute",left:"0",top:"0",width:"max-content",height:"0",overflow:"visible",visibility:"hidden",pointerEvents:"none"});const s=e.map(a=>{const i=getComputedStyle(a),o=a.cloneNode(!0);for(const l of o.querySelectorAll(`[${ky}]`))l.remove();for(const l of[o,...o.querySelectorAll("[data-testid], [id]")])l.removeAttribute("data-testid"),l.removeAttribute("id");return Object.assign(o.style,{display:"block",position:"static",width:"max-content",minWidth:"0",maxWidth:"none",height:"auto",overflow:"visible",fontFamily:i.fontFamily,fontSize:i.fontSize,fontStyle:i.fontStyle,fontWeight:i.fontWeight,letterSpacing:i.letterSpacing}),n.append(o),o});r.append(n);try{return s.map(a=>a.getBoundingClientRect().width)}finally{n.remove()}}const Ei=40,xy=1200,Dy=600,$c=10;function yi(r,e=Ei,n=xy){return Number.isFinite(r)?Math.round(Math.min(Math.max(r,e),Math.max(e,n))):e}function Iy(r,e=Ei,n=Dy){const s=r.filter(a=>Number.isFinite(a)&&a>0);if(s.length!==0)return yi(Math.ceil(Math.max(...s)),e,n)}function Ui(r){return r.fixed!==!0&&r.hidden!==!0}function Xc(r){return r.keepMinWidth!==!0||r.minWidth===void 0?Ei:Math.max(Ei,Math.round(r.minWidth))}function Ny(r){const e={};if(r===null||typeof r!="object"||Array.isArray(r))return e;for(const[n,s]of Object.entries(r))typeof s=="number"&&Number.isFinite(s)&&(e[n]=yi(s));return e}const Cy=30,Gh=20,Ba=Gh+12,Py=22,My=Py+12;function Kl(r,e){if(e.value)return e.value(r);const n=r[e.key];if(n!=null)return typeof n=="string"||typeof n=="number"||typeof n=="boolean"?n:String(n)}function ui(r,e){const n=Kl(r,e);return n===void 0?"":String(n)}function Zi(r){return r.sortable!==!1&&r.hidden!==!0}function Uh(r){return r.filterable!==!1&&r.hidden!==!0}function Qc(r,e){return r.toLowerCase().includes(e.toLowerCase())}function Zc(r,e,n,s){for(const a of e){const i=s[a.key];if(i!==void 0&&i!==""&&!Qc(ui(r,a),i))return!1}return n.trim()===""?!0:e.filter(a=>Uh(a)).some(a=>Qc(ui(r,a),n))}function Oy(r,e){const n=r===void 0||r==="",s=e===void 0||e==="";return n||s?n&&s?0:n?1:-1:typeof r=="number"&&typeof e=="number"?r-e:typeof r=="boolean"&&typeof e=="boolean"?Number(r)-Number(e):String(r).localeCompare(String(e),void 0,{numeric:!0,sensitivity:"base"})}function Ly(r){const{rows:e,columns:n,getId:s,children:a,expanded:i}=r,o=r.globalFilter??"",l=r.columnFilters??{},f=r.subColumns??n,_=o.trim()!==""||Object.values(l).some(E=>E!=="")?e.filter(E=>Zc(E,n,o,l)||(a?.(E)??[]).some(b=>Zc(b,f,o,l))):[...e],g=r.sort;if(g){const E=n.find(b=>b.key===g.key);if(E&&Zi(E)){const b=g.direction==="asc"?1:-1;_.sort((w,x)=>b*Oy(Kl(w,E),Kl(x,E)))}}const k=[];for(const E of _){const b=s(E),w=a?.(E)??[],x=i.has(b);if(k.push({id:b,key:b,row:E,depth:0,hasChildren:w.length>0,expanded:x,rootId:b,kind:"row"}),!!x){r.subHeader===!0&&w.length>0&&k.push({id:`${b}::header`,key:`${b}::header`,row:E,depth:1,hasChildren:!1,expanded:!1,rootId:b,kind:"header"});for(const D of w)k.push({id:s(D),key:`${b}/${s(D)}`,row:D,depth:1,hasChildren:!1,expanded:!1,rootId:b,kind:"row"})}}return k}function Fy(r,e,n,s,a=6){if(r===0||s<=0)return{start:0,end:0};const i=Math.max(1,Math.ceil((n<=0?s:n)/s)),o=Math.max(0,Math.min(r-1,Math.floor(e/s)-a)),l=Math.min(r,o+i+a*2);return{start:o,end:l}}const Yl=56,Jc=120,eu=22;function Gy(r,e){if(r.width===void 0&&e===void 0)return`minmax(${Yl}px, ${Jc}fr)`;if(r.fixed&&r.width!==void 0)return`${r.width}px`;if(e!==void 0)return`${e}px`;const n=r.width??Jc;return`minmax(${Bh(r)}px, ${n}fr)`}function Bh(r){return r.minWidth!==void 0?r.minWidth:Math.min(r.width??Yl,Yl)}function Uy(r,e){return r.fixed&&r.width!==void 0?r.width:e!==void 0?e:Bh(r)}function tu(r){return{key:r.key,width:r.width,fixed:r.fixed===!0,...r.minWidth===void 0?{}:{minWidth:r.minWidth},...r.keepMinWidth===!0&&r.minWidth!==void 0?{keepMinWidth:!0}:{}}}function By(r,e){return e===void 0||r.keepMinWidth!==!0||r.minWidth===void 0?e:Math.max(e,r.minWidth)}function Hh(r,e={}){const n=r.expander?[`${eu}px`]:[];let s=r.expander?eu:0;for(const a of r.tracks){const i=a.fixed?void 0:By(a,e[a.key]);n.push(Gy(a,i)),s+=Uy(a,i)}return{template:n.join(" "),minWidth:s}}function Hy(r,e,n){const s=r.filter(f=>f.hidden!==!0).map(f=>tu(f)),a=[];let i=0;for(const f of e??[]){if(f.hidden===!0)continue;const p=s.findIndex(_=>_.key===f.key);if(p>=0){i=p+1;continue}s.splice(i,0,tu(f)),a.push(f.key),i+=1}const o=n?2:1,l={};for(const[f,p]of s.entries())l[p.key]=f+o;return{template:Hh({tracks:s,expander:n}).template,track:l,tracks:s,expander:n,subKeys:a}}function Vy(r,e,n){const s=new Set(r.subKeys),a={};for(const[i,o]of Object.entries(e))s.has(i)||(a[i]=o);for(const[i,o]of Object.entries(n))s.has(i)&&(a[i]=o);return a}function zy(r,e,n){const s=new Set(e.filter(i=>i.hidden!==!0).map(i=>i.key)),a=[];for(const i of r){const o=i.columns.filter(l=>s.has(l)).map(l=>n.track[l]).filter(l=>l!==void 0);o.length!==0&&a.push({key:i.key,label:i.label,sublabel:i.sublabel,start:Math.min(...o),end:Math.max(...o)+1})}return a}function jy(r,e){return r.trim()!==""||Object.values(e).some(n=>n.trim()!=="")}function Wy(r,e,n){const s=r.findIndex(l=>l.id===e),a=r.findIndex(l=>l.id===n);if(s===-1||a===-1)return a===-1?[]:[n];const[i,o]=s<=a?[s,a]:[a,s];return r.slice(i,o+1).filter(l=>l.kind!=="header").map(l=>l.id)}function Ky(r,e,n,s,a){if(a.shift===!0&&n!==void 0)return{selected:Wy(r,n,s),anchorId:n};if(a.ctrl===!0){const i=new Set(e);return i.has(s)?i.delete(s):i.add(s),{selected:[...i],anchorId:s}}return{selected:[s],anchorId:s}}var Yy=y('<div role="separator" aria-orientation="vertical" tabindex="0" data-measure-skip=""></div>'),qy=y('<span class="hmm-table-caption svelte-16k18c8"> </span>'),$y=y('<div class="hmm-table-actions svelte-16k18c8" role="toolbar"><!></div>'),nu=y('<span class="hmm-table-count svelte-16k18c8"> </span>'),Xy=y('<div class="hmm-table-band svelte-16k18c8"><!> <!> <div class="hmm-table-trailing svelte-16k18c8"><!> <!></div></div>'),Qy=y('<span class="hmm-th-group-sub svelte-16k18c8"> </span>'),Zy=y('<div class="hmm-th hmm-th-group svelte-16k18c8" role="columnheader"><span class="hmm-th-group-label"> </span> <!></div>'),Jy=y('<div class="hmm-table-groups svelte-16k18c8" role="row"></div>'),eS=y('<div class="hmm-th hmm-th-expander svelte-16k18c8" role="columnheader"></div>'),tS=y('<span class="hmm-th-sort svelte-16k18c8" aria-hidden="true"> </span>'),nS=y('<button type="button" class="hmm-th-button svelte-16k18c8"><span class="hmm-th-label"> </span> <!></button>'),rS=y('<span class="hmm-th-label"> </span>'),sS=y('<div class="hmm-th svelte-16k18c8" role="columnheader"><!> <!></div>'),aS=y('<div class="hmm-th hmm-th-sub-only svelte-16k18c8"><!></div>'),iS=y('<div class="hmm-tf-spacer"></div>'),oS=y('<input class="hmm-input hmm-tf-input svelte-16k18c8" type="search"/>'),lS=y('<div class="hmm-tf svelte-16k18c8"><!></div>'),dS=y('<div class="hmm-table-filters svelte-16k18c8"><!> <!></div>'),cS=y('<span> </span> <button type="button" class="hmm-button hmm-table-clear svelte-16k18c8"> </button>',1),uS=y('<div class="hmm-table-empty svelte-16k18c8"><!></div>'),fS=y('<button type="button" class="hmm-expander svelte-16k18c8"> </button>'),hS=y('<div class="hmm-td hmm-td-expander svelte-16k18c8"><!></div>'),mS=y(" <!>",1),vS=Mr('<path d="M1.5 5.2 4 7.7 8.5 2.3"></path>'),pS=Mr('<rect x="3.5" y="3.5" width="5.5" height="5.5" rx="1"></rect><path d="M6.5 1.5h-4a1 1 0 0 0-1 1v4"></path>',1),gS=y('<button type="button" data-measure-skip=""><svg class="hmm-copy-icon svelte-16k18c8" viewBox="0 0 10 10" aria-hidden="true"><!></svg></button>'),bS=y('<div role="gridcell"><!> <!></div>'),_S=y('<div role="row" tabindex="-1"><!> <!></div>'),ES=y('<div class="hmm-table-spacer svelte-16k18c8"><div class="hmm-table-rows svelte-16k18c8"></div></div>'),yS=y('<div class="hmm-table svelte-16k18c8"><!> <div role="grid" tabindex="0"><!> <div class="hmm-table-head svelte-16k18c8" role="row"><!> <!> <!></div> <!> <div class="hmm-table-body svelte-16k18c8"><!></div></div> <!> <!> <span class="hmm-table-announce svelte-16k18c8" role="status" aria-live="polite"> </span> <!></div>');function Fs(r,e){ut(e,!0);const n=(Z,Re=Hn,Ke=Hn)=>{var st=Yy();let Ut;S(wt=>{Ut=_t(st,1,"hmm-th-resize svelte-16k18c8",null,Ut,{"hmm-th-resize-active":t(Mn)===Re().key}),T(st,"aria-label",wt),T(st,"data-testid",Ke())},[()=>ie("Resize column {column}",{column:Re().label})]),re("pointerdown",st,wt=>zr(wt,Re().key)),re("pointermove",st,Zn),re("pointerup",st,wt=>Lr(wt,Re())),Ir("pointercancel",st,jn),Ir("lostpointercapture",st,jn),re("dblclick",st,wt=>{wt.preventDefault(),Qn||Ft(Re().key)}),re("keydown",st,wt=>cs(wt,Re().key)),v(Z,st)};let s=H(e,"columnGroups",3,void 0),a=H(e,"scope",3,void 0),i=H(e,"subRows",3,void 0),o=H(e,"subColumns",3,void 0),l=H(e,"rowHeight",3,Cy),f=H(e,"height",3,void 0),p=H(e,"overscan",3,6),_=H(e,"columnFilterRow",3,!0),g=H(e,"caption",3,void 0),k=H(e,"emptyText",3,""),E=H(e,"noMatchText",3,"No row matches the filter"),b=H(e,"clearFilterLabel",3,"Clear filter"),w=H(e,"showingText",3,void 0),x=H(e,"filterLabel",3,"Filter"),D=H(e,"toolbar",3,void 0),N=H(e,"toolbarLabel",3,void 0),R=H(e,"status",3,void 0),M=H(e,"countText",3,void 0),z=H(e,"selected",31,()=>We([])),$=H(e,"expanded",31,()=>We([])),le=H(e,"filter",15,""),fe=H(e,"sort",15,void 0),de=H(e,"onactivate",3,void 0),B=H(e,"onrowcontextmenu",3,void 0),oe=H(e,"renameColumn",3,"name"),K=H(e,"canRename",3,void 0),X=H(e,"onrename",3,void 0),se=H(e,"cell",3,void 0),j=H(e,"tableId",3,void 0),ne=H(e,"subTableId",3,void 0),ye=H(e,"testId",3,void 0);const xe=Op();function ie(Z,Re={}){return xe?.t===void 0?Lp(Z,Re):xe.t(Z,Re)}let Ae=C(We({})),Te=C(0),me=C(0),P=C(0),ce=C(0),be=C(void 0),ee=C(void 0),he=C(void 0),G=C(void 0),Q=C(void 0),q=C(void 0);const Y=c(()=>e.columns.filter(Z=>Z.hidden!==!0)),ae=c(()=>(o()??e.columns).filter(Z=>Z.hidden!==!0)),J=c(()=>i()!==void 0),ve=c(()=>Hy(e.columns,o(),t(J)));let ge=C({}),te=C({}),O=C(void 0);const U=c(()=>{const Z=xe?.columnWidths;return j()===void 0||Z===void 0?t(ge):Z.widths(j())}),I=c(()=>{const Z=xe?.columnWidths;return ne()===void 0||Z===void 0?t(te):Z.widths(ne())}),F=c(()=>Object.keys(t(U)).length>0),Ee=c(()=>Object.keys(t(I)).length>0),Ie=c(()=>new Set(t(ve).subKeys)),Me=c(()=>t(ae).filter(Z=>t(Ie).has(Z.key)&&Ui(Z))),Ve=c(()=>{const Z=Vy(t(ve),t(U),t(I));return Hh(t(ve),t(O)===void 0?Z:{...Z,[t(O).key]:t(O).width})}),ze=c(()=>zy(s()??[],e.columns,t(ve))),nt=c(()=>new Set($())),Ze=c(()=>g()!==void 0||D()!==void 0||R()!==void 0||M()!==void 0),_e=c(()=>new Set(z())),Se=c(()=>Ly({rows:e.rows,columns:e.columns,getId:e.getId,children:i(),expanded:t(nt),globalFilter:le(),columnFilters:t(Ae),sort:fe(),subColumns:o(),subHeader:o()!==void 0})),V=c(()=>f()??t(me)),L=c(()=>Fy(t(Se).length,t(Te),t(V),l(),p())),Pe=c(()=>t(Se).slice(t(L).start,t(L).end)),Ge=c(()=>jy(le(),t(Ae))),qe=c(()=>t(Se).filter(Z=>Z.depth===0).length),we=c(()=>t(Ge)&&e.rows.length>0);function Ce(){u(Ae,{},!0)}let Oe=sr(()=>a());ot(()=>{a()!==Oe&&(Oe=a(),Ce(),le(""),t(ee)&&(t(ee).scrollTop=0,u(Te,0)))}),ot(()=>{const Z=t(ee);if(!Z)return;const Re=()=>{f()===void 0&&u(me,Z.clientHeight,!0),u(ce,Z.offsetWidth-Z.clientWidth)};Re();const Ke=new ResizeObserver(Re);return Ke.observe(Z),()=>{Ke.disconnect()}});function Be(Z){u(Te,Z.scrollTop,!0);const Re=Z.scrollLeft===0?"":`translateX(${String(-Z.scrollLeft)}px)`;for(const Ke of[t(G),t(Q),t(q)])Ke&&Ke.style.transform!==Re&&(Ke.style.transform=Re);vt(),An()}function pe(Z){Zi(Z)&&(fe()?.key!==Z.key?fe({key:Z.key,direction:"asc"}):fe().direction==="asc"?fe({key:Z.key,direction:"desc"}):fe(void 0))}function De(Z){$(t(nt).has(Z)?$().filter(Re=>Re!==Z):[...$(),Z])}function Ue(Z,Re){if(Z.kind==="header")return;const Ke=Ky(t(Se),z(),t(be),Z.id,Re);z(Ke.selected),u(be,Ke.anchorId,!0),u(P,t(Se).findIndex(st=>st.id===Z.id),!0)}function Fe(Z,Re){Ue(Z,{ctrl:Re.ctrlKey||Re.metaKey,shift:Re.shiftKey})}function Ye(Z,Re){!B()||Z.kind==="header"||(Re.preventDefault(),t(_e).has(Z.id)||Ue(Z,{}),B()(Z.row,Re))}const tt='button, input, select, textarea, a[href], [contenteditable="true"]';function ht(Z){return Z.target instanceof Element&&Z.target.closest(tt)!==null}const ct='input, select, textarea, [contenteditable="true"]',ke=new Set(["ArrowDown","ArrowUp","ArrowLeft","ArrowRight","Home","End"]);function Le(Z){return Z.target instanceof Element&&Z.target.closest(ct)!==null}function $e(Z){return Z?.kind==="row"&&X()!==void 0&&(K()?.(Z.row)??!0)}function at(Z,Re){if(Z.kind!=="row")return;const Ke=lt(Re)?.dataset.columnKey;if(Ke===oe()&&!ht(Re)&&$e(Z)){window.getSelection()?.removeAllRanges(),X()?.(Z.row);return}const st=(Z.depth>0?t(ae):t(Y)).find(Ut=>Ut.key===Ke);if(st?.onactivate!==void 0&&!ht(Re)){window.getSelection()?.removeAllRanges(),st.onactivate(Z.row);return}de()?.(Z.row)}function lt(Z){if(!(Z.target instanceof Element))return null;const Re=Z.target.closest("[data-column-key]");if(Re!==null)return Re;const Ke=Z.target.closest("[data-row-id]");if(Ke===null)return null;for(const st of Ke.querySelectorAll("[data-column-key]")){const Ut=st.getBoundingClientRect();if(Z.clientX>=Ut.left&&Z.clientX<Ut.right)return st}return null}function Je(Z,Re){!$e(Z)||!t(_e).has(Z.id)||ht(Re)||(Re.preventDefault(),X()?.(Z.row))}function Pt(){const Z=t(ee);if(!Z)return;const Re=t(P)*l(),Ke=t(V)===0?Z.clientHeight:t(V);Re<Z.scrollTop?Z.scrollTop=Re:Re+l()>Z.scrollTop+Ke&&(Z.scrollTop=Re+l()-Ke)}function Tt(Z,Re){if(t(Se).length===0)return;const Ke=Math.min(t(Se).length-1,Math.max(0,t(P)+Z)),st=t(Se)[Ke];st&&(u(P,Ke,!0),Ue(st,{shift:Re}),Pt())}function Lt(Z){if(ke.has(Z.key)&&Le(Z))return;const Re=t(Se)[t(P)];switch(Z.key){case"ArrowDown":Z.preventDefault(),Tt(1,Z.shiftKey);break;case"ArrowUp":Z.preventDefault(),Tt(-1,Z.shiftKey);break;case"Home":Z.preventDefault(),Tt(-t(Se).length,Z.shiftKey);break;case"End":Z.preventDefault(),Tt(t(Se).length,Z.shiftKey);break;case"ArrowRight":Re?.hasChildren===!0&&!Re.expanded&&(Z.preventDefault(),De(Re.id));break;case"ArrowLeft":Re?.hasChildren===!0&&Re.expanded&&(Z.preventDefault(),De(Re.id));break;case"Enter":if(ht(Z))break;Re&&de()?(Z.preventDefault(),de()(Re.row)):Je(Re,Z);break;case"F2":Je(Re,Z);break;case" ":Re&&!ht(Z)&&(Z.preventDefault(),Ue(Re,{ctrl:!0}));break;case"Escape":je();break}}const Qt=2,pn=4,wn=14;function tn(Z){return t(Ie).has(Z)?"sub":"table"}function bn(Z){const Re=(tn(Z)==="sub"?t(ae):t(Y)).find(Ke=>Ke.key===Z);return Re===void 0?Ei:Xc(Re)}function Pn(Z,Re){const Ke=xe?.columnWidths,st=tn(Z),Ut=st==="sub"?ne():j(),wt=yi(Re,bn(Z));Ut!==void 0&&Ke!==void 0?Ke.set(Ut,Z,wt):st==="sub"?u(te,{...t(te),[Z]:wt}):u(ge,{...t(ge),[Z]:wt})}function $n(Z){const Re=xe?.columnWidths,Ke=Z==="sub"?ne():j();Ke!==void 0&&Re!==void 0?Re.reset(Ke):Z==="sub"?u(te,{}):u(ge,{})}function Xn(Z,Re){if(Z===void 0||tn(Z)!==Re)return;const Ke=t(Re==="sub"?ae:Y).find(st=>st.key===Z);return Ke!==void 0&&Ui(Ke)?Ke:void 0}function Zt(Z){const Re=`[data-column-key="${CSS.escape(Z)}"]`;return(tn(Z)==="sub"?t(ee)?.querySelector(`.hmm-tr-subhead ${Re}`):t(Q)?.querySelector(Re))??void 0}function Ft(Z){const Re=tn(Z),Ke=Xn(Z,Re),st=Zt(Z);if(!t(he)||!Ke||!st)return;const Ut=t(ee)?[...t(ee).querySelectorAll(`.hmm-td[data-column-key="${CSS.escape(Z)}"]`)]:[],[wt=0,...yt]=Ry(t(he),[st,...Ut]),In=Re==="table"&&Zi(Ke)&&fe()?.key!==Z?wt+wn:wt,mn=Iy([In,...yt],Xc(Ke));mn!==void 0&&Pn(Z,mn)}let Jt,Qn=!1,Mn=C(void 0);function Or(Z){return Z.currentTarget.closest("[data-column-key]")}function zr(Z,Re){const Ke=Or(Z);if(!(Z.button!==0||!Ke)){Z.preventDefault();try{Z.currentTarget.setPointerCapture(Z.pointerId)}catch{}Qn=Z.pointerType==="touch"||Z.pointerType==="pen",Jt={key:Re,pointerId:Z.pointerId,startX:Z.clientX,startWidth:Ke.getBoundingClientRect().width,min:bn(Re),touch:Qn,moved:!1},je()}}function Zn(Z){const Re=Jt;if(Re?.pointerId!==Z.pointerId)return;const Ke=Z.clientX-Re.startX;if(!Re.moved&&Math.abs(Ke)<(Re.touch?pn:Qt))return;Re.moved||(Re.moved=!0,u(Mn,Re.key,!0));const st=yi(Re.startWidth+Ke,Re.min);(t(O)?.key!==Re.key||t(O).width!==st)&&u(O,{key:Re.key,width:st})}function jn(Z){const Re=Jt;Re?.pointerId===Z.pointerId&&(Jt=void 0,u(Mn,void 0),Re.moved&&t(O)?.key===Re.key&&Pn(Re.key,t(O).width),u(O,void 0))}function Lr(Z,Re){const Ke=Jt;jn(Z),Ke?.pointerId===Z.pointerId&&Ke.touch&&!Ke.moved&&tn(Re.key)==="table"&&pe(Re)}function cs(Z,Re){if(Z.key==="ArrowLeft"||Z.key==="ArrowRight"){const Ke=Or(Z);if(Ke){const st=Z.key==="ArrowRight"?$c:-$c;Pn(Re,Ke.getBoundingClientRect().width+st)}}else if(Z.key==="Enter")Ft(Re);else if(Z.key!=="Tab")return;Z.key!=="Tab"&&(Z.preventDefault(),Z.stopPropagation())}let ar=C(!1),Ar=C(0),jr=C(0),cr=C(void 0),Tr=C("table");const ur=c(()=>[{id:"fit",label:ie("Fit column to content"),disabled:Xn(t(cr),t(Tr))===void 0},{id:"reset",label:ie("Reset column widths"),disabled:t(Tr)==="sub"?!t(Ee):!t(F)}]);function ns(Z){const Re=Z.target instanceof Element?Z.target:null;if(!Re)return;const Ke=t(Q)?.contains(Re)===!0||t(G)?.contains(Re)===!0;if(!Ke&&Re.closest(".hmm-tr-subhead")===null)return;Z.preventDefault();const st=Re.closest("[data-column-key]");u(cr,st?.dataset.columnKey,!0),u(Tr,Ke&&(t(cr)===void 0||!t(Ie).has(t(cr)))?"table":"sub",!0),u(Ar,Z.clientX,!0),u(jr,Z.clientY,!0),u(ar,!0),je()}function Fr(Z){Z==="fit"&&t(cr)!==void 0?Ft(t(cr)):Z==="reset"&&$n(t(Tr))}let pr=C(void 0),gr,ue,He,Vt;function yn(Z){return Jt===void 0&&!Z.classList.contains("hmm-td-fixed")&&Ay(Z)}function ir(Z,Re){je(),ue=Z,He=Re,Vt=setTimeout(()=>{Vt=void 0,rt(Z)},eh)}function it(Z){const Ke=(Z.target instanceof Element?Z.target.closest(".hmm-td, .hmm-th"):null)??void 0;Ke!==gr&&(gr=Ke,!(Ke!==void 0&&Ke===ue)&&(Ke!==void 0&&yn(Ke)?ir(Ke,"pointer"):He==="pointer"&&je()))}function bt(Z){try{return Z.matches(":focus-visible")}catch{return!1}}function It(Z){const Re=Z.target instanceof HTMLElement?Z.target:void 0,Ke=Re?.closest(".hmm-td, .hmm-th")??void 0;Re===void 0||Ke===void 0||Ke===ue||Re.classList.contains("hmm-th-resize")||!bt(Re)||yn(Ke)&&ir(Ke,"focus")}function et(){He==="focus"&&je()}function rt(Z){if(ue!==Z||!Z.isConnected)return;const Re=Ty(Z.querySelector(".hmm-th-label")??Z);if(Re==="")return;const{left:Ke,top:st,bottom:Ut}=Z.getBoundingClientRect();u(pr,{text:Re,anchor:{left:Ke,top:st,bottom:Ut}})}function je(){Vt!==void 0&&(clearTimeout(Vt),Vt=void 0),ue=void 0,He=void 0,t(pr)!==void 0&&u(pr,void 0)}function vt(){je(),gr=void 0}function At(){He==="pointer"&&je(),gr=void 0}ot(()=>()=>{Vt!==void 0&&clearTimeout(Vt)});const zt=1500,hn=4e3;let Ht=C(void 0),Mt;function kn(Z,Re){return`${Z.key}\0${Re.key}`}function An(){Mt!==void 0&&(clearTimeout(Mt),Mt=void 0),t(Ht)!==void 0&&u(Ht,void 0)}async function dn(Z,Re,Ke){Z.stopPropagation();const st=Z.currentTarget;if(!(st instanceof HTMLElement))return;const Ut=await Sy(ui(Re.row,Ke),{host:t(he)});if(je(),An(),!st.isConnected)return;const wt=Ut!=="failed";wt||_n(st);const{left:yt,top:In,bottom:mn}=st.getBoundingClientRect();u(Ht,{key:kn(Re,Ke),ok:wt,text:ie(wt?"Copied":"Could not copy - the text is selected"),anchor:{left:yt,top:In,bottom:mn}}),Mt=setTimeout(An,wt?zt:hn)}function _n(Z){const Re=Z.closest(".hmm-td"),Ke=window.getSelection();if(!Re||!Ke)return;const st=document.createRange();st.selectNodeContents(Re),st.setEndBefore(Z),Ke.removeAllRanges(),Ke.addRange(st)}ot(()=>()=>{Mt!==void 0&&clearTimeout(Mt)});var or=yS(),Gn=A(or);{var cn=Z=>{var Re=Xy(),Ke=A(Re);{var st=Wt=>{var rn=qy(),sn=m(rn,!0);S(()=>h(sn,g())),v(Wt,rn)};W(Ke,Wt=>{g()!==void 0&&Wt(st)})}var Ut=d(Ke,2);{var wt=Wt=>{var rn=$y(),sn=A(rn);qs(sn,D),S(()=>T(rn,"aria-label",N()??g()??x())),v(Wt,rn)};W(Ut,Wt=>{D()&&Wt(wt)})}var yt=d(Ut,2),In=A(yt);{var mn=Wt=>{var rn=St(),sn=Ne(rn);qs(sn,R),v(Wt,rn)};W(In,Wt=>{R()&&Wt(mn)})}var fr=d(In,2);{var Wn=Wt=>{var rn=nu(),sn=m(rn,!0);S(un=>{T(rn,"data-testid",ye()===void 0?void 0:`${ye()}-count`),h(sn,un)},[()=>w()(t(qe),e.rows.length)]),v(Wt,rn)},On=Wt=>{var rn=nu(),sn=m(rn,!0);S(()=>{T(rn,"data-testid",ye()===void 0?void 0:`${ye()}-count`),h(sn,M())}),v(Wt,rn)};W(fr,Wt=>{t(we)&&w()!==void 0?Wt(Wn):M()!==void 0&&Wt(On,1)})}v(Z,Re)};W(Gn,Z=>{t(Ze)&&Z(cn)})}var jt=d(Gn,2);let Rt,pt;var dt=A(jt);{var Gt=Z=>{var Re=Jy();Xe(Re,21,()=>t(ze),Ke=>Ke.key,(Ke,st)=>{var Ut=Zy();let wt;var yt=A(Ut),In=m(yt,!0),mn=d(yt,2);{var fr=Wn=>{var On=Qy(),Wt=m(On,!0);S(()=>h(Wt,t(st).sublabel)),v(Wn,On)};W(mn,Wn=>{t(st).sublabel!==void 0&&t(st).sublabel!==""&&Wn(fr)})}S(Wn=>{T(Ut,"aria-colspan",t(st).end-t(st).start),T(Ut,"data-testid",ye()===void 0?void 0:`${ye()}-group-${t(st).key}`),wt=Un(Ut,"",wt,{"grid-column":Wn}),h(In,t(st).label)},[()=>`${String(t(st).start)} / ${String(t(st).end)}`]),v(Ke,Ut)}),fn(Re,Ke=>u(G,Ke),()=>t(G)),v(Z,Re)};W(dt,Z=>{t(ze).length>0&&Z(Gt)})}var nn=d(dt,2),Tn=A(nn);{var Dn=Z=>{var Re=eS();v(Z,Re)};W(Tn,Z=>{t(J)&&Z(Dn)})}var Jn=d(Tn,2);Xe(Jn,17,()=>t(Y),Z=>Z.key,(Z,Re)=>{var Ke=sS();let st;var Ut=A(Ke);{var wt=On=>{var Wt=nS();let rn;var sn=A(Wt),un=m(sn,!0),Kr=d(sn,2);{var Vs=Yr=>{var Gr=tS(),Qs=m(Gr,!0);S(()=>h(Qs,fe().direction==="asc"?"▲":"▼")),v(Yr,Gr)};W(Kr,Yr=>{fe()?.key===t(Re).key&&Yr(Vs)})}S(()=>{rn=Un(Wt,"",rn,{"justify-content":t(Re).align==="right"?"flex-end":t(Re).align==="center"?"center":"flex-start"}),h(un,t(Re).label)}),re("click",Wt,()=>pe(t(Re))),v(On,Wt)},yt=c(()=>Zi(t(Re))),In=On=>{var Wt=rS(),rn=m(Wt,!0);S(()=>h(rn,t(Re).label)),v(On,Wt)};W(Ut,On=>{t(yt)?On(wt):On(In,-1)})}var mn=d(Ut,2);{var fr=On=>{n(On,()=>t(Re),()=>ye()===void 0?void 0:`${ye()}-resize-${t(Re).key}`)},Wn=c(()=>Ui(t(Re)));W(mn,On=>{t(Wn)&&On(fr)})}S(()=>{T(Ke,"aria-label",t(Re).label===""?void 0:t(Re).label),T(Ke,"data-column-key",t(Re).key),T(Ke,"aria-sort",fe()?.key===t(Re).key?fe().direction==="asc"?"ascending":"descending":"none"),st=Un(Ke,"",st,{"grid-column":t(ve).track[t(Re).key],"text-align":t(Re).align??"left"})}),v(Z,Ke)});var lr=d(Jn,2);Xe(lr,17,()=>t(Me),Z=>Z.key,(Z,Re)=>{var Ke=aS();let st;var Ut=A(Ke);n(Ut,()=>t(Re),()=>ye()===void 0?void 0:`${ye()}-resize-${t(Re).key}`),S(()=>{T(Ke,"data-column-key",t(Re).key),st=Un(Ke,"",st,{"grid-column":t(ve).track[t(Re).key],"grid-row":"1"})}),v(Z,Ke)}),fn(nn,Z=>u(Q,Z),()=>t(Q));var us=d(nn,2);{var Bs=Z=>{var Re=dS(),Ke=A(Re);{var st=wt=>{var yt=iS();v(wt,yt)};W(Ke,wt=>{t(J)&&wt(st)})}var Ut=d(Ke,2);Xe(Ut,17,()=>t(Y),wt=>wt.key,(wt,yt)=>{var In=lS();let mn;var fr=A(In);{var Wn=Wt=>{var rn=oS();S(()=>{T(rn,"aria-label",`${x()}: ${t(yt).label}`),ln(rn,t(Ae)[t(yt).key]??"")}),re("input",rn,sn=>{u(Ae,{...t(Ae),[t(yt).key]:sn.currentTarget.value},!0)}),v(Wt,rn)},On=c(()=>Uh(t(yt)));W(fr,Wt=>{t(On)&&Wt(Wn)})}S(()=>mn=Un(In,"",mn,{"grid-column":t(ve).track[t(yt).key]})),v(wt,In)}),fn(Re,wt=>u(q,wt),()=>t(q)),v(Z,Re)};W(us,Z=>{_()&&Z(Bs)})}var Rn=d(us,2);let gn;var Rr=A(Rn);{var Wr=Z=>{var Re=uS(),Ke=A(Re);{var st=wt=>{var yt=cS(),In=Ne(yt),mn=m(In,!0),fr=d(In,2),Wn=m(fr,!0);S(()=>{h(mn,E()),T(fr,"data-testid",ye()===void 0?void 0:`${ye()}-clear-filter`),h(Wn,b())}),re("click",fr,Ce),v(wt,yt)},Ut=wt=>{var yt=Cn();S(()=>h(yt,k())),v(wt,yt)};W(Ke,wt=>{t(we)?wt(st):wt(Ut,-1)})}v(Z,Re)},Ts=Z=>{var Re=ES();let Ke;var st=A(Re);let Ut;Xe(st,23,()=>t(Pe),wt=>wt.key,(wt,yt,In)=>{var mn=_S();let fr,Wn;var On=A(mn);{var Wt=sn=>{var un=hS(),Kr=A(un);{var Vs=Yr=>{var Gr=fS(),Qs=m(Gr,!0);S(()=>{T(Gr,"aria-expanded",t(yt).expanded),T(Gr,"aria-label",t(yt).expanded?"Collapse row":"Expand row"),h(Qs,t(yt).expanded?"−":"+")}),re("click",Gr,qa=>{qa.stopPropagation(),De(t(yt).id)}),v(Yr,Gr)};W(Kr,Yr=>{t(yt).hasChildren&&Yr(Vs)})}v(sn,un)};W(On,sn=>{t(J)&&sn(Wt)})}var rn=d(On,2);Xe(rn,17,()=>t(yt).depth>0?t(ae):t(Y),sn=>sn.key,(sn,un)=>{var Kr=bS();let Vs,Yr;var Gr=A(Kr);{var Qs=br=>{var Ur=mS(),dr=Ne(Ur),Zs=d(dr);{var $a=Js=>{n(Js,()=>t(un),()=>ye()===void 0?void 0:`${ye()}-sub-resize-${t(un).key}`)},Xa=c(()=>t(Ie).has(t(un).key)&&Ui(t(un)));W(Zs,Js=>{t(Xa)&&Js($a)})}S(()=>h(dr,`${t(un).label??""} `)),v(br,Ur)},qa=br=>{var Ur=St(),dr=Ne(Ur);qs(dr,se,()=>t(yt).row,()=>t(un),()=>t(yt)),v(br,Ur)},xo=br=>{var Ur=Cn();S(dr=>h(Ur,dr),[()=>ui(t(yt).row,t(un))]),v(br,Ur)};W(Gr,br=>{t(yt).kind==="header"?br(Qs):se()?br(qa,1):br(xo,-1)})}var Do=d(Gr,2);{var Io=br=>{const Ur=c(()=>kn(t(yt),t(un)));var dr=gS();let Zs;var $a=A(dr),Xa=A($a);{var Js=_r=>{var Qa=vS();v(_r,Qa)},Mi=_r=>{var Qa=pS();v(_r,Qa)};W(Xa,_r=>{t(Ht)?.key===t(Ur)&&t(Ht).ok?_r(Js):_r(Mi,-1)})}S(_r=>{Zs=_t(dr,1,"hmm-copy svelte-16k18c8",null,Zs,{"hmm-copy-shown":t(Ht)?.key===t(Ur)}),T(dr,"tabindex",t(L).start+t(In)===t(P)?0:-1),T(dr,"aria-label",_r)},[()=>t(un).copy==="name"?ie("Copy name"):ie("Copy address")]),re("click",dr,_r=>{dn(_r,t(yt),t(un))}),re("dblclick",dr,_r=>{_r.stopPropagation()}),v(br,dr)},Pi=c(()=>t(un).copy!==void 0&&t(yt).kind==="row"&&ui(t(yt).row,t(un))!=="");W(Do,br=>{t(Pi)&&br(Io)})}S(()=>{Vs=_t(Kr,1,"hmm-td svelte-16k18c8",null,Vs,{"hmm-td-fixed":t(un).fixed===!0,"hmm-td-copy":t(un).copy!==void 0&&t(yt).kind==="row","hmm-mono":t(un).mono===!0&&t(yt).kind==="row"}),T(Kr,"data-column-key",t(un).key),Yr=Un(Kr,"",Yr,{"grid-column":t(ve).track[t(un).key],"text-align":t(un).align??"left"})}),v(sn,Kr)}),S((sn,un)=>{fr=_t(mn,1,"hmm-tr svelte-16k18c8",null,fr,{"hmm-tr-even":(t(L).start+t(In))%2===1,"hmm-tr-selected":sn,"hmm-tr-child":t(yt).depth>0&&t(yt).kind==="row","hmm-tr-subhead":t(yt).kind==="header"}),T(mn,"aria-selected",un),T(mn,"data-row-id",t(yt).id),T(mn,"data-row-kind",t(yt).kind),Wn=Un(mn,"",Wn,{height:`${l()}px`})},[()=>t(_e).has(t(yt).id),()=>t(yt).kind==="header"?void 0:t(_e).has(t(yt).id)]),re("click",mn,sn=>Fe(t(yt),sn)),re("dblclick",mn,sn=>at(t(yt),sn)),re("contextmenu",mn,sn=>Ye(t(yt),sn)),v(wt,mn)}),S(()=>{Ke=Un(Re,"",Ke,{height:`${t(Se).length*l()}px`}),Ut=Un(st,"",Ut,{transform:`translateY(${t(L).start*l()}px)`})}),v(Z,Re)};W(Rr,Z=>{t(Se).length===0?Z(Wr):Z(Ts,-1)})}fn(Rn,Z=>u(ee,Z),()=>t(ee));var fs=d(jt,2);{var Hs=Z=>{{let Re=c(()=>ye()===void 0?void 0:`${ye()}-tooltip`);Rl(Z,{get text(){return t(pr).text},get anchor(){return t(pr).anchor},get testId(){return t(Re)}})}};W(fs,Z=>{t(pr)!==void 0&&Z(Hs)})}var ba=d(fs,2);{var Ni=Z=>{{let Re=c(()=>ye()===void 0?void 0:`${ye()}-copied`);Rl(Z,{get text(){return t(Ht).text},get anchor(){return t(Ht).anchor},get testId(){return t(Re)}})}};W(ba,Z=>{t(Ht)!==void 0&&Z(Ni)})}var Ya=d(ba,2),To=m(Ya,!0),Ro=d(Ya,2);{var Ci=Z=>{{let Re=c(()=>ie("Column widths")),Ke=c(()=>ye()===void 0?void 0:`${ye()}-columns-menu`);Ld(Z,{get items(){return t(ur)},get x(){return t(Ar)},get y(){return t(jr)},get label(){return t(Re)},get testId(){return t(Ke)},onselect:Fr,get open(){return t(ar)},set open(st){u(ar,st,!0)}})}};W(Ro,Z=>{t(ar)&&Z(Ci)})}fn(or,Z=>u(he,Z),()=>t(he)),S((Z,Re)=>{T(or,"data-testid",ye()),Rt=_t(jt,1,"hmm-table-grid svelte-16k18c8",null,Rt,{"hmm-table-resizing":t(Mn)!==void 0}),T(jt,"aria-rowcount",t(Se).length),T(jt,"aria-colcount",t(Y).length),pt=Un(jt,"",pt,{"--hmm-table-columns":t(Ve).template,"--hmm-table-min-width":Z,"--hmm-table-gutter":Re}),gn=Un(Rn,"",gn,{height:f()===void 0?void 0:`${f()}px`}),h(To,t(Ht)?.text??"")},[()=>`${String(t(Ve).minWidth)}px`,()=>`${String(t(ce))}px`]),re("keydown",jt,Lt),re("contextmenu",jt,ns),re("pointerover",jt,it),Ir("pointerleave",jt,At),re("pointerdown",jt,je),re("focusin",jt,It),re("focusout",jt,et),Ir("scroll",Rn,Z=>Be(Z.currentTarget)),v(r,or),ft()}Et(["pointerdown","pointermove","pointerup","dblclick","keydown","contextmenu","pointerover","focusin","focusout","click","input"]);var SS=y('<img class="hmm-device-image svelte-rwoeeb"/>'),wS=y('<span class="hmm-device-image hmm-device-image-fallback svelte-rwoeeb"> </span>');function Ha(r,e){ut(e,!0);let n=H(e,"deviceType",3,""),s=H(e,"src",3,void 0),a=H(e,"size",3,Gh),i=H(e,"title",3,void 0),o=H(e,"testId",3,void 0),l=C(!1);ot(()=>{s(),u(l,!1)});const f=c(()=>s()!==void 0&&s()!==""&&!t(l)),p=c(()=>n().replace(/^(HmIPW?|HM|HMW)-/i,"").replace(/[^A-Za-z0-9]/g,"").slice(0,2).toUpperCase());var _=St(),g=Ne(_);{var k=b=>{var w=SS();S(()=>{T(w,"src",s()),T(w,"alt",n()),T(w,"title",i()??n()),T(w,"width",a()),T(w,"height",a()),T(w,"data-testid",o())}),Ir("error",w,()=>u(l,!0)),v(b,w)},E=b=>{var w=wS();let x;var D=m(w,!0);S(N=>{T(w,"title",i()??n()),T(w,"aria-label",n()===""?void 0:n()),T(w,"role",n()===""?void 0:"img"),T(w,"data-testid",o()),x=Un(w,"",x,{width:`${a()}px`,height:`${a()}px`,"font-size":N}),h(D,t(p))},[()=>`${Math.max(6,Math.round(a()*.5))}px`]),v(b,w)};W(g,b=>{t(f)?b(k):b(E,-1)})}v(r,_),ft()}var kS=Mr("<path></path>"),AS=y('<span class="hmm-router-badge svelte-jakst8" role="img"><svg viewBox="0 0 24 24" width="12" height="12" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"></svg></span>');function TS(r,e){let n=H(e,"testId",3,void 0);const s=["M4 14h16a2 2 0 0 1 2 2v2a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2v-2a2 2 0 0 1 2-2z","M6 17h.01M10 17h.01","M15 10v4","M17.8 7.2a4 4 0 0 0-5.6 0","M20.7 4.3a8 8 0 0 0-11.4 0"];var a=AS(),i=A(a);Xe(i,20,()=>s,o=>o,(o,l)=>{var f=kS();S(()=>T(f,"d",l)),v(o,f)}),S(()=>{T(a,"title",e.title),T(a,"aria-label",e.label),T(a,"data-testid",n())}),v(r,a)}const RS={unlink:["M9 17H7a5 5 0 0 1 0-10h2","M15 7h2a5 5 0 0 1 4 8","M8 12h3","M3 3l18 18"],history:["M3 12a9 9 0 1 0 3-6.7L3 8","M3 3v5h5","M12 7v5l3 2"],battery:["M4 7h13a2 2 0 0 1 2 2v6a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2z","M22 10v4","M5 10v4"],alert:["M12 4l9 16H3l9-16z","M12 10v4M12 17.2h.01"],shield:["M12 3l7 3v5.5c0 4.4-3 8.3-7 9.5-4-1.2-7-5.1-7-9.5V6z"],"x-circle":["M3 12a9 9 0 1 0 18 0a9 9 0 1 0-18 0","M9.2 9.2l5.6 5.6M14.8 9.2l-5.6 5.6"],settings:["M9 12a3 3 0 1 0 6 0a3 3 0 1 0-6 0","M19.4 15a1.7 1.7 0 0 0 .3 1.8l.1.1a2 2 0 1 1-2.8 2.8l-.1-.1a1.7 1.7 0 0 0-1.8-.3 1.7 1.7 0 0 0-1 1.5V21a2 2 0 1 1-4 0v-.1a1.7 1.7 0 0 0-1.1-1.5 1.7 1.7 0 0 0-1.8.3l-.1.1a2 2 0 1 1-2.8-2.8l.1-.1a1.7 1.7 0 0 0 .3-1.8 1.7 1.7 0 0 0-1.5-1H3a2 2 0 1 1 0-4h.1a1.7 1.7 0 0 0 1.5-1.1 1.7 1.7 0 0 0-.3-1.8l-.1-.1a2 2 0 1 1 2.8-2.8l.1.1a1.7 1.7 0 0 0 1.8.3H9a1.7 1.7 0 0 0 1-1.5V3a2 2 0 1 1 4 0v.1a1.7 1.7 0 0 0 1 1.5 1.7 1.7 0 0 0 1.8-.3l.1-.1a2 2 0 1 1 2.8 2.8l-.1.1a1.7 1.7 0 0 0-.3 1.8V9a1.7 1.7 0 0 0 1.5 1H21a2 2 0 1 1 0 4h-.1a1.7 1.7 0 0 0-1.5 1z"],"arrow-up":["M3 12a9 9 0 1 0 18 0a9 9 0 1 0-18 0","M12 16V8","M8.5 11.5L12 8l3.5 3.5"]};var xS=Mr("<path></path>"),DS=y('<span role="img"><svg viewBox="0 0 24 24" width="12" height="12" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="svelte-1litlhm"></svg></span>');function IS(r,e){ut(e,!0);var n=DS();let s;var a=A(n);Xe(a,20,()=>RS[e.mark.icon],i=>i,(i,o)=>{var l=xS();S(()=>T(l,"d",o)),v(i,l)}),S(()=>{s=_t(n,1,`hmm-service-badge hmm-service-badge-${e.mark.tone??""}`,"svelte-1litlhm",s,{"hmm-service-badge-solid":e.mark.datapoint==="UNREACH"}),T(n,"data-datapoint",e.mark.datapoint),T(n,"data-tone",e.mark.tone),T(n,"title",e.title),T(n,"aria-label",e.label)}),v(r,n),ft()}var NS=y('<span class="hmm-primary-caption"> </span>'),CS=y('<button type="button"><span class="hmm-primary-icon svelte-1a5hxwr" aria-hidden="true"> </span> <!></button>'),PS=y('<span class="hmm-primary-button hmm-primary-measure svelte-1a5hxwr" aria-hidden="true"><span class="hmm-primary-icon svelte-1a5hxwr"> </span> <span class="hmm-primary-caption"> </span></span>'),MS=y('<span class="hmm-primary-slot svelte-1a5hxwr"><!> <!></span>');function Vh(r,e){ut(e,!0);let n=H(e,"icon",3,"+"),s=H(e,"disabled",3,!1),a=H(e,"reason",3,void 0),i=H(e,"compact",3,void 0),o=H(e,"onclick",3,void 0),l=H(e,"testId",3,void 0),f=C(void 0),p=C(void 0),_=C(0),g=C(0);ot(()=>{const M=t(f),z=t(p);if(i()!==void 0||!M||!z)return;const $=()=>{u(_,Math.ceil(z.getBoundingClientRect().width),!0),u(g,M.getBoundingClientRect().width,!0)};$();const le=new ResizeObserver($);return le.observe(M),le.observe(z),()=>{le.disconnect()}});const k=c(()=>i()??(t(_)>0&&t(g)>0&&t(g)<t(_)-1)),E=c(()=>s()&&a()!==void 0?`${e.caption} — ${a()}`:t(k)?e.caption:""),b=c(()=>l()===void 0?void 0:`${l()}-tooltip`);var w=MS();let x;var D=A(w);mi(D,{get text(){return t(E)},get testId(){return t(b)},children:(M,z)=>{var $=CS();let le;var fe=A($),de=m(fe,!0),B=d(fe,2);{var oe=K=>{var X=NS(),se=m(X,!0);S(()=>{T(X,"data-testid",l()===void 0?void 0:`${l()}-caption`),h(se,e.caption)}),v(K,X)};W(B,K=>{t(k)||K(oe)})}S(()=>{le=_t($,1,"hmm-primary-button svelte-1a5hxwr",null,le,{"hmm-primary-compact":t(k)}),T($,"aria-label",e.caption),T($,"data-testid",l()),T($,"data-compact",t(k)?"true":"false"),$.disabled=s(),h(de,n())}),re("click",$,()=>o()?.()),v(M,$)},$$slots:{default:!0}});var N=d(D,2);{var R=M=>{var z=PS(),$=A(z),le=m($,!0),fe=d($,2),de=m(fe,!0);fn(z,B=>u(p,B),()=>t(p)),S(()=>{h(le,n()),h(de,e.caption)}),v(M,z)};W(N,M=>{i()===void 0&&M(R)})}fn(w,M=>u(f,M),()=>t(f)),S(M=>x=Un(w,"",x,{"flex-basis":M}),[()=>t(_)>0?`${String(t(_))}px`:void 0]),v(r,w),ft()}Et(["click"]);const OS={UNREACH:{icon:"unlink",tone:"red",label:"Communication disturbed"},STICKY_UNREACH:{icon:"history",tone:"grey",label:"Communication was disturbed"},ERROR:{icon:"alert",tone:"red",label:"Fault"},ERROR_CODE:{icon:"alert",tone:"red",label:"Fault"},SABOTAGE:{icon:"shield",tone:"red",label:"Sabotage"},FAULT_REPORTING:{icon:"x-circle",tone:"red",label:"Fault report"},LOWBAT:{icon:"battery",tone:"orange",label:"Low battery"},LOW_BAT:{icon:"battery",tone:"orange",label:"Low battery"},CONFIG_PENDING:{icon:"settings",tone:"blue",label:"Configuration pending"},UPDATE_PENDING:{icon:"arrow-up",tone:"blue",label:"Update pending"}},ru={red:0,orange:1,blue:2,grey:3},su=84,Bi=150,au=190,iu=180;function el(r,e,n=2){const s=[];for(const i of e){if(Fa(i.address)!==r)continue;const o=OS[i.datapoint];!o||s.some(l=>l.datapoint===i.datapoint)||s.push({datapoint:i.datapoint,...o,address:i.address})}const a=s.some(i=>i.datapoint==="UNREACH");return s.filter(i=>!(a&&i.datapoint==="STICKY_UNREACH")).sort((i,o)=>ru[i.tone]-ru[o.tone]).slice(0,n)}function zh(r,e){if(r==="CONFIG_PENDING")return e?"The configuration could not be transferred to the device":"A configuration is queued; the device takes it when it next wakes up"}function LS(r,e,n={channel:!1}){const s=[];let a=!1;for(const i of ah(r)??[]){if(i==="LINK"||n.channel&&i==="SERVICE")continue;const o=e(i);o===void 0?a=!0:o!=="empty"&&s.push(i)}return{names:s,pending:a}}function FS(r,e){return e&&r==="CONFIG_PENDING"}const GS={UP_TO_DATE:{status:"up to date"},NEW_FIRMWARE_AVAILABLE:{status:"queued for transfer",hint:"firmware queued hint"},DELIVER_FIRMWARE_IMAGE:{status:"transferring",hint:"firmware transfer hint"},DO_UPDATE_PENDING:{status:"installing",hint:"firmware install pending hint"},PERFORMING_UPDATE:{status:"installing"},LIVE_DELIVER_FIRMWARE_IMAGE:{status:"installing"}};function ou(r,e){return r!==void 0&&r!==""&&r!=="0.0.0"&&r!==e}function US(r,e={}){const n=r.FIRMWARE??"",s=r.AVAILABLE_FIRMWARE,a=e.busy===!0,i=r.FIRMWARE_UPDATE_STATE;if(i!==void 0&&i!==""){if((i==="READY_FOR_UPDATE"||i==="LIVE_NEW_FIRMWARE_AVAILABLE")&&ou(s,n))return{firmware:n,available:s,...a?{}:{action:"install"},busy:a};const o=GS[i];if(o!==void 0){const l=e.transfer;if(i==="DELIVER_FIRMWARE_IMAGE"&&l!==void 0&&l.state!=="done"){const f=l.percent>=0?{percent:l.percent}:{};return l.state==="interrupted"?{firmware:n,status:"waiting for the device",hint:"firmware interrupted hint",...f,busy:a}:{firmware:n,status:o.status,...o.hint===void 0?{}:{hint:o.hint},...f,busy:a}}return{firmware:n,status:o.status,...o.hint===void 0?{}:{hint:o.hint},busy:a}}}return e.updatePending===!0?{firmware:n,status:"update pending",busy:a}:ou(s,n)?{firmware:n,available:s,...a?{}:{action:"update"},busy:a}:{firmware:n,busy:a}}function jh(r,e){const n=r[e];return n?Ii(e,n).map(s=>({path:s.path,label:s.node.name,depth:s.depth,hasChildren:(s.node.children?.length??0)>0})):[]}function ql(r,e=" "){return`${e.repeat(Math.max(0,r.depth-1))}${r.label}`}function Va(r,e){return r!==void 0&&r.enums.some(n=>Ws(n,e))}function Wh(r,e,n){return Va(r,n)||e.some(s=>Va(s,n))}function lu(r,e,n){return Va(r,n)||Va(e,n)}function Ao(r,e){return Object.entries(r).filter(([,n])=>Va(n,e)).map(([n])=>n).sort((n,s)=>n.localeCompare(s))}function $l(r,e){return r===void 0?[]:e==="room"?r.rooms:r.functions}function Kh(r,e,n){const s=$l(r,n);if(s.length>0)return[...s];const a=[];for(const i of e)for(const o of $l(i,n))a.includes(o)||a.push(o);return a}function BS(r,e){return e===null||!Ws(e,r)}function HS(r,e){const n=r.ADDRESS.lastIndexOf(":"),s=r.PARENT??(n<0?r.ADDRESS:r.ADDRESS.slice(0,n)),a=r.INDEX===void 0?r.ADDRESS.slice(n+1):String(r.INDEX);return{value:r.ADDRESS,label:e(r.ADDRESS)??r.ADDRESS,hint:e(s)??s,description:`${a}: ${r.TYPE}`}}var VS=y('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="add-link-stage"> </button> <button type="button" class="hmm-button" data-testid="add-link-create"> </button> <button type="button" class="hmm-button" data-testid="add-link-create-edit"> </button>',1),zS=y('<span class="hmm-add-link-label svelte-w1ajeb"> </span> <div class="hmm-add-link-field svelte-w1ajeb"><input class="hmm-input hmm-add-link-input svelte-w1ajeb" data-testid="add-link-name-all"/> <span class="hmm-add-link-roles hmm-add-link-under svelte-w1ajeb"> </span></div> <span class="hmm-add-link-label svelte-w1ajeb"> </span> <div class="hmm-add-link-field svelte-w1ajeb"><input class="hmm-input hmm-add-link-input svelte-w1ajeb" data-testid="add-link-description-all"/></div>',1),jS=y('<span></span> <span class="hmm-add-link-empty svelte-w1ajeb" data-testid="add-link-none"> </span>',1),WS=y('<tr><td class="hmm-mono svelte-w1ajeb"> </td><td class="hmm-mono svelte-w1ajeb"> </td><td class="svelte-w1ajeb"><input class="hmm-input svelte-w1ajeb"/></td><td class="svelte-w1ajeb"><input class="hmm-input svelte-w1ajeb"/></td></tr>'),KS=y('<table class="hmm-pair-names svelte-w1ajeb" data-testid="add-link-pairs"><thead><tr><th class="svelte-w1ajeb"> </th><th class="svelte-w1ajeb"> </th><th class="svelte-w1ajeb"> </th><th class="svelte-w1ajeb"> </th></tr></thead><tbody></tbody></table>'),YS=y('<div class="hmm-add-link svelte-w1ajeb"><span class="hmm-add-link-label svelte-w1ajeb"> </span> <div class="hmm-add-link-field svelte-w1ajeb"><!> <span class="hmm-add-link-roles svelte-w1ajeb"> </span></div> <span class="hmm-add-link-label svelte-w1ajeb"> </span> <div class="hmm-add-link-field svelte-w1ajeb"><!> <span class="hmm-add-link-roles svelte-w1ajeb"> </span></div> <!> <!></div> <!>',1);function Yh(r,e){ut(e,!0);let n=H(e,"open",15,!1),s=H(e,"onedit",3,void 0),a=H(e,"presetSenders",19,()=>[]),i=H(e,"presetReceivers",19,()=>[]);const o=Ot(),l=o.i18n.t;let f=C(We([])),p=C(We([])),_=C(!1),g=C(We({})),k=C(""),E=C("");const b=c(()=>o.app.selectedInterface),w=c(()=>o.devices.index(t(b)));ot(()=>{n()&&(u(f,[...a()],!0),u(p,[...i()],!0),u(g,{},!0),u(k,""),u(E,""))});const x=c(()=>t(w)?ch(t(w)).map(B=>M(B)):[]),D=c(()=>{const B=t(w);if(!B||t(f).length===0)return[];const oe=t(f).map(K=>B.get(K)).filter(K=>K!==void 0);return B.channels().filter(K=>oe.every(X=>t_(X,K))).map(K=>M(K))}),N=c(()=>[...new Set(t(f).flatMap(B=>As(t(w)?.get(B)?.LINK_SOURCE_ROLES)))].join(" ")),R=c(()=>[...new Set(t(p).flatMap(B=>As(t(w)?.get(B)?.LINK_TARGET_ROLES)))].join(" "));function M(B){return HS(B,oe=>o.names.name(oe))}function z(){return t(f).flatMap(B=>t(p).map(oe=>{const K=t(g)[$(B,oe)],X=K?.name.trim()===""||K===void 0?t(k).trim():K.name.trim(),se=K?.description.trim()===""||K===void 0?t(E).trim():K.description.trim();return{sender:B,receiver:oe,...X===""?{}:{name:X},...se===""?{}:{description:se}}}))}function $(B,oe){return`${B}>${oe}`}function le(B,oe,K,X){const se=$(B,oe),j=t(g)[se]??{name:"",description:""};u(g,{...t(g),[se]:{...j,[K]:X}},!0)}function fe(){const B=z();B.length!==0&&(o.changeSet.stage({kind:"linkAdd",interfaceName:t(b),title:l("{count} links",{},B.length),pairs:B,calls:B.map(oe=>`addLink(${oe.sender}, ${oe.receiver}, ${JSON.stringify(oe.name??"")})`),lines:B.map(oe=>({label:`${o.nameOf(oe.sender)} → ${o.nameOf(oe.receiver)}`,to:oe.name??""}))}),n(!1))}async function de(B){u(_,!0);const oe=await o.links.addPairs(t(b),z());if(u(_,!1),oe===0)return;n(!1);const K=t(f)[0],X=t(p)[0];B&&K!==void 0&&X!==void 0&&s()?.({sender:K,receiver:X})}{const B=K=>{var X=VS(),se=Ne(X),j=m(se,!0),ne=d(se,2),ye=m(ne,!0),xe=d(ne,2),ie=m(xe,!0),Ae=d(xe,2),Te=m(Ae,!0);S((me,P,ce,be)=>{h(j,me),ne.disabled=t(_)||t(p).length===0,h(ye,P),xe.disabled=t(_)||t(p).length===0,h(ie,ce),Ae.disabled=t(_)||t(p).length===0,h(Te,be)},[()=>l("Cancel"),()=>l("Add to pending changes"),()=>l("Create"),()=>l("Create and edit")]),re("click",se,()=>n(!1)),re("click",ne,fe),re("click",xe,()=>{de(!1)}),re("click",Ae,()=>{de(!0)}),v(K,X)};let oe=c(()=>l("Create link"));En(r,{get title(){return t(oe)},width:"720px",top:"min(12vh, 96px)",testId:"add-link-dialog",get open(){return n()},set open(K){n(K)},buttons:B,children:(K,X)=>{var se=YS(),j=Ne(se),ne=A(j),ye=m(ne,!0),xe=d(ne,2),ie=A(xe);{let te=c(()=>l("Sender")),O=c(()=>l("Select")),U=c(()=>l("Filter")),I=c(()=>l("Check all")),F=c(()=>l("Uncheck all"));bi(ie,{get options(){return t(x)},get label(){return t(te)},get placeholder(){return t(O)},get filterLabel(){return t(U)},get checkAllLabel(){return t(I)},get uncheckAllLabel(){return t(F)},summary:Ee=>l("{count} channels selected",{},Ee.length),testId:"add-link-senders",inline:!0,get selected(){return t(f)},set selected(Ee){u(f,Ee,!0)}})}var Ae=d(ie,2),Te=m(Ae),me=d(xe,2),P=m(me,!0),ce=d(me,2),be=A(ce);{let te=c(()=>t(f).length===0),O=c(()=>l("Receiver")),U=c(()=>t(f).length===0?l("Sender"):l("Select")),I=c(()=>l("Filter")),F=c(()=>l("Check all")),Ee=c(()=>l("Uncheck all"));bi(be,{get options(){return t(D)},get disabled(){return t(te)},get label(){return t(O)},get placeholder(){return t(U)},get filterLabel(){return t(I)},get checkAllLabel(){return t(F)},get uncheckAllLabel(){return t(Ee)},summary:Ie=>l("{count} channels selected",{},Ie.length),testId:"add-link-receivers",inline:!0,get selected(){return t(p)},set selected(Ie){u(p,Ie,!0)}})}var ee=d(be,2),he=m(ee),G=d(ce,2);{var Q=te=>{var O=zS(),U=Ne(O),I=m(U,!0),F=d(U,2),Ee=A(F),Ie=d(Ee,2),Me=m(Ie,!0),Ve=d(F,2),ze=m(Ve,!0),nt=d(Ve,2),Ze=A(nt);S((_e,Se,V,L,Pe)=>{h(I,_e),T(Ee,"aria-label",Se),h(Me,V),h(ze,L),T(Ze,"aria-label",Pe)},[()=>l("Name"),()=>l("Name"),()=>l("Used for every pair without its own name"),()=>l("Description"),()=>l("Description")]),xn(Ee,()=>t(k),_e=>u(k,_e)),xn(Ze,()=>t(E),_e=>u(E,_e)),v(te,O)},q=c(()=>z().length>0);W(G,te=>{t(q)&&te(Q)})}var Y=d(G,2);{var ae=te=>{var O=jS(),U=d(Ne(O),2),I=m(U,!0);S(F=>h(I,F),[()=>l("No channel can receive from this sender")]),v(te,O)};W(Y,te=>{t(f).length>0&&t(D).length===0&&te(ae)})}var J=d(j,2);{var ve=te=>{var O=KS(),U=A(O),I=A(U),F=A(I),Ee=m(F,!0),Ie=d(F),Me=m(Ie,!0),Ve=d(Ie),ze=m(Ve,!0),nt=d(Ve),Ze=m(nt,!0),_e=d(U);Xe(_e,21,z,Se=>$(Se.sender,Se.receiver),(Se,V)=>{var L=WS(),Pe=A(L),Ge=m(Pe,!0),qe=d(Pe),we=m(qe,!0),Ce=d(qe),Oe=A(Ce),Be=d(Ce),pe=A(Be);S((De,Ue,Fe,Ye,tt,ht,ct)=>{T(L,"data-testid",De),h(Ge,Ue),h(we,Fe),T(Oe,"aria-label",Ye),ln(Oe,tt),T(Oe,"placeholder",t(k)),T(pe,"aria-label",ht),ln(pe,ct),T(pe,"placeholder",t(E))},[()=>`add-link-pair-${$(t(V).sender,t(V).receiver)}`,()=>o.nameOf(t(V).sender),()=>o.nameOf(t(V).receiver),()=>`${l("Name")} ${t(V).sender} ${t(V).receiver}`,()=>t(g)[$(t(V).sender,t(V).receiver)]?.name??"",()=>`${l("Description")} ${t(V).sender} ${t(V).receiver}`,()=>t(g)[$(t(V).sender,t(V).receiver)]?.description??""]),re("input",Oe,De=>le(t(V).sender,t(V).receiver,"name",De.currentTarget.value)),re("input",pe,De=>le(t(V).sender,t(V).receiver,"description",De.currentTarget.value)),v(Se,L)}),S((Se,V,L,Pe)=>{h(Ee,Se),h(Me,V),h(ze,L),h(Ze,Pe)},[()=>l("Sender"),()=>l("Receiver"),()=>l("Name"),()=>l("Description")]),v(te,O)},ge=c(()=>z().length>1);W(J,te=>{t(ge)&&te(ve)})}S((te,O)=>{h(ye,te),h(Te,`LINK_SOURCE_ROLES: ${t(N)??""}`),h(P,O),h(he,`LINK_TARGET_ROLES: ${t(R)??""}`)},[()=>l("Sender"),()=>l("Receiver")]),v(K,se)},$$slots:{buttons:!0,default:!0}})}ft()}Et(["click","input"]);var qS=y('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="smoke-group-apply"> </button>',1),$S=y('— TEAM_TAG <span class="hmm-mono"> </span>',1),XS=y('<p class="hmm-smoke-muted svelte-1spai3u"><span class="hmm-mono"> </span> <!></p>'),du=y('<p class="hmm-smoke-muted svelte-1spai3u"> </p>'),QS=y('<p class="hmm-smoke-muted svelte-1spai3u" data-testid="smoke-group-none"> </p>'),ZS=y('<li class="svelte-1spai3u"><label><input type="checkbox"/> <span class="hmm-smoke-member-name svelte-1spai3u"> </span> <span class="hmm-mono hmm-smoke-member-id svelte-1spai3u"> </span> <span class="hmm-smoke-member-note svelte-1spai3u"> </span></label></li>'),JS=y('<ul class="hmm-smoke-list svelte-1spai3u" data-testid="smoke-group-candidates"></ul>'),e0=y('<div class="hmm-smoke-form svelte-1spai3u"><!> <p class="hmm-smoke-heading svelte-1spai3u"> </p> <!></div>');function t0(r,e){ut(e,!0);let n=H(e,"open",15,!1),s=H(e,"group",3,void 0),a=H(e,"isNew",3,!1);const i=Ot(),o=i.i18n.t;let l=C(We([])),f=C(!1);const p=c(()=>i.app.selectedInterface),_=c(()=>i.devices.index(t(p))),g=c(()=>i.smokeGroups.of(t(p))),k=c(()=>s()?.kind==="hmip"&&i.smokeGroups.isLoading(t(p))),E=c(()=>{if(s()===void 0||t(_)===void 0)return[];const z=s();return t(_).channels().filter($=>($.TEAM_CHANNELS??[]).length>0?!1:z.kind==="team"?($.TEAM_TAG??"")!==""&&$.TEAM_TAG===z.teamTag:oh($))});function b(z){return s()?.kind==="team"||(t(g)[z]??null)!==null}function w(z){if(s()===void 0)return"";if(s().kind==="team"){const le=t(_)===void 0?void 0:lh(t(_),z);return le===void 0||le===s().address||(t(_)?.get(t(_).get(z)?.TEAM??"")?.TEAM_CHANNELS??[]).length<2?"":o("in {team}",{team:i.nameOf(le)})}const $=(t(g)[z]??[]).filter(le=>le!==s().number);return $.length===0?"":o("also in {groups}",{groups:$.map(le=>o("Smoke group {n}",{n:le})).join(", ")})}ot(()=>{n()&&sr(()=>{u(l,[...s()?.members??[]],!0)})});function x(z,$){u(l,$?[...t(l),z]:t(l).filter(le=>le!==z),!0)}const D=c(()=>Kb(s()?.members??[],t(l))),N=c(()=>t(D).added.length>0||t(D).removed.length>0),R=c(()=>s()===void 0?"":s().kind==="team"?`${o("Team")}: ${i.nameOf(s().address)}`:o("Smoke group {n}",{n:s().number??0}));async function M(){if(s()===void 0||!t(N))return;const{added:z,removed:$}=t(D);u(f,!0);try{if(s().kind==="team"){const de=s().teamChannel??"";await i.devices.setTeams(t(p),[...z.map(oe=>({address:oe,teamAddress:de})),...$.map(oe=>({address:oe,teamAddress:""}))])===z.length+$.length&&n(!1);return}const le=await i.smokeGroups.setMembers(t(p),s().number??0,z,$),fe=le.filter(de=>!de.ok);for(const de of fe)i.notices.push("error",`${i.nameOf(de.address)}: ${de.problems.map(B=>B.message).join("; ")||(de.faultString??"")}`,t(p));fe.length===0&&le.length===z.length+$.length&&n(!1)}finally{u(f,!1)}}En(r,{get title(){return t(R)},width:"600px",testId:"smoke-group-dialog",get open(){return n()},set open($){n($)},buttons:$=>{var le=qS(),fe=Ne(le),de=m(fe,!0),B=d(fe,2),oe=m(B,!0);S((K,X)=>{h(de,K),B.disabled=t(f)||!t(N),h(oe,X)},[()=>o("Cancel"),()=>o("Apply")]),re("click",fe,()=>n(!1)),re("click",B,()=>{M()}),v($,le)},children:($,le)=>{var fe=St(),de=Ne(fe);{var B=oe=>{var K=e0(),X=A(K);{var se=P=>{var ce=XS(),be=A(ce),ee=m(be,!0),he=d(be,2);{var G=Q=>{var q=$S(),Y=d(Ne(q)),ae=m(Y,!0);S(()=>h(ae,s().teamTag)),v(Q,q)};W(he,Q=>{s().teamTag&&Q(G)})}S(()=>h(ee,s().address)),v(P,ce)},j=P=>{var ce=du(),be=m(ce);S((ee,he)=>h(be,`${ee??""}
14
+ ${he??""}`),[()=>a()?o("A new group takes the lowest free number."):"",()=>o("Changes are written to the detectors and take effect once each detector has picked them up.")]),v(P,ce)};W(X,P=>{s().kind==="team"?P(se):P(j,-1)})}var ne=d(X,2),ye=m(ne,!0),xe=d(ne,2);{var ie=P=>{var ce=du(),be=m(ce,!0);S(ee=>h(be,ee),[()=>o("Loading")]),v(P,ce)},Ae=c(()=>t(k)&&t(E).some(P=>!(P.ADDRESS in t(g)))),Te=P=>{var ce=QS(),be=m(ce,!0);S(ee=>h(be,ee),[()=>o("This interface has no smoke detector")]),v(P,ce)},me=P=>{var ce=JS();Xe(ce,21,()=>t(E),be=>be.ADDRESS,(be,ee)=>{const he=c(()=>b(t(ee).ADDRESS));var G=ZS(),Q=A(G);let q;var Y=A(Q),ae=d(Y,2),J=m(ae,!0),ve=d(ae,2),ge=m(ve,!0),te=d(ve,2),O=m(te,!0);S((U,I,F)=>{q=_t(Q,1,"hmm-smoke-member svelte-1spai3u",null,q,{"hmm-smoke-member-off":!t(he)}),Y.disabled=!t(he),Pr(Y,U),T(Y,"data-testid",`smoke-group-member-${t(ee).ADDRESS}`),h(J,I),h(ge,t(ee).ADDRESS),h(O,F)},[()=>t(l).includes(t(ee).ADDRESS),()=>i.nameOf(t(ee).ADDRESS),()=>t(he)?w(t(ee).ADDRESS):o("cannot be grouped - no GROUP parameters")]),re("change",Y,U=>x(t(ee).ADDRESS,U.currentTarget.checked)),v(be,G)}),v(P,ce)};W(xe,P=>{t(Ae)?P(ie):t(E).length===0?P(Te,1):P(me,-1)})}S(P=>h(ye,P),[()=>o("Members")]),v(oe,K)};W(de,oe=>{s()!==void 0&&oe(B)})}v($,fe)},$$slots:{buttons:!0,default:!0}}),ft()}Et(["click","change"]);var n0=y('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="team-apply"> </button>',1),r0=y('<p data-testid="team-none"> </p>'),s0=y("<option> </option>"),a0=y('<p class="hmm-team-members svelte-1ervkxt" data-testid="team-members"> </p>'),i0=y('<p class="hmm-team-empty svelte-1ervkxt" data-testid="team-empty"> </p>'),o0=y('<p><span class="hmm-mono"> </span> — TEAM_TAG <span class="hmm-mono"> </span></p> <label class="hmm-team-row svelte-1ervkxt"><span> </span> <select class="hmm-select" data-testid="team-select"><option> </option><!></select></label> <!> <!>',1);function l0(r,e){ut(e,!0);let n=H(e,"open",15,!1),s=H(e,"address",3,"");const a=Ot(),i=a.i18n.t;let o=C(We([])),l=C(""),f=C(!1);const p=c(()=>a.app.selectedInterface),_=c(()=>a.devices.index(t(p))),g=c(()=>t(_)?.get(s())),k=c(()=>t(g)?.TEAM_TAG??""),E=c(()=>t(g)?.TEAM??""),b=c(()=>t(o).filter(D=>(D.TEAM_TAG??"")===t(k)));ot(()=>{!n()||t(p)===""||s()===""||(u(l,t(E),!0),a.devices.teams(t(p)).then(D=>{u(o,D,!0)}))});function w(D){const N=D.TEAM_CHANNELS??[];return N.length===0?i("No data"):N.map(R=>a.nameOf(R)).join(", ")}async function x(){u(f,!0);const D=await a.devices.setTeam(t(p),s(),t(l));u(f,!1),D&&n(!1)}{const D=R=>{var M=n0(),z=Ne(M),$=m(z,!0),le=d(z,2),fe=m(le,!0);S((de,B)=>{h($,de),le.disabled=t(f)||t(k)===""||t(l)===t(E),h(fe,B)},[()=>i("Cancel"),()=>i("Apply")]),re("click",z,()=>n(!1)),re("click",le,()=>{x()}),v(R,M)};let N=c(()=>i("Team"));En(r,{get title(){return t(N)},width:"560px",testId:"team-dialog",get open(){return n()},set open(R){n(R)},buttons:D,children:(R,M)=>{var z=St(),$=Ne(z);{var le=de=>{var B=r0(),oe=m(B,!0);S(K=>h(oe,K),[()=>i("This channel does not belong to a team")]),v(de,B)},fe=de=>{var B=o0(),oe=Ne(B),K=A(oe),X=m(K,!0),se=d(K,2),j=m(se,!0),ne=d(oe,2),ye=A(ne),xe=m(ye,!0),ie=d(ye,2),Ae=A(ie),Te=m(Ae,!0);Ae.value=Ae.__value="";var me=d(Ae);Xe(me,17,()=>t(b),he=>he.ADDRESS,(he,G)=>{var Q=s0(),q=m(Q),Y={};S(ae=>{h(q,`${ae??""} (${t(G).ADDRESS??""})`),Y!==(Y=t(G).ADDRESS)&&(Q.value=(Q.__value=Y)??"")},[()=>a.nameOf(t(G).ADDRESS)]),v(he,Q)}),Xt(ie);var P=d(ne,2);{var ce=he=>{const G=c(()=>t(b).find(ae=>ae.ADDRESS===t(l)));var Q=St(),q=Ne(Q);{var Y=ae=>{var J=a0(),ve=m(J);S((ge,te)=>h(ve,`${ge??""}: ${te??""}`),[()=>i("Members"),()=>w(t(G))]),v(ae,J)};W(q,ae=>{t(G)&&ae(Y)})}v(he,Q)};W(P,he=>{t(l)!==""&&he(ce)})}var be=d(P,2);{var ee=he=>{var G=i0(),Q=m(G,!0);S(q=>h(Q,q),[()=>i("The interface knows no other team yet")]),v(he,G)};W(be,he=>{t(b).length===0&&he(ee)})}S((he,G)=>{h(X,s()),h(j,t(k)),h(xe,he),h(Te,G)},[()=>i("Team"),()=>i("Own team")]),kr(ie,()=>t(l),he=>u(l,he)),v(de,B)};W($,de=>{t(k)===""?de(le):de(fe,-1)})}v(R,z)},$$slots:{buttons:!0,default:!0}})}ft()}Et(["click"]);function qh(r,e){return Id(e,r.pair)?.seconds}function d0(r,e){return qh(r,e)===r.notUsedSeconds}function $h(r,e){const n=ph(e,r.pair),s=Nd(e,r.pair);if(!(!n||!s))return{values:s,exact:n.exact,seconds:n.seconds}}function c0(r,e){const n=[];for(const s of wo(r.description)){const a=r.description[s.unitParam],i=r.description[s.countParam];if(!a||!i||e.has(s.unitParam)||e.has(s.countParam))continue;const o=vh(i);n.push({pair:s,unitDescription:a,countDescription:i,writable:Jr(a)&&Jr(i),notUsedSeconds:o??gh(s),notUsedFromSpecial:o!==void 0})}if(n.length!==0)return{kind:"duration-pairs",id:"duration-pairs",covers:n.flatMap(s=>[s.pair.unitParam,s.pair.countParam]),pairs:n}}function Si(r){if(!Number.isFinite(r))return"—";if(r===0)return"0 s";if(r<1)return`${Math.round(r*1e3)} ms`;const e=[];let n=Math.round(r*10)/10;const s=Math.floor(n/3600);s>0&&(e.push(`${s} h`),n-=s*3600);const a=Math.floor(n/60);return a>0&&(e.push(`${a} min`),n-=a*60),n>0&&e.push(`${Math.round(n*10)/10} s`),e.join(" ")}const u0=["REFERENCE_RUNNING_TIME_TOP_BOTTOM","REFERENCE_RUNNING_TIME_BOTTOM_TOP","REFERENCE_RUNNING_TIME_SLATS"],f0=["CHANGE_OVER_DELAY","DELAY_COMPENSATION"],h0=["REFERENCE_RUN_COUNTER","ENDPOSITION_AUTO_DETECT"];function m0(r,e){if(r.source.kind==="seconds"){const i=e[r.source.param];return typeof i=="number"?i:void 0}const n=r.source.view,s=n.pair.units[Xh(n,e)],a=e[n.pair.countParam];if(!(s===void 0||typeof a!="number"))return Math.round(s.seconds*a*1e3)/1e3}function v0(r,e){if(r.source.kind==="seconds")return`${r.source.param} = ${String(e[r.source.param]??"—")}`;const n=r.source.view,s=n.pair.units[Xh(n,e)];return`${String(e[n.pair.countParam]??"—")} × ${s?.name??"—"}`}function p0(r,e){if(!(!Number.isFinite(e)||e<0)){if(r.source.kind==="seconds"){const n=nr(r.source.description,"MAX");return n!==void 0&&e>n?void 0:{values:{[r.source.param]:e},exact:!0,seconds:e}}return $h(r.source.view,e)}}function g0(r,e){const{description:n}=r,s=new Map(wo(n).map(f=>[f.name,f])),a=[],i=[];for(const f of u0){const p=n[f],_=s.get(f);if(p){a.push({id:f,source:{kind:"seconds",param:f,description:p},writable:Jr(p)}),i.push(f);continue}const g=_&&n[_.unitParam],k=_&&n[_.countParam];if(!_||!g||!k)continue;const E=vh(k),b={pair:_,unitDescription:g,countDescription:k,writable:Jr(g)&&Jr(k),notUsedSeconds:E??gh(_),notUsedFromSpecial:E!==void 0};a.push({id:f,source:{kind:"pair",view:b},writable:b.writable}),i.push(_.unitParam,_.countParam)}if(a.length===0||i.some(f=>e.has(f)))return;const o=cu(n,f0),l=cu(n,h0);return{kind:"blind-calibration",id:"blind-calibration",covers:[...i,...o.map(f=>f.param),...l.map(f=>f.param)],runningTimes:a,delays:o,extras:l}}function cu(r,e){return e.flatMap(n=>{const s=r[n];return s?[{param:n,description:s}]:[]})}function Xh(r,e){const n=e[r.pair.unitParam];return typeof n=="number"?n:r.pair.units.findIndex(s=>s.name===n)}function b0(r,e,n){const s=[];for(const[a,i]of Object.entries(r.description)){const o=Us(i);if(i.TYPE!=="ENUM"||!o||o.length===0||e.has(a))continue;const l=n.preset(a),f=l?_0(l.presets,o,n):E0(a,o,n);!f||f.length===0||s.push({param:a,description:i,options:f,writable:Jr(i),...l===void 0?{}:{presetId:l.id}})}if(s.length!==0)return{kind:"enum-options",id:"enum-options",covers:s.map(a=>a.param),fields:s}}function _0(r,e,n){const s=[];for(const a of r){const i=typeof a.value=="number"?a.value:Number(a.value);if(!Number.isInteger(i))return;s.push({value:i,label:Ed(a,o=>n.uiLabel(o)),raw:e[i]??"",named:!0})}return s}function E0(r,e,n){const s=[];let a=!1;for(const[i,o]of e.entries()){const l=n.optionByName(r,o),f=n.optionByIndex(r,i);l===void 0&&f!==void 0?(a=!0,s.push({value:i,label:f,raw:o,named:!0})):s.push({value:i,label:l??o,raw:o,named:l!==void 0})}return a?s:void 0}function ws(r,e){return`${r}_WP_${e}`}const y0=/^(\d+)_WP_(.+)$/,uu=["WEEKDAY","TIME","CONDITION","ASTRO_TYPE","ASTRO_OFFSET","LEVEL","LEVEL_2","DURATION","RAMP_TIME","OUTPUT_BEHAVIOUR","TARGET_CHANNELS"],S0=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];function w0(r,e){return typeof r=="number"&&(r&1<<e)!==0}function k0(r,e,n){const s=typeof r=="number"?r:0;return n?s|1<<e:s&~(1<<e)}function A0(r,e){const n=r[ws(e,"FIXED_HOUR")],s=r[ws(e,"FIXED_MINUTE")];return typeof n!="number"||typeof s!="number"?"":`${String(n).padStart(2,"0")}:${String(s).padStart(2,"0")}`}function T0(r,e){const n=/^(\d{1,2}):([0-5]\d)$/.exec(e.trim()),s=n?Number(n[1]):Number.NaN;if(!(!n||s>23))return{[ws(r,"FIXED_HOUR")]:s,[ws(r,"FIXED_MINUTE")]:Number(n[2])}}function R0(r,e){const n=r[ws(e,"WEEKDAY")];return typeof n!="number"||n===0}function x0(r,e){const{description:n}=r,s=new Map,a=[];for(const w of Object.keys(n)){const x=y0.exec(w),D=x?.[1],N=x?.[2];if(!x||D===void 0||N===void 0)continue;let R=s.get(D);R||(R=new Set,s.set(D,R)),R.add(N),a.push(w)}const i=[...s.keys()].sort((w,x)=>Number(w)-Number(x)),o=i[0],l=o===void 0?void 0:s.get(o);if(o===void 0||!l||!l.has("WEEKDAY")||a.some(w=>e.has(w)))return;const f=[...l].sort().join(",");for(const w of i)if([...s.get(w)??[]].sort().join(",")!==f)return;const p=new Map(wo(n).map(w=>[w.name,w])),_={},g=[],k=new Set,E=(w,x,D)=>{const N=n[ws(o,D[0]??"")];if(!(!N||D.some(R=>!l.has(R)))){g.push({id:w,kind:x,fields:D,description:N});for(const R of D)k.add(R)}};E("WEEKDAY","weekday",["WEEKDAY"]),E("TIME","time",["FIXED_HOUR","FIXED_MINUTE"]);for(const w of[...l].sort()){if(k.has(w)||!w.endsWith("_BASE"))continue;const x=w.slice(0,-5);if(!l.has(`${x}_FACTOR`))continue;let D=!0;for(const N of i){const R=p.get(`${N}_WP_${x}`);if(!R){D=!1;break}_[`${N}:${x}`]=R}D&&E(x,"duration",[w,`${x}_FACTOR`])}for(const w of[...l].sort())k.has(w)||E(w,n[ws(o,w)]?.TYPE==="ENUM"?"enum":"number",[w]);if(k.size!==l.size)return;g.sort((w,x)=>fu(w.id)-fu(x.id)||(w.id<x.id?-1:1));const b=n[ws(o,"WEEKDAY")];return{kind:"switch-week-profile",id:"switch-week-profile",covers:a,slots:i,columns:g,durations:_,writable:b!==void 0&&Jr(b)}}function fu(r){const e=uu.indexOf(r);return e===-1?uu.length:e}const Ji=["MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY","SUNDAY"],D0=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],hu=["ENDTIME","TIMEOUT"],mu=["TEMPERATURE","TEMPERATUR"],I0=/^(?:(P\d+)_)?([A-Z]+)_([A-Z]+)_(\d+)$/;function Qr(r,e,n){return`${r}_${e}_${n}`}function Xl(r,e,n,s,a){return{endTime:vu(e[Qr(n.endTimePrefix,s,a)]),value:vu(e[Qr(n.valuePrefix,s,a)])}}function N0(r,e){const n=[];for(const s of r.profiles)for(const a of r.days){let i=0,o=!1;for(let l=1;l<=r.slots;l+=1){const{endTime:f}=Xl(r,e,s,a,l);f!==void 0&&(o?f!==r.dayEnd&&n.push({profile:s.id,day:a,slot:l,code:"after-day-end"}):f<=i&&n.push({profile:s.id,day:a,slot:l,code:"not-increasing"}),f>=r.dayEnd&&(o=!0),i=f)}o||n.push({profile:s.id,day:a,slot:r.slots,code:"day-not-closed"})}return n}function C0(r,e,n,s,a){const i={};for(const o of a)if(!(o===s||!r.days.includes(o)))for(let l=1;l<=r.slots;l+=1)Qh(i,e,n,s,n,o,l);return i}function P0(r,e,n,s){const a={};for(const i of s)if(i.id!==n.id)for(const o of r.days)for(let l=1;l<=r.slots;l+=1)Qh(a,e,n,o,i,o,l);return a}function ri(r){if(r===void 0||!Number.isFinite(r)||r<0)return"";const e=Math.floor(r/60),n=Math.round(r%60);return`${String(e).padStart(2,"0")}:${String(n).padStart(2,"0")}`}function M0(r){const e=/^(\d{1,2}):([0-5]\d)$/.exec(r.trim());if(!e)return;const n=Number(e[1])*60+Number(e[2]);return n>1440?void 0:n}function O0(r,e){const{description:n}=r,s=[],a=new Map;let i=0;for(const b of Object.keys(n)){const w=I0.exec(b),x=w?.[3],D=w?.[2];if(!w||!x||!D||!Ji.includes(x)||!hu.includes(D)&&!mu.includes(D))continue;const N=w[1]??"";s.push(b);let R=a.get(N);R||(R=new Set,a.set(N,R)),R.add(D),i=Math.max(i,Number(w[4]))}if(s.length===0||i===0)return;const o=[];let l="",f="";for(const[b,w]of[...a].sort(([x],[D])=>x<D?-1:1)){const x=[...w].find(R=>hu.includes(R)),D=[...w].find(R=>mu.includes(R));if(w.size!==2||x===void 0||D===void 0||l!==""&&(x!==l||D!==f))return;l=x,f=D;const N=b===""?"":`${b}_`;o.push({id:b,endTimePrefix:`${N}${x}`,valuePrefix:`${N}${D}`})}const p=[];for(const b of o)for(const w of Ji)for(let x=1;x<=i;x+=1)p.push(Qr(b.endTimePrefix,w,x),Qr(b.valuePrefix,w,x));if(p.length!==s.length||p.some(b=>!(b in n)||e.has(b)))return;const _=o[0],g=_&&n[Qr(_.endTimePrefix,"MONDAY",1)],k=_&&n[Qr(_.valuePrefix,"MONDAY",1)],E=g===void 0?void 0:nr(g,"MAX");if(!(!g||!k||E===void 0))return{kind:"week-profile",id:"week-profile",covers:p,profiles:o,days:Ji,slots:i,endTimeField:l,valueField:f,endTimeDescription:g,valueDescription:k,dayEnd:E,writable:Jr(g)&&Jr(k)}}function Qh(r,e,n,s,a,i,o){const l=e[Qr(n.endTimePrefix,s,o)],f=e[Qr(n.valuePrefix,s,o)];l!==void 0&&(r[Qr(a.endTimePrefix,i,o)]=l),f!==void 0&&(r[Qr(a.valuePrefix,i,o)]=f)}function vu(r){return typeof r=="number"&&Number.isFinite(r)?r:void 0}const L0={optionByName:()=>{},optionByIndex:()=>{},preset:()=>{},uiLabel:r=>r},F0=[O0,x0,g0,c0,b0];function G0(r,e=L0){const n=[],s=new Set;for(const a of F0){const i=a(r,s,e);if(i){n.push(i);for(const o of i.covers)s.add(o)}}return n}function U0(r){return new Set(r.flatMap(e=>e.covers))}function B0(r){switch(r.TYPE){case"BOOL":return"bool";case"ACTION":return"action";case"ENUM":return"enum";case"INTEGER":return"integer";case"FLOAT":return"float";case"STRING":return"string";default:return"unknown"}}function Zh(r,e){const n=e?e.parameters.map(a=>a.name):xd(r),s=new Map((e?.parameters??[]).map(a=>[a.name,a]));return n.map(a=>{const i=r[a];if(!i)return;const o=fa(nr(i,"MIN"),i),l=fa(nr(i,"MAX"),i),f=s.get(a)?.preset,p=Us(i);return{name:a,description:i,kind:B0(i),writable:Jr(i),unit:ho(i),step:i.TYPE==="FLOAT"?.1:1,special:i.SPECIAL??[],visible:s.get(a)?.visible??!0,...o===void 0?{}:{min:o},...l===void 0?{}:{max:l},...p===void 0?{}:{valueList:p},...f===void 0?{}:{preset:f}}}).filter(a=>a!==void 0)}function li(r,e,n,s){const a=N_(r,e,n,{enumAs:w_(s.interfaceName),...s.writeAll===!0?{writeAll:!0}:{}});return{targets:[...s.targets],entries:a.changed.map(i=>({param:i,from:za(r[i],n[i]),to:za(a.values[i],n[i])})),values:a.values,skipped:a.skipped,problems:a.problems}}function H0(r,e,n){const s=(l,f,p)=>`putParamset(${l}←${f}, LINK, ${JSON.stringify(p)})`,a=e?.values??{},i=Object.keys(r.values).length>0,o=Object.keys(a).length>0;return{targets:n.map(l=>`${l.receiver}←${l.sender}`),entries:[...r.entries.map(l=>({...l,side:"receiver"})),...(e?.entries??[]).map(l=>({...l,side:"sender"}))],values:r.values,senderValues:a,skipped:[...r.skipped,...e?.skipped??[]],problems:[...r.problems,...e?.problems??[]],calls:[...i?n.map(l=>s(l.receiver,l.sender,r.values)):[],...o?n.map(l=>s(l.sender,l.receiver,a)):[]]}}function pu(r){const e=r.senderValues??{};return{...Object.keys(r.values).length>0?{receiverToSender:r.values}:{},...Object.keys(e).length>0?{senderToReceiver:e}:{}}}function za(r,e){if(r===void 0)return"—";const n=typeof r=="object"&&r!==null&&"explicitDouble"in r?r.explicitDouble:r;return e?.TYPE==="ENUM"&&typeof n=="number"?Us(e)?.[n]??String(n):typeof n=="boolean"?n?"true":"false":String(n)}function Ql(r,e,n){return Object.keys(r).map(s=>{const a=za(r[s],n[s]),i=za(e[s],n[s]);return{param:s,sent:a,stored:i,differs:a!==i}})}function Jh(r){return xd(r).filter(e=>Q_(e)?e!=="DUTY_CYCLE"||r[e]?.TYPE==="BOOL":!1)}function V0(r){const e=Object.entries(r.edits).filter(([s,a])=>r.suppressed.includes(s)!==a).sort(([s],[a])=>s.localeCompare(a)),n=s=>s?r.labels.suppressed:r.labels.unsuppressed;return{targets:[r.address],entries:e.map(([s,a])=>({param:s,from:n(!a),to:n(a)})),values:{},skipped:[],problems:[],calls:e.map(([s,a])=>X1(r.address,s,a))}}const z0=[ci,"UI_TEMPLATE"];function tl(r,e={}){const n=e.expert===!0,s=n?{}:e.profile?.params??{},a=n?[]:e.metadata?.parameterOrder??[],i=n?{}:e.metadata?.optionPresets??{},o=e.presets??{},l=Zh(r).filter(p=>!z0.includes(p.name)),f=new Map(a.map((p,_)=>[p,_]));return l.sort((p,_)=>(f.get(p.name)??Number.MAX_SAFE_INTEGER)-(f.get(_.name)??Number.MAX_SAFE_INTEGER)),l.map(p=>{const _=s[p.name],g=o[i[p.name]??""];return{...p,...g===void 0?{}:{preset:g},fixedByProfile:_?.kind==="fixed",..._?.kind==="list"?{allowed:_.values}:{},..._?.kind==="range"?{range:{min:_.min,max:_.max}}:{}}})}function gu(r,e){const n=r.name;return n[e]??n.en??n.de??r.key}function j0(r,e){const n=r.description;return n[e]??n.en??n.de??""}var W0=y('<span class="hmm-param-id svelte-1qr2qb3"> </span>'),K0=y('<input type="checkbox" class="svelte-1qr2qb3"/>'),nl=y("<option> </option>"),Y0=y('<select class="hmm-select hmm-param-enum svelte-1qr2qb3"></select>'),q0=y('<input class="hmm-input hmm-param-number svelte-1qr2qb3" type="number"/>'),$0=y('<select class="hmm-select hmm-param-special svelte-1qr2qb3"><option> </option><!></select>'),X0=y('<select class="hmm-select hmm-param-preset svelte-1qr2qb3"><option>…</option><!></select>'),Q0=y("<!> <!> <!>",1),Z0=y('<input class="hmm-input hmm-param-text svelte-1qr2qb3" type="text"/>'),J0=y('<span class="hmm-param-unit svelte-1qr2qb3"> </span>'),ew=y("<span> </span>"),tw=y('<div class="hmm-param-set svelte-1qr2qb3"><button type="button" class="hmm-button">setValue</button></div>'),nw=y('<label class="hmm-param-suppress svelte-1qr2qb3"><input type="checkbox"/> <span> </span></label>'),rw=y('<div class="hmm-param-flag svelte-1qr2qb3"><span class="hmm-param-ro"> </span></div>'),sw=y('<div class="hmm-param-range svelte-1qr2qb3"> </div>'),aw=y('<div class="hmm-param-default svelte-1qr2qb3"> </div>'),iw=y('<p class="hmm-param-help hmm-param-table-wide svelte-1qr2qb3"> </p>'),ow=y('<div><div class="hmm-param-label svelte-1qr2qb3"><span> </span> <!></div> <div class="hmm-param-control svelte-1qr2qb3"><!> <!> <!></div> <!> <!> <!> <!> <!> <!></div>');function Da(r,e){ut(e,!0);let n=H(e,"help",3,void 0),s=H(e,"valueLabel",3,void 0),a=H(e,"presetLabel",3,void 0),i=H(e,"valueState",3,void 0),o=H(e,"onset",3,void 0),l=H(e,"changed",3,!1),f=H(e,"disabled",3,!1),p=H(e,"entry",3,!1),_=H(e,"suppressed",3,void 0),g=H(e,"onsuppress",3,void 0),k=H(e,"suppressLabel",3,""),E=H(e,"suppressTitle",3,void 0),b=H(e,"suppressChanged",3,!1);const w=Ot(),x=w.i18n.t,D=c(()=>f()||!e.field.writable),N=c(()=>e.field.kind==="integer"||e.field.kind==="float"),R=c(()=>t(N)?fa(X(e.value),e.field.description):e.value),M=c(()=>t(R)===void 0||t(R)===null?"":String(t(R))),z=c(()=>X(e.value)??-1),$=c(()=>e.field.special.find(V=>V.VALUE===X(e.value)));let le=C(void 0);const fe=c(()=>t($)!==void 0&&!p()&&(t(le)===void 0||t(le).on!==e.value));let de=C(void 0),B;ot(()=>{const V=X(e.value);V!==void 0&&t($)===void 0&&(B=V)});const oe=c(()=>e.field.preset?.presets.find(V=>V.value===X(e.value))),K=c(()=>e.label!==e.field.name);function X(V){if(typeof V=="number")return V;if(typeof V=="string"&&V.trim()!==""&&Number.isFinite(Number(V)))return Number(V)}function se(V){if(V==="")return;const L=kc(Number(V),e.field.description);L!==void 0&&Number.isFinite(L)&&e.onchange(L)}function j(V){return s()?s()(V):V}function ne(V){const L=j(V);return L!==V?L:w.meta.specialLabel(e.field.name,V)}function ye(V){if(V===void 0||e.field.special.some(Pe=>Pe.VALUE===V))return!1;const L=fa(V,e.field.description);return typeof L=="number"&&(e.field.min===void 0||L>=e.field.min)&&(e.field.max===void 0||L<=e.field.max)}function xe(){const V=X(e.field.description.DEFAULT);return ye(V)?V:ye(B)?B:kc(e.field.min??0,e.field.description)??0}async function ie(V){const L=e.field.special.find(Pe=>Pe.ID===V);if(L){u(le,void 0),e.onchange(L.VALUE);return}u(le,{on:e.value,draft:xe()},!0),await Ma(),t(de)?.focus(),t(de)?.select()}function Ae(V){const L=[x("Last change: {time}",{time:V.lc===void 0?"–":ca(V.lc)}),x("Last report: {time}",{time:ca(V.ts)})];return V.confirmed||L.push(x("Restored by the system from its own file; no device has reported it since the system started.")),L.push(x("The openccu-lite system's clock")),L.join(`
15
+ `)}var Te=ow();let me;var P=A(Te),ce=A(P),be=m(ce,!0),ee=d(ce,2);{var he=V=>{var L=W0(),Pe=m(L,!0);S(()=>h(Pe,e.field.name)),v(V,L)};W(ee,V=>{t(K)&&V(he)})}var G=d(P,2),Q=A(G);{var q=V=>{var L=K0();S(()=>{Pr(L,e.value===!0||e.value==="true"||e.value===1),L.disabled=t(D),T(L,"aria-label",e.label)}),re("change",L,Pe=>e.onchange(Pe.currentTarget.checked)),v(V,L)},Y=V=>{var L=Y0();Xe(L,22,()=>e.field.valueList??[],Ge=>Ge,(Ge,qe,we,Ce)=>{var Oe=nl(),Be=m(Oe,!0),pe={};S((De,Ue)=>{h(Be,De),pe!==(pe=Ue)&&(Oe.value=(Oe.__value=pe)??"")},[()=>j(qe),()=>String(t(we))]),v(Ge,Oe)});var Pe;Xt(L),S(Ge=>{L.disabled=t(D),T(L,"aria-label",e.label),Pe!==(Pe=Ge)&&(L.value=(L.__value=Pe)??"",Bn(L,Pe))},[()=>String(t(z))]),re("change",L,Ge=>e.onchange(Number(Ge.currentTarget.value))),v(V,L)},ae=V=>{var L=Q0(),Pe=Ne(L);{var Ge=Be=>{var pe=q0();fn(pe,De=>u(de,De),()=>t(de)),S(De=>{T(pe,"min",e.field.min),T(pe,"max",e.field.max),T(pe,"step",e.field.step),pe.disabled=t(D),T(pe,"aria-label",e.label),ln(pe,De)},[()=>t($)===void 0?t(M):String(fa(t(le)!==void 0&&t(le).on===e.value?t(le).draft:xe(),e.field.description))]),re("input",pe,De=>se(De.currentTarget.value)),v(Be,pe)};W(Pe,Be=>{t(fe)||Be(Ge)})}var qe=d(Pe,2);{var we=Be=>{var pe=$0(),De=A(pe),Ue=m(De,!0);De.value=De.__value="";var Fe=d(De);Xe(Fe,17,()=>e.field.special,tt=>tt.ID,(tt,ht)=>{var ct=nl(),ke=m(ct,!0),Le={};S($e=>{h(ke,$e),Le!==(Le=t(ht).ID)&&(ct.value=(ct.__value=Le)??"")},[()=>ne(t(ht).ID)]),v(tt,ct)});var Ye;Xt(pe),S(tt=>{pe.disabled=t(D),T(pe,"aria-label",`${e.label} SPECIAL`),h(Ue,tt),Ye!==(Ye=t(fe)?t($)?.ID??"":"")&&(pe.value=(pe.__value=Ye)??"",Bn(pe,Ye))},[()=>x("Enter value")]),re("change",pe,tt=>{ie(tt.currentTarget.value)}),v(Be,pe)};W(qe,Be=>{e.field.special.length>0&&Be(we)})}var Ce=d(qe,2);{var Oe=Be=>{var pe=X0(),De=A(pe);De.value=De.__value="";var Ue=d(De);Xe(Ue,17,()=>e.field.preset.presets,Ye=>String(Ye.value),(Ye,tt,ht,ct)=>{var ke=nl(),Le=m(ke,!0),$e={};S((at,lt)=>{h(Le,at),$e!==($e=lt)&&(ke.value=(ke.__value=$e)??"")},[()=>Ed(t(tt),a()??j),()=>String(t(tt).value)]),v(Ye,ke)});var Fe;Xt(pe),S(Ye=>{pe.disabled=t(D),T(pe,"aria-label",`${e.label} presets`),Fe!==(Fe=Ye)&&(pe.value=(pe.__value=Fe)??"",Bn(pe,Fe))},[()=>t(oe)===void 0?"":String(t(oe).value)]),re("change",pe,Ye=>{const tt=e.field.preset?.presets.find(ht=>String(ht.value)===Ye.currentTarget.value);tt!==void 0&&e.onchange(tt.value)}),v(Be,pe)};W(Ce,Be=>{e.field.preset&&Be(Oe)})}v(V,L)},J=V=>{var L=Z0();S(()=>{L.disabled=t(D),T(L,"aria-label",e.label),ln(L,t(M))}),re("input",L,Pe=>e.onchange(Pe.currentTarget.value)),v(V,L)};W(Q,V=>{e.field.kind==="bool"||e.field.kind==="action"?V(q):e.field.kind==="enum"?V(Y,1):t(N)?V(ae,2):V(J,-1)})}var ve=d(Q,2);{var ge=V=>{var L=J0(),Pe=m(L,!0);S(()=>h(Pe,e.field.unit)),v(V,L)};W(ve,V=>{e.field.unit!==""&&!t(fe)&&V(ge)})}var te=d(ve,2);{var O=V=>{var L=ew();let Pe;var Ge=m(L,!0);S((qe,we,Ce)=>{Pe=_t(L,1,"hmm-param-since svelte-1qr2qb3",null,Pe,{"hmm-param-restored":!i().confirmed}),T(L,"title",qe),T(L,"data-testid",`since-${e.field.name}`),T(L,"data-confirmed",we),h(Ge,Ce)},[()=>Ae(i()),()=>String(i().confirmed),()=>i().confirmed?x("since {time}",{time:ca(i().lc??i().ts)}):x("restored")]),v(V,L)};W(te,V=>{i()&&V(O)})}var U=d(G,2);{var I=V=>{var L=tw(),Pe=m(L);S(()=>{Pe.disabled=t(D),T(Pe,"data-testid",`set-${e.field.name}`)}),re("click",Pe,()=>o()()),v(V,L)};W(U,V=>{o()&&V(I)})}var F=d(U,2);{var Ee=V=>{var L=nw(),Pe=A(L),Ge=d(Pe,2),qe=m(Ge,!0);S(()=>{T(L,"title",E()),Pr(Pe,_()===!0),T(Pe,"data-testid",`suppress-${e.field.name}`),h(qe,k())}),re("change",Pe,we=>g()(we.currentTarget.checked)),v(V,L)};W(F,V=>{g()&&V(Ee)})}var Ie=d(F,2);{var Me=V=>{var L=rw(),Pe=A(L),Ge=m(Pe,!0);S((qe,we)=>{T(Pe,"title",qe),h(Ge,we)},[()=>x("Read-only"),()=>x("ro")]),v(V,L)};W(Ie,V=>{e.field.writable||V(Me)})}var Ve=d(Ie,2);{var ze=V=>{var L=sw(),Pe=m(L);S(()=>h(Pe,`${e.field.min??"−∞"??""} … ${e.field.max??"∞"??""}`)),v(V,L)};W(Ve,V=>{(e.field.min!==void 0||e.field.max!==void 0)&&!t(fe)&&V(ze)})}var nt=d(Ve,2);{var Ze=V=>{const L=c(()=>e.field.special.find(qe=>qe.VALUE===X(e.field.description.DEFAULT)));var Pe=aw(),Ge=m(Pe,!0);S(qe=>h(Ge,qe),[()=>x("default {value}",{value:t(L)?ne(t(L).ID):String(e.field.description.DEFAULT)})]),v(V,Pe)};W(nt,V=>{e.field.description.DEFAULT!==void 0&&V(Ze)})}var _e=d(nt,2);{var Se=V=>{var L=iw(),Pe=m(L,!0);S(()=>h(Pe,n())),v(V,L)};W(_e,V=>{n()&&V(Se)})}S(()=>{me=_t(Te,1,"hmm-param hmm-param-table-row svelte-1qr2qb3",null,me,{"hmm-param-changed":l()||b()}),T(Te,"data-testid",`param-${e.field.name}`),T(ce,"title",e.field.name),h(be,e.label)}),v(r,Te),ft()}Et(["change","input","click"]);var lw=y('<button type="button" class="hmm-button" data-testid="write-stage"> </button>'),dw=y('<button type="button" class="hmm-button"> </button> <!> <button type="button" class="hmm-button" data-testid="write-confirm"> </button>',1),cw=y('<p class="hmm-preview-call svelte-1aaq6az"> </p>'),uw=y('<p class="hmm-preview-call svelte-1aaq6az">putParamset(<span class="hmm-mono"> </span>, <span class="hmm-mono"> </span>, <span class="hmm-mono"> </span>)</p>'),bu=y("<li> </li>"),fw=y('<ul class="hmm-preview-warnings svelte-1aaq6az" data-testid="preview-warnings"></ul>'),hw=y('<p data-testid="preview-empty"> </p>'),_u=y('<span class="hmm-preview-side svelte-1aaq6az"> </span>'),mw=y('<tr><td class="hmm-mono svelte-1aaq6az"> <!></td><td class="svelte-1aaq6az"> </td><td class="hmm-preview-new svelte-1aaq6az"> </td></tr>'),vw=y('<table class="hmm-preview-table svelte-1aaq6az"><thead><tr><th class="svelte-1aaq6az"> </th><th class="svelte-1aaq6az"> </th><th class="svelte-1aaq6az"> </th></tr></thead><tbody></tbody></table> <p class="hmm-preview-count svelte-1aaq6az"><!></p>',1),pw=y('<ul class="hmm-preview-problems svelte-1aaq6az" data-testid="preview-problems"></ul>'),gw=y('<tr><td class="hmm-mono svelte-1aaq6az"> <!></td><td class="svelte-1aaq6az"> </td><td class="svelte-1aaq6az"> </td></tr>'),bw=y('<p class="hmm-preview-warn svelte-1aaq6az" data-testid="readback-warning"> </p>'),_w=y('<table class="hmm-preview-table svelte-1aaq6az" data-testid="preview-readback"><thead><tr><th class="svelte-1aaq6az"> </th><th class="svelte-1aaq6az"> </th><th class="svelte-1aaq6az"> </th></tr></thead><tbody></tbody></table> <!>',1),Ew=y('<li><span class="hmm-mono"> </span> </li>'),yw=y('<ul class="hmm-preview-results svelte-1aaq6az" data-testid="preview-results"></ul>'),Sw=y("<!> <!> <!> <!> <!> <!>",1);function Zl(r,e){ut(e,!0);let n=H(e,"open",15,!1),s=H(e,"preview",3,void 0),a=H(e,"paramset",3,"MASTER"),i=H(e,"warnings",19,()=>[]),o=H(e,"writing",3,!1),l=H(e,"results",19,()=>[]),f=H(e,"readBack",19,()=>[]),p=H(e,"onstage",3,void 0),_=H(e,"confirmLabel",3,void 0),g=H(e,"countText",3,void 0);const E=Ot().i18n.t,b=c(()=>s()===void 0||s().entries.length===0),w=520;{const x=N=>{var R=dw(),M=Ne(R),z=m(M,!0),$=d(M,2);{var le=B=>{var oe=lw(),K=m(oe,!0);S(X=>{oe.disabled=o()||t(b),h(K,X)},[()=>E("Add to pending changes")]),re("click",oe,()=>p()()),v(B,oe)};W($,B=>{p()&&B(le)})}var fe=d($,2),de=m(fe,!0);S((B,oe)=>{h(z,B),fe.disabled=o()||t(b),h(de,oe)},[()=>E("Close"),()=>_()??E("Write")]),re("click",M,()=>n(!1)),re("click",fe,()=>e.onconfirm()),v(N,R)};let D=c(()=>E("Preview"));En(r,{get title(){return t(D)},width:"960px",minWidth:360,minHeight:w,testId:"write-preview",get open(){return n()},set open(N){n(N)},buttons:x,children:(N,R)=>{var M=St(),z=Ne(M);{var $=le=>{var fe=Sw(),de=Ne(fe);{var B=P=>{var ce=St(),be=Ne(ce);Xe(be,18,()=>s().calls,ee=>ee,(ee,he,G)=>{var Q=cw(),q=m(Q,!0);S(Y=>{T(Q,"data-testid",Y),h(q,he)},[()=>`preview-call-${String(t(G))}`]),v(ee,Q)}),v(P,ce)},oe=P=>{var ce=St(),be=Ne(ce);Xe(be,16,()=>s().targets,ee=>ee,(ee,he)=>{var G=uw(),Q=d(A(G)),q=m(Q,!0),Y=d(Q,2),ae=m(Y,!0),J=d(Y,2),ve=m(J,!0);S(ge=>{T(G,"data-testid",`preview-call-${he}`),h(q,he),h(ae,a()),h(ve,ge)},[()=>JSON.stringify(s().values)]),v(ee,G)}),v(P,ce)};W(de,P=>{s().calls?P(B):P(oe,-1)})}var K=d(de,2);{var X=P=>{var ce=fw();Xe(ce,20,i,be=>be,(be,ee)=>{var he=bu(),G=m(he,!0);S(()=>h(G,ee)),v(be,he)}),v(P,ce)};W(K,P=>{i().length>0&&P(X)})}var se=d(K,2);{var j=P=>{var ce=hw(),be=m(ce,!0);S(ee=>h(be,ee),[()=>E("Nothing has changed - nothing will be written")]),v(P,ce)},ne=P=>{var ce=vw(),be=Ne(ce),ee=A(be),he=A(ee),G=A(he),Q=m(G,!0),q=d(G),Y=m(q,!0),ae=d(q),J=m(ae,!0),ve=d(ee);Xe(ve,21,()=>s().entries,I=>`${I.side??""}:${I.param}`,(I,F)=>{var Ee=mw(),Ie=A(Ee),Me=A(Ie),Ve=d(Me);{var ze=V=>{var L=_u(),Pe=m(L,!0);S(Ge=>h(Pe,Ge),[()=>t(F).side==="sender"?E("Sender"):E("Receiver")]),v(V,L)};W(Ve,V=>{t(F).side&&V(ze)})}var nt=d(Ie),Ze=m(nt,!0),_e=d(nt),Se=m(_e,!0);S(()=>{T(Ee,"data-testid",t(F).side==="sender"?`preview-sender-${t(F).param}`:`preview-${t(F).param}`),h(Me,t(F).param),h(Ze,t(F).from),h(Se,t(F).to)}),v(I,Ee)});var ge=d(be,2),te=A(ge);{var O=I=>{var F=Cn();S(()=>h(F,g())),v(I,F)},U=I=>{var F=Cn();S(Ee=>h(F,`${Ee??""} ×
16
+ ${s().targets.length??""}`),[()=>E("{count} parameters will be written",{},s().entries.length)]),v(I,F)};W(te,I=>{g()!==void 0?I(O):I(U,-1)})}S((I,F,Ee)=>{h(Q,I),h(Y,F),h(J,Ee)},[()=>E("Parameter"),()=>E("Current value"),()=>E("New value")]),v(P,ce)};W(se,P=>{t(b)?P(j):P(ne,-1)})}var ye=d(se,2);{var xe=P=>{var ce=pw();Xe(ce,21,()=>s().problems,be=>`${be.param}-${be.code}`,(be,ee)=>{var he=bu(),G=m(he);S(()=>h(G,`${t(ee).param??""}: ${t(ee).message??""}`)),v(be,he)}),v(P,ce)};W(ye,P=>{s().problems.length>0&&P(xe)})}var ie=d(ye,2);{var Ae=P=>{var ce=_w(),be=Ne(ce),ee=A(be),he=A(ee),G=A(he),Q=m(G,!0),q=d(G),Y=m(q,!0),ae=d(q),J=m(ae,!0),ve=d(ee);Xe(ve,21,f,U=>`${U.side??""}:${U.param}`,(U,I)=>{var F=gw();let Ee;var Ie=A(F),Me=A(Ie),Ve=d(Me);{var ze=V=>{var L=_u(),Pe=m(L,!0);S(Ge=>h(Pe,Ge),[()=>t(I).side==="sender"?E("Sender"):E("Receiver")]),v(V,L)};W(Ve,V=>{t(I).side&&V(ze)})}var nt=d(Ie),Ze=m(nt,!0),_e=d(nt),Se=m(_e,!0);S(()=>{T(F,"data-testid",t(I).side==="sender"?`readback-sender-${t(I).param}`:`readback-${t(I).param}`),Ee=_t(F,1,"svelte-1aaq6az",null,Ee,{"hmm-preview-differs":t(I).differs}),h(Me,t(I).param),h(Ze,t(I).sent),h(Se,t(I).stored)}),v(U,F)});var ge=d(be,2);{var te=U=>{var I=bw(),F=m(I,!0);S(Ee=>h(F,Ee),[()=>E("The interface answered ok but stored something else")]),v(U,I)},O=c(()=>f().some(U=>U.differs));W(ge,U=>{t(O)&&U(te)})}S((U,I,F)=>{h(Q,U),h(Y,I),h(J,F)},[()=>E("Parameter"),()=>E("What was sent"),()=>E("Read back")]),v(P,ce)};W(ie,P=>{f().length>0&&P(Ae)})}var Te=d(ie,2);{var me=P=>{var ce=yw();Xe(ce,21,l,be=>`${be.address}-${be.peer??""}-${be.paramset}`,(be,ee)=>{var he=Ew();let G;var Q=A(he),q=m(Q),Y=d(Q);S(()=>{G=_t(he,1,"svelte-1aaq6az",null,G,{"hmm-preview-failed":!t(ee).ok}),h(q,`${t(ee).address??""}${t(ee).peer===void 0?"":`←${t(ee).peer}`}`),h(Y,` ${t(ee).ok?"✔":`✕ ${t(ee).faultString??""}`}`)}),v(be,he)}),v(P,ce)};W(Te,P=>{l().length>0&&P(me)})}v(le,fe)};W(z,le=>{s()&&le($)})}v(N,M)},$$slots:{buttons:!0,default:!0}})}ft()}Et(["click"]);function eo(r,e){if(!r)return;const n=r;return n[e]??n.en??n.de}function ww(r){return r<1?`${String(Math.round(r*1e3))} ms`:r<60?`${String(r)} s`:r<3600?`${String(Math.round(r/60*100)/100)} min`:`${String(Math.round(r/3600*100)/100)} h`}function kw(r,e,n){const s=eo(r.label,e);return s!==void 0?s:"seconds"in r?ww(r.seconds):n(r.special==="notActive"?"Not active":r.special==="permanent"?"Permanent":"Enter value")}function Aw(r,e,n){const s=Id(e,n);if(s===void 0)return-1;const a=r.findIndex(i=>"seconds"in i?!s.maximal&&Math.abs(i.seconds-s.seconds)<1e-6:i.special==="notActive"?s.seconds===0:i.special==="permanent"?s.maximal:!1);return a>=0?a:r.findIndex(i=>"special"in i&&i.special==="enterValue")}function Tw(r,e){if("seconds"in r)return Nd(r.seconds,e);if(r.special==="notActive")return{[e.unitParam]:0,[e.countParam]:0};if(r.special==="permanent")return{[e.unitParam]:e.units.length-1,[e.countParam]:e.maxCount}}function em(r,e){if(r===e)return!0;if(typeof r=="boolean"||typeof e=="boolean")return!!r==!!e;const n=Number(r),s=Number(e);return!Number.isNaN(n)&&!Number.isNaN(s)&&n===s}function Rw(r,e=[]){return r.flatMap(n=>e.filter(s=>s.id===n))}function xw(r,e,n){return r.findIndex(s=>Object.entries(s.values).every(([a,i])=>!(a in n)||em(e[a],i)))}function Dw(r,e){return Object.fromEntries(Object.entries(r.values).filter(([n])=>n in e))}function Iw(r,e){return r.presets.findIndex(n=>em(n.value,e)||String(n.value)===String(e))}var Nw=y('<h5 class="hmm-link-press hmm-param-table-wide svelte-1fgjxm" data-testid="link-easy-press"> </h5>'),Eu=y('<option disabled="">—</option>'),rl=y("<option> </option>"),Cw=y('<select class="hmm-select svelte-1fgjxm"><!><!></select>'),Pw=y('<div><span class="hmm-link-easy-label svelte-1fgjxm"> </span> <!></div> <!>',1),Mw=y('<div><span class="hmm-link-easy-label svelte-1fgjxm"> </span> <select class="hmm-select svelte-1fgjxm"><!><option> </option></select></div> <!>',1),Ow=y('<div class="hmm-link-easy-row hmm-param-table-row svelte-1fgjxm" data-testid="easy-subset"><span class="hmm-link-easy-label svelte-1fgjxm"> </span> <select class="hmm-select svelte-1fgjxm"><!><!></select></div>'),Lw=y("<!> <!>",1),Fw=y('<div class="hmm-link-easy hmm-param-table-span"></div>');function tm(r,e){ut(e,!0);let n=H(e,"subsets",19,()=>[]),s=H(e,"testId",3,"easy-form");const a=Ot(),i=a.i18n.t,o=c(()=>a.i18n.language);let l=C(We({}));function f(N){const R=N===void 0?"":N.kind==="time"?N.pair.unitParam:N.kind==="param"?N.param:"";return R.startsWith("SHORT_")?"SHORT":R.startsWith("LONG_")?"LONG":void 0}const p=c(()=>e.form.some(N=>f(N)==="SHORT")&&e.form.some(N=>f(N)==="LONG"));function _(N){if(!t(p))return;const R=f(e.form[N]),M=N===0?void 0:f(e.form[N-1]);if(!(R===void 0||R===M))return i(R==="SHORT"?"Short key press":"Long key press")}function g(N,R){return eo(N.label,t(o))??a.meta.parameterLabel(R,e.channelType)}function k(N){return N.option===void 0?void 0:e.presets[N.option]}let E=C(We({}));function b(N,R,M){const z=R.presets[M];u(E,{...t(E),[N.param]:z===void 0},!0),z!==void 0&&w(N,z.value)}function w(N,R){e.onchange(Object.fromEntries([N.param,...N.also].map(M=>[M,R])))}function x(N,R){const M=(e.timeSelectors[N.selector]??[])[R];if(M===void 0)return;const z=Tw(M,N.pair);u(l,{...t(l),[N.pair.name]:z===void 0},!0),z!==void 0&&e.onchange(z)}var D=Fw();Xe(D,23,()=>e.form,N=>N.kind==="time"?N.pair.name:N.kind==="param"?N.param:`subset-${String(N.subsets)}`,(N,R,M)=>{const z=c(()=>_(t(M)));var $=Lw(),le=Ne($);{var fe=X=>{var se=Nw(),j=m(se,!0);S(()=>h(j,t(z))),v(X,se)};W(le,X=>{t(z)&&X(fe)})}var de=d(le,2);{var B=X=>{const se=c(()=>e.timeSelectors[t(R).selector]??[]),j=c(()=>Aw(t(se),e.values,t(R).pair)),ne=c(()=>t(se).findIndex(G=>"special"in G&&G.special==="enterValue")),ye=c(()=>t(l)[t(R).pair.name]===!0||t(j)>=0&&t(j)===t(ne)||t(se).length===0),xe=c(()=>g(t(R),t(R).pair.countParam));var ie=Pw(),Ae=Ne(ie);let Te;var me=A(Ae),P=m(me,!0),ce=d(me,2);{var be=G=>{var Q=Cw(),q=A(Q);{var Y=ve=>{var ge=Eu();ge.value=ge.__value="-1",v(ve,ge)};W(q,ve=>{t(j)<0&&ve(Y)})}var ae=d(q);Xe(ae,17,()=>t(se),co,(ve,ge,te)=>{var O=rl(),U=m(O,!0),I={};S((F,Ee)=>{h(U,F),I!==(I=Ee)&&(O.value=(O.__value=I)??"")},[()=>kw(t(ge),t(o),i),()=>String(te)]),v(ve,O)});var J;Xt(Q),S(ve=>{T(Q,"aria-label",t(xe)),T(Q,"data-testid",`easy-time-select-${t(R).pair.name}`),J!==(J=ve)&&(Q.value=(Q.__value=J)??"",Bn(Q,J))},[()=>String(t(ye)&&t(ne)>=0?t(ne):t(j))]),re("change",Q,ve=>x(t(R),Number(ve.currentTarget.value))),v(G,Q)};W(ce,G=>{t(se).length>0&&G(be)})}var ee=d(Ae,2);{var he=G=>{var Q=St(),q=Ne(Q);Xe(q,16,()=>[t(R).pair.unitParam,t(R).pair.countParam],Y=>Y,(Y,ae)=>{const J=c(()=>e.fields.get(ae));var ve=St(),ge=Ne(ve);{var te=O=>{{let U=c(()=>e.values[ae]??t(J).description.DEFAULT),I=c(()=>a.meta.parameterLabel(ae,e.channelType)),F=c(()=>a.meta.parameterHelp(ae,e.channelType)),Ee=c(()=>e.changed(ae));Da(O,{get field(){return t(J)},get value(){return t(U)},get label(){return t(I)},get help(){return t(F)},get changed(){return t(Ee)},valueLabel:Ie=>a.meta.valueLabel(ae,Ie,e.channelType),presetLabel:Ie=>a.meta.uiLabel(Ie),onchange:Ie=>e.onchange({[ae]:Ie})})}};W(ge,O=>{t(J)&&O(te)})}v(Y,ve)}),v(G,Q)};W(ee,G=>{t(ye)&&G(he)})}S(G=>{Te=_t(Ae,1,"hmm-link-easy-row hmm-param-table-row svelte-1fgjxm",null,Te,{"hmm-param-changed":G}),T(Ae,"data-testid",`easy-time-${t(R).pair.name}`),h(P,t(xe))},[()=>e.changed(t(R).pair.unitParam)||e.changed(t(R).pair.countParam)]),v(X,ie)},oe=X=>{const se=c(()=>e.fields.get(t(R).param)),j=c(()=>k(t(R)));var ne=St(),ye=Ne(ne);{var xe=Ae=>{const Te=c(()=>e.values[t(R).param]??t(se).description.DEFAULT),me=c(()=>Iw(t(j),t(Te))),P=c(()=>t(E)[t(R).param]===!0||t(me)<0),ce=c(()=>g(t(R),t(R).param));var be=Mw(),ee=Ne(be);let he;var G=A(ee),Q=m(G,!0),q=d(G,2),Y=A(q);Xe(Y,17,()=>t(j).presets,co,(O,U,I)=>{var F=rl(),Ee=m(F,!0),Ie={};S((Me,Ve)=>{h(Ee,Me),Ie!==(Ie=Ve)&&(F.value=(F.__value=Ie)??"")},[()=>Ed(t(U),Me=>a.meta.uiLabel(Me)),()=>String(I)]),v(O,F)});var ae=d(Y),J=m(ae,!0);ae.value=ae.__value="-1";var ve;Xt(q);var ge=d(ee,2);{var te=O=>{{let U=c(()=>a.meta.parameterLabel(t(R).param,e.channelType)),I=c(()=>a.meta.parameterHelp(t(R).param,e.channelType)),F=c(()=>e.changed(t(R).param));Da(O,{get field(){return t(se)},get value(){return t(Te)},entry:!0,get label(){return t(U)},get help(){return t(I)},get changed(){return t(F)},valueLabel:Ee=>a.meta.valueLabel(t(R).param,Ee,e.channelType),presetLabel:Ee=>a.meta.uiLabel(Ee),onchange:Ee=>w(t(R),Ee)})}};W(ge,O=>{t(P)&&O(te)})}S((O,U,I)=>{he=_t(ee,1,"hmm-link-easy-row hmm-param-table-row svelte-1fgjxm",null,he,{"hmm-param-changed":O}),T(ee,"data-testid",`easy-preset-${t(R).param}`),h(Q,t(ce)),T(q,"aria-label",t(ce)),T(q,"data-testid",`easy-preset-select-${t(R).param}`),h(J,U),ve!==(ve=I)&&(q.value=(q.__value=ve)??"",Bn(q,ve))},[()=>e.changed(t(R).param),()=>i("Enter value"),()=>String(t(P)?-1:t(me))]),re("change",q,O=>b(t(R),t(j),Number(O.currentTarget.value))),v(Ae,be)},ie=Ae=>{{let Te=c(()=>e.values[t(R).param]??t(se).description.DEFAULT),me=c(()=>g(t(R),t(R).param)),P=c(()=>a.meta.parameterHelp(t(R).param,e.channelType)),ce=c(()=>e.changed(t(R).param));Da(Ae,{get field(){return t(se)},get value(){return t(Te)},get label(){return t(me)},get help(){return t(P)},get changed(){return t(ce)},valueLabel:be=>a.meta.valueLabel(t(R).param,be,e.channelType),presetLabel:be=>a.meta.uiLabel(be),onchange:be=>w(t(R),be)})}};W(ye,Ae=>{t(se)&&t(j)?Ae(xe):t(se)&&Ae(ie,1)})}v(X,ne)},K=X=>{const se=c(()=>Rw(t(R).subsets,n()));var j=St(),ne=Ne(j);{var ye=xe=>{const ie=c(()=>xw(t(se),e.values,e.description)),Ae=c(()=>eo(t(R).label,t(o))??i("Mode"));var Te=Ow(),me=A(Te),P=m(me,!0),ce=d(me,2),be=A(ce);{var ee=Q=>{var q=Eu();q.value=q.__value="-1",v(Q,q)};W(be,Q=>{t(ie)<0&&Q(ee)})}var he=d(be);Xe(he,19,()=>t(se),Q=>Q.id,(Q,q,Y)=>{var ae=rl(),J=m(ae,!0),ve={};S((ge,te)=>{h(J,ge),ve!==(ve=te)&&(ae.value=(ae.__value=ve)??"")},[()=>eo(t(R).names?.[t(R).subsets.indexOf(t(q).id)],t(o))??a.meta.parameterLabel(t(q).key,e.channelType),()=>String(t(Y))]),v(Q,ae)});var G;Xt(ce),S(Q=>{h(P,t(Ae)),T(ce,"aria-label",t(Ae)),G!==(G=Q)&&(ce.value=(ce.__value=G)??"",Bn(ce,G))},[()=>String(t(ie))]),re("change",ce,Q=>{const q=t(se)[Number(Q.currentTarget.value)];q&&e.onchange(Dw(q,e.description))}),v(xe,Te)};W(ne,xe=>{t(se).length>0&&xe(ye)})}v(X,j)};W(de,X=>{t(R).kind==="time"?X(B):t(R).kind==="param"?X(oe,1):X(K,-1)})}v(N,$)}),S(()=>T(D,"data-testid",s())),v(r,D),ft()}Et(["change"]);var Gw=y('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="link-preview"> </button>',1),Uw=y("<p> </p>"),Bw=y('<p data-testid="link-paramset-failed"> </p>'),Hw=y('<div class="hmm-link-targets svelte-1xlqelt"><!></div>'),Vw=y('<div class="hmm-link-list hmm-param-table svelte-1xlqelt" data-testid="link-sender-params"></div>'),zw=y('<section class="hmm-link-section svelte-1xlqelt"><h4 class="svelte-1xlqelt"><button type="button" class="hmm-link-toggle svelte-1xlqelt" data-testid="link-sender-toggle"> </button> </h4> <!></section>'),yu=y("<option> </option>"),jw=y('<p class="hmm-link-profile-text svelte-1xlqelt" data-testid="link-profile-description"> </p>'),Ww=y('<p class="hmm-link-hint svelte-1xlqelt" data-testid="link-easy-legend"><span class="hmm-link-easy-swatch svelte-1xlqelt" aria-hidden="true"></span> </p>'),Kw=y('<p class="hmm-link-hint svelte-1xlqelt" data-testid="link-easy-unknown"> </p>'),Yw=y("<div><!></div>"),qw=y('<li><span class="hmm-mono"> </span> </li>'),$w=y('<ul class="hmm-link-results svelte-1xlqelt" data-testid="link-results"></ul>'),Xw=y('<div class="hmm-link-info svelte-1xlqelt"><label class="svelte-1xlqelt"><span> </span> <input class="hmm-input" data-testid="link-name"/></label> <label class="svelte-1xlqelt"><span>DESCRIPTION</span> <input class="hmm-input" data-testid="link-description"/></label> <button type="button" class="hmm-button" data-testid="link-info-save"> </button></div> <!> <!> <section class="hmm-link-section svelte-1xlqelt"><h4 class="svelte-1xlqelt"> </h4> <div class="hmm-link-profile svelte-1xlqelt"><div class="hmm-link-row svelte-1xlqelt"><label class="svelte-1xlqelt"><span> </span> <select class="hmm-select" data-testid="link-profile"></select></label> <label class="hmm-link-expert svelte-1xlqelt"><input type="checkbox" data-testid="link-expert"/> <span> </span></label></div> <!> <div class="hmm-link-row svelte-1xlqelt"><label class="svelte-1xlqelt"><span> </span> <select class="hmm-select" data-testid="link-template"><option> </option><!></select></label> <label class="svelte-1xlqelt"><span> </span> <input class="hmm-input" data-testid="link-template-name"/></label> <button type="button" class="hmm-button" data-testid="link-template-save"> </button> <button type="button" class="hmm-button" data-testid="link-template-delete"> </button></div></div> <!> <div class="hmm-link-list hmm-param-table svelte-1xlqelt" data-testid="link-receiver-params"><!></div></section> <!>',1),Qw=y("<!> <!>",1);function nm(r,e){ut(e,!0);let n=H(e,"open",15,!1),s=H(e,"sender",3,""),a=H(e,"receiver",3,"");const i=Ot(),o=i.i18n.t;let l=C(void 0),f=C(We({})),p=C(void 0),_=C(We({})),g=C(We({})),k=C(We({})),E=C(We([])),b=C(void 0),w=C(We(vs)),x=C(!1),D=C(void 0),N=C(""),R=C(""),M=C(We([])),z=C(!1),$=C(void 0),le=C(We([])),fe=C(We([])),de=C(!1),B=0,oe=C(""),K=C(""),X=0,se=C(""),j=C("");const ne=c(()=>i.app.selectedInterface),ye=c(()=>i.devices.index(t(ne))),xe=c(()=>t(ye)?.get(s())?.TYPE??""),ie=c(()=>t(ye)?.get(a())?.TYPE??""),Ae=c(()=>`${i.nameOf(s())} → ${i.nameOf(a())} (${s()} ${a()})`),Te=c(()=>t(E).find(_e=>_e.id===t(w))),me=c(()=>{const _e=t(ye),Se=_e?.get(a()),V=_e?.get(s());if(!_e||!Se||!V)return"";const L=_e.get(Se.PARENT??""),Pe=_e.get(V.PARENT??"");return!L||!Pe?"":[Ga(t(ne),Se,"LINK",L),Ga(t(ne),V,"LINK",Pe)].join("|")}),P=c(()=>i.links.templates.filter(_e=>_e.identity===t(me))),ce=c(()=>t(l)?tl(t(l),{metadata:t(b),presets:i.meta.presets,profile:t(Te),expert:t(x)}):[]),be=c(()=>t(p)?tl(t(p),{expert:!0}):[]),ee=c(()=>t(D)??t(be).length>0),he=c(()=>t(l)&&t(Te)&&t(Te).id!==vs?q_(t(Te),t(l)):void 0),G=c(()=>t(x)?void 0:t(he)),Q=c(()=>t(x)?Nl(t(he),t(b)?.subsets):new Set),q=c(()=>new Map((t(l)?tl(t(l),{metadata:t(b),presets:i.meta.presets,profile:t(Te)}):[]).map(_e=>[_e.name,_e]))),Y=c(()=>U()),ae=c(()=>i.links.of(t(ne)).filter(_e=>!(_e.SENDER===s()&&_e.RECEIVER===a())&&(t(ye)?.get(_e.SENDER)?.TYPE??"")===t(xe)&&(t(ye)?.get(_e.RECEIVER)?.TYPE??"")===t(ie)).map(_e=>({value:`${_e.SENDER};${_e.RECEIVER}`,label:`${i.nameOf(_e.SENDER)} → ${i.nameOf(_e.RECEIVER)}`})));ot(()=>{if(!n()||t(ne)===""||s()===""||a()==="")return;const _e=B+=1,Se={interfaceName:t(ne),sender:s(),receiver:a()};u(de,!0),u(oe,""),u(l,void 0),u(f,{},!0),u(p,void 0),u(_,{},!0),u(g,{},!0),u(k,{},!0),u(D,void 0),(async()=>{const[V,L,Pe,Ge,qe]=await Promise.all([i.paramsets.describe(Se.interfaceName,Se.receiver,"LINK"),i.paramsets.read(Se.interfaceName,Se.receiver,Se.sender),i.paramsets.describe(Se.interfaceName,Se.sender,"LINK"),i.paramsets.read(Se.interfaceName,Se.sender,Se.receiver),i.links.info(Se.interfaceName,Se.sender,Se.receiver)]);_e===B&&(u(l,V,!0),u(f,L??{},!0),u(p,Pe,!0),u(_,Ge??{},!0),u(N,qe?.NAME??"",!0),u(R,qe?.DESCRIPTION??"",!0),u(g,{},!0),u(k,{},!0),u(M,[],!0),u(le,[],!0),u(fe,[],!0),u(de,!1),u(oe,`${Se.interfaceName}|${Se.sender}|${Se.receiver}#${String(_e)}`))})()}),ot(()=>{if(!n()||t(ie)===""||t(xe)==="")return;const _e=`${t(ie)}|${t(xe)}`;if(_e===t(K))return;const Se=X+=1;u(K,""),u(E,[],!0),Promise.all([i.meta.profilesFor(t(ie),t(xe)),i.meta.linkMetadataFor(t(ie),t(xe)),i.meta.loadPresets()]).then(([V,L])=>{Se===X&&(u(E,V,!0),u(b,L,!0),u(K,_e))})});let J="",ve;ot(()=>{if(t(oe)===""||t(K)!==`${t(ie)}|${t(xe)}`||t(E).length===0)return;const _e=`${t(oe)}|${t(K)}`;if(J===_e)return;J=_e;const Se=i.meta.engine.detectProfile(t(f),t(E));ve=Se?.id,u(w,Se?.id??vs,!0),u(x,t(w)===vs)}),ot(()=>{const _e=t(me);n()&&_e!==""&&i.links.loadTemplates(_e)});async function ge(){const _e=t(se).trim();if(_e===""||t(me)===""||!t(l))return;const Se=li(t(f),t(g),t(l),{interfaceName:t(ne),targets:[a()],writeAll:!0}).values,V=t(p)?li(t(_),t(k),t(p),{interfaceName:t(ne),targets:[s()],writeAll:!0}).values:{},L={name:_e,identity:t(me),...t(Te)===void 0?{}:{profileId:t(Te).id,profileName:gu(t(Te),i.i18n.language)},receiver:Se,...Object.keys(V).length>0?{sender:V}:{},createdAt:Date.now()};await i.links.saveTemplate(L)&&(u(se,""),u(j,_e,!0),i.notices.push("info",`${o("Save as template")}: ${_e}`))}function te(_e){const Se=t(P).find(V=>V.name===_e);Se&&(Se.profileId!==void 0&&t(E).some(V=>V.id===Se.profileId)&&(u(w,Se.profileId,!0),u(x,t(w)===vs)),u(g,{...t(g),...Se.receiver},!0),Se.sender&&s()!==a()&&u(k,{...t(k),...Se.sender},!0))}function O(_e){u(w,_e,!0),u(x,_e===vs);const Se=t(E).find(qe=>qe.id===_e);if(!Se||!t(l))return;const V=_e===ve,L=i.meta.engine.applyProfile(Se,V?t(f):U(),t(l),{keepCurrent:V}),Pe={};for(const qe of[...Object.keys(Se.params),ci]){const we=L.values[qe];we!==void 0&&(Pe[qe]=we)}u(g,{...t(g),...Pe},!0);const Ge=L.problems.filter(qe=>qe.code==="unknown-parameter");Ge.length>0&&i.notices.push("info",`${o("The profile names {count} parameters this firmware does not have",{},Ge.length)}: ${Ge.map(qe=>qe.param).join(", ")}`);for(const qe of L.problems.filter(we=>we.code!=="unknown-parameter"))i.notices.push("warn",`${qe.param}: ${qe.message}`)}function U(){const _e={...t(f)};for(const[Se,V]of Object.entries(t(g)))(typeof V=="boolean"||typeof V=="number"||typeof V=="string")&&(_e[Se]=V);return _e}function I(_e,Se,V){return Object.prototype.hasOwnProperty.call(V,_e.name)?V[_e.name]:Se[_e.name]??_e.description.DEFAULT}async function F(){await i.links.setInfo(t(ne),s(),a(),t(N),t(R))}function Ee(){const _e=t(M).map(Se=>{const[V,L]=Se.split(";");return{sender:V??"",receiver:L??""}});return[{sender:s(),receiver:a()},..._e]}function Ie(){if(!t(l))return;u(le,[],!0),u(fe,[],!0);const _e=Ee(),Se=li(t(f),t(g),t(l),{interfaceName:t(ne),targets:_e.map(L=>`${L.receiver}←${L.sender}`)}),V=t(p)&&s()!==a()?li(t(_),t(k),t(p),{interfaceName:t(ne),targets:_e.map(L=>`${L.sender}←${L.receiver}`)}):void 0;u($,H0(Se,V,_e),!0),u(z,!0)}function Me(){const _e=t($);if(!_e)return;const Se=pu(_e);if(Se.receiverToSender===void 0&&Se.senderToReceiver===void 0)return;const V=Ee();i.changeSet.stage({kind:"linkParamset",interfaceName:t(ne),title:`LINK — ${i.nameOf(s())} → ${i.nameOf(a())}`,links:V,values:Se,calls:[..._e.calls??[]],lines:_e.entries.map(L=>({label:L.side==="sender"?`${o("Sender")}: ${L.param}`:L.param,from:L.from,to:L.to}))}),u(z,!1),n(!1)}async function Ve(){const _e=t($);if(!_e)return;const Se=pu(_e);if(Se.receiverToSender===void 0&&Se.senderToReceiver===void 0)return;const V=await i.paramsets.putLink(t(ne),Ee(),Se);u(le,V,!0);const L=[];if(Se.receiverToSender!==void 0){const Pe=await i.paramsets.read(t(ne),a(),s());Pe&&t(l)&&(L.push(...Ql(Se.receiverToSender,Pe,t(l)).map(Ge=>({...Ge,side:"receiver"}))),u(f,Pe,!0),u(g,{},!0))}if(Se.senderToReceiver!==void 0){const Pe=await i.paramsets.read(t(ne),s(),a());Pe&&t(p)&&(L.push(...Ql(Se.senderToReceiver,Pe,t(p)).map(Ge=>({...Ge,side:"sender"}))),u(_,Pe,!0),u(k,{},!0))}u(fe,L,!0),V.length>0&&V.every(Pe=>Pe.ok)&&!t(fe).some(Pe=>Pe.differs)&&u(z,!1)}var ze=Qw(),nt=Ne(ze);En(nt,{get title(){return t(Ae)},width:"960px",height:"min(640px, calc(100vh - 32px))",minWidth:560,minHeight:320,testId:"link-paramset-dialog",get open(){return n()},set open(Se){n(Se)},buttons:Se=>{var V=Gw(),L=Ne(V),Pe=m(L,!0),Ge=d(L,2),qe=m(Ge,!0);S((we,Ce)=>{h(Pe,we),Ge.disabled=!t(l),h(qe,Ce)},[()=>o("Close"),()=>o("Preview")]),re("click",L,()=>n(!1)),re("click",Ge,Ie),v(Se,V)},children:(Se,V)=>{var L=St(),Pe=Ne(L);{var Ge=Ce=>{var Oe=Uw(),Be=m(Oe,!0);S(pe=>h(Be,pe),[()=>o("Loading Homematic Manager...")]),v(Ce,Oe)},qe=Ce=>{var Oe=Bw(),Be=m(Oe,!0);S(pe=>h(Be,pe),[()=>o("No data")]),v(Ce,Oe)},we=Ce=>{var Oe=Xw(),Be=Ne(Oe),pe=A(Be),De=A(pe),Ue=m(De,!0),Fe=d(De,2),Ye=d(pe,2),tt=d(A(Ye),2),ht=d(Ye,2),ct=m(ht,!0),ke=d(Be,2);{var Le=et=>{var rt=Hw(),je=A(rt);{let vt=c(()=>o("Please choose one or more links")),At=c(()=>o("Please choose one or more links")),zt=c(()=>o("Filter")),hn=c(()=>o("Check all")),Ht=c(()=>o("Uncheck all"));bi(je,{get options(){return t(ae)},get label(){return t(vt)},get placeholder(){return t(At)},get filterLabel(){return t(zt)},get checkAllLabel(){return t(hn)},get uncheckAllLabel(){return t(Ht)},summary:Mt=>o("{count} links",{},Mt.length),testId:"link-targets",get selected(){return t(M)},set selected(Mt){u(M,Mt,!0)}})}v(et,rt)};W(ke,et=>{t(ae).length>0&&et(Le)})}var $e=d(ke,2);{var at=et=>{var rt=zw(),je=A(rt),vt=A(je),At=m(vt,!0),zt=d(vt),hn=d(je,2);{var Ht=Mt=>{var kn=Vw();Xe(kn,21,()=>t(be),An=>An.name,(An,dn)=>{{let _n=c(()=>I(t(dn),t(_),t(k))),or=c(()=>i.meta.parameterLabel(t(dn).name,t(xe))),Gn=c(()=>i.meta.parameterHelp(t(dn).name,t(xe))),cn=c(()=>Object.prototype.hasOwnProperty.call(t(k),t(dn).name));Da(An,{get field(){return t(dn)},get value(){return t(_n)},get label(){return t(or)},get help(){return t(Gn)},get changed(){return t(cn)},valueLabel:jt=>i.meta.valueLabel(t(dn).name,jt,t(xe)),presetLabel:jt=>i.meta.uiLabel(jt),onchange:jt=>u(k,{...t(k),[t(dn).name]:jt},!0)})}}),v(Mt,kn)};W(hn,Mt=>{t(ee)&&Mt(Ht)})}S((Mt,kn)=>{T(vt,"aria-expanded",t(ee)),h(At,t(ee)?"−":"+"),h(zt,` ${Mt??""}: ${kn??""} (${s()??""})`)},[()=>o("Sender"),()=>i.nameOf(s())]),re("click",vt,()=>u(D,!t(ee))),v(et,rt)};W($e,et=>{s()!==a()&&et(at)})}var lt=d($e,2),Je=A(lt),Pt=m(Je),Tt=d(Je,2),Lt=A(Tt),Qt=A(Lt),pn=A(Qt),wn=m(pn,!0),tn=d(pn,2);Xe(tn,21,()=>t(E),et=>et.id,(et,rt)=>{var je=yu(),vt=m(je,!0),At={};S((zt,hn)=>{h(vt,zt),At!==(At=hn)&&(je.value=(je.__value=At)??"")},[()=>gu(t(rt),i.i18n.language),()=>String(t(rt).id)]),v(et,je)});var bn;Xt(tn);var Pn=d(Qt,2),$n=A(Pn),Xn=d($n,2),Zt=m(Xn,!0),Ft=d(Lt,2);{var Jt=et=>{var rt=jw(),je=m(rt,!0);S(vt=>h(je,vt),[()=>j0(t(Te),i.i18n.language)]),v(et,rt)};W(Ft,et=>{t(Te)&&!t(x)&&et(Jt)})}var Qn=d(Ft,2),Mn=A(Qn),Or=A(Mn),zr=m(Or,!0),Zn=d(Or,2),jn=A(Zn),Lr=m(jn,!0);jn.value=jn.__value="";var cs=d(jn);Xe(cs,17,()=>t(P),et=>et.name,(et,rt)=>{var je=yu(),vt=m(je),At={};S(()=>{h(vt,`${t(rt).name??""}${t(rt).profileName===void 0?"":` — ${t(rt).profileName}`}`),At!==(At=t(rt).name)&&(je.value=(je.__value=At)??"")}),v(et,je)});var ar;Xt(Zn);var Ar=d(Mn,2),jr=A(Ar),cr=m(jr,!0),Tr=d(jr,2),ur=d(Ar,2),ns=m(ur,!0),Fr=d(ur,2),pr=m(Fr,!0),gr=d(Tt,2);{var ue=et=>{var rt=Ww(),je=d(A(rt),1,!0);S(vt=>h(je,vt),[()=>o("Marked: the parameters the easy mode of this profile shows")]),v(et,rt)},He=et=>{var rt=Kw(),je=m(rt,!0);S(vt=>h(je,vt),[()=>o("The CCU's form for this profile is not known here: every parameter is shown, the ones the profile fixes greyed out.")]),v(et,rt)};W(gr,et=>{t(x)&&t(Q).size>0?et(ue):!t(x)&&!t(G)&&t(Te)&&t(Te).id!==vs&&et(He,1)})}var Vt=d(gr,2),yn=A(Vt);{var ir=et=>{{let rt=c(()=>t(b)?.subsets);tm(et,{get form(){return t(G)},testId:"link-easy-form",get fields(){return t(q)},get values(){return t(Y)},changed:je=>Object.prototype.hasOwnProperty.call(t(g),je),get description(){return t(l)},get channelType(){return t(ie)},get subsets(){return t(rt)},get presets(){return i.meta.presets},get timeSelectors(){return i.meta.timeSelectors},onchange:je=>u(g,{...t(g),...je},!0)})}},it=et=>{var rt=St(),je=Ne(rt);Xe(je,17,()=>t(ce),vt=>vt.name,(vt,At)=>{var zt=Yw();let hn;var Ht=A(zt);{let Mt=c(()=>I(t(At),t(f),t(g))),kn=c(()=>i.meta.parameterLabel(t(At).name,t(ie))),An=c(()=>i.meta.parameterHelp(t(At).name,t(ie))),dn=c(()=>Object.prototype.hasOwnProperty.call(t(g),t(At).name));Da(Ht,{get field(){return t(At)},get value(){return t(Mt)},get label(){return t(kn)},get help(){return t(An)},get changed(){return t(dn)},get disabled(){return t(At).fixedByProfile},valueLabel:_n=>i.meta.valueLabel(t(At).name,_n,t(ie)),presetLabel:_n=>i.meta.uiLabel(_n),onchange:_n=>u(g,{...t(g),[t(At).name]:_n},!0)})}S(Mt=>hn=_t(zt,1,"hmm-link-easy-mark hmm-param-table-span svelte-1xlqelt",null,hn,{"hmm-link-easy-marked":Mt}),[()=>t(Q).has(t(At).name)]),v(vt,zt)}),v(et,rt)};W(yn,et=>{t(G)&&t(l)?et(ir):et(it,-1)})}var bt=d(lt,2);{var It=et=>{var rt=$w();Xe(rt,21,()=>t(le),je=>`${je.address}-${je.peer??""}`,(je,vt)=>{var At=qw();let zt;var hn=A(At),Ht=m(hn,!0),Mt=d(hn);S(()=>{zt=_t(At,1,"svelte-1xlqelt",null,zt,{"hmm-link-failed":!t(vt).ok}),h(Ht,t(vt).address),h(Mt,` ${t(vt).ok?"✔":`✕ ${t(vt).faultString??""}`}`)}),v(je,At)}),v(et,rt)};W(bt,et=>{t(le).length>0&&et(It)})}S((et,rt,je,vt,At,zt,hn,Ht,Mt,kn,An,dn,_n)=>{h(Ue,et),h(ct,rt),h(Pt,`${je??""}: ${vt??""} (${a()??""})`),h(wn,At),bn!==(bn=zt)&&(tn.value=(tn.__value=bn)??"",Bn(tn,bn)),h(Zt,hn),h(zr,Ht),Zn.disabled=t(P).length===0,h(Lr,Mt),ar!==(ar=t(j))&&(Zn.value=(Zn.__value=ar)??"",Bn(Zn,ar)),h(cr,kn),ur.disabled=An,h(ns,dn),Fr.disabled=t(j)==="",h(pr,_n)},[()=>o("Name"),()=>o("Apply"),()=>o("Receiver"),()=>i.nameOf(a()),()=>o("Profile"),()=>String(t(w)),()=>o("Expert view"),()=>o("Template"),()=>t(P).length===0?o("No template for this pair of channel types"):o("Apply template"),()=>o("Template name"),()=>t(se).trim()===""||t(me)==="",()=>o("Save as template"),()=>o("Delete template")]),xn(Fe,()=>t(N),et=>u(N,et)),xn(tt,()=>t(R),et=>u(R,et)),re("click",ht,()=>{F()}),re("change",tn,et=>O(Number(et.currentTarget.value))),vr($n,()=>t(x),et=>u(x,et)),re("change",Zn,et=>{u(j,et.currentTarget.value,!0),te(t(j))}),xn(Tr,()=>t(se),et=>u(se,et)),re("click",ur,()=>{ge()}),re("click",Fr,()=>{const et=t(j);u(j,""),i.links.removeTemplate(et,t(me))}),v(Ce,Oe)};W(Pe,Ce=>{t(de)&&!t(l)?Ce(Ge):t(l)?Ce(we,-1):Ce(qe,1)})}v(Se,L)},$$slots:{buttons:!0,default:!0}});var Ze=d(nt,2);Zl(Ze,{get preview(){return t($)},paramset:"LINK",get results(){return t(le)},get readBack(){return t(fe)},get writing(){return i.paramsets.writing},onstage:Me,onconfirm:()=>{Ve()},get open(){return t(z)},set open(_e){u(z,_e,!0)}}),v(r,ze),ft()}Et(["click","change"]);var Zw=y('<span class="hmm-blind-warn svelte-6iyslx"> </span>'),Jw=y('<div class="hmm-blind-row svelte-6iyslx"><div class="hmm-blind-label svelte-6iyslx"><span> </span> <span class="hmm-blind-id svelte-6iyslx"> </span></div> <div class="hmm-blind-control svelte-6iyslx"><input class="hmm-input hmm-blind-number svelte-6iyslx" type="number" min="0" step="0.01"/> <span class="hmm-blind-unit svelte-6iyslx">s</span> <span class="hmm-blind-raw svelte-6iyslx"> </span></div> <div class="hmm-blind-meta svelte-6iyslx"><span> </span> <!></div></div>'),ek=y('<div class="hmm-blind-row svelte-6iyslx"><div class="hmm-blind-label svelte-6iyslx"><span> </span> <span class="hmm-blind-id svelte-6iyslx"> </span></div> <div class="hmm-blind-control svelte-6iyslx"><input class="hmm-input hmm-blind-number svelte-6iyslx" type="number" step="0.1"/> <span class="hmm-blind-unit svelte-6iyslx">s</span></div> <div class="hmm-blind-meta svelte-6iyslx"><span> </span></div></div>'),tk=y('<input type="checkbox"/>'),nk=y('<input class="hmm-input hmm-blind-number svelte-6iyslx" type="number" step="1"/>'),rk=y('<div class="hmm-blind-row svelte-6iyslx"><div class="hmm-blind-label svelte-6iyslx"><span> </span> <span class="hmm-blind-id svelte-6iyslx"> </span></div> <div class="hmm-blind-control svelte-6iyslx"><!></div> <div class="hmm-blind-meta svelte-6iyslx"></div></div>'),sk=y('<div class="hmm-editor svelte-6iyslx" data-testid="editor-blind-calibration"><h3 class="svelte-6iyslx"> </h3> <p class="hmm-editor-hint svelte-6iyslx"> </p> <!> <!> <!></div>');function ak(r,e){ut(e,!0);const n=Ot(),s=n.i18n.t;let a=C(We({}));function i(D){return n.meta.parameterLabel(D,e.channelType)}function o(D,N){if(N==="")return;const R=p0(D,Number(N));R&&(u(a,R.exact||R.seconds===Number(N)?Object.fromEntries(Object.entries(t(a)).filter(([M])=>M!==D.id)):{...t(a),[D.id]:R.seconds},!0),e.onchange(R.values))}function l(D,N){N===""||!Number.isFinite(Number(N))||f(D.param,Number(N))}function f(D,N){e.onchange({[D]:N})}var p=sk(),_=A(p),g=m(_,!0),k=d(_,2),E=m(k,!0),b=d(k,2);Xe(b,17,()=>e.spec.runningTimes,D=>D.id,(D,N)=>{const R=c(()=>m0(t(N),e.values));var M=Jw(),z=A(M),$=A(z),le=m($,!0),fe=d($,2),de=m(fe,!0),B=d(z,2),oe=A(B),K=d(oe,4),X=m(K,!0),se=d(B,2),j=A(se),ne=m(j,!0),ye=d(j,2);{var xe=ie=>{var Ae=Zw(),Te=m(Ae,!0);S(me=>{T(Ae,"data-testid",`blind-${t(N).id}-inexact`),h(Te,me)},[()=>s("The device can only do {seconds}",{seconds:Si(t(a)[t(N).id]??0)})]),v(ie,Ae)};W(ye,ie=>{t(a)[t(N).id]!==void 0&&ie(xe)})}S((ie,Ae,Te,me)=>{T(M,"data-testid",`blind-${t(N).id}`),h(le,ie),h(de,t(N).id),oe.disabled=!t(N).writable,T(oe,"aria-label",Ae),T(oe,"data-testid",`blind-${t(N).id}-seconds`),ln(oe,t(R)??""),T(K,"data-testid",`blind-${t(N).id}-raw`),h(X,Te),h(ne,me)},[()=>i(t(N).id),()=>i(t(N).id),()=>v0(t(N),e.values),()=>t(R)===void 0?"—":Si(t(R))]),re("input",oe,ie=>o(t(N),ie.currentTarget.value)),v(D,M)});var w=d(b,2);Xe(w,17,()=>e.spec.delays,D=>D.param,(D,N)=>{var R=ek(),M=A(R),z=A(M),$=m(z,!0),le=d(z,2),fe=m(le,!0),de=d(M,2),B=A(de),oe=d(de,2),K=A(oe),X=m(K);S((se,j,ne,ye,xe,ie)=>{T(R,"data-testid",`blind-${t(N).param}`),h($,se),h(fe,t(N).param),T(B,"min",j),T(B,"max",ne),T(B,"aria-label",ye),T(B,"data-testid",`blind-${t(N).param}-value`),ln(B,e.values[t(N).param]??""),h(X,`${xe??""} … ${ie??""}`)},[()=>i(t(N).param),()=>nr(t(N).description,"MIN"),()=>nr(t(N).description,"MAX"),()=>i(t(N).param),()=>nr(t(N).description,"MIN")??"−∞",()=>nr(t(N).description,"MAX")??"∞"]),re("input",B,se=>l(t(N),se.currentTarget.value)),v(D,R)});var x=d(w,2);Xe(x,17,()=>e.spec.extras,D=>D.param,(D,N)=>{var R=rk(),M=A(R),z=A(M),$=m(z,!0),le=d(z,2),fe=m(le,!0),de=d(M,2),B=A(de);{var oe=X=>{var se=tk();S(j=>{T(se,"aria-label",j),T(se,"data-testid",`blind-${t(N).param}-value`),Pr(se,e.values[t(N).param]===!0)},[()=>i(t(N).param)]),re("change",se,j=>f(t(N).param,j.currentTarget.checked)),v(X,se)},K=X=>{var se=nk();S((j,ne,ye)=>{T(se,"min",j),T(se,"max",ne),T(se,"aria-label",ye),T(se,"data-testid",`blind-${t(N).param}-value`),ln(se,e.values[t(N).param]??"")},[()=>nr(t(N).description,"MIN"),()=>nr(t(N).description,"MAX"),()=>i(t(N).param)]),re("input",se,j=>l(t(N),j.currentTarget.value)),v(X,se)};W(B,X=>{t(N).description.TYPE==="BOOL"?X(oe):X(K,-1)})}S(X=>{T(R,"data-testid",`blind-${t(N).param}`),h($,X),h(fe,t(N).param)},[()=>i(t(N).param)]),v(D,R)}),S((D,N)=>{h(g,D),h(E,N)},[()=>s("Blind calibration"),()=>s("The running times of a reference run, in plain seconds next to the value the device stores.")]),v(r,p),ft()}Et(["input","change"]);var ik=y("<option> </option>"),Su=y('<span class="hmm-duration-broken svelte-1jozrc9"> </span>'),ok=y("<span> </span>"),lk=y('<div class="hmm-duration svelte-1jozrc9"><div class="hmm-duration-label svelte-1jozrc9"><span> </span> <span class="hmm-duration-id svelte-1jozrc9"> </span></div> <div class="hmm-duration-control svelte-1jozrc9"><input class="hmm-input hmm-duration-seconds svelte-1jozrc9" type="number" min="0" step="0.1"/> <span class="hmm-duration-unit svelte-1jozrc9">s</span> <select class="hmm-select"></select> <input class="hmm-input hmm-duration-count svelte-1jozrc9" type="number" min="0" step="1"/> <label class="hmm-duration-notused svelte-1jozrc9"><input type="checkbox"/> <span> </span></label></div> <div class="hmm-duration-meta svelte-1jozrc9"><!> <!></div></div>'),dk=y('<div class="hmm-editor svelte-1jozrc9" data-testid="editor-duration-pairs"><h3 class="svelte-1jozrc9"> </h3> <p class="hmm-editor-hint svelte-1jozrc9"> </p> <!></div>');function ck(r,e){ut(e,!0);const n=Ot(),s=n.i18n.t;let a=C(We({}));function i(R){return n.meta.parameterLabel(R.pair.unitParam,e.channelType)}function o(R){return qh(R,e.values)}function l(R,M){const z=$h(R,M);z&&(u(a,z.exact?Object.fromEntries(Object.entries(t(a)).filter(([$])=>$!==R.pair.name)):{...t(a),[R.pair.name]:z.seconds},!0),e.onchange(z.values))}function f(R,M){const z=Number(M);M===""||!Number.isFinite(z)||l(R,z)}function p(R,M){const z=Number(M),$=o(R),le=R.pair.units[z];if(le===void 0||$===void 0)return;const fe=Math.min(R.pair.maxCount,Math.max(0,Math.round($/le.seconds)));g({[R.pair.unitParam]:z,[R.pair.countParam]:fe})}function _(R,M){const z=Number(M);M===""||!Number.isInteger(z)||g({[R.pair.countParam]:z})}function g(R){e.onchange(R)}function k(R){const M=e.values[R.pair.unitParam];return typeof M=="number"?M:R.pair.units.findIndex(z=>z.name===M)}var E=dk(),b=A(E),w=m(b,!0),x=d(b,2),D=m(x,!0),N=d(x,2);Xe(N,17,()=>e.spec.pairs,R=>R.pair.name,(R,M)=>{const z=c(()=>o(t(M))),$=c(()=>d0(t(M),e.values));var le=lk(),fe=A(le),de=A(fe),B=m(de,!0),oe=d(de,2),K=m(oe),X=d(fe,2),se=A(X),j=d(se,4);Xe(j,23,()=>t(M).pair.units,G=>G.name,(G,Q,q)=>{var Y=ik(),ae=m(Y,!0),J={};S(ve=>{h(ae,t(Q).name),J!==(J=ve)&&(Y.value=(Y.__value=J)??"")},[()=>String(t(q))]),v(G,Y)});var ne;Xt(j);var ye=d(j,2),xe=d(ye,2),ie=A(xe),Ae=d(ie,2),Te=m(Ae,!0),me=d(X,2),P=A(me);{var ce=G=>{var Q=Su(),q=m(Q,!0);S(Y=>h(q,Y),[()=>s("The device holds a value this pair cannot express")]),v(G,Q)},be=G=>{var Q=ok(),q=m(Q,!0);S(Y=>h(q,Y),[()=>Si(t(z))]),v(G,Q)};W(P,G=>{t(z)===void 0?G(ce):G(be,-1)})}var ee=d(P,2);{var he=G=>{var Q=Su(),q=m(Q,!0);S(Y=>{T(Q,"data-testid",`duration-${t(M).pair.name}-inexact`),h(q,Y)},[()=>s("The device can only do {seconds}",{seconds:Si(t(a)[t(M).pair.name]??0)})]),v(G,Q)};W(ee,G=>{t(a)[t(M).pair.name]!==void 0&&G(he)})}S((G,Q,q,Y,ae,J)=>{T(le,"data-testid",`duration-${t(M).pair.name}`),h(B,G),h(K,`${t(M).pair.unitParam??""} / ${t(M).pair.countParam??""}`),se.disabled=!t(M).writable||t($),T(se,"aria-label",Q),T(se,"data-testid",`duration-${t(M).pair.name}-seconds`),ln(se,t(z)??""),j.disabled=!t(M).writable,T(j,"aria-label",q),T(j,"data-testid",`duration-${t(M).pair.name}-unit`),ne!==(ne=Y)&&(j.value=(j.__value=ne)??"",Bn(j,ne)),T(ye,"max",t(M).pair.maxCount),ye.disabled=!t(M).writable,T(ye,"aria-label",ae),T(ye,"data-testid",`duration-${t(M).pair.name}-count`),ln(ye,e.values[t(M).pair.countParam]??""),ie.disabled=!t(M).writable,Pr(ie,t($)),T(ie,"data-testid",`duration-${t(M).pair.name}-not-used`),h(Te,J),T(me,"data-testid",`duration-${t(M).pair.name}-result`)},[()=>i(t(M)),()=>`${i(t(M))} ${s("seconds")}`,()=>`${i(t(M))} ${s("unit")}`,()=>String(k(t(M))),()=>`${i(t(M))} ${s("count")}`,()=>s("Not used / for ever")]),re("input",se,G=>f(t(M),G.currentTarget.value)),re("change",j,G=>p(t(M),G.currentTarget.value)),re("input",ye,G=>_(t(M),G.currentTarget.value)),re("change",ie,G=>l(t(M),G.currentTarget.checked?t(M).notUsedSeconds:0)),v(R,le)}),S((R,M)=>{h(w,R),h(D,M)},[()=>s("Durations"),()=>s("A duration is stored as a unit and a count; both are shown next to the seconds.")]),v(r,E),ft()}Et(["input","change"]);var wu=y("<option> </option>"),uk=y("<span> </span>"),fk=y('<div class="hmm-enum-row svelte-1d7xvi9"><div class="hmm-enum-label svelte-1d7xvi9"><span> </span> <span class="hmm-enum-id svelte-1d7xvi9"> </span></div> <div class="hmm-enum-control svelte-1d7xvi9"><select class="hmm-select"><!><!></select> <span class="hmm-enum-raw svelte-1d7xvi9"> </span></div> <div class="hmm-enum-meta svelte-1d7xvi9"><!></div></div>'),hk=y('<div class="hmm-editor svelte-1d7xvi9" data-testid="editor-enum-options"><h3 class="svelte-1d7xvi9"> </h3> <p class="hmm-editor-hint svelte-1d7xvi9"> </p> <!></div>');function mk(r,e){ut(e,!0);const n=Ot(),s=n.i18n.t;function a(b){return n.meta.parameterLabel(b,e.channelType)}function i(b){const w=e.values[b.param];return typeof w=="number"?w:b.options.find(x=>x.raw===w)?.value??-1}function o(b){const w=i(b);return w>=0&&!b.options.some(x=>x.value===w)?w:void 0}function l(b,w){return b.description.VALUE_LIST?.[w]??String(w)}var f=hk(),p=A(f),_=m(p,!0),g=d(p,2),k=m(g,!0),E=d(g,2);Xe(E,17,()=>e.spec.fields,b=>b.param,(b,w)=>{const x=c(()=>i(t(w))),D=c(()=>o(t(w)));var N=fk(),R=A(N),M=A(R),z=m(M,!0),$=d(M,2),le=m($,!0),fe=d(R,2),de=A(fe),B=A(de);{var oe=ie=>{var Ae=wu(),Te=m(Ae),me={};S((P,ce)=>{h(Te,`${P??""} (${t(D)??""})`),me!==(me=ce)&&(Ae.value=(Ae.__value=me)??"")},[()=>l(t(w),t(D)),()=>String(t(D))]),v(ie,Ae)};W(B,ie=>{t(D)!==void 0&&ie(oe)})}var K=d(B);Xe(K,17,()=>t(w).options,ie=>ie.value,(ie,Ae)=>{var Te=wu(),me=m(Te,!0),P={};S(ce=>{h(me,t(Ae).label),P!==(P=ce)&&(Te.value=(Te.__value=P)??"")},[()=>String(t(Ae).value)]),v(ie,Te)});var X;Xt(de);var se=d(de,2),j=m(se,!0),ne=d(fe,2),ye=A(ne);{var xe=ie=>{var Ae=uk(),Te=m(Ae,!0);S(()=>{T(Ae,"data-testid",`enum-${t(w).param}-preset`),h(Te,t(w).presetId)}),v(ie,Ae)};W(ye,ie=>{t(w).presetId!==void 0&&ie(xe)})}S((ie,Ae,Te,me)=>{T(N,"data-testid",`enum-${t(w).param}`),h(z,ie),h(le,t(w).param),de.disabled=!t(w).writable,T(de,"aria-label",Ae),T(de,"data-testid",`enum-${t(w).param}-select`),X!==(X=Te)&&(de.value=(de.__value=X)??"",Bn(de,X)),T(se,"data-testid",`enum-${t(w).param}-raw`),h(j,me)},[()=>a(t(w).param),()=>a(t(w).param),()=>String(t(x)),()=>t(x)<0?"—":`${l(t(w),t(x))} (${t(x)})`]),re("change",de,ie=>e.onchange({[t(w).param]:Number(ie.currentTarget.value)})),v(b,N)}),S((b,w)=>{h(_,b),h(k,w)},[()=>s("Named options"),()=>s("These values have names in the CCU string table that the description does not carry.")]),v(r,f),ft()}Et(["change"]);var vk=y('<th class="svelte-hdzef5"> </th>'),pk=y('<label class="svelte-hdzef5"><input type="checkbox"/> <span> </span></label>'),gk=y('<div class="hmm-switch-days svelte-hdzef5"><!> <span class="hmm-switch-raw svelte-hdzef5"> </span></div>'),bk=y('<input class="hmm-input hmm-switch-time svelte-hdzef5" type="text" inputmode="numeric"/>'),_k=y('<input class="hmm-input hmm-switch-number svelte-hdzef5" type="number" min="0" step="0.1"/> <span class="hmm-switch-raw svelte-hdzef5"> </span>',1),Ek=y("<option> </option>"),yk=y('<select class="hmm-select"></select>'),Sk=y('<span class="hmm-switch-raw svelte-hdzef5"> </span>'),wk=y('<input class="hmm-input hmm-switch-number svelte-hdzef5" type="number"/> <!>',1),kk=y('<td class="svelte-hdzef5"><!></td>'),Ak=y('<tr><td class="hmm-switch-index svelte-hdzef5"> </td><!></tr>'),Tk=y('<div class="hmm-editor svelte-hdzef5" data-testid="editor-switch-week-profile"><h3 class="svelte-hdzef5"> </h3> <p class="hmm-editor-hint svelte-hdzef5"> </p> <label class="hmm-switch-option svelte-hdzef5"><input type="checkbox" data-testid="switch-show-unused"/> <span> </span></label> <div class="hmm-switch-scroll svelte-hdzef5"><table class="hmm-switch-table svelte-hdzef5"><thead><tr><th class="svelte-hdzef5"> </th><!></tr></thead><tbody></tbody></table></div></div>');function Rk(r,e){ut(e,!0);const n=Ot(),s=n.i18n.t;let a=C(!1);const i=c(()=>e.spec.slots.filter(se=>t(a)||!R0(e.values,se)));function o(se){return se.id==="TIME"?s("Time"):se.id==="WEEKDAY"?s("Weekdays"):n.meta.parameterLabel(se.id,e.channelType)}function l(se,j){return e.values[ws(se,j)]}function f(se,j,ne){e.onchange({[ws(se,j)]:ne})}function p(se,j){const ne=T0(se,j);ne&&e.onchange(ne)}function _(se,j){const ne=e.spec.durations[`${se}:${j.id}`];return ne===void 0?void 0:Id(e.values,ne)?.seconds}function g(se,j,ne){const ye=e.spec.durations[`${se}:${j.id}`],xe=Number(ne);if(ye===void 0||ne===""||!Number.isFinite(xe))return;const ie=Nd(xe,ye);ie&&e.onchange(ie)}function k(se,j,ne){const ye=Number(ne);ne===""||!Number.isFinite(ye)||f(se,j,ye)}var E=Tk(),b=A(E),w=m(b,!0),x=d(b,2),D=m(x,!0),N=d(x,2),R=A(N),M=d(R,2),z=m(M,!0),$=d(N,2),le=A($),fe=A(le),de=A(fe),B=A(de),oe=m(B,!0),K=d(B);Xe(K,17,()=>e.spec.columns,se=>se.id,(se,j)=>{var ne=vk(),ye=m(ne,!0);S(xe=>h(ye,xe),[()=>o(t(j))]),v(se,ne)});var X=d(fe);Xe(X,20,()=>t(i),se=>se,(se,j)=>{var ne=Ak(),ye=A(ne),xe=m(ye,!0),ie=d(ye);Xe(ie,17,()=>e.spec.columns,Ae=>Ae.id,(Ae,Te)=>{var me=kk(),P=A(me);{var ce=Q=>{var q=gk(),Y=A(q);Xe(Y,18,()=>S0,ve=>ve,(ve,ge,te)=>{var O=pk(),U=A(O),I=d(U,2),F=m(I,!0);S((Ee,Ie,Me,Ve)=>{T(O,"title",Ee),U.disabled=!e.spec.writable,T(U,"aria-label",Ie),T(U,"data-testid",`switch-${j}-day-${t(te)}`),Pr(U,Me),h(F,Ve)},[()=>s(ge),()=>s(ge),()=>w0(l(j,"WEEKDAY"),t(te)),()=>s(ge).slice(0,2)]),re("change",U,Ee=>f(j,"WEEKDAY",k0(l(j,"WEEKDAY"),t(te),Ee.currentTarget.checked))),v(ve,O)});var ae=d(Y,2),J=m(ae,!0);S(ve=>{T(ae,"data-testid",`switch-${j}-mask`),h(J,ve)},[()=>String(l(j,"WEEKDAY")??"—")]),v(Q,q)},be=Q=>{var q=bk();S((Y,ae)=>{q.disabled=!e.spec.writable,T(q,"aria-label",Y),T(q,"data-testid",`switch-${j}-time`),ln(q,ae)},[()=>`${s("Time")} ${j}`,()=>A0(e.values,j)]),re("change",q,Y=>p(j,Y.currentTarget.value)),v(Q,q)},ee=Q=>{var q=_k(),Y=Ne(q),ae=d(Y,2),J=m(ae,!0);S((ve,ge,te)=>{Y.disabled=!e.spec.writable,T(Y,"aria-label",ve),T(Y,"data-testid",`switch-${j}-${t(Te).id}`),ln(Y,ge),T(ae,"data-testid",`switch-${j}-${t(Te).id}-result`),h(J,te)},[()=>`${o(t(Te))} ${j}`,()=>_(j,t(Te))??"",()=>Si(_(j,t(Te))??Number.NaN)]),re("input",Y,ve=>g(j,t(Te),ve.currentTarget.value)),v(Q,q)},he=Q=>{var q=yk();Xe(q,22,()=>Us(t(Te).description)??[],ae=>ae,(ae,J,ve)=>{var ge=Ek(),te=m(ge,!0),O={};S((U,I)=>{h(te,U),O!==(O=I)&&(ge.value=(ge.__value=O)??"")},[()=>n.meta.valueLabel(t(Te).id,J,e.channelType),()=>String(t(ve))]),v(ae,ge)});var Y;Xt(q),S((ae,J)=>{q.disabled=!e.spec.writable,T(q,"aria-label",ae),T(q,"data-testid",`switch-${j}-${t(Te).id}`),Y!==(Y=J)&&(q.value=(q.__value=Y)??"",Bn(q,Y))},[()=>`${o(t(Te))} ${j}`,()=>String(l(j,t(Te).id)??"")]),re("change",q,ae=>f(j,t(Te).id,Number(ae.currentTarget.value))),v(Q,q)},G=Q=>{var q=wk(),Y=Ne(q),ae=d(Y,2);{var J=ge=>{var te=Sk(),O=m(te,!0);S(U=>h(O,U),[()=>ho(t(Te).description)]),v(ge,te)},ve=c(()=>ho(t(Te).description)!=="");W(ae,ge=>{t(ve)&&ge(J)})}S((ge,te,O,U)=>{T(Y,"min",ge),T(Y,"max",te),T(Y,"step",t(Te).description.TYPE==="FLOAT"?.01:1),Y.disabled=!e.spec.writable,T(Y,"aria-label",O),T(Y,"data-testid",`switch-${j}-${t(Te).id}`),ln(Y,U)},[()=>nr(t(Te).description,"MIN"),()=>nr(t(Te).description,"MAX"),()=>`${o(t(Te))} ${j}`,()=>l(j,t(Te).id)??""]),re("input",Y,ge=>k(j,t(Te).id,ge.currentTarget.value)),v(Q,q)};W(P,Q=>{t(Te).kind==="weekday"?Q(ce):t(Te).kind==="time"?Q(be,1):t(Te).kind==="duration"?Q(ee,2):t(Te).kind==="enum"?Q(he,3):Q(G,-1)})}v(Ae,me)}),S(()=>{T(ne,"data-testid",`switch-slot-${j}`),h(xe,j)}),v(se,ne)}),S((se,j,ne,ye)=>{h(w,se),h(D,j),h(z,ne),h(oe,ye)},[()=>s("Switching programme"),()=>s("No weekday chosen - the slot does nothing"),()=>s("Unused"),()=>s("Slot")]),vr(R,()=>t(a),se=>u(a,se)),v(r,E),ft()}Et(["change","input"]);var ku=y('<button type="button"> </button>'),Au=y("<option> </option>"),xk=y('<div class="hmm-week-bar svelte-1du5x7x"><!> <span class="hmm-week-spacer svelte-1du5x7x"></span> <label class="hmm-week-copy svelte-1du5x7x"><span> </span> <select class="hmm-select" data-testid="week-copy-profile-target"><option>—</option><!></select></label> <button type="button" class="hmm-button" data-testid="week-copy-profile"> </button></div>'),Dk=y('<span class="hmm-week-unit svelte-1du5x7x"> </span>'),Ik=y('<tr><td class="hmm-week-index svelte-1du5x7x"> </td><td class="hmm-week-from svelte-1du5x7x"> </td><td class="svelte-1du5x7x"><input class="hmm-input hmm-week-time svelte-1du5x7x" type="text" inputmode="numeric"/></td><td class="svelte-1du5x7x"><input class="hmm-input hmm-week-value svelte-1du5x7x" type="number" step="0.5"/> <!></td></tr>'),Nk=y("<li> </li>"),Ck=y('<ul class="hmm-week-problems svelte-1du5x7x" data-testid="week-problems"></ul>'),Pk=y('<div class="hmm-editor svelte-1du5x7x" data-testid="editor-week-profile"><h3 class="svelte-1du5x7x"> </h3> <p class="hmm-editor-hint svelte-1du5x7x"> </p> <!> <div class="hmm-week-bar svelte-1du5x7x"><!> <span class="hmm-week-spacer svelte-1du5x7x"></span> <label class="hmm-week-copy svelte-1du5x7x"><span> </span> <select class="hmm-select" data-testid="week-copy-day-target"><option> </option><!></select></label> <button type="button" class="hmm-button" data-testid="week-copy-day"> </button></div> <table class="hmm-week-table svelte-1du5x7x"><thead><tr><th class="svelte-1du5x7x"> </th><th class="svelte-1du5x7x"> </th><th class="svelte-1du5x7x"> </th><th class="svelte-1du5x7x"> </th></tr></thead><tbody></tbody></table> <!></div>');function Mk(r,e){ut(e,!0);const n=Ot(),s=n.i18n.t;let a=C(0),i=C(We(Ji[0]??"MONDAY")),o=C("*"),l=C("");const f=c(()=>e.spec.profiles[t(a)]??e.spec.profiles[0]),p=c(()=>ho(e.spec.valueDescription)),_=c(()=>N0(e.spec,e.values)),g=c(()=>fa(nr(e.spec.valueDescription,"MIN"),e.spec.valueDescription)),k=c(()=>fa(nr(e.spec.valueDescription,"MAX"),e.spec.valueDescription)),E=c(()=>n.meta.parameterLabel(e.spec.valueField,e.channelType)),b=c(()=>t(_).filter(I=>I.profile===(t(f)?.id??"")));function w(I){const F=e.spec.days.indexOf(I),Ee=D0[F];return Ee===void 0?I:s(Ee)}function x(I){return I===""?s("Week programme"):`${s("Profile")} ${I.slice(1)}`}function D(I){return!t(f)||I===1?ri(0):ri(Xl(e.spec,e.values,t(f),t(i),I-1).endTime??0)}function N(I,F){const Ee=M0(F);Ee===void 0||!t(f)||e.onchange({[Qr(t(f).endTimePrefix,t(i),I)]:Ee})}function R(I,F){const Ee=Number(F);F===""||!Number.isFinite(Ee)||!t(f)||e.onchange({[Qr(t(f).valuePrefix,t(i),I)]:Ee})}function M(){if(!t(f))return;const I=t(o)==="*"?e.spec.days:[t(o)];e.onchange(C0(e.spec,e.values,t(f),t(i),I))}function z(){const I=e.spec.profiles.find(F=>F.id===t(l));!t(f)||!I||e.onchange(P0(e.spec,e.values,t(f),[I]))}function $(I){const F={day:w(I.day),slot:String(I.slot),end:ri(e.spec.dayEnd)};switch(I.code){case"not-increasing":return s("{day}: end time {slot} is not after the one before it",F);case"after-day-end":return s("{day}: end time {slot} comes after the day has ended",F);case"day-not-closed":return s("{day}: the last end time must be {end}",F)}}var le=Pk(),fe=A(le),de=m(fe,!0),B=d(fe,2),oe=m(B,!0),K=d(B,2);{var X=I=>{var F=xk(),Ee=A(F);Xe(Ee,19,()=>e.spec.profiles,V=>V.id,(V,L,Pe)=>{var Ge=ku();let qe;var we=m(Ge,!0);S(Ce=>{qe=_t(Ge,1,"hmm-button svelte-1du5x7x",null,qe,{"hmm-week-active":t(Pe)===t(a)}),T(Ge,"data-testid",`week-profile-${t(L).id}`),h(we,Ce)},[()=>x(t(L).id)]),re("click",Ge,()=>u(a,t(Pe),!0)),v(V,Ge)});var Ie=d(Ee,4),Me=A(Ie),Ve=m(Me,!0),ze=d(Me,2),nt=A(ze);nt.value=nt.__value="";var Ze=d(nt);Xe(Ze,17,()=>e.spec.profiles,V=>V.id,(V,L)=>{var Pe=St(),Ge=Ne(Pe);{var qe=we=>{var Ce=Au(),Oe=m(Ce,!0),Be={};S(pe=>{h(Oe,pe),Be!==(Be=t(L).id)&&(Ce.value=(Ce.__value=Be)??"")},[()=>x(t(L).id)]),v(we,Ce)};W(Ge,we=>{t(L).id!==t(f)?.id&&we(qe)})}v(V,Pe)}),Xt(ze);var _e=d(Ie,2),Se=m(_e,!0);S((V,L)=>{h(Ve,V),_e.disabled=!e.spec.writable||t(l)==="",h(Se,L)},[()=>s("Copy profile to"),()=>s("Copy")]),kr(ze,()=>t(l),V=>u(l,V)),re("click",_e,z),v(I,F)};W(K,I=>{e.spec.profiles.length>1&&I(X)})}var se=d(K,2),j=A(se);Xe(j,16,()=>e.spec.days,I=>I,(I,F)=>{var Ee=ku();let Ie;var Me=m(Ee,!0);S(Ve=>{Ie=_t(Ee,1,"hmm-button svelte-1du5x7x",null,Ie,{"hmm-week-active":F===t(i)}),T(Ee,"data-testid",`week-day-${F}`),h(Me,Ve)},[()=>w(F)]),re("click",Ee,()=>u(i,F,!0)),v(I,Ee)});var ne=d(j,4),ye=A(ne),xe=m(ye,!0),ie=d(ye,2),Ae=A(ie),Te=m(Ae,!0);Ae.value=Ae.__value="*";var me=d(Ae);Xe(me,16,()=>e.spec.days,I=>I,(I,F)=>{var Ee=St(),Ie=Ne(Ee);{var Me=Ve=>{var ze=Au(),nt=m(ze,!0),Ze={};S(_e=>{h(nt,_e),Ze!==(Ze=F)&&(ze.value=(ze.__value=Ze)??"")},[()=>w(F)]),v(Ve,ze)};W(Ie,Ve=>{F!==t(i)&&Ve(Me)})}v(I,Ee)}),Xt(ie);var P=d(ne,2),ce=m(P,!0),be=d(se,2),ee=A(be),he=A(ee),G=A(he),Q=m(G,!0),q=d(G),Y=m(q,!0),ae=d(q),J=m(ae,!0),ve=d(ae),ge=m(ve,!0),te=d(ee);Xe(te,20,()=>Array.from({length:e.spec.slots},(I,F)=>F+1),I=>I,(I,F)=>{const Ee=c(()=>t(f)?Xl(e.spec,e.values,t(f),t(i),F):void 0);var Ie=Ik(),Me=A(Ie),Ve=m(Me,!0),ze=d(Me),nt=m(ze,!0),Ze=d(ze),_e=A(Ze),Se=d(Ze),V=A(Se),L=d(V,2);{var Pe=Ge=>{var qe=Dk(),we=m(qe,!0);S(()=>h(we,t(p))),v(Ge,qe)};W(L,Ge=>{t(p)!==""&&Ge(Pe)})}S((Ge,qe,we,Ce)=>{T(Ie,"data-testid",`week-slot-${F}`),h(Ve,F),h(nt,Ge),_e.disabled=!e.spec.writable,T(_e,"aria-label",qe),T(_e,"data-testid",`week-slot-${F}-endtime`),ln(_e,we),T(V,"min",t(g)),T(V,"max",t(k)),V.disabled=!e.spec.writable,T(V,"aria-label",Ce),T(V,"data-testid",`week-slot-${F}-value`),ln(V,t(Ee)?.value??"")},[()=>D(F),()=>`${s("until")} ${F}`,()=>ri(t(Ee)?.endTime),()=>`${s("Value")} ${F}`]),re("change",_e,Ge=>N(F,Ge.currentTarget.value)),re("input",V,Ge=>R(F,Ge.currentTarget.value)),v(I,Ie)});var O=d(be,2);{var U=I=>{var F=Ck();Xe(F,21,()=>t(b),Ee=>`${Ee.day}-${Ee.slot}-${Ee.code}`,(Ee,Ie)=>{var Me=Nk(),Ve=m(Me,!0);S(ze=>h(Ve,ze),[()=>$(t(Ie))]),v(Ee,Me)}),v(I,F)};W(O,I=>{t(b).length>0&&I(U)})}S((I,F,Ee,Ie,Me,Ve,ze,nt)=>{h(de,I),h(oe,F),h(xe,Ee),h(Te,Ie),P.disabled=!e.spec.writable,h(ce,Me),h(Q,Ve),h(Y,ze),h(J,nt),h(ge,t(E))},[()=>s("Week programme"),()=>s("The end times of a day rise until {end}, and the last one is {end}",{end:ri(e.spec.dayEnd)}),()=>s("Copy day to"),()=>s("Weekdays"),()=>s("Copy"),()=>s("Slot"),()=>s("Time"),()=>s("until")]),kr(ie,()=>t(o),I=>u(o,I)),re("click",P,M),v(r,le),ft()}Et(["click","change","input"]);function Ok(r,e){var n=St(),s=Ne(n);Xe(s,17,()=>e.specs,a=>a.id,(a,i)=>{var o=St(),l=Ne(o);{var f=E=>{ak(E,{get spec(){return t(i)},get values(){return e.values},get channelType(){return e.channelType},get onchange(){return e.onchange}})},p=E=>{ck(E,{get spec(){return t(i)},get values(){return e.values},get channelType(){return e.channelType},get onchange(){return e.onchange}})},_=E=>{mk(E,{get spec(){return t(i)},get values(){return e.values},get channelType(){return e.channelType},get onchange(){return e.onchange}})},g=E=>{Rk(E,{get spec(){return t(i)},get values(){return e.values},get channelType(){return e.channelType},get onchange(){return e.onchange}})},k=E=>{Mk(E,{get spec(){return t(i)},get values(){return e.values},get channelType(){return e.channelType},get onchange(){return e.onchange}})};W(l,E=>{t(i).kind==="blind-calibration"?E(f):t(i).kind==="duration-pairs"?E(p,1):t(i).kind==="enum-options"?E(_,2):t(i).kind==="switch-week-profile"?E(g,3):t(i).kind==="week-profile"&&E(k,4)})}v(a,o)}),v(r,n)}class Lk extends Map{#e=new Map;#n=C(0);#t=C(0);#s=Ps||-1;constructor(e){if(super(),e){for(var[n,s]of e)super.set(n,s);this.#t.v=super.size}}#a(e){return Ps===this.#s?C(e):Xs(e)}has(e){var n=this.#e,s=n.get(e);if(s===void 0)if(super.has(e))s=this.#a(0),n.set(e,s);else return t(this.#n),!1;return t(s),!0}forEach(e,n){this.#r(),super.forEach(e,n)}get(e){var n=this.#e,s=n.get(e);if(s===void 0)if(super.has(e))s=this.#a(0),n.set(e,s);else{t(this.#n);return}return t(s),super.get(e)}getOrInsert(e,n){return super.has(e)||this.set(e,n),this.get(e)}getOrInsertComputed(e,n){return super.has(e)||this.set(e,n(e)),this.get(e)}set(e,n){var s=this.#e,a=s.get(e),i=super.get(e),o=super.set(e,n),l=this.#n;if(a===void 0)a=this.#a(0),s.set(e,a),u(this.#t,super.size),gs(l);else if(i!==n){gs(a);var f=l.reactions===null?null:new Set(l.reactions),p=f===null||!a.reactions?.every(_=>f.has(_));p&&gs(l)}return o}delete(e){var n=this.#e,s=n.get(e),a=super.delete(e);return s!==void 0&&(n.delete(e),u(s,-1)),a&&(u(this.#t,super.size),gs(this.#n)),a}clear(){if(super.size!==0){super.clear();var e=this.#e;u(this.#t,0);for(var n of e.values())u(n,-1);gs(this.#n),e.clear()}}#r(){t(this.#n);var e=this.#e;if(this.#t.v!==e.size){for(var n of super.keys())if(!e.has(n)){var s=this.#a(0);e.set(n,s)}}for([,s]of this.#e)t(s)}keys(){return t(this.#n),super.keys()}values(){return this.#r(),super.values()}entries(){return this.#r(),super.entries()}[Symbol.iterator](){return this.entries()}get size(){return t(this.#t),super.size}}const Jl="DYNAMIC_ROUTE_";function qr(r,e,n){return r[`${Jl}${e}_${String(n)}`]}function sl(r){return typeof r=="string"?r:typeof r=="number"?String(r):""}function ra(r){return r===!0||r===1||r==="true"||r==="1"}function Tu(r){if(typeof r=="number"&&Number.isFinite(r))return r;if(typeof r=="string"&&r.trim()!==""&&Number.isFinite(Number(r)))return Number(r)}function rm(r){const e=new Set;for(const n of Object.keys(r))if(n.startsWith(`${Jl}IP_DESTINATION_ADDRESS_`)){const s=Number(n.slice(`${Jl}IP_DESTINATION_ADDRESS_`.length));Number.isInteger(s)&&e.add(s)}return[...e].sort((n,s)=>n-s).map(n=>({index:n,destination:sl(qr(r,"IP_DESTINATION_ADDRESS",n)),nextHop:sl(qr(r,"NEXT_HOP_ADDRESS",n)),distance:Tu(qr(r,"DISTANCE",n))??0,rssi:Tu(qr(r,"RSSI",n)),isStatic:ra(qr(r,"IS_STATIC_ROUTE",n)),isNeighbour:ra(qr(r,"IS_NEIGHBOUR",n)),macSequenceValid:ra(qr(r,"IS_MAC_SEQUENCE_NUMBER_VALID",n)),accessController:ra(qr(r,"OM_ACCESS_CONTROLLER",n)),router:ra(qr(r,"OM_ROUTER",n)),portable:ra(qr(r,"OM_PORTABLE_DEVICE",n)),listenerMode:sl(qr(r,"OM_LISTENER_MODE",n)),omValid:ra(qr(r,"OM_VALID",n))})).filter(n=>n.destination!=="")}function Fk(r,e){const n=new Map([[r,{id:r,router:!0,accessController:!1,portable:!1}]]),s=new Map,a=(o,l)=>{o===""||n.has(o)||n.set(o,{id:o,router:l?.router??!1,accessController:l?.accessController??!1,portable:l?.portable??!1})},i=o=>{const l=`${o.from}>${o.to}`,f=s.get(l);(!f||f.distance===void 0&&o.distance!==void 0)&&s.set(l,o)};for(const o of e)a(o.destination,o),o.isNeighbour||o.nextHop===""||o.nextHop===o.destination?i({from:r,to:o.destination,distance:o.distance,rssi:o.rssi,isStatic:o.isStatic}):(a(o.nextHop),i({from:r,to:o.nextHop,distance:o.distance,rssi:o.rssi,isStatic:o.isStatic}),i({from:o.nextHop,to:o.destination,isStatic:o.isStatic}));return{self:r,nodes:[...n.values()],edges:[...s.values()]}}var Gk=y("<p> </p>"),Uk=Mr('<text class="hmm-routing-edge svelte-10p79ns"> <!></text>'),Bk=Mr("<line></line><!>",1),Hk=Mr('<text text-anchor="middle" class="hmm-routing-mark svelte-10p79ns">AC</text>'),Vk=Mr('<text text-anchor="middle" class="hmm-routing-mark svelte-10p79ns">R</text>'),zk=Mr('<text text-anchor="middle" class="hmm-routing-mark svelte-10p79ns">P</text>'),jk=Mr('<g><circle class="svelte-10p79ns"></circle><text text-anchor="middle" class="svelte-10p79ns"> </text><!></g>'),Wk=y('<tr><td class="svelte-10p79ns"> </td><td class="svelte-10p79ns"><span class="hmm-mono"> </span> </td><td class="svelte-10p79ns"><span class="hmm-mono"> </span></td><td class="svelte-10p79ns"> </td><td class="svelte-10p79ns"> </td><td class="svelte-10p79ns"> </td><td class="svelte-10p79ns"> </td><td class="svelte-10p79ns"> </td><td class="svelte-10p79ns"> </td><td class="svelte-10p79ns"> </td><td class="svelte-10p79ns"> </td><td class="svelte-10p79ns"> </td></tr>'),Kk=y('<svg class="hmm-routing-graph svelte-10p79ns" role="img"><!><!></svg> <table class="hmm-table hmm-routing-list svelte-10p79ns"><thead><tr><th class="svelte-10p79ns">#</th><th class="svelte-10p79ns"> </th><th class="svelte-10p79ns"> </th><th class="svelte-10p79ns"> </th><th class="svelte-10p79ns">RSSI</th><th class="svelte-10p79ns"> </th><th class="svelte-10p79ns"> </th><th class="svelte-10p79ns"> </th><th class="svelte-10p79ns"> </th><th class="svelte-10p79ns"> </th><th class="svelte-10p79ns"> </th><th class="svelte-10p79ns"> </th></tr></thead><tbody></tbody></table>',1),Yk=y('<div class="hmm-routing svelte-10p79ns" data-testid="routing-table"><p class="hmm-routing-hint svelte-10p79ns"> </p> <!></div>');function sm(r,e){ut(e,!0);let n=H(e,"values",19,()=>({})),s=H(e,"cached",3,void 0),a=H(e,"readAt",3,void 0);const i=Ot(),o=i.i18n.t,l=c(()=>s()===void 0?rm(n()):[...s()]),f=c(()=>Fk(e.self,t(l))),p=R=>{const M=i.nameOf(R);return M&&M!==R?M:R},_=560,g=c(()=>{const R=new Lk,M=_/2,z=_/2;R.set(t(f).self,{x:M,y:z});const $=t(f).edges.filter(de=>de.from===t(f).self).map(de=>de.to),le=t(f).nodes.map(de=>de.id).filter(de=>de!==t(f).self&&!$.includes(de)),fe=(de,B,oe)=>{de.forEach((K,X)=>{const se=oe+2*Math.PI*X/Math.max(de.length,1);R.set(K,{x:M+B*Math.cos(se),y:z+B*Math.sin(se)})})};return fe($,_*.26,-Math.PI/2),fe(le,_*.44,-Math.PI/2+Math.PI/Math.max(le.length,1)),R}),k=R=>t(g).get(R)??{x:_/2,y:_/2};var E=Yk(),b=A(E),w=m(b,!0),x=d(b,2);{var D=R=>{var M=Gk(),z=m(M,!0);S($=>h(z,$),[()=>o("No routes: the device reported an empty table.")]),v(R,M)},N=R=>{var M=Kk(),z=Ne(M),$=A(z);Xe($,17,()=>t(f).edges,ae=>`${ae.from}>${ae.to}`,(ae,J)=>{const ve=c(()=>k(t(J).from)),ge=c(()=>k(t(J).to));var te=Bk(),O=Ne(te);let U;var I=d(O);{var F=Ee=>{var Ie=Uk(),Me=A(Ie),Ve=d(Me);{var ze=nt=>{var Ze=Cn();S(()=>h(Ze,`, ${t(J).rssi??""} dBm`)),v(nt,Ze)};W(Ve,nt=>{t(J).rssi!==void 0&&nt(ze)})}S(nt=>{T(Ie,"x",(t(ve).x+t(ge).x)/2),T(Ie,"y",(t(ve).y+t(ge).y)/2-4),h(Me,`${t(J).distance??""}
17
+ ${nt??""}`)},[()=>o("hops",{},t(J).distance)]),v(Ee,Ie)};W(I,Ee=>{t(J).distance!==void 0&&Ee(F)})}S(()=>{T(O,"x1",t(ve).x),T(O,"y1",t(ve).y),T(O,"x2",t(ge).x),T(O,"y2",t(ge).y),U=_t(O,0,"svelte-10p79ns",null,U,{"hmm-routing-static":t(J).isStatic})}),v(ae,te)});var le=d($);Xe(le,17,()=>t(f).nodes,ae=>ae.id,(ae,J)=>{const ve=c(()=>k(t(J).id));var ge=jk();let te;var O=A(ge),U=d(O),I=m(U,!0),F=d(U);{var Ee=Ve=>{var ze=Hk();S(()=>{T(ze,"x",t(ve).x),T(ze,"y",t(ve).y+4)}),v(Ve,ze)},Ie=Ve=>{var ze=Vk();S(()=>{T(ze,"x",t(ve).x),T(ze,"y",t(ve).y+4)}),v(Ve,ze)},Me=Ve=>{var ze=zk();S(()=>{T(ze,"x",t(ve).x),T(ze,"y",t(ve).y+4)}),v(Ve,ze)};W(F,Ve=>{t(J).accessController?Ve(Ee):t(J).router?Ve(Ie,1):t(J).portable&&Ve(Me,2)})}S(Ve=>{te=_t(ge,0,"hmm-routing-node svelte-10p79ns",null,te,{"hmm-routing-self":t(J).id===t(f).self,"hmm-routing-router":t(J).router}),T(O,"cx",t(ve).x),T(O,"cy",t(ve).y),T(O,"r",t(J).id===t(f).self?22:16),T(U,"x",t(ve).x),T(U,"y",t(ve).y+30),h(I,Ve)},[()=>p(t(J).id)]),v(ae,ge)});var fe=d(z,2),de=A(fe),B=A(de),oe=d(A(B)),K=m(oe,!0),X=d(oe),se=m(X,!0),j=d(X),ne=m(j,!0),ye=d(j,2),xe=m(ye,!0),ie=d(ye),Ae=m(ie,!0),Te=d(ie),me=m(Te,!0),P=d(Te),ce=m(P,!0),be=d(P),ee=m(be,!0),he=d(be),G=m(he,!0),Q=d(he),q=m(Q,!0),Y=d(de);Xe(Y,21,()=>t(l),ae=>ae.index,(ae,J)=>{var ve=Wk(),ge=A(ve),te=m(ge,!0),O=d(ge),U=A(O),I=m(U,!0),F=d(U),Ee=d(O),Ie=A(Ee),Me=m(Ie,!0),Ve=d(Ee),ze=m(Ve,!0),nt=d(Ve),Ze=m(nt,!0),_e=d(nt),Se=m(_e,!0),V=d(_e),L=m(V,!0),Pe=d(V),Ge=m(Pe,!0),qe=d(Pe),we=m(qe,!0),Ce=d(qe),Oe=m(Ce,!0),Be=d(Ce),pe=m(Be,!0),De=d(Be),Ue=m(De,!0);S((Fe,Ye,tt)=>{T(ve,"data-testid",Fe),h(te,t(J).index),h(I,t(J).destination),h(F,` ${Ye??""}`),h(Me,t(J).nextHop),h(ze,t(J).distance),h(Ze,tt),h(Se,t(J).isNeighbour?"✔":""),h(L,t(J).isStatic?"✔":""),h(Ge,t(J).router?"✔":""),h(we,t(J).accessController?"✔":""),h(Oe,t(J).portable?"✔":""),h(pe,t(J).listenerMode),h(Ue,t(J).omValid?"✔":"")},[()=>`route-${String(t(J).index)}`,()=>p(t(J).destination)!==t(J).destination?p(t(J).destination):"",()=>t(J).rssi===void 0?"":`${String(t(J).rssi)} dBm`]),v(ae,ve)}),S((ae,J,ve,ge,te,O,U,I,F,Ee,Ie,Me)=>{T(z,"viewBox",ae),T(z,"aria-label",J),h(K,ve),h(se,ge),h(ne,te),h(xe,O),h(Ae,U),h(me,I),h(ce,F),h(ee,Ee),h(G,Ie),h(q,Me)},[()=>`0 0 ${String(_)} ${String(_)}`,()=>o("Routing table"),()=>o("Destination"),()=>o("Next hop"),()=>o("Hops"),()=>o("Neighbour"),()=>o("Static"),()=>o("Router"),()=>o("Access controller"),()=>o("Portable"),()=>o("Listener mode"),()=>o("Valid")]),v(R,M)};W(x,R=>{t(l).length===0?R(D):R(N,-1)})}S(R=>h(w,R),[()=>a()===void 0?o("Read from the device itself; every read costs duty cycle, so it is read once when this opens."):o("Read from the device at {time}; not read again here.",{time:ca(a(),i.i18n.language)})]),v(r,E),ft()}var qk=y('<div><div class="hmm-param-label svelte-ery515"><span> </span></div> <div class="hmm-param-control svelte-ery515"><label class="hmm-param-suppress svelte-ery515"><input type="checkbox"/> <span> </span></label></div></div>');function $k(r,e){ut(e,!0);let n=H(e,"title",3,void 0),s=H(e,"changed",3,!1);var a=qk();let i;var o=A(a),l=A(o),f=m(l,!0),p=d(o,2),_=A(p),g=A(_),k=d(g,2),E=m(k,!0);S(()=>{i=_t(a,1,"hmm-param hmm-param-table-row svelte-ery515",null,i,{"hmm-param-changed":s()}),T(a,"data-testid",`suppress-row-${e.name}`),h(f,e.name),T(_,"title",n()),Pr(g,e.suppressed),T(g,"data-testid",`suppress-${e.name}`),h(E,e.label)}),re("change",g,b=>e.onchange(b.currentTarget.checked)),v(r,a),ft()}Et(["change"]);var Xk=y('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="paramset-preview"> </button>',1),Qk=y("<p> </p>"),Zk=y('<p data-testid="paramset-failed"> </p>'),Jk=y('<label class="hmm-paramset-option svelte-onngst"><input type="checkbox" data-testid="paramset-expert"/> <span> </span></label>'),eA=y('<label class="hmm-paramset-option svelte-onngst"><input type="checkbox" data-testid="paramset-show-covered"/> <span> </span></label>'),tA=y('<button type="button" class="hmm-button" data-testid="paramset-internal-key"> </button>'),nA=y('<label class="hmm-paramset-option svelte-onngst"><input type="checkbox" data-testid="paramset-show-hidden"/> <span> </span></label>'),rA=y("<li> </li>"),sA=y('<ul class="hmm-paramset-warnings svelte-onngst" data-testid="paramset-warnings"></ul>'),aA=y('<p class="hmm-paramset-legend svelte-onngst" data-testid="paramset-easy-legend"><span class="hmm-paramset-easy-swatch svelte-onngst" aria-hidden="true"></span> </p>'),iA=y("<div><!></div>"),oA=y('<div class="hmm-paramset-suppress svelte-onngst" data-testid="paramset-service-messages"><span class="hmm-paramset-suppress-hint svelte-onngst"> </span> <button type="button" class="hmm-button" data-testid="suppress-all"> </button> <button type="button" class="hmm-button" data-testid="unsuppress-all"> </button> <button type="button" class="hmm-button" data-testid="suppress-apply"> </button></div>'),lA=y('<li><span class="hmm-mono"> </span> </li>'),dA=y('<ul class="hmm-paramset-results svelte-onngst" data-testid="paramset-results"></ul>'),cA=y('<div class="hmm-paramset-top svelte-onngst"><!> <label class="hmm-paramset-option svelte-onngst"><input type="checkbox" data-testid="paramset-write-all"/> <span> </span></label> <!> <!> <!> <!></div> <!> <!> <!> <!> <div><!> <!> <!></div> <!> <!>',1),uA=y("<!> <!> <!> <!>",1);function am(r,e){ut(e,!0);let n=H(e,"open",15,!1),s=H(e,"interfaceName",3,""),a=H(e,"address",3,""),i=H(e,"paramset",3,"MASTER");const o=Ot(),l=o.i18n.t;let f=C(void 0),p=C(We({})),_=C(We({})),g=C(We({})),k=C(void 0),E=C(""),b=C(!1),w=C(We([])),x=C(!1),D=C(!1),N=C(!1),R=C(!1),M=C(!1),z=C(void 0),$=C(We([])),le=C(We([])),fe=0,de=C(void 0),B=C(We({})),oe=C(void 0),K=C(!1),X=C(void 0),se=C(!1);const j=c(()=>_i(s(),o.interfaces.typeOf(s()))),ne=c(()=>n()&&t(j)&&/:0$/.test(a())&&(i()==="MASTER"||i()==="VALUES"));ot(()=>{if(!t(ne)){u(de,void 0),u(B,{},!0),u(oe,void 0);return}const ke={interfaceName:s(),address:a(),paramset:i()};u(B,{},!0),sr(()=>{o.paramsets.suppressedServiceMessages(ke.interfaceName,ke.address).then(Le=>{ke.address===a()&&ke.interfaceName===s()&&u(de,Le,!0)}),ke.paramset==="MASTER"&&o.paramsets.describe(ke.interfaceName,ke.address,"VALUES").then(Le=>{ke.address===a()&&ke.interfaceName===s()&&u(oe,Le,!0)})})});const ye=c(()=>{if(t(de)===void 0)return[];const ke=i()==="VALUES"?t(f):t(oe);return ke?Jh(ke):[]}),xe=c(()=>i()==="MASTER"?t(ye):[]);function ie(ke){return t(B)[ke]??t(de)?.includes(ke)===!0}function Ae(ke){return ke in t(B)&&t(B)[ke]!==(t(de)?.includes(ke)===!0)}const Te=c(()=>t(ye).some(ke=>Ae(ke)));function me(ke,Le){u(B,{...t(B),[ke]:Le},!0)}function P(ke){u(B,Object.fromEntries(t(ye).map(Le=>[Le,ke])),!0)}function ce(){u(X,V0({address:a(),suppressed:t(de)??[],edits:t(B),labels:{suppressed:l("suppressed"),unsuppressed:l("not suppressed")}}),!0),u(K,!0)}async function be(){const ke=t(X);if(ke){u(se,!0);try{for(const Le of ke.entries)await o.paramsets.suppressServiceMessages(s(),a(),Le.param,t(B)[Le.param]===!0);u(de,await o.paramsets.suppressedServiceMessages(s(),a()),!0),u(B,{},!0)}finally{u(se,!1),u(K,!1)}}}const ee=c(()=>o.devices.index(s())),he=c(()=>t(ee)?.get(a())?.TYPE??""),G=c(()=>`${i()} — ${o.nameOf(a())} (${a()})`),Q=c(()=>t(f)?Zh(t(f),t(k)):[]),q=c(()=>({optionByName:(ke,Le)=>o.meta.valueLabelIfKnown(ke,Le,t(he)),optionByIndex:(ke,Le)=>o.meta.valueLabelIfKnown(ke,String(Le),t(he)),preset:ke=>t(k)?.parameters.find(Le=>Le.name===ke)?.preset,uiLabel:ke=>o.meta.uiLabel(ke)})),Y=c(()=>t(f)?G0({interfaceName:s(),address:a(),channelType:t(he),paramset:i(),description:t(f)},t(q)):[]),ae=c(()=>t(N)||t(R)?new Set:U0(t(Y))),J=c(()=>t(Q).filter(ke=>(t(D)||ke.visible)&&!t(ae).has(ke.name))),ve=c(()=>i()==="MASTER"&&t(f)?wh(t(k)?.controls,t(f)):void 0),ge=c(()=>t(R)?void 0:t(ve)),te=c(()=>t(R)?Nl(t(ve)):new Set),O=c(()=>new Map(t(Q).map(ke=>[ke.name,ke]))),U=c(()=>Nl(t(ve))),I=c(()=>t(R)?[]:t(ge)?t(Y).filter(ke=>!ke.covers.every(Le=>t(U).has(Le))):t(Y));ot(()=>{n()&&i()==="MASTER"&&o.meta.loadPresets()});const F=c(()=>i()==="VALUES"),Ee=c(()=>i()==="MASTER"),Ie=c(()=>{if(!t(Ee)||!t(ee)||a()===""||!t(ee).has(a()))return;const ke=t(ee).all().filter(Le=>Le.TYPE===t(he)&&Le.ADDRESS!==a()).map(Le=>Le.ADDRESS);return M_(t(ee),a(),i(),ke)}),Me=c(()=>t(Ie)?[...t(Ie).eligible.map(ke=>({value:ke,label:`${o.nameOf(ke)} (${ke})`})),...t(Ie).ineligible.filter(ke=>ke.reason==="different-identity").map(ke=>({value:ke.address,label:`${o.nameOf(ke.address)} (${ke.address}) — ${l("other firmware or device type")}`,disabled:!0}))]:[]),Ve=c(()=>(t(k)?.problems??[]).map(ke=>`${ke.params.join(", ")}: ${o.meta.uiLabel(ke.errorKey)}`));ot(()=>{if(!n()||s()===""||a()==="")return;const ke=fe+=1,Le={interfaceName:s(),address:a(),paramset:i()};o.paramsets.open(Le.interfaceName,Le.address,Le.paramset).then($e=>{ke===fe&&(u(f,$e?.description,!0),u(p,$e?.values??{},!0),u(_,{},!0),Le.paramset==="VALUES"&&Be(ke),u(g,{},!0),u($,[],!0),u(le,[],!0),u(w,[],!0),u(x,!1),u(R,!1))})}),ot(()=>{const ke=t(f);if(!n()||!ke||i()!=="MASTER"||t(he)===""){u(k,void 0),ze=void 0;return}const Le=Ze(),$e=t(E),at=nt(s(),a());o.meta.masterView(t(he),ke,Le,$e,at).then(lt=>{u(k,lt,!0)})});let ze;function nt(ke,Le){const $e=`${ke}|${Le}`,at=Le.indexOf(":"),lt=at<0?Le:Le.slice(0,at);return{deviceType:t(ee)?.get(Le)?.PARENT_TYPE||t(ee)?.get(lt)?.TYPE||"",channel:at<0?-1:Number(Le.slice(at+1)),channelMode:()=>(ze?.key!==$e&&(ze={key:$e,answer:o.paramsets.channelMode(ke,Le)}),ze.answer)}}ot(()=>{if(!n()||i()!=="MASTER"||a()===""){u(E,"");return}const ke=`${s()}|${a()}`;u(E,""),o.paramsets.paramsetId(s(),a()).then(Le=>o.meta.masterFormId(Le)).then(Le=>{`${s()}|${a()}`===ke&&u(E,Le,!0)})});function Ze(){const ke={...t(p)};for(const[Le,$e]of Object.entries(t(g)))(typeof $e=="boolean"||typeof $e=="number"||typeof $e=="string")&&(ke[Le]=$e);return ke}function _e(ke){return Object.prototype.hasOwnProperty.call(t(g),ke.name)?t(g)[ke.name]:t(p)[ke.name]??ke.description.DEFAULT}function Se(ke){return Object.prototype.hasOwnProperty.call(t(g),ke.name)}function V(ke,Le){u(g,{...t(g),[ke.name]:Le},!0)}function L(ke){u(g,{...t(g),...ke},!0)}function Pe(ke){return o.meta.parameterLabel(ke.name,t(he))}function Ge(ke){const Le=o.meta.parameterHelp(ke.name,t(he));return Le===void 0?void 0:Le.replace(/<[^>]*>/g," ").replace(/\s+/g," ").trim()}function qe(){t(f)&&(u($,[],!0),u(le,[],!0),u(z,li(t(p),t(g),t(f),{interfaceName:s(),targets:[a(),...t(w)],writeAll:t(x)}),!0),u(M,!0))}async function we(){const ke=t(z);if(!ke||!t(f))return;const Le=await o.paramsets.put(s(),[...ke.targets],i(),ke.values,t(x)?{writeAll:!0}:void 0);u($,Le,!0);const $e=await o.paramsets.read(s(),a(),i());$e&&(u(le,Ql(ke.values,$e,t(f)),!0),u(p,$e,!0),i()==="VALUES"&&Be(fe),u(g,{},!0)),Le.length>0&&Le.every(at=>at.ok)&&!t(le).some(at=>at.differs)&&u(M,!1)}function Ce(){const ke=t(z);!ke||ke.entries.length===0||(o.changeSet.stage({kind:"paramset",interfaceName:s(),title:`${i()} — ${o.nameOf(a())} (${a()})`,targets:[...ke.targets],paramset:i(),values:ke.values,writeAll:t(x),calls:ke.targets.map(Le=>`putParamset(${Le}, ${i()}, ${JSON.stringify(ke.values)})`),lines:ke.entries.map(Le=>({label:Le.param,from:Le.from,to:Le.to}))}),u(M,!1),n(!1))}function Oe(ke,Le){if(ke.kind==="enum"&&typeof Le=="number"){const $e=ke.valueList?.[Le];if($e!==void 0)return`${o.meta.valueLabel(ke.name,$e,t(he))} (${Le})`}return String(Le)}async function Be(ke){const Le=await o.paramsets.valueStates(s(),a());ke===fe&&u(_,Le,!0)}async function pe(ke){const Le=_e(ke),$e=typeof Le=="boolean"||typeof Le=="number"||typeof Le=="string"?Le:!1;await o.paramsets.setValue(s(),a(),ke.name,$e)&&(u(g,Object.fromEntries(Object.entries(t(g)).filter(([lt])=>lt!==ke.name)),!0),u(p,{...t(p),[ke.name]:$e},!0),Be(fe),o.notices.push("info",`setValue ${o.nameOf(a())} (${a()}) ${ke.name} = ${Oe(ke,$e)}`))}var De=uA(),Ue=Ne(De);En(Ue,{get title(){return t(G)},width:"900px",height:"min(640px, calc(100vh - 32px))",minWidth:520,minHeight:320,testId:"paramset-dialog",get open(){return n()},set open(Le){n(Le)},buttons:Le=>{var $e=Xk(),at=Ne($e),lt=m(at,!0),Je=d(at,2),Pt=m(Je,!0);S((Tt,Lt)=>{h(lt,Tt),Je.disabled=!t(f),h(Pt,Lt)},[()=>l("Close"),()=>l("Preview")]),re("click",at,()=>n(!1)),re("click",Je,qe),v(Le,$e)},children:(Le,$e)=>{var at=St(),lt=Ne(at);{var Je=Lt=>{var Qt=Qk(),pn=m(Qt,!0);S(wn=>h(pn,wn),[()=>l("Loading Homematic Manager...")]),v(Lt,Qt)},Pt=Lt=>{var Qt=Zk(),pn=m(Qt,!0);S(wn=>h(pn,wn),[()=>l("No data")]),v(Lt,Qt)},Tt=Lt=>{var Qt=cA(),pn=Ne(Qt),wn=A(pn);{var tn=it=>{{let bt=c(()=>l("Please choose one or more channels")),It=c(()=>l("Please choose one or more channels")),et=c(()=>l("Filter")),rt=c(()=>l("Check all")),je=c(()=>l("Uncheck all"));bi(it,{get options(){return t(Me)},get label(){return t(bt)},get placeholder(){return t(It)},get filterLabel(){return t(et)},get checkAllLabel(){return t(rt)},get uncheckAllLabel(){return t(je)},summary:vt=>l("{count} channels selected",{},vt.length),testId:"paramset-targets",get selected(){return t(w)},set selected(vt){u(w,vt,!0)}})}};W(wn,it=>{t(Ee)&&t(Me).length>0&&it(tn)})}var bn=d(wn,2),Pn=A(bn),$n=d(Pn,2),Xn=m($n,!0),Zt=d(bn,2);{var Ft=it=>{var bt=Jk(),It=A(bt),et=d(It,2),rt=m(et,!0);S(je=>h(rt,je),[()=>l("Expert view")]),vr(It,()=>t(R),je=>u(R,je)),v(it,bt)};W(Zt,it=>{t(ve)&&it(Ft)})}var Jt=d(Zt,2);{var Qn=it=>{var bt=eA(),It=A(bt),et=d(It,2),rt=m(et,!0);S(je=>h(rt,je),[()=>l("Show the raw parameters as well")]),vr(It,()=>t(N),je=>u(N,je)),v(it,bt)};W(Jt,it=>{t(Y).length>0&&!t(ve)&&it(Qn)})}var Mn=d(Jt,2);{var Or=it=>{var bt=tA(),It=m(bt,!0);S(et=>h(It,et),[()=>l("Internal key…")]),re("click",bt,()=>u(b,!0)),v(it,bt)};W(Mn,it=>{t(k)?.internalKey&&it(Or)})}var zr=d(Mn,2);{var Zn=it=>{var bt=nA(),It=A(bt),et=d(It,2),rt=m(et,!0);S(je=>h(rt,je),[()=>l("Show hidden parameters")]),vr(It,()=>t(D),je=>u(D,je)),v(it,bt)},jn=c(()=>t(Q).some(it=>!it.visible)&&!t(ge));W(zr,it=>{t(jn)&&it(Zn)})}var Lr=d(pn,2);{var cs=it=>{var bt=sA();Xe(bt,20,()=>t(Ve),It=>It,(It,et)=>{var rt=rA(),je=m(rt,!0);S(()=>h(je,et)),v(It,rt)}),v(it,bt)};W(Lr,it=>{t(Ve).length>0&&it(cs)})}var ar=d(Lr,2);{let it=c(Ze);Ok(ar,{get specs(){return t(I)},get values(){return t(it)},get channelType(){return t(he)},onchange:L})}var Ar=d(ar,2);{var jr=it=>{{let bt=c(()=>a().split(":")[0]??a());sm(it,{get values(){return t(p)},get self(){return t(bt)}})}};W(Ar,it=>{i()==="ROUTING_TABLE"&&it(jr)})}var cr=d(Ar,2);{var Tr=it=>{var bt=aA(),It=d(A(bt),1,!0);S(et=>h(It,et),[()=>l("Marked: the parameters the easy mode of this channel shows")]),v(it,bt)};W(cr,it=>{t(R)&&t(te).size>0&&it(Tr)})}var ur=d(cr,2);let ns;var Fr=A(ur);{var pr=it=>{{let bt=c(Ze);tm(it,{get form(){return t(ge)},get fields(){return t(O)},get values(){return t(bt)},changed:It=>Object.prototype.hasOwnProperty.call(t(g),It),get description(){return t(f)},get channelType(){return t(he)},get presets(){return o.meta.presets},get timeSelectors(){return o.meta.timeSelectors},onchange:L,testId:"paramset-easy-form"})}};W(Fr,it=>{t(ge)&&t(f)&&it(pr)})}var gr=d(Fr,2);Xe(gr,17,()=>t(ge)?[]:t(J),it=>it.name,(it,bt)=>{const It=c(()=>t(ye).includes(t(bt).name));var et=iA();let rt;var je=A(et);{let vt=c(()=>_e(t(bt))),At=c(()=>Pe(t(bt))),zt=c(()=>Ge(t(bt))),hn=c(()=>Se(t(bt))),Ht=c(()=>t(F)?t(_)[t(bt).name]:void 0),Mt=c(()=>t(F)&&t(bt).writable?()=>{pe(t(bt))}:void 0),kn=c(()=>t(It)?ie(t(bt).name):void 0),An=c(()=>t(It)?Gn=>me(t(bt).name,Gn):void 0),dn=c(()=>l("suppressed")),_n=c(()=>l("A suppressed one reports a value that raises no message; the CCU shows it as inactive.")),or=c(()=>t(It)&&Ae(t(bt).name));Da(je,{get field(){return t(bt)},get value(){return t(vt)},get label(){return t(At)},get help(){return t(zt)},get changed(){return t(hn)},valueLabel:Gn=>o.meta.valueLabel(t(bt).name,Gn,t(he)),presetLabel:Gn=>o.meta.uiLabel(Gn),get valueState(){return t(Ht)},onchange:Gn=>V(t(bt),Gn),get onset(){return t(Mt)},get suppressed(){return t(kn)},get onsuppress(){return t(An)},get suppressLabel(){return t(dn)},get suppressTitle(){return t(_n)},get suppressChanged(){return t(or)}})}S(vt=>rt=_t(et,1,"hmm-paramset-easy-mark hmm-param-table-span svelte-onngst",null,rt,{"hmm-paramset-easy-marked":vt}),[()=>t(te).has(t(bt).name)]),v(it,et)});var ue=d(gr,2);Xe(ue,16,()=>t(xe),it=>it,(it,bt)=>{{let It=c(()=>ie(bt)),et=c(()=>Ae(bt)),rt=c(()=>l("suppressed")),je=c(()=>l("A suppressed one reports a value that raises no message; the CCU shows it as inactive."));$k(it,{get name(){return bt},get suppressed(){return t(It)},get changed(){return t(et)},get label(){return t(rt)},get title(){return t(je)},onchange:vt=>me(bt,vt)})}});var He=d(ur,2);{var Vt=it=>{var bt=oA(),It=A(bt),et=m(It),rt=d(It,2),je=m(rt,!0),vt=d(rt,2),At=m(vt,!0),zt=d(vt,2),hn=m(zt,!0);S((Ht,Mt,kn,An,dn)=>{h(et,`${Ht??""} — ${Mt??""}`),h(je,kn),h(At,An),zt.disabled=!t(Te)||t(se),h(hn,dn)},[()=>l("Service message suppression"),()=>l("Nothing is sent until Apply; the preview lists every call first."),()=>l("Suppress all"),()=>l("Unsuppress all"),()=>l("Apply")]),re("click",rt,()=>P(!0)),re("click",vt,()=>P(!1)),re("click",zt,ce),v(it,bt)};W(He,it=>{t(ye).length>0&&it(Vt)})}var yn=d(He,2);{var ir=it=>{var bt=dA();Xe(bt,21,()=>t($),It=>`${It.address}-${It.paramset}`,(It,et)=>{var rt=lA();let je;var vt=A(rt),At=m(vt,!0),zt=d(vt);S(()=>{je=_t(rt,1,"svelte-onngst",null,je,{"hmm-paramset-failed":!t(et).ok}),h(At,t(et).address),h(zt,` ${t(et).ok?"✔":`✕ ${t(et).faultString??""}`}`)}),v(It,rt)}),v(it,bt)};W(yn,it=>{t($).length>0&&it(ir)})}S(it=>{h(Xn,it),ns=_t(ur,1,"hmm-paramset-list hmm-param-table svelte-onngst",null,ns,{"hmm-paramset-raw":i()==="ROUTING_TABLE"})},[()=>l("Write every parameter, not only the changed ones")]),vr(Pn,()=>t(x),it=>u(x,it)),v(Lt,Qt)};W(lt,Lt=>{o.paramsets.loading&&!t(f)?Lt(Je):t(f)?Lt(Tt,-1):Lt(Pt,1)})}v(Le,at)},$$slots:{buttons:!0,default:!0}});var Fe=d(Ue,2);Zl(Fe,{get preview(){return t(z)},get paramset(){return i()},get warnings(){return t(Ve)},get results(){return t($)},get readBack(){return t(le)},get writing(){return o.paramsets.writing},onstage:Ce,onconfirm:()=>{we()},get open(){return t(M)},set open(ke){u(M,ke,!0)}});var Ye=d(Fe,2);{var tt=ke=>{{let Le=c(()=>l("Apply")),$e=c(()=>l("{count} calls will be made",{},t(X)?.entries.length??0));Zl(ke,{get preview(){return t(X)},paramset:"VALUES",get writing(){return t(se)},get confirmLabel(){return t(Le)},get countText(){return t($e)},onconfirm:()=>{be()},get open(){return t(K)},set open(at){u(K,at,!0)}})}};W(Ye,ke=>{t(K)&&ke(tt)})}var ht=d(Ye,2);{var ct=ke=>{nm(ke,{get sender(){return a()},get receiver(){return a()},get open(){return t(b)},set open(Le){u(b,Le,!0)}})};W(ht,ke=>{t(b)&&ke(ct)})}v(r,De),ft()}Et(["click"]);const fA="modulepreload",hA=function(r,e){return new URL(r,e).href},Ru={},mA=function(e,n,s){let a=Promise.resolve();if(n&&n.length>0){let p=function(_){return Promise.all(_.map(g=>Promise.resolve(g).then(k=>({status:"fulfilled",value:k}),k=>({status:"rejected",reason:k}))))};const o=document.getElementsByTagName("link"),l=document.querySelector("meta[property=csp-nonce]"),f=l?.nonce||l?.getAttribute("nonce");a=p(n.map(_=>{if(_=hA(_,s),_ in Ru)return;Ru[_]=!0;const g=_.endsWith(".css"),k=g?'[rel="stylesheet"]':"";if(s)for(let b=o.length-1;b>=0;b--){const w=o[b];if(w.href===_&&(!g||w.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${_}"]${k}`))return;const E=document.createElement("link");if(E.rel=g?"stylesheet":fA,g||(E.as="script"),E.crossOrigin="",E.href=_,f&&E.setAttribute("nonce",f),document.head.appendChild(E),g)return new Promise((b,w)=>{E.addEventListener("load",b),E.addEventListener("error",()=>w(new Error(`Unable to preload CSS for ${_}`)))})}))}function i(o){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=o,window.dispatchEvent(l),!l.defaultPrevented)throw o}return a.then(o=>{for(const l of o||[])l.status==="rejected"&&i(l.reason);return e().catch(i)})};var vA=y('<video class="hmm-qr svelte-1e4doc5" autoplay="" playsinline=""></video>',2);function pA(r,e){ut(e,!0);let n=H(e,"active",3,!1),s=H(e,"onerror",3,void 0),a=H(e,"createReader",3,void 0),i=H(e,"insecureContextMessage",3,"The camera needs https or localhost."),o=H(e,"testId",3,void 0),l=C(void 0),f;ot(()=>{if(!n()){g();return}const w=t(l);if(!w)return;if(!p()){s()?.(i());return}const x={cancelled:!1};return(async()=>{try{const N=await(a()?await a()():await _()).decodeFromVideoDevice(void 0,w,R=>{R&&e.onscan(R.getText())});x.cancelled?N.stop():f=N}catch(D){s()?.(D instanceof Error?D.message:String(D))}})(),()=>{x.cancelled=!0,g()}});function p(){return globalThis.navigator?.mediaDevices!==void 0&&globalThis.isSecureContext}async function _(){const{BrowserQRCodeReader:w}=await mA(async()=>{const{BrowserQRCodeReader:x}=await import("./index-BN6QZh6-.js");return{BrowserQRCodeReader:x}},[],import.meta.url);return new w}function g(){f?.stop(),f=void 0}Cp(g);var k=St(),E=Ne(k);{var b=w=>{var x=vA();x.muted=!0,fn(x,D=>u(l,D),()=>t(l)),S(()=>T(x,"data-testid",o())),v(w,x)};W(E,w=>{n()&&w(b)})}v(r,k),ft()}var gA=y('<button type="button" class="hmm-button"> </button>'),bA=y('<p> </p> <button type="button" class="hmm-button" data-testid="add-device-search">searchDevices</button>',1),_A=y("<option> </option>"),EA=y('<label class="hmm-add-row svelte-rkdrrf"><span class="svelte-rkdrrf">KEY</span> <input data-testid="add-device-key"/></label> <div class="hmm-add-row svelte-rkdrrf"><span class="svelte-rkdrrf"></span> <p class="hmm-add-hint svelte-rkdrrf" data-testid="add-device-key-hint"> </p></div>',1),yA=y('<span class="hmm-add-error svelte-rkdrrf" data-testid="add-device-scan-error"> </span>'),SA=y('<label class="hmm-add-row svelte-rkdrrf"><span class="svelte-rkdrrf">SGTIN</span> <input data-testid="add-device-sgtin"/></label> <!> <div class="hmm-add-row svelte-rkdrrf"><span class="svelte-rkdrrf"> </span> <div class="svelte-rkdrrf"><button type="button" class="hmm-button" data-testid="add-device-scan"> </button> <!></div></div> <!>',1),wA=y('<label class="hmm-add-row svelte-rkdrrf"><span class="svelte-rkdrrf"> </span> <select class="hmm-select svelte-rkdrrf" data-testid="add-device-hmip-mode"><option> </option><!><option> </option></select></label> <div class="hmm-add-row svelte-rkdrrf"><span class="svelte-rkdrrf"></span> <p class="hmm-add-hint svelte-rkdrrf" data-testid="add-device-hmip-hint"> </p></div> <div class="hmm-add-row svelte-rkdrrf"><span class="svelte-rkdrrf"></span> <p class="hmm-add-hint svelte-rkdrrf" data-testid="add-device-ap-hint"> </p></div> <!>',1),kA=y('<section class="hmm-add-key-question svelte-rkdrrf" role="alert" data-testid="add-device-key-mismatch"><h4 class="svelte-rkdrrf"> </h4> <p class="svelte-rkdrrf"> </p> <button type="button" class="hmm-button" data-testid="add-device-key-retry"> </button></section>'),AA=y('<label class="hmm-add-row svelte-rkdrrf"><span class="svelte-rkdrrf"> </span> <select class="hmm-select svelte-rkdrrf" data-testid="add-device-mode"><option> </option><option> </option></select></label> <label class="hmm-add-row svelte-rkdrrf"><span class="svelte-rkdrrf"> </span> <span class="hmm-add-inline svelte-rkdrrf"><input class="hmm-input hmm-mono svelte-rkdrrf" data-testid="add-device-serial"/> <button type="button" class="hmm-button" data-testid="add-device-serial-start"> </button></span></label> <label class="hmm-add-row svelte-rkdrrf"><span class="svelte-rkdrrf"> </span> <input class="hmm-input hmm-mono svelte-rkdrrf" data-testid="add-device-temp-key"/></label> <div class="hmm-add-row svelte-rkdrrf"><span class="svelte-rkdrrf"></span> <p class="hmm-add-hint svelte-rkdrrf" data-testid="add-device-temp-key-hint"> </p></div> <!>',1),TA=y('<span data-testid="add-device-countdown"> </span> <button type="button" class="hmm-button" data-testid="add-device-stop"> </button>',1),RA=y('<p class="hmm-add-notice svelte-rkdrrf" role="status" data-testid="add-device-nothing-joined"> </p>'),xA=y('<label class="hmm-add-row svelte-rkdrrf"><span class="svelte-rkdrrf"> </span> <span class="svelte-rkdrrf"><input class="hmm-input hmm-add-seconds svelte-rkdrrf" type="number" min="10" max="300"/> s</span></label> <div class="hmm-add-actions svelte-rkdrrf"><button type="button" class="hmm-button" data-testid="add-device-start"> </button> <!></div> <!>',1),DA=y('<span data-testid="add-device-inbox-result"> </span>'),IA=y('<p class="hmm-add-notice svelte-rkdrrf" role="status" data-testid="add-device-names-waiting"> </p>'),NA=y('<div class="hmm-add-actions svelte-rkdrrf"><button type="button" class="hmm-button" data-testid="add-device-confirm-inbox"> </button> <!></div> <!>',1),CA=y('<label class="hmm-add-row svelte-rkdrrf"><span class="hmm-mono svelte-rkdrrf"> </span> <input class="hmm-input svelte-rkdrrf"/></label>'),PA=y('<section class="hmm-add-paired svelte-rkdrrf" data-testid="add-device-paired"><h4 class="svelte-rkdrrf"> </h4> <!> <label class="hmm-add-channels svelte-rkdrrf"><input type="checkbox" data-testid="add-device-rename-children"/> <span> </span></label> <button type="button" class="hmm-button" data-testid="add-device-name-save"> </button></section>'),MA=y("<!> <!> <!> <!>",1);function OA(r,e){ut(e,!0);let n=H(e,"open",15,!1),s=H(e,"createReader",3,void 0);const a=Ot(),i=a.i18n.t,o=1e3,l=5;let f=C(60),p=C(1),_=C(""),g=C(""),k=C("KEY"),E=C(void 0),b=C(""),w=C(""),x=C(!1),D=C(""),N=C(0),R=C(!1),M=C(We([])),z=C(We({})),$=C(!0),le=C(""),fe=C(!1),de=C(""),B,oe=!1,K=C(void 0),X=0,se=0;const j=c(()=>a.app.selectedInterface),ne=c(()=>a.interfaces.typeOf(t(j))),ye=c(()=>!t(ne).startsWith("BidCos")&&t(ne)!=="CUxD"),xe=c(()=>t(ne)==="BidCos-Wired"),ie=c(()=>t(k)==="ANY"?!0:t(k)==="SGTIN"?$i(t(b)):$i(t(b))&&_c(t(w))),Ae=c(()=>t(E)?.keyserver_mode==="LOCAL"),Te=c(()=>t(k)==="KEY"?i("Works offline: the key from the sticker is all the interface needs."):t(k)==="SGTIN"?i("The key comes from eQ-3's key server: the box needs internet access."):t(Ae)?i("Pairs the next device in factory state that asks to join, if its key is on the system: the system's key mode never asks eQ-3's key server. {count} device keys are stored on the system.",{},t(E)?.device_keys??0):i("Pairs the next device in factory state that asks to join. Without a key the interface asks eQ-3's key server, so the box needs internet access unless a local key mapping is configured."));ot(()=>{if(!n()||!t(ye))return;let J=!0;return a.devices.hmipPairing().then(ve=>{J&&u(E,ve,!0)}),()=>{J=!1}}),ot(()=>{t(Ae)&&t(k)==="SGTIN"&&u(k,"KEY")}),ot(()=>{n()||(u(x,!1),u(N,0),u(M,[],!0),u(z,{},!0),u($,!0),u(le,""),u(fe,!1),u(de,""),u(g,""),G())}),ot(()=>{t(k)==="ANY"&&u(x,!1)}),ot(()=>{if(n())return a.transport.on("devices.changed",J=>{if(J.interfaceName!==t(j)||J.kind!=="new")return;const ve=J.addresses.filter(ge=>!ge.includes(":")&&!t(M).includes(ge));ve.length>0&&(u(M,[...t(M),...ve],!0),u(de,""),G())})}),ot(()=>{if(!n()||t(N)<=0)return;const J=se,ve=setInterval(()=>{X+=1,a.devices.installModeSeconds(t(j)).then(ge=>{J===se&&(u(N,ge,!0),ge<=0&&(t(M).length===0&&u(fe,!0),G()))}),!t(ye)&&X%l===0&&a.devices.keyMismatchDevice(t(j)).then(ge=>{J===se&&ge!==""&&be(ge)})},o);return()=>{clearInterval(ve)}});async function me(J){u(R,!0),u(fe,!1),u(de,""),se+=1,X=0;const{tempKey:ve,...ge}=J;B=ge,ve!==void 0&&(oe=!0);const te=await a.devices.tryInstallMode(t(j),!0,{seconds:t(f),...J});if(u(R,!1),te!==null){if(!t(ye)&&J.address!==void 0&&await ce())return;a.notices.fromError(te,"setInstallMode");return}J.address===void 0&&u(N,t(f),!0)}async function P(){se+=1,await a.devices.setInstallMode(t(j),!1),u(N,0),await G()}async function ce(){const J=await a.devices.keyMismatchDevice(t(j));return J===""?!1:(await ee(J),!0)}async function be(J){se+=1,u(N,0),await a.devices.setInstallMode(t(j),!1),await ee(J)}async function ee(J){u(de,J,!0),await Ma(),t(K)?.focus()}async function he(){const J=t(g).trim();J===""||B===void 0||await me({...B,tempKey:J})}async function G(){oe&&(oe=!1,await a.devices.setTempKey(t(j),""))}async function Q(){u(R,!0),await a.console.call(t(j),"searchDevices",[""]),u(R,!1),await a.devices.load(t(j),{refresh:!0})}function q(J){const ve=Xb(J);if(!ve){u(D,i("That is not a HomematicIP device code"),!0);return}u(D,""),u(b,ve.sgtin,!0),ve.key!==""&&u(w,ve.key,!0),u(x,!1)}async function Y(){u(R,!0);const J=await a.devices.confirmRegaInbox();u(R,!1),u(le,J.length===0?i("The ReGa inbox is empty"):`${i("Confirmed")}: ${J.join(", ")}`,!0)}async function ae(){const J=t(M).flatMap(ve=>wd(ve,t(z)[ve]??"",a.devices.channels(t(j),ve).map(ge=>ge.ADDRESS),{channels:t($)}));J.length!==0&&await a.names.rename(J)&&u(M,t(M).filter(ve=>(t(z)[ve]??"").trim()===""),!0)}{const J=ge=>{var te=gA(),O=m(te,!0);S(U=>h(O,U),[()=>i("Close")]),re("click",te,()=>n(!1)),v(ge,te)};let ve=c(()=>i("Add device"));En(r,{get title(){return t(ve)},width:"680px",testId:"add-device-dialog",get open(){return n()},set open(ge){n(ge)},buttons:J,children:(ge,te)=>{var O=MA(),U=Ne(O);{var I=_e=>{var Se=bA(),V=Ne(Se),L=m(V,!0),Pe=d(V,2);S(Ge=>{h(L,Ge),Pe.disabled=t(R)},[()=>i("BidCos-Wired has no install mode; the interface searches its bus for new devices.")]),re("click",Pe,()=>{Q()}),v(_e,Se)},F=_e=>{var Se=wA(),V=Ne(Se),L=A(V),Pe=m(L,!0),Ge=d(L,2),qe=A(Ge),we=m(qe,!0);qe.value=qe.__value="KEY";var Ce=d(qe);{var Oe=Le=>{var $e=_A(),at=m($e,!0);$e.value=$e.__value="SGTIN",S(lt=>h(at,lt),[()=>i("With SGTIN only (key server)")]),v(Le,$e)};W(Ce,Le=>{t(Ae)||Le(Oe)})}var Be=d(Ce),pe=m(Be,!0);Be.value=Be.__value="ANY",Xt(Ge);var De=d(V,2),Ue=d(A(De),2),Fe=m(Ue,!0),Ye=d(De,2),tt=d(A(Ye),2),ht=m(tt,!0),ct=d(Ye,2);{var ke=Le=>{var $e=SA(),at=Ne($e),lt=d(A(at),2);let Je;var Pt=d(at,2);{var Tt=Zt=>{var Ft=EA(),Jt=Ne(Ft),Qn=d(A(Jt),2);let Mn;var Or=d(Jt,2),zr=d(A(Or),2),Zn=m(zr,!0);S((jn,Lr)=>{Mn=_t(Qn,1,"hmm-input hmm-mono svelte-rkdrrf",null,Mn,{"hmm-add-invalid":jn}),ln(Qn,t(w)),h(Zn,Lr)},[()=>t(w)!==""&&!_c(t(w)),()=>i("The key from the sticker (26 characters, dashes optional), or scan the QR code.")]),re("input",Qn,jn=>u(w,pi(jn.currentTarget.value),!0)),v(Zt,Ft)};W(Pt,Zt=>{t(k)==="KEY"&&Zt(Tt)})}var Lt=d(Pt,2),Qt=A(Lt),pn=m(Qt,!0),wn=d(Qt,2),tn=A(wn),bn=m(tn,!0),Pn=d(tn,2);{var $n=Zt=>{var Ft=yA(),Jt=m(Ft,!0);S(()=>h(Jt,t(D))),v(Zt,Ft)};W(Pn,Zt=>{t(D)!==""&&Zt($n)})}var Xn=d(Lt,2);{let Zt=c(()=>i("The camera is only available over https or on localhost. Open the page with its https address (the CCU serves it on its https port too, with a certificate warning) or type the key in by hand."));pA(Xn,{get active(){return t(x)},get createReader(){return s()},get insecureContextMessage(){return t(Zt)},onscan:q,onerror:Ft=>{u(D,Ft,!0),u(x,!1)},testId:"add-device-video"})}S((Zt,Ft,Jt)=>{Je=_t(lt,1,"hmm-input hmm-mono svelte-rkdrrf",null,Je,{"hmm-add-invalid":Zt}),ln(lt,t(b)),h(pn,Ft),h(bn,Jt)},[()=>t(b)!==""&&!$i(t(b)),()=>i("QR scanner"),()=>t(x)?i("Stop"):i("Scan")]),re("input",lt,Zt=>u(b,pi(Zt.currentTarget.value),!0)),re("click",tn,()=>{u(D,""),u(x,!t(x))}),v(Le,$e)};W(ct,Le=>{t(k)!=="ANY"&&Le(ke)})}S((Le,$e,at,lt)=>{h(Pe,Le),h(we,$e),h(pe,at),h(Fe,t(Te)),h(ht,lt)},[()=>i("Mode"),()=>i("With SGTIN and key"),()=>i("Any device (no SGTIN)"),()=>i("An access point (HAP, DRAP) is paired like a device: factory-reset it, start the install mode, then power it. System and access point must be in the same network.")]),kr(Ge,()=>t(k),Le=>u(k,Le)),v(_e,Se)},Ee=_e=>{var Se=AA(),V=Ne(Se),L=A(V),Pe=m(L,!0),Ge=d(L,2),qe=A(Ge),we=m(qe,!0);qe.value=qe.__value=1;var Ce=d(qe),Oe=m(Ce,!0);Ce.value=Ce.__value=2,Xt(Ge);var Be=d(V,2),pe=A(Be),De=m(pe,!0),Ue=d(pe,2),Fe=A(Ue),Ye=d(Fe,2),tt=m(Ye,!0),ht=d(Be,2),ct=A(ht),ke=m(ct,!0),Le=d(ct,2);fn(Le,Tt=>u(K,Tt),()=>t(K));var $e=d(ht,2),at=d(A($e),2),lt=m(at,!0),Je=d($e,2);{var Pt=Tt=>{var Lt=kA(),Qt=A(Lt),pn=m(Qt,!0),wn=d(Qt,2),tn=m(wn,!0),bn=d(wn,2),Pn=m(bn,!0);S(($n,Xn,Zt,Ft)=>{h(pn,$n),h(tn,Xn),bn.disabled=Zt,h(Pn,Ft)},[()=>i("Security key of the other system"),()=>i("The device {serial} could not be paired: it holds a security key this system does not know. Enter the security key of the system it was paired to and try again.",{serial:t(de)}),()=>t(R)||t(g).trim()==="",()=>i("Set the key and try again")]),re("click",bn,()=>{he()}),v(Tt,Lt)};W(Je,Tt=>{t(de)!==""&&Tt(Pt)})}S((Tt,Lt,Qt,pn,wn,tn,bn,Pn)=>{h(Pe,Tt),h(we,Lt),h(Oe,Qt),h(De,pn),Ye.disabled=wn,h(tt,tn),h(ke,bn),h(lt,Pn)},[()=>i("Mode"),()=>i("Normal install mode"),()=>i("Write the MASTER defaults and delete the existing links"),()=>i("Serial number"),()=>t(R)||t(_).trim()==="",()=>i("Add by serial number"),()=>i("Temporary key"),()=>i("The security key of the system the device was last paired to, if it holds one. Leave it empty otherwise: the system asks for it when a device is refused for its key.")]),kr(Ge,()=>t(p),Tt=>u(p,Tt)),xn(Fe,()=>t(_),Tt=>u(_,Tt)),re("click",Ye,()=>{me({mode:t(p),address:t(_).trim(),...t(g).trim()===""?{}:{tempKey:t(g).trim()}})}),xn(Le,()=>t(g),Tt=>u(g,Tt)),v(_e,Se)};W(U,_e=>{t(xe)?_e(I):t(ye)?_e(F,1):_e(Ee,-1)})}var Ie=d(U,2);{var Me=_e=>{var Se=xA(),V=Ne(Se),L=A(V),Pe=m(L,!0),Ge=d(L,2),qe=A(Ge),we=d(V,2),Ce=A(we),Oe=m(Ce,!0),Be=d(Ce,2);{var pe=Fe=>{var Ye=TA(),tt=Ne(Ye),ht=m(tt,!0),ct=d(tt,2),ke=m(ct,!0);S((Le,$e)=>{h(ht,Le),h(ke,$e)},[()=>i("{count} seconds left",{},t(N)),()=>i("Stop")]),re("click",ct,()=>{P()}),v(Fe,Ye)};W(Be,Fe=>{t(N)>0&&Fe(pe)})}var De=d(we,2);{var Ue=Fe=>{var Ye=RA(),tt=m(Ye,!0);S(ht=>h(tt,ht),[()=>t(ye)?i("The install mode has ended and no device has joined. A device that is still paired with another central sends no inclusion request: reset it to factory state and start again."):i("The install mode has ended and no device has joined. Put the device into its pairing mode and start again. A device that holds another system's security key is reported here and that key asked for; a factory reset does not remove it.")]),v(Fe,Ye)};W(De,Fe=>{t(fe)&&Fe(Ue)})}S((Fe,Ye)=>{h(Pe,Fe),Ce.disabled=t(R)||t(ye)&&!t(ie),h(Oe,Ye)},[()=>i("Duration"),()=>i("Start install mode")]),xn(qe,()=>t(f),Fe=>u(f,Fe)),re("click",Ce,()=>{me(t(ye)?t(k)==="ANY"?{hmipKeyMode:"ANY"}:{hmipKeyMode:t(k),hmipKey:{sgtin:t(b),key:t(k)==="SGTIN"?"":t(w)}}:{mode:t(p),...t(g).trim()===""?{}:{tempKey:t(g).trim()}})}),v(_e,Se)};W(Ie,_e=>{t(xe)||_e(Me)})}var Ve=d(Ie,2);{var ze=_e=>{var Se=NA(),V=Ne(Se),L=A(V),Pe=m(L,!0),Ge=d(L,2);{var qe=Oe=>{var Be=DA(),pe=m(Be,!0);S(()=>h(pe,t(le))),v(Oe,Be)};W(Ge,Oe=>{t(le)!==""&&Oe(qe)})}var we=d(V,2);{var Ce=Oe=>{var Be=IA(),pe=m(Be,!0);S(De=>h(pe,De),[()=>i("The names reach the CCU once the device is confirmed in the ReGa inbox.")]),v(Oe,Be)};W(we,Oe=>{(a.interfaces.rega.pendingNames?.length??0)>0&&Oe(Ce)})}S(Oe=>{L.disabled=t(R),h(Pe,Oe)},[()=>i("Confirm the ReGa inbox")]),re("click",L,()=>{Y()}),v(_e,Se)};W(Ve,_e=>{a.interfaces.rega?.enabled===!0&&_e(ze)})}var nt=d(Ve,2);{var Ze=_e=>{var Se=PA(),V=A(Se),L=m(V,!0),Pe=d(V,2);Xe(Pe,16,()=>t(M),pe=>pe,(pe,De)=>{var Ue=CA(),Fe=A(Ue),Ye=m(Fe,!0),tt=d(Fe,2);S((ht,ct)=>{h(Ye,De),T(tt,"placeholder",ht),T(tt,"aria-label",ct),ln(tt,t(z)[De]??"")},[()=>i("Name"),()=>`${i("Name")} ${De}`]),re("input",tt,ht=>u(z,{...t(z),[De]:ht.currentTarget.value},!0)),v(pe,Ue)});var Ge=d(Pe,2),qe=A(Ge),we=d(qe,2),Ce=m(we,!0),Oe=d(Ge,2),Be=m(Oe,!0);S((pe,De,Ue)=>{h(L,pe),h(Ce,De),h(Be,Ue)},[()=>i("New"),()=>i("Overwrite channel names"),()=>i("Apply")]),vr(qe,()=>t($),pe=>u($,pe)),re("click",Oe,()=>{ae()}),v(_e,Se)};W(nt,_e=>{t(M).length>0&&_e(Ze)})}v(ge,O)},$$slots:{buttons:!0,default:!0}})}ft()}Et(["click","input"]);const LA=10;function ed(r,e,n){return r(e)?.enums.includes(n)===!0}function FA(r){return r.endsWith(":0")}function im(r,e,n){if(ed(n,r.ref,e))return"on";const s=r.channels.filter(i=>!FA(i)),a=s.filter(i=>ed(n,i,e)).length;return a===0?"off":a===s.length?"on":"mixed"}function GA(r,e,n){let s=0,a=0;for(const i of r){const o=im(i,e,n);o==="on"?s+=1:o==="off"&&(a+=1)}return r.length===0||a===r.length?"off":s===r.length?"on":"mixed"}function UA(r,e,n){return Object.fromEntries(e.map(s=>[s,GA(r,s,n)]))}function BA(r,e){return r==="mixed"?e==="mixed"?"on":e==="on"?"off":"mixed":e==="on"?"off":"on"}function HA(r,e,n){return r.filter(s=>{const a=n[s];return a!==void 0&&a!=="mixed"&&a!==(e[s]??"off")})}function VA(r,e,n,s){const a=[];for(const i of e){const o=n[i]==="on",l=new Set;for(const f of r){if(o){im(f,i,s)!=="on"&&l.add(f.ref);continue}for(const p of[f.ref,...f.channels])ed(s,p,i)&&l.add(p)}l.size>0&&a.push({path:i,on:o,refs:[...l]})}return a}function xu(r){return r.normalize("NFD").replace(/\p{M}/gu,"").toLocaleLowerCase()}function zA(r,e){const n=xu(e.trim());if(n==="")return[...r];const s=r.filter(a=>xu(a.label).includes(n));return r.filter(a=>s.includes(a)||s.some(i=>i.path.startsWith(`${a.path}/`)))}var jA=y('<input type="text" class="hmm-input hmm-assign-filter svelte-2lvopk"/>'),WA=y('<span class="hmm-assign-error svelte-2lvopk" data-testid="assign-error"> </span>'),KA=y('<label data-testid="assign-row"><input type="checkbox" data-testid="assign-check" class="svelte-2lvopk"/> <span class="hmm-assign-name svelte-2lvopk"> </span> <!></label>'),YA=y('<p class="hmm-assign-empty svelte-2lvopk"> </p>'),qA=y('<input type="text" class="hmm-input svelte-2lvopk"/> <button type="button" class="hmm-button"> </button>',1),$A=y('<button type="button" class="hmm-button"> </button>'),XA=y('<section class="hmm-assign-side svelte-2lvopk"><h3 class="hmm-assign-heading svelte-2lvopk"> </h3> <!> <div class="hmm-assign-list svelte-2lvopk" role="group"></div> <div class="hmm-assign-new svelte-2lvopk"><!></div></section>');function Du(r,e){ut(e,!0);let n=H(e,"desired",15),s=H(e,"failures",15);const a=Ot(),i=a.i18n.t,o=a.taxonomy;let l=C(""),f=C(!1),p=C(""),_=C(!1),g=C(void 0),k=C(void 0),E=C(void 0),b=C(void 0);const w=c(()=>o.options(e.enumId)),x=c(()=>zA(t(w),t(l))),D=c(()=>t(w).length>LA),N=c(()=>e.enumId==="room");function R(){u(l,""),u(b,void 0),u(f,!1),u(p,"")}function M(){if(t(k)!==void 0){t(k).focus();return}t(g)?.querySelector('input[type="checkbox"]')?.focus()}function z(ee){return n()[ee]??e.initial[ee]??"off"}function $(ee,he){const G=Q=>{ee.checked=Q==="on",ee.indeterminate=Q==="mixed"};return G(he),{update:G}}function le(ee,he){const G=BA(e.initial[ee]??"off",z(ee));n({...n(),[ee]:G}),s()[ee]!==void 0&&s(Object.fromEntries(Object.entries(s()).filter(([Q])=>Q!==ee))),he.checked=G==="on",he.indeterminate=G==="mixed"}function fe(ee){ee.key==="Enter"&&(ee.preventDefault(),e.onsave())}function de(ee){t(b)===void 0&&t(g)!==void 0&&t(g).offsetHeight>0&&u(b,t(g).offsetHeight,!0),u(l,ee.currentTarget.value,!0)}function B(ee){ee.key==="Enter"&&(ee.preventDefault(),t(g)?.querySelector('input[type="checkbox"]')?.focus())}async function oe(){u(f,!0),await Ma(),t(E)?.focus()}async function K(){const ee=t(p).trim();if(ee===""||t(_))return;u(_,!0);const he=await o.createNode(e.enumId,void 0,ee);u(_,!1),he!==void 0&&(n({...n(),[he]:"on"}),u(p,""),u(f,!1),await Ma(),t(g)?.querySelector(`[data-path="${CSS.escape(he)}"] input`)?.focus())}function X(ee){ee.key==="Enter"&&(ee.preventDefault(),K())}var se={reset:R,focus:M},j=XA(),ne=A(j),ye=m(ne,!0),xe=d(ne,2);{var ie=ee=>{var he=jA();fn(he,G=>u(k,G),()=>t(k)),S((G,Q)=>{ln(he,t(l)),T(he,"placeholder",G),T(he,"aria-label",Q),T(he,"data-testid",`assign-filter-${e.enumId}`)},[()=>t(N)?i("Filter rooms"):i("Filter functions"),()=>t(N)?i("Filter rooms"):i("Filter functions")]),re("input",he,de),re("keydown",he,B),v(ee,he)};W(xe,ee=>{t(D)&&ee(ie)})}var Ae=d(xe,2);let Te;Xe(Ae,21,()=>t(x),ee=>ee.path,(ee,he)=>{const G=c(()=>z(t(he).path)),Q=c(()=>s()[t(he).path]);var q=KA();let Y,ae;var J=A(q);Vf(J,(U,I)=>$?.(U,I),()=>t(G));var ve=d(J,2),ge=m(ve,!0),te=d(ve,2);{var O=U=>{var I=WA(),F=m(I,!0);S(Ee=>h(F,Ee),[()=>i("Not saved: {message}",{message:t(Q)})]),v(U,I)};W(te,U=>{t(Q)!==void 0&&U(O)})}S(U=>{Y=_t(q,1,"hmm-assign-row svelte-2lvopk",null,Y,{"hmm-assign-row-failed":t(Q)!==void 0}),T(q,"data-path",t(he).path),T(q,"data-state",t(G)),ae=Un(q,"",ae,{"padding-inline-start":U}),J.disabled=e.saving,h(ge,t(he).label)},[()=>`${String(6+(t(he).depth-1)*18)}px`]),re("change",J,U=>le(t(he).path,U.currentTarget)),re("keydown",J,fe),v(ee,q)},ee=>{var he=YA(),G=m(he,!0);S(Q=>{T(he,"data-testid",`assign-empty-${e.enumId}`),h(G,Q)},[()=>t(w).length>0?i("No match"):t(N)?i("No rooms yet"):i("No functions yet")]),v(ee,he)}),fn(Ae,ee=>u(g,ee),()=>t(g));var me=d(Ae,2),P=A(me);{var ce=ee=>{var he=qA(),G=Ne(he);fn(G,Y=>u(E,Y),()=>t(E));var Q=d(G,2),q=m(Q,!0);S((Y,ae,J,ve)=>{T(G,"aria-label",Y),T(G,"placeholder",ae),G.disabled=t(_),T(G,"data-testid",`assign-new-name-${e.enumId}`),Q.disabled=J,T(Q,"data-testid",`assign-create-${e.enumId}`),h(q,ve)},[()=>t(N)?i("Name of the new room"):i("Name of the new function"),()=>t(N)?i("Name of the new room"):i("Name of the new function"),()=>t(_)||t(p).trim()==="",()=>i("Create")]),re("keydown",G,X),xn(G,()=>t(p),Y=>u(p,Y)),re("click",Q,()=>{K()}),v(ee,he)},be=ee=>{var he=$A(),G=m(he,!0);S(Q=>{T(he,"data-testid",`assign-new-${e.enumId}`),h(G,Q)},[()=>t(N)?i("New room…"):i("New function…")]),re("click",he,()=>{oe()}),v(ee,he)};W(P,ee=>{t(f)?ee(ce):ee(be,-1)})}return S((ee,he,G,Q)=>{T(j,"aria-label",ee),T(j,"data-testid",`assign-side-${e.enumId}`),h(ye,he),T(Ae,"aria-label",G),T(Ae,"data-testid",`assign-list-${e.enumId}`),Te=Un(Ae,"",Te,{"min-height":Q})},[()=>t(N)?i("Rooms"):i("Functions"),()=>t(N)?i("Rooms"):i("Functions"),()=>t(N)?i("Rooms"):i("Functions"),()=>t(b)===void 0?void 0:`${String(t(b))}px`]),v(r,j),ft(se)}Et(["input","keydown","change","click"]);var QA=y('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="assign-apply"> </button>',1),ZA=y('<p class="hmm-assign-address svelte-17ogdox" data-testid="assign-address"> </p>'),JA=y('<label class="hmm-assign-children svelte-17ogdox"><input type="checkbox" data-testid="assign-rename-children"/> <span> </span></label>'),eT=y('<p class="hmm-assign-summary hmm-assign-name-error svelte-17ogdox" role="alert" data-testid="assign-name-error"> </p>'),tT=y('<div class="hmm-assign-name-row svelte-17ogdox"><label class="hmm-assign-name-field svelte-17ogdox"><span> </span> <input class="hmm-input svelte-17ogdox" data-testid="assign-name"/></label> <!></div> <!>',1),nT=y('<p class="hmm-assign-summary svelte-17ogdox" role="alert" data-testid="assign-summary"> </p>'),rT=y('<!> <!> <p class="hmm-assign-count svelte-17ogdox" data-testid="assign-count"> </p> <div class="hmm-assign-sides svelte-17ogdox"><!> <!></div> <!>',1);function sT(r,e){ut(e,!0);const n=["room","function"];let s=H(e,"open",15,!1),a=H(e,"targets",19,()=>[]),i=H(e,"address",3,""),o=H(e,"canRename",3,!1),l=H(e,"focus",3,"room");const f=Ot(),p=f.i18n.t,_=f.taxonomy,g=()=>({room:{},function:{}});let k=C(We(g())),E=C(We(g())),b=C(We({room:{},function:{}})),w=C(""),x=C(!0),D=C(!1),N=C(!1),R=C(void 0),M=C(void 0),z=C(void 0),$=!1;const le=c(()=>i()!==""&&o()),fe=c(()=>i()!==""&&Ds(i())),de=c(()=>t(fe)?f.devices.channels(f.app.selectedInterface,i()).map(ie=>ie.ADDRESS):[]),B=c(()=>n.reduce((ie,Ae)=>ie+Object.keys(t(b)[Ae]).length,0)),oe=ie=>_.view(ie);function K(ie){return _.options(ie).map(Ae=>Ae.path)}function X(ie){const Ae=K(ie);return[...Ae,...Object.keys(t(E)[ie]).filter(Te=>!Ae.includes(Te))]}function se(ie,Ae){return t(E)[ie][Ae]??t(k)[ie][Ae]??"off"}ot(()=>{s()&&!$&&sr(()=>{const ie=g();for(const Ae of n)ie[Ae]=UA(a(),K(Ae),oe);u(k,ie,!0),u(E,{room:{...ie.room},function:{...ie.function}},!0),u(b,{room:{},function:{}},!0),u(w,i()===""?"":f.knownName(i())??"",!0),u(x,!0),u(D,!1),t(M)?.reset(),t(z)?.reset(),j()}),$=s()});async function j(){if(await Ma(),l()==="name"&&t(le)){t(R)?.focus();return}(l()==="function"?t(z):t(M))?.focus()}function ne(){const ie=t(w).trim();return!t(le)||ie===""||ie===(f.knownName(i())??"")?[]:wd(i(),ie,t(de),{channels:t(x)})}async function ye(){if(!t(N)){u(N,!0);try{const ie=ne(),Ae=ie.length===0?!0:await f.names.rename(ie);u(D,!Ae);const Te={room:[],function:[]},me=[];for(const ee of n)Te[ee]=HA(X(ee),t(k)[ee],t(E)[ee]),me.push(...VA(a(),Te[ee],t(E)[ee],oe));const P=me.length===0?[]:await _.assignEach(me),ce={room:{...t(k).room},function:{...t(k).function}},be={room:{},function:{}};for(const ee of n)for(const he of Te[ee]){const G=P.find(Q=>Q.path===he);G!==void 0&&!G.ok?be[ee][he]=G.message:ce[ee][he]=se(ee,he)}u(k,ce,!0),u(b,be,!0),Ae&&n.every(ee=>Object.keys(be[ee]).length===0)&&s(!1)}finally{u(N,!1)}}}function xe(ie){ie.key==="Enter"&&(ie.preventDefault(),ye())}{const ie=P=>{var ce=QA(),be=Ne(ce),ee=m(be,!0),he=d(be,2),G=m(he,!0);S((Q,q)=>{be.disabled=t(N),h(ee,Q),he.disabled=t(N)||a().length===0,h(G,q)},[()=>p("Cancel"),()=>p("Apply")]),re("click",be,()=>s(!1)),re("click",he,()=>{ye()}),v(P,ce)};let Ae=c(()=>p("Rooms and functions")),Te=c(()=>!t(N)),me=c(()=>p("Close"));En(r,{get title(){return t(Ae)},width:"760px",minWidth:320,get closable(){return t(Te)},get closeLabel(){return t(me)},testId:"assign-dialog",get open(){return s()},set open(P){s(P)},buttons:ie,children:(P,ce)=>{var be=rT(),ee=Ne(be);{var he=O=>{var U=ZA(),I=m(U,!0);S(()=>h(I,i())),v(O,U)};W(ee,O=>{i()!==""&&O(he)})}var G=d(ee,2);{var Q=O=>{var U=tT(),I=Ne(U),F=A(I),Ee=A(F),Ie=m(Ee,!0),Me=d(Ee,2);fn(Me,_e=>u(R,_e),()=>t(R));var Ve=d(F,2);{var ze=_e=>{var Se=JA(),V=A(Se),L=d(V,2),Pe=m(L,!0);S(Ge=>{V.disabled=t(N),h(Pe,Ge)},[()=>p("Overwrite channel names")]),vr(V,()=>t(x),Ge=>u(x,Ge)),v(_e,Se)};W(Ve,_e=>{t(fe)&&_e(ze)})}var nt=d(I,2);{var Ze=_e=>{var Se=eT(),V=m(Se,!0);S(L=>h(V,L),[()=>p("The name was not saved")]),v(_e,Se)};W(nt,_e=>{t(D)&&_e(Ze)})}S(_e=>{h(Ie,_e),Me.disabled=t(N)},[()=>p("Name")]),re("keydown",Me,xe),xn(Me,()=>t(w),_e=>u(w,_e)),v(O,U)};W(G,O=>{t(le)&&O(Q)})}var q=d(G,2),Y=m(q,!0),ae=d(q,2),J=A(ae);fn(Du(J,{enumId:"room",get initial(){return t(k).room},get saving(){return t(N)},onsave:()=>{ye()},get desired(){return t(E).room},set desired(O){t(E).room=O},get failures(){return t(b).room},set failures(O){t(b).room=O}}),O=>u(M,O,!0),()=>t(M));var ve=d(J,2);fn(Du(ve,{enumId:"function",get initial(){return t(k).function},get saving(){return t(N)},onsave:()=>{ye()},get desired(){return t(E).function},set desired(O){t(E).function=O},get failures(){return t(b).function},set failures(O){t(b).function=O}}),O=>u(z,O,!0),()=>t(z));var ge=d(ae,2);{var te=O=>{var U=nT(),I=m(U,!0);S(F=>h(I,F),[()=>p("{count} changes were not saved",{},t(B))]),v(O,U)};W(ge,O=>{t(B)>0&&O(te)})}S(O=>h(Y,O),[()=>p("{count} rows selected",{},a().length)]),v(P,be)},$$slots:{buttons:!0,default:!0}})}ft()}Et(["click","keydown"]);var aT=y('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button hmm-danger svelte-y0v77l" data-testid="delete-device-confirm"> </button>',1),iT=y('<h4 class="svelte-y0v77l"> </h4> <p class="hmm-delete-address svelte-y0v77l"> </p> <select class="hmm-select hmm-delete-select svelte-y0v77l"><option> </option><option> </option></select> <p> </p> <select class="hmm-select hmm-delete-select svelte-y0v77l"><option> </option><option> </option></select> <p class="hmm-delete-flags svelte-y0v77l"> </p>',1);function oT(r,e){ut(e,!0);let n=H(e,"open",15,!1),s=H(e,"address",3,"");const a=Ot(),i=a.i18n.t;let o=C(1),l=C(4),f=C(!1);const p=c(()=>t(o)+t(l)),_=c(()=>a.nameOf(s()));ot(()=>{n()&&(u(o,1),u(l,4))});async function g(){u(f,!0);const k=await a.devices.remove(a.app.selectedInterface,s(),t(p));u(f,!1),k&&n(!1)}{const k=b=>{var w=aT(),x=Ne(w),D=m(x,!0),N=d(x,2),R=m(N,!0);S((M,z)=>{h(D,M),N.disabled=t(f),h(R,z)},[()=>i("Cancel"),()=>i("Delete")]),re("click",x,()=>n(!1)),re("click",N,()=>{g()}),v(b,w)};let E=c(()=>i("Delete device"));En(r,{get title(){return t(E)},width:"560px",testId:"delete-device-dialog",get open(){return n()},set open(b){n(b)},buttons:k,children:(b,w)=>{var x=iT(),D=Ne(x),N=m(D,!0),R=d(D,2),M=m(R,!0),z=d(R,2),$=A(z),le=m($,!0);$.value=$.__value=1;var fe=d($),de=m(fe,!0);fe.value=fe.__value=0,Xt(z);var B=d(z,2),oe=m(B,!0),K=d(B,2),X=A(K),se=m(X,!0);X.value=X.__value=4;var j=d(X),ne=m(j,!0);j.value=j.__value=2,Xt(K);var ye=d(K,2),xe=m(ye);S((ie,Ae,Te,me,P,ce,be,ee)=>{h(N,ie),h(M,s()),T(z,"aria-label",Ae),h(le,Te),h(de,me),h(oe,P),T(K,"aria-label",ce),h(se,be),h(ne,ee),h(xe,`FLAGS = ${t(p)??""}`)},[()=>i("Do you really want to delete the device {name}?",{name:t(_)}),()=>i("Delete device"),()=>i("Unlearn and reset the device to factory defaults"),()=>i("Unlearn only (direct links are kept)"),()=>i("If the device cannot be reached:"),()=>i("If the device cannot be reached:"),()=>i("Delete at the next opportunity"),()=>i("Delete from the interface process only")]),kr(z,()=>t(o),ie=>u(o,ie)),kr(K,()=>t(l),ie=>u(l,ie)),v(b,x)},$$slots:{buttons:!0,default:!0}})}ft()}Et(["click"]);var lT=y('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="rename-save"> </button>',1),dT=y('<label class="hmm-rename-children svelte-111tkcw"><input type="checkbox" data-testid="rename-children"/> <span> </span></label>'),cT=y('<p class="hmm-rename-address svelte-111tkcw"> </p> <input class="hmm-input hmm-rename-input svelte-111tkcw" data-testid="rename-input"/> <!>',1);function uT(r,e){ut(e,!0);let n=H(e,"open",15,!1),s=H(e,"address",3,"");const a=Ot(),i=a.i18n.t;let o=C(""),l=C(!0),f=C(!1);const p=c(()=>s()!==""&&Ds(s())),_=c(()=>t(p)?a.devices.channels(a.app.selectedInterface,s()).map(E=>E.ADDRESS):[]);ot(()=>{n()&&(u(o,a.knownName(s())??"",!0),u(l,!0))});const g=c(()=>wd(s(),t(o),t(_),{channels:t(l)}));async function k(){const E=t(g);if(E.length===0)return;u(f,!0);const b=await a.names.rename(E);u(f,!1),b&&n(!1)}{const E=w=>{var x=lT(),D=Ne(x),N=m(D,!0),R=d(D,2),M=m(R,!0);S((z,$)=>{h(N,z),R.disabled=t(f)||t(g).length===0,h(M,$)},[()=>i("Cancel"),()=>i("Apply")]),re("click",D,()=>n(!1)),re("click",R,()=>{k()}),v(w,x)};let b=c(()=>i("Rename"));En(r,{get title(){return t(b)},width:"520px",testId:"rename-dialog",get open(){return n()},set open(w){n(w)},buttons:E,children:(w,x)=>{var D=cT(),N=Ne(D),R=m(N,!0),M=d(N,2),z=d(M,2);{var $=le=>{var fe=dT(),de=A(fe),B=d(de,2),oe=m(B,!0);S(K=>h(oe,K),[()=>i("Overwrite channel names")]),vr(de,()=>t(l),K=>u(l,K)),v(le,fe)};W(z,le=>{t(p)&&le($)})}S(le=>{h(R,s()),T(M,"aria-label",le)},[()=>i("Name")]),re("keydown",M,le=>{le.key==="Enter"&&k()}),xn(M,()=>t(o),le=>u(o,le)),v(w,D)},$$slots:{buttons:!0,default:!0}})}ft()}Et(["click","keydown"]);var fT=y('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="repair-confirm"> </button>',1),hT=y('<p class="hmm-repair-note svelte-g84sn7" data-testid="repair-bidcos-note"> </p>'),mT=y("<p> </p>"),vT=y('<p data-testid="repair-failed"> </p>'),pT=y('→ <span class="hmm-mono" data-testid="repair-pending-after"> </span>',1),gT=y('<li class="hmm-mono"> </li>'),bT=y('<div class="hmm-repair-unrepairable svelte-g84sn7" data-testid="repair-unrepairable"><p> </p> <ul class="svelte-g84sn7"></ul></div>'),_T=y('<tr><td class="hmm-mono svelte-g84sn7"> </td><td class="hmm-mono svelte-g84sn7"> </td><td class="svelte-g84sn7"> </td><td class="svelte-g84sn7"> </td><td class="svelte-g84sn7"> </td></tr>'),ET=y('<table class="hmm-repair-table svelte-g84sn7" data-testid="repair-corrections"><thead><tr><th class="svelte-g84sn7"> </th><th class="svelte-g84sn7"> </th><th class="svelte-g84sn7"> </th><th class="svelte-g84sn7"> </th><th class="svelte-g84sn7"> </th></tr></thead><tbody></tbody></table>'),yT=y('<p data-testid="repair-nothing"> </p>'),ST=y('<label class="hmm-repair-recovery svelte-g84sn7"><span> </span> <select class="hmm-select" data-testid="repair-recovery"><option>—</option><option>clearConfigCache</option><option>restoreConfigToDevice</option></select></label>'),wT=y('<li><span class="hmm-mono"> </span> </li>'),kT=y('<ul class="hmm-repair-results svelte-g84sn7" data-testid="repair-results"></ul>'),AT=y('<p>CONFIG_PENDING: <span class="hmm-mono"> </span> <!></p> <!> <!> <!> <!>',1),TT=y('<p class="hmm-repair-address svelte-g84sn7"> <span class="hmm-mono"> </span></p> <!> <!>',1);function RT(r,e){ut(e,!0);let n=H(e,"open",15,!1),s=H(e,"address",3,"");const a=Ot(),i=a.i18n.t;let o=C(void 0),l=C(void 0),f=C(!1),p=C(!1),_=C("none"),g=0;const k=c(()=>a.app.selectedInterface),E=c(()=>!a.interfaces.typeOf(t(k)).startsWith("BidCos")),b=c(()=>t(l)??t(o)),w=c(()=>t(b)?.channels.flatMap(D=>D.corrected.map(N=>({channel:D,c:N})))??[]);ot(()=>{if(!n()||s()===""||t(k)==="")return;const D=g+=1;u(f,!0),u(l,void 0),u(_,"none"),a.devices.repairConfig(t(k),s(),{dryRun:!0}).then(N=>{D===g&&(u(o,N,!0),u(f,!1))})});async function x(){u(p,!0),u(l,await a.devices.repairConfig(t(k),s(),{...t(E)||t(_)==="none"?{}:{bidcosRecovery:t(_)}}),!0),u(p,!1),t(l)&&(await a.devices.load(t(k),{refresh:!0}),await a.serviceMessages.load())}{const D=R=>{var M=fT(),z=Ne(M),$=m(z,!0),le=d(z,2),fe=m(le,!0);S((de,B)=>{h($,de),le.disabled=t(p)||t(b)===void 0||t(l)!==void 0,h(fe,B)},[()=>i("Close"),()=>i("Repair configuration")]),re("click",z,()=>n(!1)),re("click",le,()=>{x()}),v(R,M)};let N=c(()=>i("Repair configuration"));En(r,{get title(){return t(N)},width:"720px",testId:"repair-dialog",get open(){return n()},set open(R){n(R)},buttons:D,children:(R,M)=>{var z=TT(),$=Ne(z),le=A($),fe=d(le),de=m(fe,!0),B=d($,2);{var oe=ne=>{var ye=hT(),xe=m(ye,!0);S(ie=>h(xe,ie),[()=>i("On BidCos a pending configuration is normal: it is queued and the device takes it when it next wakes up.")]),v(ne,ye)};W(B,ne=>{t(E)||ne(oe)})}var K=d(B,2);{var X=ne=>{var ye=mT(),xe=m(ye,!0);S(ie=>h(xe,ie),[()=>i("Loading Homematic Manager...")]),v(ne,ye)},se=ne=>{var ye=vT(),xe=m(ye,!0);S(ie=>h(xe,ie),[()=>i("No data")]),v(ne,ye)},j=ne=>{var ye=AT(),xe=Ne(ye),ie=d(A(xe)),Ae=m(ie,!0),Te=d(ie,2);{var me=ae=>{var J=pT(),ve=d(Ne(J)),ge=m(ve,!0);S(te=>h(ge,te),[()=>String(t(l).configPendingAfter??"—")]),v(ae,J)};W(Te,ae=>{t(l)&&ae(me)})}var P=d(xe,2);{var ce=ae=>{var J=bT(),ve=A(J),ge=m(ve,!0),te=d(ve,2);Xe(te,20,()=>t(b).unrepairable,O=>O,(O,U)=>{var I=gT(),F=m(I,!0);S(()=>h(F,U)),v(O,I)}),S(O=>h(ge,O),[()=>i("These channels store a parameter their description does not have. No RPC method removes it: the device has to be deleted and paired again, or a CCU backup from before the bad write restored.")]),v(ae,J)};W(P,ae=>{t(b).unrepairable.length>0&&ae(ce)})}var be=d(P,2);{var ee=ae=>{var J=ET(),ve=A(J),ge=A(ve),te=A(ge),O=m(te,!0),U=d(te),I=m(U,!0),F=d(U),Ee=m(F,!0),Ie=d(F),Me=m(Ie,!0),Ve=d(Ie),ze=m(Ve,!0),nt=d(ve);Xe(nt,21,()=>t(w),Ze=>`${Ze.channel.address}-${Ze.c.parameter}`,(Ze,_e)=>{var Se=_T(),V=A(Se),L=m(V,!0),Pe=d(V),Ge=m(Pe,!0),qe=d(Pe),we=m(qe,!0),Ce=d(qe),Oe=m(Ce,!0),Be=d(Ce),pe=m(Be,!0);S((De,Ue)=>{h(L,t(_e).channel.address),h(Ge,t(_e).c.parameter),h(we,De),h(Oe,Ue),h(pe,t(_e).c.reason)},[()=>za(t(_e).c.stored,void 0),()=>za(t(_e).c.replacement,void 0)]),v(Ze,Se)}),S((Ze,_e,Se,V,L)=>{h(O,Ze),h(I,_e),h(Ee,Se),h(Me,V),h(ze,L)},[()=>i("Channel"),()=>i("Parameter"),()=>i("Current value"),()=>i("New value"),()=>i("Message")]),v(ae,J)},he=ae=>{var J=yT(),ve=m(J,!0);S(ge=>h(ve,ge),[()=>i("Nothing has to be corrected")]),v(ae,J)};W(be,ae=>{t(w).length>0?ae(ee):ae(he,-1)})}var G=d(be,2);{var Q=ae=>{var J=ST(),ve=A(J),ge=m(ve,!0),te=d(ve,2),O=A(te);O.value=O.__value="none";var U=d(O);U.value=U.__value="clearConfigCache";var I=d(U);I.value=I.__value="restoreConfigToDevice",Xt(te),S(F=>h(ge,F),[()=>i("Additional BidCos recovery")]),kr(te,()=>t(_),F=>u(_,F)),v(ae,J)};W(G,ae=>{t(E)||ae(Q)})}var q=d(G,2);{var Y=ae=>{var J=kT();Xe(J,21,()=>t(l).channels,ve=>ve.address,(ve,ge)=>{var te=wT();let O;var U=A(te),I=m(U,!0),F=d(U);S(()=>{O=_t(te,1,"svelte-g84sn7",null,O,{"hmm-repair-failed":!t(ge).write.ok}),h(I,t(ge).address),h(F,` ${t(ge).write.ok?"✔":`✕ ${t(ge).write.faultString??""}`}`)}),v(ve,te)}),v(ae,J)};W(q,ae=>{t(l)&&ae(Y)})}S(ae=>h(Ae,ae),[()=>String(t(b).configPendingBefore??"—")]),v(ne,ye)};W(K,ne=>{t(f)?ne(X):t(b)?ne(j,-1):ne(se,1)})}S(ne=>{h(le,`${ne??""} `),h(de,s())},[()=>a.nameOf(s())]),v(R,z)},$$slots:{buttons:!0,default:!0}})}ft()}Et(["click"]);var xT=y('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="replace-device-confirm"> </button>',1),DT=y("<p> </p>"),IT=y('<p data-testid="replace-none"> </p>'),NT=y("<option> </option>"),CT=y('<select class="hmm-select hmm-replace-select svelte-novg4s"></select>'),PT=y('<h4 class="svelte-novg4s"> </h4> <p class="hmm-replace-new svelte-novg4s"> <span class="hmm-mono"> </span></p> <!>',1);function MT(r,e){ut(e,!0);let n=H(e,"open",15,!1),s=H(e,"address",3,"");const a=Ot(),i=a.i18n.t;let o=C(We([])),l=C(""),f=C(!1),p=C(!1);const _=c(()=>t(o).filter(k=>!k.ADDRESS.includes(":")));ot(()=>{if(!n()||s()==="")return;const k=s();u(f,!0),u(l,""),a.devices.replaceable(a.app.selectedInterface,k).then(E=>{u(o,E,!0),u(l,E.find(b=>!b.ADDRESS.includes(":"))?.ADDRESS??"",!0),u(f,!1)})});async function g(){u(p,!0);const k=await a.devices.replace(a.app.selectedInterface,t(l),s());u(p,!1),k&&n(!1)}{const k=b=>{var w=xT(),x=Ne(w),D=m(x,!0),N=d(x,2),R=m(N,!0);S((M,z)=>{h(D,M),N.disabled=t(p)||t(l)==="",h(R,z)},[()=>i("Cancel"),()=>i("Replace")]),re("click",x,()=>n(!1)),re("click",N,()=>{g()}),v(b,w)};let E=c(()=>i("Replace device"));En(r,{get title(){return t(E)},width:"560px",testId:"replace-device-dialog",get open(){return n()},set open(b){n(b)},buttons:k,children:(b,w)=>{var x=PT(),D=Ne(x),N=m(D,!0),R=d(D,2),M=A(R),z=d(M),$=m(z,!0),le=d(R,2);{var fe=oe=>{var K=DT(),X=m(K,!0);S(se=>h(X,se),[()=>i("Loading Homematic Manager...")]),v(oe,K)},de=oe=>{var K=IT(),X=m(K,!0);S(se=>h(X,se),[()=>i("No suitable device available")]),v(oe,K)},B=oe=>{var K=CT();Xe(K,21,()=>t(_),X=>X.ADDRESS,(X,se)=>{var j=NT(),ne=m(j),ye={};S(xe=>{h(ne,`${xe??""} (${t(se).ADDRESS??""})`),ye!==(ye=t(se).ADDRESS)&&(j.value=(j.__value=ye)??"")},[()=>a.nameOf(t(se).ADDRESS)]),v(X,j)}),Xt(K),S(X=>T(K,"aria-label",X),[()=>i("Replace device")]),kr(K,()=>t(l),X=>u(l,X)),v(oe,K)};W(le,oe=>{t(f)?oe(fe):t(_).length===0?oe(de,1):oe(B,-1)})}S((oe,K)=>{h(N,oe),h(M,`${K??""}: `),h($,s())},[()=>i("Which device do you want to replace?"),()=>i("New device")]),v(b,x)},$$slots:{buttons:!0,default:!0}})}ft()}Et(["click"]);var OT=y("<!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!>",1),Iu=y("<option> </option>"),LT=y('<select class="hmm-select hmm-taxonomy-filter svelte-1fmr35a" data-testid="devices-filter-room"><option> </option><!></select> <select class="hmm-select hmm-taxonomy-filter svelte-1fmr35a" data-testid="devices-filter-function"><option> </option><!></select>',1),FT=y('<button type="button" class="hmm-inline-button hmm-inline-button-first svelte-1fmr35a">✎</button> <span> </span>',1),GT=y('<button type="button" class="hmm-inline-button svelte-1fmr35a">⚒</button>'),UT=y("<!> <!>",1),BT=y('<span class="hmm-msg-cell svelte-1fmr35a"></span>'),HT=y('<span class="hmm-firmware-status svelte-1fmr35a"> </span>'),VT=y('<button type="button" class="hmm-inline-button hmm-firmware-action svelte-1fmr35a"> </button>'),zT=y('<span class="hmm-firmware-status svelte-1fmr35a"> <!></span>'),jT=y('<span class="hmm-firmware-cell svelte-1fmr35a"><span class="hmm-firmware-version svelte-1fmr35a"> </span> <!></span>'),WT=y('<button type="button" class="hmm-inline-button svelte-1fmr35a"> </button>'),KT=y("<span></span>"),YT=y('<span title="AES_ACTIVE" aria-label="AES_ACTIVE" role="img">🔑</span>'),qT=y('<span class="hmm-type-cell svelte-1fmr35a"><span class="hmm-type-text svelte-1fmr35a"> </span> <!></span>'),$T=y('<span class="hmm-roaming svelte-1fmr35a" title="ROAMING" aria-label="ROAMING" role="img">⇄</span>'),XT=y("<span> </span> <!>",1),QT=y('<div class="hmm-page svelte-1fmr35a"><div class="hmm-page-grid svelte-1fmr35a"><!></div></div> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!>',1);function ZT(r,e){ut(e,!0);const n=Ot(),s=n.i18n.t;let a=C(We([])),i=C(We([])),o=C(!1),l=C(0),f=C(0),p=C(""),_=C(!1),g=C(!1),k=C(!1),E=C(!1),b=C(!1),w=C(""),x=C(!1),D=C(We([])),N=C(We([])),R=C(!1),M=C(!1),z=C(""),$=C(void 0),le=C(!1),fe=C(""),de=C("MASTER"),B=C(!1),oe=C("room"),K=C(We([])),X=C(""),se=C(""),j=C("");const ne=c(()=>n.app.selectedInterface),ye=c(()=>n.interfaces.typeOf(t(ne))),xe=c(()=>n.devices.index(t(ne))),ie=c(()=>_i(t(ne),t(ye))),Ae=c(()=>t(ie)&&t(xe)!==void 0?t(xe).channels().filter(ue=>oh(ue)).map(ue=>ue.ADDRESS):[]);ot(()=>{if(t(ne)===""||t(xe)===void 0||!t(ie))return;const ue=t(ne),He=t(Ae);sr(()=>{n.smokeGroups.sync(ue,He)})});const Te=c(()=>t(ye)==="HmIP-RF");ot(()=>{if(t(ne)===""||t(xe)===void 0||!t(Te))return;const ue=t(ne);sr(()=>{n.routers.ensure(ue)})});const me=c(()=>n.smokeGroups.of(t(ne))),P=c(()=>t(xe)===void 0?[]:[...Vb(t(xe)),...t(ie)?zb(t(me)):[]]),ce=c(()=>Object.fromEntries(t(P).map(ue=>[ue.address,ue]))),be=c(()=>t(P).filter(ue=>ue.kind==="hmip").map(ue=>Wb(ue.number??0))),ee=c(()=>jb(t(me)));function he(ue){return ue in t(ce)}function G(ue){return(t(ce)[ue]?.members??[]).map(He=>t(xe)?.get(He)).filter(He=>He!==void 0)}function Q(ue){const He=[],Vt=t(xe)===void 0?void 0:lh(t(xe),ue);Vt!==void 0&&He.push(n.nameOf(Vt));for(const yn of t(me)[ue]??[])He.push(s("Smoke group {n}",{n:yn}));return He}function q(ue){const He=t(ce)[ue.ADDRESS];if(He!==void 0)return s("{count} detectors",{},He.members.length);const Vt=Ds(ue.ADDRESS)?n.devices.channels(t(ne),ue.ADDRESS).map(yn=>yn.ADDRESS):[ue.ADDRESS];return[...new Set(Vt.flatMap(yn=>Q(yn)))].join(", ")}function Y(ue){const He=t(ce)[ue]?.number;return na(ue)&&He!==void 0?s("Smoke group {n}",{n:He}):n.nameOf(ue)}function ae(ue){if(!na(ue.ADDRESS))return el(ue.ADDRESS,t(F));const He={};for(const Vt of G(ue.ADDRESS))for(const yn of el(Fa(Vt.ADDRESS),t(F),99))He[yn.datapoint]=yn;return Object.values(He)}function J(ue){return G(ue)[0]?.PARENT_TYPE??"HmIP-SWSD"}function ve(ue){u($,void 0),u(z,ue,!0),u(M,!0)}function ge(){t(ee)!==void 0&&(u($,{address:Td(t(ee)),kind:"hmip",number:t(ee),members:[]},!0),u(z,""),u(M,!0))}const te=c(()=>t($)??(t(z)===""?void 0:t(ce)[t(z)])),O=c(()=>t(ie)&&t(Ae).length>0&&t(ee)!==void 0),U=c(()=>t(ie)?t(Ae).length===0?s("This interface has no smoke detector"):s("All eight smoke groups are in use"):s("Only available on HmIP interfaces")),I=c(()=>[...t(be),...n.devices.devices(t(ne))]),F=c(()=>n.serviceMessages.of(t(ne))),Ee=c(()=>n.radio.gateways(t(ne)));ot(()=>{t(ye)==="BidCos-RF"&&n.radio.ensureGateways(t(ne))}),ot(()=>{t(ne),u(a,[],!0),u(i,[],!0),u(se,""),u(j,"")});const Ie=c(()=>n.taxonomy),Me=c(()=>t(Ie).options("room")),Ve=c(()=>t(Ie).options("function")),ze=c(()=>[t(se),t(j)].filter(ue=>ue!==""));ot(()=>{t(se)!==""&&!t(Me).some(ue=>ue.path===t(se))&&u(se,""),t(j)!==""&&!t(Ve).some(ue=>ue.path===t(j))&&u(j,"")});function nt(ue){return t(Ie).refOf(t(ne),ue)}function Ze(ue){return t(Ie).view(nt(ue))}function _e(ue){return n.devices.channels(t(ne),ue.ADDRESS).map(He=>Ze(He.ADDRESS))}function Se(ue,He){return(Ds(ue.ADDRESS)?Kh(Ze(ue.ADDRESS),_e(ue),He):$l(Ze(ue.ADDRESS),He)).join(", ")}const V=c(()=>t(ze).length===0?t(I):t(I).filter(ue=>t(ze).every(He=>na(ue.ADDRESS)?G(ue.ADDRESS).some(Vt=>L(Vt,He)):Wh(Ze(ue.ADDRESS),_e(ue),He))));function L(ue,He){return lu(Ze(ue.ADDRESS),Ze(Fa(ue.ADDRESS)),He)}ot(()=>{t(ne)!==""&&n.links.ensure(t(ne))});const Pe=c(()=>n.devices.isLoading(t(ne))?s("Loading Homematic Manager..."):n.devices.hasFailed(t(ne))?s("The device list could not be read - press Refresh to try again"):t(xe)===void 0?s("Loading Homematic Manager..."):t(I).length>0?s("No device matches the room or function filter"):s("No devices - the interface has not reported any yet")),Ge=c(()=>t(a).length===1?t(a)[0]??"":""),qe=c(()=>t(Ge)!==""&&Ds(t(Ge))?t(Ge):""),we=c(()=>t(a).filter(ue=>!Ds(ue)&&!aa(ue)));function Ce(ue){return ue!==""&&!aa(ue)&&!na(ue)}const Oe=c(()=>Ce(t(Ge))),Be=c(()=>t(qe)!==""&&Gi(t(xe)?.get(t(qe))?.FLAGS).dontDelete),pe=c(()=>t(qe)!==""&&!na(t(qe))?t(qe):""),De=c(()=>t(pe)!==""&&!t(Be)),Ue=c(()=>t(ye).startsWith("BidCos")),Fe=c(()=>Rb(t(ye)));function Ye(ue){switch(ue){case"device":return s("Select a device");case"channel":return s("Select one or more channels");case"delete":return t(Be)?s("This device carries the DontDelete flag"):s("Select a device");case"bidcos":return s("Only available on BidCos interfaces")}}const tt=c(()=>[{key:"icon",label:"",width:Ba,fixed:!0,sortable:!1,filterable:!1,align:"center",value:()=>""},{key:"name",label:s("Name"),width:170,copy:"name",value:ue=>Y(ue.ADDRESS)},{key:"ADDRESS",label:"ADDRESS",width:150,mono:!0,copy:"address"},{key:"rooms",label:s("Rooms"),width:120,value:ue=>Se(ue,"room"),onactivate:ue=>Je("room",ue.ADDRESS)},{key:"functions",label:s("Functions"),width:110,value:ue=>Se(ue,"function"),onactivate:ue=>Je("function",ue.ADDRESS)},{key:"smokeGroup",label:s("Smoke group"),width:150,minWidth:70,keepMinWidth:!0,hidden:t(P).length===0,value:ue=>q(ue)},{key:"msgs",label:"Msgs",width:su,minWidth:su,keepMinWidth:!0,align:"center",filterable:!1,sortable:!1,value:ue=>ae(ue).map(He=>He.datapoint).join(" ")},{key:"TYPE",label:"TYPE",width:150},{key:"SUBTYPE",label:"SUBTYPE",width:90,hidden:t(ye)!=="HmIP-RF"},{key:"FIRMWARE",label:"FIRMWARE",width:au,minWidth:au,keepMinWidth:!0,value:ue=>`${ue.FIRMWARE??""} ${ue.AVAILABLE_FIRMWARE??""}`.trim()},{key:"PARAMSETS",label:"PARAMSETS",width:Bi,minWidth:Bi,keepMinWidth:!0,sortable:!1,value:ue=>ct(ue).names.join(" ")},{key:"FLAGS",label:"FLAGS",width:130,value:ue=>Gi(ue.FLAGS).labels.join(" ")},{key:"INTERFACE",label:"INTERFACE",width:130,hidden:t(ye)!=="BidCos-RF",value:ue=>Cc(ue,t(Ee))},{key:"RX_MODE",label:"RX_MODE",width:130,hidden:t(ye)==="BidCos-Wired",value:ue=>Pb(ue.RX_MODE).join(" ")}]),ht=c(()=>[{key:"name",label:s("Name"),width:170,copy:"name",value:ue=>n.nameOf(ue.ADDRESS)},{key:"ADDRESS",label:"ADDRESS",width:150,mono:!0,copy:"address"},{key:"rooms",label:s("Rooms"),width:120,value:ue=>Se(ue,"room"),onactivate:ue=>Je("room",ue.ADDRESS)},{key:"functions",label:s("Functions"),width:110,value:ue=>Se(ue,"function"),onactivate:ue=>Je("function",ue.ADDRESS)},{key:"smokeGroup",label:s("Smoke group"),width:150,hidden:t(P).length===0,value:ue=>q(ue)},{key:"TYPE",label:"TYPE",width:150},{key:"DIRECTION",label:"DIRECTION",width:100,value:ue=>Ob(ue.DIRECTION)},{key:"PARAMSETS",label:"PARAMSETS",width:Bi,minWidth:Bi,keepMinWidth:!0,sortable:!1,value:ue=>ct(ue).names.join(" ")},{key:"FLAGS",label:"FLAGS",width:130,value:ue=>Gi(ue.FLAGS).labels.join(" ")},{key:"links",label:s("Links"),width:60,align:"right",filterable:!1,value:ue=>{const He=n.links.forAddress(t(ne),ue.ADDRESS).length;return He===0?"":He}},{key:"AES_ACTIVE",label:"AES_ACTIVE",width:90,hidden:t(ye)!=="BidCos-RF",value:ue=>ue.AES_ACTIVE?"🔑":""}]);function ct(ue){const He=Ds(ue.ADDRESS)?void 0:t(xe)?.parentOf(ue.ADDRESS),Vt=_i(t(ne),t(ye))&&aa(ue.ADDRESS),yn=Nb(ue.ADDRESS)||ua(ue);return LS(ue.PARAMSETS,ir=>{const it=n.paramsets.contentOf(t(ne),ue,ir,He);return ir!=="MASTER"||it!=="empty"||!Vt?it:n.paramsets.contentOf(t(ne),ue,"VALUES",He,"service-messages")},{channel:yn})}function ke(ue){const He=t(xe)?.get(ue);return{canSend:As(He?.LINK_SOURCE_ROLES).length>0,canReceive:As(He?.LINK_TARGET_ROLES).length>0,links:n.links.forAddress(t(ne),ue).length}}function Le(ue){const He=n.devices.channels(t(ne),ue.ADDRESS),Vt=he(ue.ADDRESS)?G(ue.ADDRESS):[];if(t(ze).length===0)return[...He,...Vt];const yn=Ze(ue.ADDRESS);return[...He.filter(ir=>t(ze).every(it=>lu(Ze(ir.ADDRESS),yn,it))),...Vt.filter(ir=>t(ze).every(it=>L(ir,it)))]}function $e(ue){return{ref:nt(ue),channels:Ds(ue)?n.devices.channels(t(ne),ue).map(He=>nt(He.ADDRESS)):[]}}function at(ue,He){He.length!==0&&(u(oe,ue,!0),u(K,He.map(Vt=>$e(Vt)),!0),u(X,He.length===1?He[0]??"":"",!0),u(B,!0))}function lt(ue,He){at(ue,He===void 0||t(a).includes(He)?t(a):[He])}function Je(ue,He){t(Ie).writable&&at(ue,[He])}const Pt=c(()=>t(a).length>0&&t(Ie).writable),Tt=c(()=>t(Ie).available?t(Ie).writable?s("Select one or more rows"):s("The store does not take writes"):s("No store connected")),Lt=c(()=>Math.max(3,...t(V).map(ue=>{const He=pn(ue);return He.busy||He.action!==void 0||He.status!==void 0?He.firmware.length:0})));function Qt(ue){return el(ue,t(F),99).some(He=>He.datapoint==="UPDATE_PENDING")}function pn(ue){return US(ue,{busy:n.devices.firmwareBusy.includes(ue.ADDRESS),updatePending:Qt(ue.ADDRESS)})}async function wn(ue){const He=pn(ue);He.action==="install"?await n.devices.installFirmware(t(ne),ue.ADDRESS):He.action==="update"&&await n.devices.updateFirmware(t(ne),[ue.ADDRESS])}ot(()=>{const ue=t(ne),He=ue===""?0:n.devices.firmwarePollMs(ue);if(He<=0)return;const Vt=setInterval(()=>{n.devices.load(ue,{refresh:!0})},He);return()=>{clearInterval(Vt)}});function tn(ue){u(w,ue,!0),u(_,!0)}function bn(ue){u(w,ue,!0),u(g,!0)}function Pn(ue){u(w,ue,!0),u(k,!0)}function $n(ue){u(w,ue,!0),u(E,!0)}async function Xn(ue){const He=[...t(we)];if(He.length===0)return;const Vt=await n.devices.reportValueUsage(t(ne),He,ue);n.notices.push("info",s("reportValueUsage {value}: {count} datapoints on {channels} channels",{value:ue,count:Vt,channels:He.length}))}function Zt(ue,He){u(fe,ue,!0),u(de,He,!0),u(le,!0)}function Ft(ue,He){u(p,ue.ADDRESS,!0),u(l,He.clientX,!0),u(f,He.clientY,!0),u(o,!0)}const Jt=c(()=>{const ue=t(xe)?.get(t(p));return ue===void 0?[]:ct(ue).names.map(He=>({id:`paramset:${He}`,label:s(`${He} Paramset`)}))}),Qn=c(()=>na(t(p))?[{id:"smokeGroup",label:`${s("Members")}…`}]:Ds(t(p))?[...he(t(p))?[{id:"smokeGroup",label:`${s("Members")}…`},{id:"sep0",separator:!0}]:[],{id:"rename",label:s("Rename")},...t(Jt),{id:"sep1",separator:!0},{id:"restore",label:s("restoreConfigToDevice"),disabled:!t(Ue)},{id:"clear",label:s("clearConfigCache"),disabled:!t(Ue)},{id:"repair",label:s("Repair configuration")},{id:"sep2",separator:!0},{id:"assign:room",label:`${s("Assign to room")}…`,disabled:!t(Ie).writable},{id:"assign:function",label:`${s("Assign to function")}…`,disabled:!t(Ie).writable},{id:"sep3",separator:!0},{id:"replace",label:s("Replace"),disabled:Mn(t(p))},{id:"delete",label:s("Delete"),danger:!0,disabled:Mn(t(p))}]:[{id:"rename",label:s("Rename"),disabled:!Ce(t(p))},{id:"usage1",label:"reportValueUsage 1",disabled:aa(t(p))},{id:"usage0",label:"reportValueUsage 0",disabled:aa(t(p))},{id:"sep1",separator:!0},...t(Jt).length===0?[]:[...t(Jt),{id:"sep2",separator:!0}],{id:"assign:room",label:`${s("Assign to room")}…`,disabled:!t(Ie).writable},{id:"assign:function",label:`${s("Assign to function")}…`,disabled:!t(Ie).writable},{id:"sep3",separator:!0},{id:"link:sender",label:s("Create link as sender"),disabled:!ke(t(p)).canSend},{id:"link:receiver",label:s("Create link as receiver"),disabled:!ke(t(p)).canReceive},{id:"link:show",label:`${s("Show links")} (${String(ke(t(p)).links)})`,disabled:ke(t(p)).links===0},{id:"team",label:s("Team"),disabled:(t(xe)?.get(t(p))?.TEAM_TAG??"")===""}]);function Mn(ue){return Gi(t(xe)?.get(ue)?.FLAGS).dontDelete}async function Or(ue){const He=t(p);if(ue.startsWith("paramset:")){Zt(He,ue.slice(9));return}if(ue==="assign:room"||ue==="assign:function"){lt(ue==="assign:room"?"room":"function",He);return}switch(ue){case"link:sender":u(D,[He],!0),u(N,[],!0),u(x,!0);break;case"link:receiver":u(D,[],!0),u(N,[He],!0),u(x,!0);break;case"team":u(w,He,!0),u(R,!0);break;case"smokeGroup":ve(He);break;case"link:show":n.app.linksFilter=He,n.app.setTab("links");break;case"rename":tn(He);break;case"restore":await n.devices.restoreConfig(t(ne),He);break;case"clear":await n.devices.clearConfigCache(t(ne),He);break;case"repair":$n(He);break;case"replace":Pn(He);break;case"delete":bn(He);break;case"usage1":case"usage0":await n.devices.reportValueUsage(t(ne),[He],ue==="usage1"?1:0);break}}var zr=QT(),Zn=Ne(zr),jn=A(Zn),Lr=A(jn);{const ue=rt=>{var je=OT(),vt=Ne(je);{let Rt=c(()=>s("Pair device")),pt=c(()=>!t(Fe)),dt=c(()=>s("This interface cannot pair devices"));Vh(vt,{get caption(){return t(Rt)},icon:"+",get disabled(){return t(pt)},get reason(){return t(dt)},testId:"devices-add",onclick:()=>u(b,!0)})}var At=d(vt,2);{let Rt=c(()=>s("Rename device")),pt=c(()=>!t(Oe)),dt=c(()=>Ye("device"));Dt(At,{get title(){return t(Rt)},icon:"✎",get disabled(){return t(pt)},get reason(){return t(dt)},testId:"devices-rename",onclick:()=>tn(t(Ge))})}var zt=d(At,2);{let Rt=c(()=>s("Assign to room")),pt=c(()=>!t(Pt));Dt(zt,{get title(){return t(Rt)},icon:"⌂",get disabled(){return t(pt)},get reason(){return t(Tt)},testId:"devices-assign-room",onclick:()=>lt("room")})}var hn=d(zt,2);{let Rt=c(()=>s("Assign to function")),pt=c(()=>!t(Pt));Dt(hn,{get title(){return t(Rt)},icon:"⚑",get disabled(){return t(pt)},get reason(){return t(Tt)},testId:"devices-assign-function",onclick:()=>lt("function")})}var Ht=d(hn,2);{let Rt=c(()=>s("Rooms and functions")),pt=c(()=>!t(Ie).available),dt=c(()=>s("No store connected"));Dt(Ht,{get title(){return t(Rt)},icon:"⊞",get disabled(){return t(pt)},get reason(){return t(dt)},testId:"devices-taxonomy",onclick:()=>{n.selectInterface(_d)}})}var Mt=d(Ht,2);{let Rt=c(()=>t(we).length===0),pt=c(()=>Ye("channel"));Dt(Mt,{title:"reportValueUsage 1",icon:"⇩",get disabled(){return t(Rt)},get reason(){return t(pt)},testId:"devices-usage-1",onclick:()=>{Xn(1)}})}var kn=d(Mt,2);{let Rt=c(()=>t(we).length===0),pt=c(()=>Ye("channel"));Dt(kn,{title:"reportValueUsage 0",icon:"⇧",get disabled(){return t(Rt)},get reason(){return t(pt)},testId:"devices-usage-0",onclick:()=>{Xn(0)}})}var An=d(kn,2);{let Rt=c(()=>s("restoreConfigToDevice")),pt=c(()=>t(qe)===""||!t(Ue)),dt=c(()=>t(Ue)?Ye("device"):Ye("bidcos"));Dt(An,{get title(){return t(Rt)},icon:"⟲",get disabled(){return t(pt)},get reason(){return t(dt)},testId:"devices-restore",onclick:()=>{n.devices.restoreConfig(t(ne),t(qe))}})}var dn=d(An,2);{let Rt=c(()=>s("clearConfigCache")),pt=c(()=>t(qe)===""||!t(Ue)),dt=c(()=>t(Ue)?Ye("device"):Ye("bidcos"));Dt(dn,{get title(){return t(Rt)},icon:"⌫",get disabled(){return t(pt)},get reason(){return t(dt)},testId:"devices-clear",onclick:()=>{n.devices.clearConfigCache(t(ne),t(qe))}})}var _n=d(dn,2);{let Rt=c(()=>s("Repair configuration")),pt=c(()=>t(pe)===""),dt=c(()=>Ye("device"));Dt(_n,{get title(){return t(Rt)},icon:"⚒",get disabled(){return t(pt)},get reason(){return t(dt)},testId:"devices-repair",onclick:()=>$n(t(pe))})}var or=d(_n,2);{let Rt=c(()=>s("New smoke group")),pt=c(()=>!t(O));Dt(or,{get title(){return t(Rt)},icon:"◎",get disabled(){return t(pt)},get reason(){return t(U)},testId:"devices-smoke-group-new",onclick:ge})}var Gn=d(or,2);{let Rt=c(()=>s("Replace device")),pt=c(()=>!t(De)),dt=c(()=>Ye("delete"));Dt(Gn,{get title(){return t(Rt)},icon:"⇄",get disabled(){return t(pt)},get reason(){return t(dt)},testId:"devices-replace",onclick:()=>Pn(t(qe))})}var cn=d(Gn,2);{let Rt=c(()=>s("Delete device")),pt=c(()=>!t(De)),dt=c(()=>Ye("delete"));Dt(cn,{get title(){return t(Rt)},icon:"🗑",get disabled(){return t(pt)},get reason(){return t(dt)},testId:"devices-delete",onclick:()=>bn(t(qe))})}var jt=d(cn,2);{let Rt=c(()=>s("Refresh"));Dt(jt,{get title(){return t(Rt)},icon:"⟳",testId:"devices-refresh",onclick:()=>{n.devices.load(t(ne),{refresh:!0}),n.smokeGroups.refresh(t(ne),t(Ae))}})}v(rt,je)},He=rt=>{var je=St(),vt=Ne(je);{var At=zt=>{var hn=LT(),Ht=Ne(hn),Mt=A(Ht),kn=m(Mt,!0);Mt.value=Mt.__value="";var An=d(Mt);Xe(An,17,()=>t(Me),cn=>cn.path,(cn,jt)=>{var Rt=Iu(),pt=m(Rt,!0),dt={};S(Gt=>{h(pt,Gt),dt!==(dt=t(jt).path)&&(Rt.value=(Rt.__value=dt)??"")},[()=>ql(t(jt)," ")]),v(cn,Rt)}),Xt(Ht);var dn=d(Ht,2),_n=A(dn),or=m(_n,!0);_n.value=_n.__value="";var Gn=d(_n);Xe(Gn,17,()=>t(Ve),cn=>cn.path,(cn,jt)=>{var Rt=Iu(),pt=m(Rt,!0),dt={};S(Gt=>{h(pt,Gt),dt!==(dt=t(jt).path)&&(Rt.value=(Rt.__value=dt)??"")},[()=>ql(t(jt)," ")]),v(cn,Rt)}),Xt(dn),S((cn,jt,Rt,pt)=>{T(Ht,"aria-label",cn),h(kn,jt),T(dn,"aria-label",Rt),h(or,pt)},[()=>s("Room"),()=>s("All rooms"),()=>s("Function"),()=>s("All functions")]),kr(Ht,()=>t(se),cn=>u(se,cn)),kr(dn,()=>t(j),cn=>u(j,cn)),v(zt,hn)};W(vt,zt=>{t(Ie).available&&zt(At)})}v(rt,je)},Vt=(rt,je=Hn,vt=Hn,At=Hn)=>{var zt=St(),hn=Ne(zt);{var Ht=pt=>{const dt=c(()=>na(je().ADDRESS)?J(je().ADDRESS):je().TYPE);{let Gt=c(()=>n.host.deviceImageUrl(t(dt))),nn=c(()=>`device-image-${je().ADDRESS}`);Ha(pt,{get deviceType(){return t(dt)},get src(){return t(Gt)},get testId(){return t(nn)}})}},Mt=pt=>{var dt=FT(),Gt=Ne(dt),nn=d(Gt,2),Tn=m(nn,!0);S((Dn,Jn)=>{T(Gt,"data-testid",`smoke-group-members-${je().ADDRESS}`),T(Gt,"title",Dn),T(nn,"data-testid",`smoke-group-${je().ADDRESS}`),h(Tn,Jn)},[()=>s("Members"),()=>q(je())]),re("click",Gt,Dn=>{Dn.stopPropagation(),ve(je().ADDRESS)}),v(pt,dt)},kn=c(()=>vt().key==="smokeGroup"&&he(je().ADDRESS)&&At().depth===0),An=pt=>{var dt=BT();Xe(dt,21,()=>ae(je()),Gt=>Gt.datapoint,(Gt,nn)=>{const Tn=c(()=>zh(t(nn).datapoint,!t(Ue)));var Dn=UT(),Jn=Ne(Dn);{let Rn=c(()=>s(t(nn).label)),gn=c(()=>`${s(t(nn).label)} (${t(nn).datapoint} ${t(nn).address})${t(Tn)===void 0?"":` — ${s(t(Tn))}`}`);IS(Jn,{get mark(){return t(nn)},get label(){return t(Rn)},get title(){return t(gn)}})}var lr=d(Jn,2);{var us=Rn=>{var gn=GT();S(Rr=>{T(gn,"data-testid",`repair-${je().ADDRESS}`),T(gn,"title",Rr)},[()=>s("Repair configuration")]),re("click",gn,Rr=>{Rr.stopPropagation(),$n(je().ADDRESS)}),v(Rn,gn)},Bs=c(()=>FS(t(nn).datapoint,!t(Ue)));W(lr,Rn=>{t(Bs)&&Rn(us)})}v(Gt,Dn)}),S(()=>T(dt,"data-testid",`msgs-${je().ADDRESS}`)),v(pt,dt)},dn=pt=>{const dt=c(()=>pn(je()));var Gt=jT();let nn;var Tn=A(Gt),Dn=m(Tn,!0),Jn=d(Tn,2);{var lr=Rn=>{var gn=HT(),Rr=m(gn,!0);S((Wr,Ts)=>{T(gn,"title",Wr),T(gn,"data-testid",`firmware-status-${je().ADDRESS}`),h(Rr,Ts)},[()=>s("firmware requested hint"),()=>s("firmware requested")]),v(Rn,gn)},us=Rn=>{var gn=VT(),Rr=m(gn);S((Wr,Ts)=>{T(gn,"data-testid",`firmware-${je().ADDRESS}`),T(gn,"title",Wr),h(Rr,`${Ts??""} ${t(dt).available??""??""}`)},[()=>s("Install firmware {version}",{version:t(dt).available??""}),()=>s("install")]),re("click",gn,Wr=>{Wr.stopPropagation(),wn(je())}),v(Rn,gn)},Bs=Rn=>{var gn=zT(),Rr=A(gn),Wr=d(Rr);{var Ts=fs=>{var Hs=Cn();S(ba=>h(Hs,ba),[()=>` · ${String(t(dt).percent)} %`]),v(fs,Hs)};W(Wr,fs=>{t(dt).percent!==void 0&&fs(Ts)})}S((fs,Hs)=>{T(gn,"title",fs),T(gn,"data-testid",`firmware-status-${je().ADDRESS}`),h(Rr,Hs)},[()=>s(t(dt).hint??t(dt).status),()=>s(t(dt).status)]),v(Rn,gn)};W(Jn,Rn=>{t(dt).busy&&t(dt).status===void 0?Rn(lr):t(dt).action&&!t(dt).busy?Rn(us,1):t(dt).status&&Rn(Bs,2)})}S(()=>{T(Gt,"data-testid",`firmware-cell-${je().ADDRESS}`),nn=Un(Gt,"",nn,{"grid-template-columns":t(dt).busy||t(dt).action!==void 0||t(dt).status!==void 0?`${t(Lt)}ch minmax(0, max-content)`:"minmax(0, max-content)"}),h(Dn,t(dt).firmware)}),v(pt,Gt)},_n=pt=>{const dt=c(()=>ct(je()));var Gt=KT();Xe(Gt,20,()=>t(dt).names,nn=>nn,(nn,Tn)=>{var Dn=WT(),Jn=m(Dn,!0);S(()=>{T(Dn,"data-testid",`paramset-${je().ADDRESS}-${Tn}`),h(Jn,Tn)}),re("click",Dn,lr=>{lr.stopPropagation(),Zt(je().ADDRESS,Tn)}),v(nn,Dn)}),S(()=>{T(Gt,"data-testid",`paramsets-${je().ADDRESS}`),T(Gt,"aria-busy",t(dt).pending)}),v(pt,Gt)},or=pt=>{var dt=St(),Gt=Ne(dt);{var nn=Tn=>{var Dn=YT();v(Tn,Dn)};W(Gt,Tn=>{je().AES_ACTIVE&&Tn(nn)})}v(pt,dt)},Gn=pt=>{var dt=qT(),Gt=A(dt),nn=m(Gt,!0),Tn=d(Gt,2);{let Dn=c(()=>s("Routes for other HmIP devices")),Jn=c(()=>s("Router")),lr=c(()=>`router-${je().ADDRESS}`);TS(Tn,{get title(){return t(Dn)},get label(){return t(Jn)},get testId(){return t(lr)}})}S(()=>h(nn,je().TYPE)),v(pt,dt)},cn=c(()=>vt().key==="TYPE"&&At().depth===0&&t(Te)&&n.routers.isRouting(t(ne),je().ADDRESS)),jt=pt=>{var dt=XT(),Gt=Ne(dt),nn=m(Gt,!0),Tn=d(Gt,2);{var Dn=lr=>{var us=$T();v(lr,us)},Jn=c(()=>kd(je()));W(Tn,lr=>{t(Jn)&&lr(Dn)})}S(lr=>{T(Gt,"data-testid",`receiver-${je().ADDRESS}`),h(nn,lr)},[()=>Cc(je(),t(Ee))]),v(pt,dt)},Rt=pt=>{var dt=Cn();S(Gt=>h(dt,Gt),[()=>vt().value?vt().value(je())??"":je()[vt().key]??""]),v(pt,dt)};W(hn,pt=>{vt().key==="icon"?pt(Ht):t(kn)?pt(Mt,1):vt().key==="msgs"&&At().depth===0?pt(An,2):vt().key==="FIRMWARE"&&At().depth===0?pt(dn,3):vt().key==="PARAMSETS"?pt(_n,4):vt().key==="AES_ACTIVE"?pt(or,5):t(cn)?pt(Gn,6):vt().key==="INTERFACE"&&At().depth===0?pt(jt,7):pt(Rt,-1)})}v(rt,zt)};let yn=c(()=>s("Devices")),ir=c(()=>s("Filter")),it=c(()=>s("No row matches the filter")),bt=c(()=>s("Clear filter")),It=c(()=>s("Devices")),et=c(()=>s("{count} devices",{},t(V).length));Fs(Lr,{get rows(){return t(V)},get columns(){return t(tt)},get subColumns(){return t(ht)},getId:rt=>rt.ADDRESS,subRows:Le,get scope(){return t(ne)},get caption(){return t(yn)},get filterLabel(){return t(ir)},get emptyText(){return t(Pe)},get noMatchText(){return t(it)},get clearFilterLabel(){return t(bt)},showingText:(rt,je)=>s("Showing {shown} of {total}",{shown:rt,total:je}),onrowcontextmenu:Ft,canRename:rt=>Ce(rt.ADDRESS),onrename:rt=>tn(rt.ADDRESS),get toolbarLabel(){return t(It)},get countText(){return t(et)},tableId:"devices",subTableId:"devices-channels",testId:"devices-table",get selected(){return t(a)},set selected(rt){u(a,rt,!0)},get expanded(){return t(i)},set expanded(rt){u(i,rt,!0)},toolbar:ue,status:He,cell:Vt,$$slots:{toolbar:!0,status:!0,cell:!0}})}var cs=d(Zn,2);{let ue=c(()=>s("Devices"));Ld(cs,{get items(){return t(Qn)},get x(){return t(l)},get y(){return t(f)},get label(){return t(ue)},testId:"devices-menu",onselect:He=>{Or(He)},get open(){return t(o)},set open(He){u(o,He,!0)}})}var ar=d(cs,2);uT(ar,{get address(){return t(w)},get open(){return t(_)},set open(ue){u(_,ue,!0)}});var Ar=d(ar,2);oT(Ar,{get address(){return t(w)},get open(){return t(g)},set open(ue){u(g,ue,!0)}});var jr=d(Ar,2);MT(jr,{get address(){return t(w)},get open(){return t(k)},set open(ue){u(k,ue,!0)}});var cr=d(jr,2);OA(cr,{get open(){return t(b)},set open(ue){u(b,ue,!0)}});var Tr=d(cr,2);Yh(Tr,{get presetSenders(){return t(D)},get presetReceivers(){return t(N)},get open(){return t(x)},set open(ue){u(x,ue,!0)}});var ur=d(Tr,2);l0(ur,{get address(){return t(w)},get open(){return t(R)},set open(ue){u(R,ue,!0)}});var ns=d(ur,2);{let ue=c(()=>t($)!==void 0);t0(ns,{get group(){return t(te)},get isNew(){return t(ue)},get open(){return t(M)},set open(He){u(M,He,!0)}})}var Fr=d(ns,2);RT(Fr,{get address(){return t(w)},get open(){return t(E)},set open(ue){u(E,ue,!0)}});var pr=d(Fr,2);{let ue=c(()=>Ce(t(X)));sT(pr,{get focus(){return t(oe)},get targets(){return t(K)},get address(){return t(X)},get canRename(){return t(ue)},get open(){return t(B)},set open(He){u(B,He,!0)}})}var gr=d(pr,2);am(gr,{get interfaceName(){return t(ne)},get address(){return t(fe)},get paramset(){return t(de)},get open(){return t(le)},set open(ue){u(le,ue,!0)}}),v(r,zr),ft()}Et(["click"]);var JT=y('<!> <!> <input class="hmm-input hmm-events-filter svelte-dzof1w" type="search" placeholder="ADDRESS" data-testid="events-filter-address"/> <input class="hmm-input hmm-events-filter svelte-dzof1w" type="search" placeholder="PARAM" data-testid="events-filter-datapoint"/>',1),eR=y('<span data-testid="events-paused"> </span>'),tR=y('<div class="hmm-page svelte-dzof1w"><div class="hmm-page-grid svelte-dzof1w"><!></div></div>');function nR(r,e){ut(e,!0);const n=Ot(),s=n.i18n.t;let a=C(We([])),i=C(""),o=C(""),l=C(!1),f=C(We([]));const p=c(()=>n.app.selectedInterface),_=c(()=>({interfaceName:t(p),...t(i).trim()===""?{}:{address:t(i).trim()},...t(o).trim()===""?{}:{datapoint:t(o).trim()}})),g=c(()=>n.events.filtered(t(_))),k=c(()=>t(l)?t(f):t(g)),E=c(()=>[{key:"timestamp",label:s("Timestamp"),width:110,value:N=>qf(N.timestamp)},{key:"method",label:s("Method"),width:110},{key:"name",label:s("Name"),width:200,copy:"name",value:N=>N.address===void 0?"":n.nameOf(N.address)},{key:"address",label:"ADDRESS",width:150,mono:!0,copy:"address"},{key:"datapoint",label:"PARAM",width:180},{key:"value",label:"VALUE",width:140,value:N=>uo(N.value??N.payload)},{key:"count",label:s("Events per device"),width:120,align:"right",filterable:!1,value:N=>N.address===void 0?"":n.events.countFor(N.address)}]);function b(){u(f,t(l)?[]:[...t(g)],!0),u(l,!t(l))}var w=tR(),x=A(w),D=A(x);{const N=de=>{var B=JT(),oe=Ne(B);{let j=c(()=>s("Pause"));Dt(oe,{get title(){return t(j)},icon:"⏸",get pressed(){return t(l)},testId:"events-pause",onclick:()=>b()})}var K=d(oe,2);{let j=c(()=>s("Clear"));Dt(K,{get title(){return t(j)},icon:"⌫",testId:"events-clear",onclick:()=>{n.events.clear()}})}var X=d(K,2),se=d(X,2);S((j,ne)=>{T(X,"aria-label",j),T(se,"aria-label",ne)},[()=>`${s("Filter")} ADDRESS`,()=>`${s("Filter")} PARAM`]),xn(X,()=>t(i),j=>u(i,j)),xn(se,()=>t(o),j=>u(o,j)),v(de,B)},R=de=>{var B=St(),oe=Ne(B);{var K=X=>{var se=eR(),j=m(se,!0);S(ne=>h(j,ne),[()=>s("Pause")]),v(X,se)};W(oe,X=>{t(l)&&X(K)})}v(de,B)};let M=c(()=>s("Events")),z=c(()=>s("Filter")),$=c(()=>s("No data")),le=c(()=>s("Events")),fe=c(()=>s("{count} events",{},t(k).length));Fs(D,{get rows(){return t(k)},get scope(){return t(p)},get columns(){return t(E)},getId:de=>String(de.seq),get caption(){return t(M)},get filterLabel(){return t(z)},get emptyText(){return t($)},get toolbarLabel(){return t(le)},get countText(){return t(fe)},tableId:"events",testId:"events-table",get selected(){return t(a)},set selected(de){u(a,de,!0)},toolbar:N,status:R,$$slots:{toolbar:!0,status:!0}})}v(r,w),ft()}var rR=y('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button hmm-group-delete-danger svelte-o268m5" data-testid="group-delete-apply"> </button>',1),sR=y("<li> </li>"),aR=y('<ul class="hmm-group-delete-members svelte-o268m5" data-testid="group-delete-members"></ul>'),iR=y('<p class="hmm-group-delete-subject svelte-o268m5" data-testid="group-delete-subject"> </p> <p class="hmm-group-delete-note svelte-o268m5"> </p> <!>',1);function oR(r,e){ut(e,!0);let n=H(e,"open",15,!1),s=H(e,"group",3,void 0);const a=Ot(),i=a.i18n.t;let o=C(!1);ot(()=>{n()&&u(o,!1)});function l(p){const _=a.names.name(p.id);return _===void 0?p.id:`${_} (${p.id})`}async function f(){if(t(o)||s()===void 0)return;u(o,!0);const p=await a.groups.remove(s().id);u(o,!1),p&&n(!1)}{const p=g=>{var k=rR(),E=Ne(k),b=m(E,!0),w=d(E,2),x=m(w,!0);S((D,N)=>{h(b,D),w.disabled=t(o)||s()===void 0,h(x,N)},[()=>i("Cancel"),()=>i("Delete")]),re("click",E,()=>n(!1)),re("click",w,()=>{f()}),v(g,k)};let _=c(()=>i("Delete group"));En(r,{get title(){return t(_)},width:"480px",testId:"group-delete-dialog",get open(){return n()},set open(g){n(g)},buttons:p,children:(g,k)=>{var E=St(),b=Ne(E);{var w=x=>{var D=iR(),N=Ne(D),R=m(N,!0),M=d(N,2),z=m(M,!0),$=d(M,2);{var le=fe=>{var de=aR();Xe(de,21,()=>s().members,B=>B.id,(B,oe)=>{var K=sR(),X=m(K,!0);S(se=>h(X,se),[()=>l(t(oe))]),v(B,K)}),v(fe,de)};W($,fe=>{s().members.length>0&&fe(le)})}S(fe=>{h(R,s().name),h(z,fe)},[()=>i("The members leave the group and the virtual device {device} is removed",{device:s().device})]),v(x,D)};W(b,x=>{s()!==void 0&&x(w)})}v(g,E)},$$slots:{buttons:!0,default:!0}})}ft()}Et(["click"]);var lR=y('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="group-save"> </button>',1),dR=y("<option> </option>"),cR=y('<select class="hmm-select" data-testid="group-type"></select>'),uR=y('<span data-testid="group-type"> </span>'),fR=y('<div class="hmm-group-row svelte-1gbrlxm"><span> </span> <span class="hmm-mono" data-testid="group-device"> </span></div>'),hR=y('<p class="hmm-group-muted svelte-1gbrlxm"> </p>'),mR=y('<p class="hmm-group-muted svelte-1gbrlxm" data-testid="group-no-candidates"> </p>'),vR=y('<li class="svelte-1gbrlxm"><label class="hmm-group-member svelte-1gbrlxm"><input type="checkbox"/> <span class="hmm-group-member-name svelte-1gbrlxm"> </span> <span class="hmm-mono hmm-group-member-id svelte-1gbrlxm"> </span> <span class="hmm-group-member-type svelte-1gbrlxm"> </span></label></li>'),pR=y('<ul class="hmm-group-list svelte-1gbrlxm" data-testid="group-candidates"></ul>'),gR=y('<li class="hmm-group-member svelte-1gbrlxm"><span class="hmm-group-member-name svelte-1gbrlxm"> </span> <span class="hmm-mono hmm-group-member-id svelte-1gbrlxm"> </span> <span class="hmm-group-member-type svelte-1gbrlxm"> </span></li>'),bR=y('<p class="hmm-group-heading svelte-1gbrlxm"> </p> <ul class="hmm-group-list hmm-group-list-muted svelte-1gbrlxm" data-testid="group-connected"></ul>',1),_R=y('<div class="hmm-group-form svelte-1gbrlxm"><label class="hmm-group-row svelte-1gbrlxm"><span> </span> <input class="hmm-input" maxlength="64" data-testid="group-name"/></label> <label class="hmm-group-row svelte-1gbrlxm"><span> </span> <!></label> <!> <p class="hmm-group-heading svelte-1gbrlxm"> </p> <!> <!></div>');function ER(r,e){ut(e,!0);let n=H(e,"open",15,!1),s=H(e,"group",3,void 0);const a=Ot(),i=a.i18n.t;let o=C(""),l=C(""),f=C(We([])),p=C(We([])),_=C(We([])),g=C(We([])),k=C(We([])),E=C(!1),b=C(!1),w=C(We([]));const x=c(()=>s()===void 0),D=c(()=>t(p).find(K=>K.id===t(l))),N=c(()=>{if(t(x))return t(D)?.assignable??[];const K=new Set(t(k).map(X=>X.id));return[...t(k),...t(_).filter(X=>!K.has(X.id))]}),R=c(()=>t(x)?t(D)?.leftover??[]:t(g)),M=c(()=>s()!==void 0&&t(o).trim()!==s().name),z=c(()=>!t(x)&&[...t(f)].sort().join(`
18
18
  `)!==t(w).join(`
19
- `)),$=c(()=>!t(b)&&!t(E)&&t(o).trim()!==""&&(t(x)?t(l)!=="":t(M)||t(z)));ot(()=>{n()&&(u(b,!1),le(s()))});async function le(K){u(E,!0),u(o,K?.name??"",!0),u(f,[],!0),u(p,[],!0),u(_,[],!0),u(g,[],!0),u(k,[],!0),u(w,[],!0);try{if(K===void 0){u(p,await a.groups.types(),!0),u(l,t(p)[0]?.id??"",!0);return}const X=await a.groups.detail(K.id);if(X===void 0){n(!1);return}u(o,X.name,!0),u(l,X.type,!0),u(p,X.types.map(se=>({...se,assignable:[],leftover:[]})),!0),u(k,X.members,!0),u(_,X.assignable,!0),u(g,X.leftover,!0),u(f,X.members.map(se=>se.id),!0),u(w,[...t(f)].sort(),!0)}finally{u(E,!1)}}function fe(K){u(l,K,!0),u(f,[],!0)}function de(K,X){u(f,X?[...t(f).filter(se=>se!==K),K]:t(f).filter(se=>se!==K),!0)}function B(K){const X=a.names.name(K.id);return X===void 0?K.id:X}async function oe(){if(!t($))return;u(b,!0);const K=t(o).trim(),X=s()===void 0?await a.groups.create(K,t(l),t(f)):await a.groups.update(s().id,t(M)?K:void 0,t(z)?t(f):void 0);u(b,!1),X!==void 0&&n(!1)}{const K=se=>{var j=lR(),ne=Ne(j),ye=m(ne,!0),xe=d(ne,2),ie=m(xe,!0);S((Ae,Te)=>{h(ye,Ae),xe.disabled=!t($),h(ie,Te)},[()=>i("Cancel"),()=>t(x)?i("Create"):i("Save")]),re("click",ne,()=>n(!1)),re("click",xe,()=>{oe()}),v(se,j)};let X=c(()=>t(x)?i("New group"):i("Edit group"));En(r,{get title(){return t(X)},width:"620px",minHeight:360,testId:"group-dialog",get open(){return n()},set open(se){n(se)},buttons:K,children:(se,j)=>{var ne=_R(),ye=A(ne),xe=A(ye),ie=m(xe,!0),Ae=d(xe,2),Te=d(ye,2),me=A(Te),P=m(me,!0),ce=d(me,2);{var be=O=>{var U=cR();Xe(U,21,()=>t(p),F=>F.id,(F,Ee)=>{var Ie=dR(),Me=m(Ie,!0),Ve={};S(ze=>{h(Me,ze),Ve!==(Ve=t(Ee).id)&&(Ie.value=(Ie.__value=Ve)??"")},[()=>i(t(Ee).label)]),v(F,Ie)});var I;Xt(U),S(()=>{U.disabled=t(E)||t(p).length===0,I!==(I=t(l))&&(U.value=(U.__value=I)??"",Bn(U,I))}),re("change",U,F=>fe(F.currentTarget.value)),v(O,U)},ee=O=>{var U=uR(),I=m(U,!0);S(F=>h(I,F),[()=>i(t(D)?.label??t(l))]),v(O,U)};W(ce,O=>{t(x)?O(be):O(ee,-1)})}var he=d(Te,2);{var G=O=>{var U=fR(),I=A(U),F=m(I,!0),Ee=d(I,2),Ie=m(Ee,!0);S(Me=>{h(F,Me),h(Ie,s().device)},[()=>i("Virtual device")]),v(O,U)};W(he,O=>{s()!==void 0&&O(G)})}var Q=d(he,2),q=m(Q,!0),Y=d(Q,2);{var ae=O=>{var U=hR(),I=m(U,!0);S(F=>h(I,F),[()=>i("Loading")]),v(O,U)},J=O=>{var U=mR(),I=m(U,!0);S(F=>h(I,F),[()=>i("There are no other devices available")]),v(O,U)},ve=O=>{var U=pR();Xe(U,21,()=>t(N),I=>I.id,(I,F)=>{var Ee=vR(),Ie=A(Ee),Me=A(Ie),Ve=d(Me,2),ze=m(Ve,!0),nt=d(Ve,2),Ze=m(nt,!0),_e=d(nt,2),Se=m(_e,!0);S((V,L)=>{Pr(Me,V),T(Me,"data-testid",`group-member-${t(F).id}`),h(ze,L),h(Ze,t(F).id),h(Se,t(F).type)},[()=>t(f).includes(t(F).id),()=>B(t(F))]),re("change",Me,V=>de(t(F).id,V.currentTarget.checked)),v(I,Ee)}),v(O,U)};W(Y,O=>{t(E)?O(ae):t(N).length===0?O(J,1):O(ve,-1)})}var ge=d(Y,2);{var te=O=>{var U=bR(),I=Ne(U),F=m(I,!0),Ee=d(I,2);Xe(Ee,21,()=>t(R),Ie=>Ie.id,(Ie,Me)=>{var Ve=gR(),ze=A(Ve),nt=m(ze,!0),Ze=d(ze,2),_e=m(Ze,!0),Se=d(Ze,2),V=m(Se,!0);S(L=>{h(nt,L),h(_e,t(Me).id),h(V,t(Me).type)},[()=>B(t(Me))]),v(Ie,Ve)}),S(Ie=>h(F,Ie),[()=>i("Already connected devices")]),v(O,U)};W(ge,O=>{!t(E)&&t(R).length>0&&O(te)})}S((O,U,I)=>{h(ie,O),Ae.disabled=t(E),h(P,U),h(q,I)},[()=>i("Group name"),()=>i("Group type"),()=>i("Addable devices")]),re("keydown",Ae,O=>{O.key==="Enter"&&oe()}),xn(Ae,()=>t(o),O=>u(o,O)),v(se,ne)},$$slots:{buttons:!0,default:!0}})}ut()}Et(["click","keydown","change"]);var yR=y('<p class="hmm-groups-unavailable svelte-v7q9p3" data-testid="groups-unavailable"> </p>'),SR=y("<!> <!> <!> <!>",1),wR=y('<span class="hmm-groups-pending svelte-v7q9p3" data-testid="groups-pending"> </span>'),kR=y('<span class="hmm-groups-none svelte-v7q9p3"> </span>'),AR=y("<span><!></span>"),TR=y('<div class="hmm-page svelte-v7q9p3"><div class="hmm-page-grid svelte-v7q9p3"><!></div></div> <!> <!>',1);function RR(r,e){ct(e,!0);const n=Ot(),s=n.i18n.t,a=c(()=>n.groups);let i=C(We([])),o=C(!1),l=C(void 0),f=C(!1),p=C(void 0);const _=c(()=>t(a).groups.find(X=>String(X.id)===t(i)[0])),g=c(()=>n.app.session!==null&&n.app.session.level<8),k=c(()=>t(g)?s("Needs the administrator role on the system"):void 0);ot(()=>{t(a).offered&&t(a).load()});function E(X){const se=n.names.name(X.id);return se===void 0?X.id:`${se} (${X.id})`}function b(X){return X.members.map(E).join(", ")}function w(X){return s(X.typeLabel)}function x(){u(l,void 0),u(o,!0)}function D(X){X!==void 0&&(u(l,X,!0),u(o,!0))}function N(X){X!==void 0&&(u(p,X,!0),u(f,!0))}const R=c(()=>t(a).devicesToConfigure.length===0?"":s("Configuration pending: {list}",{list:t(a).devicesToConfigure.map(E).join(", ")})),M=c(()=>[{key:"name",label:s("Group name"),width:220,copy:"name"},{key:"type",label:s("Group type"),width:180,value:w},{key:"device",label:s("Virtual device"),width:140,mono:!0,copy:"address"},{key:"members",label:s("Members"),width:420,sortable:!1,value:b}]);var z=TR(),$=Ne(z),le=A($),fe=A(le);{var de=X=>{var se=yR(),j=m(se);S(ne=>h(j,`${ne??""}${t(a).state?.message===void 0?"":`: ${t(a).state.message}`}`),[()=>s("Heating groups are not available here")]),v(X,se)},B=X=>{{const se=me=>{var P=SR(),ce=Ne(P);{let G=c(()=>s("Refresh"));Dt(ce,{get title(){return t(G)},icon:"⟳",get busy(){return t(a).loading},testId:"groups-refresh",onclick:()=>{t(a).load()}})}var be=d(ce,2);{let G=c(()=>s("New group"));Dt(be,{get title(){return t(G)},icon:"+",get disabled(){return t(g)},get reason(){return t(k)},testId:"groups-new",onclick:x})}var ee=d(be,2);{let G=c(()=>s("Edit group")),Q=c(()=>t(g)||t(_)===void 0),q=c(()=>t(k)??s("Select a group"));Dt(ee,{get title(){return t(G)},icon:"✎",get disabled(){return t(Q)},get reason(){return t(q)},testId:"groups-edit",onclick:()=>D(t(_))})}var he=d(ee,2);{let G=c(()=>s("Delete group")),Q=c(()=>t(g)||t(_)===void 0),q=c(()=>t(k)??s("Select a group"));Dt(he,{get title(){return t(G)},icon:"✕",get disabled(){return t(Q)},get reason(){return t(q)},testId:"groups-delete",onclick:()=>N(t(_))})}v(me,P)},j=me=>{var P=St(),ce=Ne(P);{var be=ee=>{{let he=c(()=>s("The direct device connections of these devices are still being configured"));mi(ee,{get text(){return t(he)},testId:"groups-pending-tooltip",children:(G,Q)=>{var q=wR(),Y=m(q,!0);S(()=>h(Y,t(R))),v(G,q)},$$slots:{default:!0}})}};W(ce,ee=>{t(R)!==""&&ee(be)})}v(me,P)},ne=(me,P=Hn,ce=Hn)=>{var be=St(),ee=Ne(be);{var he=q=>{var Y=AR(),ae=A(Y);{var J=ge=>{var te=kR(),O=m(te,!0);S(U=>h(O,U),[()=>s("There are no devices in the group")]),v(ge,te)},ve=ge=>{var te=Cn();S(O=>h(te,O),[()=>b(P())]),v(ge,te)};W(ae,ge=>{P().members.length===0?ge(J):ge(ve,-1)})}S(ge=>T(Y,"data-testid",ge),[()=>`group-members-${String(P().id)}`]),v(q,Y)},G=q=>{var Y=Cn();S(ae=>h(Y,ae),[()=>ce().value(P())??""]),v(q,Y)},Q=q=>{var Y=Cn();S(()=>h(Y,P()[ce().key]??"")),v(q,Y)};W(ee,q=>{ce().key==="members"?q(he):ce().value?q(G,1):q(Q,-1)})}v(me,be)};let ye=c(()=>s("Heating groups")),xe=c(()=>s("Filter")),ie=c(()=>t(a).loaded?s("No groups yet"):s("Loading")),Ae=c(()=>s("Heating groups")),Te=c(()=>s("{count} groups",{},t(a).groups.length));Fs(X,{get rows(){return t(a).groups},get scope(){return n.app.selectedInterface},get columns(){return t(M)},getId:me=>String(me.id),get caption(){return t(ye)},get filterLabel(){return t(xe)},get emptyText(){return t(ie)},get toolbarLabel(){return t(Ae)},get countText(){return t(Te)},onactivate:me=>t(g)?void 0:D(me),tableId:"groups",testId:"groups-table",get selected(){return t(i)},set selected(me){u(i,me,!0)},toolbar:se,status:j,cell:ne,$$slots:{toolbar:!0,status:!0,cell:!0}})}};W(fe,X=>{t(a).offered?X(B,-1):X(de)})}var oe=d($,2);ER(oe,{get group(){return t(l)},get open(){return t(o)},set open(X){u(o,X,!0)}});var K=d(oe,2);oR(K,{get group(){return t(p)},get open(){return t(f)},set open(X){u(f,X,!0)}}),v(r,z),ut()}var xR=y('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="remove-link-stage"> </button> <button type="button" class="hmm-button hmm-danger svelte-1suervc" data-testid="remove-link-confirm"> </button>',1),DR=y('<li><span class="hmm-mono"> </span> → <span class="hmm-mono"> </span> <span class="hmm-remove-names svelte-1suervc"> </span></li>'),IR=y('<p> </p> <ul class="hmm-remove-links svelte-1suervc"></ul>',1);function NR(r,e){ct(e,!0);let n=H(e,"open",15,!1),s=H(e,"links",19,()=>[]);const a=Ot(),i=a.i18n.t;let o=C(!1);function l(){const p=s().map(_=>({..._}));a.changeSet.stage({kind:"linkRemove",interfaceName:a.app.selectedInterface,title:i("{count} links",{},p.length),pairs:p,calls:p.map(_=>`removeLink(${_.sender}, ${_.receiver})`),lines:[]}),n(!1)}async function f(){u(o,!0);const p=await a.links.remove(a.app.selectedInterface,s());u(o,!1),p===s().length&&n(!1)}{const p=g=>{var k=xR(),E=Ne(k),b=m(E,!0),w=d(E,2),x=m(w,!0),D=d(w,2),N=m(D,!0);S((R,M,z)=>{h(b,R),w.disabled=t(o)||s().length===0,h(x,M),D.disabled=t(o)||s().length===0,h(N,z)},[()=>i("Cancel"),()=>i("Add to pending changes"),()=>i("Delete")]),re("click",E,()=>n(!1)),re("click",w,l),re("click",D,()=>{f()}),v(g,k)};let _=c(()=>i("Delete link"));En(r,{get title(){return t(_)},width:"620px",testId:"remove-link-dialog",get open(){return n()},set open(g){n(g)},buttons:p,children:(g,k)=>{var E=IR(),b=Ne(E),w=m(b,!0),x=d(b,2);Xe(x,21,s,D=>`${D.sender}->${D.receiver}`,(D,N)=>{var R=DR(),M=A(R),z=m(M,!0),$=d(M,2),le=m($,!0),fe=d($,2),de=m(fe);S((B,oe)=>{h(z,t(N).sender),h(le,t(N).receiver),h(de,`${B??""} → ${oe??""}`)},[()=>a.nameOf(t(N).sender),()=>a.nameOf(t(N).receiver)]),v(D,R)}),S(D=>h(w,D),[()=>i("{count} links",{},s().length)]),v(g,E)},$$slots:{buttons:!0,default:!0}})}ut()}Et(["click"]);var Nu=y("<!> <!>",1),CR=y("<!> <!> <!> <!> <!>",1),PR=y('<button type="button" class="hmm-links-handover svelte-1pum174" data-testid="links-filter-handover"> </button>'),MR=y('<span class="hmm-links-defective svelte-1pum174" data-testid="links-defective"> </span>'),OR=y('<span class="hmm-link-broken svelte-1pum174" role="img">⚠</span>'),LR=y('<div class="hmm-page svelte-1pum174"><div class="hmm-page-grid svelte-1pum174"><!></div></div> <!> <!> <!> <!>',1);function FR(r,e){ct(e,!0);const n=Ot(),s=n.i18n.t;let a=C(We([])),i=C(!1),o=C(0),l=C(0),f=C(void 0),p=C(""),_=C(!1),g=C(!1),k=C(!1),E=C(""),b=C("");const w=c(()=>n.app.selectedInterface),x=c(()=>n.interfaces.typeOf(t(w)));ot(()=>{const me=n.app.linksFilter;me!==""&&(u(p,me,!0),n.app.linksFilter="")});const D=c(()=>n.links.of(t(w))),N=c(()=>n.links.defective(t(w)).length),R=c(()=>t(x)==="BidCos-RF"),M=c(()=>n.devices.index(t(w))),z=c(()=>t(M)===void 0||ch(t(M)).length>0),$=c(()=>t(a).map(me=>{const[P,ce]=me.split("->");return P===void 0||ce===void 0?void 0:{sender:P,receiver:ce}}).filter(me=>me!==void 0)),le=c(()=>t($).length===1?t($)[0]:void 0),fe=c(()=>[{key:"senderIcon",label:"",width:Ba,fixed:!0,sortable:!1,filterable:!1,align:"center",value:()=>""},{key:"senderName",label:`${s("Sender")} ${s("Name")}`,width:170,copy:"name",value:me=>n.nameOf(me.SENDER)},{key:"SENDER",label:"SENDER",width:140,mono:!0,copy:"address"},{key:"senderType",label:"TYPE",width:130,value:me=>n.devices.index(t(w))?.get(me.SENDER)?.TYPE??""},{key:"receiverIcon",label:"",width:Ba,fixed:!0,sortable:!1,filterable:!1,align:"center",value:()=>""},{key:"receiverName",label:`${s("Receiver")} ${s("Name")}`,width:170,copy:"name",value:me=>n.nameOf(me.RECEIVER)},{key:"RECEIVER",label:"RECEIVER",width:140,mono:!0,copy:"address"},{key:"receiverType",label:"TYPE",width:130,value:me=>n.devices.index(t(w))?.get(me.RECEIVER)?.TYPE??""},{key:"FLAGS",label:"FLAGS",width:48,align:"center",sortable:!1,value:me=>Dl(me).broken?"broken":""},{key:"NAME",label:"NAME",width:180},{key:"DESCRIPTION",label:"DESCRIPTION"}]);function de(me){const P=n.devices.index(t(w));return P?.parentOf(me)?.TYPE??P?.get(me)?.TYPE??""}function B(me){u(E,me.sender,!0),u(b,me.receiver,!0),u(k,!0)}function oe(me,P){u(f,{sender:me.SENDER,receiver:me.RECEIVER},!0),u(o,P.clientX,!0),u(l,P.clientY,!0),u(i,!0)}const K=c(()=>[{id:"edit",label:s("Edit link")},{id:"short",label:s("Activate short"),disabled:!t(R)},{id:"long",label:s("Activate long"),disabled:!t(R)},{id:"sep",separator:!0},{id:"delete",label:s("Delete link"),danger:!0}]);async function X(me){const P=t(f);if(P)switch(me){case"edit":B(P);break;case"short":await n.links.activate(t(w),P.receiver,P.sender,!1);break;case"long":await n.links.activate(t(w),P.receiver,P.sender,!0);break;case"delete":u(a,[`${P.sender}->${P.receiver}`],!0),u(g,!0);break}}var se=LR(),j=Ne(se),ne=A(j),ye=A(ne);{const me=q=>{var Y=CR(),ae=Ne(Y);{let U=c(()=>s("Add link")),I=c(()=>!t(z)),F=c(()=>s("No channel of this interface can be the sender of a link"));Vh(ae,{get caption(){return t(U)},icon:"+",get disabled(){return t(I)},get reason(){return t(F)},testId:"links-add",onclick:()=>u(_,!0)})}var J=d(ae,2);{let U=c(()=>s("Edit link")),I=c(()=>t(le)===void 0),F=c(()=>s("Select one link"));Dt(J,{get title(){return t(U)},icon:"⚙",get disabled(){return t(I)},get reason(){return t(F)},testId:"links-edit",onclick:()=>t(le)&&B(t(le))})}var ve=d(J,2);{var ge=U=>{var I=Nu(),F=Ne(I);{let Ie=c(()=>s("Activate short")),Me=c(()=>t(le)===void 0),Ve=c(()=>s("Select one link"));Dt(F,{get title(){return t(Ie)},icon:"▸",get disabled(){return t(Me)},get reason(){return t(Ve)},testId:"links-play-short",onclick:()=>t(le)&&void n.links.activate(t(w),t(le).receiver,t(le).sender,!1)})}var Ee=d(F,2);{let Ie=c(()=>s("Activate long")),Me=c(()=>t(le)===void 0),Ve=c(()=>s("Select one link"));Dt(Ee,{get title(){return t(Ie)},icon:"▸▸",get disabled(){return t(Me)},get reason(){return t(Ve)},testId:"links-play-long",onclick:()=>t(le)&&void n.links.activate(t(w),t(le).receiver,t(le).sender,!0)})}v(U,I)};W(ve,U=>{t(R)&&U(ge)})}var te=d(ve,2);{let U=c(()=>s("Delete link")),I=c(()=>t($).length===0),F=c(()=>s("Please choose one or more links"));Dt(te,{get title(){return t(U)},icon:"🗑",get disabled(){return t(I)},get reason(){return t(F)},testId:"links-delete",onclick:()=>u(g,!0)})}var O=d(te,2);{let U=c(()=>s("Refresh"));Dt(O,{get title(){return t(U)},icon:"⟳",testId:"links-refresh",onclick:()=>{n.links.load(t(w))}})}v(q,Y)},P=q=>{var Y=Nu(),ae=Ne(Y);{var J=te=>{var O=PR(),U=m(O);S(I=>{T(O,"title",I),h(U,`${t(p)??""} ✕`)},[()=>s("Filter")]),re("click",O,()=>u(p,"")),v(te,O)};W(ae,te=>{t(p)!==""&&te(J)})}var ve=d(ae,2);{var ge=te=>{var O=MR(),U=m(O,!0);S(I=>h(U,I),[()=>s("{count} defective links",{},t(N))]),v(te,O)};W(ve,te=>{t(N)>0&&te(ge)})}v(q,Y)},ce=(q,Y=Hn,ae=Hn)=>{var J=St(),ve=Ne(J);{var ge=I=>{{let F=c(()=>de(Y().SENDER)),Ee=c(()=>n.host.deviceImageUrl(de(Y().SENDER)));Ha(I,{get deviceType(){return t(F)},get src(){return t(Ee)}})}},te=I=>{{let F=c(()=>de(Y().RECEIVER)),Ee=c(()=>n.host.deviceImageUrl(de(Y().RECEIVER)));Ha(I,{get deviceType(){return t(F)},get src(){return t(Ee)}})}},O=I=>{const F=c(()=>Dl(Y()));var Ee=St(),Ie=Ne(Ee);{var Me=Ve=>{var ze=OR();S((nt,Ze)=>{T(ze,"aria-label",nt),T(ze,"title",Ze)},[()=>s("Defective link"),()=>`${t(F).senderBroken?"SENDER_BROKEN ":""}${t(F).receiverBroken?"RECEIVER_BROKEN":""}`.trim()]),v(Ve,ze)};W(Ie,Ve=>{t(F).broken&&Ve(Me)})}v(I,Ee)},U=I=>{var F=Cn();S(Ee=>h(F,Ee),[()=>ae().value?ae().value(Y())??"":Y()[ae().key]??""]),v(I,F)};W(ve,I=>{ae().key==="senderIcon"?I(ge):ae().key==="receiverIcon"?I(te,1):ae().key==="FLAGS"?I(O,2):I(U,-1)})}v(q,J)};let be=c(()=>s("Links")),ee=c(()=>s("Filter")),he=c(()=>s("No data")),G=c(()=>s("Links")),Q=c(()=>s("{count} links",{},t(D).length));Fs(ye,{get rows(){return t(D)},get scope(){return t(w)},get columns(){return t(fe)},getId:q=>`${q.SENDER}->${q.RECEIVER}`,get caption(){return t(be)},get filterLabel(){return t(ee)},get emptyText(){return t(he)},onactivate:q=>B({sender:q.SENDER,receiver:q.RECEIVER}),onrowcontextmenu:oe,get toolbarLabel(){return t(G)},get countText(){return t(Q)},tableId:"links",testId:"links-table",get selected(){return t(a)},set selected(q){u(a,q,!0)},get filter(){return t(p)},set filter(q){u(p,q,!0)},toolbar:me,status:P,cell:ce,$$slots:{toolbar:!0,status:!0,cell:!0}})}var xe=d(j,2);{let me=c(()=>s("Links"));Ld(xe,{get items(){return t(K)},get x(){return t(o)},get y(){return t(l)},get label(){return t(me)},testId:"links-menu",onselect:P=>{X(P)},get open(){return t(i)},set open(P){u(i,P,!0)}})}var ie=d(xe,2);Yh(ie,{onedit:me=>B(me),get open(){return t(_)},set open(me){u(_,me,!0)}});var Ae=d(ie,2);NR(Ae,{get links(){return t($)},get open(){return t(g)},set open(me){u(g,me,!0)}});var Te=d(Ae,2);nm(Te,{get sender(){return t(E)},get receiver(){return t(b)},get open(){return t(k)},set open(me){u(k,me,!0)}}),v(r,se),ut()}Et(["click"]);function om(r){let e=0;const n=new Set;for(const s of r){const a=Pd(s),i=a?.address??s,o=i.indexOf(":");o>=0&&(e+=1);const l=o>=0?i.slice(0,o):i;n.add(a?`${a.interfaceName}.${l}`:l)}return{devices:n.size,channels:e}}function lm(r,e,n){const s=r[n];return s?Ii(n,s).map(a=>({id:a.path,kind:"node",enumId:n,path:a.path,name:a.node.name,depth:a.depth,hasChildren:(a.node.children?.length??0)>0,...om(Ao(e,a.path))})):[]}function GR(r,e,n){return Object.entries(r).map(([s,a])=>{const i=lm(r,e,s);return{id:s,kind:"enum",enumId:s,name:Nh(s,a,n),depth:0,hasChildren:i.length>0,...om(Ao(e,s)),nodes:i}})}function UR(r){const e=new Map;for(const n of r){e.set(n.id,n);for(const s of n.nodes??[])e.set(s.id,s)}return e}function BR(r,e=14){return Math.max(0,r-1)*e}function HR(r,e){const n=e.split("/")[0]??"";return jh(r,n).filter(s=>BS(e,s.path))}function VR(r,e){return Ao(r,e.kind==="enum"?e.enumId:e.path??"")}function Cu(r,e,n){return{...r,en:e,[n]:e}}var zR=y('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button hmm-meta-delete-danger svelte-1af2i6v"> </button>',1),jR=y('<p class="hmm-meta-delete-empty svelte-1af2i6v"> </p>'),WR=y("<li> </li>"),KR=y('<p class="hmm-meta-delete-title svelte-1af2i6v"> </p> <ul class="hmm-meta-delete-members svelte-1af2i6v"></ul>',1),YR=y('<p class="hmm-meta-delete-subject svelte-1af2i6v"> </p> <!>',1);function qR(r,e){ct(e,!0);let n=H(e,"open",15,!1),s=H(e,"labelOf",3,void 0),a=H(e,"testId",3,"meta-delete"),i=C(!1);ot(()=>{n()&&u(i,!1)});async function o(){if(t(i))return;u(i,!0);const l=await e.onapply(e.members.length>0);u(i,!1),l&&n(!1)}{const l=p=>{var _=zR(),g=Ne(_),k=m(g,!0),E=d(g,2),b=m(E,!0);S((w,x)=>{h(k,w),E.disabled=t(i),T(E,"data-testid",`${a()}-apply`),h(b,x)},[()=>e.t("Cancel"),()=>e.members.length===0?e.t("Delete"):e.t("Delete and detach")]),re("click",g,()=>n(!1)),re("click",E,()=>{o()}),v(p,_)};let f=c(()=>`${a()}-dialog`);En(r,{get title(){return e.title},width:"480px",get testId(){return t(f)},get open(){return n()},set open(p){n(p)},buttons:l,children:(p,_)=>{var g=YR(),k=Ne(g),E=m(k,!0),b=d(k,2);{var w=D=>{var N=jR(),R=m(N,!0);S(M=>h(R,M),[()=>e.t("Nothing is assigned here")]),v(D,N)},x=D=>{var N=KR(),R=Ne(N),M=m(R,!0),z=d(R,2);Xe(z,20,()=>e.members,$=>$,($,le)=>{var fe=WR(),de=m(fe,!0);S(B=>h(de,B),[()=>s()===void 0?le:s()(le)]),v($,fe)}),S($=>{h(M,$),T(z,"data-testid",`${a()}-members`)},[()=>e.t("Still assigned here - the assignments are removed with the node:")]),v(D,N)};W(b,D=>{e.members.length===0?D(w):D(x,-1)})}S(()=>h(E,e.subject)),v(p,g)},$$slots:{buttons:!0,default:!0}})}ut()}Et(["click"]);var $R=y('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button"> </button>',1),XR=y("<option> </option>"),QR=y('<p class="hmm-meta-move-subject svelte-wmqa0d"> </p> <label class="hmm-meta-move-row svelte-wmqa0d"><span> </span> <select class="hmm-select hmm-meta-move-select svelte-wmqa0d"><option> </option><!></select></label>',1);function ZR(r,e){ct(e,!0);let n=H(e,"open",15,!1),s=H(e,"current",3,""),a=H(e,"testId",3,"meta-move"),i=C(""),o=C(!1);ot(()=>{n()&&(u(i,s()),u(o,!1))});async function l(){if(t(o))return;u(o,!0);const f=await e.onapply(t(i)===""?null:t(i));u(o,!1),f&&n(!1)}{const f=_=>{var g=$R(),k=Ne(g),E=m(k,!0),b=d(k,2),w=m(b,!0);S((x,D)=>{h(E,x),b.disabled=t(o),T(b,"data-testid",`${a()}-apply`),h(w,D)},[()=>e.t("Cancel"),()=>e.t("Apply")]),re("click",k,()=>n(!1)),re("click",b,()=>{l()}),v(_,g)};let p=c(()=>`${a()}-dialog`);En(r,{get title(){return e.title},width:"440px",get testId(){return t(p)},get open(){return n()},set open(_){n(_)},buttons:f,children:(_,g)=>{var k=QR(),E=Ne(k),b=m(E,!0),w=d(E,2),x=A(w),D=m(x,!0),N=d(x,2),R=A(N),M=m(R,!0);R.value=R.__value="";var z=d(R);Xe(z,17,()=>e.targets,$=>$.path,($,le)=>{var fe=XR(),de=m(fe,!0),B={};S(oe=>{h(de,oe),B!==(B=t(le).path)&&(fe.value=(fe.__value=B)??"")},[()=>ql(t(le)," ")]),v($,fe)}),Xt(N),S(($,le,fe,de)=>{h(b,e.subject),h(D,$),T(N,"size",le),T(N,"aria-label",fe),T(N,"data-testid",`${a()}-parent`),h(M,de)},[()=>e.t("Move to"),()=>Math.min(12,Math.max(4,e.targets.length+1)),()=>e.t("Move to"),()=>e.t("Top level")]),kr(N,()=>t(i),$=>u(i,$)),v(_,k)},$$slots:{buttons:!0,default:!0}})}ut()}Et(["click"]);var JR=y('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button"> </button>',1),ex=y('<label class="hmm-meta-name-row svelte-ue9nlv"><span> </span> <input class="hmm-input hmm-meta-name-input svelte-ue9nlv"/></label>');function tx(r,e){ct(e,!0);let n=H(e,"open",15,!1),s=H(e,"initial",3,""),a=H(e,"testId",3,"meta-name"),i=C(""),o=C(!1),l=C(void 0);ot(()=>{n()&&(u(i,s()),u(o,!1),queueMicrotask(()=>{t(l)?.focus(),t(l)?.select()}))});async function f(){const p=t(i).trim();if(p===""||t(o))return;u(o,!0);const _=await e.onapply(p);u(o,!1),_&&n(!1)}{const p=g=>{var k=JR(),E=Ne(k),b=m(E,!0),w=d(E,2),x=m(w,!0);S((D,N,R)=>{h(b,D),w.disabled=N,T(w,"data-testid",`${a()}-apply`),h(x,R)},[()=>e.t("Cancel"),()=>t(o)||t(i).trim()==="",()=>e.t("Apply")]),re("click",E,()=>n(!1)),re("click",w,()=>{f()}),v(g,k)};let _=c(()=>`${a()}-dialog`);En(r,{get title(){return e.title},width:"440px",get testId(){return t(_)},get open(){return n()},set open(g){n(g)},buttons:p,children:(g,k)=>{var E=ex(),b=A(E),w=m(b,!0),x=d(b,2);fn(x,D=>u(l,D),()=>t(l)),S(()=>{h(w,e.label),T(x,"aria-label",e.label),T(x,"data-testid",`${a()}-input`)}),re("keydown",x,D=>{D.key==="Enter"&&(D.preventDefault(),f())}),xn(x,()=>t(i),D=>u(i,D)),v(g,E)},$$slots:{buttons:!0,default:!0}})}ut()}Et(["click","keydown"]);var nx=y("<!> <!> <!> <!> <!> <!> <!>",1),rx=y("<span> </span>"),sx=y('<span class="hmm-meta-path svelte-147hcfo"> </span>'),ax=y('<div class="hmm-page svelte-147hcfo"><div class="hmm-page-grid svelte-147hcfo"><!></div></div> <!> <!> <!>',1);function ix(r,e){ct(e,!0);let n=H(e,"enumId",3,void 0),s=H(e,"flat",3,!1),a=H(e,"available",3,!0),i=H(e,"writable",3,!0),o=H(e,"language",3,"en"),l=H(e,"labelOf",3,void 0),f=H(e,"emptyText",3,void 0),p=H(e,"countText",3,void 0),_=H(e,"tableId",3,void 0),g=H(e,"testId",3,"meta-table"),k=C(We([])),E=C(We([])),b=C(!1),w=C(!1),x=C("add"),D=C(""),N=C(""),R=C(""),M=C(!1),z=C(!1),$=C(void 0);const le=c(()=>n()===void 0),fe=c(()=>!s()),de=c(()=>n()===void 0?GR(e.enums,e.objects,o()):lm(e.enums,e.objects,n())),B=c(()=>UR(t(de))),oe=c(()=>t(k).length===1?t(B).get(t(k)[0]??""):void 0),K=c(()=>t(oe)?.kind==="node"?t(oe):void 0),X=[];ot(()=>{if(!t(le))return;const I=Object.keys(e.enums).filter(F=>!X.includes(F));I.length>0&&(X.push(...I),u(E,[...t(E),...I],!0))}),ot(()=>{t(k).some(I=>!t(B).has(I))&&u(k,t(k).filter(I=>t(B).has(I)),!0)});const se=c(()=>a()?i()?e.t("Select a row"):e.t("The store does not take writes"):e.t("No store connected")),j=c(()=>a()&&i()&&!t(b)),ne=c(()=>n()??t(oe)?.enumId),ye=c(()=>t(j)&&t(ne)!==void 0),xe=c(()=>t(j)&&t(le)?e.t("Select a taxonomy or a node"):t(se)),ie=c(()=>t(j)?e.t("Select a node"):t(se)),Ae=c(()=>[{key:"name",label:e.t("Name"),width:240,sortable:!t(le),value:I=>I.name},{key:"devices",label:e.t("Devices"),width:96,align:"right",filterable:!1,sortable:!t(le),value:I=>I.devices===0?"":I.devices},{key:"channels",label:e.t("Channels"),width:96,align:"right",filterable:!1,sortable:!t(le),value:I=>I.channels===0?"":I.channels},{key:"path",label:e.t("Path"),width:220,mono:!0,sortable:!t(le),value:I=>I.path??I.enumId}]);function Te(I){return I.nodes??[]}function me(I,F){switch(u(x,I,!0),u($,F,!0),I){case"enum":u(D,e.t("New taxonomy"),!0),u(N,e.t("Name"),!0),u(R,"");break;case"add":u(D,e.t("Add"),!0),u(N,e.t("Name"),!0),u(R,"");break;case"add-below":u(D,e.t("Add below"),!0),u(N,`${e.t("Add below")}: ${F?.name??""}`),u(R,"");break;case"rename":u(D,e.t("Rename"),!0),u(N,e.t("New name"),!0),u(R,F?.name??"",!0);break}u(w,!0)}async function P(I){u(b,!0);try{switch(t(x)){case"enum":return await e.actions.createEnum(Ch(I,Object.keys(e.enums)),Cu(void 0,I,o()));case"add":return t(ne)===void 0?!1:await e.actions.createNode(t(ne),void 0,I)!==void 0;case"add-below":{const F=t($);return F?.path===void 0?!1:await e.actions.createNode(F.enumId,F.path,I)!==void 0}case"rename":{const F=t($);return F===void 0?!1:F.kind==="enum"?await e.actions.renameEnum(F.enumId,Cu(e.enums[F.enumId]?.name,I,o())):await e.actions.renameNode(F.path??"",I)}}}finally{u(b,!1)}}function ce(I){I?.path!==void 0&&(u($,I,!0),u(M,!0))}async function be(I){const F=t($);if(F?.path===void 0)return!1;u(b,!0);try{return await e.actions.moveNode(F.path,I)}finally{u(b,!1)}}function ee(I){I!==void 0&&(u($,I,!0),u(z,!0))}async function he(I){const F=t($);if(F===void 0)return!1;u(b,!0);try{return F.kind==="enum"?await e.actions.deleteEnum(F.enumId,I):await e.actions.deleteNode(F.path??"",I)}finally{u(b,!1)}}async function G(){u(b,!0),await e.actions.refresh(),u(b,!1)}function Q(I){t(j)&&me("rename",I)}const q=c(()=>t($)?.path===void 0?void 0:t($)),Y=c(()=>t($)===void 0?[]:VR(e.objects,t($)));var ae=ax(),J=Ne(ae),ve=A(J),ge=A(ve);{const I=Se=>{var V=nx(),L=Ne(V);{var Pe=Ue=>{{let Fe=c(()=>e.t("New taxonomy")),Ye=c(()=>!t(j));Dt(Ue,{get title(){return t(Fe)},icon:"⊞",get disabled(){return t(Ye)},get reason(){return t(se)},testId:"meta-new-enum",onclick:()=>me("enum",void 0)})}};W(L,Ue=>{t(le)&&Ue(Pe)})}var Ge=d(L,2);{let Ue=c(()=>e.t("Add")),Fe=c(()=>!t(ye));Dt(Ge,{get title(){return t(Ue)},icon:"+",get disabled(){return t(Fe)},get reason(){return t(xe)},testId:"meta-add",onclick:()=>me("add",t(oe))})}var qe=d(Ge,2);{var we=Ue=>{{let Fe=c(()=>e.t("Add below")),Ye=c(()=>!t(j)||t(K)===void 0);Dt(Ue,{get title(){return t(Fe)},icon:"⊕",get disabled(){return t(Ye)},get reason(){return t(ie)},testId:"meta-add-below",onclick:()=>me("add-below",t(K))})}};W(qe,Ue=>{t(fe)&&Ue(we)})}var Ce=d(qe,2);{let Ue=c(()=>e.t("Rename")),Fe=c(()=>!t(j)||t(oe)===void 0);Dt(Ce,{get title(){return t(Ue)},icon:"✎",get disabled(){return t(Fe)},get reason(){return t(se)},testId:"meta-rename",onclick:()=>me("rename",t(oe))})}var Oe=d(Ce,2);{var Be=Ue=>{{let Fe=c(()=>e.t("Move")),Ye=c(()=>!t(j)||t(K)===void 0);Dt(Ue,{get title(){return t(Fe)},icon:"⤴",get disabled(){return t(Ye)},get reason(){return t(ie)},testId:"meta-move",onclick:()=>ce(t(K))})}};W(Oe,Ue=>{t(fe)&&Ue(Be)})}var pe=d(Oe,2);{let Ue=c(()=>e.t("Delete")),Fe=c(()=>!t(j)||t(oe)===void 0);Dt(pe,{get title(){return t(Ue)},icon:"🗑",get disabled(){return t(Fe)},get reason(){return t(se)},testId:"meta-delete",onclick:()=>ee(t(oe))})}var De=d(pe,2);{let Ue=c(()=>e.t("Refresh")),Fe=c(()=>!a());Dt(De,{get title(){return t(Ue)},icon:"⟳",get disabled(){return t(Fe)},get busy(){return t(b)},testId:"meta-refresh",onclick:()=>{G()}})}v(Se,V)},F=(Se,V=Hn,L=Hn)=>{var Pe=St(),Ge=Ne(Pe);{var qe=Oe=>{var Be=rx();let pe,De;var Ue=m(Be,!0);S(Fe=>{pe=_t(Be,1,"hmm-meta-name svelte-147hcfo",null,pe,{"hmm-meta-name-enum":V().kind==="enum"}),T(Be,"data-depth",V().depth),De=Un(Be,"",De,{"padding-left":Fe}),h(Ue,V().name)},[()=>`${String(BR(V().depth))}px`]),v(Oe,Be)},we=Oe=>{var Be=sx(),pe=m(Be,!0);S(()=>h(pe,V().path??V().enumId)),v(Oe,Be)},Ce=Oe=>{var Be=Cn();S(pe=>h(Be,pe),[()=>L().value?L().value(V())??"":""]),v(Oe,Be)};W(Ge,Oe=>{L().key==="name"?Oe(qe):L().key==="path"?Oe(we,1):Oe(Ce,-1)})}v(Se,Pe)};let Ee=c(()=>t(le)?Te:void 0),Ie=c(()=>n()??"metadata"),Me=c(()=>n()===void 0?e.t("Metadata"):n()==="room"?e.t("Rooms"):e.t("Functions")),Ve=c(()=>e.t("Filter")),ze=c(()=>a()?f()??"":e.t("No store connected")),nt=c(()=>e.t("No row matches the filter")),Ze=c(()=>e.t("Clear filter")),_e=c(()=>p()===void 0?void 0:p()(t(de).length));Fs(ge,{get rows(){return t(de)},get columns(){return t(Ae)},getId:Se=>Se.id,get subRows(){return t(Ee)},get scope(){return t(Ie)},get caption(){return t(Me)},get filterLabel(){return t(Ve)},get emptyText(){return t(ze)},get noMatchText(){return t(nt)},get clearFilterLabel(){return t(Ze)},showingText:(Se,V)=>e.t("Showing {shown} of {total}",{shown:Se,total:V}),get countText(){return t(_e)},onactivate:Q,get tableId(){return _()},get testId(){return g()},get selected(){return t(k)},set selected(Se){u(k,Se,!0)},get expanded(){return t(E)},set expanded(Se){u(E,Se,!0)},toolbar:I,cell:F,$$slots:{toolbar:!0,cell:!0}})}var te=d(J,2);tx(te,{get title(){return t(D)},get label(){return t(N)},get initial(){return t(R)},get t(){return e.t},onapply:P,testId:"meta-name",get open(){return t(w)},set open(I){u(w,I,!0)}});var O=d(te,2);{let I=c(()=>e.t("Move")),F=c(()=>t(q)?.name??""),Ee=c(()=>t(q)?.path===void 0?[]:HR(e.enums,t(q).path)),Ie=c(()=>t(q)?.path===void 0?"":f1(t(q).path)??"");ZR(O,{get title(){return t(I)},get subject(){return t(F)},get targets(){return t(Ee)},get current(){return t(Ie)},get t(){return e.t},onapply:be,testId:"meta-move",get open(){return t(M)},set open(Me){u(M,Me,!0)}})}var U=d(O,2);{let I=c(()=>e.t("Delete")),F=c(()=>t($)?.name??"");qR(U,{get title(){return t(I)},get subject(){return t(F)},get members(){return t(Y)},get labelOf(){return l()},get t(){return e.t},onapply:he,testId:"meta-delete",get open(){return t(z)},set open(Ee){u(z,Ee,!0)}})}v(r,ae),ut()}function al(r,e){ct(e,!0);let n=H(e,"enumId",3,void 0);const s=Ot(),a=s.i18n.t,i=c(()=>s.taxonomy),o={createEnum:(_,g)=>s.taxonomy.createEnum(_,g),renameEnum:(_,g)=>s.taxonomy.renameEnum(_,g),deleteEnum:(_,g)=>s.taxonomy.deleteEnum(_,g),createNode:(_,g,k)=>s.taxonomy.createNode(_,g,k),renameNode:(_,g)=>s.taxonomy.renameNode(_,g),moveNode:(_,g)=>s.taxonomy.moveNode(_,g),deleteNode:(_,g)=>s.taxonomy.deleteNode(_,g),refresh:()=>s.taxonomy.refresh()};function l(_){const g=Pd(_)?.address??_,k=s.names.name(g);return k===void 0?g:`${k} (${g})`}const f=c(()=>n()==="room"?a("No rooms yet"):n()==="function"?a("No functions yet"):a("No taxonomies yet"));function p(_){switch(n()){case"room":return a("{count} rooms",{},_);case"function":return a("{count} functions",{},_);default:return a("{count} taxonomies",{},_)}}{let _=c(()=>n()===void 0?"meta":`meta-${n()}`),g=c(()=>n()===void 0?"meta-table":`meta-table-${n()}`);ix(r,{get enums(){return t(i).enums},get objects(){return t(i).objects},get enumId(){return n()},get flat(){return t(i).flatOnly},get available(){return t(i).available},get writable(){return t(i).writable},get language(){return s.i18n.language},get t(){return a},get actions(){return o},labelOf:l,get emptyText(){return t(f)},countText:p,get tableId(){return t(_)},get testId(){return t(g)}})}ut()}var ox=y('<span class="hmm-rssi hmm-rssi-unknown svelte-1wk3r6l" data-rssi="unknown">—</span>'),lx=y("<span></span>"),dx=y('<span role="img"><span class="hmm-rssi-value"> </span><span class="hmm-rssi-bars svelte-1wk3r6l" aria-hidden="true"></span></span>');function ga(r,e){ct(e,!0);let n=H(e,"value",3,void 0),s=H(e,"labelOf",3,k=>k.label),a=H(e,"testId",3,void 0);const i=c(()=>t1(n())),o=c(()=>t(i)===void 0?void 0:`${String(n())} dBm · ${s()(t(i))}`),l=[1,2,3,4];var f=St(),p=Ne(f);{var _=k=>{var E=ox();S(()=>T(E,"data-testid",a())),v(k,E)},g=k=>{var E=dx(),b=A(E),w=m(b,!0),x=d(b);Xe(x,20,()=>l,D=>D,(D,N)=>{var R=lx();let M;S(()=>M=_t(R,1,"hmm-rssi-bar svelte-1wk3r6l",null,M,{"hmm-rssi-bar-off":N>t(i).bars})),v(D,R)}),S(()=>{_t(E,1,`hmm-rssi hmm-rssi-${t(i).step??""}`,"svelte-1wk3r6l"),T(E,"title",t(o)),T(E,"aria-label",t(o)),T(E,"data-rssi",t(i).step),T(E,"data-bars",t(i).bars),T(E,"data-testid",a()),h(w,n())}),v(k,E)};W(p,k=>{t(i)===void 0?k(_):k(g,-1)})}v(r,f),ut()}var cx=y('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="best-receiver-confirm"> </button>',1),ux=y('<p class="hmm-best-receiver-empty svelte-1gd5w9r" data-testid="best-receiver-empty"> </p>'),fx=y('<tr><td class="svelte-1gd5w9r"><input type="checkbox"/></td><td class="svelte-1gd5w9r"> </td><td class="hmm-mono svelte-1gd5w9r"> </td><td class="svelte-1gd5w9r"> </td><td class="svelte-1gd5w9r"><!></td><td class="svelte-1gd5w9r"> </td><td class="svelte-1gd5w9r"><!></td><td class="hmm-best-receiver-gain svelte-1gd5w9r"> </td><td class="hmm-best-receiver-note svelte-1gd5w9r"><!></td></tr>'),hx=y('<div class="hmm-best-receiver-scroll svelte-1gd5w9r"><table class="hmm-best-receiver-table svelte-1gd5w9r"><thead><tr><th class="svelte-1gd5w9r"></th><th class="svelte-1gd5w9r"> </th><th class="svelte-1gd5w9r">ADDRESS</th><th class="svelte-1gd5w9r"> </th><th class="svelte-1gd5w9r">→ dBm</th><th class="svelte-1gd5w9r"> </th><th class="svelte-1gd5w9r">→ dBm</th><th class="svelte-1gd5w9r"> </th><th class="svelte-1gd5w9r"></th></tr></thead><tbody></tbody></table></div>'),mx=y('<p class="hmm-best-receiver-progress svelte-1gd5w9r" data-testid="best-receiver-progress"> </p>'),vx=y('<p class="hmm-best-receiver-intro svelte-1gd5w9r"> </p> <div class="hmm-best-receiver-margin svelte-1gd5w9r"><label class="svelte-1gd5w9r"><span> </span> <input class="hmm-input svelte-1gd5w9r" type="number" min="0" max="60" step="1" data-testid="best-receiver-margin"/> <span>dB</span></label> <span class="hmm-best-receiver-hint svelte-1gd5w9r"> </span></div> <!> <p class="hmm-best-receiver-rest svelte-1gd5w9r" data-testid="best-receiver-rest"> </p> <!>',1);function px(r,e){ct(e,!0);let n=H(e,"open",15,!1);const s=Ot(),a=s.i18n.t;let i=C(We(Cl)),o=C(We({})),l=C(!1),f=C(We({done:0,total:0}));const p=c(()=>s.app.selectedInterface),_=c(()=>s.devices.devices(t(p))),g=c(()=>s.radio.gateways(t(p))),k=c(()=>s.radio.proposeReceivers(t(p),t(_),t(i))),E=c(()=>t(k).filter(M=>M.verdict==="switch"||M.verdict==="marginal"||M.verdict==="unheard")),b=c(()=>({keep:t(k).filter(M=>M.verdict==="keep").length,unmeasured:t(k).filter(M=>M.verdict==="unmeasured").length,roaming:t(k).filter(M=>M.verdict==="roaming").length})),w=c(()=>t(E).filter(M=>x(M)));function x(M){return t(o)[M.address]??M.verdict==="switch"}function D(M){if(M===void 0||M==="")return"—";const z=t(g).find($=>$.ADDRESS===M);return z?Ua(z):M}function N(M){const z=Number.parseInt(M,10);u(i,Number.isFinite(z)?Math.max(0,z):Cl,!0),u(o,{},!0)}ot(()=>{n()&&(u(o,{},!0),u(f,{done:0,total:0},!0))});async function R(){const M=t(w).filter($=>$.best!==void 0);u(l,!0),u(f,{done:0,total:M.length},!0);let z=0;for(const $ of M)await s.radio.setBidcosInterface(t(p),$.address,$.best??"",!1)||(z+=1),u(f,{done:t(f).done+1,total:M.length},!0);await s.devices.load(t(p),{refresh:!0}),await s.radio.load(t(p)),u(o,{},!0),u(l,!1),z===0&&n(!1)}{const M=$=>{var le=cx(),fe=Ne(le),de=m(fe,!0),B=d(fe,2),oe=m(B,!0);S((K,X)=>{fe.disabled=t(l),h(de,K),B.disabled=t(l)||t(w).length===0,h(oe,X)},[()=>a("Cancel"),()=>a("Assign ({count})",{count:t(w).length})]),re("click",fe,()=>n(!1)),re("click",B,()=>{R()}),v($,le)};let z=c(()=>a("Best receiver"));En(r,{get title(){return t(z)},width:"800px",testId:"best-receiver-dialog",get open(){return n()},set open($){n($)},buttons:M,children:($,le)=>{var fe=vx(),de=Ne(fe),B=m(de,!0),oe=d(de,2),K=A(oe),X=A(K),se=m(X,!0),j=d(X,2),ne=d(K,2),ye=m(ne,!0),xe=d(oe,2);{var ie=be=>{var ee=ux(),he=m(ee,!0);S(G=>h(he,G),[()=>a("Every device is on the receiver that hears it best")]),v(be,ee)},Ae=be=>{var ee=hx(),he=A(ee),G=A(he),Q=A(G),q=d(A(Q)),Y=m(q,!0),ae=d(q,2),J=m(ae,!0),ve=d(ae,2),ge=m(ve,!0),te=d(ve,2),O=m(te,!0),U=d(G);Xe(U,21,()=>t(E),I=>I.address,(I,F)=>{var Ee=fx(),Ie=A(Ee),Me=A(Ie),Ve=d(Ie),ze=m(Ve,!0),nt=d(Ve),Ze=m(nt,!0),_e=d(nt),Se=m(_e,!0),V=d(_e),L=A(V);ga(L,{get value(){return t(F).configuredTx},labelOf:Fe=>a(Fe.label)});var Pe=d(V),Ge=m(Pe,!0),qe=d(Pe),we=A(qe);ga(we,{get value(){return t(F).bestTx},labelOf:Fe=>a(Fe.label)});var Ce=d(qe),Oe=m(Ce,!0),Be=d(Ce),pe=A(Be);{var De=Fe=>{var Ye=Cn();S(tt=>h(Ye,tt),[()=>a("Below the margin")]),v(Fe,Ye)},Ue=Fe=>{var Ye=Cn();S(tt=>h(Ye,tt),[()=>a("Not heard by the configured receiver")]),v(Fe,Ye)};W(pe,Fe=>{t(F).verdict==="marginal"?Fe(De):t(F).verdict==="unheard"&&Fe(Ue,1)})}S((Fe,Ye,tt,ft,dt)=>{T(Ee,"data-testid",`best-receiver-row-${t(F).address}`),T(Ee,"data-verdict",t(F).verdict),Pr(Me,Fe),Me.disabled=t(l),T(Me,"aria-label",t(F).address),T(Me,"data-testid",`best-receiver-check-${t(F).address}`),h(ze,Ye),h(Ze,t(F).address),h(Se,tt),h(Ge,ft),T(Ce,"data-testid",`best-receiver-gain-${t(F).address}`),h(Oe,dt)},[()=>x(t(F)),()=>s.nameOf(t(F).address),()=>D(t(F).configured),()=>D(t(F).best),()=>t(F).gain===void 0?"—":`+${String(t(F).gain)} dB`]),re("change",Me,Fe=>{u(o,{...t(o),[t(F).address]:Fe.currentTarget.checked},!0)}),v(I,Ee)}),S((I,F,Ee,Ie)=>{h(Y,I),h(J,F),h(ge,Ee),h(O,Ie)},[()=>a("Name"),()=>a("Configured"),()=>a("Proposed"),()=>a("Gain")]),v(be,ee)};W(xe,be=>{t(E).length===0?be(ie):be(Ae,-1)})}var Te=d(xe,2),me=m(Te,!0),P=d(Te,2);{var ce=be=>{var ee=mx(),he=m(ee,!0);S(G=>h(he,G),[()=>a("{done} of {total} assigned",t(f))]),v(be,ee)};W(P,be=>{t(l)&&be(ce)})}S((be,ee,he,G)=>{h(B,be),h(se,ee),ln(j,t(i)),j.disabled=t(l),h(ye,he),h(me,G)},[()=>a("Which interface receives each device best, from the levels the interfaces last measured. Nothing is written until you confirm; every device is one setBidcosInterface."),()=>a("Margin"),()=>a("A switch is proposed only when the best interface receives the device at least this much better than the configured one - two reads of the same link differ by a few dB."),()=>a("Not listed: {keep} on their best receiver, {unmeasured} without a measurement, {roaming} roaming",t(b))]),re("input",j,be=>N(be.currentTarget.value)),v($,fe)},$$slots:{buttons:!0,default:!0}})}ut()}Et(["click","input","change"]);const ka="ROUTER_MODULE_ENABLED",bo="ROUTING_TABLE";function gx(r){return r!==void 0&&Object.hasOwn(r,ka)}function bx(r){const e=r?.[ka];if(e!==void 0)return e===!0||e===1||e==="1"||e==="true"}function ya(r){return`${r}:0`}function dm(r,e){for(const n of[r,e])if(n!==void 0&&(ah(n.PARAMSETS)??[]).includes(bo))return n.ADDRESS}function _x(r){return{routing:r.filter(e=>e.enabled===!0).length,capable:r.length}}var Ex=y('<button type="button" class="hmm-button" data-testid="routing-switch-cancel"> </button> <button type="button" class="hmm-button" data-testid="routing-switch-confirm"> </button>',1),yx=y('<p class="hmm-routing-question svelte-1r9m9go" data-testid="routing-switch-text"> </p> <p class="hmm-routing-help svelte-1r9m9go"> </p> <p class="hmm-routing-help svelte-1r9m9go"> </p>',1);function Sx(r,e){ct(e,!0);let n=H(e,"open",15,!1);const a=Ot().i18n.t;function i(){n(!1),e.onconfirm()}{const o=f=>{var p=Ex(),_=Ne(p),g=m(_,!0),k=d(_,2),E=m(k,!0);S((b,w)=>{h(g,b),h(E,w)},[()=>a("Cancel"),()=>e.on?a("Switch on"):a("Switch off")]),re("click",_,()=>n(!1)),re("click",k,i),v(f,p)};let l=c(()=>e.on?a("Switch routing on?"):a("Switch routing off?"));En(r,{get title(){return t(l)},width:"460px",testId:"routing-switch-dialog",get open(){return n()},set open(f){n(f)},buttons:o,children:(f,p)=>{var _=yx(),g=Ne(_),k=m(g,!0),E=d(g,2),b=m(E,!0),w=d(E,2),x=m(w,!0);S((D,N)=>{h(k,e.name===e.address?e.address:`${e.name} (${e.address})`),h(b,D),h(x,N)},[()=>e.on?a("The device then forwards frames for other HmIP devices that cannot reach the access point directly. The routes of the network change over the next minutes."):a("Devices that reach the access point through this one have to find another route; until they do they may be unreachable."),()=>a("Writes ROUTER_MODULE_ENABLED = {value} to the MASTER paramset of {address}.",{value:e.on?"true":"false",address:`${e.address}:0`})]),v(f,_)},$$slots:{buttons:!0,default:!0}})}ut()}Et(["click"]);var wx=y('<button type="button" role="switch"><span class="hmm-routing-track svelte-13nj8dx" aria-hidden="true"><span class="hmm-routing-knob svelte-13nj8dx"></span></span> <span class="hmm-routing-label svelte-13nj8dx"> </span></button>'),kx=y('<button type="button" class="hmm-inline-button svelte-13nj8dx"> </button>'),Ax=y("<!> <!> <!>",1);function Tx(r,e){ct(e,!0);const n=Ot(),s=n.i18n.t;let a=C(We([])),i=C(!1),o=C(""),l=C(!1),f=C(!1),p=C("");const _=c(()=>n.devices.index(e.interfaceName)),g=c(()=>t(_)!==void 0);ot(()=>{const K=e.interfaceName;K!==""&&t(g)&&sr(()=>{n.routers.load(K)})});const k=c(()=>n.routers.routers(e.interfaceName)),E=c(()=>_x(t(k))),b=c(()=>Object.fromEntries(t(k).map(K=>[K.address,K.enabled]))),w=c(()=>t(k).map(K=>t(_)?.get(K.address)).filter(K=>K!==void 0)),x=c(()=>{const K=n.radio.gateways(e.interfaceName);return(K.find(X=>X.DEFAULT===!0)??K[0])?.ADDRESS??""});function D(K){const X=n.taxonomy,se=ne=>X.view(X.refOf(e.interfaceName,ne)),j=n.devices.channels(e.interfaceName,K.ADDRESS).map(ne=>se(ne.ADDRESS));return Kh(se(K.ADDRESS),j,"room").join(", ")}function N(K){return dm(K,t(_)?.get(ya(K.ADDRESS)))}function R(K){return s(K===void 0?"unknown":K?"on":"off")}const M=c(()=>[{key:"icon",label:"",width:Ba,fixed:!0,sortable:!1,filterable:!1,align:"center",value:()=>""},{key:"name",label:s("Name"),width:180,copy:"name",value:K=>n.nameOf(K.ADDRESS)},{key:"routing",label:s("Routing"),width:110,minWidth:90,keepMinWidth:!0,filterable:!1,value:K=>R(t(b)[K.ADDRESS])},{key:"rx",label:"← dBm",width:80,align:"right",filterable:!1,value:K=>n.radio.pair(e.interfaceName,K.ADDRESS,t(x))?.rx??""},{key:"tx",label:"→ dBm",width:80,align:"right",filterable:!1,value:K=>n.radio.pair(e.interfaceName,K.ADDRESS,t(x))?.tx??""},{key:"table",label:s("Routing table"),width:130,minWidth:110,keepMinWidth:!0,sortable:!1,filterable:!1,value:()=>""},{key:"ADDRESS",label:"ADDRESS",width:140,mono:!0,copy:"address"},{key:"TYPE",label:"TYPE",width:130},{key:"rooms",label:s("Rooms"),width:120,value:K=>D(K)}]);function z(K,X){u(o,K,!0),u(l,X,!0),u(i,!0)}function $(K){u(p,K,!0),u(f,!0)}const le=c(()=>n.routers.isLoading(e.interfaceName));var fe=Ax(),de=Ne(fe);{const K=Te=>{{let me=c(()=>s("Refresh"));Dt(Te,{get title(){return t(me)},icon:"⟳",get busy(){return t(le)},testId:"routers-refresh",onclick:()=>{n.routers.load(e.interfaceName),n.radio.load(e.interfaceName)}})}},X=(Te,me=Hn,P=Hn)=>{var ce=St(),be=Ne(ce);{var ee=Y=>{{let ae=c(()=>n.host.deviceImageUrl(me().TYPE));Ha(Y,{get deviceType(){return me().TYPE},get src(){return t(ae)}})}},he=Y=>{const ae=c(()=>n.radio.pair(e.interfaceName,me().ADDRESS,t(x)));{let J=c(()=>P().key==="rx"?t(ae)?.rx:t(ae)?.tx),ve=c(()=>`router-rssi-${me().ADDRESS}-${P().key}`);ga(Y,{get value(){return t(J)},labelOf:ge=>s(ge.label),get testId(){return t(ve)}})}},G=Y=>{const ae=c(()=>t(b)[me().ADDRESS]);var J=wx();let ve;var ge=d(A(J),2),te=m(ge,!0);S((O,U,I)=>{ve=_t(J,1,"hmm-routing-switch svelte-13nj8dx",null,ve,{"hmm-routing-on":t(ae)===!0}),T(J,"aria-checked",t(ae)===!0),T(J,"aria-label",O),T(J,"title",U),J.disabled=t(ae)===void 0||n.routers.writing!=="",T(J,"data-testid",`routing-switch-${me().ADDRESS}`),h(te,I)},[()=>`${s("Routing")} ${n.nameOf(me().ADDRESS)}`,()=>t(ae)===!0?s("Switch routing off"):s("Switch routing on"),()=>R(t(ae))]),re("click",J,O=>{O.stopPropagation(),z(me().ADDRESS,t(ae)!==!0)}),v(Y,J)},Q=Y=>{const ae=c(()=>N(me()));var J=kx(),ve=m(J,!0);S((ge,te)=>{J.disabled=t(ae)===void 0,T(J,"title",ge),T(J,"data-testid",`routing-table-${me().ADDRESS}`),h(ve,te)},[()=>t(ae)===void 0?s("The interface offers no routing table for this device"):s("Read once from the device itself: costs duty cycle"),()=>s("Routing table")]),re("click",J,ge=>{ge.stopPropagation(),t(ae)!==void 0&&$(t(ae))}),v(Y,J)},q=Y=>{var ae=Cn();S(J=>h(ae,J),[()=>P().value?P().value(me())??"":me()[P().key]??""]),v(Y,ae)};W(be,Y=>{P().key==="icon"?Y(ee):P().key==="rx"||P().key==="tx"?Y(he,1):P().key==="routing"?Y(G,2):P().key==="table"?Y(Q,3):Y(q,-1)})}v(Te,ce)};let se=c(()=>s("Routers")),j=c(()=>s("Filter")),ne=c(()=>t(le)?s("Reading…"):s("No device of this interface can route")),ye=c(()=>s("No row matches the filter")),xe=c(()=>s("Clear filter")),ie=c(()=>s("Routers")),Ae=c(()=>s("{routing} of {capable} route",{routing:t(E).routing,capable:t(E).capable},t(E).capable));Fs(de,{get rows(){return t(w)},get columns(){return t(M)},get scope(){return e.interfaceName},getId:Te=>Te.ADDRESS,get caption(){return t(se)},get filterLabel(){return t(j)},get emptyText(){return t(ne)},get noMatchText(){return t(ye)},get clearFilterLabel(){return t(xe)},showingText:(Te,me)=>s("Showing {shown} of {total}",{shown:Te,total:me}),get toolbarLabel(){return t(ie)},get countText(){return t(Ae)},tableId:"radio-routers",testId:"routers-table",get selected(){return t(a)},set selected(Te){u(a,Te,!0)},toolbar:K,cell:X,$$slots:{toolbar:!0,cell:!0}})}var B=d(de,2);{let K=c(()=>n.nameOf(t(o)));Sx(B,{get name(){return t(K)},get address(){return t(o)},get on(){return t(l)},onconfirm:()=>{n.routers.setRouting(e.interfaceName,t(o),t(l))},get open(){return t(i)},set open(X){u(i,X,!0)}})}var oe=d(B,2);am(oe,{get interfaceName(){return e.interfaceName},get address(){return t(p)},get paramset(){return bo},get open(){return t(f)},set open(K){u(f,K,!0)}}),v(r,fe),ut()}Et(["click"]);function Rx(r,e){const n=new Map,s=new Map;for(const a of r)n.set(a.ADDRESS.toUpperCase(),a.ADDRESS),typeof a.RF_ADDRESS=="number"&&!s.has(a.RF_ADDRESS)&&s.set(a.RF_ADDRESS,a.ADDRESS);if(e){n.set(e.id.toUpperCase(),e.id);for(const a of e.radioAddresses)s.set(a,e.id)}return a=>{const i=a.trim(),o=i.toUpperCase(),l=n.get(o);if(l!==void 0)return l;if(/^\d+$/.test(i)){const p=s.get(Number(i));if(p!==void 0)return p}const f=o.startsWith("0X")?o.slice(2):o;if(/^[0-9A-F]{1,6}$/.test(f)){const p=s.get(Number.parseInt(f,16));if(p!==void 0)return p}return i}}function xx(r,e){return r<e?`${r}|${e}`:`${e}|${r}`}function Dx(r){const e=r.resolve??(b=>b),n=r.accessPoint,s=new Set(r.accessPoints??[]),a=new Set([...r.tables.map(b=>b.router),...r.routers??[]]),i=new Map,o=new Map,l=[],f=(b,w)=>b===n||s.has(b)||w?.accessController===!0?"access-point":a.has(b)||w?.router===!0?"router":"device",p=(b,w,x)=>{if(b==="")return;const D=i.get(b),N=f(b,x);if(!D){i.set(b,{id:b,kind:N,listed:w});return}const R={device:0,router:1,"access-point":2};(w&&!D.listed||R[N]>R[D.kind])&&i.set(b,{id:b,kind:R[N]>R[D.kind]?N:D.kind,listed:D.listed||w})},_=b=>{if(b.from===b.to||b.from===""||b.to==="")return;const w=xx(b.from,b.to),x=o.get(w);(!x||x.assumed&&!b.assumed||!b.assumed&&x.distance===void 0&&b.distance!==void 0||!b.assumed&&b.distance!==void 0&&x.distance!==void 0&&b.distance<x.distance)&&o.set(w,b)};p(n,!0);for(const b of s)p(b,!1);for(const b of a)p(b,!0);for(const b of r.tables){const w=b.router;for(const x of b.entries){const D=e(x.destination),N=x.nextHop===""?D:e(x.nextHop);if(D===w)continue;p(D,!0,x);const R=x.isNeighbour||N===D;l.push({router:w,destination:D,nextHop:N,distance:x.distance,rssi:x.rssi,neighbour:R,isStatic:x.isStatic}),R?_({from:w,to:D,distance:x.distance,rssi:x.rssi,isStatic:x.isStatic,assumed:!1}):(p(N,!0),_({from:w,to:N,isStatic:x.isStatic,assumed:!1}),_({from:N,to:D,isStatic:x.isStatic,assumed:!1}))}}const g=b=>[...o.values()].some(w=>w.from===b||w.to===b),k=()=>{const b=new Set([...i.values()].filter(x=>x.kind==="access-point").map(x=>x.id)),w=[...b];for(;w.length>0;){const x=w.shift()??"";for(const D of o.values()){const N=D.from===x?D.to:D.to===x?D.from:void 0;N!==void 0&&!D.assumed&&!b.has(N)&&(b.add(N),w.push(N))}}return b};for(const b of s)g(b)||_({from:n,to:b,isStatic:!1,assumed:!0});const E=k();for(const b of a)E.has(b)||_({from:n,to:b,isStatic:!1,assumed:!0});for(const b of r.devices)b!==n&&(p(b,!1),g(b)||_({from:n,to:b,isStatic:!1,assumed:!0}));return{accessPoint:n,nodes:[...i.values()],edges:[...o.values()],routes:l}}function Ix(r,e){const n=e/2,s=new Map;s.set(r.accessPoint,{x:n,y:n,ring:0});const a=new Map;for(const E of r.edges)a.set(E.from,[...a.get(E.from)??[],E.to]),a.set(E.to,[...a.get(E.to)??[],E.from]);const i=new Map([[r.accessPoint,0]]),o=new Map,l=[r.accessPoint];for(;l.length>0;){const E=l.shift()??"";for(const b of[...a.get(E)??[]].sort())i.has(b)||(i.set(b,(i.get(E)??0)+1),o.set(b,E),l.push(b))}const f=r.nodes.map(E=>E.id).filter(E=>!i.has(E));for(const E of f)i.set(E,1);const p=Math.max(1,...i.values()),_=E=>{const b=r.nodes.find(w=>w.id===E)?.kind;return b==="access-point"?0:b==="router"?1:2},g=E=>p===1?e*.38:e*(.17+.27*(E-1)/(p-1)),k=new Map([[r.accessPoint,-Math.PI/2]]);for(let E=1;E<=p;E+=1){const b=[...i.entries()].filter(([,x])=>x===E).map(([x])=>x);if(E===1)b.sort((x,D)=>_(x)-_(D)||x.localeCompare(D)),b.forEach((x,D)=>{k.set(x,-Math.PI/2+2*Math.PI*D/Math.max(b.length,1))});else{const x=new Map;for(const N of b.sort((R,M)=>_(R)-_(M)||R.localeCompare(M))){const R=o.get(N)??r.accessPoint;x.set(R,[...x.get(R)??[],N])}const D=Math.min(2*Math.PI/Math.max(b.length,1),Math.max(.45,130/g(E)));for(const[N,R]of x){const M=k.get(N)??-Math.PI/2;R.forEach((z,$)=>{k.set(z,M+($-(R.length-1)/2)*D)})}}const w=g(E);for(const x of b){const D=k.get(x)??0;s.set(x,{x:n+w*Math.cos(D),y:n+w*Math.sin(D),ring:E})}}return s}var Nx=y('<p class="hmm-router-table-error svelte-ilqi1h" data-testid="router-table-error"> </p>');function Cx(r,e){ct(e,!0);let n=H(e,"open",15,!1);const s=Ot(),a=s.i18n.t,i=c(()=>s.nameOf(e.router));{let o=c(()=>`${a("Routing table")}: ${t(i)===e.router?e.router:`${t(i)} (${e.router})`}`);En(r,{get title(){return t(o)},width:"720px",height:"80vh",minWidth:320,movable:!0,testId:"router-table-dialog",get open(){return n()},set open(l){n(l)},children:(l,f)=>{var p=St(),_=Ne(p);{var g=E=>{sm(E,{get self(){return e.router},get cached(){return e.table.entries},get readAt(){return e.table.readAt}})},k=E=>{var b=Nx(),w=m(b,!0);S(x=>h(w,x),[()=>a("The router did not answer: {error}",{error:e.table.error})]),v(E,b)};W(_,E=>{e.table?.entries?E(g):e.table?.error!==void 0&&E(k,1)})}v(l,p)},$$slots:{default:!0}})}ut()}var Px=y('<p class="hmm-network-failures svelte-w40n2d" data-testid="routing-read-failures"> </p>'),Mx=Mr('<text class="hmm-network-edge-text svelte-w40n2d"> </text>'),Ox=Mr("<line></line><!>",1),Lx=Mr('<text text-anchor="middle" class="hmm-network-mark svelte-w40n2d"> </text>'),Fx=Mr('<g role="button" tabindex="0"><title> </title><circle class="svelte-w40n2d"></circle><!><text text-anchor="middle" class="hmm-network-label svelte-w40n2d"> </text></g>'),Gx=y('<tr><td class="svelte-w40n2d"> </td><td class="svelte-w40n2d"> </td><td class="svelte-w40n2d"> </td><td class="hmm-network-num svelte-w40n2d"> </td><td class="hmm-network-num svelte-w40n2d"> </td></tr>'),Ux=y('<tr><td colspan="5" class="hmm-network-empty svelte-w40n2d"> </td></tr>'),Bx=y('<div class="hmm-network svelte-w40n2d" data-testid="routing-network"><div class="hmm-network-bar svelte-w40n2d"><button type="button" class="hmm-button" data-testid="routing-read"> </button> <span class="hmm-network-status svelte-w40n2d" data-testid="routing-read-status" aria-live="polite"><!></span></div> <p class="hmm-network-hint svelte-w40n2d"> </p> <!> <div class="hmm-network-body svelte-w40n2d"><figure class="hmm-network-figure svelte-w40n2d"><svg class="hmm-network-graph svelte-w40n2d" role="img" data-testid="routing-graph"><!><!></svg> <figcaption class="hmm-network-legend svelte-w40n2d" data-testid="routing-legend"><span class="svelte-w40n2d"><span class="hmm-legend-dot hmm-legend-ap svelte-w40n2d"></span> </span> <span class="svelte-w40n2d"><span class="hmm-legend-dot hmm-legend-router svelte-w40n2d"></span> </span> <span class="svelte-w40n2d"><span class="hmm-legend-dot hmm-legend-device svelte-w40n2d"></span> </span> <span class="svelte-w40n2d"><span class="hmm-legend-line svelte-w40n2d"></span> </span> <span class="svelte-w40n2d"><span class="hmm-legend-line hmm-legend-assumed svelte-w40n2d"></span> </span></figcaption></figure> <div class="hmm-network-table-wrap svelte-w40n2d"><table class="hmm-network-table svelte-w40n2d" data-testid="routing-routes"><caption class="svelte-w40n2d"> </caption><thead><tr><th scope="col" class="svelte-w40n2d"> </th><th scope="col" class="svelte-w40n2d"> </th><th scope="col" class="svelte-w40n2d"> </th><th scope="col" class="svelte-w40n2d"> </th><th scope="col" class="svelte-w40n2d">RSSI</th></tr></thead><tbody></tbody></table></div></div></div> <!>',1);function Hx(r,e){ct(e,!0);const n=Ot(),s=n.i18n.t;let a=C(!1),i=C(""),o=C("");const l=640,f=c(()=>n.devices.index(e.interfaceName)!==void 0);ot(()=>{const pe=e.interfaceName;pe!==""&&t(f)&&sr(()=>{n.routers.ensure(pe)})});const p=c(()=>n.devices.devices(e.interfaceName)),_=c(()=>t(p).find(pe=>pe.TYPE==="HmIP-RCV-50")),g=pe=>pe.TYPE==="HmIP-RCV-50"||t(_)?.RF_ADDRESS!==void 0&&pe.RF_ADDRESS===t(_).RF_ADDRESS,k=pe=>/^HmIPW?-(HAP|DRAP)/i.test(pe.TYPE),E=c(()=>{const pe=n.radio.gateways(e.interfaceName);return pe.find(De=>De.DEFAULT===!0)??pe[0]}),b=c(()=>t(E)?.ADDRESS??t(_)?.ADDRESS??"AP"),w=c(()=>n.routers.tablesOf(e.interfaceName)),x=c(()=>n.routers.tableProgress[e.interfaceName]),D=c(()=>n.routers.tableTargets(e.interfaceName)),N=c(()=>n.routers.routers(e.interfaceName).filter(pe=>pe.enabled===!0).map(pe=>pe.address)),R=c(()=>{const pe=t(p).filter(Fe=>g(Fe)),De=Rx(t(p),{id:t(b),radioAddresses:pe.flatMap(Fe=>Fe.RF_ADDRESS===void 0?[]:[Fe.RF_ADDRESS])}),Ue=Object.entries(t(w)?.tables??{}).flatMap(([Fe,Ye])=>Ye.entries?[{router:Fe,entries:Ye.entries}]:[]);return Dx({accessPoint:t(b),tables:Ue,devices:t(p).filter(Fe=>!g(Fe)).map(Fe=>Fe.ADDRESS),accessPoints:t(p).filter(Fe=>k(Fe)).map(Fe=>Fe.ADDRESS),routers:t(N),resolve:De})}),M=c(()=>Ix(t(R),l)),z=pe=>t(M).get(pe)??{x:l/2,y:l/2};function $(pe){if(pe===t(b))return t(E)?.TYPE??s("Access point");const De=n.nameOf(pe);return De===""?pe:De}function le(pe){return pe.length>18?`${pe.slice(0,17)}…`:pe}function fe(pe){const De=[];return pe.distance!==void 0&&pe.distance>1&&De.push(`${String(pe.distance)} ${s("hops",{},pe.distance)}`),pe.rssi!==void 0&&De.push(`${String(pe.rssi)} dBm`),De.join(", ")}function de(pe){return pe.kind==="access-point"?s("Access point"):pe.kind==="router"?s("Router"):s("Device")}function B(pe){if(t(w)?.tables[pe.id]!==void 0){u(i,pe.id,!0),u(a,!0);return}u(o,t(o)===pe.id?"":pe.id,!0)}const oe=c(()=>[...t(R).routes].sort((pe,De)=>{const Ue=t(o)!==""&&(pe.destination===t(o)||pe.router===t(o))?0:1,Fe=t(o)!==""&&(De.destination===t(o)||De.router===t(o))?0:1;return Ue-Fe||$(pe.destination).localeCompare($(De.destination))||pe.distance-De.distance})),K=c(()=>Object.entries(t(w)?.tables??{}).filter(([,pe])=>pe.error!==void 0));var X=Bx(),se=Ne(X),j=A(se),ne=A(j),ye=m(ne,!0),xe=d(ne,2),ie=A(xe);{var Ae=pe=>{var De=Cn();S(Ue=>h(De,Ue),[()=>s("Reading {done} of {total}…",{done:t(x).done+1,total:t(x).total})]),v(pe,De)},Te=pe=>{var De=Cn();S(Ue=>h(De,Ue),[()=>s("Last read {time}",{time:ca(t(w).readAt,n.i18n.language)})]),v(pe,De)},me=pe=>{var De=Cn();S(Ue=>h(De,Ue),[()=>s("Not read yet: the graph shows every device directly at the access point.")]),v(pe,De)};W(ie,pe=>{t(x)!==void 0?pe(Ae):t(w)!==void 0?pe(Te,1):pe(me,-1)})}var P=d(j,2),ce=m(P,!0),be=d(P,2);{var ee=pe=>{var De=Px(),Ue=m(De);S((Fe,Ye)=>h(Ue,`${Fe??""}: ${Ye??""}`),[()=>s("Not answered"),()=>t(K).map(([Fe])=>$(Fe)).join(", ")]),v(pe,De)};W(be,pe=>{t(K).length>0&&pe(ee)})}var he=d(be,2),G=A(he),Q=A(G),q=A(Q);Xe(q,17,()=>t(R).edges,pe=>`${pe.from}|${pe.to}`,(pe,De)=>{const Ue=c(()=>z(t(De).from)),Fe=c(()=>z(t(De).to));var Ye=Ox(),tt=Ne(Ye);let ft;var dt=d(tt);{var ke=$e=>{var at=Mx(),lt=m(at,!0);S(Je=>{T(at,"x",(t(Ue).x+t(Fe).x)/2),T(at,"y",(t(Ue).y+t(Fe).y)/2-4),h(lt,Je)},[()=>fe(t(De))]),v($e,at)},Le=c(()=>!t(De).assumed&&fe(t(De))!=="");W(dt,$e=>{t(Le)&&$e(ke)})}S(()=>{T(tt,"x1",t(Ue).x),T(tt,"y1",t(Ue).y),T(tt,"x2",t(Fe).x),T(tt,"y2",t(Fe).y),ft=_t(tt,0,"hmm-network-edge svelte-w40n2d",null,ft,{"hmm-network-assumed":t(De).assumed,"hmm-network-static":t(De).isStatic,"hmm-network-focus":t(o)!==""&&(t(De).from===t(o)||t(De).to===t(o))}),T(tt,"data-testid",`edge-${t(De).from}-${t(De).to}`)}),v(pe,Ye)});var Y=d(q);Xe(Y,17,()=>t(R).nodes,pe=>pe.id,(pe,De)=>{const Ue=c(()=>z(t(De).id));var Fe=Fx();let Ye;var tt=A(Fe),ft=m(tt,!0),dt=d(tt),ke=d(dt);{var Le=lt=>{var Je=Lx(),Pt=m(Je,!0);S(()=>{T(Je,"x",t(Ue).x),T(Je,"y",t(Ue).y+4),h(Pt,t(De).kind==="access-point"?"AP":"R")}),v(lt,Je)};W(ke,lt=>{t(De).kind!=="device"&&lt(Le)})}var $e=d(ke),at=m($e,!0);S((lt,Je,Pt)=>{Ye=_t(Fe,0,`hmm-network-node hmm-network-${t(De).kind??""}`,"svelte-w40n2d",Ye,{"hmm-network-focus":t(o)===t(De).id}),T(Fe,"aria-label",lt),T(Fe,"data-testid",`node-${t(De).id}`),h(ft,Je),T(dt,"cx",t(Ue).x),T(dt,"cy",t(Ue).y),T(dt,"r",t(De).kind==="access-point"?20:t(De).kind==="router"?15:10),T($e,"x",t(Ue).x),T($e,"y",t(Ue).y+(t(De).kind==="access-point"?34:t(De).kind==="router"?28:22)),h(at,Pt)},[()=>`${de(t(De))} ${$(t(De).id)}`,()=>`${$(t(De).id)} (${t(De).id})`,()=>le($(t(De).id))]),re("click",Fe,()=>B(t(De))),re("keydown",Fe,lt=>{(lt.key==="Enter"||lt.key===" ")&&(lt.preventDefault(),B(t(De)))}),v(pe,Fe)});var ae=d(Q,2),J=A(ae),ve=d(A(J),1,!0),ge=d(J,2),te=d(A(ge),1,!0),O=d(ge,2),U=d(A(O),1,!0),I=d(O,2),F=d(A(I),1,!0),Ee=d(I,2),Ie=d(A(Ee),1,!0),Me=d(G,2),Ve=A(Me),ze=A(Ve),nt=m(ze,!0),Ze=d(ze),_e=A(Ze),Se=A(_e),V=m(Se,!0),L=d(Se),Pe=m(L,!0),Ge=d(L),qe=m(Ge,!0),we=d(Ge),Ce=m(we,!0),Oe=d(Ze);Xe(Oe,23,()=>t(oe),(pe,De)=>`${pe.router}|${pe.destination}|${String(De)}`,(pe,De)=>{var Ue=Gx();let Fe;var Ye=A(Ue),tt=m(Ye,!0),ft=d(Ye),dt=m(ft,!0),ke=d(ft),Le=m(ke,!0),$e=d(ke),at=m($e,!0),lt=d($e),Je=m(lt,!0);S((Pt,Tt,Lt,Qt)=>{T(Ue,"data-testid",`route-row-${t(De).router}-${t(De).destination}`),Fe=_t(Ue,1,"svelte-w40n2d",null,Fe,{"hmm-network-row-focus":t(o)!==""&&(t(De).destination===t(o)||t(De).router===t(o))}),T(Ye,"title",t(De).destination),h(tt,Pt),T(ft,"title",t(De).router),h(dt,Tt),T(ke,"title",t(De).nextHop),h(Le,Lt),h(at,t(De).distance),h(Je,Qt)},[()=>$(t(De).destination),()=>$(t(De).router),()=>t(De).neighbour?"—":$(t(De).nextHop),()=>t(De).rssi===void 0?"":`${String(t(De).rssi)} dBm`]),v(pe,Ue)},pe=>{var De=Ux(),Ue=A(De),Fe=m(Ue,!0);S(Ye=>h(Fe,Ye),[()=>s("No routes read yet")]),v(pe,De)});var Be=d(se,2);{let pe=c(()=>t(w)?.tables[t(i)]);Cx(Be,{get router(){return t(i)},get table(){return t(pe)},get open(){return t(a)},set open(De){u(a,De,!0)}})}S((pe,De,Ue,Fe,Ye,tt,ft,dt,ke,Le,$e,at,lt,Je,Pt)=>{ne.disabled=t(x)!==void 0||t(D).length===0,T(ne,"title",pe),h(ye,De),h(ce,Ue),T(Q,"viewBox",Fe),T(Q,"aria-label",Ye),h(ve,tt),h(te,ft),h(U,dt),h(F,ke),h(Ie,Le),h(nt,$e),h(V,at),h(Pe,lt),h(qe,Je),h(Ce,Pt)},[()=>t(D).length===0?s("No router that routes offers its routing table"):s("Each table is read from its router over the air, one after the other"),()=>s("Read routing tables"),()=>s("Each router is asked once per read, over the air, with a pause between them; the result is kept until the next read. Entries of battery devices are what the router last heard and may be stale."),()=>`0 0 ${String(l)} ${String(l)}`,()=>s("Routing graph"),()=>s("Access point"),()=>s("Router"),()=>s("Device"),()=>s("Route from a table"),()=>s("Assumed: no table lists it"),()=>s("Routes"),()=>s("Destination"),()=>s("Router"),()=>s("Next hop"),()=>s("Hops")]),re("click",ne,()=>{n.routers.readTables(e.interfaceName)}),v(r,X),ut()}Et(["click","keydown"]);var Vx=y('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="set-interface-confirm"> </button>',1),zx=y("<option> </option>"),jx=y('<span class="hmm-set-interface-name svelte-1s1hrfj"> </span>'),Wx=y('<tr><td class="hmm-set-interface-mark svelte-1s1hrfj"> </td><td class="svelte-1s1hrfj"><span class="hmm-mono"> </span> <!></td><td class="svelte-1s1hrfj"><!></td><td class="svelte-1s1hrfj"><!></td></tr>'),Kx=y('<p class="hmm-set-interface-best-note svelte-1s1hrfj" data-testid="set-interface-best"> </p>'),Yx=y('<table class="hmm-set-interface-table svelte-1s1hrfj"><thead><tr><th class="svelte-1s1hrfj"></th><th class="svelte-1s1hrfj"> </th><th class="svelte-1s1hrfj">← dBm</th><th class="svelte-1s1hrfj">→ dBm</th></tr></thead><tbody></tbody></table> <!>',1),qx=y('<p class="hmm-set-interface-device svelte-1s1hrfj"> <span class="hmm-mono"> </span></p> <p class="hmm-set-interface-current svelte-1s1hrfj"> <span class="hmm-mono" data-testid="set-interface-current"> </span></p> <label class="hmm-set-interface-row svelte-1s1hrfj"><span> </span> <select class="hmm-select" data-testid="set-interface-select"></select></label> <label class="hmm-set-interface-row svelte-1s1hrfj"><span>ROAMING</span> <input type="checkbox" data-testid="set-interface-roaming"/></label> <!>',1);function $x(r,e){ct(e,!0);let n=H(e,"open",15,!1),s=H(e,"address",3,""),a=H(e,"preset",3,"");const i=Ot(),o=i.i18n.t;let l=C(""),f=C(!1),p=C(!1);const _=c(()=>i.app.selectedInterface),g=c(()=>i.devices.index(t(_))?.get(s())),k=c(()=>i.radio.gateways(t(_))),E=c(()=>i.radio.bestGatewayFor(t(_),s())),b=c(()=>t(g)?.INTERFACE??"");ot(()=>{if(!n())return;const x=t(k).some(D=>D.ADDRESS===a());u(l,x?a():t(g)?.INTERFACE??t(k)[0]?.ADDRESS??"",!0),u(f,t(g)===void 0?!1:kd(t(g)),!0)});async function w(){u(p,!0);const x=await i.radio.setBidcosInterface(t(_),s(),t(l),t(f));x&&await i.devices.load(t(_),{refresh:!0}),u(p,!1),x&&n(!1)}En(r,{title:"setBidcosInterface",width:"560px",testId:"set-interface-dialog",get open(){return n()},set open(D){n(D)},buttons:D=>{var N=Vx(),R=Ne(N),M=m(R,!0),z=d(R,2),$=m(z,!0);S((le,fe)=>{h(M,le),z.disabled=t(p)||t(l)==="",h($,fe)},[()=>o("Cancel"),()=>o("Apply")]),re("click",R,()=>n(!1)),re("click",z,()=>{w()}),v(D,N)},children:(D,N)=>{var R=qx(),M=Ne(R),z=A(M),$=d(z),le=m($,!0),fe=d(M,2),de=A(fe),B=d(de),oe=m(B,!0),K=d(fe,2),X=A(K),se=m(X,!0),j=d(X,2);Xe(j,21,()=>t(k),Ae=>Ae.ADDRESS,(Ae,Te)=>{var me=zx(),P=m(me),ce={};S(()=>{h(P,`${t(Te).ADDRESS??""}
20
- ${t(Te).DESCRIPTION??t(Te).TYPE??""}`),ce!==(ce=t(Te).ADDRESS)&&(me.value=(me.__value=ce)??"")}),v(Ae,me)}),Xt(j);var ne=d(K,2),ye=d(A(ne),2),xe=d(ne,2);{var ie=Ae=>{var Te=Yx(),me=Ne(Te),P=A(me),ce=A(P),be=d(A(ce)),ee=m(be,!0),he=d(P);Xe(he,21,()=>t(k),q=>q.ADDRESS,(q,Y)=>{const ae=c(()=>i.radio.pair(t(_),s(),t(Y).ADDRESS));var J=Wx();let ve;var ge=A(J),te=m(ge,!0),O=d(ge),U=A(O),I=m(U,!0),F=d(U,2);{var Ee=Ze=>{var _e=jx(),Se=m(_e,!0);S(V=>h(Se,V),[()=>Ua(t(Y))]),v(Ze,_e)},Ie=c(()=>Ua(t(Y))!==t(Y).ADDRESS);W(F,Ze=>{t(Ie)&&Ze(Ee)})}var Me=d(O),Ve=A(Me);{let Ze=c(()=>t(ae)?.rx);ga(Ve,{get value(){return t(Ze)},labelOf:_e=>o(_e.label)})}var ze=d(Me),nt=A(ze);{let Ze=c(()=>t(ae)?.tx),_e=c(()=>`set-interface-tx-${t(Y).ADDRESS}`);ga(nt,{get value(){return t(Ze)},labelOf:Se=>o(Se.label),get testId(){return t(_e)}})}S(Ze=>{T(J,"data-testid",`set-interface-row-${t(Y).ADDRESS}`),T(J,"aria-current",t(b)===t(Y).ADDRESS?"true":void 0),ve=_t(J,1,"svelte-1s1hrfj",null,ve,{"hmm-set-interface-configured":t(b)===t(Y).ADDRESS}),T(ge,"title",Ze),h(te,t(b)===t(Y).ADDRESS?"◉":""),h(I,t(Y).ADDRESS)},[()=>t(b)===t(Y).ADDRESS?o("Configured"):void 0]),v(q,J)});var G=d(me,2);{var Q=q=>{var Y=Kx(),ae=m(Y,!0);S(J=>h(ae,J),[()=>o("Heard best by {address}",{address:t(E).address})]),v(q,Y)};W(G,q=>{t(E)&&q(Q)})}S(q=>h(ee,q),[()=>o("Interface")]),v(Ae,Te)};W(xe,Ae=>{t(k).length>0&&Ae(ie)})}S((Ae,Te,me)=>{h(z,`${Ae??""} `),h(le,s()),h(de,`${Te??""}: `),h(oe,t(b)===""?"—":t(b)),h(se,me)},[()=>i.nameOf(s()),()=>o("Configured"),()=>o("Interface")]),kr(j,()=>t(l),Ae=>u(l,Ae)),vr(ye,()=>t(f),Ae=>u(f,Ae)),v(D,R)},$$slots:{buttons:!0,default:!0}}),ut()}Et(["click"]);var Xx=y('<span class="hmm-radio-views-gap svelte-7f5yr6"></span> <button type="button" class="hmm-radio-view svelte-7f5yr6" data-testid="routers-mode-list"> </button> <button type="button" class="hmm-radio-view svelte-7f5yr6" data-testid="routers-mode-graph"> </button>',1),Qx=y('<div class="hmm-radio-views svelte-7f5yr6" role="group" data-testid="radio-views"><button type="button" class="hmm-radio-view svelte-7f5yr6" data-testid="radio-view-rssi"> </button> <button type="button" class="hmm-radio-view svelte-7f5yr6" data-testid="radio-view-routers"> </button> <!></div>'),Pu=y('<div class="hmm-page-grid svelte-7f5yr6"><!></div>'),Zx=y("<!> <!>",1),Jx=y("<!> <!> <!>",1),eD=y('<button type="button"> </button>'),tD=y('<div class="hmm-page svelte-7f5yr6"><div class="hmm-radio-gateways svelte-7f5yr6"><!></div> <!> <!></div> <!> <!>',1);function nD(r,e){ct(e,!0);const n=Ot(),s=n.i18n.t;let a=C(We([])),i=C(We([])),o=C(We([])),l=C(!1),f=C(!1),p=C(""),_=C("");const g=c(()=>n.app.selectedInterface),k=c(()=>n.radio.gateways(t(g))),E=c(()=>n.interfaces.typeOf(t(g)).startsWith("BidCos")),b=c(()=>n.interfaces.typeOf(t(g))==="HmIP-RF");let w=C("rssi"),x=C("list");const D=c(()=>t(b)?t(w):"rssi");function N(P,ce=""){u(p,P,!0),u(_,ce,!0),u(l,!0)}const R=c(()=>n.devices.devices(t(g))),M=c(()=>t(i).length===1?t(i)[0]??"":""),z=[{key:"ADDRESS",label:"ADDRESS",width:180,mono:!0,copy:"address"},{key:"DESCRIPTION",label:"DESCRIPTION",width:220},{key:"TYPE",label:"TYPE",width:130},{key:"FIRMWARE_VERSION",label:"FIRMWARE_VERSION",width:150},{key:"CONNECTED",label:"CONNECTED",width:110,align:"center",value:P=>P.CONNECTED===!0?"✔":"✕"},{key:"DEFAULT",label:"DEFAULT",width:90,align:"center",value:P=>P.DEFAULT===!0?"✔":""},{key:"DUTY_CYCLE",label:"DUTY_CYCLE",width:100,align:"right",value:P=>P.DUTY_CYCLE===void 0?"":`${P.DUTY_CYCLE} %`},{key:"CARRIER_SENSE_LEVEL",label:"CARRIER_SENSE_LEVEL",align:"right"}],$=c(()=>[{key:"icon",label:"",width:Ba,fixed:!0,sortable:!1,filterable:!1,align:"center",value:()=>""},{key:"name",label:s("Name"),width:180,copy:"name",value:P=>n.nameOf(P.ADDRESS)},{key:"ADDRESS",label:"ADDRESS",width:140,mono:!0,copy:"address"},{key:"TYPE",label:"TYPE",width:150},{key:"INTERFACE",label:"INTERFACE",width:140,mono:!0,hidden:!t(E)},{key:"RF_ADDRESS",label:"RF_ADDRESS",width:100,align:"right",value:P=>P.RF_ADDRESS===void 0?"":P.RF_ADDRESS.toString(16).toUpperCase()},{key:"ROAMING",label:"ROAMING",width:90,align:"center",hidden:!t(E),value:P=>kd(P)?"✔":""},{key:"unreach",label:s("Unreach"),width:90,align:"right",filterable:!1,value:P=>{const ce=n.unreach.countOf(t(g),P.ADDRESS);return ce===0?"":ce}},...t(k).flatMap(P=>[{key:`rx:${P.ADDRESS}`,label:"← dBm",width:90,align:"right",filterable:!1,value:ce=>n.radio.pair(t(g),ce.ADDRESS,P.ADDRESS)?.rx??""},{key:`tx:${P.ADDRESS}`,label:"→ dBm",width:90,align:"right",filterable:!1,value:ce=>n.radio.pair(t(g),ce.ADDRESS,P.ADDRESS)?.tx??""},{key:`set:${P.ADDRESS}`,label:"",hidden:!t(E),width:My,fixed:!0,align:"center",sortable:!1,filterable:!1,value:ce=>ce.INTERFACE===P.ADDRESS?"◉":""}])]),le=c(()=>t(k).map(P=>({key:P.ADDRESS,label:P.ADDRESS,sublabel:Ua(P)===P.ADDRESS?void 0:`(${Ua(P)})`,columns:t(E)?[`rx:${P.ADDRESS}`,`tx:${P.ADDRESS}`,`set:${P.ADDRESS}`]:[`rx:${P.ADDRESS}`,`tx:${P.ADDRESS}`]}))),fe=c(()=>[{key:"name",label:s("Name"),width:180,copy:"name",value:P=>n.nameOf(P.ADDRESS)},{key:"ADDRESS",label:s("Peer"),width:200,mono:!0,copy:"address"},{key:"rx",label:"← dBm",width:120,align:"right",filterable:!1,value:()=>""},{key:"tx",label:"→ dBm",width:120,align:"right",filterable:!1,value:()=>""}]);function de(P){const ce=n.devices.index(t(g));return n.radio.peersOf(t(g),P.ADDRESS).map(be=>ce?.get(be)??{ADDRESS:be,TYPE:"",PARENT:P.ADDRESS}).map(be=>({...be,PARENT:P.ADDRESS}))}function B(P){return n.devices.index(t(g))?.get(P)?.ADDRESS??P}async function oe(){await Promise.all([n.radio.load(t(g)),n.devices.load(t(g),{refresh:!0}),n.interfaces.load(),n.unreach.load()])}ot(()=>{const P=t(g);P!==""&&n.radio.ensureMatrix(P)}),ot(()=>{n.unreach.counters.length===0&&n.unreach.load()});var K=tD(),X=Ne(K),se=A(X),j=A(se);{let P=c(()=>s("Interfaces")),ce=c(()=>s("Filter")),be=c(()=>s("No data"));Fs(j,{get rows(){return t(k)},get columns(){return z},getId:ee=>ee.ADDRESS,height:110,columnFilterRow:!1,get caption(){return t(P)},get filterLabel(){return t(ce)},get emptyText(){return t(be)},tableId:"radio-interfaces",testId:"radio-gateways",get selected(){return t(a)},set selected(ee){u(a,ee,!0)}})}var ne=d(se,2);{var ye=P=>{var ce=Qx(),be=A(ce),ee=m(be,!0),he=d(be,2),G=m(he,!0),Q=d(he,2);{var q=Y=>{var ae=Xx(),J=d(Ne(ae),2),ve=m(J,!0),ge=d(J,2),te=m(ge,!0);S((O,U)=>{T(J,"aria-pressed",t(x)==="list"),h(ve,O),T(ge,"aria-pressed",t(x)==="graph"),h(te,U)},[()=>s("List"),()=>s("Graph")]),re("click",J,()=>u(x,"list")),re("click",ge,()=>u(x,"graph")),v(Y,ae)};W(Q,Y=>{t(D)==="routers"&&Y(q)})}S((Y,ae,J)=>{T(ce,"aria-label",Y),T(be,"aria-pressed",t(D)==="rssi"),h(ee,ae),T(he,"aria-pressed",t(D)==="routers"),h(G,J)},[()=>s("View"),()=>s("RSSI"),()=>s("Routers")]),re("click",be,()=>u(w,"rssi")),re("click",he,()=>u(w,"routers")),v(P,ce)};W(ne,P=>{t(b)&&P(ye)})}var xe=d(ne,2);{var ie=P=>{var ce=Pu(),be=A(ce);{var ee=G=>{Hx(G,{get interfaceName(){return t(g)}})},he=G=>{Tx(G,{get interfaceName(){return t(g)}})};W(be,G=>{t(x)==="graph"?G(ee):G(he,-1)})}v(P,ce)},Ae=P=>{var ce=Pu(),be=A(ce);{const ee=ge=>{var te=Jx(),O=Ne(te);{let Ee=c(()=>s("Refresh")),Ie=c(()=>n.radio.loading||n.devices.isLoading(t(g)));Dt(O,{get title(){return t(Ee)},icon:"⟳",get busy(){return t(Ie)},testId:"radio-refresh",onclick:()=>{oe()}})}var U=d(O,2);{var I=Ee=>{var Ie=Zx(),Me=Ne(Ie);{let ze=c(()=>t(M)===""),nt=c(()=>s("Select a device"));Dt(Me,{title:"setBidcosInterface",icon:"⇄",get disabled(){return t(ze)},get reason(){return t(nt)},testId:"radio-set-interface",onclick:()=>N(t(M))})}var Ve=d(Me,2);{let ze=c(()=>s("Assign the best receiver")),nt=c(()=>t(k).length<2),Ze=c(()=>s("Only one interface"));Dt(Ve,{get title(){return t(ze)},icon:"⇶",get disabled(){return t(nt)},get reason(){return t(Ze)},testId:"radio-best-receivers",onclick:()=>u(f,!0)})}v(Ee,Ie)};W(U,Ee=>{t(E)&&Ee(I)})}var F=d(U,2);{let Ee=c(()=>s("Reset the unreach counters")),Ie=c(()=>n.unreach.of(t(g)).length===0),Me=c(()=>s("No data"));Dt(F,{get title(){return t(Ee)},icon:"⟲",get disabled(){return t(Ie)},get reason(){return t(Me)},testId:"radio-reset-unreach",onclick:()=>{n.unreach.reset(t(g))}})}v(ge,te)},he=(ge,te=Hn,O=Hn,U=Hn)=>{var I=St(),F=Ne(I);{var Ee=_e=>{{let Se=c(()=>n.host.deviceImageUrl(te().TYPE));Ha(_e,{get deviceType(){return te().TYPE},get src(){return t(Se)}})}},Ie=_e=>{const Se=c(()=>n.radio.pair(t(g),B(U().rootId),te().ADDRESS));{let V=c(()=>O().key==="rx"?t(Se)?.rx:t(Se)?.tx),L=c(()=>`rssi-${U().rootId}-${te().ADDRESS}-${O().key}`);ga(_e,{get value(){return t(V)},labelOf:Pe=>s(Pe.label),get testId(){return t(L)}})}},Me=_e=>{const Se=c(()=>O().key.slice(4)),V=c(()=>te().INTERFACE===t(Se));var L=eD();let Pe;var Ge=m(L,!0);S(qe=>{Pe=_t(L,1,"hmm-receiver-mark svelte-7f5yr6",null,Pe,{"hmm-receiver-configured":t(V)}),T(L,"aria-pressed",t(V)),T(L,"title",qe),T(L,"data-testid",`receiver-${te().ADDRESS}-${t(Se)}`),h(Ge,t(V)?"◉":"○")},[()=>t(V)?`${s("Configured")}: ${t(Se)}`:s("Use {interface} as receiver",{interface:t(Se)})]),re("click",L,qe=>{qe.stopPropagation(),N(te().ADDRESS,t(Se))}),v(_e,L)},Ve=c(()=>O().key.startsWith("set:")&&U().depth===0),ze=_e=>{const Se=c(()=>O().key.slice(3)),V=c(()=>n.radio.pair(t(g),te().ADDRESS,t(Se)));{let L=c(()=>O().key.startsWith("rx:")?t(V)?.rx:t(V)?.tx),Pe=c(()=>`rssi-${te().ADDRESS}-${t(Se)}-${O().key.slice(0,2)}`);ga(_e,{get value(){return t(L)},labelOf:Ge=>s(Ge.label),get testId(){return t(Pe)}})}},nt=c(()=>O().key.startsWith("rx:")||O().key.startsWith("tx:")),Ze=_e=>{var Se=Cn();S(V=>h(Se,V),[()=>O().value?O().value(te())??"":te()[O().key]??""]),v(_e,Se)};W(F,_e=>{O().key==="icon"?_e(Ee):U().depth>0&&(O().key==="rx"||O().key==="tx")?_e(Ie,1):t(Ve)?_e(Me,2):t(nt)?_e(ze,3):_e(Ze,-1)})}v(ge,I)};let G=c(()=>s("RSSI")),Q=c(()=>s("Filter")),q=c(()=>s("No data")),Y=c(()=>s("No row matches the filter")),ae=c(()=>s("Clear filter")),J=c(()=>s("RSSI")),ve=c(()=>s("{count} devices",{},t(R).length));Fs(be,{get rows(){return t(R)},get columns(){return t($)},get columnGroups(){return t(le)},get subColumns(){return t(fe)},get scope(){return t(g)},getId:ge=>ge.ADDRESS,subRows:de,get caption(){return t(G)},get filterLabel(){return t(Q)},get emptyText(){return t(q)},get noMatchText(){return t(Y)},get clearFilterLabel(){return t(ae)},showingText:(ge,te)=>s("Showing {shown} of {total}",{shown:ge,total:te}),onactivate:ge=>N(ge.ADDRESS),get toolbarLabel(){return t(J)},get countText(){return t(ve)},tableId:"radio",subTableId:"radio-peers",testId:"radio-table",get selected(){return t(i)},set selected(ge){u(i,ge,!0)},get expanded(){return t(o)},set expanded(ge){u(o,ge,!0)},toolbar:ee,cell:he,$$slots:{toolbar:!0,cell:!0}})}v(P,ce)};W(xe,P=>{t(D)==="routers"?P(ie):P(Ae,-1)})}var Te=d(X,2);$x(Te,{get address(){return t(p)},get preset(){return t(_)},get open(){return t(l)},set open(P){u(l,P,!0)}});var me=d(Te,2);px(me,{get open(){return t(f)},set open(P){u(f,P,!0)}}),v(r,K),ut()}Et(["click"]);function rD(r,e,n=[]){const s=new Map;for(const _ of r)s.set(_.interfaceName,(s.get(_.interfaceName)??0)+1);const a=[...new Set([...n,...s.keys()])],i=s.get(e)??0,o=a.filter(_=>_!==e&&(s.get(_)??0)>0).map(_=>({interfaceName:_,count:s.get(_)??0})),l=a.indexOf(e),p=[...a.slice(l+1),...a.slice(0,Math.max(l,0))].find(_=>o.some(g=>g.interfaceName===_));return{own:i,total:r.length,others:o,next:p}}var sD=y('<button type="button" class="hmm-total-button svelte-u6ol56" data-testid="messages-total"> </button>'),aD=y("<!> <!> <!>",1),il=y("<span> </span>"),iD=y('<button type="button" class="hmm-inline-button svelte-u6ol56"> </button> <span hidden=""> </span>',1),oD=y('<div class="hmm-page svelte-u6ol56"><div class="hmm-page-grid svelte-u6ol56"><!></div></div>');function lD(r,e){ct(e,!0);const n=Ot(),s=n.i18n.t;let a=C(We([])),i=C(!1);const o=c(()=>n.app.selectedInterface),l=c(()=>n.interfaces.typeOf(t(o)).startsWith("BidCos")),f=c(()=>!t(l)&&_i(t(o),n.interfaces.typeOf(t(o)))),p=c(()=>n.serviceMessages.of(t(o))),_=c(()=>n.serviceMessages.acknowledgeable(t(o))),g=c(()=>t(p).filter(B=>t(a).includes(w(B)))),k=c(()=>t(g).filter(B=>vo(B.datapoint))),E=c(()=>rD(n.serviceMessages.messages,t(o),n.interfaces.states.map(B=>B.name))),b=c(()=>t(E).next===void 0?"":s("Also on this box: {list}. Click to switch to {next}.",{list:t(E).others.map(B=>`${B.interfaceName} (${String(B.count)})`).join(", "),next:t(E).next}));function w(B){return`${B.address}/${B.datapoint}`}function x(B,oe){return oe?s("The CCU reports {datapoint} for this channel again: lifts the suppression (suppressServiceMessages with suppress=false).",{datapoint:B.datapoint}):s("The CCU stops reporting {datapoint} for this channel: the HmIP interface reports a value that raises no message (suppressServiceMessages). The device's other messages are not affected. Undo with “Unsuppress”.",{datapoint:B.datapoint})}function D(B){return n.devices.index(t(o))?.get(Fa(B))?.TYPE??""}ot(()=>{t(f)&&t(p).length>0&&n.serviceMessages.loadSuppressed(t(o))}),ot(()=>{t(p).some(B=>typeof B.value=="number")&&n.serviceMessages.loadDescriptions(t(o))});function N(B){const oe=n.serviceMessages.valueName(B);if(oe===void 0)return uo(B.value);const K=n.devices.index(t(o))?.get(B.address)?.TYPE??"";return n.meta.valueLabel(B.datapoint,oe,K)}function R(B){const oe=n.serviceMessages.valueName(B);return oe===void 0?void 0:`${oe} (${uo(B.value)})`}async function M(B,oe){u(i,!0);const K=await n.serviceMessages.suppress(t(o),B.address,B.datapoint,oe);u(i,!1),K&&n.notices.push("info",`suppressServiceMessages ${B.address} ${B.datapoint} = ${oe?"true":"false"}`)}const z=c(()=>[{key:"icon",label:"",width:Ba,fixed:!0,sortable:!1,filterable:!1,align:"center",value:()=>""},{key:"name",label:s("Name"),width:220,copy:"name",value:B=>n.nameOf(B.address)},{key:"address",label:"ADDRESS",width:160,mono:!0,copy:"address"},{key:"device",label:`${s("Device")} ADDRESS`,width:140,mono:!0,value:B=>Fa(B.address)},{key:"datapoint",label:s("Message"),width:180},{key:"value",label:s("Value"),width:160,value:N},{key:"explanation",label:"",sortable:!1,value:B=>{const oe=zh(B.datapoint,!t(l));return oe===void 0?"":s(oe)}},{key:"since",label:s("Since"),width:170,value:B=>ca(B.since)},...t(f)?[{key:"suppress",label:"",width:iu,minWidth:iu,keepMinWidth:!0,sortable:!1,filterable:!1,value:B=>n.serviceMessages.isSuppressed(B)?s("suppressed"):""}]:[]]);async function $(B){u(i,!0);const oe=await n.serviceMessages.acknowledgeMany(B);u(i,!1),n.notices.push("info",s("{count} service messages",{},oe))}var le=oD(),fe=A(le),de=A(fe);{const B=xe=>{var ie=St(),Ae=Ne(ie);{var Te=me=>{const P=c(()=>t(E).next);mi(me,{get text(){return t(b)},testId:"messages-total-tooltip",children:(ce,be)=>{var ee=sD(),he=m(ee,!0);S(G=>h(he,G),[()=>s("{count} of {total} on this box",{total:t(E).total},t(E).own)]),re("click",ee,()=>{n.selectInterface(t(P))}),v(ce,ee)},$$slots:{default:!0}})};W(Ae,me=>{t(E).next!==void 0&&me(Te)})}v(xe,ie)},oe=xe=>{var ie=aD(),Ae=Ne(ie);{let P=c(()=>s("Refresh"));Dt(Ae,{get title(){return t(P)},icon:"⟳",get busy(){return n.serviceMessages.loading},testId:"messages-refresh",onclick:()=>{n.serviceMessages.refresh(t(o))}})}var Te=d(Ae,2);{let P=c(()=>s("Acknowledge service messages")),ce=c(()=>t(i)||t(k).length===0),be=c(()=>s("Only STICKY_UNREACH and SABOTAGE can be acknowledged"));Dt(Te,{get title(){return t(P)},icon:"✔",get disabled(){return t(ce)},get reason(){return t(be)},testId:"messages-ack",onclick:()=>{$(t(k))}})}var me=d(Te,2);{let P=c(()=>s("Acknowledge all service messages")),ce=c(()=>t(i)||t(_).length===0),be=c(()=>s("Only STICKY_UNREACH and SABOTAGE can be acknowledged"));Dt(me,{get title(){return t(P)},icon:"✔✔",get disabled(){return t(ce)},get reason(){return t(be)},testId:"messages-ack-all",onclick:()=>{$(t(_))}})}v(xe,ie)},K=(xe,ie=Hn,Ae=Hn)=>{var Te=St(),me=Ne(Te);{var P=Q=>{{let q=c(()=>D(ie().address)),Y=c(()=>n.host.deviceImageUrl(D(ie().address)));Ha(Q,{get deviceType(){return t(q)},get src(){return t(Y)}})}},ce=Q=>{var q=il();let Y;var ae=m(q,!0);S((J,ve)=>{Y=_t(q,1,"hmm-msg-name svelte-u6ol56",null,Y,{"hmm-msg-ackable":J,"hmm-msg-rega":ie().source==="rega"}),T(q,"title",ve),T(q,"data-listed-by",ie().source??"interface"),T(q,"data-testid",`message-${ie().address}-${ie().datapoint}`),h(ae,ie().datapoint)},[()=>vo(ie().datapoint),()=>ie().source==="rega"?s("Listed by the CCU only; the interface no longer reports it"):void 0]),v(Q,q)},be=Q=>{var q=il(),Y=m(q,!0);S((ae,J)=>{T(q,"title",ae),T(q,"data-testid",`message-value-${ie().address}-${ie().datapoint}`),h(Y,J)},[()=>R(ie()),()=>N(ie())]),v(Q,q)},ee=Q=>{var q=il(),Y=m(q,!0);S((ae,J)=>{T(q,"title",ae),T(q,"data-testid",`message-since-${ie().address}-${ie().datapoint}`),T(q,"data-source",ie().sinceSource??"local"),h(Y,J)},[()=>ie().sinceSource==="rega"?s("First reported, from the CCU"):ie().sinceSource==="system"?s("Last changed, from the openccu-lite system"):s("First seen by the Homematic Manager"),()=>ca(ie().since)]),v(Q,q)},he=Q=>{const q=c(()=>n.serviceMessages.isSuppressed(ie())),Y=c(()=>x(ie(),t(q))),ae=c(()=>`suppress-help-${ie().address}-${ie().datapoint}`);{let J=c(()=>`suppress-tooltip-${ie().address}-${ie().datapoint}`);mi(Q,{get text(){return t(Y)},get testId(){return t(J)},children:(ve,ge)=>{var te=iD(),O=Ne(te),U=m(O,!0),I=d(O,2),F=m(I,!0);S(Ee=>{O.disabled=t(i),T(O,"aria-describedby",t(ae)),T(O,"data-testid",`suppress-${ie().address}-${ie().datapoint}`),h(U,Ee),T(I,"id",t(ae)),h(F,t(Y))},[()=>t(q)?s("Unsuppress"):s("Suppress")]),re("click",O,Ee=>{Ee.stopPropagation(),M(ie(),!t(q))}),v(ve,te)},$$slots:{default:!0}})}},G=Q=>{var q=Cn();S(Y=>h(q,Y),[()=>Ae().value?Ae().value(ie())??"":ie()[Ae().key]??""]),v(Q,q)};W(me,Q=>{Ae().key==="icon"?Q(P):Ae().key==="datapoint"?Q(ce,1):Ae().key==="value"?Q(be,2):Ae().key==="since"?Q(ee,3):Ae().key==="suppress"?Q(he,4):Q(G,-1)})}v(xe,Te)};let X=c(()=>s("Service messages")),se=c(()=>s("Filter")),j=c(()=>s("No data")),ne=c(()=>s("Service messages")),ye=c(()=>t(E).next===void 0?s("{count} service messages",{},t(p).length):void 0);Fs(de,{get rows(){return t(p)},get scope(){return t(o)},get columns(){return t(z)},getId:w,get caption(){return t(X)},get filterLabel(){return t(se)},get emptyText(){return t(j)},get toolbarLabel(){return t(ne)},get countText(){return t(ye)},tableId:"messages",testId:"messages-table",get selected(){return t(a)},set selected(xe){u(a,xe,!0)},status:B,toolbar:oe,cell:K,$$slots:{status:!0,toolbar:!0,cell:!0}})}v(r,le),ut()}Et(["click"]);var dD=y('<span class="hmm-header-user svelte-1n46o8q" data-testid="session-user"> </span> <a class="hmm-header-logout svelte-1n46o8q" href="logout" data-testid="session-logout"> </a>',1),cD=y('<button type="button" class="hmm-button hmm-header-changes" data-testid="change-set-open"> </button>'),uD=y('<div class="hmm-page-failed svelte-1n46o8q" data-testid="page-failed"><p> </p> <p class="hmm-page-failed-reason svelte-1n46o8q"> </p> <button type="button" class="hmm-button"> </button></div>'),fD=y('<p class="hmm-empty svelte-1n46o8q"> </p>'),hD=y('<div class="hmm-app svelte-1n46o8q" data-testid="app"><header class="hmm-header svelte-1n46o8q"><!> <!> <div class="hmm-header-actions svelte-1n46o8q"><!> <!> <!> <!> <!> <!></div></header> <!> <main class="hmm-main svelte-1n46o8q"><div class="hmm-panel svelte-1n46o8q" role="tabpanel"><!></div></main> <!> <!> <!> <!> <!> <!></div>');function mD(r,e){ct(e,!0);const n="https://github.com/hobbyquaker/homematic-manager",s=`${n}/releases`;let a=H(e,"stores",7);sb(sr(()=>a())),Mp({columnWidths:sr(()=>a().app.columnWidths),t:(P,ce)=>a().i18n.t(P,ce)});let i=C(!1);const o=c(()=>a().i18n.t),l=c(()=>a().app);function f(P){a().console.recall(P),t(l).selectedInterface!==P.interfaceName&&a().selectInterface(P.interfaceName),t(l).setTab("console")}const p={local:()=>t(o)("This profile"),occulite:()=>"occulited",rega:()=>"ReGaHSS"},_={devices:"Devices",groups:"Groups",links:"Links",rssi:"RSSI",console:"RPC Console",messages:"Service messages",events:"Events",rooms:"Rooms",functions:"Functions",metadata:"Metadata"},g=c(()=>{const P=a().taxonomy.state;if(P===void 0)return;const ce=p[P.provider]();return{id:_d,label:ce,mark:ag(P),title:ig(P,{label:ce,reachable:t(o)("Reachable"),unreachable:t(o)("Unreachable"),readOnly:t(o)("Read-only"),writable:t(o)("Writable"),detail:be=>t(o)("revision {revision}, {count} objects",{revision:be.revision,count:be.objects}),certificate:be=>t(o)("The certificate of {url} is not trusted ({code})",{url:be.url,code:be.code})}),selectable:P.reachable,provider:P.provider}}),k=c(()=>a().tabs.map(P=>({id:P,label:t(o)(_[P]),...P==="messages"?{badge:a().serviceMessages.countOf(t(l).selectedInterface)}:{}}))),E=c(()=>Object.fromEntries(a().interfaces.states.map(P=>{const ce=a().devices.index(P.name),be=a().radio.gateways(P.name).map(ee=>ee.DUTY_CYCLE).filter(ee=>typeof ee=="number");return[P.name,{...ce===void 0?{}:{devices:ce.devices().length},...be.length===0?{}:{dutyCycle:Math.max(...be)}}]})));ot(()=>{document.documentElement.lang=a().i18n.language});const b=c(()=>a().shell.theme??t(l).theme);ot(()=>{const P=document.documentElement;t(b)==="system"?P.removeAttribute("data-theme"):P.setAttribute("data-theme",t(b)),a().host.setTheme(t(b))}),ot(()=>a().host.onMenuAction(()=>{t(l).configDialogOpen=!0}));var w=hD(),x=A(w),D=A(x);{let P=c(()=>t(o)("Select an interface")),ce=c(()=>t(o)("Interfaces")),be=c(()=>t(o)("Connected")),ee=c(()=>t(o)("Not connected")),he=c(()=>t(o)("Not present")),G=c(()=>t(o)("Not answering")),Q=c(()=>t(o)("Retry now")),q=c(()=>t(o)("Subscribing")),Y=c(()=>t(o)("Waiting")),ae=c(()=>t(o)("Reconnecting")),J=c(()=>t(o)("All interfaces are connected")),ve=c(()=>t(o)("Not every interface is connected")),ge=c(()=>t(o)("Port")),te=c(()=>t(l).config?.publishCallbackPorts===!0),O=c(()=>t(o)("Publish this port unchanged")),U=c(()=>t(o)("Use automatic"));ng(D,{get interfaces(){return a().interfaces.states},get selected(){return t(l).selectedInterface},get host(){return t(l).host},get backendConnected(){return t(l).connected},get details(){return t(E)},get label(){return t(P)},get listLabel(){return t(ce)},get connectedText(){return t(be)},get notConnectedText(){return t(ee)},get notPresentText(){return t(he)},get notAnsweringText(){return t(G)},get retryText(){return t(Q)},onretry:I=>{for(const F of I)a().interfaces.reconnect(F)},get subscribingText(){return t(q)},get waitingText(){return t(Y)},get reconnectingText(){return t(ae)},get allConnectedText(){return t(J)},get someNotConnectedText(){return t(ve)},get portLabel(){return t(ge)},devicesLabel:I=>t(o)("{count} devices",{count:I},I),dutyCycleLabel:I=>t(o)("Duty cycle {value} %",{value:I}),get publishCallbackPorts(){return t(te)},callbackPortInUseLabel:I=>t(o)("Callback port {port} is in use",{port:String(I)}),callbackPortFailedLabel:I=>t(o)("Callback port {port} cannot be opened",{port:String(I)}),get publishPortText(){return t(O)},callbackWarningLabel:I=>I.reason==="notLocal"?t(o)("The callback address {address} is not an address of this machine; {auto} is used instead",{address:I.address,auto:I.auto}):t(o)("The callback address {address} is not in the CCU's network; the CCU may not reach it and send no events",{address:I.address}),get useAutomaticText(){return t(U)},onuseautomatic:()=>{t(l).useAutomaticCallback().then(I=>I?a().start():void 0)},testId:"interface-select",onselect:I=>{a().selectInterface(I)},get store(){return t(g)},storeTestId:"meta-indicator"})}var N=d(D,2);{let P=c(()=>t(o)("Devices"));Gg(N,{get tabs(){return t(k)},get active(){return t(l).tab},get label(){return t(P)},onselect:ce=>t(l).setTab(ce)})}var R=d(N,2),M=A(R);{var z=P=>{var ce=dD(),be=Ne(ce),ee=m(be,!0),he=d(be,2),G=m(he,!0);S((Q,q)=>{T(be,"title",Q),h(ee,t(l).session.user),h(G,q)},[()=>t(o)("Logged in as {user}",{user:t(l).session.user}),()=>t(o)("Log out")]),v(P,ce)};W(M,P=>{t(l).session&&!a().shell.embedded&&P(z)})}var $=d(M,2);{var le=P=>{var ce=cD(),be=m(ce);S(ee=>h(be,`${ee??""} (${a().changeSet.count??""})`),[()=>t(o)("Pending changes")]),re("click",ce,()=>u(i,!0)),v(P,ce)};W($,P=>{a().changeSet.count>0&&P(le)})}var fe=d($,2);{let P=c(()=>t(o)("RPC log"));Dt(fe,{get title(){return t(P)},icon:"≣",get pressed(){return t(l).rpcLogOpen},testId:"rpclog-toggle",onclick:()=>t(l).rpcLogOpen=!t(l).rpcLogOpen})}var de=d(fe,2);{var B=P=>{Bg(P,{get theme(){return t(l).theme},labelFor:ce=>t(o)(`Theme: ${ce}`),testId:"theme-switch",onclick:()=>t(l).cycleTheme()})};W(de,P=>{a().shell.embedded||P(B)})}var oe=d(de,2);{let P=c(()=>t(o)("Settings"));Dt(oe,{get title(){return t(P)},icon:"⚙",testId:"settings-button",onclick:()=>t(l).configDialogOpen=!0})}var K=d(oe,2);{let P=c(()=>t(o)("Homematic Manager on GitHub"));Gp(K,{href:n,get label(){return t(P)},openExternal:ce=>a().host.openExternal(ce),testId:"github-link"})}var X=d(x,2);{let P=c(()=>({available:t(o)("A new version is available"),downloading:t(o)("Downloading"),downloaded:t(o)("The update is ready and will be installed when you quit"),installOnQuit:t(o)("The update will be installed when you quit"),download:t(o)("Download"),install:t(o)("Install on quit"),dismiss:t(o)("Dismiss"),checkFailed:t(o)("The update check failed"),downloadFailed:t(o)("The download of the update failed"),failed:t(o)("The update failed"),releases:t(o)("Releases on GitHub"),downloadInBrowser:t(o)("Opens the installer of the new version in your browser")}));Zg(X,{get state(){return a().host.updateNotice},get labels(){return t(P)},releasesUrl:s,openExternal:ce=>a().host.openExternal(ce),testId:"update-notice",ondownload:()=>{a().host.downloadUpdate()},oninstall:()=>{a().host.installUpdateOnQuit()},ondismiss:()=>{a().host.dismissUpdate()}})}var se=d(X,2),j=A(se),ne=A(j);pp(ne,()=>`${t(l).selectedInterface}/${t(l).tab}`,P=>{var ce=St(),be=Ne(ce);Hf(be,{onerror:he=>a().notices.fromError(he,`page ${t(l).tab}`),failed:(he,G=Hn,Q=Hn)=>{var q=uD(),Y=A(q),ae=m(Y,!0),J=d(Y,2),ve=m(J,!0),ge=d(J,2),te=m(ge,!0);S((O,U,I)=>{h(ae,O),h(ve,U),h(te,I)},[()=>t(o)("This tab could not be drawn."),()=>G()instanceof Error?G().message:String(G()),()=>t(o)("Try again")]),re("click",ge,function(...O){Q()?.apply(this,O)}),v(he,q)}},he=>{var G=St(),Q=Ne(G);{var q=I=>{var F=fD(),Ee=m(F,!0);S(Ie=>h(Ee,Ie),[()=>t(o)("Select an interface")]),v(I,F)},Y=I=>{var F=St(),Ee=Ne(F);{var Ie=ze=>{al(ze,{enumId:"room"})},Me=ze=>{al(ze,{enumId:"function"})},Ve=ze=>{al(ze,{})};W(Ee,ze=>{t(l).tab==="rooms"?ze(Ie):t(l).tab==="functions"?ze(Me,1):ze(Ve,-1)})}v(I,F)},ae=I=>{ZT(I,{})},J=I=>{RR(I,{})},ve=I=>{FR(I,{})},ge=I=>{nD(I,{})},te=I=>{py(I,{})},O=I=>{lD(I,{})},U=I=>{nR(I,{})};W(Q,I=>{t(l).selectedInterface===""?I(q):t(l).storeSelected?I(Y,1):t(l).tab==="devices"?I(ae,2):t(l).tab==="groups"?I(J,3):t(l).tab==="links"?I(ve,4):t(l).tab==="rssi"?I(ge,5):t(l).tab==="console"?I(te,6):t(l).tab==="messages"?I(O,7):I(U,-1)})}v(he,G)}),v(P,ce)});var ye=d(se,2);{let P=c(()=>t(o)("RPC log")),ce=c(()=>t(o)("No RPC calls yet")),be=c(()=>t(o)("in progress")),ee=c(()=>t(o)("Clear")),he=c(()=>t(o)("Close")),G=c(()=>t(o)("Resize the RPC log")),Q=c(()=>t(o)("Hide background calls")),q=c(()=>t(o)("Open in console")),Y=c(()=>({console:t(o)("Origin: console"),ui:t(o)("Origin: UI"),background:t(o)("Origin: background")}));Rg(ye,{get entries(){return a().rpcLog.visible},get pending(){return a().rpcLog.pending},get title(){return t(P)},get emptyText(){return t(ce)},get pendingText(){return t(be)},get clearLabel(){return t(ee)},get closeLabel(){return t(he)},get resizeLabel(){return t(G)},get hideBackgroundLabel(){return t(Q)},get openLabel(){return t(q)},get originLabels(){return t(Y)},testId:"rpclog",onclear:()=>{a().rpcLog.clear()},onopen:f,get open(){return t(l).rpcLogOpen},set open(ae){t(l).rpcLogOpen=ae},get hideBackground(){return a().rpcLog.hideBackground},set hideBackground(ae){a().rpcLog.hideBackground=ae}})}var xe=d(ye,2);{let P=c(()=>t(o)("Dismiss")),ce=c(()=>t(o)("Show fewer"));mg(xe,{get notices(){return a().notices.items},get dismissLabel(){return t(P)},moreLabel:be=>t(o)("{count} more",{},be),get lessLabel(){return t(ce)},testId:"notices",ondismiss:be=>a().notices.dismiss(be)})}var ie=d(xe,2);{let P=c(()=>t(o)("RPC execution")),ce=c(()=>t(o)("Cancel"));Zf(ie,{get progress(){return a().rpcLog.progress},get title(){return t(P)},get cancelLabel(){return t(ce)},testId:"rpc-progress",oncancel:()=>{a().rpcLog.cancel()}})}var Ae=d(ie,2);BE(Ae,{get open(){return t(l).configDialogOpen},set open(P){t(l).configDialogOpen=P}});var Te=d(Ae,2);_b(Te,{get open(){return t(i)},set open(P){u(i,P,!0)}});var me=d(Te,2);{let P=c(()=>t(o)("Loading Homematic Manager..."));sg(me,{get visible(){return t(l).loading},get text(){return t(P)},testId:"loader"})}S(()=>{T(j,"id",`panel-${t(l).tab}`),T(j,"aria-labelledby",`tab-${t(l).tab}`)}),v(r,w),ut()}Et(["click"]);const cm="hmm.columnWidths";function um(r){const e=r.trim().toLowerCase().replace(/[^a-z0-9._-]/g,"_");return e===""?"unconfigured":e}const vD=Object.freeze({});function Mu(r){return r!==null&&typeof r=="object"&&!Array.isArray(r)}function pD(r){let e;try{const s=r?.getItem(cm);e=s==null?void 0:JSON.parse(s)}catch{return{}}const n={};if(!Mu(e))return n;for(const[s,a]of Object.entries(e)){if(!Mu(a))continue;const i={};for(const[o,l]of Object.entries(a)){const f=Ny(l);Object.keys(f).length>0&&(i[o]=f)}Object.keys(i).length>0&&(n[s]=i)}return n}class gD{#e=C({});#n;#t;constructor(e,n){this.#n=e,this.#t=n,u(this.#e,pD(e))}widths(e){return t(this.#e)[this.#t()]?.[e]??vD}set(e,n,s){const a=this.#t(),i=t(this.#e)[a]??{},o=i[e]??{},l=yi(s);o[n]!==l&&(u(this.#e,{...t(this.#e),[a]:{...i,[e]:{...o,[n]:l}}}),this.#s())}reset(e){const n=this.#t(),s=t(this.#e)[n];if(s?.[e]===void 0)return;const a=Object.fromEntries(Object.entries(s).filter(([o])=>o!==e)),i=Object.fromEntries(Object.entries(t(this.#e)).filter(([o])=>o!==n));u(this.#e,Object.keys(a).length===0?i:{...i,[n]:a}),this.#s()}#s(){try{this.#n?.setItem(cm,JSON.stringify(t(this.#e)))}catch{}}}const ol=["system","light","dark"],Ou="hmm.theme",ll="hmm.language";function bD(){return typeof window>"u"?{hash:""}:window.location}function _D(r){return typeof window>"u"?()=>{}:(window.addEventListener("hashchange",r),()=>{window.removeEventListener("hashchange",r)})}function ED(){try{return typeof localStorage>"u"?void 0:localStorage}catch{return}}class yD{#e=C(void 0);get config(){return t(this.#e)}set config(e){u(this.#e,e,!0)}#n=C(!0);get loading(){return t(this.#n)}set loading(e){u(this.#n,e,!0)}#t=C(!1);get connected(){return t(this.#t)}set connected(e){u(this.#t,e,!0)}#s=C("");get saveError(){return t(this.#s)}set saveError(e){u(this.#s,e,!0)}#a=C(void 0);get callbackAddresses(){return t(this.#a)}set callbackAddresses(e){u(this.#a,e,!0)}#r=0;#i=C(void 0);get pairing(){return t(this.#i)}set pairing(e){u(this.#i,e,!0)}#l=C("");get selectedInterface(){return t(this.#l)}set selectedInterface(e){u(this.#l,e,!0)}#o=C(We(qi));get tab(){return t(this.#o)}set tab(e){u(this.#o,e,!0)}#d=C(We(qi));get interfaceTab(){return t(this.#d)}set interfaceTab(e){u(this.#d,e,!0)}#c=C("");get linksFilter(){return t(this.#c)}set linksFilter(e){u(this.#c,e,!0)}#u=C("en");get language(){return t(this.#u)}set language(e){u(this.#u,e,!0)}#f=C("auto");get languageChoice(){return t(this.#f)}set languageChoice(e){u(this.#f,e,!0)}#h=C("system");get theme(){return t(this.#h)}set theme(e){u(this.#h,e,!0)}#m=C(null);get session(){return t(this.#m)}set session(e){u(this.#m,e,!0)}#v=C(!1);get configDialogOpen(){return t(this.#v)}set configDialogOpen(e){u(this.#v,e,!0)}#_=C(!1);get rpcLogOpen(){return t(this.#_)}set rpcLogOpen(e){u(this.#_,e,!0)}columnWidths;#p;#b;#E;#g;#S;#y=[];#w=[];get storage(){return this.#g}constructor(e,n,s={}){this.#p=e,this.#b=n,this.#E=s.location??bD(),this.#g=s.storage===void 0?ED():s.storage,this.#S=s.languages,this.columnWidths=new gD(this.#g,()=>um(this.config?.connection.host??""));const a=this.#g?.getItem(Ou);(a==="light"||a==="dark"||a==="system")&&(this.theme=a);const i=this.#g?.getItem(ll);(i==="de"||i==="en"||i==="auto")&&(this.languageChoice=i),this.#k(),this.readRoute(),this.connected=e.connected,this.#y.push(e.onConnectionChange(o=>{this.connected=o}),e.on("config.changed",o=>{this.config=o}),e.on("pairing.changed",o=>{this.pairing=o}),(s.onHashChange??_D)(()=>{const o=this.selectedInterface;if(this.readRoute(),this.selectedInterface!==o)for(const l of[...this.#w])l(o)}))}onInterfaceRouted(e){return this.#w.push(e),()=>{const n=this.#w.indexOf(e);n>=0&&this.#w.splice(n,1)}}readRoute(){const e=ob(this.#E.hash);e.interfaceName!==""&&(this.selectedInterface=e.interfaceName),vi(e.tab)?this.tab=this.storeSelected?e.tab:qi:(this.tab=e.tab,this.interfaceTab=e.tab)}writeRoute(){const e=lb(this.selectedInterface,this.tab);this.#E.hash!==e&&(this.#E.hash=e)}setTab(e){this.tab=e,vi(e)||(this.interfaceTab=e),this.writeRoute()}get storeSelected(){return rh(this.selectedInterface)}setInterface(e){this.selectedInterface=e,this.writeRoute()}setLanguage(e){this.languageChoice=e,this.#k(),this.#g?.setItem(ll,e)}#k(){this.language=M1(this.languageChoice,this.#S)}setTheme(e){this.theme=e,this.#g?.setItem(Ou,e)}cycleTheme(){const e=ol.indexOf(this.theme);this.setTheme(ol[(e+1)%ol.length]??"system")}get configuredInterfaces(){return this.config?.connection.interfaces??[]}get host(){return this.config?.connection.host??""}async load(){try{const e=await this.#p.request("config.get");this.applyConfig(e)}catch(e){this.#b.fromError(e,"config.get")}finally{this.loading=!1}await this.loadSession()}async loadSession(){try{this.session=await this.#p.request("session.info")}catch{this.session=null}}async save(e,n){this.saveError="";try{return this.applyConfig(await(n===void 0?this.#p.request("config.set",e):this.#p.request("config.set",e,n))),this.configDialogOpen=!1,!0}catch(s){return this.saveError=s instanceof Error?s.message:String(s),this.#b.fromError(s,"config.set"),!1}}async loadCallbackAddresses(e){this.#r+=1;const n=this.#r;let s;try{s=await(e===void 0?this.#p.request("config.callbackAddresses"):this.#p.request("config.callbackAddresses",e))}catch{s=void 0}n===this.#r&&(this.callbackAddresses=s)}async useAutomaticCallback(){const e=this.config?.connection;if(e===void 0)return!1;const n=zi(e);return this.save({...n,callback:{...n.callback,ip:""}})}async testConnection(e){try{return await this.#p.request("connection.test",e)}catch(n){this.#b.fromError(n,"connection.test");return}}async pair(e){this.pairing={state:"requesting"};try{await this.#p.request("connection.pair",e)}catch(n){this.pairing={state:"failed",message:n instanceof Error?n.message:String(n)},this.#b.fromError(n,"connection.pair")}}async cancelPairing(){try{await this.#p.request("connection.pairCancel")}catch(e){this.#b.fromError(e,"connection.pairCancel")}this.pairing=void 0}async discover(){try{const e=await this.#p.request("config.discover");this.config&&(this.config={...this.config,discovered:e})}catch(e){this.#b.fromError(e,"config.discover")}}async clearCaches(){try{await this.#p.request("config.clearCaches")}catch(e){this.#b.fromError(e,"config.clearCaches")}}applyConfig(e){this.config=e,this.#g?.getItem(ll)==null&&(this.languageChoice=e.connection.language??"auto",this.#k()),!this.storeSelected&&(this.selectedInterface===""||!e.connection.interfaces.includes(this.selectedInterface))&&(this.selectedInterface=e.connection.interfaces[0]??""),this.writeRoute(),e.connection.host===""&&(this.configDialogOpen=!0)}dispose(){for(const e of this.#y)e();this.#y.length=0,this.#w.length=0}}class SD{#e=C(We([]));get changes(){return t(this.#e)}set changes(e){u(this.#e,e,!0)}#n=C(We([]));get outcomes(){return t(this.#n)}set outcomes(e){u(this.#n,e,!0)}#t=C(!1);get applying(){return t(this.#t)}set applying(e){u(this.#t,e,!0)}#s=C(0);get applied(){return t(this.#s)}set applied(e){u(this.#s,e,!0)}#a=0;#r=1;#i;#l;#o;constructor(e,n,s){this.#i=e,this.#l=n,this.#o=s}get count(){return this.changes.length}get empty(){return this.changes.length===0}get interfaces(){const e=[];for(const n of this.changes)e.includes(n.interfaceName)||e.push(n.interfaceName);return e}stage(e){const n=`c${String(this.#r)}`;return this.#r+=1,this.changes=[...this.changes,{...e,id:n}],this.outcomes=[],n}remove(e){this.changes=this.changes.filter(n=>n.id!==e),this.outcomes=this.outcomes.filter(n=>n.id!==e)}clear(){this.changes=[],this.outcomes=[],this.applied=0}outcome(e){return this.outcomes.find(n=>n.id===e)}async apply(){if(this.applying||this.empty)return 0;this.applying=!0;const e=this.#a+=1;this.applied=0,this.outcomes=[];const n=[];try{for(const s of this.changes){if(this.#a!==e)break;const a=await this.#d(s);this.outcomes=[...this.outcomes,a],this.applied+=1,a.ok&&n.push(s.id)}}finally{this.applying=!1,this.changes=this.changes.filter(s=>!n.includes(s.id))}return n.length}async cancel(){return this.#a+=1,this.#o.cancel()}async#d(e){try{switch(e.kind){case"paramset":{const n=await this.#i.request("paramset.put",e.interfaceName,[...e.targets],e.paramset,e.values,e.writeAll?{writeAll:!0}:void 0);return this.#c(e.id,n)}case"linkParamset":{const n=await this.#i.request("paramset.putLink",e.interfaceName,e.links.map(s=>({...s})),e.values);return this.#c(e.id,n)}case"linkAdd":{for(const n of e.pairs)await this.#i.request("links.add",e.interfaceName,n.sender,n.receiver,n.name,n.description);return{id:e.id,ok:!0,results:[]}}case"linkRemove":{for(const n of e.pairs)await this.#i.request("links.remove",e.interfaceName,n.sender,n.receiver);return{id:e.id,ok:!0,results:[]}}}}catch(n){return this.#l.fromError(n,e.title),{id:e.id,ok:!1,results:[],error:Di(n).message}}}#c(e,n){const s=n.filter(a=>!a.ok);return{id:e,ok:n.length>0&&s.length===0,results:n,...s.length===0?{}:{error:s.map(a=>`${a.address}: ${a.faultString??"failed"}`).join(", ")}}}}class wD{#e=C(We({}));get methods(){return t(this.#e)}set methods(e){u(this.#e,e,!0)}#n=C(!1);get running(){return t(this.#n)}set running(e){u(this.#n,e,!0)}#t=C(void 0);get pendingRecall(){return t(this.#t)}set pendingRecall(e){u(this.#t,e,!0)}#s;#a;#r;#i=1;constructor(e,n,s={}){this.#s=e,this.#a=n,this.#r=s.now??(()=>Date.now())}of(e){return this.methods[e]??[]}method(e,n){return this.of(e).find(s=>s.name===n)}async load(e){if(!(e===""||this.methods[e]))try{this.methods={...this.methods,[e]:await this.#s.request("rpc.methods",e)}}catch(n){this.#a.fromError(n,`rpc.methods ${e}`)}}async call(e,n,s){this.running=!0;const a=this.#r(),i=this.#i;this.#i+=1;try{const o=await this.#s.request("rpc.call",e,n,s);return{id:i,timestamp:a,interfaceName:e,method:n,params:s,ok:!0,result:o,durationMs:this.#r()-a}}catch(o){const l=o;return{id:i,timestamp:a,interfaceName:e,method:n,params:s,ok:!1,error:l.message??String(o),...l.faultCode===void 0?{}:{faultCode:l.faultCode},durationMs:this.#r()-a}}finally{this.running=!1}}recall(e){this.pendingRecall={interfaceName:e.interfaceName,method:e.method,params:[...e.params]}}takeRecall(e){const n=this.pendingRecall;if(!(n===void 0||n.interfaceName!==e))return this.pendingRecall=void 0,n}}const Lu=1e4,kD=6e4,AD=["DO_UPDATE_PENDING","PERFORMING_UPDATE","LIVE_DELIVER_FIRMWARE_IMAGE"],TD=["NEW_FIRMWARE_AVAILABLE","DELIVER_FIRMWARE_IMAGE"],RD=12e4;class xD{#e=C(We({}));get indexes(){return t(this.#e)}set indexes(e){u(this.#e,e,!0)}#n=C(We({}));get loading(){return t(this.#n)}set loading(e){u(this.#n,e,!0)}#t=C(We({}));get failed(){return t(this.#t)}set failed(e){u(this.#t,e,!0)}#s=C(We([]));get firmwareBusy(){return t(this.#s)}set firmwareBusy(e){u(this.#s,e,!0)}#a=C(We({}));get firmwareTail(){return t(this.#a)}set firmwareTail(e){u(this.#a,e,!0)}#r;#i;#l=[];constructor(e,n){this.#r=e,this.#i=n,this.#l.push(e.on("devices.changed",s=>{this.indexes[s.interfaceName]&&this.load(s.interfaceName,{refresh:!1})}))}index(e){return this.indexes[e]}devices(e){return this.indexes[e]?.devices()??[]}channels(e,n){return this.indexes[e]?.childrenOf(n)??[]}isLoading(e){return this.loading[e]===!0}hasFailed(e){return this.failed[e]===!0}async load(e,n={}){if(e!==""){this.loading={...this.loading,[e]:!0};try{const s=await this.#r.request("devices.list",e,{refresh:n.refresh??!1}),a=this.#o(e);this.indexes={...this.indexes,[e]:new Fb(e,s)},this.failed={...this.failed,[e]:!1},this.settleFirmware(e),a&&!this.#o(e)&&(this.firmwareTail={...this.firmwareTail,[e]:Date.now()+RD})}catch(s){this.failed={...this.failed,[e]:!0},this.#i.fromError(s,`devices.list ${e}`)}finally{this.loading={...this.loading,[e]:!1}}}}async teams(e){try{return await this.#r.request("teams.list",e)}catch(n){return this.#i.fromError(n,`listTeams ${e}`),[]}}async setTeam(e,n,s){return await this.setTeams(e,[{address:n,teamAddress:s}])===1}async setTeams(e,n){let s=0;for(const{address:a,teamAddress:i}of n)try{await this.#r.request("teams.set",e,a,i),s+=1}catch(o){this.#i.fromError(o,`setTeam ${a}`)}return n.length>0&&await this.load(e,{refresh:!0}),s}async confirmRegaInbox(){try{return await this.#r.request("rega.confirmInbox")}catch(e){return this.#i.fromError(e,"rega.confirmInbox"),[]}}async ensure(e){e===""||this.indexes[e]||this.isLoading(e)||await this.load(e)}async retry(e){this.isLoading(e)||await this.load(e,{refresh:!0})}firmwarePending(e){return this.firmwarePollMs(e)>0}firmwarePollMs(e){return this.#o(e)||(this.firmwareTail[e]??0)>Date.now()?Lu:this.devices(e).some(s=>TD.includes(s.FIRMWARE_UPDATE_STATE??""))?kD:0}#o(e){return this.firmwareBusy.length>0?!0:this.devices(e).some(n=>AD.includes(n.FIRMWARE_UPDATE_STATE??""))}async updateFirmware(e,n){if(n.length===0)return[];this.firmwareBusy=[...this.firmwareBusy,...n.filter(s=>!this.firmwareBusy.includes(s))];try{const s=await this.#r.request("devices.updateFirmware",e,n);return await this.load(e,{refresh:!0}),s}catch(s){return this.#i.fromError(s,`devices.updateFirmware ${n.join(" ")}`),this.firmwareBusy=this.firmwareBusy.filter(a=>!n.includes(a)),[]}}async installFirmware(e,n){this.firmwareBusy=this.firmwareBusy.includes(n)?this.firmwareBusy:[...this.firmwareBusy,n];try{const s=await this.#r.request("devices.installFirmware",e,n);return await this.load(e,{refresh:!0}),s}catch(s){return this.#i.fromError(s,`devices.installFirmware ${n}`),this.firmwareBusy=this.firmwareBusy.filter(a=>a!==n),!1}}settleFirmware(e){const n=this.indexes[e];if(!n)return;const s=this.firmwareBusy.filter(a=>{const i=n.get(a);return i!==void 0&&(i.AVAILABLE_FIRMWARE===void 0||i.AVAILABLE_FIRMWARE===i.FIRMWARE)});s.length>0&&(this.firmwareBusy=this.firmwareBusy.filter(a=>!s.includes(a)))}async remove(e,n,s){try{return await this.#r.request("devices.delete",e,n,s),await this.load(e,{refresh:!0}),!0}catch(a){return this.#i.fromError(a,`deleteDevice ${n}`),!1}}async replaceable(e,n){try{return await this.#r.request("devices.replaceable",e,n)}catch(s){return this.#i.fromError(s,`devices.replaceable ${n}`),[]}}async replace(e,n,s){try{const a=await this.#r.request("devices.replace",e,n,s);return await this.load(e,{refresh:!0}),a}catch(a){return this.#i.fromError(a,`replaceDevice ${n} ${s}`),!1}}async repairConfig(e,n,s){try{return await this.#r.request("devices.repairConfig",e,n,s)}catch(a){this.#i.fromError(a,`devices.repairConfig ${n}`);return}}async restoreConfig(e,n){try{return await this.#r.request("devices.restoreConfig",e,n),!0}catch(s){return this.#i.fromError(s,`restoreConfigToDevice ${n}`),!1}}async clearConfigCache(e,n){try{return await this.#r.request("devices.clearConfigCache",e,n),!0}catch(s){return this.#i.fromError(s,`clearConfigCache ${n}`),!1}}async reportValueUsage(e,n,s){let a=0;for(const i of n){let o;try{o=await this.#r.request("paramset.description",e,i,"VALUES")}catch(l){this.#i.fromError(l,`getParamsetDescription ${i} VALUES`);continue}for(const l of Object.keys(o))try{await this.#r.request("devices.reportValueUsage",e,i,l,s),a+=1}catch(f){this.#i.fromError(f,`reportValueUsage ${i} ${l}`);break}}return a}async setInstallMode(e,n,s){try{return await this.#r.request("devices.installMode.set",e,n,s),!0}catch(a){return this.#i.fromError(a,"setInstallMode"),!1}}async hmipPairing(){try{return await this.#r.request("meta.pairing")??void 0}catch{return}}async tryInstallMode(e,n,s){try{return await this.#r.request("devices.installMode.set",e,n,s),null}catch(a){return Di(a)}}async keyMismatchDevice(e){try{return await this.#r.request("devices.installMode.keyMismatch",e)}catch{return""}}async setTempKey(e,n){try{return await this.#r.request("devices.installMode.tempKey",e,n),!0}catch(s){return this.#i.fromError(s,"setTempKey"),!1}}async installModeSeconds(e){try{return await this.#r.request("devices.installMode.get",e)}catch(n){return this.#i.fromError(n,"getInstallMode"),0}}forget(e){if(e===void 0){this.indexes={};return}this.indexes=Object.fromEntries(Object.entries(this.indexes).filter(([n])=>n!==e))}dispose(){for(const e of this.#l)e();this.#l.length=0}}class DD{buffer;#e=C(0);#n=0;#t=c(()=>(t(this.#e),this.buffer.toArray().reverse()));get records(){return t(this.#t)}set records(e){u(this.#t,e)}#s;#a;#r;constructor(e,n,s={}){this.buffer=new a1(s.capacity??Ah),this.#s=e,this.#a=n,this.#r=e.on("rpc.event",a=>{this.push(a)})}get size(){return t(this.#e),this.buffer.size}push(e){this.buffer.push({...e,seq:this.#n}),this.#n+=1,u(this.#e,t(this.#e)+1)}filtered(e){return t(this.#e),o1(this.buffer,e).reverse()}countFor(e){return t(this.#e),this.buffer.filter(n=>n.address===e).length}async load(e,n){try{const s=await this.#s.request("events.recent",e,n);for(const a of s)this.buffer.push({...a,seq:this.#n}),this.#n+=1;u(this.#e,t(this.#e)+1)}catch(s){this.#a.fromError(s,"events.recent")}}async clear(){this.buffer.clear(),u(this.#e,t(this.#e)+1);try{await this.#s.request("events.clear")}catch(e){this.#a.fromError(e,"events.clear")}}dispose(){this.#r()}}class ID{#e=C(void 0);get state(){return t(this.#e)}set state(e){u(this.#e,e,!0)}#n=C(We([]));get groups(){return t(this.#n)}set groups(e){u(this.#n,e,!0)}#t=C(We([]));get devicesToConfigure(){return t(this.#t)}set devicesToConfigure(e){u(this.#t,e,!0)}#s=C(!1);get loading(){return t(this.#s)}set loading(e){u(this.#s,e,!0)}#a=C(!1);get loaded(){return t(this.#a)}set loaded(e){u(this.#a,e,!0)}#r;#i;#l=[];#o="";#d;constructor(e,n){this.#r=e,this.#i=n,this.#l.push(e.on("meta.changed",s=>{this.follow(s)}))}fallbackName(e){const n=e.indexOf(":"),s=n===-1?e:e.slice(0,n),a=this.groups.find(i=>i.device===s);return a===void 0||a.name===""?void 0:`${a.name} ${e}`}get offered(){return this.state?.available===!0}async follow(e){const n=e?.provider==="occulite"&&e.reachable,s=n?`occulite/${e.url??""}`:"none";if(s===this.#o&&(this.state!==void 0||this.#d!==void 0)){await this.#d;return}if(this.#o=s,!n){this.state={available:!1,reason:"no-box"},this.groups=[],this.devicesToConfigure=[],this.loaded=!1;return}this.#d=this.#c();try{await this.#d}finally{this.#d=void 0}}async#c(){try{this.state=await this.#r.request("groups.state")}catch(e){this.state={available:!1,reason:"error",message:Di(e).message}}this.state.available&&await this.#u()}async#u(){try{const e=await this.#r.request("groups.list");this.groups=e.groups,this.devicesToConfigure=e.devicesToConfigure,this.loaded=!0}catch{}}async load(){this.loading=!0;try{const e=await this.#r.request("groups.list");return this.groups=e.groups,this.devicesToConfigure=e.devicesToConfigure,this.loaded=!0,!0}catch(e){return this.#i.fromError(e,"groups.list"),!1}finally{this.loading=!1}}async types(){try{return await this.#r.request("groups.types")}catch(e){return this.#i.fromError(e,"groups.types"),[]}}async detail(e){try{return await this.#r.request("groups.get",e)}catch(n){this.#i.fromError(n,"groups.get");return}}async create(e,n,s){try{const a=await this.#r.request("groups.create",e,n,[...s]);return await this.#f(a),a}catch(a){this.#i.fromError(a,"groups.create");return}}async update(e,n,s){try{const a=await this.#r.request("groups.update",e,n,s===void 0?void 0:[...s]);return await this.#f(a),a}catch(a){this.#i.fromError(a,"groups.update");return}}async remove(e){try{const n=await this.#r.request("groups.delete",e);return await this.load(),this.devicesToConfigure=n,!0}catch(n){return this.#i.fromError(n,"groups.delete"),!1}}async#f(e){await this.load(),this.devicesToConfigure=e.devicesToConfigure}dispose(){for(const e of this.#l)e();this.#l.length=0}}const ND="__HMM_HOST__";function CD(r){if(typeof r!="object"||r===null)return!1;const e=r,n=e.update;return typeof e.info=="function"&&typeof e.deviceImageUrl=="function"&&typeof e.setTheme=="function"&&typeof e.onSystemTheme=="function"&&typeof e.onMenuAction=="function"&&typeof n=="object"&&n!==null&&typeof n.state=="function"&&typeof n.check=="function"&&typeof n.download=="function"&&typeof n.installOnQuit=="function"&&typeof n.dismiss=="function"&&typeof n.on=="function"}function PD(r=globalThis){const e=r[ND];return CD(e)?e:void 0}class MD{#e=C(void 0);get info(){return t(this.#e)}set info(e){u(this.#e,e,!0)}#n=C(void 0);get update(){return t(this.#n)}set update(e){u(this.#n,e,!0)}#t=C(!1);get systemDark(){return t(this.#t)}set systemDark(e){u(this.#t,e,!0)}#s;#a=[];constructor(e={}){this.#s=e.bridge??PD(e.scope??globalThis),this.#s&&this.#a.push(this.#s.onSystemTheme(n=>{this.systemDark=n}),this.#s.update.on(n=>{this.update=n}))}get available(){return this.#s!==void 0}get updateNotice(){const e=this.update;if(!(!e||e.dismissed))return["available","downloading","downloaded","installOnQuit","error"].includes(e.phase)?e:void 0}deviceImageUrl(e){if(e!=="")return this.#s?this.#s.deviceImageUrl(e):`images/${encodeURIComponent(e)}`}async load(){if(!this.#s)return;const[e,n]=await Promise.all([this.#s.info(),this.#s.update.state()]);this.info=e,this.update=n}async setTheme(e){await this.#s?.setTheme(e)}onMenuAction(e){return this.#s?.onMenuAction(e)??(()=>{})}async openExternal(e){const n=this.#s;return n?.openExternal?(await n.openExternal(e),!0):!1}async checkForUpdate(){this.update=await this.#s?.update.check()}async downloadUpdate(){this.update=await this.#s?.update.download()}async installUpdateOnQuit(){this.update=await this.#s?.update.installOnQuit()}async dismissUpdate(){this.update=await this.#s?.update.dismiss()}dispose(){for(const e of this.#a)e();this.#a.length=0}}class OD{#e=C(We([]));get states(){return t(this.#e)}set states(e){u(this.#e,e,!0)}#n=C(void 0);get rega(){return t(this.#n)}set rega(e){u(this.#n,e,!0)}#t=C(!1);get loading(){return t(this.#t)}set loading(e){u(this.#t,e,!0)}#s;#a;#r=[];constructor(e,n){this.#s=e,this.#a=n,this.#r.push(e.on("interfaces.changed",s=>{this.states=s}),e.on("rega.changed",s=>{this.rega=s}))}get(e){return this.states.find(n=>n.name===e)}typeOf(e){return this.get(e)?.type??""}isConnected(e){return this.get(e)?.connected===!0}get allConnected(){const e=this.states.filter(n=>n.absent!==!0);return e.length>0&&e.every(n=>n.connected)}async load(){this.loading=!0;try{this.states=await this.#s.request("interfaces.list")}catch(e){this.#a.fromError(e,"interfaces.list")}finally{this.loading=!1}try{this.rega=await this.#s.request("rega.state")}catch(e){this.rega={enabled:!0,reachable:!1,names:0,error:String(e)}}}async reconnect(e){try{await this.#s.request("interfaces.reconnect",e)}catch(n){this.#a.fromError(n,"interfaces.reconnect")}}dispose(){for(const e of this.#r)e();this.#r.length=0}}class LD{#e;#n=new Map;constructor(e){this.#e=e}get requested(){return[...this.#n.keys()]}async#t(e){let n=this.#n.get(e);return n===void 0&&(n=this.#e.request("data.file",`data/${e}`).catch(()=>{}),this.#n.set(e,n)),await n}manifest(){return this.#t(ms.manifest)}receiverProfiles(e){return this.#t(ms.profiles(e))}async receiverTypeAliases(){return await this.#t(ms.receiverTypeAliases)??{}}async masterMetadata(){return await this.#t(ms.masterMetadata)??{}}async optionPresets(){return await this.#t(ms.optionPresets)??{}}async crossValidations(){return await this.#t(ms.crossValidations)??[]}translations(e){return this.#t(ms.translations(e))}async deviceIcons(){return await this.#t(ms.deviceIcons)??{}}async masterForms(){return(await this.#t(ms.masterForms))?.byParamsetId??{}}async timeSelectors(){return(await this.#t(ms.timeSelectors))?.types??{}}}class FD{#e=C(We(new Wc));get lookup(){return t(this.#e)}set lookup(e){u(this.#e,e,!0)}#n=C(void 0);get manifest(){return t(this.#n)}set manifest(e){u(this.#n,e,!0)}#t=C(!1);get available(){return t(this.#t)}set available(e){u(this.#t,e,!0)}#s=C(We({}));get presets(){return t(this.#s)}set presets(e){u(this.#s,e,!0)}#a=C(We({}));get timeSelectors(){return t(this.#a)}set timeSelectors(e){u(this.#a,e,!0)}source;engine;#r;#i;constructor(e,n={}){this.source=n.source??new LD(e),this.engine=new B_(this.source)}async setLanguage(e){if(this.#r===e){await this.#i;return}this.#r=e;const n=(async()=>{const a=[e,...["en","de"].filter(f=>f!==e)],i=await Promise.all(a.map(f=>this.source.translations(f))),[o,...l]=i;this.lookup=new Wc(o,...l),this.available=i.some(f=>f!==void 0),this.manifest=await this.source.manifest()})();this.#i=n,await n}async loadPresets(){if(Object.keys(this.presets).length===0){const[e,n]=await Promise.all([this.source.optionPresets(),this.source.timeSelectors()]);this.presets=e,this.timeSelectors=n}return this.presets}masterView(e,n,s={},a="",i){return this.engine.masterMetadataFor(e,n,s,a,i)}masterFormId(e){return e===""?Promise.resolve(""):this.engine.masterFormId(e)}profilesFor(e,n){return this.engine.profilesFor(e,n)}linkMetadataFor(e,n){return this.engine.linkMetadataFor(e,n)}parameterLabel(e,n){return this.lookup.parameter(e,n)}parameterHelp(e,n){return this.lookup.parameterHelp(e,n)}valueLabel(e,n,s){return this.lookup.parameterValue(e,n,s)}specialLabel(e,n,s){return this.lookup.specialValue(e,n,s)}valueLabelIfKnown(e,n,s){const a=this.lookup.parameterValue(e,n,s);return a===n?void 0:a}channelTypeLabel(e){return this.lookup.channelType(e)}deviceModelLabel(e){return this.lookup.deviceModel(e)}uiLabel(e){return this.lookup.uiLabel(e)}}class GD{#e=C(We({}));get links(){return t(this.#e)}set links(e){u(this.#e,e,!0)}#n=C(We({}));get loading(){return t(this.#n)}set loading(e){u(this.#n,e,!0)}#t;#s;constructor(e,n){this.#t=e,this.#s=n}of(e){return this.links[e]??[]}isLoading(e){return this.loading[e]===!0}forAddress(e,n){return this.of(e).filter(s=>s.SENDER===n||s.RECEIVER===n)}async load(e){if(e!==""){this.loading={...this.loading,[e]:!0};try{this.links={...this.links,[e]:await this.#t.request("links.list",e)}}catch(n){this.#s.fromError(n,`links.list ${e}`)}finally{this.loading={...this.loading,[e]:!1}}}}defective(e){return this.of(e).filter(n=>Dl(n).broken)}async add(e,n,s,a,i){const o=n.flatMap(l=>s.map(f=>({sender:l,receiver:f,...a===void 0?{}:{name:a},...i===void 0?{}:{description:i}})));return this.addPairs(e,o)}async addPairs(e,n){let s=0;for(const a of n)try{await this.#t.request("links.add",e,a.sender,a.receiver,a.name,a.description),s+=1}catch(i){this.#s.fromError(i,`addLink ${a.sender} ${a.receiver}`)}return s>0&&await this.load(e),s}async remove(e,n){let s=0;for(const a of n)try{await this.#t.request("links.remove",e,a.sender,a.receiver),s+=1}catch(i){this.#s.fromError(i,`removeLink ${a.sender} ${a.receiver}`)}return s>0&&await this.load(e),s}async info(e,n,s){try{return await this.#t.request("links.info.get",e,n,s)}catch(a){this.#s.fromError(a,`getLinkInfo ${n} ${s}`);return}}async setInfo(e,n,s,a,i){try{return await this.#t.request("links.info.set",e,n,s,a,i),await this.load(e),!0}catch(o){return this.#s.fromError(o,`setLinkInfo ${n} ${s}`),!1}}async activate(e,n,s,a){try{return await this.#t.request("links.activate",e,n,s,a),!0}catch(i){return this.#s.fromError(i,`activateLinkParamset ${n} ${s}`),!1}}#a=C(We([]));get templates(){return t(this.#a)}set templates(e){u(this.#a,e,!0)}async loadTemplates(e){try{this.templates=await this.#t.request("linkTemplates.list",e)}catch(n){this.#s.fromError(n,"linkTemplates.list"),this.templates=[]}return this.templates}async saveTemplate(e){try{return await this.#t.request("linkTemplates.save",e),await this.loadTemplates(e.identity),!0}catch(n){return this.#s.fromError(n,"linkTemplates.save"),!1}}async removeTemplate(e,n){try{return await this.#t.request("linkTemplates.remove",e),await this.loadTemplates(n),!0}catch(s){return this.#s.fromError(s,"linkTemplates.remove"),!1}}async ensure(e){e===""||this.links[e]||this.isLoading(e)||await this.load(e)}forget(e){if(e===void 0){this.links={};return}this.links=Object.fromEntries(Object.entries(this.links).filter(([n])=>n!==e))}}class UD{#e=C(We({}));get names(){return t(this.#e)}set names(e){u(this.#e,e,!0)}#n;#t;#s;constructor(e,n){this.#n=e,this.#t=n,this.#s=e.on("names.changed",s=>{this.names=s})}name(e){return this.names[e]}nameOf(e){return this.names[e]??e}get size(){return Object.keys(this.names).length}async load(){try{this.names=await this.#n.request("names.get")}catch(e){this.#t.fromError(e,"names.get")}}async rename(e){try{return this.names=await this.#n.request("names.set",e),!0}catch(n){return this.#t.fromError(n,"names.set"),!1}}dispose(){this.#s()}}function to(r,e,n){return`${r}|${e}|${n}`}function BD(r,e,n,s){try{return Ga(r,e,n,s)}catch{return to(r,e.ADDRESS,n)}}class HD{#e=C(We({}));get descriptions(){return t(this.#e)}set descriptions(e){u(this.#e,e,!0)}#n=C(!1);get loading(){return t(this.#n)}set loading(e){u(this.#n,e,!0)}#t=C(We([]));get results(){return t(this.#t)}set results(e){u(this.#t,e,!0)}#s=C(!1);get writing(){return t(this.#s)}set writing(e){u(this.#s,e,!0)}#a=C(We({}));get contents(){return t(this.#a)}set contents(e){u(this.#a,e,!0)}#r;#i;#l=[];constructor(e,n){this.#r=e,this.#i=n}description(e,n,s){return this.descriptions[to(e,n,s)]}async describe(e,n,s){const a=to(e,n,s),i=this.descriptions[a];if(i)return i;try{const o=await this.#r.request("paramset.description",e,n,s);return this.descriptions={...this.descriptions,[a]:o},o}catch(o){this.#i.fromError(o,`getParamsetDescription ${n} ${s}`);return}}contentOf(e,n,s,a,i="parameters"){const o=`${BD(e,n,s,a)}#${i}`,l=this.contents[o];if(l!==void 0||this.#l.includes(o))return l;this.#l.push(o);const f=n.ADDRESS;queueMicrotask(()=>{this.#o(o,e,f,s,i)})}async#o(e,n,s,a,i){let o;try{const l=this.descriptions[to(n,s,a)]??await this.#r.request("paramset.description",n,s,a);o=(i==="service-messages"?Jh(l):Object.keys(l)).length===0?"empty":"parameters"}catch{o="failed"}this.#l=this.#l.filter(l=>l!==e),this.contents={...this.contents,[e]:o}}async read(e,n,s){try{return await this.#r.request("paramset.get",e,n,s)}catch(a){this.#i.fromError(a,`getParamset ${n} ${s}`);return}}async paramsetId(e,n){try{return await this.#r.request("paramset.id",e,n)}catch{return""}}async channelMode(e,n){try{return await this.#r.request("channel.mode",e,n)}catch{return""}}async open(e,n,s){this.loading=!0;try{const[a,i]=await Promise.all([this.describe(e,n,s),this.read(e,n,s)]);return a?{description:a,values:i??{}}:void 0}finally{this.loading=!1}}async put(e,n,s,a,i){this.writing=!0;try{const o=await this.#r.request("paramset.put",e,n,s,a,i);return this.results=o,o}catch(o){return this.#i.fromError(o,`putParamset ${s}`),this.results=[],[]}finally{this.writing=!1}}async putLink(e,n,s,a){this.writing=!0;try{const i=await this.#r.request("paramset.putLink",e,n,s,a);return this.results=i,i}catch(i){return this.#i.fromError(i,"putParamset LINK"),this.results=[],[]}finally{this.writing=!1}}async setValue(e,n,s,a){try{return await this.#r.request("value.set",e,n,s,a),!0}catch(i){return this.#i.fromError(i,`setValue ${n} ${s}`),!1}}async getValue(e,n,s){try{return await this.#r.request("value.get",e,n,s)}catch(a){this.#i.fromError(a,`getValue ${n} ${s}`);return}}async valueStates(e,n){try{return await this.#r.request("paramset.valueStates",e,n)}catch{return{}}}async suppressedServiceMessages(e,n){return Oh(this.#r,e,n)}async suppressServiceMessages(e,n,s,a){try{return await Lh(this.#r,e,n,s,a),!0}catch(i){return this.#i.fromError(i,`suppressServiceMessages ${n} ${s||"*"}`),!1}}clearResults(){this.results=[]}}class VD{#e=C(We({}));get interfaces(){return t(this.#e)}set interfaces(e){u(this.#e,e,!0)}#n=C(!1);get loading(){return t(this.#n)}set loading(e){u(this.#n,e,!0)}#t=C(0);#s={};#a={};#r=C(We({}));#i;#l;#o;constructor(e,n){this.#i=e,this.#l=n,this.#o=e.on("rpc.event",s=>{if(s.address===void 0||s.datapoint===void 0||s.value===void 0)return;const a=s.value;if(typeof a!="boolean"&&typeof a!="number"&&typeof a!="string")return;this.#s[s.interfaceName]?.applyHmipValue(Fa(s.address),s.datapoint,a)===!0&&u(this.#t,t(this.#t)+1)})}#d(e){const n=this.#s[e]??new n1;return this.#s[e]=n,n}hasMatrix(e){return t(this.#r)[e]!==void 0}async ensureMatrix(e){e===""||t(this.#r)[e]!==void 0||await this.load(e)}gateways(e){return this.interfaces[e]??[]}gatewayAddresses(e){return this.gateways(e).map(n=>n.ADDRESS)}pair(e,n,s){return t(this.#t),this.#s[e]?.get(n,s)}peersOf(e,n){return t(this.#t),this.#s[e]?.peersOf(n)??[]}bestGatewayFor(e,n){return t(this.#t),this.#s[e]?.bestInterfaceFor(n,this.gatewayAddresses(e))}proposeReceivers(e,n,s){t(this.#t);const a=this.#s[e];return a?s1(n,this.gatewayAddresses(e),a,{marginDb:s}):[]}async ensureGateways(e){if(!(e===""||this.interfaces[e]!==void 0||this.#a[e]!==void 0)){this.#a[e]="busy";try{await this.#c(e),this.#a[e]="done"}catch(n){this.#a[e]="failed",this.#l.fromError(n,`listBidcosInterfaces ${e}`)}}}async#c(e){const n=await this.#i.request("bidcos.interfaces",e);this.interfaces={...this.interfaces,[e]:n};const s=n.find(a=>a.DEFAULT===!0)??n[0];s&&this.#d(e).setCentralAddress(s.ADDRESS)}async load(e){if(e!==""){u(this.#r,{...t(this.#r),[e]:"busy"},!0),this.loading=!0;try{await this.#c(e)}catch(n){this.#l.fromError(n,`listBidcosInterfaces ${e}`)}try{this.#d(e).applyRssiInfo(await this.#i.request("rssi.get",e)),u(this.#t,t(this.#t)+1),u(this.#r,{...t(this.#r),[e]:"done"},!0)}catch(n){u(this.#r,{...t(this.#r),[e]:"failed"},!0),this.#l.fromError(n,`rssiInfo ${e}`)}finally{this.loading=!1}}}async setBidcosInterface(e,n,s,a){try{return await this.#i.request("bidcos.setInterface",e,n,s,a),!0}catch(i){return this.#l.fromError(i,`setBidcosInterface ${n} ${s}`),!1}}dispose(){this.#o()}}const zD="hmm.routingTables";class jD{#e=C(We({}));get entries(){return t(this.#e)}set entries(e){u(this.#e,e,!0)}#n=C(We({}));get loading(){return t(this.#n)}set loading(e){u(this.#n,e,!0)}#t=C(We({}));get readAt(){return t(this.#t)}set readAt(e){u(this.#t,e,!0)}#s=C("");get writing(){return t(this.#s)}set writing(e){u(this.#s,e,!0)}#a=C(We({}));get tables(){return t(this.#a)}set tables(e){u(this.#a,e,!0)}#r=C(We({}));get tableProgress(){return t(this.#r)}set tableProgress(e){u(this.#r,e,!0)}#i;#l;#o;#d={};#c={};#u;#f;#h;#m=new Set;constructor(e,n,s,a={}){this.#i=e,this.#l=n,this.#o=s,this.#u=a.storage,this.#f=a.profile??(()=>"default"),this.#h=a.pauseMs??2e3}routers(e){const n=this.entries[e]??{};return this.#o.devices(e).filter(s=>n[s.ADDRESS]?.capable===!0).map(s=>({address:s.ADDRESS,enabled:n[s.ADDRESS]?.enabled}))}isRouting(e,n){return this.entries[e]?.[n]?.enabled===!0}hasRead(e){return this.readAt[e]!==void 0}isLoading(e){return this.loading[e]===!0}async ensure(e){await this.#v(e,!1)}async load(e){await this.#v(e,!0)}async#v(e,n){const s=this.#c[e];if(s&&(await s,!n))return;const a=this.#_(e,n);this.#c[e]=a;try{await a}finally{this.#c[e]=void 0}}async#_(e,n){const s=this.#o.index(e);if(!s)return;const a=this.entries[e]??{},i=s.devices().filter(l=>n?a[l.ADDRESS]?.capable!==!1:a[l.ADDRESS]===void 0);if(i.length===0){this.readAt[e]===void 0&&(this.readAt={...this.readAt,[e]:Date.now()});return}this.loading={...this.loading,[e]:!0};let o;try{for(const l of i){const f=s.get(ya(l.ADDRESS));if(!f){this.#b(e,l.ADDRESS,{capable:!1,enabled:void 0});continue}if(!await this.#p(e,l,f)){this.#b(e,l.ADDRESS,{capable:!1,enabled:void 0});continue}let _;try{const g=await this.#i.request("paramset.get",e,f.ADDRESS,"MASTER");_=bx(g)}catch(g){o??=g}this.#b(e,l.ADDRESS,{capable:!0,enabled:_})}this.readAt={...this.readAt,[e]:Date.now()}}finally{this.loading={...this.loading,[e]:!1}}o!==void 0&&this.#l.fromError(o,`getParamset MASTER ${ka}`)}async#p(e,n,s){let a;try{a=Ga(e,s,"MASTER",n)}catch{a=`${e}|${s.ADDRESS}|MASTER`}const i=this.#d[a];if(i!==void 0)return i;try{const o=await this.#i.request("paramset.description",e,s.ADDRESS,"MASTER"),l=gx(o);return this.#d[a]=l,l}catch{return!1}}#b(e,n,s){this.entries={...this.entries,[e]:{...this.entries[e],[n]:s}}}async setRouting(e,n,s){this.writing=n;try{const i=(await this.#i.request("paramset.put",e,[ya(n)],"MASTER",{[ka]:s}))[0];if(i?.ok!==!0){const o=i?.faultString??i?.problems.map(l=>l.message).join("; ")??"";return this.#l.fromError(new Error(o===""?"no result":o),`putParamset ${ya(n)} MASTER ${ka}`),!1}return this.#b(e,n,{capable:!0,enabled:s}),!0}catch(a){return this.#l.fromError(a,`putParamset ${ya(n)} MASTER ${ka}`),!1}finally{this.writing=""}}#E(e){return`${zD}.${this.#f()}.${e}`}tablesOf(e){const n=this.tables[e];if(n!==void 0||this.#m.has(e))return n;this.#m.add(e);let s;try{const a=this.#u?.getItem(this.#E(e)),i=a?JSON.parse(a):void 0;typeof i=="object"&&i!==null&&typeof i.readAt=="number"&&typeof i.tables=="object"&&(s=i)}catch{s=void 0}if(s!==void 0){const a=s;queueMicrotask(()=>{this.tables[e]===void 0&&(this.tables={...this.tables,[e]:a})})}return s}isReadingTables(e){return this.tableProgress[e]!==void 0}tableTargets(e){const n=this.#o.index(e);return n?this.routers(e).filter(s=>s.enabled===!0).flatMap(s=>{const a=n.get(s.address),i=a?dm(a,n.get(ya(s.address))):void 0;return i===void 0?[]:[{router:s.address,address:i}]}):[]}async readTables(e){if(this.isReadingTables(e))return;const n=this.tableTargets(e);this.tableProgress={...this.tableProgress,[e]:{done:0,total:n.length}};const s={};let a=0;try{for(const[o,l]of n.entries()){o>0&&this.#h>0&&await new Promise(f=>setTimeout(f,this.#h));try{const f=await this.#i.request("paramset.get",e,l.address,bo);s[l.router]={readAt:Date.now(),address:l.address,entries:rm(f)}}catch(f){a+=1,s[l.router]={readAt:Date.now(),address:l.address,error:f instanceof Error?f.message:String(f)}}this.tableProgress={...this.tableProgress,[e]:{done:o+1,total:n.length}}}}finally{this.tableProgress={...this.tableProgress,[e]:void 0}}const i={readAt:Date.now(),tables:s};this.#m.add(e),this.tables={...this.tables,[e]:i};try{this.#u?.setItem(this.#E(e),JSON.stringify(i))}catch{}a>0&&this.#l.push("warn",`getParamset ${bo}: ${String(a)} / ${String(n.length)}`,e)}}class WD{#e=C(We([]));get messages(){return t(this.#e)}set messages(e){u(this.#e,e,!0)}#n=C(!1);get loading(){return t(this.#n)}set loading(e){u(this.#n,e,!0)}#t=C(We({}));get suppressed(){return t(this.#t)}set suppressed(e){u(this.#t,e,!0)}#s=C(We({}));get descriptions(){return t(this.#s)}set descriptions(e){u(this.#s,e,!0)}#a;#r;#i;#l=[];#o=!1;#d=[];#c=[];constructor(e,n){this.#a=e,this.#r=n,this.#i=e.on("serviceMessages.changed",s=>{this.apply(dl(s))})}apply(e){const n=this.#l,s=e.filter(a=>!n.includes(Fu(a)));if(this.messages=e,this.#l=e.map(a=>Fu(a)),!this.#o){this.#o=!0;return}for(const a of s)this.#r.push("warn",`${a.address} ${a.datapoint}`,a.interfaceName)}acknowledgeable(e){return this.of(e).filter(n=>vo(n.datapoint))}of(e){return this.messages.filter(n=>n.interfaceName===e)}countOf(e){return this.of(e).length}async load(e){this.loading=!0;try{this.#u(e,dl(await this.#a.request("serviceMessages.list",e)))}catch(n){this.#r.fromError(n,"serviceMessages.list")}finally{this.loading=!1}}async refresh(e){this.loading=!0;try{this.#u(e,dl(await this.#a.request("serviceMessages.refresh",e)))}catch(n){this.#r.fromError(n,"serviceMessages.refresh")}finally{this.loading=!1}}#u(e,n){if(e===void 0){this.apply(n);return}this.apply([...this.messages.filter(s=>s.interfaceName!==e),...n.filter(s=>s.interfaceName===e)])}async acknowledge(e,n,s){try{return await this.#a.request("serviceMessages.ack",e,n,s),!0}catch(a){return this.#r.fromError(a,`serviceMessages.ack ${n} ${s}`),!1}}async acknowledgeMany(e){let n=0;for(const s of e)vo(s.datapoint)&&await this.acknowledge(s.interfaceName,s.address,s.datapoint)&&(n+=1);return n>0&&await this.load(),n}suppressedOf(e,n){return this.suppressed[sa(e,n)]}isSuppressed(e){return this.suppressedOf(e.interfaceName,e.address)?.includes(e.datapoint)===!0}async loadSuppressed(e){const n=this.of(e).map(s=>s.address).filter((s,a,i)=>i.indexOf(s)===a).filter(s=>!this.#d.includes(sa(e,s)));await Promise.all(n.map(s=>this.#f(e,s)))}async suppress(e,n,s,a){try{await Lh(this.#a,e,n,s,a)}catch(i){return this.#r.fromError(i,`suppressServiceMessages ${n} ${s}`),!1}return await this.#f(e,n),await this.load(),!0}valueName(e){const n=this.descriptions[sa(e.interfaceName,e.address)];return Z_(n?.[e.datapoint],e.value)}async loadDescriptions(e){const n=this.of(e).filter(s=>typeof s.value=="number").map(s=>s.address).filter((s,a,i)=>i.indexOf(s)===a).filter(s=>!this.#c.includes(sa(e,s)));this.#c=[...this.#c,...n.map(s=>sa(e,s))],await Promise.all(n.map(async s=>{try{const a=await this.#a.request("paramset.description",e,s,"VALUES");this.descriptions={...this.descriptions,[sa(e,s)]:a}}catch{}}))}async#f(e,n){const s=sa(e,n);this.#d.includes(s)||(this.#d=[...this.#d,s]);const a=await Oh(this.#a,e,n);a!==void 0&&(this.suppressed={...this.suppressed,[s]:a})}dispose(){this.#i()}}function Fu(r){return`${r.interfaceName}|${r.address}|${r.datapoint}`}function sa(r,e){return`${r}|${e}`}function dl(r){return Array.isArray(r)?r:[]}class Gu{#e=C(!1);get embedded(){return t(this.#e)}set embedded(e){u(this.#e,e,!0)}#n=C(void 0);get theme(){return t(this.#n)}set theme(e){u(this.#n,e,!0)}#t;#s=e=>{this.#a(e)};constructor(e=typeof window>"u"?void 0:window){if(this.#t=e,!e||!KD(e))return;const n=Uu(/[?&]theme=([a-z]+)/u.exec(e.location.search)?.[1]);n!==void 0&&(this.embedded=!0,this.theme=n),e.addEventListener("message",this.#s)}#a(e){const n=this.#t;if(!n||e.origin!==n.location.origin||e.source!==n.parent)return;const s=e.data;s===null||typeof s!="object"||s.type!=="openccu-lite:theme"||(this.embedded=!0,this.theme=Uu(s.theme)??this.theme??"system")}dispose(){this.#t?.removeEventListener("message",this.#s)}}function Uu(r){return r==="system"||r==="light"||r==="dark"?r:void 0}function KD(r){try{return r.self!==r.top&&r.parent.location.origin===r.location.origin}catch{return!1}}class YD{#e=C(We({}));get memberships(){return t(this.#e)}set memberships(e){u(this.#e,e,!0)}#n=C(We({}));get loading(){return t(this.#n)}set loading(e){u(this.#n,e,!0)}#t=C(!1);get writing(){return t(this.#t)}set writing(e){u(this.#t,e,!0)}#s;#a;constructor(e,n){this.#s=e,this.#a=n}of(e){return this.memberships[e]??{}}isLoading(e){return this.loading[e]===!0}async sync(e,n){const s=this.memberships[e]??{},a=n.filter(l=>!(l in s)),i=Object.keys(s).filter(l=>!n.includes(l));if(a.length===0&&i.length===0)return;const o=Object.fromEntries(Object.entries(s).filter(([l])=>n.includes(l)));if(a.length===0){this.memberships={...this.memberships,[e]:o};return}await this.#r(e,a,o)}async refresh(e,n){n.length!==0&&await this.#r(e,n,this.memberships[e]??{})}async#r(e,n,s){this.loading={...this.loading,[e]:!0};const a={...s};try{for(const i of n)try{const o=await this.#s.request("paramset.get",e,i,"MASTER");a[i]=Hb(o)??null}catch(o){this.#a.fromError(o,`getParamset ${i} MASTER`)}this.memberships={...this.memberships,[e]:a}}finally{this.loading={...this.loading,[e]:!1}}}async setMembers(e,n,s,a){const i=ih(n),o=[];this.writing=!0;try{for(const[l,f]of[[s,!0],[a,!1]])for(const p of l)try{o.push(...await this.#s.request("paramset.put",e,[p],"MASTER",{[i]:f}))}catch(_){this.#a.fromError(_,`putParamset ${p} MASTER ${i}`)}}finally{this.writing=!1}return await this.refresh(e,[...s,...a]),o}forget(e){if(e===void 0){this.memberships={};return}this.memberships=Object.fromEntries(Object.entries(this.memberships).filter(([n])=>n!==e))}}class qD{#e=C(void 0);get state(){return t(this.#e)}set state(e){u(this.#e,e,!0)}#n=C(We({}));get enums(){return t(this.#n)}set enums(e){u(this.#n,e,!0)}#t=C(We({}));get objects(){return t(this.#t)}set objects(e){u(this.#t,e,!0)}#s=c(()=>w1(this.enums));get flat(){return t(this.#s)}set flat(e){u(this.#s,e)}#a;#r;#i=[];constructor(e,n){this.#a=e,this.#r=n,this.#i.push(e.on("meta.changed",s=>{this.state=s}),e.on("meta.enums.changed",s=>{this.enums=s}),e.on("meta.objects.changed",s=>{this.objects=s}))}get available(){return this.state!==void 0&&this.state.reachable}get writable(){return this.state!==void 0&&this.state.reachable&&this.state.writable}get flatOnly(){return this.state?.flat===!0}refOf(e,n){return u1(e,n)}view(e){return this.objects[e]}titleOf(e,n){return Nh(e,this.enums[e],n)}options(e){return jh(this.enums,e)}nameOf(e){for(const n of Object.values(this.flat)){const s=n.find(a=>a.path===e);if(s)return s.node.name}return e}matches(e,n){return Va(this.objects[e],n)}deviceMatches(e,n,s){return Wh(this.objects[e],n.map(a=>this.objects[a]),s)}members(e){return Ao(this.objects,e)}async load(){try{const e=await this.#a.request("meta.get");this.state=e.state,this.enums=e.enums,this.objects=e.objects}catch{this.state=void 0}}async refresh(){try{return this.state=await this.#a.request("meta.refresh"),!0}catch(e){return this.#r.fromError(e,"meta.refresh"),!1}}async assign(e,n,s){if(e.length===0)return!1;try{return await this.#a.request("meta.assign",[...e],n,s),!0}catch(a){return this.#r.fromError(a,"meta.assign"),!1}}async assignEach(e){const n=[];for(const s of e)try{await this.#a.request("meta.assign",[...s.refs],s.path,s.on),n.push({path:s.path,ok:!0})}catch(a){n.push({path:s.path,ok:!1,message:Di(a).message})}return n}async createEnum(e,n){try{return await this.#a.request("meta.enum.create",e,n),!0}catch(s){return this.#r.fromError(s,"meta.enum.create"),!1}}async renameEnum(e,n){try{return await this.#a.request("meta.enum.update",e,n),!0}catch(s){return this.#r.fromError(s,"meta.enum.update"),!1}}async deleteEnum(e,n){try{return await this.#a.request("meta.enum.delete",e,n),!0}catch(s){return this.#r.fromError(s,"meta.enum.delete"),!1}}async createNode(e,n,s){try{return await this.#a.request("meta.node.create",e,n,s)}catch(a){this.#r.fromError(a,"meta.node.create");return}}async renameNode(e,n){try{return await this.#a.request("meta.node.update",e,{name:n}),!0}catch(s){return this.#r.fromError(s,"meta.node.update"),!1}}async moveNode(e,n){try{return await this.#a.request("meta.node.update",e,{parent:n}),!0}catch(s){return this.#r.fromError(s,"meta.node.update"),!1}}async deleteNode(e,n){try{return await this.#a.request("meta.node.delete",e,n),!0}catch(s){return this.#r.fromError(s,"meta.node.delete"),!1}}dispose(){for(const e of this.#i)e();this.#i.length=0}}class $D{#e=C(We([]));get counters(){return t(this.#e)}set counters(e){u(this.#e,e,!0)}#n;#t;#s;constructor(e,n){this.#n=e,this.#t=n,this.#s=e.on("unreach.changed",s=>{this.counters=s})}countOf(e,n){const s=n.split(":")[0]??n;return this.counters.find(a=>a.interfaceName===e&&a.address===s)?.count??0}isUnreach(e,n){const s=n.split(":")[0]??n;return this.counters.find(a=>a.interfaceName===e&&a.address===s)?.unreach===!0}of(e){return this.counters.filter(n=>n.interfaceName===e)}async load(){try{this.counters=await this.#n.request("unreach.list")}catch(e){this.#t.fromError(e,"unreach.list")}}async reset(e,n){try{return await this.#n.request("unreach.reset",e,n),await this.load(),!0}catch(s){return this.#t.fromError(s,"unreach.reset"),!1}}dispose(){this.#s()}}class XD{#e=C(We([]));get entries(){return t(this.#e)}set entries(e){u(this.#e,e,!0)}#n=C(We([]));get pending(){return t(this.#n)}set pending(e){u(this.#n,e,!0)}#t=C(void 0);get progress(){return t(this.#t)}set progress(e){u(this.#t,e,!0)}#s=C(!1);get hideBackground(){return t(this.#s)}set hideBackground(e){u(this.#s,e,!0)}#a;#r;#i;#l;#o=[];#d=1;constructor(e,n,s={}){this.#a=e,this.#r=n,this.#i=s.max??200,this.#l=s.now??(()=>Date.now()),this.#o.push(e.on("rpcLog.appended",a=>{this.append(a)}),e.on("write.progress",a=>{this.progress=a.done>=a.total?void 0:a}))}get busy(){return this.pending.length>0||this.progress!==void 0}get newestFirst(){return[...this.entries].reverse()}get visible(){const e=this.newestFirst;return this.hideBackground?e.filter(n=>n.origin!=="background"):e}append(e){const n=[...this.entries,e];this.entries=n.length>this.#i?n.slice(n.length-this.#i):n}beginPending(e,n,s){const a=this.#d;return this.#d+=1,this.pending=[...this.pending,{id:a,interfaceName:e,method:n,params:s,startedAt:this.#l()}],a}endPending(e){this.pending=this.pending.filter(n=>n.id!==e)}async load(e){try{this.entries=await this.#a.request("rpcLog.list",e)}catch(n){this.#r.fromError(n,"rpcLog.list")}}async cancel(e){try{return await this.#a.request("write.cancel",e)}catch(n){return this.#r.fromError(n,"write.cancel"),0}}async clear(){this.entries=[];try{await this.#a.request("rpcLog.clear")}catch(e){this.#r.fromError(e,"rpcLog.clear")}}dispose(){for(const e of this.#o)e();this.#o.length=0}}class QD{transport;i18n;notices;app;interfaces;devices;names;links;serviceMessages;unreach;events;rpcLog;host;meta;taxonomy;groups;smokeGroups;paramsets;radio;routers;console;changeSet;shell;#e=!1;constructor(e,n={}){this.transport=e,this.notices=new dg(e,{hintFor:s=>J1(this.host.info?.platform,s)?this.i18n.t(Fh):void 0}),this.app=new yD(e,this.notices,n),this.i18n=new O1(this.app.language),this.interfaces=new OD(e,this.notices),this.devices=new xD(e,this.notices),this.names=new UD(e,this.notices),this.links=new GD(e,this.notices),this.serviceMessages=new WD(e,this.notices),this.unreach=new $D(e,this.notices),this.events=new DD(e,this.notices,{...n.eventCapacity===void 0?{}:{capacity:n.eventCapacity}}),this.rpcLog=new XD(e,this.notices),this.meta=new FD(e,{...n.dataSource===void 0?{}:{source:n.dataSource}}),this.taxonomy=new qD(e,this.notices),this.groups=new ID(e,this.notices),this.smokeGroups=new YD(e,this.notices),this.paramsets=new HD(e,this.notices),this.radio=new VD(e,this.notices),this.routers=new jD(e,this.notices,this.devices,{storage:this.app.storage,profile:()=>um(this.app.config?.connection.host??"")}),this.console=new wD(e,this.notices),this.changeSet=new SD(e,this.notices,this.rpcLog),this.app.onInterfaceRouted(s=>{this.#e&&this.#n(rh(s))}),this.shell="shellWindow"in n?new Gu(n.shellWindow):new Gu,this.host=new MD({...n.hostBridge===void 0?{}:{bridge:n.hostBridge},...n.hostScope===void 0?{}:{scope:n.hostScope}})}get tabs(){return this.app.storeSelected?vc(this.taxonomy.state):db(this.interfaces.typeOf(this.app.selectedInterface),{heatingGroups:this.groups.offered})}knownName=e=>this.names.name(e)??this.groups.fallbackName(e);nameOf=e=>this.knownName(e)??e;async start(){await this.app.load(),this.i18n.language=this.app.language,this.meta.setLanguage(this.app.language).catch(()=>{}),this.host.load().catch(()=>{}),await Promise.all([this.interfaces.load(),this.names.load(),this.rpcLog.load(),this.taxonomy.load()]),await this.groups.follow(this.taxonomy.state);const e=this.app.storeSelected&&vc(this.taxonomy.state).length===0?this.app.configuredInterfaces[0]??"":this.app.selectedInterface;await this.selectInterface(e),this.#e=!0}async selectInterface(e){const n=this.app.storeSelected;this.app.setInterface(e),await this.#n(n)}async#n(e){const n=this.app.selectedInterface;if(this.app.storeSelected){(!vi(this.app.tab)||!this.tabs.includes(this.app.tab))&&this.app.setTab(this.tabs[0]??"metadata");return}(e||vi(this.app.tab))&&this.app.setTab(this.app.interfaceTab),this.tabs.includes(this.app.tab)||this.app.setTab("devices"),n!==""&&await Promise.all([this.devices.ensure(n),this.links.ensure(n),this.serviceMessages.load(),this.events.load()])}async refresh(){const e=this.app.selectedInterface;e===""||this.app.storeSelected||await Promise.all([this.devices.load(e,{refresh:!0}),this.links.load(e),this.serviceMessages.load(),this.interfaces.load()])}dispose(){this.shell.dispose(),this.radio.dispose(),this.host.dispose(),this.rpcLog.dispose(),this.events.dispose(),this.serviceMessages.dispose(),this.groups.dispose(),this.taxonomy.dispose(),this.names.dispose(),this.devices.dispose(),this.interfaces.dispose(),this.app.dispose(),this.notices.dispose()}}function ZD(r,e={}){return new QD(r,e)}const fm=["BidCos-RF","HmIP-RF"],hm=[{ADDRESS:"BidCoS-RF",TYPE:"HM-RCV-50",PARENT:"",CHILDREN:["BidCoS-RF:0","BidCoS-RF:1","BidCoS-RF:2"],PARAMSETS:["MASTER"],FIRMWARE:"2.31.25",VERSION:1,FLAGS:9,RX_MODE:1,INTERFACE:"",RF_ADDRESS:1234567},{ADDRESS:"BidCoS-RF:0",TYPE:"MAINTENANCE",PARENT:"BidCoS-RF",PARENT_TYPE:"HM-RCV-50",PARAMSETS:["MASTER","VALUES"],INDEX:0,DIRECTION:0,FLAGS:3,VERSION:1},{ADDRESS:"BidCoS-RF:1",TYPE:"VIRTUAL_KEY",PARENT:"BidCoS-RF",PARENT_TYPE:"HM-RCV-50",PARAMSETS:["MASTER","LINK","VALUES"],INDEX:1,DIRECTION:1,LINK_SOURCE_ROLES:"SWITCH KEYMATIC WINMATIC",LINK_TARGET_ROLES:"",FLAGS:1,VERSION:1},{ADDRESS:"BidCoS-RF:2",TYPE:"VIRTUAL_KEY",PARENT:"BidCoS-RF",PARENT_TYPE:"HM-RCV-50",PARAMSETS:["MASTER","LINK","VALUES"],INDEX:2,DIRECTION:1,LINK_SOURCE_ROLES:"SWITCH KEYMATIC WINMATIC",LINK_TARGET_ROLES:"",FLAGS:1,VERSION:1},{ADDRESS:"MEQ0123456",TYPE:"HM-LC-Sw1-Pl-CT-R1",PARENT:"",CHILDREN:["MEQ0123456:0","MEQ0123456:1"],PARAMSETS:["MASTER"],FIRMWARE:"2.5",AVAILABLE_FIRMWARE:"2.5",VERSION:8,FLAGS:1,RX_MODE:1,INTERFACE:"BidCoS-RF",ROAMING:0,RF_ADDRESS:4132819,UPDATABLE:1},{ADDRESS:"MEQ0123456:0",TYPE:"MAINTENANCE",PARENT:"MEQ0123456",PARENT_TYPE:"HM-LC-Sw1-Pl-CT-R1",PARAMSETS:["MASTER","VALUES"],INDEX:0,DIRECTION:0,FLAGS:3,VERSION:8},{ADDRESS:"MEQ0123456:1",TYPE:"SWITCH",PARENT:"MEQ0123456",PARENT_TYPE:"HM-LC-Sw1-Pl-CT-R1",PARAMSETS:["MASTER","LINK","VALUES"],INDEX:1,DIRECTION:2,LINK_SOURCE_ROLES:"",LINK_TARGET_ROLES:"SWITCH",FLAGS:1,VERSION:8},{ADDRESS:"NEQ1000001",TYPE:"HM-Sec-SD-2",PARENT:"",CHILDREN:["NEQ1000001:0","NEQ1000001:1"],PARAMSETS:["MASTER"],FIRMWARE:"1.4",VERSION:1,FLAGS:1,RX_MODE:12,RF_ADDRESS:5000001},{ADDRESS:"NEQ1000001:0",TYPE:"MAINTENANCE",PARENT:"NEQ1000001",PARENT_TYPE:"HM-Sec-SD-2",PARAMSETS:["MASTER","VALUES"],INDEX:0,DIRECTION:0,FLAGS:3,VERSION:1},{ADDRESS:"NEQ1000001:1",TYPE:"SMOKE_DETECTOR",PARENT:"NEQ1000001",PARENT_TYPE:"HM-Sec-SD-2",PARAMSETS:["MASTER","VALUES"],INDEX:1,DIRECTION:1,FLAGS:1,VERSION:1,TEAM:"*NEQ1000001:1",TEAM_TAG:"smoke_detector"},{ADDRESS:"NEQ1000002",TYPE:"HM-Sec-SD-2",PARENT:"",CHILDREN:["NEQ1000002:0","NEQ1000002:1"],PARAMSETS:["MASTER"],FIRMWARE:"1.4",VERSION:1,FLAGS:1,RX_MODE:12,RF_ADDRESS:5000002},{ADDRESS:"NEQ1000002:0",TYPE:"MAINTENANCE",PARENT:"NEQ1000002",PARENT_TYPE:"HM-Sec-SD-2",PARAMSETS:["MASTER","VALUES"],INDEX:0,DIRECTION:0,FLAGS:3,VERSION:1},{ADDRESS:"NEQ1000002:1",TYPE:"SMOKE_DETECTOR",PARENT:"NEQ1000002",PARENT_TYPE:"HM-Sec-SD-2",PARAMSETS:["MASTER","VALUES"],INDEX:1,DIRECTION:1,FLAGS:1,VERSION:1,TEAM:"*NEQ1000001:1",TEAM_TAG:"smoke_detector"},{ADDRESS:"*NEQ1000001",TYPE:"HM-Sec-SD-2-Team",PARENT:"",CHILDREN:["*NEQ1000001:0","*NEQ1000001:1"],PARAMSETS:["MASTER"],FIRMWARE:"1.0",VERSION:3,FLAGS:9,RX_MODE:0},{ADDRESS:"*NEQ1000001:0",TYPE:"MAINTENANCE",PARENT:"*NEQ1000001",PARENT_TYPE:"HM-Sec-SD-2-Team",PARAMSETS:["MASTER","VALUES"],INDEX:0,DIRECTION:0,FLAGS:3,VERSION:3},{ADDRESS:"*NEQ1000001:1",TYPE:"SMOKE_DETECTOR_TEAM_V2",PARENT:"*NEQ1000001",PARENT_TYPE:"HM-Sec-SD-2-Team",PARAMSETS:["MASTER","VALUES"],INDEX:1,DIRECTION:0,FLAGS:1,VERSION:3,TEAM_TAG:"smoke_detector",TEAM_CHANNELS:["NEQ1000001:1","NEQ1000002:1"]},{ADDRESS:"JEQ0234567",TYPE:"HM-PBI-4-FM",PARENT:"",CHILDREN:["JEQ0234567:0","JEQ0234567:1","JEQ0234567:2"],PARAMSETS:["MASTER"],FIRMWARE:"1.4",VERSION:15,FLAGS:1,RX_MODE:12,INTERFACE:"BidCoS-RF",ROAMING:0,RF_ADDRESS:4298112},{ADDRESS:"JEQ0234567:0",TYPE:"MAINTENANCE",PARENT:"JEQ0234567",PARENT_TYPE:"HM-PBI-4-FM",PARAMSETS:["MASTER","VALUES"],INDEX:0,DIRECTION:0,FLAGS:3,VERSION:15},{ADDRESS:"JEQ0234567:1",TYPE:"KEY",PARENT:"JEQ0234567",PARENT_TYPE:"HM-PBI-4-FM",PARAMSETS:["MASTER","LINK","VALUES"],INDEX:1,DIRECTION:1,LINK_SOURCE_ROLES:"SWITCH KEYMATIC WINMATIC",LINK_TARGET_ROLES:"",FLAGS:1,VERSION:15},{ADDRESS:"JEQ0234567:2",TYPE:"KEY",PARENT:"JEQ0234567",PARENT_TYPE:"HM-PBI-4-FM",PARAMSETS:["MASTER","LINK","VALUES"],INDEX:2,DIRECTION:1,LINK_SOURCE_ROLES:"SWITCH KEYMATIC WINMATIC",LINK_TARGET_ROLES:"",FLAGS:1,VERSION:15},{ADDRESS:"KEQ0345678",TYPE:"HM-CC-RT-DN",PARENT:"",CHILDREN:["KEQ0345678:0","KEQ0345678:4"],PARAMSETS:["MASTER"],FIRMWARE:"1.10",AVAILABLE_FIRMWARE:"1.11",VERSION:20,FLAGS:1,RX_MODE:12,INTERFACE:"BidCoS-RF",ROAMING:0,RF_ADDRESS:5012733,UPDATABLE:1},{ADDRESS:"KEQ0345678:0",TYPE:"MAINTENANCE",PARENT:"KEQ0345678",PARENT_TYPE:"HM-CC-RT-DN",PARAMSETS:["MASTER","VALUES"],INDEX:0,DIRECTION:0,FLAGS:3,VERSION:20},{ADDRESS:"KEQ0345678:4",TYPE:"CLIMATECONTROL_RT_TRANSCEIVER",PARENT:"KEQ0345678",PARENT_TYPE:"HM-CC-RT-DN",PARAMSETS:["MASTER","LINK","VALUES"],INDEX:4,DIRECTION:1,LINK_SOURCE_ROLES:"THERMALCONTROL_TRANSMIT",LINK_TARGET_ROLES:"",FLAGS:1,VERSION:20},{ADDRESS:"LEQ0456789",TYPE:"HM-Sec-SC-2",PARENT:"",CHILDREN:["LEQ0456789:0","LEQ0456789:1"],PARAMSETS:["MASTER"],FIRMWARE:"2.2",VERSION:16,FLAGS:1,RX_MODE:12,INTERFACE:"BidCoS-RF",ROAMING:0,RF_ADDRESS:5298004},{ADDRESS:"LEQ0456789:0",TYPE:"MAINTENANCE",PARENT:"LEQ0456789",PARENT_TYPE:"HM-Sec-SC-2",PARAMSETS:["MASTER","VALUES"],INDEX:0,DIRECTION:0,FLAGS:3,VERSION:16},{ADDRESS:"LEQ0456789:1",TYPE:"SHUTTER_CONTACT",PARENT:"LEQ0456789",PARENT_TYPE:"HM-Sec-SC-2",PARAMSETS:["MASTER","LINK","VALUES"],INDEX:1,DIRECTION:1,LINK_SOURCE_ROLES:"WINDOW_SWITCH_RECEIVER",LINK_TARGET_ROLES:"",FLAGS:1,VERSION:16},{ADDRESS:"GEQ0567890",TYPE:"HM-LC-Dim1T-FM",PARENT:"",CHILDREN:["GEQ0567890:0","GEQ0567890:1"],PARAMSETS:["MASTER"],FIRMWARE:"2.2",VERSION:34,FLAGS:1,RX_MODE:1,INTERFACE:"BidCoS-RF",ROAMING:0,RF_ADDRESS:3912004},{ADDRESS:"GEQ0567890:0",TYPE:"MAINTENANCE",PARENT:"GEQ0567890",PARENT_TYPE:"HM-LC-Dim1T-FM",PARAMSETS:["MASTER","VALUES"],INDEX:0,DIRECTION:0,FLAGS:3,VERSION:34},{ADDRESS:"GEQ0567890:1",TYPE:"DIMMER",PARENT:"GEQ0567890",PARENT_TYPE:"HM-LC-Dim1T-FM",PARAMSETS:["MASTER","LINK","VALUES"],INDEX:1,DIRECTION:2,LINK_SOURCE_ROLES:"",LINK_TARGET_ROLES:"SWITCH",FLAGS:1,VERSION:34}],JD=[{ADDRESS:"HmIP-RCV-50",TYPE:"HmIP-RCV-50",PARENT:"",CHILDREN:["HmIP-RCV-50:0","HmIP-RCV-50:1"],PARAMSETS:["MASTER"],FIRMWARE:"1.0.0",VERSION:1,FLAGS:9,RX_MODE:1,SUBTYPE:""},{ADDRESS:"HmIP-RCV-50:0",TYPE:"MAINTENANCE",PARENT:"HmIP-RCV-50",PARENT_TYPE:"HmIP-RCV-50",PARAMSETS:["MASTER","VALUES"],INDEX:0,DIRECTION:0,FLAGS:3,VERSION:1},{ADDRESS:"HmIP-RCV-50:1",TYPE:"VIRTUAL_KEY",PARENT:"HmIP-RCV-50",PARENT_TYPE:"HmIP-RCV-50",PARAMSETS:["MASTER","LINK","VALUES"],INDEX:1,DIRECTION:1,LINK_SOURCE_ROLES:"SWITCH",FLAGS:1,VERSION:1},{ADDRESS:"000A1B2C3D4E5F",TYPE:"HmIP-BSM",SUBTYPE:"BSM",PARENT:"",CHILDREN:["000A1B2C3D4E5F:0","000A1B2C3D4E5F:1","000A1B2C3D4E5F:4"],PARAMSETS:["MASTER"],FIRMWARE:"2.10.4",AVAILABLE_FIRMWARE:"2.12.0",VERSION:40,FLAGS:1,RX_MODE:1,INTERFACE:"HmIP-RF",UPDATABLE:1},{ADDRESS:"000A1B2C3D4E5F:0",TYPE:"MAINTENANCE",PARENT:"000A1B2C3D4E5F",PARENT_TYPE:"HmIP-BSM",PARAMSETS:["MASTER","VALUES","ROUTING_TABLE"],INDEX:0,DIRECTION:0,FLAGS:3,VERSION:40},{ADDRESS:"000A1B2C3D4E5F:1",TYPE:"KEY_TRANSCEIVER",PARENT:"000A1B2C3D4E5F",PARENT_TYPE:"HmIP-BSM",PARAMSETS:["MASTER","LINK","VALUES"],INDEX:1,DIRECTION:1,LINK_SOURCE_ROLES:"SWITCH",FLAGS:1,VERSION:40},{ADDRESS:"000A1B2C3D4E5F:4",TYPE:"SWITCH_VIRTUAL_RECEIVER",PARENT:"000A1B2C3D4E5F",PARENT_TYPE:"HmIP-BSM",PARAMSETS:["MASTER","LINK","VALUES"],INDEX:4,DIRECTION:2,LINK_TARGET_ROLES:"SWITCH",FLAGS:1,VERSION:40},{ADDRESS:"0011D3C9A1B2C3",TYPE:"HmIP-SWDO",SUBTYPE:"SWDO",PARENT:"",CHILDREN:["0011D3C9A1B2C3:0","0011D3C9A1B2C3:1"],PARAMSETS:["MASTER"],FIRMWARE:"1.4.6",VERSION:12,FLAGS:1,RX_MODE:8,INTERFACE:"HmIP-RF"},{ADDRESS:"0011D3C9A1B2C3:0",TYPE:"MAINTENANCE",PARENT:"0011D3C9A1B2C3",PARENT_TYPE:"HmIP-SWDO",PARAMSETS:["MASTER","VALUES"],INDEX:0,DIRECTION:0,FLAGS:3,VERSION:12},{ADDRESS:"0011D3C9A1B2C3:1",TYPE:"SHUTTER_CONTACT",PARENT:"0011D3C9A1B2C3",PARENT_TYPE:"HmIP-SWDO",PARAMSETS:["MASTER","LINK","VALUES"],INDEX:1,DIRECTION:1,LINK_SOURCE_ROLES:"WINDOW_SWITCH_RECEIVER",FLAGS:1,VERSION:12},{ADDRESS:"3014F711A0001F",TYPE:"HmIP-eTRV-2",SUBTYPE:"eTRV",PARENT:"",CHILDREN:["3014F711A0001F:0","3014F711A0001F:1"],PARAMSETS:["MASTER"],FIRMWARE:"2.4.4",VERSION:34,FLAGS:1,RX_MODE:8,INTERFACE:"HmIP-RF"},{ADDRESS:"3014F711A0001F:0",TYPE:"MAINTENANCE",PARENT:"3014F711A0001F",PARENT_TYPE:"HmIP-eTRV-2",PARAMSETS:["MASTER","VALUES"],INDEX:0,DIRECTION:0,FLAGS:3,VERSION:34},{ADDRESS:"3014F711A0001F:1",TYPE:"HEATING_CLIMATECONTROL_TRANSCEIVER",PARENT:"3014F711A0001F",PARENT_TYPE:"HmIP-eTRV-2",PARAMSETS:["MASTER","LINK","VALUES"],INDEX:1,DIRECTION:2,LINK_TARGET_ROLES:"THERMALCONTROL_TRANSMIT",FLAGS:1,VERSION:34},{ADDRESS:"0001D8A9B7C6D5",TYPE:"HmIP-WRC2",SUBTYPE:"WRC2",PARENT:"",CHILDREN:["0001D8A9B7C6D5:0","0001D8A9B7C6D5:1","0001D8A9B7C6D5:2"],PARAMSETS:["MASTER"],FIRMWARE:"1.2.6",VERSION:10,FLAGS:1,RX_MODE:8,INTERFACE:"HmIP-RF"},{ADDRESS:"0001D8A9B7C6D5:0",TYPE:"MAINTENANCE",PARENT:"0001D8A9B7C6D5",PARENT_TYPE:"HmIP-WRC2",PARAMSETS:["MASTER","VALUES"],INDEX:0,DIRECTION:0,FLAGS:3,VERSION:10},{ADDRESS:"0001D8A9B7C6D5:1",TYPE:"KEY_TRANSCEIVER",PARENT:"0001D8A9B7C6D5",PARENT_TYPE:"HmIP-WRC2",PARAMSETS:["MASTER","LINK","VALUES"],INDEX:1,DIRECTION:1,LINK_SOURCE_ROLES:"SWITCH",FLAGS:1,VERSION:10},{ADDRESS:"0001D8A9B7C6D5:2",TYPE:"KEY_TRANSCEIVER",PARENT:"0001D8A9B7C6D5",PARENT_TYPE:"HmIP-WRC2",PARAMSETS:["MASTER","LINK","VALUES"],INDEX:2,DIRECTION:1,LINK_SOURCE_ROLES:"SWITCH",FLAGS:1,VERSION:10},{ADDRESS:"0001D709A1B2C3",TYPE:"HmIP-PSM-2",SUBTYPE:"PSM",PARENT:"",CHILDREN:["0001D709A1B2C3:0","0001D709A1B2C3:3"],PARAMSETS:["MASTER"],FIRMWARE:"1.0.22",VERSION:9,FLAGS:1,RX_MODE:1,INTERFACE:"HmIP-RF"},{ADDRESS:"0001D709A1B2C3:0",TYPE:"MAINTENANCE",PARENT:"0001D709A1B2C3",PARENT_TYPE:"HmIP-PSM-2",PARAMSETS:["MASTER","VALUES"],INDEX:0,DIRECTION:0,FLAGS:3,VERSION:9},{ADDRESS:"0001D709A1B2C3:3",TYPE:"SWITCH_VIRTUAL_RECEIVER",PARENT:"0001D709A1B2C3",PARENT_TYPE:"HmIP-PSM-2",PARAMSETS:["MASTER","LINK","VALUES"],INDEX:3,DIRECTION:2,LINK_TARGET_ROLES:"SWITCH",FLAGS:1,VERSION:9},...["0001D3C9000001","0001D3C9000002","0001D3C9000003"].flatMap(r=>[{ADDRESS:r,TYPE:"HmIP-SWSD",PARENT:"",CHILDREN:[`${r}:0`,`${r}:1`],PARAMSETS:["MASTER"],FIRMWARE:"1.0.12",VERSION:1,FLAGS:1,RX_MODE:12,INTERFACE:"HmIP-RF"},{ADDRESS:`${r}:0`,TYPE:"MAINTENANCE",PARENT:r,PARENT_TYPE:"HmIP-SWSD",PARAMSETS:["MASTER","VALUES"],INDEX:0,DIRECTION:0,FLAGS:3,VERSION:1},{ADDRESS:`${r}:1`,TYPE:"SMOKE_DETECTOR",PARENT:r,PARENT_TYPE:"HmIP-SWSD",PARAMSETS:["MASTER","VALUES"],INDEX:1,DIRECTION:1,FLAGS:1,VERSION:1}])],mm={"BidCos-RF":hm,"HmIP-RF":JD},ps={"BidCoS-RF":"CCU",MEQ0123456:"Licht Küche","MEQ0123456:1":"Licht Küche:1",JEQ0234567:"Taster Flur","JEQ0234567:1":"Taster Flur:1","JEQ0234567:2":"Taster Flur:2",KEQ0345678:"Thermostat Bad","KEQ0345678:4":"Thermostat Bad:4",LEQ0456789:"Fenster Schlafzimmer","LEQ0456789:1":"Fenster Schlafzimmer:1",GEQ0567890:"Dimmer Wohnzimmer","GEQ0567890:1":"Dimmer Wohnzimmer:1","000A1B2C3D4E5F":"Schaltaktor Terrasse","000A1B2C3D4E5F:4":"Schaltaktor Terrasse:4","0011D3C9A1B2C3":"Fenster Arbeitszimmer","3014F711A0001F":"Heizung Arbeitszimmer","0001D8A9B7C6D5":"Wandtaster Diele","0001D709A1B2C3":"Steckdose Wohnzimmer",NEQ1000001:"Rauchmelder Flur","NEQ1000001:1":"Rauchmelder Flur:1",NEQ1000002:"Rauchmelder Küche","NEQ1000002:1":"Rauchmelder Küche:1","*NEQ1000001":"Rauchmelder Gruppe","0001D3C9000001":"Rauchmelder Schlafzimmer","0001D3C9000001:1":"Rauchmelder Schlafzimmer:1","0001D3C9000002":"Rauchmelder Kinderzimmer","0001D3C9000002:1":"Rauchmelder Kinderzimmer:1","0001D3C9000003":"Rauchmelder Keller","0001D3C9000003:1":"Rauchmelder Keller:1"},cl={"BidCos-RF":[{SENDER:"JEQ0234567:1",RECEIVER:"MEQ0123456:1",NAME:"Taster Flur - Licht Küche",DESCRIPTION:"Standardverknüpfung Taster - Schaltaktor",FLAGS:0},{SENDER:"JEQ0234567:2",RECEIVER:"GEQ0567890:1",NAME:"Taster Flur - Dimmer Wohnzimmer",DESCRIPTION:"Dimmer - ein/aus & heller/dunkler",FLAGS:0}],"HmIP-RF":[{SENDER:"0001D8A9B7C6D5:1",RECEIVER:"000A1B2C3D4E5F:4",NAME:"Wandtaster Diele - Schaltaktor Terrasse",DESCRIPTION:"",FLAGS:0}]},Hi=[{interfaceName:"BidCos-RF",address:"LEQ0456789:0",datapoint:"LOWBAT",value:!0,since:Date.parse("2026-09-04T18:22:00Z")},{interfaceName:"BidCos-RF",address:"KEQ0345678:0",datapoint:"STICKY_UNREACH",value:!0,since:Date.parse("2026-09-05T06:14:00Z")}],eI={"BidCos-RF":{MEQ0123456:{"BidCoS-RF":[-52,-56],JEQ0234567:[-70,65536]},JEQ0234567:{"BidCoS-RF":[-60,-36]},KEQ0345678:{"BidCoS-RF":[-88,-91]},LEQ0456789:{"BidCoS-RF":[-112,65536]},GEQ0567890:{"BidCoS-RF":[-47,-45]}},"HmIP-RF":{"000A1B2C3D4E5F":{"3014F711A0000418971558":[-55,-61]},"0001D3C99C1234":{"3014F711A0000418971558":[-73,65536]},"0001D709A1B2C3":{"3014F711A0000418971558":[-64,-66]}}},tI=[{ADDRESS:"3014F711A0000418971558",TYPE:"HMIP_CCU2",DESCRIPTION:"HMIP_CCU2 3014F711A0000418971558",CONNECTED:!0,DEFAULT:!0,DUTY_CYCLE:1,FIRMWARE_VERSION:"4.4.18"}],nI=[{ADDRESS:"BidCoS-RF",TYPE:"CCU2",DESCRIPTION:"CCU2-Coprocessor",CONNECTED:!0,DEFAULT:!0,DUTY_CYCLE:1,FIRMWARE_VERSION:"2.8.6"}],vm=[{name:"BidCos-RF",type:"BidCos-RF",protocol:"xmlrpc",host:"demo.local",port:2001,connected:!0,lastEvent:Date.parse("2026-09-05T09:59:30Z")},{name:"HmIP-RF",type:"HmIP-RF",protocol:"xmlrpc",host:"demo.local",port:2010,connected:!0,lastEvent:Date.parse("2026-09-05T09:59:12Z")},{name:"BidCos-Wired",type:"BidCos-Wired",protocol:"xmlrpc",host:"demo.local",port:2e3,connected:!1,absent:!0,error:"connect ECONNREFUSED demo.local:2000"},{name:"CUxD",type:"CUxD",protocol:"binrpc",host:"demo.local",port:8701,connected:!0,subscribing:!0,lastEvent:Date.parse("2026-09-05T09:59:58Z")},{name:"VirtualDevices",type:"VirtualDevices",protocol:"xmlrpc",host:"demo.local",port:9292,connected:!1,unreachable:!0,error:"VirtualDevices: init timed out after 10000 ms"}],Bu=[{interfaceName:"BidCos-RF",address:"MEQ0123456",count:7,lastAt:Date.parse("2026-09-05T08:12:00Z")},{interfaceName:"BidCos-RF",address:"JEQ0234567",count:2,lastAt:Date.parse("2026-09-05T09:58:00Z"),unreach:!0}],rI=hm.filter(r=>(r.TEAM_CHANNELS??[]).length>0),sI={format:1,revision:7,objects:{"BidCos-RF.MEQ0123456:1":{name:ps["MEQ0123456:1"]??"",enums:["room/eg/kueche","function/licht"],meta:{}},"BidCos-RF.JEQ0234567:1":{name:ps["JEQ0234567:1"]??"",enums:["room/eg/flur"],meta:{}},"BidCos-RF.KEQ0345678:4":{name:ps["KEQ0345678:4"]??"",enums:["room/og/bad","function/heizung"],meta:{}},"BidCos-RF.LEQ0456789:1":{name:ps["LEQ0456789:1"]??"",enums:["room/og/schlafzimmer","function/sicherheit"],meta:{}},"BidCos-RF.GEQ0567890:1":{name:ps["GEQ0567890:1"]??"",enums:["room/eg/wohnzimmer","function/licht"],meta:{}},"HmIP-RF.000A1B2C3D4E5F:4":{name:ps["000A1B2C3D4E5F:4"]??"",enums:["room/aussen","function/licht"],meta:{}}},enums:{room:{name:{de:"Räume",en:"Rooms"},tree:[{id:"eg",name:"Erdgeschoss",children:[{id:"kueche",name:"Küche"},{id:"wohnzimmer",name:"Wohnzimmer"},{id:"flur",name:"Flur"}]},{id:"og",name:"Obergeschoss",children:[{id:"bad",name:"Bad"},{id:"schlafzimmer",name:"Schlafzimmer"}]},{id:"aussen",name:"Außen"}]},function:{name:{de:"Gewerke",en:"Functions"},tree:[{id:"licht",name:"Licht"},{id:"heizung",name:"Heizung"},{id:"sicherheit",name:"Sicherheit"}]},floor:{name:{de:"Etagen",en:"Floors"},tree:[]}}},aI={enabled:!0,reachable:!0,names:Object.keys(ps).length},td={host:"demo.local",interfaces:vm.map(r=>r.name),autoDetect:!0,extraInterfaces:[],tls:!1,rega:!0,callback:{ip:"192.168.1.20",xmlrpcPort:0,binrpcPort:0},language:"de",writePaceMs:250,rpcLogFolder:""},ul={version:"3.0.0-dev.0",connection:td,localAddresses:["192.168.1.20","10.0.0.5"],discovered:[{address:"demo.local",name:"Demo-CCU",serial:"KEQ0000001",firmware:"3.89.8",interfaces:[...fm]}]};function iI(r=td.host){const e=r===td.host;return{host:r,...r===""?{}:{hostAddress:e?"192.168.1.2":"172.16.0.2"},auto:{address:"192.168.1.20",reason:r===""?"first":e?"subnet":"route"},addresses:[{address:"192.168.1.20",inSubnet:e},{address:"10.0.0.5",inSubnet:!1},{address:"127.0.0.1",inSubnet:!1}]}}const Hu=[{timestamp:Date.parse("2026-09-05T09:58:41Z"),interfaceName:"BidCos-RF",method:"event",address:"JEQ0234567:1",datapoint:"PRESS_SHORT",value:!0},{timestamp:Date.parse("2026-09-05T09:58:41Z"),interfaceName:"BidCos-RF",method:"event",address:"MEQ0123456:1",datapoint:"STATE",value:!0},{timestamp:Date.parse("2026-09-05T09:59:12Z"),interfaceName:"HmIP-RF",method:"event",address:"0011D3C9A1B2C3:1",datapoint:"STATE",value:1},{timestamp:Date.parse("2026-09-05T09:59:30Z"),interfaceName:"BidCos-RF",method:"event",address:"KEQ0345678:4",datapoint:"ACTUAL_TEMPERATURE",value:21.5}],oI=[{id:1,timestamp:Date.parse("2026-09-05T09:57:02Z"),interfaceName:"BidCos-RF",method:"putParamset",params:["MEQ0123456:1","MASTER",{LOGGING:1}],ok:!0,result:"",durationMs:184,origin:"ui"},{id:2,timestamp:Date.parse("2026-09-05T09:57:44Z"),interfaceName:"HmIP-RF",method:"putParamset",params:["000A1B2C3D4E5F:4","MASTER",{PROFILE_MODE:3}],ok:!1,error:"Unknown parameter PROFILE_MODE",durationMs:902,origin:"ui"},{id:3,timestamp:Date.parse("2026-09-05T09:58:00Z"),interfaceName:"HmIP-RF",method:"ping",params:["hmm"],ok:!0,result:"",durationMs:8,origin:"background"},{id:4,timestamp:Date.parse("2026-09-05T09:58:30Z"),interfaceName:"BidCos-RF",method:"getVersion",params:[],ok:!0,result:"2.3.4",durationMs:15,origin:"console"}],lI=[{name:"listDevices",help:"Returns the device descriptions of the interface.",params:[]},{name:"getParamset",help:"Reads a paramset of a device or channel.",params:[{name:"address",type:"String"},{name:"paramsetKey",type:"String",values:["MASTER","VALUES"]}]},{name:"setValue",help:"Writes one value of the VALUES paramset.",params:[{name:"address",type:"String"},{name:"valueKey",type:"String"},{name:"value",type:"Any"}]},{name:"rssiInfo",help:"Returns the RSSI matrix.",params:[]},{name:"putParamset",help:"Writes a paramset of a device or channel.",params:[{name:"address",type:"String"},{name:"paramsetKey",type:"String",values:["MASTER","VALUES"]},{name:"set",type:"Struct"}]},{name:"deleteDevice",help:"Removes a device from the interface process.",params:[{name:"address",type:"String"},{name:"flags",type:"Integer"}]},{name:"listBidcosInterfaces",help:"Returns the BidCos interfaces.",params:[]}],Vu=[{interfaceName:"BidCos-RF",method:"event",address:"JEQ0234567:1",datapoint:"PRESS_SHORT",value:!0},{interfaceName:"BidCos-RF",method:"event",address:"MEQ0123456:1",datapoint:"STATE",value:!0},{interfaceName:"BidCos-RF",method:"event",address:"MEQ0123456:1",datapoint:"STATE",value:!1},{interfaceName:"BidCos-RF",method:"event",address:"KEQ0345678:4",datapoint:"ACTUAL_TEMPERATURE",value:21.7},{interfaceName:"HmIP-RF",method:"event",address:"0011D3C9A1B2C3:1",datapoint:"STATE",value:0},{interfaceName:"HmIP-RF",method:"event",address:"3014F711A0001F:1",datapoint:"LEVEL",value:.35},{interfaceName:"BidCos-RF",method:"event",address:"GEQ0567890:1",datapoint:"LEVEL",value:.9}];function si(r){return fm.includes(r)}const fl=Object.fromEntries([["REPEAT_ENABLE",{TYPE:"BOOL",OPERATIONS:3,FLAGS:1,DEFAULT:!0,TAB_ORDER:0}],...Array.from({length:8},(r,e)=>[`GROUP_${String(e+1)}`,{TYPE:"BOOL",OPERATIONS:3,FLAGS:1,DEFAULT:!1,TAB_ORDER:e+1}])]),zu={ROUTER_MODULE_ENABLED:{TYPE:"BOOL",OPERATIONS:3,FLAGS:1,DEFAULT:!1,MIN:!1,MAX:!0},ENABLE_ROUTING:{TYPE:"BOOL",OPERATIONS:3,FLAGS:1,DEFAULT:!0,MIN:!1,MAX:!0}},pm=[{destination:"3014F711A0000418971558",nextHop:"3014F711A0000418971558",distance:1,rssi:-55,ac:!0},{destination:"0011D3C9A1B2C3",nextHop:"0011D3C9A1B2C3",distance:1,rssi:-71},{destination:"0001D8A9B7C6D5",nextHop:"0001D8A9B7C6D5",distance:1,rssi:-78},{destination:"3014F711A0001F",nextHop:"0001D8A9B7C6D5",distance:2}],dI={IP_DESTINATION_ADDRESS:{TYPE:"STRING",OPERATIONS:1,FLAGS:1,DEFAULT:""},NEXT_HOP_ADDRESS:{TYPE:"STRING",OPERATIONS:1,FLAGS:1,DEFAULT:""},DISTANCE:{TYPE:"INTEGER",OPERATIONS:1,FLAGS:1,DEFAULT:0,MIN:0,MAX:255},RSSI:{TYPE:"INTEGER",OPERATIONS:1,FLAGS:1,DEFAULT:0,MIN:-128,MAX:0},IS_NEIGHBOUR:{TYPE:"BOOL",OPERATIONS:1,FLAGS:1,DEFAULT:!1},IS_STATIC_ROUTE:{TYPE:"BOOL",OPERATIONS:1,FLAGS:1,DEFAULT:!1},OM_ACCESS_CONTROLLER:{TYPE:"BOOL",OPERATIONS:1,FLAGS:1,DEFAULT:!1}},cI=Object.fromEntries(pm.flatMap((r,e)=>Object.entries(dI).map(([n,s])=>[`DYNAMIC_ROUTE_${n}_${String(e)}`,s]))),uI=Object.fromEntries(pm.flatMap((r,e)=>[[`DYNAMIC_ROUTE_IP_DESTINATION_ADDRESS_${String(e)}`,r.destination],[`DYNAMIC_ROUTE_NEXT_HOP_ADDRESS_${String(e)}`,r.nextHop],[`DYNAMIC_ROUTE_DISTANCE_${String(e)}`,r.distance],...r.rssi===void 0?[]:[[`DYNAMIC_ROUTE_RSSI_${String(e)}`,r.rssi]],[`DYNAMIC_ROUTE_IS_NEIGHBOUR_${String(e)}`,r.distance===1],[`DYNAMIC_ROUTE_IS_STATIC_ROUTE_${String(e)}`,!1],[`DYNAMIC_ROUTE_OM_ACCESS_CONTROLLER_${String(e)}`,r.ac===!0]])),ju={"SWITCH|MASTER":{LOGGING:{TYPE:"ENUM",OPERATIONS:3,FLAGS:1,VALUE_LIST:["OFF","ON"],DEFAULT:1,TAB_ORDER:1},TRANSMIT_TRY_MAX:{TYPE:"INTEGER",OPERATIONS:3,FLAGS:1,MIN:1,MAX:10,DEFAULT:6,TAB_ORDER:2},ON_TIME:{TYPE:"FLOAT",OPERATIONS:3,FLAGS:1,MIN:0,MAX:8590,UNIT:"s",DEFAULT:0,TAB_ORDER:3,SPECIAL:[{ID:"NOT_USED",VALUE:111600}]},STATUSINFO_MINDELAY:{TYPE:"INTEGER",OPERATIONS:3,FLAGS:1,MIN:0,MAX:15,DEFAULT:2,TAB_ORDER:4}},"SWITCH|VALUES":{STATE:{TYPE:"BOOL",OPERATIONS:7,FLAGS:1,DEFAULT:!1,TAB_ORDER:1},WORKING:{TYPE:"BOOL",OPERATIONS:5,FLAGS:1,DEFAULT:!1,TAB_ORDER:2},INHIBIT:{TYPE:"BOOL",OPERATIONS:7,FLAGS:1,DEFAULT:!1,TAB_ORDER:3}},"DIMMER|MASTER":{LOGGING:{TYPE:"ENUM",OPERATIONS:3,FLAGS:1,VALUE_LIST:["OFF","ON"],DEFAULT:1,TAB_ORDER:1},DIM_STEP:{TYPE:"FLOAT",OPERATIONS:3,FLAGS:1,MIN:0,MAX:1,UNIT:"100%",DEFAULT:.05,TAB_ORDER:2}},"DIMMER|VALUES":{LEVEL:{TYPE:"FLOAT",OPERATIONS:7,FLAGS:1,MIN:0,MAX:1,UNIT:"100%",DEFAULT:0,TAB_ORDER:1},WORKING:{TYPE:"BOOL",OPERATIONS:5,FLAGS:1,DEFAULT:!1,TAB_ORDER:2}},"KEY|MASTER":{LONG_PRESS_TIME:{TYPE:"FLOAT",OPERATIONS:3,FLAGS:1,MIN:.3,MAX:1.8,UNIT:"s",DEFAULT:.4},DBL_PRESS_TIME:{TYPE:"FLOAT",OPERATIONS:3,FLAGS:1,MIN:0,MAX:1.5,UNIT:"s",DEFAULT:0}},"KEY|VALUES":{PRESS_SHORT:{TYPE:"ACTION",OPERATIONS:6,FLAGS:1},PRESS_LONG:{TYPE:"ACTION",OPERATIONS:6,FLAGS:1}},"SWITCH_VIRTUAL_RECEIVER|MASTER":{LOGGING:{TYPE:"ENUM",OPERATIONS:3,FLAGS:1,VALUE_LIST:["OFF","ON"],DEFAULT:1}},"SWITCH_VIRTUAL_RECEIVER|LINK":{SHORT_ON_TIME:{TYPE:"FLOAT",OPERATIONS:3,FLAGS:1,MIN:0,MAX:8590,UNIT:"s",DEFAULT:111600,SPECIAL:[{ID:"NOT_USED",VALUE:111600}]},SHORT_ON_LEVEL:{TYPE:"FLOAT",OPERATIONS:3,FLAGS:1,MIN:0,MAX:1,UNIT:"100%",DEFAULT:1},SHORT_ACTION_TYPE:{TYPE:"ENUM",OPERATIONS:3,FLAGS:1,VALUE_LIST:["INACTIVE","JUMP_TO_TARGET","TOGGLE_TO_COUNTER","TOGGLE_INVERSE_TO_COUNTER"],DEFAULT:1},UI_HINT:{TYPE:"STRING",OPERATIONS:3,FLAGS:2,DEFAULT:""}},"KEY_TRANSCEIVER|LINK":{LONG_PRESS_TIME:{TYPE:"FLOAT",OPERATIONS:3,FLAGS:1,MIN:.3,MAX:1.8,UNIT:"s",DEFAULT:.4}},"MAINTENANCE|VALUES":{UNREACH:{TYPE:"BOOL",OPERATIONS:5,FLAGS:9,DEFAULT:!1},STICKY_UNREACH:{TYPE:"BOOL",OPERATIONS:7,FLAGS:9,DEFAULT:!1},LOWBAT:{TYPE:"BOOL",OPERATIONS:5,FLAGS:9,DEFAULT:!1}},"CLIMATECONTROL_RT_TRANSCEIVER|VALUES":{FAULT_REPORTING:{TYPE:"ENUM",OPERATIONS:5,FLAGS:9,DEFAULT:0,MIN:0,MAX:7,VALUE_LIST:["NO_FAULT","VALVE_TIGHT","ADJUSTING_RANGE_TOO_LARGE","ADJUSTING_RANGE_TOO_SMALL","COMMUNICATION_ERROR","","LOWBAT","VALVE_ERROR_POSITION"]}},"|MASTER":{ARR_TIMEOUT:{TYPE:"INTEGER",OPERATIONS:3,FLAGS:1,MIN:1,MAX:20,DEFAULT:10}},"000A1B2C3D4E5F:0|MASTER":zu,"0001D709A1B2C3:0|MASTER":zu,"000A1B2C3D4E5F:0|ROUTING_TABLE":cI,"0001D3C9000001:1|MASTER":fl,"0001D3C9000002:1|MASTER":fl,"0001D3C9000003:1|MASTER":fl},hl={REPEAT_ENABLE:!0,GROUP_1:!1,GROUP_2:!1,GROUP_3:!1,GROUP_4:!1,GROUP_5:!1,GROUP_6:!1,GROUP_7:!1,GROUP_8:!1},Wu={"SWITCH|MASTER":{LOGGING:1,TRANSMIT_TRY_MAX:6,ON_TIME:111600,STATUSINFO_MINDELAY:2},"SWITCH|VALUES":{STATE:!0,WORKING:!1,INHIBIT:!1},"DIMMER|MASTER":{LOGGING:1,DIM_STEP:.05},"DIMMER|VALUES":{LEVEL:.9,WORKING:!1},"KEY|MASTER":{LONG_PRESS_TIME:.4,DBL_PRESS_TIME:0},"SWITCH_VIRTUAL_RECEIVER|MASTER":{LOGGING:1},"SWITCH_VIRTUAL_RECEIVER|LINK":{SHORT_ON_TIME:111600,SHORT_ON_LEVEL:1,SHORT_ACTION_TYPE:1,UI_HINT:""},"KEY_TRANSCEIVER|LINK":{LONG_PRESS_TIME:.4},"MAINTENANCE|VALUES":{UNREACH:!1,STICKY_UNREACH:!1,LOWBAT:!1},"|MASTER":{ARR_TIMEOUT:10},"000A1B2C3D4E5F:0|MASTER":{ROUTER_MODULE_ENABLED:!0,ENABLE_ROUTING:!0},"0001D709A1B2C3:0|MASTER":{ROUTER_MODULE_ENABLED:!1,ENABLE_ROUTING:!0},"000A1B2C3D4E5F:0|ROUTING_TABLE":uI,"0001D3C9000001:1|MASTER":{...hl,GROUP_1:!0},"0001D3C9000002:1|MASTER":{...hl,GROUP_1:!0},"0001D3C9000003:1|MASTER":hl};function gm(r){for(const e of Object.values(mm)){const n=e.find(s=>s.ADDRESS===r);if(n)return n.PARENT===void 0||n.PARENT===""?"":n.TYPE}return""}function fI(r,e){return ju[`${r}|${e}`]??ju[`${gm(r)}|${e}`]??{}}function hI(r,e){return Wu[`${r}|${e}`]??Wu[`${gm(r)}|${e}`]??{}}const mI={"data/manifest.json":{generatedAt:"2026-09-05T00:00:00.000Z",sources:[{name:"openccu-data",version:"2026.7.2"}],receiverTypes:["SWITCH_VIRTUAL_RECEIVER"],languages:["de","en"]},"data/receiver-type-aliases.json":{},"data/master-metadata.json":{SWITCH:{channelType:"SWITCH",parameterOrder:["TRANSMIT_TRY_MAX","LOGGING","ON_TIME"],conditionalVisibility:[{trigger:"LOGGING",triggerValue:1,show:["STATUSINFO_MINDELAY"]}],optionPresets:{ON_TIME:"duration"}}},"data/option-presets.json":{duration:{id:"duration",allowCustom:!0,presets:[{template:"5s",value:5},{template:"30s",value:30},{template:"${not_used}",value:111600}]}},"data/cross-validations.json":[{id:"onTime",rule:"lte",paramA:"STATUSINFO_MINDELAY",paramB:"TRANSMIT_TRY_MAX",errorKey:"delay_max"}],"data/translations/de.json":{language:"de",channelTypes:{SWITCH:"Schaltaktor"},deviceModels:{},parameters:{LOGGING:"Statusmeldungen","SWITCH|ON_TIME":"Einschaltdauer",NOT_USED:"Nicht benutzt"},parameterValues:{"LOGGING|ON":"an","LOGGING|OFF":"aus","CLIMATECONTROL_RT_TRANSCEIVER|FAULT_REPORTING|COMMUNICATION_ERROR":"Kommunikationsstörung"},parameterHelp:{LOGGING:"<b>Sendet</b> zyklisch den Status."},uiLabels:{not_used:"nicht benutzt",delay_max:"Verzögerung größer als die Sendeversuche"}},"data/translations/en.json":{language:"en",channelTypes:{SWITCH:"Switch actuator"},deviceModels:{},parameters:{LOGGING:"Status messages",NOT_USED:"Unused"},parameterValues:{"CLIMATECONTROL_RT_TRANSCEIVER|FAULT_REPORTING|COMMUNICATION_ERROR":"Communication error"},parameterHelp:{},uiLabels:{not_used:"not used",delay_max:"delay larger than the transmit tries"}},"data/profiles/SWITCH_VIRTUAL_RECEIVER.json":{receiverType:"SWITCH_VIRTUAL_RECEIVER",senders:{KEY_TRANSCEIVER:[{id:1,key:"switch_on",name:{de:"Einschalten",en:"Switch on"},description:{de:"Schaltet ein",en:"Switches on"},params:{SHORT_ACTION_TYPE:{kind:"fixed",value:1},SHORT_ON_LEVEL:{kind:"fixed",value:1},SHORT_ON_TIME:{kind:"fixed",value:111600}}},{id:2,key:"staircase",name:{de:"Treppenhauslicht",en:"Staircase light"},description:{de:"Schaltet für eine Zeit ein",en:"Switches on for a while"},params:{SHORT_ACTION_TYPE:{kind:"fixed",value:1},SHORT_ON_LEVEL:{kind:"fixed",value:1},SHORT_ON_TIME:{kind:"range",min:0,max:8590,default:60},SHORT_OPTICAL_SIGNAL_COLOR:{kind:"fixed",value:1},SHORT_OPTICAL_SIGNAL_BEHAVIOUR:{kind:"fixed",value:1}}}]},senderMetadata:{KEY_TRANSCEIVER:{parameterOrder:["SHORT_ACTION_TYPE","SHORT_ON_LEVEL","SHORT_ON_TIME"],optionPresets:{SHORT_ON_TIME:"duration"}}}},"data/device-icons.json":{}};class bm{calls=[];#e=new Map;#n=new Map;#t=new Set;#s;constructor(e={}){this.#s=e.connected??!0,e.demo===!0&&this.useDemoData()}get connected(){return this.#s}respond(e,n){return this.#e.set(e,n),this}handlerFor(e){const n=this.#e.get(e);if(!n)throw new yr({message:`no mock handler for ${e}`,kind:"internal"});return n}result(e,n){return this.respond(e,(()=>n))}fail(e,n){const s=typeof n=="string"?{message:n,kind:"internal"}:n;return this.respond(e,(()=>{throw new yr(s)}))}emit(e,n){const s=this.#n.get(e);if(s)for(const a of[...s])a(n)}setConnected(e){if(this.#s!==e){this.#s=e;for(const n of[...this.#t])n(e)}}countOf(e){return this.calls.filter(n=>n.method===e).length}lastCall(e){for(let n=this.calls.length-1;n>=0;n-=1){const s=this.calls[n];if(s&&s.method===e)return s.params}}reset(){this.calls.length=0}async request(e,...n){this.calls.push({method:e,params:n});const s=this.#e.get(e);if(!s)throw new yr({message:`no mock handler for ${e}`,kind:"internal"});return await s(...n)}on(e,n){const s=this.#n.get(e)??new Set;return s.add(n),this.#n.set(e,s),()=>{s.delete(n)}}onConnectionChange(e){return this.#t.add(e),()=>{this.#t.delete(e)}}listenerCount(e){return this.#n.get(e)?.size??0}useDemoData(){this.result("config.get",ul),this.respond("config.set",n=>({...ul,connection:n})),this.result("config.discover",ul.discovered),this.result("config.clearCaches",null),this.respond("config.callbackAddresses",n=>iI(n)),this.respond("connection.test",n=>({kind:"ccu",reachable:!0,url:`http://${n.host}`})),this.result("connection.pair",null),this.result("connection.pairCancel",null),this.result("interfaces.list",vm),this.result("interfaces.reconnect",null),this.result("rega.state",aI),this.respond("devices.list",n=>si(n)?mm[n]:[]),this.result("names.get",ps),this.respond("names.set",n=>{const s={...ps};for(const a of n)s[a.address]=a.name;return s}),this.respond("links.list",n=>si(n)?cl[n]:[]),this.respond("rssi.get",n=>si(n)?eI[n]:{}),this.respond("bidcos.interfaces",n=>n==="HmIP-RF"?tI:nI),this.respond("serviceMessages.list",n=>n===void 0?Hi:Hi.filter(s=>s.interfaceName===n)),this.respond("serviceMessages.refresh",n=>n===void 0?Hi:Hi.filter(s=>s.interfaceName===n)),this.result("serviceMessages.ack",null),this.result("rega.confirmInbox",[]),this.respond("teams.list",n=>n==="BidCos-RF"?rI:[]),this.result("teams.set",null),this.respond("unreach.list",n=>n===void 0?Bu:Bu.filter(s=>s.interfaceName===n)),this.result("unreach.reset",null);const e=[];return this.respond("linkTemplates.list",n=>n===void 0?e:e.filter(s=>s.identity===n)),this.respond("linkTemplates.save",n=>{const s=e.findIndex(a=>a.name===n.name);return s===-1?e.push(n):e[s]=n,e}),this.respond("linkTemplates.remove",n=>{const s=e.findIndex(a=>a.name===n);return s!==-1&&e.splice(s,1),e}),this.respond("events.recent",n=>n===void 0?Hu:Hu.filter(s=>s.interfaceName===n)),this.result("events.clear",null),this.result("rpcLog.list",oI),this.result("rpcLog.clear",null),this.result("rpc.methods",lI),this.respond("rpc.call",(n,s,a)=>({method:s,params:a})),this.respond("paramset.description",(n,s,a)=>fI(s,a)),this.respond("paramset.get",(n,s,a)=>hI(s,a)),this.result("paramset.id",""),this.result("paramset.valueStates",{}),this.result("channel.mode",""),this.respond("paramset.put",(n,s,a,i)=>s.map(o=>({interfaceName:n,address:o,paramset:a,sent:i,ok:!0,problems:[],durationMs:42}))),this.respond("paramset.putLink",(n,s,a)=>s.map(i=>({interfaceName:n,address:i.receiver,peer:i.sender,paramset:"LINK",sent:a.receiverToSender??a.senderToReceiver??{},ok:!0,problems:[],durationMs:42}))),this.result("value.set",null),this.result("devices.installMode.set",null),this.result("devices.installMode.get",0),this.result("devices.installMode.keyMismatch",""),this.result("devices.installMode.tempKey",null),this.respond("devices.repairConfig",(n,s,a)=>({interfaceName:n,address:s,configPendingBefore:!0,configPendingAfter:a?.dryRun===!0,channels:[{address:`${s}:1`,unknown:[],corrected:[{parameter:"TRANSMIT_TRY_MAX",stored:62,replacement:10,reason:"above MAX 10"}],write:{interfaceName:n,address:`${s}:1`,paramset:"MASTER",sent:{TRANSMIT_TRY_MAX:10},ok:!0,problems:[]}}],unrepairable:[],...a?.bidcosRecovery===void 0||a.bidcosRecovery==="none"?{}:{bidcosRecovery:a.bidcosRecovery}})),this.result("links.add",null),this.result("links.remove",null),this.result("links.info.set",null),this.result("links.activate",null),this.respond("links.info.get",(n,s,a)=>(si(n)?cl[n]:[]).find(o=>o.SENDER===s&&o.RECEIVER===a)??{SENDER:s,RECEIVER:a}),this.respond("links.peers",(n,s)=>(si(n)?cl[n]:[]).filter(i=>i.SENDER===s||i.RECEIVER===s).map(i=>i.SENDER===s?i.RECEIVER:i.SENDER)),this.respond("data.file",n=>{const s=mI[n];if(s===void 0)throw new yr({message:`no demo data file ${n}`,kind:"config"});return s}),this.useDemoMeta(),this.result("session.info",null),this}useDemoMeta(){const e=new y1({document:Gl(structuredClone(sI))}),n=()=>({provider:"local",reachable:!0,writable:!0,revision:e.revision,objects:e.size}),s=()=>{const o=e.document(),l={};for(const[f,p]of Object.entries(o.objects)){const _=k1(o.enums,p);l[f]={name:_.name,enums:[...p.enums],rooms:[..._.rooms],functions:[..._.functions],..._.orphaned?{orphaned:!0}:{}}}return l},a=()=>structuredClone(e.enums()),i=()=>{this.emit("meta.changed",n()),this.emit("meta.enums.changed",a()),this.emit("meta.objects.changed",s())};return this.respond("meta.state",n),this.respond("meta.get",()=>({state:n(),enums:a(),objects:s()})),this.respond("meta.enums",a),this.respond("meta.objects",s),this.respond("meta.setMembership",o=>{const l={};for(const f of o)l[f.ref]={enums:f.paths};return e.bulk(l),i(),null}),this.respond("meta.assign",(o,l,f)=>{const p={};for(const _ of o){const g=e.find(_),k=g?.enums??[];if(k.includes(l)===f)continue;const b=f?[...k,l]:k.filter(x=>x!==l),w=_.slice(_.indexOf(".")+1);p[_]=g?{enums:b}:{name:ps[w]??w,enums:b}}return e.bulk(p),i(),null}),this.respond("meta.enum.create",(o,l)=>(e.createEnum(o,l),i(),null)),this.respond("meta.enum.update",(o,l)=>(e.updateEnum(o,l),i(),null)),this.respond("meta.enum.delete",(o,l)=>(e.deleteEnum(o,l===!0?"detach":"refuse"),i(),null)),this.respond("meta.node.create",(o,l,f,p)=>{const _=e.getEnum(o).tree,g=l===void 0?void 0:xa(l),k=g===void 0?_:Ks(_,g.ids)?.children??[],E=Ch(f,k.map(b=>b.id));return e.createNode(o,l??null,E,f,p??{}),i(),`${l??o}/${E}`}),this.respond("meta.node.update",(o,l)=>(e.updateNode(o,l),i(),null)),this.respond("meta.node.delete",(o,l)=>(e.deleteNode(o,l===!0?"detach":"refuse"),i(),null)),this.respond("meta.refresh",()=>(i(),n())),this.result("meta.pairing",null),this.respond("meta.export",()=>e.document()),this.respond("meta.import",(o,l)=>(e.import(o,l??"replace"),i(),null)),this}}const vI=1;class pI{url;#e;#n;#t;#s;#a;#r=new Map;#i=new Map;#l=new Set;#o=new Set;#d;#c=!1;#u=!1;#f=1;#h;#m;constructor(e){this.url=e.url,this.#e=e.factory??(n=>new WebSocket(n)),this.#n=e.requestTimeoutMs??3e4,this.#t=e.reconnect??!0,this.#s=e.minBackoffMs??500,this.#a=e.maxBackoffMs??15e3,this.#h=this.#s,(e.autoConnect??!0)&&this.connect()}get connected(){return this.#c}get backoffMs(){return this.#h}connect(){if(this.#u=!1,this.#d)return;const e=this.#e(this.url);this.#d=e,e.onopen=()=>{this.#h=this.#s,this.#g(!0);for(const n of[...this.#o])this.#o.delete(n),n.resolve()},e.onmessage=n=>{this.#_(n.data)},e.onerror=()=>{},e.onclose=()=>{this.#b()}}close(){this.#u=!0,this.#m!==void 0&&(clearTimeout(this.#m),this.#m=void 0);const e=this.#d;this.#d=void 0,e?.close(),this.#E("transport closed"),this.#g(!1)}async request(e,...n){await this.#v(e);const s=this.#d;if(!s||s.readyState!==vI)throw new yr({message:`not connected to ${this.url}`,kind:"connection"});const a=this.#f;this.#f+=1;const i={t:"req",id:a,m:e,p:n};return new Promise((o,l)=>{const f={method:e,resolve:o,reject:l,timer:void 0};f.timer=setTimeout(()=>{this.#r.delete(a),l(new yr({message:`${e} timed out after ${this.#n} ms`,kind:"connection"}))},this.#n),this.#r.set(a,f);try{s.send(JSON.stringify(i))}catch(p){this.#p(a,void 0,{message:p instanceof Error?p.message:String(p),kind:"connection"})}})}on(e,n){const s=this.#i.get(e)??new Set;return s.add(n),this.#i.set(e,s),()=>{s.delete(n)}}onConnectionChange(e){return this.#l.add(e),()=>{this.#l.delete(e)}}#v(e){return this.#c?Promise.resolve():this.#u?Promise.reject(new yr({message:"transport closed",kind:"connection"})):new Promise((n,s)=>{const a={resolve:()=>{clearTimeout(i),n()},reject:o=>{clearTimeout(i),s(o)}},i=setTimeout(()=>{this.#o.delete(a),s(new yr({message:`${e} gave up waiting for ${this.url}`,kind:"connection"}))},this.#n);this.#o.add(a)})}#_(e){if(typeof e!="string")return;let n;try{n=JSON.parse(e)}catch{return}if(typeof n!="object"||n===null)return;const s=n;switch(s.t){case"res":this.#p(s.id,s.r,void 0);break;case"err":this.#p(s.id,void 0,Yf(s.e)?s.e:{message:"malformed error frame",kind:"internal"});break;case"ev":{const a=this.#i.get(s.n);if(a)for(const i of[...a])i(s.d);break}}}#p(e,n,s){const a=this.#r.get(e);a&&(this.#r.delete(e),a.timer!==void 0&&clearTimeout(a.timer),s?a.reject(new yr(s)):a.resolve(n))}#b(){if(this.#d=void 0,this.#g(!1),this.#E(`connection to ${this.url} was lost`),this.#u||!this.#t)return;const e=this.#h;this.#h=Math.min(this.#h*2,this.#a),this.#m=setTimeout(()=>{this.#m=void 0,this.connect()},e)}#E(e){for(const[n,s]of[...this.#r])this.#r.delete(n),s.timer!==void 0&&clearTimeout(s.timer),s.reject(new yr({message:e,kind:"connection"}));for(const n of[...this.#o])this.#o.delete(n),n.reject(new yr({message:e,kind:"connection"}))}#g(e){if(this.#c!==e){this.#c=e;for(const n of[...this.#l])n(e)}}}const gI={},bI="__HMM_TRANSPORT__";function _I(r,e="api"){const n=r.protocol==="https:"?"wss:":"ws:",s=r.pathname.replace(/[^/]*$/,"");return`${n}//${r.host}${s}${e}`}function EI(r){return gI?.VITE_HMM_DEMO==="true"?!0:r?new URLSearchParams(r.search).has("demo"):!1}function yI(r={}){const n=(r.host??globalThis)[bI];if(SI(n))return n;const s=r.location??(typeof window>"u"?void 0:window.location);if(r.demo===!0||EI(s))return new bm({demo:!0});if(!s)throw new Error("createTransport needs a location when there is no window and no injected transport");return new pI({url:_I(s,r.path??"api")})}function SI(r){if(typeof r!="object"||r===null)return!1;const e=r;return typeof e.request=="function"&&typeof e.on=="function"&&typeof e.onConnectionChange=="function"}function wI(r,e={}){const n=e.intervalMs??2500,s=e.now??(()=>Date.now());let a=0;const i=setInterval(()=>{const o=Vu[a%Vu.length];if(a+=1,!o)return;const l={...o,timestamp:s()};r.emit("rpc.event",l)},n);return()=>{clearInterval(i)}}const nd=yI(),_m=ZD(nd);nd instanceof bm&&wI(nd);const Em=document.querySelector("#app");if(!Em)throw new Error("no #app element to mount into");fp(mD,{target:Em,props:{stores:_m}});_m.start();
21
- //# sourceMappingURL=index-fwhkIxfh.js.map
19
+ `)),$=c(()=>!t(b)&&!t(E)&&t(o).trim()!==""&&(t(x)?t(l)!=="":t(M)||t(z)));ot(()=>{n()&&(u(b,!1),le(s()))});async function le(K){u(E,!0),u(o,K?.name??"",!0),u(f,[],!0),u(p,[],!0),u(_,[],!0),u(g,[],!0),u(k,[],!0),u(w,[],!0);try{if(K===void 0){u(p,await a.groups.types(),!0),u(l,t(p)[0]?.id??"",!0);return}const X=await a.groups.detail(K.id);if(X===void 0){n(!1);return}u(o,X.name,!0),u(l,X.type,!0),u(p,X.types.map(se=>({...se,assignable:[],leftover:[]})),!0),u(k,X.members,!0),u(_,X.assignable,!0),u(g,X.leftover,!0),u(f,X.members.map(se=>se.id),!0),u(w,[...t(f)].sort(),!0)}finally{u(E,!1)}}function fe(K){u(l,K,!0),u(f,[],!0)}function de(K,X){u(f,X?[...t(f).filter(se=>se!==K),K]:t(f).filter(se=>se!==K),!0)}function B(K){const X=a.names.name(K.id);return X===void 0?K.id:X}async function oe(){if(!t($))return;u(b,!0);const K=t(o).trim(),X=s()===void 0?await a.groups.create(K,t(l),t(f)):await a.groups.update(s().id,t(M)?K:void 0,t(z)?t(f):void 0);u(b,!1),X!==void 0&&n(!1)}{const K=se=>{var j=lR(),ne=Ne(j),ye=m(ne,!0),xe=d(ne,2),ie=m(xe,!0);S((Ae,Te)=>{h(ye,Ae),xe.disabled=!t($),h(ie,Te)},[()=>i("Cancel"),()=>t(x)?i("Create"):i("Save")]),re("click",ne,()=>n(!1)),re("click",xe,()=>{oe()}),v(se,j)};let X=c(()=>t(x)?i("New group"):i("Edit group"));En(r,{get title(){return t(X)},width:"620px",minHeight:360,testId:"group-dialog",get open(){return n()},set open(se){n(se)},buttons:K,children:(se,j)=>{var ne=_R(),ye=A(ne),xe=A(ye),ie=m(xe,!0),Ae=d(xe,2),Te=d(ye,2),me=A(Te),P=m(me,!0),ce=d(me,2);{var be=O=>{var U=cR();Xe(U,21,()=>t(p),F=>F.id,(F,Ee)=>{var Ie=dR(),Me=m(Ie,!0),Ve={};S(ze=>{h(Me,ze),Ve!==(Ve=t(Ee).id)&&(Ie.value=(Ie.__value=Ve)??"")},[()=>i(t(Ee).label)]),v(F,Ie)});var I;Xt(U),S(()=>{U.disabled=t(E)||t(p).length===0,I!==(I=t(l))&&(U.value=(U.__value=I)??"",Bn(U,I))}),re("change",U,F=>fe(F.currentTarget.value)),v(O,U)},ee=O=>{var U=uR(),I=m(U,!0);S(F=>h(I,F),[()=>i(t(D)?.label??t(l))]),v(O,U)};W(ce,O=>{t(x)?O(be):O(ee,-1)})}var he=d(Te,2);{var G=O=>{var U=fR(),I=A(U),F=m(I,!0),Ee=d(I,2),Ie=m(Ee,!0);S(Me=>{h(F,Me),h(Ie,s().device)},[()=>i("Virtual device")]),v(O,U)};W(he,O=>{s()!==void 0&&O(G)})}var Q=d(he,2),q=m(Q,!0),Y=d(Q,2);{var ae=O=>{var U=hR(),I=m(U,!0);S(F=>h(I,F),[()=>i("Loading")]),v(O,U)},J=O=>{var U=mR(),I=m(U,!0);S(F=>h(I,F),[()=>i("There are no other devices available")]),v(O,U)},ve=O=>{var U=pR();Xe(U,21,()=>t(N),I=>I.id,(I,F)=>{var Ee=vR(),Ie=A(Ee),Me=A(Ie),Ve=d(Me,2),ze=m(Ve,!0),nt=d(Ve,2),Ze=m(nt,!0),_e=d(nt,2),Se=m(_e,!0);S((V,L)=>{Pr(Me,V),T(Me,"data-testid",`group-member-${t(F).id}`),h(ze,L),h(Ze,t(F).id),h(Se,t(F).type)},[()=>t(f).includes(t(F).id),()=>B(t(F))]),re("change",Me,V=>de(t(F).id,V.currentTarget.checked)),v(I,Ee)}),v(O,U)};W(Y,O=>{t(E)?O(ae):t(N).length===0?O(J,1):O(ve,-1)})}var ge=d(Y,2);{var te=O=>{var U=bR(),I=Ne(U),F=m(I,!0),Ee=d(I,2);Xe(Ee,21,()=>t(R),Ie=>Ie.id,(Ie,Me)=>{var Ve=gR(),ze=A(Ve),nt=m(ze,!0),Ze=d(ze,2),_e=m(Ze,!0),Se=d(Ze,2),V=m(Se,!0);S(L=>{h(nt,L),h(_e,t(Me).id),h(V,t(Me).type)},[()=>B(t(Me))]),v(Ie,Ve)}),S(Ie=>h(F,Ie),[()=>i("Already connected devices")]),v(O,U)};W(ge,O=>{!t(E)&&t(R).length>0&&O(te)})}S((O,U,I)=>{h(ie,O),Ae.disabled=t(E),h(P,U),h(q,I)},[()=>i("Group name"),()=>i("Group type"),()=>i("Addable devices")]),re("keydown",Ae,O=>{O.key==="Enter"&&oe()}),xn(Ae,()=>t(o),O=>u(o,O)),v(se,ne)},$$slots:{buttons:!0,default:!0}})}ft()}Et(["click","keydown","change"]);var yR=y('<p class="hmm-groups-unavailable svelte-v7q9p3" data-testid="groups-unavailable"> </p>'),SR=y("<!> <!> <!> <!>",1),wR=y('<span class="hmm-groups-pending svelte-v7q9p3" data-testid="groups-pending"> </span>'),kR=y('<span class="hmm-groups-none svelte-v7q9p3"> </span>'),AR=y("<span><!></span>"),TR=y('<div class="hmm-page svelte-v7q9p3"><div class="hmm-page-grid svelte-v7q9p3"><!></div></div> <!> <!>',1);function RR(r,e){ut(e,!0);const n=Ot(),s=n.i18n.t,a=c(()=>n.groups);let i=C(We([])),o=C(!1),l=C(void 0),f=C(!1),p=C(void 0);const _=c(()=>t(a).groups.find(X=>String(X.id)===t(i)[0])),g=c(()=>n.app.session!==null&&n.app.session.level<8),k=c(()=>t(g)?s("Needs the administrator role on the system"):void 0);ot(()=>{t(a).offered&&t(a).load()});function E(X){const se=n.names.name(X.id);return se===void 0?X.id:`${se} (${X.id})`}function b(X){return X.members.map(E).join(", ")}function w(X){return s(X.typeLabel)}function x(){u(l,void 0),u(o,!0)}function D(X){X!==void 0&&(u(l,X,!0),u(o,!0))}function N(X){X!==void 0&&(u(p,X,!0),u(f,!0))}const R=c(()=>t(a).devicesToConfigure.length===0?"":s("Configuration pending: {list}",{list:t(a).devicesToConfigure.map(E).join(", ")})),M=c(()=>[{key:"name",label:s("Group name"),width:220,copy:"name"},{key:"type",label:s("Group type"),width:180,value:w},{key:"device",label:s("Virtual device"),width:140,mono:!0,copy:"address"},{key:"members",label:s("Members"),width:420,sortable:!1,value:b}]);var z=TR(),$=Ne(z),le=A($),fe=A(le);{var de=X=>{var se=yR(),j=m(se);S(ne=>h(j,`${ne??""}${t(a).state?.message===void 0?"":`: ${t(a).state.message}`}`),[()=>s("Heating groups are not available here")]),v(X,se)},B=X=>{{const se=me=>{var P=SR(),ce=Ne(P);{let G=c(()=>s("Refresh"));Dt(ce,{get title(){return t(G)},icon:"⟳",get busy(){return t(a).loading},testId:"groups-refresh",onclick:()=>{t(a).load()}})}var be=d(ce,2);{let G=c(()=>s("New group"));Dt(be,{get title(){return t(G)},icon:"+",get disabled(){return t(g)},get reason(){return t(k)},testId:"groups-new",onclick:x})}var ee=d(be,2);{let G=c(()=>s("Edit group")),Q=c(()=>t(g)||t(_)===void 0),q=c(()=>t(k)??s("Select a group"));Dt(ee,{get title(){return t(G)},icon:"✎",get disabled(){return t(Q)},get reason(){return t(q)},testId:"groups-edit",onclick:()=>D(t(_))})}var he=d(ee,2);{let G=c(()=>s("Delete group")),Q=c(()=>t(g)||t(_)===void 0),q=c(()=>t(k)??s("Select a group"));Dt(he,{get title(){return t(G)},icon:"✕",get disabled(){return t(Q)},get reason(){return t(q)},testId:"groups-delete",onclick:()=>N(t(_))})}v(me,P)},j=me=>{var P=St(),ce=Ne(P);{var be=ee=>{{let he=c(()=>s("The direct device connections of these devices are still being configured"));mi(ee,{get text(){return t(he)},testId:"groups-pending-tooltip",children:(G,Q)=>{var q=wR(),Y=m(q,!0);S(()=>h(Y,t(R))),v(G,q)},$$slots:{default:!0}})}};W(ce,ee=>{t(R)!==""&&ee(be)})}v(me,P)},ne=(me,P=Hn,ce=Hn)=>{var be=St(),ee=Ne(be);{var he=q=>{var Y=AR(),ae=A(Y);{var J=ge=>{var te=kR(),O=m(te,!0);S(U=>h(O,U),[()=>s("There are no devices in the group")]),v(ge,te)},ve=ge=>{var te=Cn();S(O=>h(te,O),[()=>b(P())]),v(ge,te)};W(ae,ge=>{P().members.length===0?ge(J):ge(ve,-1)})}S(ge=>T(Y,"data-testid",ge),[()=>`group-members-${String(P().id)}`]),v(q,Y)},G=q=>{var Y=Cn();S(ae=>h(Y,ae),[()=>ce().value(P())??""]),v(q,Y)},Q=q=>{var Y=Cn();S(()=>h(Y,P()[ce().key]??"")),v(q,Y)};W(ee,q=>{ce().key==="members"?q(he):ce().value?q(G,1):q(Q,-1)})}v(me,be)};let ye=c(()=>s("Heating groups")),xe=c(()=>s("Filter")),ie=c(()=>t(a).loaded?s("No groups yet"):s("Loading")),Ae=c(()=>s("Heating groups")),Te=c(()=>s("{count} groups",{},t(a).groups.length));Fs(X,{get rows(){return t(a).groups},get scope(){return n.app.selectedInterface},get columns(){return t(M)},getId:me=>String(me.id),get caption(){return t(ye)},get filterLabel(){return t(xe)},get emptyText(){return t(ie)},get toolbarLabel(){return t(Ae)},get countText(){return t(Te)},onactivate:me=>t(g)?void 0:D(me),tableId:"groups",testId:"groups-table",get selected(){return t(i)},set selected(me){u(i,me,!0)},toolbar:se,status:j,cell:ne,$$slots:{toolbar:!0,status:!0,cell:!0}})}};W(fe,X=>{t(a).offered?X(B,-1):X(de)})}var oe=d($,2);ER(oe,{get group(){return t(l)},get open(){return t(o)},set open(X){u(o,X,!0)}});var K=d(oe,2);oR(K,{get group(){return t(p)},get open(){return t(f)},set open(X){u(f,X,!0)}}),v(r,z),ft()}var xR=y('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="remove-link-stage"> </button> <button type="button" class="hmm-button hmm-danger svelte-1suervc" data-testid="remove-link-confirm"> </button>',1),DR=y('<li><span class="hmm-mono"> </span> → <span class="hmm-mono"> </span> <span class="hmm-remove-names svelte-1suervc"> </span></li>'),IR=y('<p> </p> <ul class="hmm-remove-links svelte-1suervc"></ul>',1);function NR(r,e){ut(e,!0);let n=H(e,"open",15,!1),s=H(e,"links",19,()=>[]);const a=Ot(),i=a.i18n.t;let o=C(!1);function l(){const p=s().map(_=>({..._}));a.changeSet.stage({kind:"linkRemove",interfaceName:a.app.selectedInterface,title:i("{count} links",{},p.length),pairs:p,calls:p.map(_=>`removeLink(${_.sender}, ${_.receiver})`),lines:[]}),n(!1)}async function f(){u(o,!0);const p=await a.links.remove(a.app.selectedInterface,s());u(o,!1),p===s().length&&n(!1)}{const p=g=>{var k=xR(),E=Ne(k),b=m(E,!0),w=d(E,2),x=m(w,!0),D=d(w,2),N=m(D,!0);S((R,M,z)=>{h(b,R),w.disabled=t(o)||s().length===0,h(x,M),D.disabled=t(o)||s().length===0,h(N,z)},[()=>i("Cancel"),()=>i("Add to pending changes"),()=>i("Delete")]),re("click",E,()=>n(!1)),re("click",w,l),re("click",D,()=>{f()}),v(g,k)};let _=c(()=>i("Delete link"));En(r,{get title(){return t(_)},width:"620px",testId:"remove-link-dialog",get open(){return n()},set open(g){n(g)},buttons:p,children:(g,k)=>{var E=IR(),b=Ne(E),w=m(b,!0),x=d(b,2);Xe(x,21,s,D=>`${D.sender}->${D.receiver}`,(D,N)=>{var R=DR(),M=A(R),z=m(M,!0),$=d(M,2),le=m($,!0),fe=d($,2),de=m(fe);S((B,oe)=>{h(z,t(N).sender),h(le,t(N).receiver),h(de,`${B??""} → ${oe??""}`)},[()=>a.nameOf(t(N).sender),()=>a.nameOf(t(N).receiver)]),v(D,R)}),S(D=>h(w,D),[()=>i("{count} links",{},s().length)]),v(g,E)},$$slots:{buttons:!0,default:!0}})}ft()}Et(["click"]);var Nu=y("<!> <!>",1),CR=y("<!> <!> <!> <!> <!>",1),PR=y('<button type="button" class="hmm-links-handover svelte-1pum174" data-testid="links-filter-handover"> </button>'),MR=y('<span class="hmm-links-defective svelte-1pum174" data-testid="links-defective"> </span>'),OR=y('<span class="hmm-link-broken svelte-1pum174" role="img">⚠</span>'),LR=y('<div class="hmm-page svelte-1pum174"><div class="hmm-page-grid svelte-1pum174"><!></div></div> <!> <!> <!> <!>',1);function FR(r,e){ut(e,!0);const n=Ot(),s=n.i18n.t;let a=C(We([])),i=C(!1),o=C(0),l=C(0),f=C(void 0),p=C(""),_=C(!1),g=C(!1),k=C(!1),E=C(""),b=C("");const w=c(()=>n.app.selectedInterface),x=c(()=>n.interfaces.typeOf(t(w)));ot(()=>{const me=n.app.linksFilter;me!==""&&(u(p,me,!0),n.app.linksFilter="")});const D=c(()=>n.links.of(t(w))),N=c(()=>n.links.defective(t(w)).length),R=c(()=>t(x)==="BidCos-RF"),M=c(()=>n.devices.index(t(w))),z=c(()=>t(M)===void 0||ch(t(M)).length>0),$=c(()=>t(a).map(me=>{const[P,ce]=me.split("->");return P===void 0||ce===void 0?void 0:{sender:P,receiver:ce}}).filter(me=>me!==void 0)),le=c(()=>t($).length===1?t($)[0]:void 0),fe=c(()=>[{key:"senderIcon",label:"",width:Ba,fixed:!0,sortable:!1,filterable:!1,align:"center",value:()=>""},{key:"senderName",label:`${s("Sender")} ${s("Name")}`,width:170,copy:"name",value:me=>n.nameOf(me.SENDER)},{key:"SENDER",label:"SENDER",width:140,mono:!0,copy:"address"},{key:"senderType",label:"TYPE",width:130,value:me=>n.devices.index(t(w))?.get(me.SENDER)?.TYPE??""},{key:"receiverIcon",label:"",width:Ba,fixed:!0,sortable:!1,filterable:!1,align:"center",value:()=>""},{key:"receiverName",label:`${s("Receiver")} ${s("Name")}`,width:170,copy:"name",value:me=>n.nameOf(me.RECEIVER)},{key:"RECEIVER",label:"RECEIVER",width:140,mono:!0,copy:"address"},{key:"receiverType",label:"TYPE",width:130,value:me=>n.devices.index(t(w))?.get(me.RECEIVER)?.TYPE??""},{key:"FLAGS",label:"FLAGS",width:48,align:"center",sortable:!1,value:me=>Dl(me).broken?"broken":""},{key:"NAME",label:"NAME",width:180},{key:"DESCRIPTION",label:"DESCRIPTION"}]);function de(me){const P=n.devices.index(t(w));return P?.parentOf(me)?.TYPE??P?.get(me)?.TYPE??""}function B(me){u(E,me.sender,!0),u(b,me.receiver,!0),u(k,!0)}function oe(me,P){u(f,{sender:me.SENDER,receiver:me.RECEIVER},!0),u(o,P.clientX,!0),u(l,P.clientY,!0),u(i,!0)}const K=c(()=>[{id:"edit",label:s("Edit link")},{id:"short",label:s("Activate short"),disabled:!t(R)},{id:"long",label:s("Activate long"),disabled:!t(R)},{id:"sep",separator:!0},{id:"delete",label:s("Delete link"),danger:!0}]);async function X(me){const P=t(f);if(P)switch(me){case"edit":B(P);break;case"short":await n.links.activate(t(w),P.receiver,P.sender,!1);break;case"long":await n.links.activate(t(w),P.receiver,P.sender,!0);break;case"delete":u(a,[`${P.sender}->${P.receiver}`],!0),u(g,!0);break}}var se=LR(),j=Ne(se),ne=A(j),ye=A(ne);{const me=q=>{var Y=CR(),ae=Ne(Y);{let U=c(()=>s("Add link")),I=c(()=>!t(z)),F=c(()=>s("No channel of this interface can be the sender of a link"));Vh(ae,{get caption(){return t(U)},icon:"+",get disabled(){return t(I)},get reason(){return t(F)},testId:"links-add",onclick:()=>u(_,!0)})}var J=d(ae,2);{let U=c(()=>s("Edit link")),I=c(()=>t(le)===void 0),F=c(()=>s("Select one link"));Dt(J,{get title(){return t(U)},icon:"⚙",get disabled(){return t(I)},get reason(){return t(F)},testId:"links-edit",onclick:()=>t(le)&&B(t(le))})}var ve=d(J,2);{var ge=U=>{var I=Nu(),F=Ne(I);{let Ie=c(()=>s("Activate short")),Me=c(()=>t(le)===void 0),Ve=c(()=>s("Select one link"));Dt(F,{get title(){return t(Ie)},icon:"▸",get disabled(){return t(Me)},get reason(){return t(Ve)},testId:"links-play-short",onclick:()=>t(le)&&void n.links.activate(t(w),t(le).receiver,t(le).sender,!1)})}var Ee=d(F,2);{let Ie=c(()=>s("Activate long")),Me=c(()=>t(le)===void 0),Ve=c(()=>s("Select one link"));Dt(Ee,{get title(){return t(Ie)},icon:"▸▸",get disabled(){return t(Me)},get reason(){return t(Ve)},testId:"links-play-long",onclick:()=>t(le)&&void n.links.activate(t(w),t(le).receiver,t(le).sender,!0)})}v(U,I)};W(ve,U=>{t(R)&&U(ge)})}var te=d(ve,2);{let U=c(()=>s("Delete link")),I=c(()=>t($).length===0),F=c(()=>s("Please choose one or more links"));Dt(te,{get title(){return t(U)},icon:"🗑",get disabled(){return t(I)},get reason(){return t(F)},testId:"links-delete",onclick:()=>u(g,!0)})}var O=d(te,2);{let U=c(()=>s("Refresh"));Dt(O,{get title(){return t(U)},icon:"⟳",testId:"links-refresh",onclick:()=>{n.links.load(t(w))}})}v(q,Y)},P=q=>{var Y=Nu(),ae=Ne(Y);{var J=te=>{var O=PR(),U=m(O);S(I=>{T(O,"title",I),h(U,`${t(p)??""} ✕`)},[()=>s("Filter")]),re("click",O,()=>u(p,"")),v(te,O)};W(ae,te=>{t(p)!==""&&te(J)})}var ve=d(ae,2);{var ge=te=>{var O=MR(),U=m(O,!0);S(I=>h(U,I),[()=>s("{count} defective links",{},t(N))]),v(te,O)};W(ve,te=>{t(N)>0&&te(ge)})}v(q,Y)},ce=(q,Y=Hn,ae=Hn)=>{var J=St(),ve=Ne(J);{var ge=I=>{{let F=c(()=>de(Y().SENDER)),Ee=c(()=>n.host.deviceImageUrl(de(Y().SENDER)));Ha(I,{get deviceType(){return t(F)},get src(){return t(Ee)}})}},te=I=>{{let F=c(()=>de(Y().RECEIVER)),Ee=c(()=>n.host.deviceImageUrl(de(Y().RECEIVER)));Ha(I,{get deviceType(){return t(F)},get src(){return t(Ee)}})}},O=I=>{const F=c(()=>Dl(Y()));var Ee=St(),Ie=Ne(Ee);{var Me=Ve=>{var ze=OR();S((nt,Ze)=>{T(ze,"aria-label",nt),T(ze,"title",Ze)},[()=>s("Defective link"),()=>`${t(F).senderBroken?"SENDER_BROKEN ":""}${t(F).receiverBroken?"RECEIVER_BROKEN":""}`.trim()]),v(Ve,ze)};W(Ie,Ve=>{t(F).broken&&Ve(Me)})}v(I,Ee)},U=I=>{var F=Cn();S(Ee=>h(F,Ee),[()=>ae().value?ae().value(Y())??"":Y()[ae().key]??""]),v(I,F)};W(ve,I=>{ae().key==="senderIcon"?I(ge):ae().key==="receiverIcon"?I(te,1):ae().key==="FLAGS"?I(O,2):I(U,-1)})}v(q,J)};let be=c(()=>s("Links")),ee=c(()=>s("Filter")),he=c(()=>s("No data")),G=c(()=>s("Links")),Q=c(()=>s("{count} links",{},t(D).length));Fs(ye,{get rows(){return t(D)},get scope(){return t(w)},get columns(){return t(fe)},getId:q=>`${q.SENDER}->${q.RECEIVER}`,get caption(){return t(be)},get filterLabel(){return t(ee)},get emptyText(){return t(he)},onactivate:q=>B({sender:q.SENDER,receiver:q.RECEIVER}),onrowcontextmenu:oe,get toolbarLabel(){return t(G)},get countText(){return t(Q)},tableId:"links",testId:"links-table",get selected(){return t(a)},set selected(q){u(a,q,!0)},get filter(){return t(p)},set filter(q){u(p,q,!0)},toolbar:me,status:P,cell:ce,$$slots:{toolbar:!0,status:!0,cell:!0}})}var xe=d(j,2);{let me=c(()=>s("Links"));Ld(xe,{get items(){return t(K)},get x(){return t(o)},get y(){return t(l)},get label(){return t(me)},testId:"links-menu",onselect:P=>{X(P)},get open(){return t(i)},set open(P){u(i,P,!0)}})}var ie=d(xe,2);Yh(ie,{onedit:me=>B(me),get open(){return t(_)},set open(me){u(_,me,!0)}});var Ae=d(ie,2);NR(Ae,{get links(){return t($)},get open(){return t(g)},set open(me){u(g,me,!0)}});var Te=d(Ae,2);nm(Te,{get sender(){return t(E)},get receiver(){return t(b)},get open(){return t(k)},set open(me){u(k,me,!0)}}),v(r,se),ft()}Et(["click"]);function om(r){let e=0;const n=new Set;for(const s of r){const a=Pd(s),i=a?.address??s,o=i.indexOf(":");o>=0&&(e+=1);const l=o>=0?i.slice(0,o):i;n.add(a?`${a.interfaceName}.${l}`:l)}return{devices:n.size,channels:e}}function lm(r,e,n){const s=r[n];return s?Ii(n,s).map(a=>({id:a.path,kind:"node",enumId:n,path:a.path,name:a.node.name,depth:a.depth,hasChildren:(a.node.children?.length??0)>0,...om(Ao(e,a.path))})):[]}function GR(r,e,n){return Object.entries(r).map(([s,a])=>{const i=lm(r,e,s);return{id:s,kind:"enum",enumId:s,name:Nh(s,a,n),depth:0,hasChildren:i.length>0,...om(Ao(e,s)),nodes:i}})}function UR(r){const e=new Map;for(const n of r){e.set(n.id,n);for(const s of n.nodes??[])e.set(s.id,s)}return e}function BR(r,e=14){return Math.max(0,r-1)*e}function HR(r,e){const n=e.split("/")[0]??"";return jh(r,n).filter(s=>BS(e,s.path))}function VR(r,e){return Ao(r,e.kind==="enum"?e.enumId:e.path??"")}function Cu(r,e,n){return{...r,en:e,[n]:e}}var zR=y('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button hmm-meta-delete-danger svelte-1af2i6v"> </button>',1),jR=y('<p class="hmm-meta-delete-empty svelte-1af2i6v"> </p>'),WR=y("<li> </li>"),KR=y('<p class="hmm-meta-delete-title svelte-1af2i6v"> </p> <ul class="hmm-meta-delete-members svelte-1af2i6v"></ul>',1),YR=y('<p class="hmm-meta-delete-subject svelte-1af2i6v"> </p> <!>',1);function qR(r,e){ut(e,!0);let n=H(e,"open",15,!1),s=H(e,"labelOf",3,void 0),a=H(e,"testId",3,"meta-delete"),i=C(!1);ot(()=>{n()&&u(i,!1)});async function o(){if(t(i))return;u(i,!0);const l=await e.onapply(e.members.length>0);u(i,!1),l&&n(!1)}{const l=p=>{var _=zR(),g=Ne(_),k=m(g,!0),E=d(g,2),b=m(E,!0);S((w,x)=>{h(k,w),E.disabled=t(i),T(E,"data-testid",`${a()}-apply`),h(b,x)},[()=>e.t("Cancel"),()=>e.members.length===0?e.t("Delete"):e.t("Delete and detach")]),re("click",g,()=>n(!1)),re("click",E,()=>{o()}),v(p,_)};let f=c(()=>`${a()}-dialog`);En(r,{get title(){return e.title},width:"480px",get testId(){return t(f)},get open(){return n()},set open(p){n(p)},buttons:l,children:(p,_)=>{var g=YR(),k=Ne(g),E=m(k,!0),b=d(k,2);{var w=D=>{var N=jR(),R=m(N,!0);S(M=>h(R,M),[()=>e.t("Nothing is assigned here")]),v(D,N)},x=D=>{var N=KR(),R=Ne(N),M=m(R,!0),z=d(R,2);Xe(z,20,()=>e.members,$=>$,($,le)=>{var fe=WR(),de=m(fe,!0);S(B=>h(de,B),[()=>s()===void 0?le:s()(le)]),v($,fe)}),S($=>{h(M,$),T(z,"data-testid",`${a()}-members`)},[()=>e.t("Still assigned here - the assignments are removed with the node:")]),v(D,N)};W(b,D=>{e.members.length===0?D(w):D(x,-1)})}S(()=>h(E,e.subject)),v(p,g)},$$slots:{buttons:!0,default:!0}})}ft()}Et(["click"]);var $R=y('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button"> </button>',1),XR=y("<option> </option>"),QR=y('<p class="hmm-meta-move-subject svelte-wmqa0d"> </p> <label class="hmm-meta-move-row svelte-wmqa0d"><span> </span> <select class="hmm-select hmm-meta-move-select svelte-wmqa0d"><option> </option><!></select></label>',1);function ZR(r,e){ut(e,!0);let n=H(e,"open",15,!1),s=H(e,"current",3,""),a=H(e,"testId",3,"meta-move"),i=C(""),o=C(!1);ot(()=>{n()&&(u(i,s()),u(o,!1))});async function l(){if(t(o))return;u(o,!0);const f=await e.onapply(t(i)===""?null:t(i));u(o,!1),f&&n(!1)}{const f=_=>{var g=$R(),k=Ne(g),E=m(k,!0),b=d(k,2),w=m(b,!0);S((x,D)=>{h(E,x),b.disabled=t(o),T(b,"data-testid",`${a()}-apply`),h(w,D)},[()=>e.t("Cancel"),()=>e.t("Apply")]),re("click",k,()=>n(!1)),re("click",b,()=>{l()}),v(_,g)};let p=c(()=>`${a()}-dialog`);En(r,{get title(){return e.title},width:"440px",get testId(){return t(p)},get open(){return n()},set open(_){n(_)},buttons:f,children:(_,g)=>{var k=QR(),E=Ne(k),b=m(E,!0),w=d(E,2),x=A(w),D=m(x,!0),N=d(x,2),R=A(N),M=m(R,!0);R.value=R.__value="";var z=d(R);Xe(z,17,()=>e.targets,$=>$.path,($,le)=>{var fe=XR(),de=m(fe,!0),B={};S(oe=>{h(de,oe),B!==(B=t(le).path)&&(fe.value=(fe.__value=B)??"")},[()=>ql(t(le)," ")]),v($,fe)}),Xt(N),S(($,le,fe,de)=>{h(b,e.subject),h(D,$),T(N,"size",le),T(N,"aria-label",fe),T(N,"data-testid",`${a()}-parent`),h(M,de)},[()=>e.t("Move to"),()=>Math.min(12,Math.max(4,e.targets.length+1)),()=>e.t("Move to"),()=>e.t("Top level")]),kr(N,()=>t(i),$=>u(i,$)),v(_,k)},$$slots:{buttons:!0,default:!0}})}ft()}Et(["click"]);var JR=y('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button"> </button>',1),ex=y('<label class="hmm-meta-name-row svelte-ue9nlv"><span> </span> <input class="hmm-input hmm-meta-name-input svelte-ue9nlv"/></label>');function tx(r,e){ut(e,!0);let n=H(e,"open",15,!1),s=H(e,"initial",3,""),a=H(e,"testId",3,"meta-name"),i=C(""),o=C(!1),l=C(void 0);ot(()=>{n()&&(u(i,s()),u(o,!1),queueMicrotask(()=>{t(l)?.focus(),t(l)?.select()}))});async function f(){const p=t(i).trim();if(p===""||t(o))return;u(o,!0);const _=await e.onapply(p);u(o,!1),_&&n(!1)}{const p=g=>{var k=JR(),E=Ne(k),b=m(E,!0),w=d(E,2),x=m(w,!0);S((D,N,R)=>{h(b,D),w.disabled=N,T(w,"data-testid",`${a()}-apply`),h(x,R)},[()=>e.t("Cancel"),()=>t(o)||t(i).trim()==="",()=>e.t("Apply")]),re("click",E,()=>n(!1)),re("click",w,()=>{f()}),v(g,k)};let _=c(()=>`${a()}-dialog`);En(r,{get title(){return e.title},width:"440px",get testId(){return t(_)},get open(){return n()},set open(g){n(g)},buttons:p,children:(g,k)=>{var E=ex(),b=A(E),w=m(b,!0),x=d(b,2);fn(x,D=>u(l,D),()=>t(l)),S(()=>{h(w,e.label),T(x,"aria-label",e.label),T(x,"data-testid",`${a()}-input`)}),re("keydown",x,D=>{D.key==="Enter"&&(D.preventDefault(),f())}),xn(x,()=>t(i),D=>u(i,D)),v(g,E)},$$slots:{buttons:!0,default:!0}})}ft()}Et(["click","keydown"]);var nx=y("<!> <!> <!> <!> <!> <!> <!>",1),rx=y("<span> </span>"),sx=y('<span class="hmm-meta-path svelte-147hcfo"> </span>'),ax=y('<div class="hmm-page svelte-147hcfo"><div class="hmm-page-grid svelte-147hcfo"><!></div></div> <!> <!> <!>',1);function ix(r,e){ut(e,!0);let n=H(e,"enumId",3,void 0),s=H(e,"flat",3,!1),a=H(e,"available",3,!0),i=H(e,"writable",3,!0),o=H(e,"language",3,"en"),l=H(e,"labelOf",3,void 0),f=H(e,"emptyText",3,void 0),p=H(e,"countText",3,void 0),_=H(e,"tableId",3,void 0),g=H(e,"testId",3,"meta-table"),k=C(We([])),E=C(We([])),b=C(!1),w=C(!1),x=C("add"),D=C(""),N=C(""),R=C(""),M=C(!1),z=C(!1),$=C(void 0);const le=c(()=>n()===void 0),fe=c(()=>!s()),de=c(()=>n()===void 0?GR(e.enums,e.objects,o()):lm(e.enums,e.objects,n())),B=c(()=>UR(t(de))),oe=c(()=>t(k).length===1?t(B).get(t(k)[0]??""):void 0),K=c(()=>t(oe)?.kind==="node"?t(oe):void 0),X=[];ot(()=>{if(!t(le))return;const I=Object.keys(e.enums).filter(F=>!X.includes(F));I.length>0&&(X.push(...I),u(E,[...t(E),...I],!0))}),ot(()=>{t(k).some(I=>!t(B).has(I))&&u(k,t(k).filter(I=>t(B).has(I)),!0)});const se=c(()=>a()?i()?e.t("Select a row"):e.t("The store does not take writes"):e.t("No store connected")),j=c(()=>a()&&i()&&!t(b)),ne=c(()=>n()??t(oe)?.enumId),ye=c(()=>t(j)&&t(ne)!==void 0),xe=c(()=>t(j)&&t(le)?e.t("Select a taxonomy or a node"):t(se)),ie=c(()=>t(j)?e.t("Select a node"):t(se)),Ae=c(()=>[{key:"name",label:e.t("Name"),width:240,sortable:!t(le),value:I=>I.name},{key:"devices",label:e.t("Devices"),width:96,align:"right",filterable:!1,sortable:!t(le),value:I=>I.devices===0?"":I.devices},{key:"channels",label:e.t("Channels"),width:96,align:"right",filterable:!1,sortable:!t(le),value:I=>I.channels===0?"":I.channels},{key:"path",label:e.t("Path"),width:220,mono:!0,sortable:!t(le),value:I=>I.path??I.enumId}]);function Te(I){return I.nodes??[]}function me(I,F){switch(u(x,I,!0),u($,F,!0),I){case"enum":u(D,e.t("New taxonomy"),!0),u(N,e.t("Name"),!0),u(R,"");break;case"add":u(D,e.t("Add"),!0),u(N,e.t("Name"),!0),u(R,"");break;case"add-below":u(D,e.t("Add below"),!0),u(N,`${e.t("Add below")}: ${F?.name??""}`),u(R,"");break;case"rename":u(D,e.t("Rename"),!0),u(N,e.t("New name"),!0),u(R,F?.name??"",!0);break}u(w,!0)}async function P(I){u(b,!0);try{switch(t(x)){case"enum":return await e.actions.createEnum(Ch(I,Object.keys(e.enums)),Cu(void 0,I,o()));case"add":return t(ne)===void 0?!1:await e.actions.createNode(t(ne),void 0,I)!==void 0;case"add-below":{const F=t($);return F?.path===void 0?!1:await e.actions.createNode(F.enumId,F.path,I)!==void 0}case"rename":{const F=t($);return F===void 0?!1:F.kind==="enum"?await e.actions.renameEnum(F.enumId,Cu(e.enums[F.enumId]?.name,I,o())):await e.actions.renameNode(F.path??"",I)}}}finally{u(b,!1)}}function ce(I){I?.path!==void 0&&(u($,I,!0),u(M,!0))}async function be(I){const F=t($);if(F?.path===void 0)return!1;u(b,!0);try{return await e.actions.moveNode(F.path,I)}finally{u(b,!1)}}function ee(I){I!==void 0&&(u($,I,!0),u(z,!0))}async function he(I){const F=t($);if(F===void 0)return!1;u(b,!0);try{return F.kind==="enum"?await e.actions.deleteEnum(F.enumId,I):await e.actions.deleteNode(F.path??"",I)}finally{u(b,!1)}}async function G(){u(b,!0),await e.actions.refresh(),u(b,!1)}function Q(I){t(j)&&me("rename",I)}const q=c(()=>t($)?.path===void 0?void 0:t($)),Y=c(()=>t($)===void 0?[]:VR(e.objects,t($)));var ae=ax(),J=Ne(ae),ve=A(J),ge=A(ve);{const I=Se=>{var V=nx(),L=Ne(V);{var Pe=Ue=>{{let Fe=c(()=>e.t("New taxonomy")),Ye=c(()=>!t(j));Dt(Ue,{get title(){return t(Fe)},icon:"⊞",get disabled(){return t(Ye)},get reason(){return t(se)},testId:"meta-new-enum",onclick:()=>me("enum",void 0)})}};W(L,Ue=>{t(le)&&Ue(Pe)})}var Ge=d(L,2);{let Ue=c(()=>e.t("Add")),Fe=c(()=>!t(ye));Dt(Ge,{get title(){return t(Ue)},icon:"+",get disabled(){return t(Fe)},get reason(){return t(xe)},testId:"meta-add",onclick:()=>me("add",t(oe))})}var qe=d(Ge,2);{var we=Ue=>{{let Fe=c(()=>e.t("Add below")),Ye=c(()=>!t(j)||t(K)===void 0);Dt(Ue,{get title(){return t(Fe)},icon:"⊕",get disabled(){return t(Ye)},get reason(){return t(ie)},testId:"meta-add-below",onclick:()=>me("add-below",t(K))})}};W(qe,Ue=>{t(fe)&&Ue(we)})}var Ce=d(qe,2);{let Ue=c(()=>e.t("Rename")),Fe=c(()=>!t(j)||t(oe)===void 0);Dt(Ce,{get title(){return t(Ue)},icon:"✎",get disabled(){return t(Fe)},get reason(){return t(se)},testId:"meta-rename",onclick:()=>me("rename",t(oe))})}var Oe=d(Ce,2);{var Be=Ue=>{{let Fe=c(()=>e.t("Move")),Ye=c(()=>!t(j)||t(K)===void 0);Dt(Ue,{get title(){return t(Fe)},icon:"⤴",get disabled(){return t(Ye)},get reason(){return t(ie)},testId:"meta-move",onclick:()=>ce(t(K))})}};W(Oe,Ue=>{t(fe)&&Ue(Be)})}var pe=d(Oe,2);{let Ue=c(()=>e.t("Delete")),Fe=c(()=>!t(j)||t(oe)===void 0);Dt(pe,{get title(){return t(Ue)},icon:"🗑",get disabled(){return t(Fe)},get reason(){return t(se)},testId:"meta-delete",onclick:()=>ee(t(oe))})}var De=d(pe,2);{let Ue=c(()=>e.t("Refresh")),Fe=c(()=>!a());Dt(De,{get title(){return t(Ue)},icon:"⟳",get disabled(){return t(Fe)},get busy(){return t(b)},testId:"meta-refresh",onclick:()=>{G()}})}v(Se,V)},F=(Se,V=Hn,L=Hn)=>{var Pe=St(),Ge=Ne(Pe);{var qe=Oe=>{var Be=rx();let pe,De;var Ue=m(Be,!0);S(Fe=>{pe=_t(Be,1,"hmm-meta-name svelte-147hcfo",null,pe,{"hmm-meta-name-enum":V().kind==="enum"}),T(Be,"data-depth",V().depth),De=Un(Be,"",De,{"padding-left":Fe}),h(Ue,V().name)},[()=>`${String(BR(V().depth))}px`]),v(Oe,Be)},we=Oe=>{var Be=sx(),pe=m(Be,!0);S(()=>h(pe,V().path??V().enumId)),v(Oe,Be)},Ce=Oe=>{var Be=Cn();S(pe=>h(Be,pe),[()=>L().value?L().value(V())??"":""]),v(Oe,Be)};W(Ge,Oe=>{L().key==="name"?Oe(qe):L().key==="path"?Oe(we,1):Oe(Ce,-1)})}v(Se,Pe)};let Ee=c(()=>t(le)?Te:void 0),Ie=c(()=>n()??"metadata"),Me=c(()=>n()===void 0?e.t("Metadata"):n()==="room"?e.t("Rooms"):e.t("Functions")),Ve=c(()=>e.t("Filter")),ze=c(()=>a()?f()??"":e.t("No store connected")),nt=c(()=>e.t("No row matches the filter")),Ze=c(()=>e.t("Clear filter")),_e=c(()=>p()===void 0?void 0:p()(t(de).length));Fs(ge,{get rows(){return t(de)},get columns(){return t(Ae)},getId:Se=>Se.id,get subRows(){return t(Ee)},get scope(){return t(Ie)},get caption(){return t(Me)},get filterLabel(){return t(Ve)},get emptyText(){return t(ze)},get noMatchText(){return t(nt)},get clearFilterLabel(){return t(Ze)},showingText:(Se,V)=>e.t("Showing {shown} of {total}",{shown:Se,total:V}),get countText(){return t(_e)},onactivate:Q,get tableId(){return _()},get testId(){return g()},get selected(){return t(k)},set selected(Se){u(k,Se,!0)},get expanded(){return t(E)},set expanded(Se){u(E,Se,!0)},toolbar:I,cell:F,$$slots:{toolbar:!0,cell:!0}})}var te=d(J,2);tx(te,{get title(){return t(D)},get label(){return t(N)},get initial(){return t(R)},get t(){return e.t},onapply:P,testId:"meta-name",get open(){return t(w)},set open(I){u(w,I,!0)}});var O=d(te,2);{let I=c(()=>e.t("Move")),F=c(()=>t(q)?.name??""),Ee=c(()=>t(q)?.path===void 0?[]:HR(e.enums,t(q).path)),Ie=c(()=>t(q)?.path===void 0?"":f1(t(q).path)??"");ZR(O,{get title(){return t(I)},get subject(){return t(F)},get targets(){return t(Ee)},get current(){return t(Ie)},get t(){return e.t},onapply:be,testId:"meta-move",get open(){return t(M)},set open(Me){u(M,Me,!0)}})}var U=d(O,2);{let I=c(()=>e.t("Delete")),F=c(()=>t($)?.name??"");qR(U,{get title(){return t(I)},get subject(){return t(F)},get members(){return t(Y)},get labelOf(){return l()},get t(){return e.t},onapply:he,testId:"meta-delete",get open(){return t(z)},set open(Ee){u(z,Ee,!0)}})}v(r,ae),ft()}function al(r,e){ut(e,!0);let n=H(e,"enumId",3,void 0);const s=Ot(),a=s.i18n.t,i=c(()=>s.taxonomy),o={createEnum:(_,g)=>s.taxonomy.createEnum(_,g),renameEnum:(_,g)=>s.taxonomy.renameEnum(_,g),deleteEnum:(_,g)=>s.taxonomy.deleteEnum(_,g),createNode:(_,g,k)=>s.taxonomy.createNode(_,g,k),renameNode:(_,g)=>s.taxonomy.renameNode(_,g),moveNode:(_,g)=>s.taxonomy.moveNode(_,g),deleteNode:(_,g)=>s.taxonomy.deleteNode(_,g),refresh:()=>s.taxonomy.refresh()};function l(_){const g=Pd(_)?.address??_,k=s.names.name(g);return k===void 0?g:`${k} (${g})`}const f=c(()=>n()==="room"?a("No rooms yet"):n()==="function"?a("No functions yet"):a("No taxonomies yet"));function p(_){switch(n()){case"room":return a("{count} rooms",{},_);case"function":return a("{count} functions",{},_);default:return a("{count} taxonomies",{},_)}}{let _=c(()=>n()===void 0?"meta":`meta-${n()}`),g=c(()=>n()===void 0?"meta-table":`meta-table-${n()}`);ix(r,{get enums(){return t(i).enums},get objects(){return t(i).objects},get enumId(){return n()},get flat(){return t(i).flatOnly},get available(){return t(i).available},get writable(){return t(i).writable},get language(){return s.i18n.language},get t(){return a},get actions(){return o},labelOf:l,get emptyText(){return t(f)},countText:p,get tableId(){return t(_)},get testId(){return t(g)}})}ft()}var ox=y('<span class="hmm-rssi hmm-rssi-unknown svelte-1wk3r6l" data-rssi="unknown">—</span>'),lx=y("<span></span>"),dx=y('<span role="img"><span class="hmm-rssi-value"> </span><span class="hmm-rssi-bars svelte-1wk3r6l" aria-hidden="true"></span></span>');function ga(r,e){ut(e,!0);let n=H(e,"value",3,void 0),s=H(e,"labelOf",3,k=>k.label),a=H(e,"testId",3,void 0);const i=c(()=>t1(n())),o=c(()=>t(i)===void 0?void 0:`${String(n())} dBm · ${s()(t(i))}`),l=[1,2,3,4];var f=St(),p=Ne(f);{var _=k=>{var E=ox();S(()=>T(E,"data-testid",a())),v(k,E)},g=k=>{var E=dx(),b=A(E),w=m(b,!0),x=d(b);Xe(x,20,()=>l,D=>D,(D,N)=>{var R=lx();let M;S(()=>M=_t(R,1,"hmm-rssi-bar svelte-1wk3r6l",null,M,{"hmm-rssi-bar-off":N>t(i).bars})),v(D,R)}),S(()=>{_t(E,1,`hmm-rssi hmm-rssi-${t(i).step??""}`,"svelte-1wk3r6l"),T(E,"title",t(o)),T(E,"aria-label",t(o)),T(E,"data-rssi",t(i).step),T(E,"data-bars",t(i).bars),T(E,"data-testid",a()),h(w,n())}),v(k,E)};W(p,k=>{t(i)===void 0?k(_):k(g,-1)})}v(r,f),ft()}var cx=y('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="best-receiver-confirm"> </button>',1),ux=y('<p class="hmm-best-receiver-empty svelte-1gd5w9r" data-testid="best-receiver-empty"> </p>'),fx=y('<tr><td class="svelte-1gd5w9r"><input type="checkbox"/></td><td class="svelte-1gd5w9r"> </td><td class="hmm-mono svelte-1gd5w9r"> </td><td class="svelte-1gd5w9r"> </td><td class="svelte-1gd5w9r"><!></td><td class="svelte-1gd5w9r"> </td><td class="svelte-1gd5w9r"><!></td><td class="hmm-best-receiver-gain svelte-1gd5w9r"> </td><td class="hmm-best-receiver-note svelte-1gd5w9r"><!></td></tr>'),hx=y('<div class="hmm-best-receiver-scroll svelte-1gd5w9r"><table class="hmm-best-receiver-table svelte-1gd5w9r"><thead><tr><th class="svelte-1gd5w9r"></th><th class="svelte-1gd5w9r"> </th><th class="svelte-1gd5w9r">ADDRESS</th><th class="svelte-1gd5w9r"> </th><th class="svelte-1gd5w9r">→ dBm</th><th class="svelte-1gd5w9r"> </th><th class="svelte-1gd5w9r">→ dBm</th><th class="svelte-1gd5w9r"> </th><th class="svelte-1gd5w9r"></th></tr></thead><tbody></tbody></table></div>'),mx=y('<p class="hmm-best-receiver-progress svelte-1gd5w9r" data-testid="best-receiver-progress"> </p>'),vx=y('<p class="hmm-best-receiver-intro svelte-1gd5w9r"> </p> <div class="hmm-best-receiver-margin svelte-1gd5w9r"><label class="svelte-1gd5w9r"><span> </span> <input class="hmm-input svelte-1gd5w9r" type="number" min="0" max="60" step="1" data-testid="best-receiver-margin"/> <span>dB</span></label> <span class="hmm-best-receiver-hint svelte-1gd5w9r"> </span></div> <!> <p class="hmm-best-receiver-rest svelte-1gd5w9r" data-testid="best-receiver-rest"> </p> <!>',1);function px(r,e){ut(e,!0);let n=H(e,"open",15,!1);const s=Ot(),a=s.i18n.t;let i=C(We(Cl)),o=C(We({})),l=C(!1),f=C(We({done:0,total:0}));const p=c(()=>s.app.selectedInterface),_=c(()=>s.devices.devices(t(p))),g=c(()=>s.radio.gateways(t(p))),k=c(()=>s.radio.proposeReceivers(t(p),t(_),t(i))),E=c(()=>t(k).filter(M=>M.verdict==="switch"||M.verdict==="marginal"||M.verdict==="unheard")),b=c(()=>({keep:t(k).filter(M=>M.verdict==="keep").length,unmeasured:t(k).filter(M=>M.verdict==="unmeasured").length,roaming:t(k).filter(M=>M.verdict==="roaming").length})),w=c(()=>t(E).filter(M=>x(M)));function x(M){return t(o)[M.address]??M.verdict==="switch"}function D(M){if(M===void 0||M==="")return"—";const z=t(g).find($=>$.ADDRESS===M);return z?Ua(z):M}function N(M){const z=Number.parseInt(M,10);u(i,Number.isFinite(z)?Math.max(0,z):Cl,!0),u(o,{},!0)}ot(()=>{n()&&(u(o,{},!0),u(f,{done:0,total:0},!0))});async function R(){const M=t(w).filter($=>$.best!==void 0);u(l,!0),u(f,{done:0,total:M.length},!0);let z=0;for(const $ of M)await s.radio.setBidcosInterface(t(p),$.address,$.best??"",!1)||(z+=1),u(f,{done:t(f).done+1,total:M.length},!0);await s.devices.load(t(p),{refresh:!0}),await s.radio.load(t(p)),u(o,{},!0),u(l,!1),z===0&&n(!1)}{const M=$=>{var le=cx(),fe=Ne(le),de=m(fe,!0),B=d(fe,2),oe=m(B,!0);S((K,X)=>{fe.disabled=t(l),h(de,K),B.disabled=t(l)||t(w).length===0,h(oe,X)},[()=>a("Cancel"),()=>a("Assign ({count})",{count:t(w).length})]),re("click",fe,()=>n(!1)),re("click",B,()=>{R()}),v($,le)};let z=c(()=>a("Best receiver"));En(r,{get title(){return t(z)},width:"800px",testId:"best-receiver-dialog",get open(){return n()},set open($){n($)},buttons:M,children:($,le)=>{var fe=vx(),de=Ne(fe),B=m(de,!0),oe=d(de,2),K=A(oe),X=A(K),se=m(X,!0),j=d(X,2),ne=d(K,2),ye=m(ne,!0),xe=d(oe,2);{var ie=be=>{var ee=ux(),he=m(ee,!0);S(G=>h(he,G),[()=>a("Every device is on the receiver that hears it best")]),v(be,ee)},Ae=be=>{var ee=hx(),he=A(ee),G=A(he),Q=A(G),q=d(A(Q)),Y=m(q,!0),ae=d(q,2),J=m(ae,!0),ve=d(ae,2),ge=m(ve,!0),te=d(ve,2),O=m(te,!0),U=d(G);Xe(U,21,()=>t(E),I=>I.address,(I,F)=>{var Ee=fx(),Ie=A(Ee),Me=A(Ie),Ve=d(Ie),ze=m(Ve,!0),nt=d(Ve),Ze=m(nt,!0),_e=d(nt),Se=m(_e,!0),V=d(_e),L=A(V);ga(L,{get value(){return t(F).configuredTx},labelOf:Fe=>a(Fe.label)});var Pe=d(V),Ge=m(Pe,!0),qe=d(Pe),we=A(qe);ga(we,{get value(){return t(F).bestTx},labelOf:Fe=>a(Fe.label)});var Ce=d(qe),Oe=m(Ce,!0),Be=d(Ce),pe=A(Be);{var De=Fe=>{var Ye=Cn();S(tt=>h(Ye,tt),[()=>a("Below the margin")]),v(Fe,Ye)},Ue=Fe=>{var Ye=Cn();S(tt=>h(Ye,tt),[()=>a("Not heard by the configured receiver")]),v(Fe,Ye)};W(pe,Fe=>{t(F).verdict==="marginal"?Fe(De):t(F).verdict==="unheard"&&Fe(Ue,1)})}S((Fe,Ye,tt,ht,ct)=>{T(Ee,"data-testid",`best-receiver-row-${t(F).address}`),T(Ee,"data-verdict",t(F).verdict),Pr(Me,Fe),Me.disabled=t(l),T(Me,"aria-label",t(F).address),T(Me,"data-testid",`best-receiver-check-${t(F).address}`),h(ze,Ye),h(Ze,t(F).address),h(Se,tt),h(Ge,ht),T(Ce,"data-testid",`best-receiver-gain-${t(F).address}`),h(Oe,ct)},[()=>x(t(F)),()=>s.nameOf(t(F).address),()=>D(t(F).configured),()=>D(t(F).best),()=>t(F).gain===void 0?"—":`+${String(t(F).gain)} dB`]),re("change",Me,Fe=>{u(o,{...t(o),[t(F).address]:Fe.currentTarget.checked},!0)}),v(I,Ee)}),S((I,F,Ee,Ie)=>{h(Y,I),h(J,F),h(ge,Ee),h(O,Ie)},[()=>a("Name"),()=>a("Configured"),()=>a("Proposed"),()=>a("Gain")]),v(be,ee)};W(xe,be=>{t(E).length===0?be(ie):be(Ae,-1)})}var Te=d(xe,2),me=m(Te,!0),P=d(Te,2);{var ce=be=>{var ee=mx(),he=m(ee,!0);S(G=>h(he,G),[()=>a("{done} of {total} assigned",t(f))]),v(be,ee)};W(P,be=>{t(l)&&be(ce)})}S((be,ee,he,G)=>{h(B,be),h(se,ee),ln(j,t(i)),j.disabled=t(l),h(ye,he),h(me,G)},[()=>a("Which interface receives each device best, from the levels the interfaces last measured. Nothing is written until you confirm; every device is one setBidcosInterface."),()=>a("Margin"),()=>a("A switch is proposed only when the best interface receives the device at least this much better than the configured one - two reads of the same link differ by a few dB."),()=>a("Not listed: {keep} on their best receiver, {unmeasured} without a measurement, {roaming} roaming",t(b))]),re("input",j,be=>N(be.currentTarget.value)),v($,fe)},$$slots:{buttons:!0,default:!0}})}ft()}Et(["click","input","change"]);const ka="ROUTER_MODULE_ENABLED",bo="ROUTING_TABLE";function gx(r){return r!==void 0&&Object.hasOwn(r,ka)}function bx(r){const e=r?.[ka];if(e!==void 0)return e===!0||e===1||e==="1"||e==="true"}function ya(r){return`${r}:0`}function dm(r,e){for(const n of[r,e])if(n!==void 0&&(ah(n.PARAMSETS)??[]).includes(bo))return n.ADDRESS}function _x(r){return{routing:r.filter(e=>e.enabled===!0).length,capable:r.length}}var Ex=y('<button type="button" class="hmm-button" data-testid="routing-switch-cancel"> </button> <button type="button" class="hmm-button" data-testid="routing-switch-confirm"> </button>',1),yx=y('<p class="hmm-routing-question svelte-1r9m9go" data-testid="routing-switch-text"> </p> <p class="hmm-routing-help svelte-1r9m9go"> </p> <p class="hmm-routing-help svelte-1r9m9go"> </p>',1);function Sx(r,e){ut(e,!0);let n=H(e,"open",15,!1);const a=Ot().i18n.t;function i(){n(!1),e.onconfirm()}{const o=f=>{var p=Ex(),_=Ne(p),g=m(_,!0),k=d(_,2),E=m(k,!0);S((b,w)=>{h(g,b),h(E,w)},[()=>a("Cancel"),()=>e.on?a("Switch on"):a("Switch off")]),re("click",_,()=>n(!1)),re("click",k,i),v(f,p)};let l=c(()=>e.on?a("Switch routing on?"):a("Switch routing off?"));En(r,{get title(){return t(l)},width:"460px",testId:"routing-switch-dialog",get open(){return n()},set open(f){n(f)},buttons:o,children:(f,p)=>{var _=yx(),g=Ne(_),k=m(g,!0),E=d(g,2),b=m(E,!0),w=d(E,2),x=m(w,!0);S((D,N)=>{h(k,e.name===e.address?e.address:`${e.name} (${e.address})`),h(b,D),h(x,N)},[()=>e.on?a("The device then forwards frames for other HmIP devices that cannot reach the access point directly. The routes of the network change over the next minutes."):a("Devices that reach the access point through this one have to find another route; until they do they may be unreachable."),()=>a("Writes ROUTER_MODULE_ENABLED = {value} to the MASTER paramset of {address}.",{value:e.on?"true":"false",address:`${e.address}:0`})]),v(f,_)},$$slots:{buttons:!0,default:!0}})}ft()}Et(["click"]);var wx=y('<button type="button" role="switch"><span class="hmm-routing-track svelte-13nj8dx" aria-hidden="true"><span class="hmm-routing-knob svelte-13nj8dx"></span></span> <span class="hmm-routing-label svelte-13nj8dx"> </span></button>'),kx=y('<button type="button" class="hmm-inline-button svelte-13nj8dx"> </button>'),Ax=y("<!> <!> <!>",1);function Tx(r,e){ut(e,!0);const n=Ot(),s=n.i18n.t;let a=C(We([])),i=C(!1),o=C(""),l=C(!1),f=C(!1),p=C("");const _=c(()=>n.devices.index(e.interfaceName)),g=c(()=>t(_)!==void 0);ot(()=>{const K=e.interfaceName;K!==""&&t(g)&&sr(()=>{n.routers.load(K)})});const k=c(()=>n.routers.routers(e.interfaceName)),E=c(()=>_x(t(k))),b=c(()=>Object.fromEntries(t(k).map(K=>[K.address,K.enabled]))),w=c(()=>t(k).map(K=>t(_)?.get(K.address)).filter(K=>K!==void 0)),x=c(()=>{const K=n.radio.gateways(e.interfaceName);return(K.find(X=>X.DEFAULT===!0)??K[0])?.ADDRESS??""});function D(K){const X=n.taxonomy,se=ne=>X.view(X.refOf(e.interfaceName,ne)),j=n.devices.channels(e.interfaceName,K.ADDRESS).map(ne=>se(ne.ADDRESS));return Kh(se(K.ADDRESS),j,"room").join(", ")}function N(K){return dm(K,t(_)?.get(ya(K.ADDRESS)))}function R(K){return s(K===void 0?"unknown":K?"on":"off")}const M=c(()=>[{key:"icon",label:"",width:Ba,fixed:!0,sortable:!1,filterable:!1,align:"center",value:()=>""},{key:"name",label:s("Name"),width:180,copy:"name",value:K=>n.nameOf(K.ADDRESS)},{key:"routing",label:s("Routing"),width:110,minWidth:90,keepMinWidth:!0,filterable:!1,value:K=>R(t(b)[K.ADDRESS])},{key:"rx",label:"← dBm",width:80,align:"right",filterable:!1,value:K=>n.radio.pair(e.interfaceName,K.ADDRESS,t(x))?.rx??""},{key:"tx",label:"→ dBm",width:80,align:"right",filterable:!1,value:K=>n.radio.pair(e.interfaceName,K.ADDRESS,t(x))?.tx??""},{key:"table",label:s("Routing table"),width:130,minWidth:110,keepMinWidth:!0,sortable:!1,filterable:!1,value:()=>""},{key:"ADDRESS",label:"ADDRESS",width:140,mono:!0,copy:"address"},{key:"TYPE",label:"TYPE",width:130},{key:"rooms",label:s("Rooms"),width:120,value:K=>D(K)}]);function z(K,X){u(o,K,!0),u(l,X,!0),u(i,!0)}function $(K){u(p,K,!0),u(f,!0)}const le=c(()=>n.routers.isLoading(e.interfaceName));var fe=Ax(),de=Ne(fe);{const K=Te=>{{let me=c(()=>s("Refresh"));Dt(Te,{get title(){return t(me)},icon:"⟳",get busy(){return t(le)},testId:"routers-refresh",onclick:()=>{n.routers.load(e.interfaceName),n.radio.load(e.interfaceName)}})}},X=(Te,me=Hn,P=Hn)=>{var ce=St(),be=Ne(ce);{var ee=Y=>{{let ae=c(()=>n.host.deviceImageUrl(me().TYPE));Ha(Y,{get deviceType(){return me().TYPE},get src(){return t(ae)}})}},he=Y=>{const ae=c(()=>n.radio.pair(e.interfaceName,me().ADDRESS,t(x)));{let J=c(()=>P().key==="rx"?t(ae)?.rx:t(ae)?.tx),ve=c(()=>`router-rssi-${me().ADDRESS}-${P().key}`);ga(Y,{get value(){return t(J)},labelOf:ge=>s(ge.label),get testId(){return t(ve)}})}},G=Y=>{const ae=c(()=>t(b)[me().ADDRESS]);var J=wx();let ve;var ge=d(A(J),2),te=m(ge,!0);S((O,U,I)=>{ve=_t(J,1,"hmm-routing-switch svelte-13nj8dx",null,ve,{"hmm-routing-on":t(ae)===!0}),T(J,"aria-checked",t(ae)===!0),T(J,"aria-label",O),T(J,"title",U),J.disabled=t(ae)===void 0||n.routers.writing!=="",T(J,"data-testid",`routing-switch-${me().ADDRESS}`),h(te,I)},[()=>`${s("Routing")} ${n.nameOf(me().ADDRESS)}`,()=>t(ae)===!0?s("Switch routing off"):s("Switch routing on"),()=>R(t(ae))]),re("click",J,O=>{O.stopPropagation(),z(me().ADDRESS,t(ae)!==!0)}),v(Y,J)},Q=Y=>{const ae=c(()=>N(me()));var J=kx(),ve=m(J,!0);S((ge,te)=>{J.disabled=t(ae)===void 0,T(J,"title",ge),T(J,"data-testid",`routing-table-${me().ADDRESS}`),h(ve,te)},[()=>t(ae)===void 0?s("The interface offers no routing table for this device"):s("Read once from the device itself: costs duty cycle"),()=>s("Routing table")]),re("click",J,ge=>{ge.stopPropagation(),t(ae)!==void 0&&$(t(ae))}),v(Y,J)},q=Y=>{var ae=Cn();S(J=>h(ae,J),[()=>P().value?P().value(me())??"":me()[P().key]??""]),v(Y,ae)};W(be,Y=>{P().key==="icon"?Y(ee):P().key==="rx"||P().key==="tx"?Y(he,1):P().key==="routing"?Y(G,2):P().key==="table"?Y(Q,3):Y(q,-1)})}v(Te,ce)};let se=c(()=>s("Routers")),j=c(()=>s("Filter")),ne=c(()=>t(le)?s("Reading…"):s("No device of this interface can route")),ye=c(()=>s("No row matches the filter")),xe=c(()=>s("Clear filter")),ie=c(()=>s("Routers")),Ae=c(()=>s("{routing} of {capable} route",{routing:t(E).routing,capable:t(E).capable},t(E).capable));Fs(de,{get rows(){return t(w)},get columns(){return t(M)},get scope(){return e.interfaceName},getId:Te=>Te.ADDRESS,get caption(){return t(se)},get filterLabel(){return t(j)},get emptyText(){return t(ne)},get noMatchText(){return t(ye)},get clearFilterLabel(){return t(xe)},showingText:(Te,me)=>s("Showing {shown} of {total}",{shown:Te,total:me}),get toolbarLabel(){return t(ie)},get countText(){return t(Ae)},tableId:"radio-routers",testId:"routers-table",get selected(){return t(a)},set selected(Te){u(a,Te,!0)},toolbar:K,cell:X,$$slots:{toolbar:!0,cell:!0}})}var B=d(de,2);{let K=c(()=>n.nameOf(t(o)));Sx(B,{get name(){return t(K)},get address(){return t(o)},get on(){return t(l)},onconfirm:()=>{n.routers.setRouting(e.interfaceName,t(o),t(l))},get open(){return t(i)},set open(X){u(i,X,!0)}})}var oe=d(B,2);am(oe,{get interfaceName(){return e.interfaceName},get address(){return t(p)},get paramset(){return bo},get open(){return t(f)},set open(K){u(f,K,!0)}}),v(r,fe),ft()}Et(["click"]);function Rx(r,e){const n=new Map,s=new Map;for(const a of r)n.set(a.ADDRESS.toUpperCase(),a.ADDRESS),typeof a.RF_ADDRESS=="number"&&!s.has(a.RF_ADDRESS)&&s.set(a.RF_ADDRESS,a.ADDRESS);if(e){n.set(e.id.toUpperCase(),e.id);for(const a of e.radioAddresses)s.set(a,e.id)}return a=>{const i=a.trim(),o=i.toUpperCase(),l=n.get(o);if(l!==void 0)return l;if(/^\d+$/.test(i)){const p=s.get(Number(i));if(p!==void 0)return p}const f=o.startsWith("0X")?o.slice(2):o;if(/^[0-9A-F]{1,6}$/.test(f)){const p=s.get(Number.parseInt(f,16));if(p!==void 0)return p}return i}}function xx(r,e){return r<e?`${r}|${e}`:`${e}|${r}`}function Dx(r){const e=r.resolve??(b=>b),n=r.accessPoint,s=new Set(r.accessPoints??[]),a=new Set([...r.tables.map(b=>b.router),...r.routers??[]]),i=new Map,o=new Map,l=[],f=(b,w)=>b===n||s.has(b)||w?.accessController===!0?"access-point":a.has(b)||w?.router===!0?"router":"device",p=(b,w,x)=>{if(b==="")return;const D=i.get(b),N=f(b,x);if(!D){i.set(b,{id:b,kind:N,listed:w});return}const R={device:0,router:1,"access-point":2};(w&&!D.listed||R[N]>R[D.kind])&&i.set(b,{id:b,kind:R[N]>R[D.kind]?N:D.kind,listed:D.listed||w})},_=b=>{if(b.from===b.to||b.from===""||b.to==="")return;const w=xx(b.from,b.to),x=o.get(w);(!x||x.assumed&&!b.assumed||!b.assumed&&x.distance===void 0&&b.distance!==void 0||!b.assumed&&b.distance!==void 0&&x.distance!==void 0&&b.distance<x.distance)&&o.set(w,b)};p(n,!0);for(const b of s)p(b,!1);for(const b of a)p(b,!0);for(const b of r.tables){const w=b.router;for(const x of b.entries){const D=e(x.destination),N=x.nextHop===""?D:e(x.nextHop);if(D===w)continue;p(D,!0,x);const R=x.isNeighbour||N===D;l.push({router:w,destination:D,nextHop:N,distance:x.distance,rssi:x.rssi,neighbour:R,isStatic:x.isStatic}),R?_({from:w,to:D,distance:x.distance,rssi:x.rssi,isStatic:x.isStatic,assumed:!1}):(p(N,!0),_({from:w,to:N,isStatic:x.isStatic,assumed:!1}),_({from:N,to:D,isStatic:x.isStatic,assumed:!1}))}}const g=b=>[...o.values()].some(w=>w.from===b||w.to===b),k=()=>{const b=new Set([...i.values()].filter(x=>x.kind==="access-point").map(x=>x.id)),w=[...b];for(;w.length>0;){const x=w.shift()??"";for(const D of o.values()){const N=D.from===x?D.to:D.to===x?D.from:void 0;N!==void 0&&!D.assumed&&!b.has(N)&&(b.add(N),w.push(N))}}return b};for(const b of s)g(b)||_({from:n,to:b,isStatic:!1,assumed:!0});const E=k();for(const b of a)E.has(b)||_({from:n,to:b,isStatic:!1,assumed:!0});for(const b of r.devices)b!==n&&(p(b,!1),g(b)||_({from:n,to:b,isStatic:!1,assumed:!0}));return{accessPoint:n,nodes:[...i.values()],edges:[...o.values()],routes:l}}function Ix(r,e){const n=e/2,s=new Map;s.set(r.accessPoint,{x:n,y:n,ring:0});const a=new Map;for(const E of r.edges)a.set(E.from,[...a.get(E.from)??[],E.to]),a.set(E.to,[...a.get(E.to)??[],E.from]);const i=new Map([[r.accessPoint,0]]),o=new Map,l=[r.accessPoint];for(;l.length>0;){const E=l.shift()??"";for(const b of[...a.get(E)??[]].sort())i.has(b)||(i.set(b,(i.get(E)??0)+1),o.set(b,E),l.push(b))}const f=r.nodes.map(E=>E.id).filter(E=>!i.has(E));for(const E of f)i.set(E,1);const p=Math.max(1,...i.values()),_=E=>{const b=r.nodes.find(w=>w.id===E)?.kind;return b==="access-point"?0:b==="router"?1:2},g=E=>p===1?e*.38:e*(.17+.27*(E-1)/(p-1)),k=new Map([[r.accessPoint,-Math.PI/2]]);for(let E=1;E<=p;E+=1){const b=[...i.entries()].filter(([,x])=>x===E).map(([x])=>x);if(E===1)b.sort((x,D)=>_(x)-_(D)||x.localeCompare(D)),b.forEach((x,D)=>{k.set(x,-Math.PI/2+2*Math.PI*D/Math.max(b.length,1))});else{const x=new Map;for(const N of b.sort((R,M)=>_(R)-_(M)||R.localeCompare(M))){const R=o.get(N)??r.accessPoint;x.set(R,[...x.get(R)??[],N])}const D=Math.min(2*Math.PI/Math.max(b.length,1),Math.max(.45,130/g(E)));for(const[N,R]of x){const M=k.get(N)??-Math.PI/2;R.forEach((z,$)=>{k.set(z,M+($-(R.length-1)/2)*D)})}}const w=g(E);for(const x of b){const D=k.get(x)??0;s.set(x,{x:n+w*Math.cos(D),y:n+w*Math.sin(D),ring:E})}}return s}var Nx=y('<p class="hmm-router-table-error svelte-ilqi1h" data-testid="router-table-error"> </p>');function Cx(r,e){ut(e,!0);let n=H(e,"open",15,!1);const s=Ot(),a=s.i18n.t,i=c(()=>s.nameOf(e.router));{let o=c(()=>`${a("Routing table")}: ${t(i)===e.router?e.router:`${t(i)} (${e.router})`}`);En(r,{get title(){return t(o)},width:"720px",height:"80vh",minWidth:320,movable:!0,testId:"router-table-dialog",get open(){return n()},set open(l){n(l)},children:(l,f)=>{var p=St(),_=Ne(p);{var g=E=>{sm(E,{get self(){return e.router},get cached(){return e.table.entries},get readAt(){return e.table.readAt}})},k=E=>{var b=Nx(),w=m(b,!0);S(x=>h(w,x),[()=>a("The router did not answer: {error}",{error:e.table.error})]),v(E,b)};W(_,E=>{e.table?.entries?E(g):e.table?.error!==void 0&&E(k,1)})}v(l,p)},$$slots:{default:!0}})}ft()}var Px=y('<p class="hmm-network-failures svelte-w40n2d" data-testid="routing-read-failures"> </p>'),Mx=Mr('<text class="hmm-network-edge-text svelte-w40n2d"> </text>'),Ox=Mr("<line></line><!>",1),Lx=Mr('<text text-anchor="middle" class="hmm-network-mark svelte-w40n2d"> </text>'),Fx=Mr('<g role="button" tabindex="0"><title> </title><circle class="svelte-w40n2d"></circle><!><text text-anchor="middle" class="hmm-network-label svelte-w40n2d"> </text></g>'),Gx=y('<tr><td class="svelte-w40n2d"> </td><td class="svelte-w40n2d"> </td><td class="svelte-w40n2d"> </td><td class="hmm-network-num svelte-w40n2d"> </td><td class="hmm-network-num svelte-w40n2d"> </td></tr>'),Ux=y('<tr><td colspan="5" class="hmm-network-empty svelte-w40n2d"> </td></tr>'),Bx=y('<div class="hmm-network svelte-w40n2d" data-testid="routing-network"><div class="hmm-network-bar svelte-w40n2d"><button type="button" class="hmm-button" data-testid="routing-read"> </button> <span class="hmm-network-status svelte-w40n2d" data-testid="routing-read-status" aria-live="polite"><!></span></div> <p class="hmm-network-hint svelte-w40n2d"> </p> <!> <div class="hmm-network-body svelte-w40n2d"><figure class="hmm-network-figure svelte-w40n2d"><svg class="hmm-network-graph svelte-w40n2d" role="img" data-testid="routing-graph"><!><!></svg> <figcaption class="hmm-network-legend svelte-w40n2d" data-testid="routing-legend"><span class="svelte-w40n2d"><span class="hmm-legend-dot hmm-legend-ap svelte-w40n2d"></span> </span> <span class="svelte-w40n2d"><span class="hmm-legend-dot hmm-legend-router svelte-w40n2d"></span> </span> <span class="svelte-w40n2d"><span class="hmm-legend-dot hmm-legend-device svelte-w40n2d"></span> </span> <span class="svelte-w40n2d"><span class="hmm-legend-line svelte-w40n2d"></span> </span> <span class="svelte-w40n2d"><span class="hmm-legend-line hmm-legend-assumed svelte-w40n2d"></span> </span></figcaption></figure> <div class="hmm-network-table-wrap svelte-w40n2d"><table class="hmm-network-table svelte-w40n2d" data-testid="routing-routes"><caption class="svelte-w40n2d"> </caption><thead><tr><th scope="col" class="svelte-w40n2d"> </th><th scope="col" class="svelte-w40n2d"> </th><th scope="col" class="svelte-w40n2d"> </th><th scope="col" class="svelte-w40n2d"> </th><th scope="col" class="svelte-w40n2d">RSSI</th></tr></thead><tbody></tbody></table></div></div></div> <!>',1);function Hx(r,e){ut(e,!0);const n=Ot(),s=n.i18n.t;let a=C(!1),i=C(""),o=C("");const l=640,f=c(()=>n.devices.index(e.interfaceName)!==void 0);ot(()=>{const pe=e.interfaceName;pe!==""&&t(f)&&sr(()=>{n.routers.ensure(pe)})});const p=c(()=>n.devices.devices(e.interfaceName)),_=c(()=>t(p).find(pe=>pe.TYPE==="HmIP-RCV-50")),g=pe=>pe.TYPE==="HmIP-RCV-50"||t(_)?.RF_ADDRESS!==void 0&&pe.RF_ADDRESS===t(_).RF_ADDRESS,k=pe=>/^HmIPW?-(HAP|DRAP)/i.test(pe.TYPE),E=c(()=>{const pe=n.radio.gateways(e.interfaceName);return pe.find(De=>De.DEFAULT===!0)??pe[0]}),b=c(()=>t(E)?.ADDRESS??t(_)?.ADDRESS??"AP"),w=c(()=>n.routers.tablesOf(e.interfaceName)),x=c(()=>n.routers.tableProgress[e.interfaceName]),D=c(()=>n.routers.tableTargets(e.interfaceName)),N=c(()=>n.routers.routers(e.interfaceName).filter(pe=>pe.enabled===!0).map(pe=>pe.address)),R=c(()=>{const pe=t(p).filter(Fe=>g(Fe)),De=Rx(t(p),{id:t(b),radioAddresses:pe.flatMap(Fe=>Fe.RF_ADDRESS===void 0?[]:[Fe.RF_ADDRESS])}),Ue=Object.entries(t(w)?.tables??{}).flatMap(([Fe,Ye])=>Ye.entries?[{router:Fe,entries:Ye.entries}]:[]);return Dx({accessPoint:t(b),tables:Ue,devices:t(p).filter(Fe=>!g(Fe)).map(Fe=>Fe.ADDRESS),accessPoints:t(p).filter(Fe=>k(Fe)).map(Fe=>Fe.ADDRESS),routers:t(N),resolve:De})}),M=c(()=>Ix(t(R),l)),z=pe=>t(M).get(pe)??{x:l/2,y:l/2};function $(pe){if(pe===t(b))return t(E)?.TYPE??s("Access point");const De=n.nameOf(pe);return De===""?pe:De}function le(pe){return pe.length>18?`${pe.slice(0,17)}…`:pe}function fe(pe){const De=[];return pe.distance!==void 0&&pe.distance>1&&De.push(`${String(pe.distance)} ${s("hops",{},pe.distance)}`),pe.rssi!==void 0&&De.push(`${String(pe.rssi)} dBm`),De.join(", ")}function de(pe){return pe.kind==="access-point"?s("Access point"):pe.kind==="router"?s("Router"):s("Device")}function B(pe){if(t(w)?.tables[pe.id]!==void 0){u(i,pe.id,!0),u(a,!0);return}u(o,t(o)===pe.id?"":pe.id,!0)}const oe=c(()=>[...t(R).routes].sort((pe,De)=>{const Ue=t(o)!==""&&(pe.destination===t(o)||pe.router===t(o))?0:1,Fe=t(o)!==""&&(De.destination===t(o)||De.router===t(o))?0:1;return Ue-Fe||$(pe.destination).localeCompare($(De.destination))||pe.distance-De.distance})),K=c(()=>Object.entries(t(w)?.tables??{}).filter(([,pe])=>pe.error!==void 0));var X=Bx(),se=Ne(X),j=A(se),ne=A(j),ye=m(ne,!0),xe=d(ne,2),ie=A(xe);{var Ae=pe=>{var De=Cn();S(Ue=>h(De,Ue),[()=>s("Reading {done} of {total}…",{done:t(x).done+1,total:t(x).total})]),v(pe,De)},Te=pe=>{var De=Cn();S(Ue=>h(De,Ue),[()=>s("Last read {time}",{time:ca(t(w).readAt,n.i18n.language)})]),v(pe,De)},me=pe=>{var De=Cn();S(Ue=>h(De,Ue),[()=>s("Not read yet: the graph shows every device directly at the access point.")]),v(pe,De)};W(ie,pe=>{t(x)!==void 0?pe(Ae):t(w)!==void 0?pe(Te,1):pe(me,-1)})}var P=d(j,2),ce=m(P,!0),be=d(P,2);{var ee=pe=>{var De=Px(),Ue=m(De);S((Fe,Ye)=>h(Ue,`${Fe??""}: ${Ye??""}`),[()=>s("Not answered"),()=>t(K).map(([Fe])=>$(Fe)).join(", ")]),v(pe,De)};W(be,pe=>{t(K).length>0&&pe(ee)})}var he=d(be,2),G=A(he),Q=A(G),q=A(Q);Xe(q,17,()=>t(R).edges,pe=>`${pe.from}|${pe.to}`,(pe,De)=>{const Ue=c(()=>z(t(De).from)),Fe=c(()=>z(t(De).to));var Ye=Ox(),tt=Ne(Ye);let ht;var ct=d(tt);{var ke=$e=>{var at=Mx(),lt=m(at,!0);S(Je=>{T(at,"x",(t(Ue).x+t(Fe).x)/2),T(at,"y",(t(Ue).y+t(Fe).y)/2-4),h(lt,Je)},[()=>fe(t(De))]),v($e,at)},Le=c(()=>!t(De).assumed&&fe(t(De))!=="");W(ct,$e=>{t(Le)&&$e(ke)})}S(()=>{T(tt,"x1",t(Ue).x),T(tt,"y1",t(Ue).y),T(tt,"x2",t(Fe).x),T(tt,"y2",t(Fe).y),ht=_t(tt,0,"hmm-network-edge svelte-w40n2d",null,ht,{"hmm-network-assumed":t(De).assumed,"hmm-network-static":t(De).isStatic,"hmm-network-focus":t(o)!==""&&(t(De).from===t(o)||t(De).to===t(o))}),T(tt,"data-testid",`edge-${t(De).from}-${t(De).to}`)}),v(pe,Ye)});var Y=d(q);Xe(Y,17,()=>t(R).nodes,pe=>pe.id,(pe,De)=>{const Ue=c(()=>z(t(De).id));var Fe=Fx();let Ye;var tt=A(Fe),ht=m(tt,!0),ct=d(tt),ke=d(ct);{var Le=lt=>{var Je=Lx(),Pt=m(Je,!0);S(()=>{T(Je,"x",t(Ue).x),T(Je,"y",t(Ue).y+4),h(Pt,t(De).kind==="access-point"?"AP":"R")}),v(lt,Je)};W(ke,lt=>{t(De).kind!=="device"&&lt(Le)})}var $e=d(ke),at=m($e,!0);S((lt,Je,Pt)=>{Ye=_t(Fe,0,`hmm-network-node hmm-network-${t(De).kind??""}`,"svelte-w40n2d",Ye,{"hmm-network-focus":t(o)===t(De).id}),T(Fe,"aria-label",lt),T(Fe,"data-testid",`node-${t(De).id}`),h(ht,Je),T(ct,"cx",t(Ue).x),T(ct,"cy",t(Ue).y),T(ct,"r",t(De).kind==="access-point"?20:t(De).kind==="router"?15:10),T($e,"x",t(Ue).x),T($e,"y",t(Ue).y+(t(De).kind==="access-point"?34:t(De).kind==="router"?28:22)),h(at,Pt)},[()=>`${de(t(De))} ${$(t(De).id)}`,()=>`${$(t(De).id)} (${t(De).id})`,()=>le($(t(De).id))]),re("click",Fe,()=>B(t(De))),re("keydown",Fe,lt=>{(lt.key==="Enter"||lt.key===" ")&&(lt.preventDefault(),B(t(De)))}),v(pe,Fe)});var ae=d(Q,2),J=A(ae),ve=d(A(J),1,!0),ge=d(J,2),te=d(A(ge),1,!0),O=d(ge,2),U=d(A(O),1,!0),I=d(O,2),F=d(A(I),1,!0),Ee=d(I,2),Ie=d(A(Ee),1,!0),Me=d(G,2),Ve=A(Me),ze=A(Ve),nt=m(ze,!0),Ze=d(ze),_e=A(Ze),Se=A(_e),V=m(Se,!0),L=d(Se),Pe=m(L,!0),Ge=d(L),qe=m(Ge,!0),we=d(Ge),Ce=m(we,!0),Oe=d(Ze);Xe(Oe,23,()=>t(oe),(pe,De)=>`${pe.router}|${pe.destination}|${String(De)}`,(pe,De)=>{var Ue=Gx();let Fe;var Ye=A(Ue),tt=m(Ye,!0),ht=d(Ye),ct=m(ht,!0),ke=d(ht),Le=m(ke,!0),$e=d(ke),at=m($e,!0),lt=d($e),Je=m(lt,!0);S((Pt,Tt,Lt,Qt)=>{T(Ue,"data-testid",`route-row-${t(De).router}-${t(De).destination}`),Fe=_t(Ue,1,"svelte-w40n2d",null,Fe,{"hmm-network-row-focus":t(o)!==""&&(t(De).destination===t(o)||t(De).router===t(o))}),T(Ye,"title",t(De).destination),h(tt,Pt),T(ht,"title",t(De).router),h(ct,Tt),T(ke,"title",t(De).nextHop),h(Le,Lt),h(at,t(De).distance),h(Je,Qt)},[()=>$(t(De).destination),()=>$(t(De).router),()=>t(De).neighbour?"—":$(t(De).nextHop),()=>t(De).rssi===void 0?"":`${String(t(De).rssi)} dBm`]),v(pe,Ue)},pe=>{var De=Ux(),Ue=A(De),Fe=m(Ue,!0);S(Ye=>h(Fe,Ye),[()=>s("No routes read yet")]),v(pe,De)});var Be=d(se,2);{let pe=c(()=>t(w)?.tables[t(i)]);Cx(Be,{get router(){return t(i)},get table(){return t(pe)},get open(){return t(a)},set open(De){u(a,De,!0)}})}S((pe,De,Ue,Fe,Ye,tt,ht,ct,ke,Le,$e,at,lt,Je,Pt)=>{ne.disabled=t(x)!==void 0||t(D).length===0,T(ne,"title",pe),h(ye,De),h(ce,Ue),T(Q,"viewBox",Fe),T(Q,"aria-label",Ye),h(ve,tt),h(te,ht),h(U,ct),h(F,ke),h(Ie,Le),h(nt,$e),h(V,at),h(Pe,lt),h(qe,Je),h(Ce,Pt)},[()=>t(D).length===0?s("No router that routes offers its routing table"):s("Each table is read from its router over the air, one after the other"),()=>s("Read routing tables"),()=>s("Each router is asked once per read, over the air, with a pause between them; the result is kept until the next read. Entries of battery devices are what the router last heard and may be stale."),()=>`0 0 ${String(l)} ${String(l)}`,()=>s("Routing graph"),()=>s("Access point"),()=>s("Router"),()=>s("Device"),()=>s("Route from a table"),()=>s("Assumed: no table lists it"),()=>s("Routes"),()=>s("Destination"),()=>s("Router"),()=>s("Next hop"),()=>s("Hops")]),re("click",ne,()=>{n.routers.readTables(e.interfaceName)}),v(r,X),ft()}Et(["click","keydown"]);var Vx=y('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="set-interface-confirm"> </button>',1),zx=y("<option> </option>"),jx=y('<span class="hmm-set-interface-name svelte-1s1hrfj"> </span>'),Wx=y('<tr><td class="hmm-set-interface-mark svelte-1s1hrfj"> </td><td class="svelte-1s1hrfj"><span class="hmm-mono"> </span> <!></td><td class="svelte-1s1hrfj"><!></td><td class="svelte-1s1hrfj"><!></td></tr>'),Kx=y('<p class="hmm-set-interface-best-note svelte-1s1hrfj" data-testid="set-interface-best"> </p>'),Yx=y('<table class="hmm-set-interface-table svelte-1s1hrfj"><thead><tr><th class="svelte-1s1hrfj"></th><th class="svelte-1s1hrfj"> </th><th class="svelte-1s1hrfj">← dBm</th><th class="svelte-1s1hrfj">→ dBm</th></tr></thead><tbody></tbody></table> <!>',1),qx=y('<p class="hmm-set-interface-device svelte-1s1hrfj"> <span class="hmm-mono"> </span></p> <p class="hmm-set-interface-current svelte-1s1hrfj"> <span class="hmm-mono" data-testid="set-interface-current"> </span></p> <label class="hmm-set-interface-row svelte-1s1hrfj"><span> </span> <select class="hmm-select" data-testid="set-interface-select"></select></label> <label class="hmm-set-interface-row svelte-1s1hrfj"><span>ROAMING</span> <input type="checkbox" data-testid="set-interface-roaming"/></label> <!>',1);function $x(r,e){ut(e,!0);let n=H(e,"open",15,!1),s=H(e,"address",3,""),a=H(e,"preset",3,"");const i=Ot(),o=i.i18n.t;let l=C(""),f=C(!1),p=C(!1);const _=c(()=>i.app.selectedInterface),g=c(()=>i.devices.index(t(_))?.get(s())),k=c(()=>i.radio.gateways(t(_))),E=c(()=>i.radio.bestGatewayFor(t(_),s())),b=c(()=>t(g)?.INTERFACE??"");ot(()=>{if(!n())return;const x=t(k).some(D=>D.ADDRESS===a());u(l,x?a():t(g)?.INTERFACE??t(k)[0]?.ADDRESS??"",!0),u(f,t(g)===void 0?!1:kd(t(g)),!0)});async function w(){u(p,!0);const x=await i.radio.setBidcosInterface(t(_),s(),t(l),t(f));x&&await i.devices.load(t(_),{refresh:!0}),u(p,!1),x&&n(!1)}En(r,{title:"setBidcosInterface",width:"560px",testId:"set-interface-dialog",get open(){return n()},set open(D){n(D)},buttons:D=>{var N=Vx(),R=Ne(N),M=m(R,!0),z=d(R,2),$=m(z,!0);S((le,fe)=>{h(M,le),z.disabled=t(p)||t(l)==="",h($,fe)},[()=>o("Cancel"),()=>o("Apply")]),re("click",R,()=>n(!1)),re("click",z,()=>{w()}),v(D,N)},children:(D,N)=>{var R=qx(),M=Ne(R),z=A(M),$=d(z),le=m($,!0),fe=d(M,2),de=A(fe),B=d(de),oe=m(B,!0),K=d(fe,2),X=A(K),se=m(X,!0),j=d(X,2);Xe(j,21,()=>t(k),Ae=>Ae.ADDRESS,(Ae,Te)=>{var me=zx(),P=m(me),ce={};S(()=>{h(P,`${t(Te).ADDRESS??""}
20
+ ${t(Te).DESCRIPTION??t(Te).TYPE??""}`),ce!==(ce=t(Te).ADDRESS)&&(me.value=(me.__value=ce)??"")}),v(Ae,me)}),Xt(j);var ne=d(K,2),ye=d(A(ne),2),xe=d(ne,2);{var ie=Ae=>{var Te=Yx(),me=Ne(Te),P=A(me),ce=A(P),be=d(A(ce)),ee=m(be,!0),he=d(P);Xe(he,21,()=>t(k),q=>q.ADDRESS,(q,Y)=>{const ae=c(()=>i.radio.pair(t(_),s(),t(Y).ADDRESS));var J=Wx();let ve;var ge=A(J),te=m(ge,!0),O=d(ge),U=A(O),I=m(U,!0),F=d(U,2);{var Ee=Ze=>{var _e=jx(),Se=m(_e,!0);S(V=>h(Se,V),[()=>Ua(t(Y))]),v(Ze,_e)},Ie=c(()=>Ua(t(Y))!==t(Y).ADDRESS);W(F,Ze=>{t(Ie)&&Ze(Ee)})}var Me=d(O),Ve=A(Me);{let Ze=c(()=>t(ae)?.rx);ga(Ve,{get value(){return t(Ze)},labelOf:_e=>o(_e.label)})}var ze=d(Me),nt=A(ze);{let Ze=c(()=>t(ae)?.tx),_e=c(()=>`set-interface-tx-${t(Y).ADDRESS}`);ga(nt,{get value(){return t(Ze)},labelOf:Se=>o(Se.label),get testId(){return t(_e)}})}S(Ze=>{T(J,"data-testid",`set-interface-row-${t(Y).ADDRESS}`),T(J,"aria-current",t(b)===t(Y).ADDRESS?"true":void 0),ve=_t(J,1,"svelte-1s1hrfj",null,ve,{"hmm-set-interface-configured":t(b)===t(Y).ADDRESS}),T(ge,"title",Ze),h(te,t(b)===t(Y).ADDRESS?"◉":""),h(I,t(Y).ADDRESS)},[()=>t(b)===t(Y).ADDRESS?o("Configured"):void 0]),v(q,J)});var G=d(me,2);{var Q=q=>{var Y=Kx(),ae=m(Y,!0);S(J=>h(ae,J),[()=>o("Heard best by {address}",{address:t(E).address})]),v(q,Y)};W(G,q=>{t(E)&&q(Q)})}S(q=>h(ee,q),[()=>o("Interface")]),v(Ae,Te)};W(xe,Ae=>{t(k).length>0&&Ae(ie)})}S((Ae,Te,me)=>{h(z,`${Ae??""} `),h(le,s()),h(de,`${Te??""}: `),h(oe,t(b)===""?"—":t(b)),h(se,me)},[()=>i.nameOf(s()),()=>o("Configured"),()=>o("Interface")]),kr(j,()=>t(l),Ae=>u(l,Ae)),vr(ye,()=>t(f),Ae=>u(f,Ae)),v(D,R)},$$slots:{buttons:!0,default:!0}}),ft()}Et(["click"]);var Xx=y('<span class="hmm-radio-views-gap svelte-7f5yr6"></span> <button type="button" class="hmm-radio-view svelte-7f5yr6" data-testid="routers-mode-list"> </button> <button type="button" class="hmm-radio-view svelte-7f5yr6" data-testid="routers-mode-graph"> </button>',1),Qx=y('<div class="hmm-radio-views svelte-7f5yr6" role="group" data-testid="radio-views"><button type="button" class="hmm-radio-view svelte-7f5yr6" data-testid="radio-view-rssi"> </button> <button type="button" class="hmm-radio-view svelte-7f5yr6" data-testid="radio-view-routers"> </button> <!></div>'),Pu=y('<div class="hmm-page-grid svelte-7f5yr6"><!></div>'),Zx=y("<!> <!>",1),Jx=y("<!> <!> <!>",1),eD=y('<button type="button"> </button>'),tD=y('<div class="hmm-page svelte-7f5yr6"><div class="hmm-radio-gateways svelte-7f5yr6"><!></div> <!> <!></div> <!> <!>',1);function nD(r,e){ut(e,!0);const n=Ot(),s=n.i18n.t;let a=C(We([])),i=C(We([])),o=C(We([])),l=C(!1),f=C(!1),p=C(""),_=C("");const g=c(()=>n.app.selectedInterface),k=c(()=>n.radio.gateways(t(g))),E=c(()=>n.interfaces.typeOf(t(g)).startsWith("BidCos")),b=c(()=>n.interfaces.typeOf(t(g))==="HmIP-RF");let w=C("rssi"),x=C("list");const D=c(()=>t(b)?t(w):"rssi");function N(P,ce=""){u(p,P,!0),u(_,ce,!0),u(l,!0)}const R=c(()=>n.devices.devices(t(g))),M=c(()=>t(i).length===1?t(i)[0]??"":""),z=[{key:"ADDRESS",label:"ADDRESS",width:180,mono:!0,copy:"address"},{key:"DESCRIPTION",label:"DESCRIPTION",width:220},{key:"TYPE",label:"TYPE",width:130},{key:"FIRMWARE_VERSION",label:"FIRMWARE_VERSION",width:150},{key:"CONNECTED",label:"CONNECTED",width:110,align:"center",value:P=>P.CONNECTED===!0?"✔":"✕"},{key:"DEFAULT",label:"DEFAULT",width:90,align:"center",value:P=>P.DEFAULT===!0?"✔":""},{key:"DUTY_CYCLE",label:"DUTY_CYCLE",width:100,align:"right",value:P=>P.DUTY_CYCLE===void 0?"":`${P.DUTY_CYCLE} %`},{key:"CARRIER_SENSE_LEVEL",label:"CARRIER_SENSE_LEVEL",align:"right"}],$=c(()=>[{key:"icon",label:"",width:Ba,fixed:!0,sortable:!1,filterable:!1,align:"center",value:()=>""},{key:"name",label:s("Name"),width:180,copy:"name",value:P=>n.nameOf(P.ADDRESS)},{key:"ADDRESS",label:"ADDRESS",width:140,mono:!0,copy:"address"},{key:"TYPE",label:"TYPE",width:150},{key:"INTERFACE",label:"INTERFACE",width:140,mono:!0,hidden:!t(E)},{key:"RF_ADDRESS",label:"RF_ADDRESS",width:100,align:"right",value:P=>P.RF_ADDRESS===void 0?"":P.RF_ADDRESS.toString(16).toUpperCase()},{key:"ROAMING",label:"ROAMING",width:90,align:"center",hidden:!t(E),value:P=>kd(P)?"✔":""},{key:"unreach",label:s("Unreach"),width:90,align:"right",filterable:!1,value:P=>{const ce=n.unreach.countOf(t(g),P.ADDRESS);return ce===0?"":ce}},...t(k).flatMap(P=>[{key:`rx:${P.ADDRESS}`,label:"← dBm",width:90,align:"right",filterable:!1,value:ce=>n.radio.pair(t(g),ce.ADDRESS,P.ADDRESS)?.rx??""},{key:`tx:${P.ADDRESS}`,label:"→ dBm",width:90,align:"right",filterable:!1,value:ce=>n.radio.pair(t(g),ce.ADDRESS,P.ADDRESS)?.tx??""},{key:`set:${P.ADDRESS}`,label:"",hidden:!t(E),width:My,fixed:!0,align:"center",sortable:!1,filterable:!1,value:ce=>ce.INTERFACE===P.ADDRESS?"◉":""}])]),le=c(()=>t(k).map(P=>({key:P.ADDRESS,label:P.ADDRESS,sublabel:Ua(P)===P.ADDRESS?void 0:`(${Ua(P)})`,columns:t(E)?[`rx:${P.ADDRESS}`,`tx:${P.ADDRESS}`,`set:${P.ADDRESS}`]:[`rx:${P.ADDRESS}`,`tx:${P.ADDRESS}`]}))),fe=c(()=>[{key:"name",label:s("Name"),width:180,copy:"name",value:P=>n.nameOf(P.ADDRESS)},{key:"ADDRESS",label:s("Peer"),width:200,mono:!0,copy:"address"},{key:"rx",label:"← dBm",width:120,align:"right",filterable:!1,value:()=>""},{key:"tx",label:"→ dBm",width:120,align:"right",filterable:!1,value:()=>""}]);function de(P){const ce=n.devices.index(t(g));return n.radio.peersOf(t(g),P.ADDRESS).map(be=>ce?.get(be)??{ADDRESS:be,TYPE:"",PARENT:P.ADDRESS}).map(be=>({...be,PARENT:P.ADDRESS}))}function B(P){return n.devices.index(t(g))?.get(P)?.ADDRESS??P}async function oe(){await Promise.all([n.radio.load(t(g)),n.devices.load(t(g),{refresh:!0}),n.interfaces.load(),n.unreach.load()])}ot(()=>{const P=t(g);P!==""&&n.radio.ensureMatrix(P)}),ot(()=>{n.unreach.counters.length===0&&n.unreach.load()});var K=tD(),X=Ne(K),se=A(X),j=A(se);{let P=c(()=>s("Interfaces")),ce=c(()=>s("Filter")),be=c(()=>s("No data"));Fs(j,{get rows(){return t(k)},get columns(){return z},getId:ee=>ee.ADDRESS,height:110,columnFilterRow:!1,get caption(){return t(P)},get filterLabel(){return t(ce)},get emptyText(){return t(be)},tableId:"radio-interfaces",testId:"radio-gateways",get selected(){return t(a)},set selected(ee){u(a,ee,!0)}})}var ne=d(se,2);{var ye=P=>{var ce=Qx(),be=A(ce),ee=m(be,!0),he=d(be,2),G=m(he,!0),Q=d(he,2);{var q=Y=>{var ae=Xx(),J=d(Ne(ae),2),ve=m(J,!0),ge=d(J,2),te=m(ge,!0);S((O,U)=>{T(J,"aria-pressed",t(x)==="list"),h(ve,O),T(ge,"aria-pressed",t(x)==="graph"),h(te,U)},[()=>s("List"),()=>s("Graph")]),re("click",J,()=>u(x,"list")),re("click",ge,()=>u(x,"graph")),v(Y,ae)};W(Q,Y=>{t(D)==="routers"&&Y(q)})}S((Y,ae,J)=>{T(ce,"aria-label",Y),T(be,"aria-pressed",t(D)==="rssi"),h(ee,ae),T(he,"aria-pressed",t(D)==="routers"),h(G,J)},[()=>s("View"),()=>s("RSSI"),()=>s("Routers")]),re("click",be,()=>u(w,"rssi")),re("click",he,()=>u(w,"routers")),v(P,ce)};W(ne,P=>{t(b)&&P(ye)})}var xe=d(ne,2);{var ie=P=>{var ce=Pu(),be=A(ce);{var ee=G=>{Hx(G,{get interfaceName(){return t(g)}})},he=G=>{Tx(G,{get interfaceName(){return t(g)}})};W(be,G=>{t(x)==="graph"?G(ee):G(he,-1)})}v(P,ce)},Ae=P=>{var ce=Pu(),be=A(ce);{const ee=ge=>{var te=Jx(),O=Ne(te);{let Ee=c(()=>s("Refresh")),Ie=c(()=>n.radio.loading||n.devices.isLoading(t(g)));Dt(O,{get title(){return t(Ee)},icon:"⟳",get busy(){return t(Ie)},testId:"radio-refresh",onclick:()=>{oe()}})}var U=d(O,2);{var I=Ee=>{var Ie=Zx(),Me=Ne(Ie);{let ze=c(()=>t(M)===""),nt=c(()=>s("Select a device"));Dt(Me,{title:"setBidcosInterface",icon:"⇄",get disabled(){return t(ze)},get reason(){return t(nt)},testId:"radio-set-interface",onclick:()=>N(t(M))})}var Ve=d(Me,2);{let ze=c(()=>s("Assign the best receiver")),nt=c(()=>t(k).length<2),Ze=c(()=>s("Only one interface"));Dt(Ve,{get title(){return t(ze)},icon:"⇶",get disabled(){return t(nt)},get reason(){return t(Ze)},testId:"radio-best-receivers",onclick:()=>u(f,!0)})}v(Ee,Ie)};W(U,Ee=>{t(E)&&Ee(I)})}var F=d(U,2);{let Ee=c(()=>s("Reset the unreach counters")),Ie=c(()=>n.unreach.of(t(g)).length===0),Me=c(()=>s("No data"));Dt(F,{get title(){return t(Ee)},icon:"⟲",get disabled(){return t(Ie)},get reason(){return t(Me)},testId:"radio-reset-unreach",onclick:()=>{n.unreach.reset(t(g))}})}v(ge,te)},he=(ge,te=Hn,O=Hn,U=Hn)=>{var I=St(),F=Ne(I);{var Ee=_e=>{{let Se=c(()=>n.host.deviceImageUrl(te().TYPE));Ha(_e,{get deviceType(){return te().TYPE},get src(){return t(Se)}})}},Ie=_e=>{const Se=c(()=>n.radio.pair(t(g),B(U().rootId),te().ADDRESS));{let V=c(()=>O().key==="rx"?t(Se)?.rx:t(Se)?.tx),L=c(()=>`rssi-${U().rootId}-${te().ADDRESS}-${O().key}`);ga(_e,{get value(){return t(V)},labelOf:Pe=>s(Pe.label),get testId(){return t(L)}})}},Me=_e=>{const Se=c(()=>O().key.slice(4)),V=c(()=>te().INTERFACE===t(Se));var L=eD();let Pe;var Ge=m(L,!0);S(qe=>{Pe=_t(L,1,"hmm-receiver-mark svelte-7f5yr6",null,Pe,{"hmm-receiver-configured":t(V)}),T(L,"aria-pressed",t(V)),T(L,"title",qe),T(L,"data-testid",`receiver-${te().ADDRESS}-${t(Se)}`),h(Ge,t(V)?"◉":"○")},[()=>t(V)?`${s("Configured")}: ${t(Se)}`:s("Use {interface} as receiver",{interface:t(Se)})]),re("click",L,qe=>{qe.stopPropagation(),N(te().ADDRESS,t(Se))}),v(_e,L)},Ve=c(()=>O().key.startsWith("set:")&&U().depth===0),ze=_e=>{const Se=c(()=>O().key.slice(3)),V=c(()=>n.radio.pair(t(g),te().ADDRESS,t(Se)));{let L=c(()=>O().key.startsWith("rx:")?t(V)?.rx:t(V)?.tx),Pe=c(()=>`rssi-${te().ADDRESS}-${t(Se)}-${O().key.slice(0,2)}`);ga(_e,{get value(){return t(L)},labelOf:Ge=>s(Ge.label),get testId(){return t(Pe)}})}},nt=c(()=>O().key.startsWith("rx:")||O().key.startsWith("tx:")),Ze=_e=>{var Se=Cn();S(V=>h(Se,V),[()=>O().value?O().value(te())??"":te()[O().key]??""]),v(_e,Se)};W(F,_e=>{O().key==="icon"?_e(Ee):U().depth>0&&(O().key==="rx"||O().key==="tx")?_e(Ie,1):t(Ve)?_e(Me,2):t(nt)?_e(ze,3):_e(Ze,-1)})}v(ge,I)};let G=c(()=>s("RSSI")),Q=c(()=>s("Filter")),q=c(()=>s("No data")),Y=c(()=>s("No row matches the filter")),ae=c(()=>s("Clear filter")),J=c(()=>s("RSSI")),ve=c(()=>s("{count} devices",{},t(R).length));Fs(be,{get rows(){return t(R)},get columns(){return t($)},get columnGroups(){return t(le)},get subColumns(){return t(fe)},get scope(){return t(g)},getId:ge=>ge.ADDRESS,subRows:de,get caption(){return t(G)},get filterLabel(){return t(Q)},get emptyText(){return t(q)},get noMatchText(){return t(Y)},get clearFilterLabel(){return t(ae)},showingText:(ge,te)=>s("Showing {shown} of {total}",{shown:ge,total:te}),onactivate:ge=>N(ge.ADDRESS),get toolbarLabel(){return t(J)},get countText(){return t(ve)},tableId:"radio",subTableId:"radio-peers",testId:"radio-table",get selected(){return t(i)},set selected(ge){u(i,ge,!0)},get expanded(){return t(o)},set expanded(ge){u(o,ge,!0)},toolbar:ee,cell:he,$$slots:{toolbar:!0,cell:!0}})}v(P,ce)};W(xe,P=>{t(D)==="routers"?P(ie):P(Ae,-1)})}var Te=d(X,2);$x(Te,{get address(){return t(p)},get preset(){return t(_)},get open(){return t(l)},set open(P){u(l,P,!0)}});var me=d(Te,2);px(me,{get open(){return t(f)},set open(P){u(f,P,!0)}}),v(r,K),ft()}Et(["click"]);function rD(r,e,n=[]){const s=new Map;for(const _ of r)s.set(_.interfaceName,(s.get(_.interfaceName)??0)+1);const a=[...new Set([...n,...s.keys()])],i=s.get(e)??0,o=a.filter(_=>_!==e&&(s.get(_)??0)>0).map(_=>({interfaceName:_,count:s.get(_)??0})),l=a.indexOf(e),p=[...a.slice(l+1),...a.slice(0,Math.max(l,0))].find(_=>o.some(g=>g.interfaceName===_));return{own:i,total:r.length,others:o,next:p}}var sD=y('<button type="button" class="hmm-total-button svelte-u6ol56" data-testid="messages-total"> </button>'),aD=y("<!> <!> <!>",1),il=y("<span> </span>"),iD=y('<button type="button" class="hmm-inline-button svelte-u6ol56"> </button> <span hidden=""> </span>',1),oD=y('<div class="hmm-page svelte-u6ol56"><div class="hmm-page-grid svelte-u6ol56"><!></div></div>');function lD(r,e){ut(e,!0);const n=Ot(),s=n.i18n.t;let a=C(We([])),i=C(!1);const o=c(()=>n.app.selectedInterface),l=c(()=>n.interfaces.typeOf(t(o)).startsWith("BidCos")),f=c(()=>!t(l)&&_i(t(o),n.interfaces.typeOf(t(o)))),p=c(()=>n.serviceMessages.of(t(o))),_=c(()=>n.serviceMessages.acknowledgeable(t(o))),g=c(()=>t(p).filter(B=>t(a).includes(w(B)))),k=c(()=>t(g).filter(B=>vo(B.datapoint))),E=c(()=>rD(n.serviceMessages.messages,t(o),n.interfaces.states.map(B=>B.name))),b=c(()=>t(E).next===void 0?"":s("Also on this box: {list}. Click to switch to {next}.",{list:t(E).others.map(B=>`${B.interfaceName} (${String(B.count)})`).join(", "),next:t(E).next}));function w(B){return`${B.address}/${B.datapoint}`}function x(B,oe){return oe?s("The CCU reports {datapoint} for this channel again: lifts the suppression (suppressServiceMessages with suppress=false).",{datapoint:B.datapoint}):s("The CCU stops reporting {datapoint} for this channel: the HmIP interface reports a value that raises no message (suppressServiceMessages). The device's other messages are not affected. Undo with “Unsuppress”.",{datapoint:B.datapoint})}function D(B){return n.devices.index(t(o))?.get(Fa(B))?.TYPE??""}ot(()=>{t(f)&&t(p).length>0&&n.serviceMessages.loadSuppressed(t(o))}),ot(()=>{t(p).some(B=>typeof B.value=="number")&&n.serviceMessages.loadDescriptions(t(o))});function N(B){const oe=n.serviceMessages.valueName(B);if(oe===void 0)return uo(B.value);const K=n.devices.index(t(o))?.get(B.address)?.TYPE??"";return n.meta.valueLabel(B.datapoint,oe,K)}function R(B){const oe=n.serviceMessages.valueName(B);return oe===void 0?void 0:`${oe} (${uo(B.value)})`}async function M(B,oe){u(i,!0);const K=await n.serviceMessages.suppress(t(o),B.address,B.datapoint,oe);u(i,!1),K&&n.notices.push("info",`suppressServiceMessages ${B.address} ${B.datapoint} = ${oe?"true":"false"}`)}const z=c(()=>[{key:"icon",label:"",width:Ba,fixed:!0,sortable:!1,filterable:!1,align:"center",value:()=>""},{key:"name",label:s("Name"),width:220,copy:"name",value:B=>n.nameOf(B.address)},{key:"address",label:"ADDRESS",width:160,mono:!0,copy:"address"},{key:"device",label:`${s("Device")} ADDRESS`,width:140,mono:!0,value:B=>Fa(B.address)},{key:"datapoint",label:s("Message"),width:180},{key:"value",label:s("Value"),width:160,value:N},{key:"explanation",label:"",sortable:!1,value:B=>{const oe=zh(B.datapoint,!t(l));return oe===void 0?"":s(oe)}},{key:"since",label:s("Since"),width:170,value:B=>ca(B.since)},...t(f)?[{key:"suppress",label:"",width:iu,minWidth:iu,keepMinWidth:!0,sortable:!1,filterable:!1,value:B=>n.serviceMessages.isSuppressed(B)?s("suppressed"):""}]:[]]);async function $(B){u(i,!0);const oe=await n.serviceMessages.acknowledgeMany(B);u(i,!1),n.notices.push("info",s("{count} service messages",{},oe))}var le=oD(),fe=A(le),de=A(fe);{const B=xe=>{var ie=St(),Ae=Ne(ie);{var Te=me=>{const P=c(()=>t(E).next);mi(me,{get text(){return t(b)},testId:"messages-total-tooltip",children:(ce,be)=>{var ee=sD(),he=m(ee,!0);S(G=>h(he,G),[()=>s("{count} of {total} on this box",{total:t(E).total},t(E).own)]),re("click",ee,()=>{n.selectInterface(t(P))}),v(ce,ee)},$$slots:{default:!0}})};W(Ae,me=>{t(E).next!==void 0&&me(Te)})}v(xe,ie)},oe=xe=>{var ie=aD(),Ae=Ne(ie);{let P=c(()=>s("Refresh"));Dt(Ae,{get title(){return t(P)},icon:"⟳",get busy(){return n.serviceMessages.loading},testId:"messages-refresh",onclick:()=>{n.serviceMessages.refresh(t(o))}})}var Te=d(Ae,2);{let P=c(()=>s("Acknowledge service messages")),ce=c(()=>t(i)||t(k).length===0),be=c(()=>s("Only STICKY_UNREACH and SABOTAGE can be acknowledged"));Dt(Te,{get title(){return t(P)},icon:"✔",get disabled(){return t(ce)},get reason(){return t(be)},testId:"messages-ack",onclick:()=>{$(t(k))}})}var me=d(Te,2);{let P=c(()=>s("Acknowledge all service messages")),ce=c(()=>t(i)||t(_).length===0),be=c(()=>s("Only STICKY_UNREACH and SABOTAGE can be acknowledged"));Dt(me,{get title(){return t(P)},icon:"✔✔",get disabled(){return t(ce)},get reason(){return t(be)},testId:"messages-ack-all",onclick:()=>{$(t(_))}})}v(xe,ie)},K=(xe,ie=Hn,Ae=Hn)=>{var Te=St(),me=Ne(Te);{var P=Q=>{{let q=c(()=>D(ie().address)),Y=c(()=>n.host.deviceImageUrl(D(ie().address)));Ha(Q,{get deviceType(){return t(q)},get src(){return t(Y)}})}},ce=Q=>{var q=il();let Y;var ae=m(q,!0);S((J,ve)=>{Y=_t(q,1,"hmm-msg-name svelte-u6ol56",null,Y,{"hmm-msg-ackable":J,"hmm-msg-rega":ie().source==="rega"}),T(q,"title",ve),T(q,"data-listed-by",ie().source??"interface"),T(q,"data-testid",`message-${ie().address}-${ie().datapoint}`),h(ae,ie().datapoint)},[()=>vo(ie().datapoint),()=>ie().source==="rega"?s("Listed by the CCU only; the interface no longer reports it"):void 0]),v(Q,q)},be=Q=>{var q=il(),Y=m(q,!0);S((ae,J)=>{T(q,"title",ae),T(q,"data-testid",`message-value-${ie().address}-${ie().datapoint}`),h(Y,J)},[()=>R(ie()),()=>N(ie())]),v(Q,q)},ee=Q=>{var q=il(),Y=m(q,!0);S((ae,J)=>{T(q,"title",ae),T(q,"data-testid",`message-since-${ie().address}-${ie().datapoint}`),T(q,"data-source",ie().sinceSource??"local"),h(Y,J)},[()=>ie().sinceSource==="rega"?s("First reported, from the CCU"):ie().sinceSource==="system"?s("Last changed, from the openccu-lite system"):s("First seen by the Homematic Manager"),()=>ca(ie().since)]),v(Q,q)},he=Q=>{const q=c(()=>n.serviceMessages.isSuppressed(ie())),Y=c(()=>x(ie(),t(q))),ae=c(()=>`suppress-help-${ie().address}-${ie().datapoint}`);{let J=c(()=>`suppress-tooltip-${ie().address}-${ie().datapoint}`);mi(Q,{get text(){return t(Y)},get testId(){return t(J)},children:(ve,ge)=>{var te=iD(),O=Ne(te),U=m(O,!0),I=d(O,2),F=m(I,!0);S(Ee=>{O.disabled=t(i),T(O,"aria-describedby",t(ae)),T(O,"data-testid",`suppress-${ie().address}-${ie().datapoint}`),h(U,Ee),T(I,"id",t(ae)),h(F,t(Y))},[()=>t(q)?s("Unsuppress"):s("Suppress")]),re("click",O,Ee=>{Ee.stopPropagation(),M(ie(),!t(q))}),v(ve,te)},$$slots:{default:!0}})}},G=Q=>{var q=Cn();S(Y=>h(q,Y),[()=>Ae().value?Ae().value(ie())??"":ie()[Ae().key]??""]),v(Q,q)};W(me,Q=>{Ae().key==="icon"?Q(P):Ae().key==="datapoint"?Q(ce,1):Ae().key==="value"?Q(be,2):Ae().key==="since"?Q(ee,3):Ae().key==="suppress"?Q(he,4):Q(G,-1)})}v(xe,Te)};let X=c(()=>s("Service messages")),se=c(()=>s("Filter")),j=c(()=>s("No data")),ne=c(()=>s("Service messages")),ye=c(()=>t(E).next===void 0?s("{count} service messages",{},t(p).length):void 0);Fs(de,{get rows(){return t(p)},get scope(){return t(o)},get columns(){return t(z)},getId:w,get caption(){return t(X)},get filterLabel(){return t(se)},get emptyText(){return t(j)},get toolbarLabel(){return t(ne)},get countText(){return t(ye)},tableId:"messages",testId:"messages-table",get selected(){return t(a)},set selected(xe){u(a,xe,!0)},status:B,toolbar:oe,cell:K,$$slots:{status:!0,toolbar:!0,cell:!0}})}v(r,le),ft()}Et(["click"]);var dD=y('<span class="hmm-header-user svelte-1n46o8q" data-testid="session-user"> </span> <a class="hmm-header-logout svelte-1n46o8q" href="logout" data-testid="session-logout"> </a>',1),cD=y('<button type="button" class="hmm-button hmm-header-changes" data-testid="change-set-open"> </button>'),uD=y('<div class="hmm-page-failed svelte-1n46o8q" data-testid="page-failed"><p> </p> <p class="hmm-page-failed-reason svelte-1n46o8q"> </p> <button type="button" class="hmm-button"> </button></div>'),fD=y('<p class="hmm-empty svelte-1n46o8q"> </p>'),hD=y('<div class="hmm-app svelte-1n46o8q" data-testid="app"><header class="hmm-header svelte-1n46o8q"><!> <!> <div class="hmm-header-actions svelte-1n46o8q"><!> <!> <!> <!> <!> <!></div></header> <!> <main class="hmm-main svelte-1n46o8q"><div class="hmm-panel svelte-1n46o8q" role="tabpanel"><!></div></main> <!> <!> <!> <!> <!> <!></div>');function mD(r,e){ut(e,!0);const n="https://github.com/hobbyquaker/homematic-manager",s=`${n}/releases`;let a=H(e,"stores",7);sb(sr(()=>a())),Mp({columnWidths:sr(()=>a().app.columnWidths),t:(P,ce)=>a().i18n.t(P,ce)});let i=C(!1);const o=c(()=>a().i18n.t),l=c(()=>a().app);function f(P){a().console.recall(P),t(l).selectedInterface!==P.interfaceName&&a().selectInterface(P.interfaceName),t(l).setTab("console")}const p={local:()=>t(o)("This profile"),occulite:()=>"occulited",rega:()=>"ReGaHSS"},_={devices:"Devices",groups:"Groups",links:"Links",rssi:"RSSI",console:"RPC Console",messages:"Service messages",events:"Events",rooms:"Rooms",functions:"Functions",metadata:"Metadata"},g=c(()=>{const P=a().taxonomy.state;if(P===void 0)return;const ce=p[P.provider]();return{id:_d,label:ce,mark:ag(P),title:ig(P,{label:ce,reachable:t(o)("Reachable"),unreachable:t(o)("Unreachable"),readOnly:t(o)("Read-only"),writable:t(o)("Writable"),detail:be=>t(o)("revision {revision}, {count} objects",{revision:be.revision,count:be.objects}),certificate:be=>t(o)("The certificate of {url} is not trusted ({code})",{url:be.url,code:be.code})}),selectable:P.reachable,provider:P.provider}}),k=c(()=>a().tabs.map(P=>({id:P,label:t(o)(_[P]),...P==="messages"?{badge:a().serviceMessages.countOf(t(l).selectedInterface)}:{}}))),E=c(()=>Object.fromEntries(a().interfaces.states.map(P=>{const ce=a().devices.index(P.name),be=a().radio.gateways(P.name).map(ee=>ee.DUTY_CYCLE).filter(ee=>typeof ee=="number");return[P.name,{...ce===void 0?{}:{devices:ce.devices().length},...be.length===0?{}:{dutyCycle:Math.max(...be)}}]})));ot(()=>{document.documentElement.lang=a().i18n.language});const b=c(()=>a().shell.theme??t(l).theme);ot(()=>{const P=document.documentElement;t(b)==="system"?P.removeAttribute("data-theme"):P.setAttribute("data-theme",t(b)),a().host.setTheme(t(b))}),ot(()=>a().host.onMenuAction(()=>{t(l).configDialogOpen=!0}));var w=hD(),x=A(w),D=A(x);{let P=c(()=>t(o)("Select an interface")),ce=c(()=>t(o)("Interfaces")),be=c(()=>t(o)("Connected")),ee=c(()=>t(o)("Not connected")),he=c(()=>t(o)("Not present")),G=c(()=>t(o)("Not answering")),Q=c(()=>t(o)("Retry now")),q=c(()=>t(o)("Subscribing")),Y=c(()=>t(o)("Waiting")),ae=c(()=>t(o)("Reconnecting")),J=c(()=>t(o)("All interfaces are connected")),ve=c(()=>t(o)("Not every interface is connected")),ge=c(()=>t(o)("Port")),te=c(()=>t(l).config?.publishCallbackPorts===!0),O=c(()=>t(o)("Publish this port unchanged")),U=c(()=>t(o)("Use automatic"));ng(D,{get interfaces(){return a().interfaces.states},get selected(){return t(l).selectedInterface},get host(){return t(l).host},get backendConnected(){return t(l).connected},get details(){return t(E)},get label(){return t(P)},get listLabel(){return t(ce)},get connectedText(){return t(be)},get notConnectedText(){return t(ee)},get notPresentText(){return t(he)},get notAnsweringText(){return t(G)},get retryText(){return t(Q)},onretry:I=>{for(const F of I)a().interfaces.reconnect(F)},get subscribingText(){return t(q)},get waitingText(){return t(Y)},get reconnectingText(){return t(ae)},get allConnectedText(){return t(J)},get someNotConnectedText(){return t(ve)},get portLabel(){return t(ge)},devicesLabel:I=>t(o)("{count} devices",{count:I},I),dutyCycleLabel:I=>t(o)("Duty cycle {value} %",{value:I}),get publishCallbackPorts(){return t(te)},callbackPortInUseLabel:I=>t(o)("Callback port {port} is in use",{port:String(I)}),callbackPortFailedLabel:I=>t(o)("Callback port {port} cannot be opened",{port:String(I)}),get publishPortText(){return t(O)},callbackWarningLabel:I=>I.reason==="notLocal"?t(o)("The callback address {address} is not an address of this machine; {auto} is used instead",{address:I.address,auto:I.auto}):t(o)("The callback address {address} is not in the CCU's network; the CCU may not reach it and send no events",{address:I.address}),get useAutomaticText(){return t(U)},onuseautomatic:()=>{t(l).useAutomaticCallback().then(I=>I?a().start():void 0)},testId:"interface-select",onselect:I=>{a().selectInterface(I)},get store(){return t(g)},storeTestId:"meta-indicator"})}var N=d(D,2);{let P=c(()=>t(o)("Devices"));Gg(N,{get tabs(){return t(k)},get active(){return t(l).tab},get label(){return t(P)},onselect:ce=>t(l).setTab(ce)})}var R=d(N,2),M=A(R);{var z=P=>{var ce=dD(),be=Ne(ce),ee=m(be,!0),he=d(be,2),G=m(he,!0);S((Q,q)=>{T(be,"title",Q),h(ee,t(l).session.user),h(G,q)},[()=>t(o)("Logged in as {user}",{user:t(l).session.user}),()=>t(o)("Log out")]),v(P,ce)};W(M,P=>{t(l).session&&!a().shell.embedded&&P(z)})}var $=d(M,2);{var le=P=>{var ce=cD(),be=m(ce);S(ee=>h(be,`${ee??""} (${a().changeSet.count??""})`),[()=>t(o)("Pending changes")]),re("click",ce,()=>u(i,!0)),v(P,ce)};W($,P=>{a().changeSet.count>0&&P(le)})}var fe=d($,2);{let P=c(()=>t(o)("RPC log"));Dt(fe,{get title(){return t(P)},icon:"≣",get pressed(){return t(l).rpcLogOpen},testId:"rpclog-toggle",onclick:()=>t(l).rpcLogOpen=!t(l).rpcLogOpen})}var de=d(fe,2);{var B=P=>{Bg(P,{get theme(){return t(l).theme},labelFor:ce=>t(o)(`Theme: ${ce}`),testId:"theme-switch",onclick:()=>t(l).cycleTheme()})};W(de,P=>{a().shell.embedded||P(B)})}var oe=d(de,2);{let P=c(()=>t(o)("Settings"));Dt(oe,{get title(){return t(P)},icon:"⚙",testId:"settings-button",onclick:()=>t(l).configDialogOpen=!0})}var K=d(oe,2);{let P=c(()=>t(o)("Homematic Manager on GitHub"));Gp(K,{href:n,get label(){return t(P)},openExternal:ce=>a().host.openExternal(ce),testId:"github-link"})}var X=d(x,2);{let P=c(()=>({available:t(o)("A new version is available"),downloading:t(o)("Downloading"),downloaded:t(o)("The update is ready and will be installed when you quit"),installOnQuit:t(o)("The update will be installed when you quit"),download:t(o)("Download"),install:t(o)("Install on quit"),dismiss:t(o)("Dismiss"),checkFailed:t(o)("The update check failed"),downloadFailed:t(o)("The download of the update failed"),failed:t(o)("The update failed"),releases:t(o)("Releases on GitHub"),downloadInBrowser:t(o)("Opens the installer of the new version in your browser")}));Zg(X,{get state(){return a().host.updateNotice},get labels(){return t(P)},releasesUrl:s,openExternal:ce=>a().host.openExternal(ce),testId:"update-notice",ondownload:()=>{a().host.downloadUpdate()},oninstall:()=>{a().host.installUpdateOnQuit()},ondismiss:()=>{a().host.dismissUpdate()}})}var se=d(X,2),j=A(se),ne=A(j);pp(ne,()=>`${t(l).selectedInterface}/${t(l).tab}`,P=>{var ce=St(),be=Ne(ce);Hf(be,{onerror:he=>a().notices.fromError(he,`page ${t(l).tab}`),failed:(he,G=Hn,Q=Hn)=>{var q=uD(),Y=A(q),ae=m(Y,!0),J=d(Y,2),ve=m(J,!0),ge=d(J,2),te=m(ge,!0);S((O,U,I)=>{h(ae,O),h(ve,U),h(te,I)},[()=>t(o)("This tab could not be drawn."),()=>G()instanceof Error?G().message:String(G()),()=>t(o)("Try again")]),re("click",ge,function(...O){Q()?.apply(this,O)}),v(he,q)}},he=>{var G=St(),Q=Ne(G);{var q=I=>{var F=fD(),Ee=m(F,!0);S(Ie=>h(Ee,Ie),[()=>t(o)("Select an interface")]),v(I,F)},Y=I=>{var F=St(),Ee=Ne(F);{var Ie=ze=>{al(ze,{enumId:"room"})},Me=ze=>{al(ze,{enumId:"function"})},Ve=ze=>{al(ze,{})};W(Ee,ze=>{t(l).tab==="rooms"?ze(Ie):t(l).tab==="functions"?ze(Me,1):ze(Ve,-1)})}v(I,F)},ae=I=>{ZT(I,{})},J=I=>{RR(I,{})},ve=I=>{FR(I,{})},ge=I=>{nD(I,{})},te=I=>{py(I,{})},O=I=>{lD(I,{})},U=I=>{nR(I,{})};W(Q,I=>{t(l).selectedInterface===""?I(q):t(l).storeSelected?I(Y,1):t(l).tab==="devices"?I(ae,2):t(l).tab==="groups"?I(J,3):t(l).tab==="links"?I(ve,4):t(l).tab==="rssi"?I(ge,5):t(l).tab==="console"?I(te,6):t(l).tab==="messages"?I(O,7):I(U,-1)})}v(he,G)}),v(P,ce)});var ye=d(se,2);{let P=c(()=>t(o)("RPC log")),ce=c(()=>t(o)("No RPC calls yet")),be=c(()=>t(o)("in progress")),ee=c(()=>t(o)("Clear")),he=c(()=>t(o)("Close")),G=c(()=>t(o)("Resize the RPC log")),Q=c(()=>t(o)("Hide background calls")),q=c(()=>t(o)("Open in console")),Y=c(()=>({console:t(o)("Origin: console"),ui:t(o)("Origin: UI"),background:t(o)("Origin: background")}));Rg(ye,{get entries(){return a().rpcLog.visible},get pending(){return a().rpcLog.pending},get title(){return t(P)},get emptyText(){return t(ce)},get pendingText(){return t(be)},get clearLabel(){return t(ee)},get closeLabel(){return t(he)},get resizeLabel(){return t(G)},get hideBackgroundLabel(){return t(Q)},get openLabel(){return t(q)},get originLabels(){return t(Y)},testId:"rpclog",onclear:()=>{a().rpcLog.clear()},onopen:f,get open(){return t(l).rpcLogOpen},set open(ae){t(l).rpcLogOpen=ae},get hideBackground(){return a().rpcLog.hideBackground},set hideBackground(ae){a().rpcLog.hideBackground=ae}})}var xe=d(ye,2);{let P=c(()=>t(o)("Dismiss")),ce=c(()=>t(o)("Show fewer"));mg(xe,{get notices(){return a().notices.items},get dismissLabel(){return t(P)},moreLabel:be=>t(o)("{count} more",{},be),get lessLabel(){return t(ce)},testId:"notices",ondismiss:be=>a().notices.dismiss(be)})}var ie=d(xe,2);{let P=c(()=>t(o)("RPC execution")),ce=c(()=>t(o)("Cancel"));Zf(ie,{get progress(){return a().rpcLog.progress},get title(){return t(P)},get cancelLabel(){return t(ce)},testId:"rpc-progress",oncancel:()=>{a().rpcLog.cancel()}})}var Ae=d(ie,2);BE(Ae,{get open(){return t(l).configDialogOpen},set open(P){t(l).configDialogOpen=P}});var Te=d(Ae,2);_b(Te,{get open(){return t(i)},set open(P){u(i,P,!0)}});var me=d(Te,2);{let P=c(()=>t(o)("Loading Homematic Manager..."));sg(me,{get visible(){return t(l).loading},get text(){return t(P)},testId:"loader"})}S(()=>{T(j,"id",`panel-${t(l).tab}`),T(j,"aria-labelledby",`tab-${t(l).tab}`)}),v(r,w),ft()}Et(["click"]);const cm="hmm.columnWidths";function um(r){const e=r.trim().toLowerCase().replace(/[^a-z0-9._-]/g,"_");return e===""?"unconfigured":e}const vD=Object.freeze({});function Mu(r){return r!==null&&typeof r=="object"&&!Array.isArray(r)}function pD(r){let e;try{const s=r?.getItem(cm);e=s==null?void 0:JSON.parse(s)}catch{return{}}const n={};if(!Mu(e))return n;for(const[s,a]of Object.entries(e)){if(!Mu(a))continue;const i={};for(const[o,l]of Object.entries(a)){const f=Ny(l);Object.keys(f).length>0&&(i[o]=f)}Object.keys(i).length>0&&(n[s]=i)}return n}class gD{#e=C({});#n;#t;constructor(e,n){this.#n=e,this.#t=n,u(this.#e,pD(e))}widths(e){return t(this.#e)[this.#t()]?.[e]??vD}set(e,n,s){const a=this.#t(),i=t(this.#e)[a]??{},o=i[e]??{},l=yi(s);o[n]!==l&&(u(this.#e,{...t(this.#e),[a]:{...i,[e]:{...o,[n]:l}}}),this.#s())}reset(e){const n=this.#t(),s=t(this.#e)[n];if(s?.[e]===void 0)return;const a=Object.fromEntries(Object.entries(s).filter(([o])=>o!==e)),i=Object.fromEntries(Object.entries(t(this.#e)).filter(([o])=>o!==n));u(this.#e,Object.keys(a).length===0?i:{...i,[n]:a}),this.#s()}#s(){try{this.#n?.setItem(cm,JSON.stringify(t(this.#e)))}catch{}}}const ol=["system","light","dark"],Ou="hmm.theme",ll="hmm.language";function bD(){return typeof window>"u"?{hash:""}:window.location}function _D(r){return typeof window>"u"?()=>{}:(window.addEventListener("hashchange",r),()=>{window.removeEventListener("hashchange",r)})}function ED(){try{return typeof localStorage>"u"?void 0:localStorage}catch{return}}class yD{#e=C(void 0);get config(){return t(this.#e)}set config(e){u(this.#e,e,!0)}#n=C(!0);get loading(){return t(this.#n)}set loading(e){u(this.#n,e,!0)}#t=C(!1);get connected(){return t(this.#t)}set connected(e){u(this.#t,e,!0)}#s=C("");get saveError(){return t(this.#s)}set saveError(e){u(this.#s,e,!0)}#a=C(void 0);get callbackAddresses(){return t(this.#a)}set callbackAddresses(e){u(this.#a,e,!0)}#r=0;#i=C(void 0);get pairing(){return t(this.#i)}set pairing(e){u(this.#i,e,!0)}#l=C("");get selectedInterface(){return t(this.#l)}set selectedInterface(e){u(this.#l,e,!0)}#o=C(We(qi));get tab(){return t(this.#o)}set tab(e){u(this.#o,e,!0)}#d=C(We(qi));get interfaceTab(){return t(this.#d)}set interfaceTab(e){u(this.#d,e,!0)}#c=C("");get linksFilter(){return t(this.#c)}set linksFilter(e){u(this.#c,e,!0)}#u=C("en");get language(){return t(this.#u)}set language(e){u(this.#u,e,!0)}#f=C("auto");get languageChoice(){return t(this.#f)}set languageChoice(e){u(this.#f,e,!0)}#h=C("system");get theme(){return t(this.#h)}set theme(e){u(this.#h,e,!0)}#m=C(null);get session(){return t(this.#m)}set session(e){u(this.#m,e,!0)}#v=C(!1);get configDialogOpen(){return t(this.#v)}set configDialogOpen(e){u(this.#v,e,!0)}#_=C(!1);get rpcLogOpen(){return t(this.#_)}set rpcLogOpen(e){u(this.#_,e,!0)}columnWidths;#p;#b;#E;#g;#S;#y=[];#w=[];get storage(){return this.#g}constructor(e,n,s={}){this.#p=e,this.#b=n,this.#E=s.location??bD(),this.#g=s.storage===void 0?ED():s.storage,this.#S=s.languages,this.columnWidths=new gD(this.#g,()=>um(this.config?.connection.host??""));const a=this.#g?.getItem(Ou);(a==="light"||a==="dark"||a==="system")&&(this.theme=a);const i=this.#g?.getItem(ll);(i==="de"||i==="en"||i==="auto")&&(this.languageChoice=i),this.#k(),this.readRoute(),this.connected=e.connected,this.#y.push(e.onConnectionChange(o=>{this.connected=o}),e.on("config.changed",o=>{this.config=o}),e.on("pairing.changed",o=>{this.pairing=o}),(s.onHashChange??_D)(()=>{const o=this.selectedInterface;if(this.readRoute(),this.selectedInterface!==o)for(const l of[...this.#w])l(o)}))}onInterfaceRouted(e){return this.#w.push(e),()=>{const n=this.#w.indexOf(e);n>=0&&this.#w.splice(n,1)}}readRoute(){const e=ob(this.#E.hash);e.interfaceName!==""&&(this.selectedInterface=e.interfaceName),vi(e.tab)?this.tab=this.storeSelected?e.tab:qi:(this.tab=e.tab,this.interfaceTab=e.tab)}writeRoute(){const e=lb(this.selectedInterface,this.tab);this.#E.hash!==e&&(this.#E.hash=e)}setTab(e){this.tab=e,vi(e)||(this.interfaceTab=e),this.writeRoute()}get storeSelected(){return rh(this.selectedInterface)}setInterface(e){this.selectedInterface=e,this.writeRoute()}setLanguage(e){this.languageChoice=e,this.#k(),this.#g?.setItem(ll,e)}#k(){this.language=M1(this.languageChoice,this.#S)}setTheme(e){this.theme=e,this.#g?.setItem(Ou,e)}cycleTheme(){const e=ol.indexOf(this.theme);this.setTheme(ol[(e+1)%ol.length]??"system")}get configuredInterfaces(){return this.config?.connection.interfaces??[]}get host(){return this.config?.connection.host??""}async load(){try{const e=await this.#p.request("config.get");this.applyConfig(e)}catch(e){this.#b.fromError(e,"config.get")}finally{this.loading=!1}await this.loadSession()}async loadSession(){try{this.session=await this.#p.request("session.info")}catch{this.session=null}}async save(e,n){this.saveError="";try{return this.applyConfig(await(n===void 0?this.#p.request("config.set",e):this.#p.request("config.set",e,n))),this.configDialogOpen=!1,!0}catch(s){return this.saveError=s instanceof Error?s.message:String(s),this.#b.fromError(s,"config.set"),!1}}async loadCallbackAddresses(e){this.#r+=1;const n=this.#r;let s;try{s=await(e===void 0?this.#p.request("config.callbackAddresses"):this.#p.request("config.callbackAddresses",e))}catch{s=void 0}n===this.#r&&(this.callbackAddresses=s)}async useAutomaticCallback(){const e=this.config?.connection;if(e===void 0)return!1;const n=zi(e);return this.save({...n,callback:{...n.callback,ip:""}})}async testConnection(e){try{return await this.#p.request("connection.test",e)}catch(n){this.#b.fromError(n,"connection.test");return}}async pair(e){this.pairing={state:"requesting"};try{await this.#p.request("connection.pair",e)}catch(n){this.pairing={state:"failed",message:n instanceof Error?n.message:String(n)},this.#b.fromError(n,"connection.pair")}}async cancelPairing(){try{await this.#p.request("connection.pairCancel")}catch(e){this.#b.fromError(e,"connection.pairCancel")}this.pairing=void 0}async discover(){try{const e=await this.#p.request("config.discover");this.config&&(this.config={...this.config,discovered:e})}catch(e){this.#b.fromError(e,"config.discover")}}async clearCaches(){try{await this.#p.request("config.clearCaches")}catch(e){this.#b.fromError(e,"config.clearCaches")}}applyConfig(e){this.config=e,this.#g?.getItem(ll)==null&&(this.languageChoice=e.connection.language??"auto",this.#k()),!this.storeSelected&&(this.selectedInterface===""||!e.connection.interfaces.includes(this.selectedInterface))&&(this.selectedInterface=e.connection.interfaces[0]??""),this.writeRoute(),e.connection.host===""&&(this.configDialogOpen=!0)}dispose(){for(const e of this.#y)e();this.#y.length=0,this.#w.length=0}}class SD{#e=C(We([]));get changes(){return t(this.#e)}set changes(e){u(this.#e,e,!0)}#n=C(We([]));get outcomes(){return t(this.#n)}set outcomes(e){u(this.#n,e,!0)}#t=C(!1);get applying(){return t(this.#t)}set applying(e){u(this.#t,e,!0)}#s=C(0);get applied(){return t(this.#s)}set applied(e){u(this.#s,e,!0)}#a=0;#r=1;#i;#l;#o;constructor(e,n,s){this.#i=e,this.#l=n,this.#o=s}get count(){return this.changes.length}get empty(){return this.changes.length===0}get interfaces(){const e=[];for(const n of this.changes)e.includes(n.interfaceName)||e.push(n.interfaceName);return e}stage(e){const n=`c${String(this.#r)}`;return this.#r+=1,this.changes=[...this.changes,{...e,id:n}],this.outcomes=[],n}remove(e){this.changes=this.changes.filter(n=>n.id!==e),this.outcomes=this.outcomes.filter(n=>n.id!==e)}clear(){this.changes=[],this.outcomes=[],this.applied=0}outcome(e){return this.outcomes.find(n=>n.id===e)}async apply(){if(this.applying||this.empty)return 0;this.applying=!0;const e=this.#a+=1;this.applied=0,this.outcomes=[];const n=[];try{for(const s of this.changes){if(this.#a!==e)break;const a=await this.#d(s);this.outcomes=[...this.outcomes,a],this.applied+=1,a.ok&&n.push(s.id)}}finally{this.applying=!1,this.changes=this.changes.filter(s=>!n.includes(s.id))}return n.length}async cancel(){return this.#a+=1,this.#o.cancel()}async#d(e){try{switch(e.kind){case"paramset":{const n=await this.#i.request("paramset.put",e.interfaceName,[...e.targets],e.paramset,e.values,e.writeAll?{writeAll:!0}:void 0);return this.#c(e.id,n)}case"linkParamset":{const n=await this.#i.request("paramset.putLink",e.interfaceName,e.links.map(s=>({...s})),e.values);return this.#c(e.id,n)}case"linkAdd":{for(const n of e.pairs)await this.#i.request("links.add",e.interfaceName,n.sender,n.receiver,n.name,n.description);return{id:e.id,ok:!0,results:[]}}case"linkRemove":{for(const n of e.pairs)await this.#i.request("links.remove",e.interfaceName,n.sender,n.receiver);return{id:e.id,ok:!0,results:[]}}}}catch(n){return this.#l.fromError(n,e.title),{id:e.id,ok:!1,results:[],error:Di(n).message}}}#c(e,n){const s=n.filter(a=>!a.ok);return{id:e,ok:n.length>0&&s.length===0,results:n,...s.length===0?{}:{error:s.map(a=>`${a.address}: ${a.faultString??"failed"}`).join(", ")}}}}class wD{#e=C(We({}));get methods(){return t(this.#e)}set methods(e){u(this.#e,e,!0)}#n=C(!1);get running(){return t(this.#n)}set running(e){u(this.#n,e,!0)}#t=C(void 0);get pendingRecall(){return t(this.#t)}set pendingRecall(e){u(this.#t,e,!0)}#s;#a;#r;#i=1;constructor(e,n,s={}){this.#s=e,this.#a=n,this.#r=s.now??(()=>Date.now())}of(e){return this.methods[e]??[]}method(e,n){return this.of(e).find(s=>s.name===n)}async load(e){if(!(e===""||this.methods[e]))try{this.methods={...this.methods,[e]:await this.#s.request("rpc.methods",e)}}catch(n){this.#a.fromError(n,`rpc.methods ${e}`)}}async call(e,n,s){this.running=!0;const a=this.#r(),i=this.#i;this.#i+=1;try{const o=await this.#s.request("rpc.call",e,n,s);return{id:i,timestamp:a,interfaceName:e,method:n,params:s,ok:!0,result:o,durationMs:this.#r()-a}}catch(o){const l=o;return{id:i,timestamp:a,interfaceName:e,method:n,params:s,ok:!1,error:l.message??String(o),...l.faultCode===void 0?{}:{faultCode:l.faultCode},durationMs:this.#r()-a}}finally{this.running=!1}}recall(e){this.pendingRecall={interfaceName:e.interfaceName,method:e.method,params:[...e.params]}}takeRecall(e){const n=this.pendingRecall;if(!(n===void 0||n.interfaceName!==e))return this.pendingRecall=void 0,n}}const Lu=1e4,kD=6e4,AD=["DO_UPDATE_PENDING","PERFORMING_UPDATE","LIVE_DELIVER_FIRMWARE_IMAGE"],TD=["NEW_FIRMWARE_AVAILABLE","DELIVER_FIRMWARE_IMAGE"],RD=12e4;class xD{#e=C(We({}));get indexes(){return t(this.#e)}set indexes(e){u(this.#e,e,!0)}#n=C(We({}));get loading(){return t(this.#n)}set loading(e){u(this.#n,e,!0)}#t=C(We({}));get failed(){return t(this.#t)}set failed(e){u(this.#t,e,!0)}#s=C(We([]));get firmwareBusy(){return t(this.#s)}set firmwareBusy(e){u(this.#s,e,!0)}#a=C(We({}));get firmwareTail(){return t(this.#a)}set firmwareTail(e){u(this.#a,e,!0)}#r;#i;#l=[];constructor(e,n){this.#r=e,this.#i=n,this.#l.push(e.on("devices.changed",s=>{this.indexes[s.interfaceName]&&this.load(s.interfaceName,{refresh:!1})}))}index(e){return this.indexes[e]}devices(e){return this.indexes[e]?.devices()??[]}channels(e,n){return this.indexes[e]?.childrenOf(n)??[]}isLoading(e){return this.loading[e]===!0}hasFailed(e){return this.failed[e]===!0}async load(e,n={}){if(e!==""){this.loading={...this.loading,[e]:!0};try{const s=await this.#r.request("devices.list",e,{refresh:n.refresh??!1}),a=this.#o(e);this.indexes={...this.indexes,[e]:new Fb(e,s)},this.failed={...this.failed,[e]:!1},this.settleFirmware(e),a&&!this.#o(e)&&(this.firmwareTail={...this.firmwareTail,[e]:Date.now()+RD})}catch(s){this.failed={...this.failed,[e]:!0},this.#i.fromError(s,`devices.list ${e}`)}finally{this.loading={...this.loading,[e]:!1}}}}async teams(e){try{return await this.#r.request("teams.list",e)}catch(n){return this.#i.fromError(n,`listTeams ${e}`),[]}}async setTeam(e,n,s){return await this.setTeams(e,[{address:n,teamAddress:s}])===1}async setTeams(e,n){let s=0;for(const{address:a,teamAddress:i}of n)try{await this.#r.request("teams.set",e,a,i),s+=1}catch(o){this.#i.fromError(o,`setTeam ${a}`)}return n.length>0&&await this.load(e,{refresh:!0}),s}async confirmRegaInbox(){try{return await this.#r.request("rega.confirmInbox")}catch(e){return this.#i.fromError(e,"rega.confirmInbox"),[]}}async ensure(e){e===""||this.indexes[e]||this.isLoading(e)||await this.load(e)}async retry(e){this.isLoading(e)||await this.load(e,{refresh:!0})}firmwarePending(e){return this.firmwarePollMs(e)>0}firmwarePollMs(e){return this.#o(e)||(this.firmwareTail[e]??0)>Date.now()?Lu:this.devices(e).some(s=>TD.includes(s.FIRMWARE_UPDATE_STATE??""))?kD:0}#o(e){return this.firmwareBusy.length>0?!0:this.devices(e).some(n=>AD.includes(n.FIRMWARE_UPDATE_STATE??""))}async updateFirmware(e,n){if(n.length===0)return[];this.firmwareBusy=[...this.firmwareBusy,...n.filter(s=>!this.firmwareBusy.includes(s))];try{const s=await this.#r.request("devices.updateFirmware",e,n);return await this.load(e,{refresh:!0}),s}catch(s){return this.#i.fromError(s,`devices.updateFirmware ${n.join(" ")}`),this.firmwareBusy=this.firmwareBusy.filter(a=>!n.includes(a)),[]}}async installFirmware(e,n){this.firmwareBusy=this.firmwareBusy.includes(n)?this.firmwareBusy:[...this.firmwareBusy,n];try{const s=await this.#r.request("devices.installFirmware",e,n);return await this.load(e,{refresh:!0}),s}catch(s){return this.#i.fromError(s,`devices.installFirmware ${n}`),this.firmwareBusy=this.firmwareBusy.filter(a=>a!==n),!1}}settleFirmware(e){const n=this.indexes[e];if(!n)return;const s=this.firmwareBusy.filter(a=>{const i=n.get(a);return i!==void 0&&(i.AVAILABLE_FIRMWARE===void 0||i.AVAILABLE_FIRMWARE===i.FIRMWARE)});s.length>0&&(this.firmwareBusy=this.firmwareBusy.filter(a=>!s.includes(a)))}async remove(e,n,s){try{return await this.#r.request("devices.delete",e,n,s),await this.load(e,{refresh:!0}),!0}catch(a){return this.#i.fromError(a,`deleteDevice ${n}`),!1}}async replaceable(e,n){try{return await this.#r.request("devices.replaceable",e,n)}catch(s){return this.#i.fromError(s,`devices.replaceable ${n}`),[]}}async replace(e,n,s){try{const a=await this.#r.request("devices.replace",e,n,s);return await this.load(e,{refresh:!0}),a}catch(a){return this.#i.fromError(a,`replaceDevice ${n} ${s}`),!1}}async repairConfig(e,n,s){try{return await this.#r.request("devices.repairConfig",e,n,s)}catch(a){this.#i.fromError(a,`devices.repairConfig ${n}`);return}}async restoreConfig(e,n){try{return await this.#r.request("devices.restoreConfig",e,n),!0}catch(s){return this.#i.fromError(s,`restoreConfigToDevice ${n}`),!1}}async clearConfigCache(e,n){try{return await this.#r.request("devices.clearConfigCache",e,n),!0}catch(s){return this.#i.fromError(s,`clearConfigCache ${n}`),!1}}async reportValueUsage(e,n,s){let a=0;for(const i of n){let o;try{o=await this.#r.request("paramset.description",e,i,"VALUES")}catch(l){this.#i.fromError(l,`getParamsetDescription ${i} VALUES`);continue}for(const l of Object.keys(o))try{await this.#r.request("devices.reportValueUsage",e,i,l,s),a+=1}catch(f){this.#i.fromError(f,`reportValueUsage ${i} ${l}`);break}}return a}async setInstallMode(e,n,s){try{return await this.#r.request("devices.installMode.set",e,n,s),!0}catch(a){return this.#i.fromError(a,"setInstallMode"),!1}}async hmipPairing(){try{return await this.#r.request("meta.pairing")??void 0}catch{return}}async tryInstallMode(e,n,s){try{return await this.#r.request("devices.installMode.set",e,n,s),null}catch(a){return Di(a)}}async keyMismatchDevice(e){try{return await this.#r.request("devices.installMode.keyMismatch",e)}catch{return""}}async setTempKey(e,n){try{return await this.#r.request("devices.installMode.tempKey",e,n),!0}catch(s){return this.#i.fromError(s,"setTempKey"),!1}}async installModeSeconds(e){try{return await this.#r.request("devices.installMode.get",e)}catch(n){return this.#i.fromError(n,"getInstallMode"),0}}forget(e){if(e===void 0){this.indexes={};return}this.indexes=Object.fromEntries(Object.entries(this.indexes).filter(([n])=>n!==e))}dispose(){for(const e of this.#l)e();this.#l.length=0}}class DD{buffer;#e=C(0);#n=0;#t=c(()=>(t(this.#e),this.buffer.toArray().reverse()));get records(){return t(this.#t)}set records(e){u(this.#t,e)}#s;#a;#r;constructor(e,n,s={}){this.buffer=new a1(s.capacity??Ah),this.#s=e,this.#a=n,this.#r=e.on("rpc.event",a=>{this.push(a)})}get size(){return t(this.#e),this.buffer.size}push(e){this.buffer.push({...e,seq:this.#n}),this.#n+=1,u(this.#e,t(this.#e)+1)}filtered(e){return t(this.#e),o1(this.buffer,e).reverse()}countFor(e){return t(this.#e),this.buffer.filter(n=>n.address===e).length}async load(e,n){try{const s=await this.#s.request("events.recent",e,n);for(const a of s)this.buffer.push({...a,seq:this.#n}),this.#n+=1;u(this.#e,t(this.#e)+1)}catch(s){this.#a.fromError(s,"events.recent")}}async clear(){this.buffer.clear(),u(this.#e,t(this.#e)+1);try{await this.#s.request("events.clear")}catch(e){this.#a.fromError(e,"events.clear")}}dispose(){this.#r()}}class ID{#e=C(void 0);get state(){return t(this.#e)}set state(e){u(this.#e,e,!0)}#n=C(We([]));get groups(){return t(this.#n)}set groups(e){u(this.#n,e,!0)}#t=C(We([]));get devicesToConfigure(){return t(this.#t)}set devicesToConfigure(e){u(this.#t,e,!0)}#s=C(!1);get loading(){return t(this.#s)}set loading(e){u(this.#s,e,!0)}#a=C(!1);get loaded(){return t(this.#a)}set loaded(e){u(this.#a,e,!0)}#r;#i;#l=[];#o="";#d;constructor(e,n){this.#r=e,this.#i=n,this.#l.push(e.on("meta.changed",s=>{this.follow(s)}))}fallbackName(e){const n=e.indexOf(":"),s=n===-1?e:e.slice(0,n),a=this.groups.find(i=>i.device===s);return a===void 0||a.name===""?void 0:`${a.name} ${e}`}get offered(){return this.state?.available===!0}async follow(e){const n=e?.provider==="occulite"&&e.reachable,s=n?`occulite/${e.url??""}`:"none";if(s===this.#o&&(this.state!==void 0||this.#d!==void 0)){await this.#d;return}if(this.#o=s,!n){this.state={available:!1,reason:"no-box"},this.groups=[],this.devicesToConfigure=[],this.loaded=!1;return}this.#d=this.#c();try{await this.#d}finally{this.#d=void 0}}async#c(){try{this.state=await this.#r.request("groups.state")}catch(e){this.state={available:!1,reason:"error",message:Di(e).message}}this.state.available&&await this.#u()}async#u(){try{const e=await this.#r.request("groups.list");this.groups=e.groups,this.devicesToConfigure=e.devicesToConfigure,this.loaded=!0}catch{}}async load(){this.loading=!0;try{const e=await this.#r.request("groups.list");return this.groups=e.groups,this.devicesToConfigure=e.devicesToConfigure,this.loaded=!0,!0}catch(e){return this.#i.fromError(e,"groups.list"),!1}finally{this.loading=!1}}async types(){try{return await this.#r.request("groups.types")}catch(e){return this.#i.fromError(e,"groups.types"),[]}}async detail(e){try{return await this.#r.request("groups.get",e)}catch(n){this.#i.fromError(n,"groups.get");return}}async create(e,n,s){try{const a=await this.#r.request("groups.create",e,n,[...s]);return await this.#f(a),a}catch(a){this.#i.fromError(a,"groups.create");return}}async update(e,n,s){try{const a=await this.#r.request("groups.update",e,n,s===void 0?void 0:[...s]);return await this.#f(a),a}catch(a){this.#i.fromError(a,"groups.update");return}}async remove(e){try{const n=await this.#r.request("groups.delete",e);return await this.load(),this.devicesToConfigure=n,!0}catch(n){return this.#i.fromError(n,"groups.delete"),!1}}async#f(e){await this.load(),this.devicesToConfigure=e.devicesToConfigure}dispose(){for(const e of this.#l)e();this.#l.length=0}}const ND="__HMM_HOST__";function CD(r){if(typeof r!="object"||r===null)return!1;const e=r,n=e.update;return typeof e.info=="function"&&typeof e.deviceImageUrl=="function"&&typeof e.setTheme=="function"&&typeof e.onSystemTheme=="function"&&typeof e.onMenuAction=="function"&&typeof n=="object"&&n!==null&&typeof n.state=="function"&&typeof n.check=="function"&&typeof n.download=="function"&&typeof n.installOnQuit=="function"&&typeof n.dismiss=="function"&&typeof n.on=="function"}function PD(r=globalThis){const e=r[ND];return CD(e)?e:void 0}class MD{#e=C(void 0);get info(){return t(this.#e)}set info(e){u(this.#e,e,!0)}#n=C(void 0);get update(){return t(this.#n)}set update(e){u(this.#n,e,!0)}#t=C(!1);get systemDark(){return t(this.#t)}set systemDark(e){u(this.#t,e,!0)}#s;#a=[];constructor(e={}){this.#s=e.bridge??PD(e.scope??globalThis),this.#s&&this.#a.push(this.#s.onSystemTheme(n=>{this.systemDark=n}),this.#s.update.on(n=>{this.update=n}))}get available(){return this.#s!==void 0}get updateNotice(){const e=this.update;if(!(!e||e.dismissed))return["available","downloading","downloaded","installOnQuit","error"].includes(e.phase)?e:void 0}deviceImageUrl(e){if(e!=="")return this.#s?this.#s.deviceImageUrl(e):`images/${encodeURIComponent(e)}`}async load(){if(!this.#s)return;const[e,n]=await Promise.all([this.#s.info(),this.#s.update.state()]);this.info=e,this.update=n}async setTheme(e){await this.#s?.setTheme(e)}onMenuAction(e){return this.#s?.onMenuAction(e)??(()=>{})}async openExternal(e){const n=this.#s;return n?.openExternal?(await n.openExternal(e),!0):!1}async checkForUpdate(){this.update=await this.#s?.update.check()}async downloadUpdate(){this.update=await this.#s?.update.download()}async installUpdateOnQuit(){this.update=await this.#s?.update.installOnQuit()}async dismissUpdate(){this.update=await this.#s?.update.dismiss()}dispose(){for(const e of this.#a)e();this.#a.length=0}}class OD{#e=C(We([]));get states(){return t(this.#e)}set states(e){u(this.#e,e,!0)}#n=C(void 0);get rega(){return t(this.#n)}set rega(e){u(this.#n,e,!0)}#t=C(!1);get loading(){return t(this.#t)}set loading(e){u(this.#t,e,!0)}#s;#a;#r=[];constructor(e,n){this.#s=e,this.#a=n,this.#r.push(e.on("interfaces.changed",s=>{this.states=s}),e.on("rega.changed",s=>{this.rega=s}))}get(e){return this.states.find(n=>n.name===e)}typeOf(e){return this.get(e)?.type??""}isConnected(e){return this.get(e)?.connected===!0}get allConnected(){const e=this.states.filter(n=>n.absent!==!0);return e.length>0&&e.every(n=>n.connected)}async load(){this.loading=!0;try{this.states=await this.#s.request("interfaces.list")}catch(e){this.#a.fromError(e,"interfaces.list")}finally{this.loading=!1}try{this.rega=await this.#s.request("rega.state")}catch(e){this.rega={enabled:!0,reachable:!1,names:0,error:String(e)}}}async reconnect(e){try{await this.#s.request("interfaces.reconnect",e)}catch(n){this.#a.fromError(n,"interfaces.reconnect")}}dispose(){for(const e of this.#r)e();this.#r.length=0}}class LD{#e;#n=new Map;constructor(e){this.#e=e}get requested(){return[...this.#n.keys()]}async#t(e){let n=this.#n.get(e);return n===void 0&&(n=this.#e.request("data.file",`data/${e}`).catch(()=>{}),this.#n.set(e,n)),await n}manifest(){return this.#t(ms.manifest)}receiverProfiles(e){return this.#t(ms.profiles(e))}async receiverTypeAliases(){return await this.#t(ms.receiverTypeAliases)??{}}async masterMetadata(){return await this.#t(ms.masterMetadata)??{}}async optionPresets(){return await this.#t(ms.optionPresets)??{}}async crossValidations(){return await this.#t(ms.crossValidations)??[]}translations(e){return this.#t(ms.translations(e))}async deviceIcons(){return await this.#t(ms.deviceIcons)??{}}async masterForms(){return(await this.#t(ms.masterForms))?.byParamsetId??{}}async timeSelectors(){return(await this.#t(ms.timeSelectors))?.types??{}}}class FD{#e=C(We(new Wc));get lookup(){return t(this.#e)}set lookup(e){u(this.#e,e,!0)}#n=C(void 0);get manifest(){return t(this.#n)}set manifest(e){u(this.#n,e,!0)}#t=C(!1);get available(){return t(this.#t)}set available(e){u(this.#t,e,!0)}#s=C(We({}));get presets(){return t(this.#s)}set presets(e){u(this.#s,e,!0)}#a=C(We({}));get timeSelectors(){return t(this.#a)}set timeSelectors(e){u(this.#a,e,!0)}source;engine;#r;#i;constructor(e,n={}){this.source=n.source??new LD(e),this.engine=new B_(this.source)}async setLanguage(e){if(this.#r===e){await this.#i;return}this.#r=e;const n=(async()=>{const a=[e,...["en","de"].filter(f=>f!==e)],i=await Promise.all(a.map(f=>this.source.translations(f))),[o,...l]=i;this.lookup=new Wc(o,...l),this.available=i.some(f=>f!==void 0),this.manifest=await this.source.manifest()})();this.#i=n,await n}async loadPresets(){if(Object.keys(this.presets).length===0){const[e,n]=await Promise.all([this.source.optionPresets(),this.source.timeSelectors()]);this.presets=e,this.timeSelectors=n}return this.presets}masterView(e,n,s={},a="",i){return this.engine.masterMetadataFor(e,n,s,a,i)}masterFormId(e){return e===""?Promise.resolve(""):this.engine.masterFormId(e)}profilesFor(e,n){return this.engine.profilesFor(e,n)}linkMetadataFor(e,n){return this.engine.linkMetadataFor(e,n)}parameterLabel(e,n){return this.lookup.parameter(e,n)}parameterHelp(e,n){return this.lookup.parameterHelp(e,n)}valueLabel(e,n,s){return this.lookup.parameterValue(e,n,s)}specialLabel(e,n,s){return this.lookup.specialValue(e,n,s)}valueLabelIfKnown(e,n,s){const a=this.lookup.parameterValue(e,n,s);return a===n?void 0:a}channelTypeLabel(e){return this.lookup.channelType(e)}deviceModelLabel(e){return this.lookup.deviceModel(e)}uiLabel(e){return this.lookup.uiLabel(e)}}class GD{#e=C(We({}));get links(){return t(this.#e)}set links(e){u(this.#e,e,!0)}#n=C(We({}));get loading(){return t(this.#n)}set loading(e){u(this.#n,e,!0)}#t;#s;constructor(e,n){this.#t=e,this.#s=n}of(e){return this.links[e]??[]}isLoading(e){return this.loading[e]===!0}forAddress(e,n){return this.of(e).filter(s=>s.SENDER===n||s.RECEIVER===n)}async load(e){if(e!==""){this.loading={...this.loading,[e]:!0};try{this.links={...this.links,[e]:await this.#t.request("links.list",e)}}catch(n){this.#s.fromError(n,`links.list ${e}`)}finally{this.loading={...this.loading,[e]:!1}}}}defective(e){return this.of(e).filter(n=>Dl(n).broken)}async add(e,n,s,a,i){const o=n.flatMap(l=>s.map(f=>({sender:l,receiver:f,...a===void 0?{}:{name:a},...i===void 0?{}:{description:i}})));return this.addPairs(e,o)}async addPairs(e,n){let s=0;for(const a of n)try{await this.#t.request("links.add",e,a.sender,a.receiver,a.name,a.description),s+=1}catch(i){this.#s.fromError(i,`addLink ${a.sender} ${a.receiver}`)}return s>0&&await this.load(e),s}async remove(e,n){let s=0;for(const a of n)try{await this.#t.request("links.remove",e,a.sender,a.receiver),s+=1}catch(i){this.#s.fromError(i,`removeLink ${a.sender} ${a.receiver}`)}return s>0&&await this.load(e),s}async info(e,n,s){try{return await this.#t.request("links.info.get",e,n,s)}catch(a){this.#s.fromError(a,`getLinkInfo ${n} ${s}`);return}}async setInfo(e,n,s,a,i){try{return await this.#t.request("links.info.set",e,n,s,a,i),await this.load(e),!0}catch(o){return this.#s.fromError(o,`setLinkInfo ${n} ${s}`),!1}}async activate(e,n,s,a){try{return await this.#t.request("links.activate",e,n,s,a),!0}catch(i){return this.#s.fromError(i,`activateLinkParamset ${n} ${s}`),!1}}#a=C(We([]));get templates(){return t(this.#a)}set templates(e){u(this.#a,e,!0)}async loadTemplates(e){try{this.templates=await this.#t.request("linkTemplates.list",e)}catch(n){this.#s.fromError(n,"linkTemplates.list"),this.templates=[]}return this.templates}async saveTemplate(e){try{return await this.#t.request("linkTemplates.save",e),await this.loadTemplates(e.identity),!0}catch(n){return this.#s.fromError(n,"linkTemplates.save"),!1}}async removeTemplate(e,n){try{return await this.#t.request("linkTemplates.remove",e),await this.loadTemplates(n),!0}catch(s){return this.#s.fromError(s,"linkTemplates.remove"),!1}}async ensure(e){e===""||this.links[e]||this.isLoading(e)||await this.load(e)}forget(e){if(e===void 0){this.links={};return}this.links=Object.fromEntries(Object.entries(this.links).filter(([n])=>n!==e))}}class UD{#e=C(We({}));get names(){return t(this.#e)}set names(e){u(this.#e,e,!0)}#n;#t;#s;constructor(e,n){this.#n=e,this.#t=n,this.#s=e.on("names.changed",s=>{this.names=s})}name(e){return this.names[e]}nameOf(e){return this.names[e]??e}get size(){return Object.keys(this.names).length}async load(){try{this.names=await this.#n.request("names.get")}catch(e){this.#t.fromError(e,"names.get")}}async rename(e){try{return this.names=await this.#n.request("names.set",e),!0}catch(n){return this.#t.fromError(n,"names.set"),!1}}dispose(){this.#s()}}function to(r,e,n){return`${r}|${e}|${n}`}function BD(r,e,n,s){try{return Ga(r,e,n,s)}catch{return to(r,e.ADDRESS,n)}}class HD{#e=C(We({}));get descriptions(){return t(this.#e)}set descriptions(e){u(this.#e,e,!0)}#n=C(!1);get loading(){return t(this.#n)}set loading(e){u(this.#n,e,!0)}#t=C(We([]));get results(){return t(this.#t)}set results(e){u(this.#t,e,!0)}#s=C(!1);get writing(){return t(this.#s)}set writing(e){u(this.#s,e,!0)}#a=C(We({}));get contents(){return t(this.#a)}set contents(e){u(this.#a,e,!0)}#r;#i;#l=[];constructor(e,n){this.#r=e,this.#i=n}description(e,n,s){return this.descriptions[to(e,n,s)]}async describe(e,n,s){const a=to(e,n,s),i=this.descriptions[a];if(i)return i;try{const o=await this.#r.request("paramset.description",e,n,s);return this.descriptions={...this.descriptions,[a]:o},o}catch(o){this.#i.fromError(o,`getParamsetDescription ${n} ${s}`);return}}contentOf(e,n,s,a,i="parameters"){const o=`${BD(e,n,s,a)}#${i}`,l=this.contents[o];if(l!==void 0||this.#l.includes(o))return l;this.#l.push(o);const f=n.ADDRESS;queueMicrotask(()=>{this.#o(o,e,f,s,i)})}async#o(e,n,s,a,i){let o;try{const l=this.descriptions[to(n,s,a)]??await this.#r.request("paramset.description",n,s,a);o=(i==="service-messages"?Jh(l):Object.keys(l)).length===0?"empty":"parameters"}catch{o="failed"}this.#l=this.#l.filter(l=>l!==e),this.contents={...this.contents,[e]:o}}async read(e,n,s){try{return await this.#r.request("paramset.get",e,n,s)}catch(a){this.#i.fromError(a,`getParamset ${n} ${s}`);return}}async paramsetId(e,n){try{return await this.#r.request("paramset.id",e,n)}catch{return""}}async channelMode(e,n){try{return await this.#r.request("channel.mode",e,n)}catch{return""}}async open(e,n,s){this.loading=!0;try{const[a,i]=await Promise.all([this.describe(e,n,s),this.read(e,n,s)]);return a?{description:a,values:i??{}}:void 0}finally{this.loading=!1}}async put(e,n,s,a,i){this.writing=!0;try{const o=await this.#r.request("paramset.put",e,n,s,a,i);return this.results=o,o}catch(o){return this.#i.fromError(o,`putParamset ${s}`),this.results=[],[]}finally{this.writing=!1}}async putLink(e,n,s,a){this.writing=!0;try{const i=await this.#r.request("paramset.putLink",e,n,s,a);return this.results=i,i}catch(i){return this.#i.fromError(i,"putParamset LINK"),this.results=[],[]}finally{this.writing=!1}}async setValue(e,n,s,a){try{return await this.#r.request("value.set",e,n,s,a),!0}catch(i){return this.#i.fromError(i,`setValue ${n} ${s}`),!1}}async getValue(e,n,s){try{return await this.#r.request("value.get",e,n,s)}catch(a){this.#i.fromError(a,`getValue ${n} ${s}`);return}}async valueStates(e,n){try{return await this.#r.request("paramset.valueStates",e,n)}catch{return{}}}async suppressedServiceMessages(e,n){return Oh(this.#r,e,n)}async suppressServiceMessages(e,n,s,a){try{return await Lh(this.#r,e,n,s,a),!0}catch(i){return this.#i.fromError(i,`suppressServiceMessages ${n} ${s||"*"}`),!1}}clearResults(){this.results=[]}}class VD{#e=C(We({}));get interfaces(){return t(this.#e)}set interfaces(e){u(this.#e,e,!0)}#n=C(!1);get loading(){return t(this.#n)}set loading(e){u(this.#n,e,!0)}#t=C(0);#s={};#a={};#r=C(We({}));#i;#l;#o;constructor(e,n){this.#i=e,this.#l=n,this.#o=e.on("rpc.event",s=>{if(s.address===void 0||s.datapoint===void 0||s.value===void 0)return;const a=s.value;if(typeof a!="boolean"&&typeof a!="number"&&typeof a!="string")return;this.#s[s.interfaceName]?.applyHmipValue(Fa(s.address),s.datapoint,a)===!0&&u(this.#t,t(this.#t)+1)})}#d(e){const n=this.#s[e]??new n1;return this.#s[e]=n,n}hasMatrix(e){return t(this.#r)[e]!==void 0}async ensureMatrix(e){e===""||t(this.#r)[e]!==void 0||await this.load(e)}gateways(e){return this.interfaces[e]??[]}gatewayAddresses(e){return this.gateways(e).map(n=>n.ADDRESS)}pair(e,n,s){return t(this.#t),this.#s[e]?.get(n,s)}peersOf(e,n){return t(this.#t),this.#s[e]?.peersOf(n)??[]}bestGatewayFor(e,n){return t(this.#t),this.#s[e]?.bestInterfaceFor(n,this.gatewayAddresses(e))}proposeReceivers(e,n,s){t(this.#t);const a=this.#s[e];return a?s1(n,this.gatewayAddresses(e),a,{marginDb:s}):[]}async ensureGateways(e){if(!(e===""||this.interfaces[e]!==void 0||this.#a[e]!==void 0)){this.#a[e]="busy";try{await this.#c(e),this.#a[e]="done"}catch(n){this.#a[e]="failed",this.#l.fromError(n,`listBidcosInterfaces ${e}`)}}}async#c(e){const n=await this.#i.request("bidcos.interfaces",e);this.interfaces={...this.interfaces,[e]:n};const s=n.find(a=>a.DEFAULT===!0)??n[0];s&&this.#d(e).setCentralAddress(s.ADDRESS)}async load(e){if(e!==""){u(this.#r,{...t(this.#r),[e]:"busy"},!0),this.loading=!0;try{await this.#c(e)}catch(n){this.#l.fromError(n,`listBidcosInterfaces ${e}`)}try{this.#d(e).applyRssiInfo(await this.#i.request("rssi.get",e)),u(this.#t,t(this.#t)+1),u(this.#r,{...t(this.#r),[e]:"done"},!0)}catch(n){u(this.#r,{...t(this.#r),[e]:"failed"},!0),this.#l.fromError(n,`rssiInfo ${e}`)}finally{this.loading=!1}}}async setBidcosInterface(e,n,s,a){try{return await this.#i.request("bidcos.setInterface",e,n,s,a),!0}catch(i){return this.#l.fromError(i,`setBidcosInterface ${n} ${s}`),!1}}dispose(){this.#o()}}const zD="hmm.routingTables";class jD{#e=C(We({}));get entries(){return t(this.#e)}set entries(e){u(this.#e,e,!0)}#n=C(We({}));get loading(){return t(this.#n)}set loading(e){u(this.#n,e,!0)}#t=C(We({}));get readAt(){return t(this.#t)}set readAt(e){u(this.#t,e,!0)}#s=C("");get writing(){return t(this.#s)}set writing(e){u(this.#s,e,!0)}#a=C(We({}));get tables(){return t(this.#a)}set tables(e){u(this.#a,e,!0)}#r=C(We({}));get tableProgress(){return t(this.#r)}set tableProgress(e){u(this.#r,e,!0)}#i;#l;#o;#d={};#c={};#u;#f;#h;#m=new Set;constructor(e,n,s,a={}){this.#i=e,this.#l=n,this.#o=s,this.#u=a.storage,this.#f=a.profile??(()=>"default"),this.#h=a.pauseMs??2e3}routers(e){const n=this.entries[e]??{};return this.#o.devices(e).filter(s=>n[s.ADDRESS]?.capable===!0).map(s=>({address:s.ADDRESS,enabled:n[s.ADDRESS]?.enabled}))}isRouting(e,n){return this.entries[e]?.[n]?.enabled===!0}hasRead(e){return this.readAt[e]!==void 0}isLoading(e){return this.loading[e]===!0}async ensure(e){await this.#v(e,!1)}async load(e){await this.#v(e,!0)}async#v(e,n){const s=this.#c[e];if(s&&(await s,!n))return;const a=this.#_(e,n);this.#c[e]=a;try{await a}finally{this.#c[e]=void 0}}async#_(e,n){const s=this.#o.index(e);if(!s)return;const a=this.entries[e]??{},i=s.devices().filter(l=>n?a[l.ADDRESS]?.capable!==!1:a[l.ADDRESS]===void 0);if(i.length===0){this.readAt[e]===void 0&&(this.readAt={...this.readAt,[e]:Date.now()});return}this.loading={...this.loading,[e]:!0};let o;try{for(const l of i){const f=s.get(ya(l.ADDRESS));if(!f){this.#b(e,l.ADDRESS,{capable:!1,enabled:void 0});continue}if(!await this.#p(e,l,f)){this.#b(e,l.ADDRESS,{capable:!1,enabled:void 0});continue}let _;try{const g=await this.#i.request("paramset.get",e,f.ADDRESS,"MASTER");_=bx(g)}catch(g){o??=g}this.#b(e,l.ADDRESS,{capable:!0,enabled:_})}this.readAt={...this.readAt,[e]:Date.now()}}finally{this.loading={...this.loading,[e]:!1}}o!==void 0&&this.#l.fromError(o,`getParamset MASTER ${ka}`)}async#p(e,n,s){let a;try{a=Ga(e,s,"MASTER",n)}catch{a=`${e}|${s.ADDRESS}|MASTER`}const i=this.#d[a];if(i!==void 0)return i;try{const o=await this.#i.request("paramset.description",e,s.ADDRESS,"MASTER"),l=gx(o);return this.#d[a]=l,l}catch{return!1}}#b(e,n,s){this.entries={...this.entries,[e]:{...this.entries[e],[n]:s}}}async setRouting(e,n,s){this.writing=n;try{const i=(await this.#i.request("paramset.put",e,[ya(n)],"MASTER",{[ka]:s}))[0];if(i?.ok!==!0){const o=i?.faultString??i?.problems.map(l=>l.message).join("; ")??"";return this.#l.fromError(new Error(o===""?"no result":o),`putParamset ${ya(n)} MASTER ${ka}`),!1}return this.#b(e,n,{capable:!0,enabled:s}),!0}catch(a){return this.#l.fromError(a,`putParamset ${ya(n)} MASTER ${ka}`),!1}finally{this.writing=""}}#E(e){return`${zD}.${this.#f()}.${e}`}tablesOf(e){const n=this.tables[e];if(n!==void 0||this.#m.has(e))return n;this.#m.add(e);let s;try{const a=this.#u?.getItem(this.#E(e)),i=a?JSON.parse(a):void 0;typeof i=="object"&&i!==null&&typeof i.readAt=="number"&&typeof i.tables=="object"&&(s=i)}catch{s=void 0}if(s!==void 0){const a=s;queueMicrotask(()=>{this.tables[e]===void 0&&(this.tables={...this.tables,[e]:a})})}return s}isReadingTables(e){return this.tableProgress[e]!==void 0}tableTargets(e){const n=this.#o.index(e);return n?this.routers(e).filter(s=>s.enabled===!0).flatMap(s=>{const a=n.get(s.address),i=a?dm(a,n.get(ya(s.address))):void 0;return i===void 0?[]:[{router:s.address,address:i}]}):[]}async readTables(e){if(this.isReadingTables(e))return;const n=this.tableTargets(e);this.tableProgress={...this.tableProgress,[e]:{done:0,total:n.length}};const s={};let a=0;try{for(const[o,l]of n.entries()){o>0&&this.#h>0&&await new Promise(f=>setTimeout(f,this.#h));try{const f=await this.#i.request("paramset.get",e,l.address,bo);s[l.router]={readAt:Date.now(),address:l.address,entries:rm(f)}}catch(f){a+=1,s[l.router]={readAt:Date.now(),address:l.address,error:f instanceof Error?f.message:String(f)}}this.tableProgress={...this.tableProgress,[e]:{done:o+1,total:n.length}}}}finally{this.tableProgress={...this.tableProgress,[e]:void 0}}const i={readAt:Date.now(),tables:s};this.#m.add(e),this.tables={...this.tables,[e]:i};try{this.#u?.setItem(this.#E(e),JSON.stringify(i))}catch{}a>0&&this.#l.push("warn",`getParamset ${bo}: ${String(a)} / ${String(n.length)}`,e)}}class WD{#e=C(We([]));get messages(){return t(this.#e)}set messages(e){u(this.#e,e,!0)}#n=C(!1);get loading(){return t(this.#n)}set loading(e){u(this.#n,e,!0)}#t=C(We({}));get suppressed(){return t(this.#t)}set suppressed(e){u(this.#t,e,!0)}#s=C(We({}));get descriptions(){return t(this.#s)}set descriptions(e){u(this.#s,e,!0)}#a;#r;#i;#l=[];#o=!1;#d=[];#c=[];constructor(e,n){this.#a=e,this.#r=n,this.#i=e.on("serviceMessages.changed",s=>{this.apply(dl(s))})}apply(e){const n=this.#l,s=e.filter(a=>!n.includes(Fu(a)));if(this.messages=e,this.#l=e.map(a=>Fu(a)),!this.#o){this.#o=!0;return}for(const a of s)this.#r.push("warn",`${a.address} ${a.datapoint}`,a.interfaceName)}acknowledgeable(e){return this.of(e).filter(n=>vo(n.datapoint))}of(e){return this.messages.filter(n=>n.interfaceName===e)}countOf(e){return this.of(e).length}async load(e){this.loading=!0;try{this.#u(e,dl(await this.#a.request("serviceMessages.list",e)))}catch(n){this.#r.fromError(n,"serviceMessages.list")}finally{this.loading=!1}}async refresh(e){this.loading=!0;try{this.#u(e,dl(await this.#a.request("serviceMessages.refresh",e)))}catch(n){this.#r.fromError(n,"serviceMessages.refresh")}finally{this.loading=!1}}#u(e,n){if(e===void 0){this.apply(n);return}this.apply([...this.messages.filter(s=>s.interfaceName!==e),...n.filter(s=>s.interfaceName===e)])}async acknowledge(e,n,s){try{return await this.#a.request("serviceMessages.ack",e,n,s),!0}catch(a){return this.#r.fromError(a,`serviceMessages.ack ${n} ${s}`),!1}}async acknowledgeMany(e){let n=0;for(const s of e)vo(s.datapoint)&&await this.acknowledge(s.interfaceName,s.address,s.datapoint)&&(n+=1);return n>0&&await this.load(),n}suppressedOf(e,n){return this.suppressed[sa(e,n)]}isSuppressed(e){return this.suppressedOf(e.interfaceName,e.address)?.includes(e.datapoint)===!0}async loadSuppressed(e){const n=this.of(e).map(s=>s.address).filter((s,a,i)=>i.indexOf(s)===a).filter(s=>!this.#d.includes(sa(e,s)));await Promise.all(n.map(s=>this.#f(e,s)))}async suppress(e,n,s,a){try{await Lh(this.#a,e,n,s,a)}catch(i){return this.#r.fromError(i,`suppressServiceMessages ${n} ${s}`),!1}return await this.#f(e,n),await this.load(),!0}valueName(e){const n=this.descriptions[sa(e.interfaceName,e.address)];return Z_(n?.[e.datapoint],e.value)}async loadDescriptions(e){const n=this.of(e).filter(s=>typeof s.value=="number").map(s=>s.address).filter((s,a,i)=>i.indexOf(s)===a).filter(s=>!this.#c.includes(sa(e,s)));this.#c=[...this.#c,...n.map(s=>sa(e,s))],await Promise.all(n.map(async s=>{try{const a=await this.#a.request("paramset.description",e,s,"VALUES");this.descriptions={...this.descriptions,[sa(e,s)]:a}}catch{}}))}async#f(e,n){const s=sa(e,n);this.#d.includes(s)||(this.#d=[...this.#d,s]);const a=await Oh(this.#a,e,n);a!==void 0&&(this.suppressed={...this.suppressed,[s]:a})}dispose(){this.#i()}}function Fu(r){return`${r.interfaceName}|${r.address}|${r.datapoint}`}function sa(r,e){return`${r}|${e}`}function dl(r){return Array.isArray(r)?r:[]}class Gu{#e=C(!1);get embedded(){return t(this.#e)}set embedded(e){u(this.#e,e,!0)}#n=C(void 0);get theme(){return t(this.#n)}set theme(e){u(this.#n,e,!0)}#t;#s=e=>{this.#a(e)};constructor(e=typeof window>"u"?void 0:window){if(this.#t=e,!e||!KD(e))return;const n=Uu(/[?&]theme=([a-z]+)/u.exec(e.location.search)?.[1]);n!==void 0&&(this.embedded=!0,this.theme=n),e.addEventListener("message",this.#s)}#a(e){const n=this.#t;if(!n||e.origin!==n.location.origin||e.source!==n.parent)return;const s=e.data;s===null||typeof s!="object"||s.type!=="openccu-lite:theme"||(this.embedded=!0,this.theme=Uu(s.theme)??this.theme??"system")}dispose(){this.#t?.removeEventListener("message",this.#s)}}function Uu(r){return r==="system"||r==="light"||r==="dark"?r:void 0}function KD(r){try{return r.self!==r.top&&r.parent.location.origin===r.location.origin}catch{return!1}}class YD{#e=C(We({}));get memberships(){return t(this.#e)}set memberships(e){u(this.#e,e,!0)}#n=C(We({}));get loading(){return t(this.#n)}set loading(e){u(this.#n,e,!0)}#t=C(!1);get writing(){return t(this.#t)}set writing(e){u(this.#t,e,!0)}#s;#a;constructor(e,n){this.#s=e,this.#a=n}of(e){return this.memberships[e]??{}}isLoading(e){return this.loading[e]===!0}async sync(e,n){const s=this.memberships[e]??{},a=n.filter(l=>!(l in s)),i=Object.keys(s).filter(l=>!n.includes(l));if(a.length===0&&i.length===0)return;const o=Object.fromEntries(Object.entries(s).filter(([l])=>n.includes(l)));if(a.length===0){this.memberships={...this.memberships,[e]:o};return}await this.#r(e,a,o)}async refresh(e,n){n.length!==0&&await this.#r(e,n,this.memberships[e]??{})}async#r(e,n,s){this.loading={...this.loading,[e]:!0};const a={...s};try{for(const i of n)try{const o=await this.#s.request("paramset.get",e,i,"MASTER");a[i]=Hb(o)??null}catch(o){this.#a.fromError(o,`getParamset ${i} MASTER`)}this.memberships={...this.memberships,[e]:a}}finally{this.loading={...this.loading,[e]:!1}}}async setMembers(e,n,s,a){const i=ih(n),o=[];this.writing=!0;try{for(const[l,f]of[[s,!0],[a,!1]])for(const p of l)try{o.push(...await this.#s.request("paramset.put",e,[p],"MASTER",{[i]:f}))}catch(_){this.#a.fromError(_,`putParamset ${p} MASTER ${i}`)}}finally{this.writing=!1}return await this.refresh(e,[...s,...a]),o}forget(e){if(e===void 0){this.memberships={};return}this.memberships=Object.fromEntries(Object.entries(this.memberships).filter(([n])=>n!==e))}}class qD{#e=C(void 0);get state(){return t(this.#e)}set state(e){u(this.#e,e,!0)}#n=C(We({}));get enums(){return t(this.#n)}set enums(e){u(this.#n,e,!0)}#t=C(We({}));get objects(){return t(this.#t)}set objects(e){u(this.#t,e,!0)}#s=c(()=>w1(this.enums));get flat(){return t(this.#s)}set flat(e){u(this.#s,e)}#a;#r;#i=[];constructor(e,n){this.#a=e,this.#r=n,this.#i.push(e.on("meta.changed",s=>{this.state=s}),e.on("meta.enums.changed",s=>{this.enums=s}),e.on("meta.objects.changed",s=>{this.objects=s}))}get available(){return this.state!==void 0&&this.state.reachable}get writable(){return this.state!==void 0&&this.state.reachable&&this.state.writable}get flatOnly(){return this.state?.flat===!0}refOf(e,n){return u1(e,n)}view(e){return this.objects[e]}titleOf(e,n){return Nh(e,this.enums[e],n)}options(e){return jh(this.enums,e)}nameOf(e){for(const n of Object.values(this.flat)){const s=n.find(a=>a.path===e);if(s)return s.node.name}return e}matches(e,n){return Va(this.objects[e],n)}deviceMatches(e,n,s){return Wh(this.objects[e],n.map(a=>this.objects[a]),s)}members(e){return Ao(this.objects,e)}async load(){try{const e=await this.#a.request("meta.get");this.state=e.state,this.enums=e.enums,this.objects=e.objects}catch{this.state=void 0}}async refresh(){try{return this.state=await this.#a.request("meta.refresh"),!0}catch(e){return this.#r.fromError(e,"meta.refresh"),!1}}async assign(e,n,s){if(e.length===0)return!1;try{return await this.#a.request("meta.assign",[...e],n,s),!0}catch(a){return this.#r.fromError(a,"meta.assign"),!1}}async assignEach(e){const n=[];for(const s of e)try{await this.#a.request("meta.assign",[...s.refs],s.path,s.on),n.push({path:s.path,ok:!0})}catch(a){n.push({path:s.path,ok:!1,message:Di(a).message})}return n}async createEnum(e,n){try{return await this.#a.request("meta.enum.create",e,n),!0}catch(s){return this.#r.fromError(s,"meta.enum.create"),!1}}async renameEnum(e,n){try{return await this.#a.request("meta.enum.update",e,n),!0}catch(s){return this.#r.fromError(s,"meta.enum.update"),!1}}async deleteEnum(e,n){try{return await this.#a.request("meta.enum.delete",e,n),!0}catch(s){return this.#r.fromError(s,"meta.enum.delete"),!1}}async createNode(e,n,s){try{return await this.#a.request("meta.node.create",e,n,s)}catch(a){this.#r.fromError(a,"meta.node.create");return}}async renameNode(e,n){try{return await this.#a.request("meta.node.update",e,{name:n}),!0}catch(s){return this.#r.fromError(s,"meta.node.update"),!1}}async moveNode(e,n){try{return await this.#a.request("meta.node.update",e,{parent:n}),!0}catch(s){return this.#r.fromError(s,"meta.node.update"),!1}}async deleteNode(e,n){try{return await this.#a.request("meta.node.delete",e,n),!0}catch(s){return this.#r.fromError(s,"meta.node.delete"),!1}}dispose(){for(const e of this.#i)e();this.#i.length=0}}class $D{#e=C(We([]));get counters(){return t(this.#e)}set counters(e){u(this.#e,e,!0)}#n;#t;#s;constructor(e,n){this.#n=e,this.#t=n,this.#s=e.on("unreach.changed",s=>{this.counters=s})}countOf(e,n){const s=n.split(":")[0]??n;return this.counters.find(a=>a.interfaceName===e&&a.address===s)?.count??0}isUnreach(e,n){const s=n.split(":")[0]??n;return this.counters.find(a=>a.interfaceName===e&&a.address===s)?.unreach===!0}of(e){return this.counters.filter(n=>n.interfaceName===e)}async load(){try{this.counters=await this.#n.request("unreach.list")}catch(e){this.#t.fromError(e,"unreach.list")}}async reset(e,n){try{return await this.#n.request("unreach.reset",e,n),await this.load(),!0}catch(s){return this.#t.fromError(s,"unreach.reset"),!1}}dispose(){this.#s()}}class XD{#e=C(We([]));get entries(){return t(this.#e)}set entries(e){u(this.#e,e,!0)}#n=C(We([]));get pending(){return t(this.#n)}set pending(e){u(this.#n,e,!0)}#t=C(void 0);get progress(){return t(this.#t)}set progress(e){u(this.#t,e,!0)}#s=C(!1);get hideBackground(){return t(this.#s)}set hideBackground(e){u(this.#s,e,!0)}#a;#r;#i;#l;#o=[];#d=1;constructor(e,n,s={}){this.#a=e,this.#r=n,this.#i=s.max??200,this.#l=s.now??(()=>Date.now()),this.#o.push(e.on("rpcLog.appended",a=>{this.append(a)}),e.on("write.progress",a=>{this.progress=a.done>=a.total?void 0:a}))}get busy(){return this.pending.length>0||this.progress!==void 0}get newestFirst(){return[...this.entries].reverse()}get visible(){const e=this.newestFirst;return this.hideBackground?e.filter(n=>n.origin!=="background"):e}append(e){const n=[...this.entries,e];this.entries=n.length>this.#i?n.slice(n.length-this.#i):n}beginPending(e,n,s){const a=this.#d;return this.#d+=1,this.pending=[...this.pending,{id:a,interfaceName:e,method:n,params:s,startedAt:this.#l()}],a}endPending(e){this.pending=this.pending.filter(n=>n.id!==e)}async load(e){try{this.entries=await this.#a.request("rpcLog.list",e)}catch(n){this.#r.fromError(n,"rpcLog.list")}}async cancel(e){try{return await this.#a.request("write.cancel",e)}catch(n){return this.#r.fromError(n,"write.cancel"),0}}async clear(){this.entries=[];try{await this.#a.request("rpcLog.clear")}catch(e){this.#r.fromError(e,"rpcLog.clear")}}dispose(){for(const e of this.#o)e();this.#o.length=0}}class QD{transport;i18n;notices;app;interfaces;devices;names;links;serviceMessages;unreach;events;rpcLog;host;meta;taxonomy;groups;smokeGroups;paramsets;radio;routers;console;changeSet;shell;#e=!1;constructor(e,n={}){this.transport=e,this.notices=new dg(e,{hintFor:s=>J1(this.host.info?.platform,s)?this.i18n.t(Fh):void 0}),this.app=new yD(e,this.notices,n),this.i18n=new O1(this.app.language),this.interfaces=new OD(e,this.notices),this.devices=new xD(e,this.notices),this.names=new UD(e,this.notices),this.links=new GD(e,this.notices),this.serviceMessages=new WD(e,this.notices),this.unreach=new $D(e,this.notices),this.events=new DD(e,this.notices,{...n.eventCapacity===void 0?{}:{capacity:n.eventCapacity}}),this.rpcLog=new XD(e,this.notices),this.meta=new FD(e,{...n.dataSource===void 0?{}:{source:n.dataSource}}),this.taxonomy=new qD(e,this.notices),this.groups=new ID(e,this.notices),this.smokeGroups=new YD(e,this.notices),this.paramsets=new HD(e,this.notices),this.radio=new VD(e,this.notices),this.routers=new jD(e,this.notices,this.devices,{storage:this.app.storage,profile:()=>um(this.app.config?.connection.host??"")}),this.console=new wD(e,this.notices),this.changeSet=new SD(e,this.notices,this.rpcLog),this.app.onInterfaceRouted(s=>{this.#e&&this.#n(rh(s))}),this.shell="shellWindow"in n?new Gu(n.shellWindow):new Gu,this.host=new MD({...n.hostBridge===void 0?{}:{bridge:n.hostBridge},...n.hostScope===void 0?{}:{scope:n.hostScope}})}get tabs(){return this.app.storeSelected?vc(this.taxonomy.state):db(this.interfaces.typeOf(this.app.selectedInterface),{heatingGroups:this.groups.offered})}knownName=e=>this.names.name(e)??this.groups.fallbackName(e);nameOf=e=>this.knownName(e)??e;async start(){await this.app.load(),this.i18n.language=this.app.language,this.meta.setLanguage(this.app.language).catch(()=>{}),this.host.load().catch(()=>{}),await Promise.all([this.interfaces.load(),this.names.load(),this.rpcLog.load(),this.taxonomy.load()]),await this.groups.follow(this.taxonomy.state);const e=this.app.storeSelected&&vc(this.taxonomy.state).length===0?this.app.configuredInterfaces[0]??"":this.app.selectedInterface;await this.selectInterface(e),this.#e=!0}async selectInterface(e){const n=this.app.storeSelected;this.app.setInterface(e),await this.#n(n)}async#n(e){const n=this.app.selectedInterface;if(this.app.storeSelected){(!vi(this.app.tab)||!this.tabs.includes(this.app.tab))&&this.app.setTab(this.tabs[0]??"metadata");return}(e||vi(this.app.tab))&&this.app.setTab(this.app.interfaceTab),this.tabs.includes(this.app.tab)||this.app.setTab("devices"),n!==""&&await Promise.all([this.devices.ensure(n),this.links.ensure(n),this.serviceMessages.load(),this.events.load()])}async refresh(){const e=this.app.selectedInterface;e===""||this.app.storeSelected||await Promise.all([this.devices.load(e,{refresh:!0}),this.links.load(e),this.serviceMessages.load(),this.interfaces.load()])}dispose(){this.shell.dispose(),this.radio.dispose(),this.host.dispose(),this.rpcLog.dispose(),this.events.dispose(),this.serviceMessages.dispose(),this.groups.dispose(),this.taxonomy.dispose(),this.names.dispose(),this.devices.dispose(),this.interfaces.dispose(),this.app.dispose(),this.notices.dispose()}}function ZD(r,e={}){return new QD(r,e)}const fm=["BidCos-RF","HmIP-RF"],hm=[{ADDRESS:"BidCoS-RF",TYPE:"HM-RCV-50",PARENT:"",CHILDREN:["BidCoS-RF:0","BidCoS-RF:1","BidCoS-RF:2"],PARAMSETS:["MASTER"],FIRMWARE:"2.31.25",VERSION:1,FLAGS:9,RX_MODE:1,INTERFACE:"",RF_ADDRESS:1234567},{ADDRESS:"BidCoS-RF:0",TYPE:"MAINTENANCE",PARENT:"BidCoS-RF",PARENT_TYPE:"HM-RCV-50",PARAMSETS:["MASTER","VALUES"],INDEX:0,DIRECTION:0,FLAGS:3,VERSION:1},{ADDRESS:"BidCoS-RF:1",TYPE:"VIRTUAL_KEY",PARENT:"BidCoS-RF",PARENT_TYPE:"HM-RCV-50",PARAMSETS:["MASTER","LINK","VALUES"],INDEX:1,DIRECTION:1,LINK_SOURCE_ROLES:"SWITCH KEYMATIC WINMATIC",LINK_TARGET_ROLES:"",FLAGS:1,VERSION:1},{ADDRESS:"BidCoS-RF:2",TYPE:"VIRTUAL_KEY",PARENT:"BidCoS-RF",PARENT_TYPE:"HM-RCV-50",PARAMSETS:["MASTER","LINK","VALUES"],INDEX:2,DIRECTION:1,LINK_SOURCE_ROLES:"SWITCH KEYMATIC WINMATIC",LINK_TARGET_ROLES:"",FLAGS:1,VERSION:1},{ADDRESS:"MEQ0123456",TYPE:"HM-LC-Sw1-Pl-CT-R1",PARENT:"",CHILDREN:["MEQ0123456:0","MEQ0123456:1"],PARAMSETS:["MASTER"],FIRMWARE:"2.5",AVAILABLE_FIRMWARE:"2.5",VERSION:8,FLAGS:1,RX_MODE:1,INTERFACE:"BidCoS-RF",ROAMING:0,RF_ADDRESS:4132819,UPDATABLE:1},{ADDRESS:"MEQ0123456:0",TYPE:"MAINTENANCE",PARENT:"MEQ0123456",PARENT_TYPE:"HM-LC-Sw1-Pl-CT-R1",PARAMSETS:["MASTER","VALUES"],INDEX:0,DIRECTION:0,FLAGS:3,VERSION:8},{ADDRESS:"MEQ0123456:1",TYPE:"SWITCH",PARENT:"MEQ0123456",PARENT_TYPE:"HM-LC-Sw1-Pl-CT-R1",PARAMSETS:["MASTER","LINK","VALUES"],INDEX:1,DIRECTION:2,LINK_SOURCE_ROLES:"",LINK_TARGET_ROLES:"SWITCH",FLAGS:1,VERSION:8},{ADDRESS:"NEQ1000001",TYPE:"HM-Sec-SD-2",PARENT:"",CHILDREN:["NEQ1000001:0","NEQ1000001:1"],PARAMSETS:["MASTER"],FIRMWARE:"1.4",VERSION:1,FLAGS:1,RX_MODE:12,RF_ADDRESS:5000001},{ADDRESS:"NEQ1000001:0",TYPE:"MAINTENANCE",PARENT:"NEQ1000001",PARENT_TYPE:"HM-Sec-SD-2",PARAMSETS:["MASTER","VALUES"],INDEX:0,DIRECTION:0,FLAGS:3,VERSION:1},{ADDRESS:"NEQ1000001:1",TYPE:"SMOKE_DETECTOR",PARENT:"NEQ1000001",PARENT_TYPE:"HM-Sec-SD-2",PARAMSETS:["MASTER","VALUES"],INDEX:1,DIRECTION:1,FLAGS:1,VERSION:1,TEAM:"*NEQ1000001:1",TEAM_TAG:"smoke_detector"},{ADDRESS:"NEQ1000002",TYPE:"HM-Sec-SD-2",PARENT:"",CHILDREN:["NEQ1000002:0","NEQ1000002:1"],PARAMSETS:["MASTER"],FIRMWARE:"1.4",VERSION:1,FLAGS:1,RX_MODE:12,RF_ADDRESS:5000002},{ADDRESS:"NEQ1000002:0",TYPE:"MAINTENANCE",PARENT:"NEQ1000002",PARENT_TYPE:"HM-Sec-SD-2",PARAMSETS:["MASTER","VALUES"],INDEX:0,DIRECTION:0,FLAGS:3,VERSION:1},{ADDRESS:"NEQ1000002:1",TYPE:"SMOKE_DETECTOR",PARENT:"NEQ1000002",PARENT_TYPE:"HM-Sec-SD-2",PARAMSETS:["MASTER","VALUES"],INDEX:1,DIRECTION:1,FLAGS:1,VERSION:1,TEAM:"*NEQ1000001:1",TEAM_TAG:"smoke_detector"},{ADDRESS:"*NEQ1000001",TYPE:"HM-Sec-SD-2-Team",PARENT:"",CHILDREN:["*NEQ1000001:0","*NEQ1000001:1"],PARAMSETS:["MASTER"],FIRMWARE:"1.0",VERSION:3,FLAGS:9,RX_MODE:0},{ADDRESS:"*NEQ1000001:0",TYPE:"MAINTENANCE",PARENT:"*NEQ1000001",PARENT_TYPE:"HM-Sec-SD-2-Team",PARAMSETS:["MASTER","VALUES"],INDEX:0,DIRECTION:0,FLAGS:3,VERSION:3},{ADDRESS:"*NEQ1000001:1",TYPE:"SMOKE_DETECTOR_TEAM_V2",PARENT:"*NEQ1000001",PARENT_TYPE:"HM-Sec-SD-2-Team",PARAMSETS:["MASTER","VALUES"],INDEX:1,DIRECTION:0,FLAGS:1,VERSION:3,TEAM_TAG:"smoke_detector",TEAM_CHANNELS:["NEQ1000001:1","NEQ1000002:1"]},{ADDRESS:"JEQ0234567",TYPE:"HM-PBI-4-FM",PARENT:"",CHILDREN:["JEQ0234567:0","JEQ0234567:1","JEQ0234567:2"],PARAMSETS:["MASTER"],FIRMWARE:"1.4",VERSION:15,FLAGS:1,RX_MODE:12,INTERFACE:"BidCoS-RF",ROAMING:0,RF_ADDRESS:4298112},{ADDRESS:"JEQ0234567:0",TYPE:"MAINTENANCE",PARENT:"JEQ0234567",PARENT_TYPE:"HM-PBI-4-FM",PARAMSETS:["MASTER","VALUES"],INDEX:0,DIRECTION:0,FLAGS:3,VERSION:15},{ADDRESS:"JEQ0234567:1",TYPE:"KEY",PARENT:"JEQ0234567",PARENT_TYPE:"HM-PBI-4-FM",PARAMSETS:["MASTER","LINK","VALUES"],INDEX:1,DIRECTION:1,LINK_SOURCE_ROLES:"SWITCH KEYMATIC WINMATIC",LINK_TARGET_ROLES:"",FLAGS:1,VERSION:15},{ADDRESS:"JEQ0234567:2",TYPE:"KEY",PARENT:"JEQ0234567",PARENT_TYPE:"HM-PBI-4-FM",PARAMSETS:["MASTER","LINK","VALUES"],INDEX:2,DIRECTION:1,LINK_SOURCE_ROLES:"SWITCH KEYMATIC WINMATIC",LINK_TARGET_ROLES:"",FLAGS:1,VERSION:15},{ADDRESS:"KEQ0345678",TYPE:"HM-CC-RT-DN",PARENT:"",CHILDREN:["KEQ0345678:0","KEQ0345678:4"],PARAMSETS:["MASTER"],FIRMWARE:"1.10",AVAILABLE_FIRMWARE:"1.11",VERSION:20,FLAGS:1,RX_MODE:12,INTERFACE:"BidCoS-RF",ROAMING:0,RF_ADDRESS:5012733,UPDATABLE:1},{ADDRESS:"KEQ0345678:0",TYPE:"MAINTENANCE",PARENT:"KEQ0345678",PARENT_TYPE:"HM-CC-RT-DN",PARAMSETS:["MASTER","VALUES"],INDEX:0,DIRECTION:0,FLAGS:3,VERSION:20},{ADDRESS:"KEQ0345678:4",TYPE:"CLIMATECONTROL_RT_TRANSCEIVER",PARENT:"KEQ0345678",PARENT_TYPE:"HM-CC-RT-DN",PARAMSETS:["MASTER","LINK","VALUES"],INDEX:4,DIRECTION:1,LINK_SOURCE_ROLES:"THERMALCONTROL_TRANSMIT",LINK_TARGET_ROLES:"",FLAGS:1,VERSION:20},{ADDRESS:"LEQ0456789",TYPE:"HM-Sec-SC-2",PARENT:"",CHILDREN:["LEQ0456789:0","LEQ0456789:1"],PARAMSETS:["MASTER"],FIRMWARE:"2.2",VERSION:16,FLAGS:1,RX_MODE:12,INTERFACE:"BidCoS-RF",ROAMING:0,RF_ADDRESS:5298004},{ADDRESS:"LEQ0456789:0",TYPE:"MAINTENANCE",PARENT:"LEQ0456789",PARENT_TYPE:"HM-Sec-SC-2",PARAMSETS:["MASTER","VALUES"],INDEX:0,DIRECTION:0,FLAGS:3,VERSION:16},{ADDRESS:"LEQ0456789:1",TYPE:"SHUTTER_CONTACT",PARENT:"LEQ0456789",PARENT_TYPE:"HM-Sec-SC-2",PARAMSETS:["MASTER","LINK","VALUES"],INDEX:1,DIRECTION:1,LINK_SOURCE_ROLES:"WINDOW_SWITCH_RECEIVER",LINK_TARGET_ROLES:"",FLAGS:1,VERSION:16},{ADDRESS:"GEQ0567890",TYPE:"HM-LC-Dim1T-FM",PARENT:"",CHILDREN:["GEQ0567890:0","GEQ0567890:1"],PARAMSETS:["MASTER"],FIRMWARE:"2.2",VERSION:34,FLAGS:1,RX_MODE:1,INTERFACE:"BidCoS-RF",ROAMING:0,RF_ADDRESS:3912004},{ADDRESS:"GEQ0567890:0",TYPE:"MAINTENANCE",PARENT:"GEQ0567890",PARENT_TYPE:"HM-LC-Dim1T-FM",PARAMSETS:["MASTER","VALUES"],INDEX:0,DIRECTION:0,FLAGS:3,VERSION:34},{ADDRESS:"GEQ0567890:1",TYPE:"DIMMER",PARENT:"GEQ0567890",PARENT_TYPE:"HM-LC-Dim1T-FM",PARAMSETS:["MASTER","LINK","VALUES"],INDEX:1,DIRECTION:2,LINK_SOURCE_ROLES:"",LINK_TARGET_ROLES:"SWITCH",FLAGS:1,VERSION:34}],JD=[{ADDRESS:"HmIP-RCV-50",TYPE:"HmIP-RCV-50",PARENT:"",CHILDREN:["HmIP-RCV-50:0","HmIP-RCV-50:1"],PARAMSETS:["MASTER"],FIRMWARE:"1.0.0",VERSION:1,FLAGS:9,RX_MODE:1,SUBTYPE:""},{ADDRESS:"HmIP-RCV-50:0",TYPE:"MAINTENANCE",PARENT:"HmIP-RCV-50",PARENT_TYPE:"HmIP-RCV-50",PARAMSETS:["MASTER","VALUES"],INDEX:0,DIRECTION:0,FLAGS:3,VERSION:1},{ADDRESS:"HmIP-RCV-50:1",TYPE:"VIRTUAL_KEY",PARENT:"HmIP-RCV-50",PARENT_TYPE:"HmIP-RCV-50",PARAMSETS:["MASTER","LINK","VALUES"],INDEX:1,DIRECTION:1,LINK_SOURCE_ROLES:"SWITCH",FLAGS:1,VERSION:1},{ADDRESS:"000A1B2C3D4E5F",TYPE:"HmIP-BSM",SUBTYPE:"BSM",PARENT:"",CHILDREN:["000A1B2C3D4E5F:0","000A1B2C3D4E5F:1","000A1B2C3D4E5F:4"],PARAMSETS:["MASTER"],FIRMWARE:"2.10.4",AVAILABLE_FIRMWARE:"2.12.0",VERSION:40,FLAGS:1,RX_MODE:1,INTERFACE:"HmIP-RF",UPDATABLE:1},{ADDRESS:"000A1B2C3D4E5F:0",TYPE:"MAINTENANCE",PARENT:"000A1B2C3D4E5F",PARENT_TYPE:"HmIP-BSM",PARAMSETS:["MASTER","VALUES","ROUTING_TABLE"],INDEX:0,DIRECTION:0,FLAGS:3,VERSION:40},{ADDRESS:"000A1B2C3D4E5F:1",TYPE:"KEY_TRANSCEIVER",PARENT:"000A1B2C3D4E5F",PARENT_TYPE:"HmIP-BSM",PARAMSETS:["MASTER","LINK","VALUES"],INDEX:1,DIRECTION:1,LINK_SOURCE_ROLES:"SWITCH",FLAGS:1,VERSION:40},{ADDRESS:"000A1B2C3D4E5F:4",TYPE:"SWITCH_VIRTUAL_RECEIVER",PARENT:"000A1B2C3D4E5F",PARENT_TYPE:"HmIP-BSM",PARAMSETS:["MASTER","LINK","VALUES"],INDEX:4,DIRECTION:2,LINK_TARGET_ROLES:"SWITCH",FLAGS:1,VERSION:40},{ADDRESS:"0011D3C9A1B2C3",TYPE:"HmIP-SWDO",SUBTYPE:"SWDO",PARENT:"",CHILDREN:["0011D3C9A1B2C3:0","0011D3C9A1B2C3:1"],PARAMSETS:["MASTER"],FIRMWARE:"1.4.6",VERSION:12,FLAGS:1,RX_MODE:8,INTERFACE:"HmIP-RF"},{ADDRESS:"0011D3C9A1B2C3:0",TYPE:"MAINTENANCE",PARENT:"0011D3C9A1B2C3",PARENT_TYPE:"HmIP-SWDO",PARAMSETS:["MASTER","VALUES"],INDEX:0,DIRECTION:0,FLAGS:3,VERSION:12},{ADDRESS:"0011D3C9A1B2C3:1",TYPE:"SHUTTER_CONTACT",PARENT:"0011D3C9A1B2C3",PARENT_TYPE:"HmIP-SWDO",PARAMSETS:["MASTER","LINK","VALUES"],INDEX:1,DIRECTION:1,LINK_SOURCE_ROLES:"WINDOW_SWITCH_RECEIVER",FLAGS:1,VERSION:12},{ADDRESS:"3014F711A0001F",TYPE:"HmIP-eTRV-2",SUBTYPE:"eTRV",PARENT:"",CHILDREN:["3014F711A0001F:0","3014F711A0001F:1"],PARAMSETS:["MASTER"],FIRMWARE:"2.4.4",VERSION:34,FLAGS:1,RX_MODE:8,INTERFACE:"HmIP-RF"},{ADDRESS:"3014F711A0001F:0",TYPE:"MAINTENANCE",PARENT:"3014F711A0001F",PARENT_TYPE:"HmIP-eTRV-2",PARAMSETS:["MASTER","VALUES"],INDEX:0,DIRECTION:0,FLAGS:3,VERSION:34},{ADDRESS:"3014F711A0001F:1",TYPE:"HEATING_CLIMATECONTROL_TRANSCEIVER",PARENT:"3014F711A0001F",PARENT_TYPE:"HmIP-eTRV-2",PARAMSETS:["MASTER","LINK","VALUES"],INDEX:1,DIRECTION:2,LINK_TARGET_ROLES:"THERMALCONTROL_TRANSMIT",FLAGS:1,VERSION:34},{ADDRESS:"0001D8A9B7C6D5",TYPE:"HmIP-WRC2",SUBTYPE:"WRC2",PARENT:"",CHILDREN:["0001D8A9B7C6D5:0","0001D8A9B7C6D5:1","0001D8A9B7C6D5:2"],PARAMSETS:["MASTER"],FIRMWARE:"1.2.6",VERSION:10,FLAGS:1,RX_MODE:8,INTERFACE:"HmIP-RF"},{ADDRESS:"0001D8A9B7C6D5:0",TYPE:"MAINTENANCE",PARENT:"0001D8A9B7C6D5",PARENT_TYPE:"HmIP-WRC2",PARAMSETS:["MASTER","VALUES"],INDEX:0,DIRECTION:0,FLAGS:3,VERSION:10},{ADDRESS:"0001D8A9B7C6D5:1",TYPE:"KEY_TRANSCEIVER",PARENT:"0001D8A9B7C6D5",PARENT_TYPE:"HmIP-WRC2",PARAMSETS:["MASTER","LINK","VALUES"],INDEX:1,DIRECTION:1,LINK_SOURCE_ROLES:"SWITCH",FLAGS:1,VERSION:10},{ADDRESS:"0001D8A9B7C6D5:2",TYPE:"KEY_TRANSCEIVER",PARENT:"0001D8A9B7C6D5",PARENT_TYPE:"HmIP-WRC2",PARAMSETS:["MASTER","LINK","VALUES"],INDEX:2,DIRECTION:1,LINK_SOURCE_ROLES:"SWITCH",FLAGS:1,VERSION:10},{ADDRESS:"0001D709A1B2C3",TYPE:"HmIP-PSM-2",SUBTYPE:"PSM",PARENT:"",CHILDREN:["0001D709A1B2C3:0","0001D709A1B2C3:3"],PARAMSETS:["MASTER"],FIRMWARE:"1.0.22",VERSION:9,FLAGS:1,RX_MODE:1,INTERFACE:"HmIP-RF"},{ADDRESS:"0001D709A1B2C3:0",TYPE:"MAINTENANCE",PARENT:"0001D709A1B2C3",PARENT_TYPE:"HmIP-PSM-2",PARAMSETS:["MASTER","VALUES"],INDEX:0,DIRECTION:0,FLAGS:3,VERSION:9},{ADDRESS:"0001D709A1B2C3:3",TYPE:"SWITCH_VIRTUAL_RECEIVER",PARENT:"0001D709A1B2C3",PARENT_TYPE:"HmIP-PSM-2",PARAMSETS:["MASTER","LINK","VALUES"],INDEX:3,DIRECTION:2,LINK_TARGET_ROLES:"SWITCH",FLAGS:1,VERSION:9},...["0001D3C9000001","0001D3C9000002","0001D3C9000003"].flatMap(r=>[{ADDRESS:r,TYPE:"HmIP-SWSD",PARENT:"",CHILDREN:[`${r}:0`,`${r}:1`],PARAMSETS:["MASTER"],FIRMWARE:"1.0.12",VERSION:1,FLAGS:1,RX_MODE:12,INTERFACE:"HmIP-RF"},{ADDRESS:`${r}:0`,TYPE:"MAINTENANCE",PARENT:r,PARENT_TYPE:"HmIP-SWSD",PARAMSETS:["MASTER","VALUES"],INDEX:0,DIRECTION:0,FLAGS:3,VERSION:1},{ADDRESS:`${r}:1`,TYPE:"SMOKE_DETECTOR",PARENT:r,PARENT_TYPE:"HmIP-SWSD",PARAMSETS:["MASTER","VALUES"],INDEX:1,DIRECTION:1,FLAGS:1,VERSION:1}])],mm={"BidCos-RF":hm,"HmIP-RF":JD},ps={"BidCoS-RF":"CCU",MEQ0123456:"Licht Küche","MEQ0123456:1":"Licht Küche:1",JEQ0234567:"Taster Flur","JEQ0234567:1":"Taster Flur:1","JEQ0234567:2":"Taster Flur:2",KEQ0345678:"Thermostat Bad","KEQ0345678:4":"Thermostat Bad:4",LEQ0456789:"Fenster Schlafzimmer","LEQ0456789:1":"Fenster Schlafzimmer:1",GEQ0567890:"Dimmer Wohnzimmer","GEQ0567890:1":"Dimmer Wohnzimmer:1","000A1B2C3D4E5F":"Schaltaktor Terrasse","000A1B2C3D4E5F:4":"Schaltaktor Terrasse:4","0011D3C9A1B2C3":"Fenster Arbeitszimmer","3014F711A0001F":"Heizung Arbeitszimmer","0001D8A9B7C6D5":"Wandtaster Diele","0001D709A1B2C3":"Steckdose Wohnzimmer",NEQ1000001:"Rauchmelder Flur","NEQ1000001:1":"Rauchmelder Flur:1",NEQ1000002:"Rauchmelder Küche","NEQ1000002:1":"Rauchmelder Küche:1","*NEQ1000001":"Rauchmelder Gruppe","0001D3C9000001":"Rauchmelder Schlafzimmer","0001D3C9000001:1":"Rauchmelder Schlafzimmer:1","0001D3C9000002":"Rauchmelder Kinderzimmer","0001D3C9000002:1":"Rauchmelder Kinderzimmer:1","0001D3C9000003":"Rauchmelder Keller","0001D3C9000003:1":"Rauchmelder Keller:1"},cl={"BidCos-RF":[{SENDER:"JEQ0234567:1",RECEIVER:"MEQ0123456:1",NAME:"Taster Flur - Licht Küche",DESCRIPTION:"Standardverknüpfung Taster - Schaltaktor",FLAGS:0},{SENDER:"JEQ0234567:2",RECEIVER:"GEQ0567890:1",NAME:"Taster Flur - Dimmer Wohnzimmer",DESCRIPTION:"Dimmer - ein/aus & heller/dunkler",FLAGS:0}],"HmIP-RF":[{SENDER:"0001D8A9B7C6D5:1",RECEIVER:"000A1B2C3D4E5F:4",NAME:"Wandtaster Diele - Schaltaktor Terrasse",DESCRIPTION:"",FLAGS:0}]},Hi=[{interfaceName:"BidCos-RF",address:"LEQ0456789:0",datapoint:"LOWBAT",value:!0,since:Date.parse("2026-09-04T18:22:00Z")},{interfaceName:"BidCos-RF",address:"KEQ0345678:0",datapoint:"STICKY_UNREACH",value:!0,since:Date.parse("2026-09-05T06:14:00Z")}],eI={"BidCos-RF":{MEQ0123456:{"BidCoS-RF":[-52,-56],JEQ0234567:[-70,65536]},JEQ0234567:{"BidCoS-RF":[-60,-36]},KEQ0345678:{"BidCoS-RF":[-88,-91]},LEQ0456789:{"BidCoS-RF":[-112,65536]},GEQ0567890:{"BidCoS-RF":[-47,-45]}},"HmIP-RF":{"000A1B2C3D4E5F":{"3014F711A0000418971558":[-55,-61]},"0001D3C99C1234":{"3014F711A0000418971558":[-73,65536]},"0001D709A1B2C3":{"3014F711A0000418971558":[-64,-66]}}},tI=[{ADDRESS:"3014F711A0000418971558",TYPE:"HMIP_CCU2",DESCRIPTION:"HMIP_CCU2 3014F711A0000418971558",CONNECTED:!0,DEFAULT:!0,DUTY_CYCLE:1,FIRMWARE_VERSION:"4.4.18"}],nI=[{ADDRESS:"BidCoS-RF",TYPE:"CCU2",DESCRIPTION:"CCU2-Coprocessor",CONNECTED:!0,DEFAULT:!0,DUTY_CYCLE:1,FIRMWARE_VERSION:"2.8.6"}],vm=[{name:"BidCos-RF",type:"BidCos-RF",protocol:"xmlrpc",host:"demo.local",port:2001,connected:!0,lastEvent:Date.parse("2026-09-05T09:59:30Z")},{name:"HmIP-RF",type:"HmIP-RF",protocol:"xmlrpc",host:"demo.local",port:2010,connected:!0,lastEvent:Date.parse("2026-09-05T09:59:12Z")},{name:"BidCos-Wired",type:"BidCos-Wired",protocol:"xmlrpc",host:"demo.local",port:2e3,connected:!1,absent:!0,error:"connect ECONNREFUSED demo.local:2000"},{name:"CUxD",type:"CUxD",protocol:"binrpc",host:"demo.local",port:8701,connected:!0,subscribing:!0,lastEvent:Date.parse("2026-09-05T09:59:58Z")},{name:"VirtualDevices",type:"VirtualDevices",protocol:"xmlrpc",host:"demo.local",port:9292,connected:!1,unreachable:!0,error:"VirtualDevices: init timed out after 10000 ms"}],Bu=[{interfaceName:"BidCos-RF",address:"MEQ0123456",count:7,lastAt:Date.parse("2026-09-05T08:12:00Z")},{interfaceName:"BidCos-RF",address:"JEQ0234567",count:2,lastAt:Date.parse("2026-09-05T09:58:00Z"),unreach:!0}],rI=hm.filter(r=>(r.TEAM_CHANNELS??[]).length>0),sI={format:1,revision:7,objects:{"BidCos-RF.MEQ0123456:1":{name:ps["MEQ0123456:1"]??"",enums:["room/eg/kueche","function/licht"],meta:{}},"BidCos-RF.JEQ0234567:1":{name:ps["JEQ0234567:1"]??"",enums:["room/eg/flur"],meta:{}},"BidCos-RF.KEQ0345678:4":{name:ps["KEQ0345678:4"]??"",enums:["room/og/bad","function/heizung"],meta:{}},"BidCos-RF.LEQ0456789:1":{name:ps["LEQ0456789:1"]??"",enums:["room/og/schlafzimmer","function/sicherheit"],meta:{}},"BidCos-RF.GEQ0567890:1":{name:ps["GEQ0567890:1"]??"",enums:["room/eg/wohnzimmer","function/licht"],meta:{}},"HmIP-RF.000A1B2C3D4E5F:4":{name:ps["000A1B2C3D4E5F:4"]??"",enums:["room/aussen","function/licht"],meta:{}}},enums:{room:{name:{de:"Räume",en:"Rooms"},tree:[{id:"eg",name:"Erdgeschoss",children:[{id:"kueche",name:"Küche"},{id:"wohnzimmer",name:"Wohnzimmer"},{id:"flur",name:"Flur"}]},{id:"og",name:"Obergeschoss",children:[{id:"bad",name:"Bad"},{id:"schlafzimmer",name:"Schlafzimmer"}]},{id:"aussen",name:"Außen"}]},function:{name:{de:"Gewerke",en:"Functions"},tree:[{id:"licht",name:"Licht"},{id:"heizung",name:"Heizung"},{id:"sicherheit",name:"Sicherheit"}]},floor:{name:{de:"Etagen",en:"Floors"},tree:[]}}},aI={enabled:!0,reachable:!0,names:Object.keys(ps).length},td={host:"demo.local",interfaces:vm.map(r=>r.name),autoDetect:!0,extraInterfaces:[],tls:!1,rega:!0,callback:{ip:"192.168.1.20",xmlrpcPort:0,binrpcPort:0},language:"de",writePaceMs:250,rpcLogFolder:""},ul={version:"3.0.0-dev.0",connection:td,localAddresses:["192.168.1.20","10.0.0.5"],discovered:[{address:"demo.local",name:"Demo-CCU",serial:"KEQ0000001",firmware:"3.89.8",interfaces:[...fm]}]};function iI(r=td.host){const e=r===td.host;return{host:r,...r===""?{}:{hostAddress:e?"192.168.1.2":"172.16.0.2"},auto:{address:"192.168.1.20",reason:r===""?"first":e?"subnet":"route"},addresses:[{address:"192.168.1.20",inSubnet:e},{address:"10.0.0.5",inSubnet:!1},{address:"127.0.0.1",inSubnet:!1}]}}const Hu=[{timestamp:Date.parse("2026-09-05T09:58:41Z"),interfaceName:"BidCos-RF",method:"event",address:"JEQ0234567:1",datapoint:"PRESS_SHORT",value:!0},{timestamp:Date.parse("2026-09-05T09:58:41Z"),interfaceName:"BidCos-RF",method:"event",address:"MEQ0123456:1",datapoint:"STATE",value:!0},{timestamp:Date.parse("2026-09-05T09:59:12Z"),interfaceName:"HmIP-RF",method:"event",address:"0011D3C9A1B2C3:1",datapoint:"STATE",value:1},{timestamp:Date.parse("2026-09-05T09:59:30Z"),interfaceName:"BidCos-RF",method:"event",address:"KEQ0345678:4",datapoint:"ACTUAL_TEMPERATURE",value:21.5}],oI=[{id:1,timestamp:Date.parse("2026-09-05T09:57:02Z"),interfaceName:"BidCos-RF",method:"putParamset",params:["MEQ0123456:1","MASTER",{LOGGING:1}],ok:!0,result:"",durationMs:184,origin:"ui"},{id:2,timestamp:Date.parse("2026-09-05T09:57:44Z"),interfaceName:"HmIP-RF",method:"putParamset",params:["000A1B2C3D4E5F:4","MASTER",{PROFILE_MODE:3}],ok:!1,error:"Unknown parameter PROFILE_MODE",durationMs:902,origin:"ui"},{id:3,timestamp:Date.parse("2026-09-05T09:58:00Z"),interfaceName:"HmIP-RF",method:"ping",params:["hmm"],ok:!0,result:"",durationMs:8,origin:"background"},{id:4,timestamp:Date.parse("2026-09-05T09:58:30Z"),interfaceName:"BidCos-RF",method:"getVersion",params:[],ok:!0,result:"2.3.4",durationMs:15,origin:"console"}],lI=[{name:"listDevices",help:"Returns the device descriptions of the interface.",params:[]},{name:"getParamset",help:"Reads a paramset of a device or channel.",params:[{name:"address",type:"String"},{name:"paramsetKey",type:"String",values:["MASTER","VALUES"]}]},{name:"setValue",help:"Writes one value of the VALUES paramset.",params:[{name:"address",type:"String"},{name:"valueKey",type:"String"},{name:"value",type:"Any"}]},{name:"rssiInfo",help:"Returns the RSSI matrix.",params:[]},{name:"putParamset",help:"Writes a paramset of a device or channel.",params:[{name:"address",type:"String"},{name:"paramsetKey",type:"String",values:["MASTER","VALUES"]},{name:"set",type:"Struct"}]},{name:"deleteDevice",help:"Removes a device from the interface process.",params:[{name:"address",type:"String"},{name:"flags",type:"Integer"}]},{name:"listBidcosInterfaces",help:"Returns the BidCos interfaces.",params:[]}],Vu=[{interfaceName:"BidCos-RF",method:"event",address:"JEQ0234567:1",datapoint:"PRESS_SHORT",value:!0},{interfaceName:"BidCos-RF",method:"event",address:"MEQ0123456:1",datapoint:"STATE",value:!0},{interfaceName:"BidCos-RF",method:"event",address:"MEQ0123456:1",datapoint:"STATE",value:!1},{interfaceName:"BidCos-RF",method:"event",address:"KEQ0345678:4",datapoint:"ACTUAL_TEMPERATURE",value:21.7},{interfaceName:"HmIP-RF",method:"event",address:"0011D3C9A1B2C3:1",datapoint:"STATE",value:0},{interfaceName:"HmIP-RF",method:"event",address:"3014F711A0001F:1",datapoint:"LEVEL",value:.35},{interfaceName:"BidCos-RF",method:"event",address:"GEQ0567890:1",datapoint:"LEVEL",value:.9}];function si(r){return fm.includes(r)}const fl=Object.fromEntries([["REPEAT_ENABLE",{TYPE:"BOOL",OPERATIONS:3,FLAGS:1,DEFAULT:!0,TAB_ORDER:0}],...Array.from({length:8},(r,e)=>[`GROUP_${String(e+1)}`,{TYPE:"BOOL",OPERATIONS:3,FLAGS:1,DEFAULT:!1,TAB_ORDER:e+1}])]),zu={ROUTER_MODULE_ENABLED:{TYPE:"BOOL",OPERATIONS:3,FLAGS:1,DEFAULT:!1,MIN:!1,MAX:!0},ENABLE_ROUTING:{TYPE:"BOOL",OPERATIONS:3,FLAGS:1,DEFAULT:!0,MIN:!1,MAX:!0}},pm=[{destination:"3014F711A0000418971558",nextHop:"3014F711A0000418971558",distance:1,rssi:-55,ac:!0},{destination:"0011D3C9A1B2C3",nextHop:"0011D3C9A1B2C3",distance:1,rssi:-71},{destination:"0001D8A9B7C6D5",nextHop:"0001D8A9B7C6D5",distance:1,rssi:-78},{destination:"3014F711A0001F",nextHop:"0001D8A9B7C6D5",distance:2}],dI={IP_DESTINATION_ADDRESS:{TYPE:"STRING",OPERATIONS:1,FLAGS:1,DEFAULT:""},NEXT_HOP_ADDRESS:{TYPE:"STRING",OPERATIONS:1,FLAGS:1,DEFAULT:""},DISTANCE:{TYPE:"INTEGER",OPERATIONS:1,FLAGS:1,DEFAULT:0,MIN:0,MAX:255},RSSI:{TYPE:"INTEGER",OPERATIONS:1,FLAGS:1,DEFAULT:0,MIN:-128,MAX:0},IS_NEIGHBOUR:{TYPE:"BOOL",OPERATIONS:1,FLAGS:1,DEFAULT:!1},IS_STATIC_ROUTE:{TYPE:"BOOL",OPERATIONS:1,FLAGS:1,DEFAULT:!1},OM_ACCESS_CONTROLLER:{TYPE:"BOOL",OPERATIONS:1,FLAGS:1,DEFAULT:!1}},cI=Object.fromEntries(pm.flatMap((r,e)=>Object.entries(dI).map(([n,s])=>[`DYNAMIC_ROUTE_${n}_${String(e)}`,s]))),uI=Object.fromEntries(pm.flatMap((r,e)=>[[`DYNAMIC_ROUTE_IP_DESTINATION_ADDRESS_${String(e)}`,r.destination],[`DYNAMIC_ROUTE_NEXT_HOP_ADDRESS_${String(e)}`,r.nextHop],[`DYNAMIC_ROUTE_DISTANCE_${String(e)}`,r.distance],...r.rssi===void 0?[]:[[`DYNAMIC_ROUTE_RSSI_${String(e)}`,r.rssi]],[`DYNAMIC_ROUTE_IS_NEIGHBOUR_${String(e)}`,r.distance===1],[`DYNAMIC_ROUTE_IS_STATIC_ROUTE_${String(e)}`,!1],[`DYNAMIC_ROUTE_OM_ACCESS_CONTROLLER_${String(e)}`,r.ac===!0]])),ju={"SWITCH|MASTER":{LOGGING:{TYPE:"ENUM",OPERATIONS:3,FLAGS:1,VALUE_LIST:["OFF","ON"],DEFAULT:1,TAB_ORDER:1},TRANSMIT_TRY_MAX:{TYPE:"INTEGER",OPERATIONS:3,FLAGS:1,MIN:1,MAX:10,DEFAULT:6,TAB_ORDER:2},ON_TIME:{TYPE:"FLOAT",OPERATIONS:3,FLAGS:1,MIN:0,MAX:8590,UNIT:"s",DEFAULT:0,TAB_ORDER:3,SPECIAL:[{ID:"NOT_USED",VALUE:111600}]},STATUSINFO_MINDELAY:{TYPE:"INTEGER",OPERATIONS:3,FLAGS:1,MIN:0,MAX:15,DEFAULT:2,TAB_ORDER:4}},"SWITCH|VALUES":{STATE:{TYPE:"BOOL",OPERATIONS:7,FLAGS:1,DEFAULT:!1,TAB_ORDER:1},WORKING:{TYPE:"BOOL",OPERATIONS:5,FLAGS:1,DEFAULT:!1,TAB_ORDER:2},INHIBIT:{TYPE:"BOOL",OPERATIONS:7,FLAGS:1,DEFAULT:!1,TAB_ORDER:3}},"DIMMER|MASTER":{LOGGING:{TYPE:"ENUM",OPERATIONS:3,FLAGS:1,VALUE_LIST:["OFF","ON"],DEFAULT:1,TAB_ORDER:1},DIM_STEP:{TYPE:"FLOAT",OPERATIONS:3,FLAGS:1,MIN:0,MAX:1,UNIT:"100%",DEFAULT:.05,TAB_ORDER:2}},"DIMMER|VALUES":{LEVEL:{TYPE:"FLOAT",OPERATIONS:7,FLAGS:1,MIN:0,MAX:1,UNIT:"100%",DEFAULT:0,TAB_ORDER:1},WORKING:{TYPE:"BOOL",OPERATIONS:5,FLAGS:1,DEFAULT:!1,TAB_ORDER:2}},"KEY|MASTER":{LONG_PRESS_TIME:{TYPE:"FLOAT",OPERATIONS:3,FLAGS:1,MIN:.3,MAX:1.8,UNIT:"s",DEFAULT:.4},DBL_PRESS_TIME:{TYPE:"FLOAT",OPERATIONS:3,FLAGS:1,MIN:0,MAX:1.5,UNIT:"s",DEFAULT:0}},"KEY|VALUES":{PRESS_SHORT:{TYPE:"ACTION",OPERATIONS:6,FLAGS:1},PRESS_LONG:{TYPE:"ACTION",OPERATIONS:6,FLAGS:1}},"SWITCH_VIRTUAL_RECEIVER|MASTER":{LOGGING:{TYPE:"ENUM",OPERATIONS:3,FLAGS:1,VALUE_LIST:["OFF","ON"],DEFAULT:1}},"SWITCH_VIRTUAL_RECEIVER|LINK":{SHORT_ON_TIME:{TYPE:"FLOAT",OPERATIONS:3,FLAGS:1,MIN:0,MAX:8590,UNIT:"s",DEFAULT:111600,SPECIAL:[{ID:"NOT_USED",VALUE:111600}]},SHORT_ON_LEVEL:{TYPE:"FLOAT",OPERATIONS:3,FLAGS:1,MIN:0,MAX:1,UNIT:"100%",DEFAULT:1},SHORT_ACTION_TYPE:{TYPE:"ENUM",OPERATIONS:3,FLAGS:1,VALUE_LIST:["INACTIVE","JUMP_TO_TARGET","TOGGLE_TO_COUNTER","TOGGLE_INVERSE_TO_COUNTER"],DEFAULT:1},UI_HINT:{TYPE:"STRING",OPERATIONS:3,FLAGS:2,DEFAULT:""}},"KEY_TRANSCEIVER|LINK":{LONG_PRESS_TIME:{TYPE:"FLOAT",OPERATIONS:3,FLAGS:1,MIN:.3,MAX:1.8,UNIT:"s",DEFAULT:.4}},"MAINTENANCE|VALUES":{UNREACH:{TYPE:"BOOL",OPERATIONS:5,FLAGS:9,DEFAULT:!1},STICKY_UNREACH:{TYPE:"BOOL",OPERATIONS:7,FLAGS:9,DEFAULT:!1},LOWBAT:{TYPE:"BOOL",OPERATIONS:5,FLAGS:9,DEFAULT:!1}},"CLIMATECONTROL_RT_TRANSCEIVER|VALUES":{FAULT_REPORTING:{TYPE:"ENUM",OPERATIONS:5,FLAGS:9,DEFAULT:0,MIN:0,MAX:7,VALUE_LIST:["NO_FAULT","VALVE_TIGHT","ADJUSTING_RANGE_TOO_LARGE","ADJUSTING_RANGE_TOO_SMALL","COMMUNICATION_ERROR","","LOWBAT","VALVE_ERROR_POSITION"]}},"|MASTER":{ARR_TIMEOUT:{TYPE:"INTEGER",OPERATIONS:3,FLAGS:1,MIN:1,MAX:20,DEFAULT:10}},"000A1B2C3D4E5F:0|MASTER":zu,"0001D709A1B2C3:0|MASTER":zu,"000A1B2C3D4E5F:0|ROUTING_TABLE":cI,"0001D3C9000001:1|MASTER":fl,"0001D3C9000002:1|MASTER":fl,"0001D3C9000003:1|MASTER":fl},hl={REPEAT_ENABLE:!0,GROUP_1:!1,GROUP_2:!1,GROUP_3:!1,GROUP_4:!1,GROUP_5:!1,GROUP_6:!1,GROUP_7:!1,GROUP_8:!1},Wu={"SWITCH|MASTER":{LOGGING:1,TRANSMIT_TRY_MAX:6,ON_TIME:111600,STATUSINFO_MINDELAY:2},"SWITCH|VALUES":{STATE:!0,WORKING:!1,INHIBIT:!1},"DIMMER|MASTER":{LOGGING:1,DIM_STEP:.05},"DIMMER|VALUES":{LEVEL:.9,WORKING:!1},"KEY|MASTER":{LONG_PRESS_TIME:.4,DBL_PRESS_TIME:0},"SWITCH_VIRTUAL_RECEIVER|MASTER":{LOGGING:1},"SWITCH_VIRTUAL_RECEIVER|LINK":{SHORT_ON_TIME:111600,SHORT_ON_LEVEL:1,SHORT_ACTION_TYPE:1,UI_HINT:""},"KEY_TRANSCEIVER|LINK":{LONG_PRESS_TIME:.4},"MAINTENANCE|VALUES":{UNREACH:!1,STICKY_UNREACH:!1,LOWBAT:!1},"|MASTER":{ARR_TIMEOUT:10},"000A1B2C3D4E5F:0|MASTER":{ROUTER_MODULE_ENABLED:!0,ENABLE_ROUTING:!0},"0001D709A1B2C3:0|MASTER":{ROUTER_MODULE_ENABLED:!1,ENABLE_ROUTING:!0},"000A1B2C3D4E5F:0|ROUTING_TABLE":uI,"0001D3C9000001:1|MASTER":{...hl,GROUP_1:!0},"0001D3C9000002:1|MASTER":{...hl,GROUP_1:!0},"0001D3C9000003:1|MASTER":hl};function gm(r){for(const e of Object.values(mm)){const n=e.find(s=>s.ADDRESS===r);if(n)return n.PARENT===void 0||n.PARENT===""?"":n.TYPE}return""}function fI(r,e){return ju[`${r}|${e}`]??ju[`${gm(r)}|${e}`]??{}}function hI(r,e){return Wu[`${r}|${e}`]??Wu[`${gm(r)}|${e}`]??{}}const mI={"data/manifest.json":{generatedAt:"2026-09-05T00:00:00.000Z",sources:[{name:"openccu-data",version:"2026.7.2"}],receiverTypes:["SWITCH_VIRTUAL_RECEIVER"],languages:["de","en"]},"data/receiver-type-aliases.json":{},"data/master-metadata.json":{SWITCH:{channelType:"SWITCH",parameterOrder:["TRANSMIT_TRY_MAX","LOGGING","ON_TIME"],conditionalVisibility:[{trigger:"LOGGING",triggerValue:1,show:["STATUSINFO_MINDELAY"]}],optionPresets:{ON_TIME:"duration"}}},"data/option-presets.json":{duration:{id:"duration",allowCustom:!0,presets:[{template:"5s",value:5},{template:"30s",value:30},{template:"${not_used}",value:111600}]}},"data/cross-validations.json":[{id:"onTime",rule:"lte",paramA:"STATUSINFO_MINDELAY",paramB:"TRANSMIT_TRY_MAX",errorKey:"delay_max"}],"data/translations/de.json":{language:"de",channelTypes:{SWITCH:"Schaltaktor"},deviceModels:{},parameters:{LOGGING:"Statusmeldungen","SWITCH|ON_TIME":"Einschaltdauer",NOT_USED:"Nicht benutzt"},parameterValues:{"LOGGING|ON":"an","LOGGING|OFF":"aus","CLIMATECONTROL_RT_TRANSCEIVER|FAULT_REPORTING|COMMUNICATION_ERROR":"Kommunikationsstörung"},parameterHelp:{LOGGING:"<b>Sendet</b> zyklisch den Status."},uiLabels:{not_used:"nicht benutzt",delay_max:"Verzögerung größer als die Sendeversuche"}},"data/translations/en.json":{language:"en",channelTypes:{SWITCH:"Switch actuator"},deviceModels:{},parameters:{LOGGING:"Status messages",NOT_USED:"Unused"},parameterValues:{"CLIMATECONTROL_RT_TRANSCEIVER|FAULT_REPORTING|COMMUNICATION_ERROR":"Communication error"},parameterHelp:{},uiLabels:{not_used:"not used",delay_max:"delay larger than the transmit tries"}},"data/profiles/SWITCH_VIRTUAL_RECEIVER.json":{receiverType:"SWITCH_VIRTUAL_RECEIVER",senders:{KEY_TRANSCEIVER:[{id:1,key:"switch_on",name:{de:"Einschalten",en:"Switch on"},description:{de:"Schaltet ein",en:"Switches on"},params:{SHORT_ACTION_TYPE:{kind:"fixed",value:1},SHORT_ON_LEVEL:{kind:"fixed",value:1},SHORT_ON_TIME:{kind:"fixed",value:111600}}},{id:2,key:"staircase",name:{de:"Treppenhauslicht",en:"Staircase light"},description:{de:"Schaltet für eine Zeit ein",en:"Switches on for a while"},params:{SHORT_ACTION_TYPE:{kind:"fixed",value:1},SHORT_ON_LEVEL:{kind:"fixed",value:1},SHORT_ON_TIME:{kind:"range",min:0,max:8590,default:60},SHORT_OPTICAL_SIGNAL_COLOR:{kind:"fixed",value:1},SHORT_OPTICAL_SIGNAL_BEHAVIOUR:{kind:"fixed",value:1}}}]},senderMetadata:{KEY_TRANSCEIVER:{parameterOrder:["SHORT_ACTION_TYPE","SHORT_ON_LEVEL","SHORT_ON_TIME"],optionPresets:{SHORT_ON_TIME:"duration"}}}},"data/device-icons.json":{}};class bm{calls=[];#e=new Map;#n=new Map;#t=new Set;#s;constructor(e={}){this.#s=e.connected??!0,e.demo===!0&&this.useDemoData()}get connected(){return this.#s}respond(e,n){return this.#e.set(e,n),this}handlerFor(e){const n=this.#e.get(e);if(!n)throw new yr({message:`no mock handler for ${e}`,kind:"internal"});return n}result(e,n){return this.respond(e,(()=>n))}fail(e,n){const s=typeof n=="string"?{message:n,kind:"internal"}:n;return this.respond(e,(()=>{throw new yr(s)}))}emit(e,n){const s=this.#n.get(e);if(s)for(const a of[...s])a(n)}setConnected(e){if(this.#s!==e){this.#s=e;for(const n of[...this.#t])n(e)}}countOf(e){return this.calls.filter(n=>n.method===e).length}lastCall(e){for(let n=this.calls.length-1;n>=0;n-=1){const s=this.calls[n];if(s&&s.method===e)return s.params}}reset(){this.calls.length=0}async request(e,...n){this.calls.push({method:e,params:n});const s=this.#e.get(e);if(!s)throw new yr({message:`no mock handler for ${e}`,kind:"internal"});return await s(...n)}on(e,n){const s=this.#n.get(e)??new Set;return s.add(n),this.#n.set(e,s),()=>{s.delete(n)}}onConnectionChange(e){return this.#t.add(e),()=>{this.#t.delete(e)}}listenerCount(e){return this.#n.get(e)?.size??0}useDemoData(){this.result("config.get",ul),this.respond("config.set",n=>({...ul,connection:n})),this.result("config.discover",ul.discovered),this.result("config.clearCaches",null),this.respond("config.callbackAddresses",n=>iI(n)),this.respond("connection.test",n=>({kind:"ccu",reachable:!0,url:`http://${n.host}`})),this.result("connection.pair",null),this.result("connection.pairCancel",null),this.result("interfaces.list",vm),this.result("interfaces.reconnect",null),this.result("rega.state",aI),this.respond("devices.list",n=>si(n)?mm[n]:[]),this.result("names.get",ps),this.respond("names.set",n=>{const s={...ps};for(const a of n)s[a.address]=a.name;return s}),this.respond("links.list",n=>si(n)?cl[n]:[]),this.respond("rssi.get",n=>si(n)?eI[n]:{}),this.respond("bidcos.interfaces",n=>n==="HmIP-RF"?tI:nI),this.respond("serviceMessages.list",n=>n===void 0?Hi:Hi.filter(s=>s.interfaceName===n)),this.respond("serviceMessages.refresh",n=>n===void 0?Hi:Hi.filter(s=>s.interfaceName===n)),this.result("serviceMessages.ack",null),this.result("rega.confirmInbox",[]),this.respond("teams.list",n=>n==="BidCos-RF"?rI:[]),this.result("teams.set",null),this.respond("unreach.list",n=>n===void 0?Bu:Bu.filter(s=>s.interfaceName===n)),this.result("unreach.reset",null);const e=[];return this.respond("linkTemplates.list",n=>n===void 0?e:e.filter(s=>s.identity===n)),this.respond("linkTemplates.save",n=>{const s=e.findIndex(a=>a.name===n.name);return s===-1?e.push(n):e[s]=n,e}),this.respond("linkTemplates.remove",n=>{const s=e.findIndex(a=>a.name===n);return s!==-1&&e.splice(s,1),e}),this.respond("events.recent",n=>n===void 0?Hu:Hu.filter(s=>s.interfaceName===n)),this.result("events.clear",null),this.result("rpcLog.list",oI),this.result("rpcLog.clear",null),this.result("rpc.methods",lI),this.respond("rpc.call",(n,s,a)=>({method:s,params:a})),this.respond("paramset.description",(n,s,a)=>fI(s,a)),this.respond("paramset.get",(n,s,a)=>hI(s,a)),this.result("paramset.id",""),this.result("paramset.valueStates",{}),this.result("channel.mode",""),this.respond("paramset.put",(n,s,a,i)=>s.map(o=>({interfaceName:n,address:o,paramset:a,sent:i,ok:!0,problems:[],durationMs:42}))),this.respond("paramset.putLink",(n,s,a)=>s.map(i=>({interfaceName:n,address:i.receiver,peer:i.sender,paramset:"LINK",sent:a.receiverToSender??a.senderToReceiver??{},ok:!0,problems:[],durationMs:42}))),this.result("value.set",null),this.result("devices.installMode.set",null),this.result("devices.installMode.get",0),this.result("devices.installMode.keyMismatch",""),this.result("devices.installMode.tempKey",null),this.respond("devices.repairConfig",(n,s,a)=>({interfaceName:n,address:s,configPendingBefore:!0,configPendingAfter:a?.dryRun===!0,channels:[{address:`${s}:1`,unknown:[],corrected:[{parameter:"TRANSMIT_TRY_MAX",stored:62,replacement:10,reason:"above MAX 10"}],write:{interfaceName:n,address:`${s}:1`,paramset:"MASTER",sent:{TRANSMIT_TRY_MAX:10},ok:!0,problems:[]}}],unrepairable:[],...a?.bidcosRecovery===void 0||a.bidcosRecovery==="none"?{}:{bidcosRecovery:a.bidcosRecovery}})),this.result("links.add",null),this.result("links.remove",null),this.result("links.info.set",null),this.result("links.activate",null),this.respond("links.info.get",(n,s,a)=>(si(n)?cl[n]:[]).find(o=>o.SENDER===s&&o.RECEIVER===a)??{SENDER:s,RECEIVER:a}),this.respond("links.peers",(n,s)=>(si(n)?cl[n]:[]).filter(i=>i.SENDER===s||i.RECEIVER===s).map(i=>i.SENDER===s?i.RECEIVER:i.SENDER)),this.respond("data.file",n=>{const s=mI[n];if(s===void 0)throw new yr({message:`no demo data file ${n}`,kind:"config"});return s}),this.useDemoMeta(),this.result("session.info",null),this}useDemoMeta(){const e=new y1({document:Gl(structuredClone(sI))}),n=()=>({provider:"local",reachable:!0,writable:!0,revision:e.revision,objects:e.size}),s=()=>{const o=e.document(),l={};for(const[f,p]of Object.entries(o.objects)){const _=k1(o.enums,p);l[f]={name:_.name,enums:[...p.enums],rooms:[..._.rooms],functions:[..._.functions],..._.orphaned?{orphaned:!0}:{}}}return l},a=()=>structuredClone(e.enums()),i=()=>{this.emit("meta.changed",n()),this.emit("meta.enums.changed",a()),this.emit("meta.objects.changed",s())};return this.respond("meta.state",n),this.respond("meta.get",()=>({state:n(),enums:a(),objects:s()})),this.respond("meta.enums",a),this.respond("meta.objects",s),this.respond("meta.setMembership",o=>{const l={};for(const f of o)l[f.ref]={enums:f.paths};return e.bulk(l),i(),null}),this.respond("meta.assign",(o,l,f)=>{const p={};for(const _ of o){const g=e.find(_),k=g?.enums??[];if(k.includes(l)===f)continue;const b=f?[...k,l]:k.filter(x=>x!==l),w=_.slice(_.indexOf(".")+1);p[_]=g?{enums:b}:{name:ps[w]??w,enums:b}}return e.bulk(p),i(),null}),this.respond("meta.enum.create",(o,l)=>(e.createEnum(o,l),i(),null)),this.respond("meta.enum.update",(o,l)=>(e.updateEnum(o,l),i(),null)),this.respond("meta.enum.delete",(o,l)=>(e.deleteEnum(o,l===!0?"detach":"refuse"),i(),null)),this.respond("meta.node.create",(o,l,f,p)=>{const _=e.getEnum(o).tree,g=l===void 0?void 0:xa(l),k=g===void 0?_:Ks(_,g.ids)?.children??[],E=Ch(f,k.map(b=>b.id));return e.createNode(o,l??null,E,f,p??{}),i(),`${l??o}/${E}`}),this.respond("meta.node.update",(o,l)=>(e.updateNode(o,l),i(),null)),this.respond("meta.node.delete",(o,l)=>(e.deleteNode(o,l===!0?"detach":"refuse"),i(),null)),this.respond("meta.refresh",()=>(i(),n())),this.result("meta.pairing",null),this.respond("meta.export",()=>e.document()),this.respond("meta.import",(o,l)=>(e.import(o,l??"replace"),i(),null)),this}}const vI=1;class pI{url;#e;#n;#t;#s;#a;#r=new Map;#i=new Map;#l=new Set;#o=new Set;#d;#c=!1;#u=!1;#f=1;#h;#m;constructor(e){this.url=e.url,this.#e=e.factory??(n=>new WebSocket(n)),this.#n=e.requestTimeoutMs??3e4,this.#t=e.reconnect??!0,this.#s=e.minBackoffMs??500,this.#a=e.maxBackoffMs??15e3,this.#h=this.#s,(e.autoConnect??!0)&&this.connect()}get connected(){return this.#c}get backoffMs(){return this.#h}connect(){if(this.#u=!1,this.#d)return;const e=this.#e(this.url);this.#d=e,e.onopen=()=>{this.#h=this.#s,this.#g(!0);for(const n of[...this.#o])this.#o.delete(n),n.resolve()},e.onmessage=n=>{this.#_(n.data)},e.onerror=()=>{},e.onclose=()=>{this.#b()}}close(){this.#u=!0,this.#m!==void 0&&(clearTimeout(this.#m),this.#m=void 0);const e=this.#d;this.#d=void 0,e?.close(),this.#E("transport closed"),this.#g(!1)}async request(e,...n){await this.#v(e);const s=this.#d;if(!s||s.readyState!==vI)throw new yr({message:`not connected to ${this.url}`,kind:"connection"});const a=this.#f;this.#f+=1;const i={t:"req",id:a,m:e,p:n};return new Promise((o,l)=>{const f={method:e,resolve:o,reject:l,timer:void 0};f.timer=setTimeout(()=>{this.#r.delete(a),l(new yr({message:`${e} timed out after ${this.#n} ms`,kind:"connection"}))},this.#n),this.#r.set(a,f);try{s.send(JSON.stringify(i))}catch(p){this.#p(a,void 0,{message:p instanceof Error?p.message:String(p),kind:"connection"})}})}on(e,n){const s=this.#i.get(e)??new Set;return s.add(n),this.#i.set(e,s),()=>{s.delete(n)}}onConnectionChange(e){return this.#l.add(e),()=>{this.#l.delete(e)}}#v(e){return this.#c?Promise.resolve():this.#u?Promise.reject(new yr({message:"transport closed",kind:"connection"})):new Promise((n,s)=>{const a={resolve:()=>{clearTimeout(i),n()},reject:o=>{clearTimeout(i),s(o)}},i=setTimeout(()=>{this.#o.delete(a),s(new yr({message:`${e} gave up waiting for ${this.url}`,kind:"connection"}))},this.#n);this.#o.add(a)})}#_(e){if(typeof e!="string")return;let n;try{n=JSON.parse(e)}catch{return}if(typeof n!="object"||n===null)return;const s=n;switch(s.t){case"res":this.#p(s.id,s.r,void 0);break;case"err":this.#p(s.id,void 0,Yf(s.e)?s.e:{message:"malformed error frame",kind:"internal"});break;case"ev":{const a=this.#i.get(s.n);if(a)for(const i of[...a])i(s.d);break}}}#p(e,n,s){const a=this.#r.get(e);a&&(this.#r.delete(e),a.timer!==void 0&&clearTimeout(a.timer),s?a.reject(new yr(s)):a.resolve(n))}#b(){if(this.#d=void 0,this.#g(!1),this.#E(`connection to ${this.url} was lost`),this.#u||!this.#t)return;const e=this.#h;this.#h=Math.min(this.#h*2,this.#a),this.#m=setTimeout(()=>{this.#m=void 0,this.connect()},e)}#E(e){for(const[n,s]of[...this.#r])this.#r.delete(n),s.timer!==void 0&&clearTimeout(s.timer),s.reject(new yr({message:e,kind:"connection"}));for(const n of[...this.#o])this.#o.delete(n),n.reject(new yr({message:e,kind:"connection"}))}#g(e){if(this.#c!==e){this.#c=e;for(const n of[...this.#l])n(e)}}}const gI={},bI="__HMM_TRANSPORT__";function _I(r,e="api"){const n=r.protocol==="https:"?"wss:":"ws:",s=r.pathname.replace(/[^/]*$/,"");return`${n}//${r.host}${s}${e}`}function EI(r){return gI?.VITE_HMM_DEMO==="true"?!0:r?new URLSearchParams(r.search).has("demo"):!1}function yI(r={}){const n=(r.host??globalThis)[bI];if(SI(n))return n;const s=r.location??(typeof window>"u"?void 0:window.location);if(r.demo===!0||EI(s))return new bm({demo:!0});if(!s)throw new Error("createTransport needs a location when there is no window and no injected transport");return new pI({url:_I(s,r.path??"api")})}function SI(r){if(typeof r!="object"||r===null)return!1;const e=r;return typeof e.request=="function"&&typeof e.on=="function"&&typeof e.onConnectionChange=="function"}function wI(r,e={}){const n=e.intervalMs??2500,s=e.now??(()=>Date.now());let a=0;const i=setInterval(()=>{const o=Vu[a%Vu.length];if(a+=1,!o)return;const l={...o,timestamp:s()};r.emit("rpc.event",l)},n);return()=>{clearInterval(i)}}const nd=yI(),_m=ZD(nd);nd instanceof bm&&wI(nd);const Em=document.querySelector("#app");if(!Em)throw new Error("no #app element to mount into");fp(mD,{target:Em,props:{stores:_m}});_m.start();
21
+ //# sourceMappingURL=index-Dz1_561v.js.map