@linxin666/dsh-remote-web-ui 0.1.3 → 0.1.7

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.
Files changed (52) hide show
  1. package/README.md +14 -5
  2. package/lib/client.js +70 -70
  3. package/lib/mobile.js +160 -32
  4. package/lib/mobile.js.map +1 -1
  5. package/lib/types/mobile/mux.d.ts +66 -2
  6. package/lib/types/mobile/mux.d.ts.map +1 -1
  7. package/lib/types/mobile/mux.js +155 -8
  8. package/lib/types/mobile/mux.test.d.ts +2 -0
  9. package/lib/types/mobile/mux.test.d.ts.map +1 -0
  10. package/lib/types/mobile/mux.test.js +141 -0
  11. package/lib/types/mobile/views/App.d.ts.map +1 -1
  12. package/lib/types/mobile/views/App.js +6 -0
  13. package/lib/types/mobile/views/ChatView.d.ts.map +1 -1
  14. package/lib/types/mobile/views/ChatView.js +20 -6
  15. package/lib/types/mobile/views/ChatView.test.js +92 -2
  16. package/package.json +1 -1
  17. package/src/mobile/mux.test.ts +172 -0
  18. package/src/mobile/mux.ts +170 -8
  19. package/src/mobile/views/App.tsx +7 -0
  20. package/src/mobile/views/ChatView.test.tsx +98 -3
  21. package/src/mobile/views/ChatView.tsx +20 -6
  22. package/lib/types/client/PairFailedNotice.js.map +0 -1
  23. package/lib/types/client/PhoneIcon.js.map +0 -1
  24. package/lib/types/client/PluginSettingsCard.js.map +0 -1
  25. package/lib/types/client/RemoteEntry.js.map +0 -1
  26. package/lib/types/client/RemotePanel.js.map +0 -1
  27. package/lib/types/client/RemoteSettingsCard.js.map +0 -1
  28. package/lib/types/client/deep-link.js.map +0 -1
  29. package/lib/types/client/index.js.map +0 -1
  30. package/lib/types/client/locales.js.map +0 -1
  31. package/lib/types/client/pair-api.js.map +0 -1
  32. package/lib/types/client/settings-form.js.map +0 -1
  33. package/lib/types/gate.js.map +0 -1
  34. package/lib/types/index.js.map +0 -1
  35. package/lib/types/invariant.js.map +0 -1
  36. package/lib/types/lan.js.map +0 -1
  37. package/lib/types/mobile/api.js.map +0 -1
  38. package/lib/types/mobile/index.js.map +0 -1
  39. package/lib/types/mobile/messages.js.map +0 -1
  40. package/lib/types/mobile/messages.test.js.map +0 -1
  41. package/lib/types/mobile/mobile-styles.js.map +0 -1
  42. package/lib/types/mobile/mux.js.map +0 -1
  43. package/lib/types/mobile/rpc.js.map +0 -1
  44. package/lib/types/mobile/views/App.js.map +0 -1
  45. package/lib/types/mobile/views/ChatView.js.map +0 -1
  46. package/lib/types/mobile/views/SessionListView.js.map +0 -1
  47. package/lib/types/mobile/views/WorkspaceView.js.map +0 -1
  48. package/lib/types/mobile-api.js.map +0 -1
  49. package/lib/types/mobile-routes.js.map +0 -1
  50. package/lib/types/pairing.js.map +0 -1
  51. package/lib/types/routes.js.map +0 -1
  52. package/lib/types/tunnel.js.map +0 -1
package/README.md CHANGED
@@ -230,10 +230,19 @@ Notes:
230
230
  - Quick tunnels are free and need no login, but the hostname is random per
231
231
  run: every `cloudflared` restart changes it, so update `--trusted-host`
232
232
  and `publicBaseUrl` together. Cloudflare documents no uptime guarantees;
233
- in-flight-request concurrency is capped (HTTP 429 past it), and Quick
234
- Tunnels do not support Server-Sent Events — harmless here, because the
235
- only SSE surface (the desktop panel status stream) is loopback-only and
236
- the phone side uses plain requests plus heartbeats.
233
+ in-flight-request concurrency is capped (HTTP 429 past it), and **Quick
234
+ Tunnels do not forward Server-Sent Events**. `Tailscale Serve` (and
235
+ `tailscale serve` on a single port) behaves the same way. SSE is how the
236
+ phone receives **live messages** in real time, so over a quick tunnel or
237
+ Tailscale Serve the mobile chat falls back to polling: the phone still
238
+ sends and receives messages (everything else rides plain HTTP, which does
239
+ forward), only a new message may arrive a few seconds late instead of
240
+ instantly. The plugin polls `session.history` on a short interval once the
241
+ SSE channel goes silent, and resumes streaming as soon as SSE works again.
242
+ For true real-time push, point the QR at a tunnel that forwards SSE — a
243
+ Cloudflare **named tunnel** (domain hosted on Cloudflare, see below), or a
244
+ plain TCP port forward (LAN address, the `tailscale up` virtual-interface
245
+ address, or a manual `ssh -L` / cloudflared TCP tunnel to the port).
237
246
  - A quick tunnel is public: anyone with the URL can load the static page.
238
247
  The pairing gate is the real fence — unpaired devices get 403 on every
239
248
  `/api` call — so keep `requirePairingForLan` on.
