signalk-piper 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,8 +1,10 @@
1
1
  # signalk-piper
2
2
 
3
- > **Status: ALPHA** This SignalK Wyoming system is 100% vibecoded slop. I don't have the right hardware yet to test it, so I'm putting it out there for people to test in the meantime. It _should_ work. File issues for anything that doestn.
3
+ > **Status: ALPHA** This SignalK Wyoming system is 100% vibecoded slop. I don't have the right hardware yet to test it, so I'm putting it out there for people to test in the meantime. It _should_ work. File issues for anything that doesn't.
4
4
 
5
- [Piper](https://github.com/rhasspy/wyoming-piper) text-to-speech for [Signal K](https://signalk.org), running as a managed container and speaking the [Wyoming protocol](https://github.com/rhasspy/wyoming). The plugin pulls and supervises the pinned `rhasspy/wyoming-piper` image, gates readiness on a real Wyoming `describe`/`info` exchange (so "ready" means the voice model is downloaded _and_ the service answers), health-checks it continuously, and advertises the service on the `wyoming-service` PropertyValues convention for the [signalk-wyoming](https://github.com/hoeken/signalk-wyoming) orchestrator the family spec lives in that repo. It is also fully standalone: any Wyoming client (including Home Assistant) can use the service directly.
5
+ **signalk-piper gives your Signal K server a voice.** It runs [Piper](https://github.com/rhasspy/wyoming-piper), a fast, natural-sounding text-to-speech engine, in a container that the plugin installs, configures, and monitors for you. Once a voice is downloaded, everything runs fully offline no cloud, no internet needed at sea.
6
+
7
+ It is the speaking half of the [signalk-wyoming](https://github.com/hoeken/signalk-wyoming) voice assistant family: install it alongside the orchestrator and the plugins below for spoken announcements and a full on-boat voice assistant. It also works standalone — anything that speaks the [Wyoming protocol](https://github.com/rhasspy/wyoming), including Home Assistant, can use it directly.
6
8
 
7
9
  | Plugin | Role |
8
10
  | ---------------------------------------------------------------------- | --------------------------------------------------- |
@@ -13,69 +15,81 @@
13
15
 
14
16
  ## Requirements
15
17
 
16
- - The **[signalk-container](https://www.npmjs.com/package/signalk-container)** plugin, with a working podman or docker runtime (the plugin declares this via `"signalk": { "requires": ["signalk-container"] }`).
18
+ - The **[signalk-container](https://www.npmjs.com/package/signalk-container)** plugin with a working podman or docker runtime install and enable it first.
17
19
  - **Node.js ≥ 24** (Signal K server ≥ 2.x).
18
- - RAM: piper holds one loaded voice at **~150 MB resident**; the container is capped at 512 MB by default. A TTS-only voice install (piper + orchestrator) runs comfortably alongside Signal K on a Pi 4 / 2 GB.
19
- - Disk: ~410 MB (amd64) / ~370 MB (arm64) compressed image + ~60 MB per voice. Image architectures: `linux/amd64`, `linux/arm64` (no armv7).
20
+ - **RAM:** about 150 MB while a voice is loaded; the container is capped at 512 MB by default. Piper plus the orchestrator run comfortably alongside Signal K on a Pi 4 with 2 GB.
21
+ - **Disk:** roughly 400 MB for the container image, plus ~60 MB per voice. Images are available for `linux/amd64` and `linux/arm64` (no 32-bit armv7).
20
22
 
21
23
  ## Install
22
24
 
23
- Install **signalk-piper** from the Signal K App Store (Appstore → Available → search "piper"), then enable it in Plugin Config. Make sure signalk-container is installed and enabled first.
25
+ 1. Install and enable **signalk-container** (Appstore → Available).
26
+ 2. Install **signalk-piper** from the App Store (search "piper").
27
+ 3. Enable it in Server → Plugin Config.
28
+
29
+ ### First start needs internet
30
+
31
+ On first start the container downloads your chosen voice (**~60 MB**) from HuggingFace. The plugin status shows _"Starting — first start downloads ~60 MB per voice"_ until the service is actually up and answering. The voice is stored in the plugin's data directory, so it survives restarts, container recreation, and image updates.
32
+
33
+ **Do the first start at the dock, not at sea.** After the download, everything runs fully offline. The same applies to every voice you plan to use: each one downloads on first use, so pre-download any voice you rely on while you still have internet.
34
+
35
+ ## Configuration
24
36
 
25
- ## Configuration reference
37
+ The plugin ships a graphical configuration panel (Server → Plugin Config → Piper TTS) with a live container status card, a one-click image update check/apply, a version dropdown fed by Docker Hub, and all the settings below — with inline warnings if you pick an unsupported voice or open the service to the network. On servers without custom-panel support you get a plain settings form with the same options.
26
38
 
27
- | Setting | Default | Description |
28
- | -------------------------- | --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
29
- | `voice` | `en_US-lessac-medium` | Piper voice to load and serve. **Use 22.05 kHz voices only** (`-medium` / `-high` qualities); `-low`/`-x_low` voices are 16 kHz and outside the signalk-wyoming v1 audio contract — the plugin warns but does not block. Browse voices at [rhasspy/piper-voices](https://huggingface.co/rhasspy/piper-voices). |
30
- | `imageTag` | `auto` | Image tag for `rhasspy/wyoming-piper`. `auto` runs the pinned, tested release (**2.3.1**) and follows plugin updates; set an explicit tag to pin an upstream version. |
31
- | `port` | `10200` | Host port for the Wyoming TTS service. |
32
- | `advanced.bind` | `127.0.0.1` | `127.0.0.1`: only Signal K can reach the service (recommended). `0.0.0.0`: publish on all interfaces for other machines (see [Security](#security)). |
33
- | `advanced.memoryLimit` | `512m` | Hard container memory cap (swap disabled). |
34
- | `advanced.restartPolicy` | `unless-stopped` | Container restart policy (`no` / `unless-stopped` / `always`). |
35
- | `advanced.updateVoices` | `false` | Pass `--update-voices`: refresh the voices catalog from HuggingFace at container start (needs internet). |
36
- | `advanced.sentenceSilence` | _(unset)_ | Pass `--sentence-silence <s>`: seconds of silence appended after each sentence. |
37
- | `advanced.lengthScale` | _(unset)_ | Pass `--length-scale <n>`: phoneme length scale; > 1 slows speech down. |
39
+ | Setting | Default | Description |
40
+ | -------------------------- | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
41
+ | `voice` | `en_US-lessac-medium` | The Piper voice to load and serve. See [Choosing a voice](#choosing-a-voice). |
42
+ | `imageTag` | `auto` | Version of the `rhasspy/wyoming-piper` image to run. `auto` runs the pinned, tested release (**2.3.1**) and follows plugin updates; set an explicit tag to pin a version. |
43
+ | `port` | `10200` | Host port for the Wyoming TTS service. Leave it alone unless it collides with something else. |
44
+ | `advanced.bind` | `127.0.0.1` | `127.0.0.1`: only Signal K can reach the service (recommended). `0.0.0.0`: share it with other machines on the network (see [Security](#security)). |
45
+ | `advanced.memoryLimit` | `512m` | Hard memory cap for the container. |
46
+ | `advanced.restartPolicy` | `unless-stopped` | Container restart policy (`no` / `unless-stopped` / `always`). |
47
+ | `advanced.updateVoices` | `false` | Refresh the list of available voices from HuggingFace each time the container starts (needs internet; off by default for offline-first boats). |
48
+ | `advanced.sentenceSilence` | _(unset)_ | Seconds of silence added after each sentence. |
49
+ | `advanced.lengthScale` | _(unset)_ | Speech speed tuning; values above 1 slow speech down. |
38
50
 
39
- ## First start downloads the voice
51
+ ### Choosing a voice
40
52
 
41
- On first start the container downloads the configured voice (**~60 MB**) from HuggingFace into the plugin's data directory (mounted at `/data`), where it survives container recreation and image updates. Until the service answers, the plugin status shows _"Starting first start downloads ~60 MB per voice"_.
53
+ Browse and listen to voices at [rhasspy/piper-voices](https://huggingface.co/rhasspy/piper-voices). **Stick to `-medium` or `-high` quality voices** voices ending in `-low` or `-x_low` use a lower sample rate (16 kHz) that the voice assistant family doesn't support; the plugin warns if you pick one but won't stop you. Each voice is a ~60 MB download on first use.
42
54
 
43
- **Offline warning:** the first start of a given voice needs internet. Do this at the dock, not at sea — after that, everything runs fully offline. Per-request voices that were never downloaded also trigger a download at request time (see below), so pre-download any voice you plan to use.
55
+ ## Using the service
44
56
 
45
- ## How other software uses it
57
+ The service is a standard Wyoming TTS endpoint at `tcp://<host>:10200`.
46
58
 
47
- The service is a plain Wyoming TTS endpoint at `tcp://<host>:10200`.
59
+ - **With signalk-wyoming:** nothing to set up — the orchestrator discovers the service automatically and uses it for all spoken output.
60
+ - **With Home Assistant** (standalone): set `advanced.bind` to `0.0.0.0`, then add a _Wyoming Protocol_ integration pointing at `tcp://<boat-ip>:10200`.
61
+ - **Any other Wyoming client** works the same way. Clients may request a different voice per request; a voice that was never downloaded triggers a download mid-request, so pre-download the voices you use.
48
62
 
49
- - **signalk-wyoming** discovers it automatically via the `wyoming-service` PropertyValues emission (`{ plugin: "signalk-piper", type: "tts", uri, status }`) — no manual wiring needed.
50
- - **Home Assistant** (standalone use): set `advanced.bind` to `0.0.0.0`, then add a Wyoming Protocol integration pointing at `tcp://<boat-ip>:10200`.
51
- - **Per-request voice override:** Wyoming `synthesize` requests may name any known voice (`voice.name`); piper downloads voices it knows about but hasn't cached — a mid-request network hit, so pre-download voices you rely on.
63
+ ## Status, health, and alarms
52
64
 
53
- The plugin also serves (on its Signal K router, `/plugins/signalk-piper`):
65
+ The plugin doesn't just start the container and hope — it checks that the service really answers before reporting ready, and keeps checking every 30 seconds after that.
54
66
 
55
- - `GET /api/status` `{ status, uri, tag, containerState, lastHealth, info }` (readonly auth where supported)
56
- - `GET /api/update/check` / `POST /api/update/apply` — container image update endpoints (admin)
67
+ If the service stops answering (three failed checks in a row, about 90 seconds), the plugin raises the Signal K notification **`notifications.voice.piper`** (`state: "alarm"`) and shows an error in Plugin Config. When the service comes back, the alarm clears itself (`state: "normal"`) no action needed. Any dashboard or alerting setup that watches Signal K notifications can subscribe to this path.
57
68
 
58
- ## Health and notifications
69
+ ## HTTP API
59
70
 
60
- - Readiness is protocol-native: the plugin polls Wyoming `describe` every 2 s (for up to 10 minutes, to ride out slow first-start downloads) and reports ready only on a valid `info` response. Wyoming protocol versions outside 1.x log a loud warning but don't block.
61
- - After that, a health loop sends `describe` every 30 s (5 s timeout). **Three consecutive failures** raise the Signal K notification `notifications.voice.piper` (`state: "alarm"`, `method: ["visual"]`), set a plugin error, and emit `wyoming-service` status `error`; recovery clears the notification (`state: "normal"`) and re-emits `ready`.
62
- - Status emissions are debounced (≥ 500 ms apart, duplicate suppression, flap guard) so a wobbly service can't flood the server's PropertyValues table.
71
+ The plugin serves a small REST API under `/plugins/signalk-piper`:
72
+
73
+ | Endpoint | Method | Access | Returns |
74
+ | ------------------- | ------ | -------- | ------------------------------------------------------------------------------------------- |
75
+ | `/api/status` | GET | readonly | `{ status, uri, tag, containerState, lastHealth, info }` — live service and container state |
76
+ | `/api/versions` | GET | readonly | Available `rhasspy/wyoming-piper` releases from Docker Hub, newest first |
77
+ | `/api/update/check` | GET | admin | Whether a newer container image is available |
78
+ | `/api/update/apply` | POST | admin | Pulls and switches to a new image version |
63
79
 
64
80
  ## Security
65
81
 
66
- Wyoming has **no authentication**. The default `bind: 127.0.0.1` keeps the service reachable only from the Signal K host (and from Signal K itself in containerized deployments) — leave it that way unless another machine genuinely needs TTS. If you set `bind: 0.0.0.0` (e.g. to share the service with Home Assistant), firewall the port at the boat router or put it on a trusted VLAN; anyone who can reach the port can use the service. See the family spec's security section for the full picture (satellite mic ports are the sensitive ones).
82
+ Wyoming has **no authentication** — anyone who can reach the port can use the service. The default `bind: 127.0.0.1` keeps it reachable only from the Signal K host, which is right for almost everyone; leave it that way unless another machine genuinely needs TTS. If you do set `bind: 0.0.0.0` (e.g. to share with Home Assistant), firewall the port at the boat router or keep it on a trusted network. See the [family spec's security section](https://github.com/hoeken/signalk-wyoming) for the full picture — the satellite microphone ports are the truly sensitive ones; a TTS port mostly risks someone making your boat talk.
67
83
 
68
- ## Development
84
+ ## Troubleshooting
69
85
 
70
- ```sh
71
- npm install
72
- npm run build # tsc dist/
73
- npm test # typecheck + vitest (mock Wyoming server + fake container manager; no docker needed)
74
- npm run ci-lint # eslint + prettier check
75
- npm run format # prettier + eslint --fix
76
- ```
86
+ - **Stuck on "Starting"** — the first start of a voice is a ~60 MB download and can take a while on a slow connection; the plugin waits up to 10 minutes. No internet, no voice: connect and restart the plugin.
87
+ - **`notifications.voice.piper` alarm** — the container stopped answering. Check the container status in the config panel or `/api/status`; the alarm clears automatically once the service recovers.
88
+ - **Speech too fast/slow or sentences run together** tune `advanced.lengthScale` and `advanced.sentenceSilence`.
89
+
90
+ ## Development
77
91
 
78
- Tests use the scriptable mock Wyoming server from `signalk-wyoming/mock` (a devDependency on the [signalk-wyoming](https://github.com/hoeken/signalk-wyoming) package). Production code has no dependency on signalk-wyoming; it embeds its own minimal describe client (`src/wyoming.ts`).
92
+ Build instructions, architecture notes, and the internals (readiness gating, health checks, discovery emissions, the config panel) live in [DEVELOPMENT.md](DEVELOPMENT.md).
79
93
 
80
94
  ## License
81
95
 
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
package/dist/service.js CHANGED
@@ -7,12 +7,18 @@
7
7
  * One instance lives for the whole server process (plugin routers cannot be
8
8
  * deregistered); `start()`/`stop()` may run many times against it.
9
9
  */
10
- import { ManagedContainer, errMsg, startSafely, } from "signalk-container-helper";
10
+ import { ManagedContainer, errMsg, fetchWithTimeout, startSafely, } from "signalk-container-helper";
11
11
  import { DOWNLOAD_HINT, IMAGE, buildContainerConfig, isLowSampleRateVoice, isSemverTag, resolveSettings, resolveTag, } from "./config.js";
12
12
  import { describeService, isSupportedProtocolVersion } from "./wyoming.js";
13
13
  export const PLUGIN_ID = "signalk-piper";
14
14
  export const SERVICE_TYPE = "tts";
15
15
  export const NOTIFICATION_PATH = "notifications.voice.piper";
16
+ /**
17
+ * Docker Hub tags listing feeding the config panel's version dropdown (same
18
+ * endpoint signalk-container's own dockerHubTags source uses; one page
19
+ * covers the dropdown's top-N plus the running-tag fallback).
20
+ */
21
+ const TAGS_URL = `https://hub.docker.com/v2/repositories/${IMAGE}/tags/?page_size=25`;
16
22
  export const DEFAULT_TIMING = {
17
23
  gateIntervalMs: 2_000,
18
24
  gateDeadlineMs: 600_000,
@@ -529,12 +535,51 @@ export class PiperService {
529
535
  });
530
536
  });
531
537
  });
538
+ // Version-dropdown feed for the config panel. Deliberately not guarded
539
+ // by the running flag: the operator picks a tag while the plugin is
540
+ // still disabled, and the route only reaches out on demand.
541
+ statusRouter.get("/api/versions", (_req, res) => {
542
+ void (async () => {
543
+ try {
544
+ const response = await fetchWithTimeout(TAGS_URL, {
545
+ timeoutMs: 10_000,
546
+ });
547
+ if (!response.ok) {
548
+ res
549
+ .status(502)
550
+ .json({ error: `Docker Hub answered HTTP ${response.status}` });
551
+ return;
552
+ }
553
+ const body = (await response.json());
554
+ const versions = (Array.isArray(body.results) ? body.results : [])
555
+ .map((r) => (typeof r?.name === "string" ? r.name : ""))
556
+ .filter(isSemverTag)
557
+ .sort(compareSemverDesc)
558
+ .map((tag) => ({ tag }));
559
+ res.json({ versions });
560
+ }
561
+ catch (err) {
562
+ res.status(502).json({ error: errMsg(err) });
563
+ }
564
+ })();
565
+ });
532
566
  }
533
567
  // ---------------------------------------------------------------------
534
568
  active(runId) {
535
569
  return this.running && runId === this.runId;
536
570
  }
537
571
  }
572
+ /** Numeric-descending compare for the plain x.y.z tags isSemverTag admits. */
573
+ function compareSemverDesc(a, b) {
574
+ const pa = a.split(".").map(Number);
575
+ const pb = b.split(".").map(Number);
576
+ for (let i = 0; i < 3; i += 1) {
577
+ const d = (pb[i] ?? 0) - (pa[i] ?? 0);
578
+ if (d !== 0)
579
+ return d;
580
+ }
581
+ return 0;
582
+ }
538
583
  function splitAddress(address) {
539
584
  const idx = address.lastIndexOf(":");
540
585
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,17 +1,18 @@
1
1
  {
2
2
  "name": "signalk-piper",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Piper text-to-speech as a managed container for Signal K, speaking the Wyoming protocol. Part of the signalk-wyoming voice assistant family.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
8
8
  "files": [
9
9
  "dist",
10
+ "public",
10
11
  "README.md",
11
12
  "LICENSE"
12
13
  ],
13
14
  "scripts": {
14
- "build": "tsc",
15
+ "build": "tsc && webpack",
15
16
  "test": "npm run typecheck:test && vitest run",
16
17
  "test:watch": "vitest",
17
18
  "typecheck": "tsc --noEmit",
@@ -25,7 +26,7 @@
25
26
  "prepublishOnly": "npm run build && npm test"
26
27
  },
27
28
  "lint-staged": {
28
- "*.ts": [
29
+ "*.{ts,jsx}": [
29
30
  "eslint --fix",
30
31
  "prettier --write"
31
32
  ],
@@ -33,6 +34,7 @@
33
34
  },
34
35
  "keywords": [
35
36
  "signalk-node-server-plugin",
37
+ "signalk-plugin-configurator",
36
38
  "signalk-category-utility",
37
39
  "wyoming",
38
40
  "piper",
@@ -57,21 +59,28 @@
57
59
  "node": ">=24"
58
60
  },
59
61
  "dependencies": {
60
- "signalk-container-helper": "^0.1.0"
62
+ "signalk-container-helper": "^0.2.0"
61
63
  },
62
64
  "devDependencies": {
65
+ "@babel/core": "^7.29.0",
66
+ "@babel/preset-react": "^7.28.5",
63
67
  "@eslint/js": "^10.0.1",
64
68
  "@signalk/server-api": "^2.30.0",
65
69
  "@types/node": "^24.0.0",
70
+ "babel-loader": "^10.1.1",
66
71
  "eslint": "^10.2.0",
67
72
  "eslint-config-prettier": "^10.1.8",
68
73
  "globals": "^17.4.0",
69
74
  "husky": "^9.1.7",
70
75
  "lint-staged": "^16.4.0",
71
76
  "prettier": "^3.8.1",
77
+ "react": "^19.2.4",
78
+ "react-dom": "^19.2.4",
72
79
  "signalk-wyoming": "^0.1.0",
73
80
  "typescript": "^5.5.0",
74
81
  "typescript-eslint": "^8.58.0",
75
- "vitest": "^4.1.10"
82
+ "vitest": "^4.1.10",
83
+ "webpack": "^5.105.4",
84
+ "webpack-cli": "^7.0.2"
76
85
  }
77
86
  }
package/public/172.mjs ADDED
@@ -0,0 +1 @@
1
+ export const __webpack_esm_id__=172;export const __webpack_esm_ids__=[172];export const __webpack_esm_modules__={172(e,t,n){n.d(t,{default:()=>E}),n.r(t);var r=n(231);function a(e,t={}){const{stableCount:n=5,preCount:r=3}=t,a=e.filter(e=>"number"==typeof e.pr),o=e.filter(e=>"number"!=typeof e.pr);return{prVersions:a,stableVersions:o.filter(e=>!e.prerelease).slice(0,n),preVersions:o.filter(e=>e.prerelease).slice(0,r)}}const o={root:{fontFamily:'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',color:"#333",padding:"16px 0"},sectionTitle:{fontSize:13,fontWeight:600,color:"#888",textTransform:"uppercase",letterSpacing:"0.05em",marginBottom:10,marginTop:24},btn:{display:"inline-flex",alignItems:"center",gap:8,padding:"8px 16px",border:"none",borderRadius:6,fontSize:13,fontWeight:600,cursor:"pointer"},btnPrimary:{background:"#3b82f6",color:"#fff"},btnSecondary:{background:"#f1f5f9",color:"#475569",border:"1px solid #e2e8f0"},btnWarn:{background:"#f59e0b",color:"#fff"},btnDanger:{background:"#ef4444",color:"#fff"},btnDisabled:{opacity:.5,cursor:"not-allowed"},btnSmall:{padding:"4px 12px",fontSize:12},status:{marginTop:8,fontSize:12,minHeight:18},card:{display:"flex",alignItems:"center",gap:14,padding:"14px 18px",background:"#f8f9fa",border:"1px solid #e0e0e0",borderRadius:10,marginBottom:12},cardIcon:{width:44,height:44,borderRadius:10,display:"flex",alignItems:"center",justifyContent:"center",fontSize:20,fontWeight:700,flexShrink:0},cardInfo:{flex:1},cardTitle:{fontSize:15,fontWeight:600,color:"#333"},cardMeta:{fontSize:12,color:"#888"},stateIndicator:{width:10,height:10,borderRadius:"50%",flexShrink:0},fieldRow:{display:"flex",alignItems:"center",gap:12,marginBottom:10},label:{fontSize:13,fontWeight:500,color:"#555",width:180,flexShrink:0},select:{padding:"6px 10px",borderRadius:6,border:"1px solid #ccc",fontSize:13,background:"#fff",color:"#333",minWidth:200},input:{padding:"6px 10px",borderRadius:6,border:"1px solid #ccc",fontSize:13,background:"#fff",color:"#333",width:200},inputSmall:{padding:"6px 10px",borderRadius:6,border:"1px solid #ccc",fontSize:13,background:"#fff",color:"#333",width:80},checkbox:{width:16,height:16,accentColor:"#3b82f6"},hint:{fontSize:11,color:"#aaa",marginLeft:8},link:{color:"#3b82f6",textDecoration:"none",fontSize:13,fontWeight:600},textarea:{padding:"6px 10px",borderRadius:6,border:"1px solid #ccc",fontSize:13,fontFamily:"monospace",background:"#fff",color:"#333",width:"100%",minHeight:70,boxSizing:"border-box",resize:"vertical"},empty:{textAlign:"center",padding:"30px 16px",color:"#999",fontSize:13},tag:{display:"inline-block",padding:"2px 8px",borderRadius:4,fontSize:10,fontWeight:600,marginLeft:8},tagPre:{background:"#fef3c7",color:"#92400e"},tagLatest:{background:"#dcfce7",color:"#166534"},warnBanner:{padding:"12px 16px",background:"#fef2f2",border:"1px solid #fecaca",borderRadius:10,marginBottom:12,fontSize:13,color:"#991b1b",lineHeight:1.5},warnBannerTitle:{fontWeight:700,marginBottom:4},infoBanner:{padding:"12px 16px",background:"#fffbeb",border:"1px solid #fde68a",borderRadius:10,marginBottom:12,fontSize:13,color:"#92400e",lineHeight:1.5},bannerCode:{display:"block",marginTop:8,padding:"8px 10px",background:"#fff",border:"1px solid #fecaca",borderRadius:6,fontFamily:"monospace",fontSize:12,color:"#7f1d1d",whiteSpace:"pre-wrap",wordBreak:"break-word"},statsGrid:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(140px, 1fr))",gap:10,marginBottom:12},statCard:{padding:"12px 16px",background:"#f8f9fa",border:"1px solid #e0e0e0",borderRadius:10,textAlign:"center"},statValue:{fontSize:22,fontWeight:700,color:"#333"},statLabel:{fontSize:11,color:"#888",marginTop:2}},l={ok:"#10b981",warn:"#f59e0b",error:"#ef4444"};function i(e){const{runningTag:t,tagKind:n,currentVersion:r,latestVersion:a,updateAvailable:o,reason:l,fromCache:i,lastSuccessfulCheckAt:s}=e??{};return"offline"===l?i&&s?`Offline — last checked ${function(e){try{const t=new Date(e).getTime(),n=Math.max(0,Math.floor((Date.now()-t)/1e3));if(n<5)return"just now";if(n<60)return`${n}s ago`;const r=Math.floor(n/60);if(r<60)return`${r}m ago`;const a=Math.floor(r/60);return a<24?`${a}h ago`:`${Math.floor(a/24)}d ago`}catch{return e}}(s)}: ${o?"update available":"up to date"}`:"Offline — never checked yet":"newer-version"===l?`Update available: ${r} → ${a}`:"digest-drift"===l?`Image rebuild available for :${t}${a?` (latest stable: ${a})`:""}`:"up-to-date"===l?"floating"===n&&a?`Up to date with :${t} (latest stable: ${a})`:`Up to date (${r||t})`:"older-than-pinned"===l?`Pinned to ${r}; latest stable is ${a}`:"error"===l?`Check error: ${e?.error||"unknown"}`:`State: ${l||"unknown"}`}function s({children:e}){return r.createElement("div",{style:o.sectionTitle},e)}function c({children:e,color:t}){return r.createElement("span",{style:{...o.hint,...t?{color:t}:{}}},e)}function d({label:e,hint:t,hintColor:n,children:a}){return r.createElement("div",{style:o.fieldRow},r.createElement("span",{style:o.label},e),a,null!=t&&""!==t&&r.createElement(c,{color:n},t))}function u({state:e="ok",color:t,title:n,style:a}){return r.createElement("div",{style:{...o.stateIndicator,background:t??l[e],...a},title:n})}function p({icon:e,iconBackground:t,iconColor:n,title:a,meta:i,state:s="ok",stateTitle:c,link:d,children:p}){const f="error"===s&&!t;return r.createElement("div",{style:o.card},r.createElement("div",{style:{...o.cardIcon,background:f?"#fef2f2":t??"#3b82f6",color:f?l.error:n??"#fff"}},e),r.createElement("div",{style:o.cardInfo},r.createElement("div",{style:o.cardTitle},a),null!=i&&r.createElement("div",{style:o.cardMeta},i)),p,d&&r.createElement("a",{href:d.href,target:"_blank",rel:"noopener noreferrer",style:o.link},d.label),r.createElement(u,{state:s,title:c}))}function f({title:e,defaultOpen:t=!1,children:n}){const[a,l]=(0,r.useState)(t);return r.createElement("div",null,r.createElement("button",{type:"button","aria-expanded":a,style:{...o.sectionTitle,cursor:"pointer",userSelect:"none",display:"flex",alignItems:"center",gap:6,width:"100%",textAlign:"left",background:"none",border:"none",padding:0},onClick:()=>l(!a)},r.createElement("span",{style:{fontSize:10,transition:"transform 0.15s",transform:a?"rotate(90deg)":"rotate(0deg)"}},"▶"),e),a&&r.createElement("div",{style:{marginBottom:16}},n))}const g={primary:o.btnPrimary,secondary:o.btnSecondary,warn:o.btnWarn,danger:o.btnDanger};function m({variant:e="primary",small:t=!1,busy:n=!1,busyLabel:a,disabled:l=!1,onClick:i,title:s,style:c,children:d}){const u=l||n;return r.createElement("button",{type:"button",style:{...o.btn,...g[e],...t?o.btnSmall:{},...u?o.btnDisabled:{},...c},onClick:i,disabled:u,title:s},n?a??d:d)}function b({message:e,error:t=!1,style:n}){return e?r.createElement("div",{style:{...o.status,color:t?l.error:l.ok,marginTop:16,...n}},e):null}const h=[{tag:"latest",label:"latest (recommended)"}];function y({value:e,onChange:t,versions:n,floatingOptions:i=h,stableCount:s,preCount:d,loading:u=!1,error:p,onRefresh:f,disabled:g=!1,style:b}){const y={stableCount:s,preCount:d},{prVersions:v,stableVersions:k,preVersions:S}=a(n,y),E=function(e,t,n=["latest"],r={}){return e?function(e,t=["latest"],n={}){const{prVersions:r,stableVersions:o,preVersions:l}=a(e,n);return new Set([...t,...l.map(e=>e.tag),...o.map(e=>e.tag),...r.map(e=>e.tag)])}(t,n,r).has(e)?null:e:null}(e,n,i.map(e=>e.tag),y);return r.createElement(r.Fragment,null,r.createElement("select",{style:{...o.select,...b},value:e,onChange:e=>t(e.target.value),disabled:g},i.map(e=>r.createElement("option",{key:e.tag,value:e.tag},e.label??e.tag)),S.map(e=>r.createElement("option",{key:e.tag,value:e.tag},e.tag," (pre-release)")),k.map((e,t)=>r.createElement("option",{key:e.tag,value:e.tag},e.tag,0===t?" (current stable)":"")),v.length>0&&r.createElement("optgroup",{label:"PR test images"},v.map(e=>r.createElement("option",{key:e.tag,value:e.tag},e.tag,e.title?` — ${e.title}`:""))),E&&r.createElement("option",{value:E},E," (running)")),u&&r.createElement(c,null,"loading releases..."),f&&r.createElement(m,{small:!0,style:{padding:"4px 10px",fontSize:11},onClick:f,title:"Refresh available versions"},"↻"),p&&r.createElement(c,{color:l.error},p))}function v({checkUrl:e,applyUrl:t,tag:n,onApplied:a,updateLabel:o="Update",disabled:s=!1,style:c}){const d=function(e){const{checkUrl:t,applyUrl:n}=e,[a,o]=(0,r.useState)(!1),[l,i]=(0,r.useState)(!1),[s,c]=(0,r.useState)(null),[d,u]=(0,r.useState)("");return{checking:a,applying:l,result:s,error:d,check:(0,r.useCallback)(async()=>{o(!0),u("");try{const e=await fetch(t),n=await e.json().catch(()=>null);if(e.ok&&n&&"object"==typeof n)c(n);else{const t=n?.error??`HTTP ${e.status}`;u(`Check failed: ${t}`)}}catch(e){u(`Check failed: ${e instanceof Error?e.message:String(e)}`)}o(!1)},[t]),apply:(0,r.useCallback)(async e=>{let t;i(!0),u("");try{const r=await fetch(n,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e?{tag:e}:{})}),a=await r.json().catch(()=>null);r.ok?(t={ok:!0,tag:a?.tag},c(null)):(t={ok:!1,error:a?.error??`HTTP ${r.status}`},u(`Update failed: ${t.error}`))}catch(e){t={ok:!1,error:e instanceof Error?e.message:String(e)},u(`Update failed: ${t.error}`)}return i(!1),t},[n])}}({checkUrl:e,applyUrl:t}),[u,p]=(0,r.useState)("");return r.createElement("div",{style:{display:"flex",alignItems:"center",gap:10,marginBottom:12,...c}},d.result?.updateAvailable?r.createElement(r.Fragment,null,r.createElement("span",{style:{fontSize:13}},i(d.result)),r.createElement(m,{small:!0,variant:"warn",busy:d.applying,busyLabel:"Updating...",disabled:s||d.checking,onClick:()=>{(async()=>{p("");const e=await d.apply(n);e.ok&&(p(e.tag?`Updated to ${e.tag}.`:"Updated."),a?.(e.tag))})()},title:"Pull the image and recreate the container"},o)):d.result?r.createElement("span",{style:{fontSize:12,color:"#888"}},i(d.result)):r.createElement(m,{small:!0,variant:"secondary",busy:d.checking,busyLabel:"Checking...",disabled:s||d.applying,onClick:()=>{d.check()}},"Check for updates"),u&&r.createElement("span",{style:{fontSize:12,color:l.ok}},u),d.error&&r.createElement("span",{style:{fontSize:12,color:l.error}},d.error))}const k="/plugins/signalk-piper",S="en_US-lessac-medium";function E({configuration:e,save:t}){const n=e||{},a=n.advanced||{},[i,c]=(0,r.useState)(n.voice||S),[u,g]=(0,r.useState)(n.imageTag||"auto"),[h,E]=(0,r.useState)(String(n.port??10200)),[x,w]=(0,r.useState)("0.0.0.0"===a.bind?"0.0.0.0":"127.0.0.1"),[C,$]=(0,r.useState)(a.memoryLimit||"512m"),[z,T]=(0,r.useState)(a.restartPolicy||"unless-stopped"),[R,_]=(0,r.useState)(!0===a.updateVoices),[A,U]=(0,r.useState)("number"==typeof a.sentenceSilence?String(a.sentenceSilence):""),[B,I]=(0,r.useState)("number"==typeof a.lengthScale?String(a.lengthScale):""),[P,W]=(0,r.useState)(""),{status:V,loading:H,refresh:L}=function(e,t={}){const{intervalMs:n=5e3}=t,[a,o]=(0,r.useState)(null),[l,i]=(0,r.useState)(!0),s=(0,r.useRef)(0),c=(0,r.useRef)(t.fallback??null),d=(0,r.useCallback)(async t=>{const n=++s.current;let r=c.current;try{const n=await fetch(e,{signal:t}),a=await n.json().catch(()=>null);a&&"object"==typeof a&&(r=a)}catch{}n===s.current&&(o(r),i(!1))},[e]);return(0,r.useEffect)(()=>{let e=!1,t=null;const r=new AbortController,a=async()=>{await d(r.signal),!e&&n>0&&(t=setTimeout(a,n))};return a(),()=>{e=!0,r.abort(),t&&clearTimeout(t)}},[d,n]),{status:a,loading:l,refresh:()=>d()}}(`${k}/api/status`,{fallback:{status:"not_running"}}),M=function(e){const[t,n]=(0,r.useState)([]),[a,o]=(0,r.useState)(""),[l,i]=(0,r.useState)(!1),s=(0,r.useRef)(0),c=(0,r.useCallback)(async()=>{const t=++s.current;i(!0);try{const r=await fetch(e),a=await r.json().catch(()=>null),l=function(e,t){if(!e)return{versions:null,versionsError:"⚠ Could not reach GitHub — showing last known versions, retry"};const n=t&&"object"==typeof t?t:{},r=Array.isArray(n)?n:Array.isArray(n.versions)?n.versions:[],a=!Array.isArray(n)&&n.sources&&"object"==typeof n.sources?n.sources:{};let o="";return"rate-limited"===a.prImages?o="⚠ GitHub rate-limited — PR test images temporarily unavailable, retry shortly":"rate-limited"===a.releases?o="⚠ GitHub rate-limited — some versions temporarily unavailable, retry shortly":"error"!==a.prImages&&"error"!==a.releases||(o="⚠ Could not fetch some versions from GitHub, retry"),{versions:r,versionsError:o}}(r.ok,a);if(t!==s.current)return;null!==l.versions&&n(l.versions),o(l.versionsError)}catch{if(t!==s.current)return;o("⚠ Offline — showing last known versions")}i(!1)},[e]);return(0,r.useEffect)(()=>{c()},[c]),{versions:t,versionsError:a,loading:l,refresh:c}}(`${k}/api/versions`),j=V&&"string"==typeof V.status?V.status:"not_running",N="ready"===j?"ok":"starting"===j?"warn":"error",F=function(e){if(!e||!Array.isArray(e.tts))return null;let t=0;for(const n of e.tts)n&&Array.isArray(n.voices)&&(t+=n.voices.length);return t}(V&&V.info),O=H?"Checking...":"ready"===j?`rhasspy/wyoming-piper:${V.tag} at ${V.uri}`+(F?` — ${F} voice${1===F?"":"s"}`:""):"starting"===j?"Starting — a first start downloads the voice (~60 MB)":"error"===j?"Not answering"+(V&&V.uri?` at ${V.uri}`:""):"Not running",D=function(e){return e.endsWith("-low")||e.endsWith("-x_low")}(i);return r.createElement("div",{style:o.root},r.createElement(s,null,"Piper status"),r.createElement(p,{icon:"P",iconBackground:"ready"===j?"#7c3aed":void 0,title:"Piper TTS (Wyoming)",meta:O,state:N,stateTitle:j}),"not_running"!==j&&"stopped"!==j&&r.createElement(v,{checkUrl:`${k}/api/update/check`,applyUrl:`${k}/api/update/apply`,tag:u,onApplied:()=>{L()}}),r.createElement(s,null,"Settings"),r.createElement(d,{label:"Voice",hint:D?`${i} is a 16 kHz voice — use -medium or -high (22.05 kHz)`:"22.05 kHz voices only (-medium / -high); ~60 MB download on first start",hintColor:D?l.warn:void 0},r.createElement("input",{style:{...o.input,width:220},value:i,onChange:e=>c(e.target.value),placeholder:S})),r.createElement(d,{label:"Image version"},r.createElement(y,{value:u,onChange:g,versions:M.versions,floatingOptions:[{tag:"auto",label:"auto (pinned release, recommended)"}],loading:M.loading,error:M.versionsError,onRefresh:M.refresh})),r.createElement(d,{label:"Port",hint:"leave at 10200 unless it collides"},r.createElement("input",{style:{...o.input,width:90},type:"number",value:h,onChange:e=>E(e.target.value)})),r.createElement(f,{title:"Advanced"},r.createElement(d,{label:"Bind address",hint:"0.0.0.0"===x?"LAN-reachable — Wyoming has no authentication, firewall accordingly":"only Signal K can reach the service",hintColor:"0.0.0.0"===x?l.warn:void 0},r.createElement("select",{style:o.select,value:x,onChange:e=>w(e.target.value)},r.createElement("option",{value:"127.0.0.1"},"127.0.0.1 (recommended)"),r.createElement("option",{value:"0.0.0.0"},"0.0.0.0 (all interfaces)"))),r.createElement(d,{label:"Memory limit",hint:'hard cap, e.g. "512m" or "1g"'},r.createElement("input",{style:{...o.input,width:90},value:C,onChange:e=>$(e.target.value)})),r.createElement(d,{label:"Restart policy"},r.createElement("select",{style:o.select,value:z,onChange:e=>T(e.target.value)},r.createElement("option",{value:"unless-stopped"},"unless-stopped"),r.createElement("option",{value:"always"},"always"),r.createElement("option",{value:"no"},"no"))),r.createElement(d,{label:"Update voices list",hint:"fetch the latest voices catalog at container start (needs internet)"},r.createElement("input",{style:o.checkbox,type:"checkbox",checked:R,onChange:e=>_(e.target.checked)})),r.createElement(d,{label:"Sentence silence",hint:"optional seconds of silence after each sentence"},r.createElement("input",{style:{...o.input,width:90},type:"number",step:"0.1",value:A,onChange:e=>U(e.target.value)})),r.createElement(d,{label:"Length scale",hint:"optional; above 1 slows speech down"},r.createElement("input",{style:{...o.input,width:90},type:"number",step:"0.1",value:B,onChange:e=>I(e.target.value)}))),r.createElement("div",{style:{marginTop:24}},r.createElement(m,{onClick:()=>{const e={bind:x,memoryLimit:C,restartPolicy:z,updateVoices:R},r=Number(A);""!==A&&Number.isFinite(r)&&(e.sentenceSilence=r);const a=Number(B);""!==B&&Number.isFinite(a)&&(e.lengthScale=a);const o=Number(h);t({...n,voice:i,imageTag:u,port:""!==h&&Number.isFinite(o)?o:10200,advanced:e}),W("Saved. Signal K restarts the plugin with the new configuration.")}},"Save Configuration")),r.createElement(b,{message:P}))}}};
package/public/540.mjs ADDED
@@ -0,0 +1,2 @@
1
+ /*! For license information please see 540.mjs.LICENSE.txt */
2
+ export const __webpack_esm_id__=540;export const __webpack_esm_ids__=[540];export const __webpack_esm_modules__={869(e,t){var n=Symbol.for("react.transitional.element"),r=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),u=Symbol.for("react.strict_mode"),c=Symbol.for("react.profiler"),s=Symbol.for("react.consumer"),i=Symbol.for("react.context"),a=Symbol.for("react.forward_ref"),f=Symbol.for("react.suspense"),l=Symbol.for("react.memo"),p=Symbol.for("react.lazy"),y=Symbol.for("react.activity"),d=Symbol.iterator,_={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},h=Object.assign,m={};function b(e,t,n){this.props=e,this.context=t,this.refs=m,this.updater=n||_}function v(){}function S(e,t,n){this.props=e,this.context=t,this.refs=m,this.updater=n||_}b.prototype.isReactComponent={},b.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},b.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},v.prototype=b.prototype;var E=S.prototype=new v;E.constructor=S,h(E,b.prototype),E.isPureReactComponent=!0;var w=Array.isArray;function g(){}var k={H:null,A:null,T:null,S:null},H=Object.prototype.hasOwnProperty;function j(e,t,r){var o=r.ref;return{$$typeof:n,type:e,key:t,ref:void 0!==o?o:null,props:r}}function R(e){return"object"==typeof e&&null!==e&&e.$$typeof===n}var C=/\/+/g;function $(e,t){return"object"==typeof e&&null!==e&&null!=e.key?(n=""+e.key,r={"=":"=0",":":"=2"},"$"+n.replace(/[=:]/g,function(e){return r[e]})):t.toString(36);var n,r}function x(e,t,o,u,c){var s=typeof e;"undefined"!==s&&"boolean"!==s||(e=null);var i,a,f=!1;if(null===e)f=!0;else switch(s){case"bigint":case"string":case"number":f=!0;break;case"object":switch(e.$$typeof){case n:case r:f=!0;break;case p:return x((f=e._init)(e._payload),t,o,u,c)}}if(f)return c=c(e),f=""===u?"."+$(e,0):u,w(c)?(o="",null!=f&&(o=f.replace(C,"$&/")+"/"),x(c,t,o,"",function(e){return e})):null!=c&&(R(c)&&(i=c,a=o+(null==c.key||e&&e.key===c.key?"":(""+c.key).replace(C,"$&/")+"/")+f,c=j(i.type,a,i.props)),t.push(c)),1;f=0;var l,y=""===u?".":u+":";if(w(e))for(var _=0;_<e.length;_++)f+=x(u=e[_],t,o,s=y+$(u,_),c);else if("function"==typeof(_=null===(l=e)||"object"!=typeof l?null:"function"==typeof(l=d&&l[d]||l["@@iterator"])?l:null))for(e=_.call(e),_=0;!(u=e.next()).done;)f+=x(u=u.value,t,o,s=y+$(u,_++),c);else if("object"===s){if("function"==typeof e.then)return x(function(e){switch(e.status){case"fulfilled":return e.value;case"rejected":throw e.reason;default:switch("string"==typeof e.status?e.then(g,g):(e.status="pending",e.then(function(t){"pending"===e.status&&(e.status="fulfilled",e.value=t)},function(t){"pending"===e.status&&(e.status="rejected",e.reason=t)})),e.status){case"fulfilled":return e.value;case"rejected":throw e.reason}}throw e}(e),t,o,u,c);throw t=String(e),Error("Objects are not valid as a React child (found: "+("[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.")}return f}function T(e,t,n){if(null==e)return e;var r=[],o=0;return x(e,r,"","",function(e){return t.call(n,e,o++)}),r}function A(e){if(-1===e._status){var t=e._result;(t=t()).then(function(t){0!==e._status&&-1!==e._status||(e._status=1,e._result=t)},function(t){0!==e._status&&-1!==e._status||(e._status=2,e._result=t)}),-1===e._status&&(e._status=0,e._result=t)}if(1===e._status)return e._result.default;throw e._result}var O="function"==typeof reportError?reportError:function(e){if("object"==typeof window&&"function"==typeof window.ErrorEvent){var t=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:"object"==typeof e&&null!==e&&"string"==typeof e.message?String(e.message):String(e),error:e});if(!window.dispatchEvent(t))return}else if("object"==typeof process&&"function"==typeof process.emit)return void process.emit("uncaughtException",e);console.error(e)},I={map:T,forEach:function(e,t,n){T(e,function(){t.apply(this,arguments)},n)},count:function(e){var t=0;return T(e,function(){t++}),t},toArray:function(e){return T(e,function(e){return e})||[]},only:function(e){if(!R(e))throw Error("React.Children.only expected to receive a single React element child.");return e}};t.Activity=y,t.Children=I,t.Component=b,t.Fragment=o,t.Profiler=c,t.PureComponent=S,t.StrictMode=u,t.Suspense=f,t.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=k,t.__COMPILER_RUNTIME={__proto__:null,c:function(e){return k.H.useMemoCache(e)}},t.cache=function(e){return function(){return e.apply(null,arguments)}},t.cacheSignal=function(){return null},t.cloneElement=function(e,t,n){if(null==e)throw Error("The argument must be a React element, but you passed "+e+".");var r=h({},e.props),o=e.key;if(null!=t)for(u in void 0!==t.key&&(o=""+t.key),t)!H.call(t,u)||"key"===u||"__self"===u||"__source"===u||"ref"===u&&void 0===t.ref||(r[u]=t[u]);var u=arguments.length-2;if(1===u)r.children=n;else if(1<u){for(var c=Array(u),s=0;s<u;s++)c[s]=arguments[s+2];r.children=c}return j(e.type,o,r)},t.createContext=function(e){return(e={$$typeof:i,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider=e,e.Consumer={$$typeof:s,_context:e},e},t.createElement=function(e,t,n){var r,o={},u=null;if(null!=t)for(r in void 0!==t.key&&(u=""+t.key),t)H.call(t,r)&&"key"!==r&&"__self"!==r&&"__source"!==r&&(o[r]=t[r]);var c=arguments.length-2;if(1===c)o.children=n;else if(1<c){for(var s=Array(c),i=0;i<c;i++)s[i]=arguments[i+2];o.children=s}if(e&&e.defaultProps)for(r in c=e.defaultProps)void 0===o[r]&&(o[r]=c[r]);return j(e,u,o)},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:a,render:e}},t.isValidElement=R,t.lazy=function(e){return{$$typeof:p,_payload:{_status:-1,_result:e},_init:A}},t.memo=function(e,t){return{$$typeof:l,type:e,compare:void 0===t?null:t}},t.startTransition=function(e){var t=k.T,n={};k.T=n;try{var r=e(),o=k.S;null!==o&&o(n,r),"object"==typeof r&&null!==r&&"function"==typeof r.then&&r.then(g,O)}catch(e){O(e)}finally{null!==t&&null!==n.types&&(t.types=n.types),k.T=t}},t.unstable_useCacheRefresh=function(){return k.H.useCacheRefresh()},t.use=function(e){return k.H.use(e)},t.useActionState=function(e,t,n){return k.H.useActionState(e,t,n)},t.useCallback=function(e,t){return k.H.useCallback(e,t)},t.useContext=function(e){return k.H.useContext(e)},t.useDebugValue=function(){},t.useDeferredValue=function(e,t){return k.H.useDeferredValue(e,t)},t.useEffect=function(e,t){return k.H.useEffect(e,t)},t.useEffectEvent=function(e){return k.H.useEffectEvent(e)},t.useId=function(){return k.H.useId()},t.useImperativeHandle=function(e,t,n){return k.H.useImperativeHandle(e,t,n)},t.useInsertionEffect=function(e,t){return k.H.useInsertionEffect(e,t)},t.useLayoutEffect=function(e,t){return k.H.useLayoutEffect(e,t)},t.useMemo=function(e,t){return k.H.useMemo(e,t)},t.useOptimistic=function(e,t){return k.H.useOptimistic(e,t)},t.useReducer=function(e,t,n){return k.H.useReducer(e,t,n)},t.useRef=function(e){return k.H.useRef(e)},t.useState=function(e){return k.H.useState(e)},t.useSyncExternalStore=function(e,t,n){return k.H.useSyncExternalStore(e,t,n)},t.useTransition=function(){return k.H.useTransition()},t.version="19.2.8"},540(e,t,n){e.exports=n(869)}};
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @license React
3
+ * react.production.js
4
+ *
5
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
6
+ *
7
+ * This source code is licensed under the MIT license found in the
8
+ * LICENSE file in the root directory of this source tree.
9
+ */
@@ -0,0 +1 @@
1
+ var e={980(){}};const t={};function r(o){const s=t[o];if(void 0!==s)return s.exports;const n=t[o]={exports:{}};return e[o](n,n.exports,r),n.exports}r.m=e,r.c=t,r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce((t,o)=>(r.f[o](e,t),t),[])),r.u=e=>e+".mjs",r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{r.S={};const e={},t={};r.I=(o,s)=>{s||(s=[]);let n=t[o];if(n||(n=t[o]={}),s.indexOf(n)>=0)return;if(s.push(n),e[o])return e[o];r.o(r.S,o)||(r.S[o]={});const i=r.S[o],c="signalk-piper",_=[];return"default"===o&&((e,t,o,s)=>{const n=i[e]=i[e]||{},_=n[t];(!_||!_.loaded&&(1!=!_.eager?s:c>_.from))&&(n[t]={get:()=>r.e(540).then(()=>()=>r(540)),from:c,eager:!1})})("react","19.2.8"),e[o]=_.length?Promise.all(_).then(()=>e[o]=1):1}})(),(()=>{const e={792:0},t=t=>{let{__webpack_esm_ids__:o,__webpack_esm_modules__:s,__webpack_esm_runtime__:n}=t;var i,c,_=0;for(i in s)r.o(s,i)&&(r.m[i]=s[i]);for(n&&n(r);_<o.length;_++)c=o[_],r.o(e,c)&&e[c]&&e[c][0](),e[o[_]]=0};r.f.j=(o,s)=>{let n=r.o(e,o)?e[o]:void 0;if(0!==n)if(n)s.push(n[1]);else{let i=import("./"+r.u(o)).then(t,t=>{throw 0!==e[o]&&(e[o]=void 0),t});i=Promise.race([i,new Promise(t=>n=e[o]=[t])]),s.push(n[1]=i)}}})(),r(980);
@@ -0,0 +1 @@
1
+ var e={623(e,r,t){const n={"./PluginConfigurationPanel":()=>t.e(172).then(()=>()=>t(172))},o=(e,r)=>(t.R=r,r=t.o(n,e)?n[e]():Promise.resolve().then(()=>{throw new Error('Module "'+e+'" does not exist in container.')}),t.R=void 0,r),i=(e,r)=>{if(!t.S)return;const n="default",o=t.S[n];if(o&&o!==e)throw new Error("Container initialization failed as it has already been initialized with a different share scope");return t.S[n]=e,t.I(n,r)};t.d(r,{get:()=>o,init:()=>i})}};const r={};function t(n){const o=r[n];if(void 0!==o)return o.exports;const i=r[n]={exports:{}};return e[n](i,i.exports,t),i.exports}t.m=e,t.c=r,t.d=(e,r)=>{if(Array.isArray(r))for(var n=0;n<r.length;){var o=r[n++],i=r[n++];t.o(e,o)?0===i&&n++:0===i?Object.defineProperty(e,o,{enumerable:!0,value:r[n++]}):Object.defineProperty(e,o,{enumerable:!0,get:i})}else for(var o in r)t.o(r,o)&&!t.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:r[o]})},t.f={},t.e=e=>Promise.all(Object.keys(t.f).reduce((r,n)=>(t.f[n](e,r),r),[])),t.u=e=>e+".mjs",t.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),t.r=e=>{Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{t.S={};const e={},r={};t.I=(n,o)=>{o||(o=[]);let i=r[n];if(i||(i=r[n]={}),o.indexOf(i)>=0)return;if(o.push(i),e[n])return e[n];t.o(t.S,n)||(t.S[n]={});const s=t.S[n],a="signalk-piper",u=[];return"default"===n&&((e,r,n,o)=>{const i=s[e]=s[e]||{},u=i[r];(!u||!u.loaded&&(1!=!u.eager?o:a>u.from))&&(i[r]={get:()=>t.e(540).then(()=>()=>t(540)),from:a,eager:!1})})("react","19.2.8"),e[n]=u.length?Promise.all(u).then(()=>e[n]=1):1}})(),(()=>{var e=e=>{var r=e=>e.split(".").map(e=>+e==e?+e:e),t=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(e),n=t[1]?r(t[1]):[];return t[2]&&(n.length++,n.push.apply(n,r(t[2]))),t[3]&&(n.push([]),n.push.apply(n,r(t[3]))),n},r=e=>{var t=e[0],n="";if(1===e.length)return"*";if(t+.5){n+=0==t?">=":-1==t?"<":1==t?"^":2==t?"~":t>0?"=":"!=";for(var o=1,i=1;i<e.length;i++)o--,n+="u"==(typeof(a=e[i]))[0]?"-":(o>0?".":"")+(o=2,a);return n}var s=[];for(i=1;i<e.length;i++){var a=e[i];s.push(0===a?"not("+u()+")":1===a?"("+u()+" || "+u()+")":2===a?s.pop()+" "+s.pop():r(a))}return u();function u(){return s.pop().replace(/^\((.+)\)$/,"$1")}},n=(r,t)=>{if(0 in r){t=e(t);var o=r[0],i=o<0;i&&(o=-o-1);for(var s=0,a=1,u=!0;;a++,s++){var f,l,c=a<r.length?(typeof r[a])[0]:"";if(s>=t.length||"o"==(l=(typeof(f=t[s]))[0]))return!u||("u"==c?a>o&&!i:""==c!=i);if("u"==l){if(!u||"u"!=c)return!1}else if(u)if(c==l)if(a<=o){if(f!=r[a])return!1}else{if(i?f>r[a]:f<r[a])return!1;f!=r[a]&&(u=!1)}else if("s"!=c&&"n"!=c){if(i||a<=o)return!1;u=!1,a--}else{if(a<=o||l<c!=i)return!1;u=!1}else"s"!=c&&"n"!=c&&(u=!1,a--)}}var p=[],d=p.pop.bind(p);for(s=1;s<r.length;s++){var h=r[s];p.push(1==h?d()|d():2==h?d()&d():h?n(h,t):!d())}return!!d()};const o=(r,t,n)=>{const o=n?(e=>Object.keys(e).reduce((r,t)=>(e[t].eager&&(r[t]=e[t]),r),{}))(r[t]):r[t];return Object.keys(o).reduce((r,t)=>!r||!o[r].loaded&&((r,t)=>{r=e(r),t=e(t);for(var n=0;;){if(n>=r.length)return n<t.length&&"u"!=(typeof t[n])[0];var o=r[n],i=(typeof o)[0];if(n>=t.length)return"u"==i;var s=t[n],a=(typeof s)[0];if(i!=a)return"o"==i&&"n"==a||"s"==a||"u"==i;if("o"!=i&&"u"!=i&&o!=s)return o<s;n++}})(r,t)?t:r,0)},i=(e,r,t)=>t?t():((e,r)=>(e=>{throw new Error(e)})("Shared module "+r+" doesn't exist in shared scope "+e))(e,r),s=(e=>function(r,n,o,i,s){const a=t.I(r);return a?.then&&!o?a.then(e.bind(e,r,t.S[r],n,!1,i,s)):e(r,t.S[r],n,o,i,s)})((e,s,a,u,f,l)=>{if(!((e,r)=>e&&t.o(e,r))(s,a))return i(e,a,l);const c=o(s,a,u);return n(f,c)||(d=((e,t,n,o)=>"Unsatisfied version "+n+" from "+(n&&e[t][n].from)+" of shared singleton module "+t+" (required "+r(o)+")")(s,a,c,f),"undefined"!=typeof console&&console.warn&&console.warn(d)),(p=s[a][c]).loaded=1,p.get();var p,d}),a={},u={231:()=>s("default","react",!1,[1,19],()=>t.e(540).then(()=>()=>t(540)))},f={172:[231]},l={};t.f.consumes=(e,r)=>{t.o(f,e)&&f[e].forEach(e=>{if(t.o(a,e))return r.push(a[e]);if(!l[e]){const n=r=>{a[e]=0,t.m[e]=n=>{delete t.c[e],n.exports=r()}};l[e]=!0;const o=r=>{delete a[e],t.m[e]=n=>{throw delete t.c[e],r}};try{const t=u[e]();t.then?r.push(a[e]=t.then(n).catch(o)):n(t)}catch(e){o(e)}}})}})(),(()=>{const e={37:0},r=r=>{let{__webpack_esm_ids__:n,__webpack_esm_modules__:o,__webpack_esm_runtime__:i}=r;var s,a,u=0;for(s in o)t.o(o,s)&&(t.m[s]=o[s]);for(i&&i(t);u<n.length;u++)a=n[u],t.o(e,a)&&e[a]&&e[a][0](),e[n[u]]=0};t.f.j=(n,o)=>{let i=t.o(e,n)?e[n]:void 0;if(0!==i)if(i)o.push(i[1]);else{let s=import("./"+t.u(n)).then(r,r=>{throw 0!==e[n]&&(e[n]=void 0),r});s=Promise.race([s,new Promise(r=>i=e[n]=[r])]),o.push(i[1]=s)}}})();let n=t(623);const o=n.get,i=n.init;export{o as get,i as init};