ds-harness-remote 0.4.26 → 0.4.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -6
- package/dist/client-runtime.d.ts +11 -0
- package/dist/client-runtime.d.ts.map +1 -1
- package/dist/client-runtime.js +62 -0
- package/dist/client-runtime.js.map +1 -1
- package/dist/client.github.js +18 -51
- package/dist/client.js +18 -51
- package/dist/client.js.map +1 -1
- package/dist/codex/domain.d.ts.map +1 -1
- package/dist/codex/domain.js +22 -0
- package/dist/codex/domain.js.map +1 -1
- package/dist/config.d.ts +6 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +4 -1
- package/dist/config.js.map +1 -1
- package/dist/control-runtime.d.ts.map +1 -1
- package/dist/control-runtime.js +16 -1
- package/dist/control-runtime.js.map +1 -1
- package/dist/harness-version.d.ts.map +1 -1
- package/dist/harness-version.js +16 -3
- package/dist/harness-version.js.map +1 -1
- package/dist/index.js +154 -31
- package/dist/index.js.map +3 -3
- package/dist/loopback-host.d.ts +2 -2
- package/dist/loopback-host.d.ts.map +1 -1
- package/dist/loopback-host.js +41 -16
- package/dist/loopback-host.js.map +1 -1
- package/dist/server-api.d.ts +2 -0
- package/dist/server-api.d.ts.map +1 -1
- package/dist/server-api.js +5 -0
- package/dist/server-api.js.map +1 -1
- package/dist/server-connection.d.ts.map +1 -1
- package/dist/server-connection.js +8 -0
- package/dist/server-connection.js.map +1 -1
- package/dist/service.d.ts +4 -1
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +19 -5
- package/dist/service.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dsh-plugin.json +1 -1
- package/package.json +1 -1
package/dist/client.github.js
CHANGED
|
@@ -1771,8 +1771,8 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
1771
1771
|
}
|
|
1772
1772
|
var localeNamespace = "ds-harness-remote", en = {
|
|
1773
1773
|
terminalRemote: "Remote terminal",
|
|
1774
|
-
terminalRemoteHint: "Allow trusted Remote devices to run an interactive shell as this Host user.
|
|
1775
|
-
terminalRemoteUnavailable: "Remote terminal is unavailable. Enable Remote terminal in the Host Remote settings
|
|
1774
|
+
terminalRemoteHint: "Allow trusted Remote devices to run an interactive shell as this Host user. On by default; independent of Agent approvals. Toggling saves and applies immediately.",
|
|
1775
|
+
terminalRemoteUnavailable: "Remote terminal is unavailable. Enable Remote terminal in the Host Remote settings; the switch applies immediately.",
|
|
1776
1776
|
previewPorts: "Remote preview ports",
|
|
1777
1777
|
previewPortsHint: "Allow specific Host ports (1024\u201365535), separated by commas. Empty disables preview. HTTP, WebSocket and hot reload are supported.",
|
|
1778
1778
|
developmentSave: "Save access settings",
|
|
@@ -1980,7 +1980,6 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
1980
1980
|
startSignIn: "Start sign-in",
|
|
1981
1981
|
allowControlCurrentDevice: "Allow control of this device",
|
|
1982
1982
|
allowControlDevice: "Allow control of device",
|
|
1983
|
-
allowRemoteTerminal: "Allow remote terminal",
|
|
1984
1983
|
connectedClientCount: "{count} connected",
|
|
1985
1984
|
checkAcp: "Check ACP",
|
|
1986
1985
|
checkingAcp: "Checking ACP\u2026",
|
|
@@ -2012,8 +2011,8 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
2012
2011
|
codexVirtualSessions: "Sessions"
|
|
2013
2012
|
}, zh = {
|
|
2014
2013
|
terminalRemote: "\u8FDC\u7A0B\u7EC8\u7AEF",
|
|
2015
|
-
terminalRemoteHint: "\u5141\u8BB8\u53D7\u4FE1\u4EFB\u7684 Remote \u8BBE\u5907\u4EE5\u6B64 Host \u7528\u6237\u8EAB\u4EFD\u8FD0\u884C\u4EA4\u4E92\u5F0F Shell\u3002\u9ED8\u8BA4\
|
|
2016
|
-
terminalRemoteUnavailable: "\u8FDC\u7A0B\u7EC8\u7AEF\u4E0D\u53EF\u7528\u3002\u8BF7\u5728 Host \u7684 Remote \u8BBE\u7F6E\u4E2D\u5F00\u542F\u300C\u8FDC\u7A0B\u7EC8\u7AEF\u300D\uFF0C\
|
|
2014
|
+
terminalRemoteHint: "\u5141\u8BB8\u53D7\u4FE1\u4EFB\u7684 Remote \u8BBE\u5907\u4EE5\u6B64 Host \u7528\u6237\u8EAB\u4EFD\u8FD0\u884C\u4EA4\u4E92\u5F0F Shell\u3002\u9ED8\u8BA4\u5F00\u542F\uFF0C\u72EC\u7ACB\u4E8E Agent \u5BA1\u6279\uFF1B\u5207\u6362\u540E\u7ACB\u5373\u4FDD\u5B58\u5E76\u751F\u6548\u3002",
|
|
2015
|
+
terminalRemoteUnavailable: "\u8FDC\u7A0B\u7EC8\u7AEF\u4E0D\u53EF\u7528\u3002\u8BF7\u5728 Host \u7684 Remote \u8BBE\u7F6E\u4E2D\u5F00\u542F\u300C\u8FDC\u7A0B\u7EC8\u7AEF\u300D\uFF0C\u5F00\u5173\u4F1A\u7ACB\u5373\u751F\u6548\u3002",
|
|
2017
2016
|
previewPorts: "\u8FDC\u7A0B\u9884\u89C8\u7AEF\u53E3",
|
|
2018
2017
|
previewPortsHint: "\u586B\u5199\u5141\u8BB8\u8BBF\u95EE\u7684 Host \u7AEF\u53E3\uFF081024\u201365535\uFF09\uFF0C\u4EE5\u9017\u53F7\u5206\u9694\u3002\u7559\u7A7A\u7981\u7528\u9884\u89C8\uFF1B\u652F\u6301 HTTP\u3001WebSocket \u548C\u70ED\u66F4\u65B0\u3002",
|
|
2019
2018
|
developmentSave: "\u4FDD\u5B58\u8BBF\u95EE\u8BBE\u7F6E",
|
|
@@ -2221,7 +2220,6 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
2221
2220
|
startSignIn: "\u5F00\u59CB\u767B\u5F55",
|
|
2222
2221
|
allowControlCurrentDevice: "\u5141\u8BB8\u63A7\u5236\u5F53\u524D\u8BBE\u5907",
|
|
2223
2222
|
allowControlDevice: "\u5141\u8BB8\u63A7\u5236\u8BBE\u5907",
|
|
2224
|
-
allowRemoteTerminal: "\u5141\u8BB8\u8FDC\u7A0B\u7EC8\u7AEF",
|
|
2225
2223
|
connectedClientCount: "{count} \u53F0\u5DF2\u8FDE\u63A5",
|
|
2226
2224
|
checkAcp: "\u68C0\u6D4B ACP",
|
|
2227
2225
|
checkingAcp: "\u6B63\u5728\u68C0\u6D4B ACP\u2026",
|
|
@@ -2444,8 +2442,8 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
2444
2442
|
}
|
|
2445
2443
|
}
|
|
2446
2444
|
function RemotePluginOptions(props) {
|
|
2447
|
-
let { t } = props, [open, setOpen] = React.useState(props.view === "page"), [serverUrl, setServerUrl] = React.useState(""), [codexEnabled, setCodexEnabled] = React.useState(!0), [
|
|
2448
|
-
setSettingsView(view), setServerUrl(view.config.serverUrl ?? "https://dsh.r2049.cn"), setCodexEnabled(view.config.codex?.enabled ?? !0), setTerminalEnabled(view.config.terminal?.enabled ?? !
|
|
2445
|
+
let { t } = props, [open, setOpen] = React.useState(props.view === "page"), [serverUrl, setServerUrl] = React.useState(""), [codexEnabled, setCodexEnabled] = React.useState(!0), [portsBusy, setPortsBusy] = React.useState(!1), [previewPorts, setPreviewPorts] = React.useState(""), role = "host", [registrationCode, setRegistrationCode] = React.useState(""), [associations, setAssociations] = React.useState({}), [loaded, setLoaded] = React.useState(!1), [writable, setWritable] = React.useState(!1), [busy, setBusy] = React.useState(!1), [terminalEnabled, setTerminalEnabled] = React.useState(!1), [terminalBusy, setTerminalBusy] = React.useState(!1), [codexBusy, setCodexBusy] = React.useState(!1), [acpBackends, setAcpBackends] = React.useState([]), [acpAvailability, setAcpAvailability] = React.useState({}), [acpChecking, setAcpChecking] = React.useState({}), [acpCheckResults, setAcpCheckResults] = React.useState({}), [addingAcp, setAddingAcp] = React.useState(!1), [acpName, setAcpName] = React.useState(""), [acpCommand, setAcpCommand] = React.useState(""), [acpArguments, setAcpArguments] = React.useState("acp"), [reconnectBusy, setReconnectBusy] = React.useState(!1), [hostStatus, setHostStatus] = React.useState(void 0), [hostName, setHostName] = React.useState(""), [hostDeviceId, setHostDeviceId] = React.useState(""), [notice, setNotice] = React.useState(void 0), [error, setError] = React.useState(void 0), [settingsView, setSettingsView] = React.useState(void 0), persistedServerUrl = settingsView?.config.serverUrl ?? "https://dsh.r2049.cn", association = associations.client ?? associations.host, serverDirty = settingsView !== void 0 && serverUrl !== persistedServerUrl, draftDirty = serverDirty, applyView = (view) => {
|
|
2446
|
+
setSettingsView(view), setServerUrl(view.config.serverUrl ?? "https://dsh.r2049.cn"), setCodexEnabled(view.config.codex?.enabled ?? !0), setTerminalEnabled(view.config.terminal?.enabled ?? !0), setPreviewPorts((view.config.loopback?.ports ?? []).join(", ")), setAcpBackends((view.config.acp?.backends ?? []).map((item) => ({ id: item.id, enabled: item.enabled !== !1 }))), setAcpAvailability(view.acpAvailability ?? {}), setAssociations(view.associations ?? (view.association === void 0 ? {} : { host: view.association })), setWritable(view.writable), setLoaded(!0);
|
|
2449
2447
|
}, load = async () => {
|
|
2450
2448
|
let [view, status] = await Promise.all([
|
|
2451
2449
|
props.control("settings.get"),
|
|
@@ -2898,7 +2896,7 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
2898
2896
|
);
|
|
2899
2897
|
}
|
|
2900
2898
|
function RemoteWorkspaceAction(props) {
|
|
2901
|
-
let { t } = props, [open, setOpen] = React.useState(!1), [status, setStatus] = React.useState(void 0), [devices, setDevices] = React.useState([]), [selectedHost, setSelectedHost] = React.useState(void 0), [connectingHost, setConnectingHost] = React.useState(void 0), [workspaces, setWorkspaces] = React.useState([]), [codexWorkspaces, setCodexWorkspaces] = React.useState([]), [workspaceBackend, setWorkspaceBackend] = React.useState("harness"), [codexWorkspaceId, setCodexWorkspaceId] = React.useState(void 0), [directory, setDirectory] = React.useState(void 0), [path, setPath] = React.useState(""), [addingWorkspace, setAddingWorkspace] = React.useState(!1), [showAllWorkspaces, setShowAllWorkspaces] = React.useState(!1), [showAllCodexWorkspaces, setShowAllCodexWorkspaces] = React.useState(!1), [devicesOpen, setDevicesOpen] = React.useState(!1), workspaceListId = "dsh-remote-workspace-list", codexWorkspaceHeadingId = "dsh-remote-codex-workspace-heading", codexWorkspaceListId = "dsh-remote-codex-workspace-list", [busy, setBusy] = React.useState(!1), [
|
|
2899
|
+
let { t } = props, [open, setOpen] = React.useState(!1), [status, setStatus] = React.useState(void 0), [devices, setDevices] = React.useState([]), [selectedHost, setSelectedHost] = React.useState(void 0), [connectingHost, setConnectingHost] = React.useState(void 0), [workspaces, setWorkspaces] = React.useState([]), [codexWorkspaces, setCodexWorkspaces] = React.useState([]), [workspaceBackend, setWorkspaceBackend] = React.useState("harness"), [codexWorkspaceId, setCodexWorkspaceId] = React.useState(void 0), [directory, setDirectory] = React.useState(void 0), [path, setPath] = React.useState(""), [addingWorkspace, setAddingWorkspace] = React.useState(!1), [showAllWorkspaces, setShowAllWorkspaces] = React.useState(!1), [showAllCodexWorkspaces, setShowAllCodexWorkspaces] = React.useState(!1), [devicesOpen, setDevicesOpen] = React.useState(!1), workspaceListId = "dsh-remote-workspace-list", codexWorkspaceHeadingId = "dsh-remote-codex-workspace-heading", codexWorkspaceListId = "dsh-remote-codex-workspace-list", [busy, setBusy] = React.useState(!1), [needsAuthorization, setNeedsAuthorization] = React.useState(!1), [email, setEmail] = React.useState(""), [password, setPassword] = React.useState(""), [loginServerUrl, setLoginServerUrl] = React.useState("https://dsh.r2049.cn"), [loginMethod, setLoginMethod] = React.useState(props.preferredQrProvider), [loginMethodManuallySelected, setLoginMethodManuallySelected] = React.useState(!1), [qrSession, setQrSession] = React.useState(void 0), [qrImage, setQrImage] = React.useState(void 0), [qrExpired, setQrExpired] = React.useState(!1), [progress, setProgress] = React.useState(void 0), progressRun = React.useRef(0), qrFlowRun = React.useRef(0), [notice, setNotice] = React.useState(void 0), [error, setError] = React.useState(void 0);
|
|
2902
2900
|
React.useEffect(() => {
|
|
2903
2901
|
open || setDevicesOpen(!1);
|
|
2904
2902
|
}, [open]), React.useEffect(() => {
|
|
@@ -2926,9 +2924,6 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
2926
2924
|
props.control("status").then(setStatus).catch(() => {
|
|
2927
2925
|
});
|
|
2928
2926
|
}, []), React.useEffect(() => {
|
|
2929
|
-
status?.hostAuthorizationAvailable === !0 && props.control("settings.get").then((view) => setTerminalEnabled(view.config.terminal?.enabled === !0)).catch(() => {
|
|
2930
|
-
});
|
|
2931
|
-
}, [status?.hostAuthorizationAvailable]), React.useEffect(() => {
|
|
2932
2927
|
status?.serverUrl !== void 0 && loginServerUrl === "https://dsh.r2049.cn" && setLoginServerUrl(status.serverUrl);
|
|
2933
2928
|
}, [status?.serverUrl]), React.useEffect(() => {
|
|
2934
2929
|
let remoteActive = status?.mode === "remote";
|
|
@@ -3107,17 +3102,6 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
3107
3102
|
} finally {
|
|
3108
3103
|
setBusy(!1);
|
|
3109
3104
|
}
|
|
3110
|
-
}, setRemoteTerminal = async (enabled) => {
|
|
3111
|
-
let previous = terminalEnabled;
|
|
3112
|
-
setTerminalEnabled(enabled), setTerminalBusy(!0), setError(void 0);
|
|
3113
|
-
try {
|
|
3114
|
-
let view = await props.control("settings.development.set", { terminalEnabled: enabled });
|
|
3115
|
-
setTerminalEnabled(view.config.terminal?.enabled === !0);
|
|
3116
|
-
} catch (reason) {
|
|
3117
|
-
setTerminalEnabled(previous), setError(messageOf(reason));
|
|
3118
|
-
} finally {
|
|
3119
|
-
setTerminalBusy(!1);
|
|
3120
|
-
}
|
|
3121
3105
|
}, logoutRemote = async () => {
|
|
3122
3106
|
setBusy(!0), setError(void 0);
|
|
3123
3107
|
try {
|
|
@@ -3422,33 +3406,16 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
3422
3406
|
React.createElement("strong", null, t("chooseHost")),
|
|
3423
3407
|
status?.hostAuthorizationAvailable ? React.createElement(
|
|
3424
3408
|
"div",
|
|
3425
|
-
{ className: "
|
|
3426
|
-
React.createElement(
|
|
3427
|
-
|
|
3428
|
-
|
|
3429
|
-
|
|
3430
|
-
|
|
3431
|
-
|
|
3432
|
-
|
|
3433
|
-
|
|
3434
|
-
|
|
3435
|
-
checked: status.host?.authorized === !0,
|
|
3436
|
-
onChange: (event) => void setCurrentDeviceControl(event.target.checked)
|
|
3437
|
-
})
|
|
3438
|
-
),
|
|
3439
|
-
React.createElement(
|
|
3440
|
-
"label",
|
|
3441
|
-
{ className: "dshRemoteHostControlToggle" },
|
|
3442
|
-
React.createElement("span", null, t("allowRemoteTerminal")),
|
|
3443
|
-
React.createElement("input", {
|
|
3444
|
-
type: "checkbox",
|
|
3445
|
-
role: "switch",
|
|
3446
|
-
disabled: busy || terminalBusy,
|
|
3447
|
-
"aria-label": t("allowRemoteTerminal"),
|
|
3448
|
-
checked: terminalEnabled,
|
|
3449
|
-
onChange: (event) => void setRemoteTerminal(event.target.checked)
|
|
3450
|
-
})
|
|
3451
|
-
)
|
|
3409
|
+
{ className: "dshRemoteHostControlToggle" },
|
|
3410
|
+
React.createElement("span", null, t("allowControlDevice")),
|
|
3411
|
+
React.createElement("input", {
|
|
3412
|
+
type: "checkbox",
|
|
3413
|
+
role: "switch",
|
|
3414
|
+
disabled: busy,
|
|
3415
|
+
"aria-label": t("allowControlDevice"),
|
|
3416
|
+
checked: status.host?.authorized === !0,
|
|
3417
|
+
onChange: (event) => void setCurrentDeviceControl(event.target.checked)
|
|
3418
|
+
})
|
|
3452
3419
|
) : null,
|
|
3453
3420
|
connectedMenu
|
|
3454
3421
|
)
|
|
@@ -4032,7 +3999,7 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
4032
3999
|
".dshRemoteClientLogin{width:min(440px,100%);display:flex;flex-direction:column;gap:8px}.dshRemoteClientLogin input{min-height:40px;border:1px solid var(--dsw-alias-border-l2);border-radius:8px;background:var(--dsw-alias-bg-layer-3);color:inherit;padding:0 12px;font:inherit}.dshRemoteClientLogin button{align-self:flex-start;min-height:40px;border:0;border-radius:8px;background:var(--dsw-alias-label-primary);color:var(--dsw-alias-bg-layer-1);padding:8px 16px;cursor:pointer}",
|
|
4033
4000
|
".dshRemoteQrLogin{width:min(440px,100%);display:flex;flex-direction:column;align-items:center;gap:8px;padding:6px 0 2px;text-align:center}.dshRemoteQrLogin img,.dshRemoteQrPlaceholder{box-sizing:border-box;width:200px;height:200px;border:1px solid var(--dsw-alias-border-l2);border-radius:12px;background:#fff;padding:8px}.dshRemoteQrOpen{display:flex;flex-direction:column;align-items:center;gap:5px;color:var(--dsw-alias-label-secondary);font-size:12px;text-decoration:none}.dshRemoteQrOpen:hover{color:var(--dsw-alias-label-primary);text-decoration:underline}.dshRemoteQrOpen:hover img{border-color:var(--dsw-alias-label-dimmed)}.dshRemoteQrOpen:focus-visible{border-radius:12px;outline:2px solid var(--dsw-alias-brand-primary);outline-offset:3px}.dshRemoteQrPlaceholder{display:flex;align-items:center;justify-content:center;color:var(--dsw-alias-label-secondary)}.dshRemoteQrLogin>strong{font-size:14px}.dshRemoteQrLogin>p{max-width:48ch;margin:0;color:var(--dsw-alias-label-secondary);font-size:12px;line-height:1.5}.dshRemoteQrLogin>.dshRemoteServiceAddress{margin-top:2px;color:var(--dsw-alias-label-tertiary)}.dshRemoteServiceAddress>a{color:var(--dsw-alias-label-secondary);text-decoration:none}.dshRemoteServiceAddress>a:hover{color:var(--dsw-alias-label-primary);text-decoration:underline}.dshRemoteQrLogin>button,.dshRemoteClientLogin>.dshRemoteLoginSwitch{min-height:32px;border:0;background:transparent;color:var(--dsw-alias-label-secondary);padding:4px 8px;font:inherit;font-size:12px;cursor:pointer}.dshRemoteQrLogin>button:hover,.dshRemoteClientLogin>.dshRemoteLoginSwitch:hover{color:var(--dsw-alias-label-primary);text-decoration:underline}.dshRemoteClientLogin>.dshRemoteLoginSwitch{align-self:flex-start;background:transparent;color:var(--dsw-alias-label-secondary);padding-left:0}",
|
|
4034
4001
|
".dshRemoteLoginHeading{box-sizing:border-box;width:100%;display:flex;align-items:baseline;gap:10px;overflow:hidden;white-space:nowrap}.dshRemoteLoginTitle{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dshRemoteLoginHeading>span{flex:0 0 auto;color:var(--dsw-alias-label-secondary);font-size:13px;font-weight:400}.dshRemoteLoginTabs{box-sizing:border-box;width:100%}.dshRemoteLoginTabs>button{min-width:0;flex:1;display:flex;align-items:center;justify-content:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:center}.dshRemoteLoginTabs>button.isActive::after{right:0;left:0;border-radius:0}.dshRemoteClientLogin,.dshRemoteQrLogin{box-sizing:border-box;width:100%;height:300px;min-height:300px}.dshRemoteClientLogin{align-items:stretch;padding-top:16px}.dshRemoteClientLogin>button{align-self:stretch;width:100%}.dshRemoteQrLogin{padding-top:12px}",
|
|
4035
|
-
'.
|
|
4002
|
+
'.dshRemoteHostControlToggle{display:flex;align-items:center;gap:7px;color:var(--dsw-alias-label-secondary);font-size:12px;line-height:18px;white-space:nowrap;cursor:default}.dshRemoteHostControlToggle>input{appearance:none;box-sizing:border-box;position:relative;width:32px;height:18px;flex:0 0 auto;margin:0;border:1px solid var(--dsw-alias-label-secondary);border-radius:999px;background:var(--dsw-alias-bg-layer-3);cursor:pointer;box-shadow:inset 0 0 0 1px var(--dsw-alias-border-l2);transition:background .16s ease-out,border-color .16s ease-out,box-shadow .16s ease-out}.dshRemoteHostControlToggle>input::after{content:"";position:absolute;top:2px;left:2px;width:12px;height:12px;border-radius:50%;background:var(--dsw-alias-label-secondary);transition:transform .16s ease-out,background .16s ease-out}.dshRemoteHostControlToggle>input:checked{border-color:var(--dsw-alias-state-success-primary);background:var(--dsw-alias-state-success-primary);box-shadow:none}.dshRemoteHostControlToggle>input:checked::after{transform:translateX(14px);background:var(--dsw-alias-bg-layer-1)}.dshRemoteHostControlToggle>input:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:2px}.dshRemoteHostControlToggle>input:disabled{opacity:.5;cursor:default}@media(prefers-reduced-motion:reduce){.dshRemoteHostControlToggle>input,.dshRemoteHostControlToggle>input::after{transition:none}}',
|
|
4036
4003
|
".dshRemoteAccountFooter{display:flex;align-items:center;justify-content:space-between;gap:12px;border-top:1px solid var(--dsw-alias-border-l2);padding-top:14px;color:var(--dsw-alias-label-secondary);font-size:12px}.dshRemoteAccountExit{flex:0 0 auto;border:0;background:transparent;color:var(--dsw-alias-label-secondary);cursor:pointer;padding:5px 0;font-size:12px;line-height:1.5;white-space:nowrap}.dshRemoteAccountExit:hover:not(:disabled){color:var(--dsw-alias-label-primary);text-decoration:underline}.dshRemoteAccountExit:disabled{opacity:.5;cursor:default;text-decoration:none}",
|
|
4037
4004
|
".dshRemoteLocalLink{align-self:flex-start;border:0;background:transparent;color:var(--dsw-alias-label-secondary);padding:4px 0;cursor:pointer}.dshRemoteLocalLink:hover{color:var(--dsw-alias-label-primary)}",
|
|
4038
4005
|
"@keyframes dshRemotePageIn{from{opacity:0;transform:translateY(6px) scale(.99)}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.dshRemotePage{animation:none}}@media(max-width:620px){.dshRemoteBackdrop{padding:12px}.dshRemotePage{max-height:calc(100vh - 24px)}.dshRemotePageHeader{gap:8px;padding:12px 16px}.dshRemotePage.hasSelectedHost .dshRemotePageBack{max-width:112px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dshRemoteSectionHeading{align-items:flex-start;flex-direction:column;gap:8px}.dshRemoteWorkspaceHeading{align-items:center;flex-direction:row}.dshRemoteSectionActions{width:100%;justify-content:space-between}.dshRemotePageBody{padding:20px 16px}.dshRemoteOpenBar{align-items:flex-end}.dshRemoteOpenBar>button{min-height:48px}}",
|
package/dist/client.js
CHANGED
|
@@ -1771,8 +1771,8 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
1771
1771
|
}
|
|
1772
1772
|
var localeNamespace = "ds-harness-remote", en = {
|
|
1773
1773
|
terminalRemote: "Remote terminal",
|
|
1774
|
-
terminalRemoteHint: "Allow trusted Remote devices to run an interactive shell as this Host user.
|
|
1775
|
-
terminalRemoteUnavailable: "Remote terminal is unavailable. Enable Remote terminal in the Host Remote settings
|
|
1774
|
+
terminalRemoteHint: "Allow trusted Remote devices to run an interactive shell as this Host user. On by default; independent of Agent approvals. Toggling saves and applies immediately.",
|
|
1775
|
+
terminalRemoteUnavailable: "Remote terminal is unavailable. Enable Remote terminal in the Host Remote settings; the switch applies immediately.",
|
|
1776
1776
|
previewPorts: "Remote preview ports",
|
|
1777
1777
|
previewPortsHint: "Allow specific Host ports (1024\u201365535), separated by commas. Empty disables preview. HTTP, WebSocket and hot reload are supported.",
|
|
1778
1778
|
developmentSave: "Save access settings",
|
|
@@ -1980,7 +1980,6 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
1980
1980
|
startSignIn: "Start sign-in",
|
|
1981
1981
|
allowControlCurrentDevice: "Allow control of this device",
|
|
1982
1982
|
allowControlDevice: "Allow control of device",
|
|
1983
|
-
allowRemoteTerminal: "Allow remote terminal",
|
|
1984
1983
|
connectedClientCount: "{count} connected",
|
|
1985
1984
|
checkAcp: "Check ACP",
|
|
1986
1985
|
checkingAcp: "Checking ACP\u2026",
|
|
@@ -2012,8 +2011,8 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
2012
2011
|
codexVirtualSessions: "Sessions"
|
|
2013
2012
|
}, zh = {
|
|
2014
2013
|
terminalRemote: "\u8FDC\u7A0B\u7EC8\u7AEF",
|
|
2015
|
-
terminalRemoteHint: "\u5141\u8BB8\u53D7\u4FE1\u4EFB\u7684 Remote \u8BBE\u5907\u4EE5\u6B64 Host \u7528\u6237\u8EAB\u4EFD\u8FD0\u884C\u4EA4\u4E92\u5F0F Shell\u3002\u9ED8\u8BA4\
|
|
2016
|
-
terminalRemoteUnavailable: "\u8FDC\u7A0B\u7EC8\u7AEF\u4E0D\u53EF\u7528\u3002\u8BF7\u5728 Host \u7684 Remote \u8BBE\u7F6E\u4E2D\u5F00\u542F\u300C\u8FDC\u7A0B\u7EC8\u7AEF\u300D\uFF0C\
|
|
2014
|
+
terminalRemoteHint: "\u5141\u8BB8\u53D7\u4FE1\u4EFB\u7684 Remote \u8BBE\u5907\u4EE5\u6B64 Host \u7528\u6237\u8EAB\u4EFD\u8FD0\u884C\u4EA4\u4E92\u5F0F Shell\u3002\u9ED8\u8BA4\u5F00\u542F\uFF0C\u72EC\u7ACB\u4E8E Agent \u5BA1\u6279\uFF1B\u5207\u6362\u540E\u7ACB\u5373\u4FDD\u5B58\u5E76\u751F\u6548\u3002",
|
|
2015
|
+
terminalRemoteUnavailable: "\u8FDC\u7A0B\u7EC8\u7AEF\u4E0D\u53EF\u7528\u3002\u8BF7\u5728 Host \u7684 Remote \u8BBE\u7F6E\u4E2D\u5F00\u542F\u300C\u8FDC\u7A0B\u7EC8\u7AEF\u300D\uFF0C\u5F00\u5173\u4F1A\u7ACB\u5373\u751F\u6548\u3002",
|
|
2017
2016
|
previewPorts: "\u8FDC\u7A0B\u9884\u89C8\u7AEF\u53E3",
|
|
2018
2017
|
previewPortsHint: "\u586B\u5199\u5141\u8BB8\u8BBF\u95EE\u7684 Host \u7AEF\u53E3\uFF081024\u201365535\uFF09\uFF0C\u4EE5\u9017\u53F7\u5206\u9694\u3002\u7559\u7A7A\u7981\u7528\u9884\u89C8\uFF1B\u652F\u6301 HTTP\u3001WebSocket \u548C\u70ED\u66F4\u65B0\u3002",
|
|
2019
2018
|
developmentSave: "\u4FDD\u5B58\u8BBF\u95EE\u8BBE\u7F6E",
|
|
@@ -2221,7 +2220,6 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
2221
2220
|
startSignIn: "\u5F00\u59CB\u767B\u5F55",
|
|
2222
2221
|
allowControlCurrentDevice: "\u5141\u8BB8\u63A7\u5236\u5F53\u524D\u8BBE\u5907",
|
|
2223
2222
|
allowControlDevice: "\u5141\u8BB8\u63A7\u5236\u8BBE\u5907",
|
|
2224
|
-
allowRemoteTerminal: "\u5141\u8BB8\u8FDC\u7A0B\u7EC8\u7AEF",
|
|
2225
2223
|
connectedClientCount: "{count} \u53F0\u5DF2\u8FDE\u63A5",
|
|
2226
2224
|
checkAcp: "\u68C0\u6D4B ACP",
|
|
2227
2225
|
checkingAcp: "\u6B63\u5728\u68C0\u6D4B ACP\u2026",
|
|
@@ -2444,8 +2442,8 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
2444
2442
|
}
|
|
2445
2443
|
}
|
|
2446
2444
|
function RemotePluginOptions(props) {
|
|
2447
|
-
let { t } = props, [open, setOpen] = React.useState(props.view === "page"), [serverUrl, setServerUrl] = React.useState(""), [codexEnabled, setCodexEnabled] = React.useState(!0), [
|
|
2448
|
-
setSettingsView(view), setServerUrl(view.config.serverUrl ?? "https://dsh.r2049.cn"), setCodexEnabled(view.config.codex?.enabled ?? !0), setTerminalEnabled(view.config.terminal?.enabled ?? !
|
|
2445
|
+
let { t } = props, [open, setOpen] = React.useState(props.view === "page"), [serverUrl, setServerUrl] = React.useState(""), [codexEnabled, setCodexEnabled] = React.useState(!0), [portsBusy, setPortsBusy] = React.useState(!1), [previewPorts, setPreviewPorts] = React.useState(""), role = "host", [registrationCode, setRegistrationCode] = React.useState(""), [associations, setAssociations] = React.useState({}), [loaded, setLoaded] = React.useState(!1), [writable, setWritable] = React.useState(!1), [busy, setBusy] = React.useState(!1), [terminalEnabled, setTerminalEnabled] = React.useState(!1), [terminalBusy, setTerminalBusy] = React.useState(!1), [codexBusy, setCodexBusy] = React.useState(!1), [acpBackends, setAcpBackends] = React.useState([]), [acpAvailability, setAcpAvailability] = React.useState({}), [acpChecking, setAcpChecking] = React.useState({}), [acpCheckResults, setAcpCheckResults] = React.useState({}), [addingAcp, setAddingAcp] = React.useState(!1), [acpName, setAcpName] = React.useState(""), [acpCommand, setAcpCommand] = React.useState(""), [acpArguments, setAcpArguments] = React.useState("acp"), [reconnectBusy, setReconnectBusy] = React.useState(!1), [hostStatus, setHostStatus] = React.useState(void 0), [hostName, setHostName] = React.useState(""), [hostDeviceId, setHostDeviceId] = React.useState(""), [notice, setNotice] = React.useState(void 0), [error, setError] = React.useState(void 0), [settingsView, setSettingsView] = React.useState(void 0), persistedServerUrl = settingsView?.config.serverUrl ?? "https://dsh.r2049.cn", association = associations.client ?? associations.host, serverDirty = settingsView !== void 0 && serverUrl !== persistedServerUrl, draftDirty = serverDirty, applyView = (view) => {
|
|
2446
|
+
setSettingsView(view), setServerUrl(view.config.serverUrl ?? "https://dsh.r2049.cn"), setCodexEnabled(view.config.codex?.enabled ?? !0), setTerminalEnabled(view.config.terminal?.enabled ?? !0), setPreviewPorts((view.config.loopback?.ports ?? []).join(", ")), setAcpBackends((view.config.acp?.backends ?? []).map((item) => ({ id: item.id, enabled: item.enabled !== !1 }))), setAcpAvailability(view.acpAvailability ?? {}), setAssociations(view.associations ?? (view.association === void 0 ? {} : { host: view.association })), setWritable(view.writable), setLoaded(!0);
|
|
2449
2447
|
}, load = async () => {
|
|
2450
2448
|
let [view, status] = await Promise.all([
|
|
2451
2449
|
props.control("settings.get"),
|
|
@@ -2898,7 +2896,7 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
2898
2896
|
);
|
|
2899
2897
|
}
|
|
2900
2898
|
function RemoteWorkspaceAction(props) {
|
|
2901
|
-
let { t } = props, [open, setOpen] = React.useState(!1), [status, setStatus] = React.useState(void 0), [devices, setDevices] = React.useState([]), [selectedHost, setSelectedHost] = React.useState(void 0), [connectingHost, setConnectingHost] = React.useState(void 0), [workspaces, setWorkspaces] = React.useState([]), [codexWorkspaces, setCodexWorkspaces] = React.useState([]), [workspaceBackend, setWorkspaceBackend] = React.useState("harness"), [codexWorkspaceId, setCodexWorkspaceId] = React.useState(void 0), [directory, setDirectory] = React.useState(void 0), [path, setPath] = React.useState(""), [addingWorkspace, setAddingWorkspace] = React.useState(!1), [showAllWorkspaces, setShowAllWorkspaces] = React.useState(!1), [showAllCodexWorkspaces, setShowAllCodexWorkspaces] = React.useState(!1), [devicesOpen, setDevicesOpen] = React.useState(!1), workspaceListId = "dsh-remote-workspace-list", codexWorkspaceHeadingId = "dsh-remote-codex-workspace-heading", codexWorkspaceListId = "dsh-remote-codex-workspace-list", [busy, setBusy] = React.useState(!1), [
|
|
2899
|
+
let { t } = props, [open, setOpen] = React.useState(!1), [status, setStatus] = React.useState(void 0), [devices, setDevices] = React.useState([]), [selectedHost, setSelectedHost] = React.useState(void 0), [connectingHost, setConnectingHost] = React.useState(void 0), [workspaces, setWorkspaces] = React.useState([]), [codexWorkspaces, setCodexWorkspaces] = React.useState([]), [workspaceBackend, setWorkspaceBackend] = React.useState("harness"), [codexWorkspaceId, setCodexWorkspaceId] = React.useState(void 0), [directory, setDirectory] = React.useState(void 0), [path, setPath] = React.useState(""), [addingWorkspace, setAddingWorkspace] = React.useState(!1), [showAllWorkspaces, setShowAllWorkspaces] = React.useState(!1), [showAllCodexWorkspaces, setShowAllCodexWorkspaces] = React.useState(!1), [devicesOpen, setDevicesOpen] = React.useState(!1), workspaceListId = "dsh-remote-workspace-list", codexWorkspaceHeadingId = "dsh-remote-codex-workspace-heading", codexWorkspaceListId = "dsh-remote-codex-workspace-list", [busy, setBusy] = React.useState(!1), [needsAuthorization, setNeedsAuthorization] = React.useState(!1), [email, setEmail] = React.useState(""), [password, setPassword] = React.useState(""), [loginServerUrl, setLoginServerUrl] = React.useState("https://dsh.r2049.cn"), [loginMethod, setLoginMethod] = React.useState(props.preferredQrProvider), [loginMethodManuallySelected, setLoginMethodManuallySelected] = React.useState(!1), [qrSession, setQrSession] = React.useState(void 0), [qrImage, setQrImage] = React.useState(void 0), [qrExpired, setQrExpired] = React.useState(!1), [progress, setProgress] = React.useState(void 0), progressRun = React.useRef(0), qrFlowRun = React.useRef(0), [notice, setNotice] = React.useState(void 0), [error, setError] = React.useState(void 0);
|
|
2902
2900
|
React.useEffect(() => {
|
|
2903
2901
|
open || setDevicesOpen(!1);
|
|
2904
2902
|
}, [open]), React.useEffect(() => {
|
|
@@ -2926,9 +2924,6 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
2926
2924
|
props.control("status").then(setStatus).catch(() => {
|
|
2927
2925
|
});
|
|
2928
2926
|
}, []), React.useEffect(() => {
|
|
2929
|
-
status?.hostAuthorizationAvailable === !0 && props.control("settings.get").then((view) => setTerminalEnabled(view.config.terminal?.enabled === !0)).catch(() => {
|
|
2930
|
-
});
|
|
2931
|
-
}, [status?.hostAuthorizationAvailable]), React.useEffect(() => {
|
|
2932
2927
|
status?.serverUrl !== void 0 && loginServerUrl === "https://dsh.r2049.cn" && setLoginServerUrl(status.serverUrl);
|
|
2933
2928
|
}, [status?.serverUrl]), React.useEffect(() => {
|
|
2934
2929
|
let remoteActive = status?.mode === "remote";
|
|
@@ -3107,17 +3102,6 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
3107
3102
|
} finally {
|
|
3108
3103
|
setBusy(!1);
|
|
3109
3104
|
}
|
|
3110
|
-
}, setRemoteTerminal = async (enabled) => {
|
|
3111
|
-
let previous = terminalEnabled;
|
|
3112
|
-
setTerminalEnabled(enabled), setTerminalBusy(!0), setError(void 0);
|
|
3113
|
-
try {
|
|
3114
|
-
let view = await props.control("settings.development.set", { terminalEnabled: enabled });
|
|
3115
|
-
setTerminalEnabled(view.config.terminal?.enabled === !0);
|
|
3116
|
-
} catch (reason) {
|
|
3117
|
-
setTerminalEnabled(previous), setError(messageOf(reason));
|
|
3118
|
-
} finally {
|
|
3119
|
-
setTerminalBusy(!1);
|
|
3120
|
-
}
|
|
3121
3105
|
}, logoutRemote = async () => {
|
|
3122
3106
|
setBusy(!0), setError(void 0);
|
|
3123
3107
|
try {
|
|
@@ -3422,33 +3406,16 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
3422
3406
|
React.createElement("strong", null, t("chooseHost")),
|
|
3423
3407
|
status?.hostAuthorizationAvailable ? React.createElement(
|
|
3424
3408
|
"div",
|
|
3425
|
-
{ className: "
|
|
3426
|
-
React.createElement(
|
|
3427
|
-
|
|
3428
|
-
|
|
3429
|
-
|
|
3430
|
-
|
|
3431
|
-
|
|
3432
|
-
|
|
3433
|
-
|
|
3434
|
-
|
|
3435
|
-
checked: status.host?.authorized === !0,
|
|
3436
|
-
onChange: (event) => void setCurrentDeviceControl(event.target.checked)
|
|
3437
|
-
})
|
|
3438
|
-
),
|
|
3439
|
-
React.createElement(
|
|
3440
|
-
"label",
|
|
3441
|
-
{ className: "dshRemoteHostControlToggle" },
|
|
3442
|
-
React.createElement("span", null, t("allowRemoteTerminal")),
|
|
3443
|
-
React.createElement("input", {
|
|
3444
|
-
type: "checkbox",
|
|
3445
|
-
role: "switch",
|
|
3446
|
-
disabled: busy || terminalBusy,
|
|
3447
|
-
"aria-label": t("allowRemoteTerminal"),
|
|
3448
|
-
checked: terminalEnabled,
|
|
3449
|
-
onChange: (event) => void setRemoteTerminal(event.target.checked)
|
|
3450
|
-
})
|
|
3451
|
-
)
|
|
3409
|
+
{ className: "dshRemoteHostControlToggle" },
|
|
3410
|
+
React.createElement("span", null, t("allowControlDevice")),
|
|
3411
|
+
React.createElement("input", {
|
|
3412
|
+
type: "checkbox",
|
|
3413
|
+
role: "switch",
|
|
3414
|
+
disabled: busy,
|
|
3415
|
+
"aria-label": t("allowControlDevice"),
|
|
3416
|
+
checked: status.host?.authorized === !0,
|
|
3417
|
+
onChange: (event) => void setCurrentDeviceControl(event.target.checked)
|
|
3418
|
+
})
|
|
3452
3419
|
) : null,
|
|
3453
3420
|
connectedMenu
|
|
3454
3421
|
)
|
|
@@ -4032,7 +3999,7 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
4032
3999
|
".dshRemoteClientLogin{width:min(440px,100%);display:flex;flex-direction:column;gap:8px}.dshRemoteClientLogin input{min-height:40px;border:1px solid var(--dsw-alias-border-l2);border-radius:8px;background:var(--dsw-alias-bg-layer-3);color:inherit;padding:0 12px;font:inherit}.dshRemoteClientLogin button{align-self:flex-start;min-height:40px;border:0;border-radius:8px;background:var(--dsw-alias-label-primary);color:var(--dsw-alias-bg-layer-1);padding:8px 16px;cursor:pointer}",
|
|
4033
4000
|
".dshRemoteQrLogin{width:min(440px,100%);display:flex;flex-direction:column;align-items:center;gap:8px;padding:6px 0 2px;text-align:center}.dshRemoteQrLogin img,.dshRemoteQrPlaceholder{box-sizing:border-box;width:200px;height:200px;border:1px solid var(--dsw-alias-border-l2);border-radius:12px;background:#fff;padding:8px}.dshRemoteQrOpen{display:flex;flex-direction:column;align-items:center;gap:5px;color:var(--dsw-alias-label-secondary);font-size:12px;text-decoration:none}.dshRemoteQrOpen:hover{color:var(--dsw-alias-label-primary);text-decoration:underline}.dshRemoteQrOpen:hover img{border-color:var(--dsw-alias-label-dimmed)}.dshRemoteQrOpen:focus-visible{border-radius:12px;outline:2px solid var(--dsw-alias-brand-primary);outline-offset:3px}.dshRemoteQrPlaceholder{display:flex;align-items:center;justify-content:center;color:var(--dsw-alias-label-secondary)}.dshRemoteQrLogin>strong{font-size:14px}.dshRemoteQrLogin>p{max-width:48ch;margin:0;color:var(--dsw-alias-label-secondary);font-size:12px;line-height:1.5}.dshRemoteQrLogin>.dshRemoteServiceAddress{margin-top:2px;color:var(--dsw-alias-label-tertiary)}.dshRemoteServiceAddress>a{color:var(--dsw-alias-label-secondary);text-decoration:none}.dshRemoteServiceAddress>a:hover{color:var(--dsw-alias-label-primary);text-decoration:underline}.dshRemoteQrLogin>button,.dshRemoteClientLogin>.dshRemoteLoginSwitch{min-height:32px;border:0;background:transparent;color:var(--dsw-alias-label-secondary);padding:4px 8px;font:inherit;font-size:12px;cursor:pointer}.dshRemoteQrLogin>button:hover,.dshRemoteClientLogin>.dshRemoteLoginSwitch:hover{color:var(--dsw-alias-label-primary);text-decoration:underline}.dshRemoteClientLogin>.dshRemoteLoginSwitch{align-self:flex-start;background:transparent;color:var(--dsw-alias-label-secondary);padding-left:0}",
|
|
4034
4001
|
".dshRemoteLoginHeading{box-sizing:border-box;width:100%;display:flex;align-items:baseline;gap:10px;overflow:hidden;white-space:nowrap}.dshRemoteLoginTitle{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dshRemoteLoginHeading>span{flex:0 0 auto;color:var(--dsw-alias-label-secondary);font-size:13px;font-weight:400}.dshRemoteLoginTabs{box-sizing:border-box;width:100%}.dshRemoteLoginTabs>button{min-width:0;flex:1;display:flex;align-items:center;justify-content:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:center}.dshRemoteLoginTabs>button.isActive::after{right:0;left:0;border-radius:0}.dshRemoteClientLogin,.dshRemoteQrLogin{box-sizing:border-box;width:100%;height:300px;min-height:300px}.dshRemoteClientLogin{align-items:stretch;padding-top:16px}.dshRemoteClientLogin>button{align-self:stretch;width:100%}.dshRemoteQrLogin{padding-top:12px}",
|
|
4035
|
-
'.
|
|
4002
|
+
'.dshRemoteHostControlToggle{display:flex;align-items:center;gap:7px;color:var(--dsw-alias-label-secondary);font-size:12px;line-height:18px;white-space:nowrap;cursor:default}.dshRemoteHostControlToggle>input{appearance:none;box-sizing:border-box;position:relative;width:32px;height:18px;flex:0 0 auto;margin:0;border:1px solid var(--dsw-alias-label-secondary);border-radius:999px;background:var(--dsw-alias-bg-layer-3);cursor:pointer;box-shadow:inset 0 0 0 1px var(--dsw-alias-border-l2);transition:background .16s ease-out,border-color .16s ease-out,box-shadow .16s ease-out}.dshRemoteHostControlToggle>input::after{content:"";position:absolute;top:2px;left:2px;width:12px;height:12px;border-radius:50%;background:var(--dsw-alias-label-secondary);transition:transform .16s ease-out,background .16s ease-out}.dshRemoteHostControlToggle>input:checked{border-color:var(--dsw-alias-state-success-primary);background:var(--dsw-alias-state-success-primary);box-shadow:none}.dshRemoteHostControlToggle>input:checked::after{transform:translateX(14px);background:var(--dsw-alias-bg-layer-1)}.dshRemoteHostControlToggle>input:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:2px}.dshRemoteHostControlToggle>input:disabled{opacity:.5;cursor:default}@media(prefers-reduced-motion:reduce){.dshRemoteHostControlToggle>input,.dshRemoteHostControlToggle>input::after{transition:none}}',
|
|
4036
4003
|
".dshRemoteAccountFooter{display:flex;align-items:center;justify-content:space-between;gap:12px;border-top:1px solid var(--dsw-alias-border-l2);padding-top:14px;color:var(--dsw-alias-label-secondary);font-size:12px}.dshRemoteAccountExit{flex:0 0 auto;border:0;background:transparent;color:var(--dsw-alias-label-secondary);cursor:pointer;padding:5px 0;font-size:12px;line-height:1.5;white-space:nowrap}.dshRemoteAccountExit:hover:not(:disabled){color:var(--dsw-alias-label-primary);text-decoration:underline}.dshRemoteAccountExit:disabled{opacity:.5;cursor:default;text-decoration:none}",
|
|
4037
4004
|
".dshRemoteLocalLink{align-self:flex-start;border:0;background:transparent;color:var(--dsw-alias-label-secondary);padding:4px 0;cursor:pointer}.dshRemoteLocalLink:hover{color:var(--dsw-alias-label-primary)}",
|
|
4038
4005
|
"@keyframes dshRemotePageIn{from{opacity:0;transform:translateY(6px) scale(.99)}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.dshRemotePage{animation:none}}@media(max-width:620px){.dshRemoteBackdrop{padding:12px}.dshRemotePage{max-height:calc(100vh - 24px)}.dshRemotePageHeader{gap:8px;padding:12px 16px}.dshRemotePage.hasSelectedHost .dshRemotePageBack{max-width:112px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dshRemoteSectionHeading{align-items:flex-start;flex-direction:column;gap:8px}.dshRemoteWorkspaceHeading{align-items:center;flex-direction:row}.dshRemoteSectionActions{width:100%;justify-content:space-between}.dshRemotePageBody{padding:20px 16px}.dshRemoteOpenBar{align-items:flex-end}.dshRemoteOpenBar>button{min-height:48px}}",
|