tabby-rdp 0.2.7 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/CHANGELOG.md +72 -2
  2. package/README.md +182 -21
  3. package/dist/connectionStatus.js +140 -0
  4. package/dist/connectionStatus.js.map +1 -0
  5. package/dist/desk.js +21 -10
  6. package/dist/desk.js.map +1 -1
  7. package/dist/deskScript.js +3 -0
  8. package/dist/deskScript.js.map +1 -1
  9. package/dist/desktop.service.js +994 -53
  10. package/dist/desktop.service.js.map +1 -1
  11. package/dist/desktopForm.js +64 -19
  12. package/dist/desktopForm.js.map +1 -1
  13. package/dist/desktops.js +60 -21
  14. package/dist/desktops.js.map +1 -1
  15. package/dist/fileTransfer.js +152 -5
  16. package/dist/fileTransfer.js.map +1 -1
  17. package/dist/header.js +22 -7
  18. package/dist/header.js.map +1 -1
  19. package/dist/help.js +241 -0
  20. package/dist/help.js.map +1 -0
  21. package/dist/index.js +16 -1
  22. package/dist/index.js.map +1 -1
  23. package/dist/keyboard.js +142 -5
  24. package/dist/keyboard.js.map +1 -1
  25. package/dist/microphone.js +295 -0
  26. package/dist/microphone.js.map +1 -0
  27. package/dist/osd.js +79 -0
  28. package/dist/osd.js.map +1 -0
  29. package/dist/probe.js +33 -0
  30. package/dist/probe.js.map +1 -0
  31. package/dist/rdcleanpath.js +132 -7
  32. package/dist/rdcleanpath.js.map +1 -1
  33. package/dist/rdpFile.js +47 -0
  34. package/dist/rdpFile.js.map +1 -0
  35. package/dist/rdpProfile.js +367 -0
  36. package/dist/rdpProfile.js.map +1 -0
  37. package/dist/remoteSetup.js +90 -11
  38. package/dist/remoteSetup.js.map +1 -1
  39. package/dist/settingsPage.js +554 -0
  40. package/dist/settingsPage.js.map +1 -0
  41. package/dist/signin.js +21 -2
  42. package/dist/signin.js.map +1 -1
  43. package/dist/ssh.js +28 -0
  44. package/dist/ssh.js.map +1 -1
  45. package/dist/targets.js +148 -8
  46. package/dist/targets.js.map +1 -1
  47. package/dist/ui.js +163 -24
  48. package/dist/ui.js.map +1 -1
  49. package/dist/updates.js +123 -0
  50. package/dist/updates.js.map +1 -0
  51. package/dist/vms.js +90 -0
  52. package/dist/vms.js.map +1 -0
  53. package/dist/wake.js +124 -0
  54. package/dist/wake.js.map +1 -0
  55. package/package.json +2 -1
  56. package/vendor/IRONRDP-LICENSE +3 -3
  57. package/vendor/iron-remote-desktop-rdp.js +698 -451
  58. package/vendor/iron-remote-desktop.js +87 -81
  59. package/vendor/ironrdp_web_bg.wasm +0 -0
@@ -1,10 +1,105 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.FileTransfer = exports.STYLE = void 0;
4
+ exports.clipboardPaths = clipboardPaths;
4
5
  exports.savePath = savePath;
6
+ exports.uniquePath = uniquePath;
5
7
  const fs = require("fs");
6
8
  const os = require("os");
7
9
  const path = require("path");
