@valyrianjs/terminal 0.1.1 → 0.2.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.md +105 -55
- package/dist/ansi.d.ts +20 -4
- package/dist/ansi.d.ts.map +1 -1
- package/dist/ansi.js +171 -47
- package/dist/ansi.js.map +1 -1
- package/dist/editor-state.d.ts +22 -0
- package/dist/editor-state.d.ts.map +1 -0
- package/dist/editor-state.js +110 -0
- package/dist/editor-state.js.map +1 -0
- package/dist/events.d.ts +1 -4
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js +15 -38
- package/dist/events.js.map +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/keymap.d.ts +7 -0
- package/dist/keymap.d.ts.map +1 -0
- package/dist/keymap.js +133 -0
- package/dist/keymap.js.map +1 -0
- package/dist/layout.d.ts +10 -1
- package/dist/layout.d.ts.map +1 -1
- package/dist/layout.js +97 -7
- package/dist/layout.js.map +1 -1
- package/dist/mouse.d.ts +1 -0
- package/dist/mouse.d.ts.map +1 -1
- package/dist/mouse.js +24 -1
- package/dist/mouse.js.map +1 -1
- package/dist/output-writer.d.ts +9 -0
- package/dist/output-writer.d.ts.map +1 -0
- package/dist/output-writer.js +79 -0
- package/dist/output-writer.js.map +1 -0
- package/dist/paste.d.ts +7 -0
- package/dist/paste.d.ts.map +1 -0
- package/dist/paste.js +18 -0
- package/dist/paste.js.map +1 -0
- package/dist/primitives.d.ts +15 -3
- package/dist/primitives.d.ts.map +1 -1
- package/dist/primitives.js +9 -1
- package/dist/primitives.js.map +1 -1
- package/dist/render.d.ts +9 -4
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +923 -68
- package/dist/render.js.map +1 -1
- package/dist/runtime.d.ts +29 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +209 -0
- package/dist/runtime.js.map +1 -0
- package/dist/scheduler.d.ts +8 -0
- package/dist/scheduler.d.ts.map +1 -0
- package/dist/scheduler.js +24 -0
- package/dist/scheduler.js.map +1 -0
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +858 -199
- package/dist/session.js.map +1 -1
- package/dist/stream-log.d.ts +40 -0
- package/dist/stream-log.d.ts.map +1 -0
- package/dist/stream-log.js +73 -0
- package/dist/stream-log.js.map +1 -0
- package/dist/text.d.ts +3 -0
- package/dist/text.d.ts.map +1 -0
- package/dist/text.js +19 -0
- package/dist/text.js.map +1 -0
- package/dist/theme.d.ts +7 -0
- package/dist/theme.d.ts.map +1 -0
- package/dist/theme.js +254 -0
- package/dist/theme.js.map +1 -0
- package/dist/tree.d.ts +2 -0
- package/dist/tree.d.ts.map +1 -1
- package/dist/tree.js +42 -1
- package/dist/tree.js.map +1 -1
- package/dist/types.d.ts +203 -24
- package/dist/types.d.ts.map +1 -1
- package/docs/api-reference.md +313 -142
- package/docs/assets/quick-note.svg +13 -0
- package/docs/cookbook.md +296 -201
- package/docs/core-concepts.md +143 -55
- package/docs/getting-started.md +209 -90
- package/docs/interaction-model.md +98 -54
- package/docs/primitive-gallery.md +370 -0
- package/docs/session-runtime.md +131 -362
- package/docs/valyrian-modules.md +3196 -0
- package/llms-full.txt +5377 -0
- package/package.json +21 -8
- package/src/ansi.ts +269 -0
- package/src/clipboard.ts +76 -0
- package/src/editor-state.ts +162 -0
- package/src/events.ts +163 -0
- package/src/index.ts +95 -0
- package/src/keymap.ts +151 -0
- package/src/layout.ts +282 -0
- package/src/mouse.ts +68 -0
- package/src/output-writer.ts +93 -0
- package/src/paste.ts +23 -0
- package/src/primitives.ts +55 -0
- package/src/render.ts +1204 -0
- package/src/runtime.ts +267 -0
- package/src/scheduler.ts +33 -0
- package/src/session.ts +1408 -0
- package/src/stream-log.ts +96 -0
- package/src/text.ts +20 -0
- package/src/theme.ts +263 -0
- package/src/tree.ts +169 -0
- package/src/types.ts +541 -0
- package/tsconfig.json +4 -7
- package/docs/local-demo.md +0 -28
package/src/types.ts
ADDED
|
@@ -0,0 +1,541 @@
|
|
|
1
|
+
export type AnyProps = Record<string, any> | null | undefined;
|
|
2
|
+
|
|
3
|
+
export type TerminalPrimitiveTag =
|
|
4
|
+
| "terminal-screen"
|
|
5
|
+
| "terminal-box"
|
|
6
|
+
| "terminal-view"
|
|
7
|
+
| "terminal-pane"
|
|
8
|
+
| "terminal-split"
|
|
9
|
+
| "terminal-fixed"
|
|
10
|
+
| "terminal-overlay"
|
|
11
|
+
| "terminal-focus-scope"
|
|
12
|
+
| "terminal-text"
|
|
13
|
+
| "terminal-input"
|
|
14
|
+
| "terminal-editor"
|
|
15
|
+
| "terminal-button"
|
|
16
|
+
| "terminal-scroll"
|
|
17
|
+
| "terminal-log-view"
|
|
18
|
+
| "terminal-list"
|
|
19
|
+
| "terminal-table"
|
|
20
|
+
| "terminal-row"
|
|
21
|
+
| "terminal-td";
|
|
22
|
+
|
|
23
|
+
export type TerminalCommandScope = "global" | "focus" | "input" | "editor" | "button" | "list" | "scroll";
|
|
24
|
+
|
|
25
|
+
export type TerminalCommandId =
|
|
26
|
+
| "focus.next"
|
|
27
|
+
| "focus.prev"
|
|
28
|
+
| "button.press"
|
|
29
|
+
| "list.prev"
|
|
30
|
+
| "list.next"
|
|
31
|
+
| "list.press"
|
|
32
|
+
| "scroll.up"
|
|
33
|
+
| "scroll.down"
|
|
34
|
+
| "input.submit"
|
|
35
|
+
| "input.backspace"
|
|
36
|
+
| "input.delete"
|
|
37
|
+
| "input.cursorLeft"
|
|
38
|
+
| "input.cursorRight"
|
|
39
|
+
| "input.selectLeft"
|
|
40
|
+
| "input.selectRight"
|
|
41
|
+
| "input.wordLeft"
|
|
42
|
+
| "input.wordRight"
|
|
43
|
+
| "input.home"
|
|
44
|
+
| "input.end"
|
|
45
|
+
| "input.selectAll"
|
|
46
|
+
| "input.copy"
|
|
47
|
+
| "input.paste"
|
|
48
|
+
| "input.pasteText"
|
|
49
|
+
| "input.cut"
|
|
50
|
+
| "input.insertText"
|
|
51
|
+
| "editor.submit"
|
|
52
|
+
| "editor.cancel"
|
|
53
|
+
| "editor.newline"
|
|
54
|
+
| "editor.backspace"
|
|
55
|
+
| "editor.delete"
|
|
56
|
+
| "editor.cursorLeft"
|
|
57
|
+
| "editor.cursorRight"
|
|
58
|
+
| "editor.cursorUp"
|
|
59
|
+
| "editor.cursorDown"
|
|
60
|
+
| "editor.home"
|
|
61
|
+
| "editor.end"
|
|
62
|
+
| "editor.paste"
|
|
63
|
+
| "editor.pasteText"
|
|
64
|
+
| "editor.insertText"
|
|
65
|
+
| (string & {});
|
|
66
|
+
|
|
67
|
+
export interface TerminalCommand {
|
|
68
|
+
id: TerminalCommandId;
|
|
69
|
+
text?: string;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export interface TerminalCommandContext {
|
|
73
|
+
key: string;
|
|
74
|
+
focusedId?: string;
|
|
75
|
+
focusedTag?: TerminalPrimitiveTag;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export interface TerminalKeyBindingCondition {
|
|
79
|
+
focusedId?: string;
|
|
80
|
+
focusedTag?: TerminalPrimitiveTag;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export interface TerminalKeyBinding {
|
|
84
|
+
key: string;
|
|
85
|
+
command: TerminalCommand;
|
|
86
|
+
scope?: TerminalCommandScope;
|
|
87
|
+
when?: TerminalKeyBindingCondition;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export interface TerminalKeymapOptions {
|
|
91
|
+
bindings?: TerminalKeyBinding[];
|
|
92
|
+
onCommand?(command: TerminalCommand, context: TerminalCommandContext): boolean | void;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export interface VnodeLike {
|
|
96
|
+
tag: any;
|
|
97
|
+
props: AnyProps;
|
|
98
|
+
children: any[];
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export interface TerminalTextNode {
|
|
102
|
+
type: "text";
|
|
103
|
+
value: string;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export interface TerminalElementNode {
|
|
107
|
+
type: "element";
|
|
108
|
+
tag: TerminalPrimitiveTag;
|
|
109
|
+
props: Record<string, any>;
|
|
110
|
+
children: TerminalNode[];
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
export type TerminalNode = TerminalTextNode | TerminalElementNode;
|
|
114
|
+
|
|
115
|
+
export interface TerminalFocusNode extends TerminalElementNode {
|
|
116
|
+
props: Record<string, any> & { id?: string };
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
export interface TerminalHitbox {
|
|
120
|
+
id: string;
|
|
121
|
+
tag: TerminalPrimitiveTag;
|
|
122
|
+
x1: number;
|
|
123
|
+
x2: number;
|
|
124
|
+
y1: number;
|
|
125
|
+
y2: number;
|
|
126
|
+
textStartX?: number;
|
|
127
|
+
textLength?: number;
|
|
128
|
+
itemOffset?: number;
|
|
129
|
+
pointerLayer?: number;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
export interface CursorPosition {
|
|
133
|
+
x: number;
|
|
134
|
+
y: number;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
export interface TerminalSelectionRange {
|
|
138
|
+
x1: number;
|
|
139
|
+
x2: number;
|
|
140
|
+
y: number;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
export type TerminalSemanticStyleKind =
|
|
144
|
+
| "selection"
|
|
145
|
+
| "focus"
|
|
146
|
+
| "highlight"
|
|
147
|
+
| "current-row"
|
|
148
|
+
| "hover"
|
|
149
|
+
| "disabled"
|
|
150
|
+
| "error"
|
|
151
|
+
| "warning"
|
|
152
|
+
| "success"
|
|
153
|
+
| "muted";
|
|
154
|
+
|
|
155
|
+
export interface TerminalStyleToken {
|
|
156
|
+
color?: TerminalColor;
|
|
157
|
+
background?: TerminalColor;
|
|
158
|
+
style?: TerminalStyleDefinition;
|
|
159
|
+
ansiOpen?: string;
|
|
160
|
+
ansiClose?: string;
|
|
161
|
+
plainPrefix?: string;
|
|
162
|
+
plainSuffix?: string;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
export type TerminalVisualState =
|
|
166
|
+
| "focus" | "hover" | "disabled" | "loading"
|
|
167
|
+
| "pressed" | "checked" | "unchecked" | "indeterminate"
|
|
168
|
+
| "selected" | "current" | "expanded" | "collapsed"
|
|
169
|
+
| "invalid" | "valid" | "readonly" | "placeholder" | "selection" | "editing" | "submitted"
|
|
170
|
+
| "empty" | "error" | "warning" | "success" | "muted"
|
|
171
|
+
| "dragging" | "dropTarget" | "capturing";
|
|
172
|
+
|
|
173
|
+
export type TerminalColor = string;
|
|
174
|
+
export type TerminalStyleReference = string;
|
|
175
|
+
export type TerminalSpacing = number | { x?: number; y?: number; top?: number; right?: number; bottom?: number; left?: number };
|
|
176
|
+
export type TerminalBorderStyle = "solid" | "dotted" | "double" | string;
|
|
177
|
+
export type TerminalBorder = boolean | TerminalBorderStyle | {
|
|
178
|
+
top?: boolean;
|
|
179
|
+
right?: boolean;
|
|
180
|
+
bottom?: boolean;
|
|
181
|
+
left?: boolean;
|
|
182
|
+
style?: TerminalBorderStyle;
|
|
183
|
+
color?: TerminalColor;
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
export interface TerminalStyleDefinition {
|
|
187
|
+
color?: TerminalColor;
|
|
188
|
+
background?: TerminalColor;
|
|
189
|
+
border?: TerminalBorder;
|
|
190
|
+
padding?: TerminalSpacing;
|
|
191
|
+
plainPrefix?: string;
|
|
192
|
+
plainSuffix?: string;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
export type TerminalStyleRecipeKey = keyof TerminalStyleDefinition;
|
|
196
|
+
export type TerminalStyleTree = {
|
|
197
|
+
[key: string]: TerminalStyleDefinition[TerminalStyleRecipeKey] | TerminalStyleTree | undefined;
|
|
198
|
+
};
|
|
199
|
+
export type TerminalStyleValue = TerminalStyleReference | TerminalStyleDefinition;
|
|
200
|
+
export type TerminalStateStyles = Partial<Record<TerminalVisualState, TerminalStyleValue>>;
|
|
201
|
+
export interface TerminalStyleProps {
|
|
202
|
+
style?: TerminalStyleValue;
|
|
203
|
+
styles?: TerminalStateStyles;
|
|
204
|
+
state?: TerminalVisualState | TerminalVisualState[];
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
export interface TerminalTheme {
|
|
208
|
+
styles?: TerminalStyleTree;
|
|
209
|
+
spans?: Partial<Record<TerminalSemanticStyleKind | (string & {}), TerminalStyleToken>>;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
export interface TerminalStyleSpan extends TerminalSelectionRange {
|
|
213
|
+
kind: TerminalSemanticStyleKind | (string & {});
|
|
214
|
+
style?: TerminalStyleDefinition;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
export interface TerminalFrame {
|
|
218
|
+
lines: string[];
|
|
219
|
+
hitboxes: TerminalHitbox[];
|
|
220
|
+
cursor: CursorPosition | null;
|
|
221
|
+
spans: TerminalStyleSpan[];
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
export interface TerminalSize {
|
|
225
|
+
cols: number;
|
|
226
|
+
rows: number;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
export interface InputInteractionState {
|
|
230
|
+
cursor: number;
|
|
231
|
+
anchor: number;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
export interface TerminalClipboardAdapter {
|
|
235
|
+
readText?(): string | undefined;
|
|
236
|
+
writeText?(value: string): void;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
export interface TerminalFocusableProps {
|
|
240
|
+
id?: string;
|
|
241
|
+
focusable?: boolean;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
export interface TerminalPointerCaptureProps {
|
|
245
|
+
pointerCapture?: boolean;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
export interface TerminalDirectiveProps {
|
|
249
|
+
"v-for"?: any[];
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
export interface TerminalLayoutProps extends TerminalFocusableProps, TerminalStyleProps {
|
|
253
|
+
direction?: "row" | "column";
|
|
254
|
+
gap?: number;
|
|
255
|
+
padding?: TerminalSpacing;
|
|
256
|
+
width?: number;
|
|
257
|
+
height?: number;
|
|
258
|
+
fill?: boolean;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
export interface TerminalEventPayloadBase {
|
|
262
|
+
id: string;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
export interface TerminalValueEventPayloadBase<T = string> extends TerminalEventPayloadBase {
|
|
266
|
+
value: T;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
export interface TerminalInputChangeEventPayload extends TerminalValueEventPayloadBase<string> {
|
|
270
|
+
type: "change" | "input";
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
export interface TerminalInputSubmitEventPayload extends TerminalValueEventPayloadBase<string> {
|
|
274
|
+
type: "submit";
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
export interface TerminalEditorChangeEventPayload extends TerminalValueEventPayloadBase<string> {
|
|
278
|
+
type: "change" | "input";
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
export interface TerminalEditorSubmitEventPayload extends TerminalValueEventPayloadBase<string> {
|
|
282
|
+
type: "submit";
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
export interface TerminalEditorCancelEventPayload extends TerminalValueEventPayloadBase<string> {
|
|
286
|
+
type: "cancel";
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
export interface TerminalButtonPressEventPayload extends TerminalEventPayloadBase {
|
|
290
|
+
type: "press" | "doublepress" | "contextpress";
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
export interface TerminalListChangeEventPayload<T = any> extends TerminalValueEventPayloadBase<T> {
|
|
294
|
+
type: "change";
|
|
295
|
+
index: number;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
export interface TerminalListPressEventPayload<T = any> extends TerminalValueEventPayloadBase<T> {
|
|
299
|
+
type: "press" | "doublepress" | "contextpress";
|
|
300
|
+
index: number;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
export type TerminalChangeEventPayload =
|
|
304
|
+
| TerminalInputChangeEventPayload
|
|
305
|
+
| TerminalEditorChangeEventPayload
|
|
306
|
+
| TerminalListChangeEventPayload<any>;
|
|
307
|
+
|
|
308
|
+
export type TerminalPressEventPayload = TerminalButtonPressEventPayload | TerminalListPressEventPayload<any>;
|
|
309
|
+
|
|
310
|
+
export interface TerminalInputContextPressEventPayload extends TerminalValueEventPayloadBase<string>, TerminalPointerCoordinates {
|
|
311
|
+
type: "contextpress";
|
|
312
|
+
cursor: number;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
export interface TerminalScrollContextPressEventPayload extends TerminalRowPointerEventPayloadBase {
|
|
316
|
+
type: "contextpress";
|
|
317
|
+
value: string;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
export type TerminalMouseEventType = "hover" | "rowenter" | "rowleave";
|
|
321
|
+
|
|
322
|
+
export type TerminalPointerSource = "press" | "drag" | "release";
|
|
323
|
+
|
|
324
|
+
export interface TerminalPointerCoordinates {
|
|
325
|
+
x: number | null;
|
|
326
|
+
y: number | null;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
export interface TerminalRowPointerEventPayloadBase extends TerminalPointerCoordinates {
|
|
330
|
+
id: string;
|
|
331
|
+
row: number;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
export interface TerminalListPointerEventPayload<T = any> extends TerminalRowPointerEventPayloadBase {
|
|
335
|
+
type: TerminalMouseEventType;
|
|
336
|
+
index: number;
|
|
337
|
+
value: T;
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
export interface TerminalScrollPointerEventPayload extends TerminalRowPointerEventPayloadBase {
|
|
341
|
+
type: TerminalMouseEventType;
|
|
342
|
+
value: string;
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
export type TerminalRowPointerEventPayload = TerminalListPointerEventPayload<any> | TerminalScrollPointerEventPayload;
|
|
346
|
+
|
|
347
|
+
export interface TerminalCaptureEventPayload extends TerminalPointerCoordinates {
|
|
348
|
+
type: "capturestart" | "captureend";
|
|
349
|
+
id: string;
|
|
350
|
+
source: TerminalPointerSource;
|
|
351
|
+
row: number | null;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
export interface TerminalInputProps extends TerminalFocusableProps, TerminalStyleProps {
|
|
355
|
+
value?: string;
|
|
356
|
+
placeholder?: string;
|
|
357
|
+
onchange?(event: TerminalInputChangeEventPayload): void;
|
|
358
|
+
oninput?(event: TerminalInputChangeEventPayload): void;
|
|
359
|
+
onsubmit?(event: TerminalInputSubmitEventPayload): void;
|
|
360
|
+
oncontextpress?(event: TerminalInputContextPressEventPayload): void;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
export interface TerminalEditorProps extends TerminalFocusableProps, TerminalStyleProps {
|
|
364
|
+
value?: string;
|
|
365
|
+
placeholder?: string;
|
|
366
|
+
height?: number;
|
|
367
|
+
onchange?(event: TerminalEditorChangeEventPayload): void;
|
|
368
|
+
oninput?(event: TerminalEditorChangeEventPayload): void;
|
|
369
|
+
onsubmit?(event: TerminalEditorSubmitEventPayload): void;
|
|
370
|
+
oncancel?(event: TerminalEditorCancelEventPayload): void;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
export interface TerminalButtonProps extends TerminalFocusableProps, TerminalStyleProps {
|
|
374
|
+
label?: string;
|
|
375
|
+
onpress?(event: TerminalButtonPressEventPayload): void;
|
|
376
|
+
ondoublepress?(event: TerminalButtonPressEventPayload): void;
|
|
377
|
+
oncontextpress?(event: TerminalButtonPressEventPayload): void;
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
export interface TerminalListProps<T = any> extends TerminalFocusableProps, TerminalPointerCaptureProps, TerminalStyleProps {
|
|
381
|
+
items?: readonly T[];
|
|
382
|
+
virtualized?: boolean;
|
|
383
|
+
itemHeight?: 1;
|
|
384
|
+
overscan?: number;
|
|
385
|
+
renderItem?(item: T, index: number): string;
|
|
386
|
+
onchange?(event: TerminalListChangeEventPayload<T>): void;
|
|
387
|
+
onpress?(event: TerminalListPressEventPayload<T>): void;
|
|
388
|
+
ondoublepress?(event: TerminalListPressEventPayload<T>): void;
|
|
389
|
+
oncontextpress?(event: TerminalListPressEventPayload<T>): void;
|
|
390
|
+
onhover?(event: TerminalListPointerEventPayload<T>): void;
|
|
391
|
+
onrowenter?(event: TerminalListPointerEventPayload<T>): void;
|
|
392
|
+
onrowleave?(event: TerminalListPointerEventPayload<T>): void;
|
|
393
|
+
oncapturestart?(event: TerminalCaptureEventPayload): void;
|
|
394
|
+
oncaptureend?(event: TerminalCaptureEventPayload): void;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
export interface TerminalScrollViewProps extends TerminalLayoutProps, TerminalPointerCaptureProps {
|
|
398
|
+
highlightRows?: number[];
|
|
399
|
+
onhover?(event: TerminalScrollPointerEventPayload): void;
|
|
400
|
+
onrowenter?(event: TerminalScrollPointerEventPayload): void;
|
|
401
|
+
onrowleave?(event: TerminalScrollPointerEventPayload): void;
|
|
402
|
+
oncontextpress?(event: TerminalScrollContextPressEventPayload): void;
|
|
403
|
+
oncapturestart?(event: TerminalCaptureEventPayload): void;
|
|
404
|
+
oncaptureend?(event: TerminalCaptureEventPayload): void;
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
export interface TerminalLogViewEntry {
|
|
408
|
+
id: string;
|
|
409
|
+
content: string;
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
export interface TerminalLogViewProps extends TerminalLayoutProps {
|
|
413
|
+
entries?: readonly TerminalLogViewEntry[];
|
|
414
|
+
followTail?: boolean;
|
|
415
|
+
emptyText?: string;
|
|
416
|
+
renderEntry?(entry: TerminalLogViewEntry, index: number): string;
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
export interface TerminalScreenProps extends TerminalFocusableProps {
|
|
420
|
+
title?: string;
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
export interface TerminalBoxProps extends TerminalLayoutProps {}
|
|
424
|
+
|
|
425
|
+
export interface TerminalViewProps extends TerminalLayoutProps {
|
|
426
|
+
role?: string;
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
export interface TerminalPaneProps extends TerminalLayoutProps {}
|
|
430
|
+
|
|
431
|
+
export type TerminalSplitSize = number | `${number}%` | `${number}fr`;
|
|
432
|
+
export interface TerminalSplitBreakpoint {
|
|
433
|
+
maxCols?: number;
|
|
434
|
+
maxRows?: number;
|
|
435
|
+
direction?: "row" | "column";
|
|
436
|
+
sizes?: TerminalSplitSize[];
|
|
437
|
+
gap?: number;
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
export interface TerminalSplitProps extends TerminalFocusableProps {
|
|
441
|
+
direction?: "row" | "column";
|
|
442
|
+
width?: number;
|
|
443
|
+
height?: number;
|
|
444
|
+
fill?: boolean;
|
|
445
|
+
sizes?: TerminalSplitSize[];
|
|
446
|
+
breakpoints?: TerminalSplitBreakpoint[];
|
|
447
|
+
gap?: number;
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
export interface TerminalFixedProps {
|
|
451
|
+
position: "top" | "bottom" | "left" | "right";
|
|
452
|
+
size: number;
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
export type TerminalOverlayMarginValue = number | `${number}%`;
|
|
456
|
+
|
|
457
|
+
export interface TerminalOverlayMarginAxes {
|
|
458
|
+
x: TerminalOverlayMarginValue;
|
|
459
|
+
y: TerminalOverlayMarginValue;
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
export interface TerminalOverlayProps extends TerminalFocusableProps, TerminalStyleProps {
|
|
463
|
+
margin: TerminalOverlayMarginValue | TerminalOverlayMarginAxes;
|
|
464
|
+
trapFocus?: boolean;
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
export interface TerminalFocusScopeProps {
|
|
468
|
+
active?: boolean;
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
export interface TerminalTextProps extends TerminalStyleProps {
|
|
472
|
+
value?: any;
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
export interface TerminalTableProps extends TerminalDirectiveProps {}
|
|
476
|
+
|
|
477
|
+
export interface TerminalRowProps {
|
|
478
|
+
separator?: string;
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
export interface TerminalTdProps extends TerminalStyleProps {
|
|
482
|
+
padding?: TerminalSpacing;
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
export interface TerminalSession {
|
|
486
|
+
size(): TerminalSize;
|
|
487
|
+
resize(cols: number, rows: number): void;
|
|
488
|
+
update(): string;
|
|
489
|
+
output(): string;
|
|
490
|
+
ansiOutput(): string;
|
|
491
|
+
tree(): TerminalNode[];
|
|
492
|
+
focus(id: string): boolean;
|
|
493
|
+
focusAt(x: number, y: number): boolean;
|
|
494
|
+
focusNext(): boolean;
|
|
495
|
+
focusPrev(): boolean;
|
|
496
|
+
dispatchKey(key: string): string;
|
|
497
|
+
click(id?: string): string;
|
|
498
|
+
clickAt(x: number, y: number): string;
|
|
499
|
+
clipboard(): string;
|
|
500
|
+
setClipboard(value: string): string;
|
|
501
|
+
selectAll(): string;
|
|
502
|
+
destroy(): void;
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
export type TerminalRuntime = "app" | "headless";
|
|
506
|
+
|
|
507
|
+
export interface TerminalMountOptions {
|
|
508
|
+
runtime?: TerminalRuntime;
|
|
509
|
+
cols?: number;
|
|
510
|
+
rows?: number;
|
|
511
|
+
theme?: TerminalTheme;
|
|
512
|
+
keymap?: TerminalKeymapOptions;
|
|
513
|
+
alternateScreen?: boolean;
|
|
514
|
+
hideCursor?: boolean;
|
|
515
|
+
restoreOnDestroy?: boolean;
|
|
516
|
+
clipboard?: TerminalClipboardAdapter | false;
|
|
517
|
+
stdin?: {
|
|
518
|
+
isTTY?: boolean;
|
|
519
|
+
on(event: "data", listener: (chunk: string | Uint8Array) => void): any;
|
|
520
|
+
off?(event: "data", listener: (chunk: string | Uint8Array) => void): any;
|
|
521
|
+
removeListener?(event: "data", listener: (chunk: string | Uint8Array) => void): any;
|
|
522
|
+
setRawMode?(value: boolean): void;
|
|
523
|
+
resume?(): void;
|
|
524
|
+
pause?(): void;
|
|
525
|
+
};
|
|
526
|
+
stdout?: TerminalOutputStream;
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
export interface TerminalOutputStream {
|
|
530
|
+
isTTY?: boolean;
|
|
531
|
+
columns?: number;
|
|
532
|
+
rows?: number;
|
|
533
|
+
write(chunk: string): any;
|
|
534
|
+
on?(event: "drain" | "resize", listener: () => void): any;
|
|
535
|
+
off?(event: "drain" | "resize", listener: () => void): any;
|
|
536
|
+
removeListener?(event: "drain" | "resize", listener: () => void): any;
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
export type ParsedTerminalInput =
|
|
540
|
+
| { type: "key"; key: string }
|
|
541
|
+
| { type: "mouse"; x: number; y: number; button: number; action: "press" | "release" | "drag" | "wheel-up" | "wheel-down" };
|
package/tsconfig.json
CHANGED
|
@@ -6,20 +6,17 @@
|
|
|
6
6
|
"moduleResolution": "NodeNext",
|
|
7
7
|
"noEmit": true,
|
|
8
8
|
"moduleDetection": "force",
|
|
9
|
-
"jsx": "react",
|
|
10
|
-
"
|
|
11
|
-
"jsxFragmentFactory": "v.fragment",
|
|
9
|
+
"jsx": "react-jsx",
|
|
10
|
+
"jsxImportSource": "valyrian.js",
|
|
12
11
|
"allowJs": true,
|
|
13
12
|
"esModuleInterop": true,
|
|
14
13
|
"strict": true,
|
|
15
14
|
"forceConsistentCasingInFileNames": true,
|
|
16
15
|
"skipLibCheck": true,
|
|
17
16
|
"types": ["bun-types", "node"],
|
|
18
|
-
"downlevelIteration": true,
|
|
19
17
|
"allowSyntheticDefaultImports": true,
|
|
20
18
|
"allowImportingTsExtensions": true,
|
|
21
|
-
"resolveJsonModule": true
|
|
22
|
-
"baseUrl": "."
|
|
19
|
+
"resolveJsonModule": true
|
|
23
20
|
},
|
|
24
|
-
"include": ["src", "test", "examples"]
|
|
21
|
+
"include": ["src", "test", "examples", "scripts"]
|
|
25
22
|
}
|
package/docs/local-demo.md
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
# Local Demo
|
|
2
|
-
|
|
3
|
-
`examples/` exists only to support local development. It is not part of the package published to npm, it does not appear in `exports`, and `valyrianjs-terminal` does not publish a CLI.
|
|
4
|
-
|
|
5
|
-
## Files
|
|
6
|
-
|
|
7
|
-
- `examples/demo.tsx`: defines `createDemoState()` and `DemoApp`; validates primitive composition (`Screen`, `Box`, `View`, `Text`, `Input`, `Button`, `List`, `ScrollView`, `Table`, `Row`, `Td`) and basic event payloads.
|
|
8
|
-
- `examples/basic.tsx`: validates the minimum path for using `renderTerminal()` in snapshot mode and `mountTerminal()` with local `stdin`/`stdout`.
|
|
9
|
-
- `examples/cli.tsx`: validates the local launcher with `--help`, `--snapshot`, initial focus, exit via `Esc` or `Ctrl+C`, and ANSI cleanup on close.
|
|
10
|
-
|
|
11
|
-
## Commands
|
|
12
|
-
|
|
13
|
-
```bash
|
|
14
|
-
bun run examples/basic.tsx
|
|
15
|
-
bun run examples/basic.tsx --snapshot
|
|
16
|
-
bun run examples/cli.tsx
|
|
17
|
-
bun run examples/cli.tsx --snapshot
|
|
18
|
-
bun run examples/cli.tsx --help
|
|
19
|
-
bun run test
|
|
20
|
-
bun run typecheck
|
|
21
|
-
bun run build
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
## Scope
|
|
25
|
-
|
|
26
|
-
- `--snapshot` prints the example UI as plain text.
|
|
27
|
-
- without `--snapshot`, the examples mount a local session connected to `process.stdin` and `process.stdout`.
|
|
28
|
-
- these files are not a distributed interface for package consumers; they are manual fixtures for validating the adapter on a local machine.
|