@opentui/core 0.1.30 → 0.1.32
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/3d.js +1 -1
- package/Renderable.d.ts +4 -4
- package/assets/markdown/highlights.scm +150 -0
- package/assets/markdown/injections.scm +27 -0
- package/assets/markdown/tree-sitter-markdown.wasm +0 -0
- package/assets/markdown_inline/highlights.scm +115 -0
- package/assets/markdown_inline/tree-sitter-markdown_inline.wasm +0 -0
- package/edit-buffer.d.ts +13 -12
- package/editor-view.d.ts +10 -0
- package/{index-0qmm1k4p.js → index-3f9h747j.js} +1424 -186
- package/index-3f9h747j.js.map +56 -0
- package/index.js +314 -83
- package/index.js.map +14 -14
- package/lib/KeyHandler.d.ts +4 -1
- package/lib/extmarks-history.d.ts +17 -0
- package/lib/extmarks.d.ts +88 -0
- package/lib/index.d.ts +2 -0
- package/lib/parse.keypress.d.ts +2 -1
- package/lib/stdin-buffer.d.ts +42 -0
- package/lib/tree-sitter/client.d.ts +1 -0
- package/lib/tree-sitter/parsers-config.d.ts +38 -0
- package/lib/tree-sitter/types.d.ts +18 -1
- package/lib/tree-sitter-styled-text.d.ts +9 -2
- package/package.json +9 -9
- package/parser.worker.js +250 -27
- package/parser.worker.js.map +3 -3
- package/renderables/Box.d.ts +1 -0
- package/renderables/Code.d.ts +14 -0
- package/renderables/EditBufferRenderable.d.ts +20 -4
- package/renderables/TextBufferRenderable.d.ts +10 -0
- package/renderables/Textarea.d.ts +21 -13
- package/renderer.d.ts +1 -0
- package/syntax-style.d.ts +2 -0
- package/testing/mock-keys.d.ts +22 -61
- package/testing.js +36 -78
- package/testing.js.map +3 -3
- package/text-buffer-view.d.ts +2 -0
- package/text-buffer.d.ts +3 -0
- package/zig.d.ts +29 -7
- package/index-0qmm1k4p.js.map +0 -53
package/testing.js
CHANGED
|
@@ -3,11 +3,13 @@ import {
|
|
|
3
3
|
ANSI,
|
|
4
4
|
CliRenderer,
|
|
5
5
|
resolveRenderLib
|
|
6
|
-
} from "./index-
|
|
6
|
+
} from "./index-3f9h747j.js";
|
|
7
7
|
|
|
8
8
|
// src/testing/mock-keys.ts
|
|
9
9
|
var KeyCodes = {
|
|
10
|
-
|
|
10
|
+
RETURN: "\r",
|
|
11
|
+
LINEFEED: `
|
|
12
|
+
`,
|
|
11
13
|
TAB: "\t",
|
|
12
14
|
BACKSPACE: "\b",
|
|
13
15
|
DELETE: "\x1B[3~",
|
|
@@ -29,64 +31,7 @@ var KeyCodes = {
|
|
|
29
31
|
F9: "\x1B[20~",
|
|
30
32
|
F10: "\x1B[21~",
|
|
31
33
|
F11: "\x1B[23~",
|
|
32
|
-
F12: "\x1B[24~"
|
|
33
|
-
CTRL_A: "\x01",
|
|
34
|
-
CTRL_B: "\x02",
|
|
35
|
-
CTRL_C: "\x03",
|
|
36
|
-
CTRL_D: "\x04",
|
|
37
|
-
CTRL_E: "\x05",
|
|
38
|
-
CTRL_F: "\x06",
|
|
39
|
-
CTRL_G: "\x07",
|
|
40
|
-
CTRL_H: "\b",
|
|
41
|
-
CTRL_I: "\t",
|
|
42
|
-
CTRL_J: `
|
|
43
|
-
`,
|
|
44
|
-
CTRL_K: "\v",
|
|
45
|
-
CTRL_L: "\f",
|
|
46
|
-
CTRL_M: "\r",
|
|
47
|
-
CTRL_N: "\x0E",
|
|
48
|
-
CTRL_O: "\x0F",
|
|
49
|
-
CTRL_P: "\x10",
|
|
50
|
-
CTRL_Q: "\x11",
|
|
51
|
-
CTRL_R: "\x12",
|
|
52
|
-
CTRL_S: "\x13",
|
|
53
|
-
CTRL_T: "\x14",
|
|
54
|
-
CTRL_U: "\x15",
|
|
55
|
-
CTRL_V: "\x16",
|
|
56
|
-
CTRL_W: "\x17",
|
|
57
|
-
CTRL_X: "\x18",
|
|
58
|
-
CTRL_Y: "\x19",
|
|
59
|
-
CTRL_Z: "\x1A",
|
|
60
|
-
ALT_A: "\x1Ba",
|
|
61
|
-
ALT_B: "\x1Bb",
|
|
62
|
-
ALT_C: "\x1Bc",
|
|
63
|
-
ALT_D: "\x1Bd",
|
|
64
|
-
ALT_E: "\x1Be",
|
|
65
|
-
ALT_F: "\x1Bf",
|
|
66
|
-
ALT_G: "\x1Bg",
|
|
67
|
-
ALT_H: "\x1Bh",
|
|
68
|
-
ALT_I: "\x1Bi",
|
|
69
|
-
ALT_J: "\x1Bj",
|
|
70
|
-
ALT_K: "\x1Bk",
|
|
71
|
-
ALT_L: "\x1Bl",
|
|
72
|
-
ALT_M: "\x1Bm",
|
|
73
|
-
ALT_N: "\x1Bn",
|
|
74
|
-
ALT_O: "\x1Bo",
|
|
75
|
-
ALT_P: "\x1Bp",
|
|
76
|
-
ALT_Q: "\x1Bq",
|
|
77
|
-
ALT_R: "\x1Br",
|
|
78
|
-
ALT_S: "\x1Bs",
|
|
79
|
-
ALT_T: "\x1Bt",
|
|
80
|
-
ALT_U: "\x1Bu",
|
|
81
|
-
ALT_V: "\x1Bv",
|
|
82
|
-
ALT_W: "\x1Bw",
|
|
83
|
-
ALT_X: "\x1Bx",
|
|
84
|
-
ALT_Y: "\x1By",
|
|
85
|
-
ALT_Z: "\x1Bz",
|
|
86
|
-
ALT_LEFT: "\x1B\x1B[D",
|
|
87
|
-
ALT_RIGHT: "\x1B\x1B[C",
|
|
88
|
-
ALT_UP: "\x1B\x1B[A",
|
|
89
|
-
ALT_DOWN: "\x1B\x1B[B"
|
|
34
|
+
F12: "\x1B[24~"
|
|
90
35
|
};
|
|
91
36
|
function createMockKeys(renderer) {
|
|
92
37
|
const pressKeys = async (keys, delayMs = 0) => {
|
|
@@ -131,16 +76,29 @@ function createMockKeys(renderer) {
|
|
|
131
76
|
const ending = keyCode.slice(-1);
|
|
132
77
|
keyCode = `\x1B[1;${modifier}${ending}`;
|
|
133
78
|
}
|
|
134
|
-
} else if (keyCode.length === 1
|
|
79
|
+
} else if (keyCode.length === 1) {
|
|
135
80
|
let char = keyCode;
|
|
136
|
-
if (modifiers.
|
|
137
|
-
char
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
81
|
+
if (modifiers.ctrl) {
|
|
82
|
+
if (char >= "a" && char <= "z") {
|
|
83
|
+
keyCode = String.fromCharCode(char.charCodeAt(0) - 96);
|
|
84
|
+
} else if (char >= "A" && char <= "Z") {
|
|
85
|
+
keyCode = String.fromCharCode(char.charCodeAt(0) - 64);
|
|
86
|
+
}
|
|
87
|
+
if (modifiers.meta) {
|
|
88
|
+
keyCode = `\x1B${keyCode}`;
|
|
89
|
+
}
|
|
141
90
|
} else {
|
|
142
|
-
|
|
91
|
+
if (modifiers.shift && char >= "a" && char <= "z") {
|
|
92
|
+
char = char.toUpperCase();
|
|
93
|
+
}
|
|
94
|
+
if (modifiers.meta) {
|
|
95
|
+
keyCode = `\x1B${char}`;
|
|
96
|
+
} else {
|
|
97
|
+
keyCode = char;
|
|
98
|
+
}
|
|
143
99
|
}
|
|
100
|
+
} else if (modifiers.meta && !keyCode.startsWith("\x1B")) {
|
|
101
|
+
keyCode = `\x1B${keyCode}`;
|
|
144
102
|
}
|
|
145
103
|
}
|
|
146
104
|
renderer.stdin.emit("data", Buffer.from(keyCode));
|
|
@@ -149,17 +107,17 @@ function createMockKeys(renderer) {
|
|
|
149
107
|
const keys = text.split("");
|
|
150
108
|
await pressKeys(keys, delayMs);
|
|
151
109
|
};
|
|
152
|
-
const
|
|
153
|
-
pressKey(KeyCodes.
|
|
110
|
+
const pressReturn = (modifiers) => {
|
|
111
|
+
pressKey(KeyCodes.RETURN, modifiers);
|
|
154
112
|
};
|
|
155
|
-
const pressEscape = () => {
|
|
156
|
-
pressKey(KeyCodes.ESCAPE);
|
|
113
|
+
const pressEscape = (modifiers) => {
|
|
114
|
+
pressKey(KeyCodes.ESCAPE, modifiers);
|
|
157
115
|
};
|
|
158
|
-
const pressTab = () => {
|
|
159
|
-
pressKey(KeyCodes.TAB);
|
|
116
|
+
const pressTab = (modifiers) => {
|
|
117
|
+
pressKey(KeyCodes.TAB, modifiers);
|
|
160
118
|
};
|
|
161
|
-
const pressBackspace = () => {
|
|
162
|
-
pressKey(KeyCodes.BACKSPACE);
|
|
119
|
+
const pressBackspace = (modifiers) => {
|
|
120
|
+
pressKey(KeyCodes.BACKSPACE, modifiers);
|
|
163
121
|
};
|
|
164
122
|
const pressArrow = (direction, modifiers) => {
|
|
165
123
|
const keyMap = {
|
|
@@ -171,7 +129,7 @@ function createMockKeys(renderer) {
|
|
|
171
129
|
pressKey(keyMap[direction], modifiers);
|
|
172
130
|
};
|
|
173
131
|
const pressCtrlC = () => {
|
|
174
|
-
pressKey(
|
|
132
|
+
pressKey("c", { ctrl: true });
|
|
175
133
|
};
|
|
176
134
|
const pasteBracketedText = (text) => {
|
|
177
135
|
return pressKeys([ANSI.bracketedPasteStart, text, ANSI.bracketedPasteEnd]);
|
|
@@ -180,7 +138,7 @@ function createMockKeys(renderer) {
|
|
|
180
138
|
pressKeys,
|
|
181
139
|
pressKey,
|
|
182
140
|
typeText,
|
|
183
|
-
pressEnter,
|
|
141
|
+
pressEnter: pressReturn,
|
|
184
142
|
pressEscape,
|
|
185
143
|
pressTab,
|
|
186
144
|
pressBackspace,
|
|
@@ -410,5 +368,5 @@ export {
|
|
|
410
368
|
KeyCodes
|
|
411
369
|
};
|
|
412
370
|
|
|
413
|
-
//# debugId=
|
|
371
|
+
//# debugId=7B0C10E41BAE08C864756E2164756E21
|
|
414
372
|
//# sourceMappingURL=testing.js.map
|
package/testing.js.map
CHANGED
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/testing/mock-keys.ts", "../src/testing/mock-mouse.ts", "../src/testing/test-renderer.ts", "../src/testing/spy.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import type { CliRenderer } from \"../renderer\"\nimport { ANSI } from \"../ansi\"\n\nexport const KeyCodes = {\n // Control keys\n
|
|
5
|
+
"import type { CliRenderer } from \"../renderer\"\nimport { ANSI } from \"../ansi\"\n\nexport const KeyCodes = {\n // Control keys\n RETURN: \"\\r\",\n LINEFEED: \"\\n\",\n TAB: \"\\t\",\n BACKSPACE: \"\\b\",\n // NOTE: This may depend on the platform and terminals\n DELETE: \"\\x1b[3~\",\n HOME: \"\\x1b[H\",\n END: \"\\x1b[F\",\n ESCAPE: \"\\x1b\",\n\n // Arrow keys\n ARROW_UP: \"\\x1b[A\",\n ARROW_DOWN: \"\\x1b[B\",\n ARROW_RIGHT: \"\\x1b[C\",\n ARROW_LEFT: \"\\x1b[D\",\n\n // Function keys\n F1: \"\\x1bOP\",\n F2: \"\\x1bOQ\",\n F3: \"\\x1bOR\",\n F4: \"\\x1bOS\",\n F5: \"\\x1b[15~\",\n F6: \"\\x1b[17~\",\n F7: \"\\x1b[18~\",\n F8: \"\\x1b[19~\",\n F9: \"\\x1b[20~\",\n F10: \"\\x1b[21~\",\n F11: \"\\x1b[23~\",\n F12: \"\\x1b[24~\",\n} as const\n\nexport type KeyInput = string | keyof typeof KeyCodes\n\nexport function createMockKeys(renderer: CliRenderer) {\n const pressKeys = async (keys: KeyInput[], delayMs: number = 0): Promise<void> => {\n for (const key of keys) {\n let keyCode: string\n if (typeof key === \"string\") {\n // If it's a string but also exists in KeyCodes, use the KeyCodes value\n if (key in KeyCodes) {\n keyCode = KeyCodes[key as keyof typeof KeyCodes]\n } else {\n keyCode = key\n }\n } else {\n // It's a KeyCode enum value\n keyCode = KeyCodes[key]\n if (!keyCode) {\n throw new Error(`Unknown key: ${key}`)\n }\n }\n\n renderer.stdin.emit(\"data\", Buffer.from(keyCode))\n\n if (delayMs > 0) {\n await new Promise((resolve) => setTimeout(resolve, delayMs))\n }\n }\n }\n\n const pressKey = (key: KeyInput, modifiers?: { shift?: boolean; ctrl?: boolean; meta?: boolean }): void => {\n let keyCode: string\n if (typeof key === \"string\") {\n // If it's a string but also exists in KeyCodes, use the KeyCodes value\n if (key in KeyCodes) {\n keyCode = KeyCodes[key as keyof typeof KeyCodes]\n } else {\n keyCode = key\n }\n } else {\n // This branch handles KeyCode enum values (though they're strings at runtime)\n keyCode = KeyCodes[key]\n if (!keyCode) {\n throw new Error(`Unknown key: ${key}`)\n }\n }\n\n // Apply modifiers if present\n if (modifiers) {\n // For arrow keys and special keys, modify the escape sequence\n if (keyCode.startsWith(\"\\x1b[\") && keyCode.length > 2) {\n // Arrow keys: \\x1b[A, \\x1b[B, \\x1b[C, \\x1b[D\n // With shift modifier: \\x1b[1;2A, \\x1b[1;2B, \\x1b[1;2C, \\x1b[1;2D\n const modifier = 1 + (modifiers.shift ? 1 : 0) + (modifiers.meta ? 2 : 0) + (modifiers.ctrl ? 4 : 0)\n if (modifier > 1) {\n // Insert modifier into sequence\n const ending = keyCode.slice(-1)\n keyCode = `\\x1b[1;${modifier}${ending}`\n }\n } else if (keyCode.length === 1) {\n // For regular characters and single-char control codes with modifiers\n let char = keyCode\n\n // Handle ctrl modifier for characters\n if (modifiers.ctrl) {\n // Ctrl+letter produces control codes (0x01-0x1a for a-z)\n if (char >= \"a\" && char <= \"z\") {\n keyCode = String.fromCharCode(char.charCodeAt(0) - 96)\n } else if (char >= \"A\" && char <= \"Z\") {\n keyCode = String.fromCharCode(char.charCodeAt(0) - 64)\n }\n // If meta is also pressed, prefix with escape\n if (modifiers.meta) {\n keyCode = `\\x1b${keyCode}`\n }\n } else {\n // Handle shift+meta or just meta\n if (modifiers.shift && char >= \"a\" && char <= \"z\") {\n char = char.toUpperCase()\n }\n if (modifiers.meta) {\n // For meta+character (including control codes), prefix with escape\n keyCode = `\\x1b${char}`\n } else {\n keyCode = char\n }\n }\n } else if (modifiers.meta && !keyCode.startsWith(\"\\x1b\")) {\n // For multi-char sequences that aren't escape sequences (like simple control codes)\n // just prefix with escape for meta\n keyCode = `\\x1b${keyCode}`\n }\n }\n\n renderer.stdin.emit(\"data\", Buffer.from(keyCode))\n }\n\n const typeText = async (text: string, delayMs: number = 0): Promise<void> => {\n const keys = text.split(\"\")\n await pressKeys(keys, delayMs)\n }\n\n const pressReturn = (modifiers?: { shift?: boolean; ctrl?: boolean; meta?: boolean }): void => {\n pressKey(KeyCodes.RETURN, modifiers)\n }\n\n const pressEscape = (modifiers?: { shift?: boolean; ctrl?: boolean; meta?: boolean }): void => {\n pressKey(KeyCodes.ESCAPE, modifiers)\n }\n\n const pressTab = (modifiers?: { shift?: boolean; ctrl?: boolean; meta?: boolean }): void => {\n pressKey(KeyCodes.TAB, modifiers)\n }\n\n const pressBackspace = (modifiers?: { shift?: boolean; ctrl?: boolean; meta?: boolean }): void => {\n pressKey(KeyCodes.BACKSPACE, modifiers)\n }\n\n const pressArrow = (\n direction: \"up\" | \"down\" | \"left\" | \"right\",\n modifiers?: { shift?: boolean; ctrl?: boolean; meta?: boolean },\n ): void => {\n const keyMap = {\n up: KeyCodes.ARROW_UP,\n down: KeyCodes.ARROW_DOWN,\n left: KeyCodes.ARROW_LEFT,\n right: KeyCodes.ARROW_RIGHT,\n }\n pressKey(keyMap[direction], modifiers)\n }\n\n const pressCtrlC = (): void => {\n pressKey(\"c\", { ctrl: true })\n }\n\n const pasteBracketedText = (text: string): Promise<void> => {\n return pressKeys([ANSI.bracketedPasteStart, text, ANSI.bracketedPasteEnd])\n }\n\n return {\n pressKeys,\n pressKey,\n typeText,\n pressEnter: pressReturn,\n pressEscape,\n pressTab,\n pressBackspace,\n pressArrow,\n pressCtrlC,\n pasteBracketedText,\n }\n}\n",
|
|
6
6
|
"import type { CliRenderer } from \"../renderer\"\n\nexport const MouseButtons = {\n LEFT: 0,\n MIDDLE: 1,\n RIGHT: 2,\n\n WHEEL_UP: 64, // 64 = scroll flag + 0\n WHEEL_DOWN: 65, // 64 + 1\n WHEEL_LEFT: 66, // 64 + 2\n WHEEL_RIGHT: 67, // 64 + 3\n} as const\n\nexport type MouseButton = (typeof MouseButtons)[keyof typeof MouseButtons]\n\nexport interface MousePosition {\n x: number\n y: number\n}\n\nexport interface MouseModifiers {\n shift?: boolean\n alt?: boolean\n ctrl?: boolean\n}\n\nexport type MouseEventType = \"down\" | \"up\" | \"move\" | \"drag\" | \"scroll\"\n\nexport interface MouseEventOptions {\n button?: MouseButton\n modifiers?: MouseModifiers\n delayMs?: number\n}\n\nexport function createMockMouse(renderer: CliRenderer) {\n let currentPosition: MousePosition = { x: 0, y: 0 }\n let buttonsPressed = new Set<MouseButton>()\n\n // Generate SGR mouse event sequence\n const generateMouseEvent = (\n type: MouseEventType,\n x: number,\n y: number,\n button: MouseButton = MouseButtons.LEFT,\n modifiers: MouseModifiers = {},\n ): string => {\n // SGR format: \\x1b[<b;x;yM or \\x1b[<b;x;ym\n // where b = button code + modifier flags + motion/scroll flags\n\n let buttonCode: number = button\n\n // Add modifier flags\n if (modifiers.shift) buttonCode |= 4\n if (modifiers.alt) buttonCode |= 8\n if (modifiers.ctrl) buttonCode |= 16\n\n switch (type) {\n case \"move\":\n buttonCode = 32 | 3 // motion flag (32) + button 3 for motion without button press\n if (modifiers.shift) buttonCode |= 4\n if (modifiers.alt) buttonCode |= 8\n if (modifiers.ctrl) buttonCode |= 16\n break\n case \"drag\":\n buttonCode = (buttonsPressed.size > 0 ? Array.from(buttonsPressed)[0] : button) | 32\n if (modifiers.shift) buttonCode |= 4\n if (modifiers.alt) buttonCode |= 8\n if (modifiers.ctrl) buttonCode |= 16\n break\n case \"scroll\":\n // Scroll events already have the scroll flag set in the button code\n break\n }\n\n // Convert to 1-based coordinates for ANSI\n const ansiX = x + 1\n const ansiY = y + 1\n\n let pressRelease = \"M\" // Default to press\n if (type === \"up\" || type === \"move\" || type === \"drag\") {\n pressRelease = \"m\"\n }\n\n return `\\x1b[<${buttonCode};${ansiX};${ansiY}${pressRelease}`\n }\n\n const emitMouseEvent = async (\n type: MouseEventType,\n x: number,\n y: number,\n button: MouseButton = MouseButtons.LEFT,\n options: Omit<MouseEventOptions, \"button\"> = {},\n ): Promise<void> => {\n const { modifiers = {}, delayMs = 0 } = options\n\n const eventSequence = generateMouseEvent(type, x, y, button, modifiers)\n renderer.stdin.emit(\"data\", Buffer.from(eventSequence))\n\n currentPosition = { x, y }\n\n if (type === \"down\" && button < 64) {\n buttonsPressed.add(button)\n } else if (type === \"up\") {\n buttonsPressed.delete(button)\n }\n\n if (delayMs > 0) {\n await new Promise((resolve) => setTimeout(resolve, delayMs))\n }\n }\n\n const moveTo = async (x: number, y: number, options: MouseEventOptions = {}): Promise<void> => {\n const { button = MouseButtons.LEFT, delayMs = 0, modifiers = {} } = options\n\n if (buttonsPressed.size > 0) {\n await emitMouseEvent(\"drag\", x, y, Array.from(buttonsPressed)[0], { modifiers, delayMs })\n } else {\n await emitMouseEvent(\"move\", x, y, button, { modifiers, delayMs })\n }\n\n currentPosition = { x, y }\n }\n\n const click = async (\n x: number,\n y: number,\n button: MouseButton = MouseButtons.LEFT,\n options: MouseEventOptions = {},\n ): Promise<void> => {\n const { delayMs = 10, modifiers = {} } = options\n\n await emitMouseEvent(\"down\", x, y, button, { modifiers, delayMs })\n await new Promise((resolve) => setTimeout(resolve, delayMs))\n await emitMouseEvent(\"up\", x, y, button, { modifiers, delayMs })\n }\n\n const doubleClick = async (\n x: number,\n y: number,\n button: MouseButton = MouseButtons.LEFT,\n options: MouseEventOptions = {},\n ): Promise<void> => {\n const { delayMs = 10, modifiers = {} } = options\n\n await click(x, y, button, { modifiers, delayMs })\n await new Promise((resolve) => setTimeout(resolve, delayMs))\n await click(x, y, button, { modifiers, delayMs })\n }\n\n const pressDown = async (\n x: number,\n y: number,\n button: MouseButton = MouseButtons.LEFT,\n options: MouseEventOptions = {},\n ): Promise<void> => {\n const { modifiers = {}, delayMs = 0 } = options\n await emitMouseEvent(\"down\", x, y, button, { modifiers, delayMs })\n }\n\n const release = async (\n x: number,\n y: number,\n button: MouseButton = MouseButtons.LEFT,\n options: MouseEventOptions = {},\n ): Promise<void> => {\n const { modifiers = {}, delayMs = 0 } = options\n await emitMouseEvent(\"up\", x, y, button, { modifiers, delayMs })\n }\n\n const drag = async (\n startX: number,\n startY: number,\n endX: number,\n endY: number,\n button: MouseButton = MouseButtons.LEFT,\n options: MouseEventOptions = {},\n ): Promise<void> => {\n const { delayMs = 10, modifiers = {} } = options\n\n await pressDown(startX, startY, button, { modifiers })\n\n const steps = 5\n const dx = (endX - startX) / steps\n const dy = (endY - startY) / steps\n\n for (let i = 1; i <= steps; i++) {\n const currentX = Math.round(startX + dx * i)\n const currentY = Math.round(startY + dy * i)\n await emitMouseEvent(\"drag\", currentX, currentY, button, { modifiers, delayMs })\n }\n\n await release(endX, endY, button, { modifiers })\n }\n\n const scroll = async (\n x: number,\n y: number,\n direction: \"up\" | \"down\" | \"left\" | \"right\",\n options: MouseEventOptions = {},\n ): Promise<void> => {\n const { modifiers = {}, delayMs = 0 } = options\n\n let button: MouseButton\n switch (direction) {\n case \"up\":\n button = MouseButtons.WHEEL_UP\n break\n case \"down\":\n button = MouseButtons.WHEEL_DOWN\n break\n case \"left\":\n button = MouseButtons.WHEEL_LEFT\n break\n case \"right\":\n button = MouseButtons.WHEEL_RIGHT\n break\n }\n\n await emitMouseEvent(\"scroll\", x, y, button, { modifiers, delayMs })\n }\n\n const getCurrentPosition = (): MousePosition => {\n return { ...currentPosition }\n }\n\n const getPressedButtons = (): MouseButton[] => {\n return Array.from(buttonsPressed)\n }\n\n return {\n // Core interaction methods\n moveTo,\n click,\n doubleClick,\n pressDown,\n release,\n drag,\n scroll,\n\n // State getters\n getCurrentPosition,\n getPressedButtons,\n\n // Low-level event emission (for advanced use cases)\n emitMouseEvent,\n }\n}\n",
|
|
7
7
|
"import { CliRenderer, type CliRendererConfig } from \"../renderer\"\nimport { resolveRenderLib } from \"../zig\"\nimport { createMockKeys } from \"./mock-keys\"\nimport { createMockMouse } from \"./mock-mouse\"\n\nexport interface TestRendererOptions extends CliRendererConfig {\n width?: number\n height?: number\n}\nexport interface TestRenderer extends CliRenderer {}\nexport type MockInput = ReturnType<typeof createMockKeys>\nexport type MockMouse = ReturnType<typeof createMockMouse>\n\nconst decoder = new TextDecoder()\n\nexport async function createTestRenderer(options: TestRendererOptions): Promise<{\n renderer: TestRenderer\n mockInput: MockInput\n mockMouse: MockMouse\n renderOnce: () => Promise<void>\n captureCharFrame: () => string\n resize: (width: number, height: number) => void\n}> {\n process.env.OTUI_USE_CONSOLE = \"false\"\n const renderer = await setupTestRenderer({\n ...options,\n useAlternateScreen: false,\n useConsole: false,\n })\n\n renderer.disableStdoutInterception()\n\n const mockInput = createMockKeys(renderer)\n const mockMouse = createMockMouse(renderer)\n\n const renderOnce = async () => {\n //@ts-expect-error - this is a test renderer\n await renderer.loop()\n }\n\n return {\n renderer,\n mockInput,\n mockMouse,\n renderOnce,\n captureCharFrame: () => {\n const currentBuffer = renderer.currentRenderBuffer\n const frameBytes = currentBuffer.getRealCharBytes(true)\n return decoder.decode(frameBytes)\n },\n resize: (width: number, height: number) => {\n //@ts-expect-error - this is a test renderer\n renderer.processResize(width, height)\n },\n }\n}\n\nasync function setupTestRenderer(config: TestRendererOptions) {\n const stdin = config.stdin || process.stdin\n const stdout = config.stdout || process.stdout\n\n const width = config.width || stdout.columns || 80\n const height = config.height || stdout.rows || 24\n const renderHeight =\n config.experimental_splitHeight && config.experimental_splitHeight > 0 ? config.experimental_splitHeight : height\n\n const ziglib = resolveRenderLib()\n const rendererPtr = ziglib.createRenderer(width, renderHeight, { testing: true })\n if (!rendererPtr) {\n throw new Error(\"Failed to create test renderer\")\n }\n if (config.useThread === undefined) {\n config.useThread = true\n }\n\n if (process.platform === \"linux\") {\n config.useThread = false\n }\n ziglib.setUseThread(rendererPtr, config.useThread)\n\n const renderer = new CliRenderer(ziglib, rendererPtr, stdin, stdout, width, height, config)\n\n // Do not setup the terminal for testing as we will not actualy output anything to the terminal\n // await renderer.setupTerminal()\n\n return renderer\n}\n",
|
|
8
8
|
"export function createSpy() {\n const calls: any[][] = []\n const spy = (...args: any[]) => {\n calls.push(args)\n }\n spy.calls = calls\n spy.callCount = () => calls.length\n spy.calledWith = (...expected: any[]) => {\n return calls.some((call) => JSON.stringify(call) === JSON.stringify(expected))\n }\n spy.reset = () => (calls.length = 0)\n return spy\n}\n"
|
|
9
9
|
],
|
|
10
|
-
"mappings": ";;;;;;;;AAGO,IAAM,WAAW;AAAA,EAEtB,
|
|
11
|
-
"debugId": "
|
|
10
|
+
"mappings": "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",
|
|
11
|
+
"debugId": "7B0C10E41BAE08C864756E2164756E21",
|
|
12
12
|
"names": []
|
|
13
13
|
}
|
package/text-buffer-view.d.ts
CHANGED
package/text-buffer.d.ts
CHANGED
|
@@ -49,8 +49,11 @@ export declare class TextBuffer {
|
|
|
49
49
|
clearLineHighlights(lineIdx: number): void;
|
|
50
50
|
clearAllHighlights(): void;
|
|
51
51
|
getLineHighlights(lineIdx: number): Array<Highlight>;
|
|
52
|
+
getHighlightCount(): number;
|
|
52
53
|
setSyntaxStyle(style: SyntaxStyle | null): void;
|
|
53
54
|
getSyntaxStyle(): SyntaxStyle | null;
|
|
55
|
+
setTabWidth(width: number): void;
|
|
56
|
+
getTabWidth(): number;
|
|
54
57
|
clear(): void;
|
|
55
58
|
reset(): void;
|
|
56
59
|
destroy(): void;
|
package/zig.d.ts
CHANGED
|
@@ -27,6 +27,11 @@ export interface VisualCursor {
|
|
|
27
27
|
logicalCol: number;
|
|
28
28
|
offset: number;
|
|
29
29
|
}
|
|
30
|
+
export interface LogicalCursor {
|
|
31
|
+
row: number;
|
|
32
|
+
col: number;
|
|
33
|
+
offset: number;
|
|
34
|
+
}
|
|
30
35
|
export interface RenderLib {
|
|
31
36
|
createRenderer: (width: number, height: number, options?: {
|
|
32
37
|
testing: boolean;
|
|
@@ -102,6 +107,8 @@ export interface RenderLib {
|
|
|
102
107
|
textBufferSetDefaultBg: (buffer: Pointer, bg: RGBA | null) => void;
|
|
103
108
|
textBufferSetDefaultAttributes: (buffer: Pointer, attributes: number | null) => void;
|
|
104
109
|
textBufferResetDefaults: (buffer: Pointer) => void;
|
|
110
|
+
textBufferGetTabWidth: (buffer: Pointer) => number;
|
|
111
|
+
textBufferSetTabWidth: (buffer: Pointer, width: number) => void;
|
|
105
112
|
textBufferGetLineCount: (buffer: Pointer) => number;
|
|
106
113
|
getPlainTextBytes: (buffer: Pointer, maxLength: number) => Uint8Array | null;
|
|
107
114
|
createTextBufferView: (textBuffer: Pointer) => Pointer;
|
|
@@ -121,6 +128,8 @@ export interface RenderLib {
|
|
|
121
128
|
textBufferViewGetLogicalLineInfo: (view: Pointer) => LineInfo;
|
|
122
129
|
textBufferViewGetSelectedTextBytes: (view: Pointer, maxLength: number) => Uint8Array | null;
|
|
123
130
|
textBufferViewGetPlainTextBytes: (view: Pointer, maxLength: number) => Uint8Array | null;
|
|
131
|
+
textBufferViewSetTabIndicator: (view: Pointer, indicator: number) => void;
|
|
132
|
+
textBufferViewSetTabIndicatorColor: (view: Pointer, color: RGBA) => void;
|
|
124
133
|
readonly encoder: TextEncoder;
|
|
125
134
|
readonly decoder: TextDecoder;
|
|
126
135
|
bufferDrawTextBufferView: (buffer: Pointer, view: Pointer, x: number, y: number) => void;
|
|
@@ -145,11 +154,7 @@ export interface RenderLib {
|
|
|
145
154
|
editBufferSetCursor: (buffer: Pointer, line: number, col: number) => void;
|
|
146
155
|
editBufferSetCursorToLineCol: (buffer: Pointer, line: number, col: number) => void;
|
|
147
156
|
editBufferSetCursorByOffset: (buffer: Pointer, offset: number) => void;
|
|
148
|
-
editBufferGetCursorPosition: (buffer: Pointer) =>
|
|
149
|
-
line: number;
|
|
150
|
-
visualColumn: number;
|
|
151
|
-
offset: number;
|
|
152
|
-
};
|
|
157
|
+
editBufferGetCursorPosition: (buffer: Pointer) => LogicalCursor;
|
|
153
158
|
editBufferGetId: (buffer: Pointer) => number;
|
|
154
159
|
editBufferGetTextBuffer: (buffer: Pointer) => Pointer;
|
|
155
160
|
editBufferDebugLogRope: (buffer: Pointer) => void;
|
|
@@ -158,8 +163,7 @@ export interface RenderLib {
|
|
|
158
163
|
editBufferCanUndo: (buffer: Pointer) => boolean;
|
|
159
164
|
editBufferCanRedo: (buffer: Pointer) => boolean;
|
|
160
165
|
editBufferClearHistory: (buffer: Pointer) => void;
|
|
161
|
-
|
|
162
|
-
editBufferSetPlaceholderColor: (buffer: Pointer, color: RGBA) => void;
|
|
166
|
+
editBufferClear: (buffer: Pointer) => void;
|
|
163
167
|
editBufferGetNextWordBoundary: (buffer: Pointer) => {
|
|
164
168
|
row: number;
|
|
165
169
|
col: number;
|
|
@@ -175,6 +179,13 @@ export interface RenderLib {
|
|
|
175
179
|
col: number;
|
|
176
180
|
offset: number;
|
|
177
181
|
};
|
|
182
|
+
editBufferOffsetToPosition: (buffer: Pointer, offset: number) => {
|
|
183
|
+
row: number;
|
|
184
|
+
col: number;
|
|
185
|
+
offset: number;
|
|
186
|
+
} | null;
|
|
187
|
+
editBufferPositionToOffset: (buffer: Pointer, row: number, col: number) => number;
|
|
188
|
+
editBufferGetLineStartOffset: (buffer: Pointer, row: number) => number;
|
|
178
189
|
createEditorView: (editBufferPtr: Pointer, viewportWidth: number, viewportHeight: number) => Pointer;
|
|
179
190
|
destroyEditorView: (view: Pointer) => void;
|
|
180
191
|
editorViewSetViewportSize: (view: Pointer, width: number, height: number) => void;
|
|
@@ -211,6 +222,16 @@ export interface RenderLib {
|
|
|
211
222
|
editorViewGetNextWordBoundary: (view: Pointer) => VisualCursor;
|
|
212
223
|
editorViewGetPrevWordBoundary: (view: Pointer) => VisualCursor;
|
|
213
224
|
editorViewGetEOL: (view: Pointer) => VisualCursor;
|
|
225
|
+
editorViewGetLineInfo: (view: Pointer) => LineInfo;
|
|
226
|
+
editorViewGetLogicalLineInfo: (view: Pointer) => LineInfo;
|
|
227
|
+
editorViewSetPlaceholderStyledText: (view: Pointer, chunks: Array<{
|
|
228
|
+
text: string;
|
|
229
|
+
fg?: RGBA | null;
|
|
230
|
+
bg?: RGBA | null;
|
|
231
|
+
attributes?: number;
|
|
232
|
+
}>) => void;
|
|
233
|
+
editorViewSetTabIndicator: (view: Pointer, indicator: number) => void;
|
|
234
|
+
editorViewSetTabIndicatorColor: (view: Pointer, color: RGBA) => void;
|
|
214
235
|
bufferPushScissorRect: (buffer: Pointer, x: number, y: number, width: number, height: number) => void;
|
|
215
236
|
bufferPopScissorRect: (buffer: Pointer) => void;
|
|
216
237
|
bufferClearScissorRects: (buffer: Pointer) => void;
|
|
@@ -221,6 +242,7 @@ export interface RenderLib {
|
|
|
221
242
|
textBufferClearAllHighlights: (buffer: Pointer) => void;
|
|
222
243
|
textBufferSetSyntaxStyle: (buffer: Pointer, style: Pointer | null) => void;
|
|
223
244
|
textBufferGetLineHighlights: (buffer: Pointer, lineIdx: number) => Array<Highlight>;
|
|
245
|
+
textBufferGetHighlightCount: (buffer: Pointer) => number;
|
|
224
246
|
getArenaAllocatedBytes: () => number;
|
|
225
247
|
createSyntaxStyle: () => Pointer;
|
|
226
248
|
destroySyntaxStyle: (style: Pointer) => void;
|