10
+ /** Limits for a copied folder, as for a dropped one in IronRDP. */
11
+ const MAX_ENTRIES = 10000;
12
+ const MAX_DEPTH = 20;
13
+ /**
14
+ * Files copied in Finder (Explorer, Files): their paths, from the local clipboard. Empty when it holds no files.
15
+ */
16
+ function clipboardPaths() {
17
+ const { clipboard } = require('electron');
18
+ const read = (format) => {
19
+ try {
20
+ return clipboard.read(format) ?? '';
21
+ }
22
+ catch {
23
+ return '';
24
+ }
25
+ };
26
+ if (process.platform === 'darwin') {
27
+ const plist = read('NSFilenamesPboardType');
28
+ const paths = [...plist.matchAll(/<string>([^<]*)<\/string>/g)].map(m => m[1]
29
+ .replace(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/&quot;/g, '"').replace(/&apos;/g, "'").replace(/&amp;/g, '&'));
30
+ if (paths.length) {
31
+ return paths;
32
+ }
33
+ const url = read('public.file-url');
34
+ return url.startsWith('file://') ? [decodeURIComponent(new URL(url).pathname)] : [];
35
+ }
36
+ if (process.platform === 'win32') {
37
+ try {
38
+ const name = clipboard.readBuffer('FileNameW').toString('ucs2').replace(/\0+$/, '');
39
+ return name ? [name] : [];
40
+ }
41
+ catch {
42
+ return [];
43
+ }
44
+ }
45
+ const list = read('x-special/gnome-copied-files') || read('text/uri-list');
46
+ return list.split(/\r?\n/).filter(l => l.startsWith('file://')).map(l => decodeURIComponent(new URL(l).pathname));
47
+ }
48
+ /**
49
+ * A file on disk, for IronRDP's upload: it reads `slice(start, end)` of a file as the remote asks for each range, so
50
+ * only that range is read, not the whole file up front.
51
+ */
52
+ class DiskFile {
53
+ constructor(file, name, size, lastModified) {
54
+ this.file = file;
55
+ this.name = name;
56
+ this.size = size;
57
+ this.lastModified = lastModified;
58
+ this.type = '';
59
+ }
60
+ slice(start = 0, end = this.size) {
61
+ const length = Math.max(0, Math.min(end, this.size) - start);
62
+ const buffer = Buffer.alloc(length);
63
+ const fd = fs.openSync(this.file, 'r');
64
+ try {
65
+ let done = 0;
66
+ while (done < length) {
67
+ const n = fs.readSync(fd, buffer, done, length - done, start + done);
68
+ if (!n) {
69
+ break;
70
+ }
71
+ done += n;
72
+ }
73
+ return new Blob([buffer.subarray(0, done)]);
74
+ }
75
+ finally {
76
+ fs.closeSync(fd);
77
+ }
78
+ }
79
+ }
80
+ /** IronRDP's DroppedFile entries for paths on disk: files, and folders with everything in them (`path`: the folder, `\`-separated). */
81
+ function entriesFor(paths) {
82
+ const entries = [];
83
+ const walk = (file, parent, depth) => {
84
+ if (entries.length >= MAX_ENTRIES || depth > MAX_DEPTH) {
85
+ return;
86
+ }
87
+ const stat = fs.statSync(file, { throwIfNoEntry: false });
88
+ const name = path.basename(file);
89
+ if (stat?.isFile()) {
90
+ entries.push({ file: new DiskFile(file, name, stat.size, stat.mtimeMs), name, size: stat.size, lastModified: stat.mtimeMs, path: parent });
91
+ }
92
+ else if (stat?.isDirectory()) {
93
+ entries.push({ file: null, name, size: 0, lastModified: 0, path: parent, isDirectory: true });
94
+ const inner = parent !== undefined ? `${parent}\\${name}` : name;
95
+ for (const child of fs.readdirSync(file).sort()) {
96
+ walk(path.join(file, child), inner, depth + 1);
97
+ }
98
+ }
99
+ };
100
+ paths.forEach(p => walk(p, undefined, 0));
101
+ return entries;
102
+ }
8
103
  exports.STYLE = `
9
104
  .trd-toast { position: absolute; top: 12px; right: 12px; z-index: 2; max-width: min(420px, calc(100% - 24px));
10
105
  display: flex; gap: 10px; align-items: center; padding: 8px 10px; border-radius: 6px;
@@ -30,6 +125,10 @@ class FileTransfer {
30
125
  this.offered = [];
31
126
  /** Where the last save went (for tests and "Show in Finder"). */
32
127
  this.lastSaved = [];
128
+ /** The copied files offered for a paste and not pasted yet (see pasteClipboardFiles). */
129
+ this.pendingPaste = null;
130
+ /** Resolves when the remote has taken in the files last offered (its Format List Response): true if it accepted them. */
131
+ this.offerTaken = null;
33
132
  this.provider = new rdp.RdpFileTransferProvider({ storageBackend: 'blob' });
34
133
  this.provider.on('files-available', (files) => this.offer(files));
35
134
  this.provider.on('error', (e) => {
@@ -61,20 +160,68 @@ class FileTransfer {
61
160
  }, true);
62
161
  }
63
162
  /** Mac → remote: offers the files on the remote clipboard; the remote copies them when they're pasted. */
64
- send(files) {
163
+ send(files, pasting = false) {
65
164
  const count = files.filter(f => !f.isDirectory).length;
66
165
  if (!count) {
67
- return;
166
+ return null;
68
167
  }
69
168
  try {
169
+ // The remote answers the new clipboard before it can paste it; a paste sent sooner gets what it had.
170
+ this.offerTaken = new Promise(resolve => {
171
+ const answered = (ok) => {
172
+ this.provider.off('format-list-response', answered);
173
+ resolve(!!ok);
174
+ };
175
+ this.provider.on('format-list-response', answered);
176
+ });
70
177
  const upload = this.provider.uploadFiles(files);
71
- this.log(`files: offered ${count} to the remote`);
72
- this.toast(`${plural(count, 'file')} ready: paste on the remote desktop (⌘V) to copy ${count === 1 ? 'it' : 'them'} there`, [], 0);
73
- upload.completion.then(() => { this.log('files: pasted on the remote'); this.toast(`Copied ${plural(count, 'file')} to the remote desktop`); }, (e) => { this.log(`files: upload: ${e?.message ?? e}`); this.toast(`Copying to the remote desktop failed: ${e?.message ?? e}`); });
178
+ this.log(`files: offered ${count} to the remote${pasting ? ' (copied here, pasted there)' : ''}`);
179
+ this.toast(pasting ? `Pasting ${plural(count, 'file')}…` : `${plural(count, 'file')} ready: paste on the remote desktop (⌘V) to copy ${count === 1 ? 'it' : 'them'} there`, [], 0);
180
+ return upload.completion.then(() => { this.log('files: pasted on the remote'); this.toast(`Copied ${plural(count, 'file')} to the remote desktop`); }, (e) => { this.log(`files: upload: ${e?.message ?? e}`); this.toast(`Copying to the remote desktop failed: ${e?.message ?? e}`); });
74
181
  }
75
182
  catch (e) {
76
183
  this.toast(`Couldn't offer the files: ${e?.message ?? e}`);
