Release v0.9.326

Automated sync from private repository.
Built with obfuscation enabled.
This commit is contained in:
GitHub Actions Bot
2026-04-23 20:48:04 +00:00
parent 72df16b036
commit fc7d61bb02
108 changed files with 288 additions and 303 deletions
+94 -50
View File
@@ -1,66 +1,110 @@
# Installing pyMC Console UI
# Installing pyMC Console
This guide covers standalone UI installation. For full pyMC Console with manage.sh installer, see [README.md](README.md).
This guide covers **manual** installation of the Console dashboard (without `manage.sh`). For the standard installer workflow, see [README.md](README.md).
## Quick Install (Standalone UI)
## Prerequisite
Download and extract the latest release to your pyMC_Repeater's web directory:
An existing [pyMC_Repeater](https://github.com/rightup/pyMC_Repeater) installation. The Console dashboard is served by pyMC_Repeater's CherryPy server; installing it on its own does nothing useful.
Verify Repeater is installed:
```bash
# Download the latest release
cd /tmp
wget https://github.com/dmduran12/pymc_console/releases/latest/download/pymc-ui-latest.tar.gz
# Extract to pyMC_Repeater's web directory
sudo mkdir -p /opt/pymc_repeater/repeater/web/html
sudo tar -xzf pymc-ui-latest.tar.gz -C /opt/pymc_repeater/repeater/web/html/
# Set proper permissions
sudo chown -R repeater:repeater /opt/pymc_repeater/repeater/web/html
# Clean up
rm pymc-ui-latest.tar.gz
ls /opt/pymc_repeater/pyproject.toml
```
The dashboard will be served at `http://<your-pi-ip>:8000/`
---
## Quick Update
To update an existing installation to the latest version:
```bash
# Download latest version
cd /tmp
wget https://github.com/dmduran12/pymc_console/releases/latest/download/pymc-ui-latest.tar.gz
# Backup and update
sudo cp -r /opt/pymc_repeater/repeater/web/html /opt/pymc_repeater/repeater/web/html.backup
sudo rm -rf /opt/pymc_repeater/repeater/web/html/*
sudo tar -xzf pymc-ui-latest.tar.gz -C /opt/pymc_repeater/repeater/web/html/
sudo chown -R repeater:repeater /opt/pymc_repeater/repeater/web/html
# Clean up
rm pymc-ui-latest.tar.gz
```
## Specific Version
To install a specific version:
```bash
# Replace v0.2.0 with desired version
wget https://github.com/dmduran12/pymc_console/releases/download/v0.2.0/pymc-ui-v0.2.0.tar.gz
sudo tar -xzf pymc-ui-v0.2.0.tar.gz -C /opt/pymc_repeater/repeater/web/html/
```
## Using manage.sh (Recommended)
For most users, use the manage.sh installer which handles everything automatically:
```bash
git clone https://github.com/dmduran12/pymc_console.git
cd pymc_console
sudo ./manage.sh install
```
This downloads the latest Console release, extracts to `/opt/pymc_console/web/html`, and patches `web.web_path` in `/etc/pymc_repeater/config.yaml`. See [README.md](README.md) for all commands.
---
## Manual Install (no manage.sh)
If you don't want to clone this repo, install the release tarball directly:
```bash
# 1. Download the latest Console release
cd /tmp
wget https://github.com/dmduran12/pymc_console-dist/releases/latest/download/pymc-ui-latest.tar.gz
# 2. Extract to /opt/pymc_console/web/html (the Console install target)
sudo mkdir -p /opt/pymc_console/web/html
sudo tar -xzf pymc-ui-latest.tar.gz -C /opt/pymc_console/web/html/
# 3. Set ownership to the repeater service user
sudo chown -R repeater:repeater /opt/pymc_console
# 4. Point pyMC_Repeater at the dashboard (one-time)
# Open /etc/pymc_repeater/config.yaml and set:
# web:
# web_path: /opt/pymc_console/web/html
# Or, if you have `yq` installed:
sudo yq -i '.web.web_path = "/opt/pymc_console/web/html"' /etc/pymc_repeater/config.yaml
# 5. Restart the repeater service
sudo systemctl restart pymc-repeater
# 6. Clean up
rm /tmp/pymc-ui-latest.tar.gz
```
The dashboard is now served at `http://<your-pi-ip>:8000/`.
---
## Manual Update
To update an existing Console install without using `manage.sh`:
```bash
# Download latest version
cd /tmp
wget https://github.com/dmduran12/pymc_console-dist/releases/latest/download/pymc-ui-latest.tar.gz
# Backup existing dashboard
sudo cp -r /opt/pymc_console/web/html /opt/pymc_console/web/html.backup
# Replace contents (web_path is preserved since we keep the same directory)
sudo rm -rf /opt/pymc_console/web/html/*
sudo tar -xzf pymc-ui-latest.tar.gz -C /opt/pymc_console/web/html/
sudo chown -R repeater:repeater /opt/pymc_console
# Clean up
rm /tmp/pymc-ui-latest.tar.gz
```
No service restart is required for asset-only updates — clients will pick up the new bundle on next page load. Hard-refresh (`Cmd+Shift+R` / `Ctrl+Shift+R`) if stale.
---
## Specific Version
To install a specific version:
```bash
# Replace v0.10.0 with the desired version tag
wget https://github.com/dmduran12/pymc_console-dist/releases/download/v0.10.0/pymc-ui-v0.10.0.tar.gz
sudo rm -rf /opt/pymc_console/web/html/*
sudo tar -xzf pymc-ui-v0.10.0.tar.gz -C /opt/pymc_console/web/html/
sudo chown -R repeater:repeater /opt/pymc_console
```
---
## Uninstall
```bash
sudo rm -rf /opt/pymc_console
# Optional: unset web.web_path in /etc/pymc_repeater/config.yaml to fall back to upstream's Vue.js dashboard.
sudo systemctl restart pymc-repeater
```
pyMC_Repeater itself is not affected.
+56 -49
View File
@@ -17,7 +17,19 @@ pyMC Console gives you full visibility into your mesh network — packet flow, t
- LoRa radio module (SX1262 or SX1276)
- Raspberry Pi OS (Bookworm recommended)
### Install
### Prerequisite: pyMC_Repeater
The Console dashboard plugs into an existing [pyMC_Repeater](https://github.com/rightup/pyMC_Repeater) install. If you don't already have it running, install it first using upstream's manage.sh:
```bash
git clone https://github.com/rightup/pyMC_Repeater.git
cd pyMC_Repeater
sudo ./manage.sh install
```
Upstream handles system dependencies, pip install, radio/GPIO configuration, and the systemd service.
### Install the Console
```bash
git clone https://github.com/dmduran12/pymc_console-dist.git pymc_console
@@ -25,34 +37,34 @@ cd pymc_console
sudo bash manage.sh install
```
During installation you'll be prompted to select a pyMC_Repeater branch — **choose `dev`** (the default). The `dev` branch has the latest features and is the recommended target.
This downloads the latest Console release, extracts it to `/opt/pymc_console/web/html/`, and points pyMC_Repeater's `web.web_path` at it. Open `http://<your-pi-ip>:8000` in a browser.
The installer handles everything:
1. System dependencies (Python, pip, SPI tools)
2. Clones and installs [pyMC_Repeater](https://github.com/rightup/pyMC_Repeater) + [pyMC_core](https://github.com/rightup/pyMC_core)
3. Deploys the Console web dashboard
4. Configures and starts the systemd service
Once complete, open `http://<your-pi-ip>:8000` in a browser.
### Upgrade
### Upgrade the Console
```bash
cd pymc_console
sudo bash manage.sh upgrade
```
Choose **Console only** (updates just the dashboard) or **Full Stack** (updates Console + pyMC_Repeater + pyMC_core). Console-only upgrades are safe and fast — your repeater config is untouched.
Refreshes the dashboard assets in place. Your `web_path` setting is preserved. Repeater, core, and config are untouched. For upgrading pyMC_Repeater itself, use upstream's manage.sh.
### Uninstall
### Uninstall the Console
```bash
cd pymc_console
sudo bash manage.sh
sudo bash manage.sh uninstall
```
Select **Uninstall** from the menu. Removes all installed files, config, logs, and the systemd service.
Removes `/opt/pymc_console` and this repo. pyMC_Repeater is **not** touched — use upstream's manage.sh to remove it.
### Non-interactive Mode
All prompts can be auto-confirmed for automation:
```bash
sudo bash manage.sh --yes install
ASSUME_YES=1 sudo -E bash manage.sh upgrade
```
---
@@ -65,7 +77,7 @@ Select **Uninstall** from the menu. Removes all installed files, config, logs, a
│ │
│ • React SPA served on port 8000 │
│ • Real-time packets, topology, stats, radio config │
│ • manage.sh installer handles everything
│ • manage.sh installs/upgrades the Console dashboard only
└─────────────────────┬───────────────────────────────────────┘
│ uses API from
┌─────────────────────▼───────────────────────────────────────┐
@@ -89,7 +101,7 @@ Select **Uninstall** from the menu. Removes all installed files, config, logs, a
**Key points:**
- Console does **not** replace Repeater — they work together
- `manage.sh` installs both Repeater and Console side-by-side
- Repeater is installed separately using upstream's manage.sh; our `manage.sh` layers the Console on top
- You can upgrade Console independently without touching Repeater
---
@@ -175,31 +187,21 @@ Two polished color schemes and a built-in CLI for direct repeater interaction.
## Management
### manage.sh Menu
### manage.sh Commands
`manage.sh` is Console-only. Service control, status, logs, and radio/GPIO configuration are all handled by upstream pyMC_Repeater.
```bash
sudo bash manage.sh
sudo bash manage.sh --help
```
```
┌────────────────────────────────────────────────┐
│ pyMC Console │
│ Status: Running │
├────────────────────────────────────────────────┤
│ install Fresh installation │
│ upgrade Upgrade existing │
│ uninstall Remove everything │
│ status Show versions │
│ logs View live logs │
│ exit Exit │
└────────────────────────────────────────────────┘
```
| Verb | Action |
|------|--------|
| `install` | Install the Console dashboard into `/opt/pymc_console` and point `web_path` at it. Requires pyMC_Repeater to be installed. |
| `upgrade` | Refresh the dashboard assets in place. Preserves your `web_path` and self-updates this repo from `origin/main`. |
| `uninstall` | Remove `/opt/pymc_console` and this repo. Does NOT touch pyMC_Repeater. |
- **Install** — Full Stack or Console-only
- **Upgrade** — Console-only (fast, safe) or Full Stack (Console + Repeater + Core)
- **Uninstall** — Removes everything (installation, config, logs, service)
- **Status** — Installed versions of Core, Repeater, Console
- **Logs** — Live journal output from the repeater
Flags: `--yes` / `-y` (or `ASSUME_YES=1`) auto-confirms prompts; `NO_COLOR=1` disables ANSI output.
### Radio & GPIO Configuration
@@ -238,12 +240,16 @@ radio:
### Service Management
Service lifecycle belongs to pyMC_Repeater's systemd unit. Use `systemctl` / `journalctl` directly:
```bash
sudo systemctl status pymc-repeater # Check status
sudo systemctl restart pymc-repeater # Restart
sudo journalctl -u pymc-repeater -f # Live logs
```
`manage.sh` does not wrap these commands — they are upstream's responsibility.
---
## Directory Layout
@@ -251,13 +257,13 @@ sudo journalctl -u pymc-repeater -f # Live logs
After installation:
```
~/pymc_console/ ← This repo (cloned by you)
~/pyMC_Repeater/ ← Repeater daemon (cloned by manage.sh)
~/pymc_console/ ← This repo (cloned by you)
~/pyMC_Repeater/ Upstream repeater source (cloned by you)
/opt/pymc_repeater/ ← Installed repeater
/opt/pymc_console/web/html/ ← Installed dashboard
/etc/pymc_repeater/config.yaml ← Radio + repeater configuration
/var/log/pymc_repeater/ ← Log files
/opt/pymc_repeater/ ← Installed repeater (owned by upstream manage.sh)
/opt/pymc_console/web/html/ ← Installed dashboard (owned by our manage.sh)
/etc/pymc_repeater/config.yaml ← Radio + repeater config (we patch web.web_path only)
/var/log/pymc_repeater/ ← Log files (upstream)
```
---
@@ -302,14 +308,15 @@ LoRa module connects via **SPI** with GPIO pins for reset, busy, and DIO1. Pin m
### Login fails / "Error 200"
Usually caused by a version mismatch between Console and Repeater.
Usually caused by a version mismatch between Console and Repeater. Update both:
```bash
cd pymc_console
sudo bash manage.sh upgrade
```
# Update pyMC_Repeater (upstream)
cd ~/pyMC_Repeater && sudo ./manage.sh upgrade
Select **Full pyMC Stack** to update everything to compatible versions.
# Update the Console dashboard
cd ~/pymc_console && sudo bash manage.sh upgrade
```
### No packets being received
+1 -1
View File
@@ -1 +1 @@
0.9.325
0.9.326
@@ -1,4 +1,4 @@
import{e as U,c$ as J,ao as q,aa as G,cF as Q,ct as V,r as d,j as n,bN as K,B as Y}from"./index-CmCiA9Mb.js";import{c as Z}from"./node-types-CZU1TYyP.js";import{C as W}from"./circle-question-mark-CwqXs51O.js";import{F as ee}from"./funnel-CYg19pUX.js";import{S as te}from"./search-D71Nuk6u.js";/**
import{e as U,c$ as J,ao as q,aa as G,cF as Q,ct as V,r as d,j as n,bN as K,B as Y}from"./index-3pqtXusJ.js";import{c as Z}from"./node-types-BCSSICgK.js";import{C as W}from"./circle-question-mark-CRBJiEZi.js";import{F as ee}from"./funnel-5qtSMyK6.js";import{S as te}from"./search-DyiSv6bM.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
import{r as o}from"./index-CmCiA9Mb.js";import{u as w}from"./maplibre-gl-BzYo35Xe.js";const C={light:"https://basemaps.cartocdn.com/gl/positron-gl-style/style.json",dark:"https://basemaps.cartocdn.com/gl/dark-matter-gl-style/style.json"},x={light:"basemap-light-",dark:"basemap-dark-"},k={};async function E(i){if(k[i])return k[i];const t=await(await fetch(C[i])).json();return k[i]=t,t}function R({mode:i}){const{current:l}=w(),[t,b]=o.useState(null),u=o.useRef({light:!1,dark:!1}),m=o.useRef({light:[],dark:[]});o.useEffect(()=>{const e=()=>{var a;const s=(a=l==null?void 0:l.getMap)==null?void 0:a.call(l);s&&!t&&b(s)};e();const r=setInterval(e,50),c=setTimeout(()=>clearInterval(r),5e3);return()=>{clearInterval(r),clearTimeout(c)}},[l,t]);const g=o.useCallback(async(e,r,c)=>{var L,I;if(u.current[r])return;const s=x[r],a=await E(r),d=[];for(const[y,f]of Object.entries(a.sources||{})){const n=s+y;e.getSource(n)||e.addSource(n,f)}const v=(I=(((L=e.getStyle())==null?void 0:L.layers)||[]).find(y=>!y.id.startsWith("basemap-light-")&&!y.id.startsWith("basemap-dark-")))==null?void 0:I.id;for(const y of a.layers||[]){const f=s+y.id;if(d.push(f),e.getLayer(f))continue;const n={...y,id:f};"source"in n&&typeof n.source=="string"&&(n.source=s+n.source),n.layout||(n.layout={}),n.layout.visibility=c?"visible":"none";try{e.addLayer(n,v)}catch(S){console.warn(`[BasemapLayer] Failed to add layer ${f}:`,S)}}m.current[r]=d,u.current[r]=!0},[]),h=o.useCallback((e,r,c)=>{const s=m.current[r],a=c?"visible":"none";for(const d of s)if(e.getLayer(d))try{e.setLayoutProperty(d,"visibility",a)}catch{}},[]),p=o.useCallback(e=>{var s;const c=(((s=e.getStyle())==null?void 0:s.layers)||[]).filter(a=>!a.id.startsWith("basemap-light-")&&!a.id.startsWith("basemap-dark-"));for(const a of c)try{e.moveLayer(a.id)}catch{}},[]);return o.useEffect(()=>{if(!t)return;const e=r=>{t.hasImage(r.id)||t.addImage(r.id,{width:1,height:1,data:new Uint8Array([0,0,0,0])})};return t.on("styleimagemissing",e),()=>{t.off("styleimagemissing",e)}},[t]),o.useEffect(()=>{if(!t)return;let e=!1;const r=async()=>{if(!e)try{await Promise.all([g(t,"light",i==="light"),g(t,"dark",i==="dark")]),e||p(t)}catch(s){console.error("[BasemapLayer] Setup error:",s)}};t.isStyleLoaded()?r():(t.once("style.load",r),t.once("load",()=>{!e&&!u.current.light&&r()}));const c=()=>{e||setTimeout(()=>{!e&&u.current.light&&u.current.dark&&p(t)},100)};return t.on("styledata",c),()=>{e=!0,t.off("styledata",c)}},[t,g,p,i]),o.useEffect(()=>{t&&(!u.current.light||!u.current.dark||(h(t,"light",i==="light"),h(t,"dark",i==="dark")))},[t,i,h]),null}export{R as B};
import{r as o}from"./index-3pqtXusJ.js";import{u as w}from"./maplibre-gl-B4T1ie9I.js";const C={light:"https://basemaps.cartocdn.com/gl/positron-gl-style/style.json",dark:"https://basemaps.cartocdn.com/gl/dark-matter-gl-style/style.json"},x={light:"basemap-light-",dark:"basemap-dark-"},k={};async function E(i){if(k[i])return k[i];const t=await(await fetch(C[i])).json();return k[i]=t,t}function R({mode:i}){const{current:l}=w(),[t,b]=o.useState(null),u=o.useRef({light:!1,dark:!1}),m=o.useRef({light:[],dark:[]});o.useEffect(()=>{const e=()=>{var a;const s=(a=l==null?void 0:l.getMap)==null?void 0:a.call(l);s&&!t&&b(s)};e();const r=setInterval(e,50),c=setTimeout(()=>clearInterval(r),5e3);return()=>{clearInterval(r),clearTimeout(c)}},[l,t]);const g=o.useCallback(async(e,r,c)=>{var L,I;if(u.current[r])return;const s=x[r],a=await E(r),d=[];for(const[y,f]of Object.entries(a.sources||{})){const n=s+y;e.getSource(n)||e.addSource(n,f)}const v=(I=(((L=e.getStyle())==null?void 0:L.layers)||[]).find(y=>!y.id.startsWith("basemap-light-")&&!y.id.startsWith("basemap-dark-")))==null?void 0:I.id;for(const y of a.layers||[]){const f=s+y.id;if(d.push(f),e.getLayer(f))continue;const n={...y,id:f};"source"in n&&typeof n.source=="string"&&(n.source=s+n.source),n.layout||(n.layout={}),n.layout.visibility=c?"visible":"none";try{e.addLayer(n,v)}catch(S){console.warn(`[BasemapLayer] Failed to add layer ${f}:`,S)}}m.current[r]=d,u.current[r]=!0},[]),h=o.useCallback((e,r,c)=>{const s=m.current[r],a=c?"visible":"none";for(const d of s)if(e.getLayer(d))try{e.setLayoutProperty(d,"visibility",a)}catch{}},[]),p=o.useCallback(e=>{var s;const c=(((s=e.getStyle())==null?void 0:s.layers)||[]).filter(a=>!a.id.startsWith("basemap-light-")&&!a.id.startsWith("basemap-dark-"));for(const a of c)try{e.moveLayer(a.id)}catch{}},[]);return o.useEffect(()=>{if(!t)return;const e=r=>{t.hasImage(r.id)||t.addImage(r.id,{width:1,height:1,data:new Uint8Array([0,0,0,0])})};return t.on("styleimagemissing",e),()=>{t.off("styleimagemissing",e)}},[t]),o.useEffect(()=>{if(!t)return;let e=!1;const r=async()=>{if(!e)try{await Promise.all([g(t,"light",i==="light"),g(t,"dark",i==="dark")]),e||p(t)}catch(s){console.error("[BasemapLayer] Setup error:",s)}};t.isStyleLoaded()?r():(t.once("style.load",r),t.once("load",()=>{!e&&!u.current.light&&r()}));const c=()=>{e||setTimeout(()=>{!e&&u.current.light&&u.current.dark&&p(t)},100)};return t.on("styledata",c),()=>{e=!0,t.off("styledata",c)}},[t,g,p,i]),o.useEffect(()=>{t&&(!u.current.light||!u.current.dark||(h(t,"light",i==="light"),h(t,"dark",i==="dark")))},[t,i,h]),null}export{R as B};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,5 +1,5 @@
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/latin-400-BcR6IdUc.css","assets/latin-500-DCnAHIrw.css","assets/latin-600-CnkPk-vb.css","assets/latin-700-UC1i-VSI.css"])))=>i.map(i=>d[i]);
import{e as we,r as a,j as e,c as m,ev as Is,cU as ie,a2 as G,a0 as Y,bN as Z,aF as Ie,ew as Oe,ex as os,ey as as,_ as Me,a8 as fe,E as jt,S as vt,ez as Nt,a7 as W,cv as cs,eA as wt,B as L,V as ns,eB as Ks,bZ as Pe,X as Xs,eC as kt,a6 as _t,aE as Os,c4 as St,c8 as ls,dV as Ws,eD as Ct,eE as zs,eF as Tt,eG as Ft,eH as Et,aa as Rt,eI as Ye,I as Mt,a1 as Dt,a3 as At}from"./index-CmCiA9Mb.js";import{g as Pt,a as Lt,c as It,r as Kt,s as Ot,b as zt,u as Vt,d as $t}from"./system-B3qqcV_t.js";import{C as Ht}from"./ConfirmModal-50kGkW1K.js";import{S as Ut,A as qt,a as Bt,N as Gt}from"./AutoConfigureDialog-C_ZfROYL.js";import{W as rs}from"./wand-sparkles-CJy7U6gw.js";import{P as is,F as Vs}from"./pencil-BFL23eOg.js";import{i as Xt,g as Wt,s as Jt,a as Yt,k as Qt}from"./keycap-sfx-ByZp-njj.js";import{C as J,P as Zt,a as ea,B as sa}from"./PageLayout-Cy1L4zCJ.js";import{T as Js}from"./trash-2-CvwShftV.js";import{R as ta}from"./rotate-ccw-Dob43IQC.js";import{S as aa}from"./shield-4Eb-GPCQ.js";import{R as na}from"./repeat-BuBUsw2_.js";import{G as la}from"./git-branch-mTMgi2yP.js";import{C as ra}from"./clock-BN5kz_rn.js";import{C as Ys}from"./chevron-right-C91OWbjn.js";import{R as se,C as ue}from"./Grid-FqRi0NO0.js";import{A as ia}from"./antenna-CJ9ROx3O.js";import{P as $s}from"./plus-QGeNQG7U.js";import{K as Hs}from"./key-round-D4LOeatm.js";import"./arrow-right-C_CM1g-b.js";/**
import{e as we,r as a,j as e,c as m,ev as Is,cU as ie,a2 as G,a0 as Y,bN as Z,aF as Ie,ew as Oe,ex as os,ey as as,_ as Me,a8 as fe,E as jt,S as vt,ez as Nt,a7 as W,cv as cs,eA as wt,B as L,V as ns,eB as Ks,bZ as Pe,X as Xs,eC as kt,a6 as _t,aE as Os,c4 as St,c8 as ls,dV as Ws,eD as Ct,eE as zs,eF as Tt,eG as Ft,eH as Et,aa as Rt,eI as Ye,I as Mt,a1 as Dt,a3 as At}from"./index-3pqtXusJ.js";import{g as Pt,a as Lt,c as It,r as Kt,s as Ot,b as zt,u as Vt,d as $t}from"./system-BSB568Ml.js";import{C as Ht}from"./ConfirmModal-CxugVPnE.js";import{S as Ut,A as qt,a as Bt,N as Gt}from"./AutoConfigureDialog-RmhWdSSl.js";import{W as rs}from"./wand-sparkles-BOSmvjZ4.js";import{P as is,F as Vs}from"./pencil-DGiycnOx.js";import{i as Xt,g as Wt,s as Jt,a as Yt,k as Qt}from"./keycap-sfx-ByZp-njj.js";import{C as J,P as Zt,a as ea,B as sa}from"./PageLayout-ClkXnw1C.js";import{T as Js}from"./trash-2-C_Azu9dt.js";import{R as ta}from"./rotate-ccw-CkwvqFgP.js";import{S as aa}from"./shield-tGFHFIM3.js";import{R as na}from"./repeat-CEo1l2FA.js";import{G as la}from"./git-branch-CHiljU3D.js";import{C as ra}from"./clock-DVdpngZT.js";import{C as Ys}from"./chevron-right-SYOv1A3t.js";import{R as se,C as ue}from"./Grid-BjR70VWU.js";import{A as ia}from"./antenna-D2khKMQR.js";import{P as $s}from"./plus-B_ej3qBi.js";import{K as Hs}from"./key-round-D1Th61uf.js";import"./arrow-right-DXZdkKQw.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
@@ -1 +1 @@
import{r as d,j as s,aC as x,aL as m,bZ as g,c as C,aD as f,eJ as j,B as o}from"./index-CmCiA9Mb.js";const u={danger:"text-sys-red",warning:"text-sys-indigo",default:"text-sys-blue"},p={danger:"danger",warning:"warning",default:"primary"};function N({isOpen:n,title:r="Confirm",message:l,confirmLabel:t="Confirm",cancelLabel:i="Cancel",variant:a="default",onConfirm:c,onCancel:e}){return s.jsxs(x,{open:n,onClose:e,size:"sm",children:[s.jsx(m,{icon:s.jsx(g,{className:C("w-5 h-5",u[a])}),title:r,onClose:e}),s.jsx(f,{children:s.jsx("p",{className:"text-sm text-fg-secondary",children:l})}),s.jsxs(j,{children:[s.jsx(o,{color:"muted",onClick:e,className:"flex-1",children:i}),s.jsx(o,{color:p[a],onClick:c,className:"flex-1",children:t})]})]})}const y=d.memo(N);export{y as C};
import{r as d,j as s,aC as x,aL as m,bZ as g,c as C,aD as f,eJ as j,B as o}from"./index-3pqtXusJ.js";const u={danger:"text-sys-red",warning:"text-sys-indigo",default:"text-sys-blue"},p={danger:"danger",warning:"warning",default:"primary"};function N({isOpen:n,title:r="Confirm",message:l,confirmLabel:t="Confirm",cancelLabel:i="Cancel",variant:a="default",onConfirm:c,onCancel:e}){return s.jsxs(x,{open:n,onClose:e,size:"sm",children:[s.jsx(m,{icon:s.jsx(g,{className:C("w-5 h-5",u[a])}),title:r,onClose:e}),s.jsx(f,{children:s.jsx("p",{className:"text-sm text-fg-secondary",children:l})}),s.jsxs(j,{children:[s.jsx(o,{color:"muted",onClick:e,className:"flex-1",children:i}),s.jsx(o,{color:p[a],onClick:c,className:"flex-1",children:t})]})]})}const y=d.memo(N);export{y as C};
File diff suppressed because one or more lines are too long
@@ -1,4 +1,4 @@
import{e as Sr,an as xa,r as R,gB as wa,cv as va,dq as ba,dr as ka,j as m,aC as Co,ds as Ca,aD as Eo,m as Jt,a0 as Wn,aE as So,c as Cn,a2 as Z0,O as lr,Z as vn,gC as q0,gD as Mo,gE as Ea,ck as Sa,cr as Ma,ct as Ba,dV as Bo,ap as Do,aF as _o,d as Cr,b as En,B as Nt,dH as Da,cm as ms,E as Gs,S as Us,dy as To,t as Ro,d0 as jo,aa as Io,bN as Sn,bJ as xi,gF as Lo,Q as _a,a6 as Ta,dG as Ra,gG as ja,az as No,bU as wi,bW as Ia,a1 as J0,a3 as X0,co as La,ba as Na,f1 as Fo,gH as Fa,gI as Pa,dI as Qa,dJ as Oa,gJ as za,gK as Ha,aS as Po,V as gt,gL as Ga,gM as Qo,gN as Ua,ao as Er,bQ as Oo,dx as Va,gO as zo,gP as Ho,cc as Wa,gz as Ya,cf as $a,dv as Go,dz as Ka,ab as Za,gQ as qa,fd as Ja,gR as ps,ga as Xa,fJ as Au,gS as eu}from"./index-CmCiA9Mb.js";import{u as Or,S as Qr,L as qt,M as tu,b as ru}from"./maplibre-gl-BzYo35Xe.js";import{u as Uo,r as Vo,e as vi,f as bi,g as nu}from"./consumer-registry-DpDsW5u2.js";import{L as U0,c as su}from"./link-scoring-DM2Pm_J5.js";import{C as iu}from"./ConfirmModal-50kGkW1K.js";import{s as ou,a as lu,M as au}from"./variants-DrpNYcKq.js";import{G as Ms}from"./git-branch-mTMgi2yP.js";import{D as uu}from"./database-BVXdlqt_.js";import{H as cu,A as g0,D as ki,p as fu,c as hu,u as mn}from"./useMapViewStore-DKHe4Pgt.js";import{E as Wo}from"./target-BmgGhFGQ.js";import{F as du}from"./funnel-CYg19pUX.js";import{P as mu}from"./plus-QGeNQG7U.js";import{C as pu}from"./compass-2xuknm7N.js";import{Z as gu}from"./zap-BYcByolX.js";import{b as yu,e as xu,a as Yo,m as Ci,E as wu,u as vu,G as bu,g as ku,d as Cu,f as Eu}from"./max-H3Np8Hu6.js";import{T as Su}from"./trash-2-CvwShftV.js";import{W as Mu}from"./wifi-off-UTul3l74.js";import{W as Bu}from"./wifi-DXvKi4OR.js";import{C as Du}from"./circle-alert-DvDZpAxy.js";import{C as $o}from"./clock-BN5kz_rn.js";import{C as _u}from"./chevron-right-C91OWbjn.js";import{u as Vs,a as Ko,b as Zo,c as Tu,d as Ru,e as Ws,f as Ei,R as ju,g as Iu,h as qo,t as Lu,i as Nu,j as Fu,k as Pu}from"./useReplayTick-BuzhdTuk.js";import{L as Qu}from"./LightSparkline-Ljld28zz.js";import{P as Jo,R as Ou}from"./Contacts-BvAN9Nu2.js";import{H as Y0,C as ar,N as zu,a as Hu}from"./badge-colors-Dl76Mz8m.js";import{M as Gu}from"./map-pin-fLzYsBy8.js";import{c as Si}from"./node-types-CZU1TYyP.js";import{B as Uu}from"./BasemapLayer-CcR6yjqw.js";import{a as Xo,b as Bs,c as Vu}from"./easing-Br3uSuFo.js";import"./index-Dt-sD4KR.js";import"./index-otmcOBoI.js";import"./payload-detail-DU_tG1eu.js";import"./usePipelineStore-BaWhVpyW.js";import"./PageLayout-Cy1L4zCJ.js";import"./listbox-rHrMQnGk.js";import"./element-movement-C6ZRjLmX.js";import"./use-text-value-CuMxrIDg.js";import"./frozen-B3qGhFK_.js";import"./MqttModeBadge-BJg6amfg.js";import"./chat-utils-BwkxfnX-.js";import"./SignalIndicator-DWAWi2Rh.js";import"./CollisionExplorerModal-BCPa_URl.js";import"./share-2-BZBogpYU.js";import"./circle-question-mark-CwqXs51O.js";import"./map-pin-off-DeI0RcqS.js";import"./activity-DsMN7cur.js";import"./search-D71Nuk6u.js";/**
import{e as Sr,an as xa,r as R,gB as wa,cv as va,dq as ba,dr as ka,j as m,aC as Co,ds as Ca,aD as Eo,m as Jt,a0 as Wn,aE as So,c as Cn,a2 as Z0,O as lr,Z as vn,gC as q0,gD as Mo,gE as Ea,ck as Sa,cr as Ma,ct as Ba,dV as Bo,ap as Do,aF as _o,d as Cr,b as En,B as Nt,dH as Da,cm as ms,E as Gs,S as Us,dy as To,t as Ro,d0 as jo,aa as Io,bN as Sn,bJ as xi,gF as Lo,Q as _a,a6 as Ta,dG as Ra,gG as ja,az as No,bU as wi,bW as Ia,a1 as J0,a3 as X0,co as La,ba as Na,f1 as Fo,gH as Fa,gI as Pa,dI as Qa,dJ as Oa,gJ as za,gK as Ha,aS as Po,V as gt,gL as Ga,gM as Qo,gN as Ua,ao as Er,bQ as Oo,dx as Va,gO as zo,gP as Ho,cc as Wa,gz as Ya,cf as $a,dv as Go,dz as Ka,ab as Za,gQ as qa,fd as Ja,gR as ps,ga as Xa,fJ as Au,gS as eu}from"./index-3pqtXusJ.js";import{u as Or,S as Qr,L as qt,M as tu,b as ru}from"./maplibre-gl-B4T1ie9I.js";import{u as Uo,r as Vo,e as vi,f as bi,g as nu}from"./consumer-registry-B0iel_sz.js";import{L as U0,c as su}from"./link-scoring-fanbK4EI.js";import{C as iu}from"./ConfirmModal-CxugVPnE.js";import{s as ou,a as lu,M as au}from"./variants-CvuqjG8s.js";import{G as Ms}from"./git-branch-CHiljU3D.js";import{D as uu}from"./database-Dm0ekFR9.js";import{H as cu,A as g0,D as ki,p as fu,c as hu,u as mn}from"./useMapViewStore-D40hCWIX.js";import{E as Wo}from"./target-CHsOcpvC.js";import{F as du}from"./funnel-5qtSMyK6.js";import{P as mu}from"./plus-B_ej3qBi.js";import{C as pu}from"./compass-Sw8fpk2C.js";import{Z as gu}from"./zap-DDvG1zfk.js";import{b as yu,e as xu,a as Yo,m as Ci,E as wu,u as vu,G as bu,g as ku,d as Cu,f as Eu}from"./max-D2iDwtvX.js";import{T as Su}from"./trash-2-C_Azu9dt.js";import{W as Mu}from"./wifi-off-BM9ozlpF.js";import{W as Bu}from"./wifi-S5Gul3yh.js";import{C as Du}from"./circle-alert-65h1cT0n.js";import{C as $o}from"./clock-DVdpngZT.js";import{C as _u}from"./chevron-right-SYOv1A3t.js";import{u as Vs,a as Ko,b as Zo,c as Tu,d as Ru,e as Ws,f as Ei,R as ju,g as Iu,h as qo,t as Lu,i as Nu,j as Fu,k as Pu}from"./useReplayTick-Bqtb6gXd.js";import{L as Qu}from"./LightSparkline-l7vYrUWe.js";import{P as Jo,R as Ou}from"./Contacts-BrPE_LJP.js";import{H as Y0,C as ar,N as zu,a as Hu}from"./badge-colors-Dl76Mz8m.js";import{M as Gu}from"./map-pin-Brnhj7us.js";import{c as Si}from"./node-types-BCSSICgK.js";import{B as Uu}from"./BasemapLayer-9gai5sCQ.js";import{a as Xo,b as Bs,c as Vu}from"./easing-BCMe6oiu.js";import"./index-BVGwxkt0.js";import"./index-C3m1aKix.js";import"./payload-detail-D4ApVEb_.js";import"./usePipelineStore-C5V-H8E9.js";import"./PageLayout-ClkXnw1C.js";import"./listbox-By5Pax2J.js";import"./element-movement-B9y2O6wi.js";import"./use-text-value-B5tgq9J4.js";import"./frozen-BdZj6HzG.js";import"./MqttModeBadge-B0mWLOQz.js";import"./chat-utils-B7ck9OUr.js";import"./SignalIndicator-hH6kMAFv.js";import"./CollisionExplorerModal-CArFuY5_.js";import"./share-2-CVe7X33l.js";import"./circle-question-mark-CRBJiEZi.js";import"./map-pin-off-18TVo1Xg.js";import"./activity-GpEAZFnq.js";import"./search-DyiSv6bM.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
import{r as a,cZ as d,j as o,c_ as N}from"./index-CmCiA9Mb.js";import{A as g}from"./index-Dt-sD4KR.js";const I=a.memo(function({value:t,format:e,prefix:r,suffix:s,className:n,priority:m="medium"}){const[u,p]=a.useState(!1),[f,l]=a.useState(t);a.useEffect(()=>d(()=>{p(!0),l(0)},m),[m]),a.useEffect(()=>{u&&l(t)},[u,t]);const A=`${r??""}${t.toLocaleString(void 0,e)}${s??""}`;return u?o.jsx(g,{className:`${n??""} overflow-hidden`,format:e,prefix:r,suffix:s,transition:N.numberTicker,children:f}):o.jsx("span",{className:n,children:A})}),x={",":"punc",".":"punc-period",":":"punc-colon","/":"punc-slash"},c=/([,\.:\/])/g;function j(i){return i.split(c).map((e,r)=>{const s=x[e];return s?o.jsx("span",{className:s,children:e},r):e})}const S=a.memo(function({children:t,className:e="",as:r="span"}){const s=a.useMemo(()=>{let n;return typeof t=="number"?n=t.toLocaleString():Array.isArray(t)?n=t.join(""):n=String(t??""),c.test(n)?(c.lastIndex=0,j(n)):n},[t]);return o.jsx(r,{className:`data-tight ${e}`.trim(),children:s})});export{I as A,S as D};
import{r as a,cZ as d,j as o,c_ as N}from"./index-3pqtXusJ.js";import{A as g}from"./index-BVGwxkt0.js";const I=a.memo(function({value:t,format:e,prefix:r,suffix:s,className:n,priority:m="medium"}){const[u,p]=a.useState(!1),[f,l]=a.useState(t);a.useEffect(()=>d(()=>{p(!0),l(0)},m),[m]),a.useEffect(()=>{u&&l(t)},[u,t]);const A=`${r??""}${t.toLocaleString(void 0,e)}${s??""}`;return u?o.jsx(g,{className:`${n??""} overflow-hidden`,format:e,prefix:r,suffix:s,transition:N.numberTicker,children:f}):o.jsx("span",{className:n,children:A})}),x={",":"punc",".":"punc-period",":":"punc-colon","/":"punc-slash"},c=/([,\.:\/])/g;function j(i){return i.split(c).map((e,r)=>{const s=x[e];return s?o.jsx("span",{className:s,children:e},r):e})}const S=a.memo(function({children:t,className:e="",as:r="span"}){const s=a.useMemo(()=>{let n;return typeof t=="number"?n=t.toLocaleString():Array.isArray(t)?n=t.join(""):n=String(t??""),c.test(n)?(c.lastIndex=0,j(n)):n},[t]);return o.jsx(r,{className:`data-tight ${e}`.trim(),children:s})});export{I as A,S as D};
@@ -1 +1 @@
import{r as b,j as c,c as d}from"./index-CmCiA9Mb.js";const g={hero:{mobile:12},"hero-tall":{mobile:12},"hero-auto":{mobile:12},panel:{mobile:12,md:6},feature:{mobile:12,md:6,lg:4},standard:{mobile:12,sm:6,lg:4,xl:3},compact:{mobile:6,lg:3},widget:{mobile:6,sm:4,md:3,lg:2},auto:{mobile:12}},p={hero:"bento-row-hero","hero-tall":"bento-row-hero-tall","hero-auto":"bento-row-hero-auto",panel:"bento-row-panel",feature:"bento-row-feature",standard:"bento-row-standard",compact:"bento-row-compact",widget:"bento-row-widget",auto:"bento-row-auto"};function w({template:o,children:r,className:e,gap:n}){const t=g[o],m=p[o],a=n==="none"?"gap-0":n==="sm"?"bento-gap-sm":n==="lg"?"bento-gap-lg":"bento-gap",i=b.Children.map(r,l=>!b.isValidElement(l)||l.type===u?l:c.jsx(u,{span:t.mobile,sm:t.sm,md:t.md,lg:t.lg,xl:t.xl,children:l}));return c.jsx("div",{className:d("bento-row",m,a,e),children:i})}function s(o,r=""){const e=r?`${r}:`:"";return o==="full"?`${e}col-span-full`:o==="auto"?`${e}col-auto`:o===1.5?`${e}bento-col-1-5`:`${e}bento-col-${o}`}function u({children:o,span:r,sm:e,md:n,lg:t,xl:m,ratio:a,className:i}){const l=d("bento-cell",s(r),e&&s(e,"sm"),n&&s(n,"md"),t&&s(t,"lg"),m&&s(m,"xl"),i);return c.jsx("div",{className:l,"data-ratio":a??void 0,style:a?{"--cell-ratio":a}:void 0,children:o})}export{u as C,w as R};
import{r as b,j as c,c as d}from"./index-3pqtXusJ.js";const g={hero:{mobile:12},"hero-tall":{mobile:12},"hero-auto":{mobile:12},panel:{mobile:12,md:6},feature:{mobile:12,md:6,lg:4},standard:{mobile:12,sm:6,lg:4,xl:3},compact:{mobile:6,lg:3},widget:{mobile:6,sm:4,md:3,lg:2},auto:{mobile:12}},p={hero:"bento-row-hero","hero-tall":"bento-row-hero-tall","hero-auto":"bento-row-hero-auto",panel:"bento-row-panel",feature:"bento-row-feature",standard:"bento-row-standard",compact:"bento-row-compact",widget:"bento-row-widget",auto:"bento-row-auto"};function w({template:o,children:r,className:e,gap:n}){const t=g[o],m=p[o],a=n==="none"?"gap-0":n==="sm"?"bento-gap-sm":n==="lg"?"bento-gap-lg":"bento-gap",i=b.Children.map(r,l=>!b.isValidElement(l)||l.type===u?l:c.jsx(u,{span:t.mobile,sm:t.sm,md:t.md,lg:t.lg,xl:t.xl,children:l}));return c.jsx("div",{className:d("bento-row",m,a,e),children:i})}function s(o,r=""){const e=r?`${r}:`:"";return o==="full"?`${e}col-span-full`:o==="auto"?`${e}col-auto`:o===1.5?`${e}bento-col-1-5`:`${e}bento-col-${o}`}function u({children:o,span:r,sm:e,md:n,lg:t,xl:m,ratio:a,className:i}){const l=d("bento-cell",s(r),e&&s(e,"sm"),n&&s(n,"md"),t&&s(t,"lg"),m&&s(m,"xl"),i);return c.jsx("div",{className:l,"data-ratio":a??void 0,style:a?{"--cell-ratio":a}:void 0,children:o})}export{u as C,w as R};
@@ -1 +1 @@
import{r as l,j as t,Z as O}from"./index-CmCiA9Mb.js";import{b as F,c as x}from"./keycap-sfx-ByZp-njj.js";const R={a:"24,3 76,3 83,7 76,11 24,11 17,7",b:"88,22 93,27 93,71 88,76 83,71 83,27",c:"88,106 93,111 93,155 88,160 83,155 83,111",d:"24,171 76,171 83,175 76,179 24,179 17,175",e:"12,106 17,111 17,155 12,160 7,155 7,111",f:"12,22 17,27 17,71 12,76 7,71 7,27",g:"24,86 76,86 83,91 76,96 24,96 17,91"},w=Object.keys(R),N={0:"abcdef",1:"bc",2:"abdeg",3:"abcdg",4:"bcfg",5:"acdfg",6:"acdefg",7:"abc",8:"abcdefg",9:"abcdfg",A:"abcefg",B:"cdefg",C:"adef",D:"bcdeg",E:"adefg",F:"aefg",G:"acdef",H:"bcefg",I:"ef",J:"bcde",L:"def",M:"abcefg",N:"ceg",O:"abcdef",P:"abefg",Q:"abcfg",R:"eg",S:"acdfg",T:"defg",U:"bcdef",V:"cde",Y:"bcdfg",Z:"abdeg",a:"abcefg",b:"cdefg",c:"deg",d:"bcdeg",e:"adefg",f:"aefg",g:"abcdfg",h:"cefg",i:"c",j:"bcde",l:"def",m:"abcef",n:"ceg",o:"cdeg",p:"abefg",r:"eg",s:"acdfg",t:"defg",u:"cde",v:"cde",y:"bcdfg"," ":"",_:"d","-":"g","=":"dg","°":"abfg",'"':"bf","'":"f","(":"adef",")":"abcd","[":"adef","]":"abcd","!":"bc",".":"d"},C=6,D=56,L=2;function B(){return w.filter(()=>Math.random()>.45).join("")}function $(r,i){const n=Array.from(r).map(a=>N[a.toUpperCase()]??N[a]??""),d=Math.max(0,(i??0)-r.length);for(let a=0;a<d;a++)n.push("");return n}function Y({text:r,color:i="currentColor",size:n=18,minChars:d,noCycle:a=!1,className:S}){const h=Math.round(n*.5494505494505495),M=document.documentElement.dataset.mode==="light"?.08:.16,[T,f]=l.useState(null);l.useEffect(()=>{if(a)return;const e=$(r,d),o=e.length,g=C+(o-1)*L;let y=0,b,E=!1;const k=()=>{if(!E){if(y++,y>=g){f(null);return}f(e.map((j,_)=>{const v=C+_*L;return y>=v?j:B()})),b=setTimeout(k,D)}};return k(),()=>{E=!0,clearTimeout(b)}},[r,d,a]);const c=(e,o)=>t.jsx("svg",{viewBox:"0 0 100 182",width:h,height:n,className:"seven-seg__char","aria-hidden":"true",children:w.map(g=>t.jsx("polygon",{points:R[g],fill:i,stroke:i,strokeWidth:4,strokeLinejoin:"round",opacity:e.includes(g)?1:M},g))},o),s=$(r,d),u=T??s;return t.jsxs("span",{className:`seven-seg${S?` ${S}`:""}`,children:[u.map((e,o)=>c(e,`${o}-${e}`)),t.jsx("span",{className:"sr-only",children:r})]})}const G={grey:"/assets/keycap.svg",red:"/assets/keycap-red.svg"},I=O[900],P="#FFDEB0";function Z({icon:r,variant:i="grey",onClick:n,onPress:d,sentDuration:a=2e3,title:S,disabled:h=!1,className:m,iconColor:M=I,iconActiveColor:T=P,indicators:f}){const c=!!d,[s,u]=l.useState("idle"),[e,o]=l.useState(!1),g=l.useRef(),y=c?s==="held":e,b=c&&(s==="sending"||s==="sent"),E=c?s==="held"||s==="sending":e;l.useEffect(()=>()=>clearTimeout(g.current),[]);const k=l.useCallback(()=>{h||b||(F(),c?u("held"):o(!0))},[h,b,c]),j=l.useCallback(async()=>{if(c){if(s!=="held")return;x(),u("sending");const p=await d();u(p?"sent":"idle"),p&&(g.current=setTimeout(()=>u("idle"),a))}else{if(!e)return;o(!1),x(),n==null||n()}},[c,s,d,a,e,n]),_=l.useCallback(()=>{c?s==="held"&&(x(),u("idle")):(e&&x(),o(!1))},[c,s,e]),v=t.jsx("button",{onMouseDown:k,onMouseUp:j,onMouseLeave:_,onTouchStart:k,onTouchEnd:j,onTouchCancel:_,disabled:h||b,className:`keycap-btn${i==="red"?" keycap-btn--red-cap":""}${E?" keycap-btn--pressed":""}${m&&!f?` ${m}`:""}`,title:S,children:t.jsxs("div",{className:"keycap-wrap",children:[t.jsx("img",{src:G[i],alt:"",className:"keycap-btn__img",draggable:!1}),t.jsx("span",{className:"keycap-icon-overlay",style:{color:y||s==="sending"?T:M},children:r})]})});return f!=null&&f.length?t.jsxs("div",{className:`keycap-group${m?` ${m}`:""}`,children:[v,t.jsx("div",{className:"indicator-key-pair",children:f.map(p=>{const A=p.trackPress?s:p.active?"active":"idle";return t.jsxs("div",{className:`indicator-key${A!=="idle"?` indicator-key--${A}`:""}`,children:[t.jsx("span",{className:"indicator-key__label",children:p.label}),t.jsx("span",{className:"indicator-key__led"})]},p.label)})})]}):v}export{Z as K,Y as S};
import{r as l,j as t,Z as O}from"./index-3pqtXusJ.js";import{b as F,c as x}from"./keycap-sfx-ByZp-njj.js";const R={a:"24,3 76,3 83,7 76,11 24,11 17,7",b:"88,22 93,27 93,71 88,76 83,71 83,27",c:"88,106 93,111 93,155 88,160 83,155 83,111",d:"24,171 76,171 83,175 76,179 24,179 17,175",e:"12,106 17,111 17,155 12,160 7,155 7,111",f:"12,22 17,27 17,71 12,76 7,71 7,27",g:"24,86 76,86 83,91 76,96 24,96 17,91"},w=Object.keys(R),N={0:"abcdef",1:"bc",2:"abdeg",3:"abcdg",4:"bcfg",5:"acdfg",6:"acdefg",7:"abc",8:"abcdefg",9:"abcdfg",A:"abcefg",B:"cdefg",C:"adef",D:"bcdeg",E:"adefg",F:"aefg",G:"acdef",H:"bcefg",I:"ef",J:"bcde",L:"def",M:"abcefg",N:"ceg",O:"abcdef",P:"abefg",Q:"abcfg",R:"eg",S:"acdfg",T:"defg",U:"bcdef",V:"cde",Y:"bcdfg",Z:"abdeg",a:"abcefg",b:"cdefg",c:"deg",d:"bcdeg",e:"adefg",f:"aefg",g:"abcdfg",h:"cefg",i:"c",j:"bcde",l:"def",m:"abcef",n:"ceg",o:"cdeg",p:"abefg",r:"eg",s:"acdfg",t:"defg",u:"cde",v:"cde",y:"bcdfg"," ":"",_:"d","-":"g","=":"dg","°":"abfg",'"':"bf","'":"f","(":"adef",")":"abcd","[":"adef","]":"abcd","!":"bc",".":"d"},C=6,D=56,L=2;function B(){return w.filter(()=>Math.random()>.45).join("")}function $(r,i){const n=Array.from(r).map(a=>N[a.toUpperCase()]??N[a]??""),d=Math.max(0,(i??0)-r.length);for(let a=0;a<d;a++)n.push("");return n}function Y({text:r,color:i="currentColor",size:n=18,minChars:d,noCycle:a=!1,className:S}){const h=Math.round(n*.5494505494505495),M=document.documentElement.dataset.mode==="light"?.08:.16,[T,f]=l.useState(null);l.useEffect(()=>{if(a)return;const e=$(r,d),o=e.length,g=C+(o-1)*L;let y=0,b,E=!1;const k=()=>{if(!E){if(y++,y>=g){f(null);return}f(e.map((j,_)=>{const v=C+_*L;return y>=v?j:B()})),b=setTimeout(k,D)}};return k(),()=>{E=!0,clearTimeout(b)}},[r,d,a]);const c=(e,o)=>t.jsx("svg",{viewBox:"0 0 100 182",width:h,height:n,className:"seven-seg__char","aria-hidden":"true",children:w.map(g=>t.jsx("polygon",{points:R[g],fill:i,stroke:i,strokeWidth:4,strokeLinejoin:"round",opacity:e.includes(g)?1:M},g))},o),s=$(r,d),u=T??s;return t.jsxs("span",{className:`seven-seg${S?` ${S}`:""}`,children:[u.map((e,o)=>c(e,`${o}-${e}`)),t.jsx("span",{className:"sr-only",children:r})]})}const G={grey:"/assets/keycap.svg",red:"/assets/keycap-red.svg"},I=O[900],P="#FFDEB0";function Z({icon:r,variant:i="grey",onClick:n,onPress:d,sentDuration:a=2e3,title:S,disabled:h=!1,className:m,iconColor:M=I,iconActiveColor:T=P,indicators:f}){const c=!!d,[s,u]=l.useState("idle"),[e,o]=l.useState(!1),g=l.useRef(),y=c?s==="held":e,b=c&&(s==="sending"||s==="sent"),E=c?s==="held"||s==="sending":e;l.useEffect(()=>()=>clearTimeout(g.current),[]);const k=l.useCallback(()=>{h||b||(F(),c?u("held"):o(!0))},[h,b,c]),j=l.useCallback(async()=>{if(c){if(s!=="held")return;x(),u("sending");const p=await d();u(p?"sent":"idle"),p&&(g.current=setTimeout(()=>u("idle"),a))}else{if(!e)return;o(!1),x(),n==null||n()}},[c,s,d,a,e,n]),_=l.useCallback(()=>{c?s==="held"&&(x(),u("idle")):(e&&x(),o(!1))},[c,s,e]),v=t.jsx("button",{onMouseDown:k,onMouseUp:j,onMouseLeave:_,onTouchStart:k,onTouchEnd:j,onTouchCancel:_,disabled:h||b,className:`keycap-btn${i==="red"?" keycap-btn--red-cap":""}${E?" keycap-btn--pressed":""}${m&&!f?` ${m}`:""}`,title:S,children:t.jsxs("div",{className:"keycap-wrap",children:[t.jsx("img",{src:G[i],alt:"",className:"keycap-btn__img",draggable:!1}),t.jsx("span",{className:"keycap-icon-overlay",style:{color:y||s==="sending"?T:M},children:r})]})});return f!=null&&f.length?t.jsxs("div",{className:`keycap-group${m?` ${m}`:""}`,children:[v,t.jsx("div",{className:"indicator-key-pair",children:f.map(p=>{const A=p.trackPress?s:p.active?"active":"idle";return t.jsxs("div",{className:`indicator-key${A!=="idle"?` indicator-key--${A}`:""}`,children:[t.jsx("span",{className:"indicator-key__label",children:p.label}),t.jsx("span",{className:"indicator-key__led"})]},p.label)})})]}):v}export{Z as K,Y as S};
@@ -1 +1 @@
import{r as y,j as t}from"./index-CmCiA9Mb.js";const m="var(--sys-cyan)",k="var(--sys-blue)",v="var(--sys-indigo)",I="var(--sparkline-critical)",g="var(--fg-muted)";function C(d,o,e,s=2){if(d.length<2)return"";const r=d.map(n=>n.count),u=Math.max(...r,1),p=Math.min(...r),l=u-p||1,j=o-s*2,a=e-s*2,i=r.map((n,c)=>({x:s+c/(r.length-1)*j,y:s+a-(n-p)/l*a}));let x=`M ${i[0].x.toFixed(1)} ${i[0].y.toFixed(1)}`;for(let n=1;n<i.length;n++){const c=i[n-1],f=i[n],$=(c.x+f.x)/2;x+=` Q ${$.toFixed(1)} ${c.y.toFixed(1)} ${f.x.toFixed(1)} ${f.y.toFixed(1)}`}return x}const L=y.memo(function({data:o,width:e=48,height:s=16,color:r,invertScale:u=!1,isLoading:p=!1,className:l=""}){const a=`sl-${y.useId().replace(/:/g,"")}`,i=y.useMemo(()=>C(o,e,s),[o,e,s]),x=!r&&o.length>=2,n=r??(x?`url(#${a})`:g),c=l.includes("w-");return p&&o.length<2?t.jsx("div",{className:`flex items-center justify-center ${l}`,style:c?{height:s}:{width:e,height:s},children:t.jsx("div",{className:"rounded animate-pulse bg-subtle-fill-hover",style:c?{width:"100%",height:s-6}:{width:e-8,height:s-6}})}):o.length<2?t.jsx("svg",{width:e,height:s,viewBox:`0 0 ${e} ${s}`,className:l,"aria-hidden":"true",children:t.jsx("line",{x1:4,y1:s/2,x2:e-4,y2:s/2,stroke:I,strokeWidth:1.5,strokeDasharray:"3,2"})}):t.jsxs("svg",{width:e,height:s,viewBox:`0 0 ${e} ${s}`,preserveAspectRatio:"none",className:l,"aria-hidden":"true",style:{maxWidth:"100%"},children:[x&&t.jsx("defs",{children:t.jsxs("linearGradient",{id:a,gradientUnits:"userSpaceOnUse",x1:0,y1:2,x2:0,y2:s-2,children:[t.jsx("stop",{offset:"0%",stopColor:u?v:m}),t.jsx("stop",{offset:"50%",stopColor:k}),t.jsx("stop",{offset:"100%",stopColor:u?m:v})]})}),t.jsx("path",{d:i,fill:"none",stroke:n,strokeWidth:1.5,strokeLinecap:"round",strokeLinejoin:"round",vectorEffect:"non-scaling-stroke"})]})});export{L};
import{r as y,j as t}from"./index-3pqtXusJ.js";const m="var(--sys-cyan)",k="var(--sys-blue)",v="var(--sys-indigo)",I="var(--sparkline-critical)",g="var(--fg-muted)";function C(d,o,e,s=2){if(d.length<2)return"";const r=d.map(n=>n.count),u=Math.max(...r,1),p=Math.min(...r),l=u-p||1,j=o-s*2,a=e-s*2,i=r.map((n,c)=>({x:s+c/(r.length-1)*j,y:s+a-(n-p)/l*a}));let x=`M ${i[0].x.toFixed(1)} ${i[0].y.toFixed(1)}`;for(let n=1;n<i.length;n++){const c=i[n-1],f=i[n],$=(c.x+f.x)/2;x+=` Q ${$.toFixed(1)} ${c.y.toFixed(1)} ${f.x.toFixed(1)} ${f.y.toFixed(1)}`}return x}const L=y.memo(function({data:o,width:e=48,height:s=16,color:r,invertScale:u=!1,isLoading:p=!1,className:l=""}){const a=`sl-${y.useId().replace(/:/g,"")}`,i=y.useMemo(()=>C(o,e,s),[o,e,s]),x=!r&&o.length>=2,n=r??(x?`url(#${a})`:g),c=l.includes("w-");return p&&o.length<2?t.jsx("div",{className:`flex items-center justify-center ${l}`,style:c?{height:s}:{width:e,height:s},children:t.jsx("div",{className:"rounded animate-pulse bg-subtle-fill-hover",style:c?{width:"100%",height:s-6}:{width:e-8,height:s-6}})}):o.length<2?t.jsx("svg",{width:e,height:s,viewBox:`0 0 ${e} ${s}`,className:l,"aria-hidden":"true",children:t.jsx("line",{x1:4,y1:s/2,x2:e-4,y2:s/2,stroke:I,strokeWidth:1.5,strokeDasharray:"3,2"})}):t.jsxs("svg",{width:e,height:s,viewBox:`0 0 ${e} ${s}`,preserveAspectRatio:"none",className:l,"aria-hidden":"true",style:{maxWidth:"100%"},children:[x&&t.jsx("defs",{children:t.jsxs("linearGradient",{id:a,gradientUnits:"userSpaceOnUse",x1:0,y1:2,x2:0,y2:s-2,children:[t.jsx("stop",{offset:"0%",stopColor:u?v:m}),t.jsx("stop",{offset:"50%",stopColor:k}),t.jsx("stop",{offset:"100%",stopColor:u?m:v})]})}),t.jsx("path",{d:i,fill:"none",stroke:n,strokeWidth:1.5,strokeLinecap:"round",strokeLinejoin:"round",vectorEffect:"non-scaling-stroke"})]})});export{L};
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
import{dY as h,dZ as f,a5 as j,d_ as L,d$ as v,r as l,e0 as N,j as e,e1 as m,a7 as y,B as w,c as i,e2 as b,dN as C,m as S,e3 as E}from"./index-CmCiA9Mb.js";import{P,a as R,B as k,C as B}from"./PageLayout-Cy1L4zCJ.js";import{C as I,a as T}from"./circle-stop-Bh1FFbNU.js";const D=l.memo(function({log:a}){return e.jsx(S.div,{initial:{opacity:0,y:6},animate:{opacity:1,y:0},transition:{duration:.15,ease:"easeOut"},className:"p-3 bg-subtle-fill/80 radius-inner depth-stroke-raised hover:bg-subtle-fill-strong transition-base",children:e.jsxs("div",{className:"flex items-baseline gap-3",children:[e.jsx("span",{className:i("type-data-sm w-14 shrink-0",E(a.level)),children:a.level}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("p",{className:"type-data-sm text-fg-primary break-words whitespace-pre-wrap",children:a.message}),e.jsx("p",{className:"type-data-xs text-fg-muted mt-1",children:new Date(a.timestamp).toLocaleString()})]})]})})});function M({showDebug:s,onToggle:a}){return e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:i("type-data-sm",s?"text-sys-orange":"text-sys-cyan"),children:s?"DEBUG":"INFO"}),e.jsx(C,{enabled:s,onChange:a,size:"sm"})]})}function O(){const s=h(),a=f(),o=j(),r=L(),g=v(),[c,x]=l.useState(!1),u=l.useCallback(()=>{x(t=>!t)},[]),d=c?s:s.filter(t=>t.level!=="DEBUG"),n=l.useRef(r);return n.current=r,l.useEffect(()=>{if(!o)return;n.current();const t=setInterval(()=>n.current(),N.logs);return()=>clearInterval(t)},[o]),e.jsxs(P,{children:[e.jsx(R,{title:"System Logs",icon:e.jsx(m,{}),controls:e.jsx(M,{showDebug:c,onToggle:u})}),e.jsx(k,{ready:!0,children:e.jsxs(B,{neomorphic:!0,noPadding:!0,children:[e.jsx(y,{listHeader:!0,icon:e.jsx(m,{className:"icon-sm"}),title:"Log Entries",actions:e.jsx(w,{plain:!0,color:o?"danger":"primary",onClick:()=>g(!o),title:o?"Pause":"Resume",className:i(!o&&"animate-pulse-slow"),children:o?e.jsx(I,{"data-slot":"icon",className:"!w-5 !h-5"}):e.jsx(T,{"data-slot":"icon",className:"!w-5 !h-5"})})}),e.jsx("div",{className:"space-y-2 max-h-[calc(100dvh-226px)] sm:max-h-[calc(100dvh-234px)] lg:max-h-[calc(100vh-194px)] overflow-y-auto p-4",children:a&&s.length===0?e.jsx(b,{count:10}):d.length===0?e.jsx("div",{className:"text-center py-12 text-fg-muted",children:s.length===0?"No logs available":"No logs match selected filters"}):d.map((t,p)=>e.jsx(D,{log:t},`${t.timestamp}-${p}`))})]})})]})}export{O as default};
import{dY as h,dZ as f,a5 as j,d_ as L,d$ as v,r as l,e0 as N,j as e,e1 as m,a7 as y,B as w,c as i,e2 as b,dN as C,m as S,e3 as E}from"./index-3pqtXusJ.js";import{P,a as R,B as k,C as B}from"./PageLayout-ClkXnw1C.js";import{C as I,a as T}from"./circle-stop-BbMmHcWC.js";const D=l.memo(function({log:a}){return e.jsx(S.div,{initial:{opacity:0,y:6},animate:{opacity:1,y:0},transition:{duration:.15,ease:"easeOut"},className:"p-3 bg-subtle-fill/80 radius-inner depth-stroke-raised hover:bg-subtle-fill-strong transition-base",children:e.jsxs("div",{className:"flex items-baseline gap-3",children:[e.jsx("span",{className:i("type-data-sm w-14 shrink-0",E(a.level)),children:a.level}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("p",{className:"type-data-sm text-fg-primary break-words whitespace-pre-wrap",children:a.message}),e.jsx("p",{className:"type-data-xs text-fg-muted mt-1",children:new Date(a.timestamp).toLocaleString()})]})]})})});function M({showDebug:s,onToggle:a}){return e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:i("type-data-sm",s?"text-sys-orange":"text-sys-cyan"),children:s?"DEBUG":"INFO"}),e.jsx(C,{enabled:s,onChange:a,size:"sm"})]})}function O(){const s=h(),a=f(),o=j(),r=L(),g=v(),[c,x]=l.useState(!1),u=l.useCallback(()=>{x(t=>!t)},[]),d=c?s:s.filter(t=>t.level!=="DEBUG"),n=l.useRef(r);return n.current=r,l.useEffect(()=>{if(!o)return;n.current();const t=setInterval(()=>n.current(),N.logs);return()=>clearInterval(t)},[o]),e.jsxs(P,{children:[e.jsx(R,{title:"System Logs",icon:e.jsx(m,{}),controls:e.jsx(M,{showDebug:c,onToggle:u})}),e.jsx(k,{ready:!0,children:e.jsxs(B,{neomorphic:!0,noPadding:!0,children:[e.jsx(y,{listHeader:!0,icon:e.jsx(m,{className:"icon-sm"}),title:"Log Entries",actions:e.jsx(w,{plain:!0,color:o?"danger":"primary",onClick:()=>g(!o),title:o?"Pause":"Resume",className:i(!o&&"animate-pulse-slow"),children:o?e.jsx(I,{"data-slot":"icon",className:"!w-5 !h-5"}):e.jsx(T,{"data-slot":"icon",className:"!w-5 !h-5"})})}),e.jsx("div",{className:"space-y-2 max-h-[calc(100dvh-226px)] sm:max-h-[calc(100dvh-234px)] lg:max-h-[calc(100vh-194px)] overflow-y-auto p-4",children:a&&s.length===0?e.jsx(b,{count:10}):d.length===0?e.jsx("div",{className:"text-center py-12 text-fg-muted",children:s.length===0?"No logs available":"No logs match selected filters"}):d.map((t,p)=>e.jsx(D,{log:t},`${t.timestamp}-${p}`))})]})})]})}export{O as default};
File diff suppressed because one or more lines are too long
@@ -1,4 +1,4 @@
import{e as Se,fm as N,fn as Ke,r as d,j as e,I as K,B as te,c as C,f2 as Fe,f3 as ze,aF as be,f4 as Ve,a8 as pe,V as I,a0 as ne,bN as xe,fo as ye,dp as Ce,fp as Le,fq as me,bI as We,fr as $e,aa as le,a7 as Pe,fs as O,ft as Ze,fu as Ye,fv as Me,fw as Je,fx as Xe,fy as _e,a2 as je,fz as qe,cL as ke,fA as Qe,bZ as et}from"./index-CmCiA9Mb.js";import{C as Q,P as tt,a as st,B as at}from"./PageLayout-Cy1L4zCJ.js";import{L as Re,a as fe}from"./listbox-rHrMQnGk.js";import{S as nt}from"./settings-2-nbtzfNBl.js";import{P as re}from"./plus-QGeNQG7U.js";import{M as rt}from"./map-pin-fLzYsBy8.js";import{C as lt}from"./check-check-DM7hX50H.js";import{Z as se}from"./zap-BYcByolX.js";import{S as Te}from"./search-D71Nuk6u.js";import{C as de}from"./chevron-right-C91OWbjn.js";import{H as ot}from"./hash-CxZ9Dlpp.js";import{u as it,C as ct}from"./chevron-up-flAbQHyD.js";import{F as dt}from"./funnel-CYg19pUX.js";import{a as ut,C as mt}from"./circle-stop-Bh1FFbNU.js";import{T as ht}from"./trash-2-CvwShftV.js";import{M as pt}from"./message-square-hjs-AhB4.js";import{C as xt}from"./cpu-k4ADDv2q.js";import{R as ue,C as ge}from"./Grid-FqRi0NO0.js";import{W as ft}from"./wifi-DXvKi4OR.js";import{W as gt}from"./wifi-off-UTul3l74.js";import{D as Ne}from"./database-BVXdlqt_.js";import{C as Nt}from"./clock-BN5kz_rn.js";import"./element-movement-C6ZRjLmX.js";import"./use-text-value-CuMxrIDg.js";import"./frozen-B3qGhFK_.js";/**
import{e as Se,fm as N,fn as Ke,r as d,j as e,I as K,B as te,c as C,f2 as Fe,f3 as ze,aF as be,f4 as Ve,a8 as pe,V as I,a0 as ne,bN as xe,fo as ye,dp as Ce,fp as Le,fq as me,bI as We,fr as $e,aa as le,a7 as Pe,fs as O,ft as Ze,fu as Ye,fv as Me,fw as Je,fx as Xe,fy as _e,a2 as je,fz as qe,cL as ke,fA as Qe,bZ as et}from"./index-3pqtXusJ.js";import{C as Q,P as tt,a as st,B as at}from"./PageLayout-ClkXnw1C.js";import{L as Re,a as fe}from"./listbox-By5Pax2J.js";import{S as nt}from"./settings-2-Ctv_JK7q.js";import{P as re}from"./plus-B_ej3qBi.js";import{M as rt}from"./map-pin-Brnhj7us.js";import{C as lt}from"./check-check-Rwrjrz-v.js";import{Z as se}from"./zap-DDvG1zfk.js";import{S as Te}from"./search-DyiSv6bM.js";import{C as de}from"./chevron-right-SYOv1A3t.js";import{H as ot}from"./hash-B2aVJVUU.js";import{u as it,C as ct}from"./chevron-up--1NHxPll.js";import{F as dt}from"./funnel-5qtSMyK6.js";import{a as ut,C as mt}from"./circle-stop-BbMmHcWC.js";import{T as ht}from"./trash-2-C_Azu9dt.js";import{M as pt}from"./message-square-CSWcr0Oc.js";import{C as xt}from"./cpu-Dlph-Nzj.js";import{R as ue,C as ge}from"./Grid-BjR70VWU.js";import{W as ft}from"./wifi-S5Gul3yh.js";import{W as gt}from"./wifi-off-BM9ozlpF.js";import{D as Ne}from"./database-Dm0ekFR9.js";import{C as Nt}from"./clock-DVdpngZT.js";import"./element-movement-B9y2O6wi.js";import"./use-text-value-B5tgq9J4.js";import"./frozen-BdZj6HzG.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
import{j as e,Y as d,c as m,aR as o,r as i,gy as f}from"./index-CmCiA9Mb.js";function p({children:a,className:s}){return e.jsx("div",{className:m("section-gap",s),children:a})}function g({children:a,className:s,ready:n}){const r=o(),t=n??r,[x,c]=i.useState(!1);return i.useEffect(()=>{if(!t){c(!1);return}let l=!1;return requestAnimationFrame(()=>{requestAnimationFrame(()=>{l||i.startTransition(()=>c(!0))})}),()=>{l=!0}},[t]),e.jsx(f.Provider,{value:x,children:e.jsx("div",{className:m("bento-section",s),children:a})})}function j({title:a,icon:s,controls:n,leading:r,subtitle:t}){return e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3 min-h-9",children:[e.jsxs("div",{className:"flex items-center gap-2 min-w-0",children:[e.jsxs("h1",{className:"type-title text-fg-primary flex items-baseline gap-2 sm:gap-3 min-w-0",children:[s&&e.jsx("span",{className:"text-icon-page-title flex-shrink-0 translate-y-[0.1em] [&>svg]:h-[1em] [&>svg]:w-[1em] [&>svg]:stroke-[1.5]",children:s}),e.jsx("span",{className:"truncate",children:a})]}),r]}),n&&e.jsx("div",{className:"flex items-center gap-2 flex-shrink-0",children:n})]}),t&&e.jsx("div",{children:t})]})}function h({size:a,...s}){return e.jsx(d,{...s})}export{g as B,h as C,p as P,j as a};
import{j as e,Y as d,c as m,aR as o,r as i,gy as f}from"./index-3pqtXusJ.js";function p({children:a,className:s}){return e.jsx("div",{className:m("section-gap",s),children:a})}function g({children:a,className:s,ready:n}){const r=o(),t=n??r,[x,c]=i.useState(!1);return i.useEffect(()=>{if(!t){c(!1);return}let l=!1;return requestAnimationFrame(()=>{requestAnimationFrame(()=>{l||i.startTransition(()=>c(!0))})}),()=>{l=!0}},[t]),e.jsx(f.Provider,{value:x,children:e.jsx("div",{className:m("bento-section",s),children:a})})}function j({title:a,icon:s,controls:n,leading:r,subtitle:t}){return e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3 min-h-9",children:[e.jsxs("div",{className:"flex items-center gap-2 min-w-0",children:[e.jsxs("h1",{className:"type-title text-fg-primary flex items-baseline gap-2 sm:gap-3 min-w-0",children:[s&&e.jsx("span",{className:"text-icon-page-title flex-shrink-0 translate-y-[0.1em] [&>svg]:h-[1em] [&>svg]:w-[1em] [&>svg]:stroke-[1.5]",children:s}),e.jsx("span",{className:"truncate",children:a})]}),r]}),n&&e.jsx("div",{className:"flex items-center gap-2 flex-shrink-0",children:n})]}),t&&e.jsx("div",{children:t})]})}function h({size:a,...s}){return e.jsx(d,{...s})}export{g as B,h as C,p as P,j as a};
File diff suppressed because one or more lines are too long
@@ -1,4 +1,4 @@
import{e as I,r as l,j as e,ct as W,aa as De,c as A,aC as Ae,aL as $e,aD as Ke,V as U,I as E,eJ as Fe,B as b,cb as we,aF as ie,O as Oe,a7 as te,a3 as Ce,a0 as G,a1 as Be,eK as Se,eL as ze,bJ as _e,eM as qe,eN as He,eO as Ve,eP as Ue,eQ as Ge,eR as We,eS as Ye,eT as Ie,a6 as Je,Q as Qe,eE as Xe,cv as ce}from"./index-CmCiA9Mb.js";import{C as q,P as de,a as me,B as Ze}from"./PageLayout-Cy1L4zCJ.js";import{R as es,C as ue}from"./Grid-FqRi0NO0.js";import{c as ss,m as ts}from"./node-types-CZU1TYyP.js";import{R as as}from"./repeat-BuBUsw2_.js";import{L as ns,a as rs,b as ls}from"./listbox-rHrMQnGk.js";import{P as os}from"./plus-QGeNQG7U.js";import{F as P,L as D,D as is}from"./fieldset-Bo4UFX8y.js";import{M as Z}from"./map-pin-fLzYsBy8.js";import{T as Re}from"./trash-2-CvwShftV.js";import{S as ee,K as Y}from"./KeycapButton-DgpVlnL0.js";import{C as xe}from"./ConfirmModal-50kGkW1K.js";import{S as cs,C as ds}from"./ChatBubble-9AtoFY1Q.js";import{e as ms,g as us,a as xs}from"./chat-utils-BwkxfnX-.js";import{W as se}from"./wifi-DXvKi4OR.js";import{M as ps}from"./message-square-text-cwzf-1Q1.js";import{K as hs}from"./key-round-D4LOeatm.js";import"./element-movement-C6ZRjLmX.js";import"./use-text-value-CuMxrIDg.js";import"./frozen-B3qGhFK_.js";import"./keycap-sfx-ByZp-njj.js";/**
import{e as I,r as l,j as e,ct as W,aa as De,c as A,aC as Ae,aL as $e,aD as Ke,V as U,I as E,eJ as Fe,B as b,cb as we,aF as ie,O as Oe,a7 as te,a3 as Ce,a0 as G,a1 as Be,eK as Se,eL as ze,bJ as _e,eM as qe,eN as He,eO as Ve,eP as Ue,eQ as Ge,eR as We,eS as Ye,eT as Ie,a6 as Je,Q as Qe,eE as Xe,cv as ce}from"./index-3pqtXusJ.js";import{C as q,P as de,a as me,B as Ze}from"./PageLayout-ClkXnw1C.js";import{R as es,C as ue}from"./Grid-BjR70VWU.js";import{c as ss,m as ts}from"./node-types-BCSSICgK.js";import{R as as}from"./repeat-CEo1l2FA.js";import{L as ns,a as rs,b as ls}from"./listbox-By5Pax2J.js";import{P as os}from"./plus-B_ej3qBi.js";import{F as P,L as D,D as is}from"./fieldset-BrifME_X.js";import{M as Z}from"./map-pin-Brnhj7us.js";import{T as Re}from"./trash-2-C_Azu9dt.js";import{S as ee,K as Y}from"./KeycapButton-ChFwjqFF.js";import{C as xe}from"./ConfirmModal-CxugVPnE.js";import{S as cs,C as ds}from"./ChatBubble-CRm995Zy.js";import{e as ms,g as us,a as xs}from"./chat-utils-B7ck9OUr.js";import{W as se}from"./wifi-S5Gul3yh.js";import{M as ps}from"./message-square-text-CVHE7zHO.js";import{K as hs}from"./key-round-D1Th61uf.js";import"./element-movement-B9y2O6wi.js";import"./use-text-value-B5tgq9J4.js";import"./frozen-BdZj6HzG.js";import"./keycap-sfx-ByZp-njj.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
import{e as g,r as l,fk as V,fl as z,eg as J,j as e,B as j,a2 as M,a0 as U,dV as Z,bJ as C,c as N,bZ as Q,eL as Y,cV as W,cF as X,ct as ee,c4 as se}from"./index-CmCiA9Mb.js";import{C as ae}from"./ConfirmModal-50kGkW1K.js";import{P as te,a as le,B as ie,C as E}from"./PageLayout-Cy1L4zCJ.js";import{R as T,C as y}from"./Grid-FqRi0NO0.js";import{S as $}from"./shield-check-DvzfYNbV.js";import{C as ne}from"./circle-question-mark-CwqXs51O.js";import{S as ce}from"./shield-4Eb-GPCQ.js";import{A as re}from"./antenna-CJ9ROx3O.js";import{T as F}from"./trash-2-CvwShftV.js";/**
import{e as g,r as l,fk as V,fl as z,eg as J,j as e,B as j,a2 as M,a0 as U,dV as Z,bJ as C,c as N,bZ as Q,eL as Y,cV as W,cF as X,ct as ee,c4 as se}from"./index-3pqtXusJ.js";import{C as ae}from"./ConfirmModal-CxugVPnE.js";import{P as te,a as le,B as ie,C as E}from"./PageLayout-ClkXnw1C.js";import{R as T,C as y}from"./Grid-BjR70VWU.js";import{S as $}from"./shield-check-DPeQkLN0.js";import{C as ne}from"./circle-question-mark-CRBJiEZi.js";import{S as ce}from"./shield-tGFHFIM3.js";import{A as re}from"./antenna-D2khKMQR.js";import{T as F}from"./trash-2-C_Azu9dt.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
import{e as l,r as m,c as i,j as r,gq as j,dx as _,e8 as k}from"./index-CmCiA9Mb.js";/**
import{e as l,r as m,c as i,j as r,gq as j,dx as _,e8 as k}from"./index-3pqtXusJ.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
var Ft=Object.defineProperty;var Ht=(t,n,s)=>n in t?Ft(t,n,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[n]=s;var ke=(t,n,s)=>Ht(t,typeof n!="symbol"?n+"":n,s);import{e as Oe,r as l,j as e,G as Ve,c as mt,P as At,cG as _t,cH as qe,w as De,cI as Bt,V as Pe,cJ as $t,co as Re,cK as zt,cL as Wt,x as Ut,at as Gt,cM as Vt,cN as qt,cO as Xt,cP as Kt,cQ as Yt,cc as Zt,cR as Xe,cf as Qt,cS as Jt,cT as es,a7 as Le,cU as ts,bZ as dt,c4 as ss,af as Rt,ag as ns,cV as as,bL as rs,a6 as is,ac as ls,ab as os,Q as cs,aR as ms,aS as ds,ad as us,aA as hs,cW as Ke,aj as xs,cX as ut,as as ps,aa as fs,cY as gs}from"./index-CmCiA9Mb.js";import{L as Ee}from"./layers--H4kcuJ3.js";import{u as lt,h as ys,r as ot}from"./consumer-registry-DpDsW5u2.js";import{e as bs}from"./easing-Br3uSuFo.js";import{C as Ye}from"./compass-2xuknm7N.js";import{T as js,M as vs}from"./MqttModeBadge-BJg6amfg.js";import{C as be,P as Ns,a as ks,B as ws}from"./PageLayout-Cy1L4zCJ.js";import{A as Ze,D as ze}from"./DataValue-5OeA-9cY.js";import{C as Ss}from"./CollisionExplorerModal-BCPa_URl.js";import{H as ht}from"./hash-CxZ9Dlpp.js";import{L as We}from"./LightSparkline-Ljld28zz.js";import{A as Ms}from"./activity-DsMN7cur.js";import{c as Cs,a as As,A as _s}from"./AnalyzerFilterPanel-CTBU44Nf.js";import{useResolveSource as Rs}from"./usePipelineStore-BaWhVpyW.js";import{R as Ae,C as Ie}from"./Grid-FqRi0NO0.js";import{S as Ts}from"./settings-2-nbtzfNBl.js";import{N as Ls}from"./network-DanlveI7.js";import"./chevron-right-C91OWbjn.js";import"./map-pin-fLzYsBy8.js";import"./index-Dt-sD4KR.js";import"./index-otmcOBoI.js";import"./maplibre-gl-BzYo35Xe.js";import"./BasemapLayer-CcR6yjqw.js";import"./share-2-BZBogpYU.js";import"./node-types-CZU1TYyP.js";import"./circle-question-mark-CwqXs51O.js";import"./funnel-CYg19pUX.js";import"./search-D71Nuk6u.js";/**
var Ft=Object.defineProperty;var Ht=(t,n,s)=>n in t?Ft(t,n,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[n]=s;var ke=(t,n,s)=>Ht(t,typeof n!="symbol"?n+"":n,s);import{e as Oe,r as l,j as e,G as Ve,c as mt,P as At,cG as _t,cH as qe,w as De,cI as Bt,V as Pe,cJ as $t,co as Re,cK as zt,cL as Wt,x as Ut,at as Gt,cM as Vt,cN as qt,cO as Xt,cP as Kt,cQ as Yt,cc as Zt,cR as Xe,cf as Qt,cS as Jt,cT as es,a7 as Le,cU as ts,bZ as dt,c4 as ss,af as Rt,ag as ns,cV as as,bL as rs,a6 as is,ac as ls,ab as os,Q as cs,aR as ms,aS as ds,ad as us,aA as hs,cW as Ke,aj as xs,cX as ut,as as ps,aa as fs,cY as gs}from"./index-3pqtXusJ.js";import{L as Ee}from"./layers-DICWZKki.js";import{u as lt,h as ys,r as ot}from"./consumer-registry-B0iel_sz.js";import{e as bs}from"./easing-BCMe6oiu.js";import{C as Ye}from"./compass-Sw8fpk2C.js";import{T as js,M as vs}from"./MqttModeBadge-B0mWLOQz.js";import{C as be,P as Ns,a as ks,B as ws}from"./PageLayout-ClkXnw1C.js";import{A as Ze,D as ze}from"./DataValue-DVgXdCVn.js";import{C as Ss}from"./CollisionExplorerModal-CArFuY5_.js";import{H as ht}from"./hash-B2aVJVUU.js";import{L as We}from"./LightSparkline-l7vYrUWe.js";import{A as Ms}from"./activity-GpEAZFnq.js";import{c as Cs,a as As,A as _s}from"./AnalyzerFilterPanel-Bl5A_Wx0.js";import{useResolveSource as Rs}from"./usePipelineStore-C5V-H8E9.js";import{R as Ae,C as Ie}from"./Grid-BjR70VWU.js";import{S as Ts}from"./settings-2-Ctv_JK7q.js";import{N as Ls}from"./network-BxEEcag8.js";import"./chevron-right-SYOv1A3t.js";import"./map-pin-Brnhj7us.js";import"./index-BVGwxkt0.js";import"./index-C3m1aKix.js";import"./maplibre-gl-B4T1ie9I.js";import"./BasemapLayer-9gai5sCQ.js";import"./share-2-CVe7X33l.js";import"./node-types-BCSSICgK.js";import"./circle-question-mark-CRBJiEZi.js";import"./funnel-5qtSMyK6.js";import"./search-DyiSv6bM.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
import{e as ee,aK as A,O as B,r as l,L as J,j as e,dQ as z,c as F,bZ as se,a7 as E,dR as te,dS as re,dT as ne,dU as ae,cG as oe,B as le,dV as ce,dW as ie,dX as G}from"./index-CmCiA9Mb.js";import{C as P,P as de,a as me,B as ue}from"./PageLayout-Cy1L4zCJ.js";import{A as xe}from"./arrow-up-DcspSYiB.js";import{N as fe}from"./network-DanlveI7.js";import{A as he}from"./arrow-down-CkWBdRYx.js";import{T as pe}from"./thermometer-J9uy1_kn.js";import{A as D}from"./activity-DsMN7cur.js";import{C as ge}from"./cpu-k4ADDv2q.js";import{R as H,C as $}from"./Grid-FqRi0NO0.js";/**
import{e as ee,aK as A,O as B,r as l,L as J,j as e,dQ as z,c as F,bZ as se,a7 as E,dR as te,dS as re,dT as ne,dU as ae,cG as oe,B as le,dV as ce,dW as ie,dX as G}from"./index-3pqtXusJ.js";import{C as P,P as de,a as me,B as ue}from"./PageLayout-ClkXnw1C.js";import{A as xe}from"./arrow-up-CfmP0Fib.js";import{N as fe}from"./network-BxEEcag8.js";import{A as he}from"./arrow-down-DXQLcYGB.js";import{T as pe}from"./thermometer-Cwrmqh0V.js";import{A as D}from"./activity-GpEAZFnq.js";import{C as ge}from"./cpu-Dlph-Nzj.js";import{R as H,C as $}from"./Grid-BjR70VWU.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
File diff suppressed because one or more lines are too long
@@ -1,4 +1,4 @@
import{e as Ae,r as p,gu as _e,gv as Ie,af as Be,ag as Ve,j as e,a7 as U,V as ye,dV as He,dK as qe,c as le,aF as We,Q as Oe,a6 as Ye,gw as Xe,O as $,co as z,v as ze,c8 as Ge,bZ as Je,H as me,Z,gx as Qe,L as xe}from"./index-CmCiA9Mb.js";import{C as Q,P as Ke,a as Ue,B as De}from"./PageLayout-Cy1L4zCJ.js";import{useResolveSource as Ze}from"./usePipelineStore-BaWhVpyW.js";import{C as et}from"./chevron-right-C91OWbjn.js";import{R as se,C as ae}from"./Grid-FqRi0NO0.js";import"./node-types-CZU1TYyP.js";/**
import{e as Ae,r as p,gu as _e,gv as Ie,af as Be,ag as Ve,j as e,a7 as U,V as ye,dV as He,dK as qe,c as le,aF as We,Q as Oe,a6 as Ye,gw as Xe,O as $,co as z,v as ze,c8 as Ge,bZ as Je,H as me,Z,gx as Qe,L as xe}from"./index-3pqtXusJ.js";import{C as Q,P as Ke,a as Ue,B as De}from"./PageLayout-ClkXnw1C.js";import{useResolveSource as Ze}from"./usePipelineStore-C5V-H8E9.js";import{C as et}from"./chevron-right-SYOv1A3t.js";import{R as se,C as ae}from"./Grid-BjR70VWU.js";import"./node-types-BCSSICgK.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
import{e as t}from"./index-CmCiA9Mb.js";/**
import{e as t}from"./index-3pqtXusJ.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
import{e}from"./index-CmCiA9Mb.js";/**
import{e}from"./index-3pqtXusJ.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
import{e as o}from"./index-CmCiA9Mb.js";/**
import{e as o}from"./index-3pqtXusJ.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
import{e as o}from"./index-CmCiA9Mb.js";/**
import{e as o}from"./index-3pqtXusJ.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
import{e as o}from"./index-CmCiA9Mb.js";/**
import{e as o}from"./index-3pqtXusJ.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
import{e as c}from"./index-CmCiA9Mb.js";/**
import{e as c}from"./index-3pqtXusJ.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
@@ -1 +1 @@
import{r as g,Z as d,O as l}from"./index-CmCiA9Mb.js";function p(e){const n=parseInt(e.slice(1,3),16)/255,t=parseInt(e.slice(3,5),16)/255,r=parseInt(e.slice(5,7),16)/255,o=Math.max(n,t,r),i=Math.min(n,t,r),a=(o+i)/2;if(o===i)return[0,0,a];const s=o-i,u=a>.5?s/(2-o-i):s/(o+i);let c=0;return o===n?c=((t-r)/s+(t<r?6:0))/6:o===t?c=((r-n)/s+2)/6:c=((n-t)/s+4)/6,[c,u,a]}function E(e,n,t){if(n===0)return`#${Math.round(t*255).toString(16).padStart(2,"0").repeat(3)}`;const r=(s,u,c)=>(c<0&&(c+=1),c>1&&(c-=1),c<1/6?s+(u-s)*6*c:c<1/2?u:c<2/3?s+(u-s)*(2/3-c)*6:s),o=t<.5?t*(1+n):t+n-t*n,i=2*t-o,a=s=>Math.round(s*255).toString(16).padStart(2,"0");return`#${a(r(i,o,e+1/3))}${a(r(i,o,e))}${a(r(i,o,e-1/3))}`}function S(e,n,t){let r=n[0]-e[0];return r>.5&&(r-=1),r<-.5&&(r+=1),[(e[0]+r*t+1)%1,e[1]+(n[1]-e[1])*t,e[2]+(n[2]-e[2])*t]}const x=[l.red,l.orange,l.amber,l.green,l.teal,l.cyan,l.blue,l.indigo,l.purple,l.pink],m=4,h=[];{const e=x.map(p);for(let n=0;n<e.length;n++){const t=(n+1)%e.length;for(let r=0;r<m;r++){const[o,i,a]=S(e[n],e[t],r/m);h.push(E(o,i,a))}}}function j(e){let n=0;for(let t=0;t<e.length;t++)n=e.charCodeAt(t)+((n<<5)-n);return h[Math.abs(n)%h.length]}const f=new RegExp("(?:\\p{Emoji_Presentation}|\\p{Emoji}\\uFE0F)","gu");function N(e){const n=e.trim();if(!n)return 0;const t=n.match(f);return!t||t.length===0||t.length>3||n.replace(f,"").replace(/[\u200D\uFE0F\s]/g,"").length>0?0:t.length}function C(e){const n=e.match(f);if(n&&n.length>0){const t=n[0],r=e.replace(f,"").trim();return{emoji:t,cleanName:r||e}}return{emoji:null,cleanName:e}}function y(e){const{cleanName:n}=C(e),t=n.split(/[\s-_]+/).filter(Boolean);if(t.length>=2){const o=Array.from(t[0])[0]||"",i=Array.from(t[1])[0]||"";return(o+i).toUpperCase()}return Array.from(n).slice(0,2).join("").toUpperCase()}function M(e){return new Date(e*1e3).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",hour12:!1})}function T(e,n){const t=/@\[([^\]]+)\]/g,r=[];let o=0,i;const a=n!=null&&n.isOutgoing?d[200]:l.blue,s=n==null?void 0:n.onMentionClick;for(;(i=t.exec(e))!==null;){i.index>o&&r.push(e.slice(o,i.index));const u=i[1];r.push(g.createElement(s?"button":"span",{key:i.index,className:s?"font-bold hover:underline underline-offset-2 cursor-pointer":"font-bold",style:{color:a},...s&&{type:"button",onClick:c=>{c.stopPropagation(),s(u)}}},u)),o=i.index+i[0].length}return o<e.length&&r.push(e.slice(o)),r.length>0?r:e}export{y as a,M as b,N as c,C as e,T as f,j as g};
import{r as g,Z as d,O as l}from"./index-3pqtXusJ.js";function p(e){const n=parseInt(e.slice(1,3),16)/255,t=parseInt(e.slice(3,5),16)/255,r=parseInt(e.slice(5,7),16)/255,o=Math.max(n,t,r),i=Math.min(n,t,r),a=(o+i)/2;if(o===i)return[0,0,a];const s=o-i,u=a>.5?s/(2-o-i):s/(o+i);let c=0;return o===n?c=((t-r)/s+(t<r?6:0))/6:o===t?c=((r-n)/s+2)/6:c=((n-t)/s+4)/6,[c,u,a]}function E(e,n,t){if(n===0)return`#${Math.round(t*255).toString(16).padStart(2,"0").repeat(3)}`;const r=(s,u,c)=>(c<0&&(c+=1),c>1&&(c-=1),c<1/6?s+(u-s)*6*c:c<1/2?u:c<2/3?s+(u-s)*(2/3-c)*6:s),o=t<.5?t*(1+n):t+n-t*n,i=2*t-o,a=s=>Math.round(s*255).toString(16).padStart(2,"0");return`#${a(r(i,o,e+1/3))}${a(r(i,o,e))}${a(r(i,o,e-1/3))}`}function S(e,n,t){let r=n[0]-e[0];return r>.5&&(r-=1),r<-.5&&(r+=1),[(e[0]+r*t+1)%1,e[1]+(n[1]-e[1])*t,e[2]+(n[2]-e[2])*t]}const x=[l.red,l.orange,l.amber,l.green,l.teal,l.cyan,l.blue,l.indigo,l.purple,l.pink],m=4,h=[];{const e=x.map(p);for(let n=0;n<e.length;n++){const t=(n+1)%e.length;for(let r=0;r<m;r++){const[o,i,a]=S(e[n],e[t],r/m);h.push(E(o,i,a))}}}function j(e){let n=0;for(let t=0;t<e.length;t++)n=e.charCodeAt(t)+((n<<5)-n);return h[Math.abs(n)%h.length]}const f=new RegExp("(?:\\p{Emoji_Presentation}|\\p{Emoji}\\uFE0F)","gu");function N(e){const n=e.trim();if(!n)return 0;const t=n.match(f);return!t||t.length===0||t.length>3||n.replace(f,"").replace(/[\u200D\uFE0F\s]/g,"").length>0?0:t.length}function C(e){const n=e.match(f);if(n&&n.length>0){const t=n[0],r=e.replace(f,"").trim();return{emoji:t,cleanName:r||e}}return{emoji:null,cleanName:e}}function y(e){const{cleanName:n}=C(e),t=n.split(/[\s-_]+/).filter(Boolean);if(t.length>=2){const o=Array.from(t[0])[0]||"",i=Array.from(t[1])[0]||"";return(o+i).toUpperCase()}return Array.from(n).slice(0,2).join("").toUpperCase()}function M(e){return new Date(e*1e3).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",hour12:!1})}function T(e,n){const t=/@\[([^\]]+)\]/g,r=[];let o=0,i;const a=n!=null&&n.isOutgoing?d[200]:l.blue,s=n==null?void 0:n.onMentionClick;for(;(i=t.exec(e))!==null;){i.index>o&&r.push(e.slice(o,i.index));const u=i[1];r.push(g.createElement(s?"button":"span",{key:i.index,className:s?"font-bold hover:underline underline-offset-2 cursor-pointer":"font-bold",style:{color:a},...s&&{type:"button",onClick:c=>{c.stopPropagation(),s(u)}}},u)),o=i.index+i[0].length}return o<e.length&&r.push(e.slice(o)),r.length>0?r:e}export{y as a,M as b,N as c,C as e,T as f,j as g};
@@ -1,4 +1,4 @@
import{e}from"./index-CmCiA9Mb.js";/**
import{e}from"./index-3pqtXusJ.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
import{e as o}from"./index-CmCiA9Mb.js";/**
import{e as o}from"./index-3pqtXusJ.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
File diff suppressed because one or more lines are too long
@@ -1,4 +1,4 @@
import{e}from"./index-CmCiA9Mb.js";/**
import{e}from"./index-3pqtXusJ.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
import{e as c}from"./index-CmCiA9Mb.js";/**
import{e as c}from"./index-3pqtXusJ.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
import{e as c}from"./index-CmCiA9Mb.js";/**
import{e as c}from"./index-3pqtXusJ.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
import{e as c}from"./index-CmCiA9Mb.js";/**
import{e as c}from"./index-3pqtXusJ.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
import{e as c}from"./index-CmCiA9Mb.js";/**
import{e as c}from"./index-3pqtXusJ.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
@@ -1 +1 @@
import{ax as n,r as i}from"./index-CmCiA9Mb.js";const p=t=>(t.type??t.payload_type)===n.ADVERT,l=t=>(t.type??t.payload_type)===n.TRACE,h=t=>(t.type??t.payload_type)===n.TXT_MSG,_=t=>(t.type??t.payload_type)===n.PATH,d=t=>(t.type??t.payload_type)===n.ACK,g=t=>{const e=t.type??t.payload_type;return e===n.GRP_TXT||e===n.GRP_DATA},m=t=>(t.path_length??(Array.isArray(t.original_path)?t.original_path.length:0))>0,A=t=>!!t.src_hash,T=t=>t.airtime_ms!=null,c=new Set,o=new Map;function a(t,e){return`${t}|${e}`}function u(t,e){const s=a(t,e);o.set(s,(o.get(s)??0)+1)}function y(t,e){const s=a(t,e),r=o.get(s)??0;r>1?o.set(s,r-1):o.delete(s)}function C(t){for(const e of t){const s=a(e.target,e.fn);c.has(s)||c.add(s)}}function P(t){i.useEffect(()=>{for(const e of t)u(e.target,e.fn);return()=>{for(const e of t)y(e.target,e.fn)}},[t])}export{m as a,A as b,h as c,d,p as e,l as f,_ as g,T as h,g as i,C as r,P as u};
import{ax as n,r as i}from"./index-3pqtXusJ.js";const p=t=>(t.type??t.payload_type)===n.ADVERT,l=t=>(t.type??t.payload_type)===n.TRACE,h=t=>(t.type??t.payload_type)===n.TXT_MSG,_=t=>(t.type??t.payload_type)===n.PATH,d=t=>(t.type??t.payload_type)===n.ACK,g=t=>{const e=t.type??t.payload_type;return e===n.GRP_TXT||e===n.GRP_DATA},m=t=>(t.path_length??(Array.isArray(t.original_path)?t.original_path.length:0))>0,A=t=>!!t.src_hash,T=t=>t.airtime_ms!=null,c=new Set,o=new Map;function a(t,e){return`${t}|${e}`}function u(t,e){const s=a(t,e);o.set(s,(o.get(s)??0)+1)}function y(t,e){const s=a(t,e),r=o.get(s)??0;r>1?o.set(s,r-1):o.delete(s)}function C(t){for(const e of t){const s=a(e.target,e.fn);c.has(s)||c.add(s)}}function P(t){i.useEffect(()=>{for(const e of t)u(e.target,e.fn);return()=>{for(const e of t)y(e.target,e.fn)}},[t])}export{m as a,A as b,h as c,d,p as e,l as f,_ as g,T as h,g as i,C as r,P as u};
@@ -1,4 +1,4 @@
import{e as h}from"./index-CmCiA9Mb.js";/**
import{e as h}from"./index-3pqtXusJ.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
import{e}from"./index-CmCiA9Mb.js";/**
import{e}from"./index-3pqtXusJ.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
@@ -1 +1 @@
import{gT as s}from"./index-CmCiA9Mb.js";const e=s(.65,0,.35,1),t=s(.33,1,.68,1),c=s(.33,.67,.67,1),u=s(.76,0,.24,1);export{t as a,e as b,c,u as e};
import{gT as s}from"./index-3pqtXusJ.js";const e=s(.65,0,.35,1),t=s(.33,1,.68,1),c=s(.33,.67,.67,1),u=s(.76,0,.24,1);export{t as a,e as b,c,u as e};
@@ -1 +1 @@
import{r as o,aU as p,d4 as v,gr as b,gs as $,dk as m,by as x}from"./index-CmCiA9Mb.js";function y(e,t){return e!==null&&t!==null&&typeof e=="object"&&typeof t=="object"&&"id"in e&&"id"in t?e.id===t.id:e===t}function D(e=y){return o.useCallback((t,n)=>{if(typeof e=="string"){let u=e;return(t==null?void 0:t[u])===(n==null?void 0:n[u])}return e(t,n)},[e])}var w=(e=>(e[e.Left=0]="Left",e[e.Right=2]="Right",e))(w||{});function M(e){let t=o.useRef(null),n=p(l=>{t.current=l.pointerType,!v(l.currentTarget)&&l.pointerType==="mouse"&&l.button===w.Left&&(l.preventDefault(),e(l))}),u=p(l=>{t.current!=="mouse"&&(v(l.currentTarget)||e(l))});return{onPointerDown:n,onClick:u}}var R=(e=>(e[e.Ignore=0]="Ignore",e[e.Select=1]="Select",e[e.Close=2]="Close",e))(R||{});const E={Ignore:{kind:0},Select:e=>({kind:1,target:e}),Close:{kind:2}},I=200,k=5;function N(e,{trigger:t,action:n,close:u,select:l}){let r=o.useRef(null),i=o.useRef(null),c=o.useRef(null);b(e&&t!==null,"pointerdown",s=>{$(s==null?void 0:s.target)&&t!=null&&t.contains(s.target)&&(i.current=s.x,c.current=s.y,r.current=s.timeStamp)}),b(e&&t!==null,"pointerup",s=>{var a,d;let f=r.current;if(f===null||(r.current=null,!m(s.target))||Math.abs(s.x-((a=i.current)!=null?a:s.x))<k&&Math.abs(s.y-((d=c.current)!=null?d:s.y))<k)return;let g=n(s);switch(g.kind){case 0:return;case 1:{s.timeStamp-f>I&&(l(g.target),u());break}case 2:{u();break}}},{capture:!0})}function h(e){return[e.screenX,e.screenY]}function j(){let e=o.useRef([-1,-1]);return{wasMoved(t){let n=h(t);return e.current[0]===n[0]&&e.current[1]===n[1]?!1:(e.current=n,!0)},update(t){e.current=h(t)}}}function L(e){throw new Error("Unexpected object: "+e)}var S=(e=>(e[e.First=0]="First",e[e.Previous=1]="Previous",e[e.Next=2]="Next",e[e.Last=3]="Last",e[e.Specific=4]="Specific",e[e.Nothing=5]="Nothing",e))(S||{});function P(e,t){let n=t.resolveItems();if(n.length<=0)return null;let u=t.resolveActiveIndex(),l=u??-1;switch(e.focus){case 0:{for(let r=0;r<n.length;++r)if(!t.resolveDisabled(n[r],r,n))return r;return u}case 1:{l===-1&&(l=n.length);for(let r=l-1;r>=0;--r)if(!t.resolveDisabled(n[r],r,n))return r;return u}case 2:{for(let r=l+1;r<n.length;++r)if(!t.resolveDisabled(n[r],r,n))return r;return u}case 3:{for(let r=n.length-1;r>=0;--r)if(!t.resolveDisabled(n[r],r,n))return r;return u}case 4:{for(let r=0;r<n.length;++r)if(t.resolveId(n[r],r,n)===e.id)return r;return u}case 5:return null;default:L(e)}}const z={Idle:{kind:"Idle"},Tracked:e=>({kind:"Tracked",position:e}),Moved:{kind:"Moved"}};function T(e){let t=e.getBoundingClientRect();return`${t.x},${t.y}`}function F(e,t,n){let u=x();if(t.kind==="Tracked"){let l=function(){r!==T(e)&&(u.dispose(),n())},{position:r}=t,i=new ResizeObserver(l);i.observe(e),u.add(()=>i.disconnect()),u.addEventListener(window,"scroll",l,{passive:!0}),u.addEventListener(window,"resize",l)}return()=>u.dispose()}export{N as L,E as S,z as a,T as b,S as c,D as d,P as f,w as g,F as p,M as s,j as u};
import{r as o,aU as p,d4 as v,gr as b,gs as $,dk as m,by as x}from"./index-3pqtXusJ.js";function y(e,t){return e!==null&&t!==null&&typeof e=="object"&&typeof t=="object"&&"id"in e&&"id"in t?e.id===t.id:e===t}function D(e=y){return o.useCallback((t,n)=>{if(typeof e=="string"){let u=e;return(t==null?void 0:t[u])===(n==null?void 0:n[u])}return e(t,n)},[e])}var w=(e=>(e[e.Left=0]="Left",e[e.Right=2]="Right",e))(w||{});function M(e){let t=o.useRef(null),n=p(l=>{t.current=l.pointerType,!v(l.currentTarget)&&l.pointerType==="mouse"&&l.button===w.Left&&(l.preventDefault(),e(l))}),u=p(l=>{t.current!=="mouse"&&(v(l.currentTarget)||e(l))});return{onPointerDown:n,onClick:u}}var R=(e=>(e[e.Ignore=0]="Ignore",e[e.Select=1]="Select",e[e.Close=2]="Close",e))(R||{});const E={Ignore:{kind:0},Select:e=>({kind:1,target:e}),Close:{kind:2}},I=200,k=5;function N(e,{trigger:t,action:n,close:u,select:l}){let r=o.useRef(null),i=o.useRef(null),c=o.useRef(null);b(e&&t!==null,"pointerdown",s=>{$(s==null?void 0:s.target)&&t!=null&&t.contains(s.target)&&(i.current=s.x,c.current=s.y,r.current=s.timeStamp)}),b(e&&t!==null,"pointerup",s=>{var a,d;let f=r.current;if(f===null||(r.current=null,!m(s.target))||Math.abs(s.x-((a=i.current)!=null?a:s.x))<k&&Math.abs(s.y-((d=c.current)!=null?d:s.y))<k)return;let g=n(s);switch(g.kind){case 0:return;case 1:{s.timeStamp-f>I&&(l(g.target),u());break}case 2:{u();break}}},{capture:!0})}function h(e){return[e.screenX,e.screenY]}function j(){let e=o.useRef([-1,-1]);return{wasMoved(t){let n=h(t);return e.current[0]===n[0]&&e.current[1]===n[1]?!1:(e.current=n,!0)},update(t){e.current=h(t)}}}function L(e){throw new Error("Unexpected object: "+e)}var S=(e=>(e[e.First=0]="First",e[e.Previous=1]="Previous",e[e.Next=2]="Next",e[e.Last=3]="Last",e[e.Specific=4]="Specific",e[e.Nothing=5]="Nothing",e))(S||{});function P(e,t){let n=t.resolveItems();if(n.length<=0)return null;let u=t.resolveActiveIndex(),l=u??-1;switch(e.focus){case 0:{for(let r=0;r<n.length;++r)if(!t.resolveDisabled(n[r],r,n))return r;return u}case 1:{l===-1&&(l=n.length);for(let r=l-1;r>=0;--r)if(!t.resolveDisabled(n[r],r,n))return r;return u}case 2:{for(let r=l+1;r<n.length;++r)if(!t.resolveDisabled(n[r],r,n))return r;return u}case 3:{for(let r=n.length-1;r>=0;--r)if(!t.resolveDisabled(n[r],r,n))return r;return u}case 4:{for(let r=0;r<n.length;++r)if(t.resolveId(n[r],r,n)===e.id)return r;return u}case 5:return null;default:L(e)}}const z={Idle:{kind:"Idle"},Tracked:e=>({kind:"Tracked",position:e}),Moved:{kind:"Moved"}};function T(e){let t=e.getBoundingClientRect();return`${t.x},${t.y}`}function F(e,t,n){let u=x();if(t.kind==="Tracked"){let l=function(){r!==T(e)&&(u.dispose(),n())},{position:r}=t,i=new ResizeObserver(l);i.observe(e),u.add(()=>i.disconnect()),u.addEventListener(window,"scroll",l,{passive:!0}),u.addEventListener(window,"resize",l)}return()=>u.dispose()}export{N as L,E as S,z as a,T as b,S as c,D as d,P as f,w as g,F as p,M as s,j as u};
@@ -1 +1 @@
import{j as a,dM as l,c as i,b3 as n,fH as c}from"./index-CmCiA9Mb.js";function x({disabled:e,className:s,children:t}){return a.jsx(l,{disabled:e,className:i("flex flex-col gap-2",s),children:t})}function m({required:e,className:s,children:t,...r}){return a.jsxs(n,{className:i("text-sm font-medium text-fg-primary select-none","data-[disabled]:opacity-50",r.title&&"cursor-help",s),...r,children:[t,e&&a.jsx("span",{className:"text-sys-red ml-0.5","aria-hidden":"true",children:"*"})]})}function o({className:e,children:s,...t}){return a.jsx(c,{className:i("text-sm text-fg-muted","data-[disabled]:opacity-50",e),...t,children:s})}export{o as D,x as F,m as L};
import{j as a,dM as l,c as i,b3 as n,fH as c}from"./index-3pqtXusJ.js";function x({disabled:e,className:s,children:t}){return a.jsx(l,{disabled:e,className:i("flex flex-col gap-2",s),children:t})}function m({required:e,className:s,children:t,...r}){return a.jsxs(n,{className:i("text-sm font-medium text-fg-primary select-none","data-[disabled]:opacity-50",r.title&&"cursor-help",s),...r,children:[t,e&&a.jsx("span",{className:"text-sys-red ml-0.5","aria-hidden":"true",children:"*"})]})}function o({className:e,children:s,...t}){return a.jsx(c,{className:i("text-sm text-fg-muted","data-[disabled]:opacity-50",e),...t,children:s})}export{o as D,x as F,m as L};
@@ -1 +1 @@
import{bv as l,r as o}from"./index-CmCiA9Mb.js";function a({children:t,freeze:e},n){let r=f(e,t);return o.isValidElement(r)?o.cloneElement(r,{ref:n}):l.createElement(l.Fragment,null,r)}const s=l.forwardRef(a);function f(t,e){let[n,r]=o.useState(e);return!t&&n!==e&&r(e),t?n:e}export{s,f as u};
import{bv as l,r as o}from"./index-3pqtXusJ.js";function a({children:t,freeze:e},n){let r=f(e,t);return o.isValidElement(r)?o.cloneElement(r,{ref:n}):l.createElement(l.Fragment,null,r)}const s=l.forwardRef(a);function f(t,e){let[n,r]=o.useState(e);return!t&&n!==e&&r(e),t?n:e}export{s,f as u};
@@ -1,4 +1,4 @@
import{e}from"./index-CmCiA9Mb.js";/**
import{e}from"./index-3pqtXusJ.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
import{e as c}from"./index-CmCiA9Mb.js";/**
import{e as c}from"./index-3pqtXusJ.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
import{e}from"./index-CmCiA9Mb.js";/**
import{e}from"./index-3pqtXusJ.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,4 +1,4 @@
import{e}from"./index-CmCiA9Mb.js";/**
import{e}from"./index-3pqtXusJ.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
import{e as a}from"./index-CmCiA9Mb.js";/**
import{e as a}from"./index-3pqtXusJ.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
@@ -1 +1 @@
import{gN as L,dx as y,bQ as A,O as g}from"./index-CmCiA9Mb.js";function R(r){if(Array.isArray(r))return r;if(typeof r=="string"&&r.startsWith("["))try{const s=JSON.parse(r);return Array.isArray(s)?s:[]}catch{return[]}return[]}function C(r,s,x){const M=L(Array.from(s,t=>[t,t])),c=new Map,i=new Map;for(const t of r){const p=t.route??t.route_type;if(!y(p))continue;const a=R(t.original_path);if(a.length===0)continue;const o=a.map(e=>e.toUpperCase());if(!t.transmitted&&o.length>=2){const e=o[o.length-2];if(e){const n=M.get(e);n&&i.set(n,(i.get(n)??0)+1)}}if(o.some(e=>A(e,x)))for(const e of o){if(e===x)continue;const n=M.get(e);n&&c.set(n,(c.get(n)??0)+1)}}let u=0,f=0;for(const t of s)u=Math.max(u,c.get(t)??0),f=Math.max(f,i.get(t)??0);const S=new Map;let h=0,m=0,d=0;for(const t of s){const p=c.get(t)??0,a=i.get(t)??0,o=u>0?Math.round(p/u*100):0,l=f>0?Math.round(a/f*100):0,e=o+l;S.set(t,{hash:t,listenerCount:p,loudCount:a,listenerScore:o,loudScore:l,blendedScore:e}),h=Math.max(h,o),m=Math.max(m,l),d=Math.max(d,e)}return{scores:S,maxListenerScore:h,maxLoudScore:m,maxBlendedScore:d}}const O={YELLOW:g.amber,GREEN:g.green,RED:g.red,GRAY:"#505050"};export{O as L,C as c};
import{gN as L,dx as y,bQ as A,O as g}from"./index-3pqtXusJ.js";function R(r){if(Array.isArray(r))return r;if(typeof r=="string"&&r.startsWith("["))try{const s=JSON.parse(r);return Array.isArray(s)?s:[]}catch{return[]}return[]}function C(r,s,x){const M=L(Array.from(s,t=>[t,t])),c=new Map,i=new Map;for(const t of r){const p=t.route??t.route_type;if(!y(p))continue;const a=R(t.original_path);if(a.length===0)continue;const o=a.map(e=>e.toUpperCase());if(!t.transmitted&&o.length>=2){const e=o[o.length-2];if(e){const n=M.get(e);n&&i.set(n,(i.get(n)??0)+1)}}if(o.some(e=>A(e,x)))for(const e of o){if(e===x)continue;const n=M.get(e);n&&c.set(n,(c.get(n)??0)+1)}}let u=0,f=0;for(const t of s)u=Math.max(u,c.get(t)??0),f=Math.max(f,i.get(t)??0);const S=new Map;let h=0,m=0,d=0;for(const t of s){const p=c.get(t)??0,a=i.get(t)??0,o=u>0?Math.round(p/u*100):0,l=f>0?Math.round(a/f*100):0,e=o+l;S.set(t,{hash:t,listenerCount:p,loudCount:a,listenerScore:o,loudScore:l,blendedScore:e}),h=Math.max(h,o),m=Math.max(m,l),d=Math.max(d,e)}return{scores:S,maxListenerScore:h,maxLoudScore:m,maxBlendedScore:d}}const O={YELLOW:g.amber,GREEN:g.green,RED:g.red,GRAY:"#505050"};export{O as L,C as c};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,4 +1,4 @@
import{e as a}from"./index-CmCiA9Mb.js";/**
import{e as a}from"./index-3pqtXusJ.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,4 +1,4 @@
import{e as T,q as j,dv as S}from"./index-CmCiA9Mb.js";/**
import{e as T,q as j,dv as S}from"./index-3pqtXusJ.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
import{e}from"./index-CmCiA9Mb.js";/**
import{e}from"./index-3pqtXusJ.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
import{e}from"./index-CmCiA9Mb.js";/**
import{e}from"./index-3pqtXusJ.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
import{e}from"./index-CmCiA9Mb.js";/**
import{e}from"./index-3pqtXusJ.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
@@ -1 +1 @@
import{co as a}from"./index-CmCiA9Mb.js";function o(r){var t;const e=((t=r.contact_type)==null?void 0:t.toLowerCase())??"";return e==="room server"||e==="room_server"||e==="room"||e==="server"?{type:"room_server",isRepeater:r.is_repeater===!0,isCompanion:!1,isRoomServer:!0,isClient:!1,label:"Room Server",badgeText:"ROOM"}:e==="companion"||e==="chat node"||e==="chat_node"||e==="chat"?{type:"companion",isRepeater:!1,isCompanion:!0,isRoomServer:!1,isClient:!1,label:"Companion",badgeText:"COMP"}:e==="client"||e==="cli"?{type:"companion",isRepeater:!1,isCompanion:!1,isRoomServer:!1,isClient:!0,label:"Client",badgeText:"CLI"}:e==="repeater"||e==="rep"?{type:"repeater",isRepeater:!0,isCompanion:!1,isRoomServer:!1,isClient:!1,label:"Repeater",badgeText:"RPT"}:r.is_repeater===!0?{type:"repeater",isRepeater:!0,isCompanion:!1,isRoomServer:!1,isClient:!1,label:"Repeater",badgeText:"RPT"}:{type:"unknown",isRepeater:!1,isCompanion:!1,isRoomServer:!1,isClient:!1,label:"Unknown",badgeText:""}}function n(r){switch(r){case a.GRP_TXT:case a.TXT_MSG:case a.REQ:case a.ANON_REQ:return"companion";case a.TRACE:case a.PATH:return"repeater";case a.GRP_DATA:return"room_server";default:return"unknown"}}function i(r){switch(r){case 1:return"companion";case 2:return"repeater";case 3:return"room_server";default:return"unknown"}}export{o as c,n as i,i as m};
import{co as a}from"./index-3pqtXusJ.js";function o(r){var t;const e=((t=r.contact_type)==null?void 0:t.toLowerCase())??"";return e==="room server"||e==="room_server"||e==="room"||e==="server"?{type:"room_server",isRepeater:r.is_repeater===!0,isCompanion:!1,isRoomServer:!0,isClient:!1,label:"Room Server",badgeText:"ROOM"}:e==="companion"||e==="chat node"||e==="chat_node"||e==="chat"?{type:"companion",isRepeater:!1,isCompanion:!0,isRoomServer:!1,isClient:!1,label:"Companion",badgeText:"COMP"}:e==="client"||e==="cli"?{type:"companion",isRepeater:!1,isCompanion:!1,isRoomServer:!1,isClient:!0,label:"Client",badgeText:"CLI"}:e==="repeater"||e==="rep"?{type:"repeater",isRepeater:!0,isCompanion:!1,isRoomServer:!1,isClient:!1,label:"Repeater",badgeText:"RPT"}:r.is_repeater===!0?{type:"repeater",isRepeater:!0,isCompanion:!1,isRoomServer:!1,isClient:!1,label:"Repeater",badgeText:"RPT"}:{type:"unknown",isRepeater:!1,isCompanion:!1,isRoomServer:!1,isClient:!1,label:"Unknown",badgeText:""}}function n(r){switch(r){case a.GRP_TXT:case a.TXT_MSG:case a.REQ:case a.ANON_REQ:return"companion";case a.TRACE:case a.PATH:return"repeater";case a.GRP_DATA:return"room_server";default:return"unknown"}}function i(r){switch(r){case 1:return"companion";case 2:return"repeater";case 3:return"room_server";default:return"unknown"}}export{o as c,n as i,i as m};
@@ -1 +1 @@
import{ax as o,c9 as d,fj as s,fi as c,hi as y,hj as f,hk as p}from"./index-CmCiA9Mb.js";function h(e){const a=e.payload_type??e.type;if(a!==o.TRACE||!e.payload)return null;try{const t=d(e.payload);let n=[];if(e._traceSnrPath!=null&&e._traceSnrPath.length>0)n=e._traceSnrPath;else if(e.raw_packet){const r=s(e.raw_packet,a);r&&r.length>0&&(n=r)}return c(t,n)}catch{return null}}function N(e){if((e.payload_type??e.type)!==o.ADVERT||!e.payload)return null;try{const t=d(e.payload),n=y(t);if(!n)return null;const r=n.publicKey.slice(0,2).toUpperCase(),l={...n,prefix:r};let i=null;return n.latitude&&n.longitude&&(i={latitude:n.latitude,longitude:n.longitude,name:n.name||`Node ${r||"??"}`,prefix:r,publicKey:n.publicKey}),{data:l,sourceNode:i}}catch{return null}}function u(e){if(!e)return null;const a=e.trim(),t=/(-?\d+\.?\d*)\s*[,\s]\s*(-?\d+\.?\d*)/,n=a.match(t);if(!n)return null;const r=parseFloat(n[1]),l=parseFloat(n[2]);return isNaN(r)||isNaN(l)||r<-90||r>90||l<-180||l>180||r===0&&l===0?null:{lat:r,lon:l}}function T(e){var t,n;if(!e.decrypted||!((t=e.channelName)!=null&&t.toLowerCase().includes("wardrive")))return null;const a=u(e.text);return a?{latitude:a.lat,longitude:a.lon,name:e.senderName||"Wardrive Ping",prefix:((n=e.senderName)==null?void 0:n.slice(0,2).toUpperCase())||"WD",nodeType:"wardrive"}:null}function C(e,a){const t=e.payload_type??e.type;if(t===o.TRACE){const n=h(e);if(n)return{kind:"trace",data:n,snrValues:n.snrValues}}if(t===o.ADVERT){const n=N(e);if(n)return{kind:"advert",data:n.data,sourceNode:n.sourceNode}}if(t===o.GRP_TXT&&a){const n=u(a.text),r=T(a);return{kind:"grp_txt",decoded:a,wardriveCoords:n,wardriveSourceNode:r}}if(t===o.CONTROL){const n=_(e);if(n)return{kind:"control",data:n}}if(t===o.ANON_REQ){const n=R(e);if(n)return{kind:"anon_req",data:n}}return{kind:"generic"}}function _(e){if((e.payload_type??e.type)!==o.CONTROL||!e.payload)return null;try{const t=d(e.payload);return f(t)}catch{return null}}function R(e){if((e.payload_type??e.type)!==o.ANON_REQ||!e.payload)return null;try{const t=d(e.payload),n=p(t);if(!n)return null;const r=n.senderPublicKey.slice(0,2).toUpperCase();return{...n,prefix:r}}catch{return null}}export{h as a,C as d,u as p};
import{ax as o,c9 as d,fj as s,fi as c,hi as y,hj as f,hk as p}from"./index-3pqtXusJ.js";function h(e){const a=e.payload_type??e.type;if(a!==o.TRACE||!e.payload)return null;try{const t=d(e.payload);let n=[];if(e._traceSnrPath!=null&&e._traceSnrPath.length>0)n=e._traceSnrPath;else if(e.raw_packet){const r=s(e.raw_packet,a);r&&r.length>0&&(n=r)}return c(t,n)}catch{return null}}function N(e){if((e.payload_type??e.type)!==o.ADVERT||!e.payload)return null;try{const t=d(e.payload),n=y(t);if(!n)return null;const r=n.publicKey.slice(0,2).toUpperCase(),l={...n,prefix:r};let i=null;return n.latitude&&n.longitude&&(i={latitude:n.latitude,longitude:n.longitude,name:n.name||`Node ${r||"??"}`,prefix:r,publicKey:n.publicKey}),{data:l,sourceNode:i}}catch{return null}}function u(e){if(!e)return null;const a=e.trim(),t=/(-?\d+\.?\d*)\s*[,\s]\s*(-?\d+\.?\d*)/,n=a.match(t);if(!n)return null;const r=parseFloat(n[1]),l=parseFloat(n[2]);return isNaN(r)||isNaN(l)||r<-90||r>90||l<-180||l>180||r===0&&l===0?null:{lat:r,lon:l}}function T(e){var t,n;if(!e.decrypted||!((t=e.channelName)!=null&&t.toLowerCase().includes("wardrive")))return null;const a=u(e.text);return a?{latitude:a.lat,longitude:a.lon,name:e.senderName||"Wardrive Ping",prefix:((n=e.senderName)==null?void 0:n.slice(0,2).toUpperCase())||"WD",nodeType:"wardrive"}:null}function C(e,a){const t=e.payload_type??e.type;if(t===o.TRACE){const n=h(e);if(n)return{kind:"trace",data:n,snrValues:n.snrValues}}if(t===o.ADVERT){const n=N(e);if(n)return{kind:"advert",data:n.data,sourceNode:n.sourceNode}}if(t===o.GRP_TXT&&a){const n=u(a.text),r=T(a);return{kind:"grp_txt",decoded:a,wardriveCoords:n,wardriveSourceNode:r}}if(t===o.CONTROL){const n=_(e);if(n)return{kind:"control",data:n}}if(t===o.ANON_REQ){const n=R(e);if(n)return{kind:"anon_req",data:n}}return{kind:"generic"}}function _(e){if((e.payload_type??e.type)!==o.CONTROL||!e.payload)return null;try{const t=d(e.payload);return f(t)}catch{return null}}function R(e){if((e.payload_type??e.type)!==o.ANON_REQ||!e.payload)return null;try{const t=d(e.payload),n=p(t);if(!n)return null;const r=n.senderPublicKey.slice(0,2).toUpperCase();return{...n,prefix:r}}catch{return null}}export{h as a,C as d,u as p};
@@ -1,4 +1,4 @@
import{e as a}from"./index-CmCiA9Mb.js";/**
import{e as a}from"./index-3pqtXusJ.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
import{e}from"./index-CmCiA9Mb.js";/**
import{e}from"./index-3pqtXusJ.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
File diff suppressed because one or more lines are too long
@@ -1,4 +1,4 @@
import{e}from"./index-CmCiA9Mb.js";/**
import{e}from"./index-3pqtXusJ.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
import{e}from"./index-CmCiA9Mb.js";/**
import{e}from"./index-3pqtXusJ.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
import{e as c}from"./index-CmCiA9Mb.js";/**
import{e as c}from"./index-3pqtXusJ.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
import{e as c}from"./index-CmCiA9Mb.js";/**
import{e as c}from"./index-3pqtXusJ.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
import{e as c}from"./index-CmCiA9Mb.js";/**
import{e as c}from"./index-3pqtXusJ.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
import{e as c}from"./index-CmCiA9Mb.js";/**
import{e as c}from"./index-3pqtXusJ.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
import{e}from"./index-CmCiA9Mb.js";/**
import{e}from"./index-3pqtXusJ.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
import{e}from"./index-CmCiA9Mb.js";/**
import{e}from"./index-3pqtXusJ.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
@@ -1 +1 @@
import{ew as n}from"./index-CmCiA9Mb.js";async function r(){return n("/api/transport_keys")}async function s(o){return n("/api/transport_keys",{method:"POST",body:JSON.stringify(o)})}async function a(o,t){return n(`/api/transport_key/${o}`,{method:"PUT",body:JSON.stringify(t)})}async function c(o){return n(`/api/transport_key/${o}`,{method:"DELETE"})}async function i(){return n("/api/unscoped_flood_policy")}async function y(o){return n("/api/unscoped_flood_policy",{method:"POST",body:JSON.stringify({unscoped_flood_allow:o})})}async function p(o){return n("/api/restart_service",{method:"POST",body:"{}",signal:o})}async function d(){return n("/api/check_pymc_console")}export{i as a,s as b,d as c,c as d,r as g,p as r,y as s,a as u};
import{ew as n}from"./index-3pqtXusJ.js";async function r(){return n("/api/transport_keys")}async function s(o){return n("/api/transport_keys",{method:"POST",body:JSON.stringify(o)})}async function a(o,t){return n(`/api/transport_key/${o}`,{method:"PUT",body:JSON.stringify(t)})}async function c(o){return n(`/api/transport_key/${o}`,{method:"DELETE"})}async function i(){return n("/api/unscoped_flood_policy")}async function y(o){return n("/api/unscoped_flood_policy",{method:"POST",body:JSON.stringify({unscoped_flood_allow:o})})}async function p(o){return n("/api/restart_service",{method:"POST",body:"{}",signal:o})}async function d(){return n("/api/check_pymc_console")}export{i as a,s as b,d as c,c as d,r as g,p as r,y as s,a as u};
@@ -1,4 +1,4 @@
import{e as c}from"./index-CmCiA9Mb.js";/**
import{e as c}from"./index-3pqtXusJ.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
import{e}from"./index-CmCiA9Mb.js";/**
import{e}from"./index-3pqtXusJ.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
import{e as a}from"./index-CmCiA9Mb.js";/**
import{e as a}from"./index-3pqtXusJ.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
@@ -1 +1 @@
import{bj as c,r as o,aU as s}from"./index-CmCiA9Mb.js";let a=/([\u2700-\u27BF]|[\uE000-\uF8FF]|\uD83C[\uDC00-\uDFFF]|\uD83D[\uDC00-\uDFFF]|[\u2011-\u26FF]|\uD83E[\uDD10-\uDDFF])/g;function f(r){var u,n;let e=(u=r.innerText)!=null?u:"",l=r.cloneNode(!0);if(!c(l))return e;let t=!1;for(let F of l.querySelectorAll('[hidden],[aria-hidden],[role="img"]'))F.remove(),t=!0;let i=t?(n=l.innerText)!=null?n:"":e;return a.test(i)&&(i=i.replace(a,"")),i}function m(r){let u=r.getAttribute("aria-label");if(typeof u=="string")return u.trim();let n=r.getAttribute("aria-labelledby");if(n){let e=n.split(" ").map(l=>{let t=document.getElementById(l);if(t){let i=t.getAttribute("aria-label");return typeof i=="string"?i.trim():f(t).trim()}return null}).filter(Boolean);if(e.length>0)return e.join(", ")}return f(r).trim()}function g(r){let u=o.useRef(""),n=o.useRef("");return s(()=>{let e=r.current;if(!e)return"";let l=e.innerText;if(u.current===l)return n.current;let t=m(e).trim().toLowerCase();return u.current=l,n.current=t,t})}export{g as s};
import{bj as c,r as o,aU as s}from"./index-3pqtXusJ.js";let a=/([\u2700-\u27BF]|[\uE000-\uF8FF]|\uD83C[\uDC00-\uDFFF]|\uD83D[\uDC00-\uDFFF]|[\u2011-\u26FF]|\uD83E[\uDD10-\uDDFF])/g;function f(r){var u,n;let e=(u=r.innerText)!=null?u:"",l=r.cloneNode(!0);if(!c(l))return e;let t=!1;for(let F of l.querySelectorAll('[hidden],[aria-hidden],[role="img"]'))F.remove(),t=!0;let i=t?(n=l.innerText)!=null?n:"":e;return a.test(i)&&(i=i.replace(a,"")),i}function m(r){let u=r.getAttribute("aria-label");if(typeof u=="string")return u.trim();let n=r.getAttribute("aria-labelledby");if(n){let e=n.split(" ").map(l=>{let t=document.getElementById(l);if(t){let i=t.getAttribute("aria-label");return typeof i=="string"?i.trim():f(t).trim()}return null}).filter(Boolean);if(e.length>0)return e.join(", ")}return f(r).trim()}function g(r){let u=o.useRef(""),n=o.useRef("");return s(()=>{let e=r.current;if(!e)return"";let l=e.innerText;if(u.current===l)return n.current;let t=m(e).trim().toLowerCase();return u.current=l,n.current=t,t})}export{g as s};
@@ -1 +1 @@
import{r as a,bt as d,d1 as E}from"./index-CmCiA9Mb.js";function x(o,{container:e,accept:r,walk:t}){let n=a.useRef(r),c=a.useRef(t);a.useEffect(()=>{n.current=r,c.current=t},[r,t]),d(()=>{if(!e||!o)return;let u=E(e);if(!u)return;let f=n.current,l=c.current,i=Object.assign(p=>f(p),{acceptNode:f}),s=u.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,i,!1);for(;s.nextNode();)l(s.currentNode)},[e,o,n,c])}export{x as F};
import{r as a,bt as d,d1 as E}from"./index-3pqtXusJ.js";function x(o,{container:e,accept:r,walk:t}){let n=a.useRef(r),c=a.useRef(t);a.useEffect(()=>{n.current=r,c.current=t},[r,t]),d(()=>{if(!e||!o)return;let u=E(e);if(!u)return;let f=n.current,l=c.current,i=Object.assign(p=>f(p),{acceptNode:f}),s=u.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,i,!1);for(;s.nextNode();)l(s.currentNode)},[e,o,n,c])}export{x as F};
@@ -1,4 +1,4 @@
import{e as L,r as y,j as I,c_ as E,t as D}from"./index-CmCiA9Mb.js";import{A as H}from"./index-Dt-sD4KR.js";/**
import{e as L,r as y,j as I,c_ as E,t as D}from"./index-3pqtXusJ.js";import{A as H}from"./index-BVGwxkt0.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
import{t as A,r as S}from"./index-CmCiA9Mb.js";import{p as T}from"./payload-detail-DU_tG1eu.js";function E(t){const r=[];for(const n of t){if(n.is_outgoing)continue;const o=T(n.text);o&&r.push({lat:o.lat,lon:o.lon,timestampS:n.timestamp,senderName:n.sender_name??"Unknown",pathHops:n.path_hops,pathSnr:n.path_snr,pathRssi:n.path_rssi,msgSnr:n.msg_snr})}return r.sort((n,o)=>n.timestampS-o.timestampS),r}function v(t,r){if(t.length===0)return null;if(r<=t[0].timestampS)return{lo:0,hi:0,t:0};if(r>=t[t.length-1].timestampS){const i=t.length-1;return{lo:i,hi:i,t:0}}let n=0,o=t.length-1;for(;n<o-1;){const i=n+o>>1;t[i].timestampS<=r?n=i:o=i}const e=t[o].timestampS-t[n].timestampS,a=e>0?(r-t[n].timestampS)/e:0;return{lo:n,hi:o,t:a}}function x(t,r,n,o,e){const a=e*e,i=a*e;return .5*(2*r+(-t+n)*e+(2*t-5*r+4*n-o)*a+(-t+3*r-3*n+o)*i)}function I(t,r,n,o){const e=Math.PI/180,a=(o-r)*e,i=Math.sin(a)*Math.cos(n*e),u=Math.cos(t*e)*Math.sin(n*e)-Math.sin(t*e)*Math.cos(n*e)*Math.cos(a);return(Math.atan2(i,u)*180/Math.PI+360)%360}function b(t,r){if(t.length===0)return null;const n=v(t,r);if(!n)return null;const{lo:o,hi:e,t:a}=n;if(o===e)return{lat:t[o].lat,lon:t[o].lon,bearing:null};const i=Math.max(0,o-1),u=o,h=e,g=Math.min(t.length-1,e+1),s=t[i],c=t[u],f=t[h],d=t[g];let m,p;i===u&&h===g?(m=c.lat+(f.lat-c.lat)*a,p=c.lon+(f.lon-c.lon)*a):(m=x(s.lat,c.lat,f.lat,d.lat,a),p=x(s.lon,c.lon,f.lon,d.lon,a));const P=I(c.lat,c.lon,f.lat,f.lon);return{lat:m,lon:p,bearing:P}}function $(t,r){const n=[];for(const e of t){if(e.timestampS>r)break;n.push([e.lon,e.lat])}const o=b(t,r);if(o&&n.length>0){const e=n[n.length-1];(Math.abs(e[0]-o.lon)>1e-7||Math.abs(e[1]-o.lat)>1e-7)&&n.push([o.lon,o.lat])}return n}function R(t,r){if(t.length===0)return null;if(t.length===1)return{lat:t[0].lat,lon:t[0].lon,bearing:null};const n=t.length-1,o=Math.max(0,Math.min(n,r)),e=Math.floor(o),a=Math.min(e+1,n),i=o-e;if(e===a)return{lat:t[e].lat,lon:t[e].lon,bearing:null};const u=Math.max(0,e-1),h=Math.min(n,a+1),g=t[u],s=t[e],c=t[a],f=t[h];let d,m;u===e&&a===h?(d=s.lat+(c.lat-s.lat)*i,m=s.lon+(c.lon-s.lon)*i):(d=x(g.lat,s.lat,c.lat,f.lat,i),m=x(g.lon,s.lon,c.lon,f.lon,i));const p=I(s.lat,s.lon,c.lat,c.lon);return{lat:d,lon:m,bearing:p}}function F(t,r){if(t.length===0)return[];const n=[],o=R(t,r);o&&n.push([o.lon,o.lat]);const e=Math.ceil(Math.max(0,r));for(let a=e;a<t.length;a++)n.push([t[a].lon,t[a].lat]);return n}function C(t){const r=Math.max(0,Math.round(t)),n=Math.floor(r/3600),o=Math.floor(r%3600/60),e=r%60;return n>0?`${n}:${String(o).padStart(2,"0")}:${String(e).padStart(2,"0")}`:`${o}:${String(e).padStart(2,"0")}`}const K=[2,5,10,20],M={isActive:!1,ownerKey:null,samples:[],isPlaying:!1,speed:5,currentIdx:0,currentTimeS:0,timeRange:{start:0,end:0}},l=A((t,r)=>({...M,startRewind:(n,o)=>{if(n.length<2){t({...M});return}const e=n.length-1,a={start:n[0].timestampS,end:n[e].timestampS};t({isActive:!0,ownerKey:o,samples:n,isPlaying:!0,speed:5,currentIdx:e,currentTimeS:a.end,timeRange:a})},togglePlay:()=>{var a;const{isPlaying:n,currentIdx:o,samples:e}=r();if(n)t({isPlaying:!1});else if(o<=0){const i=e.length-1;t({isPlaying:!0,currentIdx:i,currentTimeS:((a=e[i])==null?void 0:a.timestampS)??0})}else t({isPlaying:!0})},pause:()=>t({isPlaying:!1}),setSpeed:n=>t({speed:n}),seek:n=>{const{samples:o}=r();if(o.length<2)return;const e=o.length-1,a=Math.max(0,Math.min(e,n*e));t({currentIdx:a,currentTimeS:y(o,a)})},stopRewind:()=>t({...M}),tick:n=>{const{isPlaying:o,speed:e,currentIdx:a,samples:i}=r();if(!o||i.length<2)return;const u=e*(n/1e3),h=a-u;h<=0?t({currentIdx:0,currentTimeS:i[0].timestampS,isPlaying:!1}):t({currentIdx:h,currentTimeS:y(i,h)})}}));function y(t,r){if(t.length===0)return 0;const n=t.length-1,o=Math.max(0,Math.min(n,r)),e=Math.floor(o),a=Math.min(e+1,n);if(e===a)return t[e].timestampS;const i=o-e;return t[e].timestampS+i*(t[a].timestampS-t[e].timestampS)}const L=()=>l(t=>t.isActive),W=()=>l(t=>t.ownerKey),k=()=>l(t=>t.isPlaying),q=()=>l(t=>t.currentIdx),B=()=>l(t=>t.currentTimeS),D=()=>l(t=>t.speed),H=()=>l(t=>t.timeRange),N=()=>l(t=>t.samples);function j(){const{isActive:t,samples:r,currentIdx:n}=l.getState();return!t||r.length===0?null:R(r,n)}function O(){var e;const{isActive:t,samples:r,currentIdx:n}=l.getState();if(!t||r.length===0)return;const o=Math.round(Math.max(0,Math.min(r.length-1,n)));return(e=r[o])==null?void 0:e.pathHops}function U(){const t=k(),r=S.useRef(0),n=S.useRef(0);S.useEffect(()=>{if(!t){n.current=0;return}const o=l.getState().tick,e=a=>{if(n.current>0){const i=Math.min(a-n.current,100);o(i)}n.current=a,r.current=requestAnimationFrame(e)};return r.current=requestAnimationFrame(e),()=>{cancelAnimationFrame(r.current),n.current=0}},[t])}export{K as R,k as a,B as b,D as c,H as d,l as e,C as f,E as g,j as h,O as i,N as j,U as k,W as l,q as m,R as p,F as r,$ as t,L as u};
import{t as A,r as S}from"./index-3pqtXusJ.js";import{p as T}from"./payload-detail-D4ApVEb_.js";function E(t){const r=[];for(const n of t){if(n.is_outgoing)continue;const o=T(n.text);o&&r.push({lat:o.lat,lon:o.lon,timestampS:n.timestamp,senderName:n.sender_name??"Unknown",pathHops:n.path_hops,pathSnr:n.path_snr,pathRssi:n.path_rssi,msgSnr:n.msg_snr})}return r.sort((n,o)=>n.timestampS-o.timestampS),r}function v(t,r){if(t.length===0)return null;if(r<=t[0].timestampS)return{lo:0,hi:0,t:0};if(r>=t[t.length-1].timestampS){const i=t.length-1;return{lo:i,hi:i,t:0}}let n=0,o=t.length-1;for(;n<o-1;){const i=n+o>>1;t[i].timestampS<=r?n=i:o=i}const e=t[o].timestampS-t[n].timestampS,a=e>0?(r-t[n].timestampS)/e:0;return{lo:n,hi:o,t:a}}function x(t,r,n,o,e){const a=e*e,i=a*e;return .5*(2*r+(-t+n)*e+(2*t-5*r+4*n-o)*a+(-t+3*r-3*n+o)*i)}function I(t,r,n,o){const e=Math.PI/180,a=(o-r)*e,i=Math.sin(a)*Math.cos(n*e),u=Math.cos(t*e)*Math.sin(n*e)-Math.sin(t*e)*Math.cos(n*e)*Math.cos(a);return(Math.atan2(i,u)*180/Math.PI+360)%360}function b(t,r){if(t.length===0)return null;const n=v(t,r);if(!n)return null;const{lo:o,hi:e,t:a}=n;if(o===e)return{lat:t[o].lat,lon:t[o].lon,bearing:null};const i=Math.max(0,o-1),u=o,h=e,g=Math.min(t.length-1,e+1),s=t[i],c=t[u],f=t[h],d=t[g];let m,p;i===u&&h===g?(m=c.lat+(f.lat-c.lat)*a,p=c.lon+(f.lon-c.lon)*a):(m=x(s.lat,c.lat,f.lat,d.lat,a),p=x(s.lon,c.lon,f.lon,d.lon,a));const P=I(c.lat,c.lon,f.lat,f.lon);return{lat:m,lon:p,bearing:P}}function $(t,r){const n=[];for(const e of t){if(e.timestampS>r)break;n.push([e.lon,e.lat])}const o=b(t,r);if(o&&n.length>0){const e=n[n.length-1];(Math.abs(e[0]-o.lon)>1e-7||Math.abs(e[1]-o.lat)>1e-7)&&n.push([o.lon,o.lat])}return n}function R(t,r){if(t.length===0)return null;if(t.length===1)return{lat:t[0].lat,lon:t[0].lon,bearing:null};const n=t.length-1,o=Math.max(0,Math.min(n,r)),e=Math.floor(o),a=Math.min(e+1,n),i=o-e;if(e===a)return{lat:t[e].lat,lon:t[e].lon,bearing:null};const u=Math.max(0,e-1),h=Math.min(n,a+1),g=t[u],s=t[e],c=t[a],f=t[h];let d,m;u===e&&a===h?(d=s.lat+(c.lat-s.lat)*i,m=s.lon+(c.lon-s.lon)*i):(d=x(g.lat,s.lat,c.lat,f.lat,i),m=x(g.lon,s.lon,c.lon,f.lon,i));const p=I(s.lat,s.lon,c.lat,c.lon);return{lat:d,lon:m,bearing:p}}function F(t,r){if(t.length===0)return[];const n=[],o=R(t,r);o&&n.push([o.lon,o.lat]);const e=Math.ceil(Math.max(0,r));for(let a=e;a<t.length;a++)n.push([t[a].lon,t[a].lat]);return n}function C(t){const r=Math.max(0,Math.round(t)),n=Math.floor(r/3600),o=Math.floor(r%3600/60),e=r%60;return n>0?`${n}:${String(o).padStart(2,"0")}:${String(e).padStart(2,"0")}`:`${o}:${String(e).padStart(2,"0")}`}const K=[2,5,10,20],M={isActive:!1,ownerKey:null,samples:[],isPlaying:!1,speed:5,currentIdx:0,currentTimeS:0,timeRange:{start:0,end:0}},l=A((t,r)=>({...M,startRewind:(n,o)=>{if(n.length<2){t({...M});return}const e=n.length-1,a={start:n[0].timestampS,end:n[e].timestampS};t({isActive:!0,ownerKey:o,samples:n,isPlaying:!0,speed:5,currentIdx:e,currentTimeS:a.end,timeRange:a})},togglePlay:()=>{var a;const{isPlaying:n,currentIdx:o,samples:e}=r();if(n)t({isPlaying:!1});else if(o<=0){const i=e.length-1;t({isPlaying:!0,currentIdx:i,currentTimeS:((a=e[i])==null?void 0:a.timestampS)??0})}else t({isPlaying:!0})},pause:()=>t({isPlaying:!1}),setSpeed:n=>t({speed:n}),seek:n=>{const{samples:o}=r();if(o.length<2)return;const e=o.length-1,a=Math.max(0,Math.min(e,n*e));t({currentIdx:a,currentTimeS:y(o,a)})},stopRewind:()=>t({...M}),tick:n=>{const{isPlaying:o,speed:e,currentIdx:a,samples:i}=r();if(!o||i.length<2)return;const u=e*(n/1e3),h=a-u;h<=0?t({currentIdx:0,currentTimeS:i[0].timestampS,isPlaying:!1}):t({currentIdx:h,currentTimeS:y(i,h)})}}));function y(t,r){if(t.length===0)return 0;const n=t.length-1,o=Math.max(0,Math.min(n,r)),e=Math.floor(o),a=Math.min(e+1,n);if(e===a)return t[e].timestampS;const i=o-e;return t[e].timestampS+i*(t[a].timestampS-t[e].timestampS)}const L=()=>l(t=>t.isActive),W=()=>l(t=>t.ownerKey),k=()=>l(t=>t.isPlaying),q=()=>l(t=>t.currentIdx),B=()=>l(t=>t.currentTimeS),D=()=>l(t=>t.speed),H=()=>l(t=>t.timeRange),N=()=>l(t=>t.samples);function j(){const{isActive:t,samples:r,currentIdx:n}=l.getState();return!t||r.length===0?null:R(r,n)}function O(){var e;const{isActive:t,samples:r,currentIdx:n}=l.getState();if(!t||r.length===0)return;const o=Math.round(Math.max(0,Math.min(r.length-1,n)));return(e=r[o])==null?void 0:e.pathHops}function U(){const t=k(),r=S.useRef(0),n=S.useRef(0);S.useEffect(()=>{if(!t){n.current=0;return}const o=l.getState().tick,e=a=>{if(n.current>0){const i=Math.min(a-n.current,100);o(i)}n.current=a,r.current=requestAnimationFrame(e)};return r.current=requestAnimationFrame(e),()=>{cancelAnimationFrame(r.current),n.current=0}},[t])}export{K as R,k as a,B as b,D as c,H as d,l as e,C as f,E as g,j as h,O as i,N as j,U as k,W as l,q as m,R as p,F as r,$ as t,L as u};
@@ -1,4 +1,4 @@
import{e as t,en as a,eo as i}from"./index-CmCiA9Mb.js";/**
import{e as t,en as a,eo as i}from"./index-3pqtXusJ.js";/**
* @license lucide-react v0.559.0 - ISC
*
* This source code is licensed under the ISC license.

Some files were not shown because too many files have changed in this diff Show More