dsh-zen-remote 2.3.11 → 2.4.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/CHANGELOG.md +39 -78
- package/README.md +94 -84
- package/README.zh-CN.md +90 -81
- package/bin/zen-remote.mjs +5 -0
- package/docs/interface.md +6 -6
- package/docs/remote-access.en.md +6 -4
- package/docs/remote-access.md +6 -4
- package/dsh-push.mjs +96 -10
- package/lib/adapters/dsh-better-sidebar/index.js +7 -3
- package/lib/adapters/dsh-better-sidebar/index.js.map +1 -1
- package/lib/admin-routes.js +10 -2
- package/lib/admin-routes.js.map +1 -1
- package/lib/cli/args.js +251 -0
- package/lib/cli/args.js.map +1 -0
- package/lib/cli/bootstrap.js +449 -0
- package/lib/cli/bootstrap.js.map +1 -0
- package/lib/cli/command-setup.js +484 -0
- package/lib/cli/command-setup.js.map +1 -0
- package/lib/cli/commands-client.js +359 -0
- package/lib/cli/commands-client.js.map +1 -0
- package/lib/cli/commands-host.js +1108 -0
- package/lib/cli/commands-host.js.map +1 -0
- package/lib/cli/commands-status.js +279 -0
- package/lib/cli/commands-status.js.map +1 -0
- package/lib/cli/config-writer.js +334 -0
- package/lib/cli/config-writer.js.map +1 -0
- package/lib/cli/context.js +10 -0
- package/lib/cli/context.js.map +1 -0
- package/lib/cli/i18n.js +620 -0
- package/lib/cli/i18n.js.map +1 -0
- package/lib/cli/ipc-client.js +160 -0
- package/lib/cli/ipc-client.js.map +1 -0
- package/lib/cli/ipc-server.js +464 -0
- package/lib/cli/ipc-server.js.map +1 -0
- package/lib/cli/main.js +245 -0
- package/lib/cli/main.js.map +1 -0
- package/lib/cli/qr-terminal.js +48 -0
- package/lib/cli/qr-terminal.js.map +1 -0
- package/lib/client-data/qr.js +286 -0
- package/lib/client-data/qr.js.map +1 -0
- package/lib/client-routes.js +308 -25
- package/lib/client-routes.js.map +1 -1
- package/lib/client.js +1013 -229
- package/lib/config.js +50 -12
- package/lib/config.js.map +1 -1
- package/lib/debug-report.js +28 -1
- package/lib/debug-report.js.map +1 -1
- package/lib/fetch-route-intercept.js +334 -26
- package/lib/fetch-route-intercept.js.map +1 -1
- package/lib/index.js +564 -363
- package/lib/index.js.map +1 -1
- package/lib/intercept.js +1833 -280
- package/lib/intercept.js.map +1 -1
- package/lib/lan-gate-server.cjs +36 -10
- package/lib/merge-streams.js +103 -11
- package/lib/merge-streams.js.map +1 -1
- package/lib/plugin-route-intercept.js +93 -63
- package/lib/plugin-route-intercept.js.map +1 -1
- package/lib/relay-access.js +8 -1
- package/lib/relay-access.js.map +1 -1
- package/lib/relay-client.js +133 -4
- package/lib/relay-client.js.map +1 -1
- package/lib/relay-pool.js +275 -0
- package/lib/relay-pool.js.map +1 -0
- package/lib/relay-server.js +269 -17
- package/lib/relay-server.js.map +1 -1
- package/lib/restart-fields.js +6 -4
- package/lib/restart-fields.js.map +1 -1
- package/lib/share-store.js +65 -27
- package/lib/share-store.js.map +1 -1
- package/lib/state-store.js +400 -0
- package/lib/state-store.js.map +1 -0
- package/lib/types/adapters/dsh-better-sidebar/index.d.ts +3 -2
- package/lib/types/adapters/dsh-better-sidebar/index.d.ts.map +1 -1
- package/lib/types/admin-routes.d.ts.map +1 -1
- package/lib/types/cli/args.d.ts +78 -0
- package/lib/types/cli/args.d.ts.map +1 -0
- package/lib/types/cli/bootstrap.d.ts +170 -0
- package/lib/types/cli/bootstrap.d.ts.map +1 -0
- package/lib/types/cli/command-setup.d.ts +72 -0
- package/lib/types/cli/command-setup.d.ts.map +1 -0
- package/lib/types/cli/commands-client.d.ts +36 -0
- package/lib/types/cli/commands-client.d.ts.map +1 -0
- package/lib/types/cli/commands-host.d.ts +82 -0
- package/lib/types/cli/commands-host.d.ts.map +1 -0
- package/lib/types/cli/commands-status.d.ts +46 -0
- package/lib/types/cli/commands-status.d.ts.map +1 -0
- package/lib/types/cli/config-writer.d.ts +92 -0
- package/lib/types/cli/config-writer.d.ts.map +1 -0
- package/lib/types/cli/context.d.ts +39 -0
- package/lib/types/cli/context.d.ts.map +1 -0
- package/lib/types/cli/i18n.d.ts +32 -0
- package/lib/types/cli/i18n.d.ts.map +1 -0
- package/lib/types/cli/ipc-client.d.ts +83 -0
- package/lib/types/cli/ipc-client.d.ts.map +1 -0
- package/lib/types/cli/ipc-server.d.ts +113 -0
- package/lib/types/cli/ipc-server.d.ts.map +1 -0
- package/lib/types/cli/main.d.ts +57 -0
- package/lib/types/cli/main.d.ts.map +1 -0
- package/lib/types/cli/qr-terminal.d.ts +17 -0
- package/lib/types/cli/qr-terminal.d.ts.map +1 -0
- package/lib/types/client/RemoteStatusIcon.d.ts.map +1 -1
- package/lib/types/client/current-session-report.d.ts +4 -0
- package/lib/types/client/current-session-report.d.ts.map +1 -1
- package/lib/types/client/effects/model-group-side.d.ts.map +1 -1
- package/lib/types/client/effects/remote-session.d.ts.map +1 -1
- package/lib/types/client/locales.d.ts +47 -3
- package/lib/types/client/locales.d.ts.map +1 -1
- package/lib/types/client/settings/SettingsSection.d.ts.map +1 -1
- package/lib/types/client/settings/settings-css.d.ts +1 -1
- package/lib/types/client/settings/settings-css.d.ts.map +1 -1
- package/lib/types/client/styles/remote-session.css.d.ts +1 -1
- package/lib/types/client/styles/remote-session.css.d.ts.map +1 -1
- package/lib/types/client/wizard/GatewayWizard.d.ts.map +1 -1
- package/lib/types/client/wizard/cards/ProxyCard.d.ts.map +1 -1
- package/lib/types/client/wizard/wizard-css.d.ts +1 -1
- package/lib/types/client/wizard/wizard-css.d.ts.map +1 -1
- package/lib/types/client-data/model-group-side.d.ts +23 -2
- package/lib/types/client-data/model-group-side.d.ts.map +1 -1
- package/lib/types/client-data/remote-status.d.ts +47 -1
- package/lib/types/client-data/remote-status.d.ts.map +1 -1
- package/lib/types/client-data/settings-form.d.ts +85 -1
- package/lib/types/client-data/settings-form.d.ts.map +1 -1
- package/lib/types/client-data/wizard.d.ts +56 -1
- package/lib/types/client-data/wizard.d.ts.map +1 -1
- package/lib/types/client-routes.d.ts +25 -1
- package/lib/types/client-routes.d.ts.map +1 -1
- package/lib/types/config.d.ts +40 -14
- package/lib/types/config.d.ts.map +1 -1
- package/lib/types/debug-report.d.ts.map +1 -1
- package/lib/types/fetch-route-intercept.d.ts +66 -8
- package/lib/types/fetch-route-intercept.d.ts.map +1 -1
- package/lib/types/index.d.ts +9 -2
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/intercept.d.ts +72 -10
- package/lib/types/intercept.d.ts.map +1 -1
- package/lib/types/merge-streams.d.ts +79 -1
- package/lib/types/merge-streams.d.ts.map +1 -1
- package/lib/types/plugin-route-intercept.d.ts +25 -9
- package/lib/types/plugin-route-intercept.d.ts.map +1 -1
- package/lib/types/relay-access.d.ts +3 -1
- package/lib/types/relay-access.d.ts.map +1 -1
- package/lib/types/relay-client.d.ts +23 -2
- package/lib/types/relay-client.d.ts.map +1 -1
- package/lib/types/relay-pool.d.ts +148 -0
- package/lib/types/relay-pool.d.ts.map +1 -0
- package/lib/types/relay-server.d.ts +30 -3
- package/lib/types/relay-server.d.ts.map +1 -1
- package/lib/types/restart-fields.d.ts +5 -5
- package/lib/types/restart-fields.d.ts.map +1 -1
- package/lib/types/share-store.d.ts.map +1 -1
- package/lib/types/state-store.d.ts +179 -0
- package/lib/types/state-store.d.ts.map +1 -0
- package/lib/types/upload-limits.d.ts +15 -0
- package/lib/types/upload-limits.d.ts.map +1 -1
- package/lib/types/virtual-id.d.ts +21 -0
- package/lib/types/virtual-id.d.ts.map +1 -1
- package/lib/types/wizard/probe.d.ts.map +1 -1
- package/lib/types/wizard/proxy-snippets.d.ts +3 -0
- package/lib/types/wizard/proxy-snippets.d.ts.map +1 -1
- package/lib/types/wizard/routes.d.ts +1 -0
- package/lib/types/wizard/routes.d.ts.map +1 -1
- package/lib/types/wizard/status.d.ts +9 -0
- package/lib/types/wizard/status.d.ts.map +1 -1
- package/lib/types/wizard/verify.d.ts +3 -0
- package/lib/types/wizard/verify.d.ts.map +1 -1
- package/lib/upload-limits.js +15 -0
- package/lib/upload-limits.js.map +1 -1
- package/lib/virtual-id.js +60 -0
- package/lib/virtual-id.js.map +1 -1
- package/lib/wizard/probe.js +46 -1
- package/lib/wizard/probe.js.map +1 -1
- package/lib/wizard/proxy-snippets.js +14 -1
- package/lib/wizard/proxy-snippets.js.map +1 -1
- package/lib/wizard/routes.js +23 -4
- package/lib/wizard/routes.js.map +1 -1
- package/lib/wizard/status.js +21 -0
- package/lib/wizard/status.js.map +1 -1
- package/lib/wizard/verify.js +31 -8
- package/lib/wizard/verify.js.map +1 -1
- package/package.json +8 -4
- package/pwa/icons/badge-96.png +0 -0
- package/pwa/icons/badge.svg +1 -0
- package/pwa/manifest.json +2 -1
- package/pwa/sw.js +3 -1
- package/scripts/check-debug-report.mjs +41 -1
- package/scripts/check-settings-form.mjs +14 -3
- package/scripts/check-settings-view.mjs +247 -0
- package/scripts/check-wizard-ui.mjs +37 -0
- package/src/adapters/dsh-better-sidebar/index.ts +7 -3
- package/src/admin-routes.ts +10 -2
- package/src/cli/args.ts +289 -0
- package/src/cli/bootstrap.ts +569 -0
- package/src/cli/command-setup.ts +540 -0
- package/src/cli/commands-client.ts +369 -0
- package/src/cli/commands-host.ts +1127 -0
- package/src/cli/commands-status.ts +296 -0
- package/src/cli/config-writer.ts +354 -0
- package/src/cli/context.ts +38 -0
- package/src/cli/i18n.ts +645 -0
- package/src/cli/ipc-client.ts +216 -0
- package/src/cli/ipc-server.ts +531 -0
- package/src/cli/main.ts +285 -0
- package/src/cli/qr-terminal.ts +49 -0
- package/src/client/RemoteStatusIcon.tsx +4 -1
- package/src/client/current-session-report.ts +28 -4
- package/src/client/effects/model-group-side.ts +19 -5
- package/src/client/effects/remote-session.ts +26 -6
- package/src/client/locales.ts +96 -6
- package/src/client/settings/SettingsSection.tsx +287 -92
- package/src/client/settings/settings-css.ts +18 -0
- package/src/client/styles/remote-session.css.ts +15 -1
- package/src/client/wizard/GatewayWizard.tsx +470 -109
- package/src/client/wizard/cards/ProxyCard.tsx +2 -1
- package/src/client/wizard/wizard-css.ts +23 -0
- package/src/client-data/model-group-side.ts +37 -10
- package/src/client-data/remote-status.ts +112 -17
- package/src/client-data/settings-form.ts +164 -8
- package/src/client-data/wizard.ts +112 -2
- package/src/client-routes.ts +334 -26
- package/src/config.ts +62 -16
- package/src/debug-report.ts +27 -1
- package/src/fetch-route-intercept.ts +381 -32
- package/src/index.ts +566 -367
- package/src/intercept.ts +1866 -286
- package/src/merge-streams.ts +155 -10
- package/src/plugin-route-intercept.ts +120 -71
- package/src/relay-access.ts +14 -3
- package/src/relay-client.ts +163 -5
- package/src/relay-pool.ts +387 -0
- package/src/relay-server.ts +312 -16
- package/src/restart-fields.ts +6 -4
- package/src/share-store.ts +59 -26
- package/src/state-store.ts +428 -0
- package/src/upload-limits.ts +16 -0
- package/src/virtual-id.ts +57 -0
- package/src/wizard/probe.ts +54 -2
- package/src/wizard/proxy-snippets.ts +17 -2
- package/src/wizard/routes.ts +24 -5
- package/src/wizard/status.ts +28 -0
- package/src/wizard/verify.ts +33 -11
- package/AGENTS.md +0 -185
- package/docs/adr/0001-plugin-bridge-forwards-plugin-routes.md +0 -15
- package/docs/adr/0002-relay-emulates-websocket.md +0 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProxyCard.d.ts","sourceRoot":"","sources":["../../../../../src/client/wizard/cards/ProxyCard.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAG9C,MAAM,WAAW,cAAc;IAC7B,CAAC,EAAE,OAAO,CAAA;IACV,uEAAuE;IACvE,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,CAAA;IACpB,8DAA8D;IAC9D,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB;AAED,wBAAgB,SAAS,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,cAAc,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"ProxyCard.d.ts","sourceRoot":"","sources":["../../../../../src/client/wizard/cards/ProxyCard.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAG9C,MAAM,WAAW,cAAc;IAC7B,CAAC,EAAE,OAAO,CAAA;IACV,uEAAuE;IACvE,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,CAAA;IACpB,8DAA8D;IAC9D,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB;AAED,wBAAgB,SAAS,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,cAAc,GAAG,SAAS,CAiClG"}
|
|
@@ -6,5 +6,5 @@
|
|
|
6
6
|
* the component mounts. Same transcription discipline as settings-css.ts
|
|
7
7
|
* (host design tokens only, no literal colors).
|
|
8
8
|
*/
|
|
9
|
-
export declare const WIZARD_CSS = "\n[data-plugin-detail=\"dsh-zen-remote\"] section[data-plugin-config]:empty {\n display: none;\n}\n\n[data-zen-remote=\"wizard\"] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n width: 100%;\n box-sizing: border-box;\n margin-inline: auto;\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 12px;\n background: var(--dsw-alias-bg-layer-2, var(--dsw-alias-bg-module-platform));\n padding: 18px 20px;\n}\n\n[data-zen-remote=\"wizard\"] .zr-wizard-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 12px;\n flex-wrap: wrap;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-headerText {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-title {\n font-size: 15px;\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n margin: 0;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-subtitle {\n font-size: 12.5px;\n color: var(--dsw-alias-label-tertiary);\n margin: 0;\n line-height: 1.45;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-statusBadge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n font-weight: 500;\n padding: 4px 10px;\n border-radius: 999px;\n border: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-3, var(--dsw-alias-bg-module-platform));\n color: var(--dsw-alias-label-secondary);\n white-space: nowrap;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-statusBadge[data-state=\"pass\"] {\n color: var(--dsw-alias-label-primary);\n}\n\n[data-zen-remote=\"wizard\"] .zr-wizard-notice {\n font-size: 12.5px;\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 8px;\n padding: 9px 12px;\n background: var(--dsw-alias-bg-layer-3, var(--dsw-alias-bg-module-platform));\n color: var(--dsw-alias-label-secondary);\n margin: 0;\n line-height: 1.45;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-notice[data-tone=\"error\"] {\n border-color: var(--dsw-alias-state-error-primary, #d5304f);\n color: var(--dsw-alias-state-error-primary, #d5304f);\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-notice[data-tone=\"ok\"] {\n border-color: var(--dsw-alias-state-success-primary, #16a34a);\n color: var(--dsw-alias-state-success-primary, #16a34a);\n}\n\n/* Inline Status Overview Card (2x2 spacious layout, full text visibility) */\n[data-zen-remote=\"wizard\"] .zr-wizard-overviewGrid {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 12px;\n}\n@media (max-width: 560px) {\n [data-zen-remote=\"wizard\"] .zr-wizard-overviewGrid {\n grid-template-columns: 1fr;\n }\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-overviewItem {\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 13px 15px;\n border-radius: 10px;\n border: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-3, var(--dsw-alias-bg-module-platform));\n min-width: 0;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-overviewHead {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-overviewLabel {\n font-size: 12px;\n color: var(--dsw-alias-label-tertiary);\n margin: 0;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-overviewValue {\n display: flex;\n align-items: center;\n gap: 7px;\n font-size: 13.5px;\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n margin: 0;\n line-height: 1.45;\n overflow-wrap: anywhere;\n word-break: break-word;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-overviewSub {\n font-size: 12px;\n color: var(--dsw-alias-label-secondary);\n margin: 0;\n line-height: 1.45;\n overflow-wrap: anywhere;\n word-break: break-word;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-emptyBanner {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n flex-wrap: wrap;\n padding: 14px 16px;\n border-radius: 10px;\n border: 1px dashed var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-3, var(--dsw-alias-bg-module-platform));\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-emptyText {\n font-size: 12.5px;\n color: var(--dsw-alias-label-secondary);\n line-height: 1.5;\n margin: 0;\n flex: 1;\n min-width: 220px;\n}\n\n/* Wizard Modal Dialog (above app chrome, below helper sub-cards) */\n[data-zen-remote=\"wizard-modal\"] {\n position: fixed;\n inset: 0;\n z-index: 950;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 16px;\n background: rgba(0, 0, 0, 0.5);\n backdrop-filter: blur(2px);\n}\n[data-zen-remote=\"wizard-modal\"] .zr-wizard-modalDialog {\n width: min(680px, calc(100vw - 32px));\n max-height: min(88vh, 760px);\n display: flex;\n flex-direction: column;\n border-radius: 14px;\n border: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-2, var(--dsw-alias-bg-module-platform));\n color: var(--dsw-alias-label-primary);\n box-shadow: 0 20px 48px rgba(0, 0, 0, 0.28);\n overflow: hidden;\n}\n[data-zen-remote=\"wizard-modal\"] .zr-wizard-modalHeader {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n padding: 16px 22px 14px;\n}\n[data-zen-remote=\"wizard-modal\"] .zr-wizard-modalTitle {\n font-size: 15.5px;\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n margin: 0;\n}\n[data-zen-remote=\"wizard-modal\"] .zr-wizard-modalBody {\n padding: 18px 22px;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n gap: 16px;\n flex: 1;\n}\n[data-zen-remote=\"wizard-modal\"] .zr-wizard-modalFooter {\n padding: 14px 22px;\n border-top: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-2, var(--dsw-alias-bg-module-platform));\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n/* Non-clickable 3-step visual progress indicator */\n[data-zen-remote=\"wizard\"] .zr-wizard-stepper {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 10px;\n padding: 13px 22px;\n margin: 0;\n list-style: none;\n background: var(--dsw-alias-bg-layer-3, var(--dsw-alias-bg-module-platform));\n border-top: 1px solid var(--dsw-alias-border-l2);\n border-bottom: 1px solid var(--dsw-alias-border-l2);\n user-select: none;\n pointer-events: none;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-stepItem {\n display: flex;\n align-items: center;\n gap: 10px;\n min-width: 0;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-stepCircle {\n width: 26px;\n height: 26px;\n border-radius: 50%;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n font-weight: 600;\n border: 1.5px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-2, var(--dsw-alias-bg-module-platform));\n color: var(--dsw-alias-label-tertiary);\n flex: none;\n transition: background-color 160ms ease, border-color 160ms ease, color 160ms ease, box-shadow 160ms ease;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-stepItem[data-state=\"current\"] .zr-wizard-stepCircle {\n background: var(--dsw-alias-label-primary);\n border-color: var(--dsw-alias-label-primary);\n color: var(--dsw-alias-bg-layer-2, #fff);\n box-shadow: 0 0 0 3px var(--dsw-alias-border-l2);\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-stepItem[data-state=\"done\"] .zr-wizard-stepCircle {\n background: var(--dsw-alias-state-success-primary, #16a34a);\n border-color: var(--dsw-alias-state-success-primary, #16a34a);\n color: #fff;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-stepText {\n display: flex;\n flex-direction: column;\n gap: 1px;\n min-width: 0;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-stepTag {\n font-size: 11px;\n color: var(--dsw-alias-label-tertiary);\n line-height: 1.2;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-stepItem[data-state=\"current\"] .zr-wizard-stepTag {\n color: var(--dsw-alias-label-secondary);\n font-weight: 500;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-stepItem[data-state=\"done\"] .zr-wizard-stepTag {\n color: var(--dsw-alias-state-success-primary, #16a34a);\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-stepName {\n font-size: 13px;\n font-weight: 500;\n color: var(--dsw-alias-label-tertiary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-stepItem[data-state=\"current\"] .zr-wizard-stepName {\n color: var(--dsw-alias-label-primary);\n font-weight: 600;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-stepItem[data-state=\"done\"] .zr-wizard-stepName {\n color: var(--dsw-alias-label-secondary);\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-stepConnector {\n flex: 1;\n height: 2px;\n min-width: 18px;\n border-radius: 2px;\n background: var(--dsw-alias-border-l2);\n transition: background-color 200ms ease;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-stepConnector[data-done=\"true\"] {\n background: var(--dsw-alias-state-success-primary, #16a34a);\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-stepIntro {\n font-size: 12.5px;\n color: var(--dsw-alias-label-secondary);\n margin: 0;\n line-height: 1.45;\n}\n\n[data-zen-remote=\"wizard\"] .zr-wizard-body {\n display: flex;\n flex-direction: column;\n gap: 14px;\n}\n\n/* Step 1: 3-column path cards */\n[data-zen-remote=\"wizard\"] .zr-wizard-paths {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 10px;\n margin: 0;\n padding: 0;\n border: none;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-path {\n display: flex;\n flex-direction: column;\n gap: 6px;\n text-align: left;\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 10px;\n padding: 12px 14px;\n background: var(--dsw-alias-bg-layer-3, var(--dsw-alias-bg-module-platform));\n cursor: pointer;\n font: inherit;\n color: inherit;\n transition: border-color 120ms ease, box-shadow 120ms ease;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-path:hover:not(:disabled) {\n border-color: var(--dsw-alias-label-secondary);\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-path[data-selected=\"true\"] {\n border-color: var(--dsw-alias-label-primary);\n box-shadow: 0 0 0 1px var(--dsw-alias-label-primary);\n background: var(--dsw-alias-bg-layer-2, var(--dsw-alias-bg-module-platform));\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-path:disabled {\n cursor: not-allowed;\n opacity: 0.55;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-pathHead {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-pathRadio {\n width: 14px;\n height: 14px;\n border-radius: 50%;\n border: 1.5px solid var(--dsw-alias-label-tertiary);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex: none;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-pathRadio[data-selected=\"true\"] {\n border-color: var(--dsw-alias-label-primary);\n background: var(--dsw-alias-label-primary);\n box-shadow: inset 0 0 0 2.5px var(--dsw-alias-bg-layer-2, var(--dsw-alias-bg-module-platform));\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-pathName {\n font-size: 13px;\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n margin: 0;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-pathDesc {\n font-size: 12px;\n color: var(--dsw-alias-label-tertiary);\n margin: 0;\n line-height: 1.45;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-sectionTitle {\n font-size: 12px;\n font-weight: 600;\n color: var(--dsw-alias-label-secondary);\n margin: 0;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-roleGrid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));\n gap: 10px;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-checkRow {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n font-size: 12.5px;\n color: var(--dsw-alias-label-primary);\n cursor: pointer;\n user-select: none;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-checkRow input[type=\"checkbox\"] {\n margin: 0;\n cursor: pointer;\n}\n\n/* Step 2: form controls */\n[data-zen-remote=\"wizard\"] .zr-wizard-selectedBar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n padding: 8px 12px;\n border-radius: 8px;\n border: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-3, var(--dsw-alias-bg-module-platform));\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-selectedLabel {\n font-size: 12.5px;\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-formStack {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-formGrid {\n display: grid;\n grid-template-columns: 1fr 120px;\n gap: 12px;\n align-items: start;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-field {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-labelRow {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-label {\n font-size: 12.5px;\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n margin: 0;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-savedTag {\n font-size: 11px;\n padding: 1px 7px;\n border-radius: 999px;\n border: 1px solid var(--dsw-alias-border-l2);\n color: var(--dsw-alias-state-success-primary, #16a34a);\n background: var(--dsw-alias-bg-layer-3, var(--dsw-alias-bg-module-platform));\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-hint {\n font-size: 12px;\n color: var(--dsw-alias-label-tertiary);\n margin: 0;\n line-height: 1.4;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-input {\n height: 34px;\n font: inherit;\n font-size: 13px;\n padding: 0 10px;\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 8px;\n background: var(--dsw-alias-bg-layer-3, var(--dsw-alias-bg-module-platform));\n color: var(--dsw-alias-label-primary);\n width: 100%;\n box-sizing: border-box;\n}\n[data-zen-remote=\"wizard\"] code.zr-wizard-input {\n display: flex;\n align-items: center;\n min-height: 36px;\n height: auto;\n padding: 6px 12px;\n font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n line-height: 1.4;\n overflow-wrap: anywhere;\n word-break: break-all;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-input:focus {\n outline: none;\n border-color: var(--dsw-alias-label-primary);\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-row {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-link {\n background: none;\n border: none;\n padding: 0;\n font: inherit;\n font-size: 12px;\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n text-decoration: underline;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-link:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-linkBtn {\n font: inherit;\n font-size: 12px;\n padding: 4px 10px;\n border-radius: 6px;\n border: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-3, var(--dsw-alias-bg-module-platform));\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-linkBtn:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n border-color: var(--dsw-alias-label-secondary);\n}\n\n/* Primary & Secondary action buttons + Footer */\n[data-zen-remote=\"wizard\"] .zr-wizard-footer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 10px;\n padding-top: 8px;\n border-top: 1px solid var(--dsw-alias-border-l2);\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-footerHint {\n font-size: 12px;\n color: var(--dsw-alias-label-secondary);\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-btn,\n[data-zen-remote=\"wizard-card\"] .zr-wizard-btn {\n font: inherit;\n font-size: 12.5px;\n font-weight: 500;\n height: 32px;\n padding: 0 14px;\n border-radius: 8px;\n border: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-3, var(--dsw-alias-bg-module-platform));\n color: var(--dsw-alias-label-primary);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-btn:hover:not(:disabled),\n[data-zen-remote=\"wizard-card\"] .zr-wizard-btn:hover:not(:disabled) {\n border-color: var(--dsw-alias-label-secondary);\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-btnPrimary,\n[data-zen-remote=\"wizard-card\"] .zr-wizard-btnPrimary {\n background: var(--dsw-alias-label-primary);\n border-color: var(--dsw-alias-label-primary);\n color: var(--dsw-alias-bg-layer-2, #fff);\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-btnPrimary:hover:not(:disabled),\n[data-zen-remote=\"wizard-card\"] .zr-wizard-btnPrimary:hover:not(:disabled) {\n opacity: 0.9;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-btn:disabled,\n[data-zen-remote=\"wizard-card\"] .zr-wizard-btn:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n/* Step 3: service control bar, 3-column lights, and QR pairing panel */\n[data-zen-remote=\"wizard\"] .zr-wizard-serviceBar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n flex-wrap: wrap;\n padding: 10px 12px;\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 10px;\n background: var(--dsw-alias-bg-layer-3, var(--dsw-alias-bg-module-platform));\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-serviceInfo {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-lights {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n gap: 8px;\n margin: 0;\n padding: 0;\n list-style: none;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-light {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n padding: 9px 12px;\n border-radius: 8px;\n border: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-3, var(--dsw-alias-bg-module-platform));\n font-size: 12.5px;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-lightMain {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-lightName {\n color: var(--dsw-alias-label-primary);\n font-weight: 500;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-lightState {\n font-size: 11.5px;\n color: var(--dsw-alias-label-tertiary);\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-lightState[data-state=\"pass\"] {\n color: var(--dsw-alias-state-success-primary, #16a34a);\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-lightState[data-state=\"fail\"] {\n color: var(--dsw-alias-state-error-primary, #d5304f);\n}\n\n[data-zen-remote=\"wizard\"] .zr-wizard-dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: var(--dsw-alias-label-tertiary);\n flex: none;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-dot[data-state=\"pass\"] {\n background: var(--dsw-alias-state-success-primary, #16a34a);\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-dot[data-state=\"fail\"] {\n background: var(--dsw-alias-state-error-primary, #d5304f);\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-dot[data-state=\"pending\"] {\n background: var(--dsw-alias-state-warning-primary, #b8860b);\n}\n\n[data-zen-remote=\"wizard\"] .zr-wizard-pairPanel {\n display: flex;\n align-items: center;\n gap: 18px;\n flex-wrap: wrap;\n padding: 14px;\n border-radius: 10px;\n border: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-3, var(--dsw-alias-bg-module-platform));\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-pairMeta {\n display: flex;\n flex-direction: column;\n gap: 4px;\n flex: 1;\n min-width: 180px;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-code {\n font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n font-size: 24px;\n letter-spacing: 4px;\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n margin: 2px 0;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-countdown {\n font-size: 12px;\n color: var(--dsw-alias-label-secondary);\n margin: 0;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-qr {\n width: 156px;\n height: 156px;\n image-rendering: pixelated;\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 8px;\n background: #fff;\n display: block;\n flex: none;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-qr[data-usable=\"false\"] {\n display: none;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-targetTabs {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n gap: 6px;\n padding: 4px;\n border-radius: 9px;\n border: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-3, var(--dsw-alias-bg-module-platform));\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-targetTab {\n font: inherit;\n font-size: 12.5px;\n font-weight: 500;\n padding: 7px 12px;\n border-radius: 6px;\n border: 1px solid transparent;\n background: transparent;\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n text-align: center;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-targetTab[data-selected=\"true\"] {\n background: var(--dsw-alias-bg-layer-2, var(--dsw-alias-bg-module-platform));\n border-color: var(--dsw-alias-border-l2);\n color: var(--dsw-alias-label-primary);\n font-weight: 600;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-desktopBox,\n[data-zen-remote=\"wizard\"] .zr-wizard-clientBox {\n display: flex;\n flex-direction: column;\n gap: 10px;\n padding: 14px;\n border-radius: 10px;\n border: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-3, var(--dsw-alias-bg-module-platform));\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-deviceList {\n display: flex;\n flex-direction: column;\n gap: 10px;\n margin: 0;\n padding: 0;\n list-style: none;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-deviceItem {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 12px 14px;\n border-radius: 10px;\n border: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-3, var(--dsw-alias-bg-module-platform));\n font-size: 12.5px;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-deviceHead {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 10px;\n flex-wrap: wrap;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-deviceTitleRow {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n min-width: 0;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-deviceBadge {\n font-size: 11px;\n font-weight: 500;\n padding: 2px 8px;\n border-radius: 999px;\n border: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-2, var(--dsw-alias-bg-module-platform));\n color: var(--dsw-alias-label-secondary);\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-deviceActions {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-select {\n height: 30px;\n font: inherit;\n font-size: 12px;\n padding: 0 8px;\n border-radius: 6px;\n border: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-2, var(--dsw-alias-bg-module-platform));\n color: var(--dsw-alias-label-primary);\n}\n\n/* The modal card: a body-level overlay, above the app chrome. */\n[data-zen-remote=\"wizard-card\"] {\n position: fixed;\n inset: 0;\n z-index: 1000;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(0, 0, 0, 0.45);\n}\n[data-zen-remote=\"wizard-card\"] .zr-wizard-cardPanel {\n background: var(--dsw-alias-bg-layer-2, var(--dsw-alias-bg-module-platform));\n color: var(--dsw-alias-label-primary);\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 12px;\n width: min(560px, calc(100vw - 32px));\n max-height: min(82vh, 660px);\n overflow: auto;\n padding: 18px 20px;\n display: flex;\n flex-direction: column;\n gap: 14px;\n}\n[data-zen-remote=\"wizard-card\"] .zr-wizard-cardHeader {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n}\n[data-zen-remote=\"wizard-card\"] .zr-wizard-cardTitle {\n font-size: 15px;\n font-weight: 600;\n margin: 0;\n}\n[data-zen-remote=\"wizard-modal\"] .zr-wizard-cardCloseIcon,\n[data-zen-remote=\"wizard-card\"] .zr-wizard-cardCloseIcon {\n border: none;\n background: none;\n color: var(--dsw-alias-label-secondary);\n font-size: 18px;\n line-height: 1;\n padding: 2px 6px;\n border-radius: 6px;\n cursor: pointer;\n}\n[data-zen-remote=\"wizard-modal\"] .zr-wizard-cardCloseIcon:hover,\n[data-zen-remote=\"wizard-card\"] .zr-wizard-cardCloseIcon:hover {\n color: var(--dsw-alias-label-primary);\n}\n[data-zen-remote=\"wizard-card\"] .zr-wizard-cardBody {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n[data-zen-remote=\"wizard-card\"] .zr-wizard-cardSteps {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n[data-zen-remote=\"wizard-card\"] .zr-wizard-cardSubhead {\n font-size: 12.5px;\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n margin: 4px 0 0;\n}\n[data-zen-remote=\"wizard-card\"] .zr-wizard-cardTable {\n width: 100%;\n border-collapse: collapse;\n font-size: 12px;\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 8px;\n overflow: hidden;\n}\n[data-zen-remote=\"wizard-card\"] .zr-wizard-cardTable td {\n padding: 6px 10px;\n border-bottom: 1px solid var(--dsw-alias-border-l2);\n}\n[data-zen-remote=\"wizard-card\"] .zr-wizard-cardTable tr:last-child td {\n border-bottom: none;\n}\n[data-zen-remote=\"wizard-card\"] .zr-wizard-cardPerm {\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n white-space: nowrap;\n}\n[data-zen-remote=\"wizard-card\"] .zr-wizard-cardWhy {\n color: var(--dsw-alias-label-tertiary);\n}\n[data-zen-remote=\"wizard-card\"] .zr-wizard-cardTabs {\n display: flex;\n gap: 6px;\n}\n[data-zen-remote=\"wizard-card\"] .zr-wizard-cardTab {\n font: inherit;\n font-size: 12px;\n font-weight: 500;\n padding: 4px 12px;\n border-radius: 999px;\n border: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-3, var(--dsw-alias-bg-module-platform));\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n}\n[data-zen-remote=\"wizard-card\"] .zr-wizard-cardTab[data-selected=\"true\"] {\n color: var(--dsw-alias-bg-layer-2, #fff);\n background: var(--dsw-alias-label-primary);\n border-color: var(--dsw-alias-label-primary);\n}\n[data-zen-remote=\"wizard-card\"] .zr-wizard-cardStep {\n font-size: 12.5px;\n color: var(--dsw-alias-label-secondary);\n margin: 0;\n line-height: 1.45;\n}\n[data-zen-remote=\"wizard-card\"] .zr-wizard-cardCode {\n font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n font-size: 12px;\n white-space: pre;\n background: var(--dsw-alias-bg-layer-3, rgba(127, 127, 127, 0.12));\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 8px;\n padding: 10px 12px;\n overflow: auto;\n max-height: 260px;\n margin: 0;\n}\n[data-zen-remote=\"wizard-card\"] .zr-wizard-field {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n[data-zen-remote=\"wizard-card\"] .zr-wizard-label {\n font-size: 12.5px;\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n}\n[data-zen-remote=\"wizard-card\"] .zr-wizard-input {\n height: 34px;\n font: inherit;\n font-size: 13px;\n padding: 0 10px;\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 8px;\n background: var(--dsw-alias-bg-layer-3, var(--dsw-alias-bg-module-platform));\n color: var(--dsw-alias-label-primary);\n width: 100%;\n box-sizing: border-box;\n}\n[data-zen-remote=\"wizard-card\"] .zr-wizard-cardActions {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n padding-top: 8px;\n border-top: 1px solid var(--dsw-alias-border-l2);\n}\n";
|
|
9
|
+
export declare const WIZARD_CSS = "\n[data-plugin-detail=\"dsh-zen-remote\"] section[data-plugin-config]:empty {\n display: none;\n}\n\n[data-zen-remote=\"wizard\"] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n width: 100%;\n box-sizing: border-box;\n margin-inline: auto;\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 12px;\n background: var(--dsw-alias-bg-layer-2, var(--dsw-alias-bg-module-platform));\n padding: 18px 20px;\n}\n\n[data-zen-remote=\"wizard\"] .zr-wizard-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 12px;\n flex-wrap: wrap;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-headerText {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-title {\n font-size: 15px;\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n margin: 0;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-subtitle {\n font-size: 12.5px;\n color: var(--dsw-alias-label-tertiary);\n margin: 0;\n line-height: 1.45;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-statusBadge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n font-weight: 500;\n padding: 4px 10px;\n border-radius: 999px;\n border: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-3, var(--dsw-alias-bg-module-platform));\n color: var(--dsw-alias-label-secondary);\n white-space: nowrap;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-statusBadge[data-state=\"pass\"] {\n color: var(--dsw-alias-label-primary);\n}\n\n[data-zen-remote=\"wizard\"] .zr-wizard-notice {\n font-size: 12.5px;\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 8px;\n padding: 9px 12px;\n background: var(--dsw-alias-bg-layer-3, var(--dsw-alias-bg-module-platform));\n color: var(--dsw-alias-label-secondary);\n margin: 0;\n line-height: 1.45;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-notice[data-tone=\"error\"] {\n border-color: var(--dsw-alias-state-error-primary, #d5304f);\n color: var(--dsw-alias-state-error-primary, #d5304f);\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-notice[data-tone=\"ok\"] {\n border-color: var(--dsw-alias-state-success-primary, #16a34a);\n color: var(--dsw-alias-state-success-primary, #16a34a);\n}\n\n/* Inline Status Overview Card (2x2 spacious layout, full text visibility) */\n[data-zen-remote=\"wizard\"] .zr-wizard-overviewGrid {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 12px;\n}\n@media (max-width: 560px) {\n [data-zen-remote=\"wizard\"] .zr-wizard-overviewGrid {\n grid-template-columns: 1fr;\n }\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-overviewItem {\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 13px 15px;\n border-radius: 10px;\n border: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-3, var(--dsw-alias-bg-module-platform));\n min-width: 0;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-overviewHead {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-overviewLabel {\n font-size: 12px;\n color: var(--dsw-alias-label-tertiary);\n margin: 0;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-overviewValue {\n display: flex;\n align-items: center;\n gap: 7px;\n font-size: 13.5px;\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n margin: 0;\n line-height: 1.45;\n overflow-wrap: anywhere;\n word-break: break-word;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-overviewSub {\n font-size: 12px;\n color: var(--dsw-alias-label-secondary);\n margin: 0;\n line-height: 1.45;\n overflow-wrap: anywhere;\n word-break: break-word;\n}\n/* MS-8: the pool cap's loud form \u2014 the \u5DF2\u914D\u5BF9\u670D\u52A1\u7AEF cell's value and sub\n wear data-limit=\"true\" at 8/8 and turn bold red (the same loudness the\n settings page's limit alert uses). */\n[data-zen-remote=\"wizard\"] .zr-wizard-overviewValue[data-limit=\"true\"] {\n color: var(--dsw-alias-state-error-primary, #d5304f);\n font-weight: 700;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-overviewSub[data-limit=\"true\"],\n[data-zen-remote=\"wizard-modal\"] .zr-wizard-subtitle[data-limit=\"true\"] {\n color: var(--dsw-alias-state-error-primary, #d5304f);\n font-weight: 600;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-emptyBanner {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n flex-wrap: wrap;\n padding: 14px 16px;\n border-radius: 10px;\n border: 1px dashed var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-3, var(--dsw-alias-bg-module-platform));\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-emptyText {\n font-size: 12.5px;\n color: var(--dsw-alias-label-secondary);\n line-height: 1.5;\n margin: 0;\n flex: 1;\n min-width: 220px;\n}\n\n/* Wizard Modal Dialog (above app chrome, below helper sub-cards) */\n[data-zen-remote=\"wizard-modal\"] {\n position: fixed;\n inset: 0;\n z-index: 950;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 16px;\n background: rgba(0, 0, 0, 0.5);\n backdrop-filter: blur(2px);\n}\n[data-zen-remote=\"wizard-modal\"] .zr-wizard-modalDialog {\n width: min(680px, calc(100vw - 32px));\n max-height: min(88vh, 760px);\n display: flex;\n flex-direction: column;\n border-radius: 14px;\n border: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-2, var(--dsw-alias-bg-module-platform));\n color: var(--dsw-alias-label-primary);\n box-shadow: 0 20px 48px rgba(0, 0, 0, 0.28);\n overflow: hidden;\n}\n[data-zen-remote=\"wizard-modal\"] .zr-wizard-modalHeader {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n padding: 16px 22px 14px;\n}\n[data-zen-remote=\"wizard-modal\"] .zr-wizard-modalTitle {\n font-size: 15.5px;\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n margin: 0;\n}\n[data-zen-remote=\"wizard-modal\"] .zr-wizard-modalBody {\n padding: 18px 22px;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n gap: 16px;\n flex: 1;\n}\n[data-zen-remote=\"wizard-modal\"] .zr-wizard-modalFooter {\n padding: 14px 22px;\n border-top: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-2, var(--dsw-alias-bg-module-platform));\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n/* Non-clickable 3-step visual progress indicator */\n[data-zen-remote=\"wizard\"] .zr-wizard-stepper {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 10px;\n padding: 13px 22px;\n margin: 0;\n list-style: none;\n background: var(--dsw-alias-bg-layer-3, var(--dsw-alias-bg-module-platform));\n border-top: 1px solid var(--dsw-alias-border-l2);\n border-bottom: 1px solid var(--dsw-alias-border-l2);\n user-select: none;\n pointer-events: none;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-stepItem {\n display: flex;\n align-items: center;\n gap: 10px;\n min-width: 0;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-stepCircle {\n width: 26px;\n height: 26px;\n border-radius: 50%;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n font-weight: 600;\n border: 1.5px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-2, var(--dsw-alias-bg-module-platform));\n color: var(--dsw-alias-label-tertiary);\n flex: none;\n transition: background-color 160ms ease, border-color 160ms ease, color 160ms ease, box-shadow 160ms ease;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-stepItem[data-state=\"current\"] .zr-wizard-stepCircle {\n background: var(--dsw-alias-label-primary);\n border-color: var(--dsw-alias-label-primary);\n color: var(--dsw-alias-bg-layer-2, #fff);\n box-shadow: 0 0 0 3px var(--dsw-alias-border-l2);\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-stepItem[data-state=\"done\"] .zr-wizard-stepCircle {\n background: var(--dsw-alias-state-success-primary, #16a34a);\n border-color: var(--dsw-alias-state-success-primary, #16a34a);\n color: #fff;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-stepText {\n display: flex;\n flex-direction: column;\n gap: 1px;\n min-width: 0;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-stepTag {\n font-size: 11px;\n color: var(--dsw-alias-label-tertiary);\n line-height: 1.2;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-stepItem[data-state=\"current\"] .zr-wizard-stepTag {\n color: var(--dsw-alias-label-secondary);\n font-weight: 500;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-stepItem[data-state=\"done\"] .zr-wizard-stepTag {\n color: var(--dsw-alias-state-success-primary, #16a34a);\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-stepName {\n font-size: 13px;\n font-weight: 500;\n color: var(--dsw-alias-label-tertiary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-stepItem[data-state=\"current\"] .zr-wizard-stepName {\n color: var(--dsw-alias-label-primary);\n font-weight: 600;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-stepItem[data-state=\"done\"] .zr-wizard-stepName {\n color: var(--dsw-alias-label-secondary);\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-stepConnector {\n flex: 1;\n height: 2px;\n min-width: 18px;\n border-radius: 2px;\n background: var(--dsw-alias-border-l2);\n transition: background-color 200ms ease;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-stepConnector[data-done=\"true\"] {\n background: var(--dsw-alias-state-success-primary, #16a34a);\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-stepIntro {\n font-size: 12.5px;\n color: var(--dsw-alias-label-secondary);\n margin: 0;\n line-height: 1.45;\n}\n\n[data-zen-remote=\"wizard\"] .zr-wizard-body {\n display: flex;\n flex-direction: column;\n gap: 14px;\n}\n\n/* Step 1: 3-column path cards */\n[data-zen-remote=\"wizard\"] .zr-wizard-paths {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 10px;\n margin: 0;\n padding: 0;\n border: none;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-path {\n display: flex;\n flex-direction: column;\n gap: 6px;\n text-align: left;\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 10px;\n padding: 12px 14px;\n background: var(--dsw-alias-bg-layer-3, var(--dsw-alias-bg-module-platform));\n cursor: pointer;\n font: inherit;\n color: inherit;\n transition: border-color 120ms ease, box-shadow 120ms ease;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-path:hover:not(:disabled) {\n border-color: var(--dsw-alias-label-secondary);\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-path[data-selected=\"true\"] {\n border-color: var(--dsw-alias-label-primary);\n box-shadow: 0 0 0 1px var(--dsw-alias-label-primary);\n background: var(--dsw-alias-bg-layer-2, var(--dsw-alias-bg-module-platform));\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-path:disabled {\n cursor: not-allowed;\n opacity: 0.55;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-pathHead {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-pathRadio {\n width: 14px;\n height: 14px;\n border-radius: 50%;\n border: 1.5px solid var(--dsw-alias-label-tertiary);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex: none;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-pathRadio[data-selected=\"true\"] {\n border-color: var(--dsw-alias-label-primary);\n background: var(--dsw-alias-label-primary);\n box-shadow: inset 0 0 0 2.5px var(--dsw-alias-bg-layer-2, var(--dsw-alias-bg-module-platform));\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-pathName {\n font-size: 13px;\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n margin: 0;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-pathDesc {\n font-size: 12px;\n color: var(--dsw-alias-label-tertiary);\n margin: 0;\n line-height: 1.45;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-sectionTitle {\n font-size: 12px;\n font-weight: 600;\n color: var(--dsw-alias-label-secondary);\n margin: 0;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-roleGrid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));\n gap: 10px;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-checkRow {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n font-size: 12.5px;\n color: var(--dsw-alias-label-primary);\n cursor: pointer;\n user-select: none;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-checkRow input[type=\"checkbox\"] {\n margin: 0;\n cursor: pointer;\n}\n\n/* Step 2: form controls */\n[data-zen-remote=\"wizard\"] .zr-wizard-selectedBar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n padding: 8px 12px;\n border-radius: 8px;\n border: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-3, var(--dsw-alias-bg-module-platform));\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-selectedLabel {\n font-size: 12.5px;\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-formStack {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-formGrid {\n display: grid;\n grid-template-columns: 1fr 120px;\n gap: 12px;\n align-items: start;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-field {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-labelRow {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-label {\n font-size: 12.5px;\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n margin: 0;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-savedTag {\n font-size: 11px;\n padding: 1px 7px;\n border-radius: 999px;\n border: 1px solid var(--dsw-alias-border-l2);\n color: var(--dsw-alias-state-success-primary, #16a34a);\n background: var(--dsw-alias-bg-layer-3, var(--dsw-alias-bg-module-platform));\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-hint {\n font-size: 12px;\n color: var(--dsw-alias-label-tertiary);\n margin: 0;\n line-height: 1.4;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-input {\n height: 34px;\n font: inherit;\n font-size: 13px;\n padding: 0 10px;\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 8px;\n background: var(--dsw-alias-bg-layer-3, var(--dsw-alias-bg-module-platform));\n color: var(--dsw-alias-label-primary);\n width: 100%;\n box-sizing: border-box;\n}\n[data-zen-remote=\"wizard\"] code.zr-wizard-input {\n display: flex;\n align-items: center;\n min-height: 36px;\n height: auto;\n padding: 6px 12px;\n font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n line-height: 1.4;\n overflow-wrap: anywhere;\n word-break: break-all;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-input:focus {\n outline: none;\n border-color: var(--dsw-alias-label-primary);\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-row {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-link {\n background: none;\n border: none;\n padding: 0;\n font: inherit;\n font-size: 12px;\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n text-decoration: underline;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-link:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-linkBtn {\n font: inherit;\n font-size: 12px;\n padding: 4px 10px;\n border-radius: 6px;\n border: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-3, var(--dsw-alias-bg-module-platform));\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-linkBtn:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n border-color: var(--dsw-alias-label-secondary);\n}\n\n/* Primary & Secondary action buttons + Footer */\n[data-zen-remote=\"wizard\"] .zr-wizard-footer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 10px;\n padding-top: 8px;\n border-top: 1px solid var(--dsw-alias-border-l2);\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-footerHint {\n font-size: 12px;\n color: var(--dsw-alias-label-secondary);\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-btn,\n[data-zen-remote=\"wizard-card\"] .zr-wizard-btn {\n font: inherit;\n font-size: 12.5px;\n font-weight: 500;\n height: 32px;\n padding: 0 14px;\n border-radius: 8px;\n border: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-3, var(--dsw-alias-bg-module-platform));\n color: var(--dsw-alias-label-primary);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-btn:hover:not(:disabled),\n[data-zen-remote=\"wizard-card\"] .zr-wizard-btn:hover:not(:disabled) {\n border-color: var(--dsw-alias-label-secondary);\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-btnPrimary,\n[data-zen-remote=\"wizard-card\"] .zr-wizard-btnPrimary {\n background: var(--dsw-alias-label-primary);\n border-color: var(--dsw-alias-label-primary);\n color: var(--dsw-alias-bg-layer-2, #fff);\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-btnPrimary:hover:not(:disabled),\n[data-zen-remote=\"wizard-card\"] .zr-wizard-btnPrimary:hover:not(:disabled) {\n opacity: 0.9;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-btn:disabled,\n[data-zen-remote=\"wizard-card\"] .zr-wizard-btn:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n/* Step 3: service control bar, 3-column lights, and QR pairing panel */\n[data-zen-remote=\"wizard\"] .zr-wizard-serviceBar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n flex-wrap: wrap;\n padding: 10px 12px;\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 10px;\n background: var(--dsw-alias-bg-layer-3, var(--dsw-alias-bg-module-platform));\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-serviceInfo {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-lights {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n gap: 8px;\n margin: 0;\n padding: 0;\n list-style: none;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-light {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n padding: 9px 12px;\n border-radius: 8px;\n border: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-3, var(--dsw-alias-bg-module-platform));\n font-size: 12.5px;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-lightMain {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-lightName {\n color: var(--dsw-alias-label-primary);\n font-weight: 500;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-lightState {\n font-size: 11.5px;\n color: var(--dsw-alias-label-tertiary);\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-lightState[data-state=\"pass\"] {\n color: var(--dsw-alias-state-success-primary, #16a34a);\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-lightState[data-state=\"fail\"] {\n color: var(--dsw-alias-state-error-primary, #d5304f);\n}\n\n[data-zen-remote=\"wizard\"] .zr-wizard-dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: var(--dsw-alias-label-tertiary);\n flex: none;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-dot[data-state=\"pass\"] {\n background: var(--dsw-alias-state-success-primary, #16a34a);\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-dot[data-state=\"fail\"] {\n background: var(--dsw-alias-state-error-primary, #d5304f);\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-dot[data-state=\"pending\"] {\n background: var(--dsw-alias-state-warning-primary, #b8860b);\n}\n\n[data-zen-remote=\"wizard\"] .zr-wizard-pairPanel {\n display: flex;\n align-items: center;\n gap: 18px;\n flex-wrap: wrap;\n padding: 14px;\n border-radius: 10px;\n border: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-3, var(--dsw-alias-bg-module-platform));\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-pairMeta {\n display: flex;\n flex-direction: column;\n gap: 4px;\n flex: 1;\n min-width: 180px;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-code {\n font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n font-size: 24px;\n letter-spacing: 4px;\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n margin: 2px 0;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-countdown {\n font-size: 12px;\n color: var(--dsw-alias-label-secondary);\n margin: 0;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-qr {\n width: 156px;\n height: 156px;\n image-rendering: pixelated;\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 8px;\n background: #fff;\n display: block;\n flex: none;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-qr[data-usable=\"false\"] {\n display: none;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-targetTabs {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n gap: 6px;\n padding: 4px;\n border-radius: 9px;\n border: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-3, var(--dsw-alias-bg-module-platform));\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-targetTab {\n font: inherit;\n font-size: 12.5px;\n font-weight: 500;\n padding: 7px 12px;\n border-radius: 6px;\n border: 1px solid transparent;\n background: transparent;\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n text-align: center;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-targetTab[data-selected=\"true\"] {\n background: var(--dsw-alias-bg-layer-2, var(--dsw-alias-bg-module-platform));\n border-color: var(--dsw-alias-border-l2);\n color: var(--dsw-alias-label-primary);\n font-weight: 600;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-desktopBox,\n[data-zen-remote=\"wizard\"] .zr-wizard-clientBox {\n display: flex;\n flex-direction: column;\n gap: 10px;\n padding: 14px;\n border-radius: 10px;\n border: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-3, var(--dsw-alias-bg-module-platform));\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-deviceList {\n display: flex;\n flex-direction: column;\n gap: 10px;\n margin: 0;\n padding: 0;\n list-style: none;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-deviceItem {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 12px 14px;\n border-radius: 10px;\n border: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-3, var(--dsw-alias-bg-module-platform));\n font-size: 12.5px;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-deviceHead {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 10px;\n flex-wrap: wrap;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-deviceTitleRow {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n min-width: 0;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-deviceBadge {\n font-size: 11px;\n font-weight: 500;\n padding: 2px 8px;\n border-radius: 999px;\n border: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-2, var(--dsw-alias-bg-module-platform));\n color: var(--dsw-alias-label-secondary);\n}\n/* MS-8: the servers-modal state badge tones \u2014 green online, amber offline,\n red for a verdict only a re-pair or an upgrade fixes. */\n[data-zen-remote=\"wizard\"] .zr-wizard-deviceBadge[data-tone=\"live\"] {\n color: var(--dsw-alias-state-success-primary, #16a34a);\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-deviceBadge[data-tone=\"warn\"] {\n color: var(--dsw-alias-state-warning-primary, #b8860b);\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-deviceBadge[data-tone=\"invalid\"] {\n color: var(--dsw-alias-state-error-primary, #d5304f);\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-deviceActions {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n}\n[data-zen-remote=\"wizard\"] .zr-wizard-select {\n height: 30px;\n font: inherit;\n font-size: 12px;\n padding: 0 8px;\n border-radius: 6px;\n border: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-2, var(--dsw-alias-bg-module-platform));\n color: var(--dsw-alias-label-primary);\n}\n\n/* The modal card: a body-level overlay, above the app chrome. */\n[data-zen-remote=\"wizard-card\"] {\n position: fixed;\n inset: 0;\n z-index: 1000;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(0, 0, 0, 0.45);\n}\n[data-zen-remote=\"wizard-card\"] .zr-wizard-cardPanel {\n background: var(--dsw-alias-bg-layer-2, var(--dsw-alias-bg-module-platform));\n color: var(--dsw-alias-label-primary);\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 12px;\n width: min(560px, calc(100vw - 32px));\n max-height: min(82vh, 660px);\n overflow: auto;\n padding: 18px 20px;\n display: flex;\n flex-direction: column;\n gap: 14px;\n}\n[data-zen-remote=\"wizard-card\"] .zr-wizard-cardHeader {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n}\n[data-zen-remote=\"wizard-card\"] .zr-wizard-cardTitle {\n font-size: 15px;\n font-weight: 600;\n margin: 0;\n}\n[data-zen-remote=\"wizard-modal\"] .zr-wizard-cardCloseIcon,\n[data-zen-remote=\"wizard-card\"] .zr-wizard-cardCloseIcon {\n border: none;\n background: none;\n color: var(--dsw-alias-label-secondary);\n font-size: 18px;\n line-height: 1;\n padding: 2px 6px;\n border-radius: 6px;\n cursor: pointer;\n}\n[data-zen-remote=\"wizard-modal\"] .zr-wizard-cardCloseIcon:hover,\n[data-zen-remote=\"wizard-card\"] .zr-wizard-cardCloseIcon:hover {\n color: var(--dsw-alias-label-primary);\n}\n[data-zen-remote=\"wizard-card\"] .zr-wizard-cardBody {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n[data-zen-remote=\"wizard-card\"] .zr-wizard-cardSteps {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n[data-zen-remote=\"wizard-card\"] .zr-wizard-cardSubhead {\n font-size: 12.5px;\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n margin: 4px 0 0;\n}\n[data-zen-remote=\"wizard-card\"] .zr-wizard-cardTable {\n width: 100%;\n border-collapse: collapse;\n font-size: 12px;\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 8px;\n overflow: hidden;\n}\n[data-zen-remote=\"wizard-card\"] .zr-wizard-cardTable td {\n padding: 6px 10px;\n border-bottom: 1px solid var(--dsw-alias-border-l2);\n}\n[data-zen-remote=\"wizard-card\"] .zr-wizard-cardTable tr:last-child td {\n border-bottom: none;\n}\n[data-zen-remote=\"wizard-card\"] .zr-wizard-cardPerm {\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n white-space: nowrap;\n}\n[data-zen-remote=\"wizard-card\"] .zr-wizard-cardWhy {\n color: var(--dsw-alias-label-tertiary);\n}\n[data-zen-remote=\"wizard-card\"] .zr-wizard-cardTabs {\n display: flex;\n gap: 6px;\n}\n[data-zen-remote=\"wizard-card\"] .zr-wizard-cardTab {\n font: inherit;\n font-size: 12px;\n font-weight: 500;\n padding: 4px 12px;\n border-radius: 999px;\n border: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-3, var(--dsw-alias-bg-module-platform));\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n}\n[data-zen-remote=\"wizard-card\"] .zr-wizard-cardTab[data-selected=\"true\"] {\n color: var(--dsw-alias-bg-layer-2, #fff);\n background: var(--dsw-alias-label-primary);\n border-color: var(--dsw-alias-label-primary);\n}\n[data-zen-remote=\"wizard-card\"] .zr-wizard-cardStep {\n font-size: 12.5px;\n color: var(--dsw-alias-label-secondary);\n margin: 0;\n line-height: 1.45;\n}\n[data-zen-remote=\"wizard-card\"] .zr-wizard-cardCode {\n font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n font-size: 12px;\n white-space: pre;\n background: var(--dsw-alias-bg-layer-3, rgba(127, 127, 127, 0.12));\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 8px;\n padding: 10px 12px;\n overflow: auto;\n max-height: 260px;\n margin: 0;\n}\n[data-zen-remote=\"wizard-card\"] .zr-wizard-field {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n[data-zen-remote=\"wizard-card\"] .zr-wizard-label {\n font-size: 12.5px;\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n}\n[data-zen-remote=\"wizard-card\"] .zr-wizard-input {\n height: 34px;\n font: inherit;\n font-size: 13px;\n padding: 0 10px;\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 8px;\n background: var(--dsw-alias-bg-layer-3, var(--dsw-alias-bg-module-platform));\n color: var(--dsw-alias-label-primary);\n width: 100%;\n box-sizing: border-box;\n}\n[data-zen-remote=\"wizard-card\"] .zr-wizard-cardActions {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n padding-top: 8px;\n border-top: 1px solid var(--dsw-alias-border-l2);\n}\n";
|
|
10
10
|
//# sourceMappingURL=wizard-css.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wizard-css.d.ts","sourceRoot":"","sources":["../../../../src/client/wizard/wizard-css.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,eAAO,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"wizard-css.d.ts","sourceRoot":"","sources":["../../../../src/client/wizard/wizard-css.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,eAAO,MAAM,UAAU,4h5BAi8BtB,CAAA"}
|
|
@@ -27,6 +27,11 @@
|
|
|
27
27
|
* Defensive like the rest of client-data: an empty or missing heading never
|
|
28
28
|
* counts as a mark, so it can never decide a container by accident.
|
|
29
29
|
*/
|
|
30
|
+
/** MS-4: the <html> attribute carrying the open REMOTE session's server id
|
|
31
|
+
* (`zr~<serverId>~…`'s middle half). Written by effects/remote-session.ts
|
|
32
|
+
* together with `data-zr-remote-session`, read by
|
|
33
|
+
* effects/model-group-side.ts as the `activeRemoteServerId`. */
|
|
34
|
+
export declare const REMOTE_SERVER_ATTRIBUTE = "data-zr-remote-server";
|
|
30
35
|
/** One group's display description, as the DOM shows it. */
|
|
31
36
|
export interface ModelGroupHeading {
|
|
32
37
|
/** Groups sharing one container share one key (the effect numbers the
|
|
@@ -38,7 +43,23 @@ export interface ModelGroupHeading {
|
|
|
38
43
|
/** Per-group verdict, in input order: `remote` for marked headings, `local`
|
|
39
44
|
* for the rest of a container that has at least one, and `undefined` —
|
|
40
45
|
* "stamp nothing" — for every group of a container that holds no mark at
|
|
41
|
-
* all.
|
|
42
|
-
|
|
46
|
+
* all. MS-4 adds `remote-other`: with a session's own server id known
|
|
47
|
+
* ({@link classifyModelGroupsForSession}'s `activeRemoteServerId`), a
|
|
48
|
+
* marked group whose DECODED server id is a DIFFERENT paired server — the
|
|
49
|
+
* model menu must show only the models of the server the open session
|
|
50
|
+
* lives on. */
|
|
51
|
+
export type ModelGroupSide = 'remote' | 'local' | 'remote-other' | undefined;
|
|
43
52
|
export declare function classifyModelGroups(groups: readonly ModelGroupHeading[]): ModelGroupSide[];
|
|
53
|
+
/**
|
|
54
|
+
* The MS-4 extension: with `activeRemoteServerId` set (the `zr~<serverId>~`
|
|
55
|
+
* half of the session the browser has open, effects/remote-session.ts),
|
|
56
|
+
* each marked heading's embedded server id (decodeServerIdZeroWidth)
|
|
57
|
+
* decides between plain `remote` (the open session's own server, or a
|
|
58
|
+
* heading whose server cannot be decoded — shown, never hidden) and
|
|
59
|
+
* `remote-other` (a DIFFERENT paired server's group — hidden in a remote
|
|
60
|
+
* session by remote-session.css.ts). Without the argument the verdicts
|
|
61
|
+
* are exactly {@link classifyModelGroups}'s — the single-paired-server
|
|
62
|
+
* behavior, byte for byte.
|
|
63
|
+
*/
|
|
64
|
+
export declare function classifyModelGroupsForSession(groups: readonly ModelGroupHeading[], activeRemoteServerId?: string): ModelGroupSide[];
|
|
44
65
|
//# sourceMappingURL=model-group-side.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-group-side.d.ts","sourceRoot":"","sources":["../../../src/client-data/model-group-side.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAIH,4DAA4D;AAC5D,MAAM,WAAW,iBAAiB;IAChC;oCACgC;IAChC,YAAY,EAAE,MAAM,CAAA;IACpB,oEAAoE;IACpE,WAAW,EAAE,MAAM,CAAA;CACpB;AAED
|
|
1
|
+
{"version":3,"file":"model-group-side.d.ts","sourceRoot":"","sources":["../../../src/client-data/model-group-side.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAIH;;;gEAGgE;AAChE,eAAO,MAAM,uBAAuB,0BAA0B,CAAA;AAE9D,4DAA4D;AAC5D,MAAM,WAAW,iBAAiB;IAChC;oCACgC;IAChC,YAAY,EAAE,MAAM,CAAA;IACpB,oEAAoE;IACpE,WAAW,EAAE,MAAM,CAAA;CACpB;AAED;;;;;;;eAOe;AACf,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,OAAO,GAAG,cAAc,GAAG,SAAS,CAAA;AAE5E,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,iBAAiB,EAAE,GAAG,cAAc,EAAE,CAE1F;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,SAAS,iBAAiB,EAAE,EAAE,oBAAoB,CAAC,EAAE,MAAM,GAAG,cAAc,EAAE,CAmBnI"}
|
|
@@ -8,6 +8,10 @@
|
|
|
8
8
|
* - `parseRemoteStatusBody(body, now)` maps the
|
|
9
9
|
* `GET /_dsh/zen-remote/client/remote-status` body
|
|
10
10
|
* (`{ state, versionMismatch, serverName, closed }`) into a tolerant view;
|
|
11
|
+
* since MS-6 the body's `servers` dict (per handshake serverId) parses
|
|
12
|
+
* alongside, and `resolveServerStatusView(view, sessionId)` picks the
|
|
13
|
+
* session's OWN server entry — falling back to the top-level mirror (the
|
|
14
|
+
* FIRST pool entry) whenever the dict cannot answer;
|
|
11
15
|
* - `describeRemoteStatus(view)` maps one view to the icon's three states —
|
|
12
16
|
* online (lit) / offline (grey; `revoked` / `unpaired` count as offline —
|
|
13
17
|
* the link is not serving either way) / mismatch (yellow, only ever while
|
|
@@ -38,6 +42,20 @@ export declare const CLIENT_UNSHARE_ROUTE = "/_dsh/zen-remote/client/unshare";
|
|
|
38
42
|
export type RemoteStatusState = 'online' | 'offline' | 'revoked' | 'unpaired';
|
|
39
43
|
/** Why the server closed a session's remote access. */
|
|
40
44
|
export type RemoteClosedReason = 'manual' | 'client' | 'idle';
|
|
45
|
+
/**
|
|
46
|
+
* ONE paired server's serving state (MS-6): the same four facts the top
|
|
47
|
+
* level has always carried, scoped to the server whose handshake minted the
|
|
48
|
+
* `serverId`. The route (src/client-routes.ts, MS-5) serves these under
|
|
49
|
+
* `servers`, keyed by serverId; the top level mirrors the FIRST pool entry
|
|
50
|
+
* for the pre-MS-6 page.
|
|
51
|
+
*/
|
|
52
|
+
export interface RemoteServerStatusView {
|
|
53
|
+
state: RemoteStatusState;
|
|
54
|
+
versionMismatch: boolean;
|
|
55
|
+
serverName: string;
|
|
56
|
+
/** The plugins whose bridge verdict is bridged RIGHT NOW on THIS server. */
|
|
57
|
+
bridgedPlugins: readonly string[];
|
|
58
|
+
}
|
|
41
59
|
/** One parsed status body, stamped with the parse time for future decay. */
|
|
42
60
|
export interface RemoteStatusView {
|
|
43
61
|
state: RemoteStatusState;
|
|
@@ -49,6 +67,10 @@ export interface RemoteStatusView {
|
|
|
49
67
|
* nothing is ever considered bridged on a shape the parse does not
|
|
50
68
|
* trust. */
|
|
51
69
|
bridgedPlugins: readonly string[];
|
|
70
|
+
/** Per-server views keyed by the handshake serverId (MS-6). A legacy body
|
|
71
|
+
* without the field parses to the empty dict — the parts then fall back to
|
|
72
|
+
* the top-level mirror. */
|
|
73
|
+
servers: Readonly<Record<string, RemoteServerStatusView>>;
|
|
52
74
|
/** When this view was parsed off a GET body. */
|
|
53
75
|
asOf: number;
|
|
54
76
|
}
|
|
@@ -73,6 +95,26 @@ export declare function parseRemoteStatusBody(body: unknown, now: number): Remot
|
|
|
73
95
|
* spends.
|
|
74
96
|
*/
|
|
75
97
|
export declare function shouldStampBridgeAttribute(bridgedPlugins: unknown, plugin: string): boolean;
|
|
98
|
+
/**
|
|
99
|
+
* Which server's facts ONE session reads (MS-6): given the session id on
|
|
100
|
+
* screen, its virtual form names the owning serverId, and THAT server's
|
|
101
|
+
* entry answers — per-server isolation for the icon, the banner and the
|
|
102
|
+
* bridge stamp. Everything else falls back to the TOP-LEVEL view, the
|
|
103
|
+
* pre-MS-6 answer: a session id that is not virtual (a local session), a
|
|
104
|
+
* serverId the dict never answered (its entry never handshook), a legacy
|
|
105
|
+
* body without a dict, or no session id at all. Tolerant the same way as
|
|
106
|
+
* the parse: hand-rolled views without `servers` never throw here.
|
|
107
|
+
*/
|
|
108
|
+
export declare function resolveServerStatusView(view: RemoteStatusView | undefined | null, sessionId?: string): RemoteServerStatusView | undefined;
|
|
109
|
+
/**
|
|
110
|
+
* Whether the remote session CURRENTLY ON SCREEN has its own server's bridge
|
|
111
|
+
* verdict going its way (MS-6): the verdict comes from the session's server
|
|
112
|
+
* entry ({@link resolveServerStatusView}), not the page-wide mirror of the
|
|
113
|
+
* FIRST pool entry — with several servers paired, A bridging a plugin must
|
|
114
|
+
* not un-hide it over B's sessions. Tolerant like the 2-argument core it
|
|
115
|
+
* wraps: a garbage or missing list reads as "not bridged".
|
|
116
|
+
*/
|
|
117
|
+
export declare function shouldStampBridgeForSession(view: RemoteStatusView | undefined, sessionId: string | undefined, plugin: string): boolean;
|
|
76
118
|
/** The plugin the bridge stamp names. */
|
|
77
119
|
export declare const BRIDGE_STAMP_PLUGIN = "dsh-better-sidebar";
|
|
78
120
|
/** The html attribute the stamp writes (`data-zr-bridge-dsh-better-sidebar`). */
|
|
@@ -94,7 +136,11 @@ export interface RemoteStatusDescription {
|
|
|
94
136
|
state: 'online' | 'offline' | 'mismatch' | 'revoked' | 'unpaired';
|
|
95
137
|
hoverText: string;
|
|
96
138
|
}
|
|
97
|
-
export declare function describeRemoteStatus(view: RemoteStatusView | undefined | null, t?: RemoteStatusFormatter
|
|
139
|
+
export declare function describeRemoteStatus(view: RemoteStatusView | undefined | null, t?: RemoteStatusFormatter,
|
|
140
|
+
/** MS-6: the session on screen — its virtual id picks its OWN server's
|
|
141
|
+
* entry; omitted (or unanswered by the dict) keeps the pre-MS-6 top-level
|
|
142
|
+
* read. */
|
|
143
|
+
sessionId?: string): RemoteStatusDescription;
|
|
98
144
|
/** The locale keys `bannerText` needs. */
|
|
99
145
|
export type RemoteBannerTextKey = 'remoteBannerOffline' | 'remoteBannerRevoked' | 'remoteBannerUnpaired' | 'remoteBannerClosedIdle' | 'remoteBannerClosedManual' | 'remoteBannerClosedClient';
|
|
100
146
|
export type RemoteBannerFormatter = (key: RemoteBannerTextKey) => string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote-status.d.ts","sourceRoot":"","sources":["../../../src/client-data/remote-status.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"remote-status.d.ts","sourceRoot":"","sources":["../../../src/client-data/remote-status.ts"],"names":[],"mappings":"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"}
|
|
@@ -86,9 +86,20 @@ export declare const CLIENT_CLAIM_ROUTE = "/_dsh/zen-remote/client/claim";
|
|
|
86
86
|
export declare const CLIENT_STATUS_ROUTE = "/_dsh/zen-remote/client/status";
|
|
87
87
|
/** T43: one immediate reconnect — answered 409 unless the client is offline. */
|
|
88
88
|
export declare const CLIENT_RECONNECT_ROUTE = "/_dsh/zen-remote/client/reconnect";
|
|
89
|
+
/** MS-6: POST `{ entryId }` (or `{ all: true }`) removes one / all paired
|
|
90
|
+
* servers from the pool (host half: src/client-routes.ts, mirrored here
|
|
91
|
+
* because the browser half cannot import the host module). */
|
|
92
|
+
export declare const CLIENT_UNPAIR_ROUTE = "/_dsh/zen-remote/client/unpair";
|
|
89
93
|
/** CU-4: the redacted diagnostic report (GET, both roles, machine-local only
|
|
90
94
|
* — a gateway-forwarded fetch is refused server-side). */
|
|
91
95
|
export declare const CLIENT_DEBUG_REPORT_ROUTE = "/_dsh/zen-remote/client/debug-report";
|
|
96
|
+
/**
|
|
97
|
+
* MS-6: the paired-server pool's cap — the browser mirror of
|
|
98
|
+
* src/state-store.ts's constant of the same name (the host module cannot be
|
|
99
|
+
* imported here). The settings page and the wizard read it for the
|
|
100
|
+
* `已配对 N / 8 台` counters and the limit gating.
|
|
101
|
+
*/
|
|
102
|
+
export declare const MAX_PAIRED_SERVERS = 8;
|
|
92
103
|
/** The lightweight client-facing config route (host half, both roles): the
|
|
93
104
|
* settings page's FALLBACK role probe (T17) — it registers wherever a
|
|
94
105
|
* webServer exists, and since T17 its body carries the effective `role`
|
|
@@ -152,6 +163,12 @@ export interface ClientStatusBody {
|
|
|
152
163
|
/** RD-6: the upload-redirect service probe (presence-gated — an older
|
|
153
164
|
* plugin answers without it). */
|
|
154
165
|
serviceProbe?: unknown;
|
|
166
|
+
/** MS-6: the pool list, one row per paired server (`poolStatusBodyOf`'s
|
|
167
|
+
* `servers`), presence-gated like every diagnostic field — a pre-MS-5
|
|
168
|
+
* server (or the row-probe fallback) answers without it. */
|
|
169
|
+
servers?: unknown;
|
|
170
|
+
/** MS-6: the pool cap as the body reports it (8). */
|
|
171
|
+
maxServers?: unknown;
|
|
155
172
|
}
|
|
156
173
|
/** One remote-call failure line in the diagnostics lists. `time` is epoch
|
|
157
174
|
* milliseconds — ISO-stamped rings are parsed at derive time; `method`
|
|
@@ -180,6 +197,27 @@ export interface ClientCompatView {
|
|
|
180
197
|
/** The most recent incompatible calls (at most 10). */
|
|
181
198
|
recentCalls: ClientDiagFailureView[];
|
|
182
199
|
}
|
|
200
|
+
/**
|
|
201
|
+
* MS-6: ONE paired server of the pool, as the per-server list renders it —
|
|
202
|
+
* the parsed form of one `client/status` `servers[]` row (no token ever
|
|
203
|
+
* rides any status answer). `state` speaks the same view vocabulary as the
|
|
204
|
+
* top level (the wire aliases mapped); every field degrades to its default
|
|
205
|
+
* on a junk row, and a row without an `entryId` (the route's stable key)
|
|
206
|
+
* drops whole.
|
|
207
|
+
*/
|
|
208
|
+
export interface ClientServerView {
|
|
209
|
+
entryId: string;
|
|
210
|
+
serverId: string;
|
|
211
|
+
serverUrl: string;
|
|
212
|
+
serverName: string;
|
|
213
|
+
/** The pool's deduplicated display name (`-1` / `-2` suffixes included). */
|
|
214
|
+
displayName: string;
|
|
215
|
+
state: ClientConnectionView['state'];
|
|
216
|
+
nextRetryAt: number | undefined;
|
|
217
|
+
lastError: string;
|
|
218
|
+
compat: ClientCompatView | undefined;
|
|
219
|
+
pluginBridge: PluginBridgeStatusView[];
|
|
220
|
+
}
|
|
183
221
|
/** One client connection as the block renders it. */
|
|
184
222
|
export interface ClientConnectionView {
|
|
185
223
|
state: 'unpaired' | 'connected' | 'revoked' | 'unreachable' | 'unexpected' | 'invalid-url' | 'incompatible';
|
|
@@ -209,6 +247,15 @@ export interface ClientConnectionView {
|
|
|
209
247
|
* through tolerantly (undefined when the body carried none — an older
|
|
210
248
|
* plugin — and the diagnostics row stays hidden). */
|
|
211
249
|
uploadProbe: Readonly<Record<string, unknown>> | undefined;
|
|
250
|
+
/** MS-6: every paired server of the pool, in pairing order. Empty on a
|
|
251
|
+
* legacy body (or a row-less unpaired answer) — the pre-MS-6 page shape. */
|
|
252
|
+
servers: readonly ClientServerView[];
|
|
253
|
+
/** MS-6: the pool's cap, from the body when it carried a sane number,
|
|
254
|
+
* {@link MAX_PAIRED_SERVERS} otherwise. */
|
|
255
|
+
maxServers: number;
|
|
256
|
+
/** MS-6: `servers.length >= maxServers` — the red 已配满 note and the
|
|
257
|
+
* new-address submit gate both read this. */
|
|
258
|
+
limitReached: boolean;
|
|
212
259
|
}
|
|
213
260
|
/**
|
|
214
261
|
* Map one `client/status` body into the view the client group renders.
|
|
@@ -259,6 +306,11 @@ export interface ClaimRouteBody {
|
|
|
259
306
|
token?: unknown;
|
|
260
307
|
deviceId?: unknown;
|
|
261
308
|
deviceName?: unknown;
|
|
309
|
+
/** MS-8: the pool entry the pairing landed in (pool-mode answers carry it;
|
|
310
|
+
* the legacy single-server answer carries `token` instead and no
|
|
311
|
+
* `entryId` — the token never reaches the browser in pool mode). The
|
|
312
|
+
* wizard records it as the step-3 selected server. */
|
|
313
|
+
entryId?: unknown;
|
|
262
314
|
/** The normalized address the backend validated — what the form writes. */
|
|
263
315
|
serverUrl?: unknown;
|
|
264
316
|
code?: string;
|
|
@@ -273,6 +325,36 @@ export declare const PAIRING_CODE_LENGTH = 8;
|
|
|
273
325
|
* 32-character pairing-code alphabet (excluding 0/O/1/I/L and symbols), and
|
|
274
326
|
* capped at 8 characters. */
|
|
275
327
|
export declare function normalizePairingCode(input: string): string;
|
|
328
|
+
/** What {@link canSubmitClientPairing} decides. */
|
|
329
|
+
export interface CanSubmitClientPairingVerdict {
|
|
330
|
+
/** The 配对 button may act: everything locally checkable passes. */
|
|
331
|
+
allowed: boolean;
|
|
332
|
+
/** The typed address names an already-paired server — the claim will
|
|
333
|
+
* UPDATE that entry's token in place, not add a ninth one. */
|
|
334
|
+
isOverwrite: boolean;
|
|
335
|
+
/** A NEW address while the pool is full (`servers.length >= maxServers`):
|
|
336
|
+
* the claim must not even leave the page (the route would answer
|
|
337
|
+
* `limit-reached`). An overwrite never sets this. */
|
|
338
|
+
blockedByLimit: boolean;
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* The 配对 button's whole gate, as one pure truth table (MS-6): the claim
|
|
342
|
+
* needs an address and a COMPLETE 8-character pairing code (the input box
|
|
343
|
+
* normalizes as the user types; this judge is the same bar the route's code
|
|
344
|
+
* grammar enforces), a quiet page (`busy`), and a valid device-name draft
|
|
345
|
+
* (`deviceNameInvalid`, T60 — a red-boxed name would silently pair under the
|
|
346
|
+
* fallback copy). The pool cap blocks only NEW addresses: a full pool still
|
|
347
|
+
* accepts re-pairing an existing one in place, which is how a user whose
|
|
348
|
+
* token was revoked at 8/8 gets back in.
|
|
349
|
+
*/
|
|
350
|
+
export declare function canSubmitClientPairing(input: {
|
|
351
|
+
pairUrl: string;
|
|
352
|
+
pairCode: string;
|
|
353
|
+
servers: readonly ClientServerView[];
|
|
354
|
+
maxServers?: number;
|
|
355
|
+
busy?: boolean;
|
|
356
|
+
deviceNameInvalid?: boolean;
|
|
357
|
+
}): CanSubmitClientPairingVerdict;
|
|
276
358
|
/**
|
|
277
359
|
* Whether the settings page may follow the SERVER's record of this device's
|
|
278
360
|
* name into the row (T59): the body carried a name, it differs from the row
|
|
@@ -507,7 +589,7 @@ export declare function boolField(field: string): SettingsFieldSpec;
|
|
|
507
589
|
*/
|
|
508
590
|
export declare function consentField(field: string): SettingsFieldSpec;
|
|
509
591
|
/** Names of the row fields the settings page edits, in group order. */
|
|
510
|
-
export type SettingsFieldName = 'role' | 'host' | 'port' | 'trustedProxies' | 'rateLimit' | 'vapidSubject' | 'pushSummary' | 'pushTurnEnd' | 'pushTool' | 'pushDebounceMs' | 'lang' | 'serverName' | 'idleHours' | 'autoShareNewSessions' | 'pluginBridgeConsent';
|
|
592
|
+
export type SettingsFieldName = 'role' | 'host' | 'port' | 'trustedProxies' | 'rateLimit' | 'vapidSubject' | 'pushSummary' | 'pushTurnEnd' | 'pushTool' | 'pushEnabled' | 'pushSessionName' | 'pushDebounceMs' | 'lang' | 'serverName' | 'idleHours' | 'autoShareNewSessions' | 'pluginBridgeConsent';
|
|
511
593
|
/** Longest legal `serverName`, mirroring src/config.ts's cap. */
|
|
512
594
|
export declare const SERVER_NAME_MAX = 40;
|
|
513
595
|
/** Upper bound of `idleHours`, mirroring src/config.ts. */
|
|
@@ -624,6 +706,8 @@ export interface ZenRemoteFormState extends SettingsFormShellState {
|
|
|
624
706
|
pushSummary: SettingsFieldState;
|
|
625
707
|
pushTurnEnd: SettingsFieldState;
|
|
626
708
|
pushTool: SettingsFieldState;
|
|
709
|
+
pushEnabled: SettingsFieldState;
|
|
710
|
+
pushSessionName: SettingsFieldState;
|
|
627
711
|
pushDebounceMs: SettingsFieldState;
|
|
628
712
|
lang: SettingsFieldState;
|
|
629
713
|
serverName: SettingsFieldState;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-form.d.ts","sourceRoot":"","sources":["../../../src/client-data/settings-form.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"settings-form.d.ts","sourceRoot":"","sources":["../../../src/client-data/settings-form.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,7 +12,14 @@
|
|
|
12
12
|
* row layer applies the same rule when the fields land there, so a client
|
|
13
13
|
* that accepts something the resolver would silently drop would only set
|
|
14
14
|
* the user up for a mystery.
|
|
15
|
+
*
|
|
16
|
+
* MS-6 adds the paired-pool overview pieces: the pool count is a first-class
|
|
17
|
+
* "configured" signal (MS-5 pairs straight into the pool store, not the
|
|
18
|
+
* row), and {@link deriveClientOverviewSummary} derives the overview card's
|
|
19
|
+
* counters and its two lights (connection health / pool fill) off the
|
|
20
|
+
* `client/status` pool list.
|
|
15
21
|
*/
|
|
22
|
+
import type { ClientServerView } from './settings-form.ts';
|
|
16
23
|
/** Wizard route constants — mirror of src/wizard/routes.ts. */
|
|
17
24
|
export declare const WIZARD_STATUS_ROUTE = "/_dsh/zen-remote/admin/wizard/status";
|
|
18
25
|
export declare const WIZARD_VERIFY_ROUTE = "/_dsh/zen-remote/admin/wizard/verify";
|
|
@@ -129,7 +136,12 @@ export type WizardPath = 'caddy' | 'external' | 'cloudflared' | 'lan';
|
|
|
129
136
|
export declare function initialStep(status: WizardStatusBody | undefined): WizardStep;
|
|
130
137
|
/**
|
|
131
138
|
* Whether the inline overview card should render the configured status
|
|
132
|
-
* dashboard instead of the first-time setup prompt.
|
|
139
|
+
* dashboard instead of the first-time setup prompt. MS-6: the paired pool's
|
|
140
|
+
* size is the client's first-class signal — since MS-5 a claim lands in the
|
|
141
|
+
* pool store and never touches the row's `serverUrl` / `deviceToken`, so a
|
|
142
|
+
* freshly multi-paired machine with an empty row must still read as
|
|
143
|
+
* configured. `> 0` answers true no matter what the other inputs say; the
|
|
144
|
+
* field is optional and an omitted one (or a zero) changes nothing.
|
|
133
145
|
*/
|
|
134
146
|
export declare function isWizardConfigured(input: {
|
|
135
147
|
effectiveClient: boolean;
|
|
@@ -139,6 +151,7 @@ export declare function isWizardConfigured(input: {
|
|
|
139
151
|
tokenConfigured: boolean;
|
|
140
152
|
clientServerUrl: string;
|
|
141
153
|
clientState: string | undefined;
|
|
154
|
+
pairedServerCount?: number;
|
|
142
155
|
}): boolean;
|
|
143
156
|
export interface WizardFormSeed {
|
|
144
157
|
domain: string;
|
|
@@ -211,6 +224,35 @@ export interface ClientWizardLights {
|
|
|
211
224
|
/** Whether the session-sync and plugin-bridge interceptors are active. */
|
|
212
225
|
sync: LightState;
|
|
213
226
|
}
|
|
227
|
+
/** The overview card's derived counters and lights (MS-6): the 第 3 格
|
|
228
|
+
* 「连接状态」 shows `M / N 台在线` with {@link WizardOverviewSummary.connectionLight}
|
|
229
|
+
* summarizing the pool's health, and the 第 4 格 「已配对服务端」 shows
|
|
230
|
+
* `已配对 N / maxServers 台` with {@link WizardOverviewSummary.serversLight}
|
|
231
|
+
* turning red exactly at the cap. Input is the DERIVED pool list
|
|
232
|
+
* ({@link ClientServerView} — the view vocabulary's state words), in pairing
|
|
233
|
+
* order; order never matters to the counts. */
|
|
234
|
+
export interface WizardOverviewSummary {
|
|
235
|
+
totalCount: number;
|
|
236
|
+
onlineCount: number;
|
|
237
|
+
/** Everything that is neither connected nor revoked (unreachable,
|
|
238
|
+
* unexpected, incompatible, invalid-url, …). */
|
|
239
|
+
offlineCount: number;
|
|
240
|
+
revokedCount: number;
|
|
241
|
+
maxServers: number;
|
|
242
|
+
limitReached: boolean;
|
|
243
|
+
connectionLight: LightState;
|
|
244
|
+
serversLight: LightState;
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Derive the sub-client overview summary off one derived pool list: green
|
|
248
|
+
* only when EVERY paired server is connected; red when any server is in a
|
|
249
|
+
* state that will not recover on its own (revoked / incompatible /
|
|
250
|
+
* invalid-url) or when the pool is FULL — the cap is a servers fact, so a
|
|
251
|
+
* full pool of healthy connections still shows a red servers light while its
|
|
252
|
+
* connection light stays green; amber for the rest (nothing paired yet, or
|
|
253
|
+
* servers the retry ladder is still working on).
|
|
254
|
+
*/
|
|
255
|
+
export declare function deriveClientOverviewSummary(servers: readonly ClientServerView[], maxServers?: number): WizardOverviewSummary;
|
|
214
256
|
/**
|
|
215
257
|
* Derive the three status lights for the desktop sub-client verification
|
|
216
258
|
* step (`role === 'client'`).
|
|
@@ -220,6 +262,18 @@ export declare function deriveClientWizardLights(input: {
|
|
|
220
262
|
clientState: string | undefined;
|
|
221
263
|
interceptInstalled?: boolean | undefined;
|
|
222
264
|
}): ClientWizardLights;
|
|
265
|
+
/**
|
|
266
|
+
* The wizard step-3's three lights for ONE selected paired server (MS-8):
|
|
267
|
+
* the credential is green by the row's own existence (the token lives in the
|
|
268
|
+
* pool store, never in the row) and red only when the server refused it
|
|
269
|
+
* (`revoked`); the connection follows the same fail-set the global lights
|
|
270
|
+
* use (an offline server mid-retry is red here too — the step is staring at
|
|
271
|
+
* THAT one server, not the pool); sync is green on a connected row whose
|
|
272
|
+
* interface groups all match, red on a compat mismatch, amber otherwise.
|
|
273
|
+
* `undefined` (nothing paired, or nothing selected yet) keeps all three
|
|
274
|
+
* amber.
|
|
275
|
+
*/
|
|
276
|
+
export declare function deriveClientServerLights(server: ClientServerView | undefined): ClientWizardLights;
|
|
223
277
|
/** Pairing-code countdown, whole seconds, never negative. */
|
|
224
278
|
export declare function pairingSecondsLeft(expiresAt: number, now: number): number;
|
|
225
279
|
/**
|
|
@@ -236,6 +290,7 @@ export interface SnippetInput {
|
|
|
236
290
|
domain: string;
|
|
237
291
|
upstreamHost: string;
|
|
238
292
|
upstreamPort: number;
|
|
293
|
+
lang?: 'zh' | 'en' | undefined;
|
|
239
294
|
}
|
|
240
295
|
export declare function nginxSnippetText(input: SnippetInput): string | null;
|
|
241
296
|
export declare function caddySnippetText(input: SnippetInput): string | null;
|