@celljs/ta-web 4.7.0 → 4.8.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/README.en.md +1 -1
- package/README.md +1 -1
- package/esm/browser/chat/chat-protocol.d.ts +4 -0
- package/esm/browser/chat/chat-view.js +4 -1
- package/esm/browser/chat/chat-view.js.map +1 -1
- package/esm/browser/chat/chat.d.ts +8 -1
- package/esm/browser/chat/chat.js +34 -15
- package/esm/browser/chat/chat.js.map +1 -1
- package/esm/browser/chat/draft-model.d.ts +15 -0
- package/esm/browser/chat/draft-model.js +53 -0
- package/esm/browser/chat/draft-model.js.map +1 -0
- package/esm/browser/components/app-view.js +10 -3
- package/esm/browser/components/app-view.js.map +1 -1
- package/esm/browser/components/composer-box.d.ts +6 -0
- package/esm/browser/components/composer-box.js +50 -13
- package/esm/browser/components/composer-box.js.map +1 -1
- package/esm/browser/components/composer.js +1 -1
- package/esm/browser/components/composer.js.map +1 -1
- package/esm/browser/components/dialog-view.d.ts +4 -1
- package/esm/browser/components/dialog-view.js +11 -7
- package/esm/browser/components/dialog-view.js.map +1 -1
- package/esm/browser/components/notice-center.js +3 -1
- package/esm/browser/components/notice-center.js.map +1 -1
- package/esm/browser/components/session-view.js +48 -4
- package/esm/browser/components/session-view.js.map +1 -1
- package/esm/browser/components/terminal-art.d.ts +7 -0
- package/esm/browser/components/terminal-art.js +12 -0
- package/esm/browser/components/terminal-art.js.map +1 -0
- package/esm/browser/components/tool-view.js +1 -1
- package/esm/browser/components/tool-view.js.map +1 -1
- package/esm/browser/components/web-composer.js +1 -1
- package/esm/browser/components/web-composer.js.map +1 -1
- package/esm/browser/extension/icons.js +4 -1
- package/esm/browser/extension/icons.js.map +1 -1
- package/esm/browser/extension/web-extension-api.d.ts +117 -1
- package/esm/browser/extension/web-extensions.d.ts +3 -0
- package/esm/browser/extension/web-extensions.js +22 -0
- package/esm/browser/extension/web-extensions.js.map +1 -1
- package/esm/browser/i18n/locales.d.ts +13 -1
- package/esm/browser/i18n/messages.d.ts +12 -0
- package/esm/browser/i18n/messages.js +24 -0
- package/esm/browser/i18n/messages.js.map +1 -1
- package/esm/browser/notices/notices-protocol.d.ts +3 -0
- package/esm/browser/notices/notices.d.ts +3 -0
- package/esm/browser/notices/notices.js +15 -0
- package/esm/browser/notices/notices.js.map +1 -1
- package/esm/browser/style/conversation.d.ts +1 -1
- package/esm/browser/style/conversation.js +16 -1
- package/esm/browser/style/conversation.js.map +1 -1
- package/esm/browser/style/layout.d.ts +1 -1
- package/esm/browser/style/layout.js +5 -0
- package/esm/browser/style/layout.js.map +1 -1
- package/esm/browser/style/shell.d.ts +1 -1
- package/esm/browser/style/shell.js +1 -0
- package/esm/browser/style/shell.js.map +1 -1
- package/esm/browser/terminal/canvas-font.d.ts +10 -0
- package/esm/browser/terminal/canvas-font.js +34 -0
- package/esm/browser/terminal/canvas-font.js.map +1 -0
- package/esm/browser/terminal/terminal-links.d.ts +18 -0
- package/esm/browser/terminal/terminal-links.js +72 -0
- package/esm/browser/terminal/terminal-links.js.map +1 -0
- package/esm/browser/terminal/terminal-theme.d.ts +8 -0
- package/esm/browser/terminal/terminal-theme.js +65 -0
- package/esm/browser/terminal/terminal-theme.js.map +1 -0
- package/esm/browser/terminal/web-terminal.d.ts +74 -0
- package/esm/browser/terminal/web-terminal.js +300 -0
- package/esm/browser/terminal/web-terminal.js.map +1 -0
- package/esm/browser/terminal/xterm.d.ts +5 -0
- package/esm/browser/terminal/xterm.js +9 -0
- package/esm/browser/terminal/xterm.js.map +1 -0
- package/esm/browser/util/desktop.d.ts +43 -0
- package/esm/browser/util/desktop.js +55 -0
- package/esm/browser/util/desktop.js.map +1 -0
- package/esm/browser/util/file-drag.d.ts +26 -0
- package/esm/browser/util/file-drag.js +73 -0
- package/esm/browser/util/file-drag.js.map +1 -0
- package/esm/browser/util/terminal-text.d.ts +33 -0
- package/esm/browser/util/terminal-text.js +209 -0
- package/esm/browser/util/terminal-text.js.map +1 -0
- package/esm/browser/util/tool.js +16 -0
- package/esm/browser/util/tool.js.map +1 -1
- package/lib/browser/chat/chat-protocol.d.ts +4 -0
- package/lib/browser/chat/chat-protocol.d.ts.map +1 -1
- package/lib/browser/chat/chat-view.d.ts.map +1 -1
- package/lib/browser/chat/chat-view.js +4 -1
- package/lib/browser/chat/chat-view.js.map +1 -1
- package/lib/browser/chat/chat.d.ts +8 -1
- package/lib/browser/chat/chat.d.ts.map +1 -1
- package/lib/browser/chat/chat.js +34 -15
- package/lib/browser/chat/chat.js.map +1 -1
- package/lib/browser/chat/chat.spec.js +30 -0
- package/lib/browser/chat/chat.spec.js.map +1 -1
- package/lib/browser/chat/draft-model.d.ts +16 -0
- package/lib/browser/chat/draft-model.d.ts.map +1 -0
- package/lib/browser/chat/draft-model.js +90 -0
- package/lib/browser/chat/draft-model.js.map +1 -0
- package/lib/browser/chat/draft-model.spec.d.ts +2 -0
- package/lib/browser/chat/draft-model.spec.d.ts.map +1 -0
- package/lib/browser/chat/draft-model.spec.js +31 -0
- package/lib/browser/chat/draft-model.spec.js.map +1 -0
- package/lib/browser/components/app-view.d.ts.map +1 -1
- package/lib/browser/components/app-view.js +10 -3
- package/lib/browser/components/app-view.js.map +1 -1
- package/lib/browser/components/composer-box.d.ts +6 -0
- package/lib/browser/components/composer-box.d.ts.map +1 -1
- package/lib/browser/components/composer-box.js +51 -14
- package/lib/browser/components/composer-box.js.map +1 -1
- package/lib/browser/components/composer.d.ts.map +1 -1
- package/lib/browser/components/composer.js +1 -1
- package/lib/browser/components/composer.js.map +1 -1
- package/lib/browser/components/dialog-view.d.ts +4 -1
- package/lib/browser/components/dialog-view.d.ts.map +1 -1
- package/lib/browser/components/dialog-view.js +11 -7
- package/lib/browser/components/dialog-view.js.map +1 -1
- package/lib/browser/components/notice-center.d.ts.map +1 -1
- package/lib/browser/components/notice-center.js +3 -1
- package/lib/browser/components/notice-center.js.map +1 -1
- package/lib/browser/components/plus-menu.spec.d.ts +2 -0
- package/lib/browser/components/plus-menu.spec.d.ts.map +1 -0
- package/lib/browser/components/plus-menu.spec.js +18 -0
- package/lib/browser/components/plus-menu.spec.js.map +1 -0
- package/lib/browser/components/session-view.d.ts.map +1 -1
- package/lib/browser/components/session-view.js +48 -4
- package/lib/browser/components/session-view.js.map +1 -1
- package/lib/browser/components/terminal-art.d.ts +8 -0
- package/lib/browser/components/terminal-art.d.ts.map +1 -0
- package/lib/browser/components/terminal-art.js +48 -0
- package/lib/browser/components/terminal-art.js.map +1 -0
- package/lib/browser/components/tool-view.js +1 -1
- package/lib/browser/components/tool-view.js.map +1 -1
- package/lib/browser/components/web-composer.d.ts.map +1 -1
- package/lib/browser/components/web-composer.js +1 -1
- package/lib/browser/components/web-composer.js.map +1 -1
- package/lib/browser/extension/icons.d.ts.map +1 -1
- package/lib/browser/extension/icons.js +3 -0
- package/lib/browser/extension/icons.js.map +1 -1
- package/lib/browser/extension/web-extension-api.d.ts +117 -1
- package/lib/browser/extension/web-extension-api.d.ts.map +1 -1
- package/lib/browser/extension/web-extensions.d.ts +3 -0
- package/lib/browser/extension/web-extensions.d.ts.map +1 -1
- package/lib/browser/extension/web-extensions.js +22 -0
- package/lib/browser/extension/web-extensions.js.map +1 -1
- package/lib/browser/i18n/locales.d.ts +13 -1
- package/lib/browser/i18n/locales.d.ts.map +1 -1
- package/lib/browser/i18n/messages.d.ts +12 -0
- package/lib/browser/i18n/messages.d.ts.map +1 -1
- package/lib/browser/i18n/messages.js +24 -0
- package/lib/browser/i18n/messages.js.map +1 -1
- package/lib/browser/notices/notices-protocol.d.ts +3 -0
- package/lib/browser/notices/notices-protocol.d.ts.map +1 -1
- package/lib/browser/notices/notices.d.ts +3 -0
- package/lib/browser/notices/notices.d.ts.map +1 -1
- package/lib/browser/notices/notices.js +15 -0
- package/lib/browser/notices/notices.js.map +1 -1
- package/lib/browser/notices/notices.spec.js +7 -2
- package/lib/browser/notices/notices.spec.js.map +1 -1
- package/lib/browser/style/conversation.d.ts +1 -1
- package/lib/browser/style/conversation.d.ts.map +1 -1
- package/lib/browser/style/conversation.js +16 -1
- package/lib/browser/style/conversation.js.map +1 -1
- package/lib/browser/style/layout.d.ts +1 -1
- package/lib/browser/style/layout.d.ts.map +1 -1
- package/lib/browser/style/layout.js +5 -0
- package/lib/browser/style/layout.js.map +1 -1
- package/lib/browser/style/shell.d.ts +1 -1
- package/lib/browser/style/shell.d.ts.map +1 -1
- package/lib/browser/style/shell.js +1 -0
- package/lib/browser/style/shell.js.map +1 -1
- package/lib/browser/terminal/canvas-font.d.ts +11 -0
- package/lib/browser/terminal/canvas-font.d.ts.map +1 -0
- package/lib/browser/terminal/canvas-font.js +37 -0
- package/lib/browser/terminal/canvas-font.js.map +1 -0
- package/lib/browser/terminal/canvas-font.spec.d.ts +2 -0
- package/lib/browser/terminal/canvas-font.spec.d.ts.map +1 -0
- package/lib/browser/terminal/canvas-font.spec.js +32 -0
- package/lib/browser/terminal/canvas-font.spec.js.map +1 -0
- package/lib/browser/terminal/terminal-links.d.ts +19 -0
- package/lib/browser/terminal/terminal-links.d.ts.map +1 -0
- package/lib/browser/terminal/terminal-links.js +75 -0
- package/lib/browser/terminal/terminal-links.js.map +1 -0
- package/lib/browser/terminal/terminal-links.spec.d.ts +2 -0
- package/lib/browser/terminal/terminal-links.spec.d.ts.map +1 -0
- package/lib/browser/terminal/terminal-links.spec.js +30 -0
- package/lib/browser/terminal/terminal-links.spec.js.map +1 -0
- package/lib/browser/terminal/terminal-theme.d.ts +9 -0
- package/lib/browser/terminal/terminal-theme.d.ts.map +1 -0
- package/lib/browser/terminal/terminal-theme.js +68 -0
- package/lib/browser/terminal/terminal-theme.js.map +1 -0
- package/lib/browser/terminal/terminal-theme.spec.d.ts +2 -0
- package/lib/browser/terminal/terminal-theme.spec.d.ts.map +1 -0
- package/lib/browser/terminal/terminal-theme.spec.js +24 -0
- package/lib/browser/terminal/terminal-theme.spec.js.map +1 -0
- package/lib/browser/terminal/web-terminal.d.ts +75 -0
- package/lib/browser/terminal/web-terminal.d.ts.map +1 -0
- package/lib/browser/terminal/web-terminal.js +304 -0
- package/lib/browser/terminal/web-terminal.js.map +1 -0
- package/lib/browser/terminal/xterm.d.ts +6 -0
- package/lib/browser/terminal/xterm.d.ts.map +1 -0
- package/lib/browser/terminal/xterm.js +16 -0
- package/lib/browser/terminal/xterm.js.map +1 -0
- package/lib/browser/util/desktop.d.ts +44 -0
- package/lib/browser/util/desktop.d.ts.map +1 -0
- package/lib/browser/util/desktop.js +58 -0
- package/lib/browser/util/desktop.js.map +1 -0
- package/lib/browser/util/desktop.spec.d.ts +2 -0
- package/lib/browser/util/desktop.spec.d.ts.map +1 -0
- package/lib/browser/util/desktop.spec.js +67 -0
- package/lib/browser/util/desktop.spec.js.map +1 -0
- package/lib/browser/util/file-drag.d.ts +27 -0
- package/lib/browser/util/file-drag.d.ts.map +1 -0
- package/lib/browser/util/file-drag.js +76 -0
- package/lib/browser/util/file-drag.js.map +1 -0
- package/lib/browser/util/file-drag.spec.d.ts +2 -0
- package/lib/browser/util/file-drag.spec.d.ts.map +1 -0
- package/lib/browser/util/file-drag.spec.js +46 -0
- package/lib/browser/util/file-drag.spec.js.map +1 -0
- package/lib/browser/util/terminal-text.d.ts +34 -0
- package/lib/browser/util/terminal-text.d.ts.map +1 -0
- package/lib/browser/util/terminal-text.js +212 -0
- package/lib/browser/util/terminal-text.js.map +1 -0
- package/lib/browser/util/terminal-text.spec.d.ts +2 -0
- package/lib/browser/util/terminal-text.spec.d.ts.map +1 -0
- package/lib/browser/util/terminal-text.spec.js +54 -0
- package/lib/browser/util/terminal-text.spec.js.map +1 -0
- package/lib/browser/util/tool.d.ts.map +1 -1
- package/lib/browser/util/tool.js +16 -0
- package/lib/browser/util/tool.js.map +1 -1
- package/lib/browser/util/tool.spec.js +12 -0
- package/lib/browser/util/tool.spec.js.map +1 -1
- package/package.json +11 -7
- package/src/browser/chat/chat-protocol.ts +4 -0
- package/src/browser/chat/chat-view.tsx +4 -0
- package/src/browser/chat/chat.spec.ts +31 -0
- package/src/browser/chat/chat.ts +36 -14
- package/src/browser/chat/draft-model.spec.tsx +31 -0
- package/src/browser/chat/draft-model.tsx +63 -0
- package/src/browser/components/app-view.tsx +10 -3
- package/src/browser/components/composer-box.tsx +52 -6
- package/src/browser/components/composer.tsx +1 -0
- package/src/browser/components/dialog-view.tsx +16 -7
- package/src/browser/components/notice-center.tsx +7 -1
- package/src/browser/components/plus-menu.spec.ts +16 -0
- package/src/browser/components/session-view.tsx +65 -4
- package/src/browser/components/terminal-art.tsx +21 -0
- package/src/browser/components/tool-view.tsx +1 -1
- package/src/browser/components/web-composer.tsx +1 -0
- package/src/browser/extension/icons.ts +6 -0
- package/src/browser/extension/web-extension-api.ts +131 -1
- package/src/browser/extension/web-extensions.ts +36 -1
- package/src/browser/i18n/messages.ts +24 -0
- package/src/browser/notices/notices-protocol.ts +3 -0
- package/src/browser/notices/notices.spec.ts +8 -2
- package/src/browser/notices/notices.ts +17 -1
- package/src/browser/style/conversation.ts +16 -1
- package/src/browser/style/layout.ts +5 -0
- package/src/browser/style/shell.ts +1 -0
- package/src/browser/terminal/canvas-font.spec.ts +29 -0
- package/src/browser/terminal/canvas-font.ts +32 -0
- package/src/browser/terminal/terminal-links.spec.ts +32 -0
- package/src/browser/terminal/terminal-links.ts +75 -0
- package/src/browser/terminal/terminal-theme.spec.ts +23 -0
- package/src/browser/terminal/terminal-theme.ts +66 -0
- package/src/browser/terminal/web-terminal.ts +330 -0
- package/src/browser/terminal/xterm.ts +10 -0
- package/src/browser/util/desktop.spec.ts +68 -0
- package/src/browser/util/desktop.ts +96 -0
- package/src/browser/util/file-drag.spec.ts +48 -0
- package/src/browser/util/file-drag.ts +78 -0
- package/src/browser/util/terminal-text.spec.ts +60 -0
- package/src/browser/util/terminal-text.ts +223 -0
- package/src/browser/util/tool.spec.ts +12 -0
- package/src/browser/util/tool.ts +17 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import type { FitAddon } from '@xterm/addon-fit';
|
|
2
|
+
import type { ILink, Terminal } from '@xterm/xterm';
|
|
3
|
+
import type { WebTerminal, WebTerminalOptions } from '../extension/web-extension-api.js';
|
|
4
|
+
import type { OpenLinkOptions } from '../links/links-protocol.js';
|
|
5
|
+
import type { TaSettings } from '../settings/settings-protocol.js';
|
|
6
|
+
import type { LinkTarget } from '../util/link.js';
|
|
7
|
+
type XtermModule = typeof import('./xterm.js');
|
|
8
|
+
/** Loads xterm.js the first time a terminal is made, not with the page. */
|
|
9
|
+
export declare namespace XtermLoader {
|
|
10
|
+
function load(): Promise<XtermModule>;
|
|
11
|
+
}
|
|
12
|
+
/** Opens what a link points to, as a link of a reply (TaLinks.open). */
|
|
13
|
+
export type TerminalLinkOpener = (target: LinkTarget, options: OpenLinkOptions) => void;
|
|
14
|
+
/**
|
|
15
|
+
* A terminal as VS Code's: xterm.js on the GPU (its WebGL renderer; the DOM one when the browser has
|
|
16
|
+
* no WebGL or loses it), in the theme of the page, which it follows. It opens in an element of its own
|
|
17
|
+
* that moves from view to view, so that it keeps its screen and scrollback while no view shows it.
|
|
18
|
+
* URLs and paths of files are links, opened with Cmd or Ctrl + click, from the directory the shell says
|
|
19
|
+
* it is in (OSC 7), else the one it started in.
|
|
20
|
+
*/
|
|
21
|
+
export declare class DefaultWebTerminal implements WebTerminal {
|
|
22
|
+
protected readonly settings: TaSettings;
|
|
23
|
+
protected readonly openLink: TerminalLinkOpener;
|
|
24
|
+
cols: number;
|
|
25
|
+
rows: number;
|
|
26
|
+
/** Where paths of its links are read from. */
|
|
27
|
+
protected cwd?: string;
|
|
28
|
+
protected term?: Terminal;
|
|
29
|
+
protected fit?: FitAddon;
|
|
30
|
+
protected module?: XtermModule;
|
|
31
|
+
protected opened: boolean;
|
|
32
|
+
protected disposed: boolean;
|
|
33
|
+
/** Focus asked for before xterm.js opened: it takes it once it does. */
|
|
34
|
+
protected wantsFocus: boolean;
|
|
35
|
+
/** Output that came before xterm.js loaded. */
|
|
36
|
+
protected pending: string[];
|
|
37
|
+
protected readonly dataListeners: Set<(data: string) => void>;
|
|
38
|
+
protected readonly resizeListeners: Set<(size: {
|
|
39
|
+
cols: number;
|
|
40
|
+
rows: number;
|
|
41
|
+
}) => void>;
|
|
42
|
+
protected readonly host: HTMLDivElement;
|
|
43
|
+
protected parent?: HTMLElement;
|
|
44
|
+
protected observer?: ResizeObserver;
|
|
45
|
+
protected fitTimer?: ReturnType<typeof setTimeout>;
|
|
46
|
+
protected unsubscribe?: () => void;
|
|
47
|
+
constructor(settings: TaSettings, openLink: TerminalLinkOpener, options?: WebTerminalOptions);
|
|
48
|
+
write(data: string): void;
|
|
49
|
+
onData(listener: (data: string) => void): () => void;
|
|
50
|
+
onResize(listener: (size: {
|
|
51
|
+
cols: number;
|
|
52
|
+
rows: number;
|
|
53
|
+
}) => void): () => void;
|
|
54
|
+
attach(element: HTMLElement): () => void;
|
|
55
|
+
focus(): void;
|
|
56
|
+
dispose(): void;
|
|
57
|
+
protected start(module: XtermModule): void;
|
|
58
|
+
/**
|
|
59
|
+
* Opens xterm.js where it can measure its font: once, the first time it is in the page with a size
|
|
60
|
+
* (a hidden tab has none; ResizeObserver calls again when it shows).
|
|
61
|
+
*/
|
|
62
|
+
protected open(): void;
|
|
63
|
+
/**
|
|
64
|
+
* Opens it the first time its view has a size, and fits it to the view after that, once the size
|
|
65
|
+
* settled; a hidden view (no size) keeps the size it had. Timers, not frames: a window in the
|
|
66
|
+
* background gets no frames, and the terminal would stay unopened there.
|
|
67
|
+
*/
|
|
68
|
+
protected layout(): void;
|
|
69
|
+
/** The links of the line (with the rows it wraps onto) that crosses row `y` (from 1). */
|
|
70
|
+
protected linksAt(term: Terminal, y: number): ILink[] | undefined;
|
|
71
|
+
protected detach(): void;
|
|
72
|
+
protected emitData(data: string): void;
|
|
73
|
+
}
|
|
74
|
+
export {};
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
import { message } from '../i18n/messages.js';
|
|
2
|
+
import { ShortcutUtil } from '../settings/agent-settings.js';
|
|
3
|
+
import { TerminalLinkUtil } from './terminal-links.js';
|
|
4
|
+
import { TerminalTheme } from './terminal-theme.js';
|
|
5
|
+
/** Loads xterm.js the first time a terminal is made, not with the page. */
|
|
6
|
+
export var XtermLoader;
|
|
7
|
+
(function (XtermLoader) {
|
|
8
|
+
let loading;
|
|
9
|
+
function load() {
|
|
10
|
+
loading !== null && loading !== void 0 ? loading : (loading = import('./xterm.js').catch(error => {
|
|
11
|
+
loading = undefined;
|
|
12
|
+
throw error;
|
|
13
|
+
}));
|
|
14
|
+
return loading;
|
|
15
|
+
}
|
|
16
|
+
XtermLoader.load = load;
|
|
17
|
+
})(XtermLoader || (XtermLoader = {}));
|
|
18
|
+
const DEFAULT_COLS = 80;
|
|
19
|
+
const DEFAULT_ROWS = 24;
|
|
20
|
+
const SCROLLBACK = 5000;
|
|
21
|
+
/** Rows of one line that wraps, at most, read for its links. */
|
|
22
|
+
const MAX_WRAPPED_ROWS = 50;
|
|
23
|
+
/** A view being dragged to a new size fits once it stops. */
|
|
24
|
+
const FIT_MS = 50;
|
|
25
|
+
function cssVariable(name) {
|
|
26
|
+
return getComputedStyle(document.documentElement).getPropertyValue(name);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* A terminal as VS Code's: xterm.js on the GPU (its WebGL renderer; the DOM one when the browser has
|
|
30
|
+
* no WebGL or loses it), in the theme of the page, which it follows. It opens in an element of its own
|
|
31
|
+
* that moves from view to view, so that it keeps its screen and scrollback while no view shows it.
|
|
32
|
+
* URLs and paths of files are links, opened with Cmd or Ctrl + click, from the directory the shell says
|
|
33
|
+
* it is in (OSC 7), else the one it started in.
|
|
34
|
+
*/
|
|
35
|
+
export class DefaultWebTerminal {
|
|
36
|
+
constructor(settings, openLink, options = {}) {
|
|
37
|
+
var _a, _b;
|
|
38
|
+
this.settings = settings;
|
|
39
|
+
this.openLink = openLink;
|
|
40
|
+
this.opened = false;
|
|
41
|
+
this.disposed = false;
|
|
42
|
+
/** Focus asked for before xterm.js opened: it takes it once it does. */
|
|
43
|
+
this.wantsFocus = false;
|
|
44
|
+
/** Output that came before xterm.js loaded. */
|
|
45
|
+
this.pending = [];
|
|
46
|
+
this.dataListeners = new Set();
|
|
47
|
+
this.resizeListeners = new Set();
|
|
48
|
+
this.host = document.createElement('div');
|
|
49
|
+
this.cols = (_a = options.cols) !== null && _a !== void 0 ? _a : DEFAULT_COLS;
|
|
50
|
+
this.rows = (_b = options.rows) !== null && _b !== void 0 ? _b : DEFAULT_ROWS;
|
|
51
|
+
this.cwd = options.cwd;
|
|
52
|
+
this.host.className = 'ta-terminal';
|
|
53
|
+
XtermLoader.load().then(module => this.start(module), error => console.error('The terminal did not load:', error));
|
|
54
|
+
}
|
|
55
|
+
write(data) {
|
|
56
|
+
if (this.term) {
|
|
57
|
+
this.term.write(data);
|
|
58
|
+
}
|
|
59
|
+
else if (!this.disposed) {
|
|
60
|
+
this.pending.push(data);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
onData(listener) {
|
|
64
|
+
this.dataListeners.add(listener);
|
|
65
|
+
return () => this.dataListeners.delete(listener);
|
|
66
|
+
}
|
|
67
|
+
onResize(listener) {
|
|
68
|
+
this.resizeListeners.add(listener);
|
|
69
|
+
return () => this.resizeListeners.delete(listener);
|
|
70
|
+
}
|
|
71
|
+
attach(element) {
|
|
72
|
+
this.detach();
|
|
73
|
+
this.parent = element;
|
|
74
|
+
element.appendChild(this.host);
|
|
75
|
+
this.observer = new ResizeObserver(() => this.layout());
|
|
76
|
+
this.observer.observe(element);
|
|
77
|
+
this.open();
|
|
78
|
+
this.layout();
|
|
79
|
+
return () => {
|
|
80
|
+
if (this.parent === element) {
|
|
81
|
+
this.detach();
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
focus() {
|
|
86
|
+
var _a;
|
|
87
|
+
if (this.opened) {
|
|
88
|
+
(_a = this.term) === null || _a === void 0 ? void 0 : _a.focus();
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
this.wantsFocus = true;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
dispose() {
|
|
95
|
+
var _a, _b;
|
|
96
|
+
this.disposed = true;
|
|
97
|
+
this.detach();
|
|
98
|
+
(_a = this.unsubscribe) === null || _a === void 0 ? void 0 : _a.call(this);
|
|
99
|
+
(_b = this.term) === null || _b === void 0 ? void 0 : _b.dispose();
|
|
100
|
+
this.pending = [];
|
|
101
|
+
this.dataListeners.clear();
|
|
102
|
+
this.resizeListeners.clear();
|
|
103
|
+
}
|
|
104
|
+
start(module) {
|
|
105
|
+
if (this.disposed) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
this.module = module;
|
|
109
|
+
const term = new module.Terminal({
|
|
110
|
+
cols: this.cols,
|
|
111
|
+
rows: this.rows,
|
|
112
|
+
// The Unicode 11 widths of emoji and CJK, as programs reckon them.
|
|
113
|
+
allowProposedApi: true,
|
|
114
|
+
fontFamily: TerminalTheme.fontFamily(cssVariable),
|
|
115
|
+
fontSize: 12,
|
|
116
|
+
lineHeight: 1.2,
|
|
117
|
+
scrollback: SCROLLBACK,
|
|
118
|
+
cursorBlink: true,
|
|
119
|
+
cursorInactiveStyle: 'outline',
|
|
120
|
+
minimumContrastRatio: 4.5,
|
|
121
|
+
drawBoldTextInBrightColors: true,
|
|
122
|
+
rescaleOverlappingGlyphs: true,
|
|
123
|
+
theme: TerminalTheme.of(this.settings.state.theme, cssVariable),
|
|
124
|
+
});
|
|
125
|
+
const unicode = new module.Unicode11Addon();
|
|
126
|
+
term.loadAddon(unicode);
|
|
127
|
+
term.unicode.activeVersion = '11';
|
|
128
|
+
this.fit = new module.FitAddon();
|
|
129
|
+
term.loadAddon(this.fit);
|
|
130
|
+
// Shift+Enter as the kitty keyboard protocol writes it: a new line in the editor of pi (ta), not a send.
|
|
131
|
+
term.attachCustomKeyEventHandler(event => {
|
|
132
|
+
if (event.key === 'Enter' && event.shiftKey && !event.ctrlKey && !event.altKey && !event.metaKey) {
|
|
133
|
+
if (event.type === 'keydown') {
|
|
134
|
+
this.emitData('\x1b[13;2u');
|
|
135
|
+
}
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
return true;
|
|
139
|
+
});
|
|
140
|
+
term.onData(data => this.emitData(data));
|
|
141
|
+
// Mouse reports in the old encoding, bytes over 127: as characters, which the server sends as they are.
|
|
142
|
+
term.onBinary(data => this.emitData(data));
|
|
143
|
+
term.onResize(size => {
|
|
144
|
+
this.cols = size.cols;
|
|
145
|
+
this.rows = size.rows;
|
|
146
|
+
for (const listener of this.resizeListeners) {
|
|
147
|
+
listener(size);
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
term.parser.registerOscHandler(7, data => {
|
|
151
|
+
var _a;
|
|
152
|
+
this.cwd = (_a = TerminalLinkUtil.cwdOf(data)) !== null && _a !== void 0 ? _a : this.cwd;
|
|
153
|
+
return true;
|
|
154
|
+
});
|
|
155
|
+
term.registerLinkProvider({ provideLinks: (y, callback) => callback(this.linksAt(term, y)) });
|
|
156
|
+
for (const data of this.pending) {
|
|
157
|
+
term.write(data);
|
|
158
|
+
}
|
|
159
|
+
this.pending = [];
|
|
160
|
+
this.term = term;
|
|
161
|
+
this.unsubscribe = this.settings.subscribe(state => {
|
|
162
|
+
term.options.theme = TerminalTheme.of(state.theme, cssVariable);
|
|
163
|
+
});
|
|
164
|
+
this.open();
|
|
165
|
+
this.layout();
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Opens xterm.js where it can measure its font: once, the first time it is in the page with a size
|
|
169
|
+
* (a hidden tab has none; ResizeObserver calls again when it shows).
|
|
170
|
+
*/
|
|
171
|
+
open() {
|
|
172
|
+
var _a;
|
|
173
|
+
const { term, module, parent } = this;
|
|
174
|
+
if (!term || !module || this.opened || !(parent === null || parent === void 0 ? void 0 : parent.clientWidth) || !parent.clientHeight) {
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
this.opened = true;
|
|
178
|
+
term.open(this.host);
|
|
179
|
+
const input = this.host.querySelector('.xterm-helper-textarea');
|
|
180
|
+
for (const name of ['autocomplete', 'autocorrect', 'autocapitalize']) {
|
|
181
|
+
input === null || input === void 0 ? void 0 : input.setAttribute(name, 'off');
|
|
182
|
+
}
|
|
183
|
+
input === null || input === void 0 ? void 0 : input.setAttribute('spellcheck', 'false');
|
|
184
|
+
try {
|
|
185
|
+
const webgl = new module.WebglAddon();
|
|
186
|
+
webgl.onContextLoss(() => webgl.dispose());
|
|
187
|
+
term.loadAddon(webgl);
|
|
188
|
+
}
|
|
189
|
+
catch (error) {
|
|
190
|
+
console.warn('No WebGL for the terminal; it draws with the DOM:', error);
|
|
191
|
+
}
|
|
192
|
+
// After the renderer: WebGL measures characters otherwise than the DOM, so the size it fits differs.
|
|
193
|
+
(_a = this.fit) === null || _a === void 0 ? void 0 : _a.fit();
|
|
194
|
+
if (this.wantsFocus) {
|
|
195
|
+
this.wantsFocus = false;
|
|
196
|
+
term.focus();
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Opens it the first time its view has a size, and fits it to the view after that, once the size
|
|
201
|
+
* settled; a hidden view (no size) keeps the size it had. Timers, not frames: a window in the
|
|
202
|
+
* background gets no frames, and the terminal would stay unopened there.
|
|
203
|
+
*/
|
|
204
|
+
layout() {
|
|
205
|
+
var _a;
|
|
206
|
+
if (!((_a = this.parent) === null || _a === void 0 ? void 0 : _a.clientWidth) || !this.parent.clientHeight) {
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
if (!this.opened) {
|
|
210
|
+
this.open();
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
clearTimeout(this.fitTimer);
|
|
214
|
+
this.fitTimer = setTimeout(() => {
|
|
215
|
+
var _a, _b, _c, _d, _e;
|
|
216
|
+
const size = ((_a = this.parent) === null || _a === void 0 ? void 0 : _a.clientWidth) && this.parent.clientHeight ? (_b = this.fit) === null || _b === void 0 ? void 0 : _b.proposeDimensions() : undefined;
|
|
217
|
+
if (size && (size.cols !== ((_c = this.term) === null || _c === void 0 ? void 0 : _c.cols) || size.rows !== ((_d = this.term) === null || _d === void 0 ? void 0 : _d.rows))) {
|
|
218
|
+
(_e = this.fit) === null || _e === void 0 ? void 0 : _e.fit();
|
|
219
|
+
}
|
|
220
|
+
}, FIT_MS);
|
|
221
|
+
}
|
|
222
|
+
/** The links of the line (with the rows it wraps onto) that crosses row `y` (from 1). */
|
|
223
|
+
linksAt(term, y) {
|
|
224
|
+
var _a;
|
|
225
|
+
var _b;
|
|
226
|
+
const buffer = term.buffer.active;
|
|
227
|
+
let first = y - 1;
|
|
228
|
+
while (first > 0 && y - 1 - first < MAX_WRAPPED_ROWS && ((_a = buffer.getLine(first)) === null || _a === void 0 ? void 0 : _a.isWrapped)) {
|
|
229
|
+
first--;
|
|
230
|
+
}
|
|
231
|
+
// The text of the line, and where each of its characters (UTF-16 units) is on the screen.
|
|
232
|
+
let text = '';
|
|
233
|
+
const places = [];
|
|
234
|
+
for (let row = first; row - first < MAX_WRAPPED_ROWS; row++) {
|
|
235
|
+
const line = buffer.getLine(row);
|
|
236
|
+
if (!line || (row > first && !line.isWrapped)) {
|
|
237
|
+
break;
|
|
238
|
+
}
|
|
239
|
+
for (let x = 0; x < line.length; x++) {
|
|
240
|
+
const cell = line.getCell(x);
|
|
241
|
+
const width = (_b = cell === null || cell === void 0 ? void 0 : cell.getWidth()) !== null && _b !== void 0 ? _b : 1;
|
|
242
|
+
if (!cell || width === 0) {
|
|
243
|
+
// The second half of a wide character.
|
|
244
|
+
continue;
|
|
245
|
+
}
|
|
246
|
+
const chars = cell.getChars() || ' ';
|
|
247
|
+
for (let unit = 0; unit < chars.length; unit++) {
|
|
248
|
+
places.push({ x: x + 1, y: row + 1, width });
|
|
249
|
+
}
|
|
250
|
+
text += chars;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
const links = TerminalLinkUtil.find(text).filter(link => places[link.start].y <= y && places[link.end - 1].y >= y);
|
|
254
|
+
if (!links.length) {
|
|
255
|
+
return undefined;
|
|
256
|
+
}
|
|
257
|
+
const mac = ShortcutUtil.isMac();
|
|
258
|
+
return links.map(link => {
|
|
259
|
+
const start = places[link.start];
|
|
260
|
+
const last = places[link.end - 1];
|
|
261
|
+
const hint = link.target.type === 'path'
|
|
262
|
+
? mac
|
|
263
|
+
? 'ta.terminal.openLinkMac'
|
|
264
|
+
: 'ta.terminal.openLink'
|
|
265
|
+
: mac
|
|
266
|
+
? 'ta.terminal.openUrlMac'
|
|
267
|
+
: 'ta.terminal.openUrl';
|
|
268
|
+
return {
|
|
269
|
+
range: { start: { x: start.x, y: start.y }, end: { x: last.x + last.width - 1, y: last.y } },
|
|
270
|
+
text: text.slice(link.start, link.end),
|
|
271
|
+
decorations: { underline: true, pointerCursor: true },
|
|
272
|
+
activate: (event) => {
|
|
273
|
+
if (mac ? event.metaKey : event.ctrlKey) {
|
|
274
|
+
this.openLink(link.target, { cwd: this.cwd, external: event.shiftKey && link.target.type !== 'path' });
|
|
275
|
+
}
|
|
276
|
+
},
|
|
277
|
+
hover: () => {
|
|
278
|
+
this.host.title = message(this.settings.state.language, hint);
|
|
279
|
+
},
|
|
280
|
+
leave: () => {
|
|
281
|
+
this.host.title = '';
|
|
282
|
+
},
|
|
283
|
+
};
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
detach() {
|
|
287
|
+
var _a;
|
|
288
|
+
(_a = this.observer) === null || _a === void 0 ? void 0 : _a.disconnect();
|
|
289
|
+
this.observer = undefined;
|
|
290
|
+
clearTimeout(this.fitTimer);
|
|
291
|
+
this.host.remove();
|
|
292
|
+
this.parent = undefined;
|
|
293
|
+
}
|
|
294
|
+
emitData(data) {
|
|
295
|
+
for (const listener of this.dataListeners) {
|
|
296
|
+
listener(data);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
//# sourceMappingURL=web-terminal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-terminal.js","sourceRoot":"","sources":["../../../src/browser/terminal/web-terminal.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// What a terminal loads the first time one is made: xterm.js, its WebGL renderer and its styles.
|
|
2
|
+
import '@xterm/xterm/css/xterm.css';
|
|
3
|
+
import { CanvasFontFix } from './canvas-font.js';
|
|
4
|
+
CanvasFontFix.install();
|
|
5
|
+
export { FitAddon } from '@xterm/addon-fit';
|
|
6
|
+
export { Unicode11Addon } from '@xterm/addon-unicode11';
|
|
7
|
+
export { WebglAddon } from '@xterm/addon-webgl';
|
|
8
|
+
export { Terminal } from '@xterm/xterm';
|
|
9
|
+
//# sourceMappingURL=xterm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xterm.js","sourceRoot":"","sources":["../../../src/browser/terminal/xterm.ts"],"names":[],"mappings":"AAAA,iGAAiG;AACjG,OAAO,4BAA4B,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,aAAa,CAAC,OAAO,EAAE,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/** What Ta Desktop can do for the page beyond a tab of a browser. */
|
|
2
|
+
export type DesktopFeature = 'webview' | 'debugWebview' | 'showItemInFolder' | 'browserData';
|
|
3
|
+
/** The file manager of the system, from Ta Desktop: {@link WebDesktop} of the extension API. */
|
|
4
|
+
export interface DesktopFileManager {
|
|
5
|
+
/** Node's `process.platform` of the machine: what the file manager is called there. */
|
|
6
|
+
readonly platform: string;
|
|
7
|
+
showItemInFolder(path: string): Promise<void>;
|
|
8
|
+
readonly browserData?: DesktopBrowserData;
|
|
9
|
+
}
|
|
10
|
+
/** A profile of the user's Chrome, Edge…, whose sign-ins Ta Desktop can take. */
|
|
11
|
+
export interface DesktopBrowserProfile {
|
|
12
|
+
id: string;
|
|
13
|
+
browser: string;
|
|
14
|
+
name: string;
|
|
15
|
+
}
|
|
16
|
+
/** What an import took; `appBound`: cookies only Chrome itself can read (Windows). */
|
|
17
|
+
export interface DesktopBrowserImport {
|
|
18
|
+
imported: number;
|
|
19
|
+
skipped: number;
|
|
20
|
+
appBound: number;
|
|
21
|
+
}
|
|
22
|
+
/** The sign-ins of the user's browsers in the browser of Ta: {@link WebBrowserData} of the extension API. */
|
|
23
|
+
export interface DesktopBrowserData {
|
|
24
|
+
profiles(): Promise<DesktopBrowserProfile[]>;
|
|
25
|
+
/** After the user said yes in a dialog of the app; `undefined` when they said no. */
|
|
26
|
+
import(profileId: string): Promise<DesktopBrowserImport | undefined>;
|
|
27
|
+
clear(): Promise<void>;
|
|
28
|
+
}
|
|
29
|
+
/** A command of the DevTools protocol to the page of a `<webview>` of this page, by its getWebContentsId(). */
|
|
30
|
+
export type DebugWebview = (webContentsId: number, method: string, params?: Record<string, unknown>) => Promise<unknown>;
|
|
31
|
+
/**
|
|
32
|
+
* Ta Desktop gives its window's page `taDesktop` (its preload, apps/ta-desktop): the features it adds to
|
|
33
|
+
* what a browser can do. A browser, an installed web app and the mobile app have none.
|
|
34
|
+
*/
|
|
35
|
+
export declare namespace DesktopUtil {
|
|
36
|
+
function has(feature: DesktopFeature, scope?: object): boolean;
|
|
37
|
+
/** The file manager of the system, when the page is in Ta Desktop. */
|
|
38
|
+
function fileManager(scope?: object): DesktopFileManager | undefined;
|
|
39
|
+
/** The sign-ins of the user's browsers, where Ta Desktop can read them (macOS, Windows). */
|
|
40
|
+
function browserData(scope?: object): DesktopBrowserData | undefined;
|
|
41
|
+
/** `debugWebview` of Ta Desktop; `undefined` elsewhere. */
|
|
42
|
+
function debugWebview(scope?: object): DebugWebview | undefined;
|
|
43
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ta Desktop gives its window's page `taDesktop` (its preload, apps/ta-desktop): the features it adds to
|
|
3
|
+
* what a browser can do. A browser, an installed web app and the mobile app have none.
|
|
4
|
+
*/
|
|
5
|
+
export var DesktopUtil;
|
|
6
|
+
(function (DesktopUtil) {
|
|
7
|
+
function has(feature, scope = globalThis) {
|
|
8
|
+
var _a;
|
|
9
|
+
const features = (_a = scope.taDesktop) === null || _a === void 0 ? void 0 : _a.features;
|
|
10
|
+
return Array.isArray(features) && features.includes(feature);
|
|
11
|
+
}
|
|
12
|
+
DesktopUtil.has = has;
|
|
13
|
+
/** The file manager of the system, when the page is in Ta Desktop. */
|
|
14
|
+
function fileManager(scope = globalThis) {
|
|
15
|
+
const desktop = scope.taDesktop;
|
|
16
|
+
const show = desktop === null || desktop === void 0 ? void 0 : desktop.showItemInFolder;
|
|
17
|
+
if (!has('showItemInFolder', scope) || typeof show !== 'function') {
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
return Object.freeze({
|
|
21
|
+
platform: typeof (desktop === null || desktop === void 0 ? void 0 : desktop.platform) === 'string' ? desktop.platform : 'unknown',
|
|
22
|
+
showItemInFolder: (path) => Promise.resolve(show(path)).then(() => undefined),
|
|
23
|
+
browserData: browserData(scope),
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
DesktopUtil.fileManager = fileManager;
|
|
27
|
+
/** The sign-ins of the user's browsers, where Ta Desktop can read them (macOS, Windows). */
|
|
28
|
+
function browserData(scope = globalThis) {
|
|
29
|
+
var _a;
|
|
30
|
+
const data = (_a = scope.taDesktop) === null || _a === void 0 ? void 0 : _a.browserData;
|
|
31
|
+
const { profiles, import: take, clear } = data !== null && data !== void 0 ? data : {};
|
|
32
|
+
if (!has('browserData', scope) || typeof profiles !== 'function' || typeof take !== 'function' || typeof clear !== 'function') {
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
return Object.freeze({
|
|
36
|
+
profiles: async () => { var _a; return (_a = (await profiles())) !== null && _a !== void 0 ? _a : []; },
|
|
37
|
+
import: async (profileId) => {
|
|
38
|
+
const report = (await take(profileId));
|
|
39
|
+
return 'cancelled' in report ? undefined : report;
|
|
40
|
+
},
|
|
41
|
+
clear: async () => {
|
|
42
|
+
await clear();
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
DesktopUtil.browserData = browserData;
|
|
47
|
+
/** `debugWebview` of Ta Desktop; `undefined` elsewhere. */
|
|
48
|
+
function debugWebview(scope = globalThis) {
|
|
49
|
+
const desktop = scope.taDesktop;
|
|
50
|
+
const debug = desktop === null || desktop === void 0 ? void 0 : desktop.debugWebview;
|
|
51
|
+
return has('debugWebview', scope) && typeof debug === 'function' ? (webContentsId, method, params) => debug(webContentsId, method, params) : undefined;
|
|
52
|
+
}
|
|
53
|
+
DesktopUtil.debugWebview = debugWebview;
|
|
54
|
+
})(DesktopUtil || (DesktopUtil = {}));
|
|
55
|
+
//# sourceMappingURL=desktop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"desktop.js","sourceRoot":"","sources":["../../../src/browser/util/desktop.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/** Files of a directory dragged from a view (the explorer): {@link WebFileDrag} of the extension API. */
|
|
2
|
+
export interface DraggedFiles {
|
|
3
|
+
/** The directory they are of: a path of the machine of ta serve, or `ssh://` (TaLocation). */
|
|
4
|
+
cwd: string;
|
|
5
|
+
/** Relative to `cwd`, with `/`; '' for `cwd` itself. */
|
|
6
|
+
paths: string[];
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Files on a drag between the views of the page: their own type, read on a drop; and their paths as text,
|
|
10
|
+
* for what is not of the page (a native field, another app).
|
|
11
|
+
*/
|
|
12
|
+
export declare namespace FileDragUtil {
|
|
13
|
+
const TYPE = "application/x-ta-files";
|
|
14
|
+
function set(dataTransfer: DataTransfer, files: DraggedFiles): void;
|
|
15
|
+
/** Whether a drag holds files: all that `dragover` can tell. */
|
|
16
|
+
function has(dataTransfer: Pick<DataTransfer, 'types'>): boolean;
|
|
17
|
+
/** The files of a drop; undefined when it holds none. */
|
|
18
|
+
function get(dataTransfer: Pick<DataTransfer, 'getData'>): DraggedFiles | undefined;
|
|
19
|
+
/** The paths inside their machine, as a terminal there takes them. */
|
|
20
|
+
function paths(files: DraggedFiles): string[];
|
|
21
|
+
/**
|
|
22
|
+
* The files as `@` references of a conversation in `cwd`: relative to it when they are inside it, on the
|
|
23
|
+
* same machine; else their paths there.
|
|
24
|
+
*/
|
|
25
|
+
function references(files: DraggedFiles, cwd: string | undefined): string;
|
|
26
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { TaLocation } from '@celljs/ta-protocol';
|
|
2
|
+
import { ComposerUtil } from './composer.js';
|
|
3
|
+
/**
|
|
4
|
+
* Files on a drag between the views of the page: their own type, read on a drop; and their paths as text,
|
|
5
|
+
* for what is not of the page (a native field, another app).
|
|
6
|
+
*/
|
|
7
|
+
export var FileDragUtil;
|
|
8
|
+
(function (FileDragUtil) {
|
|
9
|
+
FileDragUtil.TYPE = 'application/x-ta-files';
|
|
10
|
+
function set(dataTransfer, files) {
|
|
11
|
+
const dragged = { cwd: files.cwd, paths: [...files.paths] };
|
|
12
|
+
dataTransfer.setData(FileDragUtil.TYPE, JSON.stringify(dragged));
|
|
13
|
+
dataTransfer.setData('text/plain', paths(dragged).join('\n'));
|
|
14
|
+
}
|
|
15
|
+
FileDragUtil.set = set;
|
|
16
|
+
/** Whether a drag holds files: all that `dragover` can tell. */
|
|
17
|
+
function has(dataTransfer) {
|
|
18
|
+
var _a;
|
|
19
|
+
return Array.from((_a = dataTransfer.types) !== null && _a !== void 0 ? _a : []).includes(FileDragUtil.TYPE);
|
|
20
|
+
}
|
|
21
|
+
FileDragUtil.has = has;
|
|
22
|
+
/** The files of a drop; undefined when it holds none. */
|
|
23
|
+
function get(dataTransfer) {
|
|
24
|
+
try {
|
|
25
|
+
const value = JSON.parse(dataTransfer.getData(FileDragUtil.TYPE) || 'null');
|
|
26
|
+
if (!value || typeof value.cwd !== 'string' || !Array.isArray(value.paths)) {
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
const list = value.paths.filter((path) => typeof path === 'string');
|
|
30
|
+
return list.length ? { cwd: value.cwd, paths: list } : undefined;
|
|
31
|
+
}
|
|
32
|
+
catch (_a) {
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
FileDragUtil.get = get;
|
|
37
|
+
/** The paths inside their machine, as a terminal there takes them. */
|
|
38
|
+
function paths(files) {
|
|
39
|
+
const base = TaLocation.path(files.cwd);
|
|
40
|
+
const windows = /^[a-zA-Z]:[\\/]|^\\\\/.test(base) && !base.includes('/');
|
|
41
|
+
const trimmed = base.replace(/[\\/]+$/, '');
|
|
42
|
+
return files.paths.map(path => {
|
|
43
|
+
if (!path) {
|
|
44
|
+
return base;
|
|
45
|
+
}
|
|
46
|
+
return windows ? `${trimmed}\\${path.replace(/\//g, '\\')}` : `${trimmed}/${path}`;
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
FileDragUtil.paths = paths;
|
|
50
|
+
/**
|
|
51
|
+
* The files as `@` references of a conversation in `cwd`: relative to it when they are inside it, on the
|
|
52
|
+
* same machine; else their paths there.
|
|
53
|
+
*/
|
|
54
|
+
function references(files, cwd) {
|
|
55
|
+
const absolute = paths(files);
|
|
56
|
+
const sameMachine = cwd !== undefined && TaLocation.host(cwd) === TaLocation.host(files.cwd);
|
|
57
|
+
const root = cwd === undefined ? '' : TaLocation.path(cwd).replace(/[\\/]+$/, '');
|
|
58
|
+
return absolute
|
|
59
|
+
.map((path, index) => {
|
|
60
|
+
if (files.cwd === cwd) {
|
|
61
|
+
return files.paths[index] || '.';
|
|
62
|
+
}
|
|
63
|
+
if (sameMachine && root && path.startsWith(`${root}/`)) {
|
|
64
|
+
return path.slice(root.length + 1);
|
|
65
|
+
}
|
|
66
|
+
return path;
|
|
67
|
+
})
|
|
68
|
+
.map(ComposerUtil.reference)
|
|
69
|
+
.join(' ');
|
|
70
|
+
}
|
|
71
|
+
FileDragUtil.references = references;
|
|
72
|
+
})(FileDragUtil || (FileDragUtil = {}));
|
|
73
|
+
//# sourceMappingURL=file-drag.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-drag.js","sourceRoot":"","sources":["../../../src/browser/util/file-drag.ts"],"names":[],"mappings":"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"}
|