Tweak send no-response handling

This commit is contained in:
Jack Kingsman committed 2026-03-15 16:12:17 -07:00
1 parent 7cb84ea6c7
commit 29368961fc
35 files changed
+134 -65

No files matched your search

+13 -1
View File
@@ -20,6 +20,11 @@ from app.services.messages import (
logger = logging.getLogger(__name__)
NO_RADIO_RESPONSE_AFTER_SEND_DETAIL = (
"Send command was issued to the radio, but no response was heard back. "
"The message may or may not have sent successfully."
)
BroadcastFn = Callable[..., Any]
TrackAckFn = Callable[[str, int, int], bool]
NowFn = Callable[[], float]
@@ -279,7 +284,14 @@ async def send_direct_message_to_contact(
timestamp=sender_timestamp,
)
if result is None or result.type == EventType.ERROR:
if result is None:
logger.warning(
"No response from radio after direct send to %s; send outcome is unknown",
contact.public_key[:12],
)
raise HTTPException(status_code=504, detail=NO_RADIO_RESPONSE_AFTER_SEND_DETAIL)
if result.type == EventType.ERROR:
raise HTTPException(status_code=500, detail=f"Failed to send message: {result.payload}")
message = await create_outgoing_direct_message(
@@ -1,4 +1,4 @@
import{r as be,j as vr}from"./index-pnVde5Cl.js";function wr(){return wr=Object.assign?Object.assign.bind():function(n){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)({}).hasOwnProperty.call(t,i)&&(n[i]=t[i])}return n},wr.apply(null,arguments)}function Tu(n,e){if(n==null)return{};var t={};for(var i in n)if({}.hasOwnProperty.call(n,i)){if(e.indexOf(i)!==-1)continue;t[i]=n[i]}return t}let Tr=[],ph=[];(()=>{let n="lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o".split(",").map(e=>e?parseInt(e,36):1);for(let e=0,t=0;e<n.length;e++)(e%2?ph:Tr).push(t=t+n[e])})();function Cu(n){if(n<768)return!1;for(let e=0,t=Tr.length;;){let i=e+t>>1;if(n<Tr[i])t=i;else if(n>=ph[i])e=i+1;else return!0;if(e==t)return!1}}function cl(n){return n>=127462&&n<=127487}const fl=8205;function Qu(n,e,t=!0,i=!0){return(t?mh:Au)(n,e,i)}function mh(n,e,t){if(e==n.length)return e;e&&gh(n.charCodeAt(e))&&Oh(n.charCodeAt(e-1))&&e--;let i=Ls(n,e);for(e+=ul(i);e<n.length;){let s=Ls(n,e);if(i==fl||s==fl||t&&Cu(s))e+=ul(s),i=s;else if(cl(s)){let r=0,o=e-2;for(;o>=0&&cl(Ls(n,o));)r++,o-=2;if(r%2==0)break;e+=2}else break}return e}function Au(n,e,t){for(;e>0;){let i=mh(n,e-2,t);if(i<e)return i;e--}return 0}function Ls(n,e){let t=n.charCodeAt(e);if(!Oh(t)||e+1==n.length)return t;let i=n.charCodeAt(e+1);return gh(i)?(t-55296<<10)+(i-56320)+65536:t}function gh(n){return n>=56320&&n<57344}function Oh(n){return n>=55296&&n<56320}function ul(n){return n<65536?1:2}class V{lineAt(e){if(e<0||e>this.length)throw new RangeError(`Invalid position ${e} in document of length ${this.length}`);return this.lineInner(e,!1,1,0)}line(e){if(e<1||e>this.lines)throw new RangeError(`Invalid line number ${e} in ${this.lines}-line document`);return this.lineInner(e,!0,1,0)}replace(e,t,i){[e,t]=ai(this,e,t);let s=[];return this.decompose(0,e,s,2),i.length&&i.decompose(0,i.length,s,3),this.decompose(t,this.length,s,1),Ye.from(s,this.length-(t-e)+i.length)}append(e){return this.replace(this.length,this.length,e)}slice(e,t=this.length){[e,t]=ai(this,e,t);let i=[];return this.decompose(e,t,i,0),Ye.from(i,t-e)}eq(e){if(e==this)return!0;if(e.length!=this.length||e.lines!=this.lines)return!1;let t=this.scanIdentical(e,1),i=this.length-this.scanIdentical(e,-1),s=new Ci(this),r=new Ci(e);for(let o=t,l=t;;){if(s.next(o),r.next(o),o=0,s.lineBreak!=r.lineBreak||s.done!=r.done||s.value!=r.value)return!1;if(l+=s.value.length,s.done||l>=i)return!0}}iter(e=1){return new Ci(this,e)}iterRange(e,t=this.length){return new yh(this,e,t)}iterLines(e,t){let i;if(e==null)i=this.iter();else{t==null&&(t=this.lines+1);let s=this.line(e).from;i=this.iterRange(s,Math.max(s,t==this.lines+1?this.length:t<=1?0:this.line(t-1).to))}return new bh(i)}toString(){return this.sliceString(0)}toJSON(){let e=[];return this.flatten(e),e}constructor(){}static of(e){if(e.length==0)throw new RangeError("A document must have at least one line");return e.length==1&&!e[0]?V.empty:e.length<=32?new J(e):Ye.from(J.split(e,[]))}}class J extends V{constructor(e,t=Pu(e)){super(),this.text=e,this.length=t}get lines(){return this.text.length}get children(){return null}lineInner(e,t,i,s){for(let r=0;;r++){let o=this.text[r],l=s+o.length;if((t?i:l)>=e)return new Mu(s,l,i,o);s=l+1,i++}}decompose(e,t,i,s){let r=e<=0&&t>=this.length?this:new J(dl(this.text,e,t),Math.min(t,this.length)-Math.max(0,e));if(s&1){let o=i.pop(),l=$n(r.text,o.text.slice(),0,r.length);if(l.length<=32)i.push(new J(l,o.length+r.length));else{let a=l.length>>1;i.push(new J(l.slice(0,a)),new J(l.slice(a)))}}else i.push(r)}replace(e,t,i){if(!(i instanceof J))return super.replace(e,t,i);[e,t]=ai(this,e,t);let s=$n(this.text,$n(i.text,dl(this.text,0,e)),t),r=this.length+i.length-(t-e);return sLine truncated
import{r as be,j as vr}from"./index-Fnq3QmNw.js";function wr(){return wr=Object.assign?Object.assign.bind():function(n){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)({}).hasOwnProperty.call(t,i)&&(n[i]=t[i])}return n},wr.apply(null,arguments)}function Tu(n,e){if(n==null)return{};var t={};for(var i in n)if({}.hasOwnProperty.call(n,i)){if(e.indexOf(i)!==-1)continue;t[i]=n[i]}return t}let Tr=[],ph=[];(()=>{let n="lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o".split(",").map(e=>e?parseInt(e,36):1);for(let e=0,t=0;e<n.length;e++)(e%2?ph:Tr).push(t=t+n[e])})();function Cu(n){if(n<768)return!1;for(let e=0,t=Tr.length;;){let i=e+t>>1;if(n<Tr[i])t=i;else if(n>=ph[i])e=i+1;else return!0;if(e==t)return!1}}function cl(n){return n>=127462&&n<=127487}const fl=8205;function Qu(n,e,t=!0,i=!0){return(t?mh:Au)(n,e,i)}function mh(n,e,t){if(e==n.length)return e;e&&gh(n.charCodeAt(e))&&Oh(n.charCodeAt(e-1))&&e--;let i=Ls(n,e);for(e+=ul(i);e<n.length;){let s=Ls(n,e);if(i==fl||s==fl||t&&Cu(s))e+=ul(s),i=s;else if(cl(s)){let r=0,o=e-2;for(;o>=0&&cl(Ls(n,o));)r++,o-=2;if(r%2==0)break;e+=2}else break}return e}function Au(n,e,t){for(;e>0;){let i=mh(n,e-2,t);if(i<e)return i;e--}return 0}function Ls(n,e){let t=n.charCodeAt(e);if(!Oh(t)||e+1==n.length)return t;let i=n.charCodeAt(e+1);return gh(i)?(t-55296<<10)+(i-56320)+65536:t}function gh(n){return n>=56320&&n<57344}function Oh(n){return n>=55296&&n<56320}function ul(n){return n<65536?1:2}class V{lineAt(e){if(e<0||e>this.length)throw new RangeError(`Invalid position ${e} in document of length ${this.length}`);return this.lineInner(e,!1,1,0)}line(e){if(e<1||e>this.lines)throw new RangeError(`Invalid line number ${e} in ${this.lines}-line document`);return this.lineInner(e,!0,1,0)}replace(e,t,i){[e,t]=ai(this,e,t);let s=[];return this.decompose(0,e,s,2),i.length&&i.decompose(0,i.length,s,3),this.decompose(t,this.length,s,1),Ye.from(s,this.length-(t-e)+i.length)}append(e){return this.replace(this.length,this.length,e)}slice(e,t=this.length){[e,t]=ai(this,e,t);let i=[];return this.decompose(e,t,i,0),Ye.from(i,t-e)}eq(e){if(e==this)return!0;if(e.length!=this.length||e.lines!=this.lines)return!1;let t=this.scanIdentical(e,1),i=this.length-this.scanIdentical(e,-1),s=new Ci(this),r=new Ci(e);for(let o=t,l=t;;){if(s.next(o),r.next(o),o=0,s.lineBreak!=r.lineBreak||s.done!=r.done||s.value!=r.value)return!1;if(l+=s.value.length,s.done||l>=i)return!0}}iter(e=1){return new Ci(this,e)}iterRange(e,t=this.length){return new yh(this,e,t)}iterLines(e,t){let i;if(e==null)i=this.iter();else{t==null&&(t=this.lines+1);let s=this.line(e).from;i=this.iterRange(s,Math.max(s,t==this.lines+1?this.length:t<=1?0:this.line(t-1).to))}return new bh(i)}toString(){return this.sliceString(0)}toJSON(){let e=[];return this.flatten(e),e}constructor(){}static of(e){if(e.length==0)throw new RangeError("A document must have at least one line");return e.length==1&&!e[0]?V.empty:e.length<=32?new J(e):Ye.from(J.split(e,[]))}}class J extends V{constructor(e,t=Pu(e)){super(),this.text=e,this.length=t}get lines(){return this.text.length}get children(){return null}lineInner(e,t,i,s){for(let r=0;;r++){let o=this.text[r],l=s+o.length;if((t?i:l)>=e)return new Mu(s,l,i,o);s=l+1,i++}}decompose(e,t,i,s){let r=e<=0&&t>=this.length?this:new J(dl(this.text,e,t),Math.min(t,this.length)-Math.max(0,e));if(s&1){let o=i.pop(),l=$n(r.text,o.text.slice(),0,r.length);if(l.length<=32)i.push(new J(l,o.length+r.length));else{let a=l.length>>1;i.push(new J(l.slice(0,a)),new J(l.slice(a)))}}else i.push(r)}replace(e,t,i){if(!(i instanceof J))return super.replace(e,t,i);[e,t]=ai(this,e,t);let s=$n(this.text,$n(i.text,dl(this.text,0,e)),t),r=this.length+i.length-(t-e);return sLine truncated
`){[e,t]=ai(this,e,t);let s="";for(let r=0,o=0;r<=t&&o<this.text.length;o++){let l=this.text[o],a=r+l.length;r>e&&o&&(s+=i),e<a&&t>r&&(s+=l.slice(Math.max(0,e-r),t-r)),r=a+1}return s}flatten(e){for(let t of this.text)e.push(t)}scanIdentical(){return 0}static split(e,t){let i=[],s=-1;for(let r of e)i.push(r),s+=r.length+1,i.length==32&&(t.push(new J(i,s)),i=[],s=-1);return s>-1&&t.push(new J(i,s)),t}}class Ye extends V{constructor(e,t){super(),this.children=e,this.length=t,this.lines=0;for(let i of e)this.lines+=i.lines}lineInner(e,t,i,s){for(let r=0;;r++){let o=this.children[r],l=s+o.length,a=i+o.lines-1;if((t?a:l)>=e)return o.lineInner(e,t,i,s);s=l+1,i=a+1}}decompose(e,t,i,s){for(let r=0,o=0;o<=t&&r<this.children.length;r++){let l=this.children[r],a=o+l.length;if(e<=a&&t>=o){let h=s&((o<=e?1:0)|(a>=t?2:0));o>=e&&a<=t&&!h?i.push(l):l.decompose(e-o,t-o,i,h)}o=a+1}}replace(e,t,i){if([e,t]=ai(this,e,t),i.lines<this.lines)for(let s=0,r=0;s<this.children.length;s++){let o=this.children[s],l=r+o.length;if(e>=r&&t<=l){let a=o.replace(e-r,t-r,i),h=this.lines-o.lines+a.lines;if(a.lines<h>>4&&a.lines>h>>6){let c=this.children.slice();return c[s]=a,new Ye(c,this.length-(t-e)+i.length)}return super.replace(r,l,a)}r=l+1}return super.replace(e,t,i)}sliceString(e,t=this.length,i=`
`){[e,t]=ai(this,e,t);let s="";for(let r=0,o=0;r<this.children.length&&o<=t;r++){let l=this.children[r],a=o+l.length;o>e&&r&&(s+=i),e<a&&t>o&&(s+=l.sliceString(e-o,t-o,i)),o=a+1}return s}flatten(e){for(let t of this.children)t.flatten(e)}scanIdentical(e,t){if(!(e instanceof Ye))return 0;let i=0,[s,r,o,l]=t>0?[0,0,this.children.length,e.children.length]:[this.children.length-1,e.children.length-1,-1,-1];for(;;s+=t,r+=t){if(s==o||r==l)return i;let a=this.children[s],h=e.children[r];if(a!=h)return i+a.scanIdentical(h,t);i+=a.length+1}}static from(e,t=e.reduce((i,s)=>i+s.length+1,-1)){let i=0;for(let d of e)i+=d.lines;if(i<32){let d=[];for(let p of e)p.flatten(d);return new J(d,t)}let s=Math.max(32,i>>5),r=s<<1,o=s>>1,l=[],a=0,h=-1,c=[];function f(d){let p;if(d.lines>r&&d instanceof Ye)for(let m of d.children)f(m);else d.lines>o&&(a>o||!a)?(u(),l.push(d)):d instanceof J&&a&&(p=c[c.length-1])instanceof J&&d.lines+p.lines<=32?(a+=d.lines,h+=d.length+1,c[c.length-1]=new J(p.text.concat(d.text),p.length+1+d.length)):(a+d.lines>s&&u(),a+=d.lines,h+=d.length+1,c.push(d))}function u(){a!=0&&(l.push(c.length==1?c[0]:Ye.from(c,h)),h=-1,a=c.length=0)}for(let d of e)f(d);return u(),l.length==1?l[0]:new Ye(l,t)}}V.empty=new J([""],0);function Pu(n){let e=-1;for(let t of n)e+=t.length+1;return e}function $n(n,e,t=0,i=1e9){for(let s=0,r=0,o=!0;r<n.length&&s<=i;r++){let l=n[r],a=s+l.length;a>=t&&(a>i&&(l=l.slice(0,i-s)),s<t&&(l=l.slice(t-s)),o?(e[e.length-1]+=l,o=!1):e.push(l)),s=a+1}return e}function dl(n,e,t){return $n(n,[""],e,t)}class Ci{constructor(e,t=1){this.dir=t,this.done=!1,this.lineBreak=!1,this.value="",this.nodes=[e],this.offsets=[t>0?1:(e instanceof J?e.text.length:e.children.length)<<1]}nextInner(e,t){for(this.done=this.lineBreak=!1;;){let i=this.nodes.length-1,s=this.nodes[i],r=this.offsets[i],o=r>>1,l=s instanceof J?s.text.length:s.children.length;if(o==(t>0?l:0)){if(i==0)return this.done=!0,this.value="",this;t>0&&this.offsets[i-1]++,this.nodes.pop(),this.offsets.pop()}else if((r&1)==(t>0?0:1)){if(this.offsets[i]+=t,e==0)return this.lineBreak=!0,this.value=`
`,this;e--}else if(s instanceof J){let a=s.text[o+(t<0?-1:0)];if(this.offsets[i]+=t,a.length>Math.max(0,e))return this.value=e==0?a:t>0?a.slice(e):a.slice(0,a.length-e),this;e-=a.length}else{let a=s.children[o+(t<0?-1:0)];e>a.length?(e-=a.length,this.offsets[i]+=t):(t<0&&this.offsets[i]--,this.nodes.push(a),this.offsets.push(t>0?1:(a instanceof J?a.text.length:a.children.length)<<1))}}}next(e=0){return e<0&&(this.nextInner(-e,-this.dir),e=this.value.length),this.nextInner(e,this.dir)}}class yh{constructor(e,t,i){this.value="",this.done=!1,this.cursor=new Ci(e,t>i?-1:1),this.pos=t>i?e.length:0,this.from=Math.min(t,i),this.to=Math.max(t,i)}nextInner(e,t){if(t<0?this.pos<=this.from:this.pos>=this.to)return this.value="",this.done=!0,this;e+=Math.max(0,t<0?this.pos-this.to:this.from-this.pos);let i=t<0?this.pos-this.from:this.to-this.pos;e>i&&(e=i),i-=e;let{value:s}=this.cursor.next(e);return this.pos+=(s.length+e)*t,this.value=s.length<=i?s:t<0?s.slice(s.length-i):s.slice(0,i),this.done=!this.value,this}next(e=0){return e<0?e=Math.max(e,this.from-this.pos):e>0&&(e=Math.min(e,this.to-this.pos)),this.nextInner(e,this.cursor.dir)}get lineBreak(){return this.cursor.lineBreak&&this.value!=""}}class bh{constructor(e){this.inner=e,this.afterBreak=!0,this.value="",this.done=!1}next(e=0){let{done:t,lineBreak:i,value:s}=this.inner.next(e);return t&&this.afterBreak?(this.value="",this.afterBreak=!1):t?(this.done=!0,this.value=""):i?this.afterBreak?this.value="":(this.afterBreak=!0,this.next()):(this.value=s,this.afterBreak=!1),this}get lineBreak(){return!1}}typeof Symbol<"u"&&(V.prototype[Symbol.iterator]=function(){return this.iter()},Ci.prototype[Symbol.iterator]=yh.prototype[Symbol.iterator]=bh.prototype[Symbol.iterator]=function(){return this});class Mu{constructor(e,t,i,s){this.from=e,this.to=t,this.number=i,this.text=s}get length(){return this.to-this.from}}function ai(n,e,t){return e=Math.max(0,Math.min(n.length,e)),[e,Math.max(e,Math.min(n.length,t))]}function le(n,e,t=!0,i=!0){return Qu(n,e,t,i)}function Ru(n){return n>=56320&&n<57344}function Du(n){return n>=55296&&n<56320}function ke(n,e){let t=n.charCodeAt(e);if(!Du(t)||e+1==n.length)return t;let i=n.charCodeAt(e+1);return Ru(i)?(t-55296<<10)+(i-56320)+65536:t}function xo(n){return n<=65535?String.fromCharCode(n):(n-=65536,String.fromCharCode((n>>10)+55296,(n&1023)+56320))}function Ke(n){return n<65536?1:2}const Cr=/\r\n?|\n/;var ue=(function(n){return n[n.Simple=0]="Simple",n[n.TrackDel=1]="TrackDel",n[n.TrackBefore=2]="TrackBefore",n[n.TrackAfter=3]="TrackAfter",n})(ue||(ue={}));class st{constructor(e){this.sections=e}get length(){let e=0;for(let t=0;t<this.sections.length;t+=2)e+=this.sections[t];return e}get newLength(){let e=0;for(let t=0;t<this.sections.length;t+=2){let i=this.sections[t+1];e+=i<0?this.sections[t]:i}return e}get empty(){return this.sections.length==0||this.sections.length==2&&this.sections[1]<0}iterGaps(e){for(let t=0,i=0,s=0;t<this.sections.length;){let r=this.sections[t++],o=this.sections[t++];o<0?(e(i,s,r),s+=r):s+=o,i+=r}}iterChangedRanges(e,t=!1){Qr(this,e,t)}get invertedDesc(){let e=[];for(let t=0;t<this.sections.length;){let i=this.sections[t++],s=this.sections[t++];s<0?e.push(i,s):e.push(s,i)}return new st(e)}composeDesc(e){return this.empty?e:e.empty?this:xh(this,e)}mapDesc(e,t=!1){return e.empty?this:Ar(this,e,t)}mapPos(e,t=-1,i=ue.Simple){let s=0,r=0;for(let o=0;o<this.sections.length;){let l=this.sections[o++],a=this.sections[o++],h=s+l;if(a<0){if(h>e)return r+(e-s);r+=l}else{if(i!=ue.Simple&&h>=e&&(i==ue.TrackDel&&s<e&&h>e||i==ue.TrackBefore&&s<e||i==ue.TrackAfter&&h>e))return null;if(h>e||h==e&&t<0&&!l)return e==s||t<0?r:r+a;r+=a}s=h}if(e>s)throw new RangeError(`Position ${e} is out of range for changeset of length ${s}`);return r}touchesRange(e,t=e){for(let i=0,s=0;i<this.sections.length&&s<=t;){let r=this.sections[i++],o=this.sections[i++],l=s+r;if(o>=0&&s<=t&&l>=e)return s<e&&l>t?"cover":!0;s=l}return!1}toString(){let e="";for(let t=0;t<this.sections.length;){let i=this.sections[t++],s=this.sections[t++];e+=(e?" ":"")+i+(s>=0?":"+s:"")}return e}toJSON(){return this.sections}static fromJSON(e){if(!Array.isArray(e)||e.length%2||e.some(t=>typeof t!="number"))throw new RangeError("Invalid JSON representation of ChangeDesc");return new st(e)}static create(e){return new st(e)}}class se extends st{constructor(e,t){super(e),this.inserted=t}apply(e){if(this.length!=e.length)throw new RangeError("Applying change set to a document with the wrong length");return Qr(this,(t,i,s,r,o)=>e=e.replace(s,s+(i-t),o),!1),e}mapDesc(e,t=!1){return Ar(this,e,t,!0)}invert(e){let t=this.sections.slice(),i=[];for(let s=0,r=0;s<t.length;s+=2){let o=t[s],l=t[s+1];if(l>=0){t[s]=l,t[s+1]=o;let a=s>>1;for(;i.length<a;)i.push(V.empty);i.push(o?e.slice(r,r+o):V.empty)}r+=o}return new se(t,i)}compose(e){return this.empty?e:e.empty?this:xh(this,e,!0)}map(e,t=!1){return e.empty?this:Ar(this,e,t,!0)}iterChanges(e,t=!1){Qr(this,e,t)}get desc(){return st.crea Line truncated
@@ -12,4 +12,4 @@ import{r as be,j as vr}from"./index-pnVde5Cl.js";function wr(){return wr=Object.
`:i=="r"?"\r":i=="t"?" ":"\\")}eq(e){return this.search==e.search&&this.replace==e.replace&&this.caseSensitive==e.caseSensitive&&this.regexp==e.regexp&&this.wholeWord==e.wholeWord&&this.test==e.test}create(){return this.regexp?new S0(this):new y0(this)}getCursor(e,t=0,i){let s=e.doc?e:N.create({doc:e});return i==null&&(i=s.doc.length),this.regexp?Zt(this,s,t,i):Gt(this,s,t,i)}}class Hf{constructor(e){this.spec=e}}function g0(n,e,t){return(i,s,r,o)=>{if(t&&!t(i,s,r,o))return!1;let l=i>=o&&s<=o+r.length?r.slice(i-o,s-o):e.doc.sliceString(i,s);return n(l,e,i,s)}}function Gt(n,e,t,i){let s;return n.wholeWord&&(s=O0(e.doc,e.charCategorizer(e.selection.main.head))),n.test&&(s=g0(n.test,e,s)),new di(e.doc,n.unquoted,t,i,n.caseSensitive?void 0:r=>r.toLowerCase(),s)}function O0(n,e){return(t,i,s,r)=>((r>t||r+s.length<i)&&(r=Math.max(0,t-2),s=n.sliceString(r,Math.min(n.length,i+2))),(e(ds(s,t-r))!=G.Word||e(ps(s,t-r))!=G.Word)&&(e(ps(s,i-r))!=G.Word||e(ds(s,i-r))!=G.Word))}class y0 extends Hf{constructor(e){super(e)}nextMatch(e,t,i){let s=Gt(this.spec,e,i,e.doc.length).nextOverlapping();if(s.done){let r=Math.min(e.doc.length,t+this.spec.unquoted.length);s=Gt(this.spec,e,0,r).nextOverlapping()}return s.done||s.value.from==t&&s.value.to==i?null:s.value}prevMatchInRange(e,t,i){for(let s=i;;){let r=Math.max(t,s-1e4-this.spec.unquoted.length),o=Gt(this.spec,e,r,s),l=null;for(;!o.nextOverlapping().done;)l=o.value;if(l)return l;if(r==t)return null;s-=1e4}}prevMatch(e,t,i){let s=this.prevMatchInRange(e,0,t);return s||(s=this.prevMatchInRange(e,Math.max(0,i-this.spec.unquoted.length),e.doc.length)),s&&(s.from!=t||s.to!=i)?s:null}getReplacement(e){return this.spec.unquote(this.spec.replace)}matchAll(e,t){let i=Gt(this.spec,e,0,e.doc.length),s=[];for(;!i.next().done;){if(s.length>=t)return null;s.push(i.value)}return s}highlight(e,t,i,s){let r=Gt(this.spec,e,Math.max(0,t-this.spec.unquoted.length),Math.min(i+this.spec.unquoted.length,e.doc.length));for(;!r.next().done;)s(r.value.from,r.value.to)}}function b0(n,e,t){return(i,s,r)=>(!t||t(i,s,r))&&n(r[0],e,i,s)}function Zt(n,e,t,i){let s;return n.wholeWord&&(s=x0(e.charCategorizer(e.selection.main.head))),n.test&&(s=b0(n.test,e,s)),new Ff(e.doc,n.search,{ignoreCase:!n.caseSensitive,test:s},t,i)}function ds(n,e){return n.slice(le(n,e,!1),e)}function ps(n,e){return n.slice(e,le(n,e))}function x0(n){return(e,t,i)=>!i[0].length||(n(ds(i.input,i.index))!=G.Word||n(ps(i.input,i.index))!=G.Word)&&(n(ps(i.input,i.index+i[0].length))!=G.Word||n(ds(i.input,i.index+i[0].length))!=G.Word)}class S0 extends Hf{nextMatch(e,t,i){let s=Zt(this.spec,e,i,e.doc.length).next();return s.done&&(s=Zt(this.spec,e,0,t).next()),s.done?null:s.value}prevMatchInRange(e,t,i){for(let s=1;;s++){let r=Math.max(t,i-s*1e4),o=Zt(this.spec,e,r,i),l=null;for(;!o.next().done;)l=o.value;if(l&&(r==t||l.from>r+10))return l;if(r==t)return null}}prevMatch(e,t,i){return this.prevMatchInRange(e,0,t)||this.prevMatchInRange(e,i,e.doc.length)}getReplacement(e){return this.spec.unquote(this.spec.replace).replace(/\$([$&]|\d+)/g,(t,i)=>{if(i=="&")return e.match[0];if(i=="$")return"$";for(let s=i.length;s>0;s--){let r=+i.slice(0,s);if(r>0&&r<e.match.length)return e.match[r]+i.slice(s)}return t})}matchAll(e,t){let i=Zt(this.spec,e,0,e.doc.length),s=[];for(;!i.next().done;){if(s.length>=t)return null;s.push(i.value)}return s}highlight(e,t,i,s){let r=Zt(this.spec,e,Math.max(0,t-250),Math.min(i+250,e.doc.length));for(;!r.next().done;)s(r.value.from,r.value.to)}}const Ui=W.define(),Go=W.define(),kt=pe.define({create(n){return new cr(Oo(n).create(),null)},update(n,e){for(let t of e.effects)t.is(Ui)?n=new cr(t.value.create(),n.panel):t.is(Go)&&(n=new cr(n.query,t.value?Zo:null));return n},provide:n=>Vi.from(n,e=>e.panel)});class cr{constructor(e,t){this.query=e,this.panel=t}}const k0=R.mark({class:"cm-searchMatch"}),v0=R.mark({class:"cm-searchMatch cm-searchMatch-selected"}),w0=K.fromClass(class{constructor(n){this.view=n,this.decorations=this.highlight(n.state.field(kt))}update(n){let e=n.state.field(kt);(e!=n.startState.field(kt)||n.docChanged||n.selectionSet||n.viewportChanged)&&(this.decorations=this.highlight(e))}highlight({query:n,panel:e}){if(!e||!n.spec.valid)return R.none;let{view:t}=this,i=new mt;for(let s=0,r=t.visibleRanges,o=r.length;s<o;s++){let{from:l,to:a}=r[s];for(;s<o-1&&a>r[s+1].from-500;)a=r[++s].to;n.highlight(t.state,l,a,(h,c)=>{let f=t.state.selection.ranges.some(u=>u.from==h&&u.to==c);i.add(h,c,f?v0:k0)})}return i.finish()}},{decorations:n=>n.decorations});function hn(n){return e=>{let t=e.state.field(kt,!1);return t&&t.query.spec.valid?n(e,t):Zf(e)}}const ms=hn((n,{query:e})=>{let{to:t}=n.state.selection.main,i=e.nextMatch(n.state,t,t);if(!i)return!1;let s=b.single(i.from,i.to),r=n.state.facet(gi);return n.dispatch({selection:s,effects:[Yo(n,i),r.scrollToMatch(s.main,n)],userEvent:"select.search"}),Gf(n),!0}),gs=hn((n,{query:e})=>{let{state:t}=n,{from:i}=t.selection.main,s=e.prevMatch(t,i,i);if(!s)return!1;let r= Line truncated
`,{label:"if",detail:"block",type:"keyword"}),lt("if ${}:\n ${}\nelse:\n ${}",{label:"if",detail:"/ else block",type:"keyword"}),lt("class ${name}:\n def __init__(self, ${params}):\n ${}",{label:"class",detail:"definition",type:"keyword"}),lt("import ${module}",{label:"import",detail:"statement",type:"keyword"}),lt("from ${module} import ${names}",{label:"from",detail:"import",type:"keyword"})],Rb=E0(wu,Jf(Pb.concat(Mb)));function xr(n){let{node:e,pos:t}=n,i=n.lineIndent(t,-1),s=null;for(;;){let r=e.childBefore(t);if(r)if(r.name=="Comment")t=r.from;else if(r.name=="Body"||r.name=="MatchBody")n.baseIndentFor(r)+n.unit<=i&&(s=r),e=r;else if(r.name=="MatchClause")e=r;else if(r.type.is("Statement"))e=r;else break;else break}return s}function Sr(n,e){let t=n.baseIndentFor(e),i=n.lineAt(n.pos,-1),s=i.from+i.text.length;return/^\s*($|#)/.test(i.text)&&n.node.to<s+100&&!/\S/.test(n.state.sliceDoc(s,n.node.to))&&n.lineIndent(n.pos,-1)<=t||/^\s*(else:|elif |except |finally:|case\s+[^=:]+:)/.test(n.textAfter)&&n.lineIndent(n.pos,-1)>t?null:t+n.unit}const kr=os.define({name:"python",parser:Cb.configure({props:[Hc.add({Body:n=>{var e;let t=/^\s*(#|$)/.test(n.textAfter)&&xr(n)||n.node;return(e=Sr(n,t))!==null&&e!==void 0?e:n.continue()},MatchBody:n=>{var e;let t=xr(n);return(e=Sr(n,t||n.node))!==null&&e!==void 0?e:n.continue()},IfStatement:n=>/^\s*(else:|elif )/.test(n.textAfter)?n.baseIndent:n.continue(),"ForStatement WhileStatement":n=>/^\s*else:/.test(n.textAfter)?n.baseIndent:n.continue(),TryStatement:n=>/^\s*(except[ :]|finally:|else:)/.test(n.textAfter)?n.baseIndent:n.continue(),MatchStatement:n=>/^\s*case /.test(n.textAfter)?n.baseIndent+n.unit:n.continue(),"TupleExpression ComprehensionExpression ParamList ArgList ParenthesizedExpression":sr({closing:")"}),"DictionaryExpression DictionaryComprehensionExpression SetExpression SetComprehensionExpression":sr({closing:"}"}),"ArrayExpression ArrayComprehensionExpression":sr({closing:"]"}),MemberExpression:n=>n.baseIndent+n.unit,"String FormatString":()=>null,Script:n=>{var e;let t=xr(n);return(e=t&&Sr(n,t))!==null&&e!==void 0?e:n.continue()}}),Zc.add({"ArrayExpression DictionaryExpression SetExpression TupleExpression":pg,Body:(n,e)=>({from:n.from+1,to:n.to-(n.to==e.doc.length?0:1)}),"String FormatString":(n,e)=>({from:e.doc.lineAt(n.from).to,to:n.to})})]}),languageData:{closeBrackets:{brackets:["(","[","{","'",'"',"'''",'"""'],stringPrefixes:["f","fr","rf","r","u","b","br","rb","F","FR","RF","R","U","B","BR","RB"]},commentTokens:{line:"#"},indentOnInput:/^\s*([\}\]\)]|else:|elif |except |finally:|case\s+[^:]*:?)$/}});function Db(){return new ng(kr,[kr.data.of({autocomplete:Ab}),kr.data.of({autocomplete:Rb})])}function Bb({value:n,onChange:e,id:t,height:i="256px"}){return vr.jsx("div",{className:"w-full overflow-hidden rounded-md border border-input",children:vr.jsx(pu,{value:n,onChange:e,extensions:[Db()],theme:du,height:i,basicSetup:{lineNumbers:!0,foldGutter:!1,highlightActiveLine:!0},className:"text-sm",id:t,"aria-label":"Bot code editor"})})}export{Bb as BotCodeEditor};
//# sourceMappingURL=BotCodeEditor-ycUmdsPQ.js.map
//# sourceMappingURL=BotCodeEditor-C20Gx7-Q.js.map
@@ -1 +1 @@
{"version":3,"file":"BotCodeEditor-ycUmdsPQ.js","sources":["../../node_modules/@babel/runtime/helpers/esm/extends.js","../../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../../node_modules/@marijn/find-cluster-break/src/index.js","../../node_modules/@codemirror/state/dist/index.js","../../node_modules/style-mod/src/style-mod.js","../../node_modules/w3c-keyname/index.js","../../node_modules/crelt/index.js","../../node_modules/@codemirror/view/dist/index.js","../../node_modules/@lezer/common/dist/index.js","../../node_modules/@lezer/highlight/dist/index.js","../../node_modules/@codemirror/language/dist/index.js","../../node_modules/@codemirror/commands/dist/index.js","../../node_modules/@codemirror/search/dist/index.js","../../node_modules/@codemirror/autocomplete/dist/index.js","../../node_modules/@codemirror/lint/dist/index.js","../../node_modules/@uiw/codemirror-extensions-basic-setup/esm/index.js","../../node_modules/@codemirror/theme-one-dark/dist/index.js","../../node_modules/@uiw/react-codemirror/esm/theme/light.js","../../node_modules/@uiw/react-codemirror/esm/getDefaultExtensions.js","../../node_modules/@uiw/react-codemirror/esm/utils.js","../../node_modules/@uiw/react-codemirror/esm/timeoutLatch.js","../../node_modules/@uiw/react-codemirror/esm/useCodeMirror.js","../../node_modules/@uiw/react-codemirror/esm/index.js","../../node_modules/@lezer/lr/dist/index.js","../../node_modules/@lezer/python/dist/index.js","../../node_modules/@codemirror/lang-python/dist/index.js","../../src/components/BotCodeEditor.tsx"],"sourcesContent":["function _extends() {\n return _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, _extends.apply(null, arguments);\n}\nexport { _extends as default };","function _objectWithoutPropertiesLoose(r, e) {\n if (null == r) return {};\n var t = {};\n for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n if (-1 !== e.indexOf(n)) continue;\n t[n] = r[n];\n }\n return t;\n}\nexport { _objectWithoutPropertiesLoose as default };","// These are filled with ranges (rangeFrom[i] up to but not including\n// rangeTo[i]) of code points that count as extending characters.\nlet rangeFrom = [], rangeTo = []\n\n;(() => {\n // Compressed representation of the Grapheme_Cluster_Break=Extend\n // information from\n // http://www.unicode.org/Public/16.0.0/ucd/auxiliary/GraphemeBreakProperty.txt.\n // Each pair of elements represents a range, as an offet from the\n // previous range and a length. Numbers are in base-36, with the empty\n // string being a shorthand for 1.\n let numbers = \"lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o\".split(\",\").map(s => s ? parseInt(s, 36) : 1)\n for (let i = 0, n = 0; i < numbers.length; i++)\n (i % 2 ? rangeTo : rangeFrom).push(n = n + numbers[i])\n})()\n\nexport function isExtendingChar(code) {\n if (code < 768) return false\n for (let from = 0, to = rangeFrom.length;;) {\n let mid = (from + to) >> 1\n if (code < rangeFrom[mid]) to = mid\n else if (code >= rangeTo[mid]) from = mid + 1\n else return true\n if (from == to) return false\n }\n}\n\nfunction isRegionalIndicator(code) {\n return code >= 0x1F1E6 && code <= 0x1F1FF\n}\n\nfunction check(code) {\n for (let i = 0; i < rangeFrom.length; i++) {\n if (rangeTo[i] > code) return rangeFrom[i] <= code\n }\n return false\n}\n\nconst ZWJ = 0x200d\n\nexport function findClusterBreak(str, pos, forward = true, includeExtending = true) {\n return (forward ? nextClusterBreak : prevClusterBreak)(strLine truncated
{"version":3,"file":"BotCodeEditor-C20Gx7-Q.js","sources":["../../node_modules/@babel/runtime/helpers/esm/extends.js","../../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../../node_modules/@marijn/find-cluster-break/src/index.js","../../node_modules/@codemirror/state/dist/index.js","../../node_modules/style-mod/src/style-mod.js","../../node_modules/w3c-keyname/index.js","../../node_modules/crelt/index.js","../../node_modules/@codemirror/view/dist/index.js","../../node_modules/@lezer/common/dist/index.js","../../node_modules/@lezer/highlight/dist/index.js","../../node_modules/@codemirror/language/dist/index.js","../../node_modules/@codemirror/commands/dist/index.js","../../node_modules/@codemirror/search/dist/index.js","../../node_modules/@codemirror/autocomplete/dist/index.js","../../node_modules/@codemirror/lint/dist/index.js","../../node_modules/@uiw/codemirror-extensions-basic-setup/esm/index.js","../../node_modules/@codemirror/theme-one-dark/dist/index.js","../../node_modules/@uiw/react-codemirror/esm/theme/light.js","../../node_modules/@uiw/react-codemirror/esm/getDefaultExtensions.js","../../node_modules/@uiw/react-codemirror/esm/utils.js","../../node_modules/@uiw/react-codemirror/esm/timeoutLatch.js","../../node_modules/@uiw/react-codemirror/esm/useCodeMirror.js","../../node_modules/@uiw/react-codemirror/esm/index.js","../../node_modules/@lezer/lr/dist/index.js","../../node_modules/@lezer/python/dist/index.js","../../node_modules/@codemirror/lang-python/dist/index.js","../../src/components/BotCodeEditor.tsx"],"sourcesContent":["function _extends() {\n return _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, _extends.apply(null, arguments);\n}\nexport { _extends as default };","function _objectWithoutPropertiesLoose(r, e) {\n if (null == r) return {};\n var t = {};\n for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n if (-1 !== e.indexOf(n)) continue;\n t[n] = r[n];\n }\n return t;\n}\nexport { _objectWithoutPropertiesLoose as default };","// These are filled with ranges (rangeFrom[i] up to but not including\n// rangeTo[i]) of code points that count as extending characters.\nlet rangeFrom = [], rangeTo = []\n\n;(() => {\n // Compressed representation of the Grapheme_Cluster_Break=Extend\n // information from\n // http://www.unicode.org/Public/16.0.0/ucd/auxiliary/GraphemeBreakProperty.txt.\n // Each pair of elements represents a range, as an offet from the\n // previous range and a length. Numbers are in base-36, with the empty\n // string being a shorthand for 1.\n let numbers = \"lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o\".split(\",\").map(s => s ? parseInt(s, 36) : 1)\n for (let i = 0, n = 0; i < numbers.length; i++)\n (i % 2 ? rangeTo : rangeFrom).push(n = n + numbers[i])\n})()\n\nexport function isExtendingChar(code) {\n if (code < 768) return false\n for (let from = 0, to = rangeFrom.length;;) {\n let mid = (from + to) >> 1\n if (code < rangeFrom[mid]) to = mid\n else if (code >= rangeTo[mid]) from = mid + 1\n else return true\n if (from == to) return false\n }\n}\n\nfunction isRegionalIndicator(code) {\n return code >= 0x1F1E6 && code <= 0x1F1FF\n}\n\nfunction check(code) {\n for (let i = 0; i < rangeFrom.length; i++) {\n if (rangeTo[i] > code) return rangeFrom[i] <= code\n }\n return false\n}\n\nconst ZWJ = 0x200d\n\nexport function findClusterBreak(str, pos, forward = true, includeExtending = true) {\n return (forward ? nextClusterBreak : prevClusterBreak)(strLine truncated
@@ -1,4 +1,4 @@
import{o as tr,p as yt,q as lr,u as wt,v as nt,w as rr,x as ar,y as hr,r as H,_ as fr,t as dt,z as gr,k as Ct,j as M,l as mr}from"./index-pnVde5Cl.js";var Se={},Fe={},ie={},St;function ve(){if(St)return ie;St=1,Object.defineProperty(ie,"__esModule",{value:!0}),ie.RequestType=ie.AdvertFlags=ie.DeviceRole=ie.PayloadVersion=ie.ControlSubType=ie.PayloadType=ie.RouteType=void 0;var t;(function(e){e[e.TransportFlood=0]="TransportFlood",e[e.Flood=1]="Flood",e[e.Direct=2]="Direct",e[e.TransportDirect=3]="TransportDirect"})(t||(ie.RouteType=t={}));var o;(function(e){e[e.Request=0]="Request",e[e.Response=1]="Response",e[e.TextMessage=2]="TextMessage",e[e.Ack=3]="Ack",e[e.Advert=4]="Advert",e[e.GroupText=5]="GroupText",e[e.GroupData=6]="GroupData",e[e.AnonRequest=7]="AnonRequest",e[e.Path=8]="Path",e[e.Trace=9]="Trace",e[e.Multipart=10]="Multipart",e[e.Control=11]="Control",e[e.RawCustom=15]="RawCustom"})(o||(ie.PayloadType=o={}));var c;(function(e){e[e.NodeDiscoverReq=128]="NodeDiscoverReq",e[e.NodeDiscoverResp=144]="NodeDiscoverResp"})(c||(ie.ControlSubType=c={}));var l;(function(e){e[e.Version1=0]="Version1",e[e.Version2=1]="Version2",e[e.Version3=2]="Version3",e[e.Version4=3]="Version4"})(l||(ie.PayloadVersion=l={}));var n;(function(e){e[e.Unknown=0]="Unknown",e[e.ChatNode=1]="ChatNode",e[e.Repeater=2]="Repeater",e[e.RoomServer=3]="RoomServer",e[e.Sensor=4]="Sensor"})(n||(ie.DeviceRole=n={}));var r;(function(e){e[e.HasLocation=16]="HasLocation",e[e.HasFeature1=32]="HasFeature1",e[e.HasFeature2=64]="HasFeature2",e[e.HasName=128]="HasName"})(r||(ie.AdvertFlags=r={}));var a;return(function(e){e[e.GetStats=1]="GetStats",e[e.Keepalive=2]="Keepalive",e[e.GetTelemetryData=3]="GetTelemetryData",e[e.GetMinMaxAvgData=4]="GetMinMaxAvgData",e[e.GetAccessList=5]="GetAccessList"})(a||(ie.RequestType=a={})),ie}var Ie={},kt;function oe(){if(kt)return Ie;kt=1,Object.defineProperty(Ie,"__esModule",{value:!0}),Ie.byteToHex=t,Ie.bytesToHex=o,Ie.numberToHex=c,Ie.hexToBytes=l;function t(n){return n.toString(16).padStart(2,"0").toUpperCase()}function o(n){return Array.from(n).map(t).join("")}function c(n,r=8){return(n>>>0).toString(16).padStart(r,"0").toUpperCase()}function l(n){const r=n.replace(/\s/g,"").toUpperCase();if(!/^[0-9A-F]*$/.test(r))throw new Error("Invalid hex string: invalid characters at position 0");if(r.length%2!==0)throw new Error("Invalid hex string: odd length");const a=new Uint8Array(r.length/2);for(let e=0;e<r.length;e+=2)a[e/2]=parseInt(r.substr(e,2),16);return a}return Ie}var ke={},Tt;function $e(){if(Tt)return ke;Tt=1,Object.defineProperty(ke,"__esModule",{value:!0}),ke.getRouteTypeName=o,ke.getPayloadTypeName=c,ke.getPayloadVersionName=l,ke.getDeviceRoleName=n,ke.getRequestTypeName=r,ke.getControlSubTypeName=a;const t=ve();function o(e){switch(e){case t.RouteType.Flood:return"Flood";case t.RouteType.Direct:return"Direct";case t.RouteType.TransportFlood:return"TransportFlood";case t.RouteType.TransportDirect:return"TransportDirect";default:return`Unknown (${e})`}}function c(e){switch(e){case t.PayloadType.RawCustom:return"RawCustom";case t.PayloadType.Trace:return"Trace";case t.PayloadType.Advert:return"Advert";case t.PayloadType.GroupText:return"GroupText";case t.PayloadType.GroupData:return"GroupData";case t.PayloadType.Request:return"Request";case t.PayloadType.Response:return"Response";case t.PayloadType.TextMessage:return"TextMessage";case t.PayloadType.AnonRequest:return"AnonRequest";case t.PayloadType.Ack:return"Ack";case t.PayloadType.Path:return"Path";case t.PayloadType.Multipart:return"Multipart";case t.PayloadType.Control:return"Control";default:return`Unknown (0x${e.toString(16)})`}}function l(e){switch(e){case t.PayloadVersion.Version1:return"Version 1";case t.PayloadVersion.Version2:return"Version 2";case t.PayloadVersion.Version3:return"Version 3";case t.PayloadVersion.Version4:return"Version 4";default:return`Unknown (${e})`}}function n(e){switch(e){case t.DeviceRole.Unknown:return"Unknown";case t.DeviceRole.ChatNode:return"Chat Node";case t.DeviceRole.Repeater:return"Repeater";case t.DeviceRole.RoomServer:return"Room Server";case t.DeviceRole.Sensor:return"Sensor";default:return`Unknown (${e})`}}function r(e){switch(e){case t.RequestType.GetStats:return"Get Stats";case t.RequestType.Keepalive:return"Keepalive (deprecated)";case t.RequestType.GetTelemetryData:return"Get Telemetry Data";case t.RequestType.GetMinMaxAvgData:return"Get Min/Max/Avg Data";case t.RequestType.GetAccessList:return"Get Access List";default:return`Unknown (${e})`}}function a(e){switch(e){case t.ControlSubType.NodeDiscoverReq:return"Node Discover Request";case t.ControlSubType.NodeDiscoverResp:return"Node Discover Response";default:return`Unknown (0x${e.toString(16)})`}}return ke}var Ue={},Ge={},Pt;function xt(){if(Pt)return Ge;Pt=1,Object.defineProperty(Ge,"__esModule",{value:!0}),Ge.ChannelCrypto=void 0;const t=tr(),o=oe();class c{static decryptGroupTextMessage(n,r,a){try{const e=(0,o.hexToBytes)(a),A=(0,o.hexToBytes)(r)Line truncated
import{o as tr,p as yt,q as lr,u as wt,v as nt,w as rr,x as ar,y as hr,r as H,_ as fr,t as dt,z as gr,k as Ct,j as M,l as mr}from"./index-Fnq3QmNw.js";var Se={},Fe={},ie={},St;function ve(){if(St)return ie;St=1,Object.defineProperty(ie,"__esModule",{value:!0}),ie.RequestType=ie.AdvertFlags=ie.DeviceRole=ie.PayloadVersion=ie.ControlSubType=ie.PayloadType=ie.RouteType=void 0;var t;(function(e){e[e.TransportFlood=0]="TransportFlood",e[e.Flood=1]="Flood",e[e.Direct=2]="Direct",e[e.TransportDirect=3]="TransportDirect"})(t||(ie.RouteType=t={}));var o;(function(e){e[e.Request=0]="Request",e[e.Response=1]="Response",e[e.TextMessage=2]="TextMessage",e[e.Ack=3]="Ack",e[e.Advert=4]="Advert",e[e.GroupText=5]="GroupText",e[e.GroupData=6]="GroupData",e[e.AnonRequest=7]="AnonRequest",e[e.Path=8]="Path",e[e.Trace=9]="Trace",e[e.Multipart=10]="Multipart",e[e.Control=11]="Control",e[e.RawCustom=15]="RawCustom"})(o||(ie.PayloadType=o={}));var c;(function(e){e[e.NodeDiscoverReq=128]="NodeDiscoverReq",e[e.NodeDiscoverResp=144]="NodeDiscoverResp"})(c||(ie.ControlSubType=c={}));var l;(function(e){e[e.Version1=0]="Version1",e[e.Version2=1]="Version2",e[e.Version3=2]="Version3",e[e.Version4=3]="Version4"})(l||(ie.PayloadVersion=l={}));var n;(function(e){e[e.Unknown=0]="Unknown",e[e.ChatNode=1]="ChatNode",e[e.Repeater=2]="Repeater",e[e.RoomServer=3]="RoomServer",e[e.Sensor=4]="Sensor"})(n||(ie.DeviceRole=n={}));var r;(function(e){e[e.HasLocation=16]="HasLocation",e[e.HasFeature1=32]="HasFeature1",e[e.HasFeature2=64]="HasFeature2",e[e.HasName=128]="HasName"})(r||(ie.AdvertFlags=r={}));var a;return(function(e){e[e.GetStats=1]="GetStats",e[e.Keepalive=2]="Keepalive",e[e.GetTelemetryData=3]="GetTelemetryData",e[e.GetMinMaxAvgData=4]="GetMinMaxAvgData",e[e.GetAccessList=5]="GetAccessList"})(a||(ie.RequestType=a={})),ie}var Ie={},kt;function oe(){if(kt)return Ie;kt=1,Object.defineProperty(Ie,"__esModule",{value:!0}),Ie.byteToHex=t,Ie.bytesToHex=o,Ie.numberToHex=c,Ie.hexToBytes=l;function t(n){return n.toString(16).padStart(2,"0").toUpperCase()}function o(n){return Array.from(n).map(t).join("")}function c(n,r=8){return(n>>>0).toString(16).padStart(r,"0").toUpperCase()}function l(n){const r=n.replace(/\s/g,"").toUpperCase();if(!/^[0-9A-F]*$/.test(r))throw new Error("Invalid hex string: invalid characters at position 0");if(r.length%2!==0)throw new Error("Invalid hex string: odd length");const a=new Uint8Array(r.length/2);for(let e=0;e<r.length;e+=2)a[e/2]=parseInt(r.substr(e,2),16);return a}return Ie}var ke={},Tt;function $e(){if(Tt)return ke;Tt=1,Object.defineProperty(ke,"__esModule",{value:!0}),ke.getRouteTypeName=o,ke.getPayloadTypeName=c,ke.getPayloadVersionName=l,ke.getDeviceRoleName=n,ke.getRequestTypeName=r,ke.getControlSubTypeName=a;const t=ve();function o(e){switch(e){case t.RouteType.Flood:return"Flood";case t.RouteType.Direct:return"Direct";case t.RouteType.TransportFlood:return"TransportFlood";case t.RouteType.TransportDirect:return"TransportDirect";default:return`Unknown (${e})`}}function c(e){switch(e){case t.PayloadType.RawCustom:return"RawCustom";case t.PayloadType.Trace:return"Trace";case t.PayloadType.Advert:return"Advert";case t.PayloadType.GroupText:return"GroupText";case t.PayloadType.GroupData:return"GroupData";case t.PayloadType.Request:return"Request";case t.PayloadType.Response:return"Response";case t.PayloadType.TextMessage:return"TextMessage";case t.PayloadType.AnonRequest:return"AnonRequest";case t.PayloadType.Ack:return"Ack";case t.PayloadType.Path:return"Path";case t.PayloadType.Multipart:return"Multipart";case t.PayloadType.Control:return"Control";default:return`Unknown (0x${e.toString(16)})`}}function l(e){switch(e){case t.PayloadVersion.Version1:return"Version 1";case t.PayloadVersion.Version2:return"Version 2";case t.PayloadVersion.Version3:return"Version 3";case t.PayloadVersion.Version4:return"Version 4";default:return`Unknown (${e})`}}function n(e){switch(e){case t.DeviceRole.Unknown:return"Unknown";case t.DeviceRole.ChatNode:return"Chat Node";case t.DeviceRole.Repeater:return"Repeater";case t.DeviceRole.RoomServer:return"Room Server";case t.DeviceRole.Sensor:return"Sensor";default:return`Unknown (${e})`}}function r(e){switch(e){case t.RequestType.GetStats:return"Get Stats";case t.RequestType.Keepalive:return"Keepalive (deprecated)";case t.RequestType.GetTelemetryData:return"Get Telemetry Data";case t.RequestType.GetMinMaxAvgData:return"Get Min/Max/Avg Data";case t.RequestType.GetAccessList:return"Get Access List";default:return`Unknown (${e})`}}function a(e){switch(e){case t.ControlSubType.NodeDiscoverReq:return"Node Discover Request";case t.ControlSubType.NodeDiscoverResp:return"Node Discover Response";default:return`Unknown (0x${e.toString(16)})`}}return ke}var Ue={},Ge={},Pt;function xt(){if(Pt)return Ge;Pt=1,Object.defineProperty(Ge,"__esModule",{value:!0}),Ge.ChannelCrypto=void 0;const t=tr(),o=oe();class c{static decryptGroupTextMessage(n,r,a){try{const e=(0,o.hexToBytes)(a),A=(0,o.hexToBytes)(r)Line truncated
• Timestamp (4 bytes) - send time as unix timestamp
• Request Type (1 byte) - type of request (GetStats, GetTelemetryData, etc.)
• Request Data (remaining bytes) - additional request-specific data`,startByte:e+A,endByte:e+n.length-1,value:f});const y={type:t.PayloadType.Request,version:t.PayloadVersion.Version1,isValid:!0,timestamp:0,requestType:t.RequestType.GetStats,requestData:"",destinationHash:s,sourceHash:i,cipherMac:u,ciphertext:f};return r!=null&&r.includeSegments&&(y.segments=a),y}catch(a){return{type:t.PayloadType.Request,version:t.PayloadVersion.Version1,isValid:!1,errors:[a instanceof Error?a.message:"Failed to decode request payload"],timestamp:0,requestType:t.RequestType.GetStats,requestData:"",destinationHash:"",sourceHash:"",cipherMac:"",ciphertext:""}}}}return Le.RequestPayloadDecoder=c,Le}var je={},Ft;function Br(){if(Ft)return je;Ft=1,Object.defineProperty(je,"__esModule",{value:!0}),je.ResponsePayloadDecoder=void 0;const t=ve(),o=oe();class c{static decode(n,r){try{if(n.length<4){const b={type:t.PayloadType.Response,version:t.PayloadVersion.Version1,isValid:!1,errors:["Response payload too short (minimum 4 bytes: dest + source + MAC)"],destinationHash:"",sourceHash:"",cipherMac:"",ciphertext:"",ciphertextLength:0};return r!=null&&r.includeSegments&&(b.segments=[{name:"Invalid Response Data",description:"Response payload too short (minimum 4 bytes required)",startByte:r.segmentOffset||0,endByte:(r.segmentOffset||0)+n.length-1,value:(0,o.bytesToHex)(n)}]),b}const a=[],e=(r==null?void 0:r.segmentOffset)||0;let A=0;const s=(0,o.byteToHex)(n[A]);r!=null&&r.includeSegments&&a.push({name:"Destination Hash",description:"First byte of destination node public key",startByte:e+A,endByte:e+A,value:s}),A+=1;const i=(0,o.byteToHex)(n[A]);r!=null&&r.includeSegments&&a.push({name:"Source Hash",description:"First byte of source node public key",startByte:e+A,endByte:e+A,value:i}),A+=1;const u=(0,o.bytesToHex)(n.subarray(A,A+2));r!=null&&r.includeSegments&&a.push({name:"Cipher MAC",description:"MAC for encrypted data in next field",startByte:e+A,endByte:e+A+1,value:u}),A+=2;const f=(0,o.bytesToHex)(n.subarray(A));r!=null&&r.includeSegments&&n.length>A&&a.push({name:"Ciphertext",description:"Encrypted response data (tag + content)",startByte:e+A,endByte:e+n.length-1,value:f});const y={type:t.PayloadType.Response,version:t.PayloadVersion.Version1,isValid:!0,destinationHash:s,sourceHash:i,cipherMac:u,ciphertext:f,ciphertextLength:n.length-4};return r!=null&&r.includeSegments&&(y.segments=a),y}catch(a){return{type:t.PayloadType.Response,version:t.PayloadVersion.Version1,isValid:!1,errors:[a instanceof Error?a.message:"Failed to decode response payload"],destinationHash:"",sourceHash:"",cipherMac:"",ciphertext:"",ciphertextLength:0}}}}return je.ResponsePayloadDecoder=c,je}var We={},Ut;function _r(){if(Ut)return We;Ut=1,Object.defineProperty(We,"__esModule",{value:!0}),We.AnonRequestPayloadDecoder=void 0;const t=ve(),o=oe();class c{static decode(n,r){try{if(n.length<35){const b={type:t.PayloadType.AnonRequest,version:t.PayloadVersion.Version1,isValid:!1,errors:["AnonRequest payload too short (minimum 35 bytes: dest + public key + MAC)"],destinationHash:"",senderPublicKey:"",cipherMac:"",ciphertext:"",ciphertextLength:0};return r!=null&&r.includeSegments&&(b.segments=[{name:"Invalid AnonRequest Data",description:"AnonRequest payload too short (minimum 35 bytes required: 1 for dest hash + 32 for public key + 2 for MAC)",startByte:r.segmentOffset||0,endByte:(r.segmentOffset||0)+n.length-1,value:(0,o.bytesToHex)(n)}]),b}const a=[],e=(r==null?void 0:r.segmentOffset)||0;let A=0;const s=(0,o.byteToHex)(n[0]);r!=null&&r.includeSegments&&a.push({name:"Destination Hash",description:`First byte of destination node public key: 0x${s}`,startByte:e+A,endByte:e+A,value:s}),A+=1;const i=(0,o.bytesToHex)(n.subarray(1,33));r!=null&&r.includeSegments&&a.push({name:"Sender Public Key",description:"Ed25519 public key of the sender (32 bytes)",startByte:e+A,endByte:e+A+31,value:i}),A+=32;const u=(0,o.bytesToHex)(n.subarray(33,35));r!=null&&r.includeSegments&&a.push({name:"Cipher MAC",description:"MAC for encrypted data verification (2 bytes)",startByte:e+A,endByte:e+A+1,value:u}),A+=2;const f=(0,o.bytesToHex)(n.subarray(35));r!=null&&r.includeSegments&&n.length>35&&a.push({name:"Ciphertext",description:`Encrypted message data (${n.length-35} bytes). Contains encrypted plaintext with this structure:
@@ -709,4 +709,4 @@ fn main(@builtin(global_invocation_id) global_id: vec3<u32>) {
`),this.noSleepTimer=window.setInterval(()=>{document.hidden||(window.location.href=window.location.href.split("#")[0],window.setTimeout(window.stop,0))},15e3),this.enabled=!0,Promise.resolve()):this.noSleepVideo.play().then(e=>(this.enabled=!0,e)).catch(e=>{throw this.enabled=!1,e})}disable(){l()?(this._wakeLock&&this._wakeLock.release(),this._wakeLock=null):c()?this.noSleepTimer&&(console.warn(`
NoSleep now disabled for older iOS devices.
`),window.clearInterval(this.noSleepTimer),this.noSleepTimer=null):this.noSleepVideo.pause(),this.enabled=!1}}return mt=n,mt}var Kr=Zr();const Xr=nt(Kr);function Jr({packets:t,channels:o,onChannelCreate:c,onRunningChange:l,visible:n=!1}){const[r,a]=H.useState(!1),[e,A]=H.useState(6),[s,i]=H.useState(!1),[u,f]=H.useState(!0),[y,b]=H.useState(!1),[S,h]=H.useState(!1),[d,x]=H.useState(null),[g,w]=H.useState(new Map),[m,E]=H.useState([]),[T,C]=H.useState(!1),[I,F]=H.useState(null),[ce,D]=H.useState(null),[$,J]=H.useState(0),ae=H.useRef(null),le=H.useRef(null),Q=H.useRef(!1),he=H.useRef(!1),L=H.useRef(!1),Z=H.useRef(new Map),ye=H.useRef(!1),Be=H.useRef(6),Te=H.useRef(!0),v=H.useRef(!1),ee=H.useRef(!1),ge=H.useRef(new Set),R=H.useRef(new Set),P=H.useRef(new Set);H.useEffect(()=>{const _=new jr;ae.current=_,F(_.isGpuAvailable());const V=new Xr;return le.current=V,()=>{_.destroy(),ae.current=null,V.disable(),le.current=null}},[]),H.useEffect(()=>{!n||T||fr(async()=>{const{ENGLISH_WORDLIST:_}=await import("./wordlist-BtmChKSf.js");return{ENGLISH_WORDLIST:_}},[]).then(({ENGLISH_WORDLIST:_})=>{ae.current&&(ae.current.setWordlist(_),C(!0))}).catch(_=>{console.error("Failed to load wordlist:",_),dt.error("Failed to load wordlist",{description:"Cracking will not be available"})})},[n,T]),H.useEffect(()=>{const _=()=>{Ct.getUndecryptedPacketCount().then(({count:U})=>D(U)).catch(()=>D(null))};_();const V=setInterval(_,36e5);return()=>clearInterval(V)},[]);const O=H.useMemo(()=>new Set(o.map(_=>_.key.toUpperCase())),[o]);H.useEffect(()=>{P.current=O},[O]);const G=t.filter(_=>_.payload_type==="GROUP_TEXT"&&!_.decrypted);H.useEffect(()=>{let _=0;w(V=>{const U=new Map(V);let me=!1;for(const de of G)if(!U.has(de.id)){const se=gr(de.data);if(se&&R.current.has(se)){_++;continue}se&&R.current.add(se),U.set(de.id,{packet:de,attempts:0,lastAttemptLength:0,status:"pending"}),me=!0}return me?(Z.current=U,U):V}),_>0&&J(V=>V+_)},[G.length]),H.useEffect(()=>{Z.current=g},[g]),H.useEffect(()=>{ye.current=s},[s]),H.useEffect(()=>{Be.current=e},[e]),H.useEffect(()=>{Te.current=u},[u]),H.useEffect(()=>{v.current=y},[y]),H.useEffect(()=>{ee.current=S},[S]),H.useEffect(()=>{ge.current=new Set(G.map(_=>_.id))},[G]),H.useEffect(()=>{l==null||l(r)},[r,l]);const re=Array.from(g.values()).filter(_=>_.status==="pending").length,X=Array.from(g.values()).filter(_=>_.status==="cracked").length,pe=Array.from(g.values()).filter(_=>_.status==="failed").length,ue=H.useCallback(async()=>{if(L.current||!ae.current||!Q.current)return;const _=Z.current;let V=null,U=null;for(const[Y,j]of _.entries())if(j.status==="pending"){V=j,U=Y;break}if(!V&&ye.current){const Y=Array.from(_.entries()).filter(([,j])=>j.status==="failed"&&j.lastAttemptLength<10);Y.length>0&&(Y.sort((j,ne)=>j[1].lastAttemptLength-ne[1].lastAttemptLength),[U,V]=Y[0])}if(!V||U===null){Q.current&&setTimeout(()=>ue(),1e3);return}if(!ge.current.has(U)){w(Y=>{const j=new Map(Y);return j.delete(U),j}),Q.current&&setTimeout(()=>ue(),10);return}L.current=!0;const me=Be.current,de=V.lastAttemptLength>0,se=de?V.lastAttemptLength+1:me;try{const Y=await ae.current.crack(V.packet.data,{maxLength:se,useSenderFilter:!0,useTimestampFilter:!0,useUtf8Filter:!0,useTwoWordCombinations:ee.current,...v.current&&{gpuDispatchMs:1e4},...de&&{useDictionary:!1,useTwoWordCombinations:!1,startingLength:se}},j=>{x(j)});if(he.current){he.current=!1,L.current=!1,x(null);return}if(Y.found&&Y.roomName&&Y.key){w(q=>{const we=new Map(q),Ce=we.get(U);return Ce&&we.set(U,{...Ce,status:"cracked",attempts:Ce.attempts+1,lastAttemptLength:se}),we});const j={roomName:Y.roomName,key:Y.key,packetId:U,message:Y.decryptedMessage||"",crackedAt:Date.now()};E(q=>[...q,j]);const ne=Y.key.toUpperCase();if(!P.current.has(ne))try{const q="#"+Y.roomName;await c(q,Y.key),Te.current&&await Ct.decryptHistoricalPackets({key_type:"channel",channel_name:q})}catch(q){console.error("Failed to create channel or decrypt historical:",q),dt.error("Failed to save cracked channel",{description:q instanceof Error?q.message:"Channel discovered but could not be saved"})}}else w(j=>{const ne=new Map(j),q=ne.get(U);return q&&ne.set(U,{...q,status:"failed",attempts:q.attempts+1,lastAttemptLength:se}),ne})}catch(Y){console.error("Cracking error:",Y),w(j=>{const ne=new Map(j),q=ne.get(U);return q&&ne.set(U,{...q,status:"failed",attempts:q.attempts+1,lastAttemptLength:se}),ne})}L.current=!1,x(null),Q.current&&setTimeout(()=>ue(),100)},[c]),Ae=()=>{var _;if(!I){dt.error("WebGPU not available",{description:"Cracking requires Chrome 113+ or Edge 113+ with WebGPU support."});return}a(!0),Q.current=!0,he.current=!1,(_=le.current)==null||_.enable(),ue()},fe=()=>{var _,V;a(!1),Q.current=!1,he.current=!0,(_=ae.current)==null||_.abort(),(V=le.current)==null||V.disable()};return M.jsxs("div",{className:"flex flex-col h-full p-3 gap-3 bg-background border-t border-border overflow-auto",children:[M.jsxs("div",{className:"flex items-center gap-3 flex-wrap",children:[M.jsxs("d Line truncated
//# sourceMappingURL=CrackerPanel-_94u2vQ6.js.map
//# sourceMappingURL=CrackerPanel-D45MeFE8.js.map
@@ -1 +1 @@
{"version":3,"mappings":"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 truncated
{"version":3,"mappings":"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 truncated
@@ -1,2 +1,2 @@
import{r as d,D as j,j as e,U as y,m as N}from"./index-pnVde5Cl.js";import{M as w,T as _}from"./leaflet-By4Srz79.js";import{C as k,P as C}from"./Popup-CZeo1EzJ.js";import{u as M}from"./hooks-BCaVWsWl.js";const i={recent:"#06b6d4",today:"#2563eb",stale:"#f59e0b",old:"#64748b"},R="#0f172a",p="#f8fafc";function E(a){if(a==null)return i.old;const r=Date.now()/1e3-a,n=3600,l=86400;return r<n?i.recent:r<l?i.today:r<3*l?i.stale:i.old}function v({contacts:a,focusedContact:t}){const r=M(),[n,l]=d.useState(!1);return d.useEffect(()=>{if(t&&t.lat!=null&&t.lon!=null){r.setView([t.lat,t.lon],12),l(!0);return}if(n)return;const c=()=>{if(a.length===0){r.setView([20,0],2),l(!0);return}if(a.length===1){r.setView([a[0].lat,a[0].lon],10),l(!0);return}const u=a.map(m=>[m.lat,m.lon]);r.fitBounds(u,{padding:[50,50],maxZoom:12}),l(!0)};"geolocation"in navigator?navigator.geolocation.getCurrentPosition(u=>{r.setView([u.coords.latitude,u.coords.longitude],8),l(!0)},()=>{c()},{timeout:5e3,maximumAge:3e5}):c()},[r,a,n,t]),null}function V({contacts:a,focusedKey:t}){const r=Date.now()/1e3-604800,n=d.useMemo(()=>a.filter(s=>j(s.lat,s.lon)&&(s.public_key===t||s.last_seen!=null&&s.last_seen>r)),[a,t,r]),l=d.useMemo(()=>t&&n.find(s=>s.public_key===t)||null,[t,n]),c=l!=null&&(l.last_seen==null||l.last_seen<=r),u=d.useRef({}),m=d.useCallback((s,o)=>{u.current[s]=o},[]);return d.useEffect(()=>{if(l&&u.current[l.public_key]){const s=setTimeout(()=>{var o;(o=u.current[l.public_key])==null||o.openPopup()},100);return()=>clearTimeout(s)}},[l]),e.jsxs("div",{className:"flex flex-col h-full",children:[e.jsxs("div",{className:"px-4 py-2 bg-muted/50 text-xs text-muted-foreground flex items-center justify-between",children:[e.jsxs("span",{children:["Showing ",n.length," contact",n.length!==1?"s":""," heard in the last 7 days",c?" plus the focused contact":""]}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx("span",{className:"w-3 h-3 rounded-full",style:{backgroundColor:i.recent},"aria-hidden":"true"})," ","<1h"]}),e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx("span",{className:"w-3 h-3 rounded-full",style:{backgroundColor:i.today},"aria-hidden":"true"})," ","<1d"]}),e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx("span",{className:"w-3 h-3 rounded-full",style:{backgroundColor:i.stale},"aria-hidden":"true"})," ","<3d"]}),e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx("span",{className:"w-3 h-3 rounded-full",style:{backgroundColor:i.old},"aria-hidden":"true"})," ","older"]}),e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx("span",{className:"w-3 h-3 rounded-full border-2",style:{borderColor:p,backgroundColor:i.today},"aria-hidden":"true"})," ","repeater"]})]})]}),e.jsx("div",{className:"flex-1 relative",style:{zIndex:0},role:"img","aria-label":"Map showing mesh node locations",children:e.jsxs(w,{center:[20,0],zoom:2,className:"h-full w-full",style:{background:"#1a1a2e"},children:[e.jsx(_,{attribution:'© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>',url:"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"}),e.jsx(v,{contacts:n,focusedContact:l}),n.map(s=>{const o=s.type===y,x=E(s.last_seen),f=s.name||s.public_key.slice(0,12),h=s.last_seen!=null?N(s.last_seen):"Never heard by this server",g=o?10:7;return e.jsx(d.Fragment,{children:e.jsx(k,{ref:b=>m(s.public_key,b),center:[s.lat,s.lon],radius:g,pathOptions:{color:o?p:R,fillColor:x,fillOpacity:.9,weight:o?3:2},children:e.jsx(C,{children:e.jsxs("div",{className:"text-sm",children:[e.jsxs("div",{className:"font-medium flex items-center gap-1",children:[o&&e.jsx("span",{title:"Repeater","aria-hidden":"true",children:"🛜"}),f]}),e.jsxs("div",{className:"text-xs text-gray-500 mt-1",children:["Last heard: ",h]}),e.jsxs("div",{className:"text-xs text-gray-400 mt-1 font-mono",children:[s.lat.toFixed(5),", ",s.lon.toFixed(5)]})]})})},s.public_key)},s.public_key)})]})})]})}export{V as MapView};
//# sourceMappingURL=MapView-Bv8f-A5r.js.map
import{r as d,D as j,j as e,U as y,m as N}from"./index-Fnq3QmNw.js";import{M as w,T as _}from"./leaflet-ENrCR1B4.js";import{C as k,P as C}from"./Popup-C-Q9ygBf.js";import{u as M}from"./hooks-LL30L9PN.js";const i={recent:"#06b6d4",today:"#2563eb",stale:"#f59e0b",old:"#64748b"},R="#0f172a",p="#f8fafc";function E(a){if(a==null)return i.old;const r=Date.now()/1e3-a,n=3600,l=86400;return r<n?i.recent:r<l?i.today:r<3*l?i.stale:i.old}function v({contacts:a,focusedContact:t}){const r=M(),[n,l]=d.useState(!1);return d.useEffect(()=>{if(t&&t.lat!=null&&t.lon!=null){r.setView([t.lat,t.lon],12),l(!0);return}if(n)return;const c=()=>{if(a.length===0){r.setView([20,0],2),l(!0);return}if(a.length===1){r.setView([a[0].lat,a[0].lon],10),l(!0);return}const u=a.map(m=>[m.lat,m.lon]);r.fitBounds(u,{padding:[50,50],maxZoom:12}),l(!0)};"geolocation"in navigator?navigator.geolocation.getCurrentPosition(u=>{r.setView([u.coords.latitude,u.coords.longitude],8),l(!0)},()=>{c()},{timeout:5e3,maximumAge:3e5}):c()},[r,a,n,t]),null}function V({contacts:a,focusedKey:t}){const r=Date.now()/1e3-604800,n=d.useMemo(()=>a.filter(s=>j(s.lat,s.lon)&&(s.public_key===t||s.last_seen!=null&&s.last_seen>r)),[a,t,r]),l=d.useMemo(()=>t&&n.find(s=>s.public_key===t)||null,[t,n]),c=l!=null&&(l.last_seen==null||l.last_seen<=r),u=d.useRef({}),m=d.useCallback((s,o)=>{u.current[s]=o},[]);return d.useEffect(()=>{if(l&&u.current[l.public_key]){const s=setTimeout(()=>{var o;(o=u.current[l.public_key])==null||o.openPopup()},100);return()=>clearTimeout(s)}},[l]),e.jsxs("div",{className:"flex flex-col h-full",children:[e.jsxs("div",{className:"px-4 py-2 bg-muted/50 text-xs text-muted-foreground flex items-center justify-between",children:[e.jsxs("span",{children:["Showing ",n.length," contact",n.length!==1?"s":""," heard in the last 7 days",c?" plus the focused contact":""]}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx("span",{className:"w-3 h-3 rounded-full",style:{backgroundColor:i.recent},"aria-hidden":"true"})," ","<1h"]}),e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx("span",{className:"w-3 h-3 rounded-full",style:{backgroundColor:i.today},"aria-hidden":"true"})," ","<1d"]}),e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx("span",{className:"w-3 h-3 rounded-full",style:{backgroundColor:i.stale},"aria-hidden":"true"})," ","<3d"]}),e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx("span",{className:"w-3 h-3 rounded-full",style:{backgroundColor:i.old},"aria-hidden":"true"})," ","older"]}),e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx("span",{className:"w-3 h-3 rounded-full border-2",style:{borderColor:p,backgroundColor:i.today},"aria-hidden":"true"})," ","repeater"]})]})]}),e.jsx("div",{className:"flex-1 relative",style:{zIndex:0},role:"img","aria-label":"Map showing mesh node locations",children:e.jsxs(w,{center:[20,0],zoom:2,className:"h-full w-full",style:{background:"#1a1a2e"},children:[e.jsx(_,{attribution:'© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>',url:"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"}),e.jsx(v,{contacts:n,focusedContact:l}),n.map(s=>{const o=s.type===y,x=E(s.last_seen),f=s.name||s.public_key.slice(0,12),h=s.last_seen!=null?N(s.last_seen):"Never heard by this server",g=o?10:7;return e.jsx(d.Fragment,{children:e.jsx(k,{ref:b=>m(s.public_key,b),center:[s.lat,s.lon],radius:g,pathOptions:{color:o?p:R,fillColor:x,fillOpacity:.9,weight:o?3:2},children:e.jsx(C,{children:e.jsxs("div",{className:"text-sm",children:[e.jsxs("div",{className:"font-medium flex items-center gap-1",children:[o&&e.jsx("span",{title:"Repeater","aria-hidden":"true",children:"🛜"}),f]}),e.jsxs("div",{className:"text-xs text-gray-500 mt-1",children:["Last heard: ",h]}),e.jsxs("div",{className:"text-xs text-gray-400 mt-1 font-mono",children:[s.lat.toFixed(5),", ",s.lon.toFixed(5)]})]})})},s.public_key)},s.public_key)})]})})]})}export{V as MapView};
//# sourceMappingURL=MapView-D0gphXtL.js.map
@@ -1 +1 @@
{"version":3,"file":"MapView-Bv8f-A5r.js","sources":["../../src/components/MapView.tsx"],"sourcesContent":["import { Fragment, useEffect, useState, useMemo, useRef, useCallback } from 'react';\nimport { MapContainer, TileLayer, CircleMarker, Popup, useMap } from 'react-leaflet';\nimport type { LatLngBoundsExpression, CircleMarker as LeafletCircleMarker } from 'leaflet';\nimport 'leaflet/dist/leaflet.css';\nimport type { Contact } from '../types';\nimport { formatTime } from '../utils/messageParser';\nimport { isValidLocation } from '../utils/pathUtils';\nimport { CONTACT_TYPE_REPEATER } from '../types';\n\ninterface MapViewProps {\n contacts: Contact[];\n /** Public key of contact to focus on and open popup */\n focusedKey?: string | null;\n}\n\nconst MAP_RECENCY_COLORS = {\n recent: '#06b6d4',\n today: '#2563eb',\n stale: '#f59e0b',\n old: '#64748b',\n} as const;\nconst MAP_MARKER_STROKE = '#0f172a';\nconst MAP_REPEATER_RING = '#f8fafc';\n\n// Calculate marker color based on how recently the contact was heard\nfunction getMarkerColor(lastSeen: number | null | undefined): string {\n if (lastSeen == null) return MAP_RECENCY_COLORS.old;\n const now = Date.now() / 1000;\n const age = now - lastSeen;\n const hour = 3600;\n const day = 86400;\n\n if (age < hour) return MAP_RECENCY_COLORS.recent;\n if (age < day) return MAP_RECENCY_COLORS.today;\n if (age < 3 * day) return MAP_RECENCY_COLORS.stale;\n return MAP_RECENCY_COLORS.old;\n}\n\n// Component to handle map bounds fitting\nfunction MapBoundsHandler({\n contacts,\n focusedContact,\n}: {\n contacts: Contact[];\n focusedContact: Contact | null;\n}) {\n const map = useMap();\n const [hasInitialized, setHasInitialized] = useState(false);\n\n useEffect(() => {\n // If we have a focused contact, center on it immediately (even if already initialized)\n if (focusedContact && focusedContact.lat != null && focusedContact.lon != null) {\n map.setView([focusedContact.lat, focusedContact.lon], 12);\n setHasInitialized(true);\n return;\n }\n\n if (hasInitialized) return;\n\n const fitToContacts = () => {\n if (contacts.length === 0) {\n // No contacts with location - show world view\n map.setView([20, 0], 2);\n setHasInitialized(true);\n return;\n }\n\n if (contacts.length === 1) {\n // Single contact - center on it\n map.setView([contacts[0].lat!, contacts[0].lon!], 10);\n setHasInitialized(true);\n return;\n }\n\n // Multiple contacts - fit bounds\n const bounds: LatLngBoundsExpression = contacts.map(\n (c) => [c.lat!, c.lon!] as [number, number]\n );\n map.fitBounds(bounds, { padding: [50, 50], maxZoom: 12 });\n setHasInitialized(true);\n };\n\n // Try geolocation first\n if ('geolocation' in navigator) {\n navigator.geolocation.getCurrentPosition(\n (position) => {\n // Success - center on user location with reasonable zoom\n map.setView([position.coords.latitude, position.coords.longitude], 8);\n setHasInitialized(true);\n },\n () => {\n // Geolocation denied/failed - fit to contacts\n fitToContacts();\n },\n { timeout: 5000, maximumAge: 300000 }\n );\n } else {\n // No geolocation support - fit to contacts\n fitToContacts();\n }\n }, [map, contacts, hasInitialized, focusedContact]);\n\n return null;\n}\n\nexport function MapView({ contacts, focusedKey }: MapViewProps) {\n const sevenDaysAgo = Date.now() / 1000 - 7 * 24 * 60 * 60;\n\n // Filter to contacts with GPS coordinates, heard within the last 7 days.\n // Always include the focused contact so \"view on map\" links work for older nodes.\n const mappableContacts = useMemo(() => {\n return contacts.filter(\n (c) =>\n isValidLocation(c.lat, c.lon) &&\n (c.public_key === focusedKey || (c.last_seen != null && c.last_seen > sevenDaysAgo))\n );\n }, [contacts, focusedKey, sevenDaysAgo]);\n\n // Find the focused contact by key\n const focusedContact = useMemo(() => {\n if (!focusedKey) return null;\n return mappableContacts.find((c) => c.public_key === focusedKey) || null;\n }, [focusedKey, mappableContacts]);\n\n const includesFocusedOutsideWindow =\n focusedContact != null &&\n (focusedContact.last_seen == null || focusedContact.last_seen <= sevenDaysAgo);\n\n // Track marker refs to open popup programmatically\n const markerRefs = useRef<Record<string, LeafletCircleMarker | null>>({});\n\n // Store ref for a marker\n const setMarkerRef = useCallback((key: string, ref: LeafletCircleMarker | null) => {\n markerRefs.current[key] = ref;\n }, []);\n\n // Open popup for focused contact after map is ready\n useEffect(() => {\n if (focusedContact && markerRefs.current[focusedContact.public_key]) {\n // Small delay to ensure map has finished rendering\n const timer = setTimeout(() =>Line truncated
{"version":3,"file":"MapView-D0gphXtL.js","sources":["../../src/components/MapView.tsx"],"sourcesContent":["import { Fragment, useEffect, useState, useMemo, useRef, useCallback } from 'react';\nimport { MapContainer, TileLayer, CircleMarker, Popup, useMap } from 'react-leaflet';\nimport type { LatLngBoundsExpression, CircleMarker as LeafletCircleMarker } from 'leaflet';\nimport 'leaflet/dist/leaflet.css';\nimport type { Contact } from '../types';\nimport { formatTime } from '../utils/messageParser';\nimport { isValidLocation } from '../utils/pathUtils';\nimport { CONTACT_TYPE_REPEATER } from '../types';\n\ninterface MapViewProps {\n contacts: Contact[];\n /** Public key of contact to focus on and open popup */\n focusedKey?: string | null;\n}\n\nconst MAP_RECENCY_COLORS = {\n recent: '#06b6d4',\n today: '#2563eb',\n stale: '#f59e0b',\n old: '#64748b',\n} as const;\nconst MAP_MARKER_STROKE = '#0f172a';\nconst MAP_REPEATER_RING = '#f8fafc';\n\n// Calculate marker color based on how recently the contact was heard\nfunction getMarkerColor(lastSeen: number | null | undefined): string {\n if (lastSeen == null) return MAP_RECENCY_COLORS.old;\n const now = Date.now() / 1000;\n const age = now - lastSeen;\n const hour = 3600;\n const day = 86400;\n\n if (age < hour) return MAP_RECENCY_COLORS.recent;\n if (age < day) return MAP_RECENCY_COLORS.today;\n if (age < 3 * day) return MAP_RECENCY_COLORS.stale;\n return MAP_RECENCY_COLORS.old;\n}\n\n// Component to handle map bounds fitting\nfunction MapBoundsHandler({\n contacts,\n focusedContact,\n}: {\n contacts: Contact[];\n focusedContact: Contact | null;\n}) {\n const map = useMap();\n const [hasInitialized, setHasInitialized] = useState(false);\n\n useEffect(() => {\n // If we have a focused contact, center on it immediately (even if already initialized)\n if (focusedContact && focusedContact.lat != null && focusedContact.lon != null) {\n map.setView([focusedContact.lat, focusedContact.lon], 12);\n setHasInitialized(true);\n return;\n }\n\n if (hasInitialized) return;\n\n const fitToContacts = () => {\n if (contacts.length === 0) {\n // No contacts with location - show world view\n map.setView([20, 0], 2);\n setHasInitialized(true);\n return;\n }\n\n if (contacts.length === 1) {\n // Single contact - center on it\n map.setView([contacts[0].lat!, contacts[0].lon!], 10);\n setHasInitialized(true);\n return;\n }\n\n // Multiple contacts - fit bounds\n const bounds: LatLngBoundsExpression = contacts.map(\n (c) => [c.lat!, c.lon!] as [number, number]\n );\n map.fitBounds(bounds, { padding: [50, 50], maxZoom: 12 });\n setHasInitialized(true);\n };\n\n // Try geolocation first\n if ('geolocation' in navigator) {\n navigator.geolocation.getCurrentPosition(\n (position) => {\n // Success - center on user location with reasonable zoom\n map.setView([position.coords.latitude, position.coords.longitude], 8);\n setHasInitialized(true);\n },\n () => {\n // Geolocation denied/failed - fit to contacts\n fitToContacts();\n },\n { timeout: 5000, maximumAge: 300000 }\n );\n } else {\n // No geolocation support - fit to contacts\n fitToContacts();\n }\n }, [map, contacts, hasInitialized, focusedContact]);\n\n return null;\n}\n\nexport function MapView({ contacts, focusedKey }: MapViewProps) {\n const sevenDaysAgo = Date.now() / 1000 - 7 * 24 * 60 * 60;\n\n // Filter to contacts with GPS coordinates, heard within the last 7 days.\n // Always include the focused contact so \"view on map\" links work for older nodes.\n const mappableContacts = useMemo(() => {\n return contacts.filter(\n (c) =>\n isValidLocation(c.lat, c.lon) &&\n (c.public_key === focusedKey || (c.last_seen != null && c.last_seen > sevenDaysAgo))\n );\n }, [contacts, focusedKey, sevenDaysAgo]);\n\n // Find the focused contact by key\n const focusedContact = useMemo(() => {\n if (!focusedKey) return null;\n return mappableContacts.find((c) => c.public_key === focusedKey) || null;\n }, [focusedKey, mappableContacts]);\n\n const includesFocusedOutsideWindow =\n focusedContact != null &&\n (focusedContact.last_seen == null || focusedContact.last_seen <= sevenDaysAgo);\n\n // Track marker refs to open popup programmatically\n const markerRefs = useRef<Record<string, LeafletCircleMarker | null>>({});\n\n // Store ref for a marker\n const setMarkerRef = useCallback((key: string, ref: LeafletCircleMarker | null) => {\n markerRefs.current[key] = ref;\n }, []);\n\n // Open popup for focused contact after map is ready\n useEffect(() => {\n if (focusedContact && markerRefs.current[focusedContact.public_key]) {\n // Small delay to ensure map has finished rendering\n const timer = setTimeout(() =>Line truncated
@@ -1,2 +1,2 @@
import{j as l}from"./index-pnVde5Cl.js";import{d as m,l as u,a as f,e as d,M as x,T as y}from"./leaflet-By4Srz79.js";import{C as p,P as c}from"./Popup-CZeo1EzJ.js";const g=m(function({positions:n,...t},o){const s=new u.Polyline(n,t);return f(s,d(o,{overlayContainer:s}))},function(n,t,o){t.positions!==o.positions&&n.setLatLngs(t.positions)});function C({neighbors:i,radioLat:n,radioLon:t,radioName:o}){const s=i.filter(e=>e.lat!=null&&e.lon!=null),r=n!=null&&t!=null&&!(n===0&&t===0);if(s.length===0&&!r)return null;const h=r?[n,t]:[s[0].lat,s[0].lon];return l.jsx("div",{className:"min-h-48 flex-1 rounded border border-border overflow-hidden",role:"img","aria-label":"Map showing repeater neighbor locations",children:l.jsxs(x,{center:h,zoom:10,className:"h-full w-full",style:{background:"#1a1a2e"},children:[l.jsx(y,{attribution:'© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>',url:"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"}),r&&s.map((e,a)=>l.jsx(g,{positions:[[n,t],[e.lat,e.lon]],pathOptions:{color:"#3b82f6",weight:1.5,opacity:.5,dashArray:"6 4"}},`line-${a}`)),r&&l.jsx(p,{center:[n,t],radius:8,pathOptions:{color:"#1d4ed8",fillColor:"#3b82f6",fillOpacity:1,weight:2},children:l.jsx(c,{children:l.jsx("span",{className:"text-sm font-medium",children:o||"Our Radio"})})}),s.map((e,a)=>l.jsx(p,{center:[e.lat,e.lon],radius:6,pathOptions:{color:"#000",fillColor:e.snr>=6?"#22c55e":e.snr>=0?"#eab308":"#ef4444",fillOpacity:.8,weight:1},children:l.jsx(c,{children:l.jsx("span",{className:"text-sm",children:e.name||e.pubkey_prefix})})},a))]})})}export{C as NeighborsMiniMap};
//# sourceMappingURL=NeighborsMiniMap-DOCpkCDv.js.map
import{j as l}from"./index-Fnq3QmNw.js";import{d as m,l as u,a as f,e as d,M as x,T as y}from"./leaflet-ENrCR1B4.js";import{C as p,P as c}from"./Popup-C-Q9ygBf.js";const g=m(function({positions:n,...t},o){const s=new u.Polyline(n,t);return f(s,d(o,{overlayContainer:s}))},function(n,t,o){t.positions!==o.positions&&n.setLatLngs(t.positions)});function C({neighbors:i,radioLat:n,radioLon:t,radioName:o}){const s=i.filter(e=>e.lat!=null&&e.lon!=null),r=n!=null&&t!=null&&!(n===0&&t===0);if(s.length===0&&!r)return null;const h=r?[n,t]:[s[0].lat,s[0].lon];return l.jsx("div",{className:"min-h-48 flex-1 rounded border border-border overflow-hidden",role:"img","aria-label":"Map showing repeater neighbor locations",children:l.jsxs(x,{center:h,zoom:10,className:"h-full w-full",style:{background:"#1a1a2e"},children:[l.jsx(y,{attribution:'© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>',url:"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"}),r&&s.map((e,a)=>l.jsx(g,{positions:[[n,t],[e.lat,e.lon]],pathOptions:{color:"#3b82f6",weight:1.5,opacity:.5,dashArray:"6 4"}},`line-${a}`)),r&&l.jsx(p,{center:[n,t],radius:8,pathOptions:{color:"#1d4ed8",fillColor:"#3b82f6",fillOpacity:1,weight:2},children:l.jsx(c,{children:l.jsx("span",{className:"text-sm font-medium",children:o||"Our Radio"})})}),s.map((e,a)=>l.jsx(p,{center:[e.lat,e.lon],radius:6,pathOptions:{color:"#000",fillColor:e.snr>=6?"#22c55e":e.snr>=0?"#eab308":"#ef4444",fillOpacity:.8,weight:1},children:l.jsx(c,{children:l.jsx("span",{className:"text-sm",children:e.name||e.pubkey_prefix})})},a))]})})}export{C as NeighborsMiniMap};
//# sourceMappingURL=NeighborsMiniMap-zqanKONo.js.map
@@ -1 +1 @@
{"version":3,"file":"NeighborsMiniMap-DOCpkCDv.js","sources":["../../node_modules/react-leaflet/lib/Polyline.js","../../src/components/NeighborsMiniMap.tsx"],"sourcesContent":["import { createElementObject, createPathComponent, extendContext } from '@react-leaflet/core';\nimport { Polyline as LeafletPolyline } from 'leaflet';\nexport const Polyline = createPathComponent(function createPolyline({ positions , ...options }, ctx) {\n const polyline = new LeafletPolyline(positions, options);\n return createElementObject(polyline, extendContext(ctx, {\n overlayContainer: polyline\n }));\n}, function updatePolyline(layer, props, prevProps) {\n if (props.positions !== prevProps.positions) {\n layer.setLatLngs(props.positions);\n }\n});\n","import { MapContainer, TileLayer, CircleMarker, Popup, Polyline } from 'react-leaflet';\nimport 'leaflet/dist/leaflet.css';\n\ninterface Neighbor {\n lat: number | null;\n lon: number | null;\n name: string | null;\n pubkey_prefix: string;\n snr: number;\n}\n\ninterface Props {\n neighbors: Neighbor[];\n radioLat?: number | null;\n radioLon?: number | null;\n radioName?: string | null;\n}\n\nexport function NeighborsMiniMap({ neighbors, radioLat, radioLon, radioName }: Props) {\n const valid = neighbors.filter(\n (n): n is Neighbor & { lat: number; lon: number } => n.lat != null && n.lon != null\n );\n\n const hasRadio = radioLat != null && radioLon != null && !(radioLat === 0 && radioLon === 0);\n\n if (valid.length === 0 && !hasRadio) return null;\n\n // Center on radio if available, otherwise first neighbor\n const center: [number, number] = hasRadio ? [radioLat!, radioLon!] : [valid[0].lat, valid[0].lon];\n\n return (\n <div\n className=\"min-h-48 flex-1 rounded border border-border overflow-hidden\"\n role=\"img\"\n aria-label=\"Map showing repeater neighbor locations\"\n >\n <MapContainer\n center={center}\n zoom={10}\n className=\"h-full w-full\"\n style={{ background: '#1a1a2e' }}\n >\n <TileLayer\n attribution='&copy; <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a>'\n url=\"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png\"\n />\n {/* Dotted lines from radio to each neighbor */}\n {hasRadio &&\n valid.map((n, i) => (\n <Polyline\n key={`line-${i}`}\n positions={[\n [radioLat!, radioLon!],\n [n.lat, n.lon],\n ]}\n pathOptions={{\n color: '#3b82f6',\n weight: 1.5,\n opacity: 0.5,\n dashArray: '6 4',\n }}\n />\n ))}\n {/* Radio node (bright blue) */}\n {hasRadio && (\n <CircleMarker\n center={[radioLat!, radioLon!]}\n radius={8}\n pathOptions={{\n color: '#1d4ed8',\n fillColor: '#3b82f6',\n fillOpacity: 1,\n weight: 2,\n }}\n >\n <Popup>\n <span className=\"text-sm font-medium\">{radioName || 'Our Radio'}</span>\n </Popup>\n </CircleMarker>\n )}\n {/* Neighbor nodes (SNR-colored) */}\n {valid.map((n, i) => (\n <CircleMarker\n key={i}\n center={[n.lat, n.lon]}\n radius={6}\n pathOptions={{\n color: '#000',\n fillColor: n.snr >= 6 ? '#22c55e' : n.snr >= 0 ? '#eab308' : '#ef4444',\n fillOpacity: 0.8,\n weight: 1,\n }}\n >\n <Popup>\n <span className=\"text-sm\">{n.name || n.pubkey_prefix}</span>\n </Popup>\n </CircleMarker>\n ))}\n </MapContainer>\n </div>\n );\n}\n"],"names":["Polyline","createPathComponent","positions","options","ctx","polyline","LeafletPolyline","createElementObject","extendContext","layer","props","prevProps","NeighborsMiniMap","neighbors","radioLat","radioLon","radioName","valid","n","hasRadio","center","jsx","jsxs","MapContainer","TileLayer","i","CircleMarker","Popup"],"mappings":"oKAEO,MAAMA,EAAWC,EAAoB,SAAwB,CAAE,UAAAC,EAAY,GAAGC,CAAO,EAAIC,EAAK,CACjG,MAAMC,EAAW,IAAIC,WAAgBJ,EAAWC,CAAO,EACvD,OAAOI,EAAoBF,EAAUG,EAAcJ,EAAK,CACpD,iBAAkBC,CAC1B,CAAK,CAAC,CACN,EAAG,SAAwBI,EAAOC,EAAOC,EAAW,CAC5CD,EAAM,YAAcC,EAAU,WAC9BF,EAAM,WAAWC,EAAM,SAAS,CAExC,CAAC,ECOM,SAASE,EAAiB,CAAE,UAAAC,EAAW,SAAAC,EAAU,SAAAC,EAAU,UAAAC,GAAoB,CACpF,MAAMC,EAAQJ,EAAU,OACrBK,GAAoDA,EAAE,KAAO,MAAQA,EAAE,KAAO,IAAA,EAG3EC,EAAWL,GAAY,MAAQC,GAAY,MAAQ,EAAED,IAAa,GAAKC,IAAa,GAE1F,GAAIE,EAAM,SAAW,GAAK,CAACE,EAAU,OAAO,KAG5C,MAAMC,EAA2BD,EAAW,CAACL,EAAWC,CAAS,EAAI,CAACE,EAAM,CAAC,EAAE,IAAKA,EAAM,CAAC,EAAE,GAAG,EAEhG,OACEI,EAAAA,IAAC,MAAA,CACC,UAAU,+DACV,KAAK,MACL,aAAW,0CAEX,SAAAC,EAAAA,KAACC,EAAA,CACC,OAAAH,EACA,KAAM,GACN,UAAU,gBACV,MAAO,CAAE,WAAY,SAAA,EAErB,SALine truncated
{"version":3,"file":"NeighborsMiniMap-zqanKONo.js","sources":["../../node_modules/react-leaflet/lib/Polyline.js","../../src/components/NeighborsMiniMap.tsx"],"sourcesContent":["import { createElementObject, createPathComponent, extendContext } from '@react-leaflet/core';\nimport { Polyline as LeafletPolyline } from 'leaflet';\nexport const Polyline = createPathComponent(function createPolyline({ positions , ...options }, ctx) {\n const polyline = new LeafletPolyline(positions, options);\n return createElementObject(polyline, extendContext(ctx, {\n overlayContainer: polyline\n }));\n}, function updatePolyline(layer, props, prevProps) {\n if (props.positions !== prevProps.positions) {\n layer.setLatLngs(props.positions);\n }\n});\n","import { MapContainer, TileLayer, CircleMarker, Popup, Polyline } from 'react-leaflet';\nimport 'leaflet/dist/leaflet.css';\n\ninterface Neighbor {\n lat: number | null;\n lon: number | null;\n name: string | null;\n pubkey_prefix: string;\n snr: number;\n}\n\ninterface Props {\n neighbors: Neighbor[];\n radioLat?: number | null;\n radioLon?: number | null;\n radioName?: string | null;\n}\n\nexport function NeighborsMiniMap({ neighbors, radioLat, radioLon, radioName }: Props) {\n const valid = neighbors.filter(\n (n): n is Neighbor & { lat: number; lon: number } => n.lat != null && n.lon != null\n );\n\n const hasRadio = radioLat != null && radioLon != null && !(radioLat === 0 && radioLon === 0);\n\n if (valid.length === 0 && !hasRadio) return null;\n\n // Center on radio if available, otherwise first neighbor\n const center: [number, number] = hasRadio ? [radioLat!, radioLon!] : [valid[0].lat, valid[0].lon];\n\n return (\n <div\n className=\"min-h-48 flex-1 rounded border border-border overflow-hidden\"\n role=\"img\"\n aria-label=\"Map showing repeater neighbor locations\"\n >\n <MapContainer\n center={center}\n zoom={10}\n className=\"h-full w-full\"\n style={{ background: '#1a1a2e' }}\n >\n <TileLayer\n attribution='&copy; <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a>'\n url=\"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png\"\n />\n {/* Dotted lines from radio to each neighbor */}\n {hasRadio &&\n valid.map((n, i) => (\n <Polyline\n key={`line-${i}`}\n positions={[\n [radioLat!, radioLon!],\n [n.lat, n.lon],\n ]}\n pathOptions={{\n color: '#3b82f6',\n weight: 1.5,\n opacity: 0.5,\n dashArray: '6 4',\n }}\n />\n ))}\n {/* Radio node (bright blue) */}\n {hasRadio && (\n <CircleMarker\n center={[radioLat!, radioLon!]}\n radius={8}\n pathOptions={{\n color: '#1d4ed8',\n fillColor: '#3b82f6',\n fillOpacity: 1,\n weight: 2,\n }}\n >\n <Popup>\n <span className=\"text-sm font-medium\">{radioName || 'Our Radio'}</span>\n </Popup>\n </CircleMarker>\n )}\n {/* Neighbor nodes (SNR-colored) */}\n {valid.map((n, i) => (\n <CircleMarker\n key={i}\n center={[n.lat, n.lon]}\n radius={6}\n pathOptions={{\n color: '#000',\n fillColor: n.snr >= 6 ? '#22c55e' : n.snr >= 0 ? '#eab308' : '#ef4444',\n fillOpacity: 0.8,\n weight: 1,\n }}\n >\n <Popup>\n <span className=\"text-sm\">{n.name || n.pubkey_prefix}</span>\n </Popup>\n </CircleMarker>\n ))}\n </MapContainer>\n </div>\n );\n}\n"],"names":["Polyline","createPathComponent","positions","options","ctx","polyline","LeafletPolyline","createElementObject","extendContext","layer","props","prevProps","NeighborsMiniMap","neighbors","radioLat","radioLon","radioName","valid","n","hasRadio","center","jsx","jsxs","MapContainer","TileLayer","i","CircleMarker","Popup"],"mappings":"oKAEO,MAAMA,EAAWC,EAAoB,SAAwB,CAAE,UAAAC,EAAY,GAAGC,CAAO,EAAIC,EAAK,CACjG,MAAMC,EAAW,IAAIC,WAAgBJ,EAAWC,CAAO,EACvD,OAAOI,EAAoBF,EAAUG,EAAcJ,EAAK,CACpD,iBAAkBC,CAC1B,CAAK,CAAC,CACN,EAAG,SAAwBI,EAAOC,EAAOC,EAAW,CAC5CD,EAAM,YAAcC,EAAU,WAC9BF,EAAM,WAAWC,EAAM,SAAS,CAExC,CAAC,ECOM,SAASE,EAAiB,CAAE,UAAAC,EAAW,SAAAC,EAAU,SAAAC,EAAU,UAAAC,GAAoB,CACpF,MAAMC,EAAQJ,EAAU,OACrBK,GAAoDA,EAAE,KAAO,MAAQA,EAAE,KAAO,IAAA,EAG3EC,EAAWL,GAAY,MAAQC,GAAY,MAAQ,EAAED,IAAa,GAAKC,IAAa,GAE1F,GAAIE,EAAM,SAAW,GAAK,CAACE,EAAU,OAAO,KAG5C,MAAMC,EAA2BD,EAAW,CAACL,EAAWC,CAAS,EAAI,CAACE,EAAM,CAAC,EAAE,IAAKA,EAAM,CAAC,EAAE,GAAG,EAEhG,OACEI,EAAAA,IAAC,MAAA,CACC,UAAU,+DACV,KAAK,MACL,aAAW,0CAEX,SAAAC,EAAAA,KAACC,EAAA,CACC,OAAAH,EACA,KAAM,GACN,UAAU,gBACV,MAAO,CAAE,WAAY,SAAA,EAErB,SALine truncated
@@ -1,4 +1,4 @@
import{r as x,D as l,j as i}from"./index-pnVde5Cl.js";import{c as O,l as b,a as y,e as w,b as C,M as L,T as M,L as R}from"./leaflet-By4Srz79.js";import{u as T}from"./hooks-BCaVWsWl.js";const h=O(function({position:n,...t},o){const r=new b.Marker(n,t);return y(r,w(o,{overlayContainer:r}))},function(n,t,o){t.position!==o.position&&n.setLatLng(t.position),t.icon!=null&&t.icon!==o.icon&&n.setIcon(t.icon),t.zIndexOffset!=null&&t.zIndexOffset!==o.zIndexOffset&&n.setZIndexOffset(t.zIndexOffset),t.opacity!=null&&t.opacity!==o.opacity&&n.setOpacity(t.opacity),n.dragging!=null&&t.draggable!==o.draggable&&(t.draggable===!0?n.dragging.enable():n.dragging.disable())}),p=C(function(n,t){const o=new b.Tooltip(n,t.overlayContainer);return y(o,t)},function(n,t,{position:o},r){x.useEffect(function(){const s=t.overlayContainer;if(s==null)return;const{instance:u}=n,f=a=>{a.tooltip===u&&(o!=null&&u.setLatLng(o),u.update(),r(!0))},c=a=>{a.tooltip===u&&r(!1)};return s.on({tooltipopen:f,tooltipclose:c}),s.bindTooltip(u),function(){s.off({tooltipopen:f,tooltipclose:c}),s._map!=null&&s.unbindTooltip()}},[n,t,r,o])}),m=["#f97316","#eab308","#22c55e","#06b6d4","#ec4899","#f43f5e","#a855f7","#64748b"],E="#3b82f6",S="#8b5cf6";function g(e,n){return R.divIcon({className:"",iconSize:[24,24],iconAnchor:[12,12],html:`<div style="
import{r as x,D as l,j as i}from"./index-Fnq3QmNw.js";import{c as O,l as b,a as y,e as w,b as C,M as L,T as M,L as R}from"./leaflet-ENrCR1B4.js";import{u as T}from"./hooks-LL30L9PN.js";const h=O(function({position:n,...t},o){const r=new b.Marker(n,t);return y(r,w(o,{overlayContainer:r}))},function(n,t,o){t.position!==o.position&&n.setLatLng(t.position),t.icon!=null&&t.icon!==o.icon&&n.setIcon(t.icon),t.zIndexOffset!=null&&t.zIndexOffset!==o.zIndexOffset&&n.setZIndexOffset(t.zIndexOffset),t.opacity!=null&&t.opacity!==o.opacity&&n.setOpacity(t.opacity),n.dragging!=null&&t.draggable!==o.draggable&&(t.draggable===!0?n.dragging.enable():n.dragging.disable())}),p=C(function(n,t){const o=new b.Tooltip(n,t.overlayContainer);return y(o,t)},function(n,t,{position:o},r){x.useEffect(function(){const s=t.overlayContainer;if(s==null)return;const{instance:u}=n,f=a=>{a.tooltip===u&&(o!=null&&u.setLatLng(o),u.update(),r(!0))},c=a=>{a.tooltip===u&&r(!1)};return s.on({tooltipopen:f,tooltipclose:c}),s.bindTooltip(u),function(){s.off({tooltipopen:f,tooltipclose:c}),s._map!=null&&s.unbindTooltip()}},[n,t,r,o])}),m=["#f97316","#eab308","#22c55e","#06b6d4","#ec4899","#f43f5e","#a855f7","#64748b"],E="#3b82f6",S="#8b5cf6";function g(e,n){return R.divIcon({className:"",iconSize:[24,24],iconAnchor:[12,12],html:`<div style="
width:24px;height:24px;border-radius:50%;
background:${n};color:#fff;
display:flex;align-items:center;justify-content:center;
@@ -6,4 +6,4 @@ import{r as x,D as l,j as i}from"./index-pnVde5Cl.js";import{c as O,l as b,a as
border:2px solid rgba(255,255,255,0.8);
box-shadow:0 1px 4px rgba(0,0,0,0.4);
">${e}</div>`})}function z(e){return m[e%m.length]}function N(e){const n=[];l(e.sender.lat,e.sender.lon)&&n.push([e.sender.lat,e.sender.lon]);for(const t of e.hops)for(const o of t.matches)l(o.lat,o.lon)&&n.push([o.lat,o.lon]);return l(e.receiver.lat,e.receiver.lon)&&n.push([e.receiver.lat,e.receiver.lon]),n}function I({points:e}){const n=T(),t=x.useRef(!1);return x.useEffect(()=>{t.current||e.length===0||(t.current=!0,e.length===1?n.setView(e[0],12):n.fitBounds(e,{padding:[30,30],maxZoom:14}))},[n,e]),null}function k({resolved:e,senderInfo:n}){const t=N(e),o=t.length>0;let r=2,d=0;l(e.sender.lat,e.sender.lon)&&d++,l(e.receiver.lat,e.receiver.lon)&&d++;for(const f of e.hops)f.matches.length===0?r++:(r+=f.matches.length,d+=f.matches.filter(c=>l(c.lat,c.lon)).length);const s=o&&d<r;if(!o)return i.jsx("div",{className:"h-14 rounded border border-border bg-muted/30 flex items-center justify-center text-sm text-muted-foreground",children:"No nodes in this route have GPS coordinates"});const u=t[0];return i.jsxs("div",{children:[i.jsx("div",{className:"rounded border border-border overflow-hidden",role:"img","aria-label":"Map showing message route between nodes",style:{height:220},children:i.jsxs(L,{center:u,zoom:10,className:"h-full w-full",style:{background:"#1a1a2e"},children:[i.jsx(M,{attribution:'© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>',url:"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"}),i.jsx(I,{points:t}),l(e.sender.lat,e.sender.lon)&&i.jsx(h,{position:[e.sender.lat,e.sender.lon],icon:g("S",E),children:i.jsx(p,{direction:"top",offset:[0,-14],children:n.name||"Sender"})}),e.hops.map((f,c)=>f.matches.filter(a=>l(a.lat,a.lon)).map((a,j)=>i.jsx(h,{position:[a.lat,a.lon],icon:g(String(c+1),z(c)),children:i.jsx(p,{direction:"top",offset:[0,-14],children:a.name||a.public_key.slice(0,12)})},`hop-${c}-${j}`))),l(e.receiver.lat,e.receiver.lon)&&i.jsx(h,{position:[e.receiver.lat,e.receiver.lon],icon:g("R",S),children:i.jsx(p,{direction:"top",offset:[0,-14],children:e.receiver.name||"Receiver"})})]})}),s&&i.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"Some nodes in this route have no GPS and are not shown"})]})}export{k as PathRouteMap};
//# sourceMappingURL=PathRouteMap-COU38t0B.js.map
//# sourceMappingURL=PathRouteMap-kT7xfoMb.js.map
@@ -1 +1 @@
{"version":3,"file":"PathRouteMap-COU38t0B.js","sources":["../../node_modules/react-leaflet/lib/Marker.js","../../node_modules/react-leaflet/lib/Tooltip.js","../../src/components/PathRouteMap.tsx"],"sourcesContent":["import { createElementObject, createLayerComponent, extendContext } from '@react-leaflet/core';\nimport { Marker as LeafletMarker } from 'leaflet';\nexport const Marker = createLayerComponent(function createMarker({ position , ...options }, ctx) {\n const marker = new LeafletMarker(position, options);\n return createElementObject(marker, extendContext(ctx, {\n overlayContainer: marker\n }));\n}, function updateMarker(marker, props, prevProps) {\n if (props.position !== prevProps.position) {\n marker.setLatLng(props.position);\n }\n if (props.icon != null && props.icon !== prevProps.icon) {\n marker.setIcon(props.icon);\n }\n if (props.zIndexOffset != null && props.zIndexOffset !== prevProps.zIndexOffset) {\n marker.setZIndexOffset(props.zIndexOffset);\n }\n if (props.opacity != null && props.opacity !== prevProps.opacity) {\n marker.setOpacity(props.opacity);\n }\n if (marker.dragging != null && props.draggable !== prevProps.draggable) {\n if (props.draggable === true) {\n marker.dragging.enable();\n } else {\n marker.dragging.disable();\n }\n }\n});\n","import { createElementObject, createOverlayComponent } from '@react-leaflet/core';\nimport { Tooltip as LeafletTooltip } from 'leaflet';\nimport { useEffect } from 'react';\nexport const Tooltip = createOverlayComponent(function createTooltip(props, context) {\n const tooltip = new LeafletTooltip(props, context.overlayContainer);\n return createElementObject(tooltip, context);\n}, function useTooltipLifecycle(element, context, { position }, setOpen) {\n useEffect(function addTooltip() {\n const container = context.overlayContainer;\n if (container == null) {\n return;\n }\n const { instance } = element;\n const onTooltipOpen = (event)=>{\n if (event.tooltip === instance) {\n if (position != null) {\n instance.setLatLng(position);\n }\n instance.update();\n setOpen(true);\n }\n };\n const onTooltipClose = (event)=>{\n if (event.tooltip === instance) {\n setOpen(false);\n }\n };\n container.on({\n tooltipopen: onTooltipOpen,\n tooltipclose: onTooltipClose\n });\n container.bindTooltip(instance);\n return function removeTooltip() {\n container.off({\n tooltipopen: onTooltipOpen,\n tooltipclose: onTooltipClose\n });\n // @ts-ignore protected property\n if (container._map != null) {\n container.unbindTooltip();\n }\n };\n }, [\n element,\n context,\n setOpen,\n position\n ]);\n});\n","import { useEffect, useRef } from 'react';\nimport { MapContainer, TileLayer, Marker, Tooltip, useMap } from 'react-leaflet';\nimport L from 'leaflet';\nimport 'leaflet/dist/leaflet.css';\nimport { isValidLocation } from '../utils/pathUtils';\nimport type { ResolvedPath, SenderInfo } from '../utils/pathUtils';\n\ninterface PathRouteMapProps {\n resolved: ResolvedPath;\n senderInfo: SenderInfo;\n}\n\n// Colors for hop markers (indexed by hop number - 1)\nconst HOP_COLORS = [\n '#f97316', // Hop 1: orange\n '#eab308', // Hop 2: yellow\n '#22c55e', // Hop 3: green\n '#06b6d4', // Hop 4: cyan\n '#ec4899', // Hop 5: pink\n '#f43f5e', // Hop 6: rose\n '#a855f7', // Hop 7: purple\n '#64748b', // Hop 8: slate\n];\n\nconst SENDER_COLOR = '#3b82f6'; // blue\nconst RECEIVER_COLOR = '#8b5cf6'; // violet\n\nfunction makeIcon(label: string, color: string): L.DivIcon {\n return L.divIcon({\n className: '',\n iconSize: [24, 24],\n iconAnchor: [12, 12],\n html: `<div style=\"\n width:24px;height:24px;border-radius:50%;\n background:${color};color:#fff;\n display:flex;align-items:center;justify-content:center;\n font-size:11px;font-weight:700;\n border:2px solid rgba(255,255,255,0.8);\n box-shadow:0 1px 4px rgba(0,0,0,0.4);\n \">${label}</div>`,\n });\n}\n\nfunction getHopColor(hopIndex: number): string {\n return HOP_COLORS[hopIndex % HOP_COLORS.length];\n}\n\n/** Collect all valid [lat, lon] points for bounds fitting */\nfunction collectPoints(resolved: ResolvedPath): [number, number][] {\n const pts: [number, number][] = [];\n if (isValidLocation(resolved.sender.lat, resolved.sender.lon)) {\n pts.push([resolved.sender.lat!, resolved.sender.lon!]);\n }\n for (const hop of resolved.hops) {\n for (const m of hop.matches) {\n if (isValidLocation(m.lat, m.lon)) {\n pts.push([m.lat!, m.lon!]);\n Line truncated
{"version":3,"file":"PathRouteMap-kT7xfoMb.js","sources":["../../node_modules/react-leaflet/lib/Marker.js","../../node_modules/react-leaflet/lib/Tooltip.js","../../src/components/PathRouteMap.tsx"],"sourcesContent":["import { createElementObject, createLayerComponent, extendContext } from '@react-leaflet/core';\nimport { Marker as LeafletMarker } from 'leaflet';\nexport const Marker = createLayerComponent(function createMarker({ position , ...options }, ctx) {\n const marker = new LeafletMarker(position, options);\n return createElementObject(marker, extendContext(ctx, {\n overlayContainer: marker\n }));\n}, function updateMarker(marker, props, prevProps) {\n if (props.position !== prevProps.position) {\n marker.setLatLng(props.position);\n }\n if (props.icon != null && props.icon !== prevProps.icon) {\n marker.setIcon(props.icon);\n }\n if (props.zIndexOffset != null && props.zIndexOffset !== prevProps.zIndexOffset) {\n marker.setZIndexOffset(props.zIndexOffset);\n }\n if (props.opacity != null && props.opacity !== prevProps.opacity) {\n marker.setOpacity(props.opacity);\n }\n if (marker.dragging != null && props.draggable !== prevProps.draggable) {\n if (props.draggable === true) {\n marker.dragging.enable();\n } else {\n marker.dragging.disable();\n }\n }\n});\n","import { createElementObject, createOverlayComponent } from '@react-leaflet/core';\nimport { Tooltip as LeafletTooltip } from 'leaflet';\nimport { useEffect } from 'react';\nexport const Tooltip = createOverlayComponent(function createTooltip(props, context) {\n const tooltip = new LeafletTooltip(props, context.overlayContainer);\n return createElementObject(tooltip, context);\n}, function useTooltipLifecycle(element, context, { position }, setOpen) {\n useEffect(function addTooltip() {\n const container = context.overlayContainer;\n if (container == null) {\n return;\n }\n const { instance } = element;\n const onTooltipOpen = (event)=>{\n if (event.tooltip === instance) {\n if (position != null) {\n instance.setLatLng(position);\n }\n instance.update();\n setOpen(true);\n }\n };\n const onTooltipClose = (event)=>{\n if (event.tooltip === instance) {\n setOpen(false);\n }\n };\n container.on({\n tooltipopen: onTooltipOpen,\n tooltipclose: onTooltipClose\n });\n container.bindTooltip(instance);\n return function removeTooltip() {\n container.off({\n tooltipopen: onTooltipOpen,\n tooltipclose: onTooltipClose\n });\n // @ts-ignore protected property\n if (container._map != null) {\n container.unbindTooltip();\n }\n };\n }, [\n element,\n context,\n setOpen,\n position\n ]);\n});\n","import { useEffect, useRef } from 'react';\nimport { MapContainer, TileLayer, Marker, Tooltip, useMap } from 'react-leaflet';\nimport L from 'leaflet';\nimport 'leaflet/dist/leaflet.css';\nimport { isValidLocation } from '../utils/pathUtils';\nimport type { ResolvedPath, SenderInfo } from '../utils/pathUtils';\n\ninterface PathRouteMapProps {\n resolved: ResolvedPath;\n senderInfo: SenderInfo;\n}\n\n// Colors for hop markers (indexed by hop number - 1)\nconst HOP_COLORS = [\n '#f97316', // Hop 1: orange\n '#eab308', // Hop 2: yellow\n '#22c55e', // Hop 3: green\n '#06b6d4', // Hop 4: cyan\n '#ec4899', // Hop 5: pink\n '#f43f5e', // Hop 6: rose\n '#a855f7', // Hop 7: purple\n '#64748b', // Hop 8: slate\n];\n\nconst SENDER_COLOR = '#3b82f6'; // blue\nconst RECEIVER_COLOR = '#8b5cf6'; // violet\n\nfunction makeIcon(label: string, color: string): L.DivIcon {\n return L.divIcon({\n className: '',\n iconSize: [24, 24],\n iconAnchor: [12, 12],\n html: `<div style=\"\n width:24px;height:24px;border-radius:50%;\n background:${color};color:#fff;\n display:flex;align-items:center;justify-content:center;\n font-size:11px;font-weight:700;\n border:2px solid rgba(255,255,255,0.8);\n box-shadow:0 1px 4px rgba(0,0,0,0.4);\n \">${label}</div>`,\n });\n}\n\nfunction getHopColor(hopIndex: number): string {\n return HOP_COLORS[hopIndex % HOP_COLORS.length];\n}\n\n/** Collect all valid [lat, lon] points for bounds fitting */\nfunction collectPoints(resolved: ResolvedPath): [number, number][] {\n const pts: [number, number][] = [];\n if (isValidLocation(resolved.sender.lat, resolved.sender.lon)) {\n pts.push([resolved.sender.lat!, resolved.sender.lon!]);\n }\n for (const hop of resolved.hops) {\n for (const m of hop.matches) {\n if (isValidLocation(m.lat, m.lon)) {\n pts.push([m.lat!, m.lon!]);\n Line truncated
@@ -1,2 +1,2 @@
import{d,l as f,a as s,e as C,b as m}from"./leaflet-By4Srz79.js";import{r as P}from"./index-pnVde5Cl.js";function v(o,n,e){n.center!==e.center&&o.setLatLng(n.center),n.radius!=null&&n.radius!==e.radius&&o.setRadius(n.radius)}const b=d(function({center:n,children:e,...r},p){const t=new f.CircleMarker(n,r);return s(t,C(p,{overlayContainer:t}))},v),k=m(function(n,e){const r=new f.Popup(n,e.overlayContainer);return s(r,e)},function(n,e,{position:r},p){P.useEffect(function(){const{instance:a}=n;function i(u){u.popup===a&&(a.update(),p(!0))}function c(u){u.popup===a&&p(!1)}return e.map.on({popupopen:i,popupclose:c}),e.overlayContainer==null?(r!=null&&a.setLatLng(r),a.openOn(e.map)):e.overlayContainer.bindPopup(a),function(){var l;e.map.off({popupopen:i,popupclose:c}),(l=e.overlayContainer)==null||l.unbindPopup(),e.map.removeLayer(a)}},[n,e,p,r])});export{b as C,k as P};
//# sourceMappingURL=Popup-CZeo1EzJ.js.map
import{d,l as f,a as s,e as C,b as m}from"./leaflet-ENrCR1B4.js";import{r as P}from"./index-Fnq3QmNw.js";function v(o,n,e){n.center!==e.center&&o.setLatLng(n.center),n.radius!=null&&n.radius!==e.radius&&o.setRadius(n.radius)}const b=d(function({center:n,children:e,...r},p){const t=new f.CircleMarker(n,r);return s(t,C(p,{overlayContainer:t}))},v),k=m(function(n,e){const r=new f.Popup(n,e.overlayContainer);return s(r,e)},function(n,e,{position:r},p){P.useEffect(function(){const{instance:a}=n;function i(u){u.popup===a&&(a.update(),p(!0))}function c(u){u.popup===a&&p(!1)}return e.map.on({popupopen:i,popupclose:c}),e.overlayContainer==null?(r!=null&&a.setLatLng(r),a.openOn(e.map)):e.overlayContainer.bindPopup(a),function(){var l;e.map.off({popupopen:i,popupclose:c}),(l=e.overlayContainer)==null||l.unbindPopup(),e.map.removeLayer(a)}},[n,e,p,r])});export{b as C,k as P};
//# sourceMappingURL=Popup-C-Q9ygBf.js.map
@@ -1 +1 @@
{"version":3,"file":"Popup-CZeo1EzJ.js","sources":["../../node_modules/@react-leaflet/core/lib/circle.js","../../node_modules/react-leaflet/lib/CircleMarker.js","../../node_modules/react-leaflet/lib/Popup.js"],"sourcesContent":["export function updateCircle(layer, props, prevProps) {\n if (props.center !== prevProps.center) {\n layer.setLatLng(props.center);\n }\n if (props.radius != null && props.radius !== prevProps.radius) {\n layer.setRadius(props.radius);\n }\n}\n","import { createElementObject, createPathComponent, extendContext, updateCircle } from '@react-leaflet/core';\nimport { CircleMarker as LeafletCircleMarker } from 'leaflet';\nexport const CircleMarker = createPathComponent(function createCircleMarker({ center , children: _c , ...options }, ctx) {\n const marker = new LeafletCircleMarker(center, options);\n return createElementObject(marker, extendContext(ctx, {\n overlayContainer: marker\n }));\n}, updateCircle);\n","import { createElementObject, createOverlayComponent } from '@react-leaflet/core';\nimport { Popup as LeafletPopup } from 'leaflet';\nimport { useEffect } from 'react';\nexport const Popup = createOverlayComponent(function createPopup(props, context) {\n const popup = new LeafletPopup(props, context.overlayContainer);\n return createElementObject(popup, context);\n}, function usePopupLifecycle(element, context, { position }, setOpen) {\n useEffect(function addPopup() {\n const { instance } = element;\n function onPopupOpen(event) {\n if (event.popup === instance) {\n instance.update();\n setOpen(true);\n }\n }\n function onPopupClose(event) {\n if (event.popup === instance) {\n setOpen(false);\n }\n }\n context.map.on({\n popupopen: onPopupOpen,\n popupclose: onPopupClose\n });\n if (context.overlayContainer == null) {\n // Attach to a Map\n if (position != null) {\n instance.setLatLng(position);\n }\n instance.openOn(context.map);\n } else {\n // Attach to container component\n context.overlayContainer.bindPopup(instance);\n }\n return function removePopup() {\n context.map.off({\n popupopen: onPopupOpen,\n popupclose: onPopupClose\n });\n context.overlayContainer?.unbindPopup();\n context.map.removeLayer(instance);\n };\n }, [\n element,\n context,\n setOpen,\n position\n ]);\n});\n"],"names":["updateCircle","layer","props","prevProps","CircleMarker","createPathComponent","center","_c","options","ctx","marker","LeafletCircleMarker","createElementObject","extendContext","Popup","createOverlayComponent","context","popup","LeafletPopup","element","position","setOpen","useEffect","instance","onPopupOpen","event","onPopupClose","_a"],"mappings":"yGAAO,SAASA,EAAaC,EAAOC,EAAOC,EAAW,CAC9CD,EAAM,SAAWC,EAAU,QAC3BF,EAAM,UAAUC,EAAM,MAAM,EAE5BA,EAAM,QAAU,MAAQA,EAAM,SAAWC,EAAU,QACnDF,EAAM,UAAUC,EAAM,MAAM,CAEpC,CCLY,MAACE,EAAeC,EAAoB,SAA4B,CAAE,OAAAC,EAAS,SAAUC,EAAK,GAAGC,CAAO,EAAIC,EAAK,CACrH,MAAMC,EAAS,IAAIC,eAAoBL,EAAQE,CAAO,EACtD,OAAOI,EAAoBF,EAAQG,EAAcJ,EAAK,CAClD,iBAAkBC,CAC1B,CAAK,CAAC,CACN,EAAGV,CAAY,ECJFc,EAAQC,EAAuB,SAAqBb,EAAOc,EAAS,CAC7E,MAAMC,EAAQ,IAAIC,EAAAA,MAAahB,EAAOc,EAAQ,gBAAgB,EAC9D,OAAOJ,EAAoBK,EAAOD,CAAO,CAC7C,EAAG,SAA2BG,EAASH,EAAS,CAAE,SAAAI,CAAQ,EAAKC,EAAS,CACpEC,EAAAA,UAAU,UAAoB,CAC1B,KAAM,CAAE,SAAAC,CAAQ,EAAMJ,EACtB,SAASK,EAAYC,EAAO,CACpBA,EAAM,QAAUF,IAChBA,EAAS,OAAM,EACfF,EAAQ,EAAI,EAEpB,CACA,SAASK,EAAaD,EAAO,CACrBA,EAAM,QAAUF,GAChBF,EAAQ,EAAK,CAErB,CACA,OAAAL,EAAQ,IAAI,GAAG,CACX,UAAWQ,EACX,WAAYE,CACxB,CAAS,EACGV,EAAQ,kBAAoB,MAExBI,GAAY,MACZG,EAAS,UAAUH,CAAQ,EAE/BG,EAAS,OAAOP,EAAQ,GAAG,GAG3BA,EAAQ,iBAAiB,UAAUO,CAAQ,EAExC,UAAuB,OAC1BP,EAAQ,IAAI,IAAI,CACZ,UAAWQ,EACX,WAAYE,CAC5B,CAAa,GACDC,EAAAX,EAAQ,mBAAR,MAAAW,EAA0B,cAC1BX,EAAQ,IAAI,YAAYO,CAAQ,CACpC,CACJ,EAAG,CACCJ,EACAH,EACAK,EACAD,CACR,CAAK,CACL,CAAC","x_google_ignoreList":[0,1,2]}
{"version":3,"file":"Popup-C-Q9ygBf.js","sources":["../../node_modules/@react-leaflet/core/lib/circle.js","../../node_modules/react-leaflet/lib/CircleMarker.js","../../node_modules/react-leaflet/lib/Popup.js"],"sourcesContent":["export function updateCircle(layer, props, prevProps) {\n if (props.center !== prevProps.center) {\n layer.setLatLng(props.center);\n }\n if (props.radius != null && props.radius !== prevProps.radius) {\n layer.setRadius(props.radius);\n }\n}\n","import { createElementObject, createPathComponent, extendContext, updateCircle } from '@react-leaflet/core';\nimport { CircleMarker as LeafletCircleMarker } from 'leaflet';\nexport const CircleMarker = createPathComponent(function createCircleMarker({ center , children: _c , ...options }, ctx) {\n const marker = new LeafletCircleMarker(center, options);\n return createElementObject(marker, extendContext(ctx, {\n overlayContainer: marker\n }));\n}, updateCircle);\n","import { createElementObject, createOverlayComponent } from '@react-leaflet/core';\nimport { Popup as LeafletPopup } from 'leaflet';\nimport { useEffect } from 'react';\nexport const Popup = createOverlayComponent(function createPopup(props, context) {\n const popup = new LeafletPopup(props, context.overlayContainer);\n return createElementObject(popup, context);\n}, function usePopupLifecycle(element, context, { position }, setOpen) {\n useEffect(function addPopup() {\n const { instance } = element;\n function onPopupOpen(event) {\n if (event.popup === instance) {\n instance.update();\n setOpen(true);\n }\n }\n function onPopupClose(event) {\n if (event.popup === instance) {\n setOpen(false);\n }\n }\n context.map.on({\n popupopen: onPopupOpen,\n popupclose: onPopupClose\n });\n if (context.overlayContainer == null) {\n // Attach to a Map\n if (position != null) {\n instance.setLatLng(position);\n }\n instance.openOn(context.map);\n } else {\n // Attach to container component\n context.overlayContainer.bindPopup(instance);\n }\n return function removePopup() {\n context.map.off({\n popupopen: onPopupOpen,\n popupclose: onPopupClose\n });\n context.overlayContainer?.unbindPopup();\n context.map.removeLayer(instance);\n };\n }, [\n element,\n context,\n setOpen,\n position\n ]);\n});\n"],"names":["updateCircle","layer","props","prevProps","CircleMarker","createPathComponent","center","_c","options","ctx","marker","LeafletCircleMarker","createElementObject","extendContext","Popup","createOverlayComponent","context","popup","LeafletPopup","element","position","setOpen","useEffect","instance","onPopupOpen","event","onPopupClose","_a"],"mappings":"yGAAO,SAASA,EAAaC,EAAOC,EAAOC,EAAW,CAC9CD,EAAM,SAAWC,EAAU,QAC3BF,EAAM,UAAUC,EAAM,MAAM,EAE5BA,EAAM,QAAU,MAAQA,EAAM,SAAWC,EAAU,QACnDF,EAAM,UAAUC,EAAM,MAAM,CAEpC,CCLY,MAACE,EAAeC,EAAoB,SAA4B,CAAE,OAAAC,EAAS,SAAUC,EAAK,GAAGC,CAAO,EAAIC,EAAK,CACrH,MAAMC,EAAS,IAAIC,eAAoBL,EAAQE,CAAO,EACtD,OAAOI,EAAoBF,EAAQG,EAAcJ,EAAK,CAClD,iBAAkBC,CAC1B,CAAK,CAAC,CACN,EAAGV,CAAY,ECJFc,EAAQC,EAAuB,SAAqBb,EAAOc,EAAS,CAC7E,MAAMC,EAAQ,IAAIC,EAAAA,MAAahB,EAAOc,EAAQ,gBAAgB,EAC9D,OAAOJ,EAAoBK,EAAOD,CAAO,CAC7C,EAAG,SAA2BG,EAASH,EAAS,CAAE,SAAAI,CAAQ,EAAKC,EAAS,CACpEC,EAAAA,UAAU,UAAoB,CAC1B,KAAM,CAAE,SAAAC,CAAQ,EAAMJ,EACtB,SAASK,EAAYC,EAAO,CACpBA,EAAM,QAAUF,IAChBA,EAAS,OAAM,EACfF,EAAQ,EAAI,EAEpB,CACA,SAASK,EAAaD,EAAO,CACrBA,EAAM,QAAUF,GAChBF,EAAQ,EAAK,CAErB,CACA,OAAAL,EAAQ,IAAI,GAAG,CACX,UAAWQ,EACX,WAAYE,CACxB,CAAS,EACGV,EAAQ,kBAAoB,MAExBI,GAAY,MACZG,EAAS,UAAUH,CAAQ,EAE/BG,EAAS,OAAOP,EAAQ,GAAG,GAG3BA,EAAQ,iBAAiB,UAAUO,CAAQ,EAExC,UAAuB,OAC1BP,EAAQ,IAAI,IAAI,CACZ,UAAWQ,EACX,WAAYE,CAC5B,CAAa,GACDC,EAAAX,EAAQ,mBAAR,MAAAW,EAA0B,cAC1BX,EAAQ,IAAI,YAAYO,CAAQ,CACpC,CACJ,EAAG,CACCJ,EACAH,EACAK,EACAD,CACR,CAAK,CACL,CAAC","x_google_ignoreList":[0,1,2]}
@@ -1,3 +1,3 @@
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/NeighborsMiniMap-DOCpkCDv.js","assets/index-pnVde5Cl.js","assets/index-Kkb-Bio9.css","assets/leaflet-By4Srz79.js","assets/leaflet-Dgihpmma.css","assets/Popup-CZeo1EzJ.js"])))=>i.map(i=>d[i]);
import{r as a,k as $,t as q,j as e,I as ne,B as z,l as F,D as K,E as de,F as ue,_ as me,G as fe,H as xe,J as he,R as pe,K as ge,M as be,N as Q,O as je,P as ve}from"./index-pnVde5Cl.js";import{S as X}from"./separator-CcV99KWD.js";const ee=3,Ne=2e3,ye=20,E={loading:!1,attempt:0,error:null,fetched_at:null};function te(){return{status:{...E},nodeInfo:{...E},neighbors:{...E},acl:{...E},radioSettings:{...E},advertIntervals:{...E},ownerInfo:{...E},lppTelemetry:{...E}}}function se(){return{status:null,nodeInfo:null,neighbors:null,acl:null,radioSettings:null,advertIntervals:null,ownerInfo:null,lppTelemetry:null}}const H=new Map;function we(t){switch(t){case"timeout":return"Login confirmation not heard";case"error":return"Login not confirmed";default:return"Repeater login not confirmed"}}function oe(t){return{...t}}function le(t){return{status:{...t.status,loading:!1},nodeInfo:{...t.nodeInfo,loading:!1},neighbors:{...t.neighbors,loading:!1},acl:{...t.acl,loading:!1},radioSettings:{...t.radioSettings,loading:!1},advertIntervals:{...t.advertIntervals,loading:!1},ownerInfo:{...t.ownerInfo,loading:!1},lppTelemetry:{...t.lppTelemetry,loading:!1}}}function ae(t){return t.map(s=>({...s}))}function _e(t){if(!t)return null;const s=H.get(t);return s?(H.delete(t),H.set(t,s),{loggedIn:s.loggedIn,loginError:s.loginError,paneData:oe(s.paneData),paneStates:le(s.paneStates),consoleHistory:ae(s.consoleHistory)}):null}function Ce(t,s){if(H.delete(t),H.set(t,{loggedIn:s.loggedIn,loginError:s.loginError,paneData:oe(s.paneData),paneStates:le(s.paneStates),consoleHistory:ae(s.consoleHistory)}),H.size>ye){const r=H.keys().next().value;r&&H.delete(r)}}function Re(t,s){switch(s){case"status":return $.repeaterStatus(t);case"nodeInfo":return $.repeaterNodeInfo(t);case"neighbors":return $.repeaterNeighbors(t);case"acl":return $.repeaterAcl(t);case"radioSettings":return $.repeaterRadioSettings(t);case"advertIntervals":return $.repeaterAdvertIntervals(t);case"ownerInfo":return $.repeaterOwnerInfo(t);case"lppTelemetry":return $.repeaterLppTelemetry(t)}}function Le(t){const s=t&&t.type==="contact"?t.id:null,r=_e(s),[o,l]=a.useState((r==null?void 0:r.loggedIn)??!1),[n,h]=a.useState(!1),[i,c]=a.useState((r==null?void 0:r.loginError)??null),[j,D]=a.useState((r==null?void 0:r.paneData)??se),[v,R]=a.useState((r==null?void 0:r.paneStates)??te),w=a.useRef((r==null?void 0:r.paneData)??se()),N=a.useRef((r==null?void 0:r.paneStates)??te()),[A,f]=a.useState((r==null?void 0:r.consoleHistory)??[]),[T,P]=a.useState(!1),u=a.useRef((t==null?void 0:t.id)??null),m=a.useRef(!0);a.useEffect(()=>{u.current=s},[s]),a.useEffect(()=>(m.current=!0,()=>{m.current=!1}),[]),a.useEffect(()=>{s&&Ce(s,{loggedIn:o,loginError:i,paneData:j,paneStates:v,consoleHistory:A})},[A,s,o,i,j,v]),a.useEffect(()=>{w.current=j},[j]),a.useEffect(()=>{N.current=v},[v]);const _=a.useCallback(()=>!t||t.type!=="contact"?null:t.id,[t]),L=a.useCallback(async p=>{const b=_();if(!b)return;const y=b;h(!0),c(null);try{const d=await $.repeaterLogin(b,p);if(u.current!==y)return;if(l(!0),!d.authenticated){const g=d.message??"Repeater login was not confirmed";c(g),q.error(we(d.status),{description:g})}}catch(d){if(u.current!==y)return;const g=d instanceof Error?d.message:"Login failed";l(!0),c(g),q.error("Login request failed",{description:`${g}. The dashboard is still available, but repeater operations may fail until a login succeeds.`})}finally{u.current===y&&h(!1)}},[_]),W=a.useCallback(async()=>{await L("")},[L]),S=a.useCallback(async p=>{const b=_();if(!b)return;const y=b;if(p==="neighbors"){const d=N.current.nodeInfo,g=w.current.nodeInfo;if((d.error!==null||d.fetched_at==null&&g==null)&&(await S("nodeInfo"),!m.current||u.current!==y))return}for(let d=1;d<=ee;d++){if(!m.current||u.current!==y)return;const g={loading:!0,attempt:d,error:null,fetched_at:N.current[p].fetched_at??null};N.current={...N.current,[p]:g},R(C=>({...C,[p]:g}));try{const C=await Re(b,p);if(!m.current||u.current!==y)return;w.current={...w.current,[p]:C};const O={loading:!1,attempt:d,error:null,fetched_at:Date.now()};N.current={...N.current,[p]:O},D(M=>({...M,[p]:C})),R(M=>({...M,[p]:O}));return}catch(C){if(!m.current||u.current!==y)return;const O=C instanceof Error?C.message:"Request failed";if(d===ee){const M={loading:!1,attempt:d,error:O,fetched_at:N.current[p].fetched_at??null};N.current={...N.current,[p]:M},R(ce=>({...ce,[p]:M})),q.error(`Failed to fetch ${p}`,{description:O})}else await new Promise(M=>setTimeout(M,Ne))}}},[_]),I=a.useCallback(async()=>{const p=["status","nodeInfo","neighbors","radioSettings","acl","advertIntervals","ownerInfo","lppTelemetry"];for(const b of p)await S(b)},[S]),k=a.useCallback(async p=>{const b=_();if(!b)return;const y=b,d=Math.floor(Date.now()/1e3);f(g=>[...g,{command:p,response:"",timestamp:d,outgoing:!0}]),P(!0);try{const g=await $.sendRepeaterCommand(b,p);if(u.current!==y)return;f(C=>[...C,{command:p,response:g.response,timestamp:g.sender_timestamp??d,outgoing:!1}])}catch(g){if(u.current!==y)Line truncated
//# sourceMappingURL=RepeaterDashboard-CCs38SPq.js.map
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/NeighborsMiniMap-zqanKONo.js","assets/index-Fnq3QmNw.js","assets/index-Kkb-Bio9.css","assets/leaflet-ENrCR1B4.js","assets/leaflet-Dgihpmma.css","assets/Popup-C-Q9ygBf.js"])))=>i.map(i=>d[i]);
import{r as a,k as $,t as q,j as e,I as ne,B as z,l as F,D as K,E as de,F as ue,_ as me,G as fe,H as xe,J as he,R as pe,K as ge,M as be,N as Q,O as je,P as ve}from"./index-Fnq3QmNw.js";import{S as X}from"./separator-BwjFWJb_.js";const ee=3,Ne=2e3,ye=20,E={loading:!1,attempt:0,error:null,fetched_at:null};function te(){return{status:{...E},nodeInfo:{...E},neighbors:{...E},acl:{...E},radioSettings:{...E},advertIntervals:{...E},ownerInfo:{...E},lppTelemetry:{...E}}}function se(){return{status:null,nodeInfo:null,neighbors:null,acl:null,radioSettings:null,advertIntervals:null,ownerInfo:null,lppTelemetry:null}}const H=new Map;function we(t){switch(t){case"timeout":return"Login confirmation not heard";case"error":return"Login not confirmed";default:return"Repeater login not confirmed"}}function oe(t){return{...t}}function le(t){return{status:{...t.status,loading:!1},nodeInfo:{...t.nodeInfo,loading:!1},neighbors:{...t.neighbors,loading:!1},acl:{...t.acl,loading:!1},radioSettings:{...t.radioSettings,loading:!1},advertIntervals:{...t.advertIntervals,loading:!1},ownerInfo:{...t.ownerInfo,loading:!1},lppTelemetry:{...t.lppTelemetry,loading:!1}}}function ae(t){return t.map(s=>({...s}))}function _e(t){if(!t)return null;const s=H.get(t);return s?(H.delete(t),H.set(t,s),{loggedIn:s.loggedIn,loginError:s.loginError,paneData:oe(s.paneData),paneStates:le(s.paneStates),consoleHistory:ae(s.consoleHistory)}):null}function Ce(t,s){if(H.delete(t),H.set(t,{loggedIn:s.loggedIn,loginError:s.loginError,paneData:oe(s.paneData),paneStates:le(s.paneStates),consoleHistory:ae(s.consoleHistory)}),H.size>ye){const r=H.keys().next().value;r&&H.delete(r)}}function Re(t,s){switch(s){case"status":return $.repeaterStatus(t);case"nodeInfo":return $.repeaterNodeInfo(t);case"neighbors":return $.repeaterNeighbors(t);case"acl":return $.repeaterAcl(t);case"radioSettings":return $.repeaterRadioSettings(t);case"advertIntervals":return $.repeaterAdvertIntervals(t);case"ownerInfo":return $.repeaterOwnerInfo(t);case"lppTelemetry":return $.repeaterLppTelemetry(t)}}function Le(t){const s=t&&t.type==="contact"?t.id:null,r=_e(s),[o,l]=a.useState((r==null?void 0:r.loggedIn)??!1),[n,h]=a.useState(!1),[i,c]=a.useState((r==null?void 0:r.loginError)??null),[j,D]=a.useState((r==null?void 0:r.paneData)??se),[v,R]=a.useState((r==null?void 0:r.paneStates)??te),w=a.useRef((r==null?void 0:r.paneData)??se()),N=a.useRef((r==null?void 0:r.paneStates)??te()),[A,f]=a.useState((r==null?void 0:r.consoleHistory)??[]),[T,P]=a.useState(!1),u=a.useRef((t==null?void 0:t.id)??null),m=a.useRef(!0);a.useEffect(()=>{u.current=s},[s]),a.useEffect(()=>(m.current=!0,()=>{m.current=!1}),[]),a.useEffect(()=>{s&&Ce(s,{loggedIn:o,loginError:i,paneData:j,paneStates:v,consoleHistory:A})},[A,s,o,i,j,v]),a.useEffect(()=>{w.current=j},[j]),a.useEffect(()=>{N.current=v},[v]);const _=a.useCallback(()=>!t||t.type!=="contact"?null:t.id,[t]),L=a.useCallback(async p=>{const b=_();if(!b)return;const y=b;h(!0),c(null);try{const d=await $.repeaterLogin(b,p);if(u.current!==y)return;if(l(!0),!d.authenticated){const g=d.message??"Repeater login was not confirmed";c(g),q.error(we(d.status),{description:g})}}catch(d){if(u.current!==y)return;const g=d instanceof Error?d.message:"Login failed";l(!0),c(g),q.error("Login request failed",{description:`${g}. The dashboard is still available, but repeater operations may fail until a login succeeds.`})}finally{u.current===y&&h(!1)}},[_]),W=a.useCallback(async()=>{await L("")},[L]),S=a.useCallback(async p=>{const b=_();if(!b)return;const y=b;if(p==="neighbors"){const d=N.current.nodeInfo,g=w.current.nodeInfo;if((d.error!==null||d.fetched_at==null&&g==null)&&(await S("nodeInfo"),!m.current||u.current!==y))return}for(let d=1;d<=ee;d++){if(!m.current||u.current!==y)return;const g={loading:!0,attempt:d,error:null,fetched_at:N.current[p].fetched_at??null};N.current={...N.current,[p]:g},R(C=>({...C,[p]:g}));try{const C=await Re(b,p);if(!m.current||u.current!==y)return;w.current={...w.current,[p]:C};const O={loading:!1,attempt:d,error:null,fetched_at:Date.now()};N.current={...N.current,[p]:O},D(M=>({...M,[p]:C})),R(M=>({...M,[p]:O}));return}catch(C){if(!m.current||u.current!==y)return;const O=C instanceof Error?C.message:"Request failed";if(d===ee){const M={loading:!1,attempt:d,error:O,fetched_at:N.current[p].fetched_at??null};N.current={...N.current,[p]:M},R(ce=>({...ce,[p]:M})),q.error(`Failed to fetch ${p}`,{description:O})}else await new Promise(M=>setTimeout(M,Ne))}}},[_]),I=a.useCallback(async()=>{const p=["status","nodeInfo","neighbors","radioSettings","acl","advertIntervals","ownerInfo","lppTelemetry"];for(const b of p)await S(b)},[S]),k=a.useCallback(async p=>{const b=_();if(!b)return;const y=b,d=Math.floor(Date.now()/1e3);f(g=>[...g,{command:p,response:"",timestamp:d,outgoing:!0}]),P(!0);try{const g=await $.sendRepeaterCommand(b,p);if(u.current!==y)return;f(C=>[...C,{command:p,response:g.response,timestamp:g.sender_timestamp??d,outgoing:!1}])}catch(g){if(u.current!==y)Line truncated
//# sourceMappingURL=RepeaterDashboard-DtQKwbsT.js.map
@@ -1 +1 @@
{"version":3,"mappings":"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 truncated
{"version":3,"mappings":"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 truncated
@@ -1,2 +1,2 @@
import{r as n,k as _,A as w,j as t,I as H,l as I,m as Q,B}from"./index-pnVde5Cl.js";const b=50,D=300,O=new RegExp('(?<!\\S)(user|channel):(?:"((?:[^"\\\\]|\\\\.)*)"|(\\S+))',"gi");function T(c,d){if(!d)return[c];const i=[],m=new RegExp(`(${d.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")})`,"gi"),r=c.split(m);for(let l=0;l<r.length;l++)m.test(r[l])?i.push(t.jsx("mark",{className:"bg-primary/30 text-foreground rounded-sm px-0.5",children:r[l]},l)):i.push(r[l]),m.lastIndex=0;return i}function L(c){const d=[];let i=0,m=!1;for(const r of c.matchAll(O))m=!0,d.push(c.slice(i,r.index)),i=(r.index??0)+r[0].length;return m?(d.push(c.slice(i)),d.map(r=>r.trim()).filter(Boolean).join(" ")):c}function $({contacts:c,channels:d,visibilityVersion:i=0,onNavigateToMessage:m,prefillRequest:r=null}){const[l,v]=n.useState(""),[a,k]=n.useState(""),[C,h]=n.useState([]),[f,p]=n.useState(!1),[A,g]=n.useState(!1),[E,y]=n.useState(0),x=n.useRef(null),j=n.useRef(null),R=L(a);n.useEffect(()=>{const e=setTimeout(()=>{k(l.trim())},D);return()=>clearTimeout(e)},[l]),n.useEffect(()=>{h([]),y(0),g(!1)},[a,i]),n.useEffect(()=>{var o;if(!r)return;const e=r.query.trim();v(e),k(e),(o=j.current)==null||o.focus()},[r]),n.useEffect(()=>()=>{var e;(e=x.current)==null||e.abort()},[]),n.useEffect(()=>{var o;if(!a){h([]),g(!1);return}(o=x.current)==null||o.abort();const e=new AbortController;return x.current=e,p(!0),_.getMessages({q:a,limit:b,offset:0},e.signal).then(s=>{h(s),g(s.length>=b),y(s.length)}).catch(s=>{w(s)||console.error("Search failed:",s)}).finally(()=>{p(!1)}),()=>e.abort()},[a,i]);const M=n.useCallback(()=>{var o;if(!a||f)return;(o=x.current)==null||o.abort();const e=new AbortController;x.current=e,p(!0),_.getMessages({q:a,limit:b,offset:E},e.signal).then(s=>{h(u=>[...u,...s]),g(s.length>=b),y(u=>u+s.length)}).catch(s=>{w(s)||console.error("Search load more failed:",s)}).finally(()=>{p(!1)})},[a,f,E]),N=n.useCallback(e=>{if(e.type==="CHAN"){const s=d.find(u=>u.key.toUpperCase()===e.conversation_key.toUpperCase());return(s==null?void 0:s.name)||e.conversation_key.slice(0,8)}const o=c.find(s=>s.public_key.toLowerCase()===e.conversation_key.toLowerCase());return(o==null?void 0:o.name)||e.conversation_key.slice(0,12)},[c,d]),S=n.useCallback(e=>{m({id:e.id,type:e.type,conversation_key:e.conversation_key,conversation_name:N(e)})},[m,N]);return n.useEffect(()=>{var e;(e=j.current)==null||e.focus()},[]),t.jsxs("div",{className:"flex flex-col h-full",children:[t.jsx("h2",{className:"flex justify-between items-center px-4 py-2.5 border-b border-border font-semibold text-base",children:"Message Search"}),t.jsx("div",{className:"px-4 py-3 border-b border-border",children:t.jsx(H,{ref:j,type:"text",placeholder:"Search all messages...",value:l,onChange:e=>v(e.target.value),className:"h-9 text-sm","aria-label":"Search messages"})}),t.jsxs("div",{className:"flex-1 overflow-y-auto",children:[!a&&t.jsxs("div",{className:"p-8 text-center text-muted-foreground text-sm",children:[t.jsx("p",{children:"Type to search across all messages"}),t.jsxs("p",{className:"mt-2 text-xs",children:["Tip: use ",t.jsx("code",{children:"user:"})," or ",t.jsx("code",{children:"channel:"})," for keys or names, and wrap names with spaces in them in quotes."]}),t.jsx("p",{className:"mt-2 text-xs",children:"Warning: User-key linkage for group messages is best-effort and based on correlation at advertise time. It does not account for multiple users with the same name, and should be considered unreliable."})]}),a&&C.length===0&&!f&&t.jsxs("div",{className:"p-8 text-center text-muted-foreground text-sm",children:["No messages found for “",a,"”"]}),C.map(e=>{const o=N(e),s=e.type==="CHAN"?"Channel":"DM";return t.jsxs("div",{className:"px-4 py-3 border-b border-border/50 cursor-pointer hover:bg-accent/50 transition-colors",role:"button",tabIndex:0,onClick:()=>S(e),onKeyDown:u=>{(u.key==="Enter"||u.key===" ")&&(u.preventDefault(),S(e))},children:[t.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[t.jsx("span",{className:I("text-[10px] font-medium px-1.5 py-0.5 rounded",e.type==="CHAN"?"bg-primary/20 text-primary":"bg-secondary text-secondary-foreground"),children:s}),t.jsx("span",{className:"text-[12px] font-medium text-foreground truncate",children:o}),t.jsx("span",{className:"text-[11px] text-muted-foreground ml-auto flex-shrink-0",children:Q(e.received_at)})]}),t.jsxs("div",{className:"text-[13px] text-foreground/80 line-clamp-2 break-words",children:[e.sender_name&&!e.outgoing&&t.jsxs("span",{className:"text-muted-foreground",children:[e.sender_name,": "]}),e.outgoing&&t.jsx("span",{className:"text-muted-foreground",children:"You: "}),T(e.sender_name&&e.text.startsWith(`${e.sender_name}: `)?e.text.slice(e.sender_name.length+2):e.text,R)]})]},e.id)}),f&&t.jsx("div",{className:"p-4 text-center text-muted-foreground text-sm",role:"status",children:"Searching..."}),A&&!f&&t.jsx("div",{className:"p-4 text-center",children:t.jsx(B,{variant:"outline",size:"sm",onClick:M,childLine truncated
//# sourceMappingURL=SearchView-8mOuDvjT.js.map
import{r as n,k as _,A as w,j as t,I as H,l as I,m as Q,B}from"./index-Fnq3QmNw.js";const b=50,D=300,O=new RegExp('(?<!\\S)(user|channel):(?:"((?:[^"\\\\]|\\\\.)*)"|(\\S+))',"gi");function T(c,d){if(!d)return[c];const i=[],m=new RegExp(`(${d.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")})`,"gi"),r=c.split(m);for(let l=0;l<r.length;l++)m.test(r[l])?i.push(t.jsx("mark",{className:"bg-primary/30 text-foreground rounded-sm px-0.5",children:r[l]},l)):i.push(r[l]),m.lastIndex=0;return i}function L(c){const d=[];let i=0,m=!1;for(const r of c.matchAll(O))m=!0,d.push(c.slice(i,r.index)),i=(r.index??0)+r[0].length;return m?(d.push(c.slice(i)),d.map(r=>r.trim()).filter(Boolean).join(" ")):c}function $({contacts:c,channels:d,visibilityVersion:i=0,onNavigateToMessage:m,prefillRequest:r=null}){const[l,v]=n.useState(""),[a,k]=n.useState(""),[C,h]=n.useState([]),[f,p]=n.useState(!1),[A,g]=n.useState(!1),[E,y]=n.useState(0),x=n.useRef(null),j=n.useRef(null),R=L(a);n.useEffect(()=>{const e=setTimeout(()=>{k(l.trim())},D);return()=>clearTimeout(e)},[l]),n.useEffect(()=>{h([]),y(0),g(!1)},[a,i]),n.useEffect(()=>{var o;if(!r)return;const e=r.query.trim();v(e),k(e),(o=j.current)==null||o.focus()},[r]),n.useEffect(()=>()=>{var e;(e=x.current)==null||e.abort()},[]),n.useEffect(()=>{var o;if(!a){h([]),g(!1);return}(o=x.current)==null||o.abort();const e=new AbortController;return x.current=e,p(!0),_.getMessages({q:a,limit:b,offset:0},e.signal).then(s=>{h(s),g(s.length>=b),y(s.length)}).catch(s=>{w(s)||console.error("Search failed:",s)}).finally(()=>{p(!1)}),()=>e.abort()},[a,i]);const M=n.useCallback(()=>{var o;if(!a||f)return;(o=x.current)==null||o.abort();const e=new AbortController;x.current=e,p(!0),_.getMessages({q:a,limit:b,offset:E},e.signal).then(s=>{h(u=>[...u,...s]),g(s.length>=b),y(u=>u+s.length)}).catch(s=>{w(s)||console.error("Search load more failed:",s)}).finally(()=>{p(!1)})},[a,f,E]),N=n.useCallback(e=>{if(e.type==="CHAN"){const s=d.find(u=>u.key.toUpperCase()===e.conversation_key.toUpperCase());return(s==null?void 0:s.name)||e.conversation_key.slice(0,8)}const o=c.find(s=>s.public_key.toLowerCase()===e.conversation_key.toLowerCase());return(o==null?void 0:o.name)||e.conversation_key.slice(0,12)},[c,d]),S=n.useCallback(e=>{m({id:e.id,type:e.type,conversation_key:e.conversation_key,conversation_name:N(e)})},[m,N]);return n.useEffect(()=>{var e;(e=j.current)==null||e.focus()},[]),t.jsxs("div",{className:"flex flex-col h-full",children:[t.jsx("h2",{className:"flex justify-between items-center px-4 py-2.5 border-b border-border font-semibold text-base",children:"Message Search"}),t.jsx("div",{className:"px-4 py-3 border-b border-border",children:t.jsx(H,{ref:j,type:"text",placeholder:"Search all messages...",value:l,onChange:e=>v(e.target.value),className:"h-9 text-sm","aria-label":"Search messages"})}),t.jsxs("div",{className:"flex-1 overflow-y-auto",children:[!a&&t.jsxs("div",{className:"p-8 text-center text-muted-foreground text-sm",children:[t.jsx("p",{children:"Type to search across all messages"}),t.jsxs("p",{className:"mt-2 text-xs",children:["Tip: use ",t.jsx("code",{children:"user:"})," or ",t.jsx("code",{children:"channel:"})," for keys or names, and wrap names with spaces in them in quotes."]}),t.jsx("p",{className:"mt-2 text-xs",children:"Warning: User-key linkage for group messages is best-effort and based on correlation at advertise time. It does not account for multiple users with the same name, and should be considered unreliable."})]}),a&&C.length===0&&!f&&t.jsxs("div",{className:"p-8 text-center text-muted-foreground text-sm",children:["No messages found for “",a,"”"]}),C.map(e=>{const o=N(e),s=e.type==="CHAN"?"Channel":"DM";return t.jsxs("div",{className:"px-4 py-3 border-b border-border/50 cursor-pointer hover:bg-accent/50 transition-colors",role:"button",tabIndex:0,onClick:()=>S(e),onKeyDown:u=>{(u.key==="Enter"||u.key===" ")&&(u.preventDefault(),S(e))},children:[t.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[t.jsx("span",{className:I("text-[10px] font-medium px-1.5 py-0.5 rounded",e.type==="CHAN"?"bg-primary/20 text-primary":"bg-secondary text-secondary-foreground"),children:s}),t.jsx("span",{className:"text-[12px] font-medium text-foreground truncate",children:o}),t.jsx("span",{className:"text-[11px] text-muted-foreground ml-auto flex-shrink-0",children:Q(e.received_at)})]}),t.jsxs("div",{className:"text-[13px] text-foreground/80 line-clamp-2 break-words",children:[e.sender_name&&!e.outgoing&&t.jsxs("span",{className:"text-muted-foreground",children:[e.sender_name,": "]}),e.outgoing&&t.jsx("span",{className:"text-muted-foreground",children:"You: "}),T(e.sender_name&&e.text.startsWith(`${e.sender_name}: `)?e.text.slice(e.sender_name.length+2):e.text,R)]})]},e.id)}),f&&t.jsx("div",{className:"p-4 text-center text-muted-foreground text-sm",role:"status",children:"Searching..."}),A&&!f&&t.jsx("div",{className:"p-4 text-center",children:t.jsx(B,{variant:"outline",size:"sm",onClick:M,childLine truncated
//# sourceMappingURL=SearchView-DBqP6hD6.js.map
@@ -1 +1 @@
{"version":3,"file":"SearchView-8mOuDvjT.js","sources":["../../src/components/SearchView.tsx"],"sourcesContent":["import { useState, useEffect, useRef, useCallback } from 'react';\nimport { api, isAbortError } from '../api';\nimport type { Contact, Channel } from '../types';\nimport { formatTime } from '../utils/messageParser';\nimport { Input } from './ui/input';\nimport { Button } from './ui/button';\nimport { cn } from '@/lib/utils';\n\nconst SEARCH_PAGE_SIZE = 50;\nconst DEBOUNCE_MS = 300;\n\ninterface SearchResult {\n id: number;\n type: 'PRIV' | 'CHAN';\n conversation_key: string;\n text: string;\n received_at: number;\n outgoing: boolean;\n sender_name: string | null;\n}\n\nconst SEARCH_OPERATOR_RE = /(?<!\\S)(user|channel):(?:\"((?:[^\"\\\\]|\\\\.)*)\"|(\\S+))/gi;\n\nexport interface SearchNavigateTarget {\n id: number;\n type: 'PRIV' | 'CHAN';\n conversation_key: string;\n conversation_name: string;\n}\n\nexport interface SearchViewProps {\n contacts: Contact[];\n channels: Channel[];\n visibilityVersion?: number;\n onNavigateToMessage: (target: SearchNavigateTarget) => void;\n prefillRequest?: {\n query: string;\n nonce: number;\n } | null;\n}\n\nfunction highlightMatch(text: string, query: string): React.ReactNode[] {\n if (!query) return [text];\n const parts: React.ReactNode[] = [];\n const regex = new RegExp(`(${query.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')})`, 'gi');\n const segments = text.split(regex);\n for (let i = 0; i < segments.length; i++) {\n if (regex.test(segments[i])) {\n parts.push(\n <mark key={i} className=\"bg-primary/30 text-foreground rounded-sm px-0.5\">\n {segments[i]}\n </mark>\n );\n } else {\n parts.push(segments[i]);\n }\n // Reset lastIndex since we're using test() in a loop\n regex.lastIndex = 0;\n }\n return parts;\n}\n\nfunction getHighlightQuery(query: string): string {\n const fragments: string[] = [];\n let lastIndex = 0;\n let foundOperator = false;\n\n for (const match of query.matchAll(SEARCH_OPERATOR_RE)) {\n foundOperator = true;\n fragments.push(query.slice(lastIndex, match.index));\n lastIndex = (match.index ?? 0) + match[0].length;\n }\n\n if (!foundOperator) {\n return query;\n }\n\n fragments.push(query.slice(lastIndex));\n return fragments\n .map((fragment) => fragment.trim())\n .filter(Boolean)\n .join(' ');\n}\n\nexport function SearchView({\n contacts,\n channels,\n visibilityVersion = 0,\n onNavigateToMessage,\n prefillRequest = null,\n}: SearchViewProps) {\n const [query, setQuery] = useState('');\n const [debouncedQuery, setDebouncedQuery] = useState('');\n const [results, setResults] = useState<SearchResult[]>([]);\n const [loading, setLoading] = useState(false);\n const [hasMore, setHasMore] = useState(false);\n const [offset, setOffset] = useState(0);\n const abortRef = useRef<AbortController | null>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const highlightQuery = getHighlightQuery(debouncedQuery);\n\n // Debounce query\n useEffect(() => {\n const timer = setTimeout(() => {\n setDebouncedQuery(query.trim());\n }, DEBOUNCE_MS);\n return () => clearTimeout(timer);\n }, [query]);\n\n // Reset results when query changes\n useEffect(() => {\n setResults([]);\n setOffset(0);\n setHasMore(false);\n }, [debouncedQuery, visibilityVersion]);\n\n useEffect(() => {\n if (!prefillRequest) {\n return;\n }\n\n const nextQuery = prefillRequest.query.trim();\n setQuery(nextQuery);\n setDebouncedQuery(nextQuery);\n inputRef.current?.focus();\n }, [prefillRequest]);\n\n useEffect(() => {\n return () => {\n abortRef.current?.abort();\n };\n }, []);\n\n // Fetch search results\n useEffect(() => {\n if (!debouncedQuery) {\n setResults([]);\n setHasMore(false);\n return;\n }\n\n abortRef.current?.abort();\n const controller = new AbortController();\n abortRef.current = controller;\n\n setLoading(true);\n api\n .getMessages({ q: debouncedQuery, limit: SEARCH_PAGE_SIZE, offset: 0 }, controller.signal)\n .then((data) => {\n setResults(data as SearchResult[]);\n setHasMore(data.length >= SEARCH_PAGE_SIZE);\n setOffset(data.length);\n })\n .catch((err) => {\n if (!isAbortError(err)) {\n console.error('Search failed:', err);\n }\n })\n .finally(() => {\n setLoading(false);\n });\n\n return () => controller.abort();\n }, [debouncedQuery, visibilityVersion]);\n\n const loadMore = useCallback(() => {\n if (!debouncedQuery || loading) return;\n\n abortRef.current?.abort();\n const controller = new AbortController();\n abortRef.current = controller;\n\n setLoading(true);\n api\n .getMessages({ q: debouncedQuery, limit: SEARCH_PAGE_SIZE, offset }, controller.signal)\n .then((data) => {\n setResults((preLine truncated
{"version":3,"file":"SearchView-DBqP6hD6.js","sources":["../../src/components/SearchView.tsx"],"sourcesContent":["import { useState, useEffect, useRef, useCallback } from 'react';\nimport { api, isAbortError } from '../api';\nimport type { Contact, Channel } from '../types';\nimport { formatTime } from '../utils/messageParser';\nimport { Input } from './ui/input';\nimport { Button } from './ui/button';\nimport { cn } from '@/lib/utils';\n\nconst SEARCH_PAGE_SIZE = 50;\nconst DEBOUNCE_MS = 300;\n\ninterface SearchResult {\n id: number;\n type: 'PRIV' | 'CHAN';\n conversation_key: string;\n text: string;\n received_at: number;\n outgoing: boolean;\n sender_name: string | null;\n}\n\nconst SEARCH_OPERATOR_RE = /(?<!\\S)(user|channel):(?:\"((?:[^\"\\\\]|\\\\.)*)\"|(\\S+))/gi;\n\nexport interface SearchNavigateTarget {\n id: number;\n type: 'PRIV' | 'CHAN';\n conversation_key: string;\n conversation_name: string;\n}\n\nexport interface SearchViewProps {\n contacts: Contact[];\n channels: Channel[];\n visibilityVersion?: number;\n onNavigateToMessage: (target: SearchNavigateTarget) => void;\n prefillRequest?: {\n query: string;\n nonce: number;\n } | null;\n}\n\nfunction highlightMatch(text: string, query: string): React.ReactNode[] {\n if (!query) return [text];\n const parts: React.ReactNode[] = [];\n const regex = new RegExp(`(${query.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')})`, 'gi');\n const segments = text.split(regex);\n for (let i = 0; i < segments.length; i++) {\n if (regex.test(segments[i])) {\n parts.push(\n <mark key={i} className=\"bg-primary/30 text-foreground rounded-sm px-0.5\">\n {segments[i]}\n </mark>\n );\n } else {\n parts.push(segments[i]);\n }\n // Reset lastIndex since we're using test() in a loop\n regex.lastIndex = 0;\n }\n return parts;\n}\n\nfunction getHighlightQuery(query: string): string {\n const fragments: string[] = [];\n let lastIndex = 0;\n let foundOperator = false;\n\n for (const match of query.matchAll(SEARCH_OPERATOR_RE)) {\n foundOperator = true;\n fragments.push(query.slice(lastIndex, match.index));\n lastIndex = (match.index ?? 0) + match[0].length;\n }\n\n if (!foundOperator) {\n return query;\n }\n\n fragments.push(query.slice(lastIndex));\n return fragments\n .map((fragment) => fragment.trim())\n .filter(Boolean)\n .join(' ');\n}\n\nexport function SearchView({\n contacts,\n channels,\n visibilityVersion = 0,\n onNavigateToMessage,\n prefillRequest = null,\n}: SearchViewProps) {\n const [query, setQuery] = useState('');\n const [debouncedQuery, setDebouncedQuery] = useState('');\n const [results, setResults] = useState<SearchResult[]>([]);\n const [loading, setLoading] = useState(false);\n const [hasMore, setHasMore] = useState(false);\n const [offset, setOffset] = useState(0);\n const abortRef = useRef<AbortController | null>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const highlightQuery = getHighlightQuery(debouncedQuery);\n\n // Debounce query\n useEffect(() => {\n const timer = setTimeout(() => {\n setDebouncedQuery(query.trim());\n }, DEBOUNCE_MS);\n return () => clearTimeout(timer);\n }, [query]);\n\n // Reset results when query changes\n useEffect(() => {\n setResults([]);\n setOffset(0);\n setHasMore(false);\n }, [debouncedQuery, visibilityVersion]);\n\n useEffect(() => {\n if (!prefillRequest) {\n return;\n }\n\n const nextQuery = prefillRequest.query.trim();\n setQuery(nextQuery);\n setDebouncedQuery(nextQuery);\n inputRef.current?.focus();\n }, [prefillRequest]);\n\n useEffect(() => {\n return () => {\n abortRef.current?.abort();\n };\n }, []);\n\n // Fetch search results\n useEffect(() => {\n if (!debouncedQuery) {\n setResults([]);\n setHasMore(false);\n return;\n }\n\n abortRef.current?.abort();\n const controller = new AbortController();\n abortRef.current = controller;\n\n setLoading(true);\n api\n .getMessages({ q: debouncedQuery, limit: SEARCH_PAGE_SIZE, offset: 0 }, controller.signal)\n .then((data) => {\n setResults(data as SearchResult[]);\n setHasMore(data.length >= SEARCH_PAGE_SIZE);\n setOffset(data.length);\n })\n .catch((err) => {\n if (!isAbortError(err)) {\n console.error('Search failed:', err);\n }\n })\n .finally(() => {\n setLoading(false);\n });\n\n return () => controller.abort();\n }, [debouncedQuery, visibilityVersion]);\n\n const loadMore = useCallback(() => {\n if (!debouncedQuery || loading) return;\n\n abortRef.current?.abort();\n const controller = new AbortController();\n abortRef.current = controller;\n\n setLoading(true);\n api\n .getMessages({ q: debouncedQuery, limit: SEARCH_PAGE_SIZE, offset }, controller.signal)\n .then((data) => {\n setResults((preLine truncated
@@ -1,5 +1,5 @@
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/BotCodeEditor-ycUmdsPQ.js","assets/index-pnVde5Cl.js","assets/index-Kkb-Bio9.css"])))=>i.map(i=>d[i]);
import{c as Xe,r as o,s as ze,j as e,L as c,B as F,I as x,t as N,g as hs,T as gs,a as fs,b as js,d as $e,e as Ke,f as bs,C as We,h as vs,i as ys,k as V,l as xe,_ as Ns,m as ws,S as _s,n as ks}from"./index-pnVde5Cl.js";import{S as b}from"./separator-CcV99KWD.js";/**
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/BotCodeEditor-C20Gx7-Q.js","assets/index-Fnq3QmNw.js","assets/index-Kkb-Bio9.css"])))=>i.map(i=>d[i]);
import{c as Xe,r as o,s as ze,j as e,L as c,B as F,I as x,t as N,g as hs,T as gs,a as fs,b as js,d as $e,e as Ke,f as bs,C as We,h as vs,i as ys,k as V,l as xe,_ as Ns,m as ws,S as _s,n as ks}from"./index-Fnq3QmNw.js";import{S as b}from"./separator-BwjFWJb_.js";/**
* @license lucide-react v0.562.0 - ISC
*
* This source code is licensed under the ISC license.
@@ -9,7 +9,7 @@ import{c as Xe,r as o,s as ze,j as e,L as c,B as F,I as x,t as N,g as hs,T as gs
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/const Ts=[["path",{d:"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z",key:"18887p"}]],Es=Xe("message-square",Ts),pe=[{name:"USA/Canada",freq:910.525,bw:62.5,sf:7,cr:5},{name:"Australia",freq:915.8,bw:250,sf:10,cr:5},{name:"Australia (narrow)",freq:916.575,bw:62.5,sf:7,cr:8},{name:"Australia SA, WA",freq:923.125,bw:62.5,sf:8,cr:8},{name:"Australia QLD",freq:923.125,bw:62.5,sf:8,cr:5},{name:"New Zealand",freq:917.375,bw:250,sf:11,cr:5},{name:"New Zealand (narrow)",freq:917.375,bw:62.5,sf:7,cr:5},{name:"EU/UK/Switzerland Long Range",freq:869.525,bw:250,sf:11,cr:5},{name:"EU/UK/Switzerland Medium Range",freq:869.525,bw:250,sf:10,cr:5},{name:"EU/UK/Switzerland Narrow",freq:869.618,bw:62.5,sf:8,cr:8},{name:"Czech Republic (Narrow)",freq:869.432,bw:62.5,sf:7,cr:5},{name:"EU 433MHz Long Range",freq:433.65,bw:250,sf:11,cr:5},{name:"Portugal 433MHz",freq:433.375,bw:62.5,sf:9,cr:6},{name:"Portugal 868MHz",freq:869.618,bw:62.5,sf:7,cr:6},{name:"Vietnam",freq:920.25,bw:250,sf:11,cr:5}];function Fs({config:s,health:t,appSettings:n,pageMode:a,onSave:d,onSaveAppSettings:w,onSetPrivateKey:S,onReboot:j,onDisconnect:_,onReconnect:h,onAdvertise:p,meshDiscovery:v,meshDiscoveryLoadingTarget:C,onDiscoverMesh:M,onClose:I,className:K}){const[U,L]=o.useState(""),[R,q]=o.useState(""),[B,O]=o.useState(""),[W,G]=o.useState(""),[m,A]=o.useState(""),[X,u]=o.useState(""),[y,T]=o.useState(""),[H,se]=o.useState(""),[re,Y]=o.useState("0"),[Q,E]=o.useState("current"),[J,z]=o.useState(!1),[i,l]=o.useState(!1),[f,g]=o.useState(!1),[D,Z]=o.useState(null),[P,je]=o.useState(""),[be,ve]=o.useState(!1),[ye,Ne]=o.useState(!1),[we,le]=o.useState(null),[_e,ke]=o.useState("0"),[ue,Se]=o.useState(""),[Ce,Te]=o.useState(""),[Ee,Fe]=o.useState(!1),[Ae,Me]=o.useState(null),[Le,qe]=o.useState(!1),[Pe,Re]=o.useState(null),[De,Ie]=o.useState(!1);o.useEffect(()=>{L(s.name),q(String(s.lat)),O(String(s.lon)),G(String(s.tx_power)),A(String(s.radio.freq)),u(String(s.radio.bw)),T(String(s.radio.sf)),se(String(s.radio.cr)),Y(String(s.path_hash_mode)),E(s.advert_location_source??"current")},[s]),o.useEffect(()=>{ke(String(Math.round(n.advert_interval/3600))),Se(ze(n.flood_scope)),Te(String(n.max_radio_contacts))},[n]);const as=o.useMemo(()=>{const r=parseFloat(m),k=parseFloat(X),ee=parseInt(y,10),te=parseInt(H,10);for(const ae of pe)if(ae.freq===r&&ae.bw===k&&ae.sf===ee&&ae.cr===te)return ae.name;return"custom"},[m,X,y,H]),rs=r=>{if(r==="custom")return;const k=pe.find(ee=>ee.name===r);k&&(A(String(k.freq)),u(String(k.bw)),T(String(k.sf)),se(String(k.cr)))},ns=()=>{if(!navigator.geolocation){N.error("Geolocation not supported",{description:"Your browser does not support geolocation"});return}z(!0),navigator.geolocation.getCurrentPosition(r=>{q(r.coords.latitude.toFixed(6)),O(r.coords.longitude.toFixed(6)),z(!1),N.success("Location updated")},r=>{z(!1),N.error("Failed to get location",{description:r.message})},{enableHighAccuracy:!0,timeout:1e4})},Be=()=>{const r=parseFloat(R),k=parseFloat(B),ee=parseInt(W,10),te=parseFloat(m),ae=parseFloat(X),Ue=parseInt(y,10),He=parseInt(H,10);if([r,k,ee,te,ae,Ue,He].some(ps=>isNaN(ps)))return Z("All numeric fields must have valid values"),null;const me=parseInt(re,10);return{name:U,lat:r,lon:k,tx_power:ee,...Q!==(s.advert_location_source??"current")?{advert_location_source:Q}:{},radio:{freq:te,bw:ae,sf:Ue,cr:He},...s.path_hash_mode_supported&&!isNaN(me)&&me!==s.path_hash_mode?{path_hash_mode:me}:{}}},os=async()=>{Z(null);const r=Be();if(r){l(!0);try{await d(r),N.success("Radio config saved")}catch(k){Z(k instanceof Error?k.message:"Failed to save")}finally{l(!1)}}},is=async()=>{Z(null);const r=Be();if(r){l(!0);try{await d(r),N.success("Radio config saved, rebooting..."),g(!0),await j(),a||I()}catch(k){Z(k instanceof Error?k.message:"Failed to save")}finally{g(!1),l(!1)}}},cs=async()=>{if(!P.trim()){le("Private key is required");return}le(null),ve(!0);try{await S(P.trim()),je(""),N.success("Private key set, rebooting..."),Ne(!0),await j(),a||I()}catch(r){le(r instanceof Error?r.message:"Failed to set private key")}finally{Ne(!1),ve(!1)}},ds=async()=>{Me(null),Fe(!0);try{const r={},k=parseInt(_e,10),ee=isNaN(k)?0:k*3600;ee!==n.advert_interval&&(r.advert_interval=ee),ue!==ze(n.flood_scope)&&(r.flood_scope=ue);const te=parseInt(Ce,10);!isNaN(te)&&te!==n.max_radio_contacts&&(r.max_radio_contacts=te),Object.keys(r).length>0&&await w(r),N.success("Settings saved")}catch(r){Me(r instanceof Error?r.message:"Failed to save")}finally{Fe(!1)}},ls=async()=>{qe(!0);try{await p()}finally{qe(!1)}},us=async r=>{Re(null);try{await M(r)}catch(k){Re(k instanceof Error?k.message:"Failed to run mesh discovery")}},$=(t==null?void 0:t.radio_state)??(t!=null&&t.radio_initializing?"initializing":"disconnected"),Oe=$==="paused"?"Reconnect":$==="connected"||$==="initializing"?"Disconnect":"Stop Trying",ms=$==="connected"?(t==null?void 0:t.connection_info)||"Connected":$==="initializing"?`ILine truncated
*/const Ts=[["path",{d:"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z",key:"18887p"}]],Es=Xe("message-square",Ts),pe=[{name:"USA/Canada",freq:910.525,bw:62.5,sf:7,cr:5},{name:"Australia",freq:915.8,bw:250,sf:10,cr:5},{name:"Australia (narrow)",freq:916.575,bw:62.5,sf:7,cr:8},{name:"Australia SA, WA",freq:923.125,bw:62.5,sf:8,cr:8},{name:"Australia QLD",freq:923.125,bw:62.5,sf:8,cr:5},{name:"New Zealand",freq:917.375,bw:250,sf:11,cr:5},{name:"New Zealand (narrow)",freq:917.375,bw:62.5,sf:7,cr:5},{name:"EU/UK/Switzerland Long Range",freq:869.525,bw:250,sf:11,cr:5},{name:"EU/UK/Switzerland Medium Range",freq:869.525,bw:250,sf:10,cr:5},{name:"EU/UK/Switzerland Narrow",freq:869.618,bw:62.5,sf:8,cr:8},{name:"Czech Republic (Narrow)",freq:869.432,bw:62.5,sf:7,cr:5},{name:"EU 433MHz Long Range",freq:433.65,bw:250,sf:11,cr:5},{name:"Portugal 433MHz",freq:433.375,bw:62.5,sf:9,cr:6},{name:"Portugal 868MHz",freq:869.618,bw:62.5,sf:7,cr:6},{name:"Vietnam",freq:920.25,bw:250,sf:11,cr:5}];function Fs({config:s,health:t,appSettings:n,pageMode:a,onSave:d,onSaveAppSettings:w,onSetPrivateKey:S,onReboot:j,onDisconnect:_,onReconnect:h,onAdvertise:p,meshDiscovery:v,meshDiscoveryLoadingTarget:C,onDiscoverMesh:M,onClose:I,className:K}){const[U,L]=o.useState(""),[R,q]=o.useState(""),[B,O]=o.useState(""),[W,G]=o.useState(""),[m,A]=o.useState(""),[X,u]=o.useState(""),[y,T]=o.useState(""),[H,se]=o.useState(""),[re,Y]=o.useState("0"),[Q,E]=o.useState("current"),[J,z]=o.useState(!1),[i,l]=o.useState(!1),[f,g]=o.useState(!1),[D,Z]=o.useState(null),[P,je]=o.useState(""),[be,ve]=o.useState(!1),[ye,Ne]=o.useState(!1),[we,le]=o.useState(null),[_e,ke]=o.useState("0"),[ue,Se]=o.useState(""),[Ce,Te]=o.useState(""),[Ee,Fe]=o.useState(!1),[Ae,Me]=o.useState(null),[Le,qe]=o.useState(!1),[Pe,Re]=o.useState(null),[De,Ie]=o.useState(!1);o.useEffect(()=>{L(s.name),q(String(s.lat)),O(String(s.lon)),G(String(s.tx_power)),A(String(s.radio.freq)),u(String(s.radio.bw)),T(String(s.radio.sf)),se(String(s.radio.cr)),Y(String(s.path_hash_mode)),E(s.advert_location_source??"current")},[s]),o.useEffect(()=>{ke(String(Math.round(n.advert_interval/3600))),Se(ze(n.flood_scope)),Te(String(n.max_radio_contacts))},[n]);const as=o.useMemo(()=>{const r=parseFloat(m),k=parseFloat(X),ee=parseInt(y,10),te=parseInt(H,10);for(const ae of pe)if(ae.freq===r&&ae.bw===k&&ae.sf===ee&&ae.cr===te)return ae.name;return"custom"},[m,X,y,H]),rs=r=>{if(r==="custom")return;const k=pe.find(ee=>ee.name===r);k&&(A(String(k.freq)),u(String(k.bw)),T(String(k.sf)),se(String(k.cr)))},ns=()=>{if(!navigator.geolocation){N.error("Geolocation not supported",{description:"Your browser does not support geolocation"});return}z(!0),navigator.geolocation.getCurrentPosition(r=>{q(r.coords.latitude.toFixed(6)),O(r.coords.longitude.toFixed(6)),z(!1),N.success("Location updated")},r=>{z(!1),N.error("Failed to get location",{description:r.message})},{enableHighAccuracy:!0,timeout:1e4})},Be=()=>{const r=parseFloat(R),k=parseFloat(B),ee=parseInt(W,10),te=parseFloat(m),ae=parseFloat(X),Ue=parseInt(y,10),He=parseInt(H,10);if([r,k,ee,te,ae,Ue,He].some(ps=>isNaN(ps)))return Z("All numeric fields must have valid values"),null;const me=parseInt(re,10);return{name:U,lat:r,lon:k,tx_power:ee,...Q!==(s.advert_location_source??"current")?{advert_location_source:Q}:{},radio:{freq:te,bw:ae,sf:Ue,cr:He},...s.path_hash_mode_supported&&!isNaN(me)&&me!==s.path_hash_mode?{path_hash_mode:me}:{}}},os=async()=>{Z(null);const r=Be();if(r){l(!0);try{await d(r),N.success("Radio config saved")}catch(k){Z(k instanceof Error?k.message:"Failed to save")}finally{l(!1)}}},is=async()=>{Z(null);const r=Be();if(r){l(!0);try{await d(r),N.success("Radio config saved, rebooting..."),g(!0),await j(),a||I()}catch(k){Z(k instanceof Error?k.message:"Failed to save")}finally{g(!1),l(!1)}}},cs=async()=>{if(!P.trim()){le("Private key is required");return}le(null),ve(!0);try{await S(P.trim()),je(""),N.success("Private key set, rebooting..."),Ne(!0),await j(),a||I()}catch(r){le(r instanceof Error?r.message:"Failed to set private key")}finally{Ne(!1),ve(!1)}},ds=async()=>{Me(null),Fe(!0);try{const r={},k=parseInt(_e,10),ee=isNaN(k)?0:k*3600;ee!==n.advert_interval&&(r.advert_interval=ee),ue!==ze(n.flood_scope)&&(r.flood_scope=ue);const te=parseInt(Ce,10);!isNaN(te)&&te!==n.max_radio_contacts&&(r.max_radio_contacts=te),Object.keys(r).length>0&&await w(r),N.success("Settings saved")}catch(r){Me(r instanceof Error?r.message:"Failed to save")}finally{Fe(!1)}},ls=async()=>{qe(!0);try{await p()}finally{qe(!1)}},us=async r=>{Re(null);try{await M(r)}catch(k){Re(k instanceof Error?k.message:"Failed to run mesh discovery")}},$=(t==null?void 0:t.radio_state)??(t!=null&&t.radio_initializing?"initializing":"disconnected"),Oe=$==="paused"?"Reconnect":$==="connected"||$==="initializing"?"Disconnect":"Stop Trying",ms=$==="connected"?(t==null?void 0:t.connection_info)||"Connected":$==="initializing"?`ILine truncated
`).map(d=>d.trim()).filter(Boolean);if(n.length===0)return"No targets configured";const a=n.join(", ");return a.length<=t?a:`${a.slice(0,t-3)}...`}function Is(s){const t=(s.queue_url||"").trim();return t||"No queue configured"}function Bs(s,t){const n=Ze[s]||s,a=t.filter(d=>d.type===s).length+1;return`${n} #${a}`}const ts=`def bot(**kwargs) -> str | list[str] | None:
"""
Process messages and optionally return a reply.
@@ -46,5 +46,5 @@ import{c as Xe,r as o,s as ze,j as e,L as c,B as F,I as x,t as N,g as hs,T as gs
return "[BOT] Plong!"
return None`;function Je(s,t){return s==="connected"?t==="bot"||t==="webhook"||t==="apprise"?"Active":"Connected":s==="error"?"Error":s==="disconnected"?"Disconnected":"Inactive"}function Os(s,t){return t===!1?"bg-muted-foreground":s==="connected"?"bg-status-connected shadow-[0_0_6px_hsl(var(--status-connected)/0.5)]":s==="error"||s==="disconnected"?"bg-destructive shadow-[0_0_6px_hsl(var(--destructive)/0.5)]":"bg-muted-foreground"}function Us({config:s,scope:t,onChange:n,onScopeChange:a}){return e.jsxs("div",{className:"space-y-3",children:[e.jsx("p",{className:"text-xs text-muted-foreground",children:"Forward mesh data to your own MQTT broker for home automation, logging, or alerting."}),e.jsx("div",{className:"rounded-md border border-warning/50 bg-warning/10 px-3 py-2 text-xs text-warning",children:"Outgoing messages (DMs and group messages) will be reported to private MQTT brokers in decrypted/plaintext form."}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(c,{htmlFor:"fanout-mqtt-host",children:"Broker Host"}),e.jsx(x,{id:"fanout-mqtt-host",type:"text",placeholder:"e.g. 192.168.1.100",value:s.broker_host||"",onChange:d=>n({...s,broker_host:d.target.value})})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(c,{htmlFor:"fanout-mqtt-port",children:"Broker Port"}),e.jsx(x,{id:"fanout-mqtt-port",type:"number",min:"1",max:"65535",value:s.broker_port||1883,onChange:d=>n({...s,broker_port:parseInt(d.target.value,10)||1883})})]})]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(c,{htmlFor:"fanout-mqtt-user",children:"Username"}),e.jsx(x,{id:"fanout-mqtt-user",type:"text",placeholder:"Optional",value:s.username||"",onChange:d=>n({...s,username:d.target.value})})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(c,{htmlFor:"fanout-mqtt-pass",children:"Password"}),e.jsx(x,{id:"fanout-mqtt-pass",type:"password",placeholder:"Optional",value:s.password||"",onChange:d=>n({...s,password:d.target.value})})]})]}),e.jsxs("label",{className:"flex items-center gap-3 cursor-pointer",children:[e.jsx("input",{type:"checkbox",checked:!!s.use_tls,onChange:d=>n({...s,use_tls:d.target.checked}),className:"h-4 w-4 rounded border-border"}),e.jsx("span",{className:"text-sm",children:"Use TLS"})]}),!!s.use_tls&&e.jsxs("label",{className:"flex items-center gap-3 cursor-pointer ml-7",children:[e.jsx("input",{type:"checkbox",checked:!!s.tls_insecure,onChange:d=>n({...s,tls_insecure:d.target.checked}),className:"h-4 w-4 rounded border-border"}),e.jsx("span",{className:"text-sm",children:"Skip certificate verification"})]}),e.jsx(b,{}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(c,{htmlFor:"fanout-mqtt-prefix",children:"Topic Prefix"}),e.jsx(x,{id:"fanout-mqtt-prefix",type:"text",value:s.topic_prefix||"meshcore",onChange:d=>n({...s,topic_prefix:d.target.value})})]}),e.jsx(b,{}),e.jsx(de,{scope:t,onChange:a,showRawPackets:!0})]})}function Hs({config:s,onChange:t}){const n=s.auth_mode||ss;return e.jsxs("div",{className:"space-y-3",children:[e.jsx("p",{className:"text-xs text-muted-foreground",children:"Share raw packet data with the MeshCore community for coverage mapping and network analysis. Only raw RF packets are shared — never decrypted messages."}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(c,{htmlFor:"fanout-comm-host",children:"Broker Host"}),e.jsx(x,{id:"fanout-comm-host",type:"text",placeholder:oe,value:s.broker_host||oe,onChange:a=>t({...s,broker_host:a.target.value})})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(c,{htmlFor:"fanout-comm-port",children:"Broker Port"}),e.jsx(x,{id:"fanout-comm-port",type:"number",min:"1",max:"65535",value:s.broker_port||ce,onChange:a=>t({...s,broker_port:parseInt(a.target.value,10)||ce})})]})]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(c,{htmlFor:"fanout-comm-transport",children:"Transport"}),e.jsxs("select",{id:"fanout-comm-transport",value:s.transport||es,onChange:a=>t({...s,transport:a.target.value}),className:"w-full rounded-md border border-input bg-background px-3 py-2 text-sm",children:[e.jsx("option",{value:"websockets",children:"WebSockets"}),e.jsx("option",{value:"tcp",children:"TCP"})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(c,{htmlFor:"fanout-comm-auth-mode",children:"Authentication"}),e.jsxs("select",{id:"fanout-comm-auth-mode",value:n,onChange:a=>t({...s,auth_mode:a.target.value}),className:"w-full rounded-md border border-input bg-background px-3 py-2 text-sm",children:[e.jsx("option",{value:"token",children:"Token"}),e.jsx("option",{value:"none",children:"None"}),e.jsx("option",{value:"password",children:"Username / Password"})]})]})]}),e.jsxs("p",{className:"text-xs text-muted-foreground",children:["LetsMes Line truncated
slack://token_a/token_b/token_c
tgram://bot_token/chat_id`,value:s.urls||"",onChange:d=>n({...s,urls:d.target.value}),rows:4}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"One URL per line. All URLs receive every matched notification."})]}),e.jsxs("label",{className:"flex items-center gap-3 cursor-pointer",children:[e.jsx("input",{type:"checkbox",checked:s.preserve_identity!==!1,onChange:d=>n({...s,preserve_identity:d.target.checked}),className:"h-4 w-4 rounded border-border"}),e.jsxs("div",{children:[e.jsx("span",{className:"text-sm",children:"Preserve identity on Discord"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"When enabled, Discord webhooks will use their configured name/avatar instead of overriding with MeshCore sender info."})]})]}),e.jsxs("label",{className:"flex items-center gap-3 cursor-pointer",children:[e.jsx("input",{type:"checkbox",checked:s.include_path!==!1,onChange:d=>n({...s,include_path:d.target.checked}),className:"h-4 w-4 rounded border-border"}),e.jsx("span",{className:"text-sm",children:"Include routing path in notifications"})]}),e.jsx(b,{}),e.jsx(de,{scope:t,onChange:a})]})}function Ws({config:s,scope:t,onChange:n,onScopeChange:a}){const d=JSON.stringify(s.headers??{},null,2),[w,S]=o.useState(d),[j,_]=o.useState(null),h=p=>{S(p);try{const v=JSON.parse(p);if(typeof v!="object"||Array.isArray(v)){_("Must be a JSON object");return}_(null),n({...s,headers:v})}catch{_("Invalid JSON")}};return e.jsxs("div",{className:"space-y-3",children:[e.jsx("p",{className:"text-xs text-muted-foreground",children:"Send message data as JSON to an HTTP endpoint when messages are received."}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(c,{htmlFor:"fanout-webhook-url",children:"URL"}),e.jsx(x,{id:"fanout-webhook-url",type:"url",placeholder:"https://example.com/webhook",value:s.url||"",onChange:p=>n({...s,url:p.target.value})})]}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:e.jsxs("div",{className:"space-y-2",children:[e.jsx(c,{htmlFor:"fanout-webhook-method",children:"HTTP Method"}),e.jsxs("select",{id:"fanout-webhook-method",value:s.method||"POST",onChange:p=>n({...s,method:p.target.value}),className:"w-full rounded-md border border-input bg-background px-3 py-2 text-sm",children:[e.jsx("option",{value:"POST",children:"POST"}),e.jsx("option",{value:"PUT",children:"PUT"}),e.jsx("option",{value:"PATCH",children:"PATCH"})]})]})}),e.jsx(b,{}),e.jsxs("div",{className:"space-y-3",children:[e.jsx(c,{children:"HMAC Signing"}),e.jsxs("p",{className:"text-xs text-muted-foreground",children:["When a secret is set, each request includes an HMAC-SHA256 signature of the JSON body in the specified header (e.g. ",e.jsx("code",{className:"bg-muted px-1 rounded",children:"sha256=ab12cd..."}),")."]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(c,{htmlFor:"fanout-webhook-hmac-secret",children:"HMAC Secret"}),e.jsx(x,{id:"fanout-webhook-hmac-secret",type:"password",placeholder:"Leave empty to disable signing",value:s.hmac_secret||"",onChange:p=>n({...s,hmac_secret:p.target.value})})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(c,{htmlFor:"fanout-webhook-hmac-header",children:"Signature Header Name"}),e.jsx(x,{id:"fanout-webhook-hmac-header",type:"text",placeholder:"X-Webhook-Signature",value:s.hmac_header||"",onChange:p=>n({...s,hmac_header:p.target.value})})]})]})]}),e.jsx(b,{}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(c,{htmlFor:"fanout-webhook-headers",children:"Extra Headers (JSON)"}),e.jsx("textarea",{id:"fanout-webhook-headers",className:"w-full rounded-md border border-input bg-background px-3 py-2 text-sm font-mono min-h-[60px]",value:w,onChange:p=>h(p.target.value),placeholder:'{"Authorization": "Bearer ..."}'}),j&&e.jsx("p",{className:"text-xs text-destructive",children:j})]}),e.jsx(b,{}),e.jsx(de,{scope:t,onChange:a})]})}function Gs({config:s,scope:t,onChange:n,onScopeChange:a}){return e.jsxs("div",{className:"space-y-3",children:[e.jsx("p",{className:"text-xs text-muted-foreground",children:"Send matched mesh events to an Amazon SQS queue for durable processing by workers, Lambdas, or downstream automation."}),e.jsx("div",{className:"rounded-md border border-warning/50 bg-warning/10 px-3 py-2 text-xs text-warning",children:"Outgoing messages and any selected raw packets will be delivered exactly as forwarded by the fanout scope, including decrypted/plaintext message content."}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(c,{htmlFor:"fanout-sqs-queue-url",children:"Queue URL"}),e.jsx(x,{id:"fanout-sqs-queue-url",type:"url",placeholder:"https://sqs.us-east-1.amazonaws.com/123456789012/mesh-events",value:s.queue_url||"",onChange:d=>n({...s,queue_url:d.target.value})})]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(c,{htmlFor:"fanout-sqs-region",children:"Region (optional)"}),e.jsx(x Line truncated
//# sourceMappingURL=SettingsModal-D8B2Xdsr.js.map
tgram://bot_token/chat_id`,value:s.urls||"",onChange:d=>n({...s,urls:d.target.value}),rows:4}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"One URL per line. All URLs receive every matched notification."})]}),e.jsxs("label",{className:"flex items-center gap-3 cursor-pointer",children:[e.jsx("input",{type:"checkbox",checked:s.preserve_identity!==!1,onChange:d=>n({...s,preserve_identity:d.target.checked}),className:"h-4 w-4 rounded border-border"}),e.jsxs("div",{children:[e.jsx("span",{className:"text-sm",children:"Preserve identity on Discord"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"When enabled, Discord webhooks will use their configured name/avatar instead of overriding with MeshCore sender info."})]})]}),e.jsxs("label",{className:"flex items-center gap-3 cursor-pointer",children:[e.jsx("input",{type:"checkbox",checked:s.include_path!==!1,onChange:d=>n({...s,include_path:d.target.checked}),className:"h-4 w-4 rounded border-border"}),e.jsx("span",{className:"text-sm",children:"Include routing path in notifications"})]}),e.jsx(b,{}),e.jsx(de,{scope:t,onChange:a})]})}function Ws({config:s,scope:t,onChange:n,onScopeChange:a}){const d=JSON.stringify(s.headers??{},null,2),[w,S]=o.useState(d),[j,_]=o.useState(null),h=p=>{S(p);try{const v=JSON.parse(p);if(typeof v!="object"||Array.isArray(v)){_("Must be a JSON object");return}_(null),n({...s,headers:v})}catch{_("Invalid JSON")}};return e.jsxs("div",{className:"space-y-3",children:[e.jsx("p",{className:"text-xs text-muted-foreground",children:"Send message data as JSON to an HTTP endpoint when messages are received."}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(c,{htmlFor:"fanout-webhook-url",children:"URL"}),e.jsx(x,{id:"fanout-webhook-url",type:"url",placeholder:"https://example.com/webhook",value:s.url||"",onChange:p=>n({...s,url:p.target.value})})]}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:e.jsxs("div",{className:"space-y-2",children:[e.jsx(c,{htmlFor:"fanout-webhook-method",children:"HTTP Method"}),e.jsxs("select",{id:"fanout-webhook-method",value:s.method||"POST",onChange:p=>n({...s,method:p.target.value}),className:"w-full rounded-md border border-input bg-background px-3 py-2 text-sm",children:[e.jsx("option",{value:"POST",children:"POST"}),e.jsx("option",{value:"PUT",children:"PUT"}),e.jsx("option",{value:"PATCH",children:"PATCH"})]})]})}),e.jsx(b,{}),e.jsxs("div",{className:"space-y-3",children:[e.jsx(c,{children:"HMAC Signing"}),e.jsxs("p",{className:"text-xs text-muted-foreground",children:["When a secret is set, each request includes an HMAC-SHA256 signature of the JSON body in the specified header (e.g. ",e.jsx("code",{className:"bg-muted px-1 rounded",children:"sha256=ab12cd..."}),")."]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(c,{htmlFor:"fanout-webhook-hmac-secret",children:"HMAC Secret"}),e.jsx(x,{id:"fanout-webhook-hmac-secret",type:"password",placeholder:"Leave empty to disable signing",value:s.hmac_secret||"",onChange:p=>n({...s,hmac_secret:p.target.value})})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(c,{htmlFor:"fanout-webhook-hmac-header",children:"Signature Header Name"}),e.jsx(x,{id:"fanout-webhook-hmac-header",type:"text",placeholder:"X-Webhook-Signature",value:s.hmac_header||"",onChange:p=>n({...s,hmac_header:p.target.value})})]})]})]}),e.jsx(b,{}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(c,{htmlFor:"fanout-webhook-headers",children:"Extra Headers (JSON)"}),e.jsx("textarea",{id:"fanout-webhook-headers",className:"w-full rounded-md border border-input bg-background px-3 py-2 text-sm font-mono min-h-[60px]",value:w,onChange:p=>h(p.target.value),placeholder:'{"Authorization": "Bearer ..."}'}),j&&e.jsx("p",{className:"text-xs text-destructive",children:j})]}),e.jsx(b,{}),e.jsx(de,{scope:t,onChange:a})]})}function Gs({config:s,scope:t,onChange:n,onScopeChange:a}){return e.jsxs("div",{className:"space-y-3",children:[e.jsx("p",{className:"text-xs text-muted-foreground",children:"Send matched mesh events to an Amazon SQS queue for durable processing by workers, Lambdas, or downstream automation."}),e.jsx("div",{className:"rounded-md border border-warning/50 bg-warning/10 px-3 py-2 text-xs text-warning",children:"Outgoing messages and any selected raw packets will be delivered exactly as forwarded by the fanout scope, including decrypted/plaintext message content."}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(c,{htmlFor:"fanout-sqs-queue-url",children:"Queue URL"}),e.jsx(x,{id:"fanout-sqs-queue-url",type:"url",placeholder:"https://sqs.us-east-1.amazonaws.com/123456789012/mesh-events",value:s.queue_url||"",onChange:d=>n({...s,queue_url:d.target.value})})]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(c,{htmlFor:"fanout-sqs-region",children:"Region (optional)"}),e.jsx(x Line truncated
//# sourceMappingURL=SettingsModal-BPGiDC12.js.map
@@ -1 +1 @@
{"version":3,"mappings":"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 truncated
{"version":3,"mappings":"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 truncated
@@ -1,4 +1,4 @@
import{c as ql,V as Qc,W as ft,U as Xs,j as J,X as an,r as he,Y as eu,k as tu,Z as nu,$ as iu,a0 as _o,a1 as xo,a2 as vo,l as Mo}from"./index-pnVde5Cl.js";/**
import{c as ql,V as Qc,W as ft,U as Xs,j as J,X as an,r as he,Y as eu,k as tu,Z as nu,$ as iu,a0 as _o,a1 as xo,a2 as vo,l as Mo}from"./index-Fnq3QmNw.js";/**
* @license lucide-react v0.562.0 - ISC
*
* This source code is licensed under the ISC license.
@@ -4027,4 +4027,4 @@ void main() {
}
}`;class f0{constructor(){this.texture=null,this.mesh=null,this.depthNear=0,this.depthFar=0}init(e,t){if(this.texture===null){const i=new Oc(e.texture);(e.depthNear!==t.depthNear||e.depthFar!==t.depthFar)&&(this.depthNear=e.depthNear,this.depthFar=e.depthFar),this.texture=i}}getMesh(e){if(this.texture!==null&&this.mesh===null){const t=e.cameras[0].viewport,i=new mn({vertexShader:u0,fragmentShader:h0,uniforms:{depthColor:{value:this.texture},depthWidth:{value:t.z},depthHeight:{value:t.w}}});this.mesh=new pn(new rs(20,20),i)}return this.mesh}reset(){this.texture=null,this.mesh=null}getDepthTexture(){return this.texture}}class d0 extends ni{constructor(e,t){super();const i=this;let r=null,s=1,a=null,o="local-floor",l=1,c=null,h=null,f=null,d=null,m=null,g=null;const x=typeof XRWebGLBinding<"u",p=new f0,u={},y=t.getContextAttributes();let v=null,M=null;const b=[],w=[],R=new Ge;let I=null;const S=new Zt;S.viewport=new mt;const T=new Zt;T.viewport=new mt;const P=[S,T],B=new Sd;let z=null,j=null;this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(Y){let Q=b[Y];return Q===void 0&&(Q=new Is,b[Y]=Q),Q.getTargetRaySpace()},this.getControllerGrip=function(Y){let Q=b[Y];return Q===void 0&&(Q=new Is,b[Y]=Q),Q.getGripSpace()},this.getHand=function(Y){let Q=b[Y];return Q===void 0&&(Q=new Is,b[Y]=Q),Q.getHandSpace()};function K(Y){const Q=w.indexOf(Y.inputSource);if(Q===-1)return;const ge=b[Q];ge!==void 0&&(ge.update(Y.inputSource,Y.frame,c||a),ge.dispatchEvent({type:Y.type,data:Y.inputSource}))}function L(){r.removeEventListener("select",K),r.removeEventListener("selectstart",K),r.removeEventListener("selectend",K),r.removeEventListener("squeeze",K),r.removeEventListener("squeezestart",K),r.removeEventListener("squeezeend",K),r.removeEventListener("end",L),r.removeEventListener("inputsourceschange",k);for(let Y=0;Y<b.length;Y++){const Q=w[Y];Q!==null&&(w[Y]=null,b[Y].disconnect(Q))}z=null,j=null,p.reset();for(const Y in u)delete u[Y];e.setRenderTarget(v),m=null,d=null,f=null,r=null,M=null,Se.stop(),i.isPresenting=!1,e.setPixelRatio(I),e.setSize(R.width,R.height,!1),i.dispatchEvent({type:"sessionend"})}this.setFramebufferScaleFactor=function(Y){s=Y,i.isPresenting===!0&&Be("WebXRManager: Cannot change framebuffer scale while presenting.")},this.setReferenceSpaceType=function(Y){o=Y,i.isPresenting===!0&&Be("WebXRManager: Cannot change reference space type while presenting.")},this.getReferenceSpace=function(){return c||a},this.setReferenceSpace=function(Y){c=Y},this.getBaseLayer=function(){return d!==null?d:m},this.getBinding=function(){return f===null&&x&&(f=new XRWebGLBinding(r,t)),f},this.getFrame=function(){return g},this.getSession=function(){return r},this.setSession=async function(Y){if(r=Y,r!==null){if(v=e.getRenderTarget(),r.addEventListener("select",K),r.addEventListener("selectstart",K),r.addEventListener("selectend",K),r.addEventListener("squeeze",K),r.addEventListener("squeezestart",K),r.addEventListener("squeezeend",K),r.addEventListener("end",L),r.addEventListener("inputsourceschange",k),y.xrCompatible!==!0&&await t.makeXRCompatible(),I=e.getPixelRatio(),e.getSize(R),x&&"createProjectionLayer"in XRWebGLBinding.prototype){let ge=null,Ce=null,le=null;y.depth&&(le=y.stencil?t.DEPTH24_STENCIL8:t.DEPTH_COMPONENT24,ge=y.stencil?Jn:Cn,Ce=y.stencil?Ji:dn);const De={colorFormat:t.RGBA8,depthFormat:le,scaleFactor:s};f=this.getBinding(),d=f.createProjectionLayer(De),r.updateRenderState({layers:[d]}),e.setPixelRatio(1),e.setSize(d.textureWidth,d.textureHeight,!1),M=new fn(d.textureWidth,d.textureHeight,{format:rn,type:Jt,depthTexture:new er(d.textureWidth,d.textureHeight,Ce,void 0,void 0,void 0,void 0,void 0,void 0,ge),stencilBuffer:y.stencil,colorSpace:e.outputColorSpace,samples:y.antialias?4:0,resolveDepthBuffer:d.ignoreDepthValues===!1,resolveStencilBuffer:d.ignoreDepthValues===!1})}else{const ge={antialias:y.antialias,alpha:!0,depth:y.depth,stencil:y.stencil,framebufferScaleFactor:s};m=new XRWebGLLayer(r,t,ge),r.updateRenderState({baseLayer:m}),e.setPixelRatio(1),e.setSize(m.framebufferWidth,m.framebufferHeight,!1),M=new fn(m.framebufferWidth,m.framebufferHeight,{format:rn,type:Jt,colorSpace:e.outputColorSpace,stencilBuffer:y.stencil,resolveDepthBuffer:m.ignoreDepthValues===!1,resolveStencilBuffer:m.ignoreDepthValues===!1})}M.isXRRenderTarget=!0,this.setFoveation(l),c=null,a=await r.requestReferenceSpace(o),Se.setContext(r),Se.start(),i.isPresenting=!0,i.dispatchEvent({type:"sessionstart"})}},this.getEnvironmentBlendMode=function(){if(r!==null)return r.environmentBlendMode},this.getDepthTexture=function(){return p.getDepthTexture()};function k(Y){for(let Q=0;Q<Y.removed.length;Q++){const ge=Y.removed[Q],Ce=w.indexOf(ge);Ce>=0&&(w[Ce]=null,b[Ce].disconnect(ge))}for(let Q=0;Q<Y.added.length;Q++){const ge=Y.added[Q];let Ce=w.indexOf(ge);if(Ce===-1){for(let De=0;De<b.length;De++)if(De>=w.length){w.push(ge),Ce=De;break}else if(w[De]===null){w[De]=ge,Ce=De;break}if(Ce===-1)break}const l Line truncated
//# sourceMappingURL=VisualizerView-DHGA0_mI.js.map
//# sourceMappingURL=VisualizerView-Cv9KCsSr.js.map
@@ -1 +1 @@
{"version":3,"file":"VisualizerView-DHGA0_mI.js","sources":["../../node_modules/lucide-react/dist/esm/icons/maximize-2.js","../../node_modules/lucide-react/dist/esm/icons/minimize-2.js","../../src/utils/visualizerSettings.ts","../../src/utils/visualizerUtils.ts","../../src/components/visualizer/shared.ts","../../src/components/visualizer/VisualizerControls.tsx","../../src/components/visualizer/VisualizerTooltip.tsx","../../node_modules/d3-force-3d/src/center.js","../../node_modules/d3-binarytree/src/add.js","../../node_modules/d3-binarytree/src/cover.js","../../node_modules/d3-binarytree/src/data.js","../../node_modules/d3-binarytree/src/extent.js","../../node_modules/d3-binarytree/src/half.js","../../node_modules/d3-binarytree/src/find.js","../../node_modules/d3-binarytree/src/remove.js","../../node_modules/d3-binarytree/src/root.js","../../node_modules/d3-binarytree/src/size.js","../../node_modules/d3-binarytree/src/visit.js","../../node_modules/d3-binarytree/src/visitAfter.js","../../node_modules/d3-binarytree/src/x.js","../../node_modules/d3-binarytree/src/binarytree.js","../../node_modules/d3-quadtree/src/add.js","../../node_modules/d3-quadtree/src/cover.js","../../node_modules/d3-quadtree/src/data.js","../../node_modules/d3-quadtree/src/extent.js","../../node_modules/d3-quadtree/src/quad.js","../../node_modules/d3-quadtree/src/find.js","../../node_modules/d3-quadtree/src/remove.js","../../node_modules/d3-quadtree/src/root.js","../../node_modules/d3-quadtree/src/size.js","../../node_modules/d3-quadtree/src/visit.js","../../node_modules/d3-quadtree/src/visitAfter.js","../../node_modules/d3-quadtree/src/x.js","../../node_modules/d3-quadtree/src/y.js","../../node_modules/d3-quadtree/src/quadtree.js","../../node_modules/d3-octree/src/add.js","../../node_modules/d3-octree/src/cover.js","../../node_modules/d3-octree/src/data.js","../../node_modules/d3-octree/src/extent.js","../../node_modules/d3-octree/src/octant.js","../../node_modules/d3-octree/src/find.js","../../node_modules/d3-octree/src/findAll.js","../../node_modules/d3-octree/src/remove.js","../../node_modules/d3-octree/src/root.js","../../node_modules/d3-octree/src/size.js","../../node_modules/d3-octree/src/visit.js","../../node_modules/d3-octree/src/visitAfter.js","../../node_modules/d3-octree/src/x.js","../../node_modules/d3-octree/src/y.js","../../node_modules/d3-octree/src/z.js","../../node_modules/d3-octree/src/octree.js","../../node_modules/d3-force-3d/src/constant.js","../../node_modules/d3-force-3d/src/jiggle.js","../../node_modules/d3-force-3d/src/link.js","../../node_modules/d3-dispatch/src/dispatch.js","../../node_modules/d3-timer/src/timer.js","../../node_modules/d3-force-3d/src/lcg.js","../../node_modules/d3-force-3d/src/simulation.js","../../node_modules/d3-force-3d/src/manyBody.js","../../node_modules/d3-force-3d/src/x.js","../../node_modules/d3-force-3d/src/y.js","../../node_modules/d3-force-3d/src/z.js","../../src/networkGraph/packetNetworkGraph.ts","../../src/components/visualizer/useVisualizerData3D.ts","../../node_modules/three/build/three.core.js","../../node_modules/three/build/three.module.js","../../node_modules/three/examples/jsm/controls/OrbitControls.js","../../node_modules/three/examples/jsm/renderers/CSS2DRenderer.js","../../src/components/visualizer/useVisualizer3DScene.ts","../../src/components/PacketVisualizer3D.tsx","../../src/components/VisualizerView.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.562.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M15 3h6v6\", key: \"1q9fwt\" }],\n [\"path\", { d: \"m21 3-7 7\", key: \"1l2asr\" }],\n [\"path\", { d: \"m3 21 7-7\", key: \"tjx5ai\" }],\n [\"path\", { d: \"M9 21H3v-6\", key: \"wtvkvv\" }]\n];\nconst Maximize2 = createLucideIcon(\"maximize-2\", __iconNode);\n\nexport { __iconNode, Maximize2 as default };\n//# sourceMappingURL=maximize-2.js.map\n","/**\n * @license lucide-react v0.562.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"m14 10 7-7\", key: \"oa77jy\" }],\n [\"path\", { d: \"M20 10h-6V4\", key: \"mjg0md\" }],\n [\"path\", { d: \"m3 21 7-7\", key: \"tjx5ai\" }],\n [\"path\", { d: \"M4 14h6v6\", key: \"rmj7iw\" }]\n];\nconst Minimize2 = createLucideIcon(\"minimize-2\", __iconNode);\n\nexport { __iconNode, Minimize2 as default };\n//# sourceMappingURL=minimize-2.js.map\n","const VISUALIZER_SETTINGS_KEY = 'remoteterm-visualizer-settings';\n\nexport interface VisualizerSettings {\n showAmbiguousPaths: boolean;\n showAmbiguousNodes: boolean;\n useAdvertPathHints: boolean;\n collapseLikelyKnownSiblingRepeaters: boolean;\n splitAmbiguousByTraffic: boolean;\n cLine truncated
{"version":3,"file":"VisualizerView-Cv9KCsSr.js","sources":["../../node_modules/lucide-react/dist/esm/icons/maximize-2.js","../../node_modules/lucide-react/dist/esm/icons/minimize-2.js","../../src/utils/visualizerSettings.ts","../../src/utils/visualizerUtils.ts","../../src/components/visualizer/shared.ts","../../src/components/visualizer/VisualizerControls.tsx","../../src/components/visualizer/VisualizerTooltip.tsx","../../node_modules/d3-force-3d/src/center.js","../../node_modules/d3-binarytree/src/add.js","../../node_modules/d3-binarytree/src/cover.js","../../node_modules/d3-binarytree/src/data.js","../../node_modules/d3-binarytree/src/extent.js","../../node_modules/d3-binarytree/src/half.js","../../node_modules/d3-binarytree/src/find.js","../../node_modules/d3-binarytree/src/remove.js","../../node_modules/d3-binarytree/src/root.js","../../node_modules/d3-binarytree/src/size.js","../../node_modules/d3-binarytree/src/visit.js","../../node_modules/d3-binarytree/src/visitAfter.js","../../node_modules/d3-binarytree/src/x.js","../../node_modules/d3-binarytree/src/binarytree.js","../../node_modules/d3-quadtree/src/add.js","../../node_modules/d3-quadtree/src/cover.js","../../node_modules/d3-quadtree/src/data.js","../../node_modules/d3-quadtree/src/extent.js","../../node_modules/d3-quadtree/src/quad.js","../../node_modules/d3-quadtree/src/find.js","../../node_modules/d3-quadtree/src/remove.js","../../node_modules/d3-quadtree/src/root.js","../../node_modules/d3-quadtree/src/size.js","../../node_modules/d3-quadtree/src/visit.js","../../node_modules/d3-quadtree/src/visitAfter.js","../../node_modules/d3-quadtree/src/x.js","../../node_modules/d3-quadtree/src/y.js","../../node_modules/d3-quadtree/src/quadtree.js","../../node_modules/d3-octree/src/add.js","../../node_modules/d3-octree/src/cover.js","../../node_modules/d3-octree/src/data.js","../../node_modules/d3-octree/src/extent.js","../../node_modules/d3-octree/src/octant.js","../../node_modules/d3-octree/src/find.js","../../node_modules/d3-octree/src/findAll.js","../../node_modules/d3-octree/src/remove.js","../../node_modules/d3-octree/src/root.js","../../node_modules/d3-octree/src/size.js","../../node_modules/d3-octree/src/visit.js","../../node_modules/d3-octree/src/visitAfter.js","../../node_modules/d3-octree/src/x.js","../../node_modules/d3-octree/src/y.js","../../node_modules/d3-octree/src/z.js","../../node_modules/d3-octree/src/octree.js","../../node_modules/d3-force-3d/src/constant.js","../../node_modules/d3-force-3d/src/jiggle.js","../../node_modules/d3-force-3d/src/link.js","../../node_modules/d3-dispatch/src/dispatch.js","../../node_modules/d3-timer/src/timer.js","../../node_modules/d3-force-3d/src/lcg.js","../../node_modules/d3-force-3d/src/simulation.js","../../node_modules/d3-force-3d/src/manyBody.js","../../node_modules/d3-force-3d/src/x.js","../../node_modules/d3-force-3d/src/y.js","../../node_modules/d3-force-3d/src/z.js","../../src/networkGraph/packetNetworkGraph.ts","../../src/components/visualizer/useVisualizerData3D.ts","../../node_modules/three/build/three.core.js","../../node_modules/three/build/three.module.js","../../node_modules/three/examples/jsm/controls/OrbitControls.js","../../node_modules/three/examples/jsm/renderers/CSS2DRenderer.js","../../src/components/visualizer/useVisualizer3DScene.ts","../../src/components/PacketVisualizer3D.tsx","../../src/components/VisualizerView.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.562.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M15 3h6v6\", key: \"1q9fwt\" }],\n [\"path\", { d: \"m21 3-7 7\", key: \"1l2asr\" }],\n [\"path\", { d: \"m3 21 7-7\", key: \"tjx5ai\" }],\n [\"path\", { d: \"M9 21H3v-6\", key: \"wtvkvv\" }]\n];\nconst Maximize2 = createLucideIcon(\"maximize-2\", __iconNode);\n\nexport { __iconNode, Maximize2 as default };\n//# sourceMappingURL=maximize-2.js.map\n","/**\n * @license lucide-react v0.562.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"m14 10 7-7\", key: \"oa77jy\" }],\n [\"path\", { d: \"M20 10h-6V4\", key: \"mjg0md\" }],\n [\"path\", { d: \"m3 21 7-7\", key: \"tjx5ai\" }],\n [\"path\", { d: \"M4 14h6v6\", key: \"rmj7iw\" }]\n];\nconst Minimize2 = createLucideIcon(\"minimize-2\", __iconNode);\n\nexport { __iconNode, Minimize2 as default };\n//# sourceMappingURL=minimize-2.js.map\n","const VISUALIZER_SETTINGS_KEY = 'remoteterm-visualizer-settings';\n\nexport interface VisualizerSettings {\n showAmbiguousPaths: boolean;\n showAmbiguousNodes: boolean;\n useAdvertPathHints: boolean;\n collapseLikelyKnownSiblingRepeaters: boolean;\n splitAmbiguousByTraffic: boolean;\n cLine truncated
@@ -1,2 +0,0 @@
import"./index-pnVde5Cl.js";import{u as t}from"./leaflet-By4Srz79.js";function r(){return t().map}export{r as u};
//# sourceMappingURL=hooks-BCaVWsWl.js.map
@@ -0,0 +1,2 @@
import"./index-Fnq3QmNw.js";import{u as t}from"./leaflet-ENrCR1B4.js";function r(){return t().map}export{r as u};
//# sourceMappingURL=hooks-LL30L9PN.js.map
@@ -1 +1 @@
{"version":3,"file":"hooks-BCaVWsWl.js","sources":["../../node_modules/react-leaflet/lib/hooks.js"],"sourcesContent":["import { useLeafletContext } from '@react-leaflet/core';\nimport { useEffect } from 'react';\nexport function useMap() {\n return useLeafletContext().map;\n}\nexport function useMapEvent(type, handler) {\n const map = useMap();\n useEffect(function addMapEventHandler() {\n // @ts-ignore event type\n map.on(type, handler);\n return function removeMapEventHandler() {\n // @ts-ignore event type\n map.off(type, handler);\n };\n }, [\n map,\n type,\n handler\n ]);\n return map;\n}\nexport function useMapEvents(handlers) {\n const map = useMap();\n useEffect(function addMapEventHandlers() {\n map.on(handlers);\n return function removeMapEventHandlers() {\n map.off(handlers);\n };\n }, [\n map,\n handlers\n ]);\n return map;\n}\n"],"names":["useMap","useLeafletContext"],"mappings":"sEAEO,SAASA,GAAS,CACrB,OAAOC,EAAiB,EAAG,GAC/B","x_google_ignoreList":[0]}
{"version":3,"file":"hooks-LL30L9PN.js","sources":["../../node_modules/react-leaflet/lib/hooks.js"],"sourcesContent":["import { useLeafletContext } from '@react-leaflet/core';\nimport { useEffect } from 'react';\nexport function useMap() {\n return useLeafletContext().map;\n}\nexport function useMapEvent(type, handler) {\n const map = useMap();\n useEffect(function addMapEventHandler() {\n // @ts-ignore event type\n map.on(type, handler);\n return function removeMapEventHandler() {\n // @ts-ignore event type\n map.off(type, handler);\n };\n }, [\n map,\n type,\n handler\n ]);\n return map;\n}\nexport function useMapEvents(handlers) {\n const map = useMap();\n useEffect(function addMapEventHandlers() {\n map.on(handlers);\n return function removeMapEventHandlers() {\n map.off(handlers);\n };\n }, [\n map,\n handlers\n ]);\n return map;\n}\n"],"names":["useMap","useLeafletContext"],"mappings":"sEAEO,SAASA,GAAS,CACrB,OAAOC,EAAiB,EAAG,GAC/B","x_google_ignoreList":[0]}
@@ -1,4 +1,4 @@
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/PathRouteMap-COU38t0B.js","assets/leaflet-By4Srz79.js","assets/leaflet-Dgihpmma.css","assets/hooks-BCaVWsWl.js","assets/RepeaterDashboard-CCs38SPq.js","assets/separator-CcV99KWD.js","assets/MapView-Bv8f-A5r.js","assets/Popup-CZeo1EzJ.js","assets/SettingsModal-D8B2Xdsr.js"])))=>i.map(i=>d[i]);
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/PathRouteMap-kT7xfoMb.js","assets/leaflet-ENrCR1B4.js","assets/leaflet-Dgihpmma.css","assets/hooks-LL30L9PN.js","assets/RepeaterDashboard-DtQKwbsT.js","assets/separator-BwjFWJb_.js","assets/MapView-D0gphXtL.js","assets/Popup-C-Q9ygBf.js","assets/SettingsModal-BPGiDC12.js"])))=>i.map(i=>d[i]);
var tg=Object.defineProperty;var ng=(t,r,s)=>r in t?tg(t,r,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[r]=s;var ho=(t,r,s)=>ng(t,typeof r!="symbol"?r+"":r,s);function rg(t,r){for(var s=0;s<r.length;s++){const a=r[s];if(typeof a!="string"&&!Array.isArray(a)){for(const i in a)if(i!=="default"&&!(i in t)){const l=Object.getOwnPropertyDescriptor(a,i);l&&Object.defineProperty(t,i,l.get?l:{enumerable:!0,get:()=>a[i]})}}}return Object.freeze(Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}))}(function(){const r=document.createElement("link").relList;if(r&&r.supports&&r.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))a(i);new MutationObserver(i=>{for(const l of i)if(l.type==="childList")for(const d of l.addedNodes)d.tagName==="LINK"&&d.rel==="modulepreload"&&a(d)}).observe(document,{childList:!0,subtree:!0});function s(i){const l={};return i.integrity&&(l.integrity=i.integrity),i.referrerPolicy&&(l.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?l.credentials="include":i.crossOrigin==="anonymous"?l.credentials="omit":l.credentials="same-origin",l}function a(i){if(i.ep)return;i.ep=!0;const l=s(i);fetch(i.href,l)}})();var Qu=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function cx(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}function ux(t){if(Object.prototype.hasOwnProperty.call(t,"__esModule"))return t;var r=t.default;if(typeof r=="function"){var s=function a(){return this instanceof a?Reflect.construct(r,arguments,this.constructor):r.apply(this,arguments)};s.prototype=r.prototype}else s={};return Object.defineProperty(s,"__esModule",{value:!0}),Object.keys(t).forEach(function(a){var i=Object.getOwnPropertyDescriptor(t,a);Object.defineProperty(s,a,i.get?i:{enumerable:!0,get:function(){return t[a]}})}),s}var Zu={exports:{}},la={},Ju={exports:{}},Ge={};/**
* @license React
* react.production.min.js
@@ -7,7 +7,7 @@ var tg=Object.defineProperty;var ng=(t,r,s)=>r in t?tg(t,r,{enumerable:!0,config
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/var Hh;function og(){if(Hh)return Ge;Hh=1;var t=Symbol.for("react.element"),r=Symbol.for("react.portal"),s=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),i=Symbol.for("react.profiler"),l=Symbol.for("react.provider"),d=Symbol.for("react.context"),u=Symbol.for("react.forward_ref"),p=Symbol.for("react.suspense"),f=Symbol.for("react.memo"),v=Symbol.for("react.lazy"),m=Symbol.iterator;function y(P){return P===null||typeof P!="object"?null:(P=m&&P[m]||P["@@iterator"],typeof P=="function"?P:null)}var w={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},C=Object.assign,_={};function b(P,z,I){this.props=P,this.context=z,this.refs=_,this.updater=I||w}b.prototype.isReactComponent={},b.prototype.setState=function(P,z){if(typeof P!="object"&&typeof P!="function"&&P!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,P,z,"setState")},b.prototype.forceUpdate=function(P){this.updater.enqueueForceUpdate(this,P,"forceUpdate")};function N(){}N.prototype=b.prototype;function A(P,z,I){this.props=P,this.context=z,this.refs=_,this.updater=I||w}var k=A.prototype=new N;k.constructor=A,C(k,b.prototype),k.isPureReactComponent=!0;var B=Array.isArray,S=Object.prototype.hasOwnProperty,R={current:null},T={key:!0,ref:!0,__self:!0,__source:!0};function F(P,z,I){var j,G={},J=null,ce=null;if(z!=null)for(j in z.ref!==void 0&&(ce=z.ref),z.key!==void 0&&(J=""+z.key),z)S.call(z,j)&&!T.hasOwnProperty(j)&&(G[j]=z[j]);var ne=arguments.length-2;if(ne===1)G.children=I;else if(1<ne){for(var ue=Array(ne),Se=0;Se<ne;Se++)ue[Se]=arguments[Se+2];G.children=ue}if(P&&P.defaultProps)for(j in ne=P.defaultProps,ne)G[j]===void 0&&(G[j]=ne[j]);return{$$typeof:t,type:P,key:J,ref:ce,props:G,_owner:R.current}}function L(P,z){return{$$typeof:t,type:P.type,key:z,ref:P.ref,props:P.props,_owner:P._owner}}function M(P){return typeof P=="object"&&P!==null&&P.$$typeof===t}function $(P){var z={"=":"=0",":":"=2"};return"$"+P.replace(/[=:]/g,function(I){return z[I]})}var U=/\/+/g;function q(P,z){return typeof P=="object"&&P!==null&&P.key!=null?$(""+P.key):z.toString(36)}function Y(P,z,I,j,G){var J=typeof P;(J==="undefined"||J==="boolean")&&(P=null);var ce=!1;if(P===null)ce=!0;else switch(J){case"string":case"number":ce=!0;break;case"object":switch(P.$$typeof){case t:case r:ce=!0}}if(ce)return ce=P,G=G(ce),P=j===""?"."+q(ce,0):j,B(G)?(I="",P!=null&&(I=P.replace(U,"$&/")+"/"),Y(G,z,I,"",function(Se){return Se})):G!=null&&(M(G)&&(G=L(G,I+(!G.key||ce&&ce.key===G.key?"":(""+G.key).replace(U,"$&/")+"/")+P)),z.push(G)),1;if(ce=0,j=j===""?".":j+":",B(P))for(var ne=0;ne<P.length;ne++){J=P[ne];var ue=j+q(J,ne);ce+=Y(J,z,I,ue,G)}else if(ue=y(P),typeof ue=="function")for(P=ue.call(P),ne=0;!(J=P.next()).done;)J=J.value,ue=j+q(J,ne++),ce+=Y(J,z,I,ue,G);else if(J==="object")throw z=String(P),Error("Objects are not valid as a React child (found: "+(z==="[object Object]"?"object with keys {"+Object.keys(P).join(", ")+"}":z)+"). If you meant to render a collection of children, use an array instead.");return ce}function ie(P,z,I){if(P==null)return P;var j=[],G=0;return Y(P,j,"","",function(J){return z.call(I,J,G++)}),j}function re(P){if(P._status===-1){var z=P._result;z=z(),z.then(function(I){(P._status===0||P._status===-1)&&(P._status=1,P._result=I)},function(I){(P._status===0||P._status===-1)&&(P._status=2,P._result=I)}),P._status===-1&&(P._status=0,P._result=z)}if(P._status===1)return P._result.default;throw P._result}var le={current:null},oe={transition:null},se={ReactCurrentDispatcher:le,ReactCurrentBatchConfig:oe,ReactCurrentOwner:R};function K(){throw Error("act(...) is not supported in production builds of React.")}return Ge.Children={map:ie,forEach:function(P,z,I){ie(P,function(){z.apply(this,arguments)},I)},count:function(P){var z=0;return ie(P,function(){z++}),z},toArray:function(P){return ie(P,function(z){return z})||[]},only:function(P){if(!M(P))throw Error("React.Children.only expected to receive a single React element child.");return P}},Ge.Component=b,Ge.Fragment=s,Ge.Profiler=i,Ge.PureComponent=A,Ge.StrictMode=a,Ge.Suspense=p,Ge.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=se,Ge.act=K,Ge.cloneElement=function(P,z,I){if(P==null)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+P+".");var j=C({},P.props),G=P.key,J=P.ref,ce=P._owner;if(z!=null){if(z.ref!==void 0&&(J=z.ref,ce=R.current),z.key!==void 0&&(G=""+z.key),P.type&&P.type.defaultProps)var ne=P.type.defaultProps;for(ue in z)S.call(z,ue)&&!T.hasOwnProperty(ue)&&(j[ue]=z[ue]===void 0&&ne!==void 0?ne[ue]:z[ue])}var ue=arguments.length-2;if(ue===1)j.children=I;else if(1<ue){ne=Array(ue);for(var Se=0;Se<ue;Se++)ne[Se]=arguments[Se+2];j.children=ne}return{$$typeof:t,type:P.type,key:G,ref:J,props:j,_owner:ce}},Ge.createContext=function(P){return P={$$typeof:d,_currentVaLine truncated
*/var Hh;function og(){if(Hh)return Ge;Hh=1;var t=Symbol.for("react.element"),r=Symbol.for("react.portal"),s=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),i=Symbol.for("react.profiler"),l=Symbol.for("react.provider"),d=Symbol.for("react.context"),u=Symbol.for("react.forward_ref"),p=Symbol.for("react.suspense"),f=Symbol.for("react.memo"),v=Symbol.for("react.lazy"),m=Symbol.iterator;function y(P){return P===null||typeof P!="object"?null:(P=m&&P[m]||P["@@iterator"],typeof P=="function"?P:null)}var w={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},C=Object.assign,_={};function b(P,z,I){this.props=P,this.context=z,this.refs=_,this.updater=I||w}b.prototype.isReactComponent={},b.prototype.setState=function(P,z){if(typeof P!="object"&&typeof P!="function"&&P!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,P,z,"setState")},b.prototype.forceUpdate=function(P){this.updater.enqueueForceUpdate(this,P,"forceUpdate")};function N(){}N.prototype=b.prototype;function A(P,z,I){this.props=P,this.context=z,this.refs=_,this.updater=I||w}var k=A.prototype=new N;k.constructor=A,C(k,b.prototype),k.isPureReactComponent=!0;var B=Array.isArray,S=Object.prototype.hasOwnProperty,R={current:null},T={key:!0,ref:!0,__self:!0,__source:!0};function D(P,z,I){var j,G={},J=null,ce=null;if(z!=null)for(j in z.ref!==void 0&&(ce=z.ref),z.key!==void 0&&(J=""+z.key),z)S.call(z,j)&&!T.hasOwnProperty(j)&&(G[j]=z[j]);var ne=arguments.length-2;if(ne===1)G.children=I;else if(1<ne){for(var ue=Array(ne),Se=0;Se<ne;Se++)ue[Se]=arguments[Se+2];G.children=ue}if(P&&P.defaultProps)for(j in ne=P.defaultProps,ne)G[j]===void 0&&(G[j]=ne[j]);return{$$typeof:t,type:P,key:J,ref:ce,props:G,_owner:R.current}}function L(P,z){return{$$typeof:t,type:P.type,key:z,ref:P.ref,props:P.props,_owner:P._owner}}function M(P){return typeof P=="object"&&P!==null&&P.$$typeof===t}function $(P){var z={"=":"=0",":":"=2"};return"$"+P.replace(/[=:]/g,function(I){return z[I]})}var U=/\/+/g;function q(P,z){return typeof P=="object"&&P!==null&&P.key!=null?$(""+P.key):z.toString(36)}function Y(P,z,I,j,G){var J=typeof P;(J==="undefined"||J==="boolean")&&(P=null);var ce=!1;if(P===null)ce=!0;else switch(J){case"string":case"number":ce=!0;break;case"object":switch(P.$$typeof){case t:case r:ce=!0}}if(ce)return ce=P,G=G(ce),P=j===""?"."+q(ce,0):j,B(G)?(I="",P!=null&&(I=P.replace(U,"$&/")+"/"),Y(G,z,I,"",function(Se){return Se})):G!=null&&(M(G)&&(G=L(G,I+(!G.key||ce&&ce.key===G.key?"":(""+G.key).replace(U,"$&/")+"/")+P)),z.push(G)),1;if(ce=0,j=j===""?".":j+":",B(P))for(var ne=0;ne<P.length;ne++){J=P[ne];var ue=j+q(J,ne);ce+=Y(J,z,I,ue,G)}else if(ue=y(P),typeof ue=="function")for(P=ue.call(P),ne=0;!(J=P.next()).done;)J=J.value,ue=j+q(J,ne++),ce+=Y(J,z,I,ue,G);else if(J==="object")throw z=String(P),Error("Objects are not valid as a React child (found: "+(z==="[object Object]"?"object with keys {"+Object.keys(P).join(", ")+"}":z)+"). If you meant to render a collection of children, use an array instead.");return ce}function ie(P,z,I){if(P==null)return P;var j=[],G=0;return Y(P,j,"","",function(J){return z.call(I,J,G++)}),j}function re(P){if(P._status===-1){var z=P._result;z=z(),z.then(function(I){(P._status===0||P._status===-1)&&(P._status=1,P._result=I)},function(I){(P._status===0||P._status===-1)&&(P._status=2,P._result=I)}),P._status===-1&&(P._status=0,P._result=z)}if(P._status===1)return P._result.default;throw P._result}var le={current:null},oe={transition:null},se={ReactCurrentDispatcher:le,ReactCurrentBatchConfig:oe,ReactCurrentOwner:R};function K(){throw Error("act(...) is not supported in production builds of React.")}return Ge.Children={map:ie,forEach:function(P,z,I){ie(P,function(){z.apply(this,arguments)},I)},count:function(P){var z=0;return ie(P,function(){z++}),z},toArray:function(P){return ie(P,function(z){return z})||[]},only:function(P){if(!M(P))throw Error("React.Children.only expected to receive a single React element child.");return P}},Ge.Component=b,Ge.Fragment=s,Ge.Profiler=i,Ge.PureComponent=A,Ge.StrictMode=a,Ge.Suspense=p,Ge.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=se,Ge.act=K,Ge.cloneElement=function(P,z,I){if(P==null)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+P+".");var j=C({},P.props),G=P.key,J=P.ref,ce=P._owner;if(z!=null){if(z.ref!==void 0&&(J=z.ref,ce=R.current),z.key!==void 0&&(G=""+z.key),P.type&&P.type.defaultProps)var ne=P.type.defaultProps;for(ue in z)S.call(z,ue)&&!T.hasOwnProperty(ue)&&(j[ue]=z[ue]===void 0&&ne!==void 0?ne[ue]:z[ue])}var ue=arguments.length-2;if(ue===1)j.children=I;else if(1<ue){ne=Array(ue);for(var Se=0;Se<ue;Se++)ne[Se]=arguments[Se+2];j.children=ne}return{$$typeof:t,type:P.type,key:G,ref:J,props:j,_owner:ce}},Ge.createContext=function(P){return P={$$typeof:d,_currentVaLine truncated
* @license React
* react-jsx-runtime.production.min.js
*
@@ -23,7 +23,7 @@ var tg=Object.defineProperty;var ng=(t,r,s)=>r in t?tg(t,r,{enumerable:!0,config
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/var Vh;function ig(){return Vh||(Vh=1,(function(t){function r(oe,se){var K=oe.length;oe.push(se);e:for(;0<K;){var P=K-1>>>1,z=oe[P];if(0<i(z,se))oe[P]=se,oe[K]=z,K=P;else break e}}function s(oe){return oe.length===0?null:oe[0]}function a(oe){if(oe.length===0)return null;var se=oe[0],K=oe.pop();if(K!==se){oe[0]=K;e:for(var P=0,z=oe.length,I=z>>>1;P<I;){var j=2*(P+1)-1,G=oe[j],J=j+1,ce=oe[J];if(0>i(G,K))J<z&&0>i(ce,G)?(oe[P]=ce,oe[J]=K,P=J):(oe[P]=G,oe[j]=K,P=j);else if(J<z&&0>i(ce,K))oe[P]=ce,oe[J]=K,P=J;else break e}}return se}function i(oe,se){var K=oe.sortIndex-se.sortIndex;return K!==0?K:oe.id-se.id}if(typeof performance=="object"&&typeof performance.now=="function"){var l=performance;t.unstable_now=function(){return l.now()}}else{var d=Date,u=d.now();t.unstable_now=function(){return d.now()-u}}var p=[],f=[],v=1,m=null,y=3,w=!1,C=!1,_=!1,b=typeof setTimeout=="function"?setTimeout:null,N=typeof clearTimeout=="function"?clearTimeout:null,A=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function k(oe){for(var se=s(f);se!==null;){if(se.callback===null)a(f);else if(se.startTime<=oe)a(f),se.sortIndex=se.expirationTime,r(p,se);else break;se=s(f)}}function B(oe){if(_=!1,k(oe),!C)if(s(p)!==null)C=!0,re(S);else{var se=s(f);se!==null&&le(B,se.startTime-oe)}}function S(oe,se){C=!1,_&&(_=!1,N(F),F=-1),w=!0;var K=y;try{for(k(se),m=s(p);m!==null&&(!(m.expirationTime>se)||oe&&!$());){var P=m.callback;if(typeof P=="function"){m.callback=null,y=m.priorityLevel;var z=P(m.expirationTime<=se);se=t.unstable_now(),typeof z=="function"?m.callback=z:m===s(p)&&a(p),k(se)}else a(p);m=s(p)}if(m!==null)var I=!0;else{var j=s(f);j!==null&&le(B,j.startTime-se),I=!1}return I}finally{m=null,y=K,w=!1}}var R=!1,T=null,F=-1,L=5,M=-1;function $(){return!(t.unstable_now()-M<L)}function U(){if(T!==null){var oe=t.unstable_now();M=oe;var se=!0;try{se=T(!0,oe)}finally{se?q():(R=!1,T=null)}}else R=!1}var q;if(typeof A=="function")q=function(){A(U)};else if(typeof MessageChannel<"u"){var Y=new MessageChannel,ie=Y.port2;Y.port1.onmessage=U,q=function(){ie.postMessage(null)}}else q=function(){b(U,0)};function re(oe){T=oe,R||(R=!0,q())}function le(oe,se){F=b(function(){oe(t.unstable_now())},se)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(oe){oe.callback=null},t.unstable_continueExecution=function(){C||w||(C=!0,re(S))},t.unstable_forceFrameRate=function(oe){0>oe||125<oe?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):L=0<oe?Math.floor(1e3/oe):5},t.unstable_getCurrentPriorityLevel=function(){return y},t.unstable_getFirstCallbackNode=function(){return s(p)},t.unstable_next=function(oe){switch(y){case 1:case 2:case 3:var se=3;break;default:se=y}var K=y;y=se;try{return oe()}finally{y=K}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=function(){},t.unstable_runWithPriority=function(oe,se){switch(oe){case 1:case 2:case 3:case 4:case 5:break;default:oe=3}var K=y;y=oe;try{return se()}finally{y=K}},t.unstable_scheduleCallback=function(oe,se,K){var P=t.unstable_now();switch(typeof K=="object"&&K!==null?(K=K.delay,K=typeof K=="number"&&0<K?P+K:P):K=P,oe){case 1:var z=-1;break;case 2:z=250;break;case 5:z=1073741823;break;case 4:z=1e4;break;default:z=5e3}return z=K+z,oe={id:v++,callback:se,priorityLevel:oe,startTime:K,expirationTime:z,sortIndex:-1},K>P?(oe.sortIndex=K,r(f,oe),s(p)===null&&oe===s(f)&&(_?(N(F),F=-1):_=!0,le(B,K-P))):(oe.sortIndex=z,r(p,oe),C||w||(C=!0,re(S))),oe},t.unstable_shouldYield=$,t.unstable_wrapCallback=function(oe){var se=y;return function(){var K=y;y=se;try{return oe.apply(this,arguments)}finally{y=K}}}})(n0)),n0}var Uh;function lg(){return Uh||(Uh=1,t0.exports=ig()),t0.exports}/**
*/var Vh;function ig(){return Vh||(Vh=1,(function(t){function r(oe,se){var K=oe.length;oe.push(se);e:for(;0<K;){var P=K-1>>>1,z=oe[P];if(0<i(z,se))oe[P]=se,oe[K]=z,K=P;else break e}}function s(oe){return oe.length===0?null:oe[0]}function a(oe){if(oe.length===0)return null;var se=oe[0],K=oe.pop();if(K!==se){oe[0]=K;e:for(var P=0,z=oe.length,I=z>>>1;P<I;){var j=2*(P+1)-1,G=oe[j],J=j+1,ce=oe[J];if(0>i(G,K))J<z&&0>i(ce,G)?(oe[P]=ce,oe[J]=K,P=J):(oe[P]=G,oe[j]=K,P=j);else if(J<z&&0>i(ce,K))oe[P]=ce,oe[J]=K,P=J;else break e}}return se}function i(oe,se){var K=oe.sortIndex-se.sortIndex;return K!==0?K:oe.id-se.id}if(typeof performance=="object"&&typeof performance.now=="function"){var l=performance;t.unstable_now=function(){return l.now()}}else{var d=Date,u=d.now();t.unstable_now=function(){return d.now()-u}}var p=[],f=[],v=1,m=null,y=3,w=!1,C=!1,_=!1,b=typeof setTimeout=="function"?setTimeout:null,N=typeof clearTimeout=="function"?clearTimeout:null,A=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function k(oe){for(var se=s(f);se!==null;){if(se.callback===null)a(f);else if(se.startTime<=oe)a(f),se.sortIndex=se.expirationTime,r(p,se);else break;se=s(f)}}function B(oe){if(_=!1,k(oe),!C)if(s(p)!==null)C=!0,re(S);else{var se=s(f);se!==null&&le(B,se.startTime-oe)}}function S(oe,se){C=!1,_&&(_=!1,N(D),D=-1),w=!0;var K=y;try{for(k(se),m=s(p);m!==null&&(!(m.expirationTime>se)||oe&&!$());){var P=m.callback;if(typeof P=="function"){m.callback=null,y=m.priorityLevel;var z=P(m.expirationTime<=se);se=t.unstable_now(),typeof z=="function"?m.callback=z:m===s(p)&&a(p),k(se)}else a(p);m=s(p)}if(m!==null)var I=!0;else{var j=s(f);j!==null&&le(B,j.startTime-se),I=!1}return I}finally{m=null,y=K,w=!1}}var R=!1,T=null,D=-1,L=5,M=-1;function $(){return!(t.unstable_now()-M<L)}function U(){if(T!==null){var oe=t.unstable_now();M=oe;var se=!0;try{se=T(!0,oe)}finally{se?q():(R=!1,T=null)}}else R=!1}var q;if(typeof A=="function")q=function(){A(U)};else if(typeof MessageChannel<"u"){var Y=new MessageChannel,ie=Y.port2;Y.port1.onmessage=U,q=function(){ie.postMessage(null)}}else q=function(){b(U,0)};function re(oe){T=oe,R||(R=!0,q())}function le(oe,se){D=b(function(){oe(t.unstable_now())},se)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(oe){oe.callback=null},t.unstable_continueExecution=function(){C||w||(C=!0,re(S))},t.unstable_forceFrameRate=function(oe){0>oe||125<oe?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):L=0<oe?Math.floor(1e3/oe):5},t.unstable_getCurrentPriorityLevel=function(){return y},t.unstable_getFirstCallbackNode=function(){return s(p)},t.unstable_next=function(oe){switch(y){case 1:case 2:case 3:var se=3;break;default:se=y}var K=y;y=se;try{return oe()}finally{y=K}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=function(){},t.unstable_runWithPriority=function(oe,se){switch(oe){case 1:case 2:case 3:case 4:case 5:break;default:oe=3}var K=y;y=oe;try{return se()}finally{y=K}},t.unstable_scheduleCallback=function(oe,se,K){var P=t.unstable_now();switch(typeof K=="object"&&K!==null?(K=K.delay,K=typeof K=="number"&&0<K?P+K:P):K=P,oe){case 1:var z=-1;break;case 2:z=250;break;case 5:z=1073741823;break;case 4:z=1e4;break;default:z=5e3}return z=K+z,oe={id:v++,callback:se,priorityLevel:oe,startTime:K,expirationTime:z,sortIndex:-1},K>P?(oe.sortIndex=K,r(f,oe),s(p)===null&&oe===s(f)&&(_?(N(D),D=-1):_=!0,le(B,K-P))):(oe.sortIndex=z,r(p,oe),C||w||(C=!0,re(S))),oe},t.unstable_shouldYield=$,t.unstable_wrapCallback=function(oe){var se=y;return function(){var K=y;y=se;try{return oe.apply(this,arguments)}finally{y=K}}}})(n0)),n0}var Uh;function lg(){return Uh||(Uh=1,t0.exports=ig()),t0.exports}/**
* @license React
* react-dom.production.min.js
*
@@ -31,14 +31,14 @@ var tg=Object.defineProperty;var ng=(t,r,s)=>r in t?tg(t,r,{enumerable:!0,config
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/var Wh;function cg(){if(Wh)return mn;Wh=1;var t=I0(),r=lg();function s(e){for(var n="https://reactjs.org/docs/error-decoder.html?invariant="+e,o=1;o<arguments.length;o++)n+="&args[]="+encodeURIComponent(arguments[o]);return"Minified React error #"+e+"; visit "+n+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var a=new Set,i={};function l(e,n){d(e,n),d(e+"Capture",n)}function d(e,n){for(i[e]=n,e=0;e<n.length;e++)a.add(n[e])}var u=!(typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),p=Object.prototype.hasOwnProperty,f=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,v={},m={};function y(e){return p.call(m,e)?!0:p.call(v,e)?!1:f.test(e)?m[e]=!0:(v[e]=!0,!1)}function w(e,n,o,c){if(o!==null&&o.type===0)return!1;switch(typeof n){case"function":case"symbol":return!0;case"boolean":return c?!1:o!==null?!o.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function C(e,n,o,c){if(n===null||typeof n>"u"||w(e,n,o,c))return!0;if(c)return!1;if(o!==null)switch(o.type){case 3:return!n;case 4:return n===!1;case 5:return isNaN(n);case 6:return isNaN(n)||1>n}return!1}function _(e,n,o,c,x,g,D){this.acceptsBooleans=n===2||n===3||n===4,this.attributeName=c,this.attributeNamespace=x,this.mustUseProperty=o,this.propertyName=e,this.type=n,this.sanitizeURL=g,this.removeEmptyString=D}var b={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){b[e]=new _(e,0,!1,e,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var n=e[0];b[n]=new _(n,1,!1,e[1],null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(e){b[e]=new _(e,2,!1,e.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){b[e]=new _(e,2,!1,e,null,!1,!1)}),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){b[e]=new _(e,3,!1,e.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(e){b[e]=new _(e,3,!0,e,null,!1,!1)}),["capture","download"].forEach(function(e){b[e]=new _(e,4,!1,e,null,!1,!1)}),["cols","rows","size","span"].forEach(function(e){b[e]=new _(e,6,!1,e,null,!1,!1)}),["rowSpan","start"].forEach(function(e){b[e]=new _(e,5,!1,e.toLowerCase(),null,!1,!1)});var N=/[\-:]([a-z])/g;function A(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var n=e.replace(N,A);b[n]=new _(n,1,!1,e,null,!1,!1)}),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var n=e.replace(N,A);b[n]=new _(n,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(e){var n=e.replace(N,A);b[n]=new _(n,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(e){b[e]=new _(e,1,!1,e.toLowerCase(),null,!1,!1)}),b.xlinkHref=new _("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(e){b[e]=new _(e,1,!1,e.toLowerCase(),null,!0,!0)});function k(e,n,o,c){var x=b.hasOwnProperty(n)?b[n]:null;(x!==null?x.type!==0:c||!(2<n.length)||n[0]!=="o"&&n[0]!=="O"||n[1]!=="n"&&n[1]!= Line truncated
*/var Wh;function cg(){if(Wh)return mn;Wh=1;var t=I0(),r=lg();function s(e){for(var n="https://reactjs.org/docs/error-decoder.html?invariant="+e,o=1;o<arguments.length;o++)n+="&args[]="+encodeURIComponent(arguments[o]);return"Minified React error #"+e+"; visit "+n+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var a=new Set,i={};function l(e,n){d(e,n),d(e+"Capture",n)}function d(e,n){for(i[e]=n,e=0;e<n.length;e++)a.add(n[e])}var u=!(typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),p=Object.prototype.hasOwnProperty,f=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,v={},m={};function y(e){return p.call(m,e)?!0:p.call(v,e)?!1:f.test(e)?m[e]=!0:(v[e]=!0,!1)}function w(e,n,o,c){if(o!==null&&o.type===0)return!1;switch(typeof n){case"function":case"symbol":return!0;case"boolean":return c?!1:o!==null?!o.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function C(e,n,o,c){if(n===null||typeof n>"u"||w(e,n,o,c))return!0;if(c)return!1;if(o!==null)switch(o.type){case 3:return!n;case 4:return n===!1;case 5:return isNaN(n);case 6:return isNaN(n)||1>n}return!1}function _(e,n,o,c,x,g,F){this.acceptsBooleans=n===2||n===3||n===4,this.attributeName=c,this.attributeNamespace=x,this.mustUseProperty=o,this.propertyName=e,this.type=n,this.sanitizeURL=g,this.removeEmptyString=F}var b={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){b[e]=new _(e,0,!1,e,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var n=e[0];b[n]=new _(n,1,!1,e[1],null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(e){b[e]=new _(e,2,!1,e.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){b[e]=new _(e,2,!1,e,null,!1,!1)}),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){b[e]=new _(e,3,!1,e.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(e){b[e]=new _(e,3,!0,e,null,!1,!1)}),["capture","download"].forEach(function(e){b[e]=new _(e,4,!1,e,null,!1,!1)}),["cols","rows","size","span"].forEach(function(e){b[e]=new _(e,6,!1,e,null,!1,!1)}),["rowSpan","start"].forEach(function(e){b[e]=new _(e,5,!1,e.toLowerCase(),null,!1,!1)});var N=/[\-:]([a-z])/g;function A(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var n=e.replace(N,A);b[n]=new _(n,1,!1,e,null,!1,!1)}),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var n=e.replace(N,A);b[n]=new _(n,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(e){var n=e.replace(N,A);b[n]=new _(n,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(e){b[e]=new _(e,1,!1,e.toLowerCase(),null,!1,!1)}),b.xlinkHref=new _("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(e){b[e]=new _(e,1,!1,e.toLowerCase(),null,!0,!0)});function k(e,n,o,c){var x=b.hasOwnProperty(n)?b[n]:null;(x!==null?x.type!==0:c||!(2<n.length)||n[0]!=="o"&&n[0]!=="O"||n[1]!=="n"&&n[1]!= Line truncated
`+P+e}var I=!1;function j(e,n){if(!e||I)return"";I=!0;var o=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(n)if(n=function(){throw Error()},Object.defineProperty(n.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(n,[])}catch(te){var c=te}Reflect.construct(e,[],n)}else{try{n.call()}catch(te){c=te}e.call(n.prototype)}else{try{throw Error()}catch(te){c=te}e()}}catch(te){if(te&&c&&typeof te.stack=="string"){for(var x=te.stack.split(`
`),g=c.stack.split(`
`),D=x.length-1,O=g.length-1;1<=D&&0<=O&&x[D]!==g[O];)O--;for(;1<=D&&0<=O;D--,O--)if(x[D]!==g[O]){if(D!==1||O!==1)do if(D--,O--,0>O||x[D]!==g[O]){var V=`
`+x[D].replace(" at new "," at ");return e.displayName&&V.includes("<anonymous>")&&(V=V.replace("<anonymous>",e.displayName)),V}while(1<=D&&0<=O);break}}}finally{I=!1,Error.prepareStackTrace=o}return(e=e?e.displayName||e.name:"")?z(e):""}function G(e){switch(e.tag){case 5:return z(e.type);case 16:return z("Lazy");case 13:return z("Suspense");case 19:return z("SuspenseList");case 0:case 2:case 15:return e=j(e.type,!1),e;case 11:return e=j(e.type.render,!1),e;case 1:return e=j(e.type,!0),e;default:return""}}function J(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case T:return"Fragment";case R:return"Portal";case L:return"Profiler";case F:return"StrictMode";case q:return"Suspense";case Y:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case $:return(e.displayName||"Context")+".Consumer";case M:return(e._context.displayName||"Context")+".Provider";case U:var n=e.render;return e=e.displayName,e||(e=n.displayName||n.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case ie:return n=e.displayName||null,n!==null?n:J(e.type)||"Memo";case re:n=e._payload,e=e._init;try{return J(e(n))}catch{}}return null}function ce(e){var n=e.type;switch(e.tag){case 24:return"Cache";case 9:return(n.displayName||"Context")+".Consumer";case 10:return(n._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=n.render,e=e.displayName||e.name||"",n.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return n;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return J(n);case 8:return n===F?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof n=="function")return n.displayName||n.name||null;if(typeof n=="string")return n}return null}function ne(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function ue(e){var n=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(n==="checkbox"||n==="radio")}function Se(e){var n=ue(e)?"checked":"value",o=Object.getOwnPropertyDescriptor(e.constructor.prototype,n),c=""+e[n];if(!e.hasOwnProperty(n)&&typeof o<"u"&&typeof o.get=="function"&&typeof o.set=="function"){var x=o.get,g=o.set;return Object.defineProperty(e,n,{configurable:!0,get:function(){return x.call(this)},set:function(D){c=""+D,g.call(this,D)}}),Object.defineProperty(e,n,{enumerable:o.enumerable}),{getValue:function(){return c},setValue:function(D){c=""+D},stopTracking:function(){e._valueTracker=null,delete e[n]}}}}function Ze(e){e._valueTracker||(e._valueTracker=Se(e))}function Fe(e){if(!e)return!1;var n=e._valueTracker;if(!n)return!0;var o=n.getValue(),c="";return e&&(c=ue(e)?e.checked?"true":"false":e.value),e=c,e!==o?(n.setValue(e),!0):!1}function Ke(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function Ue(e,n){var o=n.checked;return K({},n,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:o??e._wrapperState.initialChecked})}function Rt(e,n){var o=n.defaultValue==null?"":n.defaultValue,c=n.checked!=null?n.checked:n.defaultChecked;o=ne(n.value!=null?n.value:o),e._wrapperState={initialChecked:c,initialValue:o,controlled:n.type==="checkbox"||n.type==="radio"?n.checked!=null:n.value!=null}}function Et(e,n){n=n.checked,n!=null&&k(e,"checked",n,!1)}function vt(e,n){Et(e,n);var o=ne(n.value),c=n.type;if(o!=null)c==="number"?(o===0&&e.value===""||e.value!=o)&&(e.value=""+o):e.value!==""+o&&(e.value=""+o);else if(c==="submit"||c==="reset"){e.removeAttribute("value");return}n.hasOwnProperty("value")?at(e,n.type,o):n.hasOwnProperty("defaultValue")&&at(e,n.type,ne(n.defaultValue)),n.checked==null&&n.defaultChecked!=null&&(e.defaultChecked=!!n.defaultChecked)}function _t(e,n,o){if(n.hasOwnProperty("value")||n.hasOwnProperty("defaultValue")){var c=n.type;if(!(c!=="submit"&&c!=="reset"||n.value!==void 0&&n.value!==null))return;n=""+e._wrapperState.initialValue,o||n===e.value||(e.value=n),e.defaultValue=n}o=e.name,o!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,o!==""&&(e.name=o)}function at(e,n,o){(n!=="number"||Ke(e.ownerDocument)!==e)&&(o==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+o&&(e.defaultValue=""+o))}var pt=Array.isArray;function Xe(e,n,o,c){if(e=e.options,n){n={};for(var x=0;x<o.length;x++)n["$"+o[x]]=!0;for(o=0;o<e.length;o++)x=n.hasOwnProperty("$"+e[o].value),e[o].selected!==x&&(e[o].selected=x),x&&c&&(e[o].defaultSelected=!0)}else{for(o=""+ne(o),n=null,x=0;x<e.length;x++){if(e[x].value===o){e[x].selected=!0,c&&(e[x].defaultSelected=!0);return}n!==null||e[x].disabled||(n=e[x])}n!==null&&(n.selected=!0)}}function Q(e,n){if(n.dangerouslySetInnerHTML!=null) Line truncated
`).replace(py,"")}function oi(e,n,o){if(n=rf(n),rf(e)!==n&&o)throw Error(s(425))}function si(){}var $c=null,Vc=null;function Uc(e,n){return e==="textarea"||e==="noscript"||typeof n.children=="string"||typeof n.children=="number"||typeof n.dangerouslySetInnerHTML=="object"&&n.dangerouslySetInnerHTML!==null&&n.dangerouslySetInnerHTML.__html!=null}var Wc=typeof setTimeout=="function"?setTimeout:void 0,my=typeof clearTimeout=="function"?clearTimeout:void 0,of=typeof Promise=="function"?Promise:void 0,xy=typeof queueMicrotask=="function"?queueMicrotask:typeof of<"u"?function(e){return of.resolve(null).then(e).catch(vy)}:Wc;function vy(e){setTimeout(function(){throw e})}function qc(e,n){var o=n,c=0;do{var x=o.nextSibling;if(e.removeChild(o),x&&x.nodeType===8)if(o=x.data,o==="/$"){if(c===0){e.removeChild(x),js(n);return}c--}else o!=="$"&&o!=="$?"&&o!=="$!"||c++;o=x}while(o);js(n)}function Ar(e){for(;e!=null;e=e.nextSibling){var n=e.nodeType;if(n===1||n===3)break;if(n===8){if(n=e.data,n==="$"||n==="$!"||n==="$?")break;if(n==="/$")return null}}return e}function sf(e){e=e.previousSibling;for(var n=0;e;){if(e.nodeType===8){var o=e.data;if(o==="$"||o==="$!"||o==="$?"){if(n===0)return e;n--}else o==="/$"&&n++}e=e.previousSibling}return null}var Io=Math.random().toString(36).slice(2),qn="__reactFiber$"+Io,qs="__reactProps$"+Io,ar="__reactContainer$"+Io,Kc="__reactEvents$"+Io,yy="__reactListeners$"+Io,gy="__reactHandles$"+Io;function eo(e){var n=e[qn];if(n)return n;for(var o=e.parentNode;o;){if(n=o[ar]||o[qn]){if(o=n.alternate,n.child!==null||o!==null&&o.child!==null)for(e=sf(e);e!==null;){if(o=e[qn])return o;e=sf(e)}return n}e=o,o=e.parentNode}return null}function Ks(e){return e=e[qn]||e[ar],!e||e.tag!==5&&e.tag!==6&&e.tag!==13&&e.tag!==3?null:e}function $o(e){if(e.tag===5||e.tag===6)return e.stateNode;throw Error(s(33))}function ai(e){return e[qs]||null}var Gc=[],Vo=-1;function Nr(e){return{current:e}}function gt(e){0>Vo||(e.current=Gc[Vo],Gc[Vo]=null,Vo--)}function xt(e,n){Vo++,Gc[Vo]=e.current,e.current=n}var Br={},Yt=Nr(Br),un=Nr(!1),to=Br;function Uo(e,n){var o=e.type.contextTypes;if(!o)return Br;var c=e.stateNode;if(c&&c.__reactInternalMemoizedUnmaskedChildContext===n)return c.__reactInternalMemoizedMaskedChildContext;var x={},g;for(g in o)x[g]=n[g];return c&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=n,e.__reactInternalMemoizedMaskedChildContext=x),x}function dn(e){return e=e.childContextTypes,e!=null}function ii(){gt(un),gt(Yt)}function af(e,n,o){if(Yt.current!==Br)throw Error(s(168));xt(Yt,n),xt(un,o)}function lf(e,n,o){var c=e.stateNode;if(n=n.childContextTypes,typeof c.getChildContext!="function")return o;c=c.getChildContext();for(var x in c)if(!(x in n))throw Error(s(108,ce(e)||"Unknown",x));return K({},o,c)}function li(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Br,to=Yt.current,xt(Yt,e),xt(un,un.current),!0}function cf(e,n,o){var c=e.stateNode;if(!c)throw Error(s(169));o?(e=lf(e,n,to),c.__reactInternalMemoizedMergedChildContext=e,gt(un),gt(Yt),xt(Yt,e)):gt(un),xt(un,o)}var ir=null,ci=!1,Yc=!1;function uf(e){ir===null?ir=[e]:ir.push(e)}function by(e){ci=!0,uf(e)}function Dr(){if(!Yc&&ir!==null){Yc=!0;var e=0,n=st;try{var o=ir;for(st=1;e<o.length;e++){var c=o[e];do c=c(!0);while(c!==null)}ir=null,ci=!1}catch(x){throw ir!==null&&(ir=ir.slice(e+1)),za(As,Dr),x}finally{st=n,Yc=!1}}return null}var Wo=[],qo=0,ui=null,di=0,_n=[],Sn=0,no=null,lr=1,cr="";function ro(e,n){Wo[qo++]=di,Wo[qo++]=ui,ui=e,di=n}function df(e,n,o){_n[Sn++]=lr,_n[Sn++]=cr,_n[Sn++]=no,no=e;var c=lr;e=cr;var x=32-cn(c)-1;c&=~(1<<x),o+=1;var g=32-cn(n)+x;if(30<g){var D=x-x%5;g=(c&(1<<D)-1).toString(32),c>>=D,x-=D,lr=1<<32-cn(n)+x|o<<x|c,cr=g+e}else lr=1<<g|o<<x|c,cr=e}function Xc(e){e.return!==null&&(ro(e,1),df(e,1,0))}function Qc(e){for(;e===ui;)ui=Wo[--qo],Wo[qo]=null,di=Wo[--qo],Wo[qo]=null;for(;e===no;)no=_n[--Sn],_n[Sn]=null,cr=_n[--Sn],_n[Sn]=null,lr=_n[--Sn],_n[Sn]=null}var gn=null,bn=null,Ct=!1,jn=null;function ff(e,n){var o=Dn(5,null,null,0);o.elementType="DELETED",o.stateNode=n,o.return=e,n=e.deletions,n===null?(e.deletions=[o],e.flags|=16):n.push(o)}function hf(e,n){switch(e.tag){case 5:var o=e.type;return n=n.nodeType!==1||o.toLowerCase()!==n.nodeName.toLowerCase()?null:n,n!==null?(e.stateNode=n,gn=e,bn=Ar(n.firstChild),!0):!1;case 6:return n=e.pendingProps===""||n.nodeType!==3?null:n,n!==null?(e.stateNode=n,gn=e,bn=null,!0):!1;case 13:return n=n.nodeType!==8?null:n,n!==null?(o=no!==null?{id:lr,overflow:cr}:null,e.memoizedState={dehydrated:n,treeContext:o,retryLane:1073741824},o=Dn(18,null,null,0),o.stateNode=n,o.return=e,e.child=o,gn=e,bn=null,!0):!1;default:return!1}}function Zc(e){return(e.mode&1)!==0&&(e.flags&128)===0}function Jc(e){if(Ct){var n=bn;if(n){var o=n;if(!hf(e,n)){if(Zc(e))throw Error(s(418));n=Ar(o.nextSibling);var c=gn;n&&hf(e,n)?ff(c,o):(e.flags=e.flags&-4097|2,Ct=!1,gn=e)}}else{if(Zc(e))throw Error(s(418));e.flags=e.flags&-4097|2,Ct=!1,gn=e}}}function pf(e){for(e=e. Line truncated
`),F=x.length-1,O=g.length-1;1<=F&&0<=O&&x[F]!==g[O];)O--;for(;1<=F&&0<=O;F--,O--)if(x[F]!==g[O]){if(F!==1||O!==1)do if(F--,O--,0>O||x[F]!==g[O]){var V=`
`+x[F].replace(" at new "," at ");return e.displayName&&V.includes("<anonymous>")&&(V=V.replace("<anonymous>",e.displayName)),V}while(1<=F&&0<=O);break}}}finally{I=!1,Error.prepareStackTrace=o}return(e=e?e.displayName||e.name:"")?z(e):""}function G(e){switch(e.tag){case 5:return z(e.type);case 16:return z("Lazy");case 13:return z("Suspense");case 19:return z("SuspenseList");case 0:case 2:case 15:return e=j(e.type,!1),e;case 11:return e=j(e.type.render,!1),e;case 1:return e=j(e.type,!0),e;default:return""}}function J(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case T:return"Fragment";case R:return"Portal";case L:return"Profiler";case D:return"StrictMode";case q:return"Suspense";case Y:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case $:return(e.displayName||"Context")+".Consumer";case M:return(e._context.displayName||"Context")+".Provider";case U:var n=e.render;return e=e.displayName,e||(e=n.displayName||n.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case ie:return n=e.displayName||null,n!==null?n:J(e.type)||"Memo";case re:n=e._payload,e=e._init;try{return J(e(n))}catch{}}return null}function ce(e){var n=e.type;switch(e.tag){case 24:return"Cache";case 9:return(n.displayName||"Context")+".Consumer";case 10:return(n._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=n.render,e=e.displayName||e.name||"",n.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return n;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return J(n);case 8:return n===D?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof n=="function")return n.displayName||n.name||null;if(typeof n=="string")return n}return null}function ne(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function ue(e){var n=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(n==="checkbox"||n==="radio")}function Se(e){var n=ue(e)?"checked":"value",o=Object.getOwnPropertyDescriptor(e.constructor.prototype,n),c=""+e[n];if(!e.hasOwnProperty(n)&&typeof o<"u"&&typeof o.get=="function"&&typeof o.set=="function"){var x=o.get,g=o.set;return Object.defineProperty(e,n,{configurable:!0,get:function(){return x.call(this)},set:function(F){c=""+F,g.call(this,F)}}),Object.defineProperty(e,n,{enumerable:o.enumerable}),{getValue:function(){return c},setValue:function(F){c=""+F},stopTracking:function(){e._valueTracker=null,delete e[n]}}}}function Ze(e){e._valueTracker||(e._valueTracker=Se(e))}function Fe(e){if(!e)return!1;var n=e._valueTracker;if(!n)return!0;var o=n.getValue(),c="";return e&&(c=ue(e)?e.checked?"true":"false":e.value),e=c,e!==o?(n.setValue(e),!0):!1}function Ke(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function Ue(e,n){var o=n.checked;return K({},n,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:o??e._wrapperState.initialChecked})}function Rt(e,n){var o=n.defaultValue==null?"":n.defaultValue,c=n.checked!=null?n.checked:n.defaultChecked;o=ne(n.value!=null?n.value:o),e._wrapperState={initialChecked:c,initialValue:o,controlled:n.type==="checkbox"||n.type==="radio"?n.checked!=null:n.value!=null}}function Et(e,n){n=n.checked,n!=null&&k(e,"checked",n,!1)}function vt(e,n){Et(e,n);var o=ne(n.value),c=n.type;if(o!=null)c==="number"?(o===0&&e.value===""||e.value!=o)&&(e.value=""+o):e.value!==""+o&&(e.value=""+o);else if(c==="submit"||c==="reset"){e.removeAttribute("value");return}n.hasOwnProperty("value")?at(e,n.type,o):n.hasOwnProperty("defaultValue")&&at(e,n.type,ne(n.defaultValue)),n.checked==null&&n.defaultChecked!=null&&(e.defaultChecked=!!n.defaultChecked)}function _t(e,n,o){if(n.hasOwnProperty("value")||n.hasOwnProperty("defaultValue")){var c=n.type;if(!(c!=="submit"&&c!=="reset"||n.value!==void 0&&n.value!==null))return;n=""+e._wrapperState.initialValue,o||n===e.value||(e.value=n),e.defaultValue=n}o=e.name,o!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,o!==""&&(e.name=o)}function at(e,n,o){(n!=="number"||Ke(e.ownerDocument)!==e)&&(o==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+o&&(e.defaultValue=""+o))}var pt=Array.isArray;function Xe(e,n,o,c){if(e=e.options,n){n={};for(var x=0;x<o.length;x++)n["$"+o[x]]=!0;for(o=0;o<e.length;o++)x=n.hasOwnProperty("$"+e[o].value),e[o].selected!==x&&(e[o].selected=x),x&&c&&(e[o].defaultSelected=!0)}else{for(o=""+ne(o),n=null,x=0;x<e.length;x++){if(e[x].value===o){e[x].selected=!0,c&&(e[x].defaultSelected=!0);return}n!==null||e[x].disabled||(n=e[x])}n!==null&&(n.selected=!0)}}function Q(e,n){if(n.dangerouslySetInnerHTML!=null) Line truncated
`).replace(py,"")}function oi(e,n,o){if(n=rf(n),rf(e)!==n&&o)throw Error(s(425))}function si(){}var $c=null,Vc=null;function Uc(e,n){return e==="textarea"||e==="noscript"||typeof n.children=="string"||typeof n.children=="number"||typeof n.dangerouslySetInnerHTML=="object"&&n.dangerouslySetInnerHTML!==null&&n.dangerouslySetInnerHTML.__html!=null}var Wc=typeof setTimeout=="function"?setTimeout:void 0,my=typeof clearTimeout=="function"?clearTimeout:void 0,of=typeof Promise=="function"?Promise:void 0,xy=typeof queueMicrotask=="function"?queueMicrotask:typeof of<"u"?function(e){return of.resolve(null).then(e).catch(vy)}:Wc;function vy(e){setTimeout(function(){throw e})}function qc(e,n){var o=n,c=0;do{var x=o.nextSibling;if(e.removeChild(o),x&&x.nodeType===8)if(o=x.data,o==="/$"){if(c===0){e.removeChild(x),js(n);return}c--}else o!=="$"&&o!=="$?"&&o!=="$!"||c++;o=x}while(o);js(n)}function Ar(e){for(;e!=null;e=e.nextSibling){var n=e.nodeType;if(n===1||n===3)break;if(n===8){if(n=e.data,n==="$"||n==="$!"||n==="$?")break;if(n==="/$")return null}}return e}function sf(e){e=e.previousSibling;for(var n=0;e;){if(e.nodeType===8){var o=e.data;if(o==="$"||o==="$!"||o==="$?"){if(n===0)return e;n--}else o==="/$"&&n++}e=e.previousSibling}return null}var Io=Math.random().toString(36).slice(2),qn="__reactFiber$"+Io,qs="__reactProps$"+Io,ar="__reactContainer$"+Io,Kc="__reactEvents$"+Io,yy="__reactListeners$"+Io,gy="__reactHandles$"+Io;function eo(e){var n=e[qn];if(n)return n;for(var o=e.parentNode;o;){if(n=o[ar]||o[qn]){if(o=n.alternate,n.child!==null||o!==null&&o.child!==null)for(e=sf(e);e!==null;){if(o=e[qn])return o;e=sf(e)}return n}e=o,o=e.parentNode}return null}function Ks(e){return e=e[qn]||e[ar],!e||e.tag!==5&&e.tag!==6&&e.tag!==13&&e.tag!==3?null:e}function $o(e){if(e.tag===5||e.tag===6)return e.stateNode;throw Error(s(33))}function ai(e){return e[qs]||null}var Gc=[],Vo=-1;function Nr(e){return{current:e}}function gt(e){0>Vo||(e.current=Gc[Vo],Gc[Vo]=null,Vo--)}function xt(e,n){Vo++,Gc[Vo]=e.current,e.current=n}var Br={},Yt=Nr(Br),un=Nr(!1),to=Br;function Uo(e,n){var o=e.type.contextTypes;if(!o)return Br;var c=e.stateNode;if(c&&c.__reactInternalMemoizedUnmaskedChildContext===n)return c.__reactInternalMemoizedMaskedChildContext;var x={},g;for(g in o)x[g]=n[g];return c&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=n,e.__reactInternalMemoizedMaskedChildContext=x),x}function dn(e){return e=e.childContextTypes,e!=null}function ii(){gt(un),gt(Yt)}function af(e,n,o){if(Yt.current!==Br)throw Error(s(168));xt(Yt,n),xt(un,o)}function lf(e,n,o){var c=e.stateNode;if(n=n.childContextTypes,typeof c.getChildContext!="function")return o;c=c.getChildContext();for(var x in c)if(!(x in n))throw Error(s(108,ce(e)||"Unknown",x));return K({},o,c)}function li(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Br,to=Yt.current,xt(Yt,e),xt(un,un.current),!0}function cf(e,n,o){var c=e.stateNode;if(!c)throw Error(s(169));o?(e=lf(e,n,to),c.__reactInternalMemoizedMergedChildContext=e,gt(un),gt(Yt),xt(Yt,e)):gt(un),xt(un,o)}var ir=null,ci=!1,Yc=!1;function uf(e){ir===null?ir=[e]:ir.push(e)}function by(e){ci=!0,uf(e)}function Dr(){if(!Yc&&ir!==null){Yc=!0;var e=0,n=st;try{var o=ir;for(st=1;e<o.length;e++){var c=o[e];do c=c(!0);while(c!==null)}ir=null,ci=!1}catch(x){throw ir!==null&&(ir=ir.slice(e+1)),za(As,Dr),x}finally{st=n,Yc=!1}}return null}var Wo=[],qo=0,ui=null,di=0,_n=[],Sn=0,no=null,lr=1,cr="";function ro(e,n){Wo[qo++]=di,Wo[qo++]=ui,ui=e,di=n}function df(e,n,o){_n[Sn++]=lr,_n[Sn++]=cr,_n[Sn++]=no,no=e;var c=lr;e=cr;var x=32-cn(c)-1;c&=~(1<<x),o+=1;var g=32-cn(n)+x;if(30<g){var F=x-x%5;g=(c&(1<<F)-1).toString(32),c>>=F,x-=F,lr=1<<32-cn(n)+x|o<<x|c,cr=g+e}else lr=1<<g|o<<x|c,cr=e}function Xc(e){e.return!==null&&(ro(e,1),df(e,1,0))}function Qc(e){for(;e===ui;)ui=Wo[--qo],Wo[qo]=null,di=Wo[--qo],Wo[qo]=null;for(;e===no;)no=_n[--Sn],_n[Sn]=null,cr=_n[--Sn],_n[Sn]=null,lr=_n[--Sn],_n[Sn]=null}var gn=null,bn=null,Ct=!1,jn=null;function ff(e,n){var o=Dn(5,null,null,0);o.elementType="DELETED",o.stateNode=n,o.return=e,n=e.deletions,n===null?(e.deletions=[o],e.flags|=16):n.push(o)}function hf(e,n){switch(e.tag){case 5:var o=e.type;return n=n.nodeType!==1||o.toLowerCase()!==n.nodeName.toLowerCase()?null:n,n!==null?(e.stateNode=n,gn=e,bn=Ar(n.firstChild),!0):!1;case 6:return n=e.pendingProps===""||n.nodeType!==3?null:n,n!==null?(e.stateNode=n,gn=e,bn=null,!0):!1;case 13:return n=n.nodeType!==8?null:n,n!==null?(o=no!==null?{id:lr,overflow:cr}:null,e.memoizedState={dehydrated:n,treeContext:o,retryLane:1073741824},o=Dn(18,null,null,0),o.stateNode=n,o.return=e,e.child=o,gn=e,bn=null,!0):!1;default:return!1}}function Zc(e){return(e.mode&1)!==0&&(e.flags&128)===0}function Jc(e){if(Ct){var n=bn;if(n){var o=n;if(!hf(e,n)){if(Zc(e))throw Error(s(418));n=Ar(o.nextSibling);var c=gn;n&&hf(e,n)?ff(c,o):(e.flags=e.flags&-4097|2,Ct=!1,gn=e)}}else{if(Zc(e))throw Error(s(418));e.flags=e.flags&-4097|2,Ct=!1,gn=e}}}function pf(e){for(e=e. Line truncated
Error generating stack: `+g.message+`
`+g.stack}return{value:e,source:n,stack:x,digest:null}}function wu(e,n,o){return{value:e,source:null,stack:o??null,digest:n??null}}function Cu(e,n){try{console.error(n.value)}catch(o){setTimeout(function(){throw o})}}var By=typeof WeakMap=="function"?WeakMap:Map;function Gf(e,n,o){o=dr(-1,o),o.tag=3,o.payload={element:null};var c=n.value;return o.callback=function(){Fi||(Fi=!0,zu=c),Cu(e,n)},o}function Yf(e,n,o){o=dr(-1,o),o.tag=3;var c=e.type.getDerivedStateFromError;if(typeof c=="function"){var x=n.value;o.payload=function(){return c(x)},o.callback=function(){Cu(e,n)}}var g=e.stateNode;return g!==null&&typeof g.componentDidCatch=="function"&&(o.callback=function(){Cu(e,n),typeof c!="function"&&(Pr===null?Pr=new Set([this]):Pr.add(this));var D=n.stack;this.componentDidCatch(n.value,{componentStack:D!==null?D:""})}),o}function Xf(e,n,o){var c=e.pingCache;if(c===null){c=e.pingCache=new By;var x=new Set;c.set(n,x)}else x=c.get(n),x===void 0&&(x=new Set,c.set(n,x));x.has(o)||(x.add(o),e=Vy.bind(null,e,n,o),n.then(e,e))}function Qf(e){do{var n;if((n=e.tag===13)&&(n=e.memoizedState,n=n!==null?n.dehydrated!==null:!0),n)return e;e=e.return}while(e!==null);return null}function Zf(e,n,o,c,x){return(e.mode&1)===0?(e===n?e.flags|=65536:(e.flags|=128,o.flags|=131072,o.flags&=-52805,o.tag===1&&(o.alternate===null?o.tag=17:(n=dr(-1,1),n.tag=2,Rr(o,n,1))),o.lanes|=1),e):(e.flags|=65536,e.lanes=x,e)}var Dy=B.ReactCurrentOwner,fn=!1;function tn(e,n,o,c){n.child=e===null?yf(n,null,o,c):Go(n,e.child,o,c)}function Jf(e,n,o,c,x){o=o.render;var g=n.ref;return Xo(n,x),c=hu(e,n,o,c,g,x),o=pu(),e!==null&&!fn?(n.updateQueue=e.updateQueue,n.flags&=-2053,e.lanes&=~x,fr(e,n,x)):(Ct&&o&&Xc(n),n.flags|=1,tn(e,n,c,x),n.child)}function eh(e,n,o,c,x){if(e===null){var g=o.type;return typeof g=="function"&&!Uu(g)&&g.defaultProps===void 0&&o.compare===null&&o.defaultProps===void 0?(n.tag=15,n.type=g,th(e,n,g,c,x)):(e=zi(o.type,null,c,n,n.mode,x),e.ref=n.ref,e.return=n,n.child=e)}if(g=e.child,(e.lanes&x)===0){var D=g.memoizedProps;if(o=o.compare,o=o!==null?o:Is,o(D,c)&&e.ref===n.ref)return fr(e,n,x)}return n.flags|=1,e=Or(g,c),e.ref=n.ref,e.return=n,n.child=e}function th(e,n,o,c,x){if(e!==null){var g=e.memoizedProps;if(Is(g,c)&&e.ref===n.ref)if(fn=!1,n.pendingProps=c=g,(e.lanes&x)!==0)(e.flags&131072)!==0&&(fn=!0);else return n.lanes=e.lanes,fr(e,n,x)}return ku(e,n,o,c,x)}function nh(e,n,o){var c=n.pendingProps,x=c.children,g=e!==null?e.memoizedState:null;if(c.mode==="hidden")if((n.mode&1)===0)n.memoizedState={baseLanes:0,cachePool:null,transitions:null},xt(es,wn),wn|=o;else{if((o&1073741824)===0)return e=g!==null?g.baseLanes|o:o,n.lanes=n.childLanes=1073741824,n.memoizedState={baseLanes:e,cachePool:null,transitions:null},n.updateQueue=null,xt(es,wn),wn|=e,null;n.memoizedState={baseLanes:0,cachePool:null,transitions:null},c=g!==null?g.baseLanes:o,xt(es,wn),wn|=c}else g!==null?(c=g.baseLanes|o,n.memoizedState=null):c=o,xt(es,wn),wn|=c;return tn(e,n,x,o),n.child}function rh(e,n){var o=n.ref;(e===null&&o!==null||e!==null&&e.ref!==o)&&(n.flags|=512,n.flags|=2097152)}function ku(e,n,o,c,x){var g=dn(o)?to:Yt.current;return g=Uo(n,g),Xo(n,x),o=hu(e,n,o,c,g,x),c=pu(),e!==null&&!fn?(n.updateQueue=e.updateQueue,n.flags&=-2053,e.lanes&=~x,fr(e,n,x)):(Ct&&c&&Xc(n),n.flags|=1,tn(e,n,o,x),n.child)}function oh(e,n,o,c,x){if(dn(o)){var g=!0;li(n)}else g=!1;if(Xo(n,x),n.stateNode===null)Si(e,n),qf(n,o,c),bu(n,o,c,x),c=!0;else if(e===null){var D=n.stateNode,O=n.memoizedProps;D.props=O;var V=D.context,te=o.contextType;typeof te=="object"&&te!==null?te=An(te):(te=dn(o)?to:Yt.current,te=Uo(n,te));var fe=o.getDerivedStateFromProps,he=typeof fe=="function"||typeof D.getSnapshotBeforeUpdate=="function";he||typeof D.UNSAFE_componentWillReceiveProps!="function"&&typeof D.componentWillReceiveProps!="function"||(O!==c||V!==te)&&Kf(n,D,c,te),Fr=!1;var de=n.memoizedState;D.state=de,vi(n,c,D,x),V=n.memoizedState,O!==c||de!==V||un.current||Fr?(typeof fe=="function"&&(gu(n,o,fe,c),V=n.memoizedState),(O=Fr||Wf(n,o,O,c,de,V,te))?(he||typeof D.UNSAFE_componentWillMount!="function"&&typeof D.componentWillMount!="function"||(typeof D.componentWillMount=="function"&&D.componentWillMount(),typeof D.UNSAFE_componentWillMount=="function"&&D.UNSAFE_componentWillMount()),typeof D.componentDidMount=="function"&&(n.flags|=4194308)):(typeof D.componentDidMount=="function"&&(n.flags|=4194308),n.memoizedProps=c,n.memoizedState=V),D.props=c,D.state=V,D.context=te,c=O):(typeof D.componentDidMount=="function"&&(n.flags|=4194308),c=!1)}else{D=n.stateNode,bf(e,n),O=n.memoizedProps,te=n.type===n.elementType?O:Mn(n.type,O),D.props=te,he=n.pendingProps,de=D.context,V=o.contextType,typeof V=="object"&&V!==null?V=An(V):(V=dn(o)?to:Yt.current,V=Uo(n,V));var ge=o.getDerivedStateFromProps;(fe=typeof ge=="function"||typeof D.getSnapshotBeforeUpdate=="function")||typeof D.UNSAFE_componentWillReceiveProps!="function"&&typeof D.componentWillReceiveProps!="function"||(O!==he||de!==V)&&Kf(n,D,c,V),Fr=!1,de=n.m Line truncated
`+g.stack}return{value:e,source:n,stack:x,digest:null}}function wu(e,n,o){return{value:e,source:null,stack:o??null,digest:n??null}}function Cu(e,n){try{console.error(n.value)}catch(o){setTimeout(function(){throw o})}}var By=typeof WeakMap=="function"?WeakMap:Map;function Gf(e,n,o){o=dr(-1,o),o.tag=3,o.payload={element:null};var c=n.value;return o.callback=function(){Fi||(Fi=!0,zu=c),Cu(e,n)},o}function Yf(e,n,o){o=dr(-1,o),o.tag=3;var c=e.type.getDerivedStateFromError;if(typeof c=="function"){var x=n.value;o.payload=function(){return c(x)},o.callback=function(){Cu(e,n)}}var g=e.stateNode;return g!==null&&typeof g.componentDidCatch=="function"&&(o.callback=function(){Cu(e,n),typeof c!="function"&&(Pr===null?Pr=new Set([this]):Pr.add(this));var F=n.stack;this.componentDidCatch(n.value,{componentStack:F!==null?F:""})}),o}function Xf(e,n,o){var c=e.pingCache;if(c===null){c=e.pingCache=new By;var x=new Set;c.set(n,x)}else x=c.get(n),x===void 0&&(x=new Set,c.set(n,x));x.has(o)||(x.add(o),e=Vy.bind(null,e,n,o),n.then(e,e))}function Qf(e){do{var n;if((n=e.tag===13)&&(n=e.memoizedState,n=n!==null?n.dehydrated!==null:!0),n)return e;e=e.return}while(e!==null);return null}function Zf(e,n,o,c,x){return(e.mode&1)===0?(e===n?e.flags|=65536:(e.flags|=128,o.flags|=131072,o.flags&=-52805,o.tag===1&&(o.alternate===null?o.tag=17:(n=dr(-1,1),n.tag=2,Rr(o,n,1))),o.lanes|=1),e):(e.flags|=65536,e.lanes=x,e)}var Dy=B.ReactCurrentOwner,fn=!1;function tn(e,n,o,c){n.child=e===null?yf(n,null,o,c):Go(n,e.child,o,c)}function Jf(e,n,o,c,x){o=o.render;var g=n.ref;return Xo(n,x),c=hu(e,n,o,c,g,x),o=pu(),e!==null&&!fn?(n.updateQueue=e.updateQueue,n.flags&=-2053,e.lanes&=~x,fr(e,n,x)):(Ct&&o&&Xc(n),n.flags|=1,tn(e,n,c,x),n.child)}function eh(e,n,o,c,x){if(e===null){var g=o.type;return typeof g=="function"&&!Uu(g)&&g.defaultProps===void 0&&o.compare===null&&o.defaultProps===void 0?(n.tag=15,n.type=g,th(e,n,g,c,x)):(e=zi(o.type,null,c,n,n.mode,x),e.ref=n.ref,e.return=n,n.child=e)}if(g=e.child,(e.lanes&x)===0){var F=g.memoizedProps;if(o=o.compare,o=o!==null?o:Is,o(F,c)&&e.ref===n.ref)return fr(e,n,x)}return n.flags|=1,e=Or(g,c),e.ref=n.ref,e.return=n,n.child=e}function th(e,n,o,c,x){if(e!==null){var g=e.memoizedProps;if(Is(g,c)&&e.ref===n.ref)if(fn=!1,n.pendingProps=c=g,(e.lanes&x)!==0)(e.flags&131072)!==0&&(fn=!0);else return n.lanes=e.lanes,fr(e,n,x)}return ku(e,n,o,c,x)}function nh(e,n,o){var c=n.pendingProps,x=c.children,g=e!==null?e.memoizedState:null;if(c.mode==="hidden")if((n.mode&1)===0)n.memoizedState={baseLanes:0,cachePool:null,transitions:null},xt(es,wn),wn|=o;else{if((o&1073741824)===0)return e=g!==null?g.baseLanes|o:o,n.lanes=n.childLanes=1073741824,n.memoizedState={baseLanes:e,cachePool:null,transitions:null},n.updateQueue=null,xt(es,wn),wn|=e,null;n.memoizedState={baseLanes:0,cachePool:null,transitions:null},c=g!==null?g.baseLanes:o,xt(es,wn),wn|=c}else g!==null?(c=g.baseLanes|o,n.memoizedState=null):c=o,xt(es,wn),wn|=c;return tn(e,n,x,o),n.child}function rh(e,n){var o=n.ref;(e===null&&o!==null||e!==null&&e.ref!==o)&&(n.flags|=512,n.flags|=2097152)}function ku(e,n,o,c,x){var g=dn(o)?to:Yt.current;return g=Uo(n,g),Xo(n,x),o=hu(e,n,o,c,g,x),c=pu(),e!==null&&!fn?(n.updateQueue=e.updateQueue,n.flags&=-2053,e.lanes&=~x,fr(e,n,x)):(Ct&&c&&Xc(n),n.flags|=1,tn(e,n,o,x),n.child)}function oh(e,n,o,c,x){if(dn(o)){var g=!0;li(n)}else g=!1;if(Xo(n,x),n.stateNode===null)Si(e,n),qf(n,o,c),bu(n,o,c,x),c=!0;else if(e===null){var F=n.stateNode,O=n.memoizedProps;F.props=O;var V=F.context,te=o.contextType;typeof te=="object"&&te!==null?te=An(te):(te=dn(o)?to:Yt.current,te=Uo(n,te));var fe=o.getDerivedStateFromProps,he=typeof fe=="function"||typeof F.getSnapshotBeforeUpdate=="function";he||typeof F.UNSAFE_componentWillReceiveProps!="function"&&typeof F.componentWillReceiveProps!="function"||(O!==c||V!==te)&&Kf(n,F,c,te),Fr=!1;var de=n.memoizedState;F.state=de,vi(n,c,F,x),V=n.memoizedState,O!==c||de!==V||un.current||Fr?(typeof fe=="function"&&(gu(n,o,fe,c),V=n.memoizedState),(O=Fr||Wf(n,o,O,c,de,V,te))?(he||typeof F.UNSAFE_componentWillMount!="function"&&typeof F.componentWillMount!="function"||(typeof F.componentWillMount=="function"&&F.componentWillMount(),typeof F.UNSAFE_componentWillMount=="function"&&F.UNSAFE_componentWillMount()),typeof F.componentDidMount=="function"&&(n.flags|=4194308)):(typeof F.componentDidMount=="function"&&(n.flags|=4194308),n.memoizedProps=c,n.memoizedState=V),F.props=c,F.state=V,F.context=te,c=O):(typeof F.componentDidMount=="function"&&(n.flags|=4194308),c=!1)}else{F=n.stateNode,bf(e,n),O=n.memoizedProps,te=n.type===n.elementType?O:Mn(n.type,O),F.props=te,he=n.pendingProps,de=F.context,V=o.contextType,typeof V=="object"&&V!==null?V=An(V):(V=dn(o)?to:Yt.current,V=Uo(n,V));var ge=o.getDerivedStateFromProps;(fe=typeof ge=="function"||typeof F.getSnapshotBeforeUpdate=="function")||typeof F.UNSAFE_componentWillReceiveProps!="function"&&typeof F.componentWillReceiveProps!="function"||(O!==he||de!==V)&&Kf(n,F,c,V),Fr=!1,de=n.m Line truncated
* @license lucide-react v0.562.0 - ISC
*
* This source code is licensed under the ISC license.
@@ -193,7 +193,7 @@ Error generating stack: `+g.message+`
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/const Tb=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],G0=ht("x",Tb);function rn(t){(t.key==="Enter"||t.key===" ")&&(t.preventDefault(),t.currentTarget.click())}const B0="remoteterm-theme-change",Pb=[{id:"original",name:"Original",swatches:["#111419","#181b21","#27a05c","#282c33","#f59e0b","#3b82f6"],metaThemeColor:"#111419"},{id:"light",name:"Light",swatches:["#F8F7F4","#FFFFFF","#1B7D4E","#EDEBE7","#D97706","#3B82F6"],metaThemeColor:"#F8F7F4"},{id:"ios",name:"iPhone",swatches:["#F2F2F7","#FFFFFF","#007AFF","#E5E5EA","#FF9F0A","#34C759"],metaThemeColor:"#F2F2F7"},{id:"paper-grove",name:"Paper Grove",swatches:["#F7F1E4","#FFF9EE","#2F9E74","#E7DEC8","#E76F51","#5C7CFA"],metaThemeColor:"#F7F1E4"},{id:"cyberpunk",name:"Cyberpunk",swatches:["#07080A","#0D1112","#00FF41","#141E17","#FAFF00","#FF2E6C"],metaThemeColor:"#07080A"},{id:"obsidian-glass",name:"Obsidian Glass",swatches:["#0C0E12","#151821","#D4A070","#1E2230","#D4924A","#5B82B4"],metaThemeColor:"#0C0E12"},{id:"solar-flare",name:"Solar Flare",swatches:["#0D0607","#151012","#FF0066","#2D1D22","#FF8C1A","#30ACD4"],metaThemeColor:"#0D0607"},{id:"lagoon-pop",name:"Lagoon Pop",swatches:["#081A22","#0F2630","#23D7C6","#173844","#FF7A66","#7C83FF"],metaThemeColor:"#081A22"},{id:"candy-dusk",name:"Candy Dusk",swatches:["#140F24","#201736","#FF79C9","#2A2144","#FFC857","#8BE9FD"],metaThemeColor:"#140F24"},{id:"high-contrast",name:"High Contrast",swatches:["#000000","#141414","#3B9EFF","#1E1E1E","#FFB800","#FF4757"],metaThemeColor:"#000000"},{id:"monochrome",name:"Monochrome",swatches:["#FAFAFA","#FFFFFF","#111111","#EAEAEA","#8A8A8A","#4A4A4A"],metaThemeColor:"#FAFAFA"},{id:"windows-95",name:"Windows 95",swatches:["#008080","#C0C0C0","#000080","#DFDFDF","#FFDE59","#000000"],metaThemeColor:"#008080"}],kx="remoteterm-theme";function D0(){try{return localStorage.getItem(kx)??"original"}catch{return"original"}}function Ex(t){try{localStorage.setItem(kx,t)}catch{}t==="original"?delete document.documentElement.dataset.theme:document.documentElement.dataset.theme=t;const r=Pb.find(s=>s.id===t);if(r){const s=document.querySelector('meta[name="theme-color"]');s&&s.setAttribute("content",r.metaThemeColor)}typeof window<"u"&&window.dispatchEvent(new CustomEvent(B0,{detail:t}))}function _x(t){var r,s,a="";if(typeof t=="string"||typeof t=="number")a+=t;else if(typeof t=="object")if(Array.isArray(t)){var i=t.length;for(r=0;r<i;r++)t[r]&&(s=_x(t[r]))&&(a&&(a+=" "),a+=s)}else for(s in t)t[s]&&(a&&(a+=" "),a+=s);return a}function Sx(){for(var t,r,s=0,a="",i=arguments.length;s<i;s++)(t=arguments[s])&&(r=_x(t))&&(a&&(a+=" "),a+=r);return a}const jb=(t,r)=>{const s=new Array(t.length+r.length);for(let a=0;a<t.length;a++)s[a]=t[a];for(let a=0;a<r.length;a++)s[t.length+a]=r[a];return s},Mb=(t,r)=>({classGroupId:t,validator:r}),Ax=(t=new Map,r=null,s)=>({nextPart:t,validators:r,classGroupId:s}),Vl="-",fp=[],zb="arbitrary..",Ob=t=>{const r=Lb(t),{conflictingClassGroups:s,conflictingClassGroupModifiers:a}=t;return{getClassGroupId:d=>{if(d.startsWith("[")&&d.endsWith("]"))return Hb(d);const u=d.split(Vl),p=u[0]===""&&u.length>1?1:0;return Nx(u,p,r)},getConflictingClassGroupIds:(d,u)=>{if(u){const p=a[d],f=s[d];return p?f?jb(f,p):p:f||fp}return s[d]||fp}}},Nx=(t,r,s)=>{if(t.length-r===0)return s.classGroupId;const i=t[r],l=s.nextPart.get(i);if(l){const f=Nx(t,r+1,l);if(f)return f}const d=s.validators;if(d===null)return;const u=r===0?t.join(Vl):t.slice(r).join(Vl),p=d.length;for(let f=0;f<p;f++){const v=d[f];if(v.validator(u))return v.classGroupId}},Hb=t=>t.slice(1,-1).indexOf(":")===-1?void 0:(()=>{const r=t.slice(1,-1),s=r.indexOf(":"),a=r.slice(0,s);return a?zb+a:void 0})(),Lb=t=>{const{theme:r,classGroups:s}=t;return Ib(s,r)},Ib=(t,r)=>{const s=Ax();for(const a in t){const i=t[a];Y0(i,s,a,r)}return s},Y0=(t,r,s,a)=>{const i=t.length;for(let l=0;l<i;l++){const d=t[l];$b(d,r,s,a)}},$b=(t,r,s,a)=>{if(typeof t=="string"){Vb(t,r,s);return}if(typeof t=="function"){Ub(t,r,s,a);return}Wb(t,r,s,a)},Vb=(t,r,s)=>{const a=t===""?r:Bx(r,t);a.classGroupId=s},Ub=(t,r,s,a)=>{if(qb(t)){Y0(t(a),r,s,a);return}r.validators===null&&(r.validators=[]),r.validators.push(Mb(s,t))},Wb=(t,r,s,a)=>{const i=Object.entries(t),l=i.length;for(let d=0;d<l;d++){const[u,p]=i[d];Y0(p,Bx(r,u),s,a)}},Bx=(t,r)=>{let s=t;const a=r.split(Vl),i=a.length;for(let l=0;l<i;l++){const d=a[l];let u=s.nextPart.get(d);u||(u=Ax(),s.nextPart.set(d,u)),s=u}return s},qb=t=>"isThemeGetter"in t&&t.isThemeGetter===!0,Kb=t=>{if(t<1)return{get:()=>{},set:()=>{}};let r=0,s=Object.create(null),a=Object.create(null);const i=(l,d)=>{s[l]=d,r++,r>t&&(r=0,a=s,s=Object.create(null))};return{get(l){let d=s[l];if(d!==void 0)return d;if((d=a[l])!==void 0)return i(l,d),d},set(l,d){l in s?s[l]=d:i(l,d)}}},F0="!",hp=":",Gb=[],pp=(t,r,s,a,i)=>({modifiers:t,hasImportantModifier:r,baseClassName:s,maybePostfixModifierPosition:a,isExternal:i}),Yb=t=>{const{prefix:r,experimentalParseClassName:s}=t;let a=i=>{const l=[];let d=Line truncated
*/const Tb=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],G0=ht("x",Tb);function rn(t){(t.key==="Enter"||t.key===" ")&&(t.preventDefault(),t.currentTarget.click())}const B0="remoteterm-theme-change",Pb=[{id:"original",name:"Original",swatches:["#111419","#181b21","#27a05c","#282c33","#f59e0b","#3b82f6"],metaThemeColor:"#111419"},{id:"light",name:"Light",swatches:["#F8F7F4","#FFFFFF","#1B7D4E","#EDEBE7","#D97706","#3B82F6"],metaThemeColor:"#F8F7F4"},{id:"ios",name:"iPhone",swatches:["#F2F2F7","#FFFFFF","#007AFF","#E5E5EA","#FF9F0A","#34C759"],metaThemeColor:"#F2F2F7"},{id:"paper-grove",name:"Paper Grove",swatches:["#F7F1E4","#FFF9EE","#2F9E74","#E7DEC8","#E76F51","#5C7CFA"],metaThemeColor:"#F7F1E4"},{id:"cyberpunk",name:"Cyberpunk",swatches:["#07080A","#0D1112","#00FF41","#141E17","#FAFF00","#FF2E6C"],metaThemeColor:"#07080A"},{id:"obsidian-glass",name:"Obsidian Glass",swatches:["#0C0E12","#151821","#D4A070","#1E2230","#D4924A","#5B82B4"],metaThemeColor:"#0C0E12"},{id:"solar-flare",name:"Solar Flare",swatches:["#0D0607","#151012","#FF0066","#2D1D22","#FF8C1A","#30ACD4"],metaThemeColor:"#0D0607"},{id:"lagoon-pop",name:"Lagoon Pop",swatches:["#081A22","#0F2630","#23D7C6","#173844","#FF7A66","#7C83FF"],metaThemeColor:"#081A22"},{id:"candy-dusk",name:"Candy Dusk",swatches:["#140F24","#201736","#FF79C9","#2A2144","#FFC857","#8BE9FD"],metaThemeColor:"#140F24"},{id:"high-contrast",name:"High Contrast",swatches:["#000000","#141414","#3B9EFF","#1E1E1E","#FFB800","#FF4757"],metaThemeColor:"#000000"},{id:"monochrome",name:"Monochrome",swatches:["#FAFAFA","#FFFFFF","#111111","#EAEAEA","#8A8A8A","#4A4A4A"],metaThemeColor:"#FAFAFA"},{id:"windows-95",name:"Windows 95",swatches:["#008080","#C0C0C0","#000080","#DFDFDF","#FFDE59","#000000"],metaThemeColor:"#008080"}],kx="remoteterm-theme";function D0(){try{return localStorage.getItem(kx)??"original"}catch{return"original"}}function Ex(t){try{localStorage.setItem(kx,t)}catch{}t==="original"?delete document.documentElement.dataset.theme:document.documentElement.dataset.theme=t;const r=Pb.find(s=>s.id===t);if(r){const s=document.querySelector('meta[name="theme-color"]');s&&s.setAttribute("content",r.metaThemeColor)}typeof window<"u"&&window.dispatchEvent(new CustomEvent(B0,{detail:t}))}function _x(t){var r,s,a="";if(typeof t=="string"||typeof t=="number")a+=t;else if(typeof t=="object")if(Array.isArray(t)){var i=t.length;for(r=0;r<i;r++)t[r]&&(s=_x(t[r]))&&(a&&(a+=" "),a+=s)}else for(s in t)t[s]&&(a&&(a+=" "),a+=s);return a}function Sx(){for(var t,r,s=0,a="",i=arguments.length;s<i;s++)(t=arguments[s])&&(r=_x(t))&&(a&&(a+=" "),a+=r);return a}const jb=(t,r)=>{const s=new Array(t.length+r.length);for(let a=0;a<t.length;a++)s[a]=t[a];for(let a=0;a<r.length;a++)s[t.length+a]=r[a];return s},Mb=(t,r)=>({classGroupId:t,validator:r}),Ax=(t=new Map,r=null,s)=>({nextPart:t,validators:r,classGroupId:s}),Vl="-",fp=[],zb="arbitrary..",Ob=t=>{const r=Lb(t),{conflictingClassGroups:s,conflictingClassGroupModifiers:a}=t;return{getClassGroupId:d=>{if(d.startsWith("[")&&d.endsWith("]"))return Hb(d);const u=d.split(Vl),p=u[0]===""&&u.length>1?1:0;return Nx(u,p,r)},getConflictingClassGroupIds:(d,u)=>{if(u){const p=a[d],f=s[d];return p?f?jb(f,p):p:f||fp}return s[d]||fp}}},Nx=(t,r,s)=>{if(t.length-r===0)return s.classGroupId;const i=t[r],l=s.nextPart.get(i);if(l){const f=Nx(t,r+1,l);if(f)return f}const d=s.validators;if(d===null)return;const u=r===0?t.join(Vl):t.slice(r).join(Vl),p=d.length;for(let f=0;f<p;f++){const v=d[f];if(v.validator(u))return v.classGroupId}},Hb=t=>t.slice(1,-1).indexOf(":")===-1?void 0:(()=>{const r=t.slice(1,-1),s=r.indexOf(":"),a=r.slice(0,s);return a?zb+a:void 0})(),Lb=t=>{const{theme:r,classGroups:s}=t;return Ib(s,r)},Ib=(t,r)=>{const s=Ax();for(const a in t){const i=t[a];Y0(i,s,a,r)}return s},Y0=(t,r,s,a)=>{const i=t.length;for(let l=0;l<i;l++){const d=t[l];$b(d,r,s,a)}},$b=(t,r,s,a)=>{if(typeof t=="string"){Vb(t,r,s);return}if(typeof t=="function"){Ub(t,r,s,a);return}Wb(t,r,s,a)},Vb=(t,r,s)=>{const a=t===""?r:Bx(r,t);a.classGroupId=s},Ub=(t,r,s,a)=>{if(qb(t)){Y0(t(a),r,s,a);return}r.validators===null&&(r.validators=[]),r.validators.push(Mb(s,t))},Wb=(t,r,s,a)=>{const i=Object.entries(t),l=i.length;for(let d=0;d<l;d++){const[u,p]=i[d];Y0(p,Bx(r,u),s,a)}},Bx=(t,r)=>{let s=t;const a=r.split(Vl),i=a.length;for(let l=0;l<i;l++){const d=a[l];let u=s.nextPart.get(d);u||(u=Ax(),s.nextPart.set(d,u)),s=u}return s},qb=t=>"isThemeGetter"in t&&t.isThemeGetter===!0,Kb=t=>{if(t<1)return{get:()=>{},set:()=>{}};let r=0,s=Object.create(null),a=Object.create(null);const i=(l,d)=>{s[l]=d,r++,r>t&&(r=0,a=s,s=Object.create(null))};return{get(l){let d=s[l];if(d!==void 0)return d;if((d=a[l])!==void 0)return i(l,d),d},set(l,d){l in s?s[l]=d:i(l,d)}}},F0="!",hp=":",Gb=[],pp=(t,r,s,a,i)=>({modifiers:t,hasImportantModifier:r,baseClassName:s,maybePostfixModifierPosition:a,isExternal:i}),Yb=t=>{const{prefix:r,experimentalParseClassName:s}=t;let a=i=>{const l=[];let d=Line truncated
.`.concat(P4,` {
overflow: hidden `).concat(a,`;
padding-right: `).concat(u,"px ").concat(a,`;
@@ -233,12 +233,12 @@ Error generating stack: `+g.message+`
`)},Dp=function(){var t=parseInt(document.body.getAttribute(us)||"0",10);return isFinite(t)?t:0},eC=function(){E.useEffect(function(){return document.body.setAttribute(us,(Dp()+1).toString()),function(){var t=Dp()-1;t<=0?document.body.removeAttribute(us):document.body.setAttribute(us,t.toString())}},[])},tC=function(t){var r=t.noRelative,s=t.noImportant,a=t.gapMode,i=a===void 0?"margin":a;eC();var l=E.useMemo(function(){return Q4(i)},[i]);return E.createElement(Z4,{styles:J4(l,!r,i,s?"":"!important")})},P0=!1;if(typeof window<"u")try{var Zi=Object.defineProperty({},"passive",{get:function(){return P0=!0,!0}});window.addEventListener("test",Zi,Zi),window.removeEventListener("test",Zi,Zi)}catch{P0=!1}var ss=P0?{passive:!1}:!1,nC=function(t){return t.tagName==="TEXTAREA"},n1=function(t,r){if(!(t instanceof Element))return!1;var s=window.getComputedStyle(t);return s[r]!=="hidden"&&!(s.overflowY===s.overflowX&&!nC(t)&&s[r]==="visible")},rC=function(t){return n1(t,"overflowY")},oC=function(t){return n1(t,"overflowX")},Fp=function(t,r){var s=r.ownerDocument,a=r;do{typeof ShadowRoot<"u"&&a instanceof ShadowRoot&&(a=a.host);var i=r1(t,a);if(i){var l=o1(t,a),d=l[1],u=l[2];if(d>u)return!0}a=a.parentNode}while(a&&a!==s.body);return!1},sC=function(t){var r=t.scrollTop,s=t.scrollHeight,a=t.clientHeight;return[r,s,a]},aC=function(t){var r=t.scrollLeft,s=t.scrollWidth,a=t.clientWidth;return[r,s,a]},r1=function(t,r){return t==="v"?rC(r):oC(r)},o1=function(t,r){return t==="v"?sC(r):aC(r)},iC=function(t,r){return t==="h"&&r==="rtl"?-1:1},lC=function(t,r,s,a,i){var l=iC(t,window.getComputedStyle(r).direction),d=l*a,u=s.target,p=r.contains(u),f=!1,v=d>0,m=0,y=0;do{if(!u)break;var w=o1(t,u),C=w[0],_=w[1],b=w[2],N=_-b-l*C;(C||N)&&r1(t,u)&&(m+=N,y+=C);var A=u.parentNode;u=A&&A.nodeType===Node.DOCUMENT_FRAGMENT_NODE?A.host:A}while(!p&&u!==document.body||p&&(r.contains(u)||r===u));return(v&&Math.abs(m)<1||!v&&Math.abs(y)<1)&&(f=!0),f},Ji=function(t){return"changedTouches"in t?[t.changedTouches[0].clientX,t.changedTouches[0].clientY]:[0,0]},Rp=function(t){return[t.deltaX,t.deltaY]},Tp=function(t){return t&&"current"in t?t.current:t},cC=function(t,r){return t[0]===r[0]&&t[1]===r[1]},uC=function(t){return`
.block-interactivity-`.concat(t,` {pointer-events: none;}
.allow-interactivity-`).concat(t,` {pointer-events: all;}
`)},dC=0,as=[];function fC(t){var r=E.useRef([]),s=E.useRef([0,0]),a=E.useRef(),i=E.useState(dC++)[0],l=E.useState(t1)[0],d=E.useRef(t);E.useEffect(function(){d.current=t},[t]),E.useEffect(function(){if(t.inert){document.body.classList.add("block-interactivity-".concat(i));var _=T4([t.lockRef.current],(t.shards||[]).map(Tp),!0).filter(Boolean);return _.forEach(function(b){return b.classList.add("allow-interactivity-".concat(i))}),function(){document.body.classList.remove("block-interactivity-".concat(i)),_.forEach(function(b){return b.classList.remove("allow-interactivity-".concat(i))})}}},[t.inert,t.lockRef.current,t.shards]);var u=E.useCallback(function(_,b){if("touches"in _&&_.touches.length===2||_.type==="wheel"&&_.ctrlKey)return!d.current.allowPinchZoom;var N=Ji(_),A=s.current,k="deltaX"in _?_.deltaX:A[0]-N[0],B="deltaY"in _?_.deltaY:A[1]-N[1],S,R=_.target,T=Math.abs(k)>Math.abs(B)?"h":"v";if("touches"in _&&T==="h"&&R.type==="range")return!1;var F=window.getSelection(),L=F&&F.anchorNode,M=L?L===R||L.contains(R):!1;if(M)return!1;var $=Fp(T,R);if(!$)return!0;if($?S=T:(S=T==="v"?"h":"v",$=Fp(T,R)),!$)return!1;if(!a.current&&"changedTouches"in _&&(k||B)&&(a.current=S),!S)return!0;var U=a.current||S;return lC(U,b,_,U==="h"?k:B)},[]),p=E.useCallback(function(_){var b=_;if(!(!as.length||as[as.length-1]!==l)){var N="deltaY"in b?Rp(b):Ji(b),A=r.current.filter(function(S){return S.name===b.type&&(S.target===b.target||b.target===S.shadowParent)&&cC(S.delta,N)})[0];if(A&&A.should){b.cancelable&&b.preventDefault();return}if(!A){var k=(d.current.shards||[]).map(Tp).filter(Boolean).filter(function(S){return S.contains(b.target)}),B=k.length>0?u(b,k[0]):!d.current.noIsolation;B&&b.cancelable&&b.preventDefault()}}},[]),f=E.useCallback(function(_,b,N,A){var k={name:_,delta:b,target:N,should:A,shadowParent:hC(N)};r.current.push(k),setTimeout(function(){r.current=r.current.filter(function(B){return B!==k})},1)},[]),v=E.useCallback(function(_){s.current=Ji(_),a.current=void 0},[]),m=E.useCallback(function(_){f(_.type,Rp(_),_.target,u(_,t.lockRef.current))},[]),y=E.useCallback(function(_){f(_.type,Ji(_),_.target,u(_,t.lockRef.current))},[]);E.useEffect(function(){return as.push(l),t.setCallbacks({onScrollCapture:m,onWheelCapture:m,onTouchMoveCapture:y}),document.addEventListener("wheel",p,ss),document.addEventListener("touchmove",p,ss),document.addEventListener("touchstart",v,ss),function(){as=as.filter(function(_){return _!==l}),document.removeEventListener("wheel",p,ss),document.removeEventListener("touchmove",p,ss),document.removeEventListener("touchstart",v,ss)}},[]);var w=t.removeScrollBar,C=t.inert;return E.createElement(E.Fragment,null,C?E.createElement(l,{styles:uC(i)}):null,w?E.createElement(tC,{noRelative:t.noRelative,gapMode:t.gapMode}):null)}function hC(t){for(var r=null;t!==null;)t instanceof ShadowRoot&&(r=t.host,t=t.host),t=t.parentNode;return r}const pC=$4(e1,fC);var s1=E.forwardRef(function(t,r){return E.createElement(Ql,nr({},t,{ref:r,sideCar:pC}))});s1.classNames=Ql.classNames;var mC=function(t){if(typeof document>"u")return null;var r=Array.isArray(t)?t[0]:t;return r.ownerDocument.body},is=new WeakMap,el=new WeakMap,tl={},p0=0,a1=function(t){return t&&(t.host||a1(t.parentNode))},xC=function(t,r){return r.map(function(s){if(t.contains(s))return s;var a=a1(s);return a&&t.contains(a)?a:(console.error("aria-hidden",s,"in not contained inside",t,". Doing nothing"),null)}).filter(function(s){return!!s})},vC=function(t,r,s,a){var i=xC(r,Array.isArray(t)?t:[t]);tl[s]||(tl[s]=new WeakMap);var l=tl[s],d=[],u=new Set,p=new Set(i),f=function(m){!m||u.has(m)||(u.add(m),f(m.parentNode))};i.forEach(f);var v=function(m){!m||p.has(m)||Array.prototype.forEach.call(m.children,function(y){if(u.has(y))v(y);else try{var w=y.getAttribute(a),C=w!==null&&w!=="false",_=(is.get(y)||0)+1,b=(l.get(y)||0)+1;is.set(y,_),l.set(y,b),d.push(y),_===1&&C&&el.set(y,!0),b===1&&y.setAttribute(s,"true"),C||y.setAttribute(a,"true")}catch(N){console.error("aria-hidden: cannot operate on ",y,N)}})};return v(r),u.clear(),p0++,function(){d.forEach(function(m){var y=is.get(m)-1,w=l.get(m)-1;is.set(m,y),l.set(m,w),y||(el.has(m)||m.removeAttribute(a),el.delete(m)),w||m.removeAttribute(s)}),p0--,p0||(is=new WeakMap,is=new WeakMap,el=new WeakMap,tl={})}},yC=function(t,r,s){s===void 0&&(s="data-aria-hidden");var a=Array.from(Array.isArray(t)?t:[t]),i=mC(t);return i?(a.push.apply(a,Array.from(i.querySelectorAll("[aria-live], script"))),vC(a,i,s,"aria-hidden")):function(){return null}};function gC(t){const r=bC(t),s=E.forwardRef((a,i)=>{const{children:l,...d}=a,u=E.Children.toArray(l),p=u.find(CC);if(p){const f=p.props.children,v=u.map(m=>m===p?E.Children.count(f)>1?E.Children.only(null):E.isValidElement(f)?f.props.children:null:m);return h.jsx(r,{...d,ref:i,children:E.isValidElement(f)?E.cloneElement(f,void 0,v):null})}return h.jsx(r,{...d,ref:i,children:l})});return s.displayName=`${t}.Slot`,s}function bC(t){const r=E.forwardRef((s,a)=>{const{children:i Line truncated
`)},dC=0,as=[];function fC(t){var r=E.useRef([]),s=E.useRef([0,0]),a=E.useRef(),i=E.useState(dC++)[0],l=E.useState(t1)[0],d=E.useRef(t);E.useEffect(function(){d.current=t},[t]),E.useEffect(function(){if(t.inert){document.body.classList.add("block-interactivity-".concat(i));var _=T4([t.lockRef.current],(t.shards||[]).map(Tp),!0).filter(Boolean);return _.forEach(function(b){return b.classList.add("allow-interactivity-".concat(i))}),function(){document.body.classList.remove("block-interactivity-".concat(i)),_.forEach(function(b){return b.classList.remove("allow-interactivity-".concat(i))})}}},[t.inert,t.lockRef.current,t.shards]);var u=E.useCallback(function(_,b){if("touches"in _&&_.touches.length===2||_.type==="wheel"&&_.ctrlKey)return!d.current.allowPinchZoom;var N=Ji(_),A=s.current,k="deltaX"in _?_.deltaX:A[0]-N[0],B="deltaY"in _?_.deltaY:A[1]-N[1],S,R=_.target,T=Math.abs(k)>Math.abs(B)?"h":"v";if("touches"in _&&T==="h"&&R.type==="range")return!1;var D=window.getSelection(),L=D&&D.anchorNode,M=L?L===R||L.contains(R):!1;if(M)return!1;var $=Fp(T,R);if(!$)return!0;if($?S=T:(S=T==="v"?"h":"v",$=Fp(T,R)),!$)return!1;if(!a.current&&"changedTouches"in _&&(k||B)&&(a.current=S),!S)return!0;var U=a.current||S;return lC(U,b,_,U==="h"?k:B)},[]),p=E.useCallback(function(_){var b=_;if(!(!as.length||as[as.length-1]!==l)){var N="deltaY"in b?Rp(b):Ji(b),A=r.current.filter(function(S){return S.name===b.type&&(S.target===b.target||b.target===S.shadowParent)&&cC(S.delta,N)})[0];if(A&&A.should){b.cancelable&&b.preventDefault();return}if(!A){var k=(d.current.shards||[]).map(Tp).filter(Boolean).filter(function(S){return S.contains(b.target)}),B=k.length>0?u(b,k[0]):!d.current.noIsolation;B&&b.cancelable&&b.preventDefault()}}},[]),f=E.useCallback(function(_,b,N,A){var k={name:_,delta:b,target:N,should:A,shadowParent:hC(N)};r.current.push(k),setTimeout(function(){r.current=r.current.filter(function(B){return B!==k})},1)},[]),v=E.useCallback(function(_){s.current=Ji(_),a.current=void 0},[]),m=E.useCallback(function(_){f(_.type,Rp(_),_.target,u(_,t.lockRef.current))},[]),y=E.useCallback(function(_){f(_.type,Ji(_),_.target,u(_,t.lockRef.current))},[]);E.useEffect(function(){return as.push(l),t.setCallbacks({onScrollCapture:m,onWheelCapture:m,onTouchMoveCapture:y}),document.addEventListener("wheel",p,ss),document.addEventListener("touchmove",p,ss),document.addEventListener("touchstart",v,ss),function(){as=as.filter(function(_){return _!==l}),document.removeEventListener("wheel",p,ss),document.removeEventListener("touchmove",p,ss),document.removeEventListener("touchstart",v,ss)}},[]);var w=t.removeScrollBar,C=t.inert;return E.createElement(E.Fragment,null,C?E.createElement(l,{styles:uC(i)}):null,w?E.createElement(tC,{noRelative:t.noRelative,gapMode:t.gapMode}):null)}function hC(t){for(var r=null;t!==null;)t instanceof ShadowRoot&&(r=t.host,t=t.host),t=t.parentNode;return r}const pC=$4(e1,fC);var s1=E.forwardRef(function(t,r){return E.createElement(Ql,nr({},t,{ref:r,sideCar:pC}))});s1.classNames=Ql.classNames;var mC=function(t){if(typeof document>"u")return null;var r=Array.isArray(t)?t[0]:t;return r.ownerDocument.body},is=new WeakMap,el=new WeakMap,tl={},p0=0,a1=function(t){return t&&(t.host||a1(t.parentNode))},xC=function(t,r){return r.map(function(s){if(t.contains(s))return s;var a=a1(s);return a&&t.contains(a)?a:(console.error("aria-hidden",s,"in not contained inside",t,". Doing nothing"),null)}).filter(function(s){return!!s})},vC=function(t,r,s,a){var i=xC(r,Array.isArray(t)?t:[t]);tl[s]||(tl[s]=new WeakMap);var l=tl[s],d=[],u=new Set,p=new Set(i),f=function(m){!m||u.has(m)||(u.add(m),f(m.parentNode))};i.forEach(f);var v=function(m){!m||p.has(m)||Array.prototype.forEach.call(m.children,function(y){if(u.has(y))v(y);else try{var w=y.getAttribute(a),C=w!==null&&w!=="false",_=(is.get(y)||0)+1,b=(l.get(y)||0)+1;is.set(y,_),l.set(y,b),d.push(y),_===1&&C&&el.set(y,!0),b===1&&y.setAttribute(s,"true"),C||y.setAttribute(a,"true")}catch(N){console.error("aria-hidden: cannot operate on ",y,N)}})};return v(r),u.clear(),p0++,function(){d.forEach(function(m){var y=is.get(m)-1,w=l.get(m)-1;is.set(m,y),l.set(m,w),y||(el.has(m)||m.removeAttribute(a),el.delete(m)),w||m.removeAttribute(s)}),p0--,p0||(is=new WeakMap,is=new WeakMap,el=new WeakMap,tl={})}},yC=function(t,r,s){s===void 0&&(s="data-aria-hidden");var a=Array.from(Array.isArray(t)?t:[t]),i=mC(t);return i?(a.push.apply(a,Array.from(i.querySelectorAll("[aria-live], script"))),vC(a,i,s,"aria-hidden")):function(){return null}};function gC(t){const r=bC(t),s=E.forwardRef((a,i)=>{const{children:l,...d}=a,u=E.Children.toArray(l),p=u.find(CC);if(p){const f=p.props.children,v=u.map(m=>m===p?E.Children.count(f)>1?E.Children.only(null):E.isValidElement(f)?f.props.children:null:m);return h.jsx(r,{...d,ref:i,children:E.isValidElement(f)?E.cloneElement(f,void 0,v):null})}return h.jsx(r,{...d,ref:i,children:l})});return s.displayName=`${t}.Slot`,s}function bC(t){const r=E.forwardRef((s,a)=>{const{children:i Line truncated
If you want to hide the \`${r.titleName}\`, you can wrap it with our VisuallyHidden component.
For more information, see https://radix-ui.com/primitives/docs/components/${r.docsSlug}`;return E.useEffect(()=>{t&&(document.getElementById(t)||console.error(s))},[s,t]),null},TC="DialogDescriptionWarning",PC=({contentRef:t,descriptionId:r})=>{const a=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${w1(TC).contentName}}.`;return E.useEffect(()=>{var l;const i=(l=t.current)==null?void 0:l.getAttribute("aria-describedby");r&&i&&(document.getElementById(r)||console.warn(a))},[a,t,r]),null},C1=l1,k1=d1,Jl=f1,ec=h1,tc=m1,nc=v1,E1=g1;const Ta=C1,jC=k1,_1=E.forwardRef(({className:t,...r},s)=>h.jsx(Jl,{ref:s,className:Ve("fixed inset-0 z-50 bg-overlay/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",t),...r}));_1.displayName=Jl.displayName;const gs=E.forwardRef(({className:t,children:r,...s},a)=>h.jsxs(jC,{children:[h.jsx(_1,{}),h.jsxs(ec,{ref:a,className:Ve("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",t),...s,children:[r,h.jsxs(E1,{className:"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground",children:[h.jsx(G0,{className:"h-4 w-4"}),h.jsx("span",{className:"sr-only",children:"Close"})]})]})]}));gs.displayName=ec.displayName;const bs=({className:t,...r})=>h.jsx("div",{className:Ve("flex flex-col space-y-1.5 text-center sm:text-left",t),...r});bs.displayName="DialogHeader";const Pa=({className:t,...r})=>h.jsx("div",{className:Ve("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",t),...r});Pa.displayName="DialogFooter";const ws=E.forwardRef(({className:t,...r},s)=>h.jsx(tc,{ref:s,className:Ve("text-lg font-semibold leading-none tracking-tight",t),...r}));ws.displayName=tc.displayName;const Cs=E.forwardRef(({className:t,...r},s)=>h.jsx(nc,{ref:s,className:Ve("text-sm text-muted-foreground",t),...r}));Cs.displayName=nc.displayName;function MC(t){return t===0?"1-byte hops":t===1?"2-byte hops":t===2?"3-byte hops":"Unknown hop width"}function Pp(t,r,s,a){if(t.path_len<=0||!t.path)return`${r} -> ${s}`;const i=Gr(t.path,t.path_len).map(l=>{const d=Wx(l,a,!0);return d.length===1?d[0].name||`${d[0].public_key.slice(0,l.length)}…`:d.length>1?`${l}…?`:`${l}…`});return[r,...i,s].join(" -> ")}function jp({label:t,route:r,chain:s}){const a=Gr(r.path,r.path_len).join(" -> ")||"direct";return h.jsxs("div",{className:"rounded-md border border-border bg-muted/20 p-3",children:[h.jsxs("div",{className:"flex items-center justify-between gap-3",children:[h.jsx("h4",{className:"text-sm font-semibold",children:t}),h.jsx("span",{className:"text-[11px] text-muted-foreground",children:In(r.path_len,!0)})]}),h.jsx("p",{className:"mt-2 text-sm",children:s}),h.jsxs("div",{className:"mt-2 flex flex-wrap gap-x-3 gap-y-1 text-[11px] text-muted-foreground",children:[h.jsxs("span",{children:["Raw: ",a]}),h.jsx("span",{children:MC(r.path_hash_mode)})]})]})}function zC({open:t,onClose:r,contact:s,contacts:a,radioName:i,onDiscover:l}){const[d,u]=E.useState(!1),[p,f]=E.useState(null),[v,m]=E.useState(null),y=E.useMemo(()=>Z0(s),[s]),w=Fa(s),C=E.useMemo(()=>{if(s.last_path_len===-1)return"Flood";const k=Gr(s.last_path,s.last_path_len);return k.length>0?`${In(s.last_path_len,!0)} (${k.join(" -> ")})`:In(s.last_path_len,!0)},[s.last_path,s.last_path_len]),_=E.useMemo(()=>{if(!w)return null;if(y.pathLen===-1)return"Flood";const k=Gr(y.path,y.pathLen);return k.length>0?`${In(y.pathLen,!0)} (${k.join(" -> ")})`:In(y.pathLen,!0)},[y,w]),b=v?Pp(v.forward_path,i||"Local radio",s.name||s.public_key.slice(0,12),a):null,N=v?Pp(v.return_path,s.name||s.public_key.slice(0,12),i||"Local radio",a):null,A=async()=>{u(!0),f(null);try{const k=await l(s.public_key);m(k)}catch(k){f(k instanceof Error?k.message:"Unknown error")}finally{u(!1)}};return h.jsx(Ta,{open:t,onOpenChange:k=>!k&&r(),children:h.jsxs(gs,{className:"sm:max-w-[560px]",children:[h.jsxs(bs,{children:[h.jsx(ws,{children:"Path Discovery"}),h.jsx(Cs,{children:"Send a routed probe to this contact and wait for the round-trip path response. The learned forward route will be saved back onto the contact if a response comes back."})]}),h.jsxs("div",{className:"space-y-4",children:[h.jsxs("div",{className:"rounded-md border border-border bg-muted/20 p-3 text-sm",children:[h.jsx("div",{className:"font-medium",children:s.name Line truncated
`).map((Ie,rt,ut)=>h.jsxs("span",{children:[sk(Ie,v),rt<ut.length-1&&h.jsx("br",{})]},rt)),!ve&&h.jsxs(h.Fragment,{children:[h.jsx("span",{className:"text-[10px] text-muted-foreground ml-2",children:Fn(Q.sender_timestamp||Q.received_at)}),!Q.outgoing&&Q.paths&&Q.paths.length>0&&h.jsx(Vp,{paths:Q.paths,variant:"inline",onClick:()=>L({paths:Q.paths,senderInfo:pt(Q,Te,$e)})})]}),Q.outgoing&&(Q.acked>0?Q.paths&&Q.paths.length>0?h.jsx("span",{className:"text-muted-foreground cursor-pointer hover:text-primary",role:"button",tabIndex:0,onKeyDown:rn,onClick:Ie=>{Ie.stopPropagation(),L({paths:Q.paths,senderInfo:Rt,messageId:Q.id,isOutgoingChan:Q.type==="CHAN"&&!!f})},title:"View echo paths","aria-label":`Acknowledged, ${Q.acked} echo${Q.acked!==1?"s":""} — view paths`,children:` ✓${Q.acked>1?Q.acked:""}`}):h.jsx("span",{className:"text-muted-foreground",children:` ✓${Q.acked>1?Q.acked:""}`}):f&&Q.type==="CHAN"?h.jsxs("span",{className:"text-muted-foreground cursor-pointer hover:text-primary",role:"button",tabIndex:0,onKeyDown:rn,onClick:Ie=>{Ie.stopPropagation(),L({paths:[],senderInfo:Rt,messageId:Q.id,isOutgoingChan:!0})},title:"Message status","aria-label":"No echoes yet — view message status",children:[" ","?"]}):h.jsxs("span",{className:"text-muted-foreground",title:"No repeats heard yet",children:[" ","?"]}))]})]})]})]},Q.id)}),b&&h.jsx("div",{className:"text-center py-2 text-muted-foreground text-sm",role:"status",children:"Loading newer messages..."}),!b&&_&&h.jsx("div",{className:"text-center py-2 text-muted-foreground text-xs",children:"Scroll down for newer messages"})]}),ie&&h.jsx("div",{className:"pointer-events-none absolute bottom-4 left-1/2 -translate-x-1/2",children:h.jsxs("div",{className:"pointer-events-auto flex h-9 items-center overflow-hidden rounded-full border border-border bg-card shadow-lg transition-all hover:scale-105",children:[h.jsx("button",{type:"button",onClick:()=>{var Q,xe;(xe=(Q=K.current)==null?void 0:Q.scrollIntoView)==null||xe.call(Q,{block:"center"}),oe(!0),re(!1)},className:"h-full px-3 text-sm font-medium hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",children:"Jump to unread"}),h.jsx("button",{type:"button",onClick:()=>{oe(!0),re(!1)},className:"flex h-full w-9 items-center justify-center border-l border-border text-muted-foreground hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring","aria-label":"Dismiss jump to unread",title:"Dismiss jump to unread",children:"×"})]})}),R&&h.jsx("button",{onClick:Ue,className:"absolute bottom-4 right-4 w-9 h-9 rounded-full bg-card hover:bg-accent border border-border flex items-center justify-center shadow-lg transition-all hover:scale-105 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",title:"Scroll to bottom","aria-label":"Scroll to bottom",children:h.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"text-muted-foreground",children:h.jsx("polyline",{points:"6 9 12 15 18 9"})})}),F&&h.jsx(tk,{open:!0,onClose:()=>L(null),paths:F.paths,senderInfo:F.senderInfo,contacts:r,config:m??null,messageId:F.messageId,isOutgoingChan:F.isOutgoingChan,isResendable:Et,onResend:f})]})}var mr={},ua={},Kt={},Up;function En(){if(Up)return Kt;Up=1,Object.defineProperty(Kt,"__esModule",{value:!0}),Kt.RequestType=Kt.AdvertFlags=Kt.DeviceRole=Kt.PayloadVersion=Kt.ControlSubType=Kt.PayloadType=Kt.RouteType=void 0;var t;(function(u){u[u.TransportFlood=0]="TransportFlood",u[u.Flood=1]="Flood",u[u.Direct=2]="Direct",u[u.TransportDirect=3]="TransportDirect"})(t||(Kt.RouteType=t={}));var r;(function(u){u[u.Request=0]="Request",u[u.Response=1]="Response",u[u.TextMessage=2]="TextMessage",u[u.Ack=3]="Ack",u[u.Advert=4]="Advert",u[u.GroupText=5]="GroupText",u[u.GroupData=6]="GroupData",u[u.AnonRequest=7]="AnonRequest",u[u.Path=8]="Path",u[u.Trace=9]="Trace",u[u.Multipart=10]="Multipart",u[u.Control=11]="Control",u[u.RawCustom=15]="RawCustom"})(r||(Kt.PayloadType=r={}));var s;(function(u){u[u.NodeDiscoverReq=128]="NodeDiscoverReq",u[u.NodeDiscoverResp=144]="NodeDiscoverResp"})(s||(Kt.ControlSubType=s={}));var a;(function(u){u[u.Version1=0]="Version1",u[u.Version2=1]="Version2",u[u.Version3=2]="Version3",u[u.Version4=3]="Version4"})(a||(Kt.PayloadVersion=a={}));var i;(function(u){u[u.Unknown=0]="Unknown",u[u.ChatNode=1]="ChatNode",u[u.Repeater=2]="Repeater",u[u.RoomServer=3]="RoomServer",u[u.Sensor=4]="Sensor"})(i||(Kt.DeviceRole=i={}));var l;(function(u){u[u.HasLocation=16]="HasLocation",u[u.HasFeature1=32]="HasFeature1",u[u.HasFeature2=64]="HasFeature2",u[u.HasName=128]="HasName"})(l||(Kt.AdvertFlags=l={}));var d;return(function(u){u[u.GetStats=1]="GetStats",u[u.Keepalive=2]="Keepalive",u[u.GetTelemetryData=3]="GetTelemetryData",u[u.GetMinMaxAvgData=4]="GetMinMaxAvgData",u[u.GetAccessList=5]="GetAc Line truncated
For more information, see https://radix-ui.com/primitives/docs/components/${r.docsSlug}`;return E.useEffect(()=>{t&&(document.getElementById(t)||console.error(s))},[s,t]),null},TC="DialogDescriptionWarning",PC=({contentRef:t,descriptionId:r})=>{const a=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${w1(TC).contentName}}.`;return E.useEffect(()=>{var l;const i=(l=t.current)==null?void 0:l.getAttribute("aria-describedby");r&&i&&(document.getElementById(r)||console.warn(a))},[a,t,r]),null},C1=l1,k1=d1,Jl=f1,ec=h1,tc=m1,nc=v1,E1=g1;const Ta=C1,jC=k1,_1=E.forwardRef(({className:t,...r},s)=>h.jsx(Jl,{ref:s,className:Ve("fixed inset-0 z-50 bg-overlay/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",t),...r}));_1.displayName=Jl.displayName;const gs=E.forwardRef(({className:t,children:r,...s},a)=>h.jsxs(jC,{children:[h.jsx(_1,{}),h.jsxs(ec,{ref:a,className:Ve("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",t),...s,children:[r,h.jsxs(E1,{className:"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground",children:[h.jsx(G0,{className:"h-4 w-4"}),h.jsx("span",{className:"sr-only",children:"Close"})]})]})]}));gs.displayName=ec.displayName;const bs=({className:t,...r})=>h.jsx("div",{className:Ve("flex flex-col space-y-1.5 text-center sm:text-left",t),...r});bs.displayName="DialogHeader";const Pa=({className:t,...r})=>h.jsx("div",{className:Ve("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",t),...r});Pa.displayName="DialogFooter";const ws=E.forwardRef(({className:t,...r},s)=>h.jsx(tc,{ref:s,className:Ve("text-lg font-semibold leading-none tracking-tight",t),...r}));ws.displayName=tc.displayName;const Cs=E.forwardRef(({className:t,...r},s)=>h.jsx(nc,{ref:s,className:Ve("text-sm text-muted-foreground",t),...r}));Cs.displayName=nc.displayName;function MC(t){return t===0?"1-byte hops":t===1?"2-byte hops":t===2?"3-byte hops":"Unknown hop width"}function Pp(t,r,s,a){if(t.path_len<=0||!t.path)return`${r} -> ${s}`;const i=Gr(t.path,t.path_len).map(l=>{const d=Wx(l,a,!0);return d.length===1?d[0].name||`${d[0].public_key.slice(0,l.length)}…`:d.length>1?`${l}…?`:`${l}…`});return[r,...i,s].join(" -> ")}function jp({label:t,route:r,chain:s}){const a=Gr(r.path,r.path_len).join(" -> ")||"direct";return h.jsxs("div",{className:"rounded-md border border-border bg-muted/20 p-3",children:[h.jsxs("div",{className:"flex items-center justify-between gap-3",children:[h.jsx("h4",{className:"text-sm font-semibold",children:t}),h.jsx("span",{className:"text-[11px] text-muted-foreground",children:In(r.path_len,!0)})]}),h.jsx("p",{className:"mt-2 text-sm",children:s}),h.jsxs("div",{className:"mt-2 flex flex-wrap gap-x-3 gap-y-1 text-[11px] text-muted-foreground",children:[h.jsxs("span",{children:["Raw: ",a]}),h.jsx("span",{children:MC(r.path_hash_mode)})]})]})}function zC({open:t,onClose:r,contact:s,contacts:a,radioName:i,onDiscover:l}){const[d,u]=E.useState(!1),[p,f]=E.useState(null),[v,m]=E.useState(null),y=E.useMemo(()=>Z0(s),[s]),w=Fa(s),C=E.useMemo(()=>{if(s.last_path_len===-1)return"Flood";const k=Gr(s.last_path,s.last_path_len);return k.length>0?`${In(s.last_path_len,!0)} (${k.join(" -> ")})`:In(s.last_path_len,!0)},[s.last_path,s.last_path_len]),_=E.useMemo(()=>{if(!w)return null;if(y.pathLen===-1)return"Flood";const k=Gr(y.path,y.pathLen);return k.length>0?`${In(y.pathLen,!0)} (${k.join(" -> ")})`:In(y.pathLen,!0)},[y,w]),b=v?Pp(v.forward_path,i||"Local radio",s.name||s.public_key.slice(0,12),a):null,N=v?Pp(v.return_path,s.name||s.public_key.slice(0,12),i||"Local radio",a):null,A=async()=>{u(!0),f(null);try{const k=await l(s.public_key);m(k)}catch(k){f(k instanceof Error?k.message:"Unknown error")}finally{u(!1)}};return h.jsx(Ta,{open:t,onOpenChange:k=>!k&&r(),children:h.jsxs(gs,{className:"sm:max-w-[560px]",children:[h.jsxs(bs,{children:[h.jsx(ws,{children:"Path Discovery"}),h.jsx(Cs,{children:"Send a routed probe to this contact and wait for the round-trip path response. The learned forward route will be saved back onto the contact if a response comes back."})]}),h.jsxs("div",{className:"space-y-4",children:[h.jsxs("div",{className:"rounded-md border border-border bg-muted/20 p-3 text-sm",children:[h.jsx("div",{className:"font-medium",children:s.name Line truncated
`).map((Ie,rt,ut)=>h.jsxs("span",{children:[ak(Ie,v),rt<ut.length-1&&h.jsx("br",{})]},rt)),!ve&&h.jsxs(h.Fragment,{children:[h.jsx("span",{className:"text-[10px] text-muted-foreground ml-2",children:Fn(Q.sender_timestamp||Q.received_at)}),!Q.outgoing&&Q.paths&&Q.paths.length>0&&h.jsx(Vp,{paths:Q.paths,variant:"inline",onClick:()=>L({paths:Q.paths,senderInfo:pt(Q,Te,$e)})})]}),Q.outgoing&&(Q.acked>0?Q.paths&&Q.paths.length>0?h.jsx("span",{className:"text-muted-foreground cursor-pointer hover:text-primary",role:"button",tabIndex:0,onKeyDown:rn,onClick:Ie=>{Ie.stopPropagation(),L({paths:Q.paths,senderInfo:Rt,messageId:Q.id,isOutgoingChan:Q.type==="CHAN"&&!!f})},title:"View echo paths","aria-label":`Acknowledged, ${Q.acked} echo${Q.acked!==1?"s":""} — view paths`,children:` ✓${Q.acked>1?Q.acked:""}`}):h.jsx("span",{className:"text-muted-foreground",children:` ✓${Q.acked>1?Q.acked:""}`}):f&&Q.type==="CHAN"?h.jsxs("span",{className:"text-muted-foreground cursor-pointer hover:text-primary",role:"button",tabIndex:0,onKeyDown:rn,onClick:Ie=>{Ie.stopPropagation(),L({paths:[],senderInfo:Rt,messageId:Q.id,isOutgoingChan:!0})},title:"Message status","aria-label":"No echoes yet — view message status",children:[" ","?"]}):h.jsxs("span",{className:"text-muted-foreground",title:"No repeats heard yet",children:[" ","?"]}))]})]})]})]},Q.id)}),b&&h.jsx("div",{className:"text-center py-2 text-muted-foreground text-sm",role:"status",children:"Loading newer messages..."}),!b&&_&&h.jsx("div",{className:"text-center py-2 text-muted-foreground text-xs",children:"Scroll down for newer messages"})]}),ie&&h.jsx("div",{className:"pointer-events-none absolute bottom-4 left-1/2 -translate-x-1/2",children:h.jsxs("div",{className:"pointer-events-auto flex h-9 items-center overflow-hidden rounded-full border border-border bg-card shadow-lg transition-all hover:scale-105",children:[h.jsx("button",{type:"button",onClick:()=>{var Q,xe;(xe=(Q=K.current)==null?void 0:Q.scrollIntoView)==null||xe.call(Q,{block:"center"}),oe(!0),re(!1)},className:"h-full px-3 text-sm font-medium hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",children:"Jump to unread"}),h.jsx("button",{type:"button",onClick:()=>{oe(!0),re(!1)},className:"flex h-full w-9 items-center justify-center border-l border-border text-muted-foreground hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring","aria-label":"Dismiss jump to unread",title:"Dismiss jump to unread",children:"×"})]})}),R&&h.jsx("button",{onClick:Ue,className:"absolute bottom-4 right-4 w-9 h-9 rounded-full bg-card hover:bg-accent border border-border flex items-center justify-center shadow-lg transition-all hover:scale-105 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",title:"Scroll to bottom","aria-label":"Scroll to bottom",children:h.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"text-muted-foreground",children:h.jsx("polyline",{points:"6 9 12 15 18 9"})})}),D&&h.jsx(nk,{open:!0,onClose:()=>L(null),paths:D.paths,senderInfo:D.senderInfo,contacts:r,config:m??null,messageId:D.messageId,isOutgoingChan:D.isOutgoingChan,isResendable:Et,onResend:f})]})}var mr={},ua={},Kt={},Up;function En(){if(Up)return Kt;Up=1,Object.defineProperty(Kt,"__esModule",{value:!0}),Kt.RequestType=Kt.AdvertFlags=Kt.DeviceRole=Kt.PayloadVersion=Kt.ControlSubType=Kt.PayloadType=Kt.RouteType=void 0;var t;(function(u){u[u.TransportFlood=0]="TransportFlood",u[u.Flood=1]="Flood",u[u.Direct=2]="Direct",u[u.TransportDirect=3]="TransportDirect"})(t||(Kt.RouteType=t={}));var r;(function(u){u[u.Request=0]="Request",u[u.Response=1]="Response",u[u.TextMessage=2]="TextMessage",u[u.Ack=3]="Ack",u[u.Advert=4]="Advert",u[u.GroupText=5]="GroupText",u[u.GroupData=6]="GroupData",u[u.AnonRequest=7]="AnonRequest",u[u.Path=8]="Path",u[u.Trace=9]="Trace",u[u.Multipart=10]="Multipart",u[u.Control=11]="Control",u[u.RawCustom=15]="RawCustom"})(r||(Kt.PayloadType=r={}));var s;(function(u){u[u.NodeDiscoverReq=128]="NodeDiscoverReq",u[u.NodeDiscoverResp=144]="NodeDiscoverResp"})(s||(Kt.ControlSubType=s={}));var a;(function(u){u[u.Version1=0]="Version1",u[u.Version2=1]="Version2",u[u.Version3=2]="Version3",u[u.Version4=3]="Version4"})(a||(Kt.PayloadVersion=a={}));var i;(function(u){u[u.Unknown=0]="Unknown",u[u.ChatNode=1]="ChatNode",u[u.Repeater=2]="Repeater",u[u.RoomServer=3]="RoomServer",u[u.Sensor=4]="Sensor"})(i||(Kt.DeviceRole=i={}));var l;(function(u){u[u.HasLocation=16]="HasLocation",u[u.HasFeature1=32]="HasFeature1",u[u.HasFeature2=64]="HasFeature2",u[u.HasName=128]="HasName"})(l||(Kt.AdvertFlags=l={}));var d;return(function(u){u[u.GetStats=1]="GetStats",u[u.Keepalive=2]="Keepalive",u[u.GetTelemetryData=3]="GetTelemetryData",u[u.GetMinMaxAvgData=4]="GetMinMaxAvgData",u[u.GetAccessList=5]="GetAc Line truncated
(c) 2012 by Cédric Mesnil. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
@@ -247,15 +247,15 @@ For more information, see https://radix-ui.com/primitives/docs/components/${r.do
- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/return(function(a){var i=s,l=i.lib,d=l.WordArray,u=l.Hasher,p=i.algo,f=d.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),v=d.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),m=d.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),y=d.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),w=d.create([0,1518500249,1859775393,2400959708,2840853838]),C=d.create([1352829926,1548603684,1836072691,2053994217,0]),_=p.RIPEMD160=u.extend({_doReset:function(){this._hash=d.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(R,T){for(var F=0;F<16;F++){var L=T+F,M=R[L];R[L]=(M<<8|M>>>24)&16711935|(M<<24|M>>>8)&4278255360}var $=this._hash.words,U=w.words,q=C.words,Y=f.words,ie=v.words,re=m.words,le=y.words,oe,se,K,P,z,I,j,G,J,ce;I=oe=$[0],j=se=$[1],G=K=$[2],J=P=$[3],ce=z=$[4];for(var ne,F=0;F<80;F+=1)ne=oe+R[T+Y[F]]|0,F<16?ne+=b(se,K,P)+U[0]:F<32?ne+=N(se,K,P)+U[1]:F<48?ne+=A(se,K,P)+U[2]:F<64?ne+=k(se,K,P)+U[3]:ne+=B(se,K,P)+U[4],ne=ne|0,ne=S(ne,re[F]),ne=ne+z|0,oe=z,z=P,P=S(K,10),K=se,se=ne,ne=I+R[T+ie[F]]|0,F<16?ne+=B(j,G,J)+q[0]:F<32?ne+=k(j,G,J)+q[1]:F<48?ne+=A(j,G,J)+q[2]:F<64?ne+=N(j,G,J)+q[3]:ne+=b(j,G,J)+q[4],ne=ne|0,ne=S(ne,le[F]),ne=ne+ce|0,I=ce,ce=J,J=S(G,10),G=j,j=ne;ne=$[1]+K+J|0,$[1]=$[2]+P+ce|0,$[2]=$[3]+z+I|0,$[3]=$[4]+oe+j|0,$[4]=$[0]+se+G|0,$[0]=ne},_doFinalize:function(){var R=this._data,T=R.words,F=this._nDataBytes*8,L=R.sigBytes*8;T[L>>>5]|=128<<24-L%32,T[(L+64>>>9<<4)+14]=(F<<8|F>>>24)&16711935|(F<<24|F>>>8)&4278255360,R.sigBytes=(T.length+1)*4,this._process();for(var M=this._hash,$=M.words,U=0;U<5;U++){var q=$[U];$[U]=(q<<8|q>>>24)&16711935|(q<<24|q>>>8)&4278255360}return M},clone:function(){var R=u.clone.call(this);return R._hash=this._hash.clone(),R}});function b(R,T,F){return R^T^F}function N(R,T,F){return R&T|~R&F}function A(R,T,F){return(R|~T)^F}function k(R,T,F){return R&F|T&~F}function B(R,T,F){return R^(T|~F)}function S(R,T){return R<<T|R>>>32-T}i.RIPEMD160=u._createHelper(_),i.HmacRIPEMD160=u._createHmacHelper(_)})(),s.RIPEMD160})})(yl)),yl.exports}var gl={exports:{}},Rk=gl.exports,im;function rd(){return im||(im=1,(function(t,r){(function(s,a){t.exports=a(Qe())})(Rk,function(s){(function(){var a=s,i=a.lib,l=i.Base,d=a.enc,u=d.Utf8,p=a.algo;p.HMAC=l.extend({init:function(f,v){f=this._hasher=new f.init,typeof v=="string"&&(v=u.parse(v));var m=f.blockSize,y=m*4;v.sigBytes>y&&(v=f.finalize(v)),v.clamp();for(var w=this._oKey=v.clone(),C=this._iKey=v.clone(),_=w.words,b=C.words,N=0;N<m;N++)_[N]^=1549556828,b[N]^=909522486;w.sigBytes=C.sigBytes=y,this.reset()},reset:function(){var f=this._hasher;f.reset(),f.update(this._iKey)},update:function(f){return this._hasher.update(f),this},finalize:function(f){var v=this._hasher,m=v.finalize(f);v.reset();var y=v.finalize(this._oKey.clone().concat(m));return y}})})()})})(gl)),gl.exports}var bl={exports:{}},Tk=bl.exports,lm;function Pk(){return lm||(lm=1,(function(t,r){(function(s,a,i){t.exports=a(Qe(),nd(),rd())})(Tk,function(s){return(function(){var a=s,i=a.lib,l=i.Base,d=i.WordArray,u=a.algo,p=u.SHA256,f=u.HMAC,v=u.PBKDF2=l.extend({cfg:l.extend({keySize:128/32,hasher:p,iterations:25e4}),init:function(m){this.cfg=this.cfg.extend(m)},compute:function(m,y){for(var w=this.cfg,C=f.create(w.hasher,m),_=d.create(),b=d.create([1]),N=_.words,A=b.words,k=w.keySize,B=w.iterations;N.length<k;){var S=C.update(y).finalize(b);C.reset();for(var R=S.words,T=R.length,F=S,L=1;L<B;L++){F=C.finalize(F),C.reset();for(var M=F.words,$=0;$<T;$++)R[$]^=M[$]}_.concat(S),A[0]++}return _.sigBytes=k*4,_}});a.PBKDF2=function(m,y,w){return v.create(w).compute(m,y)}})(),s.PBKDF2})})(bl)),bl.exports}var wl={exports:{}},jk=wl.exports,cm;function Xr(){return cm||(cm=1,(function(t,r){(function(s,a,i){t.exports=a(Qe(),N1(),rd())})(jk,function(s){return(function(){var a=s,i=a.lib,l=i.Base,d=i.WordArray,u=a.algo,p=u.MD5,f=u.EvpKDF=l.extend({cfg:l.extend({keySize:128/32,hasher:p,iterations:1}),init:function(v){this.cfg=this.cfg.extend(v)},compute:function(v,m){for(var y,w=this.cfg,C=w.hasher.create(),_=d.create(),b=_.words,N=w.keySize,A=w.iterations;b.length<N;){y&&C.update(y),y=C.update(v).finalize(m),C.reset();for(var k=1;k<A;k++)y=C.finalize(y),C.reset();_.concat(y)}return _.sigBytes=N*4,_}});a.EvpKDF=function(v,m,y){return f.create(y).compute(v,m)}})(),s.EvpKDF})})(wl)),wl.exports}var Cl={exports:{}},Mk=Cl.exports,um;function Ut(){return um||Line truncated
*/return(function(a){var i=s,l=i.lib,d=l.WordArray,u=l.Hasher,p=i.algo,f=d.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),v=d.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),m=d.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),y=d.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),w=d.create([0,1518500249,1859775393,2400959708,2840853838]),C=d.create([1352829926,1548603684,1836072691,2053994217,0]),_=p.RIPEMD160=u.extend({_doReset:function(){this._hash=d.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(R,T){for(var D=0;D<16;D++){var L=T+D,M=R[L];R[L]=(M<<8|M>>>24)&16711935|(M<<24|M>>>8)&4278255360}var $=this._hash.words,U=w.words,q=C.words,Y=f.words,ie=v.words,re=m.words,le=y.words,oe,se,K,P,z,I,j,G,J,ce;I=oe=$[0],j=se=$[1],G=K=$[2],J=P=$[3],ce=z=$[4];for(var ne,D=0;D<80;D+=1)ne=oe+R[T+Y[D]]|0,D<16?ne+=b(se,K,P)+U[0]:D<32?ne+=N(se,K,P)+U[1]:D<48?ne+=A(se,K,P)+U[2]:D<64?ne+=k(se,K,P)+U[3]:ne+=B(se,K,P)+U[4],ne=ne|0,ne=S(ne,re[D]),ne=ne+z|0,oe=z,z=P,P=S(K,10),K=se,se=ne,ne=I+R[T+ie[D]]|0,D<16?ne+=B(j,G,J)+q[0]:D<32?ne+=k(j,G,J)+q[1]:D<48?ne+=A(j,G,J)+q[2]:D<64?ne+=N(j,G,J)+q[3]:ne+=b(j,G,J)+q[4],ne=ne|0,ne=S(ne,le[D]),ne=ne+ce|0,I=ce,ce=J,J=S(G,10),G=j,j=ne;ne=$[1]+K+J|0,$[1]=$[2]+P+ce|0,$[2]=$[3]+z+I|0,$[3]=$[4]+oe+j|0,$[4]=$[0]+se+G|0,$[0]=ne},_doFinalize:function(){var R=this._data,T=R.words,D=this._nDataBytes*8,L=R.sigBytes*8;T[L>>>5]|=128<<24-L%32,T[(L+64>>>9<<4)+14]=(D<<8|D>>>24)&16711935|(D<<24|D>>>8)&4278255360,R.sigBytes=(T.length+1)*4,this._process();for(var M=this._hash,$=M.words,U=0;U<5;U++){var q=$[U];$[U]=(q<<8|q>>>24)&16711935|(q<<24|q>>>8)&4278255360}return M},clone:function(){var R=u.clone.call(this);return R._hash=this._hash.clone(),R}});function b(R,T,D){return R^T^D}function N(R,T,D){return R&T|~R&D}function A(R,T,D){return(R|~T)^D}function k(R,T,D){return R&D|T&~D}function B(R,T,D){return R^(T|~D)}function S(R,T){return R<<T|R>>>32-T}i.RIPEMD160=u._createHelper(_),i.HmacRIPEMD160=u._createHmacHelper(_)})(),s.RIPEMD160})})(yl)),yl.exports}var gl={exports:{}},Tk=gl.exports,im;function rd(){return im||(im=1,(function(t,r){(function(s,a){t.exports=a(Qe())})(Tk,function(s){(function(){var a=s,i=a.lib,l=i.Base,d=a.enc,u=d.Utf8,p=a.algo;p.HMAC=l.extend({init:function(f,v){f=this._hasher=new f.init,typeof v=="string"&&(v=u.parse(v));var m=f.blockSize,y=m*4;v.sigBytes>y&&(v=f.finalize(v)),v.clamp();for(var w=this._oKey=v.clone(),C=this._iKey=v.clone(),_=w.words,b=C.words,N=0;N<m;N++)_[N]^=1549556828,b[N]^=909522486;w.sigBytes=C.sigBytes=y,this.reset()},reset:function(){var f=this._hasher;f.reset(),f.update(this._iKey)},update:function(f){return this._hasher.update(f),this},finalize:function(f){var v=this._hasher,m=v.finalize(f);v.reset();var y=v.finalize(this._oKey.clone().concat(m));return y}})})()})})(gl)),gl.exports}var bl={exports:{}},Pk=bl.exports,lm;function jk(){return lm||(lm=1,(function(t,r){(function(s,a,i){t.exports=a(Qe(),nd(),rd())})(Pk,function(s){return(function(){var a=s,i=a.lib,l=i.Base,d=i.WordArray,u=a.algo,p=u.SHA256,f=u.HMAC,v=u.PBKDF2=l.extend({cfg:l.extend({keySize:128/32,hasher:p,iterations:25e4}),init:function(m){this.cfg=this.cfg.extend(m)},compute:function(m,y){for(var w=this.cfg,C=f.create(w.hasher,m),_=d.create(),b=d.create([1]),N=_.words,A=b.words,k=w.keySize,B=w.iterations;N.length<k;){var S=C.update(y).finalize(b);C.reset();for(var R=S.words,T=R.length,D=S,L=1;L<B;L++){D=C.finalize(D),C.reset();for(var M=D.words,$=0;$<T;$++)R[$]^=M[$]}_.concat(S),A[0]++}return _.sigBytes=k*4,_}});a.PBKDF2=function(m,y,w){return v.create(w).compute(m,y)}})(),s.PBKDF2})})(bl)),bl.exports}var wl={exports:{}},Mk=wl.exports,cm;function Xr(){return cm||(cm=1,(function(t,r){(function(s,a,i){t.exports=a(Qe(),N1(),rd())})(Mk,function(s){return(function(){var a=s,i=a.lib,l=i.Base,d=i.WordArray,u=a.algo,p=u.MD5,f=u.EvpKDF=l.extend({cfg:l.extend({keySize:128/32,hasher:p,iterations:1}),init:function(v){this.cfg=this.cfg.extend(v)},compute:function(v,m){for(var y,w=this.cfg,C=w.hasher.create(),_=d.create(),b=_.words,N=w.keySize,A=w.iterations;b.length<N;){y&&C.update(y),y=C.update(v).finalize(m),C.reset();for(var k=1;k<A;k++)y=C.finalize(y),C.reset();_.concat(y)}return _.sigBytes=N*4,_}});a.EvpKDF=function(v,m,y){return f.create(y).compute(v,m)}})(),s.EvpKDF})})(wl)),wl.exports}var Cl={exports:{}},zk=Cl.exports,um;function Ut(){return um||Line truncated
* Counter block mode compatible with Dr Brian Gladman fileenc.c
* derived from CryptoJS.mode.CTR
* Jan Hruby jhruby.web@gmail.com
*/return s.mode.CTRGladman=(function(){var a=s.lib.BlockCipherMode.extend();function i(u){if((u>>24&255)===255){var p=u>>16&255,f=u>>8&255,v=u&255;p===255?(p=0,f===255?(f=0,v===255?v=0:++v):++f):++p,u=0,u+=p<<16,u+=f<<8,u+=v}else u+=1<<24;return u}function l(u){return(u[0]=i(u[0]))===0&&(u[1]=i(u[1])),u}var d=a.Encryptor=a.extend({processBlock:function(u,p){var f=this._cipher,v=f.blockSize,m=this._iv,y=this._counter;m&&(y=this._counter=m.slice(0),this._iv=void 0),l(y);var w=y.slice(0);f.encryptBlock(w,0);for(var C=0;C<v;C++)u[p+C]^=w[C]}});return a.Decryptor=d,a})(),s.mode.CTRGladman})})(_l)),_l.exports}var Sl={exports:{}},Vk=Sl.exports,pm;function Uk(){return pm||(pm=1,(function(t,r){(function(s,a,i){t.exports=a(Qe(),Ut())})(Vk,function(s){return s.mode.OFB=(function(){var a=s.lib.BlockCipherMode.extend(),i=a.Encryptor=a.extend({processBlock:function(l,d){var u=this._cipher,p=u.blockSize,f=this._iv,v=this._keystream;f&&(v=this._keystream=f.slice(0),this._iv=void 0),u.encryptBlock(v,0);for(var m=0;m<p;m++)l[d+m]^=v[m]}});return a.Decryptor=i,a})(),s.mode.OFB})})(Sl)),Sl.exports}var Al={exports:{}},Wk=Al.exports,mm;function qk(){return mm||(mm=1,(function(t,r){(function(s,a,i){t.exports=a(Qe(),Ut())})(Wk,function(s){return s.mode.ECB=(function(){var a=s.lib.BlockCipherMode.extend();return a.Encryptor=a.extend({processBlock:function(i,l){this._cipher.encryptBlock(i,l)}}),a.Decryptor=a.extend({processBlock:function(i,l){this._cipher.decryptBlock(i,l)}}),a})(),s.mode.ECB})})(Al)),Al.exports}var Nl={exports:{}},Kk=Nl.exports,xm;function Gk(){return xm||(xm=1,(function(t,r){(function(s,a,i){t.exports=a(Qe(),Ut())})(Kk,function(s){return s.pad.AnsiX923={pad:function(a,i){var l=a.sigBytes,d=i*4,u=d-l%d,p=l+u-1;a.clamp(),a.words[p>>>2]|=u<<24-p%4*8,a.sigBytes+=u},unpad:function(a){var i=a.words[a.sigBytes-1>>>2]&255;a.sigBytes-=i}},s.pad.Ansix923})})(Nl)),Nl.exports}var Bl={exports:{}},Yk=Bl.exports,vm;function Xk(){return vm||(vm=1,(function(t,r){(function(s,a,i){t.exports=a(Qe(),Ut())})(Yk,function(s){return s.pad.Iso10126={pad:function(a,i){var l=i*4,d=l-a.sigBytes%l;a.concat(s.lib.WordArray.random(d-1)).concat(s.lib.WordArray.create([d<<24],1))},unpad:function(a){var i=a.words[a.sigBytes-1>>>2]&255;a.sigBytes-=i}},s.pad.Iso10126})})(Bl)),Bl.exports}var Dl={exports:{}},Qk=Dl.exports,ym;function Zk(){return ym||(ym=1,(function(t,r){(function(s,a,i){t.exports=a(Qe(),Ut())})(Qk,function(s){return s.pad.Iso97971={pad:function(a,i){a.concat(s.lib.WordArray.create([2147483648],1)),s.pad.ZeroPadding.pad(a,i)},unpad:function(a){s.pad.ZeroPadding.unpad(a),a.sigBytes--}},s.pad.Iso97971})})(Dl)),Dl.exports}var Fl={exports:{}},Jk=Fl.exports,gm;function e8(){return gm||(gm=1,(function(t,r){(function(s,a,i){t.exports=a(Qe(),Ut())})(Jk,function(s){return s.pad.ZeroPadding={pad:function(a,i){var l=i*4;a.clamp(),a.sigBytes+=l-(a.sigBytes%l||l)},unpad:function(a){for(var i=a.words,l=a.sigBytes-1,l=a.sigBytes-1;l>=0;l--)if(i[l>>>2]>>>24-l%4*8&255){a.sigBytes=l+1;break}}},s.pad.ZeroPadding})})(Fl)),Fl.exports}var Rl={exports:{}},t8=Rl.exports,bm;function n8(){return bm||(bm=1,(function(t,r){(function(s,a,i){t.exports=a(Qe(),Ut())})(t8,function(s){return s.pad.NoPadding={pad:function(){},unpad:function(){}},s.pad.NoPadding})})(Rl)),Rl.exports}var Tl={exports:{}},r8=Tl.exports,wm;function o8(){return wm||(wm=1,(function(t,r){(function(s,a,i){t.exports=a(Qe(),Ut())})(r8,function(s){return(function(a){var i=s,l=i.lib,d=l.CipherParams,u=i.enc,p=u.Hex,f=i.format;f.Hex={stringify:function(v){return v.ciphertext.toString(p)},parse:function(v){var m=p.parse(v);return d.create({ciphertext:m})}}})(),s.format.Hex})})(Tl)),Tl.exports}var Pl={exports:{}},s8=Pl.exports,Cm;function a8(){return Cm||(Cm=1,(function(t,r){(function(s,a,i){t.exports=a(Qe(),_o(),So(),Xr(),Ut())})(s8,function(s){return(function(){var a=s,i=a.lib,l=i.BlockCipher,d=a.algo,u=[],p=[],f=[],v=[],m=[],y=[],w=[],C=[],_=[],b=[];(function(){for(var k=[],B=0;B<256;B++)B<128?k[B]=B<<1:k[B]=B<<1^283;for(var S=0,R=0,B=0;B<256;B++){var T=R^R<<1^R<<2^R<<3^R<<4;T=T>>>8^T&255^99,u[S]=T,p[T]=S;var F=k[S],L=k[F],M=k[L],$=k[T]*257^T*16843008;f[S]=$<<24|$>>>8,v[S]=$<<16|$>>>16,m[S]=$<<8|$>>>24,y[S]=$;var $=M*16843009^L*65537^F*257^S*16843008;w[T]=$<<24|$>>>8,C[T]=$<<16|$>>>16,_[T]=$<<8|$>>>24,b[T]=$,S?(S=F^k[k[k[M^F]]],R^=k[k[R]]):S=R=1}})();var N=[0,1,2,4,8,16,32,64,128,27,54],A=d.AES=l.extend({_doReset:function(){var k;if(!(this._nRounds&&this._keyPriorReset===this._key)){for(var B=this._keyPriorReset=this._key,S=B.words,R=B.sigBytes/4,T=this._nRounds=R+6,F=(T+1)*4,L=this._keySchedule=[],M=0;M<F;M++)M<R?L[M]=S[M]:(k=L[M-1],M%R?R>6&&M%R==4&&(k=u[k>>>24]<<24|u[k>>>16&255]<<16|u[k>>>8&255]<<8|u[k&255]):(k=k<<8|k>>>24,k=u[k>>>24]<<24|u[k>>>16&255]<<16|u[k>>>8&255]<<8|u[k&255],k^=N[M/R|0]<<24),L[M]=L[M-R]^k);for(var $=this._invKeySchedule=[],U=0;U<F;U++){var M=F-U;if(U%4)var k=L[M];else var k=L[M-4];U<4||M<=4?$[U]=k:$[U]=w[u[k>>>24]]^C[u[k>>>16&255]]^_[u[k>>>8&255]]^b[u[k&255]]}}},encryptBlock:Line truncated
*/return s.mode.CTRGladman=(function(){var a=s.lib.BlockCipherMode.extend();function i(u){if((u>>24&255)===255){var p=u>>16&255,f=u>>8&255,v=u&255;p===255?(p=0,f===255?(f=0,v===255?v=0:++v):++f):++p,u=0,u+=p<<16,u+=f<<8,u+=v}else u+=1<<24;return u}function l(u){return(u[0]=i(u[0]))===0&&(u[1]=i(u[1])),u}var d=a.Encryptor=a.extend({processBlock:function(u,p){var f=this._cipher,v=f.blockSize,m=this._iv,y=this._counter;m&&(y=this._counter=m.slice(0),this._iv=void 0),l(y);var w=y.slice(0);f.encryptBlock(w,0);for(var C=0;C<v;C++)u[p+C]^=w[C]}});return a.Decryptor=d,a})(),s.mode.CTRGladman})})(_l)),_l.exports}var Sl={exports:{}},Uk=Sl.exports,pm;function Wk(){return pm||(pm=1,(function(t,r){(function(s,a,i){t.exports=a(Qe(),Ut())})(Uk,function(s){return s.mode.OFB=(function(){var a=s.lib.BlockCipherMode.extend(),i=a.Encryptor=a.extend({processBlock:function(l,d){var u=this._cipher,p=u.blockSize,f=this._iv,v=this._keystream;f&&(v=this._keystream=f.slice(0),this._iv=void 0),u.encryptBlock(v,0);for(var m=0;m<p;m++)l[d+m]^=v[m]}});return a.Decryptor=i,a})(),s.mode.OFB})})(Sl)),Sl.exports}var Al={exports:{}},qk=Al.exports,mm;function Kk(){return mm||(mm=1,(function(t,r){(function(s,a,i){t.exports=a(Qe(),Ut())})(qk,function(s){return s.mode.ECB=(function(){var a=s.lib.BlockCipherMode.extend();return a.Encryptor=a.extend({processBlock:function(i,l){this._cipher.encryptBlock(i,l)}}),a.Decryptor=a.extend({processBlock:function(i,l){this._cipher.decryptBlock(i,l)}}),a})(),s.mode.ECB})})(Al)),Al.exports}var Nl={exports:{}},Gk=Nl.exports,xm;function Yk(){return xm||(xm=1,(function(t,r){(function(s,a,i){t.exports=a(Qe(),Ut())})(Gk,function(s){return s.pad.AnsiX923={pad:function(a,i){var l=a.sigBytes,d=i*4,u=d-l%d,p=l+u-1;a.clamp(),a.words[p>>>2]|=u<<24-p%4*8,a.sigBytes+=u},unpad:function(a){var i=a.words[a.sigBytes-1>>>2]&255;a.sigBytes-=i}},s.pad.Ansix923})})(Nl)),Nl.exports}var Bl={exports:{}},Xk=Bl.exports,vm;function Qk(){return vm||(vm=1,(function(t,r){(function(s,a,i){t.exports=a(Qe(),Ut())})(Xk,function(s){return s.pad.Iso10126={pad:function(a,i){var l=i*4,d=l-a.sigBytes%l;a.concat(s.lib.WordArray.random(d-1)).concat(s.lib.WordArray.create([d<<24],1))},unpad:function(a){var i=a.words[a.sigBytes-1>>>2]&255;a.sigBytes-=i}},s.pad.Iso10126})})(Bl)),Bl.exports}var Dl={exports:{}},Zk=Dl.exports,ym;function Jk(){return ym||(ym=1,(function(t,r){(function(s,a,i){t.exports=a(Qe(),Ut())})(Zk,function(s){return s.pad.Iso97971={pad:function(a,i){a.concat(s.lib.WordArray.create([2147483648],1)),s.pad.ZeroPadding.pad(a,i)},unpad:function(a){s.pad.ZeroPadding.unpad(a),a.sigBytes--}},s.pad.Iso97971})})(Dl)),Dl.exports}var Fl={exports:{}},e8=Fl.exports,gm;function t8(){return gm||(gm=1,(function(t,r){(function(s,a,i){t.exports=a(Qe(),Ut())})(e8,function(s){return s.pad.ZeroPadding={pad:function(a,i){var l=i*4;a.clamp(),a.sigBytes+=l-(a.sigBytes%l||l)},unpad:function(a){for(var i=a.words,l=a.sigBytes-1,l=a.sigBytes-1;l>=0;l--)if(i[l>>>2]>>>24-l%4*8&255){a.sigBytes=l+1;break}}},s.pad.ZeroPadding})})(Fl)),Fl.exports}var Rl={exports:{}},n8=Rl.exports,bm;function r8(){return bm||(bm=1,(function(t,r){(function(s,a,i){t.exports=a(Qe(),Ut())})(n8,function(s){return s.pad.NoPadding={pad:function(){},unpad:function(){}},s.pad.NoPadding})})(Rl)),Rl.exports}var Tl={exports:{}},o8=Tl.exports,wm;function s8(){return wm||(wm=1,(function(t,r){(function(s,a,i){t.exports=a(Qe(),Ut())})(o8,function(s){return(function(a){var i=s,l=i.lib,d=l.CipherParams,u=i.enc,p=u.Hex,f=i.format;f.Hex={stringify:function(v){return v.ciphertext.toString(p)},parse:function(v){var m=p.parse(v);return d.create({ciphertext:m})}}})(),s.format.Hex})})(Tl)),Tl.exports}var Pl={exports:{}},a8=Pl.exports,Cm;function i8(){return Cm||(Cm=1,(function(t,r){(function(s,a,i){t.exports=a(Qe(),_o(),So(),Xr(),Ut())})(a8,function(s){return(function(){var a=s,i=a.lib,l=i.BlockCipher,d=a.algo,u=[],p=[],f=[],v=[],m=[],y=[],w=[],C=[],_=[],b=[];(function(){for(var k=[],B=0;B<256;B++)B<128?k[B]=B<<1:k[B]=B<<1^283;for(var S=0,R=0,B=0;B<256;B++){var T=R^R<<1^R<<2^R<<3^R<<4;T=T>>>8^T&255^99,u[S]=T,p[T]=S;var D=k[S],L=k[D],M=k[L],$=k[T]*257^T*16843008;f[S]=$<<24|$>>>8,v[S]=$<<16|$>>>16,m[S]=$<<8|$>>>24,y[S]=$;var $=M*16843009^L*65537^D*257^S*16843008;w[T]=$<<24|$>>>8,C[T]=$<<16|$>>>16,_[T]=$<<8|$>>>24,b[T]=$,S?(S=D^k[k[k[M^D]]],R^=k[k[R]]):S=R=1}})();var N=[0,1,2,4,8,16,32,64,128,27,54],A=d.AES=l.extend({_doReset:function(){var k;if(!(this._nRounds&&this._keyPriorReset===this._key)){for(var B=this._keyPriorReset=this._key,S=B.words,R=B.sigBytes/4,T=this._nRounds=R+6,D=(T+1)*4,L=this._keySchedule=[],M=0;M<D;M++)M<R?L[M]=S[M]:(k=L[M-1],M%R?R>6&&M%R==4&&(k=u[k>>>24]<<24|u[k>>>16&255]<<16|u[k>>>8&255]<<8|u[k&255]):(k=k<<8|k>>>24,k=u[k>>>24]<<24|u[k>>>16&255]<<16|u[k>>>8&255]<<8|u[k&255],k^=N[M/R|0]<<24),L[M]=L[M-R]^k);for(var $=this._invKeySchedule=[],U=0;U<D;U++){var M=D-U;if(U%4)var k=L[M];else var k=L[M-4];U<4||M<=4?$[U]=k:$[U]=w[u[k>>>24]]^C[u[k>>>16&255]]^_[u[k>>>8&255]]^b[u[k&255]]}}},encryptBlock:Line truncated
• Timestamp (4 bytes) - send time as unix timestamp
• Request Type (1 byte) - type of request (GetStats, GetTelemetryData, etc.)
• Request Data (remaining bytes) - additional request-specific data`,startByte:u+p,endByte:u+i.length-1,value:y});const w={type:t.PayloadType.Request,version:t.PayloadVersion.Version1,isValid:!0,timestamp:0,requestType:t.RequestType.GetStats,requestData:"",destinationHash:f,sourceHash:v,cipherMac:m,ciphertext:y};return l!=null&&l.includeSegments&&(w.segments=d),w}catch(d){return{type:t.PayloadType.Request,version:t.PayloadVersion.Version1,isValid:!1,errors:[d instanceof Error?d.message:"Failed to decode request payload"],timestamp:0,requestType:t.RequestType.GetStats,requestData:"",destinationHash:"",sourceHash:"",cipherMac:"",ciphertext:""}}}}return xa.RequestPayloadDecoder=s,xa}var va={},Wm;function $8(){if(Wm)return va;Wm=1,Object.defineProperty(va,"__esModule",{value:!0}),va.ResponsePayloadDecoder=void 0;const t=En(),r=Gt();class s{static decode(i,l){try{if(i.length<4){const C={type:t.PayloadType.Response,version:t.PayloadVersion.Version1,isValid:!1,errors:["Response payload too short (minimum 4 bytes: dest + source + MAC)"],destinationHash:"",sourceHash:"",cipherMac:"",ciphertext:"",ciphertextLength:0};return l!=null&&l.includeSegments&&(C.segments=[{name:"Invalid Response Data",description:"Response payload too short (minimum 4 bytes required)",startByte:l.segmentOffset||0,endByte:(l.segmentOffset||0)+i.length-1,value:(0,r.bytesToHex)(i)}]),C}const d=[],u=(l==null?void 0:l.segmentOffset)||0;let p=0;const f=(0,r.byteToHex)(i[p]);l!=null&&l.includeSegments&&d.push({name:"Destination Hash",description:"First byte of destination node public key",startByte:u+p,endByte:u+p,value:f}),p+=1;const v=(0,r.byteToHex)(i[p]);l!=null&&l.includeSegments&&d.push({name:"Source Hash",description:"First byte of source node public key",startByte:u+p,endByte:u+p,value:v}),p+=1;const m=(0,r.bytesToHex)(i.subarray(p,p+2));l!=null&&l.includeSegments&&d.push({name:"Cipher MAC",description:"MAC for encrypted data in next field",startByte:u+p,endByte:u+p+1,value:m}),p+=2;const y=(0,r.bytesToHex)(i.subarray(p));l!=null&&l.includeSegments&&i.length>p&&d.push({name:"Ciphertext",description:"Encrypted response data (tag + content)",startByte:u+p,endByte:u+i.length-1,value:y});const w={type:t.PayloadType.Response,version:t.PayloadVersion.Version1,isValid:!0,destinationHash:f,sourceHash:v,cipherMac:m,ciphertext:y,ciphertextLength:i.length-4};return l!=null&&l.includeSegments&&(w.segments=d),w}catch(d){return{type:t.PayloadType.Response,version:t.PayloadVersion.Version1,isValid:!1,errors:[d instanceof Error?d.message:"Failed to decode response payload"],destinationHash:"",sourceHash:"",cipherMac:"",ciphertext:"",ciphertextLength:0}}}}return va.ResponsePayloadDecoder=s,va}var ya={},qm;function V8(){if(qm)return ya;qm=1,Object.defineProperty(ya,"__esModule",{value:!0}),ya.AnonRequestPayloadDecoder=void 0;const t=En(),r=Gt();class s{static decode(i,l){try{if(i.length<35){const C={type:t.PayloadType.AnonRequest,version:t.PayloadVersion.Version1,isValid:!1,errors:["AnonRequest payload too short (minimum 35 bytes: dest + public key + MAC)"],destinationHash:"",senderPublicKey:"",cipherMac:"",ciphertext:"",ciphertextLength:0};return l!=null&&l.includeSegments&&(C.segments=[{name:"Invalid AnonRequest Data",description:"AnonRequest payload too short (minimum 35 bytes required: 1 for dest hash + 32 for public key + 2 for MAC)",startByte:l.segmentOffset||0,endByte:(l.segmentOffset||0)+i.length-1,value:(0,r.bytesToHex)(i)}]),C}const d=[],u=(l==null?void 0:l.segmentOffset)||0;let p=0;const f=(0,r.byteToHex)(i[0]);l!=null&&l.includeSegments&&d.push({name:"Destination Hash",description:`First byte of destination node public key: 0x${f}`,startByte:u+p,endByte:u+p,value:f}),p+=1;const v=(0,r.bytesToHex)(i.subarray(1,33));l!=null&&l.includeSegments&&d.push({name:"Sender Public Key",description:"Ed25519 public key of the sender (32 bytes)",startByte:u+p,endByte:u+p+31,value:v}),p+=32;const m=(0,r.bytesToHex)(i.subarray(33,35));l!=null&&l.includeSegments&&d.push({name:"Cipher MAC",description:"MAC for encrypted data verification (2 bytes)",startByte:u+p,endByte:u+p+1,value:m}),p+=2;const y=(0,r.bytesToHex)(i.subarray(35));l!=null&&l.includeSegments&&i.length>35&&d.push({name:"Ciphertext",description:`Encrypted message data (${i.length-35} bytes). Contains encrypted plaintext with this structure:
• Request Data (remaining bytes) - additional request-specific data`,startByte:u+p,endByte:u+i.length-1,value:y});const w={type:t.PayloadType.Request,version:t.PayloadVersion.Version1,isValid:!0,timestamp:0,requestType:t.RequestType.GetStats,requestData:"",destinationHash:f,sourceHash:v,cipherMac:m,ciphertext:y};return l!=null&&l.includeSegments&&(w.segments=d),w}catch(d){return{type:t.PayloadType.Request,version:t.PayloadVersion.Version1,isValid:!1,errors:[d instanceof Error?d.message:"Failed to decode request payload"],timestamp:0,requestType:t.RequestType.GetStats,requestData:"",destinationHash:"",sourceHash:"",cipherMac:"",ciphertext:""}}}}return xa.RequestPayloadDecoder=s,xa}var va={},Wm;function V8(){if(Wm)return va;Wm=1,Object.defineProperty(va,"__esModule",{value:!0}),va.ResponsePayloadDecoder=void 0;const t=En(),r=Gt();class s{static decode(i,l){try{if(i.length<4){const C={type:t.PayloadType.Response,version:t.PayloadVersion.Version1,isValid:!1,errors:["Response payload too short (minimum 4 bytes: dest + source + MAC)"],destinationHash:"",sourceHash:"",cipherMac:"",ciphertext:"",ciphertextLength:0};return l!=null&&l.includeSegments&&(C.segments=[{name:"Invalid Response Data",description:"Response payload too short (minimum 4 bytes required)",startByte:l.segmentOffset||0,endByte:(l.segmentOffset||0)+i.length-1,value:(0,r.bytesToHex)(i)}]),C}const d=[],u=(l==null?void 0:l.segmentOffset)||0;let p=0;const f=(0,r.byteToHex)(i[p]);l!=null&&l.includeSegments&&d.push({name:"Destination Hash",description:"First byte of destination node public key",startByte:u+p,endByte:u+p,value:f}),p+=1;const v=(0,r.byteToHex)(i[p]);l!=null&&l.includeSegments&&d.push({name:"Source Hash",description:"First byte of source node public key",startByte:u+p,endByte:u+p,value:v}),p+=1;const m=(0,r.bytesToHex)(i.subarray(p,p+2));l!=null&&l.includeSegments&&d.push({name:"Cipher MAC",description:"MAC for encrypted data in next field",startByte:u+p,endByte:u+p+1,value:m}),p+=2;const y=(0,r.bytesToHex)(i.subarray(p));l!=null&&l.includeSegments&&i.length>p&&d.push({name:"Ciphertext",description:"Encrypted response data (tag + content)",startByte:u+p,endByte:u+i.length-1,value:y});const w={type:t.PayloadType.Response,version:t.PayloadVersion.Version1,isValid:!0,destinationHash:f,sourceHash:v,cipherMac:m,ciphertext:y,ciphertextLength:i.length-4};return l!=null&&l.includeSegments&&(w.segments=d),w}catch(d){return{type:t.PayloadType.Response,version:t.PayloadVersion.Version1,isValid:!1,errors:[d instanceof Error?d.message:"Failed to decode response payload"],destinationHash:"",sourceHash:"",cipherMac:"",ciphertext:"",ciphertextLength:0}}}}return va.ResponsePayloadDecoder=s,va}var ya={},qm;function U8(){if(qm)return ya;qm=1,Object.defineProperty(ya,"__esModule",{value:!0}),ya.AnonRequestPayloadDecoder=void 0;const t=En(),r=Gt();class s{static decode(i,l){try{if(i.length<35){const C={type:t.PayloadType.AnonRequest,version:t.PayloadVersion.Version1,isValid:!1,errors:["AnonRequest payload too short (minimum 35 bytes: dest + public key + MAC)"],destinationHash:"",senderPublicKey:"",cipherMac:"",ciphertext:"",ciphertextLength:0};return l!=null&&l.includeSegments&&(C.segments=[{name:"Invalid AnonRequest Data",description:"AnonRequest payload too short (minimum 35 bytes required: 1 for dest hash + 32 for public key + 2 for MAC)",startByte:l.segmentOffset||0,endByte:(l.segmentOffset||0)+i.length-1,value:(0,r.bytesToHex)(i)}]),C}const d=[],u=(l==null?void 0:l.segmentOffset)||0;let p=0;const f=(0,r.byteToHex)(i[0]);l!=null&&l.includeSegments&&d.push({name:"Destination Hash",description:`First byte of destination node public key: 0x${f}`,startByte:u+p,endByte:u+p,value:f}),p+=1;const v=(0,r.bytesToHex)(i.subarray(1,33));l!=null&&l.includeSegments&&d.push({name:"Sender Public Key",description:"Ed25519 public key of the sender (32 bytes)",startByte:u+p,endByte:u+p+31,value:v}),p+=32;const m=(0,r.bytesToHex)(i.subarray(33,35));l!=null&&l.includeSegments&&d.push({name:"Cipher MAC",description:"MAC for encrypted data verification (2 bytes)",startByte:u+p,endByte:u+p+1,value:m}),p+=2;const y=(0,r.bytesToHex)(i.subarray(35));l!=null&&l.includeSegments&&i.length>35&&d.push({name:"Ciphertext",description:`Encrypted message data (${i.length-35} bytes). Contains encrypted plaintext with this structure:
• Timestamp (4 bytes) - send time as unix timestamp
• Sync Timestamp (4 bytes) - room server only, sender's "sync messages SINCE x" timestamp
• Password (remaining bytes) - password for repeater/room`,startByte:u+p,endByte:u+i.length-1,value:y});const w={type:t.PayloadType.AnonRequest,version:t.PayloadVersion.Version1,isValid:!0,destinationHash:f,senderPublicKey:v,cipherMac:m,ciphertext:y,ciphertextLength:i.length-35};return l!=null&&l.includeSegments&&(w.segments=d),w}catch(d){return{type:t.PayloadType.AnonRequest,version:t.PayloadVersion.Version1,isValid:!1,errors:[d instanceof Error?d.message:"Failed to decode AnonRequest payload"],destinationHash:"",senderPublicKey:"",cipherMac:"",ciphertext:"",ciphertextLength:0}}}}return ya.AnonRequestPayloadDecoder=s,ya}var ga={},Km;function U8(){if(Km)return ga;Km=1,Object.defineProperty(ga,"__esModule",{value:!0}),ga.AckPayloadDecoder=void 0;const t=En(),r=Gt();class s{static decode(i,l){try{if(i.length<4){const v={type:t.PayloadType.Ack,version:t.PayloadVersion.Version1,isValid:!1,errors:["Ack payload too short (minimum 4 bytes for checksum)"],checksum:""};return l!=null&&l.includeSegments&&(v.segments=[{name:"Invalid Ack Data",description:"Ack payload too short (minimum 4 bytes required for checksum)",startByte:l.segmentOffset||0,endByte:(l.segmentOffset||0)+i.length-1,value:(0,r.bytesToHex)(i)}]),v}const d=[],u=(l==null?void 0:l.segmentOffset)||0,p=(0,r.bytesToHex)(i.subarray(0,4));l!=null&&l.includeSegments&&d.push({name:"Checksum",description:`CRC checksum of message timestamp, text, and sender pubkey: 0x${p}`,startByte:u,endByte:u+3,value:p}),l!=null&&l.includeSegments&&i.length>4&&d.push({name:"Additional Data",description:"Extra data in Ack payload",startByte:u+4,endByte:u+i.length-1,value:(0,r.bytesToHex)(i.subarray(4))});const f={type:t.PayloadType.Ack,version:t.PayloadVersion.Version1,isValid:!0,checksum:p};return l!=null&&l.includeSegments&&(f.segments=d),f}catch(d){return{type:t.PayloadType.Ack,version:t.PayloadVersion.Version1,isValid:!1,errors:[d instanceof Error?d.message:"Failed to decode Ack payload"],checksum:""}}}}return ga.AckPayloadDecoder=s,ga}var ba={},Gm;function W8(){if(Gm)return ba;Gm=1,Object.defineProperty(ba,"__esModule",{value:!0}),ba.PathPayloadDecoder=void 0;const t=En(),r=Gt();class s{static decode(i){try{if(i.length<2)return{type:t.PayloadType.Path,version:t.PayloadVersion.Version1,isValid:!1,errors:["Path payload too short (minimum 2 bytes: path length + extra type)"],pathLength:0,pathHashes:[],extraType:0,extraData:""};const l=i[0],d=(l>>6)+1,u=l&63,p=u*d;if(d===4)return{type:t.PayloadType.Path,version:t.PayloadVersion.Version1,isValid:!1,errors:["Invalid path length byte: reserved hash size (bits 7:6 = 11)"],pathLength:0,pathHashes:[],extraType:0,extraData:""};if(i.length<1+p+1)return{type:t.PayloadType.Path,version:t.PayloadVersion.Version1,isValid:!1,errors:[`Path payload too short (need ${1+p+1} bytes for path length + path + extra type)`],pathLength:u,...d>1?{pathHashSize:d}:{},pathHashes:[],extraType:0,extraData:""};const f=[];for(let y=0;y<u;y++){const w=1+y*d,C=i.subarray(w,w+d);f.push((0,r.bytesToHex)(C))}const v=i[1+p];let m="";return i.length>1+p+1&&(m=(0,r.bytesToHex)(i.subarray(1+p+1))),{type:t.PayloadType.Path,version:t.PayloadVersion.Version1,isValid:!0,pathLength:u,...d>1?{pathHashSize:d}:{},pathHashes:f,extraType:v,extraData:m}}catch(l){return{type:t.PayloadType.Path,version:t.PayloadVersion.Version1,isValid:!1,errors:[l instanceof Error?l.message:"Failed to decode Path payload"],pathLength:0,pathHashes:[],extraType:0,extraData:""}}}}return ba.PathPayloadDecoder=s,ba}var wa={},Ym;function q8(){if(Ym)return wa;Ym=1,Object.defineProperty(wa,"__esModule",{value:!0}),wa.TextMessagePayloadDecoder=void 0;const t=En(),r=Gt();class s{static decode(i,l){try{if(i.length<4){const C={type:t.PayloadType.TextMessage,version:t.PayloadVersion.Version1,isValid:!1,errors:["TextMessage payload too short (minimum 4 bytes: dest + source + MAC)"],destinationHash:"",sourceHash:"",cipherMac:"",ciphertext:"",ciphertextLength:0};return l!=null&&l.includeSegments&&(C.segments=[{name:"Invalid TextMessage Data",description:"TextMessage payload too short (minimum 4 bytes required)",startByte:l.segmentOffset||0,endByte:(l.segmentOffset||0)+i.length-1,value:(0,r.bytesToHex)(i)}]),C}const d=[],u=(l==null?void 0:l.segmentOffset)||0;let p=0;const f=(0,r.byteToHex)(i[p]);l!=null&&l.includeSegments&&d.push({name:"Destination Hash",description:"First byte of destination node public key",startByte:u+p,endByte:u+p,value:f}),p+=1;const v=(0,r.byteToHex)(i[p]);l!=null&&l.includeSegments&&d.push({name:"Source Hash",description:"First byte of source node public key",startByte:u+p,endByte:u+p,value:v}),p+=1;const m=(0,r.bytesToHex)(i.subarray(p,p+2));l!=null&&l.includeSegments&&d.push({name:"Cipher MAC",description:"MAC for encrypted data in next field",startByte:u+p,endByte:u+p+1,value:m}),p+=2;const y=(0,r.bytesToHex)(i.subarray(p));l!=null&&l.includeSegments&&i.length>p&&d.push({name:"Ciphertext",description:"Encrypted message data (timestamp + message text)",startByte:u+p,endByte:u+i.leng Line truncated
//# sourceMappingURL=index-pnVde5Cl.js.map
• Password (remaining bytes) - password for repeater/room`,startByte:u+p,endByte:u+i.length-1,value:y});const w={type:t.PayloadType.AnonRequest,version:t.PayloadVersion.Version1,isValid:!0,destinationHash:f,senderPublicKey:v,cipherMac:m,ciphertext:y,ciphertextLength:i.length-35};return l!=null&&l.includeSegments&&(w.segments=d),w}catch(d){return{type:t.PayloadType.AnonRequest,version:t.PayloadVersion.Version1,isValid:!1,errors:[d instanceof Error?d.message:"Failed to decode AnonRequest payload"],destinationHash:"",senderPublicKey:"",cipherMac:"",ciphertext:"",ciphertextLength:0}}}}return ya.AnonRequestPayloadDecoder=s,ya}var ga={},Km;function W8(){if(Km)return ga;Km=1,Object.defineProperty(ga,"__esModule",{value:!0}),ga.AckPayloadDecoder=void 0;const t=En(),r=Gt();class s{static decode(i,l){try{if(i.length<4){const v={type:t.PayloadType.Ack,version:t.PayloadVersion.Version1,isValid:!1,errors:["Ack payload too short (minimum 4 bytes for checksum)"],checksum:""};return l!=null&&l.includeSegments&&(v.segments=[{name:"Invalid Ack Data",description:"Ack payload too short (minimum 4 bytes required for checksum)",startByte:l.segmentOffset||0,endByte:(l.segmentOffset||0)+i.length-1,value:(0,r.bytesToHex)(i)}]),v}const d=[],u=(l==null?void 0:l.segmentOffset)||0,p=(0,r.bytesToHex)(i.subarray(0,4));l!=null&&l.includeSegments&&d.push({name:"Checksum",description:`CRC checksum of message timestamp, text, and sender pubkey: 0x${p}`,startByte:u,endByte:u+3,value:p}),l!=null&&l.includeSegments&&i.length>4&&d.push({name:"Additional Data",description:"Extra data in Ack payload",startByte:u+4,endByte:u+i.length-1,value:(0,r.bytesToHex)(i.subarray(4))});const f={type:t.PayloadType.Ack,version:t.PayloadVersion.Version1,isValid:!0,checksum:p};return l!=null&&l.includeSegments&&(f.segments=d),f}catch(d){return{type:t.PayloadType.Ack,version:t.PayloadVersion.Version1,isValid:!1,errors:[d instanceof Error?d.message:"Failed to decode Ack payload"],checksum:""}}}}return ga.AckPayloadDecoder=s,ga}var ba={},Gm;function q8(){if(Gm)return ba;Gm=1,Object.defineProperty(ba,"__esModule",{value:!0}),ba.PathPayloadDecoder=void 0;const t=En(),r=Gt();class s{static decode(i){try{if(i.length<2)return{type:t.PayloadType.Path,version:t.PayloadVersion.Version1,isValid:!1,errors:["Path payload too short (minimum 2 bytes: path length + extra type)"],pathLength:0,pathHashes:[],extraType:0,extraData:""};const l=i[0],d=(l>>6)+1,u=l&63,p=u*d;if(d===4)return{type:t.PayloadType.Path,version:t.PayloadVersion.Version1,isValid:!1,errors:["Invalid path length byte: reserved hash size (bits 7:6 = 11)"],pathLength:0,pathHashes:[],extraType:0,extraData:""};if(i.length<1+p+1)return{type:t.PayloadType.Path,version:t.PayloadVersion.Version1,isValid:!1,errors:[`Path payload too short (need ${1+p+1} bytes for path length + path + extra type)`],pathLength:u,...d>1?{pathHashSize:d}:{},pathHashes:[],extraType:0,extraData:""};const f=[];for(let y=0;y<u;y++){const w=1+y*d,C=i.subarray(w,w+d);f.push((0,r.bytesToHex)(C))}const v=i[1+p];let m="";return i.length>1+p+1&&(m=(0,r.bytesToHex)(i.subarray(1+p+1))),{type:t.PayloadType.Path,version:t.PayloadVersion.Version1,isValid:!0,pathLength:u,...d>1?{pathHashSize:d}:{},pathHashes:f,extraType:v,extraData:m}}catch(l){return{type:t.PayloadType.Path,version:t.PayloadVersion.Version1,isValid:!1,errors:[l instanceof Error?l.message:"Failed to decode Path payload"],pathLength:0,pathHashes:[],extraType:0,extraData:""}}}}return ba.PathPayloadDecoder=s,ba}var wa={},Ym;function K8(){if(Ym)return wa;Ym=1,Object.defineProperty(wa,"__esModule",{value:!0}),wa.TextMessagePayloadDecoder=void 0;const t=En(),r=Gt();class s{static decode(i,l){try{if(i.length<4){const C={type:t.PayloadType.TextMessage,version:t.PayloadVersion.Version1,isValid:!1,errors:["TextMessage payload too short (minimum 4 bytes: dest + source + MAC)"],destinationHash:"",sourceHash:"",cipherMac:"",ciphertext:"",ciphertextLength:0};return l!=null&&l.includeSegments&&(C.segments=[{name:"Invalid TextMessage Data",description:"TextMessage payload too short (minimum 4 bytes required)",startByte:l.segmentOffset||0,endByte:(l.segmentOffset||0)+i.length-1,value:(0,r.bytesToHex)(i)}]),C}const d=[],u=(l==null?void 0:l.segmentOffset)||0;let p=0;const f=(0,r.byteToHex)(i[p]);l!=null&&l.includeSegments&&d.push({name:"Destination Hash",description:"First byte of destination node public key",startByte:u+p,endByte:u+p,value:f}),p+=1;const v=(0,r.byteToHex)(i[p]);l!=null&&l.includeSegments&&d.push({name:"Source Hash",description:"First byte of source node public key",startByte:u+p,endByte:u+p,value:v}),p+=1;const m=(0,r.bytesToHex)(i.subarray(p,p+2));l!=null&&l.includeSegments&&d.push({name:"Cipher MAC",description:"MAC for encrypted data in next field",startByte:u+p,endByte:u+p+1,value:m}),p+=2;const y=(0,r.bytesToHex)(i.subarray(p));l!=null&&l.includeSegments&&i.length>p&&d.push({name:"Ciphertext",description:"Encrypted message data (timestamp + message text)",startByte:u+p,endByte:u+i.leng Line truncated
//# sourceMappingURL=index-Fnq3QmNw.js.map
@@ -0,0 +1 @@
{"version":3,"mappings":"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 truncated
@@ -1 +0,0 @@
{"version":3,"mappings":"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 truncated
@@ -1,5 +1,5 @@
import{r as O,a3 as si,a4 as ss,v as rs}from"./index-pnVde5Cl.js";function Mn(d,_){const h=O.useRef(_);O.useEffect(function(){_!==h.current&&d.attributionControl!=null&&(h.current!=null&&d.attributionControl.removeAttribution(h.current),_!=null&&d.attributionControl.addAttribution(_)),h.current=_},[d,_])}const as=1;function hs(d){return Object.freeze({__version:as,map:d})}function xs(d,_){return Object.freeze({...d,..._})}const Cn=O.createContext(null),Sn=Cn.Provider;function ai(){const d=O.useContext(Cn);if(d==null)throw new Error("No context provided: useLeafletContext() can only be used in a descendant of <MapContainer>");return d}function zn(d){function _(h,m){const{instance:f,context:E}=d(h).current;return O.useImperativeHandle(m,()=>f),h.children==null?null:si.createElement(Sn,{value:E},h.children)}return O.forwardRef(_)}function us(d){function _(h,m){const[f,E]=O.useState(!1),{instance:P}=d(h,E).current;O.useImperativeHandle(m,()=>P),O.useEffect(function(){f&&P.update()},[P,f,h.children]);const ot=P._contentNode;return ot?ss.createPortal(h.children,ot):null}return O.forwardRef(_)}function ls(d){function _(h,m){const{instance:f}=d(h).current;return O.useImperativeHandle(m,()=>f),null}return O.forwardRef(_)}function hi(d,_){const h=O.useRef();O.useEffect(function(){return _!=null&&d.instance.on(_),h.current=_,function(){h.current!=null&&d.instance.off(h.current),h.current=null}},[d,_])}function we(d,_){const h=d.pane??_.pane;return h?{...d,pane:h}:d}function cs(d,_){return function(m,f){const E=ai(),P=d(we(m,E),E);return Mn(E.map,m.attribution),hi(P.current,m.eventHandlers),_(P.current,E,m,f),P}}var Jt={exports:{}};/* @preserve
import{r as O,a3 as si,a4 as ss,v as rs}from"./index-Fnq3QmNw.js";function Mn(d,_){const h=O.useRef(_);O.useEffect(function(){_!==h.current&&d.attributionControl!=null&&(h.current!=null&&d.attributionControl.removeAttribution(h.current),_!=null&&d.attributionControl.addAttribution(_)),h.current=_},[d,_])}const as=1;function hs(d){return Object.freeze({__version:as,map:d})}function xs(d,_){return Object.freeze({...d,..._})}const Cn=O.createContext(null),Sn=Cn.Provider;function ai(){const d=O.useContext(Cn);if(d==null)throw new Error("No context provided: useLeafletContext() can only be used in a descendant of <MapContainer>");return d}function zn(d){function _(h,m){const{instance:f,context:E}=d(h).current;return O.useImperativeHandle(m,()=>f),h.children==null?null:si.createElement(Sn,{value:E},h.children)}return O.forwardRef(_)}function us(d){function _(h,m){const[f,E]=O.useState(!1),{instance:P}=d(h,E).current;O.useImperativeHandle(m,()=>P),O.useEffect(function(){f&&P.update()},[P,f,h.children]);const ot=P._contentNode;return ot?ss.createPortal(h.children,ot):null}return O.forwardRef(_)}function ls(d){function _(h,m){const{instance:f}=d(h).current;return O.useImperativeHandle(m,()=>f),null}return O.forwardRef(_)}function hi(d,_){const h=O.useRef();O.useEffect(function(){return _!=null&&d.instance.on(_),h.current=_,function(){h.current!=null&&d.instance.off(h.current),h.current=null}},[d,_])}function we(d,_){const h=d.pane??_.pane;return h?{...d,pane:h}:d}function cs(d,_){return function(m,f){const E=ai(),P=d(we(m,E),E);return Mn(E.map,m.attribution),hi(P.current,m.eventHandlers),_(P.current,E,m,f),P}}var Jt={exports:{}};/* @preserve
* Leaflet 1.9.4, a JS library for interactive maps. https://leafletjs.com
* (c) 2010-2023 Vladimir Agafonkin, (c) 2010-2011 CloudMade
*/var fs=Jt.exports,bn;function ds(){return bn||(bn=1,(function(d,_){(function(h,m){m(_)})(fs,(function(h){var m="1.9.4";function f(t){var e,i,n,o;for(i=1,n=arguments.length;i<n;i++){o=arguments[i];for(e in o)t[e]=o[e]}return t}var E=Object.create||(function(){function t(){}return function(e){return t.prototype=e,new t}})();function P(t,e){var i=Array.prototype.slice;if(t.bind)return t.bind.apply(t,i.call(arguments,1));var n=i.call(arguments,2);return function(){return t.apply(e,n.length?n.concat(i.call(arguments)):arguments)}}var ot=0;function b(t){return"_leaflet_id"in t||(t._leaflet_id=++ot),t._leaflet_id}function At(t,e,i){var n,o,s,r;return r=function(){n=!1,o&&(s.apply(i,o),o=!1)},s=function(){n?o=arguments:(t.apply(i,arguments),setTimeout(r,e),n=!0)},s}function yt(t,e,i){var n=e[1],o=e[0],s=n-o;return t===n&&i?t:((t-o)%s+s)%s+o}function I(){return!1}function X(t,e){if(e===!1)return t;var i=Math.pow(10,e===void 0?6:e);return Math.round(t*i)/i}function U(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}function ut(t){return U(t).split(/\s+/)}function k(t,e){Object.prototype.hasOwnProperty.call(t,"options")||(t.options=t.options?E(t.options):{});for(var i in e)t.options[i]=e[i];return t.options}function Qt(t,e,i){var n=[];for(var o in t)n.push(encodeURIComponent(i?o.toUpperCase():o)+"="+encodeURIComponent(t[o]));return(!e||e.indexOf("?")===-1?"?":"&")+n.join("&")}var $t=/\{ *([\w_ -]+) *\}/g;function wt(t,e){return t.replace($t,function(i,n){var o=e[n];if(o===void 0)throw new Error("No value provided for variable "+i);return typeof o=="function"&&(o=o(e)),o})}var et=Array.isArray||function(t){return Object.prototype.toString.call(t)==="[object Array]"};function Pe(t,e){for(var i=0;i<t.length;i++)if(t[i]===e)return i;return-1}var te="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=";function Le(t){return window["webkit"+t]||window["moz"+t]||window["ms"+t]}var li=0;function ci(t){var e=+new Date,i=Math.max(0,16-(e-li));return li=e+i,window.setTimeout(t,i)}var Te=window.requestAnimationFrame||Le("RequestAnimationFrame")||ci,fi=window.cancelAnimationFrame||Le("CancelAnimationFrame")||Le("CancelRequestAnimationFrame")||function(t){window.clearTimeout(t)};function V(t,e,i){if(i&&Te===ci)t.call(e);else return Te.call(window,P(t,e))}function J(t){t&&fi.call(window,t)}var kn={__proto__:null,extend:f,create:E,bind:P,get lastId(){return ot},stamp:b,throttle:At,wrapNum:yt,falseFn:I,formatNum:X,trim:U,splitWords:ut,setOptions:k,getParamString:Qt,template:wt,isArray:et,indexOf:Pe,emptyImageUrl:te,requestFn:Te,cancelFn:fi,requestAnimFrame:V,cancelAnimFrame:J};function lt(){}lt.extend=function(t){var e=function(){k(this),this.initialize&&this.initialize.apply(this,arguments),this.callInitHooks()},i=e.__super__=this.prototype,n=E(i);n.constructor=e,e.prototype=n;for(var o in this)Object.prototype.hasOwnProperty.call(this,o)&&o!=="prototype"&&o!=="__super__"&&(e[o]=this[o]);return t.statics&&f(e,t.statics),t.includes&&(Zn(t.includes),f.apply(null,[n].concat(t.includes))),f(n,t),delete n.statics,delete n.includes,n.options&&(n.options=i.options?E(i.options):{},f(n.options,t.options)),n._initHooks=[],n.callInitHooks=function(){if(!this._initHooksCalled){i.callInitHooks&&i.callInitHooks.call(this),this._initHooksCalled=!0;for(var s=0,r=n._initHooks.length;s<r;s++)n._initHooks[s].call(this)}},e},lt.include=function(t){var e=this.prototype.options;return f(this.prototype,t),t.options&&(this.prototype.options=e,this.mergeOptions(t.options)),this},lt.mergeOptions=function(t){return f(this.prototype.options,t),this},lt.addInitHook=function(t){var e=Array.prototype.slice.call(arguments,1),i=typeof t=="function"?t:function(){this[t].apply(this,e)};return this.prototype._initHooks=this.prototype._initHooks||[],this.prototype._initHooks.push(i),this};function Zn(t){if(!(typeof L>"u"||!L||!L.Mixin)){t=et(t)?t:[t];for(var e=0;e<t.length;e++)t[e]===L.Mixin.Events&&console.warn("Deprecated include of L.Mixin.Events: this property will be removed in future releases, please inherit from L.Evented instead.",new Error().stack)}}var Y={on:function(t,e,i){if(typeof t=="object")for(var n in t)this._on(n,t[n],e);else{t=ut(t);for(var o=0,s=t.length;o<s;o++)this._on(t[o],e,i)}return this},off:function(t,e,i){if(!arguments.length)delete this._events;else if(typeof t=="object")for(var n in t)this._off(n,t[n],e);else{t=ut(t);for(var o=arguments.length===1,s=0,r=t.length;s<r;s++)o?this._off(t[s]):this._off(t[s],e,i)}return this},_on:function(t,e,i,n){if(typeof e!="function"){console.warn("wrong listener type: "+typeof e);return}if(this._listens(t,e,i)===!1){i===this&&(i=void 0);var o={fn:e,ctx:i};n&&(o.once=!0),this._events=this._events||{},this._events[t]=this._events[t]||[],this._events[t].push(o)}},_off:function(t,e,i){var n,o,s;if(this._events&&(n=this._events[t],!!n)){if(arguments.length===1){if(this._firingCount)for(o=0,s=n.length;o<s;o++)n[o].fn=I;delete this._events[t];return}if(typeof e!="function"){console.warn("wrong listenLine truncated
//# sourceMappingURL=leaflet-By4Srz79.js.map
//# sourceMappingURL=leaflet-ENrCR1B4.js.map
@@ -1 +1 @@
{"version":3,"file":"leaflet-By4Srz79.js","sources":["../../node_modules/@react-leaflet/core/lib/attribution.js","../../node_modules/@react-leaflet/core/lib/context.js","../../node_modules/@react-leaflet/core/lib/component.js","../../node_modules/@react-leaflet/core/lib/events.js","../../node_modules/@react-leaflet/core/lib/pane.js","../../node_modules/@react-leaflet/core/lib/div-overlay.js","../../node_modules/leaflet/dist/leaflet-src.js","../../node_modules/@react-leaflet/core/lib/element.js","../../node_modules/@react-leaflet/core/lib/layer.js","../../node_modules/@react-leaflet/core/lib/path.js","../../node_modules/@react-leaflet/core/lib/generic.js","../../node_modules/@react-leaflet/core/lib/grid-layer.js","../../node_modules/react-leaflet/lib/MapContainer.js","../../node_modules/react-leaflet/lib/TileLayer.js"],"sourcesContent":["import { useEffect, useRef } from 'react';\nexport function useAttribution(map, attribution) {\n const attributionRef = useRef(attribution);\n useEffect(function updateAttribution() {\n if (attribution !== attributionRef.current && map.attributionControl != null) {\n if (attributionRef.current != null) {\n map.attributionControl.removeAttribution(attributionRef.current);\n }\n if (attribution != null) {\n map.attributionControl.addAttribution(attribution);\n }\n }\n attributionRef.current = attribution;\n }, [\n map,\n attribution\n ]);\n}\n","import { createContext, useContext } from 'react';\nexport const CONTEXT_VERSION = 1;\nexport function createLeafletContext(map) {\n return Object.freeze({\n __version: CONTEXT_VERSION,\n map\n });\n}\nexport function extendContext(source, extra) {\n return Object.freeze({\n ...source,\n ...extra\n });\n}\nexport const LeafletContext = createContext(null);\nexport const LeafletProvider = LeafletContext.Provider;\nexport function useLeafletContext() {\n const context = useContext(LeafletContext);\n if (context == null) {\n throw new Error('No context provided: useLeafletContext() can only be used in a descendant of <MapContainer>');\n }\n return context;\n}\n","import React, { forwardRef, useEffect, useImperativeHandle, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { LeafletProvider } from './context.js';\nexport function createContainerComponent(useElement) {\n function ContainerComponent(props, forwardedRef) {\n const { instance , context } = useElement(props).current;\n useImperativeHandle(forwardedRef, ()=>instance);\n return props.children == null ? null : /*#__PURE__*/ React.createElement(LeafletProvider, {\n value: context\n }, props.children);\n }\n return /*#__PURE__*/ forwardRef(ContainerComponent);\n}\nexport function createDivOverlayComponent(useElement) {\n function OverlayComponent(props, forwardedRef) {\n const [isOpen, setOpen] = useState(false);\n const { instance } = useElement(props, setOpen).current;\n useImperativeHandle(forwardedRef, ()=>instance);\n useEffect(function updateOverlay() {\n if (isOpen) {\n instance.update();\n }\n }, [\n instance,\n isOpen,\n props.children\n ]);\n // @ts-ignore _contentNode missing in type definition\n const contentNode = instance._contentNode;\n return contentNode ? /*#__PURE__*/ createPortal(props.children, contentNode) : null;\n }\n return /*#__PURE__*/ forwardRef(OverlayComponent);\n}\nexport function createLeafComponent(useElement) {\n function LeafComponent(props, forwardedRef) {\n const { instance } = useElement(props).current;\n useImperativeHandle(forwardedRef, ()=>instance);\n return null;\n }\n return /*#__PURE__*/ forwardRef(LeafComponent);\n}\n","import { useEffect, useRef } from 'react';\nexport function useEventHandlers(element, eventHandlers) {\n const eventHandlersRef = useRef();\n useEffect(function addEventHandlers() {\n if (eventHandlers != null) {\n element.instance.on(eventHandlers);\n }\n eventHandlersRef.current = eventHandlers;\n return function removeEventHandlers() {\n if (eventHandlersRef.current != null) {\n element.instance.off(eventHandlersRef.current);\n }\n eventHandlersRef.current = null;\n };\n }, [\n element,\n eventHandlers\n ]);\n}\n","export function withPane(props, context) {\n const pane = props.pane ?? context.pane;\n return pane ? {\n ...props,\n pane\n } : props;\n}\n","import { useAttribution } from './attribution.js';\nimport { useLeafletContext } from './context.js';\nimport { useEventHandlers } from './events.js';\nimport { withPane } from './pane.js';\nexport function Line truncated
{"version":3,"file":"leaflet-ENrCR1B4.js","sources":["../../node_modules/@react-leaflet/core/lib/attribution.js","../../node_modules/@react-leaflet/core/lib/context.js","../../node_modules/@react-leaflet/core/lib/component.js","../../node_modules/@react-leaflet/core/lib/events.js","../../node_modules/@react-leaflet/core/lib/pane.js","../../node_modules/@react-leaflet/core/lib/div-overlay.js","../../node_modules/leaflet/dist/leaflet-src.js","../../node_modules/@react-leaflet/core/lib/element.js","../../node_modules/@react-leaflet/core/lib/layer.js","../../node_modules/@react-leaflet/core/lib/path.js","../../node_modules/@react-leaflet/core/lib/generic.js","../../node_modules/@react-leaflet/core/lib/grid-layer.js","../../node_modules/react-leaflet/lib/MapContainer.js","../../node_modules/react-leaflet/lib/TileLayer.js"],"sourcesContent":["import { useEffect, useRef } from 'react';\nexport function useAttribution(map, attribution) {\n const attributionRef = useRef(attribution);\n useEffect(function updateAttribution() {\n if (attribution !== attributionRef.current && map.attributionControl != null) {\n if (attributionRef.current != null) {\n map.attributionControl.removeAttribution(attributionRef.current);\n }\n if (attribution != null) {\n map.attributionControl.addAttribution(attribution);\n }\n }\n attributionRef.current = attribution;\n }, [\n map,\n attribution\n ]);\n}\n","import { createContext, useContext } from 'react';\nexport const CONTEXT_VERSION = 1;\nexport function createLeafletContext(map) {\n return Object.freeze({\n __version: CONTEXT_VERSION,\n map\n });\n}\nexport function extendContext(source, extra) {\n return Object.freeze({\n ...source,\n ...extra\n });\n}\nexport const LeafletContext = createContext(null);\nexport const LeafletProvider = LeafletContext.Provider;\nexport function useLeafletContext() {\n const context = useContext(LeafletContext);\n if (context == null) {\n throw new Error('No context provided: useLeafletContext() can only be used in a descendant of <MapContainer>');\n }\n return context;\n}\n","import React, { forwardRef, useEffect, useImperativeHandle, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { LeafletProvider } from './context.js';\nexport function createContainerComponent(useElement) {\n function ContainerComponent(props, forwardedRef) {\n const { instance , context } = useElement(props).current;\n useImperativeHandle(forwardedRef, ()=>instance);\n return props.children == null ? null : /*#__PURE__*/ React.createElement(LeafletProvider, {\n value: context\n }, props.children);\n }\n return /*#__PURE__*/ forwardRef(ContainerComponent);\n}\nexport function createDivOverlayComponent(useElement) {\n function OverlayComponent(props, forwardedRef) {\n const [isOpen, setOpen] = useState(false);\n const { instance } = useElement(props, setOpen).current;\n useImperativeHandle(forwardedRef, ()=>instance);\n useEffect(function updateOverlay() {\n if (isOpen) {\n instance.update();\n }\n }, [\n instance,\n isOpen,\n props.children\n ]);\n // @ts-ignore _contentNode missing in type definition\n const contentNode = instance._contentNode;\n return contentNode ? /*#__PURE__*/ createPortal(props.children, contentNode) : null;\n }\n return /*#__PURE__*/ forwardRef(OverlayComponent);\n}\nexport function createLeafComponent(useElement) {\n function LeafComponent(props, forwardedRef) {\n const { instance } = useElement(props).current;\n useImperativeHandle(forwardedRef, ()=>instance);\n return null;\n }\n return /*#__PURE__*/ forwardRef(LeafComponent);\n}\n","import { useEffect, useRef } from 'react';\nexport function useEventHandlers(element, eventHandlers) {\n const eventHandlersRef = useRef();\n useEffect(function addEventHandlers() {\n if (eventHandlers != null) {\n element.instance.on(eventHandlers);\n }\n eventHandlersRef.current = eventHandlers;\n return function removeEventHandlers() {\n if (eventHandlersRef.current != null) {\n element.instance.off(eventHandlersRef.current);\n }\n eventHandlersRef.current = null;\n };\n }, [\n element,\n eventHandlers\n ]);\n}\n","export function withPane(props, context) {\n const pane = props.pane ?? context.pane;\n return pane ? {\n ...props,\n pane\n } : props;\n}\n","import { useAttribution } from './attribution.js';\nimport { useLeafletContext } from './context.js';\nimport { useEventHandlers } from './events.js';\nimport { withPane } from './pane.js';\nexport function Line truncated
@@ -1,2 +1,2 @@
import{r as s,j as l,Q as f,l as u}from"./index-pnVde5Cl.js";var N=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],h=N.reduce((a,r)=>{const t=f(`Primitive.${r}`),o=s.forwardRef((i,e)=>{const{asChild:p,...n}=i,m=p?t:r;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),l.jsx(m,{...n,ref:e})});return o.displayName=`Primitive.${r}`,{...a,[r]:o}},{}),x="Separator",c="horizontal",w=["horizontal","vertical"],d=s.forwardRef((a,r)=>{const{decorative:t,orientation:o=c,...i}=a,e=S(o)?o:c,n=t?{role:"none"}:{"aria-orientation":e==="vertical"?e:void 0,role:"separator"};return l.jsx(h.div,{"data-orientation":e,...n,...i,ref:r})});d.displayName=x;function S(a){return w.includes(a)}var v=d;const O=s.forwardRef(({className:a,orientation:r="horizontal",decorative:t=!0,...o},i)=>l.jsx(v,{ref:i,decorative:t,orientation:r,className:u("shrink-0 bg-border",r==="horizontal"?"h-[1px] w-full":"h-full w-[1px]",a),...o}));O.displayName=v.displayName;export{O as S};
//# sourceMappingURL=separator-CcV99KWD.js.map
import{r as s,j as l,Q as f,l as u}from"./index-Fnq3QmNw.js";var N=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],h=N.reduce((a,r)=>{const t=f(`Primitive.${r}`),o=s.forwardRef((i,e)=>{const{asChild:p,...n}=i,m=p?t:r;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),l.jsx(m,{...n,ref:e})});return o.displayName=`Primitive.${r}`,{...a,[r]:o}},{}),x="Separator",c="horizontal",w=["horizontal","vertical"],d=s.forwardRef((a,r)=>{const{decorative:t,orientation:o=c,...i}=a,e=S(o)?o:c,n=t?{role:"none"}:{"aria-orientation":e==="vertical"?e:void 0,role:"separator"};return l.jsx(h.div,{"data-orientation":e,...n,...i,ref:r})});d.displayName=x;function S(a){return w.includes(a)}var v=d;const O=s.forwardRef(({className:a,orientation:r="horizontal",decorative:t=!0,...o},i)=>l.jsx(v,{ref:i,decorative:t,orientation:r,className:u("shrink-0 bg-border",r==="horizontal"?"h-[1px] w-full":"h-full w-[1px]",a),...o}));O.displayName=v.displayName;export{O as S};
//# sourceMappingURL=separator-BwjFWJb_.js.map
@@ -1 +1 @@
{"version":3,"file":"separator-CcV99KWD.js","sources":["../../node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/dist/index.mjs","../../node_modules/@radix-ui/react-separator/dist/index.mjs","../../src/components/ui/separator.tsx"],"sourcesContent":["// src/primitive.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NODES = [\n \"a\",\n \"button\",\n \"div\",\n \"form\",\n \"h2\",\n \"h3\",\n \"img\",\n \"input\",\n \"label\",\n \"li\",\n \"nav\",\n \"ol\",\n \"p\",\n \"select\",\n \"span\",\n \"svg\",\n \"ul\"\n];\nvar Primitive = NODES.reduce((primitive, node) => {\n const Slot = createSlot(`Primitive.${node}`);\n const Node = React.forwardRef((props, forwardedRef) => {\n const { asChild, ...primitiveProps } = props;\n const Comp = asChild ? Slot : node;\n if (typeof window !== \"undefined\") {\n window[Symbol.for(\"radix-ui\")] = true;\n }\n return /* @__PURE__ */ jsx(Comp, { ...primitiveProps, ref: forwardedRef });\n });\n Node.displayName = `Primitive.${node}`;\n return { ...primitive, [node]: Node };\n}, {});\nfunction dispatchDiscreteCustomEvent(target, event) {\n if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\nvar Root = Primitive;\nexport {\n Primitive,\n Root,\n dispatchDiscreteCustomEvent\n};\n//# sourceMappingURL=index.mjs.map\n","// src/separator.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"Separator\";\nvar DEFAULT_ORIENTATION = \"horizontal\";\nvar ORIENTATIONS = [\"horizontal\", \"vertical\"];\nvar Separator = React.forwardRef((props, forwardedRef) => {\n const { decorative, orientation: orientationProp = DEFAULT_ORIENTATION, ...domProps } = props;\n const orientation = isValidOrientation(orientationProp) ? orientationProp : DEFAULT_ORIENTATION;\n const ariaOrientation = orientation === \"vertical\" ? orientation : void 0;\n const semanticProps = decorative ? { role: \"none\" } : { \"aria-orientation\": ariaOrientation, role: \"separator\" };\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-orientation\": orientation,\n ...semanticProps,\n ...domProps,\n ref: forwardedRef\n }\n );\n});\nSeparator.displayName = NAME;\nfunction isValidOrientation(orientation) {\n return ORIENTATIONS.includes(orientation);\n}\nvar Root = Separator;\nexport {\n Root,\n Separator\n};\n//# sourceMappingURL=index.mjs.map\n","'use client';\n\nimport * as React from 'react';\nimport * as SeparatorPrimitive from '@radix-ui/react-separator';\n\nimport { cn } from '@/lib/utils';\n\nconst Separator = React.forwardRef<\n React.ElementRef<typeof SeparatorPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(({ className, orientation = 'horizontal', decorative = true, ...props }, ref) => (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n 'shrink-0 bg-border',\n orientation === 'horizontal' ? 'h-[1px] w-full' : 'h-full w-[1px]',\n className\n )}\n {...props}\n />\n));\nSeparator.displayName = SeparatorPrimitive.Root.displayName;\n\nexport { Separator };\n"],"names":["NODES","Primitive","primitive","node","Slot","createSlot","Node","React.forwardRef","props","forwardedRef","asChild","primitiveProps","Comp","jsx","NAME","DEFAULT_ORIENTATION","ORIENTATIONS","Separator","decorative","orientationProp","domProps","orientation","isValidOrientation","semanticProps","Root","className","ref","SeparatorPrimitive.Root","cn"],"mappings":"6DAKA,IAAIA,EAAQ,CACV,IACA,SACA,MACA,OACA,KACA,KACA,MACA,QACA,QACA,KACA,MACA,KACA,IACA,SACA,OACA,MACA,IACF,EACIC,EAAYD,EAAM,OAAO,CAACE,EAAWC,IAAS,CAChD,MAAMC,EAAOC,EAAW,aAAaF,CAAI,EAAE,EACrCG,EAAOC,EAAAA,WAAiB,CAACC,EAAOC,IAAiB,CACrD,KAAM,CAAE,QAAAC,EAAS,GAAGC,CAAc,EAAKH,EACjCI,EAAOF,EAAUN,EAAOD,EAC9B,OAAI,OAAO,OAAW,MACpB,OAAO,OAAO,IAAI,UAAU,CAAC,EAAI,IAEZU,EAAAA,IAAID,EAAM,CAAE,GAAGD,EAAgB,IAAKF,EAAc,CAC3E,CAAC,EACD,OAAAH,EAAK,YAAc,aAAaH,CAAI,GAC7B,CAAE,GAAGD,EAAW,CAACC,CAAI,EAAGG,CAAI,CACrC,EAAG,EAAE,EChCDQ,EAAO,YACPC,EAAsB,aACtBC,EAAe,CAAC,aAAc,UAAU,EACxCC,EAAYV,EAAAA,WAAiB,CAACC,EAAOC,IAAiB,CACxD,KAAM,CAAE,WAAAS,EAAY,YAAaC,EAAkBJ,EAAqB,GAAGK,CAAQ,EAAKZ,EAClFa,EAAcC,EAAmBH,CAAe,EAAIA,EAAkBJ,EAEtEQ,EAAgBL,EAAa,CAAE,KAAM,QAAW,CAAE,mBADhCG,IAAgB,WAAaA,EAAc,OAC0B,KAAM,WAAW,EAC9G,OAAuBR,EAAAA,IACrBZ,EAAU,IACV,CACE,mBAAoBoB,EACpB,GAAGE,EACH,GAAGH,EACH,IAAKX,CACX,CACA,CACA,CAAC,EACDQ,EAAU,YAAcH,EACxB,SAASQ,EAAmBD,EAAa,CACvC,OAAOL,EAAa,SAASK,CAAW,CAC1C,CACA,IAAIG,EAAOP,ECnBX,MAAMA,EAAYV,EAAAA,WAGhB,CAAC,CAAE,UAAAkB,EAAW,YAAAJ,EAAc,aAAc,WAAAH,EAAa,GAAM,GAAGV,CAAA,EAASkB,IACzEb,EAAAA,IAACc,EAAA,CACC,IAAAD,EACA,WAAAR,EACA,YAAAG,EACA,UAAWO,EACT,qBACAP,IAAgB,aAAe,iBAAmB,iBAClDI,CAAA,EAED,GAAGjB,CAAA,CACLine truncated
{"version":3,"file":"separator-BwjFWJb_.js","sources":["../../node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/dist/index.mjs","../../node_modules/@radix-ui/react-separator/dist/index.mjs","../../src/components/ui/separator.tsx"],"sourcesContent":["// src/primitive.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NODES = [\n \"a\",\n \"button\",\n \"div\",\n \"form\",\n \"h2\",\n \"h3\",\n \"img\",\n \"input\",\n \"label\",\n \"li\",\n \"nav\",\n \"ol\",\n \"p\",\n \"select\",\n \"span\",\n \"svg\",\n \"ul\"\n];\nvar Primitive = NODES.reduce((primitive, node) => {\n const Slot = createSlot(`Primitive.${node}`);\n const Node = React.forwardRef((props, forwardedRef) => {\n const { asChild, ...primitiveProps } = props;\n const Comp = asChild ? Slot : node;\n if (typeof window !== \"undefined\") {\n window[Symbol.for(\"radix-ui\")] = true;\n }\n return /* @__PURE__ */ jsx(Comp, { ...primitiveProps, ref: forwardedRef });\n });\n Node.displayName = `Primitive.${node}`;\n return { ...primitive, [node]: Node };\n}, {});\nfunction dispatchDiscreteCustomEvent(target, event) {\n if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\nvar Root = Primitive;\nexport {\n Primitive,\n Root,\n dispatchDiscreteCustomEvent\n};\n//# sourceMappingURL=index.mjs.map\n","// src/separator.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"Separator\";\nvar DEFAULT_ORIENTATION = \"horizontal\";\nvar ORIENTATIONS = [\"horizontal\", \"vertical\"];\nvar Separator = React.forwardRef((props, forwardedRef) => {\n const { decorative, orientation: orientationProp = DEFAULT_ORIENTATION, ...domProps } = props;\n const orientation = isValidOrientation(orientationProp) ? orientationProp : DEFAULT_ORIENTATION;\n const ariaOrientation = orientation === \"vertical\" ? orientation : void 0;\n const semanticProps = decorative ? { role: \"none\" } : { \"aria-orientation\": ariaOrientation, role: \"separator\" };\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-orientation\": orientation,\n ...semanticProps,\n ...domProps,\n ref: forwardedRef\n }\n );\n});\nSeparator.displayName = NAME;\nfunction isValidOrientation(orientation) {\n return ORIENTATIONS.includes(orientation);\n}\nvar Root = Separator;\nexport {\n Root,\n Separator\n};\n//# sourceMappingURL=index.mjs.map\n","'use client';\n\nimport * as React from 'react';\nimport * as SeparatorPrimitive from '@radix-ui/react-separator';\n\nimport { cn } from '@/lib/utils';\n\nconst Separator = React.forwardRef<\n React.ElementRef<typeof SeparatorPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(({ className, orientation = 'horizontal', decorative = true, ...props }, ref) => (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n 'shrink-0 bg-border',\n orientation === 'horizontal' ? 'h-[1px] w-full' : 'h-full w-[1px]',\n className\n )}\n {...props}\n />\n));\nSeparator.displayName = SeparatorPrimitive.Root.displayName;\n\nexport { Separator };\n"],"names":["NODES","Primitive","primitive","node","Slot","createSlot","Node","React.forwardRef","props","forwardedRef","asChild","primitiveProps","Comp","jsx","NAME","DEFAULT_ORIENTATION","ORIENTATIONS","Separator","decorative","orientationProp","domProps","orientation","isValidOrientation","semanticProps","Root","className","ref","SeparatorPrimitive.Root","cn"],"mappings":"6DAKA,IAAIA,EAAQ,CACV,IACA,SACA,MACA,OACA,KACA,KACA,MACA,QACA,QACA,KACA,MACA,KACA,IACA,SACA,OACA,MACA,IACF,EACIC,EAAYD,EAAM,OAAO,CAACE,EAAWC,IAAS,CAChD,MAAMC,EAAOC,EAAW,aAAaF,CAAI,EAAE,EACrCG,EAAOC,EAAAA,WAAiB,CAACC,EAAOC,IAAiB,CACrD,KAAM,CAAE,QAAAC,EAAS,GAAGC,CAAc,EAAKH,EACjCI,EAAOF,EAAUN,EAAOD,EAC9B,OAAI,OAAO,OAAW,MACpB,OAAO,OAAO,IAAI,UAAU,CAAC,EAAI,IAEZU,EAAAA,IAAID,EAAM,CAAE,GAAGD,EAAgB,IAAKF,EAAc,CAC3E,CAAC,EACD,OAAAH,EAAK,YAAc,aAAaH,CAAI,GAC7B,CAAE,GAAGD,EAAW,CAACC,CAAI,EAAGG,CAAI,CACrC,EAAG,EAAE,EChCDQ,EAAO,YACPC,EAAsB,aACtBC,EAAe,CAAC,aAAc,UAAU,EACxCC,EAAYV,EAAAA,WAAiB,CAACC,EAAOC,IAAiB,CACxD,KAAM,CAAE,WAAAS,EAAY,YAAaC,EAAkBJ,EAAqB,GAAGK,CAAQ,EAAKZ,EAClFa,EAAcC,EAAmBH,CAAe,EAAIA,EAAkBJ,EAEtEQ,EAAgBL,EAAa,CAAE,KAAM,QAAW,CAAE,mBADhCG,IAAgB,WAAaA,EAAc,OAC0B,KAAM,WAAW,EAC9G,OAAuBR,EAAAA,IACrBZ,EAAU,IACV,CACE,mBAAoBoB,EACpB,GAAGE,EACH,GAAGH,EACH,IAAKX,CACX,CACA,CACA,CAAC,EACDQ,EAAU,YAAcH,EACxB,SAASQ,EAAmBD,EAAa,CACvC,OAAOL,EAAa,SAASK,CAAW,CAC1C,CACA,IAAIG,EAAOP,ECnBX,MAAMA,EAAYV,EAAAA,WAGhB,CAAC,CAAE,UAAAkB,EAAW,YAAAJ,EAAc,aAAc,WAAAH,EAAa,GAAM,GAAGV,CAAA,EAASkB,IACzEb,EAAAA,IAACc,EAAA,CACC,IAAAD,EACA,WAAAR,EACA,YAAAG,EACA,UAAWO,EACT,qBACAP,IAAgB,aAAe,iBAAmB,iBAClDI,CAAA,EAED,GAAGjB,CAAA,CACLine truncated
+1 -1
View File
@@ -50,7 +50,7 @@
undecryptedCount: fetchJsonOrThrow('/api/packets/undecrypted/count'),
};
</script>
<script type="module" crossorigin src="/assets/index-pnVde5Cl.js"></script>
<script type="module" crossorigin src="/assets/index-Fnq3QmNw.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-Kkb-Bio9.css">
</head>
<body>
+6 -2
View File
@@ -24,6 +24,7 @@ const CHANNEL_WARNING_THRESHOLD = 120; // Conservative for multi-hop
const CHANNEL_DANGER_BUFFER = 8; // Red zone starts this many bytes before hard limit
const textEncoder = new TextEncoder();
const RADIO_NO_RESPONSE_SNIPPET = 'no response was heard back';
/** Get UTF-8 byte length of a string (LoRa packets are byte-constrained, not character-constrained). */
function byteLen(s: string): number {
return textEncoder.encode(s).length;
@@ -118,8 +119,11 @@ export const MessageInput = forwardRef<MessageInputHandle, MessageInputProps>(fu
setText('');
} catch (err) {
console.error('Failed to send message:', err);
toast.error('Failed to send message', {
description: err instanceof Error ? err.message : 'Check radio connection',
const description = err instanceof Error ? err.message : 'Check radio connection';
const isRadioNoResponse =
err instanceof Error && err.message.toLowerCase().includes(RADIO_NO_RESPONSE_SNIPPET);
toast.error(isRadioNoResponse ? 'Radio did not confirm send' : 'Failed to send message', {
description,
});
return;
} finally {
+26
View File
@@ -9,12 +9,18 @@ import { render, screen, fireEvent } from '@testing-library/react';
import { describe, it, expect, vi, beforeEach } from 'vitest';
import { MessageInput } from '../components/MessageInput';
import { toast } from '../components/ui/sonner';
// Mock sonner (toast)
vi.mock('../components/ui/sonner', () => ({
toast: { success: vi.fn(), error: vi.fn() },
}));
const mockToast = toast as unknown as {
success: ReturnType<typeof vi.fn>;
error: ReturnType<typeof vi.fn>;
};
const textEncoder = new TextEncoder();
function byteLen(s: string): number {
@@ -182,4 +188,24 @@ describe('MessageInput', () => {
expect(getSendButton()).toBeEnabled();
});
});
describe('send failure toasts', () => {
it('shows the radio no-response toast when the send outcome is unknown', async () => {
onSend.mockRejectedValueOnce(
new Error(
'Send command was issued to the radio, but no response was heard back. The message may or may not have sent successfully.'
)
);
renderInput({ conversationType: 'contact' });
fireEvent.change(getInput(), { target: { value: 'Hello' } });
fireEvent.click(getSendButton());
expect(await screen.findByDisplayValue('Hello')).toBeTruthy();
expect(mockToast.error).toHaveBeenCalledWith('Radio did not confirm send', {
description:
'Send command was issued to the radio, but no response was heard back. The message may or may not have sent successfully.',
});
});
});
});
+27
View File
@@ -25,6 +25,7 @@ from app.routers.messages import (
send_direct_message,
)
from app.services import dm_ack_tracker
from app.services.message_send import NO_RADIO_RESPONSE_AFTER_SEND_DETAIL
@pytest.fixture(autouse=True)
@@ -1024,6 +1025,32 @@ class TestRadioExceptionMidSend:
)
assert len(messages) == 0
@pytest.mark.asyncio
async def test_dm_send_no_radio_response_returns_504_without_storing_message(self, test_db):
"""When mc.commands.send_msg() returns None, report unknown outcome and store nothing."""
mc = _make_mc()
pub_key = "ac" * 32
await _insert_contact(pub_key, "Alice")
mc.commands.send_msg = AsyncMock(return_value=None)
with (
patch("app.routers.messages.require_connected", return_value=mc),
patch.object(radio_manager, "_meshcore", mc),
pytest.raises(HTTPException) as exc_info,
):
await send_direct_message(
SendDirectMessageRequest(destination=pub_key, text="Did this send?")
)
assert exc_info.value.status_code == 504
assert exc_info.value.detail == NO_RADIO_RESPONSE_AFTER_SEND_DETAIL
messages = await MessageRepository.get_all(
msg_type="PRIV", conversation_key=pub_key, limit=10
)
assert len(messages) == 0
@pytest.mark.asyncio
async def test_channel_send_radio_exception_no_orphan_message(self, test_db):
"""When mc.commands.send_chan_msg() raises, no message should be stored in DB."""