@@ -346,4 +355,4 @@ QR as a dependency-free SVG component — no canvas, no server-side image
346
355
  generation. It is inlined into the client bundle at build time (like the
347
356
  official skin/turtle-ui plugins inline their non-shared deps), so profile
348
357
  installations need no extra runtime dependency beyond the dsh peer closure.
349
- `schemastery` is the DSH-standard config schema validator.
358
+ `schemastery` is the DSH-standard config schema validator.
package/lib/client.js CHANGED
@@ -1342,8 +1342,8 @@ window.__ModuleLoader__.load({
1342
1342
  }
1343
1343
  }
1344
1344
  //#endregion
1345
- //#region \0dsh-css:/Users/zcl/code/dsh-web-ui/packages/dsh-remote-web-ui/src/client/remote.module.css.mjs
1346
- const css$1 = "._1FzWja_overlay{z-index:1000;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}._1FzWja_mask{background:var(--dsw-alias-bg-mask-1);backdrop-filter:var(--dsw-mask-blur);position:absolute;inset:0}._1FzWja_trigger{width:36px;height:36px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:50%;flex:none;justify-content:center;align-items:center;padding:0;transition:background-color .12s,color .12s,box-shadow .12s;display:inline-flex}._1FzWja_trigger:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}._1FzWja_trigger:active:not(:disabled){background:var(--dsw-alias-interactive-bg-active)}._1FzWja_trigger:focus-visible{box-shadow:0 0 0 2px var(--dsw-alias-bg-layer-2), 0 0 0 4px var(--dsw-alias-brand-primary);outline:none}._1FzWja_trigger:disabled{opacity:.5;cursor:default}._1FzWja_panel{z-index:1;box-sizing:border-box;background:var(--dsw-alias-bg-layer-2);width:560px;max-width:calc(100vw - 48px);max-height:calc(100vh - 48px);box-shadow:var(--dsw-shadow-lv3);color:var(--dsw-alias-label-primary);border-radius:24px;flex-direction:column;gap:14px;padding:24px;font-size:14px;line-height:22px;display:flex;position:relative;overflow:auto}._1FzWja_header{align-items:flex-start;gap:12px;display:flex}._1FzWja_heading{flex:1;min-width:0}._1FzWja_title{margin:0;font-size:18px;font-weight:600;line-height:26px}._1FzWja_subtitle{color:var(--dsw-alias-label-secondary);margin:4px 0 0;font-size:13px}._1FzWja_close{width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:50%;flex:none;justify-content:center;align-items:center;padding:0;transition:background-color .12s,color .12s,box-shadow .12s;display:inline-flex}._1FzWja_close:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}._1FzWja_close:active:not(:disabled){background:var(--dsw-alias-interactive-bg-active)}._1FzWja_close:focus-visible{box-shadow:0 0 0 2px var(--dsw-alias-bg-layer-2), 0 0 0 4px var(--dsw-alias-brand-primary);outline:none}._1FzWja_close:disabled{opacity:.5;cursor:default}._1FzWja_card{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);border-radius:16px;flex-direction:column;align-items:center;gap:12px;padding:16px;display:flex}._1FzWja_cardHeader{justify-content:space-between;align-items:center;gap:12px;width:100%;display:flex}._1FzWja_cardTitle{font-weight:500}._1FzWja_badge{white-space:nowrap;border-radius:999px;flex:none;align-items:center;gap:6px;min-width:0;padding:2px 10px;font-size:12px;line-height:18px;display:inline-flex}._1FzWja_badge:before{content:\"\";background:currentColor;border-radius:50%;width:8px;height:8px}._1FzWja_badge-waiting{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-interactive-bg-hover)}._1FzWja_badge-connected{color:var(--dsw-alias-state-success-primary);background:var(--dsw-alias-interactive-bg-hover)}._1FzWja_badge-disconnected{color:var(--dsw-alias-state-warn-primary);background:var(--dsw-alias-interactive-bg-hover)}._1FzWja_badge-stopped{color:var(--dsw-alias-state-error-primary);background:var(--dsw-alias-interactive-bg-hover)}._1FzWja_badgePublic{color:var(--dsw-alias-brand-primary);background:var(--dsw-alias-interactive-bg-hover)}._1FzWja_badges{flex:none;align-items:center;gap:6px;display:inline-flex}._1FzWja_qrWrap{background:var(--dsw-alias-bg-base);border-radius:12px;justify-content:center;align-items:center;padding:12px;display:flex}._1FzWja_qr{display:block}._1FzWja_expired{color:var(--dsw-alias-state-error-primary);margin:0;font-size:13px}._1FzWja_expiry{color:var(--dsw-alias-label-secondary);margin:0;font-size:12px}._1FzWja_hint{color:var(--dsw-alias-label-secondary);margin:0;font-size:13px}._1FzWja_link{text-overflow:ellipsis;white-space:nowrap;color:var(--dsw-alias-label-caption);font-family:var(--dsw-font-mono,ui-monospace, monospace);margin:0;font-size:12px;overflow:hidden}._1FzWja_stoppedHint{color:var(--dsw-alias-state-error-primary);margin:0;font-size:13px}._1FzWja_tunnelNote{color:var(--dsw-alias-label-secondary);margin:0;font-size:13px}._1FzWja_tunnelFailed{color:var(--dsw-alias-state-error-primary);margin:0;font-size:13px}._1FzWja_actions{gap:8px;display:flex}._1FzWja_action{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-button-elevated-fill);height:34px;color:var(--dsw-alias-label-primary);cursor:pointer;white-space:nowrap;border-radius:10px;justify-content:center;align-items:center;gap:6px;padding:0 14px;font-size:13px;transition:background-color .12s,border-color .12s,box-shadow .12s;display:inline-flex}._1FzWja_action:hover:not(:disabled){background:var(--dsw-alias-button-floating-hover)}._1FzWja_action:active:not(:disabled){background:var(--dsw-alias-interactive-bg-active)}._1FzWja_action:focus-visible{box-shadow:0 0 0 2px var(--dsw-alias-bg-layer-2), 0 0 0 4px var(--dsw-alias-brand-primary);outline:none}._1FzWja_action:disabled{opacity:.5;cursor:default}._1FzWja_banner{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);border-radius:16px;padding:16px}._1FzWja_bannerTitle{color:var(--dsw-alias-state-warn-primary);margin:0;font-weight:500}._1FzWja_bannerHint{color:var(--dsw-alias-label-secondary);margin:6px 0 0;font-size:13px}._1FzWja_notice{z-index:2000;box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);max-width:min(420px,100vw - 32px);box-shadow:var(--dsw-shadow-lv3);border-radius:12px;padding:12px 16px;position:fixed;top:16px;left:50%;transform:translate(-50%)}._1FzWja_noticeTitle{color:var(--dsw-alias-state-error-primary);margin:0;font-weight:500}._1FzWja_noticeDetail{color:var(--dsw-alias-label-secondary);margin:4px 0 0;font-size:13px}._1FzWja_addresses{border:none;margin:12px 0 0;padding:0}._1FzWja_addresses legend{color:var(--dsw-alias-label-secondary);padding:0;font-size:13px}._1FzWja_address{color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;cursor:pointer;border-radius:6px;align-items:center;gap:8px;margin-top:6px;padding:4px 6px;font-size:13px;transition:background-color .12s;display:flex}._1FzWja_address:hover{background:var(--dsw-alias-interactive-bg-hover)}._1FzWja_address input:focus-visible{box-shadow:0 0 0 2px var(--dsw-alias-bg-layer-2), 0 0 0 4px var(--dsw-alias-brand-primary);border-radius:50%;outline:none}._1FzWja_addressValue{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--dsw-alias-label-secondary);flex:1;font-size:12px;overflow:hidden}._1FzWja_addressHint{color:var(--dsw-alias-label-tertiary);margin:6px 0 0;font-size:12px}@media (prefers-reduced-motion:reduce){._1FzWja_trigger,._1FzWja_close,._1FzWja_action,._1FzWja_address{transition:none}}";
1345
+ //#region \0dsh-css:/home/runner/work/dsh-web-ui/dsh-web-ui/packages/dsh-remote-web-ui/src/client/remote.module.css.mjs
1346
+ const css$1 = ".uw-Msq_overlay{z-index:1000;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.uw-Msq_mask{background:var(--dsw-alias-bg-mask-1);backdrop-filter:var(--dsw-mask-blur);position:absolute;inset:0}.uw-Msq_trigger{width:36px;height:36px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:50%;flex:none;justify-content:center;align-items:center;padding:0;transition:background-color .12s,color .12s,box-shadow .12s;display:inline-flex}.uw-Msq_trigger:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.uw-Msq_trigger:active:not(:disabled){background:var(--dsw-alias-interactive-bg-active)}.uw-Msq_trigger:focus-visible{box-shadow:0 0 0 2px var(--dsw-alias-bg-layer-2), 0 0 0 4px var(--dsw-alias-brand-primary);outline:none}.uw-Msq_trigger:disabled{opacity:.5;cursor:default}.uw-Msq_panel{z-index:1;box-sizing:border-box;background:var(--dsw-alias-bg-layer-2);width:560px;max-width:calc(100vw - 48px);max-height:calc(100vh - 48px);box-shadow:var(--dsw-shadow-lv3);color:var(--dsw-alias-label-primary);border-radius:24px;flex-direction:column;gap:14px;padding:24px;font-size:14px;line-height:22px;display:flex;position:relative;overflow:auto}.uw-Msq_header{align-items:flex-start;gap:12px;display:flex}.uw-Msq_heading{flex:1;min-width:0}.uw-Msq_title{margin:0;font-size:18px;font-weight:600;line-height:26px}.uw-Msq_subtitle{color:var(--dsw-alias-label-secondary);margin:4px 0 0;font-size:13px}.uw-Msq_close{width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:50%;flex:none;justify-content:center;align-items:center;padding:0;transition:background-color .12s,color .12s,box-shadow .12s;display:inline-flex}.uw-Msq_close:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.uw-Msq_close:active:not(:disabled){background:var(--dsw-alias-interactive-bg-active)}.uw-Msq_close:focus-visible{box-shadow:0 0 0 2px var(--dsw-alias-bg-layer-2), 0 0 0 4px var(--dsw-alias-brand-primary);outline:none}.uw-Msq_close:disabled{opacity:.5;cursor:default}.uw-Msq_card{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);border-radius:16px;flex-direction:column;align-items:center;gap:12px;padding:16px;display:flex}.uw-Msq_cardHeader{justify-content:space-between;align-items:center;gap:12px;width:100%;display:flex}.uw-Msq_cardTitle{font-weight:500}.uw-Msq_badge{white-space:nowrap;border-radius:999px;flex:none;align-items:center;gap:6px;min-width:0;padding:2px 10px;font-size:12px;line-height:18px;display:inline-flex}.uw-Msq_badge:before{content:\"\";background:currentColor;border-radius:50%;width:8px;height:8px}.uw-Msq_badge-waiting{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-interactive-bg-hover)}.uw-Msq_badge-connected{color:var(--dsw-alias-state-success-primary);background:var(--dsw-alias-interactive-bg-hover)}.uw-Msq_badge-disconnected{color:var(--dsw-alias-state-warn-primary);background:var(--dsw-alias-interactive-bg-hover)}.uw-Msq_badge-stopped{color:var(--dsw-alias-state-error-primary);background:var(--dsw-alias-interactive-bg-hover)}.uw-Msq_badgePublic{color:var(--dsw-alias-brand-primary);background:var(--dsw-alias-interactive-bg-hover)}.uw-Msq_badges{flex:none;align-items:center;gap:6px;display:inline-flex}.uw-Msq_qrWrap{background:var(--dsw-alias-bg-base);border-radius:12px;justify-content:center;align-items:center;padding:12px;display:flex}.uw-Msq_qr{display:block}.uw-Msq_expired{color:var(--dsw-alias-state-error-primary);margin:0;font-size:13px}.uw-Msq_expiry{color:var(--dsw-alias-label-secondary);margin:0;font-size:12px}.uw-Msq_hint{color:var(--dsw-alias-label-secondary);margin:0;font-size:13px}.uw-Msq_link{text-overflow:ellipsis;white-space:nowrap;color:var(--dsw-alias-label-caption);font-family:var(--dsw-font-mono,ui-monospace, monospace);margin:0;font-size:12px;overflow:hidden}.uw-Msq_stoppedHint{color:var(--dsw-alias-state-error-primary);margin:0;font-size:13px}.uw-Msq_tunnelNote{color:var(--dsw-alias-label-secondary);margin:0;font-size:13px}.uw-Msq_tunnelFailed{color:var(--dsw-alias-state-error-primary);margin:0;font-size:13px}.uw-Msq_actions{gap:8px;display:flex}.uw-Msq_action{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-button-elevated-fill);height:34px;color:var(--dsw-alias-label-primary);cursor:pointer;white-space:nowrap;border-radius:10px;justify-content:center;align-items:center;gap:6px;padding:0 14px;font-size:13px;transition:background-color .12s,border-color .12s,box-shadow .12s;display:inline-flex}.uw-Msq_action:hover:not(:disabled){background:var(--dsw-alias-button-floating-hover)}.uw-Msq_action:active:not(:disabled){background:var(--dsw-alias-interactive-bg-active)}.uw-Msq_action:focus-visible{box-shadow:0 0 0 2px var(--dsw-alias-bg-layer-2), 0 0 0 4px var(--dsw-alias-brand-primary);outline:none}.uw-Msq_action:disabled{opacity:.5;cursor:default}.uw-Msq_banner{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);border-radius:16px;padding:16px}.uw-Msq_bannerTitle{color:var(--dsw-alias-state-warn-primary);margin:0;font-weight:500}.uw-Msq_bannerHint{color:var(--dsw-alias-label-secondary);margin:6px 0 0;font-size:13px}.uw-Msq_notice{z-index:2000;box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);max-width:min(420px,100vw - 32px);box-shadow:var(--dsw-shadow-lv3);border-radius:12px;padding:12px 16px;position:fixed;top:16px;left:50%;transform:translate(-50%)}.uw-Msq_noticeTitle{color:var(--dsw-alias-state-error-primary);margin:0;font-weight:500}.uw-Msq_noticeDetail{color:var(--dsw-alias-label-secondary);margin:4px 0 0;font-size:13px}.uw-Msq_addresses{border:none;margin:12px 0 0;padding:0}.uw-Msq_addresses legend{color:var(--dsw-alias-label-secondary);padding:0;font-size:13px}.uw-Msq_address{color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;cursor:pointer;border-radius:6px;align-items:center;gap:8px;margin-top:6px;padding:4px 6px;font-size:13px;transition:background-color .12s;display:flex}.uw-Msq_address:hover{background:var(--dsw-alias-interactive-bg-hover)}.uw-Msq_address input:focus-visible{box-shadow:0 0 0 2px var(--dsw-alias-bg-layer-2), 0 0 0 4px var(--dsw-alias-brand-primary);border-radius:50%;outline:none}.uw-Msq_addressValue{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--dsw-alias-label-secondary);flex:1;font-size:12px;overflow:hidden}.uw-Msq_addressHint{color:var(--dsw-alias-label-tertiary);margin:6px 0 0;font-size:12px}@media (prefers-reduced-motion:reduce){.uw-Msq_trigger,.uw-Msq_close,.uw-Msq_action,.uw-Msq_address{transition:none}}";
1347
1347
  const tagId$1 = "@linxin666/dsh-remote-web-ui/remote.module.css";