184
+ return null;
185
+ }
186
+ }
187
+ /**
188
+ * Resolves once the remote has taken in the files just offered (true), or said no (false), or after `timeoutMs`
189
+ * without an answer (true: paste anyway), so that a paste sent then gets them.
190
+ */
191
+ offerAnswered(timeoutMs = 3000) {
192
+ const taken = this.offerTaken;
193
+ return taken ? Promise.race([taken, new Promise(resolve => setTimeout(() => resolve(true), timeoutMs))]) : Promise.resolve(true);
194
+ }
195
+ /**
196
+ * ⌘V (Ctrl+V) on the desktop with files copied here (Finder, Explorer, Files): offers them on the remote clipboard
197
+ * for that paste. True when it did, and the paste should wait a moment for the remote to see them; false when the
198
+ * clipboard holds no files, or these are already offered and not pasted yet.
199
+ */
200
+ pasteClipboardFiles() {
201
+ const paths = clipboardPaths();
202
+ if (!paths.length) {
203
+ return false;
204
+ }
205
+ const key = paths.join('\n');
206
+ if (this.pendingPaste === key) {
207
+ return false;
208
+ }
209
+ let entries;
210
+ try {
211
+ entries = entriesFor(paths);
212
+ }
213
+ catch (e) {
214
+ this.toast(`Couldn't read the copied files: ${e?.message ?? e}`);
215
+ return false;
216
+ }
217
+ const done = this.send(entries, true);
218
+ if (!done) {
219
+ return false;
77
220
  }
221
+ this.pendingPaste = key;
222
+ done.finally(() => { if (this.pendingPaste === key)
223
+ this.pendingPaste = null; });
224
+ return true;
78
225
  }
