@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.
- package/README.md +71 -0
- package/dist/ansi.d.ts +6 -0
- package/dist/ansi.d.ts.map +1 -0
- package/dist/ansi.js +105 -0
- package/dist/ansi.js.map +1 -0
- package/dist/clipboard.d.ts +3 -0
- package/dist/clipboard.d.ts.map +1 -0
- package/dist/clipboard.js +71 -0
- package/dist/clipboard.js.map +1 -0
- package/dist/events.d.ts +62 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +189 -0
- package/dist/events.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/layout.d.ts +16 -0
- package/dist/layout.d.ts.map +1 -0
- package/dist/layout.js +153 -0
- package/dist/layout.js.map +1 -0
- package/dist/mouse.d.ts +5 -0
- package/dist/mouse.d.ts.map +1 -0
- package/dist/mouse.js +34 -0
- package/dist/mouse.js.map +1 -0
- package/dist/primitives.d.ts +15 -0
- package/dist/primitives.d.ts.map +1 -0
- package/dist/primitives.js +18 -0
- package/dist/primitives.js.map +1 -0
- package/dist/render.d.ts +5 -0
- package/dist/render.d.ts.map +1 -0
- package/dist/render.js +230 -0
- package/dist/render.js.map +1 -0
- package/dist/session.d.ts +3 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +599 -0
- package/dist/session.js.map +1 -0
- package/dist/tree.d.ts +9 -0
- package/dist/tree.d.ts.map +1 -0
- package/dist/tree.js +103 -0
- package/dist/tree.js.map +1 -0
- package/dist/types.d.ts +224 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/docs/api-reference.md +273 -0
- package/docs/cookbook.md +286 -0
- package/docs/core-concepts.md +93 -0
- package/docs/getting-started.md +148 -0
- package/docs/interaction-model.md +115 -0
- package/docs/local-demo.md +28 -0
- package/docs/session-runtime.md +451 -0
- package/package.json +44 -0
- package/tsconfig.build.json +15 -0
- 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
|
package/dist/tree.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree.js","sourceRoot":"","sources":["../src/tree.ts"],"names":[],"mappings":"AAEA,SAAS,WAAW,CAAC,KAAU;IAC7B,OAAO,OAAO,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,IAAI,KAAK,IAAI,UAAU,IAAI,KAAK,CAAC,CAAC;AAC9F,CAAC;AAED,SAAS,eAAe,CAAC,KAAU;IACjC,OAAO,OAAO,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;AACzF,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAe;IACxC,MAAM,GAAG,GAAmB,EAAE,CAAC;IAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5C,GAAG,CAAC,IAAI,CAAC,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,gBAAgB,CAAC,SAAc,EAAE,KAA0B,EAAE,QAAe;IACnF,IAAI,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/B,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAU;IAC/C,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACvD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAC/C,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC3D,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,IAAI,KAAK,CAAC,KAAK,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;YAClD,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YACzC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;YAErC,IAAI,OAAO,QAAQ,KAAK,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzD,MAAM,GAAG,GAAmB,EAAE,CAAC;gBAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;oBACvC,GAAG,CAAC,IAAI,CAAC,GAAG,sBAAsB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3D,CAAC;gBACD,OAAO,GAAG,CAAC;YACb,CAAC;QACH,CAAC;QAED,IAAI,OAAO,KAAK,CAAC,GAAG,KAAK,UAAU,IAAI,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAClE,OAAO,sBAAsB,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;QACtG,CAAC;QAED,OAAO;YACL;gBACE,IAAI,EAAE,SAAS;gBACf,GAAG,EAAE,KAAK,CAAC,GAA2B;gBACtC,KAAK,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAwB;gBACjD,QAAQ,EAAE,iBAAiB,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;aAClD;SACF,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAU;IACpC,IAAI,OAAO,KAAK,KAAK,UAAU,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;QACvD,OAAO,sBAAsB,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAkB;IAC5C,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IACD,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAkB;IAC5C,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,gBAAgB,IAAI,IAAI,CAAC,GAAG,KAAK,iBAAiB,IAAI,IAAI,CAAC,GAAG,KAAK,eAAe,IAAI,IAAI,CAAC,GAAG,KAAK,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;AACzM,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAqB,EAAE,GAAwB;IACnF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5B,qBAAqB,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAqB,EAAE,EAAU;IACjE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;YAC9C,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YACnD,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAqB,EAAE,SAAwB;IACzE,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,iBAAiB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAC7C,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -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 @@
|
|
|
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"`
|