homematic-manager 3.0.1 → 3.1.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/node_modules/@homematic-manager/backend/package.json +1 -1
- package/node_modules/@homematic-manager/core/package.json +1 -1
- package/package.json +3 -3
- package/ui/assets/{index-zKVCiLPm.css → index-D1R9V3sn.css} +1 -1
- package/ui/assets/index-sv7OiesL.js +21 -0
- package/ui/index.html +2 -2
- package/ui/assets/index-YYK59Qny.js +0 -21
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))s(a);new MutationObserver(a=>{for(const i of a)if(i.type==="childList")for(const o of i.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&s(o)}).observe(document,{childList:!0,subtree:!0});function n(a){const i={};return a.integrity&&(i.integrity=a.integrity),a.referrerPolicy&&(i.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?i.credentials="include":a.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function s(a){if(a.ep)return;a.ep=!0;const i=n(a);fetch(a.href,i)}})();const Vu=!1;var pi=Array.isArray,Om=Array.prototype.indexOf,Zi=Array.prototype.includes,mo=Array.from,Hu=Object.defineProperty,pa=Object.getOwnPropertyDescriptor,zu=Object.getOwnPropertyDescriptors,ju=Object.prototype,Lm=Array.prototype,vo=Object.getPrototypeOf,Xd=Object.isExtensible;const Wn=()=>{};function Fm(r){for(var e=0;e<r.length;e++)r[e]()}function Wu(){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 Xn=2,ya=4,po=8,Ku=1<<24,ns=16,Qr=32,Ns=64,ul=128,ed=256,$r=512,jn=1024,Ln=2048,as=4096,_r=8192,Dr=16384,Pa=32768,Ji=1<<25,la=65536,eo=1<<17,Gm=1<<18,Ma=1<<19,Um=1<<20,ps=1<<25,da=65536,to=1<<21,ga=1<<22,Bs=1<<23,Rs=Symbol("$state"),Yu=Symbol("component"),Bm=Symbol("legacy props"),Vm=Symbol(""),qu=Symbol("attributes"),fl=Symbol("class"),hl=Symbol("style"),ml=Symbol("text"),Gi=Symbol("form reset"),gi=new class extends Error{name="StaleReactionError";message="The reaction that called `getAbortSignal()` was re-run or destroyed"},Hm=!!globalThis.document?.contentType&&globalThis.document.contentType.includes("xml"),zm=1,jm=2,$u=4,Wm=8,Km=16,Ym=1,qm=4,$m=8,Xm=16,Xu=1,Qm=2,zn=Symbol("uninitialized"),Zm="http://www.w3.org/1999/xhtml";function Jm(){console.warn("https://svelte.dev/e/derived_inert")}function ev(){console.warn("https://svelte.dev/e/select_multiple_invalid_value")}function tv(){console.warn("https://svelte.dev/e/svelte_boundary_reset_noop")}function Qu(r){return r===this.v}function Zu(r,e){return r!=r?e==e:r!==e||r!==null&&typeof r=="object"||typeof r=="function"}function Ju(r){return!Zu(r,this.v)}function td(r){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function nv(){throw new Error("https://svelte.dev/e/async_derived_orphan")}function rv(r,e,n){throw new Error("https://svelte.dev/e/each_key_duplicate")}function sv(r){throw new Error("https://svelte.dev/e/effect_in_teardown")}function av(){throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function iv(r){throw new Error("https://svelte.dev/e/effect_orphan")}function ov(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}function lv(r){throw new Error("https://svelte.dev/e/props_invalid_value")}function dv(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function cv(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}function uv(){throw new Error("https://svelte.dev/e/state_unsafe_mutation")}function fv(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}let hv=!1;const mv=[];function Ui(r,e=!1,n=!1){return Bi(r,new Map,"",mv,null,n)}function Bi(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(pi(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]=Bi(p,e,n,s,null,i))}return l}if(vo(r)===ju){l={},e.set(r,l),a!==null&&e.set(a,l);for(var b of Object.keys(r))l[b]=Bi(r[b],e,n,s,null,i);return l}if(r instanceof Date)return r.getTime(),structuredClone(r);if(typeof r.toJSON=="function"&&!i)return Bi(r.toJSON(),e,n,s,r)}if(r instanceof EventTarget)return r;try{return structuredClone(r)}catch{return r}}function vv(r){let e=r.p;for(;e!==null&&e.c===null;)e=e.p;return e?.c??null}function nd(r,e){return r===null&&td(),r.c??=new Map(vv(r)||void 0)}let Fn=null;function Sa(r){Fn=r}function ef(r){return nd(Fn).get(r)}function tf(r,e){return nd(Fn).set(r,e),e}function nf(r){return nd(Fn).has(r)}function dt(r,e=!1,n){Fn={p:Fn,i:!1,c:null,e:null,s:r,x:null,r:Ht,l:null}}function ct(r){var e=Fn,n=e.e;if(n!==null){e.e=null;for(var s of n)Sf(s)}return r!==void 0&&(e.x=r),e.i=!0,Fn=e.p,rd(r)}function rd(r={}){return Hu(r,Yu,{value:!0}),r}function rf(){return!0}let na=[];function sf(){var r=na;na=[],Fm(r)}function Ts(r){if(na.length===0&&!Za){var e=na;queueMicrotask(()=>{e===na&&sf()})}na.push(r)}function pv(){for(;na.length>0;)sf()}const gv=-7169;function Dn(r,e){r.f=r.f&gv|e}function sd(r){(r.f&$r)!==0||r.deps===null?Dn(r,jn):Dn(r,as)}function af(r){if(r!==null)for(const e of r)(e.f&Xn)===0||(e.f&da)===0||(e.f^=da,af(e.deps))}function of(r,e,n){(r.f&Ln)!==0?e.add(r):(r.f&as)!==0&&n.add(r),af(r.deps),Dn(r,jn)}let Ni=!1;function bv(r){var e=Ni;try{return Ni=!1,[r(),Ni]}finally{Ni=e}}let Zd=!1;function _v(){Zd||(Zd=!0,document.addEventListener("reset",r=>{Promise.resolve().then(()=>{if(!r.defaultPrevented)for(const e of r.target.elements)e[Gi]?.()})},{capture:!0}))}function Oa(r){var e=Wt,n=Ht;Zr(null),Es(null);try{return r()}finally{Zr(e),Es(n)}}function ad(r,e,n,s=n){r.addEventListener(e,()=>Oa(n));const a=r[Gi];a?r[Gi]=()=>{a(),s(!0)}:r[Gi]=()=>s(!0),_v()}function Ev(r,e,n,s){const a=ni;var i=r.filter(y=>!y.settled),o=e.map(a);if(n.length===0&&i.length===0){s(o);return}var l=Ht,f=yv(),p=i.length===1?i[0].promise:i.length>1?Promise.all(i.map(y=>y.promise)):null;function b(y){if((l.f&Dr)===0){f();try{s([...o,...y])}catch(S){vs(S,l)}no()}}var g=lf();if(n.length===0){p.then(()=>b([])).finally(g);return}function k(){Promise.all(n.map(y=>Sv(y))).then(b).catch(y=>vs(y,l)).finally(g)}p?p.then(()=>{f(),k(),no()}):k()}function yv(){var r=Ht,e=Wt,n=Fn,s=Pt;return function(i=!0){Es(r),Zr(e),Sa(n),i&&(r.f&Dr)===0&&(s?.activate(),s?.apply())}}function no(r=!0){Es(null),Zr(null),Sa(null),r&&Pt?.deactivate()}function lf(){var r=Ht,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 ni(r){var e=Xn|Ln;return Ht!==null&&(Ht.f|=Ma),{ctx:Fn,deps:null,effects:null,equals:Qu,f:e,fn:r,reactions:null,rv:0,v:zn,wv:0,parent:Ht,ac:null}}const qa=Symbol("obsolete");function Sv(r,e,n){let s=Ht;s===null&&nv();var a=void 0,i=zs(zn),o=!Wt,l=new Set;return Fv(()=>{var f=Ht,p=Wu();a=p.promise;try{Promise.resolve(r()).then(p.resolve,y=>{y!==gi&&p.reject(y)}).finally(no)}catch(y){p.reject(y),no()}var b=Pt;if(o){if((f.f&Pa)!==0)var g=lf();if(s.b?.is_rendered())b.async_deriveds.get(f)?.reject(qa);else for(const y of l.values())y.reject(qa);l.add(p),b.async_deriveds.set(f,p)}const k=(y,S=void 0)=>{g?.(),l.delete(p),S!==qa&&(b.activate(),S?(i.f|=Bs,ka(i,S)):((i.f&Bs)!==0&&(i.f^=Bs),ka(i,y)),b.deactivate())};p.promise.then(k,y=>k(null,y||"unknown"))}),cd(()=>{for(const f of l)f.reject(qa)}),new Promise(f=>{function p(b){function g(){b===a?f(i):p(a)}b.then(g,g)}p(a)})}function c(r){const e=ni(r);return Rf(e),e}function df(r){const e=ni(r);return e.equals=Ju,e}function kv(r){var e=r.effects;if(e!==null){r.effects=null;for(var n=0;n<e.length;n+=1)Nr(e[n])}}function id(r){var e,n=Ht,s=r.parent;if(!Cs&&s!==null&&r.v!==zn&&(s.f&(Dr|_r))!==0)return Jm(),r.v;Es(s);try{r.f&=~da,kv(r),e=Nf(r)}finally{Es(n)}return e}function cf(r){var e=id(r);if(!r.equals(e)&&(r.wv=If(),(!Pt?.is_fork||r.deps===null)&&(Pt!==null?(Pt.capture(r,e,!0),vl?.capture(r,e,!0)):r.v=e,r.deps===null))){Dn(r,jn);return}Cs||(rs!==null?(dd()||Pt?.is_fork)&&rs.set(r,e):sd(r))}function wv(r){if(r.effects!==null)for(const e of r.effects)(e.teardown||e.ac)&&(e.teardown?.(),e.ac!==null&&Oa(()=>{e.ac.abort(gi),e.ac=null}),e.fn!==null&&(e.teardown=Wn),ri(e,0),ud(e))}function uf(r){if(r.effects!==null)for(const e of r.effects)e.teardown&&e.fn!==null&&wa(e)}let Oo=null,ha=null,Pt=null,vl=null,rs=null,pl=null,Za=!1,Lo=!1,ma=null,Vi=null;var Jd=0;let Av=1;class Hs{id=Av++;#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?Oo=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,Ln),n(a);for(a of s.m)Dn(a,as),n(a)}this.#g.add(e)}#_(){this.#e=!0,Jd++>1e3&&(this.#E(),Rv());for(const f of this.#c)this.#u.delete(f),Dn(f,Ln),this.schedule(f);for(const f of this.#u)Dn(f,as),this.schedule(f);const e=this.#o;this.#o=[],this.apply();var n=ma=[],s=[],a=Vi=[];for(const f of e)try{this.#m(f,n,s)}catch(p){throw mf(f),this.#v()||this.discard(),p}if(Pt=null,a.length>0){var i=Hs.ensure();for(const f of a)i.schedule(f)}if(ma=null,Vi=null,this.#v()){this.#p(s),this.#p(n);for(const[f,p]of this.#f)hf(f,p);a.length>0&&Pt.#_();return}const o=this.#b();if(o){this.#p(s),this.#p(n),o.#y(this);return}this.#c.clear(),this.#u.clear();for(const f of this.#s)f(this);this.#s.clear(),vl=this,ec(s),ec(n),vl=null,this.#l?.resolve();var l=Pt;if(this.#r===0&&(this.#o.length===0||l!==null)&&this.#E(),this.#o.length>0)if(l!==null){const f=l;f.#o.push(...this.#o.filter(p=>!f.#o.includes(p)))}else l=this;l!==null&&(gs.clear(),l.#_())}#m(e,n,s){e.f^=jn;for(var a=e.first;a!==null;){var i=a.f,o=(i&(Qr|Ns))!==0,l=o&&(i&jn)!==0,f=l||(i&_r)!==0||this.#f.has(a);if(!f&&a.fn!==null){o?a.f^=jn:(i&ya)!==0?n.push(a):yi(a)&&((i&ns)!==0&&this.#u.add(a),wa(a));var p=a.first;if(p!==null){a=p;continue}}for(;a!==null;){var b=a.next;if(b!==null){a=b;break}a=a.parent}}}#b(){for(var e=this.#n;e!==null;){if(!e.is_fork){for(const[n,[,s]]of this.current)if(e.current.has(n)&&!s)return e}e=e.#n}return null}#y(e){for(const[s,a]of e.current)!this.previous.has(s)&&e.previous.has(s)&&this.previous.set(s,e.previous.get(s)),this.current.set(s,a);for(const[s,a]of e.async_deriveds){const i=this.async_deriveds.get(s);i&&a.promise.then(i.resolve).catch(i.reject)}e.async_deriveds.clear(),this.transfer_effects(e.#c,e.#u);const n=s=>{var a=s.reactions;if(a!==null&&!((s.f&Xn)!==0&&(s.f&(Ln|as))===0))for(const l of a){var i=l.f;if((i&Xn)!==0)n(l);else{var o=l;i&(ga|ns)&&!this.async_deriveds.has(o)&&(this.#u.delete(o),Dn(o,Ln),this.schedule(o))}}};for(const s of this.current.keys())n(s);this.oncommit(()=>e.discard()),e.#E(),Pt=this,this.#_()}#p(e){for(var n=0;n<e.length;n+=1)of(e[n],this.#c,this.#u)}capture(e,n,s=!1){e.v!==zn&&!this.previous.has(e)&&this.previous.set(e,e.v),(e.f&Bs)===0&&(this.current.set(e,[n,s]),rs?.set(e,n)),this.is_fork||(e.v=n)}activate(){Pt=this}deactivate(){Pt=null,rs=null}flush(){try{Lo=!0,Pt=this,this.#_()}finally{Jd=0,pl=null,ma=null,Vi=null,Lo=!1,Pt=null,rs=null,gs.clear()}}discard(){for(const e of this.#a)e(this);this.#a.clear();for(const e of this.async_deriveds.values())e.reject(qa);this.#E(),this.#l?.resolve()}register_created_effect(e){this.#d.push(e)}#S(){for(let g=Oo;g!==null;g=g.#t){var e=g.id<this.id,n=[];for(const[k,[y,S]]of this.current){if(g.current.has(k)){var s=g.current.get(k)[0];if(e&&y!==s)g.current.set(k,[y,S]);else continue}n.push(k)}if(e)for(const[k,y]of this.async_deriveds){const S=g.async_deriveds.get(k);S&&y.promise.then(S.resolve).catch(S.reject)}var a=[...g.current.keys()].filter(k=>!g.current.get(k)[1]);if(!(!g.#e||a.length===0)){var i=a.filter(k=>!this.current.has(k));if(i.length===0)e&&g.discard();else if(n.length>0){if(e)for(const k of this.#g)g.unskip_effect(k,y=>{(y.f&(ns|ga))!==0?g.schedule(y):g.#p([y])});g.activate();var o=new Set,l=new Map;for(var f of n)ff(f,i,o,l);l=new Map;var p=[...g.current].filter(([k,y])=>{const S=this.current.get(k);return S?S[0]!==y[0]||S[1]!==y[1]:!0}).map(([k])=>k);if(p.length>0)for(const k of this.#d)(k.f&(Dr|_r|eo))===0&&od(k,p,l)&&((k.f&(ga|ns))!==0?(Dn(k,Ln),g.schedule(k)):g.#c.add(k));if(g.#o.length>0&&!g.#h){g.apply();for(var b of g.#o)g.#m(b,[],[]);g.#o=[]}g.deactivate()}}}}increment(e,n){if(this.#r+=1,e){let s=this.#i.get(n)??0;this.#i.set(n,s+1)}}decrement(e,n){if(this.#r-=1,e){let s=this.#i.get(n)??0;s===1?this.#i.delete(n):this.#i.set(n,s-1)}this.#h||(this.#h=!0,Ts(()=>{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??=Wu()).promise}static ensure(){if(Pt===null){const e=Pt=new Hs;!Lo&&!Za&&Ts(()=>{e.#e||e.flush()})}return Pt}apply(){{rs=null;return}}schedule(e){if(pl=e,e.b?.is_pending&&(e.f&(ya|po|Ku))!==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(ma!==null&&n===Ht&&(Wt===null||(Wt.f&Xn)===0))return;if((s&(Ns|Qr))!==0){if((s&jn)===0)return;n.f^=jn}}this.#o.push(n)}#E(){if(this.linked){var e=this.#n,n=this.#t;e===null?Oo=n:e.#t=n,n===null?ha=e:n.#n=e,this.linked=!1}}}function Tv(r){var e=Za;Za=!0;try{for(var n;;){if(pv(),Pt===null)return n;Pt.flush()}}finally{Za=e}}function Rv(){try{ov()}catch(r){vs(r,pl)}}let ws=null;function ec(r){var e=r.length;if(e!==0){for(var n=0;n<e;){var s=r[n++];if((s.f&(Dr|_r))===0&&yi(s)&&(ws=new Set,wa(s),s.deps===null&&s.first===null&&s.nodes===null&&s.teardown===null&&s.ac===null&&wf(s),ws?.size>0)){gs.clear();for(const a of ws){if((a.f&(Dr|_r))!==0)continue;const i=[a];let o=a.parent;for(;o!==null;)ws.has(o)&&(ws.delete(o),i.push(o)),o=o.parent;for(let l=i.length-1;l>=0;l--){const f=i[l];(f.f&(Dr|_r))===0&&wa(f)}}ws.clear()}}ws=null}}function ff(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&Xn)!==0?ff(a,e,n,s):(i&(ga|ns))!==0&&(i&Ln)===0&&od(a,e,s)&&(Dn(a,Ln),ld(a))}}function od(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(Zi.call(e,a))return!0;if((a.f&Xn)!==0&&od(a,e,n))return n.set(a,!0),!0}return n.set(r,!1),!1}function ld(r){Pt.schedule(r)}function hf(r,e){if(!((r.f&Qr)!==0&&(r.f&jn)!==0)){(r.f&Ln)!==0?e.d.push(r):(r.f&as)!==0&&e.m.push(r),Dn(r,jn);for(var n=r.first;n!==null;)hf(n,e),n=n.next}}function mf(r){Dn(r,jn);for(var e=r.first;e!==null;)mf(e),e=e.next}let ro=new Set;const gs=new Map;let vf=!1;function zs(r,e){var n={f:0,v:r,reactions:null,equals:Qu,rv:0,wv:0};return n}function N(r,e){const n=zs(r);return Rf(n),n}function xv(r,e=!1,n=!0){const s=zs(r);return e||(s.equals=Ju),s}function u(r,e,n=!1){Wt!==null&&(!ss||(Wt.f&eo)!==0)&&rf()&&(Wt.f&(Xn|ns|ga|eo))!==0&&(bs===null||!bs.has(r))&&uv();let s=n?Be(e):e;return ka(r,s,Vi)}function ka(r,e,n=null){if(!r.equals(e)){Cs?gs.set(r,e):gs.has(r)||gs.set(r,r.v);var s=Hs.ensure();if(s.capture(r,e),(r.f&Xn)!==0){const a=r;(r.f&Ln)!==0&&id(a),rs===null&&sd(a)}r.wv=If(),pf(r,Ln,n),Ht!==null&&(Ht.f&jn)!==0&&(Ht.f&(Qr|Ns))===0&&(Kr===null?Bv([r]):Kr.push(r)),!s.is_fork&&ro.size>0&&!vf&&Iv()}return e}function Iv(){vf=!1;for(const r of ro){(r.f&jn)!==0&&Dn(r,as);let e;try{e=yi(r)}catch{e=!0}e&&wa(r)}ro.clear()}function hs(r){u(r,r.v+1)}function pf(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&Ln)===0;if(f&&Dn(o,e),(l&eo)!==0)ro.add(o);else if((l&Xn)!==0){var p=o;rs?.delete(p),(l&da)===0&&(l&$r&&(Ht===null||(Ht.f&to)===0)&&(o.f|=da),pf(p,as,n))}else if(f){var b=o;(l&ns)!==0&&ws!==null&&ws.add(b),n!==null?n.push(b):ld(b)}}}function Be(r){if(typeof r!="object"||r===null||Rs in r||Yu in r)return r;const e=vo(r);if(e!==ju&&e!==Lm)return r;var n=new Map,s=pi(r),a=N(0),i=Is,o=l=>{if(Is===i)return l();var f=Wt,p=Is;Zr(null),rc(i);var b=l();return Zr(f),rc(p),b};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)&&dv();var b=n.get(f);return b===void 0?o(()=>{var g=N(p.value);return n.set(f,g),g}):u(b,p.value,!0),!0},deleteProperty(l,f){var p=n.get(f);if(p===void 0){if(f in l){const b=o(()=>N(zn));n.set(f,b),hs(a)}}else u(p,zn),hs(a);return!0},get(l,f,p){if(f===Rs)return r;var b=n.get(f),g=f in l;if(b===void 0&&(!g||pa(l,f)?.writable)&&(b=o(()=>{var y=Be(g?l[f]:zn),S=N(y);return S}),n.set(f,b)),b!==void 0){var k=t(b);return k===zn?void 0:k}return Reflect.get(l,f,p)},getOwnPropertyDescriptor(l,f){var p=Reflect.getOwnPropertyDescriptor(l,f);if(p&&"value"in p){var b=n.get(f);b&&(p.value=t(b))}else if(p===void 0){var g=n.get(f),k=g?.v;if(g!==void 0&&k!==zn)return{enumerable:!0,configurable:!0,value:k,writable:!0}}return p},has(l,f){if(f===Rs)return!0;var p=n.get(f),b=p!==void 0&&p.v!==zn||Reflect.has(l,f);if(p!==void 0||Ht!==null&&(!b||pa(l,f)?.writable)){p===void 0&&(p=o(()=>{var k=b?Be(l[f]):zn,y=N(k);return y}),n.set(f,p));var g=t(p);if(g===zn)return!1}return b},set(l,f,p,b){var g=n.get(f),k=f in l;if(s&&f==="length")for(var y=p;y<g.v;y+=1){var S=n.get(y+"");S!==void 0?u(S,zn):y in l&&(S=o(()=>N(zn)),n.set(y+"",S))}if(g===void 0)(!k||pa(l,f)?.writable)&&(g=o(()=>N(void 0)),u(g,Be(p)),n.set(f,g));else{k=g.v!==zn;var T=o(()=>Be(p));u(g,T)}var I=Reflect.getOwnPropertyDescriptor(l,f);if(I?.set&&I.set.call(b,p),!k){if(s&&typeof f=="string"){var C=n.get("length"),D=Number(f);Number.isInteger(D)&&D>=C.v&&u(C,D+1)}hs(a)}return!0},ownKeys(l){t(a);var f=Reflect.ownKeys(l).filter(g=>{var k=n.get(g);return k===void 0||k.v!==zn});for(var[p,b]of n)b.v!==zn&&!(p in l)&&f.push(p);return f},setPrototypeOf(){cv()}})}function tc(r){try{if(r!==null&&typeof r=="object"&&Rs in r)return r[Rs]}catch{}return r}function gf(r,e){return Object.is(tc(r),tc(e))}var ca,bf,_f,Ef;function Dv(){if(ca===void 0){ca=window,bf=/Firefox/.test(navigator.userAgent);var r=Element.prototype,e=Node.prototype,n=Text.prototype;_f=pa(e,"firstChild").get,Ef=pa(e,"nextSibling").get,Xd(r)&&(r[fl]=void 0,r[qu]=null,r[hl]=void 0,r.__e=void 0),Xd(n)&&(n[ml]=void 0)}}function xs(r=""){return document.createTextNode(r)}function ms(r){return _f.call(r)}function bi(r){return Ef.call(r)}function w(r,e){return ms(r)}function Ie(r,e=!1){{var n=ms(r);return n instanceof Comment&&n.data===""?bi(n):n}}function m(r,e=!1){return ms(r)}function d(r,e=1,n=!1){let s=r;for(;e--;)s=bi(s);return s}function Nv(r){r.textContent=""}function yf(){return!1}function Cv(r,e,n){return n?document.createElement(r,{is:n}):document.createElement(r)}function Pv(r){var e=Ht;if(e===null)return Wt.f|=Bs,r;if((e.f&Pa)===0&&(e.f&ya)===0)throw r;vs(r,e)}function vs(r,e){if(!(e!==null&&(e.f&Dr)!==0)){for(;e!==null;){if((e.f&ul)!==0&&(e.f&(Dr|Ji))===0){if((e.f&Pa)===0)throw r;try{e.b.error(r);return}catch(n){r=n}}e=e.parent}throw r}}function Mv(r){Ht===null&&(Wt===null&&iv(),av()),Cs&&sv()}function Ov(r,e){var n=e.last;n===null?e.last=e.first=r:(n.next=r,r.prev=n,e.last=r)}function Ps(r,e){var n=Ht;n!==null&&(n.f&_r)!==0&&(r|=_r);var s={ctx:Fn,deps:null,nodes:null,f:r|Ln|$r,first:null,fn:e,last:null,next:null,parent:n,b:n&&n.b,prev:null,teardown:null,wv:0,ac:null};Pt?.register_created_effect(s);var a=s;if((r&ya)!==0)ma!==null?ma.push(s):Hs.ensure().schedule(s);else if(e!==null){try{wa(s)}catch(o){throw Nr(s),o}a.deps===null&&a.teardown===null&&a.nodes===null&&a.first===a.last&&(a.f&Ma)===0&&(a=a.first,(r&ns)!==0&&(r&la)!==0&&a!==null&&(a.f|=la))}if(a!==null&&(a.parent=n,n!==null&&Ov(a,n),Wt!==null&&(Wt.f&Xn)!==0&&(r&Ns)===0)){var i=Wt;(i.effects??=[]).push(a)}return s}function dd(){return Wt!==null&&!ss}function cd(r){const e=Ps(po,null);return Dn(e,jn),e.teardown=r,e}function st(r){Mv();var e=Ht.f,n=!Wt&&(e&Qr)!==0&&Fn!==null&&!Fn.i;if(n){var s=Fn;(s.e??=[]).push(r)}else return Sf(r)}function Sf(r){return Ps(ya|Um,r)}function Lv(r){Hs.ensure();const e=Ps(Ns|Ma,r);return(n={})=>new Promise(s=>{n.outro?aa(e,()=>{Nr(e),s(void 0)}):(Nr(e),s(void 0))})}function go(r){return Ps(ya,r)}function Fv(r){return Ps(ga|Ma,r)}function _i(r,e=0){return Ps(po|e,r)}function E(r,e=[],n=[],s=[]){Ev(s,e,n,a=>{Ps(po,()=>{r(...a.map(t))})})}function Ei(r,e=0){var n=Ps(ns|e,r);return n}function Yr(r){return Ps(Qr|Ma,r)}function kf(r){var e=r.teardown;if(e!==null){const n=Cs,s=Wt;nc(!0),Zr(null);try{e.call(null)}catch(a){vs(a,r.parent)}finally{nc(n),Zr(s)}}}function ud(r,e=!1){var n=r.first;for(r.first=r.last=null;n!==null;){const a=n.ac;a!==null&&Oa(()=>{a.abort(gi)});var s=n.next;(n.f&Ns)!==0?n.parent=null:Nr(n,e),n=s}}function Gv(r){for(var e=r.first;e!==null;){var n=e.next;(e.f&Qr)===0&&Nr(e),e=n}}function Nr(r,e=!0){var n=!1;(e||(r.f&Gm)!==0)&&r.nodes!==null&&r.nodes.end!==null&&(Uv(r.nodes.start,r.nodes.end),n=!0),r.f|=Ji,ud(r,e&&!n),ri(r,0);var s=r.nodes&&r.nodes.t;if(s!==null)for(const i of s)i.stop();kf(r),r.f^=Ji,r.f|=Dr;var a=r.parent;a!==null&&a.first!==null&&wf(r),r.next=r.prev=r.teardown=r.ctx=r.deps=r.fn=r.nodes=r.ac=r.b=null}function Uv(r,e){for(;r!==null;){var n=r===e?null:bi(r);r.remove(),r=n}}function wf(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 aa(r,e,n=!0){var s=[];r.f|=ed,Af(r,s,!0);var a=()=>{n&&Nr(r),e&&e()},i=s.length;if(i>0){var o=()=>--i||a();for(var l of s)l.out(o)}else a()}function Af(r,e,n){if((r.f&_r)===0){r.f^=_r;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&Ns)===0){var o=(a.f&la)!==0||(a.f&Qr)!==0&&(r.f&ns)!==0;Af(a,e,o?n:!1)}a=i}}}function so(r){r.f&=~ed,Tf(r,!0)}function Tf(r,e){if((r.f&ed)===0&&(r.f&_r)!==0){r.f^=_r,(r.f&jn)===0&&(Dn(r,Ln),Hs.ensure().schedule(r));for(var n=r.first;n!==null;){var s=n.next,a=(n.f&la)!==0||(n.f&Qr)!==0;Tf(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 fd(r,e){if(r.nodes)for(var n=r.nodes.start,s=r.nodes.end;n!==null;){var a=n===s?null:bi(n);e.append(n),n=a}}let Hi=!1,Cs=!1;function nc(r){Cs=r}let Wt=null,ss=!1;function Zr(r){Wt=r}let Ht=null;function Es(r){Ht=r}let bs=null;function Rf(r){Wt!==null&&(bs??=new Set).add(r)}let xr=null,Gr=0,Kr=null;function Bv(r){Kr=r}let xf=1,ra=0,Is=ra;function rc(r){Is=r}function If(){return++xf}function yi(r){var e=r.f;if((e&Ln)!==0)return!0;if(e&Xn&&(r.f&=~da),(e&as)!==0){for(var n=r.deps,s=n.length,a=0;a<s;a++){var i=n[a];if(yi(i)&&cf(i),i.wv>r.wv)return!0}(e&$r)!==0&&rs===null&&Dn(r,jn)}return!1}function Df(r,e,n=!0){var s=r.reactions;if(s!==null&&!(bs!==null&&bs.has(r)))for(var a=0;a<s.length;a++){var i=s[a];(i.f&Xn)!==0?Df(i,e,!1):e===i&&(n?Dn(i,Ln):(i.f&jn)!==0&&Dn(i,as),ld(i))}}function Nf(r){var e=xr,n=Gr,s=Kr,a=Wt,i=bs,o=Fn,l=ss,f=Is,p=r.f;xr=null,Gr=0,Kr=null,Wt=(p&(Qr|Ns))===0?r:null,bs=null,Sa(r.ctx),ss=!1,Is=++ra,r.ac!==null&&(Oa(()=>{r.ac.abort(gi)}),r.ac=null);try{r.f|=to;var b=r.fn,g=b();r.f|=Pa;var k=sc(r);if(rf()&&Kr!==null&&!ss&&k!==null&&(r.f&(Xn|as|Ln))===0)for(var y=0;y<Kr.length;y++)Df(Kr[y],r);if(a!==null&&a!==r){if(ra++,a.deps!==null)for(let S=0;S<n;S+=1)a.deps[S].rv=ra;if(e!==null)for(const S of e)S.rv=ra;Kr!==null&&(s===null?s=Kr:s.push(...Kr))}return(r.f&Bs)!==0&&(r.f^=Bs),g}catch(S){return sc(r),Pv(S)}finally{r.f^=to,xr=e,Gr=n,Kr=s,Wt=a,bs=i,Sa(o),ss=l,Is=f}}function sc(r){var e=r.deps,n=Pt?.is_fork;if(xr!==null){var s;if(n||ri(r,Gr),e!==null&&Gr>0)for(e.length=Gr+xr.length,s=0;s<xr.length;s++)e[Gr+s]=xr[s];else r.deps=e=xr;if(dd()&&(r.f&$r)!==0)for(s=Gr;s<e.length;s++)(e[s].reactions??=[]).push(r)}else!n&&e!==null&&Gr<e.length&&(ri(r,Gr),e.length=Gr);return e}function Vv(r,e){let n=e.reactions;if(n!==null){var s=Om.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&Xn)!==0&&(xr===null||!Zi.call(xr,e))){var i=e;(i.f&$r)!==0&&(i.f^=$r,i.f&=~da),i.v!==zn&&sd(i),i.ac!==null&&Oa(()=>{i.ac.abort(gi),i.ac=null,Dn(i,Ln)}),wv(i),ri(i,0)}}function ri(r,e){var n=r.deps;if(n!==null)for(var s=e;s<n.length;s++)Vv(r,n[s])}function wa(r){var e=r.f;if((e&Dr)===0){Dn(r,jn);var n=Ht,s=Hi;Ht=r,Hi=(e&(Qr|Ns))===0;try{(e&(ns|Ku))!==0?Gv(r):ud(r),kf(r);var a=Nf(r);r.teardown=typeof a=="function"?a:null,r.wv=xf;var i;Vu&&hv&&(r.f&Ln)!==0&&r.deps}finally{Hi=s,Ht=n}}}async function Aa(){await Promise.resolve(),Tv()}function t(r){var e=r.f,n=(e&Xn)!==0;if(Wt!==null&&!ss){var s=Ht!==null&&(Ht.f&Dr)!==0;if(!s&&(bs===null||!bs.has(r))){var a=Wt.deps;if((Wt.f&to)!==0)r.rv<ra&&(r.rv=ra,xr===null&&a!==null&&a[Gr]===r?Gr++:xr===null?xr=[r]:xr.push(r));else{Wt.deps??=[],Zi.call(Wt.deps,r)||Wt.deps.push(r);var i=r.reactions;i===null?r.reactions=[Wt]:Zi.call(i,Wt)||i.push(Wt)}}}if(Cs&&gs.has(r))return gs.get(r);if(n){var o=r;if(Cs){var l=o.v;return((o.f&jn)===0&&o.reactions!==null||Pf(o))&&(l=id(o)),gs.set(o,l),l}var f=(o.f&$r)===0&&!ss&&Wt!==null&&(Hi||(Wt.f&$r)!==0),p=(o.f&Pa)===0;yi(o)&&(f&&(o.f|=$r),cf(o)),f&&!p&&(uf(o),Cf(o))}if(rs?.has(r))return rs.get(r);if((r.f&Bs)!==0)throw r.v;return r.v}function Cf(r){if(r.f|=$r,r.deps!==null)for(const e of r.deps)(e.reactions??=[]).push(r),(e.f&Xn)!==0&&(e.f&$r)===0&&(uf(e),Cf(e))}function Pf(r){if(r.v===zn)return!0;if(r.deps===null)return!1;for(const e of r.deps)if(gs.has(e)||(e.f&Xn)!==0&&Pf(e))return!0;return!1}function Er(r){var e=ss;try{return ss=!0,r()}finally{ss=e}}function Hv(r){if(!(typeof r!="object"||!r||r instanceof EventTarget)){if(Rs in r)gl(r);else if(!Array.isArray(r))for(let e in r){const n=r[e];typeof n=="object"&&n&&Rs in n&&gl(n)}}}function gl(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{gl(r[s],e)}catch{}const n=vo(r);if(n!==Object.prototype&&n!==Array.prototype&&n!==Map.prototype&&n!==Set.prototype&&n!==Date.prototype){const s=zu(n);for(let a in s){const i=s[a].get;if(i)try{i.call(r)}catch{}}}}}const zv=["touchstart","touchmove"];function jv(r){return zv.includes(r)}const $a=Symbol("events"),Mf=new Set,bl=new Set;function Wv(r,e,n,s={}){function a(i){if(s.capture||_l.call(e,i),!i.cancelBubble)return Oa(()=>n?.call(this,i))}return r.startsWith("pointer")||r.startsWith("touch")||r==="wheel"?Ts(()=>{e.addEventListener(r,a,s)}):e.addEventListener(r,a,s),a}function Ir(r,e,n,s,a){var i={capture:s,passive:a},o=Wv(r,e,n,i);(e===document.body||e===window||e===document||e instanceof HTMLMediaElement)&&cd(()=>{e.removeEventListener(r,o,i)})}function ne(r,e,n){(e[$a]??={})[r]=n}function yt(r){for(var e=0;e<r.length;e++)Mf.add(r[e]);for(var n of bl)n(r)}let Fo=null,Go=!1;function _l(r){var e=this,n=e.ownerDocument,s=r.type,a=r.composedPath?.()||[],i=a[0]||r.target;Fo=r,Go||(Go=!0,setTimeout(()=>{Go=!1,Fo=null}));var o=0,l=Fo===r&&r[$a];if(l){var f=a.indexOf(l);if(f!==-1&&(e===document||e===window)){r[$a]=e;return}var p=a.indexOf(e);if(p===-1)return;f<=p&&(o=f)}if(i=a[o]||r.target,i!==e){Hu(r,"currentTarget",{configurable:!0,get(){return i||n}});var b=Wt,g=Ht;Zr(null),Es(null);try{for(var k,y=[];i!==null&&i!==e;){try{var S=i[$a]?.[s];S!=null&&(!i.disabled||r.target===i)&&S.call(i,r)}catch(T){k?y.push(T):k=T}if(r.cancelBubble)break;o++,i=o<a.length?a[o]:null}if(k){for(let T of y)queueMicrotask(()=>{throw T});throw k}}finally{r[$a]=e,delete r.currentTarget,Zr(b),Es(g)}}}const Kv=globalThis?.window?.trustedTypes&&globalThis.window.trustedTypes.createPolicy("svelte-trusted-html",{createHTML:r=>r});function Yv(r){return Kv?.createHTML(r)??r}function Of(r){var e=Cv("template");return e.innerHTML=Yv(r.replaceAll("<!>","<!---->")),e.content}function Ta(r,e){var n=Ht;n.nodes===null&&(n.nodes={start:r,end:e,a:null,t:null})}function _(r,e){var n=(e&Xu)!==0,s=(e&Qm)!==0,a,i=!r.startsWith("<!>");return()=>{a===void 0&&(a=Of(i?r:"<!>"+r),n||(a=ms(a)));var o=s||bf?document.importNode(a,!0):a.cloneNode(!0);if(n){var l=ms(o),f=o.lastChild;Ta(l,f)}else Ta(o,o);return o}}function qv(r,e,n="svg"){var s=!r.startsWith("<!>"),a=(e&Xu)!==0,i=`<${n}>${s?r:"<!>"+r}</${n}>`,o;return()=>{if(!o){var l=Of(i),f=ms(l);if(a)for(o=document.createDocumentFragment();ms(f);)o.appendChild(ms(f));else o=ms(f)}var p=o.cloneNode(!0);if(a){var b=ms(p),g=p.lastChild;Ta(b,g)}else Ta(p,p);return p}}function Ws(r,e){return qv(r,e,"svg")}function Qn(r=""){{var e=xs(r+"");return Ta(e,e),e}}function St(){var r=document.createDocumentFragment(),e=document.createComment(""),n=xs();return r.append(e,n),Ta(e,n),r}function v(r,e){r!==null&&r.before(e)}function $v(r){let e=0,n=zs(0),s;return()=>{dd()&&(t(n),_i(()=>(e===0&&(s=Er(()=>r(()=>hs(n)))),e+=1,()=>{Ts(()=>{e-=1,e===0&&(s?.(),s=void 0,hs(n))})})))}}var Xv=la|Ma;function Lf(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=$v(()=>(this.#h=zs(this.#d),()=>{this.#h=null}));constructor(e,n,s,a){this.#e=e,this.#t=n,this.#s=i=>{var o=Ht;o.b=this,o.f|=ul,s(i)},this.parent=Ht.b,this.transform_error=a??this.parent?.transform_error??(i=>i),this.#a=Ei(()=>{this.#p()},Xv)}#_(){try{this.#r=Yr(()=>this.#s(this.#e))}catch(e){this.error(e)}}#m(e){const n=this.#t.failed,{reset:s,invoke_onerror:a}=this.#b(e);Ts(a),n&&(this.#l=Yr(()=>{n(this.#e,()=>e,()=>s)}))}#b(e){var n=!1,s=!1;const a=()=>{if(n){tv();return}n=!0,s&&fv(),this.#l!==null&&aa(this.#l,()=>{this.#l=null}),this.#E(()=>{this.#p()})};return{reset:a,invoke_onerror:()=>{try{s=!0,this.#t.onerror?.(e,a),s=!1}catch(o){vs(o,this.#a&&this.#a.parent)}}}}#y(){const e=this.#t.pending;e&&(this.is_pending=!0,this.#i=Yr(()=>e(this.#e)),Ts(()=>{var n=this.#o=document.createDocumentFragment(),s=xs(),a=!1;if(n.append(s),this.#r=this.#E(()=>{try{return Yr(()=>this.#s(s))}catch(i){try{this.error(i),a=!0}catch(o){vs(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,aa(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=Yr(()=>{this.#s(this.#e)}),this.#c>0){var e=this.#o=document.createDocumentFragment();fd(this.#r,e);const n=this.#t.pending;this.#i=Yr(()=>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){of(e,this.#f,this.#g)}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!this.#t.pending}#E(e){var n=Ht,s=Wt,a=Fn;Es(this.#a),Zr(this.#a),Sa(this.#a.ctx);try{return Hs.ensure(),e()}finally{Es(n),Zr(s),Sa(a)}}#k(e,n){if(!this.has_pending_snippet()){this.parent&&this.parent.#k(e,n);return}this.#c+=e,this.#c===0&&(this.#S(n),this.#i&&aa(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,Ts(()=>{this.#u=!1,this.#h&&ka(this.#h,this.#d)}))}get_effect_pending(){return this.#v(),t(this.#h)}error(e){if(!this.#t.onerror&&!this.#t.failed)throw e;Pt?.is_fork?(this.#r&&Pt.skip_effect(this.#r),this.#i&&Pt.skip_effect(this.#i),this.#l&&Pt.skip_effect(this.#l),Pt.oncommit(()=>{this.#w(e)})):this.#w(e)}#w(e){this.#r&&(Nr(this.#r),this.#r=null),this.#i&&(Nr(this.#i),this.#i=null),this.#l&&(Nr(this.#l),this.#l=null);let n=this.#t.failed;const s=a=>{const{reset:i,invoke_onerror:o}=this.#b(a);o(),n&&(this.#l=this.#E(()=>{try{return Yr(()=>{var l=Ht;l.b=this,l.f|=ul,n(this.#e,()=>a,()=>i)})}catch(l){return vs(l,this.#a.parent),null}}))};Ts(()=>{var a;try{a=this.transform_error(e)}catch(i){vs(i,this.#a&&this.#a.parent);return}a!==null&&typeof a=="object"&&typeof a.then=="function"?a.then(s,i=>vs(i,this.#a&&this.#a.parent)):s(a)})}}function h(r,e){var n=e==null?"":typeof e=="object"?`${e}`:e;n!==(r[ml]??=r.nodeValue)&&(r[ml]=n,r.nodeValue=`${n}`)}function Zv(r,e){return Jv(r,e)}const Ci=new Map;function Jv(r,{target:e,anchor:n,props:s={},events:a,context:i,intro:o=!0,transformError:l}){Dv();var f=void 0,p=Lv(()=>{var b=n??e.appendChild(xs());Lf(b,{pending:()=>{}},y=>{dt({});var S=Fn;i&&(S.c=i),a&&(s.$$events=a),f=r(y,s)||rd(),ct()},l);var g=new Set,k=y=>{for(var S=0;S<y.length;S++){var T=y[S];if(!g.has(T)){g.add(T);var I=jv(T);for(const R of[e,document]){var C=Ci.get(R);C===void 0&&(C=new Map,Ci.set(R,C));var D=C.get(T);D===void 0?(R.addEventListener(T,_l,{passive:I}),C.set(T,1)):C.set(T,D+1)}}}};return k(mo(Mf)),bl.add(k),()=>{for(var y of g)for(const I of[e,document]){var S=Ci.get(I),T=S.get(y);--T==0?(I.removeEventListener(y,_l),S.delete(y),S.size===0&&Ci.delete(I)):S.set(y,T)}bl.delete(k),b!==n&&b.parentNode?.removeChild(b)}});return ep.set(f,p),f}let ep=new WeakMap;class hd{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)so(s),this.#s.delete(n);else{var a=this.#t.get(n);a&&(so(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&&(Nr(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();fd(o,p),p.append(xs()),this.#t.set(i,{effect:o,fragment:p})}else Nr(o);this.#s.delete(i),this.#n.delete(i)};this.#a||!s?(this.#s.add(i),aa(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)||(Nr(a.effect),this.#t.delete(s))};ensure(e,n){var s=Pt,a=yf();if(n&&!this.#n.has(e)&&!this.#t.has(e))if(a){var i=document.createDocumentFragment(),o=xs();i.append(o),this.#t.set(e,{effect:Yr(()=>n(o)),fragment:i})}else this.#n.set(e,Yr(()=>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 hd(r),a=n?la:0;function i(o,l){s.ensure(o,l)}Ei(()=>{var o=!1;e((l,f=0)=>{o=!0,i(f,l)}),o||i(-1,null)},a)}const tp=Symbol("NaN");function np(r,e,n){var s=new hd(r);Ei(()=>{var a=e();a!==a&&(a=tp),s.ensure(a,n)})}function ao(r,e){return e}function rp(r,e,n){for(var s=[],a=e.length,i,o=e.length,l=0;l<a;l++){let g=e[l];aa(g,()=>{if(i){if(i.pending.delete(g),i.done.add(g),i.pending.size===0){var k=r.outrogroups;El(r,mo(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,b=p.parentNode;Nv(b),b.append(p),r.items.clear()}El(r,e,!f)}else i={pending:new Set(e),done:new Set},(r.outrogroups??=new Set).add(i)}function El(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|=ps;const o=document.createDocumentFragment();fd(i,o)}else Nr(e[a],n)}}var ac;function je(r,e,n,s,a,i=null){var o=r,l=new Map,f=(e&$u)!==0;if(f){var p=r;o=p.appendChild(xs())}var b=null,g=df(()=>{var R=n();return pi(R)?R:R==null?[]:mo(R)}),k,y=new Map,S=!0;function T(R){(D.effect.f&Dr)===0&&(D.pending.delete(R),D.fallback=b,sp(D,k,o,e,s),b!==null&&(k.length===0?(b.f&ps)===0?so(b):(b.f^=ps,Xa(b,null,o)):aa(b,()=>{b=null})))}function I(R){D.pending.delete(R)}var C=Ei(()=>{k=t(g);for(var R=k.length,P=new Set,K=Pt,X=yf(),ae=0;ae<R;ae+=1){var ue=k[ae],fe=s(ue,ae),B=S?null:l.get(fe);B?(B.v&&ka(B.v,ue),B.i&&ka(B.i,ae),X&&K.unskip_effect(B.e)):(B=ap(l,S?o:ac??=xs(),ue,fe,ae,a,e,n),S||(B.e.f|=ps),l.set(fe,B)),P.add(fe)}if(R===0&&i&&!b&&(S?b=Yr(()=>i(o)):(b=Yr(()=>i(ac??=xs())),b.f|=ps)),R>P.size&&rv(),!S)if(y.set(K,P),X){for(const[re,de]of l)P.has(re)||K.skip_effect(de.e);K.oncommit(T),K.ondiscard(I)}else T(K);t(g)}),D={effect:C,items:l,pending:y,outrogroups:null,fallback:b};S=!1}function Ha(r){for(;r!==null&&(r.f&Qr)===0;)r=r.next;return r}function sp(r,e,n,s,a){var i=(s&Wm)!==0,o=e.length,l=r.items,f=Ha(r.effect.first),p,b=null,g,k=[],y=[],S,T,I,C;if(i)for(C=0;C<o;C+=1)S=e[C],T=a(S,C),I=l.get(T).e,(I.f&ps)===0&&(I.nodes?.a?.measure(),(g??=new Set).add(I));for(C=0;C<o;C+=1){if(S=e[C],T=a(S,C),I=l.get(T).e,r.outrogroups!==null)for(const B of r.outrogroups)B.pending.delete(I),B.done.delete(I);if((I.f&_r)!==0&&(so(I),i&&(I.nodes?.a?.unfix(),(g??=new Set).delete(I))),(I.f&ps)!==0)if(I.f^=ps,I===f)Xa(I,null,n);else{var D=b?b.next:f;I===r.effect.last&&(r.effect.last=I.prev),I.prev&&(I.prev.next=I.next),I.next&&(I.next.prev=I.prev),Ls(r,b,I),Ls(r,I,D),Xa(I,D,n),b=I,k=[],y=[],f=Ha(b.next);continue}if(I!==f){if(p!==void 0&&p.has(I)){if(k.length<y.length){var R=y[0],P;b=R.prev;var K=k[0],X=k[k.length-1];for(P=0;P<k.length;P+=1)Xa(k[P],R,n);for(P=0;P<y.length;P+=1)p.delete(y[P]);Ls(r,K.prev,X.next),Ls(r,b,K),Ls(r,X,R),f=R,b=X,C-=1,k=[],y=[]}else p.delete(I),Xa(I,f,n),Ls(r,I.prev,I.next),Ls(r,I,b===null?r.effect.first:b.next),Ls(r,b,I),b=I;continue}for(k=[],y=[];f!==null&&f!==I;)(p??=new Set).add(f),y.push(f),f=Ha(f.next);if(f===null)continue}(I.f&ps)===0&&k.push(I),b=I,f=Ha(I.next)}if(r.outrogroups!==null){for(const B of r.outrogroups)B.pending.size===0&&(El(r,mo(B.done)),r.outrogroups?.delete(B));r.outrogroups.size===0&&(r.outrogroups=null)}if(f!==null||p!==void 0){var ae=[];if(p!==void 0)for(I of p)(I.f&_r)===0&&ae.push(I);for(;f!==null;)(f.f&_r)===0&&f!==r.fallback&&ae.push(f),f=Ha(f.next);var ue=ae.length;if(ue>0){var fe=(s&$u)!==0&&o===0?n:null;if(i){for(C=0;C<ue;C+=1)ae[C].nodes?.a?.measure();for(C=0;C<ue;C+=1)ae[C].nodes?.a?.fix()}rp(r,ae,fe)}}i&&Ts(()=>{if(g!==void 0)for(I of g)I.nodes?.a?.apply()})}function ap(r,e,n,s,a,i,o,l){var f=(o&zm)!==0?(o&Km)===0?xv(n,!1,!1):zs(n):null,p=(o&jm)!==0?zs(a):null;return{v:f,i:p,e:Yr(()=>(i(e,f??n,p??a,l),()=>{r.delete(s)}))}}function Xa(r,e,n){if(r.nodes)for(var s=r.nodes.start,a=r.nodes.end,i=e&&(e.f&ps)===0?e.nodes.start:n;s!==null;){var o=bi(s);if(i.before(s),s===a)return;s=o}}function Ls(r,e,n){e===null?r.effect.first=n:e.next=n,n===null?r.effect.last=e:n.prev=e}function Vs(r,e,...n){var s=new hd(r);Ei(()=>{const a=e()??null;s.ensure(a,a&&(i=>a(i,...n)))},la)}function Ff(r,e,n){go(()=>{var s=Er(()=>e(r,n?.())||{});if(n&&s?.update){var a=!1,i={};_i(()=>{var o=n();Hv(o),a&&Zu(i,o)&&(i=o,s.update(o))}),a=!0}if(s?.destroy)return()=>s.destroy()})}function Gf(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=Gf(r[e]))&&(s&&(s+=" "),s+=n)}else for(n in r)r[n]&&(s&&(s+=" "),s+=n);return s}function ip(){for(var r,e,n=0,s="",a=arguments.length;n<a;n++)(r=arguments[n])&&(e=Gf(r))&&(s&&(s+=" "),s+=e);return s}function op(r){return typeof r=="object"?ip(r):r??""}const ic=[...`
|
|
2
|
+
\r\f \v\uFEFF`];function lp(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||ic.includes(s[o-1]))&&(l===s.length||ic.includes(s[l]))?s=(o===0?"":s.substring(0,o))+s.substring(l+1):o=l}}return s===""?null:s}function oc(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 dp(r,e){if(e){var n="",s,a;return Array.isArray(e)?(s=e[0],a=e[1]):s=e,s&&(n+=oc(s)),a&&(n+=oc(a,!0)),n=n.trim(),n===""?null:n}return String(r)}function Et(r,e,n,s,a,i){var o=r[fl];if(o!==n||o===void 0){var l=lp(n,s,i);l==null?r.removeAttribute("class"):e?r.className=l:r.setAttribute("class",l),r[fl]=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 Uo(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 On(r,e,n,s){var a=r[hl];if(a!==e){var i=dp(e,s);i==null?r.removeAttribute("style"):r.style.cssText=i,r[hl]=e}else s&&(Array.isArray(s)?(Uo(r,n?.[0],s[0]),Uo(r,n?.[1],s[1],"important")):Uo(r,n,s));return s}function cp(r,e){e?r.hasAttribute("selected")||r.setAttribute("selected",""):r.removeAttribute("selected")}function up(r,e){var n=r.__defaultValue,s=r.multiple,a=s?n??[]:null;if(!(s&&!pi(a))){r.selectedIndex;for(var i of r.options){var o=ba(i);cp(i,s?a.includes(o):gf(o,n))}}}function Pn(r,e,n=!1){if(r.multiple){if(e==null)return;if(!pi(e))return ev();for(var s of r.options)s.selected=e.includes(ba(s));return}for(s of r.options){var a=ba(s);if(gf(a,e)){s.selected=!0;return}}(!n||e!==void 0)&&(r.selectedIndex=-1)}function Yt(r){var e=new MutationObserver(n=>{n.every(fp)||("__defaultValue"in r&&up(r),"__value"in r&&Pn(r,r.__value))});e.observe(r,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),cd(()=>{e.disconnect()})}function yr(r,e,n=e){var s=new WeakSet,a=!0;ad(r,"change",i=>{var o=i?"[selected]":":checked",l;if(r.multiple)l=[].map.call(r.querySelectorAll(o),ba);else{var f=r.querySelector(o)??r.querySelector("option:not([disabled])");l=f&&ba(f)}n(l),r.__value=l,Pt!==null&&s.add(Pt)}),go(()=>{var i=e();if(r===document.activeElement){var o=Pt;if(s.has(o))return}if(Pn(r,i,a),a&&i===void 0){var l=r.querySelector(":checked");l!==null&&(i=ba(l),n(i))}r.__value=i,a=!1})}function ba(r){return"__value"in r?r.__value:r.value}function fp(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 hp=Symbol("is custom element"),mp=Symbol("is html"),vp=Hm?"progress":"PROGRESS";function on(r,e){var n=md(r);n.value===(n.value=e??void 0)||r.value===e&&(e!==0||r.nodeName!==vp)||(r.value=e??"")}function Cr(r,e){var n=md(r);n.checked!==(n.checked=e??void 0)&&(r.checked=e)}function x(r,e,n,s){var a=md(r);a[e]!==(a[e]=n)&&(e==="loading"&&(r[Vm]=n),n==null?r.removeAttribute(e):typeof n!="string"&&pp(r).has(e)?r[e]=n:r.setAttribute(e,n))}function md(r){return r[qu]??={[hp]:r.nodeName.includes("-"),[mp]:r.namespaceURI===Zm}}var lc=new Map;function pp(r){var e=r.getAttribute("is")||r.nodeName,n=lc.get(e);if(n)return n;lc.set(e,n=new Set);for(var s,a=r,i=Element.prototype;i!==a;){s=zu(a);for(var o in s)s[o].set&&o!=="innerHTML"&&o!=="textContent"&&o!=="innerText"&&n.add(o);a=vo(a)}return n}function Sn(r,e,n=e){var s=new WeakSet;ad(r,"input",async a=>{var i=a?r.defaultValue:r.value;if(i=Bo(r)?Vo(i):i,n(i),Pt!==null&&s.add(Pt),await Aa(),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))}}}),Er(e)==null&&r.value&&(n(Bo(r)?Vo(r.value):r.value),Pt!==null&&s.add(Pt)),_i(()=>{var a=e();if(r===document.activeElement){var i=Pt;if(s.has(i))return}Bo(r)&&a===Vo(r.value)||r.type==="date"&&!a&&!r.value||a!==r.value&&(r.value=a??"")})}function hr(r,e,n=e){ad(r,"change",s=>{var a=s?r.defaultChecked:r.checked;n(a)}),Er(e)==null&&n(r.checked),_i(()=>{var s=e();r.checked=!!s})}function Bo(r){var e=r.type;return e==="number"||e==="range"}function Vo(r){return r===""?null:+r}function Ho(r,e){return r===e||r?.[Rs]===e}function fn(r=rd(),e,n,s){var a=Fn.r,i=Ht;return go(()=>{var o,l;return _i(()=>{o=l,l=s?.()||[],Er(()=>{Ho(n(...l),r)||(e(r,...l),o&&Ho(n(...o),r)&&e(null,...o))})}),()=>{let f=i;for(;f!==a&&f.parent!==null&&f.parent.f&Ji;)f=f.parent;const p=()=>{l&&Ho(n(...l),r)&&e(null,...l)},b=f.teardown;f.teardown=()=>{p(),b?.()}}}),r}function V(r,e,n,s){var a=!0,i=(n&$m)!==0,o=(n&Xm)!==0,l=s,f=!0,p=void 0,b=()=>o&&a?(p??=ni(s),t(p)):(f&&(f=!1,l=o?Er(s):s),l);let g;if(i){var k=Rs in r||Bm in r;g=pa(r,e)?.set??(k&&e in r?P=>r[e]=P:void 0)}var y,S=!1;i?[y,S]=bv(()=>r[e]):y=r[e],y===void 0&&s!==void 0&&(y=b(),g&&(lv(),g(y)));var T;if(T=()=>{var P=r[e];return P===void 0?b():(f=!0,P)},(n&qm)===0)return T;if(g){var I=r.$$legacy;return(function(P,K){return arguments.length>0?((!K||I||S)&&g(K?T():P),P):T()})}var C=!1,D=((n&Ym)!==0?ni:df)(()=>(C=!1,T()));i&&t(D);var R=Ht;return(function(P,K){if(arguments.length>0){const X=K?t(D):i?Be(P):P;return u(D,X),C=!0,l!==void 0&&(l=X),P}return Cs&&C||(R.f&Dr)!==0?D.v:t(D)})}function gp(r){Fn===null&&td(),st(()=>{const e=Er(r);if(typeof e=="function")return e})}function bp(r){Fn===null&&td(),gp(()=>()=>Er(r))}const _p="5";typeof window<"u"&&((window.__svelte??={}).v??=new Set).add(_p);const yl=Symbol("homematic-manager.data-table");function Ep(r){tf(yl,r)}function yp(){return nf(yl)?ef(yl):void 0}function Sp(r,e={}){return r.replace(/\{(\w+)\}/g,(n,s)=>{const a=e[s];return a===void 0?n:String(a)})}function Uf(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 kp=_(`<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 wp(r,e){dt(e,!0);let n=V(e,"openExternal",3,void 0),s=V(e,"testId",3,void 0);function a(o){Uf(o,e.href,n())}var i=kp();E(()=>{x(i,"href",e.href),x(i,"title",e.label),x(i,"aria-label",e.label),x(i,"data-testid",s())}),ne("click",i,a),v(r,i),ct()}yt(["click"]);const Bf={ok:"✔",busy:"↻",absent:"–",bad:"✕"};function Vf(r){return r.subscribing===!0||(r.waiting===!0||r.reconnecting===!0)&&!r.connected?"busy":r.connected?"ok":r.absent===!0?"absent":"bad"}function Ap(r){return r.filter(e=>!e.connected&&e.subscribing!==!0&&e.unreachable===!0).map(e=>e.name)}function Tp(r){const e=r.map(n=>Vf(n));return e.includes("bad")?"bad":e.includes("busy")?"busy":e.includes("ok")?"ok":"absent"}function Rp(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 xp(r){return r.find(e=>e.callbackWarning!==void 0)?.callbackWarning}function Ip(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 Dp=_('<span role="img"> </span>');function Np(r,e){dt(e,!0);let n=V(e,"backendConnected",3,!0),s=V(e,"allConnectedText",3,"Connected"),a=V(e,"someNotConnectedText",3,"Not connected"),i=V(e,"notPresentText",3,"Not present"),o=V(e,"subscribingText",3,"Subscribing"),l=V(e,"waitingText",3,"Waiting"),f=V(e,"reconnectingText",3,"Reconnecting"),p=V(e,"testId",3,void 0);const b=c(()=>Tp(e.interfaces)),g=c(()=>{if(!n())return a();switch(t(b)){case"ok":return s();case"busy":return e.interfaces.some(T=>T.subscribing===!0)?o():e.interfaces.some(T=>T.reconnecting===!0&&!T.connected)?f():l();case"absent":return i();default:return a()}});var k=Dp();let y;var S=m(k,!0);E(()=>{y=Et(k,1,`hmm-connection hmm-connection-${t(b)??""}`,"svelte-18vw5u5",y,{"hmm-connection-offline":!n()}),x(k,"aria-label",t(g)),x(k,"title",t(g)),x(k,"data-mark",t(b)),x(k,"data-testid",p()),h(S,Bf[t(b)])}),v(r,k),ct()}var Cp=_('<span class="hmm-interface-warn svelte-m4i49t" aria-hidden="true">⚠</span>'),Pp=_('<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>'),Mp=_('<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>'),Op=_("<span> </span>"),Lp=_('<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>'),Fp=_('<button type="button" class="hmm-interface-retry svelte-m4i49t" data-testid="interface-callback-use-auto"> </button>'),Gp=_('<div class="hmm-interface-warning svelte-m4i49t" role="alert" data-testid="interface-callback-warning"><span class="svelte-m4i49t"> </span> <!></div>'),Up=_('<div class="hmm-interface-foot svelte-m4i49t"><button type="button" class="hmm-interface-retry svelte-m4i49t"> </button></div>'),Bp=_('<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>'),Vp=_('<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 Hp(r,e){dt(e,!0);let n=V(e,"selected",3,""),s=V(e,"host",3,""),a=V(e,"backendConnected",3,!0),i=V(e,"details",19,()=>({})),o=V(e,"label",3,"Select an interface"),l=V(e,"listLabel",3,"Interfaces"),f=V(e,"connectedText",3,"Connected"),p=V(e,"notConnectedText",3,"Not connected"),b=V(e,"notPresentText",3,"Not present"),g=V(e,"notAnsweringText",3,"Not answering"),k=V(e,"retryText",3,"Retry now"),y=V(e,"onretry",3,void 0),S=V(e,"subscribingText",3,"Subscribing"),T=V(e,"waitingText",3,"Waiting"),I=V(e,"reconnectingText",3,"Reconnecting"),C=V(e,"allConnectedText",3,"All interfaces are connected"),D=V(e,"someNotConnectedText",3,"Not every interface is connected"),R=V(e,"portLabel",3,"Port"),P=V(e,"tlsLabel",3,"TLS"),K=V(e,"devicesLabel",3,U=>`${String(U)} devices`),X=V(e,"dutyCycleLabel",3,U=>`Duty cycle ${String(U)} %`),ae=V(e,"publishCallbackPorts",3,!1),ue=V(e,"callbackPortInUseLabel",3,U=>`Callback port ${String(U)} is in use`),fe=V(e,"callbackPortFailedLabel",3,U=>`Callback port ${String(U)} cannot be opened`),B=V(e,"publishPortText",3,"Publish this port unchanged"),re=V(e,"callbackWarningLabel",3,U=>U.reason==="notLocal"?`The callback address ${U.address} is not an address of this machine; ${U.auto} is used instead`:`The callback address ${U.address} is not in the CCU's network; the CCU may not reach it and send no events`),de=V(e,"useAutomaticText",3,"Use automatic"),ee=V(e,"onuseautomatic",3,void 0),se=V(e,"onselect",3,void 0),Y=V(e,"store",3,void 0),Z=V(e,"storeTestId",3,void 0),te=V(e,"testId",3,void 0),xe=N(!1),J=N(0),ye=N(void 0),Re=N(void 0),ge=N(void 0),H=N(void 0);const pe=c(()=>xp(e.interfaces)),ve=c(()=>[t(H),t(ge)].filter(U=>U!==void 0)),Q=c(()=>y()===void 0?[]:Ap(e.interfaces));let oe=Be([]);const F=c(()=>[...Y()!==void 0&&Y().selectable?[Y().id]:[],...e.interfaces.map(U=>U.name)]),W=c(()=>t(F).indexOf(n())),O=c(()=>Y()!==void 0&&Y().id===n()?Y().label:n()),z=c(()=>Y()!==void 0&&Y().selectable?0:-1);function ce(U,Ne){if(U==="bad"&&Ne.unreachable===!0)return g();switch(U){case"ok":return f();case"busy":return Ne.subscribing===!0?S():Ne.reconnecting===!0?I():T();case"absent":return b();default:return p()}}function me(U){return Ip(U,i()[U.name],{port:R(),tls:P(),devices:K(),dutyCycle:X()}).join(" · ")}function be(){u(J,t(W)<0?0:t(W),!0),u(xe,!0)}function Ee(U){u(xe,!1),U&&t(Re)?.focus()}function le(U){Ee(!0),U!==n()&&se()?.(U)}function G(U){t(F).length!==0&&u(J,(t(J)+U+t(F).length)%t(F).length)}st(()=>{t(xe)&&oe[t(J)]?.focus()});function L(U){if(U.key==="ArrowDown"||U.key==="ArrowUp"){U.preventDefault(),t(xe)?G(U.key==="ArrowDown"?1:-1):be();return}U.key==="Escape"&&t(xe)&&(U.preventDefault(),Ee(!0))}function A(U,Ne){switch(U.key){case"ArrowDown":{U.preventDefault(),G(1);break}case"ArrowUp":{U.preventDefault(),G(-1);break}case"Home":{U.preventDefault(),u(J,0);break}case"End":{U.preventDefault(),u(J,t(F).length-1);break}case"Enter":case" ":{U.preventDefault(),le(t(F)[Ne]??"");break}case"Escape":{U.preventDefault(),Ee(!0);break}case"Tab":{const Le=t(ve)[0];if(!U.shiftKey&&Le!==void 0){U.preventDefault(),Le.focus();break}Ee(!1);break}}}function M(U){const Ne=t(ve).findIndex(Le=>Le===U.currentTarget);if(U.key==="Escape")U.preventDefault(),Ee(!0);else if(U.key==="Tab"&&U.shiftKey)U.preventDefault(),(t(ve)[Ne-1]??oe[t(J)])?.focus();else if(U.key==="Tab"){const Le=t(ve)[Ne+1];Le===void 0?Ee(!1):(U.preventDefault(),Le.focus())}}function he(U){t(xe)&&t(ye)&&U.target instanceof Node&&!t(ye).contains(U.target)&&Ee(!1)}var Te=Vp();Ir("mousedown",ca,he);var Pe=w(Te),He=w(Pe);{let U=c(()=>te()===void 0?void 0:`${te()}-summary`);Np(He,{get interfaces(){return e.interfaces},get backendConnected(){return a()},get allConnectedText(){return C()},get someNotConnectedText(){return D()},get notPresentText(){return b()},get subscribingText(){return S()},get waitingText(){return T()},get reconnectingText(){return I()},get testId(){return t(U)}})}var qe=d(He,2);{var it=U=>{var Ne=Cp();E(Le=>{x(Ne,"title",Le),x(Ne,"data-testid",te()===void 0?void 0:`${te()}-callback-warning`)},[()=>re()(t(pe))]),v(U,Ne)};$(qe,U=>{t(pe)!==void 0&&U(it)})}var tt=d(qe,2),Se=m(tt,!0);fn(Pe,U=>u(Re,U),()=>t(Re));var we=d(Pe,2);{var j=U=>{var Ne=Bp(),Le=w(Ne),ze=w(Le),_e=m(ze,!0),De=d(ze,2),Ce=m(De,!0),Fe=d(Le,2),Oe=w(Fe);{var Xe=mt=>{var ke=St(),Me=Ie(ke);{var Qe=bt=>{var rt=Pp();let qt;var xt=d(w(rt),2),Lt=m(xt,!0);fn(rt,Zt=>oe[t(z)]=Zt,()=>oe?.[t(z)]),E(()=>{qt=Et(rt,1,`hmm-interface-store hmm-meta-${Y().mark??""}`,"svelte-m4i49t",qt,{"hmm-interface-item-current":Y().id===n()}),x(rt,"aria-selected",Y().id===n()),x(rt,"tabindex",t(z)===t(J)?0:-1),x(rt,"title",Y().title),x(rt,"data-mark",Y().mark),x(rt,"data-provider",Y().provider),x(rt,"data-testid",Z()),h(Lt,Y().label)}),ne("click",rt,()=>le(Y().id)),ne("keydown",rt,Zt=>A(Zt,t(z))),v(bt,rt)},ut=bt=>{var rt=Mp(),qt=d(w(rt),2),xt=m(qt,!0);E(()=>{Et(rt,1,`hmm-interface-store hmm-interface-store-off hmm-meta-${Y().mark??""}`,"svelte-m4i49t"),x(rt,"title",Y().title),x(rt,"data-mark",Y().mark),x(rt,"data-provider",Y().provider),x(rt,"data-testid",Z()),h(xt,Y().label)}),v(bt,rt)};$(Me,bt=>{Y().selectable?bt(Qe):bt(ut,-1)})}v(mt,ke)};$(Oe,mt=>{Y()!==void 0&&mt(Xe)})}var Ye=d(Oe,2);je(Ye,19,()=>e.interfaces,mt=>mt.name,(mt,ke,Me)=>{const Qe=c(()=>Vf(t(ke))),ut=c(()=>t(z)+1+t(Me)),bt=c(()=>Rp(t(ke),ae(),{portInUse:ue(),portFailed:fe(),publish:B()}));var rt=Lp();let qt;var xt=w(rt),Lt=w(xt),Zt=m(Lt,!0),_n=d(Lt,2),gn=w(_n),ln=m(gn,!0),bn=d(gn),wn=d(xt,2),Zn=m(wn,!0),Kn=d(wn,2);{var Jt=Mt=>{var dn=Op();let Gn;var Nn=m(dn,!0);E(()=>{Gn=Et(dn,1,"hmm-interface-item-callback svelte-m4i49t",null,Gn,{"hmm-interface-item-callback-bad":t(bt).bad}),x(dn,"data-testid",`interface-callback-${t(ke).name}`),h(Nn,t(bt).text)}),v(Mt,dn)};$(Kn,Mt=>{t(bt)!==void 0&&Mt(Jt)})}fn(rt,(Mt,dn)=>oe[dn]=Mt,Mt=>oe?.[Mt],()=>[t(ut)]),E((Mt,dn)=>{qt=Et(rt,1,"hmm-interface-item svelte-m4i49t",null,qt,{"hmm-interface-item-current":t(ke).name===n()}),x(rt,"aria-selected",t(ke).name===n()),x(rt,"tabindex",t(ut)===t(J)?0:-1),x(rt,"title",t(Qe)==="bad"?t(ke).error??p():void 0),x(rt,"data-testid",`interface-item-${t(ke).name}`),h(Zt,t(ke).name),Et(_n,1,`hmm-interface-mark hmm-interface-mark-${t(Qe)??""}`,"svelte-m4i49t"),x(_n,"data-mark",t(Qe)),h(ln,Bf[t(Qe)]),h(bn,` ${Mt??""}`),h(Zn,dn)},[()=>ce(t(Qe),t(ke)),()=>me(t(ke))]),ne("click",rt,()=>le(t(ke).name)),ne("keydown",rt,Mt=>A(Mt,t(ut))),v(mt,rt)});var Ze=d(Fe,2);{var Je=mt=>{var ke=Gp(),Me=w(ke),Qe=m(Me,!0),ut=d(Me,2);{var bt=rt=>{var qt=Fp(),xt=m(qt,!0);fn(qt,Lt=>u(H,Lt),()=>t(H)),E(()=>h(xt,de())),ne("click",qt,()=>{Ee(!1),ee()()}),ne("keydown",qt,M),v(rt,qt)};$(ut,rt=>{ee()!==void 0&&rt(bt)})}E(rt=>h(Qe,rt),[()=>re()(t(pe))]),v(mt,ke)};$(Ze,mt=>{t(pe)!==void 0&&mt(Je)})}var at=d(Ze,2);{var gt=mt=>{var ke=Up(),Me=w(ke),Qe=m(Me,!0);fn(Me,ut=>u(ge,ut),()=>t(ge)),E(()=>{x(Me,"data-testid",te()===void 0?void 0:`${te()}-retry`),h(Qe,k())}),ne("click",Me,()=>y()?.(t(Q))),ne("keydown",Me,M),v(mt,ke)};$(at,mt=>{t(Q).length>0&&mt(gt)})}E(()=>{h(_e,s()===""?"—":s()),h(Ce,a()?f():p()),x(Fe,"aria-label",l())}),v(U,Ne)};$(we,U=>{t(xe)&&U(j)})}fn(Te,U=>u(ye,U),()=>t(ye)),E(()=>{x(Te,"data-testid",te()),x(Pe,"aria-expanded",t(xe)),x(Pe,"aria-label",o()),x(Pe,"title",o()),x(Pe,"data-testid",te()===void 0?void 0:`${te()}-trigger`),h(Se,t(O))}),ne("click",Pe,()=>t(xe)?Ee(!1):be()),ne("keydown",Pe,L),v(r,Te),ct()}yt(["click","keydown"]);var zp=_('<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 jp(r,e){let n=V(e,"visible",3,!1),s=V(e,"text",3,"Loading Homematic Manager..."),a=V(e,"testId",3,void 0);var i=St(),o=Ie(i);{var l=f=>{var p=zp(),b=w(p),g=d(w(b),2),k=m(g,!0);E(()=>{x(p,"data-testid",a()),h(k,s())}),v(f,p)};$(o,f=>{n()&&f(l)})}v(r,i)}function Wp(r){return r===void 0||!r.reachable?"bad":r.writable?"ok":"readonly"}function Kp(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 gr 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 Hf(r){if(typeof r!="object"||r===null)return!1;const e=r;return typeof e.message=="string"&&typeof e.kind=="string"}function Si(r,e="internal"){return r instanceof gr?r:Hf(r)?new gr(r):r instanceof Error?new gr({message:r.message,kind:e}):new gr({message:String(r),kind:e})}const Sl=5,Yp=5e3,qp=15e3;class $p{#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??Yp,this.#a=n.warnTtlMs??qp,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-Sl))}get hidden(){return Math.max(0,this.items.length-Sl)}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=Si(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 Xp=_('<button type="button" class="hmm-notices-more svelte-1pqi0mh"> </button>'),Qp=_("<strong> </strong>"),Zp=_('<div><span class="hmm-notice-text svelte-1pqi0mh"><!> </span> <button type="button" class="hmm-notice-close svelte-1pqi0mh">✕</button></div>'),Jp=_('<div class="hmm-notices svelte-1pqi0mh" role="log" aria-live="polite"><!> <!></div>');function eg(r,e){dt(e,!0);let n=V(e,"ondismiss",3,void 0),s=V(e,"dismissLabel",3,"Dismiss"),a=V(e,"visibleCount",3,Sl),i=V(e,"moreLabel",3,T=>`${T} more`),o=V(e,"lessLabel",3,"Show fewer"),l=V(e,"testId",3,void 0),f=N(!1);const p=c(()=>Math.max(0,e.notices.length-a())),b=c(()=>t(f)?e.notices:e.notices.slice(e.notices.length-Math.min(e.notices.length,a())));st(()=>{t(p)===0&&t(f)&&u(f,!1)});var g=Jp(),k=w(g);{var y=T=>{var I=Xp(),C=m(I,!0);E(D=>{x(I,"data-testid",l()===void 0?void 0:`${l()}-more`),x(I,"aria-expanded",t(f)),h(C,D)},[()=>t(f)?o():i()(t(p))]),ne("click",I,()=>u(f,!t(f))),v(T,I)};$(k,T=>{t(p)>0&&T(y)})}var S=d(k,2);je(S,17,()=>t(b),T=>T.id,(T,I)=>{var C=Zp();let D;var R=w(C),P=w(R);{var K=ue=>{var fe=Qp(),B=m(fe,!0);E(()=>h(B,t(I).interfaceName)),v(ue,fe)};$(P,ue=>{t(I).interfaceName!==void 0&&ue(K)})}var X=d(P),ae=d(R,2);E(()=>{D=Et(C,1,"hmm-notice svelte-1pqi0mh",null,D,{"hmm-notice-warn":t(I).level==="warn","hmm-notice-error":t(I).level==="error"}),h(X,` ${t(I).message??""}`),x(ae,"aria-label",s())}),ne("click",ae,()=>n()?.(t(I).id)),v(T,C)}),E(()=>x(g,"data-testid",l())),v(r,g),ct()}yt(["click"]);function io(r){return r===void 0?"":typeof r=="string"?r:typeof r=="number"||typeof r=="boolean"?String(r):JSON.stringify(r)}function zf(r,e){return new Date(r).toLocaleTimeString(e,{hour12:!1})}function Ja(r,e){const n=new Date(r);return`${n.toLocaleDateString(e)} ${n.toLocaleTimeString(e,{hour12:!1})}`}function tg(r){return r<1e3?`${Math.round(r)} ms`:`${(r/1e3).toFixed(2)} s`}function dc(r){return r.map(e=>typeof e=="string"?e:JSON.stringify(e)).join(", ")}const zi={minWidth:320,minHeight:160},kl=32;function ng(r,e){return{...r,minHeight:Math.max(0,Math.min(r.minHeight,e.height-kl))}}function Ra(r,e,n){return Math.min(Math.max(r,e),Math.max(e,n))}function jf(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 rg(r,e,n,s){return jf({...r,left:r.left+e,top:r.top+n},s)}function sg(r,e,n,s,a,i=zi){const o=r.left+r.width,l=r.top+r.height,f=e==="w",p=e==="n",b=f||e==="e"||e==="se",g=p||e==="s"||e==="se",k=Math.max(i.minWidth,f?o:a.width-r.left),y=Math.max(i.minHeight,p?l:a.height-r.top),S=b?Math.round(Ra(r.width+(f?-n:n),i.minWidth,Math.min(k,a.width))):r.width,T=g?Math.round(Ra(r.height+(p?-s:s),i.minHeight,Math.min(y,a.height))):r.height;return jf({left:f?o-S:r.left,top:p?l-T:r.top,width:S,height:T},a)}const ag=.5,oo=120;function vd(r,e){return{min:oo,max:Math.max(oo,r-e)}}function zo(r,e){const{min:n,max:s}=vd(r,e);return Math.round(Ra(r*ag,n,s))}function cc(r,e,n,s){const{min:a,max:i}=vd(n,s);return Math.round(Ra(r-e,a,i))}const Wf=new Map;function uc(r,e){Wf.set(r,e)}function ig(r){return Wf.get(r)}const Kf=new Map;function og(r,e){Kf.set(r,e)}function lg(r){return Kf.get(r)}var dg=_('<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>'),cg=_('<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>'),ug=_('<li class="hmm-rpclog-empty svelte-7sszxb"> </li>'),fg=_('<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 hg(r,e){dt(e,!0);let n=V(e,"open",15,!1),s=V(e,"pending",19,()=>[]),a=V(e,"title",3,"RPC log"),i=V(e,"emptyText",3,"No RPC calls yet"),o=V(e,"pendingText",3,"in progress"),l=V(e,"clearLabel",3,"Clear"),f=V(e,"closeLabel",3,"Close"),p=V(e,"resizeLabel",3,"Resize the RPC log"),b=V(e,"hideBackground",15,!1),g=V(e,"hideBackgroundLabel",3,"Hide background calls"),k=V(e,"originLabels",19,()=>({console:"console",ui:"UI",background:"background"})),y=V(e,"openLabel",3,"Open in console"),S=V(e,"onopen",3,void 0),T=V(e,"reservedHeight",3,void 0),I=V(e,"onclear",3,void 0),C=V(e,"testId",3,void 0);function D(de){const ee=io(de.result);return de.resultBytes===void 0?ee:`${ee} (${String(Math.round(de.resultBytes/1024))} kB)`}const R="rpclog";let P=N(Be(ig(R)));function K(){if(T()!==void 0)return T();const de=getComputedStyle(document.documentElement).getPropertyValue("--hmm-header-height"),ee=Number.parseFloat(de);return Number.isFinite(ee)?ee:36}st(()=>{n()&&t(P)===void 0&&u(P,zo(window.innerHeight,K()),!0)});function X(de){if(de.button!==0)return;const ee=t(P)??zo(window.innerHeight,K()),se=de.clientY;de.preventDefault();const Y=te=>{u(P,cc(ee,te.clientY-se,window.innerHeight,K()),!0)},Z=()=>{window.removeEventListener("pointermove",Y),window.removeEventListener("pointerup",Z),window.removeEventListener("pointercancel",Z),t(P)!==void 0&&uc(R,t(P))};window.addEventListener("pointermove",Y),window.addEventListener("pointerup",Z),window.addEventListener("pointercancel",Z)}const ae=c(()=>n()&&t(P)!==void 0?vd(window.innerHeight,K()).max:oo);function ue(de){const ee=de.key==="ArrowUp"?-20:de.key==="ArrowDown"?20:0;if(ee===0)return;de.preventDefault();const se=t(P)??zo(window.innerHeight,K());u(P,cc(se,ee,window.innerHeight,K()),!0),uc(R,t(P))}var fe=St(),B=Ie(fe);{var re=de=>{var ee=fg();let se;var Y=w(ee),Z=d(Y,2),te=w(Z),xe=m(te,!0),J=d(te,2),ye=w(J),Re=d(ye),ge=d(J,2),H=m(ge,!0),pe=d(ge,2),ve=d(Z,2),Q=w(ve);je(Q,17,s,O=>O.id,(O,z)=>{var ce=dg(),me=d(w(ce),2),be=m(me,!0),Ee=d(me,2),le=m(Ee),G=d(Ee,2),L=m(G,!0),A=d(G,2),M=m(A,!0);E(he=>{h(be,k().ui),h(le,`${t(z).interfaceName??""} ${t(z).method??""}`),h(L,he),h(M,o())},[()=>dc(t(z).params)]),v(O,ce)});var oe=d(Q,2);je(oe,17,()=>e.entries,O=>O.id,(O,z)=>{var ce=cg();let me;var be=w(ce),Ee=m(be,!0),le=d(be,2),G=m(le,!0),L=d(le,2),A=m(L),M=d(L,2),he=m(M,!0),Te=d(M,2),Pe=w(Te);{var He=we=>{var j=Qn();E(U=>h(j,U),[()=>D(t(z))]),v(we,j)},qe=we=>{var j=Qn();E(()=>h(j,t(z).error??"")),v(we,j)};$(Pe,we=>{t(z).ok?we(He):we(qe,-1)})}var it=d(Te,2),tt=m(it,!0),Se=d(it,2);E((we,j,U)=>{me=Et(ce,1,"hmm-rpclog-entry svelte-7sszxb",null,me,{"hmm-rpclog-failed":!t(z).ok,"hmm-rpclog-background":t(z).origin==="background"}),x(ce,"data-origin",t(z).origin),h(Ee,we),h(G,k()[t(z).origin]),h(A,`${t(z).interfaceName??""} ${t(z).method??""}`),h(he,j),h(tt,U),x(Se,"title",y()),x(Se,"aria-label",`${y()}: ${t(z).method}`)},[()=>zf(t(z).timestamp),()=>dc(t(z).params),()=>tg(t(z).durationMs)]),ne("click",Se,()=>S()?.(t(z))),v(O,ce)});var F=d(oe,2);{var W=O=>{var z=ug(),ce=m(z,!0);E(()=>h(ce,i())),v(O,z)};$(F,O=>{e.entries.length===0&&s().length===0&&O(W)})}E(()=>{x(ee,"aria-label",a()),x(ee,"data-testid",C()),se=On(ee,"",se,{height:t(P)===void 0?void 0:`${t(P)}px`}),x(Y,"aria-label",p()),x(Y,"aria-valuenow",t(P)??0),x(Y,"aria-valuemin",oo),x(Y,"aria-valuemax",t(ae)),x(Y,"data-testid",C()===void 0?void 0:`${C()}-resize`),h(xe,a()),x(ye,"data-testid",C()===void 0?void 0:`${C()}-hide-background`),h(Re,` ${g()??""}`),h(H,l()),x(pe,"aria-label",f())}),ne("pointerdown",Y,X),ne("keydown",Y,ue),hr(ye,b),ne("click",ge,()=>I()?.()),ne("click",pe,()=>n(!1)),v(de,ee)};$(B,de=>{n()&&de(re)})}v(r,fe),ct()}yt(["pointerdown","keydown","click"]);var mg=_('<button type="button" class="hmm-dialog-close svelte-jby388">✕</button>'),vg=_('<div class="hmm-dialog-buttons svelte-jby388"><!></div>'),pg=_('<div aria-hidden="true"></div>'),gg=_('<dialog><div><span class="hmm-dialog-title svelte-jby388"> </span> <!></div> <div class="hmm-dialog-body svelte-jby388"><!></div> <!> <!></dialog>');function kn(r,e){dt(e,!0);let n=V(e,"open",15,!1),s=V(e,"title",3,""),a=V(e,"modal",3,!0),i=V(e,"width",3,"640px"),o=V(e,"height",3,void 0),l=V(e,"closable",3,!0),f=V(e,"onclose",3,void 0),p=V(e,"children",3,void 0),b=V(e,"buttons",3,void 0),g=V(e,"closeLabel",3,"Close"),k=V(e,"minWidth",3,void 0),y=V(e,"minHeight",3,void 0),S=V(e,"movable",3,!0),T=V(e,"top",3,void 0),I=V(e,"testId",3,void 0),C=N(void 0),D,R=N(void 0);const P=c(()=>I()??s()),K=c(()=>Number(/^(\d+)px$/.exec(i())?.[1]??Number.NaN)),X=c(()=>({minWidth:k()??(Number.isNaN(t(K))?zi.minWidth:Math.max(zi.minWidth,t(K))),minHeight:y()??zi.minHeight}));st(()=>{const W=t(C);W&&(n()&&!W.open?(D=document.activeElement instanceof HTMLElement?document.activeElement:void 0,u(R,t(P)===""?void 0:lg(t(P)),!0),a()?W.showModal():W.show()):!n()&&W.open&&W.close())});function ae(){n(!1),t(C)?.open&&t(C).close(),f()?.(),D?.focus(),D=void 0}function ue(){return{width:window.innerWidth,height:window.innerHeight}}function fe(W,O){const z=t(C);if(!z||!S()||W.button!==0)return;const ce=z.getBoundingClientRect(),me={left:ce.left,top:ce.top,width:ce.width,height:ce.height},be=W.clientX,Ee=W.clientY;W.preventDefault();const le=L=>{const A=L.clientX-be,M=L.clientY-Ee;u(R,O==="move"?rg(me,A,M,ue()):sg(me,O,A,M,ue(),ng(t(X),ue())),!0)},G=()=>{window.removeEventListener("pointermove",le),window.removeEventListener("pointerup",G),window.removeEventListener("pointercancel",G),t(R)&&t(P)!==""&&og(t(P),t(R))};window.addEventListener("pointermove",le),window.addEventListener("pointerup",G),window.addEventListener("pointercancel",G)}function B(W){W.target.closest("button")===null&&fe(W,"move")}const re=["n","e","s","w","se"];function de(W){W.preventDefault(),l()&&ae()}var ee=gg();let se,Y;var Z=w(ee);let te;var xe=w(Z),J=m(xe,!0),ye=d(xe,2);{var Re=W=>{var O=mg();E(()=>x(O,"aria-label",g())),ne("click",O,ae),v(W,O)};$(ye,W=>{l()&&W(Re)})}var ge=d(Z,2),H=w(ge);{var pe=W=>{var O=St(),z=Ie(O);Vs(z,p),v(W,O)};$(H,W=>{p()&&W(pe)})}var ve=d(ge,2);{var Q=W=>{var O=vg(),z=w(O);Vs(z,b),v(W,O)};$(ve,W=>{b()&&W(Q)})}var oe=d(ve,2);{var F=W=>{var O=St(),z=Ie(O);je(z,16,()=>re,ce=>ce,(ce,me)=>{var be=pg();E(()=>{Et(be,1,`hmm-dialog-resize hmm-dialog-resize-${me??""}`,"svelte-jby388"),x(be,"data-resize",me)}),ne("pointerdown",be,Ee=>fe(Ee,me)),v(ce,be)}),v(W,O)};$(oe,W=>{S()&&W(F)})}fn(ee,W=>u(C,W),()=>t(C)),E(()=>{se=Et(ee,1,"hmm-dialog svelte-jby388",null,se,{"hmm-dialog-placed":t(R)!==void 0}),x(ee,"data-testid",I()),x(ee,"aria-label",s()===""?void 0:s()),Y=On(ee,"",Y,{width:t(R)===void 0?i():`${t(R).width}px`,height:t(R)===void 0?o():`${t(R).height}px`,"min-height":t(R)===void 0&&y()!==void 0?`min(${y()}px, calc(100vh - ${kl}px))`:void 0,"margin-top":t(R)===void 0?T():void 0,"max-height":t(R)===void 0&&T()!==void 0?`calc(100vh - ${T()} - ${kl/2}px)`:void 0,left:t(R)===void 0?void 0:`${t(R).left}px`,top:t(R)===void 0?void 0:`${t(R).top}px`}),te=Et(Z,1,"hmm-dialog-titlebar svelte-jby388",null,te,{"hmm-dialog-titlebar-movable":S()}),h(J,s())}),Ir("cancel",ee,de),Ir("close",ee,()=>{n()&&ae()}),ne("pointerdown",Z,B),v(r,ee),ct()}yt(["pointerdown","click"]);var bg=_('<button type="button" class="hmm-button"> </button>'),_g=_('<p class="hmm-progress-last hmm-mono svelte-1r0w7uc"> </p>'),Eg=_('<p class="hmm-progress-line svelte-1r0w7uc"> </p> <progress class="hmm-progress svelte-1r0w7uc"></progress> <!>',1);function Yf(r,e){dt(e,!0);let n=V(e,"progress",3,void 0),s=V(e,"title",3,"RPC execution"),a=V(e,"cancelLabel",3,void 0),i=V(e,"oncancel",3,void 0),o=V(e,"testId",3,void 0),l=c(()=>n()!==void 0);kn(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 b=St(),g=Ie(b);{var k=y=>{var S=bg(),T=m(S,!0);E(()=>h(T,a())),ne("click",S,()=>i()?.()),v(y,S)};$(g,y=>{a()!==void 0&&y(k)})}v(p,b)},children:(p,b)=>{var g=St(),k=Ie(g);{var y=S=>{var T=Eg(),I=Ie(T),C=m(I),D=d(I,2),R=d(D,2);{var P=K=>{var X=_g(),ae=m(X);E(()=>h(ae,`${n().last.address??""}
|
|
9
|
+
${n().last.paramset??""}
|
|
10
|
+
${n().last.ok?"✔":"✕"}`)),v(K,X)};$(R,K=>{n().last&&K(P)})}E(()=>{h(C,`${n().done??""} / ${n().total??""}`),x(D,"max",n().total),on(D,n().done)}),v(S,T)};$(k,S=>{n()&&S(y)})}v(p,g)},$$slots:{buttons:!0,default:!0}}),ct()}yt(["click"]);var yg=_('<span class="hmm-tab-badge svelte-126ak3w"> </span>'),Sg=_('<button type="button" role="tab"><span> </span> <!></button>'),kg=_('<div class="hmm-tabs svelte-126ak3w" role="tablist"></div>');function wg(r,e){dt(e,!0);let n=V(e,"active",15,""),s=V(e,"onselect",3,void 0),a=V(e,"label",3,"Tabs"),i=V(e,"testId",3,void 0);function o(p){n(p),s()?.(p)}function l(p,b){if(p.key!=="ArrowLeft"&&p.key!=="ArrowRight")return;p.preventDefault();const g=p.key==="ArrowRight"?1:-1,k=e.tabs[(b+g+e.tabs.length)%e.tabs.length];k&&o(k.id)}var f=kg();je(f,23,()=>e.tabs,p=>p.id,(p,b,g)=>{var k=Sg();let y;var S=w(k),T=m(S,!0),I=d(S,2);{var C=D=>{var R=yg(),P=m(R);E(()=>h(P,`(${t(b).badge??""})`)),v(D,R)};$(I,D=>{t(b).badge!==void 0&&t(b).badge!==""&&D(C)})}E(()=>{y=Et(k,1,"hmm-tab svelte-126ak3w",null,y,{"hmm-tab-active":t(b).id===n()}),x(k,"id",`tab-${t(b).id}`),x(k,"aria-selected",t(b).id===n()),x(k,"aria-controls",`panel-${t(b).id}`),x(k,"tabindex",t(b).id===n()?0:-1),h(T,t(b).label)}),ne("click",k,()=>o(t(b).id)),ne("keydown",k,D=>l(D,t(g))),v(p,k)}),E(()=>{x(f,"aria-label",a()),x(f,"data-testid",i())}),v(r,f),ct()}yt(["click","keydown"]);var Ag=_('<button type="button" class="hmm-theme-switch svelte-mls84d"><span aria-hidden="true"> </span></button>');function Tg(r,e){dt(e,!0);let n=V(e,"theme",3,"system"),s=V(e,"labelFor",3,void 0),a=V(e,"onclick",3,void 0),i=V(e,"testId",3,void 0);const o={system:"◐",light:"☀",dark:"☾"},l=c(()=>s()?.(n())??`Theme: ${n()}`);var f=Ag(),p=w(f),b=m(p,!0);E(()=>{x(f,"aria-label",t(l)),x(f,"title",t(l)),x(f,"data-testid",i()),h(b,o[n()])}),ne("click",f,()=>a()?.()),v(r,f),ct()}yt(["click"]);const Rg=160,xg=600;function qf(r,e){return r.length>e?`${r.slice(0,e-1).trimEnd()}…`:r}function Ig(r){const e=(r??"").split(`
|
|
11
|
+
`).map(n=>n.trim()).find(n=>n!=="");return qf(e??"",Rg)}function Dg(r){const e=r??"",n=e.indexOf(`
|
|
12
|
+
Headers:`);return qf((n===-1?e:e.slice(0,n)).trim(),xg)}var Ng=_(': <span data-testid="update-error-reason"> </span>',1),Cg=_('<a class="hmm-update-link svelte-puqwbv" target="_blank" rel="noopener noreferrer" data-testid="update-releases"> </a>'),Pg=_('<span class="hmm-update-text svelte-puqwbv"> <!></span> <!>',1),Mg=_('<span class="hmm-update-text svelte-puqwbv"> </span>'),Og=_('<button type="button" class="hmm-button" data-testid="update-download"> </button>'),Lg=_('<button type="button" class="hmm-button" data-testid="update-install"> </button>'),Fg=_('<div><!> <!> <button type="button" class="hmm-button" data-testid="update-dismiss"> </button></div>');function Gg(r,e){dt(e,!0);let n=V(e,"state",3,void 0),s=V(e,"releasesUrl",3,void 0),a=V(e,"openExternal",3,void 0),i=V(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)?Ig(n()?.message):"");var b=St(),g=Ie(b);{var k=y=>{var S=Fg();let T;var I=w(S);{var C=ue=>{var fe=Pg(),B=Ie(fe),re=w(B),de=d(re);{var ee=Z=>{var te=Ng(),xe=d(Ie(te)),J=m(xe,!0);E(()=>h(J,t(p))),v(Z,te)};$(de,Z=>{t(p)!==""&&Z(ee)})}var se=d(B,2);{var Y=Z=>{var te=Cg(),xe=m(te,!0);E(()=>{x(te,"href",s()),h(xe,e.labels.releases)}),ne("click",te,J=>Uf(J,s(),a())),v(Z,te)};$(se,Z=>{s()&&Z(Y)})}E(Z=>{x(B,"title",Z),h(re,`${t(o)??""}${n().version===void 0?"":` (${n().version})`}`)},[()=>Dg(n().message)||void 0]),v(ue,fe)},D=ue=>{var fe=Mg(),B=m(fe);E(()=>h(B,`${t(o)??""}${n().version===void 0?"":` ${n().version}`}`)),v(ue,fe)};$(I,ue=>{t(l)?ue(C):ue(D,-1)})}var R=d(I,2);{var P=ue=>{var fe=Og(),B=m(fe,!0);E(()=>{x(fe,"title",t(f)?e.labels.downloadInBrowser:void 0),h(B,e.labels.download)}),ne("click",fe,()=>e.ondownload()),v(ue,fe)},K=ue=>{var fe=Lg(),B=m(fe,!0);E(()=>h(B,e.labels.install)),ne("click",fe,()=>e.oninstall()),v(ue,fe)};$(R,ue=>{n().phase==="available"?ue(P):n().phase==="downloaded"&&ue(K,1)})}var X=d(R,2),ae=m(X,!0);E(()=>{T=Et(S,1,"hmm-update svelte-puqwbv",null,T,{"hmm-update-failed":t(l)}),x(S,"role",t(l)?"alert":"status"),x(S,"data-testid",i()),x(S,"data-phase",n().phase),x(S,"data-install",n().install??"app"),h(ae,e.labels.dismiss)}),ne("click",X,()=>e.ondismiss()),v(y,S)};$(g,y=>{n()&&t(o)!==""&&y(k)})}v(r,b),ct()}yt(["click"]);const $f=300,Ug=280,Fs=4;function Bg(r,e,n=0){const s=Math.min(Ug,e.width-2*Fs),a=Math.max(Fs,Math.min(r.left,e.width-s-Fs)),i=r.bottom+Fs;return n>0&&i+n>e.height-Fs&&r.top-Fs-n>=Fs?{left:a,top:r.top-Fs-n}:{left:a,top:i}}var Vg=_('<span class="hmm-tooltip svelte-vstuih" role="tooltip"> </span>');function wl(r,e){dt(e,!0);let n=V(e,"testId",3,void 0),s=N(void 0),a=N(0);const i=c(()=>Bg(e.anchor,{width:window.innerWidth,height:window.innerHeight},t(a)));st(()=>{e.text,t(s)&&u(a,t(s).offsetHeight,!0)});var o=Vg();let l;var f=m(o,!0);fn(o,p=>u(s,p),()=>t(s)),E((p,b)=>{x(o,"data-testid",n()),l=On(o,"",l,{left:p,top:b}),h(f,e.text)},[()=>`${String(t(i).left)}px`,()=>`${String(t(i).top)}px`]),v(r,o),ct()}var Hg=_('<span class="hmm-tooltip-anchor svelte-11extwn"><!> <!></span>');function si(r,e){dt(e,!0);let n=V(e,"delayMs",3,$f),s=V(e,"testId",3,void 0),a=N(void 0),i=N(void 0),o;function l(){if(e.text===""||!t(i))return;const{left:T,top:I,bottom:C}=t(i).getBoundingClientRect();u(a,{left:T,top:I,bottom:C},!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 b(){p(),u(a,void 0)}st(()=>p);var g=Hg(),k=w(g);Vs(k,()=>e.children);var y=d(k,2);{var S=T=>{wl(T,{get text(){return e.text},get anchor(){return t(a)}})};$(y,T=>{t(a)!==void 0&&e.text!==""&&T(S)})}fn(g,T=>u(i,T),()=>t(i)),E(()=>{x(g,"data-testid",s()),x(g,"data-tooltip",e.text===""?void 0:e.text)}),Ir("pointerenter",g,f),Ir("pointerleave",g,b),ne("pointerdown",g,b),ne("focusin",g,l),ne("focusout",g,b),ne("keydown",g,T=>{T.key==="Escape"&&b()}),v(r,g),ct()}yt(["pointerdown","focusin","focusout","keydown"]);var zg=_('<button type="button"><span aria-hidden="true"> </span></button>');function Ct(r,e){dt(e,!0);let n=V(e,"icon",3,"•"),s=V(e,"disabled",3,!1),a=V(e,"reason",3,void 0),i=V(e,"pressed",3,void 0),o=V(e,"busy",3,!1),l=V(e,"onclick",3,void 0),f=V(e,"testId",3,void 0);const p=c(()=>f()===void 0?void 0:`${f()}-tooltip`);{let b=c(()=>s()&&a()!==void 0?`${e.title} — ${a()}`:e.title);si(r,{get text(){return t(b)},get testId(){return t(p)},children:(g,k)=>{var y=zg();let S;var T=w(y);let I;var C=m(T,!0);E(()=>{S=Et(y,1,"hmm-toolbar-button svelte-cmlgq7",null,S,{"hmm-toolbar-button-pressed":i()===!0}),x(y,"aria-label",e.title),x(y,"aria-pressed",i()),x(y,"aria-busy",o()?"true":void 0),x(y,"data-testid",f()),y.disabled=s()||o(),I=Et(T,1,"hmm-toolbar-icon svelte-cmlgq7",null,I,{"hmm-toolbar-icon-busy":o()}),h(C,n())}),ne("click",y,()=>l()?.()),v(g,y)},$$slots:{default:!0}})}ct()}yt(["click"]);const Al=Symbol("homematic-manager.stores");function jg(r){return tf(Al,r),r}function Ut(){if(!nf(Al))throw new Error("no stores in context - wrap the component in App.svelte or call setStores() in a parent");return ef(Al)}const Xf=["devices","links","rssi","console","messages","events"],Qf="groups",Wg=["rooms","functions","metadata"],ji="devices",pd="#store";function Zf(r){return r===pd}function ai(r){return Wg.includes(r)}function fc(r){return r===void 0||!r.reachable?[]:r.flat===!0?["rooms","functions"]:["metadata"]}function Kg(r){return Xf.includes(r)||r===Qf||ai(r)}function Yg(r){const e=r.replace(/^#/,"").split("/"),n=decodeURIComponent(e[1]??""),s=decodeURIComponent(e[2]??"");return{interfaceName:n,tab:Kg(s)?s:ji}}function qg(r,e){return r===""?"":`#/${encodeURIComponent(r)}/${e}`}function $g(r,e={}){switch(r){case"BidCos-Wired":return["devices","links","console","events"];case"CUxD":return["devices","console","events"];case"BidCos-RF":return[...Xf];case"VirtualDevices":return e.heatingGroups===!0?["devices",Qf,"links","console","messages","events"]:["devices","links","console","messages","events"];default:return/hmip/i.test(r)?["devices","links","rssi","console","messages","events"]:["devices","links","console","messages","events"]}}var Xg=_('<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>'),Zg=_('<p class="hmm-change-call svelte-1uqsmm6"> </p>'),Jg=_('<tr><td class="hmm-mono svelte-1uqsmm6"> </td><td class="svelte-1uqsmm6"> </td><td class="hmm-change-new svelte-1uqsmm6"> </td></tr>'),eb=_('<table class="hmm-change-table svelte-1uqsmm6"><tbody></tbody></table>'),tb=_('<p class="hmm-change-error svelte-1uqsmm6"> </p>'),nb=_('<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>'),rb=_('<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),sb=_("<!> <!>",1);function ab(r,e){dt(e,!0);let n=V(e,"open",15,!1);const s=Ut(),a=s.i18n.t,i=s.changeSet,o=c(()=>i.count);function l(p){const b=i.outcome(p.id);return b===void 0?void 0:{ok:b.ok,...b.error?{error:b.error}:{}}}async function f(){const p=i.interfaces;await i.apply();for(const b of p)await s.links.load(b);i.empty&&n(!1)}{const p=g=>{var k=Xg(),y=Ie(k),S=m(y,!0),T=d(y,2),I=m(T,!0),C=d(T,2),D=m(C,!0);E((R,P,K)=>{h(S,R),T.disabled=i.empty||i.applying,h(I,P),C.disabled=i.empty||i.applying,h(D,K)},[()=>a("Close"),()=>a("Discard all"),()=>a("Apply")]),ne("click",y,()=>n(!1)),ne("click",T,()=>i.clear()),ne("click",C,()=>{f()}),v(g,k)};let b=c(()=>a("Pending changes"));kn(r,{get title(){return t(b)},width:"820px",testId:"change-set-dialog",get open(){return n()},set open(g){n(g)},buttons:p,children:(g,k)=>{var y=sb(),S=Ie(y);{var T=R=>{var P=Qg(),K=m(P,!0);E(X=>h(K,X),[()=>a("Nothing is staged")]),v(R,P)},I=R=>{var P=rb(),K=Ie(P);je(K,21,()=>i.changes,ue=>ue.id,(ue,fe)=>{const B=c(()=>l(t(fe)));var re=nb(),de=w(re),ee=w(de),se=m(ee,!0),Y=d(ee,2),Z=m(Y,!0),te=d(de,2);je(te,16,()=>t(fe).calls,ge=>ge,(ge,H)=>{var pe=Zg(),ve=m(pe,!0);E(()=>h(ve,H)),v(ge,pe)});var xe=d(te,2);{var J=ge=>{var H=eb(),pe=w(H);je(pe,21,()=>t(fe).lines,ve=>ve.label,(ve,Q)=>{var oe=Jg(),F=w(oe),W=m(F,!0),O=d(F),z=m(O,!0),ce=d(O),me=m(ce,!0);E(()=>{h(W,t(Q).label),h(z,t(Q).from??""),h(me,t(Q).to??"")}),v(ve,oe)}),v(ge,H)};$(xe,ge=>{t(fe).lines.length>0&&ge(J)})}var ye=d(xe,2);{var Re=ge=>{var H=tb(),pe=m(H,!0);E(()=>{x(H,"data-testid",`change-error-${t(fe).id}`),h(pe,t(B).error)}),v(ge,H)};$(ye,ge=>{t(B)&&!t(B).ok&&ge(Re)})}E(ge=>{x(re,"data-testid",`change-${t(fe).id}`),h(se,t(fe).title),Y.disabled=i.applying,x(Y,"data-testid",`change-remove-${t(fe).id}`),h(Z,ge)},[()=>a("Remove")]),ne("click",Y,()=>i.remove(t(fe).id)),v(ue,re)});var X=d(K,2),ae=m(X,!0);E(ue=>h(ae,ue),[()=>a("{count} changes staged",{},t(o))]),v(R,P)};$(S,R=>{i.empty?R(T):R(I,-1)})}var C=d(S,2);{var D=R=>{{let P=c(()=>s.rpcLog.progress??{done:i.applied,total:t(o)}),K=c(()=>a("Cancel"));Yf(R,{get progress(){return t(P)},get cancelLabel(){return t(K)},oncancel:()=>{i.cancel()}})}};$(C,R=>{i.applying&&R(D)})}v(g,y)},$$slots:{buttons:!0,default:!0}})}ct()}yt(["click"]);const ib=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 ob(r){const{env:e,cli:n}=ib[r];return`${e} / ${n}`}const hc=Object.freeze(["auto","local","occulite","rega"]),lb={"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(lb));const cs={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"},db=/\$\{(\w+)\}/gu;function gd(r,e){return r.template.replace(db,(n,s)=>e(s))}const bd={"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}},cb=Object.keys(bd),ub=["BidCos-RF","HmIP-RF","VirtualDevices","BidCos-Wired"];function _d(r){return Object.prototype.hasOwnProperty.call(bd,r)}function fb(r){return _d(r)?bd[r]:void 0}function hb(r){return fb(r)?.installMode!==!1}function mb(r){const e=[];return r.name.trim()===""?e.push({code:"empty-name"}):_d(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 Jf=0;class mc extends Error{address;constructor(e,n){super(`invalid address ${JSON.stringify(e)}: ${n}`),this.name="AddressError",this.address=e}}const vb=/^\d+$/;function is(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===""||!vb.test(s))return;const a=Number.parseInt(s,10);return{address:r,device:n,index:a,channel:r,isDevice:!1,isChannel:!0,isMaintenance:a===Jf}}function pb(r){const e=is(r);if(!e)throw r===""?new mc(r,"empty"):new mc(r,"expected SERIAL or SERIAL:INDEX with a numeric index");return e}function As(r){return is(r)?.isDevice===!0}function gb(r){return is(r)?.isChannel===!0}function ta(r){return is(r)?.isMaintenance===!0}function xa(r){return pb(r).device}function Pi(r,e){const n=is(r),s=is(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 Ed(r,e,n,s){const a=e.trim(),i=is(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=is(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 bb(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 jo={VISIBLE:1,INTERNAL:2,DONT_DELETE:8};function Mi(r){const e=typeof r=="number"?r:0,n=(e&jo.VISIBLE)!==0,s=(e&jo.INTERNAL)!==0,a=(e&jo.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 _b={ALWAYS:1,BURST:2,CONFIG:4,WAKEUP:8,LAZY_CONFIG:16};function Eb(r){const e=typeof r=="number"?r:0,n=[];for(const[s,a]of Object.entries(_b))(e&a)!==0&&n.push(s);return n}function yd(r){return r.ROAMING===!0||r.ROAMING===1}const yb=["NONE","SENDER","RECEIVER"];function Sb(r){return yb[r??0]??"NONE"}const kb=["HM-RCV-50","HMW-RCV-50","HmIP-RCV-50","CENTRAL"];function Wo(r){return kb.includes(r)}function ia(r){return typeof r.PARENT=="string"&&r.PARENT!==""}function ii(r,e,n,s){let a="",i=e;if(ia(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 ys(r){return r===void 0||r.trim()===""?[]:r.trim().split(/\s+/)}class wb{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(Pi),this.#t.sort(Pi);for(const s of this.#s.values())s.sort(Pi)}#i(e){const{ADDRESS:n}=e;if(this.#e.set(n,e),ia(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 ys(e.LINK_SOURCE_ROLES))vc(this.#a,s,n);for(const s of ys(e.LINK_TARGET_ROLES))vc(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)=>Pi(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||!ia(n)))return this.#e.get(n.PARENT)}maintenanceChannelOf(e){const n=is(e);if(n)return this.#e.get(`${n.device}:${Jf}`)}isCentral(e){const n=this.#e.get(e);if(!n)return!1;if(Wo(n.TYPE))return!0;const s=n.PARENT_TYPE??this.parentOf(e)?.TYPE;return s!==void 0&&Wo(s)}centralDevices(){return this.devices().filter(e=>Wo(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(!ia(s))return ii(this.interfaceName,s,n);const a=this.parentOf(e);if(a)return ii(this.interfaceName,s,n,a)}}function vc(r,e,n){const s=r.get(e);s?s.push(n):r.set(e,[n])}const Sd=8,Ab="SMOKE_DETECTOR",Tb="HmIP-SWSD-Group",Rb=/^\*GROUP_([1-8])$/;function eh(r){return`GROUP_${String(r)}`}function kd(r){return`*GROUP_${String(r)}`}function Zs(r){return Rb.test(r)}function th(r){return r.TYPE===Ab&&(r.PARENT??"")!==""}function xb(r){let e=!1;const n=[];for(let s=1;s<=Sd;s+=1){const a=r[eh(s)];a!==void 0&&(e=!0,(a===!0||a===1)&&n.push(s))}return e?n:void 0}function Ib(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 nh(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 Db(r){const e=[];for(let n=1;n<=Sd;n+=1){const s=Object.entries(r).filter(([,a])=>a?.includes(n)===!0).map(([a])=>a).sort();s.length>0&&e.push({address:kd(n),kind:"hmip",number:n,members:s})}return e}function Nb(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<=Sd;n+=1)if(!e.has(n))return n}function Cb(r){return{ADDRESS:kd(r),TYPE:Tb,PARENT:"",CHILDREN:[],PARAMSETS:[],FLAGS:0}}function Pb(r,e){return{added:e.filter(n=>!r.includes(n)),removed:r.filter(n=>!e.includes(n))}}const Mb="0123456789ABCEFGHJKLMNPQRSTUWXYZ",Ob=26;function oi(r){return r.replace(/[\s-]/g,"").toUpperCase()}function Wi(r){return/^[0-9A-F]{24}$/.test(oi(r))}const Lb=new RegExp(`^[0-7][${Mb}]{${String(Ob-1)}}$`);function pc(r){const e=oi(r);return/^[0-9A-F]{32}$/.test(e)||Lb.test(e)}function Fb(r){const e=oi(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(Wi(e))return{sgtin:e,key:""}}const gc={SENDER_BROKEN:1,RECEIVER_BROKEN:2};function Gb(r){const e=typeof r=="number"?r:0,n=(e&gc.SENDER_BROKEN)!==0,s=(e&gc.RECEIVER_BROKEN)!==0;return{senderBroken:n,receiverBroken:s,broken:n||s,unknownBits:e&-4}}function Ub(r){const e=is(r.SENDER),n=is(r.RECEIVER);return e!==void 0&&n!==void 0&&e.device===n.device}function Tl(r){const e=Gb(r.FLAGS);return!e.broken||!Ub(r)?e:{senderBroken:!1,receiverBroken:!1,broken:!1,unknownBits:e.unknownBits}}function rh(r){return ia(r)&&!ta(r.ADDRESS)&&ys(r.LINK_SOURCE_ROLES).length>0}function Bb(r){return ia(r)&&!ta(r.ADDRESS)&&ys(r.LINK_TARGET_ROLES).length>0}function Vb(r,e){if(!rh(r)||!Bb(e))return[];const n=new Set(ys(e.LINK_TARGET_ROLES));return ys(r.LINK_SOURCE_ROLES).filter(s=>n.has(s))}function Hb(r,e){return r.ADDRESS!==e.ADDRESS&&Vb(r,e).length>0}function sh(r){return r.channels().filter(e=>rh(e))}function wd(r){return typeof r=="object"&&r!==null&&"explicitDouble"in r&&typeof r.explicitDouble=="number"}function bc(r){return typeof r=="number"?r:wd(r)?r.explicitDouble:void 0}function zb(r,e){const n=bc(r),s=bc(e);return n!==void 0||s!==void 0?n===s:r===e}const _c={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."}}},Ec={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 jb(r){return Object.prototype.hasOwnProperty.call(_c,r)?_c[r]:Object.prototype.hasOwnProperty.call(Ec,r)?Ec[r]:void 0}function Wb(r){return{name:r,params:[],returns:"",help:{}}}new TextDecoder("utf-8",{fatal:!0});const Kb={WRITE:2};function Xr(r){return(r.OPERATIONS&Kb.WRITE)!==0}function Ms(r){if(!r)return;const e=r.VALUE_LIST;return Array.isArray(e)?e:void 0}function ah(r,e){const n=Ms(r)?.indexOf(e)??-1;return n===-1?void 0:n}function $n(r,e){const n=r[e];if(typeof n=="number")return n;if(typeof n=="string"&&r.TYPE==="ENUM")return ah(r,n)}function Yb(r,e){if(!(typeof e!="number"||!r.SPECIAL))return r.SPECIAL.find(n=>n.VALUE===e)}function qb(r,e){return Yb(r,e)!==void 0}function Ad(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 ih="100%",$b="�C",Xb="°C",Qb="°C";function lo(r){const e=r?.UNIT;return e===void 0||e===""||e==='""'?"":e===ih?"%":e===$b||e===Xb?Qb:e}function Zb(r){return r?.UNIT===ih}function oh(r){return Zb(r)?100:1}function oa(r,e){if(r!==void 0)return lh(r*oh(e))}function yc(r,e){if(r!==void 0)return lh(r/oh(e))}function lh(r){return Number.isFinite(r)?Number.parseFloat(r.toPrecision(10)):r}const Jb=[.1,1,5,10,60,300,600,3600],Sc=["BASE_100_MS","BASE_1_S","BASE_5_S","BASE_10_S","BASE_1_M","BASE_5_M","BASE_10_M","BASE_1_H"],e_=31,t_="NOT_USED";function dh(r){return r?.SPECIAL?.find(e=>e.ID===t_)?.VALUE}function Td(r){return Math.round(r*10)/10}const n_={"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},kc="_BASE",r_="_FACTOR",wc="_UNIT",s_="_VALUE",Ac="_TIME";function bo(r){const e=[];for(const[n,s]of Object.entries(r)){const a=o_(r,n,s)??l_(r,n,s);a&&e.push(a)}return e}function Rd(r,e){return a_(r[e.unitParam],r[e.countParam],e)}function a_(r,e,n){const s=i_(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:Td(a.seconds*i),unitIndex:s,unitSeconds:a.seconds,count:i,maximal:s===n.units.length-1&&i===n.maxCount}}function i_(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 ch(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=Td(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 xd(r,e){const n=ch(r,e);if(n)return{[e.unitParam]:n.unitIndex,[e.countParam]:n.count}}function uh(r){const e=r.units.at(-1);return e===void 0?0:Td(e.seconds*r.maxCount)}function o_(r,e,n){if(!e.endsWith(kc))return;const s=e.slice(0,-kc.length),a=`${s}${r_}`,i=r[a];if(!i)return;const o=fh(Ms(n)??Sc,l=>Jb[Sc.indexOf(l)]);if(o)return{name:s.endsWith(Ac)?s.slice(0,-Ac.length):s,kind:"base-factor",unitParam:e,countParam:a,units:o,maxCount:$n(i,"MAX")??e_}}function l_(r,e,n){if(!e.endsWith(wc))return;const s=e.slice(0,-wc.length),a=`${s}${s_}`,i=r[a],o=Ms(n);if(!i||!o||o.length===0)return;const l=$n(i,"MAX"),f=fh(o,p=>n_[p]);if(!(l===void 0||!f))return{name:s,kind:"unit-value",unitParam:e,countParam:a,units:f,maxCount:l}}function fh(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 d_=new Set;function c_(r){return d_.has(r)?"name":"index"}function Rl(r,e,n={}){const s=wd(r)?r.explicitDouble:r;if(!e)return typeof s=="boolean"||typeof s=="string"?s:String(s);switch(e.TYPE){case"ACTION":case"BOOL":return u_(s);case"FLOAT":{const a=Id(mh(Number.parseFloat(String(s))),e,n);return n.explicitDouble===!1?a:{explicitDouble:a}}case"ENUM":return f_(s,e,n);case"INTEGER":return hh(s,e,n);case"STRING":return String(s);default:return String(s)}}function u_(r){if(r==="false")return!1;if(typeof r=="string"){const e=Number(r);return Number.isNaN(e)?!0:e!==0}return!!r}function f_(r,e,n){const s=Ms(e);if(!s)return hh(r,e,n);if(typeof r=="string"){const i=ah(e,r);if(i!==void 0)return n.enumAs==="name"?r:i}const a=h_(r);return a===void 0?String(r):n.enumAs==="name"?s[a]??String(r):Id(a,e,n)}function h_(r){if(typeof r=="boolean")return Number(r);const e=Number.parseInt(String(r),10);return Number.isFinite(e)?e:void 0}function hh(r,e,n){return typeof r=="boolean"?Number(r):Id(m_(r),e,n)}function m_(r){return mh(Number.parseInt(String(r),10))}function mh(r){return Number.isFinite(r)?r:0}function Id(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 v_=255;function Ko(r,e,n,s={}){if(!n)return[br(r,"unknown-parameter",`${r} is not part of this paramset`)];if(s.requireWritable!==!1&&!Xr(n))return[br(r,"not-writable",`${r} is read-only (OPERATIONS ${n.OPERATIONS})`)];const a=wd(e)?e.explicitDouble:e;switch(n.TYPE){case"BOOL":case"ACTION":return typeof a=="boolean"?[]:[br(r,"wrong-type",`${r} expects a boolean, got ${li(a)}`)];case"INTEGER":return Tc(r,a,n,!0);case"FLOAT":return Tc(r,a,n,!1);case"ENUM":return p_(r,a,n);case"STRING":return g_(r,a,s);default:return typeof a=="object"?[br(r,"wrong-type",`${r} expects a scalar, got ${li(a)}`)]:[]}}function Tc(r,e,n,s){return typeof e!="number"?[br(r,"wrong-type",`${r} expects a number, got ${li(e)}`)]:Number.isFinite(e)?s&&!Number.isInteger(e)?[br(r,"wrong-type",`${r} expects a whole number, got ${e}`)]:qb(n,e)?[]:vh(r,e,n):[br(r,"not-finite",`${r} is ${e}, which XML-RPC cannot encode`)]}function p_(r,e,n){const s=Ms(n);return typeof e=="string"?s?s.includes(e)?[]:[br(r,"not-in-value-list",`${r} does not accept ${e}`,s.join(", "))]:[br(r,"not-in-value-list",`${r} has no VALUE_LIST to resolve ${e} against`)]:typeof e!="number"||!Number.isInteger(e)?[br(r,"wrong-type",`${r} expects an enum name or index, got ${li(e)}`)]:s&&(e<0||e>=s.length)?[br(r,"not-in-value-list",`${r} has no value at index ${e}`,s.length-1)]:vh(r,e,n)}function g_(r,e,n){if(typeof e!="string")return[br(r,"wrong-type",`${r} expects a string, got ${li(e)}`)];const s=n.maxStringLength??v_;return e.length>s?[br(r,"string-too-long",`${r} is longer than ${s} characters`,s)]:[]}function vh(r,e,n){const s=$n(n,"MIN"),a=$n(n,"MAX");return s!==void 0&&e<s?[br(r,"below-min",`${r} is below its minimum of ${s}`,s)]:a!==void 0&&e>a?[br(r,"above-max",`${r} is above its maximum of ${a}`,a)]:[]}function br(r,e,n,s){return s===void 0?{param:r,code:e,message:n}:{param:r,code:e,message:n,limit:s}}function li(r){return r===null?"null":typeof r}function b_(r,e,n,s={}){const a={},i=[],o=[],l=[],f=s.writeAll===!0,p=s.enumAs===void 0?{}:{enumAs:s.enumAs},b=s.maxStringLength===void 0?{}:{maxStringLength:s.maxStringLength};for(const g of __(e,n,f)){const k=n[g];if(!k){l.push(...Ko(g,e[g],void 0)),o.push({param:g,reason:"unknown-parameter"});continue}const y=Object.prototype.hasOwnProperty.call(e,g);if(!Xr(k)){y&&l.push(...Ko(g,e[g],k)),o.push({param:g,reason:"not-writable"});continue}const S=y?e[g]:r[g]??k.DEFAULT,T=Rl(S,k,p);if(!f&&E_(r,g,S,k,p)){o.push({param:g,reason:"unchanged"});continue}const I=Ko(g,T,k,b);if(I.length>0){l.push(...I),o.push({param:g,reason:"invalid"});continue}a[g]=T,i.push(g)}return{values:a,changed:i,skipped:o,problems:l}}function __(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 E_(r,e,n,s,a){if(!Object.prototype.hasOwnProperty.call(r,e))return!1;const i={...a,explicitDouble:!1};return zb(Rl(r[e],s,i),Rl(n,s,i))}function y_(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 ei="UI_HINT",us=0,S_={id:us,key:"expert",name:{de:"Experte",en:"Expert"},description:{de:"Alle Parameter des Verknuepfungs-Parametersatzes",en:"All link paramset parameters"},params:{}};function k_(r,e){return r!==""?r:"CHANNEL_OPERATION_MODE"in e?"shutter":"blind"}function w_(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 A_(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=k_(l,n)}const i={deviceType:e.deviceType,channel:e.channel,channelMode:a},o=r.find(l=>l.when.every(f=>w_(f,i)));return{...o===void 0?{}:{branch:o},...a===void 0?{}:{channelMode:a}}}function T_(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 R_{#e;constructor(e){this.#e=e}async profilesFor(e,n){const s=await this.#e.receiverTypeAliases(),a=Rc(e,s),o=[...(await this.#e.receiverProfiles(a))?.senders[n]??[]];return o.some(l=>l.id===us)||o.push(S_),o.sort((l,f)=>l.id-f.id)}async linkMetadataFor(e,n){const s=await this.#e.receiverTypeAliases();return(await this.#e.receiverProfiles(Rc(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 b=D_(p,i?n[f]:void 0);if(b===void 0){l.push({param:f,code:"empty-list",message:`profile ${e.key} offers no value for ${f}`});continue}o[f]=b}return ei in s&&(o[ei]=String(e.id)),{values:o,problems:l}}detectProfile(e,n){const s=e[ei],a=s===void 0||s===""?void 0:n.find(l=>String(l.id)===String(s));if(a&&(a.id===us||xc(a,e)!==void 0))return a;let i,o;for(const l of[...n].sort((f,p)=>f.id-p.id)){const f=xc(l,e);f!==void 0&&x_(f,o)&&(o=f,i=l)}return i??a}async masterFormId(e){return T_(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,b;if(f?.branches&&i){const S=await A_(f.branches,i,n);S.branch&&(p=S.branch.controls),b=S.channelMode}const g=await this.#e.optionPresets(),k=await this.#e.crossValidations(),y=N_(n,o).map(([S,T])=>{const I=g[o?.optionPresets?.[S]??""],C={name:S,description:T,visible:C_(S,o,s)};return I===void 0?C:{...C,preset:I}});return{channelType:e,parameters:y,...p?{controls:p}:{},...l?.internalKey?{internalKey:l.internalKey}:{},...b===void 0?{}:{channelMode:b},problems:k.filter(S=>P_(S,n)).filter(S=>!M_(S,s)).map(S=>({id:S.id,errorKey:S.errorKey,params:ph(S)}))}}}function Rc(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 xc(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(!I_(o,e[i]))return;n+=1,o.kind==="fixed"&&(s+=1)}return n===0?void 0:{present:n,fixed:s,missing:a}}function x_(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 I_(r,e){switch(r.kind){case"fixed":return co(e,r.value);case"list":return r.values.some(n=>co(e,n));case"range":{const n=Number(e);return e===""||Number.isNaN(n)?!0:n>=r.min&&n<=r.max||n===r.default}}}function D_(r,e){switch(r.kind){case"fixed":return r.value;case"list":return e!==void 0&&r.values.some(n=>co(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 co(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 N_(r,e){const n=Ad(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 C_(r,e,n){const s=(e?.conditionalVisibility??[]).filter(a=>a.show.includes(r));return s.length===0?!0:s.some(a=>co(n[a.trigger],a.triggerValue))}function ph(r){return r.rule==="between"?[r.param,r.minParam,r.maxParam]:[r.paramA,r.paramB]}function P_(r,e){return ph(r).every(n=>n in e)}function M_(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 Yo(r,e){return e===void 0?r:{...r,label:e}}function gh(r,e){const n=new Map(bo(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}`,Yo({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}`,Yo(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(",")}`,Yo(l,o.label));break}}return s.length>0?s:void 0}function O_(r,e){return gh(r?.controls,e)}function xl(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 L_=["CONFIG_PENDING","DUTY_CYCLE","FAULT_REPORTING","LOWBAT","LOW_BAT","SABOTAGE","UNREACH","STICKY_UNREACH","UPDATE_PENDING"],bh="ERROR",F_=["STICKY_UNREACH","SABOTAGE"];function G_(r){return L_.includes(r)||r.startsWith(bh)}function uo(r){return F_.includes(r)||r.startsWith(bh)}function U_(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 B_=[{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 fo(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 V_(r){const e={};for(const[n,s]of Object.entries(r)){const a={};for(const[i,o]of Object.entries(s))a[i]=j_(fo(o[0]),fo(o[1]));e[n]=a}return e}function H_(r){const e=fo(r);if(e!==void 0)return B_.find(n=>e>=n.min)}function Ia(r){const e=r.DESCRIPTION?.trim()??"";return e===""?r.ADDRESS:e}function Ic(r,e){const n=r.INTERFACE??"";if(n==="")return"";const s=e.find(a=>a.ADDRESS===n);return s?Ia(s):n}const Dc=["RSSI_DEVICE","RSSI_PEER"];class z_{#e={};#n;constructor(e={}){this.#n=e.centralAddress}get centralAddress(){return this.#n}setCentralAddress(e){this.#n=e}applyRssiInfo(e){this.#e=V_(e)}applyHmipValue(e,n,s){const a=this.#n,i=fo(s);return a===void 0||i===void 0||!Dc.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 Dc){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 j_(r,e){const n={};return r!==void 0&&(n.rx=r),e!==void 0&&(n.tx=e),n}const Il=6,Nc=["switch","marginal","unheard","keep","unmeasured","roaming"];function W_(r,e,n,s={}){const a=Math.max(0,s.marginDb??Il),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),b=p?.tx!==void 0&&f!==void 0?p.tx-f:void 0;let g;o.ROAMING===!0||o.ROAMING===1?g="roaming":p===void 0?g="unmeasured":p.address===l?g="keep":b===void 0?g="unheard":b<=0?g="keep":g=b>=a?"switch":"marginal",i.push({address:o.ADDRESS,configured:l,configuredTx:f,best:p?.address,bestTx:p?.tx,gain:b,verdict:g})}return i.sort((o,l)=>Nc.indexOf(o.verdict)-Nc.indexOf(l.verdict)||(l.gain??Number.NEGATIVE_INFINITY)-(o.gain??Number.NEGATIVE_INFINITY)||o.address.localeCompare(l.address))}const _h=8192;class K_{#e=[];#n;constructor(e=_h){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 Y_(r,e){return e.interfaceName!==void 0&&r.interfaceName!==e.interfaceName||!Cc(r.address??"",e.address)||!Cc(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 q_(r,e){return r.filter(n=>Y_(n,e))}function Cc(r,e){return e===void 0||e===""?!0:r.toLowerCase().includes(e.toLowerCase())}const Ki=1,Pc=8,Mc=255,_o=32,Oc=16*1024;class wt extends Error{code;detail;constructor(e,n,s){super(n??e),this.name="MetaError",this.code=e,this.detail=s}}const Lc=Object.freeze({room:{name:{de:"Räume",en:"Rooms"},tree:[]},function:{name:{de:"Gewerke",en:"Functions"},tree:[]}});function $_(){return{format:Ki,revision:0,objects:{},enums:{room:{name:{...Lc.room?.name},tree:[]},function:{name:{...Lc.function?.name},tree:[]}}}}const X_=/^[a-z0-9][a-z0-9-]*$/,Q_=/^[a-z0-9-]+$/;function Dd(r){const e=r.indexOf(".");if(!(e<=0||e===r.length-1))return{interfaceName:r.slice(0,e),address:r.slice(e+1)}}function Z_(r,e){return`${r}.${e}`}function Dl(r){const e=Dd(r);if(!e)throw new wt("invalid-ref",`${r} is not <interface>.<address>`);return e}function ua(r){return r.length<=_o&&X_.test(r)}function Fc(r){if(!ua(r))throw new wt("invalid-id",`${r} is not a valid id`);return r}function Nl(r){return r.length<=_o&&Q_.test(r)}function sa(r){if(typeof r!="string")throw new wt("invalid-name","a name has to be a string");const e=r.trim();if(e==="")throw new wt("invalid-name","a name may not be empty");if(/[\u0000-\u001f\u007f]/.test(e))throw new wt("invalid-name","a name may not contain control characters");if(Eh(e)>Mc)throw new wt("invalid-name",`a name may not be longer than ${String(Mc)} bytes`);return e}function Eh(r){return new TextEncoder().encode(r).length}function _a(r){const e=r.split("/"),n=e[0];if(n===void 0||n===""||!ua(n))return;const s=e.slice(1);if(!s.some(a=>!ua(a)))return{enumId:n,ids:s}}function Yi(r,e){return`${r}/${e}`}function J_(r){const e=r.lastIndexOf("/");return e<=0?void 0:r.slice(0,e)}function Gs(r,e){return r===e||r.startsWith(`${e}/`)}function Us(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 ki(r,e){const n=[],s=(a,i,o,l)=>{for(const f of a){const p=Yi(i,f.id),b=[...l,f.name];n.push({path:p,node:f,depth:o,trail:b}),s(f.children??[],p,o+1,b)}};return s(e.tree,r,1,[]),n}function yh(r,e){return new Set(ki(r,e).map(n=>n.path))}function e1(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 Cl(r){if(e1(r)>Pc)throw new wt("too-deep",`a tree may not be deeper than ${String(Pc)} levels`)}function Ds(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function t1(r){if(!Ds(r))throw new wt("invalid-name","an object has to be an object");const e=sa(r.name),n=Pl(r.enums),s=ho(r.meta);return r.orphaned===!0?{name:e,enums:n,meta:s,orphaned:!0}:{name:e,enums:n,meta:s}}function Pl(r){if(r==null)return[];if(!Array.isArray(r))throw new wt("unknown-path","enums has to be an array of node paths");const e=[];for(const n of r){if(typeof n!="string"||_a(n)===void 0)throw new wt("unknown-path",`${String(n)} is not a node path`);if(e.includes(n))throw new wt("duplicate-path",`${n} is listed twice`);e.push(n)}return e}function ho(r){if(r==null)return{};if(!Ds(r))throw new wt("invalid-id","meta has to be an object of namespaces");for(const e of Object.keys(r))if(!ua(e))throw new wt("invalid-id",`${e} is not a valid meta namespace`);if(Eh(JSON.stringify(r))>Oc)throw new wt("invalid-id",`meta may not be larger than ${String(Oc)} bytes`);return r}function n1(r){if(!Ds(r))throw new wt("invalid-id","a node has to be an object");const e=r.id;if(typeof e!="string"||!ua(e))throw new wt("invalid-id",`${String(e)} is not a valid node id`);const n=sa(r.name),s=r.icon;if(s!==void 0&&(typeof s!="string"||!Nl(s)))throw new wt("invalid-id",`${JSON.stringify(s)} is not a valid icon name`);const a=Sh(r.children);return{id:e,name:n,...typeof s=="string"?{icon:s}:{},...a.length>0?{children:a}:{}}}function Sh(r){if(r==null)return[];if(!Array.isArray(r))throw new wt("invalid-id","children has to be an array of nodes");const e=r.map(s=>n1(s)),n=new Set;for(const s of e){if(n.has(s.id))throw new wt("duplicate-id",`${s.id} is used twice among its siblings`);n.add(s.id)}return e}function r1(r,e){if(!ua(r))throw new wt("invalid-id",`${r} is not a valid enum id`);if(!Ds(e))throw new wt("invalid-name",`enum ${r} has to be an object`);const n=Ml(e.name),s=Sh(e.tree);return Cl(s),{name:n,tree:s}}function Ml(r){if(!Ds(r))throw new wt("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 wt("invalid-name",`the ${n} name has to be a string`);e[n]=sa(s)}if(e.en===void 0)throw new wt("invalid-name","an enum needs at least an English name");return e}function Ol(r){if(!Ds(r))throw new wt("format-unsupported","a document has to be an object");const e=r.format;if(e!==Ki)throw new wt("format-unsupported",`format ${String(e)} is newer than this implementation reads (${String(Ki)})`);const n=r.revision;if(typeof n!="number"||!Number.isInteger(n)||n<0)throw new wt("format-unsupported","revision has to be an integer of at least 0");const s={},a=r.enums;if(a!=null){if(!Ds(a))throw new wt("unknown-enum","enums has to be an object");for(const[f,p]of Object.entries(a))s[f]=r1(f,p)}const i=kh(s),o={},l=r.objects;if(l!=null){if(!Ds(l))throw new wt("unknown-object","objects has to be an object");for(const[f,p]of Object.entries(l)){Dl(f);const b=t1(p);for(const g of b.enums)if(!i.has(g))throw new wt("unknown-path",`${f}: ${g} does not exist`,{ref:f,path:g});o[f]=b}}return{format:Ki,revision:n,objects:o,enums:s}}function kh(r){const e=new Set;for(const[n,s]of Object.entries(r))for(const a of yh(n,s))e.add(a);return e}function Gc(r,e){return JSON.stringify(Ll(r),void 0,e)}function s1(r,e){return Gc({...r,revision:0})===Gc({...e,revision:0})}function Ll(r){if(Array.isArray(r))return r.map(e=>Ll(e));if(Ds(r)){const e={};for(const n of Object.keys(r).sort())e[n]=Ll(r[n]);return e}return r}function Uc(r,e){const n=e.slice(0,-1),s=e[e.length-1],i=(n.length===0?r:Us(r,n)?.children??[]).findIndex(o=>o.id===s);return i===-1?void 0:i}function Fl(r,e,n,s){if(e.length===0)return i1(r,n,s);const[a,...i]=e;return r.map(o=>o.id===a?{...o,children:Fl(o.children??[],i,n,s)}:o)}function Gl(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=Gl(a.children??[],s);return i.length===0?a1(a):{...a,children:i}})}function a1(r){return{id:r.id,name:r.name,...r.icon===void 0?{}:{icon:r.icon}}}function i1(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 o1=1e3;let l1=class wh{#e;#n;#t;#s=[];#a;#r;#i;constructor(e={}){const n=e.document??$_();this.#e=n.revision,this.#n=new Map(Object.entries(n.objects)),this.#t=new Map(Object.entries(n.enums)),this.#a=e.eventHistory??o1,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 wt("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 wt("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=>Gs(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(Dl(e),n.orphaned!==void 0)throw new wt("forbidden","orphaned is set by the process that owns the addresses");const s=this.#n.get(e),a=n.name===void 0?s?.name:sa(n.name);if(a===void 0)throw new wt("invalid-name",`${e} is new and needs a name`);const i=n.enums===void 0?s?.enums??[]:this.#o(Pl(n.enums)),o=n.meta===void 0?s?.meta??{}:d1(s?.meta??{},n.meta);return this.#l(e,za(a,i,o,s?.orphaned===!0))}put(e,n){Dl(e);const s=this.#n.get(e),a=sa(n.name),i=this.#o(Pl(n.enums)),o=ho(n.meta);return this.#l(e,za(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=za(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(Fc(e),this.#t.has(e))throw new wt("duplicate-id",`${e} exists`);const s={name:Ml(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:Ml(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([...yh(e,s)]);if(a.refs.length>0&&n!=="detach")throw new wt("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);Fc(s);const l=sa(a);if(i.icon!==void 0&&!Nl(i.icon))throw new wt("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:Us(o.tree,p)?.children??[]).some(y=>y.id===s))throw new wt("duplicate-id",`${Yi(f,s)} exists`);const g={id:s,name:l,...i.icon===void 0?{}:{icon:i.icon}},k=Fl(o.tree,p,g,i.position);return Cl(k),this.#t.set(e,{name:o.name,tree:k}),this.#v([{kind:"node.created",enum:e,path:Yi(f,s),value:g}])}updateNode(e,n){const{enumId:s,ids:a}=this.#c(e),i=this.getEnum(s),o=Us(i.tree,a);if(!o)throw new wt("unknown-path",`${e} does not exist`);const l=n.name===void 0?o.name:sa(n.name);if(n.icon!==void 0&&!Nl(n.icon))throw new wt("invalid-id",`${n.icon} is not a valid icon name`);const f=n.icon??o.icon,p=a.slice(0,-1);let b=p,g=[s,...p].join("/");if(n.parent!==void 0){const R=n.parent??s;if(Gs(R,e))throw new wt("invalid-move",`${e} cannot be moved under itself`);b=this.#u(s,R),g=R}const k=Yi(g,o.id),y=k!==e;if(y&&(b.length===0?i.tree:Us(i.tree,b)?.children??[]).some(P=>P.id===o.id))throw new wt("duplicate-id",`${k} exists`);const S={id:o.id,name:l,...f===void 0?{}:{icon:f},...o.children===void 0?{}:{children:o.children}},T=Gl(i.tree,a),I=n.position??(y?void 0:Uc(i.tree,a)),C=Fl(T,b,S,I);if(Cl(C),JSON.stringify(C)===JSON.stringify(i.tree))return{revision:this.#e,changed:!1};this.#t.set(s,{name:i.name,tree:C});const D=[];return y?(this.#h(e,k),D.push({kind:"node.moved",enum:s,from:e,to:k})):n.position!==void 0&&I!==Uc(i.tree,a)?D.push({kind:"node.moved",enum:s,from:e,to:e}):D.push({kind:"node.updated",enum:s,path:e,value:S}),this.#v(D)}deleteNode(e,n="refuse"){const{enumId:s,ids:a}=this.#c(e),i=this.getEnum(s);if(!Us(i.tree,a))throw new wt("unknown-path",`${e} does not exist`);const l=this.#f([e]);if(l.refs.length>0&&n!=="detach")throw new wt("has-members",`${e} still has members`,{refs:[...l.refs]});return this.#t.set(s,{name:i.name,tree:Gl(i.tree,a)}),this.#g(l),this.#v([{kind:"node.deleted",enum:s,path:e}])}import(e,n="replace"){const s=Ol(e),a=this.document(),i=n==="merge"?Ol({format:1,revision:a.revision,objects:{...a.objects,...s.objects},enums:{...a.enums,...s.enums}}):s;return s1(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=kh(this.enums());for(const s of e)if(!n.has(s))throw new wt("unknown-path",`${s} does not exist`,{path:s});return e}#d(e){const n=_a(e);if(!n)throw new wt("unknown-path",`${e} is not a node path`);const s=this.getEnum(n.enumId);if(n.ids.length>0&&!Us(s.tree,n.ids))throw new wt("unknown-path",`${e} does not exist`)}#c(e){const n=_a(e);if(!n||n.ids.length===0)throw new wt("unknown-path",`${e} is not a node path`);return{enumId:n.enumId,ids:n.ids}}#u(e,n){const s=_a(n);if(!s||s.enumId!==e)throw new wt("unknown-path",`${n} is not a path of ${e}`);if(s.ids.length>0&&!Us(this.getEnum(e).tree,s.ids))throw new wt("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=>Gs(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=>Gs(i,o)));this.#n.set(n,za(s.name,a,s.meta,s.orphaned===!0))}}#h(e,n){for(const[s,a]of this.#n){if(!a.enums.some(o=>Gs(o,e)))continue;const i=a.enums.map(o=>Gs(o,e)?`${n}${o.slice(e.length)}`:o);this.#n.set(s,za(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 wh({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 za(r,e,n,s){return s?{name:r,enums:e,meta:n,orphaned:!0}:{name:r,enums:e,meta:n}}function d1(r,e){const n={...r};for(const[s,a]of Object.entries(ho(e)))a===null?delete n[s]:n[s]=a;return ho(n)}function Ah(r,e,n){return e?.name[n]??e?.name.en??r}function Bc(r,e,n={}){const s=new Set;for(const i of e){const o=_a(i);if(!(!o||o.ids.length===0)&&!(n.enumId!==void 0&&o.enumId!==n.enumId)&&(s.add(i),n.ancestors===!0))for(let l=1;l<o.ids.length;l+=1)s.add([o.enumId,...o.ids.slice(0,l)].join("/"))}const a=[];for(const[i,o]of Object.entries(r))if(!(n.enumId!==void 0&&i!==n.enumId))for(const l of ki(i,o))s.has(l.path)&&!a.includes(l.node.name)&&a.push(l.node.name);return a}function c1(r){const e={};for(const[n,s]of Object.entries(r))e[n]=ki(n,s);return e}function u1(r,e,n={}){return{name:e.name,rooms:Bc(r,e.enums,{...n,enumId:"room"}),functions:Bc(r,e.enums,{...n,enumId:"function"}),paths:e.enums,orphaned:e.orphaned===!0}}const f1=[[/ä/g,"ae"],[/ö/g,"oe"],[/ü/g,"ue"],[/ß/g,"ss"],[/å/g,"a"],[/æ/g,"ae"],[/ø/g,"oe"]];function Vc(r){let e=r.toLowerCase();for(const[n,s]of f1)e=e.replace(n,s);return e=e.normalize("NFKD").replace(/[̀-ͯ]/g,"").replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,_o),ua(e)?e:""}function Th(r,e=[]){const n=new Set(e),s=Vc(r)===""?"node":Vc(r);if(!n.has(s))return s;for(let a=2;a<1e3;a+=1){const i=`${s.slice(0,_o-String(a).length-1)}-${String(a)}`;if(!n.has(i))return i}throw new Error(`no free id for ${r}`)}const Rh={"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 h1(r,e){return r==="tr"?"other":e===1?"one":"other"}function qo(r,e){return r.replace(/\{(\w+)\}/g,(n,s)=>{const a=e[s];return a===void 0?n:String(a)})}const m1=["en","de"];class v1{language;#e;#n;constructor(e,n={}){this.language=e,this.#e=n.catalogue??Rh;const s=n.fallbacks??m1;this.#n=[e,...s.filter(a=>a!==e)]}has(e){return this.#t(e)!==void 0}t(e,n={},s){const a=this.#t(e),i=s===void 0?n:{count:s,...n};if(a===void 0)return qo(e,i);const[o,l]=a;if(typeof o=="string")return qo(o,i);const f=h1(l,s??0);return qo(o[f],i)}#t(e){const n=Object.prototype.hasOwnProperty.call(this.#e,e)?this.#e[e]:void 0;if(n)for(const s of this.#n){const a=n[s];if(a!==void 0)return[a,s]}}}function p1(r,e={}){return new v1(r,e)}class Hc{#e;constructor(e,...n){this.#e=[e,...n].filter(s=>s!==void 0)}get languages(){return this.#e.map(e=>e.language)}channelType(e){return this.#n(n=>n.channelTypes,va(e))??e}deviceModel(e){return this.#n(n=>n.deviceModels,va(e))??e}parameter(e,n){return this.#n(s=>s.parameters,$o(e,n))??e}parameterValue(e,n,s){const a=$o(`${e}|${n}`,s);return a.push(...va(n)),this.#n(i=>i.parameterValues,a)??n}specialValue(e,n,s){const a=this.parameterValue(e,n,s);return a!==n?a:this.#n(i=>i.parameters,va(n))??n}parameterHelp(e,n){return this.#n(s=>s.parameterHelp,$o(e,n))}uiLabel(e){return this.#n(n=>n.uiLabels,Nd([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 $o(r,e){const n=r.replace(/^(?:SHORT|LONG)_/i,"");return Nd((n===r?[r]:[r,n]).flatMap(a=>{const i=va(a);if(e===void 0||e==="")return i;const o=va(e).map(l=>`${l}|${a}`);return[...o,...o.map(l=>l.toUpperCase()),...i]}))}function va(r){return Nd([r,r.toUpperCase()])}function Nd(r){return[...new Set(r)]}const g1={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}"},"The name was not saved":{de:"Der Name wurde nicht gespeichert",en:"The name was not saved"},"{count} changes were not saved":{de:{one:"Eine Änderung wurde nicht gespeichert. Sie ist markiert; Übernehmen versucht sie erneut.",other:"{count} Änderungen wurden nicht gespeichert. Sie sind markiert; Übernehmen versucht sie erneut."},en:{one:"One change was not saved. It is marked; Apply tries it again.",other:"{count} changes were not saved. They are marked; Apply tries them again."}},"{count} rows selected":{de:{one:"Eine Zeile ausgewählt",other:"{count} Zeilen ausgewählt"},en:{one:"One row selected",other:"{count} rows selected"}},"Select one or more rows":{de:"Eine oder mehrere Zeilen auswählen",en:"Select one or more rows"},"The store does not take writes":{de:"Der Speicher nimmt keine Änderungen an",en:"The store does not take writes"},"No store connected":{de:"Kein Speicher verbunden",en:"No store connected"},"No rooms yet":{de:"Noch keine Räume",en:"No rooms yet"},"No functions yet":{de:"Noch keine Gewerke",en:"No functions yet"},Add:{de:"Anlegen",en:"Add"},"Add below":{de:"Darunter anlegen",en:"Add below"},Move:{de:"Verschieben",en:"Move"},"Move to":{de:"Verschieben nach",en:"Move to"},"Top level":{de:"Oberste Ebene",en:"Top level"},"New name":{de:"Neuer Name",en:"New name"},"Delete and detach":{de:"Löschen und Zuordnungen entfernen",en:"Delete and detach"},"Still assigned here - the assignments are removed with the node:":{de:"Noch zugeordnet - die Zuordnungen werden mit dem Knoten entfernt:",en:"Still assigned here - the assignments are removed with the node:"},"Nothing is assigned here":{de:"Hier ist nichts zugeordnet",en:"Nothing is assigned here"},"A floor is a room with rooms below it: add one, then add rooms below it.":{de:"Eine Etage ist ein Raum mit Räumen darunter: erst die Etage anlegen, dann Räume darunter.",en:"A floor is a room with rooms below it: add one, then add rooms below it."},"Rooms are a flat list on this system: no floors, no room below another.":{de:"Räume sind auf diesem System eine flache Liste: keine Etagen, kein Raum unter einem anderen.",en:"Rooms are a flat list on this system: no floors, no room below another."},Metadata:{de:"Metadaten",en:"Metadata"},Taxonomy:{de:"Taxonomie",en:"Taxonomy"},"New taxonomy":{de:"Neue Taxonomie",en:"New taxonomy"},"No taxonomies yet":{de:"Noch keine Taxonomien",en:"No taxonomies yet"},"{count} taxonomies":{de:{one:"{count} Taxonomie",other:"{count} Taxonomien"},en:{one:"{count} taxonomy",other:"{count} taxonomies"}},"{count} rooms":{de:{one:"{count} Raum",other:"{count} Räume"},en:{one:"{count} room",other:"{count} rooms"}},"{count} functions":{de:{one:"{count} Gewerk",other:"{count} Gewerke"},en:{one:"{count} function",other:"{count} functions"}},"Select a row":{de:"Eine Zeile auswählen",en:"Select a row"},"Select a node":{de:"Einen Knoten auswählen",en:"Select a node"},"Select a taxonomy or a node":{de:"Eine Taxonomie oder einen Knoten auswählen",en:"Select a taxonomy or a node"},"Names and rooms":{de:"Namen und Räume",en:"Names and rooms"},"Where names, rooms and functions are kept":{de:"Wo Namen, Räume und Gewerke gespeichert sind",en:"Where names, rooms and functions are kept"},Store:{de:"Speicher",en:"Store"},Automatic:{de:"Automatisch",en:"Automatic"},"This profile":{de:"Dieses Profil",en:"This profile"},"API token":{de:"API-Token",en:"API token"},"Only needed off the box":{de:"Nur nötig, wenn nicht auf der Box",en:"Only needed off the box"},"From the pairing, or the system's API tokens page":{de:"Aus der Kopplung oder von der API-Token-Seite des Systems",en:"From the pairing, or the system's API tokens page"},"Test connection":{de:"Verbindung testen",en:"Test connection"},"Testing…":{de:"Test läuft…",en:"Testing…"},"Nothing answers at {url} ({reason})":{de:"Unter {url} antwortet nichts ({reason})",en:"Nothing answers at {url} ({reason})"},"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"}},b1={...Rh,...g1},Cd=["de","en"],Ul="en",_1={de:"Deutsch",en:"English",tr:"Türkçe"};function xh(){if(typeof navigator>"u")return[];const r=navigator.languages;return r!==void 0&&r.length>0?r:navigator.language===""?[]:[navigator.language]}function E1(r=xh()){for(const e of r){const n=e.toLowerCase().split("-")[0],s=Cd.find(a=>a===n);if(s!==void 0)return s}return Ul}function y1(r,e=xh()){return(r===void 0||r==="auto"?void 0:Cd.find(s=>s===r))??E1(e)}class S1{#e=N(Ul);#n=c(()=>p1(t(this.#e),{catalogue:b1}));constructor(e=Ul){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 k1=_("<option> </option>"),w1=_('<select class="hmm-select hmm-language svelte-oq8zre"><option> </option><!></select>');function A1(r,e){dt(e,!0);let n=V(e,"language",15,"auto"),s=V(e,"label",3,"Language"),a=V(e,"autoLabel",3,"Browser language"),i=V(e,"onchange",3,void 0),o=V(e,"testId",3,void 0);var l=w1(),f=w(l),p=m(f,!0);f.value=f.__value="auto";var b=d(f);je(b,16,()=>Cd,k=>k,(k,y)=>{var S=k1(),T=m(S,!0),I={};E(()=>{h(T,_1[y]),I!==(I=y)&&(S.value=(S.__value=I)??"")}),v(k,S)});var g;Yt(l),E(()=>{x(l,"aria-label",s()),x(l,"title",s()),x(l,"data-testid",o()),h(p,a()),g!==(g=n())&&(l.value=(l.__value=g)??"",Pn(l,g))}),ne("change",l,k=>{n(k.currentTarget.value),i()?.(n())}),v(r,l),ct()}yt(["change"]);function T1(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 zc(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 R1=_('<button type="button" class="hmm-multiselect-link svelte-vbwhwd"> </button> <button type="button" class="hmm-multiselect-link svelte-vbwhwd"> </button>',1),x1=_('<span class="hmm-multiselect-check" aria-hidden="true"> </span>'),I1=_('<span class="hmm-multiselect-hint svelte-vbwhwd"> </span>'),D1=_('<span class="hmm-multiselect-description svelte-vbwhwd"> </span>'),N1=_('<span class="hmm-multiselect-lines svelte-vbwhwd"><span class="hmm-multiselect-line svelte-vbwhwd"><span class="hmm-multiselect-label svelte-vbwhwd"> </span> <!></span> <!></span>'),C1=_("<span> </span>"),P1=_('<li><button type="button" role="option" tabindex="-1"><!> <!></button></li>'),M1=_('<li class="hmm-multiselect-empty svelte-vbwhwd">—</li>'),O1=_('<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>'),L1=_('<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 di(r,e){dt(e,!0);let n=V(e,"selected",31,()=>Be([])),s=V(e,"multiple",3,!0),a=V(e,"placeholder",3,""),i=V(e,"filterLabel",3,"Filter"),o=V(e,"checkAllLabel",3,"Check all"),l=V(e,"uncheckAllLabel",3,"Uncheck all"),f=V(e,"summary",3,void 0),p=V(e,"disabled",3,!1),b=V(e,"label",3,void 0),g=V(e,"onchange",3,void 0),k=V(e,"testId",3,void 0),y=V(e,"inline",3,!1),S=N(!1),T=N(""),I=N(void 0),C=N(void 0),D=N(void 0),R=N(0);const P=`hmm-multiselect-${Math.random().toString(36).slice(2,8)}`,K=c(()=>new Set(n())),X=c(()=>T1(e.options,t(T))),ae=c(()=>t(S)&&t(X)[t(R)]?`${P}-${t(R)}`:void 0),ue=c(()=>n().length===0?a():f()?f()(n(),e.options):n().length===1?e.options.find(F=>F.value===n()[0])?.label??n()[0]??"":`${n().length}`);function fe(F){n(F),g()?.(F)}function B(){const F=t(X).findIndex(W=>t(K).has(W.value));u(R,F<0?0:F,!0),u(S,!0)}function re(F){u(S,!1),F&&t(C)?.focus()}function de(F){if(F.disabled!==!0){if(!s()){fe([F.value]),re(!0);return}fe(t(K).has(F.value)?n().filter(W=>W!==F.value):[...n(),F.value])}}function ee(){fe(t(X).filter(F=>F.disabled!==!0).map(F=>F.value))}function se(){fe([])}function Y(F){t(S)&&t(I)&&F.target instanceof Node&&!t(I).contains(F.target)&&u(S,!1)}st(()=>{t(T),u(R,0)}),st(()=>{if(!t(S)||!t(D))return;const F=t(D).querySelector(`#${P}-${t(R)}`);typeof F?.scrollIntoView=="function"&&F.scrollIntoView({block:"nearest"})});function Z(F){switch(F.key){case"ArrowDown":F.preventDefault(),u(R,zc(t(X),t(R),1),!0);break;case"ArrowUp":F.preventDefault(),u(R,zc(t(X),t(R),-1),!0);break;case"Enter":{F.preventDefault();const W=t(X)[t(R)];W&&de(W);break}case"Escape":F.preventDefault(),F.stopPropagation(),re(!0);break;case"Tab":re(!1);break}}function te(F){!t(S)&&(F.key==="ArrowDown"||F.key==="ArrowUp")&&(F.preventDefault(),B())}function xe(F){F.key==="Escape"&&t(S)&&re(!0)}function J(F){return!!F.hint||!!F.description}function ye(F){F.focus()}var Re=L1();Ir("mousedown",ca,Y),Ir("keydown",ca,xe);let ge;var H=w(Re),pe=w(H),ve=m(pe,!0);fn(H,F=>u(C,F),()=>t(C));var Q=d(H,2);{var oe=F=>{var W=O1(),O=w(W),z=w(O);go(()=>Sn(z,()=>t(T),L=>u(T,L))),Ff(z,L=>ye?.(L));var ce=d(z,2);{var me=L=>{var A=R1(),M=Ie(A),he=m(M,!0),Te=d(M,2),Pe=m(Te,!0);E(()=>{h(he,o()),h(Pe,l())}),ne("click",M,ee),ne("click",Te,se),v(L,A)};$(ce,L=>{s()&&L(me)})}var be=d(O,2),Ee=w(be);je(Ee,19,()=>t(X),L=>L.value,(L,A,M)=>{var he=P1(),Te=w(he);let Pe;var He=w(Te);{var qe=j=>{var U=x1(),Ne=m(U,!0);E(Le=>h(Ne,Le),[()=>t(K).has(t(A).value)?"☑":"☐"]),v(j,U)};$(He,j=>{s()&&j(qe)})}var it=d(He,2);{var tt=j=>{var U=N1(),Ne=w(U),Le=w(Ne),ze=m(Le,!0),_e=d(Le,2);{var De=Oe=>{var Xe=I1(),Ye=m(Xe,!0);E(()=>h(Ye,t(A).hint)),v(Oe,Xe)};$(_e,Oe=>{t(A).hint&&Oe(De)})}var Ce=d(Ne,2);{var Fe=Oe=>{var Xe=D1(),Ye=m(Xe,!0);E(()=>{x(Xe,"title",t(A).description),h(Ye,t(A).description)}),v(Oe,Xe)};$(Ce,Oe=>{t(A).description&&Oe(Fe)})}E(Oe=>{x(Ne,"title",Oe),h(ze,t(A).label)},[()=>[t(A).label,t(A).hint].filter(Boolean).join(" ")]),v(j,U)},Se=c(()=>J(t(A))),we=j=>{var U=C1(),Ne=m(U,!0);E(()=>h(Ne,t(A).label)),v(j,U)};$(it,j=>{t(Se)?j(tt):j(we,-1)})}E((j,U,Ne)=>{x(Te,"id",`${P}-${t(M)}`),Pe=Et(Te,1,"hmm-multiselect-option svelte-vbwhwd",null,Pe,{"hmm-multiselect-two-lines":j,"hmm-multiselect-selected":U,"hmm-multiselect-highlight":t(M)===t(R)}),x(Te,"aria-selected",Ne),Te.disabled=t(A).disabled===!0},[()=>J(t(A)),()=>t(K).has(t(A).value),()=>t(K).has(t(A).value)]),ne("mousedown",Te,j=>j.preventDefault()),ne("mousemove",Te,()=>u(R,t(M),!0)),ne("click",Te,()=>de(t(A))),v(L,he)});var le=d(Ee,2);{var G=L=>{var A=M1();v(L,A)};$(le,L=>{t(X).length===0&&L(G)})}fn(be,L=>u(D,L),()=>t(D)),E(()=>{x(z,"placeholder",i()),x(z,"aria-label",i()),x(z,"aria-controls",`${P}-list`),x(z,"aria-activedescendant",t(ae)),x(be,"aria-multiselectable",s()),x(be,"id",`${P}-list`),x(be,"aria-label",b())}),ne("keydown",z,Z),v(F,W)};$(Q,F=>{t(S)&&F(oe)})}fn(Re,F=>u(I,F),()=>t(I)),E(()=>{ge=Et(Re,1,"hmm-multiselect svelte-vbwhwd",null,ge,{"hmm-multiselect-inline":y()}),x(Re,"data-testid",k()),x(H,"aria-expanded",t(S)),x(H,"aria-controls",`${P}-list`),x(H,"aria-label",b()),H.disabled=p(),h(ve,t(ue))}),ne("click",H,()=>t(S)?re(!0):B()),ne("keydown",H,te),v(r,Re),ct()}yt(["click","keydown","mousedown","mousemove"]);async function Ih(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 Dh(r,e,n,s,a){await r.request("rpc.call",e,"suppressServiceMessages",[n,s,a])}function F1(r,e,n){return`suppressServiceMessages(${r}, ${JSON.stringify(e)}, ${n?"true":"false"})`}function ci(r,e=""){return/hmip/i.test(r)||/hmip/i.test(e)}function G1(r,e){return[...new Set([...cb,...e.map(n=>n.name).filter(n=>n!==""),...r])]}function Bl(r,e,n){return n!==""&&!_d(n)&&r.every((s,a)=>a===e||s.name!==n)}function U1(r,e,n,s,a,i){const o=Bl(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&&Bl(e,n,a)&&!f.includes(a)&&f.splice(p>=0?p:f.length,0,a),{interfaces:f,ticked:l}}function B1(r,e,n){const s=e[n]?.name??"";return Bl(e,n,s)?r.filter(a=>a!==s):[...r]}const V1=[9e5,18e5,36e5,144e5,0],Vl="default";function H1(r,e){const n=V1.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 z1(r,e){return r===void 0||r===e?Vl:String(r)}function j1(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 W1=_('<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),K1=_('<p class="hmm-autoack-question svelte-2iq8s1" data-testid="auto-ack-question-text"> </p> <p class="hmm-autoack-help svelte-2iq8s1"> </p>',1);function Y1(r,e){dt(e,!0);let n=V(e,"open",15,!1);const a=Ut().i18n.t;function i(o){n(!1),o()}{const o=f=>{var p=W1(),b=Ie(p),g=m(b,!0),k=d(b,2),y=m(k,!0);E((S,T)=>{h(g,S),h(y,T)},[()=>a("Only new ones"),()=>a("Acknowledge existing")]),ne("click",b,()=>i(e.onlynew)),ne("click",k,()=>i(e.onacknowledge)),v(f,p)};let l=c(()=>a("Acknowledge the messages already in the list?"));kn(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 b=K1(),g=Ie(b),k=m(g,!0),y=d(g,2),S=m(y,!0);E((T,I)=>{h(k,T),h(S,I)},[()=>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,b)},$$slots:{buttons:!0,default:!0}})}ct()}yt(["click"]);var q1=_('<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>'),$1=_('<span class="hmm-config-error svelte-1xydm3c" data-testid="config-error"> </span>'),X1=_('<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),Q1=_('<small data-testid="config-test-result"> </small>'),ja=_("<option> </option>"),Z1=_('<small class="hmm-config-help svelte-1xydm3c" data-testid="config-callback-lite"> </small>'),J1=_('<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>'),eE=_('<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>'),tE=_('<button type="button" class="hmm-button" data-testid="config-trust-ca"> </button>'),nE=_('<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>'),rE=_('<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>'),sE=_('<button type="button" class="hmm-button" data-testid="config-pairing-cancel"> </button>'),aE=_('<button type="button" class="hmm-button" data-testid="config-pair"> </button>'),iE=_('<span class="hmm-config-buttons svelte-1xydm3c" data-testid="config-pairing"><!></span>'),oE=_('<span class="hmm-config-code svelte-1xydm3c" data-testid="config-pairing-code"> </span> <small class="hmm-config-help svelte-1xydm3c"> </small>',1),lE=_('<small class="hmm-config-help svelte-1xydm3c" data-testid="config-pairing-requesting"> </small>'),dE=_('<small class="hmm-config-note svelte-1xydm3c" data-testid="config-pairing-done"> </small>'),cE=_('<small class="hmm-config-warning svelte-1xydm3c" data-testid="config-pairing-failed"> </small>'),uE=_('<input type="checkbox" disabled="" data-testid="config-rega"/> <small class="hmm-config-help svelte-1xydm3c"> </small>',1),fE=_('<input type="checkbox" data-testid="config-rega"/> <small class="hmm-config-help svelte-1xydm3c"> </small>',1),hE=_('<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>'),mE=_('<small class="hmm-config-note svelte-1xydm3c" data-testid="config-auto-ack-existing-note"> </small>'),vE=_('<select class="hmm-select" disabled="" data-testid="config-idle"><option> </option></select> <small class="hmm-config-help svelte-1xydm3c" data-testid="config-idle-pinned"> </small>',1),pE=_('<select class="hmm-select" data-testid="config-idle"><option> </option><!></select> <small class="hmm-config-help svelte-1xydm3c"> </small>',1),gE=_('<label class="hmm-config-row svelte-1xydm3c"><span class="hmm-config-label svelte-1xydm3c"> </span> <span class="hmm-config-field svelte-1xydm3c"><!></span></label>'),bE=_('<span class="hmm-config-problem svelte-1xydm3c"> </span>'),_E=_('<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>'),EE=_('<p data-testid="config-host-info" class="svelte-1xydm3c"> <span class="hmm-mono"> </span></p>'),yE=_('<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>'),SE=_("<!> <!>",1);function kE(r,e){dt(e,!0);let n=V(e,"open",15,!1);const s=Ut(),a=s.i18n.t;let i=N(void 0),o=N(!1),l=N(!1),f=N(!1),p=N(!1),b=N(!1),g=N(void 0),k=N(""),y=N(!1);const S=c(()=>s.app.config?.connection),T=c(()=>s.app.config?.callbackDefaultPorts),I=c(()=>s.app.config?.callbackPinned);function C(_e){return t(I)?.[_e]===!0}function D(_e){return a("Set at start ({option})",{option:ob(_e)})}const R=c(()=>s.app.config?.idleUnsubscribe);function P(_e){if(_e===0)return a("Never unsubscribe");const{unit:De,count:Ce}=j1(_e);return De==="hours"?a("{count} hours",{},Ce):De==="minutes"?a("{count} minutes",{},Ce):a("{count} seconds",{},Ce)}function K(_e){t(i)&&(_e===Vl?delete t(i).idleUnsubscribeMs:t(i).idleUnsubscribeMs=Number(_e))}const X=c(()=>t(l)||t(i)===void 0||t(S)===void 0||JSON.stringify(Ui(t(i)))!==JSON.stringify(t(S))||t(o)!==(t(S).auth!==void 0));st(()=>{if(n()&&t(i)===void 0){s.app.saveError="",u(oe,!1),u(F,!1);const _e=s.app.config?.connection;u(i,_e?structuredClone(Ui(_e)):{host:"",interfaces:[...ub],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:Ce}=t(i);ue=De.map(Fe=>Ce.includes(Fe.name))}if(!n()){u(i,void 0);const _e=s.app.pairing?.state;(_e==="requesting"||_e==="code")&&s.app.cancelPairing(),u(g,void 0),u(k,""),u(y,!1)}});const ae=c(()=>G1(t(i)?.interfaces??[],t(i)?.extraInterfaces??[]).map(_e=>({value:_e,label:_e})));let ue=[];const fe=c(()=>s.app.config?.localAddresses??[]);let B;st(()=>{if(!n()||t(i)===void 0){B=void 0;return}const _e=t(i).host.trim();if(_e===B)return;const Ce=setTimeout(()=>{B=_e,s.app.loadCallbackAddresses(_e)},B===void 0?0:400);return()=>{clearTimeout(Ce)}});const re=c(()=>s.app.callbackAddresses!==void 0&&s.app.callbackAddresses.host===t(i)?.host.trim()?s.app.callbackAddresses:void 0),de=c(()=>{if(t(re)===void 0)return a("Automatic");const{address:_e,reason:De}=t(re).auto,Ce={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:_e,why:Ce})}),ee=c(()=>t(re)===void 0?t(fe).map(_e=>({address:_e,label:_e})):t(re).addresses.map(_e=>{const De=[...t(re).hostAddress!==void 0&&!_e.inSubnet?[a("not in the CCU's network")]:[],..._e.linkLocal===!0?[a("link-local")]:[]];return{address:_e.address,label:De.length===0?_e.address:`${_e.address} (${De.join(", ")})`}})),se=c(()=>{const _e=t(i)?.callback.ip??"";if(_e===""||t(re)===void 0||t(re).keepsConfigured===!0||C("ip")||t(i)?.local===!0||_e==="127.0.0.1")return"";const De=t(re).addresses.find(Ce=>Ce.address===_e);return De===void 0?a("The callback address {address} is not an address of this machine; {auto} is used instead",{address:_e,auto:t(re).auto.address}):t(re).hostAddress!==void 0&&!De.inSubnet&&_e!==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:_e}):""}),Y=c(()=>s.app.config?.discovered??[]),Z=c(()=>s.app.config?.version??""),te=c(()=>s.meta.manifest),xe=c(()=>s.host.info),J=c(()=>t(te)===void 0?"":`${t(te).sources.map(_e=>`${_e.name} ${_e.version}`).join(", ")} (${t(te).generatedAt.slice(0,10)})`),ye=c(()=>t(xe)===void 0?"":`Electron ${t(xe).electron} · Chromium ${t(xe).chrome} · Node ${t(xe).node} · ${t(xe).platform} ${t(xe).arch}`);async function Re(){if(!t(i))return;u(f,!0);const _e=le(),De=await s.app.save(_e,_e.autoAckStickyUnreach===!0&&t(F)?{acknowledgeExisting:!0}:void 0);De&&t(l)&&(await s.app.clearCaches(),u(l,!1)),u(f,!1),De&&(s.app.setLanguage(_e.language??"auto"),s.i18n.language=s.app.language,n(!1),await s.start())}async function ge(){u(p,!0),await s.app.discover(),u(p,!1)}function H(){if(!t(i))return;const _e={name:"",host:"",port:2001,protocol:"xmlrpc",path:""};t(i).extraInterfaces=[...t(i).extraInterfaces,_e],ue=[...ue,!0]}function pe(_e,De){const Ce=t(i)?.extraInterfaces[_e];if(!t(i)||!Ce||Ce.name===De)return;const Fe=U1(t(i).interfaces,t(i).extraInterfaces,_e,Ce.name,De,ue[_e]??!1);ue[_e]=Fe.ticked,t(i).extraInterfaces[_e]={...Ce,name:De},t(i).interfaces=Fe.interfaces}function ve(_e){t(i)&&(t(i).interfaces=B1(t(i).interfaces,t(i).extraInterfaces,_e),t(i).extraInterfaces=t(i).extraInterfaces.filter((De,Ce)=>Ce!==_e),ue=ue.filter((De,Ce)=>Ce!==_e))}const Q=c(()=>s.serviceMessages.messages.filter(_e=>_e.datapoint==="STICKY_UNREACH"&&_e.value!==!1&&!ci(_e.interfaceName,s.interfaces.typeOf(_e.interfaceName))).length);let oe=N(!1),F=N(!1),W;function O(_e){if(!t(i))return;const De=t(i).autoAckStickyUnreach;t(i).autoAckStickyUnreach=_e,u(F,!1),_e&&t(S)?.autoAckStickyUnreach!==!0&&t(Q)>0&&(W=De,u(oe,!0))}function z(){t(i)&&(W===void 0?delete t(i).autoAckStickyUnreach:t(i).autoAckStickyUnreach=W),u(F,!1)}const ce=c(()=>s.interfaces.rega?.reason==="openccu-lite"&&t(i)!==void 0&&t(i).host.trim()===(t(S)?.host??"").trim()),me=c(()=>{if(t(i)===void 0||t(i).local===!0)return!1;const _e=t(i).host.trim();return _e===""?!1:t(g)!==void 0&&t(k)===_e?t(g).kind==="openccu-lite":s.interfaces.states.some(De=>De.lite===!0)&&_e===(t(S)?.host??"").trim()}),be=c(()=>{if(t(i)===void 0||t(g)===void 0||t(k)!==t(i).host.trim())return"";if(t(g).kind==="unreachable")return t(g).reason==="certificate"&&t(g).certificate!==void 0?a("The certificate of {url} is not trusted ({code}); it can be trusted under Names and rooms",{url:t(g).certificate.url,code:t(g).certificate.code}):a("Nothing answers at {url} ({reason})",{url:t(g).url,reason:t(g).reason??"error"});if(t(g).kind==="ccu")return a("A CCU or OpenCCU at {url}: XML-RPC with callbacks",{url:t(g).url});const _e={none:()=>a("no API token: pair the application with the system"),refused:()=>a("the API token is refused"),"names-only":()=>a("the API token reads names only: pair for devices and values"),full:()=>a("the API token is accepted")}[t(g).token?.state??"none"]();return`${a("openccu-lite ({implementation}) at {url}: lite-rpc, no callbacks",{implementation:t(g).implementation??"occulited",url:t(g).url})} · ${_e}`}),Ee=c(()=>s.app.pairing);st(()=>{t(Ee)?.state==="approved"&&t(i)!==void 0&&(t(i).metaToken=t(Ee).token,t(Ee).fingerprint256!==""&&qe("certificates",t(Ee).fingerprint256),u(y,!0),s.app.pairing=void 0)});function le(){const _e={...structuredClone(Ui(t(i))),...t(o)&&t(i)?.auth?{auth:{...t(i).auth}}:{}};return t(o)||delete _e.auth,_e}async function G(){if(!t(i))return;u(b,!0);const _e=t(i).host.trim(),De=await s.app.testConnection(le());u(g,De,!0),u(k,_e,!0),u(b,!1)}async function L(){t(i)&&(u(y,!1),await s.app.pair(le()))}function A(_e){t(i)&&(t(i).autoConfirmRegaInbox=_e)}const M={auto:()=>a("Automatic"),local:()=>a("This profile"),occulite:()=>"occulited",rega:()=>"ReGaHSS"},he=c(()=>s.taxonomy.state),Te=c(()=>t(he)===void 0?a("No store connected"):[M[t(he).provider](),t(he).reachable?a("Reachable"):a("Unreachable"),t(he).reachable?t(he).writable?a("Writable"):a("Read-only"):void 0,a("revision {revision}, {count} objects",{revision:t(he).revision,count:t(he).objects}),t(he).implementation,t(he).error].filter(De=>De!==void 0&&De!=="").join(" · ")),Pe=c(()=>t(he)?.certificate??(t(g)!==void 0&&t(k)===(t(i)?.host.trim()??"")?t(g).certificate:void 0)),He=c(()=>(t(i)?.systemTrust?.certificates?.length??0)+(t(i)?.systemTrust?.cas?.length??0));function qe(_e,De){if(!t(i))return;const Ce=t(i).systemTrust??{},Fe=Ce[_e]??[];Fe.includes(De)||(t(i).systemTrust={...Ce,[_e]:[...Fe,De]})}function it(_e,De){return t(i)?.systemTrust?.[_e]?.includes(De)===!0}function tt(){t(i)&&delete t(i).systemTrust}function Se(_e){t(i)&&hc.some(De=>De===_e)&&(t(i).metaProvider=_e)}function we(_e){t(i)&&(t(i).metaToken=_e)}function j(_e){t(i)&&(t(i).language=_e)}function U(_e,De){if(!t(i))return;const Ce=t(i).auth??{user:"",password:""};t(i).auth={...Ce,[_e]:De}}var Ne=SE(),Le=Ie(Ne);{const _e=Ce=>{var Fe=X1(),Oe=Ie(Fe),Xe=m(Oe,!0),Ye=d(Oe,2);{var Ze=Qe=>{var ut=q1(),bt=d(w(ut),1,!0);E(rt=>h(bt,rt),[()=>a("Saving and reconnecting…")]),v(Qe,ut)};$(Ye,Qe=>{t(f)&&Qe(Ze)})}var Je=d(Ye,2);{var at=Qe=>{var ut=$1(),bt=m(ut);E(rt=>h(bt,`${rt??""}: ${s.app.saveError??""}`),[()=>a("Error")]),v(Qe,ut)};$(Je,Qe=>{s.app.saveError!==""&&Qe(at)})}var gt=d(Je,2),mt=m(gt,!0),ke=d(gt,2),Me=m(ke,!0);E((Qe,ut,bt,rt)=>{Oe.disabled=Qe,h(Xe,ut),h(mt,bt),ke.disabled=t(f)||!t(X),h(Me,rt)},[()=>t(b)||t(i)===void 0||t(i).host.trim()==="",()=>t(b)?a("Testing…"):a("Test connection"),()=>a("Cancel"),()=>a("Save & Restart")]),ne("click",Oe,()=>{G()}),ne("click",gt,()=>n(!1)),ne("click",ke,()=>{Re()}),v(Ce,Fe)};let De=c(()=>a("Settings"));kn(Le,{get title(){return t(De)},width:"960px",testId:"config-dialog",get open(){return n()},set open(Ce){n(Ce)},buttons:_e,children:(Ce,Fe)=>{var Oe=St(),Xe=Ie(Oe);{var Ye=Ze=>{var Je=yE(),at=w(Je),gt=w(at),mt=w(gt),ke=w(mt),Me=m(ke,!0),Qe=d(ke,2),ut=w(Qe),bt=w(ut),rt=m(bt,!0),qt=d(bt,2),xt=w(qt),Lt=d(xt,2),Zt=m(Lt,!0),_n=d(Lt,2);{var gn=We=>{var lt=Q1(),ft=m(lt,!0);E(()=>{Et(lt,1,op(t(g)?.reachable===!1||t(g)?.reason==="certificate"?"hmm-config-warning":"hmm-config-help"),"svelte-1xydm3c"),h(ft,t(be))}),v(We,lt)};$(_n,We=>{t(be)!==""&&We(gn)})}var ln=d(ut,2),bn=w(ln),wn=m(bn,!0),Zn=d(bn,2),Kn=w(Zn),Jt=w(Kn),Mt=w(Jt),dn=m(Mt,!0);Mt.value=Mt.__value="";var Gn=d(Mt);je(Gn,17,()=>t(Y),We=>We.address,(We,lt)=>{var ft=ja(),zt=m(ft),jt={};E(()=>{h(zt,`${t(lt).address??""} ${t(lt).serial??""??""} ${t(lt).firmware??""??""}`),jt!==(jt=t(lt).address)&&(ft.value=(ft.__value=jt)??"")}),v(We,ft)});var Nn=d(Jt,2),Sr=m(Nn,!0),Ur=d(Kn,2),Jn=m(Ur,!0),Un=d(ln,2),kr=w(Un),os=m(kr,!0),er=d(kr,2),wr=w(er),Br=d(wr,2),or=m(Br,!0),Ar=d(Un,2),lr=w(Ar),Jr=m(lr,!0),Pr=d(lr,2),Tr=w(Pr),ie=d(Ar,2),Ge=w(ie),$t=m(Ge,!0),hn=d(Ge,2),Bn=w(hn),tr=d(ie,2),ot=w(tr),vt=m(ot,!0),Dt=d(ot,2),Ve=w(Dt),Ke=d(mt,2),et=w(Ke),pt=m(et,!0),Tt=d(et,2);{var Kt=We=>{var lt=Z1(),ft=m(lt,!0);E(zt=>h(ft,zt),[()=>a("None: an openccu-lite system does not call a remote client back; the events come from its stream.")]),v(We,lt)},en=We=>{var lt=eE(),ft=w(lt),zt=w(ft),jt=m(zt,!0),It=d(zt,2),Qt=w(It),Gt=w(Qt),Nt=m(Gt,!0);Gt.value=Gt.__value="";var sn=d(Gt);je(sn,17,()=>t(ee),Rn=>Rn.address,(Rn,Rr)=>{var Fr=ja(),ts=m(Fr,!0),ds={};E(()=>{h(ts,t(Rr).label),ds!==(ds=t(Rr).address)&&(Fr.value=(Fr.__value=ds)??"")}),v(Rn,Fr)});var an=d(sn);{var In=Rn=>{var Rr=ja(),Fr=m(Rr,!0),ts={};E(()=>{h(Fr,t(i).callback.ip),ts!==(ts=t(i).callback.ip)&&(Rr.value=(Rr.__value=ts)??"")}),v(Rn,Rr)},pr=c(()=>t(i).callback.ip!==""&&!t(ee).some(Rn=>Rn.address===t(i)?.callback.ip));$(an,Rn=>{t(pr)&&Rn(In)})}Yt(Qt);var Yn=d(Qt,2),es=m(Yn,!0),vn=d(Yn,2);{var Hn=Rn=>{var Rr=J1(),Fr=w(Rr),ts=m(Fr,!0),ds=d(Fr,2),Po=m(ds,!0);E(Mo=>{h(ts,t(se)),h(Po,Mo)},[()=>a("Use automatic")]),ne("click",ds,()=>{t(i)&&(t(i).callback.ip="")}),v(Rn,Rr)};$(vn,Rn=>{t(se)!==""&&Rn(Hn)})}var qn=d(ft,2),En=w(qn),ur=m(En,!0),fr=d(En,2),Lr=w(fr),ks=d(Lr,2),Xs=m(ks,!0),Qs=d(qn,2),fa=w(Qs),Io=m(fa,!0),Do=d(fa,2),Va=w(Do),No=d(Va,2),Co=m(No,!0);E((Rn,Rr,Fr,ts,ds,Po,Mo,Cm,Pm,Mm)=>{h(jt,Rn),Qt.disabled=Rr,x(Qt,"title",Fr),h(Nt,t(de)),h(es,ts),h(ur,ds),Lr.disabled=Po,h(Xs,Mo),h(Io,Cm),Va.disabled=Pm,h(Co,Mm)},[()=>a("Homematic Manager Address"),()=>C("ip"),()=>a("Automatic takes this machine's address in the CCU's network, else the one on the route to the CCU"),()=>C("ip")?D("ip"):a("The address the interface processes call back to"),()=>a("Callback XML-RPC port"),()=>C("xmlrpcPort"),()=>C("xmlrpcPort")?D("xmlrpcPort"):t(T)&&t(T).xmlrpc!==0?a("0 uses port {port}, or a free one when it is taken",{port:String(t(T).xmlrpc)}):a("0 picks a free port"),()=>a("Callback BIN-RPC port"),()=>C("binrpcPort"),()=>C("binrpcPort")?D("binrpcPort"):t(T)&&t(T).binrpc!==0?a("0 uses port {port}, or a free one when it is taken",{port:String(t(T).binrpc)}):a("0 picks a free port")]),yr(Qt,()=>t(i).callback.ip,Rn=>t(i).callback.ip=Rn),Sn(Lr,()=>t(i).callback.xmlrpcPort,Rn=>t(i).callback.xmlrpcPort=Rn),Sn(Va,()=>t(i).callback.binrpcPort,Rn=>t(i).callback.binrpcPort=Rn),v(We,lt)};$(Tt,We=>{t(me)?We(Kt):We(en,-1)})}var Bt=d(Ke,2),Ft=w(Bt),yn=m(Ft,!0),pn=d(Ft,2),cn=w(pn),An=w(cn),nr=m(An,!0),Xt=d(An,2),Rt=w(Xt);je(Rt,20,()=>hc,We=>We,(We,lt)=>{var ft=ja(),zt=m(ft,!0),jt={};E(It=>{h(zt,It),jt!==(jt=lt)&&(ft.value=(ft.__value=jt)??"")},[()=>M[lt]()]),v(We,ft)});var $e;Yt(Rt);var ht=d(Rt,2),At=m(ht,!0),tn=d(cn,2);{var Cn=We=>{var lt=nE(),ft=w(lt),zt=m(ft,!0),jt=d(ft,2),It=w(jt),Qt=m(It,!0),Gt=d(It,2),Nt=m(Gt),sn=d(Gt,2),an=w(sn),In=m(an,!0),pr=d(an,2);{var Yn=Hn=>{const qn=c(()=>t(Pe).ca);var En=tE(),ur=m(En,!0);E((fr,Lr)=>{En.disabled=fr,h(ur,Lr)},[()=>it("cas",t(qn).pem),()=>a("Trust the CA {name}",{name:t(qn).subject})]),ne("click",En,()=>qe("cas",t(qn).pem)),v(Hn,En)};$(pr,Hn=>{t(Pe).ca!==void 0&&Hn(Yn)})}var es=d(sn,2),vn=m(es,!0);E((Hn,qn,En,ur,fr,Lr)=>{h(zt,Hn),h(Qt,qn),h(Nt,`${En??""}${t(Pe).certificate.altNames===void 0?"":` · ${t(Pe).certificate.altNames}`} \\u00b7 SHA-256
|
|
13
|
+
${t(Pe).certificate.fingerprint256??""}`),an.disabled=ur,h(In,fr),h(vn,Lr)},[()=>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(Pe).url,code:t(Pe).code}),()=>a("{subject}, issued by {issuer}, valid until {validTo}",{subject:t(Pe).certificate.subject,issuer:t(Pe).certificate.issuer,validTo:t(Pe).certificate.validTo}),()=>it("certificates",t(Pe).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.")]),ne("click",an,()=>qe("certificates",t(Pe).certificate.fingerprint256)),v(We,lt)};$(tn,We=>{t(Pe)!==void 0&&We(Cn)})}var rr=d(tn,2);{var Mn=We=>{var lt=rE(),ft=w(lt),zt=m(ft,!0),jt=d(ft,2),It=w(jt),Qt=m(It,!0),Gt=d(It,2),Nt=m(Gt,!0);E((sn,an,In)=>{h(zt,sn),h(Qt,an),h(Nt,In)},[()=>a("Trusted certificates"),()=>a("{count} certificates or CAs of the system are trusted",{},t(He)),()=>a("Forget them")]),ne("click",Gt,tt),v(We,lt)};$(rr,We=>{t(He)>0&&We(Mn)})}var ls=d(rr,2),sr=w(ls),ar=m(sr,!0),Vr=d(sr,2),Hr=w(Vr),dr=w(Hr),Ss=d(dr,2);{var Ks=We=>{var lt=iE(),ft=w(lt);{var zt=It=>{var Qt=sE(),Gt=m(Qt,!0);E(Nt=>h(Gt,Nt),[()=>a("Cancel")]),ne("click",Qt,()=>{s.app.cancelPairing()}),v(It,Qt)},jt=It=>{var Qt=aE(),Gt=m(Qt,!0);E((Nt,sn,an)=>{Qt.disabled=Nt,x(Qt,"title",sn),h(Gt,an)},[()=>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")]),ne("click",Qt,()=>{L()}),v(It,Qt)};$(ft,It=>{t(Ee)?.state==="requesting"||t(Ee)?.state==="code"?It(zt):It(jt,-1)})}v(We,lt)};$(Ss,We=>{t(i).local!==!0&&We(Ks)})}var wi=d(Hr,2),yo=m(wi,!0),Ai=d(wi,2);{var So=We=>{var lt=St(),ft=Ie(lt);{var zt=Gt=>{var Nt=oE(),sn=Ie(Nt),an=m(sn,!0),In=d(sn,2),pr=m(In,!0);E(Yn=>{h(an,t(Ee).code),h(pr,Yn)},[()=>a("Approve it on the system's Status page: the same code is shown there.")]),v(Gt,Nt)},jt=Gt=>{var Nt=lE(),sn=m(Nt,!0);E(an=>h(sn,an),[()=>a("Asking the system…")]),v(Gt,Nt)},It=Gt=>{var Nt=dE(),sn=m(Nt,!0);E(an=>h(sn,an),[()=>a("Paired: the token is in the field above. Save to connect.")]),v(Gt,Nt)},Qt=Gt=>{var Nt=cE(),sn=m(Nt,!0);E(()=>h(sn,t(Ee).message)),v(Gt,Nt)};$(ft,Gt=>{t(Ee)?.state==="code"?Gt(zt):t(Ee)?.state==="requesting"?Gt(jt,1):t(y)?Gt(It,2):t(Ee)?.state==="failed"&&Gt(Qt,3)})}v(We,lt)};$(Ai,We=>{t(i).local!==!0&&We(So)})}var Ti=d(gt,2),Ri=w(Ti),La=w(Ri),ko=m(La,!0),wo=d(La,2),xi=w(wo),q=w(xi),Ae=m(q,!0),Ue=d(q,2),nt=w(Ue);{let We=c(()=>a("Interfaces")),lt=c(()=>a("Filter")),ft=c(()=>a("Check all")),zt=c(()=>a("Uncheck all")),jt=c(()=>a("Select"));di(nt,{get options(){return t(ae)},get label(){return t(We)},get filterLabel(){return t(lt)},get checkAllLabel(){return t(ft)},get uncheckAllLabel(){return t(zt)},summary:It=>It.join(", "),get placeholder(){return t(jt)},get selected(){return t(i).interfaces},set selected(It){t(i).interfaces=It}})}var Ot=d(nt,2),kt=m(Ot,!0),_t=d(xi,2),Tn=w(_t),mn=m(Tn,!0),cr=d(Tn,2),Vn=w(cr),xn=d(Vn,2),Vt=m(xn,!0),nn=d(Ri,2),rn=d(w(nn),2),un=w(rn),zr=w(un),Os=m(zr,!0),jr=d(zr,2),Mr=w(jr);{var Ys=We=>{var lt=uE(),ft=Ie(lt);Cr(ft,!1);var zt=d(ft,2),jt=m(zt,!0);E(It=>h(jt,It),[()=>a("Switched off: the system has no ReGaHSS")]),v(We,lt)},Fa=We=>{var lt=fE(),ft=Ie(lt),zt=d(ft,2),jt=m(zt,!0);E(It=>h(jt,It),[()=>a("ReGa supplies the friendly names")]),hr(ft,()=>t(i).rega,It=>t(i).rega=It),v(We,lt)};$(Mr,We=>{t(ce)?We(Ys):We(Fa,-1)})}var Ao=d(un,2);{var To=We=>{var lt=hE(),ft=w(lt),zt=m(ft,!0),jt=d(ft,2),It=w(jt),Qt=d(It,2),Gt=m(Qt,!0);E((Nt,sn)=>{h(zt,Nt),It.disabled=!t(i).rega,Cr(It,t(i).autoConfirmRegaInbox===!0),h(Gt,sn)},[()=>a("Confirm the ReGa inbox automatically"),()=>a("Only possible with ReGa")]),ne("change",It,Nt=>A(Nt.currentTarget.checked)),v(We,lt)};$(Ao,We=>{t(ce)||We(To)})}var Ro=d(nn,2),Ii=w(Ro),mr=m(Ii,!0),Or=d(Ii,2),ir=w(Or),qs=w(ir),Ga=m(qs,!0),Ua=d(qs,2),$s=w(Ua);{let We=c(()=>t(i).language??"auto"),lt=c(()=>a("Language")),ft=c(()=>a("Browser language"));A1($s,{get language(){return t(We)},get label(){return t(lt)},get autoLabel(){return t(ft)},testId:"config-language",onchange:j})}var Di=d(ir,2),vr=w(Di),Ba=m(vr,!0),om=d(vr,2),Md=w(om),lm=d(Md,2),dm=m(lm,!0),Od=d(Di,2),Ld=w(Od),cm=m(Ld,!0),um=d(Ld,2),xo=w(um),Fd=d(xo,2),fm=m(Fd,!0),hm=d(Fd,2);{var mm=We=>{var lt=mE(),ft=m(lt,!0);E(zt=>h(ft,zt),[()=>a("{count} messages in the list are acknowledged when this is saved",{},t(Q))]),v(We,lt)};$(hm,We=>{t(F)&&t(i).autoAckStickyUnreach===!0&&We(mm)})}var Gd=d(Od,2);{var vm=We=>{var lt=gE(),ft=w(lt),zt=m(ft,!0),jt=d(ft,2),It=w(jt);{var Qt=Nt=>{var sn=vE(),an=Ie(sn),In=w(an),pr=m(In,!0),Yn={},es=d(an,2),vn=m(es,!0);E((Hn,qn,En)=>{h(pr,Hn),Yn!==(Yn=qn)&&(In.__value=Yn),h(vn,En)},[()=>P(t(R).pinnedMs),()=>P(t(R).pinnedMs),()=>a("Set at start ({option})",{option:"HMM_IDLE_UNSUBSCRIBE / --idle-unsubscribe"})]),v(Nt,sn)},Gt=Nt=>{var sn=pE(),an=Ie(sn),In=w(an),pr=m(In,!0),Yn={},es=d(In);je(es,16,()=>H1(t(R).defaultMs,t(i).idleUnsubscribeMs),En=>En,(En,ur)=>{var fr=ja(),Lr=m(fr,!0),ks={};E((Xs,Qs)=>{h(Lr,Xs),ks!==(ks=Qs)&&(fr.value=(fr.__value=ks)??"")},[()=>P(ur),()=>String(ur)]),v(En,fr)});var vn;Yt(an);var Hn=d(an,2),qn=m(Hn,!0);E((En,ur,fr)=>{h(pr,En),Yn!==(Yn=Vl)&&(In.value=(In.__value=Yn)??""),vn!==(vn=ur)&&(an.value=(an.__value=vn)??"",Pn(an,vn)),h(qn,fr)},[()=>a("Default ({time})",{time:P(t(R).defaultMs)}),()=>z1(t(i).idleUnsubscribeMs,t(R).defaultMs),()=>a("With no page open, the event subscriptions are dropped after this time and taken up again when a page is opened")]),ne("change",an,En=>K(En.currentTarget.value)),v(Nt,sn)};$(It,Nt=>{t(R).pinnedMs!==void 0?Nt(Qt):Nt(Gt,-1)})}E(Nt=>h(zt,Nt),[()=>a("Unsubscribe when idle")]),v(We,lt)};$(Gd,We=>{t(R)!==void 0&&We(vm)})}var Ud=d(Gd,2),Bd=w(Ud),pm=m(Bd,!0),gm=d(Bd,2),Vd=w(gm),bm=d(Vd,2),_m=m(bm,!0),Em=d(Ud,2),Hd=w(Em),ym=m(Hd,!0),Sm=d(Hd,2),zd=w(Sm),km=d(zd,2),wm=m(km,!0),jd=d(at,2),Wd=w(jd),Am=m(Wd,!0),Kd=d(Wd,2);je(Kd,17,()=>t(i).extraInterfaces,ao,(We,lt,ft)=>{const zt=c(()=>mb(t(lt)));var jt=_E(),It=w(jt),Qt=d(It,2),Gt=d(Qt,2),Nt=d(Gt,2),sn=w(Nt);sn.value=sn.__value="xmlrpc";var an=d(sn);an.value=an.__value="binrpc",Yt(Nt);var In=d(Nt,2),pr=d(In,2),Yn=d(pr,2);{var es=vn=>{var Hn=bE(),qn=m(Hn,!0);E((En,ur)=>{x(Hn,"data-testid",En),h(qn,ur)},[()=>`config-extra-problem-${String(ft)}`,()=>t(zt).join(", ")]),v(vn,Hn)};$(Yn,vn=>{t(zt).length>0&&vn(es)})}E((vn,Hn,qn,En,ur,fr,Lr,ks,Xs,Qs,fa)=>{x(jt,"data-testid",vn),x(It,"placeholder",Hn),x(It,"aria-label",qn),on(It,t(lt).name),x(Qt,"placeholder",En),x(Qt,"aria-label",ur),x(Gt,"placeholder",fr),x(Gt,"aria-label",Lr),x(Nt,"aria-label",ks),x(In,"placeholder",Xs),x(In,"aria-label",Qs),x(pr,"aria-label",fa)},[()=>`config-extra-${String(ft)}`,()=>a("Name"),()=>`${a("Name")} ${String(ft)}`,()=>a("Host"),()=>`${a("Host")} ${String(ft)}`,()=>a("Port"),()=>`${a("Port")} ${String(ft)}`,()=>`${a("Protocol")} ${String(ft)}`,()=>a("Path"),()=>`${a("Path")} ${String(ft)}`,()=>`${a("Remove")} ${String(ft)}`]),ne("input",It,vn=>pe(ft,vn.currentTarget.value)),Sn(Qt,()=>t(lt).host,vn=>t(lt).host=vn),Sn(Gt,()=>t(lt).port,vn=>t(lt).port=vn),yr(Nt,()=>t(lt).protocol,vn=>t(lt).protocol=vn),Sn(In,()=>t(lt).path,vn=>t(lt).path=vn),ne("click",pr,()=>ve(ft)),v(We,jt)});var Yd=d(Kd,2),Tm=m(Yd,!0),Rm=d(jd,2),qd=w(Rm),$d=w(qd),xm=d($d);{var Im=We=>{var lt=Qn();E(ft=>h(lt,`· ${ft??""}: ${t(J)??""}`),[()=>a("Device data")]),v(We,lt)};$(xm,We=>{t(J)!==""&&We(Im)})}var Dm=d(qd,2);{var Nm=We=>{var lt=EE(),ft=w(lt),zt=d(ft),jt=m(zt,!0);E(()=>{h(ft,`${t(ye)??""} · `),h(jt,t(xe)?.logFile??"")}),v(We,lt)};$(Dm,We=>{t(ye)!==""&&We(Nm)})}E((We,lt,ft,zt,jt,It,Qt,Gt,Nt,sn,an,In,pr,Yn,es,vn,Hn,qn,En,ur,fr,Lr,ks,Xs,Qs,fa,Io,Do,Va,No,Co,Rn,Rr,Fr,ts,ds)=>{h(Me,We),h(rt,lt),h(Zt,ft),h(wn,zt),x(Jt,"aria-label",jt),Jt.disabled=t(Y).length===0,h(dn,It),Nn.disabled=t(p),h(Sr,Qt),h(Jn,Gt),h(os,Nt),h(or,sn),h(Jr,an),h($t,In),Bn.disabled=!t(o),on(Bn,t(i).auth?.user??""),h(vt,pr),Ve.disabled=!t(o),on(Ve,t(i).auth?.password??""),h(pt,Yn),h(yn,es),h(nr,vn),$e!==($e=t(i).metaProvider??"auto")&&(Rt.value=(Rt.__value=$e)??"",Pn(Rt,$e)),h(At,t(Te)),h(ar,Hn),on(dr,t(i).metaToken??""),h(yo,qn),h(ko,En),h(Ae,ur),h(kt,fr),h(mn,Lr),h(Vt,ks),h(Os,Xs),h(mr,Qs),h(Ga,fa),h(Ba,Io),h(dm,Do),h(cm,Va),Cr(xo,t(i).autoAckStickyUnreach===!0),h(fm,No),h(pm,Co),h(_m,Rn),h(ym,Rr),h(wm,Fr),h(Am,ts),h(Tm,ds),h($d,`Homematic Manager ${t(Z)??""} `)},[()=>a("Connection"),()=>a("CCU Address"),()=>a("Host name or address of the CCU"),()=>a("Discovered CCUs"),()=>a("Discovered CCUs"),()=>t(p)?a("Searching..."):a("Select"),()=>a("Discover"),()=>a("Searches the network for CCUs over UDP"),()=>a("Use TLS"),()=>a("The encrypted ports of the CCU"),()=>a("Use Auth"),()=>a("Auth User"),()=>a("Auth Pass"),()=>a("Callback"),()=>a("Names and rooms"),()=>a("Store"),()=>a("API token"),()=>t(me)?a("From the pairing, or the system's API tokens page"):a("Only needed off the box"),()=>a("Interfaces"),()=>a("Configured interfaces"),()=>a("An extra interface is connected once it is ticked here"),()=>a("Detect interfaces"),()=>a("Probes the known ports in the background"),()=>a("Use ReGa"),()=>a("Behaviour"),()=>a("Language"),()=>a("RPC Delay (ms)"),()=>a("Shortest pause between two writes"),()=>a("Acknowledge STICKY_UNREACH automatically as they occur"),()=>a("Acknowledging is a write to the device. Switching this on asks once about the messages already in the list."),()=>a("RPC Log Folder"),()=>a("Empty switches the dumps off"),()=>a("Clear Cache"),()=>a("Discards the caches when this is saved"),()=>a("Extra interfaces"),()=>a("Add interface")]),Sn(xt,()=>t(i).host,We=>t(i).host=We),ne("change",Jt,We=>{t(i)&&We.currentTarget.value!==""&&(t(i).host=We.currentTarget.value)}),ne("click",Nn,()=>{ge()}),hr(wr,()=>t(i).tls,We=>t(i).tls=We),hr(Tr,()=>t(o),We=>u(o,We)),ne("input",Bn,We=>U("user",We.currentTarget.value)),ne("input",Ve,We=>U("password",We.currentTarget.value)),ne("change",Rt,We=>Se(We.currentTarget.value)),ne("input",dr,We=>we(We.currentTarget.value)),hr(Vn,()=>t(i).autoDetect,We=>t(i).autoDetect=We),Sn(Md,()=>t(i).writePaceMs,We=>t(i).writePaceMs=We),ne("change",xo,We=>O(We.currentTarget.checked)),Sn(Vd,()=>t(i).rpcLogFolder,We=>t(i).rpcLogFolder=We),hr(zd,()=>t(l),We=>u(l,We)),ne("click",Yd,H),v(Ze,Je)};$(Xe,Ze=>{t(i)&&Ze(Ye)})}v(Ce,Oe)},$$slots:{buttons:!0,default:!0}})}var ze=d(Le,2);Y1(ze,{get count(){return t(Q)},onacknowledge:()=>u(F,!0),onlynew:()=>u(F,!1),oncancel:z,get open(){return t(oe)},set open(_e){u(oe,_e,!0)}}),v(r,Ne),ct()}yt(["click","change","input"]);var wE=_('<div class="hmm-toolbar-trailing svelte-1ld6r3r"><!></div>'),AE=_('<div class="hmm-toolbar svelte-1ld6r3r" role="toolbar"><div class="hmm-toolbar-group svelte-1ld6r3r"><!></div> <!></div>');function TE(r,e){let n=V(e,"label",3,"Toolbar"),s=V(e,"children",3,void 0),a=V(e,"trailing",3,void 0),i=V(e,"testId",3,void 0);var o=AE(),l=w(o),f=w(l);{var p=k=>{var y=St(),S=Ie(y);Vs(S,s),v(k,y)};$(f,k=>{s()&&k(p)})}var b=d(l,2);{var g=k=>{var y=wE(),S=w(y);Vs(S,a),v(k,y)};$(b,k=>{a()&&k(g)})}E(()=>{x(o,"aria-label",n()),x(o,"data-testid",i())}),v(r,o)}const RE=["address","device_address","channel_address","interface_address","team_address"];function xE(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 IE(r){return RE.includes(r.type)}function Xo(r){return(jb(r)??Wb(r)).params.map(n=>({name:n.name,type:n.type,kind:xE(n),optional:n.optional??[],...n.values?{options:n.values}:{},...n.bitmask?{options:n.bitmask}:{}}))}function Hl(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 jc(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 Wa(r){return typeof r=="object"?JSON.stringify(r):String(r)}function DE(r,e){switch(r.kind){case"bool":return e===!0||e==="true";case"number":case"flags":return typeof e=="number"?e:Number.parseInt(Wa(e),10)||0;case"struct":{const n={};for(const s of Array.isArray(e)?e:[])s.key!==""&&(n[s.key]=jc(s));return n}case"variant":{const n=e;return jc({type:n.type,value:n.value})}case"json":return CE(Wa(e));case"select":return/^-?\d+$/.test(Wa(e))?Number(e):Wa(e);default:return Wa(e)}}function NE(r,e){return r.map((n,s)=>DE(n,e[s]??Hl(n)))}function CE(r){if(r.trim()==="")return[];try{return JSON.parse(r)}catch{return[]}}function PE(r){if(r.trim()==="")return!0;try{return JSON.parse(r),!0}catch{return!1}}var ME=_("<span> </span>"),OE=_("<!> <!>",1),Wc=_("<option> </option>"),LE=_('<p class="hmm-console-hint svelte-17kjuug"> </p>'),FE=_('<input type="checkbox"/>'),GE=_('<input class="hmm-input" type="number"/>'),UE=_('<select class="hmm-select"></select>'),BE=_('<label><input type="checkbox"/> <span> </span></label>'),VE=_('<div class="hmm-console-flags svelte-17kjuug"><!> <span class="hmm-console-arg-type svelte-17kjuug"> </span></div>'),HE=_('<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>'),zE=_('<div class="hmm-console-struct svelte-17kjuug"><!> <button type="button" class="hmm-button">+</button></div>'),jE=_('<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>'),WE=_("<textarea></textarea>"),KE=_('<input class="hmm-input"/>'),YE=_('<span class="hmm-console-arg-type svelte-17kjuug"> </span>'),qE=_('<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>'),$E=_("<option></option>"),XE=_('<span class="hmm-console-error svelte-17kjuug" data-testid="console-error"> </span>'),QE=_('<section class="hmm-console-help svelte-17kjuug" data-testid="console-help-section"><h3 class="svelte-17kjuug"> </h3> <p data-testid="console-help"> </p></section>'),ZE=_('<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 JE(r,e){dt(e,!0);const n=Ut(),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)===""?[]:Xo(t(a))),b=c(()=>n.console.method(t(l),t(a))),g=c(()=>n.devices.index(t(l))?.all().map(le=>le.ADDRESS)??[]),k=c(()=>NE(t(p),t(i)));st(()=>{n.console.load(t(l))}),st(()=>{const le=n.console.takeRecall(t(l));le!==void 0&&ae(le)});function y(le){u(a,le,!0),u(i,Xo(le).map(G=>Hl(G)),!0),u(o,void 0)}function S(le,G){u(i,t(i).map((L,A)=>A===le?G:L),!0)}function T(le){const G=t(i)[le];return Array.isArray(G)?G:[]}function I(le){const G=t(i)[le];return typeof G=="object"&&!Array.isArray(G)?G:{type:"string",value:""}}function C(le){S(le,[...T(le),{key:"",type:"string",value:""}])}function D(le,G,L){S(le,T(le).map((A,M)=>M===G?{...A,...L}:A))}function R(le,G){S(le,T(le).filter((L,A)=>A!==G))}function P(le,G,L){const A=typeof t(i)[le]=="number"?t(i)[le]:0;S(le,L?A|G:A&~G)}async function K(){t(a)!==""&&u(o,await n.console.call(t(l),t(a),t(k)),!0)}function X(le){return typeof le=="object"&&le!==null&&!Array.isArray(le)}function ae(le){u(a,le.method,!0);const G=Xo(le.method);u(i,G.map((L,A)=>{const M=le.params[A];return L.kind==="struct"&&X(M)?Object.entries(M).map(([he,Te])=>({key:he,type:typeof Te=="boolean"?"bool":typeof Te=="number"?"double":"string",value:String(Te)})):L.kind==="json"?JSON.stringify(M??[]):L.kind==="bool"?M===!0:L.kind==="number"||L.kind==="flags"?typeof M=="number"?M:0:M===void 0?Hl(L):String(M)}),!0),u(o,void 0)}var ue=ZE(),fe=w(ue);{const le=L=>{var A=ME(),M=m(A);E(he=>h(M,`${t(f).length??""} ${he??""}`),[()=>s("Method")]),v(L,A)};let G=c(()=>s("RPC Console"));TE(fe,{get label(){return t(G)},trailing:le,children:(L,A)=>{var M=OE(),he=Ie(M);{let Pe=c(()=>s("Send request")),He=c(()=>t(a)===""||n.console.running),qe=c(()=>s("Please select method"));Ct(he,{get title(){return t(Pe)},icon:"▸",get disabled(){return t(He)},get reason(){return t(qe)},testId:"console-send",onclick:()=>{K()}})}var Te=d(he,2);{let Pe=c(()=>s("Clear"));Ct(Te,{get title(){return t(Pe)},icon:"⌫",testId:"console-clear",onclick:()=>{u(o,void 0)}})}v(L,M)},$$slots:{trailing:!0,default:!0}})}var B=d(fe,2),re=w(B),de=w(re),ee=m(de,!0);de.value=de.__value="";var se=d(de);je(se,17,()=>t(f),le=>le.name,(le,G)=>{var L=Wc(),A=m(L,!0),M={};E(()=>{h(A,t(G).name),M!==(M=t(G).name)&&(L.value=(L.__value=M)??"")}),v(le,L)});var Y;Yt(re);var Z=d(re,2),te=m(Z),xe=d(Z,2),J=m(xe,!0),ye=d(B,2),Re=w(ye),ge=w(Re),H=m(ge,!0),pe=d(ge,2);{var ve=le=>{var G=LE(),L=m(G,!0);E(A=>h(L,A),[()=>t(a)===""?s("Please select method"):s("No data")]),v(le,G)};$(pe,le=>{t(p).length===0&&le(ve)})}var Q=d(pe,2);je(Q,19,()=>t(p),le=>le.name,(le,G,L)=>{var A=qE(),M=w(A),he=w(M),Te=d(he),Pe=m(Te,!0),He=d(M,2);{var qe=_e=>{var De=FE();E(()=>{x(De,"id",`arg-input-${t(G).name}`),Cr(De,t(i)[t(L)]===!0)}),ne("change",De,Ce=>S(t(L),Ce.currentTarget.checked)),v(_e,De)},it=_e=>{var De=GE();E(Ce=>{x(De,"id",`arg-input-${t(G).name}`),on(De,Ce)},[()=>String(t(i)[t(L)]??0)]),ne("input",De,Ce=>S(t(L),Number(Ce.currentTarget.value))),v(_e,De)},tt=_e=>{var De=UE();je(De,21,()=>Object.entries(t(G).options??{}),([Fe,Oe])=>Fe,(Fe,Oe)=>{var Xe=c(()=>Qd(t(Oe),2));let Ye=()=>t(Xe)[0],Ze=()=>t(Xe)[1];var Je=Wc(),at=m(Je),gt={};E(()=>{h(at,`${Ze()??""} (${Ye()??""})`),gt!==(gt=Ye())&&(Je.value=(Je.__value=gt)??"")}),v(Fe,Je)});var Ce;Yt(De),E(Fe=>{x(De,"id",`arg-input-${t(G).name}`),Ce!==(Ce=Fe)&&(De.value=(De.__value=Ce)??"",Pn(De,Ce))},[()=>String(t(i)[t(L)]??"")]),ne("change",De,Fe=>S(t(L),Fe.currentTarget.value)),v(_e,De)},Se=_e=>{var De=VE(),Ce=w(De);je(Ce,17,()=>Object.entries(t(G).options??{}),([Xe,Ye])=>Xe,(Xe,Ye)=>{var Ze=c(()=>Qd(t(Ye),2));let Je=()=>t(Ze)[0],at=()=>t(Ze)[1];var gt=BE(),mt=w(gt),ke=d(mt,2),Me=m(ke,!0);E(Qe=>{Cr(mt,Qe),h(Me,at())},[()=>(t(i)[t(L)]&Number(Je()))!==0]),ne("change",mt,Qe=>P(t(L),Number(Je()),Qe.currentTarget.checked)),v(Xe,gt)});var Fe=d(Ce,2),Oe=m(Fe);E(Xe=>h(Oe,`= ${Xe??""}`),[()=>String(t(i)[t(L)]??0)]),v(_e,De)},we=_e=>{var De=zE(),Ce=w(De);je(Ce,17,()=>T(t(L)),ao,(Oe,Xe,Ye)=>{var Ze=HE(),Je=w(Ze),at=d(Je,2),gt=w(at);gt.value=gt.__value="string";var mt=d(gt);mt.value=mt.__value="integer";var ke=d(mt);ke.value=ke.__value="double";var Me=d(ke);Me.value=Me.__value="bool";var Qe;Yt(at);var ut=d(at,2),bt=d(ut,2);E((rt,qt,xt,Lt)=>{x(Je,"aria-label",rt),on(Je,t(Xe).key),x(at,"aria-label",qt),Qe!==(Qe=t(Xe).type)&&(at.value=(at.__value=Qe)??"",Pn(at,Qe)),x(ut,"aria-label",xt),on(ut,t(Xe).value),x(bt,"aria-label",Lt)},[()=>`${t(G).name} ${String(Ye)} key`,()=>`${t(G).name} ${String(Ye)} type`,()=>`${t(G).name} ${String(Ye)} value`,()=>`${t(G).name} ${String(Ye)} remove`]),ne("input",Je,rt=>D(t(L),Ye,{key:rt.currentTarget.value})),ne("change",at,rt=>D(t(L),Ye,{type:rt.currentTarget.value})),ne("input",ut,rt=>D(t(L),Ye,{value:rt.currentTarget.value})),ne("click",bt,()=>R(t(L),Ye)),v(Oe,Ze)});var Fe=d(Ce,2);E(()=>x(Fe,"data-testid",`arg-${t(G).name}-add`)),ne("click",Fe,()=>C(t(L))),v(_e,De)},j=_e=>{var De=jE(),Ce=w(De),Fe=w(Ce);Fe.value=Fe.__value="string";var Oe=d(Fe);Oe.value=Oe.__value="integer";var Xe=d(Oe);Xe.value=Xe.__value="double";var Ye=d(Xe);Ye.value=Ye.__value="bool";var Ze;Yt(Ce);var Je=d(Ce,2);E((at,gt)=>{x(Ce,"aria-label",`${t(G).name} type`),Ze!==(Ze=at)&&(Ce.value=(Ce.__value=Ze)??"",Pn(Ce,Ze)),x(Je,"id",`arg-input-${t(G).name}`),on(Je,gt)},[()=>I(t(L)).type,()=>I(t(L)).value]),ne("change",Ce,at=>S(t(L),{...I(t(L)),type:at.currentTarget.value})),ne("input",Je,at=>S(t(L),{...I(t(L)),value:at.currentTarget.value})),v(_e,De)},U=_e=>{var De=WE();let Ce;E((Fe,Oe)=>{x(De,"id",`arg-input-${t(G).name}`),Ce=Et(De,1,"hmm-input hmm-console-json svelte-17kjuug",null,Ce,{"hmm-console-invalid":Fe}),on(De,Oe)},[()=>!PE(String(t(i)[t(L)]??"")),()=>String(t(i)[t(L)]??"")]),ne("input",De,Fe=>S(t(L),Fe.currentTarget.value)),v(_e,De)},Ne=_e=>{var De=KE();E((Ce,Fe)=>{x(De,"id",`arg-input-${t(G).name}`),x(De,"list",Ce),on(De,Fe)},[()=>IE(t(G))?"hmm-console-addresses":void 0,()=>String(t(i)[t(L)]??"")]),ne("input",De,Ce=>S(t(L),Ce.currentTarget.value)),v(_e,De)};$(He,_e=>{t(G).kind==="bool"?_e(qe):t(G).kind==="number"?_e(it,1):t(G).kind==="select"?_e(tt,2):t(G).kind==="flags"?_e(Se,3):t(G).kind==="struct"?_e(we,4):t(G).kind==="variant"?_e(j,5):t(G).kind==="json"?_e(U,6):_e(Ne,-1)})}var Le=d(He,2);{var ze=_e=>{var De=YE(),Ce=m(De);E((Fe,Oe)=>h(Ce,`${Fe??""}: ${Oe??""}`),[()=>s("optional"),()=>t(G).optional.join(", ")]),v(_e,De)};$(Le,_e=>{t(G).optional.length>0&&_e(ze)})}E(()=>{x(A,"data-testid",`arg-${t(G).name}`),x(M,"for",`arg-input-${t(G).name}`),h(he,`${t(G).name??""} `),h(Pe,t(G).type)}),v(le,A)});var oe=d(Q,2);je(oe,20,()=>t(g),le=>le,(le,G)=>{var L=$E(),A={};E(()=>{A!==(A=G)&&(L.value=(L.__value=A)??"")}),v(le,L)});var F=d(Re,2),W=w(F),O=w(W),z=d(O);{var ce=le=>{var G=XE(),L=m(G,!0);E(()=>h(L,t(o).error)),v(le,G)};$(z,le=>{t(o)&&!t(o).ok&&le(ce)})}var me=d(W,2),be=d(ye,2);{var Ee=le=>{var G=QE(),L=w(G),A=m(L,!0),M=d(L,2),he=m(M,!0);E(Te=>{h(A,t(b).name),h(he,Te)},[()=>t(b).help.replace(/<[^>]*>/g," ").replace(/\s+/g," ").trim()]),v(le,G)};$(be,le=>{t(b)?.help&&le(Ee)})}E((le,G,L,A,M,he,Te,Pe)=>{x(re,"aria-label",le),h(ee,G),Y!==(Y=t(a))&&(re.value=(re.__value=Y)??"",Pn(re,Y)),h(te,`${t(a)??""}(${L??""})`),xe.disabled=t(a)===""||n.console.running,h(J,A),h(H,M),h(O,`${he??""} `),x(me,"aria-label",Te),on(me,Pe)},[()=>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})`}`]),ne("change",re,le=>y(le.currentTarget.value)),ne("click",xe,()=>{K()}),v(r,ue),ct()}yt(["change","click","input"]);function ey(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 ty=_('<div class="hmm-context-separator svelte-192vamk" role="separator"></div>'),ny=_('<button type="button" role="menuitem"> </button>'),ry=_('<div class="hmm-context-menu svelte-192vamk" role="menu"></div>');function Pd(r,e){dt(e,!0);let n=V(e,"open",15,!1),s=V(e,"x",3,0),a=V(e,"y",3,0),i=V(e,"onselect",3,void 0),o=V(e,"onclose",3,void 0),l=V(e,"label",3,"Menu"),f=V(e,"testId",3,void 0),p=N(void 0),b=N(Be({x:0,y:0}));st(()=>{if(!n()||!t(p))return;const C=t(p).getBoundingClientRect();u(b,ey(s(),a(),{width:C.width||180,height:C.height||0},{width:window.innerWidth,height:window.innerHeight}),!0),t(p).querySelector("button:not(:disabled)")?.focus()});function g(){n(!1),o()?.()}function k(C){C.disabled===!0||C.separator===!0||(g(),i()?.(C.id))}function y(C){n()&&C.key==="Escape"&&(C.preventDefault(),g())}var S=St();Ir("keydown",ca,y),Ir("mousedown",ca,C=>{n()&&t(p)&&C.target instanceof Node&&!t(p).contains(C.target)&&g()});var T=Ie(S);{var I=C=>{var D=ry();let R;je(D,21,()=>e.items,P=>P.id,(P,K)=>{var X=St(),ae=Ie(X);{var ue=B=>{var re=ty();v(B,re)},fe=B=>{var re=ny();let de;var ee=m(re,!0);E(()=>{de=Et(re,1,"hmm-context-item svelte-192vamk",null,de,{"hmm-context-danger":t(K).danger===!0}),re.disabled=t(K).disabled===!0,h(ee,t(K).label??t(K).id)}),ne("click",re,()=>k(t(K))),v(B,re)};$(ae,B=>{t(K).separator===!0?B(ue):B(fe,-1)})}v(P,X)}),fn(D,P=>u(p,P),()=>t(p)),E(()=>{x(D,"aria-label",l()),x(D,"data-testid",f()),R=On(D,"",R,{left:`${t(b).x}px`,top:`${t(b).y}px`})}),v(C,D)};$(T,C=>{n()&&C(I)})}v(r,S),ct()}yt(["click"]);function sy(){return globalThis.navigator?.clipboard}async function ay(r,e={}){const n=sy();if(typeof n?.writeText=="function")try{return await n.writeText(r),"clipboard"}catch{}return iy(r,e.host)?"selection":"failed"}function iy(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 oy="data-measure-skip";function ly(r){return r.scrollWidth>r.clientWidth}function dy(r){return(r.innerText||r.textContent||"").replace(/\s+/g," ").trim()}function cy(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(`[${oy}]`))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 ui=40,uy=1200,fy=600,Kc=10;function fi(r,e=ui,n=uy){return Number.isFinite(r)?Math.round(Math.min(Math.max(r,e),Math.max(e,n))):e}function hy(r,e=ui,n=fy){const s=r.filter(a=>Number.isFinite(a)&&a>0);if(s.length!==0)return fi(Math.ceil(Math.max(...s)),e,n)}function Oi(r){return r.fixed!==!0&&r.hidden!==!0}function Yc(r){return r.keepMinWidth!==!0||r.minWidth===void 0?ui:Math.max(ui,Math.round(r.minWidth))}function my(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]=fi(s));return e}const vy=30,Nh=20,hi=Nh+12,py=22,gy=py+12;function zl(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 ti(r,e){const n=zl(r,e);return n===void 0?"":String(n)}function qi(r){return r.sortable!==!1&&r.hidden!==!0}function Ch(r){return r.filterable!==!1&&r.hidden!==!0}function qc(r,e){return r.toLowerCase().includes(e.toLowerCase())}function $c(r,e,n,s){for(const a of e){const i=s[a.key];if(i!==void 0&&i!==""&&!qc(ti(r,a),i))return!1}return n.trim()===""?!0:e.filter(a=>Ch(a)).some(a=>qc(ti(r,a),n))}function by(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 _y(r){const{rows:e,columns:n,getId:s,children:a,expanded:i}=r,o=r.globalFilter??"",l=r.columnFilters??{},f=r.subColumns??n,b=o.trim()!==""||Object.values(l).some(y=>y!=="")?e.filter(y=>$c(y,n,o,l)||(a?.(y)??[]).some(S=>$c(S,f,o,l))):[...e],g=r.sort;if(g){const y=n.find(S=>S.key===g.key);if(y&&qi(y)){const S=g.direction==="asc"?1:-1;b.sort((T,I)=>S*by(zl(T,y),zl(I,y)))}}const k=[];for(const y of b){const S=s(y),T=a?.(y)??[],I=i.has(S);if(k.push({id:S,key:S,row:y,depth:0,hasChildren:T.length>0,expanded:I,rootId:S,kind:"row"}),!!I){r.subHeader===!0&&T.length>0&&k.push({id:`${S}::header`,key:`${S}::header`,row:y,depth:1,hasChildren:!1,expanded:!1,rootId:S,kind:"header"});for(const C of T)k.push({id:s(C),key:`${S}/${s(C)}`,row:C,depth:1,hasChildren:!1,expanded:!1,rootId:S,kind:"row"})}}return k}function Ey(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 jl=56,Xc=120,Qc=22;function yy(r,e){if(r.width===void 0&&e===void 0)return`minmax(${jl}px, ${Xc}fr)`;if(r.fixed&&r.width!==void 0)return`${r.width}px`;if(e!==void 0)return`${e}px`;const n=r.width??Xc;return`minmax(${Ph(r)}px, ${n}fr)`}function Ph(r){return r.minWidth!==void 0?r.minWidth:Math.min(r.width??jl,jl)}function Sy(r,e){return r.fixed&&r.width!==void 0?r.width:e!==void 0?e:Ph(r)}function Zc(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 ky(r,e){return e===void 0||r.keepMinWidth!==!0||r.minWidth===void 0?e:Math.max(e,r.minWidth)}function Mh(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:ky(a,e[a.key]);n.push(yy(a,i)),s+=Sy(a,i)}return{template:n.join(" "),minWidth:s}}function wy(r,e,n){const s=r.filter(f=>f.hidden!==!0).map(f=>Zc(f)),a=[];let i=0;for(const f of e??[]){if(f.hidden===!0)continue;const p=s.findIndex(b=>b.key===f.key);if(p>=0){i=p+1;continue}s.splice(i,0,Zc(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:Mh({tracks:s,expander:n}).template,track:l,tracks:s,expander:n,subKeys:a}}function Ay(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 Ty(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 Ry(r,e){return r.trim()!==""||Object.values(e).some(n=>n.trim()!=="")}function xy(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 Iy(r,e,n,s,a){if(a.shift===!0&&n!==void 0)return{selected:xy(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 Dy=_('<div role="separator" aria-orientation="vertical" tabindex="0" data-measure-skip=""></div>'),Ny=_('<span class="hmm-table-caption svelte-16k18c8"> </span>'),Cy=_('<div class="hmm-table-actions svelte-16k18c8" role="toolbar"><!></div>'),Jc=_('<span class="hmm-table-count svelte-16k18c8"> </span>'),Py=_('<div class="hmm-table-band svelte-16k18c8"><!> <!> <div class="hmm-table-trailing svelte-16k18c8"><!> <!></div></div>'),My=_('<span class="hmm-th-group-sub svelte-16k18c8"> </span>'),Oy=_('<div class="hmm-th hmm-th-group svelte-16k18c8" role="columnheader"><span class="hmm-th-group-label"> </span> <!></div>'),Ly=_('<div class="hmm-table-groups svelte-16k18c8" role="row"></div>'),Fy=_('<div class="hmm-th hmm-th-expander svelte-16k18c8" role="columnheader"></div>'),Gy=_('<span class="hmm-th-sort svelte-16k18c8" aria-hidden="true"> </span>'),Uy=_('<button type="button" class="hmm-th-button svelte-16k18c8"><span class="hmm-th-label"> </span> <!></button>'),By=_('<span class="hmm-th-label"> </span>'),Vy=_('<div class="hmm-th svelte-16k18c8" role="columnheader"><!> <!></div>'),Hy=_('<div class="hmm-th hmm-th-sub-only svelte-16k18c8"><!></div>'),zy=_('<div class="hmm-tf-spacer"></div>'),jy=_('<input class="hmm-input hmm-tf-input svelte-16k18c8" type="search"/>'),Wy=_('<div class="hmm-tf svelte-16k18c8"><!></div>'),Ky=_('<div class="hmm-table-filters svelte-16k18c8"><!> <!></div>'),Yy=_('<span> </span> <button type="button" class="hmm-button hmm-table-clear svelte-16k18c8"> </button>',1),qy=_('<div class="hmm-table-empty svelte-16k18c8"><!></div>'),$y=_('<button type="button" class="hmm-expander svelte-16k18c8"> </button>'),Xy=_('<div class="hmm-td hmm-td-expander svelte-16k18c8"><!></div>'),Qy=_(" <!>",1),Zy=Ws('<path d="M1.5 5.2 4 7.7 8.5 2.3"></path>'),Jy=Ws('<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),eS=_('<button type="button" data-measure-skip=""><svg class="hmm-copy-icon svelte-16k18c8" viewBox="0 0 10 10" aria-hidden="true"><!></svg></button>'),tS=_('<div role="gridcell"><!> <!></div>'),nS=_('<div role="row" tabindex="-1"><!> <!></div>'),rS=_('<div class="hmm-table-spacer svelte-16k18c8"><div class="hmm-table-rows svelte-16k18c8"></div></div>'),sS=_('<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 js(r,e){dt(e,!0);const n=(q,Ae=Wn,Ue=Wn)=>{var nt=Dy();let Ot;E(kt=>{Ot=Et(nt,1,"hmm-th-resize svelte-16k18c8",null,Ot,{"hmm-th-resize-active":t(Nn)===Ae().key}),x(nt,"aria-label",kt),x(nt,"data-testid",Ue())},[()=>J("Resize column {column}",{column:Ae().label})]),ne("pointerdown",nt,kt=>Ur(kt,Ae().key)),ne("pointermove",nt,Jn),ne("pointerup",nt,kt=>kr(kt,Ae())),Ir("pointercancel",nt,Un),Ir("lostpointercapture",nt,Un),ne("dblclick",nt,kt=>{kt.preventDefault(),Gn||Mt(Ae().key)}),ne("keydown",nt,kt=>os(kt,Ae().key)),v(q,nt)};let s=V(e,"columnGroups",3,void 0),a=V(e,"scope",3,void 0),i=V(e,"subRows",3,void 0),o=V(e,"subColumns",3,void 0),l=V(e,"rowHeight",3,vy),f=V(e,"height",3,void 0),p=V(e,"overscan",3,6),b=V(e,"columnFilterRow",3,!0),g=V(e,"caption",3,void 0),k=V(e,"emptyText",3,""),y=V(e,"noMatchText",3,"No row matches the filter"),S=V(e,"clearFilterLabel",3,"Clear filter"),T=V(e,"showingText",3,void 0),I=V(e,"filterLabel",3,"Filter"),C=V(e,"toolbar",3,void 0),D=V(e,"toolbarLabel",3,void 0),R=V(e,"status",3,void 0),P=V(e,"countText",3,void 0),K=V(e,"selected",31,()=>Be([])),X=V(e,"expanded",31,()=>Be([])),ae=V(e,"filter",15,""),ue=V(e,"sort",15,void 0),fe=V(e,"onactivate",3,void 0),B=V(e,"onrowcontextmenu",3,void 0),re=V(e,"renameColumn",3,"name"),de=V(e,"canRename",3,void 0),ee=V(e,"onrename",3,void 0),se=V(e,"cell",3,void 0),Y=V(e,"tableId",3,void 0),Z=V(e,"subTableId",3,void 0),te=V(e,"testId",3,void 0);const xe=yp();function J(q,Ae={}){return xe?.t===void 0?Sp(q,Ae):xe.t(q,Ae)}let ye=N(Be({})),Re=N(0),ge=N(0),H=N(0),pe=N(0),ve=N(void 0),Q=N(void 0),oe=N(void 0),F=N(void 0),W=N(void 0),O=N(void 0);const z=c(()=>e.columns.filter(q=>q.hidden!==!0)),ce=c(()=>(o()??e.columns).filter(q=>q.hidden!==!0)),me=c(()=>i()!==void 0),be=c(()=>wy(e.columns,o(),t(me)));let Ee=N({}),le=N({}),G=N(void 0);const L=c(()=>{const q=xe?.columnWidths;return Y()===void 0||q===void 0?t(Ee):q.widths(Y())}),A=c(()=>{const q=xe?.columnWidths;return Z()===void 0||q===void 0?t(le):q.widths(Z())}),M=c(()=>Object.keys(t(L)).length>0),he=c(()=>Object.keys(t(A)).length>0),Te=c(()=>new Set(t(be).subKeys)),Pe=c(()=>t(ce).filter(q=>t(Te).has(q.key)&&Oi(q))),He=c(()=>{const q=Ay(t(be),t(L),t(A));return Mh(t(be),t(G)===void 0?q:{...q,[t(G).key]:t(G).width})}),qe=c(()=>Ty(s()??[],e.columns,t(be))),it=c(()=>new Set(X())),tt=c(()=>g()!==void 0||C()!==void 0||R()!==void 0||P()!==void 0),Se=c(()=>new Set(K())),we=c(()=>_y({rows:e.rows,columns:e.columns,getId:e.getId,children:i(),expanded:t(it),globalFilter:ae(),columnFilters:t(ye),sort:ue(),subColumns:o(),subHeader:o()!==void 0})),j=c(()=>f()??t(ge)),U=c(()=>Ey(t(we).length,t(Re),t(j),l(),p())),Ne=c(()=>t(we).slice(t(U).start,t(U).end)),Le=c(()=>Ry(ae(),t(ye))),ze=c(()=>t(we).filter(q=>q.depth===0).length),_e=c(()=>t(Le)&&e.rows.length>0);function De(){u(ye,{},!0)}let Ce=Er(()=>a());st(()=>{a()!==Ce&&(Ce=a(),De(),ae(""),t(Q)&&(t(Q).scrollTop=0,u(Re,0)))}),st(()=>{const q=t(Q);if(!q)return;const Ae=()=>{f()===void 0&&u(ge,q.clientHeight,!0),u(pe,q.offsetWidth-q.clientWidth)};Ae();const Ue=new ResizeObserver(Ae);return Ue.observe(q),()=>{Ue.disconnect()}});function Fe(q){u(Re,q.scrollTop,!0);const Ae=q.scrollLeft===0?"":`translateX(${String(-q.scrollLeft)}px)`;for(const Ue of[t(F),t(W),t(O)])Ue&&Ue.style.transform!==Ae&&(Ue.style.transform=Ae);pt(),pn()}function Oe(q){qi(q)&&(ue()?.key!==q.key?ue({key:q.key,direction:"asc"}):ue().direction==="asc"?ue({key:q.key,direction:"desc"}):ue(void 0))}function Xe(q){X(t(it).has(q)?X().filter(Ae=>Ae!==q):[...X(),q])}function Ye(q,Ae){if(q.kind==="header")return;const Ue=Iy(t(we),K(),t(ve),q.id,Ae);K(Ue.selected),u(ve,Ue.anchorId,!0),u(H,t(we).findIndex(nt=>nt.id===q.id),!0)}function Ze(q,Ae){Ye(q,{ctrl:Ae.ctrlKey||Ae.metaKey,shift:Ae.shiftKey})}function Je(q,Ae){!B()||q.kind==="header"||(Ae.preventDefault(),t(Se).has(q.id)||Ye(q,{}),B()(q.row,Ae))}const at='button, input, select, textarea, a[href], [contenteditable="true"]';function gt(q){return q.target instanceof Element&&q.target.closest(at)!==null}const mt='input, select, textarea, [contenteditable="true"]',ke=new Set(["ArrowDown","ArrowUp","ArrowLeft","ArrowRight","Home","End"]);function Me(q){return q.target instanceof Element&&q.target.closest(mt)!==null}function Qe(q){return q?.kind==="row"&&ee()!==void 0&&(de()?.(q.row)??!0)}function ut(q,Ae){if(q.kind!=="row")return;const Ue=bt(Ae)?.dataset.columnKey;if(Ue===re()&&!gt(Ae)&&Qe(q)){window.getSelection()?.removeAllRanges(),ee()?.(q.row);return}const nt=(q.depth>0?t(ce):t(z)).find(Ot=>Ot.key===Ue);if(nt?.onactivate!==void 0&&!gt(Ae)){window.getSelection()?.removeAllRanges(),nt.onactivate(q.row);return}fe()?.(q.row)}function bt(q){if(!(q.target instanceof Element))return null;const Ae=q.target.closest("[data-column-key]");if(Ae!==null)return Ae;const Ue=q.target.closest("[data-row-id]");if(Ue===null)return null;for(const nt of Ue.querySelectorAll("[data-column-key]")){const Ot=nt.getBoundingClientRect();if(q.clientX>=Ot.left&&q.clientX<Ot.right)return nt}return null}function rt(q,Ae){!Qe(q)||!t(Se).has(q.id)||gt(Ae)||(Ae.preventDefault(),ee()?.(q.row))}function qt(){const q=t(Q);if(!q)return;const Ae=t(H)*l(),Ue=t(j)===0?q.clientHeight:t(j);Ae<q.scrollTop?q.scrollTop=Ae:Ae+l()>q.scrollTop+Ue&&(q.scrollTop=Ae+l()-Ue)}function xt(q,Ae){if(t(we).length===0)return;const Ue=Math.min(t(we).length-1,Math.max(0,t(H)+q)),nt=t(we)[Ue];nt&&(u(H,Ue,!0),Ye(nt,{shift:Ae}),qt())}function Lt(q){if(ke.has(q.key)&&Me(q))return;const Ae=t(we)[t(H)];switch(q.key){case"ArrowDown":q.preventDefault(),xt(1,q.shiftKey);break;case"ArrowUp":q.preventDefault(),xt(-1,q.shiftKey);break;case"Home":q.preventDefault(),xt(-t(we).length,q.shiftKey);break;case"End":q.preventDefault(),xt(t(we).length,q.shiftKey);break;case"ArrowRight":Ae?.hasChildren===!0&&!Ae.expanded&&(q.preventDefault(),Xe(Ae.id));break;case"ArrowLeft":Ae?.hasChildren===!0&&Ae.expanded&&(q.preventDefault(),Xe(Ae.id));break;case"Enter":if(gt(q))break;Ae&&fe()?(q.preventDefault(),fe()(Ae.row)):rt(Ae,q);break;case"F2":rt(Ae,q);break;case" ":Ae&&!gt(q)&&(q.preventDefault(),Ye(Ae,{ctrl:!0}));break;case"Escape":et();break}}const Zt=2,_n=4,gn=14;function ln(q){return t(Te).has(q)?"sub":"table"}function bn(q){const Ae=(ln(q)==="sub"?t(ce):t(z)).find(Ue=>Ue.key===q);return Ae===void 0?ui:Yc(Ae)}function wn(q,Ae){const Ue=xe?.columnWidths,nt=ln(q),Ot=nt==="sub"?Z():Y(),kt=fi(Ae,bn(q));Ot!==void 0&&Ue!==void 0?Ue.set(Ot,q,kt):nt==="sub"?u(le,{...t(le),[q]:kt}):u(Ee,{...t(Ee),[q]:kt})}function Zn(q){const Ae=xe?.columnWidths,Ue=q==="sub"?Z():Y();Ue!==void 0&&Ae!==void 0?Ae.reset(Ue):q==="sub"?u(le,{}):u(Ee,{})}function Kn(q,Ae){if(q===void 0||ln(q)!==Ae)return;const Ue=t(Ae==="sub"?ce:z).find(nt=>nt.key===q);return Ue!==void 0&&Oi(Ue)?Ue:void 0}function Jt(q){const Ae=`[data-column-key="${CSS.escape(q)}"]`;return(ln(q)==="sub"?t(Q)?.querySelector(`.hmm-tr-subhead ${Ae}`):t(W)?.querySelector(Ae))??void 0}function Mt(q){const Ae=ln(q),Ue=Kn(q,Ae),nt=Jt(q);if(!t(oe)||!Ue||!nt)return;const Ot=t(Q)?[...t(Q).querySelectorAll(`.hmm-td[data-column-key="${CSS.escape(q)}"]`)]:[],[kt=0,..._t]=cy(t(oe),[nt,...Ot]),Tn=Ae==="table"&&qi(Ue)&&ue()?.key!==q?kt+gn:kt,mn=hy([Tn,..._t],Yc(Ue));mn!==void 0&&wn(q,mn)}let dn,Gn=!1,Nn=N(void 0);function Sr(q){return q.currentTarget.closest("[data-column-key]")}function Ur(q,Ae){const Ue=Sr(q);if(!(q.button!==0||!Ue)){q.preventDefault();try{q.currentTarget.setPointerCapture(q.pointerId)}catch{}Gn=q.pointerType==="touch"||q.pointerType==="pen",dn={key:Ae,pointerId:q.pointerId,startX:q.clientX,startWidth:Ue.getBoundingClientRect().width,min:bn(Ae),touch:Gn,moved:!1},et()}}function Jn(q){const Ae=dn;if(Ae?.pointerId!==q.pointerId)return;const Ue=q.clientX-Ae.startX;if(!Ae.moved&&Math.abs(Ue)<(Ae.touch?_n:Zt))return;Ae.moved||(Ae.moved=!0,u(Nn,Ae.key,!0));const nt=fi(Ae.startWidth+Ue,Ae.min);(t(G)?.key!==Ae.key||t(G).width!==nt)&&u(G,{key:Ae.key,width:nt})}function Un(q){const Ae=dn;Ae?.pointerId===q.pointerId&&(dn=void 0,u(Nn,void 0),Ae.moved&&t(G)?.key===Ae.key&&wn(Ae.key,t(G).width),u(G,void 0))}function kr(q,Ae){const Ue=dn;Un(q),Ue?.pointerId===q.pointerId&&Ue.touch&&!Ue.moved&&ln(Ae.key)==="table"&&Oe(Ae)}function os(q,Ae){if(q.key==="ArrowLeft"||q.key==="ArrowRight"){const Ue=Sr(q);if(Ue){const nt=q.key==="ArrowRight"?Kc:-Kc;wn(Ae,Ue.getBoundingClientRect().width+nt)}}else if(q.key==="Enter")Mt(Ae);else if(q.key!=="Tab")return;q.key!=="Tab"&&(q.preventDefault(),q.stopPropagation())}let er=N(!1),wr=N(0),Br=N(0),or=N(void 0),Ar=N("table");const lr=c(()=>[{id:"fit",label:J("Fit column to content"),disabled:Kn(t(or),t(Ar))===void 0},{id:"reset",label:J("Reset column widths"),disabled:t(Ar)==="sub"?!t(he):!t(M)}]);function Jr(q){const Ae=q.target instanceof Element?q.target:null;if(!Ae)return;const Ue=t(W)?.contains(Ae)===!0||t(F)?.contains(Ae)===!0;if(!Ue&&Ae.closest(".hmm-tr-subhead")===null)return;q.preventDefault();const nt=Ae.closest("[data-column-key]");u(or,nt?.dataset.columnKey,!0),u(Ar,Ue&&(t(or)===void 0||!t(Te).has(t(or)))?"table":"sub",!0),u(wr,q.clientX,!0),u(Br,q.clientY,!0),u(er,!0),et()}function Pr(q){q==="fit"&&t(or)!==void 0?Mt(t(or)):q==="reset"&&Zn(t(Ar))}let Tr=N(void 0),ie,Ge,$t,hn;function Bn(q){return dn===void 0&&!q.classList.contains("hmm-td-fixed")&&ly(q)}function tr(q,Ae){et(),Ge=q,$t=Ae,hn=setTimeout(()=>{hn=void 0,Ke(q)},$f)}function ot(q){const Ue=(q.target instanceof Element?q.target.closest(".hmm-td, .hmm-th"):null)??void 0;Ue!==ie&&(ie=Ue,!(Ue!==void 0&&Ue===Ge)&&(Ue!==void 0&&Bn(Ue)?tr(Ue,"pointer"):$t==="pointer"&&et()))}function vt(q){try{return q.matches(":focus-visible")}catch{return!1}}function Dt(q){const Ae=q.target instanceof HTMLElement?q.target:void 0,Ue=Ae?.closest(".hmm-td, .hmm-th")??void 0;Ae===void 0||Ue===void 0||Ue===Ge||Ae.classList.contains("hmm-th-resize")||!vt(Ae)||Bn(Ue)&&tr(Ue,"focus")}function Ve(){$t==="focus"&&et()}function Ke(q){if(Ge!==q||!q.isConnected)return;const Ae=dy(q.querySelector(".hmm-th-label")??q);if(Ae==="")return;const{left:Ue,top:nt,bottom:Ot}=q.getBoundingClientRect();u(Tr,{text:Ae,anchor:{left:Ue,top:nt,bottom:Ot}})}function et(){hn!==void 0&&(clearTimeout(hn),hn=void 0),Ge=void 0,$t=void 0,t(Tr)!==void 0&&u(Tr,void 0)}function pt(){et(),ie=void 0}function Tt(){$t==="pointer"&&et(),ie=void 0}st(()=>()=>{hn!==void 0&&clearTimeout(hn)});const Kt=1500,en=4e3;let Bt=N(void 0),Ft;function yn(q,Ae){return`${q.key}\0${Ae.key}`}function pn(){Ft!==void 0&&(clearTimeout(Ft),Ft=void 0),t(Bt)!==void 0&&u(Bt,void 0)}async function cn(q,Ae,Ue){q.stopPropagation();const nt=q.currentTarget;if(!(nt instanceof HTMLElement))return;const Ot=await ay(ti(Ae.row,Ue),{host:t(oe)});if(et(),pn(),!nt.isConnected)return;const kt=Ot!=="failed";kt||An(nt);const{left:_t,top:Tn,bottom:mn}=nt.getBoundingClientRect();u(Bt,{key:yn(Ae,Ue),ok:kt,text:J(kt?"Copied":"Could not copy - the text is selected"),anchor:{left:_t,top:Tn,bottom:mn}}),Ft=setTimeout(pn,kt?Kt:en)}function An(q){const Ae=q.closest(".hmm-td"),Ue=window.getSelection();if(!Ae||!Ue)return;const nt=document.createRange();nt.selectNodeContents(Ae),nt.setEndBefore(q),Ue.removeAllRanges(),Ue.addRange(nt)}st(()=>()=>{Ft!==void 0&&clearTimeout(Ft)});var nr=sS(),Xt=w(nr);{var Rt=q=>{var Ae=Py(),Ue=w(Ae);{var nt=Vt=>{var nn=Ny(),rn=m(nn,!0);E(()=>h(rn,g())),v(Vt,nn)};$(Ue,Vt=>{g()!==void 0&&Vt(nt)})}var Ot=d(Ue,2);{var kt=Vt=>{var nn=Cy(),rn=w(nn);Vs(rn,C),E(()=>x(nn,"aria-label",D()??g()??I())),v(Vt,nn)};$(Ot,Vt=>{C()&&Vt(kt)})}var _t=d(Ot,2),Tn=w(_t);{var mn=Vt=>{var nn=St(),rn=Ie(nn);Vs(rn,R),v(Vt,nn)};$(Tn,Vt=>{R()&&Vt(mn)})}var cr=d(Tn,2);{var Vn=Vt=>{var nn=Jc(),rn=m(nn,!0);E(un=>{x(nn,"data-testid",te()===void 0?void 0:`${te()}-count`),h(rn,un)},[()=>T()(t(ze),e.rows.length)]),v(Vt,nn)},xn=Vt=>{var nn=Jc(),rn=m(nn,!0);E(()=>{x(nn,"data-testid",te()===void 0?void 0:`${te()}-count`),h(rn,P())}),v(Vt,nn)};$(cr,Vt=>{t(_e)&&T()!==void 0?Vt(Vn):P()!==void 0&&Vt(xn,1)})}v(q,Ae)};$(Xt,q=>{t(tt)&&q(Rt)})}var $e=d(Xt,2);let ht,At;var tn=w($e);{var Cn=q=>{var Ae=Ly();je(Ae,21,()=>t(qe),Ue=>Ue.key,(Ue,nt)=>{var Ot=Oy();let kt;var _t=w(Ot),Tn=m(_t,!0),mn=d(_t,2);{var cr=Vn=>{var xn=My(),Vt=m(xn,!0);E(()=>h(Vt,t(nt).sublabel)),v(Vn,xn)};$(mn,Vn=>{t(nt).sublabel!==void 0&&t(nt).sublabel!==""&&Vn(cr)})}E(Vn=>{x(Ot,"aria-colspan",t(nt).end-t(nt).start),x(Ot,"data-testid",te()===void 0?void 0:`${te()}-group-${t(nt).key}`),kt=On(Ot,"",kt,{"grid-column":Vn}),h(Tn,t(nt).label)},[()=>`${String(t(nt).start)} / ${String(t(nt).end)}`]),v(Ue,Ot)}),fn(Ae,Ue=>u(F,Ue),()=>t(F)),v(q,Ae)};$(tn,q=>{t(qe).length>0&&q(Cn)})}var rr=d(tn,2),Mn=w(rr);{var ls=q=>{var Ae=Fy();v(q,Ae)};$(Mn,q=>{t(me)&&q(ls)})}var sr=d(Mn,2);je(sr,17,()=>t(z),q=>q.key,(q,Ae)=>{var Ue=Vy();let nt;var Ot=w(Ue);{var kt=xn=>{var Vt=Uy();let nn;var rn=w(Vt),un=m(rn,!0),zr=d(rn,2);{var Os=jr=>{var Mr=Gy(),Ys=m(Mr,!0);E(()=>h(Ys,ue().direction==="asc"?"▲":"▼")),v(jr,Mr)};$(zr,jr=>{ue()?.key===t(Ae).key&&jr(Os)})}E(()=>{nn=On(Vt,"",nn,{"justify-content":t(Ae).align==="right"?"flex-end":t(Ae).align==="center"?"center":"flex-start"}),h(un,t(Ae).label)}),ne("click",Vt,()=>Oe(t(Ae))),v(xn,Vt)},_t=c(()=>qi(t(Ae))),Tn=xn=>{var Vt=By(),nn=m(Vt,!0);E(()=>h(nn,t(Ae).label)),v(xn,Vt)};$(Ot,xn=>{t(_t)?xn(kt):xn(Tn,-1)})}var mn=d(Ot,2);{var cr=xn=>{n(xn,()=>t(Ae),()=>te()===void 0?void 0:`${te()}-resize-${t(Ae).key}`)},Vn=c(()=>Oi(t(Ae)));$(mn,xn=>{t(Vn)&&xn(cr)})}E(()=>{x(Ue,"aria-label",t(Ae).label===""?void 0:t(Ae).label),x(Ue,"data-column-key",t(Ae).key),x(Ue,"aria-sort",ue()?.key===t(Ae).key?ue().direction==="asc"?"ascending":"descending":"none"),nt=On(Ue,"",nt,{"grid-column":t(be).track[t(Ae).key],"text-align":t(Ae).align??"left"})}),v(q,Ue)});var ar=d(sr,2);je(ar,17,()=>t(Pe),q=>q.key,(q,Ae)=>{var Ue=Hy();let nt;var Ot=w(Ue);n(Ot,()=>t(Ae),()=>te()===void 0?void 0:`${te()}-resize-${t(Ae).key}`),E(()=>{x(Ue,"data-column-key",t(Ae).key),nt=On(Ue,"",nt,{"grid-column":t(be).track[t(Ae).key],"grid-row":"1"})}),v(q,Ue)}),fn(rr,q=>u(W,q),()=>t(W));var Vr=d(rr,2);{var Hr=q=>{var Ae=Ky(),Ue=w(Ae);{var nt=kt=>{var _t=zy();v(kt,_t)};$(Ue,kt=>{t(me)&&kt(nt)})}var Ot=d(Ue,2);je(Ot,17,()=>t(z),kt=>kt.key,(kt,_t)=>{var Tn=Wy();let mn;var cr=w(Tn);{var Vn=Vt=>{var nn=jy();E(()=>{x(nn,"aria-label",`${I()}: ${t(_t).label}`),on(nn,t(ye)[t(_t).key]??"")}),ne("input",nn,rn=>{u(ye,{...t(ye),[t(_t).key]:rn.currentTarget.value},!0)}),v(Vt,nn)},xn=c(()=>Ch(t(_t)));$(cr,Vt=>{t(xn)&&Vt(Vn)})}E(()=>mn=On(Tn,"",mn,{"grid-column":t(be).track[t(_t).key]})),v(kt,Tn)}),fn(Ae,kt=>u(O,kt),()=>t(O)),v(q,Ae)};$(Vr,q=>{b()&&q(Hr)})}var dr=d(Vr,2);let Ss;var Ks=w(dr);{var wi=q=>{var Ae=qy(),Ue=w(Ae);{var nt=kt=>{var _t=Yy(),Tn=Ie(_t),mn=m(Tn,!0),cr=d(Tn,2),Vn=m(cr,!0);E(()=>{h(mn,y()),x(cr,"data-testid",te()===void 0?void 0:`${te()}-clear-filter`),h(Vn,S())}),ne("click",cr,De),v(kt,_t)},Ot=kt=>{var _t=Qn();E(()=>h(_t,k())),v(kt,_t)};$(Ue,kt=>{t(_e)?kt(nt):kt(Ot,-1)})}v(q,Ae)},yo=q=>{var Ae=rS();let Ue;var nt=w(Ae);let Ot;je(nt,23,()=>t(Ne),kt=>kt.key,(kt,_t,Tn)=>{var mn=nS();let cr,Vn;var xn=w(mn);{var Vt=rn=>{var un=Xy(),zr=w(un);{var Os=jr=>{var Mr=$y(),Ys=m(Mr,!0);E(()=>{x(Mr,"aria-expanded",t(_t).expanded),x(Mr,"aria-label",t(_t).expanded?"Collapse row":"Expand row"),h(Ys,t(_t).expanded?"−":"+")}),ne("click",Mr,Fa=>{Fa.stopPropagation(),Xe(t(_t).id)}),v(jr,Mr)};$(zr,jr=>{t(_t).hasChildren&&jr(Os)})}v(rn,un)};$(xn,rn=>{t(me)&&rn(Vt)})}var nn=d(xn,2);je(nn,17,()=>t(_t).depth>0?t(ce):t(z),rn=>rn.key,(rn,un)=>{var zr=tS();let Os,jr;var Mr=w(zr);{var Ys=mr=>{var Or=Qy(),ir=Ie(Or),qs=d(ir);{var Ga=$s=>{n($s,()=>t(un),()=>te()===void 0?void 0:`${te()}-sub-resize-${t(un).key}`)},Ua=c(()=>t(Te).has(t(un).key)&&Oi(t(un)));$(qs,$s=>{t(Ua)&&$s(Ga)})}E(()=>h(ir,`${t(un).label??""} `)),v(mr,Or)},Fa=mr=>{var Or=St(),ir=Ie(Or);Vs(ir,se,()=>t(_t).row,()=>t(un),()=>t(_t)),v(mr,Or)},Ao=mr=>{var Or=Qn();E(ir=>h(Or,ir),[()=>ti(t(_t).row,t(un))]),v(mr,Or)};$(Mr,mr=>{t(_t).kind==="header"?mr(Ys):se()?mr(Fa,1):mr(Ao,-1)})}var To=d(Mr,2);{var Ro=mr=>{const Or=c(()=>yn(t(_t),t(un)));var ir=eS();let qs;var Ga=w(ir),Ua=w(Ga);{var $s=vr=>{var Ba=Zy();v(vr,Ba)},Di=vr=>{var Ba=Jy();v(vr,Ba)};$(Ua,vr=>{t(Bt)?.key===t(Or)&&t(Bt).ok?vr($s):vr(Di,-1)})}E(vr=>{qs=Et(ir,1,"hmm-copy svelte-16k18c8",null,qs,{"hmm-copy-shown":t(Bt)?.key===t(Or)}),x(ir,"tabindex",t(U).start+t(Tn)===t(H)?0:-1),x(ir,"aria-label",vr)},[()=>t(un).copy==="name"?J("Copy name"):J("Copy address")]),ne("click",ir,vr=>{cn(vr,t(_t),t(un))}),ne("dblclick",ir,vr=>{vr.stopPropagation()}),v(mr,ir)},Ii=c(()=>t(un).copy!==void 0&&t(_t).kind==="row"&&ti(t(_t).row,t(un))!=="");$(To,mr=>{t(Ii)&&mr(Ro)})}E(()=>{Os=Et(zr,1,"hmm-td svelte-16k18c8",null,Os,{"hmm-td-fixed":t(un).fixed===!0,"hmm-td-copy":t(un).copy!==void 0&&t(_t).kind==="row","hmm-mono":t(un).mono===!0&&t(_t).kind==="row"}),x(zr,"data-column-key",t(un).key),jr=On(zr,"",jr,{"grid-column":t(be).track[t(un).key],"text-align":t(un).align??"left"})}),v(rn,zr)}),E((rn,un)=>{cr=Et(mn,1,"hmm-tr svelte-16k18c8",null,cr,{"hmm-tr-even":(t(U).start+t(Tn))%2===1,"hmm-tr-selected":rn,"hmm-tr-child":t(_t).depth>0&&t(_t).kind==="row","hmm-tr-subhead":t(_t).kind==="header"}),x(mn,"aria-selected",un),x(mn,"data-row-id",t(_t).id),x(mn,"data-row-kind",t(_t).kind),Vn=On(mn,"",Vn,{height:`${l()}px`})},[()=>t(Se).has(t(_t).id),()=>t(_t).kind==="header"?void 0:t(Se).has(t(_t).id)]),ne("click",mn,rn=>Ze(t(_t),rn)),ne("dblclick",mn,rn=>ut(t(_t),rn)),ne("contextmenu",mn,rn=>Je(t(_t),rn)),v(kt,mn)}),E(()=>{Ue=On(Ae,"",Ue,{height:`${t(we).length*l()}px`}),Ot=On(nt,"",Ot,{transform:`translateY(${t(U).start*l()}px)`})}),v(q,Ae)};$(Ks,q=>{t(we).length===0?q(wi):q(yo,-1)})}fn(dr,q=>u(Q,q),()=>t(Q));var Ai=d($e,2);{var So=q=>{{let Ae=c(()=>te()===void 0?void 0:`${te()}-tooltip`);wl(q,{get text(){return t(Tr).text},get anchor(){return t(Tr).anchor},get testId(){return t(Ae)}})}};$(Ai,q=>{t(Tr)!==void 0&&q(So)})}var Ti=d(Ai,2);{var Ri=q=>{{let Ae=c(()=>te()===void 0?void 0:`${te()}-copied`);wl(q,{get text(){return t(Bt).text},get anchor(){return t(Bt).anchor},get testId(){return t(Ae)}})}};$(Ti,q=>{t(Bt)!==void 0&&q(Ri)})}var La=d(Ti,2),ko=m(La,!0),wo=d(La,2);{var xi=q=>{{let Ae=c(()=>J("Column widths")),Ue=c(()=>te()===void 0?void 0:`${te()}-columns-menu`);Pd(q,{get items(){return t(lr)},get x(){return t(wr)},get y(){return t(Br)},get label(){return t(Ae)},get testId(){return t(Ue)},onselect:Pr,get open(){return t(er)},set open(nt){u(er,nt,!0)}})}};$(wo,q=>{t(er)&&q(xi)})}fn(nr,q=>u(oe,q),()=>t(oe)),E((q,Ae)=>{x(nr,"data-testid",te()),ht=Et($e,1,"hmm-table-grid svelte-16k18c8",null,ht,{"hmm-table-resizing":t(Nn)!==void 0}),x($e,"aria-rowcount",t(we).length),x($e,"aria-colcount",t(z).length),At=On($e,"",At,{"--hmm-table-columns":t(He).template,"--hmm-table-min-width":q,"--hmm-table-gutter":Ae}),Ss=On(dr,"",Ss,{height:f()===void 0?void 0:`${f()}px`}),h(ko,t(Bt)?.text??"")},[()=>`${String(t(He).minWidth)}px`,()=>`${String(t(pe))}px`]),ne("keydown",$e,Lt),ne("contextmenu",$e,Jr),ne("pointerover",$e,ot),Ir("pointerleave",$e,Tt),ne("pointerdown",$e,et),ne("focusin",$e,Dt),ne("focusout",$e,Ve),Ir("scroll",dr,q=>Fe(q.currentTarget)),v(r,nr),ct()}yt(["pointerdown","pointermove","pointerup","dblclick","keydown","contextmenu","pointerover","focusin","focusout","click","input"]);var aS=_('<img class="hmm-device-image svelte-rwoeeb"/>'),iS=_('<span class="hmm-device-image hmm-device-image-fallback svelte-rwoeeb"> </span>');function mi(r,e){dt(e,!0);let n=V(e,"deviceType",3,""),s=V(e,"src",3,void 0),a=V(e,"size",3,Nh),i=V(e,"title",3,void 0),o=V(e,"testId",3,void 0),l=N(!1);st(()=>{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 b=St(),g=Ie(b);{var k=S=>{var T=aS();E(()=>{x(T,"src",s()),x(T,"alt",n()),x(T,"title",i()??n()),x(T,"width",a()),x(T,"height",a()),x(T,"data-testid",o())}),Ir("error",T,()=>u(l,!0)),v(S,T)},y=S=>{var T=iS();let I;var C=m(T,!0);E(D=>{x(T,"title",i()??n()),x(T,"aria-label",n()===""?void 0:n()),x(T,"role",n()===""?void 0:"img"),x(T,"data-testid",o()),I=On(T,"",I,{width:`${a()}px`,height:`${a()}px`,"font-size":D}),h(C,t(p))},[()=>`${Math.max(6,Math.round(a()*.5))}px`]),v(S,T)};$(g,S=>{t(f)?S(k):S(y,-1)})}v(r,b),ct()}var oS=_('<span class="hmm-primary-caption"> </span>'),lS=_('<button type="button"><span class="hmm-primary-icon svelte-1a5hxwr" aria-hidden="true"> </span> <!></button>'),dS=_('<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>'),cS=_('<span class="hmm-primary-slot svelte-1a5hxwr"><!> <!></span>');function Oh(r,e){dt(e,!0);let n=V(e,"icon",3,"+"),s=V(e,"disabled",3,!1),a=V(e,"reason",3,void 0),i=V(e,"compact",3,void 0),o=V(e,"onclick",3,void 0),l=V(e,"testId",3,void 0),f=N(void 0),p=N(void 0),b=N(0),g=N(0);st(()=>{const P=t(f),K=t(p);if(i()!==void 0||!P||!K)return;const X=()=>{u(b,Math.ceil(K.getBoundingClientRect().width),!0),u(g,P.getBoundingClientRect().width,!0)};X();const ae=new ResizeObserver(X);return ae.observe(P),ae.observe(K),()=>{ae.disconnect()}});const k=c(()=>i()??(t(b)>0&&t(g)>0&&t(g)<t(b)-1)),y=c(()=>s()&&a()!==void 0?`${e.caption} — ${a()}`:t(k)?e.caption:""),S=c(()=>l()===void 0?void 0:`${l()}-tooltip`);var T=cS();let I;var C=w(T);si(C,{get text(){return t(y)},get testId(){return t(S)},children:(P,K)=>{var X=lS();let ae;var ue=w(X),fe=m(ue,!0),B=d(ue,2);{var re=de=>{var ee=oS(),se=m(ee,!0);E(()=>{x(ee,"data-testid",l()===void 0?void 0:`${l()}-caption`),h(se,e.caption)}),v(de,ee)};$(B,de=>{t(k)||de(re)})}E(()=>{ae=Et(X,1,"hmm-primary-button svelte-1a5hxwr",null,ae,{"hmm-primary-compact":t(k)}),x(X,"aria-label",e.caption),x(X,"data-testid",l()),x(X,"data-compact",t(k)?"true":"false"),X.disabled=s(),h(fe,n())}),ne("click",X,()=>o()?.()),v(P,X)},$$slots:{default:!0}});var D=d(C,2);{var R=P=>{var K=dS(),X=w(K),ae=m(X,!0),ue=d(X,2),fe=m(ue,!0);fn(K,B=>u(p,B),()=>t(p)),E(()=>{h(ae,n()),h(fe,e.caption)}),v(P,K)};$(D,P=>{i()===void 0&&P(R)})}fn(T,P=>u(f,P),()=>t(f)),E(P=>I=On(T,"",I,{"flex-basis":P}),[()=>t(b)>0?`${String(t(b))}px`:void 0]),v(r,T),ct()}yt(["click"]);const uS={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"}},eu=84,Li=150,tu=180;function Qo(r,e,n=2){const s=[];for(const a of e){if(xa(a.address)!==r)continue;const i=uS[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 Lh(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 fS(r,e,n={channel:!1}){const s=[];let a=!1;for(const i of bb(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 hS(r,e){return e&&r==="CONFIG_PENDING"}const mS=["UP_TO_DATE","NEW_FIRMWARE_AVAILABLE","DELIVER_FIRMWARE_IMAGE","PERFORMING_UPDATE"];function nu(r,e){return r!==void 0&&r!==""&&r!=="0.0.0"&&r!==e}function vS(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"&&nu(s,n))return{firmware:n,available:s,...a?{}:{action:"install"},busy:a};if(mS.includes(i))return{firmware:n,status:i.toLowerCase().replace(/_/g," "),busy:a}}return e.updatePending===!0?{firmware:n,status:"update pending",busy:a}:nu(s,n)?{firmware:n,available:s,...a?{}:{action:"update"},busy:a}:{firmware:n,busy:a}}function Fh(r,e){const n=r[e];return n?ki(e,n).map(s=>({path:s.path,label:s.node.name,depth:s.depth,hasChildren:(s.node.children?.length??0)>0})):[]}function Wl(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=>Gs(n,e))}function Gh(r,e,n){return Da(r,n)||e.some(s=>Da(s,n))}function ru(r,e,n){return Da(r,n)||Da(e,n)}function Eo(r,e){return Object.entries(r).filter(([,n])=>Da(n,e)).map(([n])=>n).sort((n,s)=>n.localeCompare(s))}function Kl(r,e){return r===void 0?[]:e==="room"?r.rooms:r.functions}function pS(r,e,n){const s=Kl(r,n);if(s.length>0)return[...s];const a=[];for(const i of e)for(const o of Kl(i,n))a.includes(o)||a.push(o);return a}function gS(r,e){return e===null||!Gs(e,r)}function bS(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 _S=_('<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),ES=_('<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),yS=_('<span></span> <span class="hmm-add-link-empty svelte-w1ajeb" data-testid="add-link-none"> </span>',1),SS=_('<tr><td class="hmm-mono svelte-w1ajeb"> </td><td class="hmm-mono svelte-w1ajeb"> </td><td class="svelte-w1ajeb"><input class="hmm-input svelte-w1ajeb"/></td><td class="svelte-w1ajeb"><input class="hmm-input svelte-w1ajeb"/></td></tr>'),kS=_('<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>'),wS=_('<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 Uh(r,e){dt(e,!0);let n=V(e,"open",15,!1),s=V(e,"onedit",3,void 0),a=V(e,"presetSenders",19,()=>[]),i=V(e,"presetReceivers",19,()=>[]);const o=Ut(),l=o.i18n.t;let f=N(Be([])),p=N(Be([])),b=N(!1),g=N(Be({})),k=N(""),y=N("");const S=c(()=>o.app.selectedInterface),T=c(()=>o.devices.index(t(S)));st(()=>{n()&&(u(f,[...a()],!0),u(p,[...i()],!0),u(g,{},!0),u(k,""),u(y,""))});const I=c(()=>t(T)?sh(t(T)).map(B=>P(B)):[]),C=c(()=>{const B=t(T);if(!B||t(f).length===0)return[];const re=t(f).map(de=>B.get(de)).filter(de=>de!==void 0);return B.channels().filter(de=>re.every(ee=>Hb(ee,de))).map(de=>P(de))}),D=c(()=>[...new Set(t(f).flatMap(B=>ys(t(T)?.get(B)?.LINK_SOURCE_ROLES)))].join(" ")),R=c(()=>[...new Set(t(p).flatMap(B=>ys(t(T)?.get(B)?.LINK_TARGET_ROLES)))].join(" "));function P(B){return bS(B,re=>o.names.name(re))}function K(){return t(f).flatMap(B=>t(p).map(re=>{const de=t(g)[X(B,re)],ee=de?.name.trim()===""||de===void 0?t(k).trim():de.name.trim(),se=de?.description.trim()===""||de===void 0?t(y).trim():de.description.trim();return{sender:B,receiver:re,...ee===""?{}:{name:ee},...se===""?{}:{description:se}}}))}function X(B,re){return`${B}>${re}`}function ae(B,re,de,ee){const se=X(B,re),Y=t(g)[se]??{name:"",description:""};u(g,{...t(g),[se]:{...Y,[de]:ee}},!0)}function ue(){const B=K();B.length!==0&&(o.changeSet.stage({kind:"linkAdd",interfaceName:t(S),title:l("{count} links",{},B.length),pairs:B,calls:B.map(re=>`addLink(${re.sender}, ${re.receiver}, ${JSON.stringify(re.name??"")})`),lines:B.map(re=>({label:`${o.nameOf(re.sender)} → ${o.nameOf(re.receiver)}`,to:re.name??""}))}),n(!1))}async function fe(B){u(b,!0);const re=await o.links.addPairs(t(S),K());if(u(b,!1),re===0)return;n(!1);const de=t(f)[0],ee=t(p)[0];B&&de!==void 0&&ee!==void 0&&s()?.({sender:de,receiver:ee})}{const B=de=>{var ee=_S(),se=Ie(ee),Y=m(se,!0),Z=d(se,2),te=m(Z,!0),xe=d(Z,2),J=m(xe,!0),ye=d(xe,2),Re=m(ye,!0);E((ge,H,pe,ve)=>{h(Y,ge),Z.disabled=t(b)||t(p).length===0,h(te,H),xe.disabled=t(b)||t(p).length===0,h(J,pe),ye.disabled=t(b)||t(p).length===0,h(Re,ve)},[()=>l("Cancel"),()=>l("Add to pending changes"),()=>l("Create"),()=>l("Create and edit")]),ne("click",se,()=>n(!1)),ne("click",Z,ue),ne("click",xe,()=>{fe(!1)}),ne("click",ye,()=>{fe(!0)}),v(de,ee)};let re=c(()=>l("Create link"));kn(r,{get title(){return t(re)},width:"720px",top:"min(12vh, 96px)",testId:"add-link-dialog",get open(){return n()},set open(de){n(de)},buttons:B,children:(de,ee)=>{var se=wS(),Y=Ie(se),Z=w(Y),te=m(Z,!0),xe=d(Z,2),J=w(xe);{let le=c(()=>l("Sender")),G=c(()=>l("Select")),L=c(()=>l("Filter")),A=c(()=>l("Check all")),M=c(()=>l("Uncheck all"));di(J,{get options(){return t(I)},get label(){return t(le)},get placeholder(){return t(G)},get filterLabel(){return t(L)},get checkAllLabel(){return t(A)},get uncheckAllLabel(){return t(M)},summary:he=>l("{count} channels selected",{},he.length),testId:"add-link-senders",inline:!0,get selected(){return t(f)},set selected(he){u(f,he,!0)}})}var ye=d(J,2),Re=m(ye),ge=d(xe,2),H=m(ge,!0),pe=d(ge,2),ve=w(pe);{let le=c(()=>t(f).length===0),G=c(()=>l("Receiver")),L=c(()=>t(f).length===0?l("Sender"):l("Select")),A=c(()=>l("Filter")),M=c(()=>l("Check all")),he=c(()=>l("Uncheck all"));di(ve,{get options(){return t(C)},get disabled(){return t(le)},get label(){return t(G)},get placeholder(){return t(L)},get filterLabel(){return t(A)},get checkAllLabel(){return t(M)},get uncheckAllLabel(){return t(he)},summary:Te=>l("{count} channels selected",{},Te.length),testId:"add-link-receivers",inline:!0,get selected(){return t(p)},set selected(Te){u(p,Te,!0)}})}var Q=d(ve,2),oe=m(Q),F=d(pe,2);{var W=le=>{var G=ES(),L=Ie(G),A=m(L,!0),M=d(L,2),he=w(M),Te=d(he,2),Pe=m(Te,!0),He=d(M,2),qe=m(He,!0),it=d(He,2),tt=w(it);E((Se,we,j,U,Ne)=>{h(A,Se),x(he,"aria-label",we),h(Pe,j),h(qe,U),x(tt,"aria-label",Ne)},[()=>l("Name"),()=>l("Name"),()=>l("Used for every pair without its own name"),()=>l("Description"),()=>l("Description")]),Sn(he,()=>t(k),Se=>u(k,Se)),Sn(tt,()=>t(y),Se=>u(y,Se)),v(le,G)},O=c(()=>K().length>0);$(F,le=>{t(O)&&le(W)})}var z=d(F,2);{var ce=le=>{var G=yS(),L=d(Ie(G),2),A=m(L,!0);E(M=>h(A,M),[()=>l("No channel can receive from this sender")]),v(le,G)};$(z,le=>{t(f).length>0&&t(C).length===0&&le(ce)})}var me=d(Y,2);{var be=le=>{var G=kS(),L=w(G),A=w(L),M=w(A),he=m(M,!0),Te=d(M),Pe=m(Te,!0),He=d(Te),qe=m(He,!0),it=d(He),tt=m(it,!0),Se=d(L);je(Se,21,K,we=>X(we.sender,we.receiver),(we,j)=>{var U=SS(),Ne=w(U),Le=m(Ne,!0),ze=d(Ne),_e=m(ze,!0),De=d(ze),Ce=w(De),Fe=d(De),Oe=w(Fe);E((Xe,Ye,Ze,Je,at,gt,mt)=>{x(U,"data-testid",Xe),h(Le,Ye),h(_e,Ze),x(Ce,"aria-label",Je),on(Ce,at),x(Ce,"placeholder",t(k)),x(Oe,"aria-label",gt),on(Oe,mt),x(Oe,"placeholder",t(y))},[()=>`add-link-pair-${X(t(j).sender,t(j).receiver)}`,()=>o.nameOf(t(j).sender),()=>o.nameOf(t(j).receiver),()=>`${l("Name")} ${t(j).sender} ${t(j).receiver}`,()=>t(g)[X(t(j).sender,t(j).receiver)]?.name??"",()=>`${l("Description")} ${t(j).sender} ${t(j).receiver}`,()=>t(g)[X(t(j).sender,t(j).receiver)]?.description??""]),ne("input",Ce,Xe=>ae(t(j).sender,t(j).receiver,"name",Xe.currentTarget.value)),ne("input",Oe,Xe=>ae(t(j).sender,t(j).receiver,"description",Xe.currentTarget.value)),v(we,U)}),E((we,j,U,Ne)=>{h(he,we),h(Pe,j),h(qe,U),h(tt,Ne)},[()=>l("Sender"),()=>l("Receiver"),()=>l("Name"),()=>l("Description")]),v(le,G)},Ee=c(()=>K().length>1);$(me,le=>{t(Ee)&&le(be)})}E((le,G)=>{h(te,le),h(Re,`LINK_SOURCE_ROLES: ${t(D)??""}`),h(H,G),h(oe,`LINK_TARGET_ROLES: ${t(R)??""}`)},[()=>l("Sender"),()=>l("Receiver")]),v(de,se)},$$slots:{buttons:!0,default:!0}})}ct()}yt(["click","input"]);var AS=_('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="smoke-group-apply"> </button>',1),TS=_('— TEAM_TAG <span class="hmm-mono"> </span>',1),RS=_('<p class="hmm-smoke-muted svelte-1spai3u"><span class="hmm-mono"> </span> <!></p>'),su=_('<p class="hmm-smoke-muted svelte-1spai3u"> </p>'),xS=_('<p class="hmm-smoke-muted svelte-1spai3u" data-testid="smoke-group-none"> </p>'),IS=_('<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>'),DS=_('<ul class="hmm-smoke-list svelte-1spai3u" data-testid="smoke-group-candidates"></ul>'),NS=_('<div class="hmm-smoke-form svelte-1spai3u"><!> <p class="hmm-smoke-heading svelte-1spai3u"> </p> <!></div>');function CS(r,e){dt(e,!0);let n=V(e,"open",15,!1),s=V(e,"group",3,void 0),a=V(e,"isNew",3,!1);const i=Ut(),o=i.i18n.t;let l=N(Be([])),f=N(!1);const p=c(()=>i.app.selectedInterface),b=c(()=>i.devices.index(t(p))),g=c(()=>i.smokeGroups.of(t(p))),k=c(()=>s()?.kind==="hmip"&&i.smokeGroups.isLoading(t(p))),y=c(()=>{if(s()===void 0||t(b)===void 0)return[];const K=s();return t(b).channels().filter(X=>(X.TEAM_CHANNELS??[]).length>0?!1:K.kind==="team"?(X.TEAM_TAG??"")!==""&&X.TEAM_TAG===K.teamTag:th(X))});function S(K){return s()?.kind==="team"||(t(g)[K]??null)!==null}function T(K){if(s()===void 0)return"";if(s().kind==="team"){const ae=t(b)===void 0?void 0:nh(t(b),K);return ae===void 0||ae===s().address||(t(b)?.get(t(b).get(K)?.TEAM??"")?.TEAM_CHANNELS??[]).length<2?"":o("in {team}",{team:i.nameOf(ae)})}const X=(t(g)[K]??[]).filter(ae=>ae!==s().number);return X.length===0?"":o("also in {groups}",{groups:X.map(ae=>o("Smoke group {n}",{n:ae})).join(", ")})}st(()=>{n()&&Er(()=>{u(l,[...s()?.members??[]],!0)})});function I(K,X){u(l,X?[...t(l),K]:t(l).filter(ae=>ae!==K),!0)}const C=c(()=>Pb(s()?.members??[],t(l))),D=c(()=>t(C).added.length>0||t(C).removed.length>0),R=c(()=>s()===void 0?"":s().kind==="team"?`${o("Team")}: ${i.nameOf(s().address)}`:o("Smoke group {n}",{n:s().number??0}));async function P(){if(s()===void 0||!t(D))return;const{added:K,removed:X}=t(C);u(f,!0);try{if(s().kind==="team"){const fe=s().teamChannel??"";await i.devices.setTeams(t(p),[...K.map(re=>({address:re,teamAddress:fe})),...X.map(re=>({address:re,teamAddress:""}))])===K.length+X.length&&n(!1);return}const ae=await i.smokeGroups.setMembers(t(p),s().number??0,K,X),ue=ae.filter(fe=>!fe.ok);for(const fe of ue)i.notices.push("error",`${i.nameOf(fe.address)}: ${fe.problems.map(B=>B.message).join("; ")||(fe.faultString??"")}`,t(p));ue.length===0&&ae.length===K.length+X.length&&n(!1)}finally{u(f,!1)}}kn(r,{get title(){return t(R)},width:"600px",testId:"smoke-group-dialog",get open(){return n()},set open(X){n(X)},buttons:X=>{var ae=AS(),ue=Ie(ae),fe=m(ue,!0),B=d(ue,2),re=m(B,!0);E((de,ee)=>{h(fe,de),B.disabled=t(f)||!t(D),h(re,ee)},[()=>o("Cancel"),()=>o("Apply")]),ne("click",ue,()=>n(!1)),ne("click",B,()=>{P()}),v(X,ae)},children:(X,ae)=>{var ue=St(),fe=Ie(ue);{var B=re=>{var de=NS(),ee=w(de);{var se=H=>{var pe=RS(),ve=w(pe),Q=m(ve,!0),oe=d(ve,2);{var F=W=>{var O=TS(),z=d(Ie(O)),ce=m(z,!0);E(()=>h(ce,s().teamTag)),v(W,O)};$(oe,W=>{s().teamTag&&W(F)})}E(()=>h(Q,s().address)),v(H,pe)},Y=H=>{var pe=su(),ve=m(pe);E((Q,oe)=>h(ve,`${Q??""}
|
|
14
|
+
${oe??""}`),[()=>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(H,pe)};$(ee,H=>{s().kind==="team"?H(se):H(Y,-1)})}var Z=d(ee,2),te=m(Z,!0),xe=d(Z,2);{var J=H=>{var pe=su(),ve=m(pe,!0);E(Q=>h(ve,Q),[()=>o("Loading")]),v(H,pe)},ye=c(()=>t(k)&&t(y).some(H=>!(H.ADDRESS in t(g)))),Re=H=>{var pe=xS(),ve=m(pe,!0);E(Q=>h(ve,Q),[()=>o("This interface has no smoke detector")]),v(H,pe)},ge=H=>{var pe=DS();je(pe,21,()=>t(y),ve=>ve.ADDRESS,(ve,Q)=>{const oe=c(()=>S(t(Q).ADDRESS));var F=IS(),W=w(F);let O;var z=w(W),ce=d(z,2),me=m(ce,!0),be=d(ce,2),Ee=m(be,!0),le=d(be,2),G=m(le,!0);E((L,A,M)=>{O=Et(W,1,"hmm-smoke-member svelte-1spai3u",null,O,{"hmm-smoke-member-off":!t(oe)}),z.disabled=!t(oe),Cr(z,L),x(z,"data-testid",`smoke-group-member-${t(Q).ADDRESS}`),h(me,A),h(Ee,t(Q).ADDRESS),h(G,M)},[()=>t(l).includes(t(Q).ADDRESS),()=>i.nameOf(t(Q).ADDRESS),()=>t(oe)?T(t(Q).ADDRESS):o("cannot be grouped - no GROUP parameters")]),ne("change",z,L=>I(t(Q).ADDRESS,L.currentTarget.checked)),v(ve,F)}),v(H,pe)};$(xe,H=>{t(ye)?H(J):t(y).length===0?H(Re,1):H(ge,-1)})}E(H=>h(te,H),[()=>o("Members")]),v(re,de)};$(fe,re=>{s()!==void 0&&re(B)})}v(X,ue)},$$slots:{buttons:!0,default:!0}}),ct()}yt(["click","change"]);var PS=_('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="team-apply"> </button>',1),MS=_('<p data-testid="team-none"> </p>'),OS=_("<option> </option>"),LS=_('<p class="hmm-team-members svelte-1ervkxt" data-testid="team-members"> </p>'),FS=_('<p class="hmm-team-empty svelte-1ervkxt" data-testid="team-empty"> </p>'),GS=_('<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 US(r,e){dt(e,!0);let n=V(e,"open",15,!1),s=V(e,"address",3,"");const a=Ut(),i=a.i18n.t;let o=N(Be([])),l=N(""),f=N(!1);const p=c(()=>a.app.selectedInterface),b=c(()=>a.devices.index(t(p))),g=c(()=>t(b)?.get(s())),k=c(()=>t(g)?.TEAM_TAG??""),y=c(()=>t(g)?.TEAM??""),S=c(()=>t(o).filter(C=>(C.TEAM_TAG??"")===t(k)));st(()=>{!n()||t(p)===""||s()===""||(u(l,t(y),!0),a.devices.teams(t(p)).then(C=>{u(o,C,!0)}))});function T(C){const D=C.TEAM_CHANNELS??[];return D.length===0?i("No data"):D.map(R=>a.nameOf(R)).join(", ")}async function I(){u(f,!0);const C=await a.devices.setTeam(t(p),s(),t(l));u(f,!1),C&&n(!1)}{const C=R=>{var P=PS(),K=Ie(P),X=m(K,!0),ae=d(K,2),ue=m(ae,!0);E((fe,B)=>{h(X,fe),ae.disabled=t(f)||t(k)===""||t(l)===t(y),h(ue,B)},[()=>i("Cancel"),()=>i("Apply")]),ne("click",K,()=>n(!1)),ne("click",ae,()=>{I()}),v(R,P)};let D=c(()=>i("Team"));kn(r,{get title(){return t(D)},width:"560px",testId:"team-dialog",get open(){return n()},set open(R){n(R)},buttons:C,children:(R,P)=>{var K=St(),X=Ie(K);{var ae=fe=>{var B=MS(),re=m(B,!0);E(de=>h(re,de),[()=>i("This channel does not belong to a team")]),v(fe,B)},ue=fe=>{var B=GS(),re=Ie(B),de=w(re),ee=m(de,!0),se=d(de,2),Y=m(se,!0),Z=d(re,2),te=w(Z),xe=m(te,!0),J=d(te,2),ye=w(J),Re=m(ye,!0);ye.value=ye.__value="";var ge=d(ye);je(ge,17,()=>t(S),oe=>oe.ADDRESS,(oe,F)=>{var W=OS(),O=m(W),z={};E(ce=>{h(O,`${ce??""} (${t(F).ADDRESS??""})`),z!==(z=t(F).ADDRESS)&&(W.value=(W.__value=z)??"")},[()=>a.nameOf(t(F).ADDRESS)]),v(oe,W)}),Yt(J);var H=d(Z,2);{var pe=oe=>{const F=c(()=>t(S).find(ce=>ce.ADDRESS===t(l)));var W=St(),O=Ie(W);{var z=ce=>{var me=LS(),be=m(me);E((Ee,le)=>h(be,`${Ee??""}: ${le??""}`),[()=>i("Members"),()=>T(t(F))]),v(ce,me)};$(O,ce=>{t(F)&&ce(z)})}v(oe,W)};$(H,oe=>{t(l)!==""&&oe(pe)})}var ve=d(H,2);{var Q=oe=>{var F=FS(),W=m(F,!0);E(O=>h(W,O),[()=>i("The interface knows no other team yet")]),v(oe,F)};$(ve,oe=>{t(S).length===0&&oe(Q)})}E((oe,F)=>{h(ee,s()),h(Y,t(k)),h(xe,oe),h(Re,F)},[()=>i("Team"),()=>i("Own team")]),yr(J,()=>t(l),oe=>u(l,oe)),v(fe,B)};$(X,fe=>{t(k)===""?fe(ae):fe(ue,-1)})}v(R,K)},$$slots:{buttons:!0,default:!0}})}ct()}yt(["click"]);function Bh(r,e){return Rd(e,r.pair)?.seconds}function BS(r,e){return Bh(r,e)===r.notUsedSeconds}function Vh(r,e){const n=ch(e,r.pair),s=xd(e,r.pair);if(!(!n||!s))return{values:s,exact:n.exact,seconds:n.seconds}}function VS(r,e){const n=[];for(const s of bo(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=dh(i);n.push({pair:s,unitDescription:a,countDescription:i,writable:Xr(a)&&Xr(i),notUsedSeconds:o??uh(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 vi(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 HS=["REFERENCE_RUNNING_TIME_TOP_BOTTOM","REFERENCE_RUNNING_TIME_BOTTOM_TOP","REFERENCE_RUNNING_TIME_SLATS"],zS=["CHANGE_OVER_DELAY","DELAY_COMPENSATION"],jS=["REFERENCE_RUN_COUNTER","ENDPOSITION_AUTO_DETECT"];function WS(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[Hh(n,e)],a=e[n.pair.countParam];if(!(s===void 0||typeof a!="number"))return Math.round(s.seconds*a*1e3)/1e3}function KS(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[Hh(n,e)];return`${String(e[n.pair.countParam]??"—")} × ${s?.name??"—"}`}function YS(r,e){if(!(!Number.isFinite(e)||e<0)){if(r.source.kind==="seconds"){const n=$n(r.source.description,"MAX");return n!==void 0&&e>n?void 0:{values:{[r.source.param]:e},exact:!0,seconds:e}}return Vh(r.source.view,e)}}function qS(r,e){const{description:n}=r,s=new Map(bo(n).map(f=>[f.name,f])),a=[],i=[];for(const f of HS){const p=n[f],b=s.get(f);if(p){a.push({id:f,source:{kind:"seconds",param:f,description:p},writable:Xr(p)}),i.push(f);continue}const g=b&&n[b.unitParam],k=b&&n[b.countParam];if(!b||!g||!k)continue;const y=dh(k),S={pair:b,unitDescription:g,countDescription:k,writable:Xr(g)&&Xr(k),notUsedSeconds:y??uh(b),notUsedFromSpecial:y!==void 0};a.push({id:f,source:{kind:"pair",view:S},writable:S.writable}),i.push(b.unitParam,b.countParam)}if(a.length===0||i.some(f=>e.has(f)))return;const o=au(n,zS),l=au(n,jS);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 au(r,e){return e.flatMap(n=>{const s=r[n];return s?[{param:n,description:s}]:[]})}function Hh(r,e){const n=e[r.pair.unitParam];return typeof n=="number"?n:r.pair.units.findIndex(s=>s.name===n)}function $S(r,e,n){const s=[];for(const[a,i]of Object.entries(r.description)){const o=Ms(i);if(i.TYPE!=="ENUM"||!o||o.length===0||e.has(a))continue;const l=n.preset(a),f=l?XS(l.presets,o,n):QS(a,o,n);!f||f.length===0||s.push({param:a,description:i,options:f,writable:Xr(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 XS(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:gd(a,o=>n.uiLabel(o)),raw:e[i]??"",named:!0})}return s}function QS(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 _s(r,e){return`${r}_WP_${e}`}const ZS=/^(\d+)_WP_(.+)$/,iu=["WEEKDAY","TIME","CONDITION","ASTRO_TYPE","ASTRO_OFFSET","LEVEL","LEVEL_2","DURATION","RAMP_TIME","OUTPUT_BEHAVIOUR","TARGET_CHANNELS"],JS=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];function ek(r,e){return typeof r=="number"&&(r&1<<e)!==0}function tk(r,e,n){const s=typeof r=="number"?r:0;return n?s|1<<e:s&~(1<<e)}function nk(r,e){const n=r[_s(e,"FIXED_HOUR")],s=r[_s(e,"FIXED_MINUTE")];return typeof n!="number"||typeof s!="number"?"":`${String(n).padStart(2,"0")}:${String(s).padStart(2,"0")}`}function rk(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{[_s(r,"FIXED_HOUR")]:s,[_s(r,"FIXED_MINUTE")]:Number(n[2])}}function sk(r,e){const n=r[_s(e,"WEEKDAY")];return typeof n!="number"||n===0}function ak(r,e){const{description:n}=r,s=new Map,a=[];for(const T of Object.keys(n)){const I=ZS.exec(T),C=I?.[1],D=I?.[2];if(!I||C===void 0||D===void 0)continue;let R=s.get(C);R||(R=new Set,s.set(C,R)),R.add(D),a.push(T)}const i=[...s.keys()].sort((T,I)=>Number(T)-Number(I)),o=i[0],l=o===void 0?void 0:s.get(o);if(o===void 0||!l||!l.has("WEEKDAY")||a.some(T=>e.has(T)))return;const f=[...l].sort().join(",");for(const T of i)if([...s.get(T)??[]].sort().join(",")!==f)return;const p=new Map(bo(n).map(T=>[T.name,T])),b={},g=[],k=new Set,y=(T,I,C)=>{const D=n[_s(o,C[0]??"")];if(!(!D||C.some(R=>!l.has(R)))){g.push({id:T,kind:I,fields:C,description:D});for(const R of C)k.add(R)}};y("WEEKDAY","weekday",["WEEKDAY"]),y("TIME","time",["FIXED_HOUR","FIXED_MINUTE"]);for(const T of[...l].sort()){if(k.has(T)||!T.endsWith("_BASE"))continue;const I=T.slice(0,-5);if(!l.has(`${I}_FACTOR`))continue;let C=!0;for(const D of i){const R=p.get(`${D}_WP_${I}`);if(!R){C=!1;break}b[`${D}:${I}`]=R}C&&y(I,"duration",[T,`${I}_FACTOR`])}for(const T of[...l].sort())k.has(T)||y(T,n[_s(o,T)]?.TYPE==="ENUM"?"enum":"number",[T]);if(k.size!==l.size)return;g.sort((T,I)=>ou(T.id)-ou(I.id)||(T.id<I.id?-1:1));const S=n[_s(o,"WEEKDAY")];return{kind:"switch-week-profile",id:"switch-week-profile",covers:a,slots:i,columns:g,durations:b,writable:S!==void 0&&Xr(S)}}function ou(r){const e=iu.indexOf(r);return e===-1?iu.length:e}const $i=["MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY","SUNDAY"],ik=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],lu=["ENDTIME","TIMEOUT"],du=["TEMPERATURE","TEMPERATUR"],ok=/^(?:(P\d+)_)?([A-Z]+)_([A-Z]+)_(\d+)$/;function qr(r,e,n){return`${r}_${e}_${n}`}function Yl(r,e,n,s,a){return{endTime:cu(e[qr(n.endTimePrefix,s,a)]),value:cu(e[qr(n.valuePrefix,s,a)])}}function lk(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}=Yl(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 dk(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)zh(i,e,n,s,n,o,l);return i}function ck(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)zh(a,e,n,o,i,o,l);return a}function Ka(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 uk(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 fk(r,e){const{description:n}=r,s=[],a=new Map;let i=0;for(const S of Object.keys(n)){const T=ok.exec(S),I=T?.[3],C=T?.[2];if(!T||!I||!C||!$i.includes(I)||!lu.includes(C)&&!du.includes(C))continue;const D=T[1]??"";s.push(S);let R=a.get(D);R||(R=new Set,a.set(D,R)),R.add(C),i=Math.max(i,Number(T[4]))}if(s.length===0||i===0)return;const o=[];let l="",f="";for(const[S,T]of[...a].sort(([I],[C])=>I<C?-1:1)){const I=[...T].find(R=>lu.includes(R)),C=[...T].find(R=>du.includes(R));if(T.size!==2||I===void 0||C===void 0||l!==""&&(I!==l||C!==f))return;l=I,f=C;const D=S===""?"":`${S}_`;o.push({id:S,endTimePrefix:`${D}${I}`,valuePrefix:`${D}${C}`})}const p=[];for(const S of o)for(const T of $i)for(let I=1;I<=i;I+=1)p.push(qr(S.endTimePrefix,T,I),qr(S.valuePrefix,T,I));if(p.length!==s.length||p.some(S=>!(S in n)||e.has(S)))return;const b=o[0],g=b&&n[qr(b.endTimePrefix,"MONDAY",1)],k=b&&n[qr(b.valuePrefix,"MONDAY",1)],y=g===void 0?void 0:$n(g,"MAX");if(!(!g||!k||y===void 0))return{kind:"week-profile",id:"week-profile",covers:p,profiles:o,days:$i,slots:i,endTimeField:l,valueField:f,endTimeDescription:g,valueDescription:k,dayEnd:y,writable:Xr(g)&&Xr(k)}}function zh(r,e,n,s,a,i,o){const l=e[qr(n.endTimePrefix,s,o)],f=e[qr(n.valuePrefix,s,o)];l!==void 0&&(r[qr(a.endTimePrefix,i,o)]=l),f!==void 0&&(r[qr(a.valuePrefix,i,o)]=f)}function cu(r){return typeof r=="number"&&Number.isFinite(r)?r:void 0}const hk={optionByName:()=>{},optionByIndex:()=>{},preset:()=>{},uiLabel:r=>r},mk=[fk,ak,qS,VS,$S];function vk(r,e=hk){const n=[],s=new Set;for(const a of mk){const i=a(r,s,e);if(i){n.push(i);for(const o of i.covers)s.add(o)}}return n}function pk(r){return new Set(r.flatMap(e=>e.covers))}function gk(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 jh(r,e){const n=e?e.parameters.map(a=>a.name):Ad(r),s=new Map((e?.parameters??[]).map(a=>[a.name,a]));return n.map(a=>{const i=r[a];if(!i)return;const o=oa($n(i,"MIN"),i),l=oa($n(i,"MAX"),i),f=s.get(a)?.preset,p=Ms(i);return{name:a,description:i,kind:gk(i),writable:Xr(i),unit:lo(i),step:i.TYPE==="FLOAT"?.1:1,special:i.SPECIAL??[],visible:s.get(a)?.visible??!0,...o===void 0?{}:{min:o},...l===void 0?{}:{max:l},...p===void 0?{}:{valueList:p},...f===void 0?{}:{preset:f}}}).filter(a=>a!==void 0)}function Qa(r,e,n,s){const a=b_(r,e,n,{enumAs:c_(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 bk(r,e,n){const s=(l,f,p)=>`putParamset(${l}←${f}, LINK, ${JSON.stringify(p)})`,a=e?.values??{},i=Object.keys(r.values).length>0,o=Object.keys(a).length>0;return{targets:n.map(l=>`${l.receiver}←${l.sender}`),entries:[...r.entries.map(l=>({...l,side:"receiver"})),...(e?.entries??[]).map(l=>({...l,side:"sender"}))],values:r.values,senderValues:a,skipped:[...r.skipped,...e?.skipped??[]],problems:[...r.problems,...e?.problems??[]],calls:[...i?n.map(l=>s(l.receiver,l.sender,r.values)):[],...o?n.map(l=>s(l.sender,l.receiver,a)):[]]}}function uu(r){const e=r.senderValues??{};return{...Object.keys(r.values).length>0?{receiverToSender:r.values}:{},...Object.keys(e).length>0?{senderToReceiver:e}:{}}}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"?Ms(e)?.[n]??String(n):typeof n=="boolean"?n?"true":"false":String(n)}function ql(r,e,n){return Object.keys(r).map(s=>{const a=Na(r[s],n[s]),i=Na(e[s],n[s]);return{param:s,sent:a,stored:i,differs:a!==i}})}function Wh(r){return Ad(r).filter(e=>G_(e)?e!=="DUTY_CYCLE"||r[e]?.TYPE==="BOOL":!1)}function _k(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])=>F1(r.address,s,a))}}const Ek=[ei,"UI_TEMPLATE"];function Zo(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=jh(r).filter(p=>!Ek.includes(p.name)),f=new Map(a.map((p,b)=>[p,b]));return l.sort((p,b)=>(f.get(p.name)??Number.MAX_SAFE_INTEGER)-(f.get(b.name)??Number.MAX_SAFE_INTEGER)),l.map(p=>{const b=s[p.name],g=o[i[p.name]??""];return{...p,...g===void 0?{}:{preset:g},fixedByProfile:b?.kind==="fixed",...b?.kind==="list"?{allowed:b.values}:{},...b?.kind==="range"?{range:{min:b.min,max:b.max}}:{}}})}function fu(r,e){const n=r.name;return n[e]??n.en??n.de??r.key}function yk(r,e){const n=r.description;return n[e]??n.en??n.de??""}var Sk=_('<span class="hmm-param-id svelte-1qr2qb3"> </span>'),kk=_('<input type="checkbox" class="svelte-1qr2qb3"/>'),Jo=_("<option> </option>"),wk=_('<select class="hmm-select hmm-param-enum svelte-1qr2qb3"></select>'),Ak=_('<input class="hmm-input hmm-param-number svelte-1qr2qb3" type="number"/>'),Tk=_('<select class="hmm-select hmm-param-special svelte-1qr2qb3"><option> </option><!></select>'),Rk=_('<select class="hmm-select hmm-param-preset svelte-1qr2qb3"><option>…</option><!></select>'),xk=_("<!> <!> <!>",1),Ik=_('<input class="hmm-input hmm-param-text svelte-1qr2qb3" type="text"/>'),Dk=_('<span class="hmm-param-unit svelte-1qr2qb3"> </span>'),Nk=_("<span> </span>"),Ck=_('<div class="hmm-param-set svelte-1qr2qb3"><button type="button" class="hmm-button">setValue</button></div>'),Pk=_('<label class="hmm-param-suppress svelte-1qr2qb3"><input type="checkbox"/> <span> </span></label>'),Mk=_('<div class="hmm-param-flag svelte-1qr2qb3"><span class="hmm-param-ro"> </span></div>'),Ok=_('<div class="hmm-param-range svelte-1qr2qb3"> </div>'),Lk=_('<div class="hmm-param-default svelte-1qr2qb3"> </div>'),Fk=_('<p class="hmm-param-help hmm-param-table-wide svelte-1qr2qb3"> </p>'),Gk=_('<div><div class="hmm-param-label svelte-1qr2qb3"><span> </span> <!></div> <div class="hmm-param-control svelte-1qr2qb3"><!> <!> <!></div> <!> <!> <!> <!> <!> <!></div>');function Ea(r,e){dt(e,!0);let n=V(e,"help",3,void 0),s=V(e,"valueLabel",3,void 0),a=V(e,"presetLabel",3,void 0),i=V(e,"valueState",3,void 0),o=V(e,"onset",3,void 0),l=V(e,"changed",3,!1),f=V(e,"disabled",3,!1),p=V(e,"entry",3,!1),b=V(e,"suppressed",3,void 0),g=V(e,"onsuppress",3,void 0),k=V(e,"suppressLabel",3,""),y=V(e,"suppressTitle",3,void 0),S=V(e,"suppressChanged",3,!1);const T=Ut(),I=T.i18n.t,C=c(()=>f()||!e.field.writable),D=c(()=>e.field.kind==="integer"||e.field.kind==="float"),R=c(()=>t(D)?oa(ee(e.value),e.field.description):e.value),P=c(()=>t(R)===void 0||t(R)===null?"":String(t(R))),K=c(()=>ee(e.value)??-1),X=c(()=>e.field.special.find(j=>j.VALUE===ee(e.value)));let ae=N(void 0);const ue=c(()=>t(X)!==void 0&&!p()&&(t(ae)===void 0||t(ae).on!==e.value));let fe=N(void 0),B;st(()=>{const j=ee(e.value);j!==void 0&&t(X)===void 0&&(B=j)});const re=c(()=>e.field.preset?.presets.find(j=>j.value===ee(e.value))),de=c(()=>e.label!==e.field.name);function ee(j){if(typeof j=="number")return j;if(typeof j=="string"&&j.trim()!==""&&Number.isFinite(Number(j)))return Number(j)}function se(j){if(j==="")return;const U=yc(Number(j),e.field.description);U!==void 0&&Number.isFinite(U)&&e.onchange(U)}function Y(j){return s()?s()(j):j}function Z(j){const U=Y(j);return U!==j?U:T.meta.specialLabel(e.field.name,j)}function te(j){if(j===void 0||e.field.special.some(Ne=>Ne.VALUE===j))return!1;const U=oa(j,e.field.description);return typeof U=="number"&&(e.field.min===void 0||U>=e.field.min)&&(e.field.max===void 0||U<=e.field.max)}function xe(){const j=ee(e.field.description.DEFAULT);return te(j)?j:te(B)?B:yc(e.field.min??0,e.field.description)??0}async function J(j){const U=e.field.special.find(Ne=>Ne.ID===j);if(U){u(ae,void 0),e.onchange(U.VALUE);return}u(ae,{on:e.value,draft:xe()},!0),await Aa(),t(fe)?.focus(),t(fe)?.select()}function ye(j){const U=[I("Last change: {time}",{time:j.lc===void 0?"–":Ja(j.lc)}),I("Last report: {time}",{time:Ja(j.ts)})];return j.confirmed||U.push(I("Restored by the system from its own file; no device has reported it since the system started.")),U.push(I("The openccu-lite system's clock")),U.join(`
|
|
15
|
+
`)}var Re=Gk();let ge;var H=w(Re),pe=w(H),ve=m(pe,!0),Q=d(pe,2);{var oe=j=>{var U=Sk(),Ne=m(U,!0);E(()=>h(Ne,e.field.name)),v(j,U)};$(Q,j=>{t(de)&&j(oe)})}var F=d(H,2),W=w(F);{var O=j=>{var U=kk();E(()=>{Cr(U,e.value===!0||e.value==="true"||e.value===1),U.disabled=t(C),x(U,"aria-label",e.label)}),ne("change",U,Ne=>e.onchange(Ne.currentTarget.checked)),v(j,U)},z=j=>{var U=wk();je(U,22,()=>e.field.valueList??[],Le=>Le,(Le,ze,_e,De)=>{var Ce=Jo(),Fe=m(Ce,!0),Oe={};E((Xe,Ye)=>{h(Fe,Xe),Oe!==(Oe=Ye)&&(Ce.value=(Ce.__value=Oe)??"")},[()=>Y(ze),()=>String(t(_e))]),v(Le,Ce)});var Ne;Yt(U),E(Le=>{U.disabled=t(C),x(U,"aria-label",e.label),Ne!==(Ne=Le)&&(U.value=(U.__value=Ne)??"",Pn(U,Ne))},[()=>String(t(K))]),ne("change",U,Le=>e.onchange(Number(Le.currentTarget.value))),v(j,U)},ce=j=>{var U=xk(),Ne=Ie(U);{var Le=Fe=>{var Oe=Ak();fn(Oe,Xe=>u(fe,Xe),()=>t(fe)),E(Xe=>{x(Oe,"min",e.field.min),x(Oe,"max",e.field.max),x(Oe,"step",e.field.step),Oe.disabled=t(C),x(Oe,"aria-label",e.label),on(Oe,Xe)},[()=>t(X)===void 0?t(P):String(oa(t(ae)!==void 0&&t(ae).on===e.value?t(ae).draft:xe(),e.field.description))]),ne("input",Oe,Xe=>se(Xe.currentTarget.value)),v(Fe,Oe)};$(Ne,Fe=>{t(ue)||Fe(Le)})}var ze=d(Ne,2);{var _e=Fe=>{var Oe=Tk(),Xe=w(Oe),Ye=m(Xe,!0);Xe.value=Xe.__value="";var Ze=d(Xe);je(Ze,17,()=>e.field.special,at=>at.ID,(at,gt)=>{var mt=Jo(),ke=m(mt,!0),Me={};E(Qe=>{h(ke,Qe),Me!==(Me=t(gt).ID)&&(mt.value=(mt.__value=Me)??"")},[()=>Z(t(gt).ID)]),v(at,mt)});var Je;Yt(Oe),E(at=>{Oe.disabled=t(C),x(Oe,"aria-label",`${e.label} SPECIAL`),h(Ye,at),Je!==(Je=t(ue)?t(X)?.ID??"":"")&&(Oe.value=(Oe.__value=Je)??"",Pn(Oe,Je))},[()=>I("Enter value")]),ne("change",Oe,at=>{J(at.currentTarget.value)}),v(Fe,Oe)};$(ze,Fe=>{e.field.special.length>0&&Fe(_e)})}var De=d(ze,2);{var Ce=Fe=>{var Oe=Rk(),Xe=w(Oe);Xe.value=Xe.__value="";var Ye=d(Xe);je(Ye,17,()=>e.field.preset.presets,Je=>String(Je.value),(Je,at,gt,mt)=>{var ke=Jo(),Me=m(ke,!0),Qe={};E((ut,bt)=>{h(Me,ut),Qe!==(Qe=bt)&&(ke.value=(ke.__value=Qe)??"")},[()=>gd(t(at),a()??Y),()=>String(t(at).value)]),v(Je,ke)});var Ze;Yt(Oe),E(Je=>{Oe.disabled=t(C),x(Oe,"aria-label",`${e.label} presets`),Ze!==(Ze=Je)&&(Oe.value=(Oe.__value=Ze)??"",Pn(Oe,Ze))},[()=>t(re)===void 0?"":String(t(re).value)]),ne("change",Oe,Je=>{const at=e.field.preset?.presets.find(gt=>String(gt.value)===Je.currentTarget.value);at!==void 0&&e.onchange(at.value)}),v(Fe,Oe)};$(De,Fe=>{e.field.preset&&Fe(Ce)})}v(j,U)},me=j=>{var U=Ik();E(()=>{U.disabled=t(C),x(U,"aria-label",e.label),on(U,t(P))}),ne("input",U,Ne=>e.onchange(Ne.currentTarget.value)),v(j,U)};$(W,j=>{e.field.kind==="bool"||e.field.kind==="action"?j(O):e.field.kind==="enum"?j(z,1):t(D)?j(ce,2):j(me,-1)})}var be=d(W,2);{var Ee=j=>{var U=Dk(),Ne=m(U,!0);E(()=>h(Ne,e.field.unit)),v(j,U)};$(be,j=>{e.field.unit!==""&&!t(ue)&&j(Ee)})}var le=d(be,2);{var G=j=>{var U=Nk();let Ne;var Le=m(U,!0);E((ze,_e,De)=>{Ne=Et(U,1,"hmm-param-since svelte-1qr2qb3",null,Ne,{"hmm-param-restored":!i().confirmed}),x(U,"title",ze),x(U,"data-testid",`since-${e.field.name}`),x(U,"data-confirmed",_e),h(Le,De)},[()=>ye(i()),()=>String(i().confirmed),()=>i().confirmed?I("since {time}",{time:Ja(i().lc??i().ts)}):I("restored")]),v(j,U)};$(le,j=>{i()&&j(G)})}var L=d(F,2);{var A=j=>{var U=Ck(),Ne=m(U);E(()=>{Ne.disabled=t(C),x(Ne,"data-testid",`set-${e.field.name}`)}),ne("click",Ne,()=>o()()),v(j,U)};$(L,j=>{o()&&j(A)})}var M=d(L,2);{var he=j=>{var U=Pk(),Ne=w(U),Le=d(Ne,2),ze=m(Le,!0);E(()=>{x(U,"title",y()),Cr(Ne,b()===!0),x(Ne,"data-testid",`suppress-${e.field.name}`),h(ze,k())}),ne("change",Ne,_e=>g()(_e.currentTarget.checked)),v(j,U)};$(M,j=>{g()&&j(he)})}var Te=d(M,2);{var Pe=j=>{var U=Mk(),Ne=w(U),Le=m(Ne,!0);E((ze,_e)=>{x(Ne,"title",ze),h(Le,_e)},[()=>I("Read-only"),()=>I("ro")]),v(j,U)};$(Te,j=>{e.field.writable||j(Pe)})}var He=d(Te,2);{var qe=j=>{var U=Ok(),Ne=m(U);E(()=>h(Ne,`${e.field.min??"−∞"??""} … ${e.field.max??"∞"??""}`)),v(j,U)};$(He,j=>{(e.field.min!==void 0||e.field.max!==void 0)&&!t(ue)&&j(qe)})}var it=d(He,2);{var tt=j=>{const U=c(()=>e.field.special.find(ze=>ze.VALUE===ee(e.field.description.DEFAULT)));var Ne=Lk(),Le=m(Ne,!0);E(ze=>h(Le,ze),[()=>I("default {value}",{value:t(U)?Z(t(U).ID):String(e.field.description.DEFAULT)})]),v(j,Ne)};$(it,j=>{e.field.description.DEFAULT!==void 0&&j(tt)})}var Se=d(it,2);{var we=j=>{var U=Fk(),Ne=m(U,!0);E(()=>h(Ne,n())),v(j,U)};$(Se,j=>{n()&&j(we)})}E(()=>{ge=Et(Re,1,"hmm-param hmm-param-table-row svelte-1qr2qb3",null,ge,{"hmm-param-changed":l()||S()}),x(Re,"data-testid",`param-${e.field.name}`),x(pe,"title",e.field.name),h(ve,e.label)}),v(r,Re),ct()}yt(["change","input","click"]);var Uk=_('<button type="button" class="hmm-button" data-testid="write-stage"> </button>'),Bk=_('<button type="button" class="hmm-button"> </button> <!> <button type="button" class="hmm-button" data-testid="write-confirm"> </button>',1),Vk=_('<p class="hmm-preview-call svelte-1aaq6az"> </p>'),Hk=_('<p class="hmm-preview-call svelte-1aaq6az">putParamset(<span class="hmm-mono"> </span>, <span class="hmm-mono"> </span>, <span class="hmm-mono"> </span>)</p>'),hu=_("<li> </li>"),zk=_('<ul class="hmm-preview-warnings svelte-1aaq6az" data-testid="preview-warnings"></ul>'),jk=_('<p data-testid="preview-empty"> </p>'),mu=_('<span class="hmm-preview-side svelte-1aaq6az"> </span>'),Wk=_('<tr><td class="hmm-mono svelte-1aaq6az"> <!></td><td class="svelte-1aaq6az"> </td><td class="hmm-preview-new svelte-1aaq6az"> </td></tr>'),Kk=_('<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),Yk=_('<ul class="hmm-preview-problems svelte-1aaq6az" data-testid="preview-problems"></ul>'),qk=_('<tr><td class="hmm-mono svelte-1aaq6az"> <!></td><td class="svelte-1aaq6az"> </td><td class="svelte-1aaq6az"> </td></tr>'),$k=_('<p class="hmm-preview-warn svelte-1aaq6az" data-testid="readback-warning"> </p>'),Xk=_('<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),Qk=_('<li><span class="hmm-mono"> </span> </li>'),Zk=_('<ul class="hmm-preview-results svelte-1aaq6az" data-testid="preview-results"></ul>'),Jk=_("<!> <!> <!> <!> <!> <!>",1);function $l(r,e){dt(e,!0);let n=V(e,"open",15,!1),s=V(e,"preview",3,void 0),a=V(e,"paramset",3,"MASTER"),i=V(e,"warnings",19,()=>[]),o=V(e,"writing",3,!1),l=V(e,"results",19,()=>[]),f=V(e,"readBack",19,()=>[]),p=V(e,"onstage",3,void 0),b=V(e,"confirmLabel",3,void 0),g=V(e,"countText",3,void 0);const y=Ut().i18n.t,S=c(()=>s()===void 0||s().entries.length===0),T=520;{const I=D=>{var R=Bk(),P=Ie(R),K=m(P,!0),X=d(P,2);{var ae=B=>{var re=Uk(),de=m(re,!0);E(ee=>{re.disabled=o()||t(S),h(de,ee)},[()=>y("Add to pending changes")]),ne("click",re,()=>p()()),v(B,re)};$(X,B=>{p()&&B(ae)})}var ue=d(X,2),fe=m(ue,!0);E((B,re)=>{h(K,B),ue.disabled=o()||t(S),h(fe,re)},[()=>y("Close"),()=>b()??y("Write")]),ne("click",P,()=>n(!1)),ne("click",ue,()=>e.onconfirm()),v(D,R)};let C=c(()=>y("Preview"));kn(r,{get title(){return t(C)},width:"960px",minWidth:360,minHeight:T,testId:"write-preview",get open(){return n()},set open(D){n(D)},buttons:I,children:(D,R)=>{var P=St(),K=Ie(P);{var X=ae=>{var ue=Jk(),fe=Ie(ue);{var B=H=>{var pe=St(),ve=Ie(pe);je(ve,18,()=>s().calls,Q=>Q,(Q,oe,F)=>{var W=Vk(),O=m(W,!0);E(z=>{x(W,"data-testid",z),h(O,oe)},[()=>`preview-call-${String(t(F))}`]),v(Q,W)}),v(H,pe)},re=H=>{var pe=St(),ve=Ie(pe);je(ve,16,()=>s().targets,Q=>Q,(Q,oe)=>{var F=Hk(),W=d(w(F)),O=m(W,!0),z=d(W,2),ce=m(z,!0),me=d(z,2),be=m(me,!0);E(Ee=>{x(F,"data-testid",`preview-call-${oe}`),h(O,oe),h(ce,a()),h(be,Ee)},[()=>JSON.stringify(s().values)]),v(Q,F)}),v(H,pe)};$(fe,H=>{s().calls?H(B):H(re,-1)})}var de=d(fe,2);{var ee=H=>{var pe=zk();je(pe,20,i,ve=>ve,(ve,Q)=>{var oe=hu(),F=m(oe,!0);E(()=>h(F,Q)),v(ve,oe)}),v(H,pe)};$(de,H=>{i().length>0&&H(ee)})}var se=d(de,2);{var Y=H=>{var pe=jk(),ve=m(pe,!0);E(Q=>h(ve,Q),[()=>y("Nothing has changed - nothing will be written")]),v(H,pe)},Z=H=>{var pe=Kk(),ve=Ie(pe),Q=w(ve),oe=w(Q),F=w(oe),W=m(F,!0),O=d(F),z=m(O,!0),ce=d(O),me=m(ce,!0),be=d(Q);je(be,21,()=>s().entries,A=>`${A.side??""}:${A.param}`,(A,M)=>{var he=Wk(),Te=w(he),Pe=w(Te),He=d(Pe);{var qe=j=>{var U=mu(),Ne=m(U,!0);E(Le=>h(Ne,Le),[()=>t(M).side==="sender"?y("Sender"):y("Receiver")]),v(j,U)};$(He,j=>{t(M).side&&j(qe)})}var it=d(Te),tt=m(it,!0),Se=d(it),we=m(Se,!0);E(()=>{x(he,"data-testid",t(M).side==="sender"?`preview-sender-${t(M).param}`:`preview-${t(M).param}`),h(Pe,t(M).param),h(tt,t(M).from),h(we,t(M).to)}),v(A,he)});var Ee=d(ve,2),le=w(Ee);{var G=A=>{var M=Qn();E(()=>h(M,g())),v(A,M)},L=A=>{var M=Qn();E(he=>h(M,`${he??""} ×
|
|
16
|
+
${s().targets.length??""}`),[()=>y("{count} parameters will be written",{},s().entries.length)]),v(A,M)};$(le,A=>{g()!==void 0?A(G):A(L,-1)})}E((A,M,he)=>{h(W,A),h(z,M),h(me,he)},[()=>y("Parameter"),()=>y("Current value"),()=>y("New value")]),v(H,pe)};$(se,H=>{t(S)?H(Y):H(Z,-1)})}var te=d(se,2);{var xe=H=>{var pe=Yk();je(pe,21,()=>s().problems,ve=>`${ve.param}-${ve.code}`,(ve,Q)=>{var oe=hu(),F=m(oe);E(()=>h(F,`${t(Q).param??""}: ${t(Q).message??""}`)),v(ve,oe)}),v(H,pe)};$(te,H=>{s().problems.length>0&&H(xe)})}var J=d(te,2);{var ye=H=>{var pe=Xk(),ve=Ie(pe),Q=w(ve),oe=w(Q),F=w(oe),W=m(F,!0),O=d(F),z=m(O,!0),ce=d(O),me=m(ce,!0),be=d(Q);je(be,21,f,L=>`${L.side??""}:${L.param}`,(L,A)=>{var M=qk();let he;var Te=w(M),Pe=w(Te),He=d(Pe);{var qe=j=>{var U=mu(),Ne=m(U,!0);E(Le=>h(Ne,Le),[()=>t(A).side==="sender"?y("Sender"):y("Receiver")]),v(j,U)};$(He,j=>{t(A).side&&j(qe)})}var it=d(Te),tt=m(it,!0),Se=d(it),we=m(Se,!0);E(()=>{x(M,"data-testid",t(A).side==="sender"?`readback-sender-${t(A).param}`:`readback-${t(A).param}`),he=Et(M,1,"svelte-1aaq6az",null,he,{"hmm-preview-differs":t(A).differs}),h(Pe,t(A).param),h(tt,t(A).sent),h(we,t(A).stored)}),v(L,M)});var Ee=d(ve,2);{var le=L=>{var A=$k(),M=m(A,!0);E(he=>h(M,he),[()=>y("The interface answered ok but stored something else")]),v(L,A)},G=c(()=>f().some(L=>L.differs));$(Ee,L=>{t(G)&&L(le)})}E((L,A,M)=>{h(W,L),h(z,A),h(me,M)},[()=>y("Parameter"),()=>y("What was sent"),()=>y("Read back")]),v(H,pe)};$(J,H=>{f().length>0&&H(ye)})}var Re=d(J,2);{var ge=H=>{var pe=Zk();je(pe,21,l,ve=>`${ve.address}-${ve.peer??""}-${ve.paramset}`,(ve,Q)=>{var oe=Qk();let F;var W=w(oe),O=m(W),z=d(W);E(()=>{F=Et(oe,1,"svelte-1aaq6az",null,F,{"hmm-preview-failed":!t(Q).ok}),h(O,`${t(Q).address??""}${t(Q).peer===void 0?"":`←${t(Q).peer}`}`),h(z,` ${t(Q).ok?"✔":`✕ ${t(Q).faultString??""}`}`)}),v(ve,oe)}),v(H,pe)};$(Re,H=>{l().length>0&&H(ge)})}v(ae,ue)};$(K,ae=>{s()&&ae(X)})}v(D,P)},$$slots:{buttons:!0,default:!0}})}ct()}yt(["click"]);function Xi(r,e){if(!r)return;const n=r;return n[e]??n.en??n.de}function e0(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 t0(r,e,n){const s=Xi(r.label,e);return s!==void 0?s:"seconds"in r?e0(r.seconds):n(r.special==="notActive"?"Not active":r.special==="permanent"?"Permanent":"Enter value")}function n0(r,e,n){const s=Rd(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 r0(r,e){if("seconds"in r)return xd(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 Kh(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 s0(r,e=[]){return r.flatMap(n=>e.filter(s=>s.id===n))}function a0(r,e,n){return r.findIndex(s=>Object.entries(s.values).every(([a,i])=>!(a in n)||Kh(e[a],i)))}function i0(r,e){return Object.fromEntries(Object.entries(r.values).filter(([n])=>n in e))}function o0(r,e){return r.presets.findIndex(n=>Kh(n.value,e)||String(n.value)===String(e))}var l0=_('<h5 class="hmm-link-press hmm-param-table-wide svelte-1fgjxm" data-testid="link-easy-press"> </h5>'),vu=_('<option disabled="">—</option>'),el=_("<option> </option>"),d0=_('<select class="hmm-select svelte-1fgjxm"><!><!></select>'),c0=_('<div><span class="hmm-link-easy-label svelte-1fgjxm"> </span> <!></div> <!>',1),u0=_('<div><span class="hmm-link-easy-label svelte-1fgjxm"> </span> <select class="hmm-select svelte-1fgjxm"><!><option> </option></select></div> <!>',1),f0=_('<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>'),h0=_("<!> <!>",1),m0=_('<div class="hmm-link-easy hmm-param-table-span"></div>');function Yh(r,e){dt(e,!0);let n=V(e,"subsets",19,()=>[]),s=V(e,"testId",3,"easy-form");const a=Ut(),i=a.i18n.t,o=c(()=>a.i18n.language);let l=N(Be({}));function f(D){const R=D===void 0?"":D.kind==="time"?D.pair.unitParam:D.kind==="param"?D.param:"";return R.startsWith("SHORT_")?"SHORT":R.startsWith("LONG_")?"LONG":void 0}const p=c(()=>e.form.some(D=>f(D)==="SHORT")&&e.form.some(D=>f(D)==="LONG"));function b(D){if(!t(p))return;const R=f(e.form[D]),P=D===0?void 0:f(e.form[D-1]);if(!(R===void 0||R===P))return i(R==="SHORT"?"Short key press":"Long key press")}function g(D,R){return Xi(D.label,t(o))??a.meta.parameterLabel(R,e.channelType)}function k(D){return D.option===void 0?void 0:e.presets[D.option]}let y=N(Be({}));function S(D,R,P){const K=R.presets[P];u(y,{...t(y),[D.param]:K===void 0},!0),K!==void 0&&T(D,K.value)}function T(D,R){e.onchange(Object.fromEntries([D.param,...D.also].map(P=>[P,R])))}function I(D,R){const P=(e.timeSelectors[D.selector]??[])[R];if(P===void 0)return;const K=r0(P,D.pair);u(l,{...t(l),[D.pair.name]:K===void 0},!0),K!==void 0&&e.onchange(K)}var C=m0();je(C,23,()=>e.form,D=>D.kind==="time"?D.pair.name:D.kind==="param"?D.param:`subset-${String(D.subsets)}`,(D,R,P)=>{const K=c(()=>b(t(P)));var X=h0(),ae=Ie(X);{var ue=ee=>{var se=l0(),Y=m(se,!0);E(()=>h(Y,t(K))),v(ee,se)};$(ae,ee=>{t(K)&&ee(ue)})}var fe=d(ae,2);{var B=ee=>{const se=c(()=>e.timeSelectors[t(R).selector]??[]),Y=c(()=>n0(t(se),e.values,t(R).pair)),Z=c(()=>t(se).findIndex(F=>"special"in F&&F.special==="enterValue")),te=c(()=>t(l)[t(R).pair.name]===!0||t(Y)>=0&&t(Y)===t(Z)||t(se).length===0),xe=c(()=>g(t(R),t(R).pair.countParam));var J=c0(),ye=Ie(J);let Re;var ge=w(ye),H=m(ge,!0),pe=d(ge,2);{var ve=F=>{var W=d0(),O=w(W);{var z=be=>{var Ee=vu();Ee.value=Ee.__value="-1",v(be,Ee)};$(O,be=>{t(Y)<0&&be(z)})}var ce=d(O);je(ce,17,()=>t(se),ao,(be,Ee,le)=>{var G=el(),L=m(G,!0),A={};E((M,he)=>{h(L,M),A!==(A=he)&&(G.value=(G.__value=A)??"")},[()=>t0(t(Ee),t(o),i),()=>String(le)]),v(be,G)});var me;Yt(W),E(be=>{x(W,"aria-label",t(xe)),x(W,"data-testid",`easy-time-select-${t(R).pair.name}`),me!==(me=be)&&(W.value=(W.__value=me)??"",Pn(W,me))},[()=>String(t(te)&&t(Z)>=0?t(Z):t(Y))]),ne("change",W,be=>I(t(R),Number(be.currentTarget.value))),v(F,W)};$(pe,F=>{t(se).length>0&&F(ve)})}var Q=d(ye,2);{var oe=F=>{var W=St(),O=Ie(W);je(O,16,()=>[t(R).pair.unitParam,t(R).pair.countParam],z=>z,(z,ce)=>{const me=c(()=>e.fields.get(ce));var be=St(),Ee=Ie(be);{var le=G=>{{let L=c(()=>e.values[ce]??t(me).description.DEFAULT),A=c(()=>a.meta.parameterLabel(ce,e.channelType)),M=c(()=>a.meta.parameterHelp(ce,e.channelType)),he=c(()=>e.changed(ce));Ea(G,{get field(){return t(me)},get value(){return t(L)},get label(){return t(A)},get help(){return t(M)},get changed(){return t(he)},valueLabel:Te=>a.meta.valueLabel(ce,Te,e.channelType),presetLabel:Te=>a.meta.uiLabel(Te),onchange:Te=>e.onchange({[ce]:Te})})}};$(Ee,G=>{t(me)&&G(le)})}v(z,be)}),v(F,W)};$(Q,F=>{t(te)&&F(oe)})}E(F=>{Re=Et(ye,1,"hmm-link-easy-row hmm-param-table-row svelte-1fgjxm",null,Re,{"hmm-param-changed":F}),x(ye,"data-testid",`easy-time-${t(R).pair.name}`),h(H,t(xe))},[()=>e.changed(t(R).pair.unitParam)||e.changed(t(R).pair.countParam)]),v(ee,J)},re=ee=>{const se=c(()=>e.fields.get(t(R).param)),Y=c(()=>k(t(R)));var Z=St(),te=Ie(Z);{var xe=ye=>{const Re=c(()=>e.values[t(R).param]??t(se).description.DEFAULT),ge=c(()=>o0(t(Y),t(Re))),H=c(()=>t(y)[t(R).param]===!0||t(ge)<0),pe=c(()=>g(t(R),t(R).param));var ve=u0(),Q=Ie(ve);let oe;var F=w(Q),W=m(F,!0),O=d(F,2),z=w(O);je(z,17,()=>t(Y).presets,ao,(G,L,A)=>{var M=el(),he=m(M,!0),Te={};E((Pe,He)=>{h(he,Pe),Te!==(Te=He)&&(M.value=(M.__value=Te)??"")},[()=>gd(t(L),Pe=>a.meta.uiLabel(Pe)),()=>String(A)]),v(G,M)});var ce=d(z),me=m(ce,!0);ce.value=ce.__value="-1";var be;Yt(O);var Ee=d(Q,2);{var le=G=>{{let L=c(()=>a.meta.parameterLabel(t(R).param,e.channelType)),A=c(()=>a.meta.parameterHelp(t(R).param,e.channelType)),M=c(()=>e.changed(t(R).param));Ea(G,{get field(){return t(se)},get value(){return t(Re)},entry:!0,get label(){return t(L)},get help(){return t(A)},get changed(){return t(M)},valueLabel:he=>a.meta.valueLabel(t(R).param,he,e.channelType),presetLabel:he=>a.meta.uiLabel(he),onchange:he=>T(t(R),he)})}};$(Ee,G=>{t(H)&&G(le)})}E((G,L,A)=>{oe=Et(Q,1,"hmm-link-easy-row hmm-param-table-row svelte-1fgjxm",null,oe,{"hmm-param-changed":G}),x(Q,"data-testid",`easy-preset-${t(R).param}`),h(W,t(pe)),x(O,"aria-label",t(pe)),x(O,"data-testid",`easy-preset-select-${t(R).param}`),h(me,L),be!==(be=A)&&(O.value=(O.__value=be)??"",Pn(O,be))},[()=>e.changed(t(R).param),()=>i("Enter value"),()=>String(t(H)?-1:t(ge))]),ne("change",O,G=>S(t(R),t(Y),Number(G.currentTarget.value))),v(ye,ve)},J=ye=>{{let Re=c(()=>e.values[t(R).param]??t(se).description.DEFAULT),ge=c(()=>g(t(R),t(R).param)),H=c(()=>a.meta.parameterHelp(t(R).param,e.channelType)),pe=c(()=>e.changed(t(R).param));Ea(ye,{get field(){return t(se)},get value(){return t(Re)},get label(){return t(ge)},get help(){return t(H)},get changed(){return t(pe)},valueLabel:ve=>a.meta.valueLabel(t(R).param,ve,e.channelType),presetLabel:ve=>a.meta.uiLabel(ve),onchange:ve=>T(t(R),ve)})}};$(te,ye=>{t(se)&&t(Y)?ye(xe):t(se)&&ye(J,1)})}v(ee,Z)},de=ee=>{const se=c(()=>s0(t(R).subsets,n()));var Y=St(),Z=Ie(Y);{var te=xe=>{const J=c(()=>a0(t(se),e.values,e.description)),ye=c(()=>Xi(t(R).label,t(o))??i("Mode"));var Re=f0(),ge=w(Re),H=m(ge,!0),pe=d(ge,2),ve=w(pe);{var Q=W=>{var O=vu();O.value=O.__value="-1",v(W,O)};$(ve,W=>{t(J)<0&&W(Q)})}var oe=d(ve);je(oe,19,()=>t(se),W=>W.id,(W,O,z)=>{var ce=el(),me=m(ce,!0),be={};E((Ee,le)=>{h(me,Ee),be!==(be=le)&&(ce.value=(ce.__value=be)??"")},[()=>Xi(t(R).names?.[t(R).subsets.indexOf(t(O).id)],t(o))??a.meta.parameterLabel(t(O).key,e.channelType),()=>String(t(z))]),v(W,ce)});var F;Yt(pe),E(W=>{h(H,t(ye)),x(pe,"aria-label",t(ye)),F!==(F=W)&&(pe.value=(pe.__value=F)??"",Pn(pe,F))},[()=>String(t(J))]),ne("change",pe,W=>{const O=t(se)[Number(W.currentTarget.value)];O&&e.onchange(i0(O,e.description))}),v(xe,Re)};$(Z,xe=>{t(se).length>0&&xe(te)})}v(ee,Y)};$(fe,ee=>{t(R).kind==="time"?ee(B):t(R).kind==="param"?ee(re,1):ee(de,-1)})}v(D,X)}),E(()=>x(C,"data-testid",s())),v(r,C),ct()}yt(["change"]);var v0=_('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="link-preview"> </button>',1),p0=_("<p> </p>"),g0=_('<p data-testid="link-paramset-failed"> </p>'),b0=_('<div class="hmm-link-targets svelte-1xlqelt"><!></div>'),_0=_('<div class="hmm-link-list hmm-param-table svelte-1xlqelt" data-testid="link-sender-params"></div>'),E0=_('<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>'),pu=_("<option> </option>"),y0=_('<p class="hmm-link-profile-text svelte-1xlqelt" data-testid="link-profile-description"> </p>'),S0=_('<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>'),k0=_('<p class="hmm-link-hint svelte-1xlqelt" data-testid="link-easy-unknown"> </p>'),w0=_("<div><!></div>"),A0=_('<li><span class="hmm-mono"> </span> </li>'),T0=_('<ul class="hmm-link-results svelte-1xlqelt" data-testid="link-results"></ul>'),R0=_('<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),x0=_("<!> <!>",1);function qh(r,e){dt(e,!0);let n=V(e,"open",15,!1),s=V(e,"sender",3,""),a=V(e,"receiver",3,"");const i=Ut(),o=i.i18n.t;let l=N(void 0),f=N(Be({})),p=N(void 0),b=N(Be({})),g=N(Be({})),k=N(Be({})),y=N(Be([])),S=N(void 0),T=N(Be(us)),I=N(!1),C=N(void 0),D=N(""),R=N(""),P=N(Be([])),K=N(!1),X=N(void 0),ae=N(Be([])),ue=N(Be([])),fe=N(!1),B=0,re=N(""),de=N(""),ee=0,se=N(""),Y=N("");const Z=c(()=>i.app.selectedInterface),te=c(()=>i.devices.index(t(Z))),xe=c(()=>t(te)?.get(s())?.TYPE??""),J=c(()=>t(te)?.get(a())?.TYPE??""),ye=c(()=>`${i.nameOf(s())} → ${i.nameOf(a())} (${s()} ${a()})`),Re=c(()=>t(y).find(Se=>Se.id===t(T))),ge=c(()=>{const Se=t(te),we=Se?.get(a()),j=Se?.get(s());if(!Se||!we||!j)return"";const U=Se.get(we.PARENT??""),Ne=Se.get(j.PARENT??"");return!U||!Ne?"":[ii(t(Z),we,"LINK",U),ii(t(Z),j,"LINK",Ne)].join("|")}),H=c(()=>i.links.templates.filter(Se=>Se.identity===t(ge))),pe=c(()=>t(l)?Zo(t(l),{metadata:t(S),presets:i.meta.presets,profile:t(Re),expert:t(I)}):[]),ve=c(()=>t(p)?Zo(t(p),{expert:!0}):[]),Q=c(()=>t(C)??t(ve).length>0),oe=c(()=>t(l)&&t(Re)&&t(Re).id!==us?O_(t(Re),t(l)):void 0),F=c(()=>t(I)?void 0:t(oe)),W=c(()=>t(I)?xl(t(oe),t(S)?.subsets):new Set),O=c(()=>new Map((t(l)?Zo(t(l),{metadata:t(S),presets:i.meta.presets,profile:t(Re)}):[]).map(Se=>[Se.name,Se]))),z=c(()=>L()),ce=c(()=>i.links.of(t(Z)).filter(Se=>!(Se.SENDER===s()&&Se.RECEIVER===a())&&(t(te)?.get(Se.SENDER)?.TYPE??"")===t(xe)&&(t(te)?.get(Se.RECEIVER)?.TYPE??"")===t(J)).map(Se=>({value:`${Se.SENDER};${Se.RECEIVER}`,label:`${i.nameOf(Se.SENDER)} → ${i.nameOf(Se.RECEIVER)}`})));st(()=>{if(!n()||t(Z)===""||s()===""||a()==="")return;const Se=B+=1,we={interfaceName:t(Z),sender:s(),receiver:a()};u(fe,!0),u(re,""),u(l,void 0),u(f,{},!0),u(p,void 0),u(b,{},!0),u(g,{},!0),u(k,{},!0),u(C,void 0),(async()=>{const[j,U,Ne,Le,ze]=await Promise.all([i.paramsets.describe(we.interfaceName,we.receiver,"LINK"),i.paramsets.read(we.interfaceName,we.receiver,we.sender),i.paramsets.describe(we.interfaceName,we.sender,"LINK"),i.paramsets.read(we.interfaceName,we.sender,we.receiver),i.links.info(we.interfaceName,we.sender,we.receiver)]);Se===B&&(u(l,j,!0),u(f,U??{},!0),u(p,Ne,!0),u(b,Le??{},!0),u(D,ze?.NAME??"",!0),u(R,ze?.DESCRIPTION??"",!0),u(g,{},!0),u(k,{},!0),u(P,[],!0),u(ae,[],!0),u(ue,[],!0),u(fe,!1),u(re,`${we.interfaceName}|${we.sender}|${we.receiver}#${String(Se)}`))})()}),st(()=>{if(!n()||t(J)===""||t(xe)==="")return;const Se=`${t(J)}|${t(xe)}`;if(Se===t(de))return;const we=ee+=1;u(de,""),u(y,[],!0),Promise.all([i.meta.profilesFor(t(J),t(xe)),i.meta.linkMetadataFor(t(J),t(xe)),i.meta.loadPresets()]).then(([j,U])=>{we===ee&&(u(y,j,!0),u(S,U,!0),u(de,Se))})});let me="",be;st(()=>{if(t(re)===""||t(de)!==`${t(J)}|${t(xe)}`||t(y).length===0)return;const Se=`${t(re)}|${t(de)}`;if(me===Se)return;me=Se;const we=i.meta.engine.detectProfile(t(f),t(y));be=we?.id,u(T,we?.id??us,!0),u(I,t(T)===us)}),st(()=>{const Se=t(ge);n()&&Se!==""&&i.links.loadTemplates(Se)});async function Ee(){const Se=t(se).trim();if(Se===""||t(ge)===""||!t(l))return;const we=Qa(t(f),t(g),t(l),{interfaceName:t(Z),targets:[a()],writeAll:!0}).values,j=t(p)?Qa(t(b),t(k),t(p),{interfaceName:t(Z),targets:[s()],writeAll:!0}).values:{},U={name:Se,identity:t(ge),...t(Re)===void 0?{}:{profileId:t(Re).id,profileName:fu(t(Re),i.i18n.language)},receiver:we,...Object.keys(j).length>0?{sender:j}:{},createdAt:Date.now()};await i.links.saveTemplate(U)&&(u(se,""),u(Y,Se,!0),i.notices.push("info",`${o("Save as template")}: ${Se}`))}function le(Se){const we=t(H).find(j=>j.name===Se);we&&(we.profileId!==void 0&&t(y).some(j=>j.id===we.profileId)&&(u(T,we.profileId,!0),u(I,t(T)===us)),u(g,{...t(g),...we.receiver},!0),we.sender&&s()!==a()&&u(k,{...t(k),...we.sender},!0))}function G(Se){u(T,Se,!0),u(I,Se===us);const we=t(y).find(ze=>ze.id===Se);if(!we||!t(l))return;const j=Se===be,U=i.meta.engine.applyProfile(we,j?t(f):L(),t(l),{keepCurrent:j}),Ne={};for(const ze of[...Object.keys(we.params),ei]){const _e=U.values[ze];_e!==void 0&&(Ne[ze]=_e)}u(g,{...t(g),...Ne},!0);const Le=U.problems.filter(ze=>ze.code==="unknown-parameter");Le.length>0&&i.notices.push("info",`${o("The profile names {count} parameters this firmware does not have",{},Le.length)}: ${Le.map(ze=>ze.param).join(", ")}`);for(const ze of U.problems.filter(_e=>_e.code!=="unknown-parameter"))i.notices.push("warn",`${ze.param}: ${ze.message}`)}function L(){const Se={...t(f)};for(const[we,j]of Object.entries(t(g)))(typeof j=="boolean"||typeof j=="number"||typeof j=="string")&&(Se[we]=j);return Se}function A(Se,we,j){return Object.prototype.hasOwnProperty.call(j,Se.name)?j[Se.name]:we[Se.name]??Se.description.DEFAULT}async function M(){await i.links.setInfo(t(Z),s(),a(),t(D),t(R))}function he(){const Se=t(P).map(we=>{const[j,U]=we.split(";");return{sender:j??"",receiver:U??""}});return[{sender:s(),receiver:a()},...Se]}function Te(){if(!t(l))return;u(ae,[],!0),u(ue,[],!0);const Se=he(),we=Qa(t(f),t(g),t(l),{interfaceName:t(Z),targets:Se.map(U=>`${U.receiver}←${U.sender}`)}),j=t(p)&&s()!==a()?Qa(t(b),t(k),t(p),{interfaceName:t(Z),targets:Se.map(U=>`${U.sender}←${U.receiver}`)}):void 0;u(X,bk(we,j,Se),!0),u(K,!0)}function Pe(){const Se=t(X);if(!Se)return;const we=uu(Se);if(we.receiverToSender===void 0&&we.senderToReceiver===void 0)return;const j=he();i.changeSet.stage({kind:"linkParamset",interfaceName:t(Z),title:`LINK — ${i.nameOf(s())} → ${i.nameOf(a())}`,links:j,values:we,calls:[...Se.calls??[]],lines:Se.entries.map(U=>({label:U.side==="sender"?`${o("Sender")}: ${U.param}`:U.param,from:U.from,to:U.to}))}),u(K,!1),n(!1)}async function He(){const Se=t(X);if(!Se)return;const we=uu(Se);if(we.receiverToSender===void 0&&we.senderToReceiver===void 0)return;const j=await i.paramsets.putLink(t(Z),he(),we);u(ae,j,!0);const U=[];if(we.receiverToSender!==void 0){const Ne=await i.paramsets.read(t(Z),a(),s());Ne&&t(l)&&(U.push(...ql(we.receiverToSender,Ne,t(l)).map(Le=>({...Le,side:"receiver"}))),u(f,Ne,!0),u(g,{},!0))}if(we.senderToReceiver!==void 0){const Ne=await i.paramsets.read(t(Z),s(),a());Ne&&t(p)&&(U.push(...ql(we.senderToReceiver,Ne,t(p)).map(Le=>({...Le,side:"sender"}))),u(b,Ne,!0),u(k,{},!0))}u(ue,U,!0),j.length>0&&j.every(Ne=>Ne.ok)&&!t(ue).some(Ne=>Ne.differs)&&u(K,!1)}var qe=x0(),it=Ie(qe);kn(it,{get title(){return t(ye)},width:"960px",height:"min(640px, calc(100vh - 32px))",minWidth:560,minHeight:320,testId:"link-paramset-dialog",get open(){return n()},set open(we){n(we)},buttons:we=>{var j=v0(),U=Ie(j),Ne=m(U,!0),Le=d(U,2),ze=m(Le,!0);E((_e,De)=>{h(Ne,_e),Le.disabled=!t(l),h(ze,De)},[()=>o("Close"),()=>o("Preview")]),ne("click",U,()=>n(!1)),ne("click",Le,Te),v(we,j)},children:(we,j)=>{var U=St(),Ne=Ie(U);{var Le=De=>{var Ce=p0(),Fe=m(Ce,!0);E(Oe=>h(Fe,Oe),[()=>o("Loading Homematic Manager...")]),v(De,Ce)},ze=De=>{var Ce=g0(),Fe=m(Ce,!0);E(Oe=>h(Fe,Oe),[()=>o("No data")]),v(De,Ce)},_e=De=>{var Ce=R0(),Fe=Ie(Ce),Oe=w(Fe),Xe=w(Oe),Ye=m(Xe,!0),Ze=d(Xe,2),Je=d(Oe,2),at=d(w(Je),2),gt=d(Je,2),mt=m(gt,!0),ke=d(Fe,2);{var Me=Ve=>{var Ke=b0(),et=w(Ke);{let pt=c(()=>o("Please choose one or more links")),Tt=c(()=>o("Please choose one or more links")),Kt=c(()=>o("Filter")),en=c(()=>o("Check all")),Bt=c(()=>o("Uncheck all"));di(et,{get options(){return t(ce)},get label(){return t(pt)},get placeholder(){return t(Tt)},get filterLabel(){return t(Kt)},get checkAllLabel(){return t(en)},get uncheckAllLabel(){return t(Bt)},summary:Ft=>o("{count} links",{},Ft.length),testId:"link-targets",get selected(){return t(P)},set selected(Ft){u(P,Ft,!0)}})}v(Ve,Ke)};$(ke,Ve=>{t(ce).length>0&&Ve(Me)})}var Qe=d(ke,2);{var ut=Ve=>{var Ke=E0(),et=w(Ke),pt=w(et),Tt=m(pt,!0),Kt=d(pt),en=d(et,2);{var Bt=Ft=>{var yn=_0();je(yn,21,()=>t(ve),pn=>pn.name,(pn,cn)=>{{let An=c(()=>A(t(cn),t(b),t(k))),nr=c(()=>i.meta.parameterLabel(t(cn).name,t(xe))),Xt=c(()=>i.meta.parameterHelp(t(cn).name,t(xe))),Rt=c(()=>Object.prototype.hasOwnProperty.call(t(k),t(cn).name));Ea(pn,{get field(){return t(cn)},get value(){return t(An)},get label(){return t(nr)},get help(){return t(Xt)},get changed(){return t(Rt)},valueLabel:$e=>i.meta.valueLabel(t(cn).name,$e,t(xe)),presetLabel:$e=>i.meta.uiLabel($e),onchange:$e=>u(k,{...t(k),[t(cn).name]:$e},!0)})}}),v(Ft,yn)};$(en,Ft=>{t(Q)&&Ft(Bt)})}E((Ft,yn)=>{x(pt,"aria-expanded",t(Q)),h(Tt,t(Q)?"−":"+"),h(Kt,` ${Ft??""}: ${yn??""} (${s()??""})`)},[()=>o("Sender"),()=>i.nameOf(s())]),ne("click",pt,()=>u(C,!t(Q))),v(Ve,Ke)};$(Qe,Ve=>{s()!==a()&&Ve(ut)})}var bt=d(Qe,2),rt=w(bt),qt=m(rt),xt=d(rt,2),Lt=w(xt),Zt=w(Lt),_n=w(Zt),gn=m(_n,!0),ln=d(_n,2);je(ln,21,()=>t(y),Ve=>Ve.id,(Ve,Ke)=>{var et=pu(),pt=m(et,!0),Tt={};E((Kt,en)=>{h(pt,Kt),Tt!==(Tt=en)&&(et.value=(et.__value=Tt)??"")},[()=>fu(t(Ke),i.i18n.language),()=>String(t(Ke).id)]),v(Ve,et)});var bn;Yt(ln);var wn=d(Zt,2),Zn=w(wn),Kn=d(Zn,2),Jt=m(Kn,!0),Mt=d(Lt,2);{var dn=Ve=>{var Ke=y0(),et=m(Ke,!0);E(pt=>h(et,pt),[()=>yk(t(Re),i.i18n.language)]),v(Ve,Ke)};$(Mt,Ve=>{t(Re)&&!t(I)&&Ve(dn)})}var Gn=d(Mt,2),Nn=w(Gn),Sr=w(Nn),Ur=m(Sr,!0),Jn=d(Sr,2),Un=w(Jn),kr=m(Un,!0);Un.value=Un.__value="";var os=d(Un);je(os,17,()=>t(H),Ve=>Ve.name,(Ve,Ke)=>{var et=pu(),pt=m(et),Tt={};E(()=>{h(pt,`${t(Ke).name??""}${t(Ke).profileName===void 0?"":` — ${t(Ke).profileName}`}`),Tt!==(Tt=t(Ke).name)&&(et.value=(et.__value=Tt)??"")}),v(Ve,et)});var er;Yt(Jn);var wr=d(Nn,2),Br=w(wr),or=m(Br,!0),Ar=d(Br,2),lr=d(wr,2),Jr=m(lr,!0),Pr=d(lr,2),Tr=m(Pr,!0),ie=d(xt,2);{var Ge=Ve=>{var Ke=S0(),et=d(w(Ke),1,!0);E(pt=>h(et,pt),[()=>o("Marked: the parameters the easy mode of this profile shows")]),v(Ve,Ke)},$t=Ve=>{var Ke=k0(),et=m(Ke,!0);E(pt=>h(et,pt),[()=>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,Ke)};$(ie,Ve=>{t(I)&&t(W).size>0?Ve(Ge):!t(I)&&!t(F)&&t(Re)&&t(Re).id!==us&&Ve($t,1)})}var hn=d(ie,2),Bn=w(hn);{var tr=Ve=>{{let Ke=c(()=>t(S)?.subsets);Yh(Ve,{get form(){return t(F)},testId:"link-easy-form",get fields(){return t(O)},get values(){return t(z)},changed:et=>Object.prototype.hasOwnProperty.call(t(g),et),get description(){return t(l)},get channelType(){return t(J)},get subsets(){return t(Ke)},get presets(){return i.meta.presets},get timeSelectors(){return i.meta.timeSelectors},onchange:et=>u(g,{...t(g),...et},!0)})}},ot=Ve=>{var Ke=St(),et=Ie(Ke);je(et,17,()=>t(pe),pt=>pt.name,(pt,Tt)=>{var Kt=w0();let en;var Bt=w(Kt);{let Ft=c(()=>A(t(Tt),t(f),t(g))),yn=c(()=>i.meta.parameterLabel(t(Tt).name,t(J))),pn=c(()=>i.meta.parameterHelp(t(Tt).name,t(J))),cn=c(()=>Object.prototype.hasOwnProperty.call(t(g),t(Tt).name));Ea(Bt,{get field(){return t(Tt)},get value(){return t(Ft)},get label(){return t(yn)},get help(){return t(pn)},get changed(){return t(cn)},get disabled(){return t(Tt).fixedByProfile},valueLabel:An=>i.meta.valueLabel(t(Tt).name,An,t(J)),presetLabel:An=>i.meta.uiLabel(An),onchange:An=>u(g,{...t(g),[t(Tt).name]:An},!0)})}E(Ft=>en=Et(Kt,1,"hmm-link-easy-mark hmm-param-table-span svelte-1xlqelt",null,en,{"hmm-link-easy-marked":Ft}),[()=>t(W).has(t(Tt).name)]),v(pt,Kt)}),v(Ve,Ke)};$(Bn,Ve=>{t(F)&&t(l)?Ve(tr):Ve(ot,-1)})}var vt=d(bt,2);{var Dt=Ve=>{var Ke=T0();je(Ke,21,()=>t(ae),et=>`${et.address}-${et.peer??""}`,(et,pt)=>{var Tt=A0();let Kt;var en=w(Tt),Bt=m(en,!0),Ft=d(en);E(()=>{Kt=Et(Tt,1,"svelte-1xlqelt",null,Kt,{"hmm-link-failed":!t(pt).ok}),h(Bt,t(pt).address),h(Ft,` ${t(pt).ok?"✔":`✕ ${t(pt).faultString??""}`}`)}),v(et,Tt)}),v(Ve,Ke)};$(vt,Ve=>{t(ae).length>0&&Ve(Dt)})}E((Ve,Ke,et,pt,Tt,Kt,en,Bt,Ft,yn,pn,cn,An)=>{h(Ye,Ve),h(mt,Ke),h(qt,`${et??""}: ${pt??""} (${a()??""})`),h(gn,Tt),bn!==(bn=Kt)&&(ln.value=(ln.__value=bn)??"",Pn(ln,bn)),h(Jt,en),h(Ur,Bt),Jn.disabled=t(H).length===0,h(kr,Ft),er!==(er=t(Y))&&(Jn.value=(Jn.__value=er)??"",Pn(Jn,er)),h(or,yn),lr.disabled=pn,h(Jr,cn),Pr.disabled=t(Y)==="",h(Tr,An)},[()=>o("Name"),()=>o("Apply"),()=>o("Receiver"),()=>i.nameOf(a()),()=>o("Profile"),()=>String(t(T)),()=>o("Expert view"),()=>o("Template"),()=>t(H).length===0?o("No template for this pair of channel types"):o("Apply template"),()=>o("Template name"),()=>t(se).trim()===""||t(ge)==="",()=>o("Save as template"),()=>o("Delete template")]),Sn(Ze,()=>t(D),Ve=>u(D,Ve)),Sn(at,()=>t(R),Ve=>u(R,Ve)),ne("click",gt,()=>{M()}),ne("change",ln,Ve=>G(Number(Ve.currentTarget.value))),hr(Zn,()=>t(I),Ve=>u(I,Ve)),ne("change",Jn,Ve=>{u(Y,Ve.currentTarget.value,!0),le(t(Y))}),Sn(Ar,()=>t(se),Ve=>u(se,Ve)),ne("click",lr,()=>{Ee()}),ne("click",Pr,()=>{const Ve=t(Y);u(Y,""),i.links.removeTemplate(Ve,t(ge))}),v(De,Ce)};$(Ne,De=>{t(fe)&&!t(l)?De(Le):t(l)?De(_e,-1):De(ze,1)})}v(we,U)},$$slots:{buttons:!0,default:!0}});var tt=d(it,2);$l(tt,{get preview(){return t(X)},paramset:"LINK",get results(){return t(ae)},get readBack(){return t(ue)},get writing(){return i.paramsets.writing},onstage:Pe,onconfirm:()=>{He()},get open(){return t(K)},set open(Se){u(K,Se,!0)}}),v(r,qe),ct()}yt(["click","change"]);var I0=_('<span class="hmm-blind-warn svelte-6iyslx"> </span>'),D0=_('<div class="hmm-blind-row svelte-6iyslx"><div class="hmm-blind-label svelte-6iyslx"><span> </span> <span class="hmm-blind-id svelte-6iyslx"> </span></div> <div class="hmm-blind-control svelte-6iyslx"><input class="hmm-input hmm-blind-number svelte-6iyslx" type="number" 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>'),N0=_('<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>'),C0=_('<input type="checkbox"/>'),P0=_('<input class="hmm-input hmm-blind-number svelte-6iyslx" type="number" step="1"/>'),M0=_('<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>'),O0=_('<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 L0(r,e){dt(e,!0);const n=Ut(),s=n.i18n.t;let a=N(Be({}));function i(C){return n.meta.parameterLabel(C,e.channelType)}function o(C,D){if(D==="")return;const R=YS(C,Number(D));R&&(u(a,R.exact||R.seconds===Number(D)?Object.fromEntries(Object.entries(t(a)).filter(([P])=>P!==C.id)):{...t(a),[C.id]:R.seconds},!0),e.onchange(R.values))}function l(C,D){D===""||!Number.isFinite(Number(D))||f(C.param,Number(D))}function f(C,D){e.onchange({[C]:D})}var p=O0(),b=w(p),g=m(b,!0),k=d(b,2),y=m(k,!0),S=d(k,2);je(S,17,()=>e.spec.runningTimes,C=>C.id,(C,D)=>{const R=c(()=>WS(t(D),e.values));var P=D0(),K=w(P),X=w(K),ae=m(X,!0),ue=d(X,2),fe=m(ue,!0),B=d(K,2),re=w(B),de=d(re,4),ee=m(de,!0),se=d(B,2),Y=w(se),Z=m(Y,!0),te=d(Y,2);{var xe=J=>{var ye=I0(),Re=m(ye,!0);E(ge=>{x(ye,"data-testid",`blind-${t(D).id}-inexact`),h(Re,ge)},[()=>s("The device can only do {seconds}",{seconds:vi(t(a)[t(D).id]??0)})]),v(J,ye)};$(te,J=>{t(a)[t(D).id]!==void 0&&J(xe)})}E((J,ye,Re,ge)=>{x(P,"data-testid",`blind-${t(D).id}`),h(ae,J),h(fe,t(D).id),re.disabled=!t(D).writable,x(re,"aria-label",ye),x(re,"data-testid",`blind-${t(D).id}-seconds`),on(re,t(R)??""),x(de,"data-testid",`blind-${t(D).id}-raw`),h(ee,Re),h(Z,ge)},[()=>i(t(D).id),()=>i(t(D).id),()=>KS(t(D),e.values),()=>t(R)===void 0?"—":vi(t(R))]),ne("input",re,J=>o(t(D),J.currentTarget.value)),v(C,P)});var T=d(S,2);je(T,17,()=>e.spec.delays,C=>C.param,(C,D)=>{var R=N0(),P=w(R),K=w(P),X=m(K,!0),ae=d(K,2),ue=m(ae,!0),fe=d(P,2),B=w(fe),re=d(fe,2),de=w(re),ee=m(de);E((se,Y,Z,te,xe,J)=>{x(R,"data-testid",`blind-${t(D).param}`),h(X,se),h(ue,t(D).param),x(B,"min",Y),x(B,"max",Z),x(B,"aria-label",te),x(B,"data-testid",`blind-${t(D).param}-value`),on(B,e.values[t(D).param]??""),h(ee,`${xe??""} … ${J??""}`)},[()=>i(t(D).param),()=>$n(t(D).description,"MIN"),()=>$n(t(D).description,"MAX"),()=>i(t(D).param),()=>$n(t(D).description,"MIN")??"−∞",()=>$n(t(D).description,"MAX")??"∞"]),ne("input",B,se=>l(t(D),se.currentTarget.value)),v(C,R)});var I=d(T,2);je(I,17,()=>e.spec.extras,C=>C.param,(C,D)=>{var R=M0(),P=w(R),K=w(P),X=m(K,!0),ae=d(K,2),ue=m(ae,!0),fe=d(P,2),B=w(fe);{var re=ee=>{var se=C0();E(Y=>{x(se,"aria-label",Y),x(se,"data-testid",`blind-${t(D).param}-value`),Cr(se,e.values[t(D).param]===!0)},[()=>i(t(D).param)]),ne("change",se,Y=>f(t(D).param,Y.currentTarget.checked)),v(ee,se)},de=ee=>{var se=P0();E((Y,Z,te)=>{x(se,"min",Y),x(se,"max",Z),x(se,"aria-label",te),x(se,"data-testid",`blind-${t(D).param}-value`),on(se,e.values[t(D).param]??"")},[()=>$n(t(D).description,"MIN"),()=>$n(t(D).description,"MAX"),()=>i(t(D).param)]),ne("input",se,Y=>l(t(D),Y.currentTarget.value)),v(ee,se)};$(B,ee=>{t(D).description.TYPE==="BOOL"?ee(re):ee(de,-1)})}E(ee=>{x(R,"data-testid",`blind-${t(D).param}`),h(X,ee),h(ue,t(D).param)},[()=>i(t(D).param)]),v(C,R)}),E((C,D)=>{h(g,C),h(y,D)},[()=>s("Blind calibration"),()=>s("The running times of a reference run, in plain seconds next to the value the device stores.")]),v(r,p),ct()}yt(["input","change"]);var F0=_("<option> </option>"),gu=_('<span class="hmm-duration-broken svelte-1jozrc9"> </span>'),G0=_("<span> </span>"),U0=_('<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>'),B0=_('<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 V0(r,e){dt(e,!0);const n=Ut(),s=n.i18n.t;let a=N(Be({}));function i(R){return n.meta.parameterLabel(R.pair.unitParam,e.channelType)}function o(R){return Bh(R,e.values)}function l(R,P){const K=Vh(R,P);K&&(u(a,K.exact?Object.fromEntries(Object.entries(t(a)).filter(([X])=>X!==R.pair.name)):{...t(a),[R.pair.name]:K.seconds},!0),e.onchange(K.values))}function f(R,P){const K=Number(P);P===""||!Number.isFinite(K)||l(R,K)}function p(R,P){const K=Number(P),X=o(R),ae=R.pair.units[K];if(ae===void 0||X===void 0)return;const ue=Math.min(R.pair.maxCount,Math.max(0,Math.round(X/ae.seconds)));g({[R.pair.unitParam]:K,[R.pair.countParam]:ue})}function b(R,P){const K=Number(P);P===""||!Number.isInteger(K)||g({[R.pair.countParam]:K})}function g(R){e.onchange(R)}function k(R){const P=e.values[R.pair.unitParam];return typeof P=="number"?P:R.pair.units.findIndex(K=>K.name===P)}var y=B0(),S=w(y),T=m(S,!0),I=d(S,2),C=m(I,!0),D=d(I,2);je(D,17,()=>e.spec.pairs,R=>R.pair.name,(R,P)=>{const K=c(()=>o(t(P))),X=c(()=>BS(t(P),e.values));var ae=U0(),ue=w(ae),fe=w(ue),B=m(fe,!0),re=d(fe,2),de=m(re),ee=d(ue,2),se=w(ee),Y=d(se,4);je(Y,23,()=>t(P).pair.units,F=>F.name,(F,W,O)=>{var z=F0(),ce=m(z,!0),me={};E(be=>{h(ce,t(W).name),me!==(me=be)&&(z.value=(z.__value=me)??"")},[()=>String(t(O))]),v(F,z)});var Z;Yt(Y);var te=d(Y,2),xe=d(te,2),J=w(xe),ye=d(J,2),Re=m(ye,!0),ge=d(ee,2),H=w(ge);{var pe=F=>{var W=gu(),O=m(W,!0);E(z=>h(O,z),[()=>s("The device holds a value this pair cannot express")]),v(F,W)},ve=F=>{var W=G0(),O=m(W,!0);E(z=>h(O,z),[()=>vi(t(K))]),v(F,W)};$(H,F=>{t(K)===void 0?F(pe):F(ve,-1)})}var Q=d(H,2);{var oe=F=>{var W=gu(),O=m(W,!0);E(z=>{x(W,"data-testid",`duration-${t(P).pair.name}-inexact`),h(O,z)},[()=>s("The device can only do {seconds}",{seconds:vi(t(a)[t(P).pair.name]??0)})]),v(F,W)};$(Q,F=>{t(a)[t(P).pair.name]!==void 0&&F(oe)})}E((F,W,O,z,ce,me)=>{x(ae,"data-testid",`duration-${t(P).pair.name}`),h(B,F),h(de,`${t(P).pair.unitParam??""} / ${t(P).pair.countParam??""}`),se.disabled=!t(P).writable||t(X),x(se,"aria-label",W),x(se,"data-testid",`duration-${t(P).pair.name}-seconds`),on(se,t(K)??""),Y.disabled=!t(P).writable,x(Y,"aria-label",O),x(Y,"data-testid",`duration-${t(P).pair.name}-unit`),Z!==(Z=z)&&(Y.value=(Y.__value=Z)??"",Pn(Y,Z)),x(te,"max",t(P).pair.maxCount),te.disabled=!t(P).writable,x(te,"aria-label",ce),x(te,"data-testid",`duration-${t(P).pair.name}-count`),on(te,e.values[t(P).pair.countParam]??""),J.disabled=!t(P).writable,Cr(J,t(X)),x(J,"data-testid",`duration-${t(P).pair.name}-not-used`),h(Re,me),x(ge,"data-testid",`duration-${t(P).pair.name}-result`)},[()=>i(t(P)),()=>`${i(t(P))} ${s("seconds")}`,()=>`${i(t(P))} ${s("unit")}`,()=>String(k(t(P))),()=>`${i(t(P))} ${s("count")}`,()=>s("Not used / for ever")]),ne("input",se,F=>f(t(P),F.currentTarget.value)),ne("change",Y,F=>p(t(P),F.currentTarget.value)),ne("input",te,F=>b(t(P),F.currentTarget.value)),ne("change",J,F=>l(t(P),F.currentTarget.checked?t(P).notUsedSeconds:0)),v(R,ae)}),E((R,P)=>{h(T,R),h(C,P)},[()=>s("Durations"),()=>s("A duration is stored as a unit and a count; both are shown next to the seconds.")]),v(r,y),ct()}yt(["input","change"]);var bu=_("<option> </option>"),H0=_("<span> </span>"),z0=_('<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>'),j0=_('<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 W0(r,e){dt(e,!0);const n=Ut(),s=n.i18n.t;function a(S){return n.meta.parameterLabel(S,e.channelType)}function i(S){const T=e.values[S.param];return typeof T=="number"?T:S.options.find(I=>I.raw===T)?.value??-1}function o(S){const T=i(S);return T>=0&&!S.options.some(I=>I.value===T)?T:void 0}function l(S,T){return S.description.VALUE_LIST?.[T]??String(T)}var f=j0(),p=w(f),b=m(p,!0),g=d(p,2),k=m(g,!0),y=d(g,2);je(y,17,()=>e.spec.fields,S=>S.param,(S,T)=>{const I=c(()=>i(t(T))),C=c(()=>o(t(T)));var D=z0(),R=w(D),P=w(R),K=m(P,!0),X=d(P,2),ae=m(X,!0),ue=d(R,2),fe=w(ue),B=w(fe);{var re=J=>{var ye=bu(),Re=m(ye),ge={};E((H,pe)=>{h(Re,`${H??""} (${t(C)??""})`),ge!==(ge=pe)&&(ye.value=(ye.__value=ge)??"")},[()=>l(t(T),t(C)),()=>String(t(C))]),v(J,ye)};$(B,J=>{t(C)!==void 0&&J(re)})}var de=d(B);je(de,17,()=>t(T).options,J=>J.value,(J,ye)=>{var Re=bu(),ge=m(Re,!0),H={};E(pe=>{h(ge,t(ye).label),H!==(H=pe)&&(Re.value=(Re.__value=H)??"")},[()=>String(t(ye).value)]),v(J,Re)});var ee;Yt(fe);var se=d(fe,2),Y=m(se,!0),Z=d(ue,2),te=w(Z);{var xe=J=>{var ye=H0(),Re=m(ye,!0);E(()=>{x(ye,"data-testid",`enum-${t(T).param}-preset`),h(Re,t(T).presetId)}),v(J,ye)};$(te,J=>{t(T).presetId!==void 0&&J(xe)})}E((J,ye,Re,ge)=>{x(D,"data-testid",`enum-${t(T).param}`),h(K,J),h(ae,t(T).param),fe.disabled=!t(T).writable,x(fe,"aria-label",ye),x(fe,"data-testid",`enum-${t(T).param}-select`),ee!==(ee=Re)&&(fe.value=(fe.__value=ee)??"",Pn(fe,ee)),x(se,"data-testid",`enum-${t(T).param}-raw`),h(Y,ge)},[()=>a(t(T).param),()=>a(t(T).param),()=>String(t(I)),()=>t(I)<0?"—":`${l(t(T),t(I))} (${t(I)})`]),ne("change",fe,J=>e.onchange({[t(T).param]:Number(J.currentTarget.value)})),v(S,D)}),E((S,T)=>{h(b,S),h(k,T)},[()=>s("Named options"),()=>s("These values have names in the CCU string table that the description does not carry.")]),v(r,f),ct()}yt(["change"]);var K0=_('<th class="svelte-hdzef5"> </th>'),Y0=_('<label class="svelte-hdzef5"><input type="checkbox"/> <span> </span></label>'),q0=_('<div class="hmm-switch-days svelte-hdzef5"><!> <span class="hmm-switch-raw svelte-hdzef5"> </span></div>'),$0=_('<input class="hmm-input hmm-switch-time svelte-hdzef5" type="text" inputmode="numeric"/>'),X0=_('<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),Q0=_("<option> </option>"),Z0=_('<select class="hmm-select"></select>'),J0=_('<span class="hmm-switch-raw svelte-hdzef5"> </span>'),ew=_('<input class="hmm-input hmm-switch-number svelte-hdzef5" type="number"/> <!>',1),tw=_('<td class="svelte-hdzef5"><!></td>'),nw=_('<tr><td class="hmm-switch-index svelte-hdzef5"> </td><!></tr>'),rw=_('<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 sw(r,e){dt(e,!0);const n=Ut(),s=n.i18n.t;let a=N(!1);const i=c(()=>e.spec.slots.filter(se=>t(a)||!sk(e.values,se)));function o(se){return se.id==="TIME"?s("Time"):se.id==="WEEKDAY"?s("Weekdays"):n.meta.parameterLabel(se.id,e.channelType)}function l(se,Y){return e.values[_s(se,Y)]}function f(se,Y,Z){e.onchange({[_s(se,Y)]:Z})}function p(se,Y){const Z=rk(se,Y);Z&&e.onchange(Z)}function b(se,Y){const Z=e.spec.durations[`${se}:${Y.id}`];return Z===void 0?void 0:Rd(e.values,Z)?.seconds}function g(se,Y,Z){const te=e.spec.durations[`${se}:${Y.id}`],xe=Number(Z);if(te===void 0||Z===""||!Number.isFinite(xe))return;const J=xd(xe,te);J&&e.onchange(J)}function k(se,Y,Z){const te=Number(Z);Z===""||!Number.isFinite(te)||f(se,Y,te)}var y=rw(),S=w(y),T=m(S,!0),I=d(S,2),C=m(I,!0),D=d(I,2),R=w(D),P=d(R,2),K=m(P,!0),X=d(D,2),ae=w(X),ue=w(ae),fe=w(ue),B=w(fe),re=m(B,!0),de=d(B);je(de,17,()=>e.spec.columns,se=>se.id,(se,Y)=>{var Z=K0(),te=m(Z,!0);E(xe=>h(te,xe),[()=>o(t(Y))]),v(se,Z)});var ee=d(ue);je(ee,20,()=>t(i),se=>se,(se,Y)=>{var Z=nw(),te=w(Z),xe=m(te,!0),J=d(te);je(J,17,()=>e.spec.columns,ye=>ye.id,(ye,Re)=>{var ge=tw(),H=w(ge);{var pe=W=>{var O=q0(),z=w(O);je(z,18,()=>JS,be=>be,(be,Ee,le)=>{var G=Y0(),L=w(G),A=d(L,2),M=m(A,!0);E((he,Te,Pe,He)=>{x(G,"title",he),L.disabled=!e.spec.writable,x(L,"aria-label",Te),x(L,"data-testid",`switch-${Y}-day-${t(le)}`),Cr(L,Pe),h(M,He)},[()=>s(Ee),()=>s(Ee),()=>ek(l(Y,"WEEKDAY"),t(le)),()=>s(Ee).slice(0,2)]),ne("change",L,he=>f(Y,"WEEKDAY",tk(l(Y,"WEEKDAY"),t(le),he.currentTarget.checked))),v(be,G)});var ce=d(z,2),me=m(ce,!0);E(be=>{x(ce,"data-testid",`switch-${Y}-mask`),h(me,be)},[()=>String(l(Y,"WEEKDAY")??"—")]),v(W,O)},ve=W=>{var O=$0();E((z,ce)=>{O.disabled=!e.spec.writable,x(O,"aria-label",z),x(O,"data-testid",`switch-${Y}-time`),on(O,ce)},[()=>`${s("Time")} ${Y}`,()=>nk(e.values,Y)]),ne("change",O,z=>p(Y,z.currentTarget.value)),v(W,O)},Q=W=>{var O=X0(),z=Ie(O),ce=d(z,2),me=m(ce,!0);E((be,Ee,le)=>{z.disabled=!e.spec.writable,x(z,"aria-label",be),x(z,"data-testid",`switch-${Y}-${t(Re).id}`),on(z,Ee),x(ce,"data-testid",`switch-${Y}-${t(Re).id}-result`),h(me,le)},[()=>`${o(t(Re))} ${Y}`,()=>b(Y,t(Re))??"",()=>vi(b(Y,t(Re))??Number.NaN)]),ne("input",z,be=>g(Y,t(Re),be.currentTarget.value)),v(W,O)},oe=W=>{var O=Z0();je(O,22,()=>Ms(t(Re).description)??[],ce=>ce,(ce,me,be)=>{var Ee=Q0(),le=m(Ee,!0),G={};E((L,A)=>{h(le,L),G!==(G=A)&&(Ee.value=(Ee.__value=G)??"")},[()=>n.meta.valueLabel(t(Re).id,me,e.channelType),()=>String(t(be))]),v(ce,Ee)});var z;Yt(O),E((ce,me)=>{O.disabled=!e.spec.writable,x(O,"aria-label",ce),x(O,"data-testid",`switch-${Y}-${t(Re).id}`),z!==(z=me)&&(O.value=(O.__value=z)??"",Pn(O,z))},[()=>`${o(t(Re))} ${Y}`,()=>String(l(Y,t(Re).id)??"")]),ne("change",O,ce=>f(Y,t(Re).id,Number(ce.currentTarget.value))),v(W,O)},F=W=>{var O=ew(),z=Ie(O),ce=d(z,2);{var me=Ee=>{var le=J0(),G=m(le,!0);E(L=>h(G,L),[()=>lo(t(Re).description)]),v(Ee,le)},be=c(()=>lo(t(Re).description)!=="");$(ce,Ee=>{t(be)&&Ee(me)})}E((Ee,le,G,L)=>{x(z,"min",Ee),x(z,"max",le),x(z,"step",t(Re).description.TYPE==="FLOAT"?.01:1),z.disabled=!e.spec.writable,x(z,"aria-label",G),x(z,"data-testid",`switch-${Y}-${t(Re).id}`),on(z,L)},[()=>$n(t(Re).description,"MIN"),()=>$n(t(Re).description,"MAX"),()=>`${o(t(Re))} ${Y}`,()=>l(Y,t(Re).id)??""]),ne("input",z,Ee=>k(Y,t(Re).id,Ee.currentTarget.value)),v(W,O)};$(H,W=>{t(Re).kind==="weekday"?W(pe):t(Re).kind==="time"?W(ve,1):t(Re).kind==="duration"?W(Q,2):t(Re).kind==="enum"?W(oe,3):W(F,-1)})}v(ye,ge)}),E(()=>{x(Z,"data-testid",`switch-slot-${Y}`),h(xe,Y)}),v(se,Z)}),E((se,Y,Z,te)=>{h(T,se),h(C,Y),h(K,Z),h(re,te)},[()=>s("Switching programme"),()=>s("No weekday chosen - the slot does nothing"),()=>s("Unused"),()=>s("Slot")]),hr(R,()=>t(a),se=>u(a,se)),v(r,y),ct()}yt(["change","input"]);var _u=_('<button type="button"> </button>'),Eu=_("<option> </option>"),aw=_('<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>'),iw=_('<span class="hmm-week-unit svelte-1du5x7x"> </span>'),ow=_('<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>'),lw=_("<li> </li>"),dw=_('<ul class="hmm-week-problems svelte-1du5x7x" data-testid="week-problems"></ul>'),cw=_('<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 uw(r,e){dt(e,!0);const n=Ut(),s=n.i18n.t;let a=N(0),i=N(Be($i[0]??"MONDAY")),o=N("*"),l=N("");const f=c(()=>e.spec.profiles[t(a)]??e.spec.profiles[0]),p=c(()=>lo(e.spec.valueDescription)),b=c(()=>lk(e.spec,e.values)),g=c(()=>oa($n(e.spec.valueDescription,"MIN"),e.spec.valueDescription)),k=c(()=>oa($n(e.spec.valueDescription,"MAX"),e.spec.valueDescription)),y=c(()=>n.meta.parameterLabel(e.spec.valueField,e.channelType)),S=c(()=>t(b).filter(A=>A.profile===(t(f)?.id??"")));function T(A){const M=e.spec.days.indexOf(A),he=ik[M];return he===void 0?A:s(he)}function I(A){return A===""?s("Week programme"):`${s("Profile")} ${A.slice(1)}`}function C(A){return!t(f)||A===1?Ka(0):Ka(Yl(e.spec,e.values,t(f),t(i),A-1).endTime??0)}function D(A,M){const he=uk(M);he===void 0||!t(f)||e.onchange({[qr(t(f).endTimePrefix,t(i),A)]:he})}function R(A,M){const he=Number(M);M===""||!Number.isFinite(he)||!t(f)||e.onchange({[qr(t(f).valuePrefix,t(i),A)]:he})}function P(){if(!t(f))return;const A=t(o)==="*"?e.spec.days:[t(o)];e.onchange(dk(e.spec,e.values,t(f),t(i),A))}function K(){const A=e.spec.profiles.find(M=>M.id===t(l));!t(f)||!A||e.onchange(ck(e.spec,e.values,t(f),[A]))}function X(A){const M={day:T(A.day),slot:String(A.slot),end:Ka(e.spec.dayEnd)};switch(A.code){case"not-increasing":return s("{day}: end time {slot} is not after the one before it",M);case"after-day-end":return s("{day}: end time {slot} comes after the day has ended",M);case"day-not-closed":return s("{day}: the last end time must be {end}",M)}}var ae=cw(),ue=w(ae),fe=m(ue,!0),B=d(ue,2),re=m(B,!0),de=d(B,2);{var ee=A=>{var M=aw(),he=w(M);je(he,19,()=>e.spec.profiles,j=>j.id,(j,U,Ne)=>{var Le=_u();let ze;var _e=m(Le,!0);E(De=>{ze=Et(Le,1,"hmm-button svelte-1du5x7x",null,ze,{"hmm-week-active":t(Ne)===t(a)}),x(Le,"data-testid",`week-profile-${t(U).id}`),h(_e,De)},[()=>I(t(U).id)]),ne("click",Le,()=>u(a,t(Ne),!0)),v(j,Le)});var Te=d(he,4),Pe=w(Te),He=m(Pe,!0),qe=d(Pe,2),it=w(qe);it.value=it.__value="";var tt=d(it);je(tt,17,()=>e.spec.profiles,j=>j.id,(j,U)=>{var Ne=St(),Le=Ie(Ne);{var ze=_e=>{var De=Eu(),Ce=m(De,!0),Fe={};E(Oe=>{h(Ce,Oe),Fe!==(Fe=t(U).id)&&(De.value=(De.__value=Fe)??"")},[()=>I(t(U).id)]),v(_e,De)};$(Le,_e=>{t(U).id!==t(f)?.id&&_e(ze)})}v(j,Ne)}),Yt(qe);var Se=d(Te,2),we=m(Se,!0);E((j,U)=>{h(He,j),Se.disabled=!e.spec.writable||t(l)==="",h(we,U)},[()=>s("Copy profile to"),()=>s("Copy")]),yr(qe,()=>t(l),j=>u(l,j)),ne("click",Se,K),v(A,M)};$(de,A=>{e.spec.profiles.length>1&&A(ee)})}var se=d(de,2),Y=w(se);je(Y,16,()=>e.spec.days,A=>A,(A,M)=>{var he=_u();let Te;var Pe=m(he,!0);E(He=>{Te=Et(he,1,"hmm-button svelte-1du5x7x",null,Te,{"hmm-week-active":M===t(i)}),x(he,"data-testid",`week-day-${M}`),h(Pe,He)},[()=>T(M)]),ne("click",he,()=>u(i,M,!0)),v(A,he)});var Z=d(Y,4),te=w(Z),xe=m(te,!0),J=d(te,2),ye=w(J),Re=m(ye,!0);ye.value=ye.__value="*";var ge=d(ye);je(ge,16,()=>e.spec.days,A=>A,(A,M)=>{var he=St(),Te=Ie(he);{var Pe=He=>{var qe=Eu(),it=m(qe,!0),tt={};E(Se=>{h(it,Se),tt!==(tt=M)&&(qe.value=(qe.__value=tt)??"")},[()=>T(M)]),v(He,qe)};$(Te,He=>{M!==t(i)&&He(Pe)})}v(A,he)}),Yt(J);var H=d(Z,2),pe=m(H,!0),ve=d(se,2),Q=w(ve),oe=w(Q),F=w(oe),W=m(F,!0),O=d(F),z=m(O,!0),ce=d(O),me=m(ce,!0),be=d(ce),Ee=m(be,!0),le=d(Q);je(le,20,()=>Array.from({length:e.spec.slots},(A,M)=>M+1),A=>A,(A,M)=>{const he=c(()=>t(f)?Yl(e.spec,e.values,t(f),t(i),M):void 0);var Te=ow(),Pe=w(Te),He=m(Pe,!0),qe=d(Pe),it=m(qe,!0),tt=d(qe),Se=w(tt),we=d(tt),j=w(we),U=d(j,2);{var Ne=Le=>{var ze=iw(),_e=m(ze,!0);E(()=>h(_e,t(p))),v(Le,ze)};$(U,Le=>{t(p)!==""&&Le(Ne)})}E((Le,ze,_e,De)=>{x(Te,"data-testid",`week-slot-${M}`),h(He,M),h(it,Le),Se.disabled=!e.spec.writable,x(Se,"aria-label",ze),x(Se,"data-testid",`week-slot-${M}-endtime`),on(Se,_e),x(j,"min",t(g)),x(j,"max",t(k)),j.disabled=!e.spec.writable,x(j,"aria-label",De),x(j,"data-testid",`week-slot-${M}-value`),on(j,t(he)?.value??"")},[()=>C(M),()=>`${s("until")} ${M}`,()=>Ka(t(he)?.endTime),()=>`${s("Value")} ${M}`]),ne("change",Se,Le=>D(M,Le.currentTarget.value)),ne("input",j,Le=>R(M,Le.currentTarget.value)),v(A,Te)});var G=d(ve,2);{var L=A=>{var M=dw();je(M,21,()=>t(S),he=>`${he.day}-${he.slot}-${he.code}`,(he,Te)=>{var Pe=lw(),He=m(Pe,!0);E(qe=>h(He,qe),[()=>X(t(Te))]),v(he,Pe)}),v(A,M)};$(G,A=>{t(S).length>0&&A(L)})}E((A,M,he,Te,Pe,He,qe,it)=>{h(fe,A),h(re,M),h(xe,he),h(Re,Te),H.disabled=!e.spec.writable,h(pe,Pe),h(W,He),h(z,qe),h(me,it),h(Ee,t(y))},[()=>s("Week programme"),()=>s("The end times of a day rise until {end}, and the last one is {end}",{end:Ka(e.spec.dayEnd)}),()=>s("Copy day to"),()=>s("Weekdays"),()=>s("Copy"),()=>s("Slot"),()=>s("Time"),()=>s("until")]),yr(J,()=>t(o),A=>u(o,A)),ne("click",H,P),v(r,ae),ct()}yt(["click","change","input"]);function fw(r,e){var n=St(),s=Ie(n);je(s,17,()=>e.specs,a=>a.id,(a,i)=>{var o=St(),l=Ie(o);{var f=y=>{L0(y,{get spec(){return t(i)},get values(){return e.values},get channelType(){return e.channelType},get onchange(){return e.onchange}})},p=y=>{V0(y,{get spec(){return t(i)},get values(){return e.values},get channelType(){return e.channelType},get onchange(){return e.onchange}})},b=y=>{W0(y,{get spec(){return t(i)},get values(){return e.values},get channelType(){return e.channelType},get onchange(){return e.onchange}})},g=y=>{sw(y,{get spec(){return t(i)},get values(){return e.values},get channelType(){return e.channelType},get onchange(){return e.onchange}})},k=y=>{uw(y,{get spec(){return t(i)},get values(){return e.values},get channelType(){return e.channelType},get onchange(){return e.onchange}})};$(l,y=>{t(i).kind==="blind-calibration"?y(f):t(i).kind==="duration-pairs"?y(p,1):t(i).kind==="enum-options"?y(b,2):t(i).kind==="switch-week-profile"?y(g,3):t(i).kind==="week-profile"&&y(k,4)})}v(a,o)}),v(r,n)}class hw extends Map{#e=new Map;#n=N(0);#t=N(0);#s=Is||-1;constructor(e){if(super(),e){for(var[n,s]of e)super.set(n,s);this.#t.v=super.size}}#a(e){return Is===this.#s?N(e):zs(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),hs(l);else if(i!==n){hs(a);var f=l.reactions===null?null:new Set(l.reactions),p=f===null||!a.reactions?.every(b=>f.has(b));p&&hs(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),hs(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);hs(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 Xl="DYNAMIC_ROUTE_";function Wr(r,e,n){return r[`${Xl}${e}_${String(n)}`]}function tl(r){return typeof r=="string"?r:typeof r=="number"?String(r):""}function Js(r){return r===!0||r===1||r==="true"||r==="1"}function yu(r){if(typeof r=="number"&&Number.isFinite(r))return r;if(typeof r=="string"&&r.trim()!==""&&Number.isFinite(Number(r)))return Number(r)}function mw(r){const e=new Set;for(const n of Object.keys(r))if(n.startsWith(`${Xl}IP_DESTINATION_ADDRESS_`)){const s=Number(n.slice(`${Xl}IP_DESTINATION_ADDRESS_`.length));Number.isInteger(s)&&e.add(s)}return[...e].sort((n,s)=>n-s).map(n=>({index:n,destination:tl(Wr(r,"IP_DESTINATION_ADDRESS",n)),nextHop:tl(Wr(r,"NEXT_HOP_ADDRESS",n)),distance:yu(Wr(r,"DISTANCE",n))??0,rssi:yu(Wr(r,"RSSI",n)),isStatic:Js(Wr(r,"IS_STATIC_ROUTE",n)),isNeighbour:Js(Wr(r,"IS_NEIGHBOUR",n)),macSequenceValid:Js(Wr(r,"IS_MAC_SEQUENCE_NUMBER_VALID",n)),accessController:Js(Wr(r,"OM_ACCESS_CONTROLLER",n)),router:Js(Wr(r,"OM_ROUTER",n)),portable:Js(Wr(r,"OM_PORTABLE_DEVICE",n)),listenerMode:tl(Wr(r,"OM_LISTENER_MODE",n)),omValid:Js(Wr(r,"OM_VALID",n))})).filter(n=>n.destination!=="")}function vw(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 pw=_("<p> </p>"),gw=Ws('<text class="hmm-routing-edge svelte-10p79ns"> <!></text>'),bw=Ws("<line></line><!>",1),_w=Ws('<text text-anchor="middle" class="hmm-routing-mark svelte-10p79ns">AC</text>'),Ew=Ws('<text text-anchor="middle" class="hmm-routing-mark svelte-10p79ns">R</text>'),yw=Ws('<text text-anchor="middle" class="hmm-routing-mark svelte-10p79ns">P</text>'),Sw=Ws('<g><circle class="svelte-10p79ns"></circle><text text-anchor="middle" class="svelte-10p79ns"> </text><!></g>'),kw=_('<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>'),ww=_('<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),Aw=_('<div class="hmm-routing svelte-10p79ns" data-testid="routing-table"><p class="hmm-routing-hint svelte-10p79ns"> </p> <!></div>');function Tw(r,e){dt(e,!0);const n=Ut(),s=n.i18n.t,a=c(()=>mw(e.values)),i=c(()=>vw(e.self,t(a))),o=I=>{const C=n.nameOf(I);return C&&C!==I?C:I},l=560,f=c(()=>{const I=new hw,C=l/2,D=l/2;I.set(t(i).self,{x:C,y:D});const R=t(i).edges.filter(X=>X.from===t(i).self).map(X=>X.to),P=t(i).nodes.map(X=>X.id).filter(X=>X!==t(i).self&&!R.includes(X)),K=(X,ae,ue)=>{X.forEach((fe,B)=>{const re=ue+2*Math.PI*B/Math.max(X.length,1);I.set(fe,{x:C+ae*Math.cos(re),y:D+ae*Math.sin(re)})})};return K(R,l*.26,-Math.PI/2),K(P,l*.44,-Math.PI/2+Math.PI/Math.max(P.length,1)),I}),p=I=>t(f).get(I)??{x:l/2,y:l/2};var b=Aw(),g=w(b),k=m(g,!0),y=d(g,2);{var S=I=>{var C=pw(),D=m(C,!0);E(R=>h(D,R),[()=>s("No routes: the device reported an empty table.")]),v(I,C)},T=I=>{var C=ww(),D=Ie(C),R=w(D);je(R,17,()=>t(i).edges,W=>`${W.from}>${W.to}`,(W,O)=>{const z=c(()=>p(t(O).from)),ce=c(()=>p(t(O).to));var me=bw(),be=Ie(me);let Ee;var le=d(be);{var G=L=>{var A=gw(),M=w(A),he=d(M);{var Te=Pe=>{var He=Qn();E(()=>h(He,`, ${t(O).rssi??""} dBm`)),v(Pe,He)};$(he,Pe=>{t(O).rssi!==void 0&&Pe(Te)})}E(Pe=>{x(A,"x",(t(z).x+t(ce).x)/2),x(A,"y",(t(z).y+t(ce).y)/2-4),h(M,`${t(O).distance??""}
|
|
17
|
+
${Pe??""}`)},[()=>s("hops",{},t(O).distance)]),v(L,A)};$(le,L=>{t(O).distance!==void 0&&L(G)})}E(()=>{x(be,"x1",t(z).x),x(be,"y1",t(z).y),x(be,"x2",t(ce).x),x(be,"y2",t(ce).y),Ee=Et(be,0,"svelte-10p79ns",null,Ee,{"hmm-routing-static":t(O).isStatic})}),v(W,me)});var P=d(R);je(P,17,()=>t(i).nodes,W=>W.id,(W,O)=>{const z=c(()=>p(t(O).id));var ce=Sw();let me;var be=w(ce),Ee=d(be),le=m(Ee,!0),G=d(Ee);{var L=he=>{var Te=_w();E(()=>{x(Te,"x",t(z).x),x(Te,"y",t(z).y+4)}),v(he,Te)},A=he=>{var Te=Ew();E(()=>{x(Te,"x",t(z).x),x(Te,"y",t(z).y+4)}),v(he,Te)},M=he=>{var Te=yw();E(()=>{x(Te,"x",t(z).x),x(Te,"y",t(z).y+4)}),v(he,Te)};$(G,he=>{t(O).accessController?he(L):t(O).router?he(A,1):t(O).portable&&he(M,2)})}E(he=>{me=Et(ce,0,"hmm-routing-node svelte-10p79ns",null,me,{"hmm-routing-self":t(O).id===t(i).self,"hmm-routing-router":t(O).router}),x(be,"cx",t(z).x),x(be,"cy",t(z).y),x(be,"r",t(O).id===t(i).self?22:16),x(Ee,"x",t(z).x),x(Ee,"y",t(z).y+30),h(le,he)},[()=>o(t(O).id)]),v(W,ce)});var K=d(D,2),X=w(K),ae=w(X),ue=d(w(ae)),fe=m(ue,!0),B=d(ue),re=m(B,!0),de=d(B),ee=m(de,!0),se=d(de,2),Y=m(se,!0),Z=d(se),te=m(Z,!0),xe=d(Z),J=m(xe,!0),ye=d(xe),Re=m(ye,!0),ge=d(ye),H=m(ge,!0),pe=d(ge),ve=m(pe,!0),Q=d(pe),oe=m(Q,!0),F=d(X);je(F,21,()=>t(a),W=>W.index,(W,O)=>{var z=kw(),ce=w(z),me=m(ce,!0),be=d(ce),Ee=w(be),le=m(Ee,!0),G=d(Ee),L=d(be),A=w(L),M=m(A,!0),he=d(L),Te=m(he,!0),Pe=d(he),He=m(Pe,!0),qe=d(Pe),it=m(qe,!0),tt=d(qe),Se=m(tt,!0),we=d(tt),j=m(we,!0),U=d(we),Ne=m(U,!0),Le=d(U),ze=m(Le,!0),_e=d(Le),De=m(_e,!0),Ce=d(_e),Fe=m(Ce,!0);E((Oe,Xe,Ye)=>{x(z,"data-testid",Oe),h(me,t(O).index),h(le,t(O).destination),h(G,` ${Xe??""}`),h(M,t(O).nextHop),h(Te,t(O).distance),h(He,Ye),h(it,t(O).isNeighbour?"✔":""),h(Se,t(O).isStatic?"✔":""),h(j,t(O).router?"✔":""),h(Ne,t(O).accessController?"✔":""),h(ze,t(O).portable?"✔":""),h(De,t(O).listenerMode),h(Fe,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(W,z)}),E((W,O,z,ce,me,be,Ee,le,G,L,A,M)=>{x(D,"viewBox",W),x(D,"aria-label",O),h(fe,z),h(re,ce),h(ee,me),h(Y,be),h(te,Ee),h(J,le),h(Re,G),h(H,L),h(ve,A),h(oe,M)},[()=>`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(I,C)};$(y,I=>{t(a).length===0?I(S):I(T,-1)})}E(I=>h(k,I),[()=>s("Read from the device itself; every read costs duty cycle, so it is read once when this opens.")]),v(r,b),ct()}var Rw=_('<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 xw(r,e){dt(e,!0);let n=V(e,"title",3,void 0),s=V(e,"changed",3,!1);var a=Rw();let i;var o=w(a),l=w(o),f=m(l,!0),p=d(o,2),b=w(p),g=w(b),k=d(g,2),y=m(k,!0);E(()=>{i=Et(a,1,"hmm-param hmm-param-table-row svelte-ery515",null,i,{"hmm-param-changed":s()}),x(a,"data-testid",`suppress-row-${e.name}`),h(f,e.name),x(b,"title",n()),Cr(g,e.suppressed),x(g,"data-testid",`suppress-${e.name}`),h(y,e.label)}),ne("change",g,S=>e.onchange(S.currentTarget.checked)),v(r,a),ct()}yt(["change"]);var Iw=_('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="paramset-preview"> </button>',1),Dw=_("<p> </p>"),Nw=_('<p data-testid="paramset-failed"> </p>'),Cw=_('<label class="hmm-paramset-option svelte-onngst"><input type="checkbox" data-testid="paramset-expert"/> <span> </span></label>'),Pw=_('<label class="hmm-paramset-option svelte-onngst"><input type="checkbox" data-testid="paramset-show-covered"/> <span> </span></label>'),Mw=_('<button type="button" class="hmm-button" data-testid="paramset-internal-key"> </button>'),Ow=_('<label class="hmm-paramset-option svelte-onngst"><input type="checkbox" data-testid="paramset-show-hidden"/> <span> </span></label>'),Lw=_("<li> </li>"),Fw=_('<ul class="hmm-paramset-warnings svelte-onngst" data-testid="paramset-warnings"></ul>'),Gw=_('<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>'),Uw=_("<div><!></div>"),Bw=_('<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>'),Vw=_('<li><span class="hmm-mono"> </span> </li>'),Hw=_('<ul class="hmm-paramset-results svelte-onngst" data-testid="paramset-results"></ul>'),zw=_('<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),jw=_("<!> <!> <!> <!>",1);function Ww(r,e){dt(e,!0);let n=V(e,"open",15,!1),s=V(e,"interfaceName",3,""),a=V(e,"address",3,""),i=V(e,"paramset",3,"MASTER");const o=Ut(),l=o.i18n.t;let f=N(void 0),p=N(Be({})),b=N(Be({})),g=N(Be({})),k=N(void 0),y=N(""),S=N(!1),T=N(Be([])),I=N(!1),C=N(!1),D=N(!1),R=N(!1),P=N(!1),K=N(void 0),X=N(Be([])),ae=N(Be([])),ue=0,fe=N(void 0),B=N(Be({})),re=N(void 0),de=N(!1),ee=N(void 0),se=N(!1);const Y=c(()=>ci(s(),o.interfaces.typeOf(s()))),Z=c(()=>n()&&t(Y)&&/:0$/.test(a())&&(i()==="MASTER"||i()==="VALUES"));st(()=>{if(!t(Z)){u(fe,void 0),u(B,{},!0),u(re,void 0);return}const ke={interfaceName:s(),address:a(),paramset:i()};u(B,{},!0),Er(()=>{o.paramsets.suppressedServiceMessages(ke.interfaceName,ke.address).then(Me=>{ke.address===a()&&ke.interfaceName===s()&&u(fe,Me,!0)}),ke.paramset==="MASTER"&&o.paramsets.describe(ke.interfaceName,ke.address,"VALUES").then(Me=>{ke.address===a()&&ke.interfaceName===s()&&u(re,Me,!0)})})});const te=c(()=>{if(t(fe)===void 0)return[];const ke=i()==="VALUES"?t(f):t(re);return ke?Wh(ke):[]}),xe=c(()=>i()==="MASTER"?t(te):[]);function J(ke){return t(B)[ke]??t(fe)?.includes(ke)===!0}function ye(ke){return ke in t(B)&&t(B)[ke]!==(t(fe)?.includes(ke)===!0)}const Re=c(()=>t(te).some(ke=>ye(ke)));function ge(ke,Me){u(B,{...t(B),[ke]:Me},!0)}function H(ke){u(B,Object.fromEntries(t(te).map(Me=>[Me,ke])),!0)}function pe(){u(ee,_k({address:a(),suppressed:t(fe)??[],edits:t(B),labels:{suppressed:l("suppressed"),unsuppressed:l("not suppressed")}}),!0),u(de,!0)}async function ve(){const ke=t(ee);if(ke){u(se,!0);try{for(const Me of ke.entries)await o.paramsets.suppressServiceMessages(s(),a(),Me.param,t(B)[Me.param]===!0);u(fe,await o.paramsets.suppressedServiceMessages(s(),a()),!0),u(B,{},!0)}finally{u(se,!1),u(de,!1)}}}const Q=c(()=>o.devices.index(s())),oe=c(()=>t(Q)?.get(a())?.TYPE??""),F=c(()=>`${i()} — ${o.nameOf(a())} (${a()})`),W=c(()=>t(f)?jh(t(f),t(k)):[]),O=c(()=>({optionByName:(ke,Me)=>o.meta.valueLabelIfKnown(ke,Me,t(oe)),optionByIndex:(ke,Me)=>o.meta.valueLabelIfKnown(ke,String(Me),t(oe)),preset:ke=>t(k)?.parameters.find(Me=>Me.name===ke)?.preset,uiLabel:ke=>o.meta.uiLabel(ke)})),z=c(()=>t(f)?vk({interfaceName:s(),address:a(),channelType:t(oe),paramset:i(),description:t(f)},t(O)):[]),ce=c(()=>t(D)||t(R)?new Set:pk(t(z))),me=c(()=>t(W).filter(ke=>(t(C)||ke.visible)&&!t(ce).has(ke.name))),be=c(()=>i()==="MASTER"&&t(f)?gh(t(k)?.controls,t(f)):void 0),Ee=c(()=>t(R)?void 0:t(be)),le=c(()=>t(R)?xl(t(be)):new Set),G=c(()=>new Map(t(W).map(ke=>[ke.name,ke]))),L=c(()=>xl(t(be))),A=c(()=>t(R)?[]:t(Ee)?t(z).filter(ke=>!ke.covers.every(Me=>t(L).has(Me))):t(z));st(()=>{n()&&i()==="MASTER"&&o.meta.loadPresets()});const M=c(()=>i()==="VALUES"),he=c(()=>i()==="MASTER"),Te=c(()=>{if(!t(he)||!t(Q)||a()===""||!t(Q).has(a()))return;const ke=t(Q).all().filter(Me=>Me.TYPE===t(oe)&&Me.ADDRESS!==a()).map(Me=>Me.ADDRESS);return y_(t(Q),a(),i(),ke)}),Pe=c(()=>t(Te)?[...t(Te).eligible.map(ke=>({value:ke,label:`${o.nameOf(ke)} (${ke})`})),...t(Te).ineligible.filter(ke=>ke.reason==="different-identity").map(ke=>({value:ke.address,label:`${o.nameOf(ke.address)} (${ke.address}) — ${l("other firmware or device type")}`,disabled:!0}))]:[]),He=c(()=>(t(k)?.problems??[]).map(ke=>`${ke.params.join(", ")}: ${o.meta.uiLabel(ke.errorKey)}`));st(()=>{if(!n()||s()===""||a()==="")return;const ke=ue+=1,Me={interfaceName:s(),address:a(),paramset:i()};o.paramsets.open(Me.interfaceName,Me.address,Me.paramset).then(Qe=>{ke===ue&&(u(f,Qe?.description,!0),u(p,Qe?.values??{},!0),u(b,{},!0),Me.paramset==="VALUES"&&Fe(ke),u(g,{},!0),u(X,[],!0),u(ae,[],!0),u(T,[],!0),u(I,!1),u(R,!1))})}),st(()=>{const ke=t(f);if(!n()||!ke||i()!=="MASTER"||t(oe)===""){u(k,void 0),qe=void 0;return}const Me=tt(),Qe=t(y),ut=it(s(),a());o.meta.masterView(t(oe),ke,Me,Qe,ut).then(bt=>{u(k,bt,!0)})});let qe;function it(ke,Me){const Qe=`${ke}|${Me}`,ut=Me.indexOf(":"),bt=ut<0?Me:Me.slice(0,ut);return{deviceType:t(Q)?.get(Me)?.PARENT_TYPE||t(Q)?.get(bt)?.TYPE||"",channel:ut<0?-1:Number(Me.slice(ut+1)),channelMode:()=>(qe?.key!==Qe&&(qe={key:Qe,answer:o.paramsets.channelMode(ke,Me)}),qe.answer)}}st(()=>{if(!n()||i()!=="MASTER"||a()===""){u(y,"");return}const ke=`${s()}|${a()}`;u(y,""),o.paramsets.paramsetId(s(),a()).then(Me=>o.meta.masterFormId(Me)).then(Me=>{`${s()}|${a()}`===ke&&u(y,Me,!0)})});function tt(){const ke={...t(p)};for(const[Me,Qe]of Object.entries(t(g)))(typeof Qe=="boolean"||typeof Qe=="number"||typeof Qe=="string")&&(ke[Me]=Qe);return ke}function Se(ke){return Object.prototype.hasOwnProperty.call(t(g),ke.name)?t(g)[ke.name]:t(p)[ke.name]??ke.description.DEFAULT}function we(ke){return Object.prototype.hasOwnProperty.call(t(g),ke.name)}function j(ke,Me){u(g,{...t(g),[ke.name]:Me},!0)}function U(ke){u(g,{...t(g),...ke},!0)}function Ne(ke){return o.meta.parameterLabel(ke.name,t(oe))}function Le(ke){const Me=o.meta.parameterHelp(ke.name,t(oe));return Me===void 0?void 0:Me.replace(/<[^>]*>/g," ").replace(/\s+/g," ").trim()}function ze(){t(f)&&(u(X,[],!0),u(ae,[],!0),u(K,Qa(t(p),t(g),t(f),{interfaceName:s(),targets:[a(),...t(T)],writeAll:t(I)}),!0),u(P,!0))}async function _e(){const ke=t(K);if(!ke||!t(f))return;const Me=await o.paramsets.put(s(),[...ke.targets],i(),ke.values,t(I)?{writeAll:!0}:void 0);u(X,Me,!0);const Qe=await o.paramsets.read(s(),a(),i());Qe&&(u(ae,ql(ke.values,Qe,t(f)),!0),u(p,Qe,!0),i()==="VALUES"&&Fe(ue),u(g,{},!0)),Me.length>0&&Me.every(ut=>ut.ok)&&!t(ae).some(ut=>ut.differs)&&u(P,!1)}function De(){const ke=t(K);!ke||ke.entries.length===0||(o.changeSet.stage({kind:"paramset",interfaceName:s(),title:`${i()} — ${o.nameOf(a())} (${a()})`,targets:[...ke.targets],paramset:i(),values:ke.values,writeAll:t(I),calls:ke.targets.map(Me=>`putParamset(${Me}, ${i()}, ${JSON.stringify(ke.values)})`),lines:ke.entries.map(Me=>({label:Me.param,from:Me.from,to:Me.to}))}),u(P,!1),n(!1))}function Ce(ke,Me){if(ke.kind==="enum"&&typeof Me=="number"){const Qe=ke.valueList?.[Me];if(Qe!==void 0)return`${o.meta.valueLabel(ke.name,Qe,t(oe))} (${Me})`}return String(Me)}async function Fe(ke){const Me=await o.paramsets.valueStates(s(),a());ke===ue&&u(b,Me,!0)}async function Oe(ke){const Me=Se(ke),Qe=typeof Me=="boolean"||typeof Me=="number"||typeof Me=="string"?Me:!1;await o.paramsets.setValue(s(),a(),ke.name,Qe)&&(u(g,Object.fromEntries(Object.entries(t(g)).filter(([bt])=>bt!==ke.name)),!0),u(p,{...t(p),[ke.name]:Qe},!0),Fe(ue),o.notices.push("info",`setValue ${o.nameOf(a())} (${a()}) ${ke.name} = ${Ce(ke,Qe)}`))}var Xe=jw(),Ye=Ie(Xe);kn(Ye,{get title(){return t(F)},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 Qe=Iw(),ut=Ie(Qe),bt=m(ut,!0),rt=d(ut,2),qt=m(rt,!0);E((xt,Lt)=>{h(bt,xt),rt.disabled=!t(f),h(qt,Lt)},[()=>l("Close"),()=>l("Preview")]),ne("click",ut,()=>n(!1)),ne("click",rt,ze),v(Me,Qe)},children:(Me,Qe)=>{var ut=St(),bt=Ie(ut);{var rt=Lt=>{var Zt=Dw(),_n=m(Zt,!0);E(gn=>h(_n,gn),[()=>l("Loading Homematic Manager...")]),v(Lt,Zt)},qt=Lt=>{var Zt=Nw(),_n=m(Zt,!0);E(gn=>h(_n,gn),[()=>l("No data")]),v(Lt,Zt)},xt=Lt=>{var Zt=zw(),_n=Ie(Zt),gn=w(_n);{var ln=ot=>{{let vt=c(()=>l("Please choose one or more channels")),Dt=c(()=>l("Please choose one or more channels")),Ve=c(()=>l("Filter")),Ke=c(()=>l("Check all")),et=c(()=>l("Uncheck all"));di(ot,{get options(){return t(Pe)},get label(){return t(vt)},get placeholder(){return t(Dt)},get filterLabel(){return t(Ve)},get checkAllLabel(){return t(Ke)},get uncheckAllLabel(){return t(et)},summary:pt=>l("{count} channels selected",{},pt.length),testId:"paramset-targets",get selected(){return t(T)},set selected(pt){u(T,pt,!0)}})}};$(gn,ot=>{t(he)&&t(Pe).length>0&&ot(ln)})}var bn=d(gn,2),wn=w(bn),Zn=d(wn,2),Kn=m(Zn,!0),Jt=d(bn,2);{var Mt=ot=>{var vt=Cw(),Dt=w(vt),Ve=d(Dt,2),Ke=m(Ve,!0);E(et=>h(Ke,et),[()=>l("Expert view")]),hr(Dt,()=>t(R),et=>u(R,et)),v(ot,vt)};$(Jt,ot=>{t(be)&&ot(Mt)})}var dn=d(Jt,2);{var Gn=ot=>{var vt=Pw(),Dt=w(vt),Ve=d(Dt,2),Ke=m(Ve,!0);E(et=>h(Ke,et),[()=>l("Show the raw parameters as well")]),hr(Dt,()=>t(D),et=>u(D,et)),v(ot,vt)};$(dn,ot=>{t(z).length>0&&!t(be)&&ot(Gn)})}var Nn=d(dn,2);{var Sr=ot=>{var vt=Mw(),Dt=m(vt,!0);E(Ve=>h(Dt,Ve),[()=>l("Internal key…")]),ne("click",vt,()=>u(S,!0)),v(ot,vt)};$(Nn,ot=>{t(k)?.internalKey&&ot(Sr)})}var Ur=d(Nn,2);{var Jn=ot=>{var vt=Ow(),Dt=w(vt),Ve=d(Dt,2),Ke=m(Ve,!0);E(et=>h(Ke,et),[()=>l("Show hidden parameters")]),hr(Dt,()=>t(C),et=>u(C,et)),v(ot,vt)},Un=c(()=>t(W).some(ot=>!ot.visible)&&!t(Ee));$(Ur,ot=>{t(Un)&&ot(Jn)})}var kr=d(_n,2);{var os=ot=>{var vt=Fw();je(vt,20,()=>t(He),Dt=>Dt,(Dt,Ve)=>{var Ke=Lw(),et=m(Ke,!0);E(()=>h(et,Ve)),v(Dt,Ke)}),v(ot,vt)};$(kr,ot=>{t(He).length>0&&ot(os)})}var er=d(kr,2);{let ot=c(tt);fw(er,{get specs(){return t(A)},get values(){return t(ot)},get channelType(){return t(oe)},onchange:U})}var wr=d(er,2);{var Br=ot=>{{let vt=c(()=>a().split(":")[0]??a());Tw(ot,{get values(){return t(p)},get self(){return t(vt)}})}};$(wr,ot=>{i()==="ROUTING_TABLE"&&ot(Br)})}var or=d(wr,2);{var Ar=ot=>{var vt=Gw(),Dt=d(w(vt),1,!0);E(Ve=>h(Dt,Ve),[()=>l("Marked: the parameters the easy mode of this channel shows")]),v(ot,vt)};$(or,ot=>{t(R)&&t(le).size>0&&ot(Ar)})}var lr=d(or,2);let Jr;var Pr=w(lr);{var Tr=ot=>{{let vt=c(tt);Yh(ot,{get form(){return t(Ee)},get fields(){return t(G)},get values(){return t(vt)},changed:Dt=>Object.prototype.hasOwnProperty.call(t(g),Dt),get description(){return t(f)},get channelType(){return t(oe)},get presets(){return o.meta.presets},get timeSelectors(){return o.meta.timeSelectors},onchange:U,testId:"paramset-easy-form"})}};$(Pr,ot=>{t(Ee)&&t(f)&&ot(Tr)})}var ie=d(Pr,2);je(ie,17,()=>t(Ee)?[]:t(me),ot=>ot.name,(ot,vt)=>{const Dt=c(()=>t(te).includes(t(vt).name));var Ve=Uw();let Ke;var et=w(Ve);{let pt=c(()=>Se(t(vt))),Tt=c(()=>Ne(t(vt))),Kt=c(()=>Le(t(vt))),en=c(()=>we(t(vt))),Bt=c(()=>t(M)?t(b)[t(vt).name]:void 0),Ft=c(()=>t(M)&&t(vt).writable?()=>{Oe(t(vt))}:void 0),yn=c(()=>t(Dt)?J(t(vt).name):void 0),pn=c(()=>t(Dt)?Xt=>ge(t(vt).name,Xt):void 0),cn=c(()=>l("suppressed")),An=c(()=>l("A suppressed one reports a value that raises no message; the CCU shows it as inactive.")),nr=c(()=>t(Dt)&&ye(t(vt).name));Ea(et,{get field(){return t(vt)},get value(){return t(pt)},get label(){return t(Tt)},get help(){return t(Kt)},get changed(){return t(en)},valueLabel:Xt=>o.meta.valueLabel(t(vt).name,Xt,t(oe)),presetLabel:Xt=>o.meta.uiLabel(Xt),get valueState(){return t(Bt)},onchange:Xt=>j(t(vt),Xt),get onset(){return t(Ft)},get suppressed(){return t(yn)},get onsuppress(){return t(pn)},get suppressLabel(){return t(cn)},get suppressTitle(){return t(An)},get suppressChanged(){return t(nr)}})}E(pt=>Ke=Et(Ve,1,"hmm-paramset-easy-mark hmm-param-table-span svelte-onngst",null,Ke,{"hmm-paramset-easy-marked":pt}),[()=>t(le).has(t(vt).name)]),v(ot,Ve)});var Ge=d(ie,2);je(Ge,16,()=>t(xe),ot=>ot,(ot,vt)=>{{let Dt=c(()=>J(vt)),Ve=c(()=>ye(vt)),Ke=c(()=>l("suppressed")),et=c(()=>l("A suppressed one reports a value that raises no message; the CCU shows it as inactive."));xw(ot,{get name(){return vt},get suppressed(){return t(Dt)},get changed(){return t(Ve)},get label(){return t(Ke)},get title(){return t(et)},onchange:pt=>ge(vt,pt)})}});var $t=d(lr,2);{var hn=ot=>{var vt=Bw(),Dt=w(vt),Ve=m(Dt),Ke=d(Dt,2),et=m(Ke,!0),pt=d(Ke,2),Tt=m(pt,!0),Kt=d(pt,2),en=m(Kt,!0);E((Bt,Ft,yn,pn,cn)=>{h(Ve,`${Bt??""} — ${Ft??""}`),h(et,yn),h(Tt,pn),Kt.disabled=!t(Re)||t(se),h(en,cn)},[()=>l("Service message suppression"),()=>l("Nothing is sent until Apply; the preview lists every call first."),()=>l("Suppress all"),()=>l("Unsuppress all"),()=>l("Apply")]),ne("click",Ke,()=>H(!0)),ne("click",pt,()=>H(!1)),ne("click",Kt,pe),v(ot,vt)};$($t,ot=>{t(te).length>0&&ot(hn)})}var Bn=d($t,2);{var tr=ot=>{var vt=Hw();je(vt,21,()=>t(X),Dt=>`${Dt.address}-${Dt.paramset}`,(Dt,Ve)=>{var Ke=Vw();let et;var pt=w(Ke),Tt=m(pt,!0),Kt=d(pt);E(()=>{et=Et(Ke,1,"svelte-onngst",null,et,{"hmm-paramset-failed":!t(Ve).ok}),h(Tt,t(Ve).address),h(Kt,` ${t(Ve).ok?"✔":`✕ ${t(Ve).faultString??""}`}`)}),v(Dt,Ke)}),v(ot,vt)};$(Bn,ot=>{t(X).length>0&&ot(tr)})}E(ot=>{h(Kn,ot),Jr=Et(lr,1,"hmm-paramset-list hmm-param-table svelte-onngst",null,Jr,{"hmm-paramset-raw":i()==="ROUTING_TABLE"})},[()=>l("Write every parameter, not only the changed ones")]),hr(wn,()=>t(I),ot=>u(I,ot)),v(Lt,Zt)};$(bt,Lt=>{o.paramsets.loading&&!t(f)?Lt(rt):t(f)?Lt(xt,-1):Lt(qt,1)})}v(Me,ut)},$$slots:{buttons:!0,default:!0}});var Ze=d(Ye,2);$l(Ze,{get preview(){return t(K)},get paramset(){return i()},get warnings(){return t(He)},get results(){return t(X)},get readBack(){return t(ae)},get writing(){return o.paramsets.writing},onstage:De,onconfirm:()=>{_e()},get open(){return t(P)},set open(ke){u(P,ke,!0)}});var Je=d(Ze,2);{var at=ke=>{{let Me=c(()=>l("Apply")),Qe=c(()=>l("{count} calls will be made",{},t(ee)?.entries.length??0));$l(ke,{get preview(){return t(ee)},paramset:"VALUES",get writing(){return t(se)},get confirmLabel(){return t(Me)},get countText(){return t(Qe)},onconfirm:()=>{ve()},get open(){return t(de)},set open(ut){u(de,ut,!0)}})}};$(Je,ke=>{t(de)&&ke(at)})}var gt=d(Je,2);{var mt=ke=>{qh(ke,{get sender(){return a()},get receiver(){return a()},get open(){return t(S)},set open(Me){u(S,Me,!0)}})};$(gt,ke=>{t(S)&&ke(mt)})}v(r,Xe),ct()}yt(["click"]);const Kw="modulepreload",Yw=function(r,e){return new URL(r,e).href},Su={},qw=function(e,n,s){let a=Promise.resolve();if(n&&n.length>0){let p=function(b){return Promise.all(b.map(g=>Promise.resolve(g).then(k=>({status:"fulfilled",value:k}),k=>({status:"rejected",reason:k}))))};const o=document.getElementsByTagName("link"),l=document.querySelector("meta[property=csp-nonce]"),f=l?.nonce||l?.getAttribute("nonce");a=p(n.map(b=>{if(b=Yw(b,s),b in Su)return;Su[b]=!0;const g=b.endsWith(".css"),k=g?'[rel="stylesheet"]':"";if(s)for(let S=o.length-1;S>=0;S--){const T=o[S];if(T.href===b&&(!g||T.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${b}"]${k}`))return;const y=document.createElement("link");if(y.rel=g?"stylesheet":Kw,g||(y.as="script"),y.crossOrigin="",y.href=b,f&&y.setAttribute("nonce",f),document.head.appendChild(y),g)return new Promise((S,T)=>{y.addEventListener("load",S),y.addEventListener("error",()=>T(new Error(`Unable to preload CSS for ${b}`)))})}))}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 $w=_('<video class="hmm-qr svelte-1e4doc5" autoplay="" playsinline=""></video>',2);function Xw(r,e){dt(e,!0);let n=V(e,"active",3,!1),s=V(e,"onerror",3,void 0),a=V(e,"createReader",3,void 0),i=V(e,"insecureContextMessage",3,"The camera needs https or localhost."),o=V(e,"testId",3,void 0),l=N(void 0),f;st(()=>{if(!n()){g();return}const T=t(l);if(!T)return;if(!p()){s()?.(i());return}const I={cancelled:!1};return(async()=>{try{const D=await(a()?await a()():await b()).decodeFromVideoDevice(void 0,T,R=>{R&&e.onscan(R.getText())});I.cancelled?D.stop():f=D}catch(C){s()?.(C instanceof Error?C.message:String(C))}})(),()=>{I.cancelled=!0,g()}});function p(){return globalThis.navigator?.mediaDevices!==void 0&&globalThis.isSecureContext}async function b(){const{BrowserQRCodeReader:T}=await qw(async()=>{const{BrowserQRCodeReader:I}=await import("./index-BN6QZh6-.js");return{BrowserQRCodeReader:I}},[],import.meta.url);return new T}function g(){f?.stop(),f=void 0}bp(g);var k=St(),y=Ie(k);{var S=T=>{var I=$w();I.muted=!0,fn(I,C=>u(l,C),()=>t(l)),E(()=>x(I,"data-testid",o())),v(T,I)};$(y,T=>{n()&&T(S)})}v(r,k),ct()}var Qw=_('<button type="button" class="hmm-button"> </button>'),Zw=_('<p> </p> <button type="button" class="hmm-button" data-testid="add-device-search">searchDevices</button>',1),Jw=_("<option> </option>"),eA=_('<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),tA=_('<span class="hmm-add-error svelte-rkdrrf" data-testid="add-device-scan-error"> </span>'),nA=_('<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),rA=_('<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),sA=_('<section class="hmm-add-key-question svelte-rkdrrf" role="alert" data-testid="add-device-key-mismatch"><h4 class="svelte-rkdrrf"> </h4> <p class="svelte-rkdrrf"> </p> <button type="button" class="hmm-button" data-testid="add-device-key-retry"> </button></section>'),aA=_('<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),iA=_('<span data-testid="add-device-countdown"> </span> <button type="button" class="hmm-button" data-testid="add-device-stop"> </button>',1),oA=_('<p class="hmm-add-notice svelte-rkdrrf" role="status" data-testid="add-device-nothing-joined"> </p>'),lA=_('<label class="hmm-add-row svelte-rkdrrf"><span class="svelte-rkdrrf"> </span> <span class="svelte-rkdrrf"><input class="hmm-input hmm-add-seconds svelte-rkdrrf" type="number" min="10" max="300"/> s</span></label> <div class="hmm-add-actions svelte-rkdrrf"><button type="button" class="hmm-button" data-testid="add-device-start"> </button> <!></div> <!>',1),dA=_('<span data-testid="add-device-inbox-result"> </span>'),cA=_('<p class="hmm-add-notice svelte-rkdrrf" role="status" data-testid="add-device-names-waiting"> </p>'),uA=_('<div class="hmm-add-actions svelte-rkdrrf"><button type="button" class="hmm-button" data-testid="add-device-confirm-inbox"> </button> <!></div> <!>',1),fA=_('<label class="hmm-add-row svelte-rkdrrf"><span class="hmm-mono svelte-rkdrrf"> </span> <input class="hmm-input svelte-rkdrrf"/></label>'),hA=_('<section class="hmm-add-paired svelte-rkdrrf" data-testid="add-device-paired"><h4 class="svelte-rkdrrf"> </h4> <!> <label class="hmm-add-channels svelte-rkdrrf"><input type="checkbox" data-testid="add-device-rename-children"/> <span> </span></label> <button type="button" class="hmm-button" data-testid="add-device-name-save"> </button></section>'),mA=_("<!> <!> <!> <!>",1);function vA(r,e){dt(e,!0);let n=V(e,"open",15,!1),s=V(e,"createReader",3,void 0);const a=Ut(),i=a.i18n.t,o=1e3,l=5;let f=N(60),p=N(1),b=N(""),g=N(""),k=N("KEY"),y=N(void 0),S=N(""),T=N(""),I=N(!1),C=N(""),D=N(0),R=N(!1),P=N(Be([])),K=N(Be({})),X=N(!0),ae=N(""),ue=N(!1),fe=N(""),B,re=!1,de=N(void 0),ee=0,se=0;const Y=c(()=>a.app.selectedInterface),Z=c(()=>a.interfaces.typeOf(t(Y))),te=c(()=>!t(Z).startsWith("BidCos")&&t(Z)!=="CUxD"),xe=c(()=>t(Z)==="BidCos-Wired"),J=c(()=>t(k)==="ANY"?!0:t(k)==="SGTIN"?Wi(t(S)):Wi(t(S))&&pc(t(T))),ye=c(()=>t(y)?.keyserver_mode==="LOCAL"),Re=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(ye)?i("Pairs the next device in factory state that asks to join, if its key is on the system: the system's key mode never asks eQ-3's key server. {count} device keys are stored on the system.",{},t(y)?.device_keys??0):i("Pairs the next device in factory state that asks to join. Without a key the interface asks eQ-3's key server, so the box needs internet access unless a local key mapping is configured."));st(()=>{if(!n()||!t(te))return;let me=!0;return a.devices.hmipPairing().then(be=>{me&&u(y,be,!0)}),()=>{me=!1}}),st(()=>{t(ye)&&t(k)==="SGTIN"&&u(k,"KEY")}),st(()=>{n()||(u(I,!1),u(D,0),u(P,[],!0),u(K,{},!0),u(X,!0),u(ae,""),u(ue,!1),u(fe,""),u(g,""),F())}),st(()=>{t(k)==="ANY"&&u(I,!1)}),st(()=>{if(n())return a.transport.on("devices.changed",me=>{if(me.interfaceName!==t(Y)||me.kind!=="new")return;const be=me.addresses.filter(Ee=>!Ee.includes(":")&&!t(P).includes(Ee));be.length>0&&(u(P,[...t(P),...be],!0),u(fe,""),F())})}),st(()=>{if(!n()||t(D)<=0)return;const me=se,be=setInterval(()=>{ee+=1,a.devices.installModeSeconds(t(Y)).then(Ee=>{me===se&&(u(D,Ee,!0),Ee<=0&&(t(P).length===0&&u(ue,!0),F()))}),!t(te)&&ee%l===0&&a.devices.keyMismatchDevice(t(Y)).then(Ee=>{me===se&&Ee!==""&&ve(Ee)})},o);return()=>{clearInterval(be)}});async function ge(me){u(R,!0),u(ue,!1),u(fe,""),se+=1,ee=0;const{tempKey:be,...Ee}=me;B=Ee,be!==void 0&&(re=!0);const le=await a.devices.tryInstallMode(t(Y),!0,{seconds:t(f),...me});if(u(R,!1),le!==null){if(!t(te)&&me.address!==void 0&&await pe())return;a.notices.fromError(le,"setInstallMode");return}me.address===void 0&&u(D,t(f),!0)}async function H(){se+=1,await a.devices.setInstallMode(t(Y),!1),u(D,0),await F()}async function pe(){const me=await a.devices.keyMismatchDevice(t(Y));return me===""?!1:(await Q(me),!0)}async function ve(me){se+=1,u(D,0),await a.devices.setInstallMode(t(Y),!1),await Q(me)}async function Q(me){u(fe,me,!0),await Aa(),t(de)?.focus()}async function oe(){const me=t(g).trim();me===""||B===void 0||await ge({...B,tempKey:me})}async function F(){re&&(re=!1,await a.devices.setTempKey(t(Y),""))}async function W(){u(R,!0),await a.console.call(t(Y),"searchDevices",[""]),u(R,!1),await a.devices.load(t(Y),{refresh:!0})}function O(me){const be=Fb(me);if(!be){u(C,i("That is not a HomematicIP device code"),!0);return}u(C,""),u(S,be.sgtin,!0),be.key!==""&&u(T,be.key,!0),u(I,!1)}async function z(){u(R,!0);const me=await a.devices.confirmRegaInbox();u(R,!1),u(ae,me.length===0?i("The ReGa inbox is empty"):`${i("Confirmed")}: ${me.join(", ")}`,!0)}async function ce(){const me=t(P).flatMap(be=>Ed(be,t(K)[be]??"",a.devices.channels(t(Y),be).map(Ee=>Ee.ADDRESS),{channels:t(X)}));me.length!==0&&await a.names.rename(me)&&u(P,t(P).filter(be=>(t(K)[be]??"").trim()===""),!0)}{const me=Ee=>{var le=Qw(),G=m(le,!0);E(L=>h(G,L),[()=>i("Close")]),ne("click",le,()=>n(!1)),v(Ee,le)};let be=c(()=>i("Add device"));kn(r,{get title(){return t(be)},width:"680px",testId:"add-device-dialog",get open(){return n()},set open(Ee){n(Ee)},buttons:me,children:(Ee,le)=>{var G=mA(),L=Ie(G);{var A=Se=>{var we=Zw(),j=Ie(we),U=m(j,!0),Ne=d(j,2);E(Le=>{h(U,Le),Ne.disabled=t(R)},[()=>i("BidCos-Wired has no install mode; the interface searches its bus for new devices.")]),ne("click",Ne,()=>{W()}),v(Se,we)},M=Se=>{var we=rA(),j=Ie(we),U=w(j),Ne=m(U,!0),Le=d(U,2),ze=w(Le),_e=m(ze,!0);ze.value=ze.__value="KEY";var De=d(ze);{var Ce=Me=>{var Qe=Jw(),ut=m(Qe,!0);Qe.value=Qe.__value="SGTIN",E(bt=>h(ut,bt),[()=>i("With SGTIN only (key server)")]),v(Me,Qe)};$(De,Me=>{t(ye)||Me(Ce)})}var Fe=d(De),Oe=m(Fe,!0);Fe.value=Fe.__value="ANY",Yt(Le);var Xe=d(j,2),Ye=d(w(Xe),2),Ze=m(Ye,!0),Je=d(Xe,2),at=d(w(Je),2),gt=m(at,!0),mt=d(Je,2);{var ke=Me=>{var Qe=nA(),ut=Ie(Qe),bt=d(w(ut),2);let rt;var qt=d(ut,2);{var xt=Jt=>{var Mt=eA(),dn=Ie(Mt),Gn=d(w(dn),2);let Nn;var Sr=d(dn,2),Ur=d(w(Sr),2),Jn=m(Ur,!0);E((Un,kr)=>{Nn=Et(Gn,1,"hmm-input hmm-mono svelte-rkdrrf",null,Nn,{"hmm-add-invalid":Un}),on(Gn,t(T)),h(Jn,kr)},[()=>t(T)!==""&&!pc(t(T)),()=>i("The key from the sticker (26 characters, dashes optional), or scan the QR code.")]),ne("input",Gn,Un=>u(T,oi(Un.currentTarget.value),!0)),v(Jt,Mt)};$(qt,Jt=>{t(k)==="KEY"&&Jt(xt)})}var Lt=d(qt,2),Zt=w(Lt),_n=m(Zt,!0),gn=d(Zt,2),ln=w(gn),bn=m(ln,!0),wn=d(ln,2);{var Zn=Jt=>{var Mt=tA(),dn=m(Mt,!0);E(()=>h(dn,t(C))),v(Jt,Mt)};$(wn,Jt=>{t(C)!==""&&Jt(Zn)})}var Kn=d(Lt,2);{let Jt=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."));Xw(Kn,{get active(){return t(I)},get createReader(){return s()},get insecureContextMessage(){return t(Jt)},onscan:O,onerror:Mt=>{u(C,Mt,!0),u(I,!1)},testId:"add-device-video"})}E((Jt,Mt,dn)=>{rt=Et(bt,1,"hmm-input hmm-mono svelte-rkdrrf",null,rt,{"hmm-add-invalid":Jt}),on(bt,t(S)),h(_n,Mt),h(bn,dn)},[()=>t(S)!==""&&!Wi(t(S)),()=>i("QR scanner"),()=>t(I)?i("Stop"):i("Scan")]),ne("input",bt,Jt=>u(S,oi(Jt.currentTarget.value),!0)),ne("click",ln,()=>{u(C,""),u(I,!t(I))}),v(Me,Qe)};$(mt,Me=>{t(k)!=="ANY"&&Me(ke)})}E((Me,Qe,ut,bt)=>{h(Ne,Me),h(_e,Qe),h(Oe,ut),h(Ze,t(Re)),h(gt,bt)},[()=>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.")]),yr(Le,()=>t(k),Me=>u(k,Me)),v(Se,we)},he=Se=>{var we=aA(),j=Ie(we),U=w(j),Ne=m(U,!0),Le=d(U,2),ze=w(Le),_e=m(ze,!0);ze.value=ze.__value=1;var De=d(ze),Ce=m(De,!0);De.value=De.__value=2,Yt(Le);var Fe=d(j,2),Oe=w(Fe),Xe=m(Oe,!0),Ye=d(Oe,2),Ze=w(Ye),Je=d(Ze,2),at=m(Je,!0),gt=d(Fe,2),mt=w(gt),ke=m(mt,!0),Me=d(mt,2);fn(Me,xt=>u(de,xt),()=>t(de));var Qe=d(gt,2),ut=d(w(Qe),2),bt=m(ut,!0),rt=d(Qe,2);{var qt=xt=>{var Lt=sA(),Zt=w(Lt),_n=m(Zt,!0),gn=d(Zt,2),ln=m(gn,!0),bn=d(gn,2),wn=m(bn,!0);E((Zn,Kn,Jt,Mt)=>{h(_n,Zn),h(ln,Kn),bn.disabled=Jt,h(wn,Mt)},[()=>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(fe)}),()=>t(R)||t(g).trim()==="",()=>i("Set the key and try again")]),ne("click",bn,()=>{oe()}),v(xt,Lt)};$(rt,xt=>{t(fe)!==""&&xt(qt)})}E((xt,Lt,Zt,_n,gn,ln,bn,wn)=>{h(Ne,xt),h(_e,Lt),h(Ce,Zt),h(Xe,_n),Je.disabled=gn,h(at,ln),h(ke,bn),h(bt,wn)},[()=>i("Mode"),()=>i("Normal install mode"),()=>i("Write the MASTER defaults and delete the existing links"),()=>i("Serial number"),()=>t(R)||t(b).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.")]),yr(Le,()=>t(p),xt=>u(p,xt)),Sn(Ze,()=>t(b),xt=>u(b,xt)),ne("click",Je,()=>{ge({mode:t(p),address:t(b).trim(),...t(g).trim()===""?{}:{tempKey:t(g).trim()}})}),Sn(Me,()=>t(g),xt=>u(g,xt)),v(Se,we)};$(L,Se=>{t(xe)?Se(A):t(te)?Se(M,1):Se(he,-1)})}var Te=d(L,2);{var Pe=Se=>{var we=lA(),j=Ie(we),U=w(j),Ne=m(U,!0),Le=d(U,2),ze=w(Le),_e=d(j,2),De=w(_e),Ce=m(De,!0),Fe=d(De,2);{var Oe=Ze=>{var Je=iA(),at=Ie(Je),gt=m(at,!0),mt=d(at,2),ke=m(mt,!0);E((Me,Qe)=>{h(gt,Me),h(ke,Qe)},[()=>i("{count} seconds left",{},t(D)),()=>i("Stop")]),ne("click",mt,()=>{H()}),v(Ze,Je)};$(Fe,Ze=>{t(D)>0&&Ze(Oe)})}var Xe=d(_e,2);{var Ye=Ze=>{var Je=oA(),at=m(Je,!0);E(gt=>h(at,gt),[()=>t(te)?i("The install mode has ended and no device has joined. A device that is still paired with another central sends no inclusion request: reset it to factory state and start again."):i("The install mode has ended and no device has joined. Put the device into its pairing mode and start again. A device that holds another system's security key is reported here and that key asked for; a factory reset does not remove it.")]),v(Ze,Je)};$(Xe,Ze=>{t(ue)&&Ze(Ye)})}E((Ze,Je)=>{h(Ne,Ze),De.disabled=t(R)||t(te)&&!t(J),h(Ce,Je)},[()=>i("Duration"),()=>i("Start install mode")]),Sn(ze,()=>t(f),Ze=>u(f,Ze)),ne("click",De,()=>{ge(t(te)?t(k)==="ANY"?{hmipKeyMode:"ANY"}:{hmipKeyMode:t(k),hmipKey:{sgtin:t(S),key:t(k)==="SGTIN"?"":t(T)}}:{mode:t(p),...t(g).trim()===""?{}:{tempKey:t(g).trim()}})}),v(Se,we)};$(Te,Se=>{t(xe)||Se(Pe)})}var He=d(Te,2);{var qe=Se=>{var we=uA(),j=Ie(we),U=w(j),Ne=m(U,!0),Le=d(U,2);{var ze=Ce=>{var Fe=dA(),Oe=m(Fe,!0);E(()=>h(Oe,t(ae))),v(Ce,Fe)};$(Le,Ce=>{t(ae)!==""&&Ce(ze)})}var _e=d(j,2);{var De=Ce=>{var Fe=cA(),Oe=m(Fe,!0);E(Xe=>h(Oe,Xe),[()=>i("The names reach the CCU once the device is confirmed in the ReGa inbox.")]),v(Ce,Fe)};$(_e,Ce=>{(a.interfaces.rega.pendingNames?.length??0)>0&&Ce(De)})}E(Ce=>{U.disabled=t(R),h(Ne,Ce)},[()=>i("Confirm the ReGa inbox")]),ne("click",U,()=>{z()}),v(Se,we)};$(He,Se=>{a.interfaces.rega?.enabled===!0&&Se(qe)})}var it=d(He,2);{var tt=Se=>{var we=hA(),j=w(we),U=m(j,!0),Ne=d(j,2);je(Ne,16,()=>t(P),Oe=>Oe,(Oe,Xe)=>{var Ye=fA(),Ze=w(Ye),Je=m(Ze,!0),at=d(Ze,2);E((gt,mt)=>{h(Je,Xe),x(at,"placeholder",gt),x(at,"aria-label",mt),on(at,t(K)[Xe]??"")},[()=>i("Name"),()=>`${i("Name")} ${Xe}`]),ne("input",at,gt=>u(K,{...t(K),[Xe]:gt.currentTarget.value},!0)),v(Oe,Ye)});var Le=d(Ne,2),ze=w(Le),_e=d(ze,2),De=m(_e,!0),Ce=d(Le,2),Fe=m(Ce,!0);E((Oe,Xe,Ye)=>{h(U,Oe),h(De,Xe),h(Fe,Ye)},[()=>i("New"),()=>i("Overwrite channel names"),()=>i("Apply")]),hr(ze,()=>t(X),Oe=>u(X,Oe)),ne("click",Ce,()=>{ce()}),v(Se,we)};$(it,Se=>{t(P).length>0&&Se(tt)})}v(Ee,G)},$$slots:{buttons:!0,default:!0}})}ct()}yt(["click","input"]);const pA=10;function Ql(r,e,n){return r(e)?.enums.includes(n)===!0}function gA(r){return r.endsWith(":0")}function $h(r,e,n){if(Ql(n,r.ref,e))return"on";const s=r.channels.filter(i=>!gA(i)),a=s.filter(i=>Ql(n,i,e)).length;return a===0?"off":a===s.length?"on":"mixed"}function bA(r,e,n){let s=0,a=0;for(const i of r){const o=$h(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 _A(r,e,n){return Object.fromEntries(e.map(s=>[s,bA(r,s,n)]))}function EA(r,e){return r==="mixed"?e==="mixed"?"on":e==="on"?"off":"mixed":e==="on"?"off":"on"}function yA(r,e,n){return r.filter(s=>{const a=n[s];return a!==void 0&&a!=="mixed"&&a!==(e[s]??"off")})}function SA(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){$h(f,i,s)!=="on"&&l.add(f.ref);continue}for(const p of[f.ref,...f.channels])Ql(s,p,i)&&l.add(p)}l.size>0&&a.push({path:i,on:o,refs:[...l]})}return a}function ku(r){return r.normalize("NFD").replace(/\p{M}/gu,"").toLocaleLowerCase()}function kA(r,e){const n=ku(e.trim());if(n==="")return[...r];const s=r.filter(a=>ku(a.label).includes(n));return r.filter(a=>s.includes(a)||s.some(i=>i.path.startsWith(`${a.path}/`)))}var wA=_('<input type="text" class="hmm-input hmm-assign-filter svelte-2lvopk"/>'),AA=_('<span class="hmm-assign-error svelte-2lvopk" data-testid="assign-error"> </span>'),TA=_('<label data-testid="assign-row"><input type="checkbox" data-testid="assign-check" class="svelte-2lvopk"/> <span class="hmm-assign-name svelte-2lvopk"> </span> <!></label>'),RA=_('<p class="hmm-assign-empty svelte-2lvopk"> </p>'),xA=_('<input type="text" class="hmm-input svelte-2lvopk"/> <button type="button" class="hmm-button"> </button>',1),IA=_('<button type="button" class="hmm-button"> </button>'),DA=_('<section class="hmm-assign-side svelte-2lvopk"><h3 class="hmm-assign-heading svelte-2lvopk"> </h3> <!> <div class="hmm-assign-list svelte-2lvopk" role="group"></div> <div class="hmm-assign-new svelte-2lvopk"><!></div></section>');function wu(r,e){dt(e,!0);let n=V(e,"desired",15),s=V(e,"failures",15);const a=Ut(),i=a.i18n.t,o=a.taxonomy;let l=N(""),f=N(!1),p=N(""),b=N(!1),g=N(void 0),k=N(void 0),y=N(void 0),S=N(void 0);const T=c(()=>o.options(e.enumId)),I=c(()=>kA(t(T),t(l))),C=c(()=>t(T).length>pA),D=c(()=>e.enumId==="room");function R(){u(l,""),u(S,void 0),u(f,!1),u(p,"")}function P(){if(t(k)!==void 0){t(k).focus();return}t(g)?.querySelector('input[type="checkbox"]')?.focus()}function K(Q){return n()[Q]??e.initial[Q]??"off"}function X(Q,oe){const F=W=>{Q.checked=W==="on",Q.indeterminate=W==="mixed"};return F(oe),{update:F}}function ae(Q,oe){const F=EA(e.initial[Q]??"off",K(Q));n({...n(),[Q]:F}),s()[Q]!==void 0&&s(Object.fromEntries(Object.entries(s()).filter(([W])=>W!==Q))),oe.checked=F==="on",oe.indeterminate=F==="mixed"}function ue(Q){Q.key==="Enter"&&(Q.preventDefault(),e.onsave())}function fe(Q){t(S)===void 0&&t(g)!==void 0&&t(g).offsetHeight>0&&u(S,t(g).offsetHeight,!0),u(l,Q.currentTarget.value,!0)}function B(Q){Q.key==="Enter"&&(Q.preventDefault(),t(g)?.querySelector('input[type="checkbox"]')?.focus())}async function re(){u(f,!0),await Aa(),t(y)?.focus()}async function de(){const Q=t(p).trim();if(Q===""||t(b))return;u(b,!0);const oe=await o.createNode(e.enumId,void 0,Q);u(b,!1),oe!==void 0&&(n({...n(),[oe]:"on"}),u(p,""),u(f,!1),await Aa(),t(g)?.querySelector(`[data-path="${CSS.escape(oe)}"] input`)?.focus())}function ee(Q){Q.key==="Enter"&&(Q.preventDefault(),de())}var se={reset:R,focus:P},Y=DA(),Z=w(Y),te=m(Z,!0),xe=d(Z,2);{var J=Q=>{var oe=wA();fn(oe,F=>u(k,F),()=>t(k)),E((F,W)=>{on(oe,t(l)),x(oe,"placeholder",F),x(oe,"aria-label",W),x(oe,"data-testid",`assign-filter-${e.enumId}`)},[()=>t(D)?i("Filter rooms"):i("Filter functions"),()=>t(D)?i("Filter rooms"):i("Filter functions")]),ne("input",oe,fe),ne("keydown",oe,B),v(Q,oe)};$(xe,Q=>{t(C)&&Q(J)})}var ye=d(xe,2);let Re;je(ye,21,()=>t(I),Q=>Q.path,(Q,oe)=>{const F=c(()=>K(t(oe).path)),W=c(()=>s()[t(oe).path]);var O=TA();let z,ce;var me=w(O);Ff(me,(L,A)=>X?.(L,A),()=>t(F));var be=d(me,2),Ee=m(be,!0),le=d(be,2);{var G=L=>{var A=AA(),M=m(A,!0);E(he=>h(M,he),[()=>i("Not saved: {message}",{message:t(W)})]),v(L,A)};$(le,L=>{t(W)!==void 0&&L(G)})}E(L=>{z=Et(O,1,"hmm-assign-row svelte-2lvopk",null,z,{"hmm-assign-row-failed":t(W)!==void 0}),x(O,"data-path",t(oe).path),x(O,"data-state",t(F)),ce=On(O,"",ce,{"padding-inline-start":L}),me.disabled=e.saving,h(Ee,t(oe).label)},[()=>`${String(6+(t(oe).depth-1)*18)}px`]),ne("change",me,L=>ae(t(oe).path,L.currentTarget)),ne("keydown",me,ue),v(Q,O)},Q=>{var oe=RA(),F=m(oe,!0);E(W=>{x(oe,"data-testid",`assign-empty-${e.enumId}`),h(F,W)},[()=>t(T).length>0?i("No match"):t(D)?i("No rooms yet"):i("No functions yet")]),v(Q,oe)}),fn(ye,Q=>u(g,Q),()=>t(g));var ge=d(ye,2),H=w(ge);{var pe=Q=>{var oe=xA(),F=Ie(oe);fn(F,z=>u(y,z),()=>t(y));var W=d(F,2),O=m(W,!0);E((z,ce,me,be)=>{x(F,"aria-label",z),x(F,"placeholder",ce),F.disabled=t(b),x(F,"data-testid",`assign-new-name-${e.enumId}`),W.disabled=me,x(W,"data-testid",`assign-create-${e.enumId}`),h(O,be)},[()=>t(D)?i("Name of the new room"):i("Name of the new function"),()=>t(D)?i("Name of the new room"):i("Name of the new function"),()=>t(b)||t(p).trim()==="",()=>i("Create")]),ne("keydown",F,ee),Sn(F,()=>t(p),z=>u(p,z)),ne("click",W,()=>{de()}),v(Q,oe)},ve=Q=>{var oe=IA(),F=m(oe,!0);E(W=>{x(oe,"data-testid",`assign-new-${e.enumId}`),h(F,W)},[()=>t(D)?i("New room…"):i("New function…")]),ne("click",oe,()=>{re()}),v(Q,oe)};$(H,Q=>{t(f)?Q(pe):Q(ve,-1)})}return E((Q,oe,F,W)=>{x(Y,"aria-label",Q),x(Y,"data-testid",`assign-side-${e.enumId}`),h(te,oe),x(ye,"aria-label",F),x(ye,"data-testid",`assign-list-${e.enumId}`),Re=On(ye,"",Re,{"min-height":W})},[()=>t(D)?i("Rooms"):i("Functions"),()=>t(D)?i("Rooms"):i("Functions"),()=>t(D)?i("Rooms"):i("Functions"),()=>t(S)===void 0?void 0:`${String(t(S))}px`]),v(r,Y),ct(se)}yt(["input","keydown","change","click"]);var NA=_('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="assign-apply"> </button>',1),CA=_('<p class="hmm-assign-address svelte-17ogdox" data-testid="assign-address"> </p>'),PA=_('<label class="hmm-assign-children svelte-17ogdox"><input type="checkbox" data-testid="assign-rename-children"/> <span> </span></label>'),MA=_('<p class="hmm-assign-summary hmm-assign-name-error svelte-17ogdox" role="alert" data-testid="assign-name-error"> </p>'),OA=_('<div class="hmm-assign-name-row svelte-17ogdox"><label class="hmm-assign-name-field svelte-17ogdox"><span> </span> <input class="hmm-input svelte-17ogdox" data-testid="assign-name"/></label> <!></div> <!>',1),LA=_('<p class="hmm-assign-summary svelte-17ogdox" role="alert" data-testid="assign-summary"> </p>'),FA=_('<!> <!> <p class="hmm-assign-count svelte-17ogdox" data-testid="assign-count"> </p> <div class="hmm-assign-sides svelte-17ogdox"><!> <!></div> <!>',1);function GA(r,e){dt(e,!0);const n=["room","function"];let s=V(e,"open",15,!1),a=V(e,"targets",19,()=>[]),i=V(e,"address",3,""),o=V(e,"canRename",3,!1),l=V(e,"focus",3,"room");const f=Ut(),p=f.i18n.t,b=f.taxonomy,g=()=>({room:{},function:{}});let k=N(Be(g())),y=N(Be(g())),S=N(Be({room:{},function:{}})),T=N(""),I=N(!0),C=N(!1),D=N(!1),R=N(void 0),P=N(void 0),K=N(void 0),X=!1;const ae=c(()=>i()!==""&&o()),ue=c(()=>i()!==""&&As(i())),fe=c(()=>t(ue)?f.devices.channels(f.app.selectedInterface,i()).map(J=>J.ADDRESS):[]),B=c(()=>n.reduce((J,ye)=>J+Object.keys(t(S)[ye]).length,0)),re=J=>b.view(J);function de(J){return b.options(J).map(ye=>ye.path)}function ee(J){const ye=de(J);return[...ye,...Object.keys(t(y)[J]).filter(Re=>!ye.includes(Re))]}function se(J,ye){return t(y)[J][ye]??t(k)[J][ye]??"off"}st(()=>{s()&&!X&&Er(()=>{const J=g();for(const ye of n)J[ye]=_A(a(),de(ye),re);u(k,J,!0),u(y,{room:{...J.room},function:{...J.function}},!0),u(S,{room:{},function:{}},!0),u(T,i()===""?"":f.names.name(i())??"",!0),u(I,!0),u(C,!1),t(P)?.reset(),t(K)?.reset(),Y()}),X=s()});async function Y(){if(await Aa(),l()==="name"&&t(ae)){t(R)?.focus();return}(l()==="function"?t(K):t(P))?.focus()}function Z(){const J=t(T).trim();return!t(ae)||J===""||J===(f.names.name(i())??"")?[]:Ed(i(),J,t(fe),{channels:t(I)})}async function te(){if(!t(D)){u(D,!0);try{const J=Z(),ye=J.length===0?!0:await f.names.rename(J);u(C,!ye);const Re={room:[],function:[]},ge=[];for(const Q of n)Re[Q]=yA(ee(Q),t(k)[Q],t(y)[Q]),ge.push(...SA(a(),Re[Q],t(y)[Q],re));const H=ge.length===0?[]:await b.assignEach(ge),pe={room:{...t(k).room},function:{...t(k).function}},ve={room:{},function:{}};for(const Q of n)for(const oe of Re[Q]){const F=H.find(W=>W.path===oe);F!==void 0&&!F.ok?ve[Q][oe]=F.message:pe[Q][oe]=se(Q,oe)}u(k,pe,!0),u(S,ve,!0),ye&&n.every(Q=>Object.keys(ve[Q]).length===0)&&s(!1)}finally{u(D,!1)}}}function xe(J){J.key==="Enter"&&(J.preventDefault(),te())}{const J=H=>{var pe=NA(),ve=Ie(pe),Q=m(ve,!0),oe=d(ve,2),F=m(oe,!0);E((W,O)=>{ve.disabled=t(D),h(Q,W),oe.disabled=t(D)||a().length===0,h(F,O)},[()=>p("Cancel"),()=>p("Apply")]),ne("click",ve,()=>s(!1)),ne("click",oe,()=>{te()}),v(H,pe)};let ye=c(()=>p("Rooms and functions")),Re=c(()=>!t(D)),ge=c(()=>p("Close"));kn(r,{get title(){return t(ye)},width:"760px",minWidth:320,get closable(){return t(Re)},get closeLabel(){return t(ge)},testId:"assign-dialog",get open(){return s()},set open(H){s(H)},buttons:J,children:(H,pe)=>{var ve=FA(),Q=Ie(ve);{var oe=G=>{var L=CA(),A=m(L,!0);E(()=>h(A,i())),v(G,L)};$(Q,G=>{i()!==""&&G(oe)})}var F=d(Q,2);{var W=G=>{var L=OA(),A=Ie(L),M=w(A),he=w(M),Te=m(he,!0),Pe=d(he,2);fn(Pe,Se=>u(R,Se),()=>t(R));var He=d(M,2);{var qe=Se=>{var we=PA(),j=w(we),U=d(j,2),Ne=m(U,!0);E(Le=>{j.disabled=t(D),h(Ne,Le)},[()=>p("Overwrite channel names")]),hr(j,()=>t(I),Le=>u(I,Le)),v(Se,we)};$(He,Se=>{t(ue)&&Se(qe)})}var it=d(A,2);{var tt=Se=>{var we=MA(),j=m(we,!0);E(U=>h(j,U),[()=>p("The name was not saved")]),v(Se,we)};$(it,Se=>{t(C)&&Se(tt)})}E(Se=>{h(Te,Se),Pe.disabled=t(D)},[()=>p("Name")]),ne("keydown",Pe,xe),Sn(Pe,()=>t(T),Se=>u(T,Se)),v(G,L)};$(F,G=>{t(ae)&&G(W)})}var O=d(F,2),z=m(O,!0),ce=d(O,2),me=w(ce);fn(wu(me,{enumId:"room",get initial(){return t(k).room},get saving(){return t(D)},onsave:()=>{te()},get desired(){return t(y).room},set desired(G){t(y).room=G},get failures(){return t(S).room},set failures(G){t(S).room=G}}),G=>u(P,G,!0),()=>t(P));var be=d(me,2);fn(wu(be,{enumId:"function",get initial(){return t(k).function},get saving(){return t(D)},onsave:()=>{te()},get desired(){return t(y).function},set desired(G){t(y).function=G},get failures(){return t(S).function},set failures(G){t(S).function=G}}),G=>u(K,G,!0),()=>t(K));var Ee=d(ce,2);{var le=G=>{var L=LA(),A=m(L,!0);E(M=>h(A,M),[()=>p("{count} changes were not saved",{},t(B))]),v(G,L)};$(Ee,G=>{t(B)>0&&G(le)})}E(G=>h(z,G),[()=>p("{count} rows selected",{},a().length)]),v(H,ve)},$$slots:{buttons:!0,default:!0}})}ct()}yt(["click","keydown"]);var UA=_('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button hmm-danger svelte-y0v77l" data-testid="delete-device-confirm"> </button>',1),BA=_('<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 VA(r,e){dt(e,!0);let n=V(e,"open",15,!1),s=V(e,"address",3,"");const a=Ut(),i=a.i18n.t;let o=N(1),l=N(4),f=N(!1);const p=c(()=>t(o)+t(l)),b=c(()=>a.names.nameOf(s()));st(()=>{n()&&(u(o,1),u(l,4))});async function g(){u(f,!0);const k=await a.devices.remove(a.app.selectedInterface,s(),t(p));u(f,!1),k&&n(!1)}{const k=S=>{var T=UA(),I=Ie(T),C=m(I,!0),D=d(I,2),R=m(D,!0);E((P,K)=>{h(C,P),D.disabled=t(f),h(R,K)},[()=>i("Cancel"),()=>i("Delete")]),ne("click",I,()=>n(!1)),ne("click",D,()=>{g()}),v(S,T)};let y=c(()=>i("Delete device"));kn(r,{get title(){return t(y)},width:"560px",testId:"delete-device-dialog",get open(){return n()},set open(S){n(S)},buttons:k,children:(S,T)=>{var I=BA(),C=Ie(I),D=m(C,!0),R=d(C,2),P=m(R,!0),K=d(R,2),X=w(K),ae=m(X,!0);X.value=X.__value=1;var ue=d(X),fe=m(ue,!0);ue.value=ue.__value=0,Yt(K);var B=d(K,2),re=m(B,!0),de=d(B,2),ee=w(de),se=m(ee,!0);ee.value=ee.__value=4;var Y=d(ee),Z=m(Y,!0);Y.value=Y.__value=2,Yt(de);var te=d(de,2),xe=m(te);E((J,ye,Re,ge,H,pe,ve,Q)=>{h(D,J),h(P,s()),x(K,"aria-label",ye),h(ae,Re),h(fe,ge),h(re,H),x(de,"aria-label",pe),h(se,ve),h(Z,Q),h(xe,`FLAGS = ${t(p)??""}`)},[()=>i("Do you really want to delete the device {name}?",{name:t(b)}),()=>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")]),yr(K,()=>t(o),J=>u(o,J)),yr(de,()=>t(l),J=>u(l,J)),v(S,I)},$$slots:{buttons:!0,default:!0}})}ct()}yt(["click"]);var HA=_('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="rename-save"> </button>',1),zA=_('<label class="hmm-rename-children svelte-111tkcw"><input type="checkbox" data-testid="rename-children"/> <span> </span></label>'),jA=_('<p class="hmm-rename-address svelte-111tkcw"> </p> <input class="hmm-input hmm-rename-input svelte-111tkcw" data-testid="rename-input"/> <!>',1);function WA(r,e){dt(e,!0);let n=V(e,"open",15,!1),s=V(e,"address",3,"");const a=Ut(),i=a.i18n.t;let o=N(""),l=N(!0),f=N(!1);const p=c(()=>s()!==""&&As(s())),b=c(()=>t(p)?a.devices.channels(a.app.selectedInterface,s()).map(y=>y.ADDRESS):[]);st(()=>{n()&&(u(o,a.names.name(s())??"",!0),u(l,!0))});const g=c(()=>Ed(s(),t(o),t(b),{channels:t(l)}));async function k(){const y=t(g);if(y.length===0)return;u(f,!0);const S=await a.names.rename(y);u(f,!1),S&&n(!1)}{const y=T=>{var I=HA(),C=Ie(I),D=m(C,!0),R=d(C,2),P=m(R,!0);E((K,X)=>{h(D,K),R.disabled=t(f)||t(g).length===0,h(P,X)},[()=>i("Cancel"),()=>i("Apply")]),ne("click",C,()=>n(!1)),ne("click",R,()=>{k()}),v(T,I)};let S=c(()=>i("Rename"));kn(r,{get title(){return t(S)},width:"520px",testId:"rename-dialog",get open(){return n()},set open(T){n(T)},buttons:y,children:(T,I)=>{var C=jA(),D=Ie(C),R=m(D,!0),P=d(D,2),K=d(P,2);{var X=ae=>{var ue=zA(),fe=w(ue),B=d(fe,2),re=m(B,!0);E(de=>h(re,de),[()=>i("Overwrite channel names")]),hr(fe,()=>t(l),de=>u(l,de)),v(ae,ue)};$(K,ae=>{t(p)&&ae(X)})}E(ae=>{h(R,s()),x(P,"aria-label",ae)},[()=>i("Name")]),ne("keydown",P,ae=>{ae.key==="Enter"&&k()}),Sn(P,()=>t(o),ae=>u(o,ae)),v(T,C)},$$slots:{buttons:!0,default:!0}})}ct()}yt(["click","keydown"]);var KA=_('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="repair-confirm"> </button>',1),YA=_('<p class="hmm-repair-note svelte-g84sn7" data-testid="repair-bidcos-note"> </p>'),qA=_("<p> </p>"),$A=_('<p data-testid="repair-failed"> </p>'),XA=_('→ <span class="hmm-mono" data-testid="repair-pending-after"> </span>',1),QA=_('<li class="hmm-mono"> </li>'),ZA=_('<div class="hmm-repair-unrepairable svelte-g84sn7" data-testid="repair-unrepairable"><p> </p> <ul class="svelte-g84sn7"></ul></div>'),JA=_('<tr><td class="hmm-mono svelte-g84sn7"> </td><td class="hmm-mono svelte-g84sn7"> </td><td class="svelte-g84sn7"> </td><td class="svelte-g84sn7"> </td><td class="svelte-g84sn7"> </td></tr>'),eT=_('<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>'),tT=_('<p data-testid="repair-nothing"> </p>'),nT=_('<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>'),rT=_('<li><span class="hmm-mono"> </span> </li>'),sT=_('<ul class="hmm-repair-results svelte-g84sn7" data-testid="repair-results"></ul>'),aT=_('<p>CONFIG_PENDING: <span class="hmm-mono"> </span> <!></p> <!> <!> <!> <!>',1),iT=_('<p class="hmm-repair-address svelte-g84sn7"> <span class="hmm-mono"> </span></p> <!> <!>',1);function oT(r,e){dt(e,!0);let n=V(e,"open",15,!1),s=V(e,"address",3,"");const a=Ut(),i=a.i18n.t;let o=N(void 0),l=N(void 0),f=N(!1),p=N(!1),b=N("none"),g=0;const k=c(()=>a.app.selectedInterface),y=c(()=>!a.interfaces.typeOf(t(k)).startsWith("BidCos")),S=c(()=>t(l)??t(o)),T=c(()=>t(S)?.channels.flatMap(C=>C.corrected.map(D=>({channel:C,c:D})))??[]);st(()=>{if(!n()||s()===""||t(k)==="")return;const C=g+=1;u(f,!0),u(l,void 0),u(b,"none"),a.devices.repairConfig(t(k),s(),{dryRun:!0}).then(D=>{C===g&&(u(o,D,!0),u(f,!1))})});async function I(){u(p,!0),u(l,await a.devices.repairConfig(t(k),s(),{...t(y)||t(b)==="none"?{}:{bidcosRecovery:t(b)}}),!0),u(p,!1),t(l)&&(await a.devices.load(t(k),{refresh:!0}),await a.serviceMessages.load())}{const C=R=>{var P=KA(),K=Ie(P),X=m(K,!0),ae=d(K,2),ue=m(ae,!0);E((fe,B)=>{h(X,fe),ae.disabled=t(p)||t(S)===void 0||t(l)!==void 0,h(ue,B)},[()=>i("Close"),()=>i("Repair configuration")]),ne("click",K,()=>n(!1)),ne("click",ae,()=>{I()}),v(R,P)};let D=c(()=>i("Repair configuration"));kn(r,{get title(){return t(D)},width:"720px",testId:"repair-dialog",get open(){return n()},set open(R){n(R)},buttons:C,children:(R,P)=>{var K=iT(),X=Ie(K),ae=w(X),ue=d(ae),fe=m(ue,!0),B=d(X,2);{var re=Z=>{var te=YA(),xe=m(te,!0);E(J=>h(xe,J),[()=>i("On BidCos a pending configuration is normal: it is queued and the device takes it when it next wakes up.")]),v(Z,te)};$(B,Z=>{t(y)||Z(re)})}var de=d(B,2);{var ee=Z=>{var te=qA(),xe=m(te,!0);E(J=>h(xe,J),[()=>i("Loading Homematic Manager...")]),v(Z,te)},se=Z=>{var te=$A(),xe=m(te,!0);E(J=>h(xe,J),[()=>i("No data")]),v(Z,te)},Y=Z=>{var te=aT(),xe=Ie(te),J=d(w(xe)),ye=m(J,!0),Re=d(J,2);{var ge=ce=>{var me=XA(),be=d(Ie(me)),Ee=m(be,!0);E(le=>h(Ee,le),[()=>String(t(l).configPendingAfter??"—")]),v(ce,me)};$(Re,ce=>{t(l)&&ce(ge)})}var H=d(xe,2);{var pe=ce=>{var me=ZA(),be=w(me),Ee=m(be,!0),le=d(be,2);je(le,20,()=>t(S).unrepairable,G=>G,(G,L)=>{var A=QA(),M=m(A,!0);E(()=>h(M,L)),v(G,A)}),E(G=>h(Ee,G),[()=>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,me)};$(H,ce=>{t(S).unrepairable.length>0&&ce(pe)})}var ve=d(H,2);{var Q=ce=>{var me=eT(),be=w(me),Ee=w(be),le=w(Ee),G=m(le,!0),L=d(le),A=m(L,!0),M=d(L),he=m(M,!0),Te=d(M),Pe=m(Te,!0),He=d(Te),qe=m(He,!0),it=d(be);je(it,21,()=>t(T),tt=>`${tt.channel.address}-${tt.c.parameter}`,(tt,Se)=>{var we=JA(),j=w(we),U=m(j,!0),Ne=d(j),Le=m(Ne,!0),ze=d(Ne),_e=m(ze,!0),De=d(ze),Ce=m(De,!0),Fe=d(De),Oe=m(Fe,!0);E((Xe,Ye)=>{h(U,t(Se).channel.address),h(Le,t(Se).c.parameter),h(_e,Xe),h(Ce,Ye),h(Oe,t(Se).c.reason)},[()=>Na(t(Se).c.stored,void 0),()=>Na(t(Se).c.replacement,void 0)]),v(tt,we)}),E((tt,Se,we,j,U)=>{h(G,tt),h(A,Se),h(he,we),h(Pe,j),h(qe,U)},[()=>i("Channel"),()=>i("Parameter"),()=>i("Current value"),()=>i("New value"),()=>i("Message")]),v(ce,me)},oe=ce=>{var me=tT(),be=m(me,!0);E(Ee=>h(be,Ee),[()=>i("Nothing has to be corrected")]),v(ce,me)};$(ve,ce=>{t(T).length>0?ce(Q):ce(oe,-1)})}var F=d(ve,2);{var W=ce=>{var me=nT(),be=w(me),Ee=m(be,!0),le=d(be,2),G=w(le);G.value=G.__value="none";var L=d(G);L.value=L.__value="clearConfigCache";var A=d(L);A.value=A.__value="restoreConfigToDevice",Yt(le),E(M=>h(Ee,M),[()=>i("Additional BidCos recovery")]),yr(le,()=>t(b),M=>u(b,M)),v(ce,me)};$(F,ce=>{t(y)||ce(W)})}var O=d(F,2);{var z=ce=>{var me=sT();je(me,21,()=>t(l).channels,be=>be.address,(be,Ee)=>{var le=rT();let G;var L=w(le),A=m(L,!0),M=d(L);E(()=>{G=Et(le,1,"svelte-g84sn7",null,G,{"hmm-repair-failed":!t(Ee).write.ok}),h(A,t(Ee).address),h(M,` ${t(Ee).write.ok?"✔":`✕ ${t(Ee).write.faultString??""}`}`)}),v(be,le)}),v(ce,me)};$(O,ce=>{t(l)&&ce(z)})}E(ce=>h(ye,ce),[()=>String(t(S).configPendingBefore??"—")]),v(Z,te)};$(de,Z=>{t(f)?Z(ee):t(S)?Z(Y,-1):Z(se,1)})}E(Z=>{h(ae,`${Z??""} `),h(fe,s())},[()=>a.nameOf(s())]),v(R,K)},$$slots:{buttons:!0,default:!0}})}ct()}yt(["click"]);var lT=_('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="replace-device-confirm"> </button>',1),dT=_("<p> </p>"),cT=_('<p data-testid="replace-none"> </p>'),uT=_("<option> </option>"),fT=_('<select class="hmm-select hmm-replace-select svelte-novg4s"></select>'),hT=_('<h4 class="svelte-novg4s"> </h4> <p class="hmm-replace-new svelte-novg4s"> <span class="hmm-mono"> </span></p> <!>',1);function mT(r,e){dt(e,!0);let n=V(e,"open",15,!1),s=V(e,"address",3,"");const a=Ut(),i=a.i18n.t;let o=N(Be([])),l=N(""),f=N(!1),p=N(!1);const b=c(()=>t(o).filter(k=>!k.ADDRESS.includes(":")));st(()=>{if(!n()||s()==="")return;const k=s();u(f,!0),u(l,""),a.devices.replaceable(a.app.selectedInterface,k).then(y=>{u(o,y,!0),u(l,y.find(S=>!S.ADDRESS.includes(":"))?.ADDRESS??"",!0),u(f,!1)})});async function g(){u(p,!0);const k=await a.devices.replace(a.app.selectedInterface,t(l),s());u(p,!1),k&&n(!1)}{const k=S=>{var T=lT(),I=Ie(T),C=m(I,!0),D=d(I,2),R=m(D,!0);E((P,K)=>{h(C,P),D.disabled=t(p)||t(l)==="",h(R,K)},[()=>i("Cancel"),()=>i("Replace")]),ne("click",I,()=>n(!1)),ne("click",D,()=>{g()}),v(S,T)};let y=c(()=>i("Replace device"));kn(r,{get title(){return t(y)},width:"560px",testId:"replace-device-dialog",get open(){return n()},set open(S){n(S)},buttons:k,children:(S,T)=>{var I=hT(),C=Ie(I),D=m(C,!0),R=d(C,2),P=w(R),K=d(P),X=m(K,!0),ae=d(R,2);{var ue=re=>{var de=dT(),ee=m(de,!0);E(se=>h(ee,se),[()=>i("Loading Homematic Manager...")]),v(re,de)},fe=re=>{var de=cT(),ee=m(de,!0);E(se=>h(ee,se),[()=>i("No suitable device available")]),v(re,de)},B=re=>{var de=fT();je(de,21,()=>t(b),ee=>ee.ADDRESS,(ee,se)=>{var Y=uT(),Z=m(Y),te={};E(xe=>{h(Z,`${xe??""} (${t(se).ADDRESS??""})`),te!==(te=t(se).ADDRESS)&&(Y.value=(Y.__value=te)??"")},[()=>a.nameOf(t(se).ADDRESS)]),v(ee,Y)}),Yt(de),E(ee=>x(de,"aria-label",ee),[()=>i("Replace device")]),yr(de,()=>t(l),ee=>u(l,ee)),v(re,de)};$(ae,re=>{t(f)?re(ue):t(b).length===0?re(fe,1):re(B,-1)})}E((re,de)=>{h(D,re),h(P,`${de??""}: `),h(X,s())},[()=>i("Which device do you want to replace?"),()=>i("New device")]),v(S,I)},$$slots:{buttons:!0,default:!0}})}ct()}yt(["click"]);var vT=_("<!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!>",1),Au=_("<option> </option>"),pT=_('<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),gT=_('<button type="button" class="hmm-inline-button hmm-inline-button-first svelte-1fmr35a">✎</button> <span> </span>',1),bT=_('<button type="button" class="hmm-inline-button svelte-1fmr35a">⚒</button>'),_T=_('<span role="img"> </span> <!>',1),Tu=_('<span class="hmm-firmware-status svelte-1fmr35a"> </span>'),Ru=_('<button type="button" class="hmm-inline-button svelte-1fmr35a"> </button>'),xu=_("<span> </span> <!>",1),ET=_("<span></span>"),yT=_('<span title="AES_ACTIVE" aria-label="AES_ACTIVE" role="img">🔑</span>'),ST=_('<span class="hmm-roaming svelte-1fmr35a" title="ROAMING" aria-label="ROAMING" role="img">⇄</span>'),kT=_('<div class="hmm-page svelte-1fmr35a"><div class="hmm-page-grid svelte-1fmr35a"><!></div></div> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!>',1);function wT(r,e){dt(e,!0);const n=Ut(),s=n.i18n.t,a=1e4;let i=N(Be([])),o=N(Be([])),l=N(!1),f=N(0),p=N(0),b=N(""),g=N(!1),k=N(!1),y=N(!1),S=N(!1),T=N(!1),I=N(""),C=N(!1),D=N(Be([])),R=N(Be([])),P=N(!1),K=N(!1),X=N(""),ae=N(void 0),ue=N(!1),fe=N(""),B=N("MASTER"),re=N(!1),de=N("room"),ee=N(Be([])),se=N(""),Y=N(""),Z=N("");const te=c(()=>n.app.selectedInterface),xe=c(()=>n.interfaces.typeOf(t(te))),J=c(()=>n.devices.index(t(te))),ye=c(()=>ci(t(te),t(xe))),Re=c(()=>t(ye)&&t(J)!==void 0?t(J).channels().filter(ie=>th(ie)).map(ie=>ie.ADDRESS):[]);st(()=>{if(t(te)===""||t(J)===void 0||!t(ye))return;const ie=t(te),Ge=t(Re);Er(()=>{n.smokeGroups.sync(ie,Ge)})});const ge=c(()=>n.smokeGroups.of(t(te))),H=c(()=>t(J)===void 0?[]:[...Ib(t(J)),...t(ye)?Db(t(ge)):[]]),pe=c(()=>Object.fromEntries(t(H).map(ie=>[ie.address,ie]))),ve=c(()=>t(H).filter(ie=>ie.kind==="hmip").map(ie=>Cb(ie.number??0))),Q=c(()=>Nb(t(ge)));function oe(ie){return ie in t(pe)}function F(ie){return(t(pe)[ie]?.members??[]).map(Ge=>t(J)?.get(Ge)).filter(Ge=>Ge!==void 0)}function W(ie){const Ge=[],$t=t(J)===void 0?void 0:nh(t(J),ie);$t!==void 0&&Ge.push(n.nameOf($t));for(const hn of t(ge)[ie]??[])Ge.push(s("Smoke group {n}",{n:hn}));return Ge}function O(ie){const Ge=t(pe)[ie.ADDRESS];if(Ge!==void 0)return s("{count} detectors",{},Ge.members.length);const $t=As(ie.ADDRESS)?n.devices.channels(t(te),ie.ADDRESS).map(hn=>hn.ADDRESS):[ie.ADDRESS];return[...new Set($t.flatMap(hn=>W(hn)))].join(", ")}function z(ie){const Ge=t(pe)[ie]?.number;return Zs(ie)&&Ge!==void 0?s("Smoke group {n}",{n:Ge}):n.nameOf(ie)}function ce(ie){if(!Zs(ie.ADDRESS))return Qo(ie.ADDRESS,t(M));const Ge={};for(const $t of F(ie.ADDRESS))for(const hn of Qo(xa($t.ADDRESS),t(M),99))Ge[hn.datapoint]=hn;return Object.values(Ge)}function me(ie){return F(ie)[0]?.PARENT_TYPE??"HmIP-SWSD"}function be(ie){u(ae,void 0),u(X,ie,!0),u(K,!0)}function Ee(){t(Q)!==void 0&&(u(ae,{address:kd(t(Q)),kind:"hmip",number:t(Q),members:[]},!0),u(X,""),u(K,!0))}const le=c(()=>t(ae)??(t(X)===""?void 0:t(pe)[t(X)])),G=c(()=>t(ye)&&t(Re).length>0&&t(Q)!==void 0),L=c(()=>t(ye)?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")),A=c(()=>[...t(ve),...n.devices.devices(t(te))]),M=c(()=>n.serviceMessages.of(t(te))),he=c(()=>n.radio.gateways(t(te)));st(()=>{t(xe)==="BidCos-RF"&&n.radio.ensureGateways(t(te))}),st(()=>{t(te),u(i,[],!0),u(o,[],!0),u(Y,""),u(Z,"")});const Te=c(()=>n.taxonomy),Pe=c(()=>t(Te).options("room")),He=c(()=>t(Te).options("function")),qe=c(()=>[t(Y),t(Z)].filter(ie=>ie!==""));st(()=>{t(Y)!==""&&!t(Pe).some(ie=>ie.path===t(Y))&&u(Y,""),t(Z)!==""&&!t(He).some(ie=>ie.path===t(Z))&&u(Z,"")});function it(ie){return t(Te).refOf(t(te),ie)}function tt(ie){return t(Te).view(it(ie))}function Se(ie){return n.devices.channels(t(te),ie.ADDRESS).map(Ge=>tt(Ge.ADDRESS))}function we(ie,Ge){return(As(ie.ADDRESS)?pS(tt(ie.ADDRESS),Se(ie),Ge):Kl(tt(ie.ADDRESS),Ge)).join(", ")}const j=c(()=>t(qe).length===0?t(A):t(A).filter(ie=>t(qe).every(Ge=>Zs(ie.ADDRESS)?F(ie.ADDRESS).some($t=>U($t,Ge)):Gh(tt(ie.ADDRESS),Se(ie),Ge))));function U(ie,Ge){return ru(tt(ie.ADDRESS),tt(xa(ie.ADDRESS)),Ge)}st(()=>{t(te)!==""&&n.links.ensure(t(te))});const Ne=c(()=>n.devices.isLoading(t(te))?s("Loading Homematic Manager..."):n.devices.hasFailed(t(te))?s("The device list could not be read - press Refresh to try again"):t(J)===void 0?s("Loading Homematic Manager..."):t(A).length>0?s("No device matches the room or function filter"):s("No devices - the interface has not reported any yet")),Le=c(()=>t(i).length===1?t(i)[0]??"":""),ze=c(()=>t(Le)!==""&&As(t(Le))?t(Le):""),_e=c(()=>t(i).filter(ie=>!As(ie)&&!ta(ie)));function De(ie){return ie!==""&&!ta(ie)&&!Zs(ie)}const Ce=c(()=>De(t(Le))),Fe=c(()=>t(ze)!==""&&Mi(t(J)?.get(t(ze))?.FLAGS).dontDelete),Oe=c(()=>t(ze)!==""&&!Zs(t(ze))?t(ze):""),Xe=c(()=>t(Oe)!==""&&!t(Fe)),Ye=c(()=>t(xe).startsWith("BidCos")),Ze=c(()=>hb(t(xe)));function Je(ie){switch(ie){case"device":return s("Select a device");case"channel":return s("Select one or more channels");case"delete":return t(Fe)?s("This device carries the DontDelete flag"):s("Select a device");case"bidcos":return s("Only available on BidCos interfaces")}}const at=c(()=>[{key:"icon",label:"",width:hi,fixed:!0,sortable:!1,filterable:!1,align:"center",value:()=>""},{key:"name",label:s("Name"),width:170,copy:"name",value:ie=>z(ie.ADDRESS)},{key:"ADDRESS",label:"ADDRESS",width:150,mono:!0,copy:"address"},{key:"rooms",label:s("Rooms"),width:120,value:ie=>we(ie,"room"),onactivate:ie=>rt("room",ie.ADDRESS)},{key:"functions",label:s("Functions"),width:110,value:ie=>we(ie,"function"),onactivate:ie=>rt("function",ie.ADDRESS)},{key:"smokeGroup",label:s("Smoke group"),width:150,minWidth:70,keepMinWidth:!0,hidden:t(H).length===0,value:ie=>O(ie)},{key:"msgs",label:"Msgs",width:eu,minWidth:eu,keepMinWidth:!0,align:"center",filterable:!1,sortable:!1,value:ie=>ce(ie).map(Ge=>Ge.datapoint).join(" ")},{key:"TYPE",label:"TYPE",width:150},{key:"SUBTYPE",label:"SUBTYPE",width:90,hidden:t(xe)!=="HmIP-RF"},{key:"FIRMWARE",label:"FIRMWARE",width:170,value:ie=>`${ie.FIRMWARE??""} ${ie.AVAILABLE_FIRMWARE??""}`.trim()},{key:"PARAMSETS",label:"PARAMSETS",width:Li,minWidth:Li,keepMinWidth:!0,sortable:!1,value:ie=>mt(ie).names.join(" ")},{key:"FLAGS",label:"FLAGS",width:130,value:ie=>Mi(ie.FLAGS).labels.join(" ")},{key:"INTERFACE",label:"INTERFACE",width:130,hidden:t(xe)!=="BidCos-RF",value:ie=>Ic(ie,t(he))},{key:"RX_MODE",label:"RX_MODE",width:130,hidden:t(xe)==="BidCos-Wired",value:ie=>Eb(ie.RX_MODE).join(" ")}]),gt=c(()=>[{key:"name",label:s("Name"),width:170,copy:"name",value:ie=>n.nameOf(ie.ADDRESS)},{key:"ADDRESS",label:"ADDRESS",width:150,mono:!0,copy:"address"},{key:"rooms",label:s("Rooms"),width:120,value:ie=>we(ie,"room"),onactivate:ie=>rt("room",ie.ADDRESS)},{key:"functions",label:s("Functions"),width:110,value:ie=>we(ie,"function"),onactivate:ie=>rt("function",ie.ADDRESS)},{key:"smokeGroup",label:s("Smoke group"),width:150,hidden:t(H).length===0,value:ie=>O(ie)},{key:"TYPE",label:"TYPE",width:150},{key:"DIRECTION",label:"DIRECTION",width:100,value:ie=>Sb(ie.DIRECTION)},{key:"PARAMSETS",label:"PARAMSETS",width:Li,minWidth:Li,keepMinWidth:!0,sortable:!1,value:ie=>mt(ie).names.join(" ")},{key:"FLAGS",label:"FLAGS",width:130,value:ie=>Mi(ie.FLAGS).labels.join(" ")},{key:"links",label:s("Links"),width:60,align:"right",filterable:!1,value:ie=>{const Ge=n.links.forAddress(t(te),ie.ADDRESS).length;return Ge===0?"":Ge}},{key:"AES_ACTIVE",label:"AES_ACTIVE",width:90,hidden:t(xe)!=="BidCos-RF",value:ie=>ie.AES_ACTIVE?"🔑":""}]);function mt(ie){const Ge=As(ie.ADDRESS)?void 0:t(J)?.parentOf(ie.ADDRESS),$t=ci(t(te),t(xe))&&ta(ie.ADDRESS),hn=gb(ie.ADDRESS)||ia(ie);return fS(ie.PARAMSETS,Bn=>{const tr=n.paramsets.contentOf(t(te),ie,Bn,Ge);return Bn!=="MASTER"||tr!=="empty"||!$t?tr:n.paramsets.contentOf(t(te),ie,"VALUES",Ge,"service-messages")},{channel:hn})}function ke(ie){const Ge=t(J)?.get(ie);return{canSend:ys(Ge?.LINK_SOURCE_ROLES).length>0,canReceive:ys(Ge?.LINK_TARGET_ROLES).length>0,links:n.links.forAddress(t(te),ie).length}}function Me(ie){const Ge=n.devices.channels(t(te),ie.ADDRESS),$t=oe(ie.ADDRESS)?F(ie.ADDRESS):[];if(t(qe).length===0)return[...Ge,...$t];const hn=tt(ie.ADDRESS);return[...Ge.filter(Bn=>t(qe).every(tr=>ru(tt(Bn.ADDRESS),hn,tr))),...$t.filter(Bn=>t(qe).every(tr=>U(Bn,tr)))]}function Qe(ie){return{ref:it(ie),channels:As(ie)?n.devices.channels(t(te),ie).map(Ge=>it(Ge.ADDRESS)):[]}}function ut(ie,Ge){Ge.length!==0&&(u(de,ie,!0),u(ee,Ge.map($t=>Qe($t)),!0),u(se,Ge.length===1?Ge[0]??"":"",!0),u(re,!0))}function bt(ie,Ge){ut(ie,Ge===void 0||t(i).includes(Ge)?t(i):[Ge])}function rt(ie,Ge){t(Te).writable&&ut(ie,[Ge])}const qt=c(()=>t(i).length>0&&t(Te).writable),xt=c(()=>t(Te).available?t(Te).writable?s("Select one or more rows"):s("The store does not take writes"):s("No store connected"));function Lt(ie){return Qo(ie,t(M),99).some(Ge=>Ge.datapoint==="UPDATE_PENDING")}function Zt(ie){return vS(ie,{busy:n.devices.firmwareBusy.includes(ie.ADDRESS),updatePending:Lt(ie.ADDRESS)})}async function _n(ie){const Ge=Zt(ie);Ge.action==="install"?await n.devices.installFirmware(t(te),ie.ADDRESS):Ge.action==="update"&&await n.devices.updateFirmware(t(te),[ie.ADDRESS])}st(()=>{const ie=t(te);if(ie===""||!n.devices.firmwarePending(ie))return;const Ge=setInterval(()=>{n.devices.load(ie,{refresh:!0})},a);return()=>{clearInterval(Ge)}});function gn(ie){u(I,ie,!0),u(g,!0)}function ln(ie){u(I,ie,!0),u(k,!0)}function bn(ie){u(I,ie,!0),u(y,!0)}function wn(ie){u(I,ie,!0),u(S,!0)}async function Zn(ie){const Ge=[...t(_e)];if(Ge.length===0)return;const $t=await n.devices.reportValueUsage(t(te),Ge,ie);n.notices.push("info",s("reportValueUsage {value}: {count} datapoints on {channels} channels",{value:ie,count:$t,channels:Ge.length}))}function Kn(ie,Ge){u(fe,ie,!0),u(B,Ge,!0),u(ue,!0)}function Jt(ie,Ge){u(b,ie.ADDRESS,!0),u(f,Ge.clientX,!0),u(p,Ge.clientY,!0),u(l,!0)}const Mt=c(()=>{const ie=t(J)?.get(t(b));return ie===void 0?[]:mt(ie).names.map(Ge=>({id:`paramset:${Ge}`,label:s(`${Ge} Paramset`)}))}),dn=c(()=>Zs(t(b))?[{id:"smokeGroup",label:`${s("Members")}…`}]:As(t(b))?[...oe(t(b))?[{id:"smokeGroup",label:`${s("Members")}…`},{id:"sep0",separator:!0}]:[],{id:"rename",label:s("Rename")},...t(Mt),{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(Te).writable},{id:"assign:function",label:`${s("Assign to function")}…`,disabled:!t(Te).writable},{id:"sep3",separator:!0},{id:"replace",label:s("Replace"),disabled:Gn(t(b))},{id:"delete",label:s("Delete"),danger:!0,disabled:Gn(t(b))}]:[{id:"rename",label:s("Rename"),disabled:!De(t(b))},{id:"usage1",label:"reportValueUsage 1",disabled:ta(t(b))},{id:"usage0",label:"reportValueUsage 0",disabled:ta(t(b))},{id:"sep1",separator:!0},...t(Mt).length===0?[]:[...t(Mt),{id:"sep2",separator:!0}],{id:"assign:room",label:`${s("Assign to room")}…`,disabled:!t(Te).writable},{id:"assign:function",label:`${s("Assign to function")}…`,disabled:!t(Te).writable},{id:"sep3",separator:!0},{id:"link:sender",label:s("Create link as sender"),disabled:!ke(t(b)).canSend},{id:"link:receiver",label:s("Create link as receiver"),disabled:!ke(t(b)).canReceive},{id:"link:show",label:`${s("Show links")} (${String(ke(t(b)).links)})`,disabled:ke(t(b)).links===0},{id:"team",label:s("Team"),disabled:(t(J)?.get(t(b))?.TEAM_TAG??"")===""}]);function Gn(ie){return Mi(t(J)?.get(ie)?.FLAGS).dontDelete}async function Nn(ie){const Ge=t(b);if(ie.startsWith("paramset:")){Kn(Ge,ie.slice(9));return}if(ie==="assign:room"||ie==="assign:function"){bt(ie==="assign:room"?"room":"function",Ge);return}switch(ie){case"link:sender":u(D,[Ge],!0),u(R,[],!0),u(C,!0);break;case"link:receiver":u(D,[],!0),u(R,[Ge],!0),u(C,!0);break;case"team":u(I,Ge,!0),u(P,!0);break;case"smokeGroup":be(Ge);break;case"link:show":n.app.linksFilter=Ge,n.app.setTab("links");break;case"rename":gn(Ge);break;case"restore":await n.devices.restoreConfig(t(te),Ge);break;case"clear":await n.devices.clearConfigCache(t(te),Ge);break;case"repair":wn(Ge);break;case"replace":bn(Ge);break;case"delete":ln(Ge);break;case"usage1":case"usage0":await n.devices.reportValueUsage(t(te),[Ge],ie==="usage1"?1:0);break}}var Sr=kT(),Ur=Ie(Sr),Jn=w(Ur),Un=w(Jn);{const ie=Ve=>{var Ke=vT(),et=Ie(Ke);{let $e=c(()=>s("Pair device")),ht=c(()=>!t(Ze)),At=c(()=>s("This interface cannot pair devices"));Oh(et,{get caption(){return t($e)},icon:"+",get disabled(){return t(ht)},get reason(){return t(At)},testId:"devices-add",onclick:()=>u(T,!0)})}var pt=d(et,2);{let $e=c(()=>s("Rename device")),ht=c(()=>!t(Ce)),At=c(()=>Je("device"));Ct(pt,{get title(){return t($e)},icon:"✎",get disabled(){return t(ht)},get reason(){return t(At)},testId:"devices-rename",onclick:()=>gn(t(Le))})}var Tt=d(pt,2);{let $e=c(()=>s("Assign to room")),ht=c(()=>!t(qt));Ct(Tt,{get title(){return t($e)},icon:"⌂",get disabled(){return t(ht)},get reason(){return t(xt)},testId:"devices-assign-room",onclick:()=>bt("room")})}var Kt=d(Tt,2);{let $e=c(()=>s("Assign to function")),ht=c(()=>!t(qt));Ct(Kt,{get title(){return t($e)},icon:"⚑",get disabled(){return t(ht)},get reason(){return t(xt)},testId:"devices-assign-function",onclick:()=>bt("function")})}var en=d(Kt,2);{let $e=c(()=>s("Rooms and functions")),ht=c(()=>!t(Te).available),At=c(()=>s("No store connected"));Ct(en,{get title(){return t($e)},icon:"⊞",get disabled(){return t(ht)},get reason(){return t(At)},testId:"devices-taxonomy",onclick:()=>{n.selectInterface(pd)}})}var Bt=d(en,2);{let $e=c(()=>t(_e).length===0),ht=c(()=>Je("channel"));Ct(Bt,{title:"reportValueUsage 1",icon:"⇩",get disabled(){return t($e)},get reason(){return t(ht)},testId:"devices-usage-1",onclick:()=>{Zn(1)}})}var Ft=d(Bt,2);{let $e=c(()=>t(_e).length===0),ht=c(()=>Je("channel"));Ct(Ft,{title:"reportValueUsage 0",icon:"⇧",get disabled(){return t($e)},get reason(){return t(ht)},testId:"devices-usage-0",onclick:()=>{Zn(0)}})}var yn=d(Ft,2);{let $e=c(()=>s("restoreConfigToDevice")),ht=c(()=>t(ze)===""||!t(Ye)),At=c(()=>t(Ye)?Je("device"):Je("bidcos"));Ct(yn,{get title(){return t($e)},icon:"⟲",get disabled(){return t(ht)},get reason(){return t(At)},testId:"devices-restore",onclick:()=>{n.devices.restoreConfig(t(te),t(ze))}})}var pn=d(yn,2);{let $e=c(()=>s("clearConfigCache")),ht=c(()=>t(ze)===""||!t(Ye)),At=c(()=>t(Ye)?Je("device"):Je("bidcos"));Ct(pn,{get title(){return t($e)},icon:"⌫",get disabled(){return t(ht)},get reason(){return t(At)},testId:"devices-clear",onclick:()=>{n.devices.clearConfigCache(t(te),t(ze))}})}var cn=d(pn,2);{let $e=c(()=>s("Repair configuration")),ht=c(()=>t(Oe)===""),At=c(()=>Je("device"));Ct(cn,{get title(){return t($e)},icon:"⚒",get disabled(){return t(ht)},get reason(){return t(At)},testId:"devices-repair",onclick:()=>wn(t(Oe))})}var An=d(cn,2);{let $e=c(()=>s("New smoke group")),ht=c(()=>!t(G));Ct(An,{get title(){return t($e)},icon:"◎",get disabled(){return t(ht)},get reason(){return t(L)},testId:"devices-smoke-group-new",onclick:Ee})}var nr=d(An,2);{let $e=c(()=>s("Replace device")),ht=c(()=>!t(Xe)),At=c(()=>Je("delete"));Ct(nr,{get title(){return t($e)},icon:"⇄",get disabled(){return t(ht)},get reason(){return t(At)},testId:"devices-replace",onclick:()=>bn(t(ze))})}var Xt=d(nr,2);{let $e=c(()=>s("Delete device")),ht=c(()=>!t(Xe)),At=c(()=>Je("delete"));Ct(Xt,{get title(){return t($e)},icon:"🗑",get disabled(){return t(ht)},get reason(){return t(At)},testId:"devices-delete",onclick:()=>ln(t(ze))})}var Rt=d(Xt,2);{let $e=c(()=>s("Refresh"));Ct(Rt,{get title(){return t($e)},icon:"⟳",testId:"devices-refresh",onclick:()=>{n.devices.load(t(te),{refresh:!0}),n.smokeGroups.refresh(t(te),t(Re))}})}v(Ve,Ke)},Ge=Ve=>{var Ke=St(),et=Ie(Ke);{var pt=Tt=>{var Kt=pT(),en=Ie(Kt),Bt=w(en),Ft=m(Bt,!0);Bt.value=Bt.__value="";var yn=d(Bt);je(yn,17,()=>t(Pe),Xt=>Xt.path,(Xt,Rt)=>{var $e=Au(),ht=m($e,!0),At={};E(tn=>{h(ht,tn),At!==(At=t(Rt).path)&&($e.value=($e.__value=At)??"")},[()=>Wl(t(Rt)," ")]),v(Xt,$e)}),Yt(en);var pn=d(en,2),cn=w(pn),An=m(cn,!0);cn.value=cn.__value="";var nr=d(cn);je(nr,17,()=>t(He),Xt=>Xt.path,(Xt,Rt)=>{var $e=Au(),ht=m($e,!0),At={};E(tn=>{h(ht,tn),At!==(At=t(Rt).path)&&($e.value=($e.__value=At)??"")},[()=>Wl(t(Rt)," ")]),v(Xt,$e)}),Yt(pn),E((Xt,Rt,$e,ht)=>{x(en,"aria-label",Xt),h(Ft,Rt),x(pn,"aria-label",$e),h(An,ht)},[()=>s("Room"),()=>s("All rooms"),()=>s("Function"),()=>s("All functions")]),yr(en,()=>t(Y),Xt=>u(Y,Xt)),yr(pn,()=>t(Z),Xt=>u(Z,Xt)),v(Tt,Kt)};$(et,Tt=>{t(Te).available&&Tt(pt)})}v(Ve,Ke)},$t=(Ve,Ke=Wn,et=Wn,pt=Wn)=>{var Tt=St(),Kt=Ie(Tt);{var en=Rt=>{const $e=c(()=>Zs(Ke().ADDRESS)?me(Ke().ADDRESS):Ke().TYPE);{let ht=c(()=>n.host.deviceImageUrl(t($e))),At=c(()=>`device-image-${Ke().ADDRESS}`);mi(Rt,{get deviceType(){return t($e)},get src(){return t(ht)},get testId(){return t(At)}})}},Bt=Rt=>{var $e=gT(),ht=Ie($e),At=d(ht,2),tn=m(At,!0);E((Cn,rr)=>{x(ht,"data-testid",`smoke-group-members-${Ke().ADDRESS}`),x(ht,"title",Cn),x(At,"data-testid",`smoke-group-${Ke().ADDRESS}`),h(tn,rr)},[()=>s("Members"),()=>O(Ke())]),ne("click",ht,Cn=>{Cn.stopPropagation(),be(Ke().ADDRESS)}),v(Rt,$e)},Ft=c(()=>et().key==="smokeGroup"&&oe(Ke().ADDRESS)&&pt().depth===0),yn=Rt=>{var $e=St(),ht=Ie($e);je(ht,17,()=>ce(Ke()),At=>At.datapoint,(At,tn)=>{const Cn=c(()=>Lh(t(tn).datapoint,!t(Ye)));var rr=_T(),Mn=Ie(rr);let ls;var sr=m(Mn,!0),ar=d(Mn,2);{var Vr=dr=>{var Ss=bT();E(Ks=>{x(Ss,"data-testid",`repair-${Ke().ADDRESS}`),x(Ss,"title",Ks)},[()=>s("Repair configuration")]),ne("click",Ss,Ks=>{Ks.stopPropagation(),wn(Ke().ADDRESS)}),v(dr,Ss)},Hr=c(()=>hS(t(tn).datapoint,!t(Ye)));$(ar,dr=>{t(Hr)&&dr(Vr)})}E(dr=>{ls=Et(Mn,1,"hmm-msg-mark svelte-1fmr35a",null,ls,{"hmm-msg-error":t(tn).level==="error","hmm-msg-warn":t(tn).level==="warn"}),x(Mn,"title",dr),x(Mn,"aria-label",t(tn).datapoint),h(sr,t(tn).symbol)},[()=>t(Cn)===void 0?t(tn).title:`${t(tn).title} — ${s(t(Cn))}`]),v(At,rr)}),v(Rt,$e)},pn=Rt=>{const $e=c(()=>Zt(Ke()));var ht=xu(),At=Ie(ht),tn=m(At,!0),Cn=d(At,2);{var rr=sr=>{var ar=Tu(),Vr=m(ar,!0);E(Hr=>h(Vr,Hr),[()=>s("in progress")]),v(sr,ar)},Mn=sr=>{var ar=Ru(),Vr=m(ar);E((Hr,dr)=>{x(ar,"data-testid",`firmware-${Ke().ADDRESS}`),x(ar,"title",Hr),h(Vr,`${dr??""} ${t($e).available??""??""}`)},[()=>s("Install firmware {version}",{version:t($e).available??""}),()=>s("install")]),ne("click",ar,Hr=>{Hr.stopPropagation(),_n(Ke())}),v(sr,ar)},ls=sr=>{var ar=Tu(),Vr=m(ar,!0);E(()=>h(Vr,t($e).status)),v(sr,ar)};$(Cn,sr=>{t($e).busy?sr(rr):t($e).action?sr(Mn,1):t($e).status&&sr(ls,2)})}E(()=>h(tn,t($e).firmware)),v(Rt,ht)},cn=Rt=>{const $e=c(()=>mt(Ke()));var ht=ET();je(ht,20,()=>t($e).names,At=>At,(At,tn)=>{var Cn=Ru(),rr=m(Cn,!0);E(()=>{x(Cn,"data-testid",`paramset-${Ke().ADDRESS}-${tn}`),h(rr,tn)}),ne("click",Cn,Mn=>{Mn.stopPropagation(),Kn(Ke().ADDRESS,tn)}),v(At,Cn)}),E(()=>{x(ht,"data-testid",`paramsets-${Ke().ADDRESS}`),x(ht,"aria-busy",t($e).pending)}),v(Rt,ht)},An=Rt=>{var $e=St(),ht=Ie($e);{var At=tn=>{var Cn=yT();v(tn,Cn)};$(ht,tn=>{Ke().AES_ACTIVE&&tn(At)})}v(Rt,$e)},nr=Rt=>{var $e=xu(),ht=Ie($e),At=m(ht,!0),tn=d(ht,2);{var Cn=Mn=>{var ls=ST();v(Mn,ls)},rr=c(()=>yd(Ke()));$(tn,Mn=>{t(rr)&&Mn(Cn)})}E(Mn=>{x(ht,"data-testid",`receiver-${Ke().ADDRESS}`),h(At,Mn)},[()=>Ic(Ke(),t(he))]),v(Rt,$e)},Xt=Rt=>{var $e=Qn();E(ht=>h($e,ht),[()=>et().value?et().value(Ke())??"":Ke()[et().key]??""]),v(Rt,$e)};$(Kt,Rt=>{et().key==="icon"?Rt(en):t(Ft)?Rt(Bt,1):et().key==="msgs"&&pt().depth===0?Rt(yn,2):et().key==="FIRMWARE"&&pt().depth===0?Rt(pn,3):et().key==="PARAMSETS"?Rt(cn,4):et().key==="AES_ACTIVE"?Rt(An,5):et().key==="INTERFACE"&&pt().depth===0?Rt(nr,6):Rt(Xt,-1)})}v(Ve,Tt)};let hn=c(()=>s("Devices")),Bn=c(()=>s("Filter")),tr=c(()=>s("No row matches the filter")),ot=c(()=>s("Clear filter")),vt=c(()=>s("Devices")),Dt=c(()=>s("{count} devices",{},t(j).length));js(Un,{get rows(){return t(j)},get columns(){return t(at)},get subColumns(){return t(gt)},getId:Ve=>Ve.ADDRESS,subRows:Me,get scope(){return t(te)},get caption(){return t(hn)},get filterLabel(){return t(Bn)},get emptyText(){return t(Ne)},get noMatchText(){return t(tr)},get clearFilterLabel(){return t(ot)},showingText:(Ve,Ke)=>s("Showing {shown} of {total}",{shown:Ve,total:Ke}),onrowcontextmenu:Jt,canRename:Ve=>De(Ve.ADDRESS),onrename:Ve=>gn(Ve.ADDRESS),get toolbarLabel(){return t(vt)},get countText(){return t(Dt)},tableId:"devices",subTableId:"devices-channels",testId:"devices-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:ie,status:Ge,cell:$t,$$slots:{toolbar:!0,status:!0,cell:!0}})}var kr=d(Ur,2);{let ie=c(()=>s("Devices"));Pd(kr,{get items(){return t(dn)},get x(){return t(f)},get y(){return t(p)},get label(){return t(ie)},testId:"devices-menu",onselect:Ge=>{Nn(Ge)},get open(){return t(l)},set open(Ge){u(l,Ge,!0)}})}var os=d(kr,2);WA(os,{get address(){return t(I)},get open(){return t(g)},set open(ie){u(g,ie,!0)}});var er=d(os,2);VA(er,{get address(){return t(I)},get open(){return t(k)},set open(ie){u(k,ie,!0)}});var wr=d(er,2);mT(wr,{get address(){return t(I)},get open(){return t(y)},set open(ie){u(y,ie,!0)}});var Br=d(wr,2);vA(Br,{get open(){return t(T)},set open(ie){u(T,ie,!0)}});var or=d(Br,2);Uh(or,{get presetSenders(){return t(D)},get presetReceivers(){return t(R)},get open(){return t(C)},set open(ie){u(C,ie,!0)}});var Ar=d(or,2);US(Ar,{get address(){return t(I)},get open(){return t(P)},set open(ie){u(P,ie,!0)}});var lr=d(Ar,2);{let ie=c(()=>t(ae)!==void 0);CS(lr,{get group(){return t(le)},get isNew(){return t(ie)},get open(){return t(K)},set open(Ge){u(K,Ge,!0)}})}var Jr=d(lr,2);oT(Jr,{get address(){return t(I)},get open(){return t(S)},set open(ie){u(S,ie,!0)}});var Pr=d(Jr,2);{let ie=c(()=>De(t(se)));GA(Pr,{get focus(){return t(de)},get targets(){return t(ee)},get address(){return t(se)},get canRename(){return t(ie)},get open(){return t(re)},set open(Ge){u(re,Ge,!0)}})}var Tr=d(Pr,2);Ww(Tr,{get interfaceName(){return t(te)},get address(){return t(fe)},get paramset(){return t(B)},get open(){return t(ue)},set open(ie){u(ue,ie,!0)}}),v(r,Sr),ct()}yt(["click"]);var AT=_('<!> <!> <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),TT=_('<span data-testid="events-paused"> </span>'),RT=_('<div class="hmm-page svelte-dzof1w"><div class="hmm-page-grid svelte-dzof1w"><!></div></div>');function xT(r,e){dt(e,!0);const n=Ut(),s=n.i18n.t;let a=N(Be([])),i=N(""),o=N(""),l=N(!1),f=N(Be([]));const p=c(()=>n.app.selectedInterface),b=c(()=>({interfaceName:t(p),...t(i).trim()===""?{}:{address:t(i).trim()},...t(o).trim()===""?{}:{datapoint:t(o).trim()}})),g=c(()=>n.events.filtered(t(b))),k=c(()=>t(l)?t(f):t(g)),y=c(()=>[{key:"timestamp",label:s("Timestamp"),width:110,value:D=>zf(D.timestamp)},{key:"method",label:s("Method"),width:110},{key:"name",label:s("Name"),width:200,copy:"name",value:D=>D.address===void 0?"":n.nameOf(D.address)},{key:"address",label:"ADDRESS",width:150,mono:!0,copy:"address"},{key:"datapoint",label:"PARAM",width:180},{key:"value",label:"VALUE",width:140,value:D=>io(D.value??D.payload)},{key:"count",label:s("Events per device"),width:120,align:"right",filterable:!1,value:D=>D.address===void 0?"":n.events.countFor(D.address)}]);function S(){u(f,t(l)?[]:[...t(g)],!0),u(l,!t(l))}var T=RT(),I=w(T),C=w(I);{const D=fe=>{var B=AT(),re=Ie(B);{let Y=c(()=>s("Pause"));Ct(re,{get title(){return t(Y)},icon:"⏸",get pressed(){return t(l)},testId:"events-pause",onclick:()=>S()})}var de=d(re,2);{let Y=c(()=>s("Clear"));Ct(de,{get title(){return t(Y)},icon:"⌫",testId:"events-clear",onclick:()=>{n.events.clear()}})}var ee=d(de,2),se=d(ee,2);E((Y,Z)=>{x(ee,"aria-label",Y),x(se,"aria-label",Z)},[()=>`${s("Filter")} ADDRESS`,()=>`${s("Filter")} PARAM`]),Sn(ee,()=>t(i),Y=>u(i,Y)),Sn(se,()=>t(o),Y=>u(o,Y)),v(fe,B)},R=fe=>{var B=St(),re=Ie(B);{var de=ee=>{var se=TT(),Y=m(se,!0);E(Z=>h(Y,Z),[()=>s("Pause")]),v(ee,se)};$(re,ee=>{t(l)&&ee(de)})}v(fe,B)};let P=c(()=>s("Events")),K=c(()=>s("Filter")),X=c(()=>s("No data")),ae=c(()=>s("Events")),ue=c(()=>s("{count} events",{},t(k).length));js(C,{get rows(){return t(k)},get scope(){return t(p)},get columns(){return t(y)},getId:fe=>String(fe.seq),get caption(){return t(P)},get filterLabel(){return t(K)},get emptyText(){return t(X)},get toolbarLabel(){return t(ae)},get countText(){return t(ue)},tableId:"events",testId:"events-table",get selected(){return t(a)},set selected(fe){u(a,fe,!0)},toolbar:D,status:R,$$slots:{toolbar:!0,status:!0}})}v(r,T),ct()}var IT=_('<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),DT=_("<li> </li>"),NT=_('<ul class="hmm-group-delete-members svelte-o268m5" data-testid="group-delete-members"></ul>'),CT=_('<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 PT(r,e){dt(e,!0);let n=V(e,"open",15,!1),s=V(e,"group",3,void 0);const a=Ut(),i=a.i18n.t;let o=N(!1);st(()=>{n()&&u(o,!1)});function l(p){const b=a.names.name(p.id);return b===void 0?p.id:`${b} (${p.id})`}async function f(){if(t(o)||s()===void 0)return;u(o,!0);const p=await a.groups.remove(s().id);u(o,!1),p&&n(!1)}{const p=g=>{var k=IT(),y=Ie(k),S=m(y,!0),T=d(y,2),I=m(T,!0);E((C,D)=>{h(S,C),T.disabled=t(o)||s()===void 0,h(I,D)},[()=>i("Cancel"),()=>i("Delete")]),ne("click",y,()=>n(!1)),ne("click",T,()=>{f()}),v(g,k)};let b=c(()=>i("Delete group"));kn(r,{get title(){return t(b)},width:"480px",testId:"group-delete-dialog",get open(){return n()},set open(g){n(g)},buttons:p,children:(g,k)=>{var y=St(),S=Ie(y);{var T=I=>{var C=CT(),D=Ie(C),R=m(D,!0),P=d(D,2),K=m(P,!0),X=d(P,2);{var ae=ue=>{var fe=NT();je(fe,21,()=>s().members,B=>B.id,(B,re)=>{var de=DT(),ee=m(de,!0);E(se=>h(ee,se),[()=>l(t(re))]),v(B,de)}),v(ue,fe)};$(X,ue=>{s().members.length>0&&ue(ae)})}E(ue=>{h(R,s().name),h(K,ue)},[()=>i("The members leave the group and the virtual device {device} is removed",{device:s().device})]),v(I,C)};$(S,I=>{s()!==void 0&&I(T)})}v(g,y)},$$slots:{buttons:!0,default:!0}})}ct()}yt(["click"]);var MT=_('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="group-save"> </button>',1),OT=_("<option> </option>"),LT=_('<select class="hmm-select" data-testid="group-type"></select>'),FT=_('<span data-testid="group-type"> </span>'),GT=_('<div class="hmm-group-row svelte-1gbrlxm"><span> </span> <span class="hmm-mono" data-testid="group-device"> </span></div>'),UT=_('<p class="hmm-group-muted svelte-1gbrlxm"> </p>'),BT=_('<p class="hmm-group-muted svelte-1gbrlxm" data-testid="group-no-candidates"> </p>'),VT=_('<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>'),HT=_('<ul class="hmm-group-list svelte-1gbrlxm" data-testid="group-candidates"></ul>'),zT=_('<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>'),jT=_('<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),WT=_('<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 KT(r,e){dt(e,!0);let n=V(e,"open",15,!1),s=V(e,"group",3,void 0);const a=Ut(),i=a.i18n.t;let o=N(""),l=N(""),f=N(Be([])),p=N(Be([])),b=N(Be([])),g=N(Be([])),k=N(Be([])),y=N(!1),S=N(!1),T=N(Be([]));const I=c(()=>s()===void 0),C=c(()=>t(p).find(de=>de.id===t(l))),D=c(()=>{if(t(I))return t(C)?.assignable??[];const de=new Set(t(k).map(ee=>ee.id));return[...t(k),...t(b).filter(ee=>!de.has(ee.id))]}),R=c(()=>t(I)?t(C)?.leftover??[]:t(g)),P=c(()=>s()!==void 0&&t(o).trim()!==s().name),K=c(()=>!t(I)&&[...t(f)].sort().join(`
|
|
18
|
+
`)!==t(T).join(`
|
|
19
|
+
`)),X=c(()=>!t(S)&&!t(y)&&t(o).trim()!==""&&(t(I)?t(l)!=="":t(P)||t(K)));st(()=>{n()&&(u(S,!1),ae(s()))});async function ae(de){u(y,!0),u(o,de?.name??"",!0),u(f,[],!0),u(p,[],!0),u(b,[],!0),u(g,[],!0),u(k,[],!0),u(T,[],!0);try{if(de===void 0){u(p,await a.groups.types(),!0),u(l,t(p)[0]?.id??"",!0);return}const ee=await a.groups.detail(de.id);if(ee===void 0){n(!1);return}u(o,ee.name,!0),u(l,ee.type,!0),u(p,ee.types.map(se=>({...se,assignable:[],leftover:[]})),!0),u(k,ee.members,!0),u(b,ee.assignable,!0),u(g,ee.leftover,!0),u(f,ee.members.map(se=>se.id),!0),u(T,[...t(f)].sort(),!0)}finally{u(y,!1)}}function ue(de){u(l,de,!0),u(f,[],!0)}function fe(de,ee){u(f,ee?[...t(f).filter(se=>se!==de),de]:t(f).filter(se=>se!==de),!0)}function B(de){const ee=a.names.name(de.id);return ee===void 0?de.id:ee}async function re(){if(!t(X))return;u(S,!0);const de=t(o).trim(),ee=s()===void 0?await a.groups.create(de,t(l),t(f)):await a.groups.update(s().id,t(P)?de:void 0,t(K)?t(f):void 0);u(S,!1),ee!==void 0&&n(!1)}{const de=se=>{var Y=MT(),Z=Ie(Y),te=m(Z,!0),xe=d(Z,2),J=m(xe,!0);E((ye,Re)=>{h(te,ye),xe.disabled=!t(X),h(J,Re)},[()=>i("Cancel"),()=>t(I)?i("Create"):i("Save")]),ne("click",Z,()=>n(!1)),ne("click",xe,()=>{re()}),v(se,Y)};let ee=c(()=>t(I)?i("New group"):i("Edit group"));kn(r,{get title(){return t(ee)},width:"620px",minHeight:360,testId:"group-dialog",get open(){return n()},set open(se){n(se)},buttons:de,children:(se,Y)=>{var Z=WT(),te=w(Z),xe=w(te),J=m(xe,!0),ye=d(xe,2),Re=d(te,2),ge=w(Re),H=m(ge,!0),pe=d(ge,2);{var ve=G=>{var L=LT();je(L,21,()=>t(p),M=>M.id,(M,he)=>{var Te=OT(),Pe=m(Te,!0),He={};E(qe=>{h(Pe,qe),He!==(He=t(he).id)&&(Te.value=(Te.__value=He)??"")},[()=>i(t(he).label)]),v(M,Te)});var A;Yt(L),E(()=>{L.disabled=t(y)||t(p).length===0,A!==(A=t(l))&&(L.value=(L.__value=A)??"",Pn(L,A))}),ne("change",L,M=>ue(M.currentTarget.value)),v(G,L)},Q=G=>{var L=FT(),A=m(L,!0);E(M=>h(A,M),[()=>i(t(C)?.label??t(l))]),v(G,L)};$(pe,G=>{t(I)?G(ve):G(Q,-1)})}var oe=d(Re,2);{var F=G=>{var L=GT(),A=w(L),M=m(A,!0),he=d(A,2),Te=m(he,!0);E(Pe=>{h(M,Pe),h(Te,s().device)},[()=>i("Virtual device")]),v(G,L)};$(oe,G=>{s()!==void 0&&G(F)})}var W=d(oe,2),O=m(W,!0),z=d(W,2);{var ce=G=>{var L=UT(),A=m(L,!0);E(M=>h(A,M),[()=>i("Loading")]),v(G,L)},me=G=>{var L=BT(),A=m(L,!0);E(M=>h(A,M),[()=>i("There are no other devices available")]),v(G,L)},be=G=>{var L=HT();je(L,21,()=>t(D),A=>A.id,(A,M)=>{var he=VT(),Te=w(he),Pe=w(Te),He=d(Pe,2),qe=m(He,!0),it=d(He,2),tt=m(it,!0),Se=d(it,2),we=m(Se,!0);E((j,U)=>{Cr(Pe,j),x(Pe,"data-testid",`group-member-${t(M).id}`),h(qe,U),h(tt,t(M).id),h(we,t(M).type)},[()=>t(f).includes(t(M).id),()=>B(t(M))]),ne("change",Pe,j=>fe(t(M).id,j.currentTarget.checked)),v(A,he)}),v(G,L)};$(z,G=>{t(y)?G(ce):t(D).length===0?G(me,1):G(be,-1)})}var Ee=d(z,2);{var le=G=>{var L=jT(),A=Ie(L),M=m(A,!0),he=d(A,2);je(he,21,()=>t(R),Te=>Te.id,(Te,Pe)=>{var He=zT(),qe=w(He),it=m(qe,!0),tt=d(qe,2),Se=m(tt,!0),we=d(tt,2),j=m(we,!0);E(U=>{h(it,U),h(Se,t(Pe).id),h(j,t(Pe).type)},[()=>B(t(Pe))]),v(Te,He)}),E(Te=>h(M,Te),[()=>i("Already connected devices")]),v(G,L)};$(Ee,G=>{!t(y)&&t(R).length>0&&G(le)})}E((G,L,A)=>{h(J,G),ye.disabled=t(y),h(H,L),h(O,A)},[()=>i("Group name"),()=>i("Group type"),()=>i("Addable devices")]),ne("keydown",ye,G=>{G.key==="Enter"&&re()}),Sn(ye,()=>t(o),G=>u(o,G)),v(se,Z)},$$slots:{buttons:!0,default:!0}})}ct()}yt(["click","keydown","change"]);var YT=_('<p class="hmm-groups-unavailable svelte-v7q9p3" data-testid="groups-unavailable"> </p>'),qT=_("<!> <!> <!> <!>",1),$T=_('<span class="hmm-groups-pending svelte-v7q9p3" data-testid="groups-pending"> </span>'),XT=_('<span class="hmm-groups-none svelte-v7q9p3"> </span>'),QT=_("<span><!></span>"),ZT=_('<div class="hmm-page svelte-v7q9p3"><div class="hmm-page-grid svelte-v7q9p3"><!></div></div> <!> <!>',1);function JT(r,e){dt(e,!0);const n=Ut(),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 b=c(()=>t(a).groups.find(ee=>String(ee.id)===t(i)[0])),g=c(()=>n.app.session!==null&&n.app.session.level<8),k=c(()=>t(g)?s("Needs the administrator role on the system"):void 0);st(()=>{t(a).offered&&t(a).load()});function y(ee){const se=n.names.name(ee.id);return se===void 0?ee.id:`${se} (${ee.id})`}function S(ee){return ee.members.map(y).join(", ")}function T(ee){return s(ee.typeLabel)}function I(){u(l,void 0),u(o,!0)}function C(ee){ee!==void 0&&(u(l,ee,!0),u(o,!0))}function D(ee){ee!==void 0&&(u(p,ee,!0),u(f,!0))}const R=c(()=>t(a).devicesToConfigure.length===0?"":s("Configuration pending: {list}",{list:t(a).devicesToConfigure.map(y).join(", ")})),P=c(()=>[{key:"name",label:s("Group name"),width:220,copy:"name"},{key:"type",label:s("Group type"),width:180,value:T},{key:"device",label:s("Virtual device"),width:140,mono:!0,copy:"address"},{key:"members",label:s("Members"),width:420,sortable:!1,value:S}]);var K=ZT(),X=Ie(K),ae=w(X),ue=w(ae);{var fe=ee=>{var se=YT(),Y=m(se);E(Z=>h(Y,`${Z??""}${t(a).state?.message===void 0?"":`: ${t(a).state.message}`}`),[()=>s("Heating groups are not available here")]),v(ee,se)},B=ee=>{{const se=ge=>{var H=qT(),pe=Ie(H);{let F=c(()=>s("Refresh"));Ct(pe,{get title(){return t(F)},icon:"⟳",get busy(){return t(a).loading},testId:"groups-refresh",onclick:()=>{t(a).load()}})}var ve=d(pe,2);{let F=c(()=>s("New group"));Ct(ve,{get title(){return t(F)},icon:"+",get disabled(){return t(g)},get reason(){return t(k)},testId:"groups-new",onclick:I})}var Q=d(ve,2);{let F=c(()=>s("Edit group")),W=c(()=>t(g)||t(b)===void 0),O=c(()=>t(k)??s("Select a group"));Ct(Q,{get title(){return t(F)},icon:"✎",get disabled(){return t(W)},get reason(){return t(O)},testId:"groups-edit",onclick:()=>C(t(b))})}var oe=d(Q,2);{let F=c(()=>s("Delete group")),W=c(()=>t(g)||t(b)===void 0),O=c(()=>t(k)??s("Select a group"));Ct(oe,{get title(){return t(F)},icon:"✕",get disabled(){return t(W)},get reason(){return t(O)},testId:"groups-delete",onclick:()=>D(t(b))})}v(ge,H)},Y=ge=>{var H=St(),pe=Ie(H);{var ve=Q=>{{let oe=c(()=>s("The direct device connections of these devices are still being configured"));si(Q,{get text(){return t(oe)},testId:"groups-pending-tooltip",children:(F,W)=>{var O=$T(),z=m(O,!0);E(()=>h(z,t(R))),v(F,O)},$$slots:{default:!0}})}};$(pe,Q=>{t(R)!==""&&Q(ve)})}v(ge,H)},Z=(ge,H=Wn,pe=Wn)=>{var ve=St(),Q=Ie(ve);{var oe=O=>{var z=QT(),ce=w(z);{var me=Ee=>{var le=XT(),G=m(le,!0);E(L=>h(G,L),[()=>s("There are no devices in the group")]),v(Ee,le)},be=Ee=>{var le=Qn();E(G=>h(le,G),[()=>S(H())]),v(Ee,le)};$(ce,Ee=>{H().members.length===0?Ee(me):Ee(be,-1)})}E(Ee=>x(z,"data-testid",Ee),[()=>`group-members-${String(H().id)}`]),v(O,z)},F=O=>{var z=Qn();E(ce=>h(z,ce),[()=>pe().value(H())??""]),v(O,z)},W=O=>{var z=Qn();E(()=>h(z,H()[pe().key]??"")),v(O,z)};$(Q,O=>{pe().key==="members"?O(oe):pe().value?O(F,1):O(W,-1)})}v(ge,ve)};let te=c(()=>s("Heating groups")),xe=c(()=>s("Filter")),J=c(()=>t(a).loaded?s("No groups yet"):s("Loading")),ye=c(()=>s("Heating groups")),Re=c(()=>s("{count} groups",{},t(a).groups.length));js(ee,{get rows(){return t(a).groups},get scope(){return n.app.selectedInterface},get columns(){return t(P)},getId:ge=>String(ge.id),get caption(){return t(te)},get filterLabel(){return t(xe)},get emptyText(){return t(J)},get toolbarLabel(){return t(ye)},get countText(){return t(Re)},onactivate:ge=>t(g)?void 0:C(ge),tableId:"groups",testId:"groups-table",get selected(){return t(i)},set selected(ge){u(i,ge,!0)},toolbar:se,status:Y,cell:Z,$$slots:{toolbar:!0,status:!0,cell:!0}})}};$(ue,ee=>{t(a).offered?ee(B,-1):ee(fe)})}var re=d(X,2);KT(re,{get group(){return t(l)},get open(){return t(o)},set open(ee){u(o,ee,!0)}});var de=d(re,2);PT(de,{get group(){return t(p)},get open(){return t(f)},set open(ee){u(f,ee,!0)}}),v(r,K),ct()}var eR=_('<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),tR=_('<li><span class="hmm-mono"> </span> → <span class="hmm-mono"> </span> <span class="hmm-remove-names svelte-1suervc"> </span></li>'),nR=_('<p> </p> <ul class="hmm-remove-links svelte-1suervc"></ul>',1);function rR(r,e){dt(e,!0);let n=V(e,"open",15,!1),s=V(e,"links",19,()=>[]);const a=Ut(),i=a.i18n.t;let o=N(!1);function l(){const p=s().map(b=>({...b}));a.changeSet.stage({kind:"linkRemove",interfaceName:a.app.selectedInterface,title:i("{count} links",{},p.length),pairs:p,calls:p.map(b=>`removeLink(${b.sender}, ${b.receiver})`),lines:[]}),n(!1)}async function f(){u(o,!0);const p=await a.links.remove(a.app.selectedInterface,s());u(o,!1),p===s().length&&n(!1)}{const p=g=>{var k=eR(),y=Ie(k),S=m(y,!0),T=d(y,2),I=m(T,!0),C=d(T,2),D=m(C,!0);E((R,P,K)=>{h(S,R),T.disabled=t(o)||s().length===0,h(I,P),C.disabled=t(o)||s().length===0,h(D,K)},[()=>i("Cancel"),()=>i("Add to pending changes"),()=>i("Delete")]),ne("click",y,()=>n(!1)),ne("click",T,l),ne("click",C,()=>{f()}),v(g,k)};let b=c(()=>i("Delete link"));kn(r,{get title(){return t(b)},width:"620px",testId:"remove-link-dialog",get open(){return n()},set open(g){n(g)},buttons:p,children:(g,k)=>{var y=nR(),S=Ie(y),T=m(S,!0),I=d(S,2);je(I,21,s,C=>`${C.sender}->${C.receiver}`,(C,D)=>{var R=tR(),P=w(R),K=m(P,!0),X=d(P,2),ae=m(X,!0),ue=d(X,2),fe=m(ue);E((B,re)=>{h(K,t(D).sender),h(ae,t(D).receiver),h(fe,`${B??""} → ${re??""}`)},[()=>a.nameOf(t(D).sender),()=>a.nameOf(t(D).receiver)]),v(C,R)}),E(C=>h(T,C),[()=>i("{count} links",{},s().length)]),v(g,y)},$$slots:{buttons:!0,default:!0}})}ct()}yt(["click"]);var Iu=_("<!> <!>",1),sR=_("<!> <!> <!> <!> <!>",1),aR=_('<button type="button" class="hmm-links-handover svelte-1pum174" data-testid="links-filter-handover"> </button>'),iR=_('<span class="hmm-links-defective svelte-1pum174" data-testid="links-defective"> </span>'),oR=_('<span class="hmm-link-broken svelte-1pum174" role="img">⚠</span>'),lR=_('<div class="hmm-page svelte-1pum174"><div class="hmm-page-grid svelte-1pum174"><!></div></div> <!> <!> <!> <!>',1);function dR(r,e){dt(e,!0);const n=Ut(),s=n.i18n.t;let a=N(Be([])),i=N(!1),o=N(0),l=N(0),f=N(void 0),p=N(""),b=N(!1),g=N(!1),k=N(!1),y=N(""),S=N("");const T=c(()=>n.app.selectedInterface),I=c(()=>n.interfaces.typeOf(t(T)));st(()=>{const ge=n.app.linksFilter;ge!==""&&(u(p,ge,!0),n.app.linksFilter="")});const C=c(()=>n.links.of(t(T))),D=c(()=>n.links.defective(t(T)).length),R=c(()=>t(I)==="BidCos-RF"),P=c(()=>n.devices.index(t(T))),K=c(()=>t(P)===void 0||sh(t(P)).length>0),X=c(()=>t(a).map(ge=>{const[H,pe]=ge.split("->");return H===void 0||pe===void 0?void 0:{sender:H,receiver:pe}}).filter(ge=>ge!==void 0)),ae=c(()=>t(X).length===1?t(X)[0]:void 0),ue=c(()=>[{key:"senderIcon",label:"",width:hi,fixed:!0,sortable:!1,filterable:!1,align:"center",value:()=>""},{key:"senderName",label:`${s("Sender")} ${s("Name")}`,width:170,copy:"name",value:ge=>n.nameOf(ge.SENDER)},{key:"SENDER",label:"SENDER",width:140,mono:!0,copy:"address"},{key:"senderType",label:"TYPE",width:130,value:ge=>n.devices.index(t(T))?.get(ge.SENDER)?.TYPE??""},{key:"receiverIcon",label:"",width:hi,fixed:!0,sortable:!1,filterable:!1,align:"center",value:()=>""},{key:"receiverName",label:`${s("Receiver")} ${s("Name")}`,width:170,copy:"name",value:ge=>n.nameOf(ge.RECEIVER)},{key:"RECEIVER",label:"RECEIVER",width:140,mono:!0,copy:"address"},{key:"receiverType",label:"TYPE",width:130,value:ge=>n.devices.index(t(T))?.get(ge.RECEIVER)?.TYPE??""},{key:"FLAGS",label:"FLAGS",width:48,align:"center",sortable:!1,value:ge=>Tl(ge).broken?"broken":""},{key:"NAME",label:"NAME",width:180},{key:"DESCRIPTION",label:"DESCRIPTION"}]);function fe(ge){const H=n.devices.index(t(T));return H?.parentOf(ge)?.TYPE??H?.get(ge)?.TYPE??""}function B(ge){u(y,ge.sender,!0),u(S,ge.receiver,!0),u(k,!0)}function re(ge,H){u(f,{sender:ge.SENDER,receiver:ge.RECEIVER},!0),u(o,H.clientX,!0),u(l,H.clientY,!0),u(i,!0)}const de=c(()=>[{id:"edit",label:s("Edit link")},{id:"short",label:s("Activate short"),disabled:!t(R)},{id:"long",label:s("Activate long"),disabled:!t(R)},{id:"sep",separator:!0},{id:"delete",label:s("Delete link"),danger:!0}]);async function ee(ge){const H=t(f);if(H)switch(ge){case"edit":B(H);break;case"short":await n.links.activate(t(T),H.receiver,H.sender,!1);break;case"long":await n.links.activate(t(T),H.receiver,H.sender,!0);break;case"delete":u(a,[`${H.sender}->${H.receiver}`],!0),u(g,!0);break}}var se=lR(),Y=Ie(se),Z=w(Y),te=w(Z);{const ge=O=>{var z=sR(),ce=Ie(z);{let L=c(()=>s("Add link")),A=c(()=>!t(K)),M=c(()=>s("No channel of this interface can be the sender of a link"));Oh(ce,{get caption(){return t(L)},icon:"+",get disabled(){return t(A)},get reason(){return t(M)},testId:"links-add",onclick:()=>u(b,!0)})}var me=d(ce,2);{let L=c(()=>s("Edit link")),A=c(()=>t(ae)===void 0),M=c(()=>s("Select one link"));Ct(me,{get title(){return t(L)},icon:"⚙",get disabled(){return t(A)},get reason(){return t(M)},testId:"links-edit",onclick:()=>t(ae)&&B(t(ae))})}var be=d(me,2);{var Ee=L=>{var A=Iu(),M=Ie(A);{let Te=c(()=>s("Activate short")),Pe=c(()=>t(ae)===void 0),He=c(()=>s("Select one link"));Ct(M,{get title(){return t(Te)},icon:"▸",get disabled(){return t(Pe)},get reason(){return t(He)},testId:"links-play-short",onclick:()=>t(ae)&&void n.links.activate(t(T),t(ae).receiver,t(ae).sender,!1)})}var he=d(M,2);{let Te=c(()=>s("Activate long")),Pe=c(()=>t(ae)===void 0),He=c(()=>s("Select one link"));Ct(he,{get title(){return t(Te)},icon:"▸▸",get disabled(){return t(Pe)},get reason(){return t(He)},testId:"links-play-long",onclick:()=>t(ae)&&void n.links.activate(t(T),t(ae).receiver,t(ae).sender,!0)})}v(L,A)};$(be,L=>{t(R)&&L(Ee)})}var le=d(be,2);{let L=c(()=>s("Delete link")),A=c(()=>t(X).length===0),M=c(()=>s("Please choose one or more links"));Ct(le,{get title(){return t(L)},icon:"🗑",get disabled(){return t(A)},get reason(){return t(M)},testId:"links-delete",onclick:()=>u(g,!0)})}var G=d(le,2);{let L=c(()=>s("Refresh"));Ct(G,{get title(){return t(L)},icon:"⟳",testId:"links-refresh",onclick:()=>{n.links.load(t(T))}})}v(O,z)},H=O=>{var z=Iu(),ce=Ie(z);{var me=le=>{var G=aR(),L=m(G);E(A=>{x(G,"title",A),h(L,`${t(p)??""} ✕`)},[()=>s("Filter")]),ne("click",G,()=>u(p,"")),v(le,G)};$(ce,le=>{t(p)!==""&&le(me)})}var be=d(ce,2);{var Ee=le=>{var G=iR(),L=m(G,!0);E(A=>h(L,A),[()=>s("{count} defective links",{},t(D))]),v(le,G)};$(be,le=>{t(D)>0&&le(Ee)})}v(O,z)},pe=(O,z=Wn,ce=Wn)=>{var me=St(),be=Ie(me);{var Ee=A=>{{let M=c(()=>fe(z().SENDER)),he=c(()=>n.host.deviceImageUrl(fe(z().SENDER)));mi(A,{get deviceType(){return t(M)},get src(){return t(he)}})}},le=A=>{{let M=c(()=>fe(z().RECEIVER)),he=c(()=>n.host.deviceImageUrl(fe(z().RECEIVER)));mi(A,{get deviceType(){return t(M)},get src(){return t(he)}})}},G=A=>{const M=c(()=>Tl(z()));var he=St(),Te=Ie(he);{var Pe=He=>{var qe=oR();E((it,tt)=>{x(qe,"aria-label",it),x(qe,"title",tt)},[()=>s("Defective link"),()=>`${t(M).senderBroken?"SENDER_BROKEN ":""}${t(M).receiverBroken?"RECEIVER_BROKEN":""}`.trim()]),v(He,qe)};$(Te,He=>{t(M).broken&&He(Pe)})}v(A,he)},L=A=>{var M=Qn();E(he=>h(M,he),[()=>ce().value?ce().value(z())??"":z()[ce().key]??""]),v(A,M)};$(be,A=>{ce().key==="senderIcon"?A(Ee):ce().key==="receiverIcon"?A(le,1):ce().key==="FLAGS"?A(G,2):A(L,-1)})}v(O,me)};let ve=c(()=>s("Links")),Q=c(()=>s("Filter")),oe=c(()=>s("No data")),F=c(()=>s("Links")),W=c(()=>s("{count} links",{},t(C).length));js(te,{get rows(){return t(C)},get scope(){return t(T)},get columns(){return t(ue)},getId:O=>`${O.SENDER}->${O.RECEIVER}`,get caption(){return t(ve)},get filterLabel(){return t(Q)},get emptyText(){return t(oe)},onactivate:O=>B({sender:O.SENDER,receiver:O.RECEIVER}),onrowcontextmenu:re,get toolbarLabel(){return t(F)},get countText(){return t(W)},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:ge,status:H,cell:pe,$$slots:{toolbar:!0,status:!0,cell:!0}})}var xe=d(Y,2);{let ge=c(()=>s("Links"));Pd(xe,{get items(){return t(de)},get x(){return t(o)},get y(){return t(l)},get label(){return t(ge)},testId:"links-menu",onselect:H=>{ee(H)},get open(){return t(i)},set open(H){u(i,H,!0)}})}var J=d(xe,2);Uh(J,{onedit:ge=>B(ge),get open(){return t(b)},set open(ge){u(b,ge,!0)}});var ye=d(J,2);rR(ye,{get links(){return t(X)},get open(){return t(g)},set open(ge){u(g,ge,!0)}});var Re=d(ye,2);qh(Re,{get sender(){return t(y)},get receiver(){return t(S)},get open(){return t(k)},set open(ge){u(k,ge,!0)}}),v(r,se),ct()}yt(["click"]);function Xh(r){let e=0;const n=new Set;for(const s of r){const a=Dd(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 Qh(r,e,n){const s=r[n];return s?ki(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,...Xh(Eo(e,a.path))})):[]}function cR(r,e,n){return Object.entries(r).map(([s,a])=>{const i=Qh(r,e,s);return{id:s,kind:"enum",enumId:s,name:Ah(s,a,n),depth:0,hasChildren:i.length>0,...Xh(Eo(e,s)),nodes:i}})}function uR(r){const e=new Map;for(const n of r){e.set(n.id,n);for(const s of n.nodes??[])e.set(s.id,s)}return e}function fR(r,e=14){return Math.max(0,r-1)*e}function hR(r,e){const n=e.split("/")[0]??"";return Fh(r,n).filter(s=>gS(e,s.path))}function mR(r,e){return Eo(r,e.kind==="enum"?e.enumId:e.path??"")}function Du(r,e,n){return{...r,en:e,[n]:e}}var vR=_('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button hmm-meta-delete-danger svelte-1af2i6v"> </button>',1),pR=_('<p class="hmm-meta-delete-empty svelte-1af2i6v"> </p>'),gR=_("<li> </li>"),bR=_('<p class="hmm-meta-delete-title svelte-1af2i6v"> </p> <ul class="hmm-meta-delete-members svelte-1af2i6v"></ul>',1),_R=_('<p class="hmm-meta-delete-subject svelte-1af2i6v"> </p> <!>',1);function ER(r,e){dt(e,!0);let n=V(e,"open",15,!1),s=V(e,"labelOf",3,void 0),a=V(e,"testId",3,"meta-delete"),i=N(!1);st(()=>{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 b=vR(),g=Ie(b),k=m(g,!0),y=d(g,2),S=m(y,!0);E((T,I)=>{h(k,T),y.disabled=t(i),x(y,"data-testid",`${a()}-apply`),h(S,I)},[()=>e.t("Cancel"),()=>e.members.length===0?e.t("Delete"):e.t("Delete and detach")]),ne("click",g,()=>n(!1)),ne("click",y,()=>{o()}),v(p,b)};let f=c(()=>`${a()}-dialog`);kn(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,b)=>{var g=_R(),k=Ie(g),y=m(k,!0),S=d(k,2);{var T=C=>{var D=pR(),R=m(D,!0);E(P=>h(R,P),[()=>e.t("Nothing is assigned here")]),v(C,D)},I=C=>{var D=bR(),R=Ie(D),P=m(R,!0),K=d(R,2);je(K,20,()=>e.members,X=>X,(X,ae)=>{var ue=gR(),fe=m(ue,!0);E(B=>h(fe,B),[()=>s()===void 0?ae:s()(ae)]),v(X,ue)}),E(X=>{h(P,X),x(K,"data-testid",`${a()}-members`)},[()=>e.t("Still assigned here - the assignments are removed with the node:")]),v(C,D)};$(S,C=>{e.members.length===0?C(T):C(I,-1)})}E(()=>h(y,e.subject)),v(p,g)},$$slots:{buttons:!0,default:!0}})}ct()}yt(["click"]);var yR=_('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button"> </button>',1),SR=_("<option> </option>"),kR=_('<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 wR(r,e){dt(e,!0);let n=V(e,"open",15,!1),s=V(e,"current",3,""),a=V(e,"testId",3,"meta-move"),i=N(""),o=N(!1);st(()=>{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=b=>{var g=yR(),k=Ie(g),y=m(k,!0),S=d(k,2),T=m(S,!0);E((I,C)=>{h(y,I),S.disabled=t(o),x(S,"data-testid",`${a()}-apply`),h(T,C)},[()=>e.t("Cancel"),()=>e.t("Apply")]),ne("click",k,()=>n(!1)),ne("click",S,()=>{l()}),v(b,g)};let p=c(()=>`${a()}-dialog`);kn(r,{get title(){return e.title},width:"440px",get testId(){return t(p)},get open(){return n()},set open(b){n(b)},buttons:f,children:(b,g)=>{var k=kR(),y=Ie(k),S=m(y,!0),T=d(y,2),I=w(T),C=m(I,!0),D=d(I,2),R=w(D),P=m(R,!0);R.value=R.__value="";var K=d(R);je(K,17,()=>e.targets,X=>X.path,(X,ae)=>{var ue=SR(),fe=m(ue,!0),B={};E(re=>{h(fe,re),B!==(B=t(ae).path)&&(ue.value=(ue.__value=B)??"")},[()=>Wl(t(ae)," ")]),v(X,ue)}),Yt(D),E((X,ae,ue,fe)=>{h(S,e.subject),h(C,X),x(D,"size",ae),x(D,"aria-label",ue),x(D,"data-testid",`${a()}-parent`),h(P,fe)},[()=>e.t("Move to"),()=>Math.min(12,Math.max(4,e.targets.length+1)),()=>e.t("Move to"),()=>e.t("Top level")]),yr(D,()=>t(i),X=>u(i,X)),v(b,k)},$$slots:{buttons:!0,default:!0}})}ct()}yt(["click"]);var AR=_('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button"> </button>',1),TR=_('<label class="hmm-meta-name-row svelte-ue9nlv"><span> </span> <input class="hmm-input hmm-meta-name-input svelte-ue9nlv"/></label>');function RR(r,e){dt(e,!0);let n=V(e,"open",15,!1),s=V(e,"initial",3,""),a=V(e,"testId",3,"meta-name"),i=N(""),o=N(!1),l=N(void 0);st(()=>{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 b=await e.onapply(p);u(o,!1),b&&n(!1)}{const p=g=>{var k=AR(),y=Ie(k),S=m(y,!0),T=d(y,2),I=m(T,!0);E((C,D,R)=>{h(S,C),T.disabled=D,x(T,"data-testid",`${a()}-apply`),h(I,R)},[()=>e.t("Cancel"),()=>t(o)||t(i).trim()==="",()=>e.t("Apply")]),ne("click",y,()=>n(!1)),ne("click",T,()=>{f()}),v(g,k)};let b=c(()=>`${a()}-dialog`);kn(r,{get title(){return e.title},width:"440px",get testId(){return t(b)},get open(){return n()},set open(g){n(g)},buttons:p,children:(g,k)=>{var y=TR(),S=w(y),T=m(S,!0),I=d(S,2);fn(I,C=>u(l,C),()=>t(l)),E(()=>{h(T,e.label),x(I,"aria-label",e.label),x(I,"data-testid",`${a()}-input`)}),ne("keydown",I,C=>{C.key==="Enter"&&(C.preventDefault(),f())}),Sn(I,()=>t(i),C=>u(i,C)),v(g,y)},$$slots:{buttons:!0,default:!0}})}ct()}yt(["click","keydown"]);var xR=_("<!> <!> <!> <!> <!> <!> <!>",1),IR=_("<span> </span>"),DR=_('<span class="hmm-meta-path svelte-147hcfo"> </span>'),NR=_('<div class="hmm-page svelte-147hcfo"><div class="hmm-page-grid svelte-147hcfo"><!></div></div> <!> <!> <!>',1);function CR(r,e){dt(e,!0);let n=V(e,"enumId",3,void 0),s=V(e,"flat",3,!1),a=V(e,"available",3,!0),i=V(e,"writable",3,!0),o=V(e,"language",3,"en"),l=V(e,"labelOf",3,void 0),f=V(e,"emptyText",3,void 0),p=V(e,"countText",3,void 0),b=V(e,"tableId",3,void 0),g=V(e,"testId",3,"meta-table"),k=N(Be([])),y=N(Be([])),S=N(!1),T=N(!1),I=N("add"),C=N(""),D=N(""),R=N(""),P=N(!1),K=N(!1),X=N(void 0);const ae=c(()=>n()===void 0),ue=c(()=>!s()),fe=c(()=>n()===void 0?cR(e.enums,e.objects,o()):Qh(e.enums,e.objects,n())),B=c(()=>uR(t(fe))),re=c(()=>t(k).length===1?t(B).get(t(k)[0]??""):void 0),de=c(()=>t(re)?.kind==="node"?t(re):void 0),ee=[];st(()=>{if(!t(ae))return;const A=Object.keys(e.enums).filter(M=>!ee.includes(M));A.length>0&&(ee.push(...A),u(y,[...t(y),...A],!0))}),st(()=>{t(k).some(A=>!t(B).has(A))&&u(k,t(k).filter(A=>t(B).has(A)),!0)});const se=c(()=>a()?i()?e.t("Select a row"):e.t("The store does not take writes"):e.t("No store connected")),Y=c(()=>a()&&i()&&!t(S)),Z=c(()=>n()??t(re)?.enumId),te=c(()=>t(Y)&&t(Z)!==void 0),xe=c(()=>t(Y)&&t(ae)?e.t("Select a taxonomy or a node"):t(se)),J=c(()=>t(Y)?e.t("Select a node"):t(se)),ye=c(()=>[{key:"name",label:e.t("Name"),width:240,sortable:!t(ae),value:A=>A.name},{key:"devices",label:e.t("Devices"),width:96,align:"right",filterable:!1,sortable:!t(ae),value:A=>A.devices===0?"":A.devices},{key:"channels",label:e.t("Channels"),width:96,align:"right",filterable:!1,sortable:!t(ae),value:A=>A.channels===0?"":A.channels},{key:"path",label:e.t("Path"),width:220,mono:!0,sortable:!t(ae),value:A=>A.path??A.enumId}]);function Re(A){return A.nodes??[]}function ge(A,M){switch(u(I,A,!0),u(X,M,!0),A){case"enum":u(C,e.t("New taxonomy"),!0),u(D,e.t("Name"),!0),u(R,"");break;case"add":u(C,e.t("Add"),!0),u(D,e.t("Name"),!0),u(R,"");break;case"add-below":u(C,e.t("Add below"),!0),u(D,`${e.t("Add below")}: ${M?.name??""}`),u(R,"");break;case"rename":u(C,e.t("Rename"),!0),u(D,e.t("New name"),!0),u(R,M?.name??"",!0);break}u(T,!0)}async function H(A){u(S,!0);try{switch(t(I)){case"enum":return await e.actions.createEnum(Th(A,Object.keys(e.enums)),Du(void 0,A,o()));case"add":return t(Z)===void 0?!1:await e.actions.createNode(t(Z),void 0,A)!==void 0;case"add-below":{const M=t(X);return M?.path===void 0?!1:await e.actions.createNode(M.enumId,M.path,A)!==void 0}case"rename":{const M=t(X);return M===void 0?!1:M.kind==="enum"?await e.actions.renameEnum(M.enumId,Du(e.enums[M.enumId]?.name,A,o())):await e.actions.renameNode(M.path??"",A)}}}finally{u(S,!1)}}function pe(A){A?.path!==void 0&&(u(X,A,!0),u(P,!0))}async function ve(A){const M=t(X);if(M?.path===void 0)return!1;u(S,!0);try{return await e.actions.moveNode(M.path,A)}finally{u(S,!1)}}function Q(A){A!==void 0&&(u(X,A,!0),u(K,!0))}async function oe(A){const M=t(X);if(M===void 0)return!1;u(S,!0);try{return M.kind==="enum"?await e.actions.deleteEnum(M.enumId,A):await e.actions.deleteNode(M.path??"",A)}finally{u(S,!1)}}async function F(){u(S,!0),await e.actions.refresh(),u(S,!1)}function W(A){t(Y)&&ge("rename",A)}const O=c(()=>t(X)?.path===void 0?void 0:t(X)),z=c(()=>t(X)===void 0?[]:mR(e.objects,t(X)));var ce=NR(),me=Ie(ce),be=w(me),Ee=w(be);{const A=we=>{var j=xR(),U=Ie(j);{var Ne=Ye=>{{let Ze=c(()=>e.t("New taxonomy")),Je=c(()=>!t(Y));Ct(Ye,{get title(){return t(Ze)},icon:"⊞",get disabled(){return t(Je)},get reason(){return t(se)},testId:"meta-new-enum",onclick:()=>ge("enum",void 0)})}};$(U,Ye=>{t(ae)&&Ye(Ne)})}var Le=d(U,2);{let Ye=c(()=>e.t("Add")),Ze=c(()=>!t(te));Ct(Le,{get title(){return t(Ye)},icon:"+",get disabled(){return t(Ze)},get reason(){return t(xe)},testId:"meta-add",onclick:()=>ge("add",t(re))})}var ze=d(Le,2);{var _e=Ye=>{{let Ze=c(()=>e.t("Add below")),Je=c(()=>!t(Y)||t(de)===void 0);Ct(Ye,{get title(){return t(Ze)},icon:"⊕",get disabled(){return t(Je)},get reason(){return t(J)},testId:"meta-add-below",onclick:()=>ge("add-below",t(de))})}};$(ze,Ye=>{t(ue)&&Ye(_e)})}var De=d(ze,2);{let Ye=c(()=>e.t("Rename")),Ze=c(()=>!t(Y)||t(re)===void 0);Ct(De,{get title(){return t(Ye)},icon:"✎",get disabled(){return t(Ze)},get reason(){return t(se)},testId:"meta-rename",onclick:()=>ge("rename",t(re))})}var Ce=d(De,2);{var Fe=Ye=>{{let Ze=c(()=>e.t("Move")),Je=c(()=>!t(Y)||t(de)===void 0);Ct(Ye,{get title(){return t(Ze)},icon:"⤴",get disabled(){return t(Je)},get reason(){return t(J)},testId:"meta-move",onclick:()=>pe(t(de))})}};$(Ce,Ye=>{t(ue)&&Ye(Fe)})}var Oe=d(Ce,2);{let Ye=c(()=>e.t("Delete")),Ze=c(()=>!t(Y)||t(re)===void 0);Ct(Oe,{get title(){return t(Ye)},icon:"🗑",get disabled(){return t(Ze)},get reason(){return t(se)},testId:"meta-delete",onclick:()=>Q(t(re))})}var Xe=d(Oe,2);{let Ye=c(()=>e.t("Refresh")),Ze=c(()=>!a());Ct(Xe,{get title(){return t(Ye)},icon:"⟳",get disabled(){return t(Ze)},get busy(){return t(S)},testId:"meta-refresh",onclick:()=>{F()}})}v(we,j)},M=(we,j=Wn,U=Wn)=>{var Ne=St(),Le=Ie(Ne);{var ze=Ce=>{var Fe=IR();let Oe,Xe;var Ye=m(Fe,!0);E(Ze=>{Oe=Et(Fe,1,"hmm-meta-name svelte-147hcfo",null,Oe,{"hmm-meta-name-enum":j().kind==="enum"}),x(Fe,"data-depth",j().depth),Xe=On(Fe,"",Xe,{"padding-left":Ze}),h(Ye,j().name)},[()=>`${String(fR(j().depth))}px`]),v(Ce,Fe)},_e=Ce=>{var Fe=DR(),Oe=m(Fe,!0);E(()=>h(Oe,j().path??j().enumId)),v(Ce,Fe)},De=Ce=>{var Fe=Qn();E(Oe=>h(Fe,Oe),[()=>U().value?U().value(j())??"":""]),v(Ce,Fe)};$(Le,Ce=>{U().key==="name"?Ce(ze):U().key==="path"?Ce(_e,1):Ce(De,-1)})}v(we,Ne)};let he=c(()=>t(ae)?Re:void 0),Te=c(()=>n()??"metadata"),Pe=c(()=>n()===void 0?e.t("Metadata"):n()==="room"?e.t("Rooms"):e.t("Functions")),He=c(()=>e.t("Filter")),qe=c(()=>a()?f()??"":e.t("No store connected")),it=c(()=>e.t("No row matches the filter")),tt=c(()=>e.t("Clear filter")),Se=c(()=>p()===void 0?void 0:p()(t(fe).length));js(Ee,{get rows(){return t(fe)},get columns(){return t(ye)},getId:we=>we.id,get subRows(){return t(he)},get scope(){return t(Te)},get caption(){return t(Pe)},get filterLabel(){return t(He)},get emptyText(){return t(qe)},get noMatchText(){return t(it)},get clearFilterLabel(){return t(tt)},showingText:(we,j)=>e.t("Showing {shown} of {total}",{shown:we,total:j}),get countText(){return t(Se)},onactivate:W,get tableId(){return b()},get testId(){return g()},get selected(){return t(k)},set selected(we){u(k,we,!0)},get expanded(){return t(y)},set expanded(we){u(y,we,!0)},toolbar:A,cell:M,$$slots:{toolbar:!0,cell:!0}})}var le=d(me,2);RR(le,{get title(){return t(C)},get label(){return t(D)},get initial(){return t(R)},get t(){return e.t},onapply:H,testId:"meta-name",get open(){return t(T)},set open(A){u(T,A,!0)}});var G=d(le,2);{let A=c(()=>e.t("Move")),M=c(()=>t(O)?.name??""),he=c(()=>t(O)?.path===void 0?[]:hR(e.enums,t(O).path)),Te=c(()=>t(O)?.path===void 0?"":J_(t(O).path)??"");wR(G,{get title(){return t(A)},get subject(){return t(M)},get targets(){return t(he)},get current(){return t(Te)},get t(){return e.t},onapply:ve,testId:"meta-move",get open(){return t(P)},set open(Pe){u(P,Pe,!0)}})}var L=d(G,2);{let A=c(()=>e.t("Delete")),M=c(()=>t(X)?.name??"");ER(L,{get title(){return t(A)},get subject(){return t(M)},get members(){return t(z)},get labelOf(){return l()},get t(){return e.t},onapply:oe,testId:"meta-delete",get open(){return t(K)},set open(he){u(K,he,!0)}})}v(r,ce),ct()}function nl(r,e){dt(e,!0);let n=V(e,"enumId",3,void 0);const s=Ut(),a=s.i18n.t,i=c(()=>s.taxonomy),o={createEnum:(b,g)=>s.taxonomy.createEnum(b,g),renameEnum:(b,g)=>s.taxonomy.renameEnum(b,g),deleteEnum:(b,g)=>s.taxonomy.deleteEnum(b,g),createNode:(b,g,k)=>s.taxonomy.createNode(b,g,k),renameNode:(b,g)=>s.taxonomy.renameNode(b,g),moveNode:(b,g)=>s.taxonomy.moveNode(b,g),deleteNode:(b,g)=>s.taxonomy.deleteNode(b,g),refresh:()=>s.taxonomy.refresh()};function l(b){const g=Dd(b)?.address??b,k=s.names.name(g);return k===void 0?g:`${k} (${g})`}const f=c(()=>n()==="room"?a("No rooms yet"):n()==="function"?a("No functions yet"):a("No taxonomies yet"));function p(b){switch(n()){case"room":return a("{count} rooms",{},b);case"function":return a("{count} functions",{},b);default:return a("{count} taxonomies",{},b)}}{let b=c(()=>n()===void 0?"meta":`meta-${n()}`),g=c(()=>n()===void 0?"meta-table":`meta-table-${n()}`);CR(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(b)},get testId(){return t(g)}})}ct()}var PR=_('<span class="hmm-rssi hmm-rssi-unknown svelte-1wk3r6l" data-rssi="unknown">—</span>'),MR=_("<span></span>"),OR=_('<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){dt(e,!0);let n=V(e,"value",3,void 0),s=V(e,"labelOf",3,k=>k.label),a=V(e,"testId",3,void 0);const i=c(()=>H_(n())),o=c(()=>t(i)===void 0?void 0:`${String(n())} dBm · ${s()(t(i))}`),l=[1,2,3,4];var f=St(),p=Ie(f);{var b=k=>{var y=PR();E(()=>x(y,"data-testid",a())),v(k,y)},g=k=>{var y=OR(),S=w(y),T=m(S,!0),I=d(S);je(I,20,()=>l,C=>C,(C,D)=>{var R=MR();let P;E(()=>P=Et(R,1,"hmm-rssi-bar svelte-1wk3r6l",null,P,{"hmm-rssi-bar-off":D>t(i).bars})),v(C,R)}),E(()=>{Et(y,1,`hmm-rssi hmm-rssi-${t(i).step??""}`,"svelte-1wk3r6l"),x(y,"title",t(o)),x(y,"aria-label",t(o)),x(y,"data-rssi",t(i).step),x(y,"data-bars",t(i).bars),x(y,"data-testid",a()),h(T,n())}),v(k,y)};$(p,k=>{t(i)===void 0?k(b):k(g,-1)})}v(r,f),ct()}var LR=_('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="best-receiver-confirm"> </button>',1),FR=_('<p class="hmm-best-receiver-empty svelte-1gd5w9r" data-testid="best-receiver-empty"> </p>'),GR=_('<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>'),UR=_('<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>'),BR=_('<p class="hmm-best-receiver-progress svelte-1gd5w9r" data-testid="best-receiver-progress"> </p>'),VR=_('<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 HR(r,e){dt(e,!0);let n=V(e,"open",15,!1);const s=Ut(),a=s.i18n.t;let i=N(Be(Il)),o=N(Be({})),l=N(!1),f=N(Be({done:0,total:0}));const p=c(()=>s.app.selectedInterface),b=c(()=>s.devices.devices(t(p))),g=c(()=>s.radio.gateways(t(p))),k=c(()=>s.radio.proposeReceivers(t(p),t(b),t(i))),y=c(()=>t(k).filter(P=>P.verdict==="switch"||P.verdict==="marginal"||P.verdict==="unheard")),S=c(()=>({keep:t(k).filter(P=>P.verdict==="keep").length,unmeasured:t(k).filter(P=>P.verdict==="unmeasured").length,roaming:t(k).filter(P=>P.verdict==="roaming").length})),T=c(()=>t(y).filter(P=>I(P)));function I(P){return t(o)[P.address]??P.verdict==="switch"}function C(P){if(P===void 0||P==="")return"—";const K=t(g).find(X=>X.ADDRESS===P);return K?Ia(K):P}function D(P){const K=Number.parseInt(P,10);u(i,Number.isFinite(K)?Math.max(0,K):Il,!0),u(o,{},!0)}st(()=>{n()&&(u(o,{},!0),u(f,{done:0,total:0},!0))});async function R(){const P=t(T).filter(X=>X.best!==void 0);u(l,!0),u(f,{done:0,total:P.length},!0);let K=0;for(const X of P)await s.radio.setBidcosInterface(t(p),X.address,X.best??"",!1)||(K+=1),u(f,{done:t(f).done+1,total:P.length},!0);await s.devices.load(t(p),{refresh:!0}),await s.radio.load(t(p)),u(o,{},!0),u(l,!1),K===0&&n(!1)}{const P=X=>{var ae=LR(),ue=Ie(ae),fe=m(ue,!0),B=d(ue,2),re=m(B,!0);E((de,ee)=>{ue.disabled=t(l),h(fe,de),B.disabled=t(l)||t(T).length===0,h(re,ee)},[()=>a("Cancel"),()=>a("Assign ({count})",{count:t(T).length})]),ne("click",ue,()=>n(!1)),ne("click",B,()=>{R()}),v(X,ae)};let K=c(()=>a("Best receiver"));kn(r,{get title(){return t(K)},width:"800px",testId:"best-receiver-dialog",get open(){return n()},set open(X){n(X)},buttons:P,children:(X,ae)=>{var ue=VR(),fe=Ie(ue),B=m(fe,!0),re=d(fe,2),de=w(re),ee=w(de),se=m(ee,!0),Y=d(ee,2),Z=d(de,2),te=m(Z,!0),xe=d(re,2);{var J=ve=>{var Q=FR(),oe=m(Q,!0);E(F=>h(oe,F),[()=>a("Every device is on the receiver that hears it best")]),v(ve,Q)},ye=ve=>{var Q=UR(),oe=w(Q),F=w(oe),W=w(F),O=d(w(W)),z=m(O,!0),ce=d(O,2),me=m(ce,!0),be=d(ce,2),Ee=m(be,!0),le=d(be,2),G=m(le,!0),L=d(F);je(L,21,()=>t(y),A=>A.address,(A,M)=>{var he=GR(),Te=w(he),Pe=w(Te),He=d(Te),qe=m(He,!0),it=d(He),tt=m(it,!0),Se=d(it),we=m(Se,!0),j=d(Se),U=w(j);Ca(U,{get value(){return t(M).configuredTx},labelOf:Ze=>a(Ze.label)});var Ne=d(j),Le=m(Ne,!0),ze=d(Ne),_e=w(ze);Ca(_e,{get value(){return t(M).bestTx},labelOf:Ze=>a(Ze.label)});var De=d(ze),Ce=m(De,!0),Fe=d(De),Oe=w(Fe);{var Xe=Ze=>{var Je=Qn();E(at=>h(Je,at),[()=>a("Below the margin")]),v(Ze,Je)},Ye=Ze=>{var Je=Qn();E(at=>h(Je,at),[()=>a("Not heard by the configured receiver")]),v(Ze,Je)};$(Oe,Ze=>{t(M).verdict==="marginal"?Ze(Xe):t(M).verdict==="unheard"&&Ze(Ye,1)})}E((Ze,Je,at,gt,mt)=>{x(he,"data-testid",`best-receiver-row-${t(M).address}`),x(he,"data-verdict",t(M).verdict),Cr(Pe,Ze),Pe.disabled=t(l),x(Pe,"aria-label",t(M).address),x(Pe,"data-testid",`best-receiver-check-${t(M).address}`),h(qe,Je),h(tt,t(M).address),h(we,at),h(Le,gt),x(De,"data-testid",`best-receiver-gain-${t(M).address}`),h(Ce,mt)},[()=>I(t(M)),()=>s.nameOf(t(M).address),()=>C(t(M).configured),()=>C(t(M).best),()=>t(M).gain===void 0?"—":`+${String(t(M).gain)} dB`]),ne("change",Pe,Ze=>{u(o,{...t(o),[t(M).address]:Ze.currentTarget.checked},!0)}),v(A,he)}),E((A,M,he,Te)=>{h(z,A),h(me,M),h(Ee,he),h(G,Te)},[()=>a("Name"),()=>a("Configured"),()=>a("Proposed"),()=>a("Gain")]),v(ve,Q)};$(xe,ve=>{t(y).length===0?ve(J):ve(ye,-1)})}var Re=d(xe,2),ge=m(Re,!0),H=d(Re,2);{var pe=ve=>{var Q=BR(),oe=m(Q,!0);E(F=>h(oe,F),[()=>a("{done} of {total} assigned",t(f))]),v(ve,Q)};$(H,ve=>{t(l)&&ve(pe)})}E((ve,Q,oe,F)=>{h(B,ve),h(se,Q),on(Y,t(i)),Y.disabled=t(l),h(te,oe),h(ge,F)},[()=>a("Which interface receives each device best, from the levels the interfaces last measured. Nothing is written until you confirm; every device is one setBidcosInterface."),()=>a("Margin"),()=>a("A switch is proposed only when the best interface receives the device at least this much better than the configured one - two reads of the same link differ by a few dB."),()=>a("Not listed: {keep} on their best receiver, {unmeasured} without a measurement, {roaming} roaming",t(S))]),ne("input",Y,ve=>D(ve.currentTarget.value)),v(X,ue)},$$slots:{buttons:!0,default:!0}})}ct()}yt(["click","input","change"]);var zR=_('<button type="button" class="hmm-button"> </button> <button type="button" class="hmm-button" data-testid="set-interface-confirm"> </button>',1),jR=_("<option> </option>"),WR=_('<span class="hmm-set-interface-name svelte-1s1hrfj"> </span>'),KR=_('<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>'),YR=_('<p class="hmm-set-interface-best-note svelte-1s1hrfj" data-testid="set-interface-best"> </p>'),qR=_('<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),$R=_('<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 XR(r,e){dt(e,!0);let n=V(e,"open",15,!1),s=V(e,"address",3,""),a=V(e,"preset",3,"");const i=Ut(),o=i.i18n.t;let l=N(""),f=N(!1),p=N(!1);const b=c(()=>i.app.selectedInterface),g=c(()=>i.devices.index(t(b))?.get(s())),k=c(()=>i.radio.gateways(t(b))),y=c(()=>i.radio.bestGatewayFor(t(b),s())),S=c(()=>t(g)?.INTERFACE??"");st(()=>{if(!n())return;const I=t(k).some(C=>C.ADDRESS===a());u(l,I?a():t(g)?.INTERFACE??t(k)[0]?.ADDRESS??"",!0),u(f,t(g)===void 0?!1:yd(t(g)),!0)});async function T(){u(p,!0);const I=await i.radio.setBidcosInterface(t(b),s(),t(l),t(f));I&&await i.devices.load(t(b),{refresh:!0}),u(p,!1),I&&n(!1)}kn(r,{title:"setBidcosInterface",width:"560px",testId:"set-interface-dialog",get open(){return n()},set open(C){n(C)},buttons:C=>{var D=zR(),R=Ie(D),P=m(R,!0),K=d(R,2),X=m(K,!0);E((ae,ue)=>{h(P,ae),K.disabled=t(p)||t(l)==="",h(X,ue)},[()=>o("Cancel"),()=>o("Apply")]),ne("click",R,()=>n(!1)),ne("click",K,()=>{T()}),v(C,D)},children:(C,D)=>{var R=$R(),P=Ie(R),K=w(P),X=d(K),ae=m(X,!0),ue=d(P,2),fe=w(ue),B=d(fe),re=m(B,!0),de=d(ue,2),ee=w(de),se=m(ee,!0),Y=d(ee,2);je(Y,21,()=>t(k),ye=>ye.ADDRESS,(ye,Re)=>{var ge=jR(),H=m(ge),pe={};E(()=>{h(H,`${t(Re).ADDRESS??""}
|
|
20
|
+
${t(Re).DESCRIPTION??t(Re).TYPE??""}`),pe!==(pe=t(Re).ADDRESS)&&(ge.value=(ge.__value=pe)??"")}),v(ye,ge)}),Yt(Y);var Z=d(de,2),te=d(w(Z),2),xe=d(Z,2);{var J=ye=>{var Re=qR(),ge=Ie(Re),H=w(ge),pe=w(H),ve=d(w(pe)),Q=m(ve,!0),oe=d(H);je(oe,21,()=>t(k),O=>O.ADDRESS,(O,z)=>{const ce=c(()=>i.radio.pair(t(b),s(),t(z).ADDRESS));var me=KR();let be;var Ee=w(me),le=m(Ee,!0),G=d(Ee),L=w(G),A=m(L,!0),M=d(L,2);{var he=tt=>{var Se=WR(),we=m(Se,!0);E(j=>h(we,j),[()=>Ia(t(z))]),v(tt,Se)},Te=c(()=>Ia(t(z))!==t(z).ADDRESS);$(M,tt=>{t(Te)&&tt(he)})}var Pe=d(G),He=w(Pe);{let tt=c(()=>t(ce)?.rx);Ca(He,{get value(){return t(tt)},labelOf:Se=>o(Se.label)})}var qe=d(Pe),it=w(qe);{let tt=c(()=>t(ce)?.tx),Se=c(()=>`set-interface-tx-${t(z).ADDRESS}`);Ca(it,{get value(){return t(tt)},labelOf:we=>o(we.label),get testId(){return t(Se)}})}E(tt=>{x(me,"data-testid",`set-interface-row-${t(z).ADDRESS}`),x(me,"aria-current",t(S)===t(z).ADDRESS?"true":void 0),be=Et(me,1,"svelte-1s1hrfj",null,be,{"hmm-set-interface-configured":t(S)===t(z).ADDRESS}),x(Ee,"title",tt),h(le,t(S)===t(z).ADDRESS?"◉":""),h(A,t(z).ADDRESS)},[()=>t(S)===t(z).ADDRESS?o("Configured"):void 0]),v(O,me)});var F=d(ge,2);{var W=O=>{var z=YR(),ce=m(z,!0);E(me=>h(ce,me),[()=>o("Heard best by {address}",{address:t(y).address})]),v(O,z)};$(F,O=>{t(y)&&O(W)})}E(O=>h(Q,O),[()=>o("Interface")]),v(ye,Re)};$(xe,ye=>{t(k).length>0&&ye(J)})}E((ye,Re,ge)=>{h(K,`${ye??""} `),h(ae,s()),h(fe,`${Re??""}: `),h(re,t(S)===""?"—":t(S)),h(se,ge)},[()=>i.nameOf(s()),()=>o("Configured"),()=>o("Interface")]),yr(Y,()=>t(l),ye=>u(l,ye)),hr(te,()=>t(f),ye=>u(f,ye)),v(C,R)},$$slots:{buttons:!0,default:!0}}),ct()}yt(["click"]);var QR=_("<!> <!>",1),ZR=_("<!> <!> <!>",1),JR=_('<button type="button"> </button>'),ex=_('<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 tx(r,e){dt(e,!0);const n=Ut(),s=n.i18n.t;let a=N(Be([])),i=N(Be([])),o=N(Be([])),l=N(!1),f=N(!1),p=N(""),b=N("");const g=c(()=>n.app.selectedInterface),k=c(()=>n.radio.gateways(t(g))),y=c(()=>n.interfaces.typeOf(t(g)).startsWith("BidCos"));function S(Z,te=""){u(p,Z,!0),u(b,te,!0),u(l,!0)}const T=c(()=>n.devices.devices(t(g))),I=c(()=>t(i).length===1?t(i)[0]??"":""),C=[{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:Z=>Z.CONNECTED===!0?"✔":"✕"},{key:"DEFAULT",label:"DEFAULT",width:90,align:"center",value:Z=>Z.DEFAULT===!0?"✔":""},{key:"DUTY_CYCLE",label:"DUTY_CYCLE",width:100,align:"right",value:Z=>Z.DUTY_CYCLE===void 0?"":`${Z.DUTY_CYCLE} %`},{key:"CARRIER_SENSE_LEVEL",label:"CARRIER_SENSE_LEVEL",align:"right"}],D=c(()=>[{key:"icon",label:"",width:hi,fixed:!0,sortable:!1,filterable:!1,align:"center",value:()=>""},{key:"name",label:s("Name"),width:180,copy:"name",value:Z=>n.nameOf(Z.ADDRESS)},{key:"ADDRESS",label:"ADDRESS",width:140,mono:!0,copy:"address"},{key:"TYPE",label:"TYPE",width:150},{key:"INTERFACE",label:"INTERFACE",width:140,mono:!0,hidden:!t(y)},{key:"RF_ADDRESS",label:"RF_ADDRESS",width:100,align:"right",value:Z=>Z.RF_ADDRESS===void 0?"":Z.RF_ADDRESS.toString(16).toUpperCase()},{key:"ROAMING",label:"ROAMING",width:90,align:"center",hidden:!t(y),value:Z=>yd(Z)?"✔":""},{key:"unreach",label:s("Unreach"),width:90,align:"right",filterable:!1,value:Z=>{const te=n.unreach.countOf(t(g),Z.ADDRESS);return te===0?"":te}},...t(k).flatMap(Z=>[{key:`rx:${Z.ADDRESS}`,label:"← dBm",width:90,align:"right",filterable:!1,value:te=>n.radio.pair(t(g),te.ADDRESS,Z.ADDRESS)?.rx??""},{key:`tx:${Z.ADDRESS}`,label:"→ dBm",width:90,align:"right",filterable:!1,value:te=>n.radio.pair(t(g),te.ADDRESS,Z.ADDRESS)?.tx??""},{key:`set:${Z.ADDRESS}`,label:"",hidden:!t(y),width:gy,fixed:!0,align:"center",sortable:!1,filterable:!1,value:te=>te.INTERFACE===Z.ADDRESS?"◉":""}])]),R=c(()=>t(k).map(Z=>({key:Z.ADDRESS,label:Z.ADDRESS,sublabel:Ia(Z)===Z.ADDRESS?void 0:`(${Ia(Z)})`,columns:t(y)?[`rx:${Z.ADDRESS}`,`tx:${Z.ADDRESS}`,`set:${Z.ADDRESS}`]:[`rx:${Z.ADDRESS}`,`tx:${Z.ADDRESS}`]}))),P=c(()=>[{key:"name",label:s("Name"),width:180,copy:"name",value:Z=>n.nameOf(Z.ADDRESS)},{key:"ADDRESS",label:s("Peer"),width:200,mono:!0,copy:"address"},{key:"rx",label:"← dBm",width:120,align:"right",filterable:!1,value:()=>""},{key:"tx",label:"→ dBm",width:120,align:"right",filterable:!1,value:()=>""}]);function K(Z){const te=n.devices.index(t(g));return n.radio.peersOf(t(g),Z.ADDRESS).map(xe=>te?.get(xe)??{ADDRESS:xe,TYPE:"",PARENT:Z.ADDRESS}).map(xe=>({...xe,PARENT:Z.ADDRESS}))}function X(Z){return n.devices.index(t(g))?.get(Z)?.ADDRESS??Z}async function ae(){await Promise.all([n.radio.load(t(g)),n.devices.load(t(g),{refresh:!0}),n.interfaces.load(),n.unreach.load()])}st(()=>{const Z=t(g);Z!==""&&n.radio.ensureMatrix(Z)}),st(()=>{n.unreach.counters.length===0&&n.unreach.load()});var ue=ex(),fe=Ie(ue),B=w(fe),re=w(B);{let Z=c(()=>s("Interfaces")),te=c(()=>s("Filter")),xe=c(()=>s("No data"));js(re,{get rows(){return t(k)},get columns(){return C},getId:J=>J.ADDRESS,height:110,columnFilterRow:!1,get caption(){return t(Z)},get filterLabel(){return t(te)},get emptyText(){return t(xe)},tableId:"radio-interfaces",testId:"radio-gateways",get selected(){return t(a)},set selected(J){u(a,J,!0)}})}var de=d(B,2),ee=w(de);{const Z=ve=>{var Q=ZR(),oe=Ie(Q);{let z=c(()=>s("Refresh")),ce=c(()=>n.radio.loading||n.devices.isLoading(t(g)));Ct(oe,{get title(){return t(z)},icon:"⟳",get busy(){return t(ce)},testId:"radio-refresh",onclick:()=>{ae()}})}var F=d(oe,2);{var W=z=>{var ce=QR(),me=Ie(ce);{let Ee=c(()=>t(I)===""),le=c(()=>s("Select a device"));Ct(me,{title:"setBidcosInterface",icon:"⇄",get disabled(){return t(Ee)},get reason(){return t(le)},testId:"radio-set-interface",onclick:()=>S(t(I))})}var be=d(me,2);{let Ee=c(()=>s("Assign the best receiver")),le=c(()=>t(k).length<2),G=c(()=>s("Only one interface"));Ct(be,{get title(){return t(Ee)},icon:"⇶",get disabled(){return t(le)},get reason(){return t(G)},testId:"radio-best-receivers",onclick:()=>u(f,!0)})}v(z,ce)};$(F,z=>{t(y)&&z(W)})}var O=d(F,2);{let z=c(()=>s("Reset the unreach counters")),ce=c(()=>n.unreach.of(t(g)).length===0),me=c(()=>s("No data"));Ct(O,{get title(){return t(z)},icon:"⟲",get disabled(){return t(ce)},get reason(){return t(me)},testId:"radio-reset-unreach",onclick:()=>{n.unreach.reset(t(g))}})}v(ve,Q)},te=(ve,Q=Wn,oe=Wn,F=Wn)=>{var W=St(),O=Ie(W);{var z=L=>{{let A=c(()=>n.host.deviceImageUrl(Q().TYPE));mi(L,{get deviceType(){return Q().TYPE},get src(){return t(A)}})}},ce=L=>{const A=c(()=>n.radio.pair(t(g),X(F().rootId),Q().ADDRESS));{let M=c(()=>oe().key==="rx"?t(A)?.rx:t(A)?.tx),he=c(()=>`rssi-${F().rootId}-${Q().ADDRESS}-${oe().key}`);Ca(L,{get value(){return t(M)},labelOf:Te=>s(Te.label),get testId(){return t(he)}})}},me=L=>{const A=c(()=>oe().key.slice(4)),M=c(()=>Q().INTERFACE===t(A));var he=JR();let Te;var Pe=m(he,!0);E(He=>{Te=Et(he,1,"hmm-receiver-mark svelte-7f5yr6",null,Te,{"hmm-receiver-configured":t(M)}),x(he,"aria-pressed",t(M)),x(he,"title",He),x(he,"data-testid",`receiver-${Q().ADDRESS}-${t(A)}`),h(Pe,t(M)?"◉":"○")},[()=>t(M)?`${s("Configured")}: ${t(A)}`:s("Use {interface} as receiver",{interface:t(A)})]),ne("click",he,He=>{He.stopPropagation(),S(Q().ADDRESS,t(A))}),v(L,he)},be=c(()=>oe().key.startsWith("set:")&&F().depth===0),Ee=L=>{const A=c(()=>oe().key.slice(3)),M=c(()=>n.radio.pair(t(g),Q().ADDRESS,t(A)));{let he=c(()=>oe().key.startsWith("rx:")?t(M)?.rx:t(M)?.tx),Te=c(()=>`rssi-${Q().ADDRESS}-${t(A)}-${oe().key.slice(0,2)}`);Ca(L,{get value(){return t(he)},labelOf:Pe=>s(Pe.label),get testId(){return t(Te)}})}},le=c(()=>oe().key.startsWith("rx:")||oe().key.startsWith("tx:")),G=L=>{var A=Qn();E(M=>h(A,M),[()=>oe().value?oe().value(Q())??"":Q()[oe().key]??""]),v(L,A)};$(O,L=>{oe().key==="icon"?L(z):F().depth>0&&(oe().key==="rx"||oe().key==="tx")?L(ce,1):t(be)?L(me,2):t(le)?L(Ee,3):L(G,-1)})}v(ve,W)};let xe=c(()=>s("RSSI")),J=c(()=>s("Filter")),ye=c(()=>s("No data")),Re=c(()=>s("No row matches the filter")),ge=c(()=>s("Clear filter")),H=c(()=>s("RSSI")),pe=c(()=>s("{count} devices",{},t(T).length));js(ee,{get rows(){return t(T)},get columns(){return t(D)},get columnGroups(){return t(R)},get subColumns(){return t(P)},get scope(){return t(g)},getId:ve=>ve.ADDRESS,subRows:K,get caption(){return t(xe)},get filterLabel(){return t(J)},get emptyText(){return t(ye)},get noMatchText(){return t(Re)},get clearFilterLabel(){return t(ge)},showingText:(ve,Q)=>s("Showing {shown} of {total}",{shown:ve,total:Q}),onactivate:ve=>S(ve.ADDRESS),get toolbarLabel(){return t(H)},get countText(){return t(pe)},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:Z,cell:te,$$slots:{toolbar:!0,cell:!0}})}var se=d(fe,2);XR(se,{get address(){return t(p)},get preset(){return t(b)},get open(){return t(l)},set open(Z){u(l,Z,!0)}});var Y=d(se,2);HR(Y,{get open(){return t(f)},set open(Z){u(f,Z,!0)}}),v(r,ue),ct()}yt(["click"]);function nx(r,e,n=[]){const s=new Map;for(const b of r)s.set(b.interfaceName,(s.get(b.interfaceName)??0)+1);const a=[...new Set([...n,...s.keys()])],i=s.get(e)??0,o=a.filter(b=>b!==e&&(s.get(b)??0)>0).map(b=>({interfaceName:b,count:s.get(b)??0})),l=a.indexOf(e),p=[...a.slice(l+1),...a.slice(0,Math.max(l,0))].find(b=>o.some(g=>g.interfaceName===b));return{own:i,total:r.length,others:o,next:p}}var rx=_('<button type="button" class="hmm-total-button svelte-u6ol56" data-testid="messages-total"> </button>'),sx=_("<!> <!> <!>",1),rl=_("<span> </span>"),ax=_('<button type="button" class="hmm-inline-button svelte-u6ol56"> </button> <span hidden=""> </span>',1),ix=_('<div class="hmm-page svelte-u6ol56"><div class="hmm-page-grid svelte-u6ol56"><!></div></div>');function ox(r,e){dt(e,!0);const n=Ut(),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)&&ci(t(o),n.interfaces.typeOf(t(o)))),p=c(()=>n.serviceMessages.of(t(o))),b=c(()=>n.serviceMessages.acknowledgeable(t(o))),g=c(()=>t(p).filter(B=>t(a).includes(T(B)))),k=c(()=>t(g).filter(B=>uo(B.datapoint))),y=c(()=>nx(n.serviceMessages.messages,t(o),n.interfaces.states.map(B=>B.name))),S=c(()=>t(y).next===void 0?"":s("Also on this box: {list}. Click to switch to {next}.",{list:t(y).others.map(B=>`${B.interfaceName} (${String(B.count)})`).join(", "),next:t(y).next}));function T(B){return`${B.address}/${B.datapoint}`}function I(B,re){return re?s("The CCU reports {datapoint} for this channel again: lifts the suppression (suppressServiceMessages with suppress=false).",{datapoint:B.datapoint}):s("The CCU stops reporting {datapoint} for this channel: the HmIP interface reports a value that raises no message (suppressServiceMessages). The device's other messages are not affected. Undo with “Unsuppress”.",{datapoint:B.datapoint})}function C(B){return n.devices.index(t(o))?.get(xa(B))?.TYPE??""}st(()=>{t(f)&&t(p).length>0&&n.serviceMessages.loadSuppressed(t(o))}),st(()=>{t(p).some(B=>typeof B.value=="number")&&n.serviceMessages.loadDescriptions(t(o))});function D(B){const re=n.serviceMessages.valueName(B);if(re===void 0)return io(B.value);const de=n.devices.index(t(o))?.get(B.address)?.TYPE??"";return n.meta.valueLabel(B.datapoint,re,de)}function R(B){const re=n.serviceMessages.valueName(B);return re===void 0?void 0:`${re} (${io(B.value)})`}async function P(B,re){u(i,!0);const de=await n.serviceMessages.suppress(t(o),B.address,B.datapoint,re);u(i,!1),de&&n.notices.push("info",`suppressServiceMessages ${B.address} ${B.datapoint} = ${re?"true":"false"}`)}const K=c(()=>[{key:"icon",label:"",width:hi,fixed:!0,sortable:!1,filterable:!1,align:"center",value:()=>""},{key:"name",label:s("Name"),width:220,copy:"name",value:B=>n.nameOf(B.address)},{key:"address",label:"ADDRESS",width:160,mono:!0,copy:"address"},{key:"device",label:`${s("Device")} ADDRESS`,width:140,mono:!0,value:B=>xa(B.address)},{key:"datapoint",label:s("Message"),width:180},{key:"value",label:s("Value"),width:160,value:D},{key:"explanation",label:"",sortable:!1,value:B=>{const re=Lh(B.datapoint,!t(l));return re===void 0?"":s(re)}},{key:"since",label:s("Since"),width:170,value:B=>Ja(B.since)},...t(f)?[{key:"suppress",label:"",width:tu,minWidth:tu,keepMinWidth:!0,sortable:!1,filterable:!1,value:B=>n.serviceMessages.isSuppressed(B)?s("suppressed"):""}]:[]]);async function X(B){u(i,!0);const re=await n.serviceMessages.acknowledgeMany(B);u(i,!1),n.notices.push("info",s("{count} service messages",{},re))}var ae=ix(),ue=w(ae),fe=w(ue);{const B=xe=>{var J=St(),ye=Ie(J);{var Re=ge=>{const H=c(()=>t(y).next);si(ge,{get text(){return t(S)},testId:"messages-total-tooltip",children:(pe,ve)=>{var Q=rx(),oe=m(Q,!0);E(F=>h(oe,F),[()=>s("{count} of {total} on this box",{total:t(y).total},t(y).own)]),ne("click",Q,()=>{n.selectInterface(t(H))}),v(pe,Q)},$$slots:{default:!0}})};$(ye,ge=>{t(y).next!==void 0&&ge(Re)})}v(xe,J)},re=xe=>{var J=sx(),ye=Ie(J);{let H=c(()=>s("Refresh"));Ct(ye,{get title(){return t(H)},icon:"⟳",get busy(){return n.serviceMessages.loading},testId:"messages-refresh",onclick:()=>{n.serviceMessages.refresh(t(o))}})}var Re=d(ye,2);{let H=c(()=>s("Acknowledge service messages")),pe=c(()=>t(i)||t(k).length===0),ve=c(()=>s("Only STICKY_UNREACH and SABOTAGE can be acknowledged"));Ct(Re,{get title(){return t(H)},icon:"✔",get disabled(){return t(pe)},get reason(){return t(ve)},testId:"messages-ack",onclick:()=>{X(t(k))}})}var ge=d(Re,2);{let H=c(()=>s("Acknowledge all service messages")),pe=c(()=>t(i)||t(b).length===0),ve=c(()=>s("Only STICKY_UNREACH and SABOTAGE can be acknowledged"));Ct(ge,{get title(){return t(H)},icon:"✔✔",get disabled(){return t(pe)},get reason(){return t(ve)},testId:"messages-ack-all",onclick:()=>{X(t(b))}})}v(xe,J)},de=(xe,J=Wn,ye=Wn)=>{var Re=St(),ge=Ie(Re);{var H=W=>{{let O=c(()=>C(J().address)),z=c(()=>n.host.deviceImageUrl(C(J().address)));mi(W,{get deviceType(){return t(O)},get src(){return t(z)}})}},pe=W=>{var O=rl();let z;var ce=m(O,!0);E((me,be)=>{z=Et(O,1,"hmm-msg-name svelte-u6ol56",null,z,{"hmm-msg-ackable":me,"hmm-msg-rega":J().source==="rega"}),x(O,"title",be),x(O,"data-listed-by",J().source??"interface"),x(O,"data-testid",`message-${J().address}-${J().datapoint}`),h(ce,J().datapoint)},[()=>uo(J().datapoint),()=>J().source==="rega"?s("Listed by the CCU only; the interface no longer reports it"):void 0]),v(W,O)},ve=W=>{var O=rl(),z=m(O,!0);E((ce,me)=>{x(O,"title",ce),x(O,"data-testid",`message-value-${J().address}-${J().datapoint}`),h(z,me)},[()=>R(J()),()=>D(J())]),v(W,O)},Q=W=>{var O=rl(),z=m(O,!0);E((ce,me)=>{x(O,"title",ce),x(O,"data-testid",`message-since-${J().address}-${J().datapoint}`),x(O,"data-source",J().sinceSource??"local"),h(z,me)},[()=>J().sinceSource==="rega"?s("First reported, from the CCU"):J().sinceSource==="system"?s("Last changed, from the openccu-lite system"):s("First seen by the Homematic Manager"),()=>Ja(J().since)]),v(W,O)},oe=W=>{const O=c(()=>n.serviceMessages.isSuppressed(J())),z=c(()=>I(J(),t(O))),ce=c(()=>`suppress-help-${J().address}-${J().datapoint}`);{let me=c(()=>`suppress-tooltip-${J().address}-${J().datapoint}`);si(W,{get text(){return t(z)},get testId(){return t(me)},children:(be,Ee)=>{var le=ax(),G=Ie(le),L=m(G,!0),A=d(G,2),M=m(A,!0);E(he=>{G.disabled=t(i),x(G,"aria-describedby",t(ce)),x(G,"data-testid",`suppress-${J().address}-${J().datapoint}`),h(L,he),x(A,"id",t(ce)),h(M,t(z))},[()=>t(O)?s("Unsuppress"):s("Suppress")]),ne("click",G,he=>{he.stopPropagation(),P(J(),!t(O))}),v(be,le)},$$slots:{default:!0}})}},F=W=>{var O=Qn();E(z=>h(O,z),[()=>ye().value?ye().value(J())??"":J()[ye().key]??""]),v(W,O)};$(ge,W=>{ye().key==="icon"?W(H):ye().key==="datapoint"?W(pe,1):ye().key==="value"?W(ve,2):ye().key==="since"?W(Q,3):ye().key==="suppress"?W(oe,4):W(F,-1)})}v(xe,Re)};let ee=c(()=>s("Service messages")),se=c(()=>s("Filter")),Y=c(()=>s("No data")),Z=c(()=>s("Service messages")),te=c(()=>t(y).next===void 0?s("{count} service messages",{},t(p).length):void 0);js(fe,{get rows(){return t(p)},get scope(){return t(o)},get columns(){return t(K)},getId:T,get caption(){return t(ee)},get filterLabel(){return t(se)},get emptyText(){return t(Y)},get toolbarLabel(){return t(Z)},get countText(){return t(te)},tableId:"messages",testId:"messages-table",get selected(){return t(a)},set selected(xe){u(a,xe,!0)},status:B,toolbar:re,cell:de,$$slots:{status:!0,toolbar:!0,cell:!0}})}v(r,ae),ct()}yt(["click"]);var lx=_('<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),dx=_('<button type="button" class="hmm-button hmm-header-changes" data-testid="change-set-open"> </button>'),cx=_('<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>'),ux=_('<p class="hmm-empty svelte-1n46o8q"> </p>'),fx=_('<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 hx(r,e){dt(e,!0);const n="https://github.com/hobbyquaker/homematic-manager",s=`${n}/releases`;let a=V(e,"stores",7);jg(Er(()=>a())),Ep({columnWidths:Er(()=>a().app.columnWidths),t:(H,pe)=>a().i18n.t(H,pe)});let i=N(!1);const o=c(()=>a().i18n.t),l=c(()=>a().app);function f(H){a().console.recall(H),t(l).selectedInterface!==H.interfaceName&&a().selectInterface(H.interfaceName),t(l).setTab("console")}const p={local:()=>t(o)("This profile"),occulite:()=>"occulited",rega:()=>"ReGaHSS"},b={devices:"Devices",groups:"Groups",links:"Links",rssi:"RSSI",console:"RPC Console",messages:"Service messages",events:"Events",rooms:"Rooms",functions:"Functions",metadata:"Metadata"},g=c(()=>{const H=a().taxonomy.state;if(H===void 0)return;const pe=p[H.provider]();return{id:pd,label:pe,mark:Wp(H),title:Kp(H,{label:pe,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:H.reachable,provider:H.provider}}),k=c(()=>a().tabs.map(H=>({id:H,label:t(o)(b[H]),...H==="messages"?{badge:a().serviceMessages.countOf(t(l).selectedInterface)}:{}}))),y=c(()=>Object.fromEntries(a().interfaces.states.map(H=>{const pe=a().devices.index(H.name),ve=a().radio.gateways(H.name).map(Q=>Q.DUTY_CYCLE).filter(Q=>typeof Q=="number");return[H.name,{...pe===void 0?{}:{devices:pe.devices().length},...ve.length===0?{}:{dutyCycle:Math.max(...ve)}}]})));st(()=>{document.documentElement.lang=a().i18n.language});const S=c(()=>a().shell.theme??t(l).theme);st(()=>{const H=document.documentElement;t(S)==="system"?H.removeAttribute("data-theme"):H.setAttribute("data-theme",t(S)),a().host.setTheme(t(S))}),st(()=>a().host.onMenuAction(()=>{t(l).configDialogOpen=!0}));var T=fx(),I=w(T),C=w(I);{let H=c(()=>t(o)("Select an interface")),pe=c(()=>t(o)("Interfaces")),ve=c(()=>t(o)("Connected")),Q=c(()=>t(o)("Not connected")),oe=c(()=>t(o)("Not present")),F=c(()=>t(o)("Not answering")),W=c(()=>t(o)("Retry now")),O=c(()=>t(o)("Subscribing")),z=c(()=>t(o)("Waiting")),ce=c(()=>t(o)("Reconnecting")),me=c(()=>t(o)("All interfaces are connected")),be=c(()=>t(o)("Not every interface is connected")),Ee=c(()=>t(o)("Port")),le=c(()=>t(l).config?.publishCallbackPorts===!0),G=c(()=>t(o)("Publish this port unchanged")),L=c(()=>t(o)("Use automatic"));Hp(C,{get interfaces(){return a().interfaces.states},get selected(){return t(l).selectedInterface},get host(){return t(l).host},get backendConnected(){return t(l).connected},get details(){return t(y)},get label(){return t(H)},get listLabel(){return t(pe)},get connectedText(){return t(ve)},get notConnectedText(){return t(Q)},get notPresentText(){return t(oe)},get notAnsweringText(){return t(F)},get retryText(){return t(W)},onretry:A=>{for(const M of A)a().interfaces.reconnect(M)},get subscribingText(){return t(O)},get waitingText(){return t(z)},get reconnectingText(){return t(ce)},get allConnectedText(){return t(me)},get someNotConnectedText(){return t(be)},get portLabel(){return t(Ee)},devicesLabel:A=>t(o)("{count} devices",{count:A},A),dutyCycleLabel:A=>t(o)("Duty cycle {value} %",{value:A}),get publishCallbackPorts(){return t(le)},callbackPortInUseLabel:A=>t(o)("Callback port {port} is in use",{port:String(A)}),callbackPortFailedLabel:A=>t(o)("Callback port {port} cannot be opened",{port:String(A)}),get publishPortText(){return t(G)},callbackWarningLabel:A=>A.reason==="notLocal"?t(o)("The callback address {address} is not an address of this machine; {auto} is used instead",{address:A.address,auto:A.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:A.address}),get useAutomaticText(){return t(L)},onuseautomatic:()=>{t(l).useAutomaticCallback().then(A=>A?a().start():void 0)},testId:"interface-select",onselect:A=>{a().selectInterface(A)},get store(){return t(g)},storeTestId:"meta-indicator"})}var D=d(C,2);{let H=c(()=>t(o)("Devices"));wg(D,{get tabs(){return t(k)},get active(){return t(l).tab},get label(){return t(H)},onselect:pe=>t(l).setTab(pe)})}var R=d(D,2),P=w(R);{var K=H=>{var pe=lx(),ve=Ie(pe),Q=m(ve,!0),oe=d(ve,2),F=m(oe,!0);E((W,O)=>{x(ve,"title",W),h(Q,t(l).session.user),h(F,O)},[()=>t(o)("Logged in as {user}",{user:t(l).session.user}),()=>t(o)("Log out")]),v(H,pe)};$(P,H=>{t(l).session&&!a().shell.embedded&&H(K)})}var X=d(P,2);{var ae=H=>{var pe=dx(),ve=m(pe);E(Q=>h(ve,`${Q??""} (${a().changeSet.count??""})`),[()=>t(o)("Pending changes")]),ne("click",pe,()=>u(i,!0)),v(H,pe)};$(X,H=>{a().changeSet.count>0&&H(ae)})}var ue=d(X,2);{let H=c(()=>t(o)("RPC log"));Ct(ue,{get title(){return t(H)},icon:"≣",get pressed(){return t(l).rpcLogOpen},testId:"rpclog-toggle",onclick:()=>t(l).rpcLogOpen=!t(l).rpcLogOpen})}var fe=d(ue,2);{var B=H=>{Tg(H,{get theme(){return t(l).theme},labelFor:pe=>t(o)(`Theme: ${pe}`),testId:"theme-switch",onclick:()=>t(l).cycleTheme()})};$(fe,H=>{a().shell.embedded||H(B)})}var re=d(fe,2);{let H=c(()=>t(o)("Settings"));Ct(re,{get title(){return t(H)},icon:"⚙",testId:"settings-button",onclick:()=>t(l).configDialogOpen=!0})}var de=d(re,2);{let H=c(()=>t(o)("Homematic Manager on GitHub"));wp(de,{href:n,get label(){return t(H)},openExternal:pe=>a().host.openExternal(pe),testId:"github-link"})}var ee=d(I,2);{let H=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")}));Gg(ee,{get state(){return a().host.updateNotice},get labels(){return t(H)},releasesUrl:s,openExternal:pe=>a().host.openExternal(pe),testId:"update-notice",ondownload:()=>{a().host.downloadUpdate()},oninstall:()=>{a().host.installUpdateOnQuit()},ondismiss:()=>{a().host.dismissUpdate()}})}var se=d(ee,2),Y=w(se),Z=w(Y);np(Z,()=>`${t(l).selectedInterface}/${t(l).tab}`,H=>{var pe=St(),ve=Ie(pe);Lf(ve,{onerror:oe=>a().notices.fromError(oe,`page ${t(l).tab}`),failed:(oe,F=Wn,W=Wn)=>{var O=cx(),z=w(O),ce=m(z,!0),me=d(z,2),be=m(me,!0),Ee=d(me,2),le=m(Ee,!0);E((G,L,A)=>{h(ce,G),h(be,L),h(le,A)},[()=>t(o)("This tab could not be drawn."),()=>F()instanceof Error?F().message:String(F()),()=>t(o)("Try again")]),ne("click",Ee,function(...G){W()?.apply(this,G)}),v(oe,O)}},oe=>{var F=St(),W=Ie(F);{var O=A=>{var M=ux(),he=m(M,!0);E(Te=>h(he,Te),[()=>t(o)("Select an interface")]),v(A,M)},z=A=>{var M=St(),he=Ie(M);{var Te=qe=>{nl(qe,{enumId:"room"})},Pe=qe=>{nl(qe,{enumId:"function"})},He=qe=>{nl(qe,{})};$(he,qe=>{t(l).tab==="rooms"?qe(Te):t(l).tab==="functions"?qe(Pe,1):qe(He,-1)})}v(A,M)},ce=A=>{wT(A,{})},me=A=>{JT(A,{})},be=A=>{dR(A,{})},Ee=A=>{tx(A,{})},le=A=>{JE(A,{})},G=A=>{ox(A,{})},L=A=>{xT(A,{})};$(W,A=>{t(l).selectedInterface===""?A(O):t(l).storeSelected?A(z,1):t(l).tab==="devices"?A(ce,2):t(l).tab==="groups"?A(me,3):t(l).tab==="links"?A(be,4):t(l).tab==="rssi"?A(Ee,5):t(l).tab==="console"?A(le,6):t(l).tab==="messages"?A(G,7):A(L,-1)})}v(oe,F)}),v(H,pe)});var te=d(se,2);{let H=c(()=>t(o)("RPC log")),pe=c(()=>t(o)("No RPC calls yet")),ve=c(()=>t(o)("in progress")),Q=c(()=>t(o)("Clear")),oe=c(()=>t(o)("Close")),F=c(()=>t(o)("Resize the RPC log")),W=c(()=>t(o)("Hide background calls")),O=c(()=>t(o)("Open in console")),z=c(()=>({console:t(o)("Origin: console"),ui:t(o)("Origin: UI"),background:t(o)("Origin: background")}));hg(te,{get entries(){return a().rpcLog.visible},get pending(){return a().rpcLog.pending},get title(){return t(H)},get emptyText(){return t(pe)},get pendingText(){return t(ve)},get clearLabel(){return t(Q)},get closeLabel(){return t(oe)},get resizeLabel(){return t(F)},get hideBackgroundLabel(){return t(W)},get openLabel(){return t(O)},get originLabels(){return t(z)},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 xe=d(te,2);{let H=c(()=>t(o)("Dismiss")),pe=c(()=>t(o)("Show fewer"));eg(xe,{get notices(){return a().notices.items},get dismissLabel(){return t(H)},moreLabel:ve=>t(o)("{count} more",{},ve),get lessLabel(){return t(pe)},testId:"notices",ondismiss:ve=>a().notices.dismiss(ve)})}var J=d(xe,2);{let H=c(()=>t(o)("RPC execution")),pe=c(()=>t(o)("Cancel"));Yf(J,{get progress(){return a().rpcLog.progress},get title(){return t(H)},get cancelLabel(){return t(pe)},testId:"rpc-progress",oncancel:()=>{a().rpcLog.cancel()}})}var ye=d(J,2);kE(ye,{get open(){return t(l).configDialogOpen},set open(H){t(l).configDialogOpen=H}});var Re=d(ye,2);ab(Re,{get open(){return t(i)},set open(H){u(i,H,!0)}});var ge=d(Re,2);{let H=c(()=>t(o)("Loading Homematic Manager..."));jp(ge,{get visible(){return t(l).loading},get text(){return t(H)},testId:"loader"})}E(()=>{x(Y,"id",`panel-${t(l).tab}`),x(Y,"aria-labelledby",`tab-${t(l).tab}`)}),v(r,T),ct()}yt(["click"]);const Zh="hmm.columnWidths";function mx(r){const e=r.trim().toLowerCase().replace(/[^a-z0-9._-]/g,"_");return e===""?"unconfigured":e}const vx=Object.freeze({});function Nu(r){return r!==null&&typeof r=="object"&&!Array.isArray(r)}function px(r){let e;try{const s=r?.getItem(Zh);e=s==null?void 0:JSON.parse(s)}catch{return{}}const n={};if(!Nu(e))return n;for(const[s,a]of Object.entries(e)){if(!Nu(a))continue;const i={};for(const[o,l]of Object.entries(a)){const f=my(l);Object.keys(f).length>0&&(i[o]=f)}Object.keys(i).length>0&&(n[s]=i)}return n}class gx{#e=N({});#n;#t;constructor(e,n){this.#n=e,this.#t=n,u(this.#e,px(e))}widths(e){return t(this.#e)[this.#t()]?.[e]??vx}set(e,n,s){const a=this.#t(),i=t(this.#e)[a]??{},o=i[e]??{},l=fi(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(Zh,JSON.stringify(t(this.#e)))}catch{}}}const sl=["system","light","dark"],Cu="hmm.theme",al="hmm.language";function bx(){return typeof window>"u"?{hash:""}:window.location}function _x(r){return typeof window>"u"?()=>{}:(window.addEventListener("hashchange",r),()=>{window.removeEventListener("hashchange",r)})}function Ex(){try{return typeof localStorage>"u"?void 0:localStorage}catch{return}}class yx{#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(ji));get tab(){return t(this.#o)}set tab(e){u(this.#o,e,!0)}#d=N(Be(ji));get interfaceTab(){return t(this.#d)}set interfaceTab(e){u(this.#d,e,!0)}#c=N("");get linksFilter(){return t(this.#c)}set linksFilter(e){u(this.#c,e,!0)}#u=N("en");get language(){return t(this.#u)}set language(e){u(this.#u,e,!0)}#f=N("auto");get languageChoice(){return t(this.#f)}set languageChoice(e){u(this.#f,e,!0)}#g=N("system");get theme(){return t(this.#g)}set theme(e){u(this.#g,e,!0)}#h=N(null);get session(){return t(this.#h)}set session(e){u(this.#h,e,!0)}#v=N(!1);get configDialogOpen(){return t(this.#v)}set configDialogOpen(e){u(this.#v,e,!0)}#_=N(!1);get rpcLogOpen(){return t(this.#_)}set rpcLogOpen(e){u(this.#_,e,!0)}columnWidths;#m;#b;#y;#p;#S;#E=[];#k=[];constructor(e,n,s={}){this.#m=e,this.#b=n,this.#y=s.location??bx(),this.#p=s.storage===void 0?Ex():s.storage,this.#S=s.languages,this.columnWidths=new gx(this.#p,()=>mx(this.config?.connection.host??""));const a=this.#p?.getItem(Cu);(a==="light"||a==="dark"||a==="system")&&(this.theme=a);const i=this.#p?.getItem(al);(i==="de"||i==="en"||i==="auto")&&(this.languageChoice=i),this.#w(),this.readRoute(),this.connected=e.connected,this.#E.push(e.onConnectionChange(o=>{this.connected=o}),e.on("config.changed",o=>{this.config=o}),e.on("pairing.changed",o=>{this.pairing=o}),(s.onHashChange??_x)(()=>{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=Yg(this.#y.hash);e.interfaceName!==""&&(this.selectedInterface=e.interfaceName),ai(e.tab)?this.tab=this.storeSelected?e.tab:ji:(this.tab=e.tab,this.interfaceTab=e.tab)}writeRoute(){const e=qg(this.selectedInterface,this.tab);this.#y.hash!==e&&(this.#y.hash=e)}setTab(e){this.tab=e,ai(e)||(this.interfaceTab=e),this.writeRoute()}get storeSelected(){return Zf(this.selectedInterface)}setInterface(e){this.selectedInterface=e,this.writeRoute()}setLanguage(e){this.languageChoice=e,this.#w(),this.#p?.setItem(al,e)}#w(){this.language=y1(this.languageChoice,this.#S)}setTheme(e){this.theme=e,this.#p?.setItem(Cu,e)}cycleTheme(){const e=sl.indexOf(this.theme);this.setTheme(sl[(e+1)%sl.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=Ui(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(al)==null&&(this.languageChoice=e.connection.language??"auto",this.#w()),!this.storeSelected&&(this.selectedInterface===""||!e.connection.interfaces.includes(this.selectedInterface))&&(this.selectedInterface=e.connection.interfaces[0]??""),this.writeRoute(),e.connection.host===""&&(this.configDialogOpen=!0)}dispose(){for(const e of this.#E)e();this.#E.length=0,this.#k.length=0}}class Sx{#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:Si(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 kx{#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 wx{#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 wb(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 Si(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 Ax{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 K_(s.capacity??_h),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),q_(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 Tx{#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:Si(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 Rx="__HMM_HOST__";function xx(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 Ix(r=globalThis){const e=r[Rx];return xx(e)?e:void 0}class Dx{#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??Ix(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 Nx{#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 Cx{#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(cs.manifest)}receiverProfiles(e){return this.#t(cs.profiles(e))}async receiverTypeAliases(){return await this.#t(cs.receiverTypeAliases)??{}}async masterMetadata(){return await this.#t(cs.masterMetadata)??{}}async optionPresets(){return await this.#t(cs.optionPresets)??{}}async crossValidations(){return await this.#t(cs.crossValidations)??[]}translations(e){return this.#t(cs.translations(e))}async deviceIcons(){return await this.#t(cs.deviceIcons)??{}}async masterForms(){return(await this.#t(cs.masterForms))?.byParamsetId??{}}async timeSelectors(){return(await this.#t(cs.timeSelectors))?.types??{}}}class Px{#e=N(Be(new Hc));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 Cx(e),this.engine=new R_(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 Hc(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 Mx{#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=>Tl(n).broken)}async add(e,n,s,a,i){const o=n.flatMap(l=>s.map(f=>({sender:l,receiver:f,...a===void 0?{}:{name:a},...i===void 0?{}:{description:i}})));return this.addPairs(e,o)}async addPairs(e,n){let s=0;for(const a of n)try{await this.#t.request("links.add",e,a.sender,a.receiver,a.name,a.description),s+=1}catch(i){this.#s.fromError(i,`addLink ${a.sender} ${a.receiver}`)}return s>0&&await this.load(e),s}async remove(e,n){let s=0;for(const a of n)try{await this.#t.request("links.remove",e,a.sender,a.receiver),s+=1}catch(i){this.#s.fromError(i,`removeLink ${a.sender} ${a.receiver}`)}return s>0&&await this.load(e),s}async info(e,n,s){try{return await this.#t.request("links.info.get",e,n,s)}catch(a){this.#s.fromError(a,`getLinkInfo ${n} ${s}`);return}}async setInfo(e,n,s,a,i){try{return await this.#t.request("links.info.set",e,n,s,a,i),await this.load(e),!0}catch(o){return this.#s.fromError(o,`setLinkInfo ${n} ${s}`),!1}}async activate(e,n,s,a){try{return await this.#t.request("links.activate",e,n,s,a),!0}catch(i){return this.#s.fromError(i,`activateLinkParamset ${n} ${s}`),!1}}#a=N(Be([]));get templates(){return t(this.#a)}set templates(e){u(this.#a,e,!0)}async loadTemplates(e){try{this.templates=await this.#t.request("linkTemplates.list",e)}catch(n){this.#s.fromError(n,"linkTemplates.list"),this.templates=[]}return this.templates}async saveTemplate(e){try{return await this.#t.request("linkTemplates.save",e),await this.loadTemplates(e.identity),!0}catch(n){return this.#s.fromError(n,"linkTemplates.save"),!1}}async removeTemplate(e,n){try{return await this.#t.request("linkTemplates.remove",e),await this.loadTemplates(n),!0}catch(s){return this.#s.fromError(s,"linkTemplates.remove"),!1}}async ensure(e){e===""||this.links[e]||this.isLoading(e)||await this.load(e)}forget(e){if(e===void 0){this.links={};return}this.links=Object.fromEntries(Object.entries(this.links).filter(([n])=>n!==e))}}class Ox{#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 Qi(r,e,n){return`${r}|${e}|${n}`}function Lx(r,e,n,s){try{return ii(r,e,n,s)}catch{return Qi(r,e.ADDRESS,n)}}class Fx{#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[Qi(e,n,s)]}async describe(e,n,s){const a=Qi(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=`${Lx(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[Qi(n,s,a)]??await this.#r.request("paramset.description",n,s,a);o=(i==="service-messages"?Wh(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 Ih(this.#r,e,n)}async suppressServiceMessages(e,n,s,a){try{return await Dh(this.#r,e,n,s,a),!0}catch(i){return this.#i.fromError(i,`suppressServiceMessages ${n} ${s||"*"}`),!1}}clearResults(){this.results=[]}}class Gx{#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 z_;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?W_(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 Ux{#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(il(s))})}apply(e){const n=this.#l,s=e.filter(a=>!n.includes(Pu(a)));if(this.messages=e,this.#l=e.map(a=>Pu(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=>uo(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,il(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,il(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)uo(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[ea(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(ea(e,s)));await Promise.all(n.map(s=>this.#f(e,s)))}async suppress(e,n,s,a){try{await Dh(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[ea(e.interfaceName,e.address)];return U_(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(ea(e,s)));this.#c=[...this.#c,...n.map(s=>ea(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,[ea(e,s)]:a}}catch{}}))}async#f(e,n){const s=ea(e,n);this.#d.includes(s)||(this.#d=[...this.#d,s]);const a=await Ih(this.#a,e,n);a!==void 0&&(this.suppressed={...this.suppressed,[s]:a})}dispose(){this.#i()}}function Pu(r){return`${r.interfaceName}|${r.address}|${r.datapoint}`}function ea(r,e){return`${r}|${e}`}function il(r){return Array.isArray(r)?r:[]}class Mu{#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||!Bx(e))return;const n=Ou(/[?&]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=Ou(s.theme)??this.theme??"system")}dispose(){this.#t?.removeEventListener("message",this.#s)}}function Ou(r){return r==="system"||r==="light"||r==="dark"?r:void 0}function Bx(r){try{return r.self!==r.top&&r.parent.location.origin===r.location.origin}catch{return!1}}class Vx{#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]=xb(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=eh(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(b){this.#a.fromError(b,`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 Hx{#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(()=>c1(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 Z_(e,n)}view(e){return this.objects[e]}titleOf(e,n){return Ah(e,this.enums[e],n)}options(e){return Fh(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 Gh(this.objects[e],n.map(a=>this.objects[a]),s)}members(e){return Eo(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:Si(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 zx{#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 jx{#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 Wx{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 $p(e),this.app=new yx(e,this.notices,n),this.i18n=new S1(this.app.language),this.interfaces=new Nx(e,this.notices),this.devices=new wx(e,this.notices),this.names=new Ox(e,this.notices),this.links=new Mx(e,this.notices),this.serviceMessages=new Ux(e,this.notices),this.unreach=new zx(e,this.notices),this.events=new Ax(e,this.notices,{...n.eventCapacity===void 0?{}:{capacity:n.eventCapacity}}),this.rpcLog=new jx(e,this.notices),this.meta=new Px(e,{...n.dataSource===void 0?{}:{source:n.dataSource}}),this.taxonomy=new Hx(e,this.notices),this.groups=new Tx(e,this.notices),this.smokeGroups=new Vx(e,this.notices),this.paramsets=new Fx(e,this.notices),this.radio=new Gx(e,this.notices),this.console=new kx(e,this.notices),this.changeSet=new Sx(e,this.notices,this.rpcLog),this.app.onInterfaceRouted(s=>{this.#e&&this.#n(Zf(s))}),this.shell="shellWindow"in n?new Mu(n.shellWindow):new Mu,this.host=new Dx({...n.hostBridge===void 0?{}:{bridge:n.hostBridge},...n.hostScope===void 0?{}:{scope:n.hostScope}})}get tabs(){return this.app.storeSelected?fc(this.taxonomy.state):$g(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&&fc(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){(!ai(this.app.tab)||!this.tabs.includes(this.app.tab))&&this.app.setTab(this.tabs[0]??"metadata");return}(e||ai(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 Kx(r,e={}){return new Wx(r,e)}const Jh=["BidCos-RF","HmIP-RF"],em=[{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}],Yx=[{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}])],tm={"BidCos-RF":em,"HmIP-RF":Yx},fs={"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"},ol={"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}]},Fi=[{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")}],qx={"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]}}},$x=[{ADDRESS:"3014F711A0000418971558",TYPE:"HMIP_CCU2",DESCRIPTION:"HMIP_CCU2 3014F711A0000418971558",CONNECTED:!0,DEFAULT:!0,DUTY_CYCLE:1,FIRMWARE_VERSION:"4.4.18"}],Xx=[{ADDRESS:"BidCoS-RF",TYPE:"CCU2",DESCRIPTION:"CCU2-Coprocessor",CONNECTED:!0,DEFAULT:!0,DUTY_CYCLE:1,FIRMWARE_VERSION:"2.8.6"}],nm=[{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"}],Lu=[{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}],Qx=em.filter(r=>(r.TEAM_CHANNELS??[]).length>0),Zx={format:1,revision:7,objects:{"BidCos-RF.MEQ0123456:1":{name:fs["MEQ0123456:1"]??"",enums:["room/eg/kueche","function/licht"],meta:{}},"BidCos-RF.JEQ0234567:1":{name:fs["JEQ0234567:1"]??"",enums:["room/eg/flur"],meta:{}},"BidCos-RF.KEQ0345678:4":{name:fs["KEQ0345678:4"]??"",enums:["room/og/bad","function/heizung"],meta:{}},"BidCos-RF.LEQ0456789:1":{name:fs["LEQ0456789:1"]??"",enums:["room/og/schlafzimmer","function/sicherheit"],meta:{}},"BidCos-RF.GEQ0567890:1":{name:fs["GEQ0567890:1"]??"",enums:["room/eg/wohnzimmer","function/licht"],meta:{}},"HmIP-RF.000A1B2C3D4E5F:4":{name:fs["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:[]}}},Jx={enabled:!0,reachable:!0,names:Object.keys(fs).length},Zl={host:"demo.local",interfaces:nm.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:""},ll={version:"3.0.0-dev.0",connection:Zl,localAddresses:["192.168.1.20","10.0.0.5"],discovered:[{address:"demo.local",name:"Demo-CCU",serial:"KEQ0000001",firmware:"3.89.8",interfaces:[...Jh]}]};function eI(r=Zl.host){const e=r===Zl.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 Fu=[{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}],tI=[{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"}],nI=[{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:[]}],Gu=[{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 Ya(r){return Jh.includes(r)}const dl=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}])]),Uu={"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":dl,"0001D3C9000002:1|MASTER":dl,"0001D3C9000003:1|MASTER":dl},cl={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},Bu={"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":{...cl,GROUP_1:!0},"0001D3C9000002:1|MASTER":{...cl,GROUP_1:!0},"0001D3C9000003:1|MASTER":cl};function rm(r){for(const e of Object.values(tm)){const n=e.find(s=>s.ADDRESS===r);if(n)return n.PARENT===void 0||n.PARENT===""?"":n.TYPE}return""}function rI(r,e){return Uu[`${r}|${e}`]??Uu[`${rm(r)}|${e}`]??{}}function sI(r,e){return Bu[`${r}|${e}`]??Bu[`${rm(r)}|${e}`]??{}}const aI={"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 sm{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 gr({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 gr(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 gr({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",ll),this.respond("config.set",n=>({...ll,connection:n})),this.result("config.discover",ll.discovered),this.result("config.clearCaches",null),this.respond("config.callbackAddresses",n=>eI(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",nm),this.result("interfaces.reconnect",null),this.result("rega.state",Jx),this.respond("devices.list",n=>Ya(n)?tm[n]:[]),this.result("names.get",fs),this.respond("names.set",n=>{const s={...fs};for(const a of n)s[a.address]=a.name;return s}),this.respond("links.list",n=>Ya(n)?ol[n]:[]),this.respond("rssi.get",n=>Ya(n)?qx[n]:{}),this.respond("bidcos.interfaces",n=>n==="HmIP-RF"?$x:Xx),this.respond("serviceMessages.list",n=>n===void 0?Fi:Fi.filter(s=>s.interfaceName===n)),this.respond("serviceMessages.refresh",n=>n===void 0?Fi:Fi.filter(s=>s.interfaceName===n)),this.result("serviceMessages.ack",null),this.result("rega.confirmInbox",[]),this.respond("teams.list",n=>n==="BidCos-RF"?Qx:[]),this.result("teams.set",null),this.respond("unreach.list",n=>n===void 0?Lu:Lu.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?Fu:Fu.filter(s=>s.interfaceName===n)),this.result("events.clear",null),this.result("rpcLog.list",tI),this.result("rpcLog.clear",null),this.result("rpc.methods",nI),this.respond("rpc.call",(n,s,a)=>({method:s,params:a})),this.respond("paramset.description",(n,s,a)=>rI(s,a)),this.respond("paramset.get",(n,s,a)=>sI(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)=>(Ya(n)?ol[n]:[]).find(o=>o.SENDER===s&&o.RECEIVER===a)??{SENDER:s,RECEIVER:a}),this.respond("links.peers",(n,s)=>(Ya(n)?ol[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=aI[n];if(s===void 0)throw new gr({message:`no demo data file ${n}`,kind:"config"});return s}),this.useDemoMeta(),this.result("session.info",null),this}useDemoMeta(){const e=new l1({document:Ol(structuredClone(Zx))}),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 b=u1(o.enums,p);l[f]={name:b.name,enums:[...p.enums],rooms:[...b.rooms],functions:[...b.functions],...b.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 b of o){const g=e.find(b),k=g?.enums??[];if(k.includes(l)===f)continue;const S=f?[...k,l]:k.filter(I=>I!==l),T=b.slice(b.indexOf(".")+1);p[b]=g?{enums:S}:{name:fs[T]??T,enums:S}}return e.bulk(p),i(),null}),this.respond("meta.enum.create",(o,l)=>(e.createEnum(o,l),i(),null)),this.respond("meta.enum.update",(o,l)=>(e.updateEnum(o,l),i(),null)),this.respond("meta.enum.delete",(o,l)=>(e.deleteEnum(o,l===!0?"detach":"refuse"),i(),null)),this.respond("meta.node.create",(o,l,f,p)=>{const b=e.getEnum(o).tree,g=l===void 0?void 0:_a(l),k=g===void 0?b:Us(b,g.ids)?.children??[],y=Th(f,k.map(S=>S.id));return e.createNode(o,l??null,y,f,p??{}),i(),`${l??o}/${y}`}),this.respond("meta.node.update",(o,l)=>(e.updateNode(o,l),i(),null)),this.respond("meta.node.delete",(o,l)=>(e.deleteNode(o,l===!0?"detach":"refuse"),i(),null)),this.respond("meta.refresh",()=>(i(),n())),this.result("meta.pairing",null),this.respond("meta.export",()=>e.document()),this.respond("meta.import",(o,l)=>(e.import(o,l??"replace"),i(),null)),this}}const iI=1;class oI{url;#e;#n;#t;#s;#a;#r=new Map;#i=new Map;#l=new Set;#o=new Set;#d;#c=!1;#u=!1;#f=1;#g;#h;constructor(e){this.url=e.url,this.#e=e.factory??(n=>new WebSocket(n)),this.#n=e.requestTimeoutMs??3e4,this.#t=e.reconnect??!0,this.#s=e.minBackoffMs??500,this.#a=e.maxBackoffMs??15e3,this.#g=this.#s,(e.autoConnect??!0)&&this.connect()}get connected(){return this.#c}get backoffMs(){return this.#g}connect(){if(this.#u=!1,this.#d)return;const e=this.#e(this.url);this.#d=e,e.onopen=()=>{this.#g=this.#s,this.#p(!0);for(const n of[...this.#o])this.#o.delete(n),n.resolve()},e.onmessage=n=>{this.#_(n.data)},e.onerror=()=>{},e.onclose=()=>{this.#b()}}close(){this.#u=!0,this.#h!==void 0&&(clearTimeout(this.#h),this.#h=void 0);const e=this.#d;this.#d=void 0,e?.close(),this.#y("transport closed"),this.#p(!1)}async request(e,...n){await this.#v(e);const s=this.#d;if(!s||s.readyState!==iI)throw new gr({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 gr({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 gr({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 gr({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,Hf(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 gr(s)):a.resolve(n))}#b(){if(this.#d=void 0,this.#p(!1),this.#y(`connection to ${this.url} was lost`),this.#u||!this.#t)return;const e=this.#g;this.#g=Math.min(this.#g*2,this.#a),this.#h=setTimeout(()=>{this.#h=void 0,this.connect()},e)}#y(e){for(const[n,s]of[...this.#r])this.#r.delete(n),s.timer!==void 0&&clearTimeout(s.timer),s.reject(new gr({message:e,kind:"connection"}));for(const n of[...this.#o])this.#o.delete(n),n.reject(new gr({message:e,kind:"connection"}))}#p(e){if(this.#c!==e){this.#c=e;for(const n of[...this.#l])n(e)}}}const lI={},dI="__HMM_TRANSPORT__";function cI(r,e="api"){const n=r.protocol==="https:"?"wss:":"ws:",s=r.pathname.replace(/[^/]*$/,"");return`${n}//${r.host}${s}${e}`}function uI(r){return lI?.VITE_HMM_DEMO==="true"?!0:r?new URLSearchParams(r.search).has("demo"):!1}function fI(r={}){const n=(r.host??globalThis)[dI];if(hI(n))return n;const s=r.location??(typeof window>"u"?void 0:window.location);if(r.demo===!0||uI(s))return new sm({demo:!0});if(!s)throw new Error("createTransport needs a location when there is no window and no injected transport");return new oI({url:cI(s,r.path??"api")})}function hI(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 mI(r,e={}){const n=e.intervalMs??2500,s=e.now??(()=>Date.now());let a=0;const i=setInterval(()=>{const o=Gu[a%Gu.length];if(a+=1,!o)return;const l={...o,timestamp:s()};r.emit("rpc.event",l)},n);return()=>{clearInterval(i)}}const Jl=fI(),am=Kx(Jl);Jl instanceof sm&&mI(Jl);const im=document.querySelector("#app");if(!im)throw new Error("no #app element to mount into");Zv(hx,{target:im,props:{stores:am}});am.start();
|
|
21
|
+
//# sourceMappingURL=index-sv7OiesL.js.map
|