From 56e7f60345e85bb3d8b5f3dae4dc7367d8e0033d Mon Sep 17 00:00:00 2001 From: kc1awv Date: Sun, 4 Jan 2026 16:44:34 -0500 Subject: [PATCH] handle nick changes and fix pre-population of connect modal --- rrc_web/backend.py | 6 ++++++ rrc_web/client.py | 4 ++-- rrc_web/main.py | 1 + rrc_web/static-svelte/app.js | 6 +++--- .../src/components/ConnectionDialog.svelte | 8 ++++++++ svelte-frontend/src/websocket.js | 19 +++++++++++++++++++ 6 files changed, 39 insertions(+), 5 deletions(-) diff --git a/rrc_web/backend.py b/rrc_web/backend.py index f7b170e..af17ae7 100644 --- a/rrc_web/backend.py +++ b/rrc_web/backend.py @@ -634,6 +634,12 @@ class BackendService: "nickname": self.client.nickname if self.client else None, "identity_hash": self.identity.hash.hex() if self.identity else None, "active_room": self.active_room, + "config": { + "dest_name": self.config.get("dest_name", ""), + "hub_hash": self.config.get("hub_hash", ""), + "nickname": self.config.get("nickname", ""), + "identity_path": self.config.get("identity_path", ""), + }, "rooms": { name: { "messages": room_data["messages"][-STATE_MESSAGES_TO_RETURN:], diff --git a/rrc_web/client.py b/rrc_web/client.py index 0f48ef1..490f457 100644 --- a/rrc_web/client.py +++ b/rrc_web/client.py @@ -503,7 +503,7 @@ class Client: raise ValueError("Room name cannot be empty. Specify the room to send the message to.") if not text.strip(): raise ValueError("Message text cannot be empty. Enter a message to send.") - env = make_envelope(T_MSG, src=self.identity.hash, room=r, body=text) + env = make_envelope(T_MSG, src=self.identity.hash, room=r, body=text, nick=self.nickname) self._send(env) mid = env.get(K_ID) if not isinstance(mid, (bytes, bytearray)): @@ -530,7 +530,7 @@ class Client: raise ValueError("Room name cannot be empty. Specify the room for the notice.") if not text.strip(): raise ValueError("Notice text cannot be empty. Enter notice text to send.") - self._send(make_envelope(T_NOTICE, src=self.identity.hash, room=r, body=text)) + self._send(make_envelope(T_NOTICE, src=self.identity.hash, room=r, body=text, nick=self.nickname)) def ping(self) -> None: """Send a PING to the server.""" diff --git a/rrc_web/main.py b/rrc_web/main.py index 59c8e17..001e697 100644 --- a/rrc_web/main.py +++ b/rrc_web/main.py @@ -44,6 +44,7 @@ ALLOWED_MESSAGE_TYPES = { "send_message", "send_command", "set_active_room", + "set_nickname", "get_state", "get_discovered_hubs", } diff --git a/rrc_web/static-svelte/app.js b/rrc_web/static-svelte/app.js index dbc446e..100bb36 100644 --- a/rrc_web/static-svelte/app.js +++ b/rrc_web/static-svelte/app.js @@ -1,5 +1,5 @@ -(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))r(o);new MutationObserver(o=>{for(const s of o)if(s.type==="childList")for(const i of s.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&r(i)}).observe(document,{childList:!0,subtree:!0});function n(o){const s={};return o.integrity&&(s.integrity=o.integrity),o.referrerPolicy&&(s.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?s.credentials="include":o.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function r(o){if(o.ep)return;o.ep=!0;const s=n(o);fetch(o.href,s)}})();const ne=2,sr=4,or=8,Ks=1<<24,it=16,at=32,Mt=64,xn=128,Pe=512,ie=1024,be=2048,We=4096,Ee=8192,st=16384,kn=32768,Ft=65536,xr=1<<17,Pr=1<<18,Bt=1<<19,Ys=1<<20,tt=1<<25,Rt=32768,Bn=1<<21,ir=1<<22,dt=1<<23,pn=Symbol("$state"),Gs=Symbol("legacy props"),Xs=Symbol(""),It=new class extends Error{name="StaleReactionError";message="The reaction that called `getAbortSignal()` was re-run or destroyed"},En=3,Vt=8,Vn=!1;var Lr=Array.isArray,Zs=Array.prototype.indexOf,$n=Array.from,ar=Object.defineProperty,Qt=Object.getOwnPropertyDescriptor,Qs=Object.getOwnPropertyDescriptors,eo=Object.prototype,to=Array.prototype,Hr=Object.getPrototypeOf,kr=Object.isExtensible;const vt=()=>{};function Ir(e){for(var t=0;t{e=r,t=o});return{promise:n,resolve:e,reject:t}}function Fr(e){return e===this.v}function Ur(e,t){return e!=e?t==t:e!==t||e!==null&&typeof e=="object"||typeof e=="function"}function qr(e){return!Ur(e,this.v)}function no(e){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function ro(){throw new Error("https://svelte.dev/e/async_derived_orphan")}function so(e){throw new Error("https://svelte.dev/e/effect_in_teardown")}function oo(){throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function io(e){throw new Error("https://svelte.dev/e/effect_orphan")}function ao(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}function lo(){throw new Error("https://svelte.dev/e/hydration_failed")}function co(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function uo(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}function fo(){throw new Error("https://svelte.dev/e/state_unsafe_mutation")}function vo(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}let ho=!1;const mo=1,po=2,Jr=4,_o=8,bo=16,go=1,yo=2,Wr="[",Sn="[!",lr="]",Ut={},oe=Symbol(),wo="http://www.w3.org/1999/xhtml";let $e=null;function qt(e){$e=e}function Le(e,t=!1,n){$e={p:$e,i:!1,c:null,e:null,s:e,x:null,l:null}}function He(e){var t=$e,n=t.e;if(n!==null){t.e=null;for(var r of n)ms(r)}return e!==void 0&&(t.x=e),t.i=!0,$e=t.p,e??{}}function Br(){return!0}let xt=[];function Vr(){var e=xt;xt=[],Ir(e)}function Dt(e){if(xt.length===0&&!en){var t=xt;queueMicrotask(()=>{t===xt&&Vr()})}xt.push(e)}function xo(){for(;xt.length>0;)Vr()}function Rn(e){console.warn("https://svelte.dev/e/hydration_mismatch")}function ko(){console.warn("https://svelte.dev/e/svelte_boundary_reset_noop")}let P=!1;function nt(e){P=e}let F;function ue(e){if(e===null)throw Rn(),Ut;return F=e}function Tn(){return ue(Ve(F))}function d(e){if(P){if(Ve(F)!==null)throw Rn(),Ut;F=e}}function ht(e=1){if(P){for(var t=e,n=F;t--;)n=Ve(n);F=n}}function bn(e=!0){for(var t=0,n=F;;){if(n.nodeType===Vt){var r=n.data;if(r===lr){if(t===0)return n;t-=1}else(r===Wr||r===Sn)&&(t+=1)}var o=Ve(n);e&&n.remove(),n=o}}function zr(e){if(!e||e.nodeType!==Vt)throw Rn(),Ut;return e.data}function rt(e){if(typeof e!="object"||e===null||pn in e)return e;const t=Hr(e);if(t!==eo&&t!==to)return e;var n=new Map,r=Lr(e),o=G(0),s=$t,i=l=>{if($t===s)return l();var a=O,c=$t;me(null),Tr(s);var u=l();return me(a),Tr(c),u};return r&&n.set("length",G(e.length)),new Proxy(e,{defineProperty(l,a,c){(!("value"in c)||c.configurable===!1||c.enumerable===!1||c.writable===!1)&&co();var u=n.get(a);return u===void 0?u=i(()=>{var v=G(c.value);return n.set(a,v),v}):A(u,c.value,!0),!0},deleteProperty(l,a){var c=n.get(a);if(c===void 0){if(a in l){const u=i(()=>G(oe));n.set(a,u),tn(o)}}else A(c,oe),tn(o);return!0},get(l,a,c){if(a===pn)return e;var u=n.get(a),v=a in l;if(u===void 0&&(!v||Qt(l,a)?.writable)&&(u=i(()=>{var m=rt(v?l[a]:oe),p=G(m);return p}),n.set(a,u)),u!==void 0){var f=g(u);return f===oe?void 0:f}return Reflect.get(l,a,c)},getOwnPropertyDescriptor(l,a){var c=Reflect.getOwnPropertyDescriptor(l,a);if(c&&"value"in c){var u=n.get(a);u&&(c.value=g(u))}else if(c===void 0){var v=n.get(a),f=v?.v;if(v!==void 0&&f!==oe)return{enumerable:!0,configurable:!0,value:f,writable:!0}}return c},has(l,a){if(a===pn)return!0;var c=n.get(a),u=c!==void 0&&c.v!==oe||Reflect.has(l,a);if(c!==void 0||U!==null&&(!u||Qt(l,a)?.writable)){c===void 0&&(c=i(()=>{var f=u?rt(l[a]):oe,m=G(f);return m}),n.set(a,c));var v=g(c);if(v===oe)return!1}return u},set(l,a,c,u){var v=n.get(a),f=a in l;if(r&&a==="length")for(var m=c;mG(oe)),n.set(m+"",p))}if(v===void 0)(!f||Qt(l,a)?.writable)&&(v=i(()=>G(void 0)),A(v,rt(c)),n.set(a,v));else{f=v.v!==oe;var w=i(()=>rt(c));A(v,w)}var _=Reflect.getOwnPropertyDescriptor(l,a);if(_?.set&&_.set.call(u,c),!f){if(r&&typeof a=="string"){var x=n.get("length"),L=Number(a);Number.isInteger(L)&&L>=x.v&&A(x,L+1)}tn(o)}return!0},ownKeys(l){g(o);var a=Reflect.ownKeys(l).filter(v=>{var f=n.get(v);return f===void 0||f.v!==oe});for(var[c,u]of n)u.v!==oe&&!(c in l)&&a.push(c);return a},setPrototypeOf(){uo()}})}var Er,Kr,Yr,Gr;function zn(){if(Er===void 0){Er=window,Kr=/Firefox/.test(navigator.userAgent);var e=Element.prototype,t=Node.prototype,n=Text.prototype;Yr=Qt(t,"firstChild").get,Gr=Qt(t,"nextSibling").get,kr(e)&&(e.__click=void 0,e.__className=void 0,e.__attributes=null,e.__style=void 0,e.__e=void 0),kr(n)&&(n.__t=void 0)}}function pe(e=""){return document.createTextNode(e)}function Tt(e){return Yr.call(e)}function Ve(e){return Gr.call(e)}function h(e,t){if(!P)return Tt(e);var n=Tt(F);if(n===null)n=F.appendChild(pe());else if(t&&n.nodeType!==En){var r=pe();return n?.before(r),ue(r),r}return ue(n),n}function cr(e,t=!1){if(!P){var n=Tt(e);return n instanceof Comment&&n.data===""?Ve(n):n}if(t&&F?.nodeType!==En){var r=pe();return F?.before(r),ue(r),r}return F}function y(e,t=1,n=!1){let r=P?F:e;for(var o;t--;)o=r,r=Ve(r);if(!P)return r;if(n&&r?.nodeType!==En){var s=pe();return r===null?o?.after(s):r.before(s),ue(s),s}return ue(r),r}function Xr(e){e.textContent=""}function Zr(){return!1}function Qr(e){var t=U;if(t===null)return O.f|=dt,e;if((t.f&kn)===0){if((t.f&xn)===0)throw e;t.b.error(e)}else Jt(e,t)}function Jt(e,t){for(;t!==null;){if((t.f&xn)!==0)try{t.b.error(e);return}catch(n){e=n}t=t.parent}throw e}const mn=new Set;let B=null,_n=null,De=null,Ae=[],Cn=null,Kn=!1,en=!1;class qe{committed=!1;current=new Map;previous=new Map;#t=new Set;#e=new Set;#n=0;#r=0;#l=null;#o=new Set;#s=new Set;skipped_effects=new Set;is_fork=!1;is_deferred(){return this.is_fork||this.#r>0}process(t){Ae=[],_n=null,this.apply();var n={parent:null,effect:null,effects:[],render_effects:[]};for(const r of t)this.#i(r,n);this.is_fork||this.#u(),this.is_deferred()?(this.#a(n.effects),this.#a(n.render_effects)):(_n=this,B=null,$r(n.render_effects),$r(n.effects),_n=null,this.#l?.resolve()),De=null}#i(t,n){t.f^=ie;for(var r=t.first;r!==null;){var o=r.f,s=(o&(at|Mt))!==0,i=s&&(o&ie)!==0,l=i||(o&Ee)!==0||this.skipped_effects.has(r);if((r.f&xn)!==0&&r.b?.is_pending()&&(n={parent:n,effect:r,effects:[],render_effects:[]}),!l&&r.fn!==null){s?r.f^=ie:(o&sr)!==0?n.effects.push(r):ln(r)&&((r.f&it)!==0&&this.#o.add(r),rn(r));var a=r.first;if(a!==null){r=a;continue}}var c=r.parent;for(r=r.next;r===null&&c!==null;)c===n.effect&&(this.#a(n.effects),this.#a(n.render_effects),n=n.parent),r=c.next,c=c.parent}}#a(t){for(const n of t)(n.f&be)!==0?this.#o.add(n):(n.f&We)!==0&&this.#s.add(n),this.#c(n.deps),ae(n,ie)}#c(t){if(t!==null)for(const n of t)(n.f&ne)===0||(n.f&Rt)===0||(n.f^=Rt,this.#c(n.deps))}capture(t,n){this.previous.has(t)||this.previous.set(t,n),(t.f&dt)===0&&(this.current.set(t,t.v),De?.set(t,t.v))}activate(){B=this,this.apply()}deactivate(){B===this&&(B=null,De=null)}flush(){if(this.activate(),Ae.length>0){if(es(),B!==null&&B!==this)return}else this.#n===0&&this.process([]);this.deactivate()}discard(){for(const t of this.#e)t(this);this.#e.clear()}#u(){if(this.#r===0){for(const t of this.#t)t();this.#t.clear()}this.#n===0&&this.#f()}#f(){if(mn.size>1){this.previous.clear();var t=De,n=!0,r={parent:null,effect:null,effects:[],render_effects:[]};for(const s of mn){if(s===this){n=!1;continue}const i=[];for(const[a,c]of this.current){if(s.current.has(a))if(n&&c!==s.current.get(a))s.current.set(a,c);else continue;i.push(a)}if(i.length===0)continue;const l=[...s.current.keys()].filter(a=>!this.current.has(a));if(l.length>0){var o=Ae;Ae=[];const a=new Set,c=new Map;for(const u of i)ts(u,l,a,c);if(Ae.length>0){B=s,s.apply();for(const u of Ae)s.#i(u,r);s.deactivate()}Ae=o}}B=null,De=t}this.committed=!0,mn.delete(this)}increment(t){this.#n+=1,t&&(this.#r+=1)}decrement(t){this.#n-=1,t&&(this.#r-=1),this.revive()}revive(){for(const t of this.#o)this.#s.delete(t),ae(t,be),Ct(t);for(const t of this.#s)ae(t,We),Ct(t);this.flush()}oncommit(t){this.#t.add(t)}ondiscard(t){this.#e.add(t)}settled(){return(this.#l??=jr()).promise}static ensure(){if(B===null){const t=B=new qe;mn.add(B),en||qe.enqueue(()=>{B===t&&t.flush()})}return B}static enqueue(t){Dt(t)}apply(){}}function he(e){var t=en;en=!0;try{for(var n;;){if(xo(),Ae.length===0&&(B?.flush(),Ae.length===0))return Cn=null,n;es()}}finally{en=t}}function es(){var e=Et;Kn=!0;var t=null;try{var n=0;for(yn(!0);Ae.length>0;){var r=qe.ensure();if(n++>1e3){var o,s;Eo()}r.process(Ae),mt.clear()}}finally{Kn=!1,yn(e),Cn=null}}function Eo(){try{ao()}catch(e){Jt(e,Cn)}}let Qe=null;function $r(e){var t=e.length;if(t!==0){for(var n=0;n0)){mt.clear();for(const o of Qe){if((o.f&(st|Ee))!==0)continue;const s=[o];let i=o.parent;for(;i!==null;)Qe.has(i)&&(Qe.delete(i),s.push(i)),i=i.parent;for(let l=s.length-1;l>=0;l--){const a=s[l];(a.f&(st|Ee))===0&&rn(a)}}Qe.clear()}}Qe=null}}function ts(e,t,n,r){if(!n.has(e)&&(n.add(e),e.reactions!==null))for(const o of e.reactions){const s=o.f;(s&ne)!==0?ts(o,t,n,r):(s&(ir|it))!==0&&(s&be)===0&&ns(o,t,r)&&(ae(o,be),Ct(o))}}function ns(e,t,n){const r=n.get(e);if(r!==void 0)return r;if(e.deps!==null)for(const o of e.deps){if(t.includes(o))return!0;if((o.f&ne)!==0&&ns(o,t,n))return n.set(o,!0),!0}return n.set(e,!1),!1}function Ct(e){for(var t=Cn=e;t.parent!==null;){t=t.parent;var n=t.f;if(Kn&&t===U&&(n&it)!==0&&(n&Pr)===0)return;if((n&(Mt|at))!==0){if((n&ie)===0)return;t.f^=ie}}Ae.push(t)}function $o(e){let t=0,n=At(0),r;return()=>{sn()&&(g(n),Mn(()=>(t===0&&(r=zt(()=>e(()=>tn(n)))),t+=1,()=>{Dt(()=>{t-=1,t===0&&(r?.(),r=void 0,tn(n))})})))}}var So=Ft|Bt|xn;function Ro(e,t,n){new To(e,t,n)}class To{parent;#t=!1;#e;#n=P?F:null;#r;#l;#o;#s=null;#i=null;#a=null;#c=null;#u=null;#f=0;#d=0;#h=!1;#v=null;#g=$o(()=>(this.#v=At(this.#f),()=>{this.#v=null}));constructor(t,n,r){this.#e=t,this.#r=n,this.#l=r,this.parent=U.b,this.#t=!!this.#r.pending,this.#o=mr(()=>{if(U.b=this,P){const s=this.#n;Tn(),s.nodeType===Vt&&s.data===Sn?this.#w():this.#y()}else{var o=this.#_();try{this.#s=Me(()=>r(o))}catch(s){this.error(s)}this.#d>0?this.#p():this.#t=!1}return()=>{this.#u?.remove()}},So),P&&(this.#e=F)}#y(){try{this.#s=Me(()=>this.#l(this.#e))}catch(t){this.error(t)}this.#t=!1}#w(){const t=this.#r.pending;t&&(this.#i=Me(()=>t(this.#e)),qe.enqueue(()=>{var n=this.#_();this.#s=this.#m(()=>(qe.ensure(),Me(()=>this.#l(n)))),this.#d>0?this.#p():(St(this.#i,()=>{this.#i=null}),this.#t=!1)}))}#_(){var t=this.#e;return this.#t&&(this.#u=pe(),this.#e.before(this.#u),t=this.#u),t}is_pending(){return this.#t||!!this.parent&&this.parent.is_pending()}has_pending_snippet(){return!!this.#r.pending}#m(t){var n=U,r=O,o=$e;Be(this.#o),me(this.#o),qt(this.#o.ctx);try{return t()}catch(s){return Qr(s),null}finally{Be(n),me(r),qt(o)}}#p(){const t=this.#r.pending;this.#s!==null&&(this.#c=document.createDocumentFragment(),this.#c.append(this.#u),ws(this.#s,this.#c)),this.#i===null&&(this.#i=Me(()=>t(this.#e)))}#b(t){if(!this.has_pending_snippet()){this.parent&&this.parent.#b(t);return}this.#d+=t,this.#d===0&&(this.#t=!1,this.#i&&St(this.#i,()=>{this.#i=null}),this.#c&&(this.#e.before(this.#c),this.#c=null))}update_pending_count(t){this.#b(t),this.#f+=t,this.#v&&Wt(this.#v,this.#f)}get_effect_pending(){return this.#g(),g(this.#v)}error(t){var n=this.#r.onerror;let r=this.#r.failed;if(this.#h||!n&&!r)throw t;this.#s&&(_e(this.#s),this.#s=null),this.#i&&(_e(this.#i),this.#i=null),this.#a&&(_e(this.#a),this.#a=null),P&&(ue(this.#n),ht(),ue(bn()));var o=!1,s=!1;const i=()=>{if(o){ko();return}o=!0,s&&vo(),qe.ensure(),this.#f=0,this.#a!==null&&St(this.#a,()=>{this.#a=null}),this.#t=this.has_pending_snippet(),this.#s=this.#m(()=>(this.#h=!1,Me(()=>this.#l(this.#e)))),this.#d>0?this.#p():this.#t=!1};var l=O;try{me(null),s=!0,n?.(t,i),s=!1}catch(a){Jt(a,this.#o&&this.#o.parent)}finally{me(l)}r&&Dt(()=>{this.#a=this.#m(()=>{qe.ensure(),this.#h=!0;try{return Me(()=>{r(this.#e,()=>t,()=>i)})}catch(a){return Jt(a,this.#o.parent),null}finally{this.#h=!1}})})}}function Co(e,t,n,r){const o=ur;if(n.length===0&&e.length===0){r(t.map(o));return}var s=B,i=U,l=Ao();function a(){Promise.all(n.map(c=>Mo(c))).then(c=>{l();try{r([...t.map(o),...c])}catch(u){(i.f&st)===0&&Jt(u,i)}s?.deactivate(),gn()}).catch(c=>{Jt(c,i)})}e.length>0?Promise.all(e).then(()=>{l();try{return a()}finally{s?.deactivate(),gn()}}):a()}function Ao(){var e=U,t=O,n=$e,r=B;return function(s=!0){Be(e),me(t),qt(n),s&&r?.activate()}}function gn(){Be(null),me(null),qt(null)}function ur(e){var t=ne|be,n=O!==null&&(O.f&ne)!==0?O:null;return U!==null&&(U.f|=Bt),{ctx:$e,deps:null,effects:null,equals:Fr,f:t,fn:e,reactions:null,rv:0,v:oe,wv:0,parent:n??U,ac:null}}function Mo(e,t){let n=U;n===null&&ro();var r=n.b,o=void 0,s=At(oe),i=!O,l=new Map;return Wo(()=>{var a=jr();o=a.promise;try{Promise.resolve(e()).then(a.resolve,a.reject).then(()=>{c===B&&c.committed&&c.deactivate(),gn()})}catch(f){a.reject(f),gn()}var c=B;if(i){var u=!r.is_pending();r.update_pending_count(1),c.increment(u),l.get(c)?.reject(It),l.delete(c),l.set(c,a)}const v=(f,m=void 0)=>{if(c.activate(),m)m!==It&&(s.f|=dt,Wt(s,m));else{(s.f&dt)!==0&&(s.f^=dt),Wt(s,f);for(const[p,w]of l){if(l.delete(p),p===c)break;w.reject(It)}}i&&(r.update_pending_count(-1),c.decrement(u))};a.promise.then(v,f=>v(null,f||"unknown"))}),vr(()=>{for(const a of l.values())a.reject(It)}),new Promise(a=>{function c(u){function v(){u===o?a(s):c(o)}u.then(v,v)}c(o)})}function Do(e){const t=ur(e);return t.equals=qr,t}function rs(e){var t=e.effects;if(t!==null){e.effects=null;for(var n=0;n0&&!os&&Oo()}return t}function Oo(){os=!1;var e=Et;yn(!0);const t=Array.from(Yn);try{for(const n of t)(n.f&ie)!==0&&ae(n,We),ln(n)&&rn(n)}finally{yn(e)}Yn.clear()}function tn(e){A(e,e.v+1)}function is(e,t){var n=e.reactions;if(n!==null)for(var r=n.length,o=0;o{Promise.resolve().then(()=>{if(!e.defaultPrevented)for(const t of e.target.elements)t.__on_r?.()})},{capture:!0}))}function An(e){var t=O,n=U;me(null),Be(null);try{return e()}finally{me(t),Be(n)}}function ls(e,t,n,r=n){e.addEventListener(t,()=>An(n));const o=e.__on_r;o?e.__on_r=()=>{o(),r(!0)}:e.__on_r=()=>r(!0),as()}let Et=!1;function yn(e){Et=e}let Nt=!1;function Rr(e){Nt=e}let O=null,Je=!1;function me(e){O=e}let U=null;function Be(e){U=e}let ot=null;function Po(e){O!==null&&(ot===null?ot=[e]:ot.push(e))}let ce=null,ke=0,Ce=null;function Lo(e){Ce=e}let cs=1,nn=0,$t=nn;function Tr(e){$t=e}function us(){return++cs}function ln(e){var t=e.f;if((t&be)!==0)return!0;if(t&ne&&(e.f&=~Rt),(t&We)!==0){var n=e.deps;if(n!==null)for(var r=n.length,o=0;oe.wv)return!0}(t&Pe)!==0&&De===null&&ae(e,ie)}return!1}function fs(e,t,n=!0){var r=e.reactions;if(r!==null&&!ot?.includes(e))for(var o=0;o{e.ac.abort(It)}),e.ac=null);try{e.f|=Bn;var u=e.fn,v=u(),f=e.deps;if(ce!==null){var m;if(wn(e,ke),f!==null&&ke>0)for(f.length=ke+ce.length,m=0;mnew Promise(r=>{n.outro?St(t,()=>{_e(t),r(void 0)}):(_e(t),r(void 0))})}function Jo(e){return lt(sr,e,!1)}function Wo(e){return lt(ir|Bt,e,!0)}function Mn(e,t=0){return lt(or|t,e,!0)}function Q(e,t=[],n=[],r=[]){Co(r,t,n,o=>{lt(or,()=>e(...o.map(g)),!0)})}function mr(e,t=0){var n=lt(it|t,e,!0);return n}function Me(e){return lt(at|Bt,e,!0)}function ps(e){var t=e.teardown;if(t!==null){const n=Nt,r=O;Rr(!0),me(null);try{t.call(null)}finally{Rr(n),me(r)}}}function _s(e,t=!1){var n=e.first;for(e.first=e.last=null;n!==null;){const o=n.ac;o!==null&&An(()=>{o.abort(It)});var r=n.next;(n.f&Mt)!==0?n.parent=null:_e(n,t),n=r}}function Bo(e){for(var t=e.first;t!==null;){var n=t.next;(t.f&at)===0&&_e(t),t=n}}function _e(e,t=!0){var n=!1;(t||(e.f&Pr)!==0)&&e.nodes!==null&&e.nodes.end!==null&&(Vo(e.nodes.start,e.nodes.end),n=!0),_s(e,t&&!n),wn(e,0),ae(e,st);var r=e.nodes&&e.nodes.t;if(r!==null)for(const s of r)s.stop();ps(e);var o=e.parent;o!==null&&o.first!==null&&bs(e),e.next=e.prev=e.teardown=e.ctx=e.deps=e.fn=e.nodes=e.ac=null}function Vo(e,t){for(;e!==null;){var n=e===t?null:Ve(e);e.remove(),e=n}}function bs(e){var t=e.parent,n=e.prev,r=e.next;n!==null&&(n.next=r),r!==null&&(r.prev=n),t!==null&&(t.first===e&&(t.first=r),t.last===e&&(t.last=n))}function St(e,t,n=!0){var r=[];gs(e,r,!0);var o=()=>{n&&_e(e),t&&t()},s=r.length;if(s>0){var i=()=>--s||o();for(var l of r)l.out(i)}else o()}function gs(e,t,n){if((e.f&Ee)===0){e.f^=Ee;var r=e.nodes&&e.nodes.t;if(r!==null)for(const l of r)(l.is_global||n)&&t.push(l);for(var o=e.first;o!==null;){var s=o.next,i=(o.f&Ft)!==0||(o.f&at)!==0&&(e.f&it)!==0;gs(o,t,i?n:!1),o=s}}}function pr(e){ys(e,!0)}function ys(e,t){if((e.f&Ee)!==0){e.f^=Ee,(e.f&ie)===0&&(ae(e,be),Ct(e));for(var n=e.first;n!==null;){var r=n.next,o=(n.f&Ft)!==0||(n.f&at)!==0;ys(n,o?t:!1),n=r}var s=e.nodes&&e.nodes.t;if(s!==null)for(const i of s)(i.is_global||t)&&i.in()}}function ws(e,t){if(e.nodes)for(var n=e.nodes.start,r=e.nodes.end;n!==null;){var o=n===r?null:Ve(n);t.append(n),n=o}}const xs=new Set,Gn=new Set;function zo(e,t,n,r={}){function o(s){if(r.capture||Xt.call(t,s),!s.cancelBubble)return An(()=>n?.call(this,s))}return e.startsWith("pointer")||e.startsWith("touch")||e==="wheel"?Dt(()=>{t.addEventListener(e,o,r)}):t.addEventListener(e,o,r),o}function _r(e,t,n,r,o){var s={capture:r,passive:o},i=zo(e,t,n,s);(t===document.body||t===window||t===document||t instanceof HTMLMediaElement)&&vr(()=>{t.removeEventListener(e,i,s)})}function _t(e){for(var t=0;t{throw _});throw f}}finally{e.__root=t,delete e.currentTarget,me(u),Be(v)}}}function Ko(e){var t=document.createElement("template");return t.innerHTML=e.replaceAll("",""),t.content}function pt(e,t){var n=U;n.nodes===null&&(n.nodes={start:e,end:t,a:null,t:null})}function T(e,t){var n=(t&go)!==0,r=(t&yo)!==0,o,s=!e.startsWith("");return()=>{if(P)return pt(F,null),F;o===void 0&&(o=Ko(s?e:""+e),n||(o=Tt(o)));var i=r||Kr?document.importNode(o,!0):o.cloneNode(!0);if(n){var l=Tt(i),a=i.lastChild;pt(l,a)}else pt(i,i);return i}}function on(e=""){if(!P){var t=pe(e+"");return pt(t,t),t}var n=F;return n.nodeType!==En&&(n.before(n=pe()),ue(n)),pt(n,n),n}function ks(){if(P)return pt(F,null),F;var e=document.createDocumentFragment(),t=document.createComment(""),n=pe();return e.append(t,n),pt(t,n),e}function S(e,t){if(P){var n=U;((n.f&kn)===0||n.nodes.end===null)&&(n.nodes.end=F),Tn();return}e!==null&&e.before(t)}const Yo=["touchstart","touchmove"];function Go(e){return Yo.includes(e)}function X(e,t){var n=t==null?"":typeof t=="object"?t+"":t;n!==(e.__t??=e.nodeValue)&&(e.__t=n,e.nodeValue=n+"")}function Es(e,t){return $s(e,t)}function Xo(e,t){zn(),t.intro=t.intro??!1;const n=t.target,r=P,o=F;try{for(var s=Tt(n);s&&(s.nodeType!==Vt||s.data!==Wr);)s=Ve(s);if(!s)throw Ut;nt(!0),ue(s);const i=$s(e,{...t,anchor:s});return nt(!1),i}catch(i){if(i instanceof Error&&i.message.split(` -`).some(l=>l.startsWith("https://svelte.dev/e/")))throw i;return i!==Ut&&console.warn("Failed to hydrate: ",i),t.recover===!1&&lo(),zn(),Xr(n),nt(!1),Es(e,t)}finally{nt(r),ue(o)}}const Lt=new Map;function $s(e,{target:t,anchor:n,props:r={},events:o,context:s,intro:i=!0}){zn();var l=new Set,a=v=>{for(var f=0;f{var v=n??t.appendChild(pe());return Ro(v,{pending:()=>{}},f=>{if(s){Le({});var m=$e;m.c=s}if(o&&(r.$$events=o),P&&pt(f,null),c=e(f,r)||{},P&&(U.nodes.end=F,F===null||F.nodeType!==Vt||F.data!==lr))throw Rn(),Ut;s&&He()}),()=>{for(var f of l){t.removeEventListener(f,Xt);var m=Lt.get(f);--m===0?(document.removeEventListener(f,Xt),Lt.delete(f)):Lt.set(f,m)}Gn.delete(a),v!==n&&v.parentNode?.removeChild(v)}});return Xn.set(c,u),c}let Xn=new WeakMap;function Zo(e,t){const n=Xn.get(e);return n?(Xn.delete(e),n(t)):Promise.resolve()}function ze(e){return new Qo(e)}class Qo{#t;#e;constructor(t){var n=new Map,r=(s,i)=>{var l=dr(i,!1,!1);return n.set(s,l),l};const o=new Proxy({...t.props||{},$$events:{}},{get(s,i){return g(n.get(i)??r(i,Reflect.get(s,i)))},has(s,i){return i===Gs?!0:(g(n.get(i)??r(i,Reflect.get(s,i))),Reflect.has(s,i))},set(s,i,l){return A(n.get(i)??r(i,l),l),Reflect.set(s,i,l)}});this.#e=(t.hydrate?Xo:Es)(t.component,{target:t.target,anchor:t.anchor,props:o,context:t.context,intro:t.intro??!1,recover:t.recover}),(!t?.props?.$$host||t.sync===!1)&&he(),this.#t=o.$$events;for(const s of Object.keys(this.#e))s==="$set"||s==="$destroy"||s==="$on"||ar(this,s,{get(){return this.#e[s]},set(i){this.#e[s]=i},enumerable:!0});this.#e.$set=s=>{Object.assign(o,s)},this.#e.$destroy=()=>{Zo(this.#e)}}$set(t){this.#e.$set(t)}$on(t,n){this.#t[t]=this.#t[t]||[];const r=(...o)=>n.call(this,...o);return this.#t[t].push(r),()=>{this.#t[t]=this.#t[t].filter(o=>o!==r)}}$destroy(){this.#e.$destroy()}}const ei="5";typeof window<"u"&&((window.__svelte??={}).v??=new Set).add(ei);class ti{anchor;#t=new Map;#e=new Map;#n=new Map;#r=new Set;#l=!0;constructor(t,n=!0){this.anchor=t,this.#l=n}#o=()=>{var t=B;if(this.#t.has(t)){var n=this.#t.get(t),r=this.#e.get(n);if(r)pr(r),this.#r.delete(n);else{var o=this.#n.get(n);o&&(this.#e.set(n,o.effect),this.#n.delete(n),o.fragment.lastChild.remove(),this.anchor.before(o.fragment),r=o.effect)}for(const[s,i]of this.#t){if(this.#t.delete(s),s===t)break;const l=this.#n.get(i);l&&(_e(l.effect),this.#n.delete(i))}for(const[s,i]of this.#e){if(s===n||this.#r.has(s))continue;const l=()=>{if(Array.from(this.#t.values()).includes(s)){var c=document.createDocumentFragment();ws(i,c),c.append(pe()),this.#n.set(s,{effect:i,fragment:c})}else _e(i);this.#r.delete(s),this.#e.delete(s)};this.#l||!r?(this.#r.add(s),St(i,l,!1)):l()}}};#s=t=>{this.#t.delete(t);const n=Array.from(this.#t.values());for(const[r,o]of this.#n)n.includes(r)||(_e(o.effect),this.#n.delete(r))};ensure(t,n){var r=B,o=Zr();if(n&&!this.#e.has(t)&&!this.#n.has(t))if(o){var s=document.createDocumentFragment(),i=pe();s.append(i),this.#n.set(t,{effect:Me(()=>n(i)),fragment:s})}else this.#e.set(t,Me(()=>n(this.anchor)));if(this.#t.set(r,t),o){for(const[l,a]of this.#e)l===t?r.skipped_effects.delete(a):r.skipped_effects.add(a);for(const[l,a]of this.#n)l===t?r.skipped_effects.delete(a.effect):r.skipped_effects.add(a.effect);r.oncommit(this.#o),r.ondiscard(this.#s)}else P&&(this.anchor=F),this.#o()}}function ni(e){$e===null&&no(),hr(()=>{const t=zt(e);if(typeof t=="function")return t})}function V(e,t,n=!1){P&&Tn();var r=new ti(e),o=n?Ft:0;function s(i,l){if(P){const c=zr(e)===Sn;if(i===c){var a=bn();ue(a),r.anchor=a,nt(!1),r.ensure(i,l),nt(!0);return}}r.ensure(i,l)}mr(()=>{var i=!1;t((l,a=!0)=>{i=!0,s(a,l)}),i||s(!1,null)},o)}function Dn(e,t){return t}function ri(e,t,n){for(var r=[],o=t.length,s,i=t.length,l=0;l{if(s){if(s.pending.delete(v),s.done.add(v),s.pending.size===0){var f=e.outrogroups;Zn($n(s.done)),f.delete(s),f.size===0&&(e.outrogroups=null)}}else i-=1},!1)}if(i===0){var a=r.length===0&&n!==null;if(a){var c=n,u=c.parentNode;Xr(u),u.append(c),e.items.clear()}Zn(t,!a)}else s={pending:new Set(t),done:new Set},(e.outrogroups??=new Set).add(s)}function Zn(e,t=!0){for(var n=0;n{var x=n();return Lr(x)?x:x==null?[]:$n(x)}),f,m=!0;function p(){_.fallback=u,si(_,f,i,t,r),u!==null&&(f.length===0?(u.f&tt)===0?pr(u):(u.f^=tt,Zt(u,null,i)):St(u,()=>{u=null}))}var w=mr(()=>{f=g(v);var x=f.length;let L=!1;if(P){var j=zr(i)===Sn;j!==(x===0)&&(i=bn(),ue(i),nt(!1),L=!0)}for(var H=new Set,Y=B,Z=Zr(),M=0;Ms(i)):(u=Me(()=>s(Ar??=pe())),u.f|=tt)),P&&x>0&&ue(bn()),!m)if(Z){for(const[ee,ge]of l)H.has(ee)||Y.skipped_effects.add(ge.e);Y.oncommit(p),Y.ondiscard(()=>{})}else p();L&&nt(!0),g(v)}),_={effect:w,items:l,outrogroups:null,fallback:u};m=!1,P&&(i=F)}function si(e,t,n,r,o){var s=(r&_o)!==0,i=t.length,l=e.items,a=e.effect.first,c,u=null,v,f=[],m=[],p,w,_,x;if(s)for(x=0;x0){var $=(r&Jr)!==0&&i===0?n:null;if(s){for(x=0;x{if(v!==void 0)for(_ of v)_.nodes?.a?.apply()})}function oi(e,t,n,r,o,s,i,l){var a=(i&mo)!==0?(i&bo)===0?dr(n,!1,!1):At(n):null,c=(i&po)!==0?At(o):null;return{v:a,i:c,e:Me(()=>(s(t,a??n,c??o,l),()=>{e.delete(r)}))}}function Zt(e,t,n){if(e.nodes)for(var r=e.nodes.start,o=e.nodes.end,s=t&&(t.f&tt)===0?t.nodes.start:n;r!==null;){var i=Ve(r);if(s.before(r),r===o)return;r=i}}function ut(e,t,n){t===null?e.effect.first=n:t.next=n,n===null?e.effect.last=t:n.prev=t}function Ss(e){var t,n,r="";if(typeof e=="string"||typeof e=="number")r+=e;else if(typeof e=="object")if(Array.isArray(e)){var o=e.length;for(t=0;t{if(!t){if(t=!0,e.hasAttribute("value")){var r=e.value;Qn(e,"value",null),e.value=r}if(e.hasAttribute("checked")){var o=e.checked;Qn(e,"checked",null),e.checked=o}}};e.__on_r=n,Dt(n),as()}}function Qn(e,t,n,r){var o=ui(e);P&&(o[t]=e.getAttribute(t),t==="src"||t==="srcset"||t==="href"&&e.nodeName==="LINK")||o[t]!==(o[t]=n)&&(t==="loading"&&(e[Xs]=n),n==null?e.removeAttribute(t):typeof n!="string"&&fi(e).includes(t)?e[t]=n:e.setAttribute(t,n))}function ui(e){return e.__attributes??={[li]:e.nodeName.includes("-"),[ci]:e.namespaceURI===wo}}var Dr=new Map;function fi(e){var t=e.getAttribute("is")||e.nodeName,n=Dr.get(t);if(n)return n;Dr.set(t,n=[]);for(var r,o=e,s=Element.prototype;s!==o;){r=Qs(o);for(var i in r)r[i].set&&n.push(i);o=Hr(o)}return n}function kt(e,t,n=t){var r=new WeakSet;ls(e,"input",async o=>{var s=o?e.defaultValue:e.value;if(s=Jn(e)?Wn(s):s,n(s),B!==null&&r.add(B),await Io(),s!==(s=t())){var i=e.selectionStart,l=e.selectionEnd,a=e.value.length;if(e.value=s??"",l!==null){var c=e.value.length;i===l&&l===a&&c>a?(e.selectionStart=c,e.selectionEnd=c):(e.selectionStart=i,e.selectionEnd=Math.min(l,c))}}}),(P&&e.defaultValue!==e.value||zt(t)==null&&e.value)&&(n(Jn(e)?Wn(e.value):e.value),B!==null&&r.add(B)),Mn(()=>{var o=t();if(e===document.activeElement){var s=_n??B;if(r.has(s))return}Jn(e)&&o===Wn(e.value)||e.type==="date"&&!o&&!e.value||o!==e.value&&(e.value=o??"")})}function di(e,t,n=t){ls(e,"change",r=>{var o=r?e.defaultChecked:e.checked;n(o)}),(P&&e.defaultChecked!==e.checked||zt(t)==null)&&n(e.checked),Mn(()=>{var r=t();e.checked=!!r})}function Jn(e){var t=e.type;return t==="number"||t==="range"}function Wn(e){return e===""?null:+e}function Nr(e,t){return e===t||e?.[pn]===t}function vi(e={},t,n,r){return Jo(()=>{var o,s;return Mn(()=>{o=s,s=[],zt(()=>{e!==n(...s)&&(t(e,...s),o&&Nr(n(...o),e)&&t(null,...o))})}),()=>{Dt(()=>{s&&Nr(n(...s),e)&&t(null,...s)})}}),e}function Ke(e,t,n){e.$$events||={},e.$$events[t]||=[],e.$$events[t].push(n)}function Ye(e){for(var t in e)t in this&&(this[t]=e[t])}function br(e,t,n){if(e==null)return t(void 0),n&&n(void 0),vt;const r=zt(()=>e.subscribe(t,n));return r.unsubscribe?()=>r.unsubscribe():r}const Ht=[];function hi(e,t){return{subscribe:Se(e,t).subscribe}}function Se(e,t=vt){let n=null;const r=new Set;function o(l){if(Ur(e,l)&&(e=l,n)){const a=!Ht.length;for(const c of r)c[1](),Ht.push(c,e);if(a){for(let c=0;c{r.delete(c),r.size===0&&n&&(n(),n=null)}}return{set:o,update:s,subscribe:i}}function Rs(e,t,n){const r=!Array.isArray(e),o=r?[e]:e;if(!o.every(Boolean))throw new Error("derived() expects stores as input, got a falsy value");const s=t.length<2;return hi(n,(i,l)=>{let a=!1;const c=[];let u=0,v=vt;const f=()=>{if(u)return;v();const p=t(r?c[0]:c,i,l);s?i(p):v=typeof p=="function"?p:vt},m=o.map((p,w)=>br(p,_=>{c[w]=_,u&=~(1<{u|=1<t=n)(),t}let er=Symbol();function K(e,t,n){const r=n[t]??={store:null,source:dr(void 0),unsubscribe:vt};if(r.store!==e&&!(er in n))if(r.unsubscribe(),r.store=e??null,e==null)r.source.v=void 0,r.unsubscribe=vt;else{var o=!0;r.unsubscribe=br(e,s=>{o?r.source.v=s:A(r.source,s)}),o=!1}return e&&er in n?I(e):g(r.source)}function bt(){const e={};function t(){vr(()=>{for(var n in e)e[n].unsubscribe();ar(e,er,{enumerable:!1,value:!0})})}return[e,t]}function Ne(e,t,n,r){var o=r,s=!0,i=()=>(s&&(s=!1,o=r),o),l;l=e[t],l===void 0&&r!==void 0&&(l=i());var a;a=()=>{var f=e[t];return f===void 0?i():(s=!0,f)};var c=!1,u=ur(()=>(c=!1,a())),v=U;return(function(f,m){if(arguments.length>0){const p=m?g(u):f;return A(u,p),c=!0,o!==void 0&&(o=p),f}return Nt&&c||(v.f&st)!==0?u.v:g(u)})}const Ts=Se(null),an=Se(!1),gt=Se(!1),yt=Se(null),un=Se(""),Nn=Se(null),fn=Se(null),C=Se("[Hub]"),fe=Se(new Map([["[Hub]",{messages:[],users:new Set,unread:0}]])),On=Se([]),Pn=Se({hubHash:"",destName:"rrc.hub",nickname:"",identityPath:"~/.rrc-web/identity"}),gr=Se(new Set),yr=Rs([fe,C],([e,t])=>e.get(t)||{messages:[],users:new Set,unread:0}),wr=Rs(fe,e=>Array.from(e.keys())),Cs=Object.freeze(Object.defineProperty({__proto__:null,connectionSettings:Pn,currentRoom:C,currentRoomData:yr,discoveredHubs:On,hubName:yt,identityHash:Nn,latency:fn,nickname:un,roomList:wr,rooms:fe,rrcConnected:gt,sentMessageIds:gr,ws:Ts,wsConnected:an},Symbol.toStringTag,{value:"Module"}));let et=null;function As(){const t=`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}/ws`;et=new WebSocket(t),Ts.set(et),et.onopen=()=>{an.set(!0),tr(),Pi(),q({type:"get_state"})},et.onmessage=n=>{const r=JSON.parse(n.data);mi(r)},et.onerror=n=>{console.error("WebSocket error:",n),n.currentTarget?.readyState===WebSocket.CLOSED&&fetch("/ws",{method:"HEAD"}).then(r=>{r.status===401&&window.location.reload()}).catch(()=>{})},et.onclose=n=>{an.set(!1),gt.set(!1),fn.set(null),n.code===1008||n.code===1002?(console.log("WebSocket closed due to authentication failure"),window.location.reload()):setTimeout(As,3e3)}}function q(e){et&&et.readyState===WebSocket.OPEN&&et.send(JSON.stringify(e))}function mi(e){switch(e.type){case"connected":pi(e);break;case"disconnected":_i();break;case"message":bi(e);break;case"notice":gi(e);break;case"error":yi(e);break;case"system":wi(e);break;case"message_sent":xi(e);break;case"room_joined":ki(e.room,e.users);break;case"room_parted":Ei(e.room);break;case"state":$i(e);break;case"latency":Si(e);break;case"user_list_update":Ri(e);break;case"hub_info":Ti(e);break;case"hub_discovered":Ci(e);break;case"discovered_hubs":Ai(e);break}}function pi(e){gt.set(!0),e.hub_name&&yt.set(e.hub_name),un.set(e.nickname||""),e.identity_hash&&Nn.set(e.identity_hash)}function _i(){gt.set(!1),yt.set(null),fe.update(e=>{const t=e.get("[Hub]")||{messages:[],users:new Set,unread:0};return t.messages.push({type:"system",text:"Disconnected from hub",timestamp:new Date().toLocaleTimeString()}),e.set("[Hub]",t),new Map(e)})}function bi(e){const t=e.room||"[Hub]";fe.update(n=>{n.has(t)||n.set(t,{messages:[],users:new Set,unread:0});const r=n.get(t);return r.messages.push({type:"message",user:e.user,text:e.text,timestamp:e.timestamp||new Date().toLocaleTimeString(),message_id:e.message_id,sender_identity:e.sender_identity}),t!==I(C)&&r.unread++,new Map(n)})}function gi(e){const t=e.room||"[Hub]";fe.update(n=>(n.has(t)||n.set(t,{messages:[],users:new Set,unread:0}),n.get(t).messages.push({type:"notice",text:e.text,timestamp:e.timestamp||new Date().toLocaleTimeString()}),new Map(n)))}function yi(e){const t=I(C);fe.update(n=>{const r=n.get(t);return r&&r.messages.push({type:"error",text:e.text||e.error,timestamp:new Date().toLocaleTimeString()}),new Map(n)})}function wi(e){const t=e.room||I(C);fe.update(n=>(n.has(t)||n.set(t,{messages:[],users:new Set,unread:0}),n.get(t).messages.push({type:"system",text:e.text,timestamp:e.timestamp||new Date().toLocaleTimeString()}),new Map(n)))}function xi(e){e.message_id&&gr.update(t=>{if(t.add(e.message_id),t.size>100){const n=t.values().next().value;t.delete(n)}return t})}function ki(e,t){fe.update(n=>{n.has(e)||n.set(e,{messages:[],users:new Set,unread:0});const r=n.get(e);return r.users=new Set(t||[]),new Map(n)}),C.set(e)}function Ei(e){fe.update(t=>(t.delete(e),new Map(t))),I(C)===e&&C.set("[Hub]")}function $i(e){e.connected!==void 0&>.set(e.connected),e.hub_name&&yt.set(e.hub_name),e.nickname&&un.set(e.nickname),e.identity_hash&&Nn.set(e.identity_hash),e.rooms&&Object.keys(e.rooms).length>0&&fe.update(t=>{const n=new Map;return Object.keys(e.rooms).forEach(r=>{const o=e.rooms[r],s=t.get(r);n.set(r,{messages:o.messages||s?.messages||[],users:new Set(o.users||[]),unread:s?.unread||0})}),n})}function Si(e){e.latency_ms!==void 0&&fn.set(e.latency_ms)}function Ri(e){const t=e.room||"[Hub]";fe.update(n=>{n.has(t)||n.set(t,{messages:[],users:new Set,unread:0});const r=n.get(t);return r.users=new Set(e.users||[]),new Map(n)})}function Ti(e){yt.set(e.hub_name)}function Ci(e){e.hub&&On.update(t=>t.find(r=>r.hash===e.hub.hash)?t:[...t,e.hub])}function Ai(e){On.set(e.hubs||[])}function tr(){q({type:"get_discovered_hubs"})}function Mi(e,t,n,r){q({type:"connect",hub_hash:e,dest_name:t,nickname:n,identity_path:r}),Li(e,t,n,r)}function Ms(){q({type:"disconnect"})}function Di(e){q({type:"join_room",room:e})}function Ni(e){q({type:"part_room",room:e})}function Oi(e,t){e.trim()&&q({type:"send_message",text:e,room:t||I(C)})}function Pi(){const e=localStorage.getItem("rrc_connection_settings");if(e)try{const t=JSON.parse(e);Pn.set(t)}catch(t){console.error("Failed to load connection settings:",t)}}function Li(e,t,n,r){const o={hubHash:e,destName:t,nickname:n,identityPath:r};localStorage.setItem("rrc_connection_settings",JSON.stringify(o)),Pn.set(o)}function Ds(e){fe.update(t=>{const n=t.get(e);return n&&(n.unread=0),new Map(t)})}var Hi=T(' '),Ii=T(''),ji=T('
WS
'),Fi=T('
WS
'),Ui=T('
RRC
'),qi=T('
RRC
'),Ji=T('
Nick:
'),Wi=T('
Latency:
'),Bi=T('');function Ns(e,t){if(new.target)return ze({component:Ns,...e});Le(t,!0);const n=()=>K(yt,"$hubName",a),r=()=>K(gt,"$rrcConnected",a),o=()=>K(an,"$wsConnected",a),s=()=>K(un,"$nickname",a),i=()=>K(fn,"$latency",a),l=()=>K(C,"$currentRoom",a),[a,c]=bt();let u=Ne(t,"onToggleTheme"),v=G("dark");function f(){A(v,g(v)==="dark"?"light":"dark",!0),document.documentElement.setAttribute("data-theme",g(v)),u()(g(v))}function m(){Ms()}async function p(){try{await fetch("/api/logout",{method:"POST"}),window.location.reload()}catch(E){console.error("Logout error:",E),window.location.reload()}}function w(E){return E==="[Hub]"?n()||"Hub":E}var _={get onToggleTheme(){return u()},set onToggleTheme(E){u(E),he()},$set:Ye,$on:(E,D)=>Ke(t,E,D)},x=Bi(),L=h(x),j=y(h(L),4);{var H=E=>{var D=Hi(),k=h(D);d(D),Q(()=>X(k,`- ${n()??""}`)),S(E,D)};V(j,E=>{n()&&E(H)})}var Y=y(j,2);{var Z=E=>{var D=Ii();D.__click=m,S(E,D)};V(Y,E=>{r()&&E(Z)})}d(L);var M=y(L,2),b=h(M),$=h(b),R=h($);{var ee=E=>{var D=ji();S(E,D)},ge=E=>{var D=Fi();S(E,D)};V(R,E=>{o()?E(ee):E(ge,!1)})}var J=y(R,2);{var ye=E=>{var D=Ui();S(E,D)},de=E=>{var D=qi();S(E,D)};V(J,E=>{r()?E(ye):E(de,!1)})}var te=y(J,2);{var se=E=>{var D=Ji(),k=y(h(D),2),W=h(k,!0);d(k),d(D),Q(()=>X(W,s())),S(E,D)};V(te,E=>{s()&&E(se)})}var we=y(te,2);{var Oe=E=>{var D=Wi(),k=y(h(D),2),W=h(k);d(k),d(D),Q(()=>X(W,`${i()??""}ms`)),S(E,D)};V(we,E=>{i()!==null&&E(Oe)})}d($);var ve=y($,2),Ge=h(ve,!0);d(ve);var xe=y(ve,2);xe.__click=f;var Re=h(xe);{var Ie=E=>{var D=on("☀️");S(E,D)},je=E=>{var D=on("🌙");S(E,D)};V(Re,E=>{g(v)==="dark"?E(Ie):E(je,!1)})}d(xe);var Xe=y(xe,2);Xe.__click=p,d(b),d(M),d(x),Q(E=>X(Ge,E),[()=>w(l())]),S(e,x);var Fe=He(_);return c(),Fe}_t(["click"]);var Vi=T(' '),zi=T('

No hubs discovered yet

Listening for announcements...

'),Ki=T(' '),Yi=T('
  • '),Gi=T(''),Xi=T('');function Os(e,t){if(new.target)return ze({component:Os,...e});Le(t,!0);const n=()=>K(Pn,"$connectionSettings",o),r=()=>K(On,"$discoveredHubs",o),[o,s]=bt();let i=Ne(t,"onConnect"),l=G(rt(n().hubHash)),a=G(rt(n().destName)),c=G(rt(n().nickname)),u=G(rt(n().identityPath)),v=G(!1);ni(()=>{tr()});function f(){Mi(g(l),g(a),g(c),g(u)),i()()}function m(k){A(l,k.hash,!0),A(a,k.aspect||"rrc.hub",!0)}function p(){tr()}function w(k){const W=Date.now()/1e3,le=Math.floor(W-k);return le<60?`${le}s ago`:le<3600?`${Math.floor(le/60)}m ago`:`${Math.floor(le/3600)}h ago`}var _={get onConnect(){return i()},set onConnect(k){i(k),he()},$set:Ye,$on:(k,W)=>Ke(t,k,W)},x=Xi(),L=h(x),j=y(h(L),2),H=h(j),Y=h(H),Z=h(Y),M=h(Z),b=y(h(M));{var $=k=>{var W=Vi(),le=h(W,!0);d(W),Q(()=>X(le,r().length)),S(k,W)};V(b,k=>{r().length>0&&k($)})}d(M);var R=y(M,2);R.__click=p,d(Z);var ee=y(Z,2),ge=h(ee);{var J=k=>{var W=zi();S(k,W)},ye=k=>{var W=Gi();cn(W,5,r,Dn,(le,ct)=>{var Kt=Yi(),Yt=h(Kt);Yt.__click=()=>m(g(ct));var dn=h(Yt),wt=h(dn),Ot=h(wt,!0);d(wt);var vn=y(wt,2),Gt=h(vn),Ln=h(Gt);d(Gt);var Hn=y(Gt,2);{var In=Ze=>{var Pt=Ki(),hn=h(Pt,!0);d(Pt),Q(jn=>X(hn,jn),[()=>w(g(ct).last_seen)]),S(Ze,Pt)};V(Hn,Ze=>{g(ct).last_seen&&Ze(In)})}d(vn),d(dn),d(Yt),d(Kt),Q(Ze=>{X(Ot,g(ct).name||"Unknown Hub"),X(Ln,`${Ze??""}...`)},[()=>g(ct).hash?.substring(0,16)]),S(le,Kt)}),d(W),S(k,W)};V(ge,k=>{r().length===0?k(J):k(ye,!1)})}d(ee),d(Y),d(H);var de=y(H,2),te=h(de),se=y(h(te),2),we=h(se),Oe=y(h(we),2);ft(Oe),ht(2),d(we);var ve=y(we,2),Ge=y(h(ve),2);ft(Ge),d(ve);var xe=y(ve,2),Re=h(xe);ft(Re);var Ie=y(Re,4),je=h(Ie),Xe=y(h(je),2);ft(Xe),ht(2),d(je);var Fe=y(je,2),E=y(h(Fe),2);ft(E),d(Fe),d(Ie),d(xe),ht(2),d(se),d(te),d(de),d(j),d(L),d(x),_r("submit",se,k=>{k.preventDefault(),f()}),kt(Oe,()=>g(l),k=>A(l,k)),kt(Ge,()=>g(c),k=>A(c,k)),di(Re,()=>g(v),k=>A(v,k)),kt(Xe,()=>g(a),k=>A(a,k)),kt(E,()=>g(u),k=>A(u,k)),S(e,x);var D=He(_);return s(),D}_t(["click"]);var Zi=T(' '),Qi=T("
  • "),ea=T(''),ta=T('

    Rooms

    ');function Ps(e,t){if(new.target)return ze({component:Ps,...e});Le(t,!0);const n=()=>K(fe,"$rooms",i),r=()=>K(yt,"$hubName",i),o=()=>K(wr,"$roomListStore",i),s=()=>K(C,"$currentRoom",i),[i,l]=bt();let a=Ne(t,"onJoinRoom"),c=Ne(t,"onPartRoom"),u=Ne(t,"onToggleSidebar");function v(b){C.set(b),Ds(b)}function f(b){return n().get(b)?.unread||0}function m(b){return b==="[Hub]"?r()||"Hub":b}var p={get onJoinRoom(){return a()},set onJoinRoom(b){a(b),he()},get onPartRoom(){return c()},set onPartRoom(b){c(b),he()},get onToggleSidebar(){return u()},set onToggleSidebar(b){u(b),he()},$set:Ye,$on:(b,$)=>Ke(t,b,$)},w=ta(),_=h(w),x=y(h(_),2);x.__click=function(...b){u()?.apply(this,b)},d(_);var L=y(_,2);cn(L,5,o,Dn,(b,$)=>{var R=Qi(),ee=h(R);ee.__click=()=>v(g($));var ge=h(ee),J=h(ge,!0);d(ge);var ye=y(ge,2);{var de=te=>{var se=Zi(),we=h(se,!0);d(se),Q(Oe=>X(we,Oe),[()=>f(g($))]),S(te,se)};V(ye,te=>{f(g($))>0&&te(de)})}d(ee),d(R),Q(te=>{jt(ee,1,`flex justify-between items-center w-full text-left px-2 py-2 rounded ${g($)===s()?"bg-primary text-primary-content hover:bg-primary-focus":"hover:bg-base-300"}`),X(J,te)},[()=>m(g($))]),S(b,R)}),d(L);var j=y(L,4),H=h(j);H.__click=function(...b){a()?.apply(this,b)};var Y=y(H,2);{var Z=b=>{var $=ea();$.__click=function(...R){c()?.apply(this,R)},S(b,$)};V(Y,b=>{s()!=="[Hub]"&&b(Z)})}d(j),d(w),S(e,w);var M=He(p);return l(),M}_t(["click"]);var na=T('
    '),ra=T(''),sa=T('
    '),oa=T('
    ');function nr(e,t){if(new.target)return ze({component:nr,...e});Le(t,!0);const n=()=>K(Nn,"$identityHash",s),r=()=>K(gr,"$sentMessageIds",s),o=()=>K(yr,"$currentRoomData",s),[s,i]=bt();let l;hr(()=>{l&&(l.scrollTop=l.scrollHeight)});function a(p){return!!(p.type==="message"&&p.message_id&&p.sender_identity&&n()&&r()&&r().has(p.message_id)&&p.sender_identity===n())}function c(p){if(a(p))return"chat chat-end";switch(p.type){case"message":return"chat chat-start";case"system":return"chat chat-end";case"notice":return"chat chat-end";case"error":return"chat chat-end";default:return"chat"}}function u(p){if(a(p))return"chat-bubble chat-bubble-accent";switch(p.type){case"message":return"chat-bubble chat-bubble-primary";case"system":return"chat-bubble chat-bubble-info";case"notice":return"chat-bubble chat-bubble-warning";case"error":return"chat-bubble chat-bubble-error";default:return"chat-bubble"}}var v={$set:Ye,$on:(p,w)=>Ke(t,p,w)},f=oa();cn(f,7,()=>o()?.messages||[],(p,w)=>p.timestamp+p.text+w,(p,w)=>{var _=sa(),x=h(_);{var L=M=>{var b=na(),$=h(b),R=y($),ee=h(R,!0);d(R),d(b),Q(()=>{X($,`${g(w).user??""} `),X(ee,g(w).timestamp)}),S(M,b)};V(x,M=>{g(w).user&&M(L)})}var j=y(x,2),H=h(j,!0);d(j);var Y=y(j,2);{var Z=M=>{var b=ra(),$=h(b),R=h($,!0);d($),d(b),Q(()=>X(R,g(w).timestamp)),S(M,b)};V(Y,M=>{!g(w).user&&g(w).timestamp&&M(Z)})}d(_),Q((M,b)=>{jt(_,1,M),jt(j,1,b),X(H,g(w).text)},[()=>Mr(c(g(w))),()=>Mr(u(g(w)))]),S(p,_)}),d(f),vi(f,p=>l=p,()=>l),S(e,f);var m=He(v);return i(),m}const ia="modulepreload",aa=function(e){return"/static/"+e},Or={},Ls=function(t,n,r){let o=Promise.resolve();if(n&&n.length>0){let c=function(u){return Promise.all(u.map(v=>Promise.resolve(v).then(f=>({status:"fulfilled",value:f}),f=>({status:"rejected",reason:f}))))};var i=c;document.getElementsByTagName("link");const l=document.querySelector("meta[property=csp-nonce]"),a=l?.nonce||l?.getAttribute("nonce");o=c(n.map(u=>{if(u=aa(u),u in Or)return;Or[u]=!0;const v=u.endsWith(".css"),f=v?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${u}"]${f}`))return;const m=document.createElement("link");if(m.rel=v?"stylesheet":ia,v||(m.as="script"),m.crossOrigin="",m.href=u,a&&m.setAttribute("nonce",a),document.head.appendChild(m),v)return new Promise((p,w)=>{m.addEventListener("load",p),m.addEventListener("error",()=>w(new Error(`Unable to preload CSS for ${u}`)))})}))}function s(l){const a=new Event("vite:preloadError",{cancelable:!0});if(a.payload=l,window.dispatchEvent(a),!a.defaultPrevented)throw l}return o.then(l=>{for(const a of l||[])a.status==="rejected"&&s(a.reason);return t().catch(s)})};function la(e){if(!e.startsWith("/"))return!1;const t=e.slice(1).trim().split(/\s+/),n=t[0].toLowerCase(),r=t.slice(1);switch(n){case"stats":return ca();case"reload":return ua();case"who":return fa(r);case"kline":return da(r);case"kick":return va(r);case"register":return ha(r);case"unregister":return ma(r);case"topic":return pa(r);case"mode":return _a(r);case"op":return ba(r);case"deop":return ga(r);case"voice":return ya(r);case"devoice":return wa(r);case"ban":return xa(r);case"invite":return ka(r);case"join":return Ea(r);case"part":case"leave":return $a(r);case"nick":return Sa(r);case"msg":case"query":return Ra(r);case"help":return Ta();default:return Ca(e)}}function ca(){return q({type:"send_command",command:"/stats",room:I(C)}),!0}function ua(){return q({type:"send_command",command:"/reload",room:I(C)}),!0}function fa(e){const t=e.length>0?e[0]:I(C);return q({type:"send_command",command:`/who ${t}`,room:I(C)}),!0}function da(e){if(e.length<1)return re("Usage: /kline [target]"),!0;const t=e[0],n=e.slice(1).join(" ");return t==="list"?q({type:"send_command",command:"/kline list",room:I(C)}):t==="add"&&n?q({type:"send_command",command:`/kline add ${n}`,room:I(C)}):t==="del"&&n?q({type:"send_command",command:`/kline del ${n}`,room:I(C)}):re("Usage: /kline [target]"),!0}function va(e){if(e.length<2)return re("Usage: /kick "),!0;const t=e[0],n=e.slice(1).join(" ");return q({type:"send_command",command:`/kick ${t} ${n}`,room:I(C)}),!0}function ha(e){const t=e.length>0?e[0]:I(C);return q({type:"send_command",command:`/register ${t}`,room:I(C)}),!0}function ma(e){const t=e.length>0?e[0]:I(C);return q({type:"send_command",command:`/unregister ${t}`,room:I(C)}),!0}function pa(e){if(e.length===0)return re("Usage: /topic [topic]"),!0;const t=e[0],n=e.slice(1).join(" ");return q({type:"send_command",command:`/topic ${t}${n?" "+n:""}`,room:I(C)}),!0}function _a(e){if(e.length<2)return re("Usage: /mode [args]"),!0;const t=e[0],n=e[1],r=e.slice(2).join(" ");return q({type:"send_command",command:`/mode ${t} ${n}${r?" "+r:""}`,room:I(C)}),!0}function ba(e){if(e.length<2)return re("Usage: /op "),!0;const t=e[0],n=e.slice(1).join(" ");return q({type:"send_command",command:`/op ${t} ${n}`,room:I(C)}),!0}function ga(e){if(e.length<2)return re("Usage: /deop "),!0;const t=e[0],n=e.slice(1).join(" ");return q({type:"send_command",command:`/deop ${t} ${n}`,room:I(C)}),!0}function ya(e){if(e.length<2)return re("Usage: /voice "),!0;const t=e[0],n=e.slice(1).join(" ");return q({type:"send_command",command:`/voice ${t} ${n}`,room:I(C)}),!0}function wa(e){if(e.length<2)return re("Usage: /devoice "),!0;const t=e[0],n=e.slice(1).join(" ");return q({type:"send_command",command:`/devoice ${t} ${n}`,room:I(C)}),!0}function xa(e){if(e.length<2)return re("Usage: /ban [target]"),!0;const t=e[0],n=e[1],r=e.slice(2).join(" ");return n==="list"?q({type:"send_command",command:`/ban ${t} list`,room:I(C)}):(n==="add"||n==="del")&&r?q({type:"send_command",command:`/ban ${t} ${n} ${r}`,room:I(C)}):re("Usage: /ban [target]"),!0}function ka(e){if(e.length<2)return re("Usage: /invite [target]"),!0;const t=e[0],n=e[1],r=e.slice(2).join(" ");return n==="list"?q({type:"send_command",command:`/invite ${t} list`,room:I(C)}):(n==="add"||n==="del")&&r?q({type:"send_command",command:`/invite ${t} ${n} ${r}`,room:I(C)}):re("Usage: /invite [target]"),!0}function Ea(e){if(e.length===0)return re("Usage: /join "),!0;const t=e[0];return q({type:"join_room",room:t}),!0}function $a(e){const t=e.length>0?e[0]:I(C);return t==="[Hub]"?(re("Cannot part from [Hub]"),!0):(q({type:"part_room",room:t}),!0)}function Sa(e){if(e.length===0)return re("Usage: /nick "),!0;const t=e.join(" ");return q({type:"set_nickname",nickname:t}),!0}function Ra(e){if(e.length<2)return re("Usage: /msg "),!0;const t=e[0],n=e.slice(1).join(" ");return q({type:"send_message",text:n,room:t}),!0}function Ta(e){const t=` +(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))r(o);new MutationObserver(o=>{for(const s of o)if(s.type==="childList")for(const i of s.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&r(i)}).observe(document,{childList:!0,subtree:!0});function n(o){const s={};return o.integrity&&(s.integrity=o.integrity),o.referrerPolicy&&(s.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?s.credentials="include":o.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function r(o){if(o.ep)return;o.ep=!0;const s=n(o);fetch(o.href,s)}})();const ne=2,or=4,ir=8,Ks=1<<24,it=16,at=32,Mt=64,kn=128,Oe=512,ie=1024,be=2048,We=4096,Ee=8192,st=16384,En=32768,Ft=65536,xr=1<<17,Or=1<<18,Bt=1<<19,Ys=1<<20,tt=1<<25,Rt=32768,Vn=1<<21,ar=1<<22,dt=1<<23,pn=Symbol("$state"),Gs=Symbol("legacy props"),Xs=Symbol(""),It=new class extends Error{name="StaleReactionError";message="The reaction that called `getAbortSignal()` was re-run or destroyed"},$n=3,Vt=8,zn=!1;var Lr=Array.isArray,Zs=Array.prototype.indexOf,Sn=Array.from,lr=Object.defineProperty,en=Object.getOwnPropertyDescriptor,Qs=Object.getOwnPropertyDescriptors,eo=Object.prototype,to=Array.prototype,Hr=Object.getPrototypeOf,kr=Object.isExtensible;const vt=()=>{};function Ir(e){for(var t=0;t{e=r,t=o});return{promise:n,resolve:e,reject:t}}function Fr(e){return e===this.v}function Ur(e,t){return e!=e?t==t:e!==t||e!==null&&typeof e=="object"||typeof e=="function"}function qr(e){return!Ur(e,this.v)}function no(e){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function ro(){throw new Error("https://svelte.dev/e/async_derived_orphan")}function so(e){throw new Error("https://svelte.dev/e/effect_in_teardown")}function oo(){throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function io(e){throw new Error("https://svelte.dev/e/effect_orphan")}function ao(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}function lo(){throw new Error("https://svelte.dev/e/hydration_failed")}function co(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function uo(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}function fo(){throw new Error("https://svelte.dev/e/state_unsafe_mutation")}function vo(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}let ho=!1;const mo=1,_o=2,Jr=4,po=8,bo=16,go=1,yo=2,Wr="[",Rn="[!",cr="]",Ut={},oe=Symbol(),wo="http://www.w3.org/1999/xhtml";let $e=null;function qt(e){$e=e}function Le(e,t=!1,n){$e={p:$e,i:!1,c:null,e:null,s:e,x:null,l:null}}function He(e){var t=$e,n=t.e;if(n!==null){t.e=null;for(var r of n)ms(r)}return e!==void 0&&(t.x=e),t.i=!0,$e=t.p,e??{}}function Br(){return!0}let xt=[];function Vr(){var e=xt;xt=[],Ir(e)}function Nt(e){if(xt.length===0&&!tn){var t=xt;queueMicrotask(()=>{t===xt&&Vr()})}xt.push(e)}function xo(){for(;xt.length>0;)Vr()}function Tn(e){console.warn("https://svelte.dev/e/hydration_mismatch")}function ko(){console.warn("https://svelte.dev/e/svelte_boundary_reset_noop")}let O=!1;function nt(e){O=e}let F;function ue(e){if(e===null)throw Tn(),Ut;return F=e}function Cn(){return ue(Ve(F))}function d(e){if(O){if(Ve(F)!==null)throw Tn(),Ut;F=e}}function ht(e=1){if(O){for(var t=e,n=F;t--;)n=Ve(n);F=n}}function gn(e=!0){for(var t=0,n=F;;){if(n.nodeType===Vt){var r=n.data;if(r===cr){if(t===0)return n;t-=1}else(r===Wr||r===Rn)&&(t+=1)}var o=Ve(n);e&&n.remove(),n=o}}function zr(e){if(!e||e.nodeType!==Vt)throw Tn(),Ut;return e.data}function rt(e){if(typeof e!="object"||e===null||pn in e)return e;const t=Hr(e);if(t!==eo&&t!==to)return e;var n=new Map,r=Lr(e),o=G(0),s=$t,i=l=>{if($t===s)return l();var a=P,c=$t;me(null),Tr(s);var u=l();return me(a),Tr(c),u};return r&&n.set("length",G(e.length)),new Proxy(e,{defineProperty(l,a,c){(!("value"in c)||c.configurable===!1||c.enumerable===!1||c.writable===!1)&&co();var u=n.get(a);return u===void 0?u=i(()=>{var v=G(c.value);return n.set(a,v),v}):T(u,c.value,!0),!0},deleteProperty(l,a){var c=n.get(a);if(c===void 0){if(a in l){const u=i(()=>G(oe));n.set(a,u),nn(o)}}else T(c,oe),nn(o);return!0},get(l,a,c){if(a===pn)return e;var u=n.get(a),v=a in l;if(u===void 0&&(!v||en(l,a)?.writable)&&(u=i(()=>{var m=rt(v?l[a]:oe),_=G(m);return _}),n.set(a,u)),u!==void 0){var f=b(u);return f===oe?void 0:f}return Reflect.get(l,a,c)},getOwnPropertyDescriptor(l,a){var c=Reflect.getOwnPropertyDescriptor(l,a);if(c&&"value"in c){var u=n.get(a);u&&(c.value=b(u))}else if(c===void 0){var v=n.get(a),f=v?.v;if(v!==void 0&&f!==oe)return{enumerable:!0,configurable:!0,value:f,writable:!0}}return c},has(l,a){if(a===pn)return!0;var c=n.get(a),u=c!==void 0&&c.v!==oe||Reflect.has(l,a);if(c!==void 0||U!==null&&(!u||en(l,a)?.writable)){c===void 0&&(c=i(()=>{var f=u?rt(l[a]):oe,m=G(f);return m}),n.set(a,c));var v=b(c);if(v===oe)return!1}return u},set(l,a,c,u){var v=n.get(a),f=a in l;if(r&&a==="length")for(var m=c;mG(oe)),n.set(m+"",_))}if(v===void 0)(!f||en(l,a)?.writable)&&(v=i(()=>G(void 0)),T(v,rt(c)),n.set(a,v));else{f=v.v!==oe;var w=i(()=>rt(c));T(v,w)}var p=Reflect.getOwnPropertyDescriptor(l,a);if(p?.set&&p.set.call(u,c),!f){if(r&&typeof a=="string"){var x=n.get("length"),L=Number(a);Number.isInteger(L)&&L>=x.v&&T(x,L+1)}nn(o)}return!0},ownKeys(l){b(o);var a=Reflect.ownKeys(l).filter(v=>{var f=n.get(v);return f===void 0||f.v!==oe});for(var[c,u]of n)u.v!==oe&&!(c in l)&&a.push(c);return a},setPrototypeOf(){uo()}})}var Er,Kr,Yr,Gr;function Kn(){if(Er===void 0){Er=window,Kr=/Firefox/.test(navigator.userAgent);var e=Element.prototype,t=Node.prototype,n=Text.prototype;Yr=en(t,"firstChild").get,Gr=en(t,"nextSibling").get,kr(e)&&(e.__click=void 0,e.__className=void 0,e.__attributes=null,e.__style=void 0,e.__e=void 0),kr(n)&&(n.__t=void 0)}}function _e(e=""){return document.createTextNode(e)}function Tt(e){return Yr.call(e)}function Ve(e){return Gr.call(e)}function h(e,t){if(!O)return Tt(e);var n=Tt(F);if(n===null)n=F.appendChild(_e());else if(t&&n.nodeType!==$n){var r=_e();return n?.before(r),ue(r),r}return ue(n),n}function ur(e,t=!1){if(!O){var n=Tt(e);return n instanceof Comment&&n.data===""?Ve(n):n}if(t&&F?.nodeType!==$n){var r=_e();return F?.before(r),ue(r),r}return F}function y(e,t=1,n=!1){let r=O?F:e;for(var o;t--;)o=r,r=Ve(r);if(!O)return r;if(n&&r?.nodeType!==$n){var s=_e();return r===null?o?.after(s):r.before(s),ue(s),s}return ue(r),r}function Xr(e){e.textContent=""}function Zr(){return!1}function Qr(e){var t=U;if(t===null)return P.f|=dt,e;if((t.f&En)===0){if((t.f&kn)===0)throw e;t.b.error(e)}else Jt(e,t)}function Jt(e,t){for(;t!==null;){if((t.f&kn)!==0)try{t.b.error(e);return}catch(n){e=n}t=t.parent}throw e}const _n=new Set;let B=null,bn=null,Ne=null,Ae=[],An=null,Yn=!1,tn=!1;class qe{committed=!1;current=new Map;previous=new Map;#t=new Set;#e=new Set;#n=0;#r=0;#l=null;#o=new Set;#s=new Set;skipped_effects=new Set;is_fork=!1;is_deferred(){return this.is_fork||this.#r>0}process(t){Ae=[],bn=null,this.apply();var n={parent:null,effect:null,effects:[],render_effects:[]};for(const r of t)this.#i(r,n);this.is_fork||this.#u(),this.is_deferred()?(this.#a(n.effects),this.#a(n.render_effects)):(bn=this,B=null,$r(n.render_effects),$r(n.effects),bn=null,this.#l?.resolve()),Ne=null}#i(t,n){t.f^=ie;for(var r=t.first;r!==null;){var o=r.f,s=(o&(at|Mt))!==0,i=s&&(o&ie)!==0,l=i||(o&Ee)!==0||this.skipped_effects.has(r);if((r.f&kn)!==0&&r.b?.is_pending()&&(n={parent:n,effect:r,effects:[],render_effects:[]}),!l&&r.fn!==null){s?r.f^=ie:(o&or)!==0?n.effects.push(r):cn(r)&&((r.f&it)!==0&&this.#o.add(r),sn(r));var a=r.first;if(a!==null){r=a;continue}}var c=r.parent;for(r=r.next;r===null&&c!==null;)c===n.effect&&(this.#a(n.effects),this.#a(n.render_effects),n=n.parent),r=c.next,c=c.parent}}#a(t){for(const n of t)(n.f&be)!==0?this.#o.add(n):(n.f&We)!==0&&this.#s.add(n),this.#c(n.deps),ae(n,ie)}#c(t){if(t!==null)for(const n of t)(n.f&ne)===0||(n.f&Rt)===0||(n.f^=Rt,this.#c(n.deps))}capture(t,n){this.previous.has(t)||this.previous.set(t,n),(t.f&dt)===0&&(this.current.set(t,t.v),Ne?.set(t,t.v))}activate(){B=this,this.apply()}deactivate(){B===this&&(B=null,Ne=null)}flush(){if(this.activate(),Ae.length>0){if(es(),B!==null&&B!==this)return}else this.#n===0&&this.process([]);this.deactivate()}discard(){for(const t of this.#e)t(this);this.#e.clear()}#u(){if(this.#r===0){for(const t of this.#t)t();this.#t.clear()}this.#n===0&&this.#f()}#f(){if(_n.size>1){this.previous.clear();var t=Ne,n=!0,r={parent:null,effect:null,effects:[],render_effects:[]};for(const s of _n){if(s===this){n=!1;continue}const i=[];for(const[a,c]of this.current){if(s.current.has(a))if(n&&c!==s.current.get(a))s.current.set(a,c);else continue;i.push(a)}if(i.length===0)continue;const l=[...s.current.keys()].filter(a=>!this.current.has(a));if(l.length>0){var o=Ae;Ae=[];const a=new Set,c=new Map;for(const u of i)ts(u,l,a,c);if(Ae.length>0){B=s,s.apply();for(const u of Ae)s.#i(u,r);s.deactivate()}Ae=o}}B=null,Ne=t}this.committed=!0,_n.delete(this)}increment(t){this.#n+=1,t&&(this.#r+=1)}decrement(t){this.#n-=1,t&&(this.#r-=1),this.revive()}revive(){for(const t of this.#o)this.#s.delete(t),ae(t,be),Ct(t);for(const t of this.#s)ae(t,We),Ct(t);this.flush()}oncommit(t){this.#t.add(t)}ondiscard(t){this.#e.add(t)}settled(){return(this.#l??=jr()).promise}static ensure(){if(B===null){const t=B=new qe;_n.add(B),tn||qe.enqueue(()=>{B===t&&t.flush()})}return B}static enqueue(t){Nt(t)}apply(){}}function he(e){var t=tn;tn=!0;try{for(var n;;){if(xo(),Ae.length===0&&(B?.flush(),Ae.length===0))return An=null,n;es()}}finally{tn=t}}function es(){var e=Et;Yn=!0;var t=null;try{var n=0;for(wn(!0);Ae.length>0;){var r=qe.ensure();if(n++>1e3){var o,s;Eo()}r.process(Ae),mt.clear()}}finally{Yn=!1,wn(e),An=null}}function Eo(){try{ao()}catch(e){Jt(e,An)}}let Qe=null;function $r(e){var t=e.length;if(t!==0){for(var n=0;n0)){mt.clear();for(const o of Qe){if((o.f&(st|Ee))!==0)continue;const s=[o];let i=o.parent;for(;i!==null;)Qe.has(i)&&(Qe.delete(i),s.push(i)),i=i.parent;for(let l=s.length-1;l>=0;l--){const a=s[l];(a.f&(st|Ee))===0&&sn(a)}}Qe.clear()}}Qe=null}}function ts(e,t,n,r){if(!n.has(e)&&(n.add(e),e.reactions!==null))for(const o of e.reactions){const s=o.f;(s&ne)!==0?ts(o,t,n,r):(s&(ar|it))!==0&&(s&be)===0&&ns(o,t,r)&&(ae(o,be),Ct(o))}}function ns(e,t,n){const r=n.get(e);if(r!==void 0)return r;if(e.deps!==null)for(const o of e.deps){if(t.includes(o))return!0;if((o.f&ne)!==0&&ns(o,t,n))return n.set(o,!0),!0}return n.set(e,!1),!1}function Ct(e){for(var t=An=e;t.parent!==null;){t=t.parent;var n=t.f;if(Yn&&t===U&&(n&it)!==0&&(n&Or)===0)return;if((n&(Mt|at))!==0){if((n&ie)===0)return;t.f^=ie}}Ae.push(t)}function $o(e){let t=0,n=At(0),r;return()=>{on()&&(b(n),Dn(()=>(t===0&&(r=zt(()=>e(()=>nn(n)))),t+=1,()=>{Nt(()=>{t-=1,t===0&&(r?.(),r=void 0,nn(n))})})))}}var So=Ft|Bt|kn;function Ro(e,t,n){new To(e,t,n)}class To{parent;#t=!1;#e;#n=O?F:null;#r;#l;#o;#s=null;#i=null;#a=null;#c=null;#u=null;#f=0;#d=0;#h=!1;#v=null;#g=$o(()=>(this.#v=At(this.#f),()=>{this.#v=null}));constructor(t,n,r){this.#e=t,this.#r=n,this.#l=r,this.parent=U.b,this.#t=!!this.#r.pending,this.#o=mr(()=>{if(U.b=this,O){const s=this.#n;Cn(),s.nodeType===Vt&&s.data===Rn?this.#w():this.#y()}else{var o=this.#p();try{this.#s=Me(()=>r(o))}catch(s){this.error(s)}this.#d>0?this.#_():this.#t=!1}return()=>{this.#u?.remove()}},So),O&&(this.#e=F)}#y(){try{this.#s=Me(()=>this.#l(this.#e))}catch(t){this.error(t)}this.#t=!1}#w(){const t=this.#r.pending;t&&(this.#i=Me(()=>t(this.#e)),qe.enqueue(()=>{var n=this.#p();this.#s=this.#m(()=>(qe.ensure(),Me(()=>this.#l(n)))),this.#d>0?this.#_():(St(this.#i,()=>{this.#i=null}),this.#t=!1)}))}#p(){var t=this.#e;return this.#t&&(this.#u=_e(),this.#e.before(this.#u),t=this.#u),t}is_pending(){return this.#t||!!this.parent&&this.parent.is_pending()}has_pending_snippet(){return!!this.#r.pending}#m(t){var n=U,r=P,o=$e;Be(this.#o),me(this.#o),qt(this.#o.ctx);try{return t()}catch(s){return Qr(s),null}finally{Be(n),me(r),qt(o)}}#_(){const t=this.#r.pending;this.#s!==null&&(this.#c=document.createDocumentFragment(),this.#c.append(this.#u),ws(this.#s,this.#c)),this.#i===null&&(this.#i=Me(()=>t(this.#e)))}#b(t){if(!this.has_pending_snippet()){this.parent&&this.parent.#b(t);return}this.#d+=t,this.#d===0&&(this.#t=!1,this.#i&&St(this.#i,()=>{this.#i=null}),this.#c&&(this.#e.before(this.#c),this.#c=null))}update_pending_count(t){this.#b(t),this.#f+=t,this.#v&&Wt(this.#v,this.#f)}get_effect_pending(){return this.#g(),b(this.#v)}error(t){var n=this.#r.onerror;let r=this.#r.failed;if(this.#h||!n&&!r)throw t;this.#s&&(pe(this.#s),this.#s=null),this.#i&&(pe(this.#i),this.#i=null),this.#a&&(pe(this.#a),this.#a=null),O&&(ue(this.#n),ht(),ue(gn()));var o=!1,s=!1;const i=()=>{if(o){ko();return}o=!0,s&&vo(),qe.ensure(),this.#f=0,this.#a!==null&&St(this.#a,()=>{this.#a=null}),this.#t=this.has_pending_snippet(),this.#s=this.#m(()=>(this.#h=!1,Me(()=>this.#l(this.#e)))),this.#d>0?this.#_():this.#t=!1};var l=P;try{me(null),s=!0,n?.(t,i),s=!1}catch(a){Jt(a,this.#o&&this.#o.parent)}finally{me(l)}r&&Nt(()=>{this.#a=this.#m(()=>{qe.ensure(),this.#h=!0;try{return Me(()=>{r(this.#e,()=>t,()=>i)})}catch(a){return Jt(a,this.#o.parent),null}finally{this.#h=!1}})})}}function Co(e,t,n,r){const o=fr;if(n.length===0&&e.length===0){r(t.map(o));return}var s=B,i=U,l=Ao();function a(){Promise.all(n.map(c=>Mo(c))).then(c=>{l();try{r([...t.map(o),...c])}catch(u){(i.f&st)===0&&Jt(u,i)}s?.deactivate(),yn()}).catch(c=>{Jt(c,i)})}e.length>0?Promise.all(e).then(()=>{l();try{return a()}finally{s?.deactivate(),yn()}}):a()}function Ao(){var e=U,t=P,n=$e,r=B;return function(s=!0){Be(e),me(t),qt(n),s&&r?.activate()}}function yn(){Be(null),me(null),qt(null)}function fr(e){var t=ne|be,n=P!==null&&(P.f&ne)!==0?P:null;return U!==null&&(U.f|=Bt),{ctx:$e,deps:null,effects:null,equals:Fr,f:t,fn:e,reactions:null,rv:0,v:oe,wv:0,parent:n??U,ac:null}}function Mo(e,t){let n=U;n===null&&ro();var r=n.b,o=void 0,s=At(oe),i=!P,l=new Map;return Wo(()=>{var a=jr();o=a.promise;try{Promise.resolve(e()).then(a.resolve,a.reject).then(()=>{c===B&&c.committed&&c.deactivate(),yn()})}catch(f){a.reject(f),yn()}var c=B;if(i){var u=!r.is_pending();r.update_pending_count(1),c.increment(u),l.get(c)?.reject(It),l.delete(c),l.set(c,a)}const v=(f,m=void 0)=>{if(c.activate(),m)m!==It&&(s.f|=dt,Wt(s,m));else{(s.f&dt)!==0&&(s.f^=dt),Wt(s,f);for(const[_,w]of l){if(l.delete(_),_===c)break;w.reject(It)}}i&&(r.update_pending_count(-1),c.decrement(u))};a.promise.then(v,f=>v(null,f||"unknown"))}),hr(()=>{for(const a of l.values())a.reject(It)}),new Promise(a=>{function c(u){function v(){u===o?a(s):c(o)}u.then(v,v)}c(o)})}function No(e){const t=fr(e);return t.equals=qr,t}function rs(e){var t=e.effects;if(t!==null){e.effects=null;for(var n=0;n0&&!os&&Po()}return t}function Po(){os=!1;var e=Et;wn(!0);const t=Array.from(Gn);try{for(const n of t)(n.f&ie)!==0&&ae(n,We),cn(n)&&sn(n)}finally{wn(e)}Gn.clear()}function nn(e){T(e,e.v+1)}function is(e,t){var n=e.reactions;if(n!==null)for(var r=n.length,o=0;o{Promise.resolve().then(()=>{if(!e.defaultPrevented)for(const t of e.target.elements)t.__on_r?.()})},{capture:!0}))}function Mn(e){var t=P,n=U;me(null),Be(null);try{return e()}finally{me(t),Be(n)}}function ls(e,t,n,r=n){e.addEventListener(t,()=>Mn(n));const o=e.__on_r;o?e.__on_r=()=>{o(),r(!0)}:e.__on_r=()=>r(!0),as()}let Et=!1;function wn(e){Et=e}let Dt=!1;function Rr(e){Dt=e}let P=null,Je=!1;function me(e){P=e}let U=null;function Be(e){U=e}let ot=null;function Oo(e){P!==null&&(ot===null?ot=[e]:ot.push(e))}let ce=null,ke=0,Ce=null;function Lo(e){Ce=e}let cs=1,rn=0,$t=rn;function Tr(e){$t=e}function us(){return++cs}function cn(e){var t=e.f;if((t&be)!==0)return!0;if(t&ne&&(e.f&=~Rt),(t&We)!==0){var n=e.deps;if(n!==null)for(var r=n.length,o=0;oe.wv)return!0}(t&Oe)!==0&&Ne===null&&ae(e,ie)}return!1}function fs(e,t,n=!0){var r=e.reactions;if(r!==null&&!ot?.includes(e))for(var o=0;o{e.ac.abort(It)}),e.ac=null);try{e.f|=Vn;var u=e.fn,v=u(),f=e.deps;if(ce!==null){var m;if(xn(e,ke),f!==null&&ke>0)for(f.length=ke+ce.length,m=0;mnew Promise(r=>{n.outro?St(t,()=>{pe(t),r(void 0)}):(pe(t),r(void 0))})}function Jo(e){return lt(or,e,!1)}function Wo(e){return lt(ar|Bt,e,!0)}function Dn(e,t=0){return lt(ir|t,e,!0)}function Q(e,t=[],n=[],r=[]){Co(r,t,n,o=>{lt(ir,()=>e(...o.map(b)),!0)})}function mr(e,t=0){var n=lt(it|t,e,!0);return n}function Me(e){return lt(at|Bt,e,!0)}function _s(e){var t=e.teardown;if(t!==null){const n=Dt,r=P;Rr(!0),me(null);try{t.call(null)}finally{Rr(n),me(r)}}}function ps(e,t=!1){var n=e.first;for(e.first=e.last=null;n!==null;){const o=n.ac;o!==null&&Mn(()=>{o.abort(It)});var r=n.next;(n.f&Mt)!==0?n.parent=null:pe(n,t),n=r}}function Bo(e){for(var t=e.first;t!==null;){var n=t.next;(t.f&at)===0&&pe(t),t=n}}function pe(e,t=!0){var n=!1;(t||(e.f&Or)!==0)&&e.nodes!==null&&e.nodes.end!==null&&(Vo(e.nodes.start,e.nodes.end),n=!0),ps(e,t&&!n),xn(e,0),ae(e,st);var r=e.nodes&&e.nodes.t;if(r!==null)for(const s of r)s.stop();_s(e);var o=e.parent;o!==null&&o.first!==null&&bs(e),e.next=e.prev=e.teardown=e.ctx=e.deps=e.fn=e.nodes=e.ac=null}function Vo(e,t){for(;e!==null;){var n=e===t?null:Ve(e);e.remove(),e=n}}function bs(e){var t=e.parent,n=e.prev,r=e.next;n!==null&&(n.next=r),r!==null&&(r.prev=n),t!==null&&(t.first===e&&(t.first=r),t.last===e&&(t.last=n))}function St(e,t,n=!0){var r=[];gs(e,r,!0);var o=()=>{n&&pe(e),t&&t()},s=r.length;if(s>0){var i=()=>--s||o();for(var l of r)l.out(i)}else o()}function gs(e,t,n){if((e.f&Ee)===0){e.f^=Ee;var r=e.nodes&&e.nodes.t;if(r!==null)for(const l of r)(l.is_global||n)&&t.push(l);for(var o=e.first;o!==null;){var s=o.next,i=(o.f&Ft)!==0||(o.f&at)!==0&&(e.f&it)!==0;gs(o,t,i?n:!1),o=s}}}function _r(e){ys(e,!0)}function ys(e,t){if((e.f&Ee)!==0){e.f^=Ee,(e.f&ie)===0&&(ae(e,be),Ct(e));for(var n=e.first;n!==null;){var r=n.next,o=(n.f&Ft)!==0||(n.f&at)!==0;ys(n,o?t:!1),n=r}var s=e.nodes&&e.nodes.t;if(s!==null)for(const i of s)(i.is_global||t)&&i.in()}}function ws(e,t){if(e.nodes)for(var n=e.nodes.start,r=e.nodes.end;n!==null;){var o=n===r?null:Ve(n);t.append(n),n=o}}const xs=new Set,Xn=new Set;function zo(e,t,n,r={}){function o(s){if(r.capture||Zt.call(t,s),!s.cancelBubble)return Mn(()=>n?.call(this,s))}return e.startsWith("pointer")||e.startsWith("touch")||e==="wheel"?Nt(()=>{t.addEventListener(e,o,r)}):t.addEventListener(e,o,r),o}function pr(e,t,n,r,o){var s={capture:r,passive:o},i=zo(e,t,n,s);(t===document.body||t===window||t===document||t instanceof HTMLMediaElement)&&hr(()=>{t.removeEventListener(e,i,s)})}function pt(e){for(var t=0;t{throw p});throw f}}finally{e.__root=t,delete e.currentTarget,me(u),Be(v)}}}function Ko(e){var t=document.createElement("template");return t.innerHTML=e.replaceAll("",""),t.content}function _t(e,t){var n=U;n.nodes===null&&(n.nodes={start:e,end:t,a:null,t:null})}function C(e,t){var n=(t&go)!==0,r=(t&yo)!==0,o,s=!e.startsWith("");return()=>{if(O)return _t(F,null),F;o===void 0&&(o=Ko(s?e:""+e),n||(o=Tt(o)));var i=r||Kr?document.importNode(o,!0):o.cloneNode(!0);if(n){var l=Tt(i),a=i.lastChild;_t(l,a)}else _t(i,i);return i}}function an(e=""){if(!O){var t=_e(e+"");return _t(t,t),t}var n=F;return n.nodeType!==$n&&(n.before(n=_e()),ue(n)),_t(n,n),n}function ks(){if(O)return _t(F,null),F;var e=document.createDocumentFragment(),t=document.createComment(""),n=_e();return e.append(t,n),_t(t,n),e}function S(e,t){if(O){var n=U;((n.f&En)===0||n.nodes.end===null)&&(n.nodes.end=F),Cn();return}e!==null&&e.before(t)}const Yo=["touchstart","touchmove"];function Go(e){return Yo.includes(e)}function X(e,t){var n=t==null?"":typeof t=="object"?t+"":t;n!==(e.__t??=e.nodeValue)&&(e.__t=n,e.nodeValue=n+"")}function Es(e,t){return $s(e,t)}function Xo(e,t){Kn(),t.intro=t.intro??!1;const n=t.target,r=O,o=F;try{for(var s=Tt(n);s&&(s.nodeType!==Vt||s.data!==Wr);)s=Ve(s);if(!s)throw Ut;nt(!0),ue(s);const i=$s(e,{...t,anchor:s});return nt(!1),i}catch(i){if(i instanceof Error&&i.message.split(` +`).some(l=>l.startsWith("https://svelte.dev/e/")))throw i;return i!==Ut&&console.warn("Failed to hydrate: ",i),t.recover===!1&&lo(),Kn(),Xr(n),nt(!1),Es(e,t)}finally{nt(r),ue(o)}}const Lt=new Map;function $s(e,{target:t,anchor:n,props:r={},events:o,context:s,intro:i=!0}){Kn();var l=new Set,a=v=>{for(var f=0;f{var v=n??t.appendChild(_e());return Ro(v,{pending:()=>{}},f=>{if(s){Le({});var m=$e;m.c=s}if(o&&(r.$$events=o),O&&_t(f,null),c=e(f,r)||{},O&&(U.nodes.end=F,F===null||F.nodeType!==Vt||F.data!==cr))throw Tn(),Ut;s&&He()}),()=>{for(var f of l){t.removeEventListener(f,Zt);var m=Lt.get(f);--m===0?(document.removeEventListener(f,Zt),Lt.delete(f)):Lt.set(f,m)}Xn.delete(a),v!==n&&v.parentNode?.removeChild(v)}});return Zn.set(c,u),c}let Zn=new WeakMap;function Zo(e,t){const n=Zn.get(e);return n?(Zn.delete(e),n(t)):Promise.resolve()}function ze(e){return new Qo(e)}class Qo{#t;#e;constructor(t){var n=new Map,r=(s,i)=>{var l=vr(i,!1,!1);return n.set(s,l),l};const o=new Proxy({...t.props||{},$$events:{}},{get(s,i){return b(n.get(i)??r(i,Reflect.get(s,i)))},has(s,i){return i===Gs?!0:(b(n.get(i)??r(i,Reflect.get(s,i))),Reflect.has(s,i))},set(s,i,l){return T(n.get(i)??r(i,l),l),Reflect.set(s,i,l)}});this.#e=(t.hydrate?Xo:Es)(t.component,{target:t.target,anchor:t.anchor,props:o,context:t.context,intro:t.intro??!1,recover:t.recover}),(!t?.props?.$$host||t.sync===!1)&&he(),this.#t=o.$$events;for(const s of Object.keys(this.#e))s==="$set"||s==="$destroy"||s==="$on"||lr(this,s,{get(){return this.#e[s]},set(i){this.#e[s]=i},enumerable:!0});this.#e.$set=s=>{Object.assign(o,s)},this.#e.$destroy=()=>{Zo(this.#e)}}$set(t){this.#e.$set(t)}$on(t,n){this.#t[t]=this.#t[t]||[];const r=(...o)=>n.call(this,...o);return this.#t[t].push(r),()=>{this.#t[t]=this.#t[t].filter(o=>o!==r)}}$destroy(){this.#e.$destroy()}}const ei="5";typeof window<"u"&&((window.__svelte??={}).v??=new Set).add(ei);class ti{anchor;#t=new Map;#e=new Map;#n=new Map;#r=new Set;#l=!0;constructor(t,n=!0){this.anchor=t,this.#l=n}#o=()=>{var t=B;if(this.#t.has(t)){var n=this.#t.get(t),r=this.#e.get(n);if(r)_r(r),this.#r.delete(n);else{var o=this.#n.get(n);o&&(this.#e.set(n,o.effect),this.#n.delete(n),o.fragment.lastChild.remove(),this.anchor.before(o.fragment),r=o.effect)}for(const[s,i]of this.#t){if(this.#t.delete(s),s===t)break;const l=this.#n.get(i);l&&(pe(l.effect),this.#n.delete(i))}for(const[s,i]of this.#e){if(s===n||this.#r.has(s))continue;const l=()=>{if(Array.from(this.#t.values()).includes(s)){var c=document.createDocumentFragment();ws(i,c),c.append(_e()),this.#n.set(s,{effect:i,fragment:c})}else pe(i);this.#r.delete(s),this.#e.delete(s)};this.#l||!r?(this.#r.add(s),St(i,l,!1)):l()}}};#s=t=>{this.#t.delete(t);const n=Array.from(this.#t.values());for(const[r,o]of this.#n)n.includes(r)||(pe(o.effect),this.#n.delete(r))};ensure(t,n){var r=B,o=Zr();if(n&&!this.#e.has(t)&&!this.#n.has(t))if(o){var s=document.createDocumentFragment(),i=_e();s.append(i),this.#n.set(t,{effect:Me(()=>n(i)),fragment:s})}else this.#e.set(t,Me(()=>n(this.anchor)));if(this.#t.set(r,t),o){for(const[l,a]of this.#e)l===t?r.skipped_effects.delete(a):r.skipped_effects.add(a);for(const[l,a]of this.#n)l===t?r.skipped_effects.delete(a.effect):r.skipped_effects.add(a.effect);r.oncommit(this.#o),r.ondiscard(this.#s)}else O&&(this.anchor=F),this.#o()}}function ni(e){$e===null&&no(),Nn(()=>{const t=zt(e);if(typeof t=="function")return t})}function V(e,t,n=!1){O&&Cn();var r=new ti(e),o=n?Ft:0;function s(i,l){if(O){const c=zr(e)===Rn;if(i===c){var a=gn();ue(a),r.anchor=a,nt(!1),r.ensure(i,l),nt(!0);return}}r.ensure(i,l)}mr(()=>{var i=!1;t((l,a=!0)=>{i=!0,s(a,l)}),i||s(!1,null)},o)}function Pn(e,t){return t}function ri(e,t,n){for(var r=[],o=t.length,s,i=t.length,l=0;l{if(s){if(s.pending.delete(v),s.done.add(v),s.pending.size===0){var f=e.outrogroups;Qn(Sn(s.done)),f.delete(s),f.size===0&&(e.outrogroups=null)}}else i-=1},!1)}if(i===0){var a=r.length===0&&n!==null;if(a){var c=n,u=c.parentNode;Xr(u),u.append(c),e.items.clear()}Qn(t,!a)}else s={pending:new Set(t),done:new Set},(e.outrogroups??=new Set).add(s)}function Qn(e,t=!0){for(var n=0;n{var x=n();return Lr(x)?x:x==null?[]:Sn(x)}),f,m=!0;function _(){p.fallback=u,si(p,f,i,t,r),u!==null&&(f.length===0?(u.f&tt)===0?_r(u):(u.f^=tt,Qt(u,null,i)):St(u,()=>{u=null}))}var w=mr(()=>{f=b(v);var x=f.length;let L=!1;if(O){var j=zr(i)===Rn;j!==(x===0)&&(i=gn(),ue(i),nt(!1),L=!0)}for(var H=new Set,Y=B,Z=Zr(),M=0;Ms(i)):(u=Me(()=>s(Ar??=_e())),u.f|=tt)),O&&x>0&&ue(gn()),!m)if(Z){for(const[ee,ge]of l)H.has(ee)||Y.skipped_effects.add(ge.e);Y.oncommit(_),Y.ondiscard(()=>{})}else _();L&&nt(!0),b(v)}),p={effect:w,items:l,outrogroups:null,fallback:u};m=!1,O&&(i=F)}function si(e,t,n,r,o){var s=(r&po)!==0,i=t.length,l=e.items,a=e.effect.first,c,u=null,v,f=[],m=[],_,w,p,x;if(s)for(x=0;x0){var $=(r&Jr)!==0&&i===0?n:null;if(s){for(x=0;x{if(v!==void 0)for(p of v)p.nodes?.a?.apply()})}function oi(e,t,n,r,o,s,i,l){var a=(i&mo)!==0?(i&bo)===0?vr(n,!1,!1):At(n):null,c=(i&_o)!==0?At(o):null;return{v:a,i:c,e:Me(()=>(s(t,a??n,c??o,l),()=>{e.delete(r)}))}}function Qt(e,t,n){if(e.nodes)for(var r=e.nodes.start,o=e.nodes.end,s=t&&(t.f&tt)===0?t.nodes.start:n;r!==null;){var i=Ve(r);if(s.before(r),r===o)return;r=i}}function ut(e,t,n){t===null?e.effect.first=n:t.next=n,n===null?e.effect.last=t:n.prev=t}function Ss(e){var t,n,r="";if(typeof e=="string"||typeof e=="number")r+=e;else if(typeof e=="object")if(Array.isArray(e)){var o=e.length;for(t=0;t{if(!t){if(t=!0,e.hasAttribute("value")){var r=e.value;er(e,"value",null),e.value=r}if(e.hasAttribute("checked")){var o=e.checked;er(e,"checked",null),e.checked=o}}};e.__on_r=n,Nt(n),as()}}function er(e,t,n,r){var o=ui(e);O&&(o[t]=e.getAttribute(t),t==="src"||t==="srcset"||t==="href"&&e.nodeName==="LINK")||o[t]!==(o[t]=n)&&(t==="loading"&&(e[Xs]=n),n==null?e.removeAttribute(t):typeof n!="string"&&fi(e).includes(t)?e[t]=n:e.setAttribute(t,n))}function ui(e){return e.__attributes??={[li]:e.nodeName.includes("-"),[ci]:e.namespaceURI===wo}}var Nr=new Map;function fi(e){var t=e.getAttribute("is")||e.nodeName,n=Nr.get(t);if(n)return n;Nr.set(t,n=[]);for(var r,o=e,s=Element.prototype;s!==o;){r=Qs(o);for(var i in r)r[i].set&&n.push(i);o=Hr(o)}return n}function kt(e,t,n=t){var r=new WeakSet;ls(e,"input",async o=>{var s=o?e.defaultValue:e.value;if(s=Wn(e)?Bn(s):s,n(s),B!==null&&r.add(B),await Io(),s!==(s=t())){var i=e.selectionStart,l=e.selectionEnd,a=e.value.length;if(e.value=s??"",l!==null){var c=e.value.length;i===l&&l===a&&c>a?(e.selectionStart=c,e.selectionEnd=c):(e.selectionStart=i,e.selectionEnd=Math.min(l,c))}}}),(O&&e.defaultValue!==e.value||zt(t)==null&&e.value)&&(n(Wn(e)?Bn(e.value):e.value),B!==null&&r.add(B)),Dn(()=>{var o=t();if(e===document.activeElement){var s=bn??B;if(r.has(s))return}Wn(e)&&o===Bn(e.value)||e.type==="date"&&!o&&!e.value||o!==e.value&&(e.value=o??"")})}function di(e,t,n=t){ls(e,"change",r=>{var o=r?e.defaultChecked:e.checked;n(o)}),(O&&e.defaultChecked!==e.checked||zt(t)==null)&&n(e.checked),Dn(()=>{var r=t();e.checked=!!r})}function Wn(e){var t=e.type;return t==="number"||t==="range"}function Bn(e){return e===""?null:+e}function Dr(e,t){return e===t||e?.[pn]===t}function vi(e={},t,n,r){return Jo(()=>{var o,s;return Dn(()=>{o=s,s=[],zt(()=>{e!==n(...s)&&(t(e,...s),o&&Dr(n(...o),e)&&t(null,...o))})}),()=>{Nt(()=>{s&&Dr(n(...s),e)&&t(null,...s)})}}),e}function Ke(e,t,n){e.$$events||={},e.$$events[t]||=[],e.$$events[t].push(n)}function Ye(e){for(var t in e)t in this&&(this[t]=e[t])}function br(e,t,n){if(e==null)return t(void 0),n&&n(void 0),vt;const r=zt(()=>e.subscribe(t,n));return r.unsubscribe?()=>r.unsubscribe():r}const Ht=[];function hi(e,t){return{subscribe:Se(e,t).subscribe}}function Se(e,t=vt){let n=null;const r=new Set;function o(l){if(Ur(e,l)&&(e=l,n)){const a=!Ht.length;for(const c of r)c[1](),Ht.push(c,e);if(a){for(let c=0;c{r.delete(c),r.size===0&&n&&(n(),n=null)}}return{set:o,update:s,subscribe:i}}function Rs(e,t,n){const r=!Array.isArray(e),o=r?[e]:e;if(!o.every(Boolean))throw new Error("derived() expects stores as input, got a falsy value");const s=t.length<2;return hi(n,(i,l)=>{let a=!1;const c=[];let u=0,v=vt;const f=()=>{if(u)return;v();const _=t(r?c[0]:c,i,l);s?i(_):v=typeof _=="function"?_:vt},m=o.map((_,w)=>br(_,p=>{c[w]=p,u&=~(1<{u|=1<t=n)(),t}let tr=Symbol();function K(e,t,n){const r=n[t]??={store:null,source:vr(void 0),unsubscribe:vt};if(r.store!==e&&!(tr in n))if(r.unsubscribe(),r.store=e??null,e==null)r.source.v=void 0,r.unsubscribe=vt;else{var o=!0;r.unsubscribe=br(e,s=>{o?r.source.v=s:T(r.source,s)}),o=!1}return e&&tr in n?I(e):b(r.source)}function bt(){const e={};function t(){hr(()=>{for(var n in e)e[n].unsubscribe();lr(e,tr,{enumerable:!1,value:!0})})}return[e,t]}function De(e,t,n,r){var o=r,s=!0,i=()=>(s&&(s=!1,o=r),o),l;l=e[t],l===void 0&&r!==void 0&&(l=i());var a;a=()=>{var f=e[t];return f===void 0?i():(s=!0,f)};var c=!1,u=fr(()=>(c=!1,a())),v=U;return(function(f,m){if(arguments.length>0){const _=m?b(u):f;return T(u,_),c=!0,o!==void 0&&(o=_),f}return Dt&&c||(v.f&st)!==0?u.v:b(u)})}const Ts=Se(null),ln=Se(!1),gt=Se(!1),yt=Se(null),Kt=Se(""),On=Se(null),fn=Se(null),A=Se("[Hub]"),fe=Se(new Map([["[Hub]",{messages:[],users:new Set,unread:0}]])),Ln=Se([]),dn=Se({hubHash:"",destName:"rrc.hub",nickname:"",identityPath:"~/.rrc-web/identity"}),gr=Se(new Set),yr=Rs([fe,A],([e,t])=>e.get(t)||{messages:[],users:new Set,unread:0}),wr=Rs(fe,e=>Array.from(e.keys())),Cs=Object.freeze(Object.defineProperty({__proto__:null,connectionSettings:dn,currentRoom:A,currentRoomData:yr,discoveredHubs:Ln,hubName:yt,identityHash:On,latency:fn,nickname:Kt,roomList:wr,rooms:fe,rrcConnected:gt,sentMessageIds:gr,ws:Ts,wsConnected:ln},Symbol.toStringTag,{value:"Module"}));let et=null;function As(){const t=`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}/ws`;et=new WebSocket(t),Ts.set(et),et.onopen=()=>{ln.set(!0),nr(),Li(),q({type:"get_state"})},et.onmessage=n=>{const r=JSON.parse(n.data);mi(r)},et.onerror=n=>{console.error("WebSocket error:",n),n.currentTarget?.readyState===WebSocket.CLOSED&&fetch("/ws",{method:"HEAD"}).then(r=>{r.status===401&&window.location.reload()}).catch(()=>{})},et.onclose=n=>{ln.set(!1),gt.set(!1),fn.set(null),n.code===1008||n.code===1002?(console.log("WebSocket closed due to authentication failure"),window.location.reload()):setTimeout(As,3e3)}}function q(e){et&&et.readyState===WebSocket.OPEN&&et.send(JSON.stringify(e))}function mi(e){switch(e.type){case"connected":_i(e);break;case"disconnected":pi();break;case"message":bi(e);break;case"notice":gi(e);break;case"error":yi(e);break;case"system":wi(e);break;case"message_sent":xi(e);break;case"room_joined":ki(e.room,e.users);break;case"room_parted":Ei(e.room);break;case"state":$i(e);break;case"latency":Si(e);break;case"user_list_update":Ri(e);break;case"hub_info":Ti(e);break;case"hub_discovered":Ci(e);break;case"discovered_hubs":Ai(e);break;case"nickname_set":Mi(e);break}}function _i(e){gt.set(!0),e.hub_name&&yt.set(e.hub_name),Kt.set(e.nickname||""),e.identity_hash&&On.set(e.identity_hash)}function pi(){gt.set(!1),yt.set(null),fe.update(e=>{const t=e.get("[Hub]")||{messages:[],users:new Set,unread:0};return t.messages.push({type:"system",text:"Disconnected from hub",timestamp:new Date().toLocaleTimeString()}),e.set("[Hub]",t),new Map(e)})}function bi(e){const t=e.room||"[Hub]";fe.update(n=>{n.has(t)||n.set(t,{messages:[],users:new Set,unread:0});const r=n.get(t);return r.messages.push({type:"message",user:e.user,text:e.text,timestamp:e.timestamp||new Date().toLocaleTimeString(),message_id:e.message_id,sender_identity:e.sender_identity}),t!==I(A)&&r.unread++,new Map(n)})}function gi(e){const t=e.room||"[Hub]";fe.update(n=>(n.has(t)||n.set(t,{messages:[],users:new Set,unread:0}),n.get(t).messages.push({type:"notice",text:e.text,timestamp:e.timestamp||new Date().toLocaleTimeString()}),new Map(n)))}function yi(e){const t=I(A);fe.update(n=>{const r=n.get(t);return r&&r.messages.push({type:"error",text:e.text||e.error,timestamp:new Date().toLocaleTimeString()}),new Map(n)})}function wi(e){const t=e.room||I(A);fe.update(n=>(n.has(t)||n.set(t,{messages:[],users:new Set,unread:0}),n.get(t).messages.push({type:"system",text:e.text,timestamp:e.timestamp||new Date().toLocaleTimeString()}),new Map(n)))}function xi(e){e.message_id&&gr.update(t=>{if(t.add(e.message_id),t.size>100){const n=t.values().next().value;t.delete(n)}return t})}function ki(e,t){fe.update(n=>{n.has(e)||n.set(e,{messages:[],users:new Set,unread:0});const r=n.get(e);return r.users=new Set(t||[]),new Map(n)}),A.set(e)}function Ei(e){fe.update(t=>(t.delete(e),new Map(t))),I(A)===e&&A.set("[Hub]")}function $i(e){e.connected!==void 0&>.set(e.connected),e.hub_name&&yt.set(e.hub_name),e.nickname&&Kt.set(e.nickname),e.identity_hash&&On.set(e.identity_hash),e.config&&dn.update(t=>({...t,hubHash:e.config.hub_hash||t.hubHash,destName:e.config.dest_name||t.destName,nickname:e.config.nickname||t.nickname,identityPath:e.config.identity_path||t.identityPath})),e.rooms&&Object.keys(e.rooms).length>0&&fe.update(t=>{const n=new Map;return Object.keys(e.rooms).forEach(r=>{const o=e.rooms[r],s=t.get(r);n.set(r,{messages:o.messages||s?.messages||[],users:new Set(o.users||[]),unread:s?.unread||0})}),n})}function Si(e){e.latency_ms!==void 0&&fn.set(e.latency_ms)}function Ri(e){const t=e.room||"[Hub]";fe.update(n=>{n.has(t)||n.set(t,{messages:[],users:new Set,unread:0});const r=n.get(t);return r.users=new Set(e.users||[]),new Map(n)})}function Ti(e){yt.set(e.hub_name)}function Ci(e){e.hub&&Ln.update(t=>t.find(r=>r.hash===e.hub.hash)?t:[...t,e.hub])}function Ai(e){Ln.set(e.hubs||[])}function Mi(e){e.nickname!==void 0&&Kt.set(e.nickname)}function nr(){q({type:"get_discovered_hubs"})}function Ni(e,t,n,r){q({type:"connect",hub_hash:e,dest_name:t,nickname:n,identity_path:r}),Hi(e,t,n,r)}function Ms(){q({type:"disconnect"})}function Di(e){q({type:"join_room",room:e})}function Pi(e){q({type:"part_room",room:e})}function Oi(e,t){e.trim()&&q({type:"send_message",text:e,room:t||I(A)})}function Li(){const e=localStorage.getItem("rrc_connection_settings");if(e)try{const t=JSON.parse(e);dn.set(t)}catch(t){console.error("Failed to load connection settings:",t)}}function Hi(e,t,n,r){const o={hubHash:e,destName:t,nickname:n,identityPath:r};localStorage.setItem("rrc_connection_settings",JSON.stringify(o)),dn.set(o)}function Ns(e){fe.update(t=>{const n=t.get(e);return n&&(n.unread=0),new Map(t)})}var Ii=C(' '),ji=C(''),Fi=C('
    WS
    '),Ui=C('
    WS
    '),qi=C('
    RRC
    '),Ji=C('
    RRC
    '),Wi=C('
    Nick:
    '),Bi=C('
    Latency:
    '),Vi=C('');function Ds(e,t){if(new.target)return ze({component:Ds,...e});Le(t,!0);const n=()=>K(yt,"$hubName",a),r=()=>K(gt,"$rrcConnected",a),o=()=>K(ln,"$wsConnected",a),s=()=>K(Kt,"$nickname",a),i=()=>K(fn,"$latency",a),l=()=>K(A,"$currentRoom",a),[a,c]=bt();let u=De(t,"onToggleTheme"),v=G("dark");function f(){T(v,b(v)==="dark"?"light":"dark",!0),document.documentElement.setAttribute("data-theme",b(v)),u()(b(v))}function m(){Ms()}async function _(){try{await fetch("/api/logout",{method:"POST"}),window.location.reload()}catch(E){console.error("Logout error:",E),window.location.reload()}}function w(E){return E==="[Hub]"?n()||"Hub":E}var p={get onToggleTheme(){return u()},set onToggleTheme(E){u(E),he()},$set:Ye,$on:(E,N)=>Ke(t,E,N)},x=Vi(),L=h(x),j=y(h(L),4);{var H=E=>{var N=Ii(),k=h(N);d(N),Q(()=>X(k,`- ${n()??""}`)),S(E,N)};V(j,E=>{n()&&E(H)})}var Y=y(j,2);{var Z=E=>{var N=ji();N.__click=m,S(E,N)};V(Y,E=>{r()&&E(Z)})}d(L);var M=y(L,2),g=h(M),$=h(g),R=h($);{var ee=E=>{var N=Fi();S(E,N)},ge=E=>{var N=Ui();S(E,N)};V(R,E=>{o()?E(ee):E(ge,!1)})}var J=y(R,2);{var ye=E=>{var N=qi();S(E,N)},de=E=>{var N=Ji();S(E,N)};V(J,E=>{r()?E(ye):E(de,!1)})}var te=y(J,2);{var se=E=>{var N=Wi(),k=y(h(N),2),W=h(k,!0);d(k),d(N),Q(()=>X(W,s())),S(E,N)};V(te,E=>{s()&&E(se)})}var we=y(te,2);{var Pe=E=>{var N=Bi(),k=y(h(N),2),W=h(k);d(k),d(N),Q(()=>X(W,`${i()??""}ms`)),S(E,N)};V(we,E=>{i()!==null&&E(Pe)})}d($);var ve=y($,2),Ge=h(ve,!0);d(ve);var xe=y(ve,2);xe.__click=f;var Re=h(xe);{var Ie=E=>{var N=an("☀️");S(E,N)},je=E=>{var N=an("🌙");S(E,N)};V(Re,E=>{b(v)==="dark"?E(Ie):E(je,!1)})}d(xe);var Xe=y(xe,2);Xe.__click=_,d(g),d(M),d(x),Q(E=>X(Ge,E),[()=>w(l())]),S(e,x);var Fe=He(p);return c(),Fe}pt(["click"]);var zi=C(' '),Ki=C('

    No hubs discovered yet

    Listening for announcements...

    '),Yi=C(' '),Gi=C('
  • '),Xi=C(''),Zi=C('');function Ps(e,t){if(new.target)return ze({component:Ps,...e});Le(t,!0);const n=()=>K(dn,"$connectionSettings",o),r=()=>K(Ln,"$discoveredHubs",o),[o,s]=bt();let i=De(t,"onConnect"),l=G(rt(n().hubHash)),a=G(rt(n().destName)),c=G(rt(n().nickname)),u=G(rt(n().identityPath)),v=G(!1);Nn(()=>{T(l,n().hubHash||b(l),!0),T(a,n().destName||b(a),!0),T(c,n().nickname||b(c),!0),T(u,n().identityPath||b(u),!0)}),ni(()=>{nr()});function f(){Ni(b(l),b(a),b(c),b(u)),i()()}function m(k){T(l,k.hash,!0),T(a,k.aspect||"rrc.hub",!0)}function _(){nr()}function w(k){const W=Date.now()/1e3,le=Math.floor(W-k);return le<60?`${le}s ago`:le<3600?`${Math.floor(le/60)}m ago`:`${Math.floor(le/3600)}h ago`}var p={get onConnect(){return i()},set onConnect(k){i(k),he()},$set:Ye,$on:(k,W)=>Ke(t,k,W)},x=Zi(),L=h(x),j=y(h(L),2),H=h(j),Y=h(H),Z=h(Y),M=h(Z),g=y(h(M));{var $=k=>{var W=zi(),le=h(W,!0);d(W),Q(()=>X(le,r().length)),S(k,W)};V(g,k=>{r().length>0&&k($)})}d(M);var R=y(M,2);R.__click=_,d(Z);var ee=y(Z,2),ge=h(ee);{var J=k=>{var W=Ki();S(k,W)},ye=k=>{var W=Xi();un(W,5,r,Pn,(le,ct)=>{var Yt=Gi(),Gt=h(Yt);Gt.__click=()=>m(b(ct));var vn=h(Gt),wt=h(vn),Pt=h(wt,!0);d(wt);var hn=y(wt,2),Xt=h(hn),Hn=h(Xt);d(Xt);var In=y(Xt,2);{var jn=Ze=>{var Ot=Yi(),mn=h(Ot,!0);d(Ot),Q(Fn=>X(mn,Fn),[()=>w(b(ct).last_seen)]),S(Ze,Ot)};V(In,Ze=>{b(ct).last_seen&&Ze(jn)})}d(hn),d(vn),d(Gt),d(Yt),Q(Ze=>{X(Pt,b(ct).name||"Unknown Hub"),X(Hn,`${Ze??""}...`)},[()=>b(ct).hash?.substring(0,16)]),S(le,Yt)}),d(W),S(k,W)};V(ge,k=>{r().length===0?k(J):k(ye,!1)})}d(ee),d(Y),d(H);var de=y(H,2),te=h(de),se=y(h(te),2),we=h(se),Pe=y(h(we),2);ft(Pe),ht(2),d(we);var ve=y(we,2),Ge=y(h(ve),2);ft(Ge),d(ve);var xe=y(ve,2),Re=h(xe);ft(Re);var Ie=y(Re,4),je=h(Ie),Xe=y(h(je),2);ft(Xe),ht(2),d(je);var Fe=y(je,2),E=y(h(Fe),2);ft(E),d(Fe),d(Ie),d(xe),ht(2),d(se),d(te),d(de),d(j),d(L),d(x),pr("submit",se,k=>{k.preventDefault(),f()}),kt(Pe,()=>b(l),k=>T(l,k)),kt(Ge,()=>b(c),k=>T(c,k)),di(Re,()=>b(v),k=>T(v,k)),kt(Xe,()=>b(a),k=>T(a,k)),kt(E,()=>b(u),k=>T(u,k)),S(e,x);var N=He(p);return s(),N}pt(["click"]);var Qi=C(' '),ea=C("
  • "),ta=C(''),na=C('

    Rooms

    ');function Os(e,t){if(new.target)return ze({component:Os,...e});Le(t,!0);const n=()=>K(fe,"$rooms",i),r=()=>K(yt,"$hubName",i),o=()=>K(wr,"$roomListStore",i),s=()=>K(A,"$currentRoom",i),[i,l]=bt();let a=De(t,"onJoinRoom"),c=De(t,"onPartRoom"),u=De(t,"onToggleSidebar");function v(g){A.set(g),Ns(g)}function f(g){return n().get(g)?.unread||0}function m(g){return g==="[Hub]"?r()||"Hub":g}var _={get onJoinRoom(){return a()},set onJoinRoom(g){a(g),he()},get onPartRoom(){return c()},set onPartRoom(g){c(g),he()},get onToggleSidebar(){return u()},set onToggleSidebar(g){u(g),he()},$set:Ye,$on:(g,$)=>Ke(t,g,$)},w=na(),p=h(w),x=y(h(p),2);x.__click=function(...g){u()?.apply(this,g)},d(p);var L=y(p,2);un(L,5,o,Pn,(g,$)=>{var R=ea(),ee=h(R);ee.__click=()=>v(b($));var ge=h(ee),J=h(ge,!0);d(ge);var ye=y(ge,2);{var de=te=>{var se=Qi(),we=h(se,!0);d(se),Q(Pe=>X(we,Pe),[()=>f(b($))]),S(te,se)};V(ye,te=>{f(b($))>0&&te(de)})}d(ee),d(R),Q(te=>{jt(ee,1,`flex justify-between items-center w-full text-left px-2 py-2 rounded ${b($)===s()?"bg-primary text-primary-content hover:bg-primary-focus":"hover:bg-base-300"}`),X(J,te)},[()=>m(b($))]),S(g,R)}),d(L);var j=y(L,4),H=h(j);H.__click=function(...g){a()?.apply(this,g)};var Y=y(H,2);{var Z=g=>{var $=ta();$.__click=function(...R){c()?.apply(this,R)},S(g,$)};V(Y,g=>{s()!=="[Hub]"&&g(Z)})}d(j),d(w),S(e,w);var M=He(_);return l(),M}pt(["click"]);var ra=C('
    '),sa=C(''),oa=C('
    '),ia=C('
    ');function rr(e,t){if(new.target)return ze({component:rr,...e});Le(t,!0);const n=()=>K(On,"$identityHash",s),r=()=>K(gr,"$sentMessageIds",s),o=()=>K(yr,"$currentRoomData",s),[s,i]=bt();let l;Nn(()=>{l&&(l.scrollTop=l.scrollHeight)});function a(_){return!!(_.type==="message"&&_.message_id&&_.sender_identity&&n()&&r()&&r().has(_.message_id)&&_.sender_identity===n())}function c(_){if(a(_))return"chat chat-end";switch(_.type){case"message":return"chat chat-start";case"system":return"chat chat-end";case"notice":return"chat chat-end";case"error":return"chat chat-end";default:return"chat"}}function u(_){if(a(_))return"chat-bubble chat-bubble-accent";switch(_.type){case"message":return"chat-bubble chat-bubble-primary";case"system":return"chat-bubble chat-bubble-info";case"notice":return"chat-bubble chat-bubble-warning";case"error":return"chat-bubble chat-bubble-error";default:return"chat-bubble"}}var v={$set:Ye,$on:(_,w)=>Ke(t,_,w)},f=ia();un(f,7,()=>o()?.messages||[],(_,w)=>_.timestamp+_.text+w,(_,w)=>{var p=oa(),x=h(p);{var L=M=>{var g=ra(),$=h(g),R=y($),ee=h(R,!0);d(R),d(g),Q(()=>{X($,`${b(w).user??""} `),X(ee,b(w).timestamp)}),S(M,g)};V(x,M=>{b(w).user&&M(L)})}var j=y(x,2),H=h(j,!0);d(j);var Y=y(j,2);{var Z=M=>{var g=sa(),$=h(g),R=h($,!0);d($),d(g),Q(()=>X(R,b(w).timestamp)),S(M,g)};V(Y,M=>{!b(w).user&&b(w).timestamp&&M(Z)})}d(p),Q((M,g)=>{jt(p,1,M),jt(j,1,g),X(H,b(w).text)},[()=>Mr(c(b(w))),()=>Mr(u(b(w)))]),S(_,p)}),d(f),vi(f,_=>l=_,()=>l),S(e,f);var m=He(v);return i(),m}const aa="modulepreload",la=function(e){return"/static/"+e},Pr={},Ls=function(t,n,r){let o=Promise.resolve();if(n&&n.length>0){let c=function(u){return Promise.all(u.map(v=>Promise.resolve(v).then(f=>({status:"fulfilled",value:f}),f=>({status:"rejected",reason:f}))))};var i=c;document.getElementsByTagName("link");const l=document.querySelector("meta[property=csp-nonce]"),a=l?.nonce||l?.getAttribute("nonce");o=c(n.map(u=>{if(u=la(u),u in Pr)return;Pr[u]=!0;const v=u.endsWith(".css"),f=v?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${u}"]${f}`))return;const m=document.createElement("link");if(m.rel=v?"stylesheet":aa,v||(m.as="script"),m.crossOrigin="",m.href=u,a&&m.setAttribute("nonce",a),document.head.appendChild(m),v)return new Promise((_,w)=>{m.addEventListener("load",_),m.addEventListener("error",()=>w(new Error(`Unable to preload CSS for ${u}`)))})}))}function s(l){const a=new Event("vite:preloadError",{cancelable:!0});if(a.payload=l,window.dispatchEvent(a),!a.defaultPrevented)throw l}return o.then(l=>{for(const a of l||[])a.status==="rejected"&&s(a.reason);return t().catch(s)})};function ca(e){if(!e.startsWith("/"))return!1;const t=e.slice(1).trim().split(/\s+/),n=t[0].toLowerCase(),r=t.slice(1);switch(n){case"stats":return ua();case"reload":return fa();case"who":return da(r);case"kline":return va(r);case"kick":return ha(r);case"register":return ma(r);case"unregister":return _a(r);case"topic":return pa(r);case"mode":return ba(r);case"op":return ga(r);case"deop":return ya(r);case"voice":return wa(r);case"devoice":return xa(r);case"ban":return ka(r);case"invite":return Ea(r);case"join":return $a(r);case"part":case"leave":return Sa(r);case"nick":return Ra(r);case"msg":case"query":return Ta(r);case"help":return Ca();default:return Aa(e)}}function ua(){return q({type:"send_command",command:"/stats",room:I(A)}),!0}function fa(){return q({type:"send_command",command:"/reload",room:I(A)}),!0}function da(e){const t=e.length>0?e[0]:I(A);return q({type:"send_command",command:`/who ${t}`,room:I(A)}),!0}function va(e){if(e.length<1)return re("Usage: /kline [target]"),!0;const t=e[0],n=e.slice(1).join(" ");return t==="list"?q({type:"send_command",command:"/kline list",room:I(A)}):t==="add"&&n?q({type:"send_command",command:`/kline add ${n}`,room:I(A)}):t==="del"&&n?q({type:"send_command",command:`/kline del ${n}`,room:I(A)}):re("Usage: /kline [target]"),!0}function ha(e){if(e.length<2)return re("Usage: /kick "),!0;const t=e[0],n=e.slice(1).join(" ");return q({type:"send_command",command:`/kick ${t} ${n}`,room:I(A)}),!0}function ma(e){const t=e.length>0?e[0]:I(A);return q({type:"send_command",command:`/register ${t}`,room:I(A)}),!0}function _a(e){const t=e.length>0?e[0]:I(A);return q({type:"send_command",command:`/unregister ${t}`,room:I(A)}),!0}function pa(e){if(e.length===0)return re("Usage: /topic [topic]"),!0;const t=e[0],n=e.slice(1).join(" ");return q({type:"send_command",command:`/topic ${t}${n?" "+n:""}`,room:I(A)}),!0}function ba(e){if(e.length<2)return re("Usage: /mode [args]"),!0;const t=e[0],n=e[1],r=e.slice(2).join(" ");return q({type:"send_command",command:`/mode ${t} ${n}${r?" "+r:""}`,room:I(A)}),!0}function ga(e){if(e.length<2)return re("Usage: /op "),!0;const t=e[0],n=e.slice(1).join(" ");return q({type:"send_command",command:`/op ${t} ${n}`,room:I(A)}),!0}function ya(e){if(e.length<2)return re("Usage: /deop "),!0;const t=e[0],n=e.slice(1).join(" ");return q({type:"send_command",command:`/deop ${t} ${n}`,room:I(A)}),!0}function wa(e){if(e.length<2)return re("Usage: /voice "),!0;const t=e[0],n=e.slice(1).join(" ");return q({type:"send_command",command:`/voice ${t} ${n}`,room:I(A)}),!0}function xa(e){if(e.length<2)return re("Usage: /devoice "),!0;const t=e[0],n=e.slice(1).join(" ");return q({type:"send_command",command:`/devoice ${t} ${n}`,room:I(A)}),!0}function ka(e){if(e.length<2)return re("Usage: /ban [target]"),!0;const t=e[0],n=e[1],r=e.slice(2).join(" ");return n==="list"?q({type:"send_command",command:`/ban ${t} list`,room:I(A)}):(n==="add"||n==="del")&&r?q({type:"send_command",command:`/ban ${t} ${n} ${r}`,room:I(A)}):re("Usage: /ban [target]"),!0}function Ea(e){if(e.length<2)return re("Usage: /invite [target]"),!0;const t=e[0],n=e[1],r=e.slice(2).join(" ");return n==="list"?q({type:"send_command",command:`/invite ${t} list`,room:I(A)}):(n==="add"||n==="del")&&r?q({type:"send_command",command:`/invite ${t} ${n} ${r}`,room:I(A)}):re("Usage: /invite [target]"),!0}function $a(e){if(e.length===0)return re("Usage: /join "),!0;const t=e[0];return q({type:"join_room",room:t}),!0}function Sa(e){const t=e.length>0?e[0]:I(A);return t==="[Hub]"?(re("Cannot part from [Hub]"),!0):(q({type:"part_room",room:t}),!0)}function Ra(e){if(e.length===0)return re("Usage: /nick "),!0;const t=e.join(" ");return q({type:"set_nickname",nickname:t}),!0}function Ta(e){if(e.length<2)return re("Usage: /msg "),!0;const t=e[0],n=e.slice(1).join(" ");return q({type:"send_message",text:n,room:t}),!0}function Ca(e){const t=` Available commands (rrcd v0.1+): Room Moderation Commands: @@ -33,4 +33,4 @@ Room Modes: +t Topic ops-only +n No outside messages +r Registered - `.trim();return Aa(t),!0}function Ca(e){return q({type:"send_command",command:e,room:I(C)}),!0}function re(e){Ls(async()=>{const{rooms:t,currentRoom:n}=await Promise.resolve().then(()=>Cs);return{rooms:t,currentRoom:n}},void 0).then(({rooms:t,currentRoom:n})=>{const r=I(n);t.update(o=>{const s=o.get(r);return s&&s.messages.push({type:"error",text:e,timestamp:new Date().toLocaleTimeString()}),new Map(o)})})}function Aa(e){Ls(async()=>{const{rooms:t,currentRoom:n}=await Promise.resolve().then(()=>Cs);return{rooms:t,currentRoom:n}},void 0).then(({rooms:t,currentRoom:n})=>{const r=I(n);t.update(o=>{const s=o.get(r);return s&&s.messages.push({type:"notice",text:e,timestamp:new Date().toLocaleTimeString()}),new Map(o)})})}var Ma=T('
    ');function rr(e,t){if(new.target)return ze({component:rr,...e});Le(t,!0);const n=()=>K(C,"$currentRoom",r),[r,o]=bt();let s=G("");function i(){if(g(s).trim()){if(g(s).startsWith("/")&&la(g(s))){A(s,"");return}Oi(g(s),n()),A(s,"")}}function l(p){p.key==="Enter"&&!p.shiftKey&&(p.preventDefault(),i())}var a={$set:Ye,$on:(p,w)=>Ke(t,p,w)},c=Ma(),u=h(c),v=h(u);ft(v);var f=y(v,2);f.__click=i,d(u),d(c),_r("keypress",v,l),kt(v,()=>g(s),p=>A(s,p)),S(e,c);var m=He(a);return o(),m}_t(["click"]);var Da=T('

    No users

    '),Na=T('
  • '),Oa=T(''),Pa=T('

    Users

    ');function Hs(e,t){if(new.target)return ze({component:Hs,...e});Le(t,!0);const n=()=>K(yr,"$currentRoomData",r),[r,o]=bt();var s={$set:Ye,$on:(v,f)=>Ke(t,v,f)},i=Pa(),l=y(h(i),2);{var a=v=>{var f=Da();S(v,f)},c=v=>{var f=Oa();cn(f,5,()=>Array.from(n().users),Dn,(m,p)=>{var w=Na(),_=h(w),x=h(_,!0);d(_),d(w),Q(()=>X(x,g(p))),S(m,w)}),d(f),S(v,f)};V(l,v=>{n().users.size===0?v(a):v(c,!1)})}d(i),S(e,i);var u=He(s);return o(),u}var La=T('');function Is(e,t){if(new.target)return ze({component:Is,...e});Le(t,!0);let n=Ne(t,"show",7,!1),r=Ne(t,"onClose"),o=G("");function s(v){v.preventDefault(),g(o).trim()&&(Di(g(o).trim()),A(o,""),r()())}function i(){A(o,""),r()()}var l={get show(){return n()},set show(v=!1){n(v),he()},get onClose(){return r()},set onClose(v){r(v),he()},$set:Ye,$on:(v,f)=>Ke(t,v,f)},a=ks(),c=cr(a);{var u=v=>{var f=La(),m=h(f),p=y(h(m),2),w=h(p),_=y(h(w),2);ft(_),d(w);var x=y(w,2),L=h(x);L.__click=i,ht(2),d(x),d(p),d(m),d(f),_r("submit",p,s),kt(_,()=>g(o),j=>A(o,j)),S(v,f)};V(c,v=>{n()&&v(u)})}return S(e,a),He(l)}_t(["click"]);var Ha=T('
    Hub:
    '),Ia=T('
    Nickname:
    '),ja=T('
    Latency:
    '),Fa=T(''),Ua=T(' '),qa=T("
  • "),Ja=T(''),Wa=T('

    Menu

    Status

    Rooms

    ');function js(e,t){if(new.target)return ze({component:js,...e});Le(t,!0);const n=()=>K(fe,"$rooms",u),r=()=>K(an,"$wsConnected",u),o=()=>K(gt,"$rrcConnected",u),s=()=>K(yt,"$hubName",u),i=()=>K(un,"$nickname",u),l=()=>K(fn,"$latency",u),a=()=>K(wr,"$roomListStore",u),c=()=>K(C,"$currentRoom",u),[u,v]=bt();let f=Ne(t,"isOpen",7,!1),m=Ne(t,"onClose"),p=Ne(t,"onToggleTheme"),w=Ne(t,"onJoinRoom"),_=Ne(t,"onPartRoom"),x=G("dark");function L(){A(x,g(x)==="dark"?"light":"dark",!0),document.documentElement.setAttribute("data-theme",g(x)),p()(g(x))}function j(){Ms(),m()()}function H(J){C.set(J),Ds(J),m()()}function Y(J){return n().get(J)?.unread||0}function Z(){w()(),m()()}function M(){_()(),m()()}var b={get isOpen(){return f()},set isOpen(J=!1){f(J),he()},get onClose(){return m()},set onClose(J){m(J),he()},get onToggleTheme(){return p()},set onToggleTheme(J){p(J),he()},get onJoinRoom(){return w()},set onJoinRoom(J){w(J),he()},get onPartRoom(){return _()},set onPartRoom(J){_(J),he()},$set:Ye,$on:(J,ye)=>Ke(t,J,ye)},$=ks(),R=cr($);{var ee=J=>{var ye=Wa(),de=h(ye);de.__click=function(...N){m()?.apply(this,N)},de.__keydown=N=>N.key==="Enter"&&m()();var te=y(de,2),se=h(te),we=h(se),Oe=y(h(we),2);Oe.__click=function(...N){m()?.apply(this,N)},d(we);var ve=y(we,2),Ge=h(ve),xe=y(h(Ge),2),Re=h(xe),Ie=h(Re),je=y(Ie,2),Xe=h(je);d(je),d(Re);var Fe=y(Re,2),E=h(Fe),D=y(E,2),k=h(D);d(D),d(Fe);var W=y(Fe,2);{var le=N=>{var z=Ha(),Te=y(h(z),2),Ue=h(Te,!0);d(Te),d(z),Q(()=>X(Ue,s())),S(N,z)};V(W,N=>{s()&&N(le)})}var ct=y(W,2);{var Kt=N=>{var z=Ia(),Te=y(h(z),2),Ue=h(Te,!0);d(Te),d(z),Q(()=>X(Ue,i())),S(N,z)};V(ct,N=>{i()&&N(Kt)})}var Yt=y(ct,2);{var dn=N=>{var z=ja(),Te=y(h(z),2),Ue=h(Te);d(Te),d(z),Q(()=>X(Ue,`${l()??""}ms`)),S(N,z)};V(Yt,N=>{l()!==null&&N(dn)})}d(xe),d(Ge),d(ve);var wt=y(ve,2),Ot=h(wt);Ot.__click=L;var vn=h(Ot);{var Gt=N=>{var z=on("☀️ Light Mode");S(N,z)},Ln=N=>{var z=on("🌙 Dark Mode");S(N,z)};V(vn,N=>{g(x)==="dark"?N(Gt):N(Ln,!1)})}d(Ot);var Hn=y(Ot,2);{var In=N=>{var z=Fa();z.__click=j,S(N,z)};V(Hn,N=>{o()&&N(In)})}d(wt);var Ze=y(wt,6);cn(Ze,5,a,Dn,(N,z)=>{var Te=qa(),Ue=h(Te);Ue.__click=()=>H(g(z));var Fn=h(Ue),Js=h(Fn,!0);d(Fn);var Ws=y(Fn,2);{var Bs=Un=>{var qn=Ua(),Vs=h(qn,!0);d(qn),Q(zs=>X(Vs,zs),[()=>Y(g(z))]),S(Un,qn)};V(Ws,Un=>{Y(g(z))>0&&Un(Bs)})}d(Ue),d(Te),Q(()=>{jt(Ue,1,`flex justify-between items-center ${g(z)===c()?"active":""}`),X(Js,g(z))}),S(N,Te)}),d(Ze);var Pt=y(Ze,2),hn=h(Pt);hn.__click=Z;var jn=y(hn,2);{var qs=N=>{var z=Ja();z.__click=M,S(N,z)};V(jn,N=>{c()!=="[Hub]"&&N(qs)})}d(Pt),d(se),d(te),d(ye),Q(()=>{jt(Ie,1,`badge ${r()?"badge-success":"badge-error"} badge-xs`),X(Xe,`WebSocket: ${r()?"Connected":"Disconnected"}`),jt(E,1,`badge ${o()?"badge-success":"badge-error"} badge-xs`),X(k,`RRC: ${o()?"Connected":"Disconnected"}`)}),S(J,ye)};V(R,J=>{f()&&J(ee)})}S(e,$);var ge=He(b);return v(),ge}_t(["click","keydown"]);var Ba=T('
    '),Va=T('
    '),za=T('
    ',1);function Fs(e,t){if(new.target)return ze({component:Fs,...e});Le(t,!0);const n=()=>K(C,"$currentRoom",o),r=()=>K(gt,"$rrcConnected",o),[o,s]=bt();let i=G(!1),l=G(!1),a=G(!1);function c(){}function u(){A(i,!0)}function v(){const k=n();k!=="[Hub]"&&Ni(k)}function f(){A(i,!1)}function m(k){}function p(){A(l,!g(l))}function w(){A(a,!g(a))}function _(){A(a,!1)}var x={$set:Ye,$on:(k,W)=>Ke(t,k,W)},L=za(),j=cr(L),H=h(j);Ns(H,{onToggleTheme:m});var Y=y(H,2),Z=h(Y);{var M=k=>{var W=Ba(),le=h(W);Ps(le,{onJoinRoom:u,onPartRoom:v,onToggleSidebar:p}),d(W),S(k,W)},b=k=>{var W=Va(),le=h(W);le.__click=p,d(W),S(k,W)};V(Z,k=>{g(l)?k(b,!1):k(M)})}var $=y(Z,2),R=h($),ee=h(R);nr(ee,{});var ge=y(ee,2);rr(ge,{}),d(R);var J=y(R,2),ye=h(J);Hs(ye,{}),d(J),d($),d(Y),d(j);var de=y(j,2),te=h(de),se=h(te),we=h(se);we.__click=w,d(se);var Oe=y(se,2),ve=y(h(Oe),2),Ge=h(ve);d(ve),d(Oe),d(te);var xe=y(te,2);js(xe,{get isOpen(){return g(a)},onClose:_,onToggleTheme:m,onJoinRoom:u,onPartRoom:v});var Re=y(xe,2),Ie=h(Re);nr(Ie,{});var je=y(Ie,2);rr(je,{}),d(Re),d(de);var Xe=y(de,2);{var Fe=k=>{Os(k,{onConnect:c})};V(Xe,k=>{r()||k(Fe)})}var E=y(Xe,2);Is(E,{get show(){return g(i)},onClose:f}),Q(()=>X(Ge,`- ${n()??""}`)),S(e,L);var D=He(x);return s(),D}_t(["click"]);var Ka=T('
    '),Ya=T(' Authenticating...',1),Ga=T('
    RRC Logo

    Authentication has been enabled on this application.

    Please enter your authentication token to continue.

    To generate a token, run:

    python -c "import secrets; print(secrets.token_urlsafe(32))"

    Add the token to your config.json file.

    ');function Us(e,t){if(new.target)return ze({component:Us,...e});Le(t,!0);let n=G(""),r=G(""),o=G(!1),s=G(!0);hr(()=>{const b=document.documentElement.getAttribute("data-theme");b?A(s,b==="dark"):A(s,window.matchMedia("(prefers-color-scheme: dark)").matches,!0);const $=new MutationObserver(()=>{const R=document.documentElement.getAttribute("data-theme");R&&A(s,R==="dark")});return $.observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme"]}),()=>$.disconnect()});async function i(){A(r,""),A(o,!0);try{const b=await fetch("/api/login",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:g(n)})}),$=await b.json();b.ok?window.location.reload():A(r,$.error||"Login failed",!0)}catch(b){A(r,"Failed to connect to server"),console.error("Login error:",b)}finally{A(o,!1)}}function l(b){b.key==="Enter"&&!g(o)&&i()}var a={$set:Ye,$on:(b,$)=>Ke(t,b,$)},c=Ga(),u=h(c),v=h(u),f=h(v);ht(4),d(v);var m=y(v,2),p=h(m),w=h(p),_=y(h(w),2);ft(_),_.__keydown=l;var x=y(_,2);{var L=b=>{var $=Ka(),R=h($),ee=h(R,!0);d(R),d($),Q(()=>X(ee,g(r))),S(b,$)};V(x,b=>{g(r)&&b(L)})}d(w);var j=y(w,2),H=h(j);H.__click=i;var Y=h(H);{var Z=b=>{var $=Ya();ht(),S(b,$)},M=b=>{var $=on("Login");S(b,$)};V(Y,b=>{g(o)?b(Z):b(M,!1)})}return d(H),d(j),ht(4),d(p),d(m),d(u),d(c),Q(b=>{Qn(f,"src",g(s)?"/transparent-logo-dark.png":"/transparent-logo-light.png"),_.disabled=g(o),H.disabled=b},[()=>g(o)||!g(n).trim()]),kt(_,()=>g(n),b=>A(n,b)),S(e,c),He(a)}_t(["keydown","click"]);async function Xa(){try{const e=await fetch("/api/auth-status");if(!e.ok)return!0;const t=await e.json();return!t.auth_required||t.is_authenticated}catch(e){return console.error("Failed to check auth status:",e),!0}}async function Za(){await Xa()?(new Fs({target:document.getElementById("app")}),As()):new Us({target:document.getElementById("app")})}Za(); + `.trim();return Ma(t),!0}function Aa(e){return q({type:"send_command",command:e,room:I(A)}),!0}function re(e){Ls(async()=>{const{rooms:t,currentRoom:n}=await Promise.resolve().then(()=>Cs);return{rooms:t,currentRoom:n}},void 0).then(({rooms:t,currentRoom:n})=>{const r=I(n);t.update(o=>{const s=o.get(r);return s&&s.messages.push({type:"error",text:e,timestamp:new Date().toLocaleTimeString()}),new Map(o)})})}function Ma(e){Ls(async()=>{const{rooms:t,currentRoom:n}=await Promise.resolve().then(()=>Cs);return{rooms:t,currentRoom:n}},void 0).then(({rooms:t,currentRoom:n})=>{const r=I(n);t.update(o=>{const s=o.get(r);return s&&s.messages.push({type:"notice",text:e,timestamp:new Date().toLocaleTimeString()}),new Map(o)})})}var Na=C('
    ');function sr(e,t){if(new.target)return ze({component:sr,...e});Le(t,!0);const n=()=>K(A,"$currentRoom",r),[r,o]=bt();let s=G("");function i(){if(b(s).trim()){if(b(s).startsWith("/")&&ca(b(s))){T(s,"");return}Oi(b(s),n()),T(s,"")}}function l(_){_.key==="Enter"&&!_.shiftKey&&(_.preventDefault(),i())}var a={$set:Ye,$on:(_,w)=>Ke(t,_,w)},c=Na(),u=h(c),v=h(u);ft(v);var f=y(v,2);f.__click=i,d(u),d(c),pr("keypress",v,l),kt(v,()=>b(s),_=>T(s,_)),S(e,c);var m=He(a);return o(),m}pt(["click"]);var Da=C('

    No users

    '),Pa=C('
  • '),Oa=C(''),La=C('

    Users

    ');function Hs(e,t){if(new.target)return ze({component:Hs,...e});Le(t,!0);const n=()=>K(yr,"$currentRoomData",r),[r,o]=bt();var s={$set:Ye,$on:(v,f)=>Ke(t,v,f)},i=La(),l=y(h(i),2);{var a=v=>{var f=Da();S(v,f)},c=v=>{var f=Oa();un(f,5,()=>Array.from(n().users),Pn,(m,_)=>{var w=Pa(),p=h(w),x=h(p,!0);d(p),d(w),Q(()=>X(x,b(_))),S(m,w)}),d(f),S(v,f)};V(l,v=>{n().users.size===0?v(a):v(c,!1)})}d(i),S(e,i);var u=He(s);return o(),u}var Ha=C('');function Is(e,t){if(new.target)return ze({component:Is,...e});Le(t,!0);let n=De(t,"show",7,!1),r=De(t,"onClose"),o=G("");function s(v){v.preventDefault(),b(o).trim()&&(Di(b(o).trim()),T(o,""),r()())}function i(){T(o,""),r()()}var l={get show(){return n()},set show(v=!1){n(v),he()},get onClose(){return r()},set onClose(v){r(v),he()},$set:Ye,$on:(v,f)=>Ke(t,v,f)},a=ks(),c=ur(a);{var u=v=>{var f=Ha(),m=h(f),_=y(h(m),2),w=h(_),p=y(h(w),2);ft(p),d(w);var x=y(w,2),L=h(x);L.__click=i,ht(2),d(x),d(_),d(m),d(f),pr("submit",_,s),kt(p,()=>b(o),j=>T(o,j)),S(v,f)};V(c,v=>{n()&&v(u)})}return S(e,a),He(l)}pt(["click"]);var Ia=C('
    Hub:
    '),ja=C('
    Nickname:
    '),Fa=C('
    Latency:
    '),Ua=C(''),qa=C(' '),Ja=C("
  • "),Wa=C(''),Ba=C('

    Menu

    Status

    Rooms

    ');function js(e,t){if(new.target)return ze({component:js,...e});Le(t,!0);const n=()=>K(fe,"$rooms",u),r=()=>K(ln,"$wsConnected",u),o=()=>K(gt,"$rrcConnected",u),s=()=>K(yt,"$hubName",u),i=()=>K(Kt,"$nickname",u),l=()=>K(fn,"$latency",u),a=()=>K(wr,"$roomListStore",u),c=()=>K(A,"$currentRoom",u),[u,v]=bt();let f=De(t,"isOpen",7,!1),m=De(t,"onClose"),_=De(t,"onToggleTheme"),w=De(t,"onJoinRoom"),p=De(t,"onPartRoom"),x=G("dark");function L(){T(x,b(x)==="dark"?"light":"dark",!0),document.documentElement.setAttribute("data-theme",b(x)),_()(b(x))}function j(){Ms(),m()()}function H(J){A.set(J),Ns(J),m()()}function Y(J){return n().get(J)?.unread||0}function Z(){w()(),m()()}function M(){p()(),m()()}var g={get isOpen(){return f()},set isOpen(J=!1){f(J),he()},get onClose(){return m()},set onClose(J){m(J),he()},get onToggleTheme(){return _()},set onToggleTheme(J){_(J),he()},get onJoinRoom(){return w()},set onJoinRoom(J){w(J),he()},get onPartRoom(){return p()},set onPartRoom(J){p(J),he()},$set:Ye,$on:(J,ye)=>Ke(t,J,ye)},$=ks(),R=ur($);{var ee=J=>{var ye=Ba(),de=h(ye);de.__click=function(...D){m()?.apply(this,D)},de.__keydown=D=>D.key==="Enter"&&m()();var te=y(de,2),se=h(te),we=h(se),Pe=y(h(we),2);Pe.__click=function(...D){m()?.apply(this,D)},d(we);var ve=y(we,2),Ge=h(ve),xe=y(h(Ge),2),Re=h(xe),Ie=h(Re),je=y(Ie,2),Xe=h(je);d(je),d(Re);var Fe=y(Re,2),E=h(Fe),N=y(E,2),k=h(N);d(N),d(Fe);var W=y(Fe,2);{var le=D=>{var z=Ia(),Te=y(h(z),2),Ue=h(Te,!0);d(Te),d(z),Q(()=>X(Ue,s())),S(D,z)};V(W,D=>{s()&&D(le)})}var ct=y(W,2);{var Yt=D=>{var z=ja(),Te=y(h(z),2),Ue=h(Te,!0);d(Te),d(z),Q(()=>X(Ue,i())),S(D,z)};V(ct,D=>{i()&&D(Yt)})}var Gt=y(ct,2);{var vn=D=>{var z=Fa(),Te=y(h(z),2),Ue=h(Te);d(Te),d(z),Q(()=>X(Ue,`${l()??""}ms`)),S(D,z)};V(Gt,D=>{l()!==null&&D(vn)})}d(xe),d(Ge),d(ve);var wt=y(ve,2),Pt=h(wt);Pt.__click=L;var hn=h(Pt);{var Xt=D=>{var z=an("☀️ Light Mode");S(D,z)},Hn=D=>{var z=an("🌙 Dark Mode");S(D,z)};V(hn,D=>{b(x)==="dark"?D(Xt):D(Hn,!1)})}d(Pt);var In=y(Pt,2);{var jn=D=>{var z=Ua();z.__click=j,S(D,z)};V(In,D=>{o()&&D(jn)})}d(wt);var Ze=y(wt,6);un(Ze,5,a,Pn,(D,z)=>{var Te=Ja(),Ue=h(Te);Ue.__click=()=>H(b(z));var Un=h(Ue),Js=h(Un,!0);d(Un);var Ws=y(Un,2);{var Bs=qn=>{var Jn=qa(),Vs=h(Jn,!0);d(Jn),Q(zs=>X(Vs,zs),[()=>Y(b(z))]),S(qn,Jn)};V(Ws,qn=>{Y(b(z))>0&&qn(Bs)})}d(Ue),d(Te),Q(()=>{jt(Ue,1,`flex justify-between items-center ${b(z)===c()?"active":""}`),X(Js,b(z))}),S(D,Te)}),d(Ze);var Ot=y(Ze,2),mn=h(Ot);mn.__click=Z;var Fn=y(mn,2);{var qs=D=>{var z=Wa();z.__click=M,S(D,z)};V(Fn,D=>{c()!=="[Hub]"&&D(qs)})}d(Ot),d(se),d(te),d(ye),Q(()=>{jt(Ie,1,`badge ${r()?"badge-success":"badge-error"} badge-xs`),X(Xe,`WebSocket: ${r()?"Connected":"Disconnected"}`),jt(E,1,`badge ${o()?"badge-success":"badge-error"} badge-xs`),X(k,`RRC: ${o()?"Connected":"Disconnected"}`)}),S(J,ye)};V(R,J=>{f()&&J(ee)})}S(e,$);var ge=He(g);return v(),ge}pt(["click","keydown"]);var Va=C('
    '),za=C('
    '),Ka=C('
    ',1);function Fs(e,t){if(new.target)return ze({component:Fs,...e});Le(t,!0);const n=()=>K(A,"$currentRoom",o),r=()=>K(gt,"$rrcConnected",o),[o,s]=bt();let i=G(!1),l=G(!1),a=G(!1);function c(){}function u(){T(i,!0)}function v(){const k=n();k!=="[Hub]"&&Pi(k)}function f(){T(i,!1)}function m(k){}function _(){T(l,!b(l))}function w(){T(a,!b(a))}function p(){T(a,!1)}var x={$set:Ye,$on:(k,W)=>Ke(t,k,W)},L=Ka(),j=ur(L),H=h(j);Ds(H,{onToggleTheme:m});var Y=y(H,2),Z=h(Y);{var M=k=>{var W=Va(),le=h(W);Os(le,{onJoinRoom:u,onPartRoom:v,onToggleSidebar:_}),d(W),S(k,W)},g=k=>{var W=za(),le=h(W);le.__click=_,d(W),S(k,W)};V(Z,k=>{b(l)?k(g,!1):k(M)})}var $=y(Z,2),R=h($),ee=h(R);rr(ee,{});var ge=y(ee,2);sr(ge,{}),d(R);var J=y(R,2),ye=h(J);Hs(ye,{}),d(J),d($),d(Y),d(j);var de=y(j,2),te=h(de),se=h(te),we=h(se);we.__click=w,d(se);var Pe=y(se,2),ve=y(h(Pe),2),Ge=h(ve);d(ve),d(Pe),d(te);var xe=y(te,2);js(xe,{get isOpen(){return b(a)},onClose:p,onToggleTheme:m,onJoinRoom:u,onPartRoom:v});var Re=y(xe,2),Ie=h(Re);rr(Ie,{});var je=y(Ie,2);sr(je,{}),d(Re),d(de);var Xe=y(de,2);{var Fe=k=>{Ps(k,{onConnect:c})};V(Xe,k=>{r()||k(Fe)})}var E=y(Xe,2);Is(E,{get show(){return b(i)},onClose:f}),Q(()=>X(Ge,`- ${n()??""}`)),S(e,L);var N=He(x);return s(),N}pt(["click"]);var Ya=C('
    '),Ga=C(' Authenticating...',1),Xa=C('
    RRC Logo

    Authentication has been enabled on this application.

    Please enter your authentication token to continue.

    To generate a token, run:

    python -c "import secrets; print(secrets.token_urlsafe(32))"

    Add the token to your config.json file.

    ');function Us(e,t){if(new.target)return ze({component:Us,...e});Le(t,!0);let n=G(""),r=G(""),o=G(!1),s=G(!0);Nn(()=>{const g=document.documentElement.getAttribute("data-theme");g?T(s,g==="dark"):T(s,window.matchMedia("(prefers-color-scheme: dark)").matches,!0);const $=new MutationObserver(()=>{const R=document.documentElement.getAttribute("data-theme");R&&T(s,R==="dark")});return $.observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme"]}),()=>$.disconnect()});async function i(){T(r,""),T(o,!0);try{const g=await fetch("/api/login",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:b(n)})}),$=await g.json();g.ok?window.location.reload():T(r,$.error||"Login failed",!0)}catch(g){T(r,"Failed to connect to server"),console.error("Login error:",g)}finally{T(o,!1)}}function l(g){g.key==="Enter"&&!b(o)&&i()}var a={$set:Ye,$on:(g,$)=>Ke(t,g,$)},c=Xa(),u=h(c),v=h(u),f=h(v);ht(4),d(v);var m=y(v,2),_=h(m),w=h(_),p=y(h(w),2);ft(p),p.__keydown=l;var x=y(p,2);{var L=g=>{var $=Ya(),R=h($),ee=h(R,!0);d(R),d($),Q(()=>X(ee,b(r))),S(g,$)};V(x,g=>{b(r)&&g(L)})}d(w);var j=y(w,2),H=h(j);H.__click=i;var Y=h(H);{var Z=g=>{var $=Ga();ht(),S(g,$)},M=g=>{var $=an("Login");S(g,$)};V(Y,g=>{b(o)?g(Z):g(M,!1)})}return d(H),d(j),ht(4),d(_),d(m),d(u),d(c),Q(g=>{er(f,"src",b(s)?"/transparent-logo-dark.png":"/transparent-logo-light.png"),p.disabled=b(o),H.disabled=g},[()=>b(o)||!b(n).trim()]),kt(p,()=>b(n),g=>T(n,g)),S(e,c),He(a)}pt(["keydown","click"]);async function Za(){try{const e=await fetch("/api/auth-status");if(!e.ok)return!0;const t=await e.json();return!t.auth_required||t.is_authenticated}catch(e){return console.error("Failed to check auth status:",e),!0}}async function Qa(){await Za()?(new Fs({target:document.getElementById("app")}),As()):new Us({target:document.getElementById("app")})}Qa(); diff --git a/svelte-frontend/src/components/ConnectionDialog.svelte b/svelte-frontend/src/components/ConnectionDialog.svelte index 8527f05..96ffd4b 100644 --- a/svelte-frontend/src/components/ConnectionDialog.svelte +++ b/svelte-frontend/src/components/ConnectionDialog.svelte @@ -11,6 +11,14 @@ let identityPath = $state($connectionSettings.identityPath); let showAdvanced = $state(false); + // React to changes in connectionSettings store + $effect(() => { + hubHash = $connectionSettings.hubHash || hubHash; + destName = $connectionSettings.destName || destName; + nick = $connectionSettings.nickname || nick; + identityPath = $connectionSettings.identityPath || identityPath; + }); + onMount(() => { // Request discovered hubs when dialog opens requestDiscoveredHubs(); diff --git a/svelte-frontend/src/websocket.js b/svelte-frontend/src/websocket.js index eaf0f5b..b800358 100644 --- a/svelte-frontend/src/websocket.js +++ b/svelte-frontend/src/websocket.js @@ -123,6 +123,9 @@ function handleMessage(data) { case 'discovered_hubs': handleDiscoveredHubs(data); break; + case 'nickname_set': + handleNicknameSet(data); + break; } } @@ -290,6 +293,16 @@ function updateState(data) { identityHash.set(data.identity_hash); } + if (data.config) { + connectionSettings.update(settings => ({ + ...settings, + hubHash: data.config.hub_hash || settings.hubHash, + destName: data.config.dest_name || settings.destName, + nickname: data.config.nickname || settings.nickname, + identityPath: data.config.identity_path || settings.identityPath + })); + } + if (data.rooms && Object.keys(data.rooms).length > 0) { rooms.update(r => { const newRooms = new Map(); @@ -351,6 +364,12 @@ function handleDiscoveredHubs(data) { discoveredHubs.set(data.hubs || []); } +function handleNicknameSet(data) { + if (data.nickname !== undefined) { + nickname.set(data.nickname); + } +} + export function requestDiscoveredHubs() { sendWS({ type: 'get_discovered_hubs' }); }