79
226
  /** Picks files on the Mac to send. */
80
227
  async pickAndSend() {
@@ -1 +1 @@
1
- {"version":3,"file":"fileTransfer.js","sourceRoot":"","sources":["../src/fileTransfer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fileTransfer.js","sourceRoot":"","sources":["../src/fileTransfer.ts"],"names":[],"mappings":"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"}
package/dist/header.js CHANGED
@@ -13,6 +13,8 @@ exports.HeaderControls = void 0;
13
13
  const core_1 = require("@angular/core");
14
14
  const tabby_core_1 = require("tabby-core");
15
15
  const desktop_service_1 = require("./desktop.service");
16
+ const help_1 = require("./help");
17
+ const keyboard_1 = require("./keyboard");
16
18
  const ssh_1 = require("./ssh");
17
19
  const targets_1 = require("./targets");
18
20
  const ui_1 = require("./ui");
@@ -27,12 +29,14 @@ const ICON_DISCONNECT = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 51
27
29
  * sync with the active tab and the desktop state.
28
30
  */
29
31
  let HeaderControls = class HeaderControls {
30
- constructor(app, desktop, targets, platform, zone) {
32
+ constructor(app, desktop, targets, platform, keyboard, zone, help) {
31
33
  this.app = app;
32
34
  this.desktop = desktop;
33
35
  this.targets = targets;
34
36
  this.platform = platform;
37
+ this.keyboard = keyboard;
35
38
  this.zone = zone;
39
+ this.help = help;
36
40
  this.group = null;
37
41
  this.scheduled = false;
38
42
  }
@@ -63,7 +67,11 @@ let HeaderControls = class HeaderControls {
63
67
  if (!pane) {
64
68
  return;
65
69
  }
66
- await this.targets.targetOf(pane);
70
+ const target = await this.targets.targetOf(pane);
71
+ // Look for VMs on the host ahead of the menus (at most once a minute).
72
+ if (target) {
73
+ this.desktop.discoverVMs(target).catch(() => null);
74
+ }
67
75
  this.schedule();
68
76
  }
69
77
  schedule() {
@@ -119,9 +127,12 @@ let HeaderControls = class HeaderControls {
119
127
  event.preventDefault();
120
128
  this.zone.run(() => {
121
129
  const pane = (0, targets_1.desktopPaneOf)(this.app.activeTab);
122
- const choices = pane ? (0, ui_1.desktopChoices)(this.desktop, pane, this.targets.cached(pane)?.label) : [];
123
- const settings = { label: 'Remote desktop settings', submenu: (0, ui_1.settingsMenu)(this.desktop, pane) };
124
- this.platform.popupContextMenu(choices.length ? [...choices, { type: 'separator' }, settings] : (0, ui_1.settingsMenu)(this.desktop, pane), event);
130
+ const choices = pane ? [
131
+ ...(0, ui_1.desktopChoices)(this.desktop, pane, this.targets.cached(pane)?.label),
132
+ ...(0, ui_1.desktopActions)(this.desktop, this.keyboard, pane),
133
+ ] : [];
134
+ const settings = { label: 'Settings', submenu: (0, ui_1.settingsMenu)(this.desktop, pane, this.help) };
135
+ this.platform.popupContextMenu(choices.length ? [...choices, { type: 'separator' }, settings] : (0, ui_1.settingsMenu)(this.desktop, pane, this.help), event);
125
136
  });
126
137
  });
127
138
  this.disconnectButton.title = 'Disconnect remote desktop';
@@ -144,8 +155,10 @@ let HeaderControls = class HeaderControls {
144
155
  return;
145
156
  }
146
157
  const visible = this.desktop.isVisible(pane);
158
+ // None while a remote desktop tab shows its desktop: there is no console to switch to.
147
159
  const title = (0, ui_1.toggleLabel)(this.desktop, pane);
148
- if (this.toggleButton.title !== title) {
160
+ this.toggleButton.style.display = title ? '' : 'none';
161
+ if (title && this.toggleButton.title !== title) {
149
162
  this.toggleButton.title = title;
150
163
  this.toggleButton.innerHTML = visible ? ICON_TERMINAL : ICON_DESKTOP;
151
164
  }
@@ -159,6 +172,8 @@ exports.HeaderControls = HeaderControls = __decorate([
159
172
  desktop_service_1.RemoteDesktopService,
160
173
  targets_1.RemoteTargets,
161
174
  tabby_core_1.PlatformService,
162
- core_1.NgZone])
175
+ keyboard_1.DesktopKeyboard,
176
+ core_1.NgZone,
177
+ help_1.RemoteDesktopHelp])
163
178
  ], HeaderControls);
164
179
  //# sourceMappingURL=header.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"header.js","sourceRoot":"","sources":["../src/header.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"header.js","sourceRoot":"","sources":["../src/header.ts"],"names":[],"mappings":"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"}
package/dist/help.js ADDED
@@ -0,0 +1,241 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.RemoteDesktopHelp = exports.TROUBLESHOOTING = exports.SETTINGS_TAB_ID = exports.TOGGLE_HOTKEY = void 0;
13
+ exports.entryFor = entryFor;
14
+ exports.hotkeyLabel = hotkeyLabel;
15
+ const core_1 = require("@angular/core");
16
+ const rxjs_1 = require("rxjs");
17
+ const tabby_core_1 = require("tabby-core");
18
+ const tabby_settings_1 = require("tabby-settings");
19
+ exports.TOGGLE_HOTKEY = 'remote-desktop-toggle';
20
+ /** The plugin's page in Tabby's settings (see settingsPage.ts). */
21
+ exports.SETTINGS_TAB_ID = 'remote-desktop';
22
+ exports.TROUBLESHOOTING = [
23
+ {
24
+ id: 'certificate',
25
+ title: 'The certificate has changed',
26
+ match: /certificate/i,
27
+ body: `The first connection to a Windows or xrdp desktop remembers its certificate. When a later one differs, the
28
+ plugin stops before signing in, so nothing (no password) has been sent. Reinstalling the machine or renewing its
29
+ certificate changes it: then choose <b>Trust the new certificate</b>. If neither happened, something else is
30
+ answering at that address. A GNOME desktop only ever accepts the certificate the plugin made for it; a
31
+ different one there means another program listens on its port. Remembered certificates are listed above.`,
32
+ },
33
+ {
34
+ id: 'sign-in',
35
+ title: 'Wrong user name or password',
36
+ match: /sign-in|sign in|password|user name/i,
37
+ body: `Windows and xrdp desktops sign in with an account on that machine (<code>DOMAIN\\user</code> works). A saved
38
+ password that no longer works is asked for again; <b>Sign in again…</b> in the tab's menu replaces it on
39
+ purpose. xrdp doesn't refuse a wrong password: it shows its own login window instead. GNOME desktops never
40
+ ask: the plugin manages their sign-in.`,
41
+ },
42
+ {
43
+ id: 'no-desktop',
44
+ title: 'No desktop found on a Linux host',
45
+ match: /GNOME|xrdp|grdctl|headless/i,
46
+ body: `The plugin uses GNOME Remote Desktop 46 or newer (Ubuntu 24.04, for example), with no root and no login
47
+ screen. For KDE, XFCE, MATE and others, install xrdp and a desktop for its sessions: on Debian and Ubuntu,
48
+ <code>sudo apt install xrdp xfce4</code>. A GNOME session already shared from the machine's own screen (GNOME's
49
+ Desktop Sharing) has to be turned off first.`,
50
+ },
51
+ {
52
+ id: 'unreachable',
53
+ title: 'Can\'t reach a Windows desktop',
54
+ match: /refused|timed out|timeout|unreachable|ECONN|EHOST|no route|could not connect|couldn't connect/i,
55
+ body: `Windows needs Remote Desktop turned on (Settings › System › Remote Desktop; Pro, Enterprise or Server).
56
+ Behind an SSH host, the address is as that host sees it: from there, <code>nc -z &lt;address&gt; 3389</code>
57
+ should succeed. For a VM or machine that may be off, give the desktop a VM name or MAC address in its edit form
58
+ and it is started when opened.`,
59
+ },
60
+ {
61
+ id: 'reconnecting',
62
+ title: 'It keeps reconnecting',
63
+ match: /reconnect|connection lost/i,
64
+ body: `After sleep or a network change the desktop reconnects by itself, with growing pauses, and waits while the
65
+ SSH connection is down (<b>Reconnect SSH</b> hurries that along). It stops after a few tries or on
66
+ <b>Stop</b>. If it drops again right after connecting, check the host's free memory and that the desktop's
67
+ session is still running there.`,
68
+ },
69
+ {
70
+ id: 'picture',
71
+ title: 'The picture is blurry or slow',
72
+ match: /H\.264|decod|video/i,
73
+ body: `<b>Sharpness › Retina</b> renders at your screen's device pixels, with the remote's scale set to match. Video
74
+ (H.264) is used when the remote sends it: Windows does, GNOME only with a hardware encoder (VA-API or NVENC).
75
+ <b>Show connection status</b> shows the frame rate, the round trip and how the picture comes.`,
76
+ },
77
+ {
78
+ id: 'sound',
79
+ title: 'No sound, or the microphone isn\'t heard',
80
+ body: `Sound and microphone changes apply on the next connection. xrdp needs <code>pipewire-module-xrdp</code> or
81
+ <code>pulseaudio-module-xrdp</code>. The microphone needs the system's permission here (macOS: System Settings ›
82
+ Privacy &amp; Security › Microphone, then restart Tabby). On GNOME, apps record from "Remoteaudio Source"; on
83
+ Windows, the machine must allow audio recording redirection.`,
84
+ },
85
+ {
86
+ id: 'nested-ssh',
87
+ title: 'I typed ssh to another machine in a terminal',
88
+ body: `In an SSH tab (or a split pane) where you typed <code>ssh</code> on to another machine, <b>Desktop</b> opens that
89
+ machine's desktop, going through the first one, and <code>desk</code> works there too. The first machine has to
90
+ log in to the other by itself for this: with a key there, or agent forwarding, as <code>ssh -o BatchMode=yes</code>
91
+ would. Tabby's <b>Reconnect</b> belongs to the tab: it reconnects the first machine and ends the ssh typed in it.
92
+ To have both desktops side by side, open the first machine's desktop in one pane, and ssh on in the other.`,
93
+ },
94
+ {
95
+ id: 'extra-monitor',
96
+ title: 'GNOME shows an empty extra monitor',
97
+ body: `GNOME Remote Desktop's headless mode gives each client its own monitor: a second client for the same account
98
+ (another computer, or another Tabby window) gets an empty one. Use one client per account at a time.`,
99
+ },
100
+ ];
101
+ /** The troubleshooting entry that explains a message, if one does. */
102
+ function entryFor(message) {
103
+ return exports.TROUBLESHOOTING.find(e => e.match?.test(message)) ?? null;
104
+ }
105
+ /** A hotkey as Tabby stores it ('⌘-Shift-G', or a sequence) as it reads on this platform: ⌘⇧G, Ctrl+Shift+G. */
106
+ function hotkeyLabel(binding) {
107
+ const first = Array.isArray(binding) ? binding[0] : null;
108
+ const strokes = Array.isArray(first) ? first : typeof first === 'string' ? [first] : [];
109
+ if (!strokes.length) {
110
+ return null;
111
+ }
112
+ const mac = process.platform === 'darwin';
113
+ const MAC = { Shift: '⇧', Alt: '⌥', Ctrl: '⌃', Meta: '⌘', Cmd: '⌘' };
114
+ return strokes.map(s => s.split('-').map(k => mac ? MAC[k] ?? k : k).join(mac ? '' : '+')).join(', ');
115
+ }
116
+ const TIP_STYLE = `
117
+ .trd-tip { position: absolute; left: 50%; bottom: 16px; transform: translateX(-50%); z-index: 2; max-width: min(560px, 90%);
118
+ display: flex; gap: 12px; align-items: center; padding: 10px 12px 10px 14px; border-radius: 8px; font-size: 12px;
119
+ line-height: 1.5; color: #e6e6e6; background: rgba(28, 28, 30, 0.94); box-shadow: 0 4px 18px rgba(0, 0, 0, 0.45);
120
+ animation: trd-tip-in 0.2s ease-out; }
121
+ .trd-tip kbd { padding: 0 4px; border-radius: 3px; background: rgba(255, 255, 255, 0.12); color: inherit; font-size: 11px; }
122
+ .trd-tip-actions { display: flex; gap: 6px; flex: none; }
123
+ .trd-tip-actions button { font-size: 12px; padding: 2px 10px; }
124
+ .trd-note { z-index: 40; }
125
+ @keyframes trd-tip-in { from { opacity: 0; transform: translate(-50%, 6px); } }
126
+ `;
127
+ /**
128
+ * Help that comes to the user: the plugin's settings page, opened at a section, and one tip the first time a desktop
129
+ * connects. Nothing else pops up.
130
+ */
131
+ let RemoteDesktopHelp = class RemoteDesktopHelp {
132
+ constructor(app, config, zone) {
133
+ this.app = app;
134
+ this.config = config;
135
+ this.zone = zone;
136
+ /** A section to show; the open settings page follows it (see settingsPage.ts). */
137
+ this.show$ = new rxjs_1.Subject();
138
+ /** For a settings page not yet made: where to scroll once it is. */
139
+ this.pending = null;
140
+ const style = document.createElement('style');
141
+ style.textContent = TIP_STYLE;
142
+ document.head.appendChild(style);
143
+ }
144
+ /** Opens Tabby's settings at the plugin's page, at `topic` (and a troubleshooting entry). */
145
+ open(topic = 'start', entry) {
146
+ this.zone.run(() => {
147
+ this.pending = { topic, entry };
148
+ this.openSettings(exports.SETTINGS_TAB_ID);
149
+ this.show$.next({ topic, entry });
150
+ });
151
+ }
152
+ /** Opens Tabby's settings at one of its pages: this plugin's, or Tabby's own ('plugins', 'hotkeys', …). */
153
+ openSettings(page) {
154
+ this.zone.run(() => {
155
+ const tab = this.app.tabs.find(t => t instanceof tabby_settings_1.SettingsTabComponent);
156
+ if (tab) {
157
+ tab.activeTab = page;
158
+ this.app.selectTab(tab);
159
+ }
160
+ else {
161
+ this.app.openNewTabRaw({ type: tabby_settings_1.SettingsTabComponent, inputs: { activeTab: page } });
162
+ }
163
+ });
164
+ }
165
+ /** "What does this mean?" under a message: the entry explaining it, else troubleshooting as a whole. */
166
+ explain(message) {
167
+ this.open('troubleshooting', entryFor(message)?.id);
168
+ }
169
+ /**
170
+ * A note over a terminal pane, for something to read (a toast goes too fast): looks like the plugin's other notes
171
+ * (see fileTransfer.ts), stays until closed, replaced by the next one. `entry`: a troubleshooting entry for Help.
172
+ */
173
+ note(container, text, entry) {
174
+ container.querySelector(':scope > .trd-note')?.remove();
175
+ if (getComputedStyle(container).position === 'static') {
176
+ container.style.position = 'relative';
177
+ }
178
+ const note = document.createElement('div');
179
+ note.className = 'trd-toast trd-note';
180
+ note.innerHTML = `<div class="trd-toast-text"></div>${entry ? '<button class="btn btn-secondary" data-more>Help</button>' : ''}<button class="btn btn-link" data-ok title="Dismiss">×</button>`;
181
+ note.querySelector('.trd-toast-text').textContent = text;
182
+ // Below an SSH tab's toolbar (Reconnect, SFTP…), not over it.
183
+ const toolbar = container.querySelector('terminal-toolbar');
184
+ if (toolbar?.offsetHeight) {
185
+ note.style.top = `${toolbar.offsetTop + toolbar.offsetHeight + 8}px`;
186
+ }
187
+ note.querySelector('[data-ok]').addEventListener('click', () => note.remove());
188
+ note.querySelector('[data-more]')?.addEventListener('click', () => {
189
+ note.remove();
190
+ this.open('troubleshooting', entry);
191
+ });
192
+ container.appendChild(note);
193
+ return note;
194
+ }
195
+ /** The desktop/console hotkey as it reads here, or null when it has none. */
196
+ toggleHotkey() {
197
+ return hotkeyLabel(this.config.store.hotkeys?.[exports.TOGGLE_HOTKEY]);
198
+ }
199
+ /**
200
+ * The first time any desktop connects (and shows): what to know that isn't on screen. Once only, whether read or
201
+ * not; gone after a while, on Got it, or with the desktop. `hasConsole`: false in a remote desktop tab.
202
+ */
203
+ tipOnce(overlay, hasConsole, onDone) {
204
+ const store = this.config.store.remoteDesktop;
205
+ if (!store || store.tipShown) {
206
+ return;
207
+ }
208
+ store.tipShown = true;
209
+ this.config.save();
210
+ const k = (s) => `<kbd>${s}</kbd>`;
211
+ const mac = process.platform === 'darwin';
212
+ const hotkey = this.toggleHotkey();
213
+ const parts = [
214
+ hasConsole && hotkey ? `${k(hotkey)} switches back to the console.` : '',
215
+ mac ? `${k('⌃⌘')} with a key is the Windows key with it (${k('⌃⌘R')} for Win+R).` : '',
216
+ 'Right-click the tab for Send keys, View only and screenshots.',
217
+ ];
218
+ const tip = document.createElement('div');
219
+ tip.className = 'trd-tip';
220
+ tip.innerHTML = `<div>${parts.filter(Boolean).join(' ')}</div>
221
+ <div class="trd-tip-actions"><button class="btn btn-link" data-more>More tips</button><button class="btn btn-secondary" data-ok>Got it</button></div>`;
222
+ const close = () => {
223
+ clearTimeout(timer);
224
+ tip.remove();
225
+ onDone();
226
+ };
227
+ tip.querySelector('[data-ok]').addEventListener('click', close);
228
+ tip.querySelector('[data-more]').addEventListener('click', () => {
229
+ close();
230
+ this.open('keyboard');
231
+ });
232
+ const timer = setTimeout(() => tip.isConnected && close(), 25000);
233
+ overlay.appendChild(tip);
234
+ }
235
+ };
236
+ exports.RemoteDesktopHelp = RemoteDesktopHelp;
237
+ exports.RemoteDesktopHelp = RemoteDesktopHelp = __decorate([
238
+ (0, core_1.Injectable)({ providedIn: 'root' }),
239
+ __metadata("design:paramtypes", [tabby_core_1.AppService, tabby_core_1.ConfigService, core_1.NgZone])
240
+ ], RemoteDesktopHelp);
241
+ //# sourceMappingURL=help.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"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"}