agent-loft 0.2.36 → 0.2.37
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/package.json +1 -1
- package/web/css/remote.css +64 -9
- package/web/views/desktop.js +24 -4
package/package.json
CHANGED
package/web/css/remote.css
CHANGED
|
@@ -53,6 +53,17 @@
|
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
+
/* 顶栏下沿的渐变、模糊是给滚动的聊天内容用的:远程控制页下面是工具栏,会被它盖住一截 */
|
|
57
|
+
.main.remote-view .topbar {
|
|
58
|
+
padding-bottom: 8px;
|
|
59
|
+
background: var(--bg);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.main.remote-view .topbar::before,
|
|
63
|
+
.main.remote-view .topbar::after {
|
|
64
|
+
display: none;
|
|
65
|
+
}
|
|
66
|
+
|
|
56
67
|
.remote-head {
|
|
57
68
|
display: flex;
|
|
58
69
|
align-items: center;
|
|
@@ -313,18 +324,48 @@
|
|
|
313
324
|
opacity: 0.4;
|
|
314
325
|
}
|
|
315
326
|
|
|
316
|
-
/*
|
|
317
|
-
.remote-body
|
|
327
|
+
/* 全屏时只剩画面 */
|
|
328
|
+
.remote-body.full .desk-status {
|
|
318
329
|
display: none;
|
|
319
330
|
}
|
|
320
331
|
|
|
321
|
-
/* 不支持元素全屏(iPhone
|
|
332
|
+
/* 不支持元素全屏(iPhone):铺满整个页面,盖住顶栏、侧栏,弹窗和提示还在上面。
|
|
333
|
+
左右不留安全区:画面本来就居中、两边是黑边,刘海落在黑边里 */
|
|
322
334
|
.remote-body.desk-full {
|
|
323
335
|
position: fixed;
|
|
324
336
|
inset: 0;
|
|
325
337
|
z-index: 35;
|
|
326
338
|
background: #111;
|
|
327
|
-
padding: env(safe-area-inset-top)
|
|
339
|
+
padding: env(safe-area-inset-top) 0 var(--kb-inset, 0px);
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
/* 全屏时下面那排键默认收起,左上角的按钮拉出来;拉出来时是深色、矮一点的一条 */
|
|
343
|
+
.remote-body.full .desk-keys {
|
|
344
|
+
padding: 4px max(8px, env(safe-area-inset-left)) calc(4px + env(safe-area-inset-bottom)) max(8px, env(safe-area-inset-right));
|
|
345
|
+
border-top: none;
|
|
346
|
+
background: #111;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
.remote-body.full:not(.keys-open) .desk-keys {
|
|
350
|
+
display: none;
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
/* 有软键盘垫着时不用再让出底部安全区 */
|
|
354
|
+
.remote-body.desk-full .desk-keys {
|
|
355
|
+
padding-bottom: calc(4px + max(0px, env(safe-area-inset-bottom) - var(--kb-inset, 0px)));
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
.remote-body.full .desk-keys .term-key {
|
|
359
|
+
height: 30px;
|
|
360
|
+
border-color: #333;
|
|
361
|
+
background: #262626;
|
|
362
|
+
color: #eee;
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
.remote-body.full .desk-keys .term-key.on {
|
|
366
|
+
background: var(--accent);
|
|
367
|
+
border-color: var(--accent);
|
|
368
|
+
color: var(--accent-fg);
|
|
328
369
|
}
|
|
329
370
|
|
|
330
371
|
/* 没连着时画面中间的「连接桌面」 */
|
|
@@ -341,7 +382,7 @@
|
|
|
341
382
|
}
|
|
342
383
|
|
|
343
384
|
.desk-idle[hidden],
|
|
344
|
-
.desk-
|
|
385
|
+
.desk-fbtn[hidden] {
|
|
345
386
|
display: none;
|
|
346
387
|
}
|
|
347
388
|
|
|
@@ -362,12 +403,26 @@
|
|
|
362
403
|
height: 16px;
|
|
363
404
|
}
|
|
364
405
|
|
|
365
|
-
/*
|
|
366
|
-
.desk-
|
|
406
|
+
/* 全屏时左上角「退出全屏」「按键」 */
|
|
407
|
+
.desk-fullbar {
|
|
367
408
|
position: absolute;
|
|
368
|
-
left: 10px;
|
|
409
|
+
left: max(10px, env(safe-area-inset-left));
|
|
369
410
|
top: 10px;
|
|
370
411
|
z-index: 3;
|
|
412
|
+
display: flex;
|
|
413
|
+
gap: 8px;
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
.desk-fullbar[hidden] {
|
|
417
|
+
display: none;
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
.desk-fbtn.on {
|
|
421
|
+
background: var(--accent);
|
|
422
|
+
color: var(--accent-fg);
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
.desk-fbtn {
|
|
371
426
|
display: grid;
|
|
372
427
|
place-items: center;
|
|
373
428
|
width: 34px;
|
|
@@ -378,7 +433,7 @@
|
|
|
378
433
|
color: #fff;
|
|
379
434
|
}
|
|
380
435
|
|
|
381
|
-
.desk-
|
|
436
|
+
.desk-fbtn svg {
|
|
382
437
|
width: 18px;
|
|
383
438
|
height: 18px;
|
|
384
439
|
}
|
package/web/views/desktop.js
CHANGED
|
@@ -57,8 +57,12 @@ export function showDesktop(pane, tools) {
|
|
|
57
57
|
h("div", { class: "muted" }, "远程桌面未连接"),
|
|
58
58
|
h("button", { class: "btn primary", onclick: reconnect }, icon("plug"), "连接桌面"),
|
|
59
59
|
);
|
|
60
|
-
D.
|
|
61
|
-
|
|
60
|
+
D.keysBtn = isTouch
|
|
61
|
+
? h("button", { class: "desk-fbtn", title: "按键", "aria-label": "按键", onclick: () => toggleFullKeys() }, icon("keyboard"))
|
|
62
|
+
: null;
|
|
63
|
+
D.exitFull = h("button", { class: "desk-fbtn", title: "退出全屏", "aria-label": "退出全屏", onclick: () => setFull(false) }, icon("shrink"));
|
|
64
|
+
D.fullBar = h("div", { class: "desk-fullbar", hidden: true }, D.exitFull, D.keysBtn);
|
|
65
|
+
D.viewport = h("div", { class: "desk-viewport" }, D.screen, D.zoomBadge, D.hint, D.idle, D.fullBar);
|
|
62
66
|
D.keyInput = isTouch ? mobileKeyInput() : null;
|
|
63
67
|
D.keyRow = isTouch ? keyRow() : null;
|
|
64
68
|
fill(pane, D.status, D.viewport, D.keyRow, D.keyInput);
|
|
@@ -104,6 +108,8 @@ async function connect() {
|
|
|
104
108
|
rfb.resizeSession = false;
|
|
105
109
|
rfb.viewOnly = D.viewOnly;
|
|
106
110
|
rfb.showDotCursor = true;
|
|
111
|
+
// 画面没铺满时的边:和外框一个颜色,别再多出一圈灰
|
|
112
|
+
rfb.background = "#111";
|
|
107
113
|
rfb.qualityLevel = 6;
|
|
108
114
|
rfb.compressionLevel = 2;
|
|
109
115
|
rfb.addEventListener("connect", () => {
|
|
@@ -282,11 +288,25 @@ function setFull(on) {
|
|
|
282
288
|
syncFull();
|
|
283
289
|
}
|
|
284
290
|
|
|
285
|
-
/**
|
|
291
|
+
/**
|
|
292
|
+
* 全屏时画面左上角「退出全屏」(手机上没有 Esc;真全屏在电脑上按 Esc 就行,不显示)。
|
|
293
|
+
* 手机上全屏时下面那排键先收起来,左上角的「按键」拉出来
|
|
294
|
+
*/
|
|
286
295
|
function syncFull() {
|
|
287
296
|
if (!D.pane) return;
|
|
288
297
|
const pseudo = D.pane.classList.contains("desk-full");
|
|
289
|
-
|
|
298
|
+
const full = pseudo || fsElement() === D.pane;
|
|
299
|
+
if (full !== D.pane.classList.contains("full")) {
|
|
300
|
+
D.pane.classList.toggle("full", full);
|
|
301
|
+
toggleFullKeys(false);
|
|
302
|
+
}
|
|
303
|
+
D.fullBar.hidden = !(pseudo || (isTouch && full));
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
function toggleFullKeys(open = !D.pane.classList.contains("keys-open")) {
|
|
307
|
+
D.pane.classList.toggle("keys-open", open);
|
|
308
|
+
D.keysBtn?.classList.toggle("on", open);
|
|
309
|
+
if (!open && document.activeElement === D.keyInput) D.keyInput.blur();
|
|
290
310
|
}
|
|
291
311
|
document.addEventListener("fullscreenchange", syncFull);
|
|
292
312
|
document.addEventListener("webkitfullscreenchange", syncFull);
|