@valyrianjs/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.
Files changed (55) hide show
  1. package/README.md +71 -0
  2. package/dist/ansi.d.ts +6 -0
  3. package/dist/ansi.d.ts.map +1 -0
  4. package/dist/ansi.js +105 -0
  5. package/dist/ansi.js.map +1 -0
  6. package/dist/clipboard.d.ts +3 -0
  7. package/dist/clipboard.d.ts.map +1 -0
  8. package/dist/clipboard.js +71 -0
  9. package/dist/clipboard.js.map +1 -0
  10. package/dist/events.d.ts +62 -0
  11. package/dist/events.d.ts.map +1 -0
  12. package/dist/events.js +189 -0
  13. package/dist/events.js.map +1 -0
  14. package/dist/index.d.ts +5 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +4 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/layout.d.ts +16 -0
  19. package/dist/layout.d.ts.map +1 -0
  20. package/dist/layout.js +153 -0
  21. package/dist/layout.js.map +1 -0
  22. package/dist/mouse.d.ts +5 -0
  23. package/dist/mouse.d.ts.map +1 -0
  24. package/dist/mouse.js +34 -0
  25. package/dist/mouse.js.map +1 -0
  26. package/dist/primitives.d.ts +15 -0
  27. package/dist/primitives.d.ts.map +1 -0
  28. package/dist/primitives.js +18 -0
  29. package/dist/primitives.js.map +1 -0
  30. package/dist/render.d.ts +5 -0
  31. package/dist/render.d.ts.map +1 -0
  32. package/dist/render.js +230 -0
  33. package/dist/render.js.map +1 -0
  34. package/dist/session.d.ts +3 -0
  35. package/dist/session.d.ts.map +1 -0
  36. package/dist/session.js +599 -0
  37. package/dist/session.js.map +1 -0
  38. package/dist/tree.d.ts +9 -0
  39. package/dist/tree.d.ts.map +1 -0
  40. package/dist/tree.js +103 -0
  41. package/dist/tree.js.map +1 -0
  42. package/dist/types.d.ts +224 -0
  43. package/dist/types.d.ts.map +1 -0
  44. package/dist/types.js +2 -0
  45. package/dist/types.js.map +1 -0
  46. package/docs/api-reference.md +273 -0
  47. package/docs/cookbook.md +286 -0
  48. package/docs/core-concepts.md +93 -0
  49. package/docs/getting-started.md +148 -0
  50. package/docs/interaction-model.md +115 -0
  51. package/docs/local-demo.md +28 -0
  52. package/docs/session-runtime.md +451 -0
  53. package/package.json +44 -0
  54. package/tsconfig.build.json +15 -0
  55. package/tsconfig.json +25 -0
