@hex1b/web-terminal 0.1.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/LICENSE +21 -0
- package/README.md +243 -0
- package/dist/fonts/cascadia-mono-nf/CascadiaMonoNF.woff2 +0 -0
- package/dist/fonts/cascadia-mono-nf/LICENSE.txt +94 -0
- package/dist/fonts/cascadia-mono-nf/README.md +29 -0
- package/dist/history-state.d.ts +27 -0
- package/dist/history-state.d.ts.map +1 -0
- package/dist/history-state.js +194 -0
- package/dist/history-state.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/input-policy.d.ts +42 -0
- package/dist/input-policy.d.ts.map +1 -0
- package/dist/input-policy.js +143 -0
- package/dist/input-policy.js.map +1 -0
- package/dist/mouse-input.d.ts +26 -0
- package/dist/mouse-input.d.ts.map +1 -0
- package/dist/mouse-input.js +356 -0
- package/dist/mouse-input.js.map +1 -0
- package/dist/protocol.d.ts +17 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +270 -0
- package/dist/protocol.js.map +1 -0
- package/dist/renderer.d.ts +113 -0
- package/dist/renderer.d.ts.map +1 -0
- package/dist/renderer.js +595 -0
- package/dist/renderer.js.map +1 -0
- package/dist/selection-input.d.ts +36 -0
- package/dist/selection-input.d.ts.map +1 -0
- package/dist/selection-input.js +69 -0
- package/dist/selection-input.js.map +1 -0
- package/dist/selection-ui.d.ts +24 -0
- package/dist/selection-ui.d.ts.map +1 -0
- package/dist/selection-ui.js +113 -0
- package/dist/selection-ui.js.map +1 -0
- package/dist/terminal-font.d.ts +23 -0
- package/dist/terminal-font.d.ts.map +1 -0
- package/dist/terminal-font.js +85 -0
- package/dist/terminal-font.js.map +1 -0
- package/dist/terminal-sizing.d.ts +8 -0
- package/dist/terminal-sizing.d.ts.map +1 -0
- package/dist/terminal-sizing.js +38 -0
- package/dist/terminal-sizing.js.map +1 -0
- package/dist/terminal-theme.d.ts +2 -0
- package/dist/terminal-theme.d.ts.map +1 -0
- package/dist/terminal-theme.js +39 -0
- package/dist/terminal-theme.js.map +1 -0
- package/dist/terminal-worker.d.ts +2 -0
- package/dist/terminal-worker.d.ts.map +1 -0
- package/dist/terminal-worker.js +285 -0
- package/dist/terminal-worker.js.map +1 -0
- package/dist/types.d.ts +312 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/validation.d.ts +3 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +7 -0
- package/dist/validation.js.map +1 -0
- package/dist/web-terminal.d.ts +51 -0
- package/dist/web-terminal.d.ts.map +1 -0
- package/dist/web-terminal.js +728 -0
- package/dist/web-terminal.js.map +1 -0
- package/dist/wire-types.d.ts +218 -0
- package/dist/wire-types.d.ts.map +1 -0
- package/dist/wire-types.js +2 -0
- package/dist/wire-types.js.map +1 -0
- package/package.json +42 -0
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
/** Logical terminal dimensions, confirmed by the producer rather than reflowed locally. */
|
|
2
|
+
export interface TerminalGrid {
|
|
3
|
+
columns: number;
|
|
4
|
+
rows: number;
|
|
5
|
+
}
|
|
6
|
+
export interface TerminalSize {
|
|
7
|
+
width: number;
|
|
8
|
+
height: number;
|
|
9
|
+
}
|
|
10
|
+
export interface TerminalPoint {
|
|
11
|
+
x: number;
|
|
12
|
+
y: number;
|
|
13
|
+
}
|
|
14
|
+
export type MouseTrackingMode = 0 | 9 | 1000 | 1002 | 1003;
|
|
15
|
+
export interface TerminalGeometry extends TerminalGrid {
|
|
16
|
+
cellWidth: number;
|
|
17
|
+
cellHeight: number;
|
|
18
|
+
mouseTracking: MouseTrackingMode;
|
|
19
|
+
}
|
|
20
|
+
export interface TerminalPeer {
|
|
21
|
+
id: string | null;
|
|
22
|
+
primaryId: string | null;
|
|
23
|
+
isPrimary: boolean;
|
|
24
|
+
}
|
|
25
|
+
/** Font size is an integer from 8 to 32; fixed grids allow 20–300 columns and 10–100 rows. */
|
|
26
|
+
export type TerminalSizing = {
|
|
27
|
+
mode: "auto";
|
|
28
|
+
fontSize?: number;
|
|
29
|
+
} | {
|
|
30
|
+
mode: "fixed";
|
|
31
|
+
fontSize?: number;
|
|
32
|
+
columns: number;
|
|
33
|
+
rows: number;
|
|
34
|
+
};
|
|
35
|
+
export type TerminalSizingState = {
|
|
36
|
+
mode: "auto";
|
|
37
|
+
fontSize: number;
|
|
38
|
+
} | {
|
|
39
|
+
mode: "fixed";
|
|
40
|
+
fontSize: number;
|
|
41
|
+
columns: number;
|
|
42
|
+
rows: number;
|
|
43
|
+
};
|
|
44
|
+
export interface TerminalFontFace {
|
|
45
|
+
url: string;
|
|
46
|
+
weight?: string;
|
|
47
|
+
style?: string;
|
|
48
|
+
}
|
|
49
|
+
/** Without faces, a non-generic family must be installed locally in the worker's environment. */
|
|
50
|
+
export interface TerminalFont {
|
|
51
|
+
family: string;
|
|
52
|
+
faces?: readonly TerminalFontFace[];
|
|
53
|
+
}
|
|
54
|
+
export type TerminalBuffer = "main" | "alternate";
|
|
55
|
+
export type SelectionMode = "character" | "word" | "line" | "rectangle";
|
|
56
|
+
export interface SelectionRange {
|
|
57
|
+
row: number;
|
|
58
|
+
startColumn: number;
|
|
59
|
+
endColumn: number;
|
|
60
|
+
}
|
|
61
|
+
export type TerminalViewport = ({
|
|
62
|
+
available: true;
|
|
63
|
+
generation: string;
|
|
64
|
+
buffer: TerminalBuffer;
|
|
65
|
+
totalRows: number;
|
|
66
|
+
liveTop: number;
|
|
67
|
+
top: number;
|
|
68
|
+
requestId: number;
|
|
69
|
+
rowIds: readonly string[];
|
|
70
|
+
revision: number;
|
|
71
|
+
} | {
|
|
72
|
+
available: false;
|
|
73
|
+
generation?: undefined;
|
|
74
|
+
buffer?: undefined;
|
|
75
|
+
totalRows?: undefined;
|
|
76
|
+
liveTop?: undefined;
|
|
77
|
+
top?: undefined;
|
|
78
|
+
requestId?: undefined;
|
|
79
|
+
rowIds?: readonly string[];
|
|
80
|
+
revision?: undefined;
|
|
81
|
+
}) & {
|
|
82
|
+
following: boolean;
|
|
83
|
+
pending: boolean;
|
|
84
|
+
followTail: boolean;
|
|
85
|
+
offset: number;
|
|
86
|
+
};
|
|
87
|
+
export type TerminalSelection = ({
|
|
88
|
+
status: "valid";
|
|
89
|
+
text: string;
|
|
90
|
+
requestId: number;
|
|
91
|
+
revision: number;
|
|
92
|
+
} | {
|
|
93
|
+
status: "none" | "invalidated";
|
|
94
|
+
text: null;
|
|
95
|
+
requestId: number;
|
|
96
|
+
revision: number;
|
|
97
|
+
} | {
|
|
98
|
+
status: "pending";
|
|
99
|
+
text: null;
|
|
100
|
+
requestId: number;
|
|
101
|
+
revision?: undefined;
|
|
102
|
+
} | {
|
|
103
|
+
status: "unavailable";
|
|
104
|
+
text: null;
|
|
105
|
+
requestId?: undefined;
|
|
106
|
+
revision?: undefined;
|
|
107
|
+
}) & {
|
|
108
|
+
mode: SelectionMode;
|
|
109
|
+
ranges: readonly Readonly<SelectionRange>[];
|
|
110
|
+
canExtend?: boolean;
|
|
111
|
+
message: string;
|
|
112
|
+
active: boolean;
|
|
113
|
+
pending: boolean;
|
|
114
|
+
copying: boolean;
|
|
115
|
+
copyError: string;
|
|
116
|
+
};
|
|
117
|
+
export type TerminalStatusLevel = "info" | "ready" | "error";
|
|
118
|
+
/** Metrics are initially empty; individual fields appear as initialization and presentation proceed. */
|
|
119
|
+
export interface TerminalStats {
|
|
120
|
+
revision?: number;
|
|
121
|
+
fullFrames?: number;
|
|
122
|
+
frames?: number;
|
|
123
|
+
presentations?: number;
|
|
124
|
+
changedCells?: number;
|
|
125
|
+
lastChangedCells?: number;
|
|
126
|
+
discardedFrames?: number;
|
|
127
|
+
imageCount?: number;
|
|
128
|
+
textureBytes?: number;
|
|
129
|
+
atlasGlyphs?: number;
|
|
130
|
+
atlasBytes?: number;
|
|
131
|
+
bytesReceived?: number;
|
|
132
|
+
imageUploadBytes?: number;
|
|
133
|
+
imagePayloadBytes?: number;
|
|
134
|
+
gpu?: "initializing" | "ready" | "error" | "stopped";
|
|
135
|
+
connected?: boolean;
|
|
136
|
+
warnings?: readonly string[];
|
|
137
|
+
fps?: number;
|
|
138
|
+
receivedKBps?: number;
|
|
139
|
+
workloadMBps?: number;
|
|
140
|
+
captureMs?: number;
|
|
141
|
+
rendererCpuMs?: number;
|
|
142
|
+
preparationCpuMs?: number;
|
|
143
|
+
workloadBytes?: number;
|
|
144
|
+
outputBatches?: number;
|
|
145
|
+
serverElapsedMs?: number;
|
|
146
|
+
quads?: number;
|
|
147
|
+
drawCalls?: number;
|
|
148
|
+
columns?: number;
|
|
149
|
+
rows?: number;
|
|
150
|
+
mouseTracking?: MouseTrackingMode;
|
|
151
|
+
peer?: TerminalPeer;
|
|
152
|
+
fontFamily?: string;
|
|
153
|
+
rasterScale?: number;
|
|
154
|
+
backingScale?: number;
|
|
155
|
+
backingWidth?: number;
|
|
156
|
+
backingHeight?: number;
|
|
157
|
+
atlasRebuilds?: number;
|
|
158
|
+
glyphUploadBytes?: number;
|
|
159
|
+
instanceBufferBytes?: number;
|
|
160
|
+
}
|
|
161
|
+
export interface InputModifiers {
|
|
162
|
+
ctrl: boolean;
|
|
163
|
+
alt: boolean;
|
|
164
|
+
shift: boolean;
|
|
165
|
+
meta: boolean;
|
|
166
|
+
}
|
|
167
|
+
export type PointerButton = "left" | "middle" | "right";
|
|
168
|
+
/** Input intents contain no browser event. Returning a route controls browser cancellation. */
|
|
169
|
+
export type TerminalInput = ({
|
|
170
|
+
type: "key";
|
|
171
|
+
key: string;
|
|
172
|
+
code: string;
|
|
173
|
+
repeat: boolean;
|
|
174
|
+
} & InputModifiers) | ({
|
|
175
|
+
type: "pointer";
|
|
176
|
+
button: PointerButton;
|
|
177
|
+
point: Readonly<TerminalPoint>;
|
|
178
|
+
} & InputModifiers) | ({
|
|
179
|
+
type: "wheel";
|
|
180
|
+
deltaX: number;
|
|
181
|
+
deltaY: number;
|
|
182
|
+
deltaMode: number;
|
|
183
|
+
point: Readonly<TerminalPoint> | null;
|
|
184
|
+
} & InputModifiers) | {
|
|
185
|
+
type: "paste" | "text";
|
|
186
|
+
text: string;
|
|
187
|
+
};
|
|
188
|
+
export type InputRouteValue = "continue" | "consume" | "application" | "browser";
|
|
189
|
+
export type TerminalActionName = "copySelection" | "pasteClipboard" | "copyOrPaste" | "clearSelection" | "scrollToLive" | "scrollLines";
|
|
190
|
+
export interface CopySelectionOptions {
|
|
191
|
+
clear?: boolean;
|
|
192
|
+
}
|
|
193
|
+
export interface TerminalInputContext {
|
|
194
|
+
readonly terminal: WebTerminalHandle;
|
|
195
|
+
readonly selection: TerminalSelection;
|
|
196
|
+
readonly viewport: TerminalViewport;
|
|
197
|
+
readonly buffer: TerminalBuffer | null;
|
|
198
|
+
readonly mouseCaptured: boolean;
|
|
199
|
+
readonly historical: boolean;
|
|
200
|
+
readonly readOnly: boolean;
|
|
201
|
+
readonly connected: boolean;
|
|
202
|
+
readonly peer: TerminalPeer;
|
|
203
|
+
}
|
|
204
|
+
/** Custom actions validate their own arguments and may complete asynchronously. */
|
|
205
|
+
export type InputActionHandler = (context: TerminalInputContext, args: unknown, input: Readonly<TerminalInput> | undefined) => unknown;
|
|
206
|
+
export type InputDecision = {
|
|
207
|
+
route: InputRouteValue;
|
|
208
|
+
action?: never;
|
|
209
|
+
args?: never;
|
|
210
|
+
} | {
|
|
211
|
+
action: string | InputActionHandler;
|
|
212
|
+
args?: unknown;
|
|
213
|
+
route?: never;
|
|
214
|
+
};
|
|
215
|
+
export type InputInterceptor = (input: Readonly<TerminalInput>, context: TerminalInputContext) => InputRouteValue | InputDecision | undefined;
|
|
216
|
+
export type InputBinding = {
|
|
217
|
+
id: string;
|
|
218
|
+
match: (input: Readonly<TerminalInput>, context: TerminalInputContext) => boolean;
|
|
219
|
+
when?: (context: TerminalInputContext, input: Readonly<TerminalInput>) => boolean;
|
|
220
|
+
remove?: false;
|
|
221
|
+
} & InputDecision;
|
|
222
|
+
export type InputBindingOverride = InputBinding | {
|
|
223
|
+
id: string;
|
|
224
|
+
remove: true;
|
|
225
|
+
};
|
|
226
|
+
export interface InputPolicyOptions {
|
|
227
|
+
inputBindings?: readonly InputBindingOverride[];
|
|
228
|
+
onInput?: InputInterceptor;
|
|
229
|
+
actions?: Readonly<Record<string, InputActionHandler>>;
|
|
230
|
+
}
|
|
231
|
+
/** Built-ins have typed arguments/results; custom names and callbacks own their argument validation. */
|
|
232
|
+
export interface RunTerminalAction {
|
|
233
|
+
(action: "copySelection", args?: CopySelectionOptions, input?: TerminalInput): Promise<string>;
|
|
234
|
+
(action: "pasteClipboard", args?: undefined, input?: TerminalInput): Promise<string>;
|
|
235
|
+
(action: "copyOrPaste", args?: undefined, input?: TerminalInput): Promise<string | undefined>;
|
|
236
|
+
(action: "clearSelection" | "scrollToLive", args?: undefined, input?: TerminalInput): Promise<void>;
|
|
237
|
+
(action: "scrollLines", args: number, input?: TerminalInput): Promise<void>;
|
|
238
|
+
<Name extends string>(action: Name extends TerminalActionName ? never : Name, args?: unknown, input?: TerminalInput): Promise<unknown>;
|
|
239
|
+
(action: InputActionHandler, args?: unknown, input?: TerminalInput): Promise<unknown>;
|
|
240
|
+
}
|
|
241
|
+
export interface SelectionRectangle {
|
|
242
|
+
left: number;
|
|
243
|
+
top: number;
|
|
244
|
+
width: number;
|
|
245
|
+
height: number;
|
|
246
|
+
}
|
|
247
|
+
export interface SelectionUIState {
|
|
248
|
+
readonly selection: Readonly<TerminalSelection>;
|
|
249
|
+
readonly viewport: Readonly<TerminalViewport>;
|
|
250
|
+
readonly geometry: Readonly<TerminalGeometry>;
|
|
251
|
+
readonly canvasSize: Readonly<TerminalSize>;
|
|
252
|
+
readonly connected: boolean;
|
|
253
|
+
readonly readOnly: boolean;
|
|
254
|
+
}
|
|
255
|
+
/** A frozen snapshot; preventDefault() synchronously to replace the built-in Copy button. */
|
|
256
|
+
export interface SelectionUIDetail extends SelectionUIState {
|
|
257
|
+
readonly overlay: HTMLDivElement;
|
|
258
|
+
readonly signal: AbortSignal;
|
|
259
|
+
readonly runAction: RunTerminalAction;
|
|
260
|
+
readonly rects: readonly Readonly<SelectionRectangle>[];
|
|
261
|
+
}
|
|
262
|
+
export type SelectionUIEvent = CustomEvent<SelectionUIDetail>;
|
|
263
|
+
export interface WebTerminalOptions extends InputPolicyOptions {
|
|
264
|
+
url: string | URL;
|
|
265
|
+
/** Optional module-worker entry, resolved against the page URL. Defaults to the bundled worker. */
|
|
266
|
+
workerUrl?: string | URL;
|
|
267
|
+
signal?: AbortSignal;
|
|
268
|
+
scale?: number | "auto";
|
|
269
|
+
font?: TerminalFont;
|
|
270
|
+
sizing?: TerminalSizing;
|
|
271
|
+
label?: string;
|
|
272
|
+
readOnly?: boolean;
|
|
273
|
+
onStatus?: (message: string, level: TerminalStatusLevel) => void;
|
|
274
|
+
onGeometry?: (geometry: TerminalGeometry) => void;
|
|
275
|
+
onSizingChange?: (sizing: TerminalSizingState) => void;
|
|
276
|
+
onRoleChange?: (peer: TerminalPeer) => void;
|
|
277
|
+
onStats?: (stats: TerminalStats, text: string | undefined) => void;
|
|
278
|
+
onViewportChange?: (viewport: TerminalViewport) => void;
|
|
279
|
+
onSelectionChange?: (selection: TerminalSelection) => void;
|
|
280
|
+
onInputError?: (error: Error) => void;
|
|
281
|
+
/** Must return undefined synchronously; async handlers cannot claim default UI ownership. */
|
|
282
|
+
onSelectionUI?: (event: SelectionUIEvent) => undefined;
|
|
283
|
+
}
|
|
284
|
+
/** Owns only the appended element and browser connection, not the server terminal. */
|
|
285
|
+
export interface WebTerminalHandle {
|
|
286
|
+
readonly element: HTMLDivElement;
|
|
287
|
+
readonly geometry: TerminalGeometry;
|
|
288
|
+
readonly peer: TerminalPeer;
|
|
289
|
+
readonly connected: boolean;
|
|
290
|
+
readonly stats: TerminalStats;
|
|
291
|
+
readonly screenText: string;
|
|
292
|
+
readonly sizing: TerminalSizingState;
|
|
293
|
+
readonly inputBindings: InputBinding[];
|
|
294
|
+
readonly inputContext: TerminalInputContext;
|
|
295
|
+
readonly viewport: TerminalViewport;
|
|
296
|
+
readonly selection: TerminalSelection;
|
|
297
|
+
runAction: RunTerminalAction;
|
|
298
|
+
scrollLines(delta: number): void;
|
|
299
|
+
scrollToLive(): void;
|
|
300
|
+
clearSelection(): void;
|
|
301
|
+
refreshSelectionUI(): void;
|
|
302
|
+
copySelection(options?: CopySelectionOptions): Promise<string>;
|
|
303
|
+
paste(text: string): void;
|
|
304
|
+
pasteClipboard(): Promise<string>;
|
|
305
|
+
focus(): void;
|
|
306
|
+
requestPrimary(): void;
|
|
307
|
+
resize(columns: number, rows: number): void;
|
|
308
|
+
setSizing(sizing: TerminalSizing): void;
|
|
309
|
+
resync(): void;
|
|
310
|
+
dispose(): void;
|
|
311
|
+
}
|
|
312
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"","sourcesContent":["/** Logical terminal dimensions, confirmed by the producer rather than reflowed locally. */\nexport interface TerminalGrid { columns: number; rows: number }\nexport interface TerminalSize { width: number; height: number }\nexport interface TerminalPoint { x: number; y: number }\nexport type MouseTrackingMode = 0 | 9 | 1000 | 1002 | 1003;\nexport interface TerminalGeometry extends TerminalGrid {\n cellWidth: number;\n cellHeight: number;\n mouseTracking: MouseTrackingMode;\n}\nexport interface TerminalPeer {\n id: string | null;\n primaryId: string | null;\n isPrimary: boolean;\n}\n/** Font size is an integer from 8 to 32; fixed grids allow 20–300 columns and 10–100 rows. */\nexport type TerminalSizing =\n | { mode: \"auto\"; fontSize?: number }\n | { mode: \"fixed\"; fontSize?: number; columns: number; rows: number };\nexport type TerminalSizingState =\n | { mode: \"auto\"; fontSize: number }\n | { mode: \"fixed\"; fontSize: number; columns: number; rows: number };\nexport interface TerminalFontFace { url: string; weight?: string; style?: string }\n/** Without faces, a non-generic family must be installed locally in the worker's environment. */\nexport interface TerminalFont { family: string; faces?: readonly TerminalFontFace[] }\nexport type TerminalBuffer = \"main\" | \"alternate\";\nexport type SelectionMode = \"character\" | \"word\" | \"line\" | \"rectangle\";\nexport interface SelectionRange { row: number; startColumn: number; endColumn: number }\nexport type TerminalViewport = (\n | { available: true; generation: string; buffer: TerminalBuffer; totalRows: number;\n liveTop: number; top: number; requestId: number; rowIds: readonly string[]; revision: number }\n | { available: false; generation?: undefined; buffer?: undefined; totalRows?: undefined;\n liveTop?: undefined; top?: undefined; requestId?: undefined; rowIds?: readonly string[]; revision?: undefined }\n) & { following: boolean; pending: boolean; followTail: boolean; offset: number };\nexport type TerminalSelection = (\n | { status: \"valid\"; text: string; requestId: number; revision: number }\n | { status: \"none\" | \"invalidated\"; text: null; requestId: number; revision: number }\n | { status: \"pending\"; text: null; requestId: number; revision?: undefined }\n | { status: \"unavailable\"; text: null; requestId?: undefined; revision?: undefined }\n) & {\n mode: SelectionMode;\n ranges: readonly Readonly<SelectionRange>[];\n canExtend?: boolean;\n message: string;\n active: boolean;\n pending: boolean;\n copying: boolean;\n copyError: string;\n};\nexport type TerminalStatusLevel = \"info\" | \"ready\" | \"error\";\n/** Metrics are initially empty; individual fields appear as initialization and presentation proceed. */\nexport interface TerminalStats {\n revision?: number; fullFrames?: number; frames?: number; presentations?: number;\n changedCells?: number; lastChangedCells?: number; discardedFrames?: number;\n imageCount?: number; textureBytes?: number; atlasGlyphs?: number; atlasBytes?: number;\n bytesReceived?: number; imageUploadBytes?: number; imagePayloadBytes?: number;\n gpu?: \"initializing\" | \"ready\" | \"error\" | \"stopped\"; connected?: boolean; warnings?: readonly string[];\n fps?: number; receivedKBps?: number; workloadMBps?: number;\n captureMs?: number; rendererCpuMs?: number; preparationCpuMs?: number;\n workloadBytes?: number; outputBatches?: number; serverElapsedMs?: number;\n quads?: number; drawCalls?: number; columns?: number; rows?: number; mouseTracking?: MouseTrackingMode;\n peer?: TerminalPeer; fontFamily?: string; rasterScale?: number; backingScale?: number;\n backingWidth?: number; backingHeight?: number; atlasRebuilds?: number;\n glyphUploadBytes?: number; instanceBufferBytes?: number;\n}\nexport interface InputModifiers { ctrl: boolean; alt: boolean; shift: boolean; meta: boolean }\nexport type PointerButton = \"left\" | \"middle\" | \"right\";\n/** Input intents contain no browser event. Returning a route controls browser cancellation. */\nexport type TerminalInput =\n | ({ type: \"key\"; key: string; code: string; repeat: boolean } & InputModifiers)\n | ({ type: \"pointer\"; button: PointerButton; point: Readonly<TerminalPoint> } & InputModifiers)\n | ({ type: \"wheel\"; deltaX: number; deltaY: number; deltaMode: number;\n point: Readonly<TerminalPoint> | null } & InputModifiers)\n | { type: \"paste\" | \"text\"; text: string };\nexport type InputRouteValue = \"continue\" | \"consume\" | \"application\" | \"browser\";\nexport type TerminalActionName = \"copySelection\" | \"pasteClipboard\" | \"copyOrPaste\"\n | \"clearSelection\" | \"scrollToLive\" | \"scrollLines\";\nexport interface CopySelectionOptions { clear?: boolean }\nexport interface TerminalInputContext {\n readonly terminal: WebTerminalHandle;\n readonly selection: TerminalSelection;\n readonly viewport: TerminalViewport;\n readonly buffer: TerminalBuffer | null;\n readonly mouseCaptured: boolean;\n readonly historical: boolean;\n readonly readOnly: boolean;\n readonly connected: boolean;\n readonly peer: TerminalPeer;\n}\n/** Custom actions validate their own arguments and may complete asynchronously. */\nexport type InputActionHandler =\n (context: TerminalInputContext, args: unknown, input: Readonly<TerminalInput> | undefined) => unknown;\nexport type InputDecision =\n | { route: InputRouteValue; action?: never; args?: never }\n | { action: string | InputActionHandler; args?: unknown; route?: never };\nexport type InputInterceptor =\n (input: Readonly<TerminalInput>, context: TerminalInputContext) => InputRouteValue | InputDecision | undefined;\nexport type InputBinding = {\n id: string;\n match: (input: Readonly<TerminalInput>, context: TerminalInputContext) => boolean;\n when?: (context: TerminalInputContext, input: Readonly<TerminalInput>) => boolean;\n remove?: false;\n} & InputDecision;\nexport type InputBindingOverride = InputBinding | { id: string; remove: true };\nexport interface InputPolicyOptions {\n inputBindings?: readonly InputBindingOverride[];\n onInput?: InputInterceptor;\n actions?: Readonly<Record<string, InputActionHandler>>;\n}\n/** Built-ins have typed arguments/results; custom names and callbacks own their argument validation. */\nexport interface RunTerminalAction {\n (action: \"copySelection\", args?: CopySelectionOptions, input?: TerminalInput): Promise<string>;\n (action: \"pasteClipboard\", args?: undefined, input?: TerminalInput): Promise<string>;\n (action: \"copyOrPaste\", args?: undefined, input?: TerminalInput): Promise<string | undefined>;\n (action: \"clearSelection\" | \"scrollToLive\", args?: undefined, input?: TerminalInput): Promise<void>;\n (action: \"scrollLines\", args: number, input?: TerminalInput): Promise<void>;\n <Name extends string>(action: Name extends TerminalActionName ? never : Name,\n args?: unknown, input?: TerminalInput): Promise<unknown>;\n (action: InputActionHandler, args?: unknown, input?: TerminalInput): Promise<unknown>;\n}\nexport interface SelectionRectangle { left: number; top: number; width: number; height: number }\nexport interface SelectionUIState {\n readonly selection: Readonly<TerminalSelection>;\n readonly viewport: Readonly<TerminalViewport>;\n readonly geometry: Readonly<TerminalGeometry>;\n readonly canvasSize: Readonly<TerminalSize>;\n readonly connected: boolean;\n readonly readOnly: boolean;\n}\n/** A frozen snapshot; preventDefault() synchronously to replace the built-in Copy button. */\nexport interface SelectionUIDetail extends SelectionUIState {\n readonly overlay: HTMLDivElement;\n readonly signal: AbortSignal;\n readonly runAction: RunTerminalAction;\n readonly rects: readonly Readonly<SelectionRectangle>[];\n}\nexport type SelectionUIEvent = CustomEvent<SelectionUIDetail>;\nexport interface WebTerminalOptions extends InputPolicyOptions {\n url: string | URL;\n /** Optional module-worker entry, resolved against the page URL. Defaults to the bundled worker. */\n workerUrl?: string | URL;\n signal?: AbortSignal;\n scale?: number | \"auto\";\n font?: TerminalFont;\n sizing?: TerminalSizing;\n label?: string;\n readOnly?: boolean;\n onStatus?: (message: string, level: TerminalStatusLevel) => void;\n onGeometry?: (geometry: TerminalGeometry) => void;\n onSizingChange?: (sizing: TerminalSizingState) => void;\n onRoleChange?: (peer: TerminalPeer) => void;\n onStats?: (stats: TerminalStats, text: string | undefined) => void;\n onViewportChange?: (viewport: TerminalViewport) => void;\n onSelectionChange?: (selection: TerminalSelection) => void;\n onInputError?: (error: Error) => void;\n /** Must return undefined synchronously; async handlers cannot claim default UI ownership. */\n onSelectionUI?: (event: SelectionUIEvent) => undefined;\n}\n/** Owns only the appended element and browser connection, not the server terminal. */\nexport interface WebTerminalHandle {\n readonly element: HTMLDivElement;\n readonly geometry: TerminalGeometry;\n readonly peer: TerminalPeer;\n readonly connected: boolean;\n readonly stats: TerminalStats;\n readonly screenText: string;\n readonly sizing: TerminalSizingState;\n readonly inputBindings: InputBinding[];\n readonly inputContext: TerminalInputContext;\n readonly viewport: TerminalViewport;\n readonly selection: TerminalSelection;\n runAction: RunTerminalAction;\n scrollLines(delta: number): void;\n scrollToLive(): void;\n clearSelection(): void;\n refreshSelectionUI(): void;\n copySelection(options?: CopySelectionOptions): Promise<string>;\n paste(text: string): void;\n pasteClipboard(): Promise<string>;\n focus(): void;\n requestPrimary(): void;\n resize(columns: number, rows: number): void;\n setSizing(sizing: TerminalSizing): void;\n resync(): void;\n dispose(): void;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEnD"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export function isRecord(value) {
|
|
2
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
3
|
+
}
|
|
4
|
+
export function errorMessage(error) {
|
|
5
|
+
return isRecord(error) && typeof error.message === "string" ? error.message : String(error);
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC9F,CAAC","sourcesContent":["export function isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport function errorMessage(error: unknown): string {\n return isRecord(error) && typeof error.message === \"string\" ? error.message : String(error);\n}\n"]}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { CopySelectionOptions, InputActionHandler, InputBinding, TerminalActionName, TerminalGeometry, TerminalInput, TerminalInputContext, TerminalPeer, TerminalSelection, TerminalSizing, TerminalSizingState, TerminalStats, TerminalViewport, WebTerminalHandle, WebTerminalOptions } from "./types.js";
|
|
2
|
+
export { InputRoute, TerminalAction, defaultInputBindings } from "./input-policy.js";
|
|
3
|
+
/**
|
|
4
|
+
* First-party HWT1 client. Owns only the element it appends, not the caller's
|
|
5
|
+
* container or the server terminal. The HWT1 wire and this spike API evolve together.
|
|
6
|
+
*/
|
|
7
|
+
export declare class WebTerminal implements WebTerminalHandle {
|
|
8
|
+
#private;
|
|
9
|
+
readonly element: HTMLDivElement;
|
|
10
|
+
/** Resolves after a connected terminal frame is presented. Supply signal to cancel mounting. */
|
|
11
|
+
static mount(container: HTMLElement, options: WebTerminalOptions): Promise<WebTerminal>;
|
|
12
|
+
private constructor();
|
|
13
|
+
get geometry(): TerminalGeometry;
|
|
14
|
+
get peer(): TerminalPeer;
|
|
15
|
+
get connected(): boolean;
|
|
16
|
+
get stats(): TerminalStats;
|
|
17
|
+
get screenText(): string;
|
|
18
|
+
get sizing(): TerminalSizingState;
|
|
19
|
+
get inputBindings(): InputBinding[];
|
|
20
|
+
get viewport(): TerminalViewport;
|
|
21
|
+
get selection(): TerminalSelection;
|
|
22
|
+
scrollLines(delta: number): void;
|
|
23
|
+
scrollToLive(): void;
|
|
24
|
+
clearSelection(): void;
|
|
25
|
+
/** Re-notifies selection UI hosts after an external styling/policy change. */
|
|
26
|
+
refreshSelectionUI(): void;
|
|
27
|
+
copySelection({ clear }?: CopySelectionOptions): Promise<string>;
|
|
28
|
+
get inputContext(): TerminalInputContext;
|
|
29
|
+
/** Named actions are shared by controls and bindings. Custom callbacks receive context, args, and input. */
|
|
30
|
+
runAction(action: "copySelection", args?: CopySelectionOptions, input?: TerminalInput): Promise<string>;
|
|
31
|
+
runAction(action: "pasteClipboard", args?: undefined, input?: TerminalInput): Promise<string>;
|
|
32
|
+
runAction(action: "copyOrPaste", args?: undefined, input?: TerminalInput): Promise<string | undefined>;
|
|
33
|
+
runAction(action: "clearSelection" | "scrollToLive", args?: undefined, input?: TerminalInput): Promise<void>;
|
|
34
|
+
runAction(action: "scrollLines", args: number, input?: TerminalInput): Promise<void>;
|
|
35
|
+
runAction<Name extends string>(action: Name extends TerminalActionName ? never : Name, args?: unknown, input?: TerminalInput): Promise<unknown>;
|
|
36
|
+
runAction(action: InputActionHandler, args?: unknown, input?: TerminalInput): Promise<unknown>;
|
|
37
|
+
/** Sends an explicit paste through the producer's mode-aware input encoder. */
|
|
38
|
+
paste(text: string): void;
|
|
39
|
+
pasteClipboard(): Promise<string>;
|
|
40
|
+
focus(): void;
|
|
41
|
+
/** Request HMP1 primary explicitly; peer notifications confirm the result. */
|
|
42
|
+
requestPrimary(): void;
|
|
43
|
+
/** Request a grid; never reflow locally before the authoritative response. */
|
|
44
|
+
resize(columns: number, rows: number): void;
|
|
45
|
+
/** Change the primary's sizing policy; applied grid dimensions still come from the server. */
|
|
46
|
+
setSizing(sizing: TerminalSizing): void;
|
|
47
|
+
resync(): void;
|
|
48
|
+
/** Detach this view. The server-side shared terminal is not terminated. */
|
|
49
|
+
dispose(): void;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=web-terminal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-terminal.d.ts","sourceRoot":"","sources":["../src/web-terminal.ts"],"names":[],"mappings":"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"}
|