1348
1348
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$1) + "]") === null) {
1349
1349
  const tag = document.createElement("style");
@@ -1353,46 +1353,46 @@ window.__ModuleLoader__.load({
1353
1353
  document.head.appendChild(tag);
1354
1354
  }
1355
1355
  var remote_module_css_default = {
1356
- "action": "_1FzWja_action",
1357
- "actions": "_1FzWja_actions",
1358
- "address": "_1FzWja_address",
1359
- "addressHint": "_1FzWja_addressHint",
1360
- "addressValue": "_1FzWja_addressValue",
1361
- "addresses": "_1FzWja_addresses",
1362
- "badge": "_1FzWja_badge",
1363
- "badge-connected": "_1FzWja_badge-connected",
1364
- "badge-disconnected": "_1FzWja_badge-disconnected",
1365
- "badge-stopped": "_1FzWja_badge-stopped",
1366
- "badge-waiting": "_1FzWja_badge-waiting",
1367
- "badgePublic": "_1FzWja_badgePublic",
1368
- "badges": "_1FzWja_badges",
1369
- "banner": "_1FzWja_banner",
1370
- "bannerHint": "_1FzWja_bannerHint",
1371
- "bannerTitle": "_1FzWja_bannerTitle",
1372
- "card": "_1FzWja_card",
1373
- "cardHeader": "_1FzWja_cardHeader",
1374
- "cardTitle": "_1FzWja_cardTitle",
1375
- "close": "_1FzWja_close",
1376
- "expired": "_1FzWja_expired",
1377
- "expiry": "_1FzWja_expiry",
1378
- "header": "_1FzWja_header",
1379
- "heading": "_1FzWja_heading",
1380
- "hint": "_1FzWja_hint",
1381
- "link": "_1FzWja_link",
1382
- "mask": "_1FzWja_mask",
1383
- "notice": "_1FzWja_notice",
1384
- "noticeDetail": "_1FzWja_noticeDetail",
1385
- "noticeTitle": "_1FzWja_noticeTitle",
1386
- "overlay": "_1FzWja_overlay",
1387
- "panel": "_1FzWja_panel",
1388
- "qr": "_1FzWja_qr",
1389
- "qrWrap": "_1FzWja_qrWrap",
1390
- "stoppedHint": "_1FzWja_stoppedHint",
1391
- "subtitle": "_1FzWja_subtitle",
1392
- "title": "_1FzWja_title",
1393
- "trigger": "_1FzWja_trigger",
1394
- "tunnelFailed": "_1FzWja_tunnelFailed",
1395
- "tunnelNote": "_1FzWja_tunnelNote"
1356
+ "action": "uw-Msq_action",
1357
+ "actions": "uw-Msq_actions",
1358
+ "address": "uw-Msq_address",
1359
+ "addressHint": "uw-Msq_addressHint",
1360
+ "addressValue": "uw-Msq_addressValue",
1361
+ "addresses": "uw-Msq_addresses",
1362
+ "badge": "uw-Msq_badge",
1363
+ "badge-connected": "uw-Msq_badge-connected",
1364
+ "badge-disconnected": "uw-Msq_badge-disconnected",
1365
+ "badge-stopped": "uw-Msq_badge-stopped",
1366
+ "badge-waiting": "uw-Msq_badge-waiting",
1367
+ "badgePublic": "uw-Msq_badgePublic",
1368
+ "badges": "uw-Msq_badges",
1369
+ "banner": "uw-Msq_banner",
1370
+ "bannerHint": "uw-Msq_bannerHint",
1371
+ "bannerTitle": "uw-Msq_bannerTitle",
1372
+ "card": "uw-Msq_card",
1373
+ "cardHeader": "uw-Msq_cardHeader",
1374
+ "cardTitle": "uw-Msq_cardTitle",
1375
+ "close": "uw-Msq_close",
1376
+ "expired": "uw-Msq_expired",
1377
+ "expiry": "uw-Msq_expiry",
1378
+ "header": "uw-Msq_header",
1379
+ "heading": "uw-Msq_heading",
1380
+ "hint": "uw-Msq_hint",
1381
+ "link": "uw-Msq_link",
1382
+ "mask": "uw-Msq_mask",
1383
+ "notice": "uw-Msq_notice",
1384
+ "noticeDetail": "uw-Msq_noticeDetail",
1385
+ "noticeTitle": "uw-Msq_noticeTitle",
1386
+ "overlay": "uw-Msq_overlay",
1387
+ "panel": "uw-Msq_panel",
1388
+ "qr": "uw-Msq_qr",
1389
+ "qrWrap": "uw-Msq_qrWrap",
1390
+ "stoppedHint": "uw-Msq_stoppedHint",
1391
+ "subtitle": "uw-Msq_subtitle",
1392
+ "title": "uw-Msq_title",
1393
+ "trigger": "uw-Msq_trigger",
1394
+ "tunnelFailed": "uw-Msq_tunnelFailed",
1395
+ "tunnelNote": "uw-Msq_tunnelNote"
1396
1396
  };
1397
1397
  //#endregion
1398
1398
  //#region src/client/RemotePanel.tsx
@@ -1857,8 +1857,8 @@ window.__ModuleLoader__.load({
1857
1857
  });
1858
1858
  }
1859
1859
  //#endregion
1860
- //#region \0dsh-css:/Users/zcl/code/dsh-web-ui/packages/dsh-remote-web-ui/src/client/settings-card.module.css.mjs
1861
- const css = ".jEUd8W_card{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);border-radius:8px;list-style:none;transition:border-color .16s,background .16s;overflow:hidden}.jEUd8W_cardOpen{background:var(--dsw-alias-bg-layer-2);border-color:var(--dsw-alias-label-dimmed)}.jEUd8W_header{cursor:pointer;text-align:left;width:100%;font:inherit;background:0 0;border:0;border-radius:8px;align-items:center;gap:8px;padding:10px 14px;transition:background-color .12s,box-shadow .12s;display:flex}.jEUd8W_header:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.jEUd8W_header:active:not(:disabled){background:var(--dsw-alias-interactive-bg-active)}.jEUd8W_header:focus-visible{box-shadow:0 0 0 2px var(--dsw-alias-bg-layer-3), 0 0 0 4px var(--dsw-alias-brand-primary);outline:none}.jEUd8W_header:disabled{opacity:.5;cursor:default}.jEUd8W_headText{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.jEUd8W_name{color:var(--dsw-alias-label-primary);font-weight:600}.jEUd8W_description{color:var(--dsw-alias-label-tertiary);font-size:12px}.jEUd8W_pending{color:var(--dsw-alias-state-warn-primary);font-size:12px}.jEUd8W_chevron{color:var(--dsw-alias-label-tertiary);transition:transform .12s}.jEUd8W_chevronOpen{transform:rotate(180deg)}.jEUd8W_body{flex-direction:column;gap:14px;padding:0 14px 14px;display:flex}.jEUd8W_readOnly{color:var(--dsw-alias-label-tertiary);margin:0;font-size:12px}.jEUd8W_footer{justify-content:flex-end;align-items:center;gap:8px;display:flex}.jEUd8W_failed{color:var(--dsw-alias-state-error-primary);margin:0 auto 0 0;font-size:12px}.jEUd8W_discard,.jEUd8W_save{font:inherit;cursor:pointer;border-radius:6px;padding:5px 12px;font-size:13px;transition:background-color .12s,border-color .12s,color .12s,box-shadow .12s}.jEUd8W_discard{border:1px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-secondary);background:0 0}.jEUd8W_discard:hover:not(:disabled){color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-label-dimmed)}.jEUd8W_discard:active:not(:disabled){background:var(--dsw-alias-interactive-bg-active)}.jEUd8W_discard:focus-visible{box-shadow:0 0 0 2px var(--dsw-alias-bg-layer-3), 0 0 0 4px var(--dsw-alias-brand-primary);outline:none}.jEUd8W_save{border:1px solid var(--dsw-alias-button-info-fill);background:var(--dsw-alias-button-info-fill);color:var(--dsw-alias-label-primary-foreground)}.jEUd8W_save:hover:not(:disabled){border-color:var(--dsw-alias-button-info-hover);background:var(--dsw-alias-button-info-hover)}.jEUd8W_save:active:not(:disabled){border-color:var(--dsw-alias-button-info-hover);background:var(--dsw-alias-button-info-hover);filter:brightness(.96)}.jEUd8W_save:focus-visible{box-shadow:0 0 0 2px var(--dsw-alias-bg-layer-3), 0 0 0 4px var(--dsw-alias-brand-primary);outline:none}.jEUd8W_discard:disabled,.jEUd8W_save:disabled{opacity:.5;cursor:default}.jEUd8W_field{flex-direction:column;gap:4px;display:flex}.jEUd8W_head{align-items:center;gap:8px;display:flex}.jEUd8W_label{color:var(--dsw-alias-label-primary);font-size:13px;font-weight:500}.jEUd8W_badges{align-items:center;gap:6px;display:flex}.jEUd8W_badge{background:var(--dsw-alias-interactive-bg-hover-accent);min-width:0;color:var(--dsw-alias-state-business-primary);white-space:nowrap;border-radius:999px;flex:none;padding:1px 6px;font-size:11px}.jEUd8W_reset{color:var(--dsw-alias-state-business-primary);cursor:pointer;background:0 0;border:0;border-radius:4px;flex:none;padding:1px 2px;font-size:11px;transition:background-color .12s,color .12s,box-shadow .12s}.jEUd8W_reset:hover:not(:disabled){color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-hover)}.jEUd8W_reset:active:not(:disabled){background:var(--dsw-alias-interactive-bg-active)}.jEUd8W_reset:focus-visible{box-shadow:0 0 0 2px var(--dsw-alias-bg-layer-3), 0 0 0 4px var(--dsw-alias-brand-primary);outline:none}.jEUd8W_reset:disabled{opacity:.5;cursor:default}.jEUd8W_input,.jEUd8W_select{border:1px solid var(--dsw-alias-border-l2);font:inherit;color:var(--dsw-alias-label-primary);background:var(--dsw-specific-input-major);border-radius:6px;padding:6px 8px;font-size:13px;transition:border-color .12s,box-shadow .12s}.jEUd8W_input:focus-visible,.jEUd8W_select:focus-visible{border-color:var(--dsw-alias-brand-primary);box-shadow:0 0 0 2px var(--dsw-alias-bg-layer-3), 0 0 0 4px var(--dsw-alias-brand-primary);outline:none}.jEUd8W_inputInvalid{border:1px solid var(--dsw-alias-state-error-primary);font:inherit;color:var(--dsw-alias-label-primary);border-radius:6px;padding:6px 8px;font-size:13px;transition:border-color .12s,box-shadow .12s}.jEUd8W_inputInvalid:focus-visible{border-color:var(--dsw-alias-state-error-primary);box-shadow:0 0 0 2px var(--dsw-alias-bg-layer-3), 0 0 0 4px var(--dsw-alias-state-error-primary);outline:none}.jEUd8W_input:disabled,.jEUd8W_select:disabled{opacity:.6}.jEUd8W_hint{color:var(--dsw-alias-label-secondary);margin:0;font-size:12px}.jEUd8W_invalid{color:var(--dsw-alias-state-error-primary);margin:0;font-size:12px}@media (prefers-reduced-motion:reduce){.jEUd8W_card,.jEUd8W_header,.jEUd8W_chevron,.jEUd8W_discard,.jEUd8W_save,.jEUd8W_reset,.jEUd8W_input,.jEUd8W_select,.jEUd8W_inputInvalid{transition:none}}";
1860
+ //#region \0dsh-css:/home/runner/work/dsh-web-ui/dsh-web-ui/packages/dsh-remote-web-ui/src/client/settings-card.module.css.mjs
1861
+ const css = ".AQSrBq_card{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);border-radius:8px;list-style:none;transition:border-color .16s,background .16s;overflow:hidden}.AQSrBq_cardOpen{background:var(--dsw-alias-bg-layer-2);border-color:var(--dsw-alias-label-dimmed)}.AQSrBq_header{cursor:pointer;text-align:left;width:100%;font:inherit;background:0 0;border:0;border-radius:8px;align-items:center;gap:8px;padding:10px 14px;transition:background-color .12s,box-shadow .12s;display:flex}.AQSrBq_header:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.AQSrBq_header:active:not(:disabled){background:var(--dsw-alias-interactive-bg-active)}.AQSrBq_header:focus-visible{box-shadow:0 0 0 2px var(--dsw-alias-bg-layer-3), 0 0 0 4px var(--dsw-alias-brand-primary);outline:none}.AQSrBq_header:disabled{opacity:.5;cursor:default}.AQSrBq_headText{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.AQSrBq_name{color:var(--dsw-alias-label-primary);font-weight:600}.AQSrBq_description{color:var(--dsw-alias-label-tertiary);font-size:12px}.AQSrBq_pending{color:var(--dsw-alias-state-warn-primary);font-size:12px}.AQSrBq_chevron{color:var(--dsw-alias-label-tertiary);transition:transform .12s}.AQSrBq_chevronOpen{transform:rotate(180deg)}.AQSrBq_body{flex-direction:column;gap:14px;padding:0 14px 14px;display:flex}.AQSrBq_readOnly{color:var(--dsw-alias-label-tertiary);margin:0;font-size:12px}.AQSrBq_footer{justify-content:flex-end;align-items:center;gap:8px;display:flex}.AQSrBq_failed{color:var(--dsw-alias-state-error-primary);margin:0 auto 0 0;font-size:12px}.AQSrBq_discard,.AQSrBq_save{font:inherit;cursor:pointer;border-radius:6px;padding:5px 12px;font-size:13px;transition:background-color .12s,border-color .12s,color .12s,box-shadow .12s}.AQSrBq_discard{border:1px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-secondary);background:0 0}.AQSrBq_discard:hover:not(:disabled){color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-label-dimmed)}.AQSrBq_discard:active:not(:disabled){background:var(--dsw-alias-interactive-bg-active)}.AQSrBq_discard:focus-visible{box-shadow:0 0 0 2px var(--dsw-alias-bg-layer-3), 0 0 0 4px var(--dsw-alias-brand-primary);outline:none}.AQSrBq_save{border:1px solid var(--dsw-alias-button-info-fill);background:var(--dsw-alias-button-info-fill);color:var(--dsw-alias-label-primary-foreground)}.AQSrBq_save:hover:not(:disabled){border-color:var(--dsw-alias-button-info-hover);background:var(--dsw-alias-button-info-hover)}.AQSrBq_save:active:not(:disabled){border-color:var(--dsw-alias-button-info-hover);background:var(--dsw-alias-button-info-hover);filter:brightness(.96)}.AQSrBq_save:focus-visible{box-shadow:0 0 0 2px var(--dsw-alias-bg-layer-3), 0 0 0 4px var(--dsw-alias-brand-primary);outline:none}.AQSrBq_discard:disabled,.AQSrBq_save:disabled{opacity:.5;cursor:default}.AQSrBq_field{flex-direction:column;gap:4px;display:flex}.AQSrBq_head{align-items:center;gap:8px;display:flex}.AQSrBq_label{color:var(--dsw-alias-label-primary);font-size:13px;font-weight:500}.AQSrBq_badges{align-items:center;gap:6px;display:flex}.AQSrBq_badge{background:var(--dsw-alias-interactive-bg-hover-accent);min-width:0;color:var(--dsw-alias-state-business-primary);white-space:nowrap;border-radius:999px;flex:none;padding:1px 6px;font-size:11px}.AQSrBq_reset{color:var(--dsw-alias-state-business-primary);cursor:pointer;background:0 0;border:0;border-radius:4px;flex:none;padding:1px 2px;font-size:11px;transition:background-color .12s,color .12s,box-shadow .12s}.AQSrBq_reset:hover:not(:disabled){color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-hover)}.AQSrBq_reset:active:not(:disabled){background:var(--dsw-alias-interactive-bg-active)}.AQSrBq_reset:focus-visible{box-shadow:0 0 0 2px var(--dsw-alias-bg-layer-3), 0 0 0 4px var(--dsw-alias-brand-primary);outline:none}.AQSrBq_reset:disabled{opacity:.5;cursor:default}.AQSrBq_input,.AQSrBq_select{border:1px solid var(--dsw-alias-border-l2);font:inherit;color:var(--dsw-alias-label-primary);background:var(--dsw-specific-input-major);border-radius:6px;padding:6px 8px;font-size:13px;transition:border-color .12s,box-shadow .12s}.AQSrBq_input:focus-visible,.AQSrBq_select:focus-visible{border-color:var(--dsw-alias-brand-primary);box-shadow:0 0 0 2px var(--dsw-alias-bg-layer-3), 0 0 0 4px var(--dsw-alias-brand-primary);outline:none}.AQSrBq_inputInvalid{border:1px solid var(--dsw-alias-state-error-primary);font:inherit;color:var(--dsw-alias-label-primary);border-radius:6px;padding:6px 8px;font-size:13px;transition:border-color .12s,box-shadow .12s}.AQSrBq_inputInvalid:focus-visible{border-color:var(--dsw-alias-state-error-primary);box-shadow:0 0 0 2px var(--dsw-alias-bg-layer-3), 0 0 0 4px var(--dsw-alias-state-error-primary);outline:none}.AQSrBq_input:disabled,.AQSrBq_select:disabled{opacity:.6}.AQSrBq_hint{color:var(--dsw-alias-label-secondary);margin:0;font-size:12px}.AQSrBq_invalid{color:var(--dsw-alias-state-error-primary);margin:0;font-size:12px}@media (prefers-reduced-motion:reduce){.AQSrBq_card,.AQSrBq_header,.AQSrBq_chevron,.AQSrBq_discard,.AQSrBq_save,.AQSrBq_reset,.AQSrBq_input,.AQSrBq_select,.AQSrBq_inputInvalid{transition:none}}";
1862
1862
  const tagId = "@linxin666/dsh-remote-web-ui/settings-card.module.css";
1863
1863
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
1864
1864
  const tag = document.createElement("style");
@@ -1868,32 +1868,32 @@ window.__ModuleLoader__.load({
1868
1868
  document.head.appendChild(tag);
1869
1869
  }
1870
1870
  var settings_card_module_css_default = {
1871
- "badge": "jEUd8W_badge",
1872
- "badges": "jEUd8W_badges",
1873
- "body": "jEUd8W_body",
1874
- "card": "jEUd8W_card",
1875
- "cardOpen": "jEUd8W_cardOpen",
1876
- "chevron": "jEUd8W_chevron",
1877
- "chevronOpen": "jEUd8W_chevronOpen",
1878
- "description": "jEUd8W_description",
1879
- "discard": "jEUd8W_discard",
1880
- "failed": "jEUd8W_failed",
1881
- "field": "jEUd8W_field",
1882
- "footer": "jEUd8W_footer",
1883
- "head": "jEUd8W_head",
1884
- "headText": "jEUd8W_headText",
1885
- "header": "jEUd8W_header",
1886
- "hint": "jEUd8W_hint",
1887
- "input": "jEUd8W_input",
1888
- "inputInvalid": "jEUd8W_inputInvalid",
1889
- "invalid": "jEUd8W_invalid",
1890
- "label": "jEUd8W_label",
1891
- "name": "jEUd8W_name",
1892
- "pending": "jEUd8W_pending",
1893
- "readOnly": "jEUd8W_readOnly",
1894
- "reset": "jEUd8W_reset",
1895
- "save": "jEUd8W_save",
1896
- "select": "jEUd8W_select"
1871
+ "badge": "AQSrBq_badge",
1872
+ "badges": "AQSrBq_badges",
1873
+ "body": "AQSrBq_body",
1874
+ "card": "AQSrBq_card",
1875
+ "cardOpen": "AQSrBq_cardOpen",
1876
+ "chevron": "AQSrBq_chevron",
1877
+ "chevronOpen": "AQSrBq_chevronOpen",
1878
+ "description": "AQSrBq_description",
1879
+ "discard": "AQSrBq_discard",
1880
+ "failed": "AQSrBq_failed",
1881
+ "field": "AQSrBq_field",
1882
+ "footer": "AQSrBq_footer",
1883
+ "head": "AQSrBq_head",
1884
+ "headText": "AQSrBq_headText",
1885
+ "header": "AQSrBq_header",
1886
+ "hint": "AQSrBq_hint",
1887
+ "input": "AQSrBq_input",
1888
+ "inputInvalid": "AQSrBq_inputInvalid",
1889
+ "invalid": "AQSrBq_invalid",
1890
+ "label": "AQSrBq_label",
1891
+ "name": "AQSrBq_name",
1892
+ "pending": "AQSrBq_pending",
1893
+ "readOnly": "AQSrBq_readOnly",
1894
+ "reset": "AQSrBq_reset",
1895
+ "save": "AQSrBq_save",
1896
+ "select": "AQSrBq_select"
1897
1897
  };
1898
1898
  //#endregion
1899
1899
  //#region src/client/PluginSettingsCard.tsx