homematic-manager 3.0.0 → 3.0.1

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.
@@ -0,0 +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 Gu=!1;var mi=Array.isArray,Mm=Array.prototype.indexOf,Yi=Array.prototype.includes,lo=Array.from,Uu=Object.defineProperty,pa=Object.getOwnPropertyDescriptor,Bu=Object.getOwnPropertyDescriptors,Vu=Object.prototype,Om=Array.prototype,co=Object.getPrototypeOf,qd=Object.isExtensible;const zn=()=>{};function Lm(r){for(var e=0;e<r.length;e++)r[e]()}function Hu(){var r,e,n=new Promise((s,a)=>{r=s,e=a});return{promise:n,resolve:r,reject:e}}function $d(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 Qn=2,ya=4,uo=8,zu=1<<24,ts=16,qr=32,Ds=64,cl=128,Jl=256,Kr=512,Hn=1024,Gn=2048,ss=4096,pr=8192,Ar=16384,Ca=32768,qi=1<<25,ia=65536,$i=1<<17,Fm=1<<18,Pa=1<<19,Gm=1<<20,vs=1<<25,oa=65536,Xi=1<<21,ga=1<<22,Us=1<<23,Ts=Symbol("$state"),ju=Symbol("component"),Um=Symbol("legacy props"),Bm=Symbol(""),Wu=Symbol("attributes"),ul=Symbol("class"),fl=Symbol("style"),hl=Symbol("text"),Pi=Symbol("form reset"),vi=new class extends Error{name="StaleReactionError";message="The reaction that called `getAbortSignal()` was re-run or destroyed"},Vm=!!globalThis.document?.contentType&&globalThis.document.contentType.includes("xml"),Hm=1,zm=2,Ku=4,jm=8,Wm=16,Km=1,Ym=4,qm=8,$m=16,Yu=1,Xm=2,Vn=Symbol("uninitialized"),Qm="http://www.w3.org/1999/xhtml";function Zm(){console.warn("https://svelte.dev/e/derived_inert")}function Jm(){console.warn("https://svelte.dev/e/select_multiple_invalid_value")}function ev(){console.warn("https://svelte.dev/e/svelte_boundary_reset_noop")}function qu(r){return r===this.v}function $u(r,e){return r!=r?e==e:r!==e||r!==null&&typeof r=="object"||typeof r=="function"}function Xu(r){return!$u(r,this.v)}function ed(r){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function tv(){throw new Error("https://svelte.dev/e/async_derived_orphan")}function nv(r,e,n){throw new Error("https://svelte.dev/e/each_key_duplicate")}function rv(r){throw new Error("https://svelte.dev/e/effect_in_teardown")}function sv(){throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function av(r){throw new Error("https://svelte.dev/e/effect_orphan")}function iv(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}function ov(r){throw new Error("https://svelte.dev/e/props_invalid_value")}function lv(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function dv(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}function cv(){throw new Error("https://svelte.dev/e/state_unsafe_mutation")}function uv(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}let fv=!1;const hv=[];function Mi(r,e=!1,n=!1){return Oi(r,new Map,"",hv,null,n)}function Oi(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(mi(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]=Oi(p,e,n,s,null,i))}return l}if(co(r)===Vu){l={},e.set(r,l),a!==null&&e.set(a,l);for(var g of Object.keys(r))l[g]=Oi(r[g],e,n,s,null,i);return l}if(r instanceof Date)return r.getTime(),structuredClone(r);if(typeof r.toJSON=="function"&&!i)return Oi(r.toJSON(),e,n,s,r)}if(r instanceof EventTarget)return r;try{return structuredClone(r)}catch{return r}}function mv(r){let e=r.p;for(;e!==null&&e.c===null;)e=e.p;return e?.c??null}function td(r,e){return r===null&&ed(),r.c??=new Map(mv(r)||void 0)}let Un=null;function Sa(r){Un=r}function Qu(r){return td(Un).get(r)}function Zu(r,e){return td(Un).set(r,e),e}function Ju(r){return td(Un).has(r)}function ht(r,e=!1,n){Un={p:Un,i:!1,c:null,e:null,s:r,x:null,r:zt,l:null}}function mt(r){var e=Un,n=e.e;if(n!==null){e.e=null;for(var s of n)_f(s)}return e.i=!0,Un=e.p,nd(r)}function nd(r={}){return Uu(r,ju,{value:!0}),r}function ef(){return!0}let ea=[];function tf(){var r=ea;ea=[],Lm(r)}function As(r){if(ea.length===0&&!$a){var e=ea;queueMicrotask(()=>{e===ea&&tf()})}ea.push(r)}function vv(){for(;ea.length>0;)tf()}const pv=-7169;function Dn(r,e){r.f=r.f&pv|e}function rd(r){(r.f&Kr)!==0||r.deps===null?Dn(r,Hn):Dn(r,ss)}function nf(r){if(r!==null)for(const e of r)(e.f&Qn)===0||(e.f&oa)===0||(e.f^=oa,nf(e.deps))}function rf(r,e,n){(r.f&Gn)!==0?e.add(r):(r.f&ss)!==0&&n.add(r),nf(r.deps),Dn(r,Hn)}let Ti=!1;function gv(r){var e=Ti;try{return Ti=!1,[r(),Ti]}finally{Ti=e}}let Xd=!1;function bv(){Xd||(Xd=!0,document.addEventListener("reset",r=>{Promise.resolve().then(()=>{if(!r.defaultPrevented)for(const e of r.target.elements)e[Pi]?.()})},{capture:!0}))}function Ma(r){var e=$t,n=zt;$r(null),_s(null);try{return r()}finally{$r(e),_s(n)}}function sd(r,e,n,s=n){r.addEventListener(e,()=>Ma(n));const a=r[Pi];a?r[Pi]=()=>{a(),s(!0)}:r[Pi]=()=>s(!0),bv()}function _v(r,e,n,s){const a=Ja;var i=r.filter(y=>!y.settled),o=e.map(a);if(n.length===0&&i.length===0){s(o);return}var l=zt,f=Ev(),p=i.length===1?i[0].promise:i.length>1?Promise.all(i.map(y=>y.promise)):null;function g(y){if((l.f&Ar)===0){f();try{s([...o,...y])}catch(S){ms(S,l)}Qi()}}var b=sf();if(n.length===0){p.then(()=>g([])).finally(b);return}function k(){Promise.all(n.map(y=>yv(y))).then(g).catch(y=>ms(y,l)).finally(b)}p?p.then(()=>{f(),k(),Qi()}):k()}function Ev(){var r=zt,e=$t,n=Un,s=Pt;return function(i=!0){_s(r),$r(e),Sa(n),i&&(r.f&Ar)===0&&(s?.activate(),s?.apply())}}function Qi(r=!0){_s(null),$r(null),Sa(null),r&&Pt?.deactivate()}function sf(){var r=zt,e=r.b,n=Pt,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 Ja(r){var e=Qn|Gn;return zt!==null&&(zt.f|=Pa),{ctx:Un,deps:null,effects:null,equals:qu,f:e,fn:r,reactions:null,rv:0,v:Vn,wv:0,parent:zt,ac:null}}const Wa=Symbol("obsolete");function yv(r,e,n){let s=zt;s===null&&tv();var a=void 0,i=Hs(Vn),o=!$t,l=new Set;return Lv(()=>{var f=zt,p=Hu();a=p.promise;try{Promise.resolve(r()).then(p.resolve,y=>{y!==vi&&p.reject(y)}).finally(Qi)}catch(y){p.reject(y),Qi()}var g=Pt;if(o){if((f.f&Ca)!==0)var b=sf();if(s.b?.is_rendered())g.async_deriveds.get(f)?.reject(Wa);else for(const y of l.values())y.reject(Wa);l.add(p),g.async_deriveds.set(f,p)}const k=(y,S=void 0)=>{b?.(),l.delete(p),S!==Wa&&(g.activate(),S?(i.f|=Us,ka(i,S)):((i.f&Us)!==0&&(i.f^=Us),ka(i,y)),g.deactivate())};p.promise.then(k,y=>k(null,y||"unknown"))}),dd(()=>{for(const f of l)f.reject(Wa)}),new Promise(f=>{function p(g){function b(){g===a?f(i):p(a)}g.then(b,b)}p(a)})}function c(r){const e=Ja(r);return wf(e),e}function af(r){const e=Ja(r);return e.equals=Xu,e}function Sv(r){var e=r.effects;if(e!==null){r.effects=null;for(var n=0;n<e.length;n+=1)Tr(e[n])}}function ad(r){var e,n=zt,s=r.parent;if(!Ns&&s!==null&&r.v!==Vn&&(s.f&(Ar|pr))!==0)return Zm(),r.v;_s(s);try{r.f&=~oa,Sv(r),e=xf(r)}finally{_s(n)}return e}function of(r){var e=ad(r);if(!r.equals(e)&&(r.wv=Tf(),(!Pt?.is_fork||r.deps===null)&&(Pt!==null?(Pt.capture(r,e,!0),ml?.capture(r,e,!0)):r.v=e,r.deps===null))){Dn(r,Hn);return}Ns||(ns!==null?(ld()||Pt?.is_fork)&&ns.set(r,e):rd(r))}function kv(r){if(r.effects!==null)for(const e of r.effects)(e.teardown||e.ac)&&(e.teardown?.(),e.ac!==null&&Ma(()=>{e.ac.abort(vi),e.ac=null}),e.fn!==null&&(e.teardown=zn),ei(e,0),cd(e))}function lf(r){if(r.effects!==null)for(const e of r.effects)e.teardown&&e.fn!==null&&wa(e)}let Mo=null,ha=null,Pt=null,ml=null,ns=null,vl=null,$a=!1,Oo=!1,ma=null,Li=null;var Qd=0;let wv=1;class Vs{id=wv++;#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;#g=new Set;is_fork=!1;#h=!1;constructor(){ha===null?Mo=ha=this:(ha.#t=this,this.#n=ha),ha=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.#g.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)Dn(a,Gn),n(a);for(a of s.m)Dn(a,ss),n(a)}this.#g.add(e)}#_(){this.#e=!0,Qd++>1e3&&(this.#E(),Tv());for(const f of this.#c)this.#u.delete(f),Dn(f,Gn),this.schedule(f);for(const f of this.#u)Dn(f,ss),this.schedule(f);const e=this.#o;this.#o=[],this.apply();var n=ma=[],s=[],a=Li=[];for(const f of e)try{this.#m(f,n,s)}catch(p){throw uf(f),this.#v()||this.discard(),p}if(Pt=null,a.length>0){var i=Vs.ensure();for(const f of a)i.schedule(f)}if(ma=null,Li=null,this.#v()){this.#p(s),this.#p(n);for(const[f,p]of this.#f)cf(f,p);a.length>0&&Pt.#_();return}const o=this.#b();if(o){this.#p(s),this.#p(n),o.#y(this);return}this.#c.clear(),this.#u.clear();for(const f of this.#s)f(this);this.#s.clear(),ml=this,Zd(s),Zd(n),ml=null,this.#l?.resolve();var l=Pt;if(this.#r===0&&(this.#o.length===0||l!==null)&&this.#E(),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&&(ps.clear(),l.#_())}#m(e,n,s){e.f^=Hn;for(var a=e.first;a!==null;){var i=a.f,o=(i&(qr|Ds))!==0,l=o&&(i&Hn)!==0,f=l||(i&pr)!==0||this.#f.has(a);if(!f&&a.fn!==null){o?a.f^=Hn:(i&ya)!==0?n.push(a):_i(a)&&((i&ts)!==0&&this.#u.add(a),wa(a));var p=a.first;if(p!==null){a=p;continue}}for(;a!==null;){var g=a.next;if(g!==null){a=g;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}#y(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&Qn)!==0&&(s.f&(Gn|ss))===0))for(const l of a){var i=l.f;if((i&Qn)!==0)n(l);else{var o=l;i&(ga|ts)&&!this.async_deriveds.has(o)&&(this.#u.delete(o),Dn(o,Gn),this.schedule(o))}}};for(const s of this.current.keys())n(s);this.oncommit(()=>e.discard()),e.#E(),Pt=this,this.#_()}#p(e){for(var n=0;n<e.length;n+=1)rf(e[n],this.#c,this.#u)}capture(e,n,s=!1){e.v!==Vn&&!this.previous.has(e)&&this.previous.set(e,e.v),(e.f&Us)===0&&(this.current.set(e,[n,s]),ns?.set(e,n)),this.is_fork||(e.v=n)}activate(){Pt=this}deactivate(){Pt=null,ns=null}flush(){try{Oo=!0,Pt=this,this.#_()}finally{Qd=0,vl=null,ma=null,Li=null,Oo=!1,Pt=null,ns=null,ps.clear()}}discard(){for(const e of this.#a)e(this);this.#a.clear();for(const e of this.async_deriveds.values())e.reject(Wa);this.#E(),this.#l?.resolve()}register_created_effect(e){this.#d.push(e)}#S(){for(let b=Mo;b!==null;b=b.#t){var e=b.id<this.id,n=[];for(const[k,[y,S]]of this.current){if(b.current.has(k)){var s=b.current.get(k)[0];if(e&&y!==s)b.current.set(k,[y,S]);else continue}n.push(k)}if(e)for(const[k,y]of this.async_deriveds){const S=b.async_deriveds.get(k);S&&y.promise.then(S.resolve).catch(S.reject)}var a=[...b.current.keys()].filter(k=>!b.current.get(k)[1]);if(!(!b.#e||a.length===0)){var i=a.filter(k=>!this.current.has(k));if(i.length===0)e&&b.discard();else if(n.length>0){if(e)for(const k of this.#g)b.unskip_effect(k,y=>{(y.f&(ts|ga))!==0?b.schedule(y):b.#p([y])});b.activate();var o=new Set,l=new Map;for(var f of n)df(f,i,o,l);l=new Map;var p=[...b.current].filter(([k,y])=>{const S=this.current.get(k);return S?S[0]!==y[0]||S[1]!==y[1]:!0}).map(([k])=>k);if(p.length>0)for(const k of this.#d)(k.f&(Ar|pr|$i))===0&&id(k,p,l)&&((k.f&(ga|ts))!==0?(Dn(k,Gn),b.schedule(k)):b.#c.add(k));if(b.#o.length>0&&!b.#h){b.apply();for(var g of b.#o)b.#m(g,[],[]);b.#o=[]}b.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.#h||(this.#h=!0,As(()=>{this.#h=!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??=Hu()).promise}static ensure(){if(Pt===null){const e=Pt=new Vs;!Oo&&!$a&&As(()=>{e.#e||e.flush()})}return Pt}apply(){{ns=null;return}}schedule(e){if(vl=e,e.b?.is_pending&&(e.f&(ya|uo|zu))!==0&&(e.f&Ca)===0){e.b.defer_effect(e);return}for(var n=e;n.parent!==null;){n=n.parent;var s=n.f;if(ma!==null&&n===zt&&($t===null||($t.f&Qn)===0))return;if((s&(Ds|qr))!==0){if((s&Hn)===0)return;n.f^=Hn}}this.#o.push(n)}#E(){if(this.linked){var e=this.#n,n=this.#t;e===null?Mo=n:e.#t=n,n===null?ha=e:n.#n=e,this.linked=!1}}}function Av(r){var e=$a;$a=!0;try{for(var n;;){if(vv(),Pt===null)return n;Pt.flush()}}finally{$a=e}}function Tv(){try{iv()}catch(r){ms(r,vl)}}let ws=null;function Zd(r){var e=r.length;if(e!==0){for(var n=0;n<e;){var s=r[n++];if((s.f&(Ar|pr))===0&&_i(s)&&(ws=new Set,wa(s),s.deps===null&&s.first===null&&s.nodes===null&&s.teardown===null&&s.ac===null&&yf(s),ws?.size>0)){ps.clear();for(const a of ws){if((a.f&(Ar|pr))!==0)continue;const i=[a];let o=a.parent;for(;o!==null;)ws.has(o)&&(ws.delete(o),i.push(o)),o=o.parent;for(let l=i.length-1;l>=0;l--){const f=i[l];(f.f&(Ar|pr))===0&&wa(f)}}ws.clear()}}ws=null}}function df(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&Qn)!==0?df(a,e,n,s):(i&(ga|ts))!==0&&(i&Gn)===0&&id(a,e,s)&&(Dn(a,Gn),od(a))}}function id(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(Yi.call(e,a))return!0;if((a.f&Qn)!==0&&id(a,e,n))return n.set(a,!0),!0}return n.set(r,!1),!1}function od(r){Pt.schedule(r)}function cf(r,e){if(!((r.f&qr)!==0&&(r.f&Hn)!==0)){(r.f&Gn)!==0?e.d.push(r):(r.f&ss)!==0&&e.m.push(r),Dn(r,Hn);for(var n=r.first;n!==null;)cf(n,e),n=n.next}}function uf(r){Dn(r,Hn);for(var e=r.first;e!==null;)uf(e),e=e.next}let Zi=new Set;const ps=new Map;let ff=!1;function Hs(r,e){var n={f:0,v:r,reactions:null,equals:qu,rv:0,wv:0};return n}function N(r,e){const n=Hs(r);return wf(n),n}function Rv(r,e=!1,n=!0){const s=Hs(r);return e||(s.equals=Xu),s}function u(r,e,n=!1){$t!==null&&(!rs||($t.f&$i)!==0)&&ef()&&($t.f&(Qn|ts|ga|$i))!==0&&(gs===null||!gs.has(r))&&cv();let s=n?Be(e):e;return ka(r,s,Li)}function ka(r,e,n=null){if(!r.equals(e)){Ns?ps.set(r,e):ps.has(r)||ps.set(r,r.v);var s=Vs.ensure();if(s.capture(r,e),(r.f&Qn)!==0){const a=r;(r.f&Gn)!==0&&ad(a),ns===null&&rd(a)}r.wv=Tf(),hf(r,Gn,n),zt!==null&&(zt.f&Hn)!==0&&(zt.f&(qr|Ds))===0&&(zr===null?Uv([r]):zr.push(r)),!s.is_fork&&Zi.size>0&&!ff&&xv()}return e}function xv(){ff=!1;for(const r of Zi){(r.f&Hn)!==0&&Dn(r,ss);let e;try{e=_i(r)}catch{e=!0}e&&wa(r)}Zi.clear()}function fs(r){u(r,r.v+1)}function hf(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&Gn)===0;if(f&&Dn(o,e),(l&$i)!==0)Zi.add(o);else if((l&Qn)!==0){var p=o;ns?.delete(p),(l&oa)===0&&(l&Kr&&(zt===null||(zt.f&Xi)===0)&&(o.f|=oa),hf(p,ss,n))}else if(f){var g=o;(l&ts)!==0&&ws!==null&&ws.add(g),n!==null?n.push(g):od(g)}}}function Be(r){if(typeof r!="object"||r===null||Ts in r||ju in r)return r;const e=co(r);if(e!==Vu&&e!==Om)return r;var n=new Map,s=mi(r),a=N(0),i=xs,o=l=>{if(xs===i)return l();var f=$t,p=xs;$r(null),tc(i);var g=l();return $r(f),tc(p),g};return s&&n.set("length",N(r.length)),new Proxy(r,{defineProperty(l,f,p){(!("value"in p)||p.configurable===!1||p.enumerable===!1||p.writable===!1)&&lv();var g=n.get(f);return g===void 0?o(()=>{var b=N(p.value);return n.set(f,b),b}):u(g,p.value,!0),!0},deleteProperty(l,f){var p=n.get(f);if(p===void 0){if(f in l){const g=o(()=>N(Vn));n.set(f,g),fs(a)}}else u(p,Vn),fs(a);return!0},get(l,f,p){if(f===Ts)return r;var g=n.get(f),b=f in l;if(g===void 0&&(!b||pa(l,f)?.writable)&&(g=o(()=>{var y=Be(b?l[f]:Vn),S=N(y);return S}),n.set(f,g)),g!==void 0){var k=t(g);return k===Vn?void 0:k}return Reflect.get(l,f,p)},getOwnPropertyDescriptor(l,f){var p=Reflect.getOwnPropertyDescriptor(l,f);if(p&&"value"in p){var g=n.get(f);g&&(p.value=t(g))}else if(p===void 0){var b=n.get(f),k=b?.v;if(b!==void 0&&k!==Vn)return{enumerable:!0,configurable:!0,value:k,writable:!0}}return p},has(l,f){if(f===Ts)return!0;var p=n.get(f),g=p!==void 0&&p.v!==Vn||Reflect.has(l,f);if(p!==void 0||zt!==null&&(!g||pa(l,f)?.writable)){p===void 0&&(p=o(()=>{var k=g?Be(l[f]):Vn,y=N(k);return y}),n.set(f,p));var b=t(p);if(b===Vn)return!1}return g},set(l,f,p,g){var b=n.get(f),k=f in l;if(s&&f==="length")for(var y=p;y<b.v;y+=1){var S=n.get(y+"");S!==void 0?u(S,Vn):y in l&&(S=o(()=>N(Vn)),n.set(y+"",S))}if(b===void 0)(!k||pa(l,f)?.writable)&&(b=o(()=>N(void 0)),u(b,Be(p)),n.set(f,b));else{k=b.v!==Vn;var A=o(()=>Be(p));u(b,A)}var x=Reflect.getOwnPropertyDescriptor(l,f);if(x?.set&&x.set.call(g,p),!k){if(s&&typeof f=="string"){var D=n.get("length"),C=Number(f);Number.isInteger(C)&&C>=D.v&&u(D,C+1)}fs(a)}return!0},ownKeys(l){t(a);var f=Reflect.ownKeys(l).filter(b=>{var k=n.get(b);return k===void 0||k.v!==Vn});for(var[p,g]of n)g.v!==Vn&&!(p in l)&&f.push(p);return f},setPrototypeOf(){dv()}})}function Jd(r){try{if(r!==null&&typeof r=="object"&&Ts in r)return r[Ts]}catch{}return r}function mf(r,e){return Object.is(Jd(r),Jd(e))}var la,vf,pf,gf;function Iv(){if(la===void 0){la=window,vf=/Firefox/.test(navigator.userAgent);var r=Element.prototype,e=Node.prototype,n=Text.prototype;pf=pa(e,"firstChild").get,gf=pa(e,"nextSibling").get,qd(r)&&(r[ul]=void 0,r[Wu]=null,r[fl]=void 0,r.__e=void 0),qd(n)&&(n[hl]=void 0)}}function Rs(r=""){return document.createTextNode(r)}function hs(r){return pf.call(r)}function pi(r){return gf.call(r)}function w(r,e){return hs(r)}function Ie(r,e=!1){{var n=hs(r);return n instanceof Comment&&n.data===""?pi(n):n}}function m(r,e=!1){return hs(r)}function d(r,e=1,n=!1){let s=r;for(;e--;)s=pi(s);return s}function Dv(r){r.textContent=""}function bf(){return!1}function Nv(r,e,n){return n?document.createElement(r,{is:n}):document.createElement(r)}function Cv(r){var e=zt;if(e===null)return $t.f|=Us,r;if((e.f&Ca)===0&&(e.f&ya)===0)throw r;ms(r,e)}function ms(r,e){if(!(e!==null&&(e.f&Ar)!==0)){for(;e!==null;){if((e.f&cl)!==0&&(e.f&(Ar|qi))===0){if((e.f&Ca)===0)throw r;try{e.b.error(r);return}catch(n){r=n}}e=e.parent}throw r}}function Pv(r){zt===null&&($t===null&&av(),sv()),Ns&&rv()}function Mv(r,e){var n=e.last;n===null?e.last=e.first=r:(n.next=r,r.prev=n,e.last=r)}function Cs(r,e){var n=zt;n!==null&&(n.f&pr)!==0&&(r|=pr);var s={ctx:Un,deps:null,nodes:null,f:r|Gn|Kr,first:null,fn:e,last:null,next:null,parent:n,b:n&&n.b,prev:null,teardown:null,wv:0,ac:null};Pt?.register_created_effect(s);var a=s;if((r&ya)!==0)ma!==null?ma.push(s):Vs.ensure().schedule(s);else if(e!==null){try{wa(s)}catch(o){throw Tr(s),o}a.deps===null&&a.teardown===null&&a.nodes===null&&a.first===a.last&&(a.f&Pa)===0&&(a=a.first,(r&ts)!==0&&(r&ia)!==0&&a!==null&&(a.f|=ia))}if(a!==null&&(a.parent=n,n!==null&&Mv(a,n),$t!==null&&($t.f&Qn)!==0&&(r&Ds)===0)){var i=$t;(i.effects??=[]).push(a)}return s}function ld(){return $t!==null&&!rs}function dd(r){const e=Cs(uo,null);return Dn(e,Hn),e.teardown=r,e}function lt(r){Pv();var e=zt.f,n=!$t&&(e&qr)!==0&&Un!==null&&!Un.i;if(n){var s=Un;(s.e??=[]).push(r)}else return _f(r)}function _f(r){return Cs(ya|Gm,r)}function Ov(r){Vs.ensure();const e=Cs(Ds|Pa,r);return(n={})=>new Promise(s=>{n.outro?ra(e,()=>{Tr(e),s(void 0)}):(Tr(e),s(void 0))})}function fo(r){return Cs(ya,r)}function Lv(r){return Cs(ga|Pa,r)}function gi(r,e=0){return Cs(uo|e,r)}function E(r,e=[],n=[],s=[]){_v(s,e,n,a=>{Cs(uo,()=>{r(...a.map(t))})})}function bi(r,e=0){var n=Cs(ts|e,r);return n}function jr(r){return Cs(qr|Pa,r)}function Ef(r){var e=r.teardown;if(e!==null){const n=Ns,s=$t;ec(!0),$r(null);try{e.call(null)}catch(a){ms(a,r.parent)}finally{ec(n),$r(s)}}}function cd(r,e=!1){var n=r.first;for(r.first=r.last=null;n!==null;){const a=n.ac;a!==null&&Ma(()=>{a.abort(vi)});var s=n.next;(n.f&Ds)!==0?n.parent=null:Tr(n,e),n=s}}function Fv(r){for(var e=r.first;e!==null;){var n=e.next;(e.f&qr)===0&&Tr(e),e=n}}function Tr(r,e=!0){var n=!1;(e||(r.f&Fm)!==0)&&r.nodes!==null&&r.nodes.end!==null&&(Gv(r.nodes.start,r.nodes.end),n=!0),r.f|=qi,cd(r,e&&!n),ei(r,0);var s=r.nodes&&r.nodes.t;if(s!==null)for(const i of s)i.stop();Ef(r),r.f^=qi,r.f|=Ar;var a=r.parent;a!==null&&a.first!==null&&yf(r),r.next=r.prev=r.teardown=r.ctx=r.deps=r.fn=r.nodes=r.ac=r.b=null}function Gv(r,e){for(;r!==null;){var n=r===e?null:pi(r);r.remove(),r=n}}function yf(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 ra(r,e,n=!0){var s=[];r.f|=Jl,Sf(r,s,!0);var a=()=>{n&&Tr(r),e&&e()},i=s.length;if(i>0){var o=()=>--i||a();for(var l of s)l.out(o)}else a()}function Sf(r,e,n){if((r.f&pr)===0){r.f^=pr;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&Ds)===0){var o=(a.f&ia)!==0||(a.f&qr)!==0&&(r.f&ts)!==0;Sf(a,e,o?n:!1)}a=i}}}function Ji(r){r.f&=~Jl,kf(r,!0)}function kf(r,e){if((r.f&Jl)===0&&(r.f&pr)!==0){r.f^=pr,(r.f&Hn)===0&&(Dn(r,Gn),Vs.ensure().schedule(r));for(var n=r.first;n!==null;){var s=n.next,a=(n.f&ia)!==0||(n.f&qr)!==0;kf(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 ud(r,e){if(r.nodes)for(var n=r.nodes.start,s=r.nodes.end;n!==null;){var a=n===s?null:pi(n);e.append(n),n=a}}let Fi=!1,Ns=!1;function ec(r){Ns=r}let $t=null,rs=!1;function $r(r){$t=r}let zt=null;function _s(r){zt=r}let gs=null;function wf(r){$t!==null&&(gs??=new Set).add(r)}let kr=null,Pr=0,zr=null;function Uv(r){zr=r}let Af=1,ta=0,xs=ta;function tc(r){xs=r}function Tf(){return++Af}function _i(r){var e=r.f;if((e&Gn)!==0)return!0;if(e&Qn&&(r.f&=~oa),(e&ss)!==0){for(var n=r.deps,s=n.length,a=0;a<s;a++){var i=n[a];if(_i(i)&&of(i),i.wv>r.wv)return!0}(e&Kr)!==0&&ns===null&&Dn(r,Hn)}return!1}function Rf(r,e,n=!0){var s=r.reactions;if(s!==null&&!(gs!==null&&gs.has(r)))for(var a=0;a<s.length;a++){var i=s[a];(i.f&Qn)!==0?Rf(i,e,!1):e===i&&(n?Dn(i,Gn):(i.f&Hn)!==0&&Dn(i,ss),od(i))}}function xf(r){var e=kr,n=Pr,s=zr,a=$t,i=gs,o=Un,l=rs,f=xs,p=r.f;kr=null,Pr=0,zr=null,$t=(p&(qr|Ds))===0?r:null,gs=null,Sa(r.ctx),rs=!1,xs=++ta,r.ac!==null&&(Ma(()=>{r.ac.abort(vi)}),r.ac=null);try{r.f|=Xi;var g=r.fn,b=g();r.f|=Ca;var k=nc(r);if(ef()&&zr!==null&&!rs&&k!==null&&(r.f&(Qn|ss|Gn))===0)for(var y=0;y<zr.length;y++)Rf(zr[y],r);if(a!==null&&a!==r){if(ta++,a.deps!==null)for(let S=0;S<n;S+=1)a.deps[S].rv=ta;if(e!==null)for(const S of e)S.rv=ta;zr!==null&&(s===null?s=zr:s.push(...zr))}return(r.f&Us)!==0&&(r.f^=Us),b}catch(S){return nc(r),Cv(S)}finally{r.f^=Xi,kr=e,Pr=n,zr=s,$t=a,gs=i,Sa(o),rs=l,xs=f}}function nc(r){var e=r.deps,n=Pt?.is_fork;if(kr!==null){var s;if(n||ei(r,Pr),e!==null&&Pr>0)for(e.length=Pr+kr.length,s=0;s<kr.length;s++)e[Pr+s]=kr[s];else r.deps=e=kr;if(ld()&&(r.f&Kr)!==0)for(s=Pr;s<e.length;s++)(e[s].reactions??=[]).push(r)}else!n&&e!==null&&Pr<e.length&&(ei(r,Pr),e.length=Pr);return e}function Bv(r,e){let n=e.reactions;if(n!==null){var s=Mm.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&Qn)!==0&&(kr===null||!Yi.call(kr,e))){var i=e;(i.f&Kr)!==0&&(i.f^=Kr,i.f&=~oa),i.v!==Vn&&rd(i),i.ac!==null&&Ma(()=>{i.ac.abort(vi),i.ac=null,Dn(i,Gn)}),kv(i),ei(i,0)}}function ei(r,e){var n=r.deps;if(n!==null)for(var s=e;s<n.length;s++)Bv(r,n[s])}function wa(r){var e=r.f;if((e&Ar)===0){Dn(r,Hn);var n=zt,s=Fi;zt=r,Fi=(e&(qr|Ds))===0;try{(e&(ts|zu))!==0?Fv(r):cd(r),Ef(r);var a=xf(r);r.teardown=typeof a=="function"?a:null,r.wv=Af;var i;Gu&&fv&&(r.f&Gn)!==0&&r.deps}finally{Fi=s,zt=n}}}async function ti(){await Promise.resolve(),Av()}function t(r){var e=r.f,n=(e&Qn)!==0;if($t!==null&&!rs){var s=zt!==null&&(zt.f&Ar)!==0;if(!s&&(gs===null||!gs.has(r))){var a=$t.deps;if(($t.f&Xi)!==0)r.rv<ta&&(r.rv=ta,kr===null&&a!==null&&a[Pr]===r?Pr++:kr===null?kr=[r]:kr.push(r));else{$t.deps??=[],Yi.call($t.deps,r)||$t.deps.push(r);var i=r.reactions;i===null?r.reactions=[$t]:Yi.call(i,$t)||i.push($t)}}}if(Ns&&ps.has(r))return ps.get(r);if(n){var o=r;if(Ns){var l=o.v;return((o.f&Hn)===0&&o.reactions!==null||Df(o))&&(l=ad(o)),ps.set(o,l),l}var f=(o.f&Kr)===0&&!rs&&$t!==null&&(Fi||($t.f&Kr)!==0),p=(o.f&Ca)===0;_i(o)&&(f&&(o.f|=Kr),of(o)),f&&!p&&(lf(o),If(o))}if(ns?.has(r))return ns.get(r);if((r.f&Us)!==0)throw r.v;return r.v}function If(r){if(r.f|=Kr,r.deps!==null)for(const e of r.deps)(e.reactions??=[]).push(r),(e.f&Qn)!==0&&(e.f&Kr)===0&&(lf(e),If(e))}function Df(r){if(r.v===Vn)return!0;if(r.deps===null)return!1;for(const e of r.deps)if(ps.has(e)||(e.f&Qn)!==0&&Df(e))return!0;return!1}function gr(r){var e=rs;try{return rs=!0,r()}finally{rs=e}}function Vv(r){if(!(typeof r!="object"||!r||r instanceof EventTarget)){if(Ts in r)pl(r);else if(!Array.isArray(r))for(let e in r){const n=r[e];typeof n=="object"&&n&&Ts in n&&pl(n)}}}function pl(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{pl(r[s],e)}catch{}const n=co(r);if(n!==Object.prototype&&n!==Array.prototype&&n!==Map.prototype&&n!==Set.prototype&&n!==Date.prototype){const s=Bu(n);for(let a in s){const i=s[a].get;if(i)try{i.call(r)}catch{}}}}}const Hv=["touchstart","touchmove"];function zv(r){return Hv.includes(r)}const Ka=Symbol("events"),Nf=new Set,gl=new Set;function jv(r,e,n,s={}){function a(i){if(s.capture||bl.call(e,i),!i.cancelBubble)return Ma(()=>n?.call(this,i))}return r.startsWith("pointer")||r.startsWith("touch")||r==="wheel"?As(()=>{e.addEventListener(r,a,s)}):e.addEventListener(r,a,s),a}function wr(r,e,n,s,a){var i={capture:s,passive:a},o=jv(r,e,n,i);(e===document.body||e===window||e===document||e instanceof HTMLMediaElement)&&dd(()=>{e.removeEventListener(r,o,i)})}function ee(r,e,n){(e[Ka]??={})[r]=n}function kt(r){for(var e=0;e<r.length;e++)Nf.add(r[e]);for(var n of gl)n(r)}let Lo=null,Fo=!1;function bl(r){var e=this,n=e.ownerDocument,s=r.type,a=r.composedPath?.()||[],i=a[0]||r.target;Lo=r,Fo||(Fo=!0,setTimeout(()=>{Fo=!1,Lo=null}));var o=0,l=Lo===r&&r[Ka];if(l){var f=a.indexOf(l);if(f!==-1&&(e===document||e===window)){r[Ka]=e;return}var p=a.indexOf(e);if(p===-1)return;f<=p&&(o=f)}if(i=a[o]||r.target,i!==e){Uu(r,"currentTarget",{configurable:!0,get(){return i||n}});var g=$t,b=zt;$r(null),_s(null);try{for(var k,y=[];i!==null&&i!==e;){try{var S=i[Ka]?.[s];S!=null&&(!i.disabled||r.target===i)&&S.call(i,r)}catch(A){k?y.push(A):k=A}if(r.cancelBubble)break;o++,i=o<a.length?a[o]:null}if(k){for(let A of y)queueMicrotask(()=>{throw A});throw k}}finally{r[Ka]=e,delete r.currentTarget,$r(g),_s(b)}}}const Wv=globalThis?.window?.trustedTypes&&globalThis.window.trustedTypes.createPolicy("svelte-trusted-html",{createHTML:r=>r});function Kv(r){return Wv?.createHTML(r)??r}function Cf(r){var e=Nv("template");return e.innerHTML=Kv(r.replaceAll("<!>","<!---->")),e.content}function Aa(r,e){var n=zt;n.nodes===null&&(n.nodes={start:r,end:e,a:null,t:null})}function _(r,e){var n=(e&Yu)!==0,s=(e&Xm)!==0,a,i=!r.startsWith("<!>");return()=>{a===void 0&&(a=Cf(i?r:"<!>"+r),n||(a=hs(a)));var o=s||vf?document.importNode(a,!0):a.cloneNode(!0);if(n){var l=hs(o),f=o.lastChild;Aa(l,f)}else Aa(o,o);return o}}function Yv(r,e,n="svg"){var s=!r.startsWith("<!>"),a=(e&Yu)!==0,i=`<${n}>${s?r:"<!>"+r}</${n}>`,o;return()=>{if(!o){var l=Cf(i),f=hs(l);if(a)for(o=document.createDocumentFragment();hs(f);)o.appendChild(hs(f));else o=hs(f)}var p=o.cloneNode(!0);if(a){var g=hs(p),b=p.lastChild;Aa(g,b)}else Aa(p,p);return p}}function js(r,e){return Yv(r,e,"svg")}function Zn(r=""){{var e=Rs(r+"");return Aa(e,e),e}}function wt(){var r=document.createDocumentFragment(),e=document.createComment(""),n=Rs();return r.append(e,n),Aa(e,n),r}function v(r,e){r!==null&&r.before(e)}function qv(r){let e=0,n=Hs(0),s;return()=>{ld()&&(t(n),gi(()=>(e===0&&(s=gr(()=>r(()=>fs(n)))),e+=1,()=>{As(()=>{e-=1,e===0&&(s?.(),s=void 0,fs(n))})})))}}var $v=ia|Pa;function Pf(r,e,n,s){new Xv(r,e,n,s)}class Xv{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;#g=new Set;#h=null;#v=qv(()=>(this.#h=Hs(this.#d),()=>{this.#h=null}));constructor(e,n,s,a){this.#e=e,this.#t=n,this.#s=i=>{var o=zt;o.b=this,o.f|=cl,s(i)},this.parent=zt.b,this.transform_error=a??this.parent?.transform_error??(i=>i),this.#a=bi(()=>{this.#p()},$v)}#_(){try{this.#r=jr(()=>this.#s(this.#e))}catch(e){this.error(e)}}#m(e){const n=this.#t.failed,{reset:s,invoke_onerror:a}=this.#b(e);As(a),n&&(this.#l=jr(()=>{n(this.#e,()=>e,()=>s)}))}#b(e){var n=!1,s=!1;const a=()=>{if(n){ev();return}n=!0,s&&uv(),this.#l!==null&&ra(this.#l,()=>{this.#l=null}),this.#E(()=>{this.#p()})};return{reset:a,invoke_onerror:()=>{try{s=!0,this.#t.onerror?.(e,a),s=!1}catch(o){ms(o,this.#a&&this.#a.parent)}}}}#y(){const e=this.#t.pending;e&&(this.is_pending=!0,this.#i=jr(()=>e(this.#e)),As(()=>{var n=this.#o=document.createDocumentFragment(),s=Rs(),a=!1;if(n.append(s),this.#r=this.#E(()=>{try{return jr(()=>this.#s(s))}catch(i){try{this.error(i),a=!0}catch(o){ms(o,this.#a.parent)}return null}}),this.#r===null){this.#o=null,a&&this.#S(Pt);return}this.#c===0&&(this.#e.before(n),this.#o=null,ra(this.#i,()=>{this.#i=null}),this.#S(Pt))}))}#p(){try{if(this.is_pending=this.has_pending_snippet(),this.#c=0,this.#d=0,this.#r=jr(()=>{this.#s(this.#e)}),this.#c>0){var e=this.#o=document.createDocumentFragment();ud(this.#r,e);const n=this.#t.pending;this.#i=jr(()=>n(this.#e))}else this.#S(Pt)}catch(n){this.error(n)}}#S(e){this.is_pending=!1,e.transfer_effects(this.#f,this.#g)}defer_effect(e){rf(e,this.#f,this.#g)}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!this.#t.pending}#E(e){var n=zt,s=$t,a=Un;_s(this.#a),$r(this.#a),Sa(this.#a.ctx);try{return Vs.ensure(),e()}finally{_s(n),$r(s),Sa(a)}}#k(e,n){if(!this.has_pending_snippet()){this.parent&&this.parent.#k(e,n);return}this.#c+=e,this.#c===0&&(this.#S(n),this.#i&&ra(this.#i,()=>{this.#i=null}),this.#o&&(this.#e.before(this.#o),this.#o=null))}update_pending_count(e,n){this.#k(e,n),this.#d+=e,!(!this.#h||this.#u)&&(this.#u=!0,As(()=>{this.#u=!1,this.#h&&ka(this.#h,this.#d)}))}get_effect_pending(){return this.#v(),t(this.#h)}error(e){if(!this.#t.onerror&&!this.#t.failed)throw e;Pt?.is_fork?(this.#r&&Pt.skip_effect(this.#r),this.#i&&Pt.skip_effect(this.#i),this.#l&&Pt.skip_effect(this.#l),Pt.oncommit(()=>{this.#w(e)})):this.#w(e)}#w(e){this.#r&&(Tr(this.#r),this.#r=null),this.#i&&(Tr(this.#i),this.#i=null),this.#l&&(Tr(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.#E(()=>{try{return jr(()=>{var l=zt;l.b=this,l.f|=cl,n(this.#e,()=>a,()=>i)})}catch(l){return ms(l,this.#a.parent),null}}))};As(()=>{var a;try{a=this.transform_error(e)}catch(i){ms(i,this.#a&&this.#a.parent);return}a!==null&&typeof a=="object"&&typeof a.then=="function"?a.then(s,i=>ms(i,this.#a&&this.#a.parent)):s(a)})}}function h(r,e){var n=e==null?"":typeof e=="object"?`${e}`:e;n!==(r[hl]??=r.nodeValue)&&(r[hl]=n,r.nodeValue=`${n}`)}function Qv(r,e){return Zv(r,e)}const Ri=new Map;function Zv(r,{target:e,anchor:n,props:s={},events:a,context:i,intro:o=!0,transformError:l}){Iv();var f=void 0,p=Ov(()=>{var g=n??e.appendChild(Rs());Pf(g,{pending:()=>{}},y=>{ht({});var S=Un;i&&(S.c=i),a&&(s.$$events=a),f=r(y,s)||nd(),mt()},l);var b=new Set,k=y=>{for(var S=0;S<y.length;S++){var A=y[S];if(!b.has(A)){b.add(A);var x=zv(A);for(const R of[e,document]){var D=Ri.get(R);D===void 0&&(D=new Map,Ri.set(R,D));var C=D.get(A);C===void 0?(R.addEventListener(A,bl,{passive:x}),D.set(A,1)):D.set(A,C+1)}}}};return k(lo(Nf)),gl.add(k),()=>{for(var y of b)for(const x of[e,document]){var S=Ri.get(x),A=S.get(y);--A==0?(x.removeEventListener(y,bl),S.delete(y),S.size===0&&Ri.delete(x)):S.set(y,A)}gl.delete(k),g!==n&&g.parentNode?.removeChild(g)}});return Jv.set(f,p),f}let Jv=new WeakMap;class fd{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)Ji(s),this.#s.delete(n);else{var a=this.#t.get(n);a&&(Ji(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&&(Tr(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();ud(o,p),p.append(Rs()),this.#t.set(i,{effect:o,fragment:p})}else Tr(o);this.#s.delete(i),this.#n.delete(i)};this.#a||!s?(this.#s.add(i),ra(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)||(Tr(a.effect),this.#t.delete(s))};ensure(e,n){var s=Pt,a=bf();if(n&&!this.#n.has(e)&&!this.#t.has(e))if(a){var i=document.createDocumentFragment(),o=Rs();i.append(o),this.#t.set(e,{effect:jr(()=>n(o)),fragment:i})}else this.#n.set(e,jr(()=>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 $(r,e,n=!1){var s=new fd(r),a=n?ia:0;function i(o,l){s.ensure(o,l)}bi(()=>{var o=!1;e((l,f=0)=>{o=!0,i(f,l)}),o||i(-1,null)},a)}const ep=Symbol("NaN");function tp(r,e,n){var s=new fd(r);bi(()=>{var a=e();a!==a&&(a=ep),s.ensure(a,n)})}function eo(r,e){return e}function np(r,e,n){for(var s=[],a=e.length,i,o=e.length,l=0;l<a;l++){let b=e[l];ra(b,()=>{if(i){if(i.pending.delete(b),i.done.add(b),i.pending.size===0){var k=r.outrogroups;_l(r,lo(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,g=p.parentNode;Dv(g),g.append(p),r.items.clear()}_l(r,e,!f)}else i={pending:new Set(e),done:new Set},(r.outrogroups??=new Set).add(i)}function _l(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|=vs;const o=document.createDocumentFragment();ud(i,o)}else Tr(e[a],n)}}var rc;function je(r,e,n,s,a,i=null){var o=r,l=new Map,f=(e&Ku)!==0;if(f){var p=r;o=p.appendChild(Rs())}var g=null,b=af(()=>{var R=n();return mi(R)?R:R==null?[]:lo(R)}),k,y=new Map,S=!0;function A(R){(C.effect.f&Ar)===0&&(C.pending.delete(R),C.fallback=g,rp(C,k,o,e,s),g!==null&&(k.length===0?(g.f&vs)===0?Ji(g):(g.f^=vs,Ya(g,null,o)):ra(g,()=>{g=null})))}function x(R){C.pending.delete(R)}var D=bi(()=>{k=t(b);for(var R=k.length,P=new Set,K=Pt,q=bf(),re=0;re<R;re+=1){var ae=k[re],de=s(ae,re),G=S?null:l.get(de);G?(G.v&&ka(G.v,ae),G.i&&ka(G.i,re),q&&K.unskip_effect(G.e)):(G=sp(l,S?o:rc??=Rs(),ae,de,re,a,e,n),S||(G.e.f|=vs),l.set(de,G)),P.add(de)}if(R===0&&i&&!g&&(S?g=jr(()=>i(o)):(g=jr(()=>i(rc??=Rs())),g.f|=vs)),R>P.size&&nv(),!S)if(y.set(K,P),q){for(const[ne,ie]of l)P.has(ne)||K.skip_effect(ie.e);K.oncommit(A),K.ondiscard(x)}else A(K);t(b)}),C={effect:D,items:l,pending:y,outrogroups:null,fallback:g};S=!1}function Ua(r){for(;r!==null&&(r.f&qr)===0;)r=r.next;return r}function rp(r,e,n,s,a){var i=(s&jm)!==0,o=e.length,l=r.items,f=Ua(r.effect.first),p,g=null,b,k=[],y=[],S,A,x,D;if(i)for(D=0;D<o;D+=1)S=e[D],A=a(S,D),x=l.get(A).e,(x.f&vs)===0&&(x.nodes?.a?.measure(),(b??=new Set).add(x));for(D=0;D<o;D+=1){if(S=e[D],A=a(S,D),x=l.get(A).e,r.outrogroups!==null)for(const G of r.outrogroups)G.pending.delete(x),G.done.delete(x);if((x.f&pr)!==0&&(Ji(x),i&&(x.nodes?.a?.unfix(),(b??=new Set).delete(x))),(x.f&vs)!==0)if(x.f^=vs,x===f)Ya(x,null,n);else{var C=g?g.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),Ms(r,g,x),Ms(r,x,C),Ya(x,C,n),g=x,k=[],y=[],f=Ua(g.next);continue}if(x!==f){if(p!==void 0&&p.has(x)){if(k.length<y.length){var R=y[0],P;g=R.prev;var K=k[0],q=k[k.length-1];for(P=0;P<k.length;P+=1)Ya(k[P],R,n);for(P=0;P<y.length;P+=1)p.delete(y[P]);Ms(r,K.prev,q.next),Ms(r,g,K),Ms(r,q,R),f=R,g=q,D-=1,k=[],y=[]}else p.delete(x),Ya(x,f,n),Ms(r,x.prev,x.next),Ms(r,x,g===null?r.effect.first:g.next),Ms(r,g,x),g=x;continue}for(k=[],y=[];f!==null&&f!==x;)(p??=new Set).add(f),y.push(f),f=Ua(f.next);if(f===null)continue}(x.f&vs)===0&&k.push(x),g=x,f=Ua(x.next)}if(r.outrogroups!==null){for(const G of r.outrogroups)G.pending.size===0&&(_l(r,lo(G.done)),r.outrogroups?.delete(G));r.outrogroups.size===0&&(r.outrogroups=null)}if(f!==null||p!==void 0){var re=[];if(p!==void 0)for(x of p)(x.f&pr)===0&&re.push(x);for(;f!==null;)(f.f&pr)===0&&f!==r.fallback&&re.push(f),f=Ua(f.next);var ae=re.length;if(ae>0){var de=(s&Ku)!==0&&o===0?n:null;if(i){for(D=0;D<ae;D+=1)re[D].nodes?.a?.measure();for(D=0;D<ae;D+=1)re[D].nodes?.a?.fix()}np(r,re,de)}}i&&As(()=>{if(b!==void 0)for(x of b)x.nodes?.a?.apply()})}function sp(r,e,n,s,a,i,o,l){var f=(o&Hm)!==0?(o&Wm)===0?Rv(n,!1,!1):Hs(n):null,p=(o&zm)!==0?Hs(a):null;return{v:f,i:p,e:jr(()=>(i(e,f??n,p??a,l),()=>{r.delete(s)}))}}function Ya(r,e,n){if(r.nodes)for(var s=r.nodes.start,a=r.nodes.end,i=e&&(e.f&vs)===0?e.nodes.start:n;s!==null;){var o=pi(s);if(i.before(s),s===a)return;s=o}}function Ms(r,e,n){e===null?r.effect.first=n:e.next=n,n===null?r.effect.last=e:n.prev=e}function Bs(r,e,...n){var s=new fd(r);bi(()=>{const a=e()??null;s.ensure(a,a&&(i=>a(i,...n)))},ia)}function Mf(r,e,n){fo(()=>{var s=gr(()=>e(r,n?.())||{});if(n&&s?.update){var a=!1,i={};gi(()=>{var o=n();Vv(o),a&&$u(i,o)&&(i=o,s.update(o))}),a=!0}if(s?.destroy)return()=>s.destroy()})}function Of(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=Of(r[e]))&&(s&&(s+=" "),s+=n)}else for(n in r)r[n]&&(s&&(s+=" "),s+=n);return s}function ap(){for(var r,e,n=0,s="",a=arguments.length;n<a;n++)(r=arguments[n])&&(e=Of(r))&&(s&&(s+=" "),s+=e);return s}function ip(r){return typeof r=="object"?ap(r):r??""}const sc=[...`
2
+ \r\f \v\uFEFF`];function op(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||sc.includes(s[o-1]))&&(l===s.length||sc.includes(s[l]))?s=(o===0?"":s.substring(0,o))+s.substring(l+1):o=l}}return s===""?null:s}function ac(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 lp(r,e){if(e){var n="",s,a;return Array.isArray(e)?(s=e[0],a=e[1]):s=e,s&&(n+=ac(s)),a&&(n+=ac(a,!0)),n=n.trim(),n===""?null:n}return String(r)}function St(r,e,n,s,a,i){var o=r[ul];if(o!==n||o===void 0){var l=op(n,s,i);l==null?r.removeAttribute("class"):e?r.className=l:r.setAttribute("class",l),r[ul]=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 Go(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 Fn(r,e,n,s){var a=r[fl];if(a!==e){var i=lp(e,s);i==null?r.removeAttribute("style"):r.style.cssText=i,r[fl]=e}else s&&(Array.isArray(s)?(Go(r,n?.[0],s[0]),Go(r,n?.[1],s[1],"important")):Go(r,n,s));return s}function dp(r,e){e?r.hasAttribute("selected")||r.setAttribute("selected",""):r.removeAttribute("selected")}function cp(r,e){var n=r.__defaultValue,s=r.multiple,a=s?n??[]:null;if(!(s&&!mi(a))){r.selectedIndex;for(var i of r.options){var o=ba(i);dp(i,s?a.includes(o):mf(o,n))}}}function Cn(r,e,n=!1){if(r.multiple){if(e==null)return;if(!mi(e))return Jm();for(var s of r.options)s.selected=e.includes(ba(s));return}for(s of r.options){var a=ba(s);if(mf(a,e)){s.selected=!0;return}}(!n||e!==void 0)&&(r.selectedIndex=-1)}function Qt(r){var e=new MutationObserver(n=>{n.every(up)||("__defaultValue"in r&&cp(r),"__value"in r&&Cn(r,r.__value))});e.observe(r,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),dd(()=>{e.disconnect()})}function br(r,e,n=e){var s=new WeakSet,a=!0;sd(r,"change",i=>{var o=i?"[selected]":":checked",l;if(r.multiple)l=[].map.call(r.querySelectorAll(o),ba);else{var f=r.querySelector(o)??r.querySelector("option:not([disabled])");l=f&&ba(f)}n(l),r.__value=l,Pt!==null&&s.add(Pt)}),fo(()=>{var i=e();if(r===document.activeElement){var o=Pt;if(s.has(o))return}if(Cn(r,i,a),a&&i===void 0){var l=r.querySelector(":checked");l!==null&&(i=ba(l),n(i))}r.__value=i,a=!1})}function ba(r){return"__value"in r?r.__value:r.value}function up(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 fp=Symbol("is custom element"),hp=Symbol("is html"),mp=Vm?"progress":"PROGRESS";function rn(r,e){var n=hd(r);n.value===(n.value=e??void 0)||r.value===e&&(e!==0||r.nodeName!==mp)||(r.value=e??"")}function Rr(r,e){var n=hd(r);n.checked!==(n.checked=e??void 0)&&(r.checked=e)}function I(r,e,n,s){var a=hd(r);a[e]!==(a[e]=n)&&(e==="loading"&&(r[Bm]=n),n==null?r.removeAttribute(e):typeof n!="string"&&vp(r).has(e)?r[e]=n:r.setAttribute(e,n))}function hd(r){return r[Wu]??={[fp]:r.nodeName.includes("-"),[hp]:r.namespaceURI===Qm}}var ic=new Map;function vp(r){var e=r.getAttribute("is")||r.nodeName,n=ic.get(e);if(n)return n;ic.set(e,n=new Set);for(var s,a=r,i=Element.prototype;i!==a;){s=Bu(a);for(var o in s)s[o].set&&o!=="innerHTML"&&o!=="textContent"&&o!=="innerText"&&n.add(o);a=co(a)}return n}function An(r,e,n=e){var s=new WeakSet;sd(r,"input",async a=>{var i=a?r.defaultValue:r.value;if(i=Uo(r)?Bo(i):i,n(i),Pt!==null&&s.add(Pt),await ti(),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))}}}),gr(e)==null&&r.value&&(n(Uo(r)?Bo(r.value):r.value),Pt!==null&&s.add(Pt)),gi(()=>{var a=e();if(r===document.activeElement){var i=Pt;if(s.has(i))return}Uo(r)&&a===Bo(r.value)||r.type==="date"&&!a&&!r.value||a!==r.value&&(r.value=a??"")})}function mr(r,e,n=e){sd(r,"change",s=>{var a=s?r.defaultChecked:r.checked;n(a)}),gr(e)==null&&n(r.checked),gi(()=>{var s=e();r.checked=!!s})}function Uo(r){var e=r.type;return e==="number"||e==="range"}function Bo(r){return r===""?null:+r}function Vo(r,e){return r===e||r?.[Ts]===e}function _n(r=nd(),e,n,s){var a=Un.r,i=zt;return fo(()=>{var o,l;return gi(()=>{o=l,l=s?.()||[],gr(()=>{Vo(n(...l),r)||(e(r,...l),o&&Vo(n(...o),r)&&e(null,...o))})}),()=>{let f=i;for(;f!==a&&f.parent!==null&&f.parent.f&qi;)f=f.parent;const p=()=>{l&&Vo(n(...l),r)&&e(null,...l)},g=f.teardown;f.teardown=()=>{p(),g?.()}}}),r}function B(r,e,n,s){var a=!0,i=(n&qm)!==0,o=(n&$m)!==0,l=s,f=!0,p=void 0,g=()=>o&&a?(p??=Ja(s),t(p)):(f&&(f=!1,l=o?gr(s):s),l);let b;if(i){var k=Ts in r||Um in r;b=pa(r,e)?.set??(k&&e in r?P=>r[e]=P:void 0)}var y,S=!1;i?[y,S]=gv(()=>r[e]):y=r[e],y===void 0&&s!==void 0&&(y=g(),b&&(ov(),b(y)));var A;if(A=()=>{var P=r[e];return P===void 0?g():(f=!0,P)},(n&Ym)===0)return A;if(b){var x=r.$$legacy;return(function(P,K){return arguments.length>0?((!K||x||S)&&b(K?A():P),P):A()})}var D=!1,C=((n&Km)!==0?Ja:af)(()=>(D=!1,A()));i&&t(C);var R=zt;return(function(P,K){if(arguments.length>0){const q=K?t(C):i?Be(P):P;return u(C,q),D=!0,l!==void 0&&(l=q),P}return Ns&&D||(R.f&Ar)!==0?C.v:t(C)})}function pp(r){Un===null&&ed(),lt(()=>{const e=gr(r);if(typeof e=="function")return e})}function gp(r){Un===null&&ed(),pp(()=>()=>gr(r))}const bp="5";typeof window<"u"&&((window.__svelte??={}).v??=new Set).add(bp);const El=Symbol("homematic-manager.data-table");function _p(r){Zu(El,r)}function Ep(){return Ju(El)?Qu(El):void 0}function yp(r,e={}){return r.replace(/\{(\w+)\}/g,(n,s)=>{const a=e[s];return a===void 0?n:String(a)})}function Lf(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 Sp=_(`<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
+ 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
+ 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
+ 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
+ 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
+ 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 kp(r,e){ht(e,!0);let n=B(e,"openExternal",3,void 0),s=B(e,"testId",3,void 0);function a(o){Lf(o,e.href,n())}var i=Sp();E(()=>{I(i,"href",e.href),I(i,"title",e.label),I(i,"aria-label",e.label),I(i,"data-testid",s())}),ee("click",i,a),v(r,i),mt()}kt(["click"]);const Ff={ok:"✔",busy:"↻",absent:"–",bad:"✕"};function Gf(r){return r.subscribing===!0||(r.waiting===!0||r.reconnecting===!0)&&!r.connected?"busy":r.connected?"ok":r.absent===!0?"absent":"bad"}function wp(r){return r.filter(e=>!e.connected&&e.subscribing!==!0&&e.unreachable===!0).map(e=>e.name)}function Ap(r){const e=r.map(n=>Gf(n));return e.includes("bad")?"bad":e.includes("busy")?"busy":e.includes("ok")?"ok":"absent"}function Tp(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 Rp(r){return r.find(e=>e.callbackWarning!==void 0)?.callbackWarning}function xp(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 Ip=_('<span role="img"> </span>');function Dp(r,e){ht(e,!0);let n=B(e,"backendConnected",3,!0),s=B(e,"allConnectedText",3,"Connected"),a=B(e,"someNotConnectedText",3,"Not connected"),i=B(e,"notPresentText",3,"Not present"),o=B(e,"subscribingText",3,"Subscribing"),l=B(e,"waitingText",3,"Waiting"),f=B(e,"reconnectingText",3,"Reconnecting"),p=B(e,"testId",3,void 0);const g=c(()=>Ap(e.interfaces)),b=c(()=>{if(!n())return a();switch(t(g)){case"ok":return s();case"busy":return e.interfaces.some(A=>A.subscribing===!0)?o():e.interfaces.some(A=>A.reconnecting===!0&&!A.connected)?f():l();case"absent":return i();default:return a()}});var k=Ip();let y;var S=m(k,!0);E(()=>{y=St(k,1,`hmm-connection hmm-connection-${t(g)??""}`,"svelte-18vw5u5",y,{"hmm-connection-offline":!n()}),I(k,"aria-label",t(b)),I(k,"title",t(b)),I(k,"data-mark",t(g)),I(k,"data-testid",p()),h(S,Ff[t(g)])}),v(r,k),mt()}var Np=_('<span class="hmm-interface-warn svelte-m4i49t" aria-hidden="true">⚠</span>'),Cp=_('<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>'),Pp=_('<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>'),Mp=_("<span> </span>"),Op=_('<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>'),Lp=_('<button type="button" class="hmm-interface-retry svelte-m4i49t" data-testid="interface-callback-use-auto"> </button>'),Fp=_('<div class="hmm-interface-warning svelte-m4i49t" role="alert" data-testid="interface-callback-warning"><span class="svelte-m4i49t"> </span> <!></div>'),Gp=_('<div class="hmm-interface-foot svelte-m4i49t"><button type="button" class="hmm-interface-retry svelte-m4i49t"> </button></div>'),Up=_('<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>'),Bp=_('<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 Vp(r,e){ht(e,!0);let n=B(e,"selected",3,""),s=B(e,"host",3,""),a=B(e,"backendConnected",3,!0),i=B(e,"details",19,()=>({})),o=B(e,"label",3,"Select an interface"),l=B(e,"listLabel",3,"Interfaces"),f=B(e,"connectedText",3,"Connected"),p=B(e,"notConnectedText",3,"Not connected"),g=B(e,"notPresentText",3,"Not present"),b=B(e,"notAnsweringText",3,"Not answering"),k=B(e,"retryText",3,"Retry now"),y=B(e,"onretry",3,void 0),S=B(e,"subscribingText",3,"Subscribing"),A=B(e,"waitingText",3,"Waiting"),x=B(e,"reconnectingText",3,"Reconnecting"),D=B(e,"allConnectedText",3,"All interfaces are connected"),C=B(e,"someNotConnectedText",3,"Not every interface is connected"),R=B(e,"portLabel",3,"Port"),P=B(e,"tlsLabel",3,"TLS"),K=B(e,"devicesLabel",3,F=>`${String(F)} devices`),q=B(e,"dutyCycleLabel",3,F=>`Duty cycle ${String(F)} %`),re=B(e,"publishCallbackPorts",3,!1),ae=B(e,"callbackPortInUseLabel",3,F=>`Callback port ${String(F)} is in use`),de=B(e,"callbackPortFailedLabel",3,F=>`Callback port ${String(F)} cannot be opened`),G=B(e,"publishPortText",3,"Publish this port unchanged"),ne=B(e,"callbackWarningLabel",3,F=>F.reason==="notLocal"?`The callback address ${F.address} is not an address of this machine; ${F.auto} is used instead`:`The callback address ${F.address} is not in the CCU's network; the CCU may not reach it and send no events`),ie=B(e,"useAutomaticText",3,"Use automatic"),Z=B(e,"onuseautomatic",3,void 0),te=B(e,"onselect",3,void 0),j=B(e,"store",3,void 0),U=B(e,"storeTestId",3,void 0),fe=B(e,"testId",3,void 0),Te=N(!1),ce=N(0),Re=N(void 0),xe=N(void 0),ge=N(void 0),M=N(void 0);const ue=c(()=>Rp(e.interfaces)),he=c(()=>[t(M),t(ge)].filter(F=>F!==void 0)),ve=c(()=>y()===void 0?[]:wp(e.interfaces));let ye=Be([]);const Y=c(()=>[...j()!==void 0&&j().selectable?[j().id]:[],...e.interfaces.map(F=>F.name)]),X=c(()=>t(Y).indexOf(n())),L=c(()=>j()!==void 0&&j().id===n()?j().label:n()),z=c(()=>j()!==void 0&&j().selectable?0:-1);function le(F,Ne){if(F==="bad"&&Ne.unreachable===!0)return b();switch(F){case"ok":return f();case"busy":return Ne.subscribing===!0?S():Ne.reconnecting===!0?x():A();case"absent":return g();default:return p()}}function me(F){return xp(F,i()[F.name],{port:R(),tls:P(),devices:K(),dutyCycle:q()}).join(" · ")}function be(){u(ce,t(X)<0?0:t(X),!0),u(Te,!0)}function Ee(F){u(Te,!1),F&&t(xe)?.focus()}function se(F){Ee(!0),F!==n()&&te()?.(F)}function W(F){t(Y).length!==0&&u(ce,(t(ce)+F+t(Y).length)%t(Y).length)}lt(()=>{t(Te)&&ye[t(ce)]?.focus()});function V(F){if(F.key==="ArrowDown"||F.key==="ArrowUp"){F.preventDefault(),t(Te)?W(F.key==="ArrowDown"?1:-1):be();return}F.key==="Escape"&&t(Te)&&(F.preventDefault(),Ee(!0))}function T(F,Ne){switch(F.key){case"ArrowDown":{F.preventDefault(),W(1);break}case"ArrowUp":{F.preventDefault(),W(-1);break}case"Home":{F.preventDefault(),u(ce,0);break}case"End":{F.preventDefault(),u(ce,t(Y).length-1);break}case"Enter":case" ":{F.preventDefault(),se(t(Y)[Ne]??"");break}case"Escape":{F.preventDefault(),Ee(!0);break}case"Tab":{const Me=t(he)[0];if(!F.shiftKey&&Me!==void 0){F.preventDefault(),Me.focus();break}Ee(!1);break}}}function O(F){const Ne=t(he).findIndex(Me=>Me===F.currentTarget);if(F.key==="Escape")F.preventDefault(),Ee(!0);else if(F.key==="Tab"&&F.shiftKey)F.preventDefault(),(t(he)[Ne-1]??ye[t(ce)])?.focus();else if(F.key==="Tab"){const Me=t(he)[Ne+1];Me===void 0?Ee(!1):(F.preventDefault(),Me.focus())}}function J(F){t(Te)&&t(Re)&&F.target instanceof Node&&!t(Re).contains(F.target)&&Ee(!1)}var _e=Bp();wr("mousedown",la,J);var Ce=w(_e),Fe=w(Ce);{let F=c(()=>fe()===void 0?void 0:`${fe()}-summary`);Dp(Fe,{get interfaces(){return e.interfaces},get backendConnected(){return a()},get allConnectedText(){return D()},get someNotConnectedText(){return C()},get notPresentText(){return g()},get subscribingText(){return S()},get waitingText(){return A()},get reconnectingText(){return x()},get testId(){return t(F)}})}var We=d(Fe,2);{var Ze=F=>{var Ne=Np();E(Me=>{I(Ne,"title",Me),I(Ne,"data-testid",fe()===void 0?void 0:`${fe()}-callback-warning`)},[()=>ne()(t(ue))]),v(F,Ne)};$(We,F=>{t(ue)!==void 0&&F(Ze)})}var nt=d(We,2),ke=m(nt,!0);_n(Ce,F=>u(xe,F),()=>t(xe));var we=d(Ce,2);{var H=F=>{var Ne=Up(),Me=w(Ne),Ke=w(Me),pe=m(Ke,!0),De=d(Ke,2),Pe=m(De,!0),Ge=d(Me,2),Le=w(Ge);{var Ye=gt=>{var Se=wt(),Oe=Ie(Se);{var $e=Et=>{var it=Cp();let Wt;var Mt=d(w(it),2),Ot=m(Mt,!0);_n(it,Zt=>ye[t(z)]=Zt,()=>ye?.[t(z)]),E(()=>{Wt=St(it,1,`hmm-interface-store hmm-meta-${j().mark??""}`,"svelte-m4i49t",Wt,{"hmm-interface-item-current":j().id===n()}),I(it,"aria-selected",j().id===n()),I(it,"tabindex",t(z)===t(ce)?0:-1),I(it,"title",j().title),I(it,"data-mark",j().mark),I(it,"data-provider",j().provider),I(it,"data-testid",U()),h(Ot,j().label)}),ee("click",it,()=>se(j().id)),ee("keydown",it,Zt=>T(Zt,t(z))),v(Et,it)},ft=Et=>{var it=Pp(),Wt=d(w(it),2),Mt=m(Wt,!0);E(()=>{St(it,1,`hmm-interface-store hmm-interface-store-off hmm-meta-${j().mark??""}`,"svelte-m4i49t"),I(it,"title",j().title),I(it,"data-mark",j().mark),I(it,"data-provider",j().provider),I(it,"data-testid",U()),h(Mt,j().label)}),v(Et,it)};$(Oe,Et=>{j().selectable?Et($e):Et(ft,-1)})}v(gt,Se)};$(Le,gt=>{j()!==void 0&&gt(Ye)})}var Xe=d(Le,2);je(Xe,19,()=>e.interfaces,gt=>gt.name,(gt,Se,Oe)=>{const $e=c(()=>Gf(t(Se))),ft=c(()=>t(z)+1+t(Oe)),Et=c(()=>Tp(t(Se),re(),{portInUse:ae(),portFailed:de(),publish:G()}));var it=Op();let Wt;var Mt=w(it),Ot=w(Mt),Zt=m(Ot,!0),bn=d(Ot,2),on=w(bn),un=m(on,!0),vn=d(on),Pn=d(Mt,2),Jn=m(Pn,!0),jn=d(Pn,2);{var Xt=xt=>{var fn=Mp();let Mn;var On=m(fn,!0);E(()=>{Mn=St(fn,1,"hmm-interface-item-callback svelte-m4i49t",null,Mn,{"hmm-interface-item-callback-bad":t(Et).bad}),I(fn,"data-testid",`interface-callback-${t(Se).name}`),h(On,t(Et).text)}),v(xt,fn)};$(jn,xt=>{t(Et)!==void 0&&xt(Xt)})}_n(it,(xt,fn)=>ye[fn]=xt,xt=>ye?.[xt],()=>[t(ft)]),E((xt,fn)=>{Wt=St(it,1,"hmm-interface-item svelte-m4i49t",null,Wt,{"hmm-interface-item-current":t(Se).name===n()}),I(it,"aria-selected",t(Se).name===n()),I(it,"tabindex",t(ft)===t(ce)?0:-1),I(it,"title",t($e)==="bad"?t(Se).error??p():void 0),I(it,"data-testid",`interface-item-${t(Se).name}`),h(Zt,t(Se).name),St(bn,1,`hmm-interface-mark hmm-interface-mark-${t($e)??""}`,"svelte-m4i49t"),I(bn,"data-mark",t($e)),h(un,Ff[t($e)]),h(vn,` ${xt??""}`),h(Jn,fn)},[()=>le(t($e),t(Se)),()=>me(t(Se))]),ee("click",it,()=>se(t(Se).name)),ee("keydown",it,xt=>T(xt,t(ft))),v(gt,it)});var ze=d(Ge,2);{var Je=gt=>{var Se=Fp(),Oe=w(Se),$e=m(Oe,!0),ft=d(Oe,2);{var Et=it=>{var Wt=Lp(),Mt=m(Wt,!0);_n(Wt,Ot=>u(M,Ot),()=>t(M)),E(()=>h(Mt,ie())),ee("click",Wt,()=>{Ee(!1),Z()()}),ee("keydown",Wt,O),v(it,Wt)};$(ft,it=>{Z()!==void 0&&it(Et)})}E(it=>h($e,it),[()=>ne()(t(ue))]),v(gt,Se)};$(ze,gt=>{t(ue)!==void 0&&gt(Je)})}var dt=d(ze,2);{var pt=gt=>{var Se=Gp(),Oe=w(Se),$e=m(Oe,!0);_n(Oe,ft=>u(ge,ft),()=>t(ge)),E(()=>{I(Oe,"data-testid",fe()===void 0?void 0:`${fe()}-retry`),h($e,k())}),ee("click",Oe,()=>y()?.(t(ve))),ee("keydown",Oe,O),v(gt,Se)};$(dt,gt=>{t(ve).length>0&&gt(pt)})}E(()=>{h(pe,s()===""?"—":s()),h(Pe,a()?f():p()),I(Ge,"aria-label",l())}),v(F,Ne)};$(we,F=>{t(Te)&&F(H)})}_n(_e,F=>u(Re,F),()=>t(Re)),E(()=>{I(_e,"data-testid",fe()),I(Ce,"aria-expanded",t(Te)),I(Ce,"aria-label",o()),I(Ce,"title",o()),I(Ce,"data-testid",fe()===void 0?void 0:`${fe()}-trigger`),h(ke,t(L))}),ee("click",Ce,()=>t(Te)?Ee(!1):be()),ee("keydown",Ce,V),v(r,_e),mt()}kt(["click","keydown"]);var Hp=_('<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 zp(r,e){let n=B(e,"visible",3,!1),s=B(e,"text",3,"Loading Homematic Manager..."),a=B(e,"testId",3,void 0);var i=wt(),o=Ie(i);{var l=f=>{var p=Hp(),g=w(p),b=d(w(g),2),k=m(b,!0);E(()=>{I(p,"data-testid",a()),h(k,s())}),v(f,p)};$(o,f=>{n()&&f(l)})}v(r,i)}function jp(r){return r===void 0||!r.reachable?"bad":r.writable?"ok":"readonly"}function Wp(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 hr 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 Uf(r){if(typeof r!="object"||r===null)return!1;const e=r;return typeof e.message=="string"&&typeof e.kind=="string"}function Ei(r,e="internal"){return r instanceof hr?r:Uf(r)?new hr(r):r instanceof Error?new hr({message:r.message,kind:e}):new hr({message:String(r),kind:e})}const yl=5,Kp=5e3,Yp=15e3;class qp{#e=N(Be([]));get items(){return t(this.#e)}set items(e){u(this.#e,e,!0)}#n;#t;#s;#a;#r;#i=new Map;#l=1;constructor(e,n={}){this.#n=n.max??20,this.#t=n.now??(()=>Date.now()),this.#s=n.infoTtlMs??Kp,this.#a=n.warnTtlMs??Yp,this.#r=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-yl))}get hidden(){return Math.max(0,this.items.length-yl)}push(e,n,s){const a=this.#l;this.#l+=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.#c(f.id);return this.items=l.length>0?o.slice(l.length):o,this.#d(a,e),a}fromError(e,n){const s=Ei(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.#c(e),this.items=this.items.filter(n=>n.id!==e)}clear(){for(const e of[...this.#i.keys()])this.#c(e);this.items=[]}dispose(){this.clear(),this.#r()}#o(e){return e==="info"?this.#s:e==="warn"?this.#a:0}#d(e,n){const s=this.#o(n);if(s<=0)return;const a=setTimeout(()=>{this.#i.delete(e),this.items=this.items.filter(i=>i.id!==e)},s);a.unref?.(),this.#i.set(e,a)}#c(e){const n=this.#i.get(e);n!==void 0&&(clearTimeout(n),this.#i.delete(e))}}var $p=_('<button type="button" class="hmm-notices-more svelte-1pqi0mh"> </button>'),Xp=_("<strong> </strong>"),Qp=_('<div><span class="hmm-notice-text svelte-1pqi0mh"><!> </span> <button type="button" class="hmm-notice-close svelte-1pqi0mh">✕</button></div>'),Zp=_('<div class="hmm-notices svelte-1pqi0mh" role="log" aria-live="polite"><!> <!></div>');function Jp(r,e){ht(e,!0);let n=B(e,"ondismiss",3,void 0),s=B(e,"dismissLabel",3,"Dismiss"),a=B(e,"visibleCount",3,yl),i=B(e,"moreLabel",3,A=>`${A} more`),o=B(e,"lessLabel",3,"Show fewer"),l=B(e,"testId",3,void 0),f=N(!1);const p=c(()=>Math.max(0,e.notices.length-a())),g=c(()=>t(f)?e.notices:e.notices.slice(e.notices.length-Math.min(e.notices.length,a())));lt(()=>{t(p)===0&&t(f)&&u(f,!1)});var b=Zp(),k=w(b);{var y=A=>{var x=$p(),D=m(x,!0);E(C=>{I(x,"data-testid",l()===void 0?void 0:`${l()}-more`),I(x,"aria-expanded",t(f)),h(D,C)},[()=>t(f)?o():i()(t(p))]),ee("click",x,()=>u(f,!t(f))),v(A,x)};$(k,A=>{t(p)>0&&A(y)})}var S=d(k,2);je(S,17,()=>t(g),A=>A.id,(A,x)=>{var D=Qp();let C;var R=w(D),P=w(R);{var K=ae=>{var de=Xp(),G=m(de,!0);E(()=>h(G,t(x).interfaceName)),v(ae,de)};$(P,ae=>{t(x).interfaceName!==void 0&&ae(K)})}var q=d(P),re=d(R,2);E(()=>{C=St(D,1,"hmm-notice svelte-1pqi0mh",null,C,{"hmm-notice-warn":t(x).level==="warn","hmm-notice-error":t(x).level==="error"}),h(q,` ${t(x).message??""}`),I(re,"aria-label",s())}),ee("click",re,()=>n()?.(t(x).id)),v(A,D)}),E(()=>I(b,"data-testid",l())),v(r,b),mt()}kt(["click"]);function to(r){return r===void 0?"":typeof r=="string"?r:typeof r=="number"||typeof r=="boolean"?String(r):JSON.stringify(r)}function Bf(r,e){return new Date(r).toLocaleTimeString(e,{hour12:!1})}function Xa(r,e){const n=new Date(r);return`${n.toLocaleDateString(e)} ${n.toLocaleTimeString(e,{hour12:!1})}`}function eg(r){return r<1e3?`${Math.round(r)} ms`:`${(r/1e3).toFixed(2)} s`}function oc(r){return r.map(e=>typeof e=="string"?e:JSON.stringify(e)).join(", ")}const Gi={minWidth:320,minHeight:160},Sl=32;function tg(r,e){return{...r,minHeight:Math.max(0,Math.min(r.minHeight,e.height-Sl))}}function Ta(r,e,n){return Math.min(Math.max(r,e),Math.max(e,n))}function Vf(r,e){return{...r,left:Math.round(Ta(r.left,0,e.width-r.width)),top:Math.round(Ta(r.top,0,e.height-r.height))}}function ng(r,e,n,s){return Vf({...r,left:r.left+e,top:r.top+n},s)}function rg(r,e,n,s,a,i=Gi){const o=r.left+r.width,l=r.top+r.height,f=e==="w",p=e==="n",g=f||e==="e"||e==="se",b=p||e==="s"||e==="se",k=Math.max(i.minWidth,f?o:a.width-r.left),y=Math.max(i.minHeight,p?l:a.height-r.top),S=g?Math.round(Ta(r.width+(f?-n:n),i.minWidth,Math.min(k,a.width))):r.width,A=b?Math.round(Ta(r.height+(p?-s:s),i.minHeight,Math.min(y,a.height))):r.height;return Vf({left:f?o-S:r.left,top:p?l-A:r.top,width:S,height:A},a)}const sg=.5,no=120;function md(r,e){return{min:no,max:Math.max(no,r-e)}}function Ho(r,e){const{min:n,max:s}=md(r,e);return Math.round(Ta(r*sg,n,s))}function lc(r,e,n,s){const{min:a,max:i}=md(n,s);return Math.round(Ta(r-e,a,i))}const Hf=new Map;function dc(r,e){Hf.set(r,e)}function ag(r){return Hf.get(r)}const zf=new Map;function ig(r,e){zf.set(r,e)}function og(r){return zf.get(r)}var lg=_('<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>'),dg=_('<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>'),cg=_('<li class="hmm-rpclog-empty svelte-7sszxb"> </li>'),ug=_('<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 fg(r,e){ht(e,!0);let n=B(e,"open",15,!1),s=B(e,"pending",19,()=>[]),a=B(e,"title",3,"RPC log"),i=B(e,"emptyText",3,"No RPC calls yet"),o=B(e,"pendingText",3,"in progress"),l=B(e,"clearLabel",3,"Clear"),f=B(e,"closeLabel",3,"Close"),p=B(e,"resizeLabel",3,"Resize the RPC log"),g=B(e,"hideBackground",15,!1),b=B(e,"hideBackgroundLabel",3,"Hide background calls"),k=B(e,"originLabels",19,()=>({console:"console",ui:"UI",background:"background"})),y=B(e,"openLabel",3,"Open in console"),S=B(e,"onopen",3,void 0),A=B(e,"reservedHeight",3,void 0),x=B(e,"onclear",3,void 0),D=B(e,"testId",3,void 0);function C(ie){const Z=to(ie.result);return ie.resultBytes===void 0?Z:`${Z} (${String(Math.round(ie.resultBytes/1024))} kB)`}const R="rpclog";let P=N(Be(ag(R)));function K(){if(A()!==void 0)return A();const ie=getComputedStyle(document.documentElement).getPropertyValue("--hmm-header-height"),Z=Number.parseFloat(ie);return Number.isFinite(Z)?Z:36}lt(()=>{n()&&t(P)===void 0&&u(P,Ho(window.innerHeight,K()),!0)});function q(ie){if(ie.button!==0)return;const Z=t(P)??Ho(window.innerHeight,K()),te=ie.clientY;ie.preventDefault();const j=fe=>{u(P,lc(Z,fe.clientY-te,window.innerHeight,K()),!0)},U=()=>{window.removeEventListener("pointermove",j),window.removeEventListener("pointerup",U),window.removeEventListener("pointercancel",U),t(P)!==void 0&&dc(R,t(P))};window.addEventListener("pointermove",j),window.addEventListener("pointerup",U),window.addEventListener("pointercancel",U)}const re=c(()=>n()&&t(P)!==void 0?md(window.innerHeight,K()).max:no);function ae(ie){const Z=ie.key==="ArrowUp"?-20:ie.key==="ArrowDown"?20:0;if(Z===0)return;ie.preventDefault();const te=t(P)??Ho(window.innerHeight,K());u(P,lc(te,Z,window.innerHeight,K()),!0),dc(R,t(P))}var de=wt(),G=Ie(de);{var ne=ie=>{var Z=ug();let te;var j=w(Z),U=d(j,2),fe=w(U),Te=m(fe,!0),ce=d(fe,2),Re=w(ce),xe=d(Re),ge=d(ce,2),M=m(ge,!0),ue=d(ge,2),he=d(U,2),ve=w(he);je(ve,17,s,L=>L.id,(L,z)=>{var le=lg(),me=d(w(le),2),be=m(me,!0),Ee=d(me,2),se=m(Ee),W=d(Ee,2),V=m(W,!0),T=d(W,2),O=m(T,!0);E(J=>{h(be,k().ui),h(se,`${t(z).interfaceName??""} ${t(z).method??""}`),h(V,J),h(O,o())},[()=>oc(t(z).params)]),v(L,le)});var ye=d(ve,2);je(ye,17,()=>e.entries,L=>L.id,(L,z)=>{var le=dg();let me;var be=w(le),Ee=m(be,!0),se=d(be,2),W=m(se,!0),V=d(se,2),T=m(V),O=d(V,2),J=m(O,!0),_e=d(O,2),Ce=w(_e);{var Fe=we=>{var H=Zn();E(F=>h(H,F),[()=>C(t(z))]),v(we,H)},We=we=>{var H=Zn();E(()=>h(H,t(z).error??"")),v(we,H)};$(Ce,we=>{t(z).ok?we(Fe):we(We,-1)})}var Ze=d(_e,2),nt=m(Ze,!0),ke=d(Ze,2);E((we,H,F)=>{me=St(le,1,"hmm-rpclog-entry svelte-7sszxb",null,me,{"hmm-rpclog-failed":!t(z).ok,"hmm-rpclog-background":t(z).origin==="background"}),I(le,"data-origin",t(z).origin),h(Ee,we),h(W,k()[t(z).origin]),h(T,`${t(z).interfaceName??""} ${t(z).method??""}`),h(J,H),h(nt,F),I(ke,"title",y()),I(ke,"aria-label",`${y()}: ${t(z).method}`)},[()=>Bf(t(z).timestamp),()=>oc(t(z).params),()=>eg(t(z).durationMs)]),ee("click",ke,()=>S()?.(t(z))),v(L,le)});var Y=d(ye,2);{var X=L=>{var z=cg(),le=m(z,!0);E(()=>h(le,i())),v(L,z)};$(Y,L=>{e.entries.length===0&&s().length===0&&L(X)})}E(()=>{I(Z,"aria-label",a()),I(Z,"data-testid",D()),te=Fn(Z,"",te,{height:t(P)===void 0?void 0:`${t(P)}px`}),I(j,"aria-label",p()),I(j,"aria-valuenow",t(P)??0),I(j,"aria-valuemin",no),I(j,"aria-valuemax",t(re)),I(j,"data-testid",D()===void 0?void 0:`${D()}-resize`),h(Te,a()),I(Re,"data-testid",D()===void 0?void 0:`${D()}-hide-background`),h(xe,` ${b()??""}`),h(M,l()),I(ue,"aria-label",f())}),ee("pointerdown",j,q),ee("keydown",j,ae),mr(Re,g),ee("click",ge,()=>x()?.()),ee("click",ue,()=>n(!1)),v(ie,Z)};$(G,ie=>{n()&&ie(ne)})}v(r,de),mt()}kt(["pointerdown","keydown","click"]);var hg=_('<button type="button" class="hmm-dialog-close svelte-jby388">✕</button>'),mg=_('<div class="hmm-dialog-buttons svelte-jby388"><!></div>'),vg=_('<div aria-hidden="true"></div>'),pg=_('<dialog><div><span class="hmm-dialog-title svelte-jby388"> </span> <!></div> <div class="hmm-dialog-body svelte-jby388"><!></div> <!> <!></dialog>');function yn(r,e){ht(e,!0);let n=B(e,"open",15,!1),s=B(e,"title",3,""),a=B(e,"modal",3,!0),i=B(e,"width",3,"640px"),o=B(e,"height",3,void 0),l=B(e,"closable",3,!0),f=B(e,"onclose",3,void 0),p=B(e,"children",3,void 0),g=B(e,"buttons",3,void 0),b=B(e,"closeLabel",3,"Close"),k=B(e,"minWidth",3,void 0),y=B(e,"minHeight",3,void 0),S=B(e,"movable",3,!0),A=B(e,"top",3,void 0),x=B(e,"testId",3,void 0),D=N(void 0),C,R=N(void 0);const P=c(()=>x()??s()),K=c(()=>Number(/^(\d+)px$/.exec(i())?.[1]??Number.NaN)),q=c(()=>({minWidth:k()??(Number.isNaN(t(K))?Gi.minWidth:Math.max(Gi.minWidth,t(K))),minHeight:y()??Gi.minHeight}));lt(()=>{const X=t(D);X&&(n()&&!X.open?(C=document.activeElement instanceof HTMLElement?document.activeElement:void 0,u(R,t(P)===""?void 0:og(t(P)),!0),a()?X.showModal():X.show()):!n()&&X.open&&X.close())});function re(){n(!1),t(D)?.open&&t(D).close(),f()?.(),C?.focus(),C=void 0}function ae(){return{width:window.innerWidth,height:window.innerHeight}}function de(X,L){const z=t(D);if(!z||!S()||X.button!==0)return;const le=z.getBoundingClientRect(),me={left:le.left,top:le.top,width:le.width,height:le.height},be=X.clientX,Ee=X.clientY;X.preventDefault();const se=V=>{const T=V.clientX-be,O=V.clientY-Ee;u(R,L==="move"?ng(me,T,O,ae()):rg(me,L,T,O,ae(),tg(t(q),ae())),!0)},W=()=>{window.removeEventListener("pointermove",se),window.removeEventListener("pointerup",W),window.removeEventListener("pointercancel",W),t(R)&&t(P)!==""&&ig(t(P),t(R))};window.addEventListener("pointermove",se),window.addEventListener("pointerup",W),window.addEventListener("pointercancel",W)}function G(X){X.target.closest("button")===null&&de(X,"move")}const ne=["n","e","s","w","se"];function ie(X){X.preventDefault(),l()&&re()}var Z=pg();let te,j;var U=w(Z);let fe;var Te=w(U),ce=m(Te,!0),Re=d(Te,2);{var xe=X=>{var L=hg();E(()=>I(L,"aria-label",b())),ee("click",L,re),v(X,L)};$(Re,X=>{l()&&X(xe)})}var ge=d(U,2),M=w(ge);{var ue=X=>{var L=wt(),z=Ie(L);Bs(z,p),v(X,L)};$(M,X=>{p()&&X(ue)})}var he=d(ge,2);{var ve=X=>{var L=mg(),z=w(L);Bs(z,g),v(X,L)};$(he,X=>{g()&&X(ve)})}var ye=d(he,2);{var Y=X=>{var L=wt(),z=Ie(L);je(z,16,()=>ne,le=>le,(le,me)=>{var be=vg();E(()=>{St(be,1,`hmm-dialog-resize hmm-dialog-resize-${me??""}`,"svelte-jby388"),I(be,"data-resize",me)}),ee("pointerdown",be,Ee=>de(Ee,me)),v(le,be)}),v(X,L)};$(ye,X=>{S()&&X(Y)})}_n(Z,X=>u(D,X),()=>t(D)),E(()=>{te=St(Z,1,"hmm-dialog svelte-jby388",null,te,{"hmm-dialog-placed":t(R)!==void 0}),I(Z,"data-testid",x()),I(Z,"aria-label",s()===""?void 0:s()),j=Fn(Z,"",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&&y()!==void 0?`min(${y()}px, calc(100vh - ${Sl}px))`:void 0,"margin-top":t(R)===void 0?A():void 0,"max-height":t(R)===void 0&&A()!==void 0?`calc(100vh - ${A()} - ${Sl/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`}),fe=St(U,1,"hmm-dialog-titlebar svelte-jby388",null,fe,{"hmm-dialog-titlebar-movable":S()}),h(ce,s())}),wr("cancel",Z,ie),wr("close",Z,()=>{n()&&re()}),ee("pointerdown",U,G),v(r,Z),mt()}kt(["pointerdown","click"]);var gg=_('<button type="button" class="hmm-button"> </button>'),bg=_('<p class="hmm-progress-last hmm-mono svelte-1r0w7uc"> </p>'),_g=_('<p class="hmm-progress-line svelte-1r0w7uc"> </p> <progress class="hmm-progress svelte-1r0w7uc"></progress> <!>',1);function jf(r,e){ht(e,!0);let n=B(e,"progress",3,void 0),s=B(e,"title",3,"RPC execution"),a=B(e,"cancelLabel",3,void 0),i=B(e,"oncancel",3,void 0),o=B(e,"testId",3,void 0),l=c(()=>n()!==void 0);yn(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 g=wt(),b=Ie(g);{var k=y=>{var S=gg(),A=m(S,!0);E(()=>h(A,a())),ee("click",S,()=>i()?.()),v(y,S)};$(b,y=>{a()!==void 0&&y(k)})}v(p,g)},children:(p,g)=>{var b=wt(),k=Ie(b);{var y=S=>{var A=_g(),x=Ie(A),D=m(x),C=d(x,2),R=d(C,2);{var P=K=>{var q=bg(),re=m(q);E(()=>h(re,`${n().last.address??""}
9
+ ${n().last.paramset??""}
10
+ ${n().last.ok?"✔":"✕"}`)),v(K,q)};$(R,K=>{n().last&&K(P)})}E(()=>{h(D,`${n().done??""} / ${n().total??""}`),I(C,"max",n().total),rn(C,n().done)}),v(S,A)};$(k,S=>{n()&&S(y)})}v(p,b)},$$slots:{buttons:!0,default:!0}}),mt()}kt(["click"]);var Eg=_('<span class="hmm-tab-badge svelte-126ak3w"> </span>'),yg=_('<button type="button" role="tab"><span> </span> <!></button>'),Sg=_('<div class="hmm-tabs svelte-126ak3w" role="tablist"></div>');function kg(r,e){ht(e,!0);let n=B(e,"active",15,""),s=B(e,"onselect",3,void 0),a=B(e,"label",3,"Tabs"),i=B(e,"testId",3,void 0);function o(p){n(p),s()?.(p)}function l(p,g){if(p.key!=="ArrowLeft"&&p.key!=="ArrowRight")return;p.preventDefault();const b=p.key==="ArrowRight"?1:-1,k=e.tabs[(g+b+e.tabs.length)%e.tabs.length];k&&o(k.id)}var f=Sg();je(f,23,()=>e.tabs,p=>p.id,(p,g,b)=>{var k=yg();let y;var S=w(k),A=m(S,!0),x=d(S,2);{var D=C=>{var R=Eg(),P=m(R);E(()=>h(P,`(${t(g).badge??""})`)),v(C,R)};$(x,C=>{t(g).badge!==void 0&&t(g).badge!==""&&C(D)})}E(()=>{y=St(k,1,"hmm-tab svelte-126ak3w",null,y,{"hmm-tab-active":t(g).id===n()}),I(k,"id",`tab-${t(g).id}`),I(k,"aria-selected",t(g).id===n()),I(k,"aria-controls",`panel-${t(g).id}`),I(k,"tabindex",t(g).id===n()?0:-1),h(A,t(g).label)}),ee("click",k,()=>o(t(g).id)),ee("keydown",k,C=>l(C,t(b))),v(p,k)}),E(()=>{I(f,"aria-label",a()),I(f,"data-testid",i())}),v(r,f),mt()}kt(["click","keydown"]);var wg=_('<button type="button" class="hmm-theme-switch svelte-mls84d"><span aria-hidden="true"> </span></button>');function Ag(r,e){ht(e,!0);let n=B(e,"theme",3,"system"),s=B(e,"labelFor",3,void 0),a=B(e,"onclick",3,void 0),i=B(e,"testId",3,void 0);const o={system:"◐",light:"☀",dark:"☾"},l=c(()=>s()?.(n())??`Theme: ${n()}`);var f=wg(),p=w(f),g=m(p,!0);E(()=>{I(f,"aria-label",t(l)),I(f,"title",t(l)),I(f,"data-testid",i()),h(g,o[n()])}),ee("click",f,()=>a()?.()),v(r,f),mt()}kt(["click"]);const Tg=160,Rg=600;function Wf(r,e){return r.length>e?`${r.slice(0,e-1).trimEnd()}…`:r}function xg(r){const e=(r??"").split(`
11
+ `).map(n=>n.trim()).find(n=>n!=="");return Wf(e??"",Tg)}function Ig(r){const e=r??"",n=e.indexOf(`
12
+ Headers:`);return Wf((n===-1?e:e.slice(0,n)).trim(),Rg)}var Dg=_(': <span data-testid="update-error-reason"> </span>',1),Ng=_('<a class="hmm-update-link svelte-puqwbv" target="_blank" rel="noopener noreferrer" data-testid="update-releases"> </a>'),Cg=_('<span class="hmm-update-text svelte-puqwbv"> <!></span> <!>',1),Pg=_('<span class="hmm-update-text svelte-puqwbv"> </span>'),Mg=_('<button type="button" class="hmm-button" data-testid="update-download"> </button>'),Og=_('<button type="button" class="hmm-button" data-testid="update-install"> </button>'),Lg=_('<div><!> <!> <button type="button" class="hmm-button" data-testid="update-dismiss"> </button></div>');function Fg(r,e){ht(e,!0);let n=B(e,"state",3,void 0),s=B(e,"releasesUrl",3,void 0),a=B(e,"openExternal",3,void 0),i=B(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)?xg(n()?.message):"");var g=wt(),b=Ie(g);{var k=y=>{var S=Lg();let A;var x=w(S);{var D=ae=>{var de=Cg(),G=Ie(de),ne=w(G),ie=d(ne);{var Z=U=>{var fe=Dg(),Te=d(Ie(fe)),ce=m(Te,!0);E(()=>h(ce,t(p))),v(U,fe)};$(ie,U=>{t(p)!==""&&U(Z)})}var te=d(G,2);{var j=U=>{var fe=Ng(),Te=m(fe,!0);E(()=>{I(fe,"href",s()),h(Te,e.labels.releases)}),ee("click",fe,ce=>Lf(ce,s(),a())),v(U,fe)};$(te,U=>{s()&&U(j)})}E(U=>{I(G,"title",U),h(ne,`${t(o)??""}${n().version===void 0?"":` (${n().version})`}`)},[()=>Ig(n().message)||void 0]),v(ae,de)},C=ae=>{var de=Pg(),G=m(de);E(()=>h(G,`${t(o)??""}${n().version===void 0?"":` ${n().version}`}`)),v(ae,de)};$(x,ae=>{t(l)?ae(D):ae(C,-1)})}var R=d(x,2);{var P=ae=>{var de=Mg(),G=m(de,!0);E(()=>{I(de,"title",t(f)?e.labels.downloadInBrowser:void 0),h(G,e.labels.download)}),ee("click",de,()=>e.ondownload()),v(ae,de)},K=ae=>{var de=Og(),G=m(de,!0);E(()=>h(G,e.labels.install)),ee("click",de,()=>e.oninstall()),v(ae,de)};$(R,ae=>{n().phase==="available"?ae(P):n().phase==="downloaded"&&ae(K,1)})}var q=d(R,2),re=m(q,!0);E(()=>{A=St(S,1,"hmm-update svelte-puqwbv",null,A,{"hmm-update-failed":t(l)}),I(S,"role",t(l)?"alert":"status"),I(S,"data-testid",i()),I(S,"data-phase",n().phase),I(S,"data-install",n().install??"app"),h(re,e.labels.dismiss)}),ee("click",q,()=>e.ondismiss()),v(y,S)};$(b,y=>{n()&&t(o)!==""&&y(k)})}v(r,g),mt()}kt(["click"]);const Kf=300,Gg=280,Os=4;function Ug(r,e,n=0){const s=Math.min(Gg,e.width-2*Os),a=Math.max(Os,Math.min(r.left,e.width-s-Os)),i=r.bottom+Os;return n>0&&i+n>e.height-Os&&r.top-Os-n>=Os?{left:a,top:r.top-Os-n}:{left:a,top:i}}var Bg=_('<span class="hmm-tooltip svelte-vstuih" role="tooltip"> </span>');function kl(r,e){ht(e,!0);let n=B(e,"testId",3,void 0),s=N(void 0),a=N(0);const i=c(()=>Ug(e.anchor,{width:window.innerWidth,height:window.innerHeight},t(a)));lt(()=>{e.text,t(s)&&u(a,t(s).offsetHeight,!0)});var o=Bg();let l;var f=m(o,!0);_n(o,p=>u(s,p),()=>t(s)),E((p,g)=>{I(o,"data-testid",n()),l=Fn(o,"",l,{left:p,top:g}),h(f,e.text)},[()=>`${String(t(i).left)}px`,()=>`${String(t(i).top)}px`]),v(r,o),mt()}var Vg=_('<span class="hmm-tooltip-anchor svelte-11extwn"><!> <!></span>');function ni(r,e){ht(e,!0);let n=B(e,"delayMs",3,Kf),s=B(e,"testId",3,void 0),a=N(void 0),i=N(void 0),o;function l(){if(e.text===""||!t(i))return;const{left:A,top:x,bottom:D}=t(i).getBoundingClientRect();u(a,{left:A,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 g(){p(),u(a,void 0)}lt(()=>p);var b=Vg(),k=w(b);Bs(k,()=>e.children);var y=d(k,2);{var S=A=>{kl(A,{get text(){return e.text},get anchor(){return t(a)}})};$(y,A=>{t(a)!==void 0&&e.text!==""&&A(S)})}_n(b,A=>u(i,A),()=>t(i)),E(()=>{I(b,"data-testid",s()),I(b,"data-tooltip",e.text===""?void 0:e.text)}),wr("pointerenter",b,f),wr("pointerleave",b,g),ee("pointerdown",b,g),ee("focusin",b,l),ee("focusout",b,g),ee("keydown",b,A=>{A.key==="Escape"&&g()}),v(r,b),mt()}kt(["pointerdown","focusin","focusout","keydown"]);var Hg=_('<button type="button"><span aria-hidden="true"> </span></button>');function Ct(r,e){ht(e,!0);let n=B(e,"icon",3,"•"),s=B(e,"disabled",3,!1),a=B(e,"reason",3,void 0),i=B(e,"pressed",3,void 0),o=B(e,"busy",3,!1),l=B(e,"onclick",3,void 0),f=B(e,"testId",3,void 0);const p=c(()=>f()===void 0?void 0:`${f()}-tooltip`);{let g=c(()=>s()&&a()!==void 0?`${e.title} — ${a()}`:e.title);ni(r,{get text(){return t(g)},get testId(){return t(p)},children:(b,k)=>{var y=Hg();let S;var A=w(y);let x;var D=m(A,!0);E(()=>{S=St(y,1,"hmm-toolbar-button svelte-cmlgq7",null,S,{"hmm-toolbar-button-pressed":i()===!0}),I(y,"aria-label",e.title),I(y,"aria-pressed",i()),I(y,"aria-busy",o()?"true":void 0),I(y,"data-testid",f()),y.disabled=s()||o(),x=St(A,1,"hmm-toolbar-icon svelte-cmlgq7",null,x,{"hmm-toolbar-icon-busy":o()}),h(D,n())}),ee("click",y,()=>l()?.()),v(b,y)},$$slots:{default:!0}})}mt()}kt(["click"]);const wl=Symbol("homematic-manager.stores");function zg(r){return Zu(wl,r),r}function jt(){if(!Ju(wl))throw new Error("no stores in context - wrap the component in App.svelte or call setStores() in a parent");return Qu(wl)}const Yf=["devices","links","rssi","console","messages","events"],qf="groups",jg=["rooms","functions","metadata"],Ui="devices",vd="#store";function $f(r){return r===vd}function ri(r){return jg.includes(r)}function cc(r){return r===void 0||!r.reachable?[]:r.flat===!0?["rooms","functions"]:["metadata"]}function Wg(r){return Yf.includes(r)||r===qf||ri(r)}function Kg(r){const e=r.replace(/^#/,"").split("/"),n=decodeURIComponent(e[1]??""),s=decodeURIComponent(e[2]??"");return{interfaceName:n,tab:Wg(s)?s:Ui}}function Yg(r,e){return r===""?"":`#/${encodeURIComponent(r)}/${e}`}function qg(r,e={}){switch(r){case"BidCos-Wired":return["devices","links","console","events"];case"CUxD":return["devices","console","events"];case"BidCos-RF":return[...Yf];case"VirtualDevices":return e.heatingGroups===!0?["devices",qf,"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 $g=_('<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),Xg=_('<p data-testid="change-set-empty"> </p>'),Qg=_('<p class="hmm-change-call svelte-1uqsmm6"> </p>'),Zg=_('<tr><td class="hmm-mono svelte-1uqsmm6"> </td><td class="svelte-1uqsmm6"> </td><td class="hmm-change-new svelte-1uqsmm6"> </td></tr>'),Jg=_('<table class="hmm-change-table svelte-1uqsmm6"><tbody></tbody></table>'),eb=_('<p class="hmm-change-error svelte-1uqsmm6"> </p>'),tb=_('<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>'),nb=_('<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),rb=_("<!> <!>",1);function sb(r,e){ht(e,!0);let n=B(e,"open",15,!1);const s=jt(),a=s.i18n.t,i=s.changeSet,o=c(()=>i.count);function l(p){const g=i.outcome(p.id);return g===void 0?void 0:{ok:g.ok,...g.error?{error:g.error}:{}}}async function f(){const p=i.interfaces;await i.apply();for(const g of p)await s.links.load(g);i.empty&&n(!1)}{const p=b=>{var k=$g(),y=Ie(k),S=m(y,!0),A=d(y,2),x=m(A,!0),D=d(A,2),C=m(D,!0);E((R,P,K)=>{h(S,R),A.disabled=i.empty||i.applying,h(x,P),D.disabled=i.empty||i.applying,h(C,K)},[()=>a("Close"),()=>a("Discard all"),()=>a("Apply")]),ee("click",y,()=>n(!1)),ee("click",A,()=>i.clear()),ee("click",D,()=>{f()}),v(b,k)};let g=c(()=>a("Pending changes"));yn(r,{get title(){return t(g)},width:"820px",testId:"change-set-dialog",get open(){return n()},set open(b){n(b)},buttons:p,children:(b,k)=>{var y=rb(),S=Ie(y);{var A=R=>{var P=Xg(),K=m(P,!0);E(q=>h(K,q),[()=>a("Nothing is staged")]),v(R,P)},x=R=>{var P=nb(),K=Ie(P);je(K,21,()=>i.changes,ae=>ae.id,(ae,de)=>{const G=c(()=>l(t(de)));var ne=tb(),ie=w(ne),Z=w(ie),te=m(Z,!0),j=d(Z,2),U=m(j,!0),fe=d(ie,2);je(fe,16,()=>t(de).calls,ge=>ge,(ge,M)=>{var ue=Qg(),he=m(ue,!0);E(()=>h(he,M)),v(ge,ue)});var Te=d(fe,2);{var ce=ge=>{var M=Jg(),ue=w(M);je(ue,21,()=>t(de).lines,he=>he.label,(he,ve)=>{var ye=Zg(),Y=w(ye),X=m(Y,!0),L=d(Y),z=m(L,!0),le=d(L),me=m(le,!0);E(()=>{h(X,t(ve).label),h(z,t(ve).from??""),h(me,t(ve).to??"")}),v(he,ye)}),v(ge,M)};$(Te,ge=>{t(de).lines.length>0&&ge(ce)})}var Re=d(Te,2);{var xe=ge=>{var M=eb(),ue=m(M,!0);E(()=>{I(M,"data-testid",`change-error-${t(de).id}`),h(ue,t(G).error)}),v(ge,M)};$(Re,ge=>{t(G)&&!t(G).ok&&ge(xe)})}E(ge=>{I(ne,"data-testid",`change-${t(de).id}`),h(te,t(de).title),j.disabled=i.applying,I(j,"data-testid",`change-remove-${t(de).id}`),h(U,ge)},[()=>a("Remove")]),ee("click",j,()=>i.remove(t(de).id)),v(ae,ne)});var q=d(K,2),re=m(q,!0);E(ae=>h(re,ae),[()=>a("{count} changes staged",{},t(o))]),v(R,P)};$(S,R=>{i.empty?R(A):R(x,-1)})}var D=d(S,2);{var C=R=>{{let P=c(()=>s.rpcLog.progress??{done:i.applied,total:t(o)}),K=c(()=>a("Cancel"));jf(R,{get progress(){return t(P)},get cancelLabel(){return t(K)},oncancel:()=>{i.cancel()}})}};$(D,R=>{i.applying&&R(C)})}v(b,y)},$$slots:{buttons:!0,default:!0}})}mt()}kt(["click"]);const ab=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 ib(r){const{env:e,cli:n}=ab[r];return`${e} / ${n}`}const uc=Object.freeze(["auto","local","occulite","rega"]),ob={"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(ob));const ds={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"},lb=/\$\{(\w+)\}/gu;function pd(r,e){return r.template.replace(lb,(n,s)=>e(s))}const gd={"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}},db=Object.keys(gd),cb=["BidCos-RF","HmIP-RF","VirtualDevices","BidCos-Wired"];function bd(r){return Object.prototype.hasOwnProperty.call(gd,r)}function ub(r){return bd(r)?gd[r]:void 0}function fb(r){return ub(r)?.installMode!==!1}function hb(r){const e=[];return r.name.trim()===""?e.push({code:"empty-name"}):bd(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 Xf=0;class fc extends Error{address;constructor(e,n){super(`invalid address ${JSON.stringify(e)}: ${n}`),this.name="AddressError",this.address=e}}const mb=/^\d+$/;function as(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===""||!mb.test(s))return;const a=Number.parseInt(s,10);return{address:r,device:n,index:a,channel:r,isDevice:!1,isChannel:!0,isMaintenance:a===Xf}}function vb(r){const e=as(r);if(!e)throw r===""?new fc(r,"empty"):new fc(r,"expected SERIAL or SERIAL:INDEX with a numeric index");return e}function Ls(r){return as(r)?.isDevice===!0}function pb(r){return as(r)?.isChannel===!0}function Js(r){return as(r)?.isMaintenance===!0}function Ra(r){return vb(r).device}function xi(r,e){const n=as(r),s=as(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 Qf(r,e,n,s){const a=e.trim(),i=as(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=as(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 gb(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 zo={VISIBLE:1,INTERNAL:2,DONT_DELETE:8};function Ii(r){const e=typeof r=="number"?r:0,n=(e&zo.VISIBLE)!==0,s=(e&zo.INTERNAL)!==0,a=(e&zo.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 bb={ALWAYS:1,BURST:2,CONFIG:4,WAKEUP:8,LAZY_CONFIG:16};function _b(r){const e=typeof r=="number"?r:0,n=[];for(const[s,a]of Object.entries(bb))(e&a)!==0&&n.push(s);return n}function _d(r){return r.ROAMING===!0||r.ROAMING===1}const Eb=["NONE","SENDER","RECEIVER"];function yb(r){return Eb[r??0]??"NONE"}const Sb=["HM-RCV-50","HMW-RCV-50","HmIP-RCV-50","CENTRAL"];function jo(r){return Sb.includes(r)}function sa(r){return typeof r.PARENT=="string"&&r.PARENT!==""}function si(r,e,n,s){let a="",i=e;if(sa(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 Es(r){return r===void 0||r.trim()===""?[]:r.trim().split(/\s+/)}class kb{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(xi),this.#t.sort(xi);for(const s of this.#s.values())s.sort(xi)}#i(e){const{ADDRESS:n}=e;if(this.#e.set(n,e),sa(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 Es(e.LINK_SOURCE_ROLES))hc(this.#a,s,n);for(const s of Es(e.LINK_TARGET_ROLES))hc(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)=>xi(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||!sa(n)))return this.#e.get(n.PARENT)}maintenanceChannelOf(e){const n=as(e);if(n)return this.#e.get(`${n.device}:${Xf}`)}isCentral(e){const n=this.#e.get(e);if(!n)return!1;if(jo(n.TYPE))return!0;const s=n.PARENT_TYPE??this.parentOf(e)?.TYPE;return s!==void 0&&jo(s)}centralDevices(){return this.devices().filter(e=>jo(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(!sa(s))return si(this.interfaceName,s,n);const a=this.parentOf(e);if(a)return si(this.interfaceName,s,n,a)}}function hc(r,e,n){const s=r.get(e);s?s.push(n):r.set(e,[n])}const Ed=8,wb="SMOKE_DETECTOR",Ab="HmIP-SWSD-Group",Tb=/^\*GROUP_([1-8])$/;function Zf(r){return`GROUP_${String(r)}`}function yd(r){return`*GROUP_${String(r)}`}function Xs(r){return Tb.test(r)}function Jf(r){return r.TYPE===wb&&(r.PARENT??"")!==""}function Rb(r){let e=!1;const n=[];for(let s=1;s<=Ed;s+=1){const a=r[Zf(s)];a!==void 0&&(e=!0,(a===!0||a===1)&&n.push(s))}return e?n:void 0}function xb(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 eh(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 Ib(r){const e=[];for(let n=1;n<=Ed;n+=1){const s=Object.entries(r).filter(([,a])=>a?.includes(n)===!0).map(([a])=>a).sort();s.length>0&&e.push({address:yd(n),kind:"hmip",number:n,members:s})}return e}function Db(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<=Ed;n+=1)if(!e.has(n))return n}function Nb(r){return{ADDRESS:yd(r),TYPE:Ab,PARENT:"",CHILDREN:[],PARAMSETS:[],FLAGS:0}}function Cb(r,e){return{added:e.filter(n=>!r.includes(n)),removed:r.filter(n=>!e.includes(n))}}const Pb="0123456789ABCEFGHJKLMNPQRSTUWXYZ",Mb=26;function ai(r){return r.replace(/[\s-]/g,"").toUpperCase()}function Bi(r){return/^[0-9A-F]{24}$/.test(ai(r))}const Ob=new RegExp(`^[0-7][${Pb}]{${String(Mb-1)}}$`);function mc(r){const e=ai(r);return/^[0-9A-F]{32}$/.test(e)||Ob.test(e)}function Lb(r){const e=ai(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(Bi(e))return{sgtin:e,key:""}}const vc={SENDER_BROKEN:1,RECEIVER_BROKEN:2};function Fb(r){const e=typeof r=="number"?r:0,n=(e&vc.SENDER_BROKEN)!==0,s=(e&vc.RECEIVER_BROKEN)!==0;return{senderBroken:n,receiverBroken:s,broken:n||s,unknownBits:e&-4}}function Gb(r){const e=as(r.SENDER),n=as(r.RECEIVER);return e!==void 0&&n!==void 0&&e.device===n.device}function Al(r){const e=Fb(r.FLAGS);return!e.broken||!Gb(r)?e:{senderBroken:!1,receiverBroken:!1,broken:!1,unknownBits:e.unknownBits}}function th(r){return sa(r)&&!Js(r.ADDRESS)&&Es(r.LINK_SOURCE_ROLES).length>0}function Ub(r){return sa(r)&&!Js(r.ADDRESS)&&Es(r.LINK_TARGET_ROLES).length>0}function Bb(r,e){if(!th(r)||!Ub(e))return[];const n=new Set(Es(e.LINK_TARGET_ROLES));return Es(r.LINK_SOURCE_ROLES).filter(s=>n.has(s))}function Vb(r,e){return r.ADDRESS!==e.ADDRESS&&Bb(r,e).length>0}function nh(r){return r.channels().filter(e=>th(e))}function Sd(r){return typeof r=="object"&&r!==null&&"explicitDouble"in r&&typeof r.explicitDouble=="number"}function pc(r){return typeof r=="number"?r:Sd(r)?r.explicitDouble:void 0}function Hb(r,e){const n=pc(r),s=pc(e);return n!==void 0||s!==void 0?n===s:r===e}const gc={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."}}},bc={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 zb(r){return Object.prototype.hasOwnProperty.call(gc,r)?gc[r]:Object.prototype.hasOwnProperty.call(bc,r)?bc[r]:void 0}function jb(r){return{name:r,params:[],returns:"",help:{}}}new TextDecoder("utf-8",{fatal:!0});const Wb={WRITE:2};function Yr(r){return(r.OPERATIONS&Wb.WRITE)!==0}function Ps(r){if(!r)return;const e=r.VALUE_LIST;return Array.isArray(e)?e:void 0}function rh(r,e){const n=Ps(r)?.indexOf(e)??-1;return n===-1?void 0:n}function Xn(r,e){const n=r[e];if(typeof n=="number")return n;if(typeof n=="string"&&r.TYPE==="ENUM")return rh(r,n)}function Kb(r,e){if(!(typeof e!="number"||!r.SPECIAL))return r.SPECIAL.find(n=>n.VALUE===e)}function Yb(r,e){return Kb(r,e)!==void 0}function kd(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 sh="100%",qb="�C",$b="°C",Xb="°C";function ro(r){const e=r?.UNIT;return e===void 0||e===""||e==='""'?"":e===sh?"%":e===qb||e===$b?Xb:e}function Qb(r){return r?.UNIT===sh}function ah(r){return Qb(r)?100:1}function aa(r,e){if(r!==void 0)return ih(r*ah(e))}function _c(r,e){if(r!==void 0)return ih(r/ah(e))}function ih(r){return Number.isFinite(r)?Number.parseFloat(r.toPrecision(10)):r}const Zb=[.1,1,5,10,60,300,600,3600],Ec=["BASE_100_MS","BASE_1_S","BASE_5_S","BASE_10_S","BASE_1_M","BASE_5_M","BASE_10_M","BASE_1_H"],Jb=31,e_="NOT_USED";function oh(r){return r?.SPECIAL?.find(e=>e.ID===e_)?.VALUE}function wd(r){return Math.round(r*10)/10}const t_={"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},yc="_BASE",n_="_FACTOR",Sc="_UNIT",r_="_VALUE",kc="_TIME";function ho(r){const e=[];for(const[n,s]of Object.entries(r)){const a=i_(r,n,s)??o_(r,n,s);a&&e.push(a)}return e}function Ad(r,e){return s_(r[e.unitParam],r[e.countParam],e)}function s_(r,e,n){const s=a_(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:wd(a.seconds*i),unitIndex:s,unitSeconds:a.seconds,count:i,maximal:s===n.units.length-1&&i===n.maxCount}}function a_(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 lh(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=wd(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 Td(r,e){const n=lh(r,e);if(n)return{[e.unitParam]:n.unitIndex,[e.countParam]:n.count}}function dh(r){const e=r.units.at(-1);return e===void 0?0:wd(e.seconds*r.maxCount)}function i_(r,e,n){if(!e.endsWith(yc))return;const s=e.slice(0,-yc.length),a=`${s}${n_}`,i=r[a];if(!i)return;const o=ch(Ps(n)??Ec,l=>Zb[Ec.indexOf(l)]);if(o)return{name:s.endsWith(kc)?s.slice(0,-kc.length):s,kind:"base-factor",unitParam:e,countParam:a,units:o,maxCount:Xn(i,"MAX")??Jb}}function o_(r,e,n){if(!e.endsWith(Sc))return;const s=e.slice(0,-Sc.length),a=`${s}${r_}`,i=r[a],o=Ps(n);if(!i||!o||o.length===0)return;const l=Xn(i,"MAX"),f=ch(o,p=>t_[p]);if(!(l===void 0||!f))return{name:s,kind:"unit-value",unitParam:e,countParam:a,units:f,maxCount:l}}function ch(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 l_=new Set;function d_(r){return l_.has(r)?"name":"index"}function Tl(r,e,n={}){const s=Sd(r)?r.explicitDouble:r;if(!e)return typeof s=="boolean"||typeof s=="string"?s:String(s);switch(e.TYPE){case"ACTION":case"BOOL":return c_(s);case"FLOAT":{const a=Rd(fh(Number.parseFloat(String(s))),e,n);return n.explicitDouble===!1?a:{explicitDouble:a}}case"ENUM":return u_(s,e,n);case"INTEGER":return uh(s,e,n);case"STRING":return String(s);default:return String(s)}}function c_(r){if(r==="false")return!1;if(typeof r=="string"){const e=Number(r);return Number.isNaN(e)?!0:e!==0}return!!r}function u_(r,e,n){const s=Ps(e);if(!s)return uh(r,e,n);if(typeof r=="string"){const i=rh(e,r);if(i!==void 0)return n.enumAs==="name"?r:i}const a=f_(r);return a===void 0?String(r):n.enumAs==="name"?s[a]??String(r):Rd(a,e,n)}function f_(r){if(typeof r=="boolean")return Number(r);const e=Number.parseInt(String(r),10);return Number.isFinite(e)?e:void 0}function uh(r,e,n){return typeof r=="boolean"?Number(r):Rd(h_(r),e,n)}function h_(r){return fh(Number.parseInt(String(r),10))}function fh(r){return Number.isFinite(r)?r:0}function Rd(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 m_=255;function Wo(r,e,n,s={}){if(!n)return[vr(r,"unknown-parameter",`${r} is not part of this paramset`)];if(s.requireWritable!==!1&&!Yr(n))return[vr(r,"not-writable",`${r} is read-only (OPERATIONS ${n.OPERATIONS})`)];const a=Sd(e)?e.explicitDouble:e;switch(n.TYPE){case"BOOL":case"ACTION":return typeof a=="boolean"?[]:[vr(r,"wrong-type",`${r} expects a boolean, got ${ii(a)}`)];case"INTEGER":return wc(r,a,n,!0);case"FLOAT":return wc(r,a,n,!1);case"ENUM":return v_(r,a,n);case"STRING":return p_(r,a,s);default:return typeof a=="object"?[vr(r,"wrong-type",`${r} expects a scalar, got ${ii(a)}`)]:[]}}function wc(r,e,n,s){return typeof e!="number"?[vr(r,"wrong-type",`${r} expects a number, got ${ii(e)}`)]:Number.isFinite(e)?s&&!Number.isInteger(e)?[vr(r,"wrong-type",`${r} expects a whole number, got ${e}`)]:Yb(n,e)?[]:hh(r,e,n):[vr(r,"not-finite",`${r} is ${e}, which XML-RPC cannot encode`)]}function v_(r,e,n){const s=Ps(n);return typeof e=="string"?s?s.includes(e)?[]:[vr(r,"not-in-value-list",`${r} does not accept ${e}`,s.join(", "))]:[vr(r,"not-in-value-list",`${r} has no VALUE_LIST to resolve ${e} against`)]:typeof e!="number"||!Number.isInteger(e)?[vr(r,"wrong-type",`${r} expects an enum name or index, got ${ii(e)}`)]:s&&(e<0||e>=s.length)?[vr(r,"not-in-value-list",`${r} has no value at index ${e}`,s.length-1)]:hh(r,e,n)}function p_(r,e,n){if(typeof e!="string")return[vr(r,"wrong-type",`${r} expects a string, got ${ii(e)}`)];const s=n.maxStringLength??m_;return e.length>s?[vr(r,"string-too-long",`${r} is longer than ${s} characters`,s)]:[]}function hh(r,e,n){const s=Xn(n,"MIN"),a=Xn(n,"MAX");return s!==void 0&&e<s?[vr(r,"below-min",`${r} is below its minimum of ${s}`,s)]:a!==void 0&&e>a?[vr(r,"above-max",`${r} is above its maximum of ${a}`,a)]:[]}function vr(r,e,n,s){return s===void 0?{param:r,code:e,message:n}:{param:r,code:e,message:n,limit:s}}function ii(r){return r===null?"null":typeof r}function g_(r,e,n,s={}){const a={},i=[],o=[],l=[],f=s.writeAll===!0,p=s.enumAs===void 0?{}:{enumAs:s.enumAs},g=s.maxStringLength===void 0?{}:{maxStringLength:s.maxStringLength};for(const b of b_(e,n,f)){const k=n[b];if(!k){l.push(...Wo(b,e[b],void 0)),o.push({param:b,reason:"unknown-parameter"});continue}const y=Object.prototype.hasOwnProperty.call(e,b);if(!Yr(k)){y&&l.push(...Wo(b,e[b],k)),o.push({param:b,reason:"not-writable"});continue}const S=y?e[b]:r[b]??k.DEFAULT,A=Tl(S,k,p);if(!f&&__(r,b,S,k,p)){o.push({param:b,reason:"unchanged"});continue}const x=Wo(b,A,k,g);if(x.length>0){l.push(...x),o.push({param:b,reason:"invalid"});continue}a[b]=A,i.push(b)}return{values:a,changed:i,skipped:o,problems:l}}function b_(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 __(r,e,n,s,a){if(!Object.prototype.hasOwnProperty.call(r,e))return!1;const i={...a,explicitDouble:!1};return Hb(Tl(r[e],s,i),Tl(n,s,i))}function E_(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 Qa="UI_HINT",cs=0,y_={id:cs,key:"expert",name:{de:"Experte",en:"Expert"},description:{de:"Alle Parameter des Verknuepfungs-Parametersatzes",en:"All link paramset parameters"},params:{}};function S_(r,e){return r!==""?r:"CHANNEL_OPERATION_MODE"in e?"shutter":"blind"}function k_(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 w_(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=S_(l,n)}const i={deviceType:e.deviceType,channel:e.channel,channelMode:a},o=r.find(l=>l.when.every(f=>k_(f,i)));return{...o===void 0?{}:{branch:o},...a===void 0?{}:{channelMode:a}}}function A_(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 T_{#e;constructor(e){this.#e=e}async profilesFor(e,n){const s=await this.#e.receiverTypeAliases(),a=Ac(e,s),o=[...(await this.#e.receiverProfiles(a))?.senders[n]??[]];return o.some(l=>l.id===cs)||o.push(y_),o.sort((l,f)=>l.id-f.id)}async linkMetadataFor(e,n){const s=await this.#e.receiverTypeAliases();return(await this.#e.receiverProfiles(Ac(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 g=I_(p,i?n[f]:void 0);if(g===void 0){l.push({param:f,code:"empty-list",message:`profile ${e.key} offers no value for ${f}`});continue}o[f]=g}return Qa in s&&(o[Qa]=String(e.id)),{values:o,problems:l}}detectProfile(e,n){const s=e[Qa],a=s===void 0||s===""?void 0:n.find(l=>String(l.id)===String(s));if(a&&(a.id===cs||Tc(a,e)!==void 0))return a;let i,o;for(const l of[...n].sort((f,p)=>f.id-p.id)){const f=Tc(l,e);f!==void 0&&R_(f,o)&&(o=f,i=l)}return i??a}async masterFormId(e){return A_(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,g;if(f?.branches&&i){const S=await w_(f.branches,i,n);S.branch&&(p=S.branch.controls),g=S.channelMode}const b=await this.#e.optionPresets(),k=await this.#e.crossValidations(),y=D_(n,o).map(([S,A])=>{const x=b[o?.optionPresets?.[S]??""],D={name:S,description:A,visible:N_(S,o,s)};return x===void 0?D:{...D,preset:x}});return{channelType:e,parameters:y,...p?{controls:p}:{},...l?.internalKey?{internalKey:l.internalKey}:{},...g===void 0?{}:{channelMode:g},problems:k.filter(S=>C_(S,n)).filter(S=>!P_(S,s)).map(S=>({id:S.id,errorKey:S.errorKey,params:mh(S)}))}}}function Ac(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 Tc(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(!x_(o,e[i]))return;n+=1,o.kind==="fixed"&&(s+=1)}return n===0?void 0:{present:n,fixed:s,missing:a}}function R_(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 x_(r,e){switch(r.kind){case"fixed":return so(e,r.value);case"list":return r.values.some(n=>so(e,n));case"range":{const n=Number(e);return e===""||Number.isNaN(n)?!0:n>=r.min&&n<=r.max||n===r.default}}}function I_(r,e){switch(r.kind){case"fixed":return r.value;case"list":return e!==void 0&&r.values.some(n=>so(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 so(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 D_(r,e){const n=kd(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 N_(r,e,n){const s=(e?.conditionalVisibility??[]).filter(a=>a.show.includes(r));return s.length===0?!0:s.some(a=>so(n[a.trigger],a.triggerValue))}function mh(r){return r.rule==="between"?[r.param,r.minParam,r.maxParam]:[r.paramA,r.paramB]}function C_(r,e){return mh(r).every(n=>n in e)}function P_(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 Ko(r,e){return e===void 0?r:{...r,label:e}}function vh(r,e){const n=new Map(ho(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}`,Ko({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}`,Ko(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(",")}`,Ko(l,o.label));break}}return s.length>0?s:void 0}function M_(r,e){return vh(r?.controls,e)}function Rl(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 O_=["CONFIG_PENDING","DUTY_CYCLE","FAULT_REPORTING","LOWBAT","LOW_BAT","SABOTAGE","UNREACH","STICKY_UNREACH","UPDATE_PENDING"],ph="ERROR",L_=["STICKY_UNREACH","SABOTAGE"];function F_(r){return O_.includes(r)||r.startsWith(ph)}function ao(r){return L_.includes(r)||r.startsWith(ph)}function G_(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 U_=[{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 io(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 B_(r){const e={};for(const[n,s]of Object.entries(r)){const a={};for(const[i,o]of Object.entries(s))a[i]=z_(io(o[0]),io(o[1]));e[n]=a}return e}function V_(r){const e=io(r);if(e!==void 0)return U_.find(n=>e>=n.min)}function xa(r){const e=r.DESCRIPTION?.trim()??"";return e===""?r.ADDRESS:e}function Rc(r,e){const n=r.INTERFACE??"";if(n==="")return"";const s=e.find(a=>a.ADDRESS===n);return s?xa(s):n}const xc=["RSSI_DEVICE","RSSI_PEER"];class H_{#e={};#n;constructor(e={}){this.#n=e.centralAddress}get centralAddress(){return this.#n}setCentralAddress(e){this.#n=e}applyRssiInfo(e){this.#e=B_(e)}applyHmipValue(e,n,s){const a=this.#n,i=io(s);return a===void 0||i===void 0||!xc.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 xc){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 z_(r,e){const n={};return r!==void 0&&(n.rx=r),e!==void 0&&(n.tx=e),n}const xl=6,Ic=["switch","marginal","unheard","keep","unmeasured","roaming"];function j_(r,e,n,s={}){const a=Math.max(0,s.marginDb??xl),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),g=p?.tx!==void 0&&f!==void 0?p.tx-f:void 0;let b;o.ROAMING===!0||o.ROAMING===1?b="roaming":p===void 0?b="unmeasured":p.address===l?b="keep":g===void 0?b="unheard":g<=0?b="keep":b=g>=a?"switch":"marginal",i.push({address:o.ADDRESS,configured:l,configuredTx:f,best:p?.address,bestTx:p?.tx,gain:g,verdict:b})}return i.sort((o,l)=>Ic.indexOf(o.verdict)-Ic.indexOf(l.verdict)||(l.gain??Number.NEGATIVE_INFINITY)-(o.gain??Number.NEGATIVE_INFINITY)||o.address.localeCompare(l.address))}const gh=8192;class W_{#e=[];#n;constructor(e=gh){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 K_(r,e){return e.interfaceName!==void 0&&r.interfaceName!==e.interfaceName||!Dc(r.address??"",e.address)||!Dc(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 Y_(r,e){return r.filter(n=>K_(n,e))}function Dc(r,e){return e===void 0||e===""?!0:r.toLowerCase().includes(e.toLowerCase())}const Vi=1,Nc=8,Cc=255,mo=32,Pc=16*1024;class Tt extends Error{code;detail;constructor(e,n,s){super(n??e),this.name="MetaError",this.code=e,this.detail=s}}const Mc=Object.freeze({room:{name:{de:"Räume",en:"Rooms"},tree:[]},function:{name:{de:"Gewerke",en:"Functions"},tree:[]}});function q_(){return{format:Vi,revision:0,objects:{},enums:{room:{name:{...Mc.room?.name},tree:[]},function:{name:{...Mc.function?.name},tree:[]}}}}const $_=/^[a-z0-9][a-z0-9-]*$/,X_=/^[a-z0-9-]+$/;function xd(r){const e=r.indexOf(".");if(!(e<=0||e===r.length-1))return{interfaceName:r.slice(0,e),address:r.slice(e+1)}}function Q_(r,e){return`${r}.${e}`}function Il(r){const e=xd(r);if(!e)throw new Tt("invalid-ref",`${r} is not <interface>.<address>`);return e}function da(r){return r.length<=mo&&$_.test(r)}function Oc(r){if(!da(r))throw new Tt("invalid-id",`${r} is not a valid id`);return r}function Dl(r){return r.length<=mo&&X_.test(r)}function na(r){if(typeof r!="string")throw new Tt("invalid-name","a name has to be a string");const e=r.trim();if(e==="")throw new Tt("invalid-name","a name may not be empty");if(/[\u0000-\u001f\u007f]/.test(e))throw new Tt("invalid-name","a name may not contain control characters");if(bh(e)>Cc)throw new Tt("invalid-name",`a name may not be longer than ${String(Cc)} bytes`);return e}function bh(r){return new TextEncoder().encode(r).length}function _a(r){const e=r.split("/"),n=e[0];if(n===void 0||n===""||!da(n))return;const s=e.slice(1);if(!s.some(a=>!da(a)))return{enumId:n,ids:s}}function Hi(r,e){return`${r}/${e}`}function Z_(r){const e=r.lastIndexOf("/");return e<=0?void 0:r.slice(0,e)}function Fs(r,e){return r===e||r.startsWith(`${e}/`)}function Gs(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 yi(r,e){const n=[],s=(a,i,o,l)=>{for(const f of a){const p=Hi(i,f.id),g=[...l,f.name];n.push({path:p,node:f,depth:o,trail:g}),s(f.children??[],p,o+1,g)}};return s(e.tree,r,1,[]),n}function _h(r,e){return new Set(yi(r,e).map(n=>n.path))}function J_(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 Nl(r){if(J_(r)>Nc)throw new Tt("too-deep",`a tree may not be deeper than ${String(Nc)} levels`)}function Is(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function e1(r){if(!Is(r))throw new Tt("invalid-name","an object has to be an object");const e=na(r.name),n=Cl(r.enums),s=oo(r.meta);return r.orphaned===!0?{name:e,enums:n,meta:s,orphaned:!0}:{name:e,enums:n,meta:s}}function Cl(r){if(r==null)return[];if(!Array.isArray(r))throw new Tt("unknown-path","enums has to be an array of node paths");const e=[];for(const n of r){if(typeof n!="string"||_a(n)===void 0)throw new Tt("unknown-path",`${String(n)} is not a node path`);if(e.includes(n))throw new Tt("duplicate-path",`${n} is listed twice`);e.push(n)}return e}function oo(r){if(r==null)return{};if(!Is(r))throw new Tt("invalid-id","meta has to be an object of namespaces");for(const e of Object.keys(r))if(!da(e))throw new Tt("invalid-id",`${e} is not a valid meta namespace`);if(bh(JSON.stringify(r))>Pc)throw new Tt("invalid-id",`meta may not be larger than ${String(Pc)} bytes`);return r}function t1(r){if(!Is(r))throw new Tt("invalid-id","a node has to be an object");const e=r.id;if(typeof e!="string"||!da(e))throw new Tt("invalid-id",`${String(e)} is not a valid node id`);const n=na(r.name),s=r.icon;if(s!==void 0&&(typeof s!="string"||!Dl(s)))throw new Tt("invalid-id",`${JSON.stringify(s)} is not a valid icon name`);const a=Eh(r.children);return{id:e,name:n,...typeof s=="string"?{icon:s}:{},...a.length>0?{children:a}:{}}}function Eh(r){if(r==null)return[];if(!Array.isArray(r))throw new Tt("invalid-id","children has to be an array of nodes");const e=r.map(s=>t1(s)),n=new Set;for(const s of e){if(n.has(s.id))throw new Tt("duplicate-id",`${s.id} is used twice among its siblings`);n.add(s.id)}return e}function n1(r,e){if(!da(r))throw new Tt("invalid-id",`${r} is not a valid enum id`);if(!Is(e))throw new Tt("invalid-name",`enum ${r} has to be an object`);const n=Pl(e.name),s=Eh(e.tree);return Nl(s),{name:n,tree:s}}function Pl(r){if(!Is(r))throw new Tt("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 Tt("invalid-name",`the ${n} name has to be a string`);e[n]=na(s)}if(e.en===void 0)throw new Tt("invalid-name","an enum needs at least an English name");return e}function Ml(r){if(!Is(r))throw new Tt("format-unsupported","a document has to be an object");const e=r.format;if(e!==Vi)throw new Tt("format-unsupported",`format ${String(e)} is newer than this implementation reads (${String(Vi)})`);const n=r.revision;if(typeof n!="number"||!Number.isInteger(n)||n<0)throw new Tt("format-unsupported","revision has to be an integer of at least 0");const s={},a=r.enums;if(a!=null){if(!Is(a))throw new Tt("unknown-enum","enums has to be an object");for(const[f,p]of Object.entries(a))s[f]=n1(f,p)}const i=yh(s),o={},l=r.objects;if(l!=null){if(!Is(l))throw new Tt("unknown-object","objects has to be an object");for(const[f,p]of Object.entries(l)){Il(f);const g=e1(p);for(const b of g.enums)if(!i.has(b))throw new Tt("unknown-path",`${f}: ${b} does not exist`,{ref:f,path:b});o[f]=g}}return{format:Vi,revision:n,objects:o,enums:s}}function yh(r){const e=new Set;for(const[n,s]of Object.entries(r))for(const a of _h(n,s))e.add(a);return e}function Lc(r,e){return JSON.stringify(Ol(r),void 0,e)}function r1(r,e){return Lc({...r,revision:0})===Lc({...e,revision:0})}function Ol(r){if(Array.isArray(r))return r.map(e=>Ol(e));if(Is(r)){const e={};for(const n of Object.keys(r).sort())e[n]=Ol(r[n]);return e}return r}function Fc(r,e){const n=e.slice(0,-1),s=e[e.length-1],i=(n.length===0?r:Gs(r,n)?.children??[]).findIndex(o=>o.id===s);return i===-1?void 0:i}function Ll(r,e,n,s){if(e.length===0)return a1(r,n,s);const[a,...i]=e;return r.map(o=>o.id===a?{...o,children:Ll(o.children??[],i,n,s)}:o)}function Fl(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=Fl(a.children??[],s);return i.length===0?s1(a):{...a,children:i}})}function s1(r){return{id:r.id,name:r.name,...r.icon===void 0?{}:{icon:r.icon}}}function a1(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 i1=1e3;let o1=class Sh{#e;#n;#t;#s=[];#a;#r;#i;constructor(e={}){const n=e.document??q_();this.#e=n.revision,this.#n=new Map(Object.entries(n.objects)),this.#t=new Map(Object.entries(n.enums)),this.#a=e.eventHistory??i1,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 Tt("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 Tt("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=>Fs(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(Il(e),n.orphaned!==void 0)throw new Tt("forbidden","orphaned is set by the process that owns the addresses");const s=this.#n.get(e),a=n.name===void 0?s?.name:na(n.name);if(a===void 0)throw new Tt("invalid-name",`${e} is new and needs a name`);const i=n.enums===void 0?s?.enums??[]:this.#o(Cl(n.enums)),o=n.meta===void 0?s?.meta??{}:l1(s?.meta??{},n.meta);return this.#l(e,Ba(a,i,o,s?.orphaned===!0))}put(e,n){Il(e);const s=this.#n.get(e),a=na(n.name),i=this.#o(Cl(n.enums)),o=oo(n.meta);return this.#l(e,Ba(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.#m(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=Ba(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(Oc(e),this.#t.has(e))throw new Tt("duplicate-id",`${e} exists`);const s={name:Pl(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:Pl(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([..._h(e,s)]);if(a.refs.length>0&&n!=="detach")throw new Tt("has-members",`${e} still has members`,{refs:[...a.refs]});return this.#t.delete(e),this.#g(a),this.#v([{kind:"enum.deleted",enum:e}])}createNode(e,n,s,a,i={}){const o=this.getEnum(e);Oc(s);const l=na(a);if(i.icon!==void 0&&!Dl(i.icon))throw new Tt("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:Gs(o.tree,p)?.children??[]).some(y=>y.id===s))throw new Tt("duplicate-id",`${Hi(f,s)} exists`);const b={id:s,name:l,...i.icon===void 0?{}:{icon:i.icon}},k=Ll(o.tree,p,b,i.position);return Nl(k),this.#t.set(e,{name:o.name,tree:k}),this.#v([{kind:"node.created",enum:e,path:Hi(f,s),value:b}])}updateNode(e,n){const{enumId:s,ids:a}=this.#c(e),i=this.getEnum(s),o=Gs(i.tree,a);if(!o)throw new Tt("unknown-path",`${e} does not exist`);const l=n.name===void 0?o.name:na(n.name);if(n.icon!==void 0&&!Dl(n.icon))throw new Tt("invalid-id",`${n.icon} is not a valid icon name`);const f=n.icon??o.icon,p=a.slice(0,-1);let g=p,b=[s,...p].join("/");if(n.parent!==void 0){const R=n.parent??s;if(Fs(R,e))throw new Tt("invalid-move",`${e} cannot be moved under itself`);g=this.#u(s,R),b=R}const k=Hi(b,o.id),y=k!==e;if(y&&(g.length===0?i.tree:Gs(i.tree,g)?.children??[]).some(P=>P.id===o.id))throw new Tt("duplicate-id",`${k} exists`);const S={id:o.id,name:l,...f===void 0?{}:{icon:f},...o.children===void 0?{}:{children:o.children}},A=Fl(i.tree,a),x=n.position??(y?void 0:Fc(i.tree,a)),D=Ll(A,g,S,x);if(Nl(D),JSON.stringify(D)===JSON.stringify(i.tree))return{revision:this.#e,changed:!1};this.#t.set(s,{name:i.name,tree:D});const C=[];return y?(this.#h(e,k),C.push({kind:"node.moved",enum:s,from:e,to:k})):n.position!==void 0&&x!==Fc(i.tree,a)?C.push({kind:"node.moved",enum:s,from:e,to:e}):C.push({kind:"node.updated",enum:s,path:e,value:S}),this.#v(C)}deleteNode(e,n="refuse"){const{enumId:s,ids:a}=this.#c(e),i=this.getEnum(s);if(!Gs(i.tree,a))throw new Tt("unknown-path",`${e} does not exist`);const l=this.#f([e]);if(l.refs.length>0&&n!=="detach")throw new Tt("has-members",`${e} still has members`,{refs:[...l.refs]});return this.#t.set(s,{name:i.name,tree:Fl(i.tree,a)}),this.#g(l),this.#v([{kind:"node.deleted",enum:s,path:e}])}import(e,n="replace"){const s=Ml(e),a=this.document(),i=n==="merge"?Ml({format:1,revision:a.revision,objects:{...a.objects,...s.objects},enums:{...a.enums,...s.enums}}):s;return r1(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=yh(this.enums());for(const s of e)if(!n.has(s))throw new Tt("unknown-path",`${s} does not exist`,{path:s});return e}#d(e){const n=_a(e);if(!n)throw new Tt("unknown-path",`${e} is not a node path`);const s=this.getEnum(n.enumId);if(n.ids.length>0&&!Gs(s.tree,n.ids))throw new Tt("unknown-path",`${e} does not exist`)}#c(e){const n=_a(e);if(!n||n.ids.length===0)throw new Tt("unknown-path",`${e} is not a node path`);return{enumId:n.enumId,ids:n.ids}}#u(e,n){const s=_a(n);if(!s||s.enumId!==e)throw new Tt("unknown-path",`${n} is not a path of ${e}`);if(s.ids.length>0&&!Gs(this.getEnum(e).tree,s.ids))throw new Tt("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=>Fs(i,o)))&&n.push(s);return{paths:e,refs:n.sort()}}#g(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=>Fs(i,o)));this.#n.set(n,Ba(s.name,a,s.meta,s.orphaned===!0))}}#h(e,n){for(const[s,a]of this.#n){if(!a.enums.some(o=>Fs(o,e)))continue;const i=a.enums.map(o=>Fs(o,e)?`${n}${o.slice(e.length)}`:o);this.#n.set(s,Ba(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 Sh({document:this.document(),eventHistory:0})}#m(e){const n=e.document();this.#n=new Map(Object.entries(n.objects)),this.#t=new Map(Object.entries(n.enums))}};function Ba(r,e,n,s){return s?{name:r,enums:e,meta:n,orphaned:!0}:{name:r,enums:e,meta:n}}function l1(r,e){const n={...r};for(const[s,a]of Object.entries(oo(e)))a===null?delete n[s]:n[s]=a;return oo(n)}function kh(r,e,n){return e?.name[n]??e?.name.en??r}function Gc(r,e,n={}){const s=new Set;for(const i of e){const o=_a(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 yi(i,o))s.has(l.path)&&!a.includes(l.node.name)&&a.push(l.node.name);return a}function d1(r){const e={};for(const[n,s]of Object.entries(r))e[n]=yi(n,s);return e}function c1(r,e,n={}){return{name:e.name,rooms:Gc(r,e.enums,{...n,enumId:"room"}),functions:Gc(r,e.enums,{...n,enumId:"function"}),paths:e.enums,orphaned:e.orphaned===!0}}const u1=[[/ä/g,"ae"],[/ö/g,"oe"],[/ü/g,"ue"],[/ß/g,"ss"],[/å/g,"a"],[/æ/g,"ae"],[/ø/g,"oe"]];function Uc(r){let e=r.toLowerCase();for(const[n,s]of u1)e=e.replace(n,s);return e=e.normalize("NFKD").replace(/[̀-ͯ]/g,"").replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,mo),da(e)?e:""}function wh(r,e=[]){const n=new Set(e),s=Uc(r)===""?"node":Uc(r);if(!n.has(s))return s;for(let a=2;a<1e3;a+=1){const i=`${s.slice(0,mo-String(a).length-1)}-${String(a)}`;if(!n.has(i))return i}throw new Error(`no free id for ${r}`)}const Ah={"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 f1(r,e){return r==="tr"?"other":e===1?"one":"other"}function Yo(r,e){return r.replace(/\{(\w+)\}/g,(n,s)=>{const a=e[s];return a===void 0?n:String(a)})}const h1=["en","de"];class m1{language;#e;#n;constructor(e,n={}){this.language=e,this.#e=n.catalogue??Ah;const s=n.fallbacks??h1;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 Yo(e,i);const[o,l]=a;if(typeof o=="string")return Yo(o,i);const f=f1(l,s??0);return Yo(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 v1(r,e={}){return new m1(r,e)}class Bc{#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,va(e))??e}deviceModel(e){return this.#n(n=>n.deviceModels,va(e))??e}parameter(e,n){return this.#n(s=>s.parameters,qo(e,n))??e}parameterValue(e,n,s){const a=qo(`${e}|${n}`,s);return a.push(...va(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,va(n))??n}parameterHelp(e,n){return this.#n(s=>s.parameterHelp,qo(e,n))}uiLabel(e){return this.#n(n=>n.uiLabels,Id([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 qo(r,e){const n=r.replace(/^(?:SHORT|LONG)_/i,"");return Id((n===r?[r]:[r,n]).flatMap(a=>{const i=va(a);if(e===void 0||e==="")return i;const o=va(e).map(l=>`${l}|${a}`);return[...o,...o.map(l=>l.toUpperCase()),...i]}))}function va(r){return Id([r,r.toUpperCase()])}function Id(r){return[...new Set(r)]}const p1={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"},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"},"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}"},"{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})"},"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"}},g1={...Ah,...p1},Dd=["de","en"],Gl="en",b1={de:"Deutsch",en:"English",tr:"Türkçe"};function Th(){if(typeof navigator>"u")return[];const r=navigator.languages;return r!==void 0&&r.length>0?r:navigator.language===""?[]:[navigator.language]}function _1(r=Th()){for(const e of r){const n=e.toLowerCase().split("-")[0],s=Dd.find(a=>a===n);if(s!==void 0)return s}return Gl}function E1(r,e=Th()){return(r===void 0||r==="auto"?void 0:Dd.find(s=>s===r))??_1(e)}class y1{#e=N(Gl);#n=c(()=>v1(t(this.#e),{catalogue:g1}));constructor(e=Gl){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 S1=_("<option> </option>"),k1=_('<select class="hmm-select hmm-language svelte-oq8zre"><option> </option><!></select>');function w1(r,e){ht(e,!0);let n=B(e,"language",15,"auto"),s=B(e,"label",3,"Language"),a=B(e,"autoLabel",3,"Browser language"),i=B(e,"onchange",3,void 0),o=B(e,"testId",3,void 0);var l=k1(),f=w(l),p=m(f,!0);f.value=f.__value="auto";var g=d(f);je(g,16,()=>Dd,k=>k,(k,y)=>{var S=S1(),A=m(S,!0),x={};E(()=>{h(A,b1[y]),x!==(x=y)&&(S.value=(S.__value=x)??"")}),v(k,S)});var b;Qt(l),E(()=>{I(l,"aria-label",s()),I(l,"title",s()),I(l,"data-testid",o()),h(p,a()),b!==(b=n())&&(l.value=(l.__value=b)??"",Cn(l,b))}),ee("change",l,k=>{n(k.currentTarget.value),i()?.(n())}),v(r,l),mt()}kt(["change"]);function A1(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 Vc(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 T1=_('<button type="button" class="hmm-multiselect-link svelte-vbwhwd"> </button> <button type="button" class="hmm-multiselect-link svelte-vbwhwd"> </button>',1),R1=_('<span class="hmm-multiselect-check" aria-hidden="true"> </span>'),x1=_('<span class="hmm-multiselect-hint svelte-vbwhwd"> </span>'),I1=_('<span class="hmm-multiselect-description svelte-vbwhwd"> </span>'),D1=_('<span class="hmm-multiselect-lines svelte-vbwhwd"><span class="hmm-multiselect-line svelte-vbwhwd"><span class="hmm-multiselect-label svelte-vbwhwd"> </span> <!></span> <!></span>'),N1=_("<span> </span>"),C1=_('<li><button type="button" role="option" tabindex="-1"><!> <!></button></li>'),P1=_('<li class="hmm-multiselect-empty svelte-vbwhwd">—</li>'),M1=_('<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>'),O1=_('<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 oi(r,e){ht(e,!0);let n=B(e,"selected",31,()=>Be([])),s=B(e,"multiple",3,!0),a=B(e,"placeholder",3,""),i=B(e,"filterLabel",3,"Filter"),o=B(e,"checkAllLabel",3,"Check all"),l=B(e,"uncheckAllLabel",3,"Uncheck all"),f=B(e,"summary",3,void 0),p=B(e,"disabled",3,!1),g=B(e,"label",3,void 0),b=B(e,"onchange",3,void 0),k=B(e,"testId",3,void 0),y=B(e,"inline",3,!1),S=N(!1),A=N(""),x=N(void 0),D=N(void 0),C=N(void 0),R=N(0);const P=`hmm-multiselect-${Math.random().toString(36).slice(2,8)}`,K=c(()=>new Set(n())),q=c(()=>A1(e.options,t(A))),re=c(()=>t(S)&&t(q)[t(R)]?`${P}-${t(R)}`:void 0),ae=c(()=>n().length===0?a():f()?f()(n(),e.options):n().length===1?e.options.find(Y=>Y.value===n()[0])?.label??n()[0]??"":`${n().length}`);function de(Y){n(Y),b()?.(Y)}function G(){const Y=t(q).findIndex(X=>t(K).has(X.value));u(R,Y<0?0:Y,!0),u(S,!0)}function ne(Y){u(S,!1),Y&&t(D)?.focus()}function ie(Y){if(Y.disabled!==!0){if(!s()){de([Y.value]),ne(!0);return}de(t(K).has(Y.value)?n().filter(X=>X!==Y.value):[...n(),Y.value])}}function Z(){de(t(q).filter(Y=>Y.disabled!==!0).map(Y=>Y.value))}function te(){de([])}function j(Y){t(S)&&t(x)&&Y.target instanceof Node&&!t(x).contains(Y.target)&&u(S,!1)}lt(()=>{t(A),u(R,0)}),lt(()=>{if(!t(S)||!t(C))return;const Y=t(C).querySelector(`#${P}-${t(R)}`);typeof Y?.scrollIntoView=="function"&&Y.scrollIntoView({block:"nearest"})});function U(Y){switch(Y.key){case"ArrowDown":Y.preventDefault(),u(R,Vc(t(q),t(R),1),!0);break;case"ArrowUp":Y.preventDefault(),u(R,Vc(t(q),t(R),-1),!0);break;case"Enter":{Y.preventDefault();const X=t(q)[t(R)];X&&ie(X);break}case"Escape":Y.preventDefault(),Y.stopPropagation(),ne(!0);break;case"Tab":ne(!1);break}}function fe(Y){!t(S)&&(Y.key==="ArrowDown"||Y.key==="ArrowUp")&&(Y.preventDefault(),G())}function Te(Y){Y.key==="Escape"&&t(S)&&ne(!0)}function ce(Y){return!!Y.hint||!!Y.description}function Re(Y){Y.focus()}var xe=O1();wr("mousedown",la,j),wr("keydown",la,Te);let ge;var M=w(xe),ue=w(M),he=m(ue,!0);_n(M,Y=>u(D,Y),()=>t(D));var ve=d(M,2);{var ye=Y=>{var X=M1(),L=w(X),z=w(L);fo(()=>An(z,()=>t(A),V=>u(A,V))),Mf(z,V=>Re?.(V));var le=d(z,2);{var me=V=>{var T=T1(),O=Ie(T),J=m(O,!0),_e=d(O,2),Ce=m(_e,!0);E(()=>{h(J,o()),h(Ce,l())}),ee("click",O,Z),ee("click",_e,te),v(V,T)};$(le,V=>{s()&&V(me)})}var be=d(L,2),Ee=w(be);je(Ee,19,()=>t(q),V=>V.value,(V,T,O)=>{var J=C1(),_e=w(J);let Ce;var Fe=w(_e);{var We=H=>{var F=R1(),Ne=m(F,!0);E(Me=>h(Ne,Me),[()=>t(K).has(t(T).value)?"☑":"☐"]),v(H,F)};$(Fe,H=>{s()&&H(We)})}var Ze=d(Fe,2);{var nt=H=>{var F=D1(),Ne=w(F),Me=w(Ne),Ke=m(Me,!0),pe=d(Me,2);{var De=Le=>{var Ye=x1(),Xe=m(Ye,!0);E(()=>h(Xe,t(T).hint)),v(Le,Ye)};$(pe,Le=>{t(T).hint&&Le(De)})}var Pe=d(Ne,2);{var Ge=Le=>{var Ye=I1(),Xe=m(Ye,!0);E(()=>{I(Ye,"title",t(T).description),h(Xe,t(T).description)}),v(Le,Ye)};$(Pe,Le=>{t(T).description&&Le(Ge)})}E(Le=>{I(Ne,"title",Le),h(Ke,t(T).label)},[()=>[t(T).label,t(T).hint].filter(Boolean).join(" ")]),v(H,F)},ke=c(()=>ce(t(T))),we=H=>{var F=N1(),Ne=m(F,!0);E(()=>h(Ne,t(T).label)),v(H,F)};$(Ze,H=>{t(ke)?H(nt):H(we,-1)})}E((H,F,Ne)=>{I(_e,"id",`${P}-${t(O)}`),Ce=St(_e,1,"hmm-multiselect-option svelte-vbwhwd",null,Ce,{"hmm-multiselect-two-lines":H,"hmm-multiselect-selected":F,"hmm-multiselect-highlight":t(O)===t(R)}),I(_e,"aria-selected",Ne),_e.disabled=t(T).disabled===!0},[()=>ce(t(T)),()=>t(K).has(t(T).value),()=>t(K).has(t(T).value)]),ee("mousedown",_e,H=>H.preventDefault()),ee("mousemove",_e,()=>u(R,t(O),!0)),ee("click",_e,()=>ie(t(T))),v(V,J)});var se=d(Ee,2);{var W=V=>{var T=P1();v(V,T)};$(se,V=>{t(q).length===0&&V(W)})}_n(be,V=>u(C,V),()=>t(C)),E(()=>{I(z,"placeholder",i()),I(z,"aria-label",i()),I(z,"aria-controls",`${P}-list`),I(z,"aria-activedescendant",t(re)),I(be,"aria-multiselectable",s()),I(be,"id",`${P}-list`),I(be,"aria-label",g())}),ee("keydown",z,U),v(Y,X)};$(ve,Y=>{t(S)&&Y(ye)})}_n(xe,Y=>u(x,Y),()=>t(x)),E(()=>{ge=St(xe,1,"hmm-multiselect svelte-vbwhwd",null,ge,{"hmm-multiselect-inline":y()}),I(xe,"data-testid",k()),I(M,"aria-expanded",t(S)),I(M,"aria-controls",`${P}-list`),I(M,"aria-label",g()),M.disabled=p(),h(he,t(ae))}),ee("click",M,()=>t(S)?ne(!0):G()),ee("keydown",M,fe),v(r,xe),mt()}kt(["click","keydown","mousedown","mousemove"]);async function Rh(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 xh(r,e,n,s,a){await r.request("rpc.call",e,"suppressServiceMessages",[n,s,a])}function L1(r,e,n){return`suppressServiceMessages(${r}, ${JSON.stringify(e)}, ${n?"true":"false"})`}function li(r,e=""){return/hmip/i.test(r)||/hmip/i.test(e)}function F1(r,e){return[...new Set([...db,...e.map(n=>n.name).filter(n=>n!==""),...r])]}function Ul(r,e,n){return n!==""&&!bd(n)&&r.every((s,a)=>a===e||s.name!==n)}function G1(r,e,n,s,a,i){const o=Ul(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&&Ul(e,n,a)&&!f.includes(a)&&f.splice(p>=0?p:f.length,0,a),{interfaces:f,ticked:l}}function U1(r,e,n){const s=e[n]?.name??"";return Ul(e,n,s)?r.filter(a=>a!==s):[...r]}const B1=[9e5,18e5,36e5,144e5,0],Bl="default";function V1(r,e){const n=B1.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 H1(r,e){return r===void 0||r===e?Bl:String(r)}function z1(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 j1=_('<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),W1=_('<p class="hmm-autoack-question svelte-2iq8s1" data-testid="auto-ack-question-text"> </p> <p class="hmm-autoack-help svelte-2iq8s1"> </p>',1);function K1(r,e){ht(e,!0);let n=B(e,"open",15,!1);const a=jt().i18n.t;function i(o){n(!1),o()}{const o=f=>{var p=j1(),g=Ie(p),b=m(g,!0),k=d(g,2),y=m(k,!0);E((S,A)=>{h(b,S),h(y,A)},[()=>a("Only new ones"),()=>a("Acknowledge existing")]),ee("click",g,()=>i(e.onlynew)),ee("click",k,()=>i(e.onacknowledge)),v(f,p)};let l=c(()=>a("Acknowledge the messages already in the list?"));yn(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 g=W1(),b=Ie(g),k=m(b,!0),y=d(b,2),S=m(y,!0);E((A,x)=>{h(k,A),h(S,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,g)},$$slots:{buttons:!0,default:!0}})}mt()}kt(["click"]);var Y1=_('<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>'),q1=_('<span class="hmm-config-error svelte-1xydm3c" data-testid="config-error"> </span>'),$1=_('<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),X1=_('<small data-testid="config-test-result"> </small>'),Va=_("<option> </option>"),Q1=_('<small class="hmm-config-help svelte-1xydm3c" data-testid="config-callback-lite"> </small>'),Z1=_('<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>'),J1=_('<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>'),eE=_('<button type="button" class="hmm-button" data-testid="config-trust-ca"> </button>'),tE=_('<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>'),nE=_('<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>'),rE=_('<button type="button" class="hmm-button" data-testid="config-pairing-cancel"> </button>'),sE=_('<button type="button" class="hmm-button" data-testid="config-pair"> </button>'),aE=_('<span class="hmm-config-buttons svelte-1xydm3c" data-testid="config-pairing"><!></span>'),iE=_('<span class="hmm-config-code svelte-1xydm3c" data-testid="config-pairing-code"> </span> <small class="hmm-config-help svelte-1xydm3c"> </small>',1),oE=_('<small class="hmm-config-help svelte-1xydm3c" data-testid="config-pairing-requesting"> </small>'),lE=_('<small class="hmm-config-note svelte-1xydm3c" data-testid="config-pairing-done"> </small>'),dE=_('<small class="hmm-config-warning svelte-1xydm3c" data-testid="config-pairing-failed"> </small>'),cE=_('<input type="checkbox" disabled="" data-testid="config-rega"/> <small class="hmm-config-help svelte-1xydm3c"> </small>',1),uE=_('<input type="checkbox" data-testid="config-rega"/> <small class="hmm-config-help svelte-1xydm3c"> </small>',1),fE=_('<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>'),hE=_('<small class="hmm-config-note svelte-1xydm3c" data-testid="config-auto-ack-existing-note"> </small>'),mE=_('<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),vE=_('<select class="hmm-select" data-testid="config-idle"><option> </option><!></select> <small class="hmm-config-help svelte-1xydm3c"> </small>',1),pE=_('<label class="hmm-config-row svelte-1xydm3c"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><!></span></label>'),gE=_('<span class="hmm-config-problem svelte-1xydm3c"> </span>'),bE=_('<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>'),_E=_('<p data-testid="config-host-info" class="svelte-1xydm3c"> <span class="hmm-mono"> </span></p>'),EE=_('<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>'),yE=_("<!> <!>",1);function SE(r,e){ht(e,!0);let n=B(e,"open",15,!1);const s=jt(),a=s.i18n.t;let i=N(void 0),o=N(!1),l=N(!1),f=N(!1),p=N(!1),g=N(!1),b=N(void 0),k=N(""),y=N(!1);const S=c(()=>s.app.config?.connection),A=c(()=>s.app.config?.callbackDefaultPorts),x=c(()=>s.app.config?.callbackPinned);function D(pe){return t(x)?.[pe]===!0}function C(pe){return a("Set at start ({option})",{option:ib(pe)})}const R=c(()=>s.app.config?.idleUnsubscribe);function P(pe){if(pe===0)return a("Never unsubscribe");const{unit:De,count:Pe}=z1(pe);return De==="hours"?a("{count} hours",{},Pe):De==="minutes"?a("{count} minutes",{},Pe):a("{count} seconds",{},Pe)}function K(pe){t(i)&&(pe===Bl?delete t(i).idleUnsubscribeMs:t(i).idleUnsubscribeMs=Number(pe))}const q=c(()=>t(l)||t(i)===void 0||t(S)===void 0||JSON.stringify(Mi(t(i)))!==JSON.stringify(t(S))||t(o)!==(t(S).auth!==void 0));lt(()=>{if(n()&&t(i)===void 0){s.app.saveError="",u(ye,!1),u(Y,!1);const pe=s.app.config?.connection;u(i,pe?structuredClone(Mi(pe)):{host:"",interfaces:[...cb],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:De,interfaces:Pe}=t(i);ae=De.map(Ge=>Pe.includes(Ge.name))}if(!n()){u(i,void 0);const pe=s.app.pairing?.state;(pe==="requesting"||pe==="code")&&s.app.cancelPairing(),u(b,void 0),u(k,""),u(y,!1)}});const re=c(()=>F1(t(i)?.interfaces??[],t(i)?.extraInterfaces??[]).map(pe=>({value:pe,label:pe})));let ae=[];const de=c(()=>s.app.config?.localAddresses??[]);let G;lt(()=>{if(!n()||t(i)===void 0){G=void 0;return}const pe=t(i).host.trim();if(pe===G)return;const Pe=setTimeout(()=>{G=pe,s.app.loadCallbackAddresses(pe)},G===void 0?0:400);return()=>{clearTimeout(Pe)}});const ne=c(()=>s.app.callbackAddresses!==void 0&&s.app.callbackAddresses.host===t(i)?.host.trim()?s.app.callbackAddresses:void 0),ie=c(()=>{if(t(ne)===void 0)return a("Automatic");const{address:pe,reason:De}=t(ne).auto,Pe={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")}[De];return a("Automatic ({address}, {why})",{address:pe,why:Pe})}),Z=c(()=>t(ne)===void 0?t(de).map(pe=>({address:pe,label:pe})):t(ne).addresses.map(pe=>{const De=[...t(ne).hostAddress!==void 0&&!pe.inSubnet?[a("not in the CCU's network")]:[],...pe.linkLocal===!0?[a("link-local")]:[]];return{address:pe.address,label:De.length===0?pe.address:`${pe.address} (${De.join(", ")})`}})),te=c(()=>{const pe=t(i)?.callback.ip??"";if(pe===""||t(ne)===void 0||t(ne).keepsConfigured===!0||D("ip")||t(i)?.local===!0||pe==="127.0.0.1")return"";const De=t(ne).addresses.find(Pe=>Pe.address===pe);return De===void 0?a("The callback address {address} is not an address of this machine; {auto} is used instead",{address:pe,auto:t(ne).auto.address}):t(ne).hostAddress!==void 0&&!De.inSubnet&&pe!==t(ne).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:pe}):""}),j=c(()=>s.app.config?.discovered??[]),U=c(()=>s.app.config?.version??""),fe=c(()=>s.meta.manifest),Te=c(()=>s.host.info),ce=c(()=>t(fe)===void 0?"":`${t(fe).sources.map(pe=>`${pe.name} ${pe.version}`).join(", ")} (${t(fe).generatedAt.slice(0,10)})`),Re=c(()=>t(Te)===void 0?"":`Electron ${t(Te).electron} · Chromium ${t(Te).chrome} · Node ${t(Te).node} · ${t(Te).platform} ${t(Te).arch}`);async function xe(){if(!t(i))return;u(f,!0);const pe=se(),De=await s.app.save(pe,pe.autoAckStickyUnreach===!0&&t(Y)?{acknowledgeExisting:!0}:void 0);De&&t(l)&&(await s.app.clearCaches(),u(l,!1)),u(f,!1),De&&(s.app.setLanguage(pe.language??"auto"),s.i18n.language=s.app.language,n(!1),await s.start())}async function ge(){u(p,!0),await s.app.discover(),u(p,!1)}function M(){if(!t(i))return;const pe={name:"",host:"",port:2001,protocol:"xmlrpc",path:""};t(i).extraInterfaces=[...t(i).extraInterfaces,pe],ae=[...ae,!0]}function ue(pe,De){const Pe=t(i)?.extraInterfaces[pe];if(!t(i)||!Pe||Pe.name===De)return;const Ge=G1(t(i).interfaces,t(i).extraInterfaces,pe,Pe.name,De,ae[pe]??!1);ae[pe]=Ge.ticked,t(i).extraInterfaces[pe]={...Pe,name:De},t(i).interfaces=Ge.interfaces}function he(pe){t(i)&&(t(i).interfaces=U1(t(i).interfaces,t(i).extraInterfaces,pe),t(i).extraInterfaces=t(i).extraInterfaces.filter((De,Pe)=>Pe!==pe),ae=ae.filter((De,Pe)=>Pe!==pe))}const ve=c(()=>s.serviceMessages.messages.filter(pe=>pe.datapoint==="STICKY_UNREACH"&&pe.value!==!1&&!li(pe.interfaceName,s.interfaces.typeOf(pe.interfaceName))).length);let ye=N(!1),Y=N(!1),X;function L(pe){if(!t(i))return;const De=t(i).autoAckStickyUnreach;t(i).autoAckStickyUnreach=pe,u(Y,!1),pe&&t(S)?.autoAckStickyUnreach!==!0&&t(ve)>0&&(X=De,u(ye,!0))}function z(){t(i)&&(X===void 0?delete t(i).autoAckStickyUnreach:t(i).autoAckStickyUnreach=X),u(Y,!1)}const le=c(()=>s.interfaces.rega?.reason==="openccu-lite"&&t(i)!==void 0&&t(i).host.trim()===(t(S)?.host??"").trim()),me=c(()=>{if(t(i)===void 0||t(i).local===!0)return!1;const pe=t(i).host.trim();return pe===""?!1:t(b)!==void 0&&t(k)===pe?t(b).kind==="openccu-lite":s.interfaces.states.some(De=>De.lite===!0)&&pe===(t(S)?.host??"").trim()}),be=c(()=>{if(t(i)===void 0||t(b)===void 0||t(k)!==t(i).host.trim())return"";if(t(b).kind==="unreachable")return t(b).reason==="certificate"&&t(b).certificate!==void 0?a("The certificate of {url} is not trusted ({code}); it can be trusted under Names and rooms",{url:t(b).certificate.url,code:t(b).certificate.code}):a("Nothing answers at {url} ({reason})",{url:t(b).url,reason:t(b).reason??"error"});if(t(b).kind==="ccu")return a("A CCU or OpenCCU at {url}: XML-RPC with callbacks",{url:t(b).url});const pe={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(b).token?.state??"none"]();return`${a("openccu-lite ({implementation}) at {url}: lite-rpc, no callbacks",{implementation:t(b).implementation??"occulited",url:t(b).url})} · ${pe}`}),Ee=c(()=>s.app.pairing);lt(()=>{t(Ee)?.state==="approved"&&t(i)!==void 0&&(t(i).metaToken=t(Ee).token,t(Ee).fingerprint256!==""&&We("certificates",t(Ee).fingerprint256),u(y,!0),s.app.pairing=void 0)});function se(){const pe={...structuredClone(Mi(t(i))),...t(o)&&t(i)?.auth?{auth:{...t(i).auth}}:{}};return t(o)||delete pe.auth,pe}async function W(){if(!t(i))return;u(g,!0);const pe=t(i).host.trim(),De=await s.app.testConnection(se());u(b,De,!0),u(k,pe,!0),u(g,!1)}async function V(){t(i)&&(u(y,!1),await s.app.pair(se()))}function T(pe){t(i)&&(t(i).autoConfirmRegaInbox=pe)}const O={auto:()=>a("Automatic"),local:()=>a("This profile"),occulite:()=>"occulited",rega:()=>"ReGaHSS"},J=c(()=>s.taxonomy.state),_e=c(()=>t(J)===void 0?a("No store connected"):[O[t(J).provider](),t(J).reachable?a("Reachable"):a("Unreachable"),t(J).reachable?t(J).writable?a("Writable"):a("Read-only"):void 0,a("revision {revision}, {count} objects",{revision:t(J).revision,count:t(J).objects}),t(J).implementation,t(J).error].filter(De=>De!==void 0&&De!=="").join(" · ")),Ce=c(()=>t(J)?.certificate??(t(b)!==void 0&&t(k)===(t(i)?.host.trim()??"")?t(b).certificate:void 0)),Fe=c(()=>(t(i)?.systemTrust?.certificates?.length??0)+(t(i)?.systemTrust?.cas?.length??0));function We(pe,De){if(!t(i))return;const Pe=t(i).systemTrust??{},Ge=Pe[pe]??[];Ge.includes(De)||(t(i).systemTrust={...Pe,[pe]:[...Ge,De]})}function Ze(pe,De){return t(i)?.systemTrust?.[pe]?.includes(De)===!0}function nt(){t(i)&&delete t(i).systemTrust}function ke(pe){t(i)&&uc.some(De=>De===pe)&&(t(i).metaProvider=pe)}function we(pe){t(i)&&(t(i).metaToken=pe)}function H(pe){t(i)&&(t(i).language=pe)}function F(pe,De){if(!t(i))return;const Pe=t(i).auth??{user:"",password:""};t(i).auth={...Pe,[pe]:De}}var Ne=yE(),Me=Ie(Ne);{const pe=Pe=>{var Ge=$1(),Le=Ie(Ge),Ye=m(Le,!0),Xe=d(Le,2);{var ze=$e=>{var ft=Y1(),Et=d(w(ft),1,!0);E(it=>h(Et,it),[()=>a("Saving and reconnecting…")]),v($e,ft)};$(Xe,$e=>{t(f)&&$e(ze)})}var Je=d(Xe,2);{var dt=$e=>{var ft=q1(),Et=m(ft);E(it=>h(Et,`${it??""}: ${s.app.saveError??""}`),[()=>a("Error")]),v($e,ft)};$(Je,$e=>{s.app.saveError!==""&&$e(dt)})}var pt=d(Je,2),gt=m(pt,!0),Se=d(pt,2),Oe=m(Se,!0);E(($e,ft,Et,it)=>{Le.disabled=$e,h(Ye,ft),h(gt,Et),Se.disabled=t(f)||!t(q),h(Oe,it)},[()=>t(g)||t(i)===void 0||t(i).host.trim()==="",()=>t(g)?a("Testing…"):a("Test connection"),()=>a("Cancel"),()=>a("Save & Restart")]),ee("click",Le,()=>{W()}),ee("click",pt,()=>n(!1)),ee("click",Se,()=>{xe()}),v(Pe,Ge)};let De=c(()=>a("Settings"));yn(Me,{get title(){return t(De)},width:"960px",testId:"config-dialog",get open(){return n()},set open(Pe){n(Pe)},buttons:pe,children:(Pe,Ge)=>{var Le=wt(),Ye=Ie(Le);{var Xe=ze=>{var Je=EE(),dt=w(Je),pt=w(dt),gt=w(pt),Se=w(gt),Oe=m(Se,!0),$e=d(Se,2),ft=w($e),Et=w(ft),it=m(Et,!0),Wt=d(Et,2),Mt=w(Wt),Ot=d(Mt,2),Zt=m(Ot,!0),bn=d(Ot,2);{var on=qe=>{var ut=X1(),vt=m(ut,!0);E(()=>{St(ut,1,ip(t(b)?.reachable===!1||t(b)?.reason==="certificate"?"hmm-config-warning":"hmm-config-help"),"svelte-1xydm3c"),h(vt,t(be))}),v(qe,ut)};$(bn,qe=>{t(be)!==""&&qe(on)})}var un=d(ft,2),vn=w(un),Pn=m(vn,!0),Jn=d(vn,2),jn=w(Jn),Xt=w(jn),xt=w(Xt),fn=m(xt,!0);xt.value=xt.__value="";var Mn=d(xt);je(Mn,17,()=>t(j),qe=>qe.address,(qe,ut)=>{var vt=Va(),Yt=m(vt),qt={};E(()=>{h(Yt,`${t(ut).address??""} ${t(ut).serial??""??""} ${t(ut).firmware??""??""}`),qt!==(qt=t(ut).address)&&(vt.value=(vt.__value=qt)??"")}),v(qe,vt)});var On=d(Xt,2),Mr=m(On,!0),Xr=d(jn,2),Ln=m(Xr,!0),Wn=d(un,2),_r=w(Wn),xr=m(_r,!0),lr=d(_r,2),Er=w(lr),tr=d(Er,2),yr=m(tr,!0),Qr=d(Wn,2),nr=w(Qr),is=m(nr,!0),oe=d(nr,2),He=w(oe),Gt=d(Qr,2),pn=w(Gt),Sn=m(pn,!0),er=d(pn,2),Or=w(er),ys=d(Gt,2),ct=w(ys),rt=m(ct,!0),st=d(ct,2),Ve=w(st),et=d(gt,2),at=w(et),_t=m(at,!0),Rt=d(at,2);{var Vt=qe=>{var ut=Q1(),vt=m(ut,!0);E(Yt=>h(vt,Yt),[()=>a("None: an openccu-lite system does not call a remote client back; the events come from its stream.")]),v(qe,ut)},Ut=qe=>{var ut=J1(),vt=w(ut),Yt=w(vt),qt=m(Yt,!0),Dt=d(Yt,2),en=w(Dt),Ft=w(en),Nt=m(Ft,!0);Ft.value=Ft.__value="";var tn=d(Ft);je(tn,17,()=>t(Z),wn=>wn.address,(wn,Sr)=>{var Cr=Va(),es=m(Cr,!0),ls={};E(()=>{h(es,t(Sr).label),ls!==(ls=t(Sr).address)&&(Cr.value=(Cr.__value=ls)??"")}),v(wn,Cr)});var nn=d(tn);{var In=wn=>{var Sr=Va(),Cr=m(Sr,!0),es={};E(()=>{h(Cr,t(i).callback.ip),es!==(es=t(i).callback.ip)&&(Sr.value=(Sr.__value=es)??"")}),v(wn,Sr)},fr=c(()=>t(i).callback.ip!==""&&!t(Z).some(wn=>wn.address===t(i)?.callback.ip));$(nn,wn=>{t(fr)&&wn(In)})}Qt(en);var qn=d(en,2),Jr=m(qn,!0),mn=d(qn,2);{var Bn=wn=>{var Sr=Z1(),Cr=w(Sr),es=m(Cr,!0),ls=d(Cr,2),Co=m(ls,!0);E(Po=>{h(es,t(te)),h(Co,Po)},[()=>a("Use automatic")]),ee("click",ls,()=>{t(i)&&(t(i).callback.ip="")}),v(wn,Sr)};$(mn,wn=>{t(te)!==""&&wn(Bn)})}var $n=d(vt,2),En=w($n),ir=m(En,!0),or=d(En,2),Nr=w(or),ks=d(Nr,2),qs=m(ks,!0),$s=d($n,2),fa=w($s),xo=m(fa,!0),Io=d(fa,2),Ga=w(Io),Do=d(Ga,2),No=m(Do,!0);E((wn,Sr,Cr,es,ls,Co,Po,Nm,Cm,Pm)=>{h(qt,wn),en.disabled=Sr,I(en,"title",Cr),h(Nt,t(ie)),h(Jr,es),h(ir,ls),Nr.disabled=Co,h(qs,Po),h(xo,Nm),Ga.disabled=Cm,h(No,Pm)},[()=>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")?C("ip"):a("The address the interface processes call back to"),()=>a("Callback XML-RPC port"),()=>D("xmlrpcPort"),()=>D("xmlrpcPort")?C("xmlrpcPort"):t(A)&&t(A).xmlrpc!==0?a("0 uses port {port}, or a free one when it is taken",{port:String(t(A).xmlrpc)}):a("0 picks a free port"),()=>a("Callback BIN-RPC port"),()=>D("binrpcPort"),()=>D("binrpcPort")?C("binrpcPort"):t(A)&&t(A).binrpc!==0?a("0 uses port {port}, or a free one when it is taken",{port:String(t(A).binrpc)}):a("0 picks a free port")]),br(en,()=>t(i).callback.ip,wn=>t(i).callback.ip=wn),An(Nr,()=>t(i).callback.xmlrpcPort,wn=>t(i).callback.xmlrpcPort=wn),An(Ga,()=>t(i).callback.binrpcPort,wn=>t(i).callback.binrpcPort=wn),v(qe,ut)};$(Rt,qe=>{t(me)?qe(Vt):qe(Ut,-1)})}var ln=d(et,2),Bt=w(ln),hn=m(Bt,!0),Tn=d(Bt,2),gn=w(Tn),Lt=w(gn),It=m(Lt,!0),Qe=d(Lt,2),tt=w(Qe);je(tt,20,()=>uc,qe=>qe,(qe,ut)=>{var vt=Va(),Yt=m(vt,!0),qt={};E(Dt=>{h(Yt,Dt),qt!==(qt=ut)&&(vt.value=(vt.__value=qt)??"")},[()=>O[ut]()]),v(qe,vt)});var bt;Qt(tt);var sn=d(tt,2),Rn=m(sn,!0),dr=d(gn,2);{var Nn=qe=>{var ut=tE(),vt=w(ut),Yt=m(vt,!0),qt=d(vt,2),Dt=w(qt),en=m(Dt,!0),Ft=d(Dt,2),Nt=m(Ft),tn=d(Ft,2),nn=w(tn),In=m(nn,!0),fr=d(nn,2);{var qn=Bn=>{const $n=c(()=>t(Ce).ca);var En=eE(),ir=m(En,!0);E((or,Nr)=>{En.disabled=or,h(ir,Nr)},[()=>Ze("cas",t($n).pem),()=>a("Trust the CA {name}",{name:t($n).subject})]),ee("click",En,()=>We("cas",t($n).pem)),v(Bn,En)};$(fr,Bn=>{t(Ce).ca!==void 0&&Bn(qn)})}var Jr=d(tn,2),mn=m(Jr,!0);E((Bn,$n,En,ir,or,Nr)=>{h(Yt,Bn),h(en,$n),h(Nt,`${En??""}${t(Ce).certificate.altNames===void 0?"":` · ${t(Ce).certificate.altNames}`} \\u00b7 SHA-256
13
+ ${t(Ce).certificate.fingerprint256??""}`),nn.disabled=ir,h(In,or),h(mn,Nr)},[()=>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(Ce).url,code:t(Ce).code}),()=>a("{subject}, issued by {issuer}, valid until {validTo}",{subject:t(Ce).certificate.subject,issuer:t(Ce).certificate.issuer,validTo:t(Ce).certificate.validTo}),()=>Ze("certificates",t(Ce).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.")]),ee("click",nn,()=>We("certificates",t(Ce).certificate.fingerprint256)),v(qe,ut)};$(dr,qe=>{t(Ce)!==void 0&&qe(Nn)})}var Lr=d(dr,2);{var cr=qe=>{var ut=nE(),vt=w(ut),Yt=m(vt,!0),qt=d(vt,2),Dt=w(qt),en=m(Dt,!0),Ft=d(Dt,2),Nt=m(Ft,!0);E((tn,nn,In)=>{h(Yt,tn),h(en,nn),h(Nt,In)},[()=>a("Trusted certificates"),()=>a("{count} certificates or CAs of the system are trusted",{},t(Fe)),()=>a("Forget them")]),ee("click",Ft,nt),v(qe,ut)};$(Lr,qe=>{t(Fe)>0&&qe(cr)})}var Kn=d(Lr,2),Fr=w(Kn),Gr=m(Fr,!0),Zr=d(Fr,2),Ur=w(Zr),os=w(Ur),po=d(os,2);{var go=qe=>{var ut=aE(),vt=w(ut);{var Yt=Dt=>{var en=rE(),Ft=m(en,!0);E(Nt=>h(Ft,Nt),[()=>a("Cancel")]),ee("click",en,()=>{s.app.cancelPairing()}),v(Dt,en)},qt=Dt=>{var en=sE(),Ft=m(en,!0);E((Nt,tn,nn)=>{en.disabled=Nt,I(en,"title",tn),h(Ft,nn)},[()=>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")]),ee("click",en,()=>{V()}),v(Dt,en)};$(vt,Dt=>{t(Ee)?.state==="requesting"||t(Ee)?.state==="code"?Dt(Yt):Dt(qt,-1)})}v(qe,ut)};$(po,qe=>{t(i).local!==!0&&qe(go)})}var Si=d(Ur,2),ki=m(Si,!0),bo=d(Si,2);{var wi=qe=>{var ut=wt(),vt=Ie(ut);{var Yt=Ft=>{var Nt=iE(),tn=Ie(Nt),nn=m(tn,!0),In=d(tn,2),fr=m(In,!0);E(qn=>{h(nn,t(Ee).code),h(fr,qn)},[()=>a("Approve it on the system's Status page: the same code is shown there.")]),v(Ft,Nt)},qt=Ft=>{var Nt=oE(),tn=m(Nt,!0);E(nn=>h(tn,nn),[()=>a("Asking the system…")]),v(Ft,Nt)},Dt=Ft=>{var Nt=lE(),tn=m(Nt,!0);E(nn=>h(tn,nn),[()=>a("Paired: the token is in the field above. Save to connect.")]),v(Ft,Nt)},en=Ft=>{var Nt=dE(),tn=m(Nt,!0);E(()=>h(tn,t(Ee).message)),v(Ft,Nt)};$(vt,Ft=>{t(Ee)?.state==="code"?Ft(Yt):t(Ee)?.state==="requesting"?Ft(qt,1):t(y)?Ft(Dt,2):t(Ee)?.state==="failed"&&Ft(en,3)})}v(qe,ut)};$(bo,qe=>{t(i).local!==!0&&qe(wi)})}var _o=d(pt,2),Oa=w(_o),Ai=w(Oa),Eo=m(Ai,!0),yo=d(Ai,2),Q=w(yo),Ae=w(Q),Ue=m(Ae,!0),ot=d(Ae,2),Kt=w(ot);{let qe=c(()=>a("Interfaces")),ut=c(()=>a("Filter")),vt=c(()=>a("Check all")),Yt=c(()=>a("Uncheck all")),qt=c(()=>a("Select"));oi(Kt,{get options(){return t(re)},get label(){return t(qe)},get filterLabel(){return t(ut)},get checkAllLabel(){return t(vt)},get uncheckAllLabel(){return t(Yt)},summary:Dt=>Dt.join(", "),get placeholder(){return t(qt)},get selected(){return t(i).interfaces},set selected(Dt){t(i).interfaces=Dt}})}var At=d(Kt,2),yt=m(At,!0),xn=d(Q,2),dn=w(xn),rr=m(dn,!0),Yn=d(dn,2),kn=w(Yn),Ht=d(kn,2),an=m(Ht,!0),Jt=d(Oa,2),cn=d(w(Jt),2),Br=w(cn),Ss=w(Br),Vr=m(Ss,!0),Ir=d(Ss,2),Ws=w(Ir);{var La=qe=>{var ut=cE(),vt=Ie(ut);Rr(vt,!1);var Yt=d(vt,2),qt=m(Yt,!0);E(Dt=>h(qt,Dt),[()=>a("Switched off: the system has no ReGaHSS")]),v(qe,ut)},So=qe=>{var ut=uE(),vt=Ie(ut),Yt=d(vt,2),qt=m(Yt,!0);E(Dt=>h(qt,Dt),[()=>a("ReGa supplies the friendly names")]),mr(vt,()=>t(i).rega,Dt=>t(i).rega=Dt),v(qe,ut)};$(Ws,qe=>{t(le)?qe(La):qe(So,-1)})}var ko=d(Br,2);{var wo=qe=>{var ut=fE(),vt=w(ut),Yt=m(vt,!0),qt=d(vt,2),Dt=w(qt),en=d(Dt,2),Ft=m(en,!0);E((Nt,tn)=>{h(Yt,Nt),Dt.disabled=!t(i).rega,Rr(Dt,t(i).autoConfirmRegaInbox===!0),h(Ft,tn)},[()=>a("Confirm the ReGa inbox automatically"),()=>a("Only possible with ReGa")]),ee("change",Dt,Nt=>T(Nt.currentTarget.checked)),v(qe,ut)};$(ko,qe=>{t(le)||qe(wo)})}var Ao=d(Jt,2),sr=w(Ao),Dr=m(sr,!0),ar=d(sr,2),Ks=w(ar),ca=w(Ks),Fa=m(ca,!0),Ys=d(ca,2),To=w(Ys);{let qe=c(()=>t(i).language??"auto"),ut=c(()=>a("Language")),vt=c(()=>a("Browser language"));w1(To,{get language(){return t(qe)},get label(){return t(ut)},get autoLabel(){return t(vt)},testId:"config-language",onchange:H})}var ur=d(Ks,2),ua=w(ur),am=m(ua,!0),im=d(ua,2),Cd=w(im),om=d(Cd,2),lm=m(om,!0),Pd=d(ur,2),Md=w(Pd),dm=m(Md,!0),cm=d(Md,2),Ro=w(cm),Od=d(Ro,2),um=m(Od,!0),fm=d(Od,2);{var hm=qe=>{var ut=hE(),vt=m(ut,!0);E(Yt=>h(vt,Yt),[()=>a("{count} messages in the list are acknowledged when this is saved",{},t(ve))]),v(qe,ut)};$(fm,qe=>{t(Y)&&t(i).autoAckStickyUnreach===!0&&qe(hm)})}var Ld=d(Pd,2);{var mm=qe=>{var ut=pE(),vt=w(ut),Yt=m(vt,!0),qt=d(vt,2),Dt=w(qt);{var en=Nt=>{var tn=mE(),nn=Ie(tn),In=w(nn),fr=m(In,!0),qn={},Jr=d(nn,2),mn=m(Jr,!0);E((Bn,$n,En)=>{h(fr,Bn),qn!==(qn=$n)&&(In.__value=qn),h(mn,En)},[()=>P(t(R).pinnedMs),()=>P(t(R).pinnedMs),()=>a("Set at start ({option})",{option:"HMM_IDLE_UNSUBSCRIBE / --idle-unsubscribe"})]),v(Nt,tn)},Ft=Nt=>{var tn=vE(),nn=Ie(tn),In=w(nn),fr=m(In,!0),qn={},Jr=d(In);je(Jr,16,()=>V1(t(R).defaultMs,t(i).idleUnsubscribeMs),En=>En,(En,ir)=>{var or=Va(),Nr=m(or,!0),ks={};E((qs,$s)=>{h(Nr,qs),ks!==(ks=$s)&&(or.value=(or.__value=ks)??"")},[()=>P(ir),()=>String(ir)]),v(En,or)});var mn;Qt(nn);var Bn=d(nn,2),$n=m(Bn,!0);E((En,ir,or)=>{h(fr,En),qn!==(qn=Bl)&&(In.value=(In.__value=qn)??""),mn!==(mn=ir)&&(nn.value=(nn.__value=mn)??"",Cn(nn,mn)),h($n,or)},[()=>a("Default ({time})",{time:P(t(R).defaultMs)}),()=>H1(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")]),ee("change",nn,En=>K(En.currentTarget.value)),v(Nt,tn)};$(Dt,Nt=>{t(R).pinnedMs!==void 0?Nt(en):Nt(Ft,-1)})}E(Nt=>h(Yt,Nt),[()=>a("Unsubscribe when idle")]),v(qe,ut)};$(Ld,qe=>{t(R)!==void 0&&qe(mm)})}var Fd=d(Ld,2),Gd=w(Fd),vm=m(Gd,!0),pm=d(Gd,2),Ud=w(pm),gm=d(Ud,2),bm=m(gm,!0),_m=d(Fd,2),Bd=w(_m),Em=m(Bd,!0),ym=d(Bd,2),Vd=w(ym),Sm=d(Vd,2),km=m(Sm,!0),Hd=d(dt,2),zd=w(Hd),wm=m(zd,!0),jd=d(zd,2);je(jd,17,()=>t(i).extraInterfaces,eo,(qe,ut,vt)=>{const Yt=c(()=>hb(t(ut)));var qt=bE(),Dt=w(qt),en=d(Dt,2),Ft=d(en,2),Nt=d(Ft,2),tn=w(Nt);tn.value=tn.__value="xmlrpc";var nn=d(tn);nn.value=nn.__value="binrpc",Qt(Nt);var In=d(Nt,2),fr=d(In,2),qn=d(fr,2);{var Jr=mn=>{var Bn=gE(),$n=m(Bn,!0);E((En,ir)=>{I(Bn,"data-testid",En),h($n,ir)},[()=>`config-extra-problem-${String(vt)}`,()=>t(Yt).join(", ")]),v(mn,Bn)};$(qn,mn=>{t(Yt).length>0&&mn(Jr)})}E((mn,Bn,$n,En,ir,or,Nr,ks,qs,$s,fa)=>{I(qt,"data-testid",mn),I(Dt,"placeholder",Bn),I(Dt,"aria-label",$n),rn(Dt,t(ut).name),I(en,"placeholder",En),I(en,"aria-label",ir),I(Ft,"placeholder",or),I(Ft,"aria-label",Nr),I(Nt,"aria-label",ks),I(In,"placeholder",qs),I(In,"aria-label",$s),I(fr,"aria-label",fa)},[()=>`config-extra-${String(vt)}`,()=>a("Name"),()=>`${a("Name")} ${String(vt)}`,()=>a("Host"),()=>`${a("Host")} ${String(vt)}`,()=>a("Port"),()=>`${a("Port")} ${String(vt)}`,()=>`${a("Protocol")} ${String(vt)}`,()=>a("Path"),()=>`${a("Path")} ${String(vt)}`,()=>`${a("Remove")} ${String(vt)}`]),ee("input",Dt,mn=>ue(vt,mn.currentTarget.value)),An(en,()=>t(ut).host,mn=>t(ut).host=mn),An(Ft,()=>t(ut).port,mn=>t(ut).port=mn),br(Nt,()=>t(ut).protocol,mn=>t(ut).protocol=mn),An(In,()=>t(ut).path,mn=>t(ut).path=mn),ee("click",fr,()=>he(vt)),v(qe,qt)});var Wd=d(jd,2),Am=m(Wd,!0),Tm=d(Hd,2),Kd=w(Tm),Yd=w(Kd),Rm=d(Yd);{var xm=qe=>{var ut=Zn();E(vt=>h(ut,`· ${vt??""}: ${t(ce)??""}`),[()=>a("Device data")]),v(qe,ut)};$(Rm,qe=>{t(ce)!==""&&qe(xm)})}var Im=d(Kd,2);{var Dm=qe=>{var ut=_E(),vt=w(ut),Yt=d(vt),qt=m(Yt,!0);E(()=>{h(vt,`${t(Re)??""} · `),h(qt,t(Te)?.logFile??"")}),v(qe,ut)};$(Im,qe=>{t(Re)!==""&&qe(Dm)})}E((qe,ut,vt,Yt,qt,Dt,en,Ft,Nt,tn,nn,In,fr,qn,Jr,mn,Bn,$n,En,ir,or,Nr,ks,qs,$s,fa,xo,Io,Ga,Do,No,wn,Sr,Cr,es,ls)=>{h(Oe,qe),h(it,ut),h(Zt,vt),h(Pn,Yt),I(Xt,"aria-label",qt),Xt.disabled=t(j).length===0,h(fn,Dt),On.disabled=t(p),h(Mr,en),h(Ln,Ft),h(xr,Nt),h(yr,tn),h(is,nn),h(Sn,In),Or.disabled=!t(o),rn(Or,t(i).auth?.user??""),h(rt,fr),Ve.disabled=!t(o),rn(Ve,t(i).auth?.password??""),h(_t,qn),h(hn,Jr),h(It,mn),bt!==(bt=t(i).metaProvider??"auto")&&(tt.value=(tt.__value=bt)??"",Cn(tt,bt)),h(Rn,t(_e)),h(Gr,Bn),rn(os,t(i).metaToken??""),h(ki,$n),h(Eo,En),h(Ue,ir),h(yt,or),h(rr,Nr),h(an,ks),h(Vr,qs),h(Dr,$s),h(Fa,fa),h(am,xo),h(lm,Io),h(dm,Ga),Rr(Ro,t(i).autoAckStickyUnreach===!0),h(um,Do),h(vm,No),h(bm,wn),h(Em,Sr),h(km,Cr),h(wm,es),h(Am,ls),h(Yd,`Homematic Manager ${t(U)??""} `)},[()=>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(me)?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")]),An(Mt,()=>t(i).host,qe=>t(i).host=qe),ee("change",Xt,qe=>{t(i)&&qe.currentTarget.value!==""&&(t(i).host=qe.currentTarget.value)}),ee("click",On,()=>{ge()}),mr(Er,()=>t(i).tls,qe=>t(i).tls=qe),mr(He,()=>t(o),qe=>u(o,qe)),ee("input",Or,qe=>F("user",qe.currentTarget.value)),ee("input",Ve,qe=>F("password",qe.currentTarget.value)),ee("change",tt,qe=>ke(qe.currentTarget.value)),ee("input",os,qe=>we(qe.currentTarget.value)),mr(kn,()=>t(i).autoDetect,qe=>t(i).autoDetect=qe),An(Cd,()=>t(i).writePaceMs,qe=>t(i).writePaceMs=qe),ee("change",Ro,qe=>L(qe.currentTarget.checked)),An(Ud,()=>t(i).rpcLogFolder,qe=>t(i).rpcLogFolder=qe),mr(Vd,()=>t(l),qe=>u(l,qe)),ee("click",Wd,M),v(ze,Je)};$(Ye,ze=>{t(i)&&ze(Xe)})}v(Pe,Le)},$$slots:{buttons:!0,default:!0}})}var Ke=d(Me,2);K1(Ke,{get count(){return t(ve)},onacknowledge:()=>u(Y,!0),onlynew:()=>u(Y,!1),oncancel:z,get open(){return t(ye)},set open(pe){u(ye,pe,!0)}}),v(r,Ne),mt()}kt(["click","change","input"]);var kE=_('<div class="hmm-toolbar-trailing svelte-1ld6r3r"><!></div>'),wE=_('<div class="hmm-toolbar svelte-1ld6r3r" role="toolbar"><div class="hmm-toolbar-group svelte-1ld6r3r"><!></div> <!></div>');function AE(r,e){let n=B(e,"label",3,"Toolbar"),s=B(e,"children",3,void 0),a=B(e,"trailing",3,void 0),i=B(e,"testId",3,void 0);var o=wE(),l=w(o),f=w(l);{var p=k=>{var y=wt(),S=Ie(y);Bs(S,s),v(k,y)};$(f,k=>{s()&&k(p)})}var g=d(l,2);{var b=k=>{var y=kE(),S=w(y);Bs(S,a),v(k,y)};$(g,k=>{a()&&k(b)})}E(()=>{I(o,"aria-label",n()),I(o,"data-testid",i())}),v(r,o)}const TE=["address","device_address","channel_address","interface_address","team_address"];function RE(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 xE(r){return TE.includes(r.type)}function $o(r){return(zb(r)??jb(r)).params.map(n=>({name:n.name,type:n.type,kind:RE(n),optional:n.optional??[],...n.values?{options:n.values}:{},...n.bitmask?{options:n.bitmask}:{}}))}function Vl(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 Hc(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 Ha(r){return typeof r=="object"?JSON.stringify(r):String(r)}function IE(r,e){switch(r.kind){case"bool":return e===!0||e==="true";case"number":case"flags":return typeof e=="number"?e:Number.parseInt(Ha(e),10)||0;case"struct":{const n={};for(const s of Array.isArray(e)?e:[])s.key!==""&&(n[s.key]=Hc(s));return n}case"variant":{const n=e;return Hc({type:n.type,value:n.value})}case"json":return NE(Ha(e));case"select":return/^-?\d+$/.test(Ha(e))?Number(e):Ha(e);default:return Ha(e)}}function DE(r,e){return r.map((n,s)=>IE(n,e[s]??Vl(n)))}function NE(r){if(r.trim()==="")return[];try{return JSON.parse(r)}catch{return[]}}function CE(r){if(r.trim()==="")return!0;try{return JSON.parse(r),!0}catch{return!1}}var PE=_("<span> </span>"),ME=_("<!> <!>",1),zc=_("<option> </option>"),OE=_('<p class="hmm-console-hint svelte-17kjuug"> </p>'),LE=_('<input type="checkbox"/>'),FE=_('<input class="hmm-input" type="number"/>'),GE=_('<select class="hmm-select"></select>'),UE=_('<label><input type="checkbox"/> <span> </span></label>'),BE=_('<div class="hmm-console-flags svelte-17kjuug"><!> <span class="hmm-console-arg-type svelte-17kjuug"> </span></div>'),VE=_('<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>'),HE=_('<div class="hmm-console-struct svelte-17kjuug"><!> <button type="button" class="hmm-button">+</button></div>'),zE=_('<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>'),jE=_("<textarea></textarea>"),WE=_('<input class="hmm-input"/>'),KE=_('<span class="hmm-console-arg-type svelte-17kjuug"> </span>'),YE=_('<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>'),qE=_("<option></option>"),$E=_('<span class="hmm-console-error svelte-17kjuug" data-testid="console-error"> </span>'),XE=_('<section class="hmm-console-help svelte-17kjuug" data-testid="console-help-section"><h3 class="svelte-17kjuug"> </h3> <p data-testid="console-help"> </p></section>'),QE=_('<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 ZE(r,e){ht(e,!0);const n=jt(),s=n.i18n.t;let a=N(""),i=N(Be([])),o=N(void 0);const l=c(()=>n.app.selectedInterface),f=c(()=>n.console.of(t(l))),p=c(()=>t(a)===""?[]:$o(t(a))),g=c(()=>n.console.method(t(l),t(a))),b=c(()=>n.devices.index(t(l))?.all().map(se=>se.ADDRESS)??[]),k=c(()=>DE(t(p),t(i)));lt(()=>{n.console.load(t(l))}),lt(()=>{const se=n.console.takeRecall(t(l));se!==void 0&&re(se)});function y(se){u(a,se,!0),u(i,$o(se).map(W=>Vl(W)),!0),u(o,void 0)}function S(se,W){u(i,t(i).map((V,T)=>T===se?W:V),!0)}function A(se){const W=t(i)[se];return Array.isArray(W)?W:[]}function x(se){const W=t(i)[se];return typeof W=="object"&&!Array.isArray(W)?W:{type:"string",value:""}}function D(se){S(se,[...A(se),{key:"",type:"string",value:""}])}function C(se,W,V){S(se,A(se).map((T,O)=>O===W?{...T,...V}:T))}function R(se,W){S(se,A(se).filter((V,T)=>T!==W))}function P(se,W,V){const T=typeof t(i)[se]=="number"?t(i)[se]:0;S(se,V?T|W:T&~W)}async function K(){t(a)!==""&&u(o,await n.console.call(t(l),t(a),t(k)),!0)}function q(se){return typeof se=="object"&&se!==null&&!Array.isArray(se)}function re(se){u(a,se.method,!0);const W=$o(se.method);u(i,W.map((V,T)=>{const O=se.params[T];return V.kind==="struct"&&q(O)?Object.entries(O).map(([J,_e])=>({key:J,type:typeof _e=="boolean"?"bool":typeof _e=="number"?"double":"string",value:String(_e)})):V.kind==="json"?JSON.stringify(O??[]):V.kind==="bool"?O===!0:V.kind==="number"||V.kind==="flags"?typeof O=="number"?O:0:O===void 0?Vl(V):String(O)}),!0),u(o,void 0)}var ae=QE(),de=w(ae);{const se=V=>{var T=PE(),O=m(T);E(J=>h(O,`${t(f).length??""} ${J??""}`),[()=>s("Method")]),v(V,T)};let W=c(()=>s("RPC Console"));AE(de,{get label(){return t(W)},trailing:se,children:(V,T)=>{var O=ME(),J=Ie(O);{let Ce=c(()=>s("Send request")),Fe=c(()=>t(a)===""||n.console.running),We=c(()=>s("Please select method"));Ct(J,{get title(){return t(Ce)},icon:"▸",get disabled(){return t(Fe)},get reason(){return t(We)},testId:"console-send",onclick:()=>{K()}})}var _e=d(J,2);{let Ce=c(()=>s("Clear"));Ct(_e,{get title(){return t(Ce)},icon:"⌫",testId:"console-clear",onclick:()=>{u(o,void 0)}})}v(V,O)},$$slots:{trailing:!0,default:!0}})}var G=d(de,2),ne=w(G),ie=w(ne),Z=m(ie,!0);ie.value=ie.__value="";var te=d(ie);je(te,17,()=>t(f),se=>se.name,(se,W)=>{var V=zc(),T=m(V,!0),O={};E(()=>{h(T,t(W).name),O!==(O=t(W).name)&&(V.value=(V.__value=O)??"")}),v(se,V)});var j;Qt(ne);var U=d(ne,2),fe=m(U),Te=d(U,2),ce=m(Te,!0),Re=d(G,2),xe=w(Re),ge=w(xe),M=m(ge,!0),ue=d(ge,2);{var he=se=>{var W=OE(),V=m(W,!0);E(T=>h(V,T),[()=>t(a)===""?s("Please select method"):s("No data")]),v(se,W)};$(ue,se=>{t(p).length===0&&se(he)})}var ve=d(ue,2);je(ve,19,()=>t(p),se=>se.name,(se,W,V)=>{var T=YE(),O=w(T),J=w(O),_e=d(J),Ce=m(_e,!0),Fe=d(O,2);{var We=pe=>{var De=LE();E(()=>{I(De,"id",`arg-input-${t(W).name}`),Rr(De,t(i)[t(V)]===!0)}),ee("change",De,Pe=>S(t(V),Pe.currentTarget.checked)),v(pe,De)},Ze=pe=>{var De=FE();E(Pe=>{I(De,"id",`arg-input-${t(W).name}`),rn(De,Pe)},[()=>String(t(i)[t(V)]??0)]),ee("input",De,Pe=>S(t(V),Number(Pe.currentTarget.value))),v(pe,De)},nt=pe=>{var De=GE();je(De,21,()=>Object.entries(t(W).options??{}),([Ge,Le])=>Ge,(Ge,Le)=>{var Ye=c(()=>$d(t(Le),2));let Xe=()=>t(Ye)[0],ze=()=>t(Ye)[1];var Je=zc(),dt=m(Je),pt={};E(()=>{h(dt,`${ze()??""} (${Xe()??""})`),pt!==(pt=Xe())&&(Je.value=(Je.__value=pt)??"")}),v(Ge,Je)});var Pe;Qt(De),E(Ge=>{I(De,"id",`arg-input-${t(W).name}`),Pe!==(Pe=Ge)&&(De.value=(De.__value=Pe)??"",Cn(De,Pe))},[()=>String(t(i)[t(V)]??"")]),ee("change",De,Ge=>S(t(V),Ge.currentTarget.value)),v(pe,De)},ke=pe=>{var De=BE(),Pe=w(De);je(Pe,17,()=>Object.entries(t(W).options??{}),([Ye,Xe])=>Ye,(Ye,Xe)=>{var ze=c(()=>$d(t(Xe),2));let Je=()=>t(ze)[0],dt=()=>t(ze)[1];var pt=UE(),gt=w(pt),Se=d(gt,2),Oe=m(Se,!0);E($e=>{Rr(gt,$e),h(Oe,dt())},[()=>(t(i)[t(V)]&Number(Je()))!==0]),ee("change",gt,$e=>P(t(V),Number(Je()),$e.currentTarget.checked)),v(Ye,pt)});var Ge=d(Pe,2),Le=m(Ge);E(Ye=>h(Le,`= ${Ye??""}`),[()=>String(t(i)[t(V)]??0)]),v(pe,De)},we=pe=>{var De=HE(),Pe=w(De);je(Pe,17,()=>A(t(V)),eo,(Le,Ye,Xe)=>{var ze=VE(),Je=w(ze),dt=d(Je,2),pt=w(dt);pt.value=pt.__value="string";var gt=d(pt);gt.value=gt.__value="integer";var Se=d(gt);Se.value=Se.__value="double";var Oe=d(Se);Oe.value=Oe.__value="bool";var $e;Qt(dt);var ft=d(dt,2),Et=d(ft,2);E((it,Wt,Mt,Ot)=>{I(Je,"aria-label",it),rn(Je,t(Ye).key),I(dt,"aria-label",Wt),$e!==($e=t(Ye).type)&&(dt.value=(dt.__value=$e)??"",Cn(dt,$e)),I(ft,"aria-label",Mt),rn(ft,t(Ye).value),I(Et,"aria-label",Ot)},[()=>`${t(W).name} ${String(Xe)} key`,()=>`${t(W).name} ${String(Xe)} type`,()=>`${t(W).name} ${String(Xe)} value`,()=>`${t(W).name} ${String(Xe)} remove`]),ee("input",Je,it=>C(t(V),Xe,{key:it.currentTarget.value})),ee("change",dt,it=>C(t(V),Xe,{type:it.currentTarget.value})),ee("input",ft,it=>C(t(V),Xe,{value:it.currentTarget.value})),ee("click",Et,()=>R(t(V),Xe)),v(Le,ze)});var Ge=d(Pe,2);E(()=>I(Ge,"data-testid",`arg-${t(W).name}-add`)),ee("click",Ge,()=>D(t(V))),v(pe,De)},H=pe=>{var De=zE(),Pe=w(De),Ge=w(Pe);Ge.value=Ge.__value="string";var Le=d(Ge);Le.value=Le.__value="integer";var Ye=d(Le);Ye.value=Ye.__value="double";var Xe=d(Ye);Xe.value=Xe.__value="bool";var ze;Qt(Pe);var Je=d(Pe,2);E((dt,pt)=>{I(Pe,"aria-label",`${t(W).name} type`),ze!==(ze=dt)&&(Pe.value=(Pe.__value=ze)??"",Cn(Pe,ze)),I(Je,"id",`arg-input-${t(W).name}`),rn(Je,pt)},[()=>x(t(V)).type,()=>x(t(V)).value]),ee("change",Pe,dt=>S(t(V),{...x(t(V)),type:dt.currentTarget.value})),ee("input",Je,dt=>S(t(V),{...x(t(V)),value:dt.currentTarget.value})),v(pe,De)},F=pe=>{var De=jE();let Pe;E((Ge,Le)=>{I(De,"id",`arg-input-${t(W).name}`),Pe=St(De,1,"hmm-input hmm-console-json svelte-17kjuug",null,Pe,{"hmm-console-invalid":Ge}),rn(De,Le)},[()=>!CE(String(t(i)[t(V)]??"")),()=>String(t(i)[t(V)]??"")]),ee("input",De,Ge=>S(t(V),Ge.currentTarget.value)),v(pe,De)},Ne=pe=>{var De=WE();E((Pe,Ge)=>{I(De,"id",`arg-input-${t(W).name}`),I(De,"list",Pe),rn(De,Ge)},[()=>xE(t(W))?"hmm-console-addresses":void 0,()=>String(t(i)[t(V)]??"")]),ee("input",De,Pe=>S(t(V),Pe.currentTarget.value)),v(pe,De)};$(Fe,pe=>{t(W).kind==="bool"?pe(We):t(W).kind==="number"?pe(Ze,1):t(W).kind==="select"?pe(nt,2):t(W).kind==="flags"?pe(ke,3):t(W).kind==="struct"?pe(we,4):t(W).kind==="variant"?pe(H,5):t(W).kind==="json"?pe(F,6):pe(Ne,-1)})}var Me=d(Fe,2);{var Ke=pe=>{var De=KE(),Pe=m(De);E((Ge,Le)=>h(Pe,`${Ge??""}: ${Le??""}`),[()=>s("optional"),()=>t(W).optional.join(", ")]),v(pe,De)};$(Me,pe=>{t(W).optional.length>0&&pe(Ke)})}E(()=>{I(T,"data-testid",`arg-${t(W).name}`),I(O,"for",`arg-input-${t(W).name}`),h(J,`${t(W).name??""} `),h(Ce,t(W).type)}),v(se,T)});var ye=d(ve,2);je(ye,20,()=>t(b),se=>se,(se,W)=>{var V=qE(),T={};E(()=>{T!==(T=W)&&(V.value=(V.__value=T)??"")}),v(se,V)});var Y=d(xe,2),X=w(Y),L=w(X),z=d(L);{var le=se=>{var W=$E(),V=m(W,!0);E(()=>h(V,t(o).error)),v(se,W)};$(z,se=>{t(o)&&!t(o).ok&&se(le)})}var me=d(X,2),be=d(Re,2);{var Ee=se=>{var W=XE(),V=w(W),T=m(V,!0),O=d(V,2),J=m(O,!0);E(_e=>{h(T,t(g).name),h(J,_e)},[()=>t(g).help.replace(/<[^>]*>/g," ").replace(/\s+/g," ").trim()]),v(se,W)};$(be,se=>{t(g)?.help&&se(Ee)})}E((se,W,V,T,O,J,_e,Ce)=>{I(ne,"aria-label",se),h(Z,W),j!==(j=t(a))&&(ne.value=(ne.__value=j)??"",Cn(ne,j)),h(fe,`${t(a)??""}(${V??""})`),Te.disabled=t(a)===""||n.console.running,h(ce,T),h(M,O),h(L,`${J??""} `),I(me,"aria-label",_e),rn(me,Ce)},[()=>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})`}`]),ee("change",ne,se=>y(se.currentTarget.value)),ee("click",Te,()=>{K()}),v(r,ae),mt()}kt(["change","click","input"]);function JE(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 ey=_('<div class="hmm-context-separator svelte-192vamk" role="separator"></div>'),ty=_('<button type="button" role="menuitem"> </button>'),ny=_('<div class="hmm-context-menu svelte-192vamk" role="menu"></div>');function Nd(r,e){ht(e,!0);let n=B(e,"open",15,!1),s=B(e,"x",3,0),a=B(e,"y",3,0),i=B(e,"onselect",3,void 0),o=B(e,"onclose",3,void 0),l=B(e,"label",3,"Menu"),f=B(e,"testId",3,void 0),p=N(void 0),g=N(Be({x:0,y:0}));lt(()=>{if(!n()||!t(p))return;const D=t(p).getBoundingClientRect();u(g,JE(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 b(){n(!1),o()?.()}function k(D){D.disabled===!0||D.separator===!0||(b(),i()?.(D.id))}function y(D){n()&&D.key==="Escape"&&(D.preventDefault(),b())}var S=wt();wr("keydown",la,y),wr("mousedown",la,D=>{n()&&t(p)&&D.target instanceof Node&&!t(p).contains(D.target)&&b()});var A=Ie(S);{var x=D=>{var C=ny();let R;je(C,21,()=>e.items,P=>P.id,(P,K)=>{var q=wt(),re=Ie(q);{var ae=G=>{var ne=ey();v(G,ne)},de=G=>{var ne=ty();let ie;var Z=m(ne,!0);E(()=>{ie=St(ne,1,"hmm-context-item svelte-192vamk",null,ie,{"hmm-context-danger":t(K).danger===!0}),ne.disabled=t(K).disabled===!0,h(Z,t(K).label??t(K).id)}),ee("click",ne,()=>k(t(K))),v(G,ne)};$(re,G=>{t(K).separator===!0?G(ae):G(de,-1)})}v(P,q)}),_n(C,P=>u(p,P),()=>t(p)),E(()=>{I(C,"aria-label",l()),I(C,"data-testid",f()),R=Fn(C,"",R,{left:`${t(g).x}px`,top:`${t(g).y}px`})}),v(D,C)};$(A,D=>{n()&&D(x)})}v(r,S),mt()}kt(["click"]);function ry(){return globalThis.navigator?.clipboard}async function sy(r,e={}){const n=ry();if(typeof n?.writeText=="function")try{return await n.writeText(r),"clipboard"}catch{}return ay(r,e.host)?"selection":"failed"}function ay(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 iy="data-measure-skip";function oy(r){return r.scrollWidth>r.clientWidth}function ly(r){return(r.innerText||r.textContent||"").replace(/\s+/g," ").trim()}function dy(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(`[${iy}]`))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 di=40,cy=1200,uy=600,jc=10;function ci(r,e=di,n=cy){return Number.isFinite(r)?Math.round(Math.min(Math.max(r,e),Math.max(e,n))):e}function fy(r,e=di,n=uy){const s=r.filter(a=>Number.isFinite(a)&&a>0);if(s.length!==0)return ci(Math.ceil(Math.max(...s)),e,n)}function Di(r){return r.fixed!==!0&&r.hidden!==!0}function Wc(r){return r.keepMinWidth!==!0||r.minWidth===void 0?di:Math.max(di,Math.round(r.minWidth))}function hy(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]=ci(s));return e}const my=30,Ih=20,ui=Ih+12,vy=22,py=vy+12;function Hl(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 Za(r,e){const n=Hl(r,e);return n===void 0?"":String(n)}function zi(r){return r.sortable!==!1&&r.hidden!==!0}function Dh(r){return r.filterable!==!1&&r.hidden!==!0}function Kc(r,e){return r.toLowerCase().includes(e.toLowerCase())}function Yc(r,e,n,s){for(const a of e){const i=s[a.key];if(i!==void 0&&i!==""&&!Kc(Za(r,a),i))return!1}return n.trim()===""?!0:e.filter(a=>Dh(a)).some(a=>Kc(Za(r,a),n))}function gy(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 by(r){const{rows:e,columns:n,getId:s,children:a,expanded:i}=r,o=r.globalFilter??"",l=r.columnFilters??{},f=r.subColumns??n,g=o.trim()!==""||Object.values(l).some(y=>y!=="")?e.filter(y=>Yc(y,n,o,l)||(a?.(y)??[]).some(S=>Yc(S,f,o,l))):[...e],b=r.sort;if(b){const y=n.find(S=>S.key===b.key);if(y&&zi(y)){const S=b.direction==="asc"?1:-1;g.sort((A,x)=>S*gy(Hl(A,y),Hl(x,y)))}}const k=[];for(const y of g){const S=s(y),A=a?.(y)??[],x=i.has(S);if(k.push({id:S,key:S,row:y,depth:0,hasChildren:A.length>0,expanded:x,rootId:S,kind:"row"}),!!x){r.subHeader===!0&&A.length>0&&k.push({id:`${S}::header`,key:`${S}::header`,row:y,depth:1,hasChildren:!1,expanded:!1,rootId:S,kind:"header"});for(const D of A)k.push({id:s(D),key:`${S}/${s(D)}`,row:D,depth:1,hasChildren:!1,expanded:!1,rootId:S,kind:"row"})}}return k}function _y(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 zl=56,qc=120,$c=22;function Ey(r,e){if(r.width===void 0&&e===void 0)return`minmax(${zl}px, ${qc}fr)`;if(r.fixed&&r.width!==void 0)return`${r.width}px`;if(e!==void 0)return`${e}px`;const n=r.width??qc;return`minmax(${Nh(r)}px, ${n}fr)`}function Nh(r){return r.minWidth!==void 0?r.minWidth:Math.min(r.width??zl,zl)}function yy(r,e){return r.fixed&&r.width!==void 0?r.width:e!==void 0?e:Nh(r)}function Xc(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 Sy(r,e){return e===void 0||r.keepMinWidth!==!0||r.minWidth===void 0?e:Math.max(e,r.minWidth)}function Ch(r,e={}){const n=r.expander?[`${$c}px`]:[];let s=r.expander?$c:0;for(const a of r.tracks){const i=a.fixed?void 0:Sy(a,e[a.key]);n.push(Ey(a,i)),s+=yy(a,i)}return{template:n.join(" "),minWidth:s}}function ky(r,e,n){const s=r.filter(f=>f.hidden!==!0).map(f=>Xc(f)),a=[];let i=0;for(const f of e??[]){if(f.hidden===!0)continue;const p=s.findIndex(g=>g.key===f.key);if(p>=0){i=p+1;continue}s.splice(i,0,Xc(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:Ch({tracks:s,expander:n}).template,track:l,tracks:s,expander:n,subKeys:a}}function wy(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 Ay(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 Ty(r,e){return r.trim()!==""||Object.values(e).some(n=>n.trim()!=="")}function Ry(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 xy(r,e,n,s,a){if(a.shift===!0&&n!==void 0)return{selected:Ry(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 Iy=_('<div role="separator" aria-orientation="vertical" tabindex="0" data-measure-skip=""></div>'),Dy=_('<span class="hmm-table-caption svelte-16k18c8"> </span>'),Ny=_('<div class="hmm-table-actions svelte-16k18c8" role="toolbar"><!></div>'),Qc=_('<span class="hmm-table-count svelte-16k18c8"> </span>'),Cy=_('<div class="hmm-table-band svelte-16k18c8"><!> <!> <div class="hmm-table-trailing svelte-16k18c8"><!> <!></div></div>'),Py=_('<span class="hmm-th-group-sub svelte-16k18c8"> </span>'),My=_('<div class="hmm-th hmm-th-group svelte-16k18c8" role="columnheader"><span class="hmm-th-group-label"> </span> <!></div>'),Oy=_('<div class="hmm-table-groups svelte-16k18c8" role="row"></div>'),Ly=_('<div class="hmm-th hmm-th-expander svelte-16k18c8" role="columnheader"></div>'),Fy=_('<span class="hmm-th-sort svelte-16k18c8" aria-hidden="true"> </span>'),Gy=_('<button type="button" class="hmm-th-button svelte-16k18c8"><span class="hmm-th-label"> </span> <!></button>'),Uy=_('<span class="hmm-th-label"> </span>'),By=_('<div class="hmm-th svelte-16k18c8" role="columnheader"><!> <!></div>'),Vy=_('<div class="hmm-th hmm-th-sub-only svelte-16k18c8"><!></div>'),Hy=_('<div class="hmm-tf-spacer"></div>'),zy=_('<input class="hmm-input hmm-tf-input svelte-16k18c8" type="search"/>'),jy=_('<div class="hmm-tf svelte-16k18c8"><!></div>'),Wy=_('<div class="hmm-table-filters svelte-16k18c8"><!> <!></div>'),Ky=_('<span> </span> <button type="button" class="hmm-button hmm-table-clear svelte-16k18c8"> </button>',1),Yy=_('<div class="hmm-table-empty svelte-16k18c8"><!></div>'),qy=_('<button type="button" class="hmm-expander svelte-16k18c8"> </button>'),$y=_('<div class="hmm-td hmm-td-expander svelte-16k18c8"><!></div>'),Xy=_(" <!>",1),Qy=js('<path d="M1.5 5.2 4 7.7 8.5 2.3"></path>'),Zy=js('<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),Jy=_('<button type="button" data-measure-skip=""><svg class="hmm-copy-icon svelte-16k18c8" viewBox="0 0 10 10" aria-hidden="true"><!></svg></button>'),eS=_('<div role="gridcell"><!> <!></div>'),tS=_('<div role="row" tabindex="-1"><!> <!></div>'),nS=_('<div class="hmm-table-spacer svelte-16k18c8"><div class="hmm-table-rows svelte-16k18c8"></div></div>'),rS=_('<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 zs(r,e){ht(e,!0);const n=(Q,Ae=zn,Ue=zn)=>{var ot=Iy();let Kt;E(At=>{Kt=St(ot,1,"hmm-th-resize svelte-16k18c8",null,Kt,{"hmm-th-resize-active":t(Mn)===Ae().key}),I(ot,"aria-label",At),I(ot,"data-testid",Ue())},[()=>ce("Resize column {column}",{column:Ae().label})]),ee("pointerdown",ot,At=>Mr(At,Ae().key)),ee("pointermove",ot,Xr),ee("pointerup",ot,At=>Wn(At,Ae())),wr("pointercancel",ot,Ln),wr("lostpointercapture",ot,Ln),ee("dblclick",ot,At=>{At.preventDefault(),fn||Xt(Ae().key)}),ee("keydown",ot,At=>_r(At,Ae().key)),v(Q,ot)};let s=B(e,"columnGroups",3,void 0),a=B(e,"scope",3,void 0),i=B(e,"subRows",3,void 0),o=B(e,"subColumns",3,void 0),l=B(e,"rowHeight",3,my),f=B(e,"height",3,void 0),p=B(e,"overscan",3,6),g=B(e,"columnFilterRow",3,!0),b=B(e,"caption",3,void 0),k=B(e,"emptyText",3,""),y=B(e,"noMatchText",3,"No row matches the filter"),S=B(e,"clearFilterLabel",3,"Clear filter"),A=B(e,"showingText",3,void 0),x=B(e,"filterLabel",3,"Filter"),D=B(e,"toolbar",3,void 0),C=B(e,"toolbarLabel",3,void 0),R=B(e,"status",3,void 0),P=B(e,"countText",3,void 0),K=B(e,"selected",31,()=>Be([])),q=B(e,"expanded",31,()=>Be([])),re=B(e,"filter",15,""),ae=B(e,"sort",15,void 0),de=B(e,"onactivate",3,void 0),G=B(e,"onrowcontextmenu",3,void 0),ne=B(e,"renameColumn",3,"name"),ie=B(e,"canRename",3,void 0),Z=B(e,"onrename",3,void 0),te=B(e,"cell",3,void 0),j=B(e,"tableId",3,void 0),U=B(e,"subTableId",3,void 0),fe=B(e,"testId",3,void 0);const Te=Ep();function ce(Q,Ae={}){return Te?.t===void 0?yp(Q,Ae):Te.t(Q,Ae)}let Re=N(Be({})),xe=N(0),ge=N(0),M=N(0),ue=N(0),he=N(void 0),ve=N(void 0),ye=N(void 0),Y=N(void 0),X=N(void 0),L=N(void 0);const z=c(()=>e.columns.filter(Q=>Q.hidden!==!0)),le=c(()=>(o()??e.columns).filter(Q=>Q.hidden!==!0)),me=c(()=>i()!==void 0),be=c(()=>ky(e.columns,o(),t(me)));let Ee=N({}),se=N({}),W=N(void 0);const V=c(()=>{const Q=Te?.columnWidths;return j()===void 0||Q===void 0?t(Ee):Q.widths(j())}),T=c(()=>{const Q=Te?.columnWidths;return U()===void 0||Q===void 0?t(se):Q.widths(U())}),O=c(()=>Object.keys(t(V)).length>0),J=c(()=>Object.keys(t(T)).length>0),_e=c(()=>new Set(t(be).subKeys)),Ce=c(()=>t(le).filter(Q=>t(_e).has(Q.key)&&Di(Q))),Fe=c(()=>{const Q=wy(t(be),t(V),t(T));return Ch(t(be),t(W)===void 0?Q:{...Q,[t(W).key]:t(W).width})}),We=c(()=>Ay(s()??[],e.columns,t(be))),Ze=c(()=>new Set(q())),nt=c(()=>b()!==void 0||D()!==void 0||R()!==void 0||P()!==void 0),ke=c(()=>new Set(K())),we=c(()=>by({rows:e.rows,columns:e.columns,getId:e.getId,children:i(),expanded:t(Ze),globalFilter:re(),columnFilters:t(Re),sort:ae(),subColumns:o(),subHeader:o()!==void 0})),H=c(()=>f()??t(ge)),F=c(()=>_y(t(we).length,t(xe),t(H),l(),p())),Ne=c(()=>t(we).slice(t(F).start,t(F).end)),Me=c(()=>Ty(re(),t(Re))),Ke=c(()=>t(we).filter(Q=>Q.depth===0).length),pe=c(()=>t(Me)&&e.rows.length>0);function De(){u(Re,{},!0)}let Pe=gr(()=>a());lt(()=>{a()!==Pe&&(Pe=a(),De(),re(""),t(ve)&&(t(ve).scrollTop=0,u(xe,0)))}),lt(()=>{const Q=t(ve);if(!Q)return;const Ae=()=>{f()===void 0&&u(ge,Q.clientHeight,!0),u(ue,Q.offsetWidth-Q.clientWidth)};Ae();const Ue=new ResizeObserver(Ae);return Ue.observe(Q),()=>{Ue.disconnect()}});function Ge(Q){u(xe,Q.scrollTop,!0);const Ae=Q.scrollLeft===0?"":`translateX(${String(-Q.scrollLeft)}px)`;for(const Ue of[t(Y),t(X),t(L)])Ue&&Ue.style.transform!==Ae&&(Ue.style.transform=Ae);at(),hn()}function Le(Q){zi(Q)&&(ae()?.key!==Q.key?ae({key:Q.key,direction:"asc"}):ae().direction==="asc"?ae({key:Q.key,direction:"desc"}):ae(void 0))}function Ye(Q){q(t(Ze).has(Q)?q().filter(Ae=>Ae!==Q):[...q(),Q])}function Xe(Q,Ae){if(Q.kind==="header")return;const Ue=xy(t(we),K(),t(he),Q.id,Ae);K(Ue.selected),u(he,Ue.anchorId,!0),u(M,t(we).findIndex(ot=>ot.id===Q.id),!0)}function ze(Q,Ae){Xe(Q,{ctrl:Ae.ctrlKey||Ae.metaKey,shift:Ae.shiftKey})}function Je(Q,Ae){!G()||Q.kind==="header"||(Ae.preventDefault(),t(ke).has(Q.id)||Xe(Q,{}),G()(Q.row,Ae))}const dt='button, input, select, textarea, a[href], [contenteditable="true"]';function pt(Q){return Q.target instanceof Element&&Q.target.closest(dt)!==null}const gt='input, select, textarea, [contenteditable="true"]',Se=new Set(["ArrowDown","ArrowUp","ArrowLeft","ArrowRight","Home","End"]);function Oe(Q){return Q.target instanceof Element&&Q.target.closest(gt)!==null}function $e(Q){return Q?.kind==="row"&&Z()!==void 0&&(ie()?.(Q.row)??!0)}function ft(Q,Ae){if(Q.kind!=="row")return;if((Ae.target instanceof Element?Ae.target.closest("[data-column-key]"):null)?.dataset.columnKey===ne()&&!pt(Ae)&&$e(Q)){window.getSelection()?.removeAllRanges(),Z()?.(Q.row);return}de()?.(Q.row)}function Et(Q,Ae){!$e(Q)||!t(ke).has(Q.id)||pt(Ae)||(Ae.preventDefault(),Z()?.(Q.row))}function it(){const Q=t(ve);if(!Q)return;const Ae=t(M)*l(),Ue=t(H)===0?Q.clientHeight:t(H);Ae<Q.scrollTop?Q.scrollTop=Ae:Ae+l()>Q.scrollTop+Ue&&(Q.scrollTop=Ae+l()-Ue)}function Wt(Q,Ae){if(t(we).length===0)return;const Ue=Math.min(t(we).length-1,Math.max(0,t(M)+Q)),ot=t(we)[Ue];ot&&(u(M,Ue,!0),Xe(ot,{shift:Ae}),it())}function Mt(Q){if(Se.has(Q.key)&&Oe(Q))return;const Ae=t(we)[t(M)];switch(Q.key){case"ArrowDown":Q.preventDefault(),Wt(1,Q.shiftKey);break;case"ArrowUp":Q.preventDefault(),Wt(-1,Q.shiftKey);break;case"Home":Q.preventDefault(),Wt(-t(we).length,Q.shiftKey);break;case"End":Q.preventDefault(),Wt(t(we).length,Q.shiftKey);break;case"ArrowRight":Ae?.hasChildren===!0&&!Ae.expanded&&(Q.preventDefault(),Ye(Ae.id));break;case"ArrowLeft":Ae?.hasChildren===!0&&Ae.expanded&&(Q.preventDefault(),Ye(Ae.id));break;case"Enter":if(pt(Q))break;Ae&&de()?(Q.preventDefault(),de()(Ae.row)):Et(Ae,Q);break;case"F2":Et(Ae,Q);break;case" ":Ae&&!pt(Q)&&(Q.preventDefault(),Xe(Ae,{ctrl:!0}));break;case"Escape":et();break}}const Ot=2,Zt=4,bn=14;function on(Q){return t(_e).has(Q)?"sub":"table"}function un(Q){const Ae=(on(Q)==="sub"?t(le):t(z)).find(Ue=>Ue.key===Q);return Ae===void 0?di:Wc(Ae)}function vn(Q,Ae){const Ue=Te?.columnWidths,ot=on(Q),Kt=ot==="sub"?U():j(),At=ci(Ae,un(Q));Kt!==void 0&&Ue!==void 0?Ue.set(Kt,Q,At):ot==="sub"?u(se,{...t(se),[Q]:At}):u(Ee,{...t(Ee),[Q]:At})}function Pn(Q){const Ae=Te?.columnWidths,Ue=Q==="sub"?U():j();Ue!==void 0&&Ae!==void 0?Ae.reset(Ue):Q==="sub"?u(se,{}):u(Ee,{})}function Jn(Q,Ae){if(Q===void 0||on(Q)!==Ae)return;const Ue=t(Ae==="sub"?le:z).find(ot=>ot.key===Q);return Ue!==void 0&&Di(Ue)?Ue:void 0}function jn(Q){const Ae=`[data-column-key="${CSS.escape(Q)}"]`;return(on(Q)==="sub"?t(ve)?.querySelector(`.hmm-tr-subhead ${Ae}`):t(X)?.querySelector(Ae))??void 0}function Xt(Q){const Ae=on(Q),Ue=Jn(Q,Ae),ot=jn(Q);if(!t(ye)||!Ue||!ot)return;const Kt=t(ve)?[...t(ve).querySelectorAll(`.hmm-td[data-column-key="${CSS.escape(Q)}"]`)]:[],[At=0,...yt]=dy(t(ye),[ot,...Kt]),xn=Ae==="table"&&zi(Ue)&&ae()?.key!==Q?At+bn:At,dn=fy([xn,...yt],Wc(Ue));dn!==void 0&&vn(Q,dn)}let xt,fn=!1,Mn=N(void 0);function On(Q){return Q.currentTarget.closest("[data-column-key]")}function Mr(Q,Ae){const Ue=On(Q);if(!(Q.button!==0||!Ue)){Q.preventDefault();try{Q.currentTarget.setPointerCapture(Q.pointerId)}catch{}fn=Q.pointerType==="touch"||Q.pointerType==="pen",xt={key:Ae,pointerId:Q.pointerId,startX:Q.clientX,startWidth:Ue.getBoundingClientRect().width,min:un(Ae),touch:fn,moved:!1},et()}}function Xr(Q){const Ae=xt;if(Ae?.pointerId!==Q.pointerId)return;const Ue=Q.clientX-Ae.startX;if(!Ae.moved&&Math.abs(Ue)<(Ae.touch?Zt:Ot))return;Ae.moved||(Ae.moved=!0,u(Mn,Ae.key,!0));const ot=ci(Ae.startWidth+Ue,Ae.min);(t(W)?.key!==Ae.key||t(W).width!==ot)&&u(W,{key:Ae.key,width:ot})}function Ln(Q){const Ae=xt;Ae?.pointerId===Q.pointerId&&(xt=void 0,u(Mn,void 0),Ae.moved&&t(W)?.key===Ae.key&&vn(Ae.key,t(W).width),u(W,void 0))}function Wn(Q,Ae){const Ue=xt;Ln(Q),Ue?.pointerId===Q.pointerId&&Ue.touch&&!Ue.moved&&on(Ae.key)==="table"&&Le(Ae)}function _r(Q,Ae){if(Q.key==="ArrowLeft"||Q.key==="ArrowRight"){const Ue=On(Q);if(Ue){const ot=Q.key==="ArrowRight"?jc:-jc;vn(Ae,Ue.getBoundingClientRect().width+ot)}}else if(Q.key==="Enter")Xt(Ae);else if(Q.key!=="Tab")return;Q.key!=="Tab"&&(Q.preventDefault(),Q.stopPropagation())}let xr=N(!1),lr=N(0),Er=N(0),tr=N(void 0),yr=N("table");const Qr=c(()=>[{id:"fit",label:ce("Fit column to content"),disabled:Jn(t(tr),t(yr))===void 0},{id:"reset",label:ce("Reset column widths"),disabled:t(yr)==="sub"?!t(J):!t(O)}]);function nr(Q){const Ae=Q.target instanceof Element?Q.target:null;if(!Ae)return;const Ue=t(X)?.contains(Ae)===!0||t(Y)?.contains(Ae)===!0;if(!Ue&&Ae.closest(".hmm-tr-subhead")===null)return;Q.preventDefault();const ot=Ae.closest("[data-column-key]");u(tr,ot?.dataset.columnKey,!0),u(yr,Ue&&(t(tr)===void 0||!t(_e).has(t(tr)))?"table":"sub",!0),u(lr,Q.clientX,!0),u(Er,Q.clientY,!0),u(xr,!0),et()}function is(Q){Q==="fit"&&t(tr)!==void 0?Xt(t(tr)):Q==="reset"&&Pn(t(yr))}let oe=N(void 0),He,Gt,pn,Sn;function er(Q){return xt===void 0&&!Q.classList.contains("hmm-td-fixed")&&oy(Q)}function Or(Q,Ae){et(),Gt=Q,pn=Ae,Sn=setTimeout(()=>{Sn=void 0,Ve(Q)},Kf)}function ys(Q){const Ue=(Q.target instanceof Element?Q.target.closest(".hmm-td, .hmm-th"):null)??void 0;Ue!==He&&(He=Ue,!(Ue!==void 0&&Ue===Gt)&&(Ue!==void 0&&er(Ue)?Or(Ue,"pointer"):pn==="pointer"&&et()))}function ct(Q){try{return Q.matches(":focus-visible")}catch{return!1}}function rt(Q){const Ae=Q.target instanceof HTMLElement?Q.target:void 0,Ue=Ae?.closest(".hmm-td, .hmm-th")??void 0;Ae===void 0||Ue===void 0||Ue===Gt||Ae.classList.contains("hmm-th-resize")||!ct(Ae)||er(Ue)&&Or(Ue,"focus")}function st(){pn==="focus"&&et()}function Ve(Q){if(Gt!==Q||!Q.isConnected)return;const Ae=ly(Q.querySelector(".hmm-th-label")??Q);if(Ae==="")return;const{left:Ue,top:ot,bottom:Kt}=Q.getBoundingClientRect();u(oe,{text:Ae,anchor:{left:Ue,top:ot,bottom:Kt}})}function et(){Sn!==void 0&&(clearTimeout(Sn),Sn=void 0),Gt=void 0,pn=void 0,t(oe)!==void 0&&u(oe,void 0)}function at(){et(),He=void 0}function _t(){pn==="pointer"&&et(),He=void 0}lt(()=>()=>{Sn!==void 0&&clearTimeout(Sn)});const Rt=1500,Vt=4e3;let Ut=N(void 0),ln;function Bt(Q,Ae){return`${Q.key}\0${Ae.key}`}function hn(){ln!==void 0&&(clearTimeout(ln),ln=void 0),t(Ut)!==void 0&&u(Ut,void 0)}async function Tn(Q,Ae,Ue){Q.stopPropagation();const ot=Q.currentTarget;if(!(ot instanceof HTMLElement))return;const Kt=await sy(Za(Ae.row,Ue),{host:t(ye)});if(et(),hn(),!ot.isConnected)return;const At=Kt!=="failed";At||gn(ot);const{left:yt,top:xn,bottom:dn}=ot.getBoundingClientRect();u(Ut,{key:Bt(Ae,Ue),ok:At,text:ce(At?"Copied":"Could not copy - the text is selected"),anchor:{left:yt,top:xn,bottom:dn}}),ln=setTimeout(hn,At?Rt:Vt)}function gn(Q){const Ae=Q.closest(".hmm-td"),Ue=window.getSelection();if(!Ae||!Ue)return;const ot=document.createRange();ot.selectNodeContents(Ae),ot.setEndBefore(Q),Ue.removeAllRanges(),Ue.addRange(ot)}lt(()=>()=>{ln!==void 0&&clearTimeout(ln)});var Lt=rS(),It=w(Lt);{var Qe=Q=>{var Ae=Cy(),Ue=w(Ae);{var ot=Ht=>{var an=Dy(),Jt=m(an,!0);E(()=>h(Jt,b())),v(Ht,an)};$(Ue,Ht=>{b()!==void 0&&Ht(ot)})}var Kt=d(Ue,2);{var At=Ht=>{var an=Ny(),Jt=w(an);Bs(Jt,D),E(()=>I(an,"aria-label",C()??b()??x())),v(Ht,an)};$(Kt,Ht=>{D()&&Ht(At)})}var yt=d(Kt,2),xn=w(yt);{var dn=Ht=>{var an=wt(),Jt=Ie(an);Bs(Jt,R),v(Ht,an)};$(xn,Ht=>{R()&&Ht(dn)})}var rr=d(xn,2);{var Yn=Ht=>{var an=Qc(),Jt=m(an,!0);E(cn=>{I(an,"data-testid",fe()===void 0?void 0:`${fe()}-count`),h(Jt,cn)},[()=>A()(t(Ke),e.rows.length)]),v(Ht,an)},kn=Ht=>{var an=Qc(),Jt=m(an,!0);E(()=>{I(an,"data-testid",fe()===void 0?void 0:`${fe()}-count`),h(Jt,P())}),v(Ht,an)};$(rr,Ht=>{t(pe)&&A()!==void 0?Ht(Yn):P()!==void 0&&Ht(kn,1)})}v(Q,Ae)};$(It,Q=>{t(nt)&&Q(Qe)})}var tt=d(It,2);let bt,sn;var Rn=w(tt);{var dr=Q=>{var Ae=Oy();je(Ae,21,()=>t(We),Ue=>Ue.key,(Ue,ot)=>{var Kt=My();let At;var yt=w(Kt),xn=m(yt,!0),dn=d(yt,2);{var rr=Yn=>{var kn=Py(),Ht=m(kn,!0);E(()=>h(Ht,t(ot).sublabel)),v(Yn,kn)};$(dn,Yn=>{t(ot).sublabel!==void 0&&t(ot).sublabel!==""&&Yn(rr)})}E(Yn=>{I(Kt,"aria-colspan",t(ot).end-t(ot).start),I(Kt,"data-testid",fe()===void 0?void 0:`${fe()}-group-${t(ot).key}`),At=Fn(Kt,"",At,{"grid-column":Yn}),h(xn,t(ot).label)},[()=>`${String(t(ot).start)} / ${String(t(ot).end)}`]),v(Ue,Kt)}),_n(Ae,Ue=>u(Y,Ue),()=>t(Y)),v(Q,Ae)};$(Rn,Q=>{t(We).length>0&&Q(dr)})}var Nn=d(Rn,2),Lr=w(Nn);{var cr=Q=>{var Ae=Ly();v(Q,Ae)};$(Lr,Q=>{t(me)&&Q(cr)})}var Kn=d(Lr,2);je(Kn,17,()=>t(z),Q=>Q.key,(Q,Ae)=>{var Ue=By();let ot;var Kt=w(Ue);{var At=kn=>{var Ht=Gy();let an;var Jt=w(Ht),cn=m(Jt,!0),Br=d(Jt,2);{var Ss=Vr=>{var Ir=Fy(),Ws=m(Ir,!0);E(()=>h(Ws,ae().direction==="asc"?"▲":"▼")),v(Vr,Ir)};$(Br,Vr=>{ae()?.key===t(Ae).key&&Vr(Ss)})}E(()=>{an=Fn(Ht,"",an,{"justify-content":t(Ae).align==="right"?"flex-end":t(Ae).align==="center"?"center":"flex-start"}),h(cn,t(Ae).label)}),ee("click",Ht,()=>Le(t(Ae))),v(kn,Ht)},yt=c(()=>zi(t(Ae))),xn=kn=>{var Ht=Uy(),an=m(Ht,!0);E(()=>h(an,t(Ae).label)),v(kn,Ht)};$(Kt,kn=>{t(yt)?kn(At):kn(xn,-1)})}var dn=d(Kt,2);{var rr=kn=>{n(kn,()=>t(Ae),()=>fe()===void 0?void 0:`${fe()}-resize-${t(Ae).key}`)},Yn=c(()=>Di(t(Ae)));$(dn,kn=>{t(Yn)&&kn(rr)})}E(()=>{I(Ue,"aria-label",t(Ae).label===""?void 0:t(Ae).label),I(Ue,"data-column-key",t(Ae).key),I(Ue,"aria-sort",ae()?.key===t(Ae).key?ae().direction==="asc"?"ascending":"descending":"none"),ot=Fn(Ue,"",ot,{"grid-column":t(be).track[t(Ae).key],"text-align":t(Ae).align??"left"})}),v(Q,Ue)});var Fr=d(Kn,2);je(Fr,17,()=>t(Ce),Q=>Q.key,(Q,Ae)=>{var Ue=Vy();let ot;var Kt=w(Ue);n(Kt,()=>t(Ae),()=>fe()===void 0?void 0:`${fe()}-resize-${t(Ae).key}`),E(()=>{I(Ue,"data-column-key",t(Ae).key),ot=Fn(Ue,"",ot,{"grid-column":t(be).track[t(Ae).key],"grid-row":"1"})}),v(Q,Ue)}),_n(Nn,Q=>u(X,Q),()=>t(X));var Gr=d(Nn,2);{var Zr=Q=>{var Ae=Wy(),Ue=w(Ae);{var ot=At=>{var yt=Hy();v(At,yt)};$(Ue,At=>{t(me)&&At(ot)})}var Kt=d(Ue,2);je(Kt,17,()=>t(z),At=>At.key,(At,yt)=>{var xn=jy();let dn;var rr=w(xn);{var Yn=Ht=>{var an=zy();E(()=>{I(an,"aria-label",`${x()}: ${t(yt).label}`),rn(an,t(Re)[t(yt).key]??"")}),ee("input",an,Jt=>{u(Re,{...t(Re),[t(yt).key]:Jt.currentTarget.value},!0)}),v(Ht,an)},kn=c(()=>Dh(t(yt)));$(rr,Ht=>{t(kn)&&Ht(Yn)})}E(()=>dn=Fn(xn,"",dn,{"grid-column":t(be).track[t(yt).key]})),v(At,xn)}),_n(Ae,At=>u(L,At),()=>t(L)),v(Q,Ae)};$(Gr,Q=>{g()&&Q(Zr)})}var Ur=d(Gr,2);let os;var po=w(Ur);{var go=Q=>{var Ae=Yy(),Ue=w(Ae);{var ot=At=>{var yt=Ky(),xn=Ie(yt),dn=m(xn,!0),rr=d(xn,2),Yn=m(rr,!0);E(()=>{h(dn,y()),I(rr,"data-testid",fe()===void 0?void 0:`${fe()}-clear-filter`),h(Yn,S())}),ee("click",rr,De),v(At,yt)},Kt=At=>{var yt=Zn();E(()=>h(yt,k())),v(At,yt)};$(Ue,At=>{t(pe)?At(ot):At(Kt,-1)})}v(Q,Ae)},Si=Q=>{var Ae=nS();let Ue;var ot=w(Ae);let Kt;je(ot,23,()=>t(Ne),At=>At.key,(At,yt,xn)=>{var dn=tS();let rr,Yn;var kn=w(dn);{var Ht=Jt=>{var cn=$y(),Br=w(cn);{var Ss=Vr=>{var Ir=qy(),Ws=m(Ir,!0);E(()=>{I(Ir,"aria-expanded",t(yt).expanded),I(Ir,"aria-label",t(yt).expanded?"Collapse row":"Expand row"),h(Ws,t(yt).expanded?"−":"+")}),ee("click",Ir,La=>{La.stopPropagation(),Ye(t(yt).id)}),v(Vr,Ir)};$(Br,Vr=>{t(yt).hasChildren&&Vr(Ss)})}v(Jt,cn)};$(kn,Jt=>{t(me)&&Jt(Ht)})}var an=d(kn,2);je(an,17,()=>t(yt).depth>0?t(le):t(z),Jt=>Jt.key,(Jt,cn)=>{var Br=eS();let Ss,Vr;var Ir=w(Br);{var Ws=sr=>{var Dr=Xy(),ar=Ie(Dr),Ks=d(ar);{var ca=Ys=>{n(Ys,()=>t(cn),()=>fe()===void 0?void 0:`${fe()}-sub-resize-${t(cn).key}`)},Fa=c(()=>t(_e).has(t(cn).key)&&Di(t(cn)));$(Ks,Ys=>{t(Fa)&&Ys(ca)})}E(()=>h(ar,`${t(cn).label??""} `)),v(sr,Dr)},La=sr=>{var Dr=wt(),ar=Ie(Dr);Bs(ar,te,()=>t(yt).row,()=>t(cn),()=>t(yt)),v(sr,Dr)},So=sr=>{var Dr=Zn();E(ar=>h(Dr,ar),[()=>Za(t(yt).row,t(cn))]),v(sr,Dr)};$(Ir,sr=>{t(yt).kind==="header"?sr(Ws):te()?sr(La,1):sr(So,-1)})}var ko=d(Ir,2);{var wo=sr=>{const Dr=c(()=>Bt(t(yt),t(cn)));var ar=Jy();let Ks;var ca=w(ar),Fa=w(ca);{var Ys=ur=>{var ua=Qy();v(ur,ua)},To=ur=>{var ua=Zy();v(ur,ua)};$(Fa,ur=>{t(Ut)?.key===t(Dr)&&t(Ut).ok?ur(Ys):ur(To,-1)})}E(ur=>{Ks=St(ar,1,"hmm-copy svelte-16k18c8",null,Ks,{"hmm-copy-shown":t(Ut)?.key===t(Dr)}),I(ar,"tabindex",t(F).start+t(xn)===t(M)?0:-1),I(ar,"aria-label",ur)},[()=>t(cn).copy==="name"?ce("Copy name"):ce("Copy address")]),ee("click",ar,ur=>{Tn(ur,t(yt),t(cn))}),ee("dblclick",ar,ur=>{ur.stopPropagation()}),v(sr,ar)},Ao=c(()=>t(cn).copy!==void 0&&t(yt).kind==="row"&&Za(t(yt).row,t(cn))!=="");$(ko,sr=>{t(Ao)&&sr(wo)})}E(()=>{Ss=St(Br,1,"hmm-td svelte-16k18c8",null,Ss,{"hmm-td-fixed":t(cn).fixed===!0,"hmm-td-copy":t(cn).copy!==void 0&&t(yt).kind==="row","hmm-mono":t(cn).mono===!0&&t(yt).kind==="row"}),I(Br,"data-column-key",t(cn).key),Vr=Fn(Br,"",Vr,{"grid-column":t(be).track[t(cn).key],"text-align":t(cn).align??"left"})}),v(Jt,Br)}),E((Jt,cn)=>{rr=St(dn,1,"hmm-tr svelte-16k18c8",null,rr,{"hmm-tr-even":(t(F).start+t(xn))%2===1,"hmm-tr-selected":Jt,"hmm-tr-child":t(yt).depth>0&&t(yt).kind==="row","hmm-tr-subhead":t(yt).kind==="header"}),I(dn,"aria-selected",cn),I(dn,"data-row-id",t(yt).id),I(dn,"data-row-kind",t(yt).kind),Yn=Fn(dn,"",Yn,{height:`${l()}px`})},[()=>t(ke).has(t(yt).id),()=>t(yt).kind==="header"?void 0:t(ke).has(t(yt).id)]),ee("click",dn,Jt=>ze(t(yt),Jt)),ee("dblclick",dn,Jt=>ft(t(yt),Jt)),ee("contextmenu",dn,Jt=>Je(t(yt),Jt)),v(At,dn)}),E(()=>{Ue=Fn(Ae,"",Ue,{height:`${t(we).length*l()}px`}),Kt=Fn(ot,"",Kt,{transform:`translateY(${t(F).start*l()}px)`})}),v(Q,Ae)};$(po,Q=>{t(we).length===0?Q(go):Q(Si,-1)})}_n(Ur,Q=>u(ve,Q),()=>t(ve));var ki=d(tt,2);{var bo=Q=>{{let Ae=c(()=>fe()===void 0?void 0:`${fe()}-tooltip`);kl(Q,{get text(){return t(oe).text},get anchor(){return t(oe).anchor},get testId(){return t(Ae)}})}};$(ki,Q=>{t(oe)!==void 0&&Q(bo)})}var wi=d(ki,2);{var _o=Q=>{{let Ae=c(()=>fe()===void 0?void 0:`${fe()}-copied`);kl(Q,{get text(){return t(Ut).text},get anchor(){return t(Ut).anchor},get testId(){return t(Ae)}})}};$(wi,Q=>{t(Ut)!==void 0&&Q(_o)})}var Oa=d(wi,2),Ai=m(Oa,!0),Eo=d(Oa,2);{var yo=Q=>{{let Ae=c(()=>ce("Column widths")),Ue=c(()=>fe()===void 0?void 0:`${fe()}-columns-menu`);Nd(Q,{get items(){return t(Qr)},get x(){return t(lr)},get y(){return t(Er)},get label(){return t(Ae)},get testId(){return t(Ue)},onselect:is,get open(){return t(xr)},set open(ot){u(xr,ot,!0)}})}};$(Eo,Q=>{t(xr)&&Q(yo)})}_n(Lt,Q=>u(ye,Q),()=>t(ye)),E((Q,Ae)=>{I(Lt,"data-testid",fe()),bt=St(tt,1,"hmm-table-grid svelte-16k18c8",null,bt,{"hmm-table-resizing":t(Mn)!==void 0}),I(tt,"aria-rowcount",t(we).length),I(tt,"aria-colcount",t(z).length),sn=Fn(tt,"",sn,{"--hmm-table-columns":t(Fe).template,"--hmm-table-min-width":Q,"--hmm-table-gutter":Ae}),os=Fn(Ur,"",os,{height:f()===void 0?void 0:`${f()}px`}),h(Ai,t(Ut)?.text??"")},[()=>`${String(t(Fe).minWidth)}px`,()=>`${String(t(ue))}px`]),ee("keydown",tt,Mt),ee("contextmenu",tt,nr),ee("pointerover",tt,ys),wr("pointerleave",tt,_t),ee("pointerdown",tt,et),ee("focusin",tt,rt),ee("focusout",tt,st),wr("scroll",Ur,Q=>Ge(Q.currentTarget)),v(r,Lt),mt()}kt(["pointerdown","pointermove","pointerup","dblclick","keydown","contextmenu","pointerover","focusin","focusout","click","input"]);var sS=_('<img class="hmm-device-image svelte-rwoeeb"/>'),aS=_('<span class="hmm-device-image hmm-device-image-fallback svelte-rwoeeb"> </span>');function fi(r,e){ht(e,!0);let n=B(e,"deviceType",3,""),s=B(e,"src",3,void 0),a=B(e,"size",3,Ih),i=B(e,"title",3,void 0),o=B(e,"testId",3,void 0),l=N(!1);lt(()=>{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 g=wt(),b=Ie(g);{var k=S=>{var A=sS();E(()=>{I(A,"src",s()),I(A,"alt",n()),I(A,"title",i()??n()),I(A,"width",a()),I(A,"height",a()),I(A,"data-testid",o())}),wr("error",A,()=>u(l,!0)),v(S,A)},y=S=>{var A=aS();let x;var D=m(A,!0);E(C=>{I(A,"title",i()??n()),I(A,"aria-label",n()===""?void 0:n()),I(A,"role",n()===""?void 0:"img"),I(A,"data-testid",o()),x=Fn(A,"",x,{width:`${a()}px`,height:`${a()}px`,"font-size":C}),h(D,t(p))},[()=>`${Math.max(6,Math.round(a()*.5))}px`]),v(S,A)};$(b,S=>{t(f)?S(k):S(y,-1)})}v(r,g),mt()}var iS=_('<span class="hmm-primary-caption"> </span>'),oS=_('<button type="button"><span class="hmm-primary-icon svelte-1a5hxwr" aria-hidden="true"> </span> <!></button>'),lS=_('<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>'),dS=_('<span class="hmm-primary-slot svelte-1a5hxwr"><!> <!></span>');function Ph(r,e){ht(e,!0);let n=B(e,"icon",3,"+"),s=B(e,"disabled",3,!1),a=B(e,"reason",3,void 0),i=B(e,"compact",3,void 0),o=B(e,"onclick",3,void 0),l=B(e,"testId",3,void 0),f=N(void 0),p=N(void 0),g=N(0),b=N(0);lt(()=>{const P=t(f),K=t(p);if(i()!==void 0||!P||!K)return;const q=()=>{u(g,Math.ceil(K.getBoundingClientRect().width),!0),u(b,P.getBoundingClientRect().width,!0)};q();const re=new ResizeObserver(q);return re.observe(P),re.observe(K),()=>{re.disconnect()}});const k=c(()=>i()??(t(g)>0&&t(b)>0&&t(b)<t(g)-1)),y=c(()=>s()&&a()!==void 0?`${e.caption} — ${a()}`:t(k)?e.caption:""),S=c(()=>l()===void 0?void 0:`${l()}-tooltip`);var A=dS();let x;var D=w(A);ni(D,{get text(){return t(y)},get testId(){return t(S)},children:(P,K)=>{var q=oS();let re;var ae=w(q),de=m(ae,!0),G=d(ae,2);{var ne=ie=>{var Z=iS(),te=m(Z,!0);E(()=>{I(Z,"data-testid",l()===void 0?void 0:`${l()}-caption`),h(te,e.caption)}),v(ie,Z)};$(G,ie=>{t(k)||ie(ne)})}E(()=>{re=St(q,1,"hmm-primary-button svelte-1a5hxwr",null,re,{"hmm-primary-compact":t(k)}),I(q,"aria-label",e.caption),I(q,"data-testid",l()),I(q,"data-compact",t(k)?"true":"false"),q.disabled=s(),h(de,n())}),ee("click",q,()=>o()?.()),v(P,q)},$$slots:{default:!0}});var C=d(D,2);{var R=P=>{var K=lS(),q=w(K),re=m(q,!0),ae=d(q,2),de=m(ae,!0);_n(K,G=>u(p,G),()=>t(p)),E(()=>{h(re,n()),h(de,e.caption)}),v(P,K)};$(C,P=>{i()===void 0&&P(R)})}_n(A,P=>u(f,P),()=>t(f)),E(P=>x=Fn(A,"",x,{"flex-basis":P}),[()=>t(g)>0?`${String(t(g))}px`:void 0]),v(r,A),mt()}kt(["click"]);const cS={UNREACH:{symbol:"✖",level:"error"},STICKY_UNREACH:{symbol:"✖",level:"error"},LOWBAT:{symbol:"▮",level:"warn"},LOW_BAT:{symbol:"▮",level:"warn"},ERROR:{symbol:"⚠",level:"error"},ERROR_CODE:{symbol:"⚠",level:"error"},SABOTAGE:{symbol:"⚠",level:"error"},FAULT_REPORTING:{symbol:"⚠",level:"error"},CONFIG_PENDING:{symbol:"⚙",level:"warn"},UPDATE_PENDING:{symbol:"⇩",level:"warn"}},Zc=84,Ni=150,Jc=180;function Xo(r,e,n=2){const s=[];for(const a of e){if(Ra(a.address)!==r)continue;const i=cS[a.datapoint];if(!i)continue;const o={datapoint:a.datapoint,symbol:i.symbol,level:i.level,title:`${a.datapoint} ${a.address}`};i.level==="error"?s.unshift(o):s.push(o)}return s.slice(0,n)}function Mh(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 uS(r,e,n={channel:!1}){const s=[];let a=!1;for(const i of gb(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 hS=["UP_TO_DATE","NEW_FIRMWARE_AVAILABLE","DELIVER_FIRMWARE_IMAGE","PERFORMING_UPDATE"];function eu(r,e){return r!==void 0&&r!==""&&r!=="0.0.0"&&r!==e}function mS(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"&&eu(s,n))return{firmware:n,available:s,...a?{}:{action:"install"},busy:a};if(hS.includes(i))return{firmware:n,status:i.toLowerCase().replace(/_/g," "),busy:a}}return e.updatePending===!0?{firmware:n,status:"update pending",busy:a}:eu(s,n)?{firmware:n,available:s,...a?{}:{action:"update"},busy:a}:{firmware:n,busy:a}}function Oh(r,e){const n=r[e];return n?yi(e,n).map(s=>({path:s.path,label:s.node.name,depth:s.depth,hasChildren:(s.node.children?.length??0)>0})):[]}function jl(r,e=" "){return`${e.repeat(Math.max(0,r.depth-1))}${r.label}`}function Ia(r,e){return r!==void 0&&r.enums.some(n=>Fs(n,e))}function Lh(r,e,n){return Ia(r,n)||e.some(s=>Ia(s,n))}function tu(r,e,n){return Ia(r,n)||Ia(e,n)}function vo(r,e){return Object.entries(r).filter(([,n])=>Ia(n,e)).map(([n])=>n).sort((n,s)=>n.localeCompare(s))}function Wl(r,e){return r===void 0?[]:e==="room"?r.rooms:r.functions}function vS(r,e,n){const s=Wl(r,n);if(s.length>0)return[...s];const a=[];for(const i of e)for(const o of Wl(i,n))a.includes(o)||a.push(o);return a}function pS(r,e){return e===null||!Fs(e,r)}function gS(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 bS=_('<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),_S=_('<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),ES=_('<span></span> <span class="hmm-add-link-empty svelte-w1ajeb" data-testid="add-link-none"> </span>',1),yS=_('<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>'),SS=_('<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>'),kS=_('<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 Fh(r,e){ht(e,!0);let n=B(e,"open",15,!1),s=B(e,"onedit",3,void 0),a=B(e,"presetSenders",19,()=>[]),i=B(e,"presetReceivers",19,()=>[]);const o=jt(),l=o.i18n.t;let f=N(Be([])),p=N(Be([])),g=N(!1),b=N(Be({})),k=N(""),y=N("");const S=c(()=>o.app.selectedInterface),A=c(()=>o.devices.index(t(S)));lt(()=>{n()&&(u(f,[...a()],!0),u(p,[...i()],!0),u(b,{},!0),u(k,""),u(y,""))});const x=c(()=>t(A)?nh(t(A)).map(G=>P(G)):[]),D=c(()=>{const G=t(A);if(!G||t(f).length===0)return[];const ne=t(f).map(ie=>G.get(ie)).filter(ie=>ie!==void 0);return G.channels().filter(ie=>ne.every(Z=>Vb(Z,ie))).map(ie=>P(ie))}),C=c(()=>[...new Set(t(f).flatMap(G=>Es(t(A)?.get(G)?.LINK_SOURCE_ROLES)))].join(" ")),R=c(()=>[...new Set(t(p).flatMap(G=>Es(t(A)?.get(G)?.LINK_TARGET_ROLES)))].join(" "));function P(G){return gS(G,ne=>o.names.name(ne))}function K(){return t(f).flatMap(G=>t(p).map(ne=>{const ie=t(b)[q(G,ne)],Z=ie?.name.trim()===""||ie===void 0?t(k).trim():ie.name.trim(),te=ie?.description.trim()===""||ie===void 0?t(y).trim():ie.description.trim();return{sender:G,receiver:ne,...Z===""?{}:{name:Z},...te===""?{}:{description:te}}}))}function q(G,ne){return`${G}>${ne}`}function re(G,ne,ie,Z){const te=q(G,ne),j=t(b)[te]??{name:"",description:""};u(b,{...t(b),[te]:{...j,[ie]:Z}},!0)}function ae(){const G=K();G.length!==0&&(o.changeSet.stage({kind:"linkAdd",interfaceName:t(S),title:l("{count} links",{},G.length),pairs:G,calls:G.map(ne=>`addLink(${ne.sender}, ${ne.receiver}, ${JSON.stringify(ne.name??"")})`),lines:G.map(ne=>({label:`${o.nameOf(ne.sender)} → ${o.nameOf(ne.receiver)}`,to:ne.name??""}))}),n(!1))}async function de(G){u(g,!0);const ne=await o.links.addPairs(t(S),K());if(u(g,!1),ne===0)return;n(!1);const ie=t(f)[0],Z=t(p)[0];G&&ie!==void 0&&Z!==void 0&&s()?.({sender:ie,receiver:Z})}{const G=ie=>{var Z=bS(),te=Ie(Z),j=m(te,!0),U=d(te,2),fe=m(U,!0),Te=d(U,2),ce=m(Te,!0),Re=d(Te,2),xe=m(Re,!0);E((ge,M,ue,he)=>{h(j,ge),U.disabled=t(g)||t(p).length===0,h(fe,M),Te.disabled=t(g)||t(p).length===0,h(ce,ue),Re.disabled=t(g)||t(p).length===0,h(xe,he)},[()=>l("Cancel"),()=>l("Add to pending changes"),()=>l("Create"),()=>l("Create and edit")]),ee("click",te,()=>n(!1)),ee("click",U,ae),ee("click",Te,()=>{de(!1)}),ee("click",Re,()=>{de(!0)}),v(ie,Z)};let ne=c(()=>l("Create link"));yn(r,{get title(){return t(ne)},width:"720px",top:"min(12vh, 96px)",testId:"add-link-dialog",get open(){return n()},set open(ie){n(ie)},buttons:G,children:(ie,Z)=>{var te=kS(),j=Ie(te),U=w(j),fe=m(U,!0),Te=d(U,2),ce=w(Te);{let se=c(()=>l("Sender")),W=c(()=>l("Select")),V=c(()=>l("Filter")),T=c(()=>l("Check all")),O=c(()=>l("Uncheck all"));oi(ce,{get options(){return t(x)},get label(){return t(se)},get placeholder(){return t(W)},get filterLabel(){return t(V)},get checkAllLabel(){return t(T)},get uncheckAllLabel(){return t(O)},summary:J=>l("{count} channels selected",{},J.length),testId:"add-link-senders",inline:!0,get selected(){return t(f)},set selected(J){u(f,J,!0)}})}var Re=d(ce,2),xe=m(Re),ge=d(Te,2),M=m(ge,!0),ue=d(ge,2),he=w(ue);{let se=c(()=>t(f).length===0),W=c(()=>l("Receiver")),V=c(()=>t(f).length===0?l("Sender"):l("Select")),T=c(()=>l("Filter")),O=c(()=>l("Check all")),J=c(()=>l("Uncheck all"));oi(he,{get options(){return t(D)},get disabled(){return t(se)},get label(){return t(W)},get placeholder(){return t(V)},get filterLabel(){return t(T)},get checkAllLabel(){return t(O)},get uncheckAllLabel(){return t(J)},summary:_e=>l("{count} channels selected",{},_e.length),testId:"add-link-receivers",inline:!0,get selected(){return t(p)},set selected(_e){u(p,_e,!0)}})}var ve=d(he,2),ye=m(ve),Y=d(ue,2);{var X=se=>{var W=_S(),V=Ie(W),T=m(V,!0),O=d(V,2),J=w(O),_e=d(J,2),Ce=m(_e,!0),Fe=d(O,2),We=m(Fe,!0),Ze=d(Fe,2),nt=w(Ze);E((ke,we,H,F,Ne)=>{h(T,ke),I(J,"aria-label",we),h(Ce,H),h(We,F),I(nt,"aria-label",Ne)},[()=>l("Name"),()=>l("Name"),()=>l("Used for every pair without its own name"),()=>l("Description"),()=>l("Description")]),An(J,()=>t(k),ke=>u(k,ke)),An(nt,()=>t(y),ke=>u(y,ke)),v(se,W)},L=c(()=>K().length>0);$(Y,se=>{t(L)&&se(X)})}var z=d(Y,2);{var le=se=>{var W=ES(),V=d(Ie(W),2),T=m(V,!0);E(O=>h(T,O),[()=>l("No channel can receive from this sender")]),v(se,W)};$(z,se=>{t(f).length>0&&t(D).length===0&&se(le)})}var me=d(j,2);{var be=se=>{var W=SS(),V=w(W),T=w(V),O=w(T),J=m(O,!0),_e=d(O),Ce=m(_e,!0),Fe=d(_e),We=m(Fe,!0),Ze=d(Fe),nt=m(Ze,!0),ke=d(V);je(ke,21,K,we=>q(we.sender,we.receiver),(we,H)=>{var F=yS(),Ne=w(F),Me=m(Ne,!0),Ke=d(Ne),pe=m(Ke,!0),De=d(Ke),Pe=w(De),Ge=d(De),Le=w(Ge);E((Ye,Xe,ze,Je,dt,pt,gt)=>{I(F,"data-testid",Ye),h(Me,Xe),h(pe,ze),I(Pe,"aria-label",Je),rn(Pe,dt),I(Pe,"placeholder",t(k)),I(Le,"aria-label",pt),rn(Le,gt),I(Le,"placeholder",t(y))},[()=>`add-link-pair-${q(t(H).sender,t(H).receiver)}`,()=>o.nameOf(t(H).sender),()=>o.nameOf(t(H).receiver),()=>`${l("Name")} ${t(H).sender} ${t(H).receiver}`,()=>t(b)[q(t(H).sender,t(H).receiver)]?.name??"",()=>`${l("Description")} ${t(H).sender} ${t(H).receiver}`,()=>t(b)[q(t(H).sender,t(H).receiver)]?.description??""]),ee("input",Pe,Ye=>re(t(H).sender,t(H).receiver,"name",Ye.currentTarget.value)),ee("input",Le,Ye=>re(t(H).sender,t(H).receiver,"description",Ye.currentTarget.value)),v(we,F)}),E((we,H,F,Ne)=>{h(J,we),h(Ce,H),h(We,F),h(nt,Ne)},[()=>l("Sender"),()=>l("Receiver"),()=>l("Name"),()=>l("Description")]),v(se,W)},Ee=c(()=>K().length>1);$(me,se=>{t(Ee)&&se(be)})}E((se,W)=>{h(fe,se),h(xe,`LINK_SOURCE_ROLES: ${t(C)??""}`),h(M,W),h(ye,`LINK_TARGET_ROLES: ${t(R)??""}`)},[()=>l("Sender"),()=>l("Receiver")]),v(ie,te)},$$slots:{buttons:!0,default:!0}})}mt()}kt(["click","input"]);var wS=_('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="smoke-group-apply"> </button>',1),AS=_('— TEAM_TAG <span class="hmm-mono"> </span>',1),TS=_('<p class="hmm-smoke-muted svelte-1spai3u"><span class="hmm-mono"> </span> <!></p>'),nu=_('<p class="hmm-smoke-muted svelte-1spai3u"> </p>'),RS=_('<p class="hmm-smoke-muted svelte-1spai3u" data-testid="smoke-group-none"> </p>'),xS=_('<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>'),IS=_('<ul class="hmm-smoke-list svelte-1spai3u" data-testid="smoke-group-candidates"></ul>'),DS=_('<div class="hmm-smoke-form svelte-1spai3u"><!> <p class="hmm-smoke-heading svelte-1spai3u"> </p> <!></div>');function NS(r,e){ht(e,!0);let n=B(e,"open",15,!1),s=B(e,"group",3,void 0),a=B(e,"isNew",3,!1);const i=jt(),o=i.i18n.t;let l=N(Be([])),f=N(!1);const p=c(()=>i.app.selectedInterface),g=c(()=>i.devices.index(t(p))),b=c(()=>i.smokeGroups.of(t(p))),k=c(()=>s()?.kind==="hmip"&&i.smokeGroups.isLoading(t(p))),y=c(()=>{if(s()===void 0||t(g)===void 0)return[];const K=s();return t(g).channels().filter(q=>(q.TEAM_CHANNELS??[]).length>0?!1:K.kind==="team"?(q.TEAM_TAG??"")!==""&&q.TEAM_TAG===K.teamTag:Jf(q))});function S(K){return s()?.kind==="team"||(t(b)[K]??null)!==null}function A(K){if(s()===void 0)return"";if(s().kind==="team"){const re=t(g)===void 0?void 0:eh(t(g),K);return re===void 0||re===s().address||(t(g)?.get(t(g).get(K)?.TEAM??"")?.TEAM_CHANNELS??[]).length<2?"":o("in {team}",{team:i.nameOf(re)})}const q=(t(b)[K]??[]).filter(re=>re!==s().number);return q.length===0?"":o("also in {groups}",{groups:q.map(re=>o("Smoke group {n}",{n:re})).join(", ")})}lt(()=>{n()&&gr(()=>{u(l,[...s()?.members??[]],!0)})});function x(K,q){u(l,q?[...t(l),K]:t(l).filter(re=>re!==K),!0)}const D=c(()=>Cb(s()?.members??[],t(l))),C=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 P(){if(s()===void 0||!t(C))return;const{added:K,removed:q}=t(D);u(f,!0);try{if(s().kind==="team"){const de=s().teamChannel??"";await i.devices.setTeams(t(p),[...K.map(ne=>({address:ne,teamAddress:de})),...q.map(ne=>({address:ne,teamAddress:""}))])===K.length+q.length&&n(!1);return}const re=await i.smokeGroups.setMembers(t(p),s().number??0,K,q),ae=re.filter(de=>!de.ok);for(const de of ae)i.notices.push("error",`${i.nameOf(de.address)}: ${de.problems.map(G=>G.message).join("; ")||(de.faultString??"")}`,t(p));ae.length===0&&re.length===K.length+q.length&&n(!1)}finally{u(f,!1)}}yn(r,{get title(){return t(R)},width:"600px",testId:"smoke-group-dialog",get open(){return n()},set open(q){n(q)},buttons:q=>{var re=wS(),ae=Ie(re),de=m(ae,!0),G=d(ae,2),ne=m(G,!0);E((ie,Z)=>{h(de,ie),G.disabled=t(f)||!t(C),h(ne,Z)},[()=>o("Cancel"),()=>o("Apply")]),ee("click",ae,()=>n(!1)),ee("click",G,()=>{P()}),v(q,re)},children:(q,re)=>{var ae=wt(),de=Ie(ae);{var G=ne=>{var ie=DS(),Z=w(ie);{var te=M=>{var ue=TS(),he=w(ue),ve=m(he,!0),ye=d(he,2);{var Y=X=>{var L=AS(),z=d(Ie(L)),le=m(z,!0);E(()=>h(le,s().teamTag)),v(X,L)};$(ye,X=>{s().teamTag&&X(Y)})}E(()=>h(ve,s().address)),v(M,ue)},j=M=>{var ue=nu(),he=m(ue);E((ve,ye)=>h(he,`${ve??""}
14
+ ${ye??""}`),[()=>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(M,ue)};$(Z,M=>{s().kind==="team"?M(te):M(j,-1)})}var U=d(Z,2),fe=m(U,!0),Te=d(U,2);{var ce=M=>{var ue=nu(),he=m(ue,!0);E(ve=>h(he,ve),[()=>o("Loading")]),v(M,ue)},Re=c(()=>t(k)&&t(y).some(M=>!(M.ADDRESS in t(b)))),xe=M=>{var ue=RS(),he=m(ue,!0);E(ve=>h(he,ve),[()=>o("This interface has no smoke detector")]),v(M,ue)},ge=M=>{var ue=IS();je(ue,21,()=>t(y),he=>he.ADDRESS,(he,ve)=>{const ye=c(()=>S(t(ve).ADDRESS));var Y=xS(),X=w(Y);let L;var z=w(X),le=d(z,2),me=m(le,!0),be=d(le,2),Ee=m(be,!0),se=d(be,2),W=m(se,!0);E((V,T,O)=>{L=St(X,1,"hmm-smoke-member svelte-1spai3u",null,L,{"hmm-smoke-member-off":!t(ye)}),z.disabled=!t(ye),Rr(z,V),I(z,"data-testid",`smoke-group-member-${t(ve).ADDRESS}`),h(me,T),h(Ee,t(ve).ADDRESS),h(W,O)},[()=>t(l).includes(t(ve).ADDRESS),()=>i.nameOf(t(ve).ADDRESS),()=>t(ye)?A(t(ve).ADDRESS):o("cannot be grouped - no GROUP parameters")]),ee("change",z,V=>x(t(ve).ADDRESS,V.currentTarget.checked)),v(he,Y)}),v(M,ue)};$(Te,M=>{t(Re)?M(ce):t(y).length===0?M(xe,1):M(ge,-1)})}E(M=>h(fe,M),[()=>o("Members")]),v(ne,ie)};$(de,ne=>{s()!==void 0&&ne(G)})}v(q,ae)},$$slots:{buttons:!0,default:!0}}),mt()}kt(["click","change"]);var CS=_('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="team-apply"> </button>',1),PS=_('<p data-testid="team-none"> </p>'),MS=_("<option> </option>"),OS=_('<p class="hmm-team-members svelte-1ervkxt" data-testid="team-members"> </p>'),LS=_('<p class="hmm-team-empty svelte-1ervkxt" data-testid="team-empty"> </p>'),FS=_('<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 GS(r,e){ht(e,!0);let n=B(e,"open",15,!1),s=B(e,"address",3,"");const a=jt(),i=a.i18n.t;let o=N(Be([])),l=N(""),f=N(!1);const p=c(()=>a.app.selectedInterface),g=c(()=>a.devices.index(t(p))),b=c(()=>t(g)?.get(s())),k=c(()=>t(b)?.TEAM_TAG??""),y=c(()=>t(b)?.TEAM??""),S=c(()=>t(o).filter(D=>(D.TEAM_TAG??"")===t(k)));lt(()=>{!n()||t(p)===""||s()===""||(u(l,t(y),!0),a.devices.teams(t(p)).then(D=>{u(o,D,!0)}))});function A(D){const C=D.TEAM_CHANNELS??[];return C.length===0?i("No data"):C.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 P=CS(),K=Ie(P),q=m(K,!0),re=d(K,2),ae=m(re,!0);E((de,G)=>{h(q,de),re.disabled=t(f)||t(k)===""||t(l)===t(y),h(ae,G)},[()=>i("Cancel"),()=>i("Apply")]),ee("click",K,()=>n(!1)),ee("click",re,()=>{x()}),v(R,P)};let C=c(()=>i("Team"));yn(r,{get title(){return t(C)},width:"560px",testId:"team-dialog",get open(){return n()},set open(R){n(R)},buttons:D,children:(R,P)=>{var K=wt(),q=Ie(K);{var re=de=>{var G=PS(),ne=m(G,!0);E(ie=>h(ne,ie),[()=>i("This channel does not belong to a team")]),v(de,G)},ae=de=>{var G=FS(),ne=Ie(G),ie=w(ne),Z=m(ie,!0),te=d(ie,2),j=m(te,!0),U=d(ne,2),fe=w(U),Te=m(fe,!0),ce=d(fe,2),Re=w(ce),xe=m(Re,!0);Re.value=Re.__value="";var ge=d(Re);je(ge,17,()=>t(S),ye=>ye.ADDRESS,(ye,Y)=>{var X=MS(),L=m(X),z={};E(le=>{h(L,`${le??""} (${t(Y).ADDRESS??""})`),z!==(z=t(Y).ADDRESS)&&(X.value=(X.__value=z)??"")},[()=>a.nameOf(t(Y).ADDRESS)]),v(ye,X)}),Qt(ce);var M=d(U,2);{var ue=ye=>{const Y=c(()=>t(S).find(le=>le.ADDRESS===t(l)));var X=wt(),L=Ie(X);{var z=le=>{var me=OS(),be=m(me);E((Ee,se)=>h(be,`${Ee??""}: ${se??""}`),[()=>i("Members"),()=>A(t(Y))]),v(le,me)};$(L,le=>{t(Y)&&le(z)})}v(ye,X)};$(M,ye=>{t(l)!==""&&ye(ue)})}var he=d(M,2);{var ve=ye=>{var Y=LS(),X=m(Y,!0);E(L=>h(X,L),[()=>i("The interface knows no other team yet")]),v(ye,Y)};$(he,ye=>{t(S).length===0&&ye(ve)})}E((ye,Y)=>{h(Z,s()),h(j,t(k)),h(Te,ye),h(xe,Y)},[()=>i("Team"),()=>i("Own team")]),br(ce,()=>t(l),ye=>u(l,ye)),v(de,G)};$(q,de=>{t(k)===""?de(re):de(ae,-1)})}v(R,K)},$$slots:{buttons:!0,default:!0}})}mt()}kt(["click"]);function Gh(r,e){return Ad(e,r.pair)?.seconds}function US(r,e){return Gh(r,e)===r.notUsedSeconds}function Uh(r,e){const n=lh(e,r.pair),s=Td(e,r.pair);if(!(!n||!s))return{values:s,exact:n.exact,seconds:n.seconds}}function BS(r,e){const n=[];for(const s of ho(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=oh(i);n.push({pair:s,unitDescription:a,countDescription:i,writable:Yr(a)&&Yr(i),notUsedSeconds:o??dh(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 hi(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 VS=["REFERENCE_RUNNING_TIME_TOP_BOTTOM","REFERENCE_RUNNING_TIME_BOTTOM_TOP","REFERENCE_RUNNING_TIME_SLATS"],HS=["CHANGE_OVER_DELAY","DELAY_COMPENSATION"],zS=["REFERENCE_RUN_COUNTER","ENDPOSITION_AUTO_DETECT"];function jS(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[Bh(n,e)],a=e[n.pair.countParam];if(!(s===void 0||typeof a!="number"))return Math.round(s.seconds*a*1e3)/1e3}function WS(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[Bh(n,e)];return`${String(e[n.pair.countParam]??"—")} × ${s?.name??"—"}`}function KS(r,e){if(!(!Number.isFinite(e)||e<0)){if(r.source.kind==="seconds"){const n=Xn(r.source.description,"MAX");return n!==void 0&&e>n?void 0:{values:{[r.source.param]:e},exact:!0,seconds:e}}return Uh(r.source.view,e)}}function YS(r,e){const{description:n}=r,s=new Map(ho(n).map(f=>[f.name,f])),a=[],i=[];for(const f of VS){const p=n[f],g=s.get(f);if(p){a.push({id:f,source:{kind:"seconds",param:f,description:p},writable:Yr(p)}),i.push(f);continue}const b=g&&n[g.unitParam],k=g&&n[g.countParam];if(!g||!b||!k)continue;const y=oh(k),S={pair:g,unitDescription:b,countDescription:k,writable:Yr(b)&&Yr(k),notUsedSeconds:y??dh(g),notUsedFromSpecial:y!==void 0};a.push({id:f,source:{kind:"pair",view:S},writable:S.writable}),i.push(g.unitParam,g.countParam)}if(a.length===0||i.some(f=>e.has(f)))return;const o=ru(n,HS),l=ru(n,zS);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 ru(r,e){return e.flatMap(n=>{const s=r[n];return s?[{param:n,description:s}]:[]})}function Bh(r,e){const n=e[r.pair.unitParam];return typeof n=="number"?n:r.pair.units.findIndex(s=>s.name===n)}function qS(r,e,n){const s=[];for(const[a,i]of Object.entries(r.description)){const o=Ps(i);if(i.TYPE!=="ENUM"||!o||o.length===0||e.has(a))continue;const l=n.preset(a),f=l?$S(l.presets,o,n):XS(a,o,n);!f||f.length===0||s.push({param:a,description:i,options:f,writable:Yr(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 $S(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:pd(a,o=>n.uiLabel(o)),raw:e[i]??"",named:!0})}return s}function XS(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 bs(r,e){return`${r}_WP_${e}`}const QS=/^(\d+)_WP_(.+)$/,su=["WEEKDAY","TIME","CONDITION","ASTRO_TYPE","ASTRO_OFFSET","LEVEL","LEVEL_2","DURATION","RAMP_TIME","OUTPUT_BEHAVIOUR","TARGET_CHANNELS"],ZS=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];function JS(r,e){return typeof r=="number"&&(r&1<<e)!==0}function ek(r,e,n){const s=typeof r=="number"?r:0;return n?s|1<<e:s&~(1<<e)}function tk(r,e){const n=r[bs(e,"FIXED_HOUR")],s=r[bs(e,"FIXED_MINUTE")];return typeof n!="number"||typeof s!="number"?"":`${String(n).padStart(2,"0")}:${String(s).padStart(2,"0")}`}function nk(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{[bs(r,"FIXED_HOUR")]:s,[bs(r,"FIXED_MINUTE")]:Number(n[2])}}function rk(r,e){const n=r[bs(e,"WEEKDAY")];return typeof n!="number"||n===0}function sk(r,e){const{description:n}=r,s=new Map,a=[];for(const A of Object.keys(n)){const x=QS.exec(A),D=x?.[1],C=x?.[2];if(!x||D===void 0||C===void 0)continue;let R=s.get(D);R||(R=new Set,s.set(D,R)),R.add(C),a.push(A)}const i=[...s.keys()].sort((A,x)=>Number(A)-Number(x)),o=i[0],l=o===void 0?void 0:s.get(o);if(o===void 0||!l||!l.has("WEEKDAY")||a.some(A=>e.has(A)))return;const f=[...l].sort().join(",");for(const A of i)if([...s.get(A)??[]].sort().join(",")!==f)return;const p=new Map(ho(n).map(A=>[A.name,A])),g={},b=[],k=new Set,y=(A,x,D)=>{const C=n[bs(o,D[0]??"")];if(!(!C||D.some(R=>!l.has(R)))){b.push({id:A,kind:x,fields:D,description:C});for(const R of D)k.add(R)}};y("WEEKDAY","weekday",["WEEKDAY"]),y("TIME","time",["FIXED_HOUR","FIXED_MINUTE"]);for(const A of[...l].sort()){if(k.has(A)||!A.endsWith("_BASE"))continue;const x=A.slice(0,-5);if(!l.has(`${x}_FACTOR`))continue;let D=!0;for(const C of i){const R=p.get(`${C}_WP_${x}`);if(!R){D=!1;break}g[`${C}:${x}`]=R}D&&y(x,"duration",[A,`${x}_FACTOR`])}for(const A of[...l].sort())k.has(A)||y(A,n[bs(o,A)]?.TYPE==="ENUM"?"enum":"number",[A]);if(k.size!==l.size)return;b.sort((A,x)=>au(A.id)-au(x.id)||(A.id<x.id?-1:1));const S=n[bs(o,"WEEKDAY")];return{kind:"switch-week-profile",id:"switch-week-profile",covers:a,slots:i,columns:b,durations:g,writable:S!==void 0&&Yr(S)}}function au(r){const e=su.indexOf(r);return e===-1?su.length:e}const ji=["MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY","SUNDAY"],ak=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],iu=["ENDTIME","TIMEOUT"],ou=["TEMPERATURE","TEMPERATUR"],ik=/^(?:(P\d+)_)?([A-Z]+)_([A-Z]+)_(\d+)$/;function Wr(r,e,n){return`${r}_${e}_${n}`}function Kl(r,e,n,s,a){return{endTime:lu(e[Wr(n.endTimePrefix,s,a)]),value:lu(e[Wr(n.valuePrefix,s,a)])}}function ok(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}=Kl(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 lk(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)Vh(i,e,n,s,n,o,l);return i}function dk(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)Vh(a,e,n,o,i,o,l);return a}function za(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 ck(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 uk(r,e){const{description:n}=r,s=[],a=new Map;let i=0;for(const S of Object.keys(n)){const A=ik.exec(S),x=A?.[3],D=A?.[2];if(!A||!x||!D||!ji.includes(x)||!iu.includes(D)&&!ou.includes(D))continue;const C=A[1]??"";s.push(S);let R=a.get(C);R||(R=new Set,a.set(C,R)),R.add(D),i=Math.max(i,Number(A[4]))}if(s.length===0||i===0)return;const o=[];let l="",f="";for(const[S,A]of[...a].sort(([x],[D])=>x<D?-1:1)){const x=[...A].find(R=>iu.includes(R)),D=[...A].find(R=>ou.includes(R));if(A.size!==2||x===void 0||D===void 0||l!==""&&(x!==l||D!==f))return;l=x,f=D;const C=S===""?"":`${S}_`;o.push({id:S,endTimePrefix:`${C}${x}`,valuePrefix:`${C}${D}`})}const p=[];for(const S of o)for(const A of ji)for(let x=1;x<=i;x+=1)p.push(Wr(S.endTimePrefix,A,x),Wr(S.valuePrefix,A,x));if(p.length!==s.length||p.some(S=>!(S in n)||e.has(S)))return;const g=o[0],b=g&&n[Wr(g.endTimePrefix,"MONDAY",1)],k=g&&n[Wr(g.valuePrefix,"MONDAY",1)],y=b===void 0?void 0:Xn(b,"MAX");if(!(!b||!k||y===void 0))return{kind:"week-profile",id:"week-profile",covers:p,profiles:o,days:ji,slots:i,endTimeField:l,valueField:f,endTimeDescription:b,valueDescription:k,dayEnd:y,writable:Yr(b)&&Yr(k)}}function Vh(r,e,n,s,a,i,o){const l=e[Wr(n.endTimePrefix,s,o)],f=e[Wr(n.valuePrefix,s,o)];l!==void 0&&(r[Wr(a.endTimePrefix,i,o)]=l),f!==void 0&&(r[Wr(a.valuePrefix,i,o)]=f)}function lu(r){return typeof r=="number"&&Number.isFinite(r)?r:void 0}const fk={optionByName:()=>{},optionByIndex:()=>{},preset:()=>{},uiLabel:r=>r},hk=[uk,sk,YS,BS,qS];function mk(r,e=fk){const n=[],s=new Set;for(const a of hk){const i=a(r,s,e);if(i){n.push(i);for(const o of i.covers)s.add(o)}}return n}function vk(r){return new Set(r.flatMap(e=>e.covers))}function pk(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 Hh(r,e){const n=e?e.parameters.map(a=>a.name):kd(r),s=new Map((e?.parameters??[]).map(a=>[a.name,a]));return n.map(a=>{const i=r[a];if(!i)return;const o=aa(Xn(i,"MIN"),i),l=aa(Xn(i,"MAX"),i),f=s.get(a)?.preset,p=Ps(i);return{name:a,description:i,kind:pk(i),writable:Yr(i),unit:ro(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 qa(r,e,n,s){const a=g_(r,e,n,{enumAs:d_(s.interfaceName),...s.writeAll===!0?{writeAll:!0}:{}});return{targets:[...s.targets],entries:a.changed.map(i=>({param:i,from:Da(r[i],n[i]),to:Da(a.values[i],n[i])})),values:a.values,skipped:a.skipped,problems:a.problems}}function gk(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 du(r){const e=r.senderValues??{};return{...Object.keys(r.values).length>0?{receiverToSender:r.values}:{},...Object.keys(e).length>0?{senderToReceiver:e}:{}}}function Da(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"?Ps(e)?.[n]??String(n):typeof n=="boolean"?n?"true":"false":String(n)}function Yl(r,e,n){return Object.keys(r).map(s=>{const a=Da(r[s],n[s]),i=Da(e[s],n[s]);return{param:s,sent:a,stored:i,differs:a!==i}})}function zh(r){return kd(r).filter(e=>F_(e)?e!=="DUTY_CYCLE"||r[e]?.TYPE==="BOOL":!1)}function bk(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])=>L1(r.address,s,a))}}const _k=[Qa,"UI_TEMPLATE"];function Qo(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=Hh(r).filter(p=>!_k.includes(p.name)),f=new Map(a.map((p,g)=>[p,g]));return l.sort((p,g)=>(f.get(p.name)??Number.MAX_SAFE_INTEGER)-(f.get(g.name)??Number.MAX_SAFE_INTEGER)),l.map(p=>{const g=s[p.name],b=o[i[p.name]??""];return{...p,...b===void 0?{}:{preset:b},fixedByProfile:g?.kind==="fixed",...g?.kind==="list"?{allowed:g.values}:{},...g?.kind==="range"?{range:{min:g.min,max:g.max}}:{}}})}function cu(r,e){const n=r.name;return n[e]??n.en??n.de??r.key}function Ek(r,e){const n=r.description;return n[e]??n.en??n.de??""}var yk=_('<span class="hmm-param-id svelte-1qr2qb3"> </span>'),Sk=_('<input type="checkbox" class="svelte-1qr2qb3"/>'),Zo=_("<option> </option>"),kk=_('<select class="hmm-select hmm-param-enum svelte-1qr2qb3"></select>'),wk=_('<input class="hmm-input hmm-param-number svelte-1qr2qb3" type="number"/>'),Ak=_('<select class="hmm-select hmm-param-special svelte-1qr2qb3"><option> </option><!></select>'),Tk=_('<select class="hmm-select hmm-param-preset svelte-1qr2qb3"><option>…</option><!></select>'),Rk=_("<!> <!> <!>",1),xk=_('<input class="hmm-input hmm-param-text svelte-1qr2qb3" type="text"/>'),Ik=_('<span class="hmm-param-unit svelte-1qr2qb3"> </span>'),Dk=_("<span> </span>"),Nk=_('<div class="hmm-param-set svelte-1qr2qb3"><button type="button" class="hmm-button">setValue</button></div>'),Ck=_('<label class="hmm-param-suppress svelte-1qr2qb3"><input type="checkbox"/> <span> </span></label>'),Pk=_('<div class="hmm-param-flag svelte-1qr2qb3"><span class="hmm-param-ro"> </span></div>'),Mk=_('<div class="hmm-param-range svelte-1qr2qb3"> </div>'),Ok=_('<div class="hmm-param-default svelte-1qr2qb3"> </div>'),Lk=_('<p class="hmm-param-help hmm-param-table-wide svelte-1qr2qb3"> </p>'),Fk=_('<div><div class="hmm-param-label svelte-1qr2qb3"><span> </span> <!></div> <div class="hmm-param-control svelte-1qr2qb3"><!> <!> <!></div> <!> <!> <!> <!> <!> <!></div>');function Ea(r,e){ht(e,!0);let n=B(e,"help",3,void 0),s=B(e,"valueLabel",3,void 0),a=B(e,"presetLabel",3,void 0),i=B(e,"valueState",3,void 0),o=B(e,"onset",3,void 0),l=B(e,"changed",3,!1),f=B(e,"disabled",3,!1),p=B(e,"entry",3,!1),g=B(e,"suppressed",3,void 0),b=B(e,"onsuppress",3,void 0),k=B(e,"suppressLabel",3,""),y=B(e,"suppressTitle",3,void 0),S=B(e,"suppressChanged",3,!1);const A=jt(),x=A.i18n.t,D=c(()=>f()||!e.field.writable),C=c(()=>e.field.kind==="integer"||e.field.kind==="float"),R=c(()=>t(C)?aa(Z(e.value),e.field.description):e.value),P=c(()=>t(R)===void 0||t(R)===null?"":String(t(R))),K=c(()=>Z(e.value)??-1),q=c(()=>e.field.special.find(H=>H.VALUE===Z(e.value)));let re=N(void 0);const ae=c(()=>t(q)!==void 0&&!p()&&(t(re)===void 0||t(re).on!==e.value));let de=N(void 0),G;lt(()=>{const H=Z(e.value);H!==void 0&&t(q)===void 0&&(G=H)});const ne=c(()=>e.field.preset?.presets.find(H=>H.value===Z(e.value))),ie=c(()=>e.label!==e.field.name);function Z(H){if(typeof H=="number")return H;if(typeof H=="string"&&H.trim()!==""&&Number.isFinite(Number(H)))return Number(H)}function te(H){if(H==="")return;const F=_c(Number(H),e.field.description);F!==void 0&&Number.isFinite(F)&&e.onchange(F)}function j(H){return s()?s()(H):H}function U(H){const F=j(H);return F!==H?F:A.meta.specialLabel(e.field.name,H)}function fe(H){if(H===void 0||e.field.special.some(Ne=>Ne.VALUE===H))return!1;const F=aa(H,e.field.description);return typeof F=="number"&&(e.field.min===void 0||F>=e.field.min)&&(e.field.max===void 0||F<=e.field.max)}function Te(){const H=Z(e.field.description.DEFAULT);return fe(H)?H:fe(G)?G:_c(e.field.min??0,e.field.description)??0}async function ce(H){const F=e.field.special.find(Ne=>Ne.ID===H);if(F){u(re,void 0),e.onchange(F.VALUE);return}u(re,{on:e.value,draft:Te()},!0),await ti(),t(de)?.focus(),t(de)?.select()}function Re(H){const F=[x("Last change: {time}",{time:H.lc===void 0?"–":Xa(H.lc)}),x("Last report: {time}",{time:Xa(H.ts)})];return H.confirmed||F.push(x("Restored by the system from its own file; no device has reported it since the system started.")),F.push(x("The openccu-lite system's clock")),F.join(`
15
+ `)}var xe=Fk();let ge;var M=w(xe),ue=w(M),he=m(ue,!0),ve=d(ue,2);{var ye=H=>{var F=yk(),Ne=m(F,!0);E(()=>h(Ne,e.field.name)),v(H,F)};$(ve,H=>{t(ie)&&H(ye)})}var Y=d(M,2),X=w(Y);{var L=H=>{var F=Sk();E(()=>{Rr(F,e.value===!0||e.value==="true"||e.value===1),F.disabled=t(D),I(F,"aria-label",e.label)}),ee("change",F,Ne=>e.onchange(Ne.currentTarget.checked)),v(H,F)},z=H=>{var F=kk();je(F,22,()=>e.field.valueList??[],Me=>Me,(Me,Ke,pe,De)=>{var Pe=Zo(),Ge=m(Pe,!0),Le={};E((Ye,Xe)=>{h(Ge,Ye),Le!==(Le=Xe)&&(Pe.value=(Pe.__value=Le)??"")},[()=>j(Ke),()=>String(t(pe))]),v(Me,Pe)});var Ne;Qt(F),E(Me=>{F.disabled=t(D),I(F,"aria-label",e.label),Ne!==(Ne=Me)&&(F.value=(F.__value=Ne)??"",Cn(F,Ne))},[()=>String(t(K))]),ee("change",F,Me=>e.onchange(Number(Me.currentTarget.value))),v(H,F)},le=H=>{var F=Rk(),Ne=Ie(F);{var Me=Ge=>{var Le=wk();_n(Le,Ye=>u(de,Ye),()=>t(de)),E(Ye=>{I(Le,"min",e.field.min),I(Le,"max",e.field.max),I(Le,"step",e.field.step),Le.disabled=t(D),I(Le,"aria-label",e.label),rn(Le,Ye)},[()=>t(q)===void 0?t(P):String(aa(t(re)!==void 0&&t(re).on===e.value?t(re).draft:Te(),e.field.description))]),ee("input",Le,Ye=>te(Ye.currentTarget.value)),v(Ge,Le)};$(Ne,Ge=>{t(ae)||Ge(Me)})}var Ke=d(Ne,2);{var pe=Ge=>{var Le=Ak(),Ye=w(Le),Xe=m(Ye,!0);Ye.value=Ye.__value="";var ze=d(Ye);je(ze,17,()=>e.field.special,dt=>dt.ID,(dt,pt)=>{var gt=Zo(),Se=m(gt,!0),Oe={};E($e=>{h(Se,$e),Oe!==(Oe=t(pt).ID)&&(gt.value=(gt.__value=Oe)??"")},[()=>U(t(pt).ID)]),v(dt,gt)});var Je;Qt(Le),E(dt=>{Le.disabled=t(D),I(Le,"aria-label",`${e.label} SPECIAL`),h(Xe,dt),Je!==(Je=t(ae)?t(q)?.ID??"":"")&&(Le.value=(Le.__value=Je)??"",Cn(Le,Je))},[()=>x("Enter value")]),ee("change",Le,dt=>{ce(dt.currentTarget.value)}),v(Ge,Le)};$(Ke,Ge=>{e.field.special.length>0&&Ge(pe)})}var De=d(Ke,2);{var Pe=Ge=>{var Le=Tk(),Ye=w(Le);Ye.value=Ye.__value="";var Xe=d(Ye);je(Xe,17,()=>e.field.preset.presets,Je=>String(Je.value),(Je,dt,pt,gt)=>{var Se=Zo(),Oe=m(Se,!0),$e={};E((ft,Et)=>{h(Oe,ft),$e!==($e=Et)&&(Se.value=(Se.__value=$e)??"")},[()=>pd(t(dt),a()??j),()=>String(t(dt).value)]),v(Je,Se)});var ze;Qt(Le),E(Je=>{Le.disabled=t(D),I(Le,"aria-label",`${e.label} presets`),ze!==(ze=Je)&&(Le.value=(Le.__value=ze)??"",Cn(Le,ze))},[()=>t(ne)===void 0?"":String(t(ne).value)]),ee("change",Le,Je=>{const dt=e.field.preset?.presets.find(pt=>String(pt.value)===Je.currentTarget.value);dt!==void 0&&e.onchange(dt.value)}),v(Ge,Le)};$(De,Ge=>{e.field.preset&&Ge(Pe)})}v(H,F)},me=H=>{var F=xk();E(()=>{F.disabled=t(D),I(F,"aria-label",e.label),rn(F,t(P))}),ee("input",F,Ne=>e.onchange(Ne.currentTarget.value)),v(H,F)};$(X,H=>{e.field.kind==="bool"||e.field.kind==="action"?H(L):e.field.kind==="enum"?H(z,1):t(C)?H(le,2):H(me,-1)})}var be=d(X,2);{var Ee=H=>{var F=Ik(),Ne=m(F,!0);E(()=>h(Ne,e.field.unit)),v(H,F)};$(be,H=>{e.field.unit!==""&&!t(ae)&&H(Ee)})}var se=d(be,2);{var W=H=>{var F=Dk();let Ne;var Me=m(F,!0);E((Ke,pe,De)=>{Ne=St(F,1,"hmm-param-since svelte-1qr2qb3",null,Ne,{"hmm-param-restored":!i().confirmed}),I(F,"title",Ke),I(F,"data-testid",`since-${e.field.name}`),I(F,"data-confirmed",pe),h(Me,De)},[()=>Re(i()),()=>String(i().confirmed),()=>i().confirmed?x("since {time}",{time:Xa(i().lc??i().ts)}):x("restored")]),v(H,F)};$(se,H=>{i()&&H(W)})}var V=d(Y,2);{var T=H=>{var F=Nk(),Ne=m(F);E(()=>{Ne.disabled=t(D),I(Ne,"data-testid",`set-${e.field.name}`)}),ee("click",Ne,()=>o()()),v(H,F)};$(V,H=>{o()&&H(T)})}var O=d(V,2);{var J=H=>{var F=Ck(),Ne=w(F),Me=d(Ne,2),Ke=m(Me,!0);E(()=>{I(F,"title",y()),Rr(Ne,g()===!0),I(Ne,"data-testid",`suppress-${e.field.name}`),h(Ke,k())}),ee("change",Ne,pe=>b()(pe.currentTarget.checked)),v(H,F)};$(O,H=>{b()&&H(J)})}var _e=d(O,2);{var Ce=H=>{var F=Pk(),Ne=w(F),Me=m(Ne,!0);E((Ke,pe)=>{I(Ne,"title",Ke),h(Me,pe)},[()=>x("Read-only"),()=>x("ro")]),v(H,F)};$(_e,H=>{e.field.writable||H(Ce)})}var Fe=d(_e,2);{var We=H=>{var F=Mk(),Ne=m(F);E(()=>h(Ne,`${e.field.min??"−∞"??""} … ${e.field.max??"∞"??""}`)),v(H,F)};$(Fe,H=>{(e.field.min!==void 0||e.field.max!==void 0)&&!t(ae)&&H(We)})}var Ze=d(Fe,2);{var nt=H=>{const F=c(()=>e.field.special.find(Ke=>Ke.VALUE===Z(e.field.description.DEFAULT)));var Ne=Ok(),Me=m(Ne,!0);E(Ke=>h(Me,Ke),[()=>x("default {value}",{value:t(F)?U(t(F).ID):String(e.field.description.DEFAULT)})]),v(H,Ne)};$(Ze,H=>{e.field.description.DEFAULT!==void 0&&H(nt)})}var ke=d(Ze,2);{var we=H=>{var F=Lk(),Ne=m(F,!0);E(()=>h(Ne,n())),v(H,F)};$(ke,H=>{n()&&H(we)})}E(()=>{ge=St(xe,1,"hmm-param hmm-param-table-row svelte-1qr2qb3",null,ge,{"hmm-param-changed":l()||S()}),I(xe,"data-testid",`param-${e.field.name}`),I(ue,"title",e.field.name),h(he,e.label)}),v(r,xe),mt()}kt(["change","input","click"]);var Gk=_('<button type="button" class="hmm-button" data-testid="write-stage"> </button>'),Uk=_('<button type="button" class="hmm-button"> </button> <!> <button type="button" class="hmm-button" data-testid="write-confirm"> </button>',1),Bk=_('<p class="hmm-preview-call svelte-1aaq6az"> </p>'),Vk=_('<p class="hmm-preview-call svelte-1aaq6az">putParamset(<span class="hmm-mono"> </span>, <span class="hmm-mono"> </span>, <span class="hmm-mono"> </span>)</p>'),uu=_("<li> </li>"),Hk=_('<ul class="hmm-preview-warnings svelte-1aaq6az" data-testid="preview-warnings"></ul>'),zk=_('<p data-testid="preview-empty"> </p>'),fu=_('<span class="hmm-preview-side svelte-1aaq6az"> </span>'),jk=_('<tr><td class="hmm-mono svelte-1aaq6az"> <!></td><td class="svelte-1aaq6az"> </td><td class="hmm-preview-new svelte-1aaq6az"> </td></tr>'),Wk=_('<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),Kk=_('<ul class="hmm-preview-problems svelte-1aaq6az" data-testid="preview-problems"></ul>'),Yk=_('<tr><td class="hmm-mono svelte-1aaq6az"> <!></td><td class="svelte-1aaq6az"> </td><td class="svelte-1aaq6az"> </td></tr>'),qk=_('<p class="hmm-preview-warn svelte-1aaq6az" data-testid="readback-warning"> </p>'),$k=_('<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),Xk=_('<li><span class="hmm-mono"> </span> </li>'),Qk=_('<ul class="hmm-preview-results svelte-1aaq6az" data-testid="preview-results"></ul>'),Zk=_("<!> <!> <!> <!> <!> <!>",1);function ql(r,e){ht(e,!0);let n=B(e,"open",15,!1),s=B(e,"preview",3,void 0),a=B(e,"paramset",3,"MASTER"),i=B(e,"warnings",19,()=>[]),o=B(e,"writing",3,!1),l=B(e,"results",19,()=>[]),f=B(e,"readBack",19,()=>[]),p=B(e,"onstage",3,void 0),g=B(e,"confirmLabel",3,void 0),b=B(e,"countText",3,void 0);const y=jt().i18n.t,S=c(()=>s()===void 0||s().entries.length===0),A=520;{const x=C=>{var R=Uk(),P=Ie(R),K=m(P,!0),q=d(P,2);{var re=G=>{var ne=Gk(),ie=m(ne,!0);E(Z=>{ne.disabled=o()||t(S),h(ie,Z)},[()=>y("Add to pending changes")]),ee("click",ne,()=>p()()),v(G,ne)};$(q,G=>{p()&&G(re)})}var ae=d(q,2),de=m(ae,!0);E((G,ne)=>{h(K,G),ae.disabled=o()||t(S),h(de,ne)},[()=>y("Close"),()=>g()??y("Write")]),ee("click",P,()=>n(!1)),ee("click",ae,()=>e.onconfirm()),v(C,R)};let D=c(()=>y("Preview"));yn(r,{get title(){return t(D)},width:"960px",minWidth:360,minHeight:A,testId:"write-preview",get open(){return n()},set open(C){n(C)},buttons:x,children:(C,R)=>{var P=wt(),K=Ie(P);{var q=re=>{var ae=Zk(),de=Ie(ae);{var G=M=>{var ue=wt(),he=Ie(ue);je(he,18,()=>s().calls,ve=>ve,(ve,ye,Y)=>{var X=Bk(),L=m(X,!0);E(z=>{I(X,"data-testid",z),h(L,ye)},[()=>`preview-call-${String(t(Y))}`]),v(ve,X)}),v(M,ue)},ne=M=>{var ue=wt(),he=Ie(ue);je(he,16,()=>s().targets,ve=>ve,(ve,ye)=>{var Y=Vk(),X=d(w(Y)),L=m(X,!0),z=d(X,2),le=m(z,!0),me=d(z,2),be=m(me,!0);E(Ee=>{I(Y,"data-testid",`preview-call-${ye}`),h(L,ye),h(le,a()),h(be,Ee)},[()=>JSON.stringify(s().values)]),v(ve,Y)}),v(M,ue)};$(de,M=>{s().calls?M(G):M(ne,-1)})}var ie=d(de,2);{var Z=M=>{var ue=Hk();je(ue,20,i,he=>he,(he,ve)=>{var ye=uu(),Y=m(ye,!0);E(()=>h(Y,ve)),v(he,ye)}),v(M,ue)};$(ie,M=>{i().length>0&&M(Z)})}var te=d(ie,2);{var j=M=>{var ue=zk(),he=m(ue,!0);E(ve=>h(he,ve),[()=>y("Nothing has changed - nothing will be written")]),v(M,ue)},U=M=>{var ue=Wk(),he=Ie(ue),ve=w(he),ye=w(ve),Y=w(ye),X=m(Y,!0),L=d(Y),z=m(L,!0),le=d(L),me=m(le,!0),be=d(ve);je(be,21,()=>s().entries,T=>`${T.side??""}:${T.param}`,(T,O)=>{var J=jk(),_e=w(J),Ce=w(_e),Fe=d(Ce);{var We=H=>{var F=fu(),Ne=m(F,!0);E(Me=>h(Ne,Me),[()=>t(O).side==="sender"?y("Sender"):y("Receiver")]),v(H,F)};$(Fe,H=>{t(O).side&&H(We)})}var Ze=d(_e),nt=m(Ze,!0),ke=d(Ze),we=m(ke,!0);E(()=>{I(J,"data-testid",t(O).side==="sender"?`preview-sender-${t(O).param}`:`preview-${t(O).param}`),h(Ce,t(O).param),h(nt,t(O).from),h(we,t(O).to)}),v(T,J)});var Ee=d(he,2),se=w(Ee);{var W=T=>{var O=Zn();E(()=>h(O,b())),v(T,O)},V=T=>{var O=Zn();E(J=>h(O,`${J??""} ×
16
+ ${s().targets.length??""}`),[()=>y("{count} parameters will be written",{},s().entries.length)]),v(T,O)};$(se,T=>{b()!==void 0?T(W):T(V,-1)})}E((T,O,J)=>{h(X,T),h(z,O),h(me,J)},[()=>y("Parameter"),()=>y("Current value"),()=>y("New value")]),v(M,ue)};$(te,M=>{t(S)?M(j):M(U,-1)})}var fe=d(te,2);{var Te=M=>{var ue=Kk();je(ue,21,()=>s().problems,he=>`${he.param}-${he.code}`,(he,ve)=>{var ye=uu(),Y=m(ye);E(()=>h(Y,`${t(ve).param??""}: ${t(ve).message??""}`)),v(he,ye)}),v(M,ue)};$(fe,M=>{s().problems.length>0&&M(Te)})}var ce=d(fe,2);{var Re=M=>{var ue=$k(),he=Ie(ue),ve=w(he),ye=w(ve),Y=w(ye),X=m(Y,!0),L=d(Y),z=m(L,!0),le=d(L),me=m(le,!0),be=d(ve);je(be,21,f,V=>`${V.side??""}:${V.param}`,(V,T)=>{var O=Yk();let J;var _e=w(O),Ce=w(_e),Fe=d(Ce);{var We=H=>{var F=fu(),Ne=m(F,!0);E(Me=>h(Ne,Me),[()=>t(T).side==="sender"?y("Sender"):y("Receiver")]),v(H,F)};$(Fe,H=>{t(T).side&&H(We)})}var Ze=d(_e),nt=m(Ze,!0),ke=d(Ze),we=m(ke,!0);E(()=>{I(O,"data-testid",t(T).side==="sender"?`readback-sender-${t(T).param}`:`readback-${t(T).param}`),J=St(O,1,"svelte-1aaq6az",null,J,{"hmm-preview-differs":t(T).differs}),h(Ce,t(T).param),h(nt,t(T).sent),h(we,t(T).stored)}),v(V,O)});var Ee=d(he,2);{var se=V=>{var T=qk(),O=m(T,!0);E(J=>h(O,J),[()=>y("The interface answered ok but stored something else")]),v(V,T)},W=c(()=>f().some(V=>V.differs));$(Ee,V=>{t(W)&&V(se)})}E((V,T,O)=>{h(X,V),h(z,T),h(me,O)},[()=>y("Parameter"),()=>y("What was sent"),()=>y("Read back")]),v(M,ue)};$(ce,M=>{f().length>0&&M(Re)})}var xe=d(ce,2);{var ge=M=>{var ue=Qk();je(ue,21,l,he=>`${he.address}-${he.peer??""}-${he.paramset}`,(he,ve)=>{var ye=Xk();let Y;var X=w(ye),L=m(X),z=d(X);E(()=>{Y=St(ye,1,"svelte-1aaq6az",null,Y,{"hmm-preview-failed":!t(ve).ok}),h(L,`${t(ve).address??""}${t(ve).peer===void 0?"":`←${t(ve).peer}`}`),h(z,` ${t(ve).ok?"✔":`✕ ${t(ve).faultString??""}`}`)}),v(he,ye)}),v(M,ue)};$(xe,M=>{l().length>0&&M(ge)})}v(re,ae)};$(K,re=>{s()&&re(q)})}v(C,P)},$$slots:{buttons:!0,default:!0}})}mt()}kt(["click"]);function Wi(r,e){if(!r)return;const n=r;return n[e]??n.en??n.de}function Jk(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 e0(r,e,n){const s=Wi(r.label,e);return s!==void 0?s:"seconds"in r?Jk(r.seconds):n(r.special==="notActive"?"Not active":r.special==="permanent"?"Permanent":"Enter value")}function t0(r,e,n){const s=Ad(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 n0(r,e){if("seconds"in r)return Td(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 jh(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 r0(r,e=[]){return r.flatMap(n=>e.filter(s=>s.id===n))}function s0(r,e,n){return r.findIndex(s=>Object.entries(s.values).every(([a,i])=>!(a in n)||jh(e[a],i)))}function a0(r,e){return Object.fromEntries(Object.entries(r.values).filter(([n])=>n in e))}function i0(r,e){return r.presets.findIndex(n=>jh(n.value,e)||String(n.value)===String(e))}var o0=_('<h5 class="hmm-link-press hmm-param-table-wide svelte-1fgjxm" data-testid="link-easy-press"> </h5>'),hu=_('<option disabled="">—</option>'),Jo=_("<option> </option>"),l0=_('<select class="hmm-select svelte-1fgjxm"><!><!></select>'),d0=_('<div><span class="hmm-link-easy-label svelte-1fgjxm"> </span> <!></div> <!>',1),c0=_('<div><span class="hmm-link-easy-label svelte-1fgjxm"> </span> <select class="hmm-select svelte-1fgjxm"><!><option> </option></select></div> <!>',1),u0=_('<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>'),f0=_("<!> <!>",1),h0=_('<div class="hmm-link-easy hmm-param-table-span"></div>');function Wh(r,e){ht(e,!0);let n=B(e,"subsets",19,()=>[]),s=B(e,"testId",3,"easy-form");const a=jt(),i=a.i18n.t,o=c(()=>a.i18n.language);let l=N(Be({}));function f(C){const R=C===void 0?"":C.kind==="time"?C.pair.unitParam:C.kind==="param"?C.param:"";return R.startsWith("SHORT_")?"SHORT":R.startsWith("LONG_")?"LONG":void 0}const p=c(()=>e.form.some(C=>f(C)==="SHORT")&&e.form.some(C=>f(C)==="LONG"));function g(C){if(!t(p))return;const R=f(e.form[C]),P=C===0?void 0:f(e.form[C-1]);if(!(R===void 0||R===P))return i(R==="SHORT"?"Short key press":"Long key press")}function b(C,R){return Wi(C.label,t(o))??a.meta.parameterLabel(R,e.channelType)}function k(C){return C.option===void 0?void 0:e.presets[C.option]}let y=N(Be({}));function S(C,R,P){const K=R.presets[P];u(y,{...t(y),[C.param]:K===void 0},!0),K!==void 0&&A(C,K.value)}function A(C,R){e.onchange(Object.fromEntries([C.param,...C.also].map(P=>[P,R])))}function x(C,R){const P=(e.timeSelectors[C.selector]??[])[R];if(P===void 0)return;const K=n0(P,C.pair);u(l,{...t(l),[C.pair.name]:K===void 0},!0),K!==void 0&&e.onchange(K)}var D=h0();je(D,23,()=>e.form,C=>C.kind==="time"?C.pair.name:C.kind==="param"?C.param:`subset-${String(C.subsets)}`,(C,R,P)=>{const K=c(()=>g(t(P)));var q=f0(),re=Ie(q);{var ae=Z=>{var te=o0(),j=m(te,!0);E(()=>h(j,t(K))),v(Z,te)};$(re,Z=>{t(K)&&Z(ae)})}var de=d(re,2);{var G=Z=>{const te=c(()=>e.timeSelectors[t(R).selector]??[]),j=c(()=>t0(t(te),e.values,t(R).pair)),U=c(()=>t(te).findIndex(Y=>"special"in Y&&Y.special==="enterValue")),fe=c(()=>t(l)[t(R).pair.name]===!0||t(j)>=0&&t(j)===t(U)||t(te).length===0),Te=c(()=>b(t(R),t(R).pair.countParam));var ce=d0(),Re=Ie(ce);let xe;var ge=w(Re),M=m(ge,!0),ue=d(ge,2);{var he=Y=>{var X=l0(),L=w(X);{var z=be=>{var Ee=hu();Ee.value=Ee.__value="-1",v(be,Ee)};$(L,be=>{t(j)<0&&be(z)})}var le=d(L);je(le,17,()=>t(te),eo,(be,Ee,se)=>{var W=Jo(),V=m(W,!0),T={};E((O,J)=>{h(V,O),T!==(T=J)&&(W.value=(W.__value=T)??"")},[()=>e0(t(Ee),t(o),i),()=>String(se)]),v(be,W)});var me;Qt(X),E(be=>{I(X,"aria-label",t(Te)),I(X,"data-testid",`easy-time-select-${t(R).pair.name}`),me!==(me=be)&&(X.value=(X.__value=me)??"",Cn(X,me))},[()=>String(t(fe)&&t(U)>=0?t(U):t(j))]),ee("change",X,be=>x(t(R),Number(be.currentTarget.value))),v(Y,X)};$(ue,Y=>{t(te).length>0&&Y(he)})}var ve=d(Re,2);{var ye=Y=>{var X=wt(),L=Ie(X);je(L,16,()=>[t(R).pair.unitParam,t(R).pair.countParam],z=>z,(z,le)=>{const me=c(()=>e.fields.get(le));var be=wt(),Ee=Ie(be);{var se=W=>{{let V=c(()=>e.values[le]??t(me).description.DEFAULT),T=c(()=>a.meta.parameterLabel(le,e.channelType)),O=c(()=>a.meta.parameterHelp(le,e.channelType)),J=c(()=>e.changed(le));Ea(W,{get field(){return t(me)},get value(){return t(V)},get label(){return t(T)},get help(){return t(O)},get changed(){return t(J)},valueLabel:_e=>a.meta.valueLabel(le,_e,e.channelType),presetLabel:_e=>a.meta.uiLabel(_e),onchange:_e=>e.onchange({[le]:_e})})}};$(Ee,W=>{t(me)&&W(se)})}v(z,be)}),v(Y,X)};$(ve,Y=>{t(fe)&&Y(ye)})}E(Y=>{xe=St(Re,1,"hmm-link-easy-row hmm-param-table-row svelte-1fgjxm",null,xe,{"hmm-param-changed":Y}),I(Re,"data-testid",`easy-time-${t(R).pair.name}`),h(M,t(Te))},[()=>e.changed(t(R).pair.unitParam)||e.changed(t(R).pair.countParam)]),v(Z,ce)},ne=Z=>{const te=c(()=>e.fields.get(t(R).param)),j=c(()=>k(t(R)));var U=wt(),fe=Ie(U);{var Te=Re=>{const xe=c(()=>e.values[t(R).param]??t(te).description.DEFAULT),ge=c(()=>i0(t(j),t(xe))),M=c(()=>t(y)[t(R).param]===!0||t(ge)<0),ue=c(()=>b(t(R),t(R).param));var he=c0(),ve=Ie(he);let ye;var Y=w(ve),X=m(Y,!0),L=d(Y,2),z=w(L);je(z,17,()=>t(j).presets,eo,(W,V,T)=>{var O=Jo(),J=m(O,!0),_e={};E((Ce,Fe)=>{h(J,Ce),_e!==(_e=Fe)&&(O.value=(O.__value=_e)??"")},[()=>pd(t(V),Ce=>a.meta.uiLabel(Ce)),()=>String(T)]),v(W,O)});var le=d(z),me=m(le,!0);le.value=le.__value="-1";var be;Qt(L);var Ee=d(ve,2);{var se=W=>{{let V=c(()=>a.meta.parameterLabel(t(R).param,e.channelType)),T=c(()=>a.meta.parameterHelp(t(R).param,e.channelType)),O=c(()=>e.changed(t(R).param));Ea(W,{get field(){return t(te)},get value(){return t(xe)},entry:!0,get label(){return t(V)},get help(){return t(T)},get changed(){return t(O)},valueLabel:J=>a.meta.valueLabel(t(R).param,J,e.channelType),presetLabel:J=>a.meta.uiLabel(J),onchange:J=>A(t(R),J)})}};$(Ee,W=>{t(M)&&W(se)})}E((W,V,T)=>{ye=St(ve,1,"hmm-link-easy-row hmm-param-table-row svelte-1fgjxm",null,ye,{"hmm-param-changed":W}),I(ve,"data-testid",`easy-preset-${t(R).param}`),h(X,t(ue)),I(L,"aria-label",t(ue)),I(L,"data-testid",`easy-preset-select-${t(R).param}`),h(me,V),be!==(be=T)&&(L.value=(L.__value=be)??"",Cn(L,be))},[()=>e.changed(t(R).param),()=>i("Enter value"),()=>String(t(M)?-1:t(ge))]),ee("change",L,W=>S(t(R),t(j),Number(W.currentTarget.value))),v(Re,he)},ce=Re=>{{let xe=c(()=>e.values[t(R).param]??t(te).description.DEFAULT),ge=c(()=>b(t(R),t(R).param)),M=c(()=>a.meta.parameterHelp(t(R).param,e.channelType)),ue=c(()=>e.changed(t(R).param));Ea(Re,{get field(){return t(te)},get value(){return t(xe)},get label(){return t(ge)},get help(){return t(M)},get changed(){return t(ue)},valueLabel:he=>a.meta.valueLabel(t(R).param,he,e.channelType),presetLabel:he=>a.meta.uiLabel(he),onchange:he=>A(t(R),he)})}};$(fe,Re=>{t(te)&&t(j)?Re(Te):t(te)&&Re(ce,1)})}v(Z,U)},ie=Z=>{const te=c(()=>r0(t(R).subsets,n()));var j=wt(),U=Ie(j);{var fe=Te=>{const ce=c(()=>s0(t(te),e.values,e.description)),Re=c(()=>Wi(t(R).label,t(o))??i("Mode"));var xe=u0(),ge=w(xe),M=m(ge,!0),ue=d(ge,2),he=w(ue);{var ve=X=>{var L=hu();L.value=L.__value="-1",v(X,L)};$(he,X=>{t(ce)<0&&X(ve)})}var ye=d(he);je(ye,19,()=>t(te),X=>X.id,(X,L,z)=>{var le=Jo(),me=m(le,!0),be={};E((Ee,se)=>{h(me,Ee),be!==(be=se)&&(le.value=(le.__value=be)??"")},[()=>Wi(t(R).names?.[t(R).subsets.indexOf(t(L).id)],t(o))??a.meta.parameterLabel(t(L).key,e.channelType),()=>String(t(z))]),v(X,le)});var Y;Qt(ue),E(X=>{h(M,t(Re)),I(ue,"aria-label",t(Re)),Y!==(Y=X)&&(ue.value=(ue.__value=Y)??"",Cn(ue,Y))},[()=>String(t(ce))]),ee("change",ue,X=>{const L=t(te)[Number(X.currentTarget.value)];L&&e.onchange(a0(L,e.description))}),v(Te,xe)};$(U,Te=>{t(te).length>0&&Te(fe)})}v(Z,j)};$(de,Z=>{t(R).kind==="time"?Z(G):t(R).kind==="param"?Z(ne,1):Z(ie,-1)})}v(C,q)}),E(()=>I(D,"data-testid",s())),v(r,D),mt()}kt(["change"]);var m0=_('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="link-preview"> </button>',1),v0=_("<p> </p>"),p0=_('<p data-testid="link-paramset-failed"> </p>'),g0=_('<div class="hmm-link-targets svelte-1xlqelt"><!></div>'),b0=_('<div class="hmm-link-list hmm-param-table svelte-1xlqelt" data-testid="link-sender-params"></div>'),_0=_('<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>'),mu=_("<option> </option>"),E0=_('<p class="hmm-link-profile-text svelte-1xlqelt" data-testid="link-profile-description"> </p>'),y0=_('<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>'),S0=_('<p class="hmm-link-hint svelte-1xlqelt" data-testid="link-easy-unknown"> </p>'),k0=_("<div><!></div>"),w0=_('<li><span class="hmm-mono"> </span> </li>'),A0=_('<ul class="hmm-link-results svelte-1xlqelt" data-testid="link-results"></ul>'),T0=_('<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),R0=_("<!> <!>",1);function Kh(r,e){ht(e,!0);let n=B(e,"open",15,!1),s=B(e,"sender",3,""),a=B(e,"receiver",3,"");const i=jt(),o=i.i18n.t;let l=N(void 0),f=N(Be({})),p=N(void 0),g=N(Be({})),b=N(Be({})),k=N(Be({})),y=N(Be([])),S=N(void 0),A=N(Be(cs)),x=N(!1),D=N(void 0),C=N(""),R=N(""),P=N(Be([])),K=N(!1),q=N(void 0),re=N(Be([])),ae=N(Be([])),de=N(!1),G=0,ne=N(""),ie=N(""),Z=0,te=N(""),j=N("");const U=c(()=>i.app.selectedInterface),fe=c(()=>i.devices.index(t(U))),Te=c(()=>t(fe)?.get(s())?.TYPE??""),ce=c(()=>t(fe)?.get(a())?.TYPE??""),Re=c(()=>`${i.nameOf(s())} → ${i.nameOf(a())} (${s()} ${a()})`),xe=c(()=>t(y).find(ke=>ke.id===t(A))),ge=c(()=>{const ke=t(fe),we=ke?.get(a()),H=ke?.get(s());if(!ke||!we||!H)return"";const F=ke.get(we.PARENT??""),Ne=ke.get(H.PARENT??"");return!F||!Ne?"":[si(t(U),we,"LINK",F),si(t(U),H,"LINK",Ne)].join("|")}),M=c(()=>i.links.templates.filter(ke=>ke.identity===t(ge))),ue=c(()=>t(l)?Qo(t(l),{metadata:t(S),presets:i.meta.presets,profile:t(xe),expert:t(x)}):[]),he=c(()=>t(p)?Qo(t(p),{expert:!0}):[]),ve=c(()=>t(D)??t(he).length>0),ye=c(()=>t(l)&&t(xe)&&t(xe).id!==cs?M_(t(xe),t(l)):void 0),Y=c(()=>t(x)?void 0:t(ye)),X=c(()=>t(x)?Rl(t(ye),t(S)?.subsets):new Set),L=c(()=>new Map((t(l)?Qo(t(l),{metadata:t(S),presets:i.meta.presets,profile:t(xe)}):[]).map(ke=>[ke.name,ke]))),z=c(()=>V()),le=c(()=>i.links.of(t(U)).filter(ke=>!(ke.SENDER===s()&&ke.RECEIVER===a())&&(t(fe)?.get(ke.SENDER)?.TYPE??"")===t(Te)&&(t(fe)?.get(ke.RECEIVER)?.TYPE??"")===t(ce)).map(ke=>({value:`${ke.SENDER};${ke.RECEIVER}`,label:`${i.nameOf(ke.SENDER)} → ${i.nameOf(ke.RECEIVER)}`})));lt(()=>{if(!n()||t(U)===""||s()===""||a()==="")return;const ke=G+=1,we={interfaceName:t(U),sender:s(),receiver:a()};u(de,!0),u(ne,""),u(l,void 0),u(f,{},!0),u(p,void 0),u(g,{},!0),u(b,{},!0),u(k,{},!0),u(D,void 0),(async()=>{const[H,F,Ne,Me,Ke]=await Promise.all([i.paramsets.describe(we.interfaceName,we.receiver,"LINK"),i.paramsets.read(we.interfaceName,we.receiver,we.sender),i.paramsets.describe(we.interfaceName,we.sender,"LINK"),i.paramsets.read(we.interfaceName,we.sender,we.receiver),i.links.info(we.interfaceName,we.sender,we.receiver)]);ke===G&&(u(l,H,!0),u(f,F??{},!0),u(p,Ne,!0),u(g,Me??{},!0),u(C,Ke?.NAME??"",!0),u(R,Ke?.DESCRIPTION??"",!0),u(b,{},!0),u(k,{},!0),u(P,[],!0),u(re,[],!0),u(ae,[],!0),u(de,!1),u(ne,`${we.interfaceName}|${we.sender}|${we.receiver}#${String(ke)}`))})()}),lt(()=>{if(!n()||t(ce)===""||t(Te)==="")return;const ke=`${t(ce)}|${t(Te)}`;if(ke===t(ie))return;const we=Z+=1;u(ie,""),u(y,[],!0),Promise.all([i.meta.profilesFor(t(ce),t(Te)),i.meta.linkMetadataFor(t(ce),t(Te)),i.meta.loadPresets()]).then(([H,F])=>{we===Z&&(u(y,H,!0),u(S,F,!0),u(ie,ke))})});let me="",be;lt(()=>{if(t(ne)===""||t(ie)!==`${t(ce)}|${t(Te)}`||t(y).length===0)return;const ke=`${t(ne)}|${t(ie)}`;if(me===ke)return;me=ke;const we=i.meta.engine.detectProfile(t(f),t(y));be=we?.id,u(A,we?.id??cs,!0),u(x,t(A)===cs)}),lt(()=>{const ke=t(ge);n()&&ke!==""&&i.links.loadTemplates(ke)});async function Ee(){const ke=t(te).trim();if(ke===""||t(ge)===""||!t(l))return;const we=qa(t(f),t(b),t(l),{interfaceName:t(U),targets:[a()],writeAll:!0}).values,H=t(p)?qa(t(g),t(k),t(p),{interfaceName:t(U),targets:[s()],writeAll:!0}).values:{},F={name:ke,identity:t(ge),...t(xe)===void 0?{}:{profileId:t(xe).id,profileName:cu(t(xe),i.i18n.language)},receiver:we,...Object.keys(H).length>0?{sender:H}:{},createdAt:Date.now()};await i.links.saveTemplate(F)&&(u(te,""),u(j,ke,!0),i.notices.push("info",`${o("Save as template")}: ${ke}`))}function se(ke){const we=t(M).find(H=>H.name===ke);we&&(we.profileId!==void 0&&t(y).some(H=>H.id===we.profileId)&&(u(A,we.profileId,!0),u(x,t(A)===cs)),u(b,{...t(b),...we.receiver},!0),we.sender&&s()!==a()&&u(k,{...t(k),...we.sender},!0))}function W(ke){u(A,ke,!0),u(x,ke===cs);const we=t(y).find(Ke=>Ke.id===ke);if(!we||!t(l))return;const H=ke===be,F=i.meta.engine.applyProfile(we,H?t(f):V(),t(l),{keepCurrent:H}),Ne={};for(const Ke of[...Object.keys(we.params),Qa]){const pe=F.values[Ke];pe!==void 0&&(Ne[Ke]=pe)}u(b,{...t(b),...Ne},!0);const Me=F.problems.filter(Ke=>Ke.code==="unknown-parameter");Me.length>0&&i.notices.push("info",`${o("The profile names {count} parameters this firmware does not have",{},Me.length)}: ${Me.map(Ke=>Ke.param).join(", ")}`);for(const Ke of F.problems.filter(pe=>pe.code!=="unknown-parameter"))i.notices.push("warn",`${Ke.param}: ${Ke.message}`)}function V(){const ke={...t(f)};for(const[we,H]of Object.entries(t(b)))(typeof H=="boolean"||typeof H=="number"||typeof H=="string")&&(ke[we]=H);return ke}function T(ke,we,H){return Object.prototype.hasOwnProperty.call(H,ke.name)?H[ke.name]:we[ke.name]??ke.description.DEFAULT}async function O(){await i.links.setInfo(t(U),s(),a(),t(C),t(R))}function J(){const ke=t(P).map(we=>{const[H,F]=we.split(";");return{sender:H??"",receiver:F??""}});return[{sender:s(),receiver:a()},...ke]}function _e(){if(!t(l))return;u(re,[],!0),u(ae,[],!0);const ke=J(),we=qa(t(f),t(b),t(l),{interfaceName:t(U),targets:ke.map(F=>`${F.receiver}←${F.sender}`)}),H=t(p)&&s()!==a()?qa(t(g),t(k),t(p),{interfaceName:t(U),targets:ke.map(F=>`${F.sender}←${F.receiver}`)}):void 0;u(q,gk(we,H,ke),!0),u(K,!0)}function Ce(){const ke=t(q);if(!ke)return;const we=du(ke);if(we.receiverToSender===void 0&&we.senderToReceiver===void 0)return;const H=J();i.changeSet.stage({kind:"linkParamset",interfaceName:t(U),title:`LINK — ${i.nameOf(s())} → ${i.nameOf(a())}`,links:H,values:we,calls:[...ke.calls??[]],lines:ke.entries.map(F=>({label:F.side==="sender"?`${o("Sender")}: ${F.param}`:F.param,from:F.from,to:F.to}))}),u(K,!1),n(!1)}async function Fe(){const ke=t(q);if(!ke)return;const we=du(ke);if(we.receiverToSender===void 0&&we.senderToReceiver===void 0)return;const H=await i.paramsets.putLink(t(U),J(),we);u(re,H,!0);const F=[];if(we.receiverToSender!==void 0){const Ne=await i.paramsets.read(t(U),a(),s());Ne&&t(l)&&(F.push(...Yl(we.receiverToSender,Ne,t(l)).map(Me=>({...Me,side:"receiver"}))),u(f,Ne,!0),u(b,{},!0))}if(we.senderToReceiver!==void 0){const Ne=await i.paramsets.read(t(U),s(),a());Ne&&t(p)&&(F.push(...Yl(we.senderToReceiver,Ne,t(p)).map(Me=>({...Me,side:"sender"}))),u(g,Ne,!0),u(k,{},!0))}u(ae,F,!0),H.length>0&&H.every(Ne=>Ne.ok)&&!t(ae).some(Ne=>Ne.differs)&&u(K,!1)}var We=R0(),Ze=Ie(We);yn(Ze,{get title(){return t(Re)},width:"960px",height:"min(640px, calc(100vh - 32px))",minWidth:560,minHeight:320,testId:"link-paramset-dialog",get open(){return n()},set open(we){n(we)},buttons:we=>{var H=m0(),F=Ie(H),Ne=m(F,!0),Me=d(F,2),Ke=m(Me,!0);E((pe,De)=>{h(Ne,pe),Me.disabled=!t(l),h(Ke,De)},[()=>o("Close"),()=>o("Preview")]),ee("click",F,()=>n(!1)),ee("click",Me,_e),v(we,H)},children:(we,H)=>{var F=wt(),Ne=Ie(F);{var Me=De=>{var Pe=v0(),Ge=m(Pe,!0);E(Le=>h(Ge,Le),[()=>o("Loading Homematic Manager...")]),v(De,Pe)},Ke=De=>{var Pe=p0(),Ge=m(Pe,!0);E(Le=>h(Ge,Le),[()=>o("No data")]),v(De,Pe)},pe=De=>{var Pe=T0(),Ge=Ie(Pe),Le=w(Ge),Ye=w(Le),Xe=m(Ye,!0),ze=d(Ye,2),Je=d(Le,2),dt=d(w(Je),2),pt=d(Je,2),gt=m(pt,!0),Se=d(Ge,2);{var Oe=Ve=>{var et=g0(),at=w(et);{let _t=c(()=>o("Please choose one or more links")),Rt=c(()=>o("Please choose one or more links")),Vt=c(()=>o("Filter")),Ut=c(()=>o("Check all")),ln=c(()=>o("Uncheck all"));oi(at,{get options(){return t(le)},get label(){return t(_t)},get placeholder(){return t(Rt)},get filterLabel(){return t(Vt)},get checkAllLabel(){return t(Ut)},get uncheckAllLabel(){return t(ln)},summary:Bt=>o("{count} links",{},Bt.length),testId:"link-targets",get selected(){return t(P)},set selected(Bt){u(P,Bt,!0)}})}v(Ve,et)};$(Se,Ve=>{t(le).length>0&&Ve(Oe)})}var $e=d(Se,2);{var ft=Ve=>{var et=_0(),at=w(et),_t=w(at),Rt=m(_t,!0),Vt=d(_t),Ut=d(at,2);{var ln=Bt=>{var hn=b0();je(hn,21,()=>t(he),Tn=>Tn.name,(Tn,gn)=>{{let Lt=c(()=>T(t(gn),t(g),t(k))),It=c(()=>i.meta.parameterLabel(t(gn).name,t(Te))),Qe=c(()=>i.meta.parameterHelp(t(gn).name,t(Te))),tt=c(()=>Object.prototype.hasOwnProperty.call(t(k),t(gn).name));Ea(Tn,{get field(){return t(gn)},get value(){return t(Lt)},get label(){return t(It)},get help(){return t(Qe)},get changed(){return t(tt)},valueLabel:bt=>i.meta.valueLabel(t(gn).name,bt,t(Te)),presetLabel:bt=>i.meta.uiLabel(bt),onchange:bt=>u(k,{...t(k),[t(gn).name]:bt},!0)})}}),v(Bt,hn)};$(Ut,Bt=>{t(ve)&&Bt(ln)})}E((Bt,hn)=>{I(_t,"aria-expanded",t(ve)),h(Rt,t(ve)?"−":"+"),h(Vt,` ${Bt??""}: ${hn??""} (${s()??""})`)},[()=>o("Sender"),()=>i.nameOf(s())]),ee("click",_t,()=>u(D,!t(ve))),v(Ve,et)};$($e,Ve=>{s()!==a()&&Ve(ft)})}var Et=d($e,2),it=w(Et),Wt=m(it),Mt=d(it,2),Ot=w(Mt),Zt=w(Ot),bn=w(Zt),on=m(bn,!0),un=d(bn,2);je(un,21,()=>t(y),Ve=>Ve.id,(Ve,et)=>{var at=mu(),_t=m(at,!0),Rt={};E((Vt,Ut)=>{h(_t,Vt),Rt!==(Rt=Ut)&&(at.value=(at.__value=Rt)??"")},[()=>cu(t(et),i.i18n.language),()=>String(t(et).id)]),v(Ve,at)});var vn;Qt(un);var Pn=d(Zt,2),Jn=w(Pn),jn=d(Jn,2),Xt=m(jn,!0),xt=d(Ot,2);{var fn=Ve=>{var et=E0(),at=m(et,!0);E(_t=>h(at,_t),[()=>Ek(t(xe),i.i18n.language)]),v(Ve,et)};$(xt,Ve=>{t(xe)&&!t(x)&&Ve(fn)})}var Mn=d(xt,2),On=w(Mn),Mr=w(On),Xr=m(Mr,!0),Ln=d(Mr,2),Wn=w(Ln),_r=m(Wn,!0);Wn.value=Wn.__value="";var xr=d(Wn);je(xr,17,()=>t(M),Ve=>Ve.name,(Ve,et)=>{var at=mu(),_t=m(at),Rt={};E(()=>{h(_t,`${t(et).name??""}${t(et).profileName===void 0?"":` — ${t(et).profileName}`}`),Rt!==(Rt=t(et).name)&&(at.value=(at.__value=Rt)??"")}),v(Ve,at)});var lr;Qt(Ln);var Er=d(On,2),tr=w(Er),yr=m(tr,!0),Qr=d(tr,2),nr=d(Er,2),is=m(nr,!0),oe=d(nr,2),He=m(oe,!0),Gt=d(Mt,2);{var pn=Ve=>{var et=y0(),at=d(w(et),1,!0);E(_t=>h(at,_t),[()=>o("Marked: the parameters the easy mode of this profile shows")]),v(Ve,et)},Sn=Ve=>{var et=S0(),at=m(et,!0);E(_t=>h(at,_t),[()=>o("The CCU's form for this profile is not known here: every parameter is shown, the ones the profile fixes greyed out.")]),v(Ve,et)};$(Gt,Ve=>{t(x)&&t(X).size>0?Ve(pn):!t(x)&&!t(Y)&&t(xe)&&t(xe).id!==cs&&Ve(Sn,1)})}var er=d(Gt,2),Or=w(er);{var ys=Ve=>{{let et=c(()=>t(S)?.subsets);Wh(Ve,{get form(){return t(Y)},testId:"link-easy-form",get fields(){return t(L)},get values(){return t(z)},changed:at=>Object.prototype.hasOwnProperty.call(t(b),at),get description(){return t(l)},get channelType(){return t(ce)},get subsets(){return t(et)},get presets(){return i.meta.presets},get timeSelectors(){return i.meta.timeSelectors},onchange:at=>u(b,{...t(b),...at},!0)})}},ct=Ve=>{var et=wt(),at=Ie(et);je(at,17,()=>t(ue),_t=>_t.name,(_t,Rt)=>{var Vt=k0();let Ut;var ln=w(Vt);{let Bt=c(()=>T(t(Rt),t(f),t(b))),hn=c(()=>i.meta.parameterLabel(t(Rt).name,t(ce))),Tn=c(()=>i.meta.parameterHelp(t(Rt).name,t(ce))),gn=c(()=>Object.prototype.hasOwnProperty.call(t(b),t(Rt).name));Ea(ln,{get field(){return t(Rt)},get value(){return t(Bt)},get label(){return t(hn)},get help(){return t(Tn)},get changed(){return t(gn)},get disabled(){return t(Rt).fixedByProfile},valueLabel:Lt=>i.meta.valueLabel(t(Rt).name,Lt,t(ce)),presetLabel:Lt=>i.meta.uiLabel(Lt),onchange:Lt=>u(b,{...t(b),[t(Rt).name]:Lt},!0)})}E(Bt=>Ut=St(Vt,1,"hmm-link-easy-mark hmm-param-table-span svelte-1xlqelt",null,Ut,{"hmm-link-easy-marked":Bt}),[()=>t(X).has(t(Rt).name)]),v(_t,Vt)}),v(Ve,et)};$(Or,Ve=>{t(Y)&&t(l)?Ve(ys):Ve(ct,-1)})}var rt=d(Et,2);{var st=Ve=>{var et=A0();je(et,21,()=>t(re),at=>`${at.address}-${at.peer??""}`,(at,_t)=>{var Rt=w0();let Vt;var Ut=w(Rt),ln=m(Ut,!0),Bt=d(Ut);E(()=>{Vt=St(Rt,1,"svelte-1xlqelt",null,Vt,{"hmm-link-failed":!t(_t).ok}),h(ln,t(_t).address),h(Bt,` ${t(_t).ok?"✔":`✕ ${t(_t).faultString??""}`}`)}),v(at,Rt)}),v(Ve,et)};$(rt,Ve=>{t(re).length>0&&Ve(st)})}E((Ve,et,at,_t,Rt,Vt,Ut,ln,Bt,hn,Tn,gn,Lt)=>{h(Xe,Ve),h(gt,et),h(Wt,`${at??""}: ${_t??""} (${a()??""})`),h(on,Rt),vn!==(vn=Vt)&&(un.value=(un.__value=vn)??"",Cn(un,vn)),h(Xt,Ut),h(Xr,ln),Ln.disabled=t(M).length===0,h(_r,Bt),lr!==(lr=t(j))&&(Ln.value=(Ln.__value=lr)??"",Cn(Ln,lr)),h(yr,hn),nr.disabled=Tn,h(is,gn),oe.disabled=t(j)==="",h(He,Lt)},[()=>o("Name"),()=>o("Apply"),()=>o("Receiver"),()=>i.nameOf(a()),()=>o("Profile"),()=>String(t(A)),()=>o("Expert view"),()=>o("Template"),()=>t(M).length===0?o("No template for this pair of channel types"):o("Apply template"),()=>o("Template name"),()=>t(te).trim()===""||t(ge)==="",()=>o("Save as template"),()=>o("Delete template")]),An(ze,()=>t(C),Ve=>u(C,Ve)),An(dt,()=>t(R),Ve=>u(R,Ve)),ee("click",pt,()=>{O()}),ee("change",un,Ve=>W(Number(Ve.currentTarget.value))),mr(Jn,()=>t(x),Ve=>u(x,Ve)),ee("change",Ln,Ve=>{u(j,Ve.currentTarget.value,!0),se(t(j))}),An(Qr,()=>t(te),Ve=>u(te,Ve)),ee("click",nr,()=>{Ee()}),ee("click",oe,()=>{const Ve=t(j);u(j,""),i.links.removeTemplate(Ve,t(ge))}),v(De,Pe)};$(Ne,De=>{t(de)&&!t(l)?De(Me):t(l)?De(pe,-1):De(Ke,1)})}v(we,F)},$$slots:{buttons:!0,default:!0}});var nt=d(Ze,2);ql(nt,{get preview(){return t(q)},paramset:"LINK",get results(){return t(re)},get readBack(){return t(ae)},get writing(){return i.paramsets.writing},onstage:Ce,onconfirm:()=>{Fe()},get open(){return t(K)},set open(ke){u(K,ke,!0)}}),v(r,We),mt()}kt(["click","change"]);var x0=_('<span class="hmm-blind-warn svelte-6iyslx"> </span>'),I0=_('<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>'),D0=_('<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>'),N0=_('<input type="checkbox"/>'),C0=_('<input class="hmm-input hmm-blind-number svelte-6iyslx" type="number" step="1"/>'),P0=_('<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>'),M0=_('<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 O0(r,e){ht(e,!0);const n=jt(),s=n.i18n.t;let a=N(Be({}));function i(D){return n.meta.parameterLabel(D,e.channelType)}function o(D,C){if(C==="")return;const R=KS(D,Number(C));R&&(u(a,R.exact||R.seconds===Number(C)?Object.fromEntries(Object.entries(t(a)).filter(([P])=>P!==D.id)):{...t(a),[D.id]:R.seconds},!0),e.onchange(R.values))}function l(D,C){C===""||!Number.isFinite(Number(C))||f(D.param,Number(C))}function f(D,C){e.onchange({[D]:C})}var p=M0(),g=w(p),b=m(g,!0),k=d(g,2),y=m(k,!0),S=d(k,2);je(S,17,()=>e.spec.runningTimes,D=>D.id,(D,C)=>{const R=c(()=>jS(t(C),e.values));var P=I0(),K=w(P),q=w(K),re=m(q,!0),ae=d(q,2),de=m(ae,!0),G=d(K,2),ne=w(G),ie=d(ne,4),Z=m(ie,!0),te=d(G,2),j=w(te),U=m(j,!0),fe=d(j,2);{var Te=ce=>{var Re=x0(),xe=m(Re,!0);E(ge=>{I(Re,"data-testid",`blind-${t(C).id}-inexact`),h(xe,ge)},[()=>s("The device can only do {seconds}",{seconds:hi(t(a)[t(C).id]??0)})]),v(ce,Re)};$(fe,ce=>{t(a)[t(C).id]!==void 0&&ce(Te)})}E((ce,Re,xe,ge)=>{I(P,"data-testid",`blind-${t(C).id}`),h(re,ce),h(de,t(C).id),ne.disabled=!t(C).writable,I(ne,"aria-label",Re),I(ne,"data-testid",`blind-${t(C).id}-seconds`),rn(ne,t(R)??""),I(ie,"data-testid",`blind-${t(C).id}-raw`),h(Z,xe),h(U,ge)},[()=>i(t(C).id),()=>i(t(C).id),()=>WS(t(C),e.values),()=>t(R)===void 0?"—":hi(t(R))]),ee("input",ne,ce=>o(t(C),ce.currentTarget.value)),v(D,P)});var A=d(S,2);je(A,17,()=>e.spec.delays,D=>D.param,(D,C)=>{var R=D0(),P=w(R),K=w(P),q=m(K,!0),re=d(K,2),ae=m(re,!0),de=d(P,2),G=w(de),ne=d(de,2),ie=w(ne),Z=m(ie);E((te,j,U,fe,Te,ce)=>{I(R,"data-testid",`blind-${t(C).param}`),h(q,te),h(ae,t(C).param),I(G,"min",j),I(G,"max",U),I(G,"aria-label",fe),I(G,"data-testid",`blind-${t(C).param}-value`),rn(G,e.values[t(C).param]??""),h(Z,`${Te??""} … ${ce??""}`)},[()=>i(t(C).param),()=>Xn(t(C).description,"MIN"),()=>Xn(t(C).description,"MAX"),()=>i(t(C).param),()=>Xn(t(C).description,"MIN")??"−∞",()=>Xn(t(C).description,"MAX")??"∞"]),ee("input",G,te=>l(t(C),te.currentTarget.value)),v(D,R)});var x=d(A,2);je(x,17,()=>e.spec.extras,D=>D.param,(D,C)=>{var R=P0(),P=w(R),K=w(P),q=m(K,!0),re=d(K,2),ae=m(re,!0),de=d(P,2),G=w(de);{var ne=Z=>{var te=N0();E(j=>{I(te,"aria-label",j),I(te,"data-testid",`blind-${t(C).param}-value`),Rr(te,e.values[t(C).param]===!0)},[()=>i(t(C).param)]),ee("change",te,j=>f(t(C).param,j.currentTarget.checked)),v(Z,te)},ie=Z=>{var te=C0();E((j,U,fe)=>{I(te,"min",j),I(te,"max",U),I(te,"aria-label",fe),I(te,"data-testid",`blind-${t(C).param}-value`),rn(te,e.values[t(C).param]??"")},[()=>Xn(t(C).description,"MIN"),()=>Xn(t(C).description,"MAX"),()=>i(t(C).param)]),ee("input",te,j=>l(t(C),j.currentTarget.value)),v(Z,te)};$(G,Z=>{t(C).description.TYPE==="BOOL"?Z(ne):Z(ie,-1)})}E(Z=>{I(R,"data-testid",`blind-${t(C).param}`),h(q,Z),h(ae,t(C).param)},[()=>i(t(C).param)]),v(D,R)}),E((D,C)=>{h(b,D),h(y,C)},[()=>s("Blind calibration"),()=>s("The running times of a reference run, in plain seconds next to the value the device stores.")]),v(r,p),mt()}kt(["input","change"]);var L0=_("<option> </option>"),vu=_('<span class="hmm-duration-broken svelte-1jozrc9"> </span>'),F0=_("<span> </span>"),G0=_('<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>'),U0=_('<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 B0(r,e){ht(e,!0);const n=jt(),s=n.i18n.t;let a=N(Be({}));function i(R){return n.meta.parameterLabel(R.pair.unitParam,e.channelType)}function o(R){return Gh(R,e.values)}function l(R,P){const K=Uh(R,P);K&&(u(a,K.exact?Object.fromEntries(Object.entries(t(a)).filter(([q])=>q!==R.pair.name)):{...t(a),[R.pair.name]:K.seconds},!0),e.onchange(K.values))}function f(R,P){const K=Number(P);P===""||!Number.isFinite(K)||l(R,K)}function p(R,P){const K=Number(P),q=o(R),re=R.pair.units[K];if(re===void 0||q===void 0)return;const ae=Math.min(R.pair.maxCount,Math.max(0,Math.round(q/re.seconds)));b({[R.pair.unitParam]:K,[R.pair.countParam]:ae})}function g(R,P){const K=Number(P);P===""||!Number.isInteger(K)||b({[R.pair.countParam]:K})}function b(R){e.onchange(R)}function k(R){const P=e.values[R.pair.unitParam];return typeof P=="number"?P:R.pair.units.findIndex(K=>K.name===P)}var y=U0(),S=w(y),A=m(S,!0),x=d(S,2),D=m(x,!0),C=d(x,2);je(C,17,()=>e.spec.pairs,R=>R.pair.name,(R,P)=>{const K=c(()=>o(t(P))),q=c(()=>US(t(P),e.values));var re=G0(),ae=w(re),de=w(ae),G=m(de,!0),ne=d(de,2),ie=m(ne),Z=d(ae,2),te=w(Z),j=d(te,4);je(j,23,()=>t(P).pair.units,Y=>Y.name,(Y,X,L)=>{var z=L0(),le=m(z,!0),me={};E(be=>{h(le,t(X).name),me!==(me=be)&&(z.value=(z.__value=me)??"")},[()=>String(t(L))]),v(Y,z)});var U;Qt(j);var fe=d(j,2),Te=d(fe,2),ce=w(Te),Re=d(ce,2),xe=m(Re,!0),ge=d(Z,2),M=w(ge);{var ue=Y=>{var X=vu(),L=m(X,!0);E(z=>h(L,z),[()=>s("The device holds a value this pair cannot express")]),v(Y,X)},he=Y=>{var X=F0(),L=m(X,!0);E(z=>h(L,z),[()=>hi(t(K))]),v(Y,X)};$(M,Y=>{t(K)===void 0?Y(ue):Y(he,-1)})}var ve=d(M,2);{var ye=Y=>{var X=vu(),L=m(X,!0);E(z=>{I(X,"data-testid",`duration-${t(P).pair.name}-inexact`),h(L,z)},[()=>s("The device can only do {seconds}",{seconds:hi(t(a)[t(P).pair.name]??0)})]),v(Y,X)};$(ve,Y=>{t(a)[t(P).pair.name]!==void 0&&Y(ye)})}E((Y,X,L,z,le,me)=>{I(re,"data-testid",`duration-${t(P).pair.name}`),h(G,Y),h(ie,`${t(P).pair.unitParam??""} / ${t(P).pair.countParam??""}`),te.disabled=!t(P).writable||t(q),I(te,"aria-label",X),I(te,"data-testid",`duration-${t(P).pair.name}-seconds`),rn(te,t(K)??""),j.disabled=!t(P).writable,I(j,"aria-label",L),I(j,"data-testid",`duration-${t(P).pair.name}-unit`),U!==(U=z)&&(j.value=(j.__value=U)??"",Cn(j,U)),I(fe,"max",t(P).pair.maxCount),fe.disabled=!t(P).writable,I(fe,"aria-label",le),I(fe,"data-testid",`duration-${t(P).pair.name}-count`),rn(fe,e.values[t(P).pair.countParam]??""),ce.disabled=!t(P).writable,Rr(ce,t(q)),I(ce,"data-testid",`duration-${t(P).pair.name}-not-used`),h(xe,me),I(ge,"data-testid",`duration-${t(P).pair.name}-result`)},[()=>i(t(P)),()=>`${i(t(P))} ${s("seconds")}`,()=>`${i(t(P))} ${s("unit")}`,()=>String(k(t(P))),()=>`${i(t(P))} ${s("count")}`,()=>s("Not used / for ever")]),ee("input",te,Y=>f(t(P),Y.currentTarget.value)),ee("change",j,Y=>p(t(P),Y.currentTarget.value)),ee("input",fe,Y=>g(t(P),Y.currentTarget.value)),ee("change",ce,Y=>l(t(P),Y.currentTarget.checked?t(P).notUsedSeconds:0)),v(R,re)}),E((R,P)=>{h(A,R),h(D,P)},[()=>s("Durations"),()=>s("A duration is stored as a unit and a count; both are shown next to the seconds.")]),v(r,y),mt()}kt(["input","change"]);var pu=_("<option> </option>"),V0=_("<span> </span>"),H0=_('<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>'),z0=_('<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 j0(r,e){ht(e,!0);const n=jt(),s=n.i18n.t;function a(S){return n.meta.parameterLabel(S,e.channelType)}function i(S){const A=e.values[S.param];return typeof A=="number"?A:S.options.find(x=>x.raw===A)?.value??-1}function o(S){const A=i(S);return A>=0&&!S.options.some(x=>x.value===A)?A:void 0}function l(S,A){return S.description.VALUE_LIST?.[A]??String(A)}var f=z0(),p=w(f),g=m(p,!0),b=d(p,2),k=m(b,!0),y=d(b,2);je(y,17,()=>e.spec.fields,S=>S.param,(S,A)=>{const x=c(()=>i(t(A))),D=c(()=>o(t(A)));var C=H0(),R=w(C),P=w(R),K=m(P,!0),q=d(P,2),re=m(q,!0),ae=d(R,2),de=w(ae),G=w(de);{var ne=ce=>{var Re=pu(),xe=m(Re),ge={};E((M,ue)=>{h(xe,`${M??""} (${t(D)??""})`),ge!==(ge=ue)&&(Re.value=(Re.__value=ge)??"")},[()=>l(t(A),t(D)),()=>String(t(D))]),v(ce,Re)};$(G,ce=>{t(D)!==void 0&&ce(ne)})}var ie=d(G);je(ie,17,()=>t(A).options,ce=>ce.value,(ce,Re)=>{var xe=pu(),ge=m(xe,!0),M={};E(ue=>{h(ge,t(Re).label),M!==(M=ue)&&(xe.value=(xe.__value=M)??"")},[()=>String(t(Re).value)]),v(ce,xe)});var Z;Qt(de);var te=d(de,2),j=m(te,!0),U=d(ae,2),fe=w(U);{var Te=ce=>{var Re=V0(),xe=m(Re,!0);E(()=>{I(Re,"data-testid",`enum-${t(A).param}-preset`),h(xe,t(A).presetId)}),v(ce,Re)};$(fe,ce=>{t(A).presetId!==void 0&&ce(Te)})}E((ce,Re,xe,ge)=>{I(C,"data-testid",`enum-${t(A).param}`),h(K,ce),h(re,t(A).param),de.disabled=!t(A).writable,I(de,"aria-label",Re),I(de,"data-testid",`enum-${t(A).param}-select`),Z!==(Z=xe)&&(de.value=(de.__value=Z)??"",Cn(de,Z)),I(te,"data-testid",`enum-${t(A).param}-raw`),h(j,ge)},[()=>a(t(A).param),()=>a(t(A).param),()=>String(t(x)),()=>t(x)<0?"—":`${l(t(A),t(x))} (${t(x)})`]),ee("change",de,ce=>e.onchange({[t(A).param]:Number(ce.currentTarget.value)})),v(S,C)}),E((S,A)=>{h(g,S),h(k,A)},[()=>s("Named options"),()=>s("These values have names in the CCU string table that the description does not carry.")]),v(r,f),mt()}kt(["change"]);var W0=_('<th class="svelte-hdzef5"> </th>'),K0=_('<label class="svelte-hdzef5"><input type="checkbox"/> <span> </span></label>'),Y0=_('<div class="hmm-switch-days svelte-hdzef5"><!> <span class="hmm-switch-raw svelte-hdzef5"> </span></div>'),q0=_('<input class="hmm-input hmm-switch-time svelte-hdzef5" type="text" inputmode="numeric"/>'),$0=_('<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),X0=_("<option> </option>"),Q0=_('<select class="hmm-select"></select>'),Z0=_('<span class="hmm-switch-raw svelte-hdzef5"> </span>'),J0=_('<input class="hmm-input hmm-switch-number svelte-hdzef5" type="number"/> <!>',1),ew=_('<td class="svelte-hdzef5"><!></td>'),tw=_('<tr><td class="hmm-switch-index svelte-hdzef5"> </td><!></tr>'),nw=_('<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 rw(r,e){ht(e,!0);const n=jt(),s=n.i18n.t;let a=N(!1);const i=c(()=>e.spec.slots.filter(te=>t(a)||!rk(e.values,te)));function o(te){return te.id==="TIME"?s("Time"):te.id==="WEEKDAY"?s("Weekdays"):n.meta.parameterLabel(te.id,e.channelType)}function l(te,j){return e.values[bs(te,j)]}function f(te,j,U){e.onchange({[bs(te,j)]:U})}function p(te,j){const U=nk(te,j);U&&e.onchange(U)}function g(te,j){const U=e.spec.durations[`${te}:${j.id}`];return U===void 0?void 0:Ad(e.values,U)?.seconds}function b(te,j,U){const fe=e.spec.durations[`${te}:${j.id}`],Te=Number(U);if(fe===void 0||U===""||!Number.isFinite(Te))return;const ce=Td(Te,fe);ce&&e.onchange(ce)}function k(te,j,U){const fe=Number(U);U===""||!Number.isFinite(fe)||f(te,j,fe)}var y=nw(),S=w(y),A=m(S,!0),x=d(S,2),D=m(x,!0),C=d(x,2),R=w(C),P=d(R,2),K=m(P,!0),q=d(C,2),re=w(q),ae=w(re),de=w(ae),G=w(de),ne=m(G,!0),ie=d(G);je(ie,17,()=>e.spec.columns,te=>te.id,(te,j)=>{var U=W0(),fe=m(U,!0);E(Te=>h(fe,Te),[()=>o(t(j))]),v(te,U)});var Z=d(ae);je(Z,20,()=>t(i),te=>te,(te,j)=>{var U=tw(),fe=w(U),Te=m(fe,!0),ce=d(fe);je(ce,17,()=>e.spec.columns,Re=>Re.id,(Re,xe)=>{var ge=ew(),M=w(ge);{var ue=X=>{var L=Y0(),z=w(L);je(z,18,()=>ZS,be=>be,(be,Ee,se)=>{var W=K0(),V=w(W),T=d(V,2),O=m(T,!0);E((J,_e,Ce,Fe)=>{I(W,"title",J),V.disabled=!e.spec.writable,I(V,"aria-label",_e),I(V,"data-testid",`switch-${j}-day-${t(se)}`),Rr(V,Ce),h(O,Fe)},[()=>s(Ee),()=>s(Ee),()=>JS(l(j,"WEEKDAY"),t(se)),()=>s(Ee).slice(0,2)]),ee("change",V,J=>f(j,"WEEKDAY",ek(l(j,"WEEKDAY"),t(se),J.currentTarget.checked))),v(be,W)});var le=d(z,2),me=m(le,!0);E(be=>{I(le,"data-testid",`switch-${j}-mask`),h(me,be)},[()=>String(l(j,"WEEKDAY")??"—")]),v(X,L)},he=X=>{var L=q0();E((z,le)=>{L.disabled=!e.spec.writable,I(L,"aria-label",z),I(L,"data-testid",`switch-${j}-time`),rn(L,le)},[()=>`${s("Time")} ${j}`,()=>tk(e.values,j)]),ee("change",L,z=>p(j,z.currentTarget.value)),v(X,L)},ve=X=>{var L=$0(),z=Ie(L),le=d(z,2),me=m(le,!0);E((be,Ee,se)=>{z.disabled=!e.spec.writable,I(z,"aria-label",be),I(z,"data-testid",`switch-${j}-${t(xe).id}`),rn(z,Ee),I(le,"data-testid",`switch-${j}-${t(xe).id}-result`),h(me,se)},[()=>`${o(t(xe))} ${j}`,()=>g(j,t(xe))??"",()=>hi(g(j,t(xe))??Number.NaN)]),ee("input",z,be=>b(j,t(xe),be.currentTarget.value)),v(X,L)},ye=X=>{var L=Q0();je(L,22,()=>Ps(t(xe).description)??[],le=>le,(le,me,be)=>{var Ee=X0(),se=m(Ee,!0),W={};E((V,T)=>{h(se,V),W!==(W=T)&&(Ee.value=(Ee.__value=W)??"")},[()=>n.meta.valueLabel(t(xe).id,me,e.channelType),()=>String(t(be))]),v(le,Ee)});var z;Qt(L),E((le,me)=>{L.disabled=!e.spec.writable,I(L,"aria-label",le),I(L,"data-testid",`switch-${j}-${t(xe).id}`),z!==(z=me)&&(L.value=(L.__value=z)??"",Cn(L,z))},[()=>`${o(t(xe))} ${j}`,()=>String(l(j,t(xe).id)??"")]),ee("change",L,le=>f(j,t(xe).id,Number(le.currentTarget.value))),v(X,L)},Y=X=>{var L=J0(),z=Ie(L),le=d(z,2);{var me=Ee=>{var se=Z0(),W=m(se,!0);E(V=>h(W,V),[()=>ro(t(xe).description)]),v(Ee,se)},be=c(()=>ro(t(xe).description)!=="");$(le,Ee=>{t(be)&&Ee(me)})}E((Ee,se,W,V)=>{I(z,"min",Ee),I(z,"max",se),I(z,"step",t(xe).description.TYPE==="FLOAT"?.01:1),z.disabled=!e.spec.writable,I(z,"aria-label",W),I(z,"data-testid",`switch-${j}-${t(xe).id}`),rn(z,V)},[()=>Xn(t(xe).description,"MIN"),()=>Xn(t(xe).description,"MAX"),()=>`${o(t(xe))} ${j}`,()=>l(j,t(xe).id)??""]),ee("input",z,Ee=>k(j,t(xe).id,Ee.currentTarget.value)),v(X,L)};$(M,X=>{t(xe).kind==="weekday"?X(ue):t(xe).kind==="time"?X(he,1):t(xe).kind==="duration"?X(ve,2):t(xe).kind==="enum"?X(ye,3):X(Y,-1)})}v(Re,ge)}),E(()=>{I(U,"data-testid",`switch-slot-${j}`),h(Te,j)}),v(te,U)}),E((te,j,U,fe)=>{h(A,te),h(D,j),h(K,U),h(ne,fe)},[()=>s("Switching programme"),()=>s("No weekday chosen - the slot does nothing"),()=>s("Unused"),()=>s("Slot")]),mr(R,()=>t(a),te=>u(a,te)),v(r,y),mt()}kt(["change","input"]);var gu=_('<button type="button"> </button>'),bu=_("<option> </option>"),sw=_('<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>'),aw=_('<span class="hmm-week-unit svelte-1du5x7x"> </span>'),iw=_('<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>'),ow=_("<li> </li>"),lw=_('<ul class="hmm-week-problems svelte-1du5x7x" data-testid="week-problems"></ul>'),dw=_('<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 cw(r,e){ht(e,!0);const n=jt(),s=n.i18n.t;let a=N(0),i=N(Be(ji[0]??"MONDAY")),o=N("*"),l=N("");const f=c(()=>e.spec.profiles[t(a)]??e.spec.profiles[0]),p=c(()=>ro(e.spec.valueDescription)),g=c(()=>ok(e.spec,e.values)),b=c(()=>aa(Xn(e.spec.valueDescription,"MIN"),e.spec.valueDescription)),k=c(()=>aa(Xn(e.spec.valueDescription,"MAX"),e.spec.valueDescription)),y=c(()=>n.meta.parameterLabel(e.spec.valueField,e.channelType)),S=c(()=>t(g).filter(T=>T.profile===(t(f)?.id??"")));function A(T){const O=e.spec.days.indexOf(T),J=ak[O];return J===void 0?T:s(J)}function x(T){return T===""?s("Week programme"):`${s("Profile")} ${T.slice(1)}`}function D(T){return!t(f)||T===1?za(0):za(Kl(e.spec,e.values,t(f),t(i),T-1).endTime??0)}function C(T,O){const J=ck(O);J===void 0||!t(f)||e.onchange({[Wr(t(f).endTimePrefix,t(i),T)]:J})}function R(T,O){const J=Number(O);O===""||!Number.isFinite(J)||!t(f)||e.onchange({[Wr(t(f).valuePrefix,t(i),T)]:J})}function P(){if(!t(f))return;const T=t(o)==="*"?e.spec.days:[t(o)];e.onchange(lk(e.spec,e.values,t(f),t(i),T))}function K(){const T=e.spec.profiles.find(O=>O.id===t(l));!t(f)||!T||e.onchange(dk(e.spec,e.values,t(f),[T]))}function q(T){const O={day:A(T.day),slot:String(T.slot),end:za(e.spec.dayEnd)};switch(T.code){case"not-increasing":return s("{day}: end time {slot} is not after the one before it",O);case"after-day-end":return s("{day}: end time {slot} comes after the day has ended",O);case"day-not-closed":return s("{day}: the last end time must be {end}",O)}}var re=dw(),ae=w(re),de=m(ae,!0),G=d(ae,2),ne=m(G,!0),ie=d(G,2);{var Z=T=>{var O=sw(),J=w(O);je(J,19,()=>e.spec.profiles,H=>H.id,(H,F,Ne)=>{var Me=gu();let Ke;var pe=m(Me,!0);E(De=>{Ke=St(Me,1,"hmm-button svelte-1du5x7x",null,Ke,{"hmm-week-active":t(Ne)===t(a)}),I(Me,"data-testid",`week-profile-${t(F).id}`),h(pe,De)},[()=>x(t(F).id)]),ee("click",Me,()=>u(a,t(Ne),!0)),v(H,Me)});var _e=d(J,4),Ce=w(_e),Fe=m(Ce,!0),We=d(Ce,2),Ze=w(We);Ze.value=Ze.__value="";var nt=d(Ze);je(nt,17,()=>e.spec.profiles,H=>H.id,(H,F)=>{var Ne=wt(),Me=Ie(Ne);{var Ke=pe=>{var De=bu(),Pe=m(De,!0),Ge={};E(Le=>{h(Pe,Le),Ge!==(Ge=t(F).id)&&(De.value=(De.__value=Ge)??"")},[()=>x(t(F).id)]),v(pe,De)};$(Me,pe=>{t(F).id!==t(f)?.id&&pe(Ke)})}v(H,Ne)}),Qt(We);var ke=d(_e,2),we=m(ke,!0);E((H,F)=>{h(Fe,H),ke.disabled=!e.spec.writable||t(l)==="",h(we,F)},[()=>s("Copy profile to"),()=>s("Copy")]),br(We,()=>t(l),H=>u(l,H)),ee("click",ke,K),v(T,O)};$(ie,T=>{e.spec.profiles.length>1&&T(Z)})}var te=d(ie,2),j=w(te);je(j,16,()=>e.spec.days,T=>T,(T,O)=>{var J=gu();let _e;var Ce=m(J,!0);E(Fe=>{_e=St(J,1,"hmm-button svelte-1du5x7x",null,_e,{"hmm-week-active":O===t(i)}),I(J,"data-testid",`week-day-${O}`),h(Ce,Fe)},[()=>A(O)]),ee("click",J,()=>u(i,O,!0)),v(T,J)});var U=d(j,4),fe=w(U),Te=m(fe,!0),ce=d(fe,2),Re=w(ce),xe=m(Re,!0);Re.value=Re.__value="*";var ge=d(Re);je(ge,16,()=>e.spec.days,T=>T,(T,O)=>{var J=wt(),_e=Ie(J);{var Ce=Fe=>{var We=bu(),Ze=m(We,!0),nt={};E(ke=>{h(Ze,ke),nt!==(nt=O)&&(We.value=(We.__value=nt)??"")},[()=>A(O)]),v(Fe,We)};$(_e,Fe=>{O!==t(i)&&Fe(Ce)})}v(T,J)}),Qt(ce);var M=d(U,2),ue=m(M,!0),he=d(te,2),ve=w(he),ye=w(ve),Y=w(ye),X=m(Y,!0),L=d(Y),z=m(L,!0),le=d(L),me=m(le,!0),be=d(le),Ee=m(be,!0),se=d(ve);je(se,20,()=>Array.from({length:e.spec.slots},(T,O)=>O+1),T=>T,(T,O)=>{const J=c(()=>t(f)?Kl(e.spec,e.values,t(f),t(i),O):void 0);var _e=iw(),Ce=w(_e),Fe=m(Ce,!0),We=d(Ce),Ze=m(We,!0),nt=d(We),ke=w(nt),we=d(nt),H=w(we),F=d(H,2);{var Ne=Me=>{var Ke=aw(),pe=m(Ke,!0);E(()=>h(pe,t(p))),v(Me,Ke)};$(F,Me=>{t(p)!==""&&Me(Ne)})}E((Me,Ke,pe,De)=>{I(_e,"data-testid",`week-slot-${O}`),h(Fe,O),h(Ze,Me),ke.disabled=!e.spec.writable,I(ke,"aria-label",Ke),I(ke,"data-testid",`week-slot-${O}-endtime`),rn(ke,pe),I(H,"min",t(b)),I(H,"max",t(k)),H.disabled=!e.spec.writable,I(H,"aria-label",De),I(H,"data-testid",`week-slot-${O}-value`),rn(H,t(J)?.value??"")},[()=>D(O),()=>`${s("until")} ${O}`,()=>za(t(J)?.endTime),()=>`${s("Value")} ${O}`]),ee("change",ke,Me=>C(O,Me.currentTarget.value)),ee("input",H,Me=>R(O,Me.currentTarget.value)),v(T,_e)});var W=d(he,2);{var V=T=>{var O=lw();je(O,21,()=>t(S),J=>`${J.day}-${J.slot}-${J.code}`,(J,_e)=>{var Ce=ow(),Fe=m(Ce,!0);E(We=>h(Fe,We),[()=>q(t(_e))]),v(J,Ce)}),v(T,O)};$(W,T=>{t(S).length>0&&T(V)})}E((T,O,J,_e,Ce,Fe,We,Ze)=>{h(de,T),h(ne,O),h(Te,J),h(xe,_e),M.disabled=!e.spec.writable,h(ue,Ce),h(X,Fe),h(z,We),h(me,Ze),h(Ee,t(y))},[()=>s("Week programme"),()=>s("The end times of a day rise until {end}, and the last one is {end}",{end:za(e.spec.dayEnd)}),()=>s("Copy day to"),()=>s("Weekdays"),()=>s("Copy"),()=>s("Slot"),()=>s("Time"),()=>s("until")]),br(ce,()=>t(o),T=>u(o,T)),ee("click",M,P),v(r,re),mt()}kt(["click","change","input"]);function uw(r,e){var n=wt(),s=Ie(n);je(s,17,()=>e.specs,a=>a.id,(a,i)=>{var o=wt(),l=Ie(o);{var f=y=>{O0(y,{get spec(){return t(i)},get values(){return e.values},get channelType(){return e.channelType},get onchange(){return e.onchange}})},p=y=>{B0(y,{get spec(){return t(i)},get values(){return e.values},get channelType(){return e.channelType},get onchange(){return e.onchange}})},g=y=>{j0(y,{get spec(){return t(i)},get values(){return e.values},get channelType(){return e.channelType},get onchange(){return e.onchange}})},b=y=>{rw(y,{get spec(){return t(i)},get values(){return e.values},get channelType(){return e.channelType},get onchange(){return e.onchange}})},k=y=>{cw(y,{get spec(){return t(i)},get values(){return e.values},get channelType(){return e.channelType},get onchange(){return e.onchange}})};$(l,y=>{t(i).kind==="blind-calibration"?y(f):t(i).kind==="duration-pairs"?y(p,1):t(i).kind==="enum-options"?y(g,2):t(i).kind==="switch-week-profile"?y(b,3):t(i).kind==="week-profile"&&y(k,4)})}v(a,o)}),v(r,n)}class fw extends Map{#e=new Map;#n=N(0);#t=N(0);#s=xs||-1;constructor(e){if(super(),e){for(var[n,s]of e)super.set(n,s);this.#t.v=super.size}}#a(e){return xs===this.#s?N(e):Hs(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),fs(l);else if(i!==n){fs(a);var f=l.reactions===null?null:new Set(l.reactions),p=f===null||!a.reactions?.every(g=>f.has(g));p&&fs(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),fs(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);fs(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 $l="DYNAMIC_ROUTE_";function Hr(r,e,n){return r[`${$l}${e}_${String(n)}`]}function el(r){return typeof r=="string"?r:typeof r=="number"?String(r):""}function Qs(r){return r===!0||r===1||r==="true"||r==="1"}function _u(r){if(typeof r=="number"&&Number.isFinite(r))return r;if(typeof r=="string"&&r.trim()!==""&&Number.isFinite(Number(r)))return Number(r)}function hw(r){const e=new Set;for(const n of Object.keys(r))if(n.startsWith(`${$l}IP_DESTINATION_ADDRESS_`)){const s=Number(n.slice(`${$l}IP_DESTINATION_ADDRESS_`.length));Number.isInteger(s)&&e.add(s)}return[...e].sort((n,s)=>n-s).map(n=>({index:n,destination:el(Hr(r,"IP_DESTINATION_ADDRESS",n)),nextHop:el(Hr(r,"NEXT_HOP_ADDRESS",n)),distance:_u(Hr(r,"DISTANCE",n))??0,rssi:_u(Hr(r,"RSSI",n)),isStatic:Qs(Hr(r,"IS_STATIC_ROUTE",n)),isNeighbour:Qs(Hr(r,"IS_NEIGHBOUR",n)),macSequenceValid:Qs(Hr(r,"IS_MAC_SEQUENCE_NUMBER_VALID",n)),accessController:Qs(Hr(r,"OM_ACCESS_CONTROLLER",n)),router:Qs(Hr(r,"OM_ROUTER",n)),portable:Qs(Hr(r,"OM_PORTABLE_DEVICE",n)),listenerMode:el(Hr(r,"OM_LISTENER_MODE",n)),omValid:Qs(Hr(r,"OM_VALID",n))})).filter(n=>n.destination!=="")}function mw(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 vw=_("<p> </p>"),pw=js('<text class="hmm-routing-edge svelte-10p79ns"> <!></text>'),gw=js("<line></line><!>",1),bw=js('<text text-anchor="middle" class="hmm-routing-mark svelte-10p79ns">AC</text>'),_w=js('<text text-anchor="middle" class="hmm-routing-mark svelte-10p79ns">R</text>'),Ew=js('<text text-anchor="middle" class="hmm-routing-mark svelte-10p79ns">P</text>'),yw=js('<g><circle class="svelte-10p79ns"></circle><text text-anchor="middle" class="svelte-10p79ns"> </text><!></g>'),Sw=_('<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>'),kw=_('<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),ww=_('<div class="hmm-routing svelte-10p79ns" data-testid="routing-table"><p class="hmm-routing-hint svelte-10p79ns"> </p> <!></div>');function Aw(r,e){ht(e,!0);const n=jt(),s=n.i18n.t,a=c(()=>hw(e.values)),i=c(()=>mw(e.self,t(a))),o=x=>{const D=n.nameOf(x);return D&&D!==x?D:x},l=560,f=c(()=>{const x=new fw,D=l/2,C=l/2;x.set(t(i).self,{x:D,y:C});const R=t(i).edges.filter(q=>q.from===t(i).self).map(q=>q.to),P=t(i).nodes.map(q=>q.id).filter(q=>q!==t(i).self&&!R.includes(q)),K=(q,re,ae)=>{q.forEach((de,G)=>{const ne=ae+2*Math.PI*G/Math.max(q.length,1);x.set(de,{x:D+re*Math.cos(ne),y:C+re*Math.sin(ne)})})};return K(R,l*.26,-Math.PI/2),K(P,l*.44,-Math.PI/2+Math.PI/Math.max(P.length,1)),x}),p=x=>t(f).get(x)??{x:l/2,y:l/2};var g=ww(),b=w(g),k=m(b,!0),y=d(b,2);{var S=x=>{var D=vw(),C=m(D,!0);E(R=>h(C,R),[()=>s("No routes: the device reported an empty table.")]),v(x,D)},A=x=>{var D=kw(),C=Ie(D),R=w(C);je(R,17,()=>t(i).edges,X=>`${X.from}>${X.to}`,(X,L)=>{const z=c(()=>p(t(L).from)),le=c(()=>p(t(L).to));var me=gw(),be=Ie(me);let Ee;var se=d(be);{var W=V=>{var T=pw(),O=w(T),J=d(O);{var _e=Ce=>{var Fe=Zn();E(()=>h(Fe,`, ${t(L).rssi??""} dBm`)),v(Ce,Fe)};$(J,Ce=>{t(L).rssi!==void 0&&Ce(_e)})}E(Ce=>{I(T,"x",(t(z).x+t(le).x)/2),I(T,"y",(t(z).y+t(le).y)/2-4),h(O,`${t(L).distance??""}
17
+ ${Ce??""}`)},[()=>s("hops",{},t(L).distance)]),v(V,T)};$(se,V=>{t(L).distance!==void 0&&V(W)})}E(()=>{I(be,"x1",t(z).x),I(be,"y1",t(z).y),I(be,"x2",t(le).x),I(be,"y2",t(le).y),Ee=St(be,0,"svelte-10p79ns",null,Ee,{"hmm-routing-static":t(L).isStatic})}),v(X,me)});var P=d(R);je(P,17,()=>t(i).nodes,X=>X.id,(X,L)=>{const z=c(()=>p(t(L).id));var le=yw();let me;var be=w(le),Ee=d(be),se=m(Ee,!0),W=d(Ee);{var V=J=>{var _e=bw();E(()=>{I(_e,"x",t(z).x),I(_e,"y",t(z).y+4)}),v(J,_e)},T=J=>{var _e=_w();E(()=>{I(_e,"x",t(z).x),I(_e,"y",t(z).y+4)}),v(J,_e)},O=J=>{var _e=Ew();E(()=>{I(_e,"x",t(z).x),I(_e,"y",t(z).y+4)}),v(J,_e)};$(W,J=>{t(L).accessController?J(V):t(L).router?J(T,1):t(L).portable&&J(O,2)})}E(J=>{me=St(le,0,"hmm-routing-node svelte-10p79ns",null,me,{"hmm-routing-self":t(L).id===t(i).self,"hmm-routing-router":t(L).router}),I(be,"cx",t(z).x),I(be,"cy",t(z).y),I(be,"r",t(L).id===t(i).self?22:16),I(Ee,"x",t(z).x),I(Ee,"y",t(z).y+30),h(se,J)},[()=>o(t(L).id)]),v(X,le)});var K=d(C,2),q=w(K),re=w(q),ae=d(w(re)),de=m(ae,!0),G=d(ae),ne=m(G,!0),ie=d(G),Z=m(ie,!0),te=d(ie,2),j=m(te,!0),U=d(te),fe=m(U,!0),Te=d(U),ce=m(Te,!0),Re=d(Te),xe=m(Re,!0),ge=d(Re),M=m(ge,!0),ue=d(ge),he=m(ue,!0),ve=d(ue),ye=m(ve,!0),Y=d(q);je(Y,21,()=>t(a),X=>X.index,(X,L)=>{var z=Sw(),le=w(z),me=m(le,!0),be=d(le),Ee=w(be),se=m(Ee,!0),W=d(Ee),V=d(be),T=w(V),O=m(T,!0),J=d(V),_e=m(J,!0),Ce=d(J),Fe=m(Ce,!0),We=d(Ce),Ze=m(We,!0),nt=d(We),ke=m(nt,!0),we=d(nt),H=m(we,!0),F=d(we),Ne=m(F,!0),Me=d(F),Ke=m(Me,!0),pe=d(Me),De=m(pe,!0),Pe=d(pe),Ge=m(Pe,!0);E((Le,Ye,Xe)=>{I(z,"data-testid",Le),h(me,t(L).index),h(se,t(L).destination),h(W,` ${Ye??""}`),h(O,t(L).nextHop),h(_e,t(L).distance),h(Fe,Xe),h(Ze,t(L).isNeighbour?"✔":""),h(ke,t(L).isStatic?"✔":""),h(H,t(L).router?"✔":""),h(Ne,t(L).accessController?"✔":""),h(Ke,t(L).portable?"✔":""),h(De,t(L).listenerMode),h(Ge,t(L).omValid?"✔":"")},[()=>`route-${String(t(L).index)}`,()=>o(t(L).destination)!==t(L).destination?o(t(L).destination):"",()=>t(L).rssi===void 0?"":`${String(t(L).rssi)} dBm`]),v(X,z)}),E((X,L,z,le,me,be,Ee,se,W,V,T,O)=>{I(C,"viewBox",X),I(C,"aria-label",L),h(de,z),h(ne,le),h(Z,me),h(j,be),h(fe,Ee),h(ce,se),h(xe,W),h(M,V),h(he,T),h(ye,O)},[()=>`0 0 ${String(l)} ${String(l)}`,()=>s("Routing table"),()=>s("Destination"),()=>s("Next hop"),()=>s("Hops"),()=>s("Neighbour"),()=>s("Static"),()=>s("Router"),()=>s("Access controller"),()=>s("Portable"),()=>s("Listener mode"),()=>s("Valid")]),v(x,D)};$(y,x=>{t(a).length===0?x(S):x(A,-1)})}E(x=>h(k,x),[()=>s("Read from the device itself; every read costs duty cycle, so it is read once when this opens.")]),v(r,g),mt()}var Tw=_('<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 Rw(r,e){ht(e,!0);let n=B(e,"title",3,void 0),s=B(e,"changed",3,!1);var a=Tw();let i;var o=w(a),l=w(o),f=m(l,!0),p=d(o,2),g=w(p),b=w(g),k=d(b,2),y=m(k,!0);E(()=>{i=St(a,1,"hmm-param hmm-param-table-row svelte-ery515",null,i,{"hmm-param-changed":s()}),I(a,"data-testid",`suppress-row-${e.name}`),h(f,e.name),I(g,"title",n()),Rr(b,e.suppressed),I(b,"data-testid",`suppress-${e.name}`),h(y,e.label)}),ee("change",b,S=>e.onchange(S.currentTarget.checked)),v(r,a),mt()}kt(["change"]);var xw=_('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="paramset-preview"> </button>',1),Iw=_("<p> </p>"),Dw=_('<p data-testid="paramset-failed"> </p>'),Nw=_('<label class="hmm-paramset-option svelte-onngst"><input type="checkbox" data-testid="paramset-expert"/> <span> </span></label>'),Cw=_('<label class="hmm-paramset-option svelte-onngst"><input type="checkbox" data-testid="paramset-show-covered"/> <span> </span></label>'),Pw=_('<button type="button" class="hmm-button" data-testid="paramset-internal-key"> </button>'),Mw=_('<label class="hmm-paramset-option svelte-onngst"><input type="checkbox" data-testid="paramset-show-hidden"/> <span> </span></label>'),Ow=_("<li> </li>"),Lw=_('<ul class="hmm-paramset-warnings svelte-onngst" data-testid="paramset-warnings"></ul>'),Fw=_('<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>'),Gw=_("<div><!></div>"),Uw=_('<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>'),Bw=_('<li><span class="hmm-mono"> </span> </li>'),Vw=_('<ul class="hmm-paramset-results svelte-onngst" data-testid="paramset-results"></ul>'),Hw=_('<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),zw=_("<!> <!> <!> <!>",1);function jw(r,e){ht(e,!0);let n=B(e,"open",15,!1),s=B(e,"interfaceName",3,""),a=B(e,"address",3,""),i=B(e,"paramset",3,"MASTER");const o=jt(),l=o.i18n.t;let f=N(void 0),p=N(Be({})),g=N(Be({})),b=N(Be({})),k=N(void 0),y=N(""),S=N(!1),A=N(Be([])),x=N(!1),D=N(!1),C=N(!1),R=N(!1),P=N(!1),K=N(void 0),q=N(Be([])),re=N(Be([])),ae=0,de=N(void 0),G=N(Be({})),ne=N(void 0),ie=N(!1),Z=N(void 0),te=N(!1);const j=c(()=>li(s(),o.interfaces.typeOf(s()))),U=c(()=>n()&&t(j)&&/:0$/.test(a())&&(i()==="MASTER"||i()==="VALUES"));lt(()=>{if(!t(U)){u(de,void 0),u(G,{},!0),u(ne,void 0);return}const Se={interfaceName:s(),address:a(),paramset:i()};u(G,{},!0),gr(()=>{o.paramsets.suppressedServiceMessages(Se.interfaceName,Se.address).then(Oe=>{Se.address===a()&&Se.interfaceName===s()&&u(de,Oe,!0)}),Se.paramset==="MASTER"&&o.paramsets.describe(Se.interfaceName,Se.address,"VALUES").then(Oe=>{Se.address===a()&&Se.interfaceName===s()&&u(ne,Oe,!0)})})});const fe=c(()=>{if(t(de)===void 0)return[];const Se=i()==="VALUES"?t(f):t(ne);return Se?zh(Se):[]}),Te=c(()=>i()==="MASTER"?t(fe):[]);function ce(Se){return t(G)[Se]??t(de)?.includes(Se)===!0}function Re(Se){return Se in t(G)&&t(G)[Se]!==(t(de)?.includes(Se)===!0)}const xe=c(()=>t(fe).some(Se=>Re(Se)));function ge(Se,Oe){u(G,{...t(G),[Se]:Oe},!0)}function M(Se){u(G,Object.fromEntries(t(fe).map(Oe=>[Oe,Se])),!0)}function ue(){u(Z,bk({address:a(),suppressed:t(de)??[],edits:t(G),labels:{suppressed:l("suppressed"),unsuppressed:l("not suppressed")}}),!0),u(ie,!0)}async function he(){const Se=t(Z);if(Se){u(te,!0);try{for(const Oe of Se.entries)await o.paramsets.suppressServiceMessages(s(),a(),Oe.param,t(G)[Oe.param]===!0);u(de,await o.paramsets.suppressedServiceMessages(s(),a()),!0),u(G,{},!0)}finally{u(te,!1),u(ie,!1)}}}const ve=c(()=>o.devices.index(s())),ye=c(()=>t(ve)?.get(a())?.TYPE??""),Y=c(()=>`${i()} — ${o.nameOf(a())} (${a()})`),X=c(()=>t(f)?Hh(t(f),t(k)):[]),L=c(()=>({optionByName:(Se,Oe)=>o.meta.valueLabelIfKnown(Se,Oe,t(ye)),optionByIndex:(Se,Oe)=>o.meta.valueLabelIfKnown(Se,String(Oe),t(ye)),preset:Se=>t(k)?.parameters.find(Oe=>Oe.name===Se)?.preset,uiLabel:Se=>o.meta.uiLabel(Se)})),z=c(()=>t(f)?mk({interfaceName:s(),address:a(),channelType:t(ye),paramset:i(),description:t(f)},t(L)):[]),le=c(()=>t(C)||t(R)?new Set:vk(t(z))),me=c(()=>t(X).filter(Se=>(t(D)||Se.visible)&&!t(le).has(Se.name))),be=c(()=>i()==="MASTER"&&t(f)?vh(t(k)?.controls,t(f)):void 0),Ee=c(()=>t(R)?void 0:t(be)),se=c(()=>t(R)?Rl(t(be)):new Set),W=c(()=>new Map(t(X).map(Se=>[Se.name,Se]))),V=c(()=>Rl(t(be))),T=c(()=>t(R)?[]:t(Ee)?t(z).filter(Se=>!Se.covers.every(Oe=>t(V).has(Oe))):t(z));lt(()=>{n()&&i()==="MASTER"&&o.meta.loadPresets()});const O=c(()=>i()==="VALUES"),J=c(()=>i()==="MASTER"),_e=c(()=>{if(!t(J)||!t(ve)||a()===""||!t(ve).has(a()))return;const Se=t(ve).all().filter(Oe=>Oe.TYPE===t(ye)&&Oe.ADDRESS!==a()).map(Oe=>Oe.ADDRESS);return E_(t(ve),a(),i(),Se)}),Ce=c(()=>t(_e)?[...t(_e).eligible.map(Se=>({value:Se,label:`${o.nameOf(Se)} (${Se})`})),...t(_e).ineligible.filter(Se=>Se.reason==="different-identity").map(Se=>({value:Se.address,label:`${o.nameOf(Se.address)} (${Se.address}) — ${l("other firmware or device type")}`,disabled:!0}))]:[]),Fe=c(()=>(t(k)?.problems??[]).map(Se=>`${Se.params.join(", ")}: ${o.meta.uiLabel(Se.errorKey)}`));lt(()=>{if(!n()||s()===""||a()==="")return;const Se=ae+=1,Oe={interfaceName:s(),address:a(),paramset:i()};o.paramsets.open(Oe.interfaceName,Oe.address,Oe.paramset).then($e=>{Se===ae&&(u(f,$e?.description,!0),u(p,$e?.values??{},!0),u(g,{},!0),Oe.paramset==="VALUES"&&Ge(Se),u(b,{},!0),u(q,[],!0),u(re,[],!0),u(A,[],!0),u(x,!1),u(R,!1))})}),lt(()=>{const Se=t(f);if(!n()||!Se||i()!=="MASTER"||t(ye)===""){u(k,void 0),We=void 0;return}const Oe=nt(),$e=t(y),ft=Ze(s(),a());o.meta.masterView(t(ye),Se,Oe,$e,ft).then(Et=>{u(k,Et,!0)})});let We;function Ze(Se,Oe){const $e=`${Se}|${Oe}`,ft=Oe.indexOf(":"),Et=ft<0?Oe:Oe.slice(0,ft);return{deviceType:t(ve)?.get(Oe)?.PARENT_TYPE||t(ve)?.get(Et)?.TYPE||"",channel:ft<0?-1:Number(Oe.slice(ft+1)),channelMode:()=>(We?.key!==$e&&(We={key:$e,answer:o.paramsets.channelMode(Se,Oe)}),We.answer)}}lt(()=>{if(!n()||i()!=="MASTER"||a()===""){u(y,"");return}const Se=`${s()}|${a()}`;u(y,""),o.paramsets.paramsetId(s(),a()).then(Oe=>o.meta.masterFormId(Oe)).then(Oe=>{`${s()}|${a()}`===Se&&u(y,Oe,!0)})});function nt(){const Se={...t(p)};for(const[Oe,$e]of Object.entries(t(b)))(typeof $e=="boolean"||typeof $e=="number"||typeof $e=="string")&&(Se[Oe]=$e);return Se}function ke(Se){return Object.prototype.hasOwnProperty.call(t(b),Se.name)?t(b)[Se.name]:t(p)[Se.name]??Se.description.DEFAULT}function we(Se){return Object.prototype.hasOwnProperty.call(t(b),Se.name)}function H(Se,Oe){u(b,{...t(b),[Se.name]:Oe},!0)}function F(Se){u(b,{...t(b),...Se},!0)}function Ne(Se){return o.meta.parameterLabel(Se.name,t(ye))}function Me(Se){const Oe=o.meta.parameterHelp(Se.name,t(ye));return Oe===void 0?void 0:Oe.replace(/<[^>]*>/g," ").replace(/\s+/g," ").trim()}function Ke(){t(f)&&(u(q,[],!0),u(re,[],!0),u(K,qa(t(p),t(b),t(f),{interfaceName:s(),targets:[a(),...t(A)],writeAll:t(x)}),!0),u(P,!0))}async function pe(){const Se=t(K);if(!Se||!t(f))return;const Oe=await o.paramsets.put(s(),[...Se.targets],i(),Se.values,t(x)?{writeAll:!0}:void 0);u(q,Oe,!0);const $e=await o.paramsets.read(s(),a(),i());$e&&(u(re,Yl(Se.values,$e,t(f)),!0),u(p,$e,!0),i()==="VALUES"&&Ge(ae),u(b,{},!0)),Oe.length>0&&Oe.every(ft=>ft.ok)&&!t(re).some(ft=>ft.differs)&&u(P,!1)}function De(){const Se=t(K);!Se||Se.entries.length===0||(o.changeSet.stage({kind:"paramset",interfaceName:s(),title:`${i()} — ${o.nameOf(a())} (${a()})`,targets:[...Se.targets],paramset:i(),values:Se.values,writeAll:t(x),calls:Se.targets.map(Oe=>`putParamset(${Oe}, ${i()}, ${JSON.stringify(Se.values)})`),lines:Se.entries.map(Oe=>({label:Oe.param,from:Oe.from,to:Oe.to}))}),u(P,!1),n(!1))}function Pe(Se,Oe){if(Se.kind==="enum"&&typeof Oe=="number"){const $e=Se.valueList?.[Oe];if($e!==void 0)return`${o.meta.valueLabel(Se.name,$e,t(ye))} (${Oe})`}return String(Oe)}async function Ge(Se){const Oe=await o.paramsets.valueStates(s(),a());Se===ae&&u(g,Oe,!0)}async function Le(Se){const Oe=ke(Se),$e=typeof Oe=="boolean"||typeof Oe=="number"||typeof Oe=="string"?Oe:!1;await o.paramsets.setValue(s(),a(),Se.name,$e)&&(u(b,Object.fromEntries(Object.entries(t(b)).filter(([Et])=>Et!==Se.name)),!0),u(p,{...t(p),[Se.name]:$e},!0),Ge(ae),o.notices.push("info",`setValue ${o.nameOf(a())} (${a()}) ${Se.name} = ${Pe(Se,$e)}`))}var Ye=zw(),Xe=Ie(Ye);yn(Xe,{get title(){return t(Y)},width:"900px",height:"min(640px, calc(100vh - 32px))",minWidth:520,minHeight:320,testId:"paramset-dialog",get open(){return n()},set open(Oe){n(Oe)},buttons:Oe=>{var $e=xw(),ft=Ie($e),Et=m(ft,!0),it=d(ft,2),Wt=m(it,!0);E((Mt,Ot)=>{h(Et,Mt),it.disabled=!t(f),h(Wt,Ot)},[()=>l("Close"),()=>l("Preview")]),ee("click",ft,()=>n(!1)),ee("click",it,Ke),v(Oe,$e)},children:(Oe,$e)=>{var ft=wt(),Et=Ie(ft);{var it=Ot=>{var Zt=Iw(),bn=m(Zt,!0);E(on=>h(bn,on),[()=>l("Loading Homematic Manager...")]),v(Ot,Zt)},Wt=Ot=>{var Zt=Dw(),bn=m(Zt,!0);E(on=>h(bn,on),[()=>l("No data")]),v(Ot,Zt)},Mt=Ot=>{var Zt=Hw(),bn=Ie(Zt),on=w(bn);{var un=ct=>{{let rt=c(()=>l("Please choose one or more channels")),st=c(()=>l("Please choose one or more channels")),Ve=c(()=>l("Filter")),et=c(()=>l("Check all")),at=c(()=>l("Uncheck all"));oi(ct,{get options(){return t(Ce)},get label(){return t(rt)},get placeholder(){return t(st)},get filterLabel(){return t(Ve)},get checkAllLabel(){return t(et)},get uncheckAllLabel(){return t(at)},summary:_t=>l("{count} channels selected",{},_t.length),testId:"paramset-targets",get selected(){return t(A)},set selected(_t){u(A,_t,!0)}})}};$(on,ct=>{t(J)&&t(Ce).length>0&&ct(un)})}var vn=d(on,2),Pn=w(vn),Jn=d(Pn,2),jn=m(Jn,!0),Xt=d(vn,2);{var xt=ct=>{var rt=Nw(),st=w(rt),Ve=d(st,2),et=m(Ve,!0);E(at=>h(et,at),[()=>l("Expert view")]),mr(st,()=>t(R),at=>u(R,at)),v(ct,rt)};$(Xt,ct=>{t(be)&&ct(xt)})}var fn=d(Xt,2);{var Mn=ct=>{var rt=Cw(),st=w(rt),Ve=d(st,2),et=m(Ve,!0);E(at=>h(et,at),[()=>l("Show the raw parameters as well")]),mr(st,()=>t(C),at=>u(C,at)),v(ct,rt)};$(fn,ct=>{t(z).length>0&&!t(be)&&ct(Mn)})}var On=d(fn,2);{var Mr=ct=>{var rt=Pw(),st=m(rt,!0);E(Ve=>h(st,Ve),[()=>l("Internal key…")]),ee("click",rt,()=>u(S,!0)),v(ct,rt)};$(On,ct=>{t(k)?.internalKey&&ct(Mr)})}var Xr=d(On,2);{var Ln=ct=>{var rt=Mw(),st=w(rt),Ve=d(st,2),et=m(Ve,!0);E(at=>h(et,at),[()=>l("Show hidden parameters")]),mr(st,()=>t(D),at=>u(D,at)),v(ct,rt)},Wn=c(()=>t(X).some(ct=>!ct.visible)&&!t(Ee));$(Xr,ct=>{t(Wn)&&ct(Ln)})}var _r=d(bn,2);{var xr=ct=>{var rt=Lw();je(rt,20,()=>t(Fe),st=>st,(st,Ve)=>{var et=Ow(),at=m(et,!0);E(()=>h(at,Ve)),v(st,et)}),v(ct,rt)};$(_r,ct=>{t(Fe).length>0&&ct(xr)})}var lr=d(_r,2);{let ct=c(nt);uw(lr,{get specs(){return t(T)},get values(){return t(ct)},get channelType(){return t(ye)},onchange:F})}var Er=d(lr,2);{var tr=ct=>{{let rt=c(()=>a().split(":")[0]??a());Aw(ct,{get values(){return t(p)},get self(){return t(rt)}})}};$(Er,ct=>{i()==="ROUTING_TABLE"&&ct(tr)})}var yr=d(Er,2);{var Qr=ct=>{var rt=Fw(),st=d(w(rt),1,!0);E(Ve=>h(st,Ve),[()=>l("Marked: the parameters the easy mode of this channel shows")]),v(ct,rt)};$(yr,ct=>{t(R)&&t(se).size>0&&ct(Qr)})}var nr=d(yr,2);let is;var oe=w(nr);{var He=ct=>{{let rt=c(nt);Wh(ct,{get form(){return t(Ee)},get fields(){return t(W)},get values(){return t(rt)},changed:st=>Object.prototype.hasOwnProperty.call(t(b),st),get description(){return t(f)},get channelType(){return t(ye)},get presets(){return o.meta.presets},get timeSelectors(){return o.meta.timeSelectors},onchange:F,testId:"paramset-easy-form"})}};$(oe,ct=>{t(Ee)&&t(f)&&ct(He)})}var Gt=d(oe,2);je(Gt,17,()=>t(Ee)?[]:t(me),ct=>ct.name,(ct,rt)=>{const st=c(()=>t(fe).includes(t(rt).name));var Ve=Gw();let et;var at=w(Ve);{let _t=c(()=>ke(t(rt))),Rt=c(()=>Ne(t(rt))),Vt=c(()=>Me(t(rt))),Ut=c(()=>we(t(rt))),ln=c(()=>t(O)?t(g)[t(rt).name]:void 0),Bt=c(()=>t(O)&&t(rt).writable?()=>{Le(t(rt))}:void 0),hn=c(()=>t(st)?ce(t(rt).name):void 0),Tn=c(()=>t(st)?Qe=>ge(t(rt).name,Qe):void 0),gn=c(()=>l("suppressed")),Lt=c(()=>l("A suppressed one reports a value that raises no message; the CCU shows it as inactive.")),It=c(()=>t(st)&&Re(t(rt).name));Ea(at,{get field(){return t(rt)},get value(){return t(_t)},get label(){return t(Rt)},get help(){return t(Vt)},get changed(){return t(Ut)},valueLabel:Qe=>o.meta.valueLabel(t(rt).name,Qe,t(ye)),presetLabel:Qe=>o.meta.uiLabel(Qe),get valueState(){return t(ln)},onchange:Qe=>H(t(rt),Qe),get onset(){return t(Bt)},get suppressed(){return t(hn)},get onsuppress(){return t(Tn)},get suppressLabel(){return t(gn)},get suppressTitle(){return t(Lt)},get suppressChanged(){return t(It)}})}E(_t=>et=St(Ve,1,"hmm-paramset-easy-mark hmm-param-table-span svelte-onngst",null,et,{"hmm-paramset-easy-marked":_t}),[()=>t(se).has(t(rt).name)]),v(ct,Ve)});var pn=d(Gt,2);je(pn,16,()=>t(Te),ct=>ct,(ct,rt)=>{{let st=c(()=>ce(rt)),Ve=c(()=>Re(rt)),et=c(()=>l("suppressed")),at=c(()=>l("A suppressed one reports a value that raises no message; the CCU shows it as inactive."));Rw(ct,{get name(){return rt},get suppressed(){return t(st)},get changed(){return t(Ve)},get label(){return t(et)},get title(){return t(at)},onchange:_t=>ge(rt,_t)})}});var Sn=d(nr,2);{var er=ct=>{var rt=Uw(),st=w(rt),Ve=m(st),et=d(st,2),at=m(et,!0),_t=d(et,2),Rt=m(_t,!0),Vt=d(_t,2),Ut=m(Vt,!0);E((ln,Bt,hn,Tn,gn)=>{h(Ve,`${ln??""} — ${Bt??""}`),h(at,hn),h(Rt,Tn),Vt.disabled=!t(xe)||t(te),h(Ut,gn)},[()=>l("Service message suppression"),()=>l("Nothing is sent until Apply; the preview lists every call first."),()=>l("Suppress all"),()=>l("Unsuppress all"),()=>l("Apply")]),ee("click",et,()=>M(!0)),ee("click",_t,()=>M(!1)),ee("click",Vt,ue),v(ct,rt)};$(Sn,ct=>{t(fe).length>0&&ct(er)})}var Or=d(Sn,2);{var ys=ct=>{var rt=Vw();je(rt,21,()=>t(q),st=>`${st.address}-${st.paramset}`,(st,Ve)=>{var et=Bw();let at;var _t=w(et),Rt=m(_t,!0),Vt=d(_t);E(()=>{at=St(et,1,"svelte-onngst",null,at,{"hmm-paramset-failed":!t(Ve).ok}),h(Rt,t(Ve).address),h(Vt,` ${t(Ve).ok?"✔":`✕ ${t(Ve).faultString??""}`}`)}),v(st,et)}),v(ct,rt)};$(Or,ct=>{t(q).length>0&&ct(ys)})}E(ct=>{h(jn,ct),is=St(nr,1,"hmm-paramset-list hmm-param-table svelte-onngst",null,is,{"hmm-paramset-raw":i()==="ROUTING_TABLE"})},[()=>l("Write every parameter, not only the changed ones")]),mr(Pn,()=>t(x),ct=>u(x,ct)),v(Ot,Zt)};$(Et,Ot=>{o.paramsets.loading&&!t(f)?Ot(it):t(f)?Ot(Mt,-1):Ot(Wt,1)})}v(Oe,ft)},$$slots:{buttons:!0,default:!0}});var ze=d(Xe,2);ql(ze,{get preview(){return t(K)},get paramset(){return i()},get warnings(){return t(Fe)},get results(){return t(q)},get readBack(){return t(re)},get writing(){return o.paramsets.writing},onstage:De,onconfirm:()=>{pe()},get open(){return t(P)},set open(Se){u(P,Se,!0)}});var Je=d(ze,2);{var dt=Se=>{{let Oe=c(()=>l("Apply")),$e=c(()=>l("{count} calls will be made",{},t(Z)?.entries.length??0));ql(Se,{get preview(){return t(Z)},paramset:"VALUES",get writing(){return t(te)},get confirmLabel(){return t(Oe)},get countText(){return t($e)},onconfirm:()=>{he()},get open(){return t(ie)},set open(ft){u(ie,ft,!0)}})}};$(Je,Se=>{t(ie)&&Se(dt)})}var pt=d(Je,2);{var gt=Se=>{Kh(Se,{get sender(){return a()},get receiver(){return a()},get open(){return t(S)},set open(Oe){u(S,Oe,!0)}})};$(pt,Se=>{t(S)&&Se(gt)})}v(r,Ye),mt()}kt(["click"]);const Ww="modulepreload",Kw=function(r,e){return new URL(r,e).href},Eu={},Yw=function(e,n,s){let a=Promise.resolve();if(n&&n.length>0){let p=function(g){return Promise.all(g.map(b=>Promise.resolve(b).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(g=>{if(g=Kw(g,s),g in Eu)return;Eu[g]=!0;const b=g.endsWith(".css"),k=b?'[rel="stylesheet"]':"";if(s)for(let S=o.length-1;S>=0;S--){const A=o[S];if(A.href===g&&(!b||A.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${g}"]${k}`))return;const y=document.createElement("link");if(y.rel=b?"stylesheet":Ww,b||(y.as="script"),y.crossOrigin="",y.href=g,f&&y.setAttribute("nonce",f),document.head.appendChild(y),b)return new Promise((S,A)=>{y.addEventListener("load",S),y.addEventListener("error",()=>A(new Error(`Unable to preload CSS for ${g}`)))})}))}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 qw=_('<video class="hmm-qr svelte-1e4doc5" autoplay="" playsinline=""></video>',2);function $w(r,e){ht(e,!0);let n=B(e,"active",3,!1),s=B(e,"onerror",3,void 0),a=B(e,"createReader",3,void 0),i=B(e,"insecureContextMessage",3,"The camera needs https or localhost."),o=B(e,"testId",3,void 0),l=N(void 0),f;lt(()=>{if(!n()){b();return}const A=t(l);if(!A)return;if(!p()){s()?.(i());return}const x={cancelled:!1};return(async()=>{try{const C=await(a()?await a()():await g()).decodeFromVideoDevice(void 0,A,R=>{R&&e.onscan(R.getText())});x.cancelled?C.stop():f=C}catch(D){s()?.(D instanceof Error?D.message:String(D))}})(),()=>{x.cancelled=!0,b()}});function p(){return globalThis.navigator?.mediaDevices!==void 0&&globalThis.isSecureContext}async function g(){const{BrowserQRCodeReader:A}=await Yw(async()=>{const{BrowserQRCodeReader:x}=await import("./index-BN6QZh6-.js");return{BrowserQRCodeReader:x}},[],import.meta.url);return new A}function b(){f?.stop(),f=void 0}gp(b);var k=wt(),y=Ie(k);{var S=A=>{var x=qw();x.muted=!0,_n(x,D=>u(l,D),()=>t(l)),E(()=>I(x,"data-testid",o())),v(A,x)};$(y,A=>{n()&&A(S)})}v(r,k),mt()}var Xw=_('<button type="button" class="hmm-button"> </button>'),Qw=_('<p> </p> <button type="button" class="hmm-button" data-testid="add-device-search">searchDevices</button>',1),Zw=_("<option> </option>"),Jw=_('<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),eA=_('<span class="hmm-add-error svelte-rkdrrf" data-testid="add-device-scan-error"> </span>'),tA=_('<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),nA=_('<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),rA=_('<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>'),sA=_('<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),aA=_('<span data-testid="add-device-countdown"> </span> <button type="button" class="hmm-button" data-testid="add-device-stop"> </button>',1),iA=_('<p class="hmm-add-notice svelte-rkdrrf" role="status" data-testid="add-device-nothing-joined"> </p>'),oA=_('<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),lA=_('<span data-testid="add-device-inbox-result"> </span>'),dA=_('<p class="hmm-add-notice svelte-rkdrrf" role="status" data-testid="add-device-names-waiting"> </p>'),cA=_('<div class="hmm-add-actions svelte-rkdrrf"><button type="button" class="hmm-button" data-testid="add-device-confirm-inbox"> </button> <!></div> <!>',1),uA=_('<label class="hmm-add-row svelte-rkdrrf"><span class="hmm-mono svelte-rkdrrf"> </span> <input class="hmm-input svelte-rkdrrf"/></label>'),fA=_('<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>'),hA=_("<!> <!> <!> <!>",1);function mA(r,e){ht(e,!0);let n=B(e,"open",15,!1),s=B(e,"createReader",3,void 0);const a=jt(),i=a.i18n.t,o=1e3,l=5;let f=N(60),p=N(1),g=N(""),b=N(""),k=N("KEY"),y=N(void 0),S=N(""),A=N(""),x=N(!1),D=N(""),C=N(0),R=N(!1),P=N(Be([])),K=N(Be({})),q=N(!0),re=N(""),ae=N(!1),de=N(""),G,ne=!1,ie=N(void 0),Z=0,te=0;const j=c(()=>a.app.selectedInterface),U=c(()=>a.interfaces.typeOf(t(j))),fe=c(()=>!t(U).startsWith("BidCos")&&t(U)!=="CUxD"),Te=c(()=>t(U)==="BidCos-Wired"),ce=c(()=>t(k)==="ANY"?!0:t(k)==="SGTIN"?Bi(t(S)):Bi(t(S))&&mc(t(A))),Re=c(()=>t(y)?.keyserver_mode==="LOCAL"),xe=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(Re)?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(y)?.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."));lt(()=>{if(!n()||!t(fe))return;let me=!0;return a.devices.hmipPairing().then(be=>{me&&u(y,be,!0)}),()=>{me=!1}}),lt(()=>{t(Re)&&t(k)==="SGTIN"&&u(k,"KEY")}),lt(()=>{n()||(u(x,!1),u(C,0),u(P,[],!0),u(K,{},!0),u(q,!0),u(re,""),u(ae,!1),u(de,""),u(b,""),Y())}),lt(()=>{t(k)==="ANY"&&u(x,!1)}),lt(()=>{if(n())return a.transport.on("devices.changed",me=>{if(me.interfaceName!==t(j)||me.kind!=="new")return;const be=me.addresses.filter(Ee=>!Ee.includes(":")&&!t(P).includes(Ee));be.length>0&&(u(P,[...t(P),...be],!0),u(de,""),Y())})}),lt(()=>{if(!n()||t(C)<=0)return;const me=te,be=setInterval(()=>{Z+=1,a.devices.installModeSeconds(t(j)).then(Ee=>{me===te&&(u(C,Ee,!0),Ee<=0&&(t(P).length===0&&u(ae,!0),Y()))}),!t(fe)&&Z%l===0&&a.devices.keyMismatchDevice(t(j)).then(Ee=>{me===te&&Ee!==""&&he(Ee)})},o);return()=>{clearInterval(be)}});async function ge(me){u(R,!0),u(ae,!1),u(de,""),te+=1,Z=0;const{tempKey:be,...Ee}=me;G=Ee,be!==void 0&&(ne=!0);const se=await a.devices.tryInstallMode(t(j),!0,{seconds:t(f),...me});if(u(R,!1),se!==null){if(!t(fe)&&me.address!==void 0&&await ue())return;a.notices.fromError(se,"setInstallMode");return}me.address===void 0&&u(C,t(f),!0)}async function M(){te+=1,await a.devices.setInstallMode(t(j),!1),u(C,0),await Y()}async function ue(){const me=await a.devices.keyMismatchDevice(t(j));return me===""?!1:(await ve(me),!0)}async function he(me){te+=1,u(C,0),await a.devices.setInstallMode(t(j),!1),await ve(me)}async function ve(me){u(de,me,!0),await ti(),t(ie)?.focus()}async function ye(){const me=t(b).trim();me===""||G===void 0||await ge({...G,tempKey:me})}async function Y(){ne&&(ne=!1,await a.devices.setTempKey(t(j),""))}async function X(){u(R,!0),await a.console.call(t(j),"searchDevices",[""]),u(R,!1),await a.devices.load(t(j),{refresh:!0})}function L(me){const be=Lb(me);if(!be){u(D,i("That is not a HomematicIP device code"),!0);return}u(D,""),u(S,be.sgtin,!0),be.key!==""&&u(A,be.key,!0),u(x,!1)}async function z(){u(R,!0);const me=await a.devices.confirmRegaInbox();u(R,!1),u(re,me.length===0?i("The ReGa inbox is empty"):`${i("Confirmed")}: ${me.join(", ")}`,!0)}async function le(){const me=t(P).flatMap(be=>Qf(be,t(K)[be]??"",a.devices.channels(t(j),be).map(Ee=>Ee.ADDRESS),{channels:t(q)}));me.length!==0&&await a.names.rename(me)&&u(P,t(P).filter(be=>(t(K)[be]??"").trim()===""),!0)}{const me=Ee=>{var se=Xw(),W=m(se,!0);E(V=>h(W,V),[()=>i("Close")]),ee("click",se,()=>n(!1)),v(Ee,se)};let be=c(()=>i("Add device"));yn(r,{get title(){return t(be)},width:"680px",testId:"add-device-dialog",get open(){return n()},set open(Ee){n(Ee)},buttons:me,children:(Ee,se)=>{var W=hA(),V=Ie(W);{var T=ke=>{var we=Qw(),H=Ie(we),F=m(H,!0),Ne=d(H,2);E(Me=>{h(F,Me),Ne.disabled=t(R)},[()=>i("BidCos-Wired has no install mode; the interface searches its bus for new devices.")]),ee("click",Ne,()=>{X()}),v(ke,we)},O=ke=>{var we=nA(),H=Ie(we),F=w(H),Ne=m(F,!0),Me=d(F,2),Ke=w(Me),pe=m(Ke,!0);Ke.value=Ke.__value="KEY";var De=d(Ke);{var Pe=Oe=>{var $e=Zw(),ft=m($e,!0);$e.value=$e.__value="SGTIN",E(Et=>h(ft,Et),[()=>i("With SGTIN only (key server)")]),v(Oe,$e)};$(De,Oe=>{t(Re)||Oe(Pe)})}var Ge=d(De),Le=m(Ge,!0);Ge.value=Ge.__value="ANY",Qt(Me);var Ye=d(H,2),Xe=d(w(Ye),2),ze=m(Xe,!0),Je=d(Ye,2),dt=d(w(Je),2),pt=m(dt,!0),gt=d(Je,2);{var Se=Oe=>{var $e=tA(),ft=Ie($e),Et=d(w(ft),2);let it;var Wt=d(ft,2);{var Mt=Xt=>{var xt=Jw(),fn=Ie(xt),Mn=d(w(fn),2);let On;var Mr=d(fn,2),Xr=d(w(Mr),2),Ln=m(Xr,!0);E((Wn,_r)=>{On=St(Mn,1,"hmm-input hmm-mono svelte-rkdrrf",null,On,{"hmm-add-invalid":Wn}),rn(Mn,t(A)),h(Ln,_r)},[()=>t(A)!==""&&!mc(t(A)),()=>i("The key from the sticker (26 characters, dashes optional), or scan the QR code.")]),ee("input",Mn,Wn=>u(A,ai(Wn.currentTarget.value),!0)),v(Xt,xt)};$(Wt,Xt=>{t(k)==="KEY"&&Xt(Mt)})}var Ot=d(Wt,2),Zt=w(Ot),bn=m(Zt,!0),on=d(Zt,2),un=w(on),vn=m(un,!0),Pn=d(un,2);{var Jn=Xt=>{var xt=eA(),fn=m(xt,!0);E(()=>h(fn,t(D))),v(Xt,xt)};$(Pn,Xt=>{t(D)!==""&&Xt(Jn)})}var jn=d(Ot,2);{let Xt=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."));$w(jn,{get active(){return t(x)},get createReader(){return s()},get insecureContextMessage(){return t(Xt)},onscan:L,onerror:xt=>{u(D,xt,!0),u(x,!1)},testId:"add-device-video"})}E((Xt,xt,fn)=>{it=St(Et,1,"hmm-input hmm-mono svelte-rkdrrf",null,it,{"hmm-add-invalid":Xt}),rn(Et,t(S)),h(bn,xt),h(vn,fn)},[()=>t(S)!==""&&!Bi(t(S)),()=>i("QR scanner"),()=>t(x)?i("Stop"):i("Scan")]),ee("input",Et,Xt=>u(S,ai(Xt.currentTarget.value),!0)),ee("click",un,()=>{u(D,""),u(x,!t(x))}),v(Oe,$e)};$(gt,Oe=>{t(k)!=="ANY"&&Oe(Se)})}E((Oe,$e,ft,Et)=>{h(Ne,Oe),h(pe,$e),h(Le,ft),h(ze,t(xe)),h(pt,Et)},[()=>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.")]),br(Me,()=>t(k),Oe=>u(k,Oe)),v(ke,we)},J=ke=>{var we=sA(),H=Ie(we),F=w(H),Ne=m(F,!0),Me=d(F,2),Ke=w(Me),pe=m(Ke,!0);Ke.value=Ke.__value=1;var De=d(Ke),Pe=m(De,!0);De.value=De.__value=2,Qt(Me);var Ge=d(H,2),Le=w(Ge),Ye=m(Le,!0),Xe=d(Le,2),ze=w(Xe),Je=d(ze,2),dt=m(Je,!0),pt=d(Ge,2),gt=w(pt),Se=m(gt,!0),Oe=d(gt,2);_n(Oe,Mt=>u(ie,Mt),()=>t(ie));var $e=d(pt,2),ft=d(w($e),2),Et=m(ft,!0),it=d($e,2);{var Wt=Mt=>{var Ot=rA(),Zt=w(Ot),bn=m(Zt,!0),on=d(Zt,2),un=m(on,!0),vn=d(on,2),Pn=m(vn,!0);E((Jn,jn,Xt,xt)=>{h(bn,Jn),h(un,jn),vn.disabled=Xt,h(Pn,xt)},[()=>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(b).trim()==="",()=>i("Set the key and try again")]),ee("click",vn,()=>{ye()}),v(Mt,Ot)};$(it,Mt=>{t(de)!==""&&Mt(Wt)})}E((Mt,Ot,Zt,bn,on,un,vn,Pn)=>{h(Ne,Mt),h(pe,Ot),h(Pe,Zt),h(Ye,bn),Je.disabled=on,h(dt,un),h(Se,vn),h(Et,Pn)},[()=>i("Mode"),()=>i("Normal install mode"),()=>i("Write the MASTER defaults and delete the existing links"),()=>i("Serial number"),()=>t(R)||t(g).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.")]),br(Me,()=>t(p),Mt=>u(p,Mt)),An(ze,()=>t(g),Mt=>u(g,Mt)),ee("click",Je,()=>{ge({mode:t(p),address:t(g).trim(),...t(b).trim()===""?{}:{tempKey:t(b).trim()}})}),An(Oe,()=>t(b),Mt=>u(b,Mt)),v(ke,we)};$(V,ke=>{t(Te)?ke(T):t(fe)?ke(O,1):ke(J,-1)})}var _e=d(V,2);{var Ce=ke=>{var we=oA(),H=Ie(we),F=w(H),Ne=m(F,!0),Me=d(F,2),Ke=w(Me),pe=d(H,2),De=w(pe),Pe=m(De,!0),Ge=d(De,2);{var Le=ze=>{var Je=aA(),dt=Ie(Je),pt=m(dt,!0),gt=d(dt,2),Se=m(gt,!0);E((Oe,$e)=>{h(pt,Oe),h(Se,$e)},[()=>i("{count} seconds left",{},t(C)),()=>i("Stop")]),ee("click",gt,()=>{M()}),v(ze,Je)};$(Ge,ze=>{t(C)>0&&ze(Le)})}var Ye=d(pe,2);{var Xe=ze=>{var Je=iA(),dt=m(Je,!0);E(pt=>h(dt,pt),[()=>t(fe)?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(ze,Je)};$(Ye,ze=>{t(ae)&&ze(Xe)})}E((ze,Je)=>{h(Ne,ze),De.disabled=t(R)||t(fe)&&!t(ce),h(Pe,Je)},[()=>i("Duration"),()=>i("Start install mode")]),An(Ke,()=>t(f),ze=>u(f,ze)),ee("click",De,()=>{ge(t(fe)?t(k)==="ANY"?{hmipKeyMode:"ANY"}:{hmipKeyMode:t(k),hmipKey:{sgtin:t(S),key:t(k)==="SGTIN"?"":t(A)}}:{mode:t(p),...t(b).trim()===""?{}:{tempKey:t(b).trim()}})}),v(ke,we)};$(_e,ke=>{t(Te)||ke(Ce)})}var Fe=d(_e,2);{var We=ke=>{var we=cA(),H=Ie(we),F=w(H),Ne=m(F,!0),Me=d(F,2);{var Ke=Pe=>{var Ge=lA(),Le=m(Ge,!0);E(()=>h(Le,t(re))),v(Pe,Ge)};$(Me,Pe=>{t(re)!==""&&Pe(Ke)})}var pe=d(H,2);{var De=Pe=>{var Ge=dA(),Le=m(Ge,!0);E(Ye=>h(Le,Ye),[()=>i("The names reach the CCU once the device is confirmed in the ReGa inbox.")]),v(Pe,Ge)};$(pe,Pe=>{(a.interfaces.rega.pendingNames?.length??0)>0&&Pe(De)})}E(Pe=>{F.disabled=t(R),h(Ne,Pe)},[()=>i("Confirm the ReGa inbox")]),ee("click",F,()=>{z()}),v(ke,we)};$(Fe,ke=>{a.interfaces.rega?.enabled===!0&&ke(We)})}var Ze=d(Fe,2);{var nt=ke=>{var we=fA(),H=w(we),F=m(H,!0),Ne=d(H,2);je(Ne,16,()=>t(P),Le=>Le,(Le,Ye)=>{var Xe=uA(),ze=w(Xe),Je=m(ze,!0),dt=d(ze,2);E((pt,gt)=>{h(Je,Ye),I(dt,"placeholder",pt),I(dt,"aria-label",gt),rn(dt,t(K)[Ye]??"")},[()=>i("Name"),()=>`${i("Name")} ${Ye}`]),ee("input",dt,pt=>u(K,{...t(K),[Ye]:pt.currentTarget.value},!0)),v(Le,Xe)});var Me=d(Ne,2),Ke=w(Me),pe=d(Ke,2),De=m(pe,!0),Pe=d(Me,2),Ge=m(Pe,!0);E((Le,Ye,Xe)=>{h(F,Le),h(De,Ye),h(Ge,Xe)},[()=>i("New"),()=>i("Overwrite channel names"),()=>i("Apply")]),mr(Ke,()=>t(q),Le=>u(q,Le)),ee("click",Pe,()=>{le()}),v(ke,we)};$(Ze,ke=>{t(P).length>0&&ke(nt)})}v(Ee,W)},$$slots:{buttons:!0,default:!0}})}mt()}kt(["click","input"]);const vA=10;function Xl(r,e,n){return r(e)?.enums.includes(n)===!0}function pA(r){return r.endsWith(":0")}function Yh(r,e,n){if(Xl(n,r.ref,e))return"on";const s=r.channels.filter(i=>!pA(i)),a=s.filter(i=>Xl(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=Yh(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 bA(r,e,n){return Object.fromEntries(e.map(s=>[s,gA(r,s,n)]))}function _A(r,e){return r==="mixed"?e==="mixed"?"on":e==="on"?"off":"mixed":e==="on"?"off":"on"}function EA(r,e,n){return r.filter(s=>{const a=n[s];return a!==void 0&&a!=="mixed"&&a!==(e[s]??"off")})}function yA(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){Yh(f,i,s)!=="on"&&l.add(f.ref);continue}for(const p of[f.ref,...f.channels])Xl(s,p,i)&&l.add(p)}l.size>0&&a.push({path:i,on:o,refs:[...l]})}return a}function yu(r){return r.normalize("NFD").replace(/\p{M}/gu,"").toLocaleLowerCase()}function SA(r,e){const n=yu(e.trim());if(n==="")return[...r];const s=r.filter(a=>yu(a.label).includes(n));return r.filter(a=>s.includes(a)||s.some(i=>i.path.startsWith(`${a.path}/`)))}var kA=_('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="assign-apply"> </button>',1),wA=_('<input type="text" class="hmm-input hmm-assign-filter svelte-17ogdox" data-testid="assign-filter"/>'),AA=_('<span class="hmm-assign-error svelte-17ogdox" data-testid="assign-error"> </span>'),TA=_('<label data-testid="assign-row"><input type="checkbox" data-testid="assign-check" class="svelte-17ogdox"/> <span class="hmm-assign-name svelte-17ogdox"> </span> <!></label>'),RA=_('<p class="hmm-assign-empty svelte-17ogdox"> </p>'),xA=_('<p class="hmm-assign-summary svelte-17ogdox" role="alert" data-testid="assign-summary"> </p>'),IA=_('<input type="text" class="hmm-input svelte-17ogdox" data-testid="assign-new-name"/> <button type="button" class="hmm-button" data-testid="assign-create"> </button>',1),DA=_('<button type="button" class="hmm-button" data-testid="assign-new"> </button>'),NA=_('<p class="hmm-assign-count svelte-17ogdox" data-testid="assign-count"> </p> <!> <div class="hmm-assign-list svelte-17ogdox" role="group" data-testid="assign-list"></div> <!> <div class="hmm-assign-new svelte-17ogdox"><!></div>',1);function CA(r,e){ht(e,!0);let n=B(e,"open",15,!1),s=B(e,"enumId",3,"room"),a=B(e,"targets",19,()=>[]);const i=jt(),o=i.i18n.t,l=i.taxonomy;let f=N(Be({})),p=N(Be({})),g=N(Be({})),b=N(""),k=N(!1),y=N(!1),S=N(""),A=N(!1),x=N(void 0),D=N(void 0),C=N(void 0),R=!1;const P=c(()=>l.options(s())),K=c(()=>SA(t(P),t(b))),q=c(()=>t(P).length>vA),re=c(()=>Object.keys(t(g)).length),ae=c(()=>s()==="room"),de=c(()=>t(ae)?o("Assign to room"):o("Assign to function")),G=M=>l.view(M);function ne(){const M=t(P).map(ue=>ue.path);return[...M,...Object.keys(t(p)).filter(ue=>!M.includes(ue))]}function ie(M){return t(p)[M]??t(f)[M]??"off"}lt(()=>{n()&&!R&&gr(()=>{u(f,bA(a(),t(P).map(M=>M.path),G),!0),u(p,{...t(f)},!0),u(g,{},!0),u(b,""),u(C,void 0),u(y,!1),u(S,"")}),R=n()});function Z(M,ue){const he=ve=>{M.checked=ve==="on",M.indeterminate=ve==="mixed"};return he(ue),{update:he}}function te(M,ue){const he=_A(t(f)[M]??"off",ie(M));u(p,{...t(p),[M]:he},!0),t(g)[M]!==void 0&&u(g,Object.fromEntries(Object.entries(t(g)).filter(([ve])=>ve!==M)),!0),ue.checked=he==="on",ue.indeterminate=he==="mixed"}async function j(){if(t(k))return;const M=EA(ne(),t(f),t(p)),ue=yA(a(),M,t(p),G),he=ue.length===0?[]:await U(ue),ve={...t(f)},ye={};for(const Y of M){const X=he.find(L=>L.path===Y);X!==void 0&&!X.ok?ye[Y]=X.message:ve[Y]=ie(Y)}u(f,ve,!0),u(g,ye,!0),Object.keys(ye).length===0&&n(!1)}async function U(M){u(k,!0);try{return await l.assignEach(M)}finally{u(k,!1)}}function fe(M){M.key==="Enter"&&(M.preventDefault(),j())}function Te(M){t(C)===void 0&&t(x)!==void 0&&t(x).offsetHeight>0&&u(C,t(x).offsetHeight,!0),u(b,M.currentTarget.value,!0)}function ce(M){M.key==="Enter"&&(M.preventDefault(),t(x)?.querySelector('input[type="checkbox"]')?.focus())}async function Re(){u(y,!0),await ti(),t(D)?.focus()}async function xe(){const M=t(S).trim();if(M===""||t(A))return;u(A,!0);const ue=await l.createNode(s(),void 0,M);u(A,!1),ue!==void 0&&(u(p,{...t(p),[ue]:"on"},!0),u(S,""),u(y,!1),await ti(),t(x)?.querySelector(`[data-path="${CSS.escape(ue)}"] input`)?.focus())}function ge(M){M.key==="Enter"&&(M.preventDefault(),xe())}{const M=ve=>{var ye=kA(),Y=Ie(ye),X=m(Y,!0),L=d(Y,2),z=m(L,!0);E((le,me)=>{Y.disabled=t(k),h(X,le),L.disabled=t(k)||a().length===0,h(z,me)},[()=>o("Cancel"),()=>o("Apply")]),ee("click",Y,()=>n(!1)),ee("click",L,()=>{j()}),v(ve,ye)};let ue=c(()=>!t(k)),he=c(()=>o("Close"));yn(r,{get title(){return t(de)},width:"560px",get closable(){return t(ue)},get closeLabel(){return t(he)},testId:"assign-dialog",get open(){return n()},set open(ve){n(ve)},buttons:M,children:(ve,ye)=>{var Y=NA(),X=Ie(Y),L=m(X,!0),z=d(X,2);{var le=J=>{var _e=wA();E((Ce,Fe)=>{rn(_e,t(b)),I(_e,"placeholder",Ce),I(_e,"aria-label",Fe)},[()=>t(ae)?o("Filter rooms"):o("Filter functions"),()=>t(ae)?o("Filter rooms"):o("Filter functions")]),ee("input",_e,Te),ee("keydown",_e,ce),v(J,_e)};$(z,J=>{t(q)&&J(le)})}var me=d(z,2);let be;je(me,21,()=>t(K),J=>J.path,(J,_e)=>{const Ce=c(()=>ie(t(_e).path)),Fe=c(()=>t(g)[t(_e).path]);var We=TA();let Ze,nt;var ke=w(We);Mf(ke,(Me,Ke)=>Z?.(Me,Ke),()=>t(Ce));var we=d(ke,2),H=m(we,!0),F=d(we,2);{var Ne=Me=>{var Ke=AA(),pe=m(Ke,!0);E(De=>h(pe,De),[()=>o("Not saved: {message}",{message:t(Fe)})]),v(Me,Ke)};$(F,Me=>{t(Fe)!==void 0&&Me(Ne)})}E(Me=>{Ze=St(We,1,"hmm-assign-row svelte-17ogdox",null,Ze,{"hmm-assign-row-failed":t(Fe)!==void 0}),I(We,"data-path",t(_e).path),I(We,"data-state",t(Ce)),nt=Fn(We,"",nt,{"padding-inline-start":Me}),ke.disabled=t(k),h(H,t(_e).label)},[()=>`${String(6+(t(_e).depth-1)*18)}px`]),ee("change",ke,Me=>te(t(_e).path,Me.currentTarget)),ee("keydown",ke,fe),v(J,We)},J=>{var _e=RA(),Ce=m(_e,!0);E(Fe=>h(Ce,Fe),[()=>t(P).length>0?o("No match"):t(ae)?o("No rooms yet"):o("No functions yet")]),v(J,_e)}),_n(me,J=>u(x,J),()=>t(x));var Ee=d(me,2);{var se=J=>{var _e=xA(),Ce=m(_e,!0);E(Fe=>h(Ce,Fe),[()=>o("{count} changes were not saved",{},t(re))]),v(J,_e)};$(Ee,J=>{t(re)>0&&J(se)})}var W=d(Ee,2),V=w(W);{var T=J=>{var _e=IA(),Ce=Ie(_e);_n(Ce,Ze=>u(D,Ze),()=>t(D));var Fe=d(Ce,2),We=m(Fe,!0);E((Ze,nt,ke,we)=>{I(Ce,"aria-label",Ze),I(Ce,"placeholder",nt),Ce.disabled=t(A),Fe.disabled=ke,h(We,we)},[()=>t(ae)?o("Name of the new room"):o("Name of the new function"),()=>t(ae)?o("Name of the new room"):o("Name of the new function"),()=>t(A)||t(S).trim()==="",()=>o("Create")]),ee("keydown",Ce,ge),An(Ce,()=>t(S),Ze=>u(S,Ze)),ee("click",Fe,()=>{xe()}),v(J,_e)},O=J=>{var _e=DA(),Ce=m(_e,!0);E(Fe=>h(Ce,Fe),[()=>t(ae)?o("New room…"):o("New function…")]),ee("click",_e,()=>{Re()}),v(J,_e)};$(V,J=>{t(y)?J(T):J(O,-1)})}E((J,_e,Ce)=>{h(L,J),I(me,"aria-label",_e),be=Fn(me,"",be,{"min-height":Ce})},[()=>o("{count} rows selected",{},a().length),()=>t(ae)?o("Rooms"):o("Functions"),()=>t(C)===void 0?void 0:`${String(t(C))}px`]),v(ve,Y)},$$slots:{buttons:!0,default:!0}})}mt()}kt(["click","input","keydown","change"]);var PA=_('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button hmm-danger svelte-y0v77l" data-testid="delete-device-confirm"> </button>',1),MA=_('<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 OA(r,e){ht(e,!0);let n=B(e,"open",15,!1),s=B(e,"address",3,"");const a=jt(),i=a.i18n.t;let o=N(1),l=N(4),f=N(!1);const p=c(()=>t(o)+t(l)),g=c(()=>a.names.nameOf(s()));lt(()=>{n()&&(u(o,1),u(l,4))});async function b(){u(f,!0);const k=await a.devices.remove(a.app.selectedInterface,s(),t(p));u(f,!1),k&&n(!1)}{const k=S=>{var A=PA(),x=Ie(A),D=m(x,!0),C=d(x,2),R=m(C,!0);E((P,K)=>{h(D,P),C.disabled=t(f),h(R,K)},[()=>i("Cancel"),()=>i("Delete")]),ee("click",x,()=>n(!1)),ee("click",C,()=>{b()}),v(S,A)};let y=c(()=>i("Delete device"));yn(r,{get title(){return t(y)},width:"560px",testId:"delete-device-dialog",get open(){return n()},set open(S){n(S)},buttons:k,children:(S,A)=>{var x=MA(),D=Ie(x),C=m(D,!0),R=d(D,2),P=m(R,!0),K=d(R,2),q=w(K),re=m(q,!0);q.value=q.__value=1;var ae=d(q),de=m(ae,!0);ae.value=ae.__value=0,Qt(K);var G=d(K,2),ne=m(G,!0),ie=d(G,2),Z=w(ie),te=m(Z,!0);Z.value=Z.__value=4;var j=d(Z),U=m(j,!0);j.value=j.__value=2,Qt(ie);var fe=d(ie,2),Te=m(fe);E((ce,Re,xe,ge,M,ue,he,ve)=>{h(C,ce),h(P,s()),I(K,"aria-label",Re),h(re,xe),h(de,ge),h(ne,M),I(ie,"aria-label",ue),h(te,he),h(U,ve),h(Te,`FLAGS = ${t(p)??""}`)},[()=>i("Do you really want to delete the device {name}?",{name:t(g)}),()=>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")]),br(K,()=>t(o),ce=>u(o,ce)),br(ie,()=>t(l),ce=>u(l,ce)),v(S,x)},$$slots:{buttons:!0,default:!0}})}mt()}kt(["click"]);var LA=_('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="rename-save"> </button>',1),FA=_('<label class="hmm-rename-children svelte-111tkcw"><input type="checkbox" data-testid="rename-children"/> <span> </span></label>'),GA=_('<p class="hmm-rename-address svelte-111tkcw"> </p> <input class="hmm-input hmm-rename-input svelte-111tkcw" data-testid="rename-input"/> <!>',1);function UA(r,e){ht(e,!0);let n=B(e,"open",15,!1),s=B(e,"address",3,"");const a=jt(),i=a.i18n.t;let o=N(""),l=N(!0),f=N(!1);const p=c(()=>s()!==""&&Ls(s())),g=c(()=>t(p)?a.devices.channels(a.app.selectedInterface,s()).map(y=>y.ADDRESS):[]);lt(()=>{n()&&(u(o,a.names.name(s())??"",!0),u(l,!0))});const b=c(()=>Qf(s(),t(o),t(g),{channels:t(l)}));async function k(){const y=t(b);if(y.length===0)return;u(f,!0);const S=await a.names.rename(y);u(f,!1),S&&n(!1)}{const y=A=>{var x=LA(),D=Ie(x),C=m(D,!0),R=d(D,2),P=m(R,!0);E((K,q)=>{h(C,K),R.disabled=t(f)||t(b).length===0,h(P,q)},[()=>i("Cancel"),()=>i("Apply")]),ee("click",D,()=>n(!1)),ee("click",R,()=>{k()}),v(A,x)};let S=c(()=>i("Rename"));yn(r,{get title(){return t(S)},width:"520px",testId:"rename-dialog",get open(){return n()},set open(A){n(A)},buttons:y,children:(A,x)=>{var D=GA(),C=Ie(D),R=m(C,!0),P=d(C,2),K=d(P,2);{var q=re=>{var ae=FA(),de=w(ae),G=d(de,2),ne=m(G,!0);E(ie=>h(ne,ie),[()=>i("Overwrite channel names")]),mr(de,()=>t(l),ie=>u(l,ie)),v(re,ae)};$(K,re=>{t(p)&&re(q)})}E(re=>{h(R,s()),I(P,"aria-label",re)},[()=>i("Name")]),ee("keydown",P,re=>{re.key==="Enter"&&k()}),An(P,()=>t(o),re=>u(o,re)),v(A,D)},$$slots:{buttons:!0,default:!0}})}mt()}kt(["click","keydown"]);var BA=_('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="repair-confirm"> </button>',1),VA=_('<p class="hmm-repair-note svelte-g84sn7" data-testid="repair-bidcos-note"> </p>'),HA=_("<p> </p>"),zA=_('<p data-testid="repair-failed"> </p>'),jA=_('→ <span class="hmm-mono" data-testid="repair-pending-after"> </span>',1),WA=_('<li class="hmm-mono"> </li>'),KA=_('<div class="hmm-repair-unrepairable svelte-g84sn7" data-testid="repair-unrepairable"><p> </p> <ul class="svelte-g84sn7"></ul></div>'),YA=_('<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>'),qA=_('<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>'),$A=_('<p data-testid="repair-nothing"> </p>'),XA=_('<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>'),QA=_('<li><span class="hmm-mono"> </span> </li>'),ZA=_('<ul class="hmm-repair-results svelte-g84sn7" data-testid="repair-results"></ul>'),JA=_('<p>CONFIG_PENDING: <span class="hmm-mono"> </span> <!></p> <!> <!> <!> <!>',1),eT=_('<p class="hmm-repair-address svelte-g84sn7"> <span class="hmm-mono"> </span></p> <!> <!>',1);function tT(r,e){ht(e,!0);let n=B(e,"open",15,!1),s=B(e,"address",3,"");const a=jt(),i=a.i18n.t;let o=N(void 0),l=N(void 0),f=N(!1),p=N(!1),g=N("none"),b=0;const k=c(()=>a.app.selectedInterface),y=c(()=>!a.interfaces.typeOf(t(k)).startsWith("BidCos")),S=c(()=>t(l)??t(o)),A=c(()=>t(S)?.channels.flatMap(D=>D.corrected.map(C=>({channel:D,c:C})))??[]);lt(()=>{if(!n()||s()===""||t(k)==="")return;const D=b+=1;u(f,!0),u(l,void 0),u(g,"none"),a.devices.repairConfig(t(k),s(),{dryRun:!0}).then(C=>{D===b&&(u(o,C,!0),u(f,!1))})});async function x(){u(p,!0),u(l,await a.devices.repairConfig(t(k),s(),{...t(y)||t(g)==="none"?{}:{bidcosRecovery:t(g)}}),!0),u(p,!1),t(l)&&(await a.devices.load(t(k),{refresh:!0}),await a.serviceMessages.load())}{const D=R=>{var P=BA(),K=Ie(P),q=m(K,!0),re=d(K,2),ae=m(re,!0);E((de,G)=>{h(q,de),re.disabled=t(p)||t(S)===void 0||t(l)!==void 0,h(ae,G)},[()=>i("Close"),()=>i("Repair configuration")]),ee("click",K,()=>n(!1)),ee("click",re,()=>{x()}),v(R,P)};let C=c(()=>i("Repair configuration"));yn(r,{get title(){return t(C)},width:"720px",testId:"repair-dialog",get open(){return n()},set open(R){n(R)},buttons:D,children:(R,P)=>{var K=eT(),q=Ie(K),re=w(q),ae=d(re),de=m(ae,!0),G=d(q,2);{var ne=U=>{var fe=VA(),Te=m(fe,!0);E(ce=>h(Te,ce),[()=>i("On BidCos a pending configuration is normal: it is queued and the device takes it when it next wakes up.")]),v(U,fe)};$(G,U=>{t(y)||U(ne)})}var ie=d(G,2);{var Z=U=>{var fe=HA(),Te=m(fe,!0);E(ce=>h(Te,ce),[()=>i("Loading Homematic Manager...")]),v(U,fe)},te=U=>{var fe=zA(),Te=m(fe,!0);E(ce=>h(Te,ce),[()=>i("No data")]),v(U,fe)},j=U=>{var fe=JA(),Te=Ie(fe),ce=d(w(Te)),Re=m(ce,!0),xe=d(ce,2);{var ge=le=>{var me=jA(),be=d(Ie(me)),Ee=m(be,!0);E(se=>h(Ee,se),[()=>String(t(l).configPendingAfter??"—")]),v(le,me)};$(xe,le=>{t(l)&&le(ge)})}var M=d(Te,2);{var ue=le=>{var me=KA(),be=w(me),Ee=m(be,!0),se=d(be,2);je(se,20,()=>t(S).unrepairable,W=>W,(W,V)=>{var T=WA(),O=m(T,!0);E(()=>h(O,V)),v(W,T)}),E(W=>h(Ee,W),[()=>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(le,me)};$(M,le=>{t(S).unrepairable.length>0&&le(ue)})}var he=d(M,2);{var ve=le=>{var me=qA(),be=w(me),Ee=w(be),se=w(Ee),W=m(se,!0),V=d(se),T=m(V,!0),O=d(V),J=m(O,!0),_e=d(O),Ce=m(_e,!0),Fe=d(_e),We=m(Fe,!0),Ze=d(be);je(Ze,21,()=>t(A),nt=>`${nt.channel.address}-${nt.c.parameter}`,(nt,ke)=>{var we=YA(),H=w(we),F=m(H,!0),Ne=d(H),Me=m(Ne,!0),Ke=d(Ne),pe=m(Ke,!0),De=d(Ke),Pe=m(De,!0),Ge=d(De),Le=m(Ge,!0);E((Ye,Xe)=>{h(F,t(ke).channel.address),h(Me,t(ke).c.parameter),h(pe,Ye),h(Pe,Xe),h(Le,t(ke).c.reason)},[()=>Da(t(ke).c.stored,void 0),()=>Da(t(ke).c.replacement,void 0)]),v(nt,we)}),E((nt,ke,we,H,F)=>{h(W,nt),h(T,ke),h(J,we),h(Ce,H),h(We,F)},[()=>i("Channel"),()=>i("Parameter"),()=>i("Current value"),()=>i("New value"),()=>i("Message")]),v(le,me)},ye=le=>{var me=$A(),be=m(me,!0);E(Ee=>h(be,Ee),[()=>i("Nothing has to be corrected")]),v(le,me)};$(he,le=>{t(A).length>0?le(ve):le(ye,-1)})}var Y=d(he,2);{var X=le=>{var me=XA(),be=w(me),Ee=m(be,!0),se=d(be,2),W=w(se);W.value=W.__value="none";var V=d(W);V.value=V.__value="clearConfigCache";var T=d(V);T.value=T.__value="restoreConfigToDevice",Qt(se),E(O=>h(Ee,O),[()=>i("Additional BidCos recovery")]),br(se,()=>t(g),O=>u(g,O)),v(le,me)};$(Y,le=>{t(y)||le(X)})}var L=d(Y,2);{var z=le=>{var me=ZA();je(me,21,()=>t(l).channels,be=>be.address,(be,Ee)=>{var se=QA();let W;var V=w(se),T=m(V,!0),O=d(V);E(()=>{W=St(se,1,"svelte-g84sn7",null,W,{"hmm-repair-failed":!t(Ee).write.ok}),h(T,t(Ee).address),h(O,` ${t(Ee).write.ok?"✔":`✕ ${t(Ee).write.faultString??""}`}`)}),v(be,se)}),v(le,me)};$(L,le=>{t(l)&&le(z)})}E(le=>h(Re,le),[()=>String(t(S).configPendingBefore??"—")]),v(U,fe)};$(ie,U=>{t(f)?U(Z):t(S)?U(j,-1):U(te,1)})}E(U=>{h(re,`${U??""} `),h(de,s())},[()=>a.nameOf(s())]),v(R,K)},$$slots:{buttons:!0,default:!0}})}mt()}kt(["click"]);var nT=_('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="replace-device-confirm"> </button>',1),rT=_("<p> </p>"),sT=_('<p data-testid="replace-none"> </p>'),aT=_("<option> </option>"),iT=_('<select class="hmm-select hmm-replace-select svelte-novg4s"></select>'),oT=_('<h4 class="svelte-novg4s"> </h4> <p class="hmm-replace-new svelte-novg4s"> <span class="hmm-mono"> </span></p> <!>',1);function lT(r,e){ht(e,!0);let n=B(e,"open",15,!1),s=B(e,"address",3,"");const a=jt(),i=a.i18n.t;let o=N(Be([])),l=N(""),f=N(!1),p=N(!1);const g=c(()=>t(o).filter(k=>!k.ADDRESS.includes(":")));lt(()=>{if(!n()||s()==="")return;const k=s();u(f,!0),u(l,""),a.devices.replaceable(a.app.selectedInterface,k).then(y=>{u(o,y,!0),u(l,y.find(S=>!S.ADDRESS.includes(":"))?.ADDRESS??"",!0),u(f,!1)})});async function b(){u(p,!0);const k=await a.devices.replace(a.app.selectedInterface,t(l),s());u(p,!1),k&&n(!1)}{const k=S=>{var A=nT(),x=Ie(A),D=m(x,!0),C=d(x,2),R=m(C,!0);E((P,K)=>{h(D,P),C.disabled=t(p)||t(l)==="",h(R,K)},[()=>i("Cancel"),()=>i("Replace")]),ee("click",x,()=>n(!1)),ee("click",C,()=>{b()}),v(S,A)};let y=c(()=>i("Replace device"));yn(r,{get title(){return t(y)},width:"560px",testId:"replace-device-dialog",get open(){return n()},set open(S){n(S)},buttons:k,children:(S,A)=>{var x=oT(),D=Ie(x),C=m(D,!0),R=d(D,2),P=w(R),K=d(P),q=m(K,!0),re=d(R,2);{var ae=ne=>{var ie=rT(),Z=m(ie,!0);E(te=>h(Z,te),[()=>i("Loading Homematic Manager...")]),v(ne,ie)},de=ne=>{var ie=sT(),Z=m(ie,!0);E(te=>h(Z,te),[()=>i("No suitable device available")]),v(ne,ie)},G=ne=>{var ie=iT();je(ie,21,()=>t(g),Z=>Z.ADDRESS,(Z,te)=>{var j=aT(),U=m(j),fe={};E(Te=>{h(U,`${Te??""} (${t(te).ADDRESS??""})`),fe!==(fe=t(te).ADDRESS)&&(j.value=(j.__value=fe)??"")},[()=>a.nameOf(t(te).ADDRESS)]),v(Z,j)}),Qt(ie),E(Z=>I(ie,"aria-label",Z),[()=>i("Replace device")]),br(ie,()=>t(l),Z=>u(l,Z)),v(ne,ie)};$(re,ne=>{t(f)?ne(ae):t(g).length===0?ne(de,1):ne(G,-1)})}E((ne,ie)=>{h(C,ne),h(P,`${ie??""}: `),h(q,s())},[()=>i("Which device do you want to replace?"),()=>i("New device")]),v(S,x)},$$slots:{buttons:!0,default:!0}})}mt()}kt(["click"]);var dT=_("<!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!>",1),Su=_("<option> </option>"),cT=_('<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),uT=_('<button type="button" class="hmm-inline-button hmm-inline-button-first svelte-1fmr35a">✎</button> <span> </span>',1),fT=_('<button type="button" class="hmm-inline-button svelte-1fmr35a">⚒</button>'),hT=_('<span role="img"> </span> <!>',1),ku=_('<span class="hmm-firmware-status svelte-1fmr35a"> </span>'),wu=_('<button type="button" class="hmm-inline-button svelte-1fmr35a"> </button>'),Au=_("<span> </span> <!>",1),mT=_("<span></span>"),vT=_('<span title="AES_ACTIVE" aria-label="AES_ACTIVE" role="img">🔑</span>'),pT=_('<span class="hmm-roaming svelte-1fmr35a" title="ROAMING" aria-label="ROAMING" role="img">⇄</span>'),gT=_('<div class="hmm-page svelte-1fmr35a"><div class="hmm-page-grid svelte-1fmr35a"><!></div></div> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!>',1);function bT(r,e){ht(e,!0);const n=jt(),s=n.i18n.t,a=1e4;let i=N(Be([])),o=N(Be([])),l=N(!1),f=N(0),p=N(0),g=N(""),b=N(!1),k=N(!1),y=N(!1),S=N(!1),A=N(!1),x=N(""),D=N(!1),C=N(Be([])),R=N(Be([])),P=N(!1),K=N(!1),q=N(""),re=N(void 0),ae=N(!1),de=N(""),G=N("MASTER"),ne=N(!1),ie=N("room"),Z=N(Be([])),te=N(""),j=N("");const U=c(()=>n.app.selectedInterface),fe=c(()=>n.interfaces.typeOf(t(U))),Te=c(()=>n.devices.index(t(U))),ce=c(()=>li(t(U),t(fe))),Re=c(()=>t(ce)&&t(Te)!==void 0?t(Te).channels().filter(oe=>Jf(oe)).map(oe=>oe.ADDRESS):[]);lt(()=>{if(t(U)===""||t(Te)===void 0||!t(ce))return;const oe=t(U),He=t(Re);gr(()=>{n.smokeGroups.sync(oe,He)})});const xe=c(()=>n.smokeGroups.of(t(U))),ge=c(()=>t(Te)===void 0?[]:[...xb(t(Te)),...t(ce)?Ib(t(xe)):[]]),M=c(()=>Object.fromEntries(t(ge).map(oe=>[oe.address,oe]))),ue=c(()=>t(ge).filter(oe=>oe.kind==="hmip").map(oe=>Nb(oe.number??0))),he=c(()=>Db(t(xe)));function ve(oe){return oe in t(M)}function ye(oe){return(t(M)[oe]?.members??[]).map(He=>t(Te)?.get(He)).filter(He=>He!==void 0)}function Y(oe){const He=[],Gt=t(Te)===void 0?void 0:eh(t(Te),oe);Gt!==void 0&&He.push(n.nameOf(Gt));for(const pn of t(xe)[oe]??[])He.push(s("Smoke group {n}",{n:pn}));return He}function X(oe){const He=t(M)[oe.ADDRESS];if(He!==void 0)return s("{count} detectors",{},He.members.length);const Gt=Ls(oe.ADDRESS)?n.devices.channels(t(U),oe.ADDRESS).map(pn=>pn.ADDRESS):[oe.ADDRESS];return[...new Set(Gt.flatMap(pn=>Y(pn)))].join(", ")}function L(oe){const He=t(M)[oe]?.number;return Xs(oe)&&He!==void 0?s("Smoke group {n}",{n:He}):n.nameOf(oe)}function z(oe){if(!Xs(oe.ADDRESS))return Xo(oe.ADDRESS,t(T));const He={};for(const Gt of ye(oe.ADDRESS))for(const pn of Xo(Ra(Gt.ADDRESS),t(T),99))He[pn.datapoint]=pn;return Object.values(He)}function le(oe){return ye(oe)[0]?.PARENT_TYPE??"HmIP-SWSD"}function me(oe){u(re,void 0),u(q,oe,!0),u(K,!0)}function be(){t(he)!==void 0&&(u(re,{address:yd(t(he)),kind:"hmip",number:t(he),members:[]},!0),u(q,""),u(K,!0))}const Ee=c(()=>t(re)??(t(q)===""?void 0:t(M)[t(q)])),se=c(()=>t(ce)&&t(Re).length>0&&t(he)!==void 0),W=c(()=>t(ce)?t(Re).length===0?s("This interface has no smoke detector"):s("All eight smoke groups are in use"):s("Only available on HmIP interfaces")),V=c(()=>[...t(ue),...n.devices.devices(t(U))]),T=c(()=>n.serviceMessages.of(t(U))),O=c(()=>n.radio.gateways(t(U)));lt(()=>{t(fe)==="BidCos-RF"&&n.radio.ensureGateways(t(U))}),lt(()=>{t(U),u(i,[],!0),u(o,[],!0),u(te,""),u(j,"")});const J=c(()=>n.taxonomy),_e=c(()=>t(J).options("room")),Ce=c(()=>t(J).options("function")),Fe=c(()=>[t(te),t(j)].filter(oe=>oe!==""));lt(()=>{t(te)!==""&&!t(_e).some(oe=>oe.path===t(te))&&u(te,""),t(j)!==""&&!t(Ce).some(oe=>oe.path===t(j))&&u(j,"")});function We(oe){return t(J).refOf(t(U),oe)}function Ze(oe){return t(J).view(We(oe))}function nt(oe){return n.devices.channels(t(U),oe.ADDRESS).map(He=>Ze(He.ADDRESS))}function ke(oe,He){return(Ls(oe.ADDRESS)?vS(Ze(oe.ADDRESS),nt(oe),He):Wl(Ze(oe.ADDRESS),He)).join(", ")}const we=c(()=>t(Fe).length===0?t(V):t(V).filter(oe=>t(Fe).every(He=>Xs(oe.ADDRESS)?ye(oe.ADDRESS).some(Gt=>H(Gt,He)):Lh(Ze(oe.ADDRESS),nt(oe),He))));function H(oe,He){return tu(Ze(oe.ADDRESS),Ze(Ra(oe.ADDRESS)),He)}lt(()=>{t(U)!==""&&n.links.ensure(t(U))});const F=c(()=>n.devices.isLoading(t(U))?s("Loading Homematic Manager..."):n.devices.hasFailed(t(U))?s("The device list could not be read - press Refresh to try again"):t(Te)===void 0?s("Loading Homematic Manager..."):t(V).length>0?s("No device matches the room or function filter"):s("No devices - the interface has not reported any yet")),Ne=c(()=>t(i).length===1?t(i)[0]??"":""),Me=c(()=>t(Ne)!==""&&Ls(t(Ne))?t(Ne):""),Ke=c(()=>t(i).filter(oe=>!Ls(oe)&&!Js(oe)));function pe(oe){return oe!==""&&!Js(oe)&&!Xs(oe)}const De=c(()=>pe(t(Ne))),Pe=c(()=>t(Me)!==""&&Ii(t(Te)?.get(t(Me))?.FLAGS).dontDelete),Ge=c(()=>t(Me)!==""&&!Xs(t(Me))?t(Me):""),Le=c(()=>t(Ge)!==""&&!t(Pe)),Ye=c(()=>t(fe).startsWith("BidCos")),Xe=c(()=>fb(t(fe)));function ze(oe){switch(oe){case"device":return s("Select a device");case"channel":return s("Select one or more channels");case"delete":return t(Pe)?s("This device carries the DontDelete flag"):s("Select a device");case"bidcos":return s("Only available on BidCos interfaces")}}const Je=c(()=>[{key:"icon",label:"",width:ui,fixed:!0,sortable:!1,filterable:!1,align:"center",value:()=>""},{key:"name",label:s("Name"),width:170,copy:"name",value:oe=>L(oe.ADDRESS)},{key:"ADDRESS",label:"ADDRESS",width:150,mono:!0,copy:"address"},{key:"rooms",label:s("Rooms"),width:120,value:oe=>ke(oe,"room")},{key:"functions",label:s("Functions"),width:110,value:oe=>ke(oe,"function")},{key:"smokeGroup",label:s("Smoke group"),width:150,minWidth:70,keepMinWidth:!0,hidden:t(ge).length===0,value:oe=>X(oe)},{key:"msgs",label:"Msgs",width:Zc,minWidth:Zc,keepMinWidth:!0,align:"center",filterable:!1,sortable:!1,value:oe=>z(oe).map(He=>He.datapoint).join(" ")},{key:"TYPE",label:"TYPE",width:150},{key:"SUBTYPE",label:"SUBTYPE",width:90,hidden:t(fe)!=="HmIP-RF"},{key:"FIRMWARE",label:"FIRMWARE",width:170,value:oe=>`${oe.FIRMWARE??""} ${oe.AVAILABLE_FIRMWARE??""}`.trim()},{key:"PARAMSETS",label:"PARAMSETS",width:Ni,minWidth:Ni,keepMinWidth:!0,sortable:!1,value:oe=>pt(oe).names.join(" ")},{key:"FLAGS",label:"FLAGS",width:130,value:oe=>Ii(oe.FLAGS).labels.join(" ")},{key:"INTERFACE",label:"INTERFACE",width:130,hidden:t(fe)!=="BidCos-RF",value:oe=>Rc(oe,t(O))},{key:"RX_MODE",label:"RX_MODE",width:130,hidden:t(fe)==="BidCos-Wired",value:oe=>_b(oe.RX_MODE).join(" ")}]),dt=c(()=>[{key:"name",label:s("Name"),width:170,copy:"name",value:oe=>n.nameOf(oe.ADDRESS)},{key:"ADDRESS",label:"ADDRESS",width:150,mono:!0,copy:"address"},{key:"rooms",label:s("Rooms"),width:120,value:oe=>ke(oe,"room")},{key:"functions",label:s("Functions"),width:110,value:oe=>ke(oe,"function")},{key:"smokeGroup",label:s("Smoke group"),width:150,hidden:t(ge).length===0,value:oe=>X(oe)},{key:"TYPE",label:"TYPE",width:150},{key:"DIRECTION",label:"DIRECTION",width:100,value:oe=>yb(oe.DIRECTION)},{key:"PARAMSETS",label:"PARAMSETS",width:Ni,minWidth:Ni,keepMinWidth:!0,sortable:!1,value:oe=>pt(oe).names.join(" ")},{key:"FLAGS",label:"FLAGS",width:130,value:oe=>Ii(oe.FLAGS).labels.join(" ")},{key:"links",label:s("Links"),width:60,align:"right",filterable:!1,value:oe=>{const He=n.links.forAddress(t(U),oe.ADDRESS).length;return He===0?"":He}},{key:"AES_ACTIVE",label:"AES_ACTIVE",width:90,hidden:t(fe)!=="BidCos-RF",value:oe=>oe.AES_ACTIVE?"🔑":""}]);function pt(oe){const He=Ls(oe.ADDRESS)?void 0:t(Te)?.parentOf(oe.ADDRESS),Gt=li(t(U),t(fe))&&Js(oe.ADDRESS),pn=pb(oe.ADDRESS)||sa(oe);return uS(oe.PARAMSETS,Sn=>{const er=n.paramsets.contentOf(t(U),oe,Sn,He);return Sn!=="MASTER"||er!=="empty"||!Gt?er:n.paramsets.contentOf(t(U),oe,"VALUES",He,"service-messages")},{channel:pn})}function gt(oe){const He=t(Te)?.get(oe);return{canSend:Es(He?.LINK_SOURCE_ROLES).length>0,canReceive:Es(He?.LINK_TARGET_ROLES).length>0,links:n.links.forAddress(t(U),oe).length}}function Se(oe){const He=n.devices.channels(t(U),oe.ADDRESS),Gt=ve(oe.ADDRESS)?ye(oe.ADDRESS):[];if(t(Fe).length===0)return[...He,...Gt];const pn=Ze(oe.ADDRESS);return[...He.filter(Sn=>t(Fe).every(er=>tu(Ze(Sn.ADDRESS),pn,er))),...Gt.filter(Sn=>t(Fe).every(er=>H(Sn,er)))]}function Oe(oe){return{ref:We(oe),channels:Ls(oe)?n.devices.channels(t(U),oe).map(He=>We(He.ADDRESS)):[]}}function $e(oe){return(t(i).includes(oe)?t(i):[oe]).map(Gt=>Oe(Gt))}function ft(oe,He){u(ie,oe,!0),u(Z,He===void 0?t(i).map(Gt=>Oe(Gt)):$e(He),!0),t(Z).length!==0&&u(ne,!0)}const Et=c(()=>t(i).length>0&&t(J).writable),it=c(()=>t(J).available?t(J).writable?s("Select one or more rows"):s("The store does not take writes"):s("No store connected"));function Wt(oe){return Xo(oe,t(T),99).some(He=>He.datapoint==="UPDATE_PENDING")}function Mt(oe){return mS(oe,{busy:n.devices.firmwareBusy.includes(oe.ADDRESS),updatePending:Wt(oe.ADDRESS)})}async function Ot(oe){const He=Mt(oe);He.action==="install"?await n.devices.installFirmware(t(U),oe.ADDRESS):He.action==="update"&&await n.devices.updateFirmware(t(U),[oe.ADDRESS])}lt(()=>{const oe=t(U);if(oe===""||!n.devices.firmwarePending(oe))return;const He=setInterval(()=>{n.devices.load(oe,{refresh:!0})},a);return()=>{clearInterval(He)}});function Zt(oe){u(x,oe,!0),u(b,!0)}function bn(oe){u(x,oe,!0),u(k,!0)}function on(oe){u(x,oe,!0),u(y,!0)}function un(oe){u(x,oe,!0),u(S,!0)}async function vn(oe){const He=[...t(Ke)];if(He.length===0)return;const Gt=await n.devices.reportValueUsage(t(U),He,oe);n.notices.push("info",s("reportValueUsage {value}: {count} datapoints on {channels} channels",{value:oe,count:Gt,channels:He.length}))}function Pn(oe,He){u(de,oe,!0),u(G,He,!0),u(ae,!0)}function Jn(oe,He){u(g,oe.ADDRESS,!0),u(f,He.clientX,!0),u(p,He.clientY,!0),u(l,!0)}const jn=c(()=>{const oe=t(Te)?.get(t(g));return oe===void 0?[]:pt(oe).names.map(He=>({id:`paramset:${He}`,label:s(`${He} Paramset`)}))}),Xt=c(()=>Xs(t(g))?[{id:"smokeGroup",label:`${s("Members")}…`}]:Ls(t(g))?[...ve(t(g))?[{id:"smokeGroup",label:`${s("Members")}…`},{id:"sep0",separator:!0}]:[],{id:"rename",label:s("Rename")},...t(jn),{id:"sep1",separator:!0},{id:"restore",label:s("restoreConfigToDevice"),disabled:!t(Ye)},{id:"clear",label:s("clearConfigCache"),disabled:!t(Ye)},{id:"repair",label:s("Repair configuration")},{id:"sep2",separator:!0},{id:"assign:room",label:`${s("Assign to room")}…`,disabled:!t(J).writable},{id:"assign:function",label:`${s("Assign to function")}…`,disabled:!t(J).writable},{id:"sep3",separator:!0},{id:"replace",label:s("Replace"),disabled:xt(t(g))},{id:"delete",label:s("Delete"),danger:!0,disabled:xt(t(g))}]:[{id:"rename",label:s("Rename"),disabled:!pe(t(g))},{id:"usage1",label:"reportValueUsage 1",disabled:Js(t(g))},{id:"usage0",label:"reportValueUsage 0",disabled:Js(t(g))},{id:"sep1",separator:!0},...t(jn).length===0?[]:[...t(jn),{id:"sep2",separator:!0}],{id:"assign:room",label:`${s("Assign to room")}…`,disabled:!t(J).writable},{id:"assign:function",label:`${s("Assign to function")}…`,disabled:!t(J).writable},{id:"sep3",separator:!0},{id:"link:sender",label:s("Create link as sender"),disabled:!gt(t(g)).canSend},{id:"link:receiver",label:s("Create link as receiver"),disabled:!gt(t(g)).canReceive},{id:"link:show",label:`${s("Show links")} (${String(gt(t(g)).links)})`,disabled:gt(t(g)).links===0},{id:"team",label:s("Team"),disabled:(t(Te)?.get(t(g))?.TEAM_TAG??"")===""}]);function xt(oe){return Ii(t(Te)?.get(oe)?.FLAGS).dontDelete}async function fn(oe){const He=t(g);if(oe.startsWith("paramset:")){Pn(He,oe.slice(9));return}if(oe==="assign:room"||oe==="assign:function"){ft(oe==="assign:room"?"room":"function",He);return}switch(oe){case"link:sender":u(C,[He],!0),u(R,[],!0),u(D,!0);break;case"link:receiver":u(C,[],!0),u(R,[He],!0),u(D,!0);break;case"team":u(x,He,!0),u(P,!0);break;case"smokeGroup":me(He);break;case"link:show":n.app.linksFilter=He,n.app.setTab("links");break;case"rename":Zt(He);break;case"restore":await n.devices.restoreConfig(t(U),He);break;case"clear":await n.devices.clearConfigCache(t(U),He);break;case"repair":un(He);break;case"replace":on(He);break;case"delete":bn(He);break;case"usage1":case"usage0":await n.devices.reportValueUsage(t(U),[He],oe==="usage1"?1:0);break}}var Mn=gT(),On=Ie(Mn),Mr=w(On),Xr=w(Mr);{const oe=rt=>{var st=dT(),Ve=Ie(st);{let Qe=c(()=>s("Pair device")),tt=c(()=>!t(Xe)),bt=c(()=>s("This interface cannot pair devices"));Ph(Ve,{get caption(){return t(Qe)},icon:"+",get disabled(){return t(tt)},get reason(){return t(bt)},testId:"devices-add",onclick:()=>u(A,!0)})}var et=d(Ve,2);{let Qe=c(()=>s("Rename device")),tt=c(()=>!t(De)),bt=c(()=>ze("device"));Ct(et,{get title(){return t(Qe)},icon:"✎",get disabled(){return t(tt)},get reason(){return t(bt)},testId:"devices-rename",onclick:()=>Zt(t(Ne))})}var at=d(et,2);{let Qe=c(()=>s("Assign to room")),tt=c(()=>!t(Et));Ct(at,{get title(){return t(Qe)},icon:"⌂",get disabled(){return t(tt)},get reason(){return t(it)},testId:"devices-assign-room",onclick:()=>ft("room")})}var _t=d(at,2);{let Qe=c(()=>s("Assign to function")),tt=c(()=>!t(Et));Ct(_t,{get title(){return t(Qe)},icon:"⚑",get disabled(){return t(tt)},get reason(){return t(it)},testId:"devices-assign-function",onclick:()=>ft("function")})}var Rt=d(_t,2);{let Qe=c(()=>s("Rooms and functions")),tt=c(()=>!t(J).available),bt=c(()=>s("No store connected"));Ct(Rt,{get title(){return t(Qe)},icon:"⊞",get disabled(){return t(tt)},get reason(){return t(bt)},testId:"devices-taxonomy",onclick:()=>{n.selectInterface(vd)}})}var Vt=d(Rt,2);{let Qe=c(()=>t(Ke).length===0),tt=c(()=>ze("channel"));Ct(Vt,{title:"reportValueUsage 1",icon:"⇩",get disabled(){return t(Qe)},get reason(){return t(tt)},testId:"devices-usage-1",onclick:()=>{vn(1)}})}var Ut=d(Vt,2);{let Qe=c(()=>t(Ke).length===0),tt=c(()=>ze("channel"));Ct(Ut,{title:"reportValueUsage 0",icon:"⇧",get disabled(){return t(Qe)},get reason(){return t(tt)},testId:"devices-usage-0",onclick:()=>{vn(0)}})}var ln=d(Ut,2);{let Qe=c(()=>s("restoreConfigToDevice")),tt=c(()=>t(Me)===""||!t(Ye)),bt=c(()=>t(Ye)?ze("device"):ze("bidcos"));Ct(ln,{get title(){return t(Qe)},icon:"⟲",get disabled(){return t(tt)},get reason(){return t(bt)},testId:"devices-restore",onclick:()=>{n.devices.restoreConfig(t(U),t(Me))}})}var Bt=d(ln,2);{let Qe=c(()=>s("clearConfigCache")),tt=c(()=>t(Me)===""||!t(Ye)),bt=c(()=>t(Ye)?ze("device"):ze("bidcos"));Ct(Bt,{get title(){return t(Qe)},icon:"⌫",get disabled(){return t(tt)},get reason(){return t(bt)},testId:"devices-clear",onclick:()=>{n.devices.clearConfigCache(t(U),t(Me))}})}var hn=d(Bt,2);{let Qe=c(()=>s("Repair configuration")),tt=c(()=>t(Ge)===""),bt=c(()=>ze("device"));Ct(hn,{get title(){return t(Qe)},icon:"⚒",get disabled(){return t(tt)},get reason(){return t(bt)},testId:"devices-repair",onclick:()=>un(t(Ge))})}var Tn=d(hn,2);{let Qe=c(()=>s("New smoke group")),tt=c(()=>!t(se));Ct(Tn,{get title(){return t(Qe)},icon:"◎",get disabled(){return t(tt)},get reason(){return t(W)},testId:"devices-smoke-group-new",onclick:be})}var gn=d(Tn,2);{let Qe=c(()=>s("Replace device")),tt=c(()=>!t(Le)),bt=c(()=>ze("delete"));Ct(gn,{get title(){return t(Qe)},icon:"⇄",get disabled(){return t(tt)},get reason(){return t(bt)},testId:"devices-replace",onclick:()=>on(t(Me))})}var Lt=d(gn,2);{let Qe=c(()=>s("Delete device")),tt=c(()=>!t(Le)),bt=c(()=>ze("delete"));Ct(Lt,{get title(){return t(Qe)},icon:"🗑",get disabled(){return t(tt)},get reason(){return t(bt)},testId:"devices-delete",onclick:()=>bn(t(Me))})}var It=d(Lt,2);{let Qe=c(()=>s("Refresh"));Ct(It,{get title(){return t(Qe)},icon:"⟳",testId:"devices-refresh",onclick:()=>{n.devices.load(t(U),{refresh:!0}),n.smokeGroups.refresh(t(U),t(Re))}})}v(rt,st)},He=rt=>{var st=wt(),Ve=Ie(st);{var et=at=>{var _t=cT(),Rt=Ie(_t),Vt=w(Rt),Ut=m(Vt,!0);Vt.value=Vt.__value="";var ln=d(Vt);je(ln,17,()=>t(_e),Lt=>Lt.path,(Lt,It)=>{var Qe=Su(),tt=m(Qe,!0),bt={};E(sn=>{h(tt,sn),bt!==(bt=t(It).path)&&(Qe.value=(Qe.__value=bt)??"")},[()=>jl(t(It)," ")]),v(Lt,Qe)}),Qt(Rt);var Bt=d(Rt,2),hn=w(Bt),Tn=m(hn,!0);hn.value=hn.__value="";var gn=d(hn);je(gn,17,()=>t(Ce),Lt=>Lt.path,(Lt,It)=>{var Qe=Su(),tt=m(Qe,!0),bt={};E(sn=>{h(tt,sn),bt!==(bt=t(It).path)&&(Qe.value=(Qe.__value=bt)??"")},[()=>jl(t(It)," ")]),v(Lt,Qe)}),Qt(Bt),E((Lt,It,Qe,tt)=>{I(Rt,"aria-label",Lt),h(Ut,It),I(Bt,"aria-label",Qe),h(Tn,tt)},[()=>s("Room"),()=>s("All rooms"),()=>s("Function"),()=>s("All functions")]),br(Rt,()=>t(te),Lt=>u(te,Lt)),br(Bt,()=>t(j),Lt=>u(j,Lt)),v(at,_t)};$(Ve,at=>{t(J).available&&at(et)})}v(rt,st)},Gt=(rt,st=zn,Ve=zn,et=zn)=>{var at=wt(),_t=Ie(at);{var Rt=It=>{const Qe=c(()=>Xs(st().ADDRESS)?le(st().ADDRESS):st().TYPE);{let tt=c(()=>n.host.deviceImageUrl(t(Qe))),bt=c(()=>`device-image-${st().ADDRESS}`);fi(It,{get deviceType(){return t(Qe)},get src(){return t(tt)},get testId(){return t(bt)}})}},Vt=It=>{var Qe=uT(),tt=Ie(Qe),bt=d(tt,2),sn=m(bt,!0);E((Rn,dr)=>{I(tt,"data-testid",`smoke-group-members-${st().ADDRESS}`),I(tt,"title",Rn),I(bt,"data-testid",`smoke-group-${st().ADDRESS}`),h(sn,dr)},[()=>s("Members"),()=>X(st())]),ee("click",tt,Rn=>{Rn.stopPropagation(),me(st().ADDRESS)}),v(It,Qe)},Ut=c(()=>Ve().key==="smokeGroup"&&ve(st().ADDRESS)&&et().depth===0),ln=It=>{var Qe=wt(),tt=Ie(Qe);je(tt,17,()=>z(st()),bt=>bt.datapoint,(bt,sn)=>{const Rn=c(()=>Mh(t(sn).datapoint,!t(Ye)));var dr=hT(),Nn=Ie(dr);let Lr;var cr=m(Nn,!0),Kn=d(Nn,2);{var Fr=Zr=>{var Ur=fT();E(os=>{I(Ur,"data-testid",`repair-${st().ADDRESS}`),I(Ur,"title",os)},[()=>s("Repair configuration")]),ee("click",Ur,os=>{os.stopPropagation(),un(st().ADDRESS)}),v(Zr,Ur)},Gr=c(()=>fS(t(sn).datapoint,!t(Ye)));$(Kn,Zr=>{t(Gr)&&Zr(Fr)})}E(Zr=>{Lr=St(Nn,1,"hmm-msg-mark svelte-1fmr35a",null,Lr,{"hmm-msg-error":t(sn).level==="error","hmm-msg-warn":t(sn).level==="warn"}),I(Nn,"title",Zr),I(Nn,"aria-label",t(sn).datapoint),h(cr,t(sn).symbol)},[()=>t(Rn)===void 0?t(sn).title:`${t(sn).title} — ${s(t(Rn))}`]),v(bt,dr)}),v(It,Qe)},Bt=It=>{const Qe=c(()=>Mt(st()));var tt=Au(),bt=Ie(tt),sn=m(bt,!0),Rn=d(bt,2);{var dr=cr=>{var Kn=ku(),Fr=m(Kn,!0);E(Gr=>h(Fr,Gr),[()=>s("in progress")]),v(cr,Kn)},Nn=cr=>{var Kn=wu(),Fr=m(Kn);E((Gr,Zr)=>{I(Kn,"data-testid",`firmware-${st().ADDRESS}`),I(Kn,"title",Gr),h(Fr,`${Zr??""} ${t(Qe).available??""??""}`)},[()=>s("Install firmware {version}",{version:t(Qe).available??""}),()=>s("install")]),ee("click",Kn,Gr=>{Gr.stopPropagation(),Ot(st())}),v(cr,Kn)},Lr=cr=>{var Kn=ku(),Fr=m(Kn,!0);E(()=>h(Fr,t(Qe).status)),v(cr,Kn)};$(Rn,cr=>{t(Qe).busy?cr(dr):t(Qe).action?cr(Nn,1):t(Qe).status&&cr(Lr,2)})}E(()=>h(sn,t(Qe).firmware)),v(It,tt)},hn=It=>{const Qe=c(()=>pt(st()));var tt=mT();je(tt,20,()=>t(Qe).names,bt=>bt,(bt,sn)=>{var Rn=wu(),dr=m(Rn,!0);E(()=>{I(Rn,"data-testid",`paramset-${st().ADDRESS}-${sn}`),h(dr,sn)}),ee("click",Rn,Nn=>{Nn.stopPropagation(),Pn(st().ADDRESS,sn)}),v(bt,Rn)}),E(()=>{I(tt,"data-testid",`paramsets-${st().ADDRESS}`),I(tt,"aria-busy",t(Qe).pending)}),v(It,tt)},Tn=It=>{var Qe=wt(),tt=Ie(Qe);{var bt=sn=>{var Rn=vT();v(sn,Rn)};$(tt,sn=>{st().AES_ACTIVE&&sn(bt)})}v(It,Qe)},gn=It=>{var Qe=Au(),tt=Ie(Qe),bt=m(tt,!0),sn=d(tt,2);{var Rn=Nn=>{var Lr=pT();v(Nn,Lr)},dr=c(()=>_d(st()));$(sn,Nn=>{t(dr)&&Nn(Rn)})}E(Nn=>{I(tt,"data-testid",`receiver-${st().ADDRESS}`),h(bt,Nn)},[()=>Rc(st(),t(O))]),v(It,Qe)},Lt=It=>{var Qe=Zn();E(tt=>h(Qe,tt),[()=>Ve().value?Ve().value(st())??"":st()[Ve().key]??""]),v(It,Qe)};$(_t,It=>{Ve().key==="icon"?It(Rt):t(Ut)?It(Vt,1):Ve().key==="msgs"&&et().depth===0?It(ln,2):Ve().key==="FIRMWARE"&&et().depth===0?It(Bt,3):Ve().key==="PARAMSETS"?It(hn,4):Ve().key==="AES_ACTIVE"?It(Tn,5):Ve().key==="INTERFACE"&&et().depth===0?It(gn,6):It(Lt,-1)})}v(rt,at)};let pn=c(()=>s("Devices")),Sn=c(()=>s("Filter")),er=c(()=>s("No row matches the filter")),Or=c(()=>s("Clear filter")),ys=c(()=>s("Devices")),ct=c(()=>s("{count} devices",{},t(we).length));zs(Xr,{get rows(){return t(we)},get columns(){return t(Je)},get subColumns(){return t(dt)},getId:rt=>rt.ADDRESS,subRows:Se,get scope(){return t(U)},get caption(){return t(pn)},get filterLabel(){return t(Sn)},get emptyText(){return t(F)},get noMatchText(){return t(er)},get clearFilterLabel(){return t(Or)},showingText:(rt,st)=>s("Showing {shown} of {total}",{shown:rt,total:st}),onrowcontextmenu:Jn,canRename:rt=>pe(rt.ADDRESS),onrename:rt=>Zt(rt.ADDRESS),get toolbarLabel(){return t(ys)},get countText(){return t(ct)},tableId:"devices",subTableId:"devices-channels",testId:"devices-table",get selected(){return t(i)},set selected(rt){u(i,rt,!0)},get expanded(){return t(o)},set expanded(rt){u(o,rt,!0)},toolbar:oe,status:He,cell:Gt,$$slots:{toolbar:!0,status:!0,cell:!0}})}var Ln=d(On,2);{let oe=c(()=>s("Devices"));Nd(Ln,{get items(){return t(Xt)},get x(){return t(f)},get y(){return t(p)},get label(){return t(oe)},testId:"devices-menu",onselect:He=>{fn(He)},get open(){return t(l)},set open(He){u(l,He,!0)}})}var Wn=d(Ln,2);UA(Wn,{get address(){return t(x)},get open(){return t(b)},set open(oe){u(b,oe,!0)}});var _r=d(Wn,2);OA(_r,{get address(){return t(x)},get open(){return t(k)},set open(oe){u(k,oe,!0)}});var xr=d(_r,2);lT(xr,{get address(){return t(x)},get open(){return t(y)},set open(oe){u(y,oe,!0)}});var lr=d(xr,2);mA(lr,{get open(){return t(A)},set open(oe){u(A,oe,!0)}});var Er=d(lr,2);Fh(Er,{get presetSenders(){return t(C)},get presetReceivers(){return t(R)},get open(){return t(D)},set open(oe){u(D,oe,!0)}});var tr=d(Er,2);GS(tr,{get address(){return t(x)},get open(){return t(P)},set open(oe){u(P,oe,!0)}});var yr=d(tr,2);{let oe=c(()=>t(re)!==void 0);NS(yr,{get group(){return t(Ee)},get isNew(){return t(oe)},get open(){return t(K)},set open(He){u(K,He,!0)}})}var Qr=d(yr,2);tT(Qr,{get address(){return t(x)},get open(){return t(S)},set open(oe){u(S,oe,!0)}});var nr=d(Qr,2);CA(nr,{get enumId(){return t(ie)},get targets(){return t(Z)},get open(){return t(ne)},set open(oe){u(ne,oe,!0)}});var is=d(nr,2);jw(is,{get interfaceName(){return t(U)},get address(){return t(de)},get paramset(){return t(G)},get open(){return t(ae)},set open(oe){u(ae,oe,!0)}}),v(r,Mn),mt()}kt(["click"]);var _T=_('<!> <!> <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),ET=_('<span data-testid="events-paused"> </span>'),yT=_('<div class="hmm-page svelte-dzof1w"><div class="hmm-page-grid svelte-dzof1w"><!></div></div>');function ST(r,e){ht(e,!0);const n=jt(),s=n.i18n.t;let a=N(Be([])),i=N(""),o=N(""),l=N(!1),f=N(Be([]));const p=c(()=>n.app.selectedInterface),g=c(()=>({interfaceName:t(p),...t(i).trim()===""?{}:{address:t(i).trim()},...t(o).trim()===""?{}:{datapoint:t(o).trim()}})),b=c(()=>n.events.filtered(t(g))),k=c(()=>t(l)?t(f):t(b)),y=c(()=>[{key:"timestamp",label:s("Timestamp"),width:110,value:C=>Bf(C.timestamp)},{key:"method",label:s("Method"),width:110},{key:"name",label:s("Name"),width:200,copy:"name",value:C=>C.address===void 0?"":n.nameOf(C.address)},{key:"address",label:"ADDRESS",width:150,mono:!0,copy:"address"},{key:"datapoint",label:"PARAM",width:180},{key:"value",label:"VALUE",width:140,value:C=>to(C.value??C.payload)},{key:"count",label:s("Events per device"),width:120,align:"right",filterable:!1,value:C=>C.address===void 0?"":n.events.countFor(C.address)}]);function S(){u(f,t(l)?[]:[...t(b)],!0),u(l,!t(l))}var A=yT(),x=w(A),D=w(x);{const C=de=>{var G=_T(),ne=Ie(G);{let j=c(()=>s("Pause"));Ct(ne,{get title(){return t(j)},icon:"⏸",get pressed(){return t(l)},testId:"events-pause",onclick:()=>S()})}var ie=d(ne,2);{let j=c(()=>s("Clear"));Ct(ie,{get title(){return t(j)},icon:"⌫",testId:"events-clear",onclick:()=>{n.events.clear()}})}var Z=d(ie,2),te=d(Z,2);E((j,U)=>{I(Z,"aria-label",j),I(te,"aria-label",U)},[()=>`${s("Filter")} ADDRESS`,()=>`${s("Filter")} PARAM`]),An(Z,()=>t(i),j=>u(i,j)),An(te,()=>t(o),j=>u(o,j)),v(de,G)},R=de=>{var G=wt(),ne=Ie(G);{var ie=Z=>{var te=ET(),j=m(te,!0);E(U=>h(j,U),[()=>s("Pause")]),v(Z,te)};$(ne,Z=>{t(l)&&Z(ie)})}v(de,G)};let P=c(()=>s("Events")),K=c(()=>s("Filter")),q=c(()=>s("No data")),re=c(()=>s("Events")),ae=c(()=>s("{count} events",{},t(k).length));zs(D,{get rows(){return t(k)},get scope(){return t(p)},get columns(){return t(y)},getId:de=>String(de.seq),get caption(){return t(P)},get filterLabel(){return t(K)},get emptyText(){return t(q)},get toolbarLabel(){return t(re)},get countText(){return t(ae)},tableId:"events",testId:"events-table",get selected(){return t(a)},set selected(de){u(a,de,!0)},toolbar:C,status:R,$$slots:{toolbar:!0,status:!0}})}v(r,A),mt()}var kT=_('<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),wT=_("<li> </li>"),AT=_('<ul class="hmm-group-delete-members svelte-o268m5" data-testid="group-delete-members"></ul>'),TT=_('<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 RT(r,e){ht(e,!0);let n=B(e,"open",15,!1),s=B(e,"group",3,void 0);const a=jt(),i=a.i18n.t;let o=N(!1);lt(()=>{n()&&u(o,!1)});function l(p){const g=a.names.name(p.id);return g===void 0?p.id:`${g} (${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=b=>{var k=kT(),y=Ie(k),S=m(y,!0),A=d(y,2),x=m(A,!0);E((D,C)=>{h(S,D),A.disabled=t(o)||s()===void 0,h(x,C)},[()=>i("Cancel"),()=>i("Delete")]),ee("click",y,()=>n(!1)),ee("click",A,()=>{f()}),v(b,k)};let g=c(()=>i("Delete group"));yn(r,{get title(){return t(g)},width:"480px",testId:"group-delete-dialog",get open(){return n()},set open(b){n(b)},buttons:p,children:(b,k)=>{var y=wt(),S=Ie(y);{var A=x=>{var D=TT(),C=Ie(D),R=m(C,!0),P=d(C,2),K=m(P,!0),q=d(P,2);{var re=ae=>{var de=AT();je(de,21,()=>s().members,G=>G.id,(G,ne)=>{var ie=wT(),Z=m(ie,!0);E(te=>h(Z,te),[()=>l(t(ne))]),v(G,ie)}),v(ae,de)};$(q,ae=>{s().members.length>0&&ae(re)})}E(ae=>{h(R,s().name),h(K,ae)},[()=>i("The members leave the group and the virtual device {device} is removed",{device:s().device})]),v(x,D)};$(S,x=>{s()!==void 0&&x(A)})}v(b,y)},$$slots:{buttons:!0,default:!0}})}mt()}kt(["click"]);var xT=_('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="group-save"> </button>',1),IT=_("<option> </option>"),DT=_('<select class="hmm-select" data-testid="group-type"></select>'),NT=_('<span data-testid="group-type"> </span>'),CT=_('<div class="hmm-group-row svelte-1gbrlxm"><span> </span> <span class="hmm-mono" data-testid="group-device"> </span></div>'),PT=_('<p class="hmm-group-muted svelte-1gbrlxm"> </p>'),MT=_('<p class="hmm-group-muted svelte-1gbrlxm" data-testid="group-no-candidates"> </p>'),OT=_('<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>'),LT=_('<ul class="hmm-group-list svelte-1gbrlxm" data-testid="group-candidates"></ul>'),FT=_('<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>'),GT=_('<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),UT=_('<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 BT(r,e){ht(e,!0);let n=B(e,"open",15,!1),s=B(e,"group",3,void 0);const a=jt(),i=a.i18n.t;let o=N(""),l=N(""),f=N(Be([])),p=N(Be([])),g=N(Be([])),b=N(Be([])),k=N(Be([])),y=N(!1),S=N(!1),A=N(Be([]));const x=c(()=>s()===void 0),D=c(()=>t(p).find(ie=>ie.id===t(l))),C=c(()=>{if(t(x))return t(D)?.assignable??[];const ie=new Set(t(k).map(Z=>Z.id));return[...t(k),...t(g).filter(Z=>!ie.has(Z.id))]}),R=c(()=>t(x)?t(D)?.leftover??[]:t(b)),P=c(()=>s()!==void 0&&t(o).trim()!==s().name),K=c(()=>!t(x)&&[...t(f)].sort().join(`
18
+ `)!==t(A).join(`
19
+ `)),q=c(()=>!t(S)&&!t(y)&&t(o).trim()!==""&&(t(x)?t(l)!=="":t(P)||t(K)));lt(()=>{n()&&(u(S,!1),re(s()))});async function re(ie){u(y,!0),u(o,ie?.name??"",!0),u(f,[],!0),u(p,[],!0),u(g,[],!0),u(b,[],!0),u(k,[],!0),u(A,[],!0);try{if(ie===void 0){u(p,await a.groups.types(),!0),u(l,t(p)[0]?.id??"",!0);return}const Z=await a.groups.detail(ie.id);if(Z===void 0){n(!1);return}u(o,Z.name,!0),u(l,Z.type,!0),u(p,Z.types.map(te=>({...te,assignable:[],leftover:[]})),!0),u(k,Z.members,!0),u(g,Z.assignable,!0),u(b,Z.leftover,!0),u(f,Z.members.map(te=>te.id),!0),u(A,[...t(f)].sort(),!0)}finally{u(y,!1)}}function ae(ie){u(l,ie,!0),u(f,[],!0)}function de(ie,Z){u(f,Z?[...t(f).filter(te=>te!==ie),ie]:t(f).filter(te=>te!==ie),!0)}function G(ie){const Z=a.names.name(ie.id);return Z===void 0?ie.id:Z}async function ne(){if(!t(q))return;u(S,!0);const ie=t(o).trim(),Z=s()===void 0?await a.groups.create(ie,t(l),t(f)):await a.groups.update(s().id,t(P)?ie:void 0,t(K)?t(f):void 0);u(S,!1),Z!==void 0&&n(!1)}{const ie=te=>{var j=xT(),U=Ie(j),fe=m(U,!0),Te=d(U,2),ce=m(Te,!0);E((Re,xe)=>{h(fe,Re),Te.disabled=!t(q),h(ce,xe)},[()=>i("Cancel"),()=>t(x)?i("Create"):i("Save")]),ee("click",U,()=>n(!1)),ee("click",Te,()=>{ne()}),v(te,j)};let Z=c(()=>t(x)?i("New group"):i("Edit group"));yn(r,{get title(){return t(Z)},width:"620px",minHeight:360,testId:"group-dialog",get open(){return n()},set open(te){n(te)},buttons:ie,children:(te,j)=>{var U=UT(),fe=w(U),Te=w(fe),ce=m(Te,!0),Re=d(Te,2),xe=d(fe,2),ge=w(xe),M=m(ge,!0),ue=d(ge,2);{var he=W=>{var V=DT();je(V,21,()=>t(p),O=>O.id,(O,J)=>{var _e=IT(),Ce=m(_e,!0),Fe={};E(We=>{h(Ce,We),Fe!==(Fe=t(J).id)&&(_e.value=(_e.__value=Fe)??"")},[()=>i(t(J).label)]),v(O,_e)});var T;Qt(V),E(()=>{V.disabled=t(y)||t(p).length===0,T!==(T=t(l))&&(V.value=(V.__value=T)??"",Cn(V,T))}),ee("change",V,O=>ae(O.currentTarget.value)),v(W,V)},ve=W=>{var V=NT(),T=m(V,!0);E(O=>h(T,O),[()=>i(t(D)?.label??t(l))]),v(W,V)};$(ue,W=>{t(x)?W(he):W(ve,-1)})}var ye=d(xe,2);{var Y=W=>{var V=CT(),T=w(V),O=m(T,!0),J=d(T,2),_e=m(J,!0);E(Ce=>{h(O,Ce),h(_e,s().device)},[()=>i("Virtual device")]),v(W,V)};$(ye,W=>{s()!==void 0&&W(Y)})}var X=d(ye,2),L=m(X,!0),z=d(X,2);{var le=W=>{var V=PT(),T=m(V,!0);E(O=>h(T,O),[()=>i("Loading")]),v(W,V)},me=W=>{var V=MT(),T=m(V,!0);E(O=>h(T,O),[()=>i("There are no other devices available")]),v(W,V)},be=W=>{var V=LT();je(V,21,()=>t(C),T=>T.id,(T,O)=>{var J=OT(),_e=w(J),Ce=w(_e),Fe=d(Ce,2),We=m(Fe,!0),Ze=d(Fe,2),nt=m(Ze,!0),ke=d(Ze,2),we=m(ke,!0);E((H,F)=>{Rr(Ce,H),I(Ce,"data-testid",`group-member-${t(O).id}`),h(We,F),h(nt,t(O).id),h(we,t(O).type)},[()=>t(f).includes(t(O).id),()=>G(t(O))]),ee("change",Ce,H=>de(t(O).id,H.currentTarget.checked)),v(T,J)}),v(W,V)};$(z,W=>{t(y)?W(le):t(C).length===0?W(me,1):W(be,-1)})}var Ee=d(z,2);{var se=W=>{var V=GT(),T=Ie(V),O=m(T,!0),J=d(T,2);je(J,21,()=>t(R),_e=>_e.id,(_e,Ce)=>{var Fe=FT(),We=w(Fe),Ze=m(We,!0),nt=d(We,2),ke=m(nt,!0),we=d(nt,2),H=m(we,!0);E(F=>{h(Ze,F),h(ke,t(Ce).id),h(H,t(Ce).type)},[()=>G(t(Ce))]),v(_e,Fe)}),E(_e=>h(O,_e),[()=>i("Already connected devices")]),v(W,V)};$(Ee,W=>{!t(y)&&t(R).length>0&&W(se)})}E((W,V,T)=>{h(ce,W),Re.disabled=t(y),h(M,V),h(L,T)},[()=>i("Group name"),()=>i("Group type"),()=>i("Addable devices")]),ee("keydown",Re,W=>{W.key==="Enter"&&ne()}),An(Re,()=>t(o),W=>u(o,W)),v(te,U)},$$slots:{buttons:!0,default:!0}})}mt()}kt(["click","keydown","change"]);var VT=_('<p class="hmm-groups-unavailable svelte-v7q9p3" data-testid="groups-unavailable"> </p>'),HT=_("<!> <!> <!> <!>",1),zT=_('<span class="hmm-groups-pending svelte-v7q9p3" data-testid="groups-pending"> </span>'),jT=_('<span class="hmm-groups-none svelte-v7q9p3"> </span>'),WT=_("<span><!></span>"),KT=_('<div class="hmm-page svelte-v7q9p3"><div class="hmm-page-grid svelte-v7q9p3"><!></div></div> <!> <!>',1);function YT(r,e){ht(e,!0);const n=jt(),s=n.i18n.t,a=c(()=>n.groups);let i=N(Be([])),o=N(!1),l=N(void 0),f=N(!1),p=N(void 0);const g=c(()=>t(a).groups.find(Z=>String(Z.id)===t(i)[0])),b=c(()=>n.app.session!==null&&n.app.session.level<8),k=c(()=>t(b)?s("Needs the administrator role on the system"):void 0);lt(()=>{t(a).offered&&t(a).load()});function y(Z){const te=n.names.name(Z.id);return te===void 0?Z.id:`${te} (${Z.id})`}function S(Z){return Z.members.map(y).join(", ")}function A(Z){return s(Z.typeLabel)}function x(){u(l,void 0),u(o,!0)}function D(Z){Z!==void 0&&(u(l,Z,!0),u(o,!0))}function C(Z){Z!==void 0&&(u(p,Z,!0),u(f,!0))}const R=c(()=>t(a).devicesToConfigure.length===0?"":s("Configuration pending: {list}",{list:t(a).devicesToConfigure.map(y).join(", ")})),P=c(()=>[{key:"name",label:s("Group name"),width:220,copy:"name"},{key:"type",label:s("Group type"),width:180,value:A},{key:"device",label:s("Virtual device"),width:140,mono:!0,copy:"address"},{key:"members",label:s("Members"),width:420,sortable:!1,value:S}]);var K=KT(),q=Ie(K),re=w(q),ae=w(re);{var de=Z=>{var te=VT(),j=m(te);E(U=>h(j,`${U??""}${t(a).state?.message===void 0?"":`: ${t(a).state.message}`}`),[()=>s("Heating groups are not available here")]),v(Z,te)},G=Z=>{{const te=ge=>{var M=HT(),ue=Ie(M);{let Y=c(()=>s("Refresh"));Ct(ue,{get title(){return t(Y)},icon:"⟳",get busy(){return t(a).loading},testId:"groups-refresh",onclick:()=>{t(a).load()}})}var he=d(ue,2);{let Y=c(()=>s("New group"));Ct(he,{get title(){return t(Y)},icon:"+",get disabled(){return t(b)},get reason(){return t(k)},testId:"groups-new",onclick:x})}var ve=d(he,2);{let Y=c(()=>s("Edit group")),X=c(()=>t(b)||t(g)===void 0),L=c(()=>t(k)??s("Select a group"));Ct(ve,{get title(){return t(Y)},icon:"✎",get disabled(){return t(X)},get reason(){return t(L)},testId:"groups-edit",onclick:()=>D(t(g))})}var ye=d(ve,2);{let Y=c(()=>s("Delete group")),X=c(()=>t(b)||t(g)===void 0),L=c(()=>t(k)??s("Select a group"));Ct(ye,{get title(){return t(Y)},icon:"✕",get disabled(){return t(X)},get reason(){return t(L)},testId:"groups-delete",onclick:()=>C(t(g))})}v(ge,M)},j=ge=>{var M=wt(),ue=Ie(M);{var he=ve=>{{let ye=c(()=>s("The direct device connections of these devices are still being configured"));ni(ve,{get text(){return t(ye)},testId:"groups-pending-tooltip",children:(Y,X)=>{var L=zT(),z=m(L,!0);E(()=>h(z,t(R))),v(Y,L)},$$slots:{default:!0}})}};$(ue,ve=>{t(R)!==""&&ve(he)})}v(ge,M)},U=(ge,M=zn,ue=zn)=>{var he=wt(),ve=Ie(he);{var ye=L=>{var z=WT(),le=w(z);{var me=Ee=>{var se=jT(),W=m(se,!0);E(V=>h(W,V),[()=>s("There are no devices in the group")]),v(Ee,se)},be=Ee=>{var se=Zn();E(W=>h(se,W),[()=>S(M())]),v(Ee,se)};$(le,Ee=>{M().members.length===0?Ee(me):Ee(be,-1)})}E(Ee=>I(z,"data-testid",Ee),[()=>`group-members-${String(M().id)}`]),v(L,z)},Y=L=>{var z=Zn();E(le=>h(z,le),[()=>ue().value(M())??""]),v(L,z)},X=L=>{var z=Zn();E(()=>h(z,M()[ue().key]??"")),v(L,z)};$(ve,L=>{ue().key==="members"?L(ye):ue().value?L(Y,1):L(X,-1)})}v(ge,he)};let fe=c(()=>s("Heating groups")),Te=c(()=>s("Filter")),ce=c(()=>t(a).loaded?s("No groups yet"):s("Loading")),Re=c(()=>s("Heating groups")),xe=c(()=>s("{count} groups",{},t(a).groups.length));zs(Z,{get rows(){return t(a).groups},get scope(){return n.app.selectedInterface},get columns(){return t(P)},getId:ge=>String(ge.id),get caption(){return t(fe)},get filterLabel(){return t(Te)},get emptyText(){return t(ce)},get toolbarLabel(){return t(Re)},get countText(){return t(xe)},onactivate:ge=>t(b)?void 0:D(ge),tableId:"groups",testId:"groups-table",get selected(){return t(i)},set selected(ge){u(i,ge,!0)},toolbar:te,status:j,cell:U,$$slots:{toolbar:!0,status:!0,cell:!0}})}};$(ae,Z=>{t(a).offered?Z(G,-1):Z(de)})}var ne=d(q,2);BT(ne,{get group(){return t(l)},get open(){return t(o)},set open(Z){u(o,Z,!0)}});var ie=d(ne,2);RT(ie,{get group(){return t(p)},get open(){return t(f)},set open(Z){u(f,Z,!0)}}),v(r,K),mt()}var qT=_('<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),$T=_('<li><span class="hmm-mono"> </span> → <span class="hmm-mono"> </span> <span class="hmm-remove-names svelte-1suervc"> </span></li>'),XT=_('<p> </p> <ul class="hmm-remove-links svelte-1suervc"></ul>',1);function QT(r,e){ht(e,!0);let n=B(e,"open",15,!1),s=B(e,"links",19,()=>[]);const a=jt(),i=a.i18n.t;let o=N(!1);function l(){const p=s().map(g=>({...g}));a.changeSet.stage({kind:"linkRemove",interfaceName:a.app.selectedInterface,title:i("{count} links",{},p.length),pairs:p,calls:p.map(g=>`removeLink(${g.sender}, ${g.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=b=>{var k=qT(),y=Ie(k),S=m(y,!0),A=d(y,2),x=m(A,!0),D=d(A,2),C=m(D,!0);E((R,P,K)=>{h(S,R),A.disabled=t(o)||s().length===0,h(x,P),D.disabled=t(o)||s().length===0,h(C,K)},[()=>i("Cancel"),()=>i("Add to pending changes"),()=>i("Delete")]),ee("click",y,()=>n(!1)),ee("click",A,l),ee("click",D,()=>{f()}),v(b,k)};let g=c(()=>i("Delete link"));yn(r,{get title(){return t(g)},width:"620px",testId:"remove-link-dialog",get open(){return n()},set open(b){n(b)},buttons:p,children:(b,k)=>{var y=XT(),S=Ie(y),A=m(S,!0),x=d(S,2);je(x,21,s,D=>`${D.sender}->${D.receiver}`,(D,C)=>{var R=$T(),P=w(R),K=m(P,!0),q=d(P,2),re=m(q,!0),ae=d(q,2),de=m(ae);E((G,ne)=>{h(K,t(C).sender),h(re,t(C).receiver),h(de,`${G??""} → ${ne??""}`)},[()=>a.nameOf(t(C).sender),()=>a.nameOf(t(C).receiver)]),v(D,R)}),E(D=>h(A,D),[()=>i("{count} links",{},s().length)]),v(b,y)},$$slots:{buttons:!0,default:!0}})}mt()}kt(["click"]);var Tu=_("<!> <!>",1),ZT=_("<!> <!> <!> <!> <!>",1),JT=_('<button type="button" class="hmm-links-handover svelte-1pum174" data-testid="links-filter-handover"> </button>'),eR=_('<span class="hmm-links-defective svelte-1pum174" data-testid="links-defective"> </span>'),tR=_('<span class="hmm-link-broken svelte-1pum174" role="img">⚠</span>'),nR=_('<div class="hmm-page svelte-1pum174"><div class="hmm-page-grid svelte-1pum174"><!></div></div> <!> <!> <!> <!>',1);function rR(r,e){ht(e,!0);const n=jt(),s=n.i18n.t;let a=N(Be([])),i=N(!1),o=N(0),l=N(0),f=N(void 0),p=N(""),g=N(!1),b=N(!1),k=N(!1),y=N(""),S=N("");const A=c(()=>n.app.selectedInterface),x=c(()=>n.interfaces.typeOf(t(A)));lt(()=>{const ge=n.app.linksFilter;ge!==""&&(u(p,ge,!0),n.app.linksFilter="")});const D=c(()=>n.links.of(t(A))),C=c(()=>n.links.defective(t(A)).length),R=c(()=>t(x)==="BidCos-RF"),P=c(()=>n.devices.index(t(A))),K=c(()=>t(P)===void 0||nh(t(P)).length>0),q=c(()=>t(a).map(ge=>{const[M,ue]=ge.split("->");return M===void 0||ue===void 0?void 0:{sender:M,receiver:ue}}).filter(ge=>ge!==void 0)),re=c(()=>t(q).length===1?t(q)[0]:void 0),ae=c(()=>[{key:"senderIcon",label:"",width:ui,fixed:!0,sortable:!1,filterable:!1,align:"center",value:()=>""},{key:"senderName",label:`${s("Sender")} ${s("Name")}`,width:170,copy:"name",value:ge=>n.nameOf(ge.SENDER)},{key:"SENDER",label:"SENDER",width:140,mono:!0,copy:"address"},{key:"senderType",label:"TYPE",width:130,value:ge=>n.devices.index(t(A))?.get(ge.SENDER)?.TYPE??""},{key:"receiverIcon",label:"",width:ui,fixed:!0,sortable:!1,filterable:!1,align:"center",value:()=>""},{key:"receiverName",label:`${s("Receiver")} ${s("Name")}`,width:170,copy:"name",value:ge=>n.nameOf(ge.RECEIVER)},{key:"RECEIVER",label:"RECEIVER",width:140,mono:!0,copy:"address"},{key:"receiverType",label:"TYPE",width:130,value:ge=>n.devices.index(t(A))?.get(ge.RECEIVER)?.TYPE??""},{key:"FLAGS",label:"FLAGS",width:48,align:"center",sortable:!1,value:ge=>Al(ge).broken?"broken":""},{key:"NAME",label:"NAME",width:180},{key:"DESCRIPTION",label:"DESCRIPTION"}]);function de(ge){const M=n.devices.index(t(A));return M?.parentOf(ge)?.TYPE??M?.get(ge)?.TYPE??""}function G(ge){u(y,ge.sender,!0),u(S,ge.receiver,!0),u(k,!0)}function ne(ge,M){u(f,{sender:ge.SENDER,receiver:ge.RECEIVER},!0),u(o,M.clientX,!0),u(l,M.clientY,!0),u(i,!0)}const ie=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 Z(ge){const M=t(f);if(M)switch(ge){case"edit":G(M);break;case"short":await n.links.activate(t(A),M.receiver,M.sender,!1);break;case"long":await n.links.activate(t(A),M.receiver,M.sender,!0);break;case"delete":u(a,[`${M.sender}->${M.receiver}`],!0),u(b,!0);break}}var te=nR(),j=Ie(te),U=w(j),fe=w(U);{const ge=L=>{var z=ZT(),le=Ie(z);{let V=c(()=>s("Add link")),T=c(()=>!t(K)),O=c(()=>s("No channel of this interface can be the sender of a link"));Ph(le,{get caption(){return t(V)},icon:"+",get disabled(){return t(T)},get reason(){return t(O)},testId:"links-add",onclick:()=>u(g,!0)})}var me=d(le,2);{let V=c(()=>s("Edit link")),T=c(()=>t(re)===void 0),O=c(()=>s("Select one link"));Ct(me,{get title(){return t(V)},icon:"⚙",get disabled(){return t(T)},get reason(){return t(O)},testId:"links-edit",onclick:()=>t(re)&&G(t(re))})}var be=d(me,2);{var Ee=V=>{var T=Tu(),O=Ie(T);{let _e=c(()=>s("Activate short")),Ce=c(()=>t(re)===void 0),Fe=c(()=>s("Select one link"));Ct(O,{get title(){return t(_e)},icon:"▸",get disabled(){return t(Ce)},get reason(){return t(Fe)},testId:"links-play-short",onclick:()=>t(re)&&void n.links.activate(t(A),t(re).receiver,t(re).sender,!1)})}var J=d(O,2);{let _e=c(()=>s("Activate long")),Ce=c(()=>t(re)===void 0),Fe=c(()=>s("Select one link"));Ct(J,{get title(){return t(_e)},icon:"▸▸",get disabled(){return t(Ce)},get reason(){return t(Fe)},testId:"links-play-long",onclick:()=>t(re)&&void n.links.activate(t(A),t(re).receiver,t(re).sender,!0)})}v(V,T)};$(be,V=>{t(R)&&V(Ee)})}var se=d(be,2);{let V=c(()=>s("Delete link")),T=c(()=>t(q).length===0),O=c(()=>s("Please choose one or more links"));Ct(se,{get title(){return t(V)},icon:"🗑",get disabled(){return t(T)},get reason(){return t(O)},testId:"links-delete",onclick:()=>u(b,!0)})}var W=d(se,2);{let V=c(()=>s("Refresh"));Ct(W,{get title(){return t(V)},icon:"⟳",testId:"links-refresh",onclick:()=>{n.links.load(t(A))}})}v(L,z)},M=L=>{var z=Tu(),le=Ie(z);{var me=se=>{var W=JT(),V=m(W);E(T=>{I(W,"title",T),h(V,`${t(p)??""} ✕`)},[()=>s("Filter")]),ee("click",W,()=>u(p,"")),v(se,W)};$(le,se=>{t(p)!==""&&se(me)})}var be=d(le,2);{var Ee=se=>{var W=eR(),V=m(W,!0);E(T=>h(V,T),[()=>s("{count} defective links",{},t(C))]),v(se,W)};$(be,se=>{t(C)>0&&se(Ee)})}v(L,z)},ue=(L,z=zn,le=zn)=>{var me=wt(),be=Ie(me);{var Ee=T=>{{let O=c(()=>de(z().SENDER)),J=c(()=>n.host.deviceImageUrl(de(z().SENDER)));fi(T,{get deviceType(){return t(O)},get src(){return t(J)}})}},se=T=>{{let O=c(()=>de(z().RECEIVER)),J=c(()=>n.host.deviceImageUrl(de(z().RECEIVER)));fi(T,{get deviceType(){return t(O)},get src(){return t(J)}})}},W=T=>{const O=c(()=>Al(z()));var J=wt(),_e=Ie(J);{var Ce=Fe=>{var We=tR();E((Ze,nt)=>{I(We,"aria-label",Ze),I(We,"title",nt)},[()=>s("Defective link"),()=>`${t(O).senderBroken?"SENDER_BROKEN ":""}${t(O).receiverBroken?"RECEIVER_BROKEN":""}`.trim()]),v(Fe,We)};$(_e,Fe=>{t(O).broken&&Fe(Ce)})}v(T,J)},V=T=>{var O=Zn();E(J=>h(O,J),[()=>le().value?le().value(z())??"":z()[le().key]??""]),v(T,O)};$(be,T=>{le().key==="senderIcon"?T(Ee):le().key==="receiverIcon"?T(se,1):le().key==="FLAGS"?T(W,2):T(V,-1)})}v(L,me)};let he=c(()=>s("Links")),ve=c(()=>s("Filter")),ye=c(()=>s("No data")),Y=c(()=>s("Links")),X=c(()=>s("{count} links",{},t(D).length));zs(fe,{get rows(){return t(D)},get scope(){return t(A)},get columns(){return t(ae)},getId:L=>`${L.SENDER}->${L.RECEIVER}`,get caption(){return t(he)},get filterLabel(){return t(ve)},get emptyText(){return t(ye)},onactivate:L=>G({sender:L.SENDER,receiver:L.RECEIVER}),onrowcontextmenu:ne,get toolbarLabel(){return t(Y)},get countText(){return t(X)},tableId:"links",testId:"links-table",get selected(){return t(a)},set selected(L){u(a,L,!0)},get filter(){return t(p)},set filter(L){u(p,L,!0)},toolbar:ge,status:M,cell:ue,$$slots:{toolbar:!0,status:!0,cell:!0}})}var Te=d(j,2);{let ge=c(()=>s("Links"));Nd(Te,{get items(){return t(ie)},get x(){return t(o)},get y(){return t(l)},get label(){return t(ge)},testId:"links-menu",onselect:M=>{Z(M)},get open(){return t(i)},set open(M){u(i,M,!0)}})}var ce=d(Te,2);Fh(ce,{onedit:ge=>G(ge),get open(){return t(g)},set open(ge){u(g,ge,!0)}});var Re=d(ce,2);QT(Re,{get links(){return t(q)},get open(){return t(b)},set open(ge){u(b,ge,!0)}});var xe=d(Re,2);Kh(xe,{get sender(){return t(y)},get receiver(){return t(S)},get open(){return t(k)},set open(ge){u(k,ge,!0)}}),v(r,te),mt()}kt(["click"]);function qh(r){let e=0;const n=new Set;for(const s of r){const a=xd(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 $h(r,e,n){const s=r[n];return s?yi(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,...qh(vo(e,a.path))})):[]}function sR(r,e,n){return Object.entries(r).map(([s,a])=>{const i=$h(r,e,s);return{id:s,kind:"enum",enumId:s,name:kh(s,a,n),depth:0,hasChildren:i.length>0,...qh(vo(e,s)),nodes:i}})}function aR(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 iR(r,e=14){return Math.max(0,r-1)*e}function oR(r,e){const n=e.split("/")[0]??"";return Oh(r,n).filter(s=>pS(e,s.path))}function lR(r,e){return vo(r,e.kind==="enum"?e.enumId:e.path??"")}function Ru(r,e,n){return{...r,en:e,[n]:e}}var dR=_('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button hmm-meta-delete-danger svelte-1af2i6v"> </button>',1),cR=_('<p class="hmm-meta-delete-empty svelte-1af2i6v"> </p>'),uR=_("<li> </li>"),fR=_('<p class="hmm-meta-delete-title svelte-1af2i6v"> </p> <ul class="hmm-meta-delete-members svelte-1af2i6v"></ul>',1),hR=_('<p class="hmm-meta-delete-subject svelte-1af2i6v"> </p> <!>',1);function mR(r,e){ht(e,!0);let n=B(e,"open",15,!1),s=B(e,"labelOf",3,void 0),a=B(e,"testId",3,"meta-delete"),i=N(!1);lt(()=>{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 g=dR(),b=Ie(g),k=m(b,!0),y=d(b,2),S=m(y,!0);E((A,x)=>{h(k,A),y.disabled=t(i),I(y,"data-testid",`${a()}-apply`),h(S,x)},[()=>e.t("Cancel"),()=>e.members.length===0?e.t("Delete"):e.t("Delete and detach")]),ee("click",b,()=>n(!1)),ee("click",y,()=>{o()}),v(p,g)};let f=c(()=>`${a()}-dialog`);yn(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,g)=>{var b=hR(),k=Ie(b),y=m(k,!0),S=d(k,2);{var A=D=>{var C=cR(),R=m(C,!0);E(P=>h(R,P),[()=>e.t("Nothing is assigned here")]),v(D,C)},x=D=>{var C=fR(),R=Ie(C),P=m(R,!0),K=d(R,2);je(K,20,()=>e.members,q=>q,(q,re)=>{var ae=uR(),de=m(ae,!0);E(G=>h(de,G),[()=>s()===void 0?re:s()(re)]),v(q,ae)}),E(q=>{h(P,q),I(K,"data-testid",`${a()}-members`)},[()=>e.t("Still assigned here - the assignments are removed with the node:")]),v(D,C)};$(S,D=>{e.members.length===0?D(A):D(x,-1)})}E(()=>h(y,e.subject)),v(p,b)},$$slots:{buttons:!0,default:!0}})}mt()}kt(["click"]);var vR=_('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button"> </button>',1),pR=_("<option> </option>"),gR=_('<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 bR(r,e){ht(e,!0);let n=B(e,"open",15,!1),s=B(e,"current",3,""),a=B(e,"testId",3,"meta-move"),i=N(""),o=N(!1);lt(()=>{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=g=>{var b=vR(),k=Ie(b),y=m(k,!0),S=d(k,2),A=m(S,!0);E((x,D)=>{h(y,x),S.disabled=t(o),I(S,"data-testid",`${a()}-apply`),h(A,D)},[()=>e.t("Cancel"),()=>e.t("Apply")]),ee("click",k,()=>n(!1)),ee("click",S,()=>{l()}),v(g,b)};let p=c(()=>`${a()}-dialog`);yn(r,{get title(){return e.title},width:"440px",get testId(){return t(p)},get open(){return n()},set open(g){n(g)},buttons:f,children:(g,b)=>{var k=gR(),y=Ie(k),S=m(y,!0),A=d(y,2),x=w(A),D=m(x,!0),C=d(x,2),R=w(C),P=m(R,!0);R.value=R.__value="";var K=d(R);je(K,17,()=>e.targets,q=>q.path,(q,re)=>{var ae=pR(),de=m(ae,!0),G={};E(ne=>{h(de,ne),G!==(G=t(re).path)&&(ae.value=(ae.__value=G)??"")},[()=>jl(t(re)," ")]),v(q,ae)}),Qt(C),E((q,re,ae,de)=>{h(S,e.subject),h(D,q),I(C,"size",re),I(C,"aria-label",ae),I(C,"data-testid",`${a()}-parent`),h(P,de)},[()=>e.t("Move to"),()=>Math.min(12,Math.max(4,e.targets.length+1)),()=>e.t("Move to"),()=>e.t("Top level")]),br(C,()=>t(i),q=>u(i,q)),v(g,k)},$$slots:{buttons:!0,default:!0}})}mt()}kt(["click"]);var _R=_('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button"> </button>',1),ER=_('<label class="hmm-meta-name-row svelte-ue9nlv"><span> </span> <input class="hmm-input hmm-meta-name-input svelte-ue9nlv"/></label>');function yR(r,e){ht(e,!0);let n=B(e,"open",15,!1),s=B(e,"initial",3,""),a=B(e,"testId",3,"meta-name"),i=N(""),o=N(!1),l=N(void 0);lt(()=>{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 g=await e.onapply(p);u(o,!1),g&&n(!1)}{const p=b=>{var k=_R(),y=Ie(k),S=m(y,!0),A=d(y,2),x=m(A,!0);E((D,C,R)=>{h(S,D),A.disabled=C,I(A,"data-testid",`${a()}-apply`),h(x,R)},[()=>e.t("Cancel"),()=>t(o)||t(i).trim()==="",()=>e.t("Apply")]),ee("click",y,()=>n(!1)),ee("click",A,()=>{f()}),v(b,k)};let g=c(()=>`${a()}-dialog`);yn(r,{get title(){return e.title},width:"440px",get testId(){return t(g)},get open(){return n()},set open(b){n(b)},buttons:p,children:(b,k)=>{var y=ER(),S=w(y),A=m(S,!0),x=d(S,2);_n(x,D=>u(l,D),()=>t(l)),E(()=>{h(A,e.label),I(x,"aria-label",e.label),I(x,"data-testid",`${a()}-input`)}),ee("keydown",x,D=>{D.key==="Enter"&&(D.preventDefault(),f())}),An(x,()=>t(i),D=>u(i,D)),v(b,y)},$$slots:{buttons:!0,default:!0}})}mt()}kt(["click","keydown"]);var SR=_("<!> <!> <!> <!> <!> <!> <!>",1),kR=_("<span> </span>"),wR=_('<span class="hmm-meta-path svelte-147hcfo"> </span>'),AR=_('<div class="hmm-page svelte-147hcfo"><div class="hmm-page-grid svelte-147hcfo"><!></div></div> <!> <!> <!>',1);function TR(r,e){ht(e,!0);let n=B(e,"enumId",3,void 0),s=B(e,"flat",3,!1),a=B(e,"available",3,!0),i=B(e,"writable",3,!0),o=B(e,"language",3,"en"),l=B(e,"labelOf",3,void 0),f=B(e,"emptyText",3,void 0),p=B(e,"countText",3,void 0),g=B(e,"tableId",3,void 0),b=B(e,"testId",3,"meta-table"),k=N(Be([])),y=N(Be([])),S=N(!1),A=N(!1),x=N("add"),D=N(""),C=N(""),R=N(""),P=N(!1),K=N(!1),q=N(void 0);const re=c(()=>n()===void 0),ae=c(()=>!s()),de=c(()=>n()===void 0?sR(e.enums,e.objects,o()):$h(e.enums,e.objects,n())),G=c(()=>aR(t(de))),ne=c(()=>t(k).length===1?t(G).get(t(k)[0]??""):void 0),ie=c(()=>t(ne)?.kind==="node"?t(ne):void 0),Z=[];lt(()=>{if(!t(re))return;const T=Object.keys(e.enums).filter(O=>!Z.includes(O));T.length>0&&(Z.push(...T),u(y,[...t(y),...T],!0))}),lt(()=>{t(k).some(T=>!t(G).has(T))&&u(k,t(k).filter(T=>t(G).has(T)),!0)});const te=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(S)),U=c(()=>n()??t(ne)?.enumId),fe=c(()=>t(j)&&t(U)!==void 0),Te=c(()=>t(j)&&t(re)?e.t("Select a taxonomy or a node"):t(te)),ce=c(()=>t(j)?e.t("Select a node"):t(te)),Re=c(()=>[{key:"name",label:e.t("Name"),width:240,sortable:!t(re),value:T=>T.name},{key:"devices",label:e.t("Devices"),width:96,align:"right",filterable:!1,sortable:!t(re),value:T=>T.devices===0?"":T.devices},{key:"channels",label:e.t("Channels"),width:96,align:"right",filterable:!1,sortable:!t(re),value:T=>T.channels===0?"":T.channels},{key:"path",label:e.t("Path"),width:220,mono:!0,sortable:!t(re),value:T=>T.path??T.enumId}]);function xe(T){return T.nodes??[]}function ge(T,O){switch(u(x,T,!0),u(q,O,!0),T){case"enum":u(D,e.t("New taxonomy"),!0),u(C,e.t("Name"),!0),u(R,"");break;case"add":u(D,e.t("Add"),!0),u(C,e.t("Name"),!0),u(R,"");break;case"add-below":u(D,e.t("Add below"),!0),u(C,`${e.t("Add below")}: ${O?.name??""}`),u(R,"");break;case"rename":u(D,e.t("Rename"),!0),u(C,e.t("New name"),!0),u(R,O?.name??"",!0);break}u(A,!0)}async function M(T){u(S,!0);try{switch(t(x)){case"enum":return await e.actions.createEnum(wh(T,Object.keys(e.enums)),Ru(void 0,T,o()));case"add":return t(U)===void 0?!1:await e.actions.createNode(t(U),void 0,T)!==void 0;case"add-below":{const O=t(q);return O?.path===void 0?!1:await e.actions.createNode(O.enumId,O.path,T)!==void 0}case"rename":{const O=t(q);return O===void 0?!1:O.kind==="enum"?await e.actions.renameEnum(O.enumId,Ru(e.enums[O.enumId]?.name,T,o())):await e.actions.renameNode(O.path??"",T)}}}finally{u(S,!1)}}function ue(T){T?.path!==void 0&&(u(q,T,!0),u(P,!0))}async function he(T){const O=t(q);if(O?.path===void 0)return!1;u(S,!0);try{return await e.actions.moveNode(O.path,T)}finally{u(S,!1)}}function ve(T){T!==void 0&&(u(q,T,!0),u(K,!0))}async function ye(T){const O=t(q);if(O===void 0)return!1;u(S,!0);try{return O.kind==="enum"?await e.actions.deleteEnum(O.enumId,T):await e.actions.deleteNode(O.path??"",T)}finally{u(S,!1)}}async function Y(){u(S,!0),await e.actions.refresh(),u(S,!1)}function X(T){t(j)&&ge("rename",T)}const L=c(()=>t(q)?.path===void 0?void 0:t(q)),z=c(()=>t(q)===void 0?[]:lR(e.objects,t(q)));var le=AR(),me=Ie(le),be=w(me),Ee=w(be);{const T=we=>{var H=SR(),F=Ie(H);{var Ne=Xe=>{{let ze=c(()=>e.t("New taxonomy")),Je=c(()=>!t(j));Ct(Xe,{get title(){return t(ze)},icon:"⊞",get disabled(){return t(Je)},get reason(){return t(te)},testId:"meta-new-enum",onclick:()=>ge("enum",void 0)})}};$(F,Xe=>{t(re)&&Xe(Ne)})}var Me=d(F,2);{let Xe=c(()=>e.t("Add")),ze=c(()=>!t(fe));Ct(Me,{get title(){return t(Xe)},icon:"+",get disabled(){return t(ze)},get reason(){return t(Te)},testId:"meta-add",onclick:()=>ge("add",t(ne))})}var Ke=d(Me,2);{var pe=Xe=>{{let ze=c(()=>e.t("Add below")),Je=c(()=>!t(j)||t(ie)===void 0);Ct(Xe,{get title(){return t(ze)},icon:"⊕",get disabled(){return t(Je)},get reason(){return t(ce)},testId:"meta-add-below",onclick:()=>ge("add-below",t(ie))})}};$(Ke,Xe=>{t(ae)&&Xe(pe)})}var De=d(Ke,2);{let Xe=c(()=>e.t("Rename")),ze=c(()=>!t(j)||t(ne)===void 0);Ct(De,{get title(){return t(Xe)},icon:"✎",get disabled(){return t(ze)},get reason(){return t(te)},testId:"meta-rename",onclick:()=>ge("rename",t(ne))})}var Pe=d(De,2);{var Ge=Xe=>{{let ze=c(()=>e.t("Move")),Je=c(()=>!t(j)||t(ie)===void 0);Ct(Xe,{get title(){return t(ze)},icon:"⤴",get disabled(){return t(Je)},get reason(){return t(ce)},testId:"meta-move",onclick:()=>ue(t(ie))})}};$(Pe,Xe=>{t(ae)&&Xe(Ge)})}var Le=d(Pe,2);{let Xe=c(()=>e.t("Delete")),ze=c(()=>!t(j)||t(ne)===void 0);Ct(Le,{get title(){return t(Xe)},icon:"🗑",get disabled(){return t(ze)},get reason(){return t(te)},testId:"meta-delete",onclick:()=>ve(t(ne))})}var Ye=d(Le,2);{let Xe=c(()=>e.t("Refresh")),ze=c(()=>!a());Ct(Ye,{get title(){return t(Xe)},icon:"⟳",get disabled(){return t(ze)},get busy(){return t(S)},testId:"meta-refresh",onclick:()=>{Y()}})}v(we,H)},O=(we,H=zn,F=zn)=>{var Ne=wt(),Me=Ie(Ne);{var Ke=Pe=>{var Ge=kR();let Le,Ye;var Xe=m(Ge,!0);E(ze=>{Le=St(Ge,1,"hmm-meta-name svelte-147hcfo",null,Le,{"hmm-meta-name-enum":H().kind==="enum"}),I(Ge,"data-depth",H().depth),Ye=Fn(Ge,"",Ye,{"padding-left":ze}),h(Xe,H().name)},[()=>`${String(iR(H().depth))}px`]),v(Pe,Ge)},pe=Pe=>{var Ge=wR(),Le=m(Ge,!0);E(()=>h(Le,H().path??H().enumId)),v(Pe,Ge)},De=Pe=>{var Ge=Zn();E(Le=>h(Ge,Le),[()=>F().value?F().value(H())??"":""]),v(Pe,Ge)};$(Me,Pe=>{F().key==="name"?Pe(Ke):F().key==="path"?Pe(pe,1):Pe(De,-1)})}v(we,Ne)};let J=c(()=>t(re)?xe:void 0),_e=c(()=>n()??"metadata"),Ce=c(()=>n()===void 0?e.t("Metadata"):n()==="room"?e.t("Rooms"):e.t("Functions")),Fe=c(()=>e.t("Filter")),We=c(()=>a()?f()??"":e.t("No store connected")),Ze=c(()=>e.t("No row matches the filter")),nt=c(()=>e.t("Clear filter")),ke=c(()=>p()===void 0?void 0:p()(t(de).length));zs(Ee,{get rows(){return t(de)},get columns(){return t(Re)},getId:we=>we.id,get subRows(){return t(J)},get scope(){return t(_e)},get caption(){return t(Ce)},get filterLabel(){return t(Fe)},get emptyText(){return t(We)},get noMatchText(){return t(Ze)},get clearFilterLabel(){return t(nt)},showingText:(we,H)=>e.t("Showing {shown} of {total}",{shown:we,total:H}),get countText(){return t(ke)},onactivate:X,get tableId(){return g()},get testId(){return b()},get selected(){return t(k)},set selected(we){u(k,we,!0)},get expanded(){return t(y)},set expanded(we){u(y,we,!0)},toolbar:T,cell:O,$$slots:{toolbar:!0,cell:!0}})}var se=d(me,2);yR(se,{get title(){return t(D)},get label(){return t(C)},get initial(){return t(R)},get t(){return e.t},onapply:M,testId:"meta-name",get open(){return t(A)},set open(T){u(A,T,!0)}});var W=d(se,2);{let T=c(()=>e.t("Move")),O=c(()=>t(L)?.name??""),J=c(()=>t(L)?.path===void 0?[]:oR(e.enums,t(L).path)),_e=c(()=>t(L)?.path===void 0?"":Z_(t(L).path)??"");bR(W,{get title(){return t(T)},get subject(){return t(O)},get targets(){return t(J)},get current(){return t(_e)},get t(){return e.t},onapply:he,testId:"meta-move",get open(){return t(P)},set open(Ce){u(P,Ce,!0)}})}var V=d(W,2);{let T=c(()=>e.t("Delete")),O=c(()=>t(q)?.name??"");mR(V,{get title(){return t(T)},get subject(){return t(O)},get members(){return t(z)},get labelOf(){return l()},get t(){return e.t},onapply:ye,testId:"meta-delete",get open(){return t(K)},set open(J){u(K,J,!0)}})}v(r,le),mt()}function tl(r,e){ht(e,!0);let n=B(e,"enumId",3,void 0);const s=jt(),a=s.i18n.t,i=c(()=>s.taxonomy),o={createEnum:(g,b)=>s.taxonomy.createEnum(g,b),renameEnum:(g,b)=>s.taxonomy.renameEnum(g,b),deleteEnum:(g,b)=>s.taxonomy.deleteEnum(g,b),createNode:(g,b,k)=>s.taxonomy.createNode(g,b,k),renameNode:(g,b)=>s.taxonomy.renameNode(g,b),moveNode:(g,b)=>s.taxonomy.moveNode(g,b),deleteNode:(g,b)=>s.taxonomy.deleteNode(g,b),refresh:()=>s.taxonomy.refresh()};function l(g){const b=xd(g)?.address??g,k=s.names.name(b);return k===void 0?b:`${k} (${b})`}const f=c(()=>n()==="room"?a("No rooms yet"):n()==="function"?a("No functions yet"):a("No taxonomies yet"));function p(g){switch(n()){case"room":return a("{count} rooms",{},g);case"function":return a("{count} functions",{},g);default:return a("{count} taxonomies",{},g)}}{let g=c(()=>n()===void 0?"meta":`meta-${n()}`),b=c(()=>n()===void 0?"meta-table":`meta-table-${n()}`);TR(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(g)},get testId(){return t(b)}})}mt()}var RR=_('<span class="hmm-rssi hmm-rssi-unknown svelte-1wk3r6l" data-rssi="unknown">—</span>'),xR=_("<span></span>"),IR=_('<span role="img"><span class="hmm-rssi-value"> </span><span class="hmm-rssi-bars svelte-1wk3r6l" aria-hidden="true"></span></span>');function Na(r,e){ht(e,!0);let n=B(e,"value",3,void 0),s=B(e,"labelOf",3,k=>k.label),a=B(e,"testId",3,void 0);const i=c(()=>V_(n())),o=c(()=>t(i)===void 0?void 0:`${String(n())} dBm · ${s()(t(i))}`),l=[1,2,3,4];var f=wt(),p=Ie(f);{var g=k=>{var y=RR();E(()=>I(y,"data-testid",a())),v(k,y)},b=k=>{var y=IR(),S=w(y),A=m(S,!0),x=d(S);je(x,20,()=>l,D=>D,(D,C)=>{var R=xR();let P;E(()=>P=St(R,1,"hmm-rssi-bar svelte-1wk3r6l",null,P,{"hmm-rssi-bar-off":C>t(i).bars})),v(D,R)}),E(()=>{St(y,1,`hmm-rssi hmm-rssi-${t(i).step??""}`,"svelte-1wk3r6l"),I(y,"title",t(o)),I(y,"aria-label",t(o)),I(y,"data-rssi",t(i).step),I(y,"data-bars",t(i).bars),I(y,"data-testid",a()),h(A,n())}),v(k,y)};$(p,k=>{t(i)===void 0?k(g):k(b,-1)})}v(r,f),mt()}var DR=_('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="best-receiver-confirm"> </button>',1),NR=_('<p class="hmm-best-receiver-empty svelte-1gd5w9r" data-testid="best-receiver-empty"> </p>'),CR=_('<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>'),PR=_('<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>'),MR=_('<p class="hmm-best-receiver-progress svelte-1gd5w9r" data-testid="best-receiver-progress"> </p>'),OR=_('<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 LR(r,e){ht(e,!0);let n=B(e,"open",15,!1);const s=jt(),a=s.i18n.t;let i=N(Be(xl)),o=N(Be({})),l=N(!1),f=N(Be({done:0,total:0}));const p=c(()=>s.app.selectedInterface),g=c(()=>s.devices.devices(t(p))),b=c(()=>s.radio.gateways(t(p))),k=c(()=>s.radio.proposeReceivers(t(p),t(g),t(i))),y=c(()=>t(k).filter(P=>P.verdict==="switch"||P.verdict==="marginal"||P.verdict==="unheard")),S=c(()=>({keep:t(k).filter(P=>P.verdict==="keep").length,unmeasured:t(k).filter(P=>P.verdict==="unmeasured").length,roaming:t(k).filter(P=>P.verdict==="roaming").length})),A=c(()=>t(y).filter(P=>x(P)));function x(P){return t(o)[P.address]??P.verdict==="switch"}function D(P){if(P===void 0||P==="")return"—";const K=t(b).find(q=>q.ADDRESS===P);return K?xa(K):P}function C(P){const K=Number.parseInt(P,10);u(i,Number.isFinite(K)?Math.max(0,K):xl,!0),u(o,{},!0)}lt(()=>{n()&&(u(o,{},!0),u(f,{done:0,total:0},!0))});async function R(){const P=t(A).filter(q=>q.best!==void 0);u(l,!0),u(f,{done:0,total:P.length},!0);let K=0;for(const q of P)await s.radio.setBidcosInterface(t(p),q.address,q.best??"",!1)||(K+=1),u(f,{done:t(f).done+1,total:P.length},!0);await s.devices.load(t(p),{refresh:!0}),await s.radio.load(t(p)),u(o,{},!0),u(l,!1),K===0&&n(!1)}{const P=q=>{var re=DR(),ae=Ie(re),de=m(ae,!0),G=d(ae,2),ne=m(G,!0);E((ie,Z)=>{ae.disabled=t(l),h(de,ie),G.disabled=t(l)||t(A).length===0,h(ne,Z)},[()=>a("Cancel"),()=>a("Assign ({count})",{count:t(A).length})]),ee("click",ae,()=>n(!1)),ee("click",G,()=>{R()}),v(q,re)};let K=c(()=>a("Best receiver"));yn(r,{get title(){return t(K)},width:"800px",testId:"best-receiver-dialog",get open(){return n()},set open(q){n(q)},buttons:P,children:(q,re)=>{var ae=OR(),de=Ie(ae),G=m(de,!0),ne=d(de,2),ie=w(ne),Z=w(ie),te=m(Z,!0),j=d(Z,2),U=d(ie,2),fe=m(U,!0),Te=d(ne,2);{var ce=he=>{var ve=NR(),ye=m(ve,!0);E(Y=>h(ye,Y),[()=>a("Every device is on the receiver that hears it best")]),v(he,ve)},Re=he=>{var ve=PR(),ye=w(ve),Y=w(ye),X=w(Y),L=d(w(X)),z=m(L,!0),le=d(L,2),me=m(le,!0),be=d(le,2),Ee=m(be,!0),se=d(be,2),W=m(se,!0),V=d(Y);je(V,21,()=>t(y),T=>T.address,(T,O)=>{var J=CR(),_e=w(J),Ce=w(_e),Fe=d(_e),We=m(Fe,!0),Ze=d(Fe),nt=m(Ze,!0),ke=d(Ze),we=m(ke,!0),H=d(ke),F=w(H);Na(F,{get value(){return t(O).configuredTx},labelOf:ze=>a(ze.label)});var Ne=d(H),Me=m(Ne,!0),Ke=d(Ne),pe=w(Ke);Na(pe,{get value(){return t(O).bestTx},labelOf:ze=>a(ze.label)});var De=d(Ke),Pe=m(De,!0),Ge=d(De),Le=w(Ge);{var Ye=ze=>{var Je=Zn();E(dt=>h(Je,dt),[()=>a("Below the margin")]),v(ze,Je)},Xe=ze=>{var Je=Zn();E(dt=>h(Je,dt),[()=>a("Not heard by the configured receiver")]),v(ze,Je)};$(Le,ze=>{t(O).verdict==="marginal"?ze(Ye):t(O).verdict==="unheard"&&ze(Xe,1)})}E((ze,Je,dt,pt,gt)=>{I(J,"data-testid",`best-receiver-row-${t(O).address}`),I(J,"data-verdict",t(O).verdict),Rr(Ce,ze),Ce.disabled=t(l),I(Ce,"aria-label",t(O).address),I(Ce,"data-testid",`best-receiver-check-${t(O).address}`),h(We,Je),h(nt,t(O).address),h(we,dt),h(Me,pt),I(De,"data-testid",`best-receiver-gain-${t(O).address}`),h(Pe,gt)},[()=>x(t(O)),()=>s.nameOf(t(O).address),()=>D(t(O).configured),()=>D(t(O).best),()=>t(O).gain===void 0?"—":`+${String(t(O).gain)} dB`]),ee("change",Ce,ze=>{u(o,{...t(o),[t(O).address]:ze.currentTarget.checked},!0)}),v(T,J)}),E((T,O,J,_e)=>{h(z,T),h(me,O),h(Ee,J),h(W,_e)},[()=>a("Name"),()=>a("Configured"),()=>a("Proposed"),()=>a("Gain")]),v(he,ve)};$(Te,he=>{t(y).length===0?he(ce):he(Re,-1)})}var xe=d(Te,2),ge=m(xe,!0),M=d(xe,2);{var ue=he=>{var ve=MR(),ye=m(ve,!0);E(Y=>h(ye,Y),[()=>a("{done} of {total} assigned",t(f))]),v(he,ve)};$(M,he=>{t(l)&&he(ue)})}E((he,ve,ye,Y)=>{h(G,he),h(te,ve),rn(j,t(i)),j.disabled=t(l),h(fe,ye),h(ge,Y)},[()=>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(S))]),ee("input",j,he=>C(he.currentTarget.value)),v(q,ae)},$$slots:{buttons:!0,default:!0}})}mt()}kt(["click","input","change"]);var FR=_('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="set-interface-confirm"> </button>',1),GR=_("<option> </option>"),UR=_('<span class="hmm-set-interface-name svelte-1s1hrfj"> </span>'),BR=_('<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>'),VR=_('<p class="hmm-set-interface-best-note svelte-1s1hrfj" data-testid="set-interface-best"> </p>'),HR=_('<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),zR=_('<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 jR(r,e){ht(e,!0);let n=B(e,"open",15,!1),s=B(e,"address",3,""),a=B(e,"preset",3,"");const i=jt(),o=i.i18n.t;let l=N(""),f=N(!1),p=N(!1);const g=c(()=>i.app.selectedInterface),b=c(()=>i.devices.index(t(g))?.get(s())),k=c(()=>i.radio.gateways(t(g))),y=c(()=>i.radio.bestGatewayFor(t(g),s())),S=c(()=>t(b)?.INTERFACE??"");lt(()=>{if(!n())return;const x=t(k).some(D=>D.ADDRESS===a());u(l,x?a():t(b)?.INTERFACE??t(k)[0]?.ADDRESS??"",!0),u(f,t(b)===void 0?!1:_d(t(b)),!0)});async function A(){u(p,!0);const x=await i.radio.setBidcosInterface(t(g),s(),t(l),t(f));x&&await i.devices.load(t(g),{refresh:!0}),u(p,!1),x&&n(!1)}yn(r,{title:"setBidcosInterface",width:"560px",testId:"set-interface-dialog",get open(){return n()},set open(D){n(D)},buttons:D=>{var C=FR(),R=Ie(C),P=m(R,!0),K=d(R,2),q=m(K,!0);E((re,ae)=>{h(P,re),K.disabled=t(p)||t(l)==="",h(q,ae)},[()=>o("Cancel"),()=>o("Apply")]),ee("click",R,()=>n(!1)),ee("click",K,()=>{A()}),v(D,C)},children:(D,C)=>{var R=zR(),P=Ie(R),K=w(P),q=d(K),re=m(q,!0),ae=d(P,2),de=w(ae),G=d(de),ne=m(G,!0),ie=d(ae,2),Z=w(ie),te=m(Z,!0),j=d(Z,2);je(j,21,()=>t(k),Re=>Re.ADDRESS,(Re,xe)=>{var ge=GR(),M=m(ge),ue={};E(()=>{h(M,`${t(xe).ADDRESS??""}
20
+ ${t(xe).DESCRIPTION??t(xe).TYPE??""}`),ue!==(ue=t(xe).ADDRESS)&&(ge.value=(ge.__value=ue)??"")}),v(Re,ge)}),Qt(j);var U=d(ie,2),fe=d(w(U),2),Te=d(U,2);{var ce=Re=>{var xe=HR(),ge=Ie(xe),M=w(ge),ue=w(M),he=d(w(ue)),ve=m(he,!0),ye=d(M);je(ye,21,()=>t(k),L=>L.ADDRESS,(L,z)=>{const le=c(()=>i.radio.pair(t(g),s(),t(z).ADDRESS));var me=BR();let be;var Ee=w(me),se=m(Ee,!0),W=d(Ee),V=w(W),T=m(V,!0),O=d(V,2);{var J=nt=>{var ke=UR(),we=m(ke,!0);E(H=>h(we,H),[()=>xa(t(z))]),v(nt,ke)},_e=c(()=>xa(t(z))!==t(z).ADDRESS);$(O,nt=>{t(_e)&&nt(J)})}var Ce=d(W),Fe=w(Ce);{let nt=c(()=>t(le)?.rx);Na(Fe,{get value(){return t(nt)},labelOf:ke=>o(ke.label)})}var We=d(Ce),Ze=w(We);{let nt=c(()=>t(le)?.tx),ke=c(()=>`set-interface-tx-${t(z).ADDRESS}`);Na(Ze,{get value(){return t(nt)},labelOf:we=>o(we.label),get testId(){return t(ke)}})}E(nt=>{I(me,"data-testid",`set-interface-row-${t(z).ADDRESS}`),I(me,"aria-current",t(S)===t(z).ADDRESS?"true":void 0),be=St(me,1,"svelte-1s1hrfj",null,be,{"hmm-set-interface-configured":t(S)===t(z).ADDRESS}),I(Ee,"title",nt),h(se,t(S)===t(z).ADDRESS?"◉":""),h(T,t(z).ADDRESS)},[()=>t(S)===t(z).ADDRESS?o("Configured"):void 0]),v(L,me)});var Y=d(ge,2);{var X=L=>{var z=VR(),le=m(z,!0);E(me=>h(le,me),[()=>o("Heard best by {address}",{address:t(y).address})]),v(L,z)};$(Y,L=>{t(y)&&L(X)})}E(L=>h(ve,L),[()=>o("Interface")]),v(Re,xe)};$(Te,Re=>{t(k).length>0&&Re(ce)})}E((Re,xe,ge)=>{h(K,`${Re??""} `),h(re,s()),h(de,`${xe??""}: `),h(ne,t(S)===""?"—":t(S)),h(te,ge)},[()=>i.nameOf(s()),()=>o("Configured"),()=>o("Interface")]),br(j,()=>t(l),Re=>u(l,Re)),mr(fe,()=>t(f),Re=>u(f,Re)),v(D,R)},$$slots:{buttons:!0,default:!0}}),mt()}kt(["click"]);var WR=_("<!> <!>",1),KR=_("<!> <!> <!>",1),YR=_('<button type="button"> </button>'),qR=_('<div class="hmm-page svelte-7f5yr6"><div class="hmm-radio-gateways svelte-7f5yr6"><!></div> <div class="hmm-page-grid svelte-7f5yr6"><!></div></div> <!> <!>',1);function $R(r,e){ht(e,!0);const n=jt(),s=n.i18n.t;let a=N(Be([])),i=N(Be([])),o=N(Be([])),l=N(!1),f=N(!1),p=N(""),g=N("");const b=c(()=>n.app.selectedInterface),k=c(()=>n.radio.gateways(t(b))),y=c(()=>n.interfaces.typeOf(t(b)).startsWith("BidCos"));function S(U,fe=""){u(p,U,!0),u(g,fe,!0),u(l,!0)}const A=c(()=>n.devices.devices(t(b))),x=c(()=>t(i).length===1?t(i)[0]??"":""),D=[{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:U=>U.CONNECTED===!0?"✔":"✕"},{key:"DEFAULT",label:"DEFAULT",width:90,align:"center",value:U=>U.DEFAULT===!0?"✔":""},{key:"DUTY_CYCLE",label:"DUTY_CYCLE",width:100,align:"right",value:U=>U.DUTY_CYCLE===void 0?"":`${U.DUTY_CYCLE} %`},{key:"CARRIER_SENSE_LEVEL",label:"CARRIER_SENSE_LEVEL",align:"right"}],C=c(()=>[{key:"icon",label:"",width:ui,fixed:!0,sortable:!1,filterable:!1,align:"center",value:()=>""},{key:"name",label:s("Name"),width:180,copy:"name",value:U=>n.nameOf(U.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(y)},{key:"RF_ADDRESS",label:"RF_ADDRESS",width:100,align:"right",value:U=>U.RF_ADDRESS===void 0?"":U.RF_ADDRESS.toString(16).toUpperCase()},{key:"ROAMING",label:"ROAMING",width:90,align:"center",hidden:!t(y),value:U=>_d(U)?"✔":""},{key:"unreach",label:s("Unreach"),width:90,align:"right",filterable:!1,value:U=>{const fe=n.unreach.countOf(t(b),U.ADDRESS);return fe===0?"":fe}},...t(k).flatMap(U=>[{key:`rx:${U.ADDRESS}`,label:"← dBm",width:90,align:"right",filterable:!1,value:fe=>n.radio.pair(t(b),fe.ADDRESS,U.ADDRESS)?.rx??""},{key:`tx:${U.ADDRESS}`,label:"→ dBm",width:90,align:"right",filterable:!1,value:fe=>n.radio.pair(t(b),fe.ADDRESS,U.ADDRESS)?.tx??""},{key:`set:${U.ADDRESS}`,label:"",hidden:!t(y),width:py,fixed:!0,align:"center",sortable:!1,filterable:!1,value:fe=>fe.INTERFACE===U.ADDRESS?"◉":""}])]),R=c(()=>t(k).map(U=>({key:U.ADDRESS,label:U.ADDRESS,sublabel:xa(U)===U.ADDRESS?void 0:`(${xa(U)})`,columns:t(y)?[`rx:${U.ADDRESS}`,`tx:${U.ADDRESS}`,`set:${U.ADDRESS}`]:[`rx:${U.ADDRESS}`,`tx:${U.ADDRESS}`]}))),P=c(()=>[{key:"name",label:s("Name"),width:180,copy:"name",value:U=>n.nameOf(U.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 K(U){const fe=n.devices.index(t(b));return n.radio.peersOf(t(b),U.ADDRESS).map(Te=>fe?.get(Te)??{ADDRESS:Te,TYPE:"",PARENT:U.ADDRESS}).map(Te=>({...Te,PARENT:U.ADDRESS}))}function q(U){return n.devices.index(t(b))?.get(U)?.ADDRESS??U}async function re(){await Promise.all([n.radio.load(t(b)),n.devices.load(t(b),{refresh:!0}),n.interfaces.load(),n.unreach.load()])}lt(()=>{const U=t(b);U!==""&&n.radio.ensureMatrix(U)}),lt(()=>{n.unreach.counters.length===0&&n.unreach.load()});var ae=qR(),de=Ie(ae),G=w(de),ne=w(G);{let U=c(()=>s("Interfaces")),fe=c(()=>s("Filter")),Te=c(()=>s("No data"));zs(ne,{get rows(){return t(k)},get columns(){return D},getId:ce=>ce.ADDRESS,height:110,columnFilterRow:!1,get caption(){return t(U)},get filterLabel(){return t(fe)},get emptyText(){return t(Te)},tableId:"radio-interfaces",testId:"radio-gateways",get selected(){return t(a)},set selected(ce){u(a,ce,!0)}})}var ie=d(G,2),Z=w(ie);{const U=he=>{var ve=KR(),ye=Ie(ve);{let z=c(()=>s("Refresh")),le=c(()=>n.radio.loading||n.devices.isLoading(t(b)));Ct(ye,{get title(){return t(z)},icon:"⟳",get busy(){return t(le)},testId:"radio-refresh",onclick:()=>{re()}})}var Y=d(ye,2);{var X=z=>{var le=WR(),me=Ie(le);{let Ee=c(()=>t(x)===""),se=c(()=>s("Select a device"));Ct(me,{title:"setBidcosInterface",icon:"⇄",get disabled(){return t(Ee)},get reason(){return t(se)},testId:"radio-set-interface",onclick:()=>S(t(x))})}var be=d(me,2);{let Ee=c(()=>s("Assign the best receiver")),se=c(()=>t(k).length<2),W=c(()=>s("Only one interface"));Ct(be,{get title(){return t(Ee)},icon:"⇶",get disabled(){return t(se)},get reason(){return t(W)},testId:"radio-best-receivers",onclick:()=>u(f,!0)})}v(z,le)};$(Y,z=>{t(y)&&z(X)})}var L=d(Y,2);{let z=c(()=>s("Reset the unreach counters")),le=c(()=>n.unreach.of(t(b)).length===0),me=c(()=>s("No data"));Ct(L,{get title(){return t(z)},icon:"⟲",get disabled(){return t(le)},get reason(){return t(me)},testId:"radio-reset-unreach",onclick:()=>{n.unreach.reset(t(b))}})}v(he,ve)},fe=(he,ve=zn,ye=zn,Y=zn)=>{var X=wt(),L=Ie(X);{var z=V=>{{let T=c(()=>n.host.deviceImageUrl(ve().TYPE));fi(V,{get deviceType(){return ve().TYPE},get src(){return t(T)}})}},le=V=>{const T=c(()=>n.radio.pair(t(b),q(Y().rootId),ve().ADDRESS));{let O=c(()=>ye().key==="rx"?t(T)?.rx:t(T)?.tx),J=c(()=>`rssi-${Y().rootId}-${ve().ADDRESS}-${ye().key}`);Na(V,{get value(){return t(O)},labelOf:_e=>s(_e.label),get testId(){return t(J)}})}},me=V=>{const T=c(()=>ye().key.slice(4)),O=c(()=>ve().INTERFACE===t(T));var J=YR();let _e;var Ce=m(J,!0);E(Fe=>{_e=St(J,1,"hmm-receiver-mark svelte-7f5yr6",null,_e,{"hmm-receiver-configured":t(O)}),I(J,"aria-pressed",t(O)),I(J,"title",Fe),I(J,"data-testid",`receiver-${ve().ADDRESS}-${t(T)}`),h(Ce,t(O)?"◉":"○")},[()=>t(O)?`${s("Configured")}: ${t(T)}`:s("Use {interface} as receiver",{interface:t(T)})]),ee("click",J,Fe=>{Fe.stopPropagation(),S(ve().ADDRESS,t(T))}),v(V,J)},be=c(()=>ye().key.startsWith("set:")&&Y().depth===0),Ee=V=>{const T=c(()=>ye().key.slice(3)),O=c(()=>n.radio.pair(t(b),ve().ADDRESS,t(T)));{let J=c(()=>ye().key.startsWith("rx:")?t(O)?.rx:t(O)?.tx),_e=c(()=>`rssi-${ve().ADDRESS}-${t(T)}-${ye().key.slice(0,2)}`);Na(V,{get value(){return t(J)},labelOf:Ce=>s(Ce.label),get testId(){return t(_e)}})}},se=c(()=>ye().key.startsWith("rx:")||ye().key.startsWith("tx:")),W=V=>{var T=Zn();E(O=>h(T,O),[()=>ye().value?ye().value(ve())??"":ve()[ye().key]??""]),v(V,T)};$(L,V=>{ye().key==="icon"?V(z):Y().depth>0&&(ye().key==="rx"||ye().key==="tx")?V(le,1):t(be)?V(me,2):t(se)?V(Ee,3):V(W,-1)})}v(he,X)};let Te=c(()=>s("RSSI")),ce=c(()=>s("Filter")),Re=c(()=>s("No data")),xe=c(()=>s("No row matches the filter")),ge=c(()=>s("Clear filter")),M=c(()=>s("RSSI")),ue=c(()=>s("{count} devices",{},t(A).length));zs(Z,{get rows(){return t(A)},get columns(){return t(C)},get columnGroups(){return t(R)},get subColumns(){return t(P)},get scope(){return t(b)},getId:he=>he.ADDRESS,subRows:K,get caption(){return t(Te)},get filterLabel(){return t(ce)},get emptyText(){return t(Re)},get noMatchText(){return t(xe)},get clearFilterLabel(){return t(ge)},showingText:(he,ve)=>s("Showing {shown} of {total}",{shown:he,total:ve}),onactivate:he=>S(he.ADDRESS),get toolbarLabel(){return t(M)},get countText(){return t(ue)},tableId:"radio",subTableId:"radio-peers",testId:"radio-table",get selected(){return t(i)},set selected(he){u(i,he,!0)},get expanded(){return t(o)},set expanded(he){u(o,he,!0)},toolbar:U,cell:fe,$$slots:{toolbar:!0,cell:!0}})}var te=d(de,2);jR(te,{get address(){return t(p)},get preset(){return t(g)},get open(){return t(l)},set open(U){u(l,U,!0)}});var j=d(te,2);LR(j,{get open(){return t(f)},set open(U){u(f,U,!0)}}),v(r,ae),mt()}kt(["click"]);function XR(r,e,n=[]){const s=new Map;for(const g of r)s.set(g.interfaceName,(s.get(g.interfaceName)??0)+1);const a=[...new Set([...n,...s.keys()])],i=s.get(e)??0,o=a.filter(g=>g!==e&&(s.get(g)??0)>0).map(g=>({interfaceName:g,count:s.get(g)??0})),l=a.indexOf(e),p=[...a.slice(l+1),...a.slice(0,Math.max(l,0))].find(g=>o.some(b=>b.interfaceName===g));return{own:i,total:r.length,others:o,next:p}}var QR=_('<button type="button" class="hmm-total-button svelte-u6ol56" data-testid="messages-total"> </button>'),ZR=_("<!> <!> <!>",1),nl=_("<span> </span>"),JR=_('<button type="button" class="hmm-inline-button svelte-u6ol56"> </button> <span hidden=""> </span>',1),ex=_('<div class="hmm-page svelte-u6ol56"><div class="hmm-page-grid svelte-u6ol56"><!></div></div>');function tx(r,e){ht(e,!0);const n=jt(),s=n.i18n.t;let a=N(Be([])),i=N(!1);const o=c(()=>n.app.selectedInterface),l=c(()=>n.interfaces.typeOf(t(o)).startsWith("BidCos")),f=c(()=>!t(l)&&li(t(o),n.interfaces.typeOf(t(o)))),p=c(()=>n.serviceMessages.of(t(o))),g=c(()=>n.serviceMessages.acknowledgeable(t(o))),b=c(()=>t(p).filter(G=>t(a).includes(A(G)))),k=c(()=>t(b).filter(G=>ao(G.datapoint))),y=c(()=>XR(n.serviceMessages.messages,t(o),n.interfaces.states.map(G=>G.name))),S=c(()=>t(y).next===void 0?"":s("Also on this box: {list}. Click to switch to {next}.",{list:t(y).others.map(G=>`${G.interfaceName} (${String(G.count)})`).join(", "),next:t(y).next}));function A(G){return`${G.address}/${G.datapoint}`}function x(G,ne){return ne?s("The CCU reports {datapoint} for this channel again: lifts the suppression (suppressServiceMessages with suppress=false).",{datapoint:G.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:G.datapoint})}function D(G){return n.devices.index(t(o))?.get(Ra(G))?.TYPE??""}lt(()=>{t(f)&&t(p).length>0&&n.serviceMessages.loadSuppressed(t(o))}),lt(()=>{t(p).some(G=>typeof G.value=="number")&&n.serviceMessages.loadDescriptions(t(o))});function C(G){const ne=n.serviceMessages.valueName(G);if(ne===void 0)return to(G.value);const ie=n.devices.index(t(o))?.get(G.address)?.TYPE??"";return n.meta.valueLabel(G.datapoint,ne,ie)}function R(G){const ne=n.serviceMessages.valueName(G);return ne===void 0?void 0:`${ne} (${to(G.value)})`}async function P(G,ne){u(i,!0);const ie=await n.serviceMessages.suppress(t(o),G.address,G.datapoint,ne);u(i,!1),ie&&n.notices.push("info",`suppressServiceMessages ${G.address} ${G.datapoint} = ${ne?"true":"false"}`)}const K=c(()=>[{key:"icon",label:"",width:ui,fixed:!0,sortable:!1,filterable:!1,align:"center",value:()=>""},{key:"name",label:s("Name"),width:220,copy:"name",value:G=>n.nameOf(G.address)},{key:"address",label:"ADDRESS",width:160,mono:!0,copy:"address"},{key:"device",label:`${s("Device")} ADDRESS`,width:140,mono:!0,value:G=>Ra(G.address)},{key:"datapoint",label:s("Message"),width:180},{key:"value",label:s("Value"),width:160,value:C},{key:"explanation",label:"",sortable:!1,value:G=>{const ne=Mh(G.datapoint,!t(l));return ne===void 0?"":s(ne)}},{key:"since",label:s("Since"),width:170,value:G=>Xa(G.since)},...t(f)?[{key:"suppress",label:"",width:Jc,minWidth:Jc,keepMinWidth:!0,sortable:!1,filterable:!1,value:G=>n.serviceMessages.isSuppressed(G)?s("suppressed"):""}]:[]]);async function q(G){u(i,!0);const ne=await n.serviceMessages.acknowledgeMany(G);u(i,!1),n.notices.push("info",s("{count} service messages",{},ne))}var re=ex(),ae=w(re),de=w(ae);{const G=Te=>{var ce=wt(),Re=Ie(ce);{var xe=ge=>{const M=c(()=>t(y).next);ni(ge,{get text(){return t(S)},testId:"messages-total-tooltip",children:(ue,he)=>{var ve=QR(),ye=m(ve,!0);E(Y=>h(ye,Y),[()=>s("{count} of {total} on this box",{total:t(y).total},t(y).own)]),ee("click",ve,()=>{n.selectInterface(t(M))}),v(ue,ve)},$$slots:{default:!0}})};$(Re,ge=>{t(y).next!==void 0&&ge(xe)})}v(Te,ce)},ne=Te=>{var ce=ZR(),Re=Ie(ce);{let M=c(()=>s("Refresh"));Ct(Re,{get title(){return t(M)},icon:"⟳",get busy(){return n.serviceMessages.loading},testId:"messages-refresh",onclick:()=>{n.serviceMessages.refresh(t(o))}})}var xe=d(Re,2);{let M=c(()=>s("Acknowledge service messages")),ue=c(()=>t(i)||t(k).length===0),he=c(()=>s("Only STICKY_UNREACH and SABOTAGE can be acknowledged"));Ct(xe,{get title(){return t(M)},icon:"✔",get disabled(){return t(ue)},get reason(){return t(he)},testId:"messages-ack",onclick:()=>{q(t(k))}})}var ge=d(xe,2);{let M=c(()=>s("Acknowledge all service messages")),ue=c(()=>t(i)||t(g).length===0),he=c(()=>s("Only STICKY_UNREACH and SABOTAGE can be acknowledged"));Ct(ge,{get title(){return t(M)},icon:"✔✔",get disabled(){return t(ue)},get reason(){return t(he)},testId:"messages-ack-all",onclick:()=>{q(t(g))}})}v(Te,ce)},ie=(Te,ce=zn,Re=zn)=>{var xe=wt(),ge=Ie(xe);{var M=X=>{{let L=c(()=>D(ce().address)),z=c(()=>n.host.deviceImageUrl(D(ce().address)));fi(X,{get deviceType(){return t(L)},get src(){return t(z)}})}},ue=X=>{var L=nl();let z;var le=m(L,!0);E((me,be)=>{z=St(L,1,"hmm-msg-name svelte-u6ol56",null,z,{"hmm-msg-ackable":me,"hmm-msg-rega":ce().source==="rega"}),I(L,"title",be),I(L,"data-listed-by",ce().source??"interface"),I(L,"data-testid",`message-${ce().address}-${ce().datapoint}`),h(le,ce().datapoint)},[()=>ao(ce().datapoint),()=>ce().source==="rega"?s("Listed by the CCU only; the interface no longer reports it"):void 0]),v(X,L)},he=X=>{var L=nl(),z=m(L,!0);E((le,me)=>{I(L,"title",le),I(L,"data-testid",`message-value-${ce().address}-${ce().datapoint}`),h(z,me)},[()=>R(ce()),()=>C(ce())]),v(X,L)},ve=X=>{var L=nl(),z=m(L,!0);E((le,me)=>{I(L,"title",le),I(L,"data-testid",`message-since-${ce().address}-${ce().datapoint}`),I(L,"data-source",ce().sinceSource??"local"),h(z,me)},[()=>ce().sinceSource==="rega"?s("First reported, from the CCU"):ce().sinceSource==="system"?s("Last changed, from the openccu-lite system"):s("First seen by the Homematic Manager"),()=>Xa(ce().since)]),v(X,L)},ye=X=>{const L=c(()=>n.serviceMessages.isSuppressed(ce())),z=c(()=>x(ce(),t(L))),le=c(()=>`suppress-help-${ce().address}-${ce().datapoint}`);{let me=c(()=>`suppress-tooltip-${ce().address}-${ce().datapoint}`);ni(X,{get text(){return t(z)},get testId(){return t(me)},children:(be,Ee)=>{var se=JR(),W=Ie(se),V=m(W,!0),T=d(W,2),O=m(T,!0);E(J=>{W.disabled=t(i),I(W,"aria-describedby",t(le)),I(W,"data-testid",`suppress-${ce().address}-${ce().datapoint}`),h(V,J),I(T,"id",t(le)),h(O,t(z))},[()=>t(L)?s("Unsuppress"):s("Suppress")]),ee("click",W,J=>{J.stopPropagation(),P(ce(),!t(L))}),v(be,se)},$$slots:{default:!0}})}},Y=X=>{var L=Zn();E(z=>h(L,z),[()=>Re().value?Re().value(ce())??"":ce()[Re().key]??""]),v(X,L)};$(ge,X=>{Re().key==="icon"?X(M):Re().key==="datapoint"?X(ue,1):Re().key==="value"?X(he,2):Re().key==="since"?X(ve,3):Re().key==="suppress"?X(ye,4):X(Y,-1)})}v(Te,xe)};let Z=c(()=>s("Service messages")),te=c(()=>s("Filter")),j=c(()=>s("No data")),U=c(()=>s("Service messages")),fe=c(()=>t(y).next===void 0?s("{count} service messages",{},t(p).length):void 0);zs(de,{get rows(){return t(p)},get scope(){return t(o)},get columns(){return t(K)},getId:A,get caption(){return t(Z)},get filterLabel(){return t(te)},get emptyText(){return t(j)},get toolbarLabel(){return t(U)},get countText(){return t(fe)},tableId:"messages",testId:"messages-table",get selected(){return t(a)},set selected(Te){u(a,Te,!0)},status:G,toolbar:ne,cell:ie,$$slots:{status:!0,toolbar:!0,cell:!0}})}v(r,re),mt()}kt(["click"]);var nx=_('<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),rx=_('<button type="button" class="hmm-button hmm-header-changes" data-testid="change-set-open"> </button>'),sx=_('<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>'),ax=_('<p class="hmm-empty svelte-1n46o8q"> </p>'),ix=_('<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 ox(r,e){ht(e,!0);const n="https://github.com/hobbyquaker/homematic-manager",s=`${n}/releases`;let a=B(e,"stores",7);zg(gr(()=>a())),_p({columnWidths:gr(()=>a().app.columnWidths),t:(M,ue)=>a().i18n.t(M,ue)});let i=N(!1);const o=c(()=>a().i18n.t),l=c(()=>a().app);function f(M){a().console.recall(M),t(l).selectedInterface!==M.interfaceName&&a().selectInterface(M.interfaceName),t(l).setTab("console")}const p={local:()=>t(o)("This profile"),occulite:()=>"occulited",rega:()=>"ReGaHSS"},g={devices:"Devices",groups:"Groups",links:"Links",rssi:"RSSI",console:"RPC Console",messages:"Service messages",events:"Events",rooms:"Rooms",functions:"Functions",metadata:"Metadata"},b=c(()=>{const M=a().taxonomy.state;if(M===void 0)return;const ue=p[M.provider]();return{id:vd,label:ue,mark:jp(M),title:Wp(M,{label:ue,reachable:t(o)("Reachable"),unreachable:t(o)("Unreachable"),readOnly:t(o)("Read-only"),writable:t(o)("Writable"),detail:he=>t(o)("revision {revision}, {count} objects",{revision:he.revision,count:he.objects}),certificate:he=>t(o)("The certificate of {url} is not trusted ({code})",{url:he.url,code:he.code})}),selectable:M.reachable,provider:M.provider}}),k=c(()=>a().tabs.map(M=>({id:M,label:t(o)(g[M]),...M==="messages"?{badge:a().serviceMessages.countOf(t(l).selectedInterface)}:{}}))),y=c(()=>Object.fromEntries(a().interfaces.states.map(M=>{const ue=a().devices.index(M.name),he=a().radio.gateways(M.name).map(ve=>ve.DUTY_CYCLE).filter(ve=>typeof ve=="number");return[M.name,{...ue===void 0?{}:{devices:ue.devices().length},...he.length===0?{}:{dutyCycle:Math.max(...he)}}]})));lt(()=>{document.documentElement.lang=a().i18n.language});const S=c(()=>a().shell.theme??t(l).theme);lt(()=>{const M=document.documentElement;t(S)==="system"?M.removeAttribute("data-theme"):M.setAttribute("data-theme",t(S)),a().host.setTheme(t(S))}),lt(()=>a().host.onMenuAction(()=>{t(l).configDialogOpen=!0}));var A=ix(),x=w(A),D=w(x);{let M=c(()=>t(o)("Select an interface")),ue=c(()=>t(o)("Interfaces")),he=c(()=>t(o)("Connected")),ve=c(()=>t(o)("Not connected")),ye=c(()=>t(o)("Not present")),Y=c(()=>t(o)("Not answering")),X=c(()=>t(o)("Retry now")),L=c(()=>t(o)("Subscribing")),z=c(()=>t(o)("Waiting")),le=c(()=>t(o)("Reconnecting")),me=c(()=>t(o)("All interfaces are connected")),be=c(()=>t(o)("Not every interface is connected")),Ee=c(()=>t(o)("Port")),se=c(()=>t(l).config?.publishCallbackPorts===!0),W=c(()=>t(o)("Publish this port unchanged")),V=c(()=>t(o)("Use automatic"));Vp(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(y)},get label(){return t(M)},get listLabel(){return t(ue)},get connectedText(){return t(he)},get notConnectedText(){return t(ve)},get notPresentText(){return t(ye)},get notAnsweringText(){return t(Y)},get retryText(){return t(X)},onretry:T=>{for(const O of T)a().interfaces.reconnect(O)},get subscribingText(){return t(L)},get waitingText(){return t(z)},get reconnectingText(){return t(le)},get allConnectedText(){return t(me)},get someNotConnectedText(){return t(be)},get portLabel(){return t(Ee)},devicesLabel:T=>t(o)("{count} devices",{count:T},T),dutyCycleLabel:T=>t(o)("Duty cycle {value} %",{value:T}),get publishCallbackPorts(){return t(se)},callbackPortInUseLabel:T=>t(o)("Callback port {port} is in use",{port:String(T)}),callbackPortFailedLabel:T=>t(o)("Callback port {port} cannot be opened",{port:String(T)}),get publishPortText(){return t(W)},callbackWarningLabel:T=>T.reason==="notLocal"?t(o)("The callback address {address} is not an address of this machine; {auto} is used instead",{address:T.address,auto:T.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:T.address}),get useAutomaticText(){return t(V)},onuseautomatic:()=>{t(l).useAutomaticCallback().then(T=>T?a().start():void 0)},testId:"interface-select",onselect:T=>{a().selectInterface(T)},get store(){return t(b)},storeTestId:"meta-indicator"})}var C=d(D,2);{let M=c(()=>t(o)("Devices"));kg(C,{get tabs(){return t(k)},get active(){return t(l).tab},get label(){return t(M)},onselect:ue=>t(l).setTab(ue)})}var R=d(C,2),P=w(R);{var K=M=>{var ue=nx(),he=Ie(ue),ve=m(he,!0),ye=d(he,2),Y=m(ye,!0);E((X,L)=>{I(he,"title",X),h(ve,t(l).session.user),h(Y,L)},[()=>t(o)("Logged in as {user}",{user:t(l).session.user}),()=>t(o)("Log out")]),v(M,ue)};$(P,M=>{t(l).session&&!a().shell.embedded&&M(K)})}var q=d(P,2);{var re=M=>{var ue=rx(),he=m(ue);E(ve=>h(he,`${ve??""} (${a().changeSet.count??""})`),[()=>t(o)("Pending changes")]),ee("click",ue,()=>u(i,!0)),v(M,ue)};$(q,M=>{a().changeSet.count>0&&M(re)})}var ae=d(q,2);{let M=c(()=>t(o)("RPC log"));Ct(ae,{get title(){return t(M)},icon:"≣",get pressed(){return t(l).rpcLogOpen},testId:"rpclog-toggle",onclick:()=>t(l).rpcLogOpen=!t(l).rpcLogOpen})}var de=d(ae,2);{var G=M=>{Ag(M,{get theme(){return t(l).theme},labelFor:ue=>t(o)(`Theme: ${ue}`),testId:"theme-switch",onclick:()=>t(l).cycleTheme()})};$(de,M=>{a().shell.embedded||M(G)})}var ne=d(de,2);{let M=c(()=>t(o)("Settings"));Ct(ne,{get title(){return t(M)},icon:"⚙",testId:"settings-button",onclick:()=>t(l).configDialogOpen=!0})}var ie=d(ne,2);{let M=c(()=>t(o)("Homematic Manager on GitHub"));kp(ie,{href:n,get label(){return t(M)},openExternal:ue=>a().host.openExternal(ue),testId:"github-link"})}var Z=d(x,2);{let M=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")}));Fg(Z,{get state(){return a().host.updateNotice},get labels(){return t(M)},releasesUrl:s,openExternal:ue=>a().host.openExternal(ue),testId:"update-notice",ondownload:()=>{a().host.downloadUpdate()},oninstall:()=>{a().host.installUpdateOnQuit()},ondismiss:()=>{a().host.dismissUpdate()}})}var te=d(Z,2),j=w(te),U=w(j);tp(U,()=>`${t(l).selectedInterface}/${t(l).tab}`,M=>{var ue=wt(),he=Ie(ue);Pf(he,{onerror:ye=>a().notices.fromError(ye,`page ${t(l).tab}`),failed:(ye,Y=zn,X=zn)=>{var L=sx(),z=w(L),le=m(z,!0),me=d(z,2),be=m(me,!0),Ee=d(me,2),se=m(Ee,!0);E((W,V,T)=>{h(le,W),h(be,V),h(se,T)},[()=>t(o)("This tab could not be drawn."),()=>Y()instanceof Error?Y().message:String(Y()),()=>t(o)("Try again")]),ee("click",Ee,function(...W){X()?.apply(this,W)}),v(ye,L)}},ye=>{var Y=wt(),X=Ie(Y);{var L=T=>{var O=ax(),J=m(O,!0);E(_e=>h(J,_e),[()=>t(o)("Select an interface")]),v(T,O)},z=T=>{var O=wt(),J=Ie(O);{var _e=We=>{tl(We,{enumId:"room"})},Ce=We=>{tl(We,{enumId:"function"})},Fe=We=>{tl(We,{})};$(J,We=>{t(l).tab==="rooms"?We(_e):t(l).tab==="functions"?We(Ce,1):We(Fe,-1)})}v(T,O)},le=T=>{bT(T,{})},me=T=>{YT(T,{})},be=T=>{rR(T,{})},Ee=T=>{$R(T,{})},se=T=>{ZE(T,{})},W=T=>{tx(T,{})},V=T=>{ST(T,{})};$(X,T=>{t(l).selectedInterface===""?T(L):t(l).storeSelected?T(z,1):t(l).tab==="devices"?T(le,2):t(l).tab==="groups"?T(me,3):t(l).tab==="links"?T(be,4):t(l).tab==="rssi"?T(Ee,5):t(l).tab==="console"?T(se,6):t(l).tab==="messages"?T(W,7):T(V,-1)})}v(ye,Y)}),v(M,ue)});var fe=d(te,2);{let M=c(()=>t(o)("RPC log")),ue=c(()=>t(o)("No RPC calls yet")),he=c(()=>t(o)("in progress")),ve=c(()=>t(o)("Clear")),ye=c(()=>t(o)("Close")),Y=c(()=>t(o)("Resize the RPC log")),X=c(()=>t(o)("Hide background calls")),L=c(()=>t(o)("Open in console")),z=c(()=>({console:t(o)("Origin: console"),ui:t(o)("Origin: UI"),background:t(o)("Origin: background")}));fg(fe,{get entries(){return a().rpcLog.visible},get pending(){return a().rpcLog.pending},get title(){return t(M)},get emptyText(){return t(ue)},get pendingText(){return t(he)},get clearLabel(){return t(ve)},get closeLabel(){return t(ye)},get resizeLabel(){return t(Y)},get hideBackgroundLabel(){return t(X)},get openLabel(){return t(L)},get originLabels(){return t(z)},testId:"rpclog",onclear:()=>{a().rpcLog.clear()},onopen:f,get open(){return t(l).rpcLogOpen},set open(le){t(l).rpcLogOpen=le},get hideBackground(){return a().rpcLog.hideBackground},set hideBackground(le){a().rpcLog.hideBackground=le}})}var Te=d(fe,2);{let M=c(()=>t(o)("Dismiss")),ue=c(()=>t(o)("Show fewer"));Jp(Te,{get notices(){return a().notices.items},get dismissLabel(){return t(M)},moreLabel:he=>t(o)("{count} more",{},he),get lessLabel(){return t(ue)},testId:"notices",ondismiss:he=>a().notices.dismiss(he)})}var ce=d(Te,2);{let M=c(()=>t(o)("RPC execution")),ue=c(()=>t(o)("Cancel"));jf(ce,{get progress(){return a().rpcLog.progress},get title(){return t(M)},get cancelLabel(){return t(ue)},testId:"rpc-progress",oncancel:()=>{a().rpcLog.cancel()}})}var Re=d(ce,2);SE(Re,{get open(){return t(l).configDialogOpen},set open(M){t(l).configDialogOpen=M}});var xe=d(Re,2);sb(xe,{get open(){return t(i)},set open(M){u(i,M,!0)}});var ge=d(xe,2);{let M=c(()=>t(o)("Loading Homematic Manager..."));zp(ge,{get visible(){return t(l).loading},get text(){return t(M)},testId:"loader"})}E(()=>{I(j,"id",`panel-${t(l).tab}`),I(j,"aria-labelledby",`tab-${t(l).tab}`)}),v(r,A),mt()}kt(["click"]);const Xh="hmm.columnWidths";function lx(r){const e=r.trim().toLowerCase().replace(/[^a-z0-9._-]/g,"_");return e===""?"unconfigured":e}const dx=Object.freeze({});function xu(r){return r!==null&&typeof r=="object"&&!Array.isArray(r)}function cx(r){let e;try{const s=r?.getItem(Xh);e=s==null?void 0:JSON.parse(s)}catch{return{}}const n={};if(!xu(e))return n;for(const[s,a]of Object.entries(e)){if(!xu(a))continue;const i={};for(const[o,l]of Object.entries(a)){const f=hy(l);Object.keys(f).length>0&&(i[o]=f)}Object.keys(i).length>0&&(n[s]=i)}return n}class ux{#e=N({});#n;#t;constructor(e,n){this.#n=e,this.#t=n,u(this.#e,cx(e))}widths(e){return t(this.#e)[this.#t()]?.[e]??dx}set(e,n,s){const a=this.#t(),i=t(this.#e)[a]??{},o=i[e]??{},l=ci(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(Xh,JSON.stringify(t(this.#e)))}catch{}}}const rl=["system","light","dark"],Iu="hmm.theme",sl="hmm.language";function fx(){return typeof window>"u"?{hash:""}:window.location}function hx(r){return typeof window>"u"?()=>{}:(window.addEventListener("hashchange",r),()=>{window.removeEventListener("hashchange",r)})}function mx(){try{return typeof localStorage>"u"?void 0:localStorage}catch{return}}class vx{#e=N(void 0);get config(){return t(this.#e)}set config(e){u(this.#e,e,!0)}#n=N(!0);get loading(){return t(this.#n)}set loading(e){u(this.#n,e,!0)}#t=N(!1);get connected(){return t(this.#t)}set connected(e){u(this.#t,e,!0)}#s=N("");get saveError(){return t(this.#s)}set saveError(e){u(this.#s,e,!0)}#a=N(void 0);get callbackAddresses(){return t(this.#a)}set callbackAddresses(e){u(this.#a,e,!0)}#r=0;#i=N(void 0);get pairing(){return t(this.#i)}set pairing(e){u(this.#i,e,!0)}#l=N("");get selectedInterface(){return t(this.#l)}set selectedInterface(e){u(this.#l,e,!0)}#o=N(Be(Ui));get tab(){return t(this.#o)}set tab(e){u(this.#o,e,!0)}#d=N(Be(Ui));get interfaceTab(){return t(this.#d)}set interfaceTab(e){u(this.#d,e,!0)}#c=N("");get linksFilter(){return t(this.#c)}set linksFilter(e){u(this.#c,e,!0)}#u=N("en");get language(){return t(this.#u)}set language(e){u(this.#u,e,!0)}#f=N("auto");get languageChoice(){return t(this.#f)}set languageChoice(e){u(this.#f,e,!0)}#g=N("system");get theme(){return t(this.#g)}set theme(e){u(this.#g,e,!0)}#h=N(null);get session(){return t(this.#h)}set session(e){u(this.#h,e,!0)}#v=N(!1);get configDialogOpen(){return t(this.#v)}set configDialogOpen(e){u(this.#v,e,!0)}#_=N(!1);get rpcLogOpen(){return t(this.#_)}set rpcLogOpen(e){u(this.#_,e,!0)}columnWidths;#m;#b;#y;#p;#S;#E=[];#k=[];constructor(e,n,s={}){this.#m=e,this.#b=n,this.#y=s.location??fx(),this.#p=s.storage===void 0?mx():s.storage,this.#S=s.languages,this.columnWidths=new ux(this.#p,()=>lx(this.config?.connection.host??""));const a=this.#p?.getItem(Iu);(a==="light"||a==="dark"||a==="system")&&(this.theme=a);const i=this.#p?.getItem(sl);(i==="de"||i==="en"||i==="auto")&&(this.languageChoice=i),this.#w(),this.readRoute(),this.connected=e.connected,this.#E.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??hx)(()=>{const o=this.selectedInterface;if(this.readRoute(),this.selectedInterface!==o)for(const l of[...this.#k])l(o)}))}onInterfaceRouted(e){return this.#k.push(e),()=>{const n=this.#k.indexOf(e);n>=0&&this.#k.splice(n,1)}}readRoute(){const e=Kg(this.#y.hash);e.interfaceName!==""&&(this.selectedInterface=e.interfaceName),ri(e.tab)?this.tab=this.storeSelected?e.tab:Ui:(this.tab=e.tab,this.interfaceTab=e.tab)}writeRoute(){const e=Yg(this.selectedInterface,this.tab);this.#y.hash!==e&&(this.#y.hash=e)}setTab(e){this.tab=e,ri(e)||(this.interfaceTab=e),this.writeRoute()}get storeSelected(){return $f(this.selectedInterface)}setInterface(e){this.selectedInterface=e,this.writeRoute()}setLanguage(e){this.languageChoice=e,this.#w(),this.#p?.setItem(sl,e)}#w(){this.language=E1(this.languageChoice,this.#S)}setTheme(e){this.theme=e,this.#p?.setItem(Iu,e)}cycleTheme(){const e=rl.indexOf(this.theme);this.setTheme(rl[(e+1)%rl.length]??"system")}get configuredInterfaces(){return this.config?.connection.interfaces??[]}get host(){return this.config?.connection.host??""}async load(){try{const e=await this.#m.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.#m.request("session.info")}catch{this.session=null}}async save(e,n){this.saveError="";try{return this.applyConfig(await(n===void 0?this.#m.request("config.set",e):this.#m.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.#m.request("config.callbackAddresses"):this.#m.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=Mi(e);return this.save({...n,callback:{...n.callback,ip:""}})}async testConnection(e){try{return await this.#m.request("connection.test",e)}catch(n){this.#b.fromError(n,"connection.test");return}}async pair(e){this.pairing={state:"requesting"};try{await this.#m.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.#m.request("connection.pairCancel")}catch(e){this.#b.fromError(e,"connection.pairCancel")}this.pairing=void 0}async discover(){try{const e=await this.#m.request("config.discover");this.config&&(this.config={...this.config,discovered:e})}catch(e){this.#b.fromError(e,"config.discover")}}async clearCaches(){try{await this.#m.request("config.clearCaches")}catch(e){this.#b.fromError(e,"config.clearCaches")}}applyConfig(e){this.config=e,this.#p?.getItem(sl)==null&&(this.languageChoice=e.connection.language??"auto",this.#w()),!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.#E)e();this.#E.length=0,this.#k.length=0}}class px{#e=N(Be([]));get changes(){return t(this.#e)}set changes(e){u(this.#e,e,!0)}#n=N(Be([]));get outcomes(){return t(this.#n)}set outcomes(e){u(this.#n,e,!0)}#t=N(!1);get applying(){return t(this.#t)}set applying(e){u(this.#t,e,!0)}#s=N(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:Ei(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 gx{#e=N(Be({}));get methods(){return t(this.#e)}set methods(e){u(this.#e,e,!0)}#n=N(!1);get running(){return t(this.#n)}set running(e){u(this.#n,e,!0)}#t=N(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}}class bx{#e=N(Be({}));get indexes(){return t(this.#e)}set indexes(e){u(this.#e,e,!0)}#n=N(Be({}));get loading(){return t(this.#n)}set loading(e){u(this.#n,e,!0)}#t=N(Be({}));get failed(){return t(this.#t)}set failed(e){u(this.#t,e,!0)}#s=N(Be([]));get firmwareBusy(){return t(this.#s)}set firmwareBusy(e){u(this.#s,e,!0)}#a;#r;#i=[];constructor(e,n){this.#a=e,this.#r=n,this.#i.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.#a.request("devices.list",e,{refresh:n.refresh??!1});this.indexes={...this.indexes,[e]:new kb(e,s)},this.failed={...this.failed,[e]:!1},this.settleFirmware(e)}catch(s){this.failed={...this.failed,[e]:!0},this.#r.fromError(s,`devices.list ${e}`)}finally{this.loading={...this.loading,[e]:!1}}}}async teams(e){try{return await this.#a.request("teams.list",e)}catch(n){return this.#r.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.#a.request("teams.set",e,a,i),s+=1}catch(o){this.#r.fromError(o,`setTeam ${a}`)}return n.length>0&&await this.load(e,{refresh:!0}),s}async confirmRegaInbox(){try{return await this.#a.request("rega.confirmInbox")}catch(e){return this.#r.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.firmwareBusy.length>0?!0:this.devices(e).some(n=>["DELIVER_FIRMWARE_IMAGE","PERFORMING_UPDATE","READY_FOR_UPDATE"].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.#a.request("devices.updateFirmware",e,n);return await this.load(e,{refresh:!0}),s}catch(s){return this.#r.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.#a.request("devices.installFirmware",e,n);return await this.load(e,{refresh:!0}),s}catch(s){return this.#r.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.#a.request("devices.delete",e,n,s),await this.load(e,{refresh:!0}),!0}catch(a){return this.#r.fromError(a,`deleteDevice ${n}`),!1}}async replaceable(e,n){try{return await this.#a.request("devices.replaceable",e,n)}catch(s){return this.#r.fromError(s,`devices.replaceable ${n}`),[]}}async replace(e,n,s){try{const a=await this.#a.request("devices.replace",e,n,s);return await this.load(e,{refresh:!0}),a}catch(a){return this.#r.fromError(a,`replaceDevice ${n} ${s}`),!1}}async repairConfig(e,n,s){try{return await this.#a.request("devices.repairConfig",e,n,s)}catch(a){this.#r.fromError(a,`devices.repairConfig ${n}`);return}}async restoreConfig(e,n){try{return await this.#a.request("devices.restoreConfig",e,n),!0}catch(s){return this.#r.fromError(s,`restoreConfigToDevice ${n}`),!1}}async clearConfigCache(e,n){try{return await this.#a.request("devices.clearConfigCache",e,n),!0}catch(s){return this.#r.fromError(s,`clearConfigCache ${n}`),!1}}async reportValueUsage(e,n,s){let a=0;for(const i of n){let o;try{o=await this.#a.request("paramset.description",e,i,"VALUES")}catch(l){this.#r.fromError(l,`getParamsetDescription ${i} VALUES`);continue}for(const l of Object.keys(o))try{await this.#a.request("devices.reportValueUsage",e,i,l,s),a+=1}catch(f){this.#r.fromError(f,`reportValueUsage ${i} ${l}`);break}}return a}async setInstallMode(e,n,s){try{return await this.#a.request("devices.installMode.set",e,n,s),!0}catch(a){return this.#r.fromError(a,"setInstallMode"),!1}}async hmipPairing(){try{return await this.#a.request("meta.pairing")??void 0}catch{return}}async tryInstallMode(e,n,s){try{return await this.#a.request("devices.installMode.set",e,n,s),null}catch(a){return Ei(a)}}async keyMismatchDevice(e){try{return await this.#a.request("devices.installMode.keyMismatch",e)}catch{return""}}async setTempKey(e,n){try{return await this.#a.request("devices.installMode.tempKey",e,n),!0}catch(s){return this.#r.fromError(s,"setTempKey"),!1}}async installModeSeconds(e){try{return await this.#a.request("devices.installMode.get",e)}catch(n){return this.#r.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.#i)e();this.#i.length=0}}class _x{buffer;#e=N(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 W_(s.capacity??gh),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),Y_(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 Ex{#e=N(void 0);get state(){return t(this.#e)}set state(e){u(this.#e,e,!0)}#n=N(Be([]));get groups(){return t(this.#n)}set groups(e){u(this.#n,e,!0)}#t=N(Be([]));get devicesToConfigure(){return t(this.#t)}set devicesToConfigure(e){u(this.#t,e,!0)}#s=N(!1);get loading(){return t(this.#s)}set loading(e){u(this.#s,e,!0)}#a=N(!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)}))}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:Ei(e).message}}}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.#u(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.#u(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#u(e){await this.load(),this.devicesToConfigure=e.devicesToConfigure}dispose(){for(const e of this.#l)e();this.#l.length=0}}const yx="__HMM_HOST__";function Sx(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 kx(r=globalThis){const e=r[yx];return Sx(e)?e:void 0}class wx{#e=N(void 0);get info(){return t(this.#e)}set info(e){u(this.#e,e,!0)}#n=N(void 0);get update(){return t(this.#n)}set update(e){u(this.#n,e,!0)}#t=N(!1);get systemDark(){return t(this.#t)}set systemDark(e){u(this.#t,e,!0)}#s;#a=[];constructor(e={}){this.#s=e.bridge??kx(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 Ax{#e=N(Be([]));get states(){return t(this.#e)}set states(e){u(this.#e,e,!0)}#n=N(void 0);get rega(){return t(this.#n)}set rega(e){u(this.#n,e,!0)}#t=N(!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 Tx{#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(ds.manifest)}receiverProfiles(e){return this.#t(ds.profiles(e))}async receiverTypeAliases(){return await this.#t(ds.receiverTypeAliases)??{}}async masterMetadata(){return await this.#t(ds.masterMetadata)??{}}async optionPresets(){return await this.#t(ds.optionPresets)??{}}async crossValidations(){return await this.#t(ds.crossValidations)??[]}translations(e){return this.#t(ds.translations(e))}async deviceIcons(){return await this.#t(ds.deviceIcons)??{}}async masterForms(){return(await this.#t(ds.masterForms))?.byParamsetId??{}}async timeSelectors(){return(await this.#t(ds.timeSelectors))?.types??{}}}class Rx{#e=N(Be(new Bc));get lookup(){return t(this.#e)}set lookup(e){u(this.#e,e,!0)}#n=N(void 0);get manifest(){return t(this.#n)}set manifest(e){u(this.#n,e,!0)}#t=N(!1);get available(){return t(this.#t)}set available(e){u(this.#t,e,!0)}#s=N(Be({}));get presets(){return t(this.#s)}set presets(e){u(this.#s,e,!0)}#a=N(Be({}));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 Tx(e),this.engine=new T_(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 Bc(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 xx{#e=N(Be({}));get links(){return t(this.#e)}set links(e){u(this.#e,e,!0)}#n=N(Be({}));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=>Al(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=N(Be([]));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 Ix{#e=N(Be({}));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 Ki(r,e,n){return`${r}|${e}|${n}`}function Dx(r,e,n,s){try{return si(r,e,n,s)}catch{return Ki(r,e.ADDRESS,n)}}class Nx{#e=N(Be({}));get descriptions(){return t(this.#e)}set descriptions(e){u(this.#e,e,!0)}#n=N(!1);get loading(){return t(this.#n)}set loading(e){u(this.#n,e,!0)}#t=N(Be([]));get results(){return t(this.#t)}set results(e){u(this.#t,e,!0)}#s=N(!1);get writing(){return t(this.#s)}set writing(e){u(this.#s,e,!0)}#a=N(Be({}));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[Ki(e,n,s)]}async describe(e,n,s){const a=Ki(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=`${Dx(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[Ki(n,s,a)]??await this.#r.request("paramset.description",n,s,a);o=(i==="service-messages"?zh(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 Rh(this.#r,e,n)}async suppressServiceMessages(e,n,s,a){try{return await xh(this.#r,e,n,s,a),!0}catch(i){return this.#i.fromError(i,`suppressServiceMessages ${n} ${s||"*"}`),!1}}clearResults(){this.results=[]}}class Cx{#e=N(Be({}));get interfaces(){return t(this.#e)}set interfaces(e){u(this.#e,e,!0)}#n=N(!1);get loading(){return t(this.#n)}set loading(e){u(this.#n,e,!0)}#t=N(0);#s={};#a={};#r=N(Be({}));#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(Ra(s.address),s.datapoint,a)===!0&&u(this.#t,t(this.#t)+1)})}#d(e){const n=this.#s[e]??new H_;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?j_(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()}}class Px{#e=N(Be([]));get messages(){return t(this.#e)}set messages(e){u(this.#e,e,!0)}#n=N(!1);get loading(){return t(this.#n)}set loading(e){u(this.#n,e,!0)}#t=N(Be({}));get suppressed(){return t(this.#t)}set suppressed(e){u(this.#t,e,!0)}#s=N(Be({}));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(al(s))})}apply(e){const n=this.#l,s=e.filter(a=>!n.includes(Du(a)));if(this.messages=e,this.#l=e.map(a=>Du(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=>ao(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,al(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,al(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)ao(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[Zs(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(Zs(e,s)));await Promise.all(n.map(s=>this.#f(e,s)))}async suppress(e,n,s,a){try{await xh(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[Zs(e.interfaceName,e.address)];return G_(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(Zs(e,s)));this.#c=[...this.#c,...n.map(s=>Zs(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,[Zs(e,s)]:a}}catch{}}))}async#f(e,n){const s=Zs(e,n);this.#d.includes(s)||(this.#d=[...this.#d,s]);const a=await Rh(this.#a,e,n);a!==void 0&&(this.suppressed={...this.suppressed,[s]:a})}dispose(){this.#i()}}function Du(r){return`${r.interfaceName}|${r.address}|${r.datapoint}`}function Zs(r,e){return`${r}|${e}`}function al(r){return Array.isArray(r)?r:[]}class Nu{#e=N(!1);get embedded(){return t(this.#e)}set embedded(e){u(this.#e,e,!0)}#n=N(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||!Mx(e))return;const n=Cu(/[?&]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=Cu(s.theme)??this.theme??"system")}dispose(){this.#t?.removeEventListener("message",this.#s)}}function Cu(r){return r==="system"||r==="light"||r==="dark"?r:void 0}function Mx(r){try{return r.self!==r.top&&r.parent.location.origin===r.location.origin}catch{return!1}}class Ox{#e=N(Be({}));get memberships(){return t(this.#e)}set memberships(e){u(this.#e,e,!0)}#n=N(Be({}));get loading(){return t(this.#n)}set loading(e){u(this.#n,e,!0)}#t=N(!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]=Rb(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=Zf(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(g){this.#a.fromError(g,`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 Lx{#e=N(void 0);get state(){return t(this.#e)}set state(e){u(this.#e,e,!0)}#n=N(Be({}));get enums(){return t(this.#n)}set enums(e){u(this.#n,e,!0)}#t=N(Be({}));get objects(){return t(this.#t)}set objects(e){u(this.#t,e,!0)}#s=c(()=>d1(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 Q_(e,n)}view(e){return this.objects[e]}titleOf(e,n){return kh(e,this.enums[e],n)}options(e){return Oh(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 Ia(this.objects[e],n)}deviceMatches(e,n,s){return Lh(this.objects[e],n.map(a=>this.objects[a]),s)}members(e){return vo(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:Ei(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 Fx{#e=N(Be([]));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 Gx{#e=N(Be([]));get entries(){return t(this.#e)}set entries(e){u(this.#e,e,!0)}#n=N(Be([]));get pending(){return t(this.#n)}set pending(e){u(this.#n,e,!0)}#t=N(void 0);get progress(){return t(this.#t)}set progress(e){u(this.#t,e,!0)}#s=N(!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 Ux{transport;i18n;notices;app;interfaces;devices;names;links;serviceMessages;unreach;events;rpcLog;host;meta;taxonomy;groups;smokeGroups;paramsets;radio;console;changeSet;shell;#e=!1;constructor(e,n={}){this.transport=e,this.notices=new qp(e),this.app=new vx(e,this.notices,n),this.i18n=new y1(this.app.language),this.interfaces=new Ax(e,this.notices),this.devices=new bx(e,this.notices),this.names=new Ix(e,this.notices),this.links=new xx(e,this.notices),this.serviceMessages=new Px(e,this.notices),this.unreach=new Fx(e,this.notices),this.events=new _x(e,this.notices,{...n.eventCapacity===void 0?{}:{capacity:n.eventCapacity}}),this.rpcLog=new Gx(e,this.notices),this.meta=new Rx(e,{...n.dataSource===void 0?{}:{source:n.dataSource}}),this.taxonomy=new Lx(e,this.notices),this.groups=new Ex(e,this.notices),this.smokeGroups=new Ox(e,this.notices),this.paramsets=new Nx(e,this.notices),this.radio=new Cx(e,this.notices),this.console=new gx(e,this.notices),this.changeSet=new px(e,this.notices,this.rpcLog),this.app.onInterfaceRouted(s=>{this.#e&&this.#n($f(s))}),this.shell="shellWindow"in n?new Nu(n.shellWindow):new Nu,this.host=new wx({...n.hostBridge===void 0?{}:{bridge:n.hostBridge},...n.hostScope===void 0?{}:{scope:n.hostScope}})}get tabs(){return this.app.storeSelected?cc(this.taxonomy.state):qg(this.interfaces.typeOf(this.app.selectedInterface),{heatingGroups:this.groups.offered})}nameOf=e=>this.names.nameOf(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&&cc(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){(!ri(this.app.tab)||!this.tabs.includes(this.app.tab))&&this.app.setTab(this.tabs[0]??"metadata");return}(e||ri(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 Bx(r,e={}){return new Ux(r,e)}const Qh=["BidCos-RF","HmIP-RF"],Zh=[{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}],Vx=[{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"],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},...["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}])],Jh={"BidCos-RF":Zh,"HmIP-RF":Vx},us={"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",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"},il={"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}]},Ci=[{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")}],Hx={"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]}}},zx=[{ADDRESS:"3014F711A0000418971558",TYPE:"HMIP_CCU2",DESCRIPTION:"HMIP_CCU2 3014F711A0000418971558",CONNECTED:!0,DEFAULT:!0,DUTY_CYCLE:1,FIRMWARE_VERSION:"4.4.18"}],jx=[{ADDRESS:"BidCoS-RF",TYPE:"CCU2",DESCRIPTION:"CCU2-Coprocessor",CONNECTED:!0,DEFAULT:!0,DUTY_CYCLE:1,FIRMWARE_VERSION:"2.8.6"}],em=[{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"}],Pu=[{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}],Wx=Zh.filter(r=>(r.TEAM_CHANNELS??[]).length>0),Kx={format:1,revision:7,objects:{"BidCos-RF.MEQ0123456:1":{name:us["MEQ0123456:1"]??"",enums:["room/eg/kueche","function/licht"],meta:{}},"BidCos-RF.JEQ0234567:1":{name:us["JEQ0234567:1"]??"",enums:["room/eg/flur"],meta:{}},"BidCos-RF.KEQ0345678:4":{name:us["KEQ0345678:4"]??"",enums:["room/og/bad","function/heizung"],meta:{}},"BidCos-RF.LEQ0456789:1":{name:us["LEQ0456789:1"]??"",enums:["room/og/schlafzimmer","function/sicherheit"],meta:{}},"BidCos-RF.GEQ0567890:1":{name:us["GEQ0567890:1"]??"",enums:["room/eg/wohnzimmer","function/licht"],meta:{}},"HmIP-RF.000A1B2C3D4E5F:4":{name:us["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:[]}}},Yx={enabled:!0,reachable:!0,names:Object.keys(us).length},Ql={host:"demo.local",interfaces:em.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:""},ol={version:"3.0.0-dev.0",connection:Ql,localAddresses:["192.168.1.20","10.0.0.5"],discovered:[{address:"demo.local",name:"Demo-CCU",serial:"KEQ0000001",firmware:"3.89.8",interfaces:[...Qh]}]};function qx(r=Ql.host){const e=r===Ql.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 Mu=[{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}],$x=[{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"}],Xx=[{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:[]}],Ou=[{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 ja(r){return Qh.includes(r)}const ll=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}])]),Lu={"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}},"0001D3C9000001:1|MASTER":ll,"0001D3C9000002:1|MASTER":ll,"0001D3C9000003:1|MASTER":ll},dl={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},Fu={"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},"0001D3C9000001:1|MASTER":{...dl,GROUP_1:!0},"0001D3C9000002:1|MASTER":{...dl,GROUP_1:!0},"0001D3C9000003:1|MASTER":dl};function tm(r){for(const e of Object.values(Jh)){const n=e.find(s=>s.ADDRESS===r);if(n)return n.PARENT===void 0||n.PARENT===""?"":n.TYPE}return""}function Qx(r,e){return Lu[`${r}|${e}`]??Lu[`${tm(r)}|${e}`]??{}}function Zx(r,e){return Fu[`${r}|${e}`]??Fu[`${tm(r)}|${e}`]??{}}const Jx={"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 nm{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 hr({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 hr(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 hr({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",ol),this.respond("config.set",n=>({...ol,connection:n})),this.result("config.discover",ol.discovered),this.result("config.clearCaches",null),this.respond("config.callbackAddresses",n=>qx(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",em),this.result("interfaces.reconnect",null),this.result("rega.state",Yx),this.respond("devices.list",n=>ja(n)?Jh[n]:[]),this.result("names.get",us),this.respond("names.set",n=>{const s={...us};for(const a of n)s[a.address]=a.name;return s}),this.respond("links.list",n=>ja(n)?il[n]:[]),this.respond("rssi.get",n=>ja(n)?Hx[n]:{}),this.respond("bidcos.interfaces",n=>n==="HmIP-RF"?zx:jx),this.respond("serviceMessages.list",n=>n===void 0?Ci:Ci.filter(s=>s.interfaceName===n)),this.respond("serviceMessages.refresh",n=>n===void 0?Ci:Ci.filter(s=>s.interfaceName===n)),this.result("serviceMessages.ack",null),this.result("rega.confirmInbox",[]),this.respond("teams.list",n=>n==="BidCos-RF"?Wx:[]),this.result("teams.set",null),this.respond("unreach.list",n=>n===void 0?Pu:Pu.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?Mu:Mu.filter(s=>s.interfaceName===n)),this.result("events.clear",null),this.result("rpcLog.list",$x),this.result("rpcLog.clear",null),this.result("rpc.methods",Xx),this.respond("rpc.call",(n,s,a)=>({method:s,params:a})),this.respond("paramset.description",(n,s,a)=>Qx(s,a)),this.respond("paramset.get",(n,s,a)=>Zx(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)=>(ja(n)?il[n]:[]).find(o=>o.SENDER===s&&o.RECEIVER===a)??{SENDER:s,RECEIVER:a}),this.respond("links.peers",(n,s)=>(ja(n)?il[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=Jx[n];if(s===void 0)throw new hr({message:`no demo data file ${n}`,kind:"config"});return s}),this.useDemoMeta(),this.result("session.info",null),this}useDemoMeta(){const e=new o1({document:Ml(structuredClone(Kx))}),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 g=c1(o.enums,p);l[f]={name:g.name,enums:[...p.enums],rooms:[...g.rooms],functions:[...g.functions],...g.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 g of o){const b=e.find(g),k=b?.enums??[];if(k.includes(l)===f)continue;const S=f?[...k,l]:k.filter(x=>x!==l),A=g.slice(g.indexOf(".")+1);p[g]=b?{enums:S}:{name:us[A]??A,enums:S}}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 g=e.getEnum(o).tree,b=l===void 0?void 0:_a(l),k=b===void 0?g:Gs(g,b.ids)?.children??[],y=wh(f,k.map(S=>S.id));return e.createNode(o,l??null,y,f,p??{}),i(),`${l??o}/${y}`}),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 eI=1;class tI{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;#g;#h;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.#g=this.#s,(e.autoConnect??!0)&&this.connect()}get connected(){return this.#c}get backoffMs(){return this.#g}connect(){if(this.#u=!1,this.#d)return;const e=this.#e(this.url);this.#d=e,e.onopen=()=>{this.#g=this.#s,this.#p(!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.#h!==void 0&&(clearTimeout(this.#h),this.#h=void 0);const e=this.#d;this.#d=void 0,e?.close(),this.#y("transport closed"),this.#p(!1)}async request(e,...n){await this.#v(e);const s=this.#d;if(!s||s.readyState!==eI)throw new hr({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 hr({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.#m(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 hr({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 hr({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.#m(s.id,s.r,void 0);break;case"err":this.#m(s.id,void 0,Uf(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}}}#m(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 hr(s)):a.resolve(n))}#b(){if(this.#d=void 0,this.#p(!1),this.#y(`connection to ${this.url} was lost`),this.#u||!this.#t)return;const e=this.#g;this.#g=Math.min(this.#g*2,this.#a),this.#h=setTimeout(()=>{this.#h=void 0,this.connect()},e)}#y(e){for(const[n,s]of[...this.#r])this.#r.delete(n),s.timer!==void 0&&clearTimeout(s.timer),s.reject(new hr({message:e,kind:"connection"}));for(const n of[...this.#o])this.#o.delete(n),n.reject(new hr({message:e,kind:"connection"}))}#p(e){if(this.#c!==e){this.#c=e;for(const n of[...this.#l])n(e)}}}const nI={},rI="__HMM_TRANSPORT__";function sI(r,e="api"){const n=r.protocol==="https:"?"wss:":"ws:",s=r.pathname.replace(/[^/]*$/,"");return`${n}//${r.host}${s}${e}`}function aI(r){return nI?.VITE_HMM_DEMO==="true"?!0:r?new URLSearchParams(r.search).has("demo"):!1}function iI(r={}){const n=(r.host??globalThis)[rI];if(oI(n))return n;const s=r.location??(typeof window>"u"?void 0:window.location);if(r.demo===!0||aI(s))return new nm({demo:!0});if(!s)throw new Error("createTransport needs a location when there is no window and no injected transport");return new tI({url:sI(s,r.path??"api")})}function oI(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 lI(r,e={}){const n=e.intervalMs??2500,s=e.now??(()=>Date.now());let a=0;const i=setInterval(()=>{const o=Ou[a%Ou.length];if(a+=1,!o)return;const l={...o,timestamp:s()};r.emit("rpc.event",l)},n);return()=>{clearInterval(i)}}const Zl=iI(),rm=Bx(Zl);Zl instanceof nm&&lI(Zl);const sm=document.querySelector("#app");if(!sm)throw new Error("no #app element to mount into");Qv(ox,{target:sm,props:{stores:rm}});rm.start();
21
+ //# sourceMappingURL=index-YYK59Qny.js.map