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.
- package/data/manifest.json +2 -2
- package/node_modules/@homematic-manager/backend/package.json +1 -1
- package/node_modules/@homematic-manager/core/dist/devices/hmipKey.d.ts +1 -1
- package/node_modules/@homematic-manager/core/dist/devices/hmipKey.js +1 -1
- package/node_modules/@homematic-manager/core/dist/links/roles.d.ts +14 -0
- package/node_modules/@homematic-manager/core/dist/links/roles.js +25 -1
- package/node_modules/@homematic-manager/core/package.json +1 -1
- package/package.json +3 -3
- package/ui/assets/index-YYK59Qny.js +21 -0
- package/ui/assets/{index-DM5Ozzyn.css → index-zKVCiLPm.css} +1 -1
- package/ui/index.html +2 -2
- package/ui/assets/index-DlodmFUk.js +0 -21
|
@@ -1,21 +0,0 @@
|
|
|
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 Ou=!1;var mi=Array.isArray,Cm=Array.prototype.indexOf,Yi=Array.prototype.includes,lo=Array.from,Lu=Object.defineProperty,ga=Object.getOwnPropertyDescriptor,Fu=Object.getOwnPropertyDescriptors,Gu=Object.prototype,Pm=Array.prototype,co=Object.getPrototypeOf,Yd=Object.isExtensible;const zn=()=>{};function Mm(r){for(var e=0;e<r.length;e++)r[e]()}function Uu(){var r,e,n=new Promise((s,a)=>{r=s,e=a});return{promise:n,resolve:r,reject:e}}function qd(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,Sa=4,uo=8,Bu=1<<24,ts=16,qr=32,Is=64,cl=128,Zl=256,Kr=512,Hn=1024,Gn=2048,ss=4096,pr=8192,Ar=16384,Pa=32768,qi=1<<25,ia=65536,$i=1<<17,Om=1<<18,Ma=1<<19,Lm=1<<20,ms=1<<25,oa=65536,Xi=1<<21,ba=1<<22,Us=1<<23,As=Symbol("$state"),Vu=Symbol("component"),Fm=Symbol("legacy props"),Gm=Symbol(""),Hu=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"},Um=!!globalThis.document?.contentType&&globalThis.document.contentType.includes("xml"),Bm=1,Vm=2,zu=4,Hm=8,zm=16,jm=1,Wm=4,Km=8,Ym=16,ju=1,qm=2,Vn=Symbol("uninitialized"),$m="http://www.w3.org/1999/xhtml";function Xm(){console.warn("https://svelte.dev/e/derived_inert")}function Qm(){console.warn("https://svelte.dev/e/select_multiple_invalid_value")}function Zm(){console.warn("https://svelte.dev/e/svelte_boundary_reset_noop")}function Wu(r){return r===this.v}function Ku(r,e){return r!=r?e==e:r!==e||r!==null&&typeof r=="object"||typeof r=="function"}function Yu(r){return!Ku(r,this.v)}function Jl(r){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function Jm(){throw new Error("https://svelte.dev/e/async_derived_orphan")}function ev(r,e,n){throw new Error("https://svelte.dev/e/each_key_duplicate")}function tv(r){throw new Error("https://svelte.dev/e/effect_in_teardown")}function nv(){throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function rv(r){throw new Error("https://svelte.dev/e/effect_orphan")}function sv(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}function av(r){throw new Error("https://svelte.dev/e/props_invalid_value")}function iv(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function ov(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}function lv(){throw new Error("https://svelte.dev/e/state_unsafe_mutation")}function dv(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}let cv=!1;const uv=[];function Mi(r,e=!1,n=!1){return Oi(r,new Map,"",uv,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)===Gu){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 fv(r){let e=r.p;for(;e!==null&&e.c===null;)e=e.p;return e?.c??null}function ed(r,e){return r===null&&Jl(),r.c??=new Map(fv(r)||void 0)}let Un=null;function ka(r){Un=r}function qu(r){return ed(Un).get(r)}function $u(r,e){return ed(Un).set(r,e),e}function Xu(r){return ed(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)pf(s)}return e.i=!0,Un=e.p,td(r)}function td(r={}){return Lu(r,Vu,{value:!0}),r}function Qu(){return!0}let ea=[];function Zu(){var r=ea;ea=[],Mm(r)}function ws(r){if(ea.length===0&&!$a){var e=ea;queueMicrotask(()=>{e===ea&&Zu()})}ea.push(r)}function hv(){for(;ea.length>0;)Zu()}const mv=-7169;function Dn(r,e){r.f=r.f&mv|e}function nd(r){(r.f&Kr)!==0||r.deps===null?Dn(r,Hn):Dn(r,ss)}function Ju(r){if(r!==null)for(const e of r)(e.f&Qn)===0||(e.f&oa)===0||(e.f^=oa,Ju(e.deps))}function ef(r,e,n){(r.f&Gn)!==0?e.add(r):(r.f&ss)!==0&&n.add(r),Ju(r.deps),Dn(r,Hn)}let Ti=!1;function vv(r){var e=Ti;try{return Ti=!1,[r(),Ti]}finally{Ti=e}}let $d=!1;function pv(){$d||($d=!0,document.addEventListener("reset",r=>{Promise.resolve().then(()=>{if(!r.defaultPrevented)for(const e of r.target.elements)e[Pi]?.()})},{capture:!0}))}function Oa(r){var e=$t,n=zt;$r(null),bs(null);try{return r()}finally{$r(e),bs(n)}}function rd(r,e,n,s=n){r.addEventListener(e,()=>Oa(n));const a=r[Pi];a?r[Pi]=()=>{a(),s(!0)}:r[Pi]=()=>s(!0),pv()}function gv(r,e,n,s){const a=Ja;var i=r.filter(S=>!S.settled),o=e.map(a);if(n.length===0&&i.length===0){s(o);return}var l=zt,f=bv(),p=i.length===1?i[0].promise:i.length>1?Promise.all(i.map(S=>S.promise)):null;function g(S){if((l.f&Ar)===0){f();try{s([...o,...S])}catch(E){hs(E,l)}Qi()}}var b=tf();if(n.length===0){p.then(()=>g([])).finally(b);return}function k(){Promise.all(n.map(S=>_v(S))).then(g).catch(S=>hs(S,l)).finally(b)}p?p.then(()=>{f(),k(),Qi()}):k()}function bv(){var r=zt,e=$t,n=Un,s=Pt;return function(i=!0){bs(r),$r(e),ka(n),i&&(r.f&Ar)===0&&(s?.activate(),s?.apply())}}function Qi(r=!0){bs(null),$r(null),ka(null),r&&Pt?.deactivate()}function tf(){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|=Ma),{ctx:Un,deps:null,effects:null,equals:Wu,f:e,fn:r,reactions:null,rv:0,v:Vn,wv:0,parent:zt,ac:null}}const Ka=Symbol("obsolete");function _v(r,e,n){let s=zt;s===null&&Jm();var a=void 0,i=Hs(Vn),o=!$t,l=new Set;return Mv(()=>{var f=zt,p=Uu();a=p.promise;try{Promise.resolve(r()).then(p.resolve,S=>{S!==vi&&p.reject(S)}).finally(Qi)}catch(S){p.reject(S),Qi()}var g=Pt;if(o){if((f.f&Pa)!==0)var b=tf();if(s.b?.is_rendered())g.async_deriveds.get(f)?.reject(Ka);else for(const S of l.values())S.reject(Ka);l.add(p),g.async_deriveds.set(f,p)}const k=(S,E=void 0)=>{b?.(),l.delete(p),E!==Ka&&(g.activate(),E?(i.f|=Us,wa(i,E)):((i.f&Us)!==0&&(i.f^=Us),wa(i,S)),g.deactivate())};p.promise.then(k,S=>k(null,S||"unknown"))}),ld(()=>{for(const f of l)f.reject(Ka)}),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 Ef(e),e}function nf(r){const e=Ja(r);return e.equals=Yu,e}function yv(r){var e=r.effects;if(e!==null){r.effects=null;for(var n=0;n<e.length;n+=1)Tr(e[n])}}function sd(r){var e,n=zt,s=r.parent;if(!Ds&&s!==null&&r.v!==Vn&&(s.f&(Ar|pr))!==0)return Xm(),r.v;bs(s);try{r.f&=~oa,yv(r),e=Af(r)}finally{bs(n)}return e}function rf(r){var e=sd(r);if(!r.equals(e)&&(r.wv=kf(),(!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}Ds||(ns!==null?(od()||Pt?.is_fork)&&ns.set(r,e):nd(r))}function Ev(r){if(r.effects!==null)for(const e of r.effects)(e.teardown||e.ac)&&(e.teardown?.(),e.ac!==null&&Oa(()=>{e.ac.abort(vi),e.ac=null}),e.fn!==null&&(e.teardown=zn),ei(e,0),dd(e))}function sf(r){if(r.effects!==null)for(const e of r.effects)e.teardown&&e.fn!==null&&Aa(e)}let Mo=null,ha=null,Pt=null,ml=null,ns=null,vl=null,$a=!1,Oo=!1,va=null,Li=null;var Xd=0;let Sv=1;class Vs{id=Sv++;#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,Xd++>1e3&&(this.#y(),wv());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=va=[],s=[],a=Li=[];for(const f of e)try{this.#m(f,n,s)}catch(p){throw lf(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(va=null,Li=null,this.#v()){this.#p(s),this.#p(n);for(const[f,p]of this.#f)of(f,p);a.length>0&&Pt.#_();return}const o=this.#b();if(o){this.#p(s),this.#p(n),o.#E(this);return}this.#c.clear(),this.#u.clear();for(const f of this.#s)f(this);this.#s.clear(),ml=this,Qd(s),Qd(n),ml=null,this.#l?.resolve();var l=Pt;if(this.#r===0&&(this.#o.length===0||l!==null)&&this.#y(),this.#o.length>0)if(l!==null){const f=l;f.#o.push(...this.#o.filter(p=>!f.#o.includes(p)))}else l=this;l!==null&&(vs.clear(),l.#_())}#m(e,n,s){e.f^=Hn;for(var a=e.first;a!==null;){var i=a.f,o=(i&(qr|Is))!==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&Sa)!==0?n.push(a):_i(a)&&((i&ts)!==0&&this.#u.add(a),Aa(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}#E(e){for(const[s,a]of e.current)!this.previous.has(s)&&e.previous.has(s)&&this.previous.set(s,e.previous.get(s)),this.current.set(s,a);for(const[s,a]of e.async_deriveds){const i=this.async_deriveds.get(s);i&&a.promise.then(i.resolve).catch(i.reject)}e.async_deriveds.clear(),this.transfer_effects(e.#c,e.#u);const n=s=>{var a=s.reactions;if(a!==null&&!((s.f&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&(ba|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.#y(),Pt=this,this.#_()}#p(e){for(var n=0;n<e.length;n+=1)ef(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{Xd=0,vl=null,va=null,Li=null,Oo=!1,Pt=null,ns=null,vs.clear()}}discard(){for(const e of this.#a)e(this);this.#a.clear();for(const e of this.async_deriveds.values())e.reject(Ka);this.#y(),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,[S,E]]of this.current){if(b.current.has(k)){var s=b.current.get(k)[0];if(e&&S!==s)b.current.set(k,[S,E]);else continue}n.push(k)}if(e)for(const[k,S]of this.async_deriveds){const E=b.async_deriveds.get(k);E&&S.promise.then(E.resolve).catch(E.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,S=>{(S.f&(ts|ba))!==0?b.schedule(S):b.#p([S])});b.activate();var o=new Set,l=new Map;for(var f of n)af(f,i,o,l);l=new Map;var p=[...b.current].filter(([k,S])=>{const E=this.current.get(k);return E?E[0]!==S[0]||E[1]!==S[1]:!0}).map(([k])=>k);if(p.length>0)for(const k of this.#d)(k.f&(Ar|pr|$i))===0&&ad(k,p,l)&&((k.f&(ba|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,ws(()=>{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??=Uu()).promise}static ensure(){if(Pt===null){const e=Pt=new Vs;!Oo&&!$a&&ws(()=>{e.#e||e.flush()})}return Pt}apply(){{ns=null;return}}schedule(e){if(vl=e,e.b?.is_pending&&(e.f&(Sa|uo|Bu))!==0&&(e.f&Pa)===0){e.b.defer_effect(e);return}for(var n=e;n.parent!==null;){n=n.parent;var s=n.f;if(va!==null&&n===zt&&($t===null||($t.f&Qn)===0))return;if((s&(Is|qr))!==0){if((s&Hn)===0)return;n.f^=Hn}}this.#o.push(n)}#y(){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 kv(r){var e=$a;$a=!0;try{for(var n;;){if(hv(),Pt===null)return n;Pt.flush()}}finally{$a=e}}function wv(){try{sv()}catch(r){hs(r,vl)}}let ks=null;function Qd(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)&&(ks=new Set,Aa(s),s.deps===null&&s.first===null&&s.nodes===null&&s.teardown===null&&s.ac===null&&bf(s),ks?.size>0)){vs.clear();for(const a of ks){if((a.f&(Ar|pr))!==0)continue;const i=[a];let o=a.parent;for(;o!==null;)ks.has(o)&&(ks.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&&Aa(f)}}ks.clear()}}ks=null}}function af(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?af(a,e,n,s):(i&(ba|ts))!==0&&(i&Gn)===0&&ad(a,e,s)&&(Dn(a,Gn),id(a))}}function ad(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&&ad(a,e,n))return n.set(a,!0),!0}return n.set(r,!1),!1}function id(r){Pt.schedule(r)}function of(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;)of(n,e),n=n.next}}function lf(r){Dn(r,Hn);for(var e=r.first;e!==null;)lf(e),e=e.next}let Zi=new Set;const vs=new Map;let df=!1;function Hs(r,e){var n={f:0,v:r,reactions:null,equals:Wu,rv:0,wv:0};return n}function N(r,e){const n=Hs(r);return Ef(n),n}function Av(r,e=!1,n=!0){const s=Hs(r);return e||(s.equals=Yu),s}function u(r,e,n=!1){$t!==null&&(!rs||($t.f&$i)!==0)&&Qu()&&($t.f&(Qn|ts|ba|$i))!==0&&(ps===null||!ps.has(r))&&lv();let s=n?Be(e):e;return wa(r,s,Li)}function wa(r,e,n=null){if(!r.equals(e)){Ds?vs.set(r,e):vs.has(r)||vs.set(r,r.v);var s=Vs.ensure();if(s.capture(r,e),(r.f&Qn)!==0){const a=r;(r.f&Gn)!==0&&sd(a),ns===null&&nd(a)}r.wv=kf(),cf(r,Gn,n),zt!==null&&(zt.f&Hn)!==0&&(zt.f&(qr|Is))===0&&(zr===null?Fv([r]):zr.push(r)),!s.is_fork&&Zi.size>0&&!df&&Tv()}return e}function Tv(){df=!1;for(const r of Zi){(r.f&Hn)!==0&&Dn(r,ss);let e;try{e=_i(r)}catch{e=!0}e&&Aa(r)}Zi.clear()}function us(r){u(r,r.v+1)}function cf(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),cf(p,ss,n))}else if(f){var g=o;(l&ts)!==0&&ks!==null&&ks.add(g),n!==null?n.push(g):id(g)}}}function Be(r){if(typeof r!="object"||r===null||As in r||Vu in r)return r;const e=co(r);if(e!==Gu&&e!==Pm)return r;var n=new Map,s=mi(r),a=N(0),i=Rs,o=l=>{if(Rs===i)return l();var f=$t,p=Rs;$r(null),ec(i);var g=l();return $r(f),ec(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)&&iv();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),us(a)}}else u(p,Vn),us(a);return!0},get(l,f,p){if(f===As)return r;var g=n.get(f),b=f in l;if(g===void 0&&(!b||ga(l,f)?.writable)&&(g=o(()=>{var S=Be(b?l[f]:Vn),E=N(S);return E}),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===As)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||ga(l,f)?.writable)){p===void 0&&(p=o(()=>{var k=g?Be(l[f]):Vn,S=N(k);return S}),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 S=p;S<b.v;S+=1){var E=n.get(S+"");E!==void 0?u(E,Vn):S in l&&(E=o(()=>N(Vn)),n.set(S+"",E))}if(b===void 0)(!k||ga(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)}us(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(){ov()}})}function Zd(r){try{if(r!==null&&typeof r=="object"&&As in r)return r[As]}catch{}return r}function uf(r,e){return Object.is(Zd(r),Zd(e))}var la,ff,hf,mf;function Rv(){if(la===void 0){la=window,ff=/Firefox/.test(navigator.userAgent);var r=Element.prototype,e=Node.prototype,n=Text.prototype;hf=ga(e,"firstChild").get,mf=ga(e,"nextSibling").get,Yd(r)&&(r[ul]=void 0,r[Hu]=null,r[fl]=void 0,r.__e=void 0),Yd(n)&&(n[hl]=void 0)}}function Ts(r=""){return document.createTextNode(r)}function fs(r){return hf.call(r)}function pi(r){return mf.call(r)}function w(r,e){return fs(r)}function Ie(r,e=!1){{var n=fs(r);return n instanceof Comment&&n.data===""?pi(n):n}}function m(r,e=!1){return fs(r)}function d(r,e=1,n=!1){let s=r;for(;e--;)s=pi(s);return s}function xv(r){r.textContent=""}function vf(){return!1}function Iv(r,e,n){return n?document.createElement(r,{is:n}):document.createElement(r)}function Dv(r){var e=zt;if(e===null)return $t.f|=Us,r;if((e.f&Pa)===0&&(e.f&Sa)===0)throw r;hs(r,e)}function hs(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&Pa)===0)throw r;try{e.b.error(r);return}catch(n){r=n}}e=e.parent}throw r}}function Nv(r){zt===null&&($t===null&&rv(),nv()),Ds&&tv()}function Cv(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&Sa)!==0)va!==null?va.push(s):Vs.ensure().schedule(s);else if(e!==null){try{Aa(s)}catch(o){throw Tr(s),o}a.deps===null&&a.teardown===null&&a.nodes===null&&a.first===a.last&&(a.f&Ma)===0&&(a=a.first,(r&ts)!==0&&(r&ia)!==0&&a!==null&&(a.f|=ia))}if(a!==null&&(a.parent=n,n!==null&&Cv(a,n),$t!==null&&($t.f&Qn)!==0&&(r&Is)===0)){var i=$t;(i.effects??=[]).push(a)}return s}function od(){return $t!==null&&!rs}function ld(r){const e=Cs(uo,null);return Dn(e,Hn),e.teardown=r,e}function lt(r){Nv();var e=zt.f,n=!$t&&(e&qr)!==0&&Un!==null&&!Un.i;if(n){var s=Un;(s.e??=[]).push(r)}else return pf(r)}function pf(r){return Cs(Sa|Lm,r)}function Pv(r){Vs.ensure();const e=Cs(Is|Ma,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(Sa,r)}function Mv(r){return Cs(ba|Ma,r)}function gi(r,e=0){return Cs(uo|e,r)}function y(r,e=[],n=[],s=[]){gv(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|Ma,r)}function gf(r){var e=r.teardown;if(e!==null){const n=Ds,s=$t;Jd(!0),$r(null);try{e.call(null)}catch(a){hs(a,r.parent)}finally{Jd(n),$r(s)}}}function dd(r,e=!1){var n=r.first;for(r.first=r.last=null;n!==null;){const a=n.ac;a!==null&&Oa(()=>{a.abort(vi)});var s=n.next;(n.f&Is)!==0?n.parent=null:Tr(n,e),n=s}}function Ov(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&Om)!==0)&&r.nodes!==null&&r.nodes.end!==null&&(Lv(r.nodes.start,r.nodes.end),n=!0),r.f|=qi,dd(r,e&&!n),ei(r,0);var s=r.nodes&&r.nodes.t;if(s!==null)for(const i of s)i.stop();gf(r),r.f^=qi,r.f|=Ar;var a=r.parent;a!==null&&a.first!==null&&bf(r),r.next=r.prev=r.teardown=r.ctx=r.deps=r.fn=r.nodes=r.ac=r.b=null}function Lv(r,e){for(;r!==null;){var n=r===e?null:pi(r);r.remove(),r=n}}function bf(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|=Zl,_f(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 _f(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&Is)===0){var o=(a.f&ia)!==0||(a.f&qr)!==0&&(r.f&ts)!==0;_f(a,e,o?n:!1)}a=i}}}function Ji(r){r.f&=~Zl,yf(r,!0)}function yf(r,e){if((r.f&Zl)===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;yf(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 cd(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,Ds=!1;function Jd(r){Ds=r}let $t=null,rs=!1;function $r(r){$t=r}let zt=null;function bs(r){zt=r}let ps=null;function Ef(r){$t!==null&&(ps??=new Set).add(r)}let kr=null,Pr=0,zr=null;function Fv(r){zr=r}let Sf=1,ta=0,Rs=ta;function ec(r){Rs=r}function kf(){return++Sf}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)&&rf(i),i.wv>r.wv)return!0}(e&Kr)!==0&&ns===null&&Dn(r,Hn)}return!1}function wf(r,e,n=!0){var s=r.reactions;if(s!==null&&!(ps!==null&&ps.has(r)))for(var a=0;a<s.length;a++){var i=s[a];(i.f&Qn)!==0?wf(i,e,!1):e===i&&(n?Dn(i,Gn):(i.f&Hn)!==0&&Dn(i,ss),id(i))}}function Af(r){var e=kr,n=Pr,s=zr,a=$t,i=ps,o=Un,l=rs,f=Rs,p=r.f;kr=null,Pr=0,zr=null,$t=(p&(qr|Is))===0?r:null,ps=null,ka(r.ctx),rs=!1,Rs=++ta,r.ac!==null&&(Oa(()=>{r.ac.abort(vi)}),r.ac=null);try{r.f|=Xi;var g=r.fn,b=g();r.f|=Pa;var k=tc(r);if(Qu()&&zr!==null&&!rs&&k!==null&&(r.f&(Qn|ss|Gn))===0)for(var S=0;S<zr.length;S++)wf(zr[S],r);if(a!==null&&a!==r){if(ta++,a.deps!==null)for(let E=0;E<n;E+=1)a.deps[E].rv=ta;if(e!==null)for(const E of e)E.rv=ta;zr!==null&&(s===null?s=zr:s.push(...zr))}return(r.f&Us)!==0&&(r.f^=Us),b}catch(E){return tc(r),Dv(E)}finally{r.f^=Xi,kr=e,Pr=n,zr=s,$t=a,ps=i,ka(o),rs=l,Rs=f}}function tc(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(od()&&(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 Gv(r,e){let n=e.reactions;if(n!==null){var s=Cm.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&&nd(i),i.ac!==null&&Oa(()=>{i.ac.abort(vi),i.ac=null,Dn(i,Gn)}),Ev(i),ei(i,0)}}function ei(r,e){var n=r.deps;if(n!==null)for(var s=e;s<n.length;s++)Gv(r,n[s])}function Aa(r){var e=r.f;if((e&Ar)===0){Dn(r,Hn);var n=zt,s=Fi;zt=r,Fi=(e&(qr|Is))===0;try{(e&(ts|Bu))!==0?Ov(r):dd(r),gf(r);var a=Af(r);r.teardown=typeof a=="function"?a:null,r.wv=Sf;var i;Ou&&cv&&(r.f&Gn)!==0&&r.deps}finally{Fi=s,zt=n}}}async function ti(){await Promise.resolve(),kv()}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&&(ps===null||!ps.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(Ds&&vs.has(r))return vs.get(r);if(n){var o=r;if(Ds){var l=o.v;return((o.f&Hn)===0&&o.reactions!==null||Rf(o))&&(l=sd(o)),vs.set(o,l),l}var f=(o.f&Kr)===0&&!rs&&$t!==null&&(Fi||($t.f&Kr)!==0),p=(o.f&Pa)===0;_i(o)&&(f&&(o.f|=Kr),rf(o)),f&&!p&&(sf(o),Tf(o))}if(ns?.has(r))return ns.get(r);if((r.f&Us)!==0)throw r.v;return r.v}function Tf(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&&(sf(e),Tf(e))}function Rf(r){if(r.v===Vn)return!0;if(r.deps===null)return!1;for(const e of r.deps)if(vs.has(e)||(e.f&Qn)!==0&&Rf(e))return!0;return!1}function gr(r){var e=rs;try{return rs=!0,r()}finally{rs=e}}function Uv(r){if(!(typeof r!="object"||!r||r instanceof EventTarget)){if(As in r)pl(r);else if(!Array.isArray(r))for(let e in r){const n=r[e];typeof n=="object"&&n&&As 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=Fu(n);for(let a in s){const i=s[a].get;if(i)try{i.call(r)}catch{}}}}}const Bv=["touchstart","touchmove"];function Vv(r){return Bv.includes(r)}const Ya=Symbol("events"),xf=new Set,gl=new Set;function Hv(r,e,n,s={}){function a(i){if(s.capture||bl.call(e,i),!i.cancelBubble)return Oa(()=>n?.call(this,i))}return r.startsWith("pointer")||r.startsWith("touch")||r==="wheel"?ws(()=>{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=Hv(r,e,n,i);(e===document.body||e===window||e===document||e instanceof HTMLMediaElement)&&ld(()=>{e.removeEventListener(r,o,i)})}function J(r,e,n){(e[Ya]??={})[r]=n}function kt(r){for(var e=0;e<r.length;e++)xf.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[Ya];if(l){var f=a.indexOf(l);if(f!==-1&&(e===document||e===window)){r[Ya]=e;return}var p=a.indexOf(e);if(p===-1)return;f<=p&&(o=f)}if(i=a[o]||r.target,i!==e){Lu(r,"currentTarget",{configurable:!0,get(){return i||n}});var g=$t,b=zt;$r(null),bs(null);try{for(var k,S=[];i!==null&&i!==e;){try{var E=i[Ya]?.[s];E!=null&&(!i.disabled||r.target===i)&&E.call(i,r)}catch(A){k?S.push(A):k=A}if(r.cancelBubble)break;o++,i=o<a.length?a[o]:null}if(k){for(let A of S)queueMicrotask(()=>{throw A});throw k}}finally{r[Ya]=e,delete r.currentTarget,$r(g),bs(b)}}}const zv=globalThis?.window?.trustedTypes&&globalThis.window.trustedTypes.createPolicy("svelte-trusted-html",{createHTML:r=>r});function jv(r){return zv?.createHTML(r)??r}function If(r){var e=Iv("template");return e.innerHTML=jv(r.replaceAll("<!>","<!---->")),e.content}function Ta(r,e){var n=zt;n.nodes===null&&(n.nodes={start:r,end:e,a:null,t:null})}function _(r,e){var n=(e&ju)!==0,s=(e&qm)!==0,a,i=!r.startsWith("<!>");return()=>{a===void 0&&(a=If(i?r:"<!>"+r),n||(a=fs(a)));var o=s||ff?document.importNode(a,!0):a.cloneNode(!0);if(n){var l=fs(o),f=o.lastChild;Ta(l,f)}else Ta(o,o);return o}}function Wv(r,e,n="svg"){var s=!r.startsWith("<!>"),a=(e&ju)!==0,i=`<${n}>${s?r:"<!>"+r}</${n}>`,o;return()=>{if(!o){var l=If(i),f=fs(l);if(a)for(o=document.createDocumentFragment();fs(f);)o.appendChild(fs(f));else o=fs(f)}var p=o.cloneNode(!0);if(a){var g=fs(p),b=p.lastChild;Ta(g,b)}else Ta(p,p);return p}}function js(r,e){return Wv(r,e,"svg")}function Zn(r=""){{var e=Ts(r+"");return Ta(e,e),e}}function wt(){var r=document.createDocumentFragment(),e=document.createComment(""),n=Ts();return r.append(e,n),Ta(e,n),r}function v(r,e){r!==null&&r.before(e)}function Kv(r){let e=0,n=Hs(0),s;return()=>{od()&&(t(n),gi(()=>(e===0&&(s=gr(()=>r(()=>us(n)))),e+=1,()=>{ws(()=>{e-=1,e===0&&(s?.(),s=void 0,us(n))})})))}}var Yv=ia|Ma;function Df(r,e,n,s){new qv(r,e,n,s)}class qv{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=Kv(()=>(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()},Yv)}#_(){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);ws(a),n&&(this.#l=jr(()=>{n(this.#e,()=>e,()=>s)}))}#b(e){var n=!1,s=!1;const a=()=>{if(n){Zm();return}n=!0,s&&dv(),this.#l!==null&&ra(this.#l,()=>{this.#l=null}),this.#y(()=>{this.#p()})};return{reset:a,invoke_onerror:()=>{try{s=!0,this.#t.onerror?.(e,a),s=!1}catch(o){hs(o,this.#a&&this.#a.parent)}}}}#E(){const e=this.#t.pending;e&&(this.is_pending=!0,this.#i=jr(()=>e(this.#e)),ws(()=>{var n=this.#o=document.createDocumentFragment(),s=Ts(),a=!1;if(n.append(s),this.#r=this.#y(()=>{try{return jr(()=>this.#s(s))}catch(i){try{this.error(i),a=!0}catch(o){hs(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();cd(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){ef(e,this.#f,this.#g)}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!this.#t.pending}#y(e){var n=zt,s=$t,a=Un;bs(this.#a),$r(this.#a),ka(this.#a.ctx);try{return Vs.ensure(),e()}finally{bs(n),$r(s),ka(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,ws(()=>{this.#u=!1,this.#h&&wa(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.#y(()=>{try{return jr(()=>{var l=zt;l.b=this,l.f|=cl,n(this.#e,()=>a,()=>i)})}catch(l){return hs(l,this.#a.parent),null}}))};ws(()=>{var a;try{a=this.transform_error(e)}catch(i){hs(i,this.#a&&this.#a.parent);return}a!==null&&typeof a=="object"&&typeof a.then=="function"?a.then(s,i=>hs(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 $v(r,e){return Xv(r,e)}const Ri=new Map;function Xv(r,{target:e,anchor:n,props:s={},events:a,context:i,intro:o=!0,transformError:l}){Rv();var f=void 0,p=Pv(()=>{var g=n??e.appendChild(Ts());Df(g,{pending:()=>{}},S=>{ht({});var E=Un;i&&(E.c=i),a&&(s.$$events=a),f=r(S,s)||td(),mt()},l);var b=new Set,k=S=>{for(var E=0;E<S.length;E++){var A=S[E];if(!b.has(A)){b.add(A);var x=Vv(A);for(const T of[e,document]){var D=Ri.get(T);D===void 0&&(D=new Map,Ri.set(T,D));var C=D.get(A);C===void 0?(T.addEventListener(A,bl,{passive:x}),D.set(A,1)):D.set(A,C+1)}}}};return k(lo(xf)),gl.add(k),()=>{for(var S of b)for(const x of[e,document]){var E=Ri.get(x),A=E.get(S);--A==0?(x.removeEventListener(S,bl),E.delete(S),E.size===0&&Ri.delete(x)):E.set(S,A)}gl.delete(k),g!==n&&g.parentNode?.removeChild(g)}});return Qv.set(f,p),f}let Qv=new WeakMap;class ud{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();cd(o,p),p.append(Ts()),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=vf();if(n&&!this.#n.has(e)&&!this.#t.has(e))if(a){var i=document.createDocumentFragment(),o=Ts();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 ud(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 Zv=Symbol("NaN");function Jv(r,e,n){var s=new ud(r);bi(()=>{var a=e();a!==a&&(a=Zv),s.ensure(a,n)})}function eo(r,e){return e}function ep(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;xv(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|=ms;const o=document.createDocumentFragment();cd(i,o)}else Tr(e[a],n)}}var nc;function je(r,e,n,s,a,i=null){var o=r,l=new Map,f=(e&zu)!==0;if(f){var p=r;o=p.appendChild(Ts())}var g=null,b=nf(()=>{var T=n();return mi(T)?T:T==null?[]:lo(T)}),k,S=new Map,E=!0;function A(T){(C.effect.f&Ar)===0&&(C.pending.delete(T),C.fallback=g,tp(C,k,o,e,s),g!==null&&(k.length===0?(g.f&ms)===0?Ji(g):(g.f^=ms,qa(g,null,o)):ra(g,()=>{g=null})))}function x(T){C.pending.delete(T)}var D=bi(()=>{k=t(b);for(var T=k.length,P=new Set,z=Pt,Y=vf(),ne=0;ne<T;ne+=1){var ie=k[ne],de=s(ie,ne),G=E?null:l.get(de);G?(G.v&&wa(G.v,ie),G.i&&wa(G.i,ne),Y&&z.unskip_effect(G.e)):(G=np(l,E?o:nc??=Ts(),ie,de,ne,a,e,n),E||(G.e.f|=ms),l.set(de,G)),P.add(de)}if(T===0&&i&&!g&&(E?g=jr(()=>i(o)):(g=jr(()=>i(nc??=Ts())),g.f|=ms)),T>P.size&&ev(),!E)if(S.set(z,P),Y){for(const[re,le]of l)P.has(re)||z.skip_effect(le.e);z.oncommit(A),z.ondiscard(x)}else A(z);t(b)}),C={effect:D,items:l,pending:S,outrogroups:null,fallback:g};E=!1}function Ba(r){for(;r!==null&&(r.f&qr)===0;)r=r.next;return r}function tp(r,e,n,s,a){var i=(s&Hm)!==0,o=e.length,l=r.items,f=Ba(r.effect.first),p,g=null,b,k=[],S=[],E,A,x,D;if(i)for(D=0;D<o;D+=1)E=e[D],A=a(E,D),x=l.get(A).e,(x.f&ms)===0&&(x.nodes?.a?.measure(),(b??=new Set).add(x));for(D=0;D<o;D+=1){if(E=e[D],A=a(E,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&ms)!==0)if(x.f^=ms,x===f)qa(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),qa(x,C,n),g=x,k=[],S=[],f=Ba(g.next);continue}if(x!==f){if(p!==void 0&&p.has(x)){if(k.length<S.length){var T=S[0],P;g=T.prev;var z=k[0],Y=k[k.length-1];for(P=0;P<k.length;P+=1)qa(k[P],T,n);for(P=0;P<S.length;P+=1)p.delete(S[P]);Ms(r,z.prev,Y.next),Ms(r,g,z),Ms(r,Y,T),f=T,g=Y,D-=1,k=[],S=[]}else p.delete(x),qa(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=[],S=[];f!==null&&f!==x;)(p??=new Set).add(f),S.push(f),f=Ba(f.next);if(f===null)continue}(x.f&ms)===0&&k.push(x),g=x,f=Ba(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 ne=[];if(p!==void 0)for(x of p)(x.f&pr)===0&&ne.push(x);for(;f!==null;)(f.f&pr)===0&&f!==r.fallback&&ne.push(f),f=Ba(f.next);var ie=ne.length;if(ie>0){var de=(s&zu)!==0&&o===0?n:null;if(i){for(D=0;D<ie;D+=1)ne[D].nodes?.a?.measure();for(D=0;D<ie;D+=1)ne[D].nodes?.a?.fix()}ep(r,ne,de)}}i&&ws(()=>{if(b!==void 0)for(x of b)x.nodes?.a?.apply()})}function np(r,e,n,s,a,i,o,l){var f=(o&Bm)!==0?(o&zm)===0?Av(n,!1,!1):Hs(n):null,p=(o&Vm)!==0?Hs(a):null;return{v:f,i:p,e:jr(()=>(i(e,f??n,p??a,l),()=>{r.delete(s)}))}}function qa(r,e,n){if(r.nodes)for(var s=r.nodes.start,a=r.nodes.end,i=e&&(e.f&ms)===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 ud(r);bi(()=>{const a=e()??null;s.ensure(a,a&&(i=>a(i,...n)))},ia)}function Nf(r,e,n){fo(()=>{var s=gr(()=>e(r,n?.())||{});if(n&&s?.update){var a=!1,i={};gi(()=>{var o=n();Uv(o),a&&Ku(i,o)&&(i=o,s.update(o))}),a=!0}if(s?.destroy)return()=>s.destroy()})}function Cf(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=Cf(r[e]))&&(s&&(s+=" "),s+=n)}else for(n in r)r[n]&&(s&&(s+=" "),s+=n);return s}function rp(){for(var r,e,n=0,s="",a=arguments.length;n<a;n++)(r=arguments[n])&&(e=Cf(r))&&(s&&(s+=" "),s+=e);return s}function sp(r){return typeof r=="object"?rp(r):r??""}const rc=[...`
|
|
2
|
-
\r\f \v\uFEFF`];function ap(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||rc.includes(s[o-1]))&&(l===s.length||rc.includes(s[l]))?s=(o===0?"":s.substring(0,o))+s.substring(l+1):o=l}}return s===""?null:s}function sc(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 ip(r,e){if(e){var n="",s,a;return Array.isArray(e)?(s=e[0],a=e[1]):s=e,s&&(n+=sc(s)),a&&(n+=sc(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=ap(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=ip(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 op(r,e){e?r.hasAttribute("selected")||r.setAttribute("selected",""):r.removeAttribute("selected")}function lp(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=_a(i);op(i,s?a.includes(o):uf(o,n))}}}function Cn(r,e,n=!1){if(r.multiple){if(e==null)return;if(!mi(e))return Qm();for(var s of r.options)s.selected=e.includes(_a(s));return}for(s of r.options){var a=_a(s);if(uf(a,e)){s.selected=!0;return}}(!n||e!==void 0)&&(r.selectedIndex=-1)}function Qt(r){var e=new MutationObserver(n=>{n.every(dp)||("__defaultValue"in r&&lp(r),"__value"in r&&Cn(r,r.__value))});e.observe(r,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),ld(()=>{e.disconnect()})}function br(r,e,n=e){var s=new WeakSet,a=!0;rd(r,"change",i=>{var o=i?"[selected]":":checked",l;if(r.multiple)l=[].map.call(r.querySelectorAll(o),_a);else{var f=r.querySelector(o)??r.querySelector("option:not([disabled])");l=f&&_a(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=_a(l),n(i))}r.__value=i,a=!1})}function _a(r){return"__value"in r?r.__value:r.value}function dp(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 cp=Symbol("is custom element"),up=Symbol("is html"),fp=Um?"progress":"PROGRESS";function rn(r,e){var n=fd(r);n.value===(n.value=e??void 0)||r.value===e&&(e!==0||r.nodeName!==fp)||(r.value=e??"")}function Rr(r,e){var n=fd(r);n.checked!==(n.checked=e??void 0)&&(r.checked=e)}function I(r,e,n,s){var a=fd(r);a[e]!==(a[e]=n)&&(e==="loading"&&(r[Gm]=n),n==null?r.removeAttribute(e):typeof n!="string"&&hp(r).has(e)?r[e]=n:r.setAttribute(e,n))}function fd(r){return r[Hu]??={[cp]:r.nodeName.includes("-"),[up]:r.namespaceURI===$m}}var ac=new Map;function hp(r){var e=r.getAttribute("is")||r.nodeName,n=ac.get(e);if(n)return n;ac.set(e,n=new Set);for(var s,a=r,i=Element.prototype;i!==a;){s=Fu(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;rd(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){rd(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?.[As]===e}function _n(r=td(),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&Km)!==0,o=(n&Ym)!==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=As in r||Fm in r;b=ga(r,e)?.set??(k&&e in r?P=>r[e]=P:void 0)}var S,E=!1;i?[S,E]=vv(()=>r[e]):S=r[e],S===void 0&&s!==void 0&&(S=g(),b&&(av(),b(S)));var A;if(A=()=>{var P=r[e];return P===void 0?g():(f=!0,P)},(n&Wm)===0)return A;if(b){var x=r.$$legacy;return(function(P,z){return arguments.length>0?((!z||x||E)&&b(z?A():P),P):A()})}var D=!1,C=((n&jm)!==0?Ja:nf)(()=>(D=!1,A()));i&&t(C);var T=zt;return(function(P,z){if(arguments.length>0){const Y=z?t(C):i?Be(P):P;return u(C,Y),D=!0,l!==void 0&&(l=Y),P}return Ds&&D||(T.f&Ar)!==0?C.v:t(C)})}function mp(r){Un===null&&Jl(),lt(()=>{const e=gr(r);if(typeof e=="function")return e})}function vp(r){Un===null&&Jl(),mp(()=>()=>gr(r))}const pp="5";typeof window<"u"&&((window.__svelte??={}).v??=new Set).add(pp);const yl=Symbol("homematic-manager.data-table");function gp(r){$u(yl,r)}function bp(){return Xu(yl)?qu(yl):void 0}function _p(r,e={}){return r.replace(/\{(\w+)\}/g,(n,s)=>{const a=e[s];return a===void 0?n:String(a)})}function Pf(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 yp=_(`<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 Ep(r,e){ht(e,!0);let n=B(e,"openExternal",3,void 0),s=B(e,"testId",3,void 0);function a(o){Pf(o,e.href,n())}var i=yp();y(()=>{I(i,"href",e.href),I(i,"title",e.label),I(i,"aria-label",e.label),I(i,"data-testid",s())}),J("click",i,a),v(r,i),mt()}kt(["click"]);const Mf={ok:"✔",busy:"↻",absent:"–",bad:"✕"};function Of(r){return r.subscribing===!0||(r.waiting===!0||r.reconnecting===!0)&&!r.connected?"busy":r.connected?"ok":r.absent===!0?"absent":"bad"}function Sp(r){return r.filter(e=>!e.connected&&e.subscribing!==!0&&e.unreachable===!0).map(e=>e.name)}function kp(r){const e=r.map(n=>Of(n));return e.includes("bad")?"bad":e.includes("busy")?"busy":e.includes("ok")?"ok":"absent"}function wp(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 Ap(r){return r.find(e=>e.callbackWarning!==void 0)?.callbackWarning}function Tp(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 Rp=_('<span role="img"> </span>');function xp(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(()=>kp(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=Rp();let S;var E=m(k,!0);y(()=>{S=St(k,1,`hmm-connection hmm-connection-${t(g)??""}`,"svelte-18vw5u5",S,{"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(E,Mf[t(g)])}),v(r,k),mt()}var Ip=_('<span class="hmm-interface-warn svelte-m4i49t" aria-hidden="true">⚠</span>'),Dp=_('<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>'),Np=_('<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>'),Cp=_("<span> </span>"),Pp=_('<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>'),Mp=_('<button type="button" class="hmm-interface-retry svelte-m4i49t" data-testid="interface-callback-use-auto"> </button>'),Op=_('<div class="hmm-interface-warning svelte-m4i49t" role="alert" data-testid="interface-callback-warning"><span class="svelte-m4i49t"> </span> <!></div>'),Lp=_('<div class="hmm-interface-foot svelte-m4i49t"><button type="button" class="hmm-interface-retry svelte-m4i49t"> </button></div>'),Fp=_('<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>'),Gp=_('<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 Up(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"),S=B(e,"onretry",3,void 0),E=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"),T=B(e,"portLabel",3,"Port"),P=B(e,"tlsLabel",3,"TLS"),z=B(e,"devicesLabel",3,H=>`${String(H)} devices`),Y=B(e,"dutyCycleLabel",3,H=>`Duty cycle ${String(H)} %`),ne=B(e,"publishCallbackPorts",3,!1),ie=B(e,"callbackPortInUseLabel",3,H=>`Callback port ${String(H)} is in use`),de=B(e,"callbackPortFailedLabel",3,H=>`Callback port ${String(H)} cannot be opened`),G=B(e,"publishPortText",3,"Publish this port unchanged"),re=B(e,"callbackWarningLabel",3,H=>H.reason==="notLocal"?`The callback address ${H.address} is not an address of this machine; ${H.auto} is used instead`:`The callback address ${H.address} is not in the CCU's network; the CCU may not reach it and send no events`),le=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),me=B(e,"testId",3,void 0),ke=N(!1),fe=N(0),Re=N(void 0),xe=N(void 0),se=N(void 0),M=N(void 0);const ue=c(()=>Ap(e.interfaces)),ve=c(()=>[t(M),t(se)].filter(H=>H!==void 0)),be=c(()=>S()===void 0?[]:Sp(e.interfaces));let Ee=Be([]);const q=c(()=>[...j()!==void 0&&j().selectable?[j().id]:[],...e.interfaces.map(H=>H.name)]),Q=c(()=>t(q).indexOf(n())),O=c(()=>j()!==void 0&&j().id===n()?j().label:n()),W=c(()=>j()!==void 0&&j().selectable?0:-1);function ce(H,Ce){if(H==="bad"&&Ce.unreachable===!0)return b();switch(H){case"ok":return f();case"busy":return Ce.subscribing===!0?E():Ce.reconnecting===!0?x():A();case"absent":return g();default:return p()}}function he(H){return Tp(H,i()[H.name],{port:T(),tls:P(),devices:z(),dutyCycle:Y()}).join(" · ")}function ge(){u(fe,t(Q)<0?0:t(Q),!0),u(ke,!0)}function ye(H){u(ke,!1),H&&t(xe)?.focus()}function ae(H){ye(!0),H!==n()&&te()?.(H)}function V(H){t(q).length!==0&&u(fe,(t(fe)+H+t(q).length)%t(q).length)}lt(()=>{t(ke)&&Ee[t(fe)]?.focus()});function F(H){if(H.key==="ArrowDown"||H.key==="ArrowUp"){H.preventDefault(),t(ke)?V(H.key==="ArrowDown"?1:-1):ge();return}H.key==="Escape"&&t(ke)&&(H.preventDefault(),ye(!0))}function R(H,Ce){switch(H.key){case"ArrowDown":{H.preventDefault(),V(1);break}case"ArrowUp":{H.preventDefault(),V(-1);break}case"Home":{H.preventDefault(),u(fe,0);break}case"End":{H.preventDefault(),u(fe,t(q).length-1);break}case"Enter":case" ":{H.preventDefault(),ae(t(q)[Ce]??"");break}case"Escape":{H.preventDefault(),ye(!0);break}case"Tab":{const Oe=t(ve)[0];if(!H.shiftKey&&Oe!==void 0){H.preventDefault(),Oe.focus();break}ye(!1);break}}}function L(H){const Ce=t(ve).findIndex(Oe=>Oe===H.currentTarget);if(H.key==="Escape")H.preventDefault(),ye(!0);else if(H.key==="Tab"&&H.shiftKey)H.preventDefault(),(t(ve)[Ce-1]??Ee[t(fe)])?.focus();else if(H.key==="Tab"){const Oe=t(ve)[Ce+1];Oe===void 0?ye(!1):(H.preventDefault(),Oe.focus())}}function ee(H){t(ke)&&t(Re)&&H.target instanceof Node&&!t(Re).contains(H.target)&&ye(!1)}var _e=Gp();wr("mousedown",la,ee);var Ne=w(_e),Fe=w(Ne);{let H=c(()=>me()===void 0?void 0:`${me()}-summary`);xp(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 E()},get waitingText(){return A()},get reconnectingText(){return x()},get testId(){return t(H)}})}var We=d(Fe,2);{var tt=H=>{var Ce=Ip();y(Oe=>{I(Ce,"title",Oe),I(Ce,"data-testid",me()===void 0?void 0:`${me()}-callback-warning`)},[()=>re()(t(ue))]),v(H,Ce)};$(We,H=>{t(ue)!==void 0&&H(tt)})}var rt=d(We,2),we=m(rt,!0);_n(Ne,H=>u(xe,H),()=>t(xe));var Te=d(Ne,2);{var K=H=>{var Ce=Fp(),Oe=w(Ce),Ke=w(Oe),pe=m(Ke,!0),De=d(Ke,2),Pe=m(De,!0),Ge=d(Oe,2),Le=w(Ge);{var Ye=gt=>{var Se=wt(),Me=Ie(Se);{var $e=yt=>{var it=Dp();let Wt;var Mt=d(w(it),2),Ot=m(Mt,!0);_n(it,Zt=>Ee[t(W)]=Zt,()=>Ee?.[t(W)]),y(()=>{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(W)===t(fe)?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)}),J("click",it,()=>ae(j().id)),J("keydown",it,Zt=>R(Zt,t(W))),v(yt,it)},ft=yt=>{var it=Np(),Wt=d(w(it),2),Mt=m(Wt,!0);y(()=>{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(yt,it)};$(Me,yt=>{j().selectable?yt($e):yt(ft,-1)})}v(gt,Se)};$(Le,gt=>{j()!==void 0&>(Ye)})}var Xe=d(Le,2);je(Xe,19,()=>e.interfaces,gt=>gt.name,(gt,Se,Me)=>{const $e=c(()=>Of(t(Se))),ft=c(()=>t(W)+1+t(Me)),yt=c(()=>wp(t(Se),ne(),{portInUse:ie(),portFailed:de(),publish:G()}));var it=Pp();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=Cp();let Mn;var On=m(fn,!0);y(()=>{Mn=St(fn,1,"hmm-interface-item-callback svelte-m4i49t",null,Mn,{"hmm-interface-item-callback-bad":t(yt).bad}),I(fn,"data-testid",`interface-callback-${t(Se).name}`),h(On,t(yt).text)}),v(xt,fn)};$(jn,xt=>{t(yt)!==void 0&&xt(Xt)})}_n(it,(xt,fn)=>Ee[fn]=xt,xt=>Ee?.[xt],()=>[t(ft)]),y((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(fe)?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,Mf[t($e)]),h(vn,` ${xt??""}`),h(Jn,fn)},[()=>ce(t($e),t(Se)),()=>he(t(Se))]),J("click",it,()=>ae(t(Se).name)),J("keydown",it,xt=>R(xt,t(ft))),v(gt,it)});var ze=d(Ge,2);{var Ze=gt=>{var Se=Op(),Me=w(Se),$e=m(Me,!0),ft=d(Me,2);{var yt=it=>{var Wt=Mp(),Mt=m(Wt,!0);_n(Wt,Ot=>u(M,Ot),()=>t(M)),y(()=>h(Mt,le())),J("click",Wt,()=>{ye(!1),Z()()}),J("keydown",Wt,L),v(it,Wt)};$(ft,it=>{Z()!==void 0&&it(yt)})}y(it=>h($e,it),[()=>re()(t(ue))]),v(gt,Se)};$(ze,gt=>{t(ue)!==void 0&>(Ze)})}var dt=d(ze,2);{var pt=gt=>{var Se=Lp(),Me=w(Se),$e=m(Me,!0);_n(Me,ft=>u(se,ft),()=>t(se)),y(()=>{I(Me,"data-testid",me()===void 0?void 0:`${me()}-retry`),h($e,k())}),J("click",Me,()=>S()?.(t(be))),J("keydown",Me,L),v(gt,Se)};$(dt,gt=>{t(be).length>0&>(pt)})}y(()=>{h(pe,s()===""?"—":s()),h(Pe,a()?f():p()),I(Ge,"aria-label",l())}),v(H,Ce)};$(Te,H=>{t(ke)&&H(K)})}_n(_e,H=>u(Re,H),()=>t(Re)),y(()=>{I(_e,"data-testid",me()),I(Ne,"aria-expanded",t(ke)),I(Ne,"aria-label",o()),I(Ne,"title",o()),I(Ne,"data-testid",me()===void 0?void 0:`${me()}-trigger`),h(we,t(O))}),J("click",Ne,()=>t(ke)?ye(!1):ge()),J("keydown",Ne,F),v(r,_e),mt()}kt(["click","keydown"]);var Bp=_('<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 Vp(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=Bp(),g=w(p),b=d(w(g),2),k=m(b,!0);y(()=>{I(p,"data-testid",a()),h(k,s())}),v(f,p)};$(o,f=>{n()&&f(l)})}v(r,i)}function Hp(r){return r===void 0||!r.reachable?"bad":r.writable?"ok":"readonly"}function zp(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 Lf(r){if(typeof r!="object"||r===null)return!1;const e=r;return typeof e.message=="string"&&typeof e.kind=="string"}function yi(r,e="internal"){return r instanceof hr?r:Lf(r)?new hr(r):r instanceof Error?new hr({message:r.message,kind:e}):new hr({message:String(r),kind:e})}const El=5,jp=5e3,Wp=15e3;class Kp{#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??jp,this.#a=n.warnTtlMs??Wp,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-El))}get hidden(){return Math.max(0,this.items.length-El)}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=yi(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 Yp=_('<button type="button" class="hmm-notices-more svelte-1pqi0mh"> </button>'),qp=_("<strong> </strong>"),$p=_('<div><span class="hmm-notice-text svelte-1pqi0mh"><!> </span> <button type="button" class="hmm-notice-close svelte-1pqi0mh">✕</button></div>'),Xp=_('<div class="hmm-notices svelte-1pqi0mh" role="log" aria-live="polite"><!> <!></div>');function Qp(r,e){ht(e,!0);let n=B(e,"ondismiss",3,void 0),s=B(e,"dismissLabel",3,"Dismiss"),a=B(e,"visibleCount",3,El),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=Xp(),k=w(b);{var S=A=>{var x=Yp(),D=m(x,!0);y(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))]),J("click",x,()=>u(f,!t(f))),v(A,x)};$(k,A=>{t(p)>0&&A(S)})}var E=d(k,2);je(E,17,()=>t(g),A=>A.id,(A,x)=>{var D=$p();let C;var T=w(D),P=w(T);{var z=ie=>{var de=qp(),G=m(de,!0);y(()=>h(G,t(x).interfaceName)),v(ie,de)};$(P,ie=>{t(x).interfaceName!==void 0&&ie(z)})}var Y=d(P),ne=d(T,2);y(()=>{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(Y,` ${t(x).message??""}`),I(ne,"aria-label",s())}),J("click",ne,()=>n()?.(t(x).id)),v(A,D)}),y(()=>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 Ff(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 Zp(r){return r<1e3?`${Math.round(r)} ms`:`${(r/1e3).toFixed(2)} s`}function ic(r){return r.map(e=>typeof e=="string"?e:JSON.stringify(e)).join(", ")}const Gi={minWidth:320,minHeight:160},Sl=32;function Jp(r,e){return{...r,minHeight:Math.max(0,Math.min(r.minHeight,e.height-Sl))}}function Ra(r,e,n){return Math.min(Math.max(r,e),Math.max(e,n))}function Gf(r,e){return{...r,left:Math.round(Ra(r.left,0,e.width-r.width)),top:Math.round(Ra(r.top,0,e.height-r.height))}}function eg(r,e,n,s){return Gf({...r,left:r.left+e,top:r.top+n},s)}function tg(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),S=Math.max(i.minHeight,p?l:a.height-r.top),E=g?Math.round(Ra(r.width+(f?-n:n),i.minWidth,Math.min(k,a.width))):r.width,A=b?Math.round(Ra(r.height+(p?-s:s),i.minHeight,Math.min(S,a.height))):r.height;return Gf({left:f?o-E:r.left,top:p?l-A:r.top,width:E,height:A},a)}const ng=.5,no=120;function hd(r,e){return{min:no,max:Math.max(no,r-e)}}function Ho(r,e){const{min:n,max:s}=hd(r,e);return Math.round(Ra(r*ng,n,s))}function oc(r,e,n,s){const{min:a,max:i}=hd(n,s);return Math.round(Ra(r-e,a,i))}const Uf=new Map;function lc(r,e){Uf.set(r,e)}function rg(r){return Uf.get(r)}const Bf=new Map;function sg(r,e){Bf.set(r,e)}function ag(r){return Bf.get(r)}var ig=_('<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>'),og=_('<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>'),lg=_('<li class="hmm-rpclog-empty svelte-7sszxb"> </li>'),dg=_('<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 cg(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"})),S=B(e,"openLabel",3,"Open in console"),E=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(le){const Z=to(le.result);return le.resultBytes===void 0?Z:`${Z} (${String(Math.round(le.resultBytes/1024))} kB)`}const T="rpclog";let P=N(Be(rg(T)));function z(){if(A()!==void 0)return A();const le=getComputedStyle(document.documentElement).getPropertyValue("--hmm-header-height"),Z=Number.parseFloat(le);return Number.isFinite(Z)?Z:36}lt(()=>{n()&&t(P)===void 0&&u(P,Ho(window.innerHeight,z()),!0)});function Y(le){if(le.button!==0)return;const Z=t(P)??Ho(window.innerHeight,z()),te=le.clientY;le.preventDefault();const j=me=>{u(P,oc(Z,me.clientY-te,window.innerHeight,z()),!0)},U=()=>{window.removeEventListener("pointermove",j),window.removeEventListener("pointerup",U),window.removeEventListener("pointercancel",U),t(P)!==void 0&&lc(T,t(P))};window.addEventListener("pointermove",j),window.addEventListener("pointerup",U),window.addEventListener("pointercancel",U)}const ne=c(()=>n()&&t(P)!==void 0?hd(window.innerHeight,z()).max:no);function ie(le){const Z=le.key==="ArrowUp"?-20:le.key==="ArrowDown"?20:0;if(Z===0)return;le.preventDefault();const te=t(P)??Ho(window.innerHeight,z());u(P,oc(te,Z,window.innerHeight,z()),!0),lc(T,t(P))}var de=wt(),G=Ie(de);{var re=le=>{var Z=dg();let te;var j=w(Z),U=d(j,2),me=w(U),ke=m(me,!0),fe=d(me,2),Re=w(fe),xe=d(Re),se=d(fe,2),M=m(se,!0),ue=d(se,2),ve=d(U,2),be=w(ve);je(be,17,s,O=>O.id,(O,W)=>{var ce=ig(),he=d(w(ce),2),ge=m(he,!0),ye=d(he,2),ae=m(ye),V=d(ye,2),F=m(V,!0),R=d(V,2),L=m(R,!0);y(ee=>{h(ge,k().ui),h(ae,`${t(W).interfaceName??""} ${t(W).method??""}`),h(F,ee),h(L,o())},[()=>ic(t(W).params)]),v(O,ce)});var Ee=d(be,2);je(Ee,17,()=>e.entries,O=>O.id,(O,W)=>{var ce=og();let he;var ge=w(ce),ye=m(ge,!0),ae=d(ge,2),V=m(ae,!0),F=d(ae,2),R=m(F),L=d(F,2),ee=m(L,!0),_e=d(L,2),Ne=w(_e);{var Fe=Te=>{var K=Zn();y(H=>h(K,H),[()=>C(t(W))]),v(Te,K)},We=Te=>{var K=Zn();y(()=>h(K,t(W).error??"")),v(Te,K)};$(Ne,Te=>{t(W).ok?Te(Fe):Te(We,-1)})}var tt=d(_e,2),rt=m(tt,!0),we=d(tt,2);y((Te,K,H)=>{he=St(ce,1,"hmm-rpclog-entry svelte-7sszxb",null,he,{"hmm-rpclog-failed":!t(W).ok,"hmm-rpclog-background":t(W).origin==="background"}),I(ce,"data-origin",t(W).origin),h(ye,Te),h(V,k()[t(W).origin]),h(R,`${t(W).interfaceName??""} ${t(W).method??""}`),h(ee,K),h(rt,H),I(we,"title",S()),I(we,"aria-label",`${S()}: ${t(W).method}`)},[()=>Ff(t(W).timestamp),()=>ic(t(W).params),()=>Zp(t(W).durationMs)]),J("click",we,()=>E()?.(t(W))),v(O,ce)});var q=d(Ee,2);{var Q=O=>{var W=lg(),ce=m(W,!0);y(()=>h(ce,i())),v(O,W)};$(q,O=>{e.entries.length===0&&s().length===0&&O(Q)})}y(()=>{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(ne)),I(j,"data-testid",D()===void 0?void 0:`${D()}-resize`),h(ke,a()),I(Re,"data-testid",D()===void 0?void 0:`${D()}-hide-background`),h(xe,` ${b()??""}`),h(M,l()),I(ue,"aria-label",f())}),J("pointerdown",j,Y),J("keydown",j,ie),mr(Re,g),J("click",se,()=>x()?.()),J("click",ue,()=>n(!1)),v(le,Z)};$(G,le=>{n()&&le(re)})}v(r,de),mt()}kt(["pointerdown","keydown","click"]);var ug=_('<button type="button" class="hmm-dialog-close svelte-jby388">✕</button>'),fg=_('<div class="hmm-dialog-buttons svelte-jby388"><!></div>'),hg=_('<div aria-hidden="true"></div>'),mg=_('<dialog><div><span class="hmm-dialog-title svelte-jby388"> </span> <!></div> <div class="hmm-dialog-body svelte-jby388"><!></div> <!> <!></dialog>');function En(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),S=B(e,"minHeight",3,void 0),E=B(e,"movable",3,!0),A=B(e,"top",3,void 0),x=B(e,"testId",3,void 0),D=N(void 0),C,T=N(void 0);const P=c(()=>x()??s()),z=c(()=>Number(/^(\d+)px$/.exec(i())?.[1]??Number.NaN)),Y=c(()=>({minWidth:k()??(Number.isNaN(t(z))?Gi.minWidth:Math.max(Gi.minWidth,t(z))),minHeight:S()??Gi.minHeight}));lt(()=>{const Q=t(D);Q&&(n()&&!Q.open?(C=document.activeElement instanceof HTMLElement?document.activeElement:void 0,u(T,t(P)===""?void 0:ag(t(P)),!0),a()?Q.showModal():Q.show()):!n()&&Q.open&&Q.close())});function ne(){n(!1),t(D)?.open&&t(D).close(),f()?.(),C?.focus(),C=void 0}function ie(){return{width:window.innerWidth,height:window.innerHeight}}function de(Q,O){const W=t(D);if(!W||!E()||Q.button!==0)return;const ce=W.getBoundingClientRect(),he={left:ce.left,top:ce.top,width:ce.width,height:ce.height},ge=Q.clientX,ye=Q.clientY;Q.preventDefault();const ae=F=>{const R=F.clientX-ge,L=F.clientY-ye;u(T,O==="move"?eg(he,R,L,ie()):tg(he,O,R,L,ie(),Jp(t(Y),ie())),!0)},V=()=>{window.removeEventListener("pointermove",ae),window.removeEventListener("pointerup",V),window.removeEventListener("pointercancel",V),t(T)&&t(P)!==""&&sg(t(P),t(T))};window.addEventListener("pointermove",ae),window.addEventListener("pointerup",V),window.addEventListener("pointercancel",V)}function G(Q){Q.target.closest("button")===null&&de(Q,"move")}const re=["n","e","s","w","se"];function le(Q){Q.preventDefault(),l()&&ne()}var Z=mg();let te,j;var U=w(Z);let me;var ke=w(U),fe=m(ke,!0),Re=d(ke,2);{var xe=Q=>{var O=ug();y(()=>I(O,"aria-label",b())),J("click",O,ne),v(Q,O)};$(Re,Q=>{l()&&Q(xe)})}var se=d(U,2),M=w(se);{var ue=Q=>{var O=wt(),W=Ie(O);Bs(W,p),v(Q,O)};$(M,Q=>{p()&&Q(ue)})}var ve=d(se,2);{var be=Q=>{var O=fg(),W=w(O);Bs(W,g),v(Q,O)};$(ve,Q=>{g()&&Q(be)})}var Ee=d(ve,2);{var q=Q=>{var O=wt(),W=Ie(O);je(W,16,()=>re,ce=>ce,(ce,he)=>{var ge=hg();y(()=>{St(ge,1,`hmm-dialog-resize hmm-dialog-resize-${he??""}`,"svelte-jby388"),I(ge,"data-resize",he)}),J("pointerdown",ge,ye=>de(ye,he)),v(ce,ge)}),v(Q,O)};$(Ee,Q=>{E()&&Q(q)})}_n(Z,Q=>u(D,Q),()=>t(D)),y(()=>{te=St(Z,1,"hmm-dialog svelte-jby388",null,te,{"hmm-dialog-placed":t(T)!==void 0}),I(Z,"data-testid",x()),I(Z,"aria-label",s()===""?void 0:s()),j=Fn(Z,"",j,{width:t(T)===void 0?i():`${t(T).width}px`,height:t(T)===void 0?o():`${t(T).height}px`,"min-height":t(T)===void 0&&S()!==void 0?`min(${S()}px, calc(100vh - ${Sl}px))`:void 0,"margin-top":t(T)===void 0?A():void 0,"max-height":t(T)===void 0&&A()!==void 0?`calc(100vh - ${A()} - ${Sl/2}px)`:void 0,left:t(T)===void 0?void 0:`${t(T).left}px`,top:t(T)===void 0?void 0:`${t(T).top}px`}),me=St(U,1,"hmm-dialog-titlebar svelte-jby388",null,me,{"hmm-dialog-titlebar-movable":E()}),h(fe,s())}),wr("cancel",Z,le),wr("close",Z,()=>{n()&&ne()}),J("pointerdown",U,G),v(r,Z),mt()}kt(["pointerdown","click"]);var vg=_('<button type="button" class="hmm-button"> </button>'),pg=_('<p class="hmm-progress-last hmm-mono svelte-1r0w7uc"> </p>'),gg=_('<p class="hmm-progress-line svelte-1r0w7uc"> </p> <progress class="hmm-progress svelte-1r0w7uc"></progress> <!>',1);function Vf(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);En(r,{get title(){return s()},modal:!0,closable:!1,width:"420px",get testId(){return o()},get open(){return t(l)},set open(p){u(l,p)},buttons:p=>{var g=wt(),b=Ie(g);{var k=S=>{var E=vg(),A=m(E,!0);y(()=>h(A,a())),J("click",E,()=>i()?.()),v(S,E)};$(b,S=>{a()!==void 0&&S(k)})}v(p,g)},children:(p,g)=>{var b=wt(),k=Ie(b);{var S=E=>{var A=gg(),x=Ie(A),D=m(x),C=d(x,2),T=d(C,2);{var P=z=>{var Y=pg(),ne=m(Y);y(()=>h(ne,`${n().last.address??""}
|
|
9
|
-
${n().last.paramset??""}
|
|
10
|
-
${n().last.ok?"✔":"✕"}`)),v(z,Y)};$(T,z=>{n().last&&z(P)})}y(()=>{h(D,`${n().done??""} / ${n().total??""}`),I(C,"max",n().total),rn(C,n().done)}),v(E,A)};$(k,E=>{n()&&E(S)})}v(p,b)},$$slots:{buttons:!0,default:!0}}),mt()}kt(["click"]);var bg=_('<span class="hmm-tab-badge svelte-126ak3w"> </span>'),_g=_('<button type="button" role="tab"><span> </span> <!></button>'),yg=_('<div class="hmm-tabs svelte-126ak3w" role="tablist"></div>');function Eg(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=yg();je(f,23,()=>e.tabs,p=>p.id,(p,g,b)=>{var k=_g();let S;var E=w(k),A=m(E,!0),x=d(E,2);{var D=C=>{var T=bg(),P=m(T);y(()=>h(P,`(${t(g).badge??""})`)),v(C,T)};$(x,C=>{t(g).badge!==void 0&&t(g).badge!==""&&C(D)})}y(()=>{S=St(k,1,"hmm-tab svelte-126ak3w",null,S,{"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)}),J("click",k,()=>o(t(g).id)),J("keydown",k,C=>l(C,t(b))),v(p,k)}),y(()=>{I(f,"aria-label",a()),I(f,"data-testid",i())}),v(r,f),mt()}kt(["click","keydown"]);var Sg=_('<button type="button" class="hmm-theme-switch svelte-mls84d"><span aria-hidden="true"> </span></button>');function kg(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=Sg(),p=w(f),g=m(p,!0);y(()=>{I(f,"aria-label",t(l)),I(f,"title",t(l)),I(f,"data-testid",i()),h(g,o[n()])}),J("click",f,()=>a()?.()),v(r,f),mt()}kt(["click"]);const wg=160,Ag=600;function Hf(r,e){return r.length>e?`${r.slice(0,e-1).trimEnd()}…`:r}function Tg(r){const e=(r??"").split(`
|
|
11
|
-
`).map(n=>n.trim()).find(n=>n!=="");return Hf(e??"",wg)}function Rg(r){const e=r??"",n=e.indexOf(`
|
|
12
|
-
Headers:`);return Hf((n===-1?e:e.slice(0,n)).trim(),Ag)}var xg=_(': <span data-testid="update-error-reason"> </span>',1),Ig=_('<a class="hmm-update-link svelte-puqwbv" target="_blank" rel="noopener noreferrer" data-testid="update-releases"> </a>'),Dg=_('<span class="hmm-update-text svelte-puqwbv"> <!></span> <!>',1),Ng=_('<span class="hmm-update-text svelte-puqwbv"> </span>'),Cg=_('<button type="button" class="hmm-button" data-testid="update-download"> </button>'),Pg=_('<button type="button" class="hmm-button" data-testid="update-install"> </button>'),Mg=_('<div><!> <!> <button type="button" class="hmm-button" data-testid="update-dismiss"> </button></div>');function Og(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)?Tg(n()?.message):"");var g=wt(),b=Ie(g);{var k=S=>{var E=Mg();let A;var x=w(E);{var D=ie=>{var de=Dg(),G=Ie(de),re=w(G),le=d(re);{var Z=U=>{var me=xg(),ke=d(Ie(me)),fe=m(ke,!0);y(()=>h(fe,t(p))),v(U,me)};$(le,U=>{t(p)!==""&&U(Z)})}var te=d(G,2);{var j=U=>{var me=Ig(),ke=m(me,!0);y(()=>{I(me,"href",s()),h(ke,e.labels.releases)}),J("click",me,fe=>Pf(fe,s(),a())),v(U,me)};$(te,U=>{s()&&U(j)})}y(U=>{I(G,"title",U),h(re,`${t(o)??""}${n().version===void 0?"":` (${n().version})`}`)},[()=>Rg(n().message)||void 0]),v(ie,de)},C=ie=>{var de=Ng(),G=m(de);y(()=>h(G,`${t(o)??""}${n().version===void 0?"":` ${n().version}`}`)),v(ie,de)};$(x,ie=>{t(l)?ie(D):ie(C,-1)})}var T=d(x,2);{var P=ie=>{var de=Cg(),G=m(de,!0);y(()=>{I(de,"title",t(f)?e.labels.downloadInBrowser:void 0),h(G,e.labels.download)}),J("click",de,()=>e.ondownload()),v(ie,de)},z=ie=>{var de=Pg(),G=m(de,!0);y(()=>h(G,e.labels.install)),J("click",de,()=>e.oninstall()),v(ie,de)};$(T,ie=>{n().phase==="available"?ie(P):n().phase==="downloaded"&&ie(z,1)})}var Y=d(T,2),ne=m(Y,!0);y(()=>{A=St(E,1,"hmm-update svelte-puqwbv",null,A,{"hmm-update-failed":t(l)}),I(E,"role",t(l)?"alert":"status"),I(E,"data-testid",i()),I(E,"data-phase",n().phase),I(E,"data-install",n().install??"app"),h(ne,e.labels.dismiss)}),J("click",Y,()=>e.ondismiss()),v(S,E)};$(b,S=>{n()&&t(o)!==""&&S(k)})}v(r,g),mt()}kt(["click"]);const zf=300,Lg=280,Os=4;function Fg(r,e,n=0){const s=Math.min(Lg,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 Gg=_('<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(()=>Fg(e.anchor,{width:window.innerWidth,height:window.innerHeight},t(a)));lt(()=>{e.text,t(s)&&u(a,t(s).offsetHeight,!0)});var o=Gg();let l;var f=m(o,!0);_n(o,p=>u(s,p),()=>t(s)),y((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 Ug=_('<span class="hmm-tooltip-anchor svelte-11extwn"><!> <!></span>');function ni(r,e){ht(e,!0);let n=B(e,"delayMs",3,zf),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=Ug(),k=w(b);Bs(k,()=>e.children);var S=d(k,2);{var E=A=>{kl(A,{get text(){return e.text},get anchor(){return t(a)}})};$(S,A=>{t(a)!==void 0&&e.text!==""&&A(E)})}_n(b,A=>u(i,A),()=>t(i)),y(()=>{I(b,"data-testid",s()),I(b,"data-tooltip",e.text===""?void 0:e.text)}),wr("pointerenter",b,f),wr("pointerleave",b,g),J("pointerdown",b,g),J("focusin",b,l),J("focusout",b,g),J("keydown",b,A=>{A.key==="Escape"&&g()}),v(r,b),mt()}kt(["pointerdown","focusin","focusout","keydown"]);var Bg=_('<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 S=Bg();let E;var A=w(S);let x;var D=m(A,!0);y(()=>{E=St(S,1,"hmm-toolbar-button svelte-cmlgq7",null,E,{"hmm-toolbar-button-pressed":i()===!0}),I(S,"aria-label",e.title),I(S,"aria-pressed",i()),I(S,"aria-busy",o()?"true":void 0),I(S,"data-testid",f()),S.disabled=s()||o(),x=St(A,1,"hmm-toolbar-icon svelte-cmlgq7",null,x,{"hmm-toolbar-icon-busy":o()}),h(D,n())}),J("click",S,()=>l()?.()),v(b,S)},$$slots:{default:!0}})}mt()}kt(["click"]);const wl=Symbol("homematic-manager.stores");function Vg(r){return $u(wl,r),r}function jt(){if(!Xu(wl))throw new Error("no stores in context - wrap the component in App.svelte or call setStores() in a parent");return qu(wl)}const jf=["devices","links","rssi","console","messages","events"],Wf="groups",Hg=["rooms","functions","metadata"],Ui="devices",md="#store";function Kf(r){return r===md}function ri(r){return Hg.includes(r)}function dc(r){return r===void 0||!r.reachable?[]:r.flat===!0?["rooms","functions"]:["metadata"]}function zg(r){return jf.includes(r)||r===Wf||ri(r)}function jg(r){const e=r.replace(/^#/,"").split("/"),n=decodeURIComponent(e[1]??""),s=decodeURIComponent(e[2]??"");return{interfaceName:n,tab:zg(s)?s:Ui}}function Wg(r,e){return r===""?"":`#/${encodeURIComponent(r)}/${e}`}function Kg(r,e={}){switch(r){case"BidCos-Wired":return["devices","links","console","events"];case"CUxD":return["devices","console","events"];case"BidCos-RF":return[...jf];case"VirtualDevices":return e.heatingGroups===!0?["devices",Wf,"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 Yg=_('<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),qg=_('<p data-testid="change-set-empty"> </p>'),$g=_('<p class="hmm-change-call svelte-1uqsmm6"> </p>'),Xg=_('<tr><td class="hmm-mono svelte-1uqsmm6"> </td><td class="svelte-1uqsmm6"> </td><td class="hmm-change-new svelte-1uqsmm6"> </td></tr>'),Qg=_('<table class="hmm-change-table svelte-1uqsmm6"><tbody></tbody></table>'),Zg=_('<p class="hmm-change-error svelte-1uqsmm6"> </p>'),Jg=_('<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>'),eb=_('<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),tb=_("<!> <!>",1);function nb(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=Yg(),S=Ie(k),E=m(S,!0),A=d(S,2),x=m(A,!0),D=d(A,2),C=m(D,!0);y((T,P,z)=>{h(E,T),A.disabled=i.empty||i.applying,h(x,P),D.disabled=i.empty||i.applying,h(C,z)},[()=>a("Close"),()=>a("Discard all"),()=>a("Apply")]),J("click",S,()=>n(!1)),J("click",A,()=>i.clear()),J("click",D,()=>{f()}),v(b,k)};let g=c(()=>a("Pending changes"));En(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 S=tb(),E=Ie(S);{var A=T=>{var P=qg(),z=m(P,!0);y(Y=>h(z,Y),[()=>a("Nothing is staged")]),v(T,P)},x=T=>{var P=eb(),z=Ie(P);je(z,21,()=>i.changes,ie=>ie.id,(ie,de)=>{const G=c(()=>l(t(de)));var re=Jg(),le=w(re),Z=w(le),te=m(Z,!0),j=d(Z,2),U=m(j,!0),me=d(le,2);je(me,16,()=>t(de).calls,se=>se,(se,M)=>{var ue=$g(),ve=m(ue,!0);y(()=>h(ve,M)),v(se,ue)});var ke=d(me,2);{var fe=se=>{var M=Qg(),ue=w(M);je(ue,21,()=>t(de).lines,ve=>ve.label,(ve,be)=>{var Ee=Xg(),q=w(Ee),Q=m(q,!0),O=d(q),W=m(O,!0),ce=d(O),he=m(ce,!0);y(()=>{h(Q,t(be).label),h(W,t(be).from??""),h(he,t(be).to??"")}),v(ve,Ee)}),v(se,M)};$(ke,se=>{t(de).lines.length>0&&se(fe)})}var Re=d(ke,2);{var xe=se=>{var M=Zg(),ue=m(M,!0);y(()=>{I(M,"data-testid",`change-error-${t(de).id}`),h(ue,t(G).error)}),v(se,M)};$(Re,se=>{t(G)&&!t(G).ok&&se(xe)})}y(se=>{I(re,"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,se)},[()=>a("Remove")]),J("click",j,()=>i.remove(t(de).id)),v(ie,re)});var Y=d(z,2),ne=m(Y,!0);y(ie=>h(ne,ie),[()=>a("{count} changes staged",{},t(o))]),v(T,P)};$(E,T=>{i.empty?T(A):T(x,-1)})}var D=d(E,2);{var C=T=>{{let P=c(()=>s.rpcLog.progress??{done:i.applied,total:t(o)}),z=c(()=>a("Cancel"));Vf(T,{get progress(){return t(P)},get cancelLabel(){return t(z)},oncancel:()=>{i.cancel()}})}};$(D,T=>{i.applying&&T(C)})}v(b,S)},$$slots:{buttons:!0,default:!0}})}mt()}kt(["click"]);const rb=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 sb(r){const{env:e,cli:n}=rb[r];return`${e} / ${n}`}const cc=Object.freeze(["auto","local","occulite","rega"]),ab={"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(ab));const ls={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"},ib=/\$\{(\w+)\}/gu;function vd(r,e){return r.template.replace(ib,(n,s)=>e(s))}const pd={"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}},ob=Object.keys(pd),lb=["BidCos-RF","HmIP-RF","VirtualDevices","BidCos-Wired"];function gd(r){return Object.prototype.hasOwnProperty.call(pd,r)}function db(r){return gd(r)?pd[r]:void 0}function cb(r){return db(r)?.installMode!==!1}function ub(r){const e=[];return r.name.trim()===""?e.push({code:"empty-name"}):gd(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 Yf=0;class uc extends Error{address;constructor(e,n){super(`invalid address ${JSON.stringify(e)}: ${n}`),this.name="AddressError",this.address=e}}const fb=/^\d+$/;function Ns(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===""||!fb.test(s))return;const a=Number.parseInt(s,10);return{address:r,device:n,index:a,channel:r,isDevice:!1,isChannel:!0,isMaintenance:a===Yf}}function hb(r){const e=Ns(r);if(!e)throw r===""?new uc(r,"empty"):new uc(r,"expected SERIAL or SERIAL:INDEX with a numeric index");return e}function Ls(r){return Ns(r)?.isDevice===!0}function mb(r){return Ns(r)?.isChannel===!0}function Js(r){return Ns(r)?.isMaintenance===!0}function xa(r){return hb(r).device}function xi(r,e){const n=Ns(r),s=Ns(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=Ns(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=Ns(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 vb(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 pb={ALWAYS:1,BURST:2,CONFIG:4,WAKEUP:8,LAZY_CONFIG:16};function gb(r){const e=typeof r=="number"?r:0,n=[];for(const[s,a]of Object.entries(pb))(e&a)!==0&&n.push(s);return n}function bd(r){return r.ROAMING===!0||r.ROAMING===1}const bb=["NONE","SENDER","RECEIVER"];function _b(r){return bb[r??0]??"NONE"}const yb=["HM-RCV-50","HMW-RCV-50","HmIP-RCV-50","CENTRAL"];function jo(r){return yb.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 _s(r){return r===void 0||r.trim()===""?[]:r.trim().split(/\s+/)}class Eb{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 _s(e.LINK_SOURCE_ROLES))fc(this.#a,s,n);for(const s of _s(e.LINK_TARGET_ROLES))fc(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=Ns(e);if(n)return this.#e.get(`${n.device}:${Yf}`)}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 fc(r,e,n){const s=r.get(e);s?s.push(n):r.set(e,[n])}const _d=8,Sb="SMOKE_DETECTOR",kb="HmIP-SWSD-Group",wb=/^\*GROUP_([1-8])$/;function $f(r){return`GROUP_${String(r)}`}function yd(r){return`*GROUP_${String(r)}`}function Xs(r){return wb.test(r)}function Xf(r){return r.TYPE===Sb&&(r.PARENT??"")!==""}function Ab(r){let e=!1;const n=[];for(let s=1;s<=_d;s+=1){const a=r[$f(s)];a!==void 0&&(e=!0,(a===!0||a===1)&&n.push(s))}return e?n:void 0}function Tb(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 Qf(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 Rb(r){const e=[];for(let n=1;n<=_d;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 xb(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<=_d;n+=1)if(!e.has(n))return n}function Ib(r){return{ADDRESS:yd(r),TYPE:kb,PARENT:"",CHILDREN:[],PARAMSETS:[],FLAGS:0}}function Db(r,e){return{added:e.filter(n=>!r.includes(n)),removed:r.filter(n=>!e.includes(n))}}const Nb="0123456789ABCEFGHJKLMNPQRSTUWXYZ",Cb=26;function ai(r){return r.replace(/[\s-]/g,"").toUpperCase()}function Bi(r){return/^[0-9A-F]{24}$/.test(ai(r))}const Pb=new RegExp(`^[0-7][${Nb}]{${String(Cb-1)}}$`);function hc(r){const e=ai(r);return/^[0-9A-F]{32}$/.test(e)||Pb.test(e)}function Mb(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 mc={SENDER_BROKEN:1,RECEIVER_BROKEN:2};function Al(r){const e=typeof r=="number"?r:0,n=(e&mc.SENDER_BROKEN)!==0,s=(e&mc.RECEIVER_BROKEN)!==0;return{senderBroken:n,receiverBroken:s,broken:n||s,unknownBits:e&-4}}function Zf(r){return sa(r)&&!Js(r.ADDRESS)&&_s(r.LINK_SOURCE_ROLES).length>0}function Ob(r){return sa(r)&&!Js(r.ADDRESS)&&_s(r.LINK_TARGET_ROLES).length>0}function Lb(r,e){if(!Zf(r)||!Ob(e))return[];const n=new Set(_s(e.LINK_TARGET_ROLES));return _s(r.LINK_SOURCE_ROLES).filter(s=>n.has(s))}function Fb(r,e){return r.ADDRESS!==e.ADDRESS&&Lb(r,e).length>0}function Jf(r){return r.channels().filter(e=>Zf(e))}function Ed(r){return typeof r=="object"&&r!==null&&"explicitDouble"in r&&typeof r.explicitDouble=="number"}function vc(r){return typeof r=="number"?r:Ed(r)?r.explicitDouble:void 0}function Gb(r,e){const n=vc(r),s=vc(e);return n!==void 0||s!==void 0?n===s:r===e}const pc={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=="" 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."}}},gc={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 Ub(r){return Object.prototype.hasOwnProperty.call(pc,r)?pc[r]:Object.prototype.hasOwnProperty.call(gc,r)?gc[r]:void 0}function Bb(r){return{name:r,params:[],returns:"",help:{}}}new TextDecoder("utf-8",{fatal:!0});const Vb={WRITE:2};function Yr(r){return(r.OPERATIONS&Vb.WRITE)!==0}function Ps(r){if(!r)return;const e=r.VALUE_LIST;return Array.isArray(e)?e:void 0}function eh(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 eh(r,n)}function Hb(r,e){if(!(typeof e!="number"||!r.SPECIAL))return r.SPECIAL.find(n=>n.VALUE===e)}function zb(r,e){return Hb(r,e)!==void 0}function Sd(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 th="100%",jb="�C",Wb="°C",Kb="°C";function ro(r){const e=r?.UNIT;return e===void 0||e===""||e==='""'?"":e===th?"%":e===jb||e===Wb?Kb:e}function Yb(r){return r?.UNIT===th}function nh(r){return Yb(r)?100:1}function aa(r,e){if(r!==void 0)return rh(r*nh(e))}function bc(r,e){if(r!==void 0)return rh(r/nh(e))}function rh(r){return Number.isFinite(r)?Number.parseFloat(r.toPrecision(10)):r}const qb=[.1,1,5,10,60,300,600,3600],_c=["BASE_100_MS","BASE_1_S","BASE_5_S","BASE_10_S","BASE_1_M","BASE_5_M","BASE_10_M","BASE_1_H"],$b=31,Xb="NOT_USED";function sh(r){return r?.SPECIAL?.find(e=>e.ID===Xb)?.VALUE}function kd(r){return Math.round(r*10)/10}const Qb={"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",Zb="_FACTOR",Ec="_UNIT",Jb="_VALUE",Sc="_TIME";function ho(r){const e=[];for(const[n,s]of Object.entries(r)){const a=n_(r,n,s)??r_(r,n,s);a&&e.push(a)}return e}function wd(r,e){return e_(r[e.unitParam],r[e.countParam],e)}function e_(r,e,n){const s=t_(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:kd(a.seconds*i),unitIndex:s,unitSeconds:a.seconds,count:i,maximal:s===n.units.length-1&&i===n.maxCount}}function t_(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 ah(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=kd(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 Ad(r,e){const n=ah(r,e);if(n)return{[e.unitParam]:n.unitIndex,[e.countParam]:n.count}}function ih(r){const e=r.units.at(-1);return e===void 0?0:kd(e.seconds*r.maxCount)}function n_(r,e,n){if(!e.endsWith(yc))return;const s=e.slice(0,-yc.length),a=`${s}${Zb}`,i=r[a];if(!i)return;const o=oh(Ps(n)??_c,l=>qb[_c.indexOf(l)]);if(o)return{name:s.endsWith(Sc)?s.slice(0,-Sc.length):s,kind:"base-factor",unitParam:e,countParam:a,units:o,maxCount:Xn(i,"MAX")??$b}}function r_(r,e,n){if(!e.endsWith(Ec))return;const s=e.slice(0,-Ec.length),a=`${s}${Jb}`,i=r[a],o=Ps(n);if(!i||!o||o.length===0)return;const l=Xn(i,"MAX"),f=oh(o,p=>Qb[p]);if(!(l===void 0||!f))return{name:s,kind:"unit-value",unitParam:e,countParam:a,units:f,maxCount:l}}function oh(r,e){const n=[];for(const s of r){const a=e(s);if(a===void 0)return;n.push({name:s,seconds:a})}return n}const s_=new Set;function a_(r){return s_.has(r)?"name":"index"}function Tl(r,e,n={}){const s=Ed(r)?r.explicitDouble:r;if(!e)return typeof s=="boolean"||typeof s=="string"?s:String(s);switch(e.TYPE){case"ACTION":case"BOOL":return i_(s);case"FLOAT":{const a=Td(dh(Number.parseFloat(String(s))),e,n);return n.explicitDouble===!1?a:{explicitDouble:a}}case"ENUM":return o_(s,e,n);case"INTEGER":return lh(s,e,n);case"STRING":return String(s);default:return String(s)}}function i_(r){if(r==="false")return!1;if(typeof r=="string"){const e=Number(r);return Number.isNaN(e)?!0:e!==0}return!!r}function o_(r,e,n){const s=Ps(e);if(!s)return lh(r,e,n);if(typeof r=="string"){const i=eh(e,r);if(i!==void 0)return n.enumAs==="name"?r:i}const a=l_(r);return a===void 0?String(r):n.enumAs==="name"?s[a]??String(r):Td(a,e,n)}function l_(r){if(typeof r=="boolean")return Number(r);const e=Number.parseInt(String(r),10);return Number.isFinite(e)?e:void 0}function lh(r,e,n){return typeof r=="boolean"?Number(r):Td(d_(r),e,n)}function d_(r){return dh(Number.parseInt(String(r),10))}function dh(r){return Number.isFinite(r)?r:0}function Td(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 c_=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=Ed(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 kc(r,a,n,!0);case"FLOAT":return kc(r,a,n,!1);case"ENUM":return u_(r,a,n);case"STRING":return f_(r,a,s);default:return typeof a=="object"?[vr(r,"wrong-type",`${r} expects a scalar, got ${ii(a)}`)]:[]}}function kc(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}`)]:zb(n,e)?[]:ch(r,e,n):[vr(r,"not-finite",`${r} is ${e}, which XML-RPC cannot encode`)]}function u_(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)]:ch(r,e,n)}function f_(r,e,n){if(typeof e!="string")return[vr(r,"wrong-type",`${r} expects a string, got ${ii(e)}`)];const s=n.maxStringLength??c_;return e.length>s?[vr(r,"string-too-long",`${r} is longer than ${s} characters`,s)]:[]}function ch(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 h_(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 m_(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 S=Object.prototype.hasOwnProperty.call(e,b);if(!Yr(k)){S&&l.push(...Wo(b,e[b],k)),o.push({param:b,reason:"not-writable"});continue}const E=S?e[b]:r[b]??k.DEFAULT,A=Tl(E,k,p);if(!f&&v_(r,b,E,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 m_(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 v_(r,e,n,s,a){if(!Object.prototype.hasOwnProperty.call(r,e))return!1;const i={...a,explicitDouble:!1};return Gb(Tl(r[e],s,i),Tl(n,s,i))}function p_(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",ds=0,g_={id:ds,key:"expert",name:{de:"Experte",en:"Expert"},description:{de:"Alle Parameter des Verknuepfungs-Parametersatzes",en:"All link paramset parameters"},params:{}};function b_(r,e){return r!==""?r:"CHANNEL_OPERATION_MODE"in e?"shutter":"blind"}function __(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 y_(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=b_(l,n)}const i={deviceType:e.deviceType,channel:e.channel,channelMode:a},o=r.find(l=>l.when.every(f=>__(f,i)));return{...o===void 0?{}:{branch:o},...a===void 0?{}:{channelMode:a}}}function E_(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 S_{#e;constructor(e){this.#e=e}async profilesFor(e,n){const s=await this.#e.receiverTypeAliases(),a=wc(e,s),o=[...(await this.#e.receiverProfiles(a))?.senders[n]??[]];return o.some(l=>l.id===ds)||o.push(g_),o.sort((l,f)=>l.id-f.id)}async linkMetadataFor(e,n){const s=await this.#e.receiverTypeAliases();return(await this.#e.receiverProfiles(wc(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=A_(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===ds||Ac(a,e)!==void 0))return a;let i,o;for(const l of[...n].sort((f,p)=>f.id-p.id)){const f=Ac(l,e);f!==void 0&&k_(f,o)&&(o=f,i=l)}return i??a}async masterFormId(e){return E_(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 E=await y_(f.branches,i,n);E.branch&&(p=E.branch.controls),g=E.channelMode}const b=await this.#e.optionPresets(),k=await this.#e.crossValidations(),S=T_(n,o).map(([E,A])=>{const x=b[o?.optionPresets?.[E]??""],D={name:E,description:A,visible:R_(E,o,s)};return x===void 0?D:{...D,preset:x}});return{channelType:e,parameters:S,...p?{controls:p}:{},...l?.internalKey?{internalKey:l.internalKey}:{},...g===void 0?{}:{channelMode:g},problems:k.filter(E=>x_(E,n)).filter(E=>!I_(E,s)).map(E=>({id:E.id,errorKey:E.errorKey,params:uh(E)}))}}}function wc(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 Ac(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(!w_(o,e[i]))return;n+=1,o.kind==="fixed"&&(s+=1)}return n===0?void 0:{present:n,fixed:s,missing:a}}function k_(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 w_(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 A_(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 T_(r,e){const n=Sd(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 R_(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 uh(r){return r.rule==="between"?[r.param,r.minParam,r.maxParam]:[r.paramA,r.paramB]}function x_(r,e){return uh(r).every(n=>n in e)}function I_(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 fh(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 D_(r,e){return fh(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 N_=["CONFIG_PENDING","DUTY_CYCLE","FAULT_REPORTING","LOWBAT","LOW_BAT","SABOTAGE","UNREACH","STICKY_UNREACH","UPDATE_PENDING"],hh="ERROR",C_=["STICKY_UNREACH","SABOTAGE"];function P_(r){return N_.includes(r)||r.startsWith(hh)}function ao(r){return C_.includes(r)||r.startsWith(hh)}function M_(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 O_=[{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 L_(r){const e={};for(const[n,s]of Object.entries(r)){const a={};for(const[i,o]of Object.entries(s))a[i]=U_(io(o[0]),io(o[1]));e[n]=a}return e}function F_(r){const e=io(r);if(e!==void 0)return O_.find(n=>e>=n.min)}function Ia(r){const e=r.DESCRIPTION?.trim()??"";return e===""?r.ADDRESS:e}function Tc(r,e){const n=r.INTERFACE??"";if(n==="")return"";const s=e.find(a=>a.ADDRESS===n);return s?Ia(s):n}const Rc=["RSSI_DEVICE","RSSI_PEER"];class G_{#e={};#n;constructor(e={}){this.#n=e.centralAddress}get centralAddress(){return this.#n}setCentralAddress(e){this.#n=e}applyRssiInfo(e){this.#e=L_(e)}applyHmipValue(e,n,s){const a=this.#n,i=io(s);return a===void 0||i===void 0||!Rc.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 Rc){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 U_(r,e){const n={};return r!==void 0&&(n.rx=r),e!==void 0&&(n.tx=e),n}const xl=6,xc=["switch","marginal","unheard","keep","unmeasured","roaming"];function B_(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)=>xc.indexOf(o.verdict)-xc.indexOf(l.verdict)||(l.gain??Number.NEGATIVE_INFINITY)-(o.gain??Number.NEGATIVE_INFINITY)||o.address.localeCompare(l.address))}const mh=8192;class V_{#e=[];#n;constructor(e=mh){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 H_(r,e){return e.interfaceName!==void 0&&r.interfaceName!==e.interfaceName||!Ic(r.address??"",e.address)||!Ic(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 z_(r,e){return r.filter(n=>H_(n,e))}function Ic(r,e){return e===void 0||e===""?!0:r.toLowerCase().includes(e.toLowerCase())}const Vi=1,Dc=8,Nc=255,mo=32,Cc=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 Pc=Object.freeze({room:{name:{de:"Räume",en:"Rooms"},tree:[]},function:{name:{de:"Gewerke",en:"Functions"},tree:[]}});function j_(){return{format:Vi,revision:0,objects:{},enums:{room:{name:{...Pc.room?.name},tree:[]},function:{name:{...Pc.function?.name},tree:[]}}}}const W_=/^[a-z0-9][a-z0-9-]*$/,K_=/^[a-z0-9-]+$/;function Rd(r){const e=r.indexOf(".");if(!(e<=0||e===r.length-1))return{interfaceName:r.slice(0,e),address:r.slice(e+1)}}function Y_(r,e){return`${r}.${e}`}function Il(r){const e=Rd(r);if(!e)throw new Tt("invalid-ref",`${r} is not <interface>.<address>`);return e}function da(r){return r.length<=mo&&W_.test(r)}function Mc(r){if(!da(r))throw new Tt("invalid-id",`${r} is not a valid id`);return r}function Dl(r){return r.length<=mo&&K_.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(vh(e)>Nc)throw new Tt("invalid-name",`a name may not be longer than ${String(Nc)} bytes`);return e}function vh(r){return new TextEncoder().encode(r).length}function ya(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 q_(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 Ei(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 ph(r,e){return new Set(Ei(r,e).map(n=>n.path))}function $_(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($_(r)>Dc)throw new Tt("too-deep",`a tree may not be deeper than ${String(Dc)} levels`)}function xs(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function X_(r){if(!xs(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"||ya(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(!xs(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(vh(JSON.stringify(r))>Cc)throw new Tt("invalid-id",`meta may not be larger than ${String(Cc)} bytes`);return r}function Q_(r){if(!xs(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=gh(r.children);return{id:e,name:n,...typeof s=="string"?{icon:s}:{},...a.length>0?{children:a}:{}}}function gh(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=>Q_(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 Z_(r,e){if(!da(r))throw new Tt("invalid-id",`${r} is not a valid enum id`);if(!xs(e))throw new Tt("invalid-name",`enum ${r} has to be an object`);const n=Pl(e.name),s=gh(e.tree);return Nl(s),{name:n,tree:s}}function Pl(r){if(!xs(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(!xs(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(!xs(a))throw new Tt("unknown-enum","enums has to be an object");for(const[f,p]of Object.entries(a))s[f]=Z_(f,p)}const i=bh(s),o={},l=r.objects;if(l!=null){if(!xs(l))throw new Tt("unknown-object","objects has to be an object");for(const[f,p]of Object.entries(l)){Il(f);const g=X_(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 bh(r){const e=new Set;for(const[n,s]of Object.entries(r))for(const a of ph(n,s))e.add(a);return e}function Oc(r,e){return JSON.stringify(Ol(r),void 0,e)}function J_(r,e){return Oc({...r,revision:0})===Oc({...e,revision:0})}function Ol(r){if(Array.isArray(r))return r.map(e=>Ol(e));if(xs(r)){const e={};for(const n of Object.keys(r).sort())e[n]=Ol(r[n]);return e}return r}function Lc(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 t1(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?e1(a):{...a,children:i}})}function e1(r){return{id:r.id,name:r.name,...r.icon===void 0?{}:{icon:r.icon}}}function t1(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 n1=1e3;let r1=class _h{#e;#n;#t;#s=[];#a;#r;#i;constructor(e={}){const n=e.document??j_();this.#e=n.revision,this.#n=new Map(Object.entries(n.objects)),this.#t=new Map(Object.entries(n.enums)),this.#a=e.eventHistory??n1,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??{}:s1(s?.meta??{},n.meta);return this.#l(e,Va(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,Va(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=Va(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(Mc(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([...ph(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);Mc(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(S=>S.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 T=n.parent??s;if(Fs(T,e))throw new Tt("invalid-move",`${e} cannot be moved under itself`);g=this.#u(s,T),b=T}const k=Hi(b,o.id),S=k!==e;if(S&&(g.length===0?i.tree:Gs(i.tree,g)?.children??[]).some(P=>P.id===o.id))throw new Tt("duplicate-id",`${k} exists`);const E={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??(S?void 0:Lc(i.tree,a)),D=Ll(A,g,E,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 S?(this.#h(e,k),C.push({kind:"node.moved",enum:s,from:e,to:k})):n.position!==void 0&&x!==Lc(i.tree,a)?C.push({kind:"node.moved",enum:s,from:e,to:e}):C.push({kind:"node.updated",enum:s,path:e,value:E}),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 J_(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=bh(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=ya(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=ya(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=ya(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,Va(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,Va(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 _h({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 Va(r,e,n,s){return s?{name:r,enums:e,meta:n,orphaned:!0}:{name:r,enums:e,meta:n}}function s1(r,e){const n={...r};for(const[s,a]of Object.entries(oo(e)))a===null?delete n[s]:n[s]=a;return oo(n)}function yh(r,e,n){return e?.name[n]??e?.name.en??r}function Fc(r,e,n={}){const s=new Set;for(const i of e){const o=ya(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 Ei(i,o))s.has(l.path)&&!a.includes(l.node.name)&&a.push(l.node.name);return a}function a1(r){const e={};for(const[n,s]of Object.entries(r))e[n]=Ei(n,s);return e}function i1(r,e,n={}){return{name:e.name,rooms:Fc(r,e.enums,{...n,enumId:"room"}),functions:Fc(r,e.enums,{...n,enumId:"function"}),paths:e.enums,orphaned:e.orphaned===!0}}const o1=[[/ä/g,"ae"],[/ö/g,"oe"],[/ü/g,"ue"],[/ß/g,"ss"],[/å/g,"a"],[/æ/g,"ae"],[/ø/g,"oe"]];function Gc(r){let e=r.toLowerCase();for(const[n,s]of o1)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 Eh(r,e=[]){const n=new Set(e),s=Gc(r)===""?"node":Gc(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 Sh={"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 l1(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 d1=["en","de"];class c1{language;#e;#n;constructor(e,n={}){this.language=e,this.#e=n.catalogue??Sh;const s=n.fallbacks??d1;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=l1(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 u1(r,e={}){return new c1(r,e)}class Uc{#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,pa(e))??e}deviceModel(e){return this.#n(n=>n.deviceModels,pa(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(...pa(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,pa(n))??n}parameterHelp(e,n){return this.#n(s=>s.parameterHelp,qo(e,n))}uiLabel(e){return this.#n(n=>n.uiLabels,xd([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 xd((n===r?[r]:[r,n]).flatMap(a=>{const i=pa(a);if(e===void 0||e==="")return i;const o=pa(e).map(l=>`${l}|${a}`);return[...o,...o.map(l=>l.toUpperCase()),...i]}))}function pa(r){return xd([r,r.toUpperCase()])}function xd(r){return[...new Set(r)]}const f1={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"}},h1={...Sh,...f1},Id=["de","en"],Gl="en",m1={de:"Deutsch",en:"English",tr:"Türkçe"};function kh(){if(typeof navigator>"u")return[];const r=navigator.languages;return r!==void 0&&r.length>0?r:navigator.language===""?[]:[navigator.language]}function v1(r=kh()){for(const e of r){const n=e.toLowerCase().split("-")[0],s=Id.find(a=>a===n);if(s!==void 0)return s}return Gl}function p1(r,e=kh()){return(r===void 0||r==="auto"?void 0:Id.find(s=>s===r))??v1(e)}class g1{#e=N(Gl);#n=c(()=>u1(t(this.#e),{catalogue:h1}));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 b1=_("<option> </option>"),_1=_('<select class="hmm-select hmm-language svelte-oq8zre"><option> </option><!></select>');function y1(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=_1(),f=w(l),p=m(f,!0);f.value=f.__value="auto";var g=d(f);je(g,16,()=>Id,k=>k,(k,S)=>{var E=b1(),A=m(E,!0),x={};y(()=>{h(A,m1[S]),x!==(x=S)&&(E.value=(E.__value=x)??"")}),v(k,E)});var b;Qt(l),y(()=>{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))}),J("change",l,k=>{n(k.currentTarget.value),i()?.(n())}),v(r,l),mt()}kt(["change"]);function E1(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 Bc(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 S1=_('<button type="button" class="hmm-multiselect-link svelte-vbwhwd"> </button> <button type="button" class="hmm-multiselect-link svelte-vbwhwd"> </button>',1),k1=_('<span class="hmm-multiselect-check" aria-hidden="true"> </span>'),w1=_('<span class="hmm-multiselect-hint svelte-vbwhwd"> </span>'),A1=_('<span class="hmm-multiselect-description svelte-vbwhwd"> </span>'),T1=_('<span class="hmm-multiselect-lines svelte-vbwhwd"><span class="hmm-multiselect-line svelte-vbwhwd"><span class="hmm-multiselect-label svelte-vbwhwd"> </span> <!></span> <!></span>'),R1=_("<span> </span>"),x1=_('<li><button type="button" role="option" tabindex="-1"><!> <!></button></li>'),I1=_('<li class="hmm-multiselect-empty svelte-vbwhwd">—</li>'),D1=_('<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>'),N1=_('<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),S=B(e,"inline",3,!1),E=N(!1),A=N(""),x=N(void 0),D=N(void 0),C=N(void 0),T=N(0);const P=`hmm-multiselect-${Math.random().toString(36).slice(2,8)}`,z=c(()=>new Set(n())),Y=c(()=>E1(e.options,t(A))),ne=c(()=>t(E)&&t(Y)[t(T)]?`${P}-${t(T)}`:void 0),ie=c(()=>n().length===0?a():f()?f()(n(),e.options):n().length===1?e.options.find(q=>q.value===n()[0])?.label??n()[0]??"":`${n().length}`);function de(q){n(q),b()?.(q)}function G(){const q=t(Y).findIndex(Q=>t(z).has(Q.value));u(T,q<0?0:q,!0),u(E,!0)}function re(q){u(E,!1),q&&t(D)?.focus()}function le(q){if(q.disabled!==!0){if(!s()){de([q.value]),re(!0);return}de(t(z).has(q.value)?n().filter(Q=>Q!==q.value):[...n(),q.value])}}function Z(){de(t(Y).filter(q=>q.disabled!==!0).map(q=>q.value))}function te(){de([])}function j(q){t(E)&&t(x)&&q.target instanceof Node&&!t(x).contains(q.target)&&u(E,!1)}lt(()=>{t(A),u(T,0)}),lt(()=>{if(!t(E)||!t(C))return;const q=t(C).querySelector(`#${P}-${t(T)}`);typeof q?.scrollIntoView=="function"&&q.scrollIntoView({block:"nearest"})});function U(q){switch(q.key){case"ArrowDown":q.preventDefault(),u(T,Bc(t(Y),t(T),1),!0);break;case"ArrowUp":q.preventDefault(),u(T,Bc(t(Y),t(T),-1),!0);break;case"Enter":{q.preventDefault();const Q=t(Y)[t(T)];Q&&le(Q);break}case"Escape":q.preventDefault(),q.stopPropagation(),re(!0);break;case"Tab":re(!1);break}}function me(q){!t(E)&&(q.key==="ArrowDown"||q.key==="ArrowUp")&&(q.preventDefault(),G())}function ke(q){q.key==="Escape"&&t(E)&&re(!0)}function fe(q){return!!q.hint||!!q.description}function Re(q){q.focus()}var xe=N1();wr("mousedown",la,j),wr("keydown",la,ke);let se;var M=w(xe),ue=w(M),ve=m(ue,!0);_n(M,q=>u(D,q),()=>t(D));var be=d(M,2);{var Ee=q=>{var Q=D1(),O=w(Q),W=w(O);fo(()=>An(W,()=>t(A),F=>u(A,F))),Nf(W,F=>Re?.(F));var ce=d(W,2);{var he=F=>{var R=S1(),L=Ie(R),ee=m(L,!0),_e=d(L,2),Ne=m(_e,!0);y(()=>{h(ee,o()),h(Ne,l())}),J("click",L,Z),J("click",_e,te),v(F,R)};$(ce,F=>{s()&&F(he)})}var ge=d(O,2),ye=w(ge);je(ye,19,()=>t(Y),F=>F.value,(F,R,L)=>{var ee=x1(),_e=w(ee);let Ne;var Fe=w(_e);{var We=K=>{var H=k1(),Ce=m(H,!0);y(Oe=>h(Ce,Oe),[()=>t(z).has(t(R).value)?"☑":"☐"]),v(K,H)};$(Fe,K=>{s()&&K(We)})}var tt=d(Fe,2);{var rt=K=>{var H=T1(),Ce=w(H),Oe=w(Ce),Ke=m(Oe,!0),pe=d(Oe,2);{var De=Le=>{var Ye=w1(),Xe=m(Ye,!0);y(()=>h(Xe,t(R).hint)),v(Le,Ye)};$(pe,Le=>{t(R).hint&&Le(De)})}var Pe=d(Ce,2);{var Ge=Le=>{var Ye=A1(),Xe=m(Ye,!0);y(()=>{I(Ye,"title",t(R).description),h(Xe,t(R).description)}),v(Le,Ye)};$(Pe,Le=>{t(R).description&&Le(Ge)})}y(Le=>{I(Ce,"title",Le),h(Ke,t(R).label)},[()=>[t(R).label,t(R).hint].filter(Boolean).join(" ")]),v(K,H)},we=c(()=>fe(t(R))),Te=K=>{var H=R1(),Ce=m(H,!0);y(()=>h(Ce,t(R).label)),v(K,H)};$(tt,K=>{t(we)?K(rt):K(Te,-1)})}y((K,H,Ce)=>{I(_e,"id",`${P}-${t(L)}`),Ne=St(_e,1,"hmm-multiselect-option svelte-vbwhwd",null,Ne,{"hmm-multiselect-two-lines":K,"hmm-multiselect-selected":H,"hmm-multiselect-highlight":t(L)===t(T)}),I(_e,"aria-selected",Ce),_e.disabled=t(R).disabled===!0},[()=>fe(t(R)),()=>t(z).has(t(R).value),()=>t(z).has(t(R).value)]),J("mousedown",_e,K=>K.preventDefault()),J("mousemove",_e,()=>u(T,t(L),!0)),J("click",_e,()=>le(t(R))),v(F,ee)});var ae=d(ye,2);{var V=F=>{var R=I1();v(F,R)};$(ae,F=>{t(Y).length===0&&F(V)})}_n(ge,F=>u(C,F),()=>t(C)),y(()=>{I(W,"placeholder",i()),I(W,"aria-label",i()),I(W,"aria-controls",`${P}-list`),I(W,"aria-activedescendant",t(ne)),I(ge,"aria-multiselectable",s()),I(ge,"id",`${P}-list`),I(ge,"aria-label",g())}),J("keydown",W,U),v(q,Q)};$(be,q=>{t(E)&&q(Ee)})}_n(xe,q=>u(x,q),()=>t(x)),y(()=>{se=St(xe,1,"hmm-multiselect svelte-vbwhwd",null,se,{"hmm-multiselect-inline":S()}),I(xe,"data-testid",k()),I(M,"aria-expanded",t(E)),I(M,"aria-controls",`${P}-list`),I(M,"aria-label",g()),M.disabled=p(),h(ve,t(ie))}),J("click",M,()=>t(E)?re(!0):G()),J("keydown",M,me),v(r,xe),mt()}kt(["click","keydown","mousedown","mousemove"]);async function wh(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 Ah(r,e,n,s,a){await r.request("rpc.call",e,"suppressServiceMessages",[n,s,a])}function C1(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 P1(r,e){return[...new Set([...ob,...e.map(n=>n.name).filter(n=>n!==""),...r])]}function Ul(r,e,n){return n!==""&&!gd(n)&&r.every((s,a)=>a===e||s.name!==n)}function M1(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 O1(r,e,n){const s=e[n]?.name??"";return Ul(e,n,s)?r.filter(a=>a!==s):[...r]}const L1=[9e5,18e5,36e5,144e5,0],Bl="default";function F1(r,e){const n=L1.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 G1(r,e){return r===void 0||r===e?Bl:String(r)}function U1(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 B1=_('<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),V1=_('<p class="hmm-autoack-question svelte-2iq8s1" data-testid="auto-ack-question-text"> </p> <p class="hmm-autoack-help svelte-2iq8s1"> </p>',1);function H1(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=B1(),g=Ie(p),b=m(g,!0),k=d(g,2),S=m(k,!0);y((E,A)=>{h(b,E),h(S,A)},[()=>a("Only new ones"),()=>a("Acknowledge existing")]),J("click",g,()=>i(e.onlynew)),J("click",k,()=>i(e.onacknowledge)),v(f,p)};let l=c(()=>a("Acknowledge the messages already in the list?"));En(r,{get title(){return t(l)},width:"480px",get onclose(){return e.oncancel},testId:"auto-ack-question",get open(){return n()},set open(f){n(f)},buttons:o,children:(f,p)=>{var g=V1(),b=Ie(g),k=m(b,!0),S=d(b,2),E=m(S,!0);y((A,x)=>{h(k,A),h(E,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 z1=_('<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>'),j1=_('<span class="hmm-config-error svelte-1xydm3c" data-testid="config-error"> </span>'),W1=_('<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),K1=_('<small data-testid="config-test-result"> </small>'),Ha=_("<option> </option>"),Y1=_('<small class="hmm-config-help svelte-1xydm3c" data-testid="config-callback-lite"> </small>'),q1=_('<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>'),$1=_('<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>'),X1=_('<button type="button" class="hmm-button" data-testid="config-trust-ca"> </button>'),Q1=_('<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>'),Z1=_('<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>'),J1=_('<button type="button" class="hmm-button" data-testid="config-pairing-cancel"> </button>'),ey=_('<button type="button" class="hmm-button" data-testid="config-pair"> </button>'),ty=_('<span class="hmm-config-buttons svelte-1xydm3c" data-testid="config-pairing"><!></span>'),ny=_('<span class="hmm-config-code svelte-1xydm3c" data-testid="config-pairing-code"> </span> <small class="hmm-config-help svelte-1xydm3c"> </small>',1),ry=_('<small class="hmm-config-help svelte-1xydm3c" data-testid="config-pairing-requesting"> </small>'),sy=_('<small class="hmm-config-note svelte-1xydm3c" data-testid="config-pairing-done"> </small>'),ay=_('<small class="hmm-config-warning svelte-1xydm3c" data-testid="config-pairing-failed"> </small>'),iy=_('<input type="checkbox" disabled="" data-testid="config-rega"/> <small class="hmm-config-help svelte-1xydm3c"> </small>',1),oy=_('<input type="checkbox" data-testid="config-rega"/> <small class="hmm-config-help svelte-1xydm3c"> </small>',1),ly=_('<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>'),dy=_('<small class="hmm-config-note svelte-1xydm3c" data-testid="config-auto-ack-existing-note"> </small>'),cy=_('<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),uy=_('<select class="hmm-select" data-testid="config-idle"><option> </option><!></select> <small class="hmm-config-help svelte-1xydm3c"> </small>',1),fy=_('<label class="hmm-config-row svelte-1xydm3c"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><!></span></label>'),hy=_('<span class="hmm-config-problem svelte-1xydm3c"> </span>'),my=_('<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>'),vy=_('<p data-testid="config-host-info" class="svelte-1xydm3c"> <span class="hmm-mono"> </span></p>'),py=_('<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"> <!> · AGPL-3.0-or-later · © 2014-2026 Sebastian "Hobbyquaker" Raff</p> <!> <p class="svelte-1xydm3c">HomeMatic und BidCoS sind eingetragene Warenzeichen der eQ-3 AG.</p></div></div>'),gy=_("<!> <!>",1);function by(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(""),S=N(!1);const E=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:sb(pe)})}const T=c(()=>s.app.config?.idleUnsubscribe);function P(pe){if(pe===0)return a("Never unsubscribe");const{unit:De,count:Pe}=U1(pe);return De==="hours"?a("{count} hours",{},Pe):De==="minutes"?a("{count} minutes",{},Pe):a("{count} seconds",{},Pe)}function z(pe){t(i)&&(pe===Bl?delete t(i).idleUnsubscribeMs:t(i).idleUnsubscribeMs=Number(pe))}const Y=c(()=>t(l)||t(i)===void 0||t(E)===void 0||JSON.stringify(Mi(t(i)))!==JSON.stringify(t(E))||t(o)!==(t(E).auth!==void 0));lt(()=>{if(n()&&t(i)===void 0){s.app.saveError="",u(Ee,!1),u(q,!1);const pe=s.app.config?.connection;u(i,pe?structuredClone(Mi(pe)):{host:"",interfaces:[...lb],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);ie=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(S,!1)}});const ne=c(()=>P1(t(i)?.interfaces??[],t(i)?.extraInterfaces??[]).map(pe=>({value:pe,label:pe})));let ie=[];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 re=c(()=>s.app.callbackAddresses!==void 0&&s.app.callbackAddresses.host===t(i)?.host.trim()?s.app.callbackAddresses:void 0),le=c(()=>{if(t(re)===void 0)return a("Automatic");const{address:pe,reason:De}=t(re).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(re)===void 0?t(de).map(pe=>({address:pe,label:pe})):t(re).addresses.map(pe=>{const De=[...t(re).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(re)===void 0||t(re).keepsConfigured===!0||D("ip")||t(i)?.local===!0||pe==="127.0.0.1")return"";const De=t(re).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(re).auto.address}):t(re).hostAddress!==void 0&&!De.inSubnet&&pe!==t(re).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??""),me=c(()=>s.meta.manifest),ke=c(()=>s.host.info),fe=c(()=>t(me)===void 0?"":`${t(me).sources.map(pe=>`${pe.name} ${pe.version}`).join(", ")} (${t(me).generatedAt.slice(0,10)})`),Re=c(()=>t(ke)===void 0?"":`Electron ${t(ke).electron} · Chromium ${t(ke).chrome} · Node ${t(ke).node} · ${t(ke).platform} ${t(ke).arch}`);async function xe(){if(!t(i))return;u(f,!0);const pe=ae(),De=await s.app.save(pe,pe.autoAckStickyUnreach===!0&&t(q)?{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 se(){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],ie=[...ie,!0]}function ue(pe,De){const Pe=t(i)?.extraInterfaces[pe];if(!t(i)||!Pe||Pe.name===De)return;const Ge=M1(t(i).interfaces,t(i).extraInterfaces,pe,Pe.name,De,ie[pe]??!1);ie[pe]=Ge.ticked,t(i).extraInterfaces[pe]={...Pe,name:De},t(i).interfaces=Ge.interfaces}function ve(pe){t(i)&&(t(i).interfaces=O1(t(i).interfaces,t(i).extraInterfaces,pe),t(i).extraInterfaces=t(i).extraInterfaces.filter((De,Pe)=>Pe!==pe),ie=ie.filter((De,Pe)=>Pe!==pe))}const be=c(()=>s.serviceMessages.messages.filter(pe=>pe.datapoint==="STICKY_UNREACH"&&pe.value!==!1&&!li(pe.interfaceName,s.interfaces.typeOf(pe.interfaceName))).length);let Ee=N(!1),q=N(!1),Q;function O(pe){if(!t(i))return;const De=t(i).autoAckStickyUnreach;t(i).autoAckStickyUnreach=pe,u(q,!1),pe&&t(E)?.autoAckStickyUnreach!==!0&&t(be)>0&&(Q=De,u(Ee,!0))}function W(){t(i)&&(Q===void 0?delete t(i).autoAckStickyUnreach:t(i).autoAckStickyUnreach=Q),u(q,!1)}const ce=c(()=>s.interfaces.rega?.reason==="openccu-lite"&&t(i)!==void 0&&t(i).host.trim()===(t(E)?.host??"").trim()),he=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(E)?.host??"").trim()}),ge=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}`}),ye=c(()=>s.app.pairing);lt(()=>{t(ye)?.state==="approved"&&t(i)!==void 0&&(t(i).metaToken=t(ye).token,t(ye).fingerprint256!==""&&We("certificates",t(ye).fingerprint256),u(S,!0),s.app.pairing=void 0)});function ae(){const pe={...structuredClone(Mi(t(i))),...t(o)&&t(i)?.auth?{auth:{...t(i).auth}}:{}};return t(o)||delete pe.auth,pe}async function V(){if(!t(i))return;u(g,!0);const pe=t(i).host.trim(),De=await s.app.testConnection(ae());u(b,De,!0),u(k,pe,!0),u(g,!1)}async function F(){t(i)&&(u(S,!1),await s.app.pair(ae()))}function R(pe){t(i)&&(t(i).autoConfirmRegaInbox=pe)}const L={auto:()=>a("Automatic"),local:()=>a("This profile"),occulite:()=>"occulited",rega:()=>"ReGaHSS"},ee=c(()=>s.taxonomy.state),_e=c(()=>t(ee)===void 0?a("No store connected"):[L[t(ee).provider](),t(ee).reachable?a("Reachable"):a("Unreachable"),t(ee).reachable?t(ee).writable?a("Writable"):a("Read-only"):void 0,a("revision {revision}, {count} objects",{revision:t(ee).revision,count:t(ee).objects}),t(ee).implementation,t(ee).error].filter(De=>De!==void 0&&De!=="").join(" · ")),Ne=c(()=>t(ee)?.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 tt(pe,De){return t(i)?.systemTrust?.[pe]?.includes(De)===!0}function rt(){t(i)&&delete t(i).systemTrust}function we(pe){t(i)&&cc.some(De=>De===pe)&&(t(i).metaProvider=pe)}function Te(pe){t(i)&&(t(i).metaToken=pe)}function K(pe){t(i)&&(t(i).language=pe)}function H(pe,De){if(!t(i))return;const Pe=t(i).auth??{user:"",password:""};t(i).auth={...Pe,[pe]:De}}var Ce=gy(),Oe=Ie(Ce);{const pe=Pe=>{var Ge=W1(),Le=Ie(Ge),Ye=m(Le,!0),Xe=d(Le,2);{var ze=$e=>{var ft=z1(),yt=d(w(ft),1,!0);y(it=>h(yt,it),[()=>a("Saving and reconnecting…")]),v($e,ft)};$(Xe,$e=>{t(f)&&$e(ze)})}var Ze=d(Xe,2);{var dt=$e=>{var ft=j1(),yt=m(ft);y(it=>h(yt,`${it??""}: ${s.app.saveError??""}`),[()=>a("Error")]),v($e,ft)};$(Ze,$e=>{s.app.saveError!==""&&$e(dt)})}var pt=d(Ze,2),gt=m(pt,!0),Se=d(pt,2),Me=m(Se,!0);y(($e,ft,yt,it)=>{Le.disabled=$e,h(Ye,ft),h(gt,yt),Se.disabled=t(f)||!t(Y),h(Me,it)},[()=>t(g)||t(i)===void 0||t(i).host.trim()==="",()=>t(g)?a("Testing…"):a("Test connection"),()=>a("Cancel"),()=>a("Save & Restart")]),J("click",Le,()=>{V()}),J("click",pt,()=>n(!1)),J("click",Se,()=>{xe()}),v(Pe,Ge)};let De=c(()=>a("Settings"));En(Oe,{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 Ze=py(),dt=w(Ze),pt=w(dt),gt=w(pt),Se=w(gt),Me=m(Se,!0),$e=d(Se,2),ft=w($e),yt=w(ft),it=m(yt,!0),Wt=d(yt,2),Mt=w(Wt),Ot=d(Mt,2),Zt=m(Ot,!0),bn=d(Ot,2);{var on=qe=>{var ut=K1(),vt=m(ut,!0);y(()=>{St(ut,1,sp(t(b)?.reachable===!1||t(b)?.reason==="certificate"?"hmm-config-warning":"hmm-config-help"),"svelte-1xydm3c"),h(vt,t(ge))}),v(qe,ut)};$(bn,qe=>{t(ge)!==""&&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=Ha(),Yt=m(vt),qt={};y(()=>{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),yr=w(lr),tr=d(yr,2),Er=m(tr,!0),Qr=d(Wn,2),nr=w(Qr),as=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),nt=m(ct,!0),st=d(ct,2),Ve=w(st),Je=d(gt,2),at=w(Je),_t=m(at,!0),Rt=d(at,2);{var Vt=qe=>{var ut=Y1(),vt=m(ut,!0);y(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=$1(),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=Ha(),es=m(Cr,!0),os={};y(()=>{h(es,t(Sr).label),os!==(os=t(Sr).address)&&(Cr.value=(Cr.__value=os)??"")}),v(wn,Cr)});var nn=d(tn);{var In=wn=>{var Sr=Ha(),Cr=m(Sr,!0),es={};y(()=>{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=q1(),Cr=w(Sr),es=m(Cr,!0),os=d(Cr,2),Co=m(os,!0);y(Po=>{h(es,t(te)),h(Co,Po)},[()=>a("Use automatic")]),J("click",os,()=>{t(i)&&(t(i).callback.ip="")}),v(wn,Sr)};$(mn,wn=>{t(te)!==""&&wn(Bn)})}var $n=d(vt,2),yn=w($n),ir=m(yn,!0),or=d(yn,2),Nr=w(or),Ss=d(Nr,2),qs=m(Ss,!0),$s=d($n,2),fa=w($s),xo=m(fa,!0),Io=d(fa,2),Ua=w(Io),Do=d(Ua,2),No=m(Do,!0);y((wn,Sr,Cr,es,os,Co,Po,Im,Dm,Nm)=>{h(qt,wn),en.disabled=Sr,I(en,"title",Cr),h(Nt,t(le)),h(Jr,es),h(ir,os),Nr.disabled=Co,h(qs,Po),h(xo,Im),Ua.disabled=Dm,h(No,Nm)},[()=>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(Ua,()=>t(i).callback.binrpcPort,wn=>t(i).callback.binrpcPort=wn),v(qe,ut)};$(Rt,qe=>{t(he)?qe(Vt):qe(Ut,-1)})}var ln=d(Je,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),et=w(Qe);je(et,20,()=>cc,qe=>qe,(qe,ut)=>{var vt=Ha(),Yt=m(vt,!0),qt={};y(Dt=>{h(Yt,Dt),qt!==(qt=ut)&&(vt.value=(vt.__value=qt)??"")},[()=>L[ut]()]),v(qe,vt)});var bt;Qt(et);var sn=d(et,2),Rn=m(sn,!0),dr=d(gn,2);{var Nn=qe=>{var ut=Q1(),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(Ne).ca);var yn=X1(),ir=m(yn,!0);y((or,Nr)=>{yn.disabled=or,h(ir,Nr)},[()=>tt("cas",t($n).pem),()=>a("Trust the CA {name}",{name:t($n).subject})]),J("click",yn,()=>We("cas",t($n).pem)),v(Bn,yn)};$(fr,Bn=>{t(Ne).ca!==void 0&&Bn(qn)})}var Jr=d(tn,2),mn=m(Jr,!0);y((Bn,$n,yn,ir,or,Nr)=>{h(Yt,Bn),h(en,$n),h(Nt,`${yn??""}${t(Ne).certificate.altNames===void 0?"":` · ${t(Ne).certificate.altNames}`} \\u00b7 SHA-256
|
|
13
|
-
${t(Ne).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(Ne).url,code:t(Ne).code}),()=>a("{subject}, issued by {issuer}, valid until {validTo}",{subject:t(Ne).certificate.subject,issuer:t(Ne).certificate.issuer,validTo:t(Ne).certificate.validTo}),()=>tt("certificates",t(Ne).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.")]),J("click",nn,()=>We("certificates",t(Ne).certificate.fingerprint256)),v(qe,ut)};$(dr,qe=>{t(Ne)!==void 0&&qe(Nn)})}var Lr=d(dr,2);{var cr=qe=>{var ut=Z1(),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);y((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")]),J("click",Ft,rt),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),is=w(Ur),po=d(is,2);{var go=qe=>{var ut=ty(),vt=w(ut);{var Yt=Dt=>{var en=J1(),Ft=m(en,!0);y(Nt=>h(Ft,Nt),[()=>a("Cancel")]),J("click",en,()=>{s.app.cancelPairing()}),v(Dt,en)},qt=Dt=>{var en=ey(),Ft=m(en,!0);y((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")]),J("click",en,()=>{F()}),v(Dt,en)};$(vt,Dt=>{t(ye)?.state==="requesting"||t(ye)?.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=ny(),tn=Ie(Nt),nn=m(tn,!0),In=d(tn,2),fr=m(In,!0);y(qn=>{h(nn,t(ye).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=ry(),tn=m(Nt,!0);y(nn=>h(tn,nn),[()=>a("Asking the system…")]),v(Ft,Nt)},Dt=Ft=>{var Nt=sy(),tn=m(Nt,!0);y(nn=>h(tn,nn),[()=>a("Paired: the token is in the field above. Save to connect.")]),v(Ft,Nt)},en=Ft=>{var Nt=ay(),tn=m(Nt,!0);y(()=>h(tn,t(ye).message)),v(Ft,Nt)};$(vt,Ft=>{t(ye)?.state==="code"?Ft(Yt):t(ye)?.state==="requesting"?Ft(qt,1):t(S)?Ft(Dt,2):t(ye)?.state==="failed"&&Ft(en,3)})}v(qe,ut)};$(bo,qe=>{t(i).local!==!0&&qe(wi)})}var _o=d(pt,2),La=w(_o),Ai=w(La),yo=m(Ai,!0),Eo=d(Ai,2),X=w(Eo),Ae=w(X),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(ne)},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),Et=m(At,!0),xn=d(X,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(La,2),cn=d(w(Jt),2),Br=w(cn),Es=w(Br),Vr=m(Es,!0),Ir=d(Es,2),Ws=w(Ir);{var Fa=qe=>{var ut=iy(),vt=Ie(ut);Rr(vt,!1);var Yt=d(vt,2),qt=m(Yt,!0);y(Dt=>h(qt,Dt),[()=>a("Switched off: the system has no ReGaHSS")]),v(qe,ut)},So=qe=>{var ut=oy(),vt=Ie(ut),Yt=d(vt,2),qt=m(Yt,!0);y(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(ce)?qe(Fa):qe(So,-1)})}var ko=d(Br,2);{var wo=qe=>{var ut=ly(),vt=w(ut),Yt=m(vt,!0),qt=d(vt,2),Dt=w(qt),en=d(Dt,2),Ft=m(en,!0);y((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")]),J("change",Dt,Nt=>R(Nt.currentTarget.checked)),v(qe,ut)};$(ko,qe=>{t(ce)||qe(wo)})}var Ao=d(Jt,2),sr=w(Ao),Dr=m(sr,!0),ar=d(sr,2),Ks=w(ar),ca=w(Ks),Ga=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"));y1(To,{get language(){return t(qe)},get label(){return t(ut)},get autoLabel(){return t(vt)},testId:"config-language",onchange:K})}var ur=d(Ks,2),ua=w(ur),rm=m(ua,!0),sm=d(ua,2),Nd=w(sm),am=d(Nd,2),im=m(am,!0),Cd=d(ur,2),Pd=w(Cd),om=m(Pd,!0),lm=d(Pd,2),Ro=w(lm),Md=d(Ro,2),dm=m(Md,!0),cm=d(Md,2);{var um=qe=>{var ut=dy(),vt=m(ut,!0);y(Yt=>h(vt,Yt),[()=>a("{count} messages in the list are acknowledged when this is saved",{},t(be))]),v(qe,ut)};$(cm,qe=>{t(q)&&t(i).autoAckStickyUnreach===!0&&qe(um)})}var Od=d(Cd,2);{var fm=qe=>{var ut=fy(),vt=w(ut),Yt=m(vt,!0),qt=d(vt,2),Dt=w(qt);{var en=Nt=>{var tn=cy(),nn=Ie(tn),In=w(nn),fr=m(In,!0),qn={},Jr=d(nn,2),mn=m(Jr,!0);y((Bn,$n,yn)=>{h(fr,Bn),qn!==(qn=$n)&&(In.__value=qn),h(mn,yn)},[()=>P(t(T).pinnedMs),()=>P(t(T).pinnedMs),()=>a("Set at start ({option})",{option:"HMM_IDLE_UNSUBSCRIBE / --idle-unsubscribe"})]),v(Nt,tn)},Ft=Nt=>{var tn=uy(),nn=Ie(tn),In=w(nn),fr=m(In,!0),qn={},Jr=d(In);je(Jr,16,()=>F1(t(T).defaultMs,t(i).idleUnsubscribeMs),yn=>yn,(yn,ir)=>{var or=Ha(),Nr=m(or,!0),Ss={};y((qs,$s)=>{h(Nr,qs),Ss!==(Ss=$s)&&(or.value=(or.__value=Ss)??"")},[()=>P(ir),()=>String(ir)]),v(yn,or)});var mn;Qt(nn);var Bn=d(nn,2),$n=m(Bn,!0);y((yn,ir,or)=>{h(fr,yn),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(T).defaultMs)}),()=>G1(t(i).idleUnsubscribeMs,t(T).defaultMs),()=>a("With no page open, the event subscriptions are dropped after this time and taken up again when a page is opened")]),J("change",nn,yn=>z(yn.currentTarget.value)),v(Nt,tn)};$(Dt,Nt=>{t(T).pinnedMs!==void 0?Nt(en):Nt(Ft,-1)})}y(Nt=>h(Yt,Nt),[()=>a("Unsubscribe when idle")]),v(qe,ut)};$(Od,qe=>{t(T)!==void 0&&qe(fm)})}var Ld=d(Od,2),Fd=w(Ld),hm=m(Fd,!0),mm=d(Fd,2),Gd=w(mm),vm=d(Gd,2),pm=m(vm,!0),gm=d(Ld,2),Ud=w(gm),bm=m(Ud,!0),_m=d(Ud,2),Bd=w(_m),ym=d(Bd,2),Em=m(ym,!0),Vd=d(dt,2),Hd=w(Vd),Sm=m(Hd,!0),zd=d(Hd,2);je(zd,17,()=>t(i).extraInterfaces,eo,(qe,ut,vt)=>{const Yt=c(()=>ub(t(ut)));var qt=my(),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=hy(),$n=m(Bn,!0);y((yn,ir)=>{I(Bn,"data-testid",yn),h($n,ir)},[()=>`config-extra-problem-${String(vt)}`,()=>t(Yt).join(", ")]),v(mn,Bn)};$(qn,mn=>{t(Yt).length>0&&mn(Jr)})}y((mn,Bn,$n,yn,ir,or,Nr,Ss,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",yn),I(en,"aria-label",ir),I(Ft,"placeholder",or),I(Ft,"aria-label",Nr),I(Nt,"aria-label",Ss),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)}`]),J("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),J("click",fr,()=>ve(vt)),v(qe,qt)});var jd=d(zd,2),km=m(jd,!0),wm=d(Vd,2),Wd=w(wm),Kd=w(Wd),Am=d(Kd);{var Tm=qe=>{var ut=Zn();y(vt=>h(ut,`· ${vt??""}: ${t(fe)??""}`),[()=>a("Device data")]),v(qe,ut)};$(Am,qe=>{t(fe)!==""&&qe(Tm)})}var Rm=d(Wd,2);{var xm=qe=>{var ut=vy(),vt=w(ut),Yt=d(vt),qt=m(Yt,!0);y(()=>{h(vt,`${t(Re)??""} · `),h(qt,t(ke)?.logFile??"")}),v(qe,ut)};$(Rm,qe=>{t(Re)!==""&&qe(xm)})}y((qe,ut,vt,Yt,qt,Dt,en,Ft,Nt,tn,nn,In,fr,qn,Jr,mn,Bn,$n,yn,ir,or,Nr,Ss,qs,$s,fa,xo,Io,Ua,Do,No,wn,Sr,Cr,es,os)=>{h(Me,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(Er,tn),h(as,nn),h(Sn,In),Or.disabled=!t(o),rn(Or,t(i).auth?.user??""),h(nt,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")&&(et.value=(et.__value=bt)??"",Cn(et,bt)),h(Rn,t(_e)),h(Gr,Bn),rn(is,t(i).metaToken??""),h(ki,$n),h(yo,yn),h(Ue,ir),h(Et,or),h(rr,Nr),h(an,Ss),h(Vr,qs),h(Dr,$s),h(Ga,fa),h(rm,xo),h(im,Io),h(om,Ua),Rr(Ro,t(i).autoAckStickyUnreach===!0),h(dm,Do),h(hm,No),h(pm,wn),h(bm,Sr),h(Em,Cr),h(Sm,es),h(km,os),h(Kd,`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(he)?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),J("change",Xt,qe=>{t(i)&&qe.currentTarget.value!==""&&(t(i).host=qe.currentTarget.value)}),J("click",On,()=>{se()}),mr(yr,()=>t(i).tls,qe=>t(i).tls=qe),mr(He,()=>t(o),qe=>u(o,qe)),J("input",Or,qe=>H("user",qe.currentTarget.value)),J("input",Ve,qe=>H("password",qe.currentTarget.value)),J("change",et,qe=>we(qe.currentTarget.value)),J("input",is,qe=>Te(qe.currentTarget.value)),mr(kn,()=>t(i).autoDetect,qe=>t(i).autoDetect=qe),An(Nd,()=>t(i).writePaceMs,qe=>t(i).writePaceMs=qe),J("change",Ro,qe=>O(qe.currentTarget.checked)),An(Gd,()=>t(i).rpcLogFolder,qe=>t(i).rpcLogFolder=qe),mr(Bd,()=>t(l),qe=>u(l,qe)),J("click",jd,M),v(ze,Ze)};$(Ye,ze=>{t(i)&&ze(Xe)})}v(Pe,Le)},$$slots:{buttons:!0,default:!0}})}var Ke=d(Oe,2);H1(Ke,{get count(){return t(be)},onacknowledge:()=>u(q,!0),onlynew:()=>u(q,!1),oncancel:W,get open(){return t(Ee)},set open(pe){u(Ee,pe,!0)}}),v(r,Ce),mt()}kt(["click","change","input"]);var _y=_('<div class="hmm-toolbar-trailing svelte-1ld6r3r"><!></div>'),yy=_('<div class="hmm-toolbar svelte-1ld6r3r" role="toolbar"><div class="hmm-toolbar-group svelte-1ld6r3r"><!></div> <!></div>');function Ey(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=yy(),l=w(o),f=w(l);{var p=k=>{var S=wt(),E=Ie(S);Bs(E,s),v(k,S)};$(f,k=>{s()&&k(p)})}var g=d(l,2);{var b=k=>{var S=_y(),E=w(S);Bs(E,a),v(k,S)};$(g,k=>{a()&&k(b)})}y(()=>{I(o,"aria-label",n()),I(o,"data-testid",i())}),v(r,o)}const Sy=["address","device_address","channel_address","interface_address","team_address"];function ky(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 wy(r){return Sy.includes(r.type)}function $o(r){return(Ub(r)??Bb(r)).params.map(n=>({name:n.name,type:n.type,kind:ky(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 Vc(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 za(r){return typeof r=="object"?JSON.stringify(r):String(r)}function Ay(r,e){switch(r.kind){case"bool":return e===!0||e==="true";case"number":case"flags":return typeof e=="number"?e:Number.parseInt(za(e),10)||0;case"struct":{const n={};for(const s of Array.isArray(e)?e:[])s.key!==""&&(n[s.key]=Vc(s));return n}case"variant":{const n=e;return Vc({type:n.type,value:n.value})}case"json":return Ry(za(e));case"select":return/^-?\d+$/.test(za(e))?Number(e):za(e);default:return za(e)}}function Ty(r,e){return r.map((n,s)=>Ay(n,e[s]??Vl(n)))}function Ry(r){if(r.trim()==="")return[];try{return JSON.parse(r)}catch{return[]}}function xy(r){if(r.trim()==="")return!0;try{return JSON.parse(r),!0}catch{return!1}}var Iy=_("<span> </span>"),Dy=_("<!> <!>",1),Hc=_("<option> </option>"),Ny=_('<p class="hmm-console-hint svelte-17kjuug"> </p>'),Cy=_('<input type="checkbox"/>'),Py=_('<input class="hmm-input" type="number"/>'),My=_('<select class="hmm-select"></select>'),Oy=_('<label><input type="checkbox"/> <span> </span></label>'),Ly=_('<div class="hmm-console-flags svelte-17kjuug"><!> <span class="hmm-console-arg-type svelte-17kjuug"> </span></div>'),Fy=_('<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>'),Gy=_('<div class="hmm-console-struct svelte-17kjuug"><!> <button type="button" class="hmm-button">+</button></div>'),Uy=_('<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>'),By=_("<textarea></textarea>"),Vy=_('<input class="hmm-input"/>'),Hy=_('<span class="hmm-console-arg-type svelte-17kjuug"> </span>'),zy=_('<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>'),jy=_("<option></option>"),Wy=_('<span class="hmm-console-error svelte-17kjuug" data-testid="console-error"> </span>'),Ky=_('<section class="hmm-console-help svelte-17kjuug" data-testid="console-help-section"><h3 class="svelte-17kjuug"> </h3> <p data-testid="console-help"> </p></section>'),Yy=_('<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 qy(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(ae=>ae.ADDRESS)??[]),k=c(()=>Ty(t(p),t(i)));lt(()=>{n.console.load(t(l))}),lt(()=>{const ae=n.console.takeRecall(t(l));ae!==void 0&&ne(ae)});function S(ae){u(a,ae,!0),u(i,$o(ae).map(V=>Vl(V)),!0),u(o,void 0)}function E(ae,V){u(i,t(i).map((F,R)=>R===ae?V:F),!0)}function A(ae){const V=t(i)[ae];return Array.isArray(V)?V:[]}function x(ae){const V=t(i)[ae];return typeof V=="object"&&!Array.isArray(V)?V:{type:"string",value:""}}function D(ae){E(ae,[...A(ae),{key:"",type:"string",value:""}])}function C(ae,V,F){E(ae,A(ae).map((R,L)=>L===V?{...R,...F}:R))}function T(ae,V){E(ae,A(ae).filter((F,R)=>R!==V))}function P(ae,V,F){const R=typeof t(i)[ae]=="number"?t(i)[ae]:0;E(ae,F?R|V:R&~V)}async function z(){t(a)!==""&&u(o,await n.console.call(t(l),t(a),t(k)),!0)}function Y(ae){return typeof ae=="object"&&ae!==null&&!Array.isArray(ae)}function ne(ae){u(a,ae.method,!0);const V=$o(ae.method);u(i,V.map((F,R)=>{const L=ae.params[R];return F.kind==="struct"&&Y(L)?Object.entries(L).map(([ee,_e])=>({key:ee,type:typeof _e=="boolean"?"bool":typeof _e=="number"?"double":"string",value:String(_e)})):F.kind==="json"?JSON.stringify(L??[]):F.kind==="bool"?L===!0:F.kind==="number"||F.kind==="flags"?typeof L=="number"?L:0:L===void 0?Vl(F):String(L)}),!0),u(o,void 0)}var ie=Yy(),de=w(ie);{const ae=F=>{var R=Iy(),L=m(R);y(ee=>h(L,`${t(f).length??""} ${ee??""}`),[()=>s("Method")]),v(F,R)};let V=c(()=>s("RPC Console"));Ey(de,{get label(){return t(V)},trailing:ae,children:(F,R)=>{var L=Dy(),ee=Ie(L);{let Ne=c(()=>s("Send request")),Fe=c(()=>t(a)===""||n.console.running),We=c(()=>s("Please select method"));Ct(ee,{get title(){return t(Ne)},icon:"▸",get disabled(){return t(Fe)},get reason(){return t(We)},testId:"console-send",onclick:()=>{z()}})}var _e=d(ee,2);{let Ne=c(()=>s("Clear"));Ct(_e,{get title(){return t(Ne)},icon:"⌫",testId:"console-clear",onclick:()=>{u(o,void 0)}})}v(F,L)},$$slots:{trailing:!0,default:!0}})}var G=d(de,2),re=w(G),le=w(re),Z=m(le,!0);le.value=le.__value="";var te=d(le);je(te,17,()=>t(f),ae=>ae.name,(ae,V)=>{var F=Hc(),R=m(F,!0),L={};y(()=>{h(R,t(V).name),L!==(L=t(V).name)&&(F.value=(F.__value=L)??"")}),v(ae,F)});var j;Qt(re);var U=d(re,2),me=m(U),ke=d(U,2),fe=m(ke,!0),Re=d(G,2),xe=w(Re),se=w(xe),M=m(se,!0),ue=d(se,2);{var ve=ae=>{var V=Ny(),F=m(V,!0);y(R=>h(F,R),[()=>t(a)===""?s("Please select method"):s("No data")]),v(ae,V)};$(ue,ae=>{t(p).length===0&&ae(ve)})}var be=d(ue,2);je(be,19,()=>t(p),ae=>ae.name,(ae,V,F)=>{var R=zy(),L=w(R),ee=w(L),_e=d(ee),Ne=m(_e,!0),Fe=d(L,2);{var We=pe=>{var De=Cy();y(()=>{I(De,"id",`arg-input-${t(V).name}`),Rr(De,t(i)[t(F)]===!0)}),J("change",De,Pe=>E(t(F),Pe.currentTarget.checked)),v(pe,De)},tt=pe=>{var De=Py();y(Pe=>{I(De,"id",`arg-input-${t(V).name}`),rn(De,Pe)},[()=>String(t(i)[t(F)]??0)]),J("input",De,Pe=>E(t(F),Number(Pe.currentTarget.value))),v(pe,De)},rt=pe=>{var De=My();je(De,21,()=>Object.entries(t(V).options??{}),([Ge,Le])=>Ge,(Ge,Le)=>{var Ye=c(()=>qd(t(Le),2));let Xe=()=>t(Ye)[0],ze=()=>t(Ye)[1];var Ze=Hc(),dt=m(Ze),pt={};y(()=>{h(dt,`${ze()??""} (${Xe()??""})`),pt!==(pt=Xe())&&(Ze.value=(Ze.__value=pt)??"")}),v(Ge,Ze)});var Pe;Qt(De),y(Ge=>{I(De,"id",`arg-input-${t(V).name}`),Pe!==(Pe=Ge)&&(De.value=(De.__value=Pe)??"",Cn(De,Pe))},[()=>String(t(i)[t(F)]??"")]),J("change",De,Ge=>E(t(F),Ge.currentTarget.value)),v(pe,De)},we=pe=>{var De=Ly(),Pe=w(De);je(Pe,17,()=>Object.entries(t(V).options??{}),([Ye,Xe])=>Ye,(Ye,Xe)=>{var ze=c(()=>qd(t(Xe),2));let Ze=()=>t(ze)[0],dt=()=>t(ze)[1];var pt=Oy(),gt=w(pt),Se=d(gt,2),Me=m(Se,!0);y($e=>{Rr(gt,$e),h(Me,dt())},[()=>(t(i)[t(F)]&Number(Ze()))!==0]),J("change",gt,$e=>P(t(F),Number(Ze()),$e.currentTarget.checked)),v(Ye,pt)});var Ge=d(Pe,2),Le=m(Ge);y(Ye=>h(Le,`= ${Ye??""}`),[()=>String(t(i)[t(F)]??0)]),v(pe,De)},Te=pe=>{var De=Gy(),Pe=w(De);je(Pe,17,()=>A(t(F)),eo,(Le,Ye,Xe)=>{var ze=Fy(),Ze=w(ze),dt=d(Ze,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 Me=d(Se);Me.value=Me.__value="bool";var $e;Qt(dt);var ft=d(dt,2),yt=d(ft,2);y((it,Wt,Mt,Ot)=>{I(Ze,"aria-label",it),rn(Ze,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(yt,"aria-label",Ot)},[()=>`${t(V).name} ${String(Xe)} key`,()=>`${t(V).name} ${String(Xe)} type`,()=>`${t(V).name} ${String(Xe)} value`,()=>`${t(V).name} ${String(Xe)} remove`]),J("input",Ze,it=>C(t(F),Xe,{key:it.currentTarget.value})),J("change",dt,it=>C(t(F),Xe,{type:it.currentTarget.value})),J("input",ft,it=>C(t(F),Xe,{value:it.currentTarget.value})),J("click",yt,()=>T(t(F),Xe)),v(Le,ze)});var Ge=d(Pe,2);y(()=>I(Ge,"data-testid",`arg-${t(V).name}-add`)),J("click",Ge,()=>D(t(F))),v(pe,De)},K=pe=>{var De=Uy(),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 Ze=d(Pe,2);y((dt,pt)=>{I(Pe,"aria-label",`${t(V).name} type`),ze!==(ze=dt)&&(Pe.value=(Pe.__value=ze)??"",Cn(Pe,ze)),I(Ze,"id",`arg-input-${t(V).name}`),rn(Ze,pt)},[()=>x(t(F)).type,()=>x(t(F)).value]),J("change",Pe,dt=>E(t(F),{...x(t(F)),type:dt.currentTarget.value})),J("input",Ze,dt=>E(t(F),{...x(t(F)),value:dt.currentTarget.value})),v(pe,De)},H=pe=>{var De=By();let Pe;y((Ge,Le)=>{I(De,"id",`arg-input-${t(V).name}`),Pe=St(De,1,"hmm-input hmm-console-json svelte-17kjuug",null,Pe,{"hmm-console-invalid":Ge}),rn(De,Le)},[()=>!xy(String(t(i)[t(F)]??"")),()=>String(t(i)[t(F)]??"")]),J("input",De,Ge=>E(t(F),Ge.currentTarget.value)),v(pe,De)},Ce=pe=>{var De=Vy();y((Pe,Ge)=>{I(De,"id",`arg-input-${t(V).name}`),I(De,"list",Pe),rn(De,Ge)},[()=>wy(t(V))?"hmm-console-addresses":void 0,()=>String(t(i)[t(F)]??"")]),J("input",De,Pe=>E(t(F),Pe.currentTarget.value)),v(pe,De)};$(Fe,pe=>{t(V).kind==="bool"?pe(We):t(V).kind==="number"?pe(tt,1):t(V).kind==="select"?pe(rt,2):t(V).kind==="flags"?pe(we,3):t(V).kind==="struct"?pe(Te,4):t(V).kind==="variant"?pe(K,5):t(V).kind==="json"?pe(H,6):pe(Ce,-1)})}var Oe=d(Fe,2);{var Ke=pe=>{var De=Hy(),Pe=m(De);y((Ge,Le)=>h(Pe,`${Ge??""}: ${Le??""}`),[()=>s("optional"),()=>t(V).optional.join(", ")]),v(pe,De)};$(Oe,pe=>{t(V).optional.length>0&&pe(Ke)})}y(()=>{I(R,"data-testid",`arg-${t(V).name}`),I(L,"for",`arg-input-${t(V).name}`),h(ee,`${t(V).name??""} `),h(Ne,t(V).type)}),v(ae,R)});var Ee=d(be,2);je(Ee,20,()=>t(b),ae=>ae,(ae,V)=>{var F=jy(),R={};y(()=>{R!==(R=V)&&(F.value=(F.__value=R)??"")}),v(ae,F)});var q=d(xe,2),Q=w(q),O=w(Q),W=d(O);{var ce=ae=>{var V=Wy(),F=m(V,!0);y(()=>h(F,t(o).error)),v(ae,V)};$(W,ae=>{t(o)&&!t(o).ok&&ae(ce)})}var he=d(Q,2),ge=d(Re,2);{var ye=ae=>{var V=Ky(),F=w(V),R=m(F,!0),L=d(F,2),ee=m(L,!0);y(_e=>{h(R,t(g).name),h(ee,_e)},[()=>t(g).help.replace(/<[^>]*>/g," ").replace(/\s+/g," ").trim()]),v(ae,V)};$(ge,ae=>{t(g)?.help&&ae(ye)})}y((ae,V,F,R,L,ee,_e,Ne)=>{I(re,"aria-label",ae),h(Z,V),j!==(j=t(a))&&(re.value=(re.__value=j)??"",Cn(re,j)),h(me,`${t(a)??""}(${F??""})`),ke.disabled=t(a)===""||n.console.running,h(fe,R),h(M,L),h(O,`${ee??""} `),I(he,"aria-label",_e),rn(he,Ne)},[()=>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})`}`]),J("change",re,ae=>S(ae.currentTarget.value)),J("click",ke,()=>{z()}),v(r,ie),mt()}kt(["change","click","input"]);function $y(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 Xy=_('<div class="hmm-context-separator svelte-192vamk" role="separator"></div>'),Qy=_('<button type="button" role="menuitem"> </button>'),Zy=_('<div class="hmm-context-menu svelte-192vamk" role="menu"></div>');function Dd(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,$y(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 S(D){n()&&D.key==="Escape"&&(D.preventDefault(),b())}var E=wt();wr("keydown",la,S),wr("mousedown",la,D=>{n()&&t(p)&&D.target instanceof Node&&!t(p).contains(D.target)&&b()});var A=Ie(E);{var x=D=>{var C=Zy();let T;je(C,21,()=>e.items,P=>P.id,(P,z)=>{var Y=wt(),ne=Ie(Y);{var ie=G=>{var re=Xy();v(G,re)},de=G=>{var re=Qy();let le;var Z=m(re,!0);y(()=>{le=St(re,1,"hmm-context-item svelte-192vamk",null,le,{"hmm-context-danger":t(z).danger===!0}),re.disabled=t(z).disabled===!0,h(Z,t(z).label??t(z).id)}),J("click",re,()=>k(t(z))),v(G,re)};$(ne,G=>{t(z).separator===!0?G(ie):G(de,-1)})}v(P,Y)}),_n(C,P=>u(p,P),()=>t(p)),y(()=>{I(C,"aria-label",l()),I(C,"data-testid",f()),T=Fn(C,"",T,{left:`${t(g).x}px`,top:`${t(g).y}px`})}),v(D,C)};$(A,D=>{n()&&D(x)})}v(r,E),mt()}kt(["click"]);function Jy(){return globalThis.navigator?.clipboard}async function eE(r,e={}){const n=Jy();if(typeof n?.writeText=="function")try{return await n.writeText(r),"clipboard"}catch{}return tE(r,e.host)?"selection":"failed"}function tE(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 nE="data-measure-skip";function rE(r){return r.scrollWidth>r.clientWidth}function sE(r){return(r.innerText||r.textContent||"").replace(/\s+/g," ").trim()}function aE(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(`[${nE}]`))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,iE=1200,oE=600,zc=10;function ci(r,e=di,n=iE){return Number.isFinite(r)?Math.round(Math.min(Math.max(r,e),Math.max(e,n))):e}function lE(r,e=di,n=oE){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 jc(r){return r.keepMinWidth!==!0||r.minWidth===void 0?di:Math.max(di,Math.round(r.minWidth))}function dE(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 cE=30,Th=20,ui=Th+12,uE=22,fE=uE+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 Rh(r){return r.filterable!==!1&&r.hidden!==!0}function Wc(r,e){return r.toLowerCase().includes(e.toLowerCase())}function Kc(r,e,n,s){for(const a of e){const i=s[a.key];if(i!==void 0&&i!==""&&!Wc(Za(r,a),i))return!1}return n.trim()===""?!0:e.filter(a=>Rh(a)).some(a=>Wc(Za(r,a),n))}function hE(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 mE(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(S=>S!=="")?e.filter(S=>Kc(S,n,o,l)||(a?.(S)??[]).some(E=>Kc(E,f,o,l))):[...e],b=r.sort;if(b){const S=n.find(E=>E.key===b.key);if(S&&zi(S)){const E=b.direction==="asc"?1:-1;g.sort((A,x)=>E*hE(Hl(A,S),Hl(x,S)))}}const k=[];for(const S of g){const E=s(S),A=a?.(S)??[],x=i.has(E);if(k.push({id:E,key:E,row:S,depth:0,hasChildren:A.length>0,expanded:x,rootId:E,kind:"row"}),!!x){r.subHeader===!0&&A.length>0&&k.push({id:`${E}::header`,key:`${E}::header`,row:S,depth:1,hasChildren:!1,expanded:!1,rootId:E,kind:"header"});for(const D of A)k.push({id:s(D),key:`${E}/${s(D)}`,row:D,depth:1,hasChildren:!1,expanded:!1,rootId:E,kind:"row"})}}return k}function vE(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,Yc=120,qc=22;function pE(r,e){if(r.width===void 0&&e===void 0)return`minmax(${zl}px, ${Yc}fr)`;if(r.fixed&&r.width!==void 0)return`${r.width}px`;if(e!==void 0)return`${e}px`;const n=r.width??Yc;return`minmax(${xh(r)}px, ${n}fr)`}function xh(r){return r.minWidth!==void 0?r.minWidth:Math.min(r.width??zl,zl)}function gE(r,e){return r.fixed&&r.width!==void 0?r.width:e!==void 0?e:xh(r)}function $c(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 bE(r,e){return e===void 0||r.keepMinWidth!==!0||r.minWidth===void 0?e:Math.max(e,r.minWidth)}function Ih(r,e={}){const n=r.expander?[`${qc}px`]:[];let s=r.expander?qc:0;for(const a of r.tracks){const i=a.fixed?void 0:bE(a,e[a.key]);n.push(pE(a,i)),s+=gE(a,i)}return{template:n.join(" "),minWidth:s}}function _E(r,e,n){const s=r.filter(f=>f.hidden!==!0).map(f=>$c(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,$c(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:Ih({tracks:s,expander:n}).template,track:l,tracks:s,expander:n,subKeys:a}}function yE(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 EE(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 SE(r,e){return r.trim()!==""||Object.values(e).some(n=>n.trim()!=="")}function kE(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 wE(r,e,n,s,a){if(a.shift===!0&&n!==void 0)return{selected:kE(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 AE=_('<div role="separator" aria-orientation="vertical" tabindex="0" data-measure-skip=""></div>'),TE=_('<span class="hmm-table-caption svelte-16k18c8"> </span>'),RE=_('<div class="hmm-table-actions svelte-16k18c8" role="toolbar"><!></div>'),Xc=_('<span class="hmm-table-count svelte-16k18c8"> </span>'),xE=_('<div class="hmm-table-band svelte-16k18c8"><!> <!> <div class="hmm-table-trailing svelte-16k18c8"><!> <!></div></div>'),IE=_('<span class="hmm-th-group-sub svelte-16k18c8"> </span>'),DE=_('<div class="hmm-th hmm-th-group svelte-16k18c8" role="columnheader"><span class="hmm-th-group-label"> </span> <!></div>'),NE=_('<div class="hmm-table-groups svelte-16k18c8" role="row"></div>'),CE=_('<div class="hmm-th hmm-th-expander svelte-16k18c8" role="columnheader"></div>'),PE=_('<span class="hmm-th-sort svelte-16k18c8" aria-hidden="true"> </span>'),ME=_('<button type="button" class="hmm-th-button svelte-16k18c8"><span class="hmm-th-label"> </span> <!></button>'),OE=_('<span class="hmm-th-label"> </span>'),LE=_('<div class="hmm-th svelte-16k18c8" role="columnheader"><!> <!></div>'),FE=_('<div class="hmm-th hmm-th-sub-only svelte-16k18c8"><!></div>'),GE=_('<div class="hmm-tf-spacer"></div>'),UE=_('<input class="hmm-input hmm-tf-input svelte-16k18c8" type="search"/>'),BE=_('<div class="hmm-tf svelte-16k18c8"><!></div>'),VE=_('<div class="hmm-table-filters svelte-16k18c8"><!> <!></div>'),HE=_('<span> </span> <button type="button" class="hmm-button hmm-table-clear svelte-16k18c8"> </button>',1),zE=_('<div class="hmm-table-empty svelte-16k18c8"><!></div>'),jE=_('<button type="button" class="hmm-expander svelte-16k18c8"> </button>'),WE=_('<div class="hmm-td hmm-td-expander svelte-16k18c8"><!></div>'),KE=_(" <!>",1),YE=js('<path d="M1.5 5.2 4 7.7 8.5 2.3"></path>'),qE=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),$E=_('<button type="button" data-measure-skip=""><svg class="hmm-copy-icon svelte-16k18c8" viewBox="0 0 10 10" aria-hidden="true"><!></svg></button>'),XE=_('<div role="gridcell"><!> <!></div>'),QE=_('<div role="row" tabindex="-1"><!> <!></div>'),ZE=_('<div class="hmm-table-spacer svelte-16k18c8"><div class="hmm-table-rows svelte-16k18c8"></div></div>'),JE=_('<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=(X,Ae=zn,Ue=zn)=>{var ot=AE();let Kt;y(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())},[()=>fe("Resize column {column}",{column:Ae().label})]),J("pointerdown",ot,At=>Mr(At,Ae().key)),J("pointermove",ot,Xr),J("pointerup",ot,At=>Wn(At,Ae())),wr("pointercancel",ot,Ln),wr("lostpointercapture",ot,Ln),J("dblclick",ot,At=>{At.preventDefault(),fn||Xt(Ae().key)}),J("keydown",ot,At=>_r(At,Ae().key)),v(X,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,cE),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,""),S=B(e,"noMatchText",3,"No row matches the filter"),E=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),T=B(e,"status",3,void 0),P=B(e,"countText",3,void 0),z=B(e,"selected",31,()=>Be([])),Y=B(e,"expanded",31,()=>Be([])),ne=B(e,"filter",15,""),ie=B(e,"sort",15,void 0),de=B(e,"onactivate",3,void 0),G=B(e,"onrowcontextmenu",3,void 0),re=B(e,"renameColumn",3,"name"),le=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),me=B(e,"testId",3,void 0);const ke=bp();function fe(X,Ae={}){return ke?.t===void 0?_p(X,Ae):ke.t(X,Ae)}let Re=N(Be({})),xe=N(0),se=N(0),M=N(0),ue=N(0),ve=N(void 0),be=N(void 0),Ee=N(void 0),q=N(void 0),Q=N(void 0),O=N(void 0);const W=c(()=>e.columns.filter(X=>X.hidden!==!0)),ce=c(()=>(o()??e.columns).filter(X=>X.hidden!==!0)),he=c(()=>i()!==void 0),ge=c(()=>_E(e.columns,o(),t(he)));let ye=N({}),ae=N({}),V=N(void 0);const F=c(()=>{const X=ke?.columnWidths;return j()===void 0||X===void 0?t(ye):X.widths(j())}),R=c(()=>{const X=ke?.columnWidths;return U()===void 0||X===void 0?t(ae):X.widths(U())}),L=c(()=>Object.keys(t(F)).length>0),ee=c(()=>Object.keys(t(R)).length>0),_e=c(()=>new Set(t(ge).subKeys)),Ne=c(()=>t(ce).filter(X=>t(_e).has(X.key)&&Di(X))),Fe=c(()=>{const X=yE(t(ge),t(F),t(R));return Ih(t(ge),t(V)===void 0?X:{...X,[t(V).key]:t(V).width})}),We=c(()=>EE(s()??[],e.columns,t(ge))),tt=c(()=>new Set(Y())),rt=c(()=>b()!==void 0||D()!==void 0||T()!==void 0||P()!==void 0),we=c(()=>new Set(z())),Te=c(()=>mE({rows:e.rows,columns:e.columns,getId:e.getId,children:i(),expanded:t(tt),globalFilter:ne(),columnFilters:t(Re),sort:ie(),subColumns:o(),subHeader:o()!==void 0})),K=c(()=>f()??t(se)),H=c(()=>vE(t(Te).length,t(xe),t(K),l(),p())),Ce=c(()=>t(Te).slice(t(H).start,t(H).end)),Oe=c(()=>SE(ne(),t(Re))),Ke=c(()=>t(Te).filter(X=>X.depth===0).length),pe=c(()=>t(Oe)&&e.rows.length>0);function De(){u(Re,{},!0)}let Pe=gr(()=>a());lt(()=>{a()!==Pe&&(Pe=a(),De(),ne(""),t(be)&&(t(be).scrollTop=0,u(xe,0)))}),lt(()=>{const X=t(be);if(!X)return;const Ae=()=>{f()===void 0&&u(se,X.clientHeight,!0),u(ue,X.offsetWidth-X.clientWidth)};Ae();const Ue=new ResizeObserver(Ae);return Ue.observe(X),()=>{Ue.disconnect()}});function Ge(X){u(xe,X.scrollTop,!0);const Ae=X.scrollLeft===0?"":`translateX(${String(-X.scrollLeft)}px)`;for(const Ue of[t(q),t(Q),t(O)])Ue&&Ue.style.transform!==Ae&&(Ue.style.transform=Ae);at(),hn()}function Le(X){zi(X)&&(ie()?.key!==X.key?ie({key:X.key,direction:"asc"}):ie().direction==="asc"?ie({key:X.key,direction:"desc"}):ie(void 0))}function Ye(X){Y(t(tt).has(X)?Y().filter(Ae=>Ae!==X):[...Y(),X])}function Xe(X,Ae){if(X.kind==="header")return;const Ue=wE(t(Te),z(),t(ve),X.id,Ae);z(Ue.selected),u(ve,Ue.anchorId,!0),u(M,t(Te).findIndex(ot=>ot.id===X.id),!0)}function ze(X,Ae){Xe(X,{ctrl:Ae.ctrlKey||Ae.metaKey,shift:Ae.shiftKey})}function Ze(X,Ae){!G()||X.kind==="header"||(Ae.preventDefault(),t(we).has(X.id)||Xe(X,{}),G()(X.row,Ae))}const dt='button, input, select, textarea, a[href], [contenteditable="true"]';function pt(X){return X.target instanceof Element&&X.target.closest(dt)!==null}const gt='input, select, textarea, [contenteditable="true"]',Se=new Set(["ArrowDown","ArrowUp","ArrowLeft","ArrowRight","Home","End"]);function Me(X){return X.target instanceof Element&&X.target.closest(gt)!==null}function $e(X){return X?.kind==="row"&&Z()!==void 0&&(le()?.(X.row)??!0)}function ft(X,Ae){if(X.kind!=="row")return;if((Ae.target instanceof Element?Ae.target.closest("[data-column-key]"):null)?.dataset.columnKey===re()&&!pt(Ae)&&$e(X)){window.getSelection()?.removeAllRanges(),Z()?.(X.row);return}de()?.(X.row)}function yt(X,Ae){!$e(X)||!t(we).has(X.id)||pt(Ae)||(Ae.preventDefault(),Z()?.(X.row))}function it(){const X=t(be);if(!X)return;const Ae=t(M)*l(),Ue=t(K)===0?X.clientHeight:t(K);Ae<X.scrollTop?X.scrollTop=Ae:Ae+l()>X.scrollTop+Ue&&(X.scrollTop=Ae+l()-Ue)}function Wt(X,Ae){if(t(Te).length===0)return;const Ue=Math.min(t(Te).length-1,Math.max(0,t(M)+X)),ot=t(Te)[Ue];ot&&(u(M,Ue,!0),Xe(ot,{shift:Ae}),it())}function Mt(X){if(Se.has(X.key)&&Me(X))return;const Ae=t(Te)[t(M)];switch(X.key){case"ArrowDown":X.preventDefault(),Wt(1,X.shiftKey);break;case"ArrowUp":X.preventDefault(),Wt(-1,X.shiftKey);break;case"Home":X.preventDefault(),Wt(-t(Te).length,X.shiftKey);break;case"End":X.preventDefault(),Wt(t(Te).length,X.shiftKey);break;case"ArrowRight":Ae?.hasChildren===!0&&!Ae.expanded&&(X.preventDefault(),Ye(Ae.id));break;case"ArrowLeft":Ae?.hasChildren===!0&&Ae.expanded&&(X.preventDefault(),Ye(Ae.id));break;case"Enter":if(pt(X))break;Ae&&de()?(X.preventDefault(),de()(Ae.row)):yt(Ae,X);break;case"F2":yt(Ae,X);break;case" ":Ae&&!pt(X)&&(X.preventDefault(),Xe(Ae,{ctrl:!0}));break;case"Escape":Je();break}}const Ot=2,Zt=4,bn=14;function on(X){return t(_e).has(X)?"sub":"table"}function un(X){const Ae=(on(X)==="sub"?t(ce):t(W)).find(Ue=>Ue.key===X);return Ae===void 0?di:jc(Ae)}function vn(X,Ae){const Ue=ke?.columnWidths,ot=on(X),Kt=ot==="sub"?U():j(),At=ci(Ae,un(X));Kt!==void 0&&Ue!==void 0?Ue.set(Kt,X,At):ot==="sub"?u(ae,{...t(ae),[X]:At}):u(ye,{...t(ye),[X]:At})}function Pn(X){const Ae=ke?.columnWidths,Ue=X==="sub"?U():j();Ue!==void 0&&Ae!==void 0?Ae.reset(Ue):X==="sub"?u(ae,{}):u(ye,{})}function Jn(X,Ae){if(X===void 0||on(X)!==Ae)return;const Ue=t(Ae==="sub"?ce:W).find(ot=>ot.key===X);return Ue!==void 0&&Di(Ue)?Ue:void 0}function jn(X){const Ae=`[data-column-key="${CSS.escape(X)}"]`;return(on(X)==="sub"?t(be)?.querySelector(`.hmm-tr-subhead ${Ae}`):t(Q)?.querySelector(Ae))??void 0}function Xt(X){const Ae=on(X),Ue=Jn(X,Ae),ot=jn(X);if(!t(Ee)||!Ue||!ot)return;const Kt=t(be)?[...t(be).querySelectorAll(`.hmm-td[data-column-key="${CSS.escape(X)}"]`)]:[],[At=0,...Et]=aE(t(Ee),[ot,...Kt]),xn=Ae==="table"&&zi(Ue)&&ie()?.key!==X?At+bn:At,dn=lE([xn,...Et],jc(Ue));dn!==void 0&&vn(X,dn)}let xt,fn=!1,Mn=N(void 0);function On(X){return X.currentTarget.closest("[data-column-key]")}function Mr(X,Ae){const Ue=On(X);if(!(X.button!==0||!Ue)){X.preventDefault();try{X.currentTarget.setPointerCapture(X.pointerId)}catch{}fn=X.pointerType==="touch"||X.pointerType==="pen",xt={key:Ae,pointerId:X.pointerId,startX:X.clientX,startWidth:Ue.getBoundingClientRect().width,min:un(Ae),touch:fn,moved:!1},Je()}}function Xr(X){const Ae=xt;if(Ae?.pointerId!==X.pointerId)return;const Ue=X.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(V)?.key!==Ae.key||t(V).width!==ot)&&u(V,{key:Ae.key,width:ot})}function Ln(X){const Ae=xt;Ae?.pointerId===X.pointerId&&(xt=void 0,u(Mn,void 0),Ae.moved&&t(V)?.key===Ae.key&&vn(Ae.key,t(V).width),u(V,void 0))}function Wn(X,Ae){const Ue=xt;Ln(X),Ue?.pointerId===X.pointerId&&Ue.touch&&!Ue.moved&&on(Ae.key)==="table"&&Le(Ae)}function _r(X,Ae){if(X.key==="ArrowLeft"||X.key==="ArrowRight"){const Ue=On(X);if(Ue){const ot=X.key==="ArrowRight"?zc:-zc;vn(Ae,Ue.getBoundingClientRect().width+ot)}}else if(X.key==="Enter")Xt(Ae);else if(X.key!=="Tab")return;X.key!=="Tab"&&(X.preventDefault(),X.stopPropagation())}let xr=N(!1),lr=N(0),yr=N(0),tr=N(void 0),Er=N("table");const Qr=c(()=>[{id:"fit",label:fe("Fit column to content"),disabled:Jn(t(tr),t(Er))===void 0},{id:"reset",label:fe("Reset column widths"),disabled:t(Er)==="sub"?!t(ee):!t(L)}]);function nr(X){const Ae=X.target instanceof Element?X.target:null;if(!Ae)return;const Ue=t(Q)?.contains(Ae)===!0||t(q)?.contains(Ae)===!0;if(!Ue&&Ae.closest(".hmm-tr-subhead")===null)return;X.preventDefault();const ot=Ae.closest("[data-column-key]");u(tr,ot?.dataset.columnKey,!0),u(Er,Ue&&(t(tr)===void 0||!t(_e).has(t(tr)))?"table":"sub",!0),u(lr,X.clientX,!0),u(yr,X.clientY,!0),u(xr,!0),Je()}function as(X){X==="fit"&&t(tr)!==void 0?Xt(t(tr)):X==="reset"&&Pn(t(Er))}let oe=N(void 0),He,Gt,pn,Sn;function er(X){return xt===void 0&&!X.classList.contains("hmm-td-fixed")&&rE(X)}function Or(X,Ae){Je(),Gt=X,pn=Ae,Sn=setTimeout(()=>{Sn=void 0,Ve(X)},zf)}function ys(X){const Ue=(X.target instanceof Element?X.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"&&Je()))}function ct(X){try{return X.matches(":focus-visible")}catch{return!1}}function nt(X){const Ae=X.target instanceof HTMLElement?X.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"&&Je()}function Ve(X){if(Gt!==X||!X.isConnected)return;const Ae=sE(X.querySelector(".hmm-th-label")??X);if(Ae==="")return;const{left:Ue,top:ot,bottom:Kt}=X.getBoundingClientRect();u(oe,{text:Ae,anchor:{left:Ue,top:ot,bottom:Kt}})}function Je(){Sn!==void 0&&(clearTimeout(Sn),Sn=void 0),Gt=void 0,pn=void 0,t(oe)!==void 0&&u(oe,void 0)}function at(){Je(),He=void 0}function _t(){pn==="pointer"&&Je(),He=void 0}lt(()=>()=>{Sn!==void 0&&clearTimeout(Sn)});const Rt=1500,Vt=4e3;let Ut=N(void 0),ln;function Bt(X,Ae){return`${X.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(X,Ae,Ue){X.stopPropagation();const ot=X.currentTarget;if(!(ot instanceof HTMLElement))return;const Kt=await eE(Za(Ae.row,Ue),{host:t(Ee)});if(Je(),hn(),!ot.isConnected)return;const At=Kt!=="failed";At||gn(ot);const{left:Et,top:xn,bottom:dn}=ot.getBoundingClientRect();u(Ut,{key:Bt(Ae,Ue),ok:At,text:fe(At?"Copied":"Could not copy - the text is selected"),anchor:{left:Et,top:xn,bottom:dn}}),ln=setTimeout(hn,At?Rt:Vt)}function gn(X){const Ae=X.closest(".hmm-td"),Ue=window.getSelection();if(!Ae||!Ue)return;const ot=document.createRange();ot.selectNodeContents(Ae),ot.setEndBefore(X),Ue.removeAllRanges(),Ue.addRange(ot)}lt(()=>()=>{ln!==void 0&&clearTimeout(ln)});var Lt=JE(),It=w(Lt);{var Qe=X=>{var Ae=xE(),Ue=w(Ae);{var ot=Ht=>{var an=TE(),Jt=m(an,!0);y(()=>h(Jt,b())),v(Ht,an)};$(Ue,Ht=>{b()!==void 0&&Ht(ot)})}var Kt=d(Ue,2);{var At=Ht=>{var an=RE(),Jt=w(an);Bs(Jt,D),y(()=>I(an,"aria-label",C()??b()??x())),v(Ht,an)};$(Kt,Ht=>{D()&&Ht(At)})}var Et=d(Kt,2),xn=w(Et);{var dn=Ht=>{var an=wt(),Jt=Ie(an);Bs(Jt,T),v(Ht,an)};$(xn,Ht=>{T()&&Ht(dn)})}var rr=d(xn,2);{var Yn=Ht=>{var an=Xc(),Jt=m(an,!0);y(cn=>{I(an,"data-testid",me()===void 0?void 0:`${me()}-count`),h(Jt,cn)},[()=>A()(t(Ke),e.rows.length)]),v(Ht,an)},kn=Ht=>{var an=Xc(),Jt=m(an,!0);y(()=>{I(an,"data-testid",me()===void 0?void 0:`${me()}-count`),h(Jt,P())}),v(Ht,an)};$(rr,Ht=>{t(pe)&&A()!==void 0?Ht(Yn):P()!==void 0&&Ht(kn,1)})}v(X,Ae)};$(It,X=>{t(rt)&&X(Qe)})}var et=d(It,2);let bt,sn;var Rn=w(et);{var dr=X=>{var Ae=NE();je(Ae,21,()=>t(We),Ue=>Ue.key,(Ue,ot)=>{var Kt=DE();let At;var Et=w(Kt),xn=m(Et,!0),dn=d(Et,2);{var rr=Yn=>{var kn=IE(),Ht=m(kn,!0);y(()=>h(Ht,t(ot).sublabel)),v(Yn,kn)};$(dn,Yn=>{t(ot).sublabel!==void 0&&t(ot).sublabel!==""&&Yn(rr)})}y(Yn=>{I(Kt,"aria-colspan",t(ot).end-t(ot).start),I(Kt,"data-testid",me()===void 0?void 0:`${me()}-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(q,Ue),()=>t(q)),v(X,Ae)};$(Rn,X=>{t(We).length>0&&X(dr)})}var Nn=d(Rn,2),Lr=w(Nn);{var cr=X=>{var Ae=CE();v(X,Ae)};$(Lr,X=>{t(he)&&X(cr)})}var Kn=d(Lr,2);je(Kn,17,()=>t(W),X=>X.key,(X,Ae)=>{var Ue=LE();let ot;var Kt=w(Ue);{var At=kn=>{var Ht=ME();let an;var Jt=w(Ht),cn=m(Jt,!0),Br=d(Jt,2);{var Es=Vr=>{var Ir=PE(),Ws=m(Ir,!0);y(()=>h(Ws,ie().direction==="asc"?"▲":"▼")),v(Vr,Ir)};$(Br,Vr=>{ie()?.key===t(Ae).key&&Vr(Es)})}y(()=>{an=Fn(Ht,"",an,{"justify-content":t(Ae).align==="right"?"flex-end":t(Ae).align==="center"?"center":"flex-start"}),h(cn,t(Ae).label)}),J("click",Ht,()=>Le(t(Ae))),v(kn,Ht)},Et=c(()=>zi(t(Ae))),xn=kn=>{var Ht=OE(),an=m(Ht,!0);y(()=>h(an,t(Ae).label)),v(kn,Ht)};$(Kt,kn=>{t(Et)?kn(At):kn(xn,-1)})}var dn=d(Kt,2);{var rr=kn=>{n(kn,()=>t(Ae),()=>me()===void 0?void 0:`${me()}-resize-${t(Ae).key}`)},Yn=c(()=>Di(t(Ae)));$(dn,kn=>{t(Yn)&&kn(rr)})}y(()=>{I(Ue,"aria-label",t(Ae).label===""?void 0:t(Ae).label),I(Ue,"data-column-key",t(Ae).key),I(Ue,"aria-sort",ie()?.key===t(Ae).key?ie().direction==="asc"?"ascending":"descending":"none"),ot=Fn(Ue,"",ot,{"grid-column":t(ge).track[t(Ae).key],"text-align":t(Ae).align??"left"})}),v(X,Ue)});var Fr=d(Kn,2);je(Fr,17,()=>t(Ne),X=>X.key,(X,Ae)=>{var Ue=FE();let ot;var Kt=w(Ue);n(Kt,()=>t(Ae),()=>me()===void 0?void 0:`${me()}-resize-${t(Ae).key}`),y(()=>{I(Ue,"data-column-key",t(Ae).key),ot=Fn(Ue,"",ot,{"grid-column":t(ge).track[t(Ae).key],"grid-row":"1"})}),v(X,Ue)}),_n(Nn,X=>u(Q,X),()=>t(Q));var Gr=d(Nn,2);{var Zr=X=>{var Ae=VE(),Ue=w(Ae);{var ot=At=>{var Et=GE();v(At,Et)};$(Ue,At=>{t(he)&&At(ot)})}var Kt=d(Ue,2);je(Kt,17,()=>t(W),At=>At.key,(At,Et)=>{var xn=BE();let dn;var rr=w(xn);{var Yn=Ht=>{var an=UE();y(()=>{I(an,"aria-label",`${x()}: ${t(Et).label}`),rn(an,t(Re)[t(Et).key]??"")}),J("input",an,Jt=>{u(Re,{...t(Re),[t(Et).key]:Jt.currentTarget.value},!0)}),v(Ht,an)},kn=c(()=>Rh(t(Et)));$(rr,Ht=>{t(kn)&&Ht(Yn)})}y(()=>dn=Fn(xn,"",dn,{"grid-column":t(ge).track[t(Et).key]})),v(At,xn)}),_n(Ae,At=>u(O,At),()=>t(O)),v(X,Ae)};$(Gr,X=>{g()&&X(Zr)})}var Ur=d(Gr,2);let is;var po=w(Ur);{var go=X=>{var Ae=zE(),Ue=w(Ae);{var ot=At=>{var Et=HE(),xn=Ie(Et),dn=m(xn,!0),rr=d(xn,2),Yn=m(rr,!0);y(()=>{h(dn,S()),I(rr,"data-testid",me()===void 0?void 0:`${me()}-clear-filter`),h(Yn,E())}),J("click",rr,De),v(At,Et)},Kt=At=>{var Et=Zn();y(()=>h(Et,k())),v(At,Et)};$(Ue,At=>{t(pe)?At(ot):At(Kt,-1)})}v(X,Ae)},Si=X=>{var Ae=ZE();let Ue;var ot=w(Ae);let Kt;je(ot,23,()=>t(Ce),At=>At.key,(At,Et,xn)=>{var dn=QE();let rr,Yn;var kn=w(dn);{var Ht=Jt=>{var cn=WE(),Br=w(cn);{var Es=Vr=>{var Ir=jE(),Ws=m(Ir,!0);y(()=>{I(Ir,"aria-expanded",t(Et).expanded),I(Ir,"aria-label",t(Et).expanded?"Collapse row":"Expand row"),h(Ws,t(Et).expanded?"−":"+")}),J("click",Ir,Fa=>{Fa.stopPropagation(),Ye(t(Et).id)}),v(Vr,Ir)};$(Br,Vr=>{t(Et).hasChildren&&Vr(Es)})}v(Jt,cn)};$(kn,Jt=>{t(he)&&Jt(Ht)})}var an=d(kn,2);je(an,17,()=>t(Et).depth>0?t(ce):t(W),Jt=>Jt.key,(Jt,cn)=>{var Br=XE();let Es,Vr;var Ir=w(Br);{var Ws=sr=>{var Dr=KE(),ar=Ie(Dr),Ks=d(ar);{var ca=Ys=>{n(Ys,()=>t(cn),()=>me()===void 0?void 0:`${me()}-sub-resize-${t(cn).key}`)},Ga=c(()=>t(_e).has(t(cn).key)&&Di(t(cn)));$(Ks,Ys=>{t(Ga)&&Ys(ca)})}y(()=>h(ar,`${t(cn).label??""} `)),v(sr,Dr)},Fa=sr=>{var Dr=wt(),ar=Ie(Dr);Bs(ar,te,()=>t(Et).row,()=>t(cn),()=>t(Et)),v(sr,Dr)},So=sr=>{var Dr=Zn();y(ar=>h(Dr,ar),[()=>Za(t(Et).row,t(cn))]),v(sr,Dr)};$(Ir,sr=>{t(Et).kind==="header"?sr(Ws):te()?sr(Fa,1):sr(So,-1)})}var ko=d(Ir,2);{var wo=sr=>{const Dr=c(()=>Bt(t(Et),t(cn)));var ar=$E();let Ks;var ca=w(ar),Ga=w(ca);{var Ys=ur=>{var ua=YE();v(ur,ua)},To=ur=>{var ua=qE();v(ur,ua)};$(Ga,ur=>{t(Ut)?.key===t(Dr)&&t(Ut).ok?ur(Ys):ur(To,-1)})}y(ur=>{Ks=St(ar,1,"hmm-copy svelte-16k18c8",null,Ks,{"hmm-copy-shown":t(Ut)?.key===t(Dr)}),I(ar,"tabindex",t(H).start+t(xn)===t(M)?0:-1),I(ar,"aria-label",ur)},[()=>t(cn).copy==="name"?fe("Copy name"):fe("Copy address")]),J("click",ar,ur=>{Tn(ur,t(Et),t(cn))}),J("dblclick",ar,ur=>{ur.stopPropagation()}),v(sr,ar)},Ao=c(()=>t(cn).copy!==void 0&&t(Et).kind==="row"&&Za(t(Et).row,t(cn))!=="");$(ko,sr=>{t(Ao)&&sr(wo)})}y(()=>{Es=St(Br,1,"hmm-td svelte-16k18c8",null,Es,{"hmm-td-fixed":t(cn).fixed===!0,"hmm-td-copy":t(cn).copy!==void 0&&t(Et).kind==="row","hmm-mono":t(cn).mono===!0&&t(Et).kind==="row"}),I(Br,"data-column-key",t(cn).key),Vr=Fn(Br,"",Vr,{"grid-column":t(ge).track[t(cn).key],"text-align":t(cn).align??"left"})}),v(Jt,Br)}),y((Jt,cn)=>{rr=St(dn,1,"hmm-tr svelte-16k18c8",null,rr,{"hmm-tr-even":(t(H).start+t(xn))%2===1,"hmm-tr-selected":Jt,"hmm-tr-child":t(Et).depth>0&&t(Et).kind==="row","hmm-tr-subhead":t(Et).kind==="header"}),I(dn,"aria-selected",cn),I(dn,"data-row-id",t(Et).id),I(dn,"data-row-kind",t(Et).kind),Yn=Fn(dn,"",Yn,{height:`${l()}px`})},[()=>t(we).has(t(Et).id),()=>t(Et).kind==="header"?void 0:t(we).has(t(Et).id)]),J("click",dn,Jt=>ze(t(Et),Jt)),J("dblclick",dn,Jt=>ft(t(Et),Jt)),J("contextmenu",dn,Jt=>Ze(t(Et),Jt)),v(At,dn)}),y(()=>{Ue=Fn(Ae,"",Ue,{height:`${t(Te).length*l()}px`}),Kt=Fn(ot,"",Kt,{transform:`translateY(${t(H).start*l()}px)`})}),v(X,Ae)};$(po,X=>{t(Te).length===0?X(go):X(Si,-1)})}_n(Ur,X=>u(be,X),()=>t(be));var ki=d(et,2);{var bo=X=>{{let Ae=c(()=>me()===void 0?void 0:`${me()}-tooltip`);kl(X,{get text(){return t(oe).text},get anchor(){return t(oe).anchor},get testId(){return t(Ae)}})}};$(ki,X=>{t(oe)!==void 0&&X(bo)})}var wi=d(ki,2);{var _o=X=>{{let Ae=c(()=>me()===void 0?void 0:`${me()}-copied`);kl(X,{get text(){return t(Ut).text},get anchor(){return t(Ut).anchor},get testId(){return t(Ae)}})}};$(wi,X=>{t(Ut)!==void 0&&X(_o)})}var La=d(wi,2),Ai=m(La,!0),yo=d(La,2);{var Eo=X=>{{let Ae=c(()=>fe("Column widths")),Ue=c(()=>me()===void 0?void 0:`${me()}-columns-menu`);Dd(X,{get items(){return t(Qr)},get x(){return t(lr)},get y(){return t(yr)},get label(){return t(Ae)},get testId(){return t(Ue)},onselect:as,get open(){return t(xr)},set open(ot){u(xr,ot,!0)}})}};$(yo,X=>{t(xr)&&X(Eo)})}_n(Lt,X=>u(Ee,X),()=>t(Ee)),y((X,Ae)=>{I(Lt,"data-testid",me()),bt=St(et,1,"hmm-table-grid svelte-16k18c8",null,bt,{"hmm-table-resizing":t(Mn)!==void 0}),I(et,"aria-rowcount",t(Te).length),I(et,"aria-colcount",t(W).length),sn=Fn(et,"",sn,{"--hmm-table-columns":t(Fe).template,"--hmm-table-min-width":X,"--hmm-table-gutter":Ae}),is=Fn(Ur,"",is,{height:f()===void 0?void 0:`${f()}px`}),h(Ai,t(Ut)?.text??"")},[()=>`${String(t(Fe).minWidth)}px`,()=>`${String(t(ue))}px`]),J("keydown",et,Mt),J("contextmenu",et,nr),J("pointerover",et,ys),wr("pointerleave",et,_t),J("pointerdown",et,Je),J("focusin",et,nt),J("focusout",et,st),wr("scroll",Ur,X=>Ge(X.currentTarget)),v(r,Lt),mt()}kt(["pointerdown","pointermove","pointerup","dblclick","keydown","contextmenu","pointerover","focusin","focusout","click","input"]);var eS=_('<img class="hmm-device-image svelte-rwoeeb"/>'),tS=_('<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,Th),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=E=>{var A=eS();y(()=>{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(E,A)},S=E=>{var A=tS();let x;var D=m(A,!0);y(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(E,A)};$(b,E=>{t(f)?E(k):E(S,-1)})}v(r,g),mt()}var nS=_('<span class="hmm-primary-caption"> </span>'),rS=_('<button type="button"><span class="hmm-primary-icon svelte-1a5hxwr" aria-hidden="true"> </span> <!></button>'),sS=_('<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>'),aS=_('<span class="hmm-primary-slot svelte-1a5hxwr"><!> <!></span>');function Dh(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),z=t(p);if(i()!==void 0||!P||!z)return;const Y=()=>{u(g,Math.ceil(z.getBoundingClientRect().width),!0),u(b,P.getBoundingClientRect().width,!0)};Y();const ne=new ResizeObserver(Y);return ne.observe(P),ne.observe(z),()=>{ne.disconnect()}});const k=c(()=>i()??(t(g)>0&&t(b)>0&&t(b)<t(g)-1)),S=c(()=>s()&&a()!==void 0?`${e.caption} — ${a()}`:t(k)?e.caption:""),E=c(()=>l()===void 0?void 0:`${l()}-tooltip`);var A=aS();let x;var D=w(A);ni(D,{get text(){return t(S)},get testId(){return t(E)},children:(P,z)=>{var Y=rS();let ne;var ie=w(Y),de=m(ie,!0),G=d(ie,2);{var re=le=>{var Z=nS(),te=m(Z,!0);y(()=>{I(Z,"data-testid",l()===void 0?void 0:`${l()}-caption`),h(te,e.caption)}),v(le,Z)};$(G,le=>{t(k)||le(re)})}y(()=>{ne=St(Y,1,"hmm-primary-button svelte-1a5hxwr",null,ne,{"hmm-primary-compact":t(k)}),I(Y,"aria-label",e.caption),I(Y,"data-testid",l()),I(Y,"data-compact",t(k)?"true":"false"),Y.disabled=s(),h(de,n())}),J("click",Y,()=>o()?.()),v(P,Y)},$$slots:{default:!0}});var C=d(D,2);{var T=P=>{var z=sS(),Y=w(z),ne=m(Y,!0),ie=d(Y,2),de=m(ie,!0);_n(z,G=>u(p,G),()=>t(p)),y(()=>{h(ne,n()),h(de,e.caption)}),v(P,z)};$(C,P=>{i()===void 0&&P(T)})}_n(A,P=>u(f,P),()=>t(f)),y(P=>x=Fn(A,"",x,{"flex-basis":P}),[()=>t(g)>0?`${String(t(g))}px`:void 0]),v(r,A),mt()}kt(["click"]);const iS={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"}},Qc=84,Ni=150,Zc=180;function Xo(r,e,n=2){const s=[];for(const a of e){if(xa(a.address)!==r)continue;const i=iS[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 Nh(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 oS(r,e,n={channel:!1}){const s=[];let a=!1;for(const i of vb(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 lS(r,e){return e&&r==="CONFIG_PENDING"}const dS=["UP_TO_DATE","NEW_FIRMWARE_AVAILABLE","DELIVER_FIRMWARE_IMAGE","PERFORMING_UPDATE"];function Jc(r,e){return r!==void 0&&r!==""&&r!=="0.0.0"&&r!==e}function cS(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"&&Jc(s,n))return{firmware:n,available:s,...a?{}:{action:"install"},busy:a};if(dS.includes(i))return{firmware:n,status:i.toLowerCase().replace(/_/g," "),busy:a}}return e.updatePending===!0?{firmware:n,status:"update pending",busy:a}:Jc(s,n)?{firmware:n,available:s,...a?{}:{action:"update"},busy:a}:{firmware:n,busy:a}}function Ch(r,e){const n=r[e];return n?Ei(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 Da(r,e){return r!==void 0&&r.enums.some(n=>Fs(n,e))}function Ph(r,e,n){return Da(r,n)||e.some(s=>Da(s,n))}function eu(r,e,n){return Da(r,n)||Da(e,n)}function vo(r,e){return Object.entries(r).filter(([,n])=>Da(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 uS(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 fS(r,e){return e===null||!Fs(e,r)}function hS(r,e){const n=r.ADDRESS.lastIndexOf(":"),s=r.PARENT??(n<0?r.ADDRESS:r.ADDRESS.slice(0,n)),a=r.INDEX===void 0?r.ADDRESS.slice(n+1):String(r.INDEX);return{value:r.ADDRESS,label:e(r.ADDRESS)??r.ADDRESS,hint:e(s)??s,description:`${a}: ${r.TYPE}`}}var mS=_('<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),vS=_('<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),pS=_('<span></span> <span class="hmm-add-link-empty svelte-w1ajeb" data-testid="add-link-none"> </span>',1),gS=_('<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>'),bS=_('<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>'),_S=_('<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 Mh(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(""),S=N("");const E=c(()=>o.app.selectedInterface),A=c(()=>o.devices.index(t(E)));lt(()=>{n()&&(u(f,[...a()],!0),u(p,[...i()],!0),u(b,{},!0),u(k,""),u(S,""))});const x=c(()=>t(A)?Jf(t(A)).map(G=>P(G)):[]),D=c(()=>{const G=t(A);if(!G||t(f).length===0)return[];const re=t(f).map(le=>G.get(le)).filter(le=>le!==void 0);return G.channels().filter(le=>re.every(Z=>Fb(Z,le))).map(le=>P(le))}),C=c(()=>[...new Set(t(f).flatMap(G=>_s(t(A)?.get(G)?.LINK_SOURCE_ROLES)))].join(" ")),T=c(()=>[...new Set(t(p).flatMap(G=>_s(t(A)?.get(G)?.LINK_TARGET_ROLES)))].join(" "));function P(G){return hS(G,re=>o.names.name(re))}function z(){return t(f).flatMap(G=>t(p).map(re=>{const le=t(b)[Y(G,re)],Z=le?.name.trim()===""||le===void 0?t(k).trim():le.name.trim(),te=le?.description.trim()===""||le===void 0?t(S).trim():le.description.trim();return{sender:G,receiver:re,...Z===""?{}:{name:Z},...te===""?{}:{description:te}}}))}function Y(G,re){return`${G}>${re}`}function ne(G,re,le,Z){const te=Y(G,re),j=t(b)[te]??{name:"",description:""};u(b,{...t(b),[te]:{...j,[le]:Z}},!0)}function ie(){const G=z();G.length!==0&&(o.changeSet.stage({kind:"linkAdd",interfaceName:t(E),title:l("{count} links",{},G.length),pairs:G,calls:G.map(re=>`addLink(${re.sender}, ${re.receiver}, ${JSON.stringify(re.name??"")})`),lines:G.map(re=>({label:`${o.nameOf(re.sender)} → ${o.nameOf(re.receiver)}`,to:re.name??""}))}),n(!1))}async function de(G){u(g,!0);const re=await o.links.addPairs(t(E),z());if(u(g,!1),re===0)return;n(!1);const le=t(f)[0],Z=t(p)[0];G&&le!==void 0&&Z!==void 0&&s()?.({sender:le,receiver:Z})}{const G=le=>{var Z=mS(),te=Ie(Z),j=m(te,!0),U=d(te,2),me=m(U,!0),ke=d(U,2),fe=m(ke,!0),Re=d(ke,2),xe=m(Re,!0);y((se,M,ue,ve)=>{h(j,se),U.disabled=t(g)||t(p).length===0,h(me,M),ke.disabled=t(g)||t(p).length===0,h(fe,ue),Re.disabled=t(g)||t(p).length===0,h(xe,ve)},[()=>l("Cancel"),()=>l("Add to pending changes"),()=>l("Create"),()=>l("Create and edit")]),J("click",te,()=>n(!1)),J("click",U,ie),J("click",ke,()=>{de(!1)}),J("click",Re,()=>{de(!0)}),v(le,Z)};let re=c(()=>l("Create link"));En(r,{get title(){return t(re)},width:"720px",top:"min(12vh, 96px)",testId:"add-link-dialog",get open(){return n()},set open(le){n(le)},buttons:G,children:(le,Z)=>{var te=_S(),j=Ie(te),U=w(j),me=m(U,!0),ke=d(U,2),fe=w(ke);{let ae=c(()=>l("Sender")),V=c(()=>l("Select")),F=c(()=>l("Filter")),R=c(()=>l("Check all")),L=c(()=>l("Uncheck all"));oi(fe,{get options(){return t(x)},get label(){return t(ae)},get placeholder(){return t(V)},get filterLabel(){return t(F)},get checkAllLabel(){return t(R)},get uncheckAllLabel(){return t(L)},summary:ee=>l("{count} channels selected",{},ee.length),testId:"add-link-senders",inline:!0,get selected(){return t(f)},set selected(ee){u(f,ee,!0)}})}var Re=d(fe,2),xe=m(Re),se=d(ke,2),M=m(se,!0),ue=d(se,2),ve=w(ue);{let ae=c(()=>t(f).length===0),V=c(()=>l("Receiver")),F=c(()=>t(f).length===0?l("Sender"):l("Select")),R=c(()=>l("Filter")),L=c(()=>l("Check all")),ee=c(()=>l("Uncheck all"));oi(ve,{get options(){return t(D)},get disabled(){return t(ae)},get label(){return t(V)},get placeholder(){return t(F)},get filterLabel(){return t(R)},get checkAllLabel(){return t(L)},get uncheckAllLabel(){return t(ee)},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 be=d(ve,2),Ee=m(be),q=d(ue,2);{var Q=ae=>{var V=vS(),F=Ie(V),R=m(F,!0),L=d(F,2),ee=w(L),_e=d(ee,2),Ne=m(_e,!0),Fe=d(L,2),We=m(Fe,!0),tt=d(Fe,2),rt=w(tt);y((we,Te,K,H,Ce)=>{h(R,we),I(ee,"aria-label",Te),h(Ne,K),h(We,H),I(rt,"aria-label",Ce)},[()=>l("Name"),()=>l("Name"),()=>l("Used for every pair without its own name"),()=>l("Description"),()=>l("Description")]),An(ee,()=>t(k),we=>u(k,we)),An(rt,()=>t(S),we=>u(S,we)),v(ae,V)},O=c(()=>z().length>0);$(q,ae=>{t(O)&&ae(Q)})}var W=d(q,2);{var ce=ae=>{var V=pS(),F=d(Ie(V),2),R=m(F,!0);y(L=>h(R,L),[()=>l("No channel can receive from this sender")]),v(ae,V)};$(W,ae=>{t(f).length>0&&t(D).length===0&&ae(ce)})}var he=d(j,2);{var ge=ae=>{var V=bS(),F=w(V),R=w(F),L=w(R),ee=m(L,!0),_e=d(L),Ne=m(_e,!0),Fe=d(_e),We=m(Fe,!0),tt=d(Fe),rt=m(tt,!0),we=d(F);je(we,21,z,Te=>Y(Te.sender,Te.receiver),(Te,K)=>{var H=gS(),Ce=w(H),Oe=m(Ce,!0),Ke=d(Ce),pe=m(Ke,!0),De=d(Ke),Pe=w(De),Ge=d(De),Le=w(Ge);y((Ye,Xe,ze,Ze,dt,pt,gt)=>{I(H,"data-testid",Ye),h(Oe,Xe),h(pe,ze),I(Pe,"aria-label",Ze),rn(Pe,dt),I(Pe,"placeholder",t(k)),I(Le,"aria-label",pt),rn(Le,gt),I(Le,"placeholder",t(S))},[()=>`add-link-pair-${Y(t(K).sender,t(K).receiver)}`,()=>o.nameOf(t(K).sender),()=>o.nameOf(t(K).receiver),()=>`${l("Name")} ${t(K).sender} ${t(K).receiver}`,()=>t(b)[Y(t(K).sender,t(K).receiver)]?.name??"",()=>`${l("Description")} ${t(K).sender} ${t(K).receiver}`,()=>t(b)[Y(t(K).sender,t(K).receiver)]?.description??""]),J("input",Pe,Ye=>ne(t(K).sender,t(K).receiver,"name",Ye.currentTarget.value)),J("input",Le,Ye=>ne(t(K).sender,t(K).receiver,"description",Ye.currentTarget.value)),v(Te,H)}),y((Te,K,H,Ce)=>{h(ee,Te),h(Ne,K),h(We,H),h(rt,Ce)},[()=>l("Sender"),()=>l("Receiver"),()=>l("Name"),()=>l("Description")]),v(ae,V)},ye=c(()=>z().length>1);$(he,ae=>{t(ye)&&ae(ge)})}y((ae,V)=>{h(me,ae),h(xe,`LINK_SOURCE_ROLES: ${t(C)??""}`),h(M,V),h(Ee,`LINK_TARGET_ROLES: ${t(T)??""}`)},[()=>l("Sender"),()=>l("Receiver")]),v(le,te)},$$slots:{buttons:!0,default:!0}})}mt()}kt(["click","input"]);var yS=_('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="smoke-group-apply"> </button>',1),ES=_('— TEAM_TAG <span class="hmm-mono"> </span>',1),SS=_('<p class="hmm-smoke-muted svelte-1spai3u"><span class="hmm-mono"> </span> <!></p>'),tu=_('<p class="hmm-smoke-muted svelte-1spai3u"> </p>'),kS=_('<p class="hmm-smoke-muted svelte-1spai3u" data-testid="smoke-group-none"> </p>'),wS=_('<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>'),AS=_('<ul class="hmm-smoke-list svelte-1spai3u" data-testid="smoke-group-candidates"></ul>'),TS=_('<div class="hmm-smoke-form svelte-1spai3u"><!> <p class="hmm-smoke-heading svelte-1spai3u"> </p> <!></div>');function RS(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))),S=c(()=>{if(s()===void 0||t(g)===void 0)return[];const z=s();return t(g).channels().filter(Y=>(Y.TEAM_CHANNELS??[]).length>0?!1:z.kind==="team"?(Y.TEAM_TAG??"")!==""&&Y.TEAM_TAG===z.teamTag:Xf(Y))});function E(z){return s()?.kind==="team"||(t(b)[z]??null)!==null}function A(z){if(s()===void 0)return"";if(s().kind==="team"){const ne=t(g)===void 0?void 0:Qf(t(g),z);return ne===void 0||ne===s().address||(t(g)?.get(t(g).get(z)?.TEAM??"")?.TEAM_CHANNELS??[]).length<2?"":o("in {team}",{team:i.nameOf(ne)})}const Y=(t(b)[z]??[]).filter(ne=>ne!==s().number);return Y.length===0?"":o("also in {groups}",{groups:Y.map(ne=>o("Smoke group {n}",{n:ne})).join(", ")})}lt(()=>{n()&&gr(()=>{u(l,[...s()?.members??[]],!0)})});function x(z,Y){u(l,Y?[...t(l),z]:t(l).filter(ne=>ne!==z),!0)}const D=c(()=>Db(s()?.members??[],t(l))),C=c(()=>t(D).added.length>0||t(D).removed.length>0),T=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:z,removed:Y}=t(D);u(f,!0);try{if(s().kind==="team"){const de=s().teamChannel??"";await i.devices.setTeams(t(p),[...z.map(re=>({address:re,teamAddress:de})),...Y.map(re=>({address:re,teamAddress:""}))])===z.length+Y.length&&n(!1);return}const ne=await i.smokeGroups.setMembers(t(p),s().number??0,z,Y),ie=ne.filter(de=>!de.ok);for(const de of ie)i.notices.push("error",`${i.nameOf(de.address)}: ${de.problems.map(G=>G.message).join("; ")||(de.faultString??"")}`,t(p));ie.length===0&&ne.length===z.length+Y.length&&n(!1)}finally{u(f,!1)}}En(r,{get title(){return t(T)},width:"600px",testId:"smoke-group-dialog",get open(){return n()},set open(Y){n(Y)},buttons:Y=>{var ne=yS(),ie=Ie(ne),de=m(ie,!0),G=d(ie,2),re=m(G,!0);y((le,Z)=>{h(de,le),G.disabled=t(f)||!t(C),h(re,Z)},[()=>o("Cancel"),()=>o("Apply")]),J("click",ie,()=>n(!1)),J("click",G,()=>{P()}),v(Y,ne)},children:(Y,ne)=>{var ie=wt(),de=Ie(ie);{var G=re=>{var le=TS(),Z=w(le);{var te=M=>{var ue=SS(),ve=w(ue),be=m(ve,!0),Ee=d(ve,2);{var q=Q=>{var O=ES(),W=d(Ie(O)),ce=m(W,!0);y(()=>h(ce,s().teamTag)),v(Q,O)};$(Ee,Q=>{s().teamTag&&Q(q)})}y(()=>h(be,s().address)),v(M,ue)},j=M=>{var ue=tu(),ve=m(ue);y((be,Ee)=>h(ve,`${be??""}
|
|
14
|
-
${Ee??""}`),[()=>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),me=m(U,!0),ke=d(U,2);{var fe=M=>{var ue=tu(),ve=m(ue,!0);y(be=>h(ve,be),[()=>o("Loading")]),v(M,ue)},Re=c(()=>t(k)&&t(S).some(M=>!(M.ADDRESS in t(b)))),xe=M=>{var ue=kS(),ve=m(ue,!0);y(be=>h(ve,be),[()=>o("This interface has no smoke detector")]),v(M,ue)},se=M=>{var ue=AS();je(ue,21,()=>t(S),ve=>ve.ADDRESS,(ve,be)=>{const Ee=c(()=>E(t(be).ADDRESS));var q=wS(),Q=w(q);let O;var W=w(Q),ce=d(W,2),he=m(ce,!0),ge=d(ce,2),ye=m(ge,!0),ae=d(ge,2),V=m(ae,!0);y((F,R,L)=>{O=St(Q,1,"hmm-smoke-member svelte-1spai3u",null,O,{"hmm-smoke-member-off":!t(Ee)}),W.disabled=!t(Ee),Rr(W,F),I(W,"data-testid",`smoke-group-member-${t(be).ADDRESS}`),h(he,R),h(ye,t(be).ADDRESS),h(V,L)},[()=>t(l).includes(t(be).ADDRESS),()=>i.nameOf(t(be).ADDRESS),()=>t(Ee)?A(t(be).ADDRESS):o("cannot be grouped - no GROUP parameters")]),J("change",W,F=>x(t(be).ADDRESS,F.currentTarget.checked)),v(ve,q)}),v(M,ue)};$(ke,M=>{t(Re)?M(fe):t(S).length===0?M(xe,1):M(se,-1)})}y(M=>h(me,M),[()=>o("Members")]),v(re,le)};$(de,re=>{s()!==void 0&&re(G)})}v(Y,ie)},$$slots:{buttons:!0,default:!0}}),mt()}kt(["click","change"]);var xS=_('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="team-apply"> </button>',1),IS=_('<p data-testid="team-none"> </p>'),DS=_("<option> </option>"),NS=_('<p class="hmm-team-members svelte-1ervkxt" data-testid="team-members"> </p>'),CS=_('<p class="hmm-team-empty svelte-1ervkxt" data-testid="team-empty"> </p>'),PS=_('<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 MS(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??""),S=c(()=>t(b)?.TEAM??""),E=c(()=>t(o).filter(D=>(D.TEAM_TAG??"")===t(k)));lt(()=>{!n()||t(p)===""||s()===""||(u(l,t(S),!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(T=>a.nameOf(T)).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=T=>{var P=xS(),z=Ie(P),Y=m(z,!0),ne=d(z,2),ie=m(ne,!0);y((de,G)=>{h(Y,de),ne.disabled=t(f)||t(k)===""||t(l)===t(S),h(ie,G)},[()=>i("Cancel"),()=>i("Apply")]),J("click",z,()=>n(!1)),J("click",ne,()=>{x()}),v(T,P)};let C=c(()=>i("Team"));En(r,{get title(){return t(C)},width:"560px",testId:"team-dialog",get open(){return n()},set open(T){n(T)},buttons:D,children:(T,P)=>{var z=wt(),Y=Ie(z);{var ne=de=>{var G=IS(),re=m(G,!0);y(le=>h(re,le),[()=>i("This channel does not belong to a team")]),v(de,G)},ie=de=>{var G=PS(),re=Ie(G),le=w(re),Z=m(le,!0),te=d(le,2),j=m(te,!0),U=d(re,2),me=w(U),ke=m(me,!0),fe=d(me,2),Re=w(fe),xe=m(Re,!0);Re.value=Re.__value="";var se=d(Re);je(se,17,()=>t(E),Ee=>Ee.ADDRESS,(Ee,q)=>{var Q=DS(),O=m(Q),W={};y(ce=>{h(O,`${ce??""} (${t(q).ADDRESS??""})`),W!==(W=t(q).ADDRESS)&&(Q.value=(Q.__value=W)??"")},[()=>a.nameOf(t(q).ADDRESS)]),v(Ee,Q)}),Qt(fe);var M=d(U,2);{var ue=Ee=>{const q=c(()=>t(E).find(ce=>ce.ADDRESS===t(l)));var Q=wt(),O=Ie(Q);{var W=ce=>{var he=NS(),ge=m(he);y((ye,ae)=>h(ge,`${ye??""}: ${ae??""}`),[()=>i("Members"),()=>A(t(q))]),v(ce,he)};$(O,ce=>{t(q)&&ce(W)})}v(Ee,Q)};$(M,Ee=>{t(l)!==""&&Ee(ue)})}var ve=d(M,2);{var be=Ee=>{var q=CS(),Q=m(q,!0);y(O=>h(Q,O),[()=>i("The interface knows no other team yet")]),v(Ee,q)};$(ve,Ee=>{t(E).length===0&&Ee(be)})}y((Ee,q)=>{h(Z,s()),h(j,t(k)),h(ke,Ee),h(xe,q)},[()=>i("Team"),()=>i("Own team")]),br(fe,()=>t(l),Ee=>u(l,Ee)),v(de,G)};$(Y,de=>{t(k)===""?de(ne):de(ie,-1)})}v(T,z)},$$slots:{buttons:!0,default:!0}})}mt()}kt(["click"]);function Oh(r,e){return wd(e,r.pair)?.seconds}function OS(r,e){return Oh(r,e)===r.notUsedSeconds}function Lh(r,e){const n=ah(e,r.pair),s=Ad(e,r.pair);if(!(!n||!s))return{values:s,exact:n.exact,seconds:n.seconds}}function LS(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=sh(i);n.push({pair:s,unitDescription:a,countDescription:i,writable:Yr(a)&&Yr(i),notUsedSeconds:o??ih(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 FS=["REFERENCE_RUNNING_TIME_TOP_BOTTOM","REFERENCE_RUNNING_TIME_BOTTOM_TOP","REFERENCE_RUNNING_TIME_SLATS"],GS=["CHANGE_OVER_DELAY","DELAY_COMPENSATION"],US=["REFERENCE_RUN_COUNTER","ENDPOSITION_AUTO_DETECT"];function BS(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[Fh(n,e)],a=e[n.pair.countParam];if(!(s===void 0||typeof a!="number"))return Math.round(s.seconds*a*1e3)/1e3}function VS(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[Fh(n,e)];return`${String(e[n.pair.countParam]??"—")} × ${s?.name??"—"}`}function HS(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 Lh(r.source.view,e)}}function zS(r,e){const{description:n}=r,s=new Map(ho(n).map(f=>[f.name,f])),a=[],i=[];for(const f of FS){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 S=sh(k),E={pair:g,unitDescription:b,countDescription:k,writable:Yr(b)&&Yr(k),notUsedSeconds:S??ih(g),notUsedFromSpecial:S!==void 0};a.push({id:f,source:{kind:"pair",view:E},writable:E.writable}),i.push(g.unitParam,g.countParam)}if(a.length===0||i.some(f=>e.has(f)))return;const o=nu(n,GS),l=nu(n,US);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 nu(r,e){return e.flatMap(n=>{const s=r[n];return s?[{param:n,description:s}]:[]})}function Fh(r,e){const n=e[r.pair.unitParam];return typeof n=="number"?n:r.pair.units.findIndex(s=>s.name===n)}function jS(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?WS(l.presets,o,n):KS(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 WS(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:vd(a,o=>n.uiLabel(o)),raw:e[i]??"",named:!0})}return s}function KS(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 gs(r,e){return`${r}_WP_${e}`}const YS=/^(\d+)_WP_(.+)$/,ru=["WEEKDAY","TIME","CONDITION","ASTRO_TYPE","ASTRO_OFFSET","LEVEL","LEVEL_2","DURATION","RAMP_TIME","OUTPUT_BEHAVIOUR","TARGET_CHANNELS"],qS=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];function $S(r,e){return typeof r=="number"&&(r&1<<e)!==0}function XS(r,e,n){const s=typeof r=="number"?r:0;return n?s|1<<e:s&~(1<<e)}function QS(r,e){const n=r[gs(e,"FIXED_HOUR")],s=r[gs(e,"FIXED_MINUTE")];return typeof n!="number"||typeof s!="number"?"":`${String(n).padStart(2,"0")}:${String(s).padStart(2,"0")}`}function ZS(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{[gs(r,"FIXED_HOUR")]:s,[gs(r,"FIXED_MINUTE")]:Number(n[2])}}function JS(r,e){const n=r[gs(e,"WEEKDAY")];return typeof n!="number"||n===0}function e0(r,e){const{description:n}=r,s=new Map,a=[];for(const A of Object.keys(n)){const x=YS.exec(A),D=x?.[1],C=x?.[2];if(!x||D===void 0||C===void 0)continue;let T=s.get(D);T||(T=new Set,s.set(D,T)),T.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,S=(A,x,D)=>{const C=n[gs(o,D[0]??"")];if(!(!C||D.some(T=>!l.has(T)))){b.push({id:A,kind:x,fields:D,description:C});for(const T of D)k.add(T)}};S("WEEKDAY","weekday",["WEEKDAY"]),S("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 T=p.get(`${C}_WP_${x}`);if(!T){D=!1;break}g[`${C}:${x}`]=T}D&&S(x,"duration",[A,`${x}_FACTOR`])}for(const A of[...l].sort())k.has(A)||S(A,n[gs(o,A)]?.TYPE==="ENUM"?"enum":"number",[A]);if(k.size!==l.size)return;b.sort((A,x)=>su(A.id)-su(x.id)||(A.id<x.id?-1:1));const E=n[gs(o,"WEEKDAY")];return{kind:"switch-week-profile",id:"switch-week-profile",covers:a,slots:i,columns:b,durations:g,writable:E!==void 0&&Yr(E)}}function su(r){const e=ru.indexOf(r);return e===-1?ru.length:e}const ji=["MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY","SUNDAY"],t0=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],au=["ENDTIME","TIMEOUT"],iu=["TEMPERATURE","TEMPERATUR"],n0=/^(?:(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:ou(e[Wr(n.endTimePrefix,s,a)]),value:ou(e[Wr(n.valuePrefix,s,a)])}}function r0(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 s0(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)Gh(i,e,n,s,n,o,l);return i}function a0(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)Gh(a,e,n,o,i,o,l);return a}function ja(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 i0(r){const e=/^(\d{1,2}):([0-5]\d)$/.exec(r.trim());if(!e)return;const n=Number(e[1])*60+Number(e[2]);return n>1440?void 0:n}function o0(r,e){const{description:n}=r,s=[],a=new Map;let i=0;for(const E of Object.keys(n)){const A=n0.exec(E),x=A?.[3],D=A?.[2];if(!A||!x||!D||!ji.includes(x)||!au.includes(D)&&!iu.includes(D))continue;const C=A[1]??"";s.push(E);let T=a.get(C);T||(T=new Set,a.set(C,T)),T.add(D),i=Math.max(i,Number(A[4]))}if(s.length===0||i===0)return;const o=[];let l="",f="";for(const[E,A]of[...a].sort(([x],[D])=>x<D?-1:1)){const x=[...A].find(T=>au.includes(T)),D=[...A].find(T=>iu.includes(T));if(A.size!==2||x===void 0||D===void 0||l!==""&&(x!==l||D!==f))return;l=x,f=D;const C=E===""?"":`${E}_`;o.push({id:E,endTimePrefix:`${C}${x}`,valuePrefix:`${C}${D}`})}const p=[];for(const E of o)for(const A of ji)for(let x=1;x<=i;x+=1)p.push(Wr(E.endTimePrefix,A,x),Wr(E.valuePrefix,A,x));if(p.length!==s.length||p.some(E=>!(E in n)||e.has(E)))return;const g=o[0],b=g&&n[Wr(g.endTimePrefix,"MONDAY",1)],k=g&&n[Wr(g.valuePrefix,"MONDAY",1)],S=b===void 0?void 0:Xn(b,"MAX");if(!(!b||!k||S===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:S,writable:Yr(b)&&Yr(k)}}function Gh(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 ou(r){return typeof r=="number"&&Number.isFinite(r)?r:void 0}const l0={optionByName:()=>{},optionByIndex:()=>{},preset:()=>{},uiLabel:r=>r},d0=[o0,e0,zS,LS,jS];function c0(r,e=l0){const n=[],s=new Set;for(const a of d0){const i=a(r,s,e);if(i){n.push(i);for(const o of i.covers)s.add(o)}}return n}function u0(r){return new Set(r.flatMap(e=>e.covers))}function f0(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 Uh(r,e){const n=e?e.parameters.map(a=>a.name):Sd(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:f0(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 ma(r,e,n,s){const a=h_(r,e,n,{enumAs:a_(s.interfaceName),...s.writeAll===!0?{writeAll:!0}:{}});return{targets:[...s.targets],entries:a.changed.map(i=>({param:i,from:Na(r[i],n[i]),to:Na(a.values[i],n[i])})),values:a.values,skipped:a.skipped,problems:a.problems}}function Na(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 Bh(r,e,n){return Object.keys(r).map(s=>{const a=Na(r[s],n[s]),i=Na(e[s],n[s]);return{param:s,sent:a,stored:i,differs:a!==i}})}function Vh(r){return Sd(r).filter(e=>P_(e)?e!=="DUTY_CYCLE"||r[e]?.TYPE==="BOOL":!1)}function h0(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])=>C1(r.address,s,a))}}const m0=[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=Uh(r).filter(p=>!m0.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 lu(r,e){const n=r.name;return n[e]??n.en??n.de??r.key}function v0(r,e){const n=r.description;return n[e]??n.en??n.de??""}var p0=_('<span class="hmm-param-id svelte-1qr2qb3"> </span>'),g0=_('<input type="checkbox" class="svelte-1qr2qb3"/>'),Zo=_("<option> </option>"),b0=_('<select class="hmm-select hmm-param-enum svelte-1qr2qb3"></select>'),_0=_('<input class="hmm-input hmm-param-number svelte-1qr2qb3" type="number"/>'),y0=_('<select class="hmm-select hmm-param-special svelte-1qr2qb3"><option> </option><!></select>'),E0=_('<select class="hmm-select hmm-param-preset svelte-1qr2qb3"><option>…</option><!></select>'),S0=_("<!> <!> <!>",1),k0=_('<input class="hmm-input hmm-param-text svelte-1qr2qb3" type="text"/>'),w0=_('<span class="hmm-param-unit svelte-1qr2qb3"> </span>'),A0=_("<span> </span>"),T0=_('<div class="hmm-param-set svelte-1qr2qb3"><button type="button" class="hmm-button">setValue</button></div>'),R0=_('<label class="hmm-param-suppress svelte-1qr2qb3"><input type="checkbox"/> <span> </span></label>'),x0=_('<div class="hmm-param-flag svelte-1qr2qb3"><span class="hmm-param-ro"> </span></div>'),I0=_('<div class="hmm-param-range svelte-1qr2qb3"> </div>'),D0=_('<div class="hmm-param-default svelte-1qr2qb3"> </div>'),N0=_('<p class="hmm-param-help hmm-param-table-wide svelte-1qr2qb3"> </p>'),C0=_('<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,""),S=B(e,"suppressTitle",3,void 0),E=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"),T=c(()=>t(C)?aa(Z(e.value),e.field.description):e.value),P=c(()=>t(T)===void 0||t(T)===null?"":String(t(T))),z=c(()=>Z(e.value)??-1),Y=c(()=>e.field.special.find(K=>K.VALUE===Z(e.value)));let ne=N(void 0);const ie=c(()=>t(Y)!==void 0&&!p()&&(t(ne)===void 0||t(ne).on!==e.value));let de=N(void 0),G;lt(()=>{const K=Z(e.value);K!==void 0&&t(Y)===void 0&&(G=K)});const re=c(()=>e.field.preset?.presets.find(K=>K.value===Z(e.value))),le=c(()=>e.label!==e.field.name);function Z(K){if(typeof K=="number")return K;if(typeof K=="string"&&K.trim()!==""&&Number.isFinite(Number(K)))return Number(K)}function te(K){if(K==="")return;const H=bc(Number(K),e.field.description);H!==void 0&&Number.isFinite(H)&&e.onchange(H)}function j(K){return s()?s()(K):K}function U(K){const H=j(K);return H!==K?H:A.meta.specialLabel(e.field.name,K)}function me(K){if(K===void 0||e.field.special.some(Ce=>Ce.VALUE===K))return!1;const H=aa(K,e.field.description);return typeof H=="number"&&(e.field.min===void 0||H>=e.field.min)&&(e.field.max===void 0||H<=e.field.max)}function ke(){const K=Z(e.field.description.DEFAULT);return me(K)?K:me(G)?G:bc(e.field.min??0,e.field.description)??0}async function fe(K){const H=e.field.special.find(Ce=>Ce.ID===K);if(H){u(ne,void 0),e.onchange(H.VALUE);return}u(ne,{on:e.value,draft:ke()},!0),await ti(),t(de)?.focus(),t(de)?.select()}function Re(K){const H=[x("Last change: {time}",{time:K.lc===void 0?"–":Xa(K.lc)}),x("Last report: {time}",{time:Xa(K.ts)})];return K.confirmed||H.push(x("Restored by the system from its own file; no device has reported it since the system started.")),H.push(x("The openccu-lite system's clock")),H.join(`
|
|
15
|
-
`)}var xe=C0();let se;var M=w(xe),ue=w(M),ve=m(ue,!0),be=d(ue,2);{var Ee=K=>{var H=p0(),Ce=m(H,!0);y(()=>h(Ce,e.field.name)),v(K,H)};$(be,K=>{t(le)&&K(Ee)})}var q=d(M,2),Q=w(q);{var O=K=>{var H=g0();y(()=>{Rr(H,e.value===!0||e.value==="true"||e.value===1),H.disabled=t(D),I(H,"aria-label",e.label)}),J("change",H,Ce=>e.onchange(Ce.currentTarget.checked)),v(K,H)},W=K=>{var H=b0();je(H,22,()=>e.field.valueList??[],Oe=>Oe,(Oe,Ke,pe,De)=>{var Pe=Zo(),Ge=m(Pe,!0),Le={};y((Ye,Xe)=>{h(Ge,Ye),Le!==(Le=Xe)&&(Pe.value=(Pe.__value=Le)??"")},[()=>j(Ke),()=>String(t(pe))]),v(Oe,Pe)});var Ce;Qt(H),y(Oe=>{H.disabled=t(D),I(H,"aria-label",e.label),Ce!==(Ce=Oe)&&(H.value=(H.__value=Ce)??"",Cn(H,Ce))},[()=>String(t(z))]),J("change",H,Oe=>e.onchange(Number(Oe.currentTarget.value))),v(K,H)},ce=K=>{var H=S0(),Ce=Ie(H);{var Oe=Ge=>{var Le=_0();_n(Le,Ye=>u(de,Ye),()=>t(de)),y(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(Y)===void 0?t(P):String(aa(t(ne)!==void 0&&t(ne).on===e.value?t(ne).draft:ke(),e.field.description))]),J("input",Le,Ye=>te(Ye.currentTarget.value)),v(Ge,Le)};$(Ce,Ge=>{t(ie)||Ge(Oe)})}var Ke=d(Ce,2);{var pe=Ge=>{var Le=y0(),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),Me={};y($e=>{h(Se,$e),Me!==(Me=t(pt).ID)&&(gt.value=(gt.__value=Me)??"")},[()=>U(t(pt).ID)]),v(dt,gt)});var Ze;Qt(Le),y(dt=>{Le.disabled=t(D),I(Le,"aria-label",`${e.label} SPECIAL`),h(Xe,dt),Ze!==(Ze=t(ie)?t(Y)?.ID??"":"")&&(Le.value=(Le.__value=Ze)??"",Cn(Le,Ze))},[()=>x("Enter value")]),J("change",Le,dt=>{fe(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=E0(),Ye=w(Le);Ye.value=Ye.__value="";var Xe=d(Ye);je(Xe,17,()=>e.field.preset.presets,Ze=>String(Ze.value),(Ze,dt,pt,gt)=>{var Se=Zo(),Me=m(Se,!0),$e={};y((ft,yt)=>{h(Me,ft),$e!==($e=yt)&&(Se.value=(Se.__value=$e)??"")},[()=>vd(t(dt),a()??j),()=>String(t(dt).value)]),v(Ze,Se)});var ze;Qt(Le),y(Ze=>{Le.disabled=t(D),I(Le,"aria-label",`${e.label} presets`),ze!==(ze=Ze)&&(Le.value=(Le.__value=ze)??"",Cn(Le,ze))},[()=>t(re)===void 0?"":String(t(re).value)]),J("change",Le,Ze=>{const dt=e.field.preset?.presets.find(pt=>String(pt.value)===Ze.currentTarget.value);dt!==void 0&&e.onchange(dt.value)}),v(Ge,Le)};$(De,Ge=>{e.field.preset&&Ge(Pe)})}v(K,H)},he=K=>{var H=k0();y(()=>{H.disabled=t(D),I(H,"aria-label",e.label),rn(H,t(P))}),J("input",H,Ce=>e.onchange(Ce.currentTarget.value)),v(K,H)};$(Q,K=>{e.field.kind==="bool"||e.field.kind==="action"?K(O):e.field.kind==="enum"?K(W,1):t(C)?K(ce,2):K(he,-1)})}var ge=d(Q,2);{var ye=K=>{var H=w0(),Ce=m(H,!0);y(()=>h(Ce,e.field.unit)),v(K,H)};$(ge,K=>{e.field.unit!==""&&!t(ie)&&K(ye)})}var ae=d(ge,2);{var V=K=>{var H=A0();let Ce;var Oe=m(H,!0);y((Ke,pe,De)=>{Ce=St(H,1,"hmm-param-since svelte-1qr2qb3",null,Ce,{"hmm-param-restored":!i().confirmed}),I(H,"title",Ke),I(H,"data-testid",`since-${e.field.name}`),I(H,"data-confirmed",pe),h(Oe,De)},[()=>Re(i()),()=>String(i().confirmed),()=>i().confirmed?x("since {time}",{time:Xa(i().lc??i().ts)}):x("restored")]),v(K,H)};$(ae,K=>{i()&&K(V)})}var F=d(q,2);{var R=K=>{var H=T0(),Ce=m(H);y(()=>{Ce.disabled=t(D),I(Ce,"data-testid",`set-${e.field.name}`)}),J("click",Ce,()=>o()()),v(K,H)};$(F,K=>{o()&&K(R)})}var L=d(F,2);{var ee=K=>{var H=R0(),Ce=w(H),Oe=d(Ce,2),Ke=m(Oe,!0);y(()=>{I(H,"title",S()),Rr(Ce,g()===!0),I(Ce,"data-testid",`suppress-${e.field.name}`),h(Ke,k())}),J("change",Ce,pe=>b()(pe.currentTarget.checked)),v(K,H)};$(L,K=>{b()&&K(ee)})}var _e=d(L,2);{var Ne=K=>{var H=x0(),Ce=w(H),Oe=m(Ce,!0);y((Ke,pe)=>{I(Ce,"title",Ke),h(Oe,pe)},[()=>x("Read-only"),()=>x("ro")]),v(K,H)};$(_e,K=>{e.field.writable||K(Ne)})}var Fe=d(_e,2);{var We=K=>{var H=I0(),Ce=m(H);y(()=>h(Ce,`${e.field.min??"−∞"??""} … ${e.field.max??"∞"??""}`)),v(K,H)};$(Fe,K=>{(e.field.min!==void 0||e.field.max!==void 0)&&!t(ie)&&K(We)})}var tt=d(Fe,2);{var rt=K=>{const H=c(()=>e.field.special.find(Ke=>Ke.VALUE===Z(e.field.description.DEFAULT)));var Ce=D0(),Oe=m(Ce,!0);y(Ke=>h(Oe,Ke),[()=>x("default {value}",{value:t(H)?U(t(H).ID):String(e.field.description.DEFAULT)})]),v(K,Ce)};$(tt,K=>{e.field.description.DEFAULT!==void 0&&K(rt)})}var we=d(tt,2);{var Te=K=>{var H=N0(),Ce=m(H,!0);y(()=>h(Ce,n())),v(K,H)};$(we,K=>{n()&&K(Te)})}y(()=>{se=St(xe,1,"hmm-param hmm-param-table-row svelte-1qr2qb3",null,se,{"hmm-param-changed":l()||E()}),I(xe,"data-testid",`param-${e.field.name}`),I(ue,"title",e.field.name),h(ve,e.label)}),v(r,xe),mt()}kt(["change","input","click"]);var P0=_('<button type="button" class="hmm-button" data-testid="write-stage"> </button>'),M0=_('<button type="button" class="hmm-button"> </button> <!> <button type="button" class="hmm-button" data-testid="write-confirm"> </button>',1),O0=_('<p class="hmm-preview-call svelte-1aaq6az"> </p>'),L0=_('<p class="hmm-preview-call svelte-1aaq6az">putParamset(<span class="hmm-mono"> </span>, <span class="hmm-mono"> </span>, <span class="hmm-mono"> </span>)</p>'),du=_("<li> </li>"),F0=_('<ul class="hmm-preview-warnings svelte-1aaq6az" data-testid="preview-warnings"></ul>'),G0=_('<p data-testid="preview-empty"> </p>'),U0=_('<tr><td class="hmm-mono svelte-1aaq6az"> </td><td class="svelte-1aaq6az"> </td><td class="hmm-preview-new svelte-1aaq6az"> </td></tr>'),B0=_('<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),V0=_('<ul class="hmm-preview-problems svelte-1aaq6az" data-testid="preview-problems"></ul>'),H0=_('<tr><td class="hmm-mono svelte-1aaq6az"> </td><td class="svelte-1aaq6az"> </td><td class="svelte-1aaq6az"> </td></tr>'),z0=_('<p class="hmm-preview-warn svelte-1aaq6az" data-testid="readback-warning"> </p>'),j0=_('<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),W0=_('<li><span class="hmm-mono"> </span> </li>'),K0=_('<ul class="hmm-preview-results svelte-1aaq6az" data-testid="preview-results"></ul>'),Y0=_("<!> <!> <!> <!> <!> <!>",1);function Yl(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 S=jt().i18n.t,E=c(()=>s()===void 0||s().entries.length===0);{const A=D=>{var C=M0(),T=Ie(C),P=m(T,!0),z=d(T,2);{var Y=de=>{var G=P0(),re=m(G,!0);y(le=>{G.disabled=o()||t(E),h(re,le)},[()=>S("Add to pending changes")]),J("click",G,()=>p()()),v(de,G)};$(z,de=>{p()&&de(Y)})}var ne=d(z,2),ie=m(ne,!0);y((de,G)=>{h(P,de),ne.disabled=o()||t(E),h(ie,G)},[()=>S("Close"),()=>g()??S("Write")]),J("click",T,()=>n(!1)),J("click",ne,()=>e.onconfirm()),v(D,C)};let x=c(()=>S("Preview"));En(r,{get title(){return t(x)},width:"640px",testId:"write-preview",get open(){return n()},set open(D){n(D)},buttons:A,children:(D,C)=>{var T=wt(),P=Ie(T);{var z=Y=>{var ne=Y0(),ie=Ie(ne);{var de=se=>{var M=wt(),ue=Ie(M);je(ue,18,()=>s().calls,ve=>ve,(ve,be,Ee)=>{var q=O0(),Q=m(q,!0);y(O=>{I(q,"data-testid",O),h(Q,be)},[()=>`preview-call-${String(t(Ee))}`]),v(ve,q)}),v(se,M)},G=se=>{var M=wt(),ue=Ie(M);je(ue,16,()=>s().targets,ve=>ve,(ve,be)=>{var Ee=L0(),q=d(w(Ee)),Q=m(q,!0),O=d(q,2),W=m(O,!0),ce=d(O,2),he=m(ce,!0);y(ge=>{I(Ee,"data-testid",`preview-call-${be}`),h(Q,be),h(W,a()),h(he,ge)},[()=>JSON.stringify(s().values)]),v(ve,Ee)}),v(se,M)};$(ie,se=>{s().calls?se(de):se(G,-1)})}var re=d(ie,2);{var le=se=>{var M=F0();je(M,20,i,ue=>ue,(ue,ve)=>{var be=du(),Ee=m(be,!0);y(()=>h(Ee,ve)),v(ue,be)}),v(se,M)};$(re,se=>{i().length>0&&se(le)})}var Z=d(re,2);{var te=se=>{var M=G0(),ue=m(M,!0);y(ve=>h(ue,ve),[()=>S("Nothing has changed - nothing will be written")]),v(se,M)},j=se=>{var M=B0(),ue=Ie(M),ve=w(ue),be=w(ve),Ee=w(be),q=m(Ee,!0),Q=d(Ee),O=m(Q,!0),W=d(Q),ce=m(W,!0),he=d(ve);je(he,21,()=>s().entries,F=>F.param,(F,R)=>{var L=U0(),ee=w(L),_e=m(ee,!0),Ne=d(ee),Fe=m(Ne,!0),We=d(Ne),tt=m(We,!0);y(()=>{I(L,"data-testid",`preview-${t(R).param}`),h(_e,t(R).param),h(Fe,t(R).from),h(tt,t(R).to)}),v(F,L)});var ge=d(ue,2),ye=w(ge);{var ae=F=>{var R=Zn();y(()=>h(R,b())),v(F,R)},V=F=>{var R=Zn();y(L=>h(R,`${L??""} ×
|
|
16
|
-
${s().targets.length??""}`),[()=>S("{count} parameters will be written",{},s().entries.length)]),v(F,R)};$(ye,F=>{b()!==void 0?F(ae):F(V,-1)})}y((F,R,L)=>{h(q,F),h(O,R),h(ce,L)},[()=>S("Parameter"),()=>S("Current value"),()=>S("New value")]),v(se,M)};$(Z,se=>{t(E)?se(te):se(j,-1)})}var U=d(Z,2);{var me=se=>{var M=V0();je(M,21,()=>s().problems,ue=>`${ue.param}-${ue.code}`,(ue,ve)=>{var be=du(),Ee=m(be);y(()=>h(Ee,`${t(ve).param??""}: ${t(ve).message??""}`)),v(ue,be)}),v(se,M)};$(U,se=>{s().problems.length>0&&se(me)})}var ke=d(U,2);{var fe=se=>{var M=j0(),ue=Ie(M),ve=w(ue),be=w(ve),Ee=w(be),q=m(Ee,!0),Q=d(Ee),O=m(Q,!0),W=d(Q),ce=m(W,!0),he=d(ve);je(he,21,f,V=>V.param,(V,F)=>{var R=H0();let L;var ee=w(R),_e=m(ee,!0),Ne=d(ee),Fe=m(Ne,!0),We=d(Ne),tt=m(We,!0);y(()=>{I(R,"data-testid",`readback-${t(F).param}`),L=St(R,1,"svelte-1aaq6az",null,L,{"hmm-preview-differs":t(F).differs}),h(_e,t(F).param),h(Fe,t(F).sent),h(tt,t(F).stored)}),v(V,R)});var ge=d(ue,2);{var ye=V=>{var F=z0(),R=m(F,!0);y(L=>h(R,L),[()=>S("The interface answered ok but stored something else")]),v(V,F)},ae=c(()=>f().some(V=>V.differs));$(ge,V=>{t(ae)&&V(ye)})}y((V,F,R)=>{h(q,V),h(O,F),h(ce,R)},[()=>S("Parameter"),()=>S("What was sent"),()=>S("Read back")]),v(se,M)};$(ke,se=>{f().length>0&&se(fe)})}var Re=d(ke,2);{var xe=se=>{var M=K0();je(M,21,l,ue=>`${ue.address}-${ue.paramset}`,(ue,ve)=>{var be=W0();let Ee;var q=w(be),Q=m(q,!0),O=d(q);y(()=>{Ee=St(be,1,"svelte-1aaq6az",null,Ee,{"hmm-preview-failed":!t(ve).ok}),h(Q,t(ve).address),h(O,` ${t(ve).ok?"✔":`✕ ${t(ve).faultString??""}`}`)}),v(ue,be)}),v(se,M)};$(Re,se=>{l().length>0&&se(xe)})}v(Y,ne)};$(P,Y=>{s()&&Y(z)})}v(D,T)},$$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 q0(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 $0(r,e,n){const s=Wi(r.label,e);return s!==void 0?s:"seconds"in r?q0(r.seconds):n(r.special==="notActive"?"Not active":r.special==="permanent"?"Permanent":"Enter value")}function X0(r,e,n){const s=wd(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 Q0(r,e){if("seconds"in r)return Ad(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 Hh(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 Z0(r,e=[]){return r.flatMap(n=>e.filter(s=>s.id===n))}function J0(r,e,n){return r.findIndex(s=>Object.entries(s.values).every(([a,i])=>!(a in n)||Hh(e[a],i)))}function ek(r,e){return Object.fromEntries(Object.entries(r.values).filter(([n])=>n in e))}function tk(r,e){return r.presets.findIndex(n=>Hh(n.value,e)||String(n.value)===String(e))}var nk=_('<h5 class="hmm-link-press hmm-param-table-wide svelte-1fgjxm" data-testid="link-easy-press"> </h5>'),cu=_('<option disabled="">—</option>'),Jo=_("<option> </option>"),rk=_('<select class="hmm-select svelte-1fgjxm"><!><!></select>'),sk=_('<div><span class="hmm-link-easy-label svelte-1fgjxm"> </span> <!></div> <!>',1),ak=_('<div><span class="hmm-link-easy-label svelte-1fgjxm"> </span> <select class="hmm-select svelte-1fgjxm"><!><option> </option></select></div> <!>',1),ik=_('<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>'),ok=_("<!> <!>",1),lk=_('<div class="hmm-link-easy hmm-param-table-span"></div>');function zh(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 T=C===void 0?"":C.kind==="time"?C.pair.unitParam:C.kind==="param"?C.param:"";return T.startsWith("SHORT_")?"SHORT":T.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 T=f(e.form[C]),P=C===0?void 0:f(e.form[C-1]);if(!(T===void 0||T===P))return i(T==="SHORT"?"Short key press":"Long key press")}function b(C,T){return Wi(C.label,t(o))??a.meta.parameterLabel(T,e.channelType)}function k(C){return C.option===void 0?void 0:e.presets[C.option]}let S=N(Be({}));function E(C,T,P){const z=T.presets[P];u(S,{...t(S),[C.param]:z===void 0},!0),z!==void 0&&A(C,z.value)}function A(C,T){e.onchange(Object.fromEntries([C.param,...C.also].map(P=>[P,T])))}function x(C,T){const P=(e.timeSelectors[C.selector]??[])[T];if(P===void 0)return;const z=Q0(P,C.pair);u(l,{...t(l),[C.pair.name]:z===void 0},!0),z!==void 0&&e.onchange(z)}var D=lk();je(D,23,()=>e.form,C=>C.kind==="time"?C.pair.name:C.kind==="param"?C.param:`subset-${String(C.subsets)}`,(C,T,P)=>{const z=c(()=>g(t(P)));var Y=ok(),ne=Ie(Y);{var ie=Z=>{var te=nk(),j=m(te,!0);y(()=>h(j,t(z))),v(Z,te)};$(ne,Z=>{t(z)&&Z(ie)})}var de=d(ne,2);{var G=Z=>{const te=c(()=>e.timeSelectors[t(T).selector]??[]),j=c(()=>X0(t(te),e.values,t(T).pair)),U=c(()=>t(te).findIndex(q=>"special"in q&&q.special==="enterValue")),me=c(()=>t(l)[t(T).pair.name]===!0||t(j)>=0&&t(j)===t(U)||t(te).length===0),ke=c(()=>b(t(T),t(T).pair.countParam));var fe=sk(),Re=Ie(fe);let xe;var se=w(Re),M=m(se,!0),ue=d(se,2);{var ve=q=>{var Q=rk(),O=w(Q);{var W=ge=>{var ye=cu();ye.value=ye.__value="-1",v(ge,ye)};$(O,ge=>{t(j)<0&&ge(W)})}var ce=d(O);je(ce,17,()=>t(te),eo,(ge,ye,ae)=>{var V=Jo(),F=m(V,!0),R={};y((L,ee)=>{h(F,L),R!==(R=ee)&&(V.value=(V.__value=R)??"")},[()=>$0(t(ye),t(o),i),()=>String(ae)]),v(ge,V)});var he;Qt(Q),y(ge=>{I(Q,"aria-label",t(ke)),I(Q,"data-testid",`easy-time-select-${t(T).pair.name}`),he!==(he=ge)&&(Q.value=(Q.__value=he)??"",Cn(Q,he))},[()=>String(t(me)&&t(U)>=0?t(U):t(j))]),J("change",Q,ge=>x(t(T),Number(ge.currentTarget.value))),v(q,Q)};$(ue,q=>{t(te).length>0&&q(ve)})}var be=d(Re,2);{var Ee=q=>{var Q=wt(),O=Ie(Q);je(O,16,()=>[t(T).pair.unitParam,t(T).pair.countParam],W=>W,(W,ce)=>{const he=c(()=>e.fields.get(ce));var ge=wt(),ye=Ie(ge);{var ae=V=>{{let F=c(()=>e.values[ce]??t(he).description.DEFAULT),R=c(()=>a.meta.parameterLabel(ce,e.channelType)),L=c(()=>a.meta.parameterHelp(ce,e.channelType)),ee=c(()=>e.changed(ce));Ea(V,{get field(){return t(he)},get value(){return t(F)},get label(){return t(R)},get help(){return t(L)},get changed(){return t(ee)},valueLabel:_e=>a.meta.valueLabel(ce,_e,e.channelType),presetLabel:_e=>a.meta.uiLabel(_e),onchange:_e=>e.onchange({[ce]:_e})})}};$(ye,V=>{t(he)&&V(ae)})}v(W,ge)}),v(q,Q)};$(be,q=>{t(me)&&q(Ee)})}y(q=>{xe=St(Re,1,"hmm-link-easy-row hmm-param-table-row svelte-1fgjxm",null,xe,{"hmm-param-changed":q}),I(Re,"data-testid",`easy-time-${t(T).pair.name}`),h(M,t(ke))},[()=>e.changed(t(T).pair.unitParam)||e.changed(t(T).pair.countParam)]),v(Z,fe)},re=Z=>{const te=c(()=>e.fields.get(t(T).param)),j=c(()=>k(t(T)));var U=wt(),me=Ie(U);{var ke=Re=>{const xe=c(()=>e.values[t(T).param]??t(te).description.DEFAULT),se=c(()=>tk(t(j),t(xe))),M=c(()=>t(S)[t(T).param]===!0||t(se)<0),ue=c(()=>b(t(T),t(T).param));var ve=ak(),be=Ie(ve);let Ee;var q=w(be),Q=m(q,!0),O=d(q,2),W=w(O);je(W,17,()=>t(j).presets,eo,(V,F,R)=>{var L=Jo(),ee=m(L,!0),_e={};y((Ne,Fe)=>{h(ee,Ne),_e!==(_e=Fe)&&(L.value=(L.__value=_e)??"")},[()=>vd(t(F),Ne=>a.meta.uiLabel(Ne)),()=>String(R)]),v(V,L)});var ce=d(W),he=m(ce,!0);ce.value=ce.__value="-1";var ge;Qt(O);var ye=d(be,2);{var ae=V=>{{let F=c(()=>a.meta.parameterLabel(t(T).param,e.channelType)),R=c(()=>a.meta.parameterHelp(t(T).param,e.channelType)),L=c(()=>e.changed(t(T).param));Ea(V,{get field(){return t(te)},get value(){return t(xe)},entry:!0,get label(){return t(F)},get help(){return t(R)},get changed(){return t(L)},valueLabel:ee=>a.meta.valueLabel(t(T).param,ee,e.channelType),presetLabel:ee=>a.meta.uiLabel(ee),onchange:ee=>A(t(T),ee)})}};$(ye,V=>{t(M)&&V(ae)})}y((V,F,R)=>{Ee=St(be,1,"hmm-link-easy-row hmm-param-table-row svelte-1fgjxm",null,Ee,{"hmm-param-changed":V}),I(be,"data-testid",`easy-preset-${t(T).param}`),h(Q,t(ue)),I(O,"aria-label",t(ue)),I(O,"data-testid",`easy-preset-select-${t(T).param}`),h(he,F),ge!==(ge=R)&&(O.value=(O.__value=ge)??"",Cn(O,ge))},[()=>e.changed(t(T).param),()=>i("Enter value"),()=>String(t(M)?-1:t(se))]),J("change",O,V=>E(t(T),t(j),Number(V.currentTarget.value))),v(Re,ve)},fe=Re=>{{let xe=c(()=>e.values[t(T).param]??t(te).description.DEFAULT),se=c(()=>b(t(T),t(T).param)),M=c(()=>a.meta.parameterHelp(t(T).param,e.channelType)),ue=c(()=>e.changed(t(T).param));Ea(Re,{get field(){return t(te)},get value(){return t(xe)},get label(){return t(se)},get help(){return t(M)},get changed(){return t(ue)},valueLabel:ve=>a.meta.valueLabel(t(T).param,ve,e.channelType),presetLabel:ve=>a.meta.uiLabel(ve),onchange:ve=>A(t(T),ve)})}};$(me,Re=>{t(te)&&t(j)?Re(ke):t(te)&&Re(fe,1)})}v(Z,U)},le=Z=>{const te=c(()=>Z0(t(T).subsets,n()));var j=wt(),U=Ie(j);{var me=ke=>{const fe=c(()=>J0(t(te),e.values,e.description)),Re=c(()=>Wi(t(T).label,t(o))??i("Mode"));var xe=ik(),se=w(xe),M=m(se,!0),ue=d(se,2),ve=w(ue);{var be=Q=>{var O=cu();O.value=O.__value="-1",v(Q,O)};$(ve,Q=>{t(fe)<0&&Q(be)})}var Ee=d(ve);je(Ee,19,()=>t(te),Q=>Q.id,(Q,O,W)=>{var ce=Jo(),he=m(ce,!0),ge={};y((ye,ae)=>{h(he,ye),ge!==(ge=ae)&&(ce.value=(ce.__value=ge)??"")},[()=>Wi(t(T).names?.[t(T).subsets.indexOf(t(O).id)],t(o))??a.meta.parameterLabel(t(O).key,e.channelType),()=>String(t(W))]),v(Q,ce)});var q;Qt(ue),y(Q=>{h(M,t(Re)),I(ue,"aria-label",t(Re)),q!==(q=Q)&&(ue.value=(ue.__value=q)??"",Cn(ue,q))},[()=>String(t(fe))]),J("change",ue,Q=>{const O=t(te)[Number(Q.currentTarget.value)];O&&e.onchange(ek(O,e.description))}),v(ke,xe)};$(U,ke=>{t(te).length>0&&ke(me)})}v(Z,j)};$(de,Z=>{t(T).kind==="time"?Z(G):t(T).kind==="param"?Z(re,1):Z(le,-1)})}v(C,Y)}),y(()=>I(D,"data-testid",s())),v(r,D),mt()}kt(["change"]);var dk=_('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="link-preview"> </button>',1),ck=_("<p> </p>"),uk=_('<p data-testid="link-paramset-failed"> </p>'),fk=_('<div class="hmm-link-targets svelte-1xlqelt"><!></div>'),hk=_('<div class="hmm-link-list hmm-param-table svelte-1xlqelt" data-testid="link-sender-params"></div>'),mk=_('<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>'),uu=_("<option> </option>"),vk=_('<p class="hmm-link-profile-text svelte-1xlqelt" data-testid="link-profile-description"> </p>'),pk=_('<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>'),gk=_('<p class="hmm-link-hint svelte-1xlqelt" data-testid="link-easy-unknown"> </p>'),bk=_("<div><!></div>"),_k=_('<li><span class="hmm-mono"> </span> </li>'),yk=_('<ul class="hmm-link-results svelte-1xlqelt" data-testid="link-results"></ul>'),Ek=_('<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),Sk=_("<!> <!>",1);function jh(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({})),S=N(Be([])),E=N(void 0),A=N(Be(ds)),x=N(!1),D=N(void 0),C=N(""),T=N(""),P=N(Be([])),z=N(!1),Y=N(void 0),ne=N(Be([])),ie=N(Be([])),de=N(!1),G=0,re=N(""),le=N(""),Z=0,te=N(""),j=N("");const U=c(()=>i.app.selectedInterface),me=c(()=>i.devices.index(t(U))),ke=c(()=>t(me)?.get(s())?.TYPE??""),fe=c(()=>t(me)?.get(a())?.TYPE??""),Re=c(()=>`${i.nameOf(s())} → ${i.nameOf(a())} (${s()} ${a()})`),xe=c(()=>t(S).find(we=>we.id===t(A))),se=c(()=>{const we=t(me),Te=we?.get(a()),K=we?.get(s());if(!we||!Te||!K)return"";const H=we.get(Te.PARENT??""),Ce=we.get(K.PARENT??"");return!H||!Ce?"":[si(t(U),Te,"LINK",H),si(t(U),K,"LINK",Ce)].join("|")}),M=c(()=>i.links.templates.filter(we=>we.identity===t(se))),ue=c(()=>t(l)?Qo(t(l),{metadata:t(E),presets:i.meta.presets,profile:t(xe),expert:t(x)}):[]),ve=c(()=>t(p)?Qo(t(p),{expert:!0}):[]),be=c(()=>t(D)??t(ve).length>0),Ee=c(()=>t(l)&&t(xe)&&t(xe).id!==ds?D_(t(xe),t(l)):void 0),q=c(()=>t(x)?void 0:t(Ee)),Q=c(()=>t(x)?Rl(t(Ee),t(E)?.subsets):new Set),O=c(()=>new Map((t(l)?Qo(t(l),{metadata:t(E),presets:i.meta.presets,profile:t(xe)}):[]).map(we=>[we.name,we]))),W=c(()=>F()),ce=c(()=>i.links.of(t(U)).filter(we=>!(we.SENDER===s()&&we.RECEIVER===a())&&(t(me)?.get(we.SENDER)?.TYPE??"")===t(ke)&&(t(me)?.get(we.RECEIVER)?.TYPE??"")===t(fe)).map(we=>({value:`${we.SENDER};${we.RECEIVER}`,label:`${i.nameOf(we.SENDER)} → ${i.nameOf(we.RECEIVER)}`})));lt(()=>{if(!n()||t(U)===""||s()===""||a()==="")return;const we=G+=1,Te={interfaceName:t(U),sender:s(),receiver:a()};u(de,!0),u(re,""),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[K,H,Ce,Oe,Ke]=await Promise.all([i.paramsets.describe(Te.interfaceName,Te.receiver,"LINK"),i.paramsets.read(Te.interfaceName,Te.receiver,Te.sender),i.paramsets.describe(Te.interfaceName,Te.sender,"LINK"),i.paramsets.read(Te.interfaceName,Te.sender,Te.receiver),i.links.info(Te.interfaceName,Te.sender,Te.receiver)]);we===G&&(u(l,K,!0),u(f,H??{},!0),u(p,Ce,!0),u(g,Oe??{},!0),u(C,Ke?.NAME??"",!0),u(T,Ke?.DESCRIPTION??"",!0),u(b,{},!0),u(k,{},!0),u(P,[],!0),u(ne,[],!0),u(ie,[],!0),u(de,!1),u(re,`${Te.interfaceName}|${Te.sender}|${Te.receiver}#${String(we)}`))})()}),lt(()=>{if(!n()||t(fe)===""||t(ke)==="")return;const we=`${t(fe)}|${t(ke)}`;if(we===t(le))return;const Te=Z+=1;u(le,""),u(S,[],!0),Promise.all([i.meta.profilesFor(t(fe),t(ke)),i.meta.linkMetadataFor(t(fe),t(ke)),i.meta.loadPresets()]).then(([K,H])=>{Te===Z&&(u(S,K,!0),u(E,H,!0),u(le,we))})});let he="",ge;lt(()=>{if(t(re)===""||t(le)!==`${t(fe)}|${t(ke)}`||t(S).length===0)return;const we=`${t(re)}|${t(le)}`;if(he===we)return;he=we;const Te=i.meta.engine.detectProfile(t(f),t(S));ge=Te?.id,u(A,Te?.id??ds,!0),u(x,t(A)===ds)}),lt(()=>{const we=t(se);n()&&we!==""&&i.links.loadTemplates(we)});async function ye(){const we=t(te).trim();if(we===""||t(se)===""||!t(l))return;const Te=ma(t(f),t(b),t(l),{interfaceName:t(U),targets:[a()],writeAll:!0}).values,K=t(p)?ma(t(g),t(k),t(p),{interfaceName:t(U),targets:[s()],writeAll:!0}).values:{},H={name:we,identity:t(se),...t(xe)===void 0?{}:{profileId:t(xe).id,profileName:lu(t(xe),i.i18n.language)},receiver:Te,...Object.keys(K).length>0?{sender:K}:{},createdAt:Date.now()};await i.links.saveTemplate(H)&&(u(te,""),u(j,we,!0),i.notices.push("info",`${o("Save as template")}: ${we}`))}function ae(we){const Te=t(M).find(K=>K.name===we);Te&&(Te.profileId!==void 0&&t(S).some(K=>K.id===Te.profileId)&&(u(A,Te.profileId,!0),u(x,t(A)===ds)),u(b,{...t(b),...Te.receiver},!0),Te.sender&&s()!==a()&&u(k,{...t(k),...Te.sender},!0))}function V(we){u(A,we,!0),u(x,we===ds);const Te=t(S).find(Ke=>Ke.id===we);if(!Te||!t(l))return;const K=we===ge,H=i.meta.engine.applyProfile(Te,K?t(f):F(),t(l),{keepCurrent:K}),Ce={};for(const Ke of[...Object.keys(Te.params),Qa]){const pe=H.values[Ke];pe!==void 0&&(Ce[Ke]=pe)}u(b,{...t(b),...Ce},!0);const Oe=H.problems.filter(Ke=>Ke.code==="unknown-parameter");Oe.length>0&&i.notices.push("info",`${o("The profile names {count} parameters this firmware does not have",{},Oe.length)}: ${Oe.map(Ke=>Ke.param).join(", ")}`);for(const Ke of H.problems.filter(pe=>pe.code!=="unknown-parameter"))i.notices.push("warn",`${Ke.param}: ${Ke.message}`)}function F(){const we={...t(f)};for(const[Te,K]of Object.entries(t(b)))(typeof K=="boolean"||typeof K=="number"||typeof K=="string")&&(we[Te]=K);return we}function R(we,Te,K){return Object.prototype.hasOwnProperty.call(K,we.name)?K[we.name]:Te[we.name]??we.description.DEFAULT}async function L(){await i.links.setInfo(t(U),s(),a(),t(C),t(T))}function ee(){const we=t(P).map(Te=>{const[K,H]=Te.split(";");return{sender:K??"",receiver:H??""}});return[{sender:s(),receiver:a()},...we]}function _e(){t(l)&&(u(ne,[],!0),u(Y,ma(t(f),t(b),t(l),{interfaceName:t(U),targets:ee().map(we=>`${we.receiver}←${we.sender}`)}),!0),u(z,!0))}function Ne(){const we=t(Y);if(!we)return;const Te=t(p)?ma(t(g),t(k),t(p),{interfaceName:t(U),targets:[s()]}).values:{},K={receiverToSender:we.values,...Object.keys(Te).length>0?{senderToReceiver:Te}:{}};if(Object.keys(we.values).length===0&&Object.keys(Te).length===0)return;const H=ee();i.changeSet.stage({kind:"linkParamset",interfaceName:t(U),title:`LINK — ${i.nameOf(s())} → ${i.nameOf(a())}`,links:H,values:K,calls:H.map(Ce=>`putParamset(${Ce.receiver}, ${Ce.sender}, ${JSON.stringify(K.receiverToSender)})`),lines:we.entries.map(Ce=>({label:Ce.param,from:Ce.from,to:Ce.to}))}),u(z,!1),n(!1)}async function Fe(){const we=t(Y);if(!we)return;const Te=t(p)?ma(t(g),t(k),t(p),{interfaceName:t(U),targets:[s()]}).values:{},K=await i.paramsets.putLink(t(U),ee(),{receiverToSender:we.values,...Object.keys(Te).length>0?{senderToReceiver:Te}:{}});u(ne,K,!0);const H=await i.paramsets.read(t(U),a(),s());H&&t(l)&&(u(ie,Bh(we.values,H,t(l)),!0),u(f,H,!0),u(b,{},!0),u(k,{},!0)),K.length>0&&K.every(Ce=>Ce.ok)&&!t(ie).some(Ce=>Ce.differs)&&u(z,!1)}var We=Sk(),tt=Ie(We);En(tt,{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(Te){n(Te)},buttons:Te=>{var K=dk(),H=Ie(K),Ce=m(H,!0),Oe=d(H,2),Ke=m(Oe,!0);y((pe,De)=>{h(Ce,pe),Oe.disabled=!t(l),h(Ke,De)},[()=>o("Close"),()=>o("Preview")]),J("click",H,()=>n(!1)),J("click",Oe,_e),v(Te,K)},children:(Te,K)=>{var H=wt(),Ce=Ie(H);{var Oe=De=>{var Pe=ck(),Ge=m(Pe,!0);y(Le=>h(Ge,Le),[()=>o("Loading Homematic Manager...")]),v(De,Pe)},Ke=De=>{var Pe=uk(),Ge=m(Pe,!0);y(Le=>h(Ge,Le),[()=>o("No data")]),v(De,Pe)},pe=De=>{var Pe=Ek(),Ge=Ie(Pe),Le=w(Ge),Ye=w(Le),Xe=m(Ye,!0),ze=d(Ye,2),Ze=d(Le,2),dt=d(w(Ze),2),pt=d(Ze,2),gt=m(pt,!0),Se=d(Ge,2);{var Me=Ve=>{var Je=fk(),at=w(Je);{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(ce)},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,Je)};$(Se,Ve=>{t(ce).length>0&&Ve(Me)})}var $e=d(Se,2);{var ft=Ve=>{var Je=mk(),at=w(Je),_t=w(at),Rt=m(_t,!0),Vt=d(_t),Ut=d(at,2);{var ln=Bt=>{var hn=hk();je(hn,21,()=>t(ve),Tn=>Tn.name,(Tn,gn)=>{{let Lt=c(()=>R(t(gn),t(g),t(k))),It=c(()=>i.meta.parameterLabel(t(gn).name,t(ke))),Qe=c(()=>i.meta.parameterHelp(t(gn).name,t(ke))),et=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(et)},valueLabel:bt=>i.meta.valueLabel(t(gn).name,bt,t(ke)),presetLabel:bt=>i.meta.uiLabel(bt),onchange:bt=>u(k,{...t(k),[t(gn).name]:bt},!0)})}}),v(Bt,hn)};$(Ut,Bt=>{t(be)&&Bt(ln)})}y((Bt,hn)=>{I(_t,"aria-expanded",t(be)),h(Rt,t(be)?"−":"+"),h(Vt,` ${Bt??""}: ${hn??""} (${s()??""})`)},[()=>o("Sender"),()=>i.nameOf(s())]),J("click",_t,()=>u(D,!t(be))),v(Ve,Je)};$($e,Ve=>{s()!==a()&&Ve(ft)})}var yt=d($e,2),it=w(yt),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(S),Ve=>Ve.id,(Ve,Je)=>{var at=uu(),_t=m(at,!0),Rt={};y((Vt,Ut)=>{h(_t,Vt),Rt!==(Rt=Ut)&&(at.value=(at.__value=Rt)??"")},[()=>lu(t(Je),i.i18n.language),()=>String(t(Je).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 Je=vk(),at=m(Je,!0);y(_t=>h(at,_t),[()=>v0(t(xe),i.i18n.language)]),v(Ve,Je)};$(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,Je)=>{var at=uu(),_t=m(at),Rt={};y(()=>{h(_t,`${t(Je).name??""}${t(Je).profileName===void 0?"":` — ${t(Je).profileName}`}`),Rt!==(Rt=t(Je).name)&&(at.value=(at.__value=Rt)??"")}),v(Ve,at)});var lr;Qt(Ln);var yr=d(On,2),tr=w(yr),Er=m(tr,!0),Qr=d(tr,2),nr=d(yr,2),as=m(nr,!0),oe=d(nr,2),He=m(oe,!0),Gt=d(Mt,2);{var pn=Ve=>{var Je=pk(),at=d(w(Je),1,!0);y(_t=>h(at,_t),[()=>o("Marked: the parameters the easy mode of this profile shows")]),v(Ve,Je)},Sn=Ve=>{var Je=gk(),at=m(Je,!0);y(_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,Je)};$(Gt,Ve=>{t(x)&&t(Q).size>0?Ve(pn):!t(x)&&!t(q)&&t(xe)&&t(xe).id!==ds&&Ve(Sn,1)})}var er=d(Gt,2),Or=w(er);{var ys=Ve=>{{let Je=c(()=>t(E)?.subsets);zh(Ve,{get form(){return t(q)},testId:"link-easy-form",get fields(){return t(O)},get values(){return t(W)},changed:at=>Object.prototype.hasOwnProperty.call(t(b),at),get description(){return t(l)},get channelType(){return t(fe)},get subsets(){return t(Je)},get presets(){return i.meta.presets},get timeSelectors(){return i.meta.timeSelectors},onchange:at=>u(b,{...t(b),...at},!0)})}},ct=Ve=>{var Je=wt(),at=Ie(Je);je(at,17,()=>t(ue),_t=>_t.name,(_t,Rt)=>{var Vt=bk();let Ut;var ln=w(Vt);{let Bt=c(()=>R(t(Rt),t(f),t(b))),hn=c(()=>i.meta.parameterLabel(t(Rt).name,t(fe))),Tn=c(()=>i.meta.parameterHelp(t(Rt).name,t(fe))),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(fe)),presetLabel:Lt=>i.meta.uiLabel(Lt),onchange:Lt=>u(b,{...t(b),[t(Rt).name]:Lt},!0)})}y(Bt=>Ut=St(Vt,1,"hmm-link-easy-mark hmm-param-table-span svelte-1xlqelt",null,Ut,{"hmm-link-easy-marked":Bt}),[()=>t(Q).has(t(Rt).name)]),v(_t,Vt)}),v(Ve,Je)};$(Or,Ve=>{t(q)&&t(l)?Ve(ys):Ve(ct,-1)})}var nt=d(yt,2);{var st=Ve=>{var Je=yk();je(Je,21,()=>t(ne),at=>`${at.address}-${at.peer??""}`,(at,_t)=>{var Rt=_k();let Vt;var Ut=w(Rt),ln=m(Ut,!0),Bt=d(Ut);y(()=>{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,Je)};$(nt,Ve=>{t(ne).length>0&&Ve(st)})}y((Ve,Je,at,_t,Rt,Vt,Ut,ln,Bt,hn,Tn,gn,Lt)=>{h(Xe,Ve),h(gt,Je),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(Er,hn),nr.disabled=Tn,h(as,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(se)==="",()=>o("Save as template"),()=>o("Delete template")]),An(ze,()=>t(C),Ve=>u(C,Ve)),An(dt,()=>t(T),Ve=>u(T,Ve)),J("click",pt,()=>{L()}),J("change",un,Ve=>V(Number(Ve.currentTarget.value))),mr(Jn,()=>t(x),Ve=>u(x,Ve)),J("change",Ln,Ve=>{u(j,Ve.currentTarget.value,!0),ae(t(j))}),An(Qr,()=>t(te),Ve=>u(te,Ve)),J("click",nr,()=>{ye()}),J("click",oe,()=>{const Ve=t(j);u(j,""),i.links.removeTemplate(Ve,t(se))}),v(De,Pe)};$(Ce,De=>{t(de)&&!t(l)?De(Oe):t(l)?De(pe,-1):De(Ke,1)})}v(Te,H)},$$slots:{buttons:!0,default:!0}});var rt=d(tt,2);Yl(rt,{get preview(){return t(Y)},paramset:"LINK",get results(){return t(ne)},get readBack(){return t(ie)},get writing(){return i.paramsets.writing},onstage:Ne,onconfirm:()=>{Fe()},get open(){return t(z)},set open(we){u(z,we,!0)}}),v(r,We),mt()}kt(["click","change"]);var kk=_('<span class="hmm-blind-warn svelte-6iyslx"> </span>'),wk=_('<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>'),Ak=_('<div class="hmm-blind-row svelte-6iyslx"><div class="hmm-blind-label svelte-6iyslx"><span> </span> <span class="hmm-blind-id svelte-6iyslx"> </span></div> <div class="hmm-blind-control svelte-6iyslx"><input class="hmm-input hmm-blind-number svelte-6iyslx" type="number" step="0.1"/> <span class="hmm-blind-unit svelte-6iyslx">s</span></div> <div class="hmm-blind-meta svelte-6iyslx"><span> </span></div></div>'),Tk=_('<input type="checkbox"/>'),Rk=_('<input class="hmm-input hmm-blind-number svelte-6iyslx" type="number" step="1"/>'),xk=_('<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>'),Ik=_('<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 Dk(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 T=HS(D,Number(C));T&&(u(a,T.exact||T.seconds===Number(C)?Object.fromEntries(Object.entries(t(a)).filter(([P])=>P!==D.id)):{...t(a),[D.id]:T.seconds},!0),e.onchange(T.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=Ik(),g=w(p),b=m(g,!0),k=d(g,2),S=m(k,!0),E=d(k,2);je(E,17,()=>e.spec.runningTimes,D=>D.id,(D,C)=>{const T=c(()=>BS(t(C),e.values));var P=wk(),z=w(P),Y=w(z),ne=m(Y,!0),ie=d(Y,2),de=m(ie,!0),G=d(z,2),re=w(G),le=d(re,4),Z=m(le,!0),te=d(G,2),j=w(te),U=m(j,!0),me=d(j,2);{var ke=fe=>{var Re=kk(),xe=m(Re,!0);y(se=>{I(Re,"data-testid",`blind-${t(C).id}-inexact`),h(xe,se)},[()=>s("The device can only do {seconds}",{seconds:hi(t(a)[t(C).id]??0)})]),v(fe,Re)};$(me,fe=>{t(a)[t(C).id]!==void 0&&fe(ke)})}y((fe,Re,xe,se)=>{I(P,"data-testid",`blind-${t(C).id}`),h(ne,fe),h(de,t(C).id),re.disabled=!t(C).writable,I(re,"aria-label",Re),I(re,"data-testid",`blind-${t(C).id}-seconds`),rn(re,t(T)??""),I(le,"data-testid",`blind-${t(C).id}-raw`),h(Z,xe),h(U,se)},[()=>i(t(C).id),()=>i(t(C).id),()=>VS(t(C),e.values),()=>t(T)===void 0?"—":hi(t(T))]),J("input",re,fe=>o(t(C),fe.currentTarget.value)),v(D,P)});var A=d(E,2);je(A,17,()=>e.spec.delays,D=>D.param,(D,C)=>{var T=Ak(),P=w(T),z=w(P),Y=m(z,!0),ne=d(z,2),ie=m(ne,!0),de=d(P,2),G=w(de),re=d(de,2),le=w(re),Z=m(le);y((te,j,U,me,ke,fe)=>{I(T,"data-testid",`blind-${t(C).param}`),h(Y,te),h(ie,t(C).param),I(G,"min",j),I(G,"max",U),I(G,"aria-label",me),I(G,"data-testid",`blind-${t(C).param}-value`),rn(G,e.values[t(C).param]??""),h(Z,`${ke??""} … ${fe??""}`)},[()=>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")??"∞"]),J("input",G,te=>l(t(C),te.currentTarget.value)),v(D,T)});var x=d(A,2);je(x,17,()=>e.spec.extras,D=>D.param,(D,C)=>{var T=xk(),P=w(T),z=w(P),Y=m(z,!0),ne=d(z,2),ie=m(ne,!0),de=d(P,2),G=w(de);{var re=Z=>{var te=Tk();y(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)]),J("change",te,j=>f(t(C).param,j.currentTarget.checked)),v(Z,te)},le=Z=>{var te=Rk();y((j,U,me)=>{I(te,"min",j),I(te,"max",U),I(te,"aria-label",me),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)]),J("input",te,j=>l(t(C),j.currentTarget.value)),v(Z,te)};$(G,Z=>{t(C).description.TYPE==="BOOL"?Z(re):Z(le,-1)})}y(Z=>{I(T,"data-testid",`blind-${t(C).param}`),h(Y,Z),h(ie,t(C).param)},[()=>i(t(C).param)]),v(D,T)}),y((D,C)=>{h(b,D),h(S,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 Nk=_("<option> </option>"),fu=_('<span class="hmm-duration-broken svelte-1jozrc9"> </span>'),Ck=_("<span> </span>"),Pk=_('<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>'),Mk=_('<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 Ok(r,e){ht(e,!0);const n=jt(),s=n.i18n.t;let a=N(Be({}));function i(T){return n.meta.parameterLabel(T.pair.unitParam,e.channelType)}function o(T){return Oh(T,e.values)}function l(T,P){const z=Lh(T,P);z&&(u(a,z.exact?Object.fromEntries(Object.entries(t(a)).filter(([Y])=>Y!==T.pair.name)):{...t(a),[T.pair.name]:z.seconds},!0),e.onchange(z.values))}function f(T,P){const z=Number(P);P===""||!Number.isFinite(z)||l(T,z)}function p(T,P){const z=Number(P),Y=o(T),ne=T.pair.units[z];if(ne===void 0||Y===void 0)return;const ie=Math.min(T.pair.maxCount,Math.max(0,Math.round(Y/ne.seconds)));b({[T.pair.unitParam]:z,[T.pair.countParam]:ie})}function g(T,P){const z=Number(P);P===""||!Number.isInteger(z)||b({[T.pair.countParam]:z})}function b(T){e.onchange(T)}function k(T){const P=e.values[T.pair.unitParam];return typeof P=="number"?P:T.pair.units.findIndex(z=>z.name===P)}var S=Mk(),E=w(S),A=m(E,!0),x=d(E,2),D=m(x,!0),C=d(x,2);je(C,17,()=>e.spec.pairs,T=>T.pair.name,(T,P)=>{const z=c(()=>o(t(P))),Y=c(()=>OS(t(P),e.values));var ne=Pk(),ie=w(ne),de=w(ie),G=m(de,!0),re=d(de,2),le=m(re),Z=d(ie,2),te=w(Z),j=d(te,4);je(j,23,()=>t(P).pair.units,q=>q.name,(q,Q,O)=>{var W=Nk(),ce=m(W,!0),he={};y(ge=>{h(ce,t(Q).name),he!==(he=ge)&&(W.value=(W.__value=he)??"")},[()=>String(t(O))]),v(q,W)});var U;Qt(j);var me=d(j,2),ke=d(me,2),fe=w(ke),Re=d(fe,2),xe=m(Re,!0),se=d(Z,2),M=w(se);{var ue=q=>{var Q=fu(),O=m(Q,!0);y(W=>h(O,W),[()=>s("The device holds a value this pair cannot express")]),v(q,Q)},ve=q=>{var Q=Ck(),O=m(Q,!0);y(W=>h(O,W),[()=>hi(t(z))]),v(q,Q)};$(M,q=>{t(z)===void 0?q(ue):q(ve,-1)})}var be=d(M,2);{var Ee=q=>{var Q=fu(),O=m(Q,!0);y(W=>{I(Q,"data-testid",`duration-${t(P).pair.name}-inexact`),h(O,W)},[()=>s("The device can only do {seconds}",{seconds:hi(t(a)[t(P).pair.name]??0)})]),v(q,Q)};$(be,q=>{t(a)[t(P).pair.name]!==void 0&&q(Ee)})}y((q,Q,O,W,ce,he)=>{I(ne,"data-testid",`duration-${t(P).pair.name}`),h(G,q),h(le,`${t(P).pair.unitParam??""} / ${t(P).pair.countParam??""}`),te.disabled=!t(P).writable||t(Y),I(te,"aria-label",Q),I(te,"data-testid",`duration-${t(P).pair.name}-seconds`),rn(te,t(z)??""),j.disabled=!t(P).writable,I(j,"aria-label",O),I(j,"data-testid",`duration-${t(P).pair.name}-unit`),U!==(U=W)&&(j.value=(j.__value=U)??"",Cn(j,U)),I(me,"max",t(P).pair.maxCount),me.disabled=!t(P).writable,I(me,"aria-label",ce),I(me,"data-testid",`duration-${t(P).pair.name}-count`),rn(me,e.values[t(P).pair.countParam]??""),fe.disabled=!t(P).writable,Rr(fe,t(Y)),I(fe,"data-testid",`duration-${t(P).pair.name}-not-used`),h(xe,he),I(se,"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")]),J("input",te,q=>f(t(P),q.currentTarget.value)),J("change",j,q=>p(t(P),q.currentTarget.value)),J("input",me,q=>g(t(P),q.currentTarget.value)),J("change",fe,q=>l(t(P),q.currentTarget.checked?t(P).notUsedSeconds:0)),v(T,ne)}),y((T,P)=>{h(A,T),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,S),mt()}kt(["input","change"]);var hu=_("<option> </option>"),Lk=_("<span> </span>"),Fk=_('<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>'),Gk=_('<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 Uk(r,e){ht(e,!0);const n=jt(),s=n.i18n.t;function a(E){return n.meta.parameterLabel(E,e.channelType)}function i(E){const A=e.values[E.param];return typeof A=="number"?A:E.options.find(x=>x.raw===A)?.value??-1}function o(E){const A=i(E);return A>=0&&!E.options.some(x=>x.value===A)?A:void 0}function l(E,A){return E.description.VALUE_LIST?.[A]??String(A)}var f=Gk(),p=w(f),g=m(p,!0),b=d(p,2),k=m(b,!0),S=d(b,2);je(S,17,()=>e.spec.fields,E=>E.param,(E,A)=>{const x=c(()=>i(t(A))),D=c(()=>o(t(A)));var C=Fk(),T=w(C),P=w(T),z=m(P,!0),Y=d(P,2),ne=m(Y,!0),ie=d(T,2),de=w(ie),G=w(de);{var re=fe=>{var Re=hu(),xe=m(Re),se={};y((M,ue)=>{h(xe,`${M??""} (${t(D)??""})`),se!==(se=ue)&&(Re.value=(Re.__value=se)??"")},[()=>l(t(A),t(D)),()=>String(t(D))]),v(fe,Re)};$(G,fe=>{t(D)!==void 0&&fe(re)})}var le=d(G);je(le,17,()=>t(A).options,fe=>fe.value,(fe,Re)=>{var xe=hu(),se=m(xe,!0),M={};y(ue=>{h(se,t(Re).label),M!==(M=ue)&&(xe.value=(xe.__value=M)??"")},[()=>String(t(Re).value)]),v(fe,xe)});var Z;Qt(de);var te=d(de,2),j=m(te,!0),U=d(ie,2),me=w(U);{var ke=fe=>{var Re=Lk(),xe=m(Re,!0);y(()=>{I(Re,"data-testid",`enum-${t(A).param}-preset`),h(xe,t(A).presetId)}),v(fe,Re)};$(me,fe=>{t(A).presetId!==void 0&&fe(ke)})}y((fe,Re,xe,se)=>{I(C,"data-testid",`enum-${t(A).param}`),h(z,fe),h(ne,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,se)},[()=>a(t(A).param),()=>a(t(A).param),()=>String(t(x)),()=>t(x)<0?"—":`${l(t(A),t(x))} (${t(x)})`]),J("change",de,fe=>e.onchange({[t(A).param]:Number(fe.currentTarget.value)})),v(E,C)}),y((E,A)=>{h(g,E),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 Bk=_('<th class="svelte-hdzef5"> </th>'),Vk=_('<label class="svelte-hdzef5"><input type="checkbox"/> <span> </span></label>'),Hk=_('<div class="hmm-switch-days svelte-hdzef5"><!> <span class="hmm-switch-raw svelte-hdzef5"> </span></div>'),zk=_('<input class="hmm-input hmm-switch-time svelte-hdzef5" type="text" inputmode="numeric"/>'),jk=_('<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),Wk=_("<option> </option>"),Kk=_('<select class="hmm-select"></select>'),Yk=_('<span class="hmm-switch-raw svelte-hdzef5"> </span>'),qk=_('<input class="hmm-input hmm-switch-number svelte-hdzef5" type="number"/> <!>',1),$k=_('<td class="svelte-hdzef5"><!></td>'),Xk=_('<tr><td class="hmm-switch-index svelte-hdzef5"> </td><!></tr>'),Qk=_('<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 Zk(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)||!JS(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[gs(te,j)]}function f(te,j,U){e.onchange({[gs(te,j)]:U})}function p(te,j){const U=ZS(te,j);U&&e.onchange(U)}function g(te,j){const U=e.spec.durations[`${te}:${j.id}`];return U===void 0?void 0:wd(e.values,U)?.seconds}function b(te,j,U){const me=e.spec.durations[`${te}:${j.id}`],ke=Number(U);if(me===void 0||U===""||!Number.isFinite(ke))return;const fe=Ad(ke,me);fe&&e.onchange(fe)}function k(te,j,U){const me=Number(U);U===""||!Number.isFinite(me)||f(te,j,me)}var S=Qk(),E=w(S),A=m(E,!0),x=d(E,2),D=m(x,!0),C=d(x,2),T=w(C),P=d(T,2),z=m(P,!0),Y=d(C,2),ne=w(Y),ie=w(ne),de=w(ie),G=w(de),re=m(G,!0),le=d(G);je(le,17,()=>e.spec.columns,te=>te.id,(te,j)=>{var U=Bk(),me=m(U,!0);y(ke=>h(me,ke),[()=>o(t(j))]),v(te,U)});var Z=d(ie);je(Z,20,()=>t(i),te=>te,(te,j)=>{var U=Xk(),me=w(U),ke=m(me,!0),fe=d(me);je(fe,17,()=>e.spec.columns,Re=>Re.id,(Re,xe)=>{var se=$k(),M=w(se);{var ue=Q=>{var O=Hk(),W=w(O);je(W,18,()=>qS,ge=>ge,(ge,ye,ae)=>{var V=Vk(),F=w(V),R=d(F,2),L=m(R,!0);y((ee,_e,Ne,Fe)=>{I(V,"title",ee),F.disabled=!e.spec.writable,I(F,"aria-label",_e),I(F,"data-testid",`switch-${j}-day-${t(ae)}`),Rr(F,Ne),h(L,Fe)},[()=>s(ye),()=>s(ye),()=>$S(l(j,"WEEKDAY"),t(ae)),()=>s(ye).slice(0,2)]),J("change",F,ee=>f(j,"WEEKDAY",XS(l(j,"WEEKDAY"),t(ae),ee.currentTarget.checked))),v(ge,V)});var ce=d(W,2),he=m(ce,!0);y(ge=>{I(ce,"data-testid",`switch-${j}-mask`),h(he,ge)},[()=>String(l(j,"WEEKDAY")??"—")]),v(Q,O)},ve=Q=>{var O=zk();y((W,ce)=>{O.disabled=!e.spec.writable,I(O,"aria-label",W),I(O,"data-testid",`switch-${j}-time`),rn(O,ce)},[()=>`${s("Time")} ${j}`,()=>QS(e.values,j)]),J("change",O,W=>p(j,W.currentTarget.value)),v(Q,O)},be=Q=>{var O=jk(),W=Ie(O),ce=d(W,2),he=m(ce,!0);y((ge,ye,ae)=>{W.disabled=!e.spec.writable,I(W,"aria-label",ge),I(W,"data-testid",`switch-${j}-${t(xe).id}`),rn(W,ye),I(ce,"data-testid",`switch-${j}-${t(xe).id}-result`),h(he,ae)},[()=>`${o(t(xe))} ${j}`,()=>g(j,t(xe))??"",()=>hi(g(j,t(xe))??Number.NaN)]),J("input",W,ge=>b(j,t(xe),ge.currentTarget.value)),v(Q,O)},Ee=Q=>{var O=Kk();je(O,22,()=>Ps(t(xe).description)??[],ce=>ce,(ce,he,ge)=>{var ye=Wk(),ae=m(ye,!0),V={};y((F,R)=>{h(ae,F),V!==(V=R)&&(ye.value=(ye.__value=V)??"")},[()=>n.meta.valueLabel(t(xe).id,he,e.channelType),()=>String(t(ge))]),v(ce,ye)});var W;Qt(O),y((ce,he)=>{O.disabled=!e.spec.writable,I(O,"aria-label",ce),I(O,"data-testid",`switch-${j}-${t(xe).id}`),W!==(W=he)&&(O.value=(O.__value=W)??"",Cn(O,W))},[()=>`${o(t(xe))} ${j}`,()=>String(l(j,t(xe).id)??"")]),J("change",O,ce=>f(j,t(xe).id,Number(ce.currentTarget.value))),v(Q,O)},q=Q=>{var O=qk(),W=Ie(O),ce=d(W,2);{var he=ye=>{var ae=Yk(),V=m(ae,!0);y(F=>h(V,F),[()=>ro(t(xe).description)]),v(ye,ae)},ge=c(()=>ro(t(xe).description)!=="");$(ce,ye=>{t(ge)&&ye(he)})}y((ye,ae,V,F)=>{I(W,"min",ye),I(W,"max",ae),I(W,"step",t(xe).description.TYPE==="FLOAT"?.01:1),W.disabled=!e.spec.writable,I(W,"aria-label",V),I(W,"data-testid",`switch-${j}-${t(xe).id}`),rn(W,F)},[()=>Xn(t(xe).description,"MIN"),()=>Xn(t(xe).description,"MAX"),()=>`${o(t(xe))} ${j}`,()=>l(j,t(xe).id)??""]),J("input",W,ye=>k(j,t(xe).id,ye.currentTarget.value)),v(Q,O)};$(M,Q=>{t(xe).kind==="weekday"?Q(ue):t(xe).kind==="time"?Q(ve,1):t(xe).kind==="duration"?Q(be,2):t(xe).kind==="enum"?Q(Ee,3):Q(q,-1)})}v(Re,se)}),y(()=>{I(U,"data-testid",`switch-slot-${j}`),h(ke,j)}),v(te,U)}),y((te,j,U,me)=>{h(A,te),h(D,j),h(z,U),h(re,me)},[()=>s("Switching programme"),()=>s("No weekday chosen - the slot does nothing"),()=>s("Unused"),()=>s("Slot")]),mr(T,()=>t(a),te=>u(a,te)),v(r,S),mt()}kt(["change","input"]);var mu=_('<button type="button"> </button>'),vu=_("<option> </option>"),Jk=_('<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>'),ew=_('<span class="hmm-week-unit svelte-1du5x7x"> </span>'),tw=_('<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>'),nw=_("<li> </li>"),rw=_('<ul class="hmm-week-problems svelte-1du5x7x" data-testid="week-problems"></ul>'),sw=_('<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 aw(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(()=>r0(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)),S=c(()=>n.meta.parameterLabel(e.spec.valueField,e.channelType)),E=c(()=>t(g).filter(R=>R.profile===(t(f)?.id??"")));function A(R){const L=e.spec.days.indexOf(R),ee=t0[L];return ee===void 0?R:s(ee)}function x(R){return R===""?s("Week programme"):`${s("Profile")} ${R.slice(1)}`}function D(R){return!t(f)||R===1?ja(0):ja(Kl(e.spec,e.values,t(f),t(i),R-1).endTime??0)}function C(R,L){const ee=i0(L);ee===void 0||!t(f)||e.onchange({[Wr(t(f).endTimePrefix,t(i),R)]:ee})}function T(R,L){const ee=Number(L);L===""||!Number.isFinite(ee)||!t(f)||e.onchange({[Wr(t(f).valuePrefix,t(i),R)]:ee})}function P(){if(!t(f))return;const R=t(o)==="*"?e.spec.days:[t(o)];e.onchange(s0(e.spec,e.values,t(f),t(i),R))}function z(){const R=e.spec.profiles.find(L=>L.id===t(l));!t(f)||!R||e.onchange(a0(e.spec,e.values,t(f),[R]))}function Y(R){const L={day:A(R.day),slot:String(R.slot),end:ja(e.spec.dayEnd)};switch(R.code){case"not-increasing":return s("{day}: end time {slot} is not after the one before it",L);case"after-day-end":return s("{day}: end time {slot} comes after the day has ended",L);case"day-not-closed":return s("{day}: the last end time must be {end}",L)}}var ne=sw(),ie=w(ne),de=m(ie,!0),G=d(ie,2),re=m(G,!0),le=d(G,2);{var Z=R=>{var L=Jk(),ee=w(L);je(ee,19,()=>e.spec.profiles,K=>K.id,(K,H,Ce)=>{var Oe=mu();let Ke;var pe=m(Oe,!0);y(De=>{Ke=St(Oe,1,"hmm-button svelte-1du5x7x",null,Ke,{"hmm-week-active":t(Ce)===t(a)}),I(Oe,"data-testid",`week-profile-${t(H).id}`),h(pe,De)},[()=>x(t(H).id)]),J("click",Oe,()=>u(a,t(Ce),!0)),v(K,Oe)});var _e=d(ee,4),Ne=w(_e),Fe=m(Ne,!0),We=d(Ne,2),tt=w(We);tt.value=tt.__value="";var rt=d(tt);je(rt,17,()=>e.spec.profiles,K=>K.id,(K,H)=>{var Ce=wt(),Oe=Ie(Ce);{var Ke=pe=>{var De=vu(),Pe=m(De,!0),Ge={};y(Le=>{h(Pe,Le),Ge!==(Ge=t(H).id)&&(De.value=(De.__value=Ge)??"")},[()=>x(t(H).id)]),v(pe,De)};$(Oe,pe=>{t(H).id!==t(f)?.id&&pe(Ke)})}v(K,Ce)}),Qt(We);var we=d(_e,2),Te=m(we,!0);y((K,H)=>{h(Fe,K),we.disabled=!e.spec.writable||t(l)==="",h(Te,H)},[()=>s("Copy profile to"),()=>s("Copy")]),br(We,()=>t(l),K=>u(l,K)),J("click",we,z),v(R,L)};$(le,R=>{e.spec.profiles.length>1&&R(Z)})}var te=d(le,2),j=w(te);je(j,16,()=>e.spec.days,R=>R,(R,L)=>{var ee=mu();let _e;var Ne=m(ee,!0);y(Fe=>{_e=St(ee,1,"hmm-button svelte-1du5x7x",null,_e,{"hmm-week-active":L===t(i)}),I(ee,"data-testid",`week-day-${L}`),h(Ne,Fe)},[()=>A(L)]),J("click",ee,()=>u(i,L,!0)),v(R,ee)});var U=d(j,4),me=w(U),ke=m(me,!0),fe=d(me,2),Re=w(fe),xe=m(Re,!0);Re.value=Re.__value="*";var se=d(Re);je(se,16,()=>e.spec.days,R=>R,(R,L)=>{var ee=wt(),_e=Ie(ee);{var Ne=Fe=>{var We=vu(),tt=m(We,!0),rt={};y(we=>{h(tt,we),rt!==(rt=L)&&(We.value=(We.__value=rt)??"")},[()=>A(L)]),v(Fe,We)};$(_e,Fe=>{L!==t(i)&&Fe(Ne)})}v(R,ee)}),Qt(fe);var M=d(U,2),ue=m(M,!0),ve=d(te,2),be=w(ve),Ee=w(be),q=w(Ee),Q=m(q,!0),O=d(q),W=m(O,!0),ce=d(O),he=m(ce,!0),ge=d(ce),ye=m(ge,!0),ae=d(be);je(ae,20,()=>Array.from({length:e.spec.slots},(R,L)=>L+1),R=>R,(R,L)=>{const ee=c(()=>t(f)?Kl(e.spec,e.values,t(f),t(i),L):void 0);var _e=tw(),Ne=w(_e),Fe=m(Ne,!0),We=d(Ne),tt=m(We,!0),rt=d(We),we=w(rt),Te=d(rt),K=w(Te),H=d(K,2);{var Ce=Oe=>{var Ke=ew(),pe=m(Ke,!0);y(()=>h(pe,t(p))),v(Oe,Ke)};$(H,Oe=>{t(p)!==""&&Oe(Ce)})}y((Oe,Ke,pe,De)=>{I(_e,"data-testid",`week-slot-${L}`),h(Fe,L),h(tt,Oe),we.disabled=!e.spec.writable,I(we,"aria-label",Ke),I(we,"data-testid",`week-slot-${L}-endtime`),rn(we,pe),I(K,"min",t(b)),I(K,"max",t(k)),K.disabled=!e.spec.writable,I(K,"aria-label",De),I(K,"data-testid",`week-slot-${L}-value`),rn(K,t(ee)?.value??"")},[()=>D(L),()=>`${s("until")} ${L}`,()=>ja(t(ee)?.endTime),()=>`${s("Value")} ${L}`]),J("change",we,Oe=>C(L,Oe.currentTarget.value)),J("input",K,Oe=>T(L,Oe.currentTarget.value)),v(R,_e)});var V=d(ve,2);{var F=R=>{var L=rw();je(L,21,()=>t(E),ee=>`${ee.day}-${ee.slot}-${ee.code}`,(ee,_e)=>{var Ne=nw(),Fe=m(Ne,!0);y(We=>h(Fe,We),[()=>Y(t(_e))]),v(ee,Ne)}),v(R,L)};$(V,R=>{t(E).length>0&&R(F)})}y((R,L,ee,_e,Ne,Fe,We,tt)=>{h(de,R),h(re,L),h(ke,ee),h(xe,_e),M.disabled=!e.spec.writable,h(ue,Ne),h(Q,Fe),h(W,We),h(he,tt),h(ye,t(S))},[()=>s("Week programme"),()=>s("The end times of a day rise until {end}, and the last one is {end}",{end:ja(e.spec.dayEnd)}),()=>s("Copy day to"),()=>s("Weekdays"),()=>s("Copy"),()=>s("Slot"),()=>s("Time"),()=>s("until")]),br(fe,()=>t(o),R=>u(o,R)),J("click",M,P),v(r,ne),mt()}kt(["click","change","input"]);function iw(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=S=>{Dk(S,{get spec(){return t(i)},get values(){return e.values},get channelType(){return e.channelType},get onchange(){return e.onchange}})},p=S=>{Ok(S,{get spec(){return t(i)},get values(){return e.values},get channelType(){return e.channelType},get onchange(){return e.onchange}})},g=S=>{Uk(S,{get spec(){return t(i)},get values(){return e.values},get channelType(){return e.channelType},get onchange(){return e.onchange}})},b=S=>{Zk(S,{get spec(){return t(i)},get values(){return e.values},get channelType(){return e.channelType},get onchange(){return e.onchange}})},k=S=>{aw(S,{get spec(){return t(i)},get values(){return e.values},get channelType(){return e.channelType},get onchange(){return e.onchange}})};$(l,S=>{t(i).kind==="blind-calibration"?S(f):t(i).kind==="duration-pairs"?S(p,1):t(i).kind==="enum-options"?S(g,2):t(i).kind==="switch-week-profile"?S(b,3):t(i).kind==="week-profile"&&S(k,4)})}v(a,o)}),v(r,n)}class ow extends Map{#e=new Map;#n=N(0);#t=N(0);#s=Rs||-1;constructor(e){if(super(),e){for(var[n,s]of e)super.set(n,s);this.#t.v=super.size}}#a(e){return Rs===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),us(l);else if(i!==n){us(a);var f=l.reactions===null?null:new Set(l.reactions),p=f===null||!a.reactions?.every(g=>f.has(g));p&&us(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),us(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);us(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 ql="DYNAMIC_ROUTE_";function Hr(r,e,n){return r[`${ql}${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 pu(r){if(typeof r=="number"&&Number.isFinite(r))return r;if(typeof r=="string"&&r.trim()!==""&&Number.isFinite(Number(r)))return Number(r)}function lw(r){const e=new Set;for(const n of Object.keys(r))if(n.startsWith(`${ql}IP_DESTINATION_ADDRESS_`)){const s=Number(n.slice(`${ql}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:pu(Hr(r,"DISTANCE",n))??0,rssi:pu(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 dw(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 cw=_("<p> </p>"),uw=js('<text class="hmm-routing-edge svelte-10p79ns"> <!></text>'),fw=js("<line></line><!>",1),hw=js('<text text-anchor="middle" class="hmm-routing-mark svelte-10p79ns">AC</text>'),mw=js('<text text-anchor="middle" class="hmm-routing-mark svelte-10p79ns">R</text>'),vw=js('<text text-anchor="middle" class="hmm-routing-mark svelte-10p79ns">P</text>'),pw=js('<g><circle class="svelte-10p79ns"></circle><text text-anchor="middle" class="svelte-10p79ns"> </text><!></g>'),gw=_('<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>'),bw=_('<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),_w=_('<div class="hmm-routing svelte-10p79ns" data-testid="routing-table"><p class="hmm-routing-hint svelte-10p79ns"> </p> <!></div>');function yw(r,e){ht(e,!0);const n=jt(),s=n.i18n.t,a=c(()=>lw(e.values)),i=c(()=>dw(e.self,t(a))),o=x=>{const D=n.nameOf(x);return D&&D!==x?D:x},l=560,f=c(()=>{const x=new ow,D=l/2,C=l/2;x.set(t(i).self,{x:D,y:C});const T=t(i).edges.filter(Y=>Y.from===t(i).self).map(Y=>Y.to),P=t(i).nodes.map(Y=>Y.id).filter(Y=>Y!==t(i).self&&!T.includes(Y)),z=(Y,ne,ie)=>{Y.forEach((de,G)=>{const re=ie+2*Math.PI*G/Math.max(Y.length,1);x.set(de,{x:D+ne*Math.cos(re),y:C+ne*Math.sin(re)})})};return z(T,l*.26,-Math.PI/2),z(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=_w(),b=w(g),k=m(b,!0),S=d(b,2);{var E=x=>{var D=cw(),C=m(D,!0);y(T=>h(C,T),[()=>s("No routes: the device reported an empty table.")]),v(x,D)},A=x=>{var D=bw(),C=Ie(D),T=w(C);je(T,17,()=>t(i).edges,Q=>`${Q.from}>${Q.to}`,(Q,O)=>{const W=c(()=>p(t(O).from)),ce=c(()=>p(t(O).to));var he=fw(),ge=Ie(he);let ye;var ae=d(ge);{var V=F=>{var R=uw(),L=w(R),ee=d(L);{var _e=Ne=>{var Fe=Zn();y(()=>h(Fe,`, ${t(O).rssi??""} dBm`)),v(Ne,Fe)};$(ee,Ne=>{t(O).rssi!==void 0&&Ne(_e)})}y(Ne=>{I(R,"x",(t(W).x+t(ce).x)/2),I(R,"y",(t(W).y+t(ce).y)/2-4),h(L,`${t(O).distance??""}
|
|
17
|
-
${Ne??""}`)},[()=>s("hops",{},t(O).distance)]),v(F,R)};$(ae,F=>{t(O).distance!==void 0&&F(V)})}y(()=>{I(ge,"x1",t(W).x),I(ge,"y1",t(W).y),I(ge,"x2",t(ce).x),I(ge,"y2",t(ce).y),ye=St(ge,0,"svelte-10p79ns",null,ye,{"hmm-routing-static":t(O).isStatic})}),v(Q,he)});var P=d(T);je(P,17,()=>t(i).nodes,Q=>Q.id,(Q,O)=>{const W=c(()=>p(t(O).id));var ce=pw();let he;var ge=w(ce),ye=d(ge),ae=m(ye,!0),V=d(ye);{var F=ee=>{var _e=hw();y(()=>{I(_e,"x",t(W).x),I(_e,"y",t(W).y+4)}),v(ee,_e)},R=ee=>{var _e=mw();y(()=>{I(_e,"x",t(W).x),I(_e,"y",t(W).y+4)}),v(ee,_e)},L=ee=>{var _e=vw();y(()=>{I(_e,"x",t(W).x),I(_e,"y",t(W).y+4)}),v(ee,_e)};$(V,ee=>{t(O).accessController?ee(F):t(O).router?ee(R,1):t(O).portable&&ee(L,2)})}y(ee=>{he=St(ce,0,"hmm-routing-node svelte-10p79ns",null,he,{"hmm-routing-self":t(O).id===t(i).self,"hmm-routing-router":t(O).router}),I(ge,"cx",t(W).x),I(ge,"cy",t(W).y),I(ge,"r",t(O).id===t(i).self?22:16),I(ye,"x",t(W).x),I(ye,"y",t(W).y+30),h(ae,ee)},[()=>o(t(O).id)]),v(Q,ce)});var z=d(C,2),Y=w(z),ne=w(Y),ie=d(w(ne)),de=m(ie,!0),G=d(ie),re=m(G,!0),le=d(G),Z=m(le,!0),te=d(le,2),j=m(te,!0),U=d(te),me=m(U,!0),ke=d(U),fe=m(ke,!0),Re=d(ke),xe=m(Re,!0),se=d(Re),M=m(se,!0),ue=d(se),ve=m(ue,!0),be=d(ue),Ee=m(be,!0),q=d(Y);je(q,21,()=>t(a),Q=>Q.index,(Q,O)=>{var W=gw(),ce=w(W),he=m(ce,!0),ge=d(ce),ye=w(ge),ae=m(ye,!0),V=d(ye),F=d(ge),R=w(F),L=m(R,!0),ee=d(F),_e=m(ee,!0),Ne=d(ee),Fe=m(Ne,!0),We=d(Ne),tt=m(We,!0),rt=d(We),we=m(rt,!0),Te=d(rt),K=m(Te,!0),H=d(Te),Ce=m(H,!0),Oe=d(H),Ke=m(Oe,!0),pe=d(Oe),De=m(pe,!0),Pe=d(pe),Ge=m(Pe,!0);y((Le,Ye,Xe)=>{I(W,"data-testid",Le),h(he,t(O).index),h(ae,t(O).destination),h(V,` ${Ye??""}`),h(L,t(O).nextHop),h(_e,t(O).distance),h(Fe,Xe),h(tt,t(O).isNeighbour?"✔":""),h(we,t(O).isStatic?"✔":""),h(K,t(O).router?"✔":""),h(Ce,t(O).accessController?"✔":""),h(Ke,t(O).portable?"✔":""),h(De,t(O).listenerMode),h(Ge,t(O).omValid?"✔":"")},[()=>`route-${String(t(O).index)}`,()=>o(t(O).destination)!==t(O).destination?o(t(O).destination):"",()=>t(O).rssi===void 0?"":`${String(t(O).rssi)} dBm`]),v(Q,W)}),y((Q,O,W,ce,he,ge,ye,ae,V,F,R,L)=>{I(C,"viewBox",Q),I(C,"aria-label",O),h(de,W),h(re,ce),h(Z,he),h(j,ge),h(me,ye),h(fe,ae),h(xe,V),h(M,F),h(ve,R),h(Ee,L)},[()=>`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)};$(S,x=>{t(a).length===0?x(E):x(A,-1)})}y(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 Ew=_('<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 Sw(r,e){ht(e,!0);let n=B(e,"title",3,void 0),s=B(e,"changed",3,!1);var a=Ew();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),S=m(k,!0);y(()=>{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(S,e.label)}),J("change",b,E=>e.onchange(E.currentTarget.checked)),v(r,a),mt()}kt(["change"]);var kw=_('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="paramset-preview"> </button>',1),ww=_("<p> </p>"),Aw=_('<p data-testid="paramset-failed"> </p>'),Tw=_('<label class="hmm-paramset-option svelte-onngst"><input type="checkbox" data-testid="paramset-expert"/> <span> </span></label>'),Rw=_('<label class="hmm-paramset-option svelte-onngst"><input type="checkbox" data-testid="paramset-show-covered"/> <span> </span></label>'),xw=_('<button type="button" class="hmm-button" data-testid="paramset-internal-key"> </button>'),Iw=_('<label class="hmm-paramset-option svelte-onngst"><input type="checkbox" data-testid="paramset-show-hidden"/> <span> </span></label>'),Dw=_("<li> </li>"),Nw=_('<ul class="hmm-paramset-warnings svelte-onngst" data-testid="paramset-warnings"></ul>'),Cw=_('<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>'),Pw=_("<div><!></div>"),Mw=_('<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>'),Ow=_('<li><span class="hmm-mono"> </span> </li>'),Lw=_('<ul class="hmm-paramset-results svelte-onngst" data-testid="paramset-results"></ul>'),Fw=_('<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),Gw=_("<!> <!> <!> <!>",1);function Uw(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),S=N(""),E=N(!1),A=N(Be([])),x=N(!1),D=N(!1),C=N(!1),T=N(!1),P=N(!1),z=N(void 0),Y=N(Be([])),ne=N(Be([])),ie=0,de=N(void 0),G=N(Be({})),re=N(void 0),le=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(re,void 0);return}const Se={interfaceName:s(),address:a(),paramset:i()};u(G,{},!0),gr(()=>{o.paramsets.suppressedServiceMessages(Se.interfaceName,Se.address).then(Me=>{Se.address===a()&&Se.interfaceName===s()&&u(de,Me,!0)}),Se.paramset==="MASTER"&&o.paramsets.describe(Se.interfaceName,Se.address,"VALUES").then(Me=>{Se.address===a()&&Se.interfaceName===s()&&u(re,Me,!0)})})});const me=c(()=>{if(t(de)===void 0)return[];const Se=i()==="VALUES"?t(f):t(re);return Se?Vh(Se):[]}),ke=c(()=>i()==="MASTER"?t(me):[]);function fe(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(me).some(Se=>Re(Se)));function se(Se,Me){u(G,{...t(G),[Se]:Me},!0)}function M(Se){u(G,Object.fromEntries(t(me).map(Me=>[Me,Se])),!0)}function ue(){u(Z,h0({address:a(),suppressed:t(de)??[],edits:t(G),labels:{suppressed:l("suppressed"),unsuppressed:l("not suppressed")}}),!0),u(le,!0)}async function ve(){const Se=t(Z);if(Se){u(te,!0);try{for(const Me of Se.entries)await o.paramsets.suppressServiceMessages(s(),a(),Me.param,t(G)[Me.param]===!0);u(de,await o.paramsets.suppressedServiceMessages(s(),a()),!0),u(G,{},!0)}finally{u(te,!1),u(le,!1)}}}const be=c(()=>o.devices.index(s())),Ee=c(()=>t(be)?.get(a())?.TYPE??""),q=c(()=>`${i()} — ${o.nameOf(a())} (${a()})`),Q=c(()=>t(f)?Uh(t(f),t(k)):[]),O=c(()=>({optionByName:(Se,Me)=>o.meta.valueLabelIfKnown(Se,Me,t(Ee)),optionByIndex:(Se,Me)=>o.meta.valueLabelIfKnown(Se,String(Me),t(Ee)),preset:Se=>t(k)?.parameters.find(Me=>Me.name===Se)?.preset,uiLabel:Se=>o.meta.uiLabel(Se)})),W=c(()=>t(f)?c0({interfaceName:s(),address:a(),channelType:t(Ee),paramset:i(),description:t(f)},t(O)):[]),ce=c(()=>t(C)||t(T)?new Set:u0(t(W))),he=c(()=>t(Q).filter(Se=>(t(D)||Se.visible)&&!t(ce).has(Se.name))),ge=c(()=>i()==="MASTER"&&t(f)?fh(t(k)?.controls,t(f)):void 0),ye=c(()=>t(T)?void 0:t(ge)),ae=c(()=>t(T)?Rl(t(ge)):new Set),V=c(()=>new Map(t(Q).map(Se=>[Se.name,Se]))),F=c(()=>Rl(t(ge))),R=c(()=>t(T)?[]:t(ye)?t(W).filter(Se=>!Se.covers.every(Me=>t(F).has(Me))):t(W));lt(()=>{n()&&i()==="MASTER"&&o.meta.loadPresets()});const L=c(()=>i()==="VALUES"),ee=c(()=>i()==="MASTER"),_e=c(()=>{if(!t(ee)||!t(be)||a()===""||!t(be).has(a()))return;const Se=t(be).all().filter(Me=>Me.TYPE===t(Ee)&&Me.ADDRESS!==a()).map(Me=>Me.ADDRESS);return p_(t(be),a(),i(),Se)}),Ne=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=ie+=1,Me={interfaceName:s(),address:a(),paramset:i()};o.paramsets.open(Me.interfaceName,Me.address,Me.paramset).then($e=>{Se===ie&&(u(f,$e?.description,!0),u(p,$e?.values??{},!0),u(g,{},!0),Me.paramset==="VALUES"&&Ge(Se),u(b,{},!0),u(Y,[],!0),u(ne,[],!0),u(A,[],!0),u(x,!1),u(T,!1))})}),lt(()=>{const Se=t(f);if(!n()||!Se||i()!=="MASTER"||t(Ee)===""){u(k,void 0),We=void 0;return}const Me=rt(),$e=t(S),ft=tt(s(),a());o.meta.masterView(t(Ee),Se,Me,$e,ft).then(yt=>{u(k,yt,!0)})});let We;function tt(Se,Me){const $e=`${Se}|${Me}`,ft=Me.indexOf(":"),yt=ft<0?Me:Me.slice(0,ft);return{deviceType:t(be)?.get(Me)?.PARENT_TYPE||t(be)?.get(yt)?.TYPE||"",channel:ft<0?-1:Number(Me.slice(ft+1)),channelMode:()=>(We?.key!==$e&&(We={key:$e,answer:o.paramsets.channelMode(Se,Me)}),We.answer)}}lt(()=>{if(!n()||i()!=="MASTER"||a()===""){u(S,"");return}const Se=`${s()}|${a()}`;u(S,""),o.paramsets.paramsetId(s(),a()).then(Me=>o.meta.masterFormId(Me)).then(Me=>{`${s()}|${a()}`===Se&&u(S,Me,!0)})});function rt(){const Se={...t(p)};for(const[Me,$e]of Object.entries(t(b)))(typeof $e=="boolean"||typeof $e=="number"||typeof $e=="string")&&(Se[Me]=$e);return Se}function we(Se){return Object.prototype.hasOwnProperty.call(t(b),Se.name)?t(b)[Se.name]:t(p)[Se.name]??Se.description.DEFAULT}function Te(Se){return Object.prototype.hasOwnProperty.call(t(b),Se.name)}function K(Se,Me){u(b,{...t(b),[Se.name]:Me},!0)}function H(Se){u(b,{...t(b),...Se},!0)}function Ce(Se){return o.meta.parameterLabel(Se.name,t(Ee))}function Oe(Se){const Me=o.meta.parameterHelp(Se.name,t(Ee));return Me===void 0?void 0:Me.replace(/<[^>]*>/g," ").replace(/\s+/g," ").trim()}function Ke(){t(f)&&(u(Y,[],!0),u(ne,[],!0),u(z,ma(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(z);if(!Se||!t(f))return;const Me=await o.paramsets.put(s(),[...Se.targets],i(),Se.values,t(x)?{writeAll:!0}:void 0);u(Y,Me,!0);const $e=await o.paramsets.read(s(),a(),i());$e&&(u(ne,Bh(Se.values,$e,t(f)),!0),u(p,$e,!0),i()==="VALUES"&&Ge(ie),u(b,{},!0)),Me.length>0&&Me.every(ft=>ft.ok)&&!t(ne).some(ft=>ft.differs)&&u(P,!1)}function De(){const Se=t(z);!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(Me=>`putParamset(${Me}, ${i()}, ${JSON.stringify(Se.values)})`),lines:Se.entries.map(Me=>({label:Me.param,from:Me.from,to:Me.to}))}),u(P,!1),n(!1))}function Pe(Se,Me){if(Se.kind==="enum"&&typeof Me=="number"){const $e=Se.valueList?.[Me];if($e!==void 0)return`${o.meta.valueLabel(Se.name,$e,t(Ee))} (${Me})`}return String(Me)}async function Ge(Se){const Me=await o.paramsets.valueStates(s(),a());Se===ie&&u(g,Me,!0)}async function Le(Se){const Me=we(Se),$e=typeof Me=="boolean"||typeof Me=="number"||typeof Me=="string"?Me:!1;await o.paramsets.setValue(s(),a(),Se.name,$e)&&(u(b,Object.fromEntries(Object.entries(t(b)).filter(([yt])=>yt!==Se.name)),!0),u(p,{...t(p),[Se.name]:$e},!0),Ge(ie),o.notices.push("info",`setValue ${o.nameOf(a())} (${a()}) ${Se.name} = ${Pe(Se,$e)}`))}var Ye=Gw(),Xe=Ie(Ye);En(Xe,{get title(){return t(q)},width:"900px",height:"min(640px, calc(100vh - 32px))",minWidth:520,minHeight:320,testId:"paramset-dialog",get open(){return n()},set open(Me){n(Me)},buttons:Me=>{var $e=kw(),ft=Ie($e),yt=m(ft,!0),it=d(ft,2),Wt=m(it,!0);y((Mt,Ot)=>{h(yt,Mt),it.disabled=!t(f),h(Wt,Ot)},[()=>l("Close"),()=>l("Preview")]),J("click",ft,()=>n(!1)),J("click",it,Ke),v(Me,$e)},children:(Me,$e)=>{var ft=wt(),yt=Ie(ft);{var it=Ot=>{var Zt=ww(),bn=m(Zt,!0);y(on=>h(bn,on),[()=>l("Loading Homematic Manager...")]),v(Ot,Zt)},Wt=Ot=>{var Zt=Aw(),bn=m(Zt,!0);y(on=>h(bn,on),[()=>l("No data")]),v(Ot,Zt)},Mt=Ot=>{var Zt=Fw(),bn=Ie(Zt),on=w(bn);{var un=ct=>{{let nt=c(()=>l("Please choose one or more channels")),st=c(()=>l("Please choose one or more channels")),Ve=c(()=>l("Filter")),Je=c(()=>l("Check all")),at=c(()=>l("Uncheck all"));oi(ct,{get options(){return t(Ne)},get label(){return t(nt)},get placeholder(){return t(st)},get filterLabel(){return t(Ve)},get checkAllLabel(){return t(Je)},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(ee)&&t(Ne).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 nt=Tw(),st=w(nt),Ve=d(st,2),Je=m(Ve,!0);y(at=>h(Je,at),[()=>l("Expert view")]),mr(st,()=>t(T),at=>u(T,at)),v(ct,nt)};$(Xt,ct=>{t(ge)&&ct(xt)})}var fn=d(Xt,2);{var Mn=ct=>{var nt=Rw(),st=w(nt),Ve=d(st,2),Je=m(Ve,!0);y(at=>h(Je,at),[()=>l("Show the raw parameters as well")]),mr(st,()=>t(C),at=>u(C,at)),v(ct,nt)};$(fn,ct=>{t(W).length>0&&!t(ge)&&ct(Mn)})}var On=d(fn,2);{var Mr=ct=>{var nt=xw(),st=m(nt,!0);y(Ve=>h(st,Ve),[()=>l("Internal key…")]),J("click",nt,()=>u(E,!0)),v(ct,nt)};$(On,ct=>{t(k)?.internalKey&&ct(Mr)})}var Xr=d(On,2);{var Ln=ct=>{var nt=Iw(),st=w(nt),Ve=d(st,2),Je=m(Ve,!0);y(at=>h(Je,at),[()=>l("Show hidden parameters")]),mr(st,()=>t(D),at=>u(D,at)),v(ct,nt)},Wn=c(()=>t(Q).some(ct=>!ct.visible)&&!t(ye));$(Xr,ct=>{t(Wn)&&ct(Ln)})}var _r=d(bn,2);{var xr=ct=>{var nt=Nw();je(nt,20,()=>t(Fe),st=>st,(st,Ve)=>{var Je=Dw(),at=m(Je,!0);y(()=>h(at,Ve)),v(st,Je)}),v(ct,nt)};$(_r,ct=>{t(Fe).length>0&&ct(xr)})}var lr=d(_r,2);{let ct=c(rt);iw(lr,{get specs(){return t(R)},get values(){return t(ct)},get channelType(){return t(Ee)},onchange:H})}var yr=d(lr,2);{var tr=ct=>{{let nt=c(()=>a().split(":")[0]??a());yw(ct,{get values(){return t(p)},get self(){return t(nt)}})}};$(yr,ct=>{i()==="ROUTING_TABLE"&&ct(tr)})}var Er=d(yr,2);{var Qr=ct=>{var nt=Cw(),st=d(w(nt),1,!0);y(Ve=>h(st,Ve),[()=>l("Marked: the parameters the easy mode of this channel shows")]),v(ct,nt)};$(Er,ct=>{t(T)&&t(ae).size>0&&ct(Qr)})}var nr=d(Er,2);let as;var oe=w(nr);{var He=ct=>{{let nt=c(rt);zh(ct,{get form(){return t(ye)},get fields(){return t(V)},get values(){return t(nt)},changed:st=>Object.prototype.hasOwnProperty.call(t(b),st),get description(){return t(f)},get channelType(){return t(Ee)},get presets(){return o.meta.presets},get timeSelectors(){return o.meta.timeSelectors},onchange:H,testId:"paramset-easy-form"})}};$(oe,ct=>{t(ye)&&t(f)&&ct(He)})}var Gt=d(oe,2);je(Gt,17,()=>t(ye)?[]:t(he),ct=>ct.name,(ct,nt)=>{const st=c(()=>t(me).includes(t(nt).name));var Ve=Pw();let Je;var at=w(Ve);{let _t=c(()=>we(t(nt))),Rt=c(()=>Ce(t(nt))),Vt=c(()=>Oe(t(nt))),Ut=c(()=>Te(t(nt))),ln=c(()=>t(L)?t(g)[t(nt).name]:void 0),Bt=c(()=>t(L)&&t(nt).writable?()=>{Le(t(nt))}:void 0),hn=c(()=>t(st)?fe(t(nt).name):void 0),Tn=c(()=>t(st)?Qe=>se(t(nt).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(nt).name));Ea(at,{get field(){return t(nt)},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(nt).name,Qe,t(Ee)),presetLabel:Qe=>o.meta.uiLabel(Qe),get valueState(){return t(ln)},onchange:Qe=>K(t(nt),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)}})}y(_t=>Je=St(Ve,1,"hmm-paramset-easy-mark hmm-param-table-span svelte-onngst",null,Je,{"hmm-paramset-easy-marked":_t}),[()=>t(ae).has(t(nt).name)]),v(ct,Ve)});var pn=d(Gt,2);je(pn,16,()=>t(ke),ct=>ct,(ct,nt)=>{{let st=c(()=>fe(nt)),Ve=c(()=>Re(nt)),Je=c(()=>l("suppressed")),at=c(()=>l("A suppressed one reports a value that raises no message; the CCU shows it as inactive."));Sw(ct,{get name(){return nt},get suppressed(){return t(st)},get changed(){return t(Ve)},get label(){return t(Je)},get title(){return t(at)},onchange:_t=>se(nt,_t)})}});var Sn=d(nr,2);{var er=ct=>{var nt=Mw(),st=w(nt),Ve=m(st),Je=d(st,2),at=m(Je,!0),_t=d(Je,2),Rt=m(_t,!0),Vt=d(_t,2),Ut=m(Vt,!0);y((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")]),J("click",Je,()=>M(!0)),J("click",_t,()=>M(!1)),J("click",Vt,ue),v(ct,nt)};$(Sn,ct=>{t(me).length>0&&ct(er)})}var Or=d(Sn,2);{var ys=ct=>{var nt=Lw();je(nt,21,()=>t(Y),st=>`${st.address}-${st.paramset}`,(st,Ve)=>{var Je=Ow();let at;var _t=w(Je),Rt=m(_t,!0),Vt=d(_t);y(()=>{at=St(Je,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,Je)}),v(ct,nt)};$(Or,ct=>{t(Y).length>0&&ct(ys)})}y(ct=>{h(jn,ct),as=St(nr,1,"hmm-paramset-list hmm-param-table svelte-onngst",null,as,{"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)};$(yt,Ot=>{o.paramsets.loading&&!t(f)?Ot(it):t(f)?Ot(Mt,-1):Ot(Wt,1)})}v(Me,ft)},$$slots:{buttons:!0,default:!0}});var ze=d(Xe,2);Yl(ze,{get preview(){return t(z)},get paramset(){return i()},get warnings(){return t(Fe)},get results(){return t(Y)},get readBack(){return t(ne)},get writing(){return o.paramsets.writing},onstage:De,onconfirm:()=>{pe()},get open(){return t(P)},set open(Se){u(P,Se,!0)}});var Ze=d(ze,2);{var dt=Se=>{{let Me=c(()=>l("Apply")),$e=c(()=>l("{count} calls will be made",{},t(Z)?.entries.length??0));Yl(Se,{get preview(){return t(Z)},paramset:"VALUES",get writing(){return t(te)},get confirmLabel(){return t(Me)},get countText(){return t($e)},onconfirm:()=>{ve()},get open(){return t(le)},set open(ft){u(le,ft,!0)}})}};$(Ze,Se=>{t(le)&&Se(dt)})}var pt=d(Ze,2);{var gt=Se=>{jh(Se,{get sender(){return a()},get receiver(){return a()},get open(){return t(E)},set open(Me){u(E,Me,!0)}})};$(pt,Se=>{t(E)&&Se(gt)})}v(r,Ye),mt()}kt(["click"]);const Bw="modulepreload",Vw=function(r,e){return new URL(r,e).href},gu={},Hw=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=Vw(g,s),g in gu)return;gu[g]=!0;const b=g.endsWith(".css"),k=b?'[rel="stylesheet"]':"";if(s)for(let E=o.length-1;E>=0;E--){const A=o[E];if(A.href===g&&(!b||A.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${g}"]${k}`))return;const S=document.createElement("link");if(S.rel=b?"stylesheet":Bw,b||(S.as="script"),S.crossOrigin="",S.href=g,f&&S.setAttribute("nonce",f),document.head.appendChild(S),b)return new Promise((E,A)=>{S.addEventListener("load",E),S.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 zw=_('<video class="hmm-qr svelte-1e4doc5" autoplay="" playsinline=""></video>',2);function jw(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,T=>{T&&e.onscan(T.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 Hw(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}vp(b);var k=wt(),S=Ie(k);{var E=A=>{var x=zw();x.muted=!0,_n(x,D=>u(l,D),()=>t(l)),y(()=>I(x,"data-testid",o())),v(A,x)};$(S,A=>{n()&&A(E)})}v(r,k),mt()}var Ww=_('<button type="button" class="hmm-button"> </button>'),Kw=_('<p> </p> <button type="button" class="hmm-button" data-testid="add-device-search">searchDevices</button>',1),Yw=_("<option> </option>"),qw=_('<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),$w=_('<span class="hmm-add-error svelte-rkdrrf" data-testid="add-device-scan-error"> </span>'),Xw=_('<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),Qw=_('<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),Zw=_('<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>'),Jw=_('<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),eA=_('<span data-testid="add-device-countdown"> </span> <button type="button" class="hmm-button" data-testid="add-device-stop"> </button>',1),tA=_('<p class="hmm-add-notice svelte-rkdrrf" role="status" data-testid="add-device-nothing-joined"> </p>'),nA=_('<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),rA=_('<span data-testid="add-device-inbox-result"> </span>'),sA=_('<p class="hmm-add-notice svelte-rkdrrf" role="status" data-testid="add-device-names-waiting"> </p>'),aA=_('<div class="hmm-add-actions svelte-rkdrrf"><button type="button" class="hmm-button" data-testid="add-device-confirm-inbox"> </button> <!></div> <!>',1),iA=_('<label class="hmm-add-row svelte-rkdrrf"><span class="hmm-mono svelte-rkdrrf"> </span> <input class="hmm-input svelte-rkdrrf"/></label>'),oA=_('<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>'),lA=_("<!> <!> <!> <!>",1);function dA(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"),S=N(void 0),E=N(""),A=N(""),x=N(!1),D=N(""),C=N(0),T=N(!1),P=N(Be([])),z=N(Be({})),Y=N(!0),ne=N(""),ie=N(!1),de=N(""),G,re=!1,le=N(void 0),Z=0,te=0;const j=c(()=>a.app.selectedInterface),U=c(()=>a.interfaces.typeOf(t(j))),me=c(()=>!t(U).startsWith("BidCos")&&t(U)!=="CUxD"),ke=c(()=>t(U)==="BidCos-Wired"),fe=c(()=>t(k)==="ANY"?!0:t(k)==="SGTIN"?Bi(t(E)):Bi(t(E))&&hc(t(A))),Re=c(()=>t(S)?.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(S)?.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(me))return;let he=!0;return a.devices.hmipPairing().then(ge=>{he&&u(S,ge,!0)}),()=>{he=!1}}),lt(()=>{t(Re)&&t(k)==="SGTIN"&&u(k,"KEY")}),lt(()=>{n()||(u(x,!1),u(C,0),u(P,[],!0),u(z,{},!0),u(Y,!0),u(ne,""),u(ie,!1),u(de,""),u(b,""),q())}),lt(()=>{t(k)==="ANY"&&u(x,!1)}),lt(()=>{if(n())return a.transport.on("devices.changed",he=>{if(he.interfaceName!==t(j)||he.kind!=="new")return;const ge=he.addresses.filter(ye=>!ye.includes(":")&&!t(P).includes(ye));ge.length>0&&(u(P,[...t(P),...ge],!0),u(de,""),q())})}),lt(()=>{if(!n()||t(C)<=0)return;const he=te,ge=setInterval(()=>{Z+=1,a.devices.installModeSeconds(t(j)).then(ye=>{he===te&&(u(C,ye,!0),ye<=0&&(t(P).length===0&&u(ie,!0),q()))}),!t(me)&&Z%l===0&&a.devices.keyMismatchDevice(t(j)).then(ye=>{he===te&&ye!==""&&ve(ye)})},o);return()=>{clearInterval(ge)}});async function se(he){u(T,!0),u(ie,!1),u(de,""),te+=1,Z=0;const{tempKey:ge,...ye}=he;G=ye,ge!==void 0&&(re=!0);const ae=await a.devices.tryInstallMode(t(j),!0,{seconds:t(f),...he});if(u(T,!1),ae!==null){if(!t(me)&&he.address!==void 0&&await ue())return;a.notices.fromError(ae,"setInstallMode");return}he.address===void 0&&u(C,t(f),!0)}async function M(){te+=1,await a.devices.setInstallMode(t(j),!1),u(C,0),await q()}async function ue(){const he=await a.devices.keyMismatchDevice(t(j));return he===""?!1:(await be(he),!0)}async function ve(he){te+=1,u(C,0),await a.devices.setInstallMode(t(j),!1),await be(he)}async function be(he){u(de,he,!0),await ti(),t(le)?.focus()}async function Ee(){const he=t(b).trim();he===""||G===void 0||await se({...G,tempKey:he})}async function q(){re&&(re=!1,await a.devices.setTempKey(t(j),""))}async function Q(){u(T,!0),await a.console.call(t(j),"searchDevices",[""]),u(T,!1),await a.devices.load(t(j),{refresh:!0})}function O(he){const ge=Mb(he);if(!ge){u(D,i("That is not a HomematicIP device code"),!0);return}u(D,""),u(E,ge.sgtin,!0),ge.key!==""&&u(A,ge.key,!0),u(x,!1)}async function W(){u(T,!0);const he=await a.devices.confirmRegaInbox();u(T,!1),u(ne,he.length===0?i("The ReGa inbox is empty"):`${i("Confirmed")}: ${he.join(", ")}`,!0)}async function ce(){const he=t(P).flatMap(ge=>qf(ge,t(z)[ge]??"",a.devices.channels(t(j),ge).map(ye=>ye.ADDRESS),{channels:t(Y)}));he.length!==0&&await a.names.rename(he)&&u(P,t(P).filter(ge=>(t(z)[ge]??"").trim()===""),!0)}{const he=ye=>{var ae=Ww(),V=m(ae,!0);y(F=>h(V,F),[()=>i("Close")]),J("click",ae,()=>n(!1)),v(ye,ae)};let ge=c(()=>i("Add device"));En(r,{get title(){return t(ge)},width:"680px",testId:"add-device-dialog",get open(){return n()},set open(ye){n(ye)},buttons:he,children:(ye,ae)=>{var V=lA(),F=Ie(V);{var R=we=>{var Te=Kw(),K=Ie(Te),H=m(K,!0),Ce=d(K,2);y(Oe=>{h(H,Oe),Ce.disabled=t(T)},[()=>i("BidCos-Wired has no install mode; the interface searches its bus for new devices.")]),J("click",Ce,()=>{Q()}),v(we,Te)},L=we=>{var Te=Qw(),K=Ie(Te),H=w(K),Ce=m(H,!0),Oe=d(H,2),Ke=w(Oe),pe=m(Ke,!0);Ke.value=Ke.__value="KEY";var De=d(Ke);{var Pe=Me=>{var $e=Yw(),ft=m($e,!0);$e.value=$e.__value="SGTIN",y(yt=>h(ft,yt),[()=>i("With SGTIN only (key server)")]),v(Me,$e)};$(De,Me=>{t(Re)||Me(Pe)})}var Ge=d(De),Le=m(Ge,!0);Ge.value=Ge.__value="ANY",Qt(Oe);var Ye=d(K,2),Xe=d(w(Ye),2),ze=m(Xe,!0),Ze=d(Ye,2),dt=d(w(Ze),2),pt=m(dt,!0),gt=d(Ze,2);{var Se=Me=>{var $e=Xw(),ft=Ie($e),yt=d(w(ft),2);let it;var Wt=d(ft,2);{var Mt=Xt=>{var xt=qw(),fn=Ie(xt),Mn=d(w(fn),2);let On;var Mr=d(fn,2),Xr=d(w(Mr),2),Ln=m(Xr,!0);y((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)!==""&&!hc(t(A)),()=>i("The key from the sticker (26 characters, dashes optional), or scan the QR code.")]),J("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=$w(),fn=m(xt,!0);y(()=>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."));jw(jn,{get active(){return t(x)},get createReader(){return s()},get insecureContextMessage(){return t(Xt)},onscan:O,onerror:xt=>{u(D,xt,!0),u(x,!1)},testId:"add-device-video"})}y((Xt,xt,fn)=>{it=St(yt,1,"hmm-input hmm-mono svelte-rkdrrf",null,it,{"hmm-add-invalid":Xt}),rn(yt,t(E)),h(bn,xt),h(vn,fn)},[()=>t(E)!==""&&!Bi(t(E)),()=>i("QR scanner"),()=>t(x)?i("Stop"):i("Scan")]),J("input",yt,Xt=>u(E,ai(Xt.currentTarget.value),!0)),J("click",un,()=>{u(D,""),u(x,!t(x))}),v(Me,$e)};$(gt,Me=>{t(k)!=="ANY"&&Me(Se)})}y((Me,$e,ft,yt)=>{h(Ce,Me),h(pe,$e),h(Le,ft),h(ze,t(xe)),h(pt,yt)},[()=>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(Oe,()=>t(k),Me=>u(k,Me)),v(we,Te)},ee=we=>{var Te=Jw(),K=Ie(Te),H=w(K),Ce=m(H,!0),Oe=d(H,2),Ke=w(Oe),pe=m(Ke,!0);Ke.value=Ke.__value=1;var De=d(Ke),Pe=m(De,!0);De.value=De.__value=2,Qt(Oe);var Ge=d(K,2),Le=w(Ge),Ye=m(Le,!0),Xe=d(Le,2),ze=w(Xe),Ze=d(ze,2),dt=m(Ze,!0),pt=d(Ge,2),gt=w(pt),Se=m(gt,!0),Me=d(gt,2);_n(Me,Mt=>u(le,Mt),()=>t(le));var $e=d(pt,2),ft=d(w($e),2),yt=m(ft,!0),it=d($e,2);{var Wt=Mt=>{var Ot=Zw(),Zt=w(Ot),bn=m(Zt,!0),on=d(Zt,2),un=m(on,!0),vn=d(on,2),Pn=m(vn,!0);y((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(T)||t(b).trim()==="",()=>i("Set the key and try again")]),J("click",vn,()=>{Ee()}),v(Mt,Ot)};$(it,Mt=>{t(de)!==""&&Mt(Wt)})}y((Mt,Ot,Zt,bn,on,un,vn,Pn)=>{h(Ce,Mt),h(pe,Ot),h(Pe,Zt),h(Ye,bn),Ze.disabled=on,h(dt,un),h(Se,vn),h(yt,Pn)},[()=>i("Mode"),()=>i("Normal install mode"),()=>i("Write the MASTER defaults and delete the existing links"),()=>i("Serial number"),()=>t(T)||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(Oe,()=>t(p),Mt=>u(p,Mt)),An(ze,()=>t(g),Mt=>u(g,Mt)),J("click",Ze,()=>{se({mode:t(p),address:t(g).trim(),...t(b).trim()===""?{}:{tempKey:t(b).trim()}})}),An(Me,()=>t(b),Mt=>u(b,Mt)),v(we,Te)};$(F,we=>{t(ke)?we(R):t(me)?we(L,1):we(ee,-1)})}var _e=d(F,2);{var Ne=we=>{var Te=nA(),K=Ie(Te),H=w(K),Ce=m(H,!0),Oe=d(H,2),Ke=w(Oe),pe=d(K,2),De=w(pe),Pe=m(De,!0),Ge=d(De,2);{var Le=ze=>{var Ze=eA(),dt=Ie(Ze),pt=m(dt,!0),gt=d(dt,2),Se=m(gt,!0);y((Me,$e)=>{h(pt,Me),h(Se,$e)},[()=>i("{count} seconds left",{},t(C)),()=>i("Stop")]),J("click",gt,()=>{M()}),v(ze,Ze)};$(Ge,ze=>{t(C)>0&&ze(Le)})}var Ye=d(pe,2);{var Xe=ze=>{var Ze=tA(),dt=m(Ze,!0);y(pt=>h(dt,pt),[()=>t(me)?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,Ze)};$(Ye,ze=>{t(ie)&&ze(Xe)})}y((ze,Ze)=>{h(Ce,ze),De.disabled=t(T)||t(me)&&!t(fe),h(Pe,Ze)},[()=>i("Duration"),()=>i("Start install mode")]),An(Ke,()=>t(f),ze=>u(f,ze)),J("click",De,()=>{se(t(me)?t(k)==="ANY"?{hmipKeyMode:"ANY"}:{hmipKeyMode:t(k),hmipKey:{sgtin:t(E),key:t(k)==="SGTIN"?"":t(A)}}:{mode:t(p),...t(b).trim()===""?{}:{tempKey:t(b).trim()}})}),v(we,Te)};$(_e,we=>{t(ke)||we(Ne)})}var Fe=d(_e,2);{var We=we=>{var Te=aA(),K=Ie(Te),H=w(K),Ce=m(H,!0),Oe=d(H,2);{var Ke=Pe=>{var Ge=rA(),Le=m(Ge,!0);y(()=>h(Le,t(ne))),v(Pe,Ge)};$(Oe,Pe=>{t(ne)!==""&&Pe(Ke)})}var pe=d(K,2);{var De=Pe=>{var Ge=sA(),Le=m(Ge,!0);y(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)})}y(Pe=>{H.disabled=t(T),h(Ce,Pe)},[()=>i("Confirm the ReGa inbox")]),J("click",H,()=>{W()}),v(we,Te)};$(Fe,we=>{a.interfaces.rega?.enabled===!0&&we(We)})}var tt=d(Fe,2);{var rt=we=>{var Te=oA(),K=w(Te),H=m(K,!0),Ce=d(K,2);je(Ce,16,()=>t(P),Le=>Le,(Le,Ye)=>{var Xe=iA(),ze=w(Xe),Ze=m(ze,!0),dt=d(ze,2);y((pt,gt)=>{h(Ze,Ye),I(dt,"placeholder",pt),I(dt,"aria-label",gt),rn(dt,t(z)[Ye]??"")},[()=>i("Name"),()=>`${i("Name")} ${Ye}`]),J("input",dt,pt=>u(z,{...t(z),[Ye]:pt.currentTarget.value},!0)),v(Le,Xe)});var Oe=d(Ce,2),Ke=w(Oe),pe=d(Ke,2),De=m(pe,!0),Pe=d(Oe,2),Ge=m(Pe,!0);y((Le,Ye,Xe)=>{h(H,Le),h(De,Ye),h(Ge,Xe)},[()=>i("New"),()=>i("Overwrite channel names"),()=>i("Apply")]),mr(Ke,()=>t(Y),Le=>u(Y,Le)),J("click",Pe,()=>{ce()}),v(we,Te)};$(tt,we=>{t(P).length>0&&we(rt)})}v(ye,V)},$$slots:{buttons:!0,default:!0}})}mt()}kt(["click","input"]);const cA=10;function $l(r,e,n){return r(e)?.enums.includes(n)===!0}function uA(r){return r.endsWith(":0")}function Wh(r,e,n){if($l(n,r.ref,e))return"on";const s=r.channels.filter(i=>!uA(i)),a=s.filter(i=>$l(n,i,e)).length;return a===0?"off":a===s.length?"on":"mixed"}function fA(r,e,n){let s=0,a=0;for(const i of r){const o=Wh(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 hA(r,e,n){return Object.fromEntries(e.map(s=>[s,fA(r,s,n)]))}function mA(r,e){return r==="mixed"?e==="mixed"?"on":e==="on"?"off":"mixed":e==="on"?"off":"on"}function vA(r,e,n){return r.filter(s=>{const a=n[s];return a!==void 0&&a!=="mixed"&&a!==(e[s]??"off")})}function pA(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){Wh(f,i,s)!=="on"&&l.add(f.ref);continue}for(const p of[f.ref,...f.channels])$l(s,p,i)&&l.add(p)}l.size>0&&a.push({path:i,on:o,refs:[...l]})}return a}function bu(r){return r.normalize("NFD").replace(/\p{M}/gu,"").toLocaleLowerCase()}function gA(r,e){const n=bu(e.trim());if(n==="")return[...r];const s=r.filter(a=>bu(a.label).includes(n));return r.filter(a=>s.includes(a)||s.some(i=>i.path.startsWith(`${a.path}/`)))}var bA=_('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="assign-apply"> </button>',1),_A=_('<input type="text" class="hmm-input hmm-assign-filter svelte-17ogdox" data-testid="assign-filter"/>'),yA=_('<span class="hmm-assign-error svelte-17ogdox" data-testid="assign-error"> </span>'),EA=_('<label data-testid="assign-row"><input type="checkbox" data-testid="assign-check" class="svelte-17ogdox"/> <span class="hmm-assign-name svelte-17ogdox"> </span> <!></label>'),SA=_('<p class="hmm-assign-empty svelte-17ogdox"> </p>'),kA=_('<p class="hmm-assign-summary svelte-17ogdox" role="alert" data-testid="assign-summary"> </p>'),wA=_('<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),AA=_('<button type="button" class="hmm-button" data-testid="assign-new"> </button>'),TA=_('<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 RA(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),S=N(!1),E=N(""),A=N(!1),x=N(void 0),D=N(void 0),C=N(void 0),T=!1;const P=c(()=>l.options(s())),z=c(()=>gA(t(P),t(b))),Y=c(()=>t(P).length>cA),ne=c(()=>Object.keys(t(g)).length),ie=c(()=>s()==="room"),de=c(()=>t(ie)?o("Assign to room"):o("Assign to function")),G=M=>l.view(M);function re(){const M=t(P).map(ue=>ue.path);return[...M,...Object.keys(t(p)).filter(ue=>!M.includes(ue))]}function le(M){return t(p)[M]??t(f)[M]??"off"}lt(()=>{n()&&!T&&gr(()=>{u(f,hA(a(),t(P).map(M=>M.path),G),!0),u(p,{...t(f)},!0),u(g,{},!0),u(b,""),u(C,void 0),u(S,!1),u(E,"")}),T=n()});function Z(M,ue){const ve=be=>{M.checked=be==="on",M.indeterminate=be==="mixed"};return ve(ue),{update:ve}}function te(M,ue){const ve=mA(t(f)[M]??"off",le(M));u(p,{...t(p),[M]:ve},!0),t(g)[M]!==void 0&&u(g,Object.fromEntries(Object.entries(t(g)).filter(([be])=>be!==M)),!0),ue.checked=ve==="on",ue.indeterminate=ve==="mixed"}async function j(){if(t(k))return;const M=vA(re(),t(f),t(p)),ue=pA(a(),M,t(p),G),ve=ue.length===0?[]:await U(ue),be={...t(f)},Ee={};for(const q of M){const Q=ve.find(O=>O.path===q);Q!==void 0&&!Q.ok?Ee[q]=Q.message:be[q]=le(q)}u(f,be,!0),u(g,Ee,!0),Object.keys(Ee).length===0&&n(!1)}async function U(M){u(k,!0);try{return await l.assignEach(M)}finally{u(k,!1)}}function me(M){M.key==="Enter"&&(M.preventDefault(),j())}function ke(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 fe(M){M.key==="Enter"&&(M.preventDefault(),t(x)?.querySelector('input[type="checkbox"]')?.focus())}async function Re(){u(S,!0),await ti(),t(D)?.focus()}async function xe(){const M=t(E).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(E,""),u(S,!1),await ti(),t(x)?.querySelector(`[data-path="${CSS.escape(ue)}"] input`)?.focus())}function se(M){M.key==="Enter"&&(M.preventDefault(),xe())}{const M=be=>{var Ee=bA(),q=Ie(Ee),Q=m(q,!0),O=d(q,2),W=m(O,!0);y((ce,he)=>{q.disabled=t(k),h(Q,ce),O.disabled=t(k)||a().length===0,h(W,he)},[()=>o("Cancel"),()=>o("Apply")]),J("click",q,()=>n(!1)),J("click",O,()=>{j()}),v(be,Ee)};let ue=c(()=>!t(k)),ve=c(()=>o("Close"));En(r,{get title(){return t(de)},width:"560px",get closable(){return t(ue)},get closeLabel(){return t(ve)},testId:"assign-dialog",get open(){return n()},set open(be){n(be)},buttons:M,children:(be,Ee)=>{var q=TA(),Q=Ie(q),O=m(Q,!0),W=d(Q,2);{var ce=ee=>{var _e=_A();y((Ne,Fe)=>{rn(_e,t(b)),I(_e,"placeholder",Ne),I(_e,"aria-label",Fe)},[()=>t(ie)?o("Filter rooms"):o("Filter functions"),()=>t(ie)?o("Filter rooms"):o("Filter functions")]),J("input",_e,ke),J("keydown",_e,fe),v(ee,_e)};$(W,ee=>{t(Y)&&ee(ce)})}var he=d(W,2);let ge;je(he,21,()=>t(z),ee=>ee.path,(ee,_e)=>{const Ne=c(()=>le(t(_e).path)),Fe=c(()=>t(g)[t(_e).path]);var We=EA();let tt,rt;var we=w(We);Nf(we,(Oe,Ke)=>Z?.(Oe,Ke),()=>t(Ne));var Te=d(we,2),K=m(Te,!0),H=d(Te,2);{var Ce=Oe=>{var Ke=yA(),pe=m(Ke,!0);y(De=>h(pe,De),[()=>o("Not saved: {message}",{message:t(Fe)})]),v(Oe,Ke)};$(H,Oe=>{t(Fe)!==void 0&&Oe(Ce)})}y(Oe=>{tt=St(We,1,"hmm-assign-row svelte-17ogdox",null,tt,{"hmm-assign-row-failed":t(Fe)!==void 0}),I(We,"data-path",t(_e).path),I(We,"data-state",t(Ne)),rt=Fn(We,"",rt,{"padding-inline-start":Oe}),we.disabled=t(k),h(K,t(_e).label)},[()=>`${String(6+(t(_e).depth-1)*18)}px`]),J("change",we,Oe=>te(t(_e).path,Oe.currentTarget)),J("keydown",we,me),v(ee,We)},ee=>{var _e=SA(),Ne=m(_e,!0);y(Fe=>h(Ne,Fe),[()=>t(P).length>0?o("No match"):t(ie)?o("No rooms yet"):o("No functions yet")]),v(ee,_e)}),_n(he,ee=>u(x,ee),()=>t(x));var ye=d(he,2);{var ae=ee=>{var _e=kA(),Ne=m(_e,!0);y(Fe=>h(Ne,Fe),[()=>o("{count} changes were not saved",{},t(ne))]),v(ee,_e)};$(ye,ee=>{t(ne)>0&&ee(ae)})}var V=d(ye,2),F=w(V);{var R=ee=>{var _e=wA(),Ne=Ie(_e);_n(Ne,tt=>u(D,tt),()=>t(D));var Fe=d(Ne,2),We=m(Fe,!0);y((tt,rt,we,Te)=>{I(Ne,"aria-label",tt),I(Ne,"placeholder",rt),Ne.disabled=t(A),Fe.disabled=we,h(We,Te)},[()=>t(ie)?o("Name of the new room"):o("Name of the new function"),()=>t(ie)?o("Name of the new room"):o("Name of the new function"),()=>t(A)||t(E).trim()==="",()=>o("Create")]),J("keydown",Ne,se),An(Ne,()=>t(E),tt=>u(E,tt)),J("click",Fe,()=>{xe()}),v(ee,_e)},L=ee=>{var _e=AA(),Ne=m(_e,!0);y(Fe=>h(Ne,Fe),[()=>t(ie)?o("New room…"):o("New function…")]),J("click",_e,()=>{Re()}),v(ee,_e)};$(F,ee=>{t(S)?ee(R):ee(L,-1)})}y((ee,_e,Ne)=>{h(O,ee),I(he,"aria-label",_e),ge=Fn(he,"",ge,{"min-height":Ne})},[()=>o("{count} rows selected",{},a().length),()=>t(ie)?o("Rooms"):o("Functions"),()=>t(C)===void 0?void 0:`${String(t(C))}px`]),v(be,q)},$$slots:{buttons:!0,default:!0}})}mt()}kt(["click","input","keydown","change"]);var xA=_('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button hmm-danger svelte-y0v77l" data-testid="delete-device-confirm"> </button>',1),IA=_('<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 DA(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=E=>{var A=xA(),x=Ie(A),D=m(x,!0),C=d(x,2),T=m(C,!0);y((P,z)=>{h(D,P),C.disabled=t(f),h(T,z)},[()=>i("Cancel"),()=>i("Delete")]),J("click",x,()=>n(!1)),J("click",C,()=>{b()}),v(E,A)};let S=c(()=>i("Delete device"));En(r,{get title(){return t(S)},width:"560px",testId:"delete-device-dialog",get open(){return n()},set open(E){n(E)},buttons:k,children:(E,A)=>{var x=IA(),D=Ie(x),C=m(D,!0),T=d(D,2),P=m(T,!0),z=d(T,2),Y=w(z),ne=m(Y,!0);Y.value=Y.__value=1;var ie=d(Y),de=m(ie,!0);ie.value=ie.__value=0,Qt(z);var G=d(z,2),re=m(G,!0),le=d(G,2),Z=w(le),te=m(Z,!0);Z.value=Z.__value=4;var j=d(Z),U=m(j,!0);j.value=j.__value=2,Qt(le);var me=d(le,2),ke=m(me);y((fe,Re,xe,se,M,ue,ve,be)=>{h(C,fe),h(P,s()),I(z,"aria-label",Re),h(ne,xe),h(de,se),h(re,M),I(le,"aria-label",ue),h(te,ve),h(U,be),h(ke,`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(z,()=>t(o),fe=>u(o,fe)),br(le,()=>t(l),fe=>u(l,fe)),v(E,x)},$$slots:{buttons:!0,default:!0}})}mt()}kt(["click"]);var NA=_('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="rename-save"> </button>',1),CA=_('<label class="hmm-rename-children svelte-111tkcw"><input type="checkbox" data-testid="rename-children"/> <span> </span></label>'),PA=_('<p class="hmm-rename-address svelte-111tkcw"> </p> <input class="hmm-input hmm-rename-input svelte-111tkcw" data-testid="rename-input"/> <!>',1);function MA(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(S=>S.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 S=t(b);if(S.length===0)return;u(f,!0);const E=await a.names.rename(S);u(f,!1),E&&n(!1)}{const S=A=>{var x=NA(),D=Ie(x),C=m(D,!0),T=d(D,2),P=m(T,!0);y((z,Y)=>{h(C,z),T.disabled=t(f)||t(b).length===0,h(P,Y)},[()=>i("Cancel"),()=>i("Apply")]),J("click",D,()=>n(!1)),J("click",T,()=>{k()}),v(A,x)};let E=c(()=>i("Rename"));En(r,{get title(){return t(E)},width:"520px",testId:"rename-dialog",get open(){return n()},set open(A){n(A)},buttons:S,children:(A,x)=>{var D=PA(),C=Ie(D),T=m(C,!0),P=d(C,2),z=d(P,2);{var Y=ne=>{var ie=CA(),de=w(ie),G=d(de,2),re=m(G,!0);y(le=>h(re,le),[()=>i("Overwrite channel names")]),mr(de,()=>t(l),le=>u(l,le)),v(ne,ie)};$(z,ne=>{t(p)&&ne(Y)})}y(ne=>{h(T,s()),I(P,"aria-label",ne)},[()=>i("Name")]),J("keydown",P,ne=>{ne.key==="Enter"&&k()}),An(P,()=>t(o),ne=>u(o,ne)),v(A,D)},$$slots:{buttons:!0,default:!0}})}mt()}kt(["click","keydown"]);var OA=_('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="repair-confirm"> </button>',1),LA=_('<p class="hmm-repair-note svelte-g84sn7" data-testid="repair-bidcos-note"> </p>'),FA=_("<p> </p>"),GA=_('<p data-testid="repair-failed"> </p>'),UA=_('→ <span class="hmm-mono" data-testid="repair-pending-after"> </span>',1),BA=_('<li class="hmm-mono"> </li>'),VA=_('<div class="hmm-repair-unrepairable svelte-g84sn7" data-testid="repair-unrepairable"><p> </p> <ul class="svelte-g84sn7"></ul></div>'),HA=_('<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>'),zA=_('<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>'),jA=_('<p data-testid="repair-nothing"> </p>'),WA=_('<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>'),KA=_('<li><span class="hmm-mono"> </span> </li>'),YA=_('<ul class="hmm-repair-results svelte-g84sn7" data-testid="repair-results"></ul>'),qA=_('<p>CONFIG_PENDING: <span class="hmm-mono"> </span> <!></p> <!> <!> <!> <!>',1),$A=_('<p class="hmm-repair-address svelte-g84sn7"> <span class="hmm-mono"> </span></p> <!> <!>',1);function XA(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),S=c(()=>!a.interfaces.typeOf(t(k)).startsWith("BidCos")),E=c(()=>t(l)??t(o)),A=c(()=>t(E)?.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(S)||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=T=>{var P=OA(),z=Ie(P),Y=m(z,!0),ne=d(z,2),ie=m(ne,!0);y((de,G)=>{h(Y,de),ne.disabled=t(p)||t(E)===void 0||t(l)!==void 0,h(ie,G)},[()=>i("Close"),()=>i("Repair configuration")]),J("click",z,()=>n(!1)),J("click",ne,()=>{x()}),v(T,P)};let C=c(()=>i("Repair configuration"));En(r,{get title(){return t(C)},width:"720px",testId:"repair-dialog",get open(){return n()},set open(T){n(T)},buttons:D,children:(T,P)=>{var z=$A(),Y=Ie(z),ne=w(Y),ie=d(ne),de=m(ie,!0),G=d(Y,2);{var re=U=>{var me=LA(),ke=m(me,!0);y(fe=>h(ke,fe),[()=>i("On BidCos a pending configuration is normal: it is queued and the device takes it when it next wakes up.")]),v(U,me)};$(G,U=>{t(S)||U(re)})}var le=d(G,2);{var Z=U=>{var me=FA(),ke=m(me,!0);y(fe=>h(ke,fe),[()=>i("Loading Homematic Manager...")]),v(U,me)},te=U=>{var me=GA(),ke=m(me,!0);y(fe=>h(ke,fe),[()=>i("No data")]),v(U,me)},j=U=>{var me=qA(),ke=Ie(me),fe=d(w(ke)),Re=m(fe,!0),xe=d(fe,2);{var se=ce=>{var he=UA(),ge=d(Ie(he)),ye=m(ge,!0);y(ae=>h(ye,ae),[()=>String(t(l).configPendingAfter??"—")]),v(ce,he)};$(xe,ce=>{t(l)&&ce(se)})}var M=d(ke,2);{var ue=ce=>{var he=VA(),ge=w(he),ye=m(ge,!0),ae=d(ge,2);je(ae,20,()=>t(E).unrepairable,V=>V,(V,F)=>{var R=BA(),L=m(R,!0);y(()=>h(L,F)),v(V,R)}),y(V=>h(ye,V),[()=>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(ce,he)};$(M,ce=>{t(E).unrepairable.length>0&&ce(ue)})}var ve=d(M,2);{var be=ce=>{var he=zA(),ge=w(he),ye=w(ge),ae=w(ye),V=m(ae,!0),F=d(ae),R=m(F,!0),L=d(F),ee=m(L,!0),_e=d(L),Ne=m(_e,!0),Fe=d(_e),We=m(Fe,!0),tt=d(ge);je(tt,21,()=>t(A),rt=>`${rt.channel.address}-${rt.c.parameter}`,(rt,we)=>{var Te=HA(),K=w(Te),H=m(K,!0),Ce=d(K),Oe=m(Ce,!0),Ke=d(Ce),pe=m(Ke,!0),De=d(Ke),Pe=m(De,!0),Ge=d(De),Le=m(Ge,!0);y((Ye,Xe)=>{h(H,t(we).channel.address),h(Oe,t(we).c.parameter),h(pe,Ye),h(Pe,Xe),h(Le,t(we).c.reason)},[()=>Na(t(we).c.stored,void 0),()=>Na(t(we).c.replacement,void 0)]),v(rt,Te)}),y((rt,we,Te,K,H)=>{h(V,rt),h(R,we),h(ee,Te),h(Ne,K),h(We,H)},[()=>i("Channel"),()=>i("Parameter"),()=>i("Current value"),()=>i("New value"),()=>i("Message")]),v(ce,he)},Ee=ce=>{var he=jA(),ge=m(he,!0);y(ye=>h(ge,ye),[()=>i("Nothing has to be corrected")]),v(ce,he)};$(ve,ce=>{t(A).length>0?ce(be):ce(Ee,-1)})}var q=d(ve,2);{var Q=ce=>{var he=WA(),ge=w(he),ye=m(ge,!0),ae=d(ge,2),V=w(ae);V.value=V.__value="none";var F=d(V);F.value=F.__value="clearConfigCache";var R=d(F);R.value=R.__value="restoreConfigToDevice",Qt(ae),y(L=>h(ye,L),[()=>i("Additional BidCos recovery")]),br(ae,()=>t(g),L=>u(g,L)),v(ce,he)};$(q,ce=>{t(S)||ce(Q)})}var O=d(q,2);{var W=ce=>{var he=YA();je(he,21,()=>t(l).channels,ge=>ge.address,(ge,ye)=>{var ae=KA();let V;var F=w(ae),R=m(F,!0),L=d(F);y(()=>{V=St(ae,1,"svelte-g84sn7",null,V,{"hmm-repair-failed":!t(ye).write.ok}),h(R,t(ye).address),h(L,` ${t(ye).write.ok?"✔":`✕ ${t(ye).write.faultString??""}`}`)}),v(ge,ae)}),v(ce,he)};$(O,ce=>{t(l)&&ce(W)})}y(ce=>h(Re,ce),[()=>String(t(E).configPendingBefore??"—")]),v(U,me)};$(le,U=>{t(f)?U(Z):t(E)?U(j,-1):U(te,1)})}y(U=>{h(ne,`${U??""} `),h(de,s())},[()=>a.nameOf(s())]),v(T,z)},$$slots:{buttons:!0,default:!0}})}mt()}kt(["click"]);var QA=_('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="replace-device-confirm"> </button>',1),ZA=_("<p> </p>"),JA=_('<p data-testid="replace-none"> </p>'),eT=_("<option> </option>"),tT=_('<select class="hmm-select hmm-replace-select svelte-novg4s"></select>'),nT=_('<h4 class="svelte-novg4s"> </h4> <p class="hmm-replace-new svelte-novg4s"> <span class="hmm-mono"> </span></p> <!>',1);function rT(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(S=>{u(o,S,!0),u(l,S.find(E=>!E.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=E=>{var A=QA(),x=Ie(A),D=m(x,!0),C=d(x,2),T=m(C,!0);y((P,z)=>{h(D,P),C.disabled=t(p)||t(l)==="",h(T,z)},[()=>i("Cancel"),()=>i("Replace")]),J("click",x,()=>n(!1)),J("click",C,()=>{b()}),v(E,A)};let S=c(()=>i("Replace device"));En(r,{get title(){return t(S)},width:"560px",testId:"replace-device-dialog",get open(){return n()},set open(E){n(E)},buttons:k,children:(E,A)=>{var x=nT(),D=Ie(x),C=m(D,!0),T=d(D,2),P=w(T),z=d(P),Y=m(z,!0),ne=d(T,2);{var ie=re=>{var le=ZA(),Z=m(le,!0);y(te=>h(Z,te),[()=>i("Loading Homematic Manager...")]),v(re,le)},de=re=>{var le=JA(),Z=m(le,!0);y(te=>h(Z,te),[()=>i("No suitable device available")]),v(re,le)},G=re=>{var le=tT();je(le,21,()=>t(g),Z=>Z.ADDRESS,(Z,te)=>{var j=eT(),U=m(j),me={};y(ke=>{h(U,`${ke??""} (${t(te).ADDRESS??""})`),me!==(me=t(te).ADDRESS)&&(j.value=(j.__value=me)??"")},[()=>a.nameOf(t(te).ADDRESS)]),v(Z,j)}),Qt(le),y(Z=>I(le,"aria-label",Z),[()=>i("Replace device")]),br(le,()=>t(l),Z=>u(l,Z)),v(re,le)};$(ne,re=>{t(f)?re(ie):t(g).length===0?re(de,1):re(G,-1)})}y((re,le)=>{h(C,re),h(P,`${le??""}: `),h(Y,s())},[()=>i("Which device do you want to replace?"),()=>i("New device")]),v(E,x)},$$slots:{buttons:!0,default:!0}})}mt()}kt(["click"]);var sT=_("<!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!>",1),_u=_("<option> </option>"),aT=_('<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),iT=_('<button type="button" class="hmm-inline-button hmm-inline-button-first svelte-1fmr35a">✎</button> <span> </span>',1),oT=_('<button type="button" class="hmm-inline-button svelte-1fmr35a">⚒</button>'),lT=_('<span role="img"> </span> <!>',1),yu=_('<span class="hmm-firmware-status svelte-1fmr35a"> </span>'),Eu=_('<button type="button" class="hmm-inline-button svelte-1fmr35a"> </button>'),Su=_("<span> </span> <!>",1),dT=_("<span></span>"),cT=_('<span title="AES_ACTIVE" aria-label="AES_ACTIVE" role="img">🔑</span>'),uT=_('<span class="hmm-roaming svelte-1fmr35a" title="ROAMING" aria-label="ROAMING" role="img">⇄</span>'),fT=_('<div class="hmm-page svelte-1fmr35a"><div class="hmm-page-grid svelte-1fmr35a"><!></div></div> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!>',1);function hT(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),S=N(!1),E=N(!1),A=N(!1),x=N(""),D=N(!1),C=N(Be([])),T=N(Be([])),P=N(!1),z=N(!1),Y=N(""),ne=N(void 0),ie=N(!1),de=N(""),G=N("MASTER"),re=N(!1),le=N("room"),Z=N(Be([])),te=N(""),j=N("");const U=c(()=>n.app.selectedInterface),me=c(()=>n.interfaces.typeOf(t(U))),ke=c(()=>n.devices.index(t(U))),fe=c(()=>li(t(U),t(me))),Re=c(()=>t(fe)&&t(ke)!==void 0?t(ke).channels().filter(oe=>Xf(oe)).map(oe=>oe.ADDRESS):[]);lt(()=>{if(t(U)===""||t(ke)===void 0||!t(fe))return;const oe=t(U),He=t(Re);gr(()=>{n.smokeGroups.sync(oe,He)})});const xe=c(()=>n.smokeGroups.of(t(U))),se=c(()=>t(ke)===void 0?[]:[...Tb(t(ke)),...t(fe)?Rb(t(xe)):[]]),M=c(()=>Object.fromEntries(t(se).map(oe=>[oe.address,oe]))),ue=c(()=>t(se).filter(oe=>oe.kind==="hmip").map(oe=>Ib(oe.number??0))),ve=c(()=>xb(t(xe)));function be(oe){return oe in t(M)}function Ee(oe){return(t(M)[oe]?.members??[]).map(He=>t(ke)?.get(He)).filter(He=>He!==void 0)}function q(oe){const He=[],Gt=t(ke)===void 0?void 0:Qf(t(ke),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 Q(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=>q(pn)))].join(", ")}function O(oe){const He=t(M)[oe]?.number;return Xs(oe)&&He!==void 0?s("Smoke group {n}",{n:He}):n.nameOf(oe)}function W(oe){if(!Xs(oe.ADDRESS))return Xo(oe.ADDRESS,t(R));const He={};for(const Gt of Ee(oe.ADDRESS))for(const pn of Xo(xa(Gt.ADDRESS),t(R),99))He[pn.datapoint]=pn;return Object.values(He)}function ce(oe){return Ee(oe)[0]?.PARENT_TYPE??"HmIP-SWSD"}function he(oe){u(ne,void 0),u(Y,oe,!0),u(z,!0)}function ge(){t(ve)!==void 0&&(u(ne,{address:yd(t(ve)),kind:"hmip",number:t(ve),members:[]},!0),u(Y,""),u(z,!0))}const ye=c(()=>t(ne)??(t(Y)===""?void 0:t(M)[t(Y)])),ae=c(()=>t(fe)&&t(Re).length>0&&t(ve)!==void 0),V=c(()=>t(fe)?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")),F=c(()=>[...t(ue),...n.devices.devices(t(U))]),R=c(()=>n.serviceMessages.of(t(U))),L=c(()=>n.radio.gateways(t(U)));lt(()=>{t(me)==="BidCos-RF"&&n.radio.ensureGateways(t(U))}),lt(()=>{t(U),u(i,[],!0),u(o,[],!0),u(te,""),u(j,"")});const ee=c(()=>n.taxonomy),_e=c(()=>t(ee).options("room")),Ne=c(()=>t(ee).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(Ne).some(oe=>oe.path===t(j))&&u(j,"")});function We(oe){return t(ee).refOf(t(U),oe)}function tt(oe){return t(ee).view(We(oe))}function rt(oe){return n.devices.channels(t(U),oe.ADDRESS).map(He=>tt(He.ADDRESS))}function we(oe,He){return(Ls(oe.ADDRESS)?uS(tt(oe.ADDRESS),rt(oe),He):Wl(tt(oe.ADDRESS),He)).join(", ")}const Te=c(()=>t(Fe).length===0?t(F):t(F).filter(oe=>t(Fe).every(He=>Xs(oe.ADDRESS)?Ee(oe.ADDRESS).some(Gt=>K(Gt,He)):Ph(tt(oe.ADDRESS),rt(oe),He))));function K(oe,He){return eu(tt(oe.ADDRESS),tt(xa(oe.ADDRESS)),He)}lt(()=>{t(U)!==""&&n.links.ensure(t(U))});const H=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(ke)===void 0?s("Loading Homematic Manager..."):t(F).length>0?s("No device matches the room or function filter"):s("No devices - the interface has not reported any yet")),Ce=c(()=>t(i).length===1?t(i)[0]??"":""),Oe=c(()=>t(Ce)!==""&&Ls(t(Ce))?t(Ce):""),Ke=c(()=>t(i).filter(oe=>!Ls(oe)&&!Js(oe)));function pe(oe){return oe!==""&&!Js(oe)&&!Xs(oe)}const De=c(()=>pe(t(Ce))),Pe=c(()=>t(Oe)!==""&&Ii(t(ke)?.get(t(Oe))?.FLAGS).dontDelete),Ge=c(()=>t(Oe)!==""&&!Xs(t(Oe))?t(Oe):""),Le=c(()=>t(Ge)!==""&&!t(Pe)),Ye=c(()=>t(me).startsWith("BidCos")),Xe=c(()=>cb(t(me)));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 Ze=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=>O(oe.ADDRESS)},{key:"ADDRESS",label:"ADDRESS",width:150,mono:!0,copy:"address"},{key:"rooms",label:s("Rooms"),width:120,value:oe=>we(oe,"room")},{key:"functions",label:s("Functions"),width:110,value:oe=>we(oe,"function")},{key:"smokeGroup",label:s("Smoke group"),width:150,minWidth:70,keepMinWidth:!0,hidden:t(se).length===0,value:oe=>Q(oe)},{key:"msgs",label:"Msgs",width:Qc,minWidth:Qc,keepMinWidth:!0,align:"center",filterable:!1,sortable:!1,value:oe=>W(oe).map(He=>He.datapoint).join(" ")},{key:"TYPE",label:"TYPE",width:150},{key:"SUBTYPE",label:"SUBTYPE",width:90,hidden:t(me)!=="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(me)!=="BidCos-RF",value:oe=>Tc(oe,t(L))},{key:"RX_MODE",label:"RX_MODE",width:130,hidden:t(me)==="BidCos-Wired",value:oe=>gb(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=>we(oe,"room")},{key:"functions",label:s("Functions"),width:110,value:oe=>we(oe,"function")},{key:"smokeGroup",label:s("Smoke group"),width:150,hidden:t(se).length===0,value:oe=>Q(oe)},{key:"TYPE",label:"TYPE",width:150},{key:"DIRECTION",label:"DIRECTION",width:100,value:oe=>_b(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(me)!=="BidCos-RF",value:oe=>oe.AES_ACTIVE?"🔑":""}]);function pt(oe){const He=Ls(oe.ADDRESS)?void 0:t(ke)?.parentOf(oe.ADDRESS),Gt=li(t(U),t(me))&&Js(oe.ADDRESS),pn=mb(oe.ADDRESS)||sa(oe);return oS(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(ke)?.get(oe);return{canSend:_s(He?.LINK_SOURCE_ROLES).length>0,canReceive:_s(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=be(oe.ADDRESS)?Ee(oe.ADDRESS):[];if(t(Fe).length===0)return[...He,...Gt];const pn=tt(oe.ADDRESS);return[...He.filter(Sn=>t(Fe).every(er=>eu(tt(Sn.ADDRESS),pn,er))),...Gt.filter(Sn=>t(Fe).every(er=>K(Sn,er)))]}function Me(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=>Me(Gt))}function ft(oe,He){u(le,oe,!0),u(Z,He===void 0?t(i).map(Gt=>Me(Gt)):$e(He),!0),t(Z).length!==0&&u(re,!0)}const yt=c(()=>t(i).length>0&&t(ee).writable),it=c(()=>t(ee).available?t(ee).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(R),99).some(He=>He.datapoint==="UPDATE_PENDING")}function Mt(oe){return cS(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(S,!0)}function un(oe){u(x,oe,!0),u(E,!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(ie,!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(ke)?.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))?[...be(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(ee).writable},{id:"assign:function",label:`${s("Assign to function")}…`,disabled:!t(ee).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(ee).writable},{id:"assign:function",label:`${s("Assign to function")}…`,disabled:!t(ee).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(ke)?.get(t(g))?.TEAM_TAG??"")===""}]);function xt(oe){return Ii(t(ke)?.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(T,[],!0),u(D,!0);break;case"link:receiver":u(C,[],!0),u(T,[He],!0),u(D,!0);break;case"team":u(x,He,!0),u(P,!0);break;case"smokeGroup":he(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=fT(),On=Ie(Mn),Mr=w(On),Xr=w(Mr);{const oe=nt=>{var st=sT(),Ve=Ie(st);{let Qe=c(()=>s("Pair device")),et=c(()=>!t(Xe)),bt=c(()=>s("This interface cannot pair devices"));Dh(Ve,{get caption(){return t(Qe)},icon:"+",get disabled(){return t(et)},get reason(){return t(bt)},testId:"devices-add",onclick:()=>u(A,!0)})}var Je=d(Ve,2);{let Qe=c(()=>s("Rename device")),et=c(()=>!t(De)),bt=c(()=>ze("device"));Ct(Je,{get title(){return t(Qe)},icon:"✎",get disabled(){return t(et)},get reason(){return t(bt)},testId:"devices-rename",onclick:()=>Zt(t(Ce))})}var at=d(Je,2);{let Qe=c(()=>s("Assign to room")),et=c(()=>!t(yt));Ct(at,{get title(){return t(Qe)},icon:"⌂",get disabled(){return t(et)},get reason(){return t(it)},testId:"devices-assign-room",onclick:()=>ft("room")})}var _t=d(at,2);{let Qe=c(()=>s("Assign to function")),et=c(()=>!t(yt));Ct(_t,{get title(){return t(Qe)},icon:"⚑",get disabled(){return t(et)},get reason(){return t(it)},testId:"devices-assign-function",onclick:()=>ft("function")})}var Rt=d(_t,2);{let Qe=c(()=>s("Rooms and functions")),et=c(()=>!t(ee).available),bt=c(()=>s("No store connected"));Ct(Rt,{get title(){return t(Qe)},icon:"⊞",get disabled(){return t(et)},get reason(){return t(bt)},testId:"devices-taxonomy",onclick:()=>{n.selectInterface(md)}})}var Vt=d(Rt,2);{let Qe=c(()=>t(Ke).length===0),et=c(()=>ze("channel"));Ct(Vt,{title:"reportValueUsage 1",icon:"⇩",get disabled(){return t(Qe)},get reason(){return t(et)},testId:"devices-usage-1",onclick:()=>{vn(1)}})}var Ut=d(Vt,2);{let Qe=c(()=>t(Ke).length===0),et=c(()=>ze("channel"));Ct(Ut,{title:"reportValueUsage 0",icon:"⇧",get disabled(){return t(Qe)},get reason(){return t(et)},testId:"devices-usage-0",onclick:()=>{vn(0)}})}var ln=d(Ut,2);{let Qe=c(()=>s("restoreConfigToDevice")),et=c(()=>t(Oe)===""||!t(Ye)),bt=c(()=>t(Ye)?ze("device"):ze("bidcos"));Ct(ln,{get title(){return t(Qe)},icon:"⟲",get disabled(){return t(et)},get reason(){return t(bt)},testId:"devices-restore",onclick:()=>{n.devices.restoreConfig(t(U),t(Oe))}})}var Bt=d(ln,2);{let Qe=c(()=>s("clearConfigCache")),et=c(()=>t(Oe)===""||!t(Ye)),bt=c(()=>t(Ye)?ze("device"):ze("bidcos"));Ct(Bt,{get title(){return t(Qe)},icon:"⌫",get disabled(){return t(et)},get reason(){return t(bt)},testId:"devices-clear",onclick:()=>{n.devices.clearConfigCache(t(U),t(Oe))}})}var hn=d(Bt,2);{let Qe=c(()=>s("Repair configuration")),et=c(()=>t(Ge)===""),bt=c(()=>ze("device"));Ct(hn,{get title(){return t(Qe)},icon:"⚒",get disabled(){return t(et)},get reason(){return t(bt)},testId:"devices-repair",onclick:()=>un(t(Ge))})}var Tn=d(hn,2);{let Qe=c(()=>s("New smoke group")),et=c(()=>!t(ae));Ct(Tn,{get title(){return t(Qe)},icon:"◎",get disabled(){return t(et)},get reason(){return t(V)},testId:"devices-smoke-group-new",onclick:ge})}var gn=d(Tn,2);{let Qe=c(()=>s("Replace device")),et=c(()=>!t(Le)),bt=c(()=>ze("delete"));Ct(gn,{get title(){return t(Qe)},icon:"⇄",get disabled(){return t(et)},get reason(){return t(bt)},testId:"devices-replace",onclick:()=>on(t(Oe))})}var Lt=d(gn,2);{let Qe=c(()=>s("Delete device")),et=c(()=>!t(Le)),bt=c(()=>ze("delete"));Ct(Lt,{get title(){return t(Qe)},icon:"🗑",get disabled(){return t(et)},get reason(){return t(bt)},testId:"devices-delete",onclick:()=>bn(t(Oe))})}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(nt,st)},He=nt=>{var st=wt(),Ve=Ie(st);{var Je=at=>{var _t=aT(),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=_u(),et=m(Qe,!0),bt={};y(sn=>{h(et,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(Ne),Lt=>Lt.path,(Lt,It)=>{var Qe=_u(),et=m(Qe,!0),bt={};y(sn=>{h(et,sn),bt!==(bt=t(It).path)&&(Qe.value=(Qe.__value=bt)??"")},[()=>jl(t(It)," ")]),v(Lt,Qe)}),Qt(Bt),y((Lt,It,Qe,et)=>{I(Rt,"aria-label",Lt),h(Ut,It),I(Bt,"aria-label",Qe),h(Tn,et)},[()=>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(ee).available&&at(Je)})}v(nt,st)},Gt=(nt,st=zn,Ve=zn,Je=zn)=>{var at=wt(),_t=Ie(at);{var Rt=It=>{const Qe=c(()=>Xs(st().ADDRESS)?ce(st().ADDRESS):st().TYPE);{let et=c(()=>n.host.deviceImageUrl(t(Qe))),bt=c(()=>`device-image-${st().ADDRESS}`);fi(It,{get deviceType(){return t(Qe)},get src(){return t(et)},get testId(){return t(bt)}})}},Vt=It=>{var Qe=iT(),et=Ie(Qe),bt=d(et,2),sn=m(bt,!0);y((Rn,dr)=>{I(et,"data-testid",`smoke-group-members-${st().ADDRESS}`),I(et,"title",Rn),I(bt,"data-testid",`smoke-group-${st().ADDRESS}`),h(sn,dr)},[()=>s("Members"),()=>Q(st())]),J("click",et,Rn=>{Rn.stopPropagation(),he(st().ADDRESS)}),v(It,Qe)},Ut=c(()=>Ve().key==="smokeGroup"&&be(st().ADDRESS)&&Je().depth===0),ln=It=>{var Qe=wt(),et=Ie(Qe);je(et,17,()=>W(st()),bt=>bt.datapoint,(bt,sn)=>{const Rn=c(()=>Nh(t(sn).datapoint,!t(Ye)));var dr=lT(),Nn=Ie(dr);let Lr;var cr=m(Nn,!0),Kn=d(Nn,2);{var Fr=Zr=>{var Ur=oT();y(is=>{I(Ur,"data-testid",`repair-${st().ADDRESS}`),I(Ur,"title",is)},[()=>s("Repair configuration")]),J("click",Ur,is=>{is.stopPropagation(),un(st().ADDRESS)}),v(Zr,Ur)},Gr=c(()=>lS(t(sn).datapoint,!t(Ye)));$(Kn,Zr=>{t(Gr)&&Zr(Fr)})}y(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 et=Su(),bt=Ie(et),sn=m(bt,!0),Rn=d(bt,2);{var dr=cr=>{var Kn=yu(),Fr=m(Kn,!0);y(Gr=>h(Fr,Gr),[()=>s("in progress")]),v(cr,Kn)},Nn=cr=>{var Kn=Eu(),Fr=m(Kn);y((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")]),J("click",Kn,Gr=>{Gr.stopPropagation(),Ot(st())}),v(cr,Kn)},Lr=cr=>{var Kn=yu(),Fr=m(Kn,!0);y(()=>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)})}y(()=>h(sn,t(Qe).firmware)),v(It,et)},hn=It=>{const Qe=c(()=>pt(st()));var et=dT();je(et,20,()=>t(Qe).names,bt=>bt,(bt,sn)=>{var Rn=Eu(),dr=m(Rn,!0);y(()=>{I(Rn,"data-testid",`paramset-${st().ADDRESS}-${sn}`),h(dr,sn)}),J("click",Rn,Nn=>{Nn.stopPropagation(),Pn(st().ADDRESS,sn)}),v(bt,Rn)}),y(()=>{I(et,"data-testid",`paramsets-${st().ADDRESS}`),I(et,"aria-busy",t(Qe).pending)}),v(It,et)},Tn=It=>{var Qe=wt(),et=Ie(Qe);{var bt=sn=>{var Rn=cT();v(sn,Rn)};$(et,sn=>{st().AES_ACTIVE&&sn(bt)})}v(It,Qe)},gn=It=>{var Qe=Su(),et=Ie(Qe),bt=m(et,!0),sn=d(et,2);{var Rn=Nn=>{var Lr=uT();v(Nn,Lr)},dr=c(()=>bd(st()));$(sn,Nn=>{t(dr)&&Nn(Rn)})}y(Nn=>{I(et,"data-testid",`receiver-${st().ADDRESS}`),h(bt,Nn)},[()=>Tc(st(),t(L))]),v(It,Qe)},Lt=It=>{var Qe=Zn();y(et=>h(Qe,et),[()=>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"&&Je().depth===0?It(ln,2):Ve().key==="FIRMWARE"&&Je().depth===0?It(Bt,3):Ve().key==="PARAMSETS"?It(hn,4):Ve().key==="AES_ACTIVE"?It(Tn,5):Ve().key==="INTERFACE"&&Je().depth===0?It(gn,6):It(Lt,-1)})}v(nt,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(Te).length));zs(Xr,{get rows(){return t(Te)},get columns(){return t(Ze)},get subColumns(){return t(dt)},getId:nt=>nt.ADDRESS,subRows:Se,get scope(){return t(U)},get caption(){return t(pn)},get filterLabel(){return t(Sn)},get emptyText(){return t(H)},get noMatchText(){return t(er)},get clearFilterLabel(){return t(Or)},showingText:(nt,st)=>s("Showing {shown} of {total}",{shown:nt,total:st}),onrowcontextmenu:Jn,canRename:nt=>pe(nt.ADDRESS),onrename:nt=>Zt(nt.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(nt){u(i,nt,!0)},get expanded(){return t(o)},set expanded(nt){u(o,nt,!0)},toolbar:oe,status:He,cell:Gt,$$slots:{toolbar:!0,status:!0,cell:!0}})}var Ln=d(On,2);{let oe=c(()=>s("Devices"));Dd(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);MA(Wn,{get address(){return t(x)},get open(){return t(b)},set open(oe){u(b,oe,!0)}});var _r=d(Wn,2);DA(_r,{get address(){return t(x)},get open(){return t(k)},set open(oe){u(k,oe,!0)}});var xr=d(_r,2);rT(xr,{get address(){return t(x)},get open(){return t(S)},set open(oe){u(S,oe,!0)}});var lr=d(xr,2);dA(lr,{get open(){return t(A)},set open(oe){u(A,oe,!0)}});var yr=d(lr,2);Mh(yr,{get presetSenders(){return t(C)},get presetReceivers(){return t(T)},get open(){return t(D)},set open(oe){u(D,oe,!0)}});var tr=d(yr,2);MS(tr,{get address(){return t(x)},get open(){return t(P)},set open(oe){u(P,oe,!0)}});var Er=d(tr,2);{let oe=c(()=>t(ne)!==void 0);RS(Er,{get group(){return t(ye)},get isNew(){return t(oe)},get open(){return t(z)},set open(He){u(z,He,!0)}})}var Qr=d(Er,2);XA(Qr,{get address(){return t(x)},get open(){return t(E)},set open(oe){u(E,oe,!0)}});var nr=d(Qr,2);RA(nr,{get enumId(){return t(le)},get targets(){return t(Z)},get open(){return t(re)},set open(oe){u(re,oe,!0)}});var as=d(nr,2);Uw(as,{get interfaceName(){return t(U)},get address(){return t(de)},get paramset(){return t(G)},get open(){return t(ie)},set open(oe){u(ie,oe,!0)}}),v(r,Mn),mt()}kt(["click"]);var mT=_('<!> <!> <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),vT=_('<span data-testid="events-paused"> </span>'),pT=_('<div class="hmm-page svelte-dzof1w"><div class="hmm-page-grid svelte-dzof1w"><!></div></div>');function gT(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)),S=c(()=>[{key:"timestamp",label:s("Timestamp"),width:110,value:C=>Ff(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 E(){u(f,t(l)?[]:[...t(b)],!0),u(l,!t(l))}var A=pT(),x=w(A),D=w(x);{const C=de=>{var G=mT(),re=Ie(G);{let j=c(()=>s("Pause"));Ct(re,{get title(){return t(j)},icon:"⏸",get pressed(){return t(l)},testId:"events-pause",onclick:()=>E()})}var le=d(re,2);{let j=c(()=>s("Clear"));Ct(le,{get title(){return t(j)},icon:"⌫",testId:"events-clear",onclick:()=>{n.events.clear()}})}var Z=d(le,2),te=d(Z,2);y((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)},T=de=>{var G=wt(),re=Ie(G);{var le=Z=>{var te=vT(),j=m(te,!0);y(U=>h(j,U),[()=>s("Pause")]),v(Z,te)};$(re,Z=>{t(l)&&Z(le)})}v(de,G)};let P=c(()=>s("Events")),z=c(()=>s("Filter")),Y=c(()=>s("No data")),ne=c(()=>s("Events")),ie=c(()=>s("{count} events",{},t(k).length));zs(D,{get rows(){return t(k)},get scope(){return t(p)},get columns(){return t(S)},getId:de=>String(de.seq),get caption(){return t(P)},get filterLabel(){return t(z)},get emptyText(){return t(Y)},get toolbarLabel(){return t(ne)},get countText(){return t(ie)},tableId:"events",testId:"events-table",get selected(){return t(a)},set selected(de){u(a,de,!0)},toolbar:C,status:T,$$slots:{toolbar:!0,status:!0}})}v(r,A),mt()}var bT=_('<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),_T=_("<li> </li>"),yT=_('<ul class="hmm-group-delete-members svelte-o268m5" data-testid="group-delete-members"></ul>'),ET=_('<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 ST(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=bT(),S=Ie(k),E=m(S,!0),A=d(S,2),x=m(A,!0);y((D,C)=>{h(E,D),A.disabled=t(o)||s()===void 0,h(x,C)},[()=>i("Cancel"),()=>i("Delete")]),J("click",S,()=>n(!1)),J("click",A,()=>{f()}),v(b,k)};let g=c(()=>i("Delete group"));En(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 S=wt(),E=Ie(S);{var A=x=>{var D=ET(),C=Ie(D),T=m(C,!0),P=d(C,2),z=m(P,!0),Y=d(P,2);{var ne=ie=>{var de=yT();je(de,21,()=>s().members,G=>G.id,(G,re)=>{var le=_T(),Z=m(le,!0);y(te=>h(Z,te),[()=>l(t(re))]),v(G,le)}),v(ie,de)};$(Y,ie=>{s().members.length>0&&ie(ne)})}y(ie=>{h(T,s().name),h(z,ie)},[()=>i("The members leave the group and the virtual device {device} is removed",{device:s().device})]),v(x,D)};$(E,x=>{s()!==void 0&&x(A)})}v(b,S)},$$slots:{buttons:!0,default:!0}})}mt()}kt(["click"]);var kT=_('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="group-save"> </button>',1),wT=_("<option> </option>"),AT=_('<select class="hmm-select" data-testid="group-type"></select>'),TT=_('<span data-testid="group-type"> </span>'),RT=_('<div class="hmm-group-row svelte-1gbrlxm"><span> </span> <span class="hmm-mono" data-testid="group-device"> </span></div>'),xT=_('<p class="hmm-group-muted svelte-1gbrlxm"> </p>'),IT=_('<p class="hmm-group-muted svelte-1gbrlxm" data-testid="group-no-candidates"> </p>'),DT=_('<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>'),NT=_('<ul class="hmm-group-list svelte-1gbrlxm" data-testid="group-candidates"></ul>'),CT=_('<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>'),PT=_('<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),MT=_('<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 OT(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([])),S=N(!1),E=N(!1),A=N(Be([]));const x=c(()=>s()===void 0),D=c(()=>t(p).find(le=>le.id===t(l))),C=c(()=>{if(t(x))return t(D)?.assignable??[];const le=new Set(t(k).map(Z=>Z.id));return[...t(k),...t(g).filter(Z=>!le.has(Z.id))]}),T=c(()=>t(x)?t(D)?.leftover??[]:t(b)),P=c(()=>s()!==void 0&&t(o).trim()!==s().name),z=c(()=>!t(x)&&[...t(f)].sort().join(`
|
|
18
|
-
`)!==t(A).join(`
|
|
19
|
-
`)),Y=c(()=>!t(E)&&!t(S)&&t(o).trim()!==""&&(t(x)?t(l)!=="":t(P)||t(z)));lt(()=>{n()&&(u(E,!1),ne(s()))});async function ne(le){u(S,!0),u(o,le?.name??"",!0),u(f,[],!0),u(p,[],!0),u(g,[],!0),u(b,[],!0),u(k,[],!0),u(A,[],!0);try{if(le===void 0){u(p,await a.groups.types(),!0),u(l,t(p)[0]?.id??"",!0);return}const Z=await a.groups.detail(le.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(S,!1)}}function ie(le){u(l,le,!0),u(f,[],!0)}function de(le,Z){u(f,Z?[...t(f).filter(te=>te!==le),le]:t(f).filter(te=>te!==le),!0)}function G(le){const Z=a.names.name(le.id);return Z===void 0?le.id:Z}async function re(){if(!t(Y))return;u(E,!0);const le=t(o).trim(),Z=s()===void 0?await a.groups.create(le,t(l),t(f)):await a.groups.update(s().id,t(P)?le:void 0,t(z)?t(f):void 0);u(E,!1),Z!==void 0&&n(!1)}{const le=te=>{var j=kT(),U=Ie(j),me=m(U,!0),ke=d(U,2),fe=m(ke,!0);y((Re,xe)=>{h(me,Re),ke.disabled=!t(Y),h(fe,xe)},[()=>i("Cancel"),()=>t(x)?i("Create"):i("Save")]),J("click",U,()=>n(!1)),J("click",ke,()=>{re()}),v(te,j)};let Z=c(()=>t(x)?i("New group"):i("Edit group"));En(r,{get title(){return t(Z)},width:"620px",minHeight:360,testId:"group-dialog",get open(){return n()},set open(te){n(te)},buttons:le,children:(te,j)=>{var U=MT(),me=w(U),ke=w(me),fe=m(ke,!0),Re=d(ke,2),xe=d(me,2),se=w(xe),M=m(se,!0),ue=d(se,2);{var ve=V=>{var F=AT();je(F,21,()=>t(p),L=>L.id,(L,ee)=>{var _e=wT(),Ne=m(_e,!0),Fe={};y(We=>{h(Ne,We),Fe!==(Fe=t(ee).id)&&(_e.value=(_e.__value=Fe)??"")},[()=>i(t(ee).label)]),v(L,_e)});var R;Qt(F),y(()=>{F.disabled=t(S)||t(p).length===0,R!==(R=t(l))&&(F.value=(F.__value=R)??"",Cn(F,R))}),J("change",F,L=>ie(L.currentTarget.value)),v(V,F)},be=V=>{var F=TT(),R=m(F,!0);y(L=>h(R,L),[()=>i(t(D)?.label??t(l))]),v(V,F)};$(ue,V=>{t(x)?V(ve):V(be,-1)})}var Ee=d(xe,2);{var q=V=>{var F=RT(),R=w(F),L=m(R,!0),ee=d(R,2),_e=m(ee,!0);y(Ne=>{h(L,Ne),h(_e,s().device)},[()=>i("Virtual device")]),v(V,F)};$(Ee,V=>{s()!==void 0&&V(q)})}var Q=d(Ee,2),O=m(Q,!0),W=d(Q,2);{var ce=V=>{var F=xT(),R=m(F,!0);y(L=>h(R,L),[()=>i("Loading")]),v(V,F)},he=V=>{var F=IT(),R=m(F,!0);y(L=>h(R,L),[()=>i("There are no other devices available")]),v(V,F)},ge=V=>{var F=NT();je(F,21,()=>t(C),R=>R.id,(R,L)=>{var ee=DT(),_e=w(ee),Ne=w(_e),Fe=d(Ne,2),We=m(Fe,!0),tt=d(Fe,2),rt=m(tt,!0),we=d(tt,2),Te=m(we,!0);y((K,H)=>{Rr(Ne,K),I(Ne,"data-testid",`group-member-${t(L).id}`),h(We,H),h(rt,t(L).id),h(Te,t(L).type)},[()=>t(f).includes(t(L).id),()=>G(t(L))]),J("change",Ne,K=>de(t(L).id,K.currentTarget.checked)),v(R,ee)}),v(V,F)};$(W,V=>{t(S)?V(ce):t(C).length===0?V(he,1):V(ge,-1)})}var ye=d(W,2);{var ae=V=>{var F=PT(),R=Ie(F),L=m(R,!0),ee=d(R,2);je(ee,21,()=>t(T),_e=>_e.id,(_e,Ne)=>{var Fe=CT(),We=w(Fe),tt=m(We,!0),rt=d(We,2),we=m(rt,!0),Te=d(rt,2),K=m(Te,!0);y(H=>{h(tt,H),h(we,t(Ne).id),h(K,t(Ne).type)},[()=>G(t(Ne))]),v(_e,Fe)}),y(_e=>h(L,_e),[()=>i("Already connected devices")]),v(V,F)};$(ye,V=>{!t(S)&&t(T).length>0&&V(ae)})}y((V,F,R)=>{h(fe,V),Re.disabled=t(S),h(M,F),h(O,R)},[()=>i("Group name"),()=>i("Group type"),()=>i("Addable devices")]),J("keydown",Re,V=>{V.key==="Enter"&&re()}),An(Re,()=>t(o),V=>u(o,V)),v(te,U)},$$slots:{buttons:!0,default:!0}})}mt()}kt(["click","keydown","change"]);var LT=_('<p class="hmm-groups-unavailable svelte-v7q9p3" data-testid="groups-unavailable"> </p>'),FT=_("<!> <!> <!> <!>",1),GT=_('<span class="hmm-groups-pending svelte-v7q9p3" data-testid="groups-pending"> </span>'),UT=_('<span class="hmm-groups-none svelte-v7q9p3"> </span>'),BT=_("<span><!></span>"),VT=_('<div class="hmm-page svelte-v7q9p3"><div class="hmm-page-grid svelte-v7q9p3"><!></div></div> <!> <!>',1);function HT(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 S(Z){const te=n.names.name(Z.id);return te===void 0?Z.id:`${te} (${Z.id})`}function E(Z){return Z.members.map(S).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 T=c(()=>t(a).devicesToConfigure.length===0?"":s("Configuration pending: {list}",{list:t(a).devicesToConfigure.map(S).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:E}]);var z=VT(),Y=Ie(z),ne=w(Y),ie=w(ne);{var de=Z=>{var te=LT(),j=m(te);y(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=se=>{var M=FT(),ue=Ie(M);{let q=c(()=>s("Refresh"));Ct(ue,{get title(){return t(q)},icon:"⟳",get busy(){return t(a).loading},testId:"groups-refresh",onclick:()=>{t(a).load()}})}var ve=d(ue,2);{let q=c(()=>s("New group"));Ct(ve,{get title(){return t(q)},icon:"+",get disabled(){return t(b)},get reason(){return t(k)},testId:"groups-new",onclick:x})}var be=d(ve,2);{let q=c(()=>s("Edit group")),Q=c(()=>t(b)||t(g)===void 0),O=c(()=>t(k)??s("Select a group"));Ct(be,{get title(){return t(q)},icon:"✎",get disabled(){return t(Q)},get reason(){return t(O)},testId:"groups-edit",onclick:()=>D(t(g))})}var Ee=d(be,2);{let q=c(()=>s("Delete group")),Q=c(()=>t(b)||t(g)===void 0),O=c(()=>t(k)??s("Select a group"));Ct(Ee,{get title(){return t(q)},icon:"✕",get disabled(){return t(Q)},get reason(){return t(O)},testId:"groups-delete",onclick:()=>C(t(g))})}v(se,M)},j=se=>{var M=wt(),ue=Ie(M);{var ve=be=>{{let Ee=c(()=>s("The direct device connections of these devices are still being configured"));ni(be,{get text(){return t(Ee)},testId:"groups-pending-tooltip",children:(q,Q)=>{var O=GT(),W=m(O,!0);y(()=>h(W,t(T))),v(q,O)},$$slots:{default:!0}})}};$(ue,be=>{t(T)!==""&&be(ve)})}v(se,M)},U=(se,M=zn,ue=zn)=>{var ve=wt(),be=Ie(ve);{var Ee=O=>{var W=BT(),ce=w(W);{var he=ye=>{var ae=UT(),V=m(ae,!0);y(F=>h(V,F),[()=>s("There are no devices in the group")]),v(ye,ae)},ge=ye=>{var ae=Zn();y(V=>h(ae,V),[()=>E(M())]),v(ye,ae)};$(ce,ye=>{M().members.length===0?ye(he):ye(ge,-1)})}y(ye=>I(W,"data-testid",ye),[()=>`group-members-${String(M().id)}`]),v(O,W)},q=O=>{var W=Zn();y(ce=>h(W,ce),[()=>ue().value(M())??""]),v(O,W)},Q=O=>{var W=Zn();y(()=>h(W,M()[ue().key]??"")),v(O,W)};$(be,O=>{ue().key==="members"?O(Ee):ue().value?O(q,1):O(Q,-1)})}v(se,ve)};let me=c(()=>s("Heating groups")),ke=c(()=>s("Filter")),fe=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:se=>String(se.id),get caption(){return t(me)},get filterLabel(){return t(ke)},get emptyText(){return t(fe)},get toolbarLabel(){return t(Re)},get countText(){return t(xe)},onactivate:se=>t(b)?void 0:D(se),tableId:"groups",testId:"groups-table",get selected(){return t(i)},set selected(se){u(i,se,!0)},toolbar:te,status:j,cell:U,$$slots:{toolbar:!0,status:!0,cell:!0}})}};$(ie,Z=>{t(a).offered?Z(G,-1):Z(de)})}var re=d(Y,2);OT(re,{get group(){return t(l)},get open(){return t(o)},set open(Z){u(o,Z,!0)}});var le=d(re,2);ST(le,{get group(){return t(p)},get open(){return t(f)},set open(Z){u(f,Z,!0)}}),v(r,z),mt()}var zT=_('<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),jT=_('<li><span class="hmm-mono"> </span> → <span class="hmm-mono"> </span> <span class="hmm-remove-names svelte-1suervc"> </span></li>'),WT=_('<p> </p> <ul class="hmm-remove-links svelte-1suervc"></ul>',1);function KT(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=zT(),S=Ie(k),E=m(S,!0),A=d(S,2),x=m(A,!0),D=d(A,2),C=m(D,!0);y((T,P,z)=>{h(E,T),A.disabled=t(o)||s().length===0,h(x,P),D.disabled=t(o)||s().length===0,h(C,z)},[()=>i("Cancel"),()=>i("Add to pending changes"),()=>i("Delete")]),J("click",S,()=>n(!1)),J("click",A,l),J("click",D,()=>{f()}),v(b,k)};let g=c(()=>i("Delete link"));En(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 S=WT(),E=Ie(S),A=m(E,!0),x=d(E,2);je(x,21,s,D=>`${D.sender}->${D.receiver}`,(D,C)=>{var T=jT(),P=w(T),z=m(P,!0),Y=d(P,2),ne=m(Y,!0),ie=d(Y,2),de=m(ie);y((G,re)=>{h(z,t(C).sender),h(ne,t(C).receiver),h(de,`${G??""} → ${re??""}`)},[()=>a.nameOf(t(C).sender),()=>a.nameOf(t(C).receiver)]),v(D,T)}),y(D=>h(A,D),[()=>i("{count} links",{},s().length)]),v(b,S)},$$slots:{buttons:!0,default:!0}})}mt()}kt(["click"]);var ku=_("<!> <!>",1),YT=_("<!> <!> <!> <!> <!>",1),qT=_('<button type="button" class="hmm-links-handover svelte-1pum174" data-testid="links-filter-handover"> </button>'),$T=_('<span class="hmm-links-defective svelte-1pum174" data-testid="links-defective"> </span>'),XT=_('<span class="hmm-link-broken svelte-1pum174" role="img">⚠</span>'),QT=_('<div class="hmm-page svelte-1pum174"><div class="hmm-page-grid svelte-1pum174"><!></div></div> <!> <!> <!> <!>',1);function ZT(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),S=N(""),E=N("");const A=c(()=>n.app.selectedInterface),x=c(()=>n.interfaces.typeOf(t(A)));lt(()=>{const se=n.app.linksFilter;se!==""&&(u(p,se,!0),n.app.linksFilter="")});const D=c(()=>n.links.of(t(A))),C=c(()=>n.links.defective(t(A)).length),T=c(()=>t(x)==="BidCos-RF"),P=c(()=>n.devices.index(t(A))),z=c(()=>t(P)===void 0||Jf(t(P)).length>0),Y=c(()=>t(a).map(se=>{const[M,ue]=se.split("->");return M===void 0||ue===void 0?void 0:{sender:M,receiver:ue}}).filter(se=>se!==void 0)),ne=c(()=>t(Y).length===1?t(Y)[0]:void 0),ie=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:se=>n.nameOf(se.SENDER)},{key:"SENDER",label:"SENDER",width:140,mono:!0,copy:"address"},{key:"senderType",label:"TYPE",width:130,value:se=>n.devices.index(t(A))?.get(se.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:se=>n.nameOf(se.RECEIVER)},{key:"RECEIVER",label:"RECEIVER",width:140,mono:!0,copy:"address"},{key:"receiverType",label:"TYPE",width:130,value:se=>n.devices.index(t(A))?.get(se.RECEIVER)?.TYPE??""},{key:"FLAGS",label:"FLAGS",width:48,align:"center",sortable:!1,value:se=>Al(se.FLAGS).broken?"broken":""},{key:"NAME",label:"NAME",width:180},{key:"DESCRIPTION",label:"DESCRIPTION"}]);function de(se){const M=n.devices.index(t(A));return M?.parentOf(se)?.TYPE??M?.get(se)?.TYPE??""}function G(se){u(S,se.sender,!0),u(E,se.receiver,!0),u(k,!0)}function re(se,M){u(f,{sender:se.SENDER,receiver:se.RECEIVER},!0),u(o,M.clientX,!0),u(l,M.clientY,!0),u(i,!0)}const le=c(()=>[{id:"edit",label:s("Edit link")},{id:"short",label:s("Activate short"),disabled:!t(T)},{id:"long",label:s("Activate long"),disabled:!t(T)},{id:"sep",separator:!0},{id:"delete",label:s("Delete link"),danger:!0}]);async function Z(se){const M=t(f);if(M)switch(se){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=QT(),j=Ie(te),U=w(j),me=w(U);{const se=O=>{var W=YT(),ce=Ie(W);{let F=c(()=>s("Add link")),R=c(()=>!t(z)),L=c(()=>s("No channel of this interface can be the sender of a link"));Dh(ce,{get caption(){return t(F)},icon:"+",get disabled(){return t(R)},get reason(){return t(L)},testId:"links-add",onclick:()=>u(g,!0)})}var he=d(ce,2);{let F=c(()=>s("Edit link")),R=c(()=>t(ne)===void 0),L=c(()=>s("Select one link"));Ct(he,{get title(){return t(F)},icon:"⚙",get disabled(){return t(R)},get reason(){return t(L)},testId:"links-edit",onclick:()=>t(ne)&&G(t(ne))})}var ge=d(he,2);{var ye=F=>{var R=ku(),L=Ie(R);{let _e=c(()=>s("Activate short")),Ne=c(()=>t(ne)===void 0),Fe=c(()=>s("Select one link"));Ct(L,{get title(){return t(_e)},icon:"▸",get disabled(){return t(Ne)},get reason(){return t(Fe)},testId:"links-play-short",onclick:()=>t(ne)&&void n.links.activate(t(A),t(ne).receiver,t(ne).sender,!1)})}var ee=d(L,2);{let _e=c(()=>s("Activate long")),Ne=c(()=>t(ne)===void 0),Fe=c(()=>s("Select one link"));Ct(ee,{get title(){return t(_e)},icon:"▸▸",get disabled(){return t(Ne)},get reason(){return t(Fe)},testId:"links-play-long",onclick:()=>t(ne)&&void n.links.activate(t(A),t(ne).receiver,t(ne).sender,!0)})}v(F,R)};$(ge,F=>{t(T)&&F(ye)})}var ae=d(ge,2);{let F=c(()=>s("Delete link")),R=c(()=>t(Y).length===0),L=c(()=>s("Please choose one or more links"));Ct(ae,{get title(){return t(F)},icon:"🗑",get disabled(){return t(R)},get reason(){return t(L)},testId:"links-delete",onclick:()=>u(b,!0)})}var V=d(ae,2);{let F=c(()=>s("Refresh"));Ct(V,{get title(){return t(F)},icon:"⟳",testId:"links-refresh",onclick:()=>{n.links.load(t(A))}})}v(O,W)},M=O=>{var W=ku(),ce=Ie(W);{var he=ae=>{var V=qT(),F=m(V);y(R=>{I(V,"title",R),h(F,`${t(p)??""} ✕`)},[()=>s("Filter")]),J("click",V,()=>u(p,"")),v(ae,V)};$(ce,ae=>{t(p)!==""&&ae(he)})}var ge=d(ce,2);{var ye=ae=>{var V=$T(),F=m(V,!0);y(R=>h(F,R),[()=>s("{count} defective links",{},t(C))]),v(ae,V)};$(ge,ae=>{t(C)>0&&ae(ye)})}v(O,W)},ue=(O,W=zn,ce=zn)=>{var he=wt(),ge=Ie(he);{var ye=R=>{{let L=c(()=>de(W().SENDER)),ee=c(()=>n.host.deviceImageUrl(de(W().SENDER)));fi(R,{get deviceType(){return t(L)},get src(){return t(ee)}})}},ae=R=>{{let L=c(()=>de(W().RECEIVER)),ee=c(()=>n.host.deviceImageUrl(de(W().RECEIVER)));fi(R,{get deviceType(){return t(L)},get src(){return t(ee)}})}},V=R=>{const L=c(()=>Al(W().FLAGS));var ee=wt(),_e=Ie(ee);{var Ne=Fe=>{var We=XT();y((tt,rt)=>{I(We,"aria-label",tt),I(We,"title",rt)},[()=>s("Defective link"),()=>`${t(L).senderBroken?"SENDER_BROKEN ":""}${t(L).receiverBroken?"RECEIVER_BROKEN":""}`.trim()]),v(Fe,We)};$(_e,Fe=>{t(L).broken&&Fe(Ne)})}v(R,ee)},F=R=>{var L=Zn();y(ee=>h(L,ee),[()=>ce().value?ce().value(W())??"":W()[ce().key]??""]),v(R,L)};$(ge,R=>{ce().key==="senderIcon"?R(ye):ce().key==="receiverIcon"?R(ae,1):ce().key==="FLAGS"?R(V,2):R(F,-1)})}v(O,he)};let ve=c(()=>s("Links")),be=c(()=>s("Filter")),Ee=c(()=>s("No data")),q=c(()=>s("Links")),Q=c(()=>s("{count} links",{},t(D).length));zs(me,{get rows(){return t(D)},get scope(){return t(A)},get columns(){return t(ie)},getId:O=>`${O.SENDER}->${O.RECEIVER}`,get caption(){return t(ve)},get filterLabel(){return t(be)},get emptyText(){return t(Ee)},onactivate:O=>G({sender:O.SENDER,receiver:O.RECEIVER}),onrowcontextmenu:re,get toolbarLabel(){return t(q)},get countText(){return t(Q)},tableId:"links",testId:"links-table",get selected(){return t(a)},set selected(O){u(a,O,!0)},get filter(){return t(p)},set filter(O){u(p,O,!0)},toolbar:se,status:M,cell:ue,$$slots:{toolbar:!0,status:!0,cell:!0}})}var ke=d(j,2);{let se=c(()=>s("Links"));Dd(ke,{get items(){return t(le)},get x(){return t(o)},get y(){return t(l)},get label(){return t(se)},testId:"links-menu",onselect:M=>{Z(M)},get open(){return t(i)},set open(M){u(i,M,!0)}})}var fe=d(ke,2);Mh(fe,{onedit:se=>G(se),get open(){return t(g)},set open(se){u(g,se,!0)}});var Re=d(fe,2);KT(Re,{get links(){return t(Y)},get open(){return t(b)},set open(se){u(b,se,!0)}});var xe=d(Re,2);jh(xe,{get sender(){return t(S)},get receiver(){return t(E)},get open(){return t(k)},set open(se){u(k,se,!0)}}),v(r,te),mt()}kt(["click"]);function Kh(r){let e=0;const n=new Set;for(const s of r){const a=Rd(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 Yh(r,e,n){const s=r[n];return s?Ei(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,...Kh(vo(e,a.path))})):[]}function JT(r,e,n){return Object.entries(r).map(([s,a])=>{const i=Yh(r,e,s);return{id:s,kind:"enum",enumId:s,name:yh(s,a,n),depth:0,hasChildren:i.length>0,...Kh(vo(e,s)),nodes:i}})}function eR(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 tR(r,e=14){return Math.max(0,r-1)*e}function nR(r,e){const n=e.split("/")[0]??"";return Ch(r,n).filter(s=>fS(e,s.path))}function rR(r,e){return vo(r,e.kind==="enum"?e.enumId:e.path??"")}function wu(r,e,n){return{...r,en:e,[n]:e}}var sR=_('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button hmm-meta-delete-danger svelte-1af2i6v"> </button>',1),aR=_('<p class="hmm-meta-delete-empty svelte-1af2i6v"> </p>'),iR=_("<li> </li>"),oR=_('<p class="hmm-meta-delete-title svelte-1af2i6v"> </p> <ul class="hmm-meta-delete-members svelte-1af2i6v"></ul>',1),lR=_('<p class="hmm-meta-delete-subject svelte-1af2i6v"> </p> <!>',1);function dR(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=sR(),b=Ie(g),k=m(b,!0),S=d(b,2),E=m(S,!0);y((A,x)=>{h(k,A),S.disabled=t(i),I(S,"data-testid",`${a()}-apply`),h(E,x)},[()=>e.t("Cancel"),()=>e.members.length===0?e.t("Delete"):e.t("Delete and detach")]),J("click",b,()=>n(!1)),J("click",S,()=>{o()}),v(p,g)};let f=c(()=>`${a()}-dialog`);En(r,{get title(){return e.title},width:"480px",get testId(){return t(f)},get open(){return n()},set open(p){n(p)},buttons:l,children:(p,g)=>{var b=lR(),k=Ie(b),S=m(k,!0),E=d(k,2);{var A=D=>{var C=aR(),T=m(C,!0);y(P=>h(T,P),[()=>e.t("Nothing is assigned here")]),v(D,C)},x=D=>{var C=oR(),T=Ie(C),P=m(T,!0),z=d(T,2);je(z,20,()=>e.members,Y=>Y,(Y,ne)=>{var ie=iR(),de=m(ie,!0);y(G=>h(de,G),[()=>s()===void 0?ne:s()(ne)]),v(Y,ie)}),y(Y=>{h(P,Y),I(z,"data-testid",`${a()}-members`)},[()=>e.t("Still assigned here - the assignments are removed with the node:")]),v(D,C)};$(E,D=>{e.members.length===0?D(A):D(x,-1)})}y(()=>h(S,e.subject)),v(p,b)},$$slots:{buttons:!0,default:!0}})}mt()}kt(["click"]);var cR=_('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button"> </button>',1),uR=_("<option> </option>"),fR=_('<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 hR(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=cR(),k=Ie(b),S=m(k,!0),E=d(k,2),A=m(E,!0);y((x,D)=>{h(S,x),E.disabled=t(o),I(E,"data-testid",`${a()}-apply`),h(A,D)},[()=>e.t("Cancel"),()=>e.t("Apply")]),J("click",k,()=>n(!1)),J("click",E,()=>{l()}),v(g,b)};let p=c(()=>`${a()}-dialog`);En(r,{get title(){return e.title},width:"440px",get testId(){return t(p)},get open(){return n()},set open(g){n(g)},buttons:f,children:(g,b)=>{var k=fR(),S=Ie(k),E=m(S,!0),A=d(S,2),x=w(A),D=m(x,!0),C=d(x,2),T=w(C),P=m(T,!0);T.value=T.__value="";var z=d(T);je(z,17,()=>e.targets,Y=>Y.path,(Y,ne)=>{var ie=uR(),de=m(ie,!0),G={};y(re=>{h(de,re),G!==(G=t(ne).path)&&(ie.value=(ie.__value=G)??"")},[()=>jl(t(ne)," ")]),v(Y,ie)}),Qt(C),y((Y,ne,ie,de)=>{h(E,e.subject),h(D,Y),I(C,"size",ne),I(C,"aria-label",ie),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),Y=>u(i,Y)),v(g,k)},$$slots:{buttons:!0,default:!0}})}mt()}kt(["click"]);var mR=_('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button"> </button>',1),vR=_('<label class="hmm-meta-name-row svelte-ue9nlv"><span> </span> <input class="hmm-input hmm-meta-name-input svelte-ue9nlv"/></label>');function pR(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=mR(),S=Ie(k),E=m(S,!0),A=d(S,2),x=m(A,!0);y((D,C,T)=>{h(E,D),A.disabled=C,I(A,"data-testid",`${a()}-apply`),h(x,T)},[()=>e.t("Cancel"),()=>t(o)||t(i).trim()==="",()=>e.t("Apply")]),J("click",S,()=>n(!1)),J("click",A,()=>{f()}),v(b,k)};let g=c(()=>`${a()}-dialog`);En(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 S=vR(),E=w(S),A=m(E,!0),x=d(E,2);_n(x,D=>u(l,D),()=>t(l)),y(()=>{h(A,e.label),I(x,"aria-label",e.label),I(x,"data-testid",`${a()}-input`)}),J("keydown",x,D=>{D.key==="Enter"&&(D.preventDefault(),f())}),An(x,()=>t(i),D=>u(i,D)),v(b,S)},$$slots:{buttons:!0,default:!0}})}mt()}kt(["click","keydown"]);var gR=_("<!> <!> <!> <!> <!> <!> <!>",1),bR=_("<span> </span>"),_R=_('<span class="hmm-meta-path svelte-147hcfo"> </span>'),yR=_('<div class="hmm-page svelte-147hcfo"><div class="hmm-page-grid svelte-147hcfo"><!></div></div> <!> <!> <!>',1);function ER(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([])),S=N(Be([])),E=N(!1),A=N(!1),x=N("add"),D=N(""),C=N(""),T=N(""),P=N(!1),z=N(!1),Y=N(void 0);const ne=c(()=>n()===void 0),ie=c(()=>!s()),de=c(()=>n()===void 0?JT(e.enums,e.objects,o()):Yh(e.enums,e.objects,n())),G=c(()=>eR(t(de))),re=c(()=>t(k).length===1?t(G).get(t(k)[0]??""):void 0),le=c(()=>t(re)?.kind==="node"?t(re):void 0),Z=[];lt(()=>{if(!t(ne))return;const R=Object.keys(e.enums).filter(L=>!Z.includes(L));R.length>0&&(Z.push(...R),u(S,[...t(S),...R],!0))}),lt(()=>{t(k).some(R=>!t(G).has(R))&&u(k,t(k).filter(R=>t(G).has(R)),!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(E)),U=c(()=>n()??t(re)?.enumId),me=c(()=>t(j)&&t(U)!==void 0),ke=c(()=>t(j)&&t(ne)?e.t("Select a taxonomy or a node"):t(te)),fe=c(()=>t(j)?e.t("Select a node"):t(te)),Re=c(()=>[{key:"name",label:e.t("Name"),width:240,sortable:!t(ne),value:R=>R.name},{key:"devices",label:e.t("Devices"),width:96,align:"right",filterable:!1,sortable:!t(ne),value:R=>R.devices===0?"":R.devices},{key:"channels",label:e.t("Channels"),width:96,align:"right",filterable:!1,sortable:!t(ne),value:R=>R.channels===0?"":R.channels},{key:"path",label:e.t("Path"),width:220,mono:!0,sortable:!t(ne),value:R=>R.path??R.enumId}]);function xe(R){return R.nodes??[]}function se(R,L){switch(u(x,R,!0),u(Y,L,!0),R){case"enum":u(D,e.t("New taxonomy"),!0),u(C,e.t("Name"),!0),u(T,"");break;case"add":u(D,e.t("Add"),!0),u(C,e.t("Name"),!0),u(T,"");break;case"add-below":u(D,e.t("Add below"),!0),u(C,`${e.t("Add below")}: ${L?.name??""}`),u(T,"");break;case"rename":u(D,e.t("Rename"),!0),u(C,e.t("New name"),!0),u(T,L?.name??"",!0);break}u(A,!0)}async function M(R){u(E,!0);try{switch(t(x)){case"enum":return await e.actions.createEnum(Eh(R,Object.keys(e.enums)),wu(void 0,R,o()));case"add":return t(U)===void 0?!1:await e.actions.createNode(t(U),void 0,R)!==void 0;case"add-below":{const L=t(Y);return L?.path===void 0?!1:await e.actions.createNode(L.enumId,L.path,R)!==void 0}case"rename":{const L=t(Y);return L===void 0?!1:L.kind==="enum"?await e.actions.renameEnum(L.enumId,wu(e.enums[L.enumId]?.name,R,o())):await e.actions.renameNode(L.path??"",R)}}}finally{u(E,!1)}}function ue(R){R?.path!==void 0&&(u(Y,R,!0),u(P,!0))}async function ve(R){const L=t(Y);if(L?.path===void 0)return!1;u(E,!0);try{return await e.actions.moveNode(L.path,R)}finally{u(E,!1)}}function be(R){R!==void 0&&(u(Y,R,!0),u(z,!0))}async function Ee(R){const L=t(Y);if(L===void 0)return!1;u(E,!0);try{return L.kind==="enum"?await e.actions.deleteEnum(L.enumId,R):await e.actions.deleteNode(L.path??"",R)}finally{u(E,!1)}}async function q(){u(E,!0),await e.actions.refresh(),u(E,!1)}function Q(R){t(j)&&se("rename",R)}const O=c(()=>t(Y)?.path===void 0?void 0:t(Y)),W=c(()=>t(Y)===void 0?[]:rR(e.objects,t(Y)));var ce=yR(),he=Ie(ce),ge=w(he),ye=w(ge);{const R=Te=>{var K=gR(),H=Ie(K);{var Ce=Xe=>{{let ze=c(()=>e.t("New taxonomy")),Ze=c(()=>!t(j));Ct(Xe,{get title(){return t(ze)},icon:"⊞",get disabled(){return t(Ze)},get reason(){return t(te)},testId:"meta-new-enum",onclick:()=>se("enum",void 0)})}};$(H,Xe=>{t(ne)&&Xe(Ce)})}var Oe=d(H,2);{let Xe=c(()=>e.t("Add")),ze=c(()=>!t(me));Ct(Oe,{get title(){return t(Xe)},icon:"+",get disabled(){return t(ze)},get reason(){return t(ke)},testId:"meta-add",onclick:()=>se("add",t(re))})}var Ke=d(Oe,2);{var pe=Xe=>{{let ze=c(()=>e.t("Add below")),Ze=c(()=>!t(j)||t(le)===void 0);Ct(Xe,{get title(){return t(ze)},icon:"⊕",get disabled(){return t(Ze)},get reason(){return t(fe)},testId:"meta-add-below",onclick:()=>se("add-below",t(le))})}};$(Ke,Xe=>{t(ie)&&Xe(pe)})}var De=d(Ke,2);{let Xe=c(()=>e.t("Rename")),ze=c(()=>!t(j)||t(re)===void 0);Ct(De,{get title(){return t(Xe)},icon:"✎",get disabled(){return t(ze)},get reason(){return t(te)},testId:"meta-rename",onclick:()=>se("rename",t(re))})}var Pe=d(De,2);{var Ge=Xe=>{{let ze=c(()=>e.t("Move")),Ze=c(()=>!t(j)||t(le)===void 0);Ct(Xe,{get title(){return t(ze)},icon:"⤴",get disabled(){return t(Ze)},get reason(){return t(fe)},testId:"meta-move",onclick:()=>ue(t(le))})}};$(Pe,Xe=>{t(ie)&&Xe(Ge)})}var Le=d(Pe,2);{let Xe=c(()=>e.t("Delete")),ze=c(()=>!t(j)||t(re)===void 0);Ct(Le,{get title(){return t(Xe)},icon:"🗑",get disabled(){return t(ze)},get reason(){return t(te)},testId:"meta-delete",onclick:()=>be(t(re))})}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(E)},testId:"meta-refresh",onclick:()=>{q()}})}v(Te,K)},L=(Te,K=zn,H=zn)=>{var Ce=wt(),Oe=Ie(Ce);{var Ke=Pe=>{var Ge=bR();let Le,Ye;var Xe=m(Ge,!0);y(ze=>{Le=St(Ge,1,"hmm-meta-name svelte-147hcfo",null,Le,{"hmm-meta-name-enum":K().kind==="enum"}),I(Ge,"data-depth",K().depth),Ye=Fn(Ge,"",Ye,{"padding-left":ze}),h(Xe,K().name)},[()=>`${String(tR(K().depth))}px`]),v(Pe,Ge)},pe=Pe=>{var Ge=_R(),Le=m(Ge,!0);y(()=>h(Le,K().path??K().enumId)),v(Pe,Ge)},De=Pe=>{var Ge=Zn();y(Le=>h(Ge,Le),[()=>H().value?H().value(K())??"":""]),v(Pe,Ge)};$(Oe,Pe=>{H().key==="name"?Pe(Ke):H().key==="path"?Pe(pe,1):Pe(De,-1)})}v(Te,Ce)};let ee=c(()=>t(ne)?xe:void 0),_e=c(()=>n()??"metadata"),Ne=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")),tt=c(()=>e.t("No row matches the filter")),rt=c(()=>e.t("Clear filter")),we=c(()=>p()===void 0?void 0:p()(t(de).length));zs(ye,{get rows(){return t(de)},get columns(){return t(Re)},getId:Te=>Te.id,get subRows(){return t(ee)},get scope(){return t(_e)},get caption(){return t(Ne)},get filterLabel(){return t(Fe)},get emptyText(){return t(We)},get noMatchText(){return t(tt)},get clearFilterLabel(){return t(rt)},showingText:(Te,K)=>e.t("Showing {shown} of {total}",{shown:Te,total:K}),get countText(){return t(we)},onactivate:Q,get tableId(){return g()},get testId(){return b()},get selected(){return t(k)},set selected(Te){u(k,Te,!0)},get expanded(){return t(S)},set expanded(Te){u(S,Te,!0)},toolbar:R,cell:L,$$slots:{toolbar:!0,cell:!0}})}var ae=d(he,2);pR(ae,{get title(){return t(D)},get label(){return t(C)},get initial(){return t(T)},get t(){return e.t},onapply:M,testId:"meta-name",get open(){return t(A)},set open(R){u(A,R,!0)}});var V=d(ae,2);{let R=c(()=>e.t("Move")),L=c(()=>t(O)?.name??""),ee=c(()=>t(O)?.path===void 0?[]:nR(e.enums,t(O).path)),_e=c(()=>t(O)?.path===void 0?"":q_(t(O).path)??"");hR(V,{get title(){return t(R)},get subject(){return t(L)},get targets(){return t(ee)},get current(){return t(_e)},get t(){return e.t},onapply:ve,testId:"meta-move",get open(){return t(P)},set open(Ne){u(P,Ne,!0)}})}var F=d(V,2);{let R=c(()=>e.t("Delete")),L=c(()=>t(Y)?.name??"");dR(F,{get title(){return t(R)},get subject(){return t(L)},get members(){return t(W)},get labelOf(){return l()},get t(){return e.t},onapply:Ee,testId:"meta-delete",get open(){return t(z)},set open(ee){u(z,ee,!0)}})}v(r,ce),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=Rd(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()}`);ER(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 SR=_('<span class="hmm-rssi hmm-rssi-unknown svelte-1wk3r6l" data-rssi="unknown">—</span>'),kR=_("<span></span>"),wR=_('<span role="img"><span class="hmm-rssi-value"> </span><span class="hmm-rssi-bars svelte-1wk3r6l" aria-hidden="true"></span></span>');function Ca(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(()=>F_(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 S=SR();y(()=>I(S,"data-testid",a())),v(k,S)},b=k=>{var S=wR(),E=w(S),A=m(E,!0),x=d(E);je(x,20,()=>l,D=>D,(D,C)=>{var T=kR();let P;y(()=>P=St(T,1,"hmm-rssi-bar svelte-1wk3r6l",null,P,{"hmm-rssi-bar-off":C>t(i).bars})),v(D,T)}),y(()=>{St(S,1,`hmm-rssi hmm-rssi-${t(i).step??""}`,"svelte-1wk3r6l"),I(S,"title",t(o)),I(S,"aria-label",t(o)),I(S,"data-rssi",t(i).step),I(S,"data-bars",t(i).bars),I(S,"data-testid",a()),h(A,n())}),v(k,S)};$(p,k=>{t(i)===void 0?k(g):k(b,-1)})}v(r,f),mt()}var AR=_('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="best-receiver-confirm"> </button>',1),TR=_('<p class="hmm-best-receiver-empty svelte-1gd5w9r" data-testid="best-receiver-empty"> </p>'),RR=_('<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>'),xR=_('<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>'),IR=_('<p class="hmm-best-receiver-progress svelte-1gd5w9r" data-testid="best-receiver-progress"> </p>'),DR=_('<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 NR(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))),S=c(()=>t(k).filter(P=>P.verdict==="switch"||P.verdict==="marginal"||P.verdict==="unheard")),E=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(S).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 z=t(b).find(Y=>Y.ADDRESS===P);return z?Ia(z):P}function C(P){const z=Number.parseInt(P,10);u(i,Number.isFinite(z)?Math.max(0,z):xl,!0),u(o,{},!0)}lt(()=>{n()&&(u(o,{},!0),u(f,{done:0,total:0},!0))});async function T(){const P=t(A).filter(Y=>Y.best!==void 0);u(l,!0),u(f,{done:0,total:P.length},!0);let z=0;for(const Y of P)await s.radio.setBidcosInterface(t(p),Y.address,Y.best??"",!1)||(z+=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),z===0&&n(!1)}{const P=Y=>{var ne=AR(),ie=Ie(ne),de=m(ie,!0),G=d(ie,2),re=m(G,!0);y((le,Z)=>{ie.disabled=t(l),h(de,le),G.disabled=t(l)||t(A).length===0,h(re,Z)},[()=>a("Cancel"),()=>a("Assign ({count})",{count:t(A).length})]),J("click",ie,()=>n(!1)),J("click",G,()=>{T()}),v(Y,ne)};let z=c(()=>a("Best receiver"));En(r,{get title(){return t(z)},width:"800px",testId:"best-receiver-dialog",get open(){return n()},set open(Y){n(Y)},buttons:P,children:(Y,ne)=>{var ie=DR(),de=Ie(ie),G=m(de,!0),re=d(de,2),le=w(re),Z=w(le),te=m(Z,!0),j=d(Z,2),U=d(le,2),me=m(U,!0),ke=d(re,2);{var fe=ve=>{var be=TR(),Ee=m(be,!0);y(q=>h(Ee,q),[()=>a("Every device is on the receiver that hears it best")]),v(ve,be)},Re=ve=>{var be=xR(),Ee=w(be),q=w(Ee),Q=w(q),O=d(w(Q)),W=m(O,!0),ce=d(O,2),he=m(ce,!0),ge=d(ce,2),ye=m(ge,!0),ae=d(ge,2),V=m(ae,!0),F=d(q);je(F,21,()=>t(S),R=>R.address,(R,L)=>{var ee=RR(),_e=w(ee),Ne=w(_e),Fe=d(_e),We=m(Fe,!0),tt=d(Fe),rt=m(tt,!0),we=d(tt),Te=m(we,!0),K=d(we),H=w(K);Ca(H,{get value(){return t(L).configuredTx},labelOf:ze=>a(ze.label)});var Ce=d(K),Oe=m(Ce,!0),Ke=d(Ce),pe=w(Ke);Ca(pe,{get value(){return t(L).bestTx},labelOf:ze=>a(ze.label)});var De=d(Ke),Pe=m(De,!0),Ge=d(De),Le=w(Ge);{var Ye=ze=>{var Ze=Zn();y(dt=>h(Ze,dt),[()=>a("Below the margin")]),v(ze,Ze)},Xe=ze=>{var Ze=Zn();y(dt=>h(Ze,dt),[()=>a("Not heard by the configured receiver")]),v(ze,Ze)};$(Le,ze=>{t(L).verdict==="marginal"?ze(Ye):t(L).verdict==="unheard"&&ze(Xe,1)})}y((ze,Ze,dt,pt,gt)=>{I(ee,"data-testid",`best-receiver-row-${t(L).address}`),I(ee,"data-verdict",t(L).verdict),Rr(Ne,ze),Ne.disabled=t(l),I(Ne,"aria-label",t(L).address),I(Ne,"data-testid",`best-receiver-check-${t(L).address}`),h(We,Ze),h(rt,t(L).address),h(Te,dt),h(Oe,pt),I(De,"data-testid",`best-receiver-gain-${t(L).address}`),h(Pe,gt)},[()=>x(t(L)),()=>s.nameOf(t(L).address),()=>D(t(L).configured),()=>D(t(L).best),()=>t(L).gain===void 0?"—":`+${String(t(L).gain)} dB`]),J("change",Ne,ze=>{u(o,{...t(o),[t(L).address]:ze.currentTarget.checked},!0)}),v(R,ee)}),y((R,L,ee,_e)=>{h(W,R),h(he,L),h(ye,ee),h(V,_e)},[()=>a("Name"),()=>a("Configured"),()=>a("Proposed"),()=>a("Gain")]),v(ve,be)};$(ke,ve=>{t(S).length===0?ve(fe):ve(Re,-1)})}var xe=d(ke,2),se=m(xe,!0),M=d(xe,2);{var ue=ve=>{var be=IR(),Ee=m(be,!0);y(q=>h(Ee,q),[()=>a("{done} of {total} assigned",t(f))]),v(ve,be)};$(M,ve=>{t(l)&&ve(ue)})}y((ve,be,Ee,q)=>{h(G,ve),h(te,be),rn(j,t(i)),j.disabled=t(l),h(me,Ee),h(se,q)},[()=>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(E))]),J("input",j,ve=>C(ve.currentTarget.value)),v(Y,ie)},$$slots:{buttons:!0,default:!0}})}mt()}kt(["click","input","change"]);var CR=_('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="set-interface-confirm"> </button>',1),PR=_("<option> </option>"),MR=_('<span class="hmm-set-interface-name svelte-1s1hrfj"> </span>'),OR=_('<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>'),LR=_('<p class="hmm-set-interface-best-note svelte-1s1hrfj" data-testid="set-interface-best"> </p>'),FR=_('<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),GR=_('<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 UR(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))),S=c(()=>i.radio.bestGatewayFor(t(g),s())),E=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:bd(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)}En(r,{title:"setBidcosInterface",width:"560px",testId:"set-interface-dialog",get open(){return n()},set open(D){n(D)},buttons:D=>{var C=CR(),T=Ie(C),P=m(T,!0),z=d(T,2),Y=m(z,!0);y((ne,ie)=>{h(P,ne),z.disabled=t(p)||t(l)==="",h(Y,ie)},[()=>o("Cancel"),()=>o("Apply")]),J("click",T,()=>n(!1)),J("click",z,()=>{A()}),v(D,C)},children:(D,C)=>{var T=GR(),P=Ie(T),z=w(P),Y=d(z),ne=m(Y,!0),ie=d(P,2),de=w(ie),G=d(de),re=m(G,!0),le=d(ie,2),Z=w(le),te=m(Z,!0),j=d(Z,2);je(j,21,()=>t(k),Re=>Re.ADDRESS,(Re,xe)=>{var se=PR(),M=m(se),ue={};y(()=>{h(M,`${t(xe).ADDRESS??""}
|
|
20
|
-
${t(xe).DESCRIPTION??t(xe).TYPE??""}`),ue!==(ue=t(xe).ADDRESS)&&(se.value=(se.__value=ue)??"")}),v(Re,se)}),Qt(j);var U=d(le,2),me=d(w(U),2),ke=d(U,2);{var fe=Re=>{var xe=FR(),se=Ie(xe),M=w(se),ue=w(M),ve=d(w(ue)),be=m(ve,!0),Ee=d(M);je(Ee,21,()=>t(k),O=>O.ADDRESS,(O,W)=>{const ce=c(()=>i.radio.pair(t(g),s(),t(W).ADDRESS));var he=OR();let ge;var ye=w(he),ae=m(ye,!0),V=d(ye),F=w(V),R=m(F,!0),L=d(F,2);{var ee=rt=>{var we=MR(),Te=m(we,!0);y(K=>h(Te,K),[()=>Ia(t(W))]),v(rt,we)},_e=c(()=>Ia(t(W))!==t(W).ADDRESS);$(L,rt=>{t(_e)&&rt(ee)})}var Ne=d(V),Fe=w(Ne);{let rt=c(()=>t(ce)?.rx);Ca(Fe,{get value(){return t(rt)},labelOf:we=>o(we.label)})}var We=d(Ne),tt=w(We);{let rt=c(()=>t(ce)?.tx),we=c(()=>`set-interface-tx-${t(W).ADDRESS}`);Ca(tt,{get value(){return t(rt)},labelOf:Te=>o(Te.label),get testId(){return t(we)}})}y(rt=>{I(he,"data-testid",`set-interface-row-${t(W).ADDRESS}`),I(he,"aria-current",t(E)===t(W).ADDRESS?"true":void 0),ge=St(he,1,"svelte-1s1hrfj",null,ge,{"hmm-set-interface-configured":t(E)===t(W).ADDRESS}),I(ye,"title",rt),h(ae,t(E)===t(W).ADDRESS?"◉":""),h(R,t(W).ADDRESS)},[()=>t(E)===t(W).ADDRESS?o("Configured"):void 0]),v(O,he)});var q=d(se,2);{var Q=O=>{var W=LR(),ce=m(W,!0);y(he=>h(ce,he),[()=>o("Heard best by {address}",{address:t(S).address})]),v(O,W)};$(q,O=>{t(S)&&O(Q)})}y(O=>h(be,O),[()=>o("Interface")]),v(Re,xe)};$(ke,Re=>{t(k).length>0&&Re(fe)})}y((Re,xe,se)=>{h(z,`${Re??""} `),h(ne,s()),h(de,`${xe??""}: `),h(re,t(E)===""?"—":t(E)),h(te,se)},[()=>i.nameOf(s()),()=>o("Configured"),()=>o("Interface")]),br(j,()=>t(l),Re=>u(l,Re)),mr(me,()=>t(f),Re=>u(f,Re)),v(D,T)},$$slots:{buttons:!0,default:!0}}),mt()}kt(["click"]);var BR=_("<!> <!>",1),VR=_("<!> <!> <!>",1),HR=_('<button type="button"> </button>'),zR=_('<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 jR(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))),S=c(()=>n.interfaces.typeOf(t(b)).startsWith("BidCos"));function E(U,me=""){u(p,U,!0),u(g,me,!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(S)},{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(S),value:U=>bd(U)?"✔":""},{key:"unreach",label:s("Unreach"),width:90,align:"right",filterable:!1,value:U=>{const me=n.unreach.countOf(t(b),U.ADDRESS);return me===0?"":me}},...t(k).flatMap(U=>[{key:`rx:${U.ADDRESS}`,label:"← dBm",width:90,align:"right",filterable:!1,value:me=>n.radio.pair(t(b),me.ADDRESS,U.ADDRESS)?.rx??""},{key:`tx:${U.ADDRESS}`,label:"→ dBm",width:90,align:"right",filterable:!1,value:me=>n.radio.pair(t(b),me.ADDRESS,U.ADDRESS)?.tx??""},{key:`set:${U.ADDRESS}`,label:"",hidden:!t(S),width:fE,fixed:!0,align:"center",sortable:!1,filterable:!1,value:me=>me.INTERFACE===U.ADDRESS?"◉":""}])]),T=c(()=>t(k).map(U=>({key:U.ADDRESS,label:U.ADDRESS,sublabel:Ia(U)===U.ADDRESS?void 0:`(${Ia(U)})`,columns:t(S)?[`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 z(U){const me=n.devices.index(t(b));return n.radio.peersOf(t(b),U.ADDRESS).map(ke=>me?.get(ke)??{ADDRESS:ke,TYPE:"",PARENT:U.ADDRESS}).map(ke=>({...ke,PARENT:U.ADDRESS}))}function Y(U){return n.devices.index(t(b))?.get(U)?.ADDRESS??U}async function ne(){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 ie=zR(),de=Ie(ie),G=w(de),re=w(G);{let U=c(()=>s("Interfaces")),me=c(()=>s("Filter")),ke=c(()=>s("No data"));zs(re,{get rows(){return t(k)},get columns(){return D},getId:fe=>fe.ADDRESS,height:110,columnFilterRow:!1,get caption(){return t(U)},get filterLabel(){return t(me)},get emptyText(){return t(ke)},tableId:"radio-interfaces",testId:"radio-gateways",get selected(){return t(a)},set selected(fe){u(a,fe,!0)}})}var le=d(G,2),Z=w(le);{const U=ve=>{var be=VR(),Ee=Ie(be);{let W=c(()=>s("Refresh")),ce=c(()=>n.radio.loading||n.devices.isLoading(t(b)));Ct(Ee,{get title(){return t(W)},icon:"⟳",get busy(){return t(ce)},testId:"radio-refresh",onclick:()=>{ne()}})}var q=d(Ee,2);{var Q=W=>{var ce=BR(),he=Ie(ce);{let ye=c(()=>t(x)===""),ae=c(()=>s("Select a device"));Ct(he,{title:"setBidcosInterface",icon:"⇄",get disabled(){return t(ye)},get reason(){return t(ae)},testId:"radio-set-interface",onclick:()=>E(t(x))})}var ge=d(he,2);{let ye=c(()=>s("Assign the best receiver")),ae=c(()=>t(k).length<2),V=c(()=>s("Only one interface"));Ct(ge,{get title(){return t(ye)},icon:"⇶",get disabled(){return t(ae)},get reason(){return t(V)},testId:"radio-best-receivers",onclick:()=>u(f,!0)})}v(W,ce)};$(q,W=>{t(S)&&W(Q)})}var O=d(q,2);{let W=c(()=>s("Reset the unreach counters")),ce=c(()=>n.unreach.of(t(b)).length===0),he=c(()=>s("No data"));Ct(O,{get title(){return t(W)},icon:"⟲",get disabled(){return t(ce)},get reason(){return t(he)},testId:"radio-reset-unreach",onclick:()=>{n.unreach.reset(t(b))}})}v(ve,be)},me=(ve,be=zn,Ee=zn,q=zn)=>{var Q=wt(),O=Ie(Q);{var W=F=>{{let R=c(()=>n.host.deviceImageUrl(be().TYPE));fi(F,{get deviceType(){return be().TYPE},get src(){return t(R)}})}},ce=F=>{const R=c(()=>n.radio.pair(t(b),Y(q().rootId),be().ADDRESS));{let L=c(()=>Ee().key==="rx"?t(R)?.rx:t(R)?.tx),ee=c(()=>`rssi-${q().rootId}-${be().ADDRESS}-${Ee().key}`);Ca(F,{get value(){return t(L)},labelOf:_e=>s(_e.label),get testId(){return t(ee)}})}},he=F=>{const R=c(()=>Ee().key.slice(4)),L=c(()=>be().INTERFACE===t(R));var ee=HR();let _e;var Ne=m(ee,!0);y(Fe=>{_e=St(ee,1,"hmm-receiver-mark svelte-7f5yr6",null,_e,{"hmm-receiver-configured":t(L)}),I(ee,"aria-pressed",t(L)),I(ee,"title",Fe),I(ee,"data-testid",`receiver-${be().ADDRESS}-${t(R)}`),h(Ne,t(L)?"◉":"○")},[()=>t(L)?`${s("Configured")}: ${t(R)}`:s("Use {interface} as receiver",{interface:t(R)})]),J("click",ee,Fe=>{Fe.stopPropagation(),E(be().ADDRESS,t(R))}),v(F,ee)},ge=c(()=>Ee().key.startsWith("set:")&&q().depth===0),ye=F=>{const R=c(()=>Ee().key.slice(3)),L=c(()=>n.radio.pair(t(b),be().ADDRESS,t(R)));{let ee=c(()=>Ee().key.startsWith("rx:")?t(L)?.rx:t(L)?.tx),_e=c(()=>`rssi-${be().ADDRESS}-${t(R)}-${Ee().key.slice(0,2)}`);Ca(F,{get value(){return t(ee)},labelOf:Ne=>s(Ne.label),get testId(){return t(_e)}})}},ae=c(()=>Ee().key.startsWith("rx:")||Ee().key.startsWith("tx:")),V=F=>{var R=Zn();y(L=>h(R,L),[()=>Ee().value?Ee().value(be())??"":be()[Ee().key]??""]),v(F,R)};$(O,F=>{Ee().key==="icon"?F(W):q().depth>0&&(Ee().key==="rx"||Ee().key==="tx")?F(ce,1):t(ge)?F(he,2):t(ae)?F(ye,3):F(V,-1)})}v(ve,Q)};let ke=c(()=>s("RSSI")),fe=c(()=>s("Filter")),Re=c(()=>s("No data")),xe=c(()=>s("No row matches the filter")),se=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(T)},get subColumns(){return t(P)},get scope(){return t(b)},getId:ve=>ve.ADDRESS,subRows:z,get caption(){return t(ke)},get filterLabel(){return t(fe)},get emptyText(){return t(Re)},get noMatchText(){return t(xe)},get clearFilterLabel(){return t(se)},showingText:(ve,be)=>s("Showing {shown} of {total}",{shown:ve,total:be}),onactivate:ve=>E(ve.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(ve){u(i,ve,!0)},get expanded(){return t(o)},set expanded(ve){u(o,ve,!0)},toolbar:U,cell:me,$$slots:{toolbar:!0,cell:!0}})}var te=d(de,2);UR(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);NR(j,{get open(){return t(f)},set open(U){u(f,U,!0)}}),v(r,ie),mt()}kt(["click"]);function WR(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 KR=_('<button type="button" class="hmm-total-button svelte-u6ol56" data-testid="messages-total"> </button>'),YR=_("<!> <!> <!>",1),nl=_("<span> </span>"),qR=_('<button type="button" class="hmm-inline-button svelte-u6ol56"> </button> <span hidden=""> </span>',1),$R=_('<div class="hmm-page svelte-u6ol56"><div class="hmm-page-grid svelte-u6ol56"><!></div></div>');function XR(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))),S=c(()=>WR(n.serviceMessages.messages,t(o),n.interfaces.states.map(G=>G.name))),E=c(()=>t(S).next===void 0?"":s("Also on this box: {list}. Click to switch to {next}.",{list:t(S).others.map(G=>`${G.interfaceName} (${String(G.count)})`).join(", "),next:t(S).next}));function A(G){return`${G.address}/${G.datapoint}`}function x(G,re){return re?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(xa(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 re=n.serviceMessages.valueName(G);if(re===void 0)return to(G.value);const le=n.devices.index(t(o))?.get(G.address)?.TYPE??"";return n.meta.valueLabel(G.datapoint,re,le)}function T(G){const re=n.serviceMessages.valueName(G);return re===void 0?void 0:`${re} (${to(G.value)})`}async function P(G,re){u(i,!0);const le=await n.serviceMessages.suppress(t(o),G.address,G.datapoint,re);u(i,!1),le&&n.notices.push("info",`suppressServiceMessages ${G.address} ${G.datapoint} = ${re?"true":"false"}`)}const z=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=>xa(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 re=Nh(G.datapoint,!t(l));return re===void 0?"":s(re)}},{key:"since",label:s("Since"),width:170,value:G=>Xa(G.since)},...t(f)?[{key:"suppress",label:"",width:Zc,minWidth:Zc,keepMinWidth:!0,sortable:!1,filterable:!1,value:G=>n.serviceMessages.isSuppressed(G)?s("suppressed"):""}]:[]]);async function Y(G){u(i,!0);const re=await n.serviceMessages.acknowledgeMany(G);u(i,!1),n.notices.push("info",s("{count} service messages",{},re))}var ne=$R(),ie=w(ne),de=w(ie);{const G=ke=>{var fe=wt(),Re=Ie(fe);{var xe=se=>{const M=c(()=>t(S).next);ni(se,{get text(){return t(E)},testId:"messages-total-tooltip",children:(ue,ve)=>{var be=KR(),Ee=m(be,!0);y(q=>h(Ee,q),[()=>s("{count} of {total} on this box",{total:t(S).total},t(S).own)]),J("click",be,()=>{n.selectInterface(t(M))}),v(ue,be)},$$slots:{default:!0}})};$(Re,se=>{t(S).next!==void 0&&se(xe)})}v(ke,fe)},re=ke=>{var fe=YR(),Re=Ie(fe);{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),ve=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(ve)},testId:"messages-ack",onclick:()=>{Y(t(k))}})}var se=d(xe,2);{let M=c(()=>s("Acknowledge all service messages")),ue=c(()=>t(i)||t(g).length===0),ve=c(()=>s("Only STICKY_UNREACH and SABOTAGE can be acknowledged"));Ct(se,{get title(){return t(M)},icon:"✔✔",get disabled(){return t(ue)},get reason(){return t(ve)},testId:"messages-ack-all",onclick:()=>{Y(t(g))}})}v(ke,fe)},le=(ke,fe=zn,Re=zn)=>{var xe=wt(),se=Ie(xe);{var M=Q=>{{let O=c(()=>D(fe().address)),W=c(()=>n.host.deviceImageUrl(D(fe().address)));fi(Q,{get deviceType(){return t(O)},get src(){return t(W)}})}},ue=Q=>{var O=nl();let W;var ce=m(O,!0);y((he,ge)=>{W=St(O,1,"hmm-msg-name svelte-u6ol56",null,W,{"hmm-msg-ackable":he,"hmm-msg-rega":fe().source==="rega"}),I(O,"title",ge),I(O,"data-listed-by",fe().source??"interface"),I(O,"data-testid",`message-${fe().address}-${fe().datapoint}`),h(ce,fe().datapoint)},[()=>ao(fe().datapoint),()=>fe().source==="rega"?s("Listed by the CCU only; the interface no longer reports it"):void 0]),v(Q,O)},ve=Q=>{var O=nl(),W=m(O,!0);y((ce,he)=>{I(O,"title",ce),I(O,"data-testid",`message-value-${fe().address}-${fe().datapoint}`),h(W,he)},[()=>T(fe()),()=>C(fe())]),v(Q,O)},be=Q=>{var O=nl(),W=m(O,!0);y((ce,he)=>{I(O,"title",ce),I(O,"data-testid",`message-since-${fe().address}-${fe().datapoint}`),I(O,"data-source",fe().sinceSource??"local"),h(W,he)},[()=>fe().sinceSource==="rega"?s("First reported, from the CCU"):fe().sinceSource==="system"?s("Last changed, from the openccu-lite system"):s("First seen by the Homematic Manager"),()=>Xa(fe().since)]),v(Q,O)},Ee=Q=>{const O=c(()=>n.serviceMessages.isSuppressed(fe())),W=c(()=>x(fe(),t(O))),ce=c(()=>`suppress-help-${fe().address}-${fe().datapoint}`);{let he=c(()=>`suppress-tooltip-${fe().address}-${fe().datapoint}`);ni(Q,{get text(){return t(W)},get testId(){return t(he)},children:(ge,ye)=>{var ae=qR(),V=Ie(ae),F=m(V,!0),R=d(V,2),L=m(R,!0);y(ee=>{V.disabled=t(i),I(V,"aria-describedby",t(ce)),I(V,"data-testid",`suppress-${fe().address}-${fe().datapoint}`),h(F,ee),I(R,"id",t(ce)),h(L,t(W))},[()=>t(O)?s("Unsuppress"):s("Suppress")]),J("click",V,ee=>{ee.stopPropagation(),P(fe(),!t(O))}),v(ge,ae)},$$slots:{default:!0}})}},q=Q=>{var O=Zn();y(W=>h(O,W),[()=>Re().value?Re().value(fe())??"":fe()[Re().key]??""]),v(Q,O)};$(se,Q=>{Re().key==="icon"?Q(M):Re().key==="datapoint"?Q(ue,1):Re().key==="value"?Q(ve,2):Re().key==="since"?Q(be,3):Re().key==="suppress"?Q(Ee,4):Q(q,-1)})}v(ke,xe)};let Z=c(()=>s("Service messages")),te=c(()=>s("Filter")),j=c(()=>s("No data")),U=c(()=>s("Service messages")),me=c(()=>t(S).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(z)},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(me)},tableId:"messages",testId:"messages-table",get selected(){return t(a)},set selected(ke){u(a,ke,!0)},status:G,toolbar:re,cell:le,$$slots:{status:!0,toolbar:!0,cell:!0}})}v(r,ne),mt()}kt(["click"]);var QR=_('<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),ZR=_('<button type="button" class="hmm-button hmm-header-changes" data-testid="change-set-open"> </button>'),JR=_('<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>'),ex=_('<p class="hmm-empty svelte-1n46o8q"> </p>'),tx=_('<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 nx(r,e){ht(e,!0);const n="https://github.com/hobbyquaker/homematic-manager",s=`${n}/releases`;let a=B(e,"stores",7);Vg(gr(()=>a())),gp({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:md,label:ue,mark:Hp(M),title:zp(M,{label:ue,reachable:t(o)("Reachable"),unreachable:t(o)("Unreachable"),readOnly:t(o)("Read-only"),writable:t(o)("Writable"),detail:ve=>t(o)("revision {revision}, {count} objects",{revision:ve.revision,count:ve.objects}),certificate:ve=>t(o)("The certificate of {url} is not trusted ({code})",{url:ve.url,code:ve.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)}:{}}))),S=c(()=>Object.fromEntries(a().interfaces.states.map(M=>{const ue=a().devices.index(M.name),ve=a().radio.gateways(M.name).map(be=>be.DUTY_CYCLE).filter(be=>typeof be=="number");return[M.name,{...ue===void 0?{}:{devices:ue.devices().length},...ve.length===0?{}:{dutyCycle:Math.max(...ve)}}]})));lt(()=>{document.documentElement.lang=a().i18n.language});const E=c(()=>a().shell.theme??t(l).theme);lt(()=>{const M=document.documentElement;t(E)==="system"?M.removeAttribute("data-theme"):M.setAttribute("data-theme",t(E)),a().host.setTheme(t(E))}),lt(()=>a().host.onMenuAction(()=>{t(l).configDialogOpen=!0}));var A=tx(),x=w(A),D=w(x);{let M=c(()=>t(o)("Select an interface")),ue=c(()=>t(o)("Interfaces")),ve=c(()=>t(o)("Connected")),be=c(()=>t(o)("Not connected")),Ee=c(()=>t(o)("Not present")),q=c(()=>t(o)("Not answering")),Q=c(()=>t(o)("Retry now")),O=c(()=>t(o)("Subscribing")),W=c(()=>t(o)("Waiting")),ce=c(()=>t(o)("Reconnecting")),he=c(()=>t(o)("All interfaces are connected")),ge=c(()=>t(o)("Not every interface is connected")),ye=c(()=>t(o)("Port")),ae=c(()=>t(l).config?.publishCallbackPorts===!0),V=c(()=>t(o)("Publish this port unchanged")),F=c(()=>t(o)("Use automatic"));Up(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(S)},get label(){return t(M)},get listLabel(){return t(ue)},get connectedText(){return t(ve)},get notConnectedText(){return t(be)},get notPresentText(){return t(Ee)},get notAnsweringText(){return t(q)},get retryText(){return t(Q)},onretry:R=>{for(const L of R)a().interfaces.reconnect(L)},get subscribingText(){return t(O)},get waitingText(){return t(W)},get reconnectingText(){return t(ce)},get allConnectedText(){return t(he)},get someNotConnectedText(){return t(ge)},get portLabel(){return t(ye)},devicesLabel:R=>t(o)("{count} devices",{count:R},R),dutyCycleLabel:R=>t(o)("Duty cycle {value} %",{value:R}),get publishCallbackPorts(){return t(ae)},callbackPortInUseLabel:R=>t(o)("Callback port {port} is in use",{port:String(R)}),callbackPortFailedLabel:R=>t(o)("Callback port {port} cannot be opened",{port:String(R)}),get publishPortText(){return t(V)},callbackWarningLabel:R=>R.reason==="notLocal"?t(o)("The callback address {address} is not an address of this machine; {auto} is used instead",{address:R.address,auto:R.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:R.address}),get useAutomaticText(){return t(F)},onuseautomatic:()=>{t(l).useAutomaticCallback().then(R=>R?a().start():void 0)},testId:"interface-select",onselect:R=>{a().selectInterface(R)},get store(){return t(b)},storeTestId:"meta-indicator"})}var C=d(D,2);{let M=c(()=>t(o)("Devices"));Eg(C,{get tabs(){return t(k)},get active(){return t(l).tab},get label(){return t(M)},onselect:ue=>t(l).setTab(ue)})}var T=d(C,2),P=w(T);{var z=M=>{var ue=QR(),ve=Ie(ue),be=m(ve,!0),Ee=d(ve,2),q=m(Ee,!0);y((Q,O)=>{I(ve,"title",Q),h(be,t(l).session.user),h(q,O)},[()=>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(z)})}var Y=d(P,2);{var ne=M=>{var ue=ZR(),ve=m(ue);y(be=>h(ve,`${be??""} (${a().changeSet.count??""})`),[()=>t(o)("Pending changes")]),J("click",ue,()=>u(i,!0)),v(M,ue)};$(Y,M=>{a().changeSet.count>0&&M(ne)})}var ie=d(Y,2);{let M=c(()=>t(o)("RPC log"));Ct(ie,{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(ie,2);{var G=M=>{kg(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 re=d(de,2);{let M=c(()=>t(o)("Settings"));Ct(re,{get title(){return t(M)},icon:"⚙",testId:"settings-button",onclick:()=>t(l).configDialogOpen=!0})}var le=d(re,2);{let M=c(()=>t(o)("Homematic Manager on GitHub"));Ep(le,{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")}));Og(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);Jv(U,()=>`${t(l).selectedInterface}/${t(l).tab}`,M=>{var ue=wt(),ve=Ie(ue);Df(ve,{onerror:Ee=>a().notices.fromError(Ee,`page ${t(l).tab}`),failed:(Ee,q=zn,Q=zn)=>{var O=JR(),W=w(O),ce=m(W,!0),he=d(W,2),ge=m(he,!0),ye=d(he,2),ae=m(ye,!0);y((V,F,R)=>{h(ce,V),h(ge,F),h(ae,R)},[()=>t(o)("This tab could not be drawn."),()=>q()instanceof Error?q().message:String(q()),()=>t(o)("Try again")]),J("click",ye,function(...V){Q()?.apply(this,V)}),v(Ee,O)}},Ee=>{var q=wt(),Q=Ie(q);{var O=R=>{var L=ex(),ee=m(L,!0);y(_e=>h(ee,_e),[()=>t(o)("Select an interface")]),v(R,L)},W=R=>{var L=wt(),ee=Ie(L);{var _e=We=>{tl(We,{enumId:"room"})},Ne=We=>{tl(We,{enumId:"function"})},Fe=We=>{tl(We,{})};$(ee,We=>{t(l).tab==="rooms"?We(_e):t(l).tab==="functions"?We(Ne,1):We(Fe,-1)})}v(R,L)},ce=R=>{hT(R,{})},he=R=>{HT(R,{})},ge=R=>{ZT(R,{})},ye=R=>{jR(R,{})},ae=R=>{qy(R,{})},V=R=>{XR(R,{})},F=R=>{gT(R,{})};$(Q,R=>{t(l).selectedInterface===""?R(O):t(l).storeSelected?R(W,1):t(l).tab==="devices"?R(ce,2):t(l).tab==="groups"?R(he,3):t(l).tab==="links"?R(ge,4):t(l).tab==="rssi"?R(ye,5):t(l).tab==="console"?R(ae,6):t(l).tab==="messages"?R(V,7):R(F,-1)})}v(Ee,q)}),v(M,ue)});var me=d(te,2);{let M=c(()=>t(o)("RPC log")),ue=c(()=>t(o)("No RPC calls yet")),ve=c(()=>t(o)("in progress")),be=c(()=>t(o)("Clear")),Ee=c(()=>t(o)("Close")),q=c(()=>t(o)("Resize the RPC log")),Q=c(()=>t(o)("Hide background calls")),O=c(()=>t(o)("Open in console")),W=c(()=>({console:t(o)("Origin: console"),ui:t(o)("Origin: UI"),background:t(o)("Origin: background")}));cg(me,{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(ve)},get clearLabel(){return t(be)},get closeLabel(){return t(Ee)},get resizeLabel(){return t(q)},get hideBackgroundLabel(){return t(Q)},get openLabel(){return t(O)},get originLabels(){return t(W)},testId:"rpclog",onclear:()=>{a().rpcLog.clear()},onopen:f,get open(){return t(l).rpcLogOpen},set open(ce){t(l).rpcLogOpen=ce},get hideBackground(){return a().rpcLog.hideBackground},set hideBackground(ce){a().rpcLog.hideBackground=ce}})}var ke=d(me,2);{let M=c(()=>t(o)("Dismiss")),ue=c(()=>t(o)("Show fewer"));Qp(ke,{get notices(){return a().notices.items},get dismissLabel(){return t(M)},moreLabel:ve=>t(o)("{count} more",{},ve),get lessLabel(){return t(ue)},testId:"notices",ondismiss:ve=>a().notices.dismiss(ve)})}var fe=d(ke,2);{let M=c(()=>t(o)("RPC execution")),ue=c(()=>t(o)("Cancel"));Vf(fe,{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(fe,2);by(Re,{get open(){return t(l).configDialogOpen},set open(M){t(l).configDialogOpen=M}});var xe=d(Re,2);nb(xe,{get open(){return t(i)},set open(M){u(i,M,!0)}});var se=d(xe,2);{let M=c(()=>t(o)("Loading Homematic Manager..."));Vp(se,{get visible(){return t(l).loading},get text(){return t(M)},testId:"loader"})}y(()=>{I(j,"id",`panel-${t(l).tab}`),I(j,"aria-labelledby",`tab-${t(l).tab}`)}),v(r,A),mt()}kt(["click"]);const qh="hmm.columnWidths";function rx(r){const e=r.trim().toLowerCase().replace(/[^a-z0-9._-]/g,"_");return e===""?"unconfigured":e}const sx=Object.freeze({});function Au(r){return r!==null&&typeof r=="object"&&!Array.isArray(r)}function ax(r){let e;try{const s=r?.getItem(qh);e=s==null?void 0:JSON.parse(s)}catch{return{}}const n={};if(!Au(e))return n;for(const[s,a]of Object.entries(e)){if(!Au(a))continue;const i={};for(const[o,l]of Object.entries(a)){const f=dE(l);Object.keys(f).length>0&&(i[o]=f)}Object.keys(i).length>0&&(n[s]=i)}return n}class ix{#e=N({});#n;#t;constructor(e,n){this.#n=e,this.#t=n,u(this.#e,ax(e))}widths(e){return t(this.#e)[this.#t()]?.[e]??sx}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(qh,JSON.stringify(t(this.#e)))}catch{}}}const rl=["system","light","dark"],Tu="hmm.theme",sl="hmm.language";function ox(){return typeof window>"u"?{hash:""}:window.location}function lx(r){return typeof window>"u"?()=>{}:(window.addEventListener("hashchange",r),()=>{window.removeEventListener("hashchange",r)})}function dx(){try{return typeof localStorage>"u"?void 0:localStorage}catch{return}}class cx{#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;#E;#p;#S;#y=[];#k=[];constructor(e,n,s={}){this.#m=e,this.#b=n,this.#E=s.location??ox(),this.#p=s.storage===void 0?dx():s.storage,this.#S=s.languages,this.columnWidths=new ix(this.#p,()=>rx(this.config?.connection.host??""));const a=this.#p?.getItem(Tu);(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.#y.push(e.onConnectionChange(o=>{this.connected=o}),e.on("config.changed",o=>{this.config=o}),e.on("pairing.changed",o=>{this.pairing=o}),(s.onHashChange??lx)(()=>{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=jg(this.#E.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=Wg(this.selectedInterface,this.tab);this.#E.hash!==e&&(this.#E.hash=e)}setTab(e){this.tab=e,ri(e)||(this.interfaceTab=e),this.writeRoute()}get storeSelected(){return Kf(this.selectedInterface)}setInterface(e){this.selectedInterface=e,this.writeRoute()}setLanguage(e){this.languageChoice=e,this.#w(),this.#p?.setItem(sl,e)}#w(){this.language=p1(this.languageChoice,this.#S)}setTheme(e){this.theme=e,this.#p?.setItem(Tu,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.#y)e();this.#y.length=0,this.#k.length=0}}class ux{#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:yi(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 fx{#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 hx{#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 Eb(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 yi(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 mx{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 V_(s.capacity??mh),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),z_(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 vx{#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:yi(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 px="__HMM_HOST__";function gx(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 bx(r=globalThis){const e=r[px];return gx(e)?e:void 0}class _x{#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??bx(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 yx{#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 Ex{#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(ls.manifest)}receiverProfiles(e){return this.#t(ls.profiles(e))}async receiverTypeAliases(){return await this.#t(ls.receiverTypeAliases)??{}}async masterMetadata(){return await this.#t(ls.masterMetadata)??{}}async optionPresets(){return await this.#t(ls.optionPresets)??{}}async crossValidations(){return await this.#t(ls.crossValidations)??[]}translations(e){return this.#t(ls.translations(e))}async deviceIcons(){return await this.#t(ls.deviceIcons)??{}}async masterForms(){return(await this.#t(ls.masterForms))?.byParamsetId??{}}async timeSelectors(){return(await this.#t(ls.timeSelectors))?.types??{}}}class Sx{#e=N(Be(new Uc));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 Ex(e),this.engine=new S_(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 Uc(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 kx{#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.FLAGS).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 wx{#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 Ax(r,e,n,s){try{return si(r,e,n,s)}catch{return Ki(r,e.ADDRESS,n)}}class Tx{#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=`${Ax(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"?Vh(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 wh(this.#r,e,n)}async suppressServiceMessages(e,n,s,a){try{return await Ah(this.#r,e,n,s,a),!0}catch(i){return this.#i.fromError(i,`suppressServiceMessages ${n} ${s||"*"}`),!1}}clearResults(){this.results=[]}}class Rx{#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(xa(s.address),s.datapoint,a)===!0&&u(this.#t,t(this.#t)+1)})}#d(e){const n=this.#s[e]??new G_;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?B_(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 xx{#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(Ru(a)));if(this.messages=e,this.#l=e.map(a=>Ru(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 Ah(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 M_(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 wh(this.#a,e,n);a!==void 0&&(this.suppressed={...this.suppressed,[s]:a})}dispose(){this.#i()}}function Ru(r){return`${r.interfaceName}|${r.address}|${r.datapoint}`}function Zs(r,e){return`${r}|${e}`}function al(r){return Array.isArray(r)?r:[]}class xu{#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||!Ix(e))return;const n=Iu(/[?&]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=Iu(s.theme)??this.theme??"system")}dispose(){this.#t?.removeEventListener("message",this.#s)}}function Iu(r){return r==="system"||r==="light"||r==="dark"?r:void 0}function Ix(r){try{return r.self!==r.top&&r.parent.location.origin===r.location.origin}catch{return!1}}class Dx{#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]=Ab(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=$f(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 Nx{#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(()=>a1(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 Y_(e,n)}view(e){return this.objects[e]}titleOf(e,n){return yh(e,this.enums[e],n)}options(e){return Ch(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 Da(this.objects[e],n)}deviceMatches(e,n,s){return Ph(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:yi(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 Cx{#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 Px{#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 Mx{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 Kp(e),this.app=new cx(e,this.notices,n),this.i18n=new g1(this.app.language),this.interfaces=new yx(e,this.notices),this.devices=new hx(e,this.notices),this.names=new wx(e,this.notices),this.links=new kx(e,this.notices),this.serviceMessages=new xx(e,this.notices),this.unreach=new Cx(e,this.notices),this.events=new mx(e,this.notices,{...n.eventCapacity===void 0?{}:{capacity:n.eventCapacity}}),this.rpcLog=new Px(e,this.notices),this.meta=new Sx(e,{...n.dataSource===void 0?{}:{source:n.dataSource}}),this.taxonomy=new Nx(e,this.notices),this.groups=new vx(e,this.notices),this.smokeGroups=new Dx(e,this.notices),this.paramsets=new Tx(e,this.notices),this.radio=new Rx(e,this.notices),this.console=new fx(e,this.notices),this.changeSet=new ux(e,this.notices,this.rpcLog),this.app.onInterfaceRouted(s=>{this.#e&&this.#n(Kf(s))}),this.shell="shellWindow"in n?new xu(n.shellWindow):new xu,this.host=new _x({...n.hostBridge===void 0?{}:{bridge:n.hostBridge},...n.hostScope===void 0?{}:{scope:n.hostScope}})}get tabs(){return this.app.storeSelected?dc(this.taxonomy.state):Kg(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&&dc(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 Ox(r,e={}){return new Mx(r,e)}const $h=["BidCos-RF","HmIP-RF"],Xh=[{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}],Lx=[{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}])],Qh={"BidCos-RF":Xh,"HmIP-RF":Lx},cs={"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")}],Fx={"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]}}},Gx=[{ADDRESS:"3014F711A0000418971558",TYPE:"HMIP_CCU2",DESCRIPTION:"HMIP_CCU2 3014F711A0000418971558",CONNECTED:!0,DEFAULT:!0,DUTY_CYCLE:1,FIRMWARE_VERSION:"4.4.18"}],Ux=[{ADDRESS:"BidCoS-RF",TYPE:"CCU2",DESCRIPTION:"CCU2-Coprocessor",CONNECTED:!0,DEFAULT:!0,DUTY_CYCLE:1,FIRMWARE_VERSION:"2.8.6"}],Zh=[{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"}],Du=[{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}],Bx=Xh.filter(r=>(r.TEAM_CHANNELS??[]).length>0),Vx={format:1,revision:7,objects:{"BidCos-RF.MEQ0123456:1":{name:cs["MEQ0123456:1"]??"",enums:["room/eg/kueche","function/licht"],meta:{}},"BidCos-RF.JEQ0234567:1":{name:cs["JEQ0234567:1"]??"",enums:["room/eg/flur"],meta:{}},"BidCos-RF.KEQ0345678:4":{name:cs["KEQ0345678:4"]??"",enums:["room/og/bad","function/heizung"],meta:{}},"BidCos-RF.LEQ0456789:1":{name:cs["LEQ0456789:1"]??"",enums:["room/og/schlafzimmer","function/sicherheit"],meta:{}},"BidCos-RF.GEQ0567890:1":{name:cs["GEQ0567890:1"]??"",enums:["room/eg/wohnzimmer","function/licht"],meta:{}},"HmIP-RF.000A1B2C3D4E5F:4":{name:cs["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:[]}}},Hx={enabled:!0,reachable:!0,names:Object.keys(cs).length},Xl={host:"demo.local",interfaces:Zh.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:Xl,localAddresses:["192.168.1.20","10.0.0.5"],discovered:[{address:"demo.local",name:"Demo-CCU",serial:"KEQ0000001",firmware:"3.89.8",interfaces:[...$h]}]};function zx(r=Xl.host){const e=r===Xl.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 Nu=[{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}],jx=[{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"}],Wx=[{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:[]}],Cu=[{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 Wa(r){return $h.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}])]),Pu={"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},Mu={"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 Jh(r){for(const e of Object.values(Qh)){const n=e.find(s=>s.ADDRESS===r);if(n)return n.PARENT===void 0||n.PARENT===""?"":n.TYPE}return""}function Kx(r,e){return Pu[`${r}|${e}`]??Pu[`${Jh(r)}|${e}`]??{}}function Yx(r,e){return Mu[`${r}|${e}`]??Mu[`${Jh(r)}|${e}`]??{}}const qx={"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 em{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=>zx(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",Zh),this.result("interfaces.reconnect",null),this.result("rega.state",Hx),this.respond("devices.list",n=>Wa(n)?Qh[n]:[]),this.result("names.get",cs),this.respond("names.set",n=>{const s={...cs};for(const a of n)s[a.address]=a.name;return s}),this.respond("links.list",n=>Wa(n)?il[n]:[]),this.respond("rssi.get",n=>Wa(n)?Fx[n]:{}),this.respond("bidcos.interfaces",n=>n==="HmIP-RF"?Gx:Ux),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"?Bx:[]),this.result("teams.set",null),this.respond("unreach.list",n=>n===void 0?Du:Du.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?Nu:Nu.filter(s=>s.interfaceName===n)),this.result("events.clear",null),this.result("rpcLog.list",jx),this.result("rpcLog.clear",null),this.result("rpc.methods",Wx),this.respond("rpc.call",(n,s,a)=>({method:s,params:a})),this.respond("paramset.description",(n,s,a)=>Kx(s,a)),this.respond("paramset.get",(n,s,a)=>Yx(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)=>(Wa(n)?il[n]:[]).find(o=>o.SENDER===s&&o.RECEIVER===a)??{SENDER:s,RECEIVER:a}),this.respond("links.peers",(n,s)=>(Wa(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=qx[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 r1({document:Ml(structuredClone(Vx))}),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=i1(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 E=f?[...k,l]:k.filter(x=>x!==l),A=g.slice(g.indexOf(".")+1);p[g]=b?{enums:E}:{name:cs[A]??A,enums:E}}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:ya(l),k=b===void 0?g:Gs(g,b.ids)?.children??[],S=Eh(f,k.map(E=>E.id));return e.createNode(o,l??null,S,f,p??{}),i(),`${l??o}/${S}`}),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 $x=1;class Xx{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.#E("transport closed"),this.#p(!1)}async request(e,...n){await this.#v(e);const s=this.#d;if(!s||s.readyState!==$x)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,Lf(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.#E(`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)}#E(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 Qx={},Zx="__HMM_TRANSPORT__";function Jx(r,e="api"){const n=r.protocol==="https:"?"wss:":"ws:",s=r.pathname.replace(/[^/]*$/,"");return`${n}//${r.host}${s}${e}`}function eI(r){return Qx?.VITE_HMM_DEMO==="true"?!0:r?new URLSearchParams(r.search).has("demo"):!1}function tI(r={}){const n=(r.host??globalThis)[Zx];if(nI(n))return n;const s=r.location??(typeof window>"u"?void 0:window.location);if(r.demo===!0||eI(s))return new em({demo:!0});if(!s)throw new Error("createTransport needs a location when there is no window and no injected transport");return new Xx({url:Jx(s,r.path??"api")})}function nI(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 rI(r,e={}){const n=e.intervalMs??2500,s=e.now??(()=>Date.now());let a=0;const i=setInterval(()=>{const o=Cu[a%Cu.length];if(a+=1,!o)return;const l={...o,timestamp:s()};r.emit("rpc.event",l)},n);return()=>{clearInterval(i)}}const Ql=tI(),tm=Ox(Ql);Ql instanceof em&&rI(Ql);const nm=document.querySelector("#app");if(!nm)throw new Error("no #app element to mount into");$v(nx,{target:nm,props:{stores:tm}});tm.start();
|
|
21
|
-
//# sourceMappingURL=index-DlodmFUk.js.map
|