package/dist/tree.js ADDED
@@ -0,0 +1,103 @@
1
+ function isVnodeLike(value) {
2
+ return Boolean(value && typeof value === "object" && "tag" in value && "children" in value);
3
+ }
4
+ function isPojoComponent(value) {
5
+ return Boolean(value && typeof value === "object" && typeof value.view === "function");
6
+ }
7
+ function normalizeChildren(children) {
8
+ const out = [];
9
+ for (let i = 0; i < children.length; i += 1) {
10
+ out.push(...resolveToTerminalNodes(children[i]));
11
+ }
12
+ return out;
13
+ }
14
+ function resolveComponent(component, props, children) {
15
+ if (isPojoComponent(component)) {
16
+ return component.view.call(component, props, children);
17
+ }
18
+ return component(props, children);
19
+ }
20
+ export function resolveToTerminalNodes(input) {
21
+ if (input == null || input === false || input === true) {
22
+ return [];
23
+ }
24
+ if (Array.isArray(input)) {
25
+ return input.flatMap(resolveToTerminalNodes);
26
+ }
27
+ if (typeof input === "string" || typeof input === "number") {
28
+ return [{ type: "text", value: String(input) }];
29
+ }
30
+ if (isVnodeLike(input)) {
31
+ if (input.props && "v-for" in (input.props || {})) {
32
+ const set = (input.props || {})["v-for"];
33
+ const callback = input.children?.[0];
34
+ if (typeof callback === "function" && Array.isArray(set)) {
35
+ const out = [];
36
+ for (let i = 0; i < set.length; i += 1) {
37
+ out.push(...resolveToTerminalNodes(callback(set[i], i)));
38
+ }
39
+ return out;
40
+ }
41
+ }
42
+ if (typeof input.tag === "function" || isPojoComponent(input.tag)) {
43
+ return resolveToTerminalNodes(resolveComponent(input.tag, input.props || {}, input.children || []));
44
+ }
45
+ return [
46
+ {
47
+ type: "element",
48
+ tag: input.tag,
49
+ props: (input.props || {}),
50
+ children: normalizeChildren(input.children || [])
51
+ }
52
+ ];
53
+ }
54
+ return [{ type: "text", value: String(input) }];
55
+ }
56
+ export function resolveRoot(input) {
57
+ if (typeof input === "function" && !isVnodeLike(input)) {
58
+ return resolveToTerminalNodes(input({}, []));
59
+ }
60
+ return resolveToTerminalNodes(input);
61
+ }
62
+ export function textContent(node) {
63
+ if (node.type === "text") {
64
+ return node.value;
65
+ }
66
+ return node.children.map(textContent).join("");
67
+ }
68
+ export function isFocusable(node) {
69
+ return node.type === "element" && (node.tag === "terminal-input" || node.tag === "terminal-button" || node.tag === "terminal-list" || node.tag === "terminal-scroll" || Boolean(node.props.focusable));
70
+ }
71
+ export function collectFocusableNodes(nodes, out) {
72
+ for (let i = 0; i < nodes.length; i += 1) {
73
+ const node = nodes[i];
74
+ if (isFocusable(node)) {
75
+ out.push(node);
76
+ }
77
+ if (node.type === "element") {
78
+ collectFocusableNodes(node.children, out);
79
+ }
80
+ }
81
+ }
82
+ export function findFocusableById(nodes, id) {
83
+ for (let i = 0; i < nodes.length; i += 1) {
84
+ const node = nodes[i];
85
+ if (isFocusable(node) && node.props.id === id) {
86
+ return node;
87
+ }
88
+ if (node.type === "element") {
89
+ const found = findFocusableById(node.children, id);
90
+ if (found) {
91
+ return found;
92
+ }
93
+ }
94
+ }
95
+ return null;
96
+ }
97
+ export function findFocused(nodes, focusedId) {
98
+ if (!focusedId) {
99
+ return null;
100
+ }
101
+ return findFocusableById(nodes, focusedId);
102
+ }
103
+ //# sourceMappingURL=tree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree.js","sourceRoot":"","sources":["../src/tree.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,224 @@
1
+ export type AnyProps = Record<string, any> | null | undefined;
2
+ export type TerminalPrimitiveTag = "terminal-screen" | "terminal-box" | "terminal-view" | "terminal-text" | "terminal-input" | "terminal-button" | "terminal-scroll" | "terminal-list" | "terminal-table" | "terminal-row" | "terminal-td";
3
+ export interface VnodeLike {
4
+ tag: any;
5
+ props: AnyProps;
6
+ children: any[];
7
+ }
8
+ export interface TerminalTextNode {
9
+ type: "text";
10
+ value: string;
11
+ }
12
+ export interface TerminalElementNode {
13
+ type: "element";
14
+ tag: TerminalPrimitiveTag;
15
+ props: Record<string, any>;
16
+ children: TerminalNode[];
17
+ }
18
+ export type TerminalNode = TerminalTextNode | TerminalElementNode;
19
+ export interface TerminalFocusNode extends TerminalElementNode {
20
+ props: Record<string, any> & {
21
+ id?: string;
22
+ };
23
+ }
24
+ export interface TerminalHitbox {
25
+ id: string;
26
+ tag: TerminalPrimitiveTag;
27
+ x1: number;
28
+ x2: number;
29
+ y1: number;
30
+ y2: number;
31
+ textStartX?: number;
32
+ textLength?: number;
33
+ }
34
+ export interface CursorPosition {
35
+ x: number;
36
+ y: number;
37
+ }
38
+ export interface TerminalSelectionRange {
39
+ x1: number;
40
+ x2: number;
41
+ y: number;
42
+ }
43
+ export interface TerminalStyleSpan extends TerminalSelectionRange {
44
+ kind: "selection" | "focus" | "highlight" | (string & {});
45
+ }
46
+ export interface TerminalFrame {
47
+ lines: string[];
48
+ hitboxes: TerminalHitbox[];
49
+ cursor: CursorPosition | null;
50
+ spans: TerminalStyleSpan[];
51
+ }
52
+ export interface InputInteractionState {
53
+ cursor: number;
54
+ anchor: number;
55
+ }
56
+ export interface TerminalClipboardAdapter {
57
+ readText?(): string | undefined;
58
+ writeText?(value: string): void;
59
+ }
60
+ export interface TerminalFocusableProps {
61
+ id?: string;
62
+ focusable?: boolean;
63
+ }
64
+ export interface TerminalPointerCaptureProps {
65
+ pointerCapture?: boolean;
66
+ }
67
+ export interface TerminalDirectiveProps {
68
+ "v-for"?: any[];
69
+ }
70
+ export interface TerminalLayoutProps extends TerminalFocusableProps {
71
+ direction?: "row" | "column";
72
+ gap?: number;
73
+ padding?: number;
74
+ border?: boolean;
75
+ width?: number;
76
+ height?: number;
77
+ }
78
+ export interface TerminalEventPayloadBase {
79
+ id: string;
80
+ }
81
+ export interface TerminalValueEventPayloadBase<T = string> extends TerminalEventPayloadBase {
82
+ value: T;
83
+ }
84
+ export interface TerminalInputChangeEventPayload extends TerminalValueEventPayloadBase<string> {
85
+ type: "change" | "input";
86
+ }
87
+ export interface TerminalInputSubmitEventPayload extends TerminalValueEventPayloadBase<string> {
88
+ type: "submit";
89
+ }
90
+ export interface TerminalButtonPressEventPayload extends TerminalEventPayloadBase {
91
+ type: "press" | "click";
92
+ }
93
+ export interface TerminalListChangeEventPayload<T = any> extends TerminalValueEventPayloadBase<T> {
94
+ type: "change";
95
+ index: number;
96
+ }
97
+ export interface TerminalListPressEventPayload<T = any> extends TerminalValueEventPayloadBase<T> {
98
+ type: "press";
99
+ index: number;
100
+ }
101
+ export type TerminalChangeEventPayload = TerminalInputChangeEventPayload | TerminalListChangeEventPayload<any>;
102
+ export type TerminalPressEventPayload = TerminalButtonPressEventPayload | TerminalListPressEventPayload<any>;
103
+ export type TerminalMouseEventType = "hover" | "rowenter" | "rowleave";
104
+ export type TerminalPointerSource = "press" | "drag" | "release";
105
+ export interface TerminalPointerCoordinates {
106
+ x: number | null;
107
+ y: number | null;
108
+ }
109
+ export interface TerminalRowPointerEventPayloadBase extends TerminalPointerCoordinates {
110
+ id: string;
111
+ row: number;
112
+ }
113
+ export interface TerminalListPointerEventPayload<T = any> extends TerminalRowPointerEventPayloadBase {
114
+ type: TerminalMouseEventType;
115
+ index: number;
116
+ value: T;
117
+ }
118
+ export interface TerminalScrollPointerEventPayload extends TerminalRowPointerEventPayloadBase {
119
+ type: TerminalMouseEventType;
120
+ value: string;
121
+ }
122
+ export type TerminalRowPointerEventPayload = TerminalListPointerEventPayload<any> | TerminalScrollPointerEventPayload;
123
+ export interface TerminalCaptureEventPayload extends TerminalPointerCoordinates {
124
+ type: "capturestart" | "captureend";
125
+ id: string;
126
+ source: TerminalPointerSource;
127
+ row: number | null;
128
+ }
129
+ export interface TerminalInputProps extends TerminalFocusableProps {
130
+ value?: string;
131
+ placeholder?: string;
132
+ onchange?(event: TerminalInputChangeEventPayload): void;
133
+ oninput?(event: TerminalInputChangeEventPayload): void;
134
+ onsubmit?(event: TerminalInputSubmitEventPayload): void;
135
+ onChangeText?(value: string): void;
136
+ }
137
+ export interface TerminalButtonProps extends TerminalFocusableProps {
138
+ label?: string;
139
+ onpress?(event: TerminalButtonPressEventPayload): void;
140
+ onclick?(event: TerminalButtonPressEventPayload): void;
141
+ action?(event: TerminalButtonPressEventPayload): void;
142
+ onPress?(event: TerminalButtonPressEventPayload): void;
143
+ }
144
+ export interface TerminalListProps<T = any> extends TerminalFocusableProps, TerminalPointerCaptureProps {
145
+ items?: T[];
146
+ renderItem?(item: T, index: number): string;
147
+ onchange?(event: TerminalListChangeEventPayload<T>): void;
148
+ onpress?(event: TerminalListPressEventPayload<T>): void;
149
+ onhover?(event: TerminalListPointerEventPayload<T>): void;
150
+ onrowenter?(event: TerminalListPointerEventPayload<T>): void;
151
+ onrowleave?(event: TerminalListPointerEventPayload<T>): void;
152
+ oncapturestart?(event: TerminalCaptureEventPayload): void;
153
+ oncaptureend?(event: TerminalCaptureEventPayload): void;
154
+ }
155
+ export interface TerminalScrollViewProps extends TerminalLayoutProps, TerminalPointerCaptureProps {
156
+ highlightRows?: number[];
157
+ onhover?(event: TerminalScrollPointerEventPayload): void;
158
+ onrowenter?(event: TerminalScrollPointerEventPayload): void;
159
+ onrowleave?(event: TerminalScrollPointerEventPayload): void;
160
+ oncapturestart?(event: TerminalCaptureEventPayload): void;
161
+ oncaptureend?(event: TerminalCaptureEventPayload): void;
162
+ }
163
+ export interface TerminalScreenProps extends TerminalFocusableProps {
164
+ title?: string;
165
+ }
166
+ export interface TerminalBoxProps extends TerminalLayoutProps {
167
+ }
168
+ export interface TerminalViewProps extends TerminalLayoutProps {
169
+ role?: string;
170
+ }
171
+ export interface TerminalTextProps {
172
+ value?: any;
173
+ }
174
+ export interface TerminalTableProps extends TerminalDirectiveProps {
175
+ }
176
+ export interface TerminalRowProps {
177
+ separator?: string;
178
+ }
179
+ export interface TerminalTdProps {
180
+ padding?: number;
181
+ }
182
+ export interface TerminalSession {
183
+ update(): string;
184
+ output(): string;
185
+ ansiOutput(): string;
186
+ tree(): TerminalNode[];
187
+ focus(id: string): boolean;
188
+ focusAt(x: number, y: number): boolean;
189
+ focusNext(): boolean;
190
+ focusPrev(): boolean;
191
+ dispatchKey(key: string): string;
192
+ click(id?: string): string;
193
+ clickAt(x: number, y: number): string;
194
+ clipboard(): string;
195
+ setClipboard(value: string): string;
196
+ selectAll(): string;
197
+ destroy(): void;
198
+ }
199
+ export interface TerminalMountOptions {
200
+ ansi?: boolean;
201
+ clipboard?: TerminalClipboardAdapter | false;
202
+ stdin?: {
203
+ on(event: "data", listener: (chunk: string | Uint8Array) => void): any;
204
+ off?(event: "data", listener: (chunk: string | Uint8Array) => void): any;
205
+ removeListener?(event: "data", listener: (chunk: string | Uint8Array) => void): any;
206
+ setRawMode?(value: boolean): void;
207
+ resume?(): void;
208
+ pause?(): void;
209
+ };
210
+ stdout?: {
211
+ write(chunk: string): any;
212
+ };
213
+ }
214
+ export type ParsedTerminalInput = {
215
+ type: "key";
216
+ key: string;
217
+ } | {
218
+ type: "mouse";
219
+ x: number;
220
+ y: number;
221
+ button: number;
222
+ action: "press" | "release" | "drag" | "wheel-up" | "wheel-down";
223
+ };
224
+ //# 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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,273 @@
1
+ # API Reference
2
+
3
+ Referencia de la superficie publica real publicada por `valyrianjs-terminal`.
4
+
5
+ ## Entrypoints publicados
6
+
7
+ ### `valyrianjs-terminal`
8
+
9
+ Entrada principal. Expone a alto nivel:
10
+
11
+ - `renderTerminal()`
12
+ - `mountTerminal()`
13
+ - primitivas `Screen`, `Box`, `View`, `Text`, `Input`, `Button`, `ScrollView`, `List`, `Table`, `Row`, `Td`
14
+ - tipos de props, eventos, nodos y sesion
15
+
16
+ ### `valyrianjs-terminal/render`
17
+
18
+ Subpath publicado para utilidades de render de bajo nivel.
19
+
20
+ - `renderTerminal(input): string`
21
+ - `renderTerminalNode(node): string`
22
+ - `renderTerminalFrame(node): TerminalFrame`
23
+
24
+ Usa este subpath cuando solo necesites transformar nodos terminales a texto o `TerminalFrame`, sin montar una sesion interactiva.
25
+
26
+ ## Funciones principales
27
+
28
+ ### `renderTerminal(input): string`
29
+
30
+ Resuelve la raiz recibida y devuelve la salida terminal en texto plano.
31
+
32
+ Casos de uso respaldados por la implementacion actual:
33
+
34
+ - snapshots y pruebas
35
+ - validacion de layout sin `stdin` ni `stdout`
36
+ - inspeccion de contenido en modo no interactivo
37
+
38
+ Notas:
39
+
40
+ - concatena los nodos raiz con saltos de linea
41
+ - elimina solo el whitespace final con `trimEnd()`
42
+ - no crea listeners ni estado interactivo
43
+
44
+ ### `mountTerminal(input, options?): TerminalSession`
45
+
46
+ Monta una sesion interactiva sobre el arbol terminal y devuelve un `TerminalSession`.
47
+
48
+ Comportamiento de alto nivel:
49
+
50
+ - resuelve el arbol actual y lo rerenderiza con `session.update()`
51
+ - administra foco por `id`
52
+ - procesa teclado, mouse, seleccion y clipboard
53
+ - puede escribir automaticamente a `stdout` si se provee
54
+ - si recibe `stdin`, activa raw mode al montar y lo revierte en `destroy()`
55
+
56
+ ## `TerminalMountOptions`
57
+
58
+ - `ansi?: boolean` - si hay `stdout`, escribe diffs ANSI en vez de texto plano
59
+ - `clipboard?: TerminalClipboardAdapter | false` - adapter custom o desactiva el clipboard del sistema
60
+ - `stdin?` - stream con `on("data")`; `off()`, `removeListener()`, `setRawMode()`, `resume()` y `pause()` son opcionales
61
+ - `stdout?` - writer con `write(chunk: string)`
62
+
63
+ ## Primitivas de layout
64
+
65
+ ### `Screen`
66
+
67
+ Props de `TerminalScreenProps`:
68
+
69
+ - `title?: string`
70
+
71
+ Funcion: contenedor raiz. Si `title` existe, se renderiza como primera linea del frame.
72
+
73
+ ### `Box`
74
+
75
+ Props de `TerminalBoxProps`:
76
+
77
+ - `direction?: "row" | "column"`
78
+ - `gap?: number`
79
+ - `padding?: number`
80
+ - `border?: boolean`
81
+ - `width?: number`
82
+ - `height?: number`
83
+ - `id?: string`
84
+ - `focusable?: boolean`
85
+
86
+ Funcion: contenedor de layout. En `row` compone horizontalmente; en `column`, verticalmente.
87
+
88
+ ### `View`
89
+
90
+ Props de `TerminalViewProps`:
91
+
92
+ - todas las props de layout de `Box`
93
+ - `role?: string`
94
+
95
+ Funcion: contenedor semantico equivalente a `terminal-view`.
96
+
97
+ ### `Text`
98
+
99
+ Props de `TerminalTextProps`:
100
+
101
+ - `value?: any`
102
+
103
+ Funcion: renderiza `value` o el texto concatenado de sus hijos. Si hay saltos de linea, se preservan.
104
+
105
+ ### `Table`
106
+
107
+ Props de `TerminalTableProps`:
108
+
109
+ - `v-for?: any[]`
110
+
111
+ Funcion: compone filas y calcula automaticamente el ancho maximo por columna.
112
+
113
+ ### `Row`
114
+
115
+ Props de `TerminalRowProps`:
116
+
117
+ - `separator?: string`
118
+
119
+ Funcion: une celdas usando `separator` o `" | "` por default.
120
+
121
+ ### `Td`
122
+
123
+ Props de `TerminalTdProps`:
124
+
125
+ - `padding?: number`
126
+
127
+ Funcion: envuelve el contenido de la celda y aplica padding interno si se define.
128
+
129
+ ## Primitivas interactivas
130
+
131
+ Todas dependen de `id` para participar completamente en foco, hitboxes, busqueda por coordenadas y varios helpers de `TerminalSession`.
132
+
133
+ ### `Input`
134
+
135
+ Props de `TerminalInputProps`:
136
+
137
+ - `id?: string`
138
+ - `focusable?: boolean`
139
+ - `value?: string`
140
+ - `placeholder?: string`
141
+ - `onchange?(event)`
142
+ - `oninput?(event)`
143
+ - `onsubmit?(event)`
144
+ - `onChangeText?(value)`
145
+
146
+ Soporte actual de interaccion:
147
+
148
+ - cursor y seleccion de texto
149
+ - `LEFT`, `RIGHT`, `SHIFT_LEFT`, `SHIFT_RIGHT`
150
+ - `ALT_LEFT`, `ALT_RIGHT`, `HOME`, `END`
151
+ - `CTRL_A`, `CTRL_C`, `CTRL_X`, `CTRL_V`
152
+ - `BACKSPACE`, `DELETE`, escritura de caracteres y `ENTER`
153
+
154
+ Payloads importantes:
155
+
156
+ - `TerminalInputChangeEventPayload` - `{ type: "change" | "input", id, value }`
157
+ - `TerminalInputSubmitEventPayload` - `{ type: "submit", id, value }`
158
+
159
+ ### `Button`
160
+
161
+ Props de `TerminalButtonProps`:
162
+
163
+ - `id?: string`
164
+ - `focusable?: boolean`
165
+ - `label?: string`
166
+ - `onpress?(event)`
167
+ - `onclick?(event)`
168
+ - `action?(event)`
169
+ - `onPress?(event)`
170
+
171
+ Activacion actual:
172
+
173
+ - `session.click(id?)`
174
+ - `session.clickAt(x, y)`
175
+ - `dispatchKey("ENTER")` o `dispatchKey("SPACE")` cuando el foco esta en el boton
176
+
177
+ Payload importante:
178
+
179
+ - `TerminalButtonPressEventPayload` - `{ type: "press" | "click", id }`
180
+
181
+ ### `List<T>`
182
+
183
+ Props de `TerminalListProps<T>`:
184
+
185
+ - `id?: string`
186
+ - `focusable?: boolean`
187
+ - `pointerCapture?: boolean`
188
+ - `items?: T[]`
189
+ - `renderItem?(item, index): string`
190
+ - `onchange?(event)`
191
+ - `onpress?(event)`
192
+ - `onhover?(event)`
193
+ - `onrowenter?(event)`
194
+ - `onrowleave?(event)`
195
+ - `oncapturestart?(event)`
196
+ - `oncaptureend?(event)`
197
+
198
+ Interaccion actual:
199
+
200
+ - `UP` y `LEFT` mueven la seleccion hacia arriba
201
+ - `DOWN` y `RIGHT` mueven la seleccion hacia abajo
202
+ - `ENTER` dispara `onpress`
203
+ - el hover por mouse expone fila, indice y valor
204
+
205
+ Payloads importantes:
206
+
207
+ - `TerminalListChangeEventPayload<T>` - `{ type: "change", id, index, value }`
208
+ - `TerminalListPressEventPayload<T>` - `{ type: "press", id, index, value }`
209
+ - `TerminalListPointerEventPayload<T>` - `{ type: "hover" | "rowenter" | "rowleave", id, row, index, value, x, y }`
210
+ - `TerminalCaptureEventPayload` - `{ type: "capturestart" | "captureend", id, source, row, x, y }`
211
+
212
+ ### `ScrollView`
213
+
214
+ Props de `TerminalScrollViewProps`:
215
+
216
+ - props de layout (`direction`, `gap`, `padding`, `border`, `width`, `height`, `id`, `focusable`)
217
+ - `pointerCapture?: boolean`
218
+ - `highlightRows?: number[]`
219
+ - `onhover?(event)`
220
+ - `onrowenter?(event)`
221
+ - `onrowleave?(event)`
222
+ - `oncapturestart?(event)`
223
+ - `oncaptureend?(event)`
224
+
225
+ Interaccion actual:
226
+
227
+ - `UP` y `DOWN` ajustan el offset vertical cuando tiene foco
228
+ - el render recorta el contenido visible segun `height`
229
+ - `highlightRows` marca filas visibles concretas
230
+ - el hover por mouse expone fila visible y texto renderizado
231
+
232
+ Payloads importantes:
233
+
234
+ - `TerminalScrollPointerEventPayload` - `{ type: "hover" | "rowenter" | "rowleave", id, row, value, x, y }`
235
+ - `TerminalCaptureEventPayload` - `{ type: "capturestart" | "captureend", id, source, row, x, y }`
236
+
237
+ ## `TerminalSession`
238
+
239
+ Contrato publico de la sesion interactiva.
240
+
241
+ - `update(): string` - vuelve a resolver la raiz y retorna la salida actual en texto plano
242
+ - `output(): string` - devuelve el ultimo frame plano renderizado
243
+ - `ansiOutput(): string` - devuelve el frame actual serializado con ANSI
244
+ - `tree(): TerminalNode[]` - expone el arbol terminal resuelto actual
245
+ - `focus(id: string): boolean` - enfoca un nodo interactivo por `id`
246
+ - `focusAt(x: number, y: number): boolean` - enfoca por hitbox calculado
247
+ - `focusNext(): boolean` - recorre el foco en orden de render
248
+ - `focusPrev(): boolean` - recorre el foco hacia atras
249
+ - `dispatchKey(key: string): string` - inyecta una tecla normalizada y devuelve la salida actual
250
+ - `click(id?: string): string` - activa el boton enfocado o uno especifico por `id`
251
+ - `clickAt(x: number, y: number): string` - activa o enfoca usando coordenadas
252
+ - `clipboard(): string` - devuelve el ultimo valor de clipboard conocido por la sesion
253
+ - `setClipboard(value: string): string` - actualiza el clipboard interno y, si existe, el adapter
254
+ - `selectAll(): string` - selecciona todo el contenido del `Input` enfocado
255
+ - `destroy(): void` - desmonta listeners de `stdin`, sale de raw mode y pausa el stream si aplica
256
+
257
+ ## Tipos utilitarios relevantes
258
+
259
+ - `TerminalMountOptions` - opciones para montar la sesion
260
+ - `TerminalClipboardAdapter` - contrato minimo para integrar clipboard externo
261
+ - `TerminalFrame` - frame renderizado con `lines`, `hitboxes`, `cursor` y `spans`
262
+ - `TerminalHitbox` - region interactiva calculada para foco y clicks por coordenadas
263
+ - `TerminalStyleSpan` - marca visual como `selection`, `focus` o `highlight`
264
+ - `TerminalNode`, `TerminalElementNode`, `TerminalTextNode` - arbol terminal resuelto
265
+ - `TerminalLayoutProps` - base comun para `Box`, `View` y `ScrollView`
266
+ - `TerminalFocusableProps` - `id` y `focusable`
267
+ - `TerminalPointerCaptureProps` - `pointerCapture` para listas y scroll
268
+ - `InputInteractionState` - posicion de cursor y ancla de seleccion
269
+ - `TerminalChangeEventPayload` - union de cambios de `Input` y `List`
270
+ - `TerminalPressEventPayload` - union de presses de `Button` y `List`
271
+ - `TerminalPointerCoordinates` - coordenadas `x` y `y` opcionales en payloads de mouse
272
+ - `TerminalMouseEventType` - `"hover" | "rowenter" | "rowleave"`
273
+ - `TerminalPointerSource` - `"press" | "drag" | "release"`