@opentui/core 0.0.0-20250924-d06b64fa → 0.0.0-20250924-9d06e8e4
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 +7 -7
- package/{index-6kvgbzah.js → index-bq6h36ne.js} +114 -16
- package/{index-6kvgbzah.js.map → index-bq6h36ne.js.map} +8 -8
- package/index.js +8 -2
- package/index.js.map +7 -7
- package/lib/KeyHandler.d.ts +51 -12
- package/lib/parse.keypress.d.ts +2 -2
- package/package.json +7 -7
- package/renderables/Input.d.ts +2 -2
- package/renderables/ScrollBar.d.ts +2 -2
- package/renderables/ScrollBox.d.ts +2 -2
- package/renderables/Select.d.ts +2 -2
- package/renderables/TabSelect.d.ts +2 -2
- package/renderer.d.ts +2 -1
- package/testing.js +1 -1
- package/types.d.ts +2 -1
package/3d.js
CHANGED
package/Renderable.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { EventEmitter } from "events";
|
|
2
2
|
import { type Node as YogaNode } from "yoga-layout";
|
|
3
3
|
import { OptimizedBuffer } from "./buffer";
|
|
4
|
-
import type {
|
|
4
|
+
import type { KeyEvent, PasteEvent } from "./lib/KeyHandler";
|
|
5
5
|
import type { Selection } from "./lib/selection";
|
|
6
6
|
import { type AlignString, type FlexDirectionString, type JustifyString, type OverflowString, type PositionTypeString, type WrapString } from "./lib/yoga.options";
|
|
7
7
|
import { type VNode } from "./renderables/composition/vnode";
|
|
@@ -78,7 +78,7 @@ export interface RenderableOptions<T extends BaseRenderable = BaseRenderable> ex
|
|
|
78
78
|
onMouseOut?: (this: T, event: MouseEvent) => void;
|
|
79
79
|
onMouseScroll?: (this: T, event: MouseEvent) => void;
|
|
80
80
|
onPaste?: (this: T, text: string) => void;
|
|
81
|
-
onKeyDown?: (key:
|
|
81
|
+
onKeyDown?: (key: KeyEvent) => void;
|
|
82
82
|
onSizeChange?: (this: T) => void;
|
|
83
83
|
}
|
|
84
84
|
export declare function isRenderable(obj: any): obj is Renderable;
|
|
@@ -126,8 +126,8 @@ export declare abstract class Renderable extends BaseRenderable {
|
|
|
126
126
|
protected frameBuffer: OptimizedBuffer | null;
|
|
127
127
|
protected _focusable: boolean;
|
|
128
128
|
protected _focused: boolean;
|
|
129
|
-
protected keypressHandler: ((key:
|
|
130
|
-
protected pasteHandler: ((
|
|
129
|
+
protected keypressHandler: ((key: KeyEvent) => void) | null;
|
|
130
|
+
protected pasteHandler: ((event: PasteEvent) => void) | null;
|
|
131
131
|
private _live;
|
|
132
132
|
protected _liveCount: number;
|
|
133
133
|
private _sizeChangeListener;
|
|
@@ -169,7 +169,7 @@ export declare abstract class Renderable extends BaseRenderable {
|
|
|
169
169
|
get liveCount(): number;
|
|
170
170
|
set live(value: boolean);
|
|
171
171
|
protected propagateLiveCount(delta: number): void;
|
|
172
|
-
handleKeyPress?(key:
|
|
172
|
+
handleKeyPress?(key: KeyEvent | string): boolean;
|
|
173
173
|
handlePaste?(text: string): void;
|
|
174
174
|
findDescendantById(id: string): Renderable | undefined;
|
|
175
175
|
requestRender(): void;
|
|
@@ -276,8 +276,8 @@ export declare abstract class Renderable extends BaseRenderable {
|
|
|
276
276
|
set onMouseScroll(handler: ((event: MouseEvent) => void) | undefined);
|
|
277
277
|
set onPaste(handler: ((text: string) => void) | undefined);
|
|
278
278
|
get onPaste(): ((text: string) => void) | undefined;
|
|
279
|
-
set onKeyDown(handler: ((key:
|
|
280
|
-
get onKeyDown(): ((key:
|
|
279
|
+
set onKeyDown(handler: ((key: KeyEvent) => void) | undefined);
|
|
280
|
+
get onKeyDown(): ((key: KeyEvent) => void) | undefined;
|
|
281
281
|
set onSizeChange(handler: (() => void) | undefined);
|
|
282
282
|
get onSizeChange(): (() => void) | undefined;
|
|
283
283
|
private applyEventOptions;
|
|
@@ -2191,6 +2191,62 @@ var ANSI = {
|
|
|
2191
2191
|
};
|
|
2192
2192
|
|
|
2193
2193
|
// src/lib/KeyHandler.ts
|
|
2194
|
+
class KeyEvent {
|
|
2195
|
+
name;
|
|
2196
|
+
ctrl;
|
|
2197
|
+
meta;
|
|
2198
|
+
shift;
|
|
2199
|
+
option;
|
|
2200
|
+
sequence;
|
|
2201
|
+
number;
|
|
2202
|
+
raw;
|
|
2203
|
+
eventType;
|
|
2204
|
+
code;
|
|
2205
|
+
super;
|
|
2206
|
+
hyper;
|
|
2207
|
+
capsLock;
|
|
2208
|
+
numLock;
|
|
2209
|
+
baseCode;
|
|
2210
|
+
_defaultPrevented = false;
|
|
2211
|
+
constructor(key) {
|
|
2212
|
+
this.name = key.name;
|
|
2213
|
+
this.ctrl = key.ctrl;
|
|
2214
|
+
this.meta = key.meta;
|
|
2215
|
+
this.shift = key.shift;
|
|
2216
|
+
this.option = key.option;
|
|
2217
|
+
this.sequence = key.sequence;
|
|
2218
|
+
this.number = key.number;
|
|
2219
|
+
this.raw = key.raw;
|
|
2220
|
+
this.eventType = key.eventType;
|
|
2221
|
+
this.code = key.code;
|
|
2222
|
+
this.super = key.super;
|
|
2223
|
+
this.hyper = key.hyper;
|
|
2224
|
+
this.capsLock = key.capsLock;
|
|
2225
|
+
this.numLock = key.numLock;
|
|
2226
|
+
this.baseCode = key.baseCode;
|
|
2227
|
+
}
|
|
2228
|
+
get defaultPrevented() {
|
|
2229
|
+
return this._defaultPrevented;
|
|
2230
|
+
}
|
|
2231
|
+
preventDefault() {
|
|
2232
|
+
this._defaultPrevented = true;
|
|
2233
|
+
}
|
|
2234
|
+
}
|
|
2235
|
+
|
|
2236
|
+
class PasteEvent {
|
|
2237
|
+
text;
|
|
2238
|
+
_defaultPrevented = false;
|
|
2239
|
+
constructor(text) {
|
|
2240
|
+
this.text = text;
|
|
2241
|
+
}
|
|
2242
|
+
get defaultPrevented() {
|
|
2243
|
+
return this._defaultPrevented;
|
|
2244
|
+
}
|
|
2245
|
+
preventDefault() {
|
|
2246
|
+
this._defaultPrevented = true;
|
|
2247
|
+
}
|
|
2248
|
+
}
|
|
2249
|
+
|
|
2194
2250
|
class KeyHandler extends EventEmitter {
|
|
2195
2251
|
stdin;
|
|
2196
2252
|
useKittyKeyboard;
|
|
@@ -2210,7 +2266,7 @@ class KeyHandler extends EventEmitter {
|
|
|
2210
2266
|
this.pasteBuffer.push(Bun.stripANSI(data));
|
|
2211
2267
|
if (data.endsWith(ANSI.bracketedPasteEnd)) {
|
|
2212
2268
|
this.pasteMode = false;
|
|
2213
|
-
this.emit("paste", this.pasteBuffer.join(""));
|
|
2269
|
+
this.emit("paste", new PasteEvent(this.pasteBuffer.join("")));
|
|
2214
2270
|
this.pasteBuffer = [];
|
|
2215
2271
|
}
|
|
2216
2272
|
return;
|
|
@@ -2218,16 +2274,16 @@ class KeyHandler extends EventEmitter {
|
|
|
2218
2274
|
const parsedKey = parseKeypress(key, { useKittyKeyboard: this.useKittyKeyboard });
|
|
2219
2275
|
switch (parsedKey.eventType) {
|
|
2220
2276
|
case "press":
|
|
2221
|
-
this.emit("keypress", parsedKey);
|
|
2277
|
+
this.emit("keypress", new KeyEvent(parsedKey));
|
|
2222
2278
|
break;
|
|
2223
2279
|
case "repeat":
|
|
2224
|
-
this.emit("keyrepeat", parsedKey);
|
|
2280
|
+
this.emit("keyrepeat", new KeyEvent(parsedKey));
|
|
2225
2281
|
break;
|
|
2226
2282
|
case "release":
|
|
2227
|
-
this.emit("keyrelease", parsedKey);
|
|
2283
|
+
this.emit("keyrelease", new KeyEvent(parsedKey));
|
|
2228
2284
|
break;
|
|
2229
2285
|
default:
|
|
2230
|
-
this.emit("keypress", parsedKey);
|
|
2286
|
+
this.emit("keypress", new KeyEvent(parsedKey));
|
|
2231
2287
|
break;
|
|
2232
2288
|
}
|
|
2233
2289
|
};
|
|
@@ -2238,6 +2294,45 @@ class KeyHandler extends EventEmitter {
|
|
|
2238
2294
|
}
|
|
2239
2295
|
}
|
|
2240
2296
|
|
|
2297
|
+
class InternalKeyHandler extends KeyHandler {
|
|
2298
|
+
renderableHandlers = new Map;
|
|
2299
|
+
constructor(stdin, useKittyKeyboard = false) {
|
|
2300
|
+
super(stdin, useKittyKeyboard);
|
|
2301
|
+
}
|
|
2302
|
+
emit(event, ...args) {
|
|
2303
|
+
return this.emitWithPriority(event, ...args);
|
|
2304
|
+
}
|
|
2305
|
+
emitWithPriority(event, ...args) {
|
|
2306
|
+
const hasGlobalListeners = super.emit(event, ...args);
|
|
2307
|
+
const renderableSet = this.renderableHandlers.get(event);
|
|
2308
|
+
let hasRenderableListeners = false;
|
|
2309
|
+
if (renderableSet && renderableSet.size > 0) {
|
|
2310
|
+
hasRenderableListeners = true;
|
|
2311
|
+
if (event === "keypress" || event === "keyrepeat" || event === "keyrelease" || event === "paste") {
|
|
2312
|
+
const keyEvent = args[0];
|
|
2313
|
+
if (keyEvent.defaultPrevented)
|
|
2314
|
+
return hasGlobalListeners || hasRenderableListeners;
|
|
2315
|
+
}
|
|
2316
|
+
for (const handler of renderableSet) {
|
|
2317
|
+
handler(...args);
|
|
2318
|
+
}
|
|
2319
|
+
}
|
|
2320
|
+
return hasGlobalListeners || hasRenderableListeners;
|
|
2321
|
+
}
|
|
2322
|
+
onInternal(event, handler) {
|
|
2323
|
+
if (!this.renderableHandlers.has(event)) {
|
|
2324
|
+
this.renderableHandlers.set(event, new Set);
|
|
2325
|
+
}
|
|
2326
|
+
this.renderableHandlers.get(event).add(handler);
|
|
2327
|
+
}
|
|
2328
|
+
offInternal(event, handler) {
|
|
2329
|
+
const handlers = this.renderableHandlers.get(event);
|
|
2330
|
+
if (handlers) {
|
|
2331
|
+
handlers.delete(handler);
|
|
2332
|
+
}
|
|
2333
|
+
}
|
|
2334
|
+
}
|
|
2335
|
+
|
|
2241
2336
|
// src/lib/RGBA.ts
|
|
2242
2337
|
class RGBA {
|
|
2243
2338
|
buffer;
|
|
@@ -6550,14 +6645,14 @@ class Renderable extends BaseRenderable {
|
|
|
6550
6645
|
this.handleKeyPress(key);
|
|
6551
6646
|
}
|
|
6552
6647
|
};
|
|
6553
|
-
this.pasteHandler = (
|
|
6554
|
-
this._pasteListener?.call(this, text);
|
|
6648
|
+
this.pasteHandler = (event) => {
|
|
6649
|
+
this._pasteListener?.call(this, event.text);
|
|
6555
6650
|
if (this.handlePaste) {
|
|
6556
|
-
this.handlePaste(text);
|
|
6651
|
+
this.handlePaste(event.text);
|
|
6557
6652
|
}
|
|
6558
6653
|
};
|
|
6559
|
-
this.ctx.
|
|
6560
|
-
this.ctx.
|
|
6654
|
+
this.ctx._internalKeyInput.onInternal("keypress", this.keypressHandler);
|
|
6655
|
+
this.ctx._internalKeyInput.onInternal("paste", this.pasteHandler);
|
|
6561
6656
|
this.emit("focused" /* FOCUSED */);
|
|
6562
6657
|
}
|
|
6563
6658
|
blur() {
|
|
@@ -6566,11 +6661,11 @@ class Renderable extends BaseRenderable {
|
|
|
6566
6661
|
this._focused = false;
|
|
6567
6662
|
this.requestRender();
|
|
6568
6663
|
if (this.keypressHandler) {
|
|
6569
|
-
this.ctx.
|
|
6664
|
+
this.ctx._internalKeyInput.offInternal("keypress", this.keypressHandler);
|
|
6570
6665
|
this.keypressHandler = null;
|
|
6571
6666
|
}
|
|
6572
6667
|
if (this.pasteHandler) {
|
|
6573
|
-
this.ctx.
|
|
6668
|
+
this.ctx._internalKeyInput.offInternal("paste", this.pasteHandler);
|
|
6574
6669
|
this.pasteHandler = null;
|
|
6575
6670
|
}
|
|
6576
6671
|
this.emit("blurred" /* BLURRED */);
|
|
@@ -8707,7 +8802,7 @@ Captured output:
|
|
|
8707
8802
|
process.on("exit", this.exitHandler);
|
|
8708
8803
|
this._console = new TerminalConsole(this, config.consoleOptions);
|
|
8709
8804
|
this.useConsole = config.useConsole ?? true;
|
|
8710
|
-
this._keyHandler = new
|
|
8805
|
+
this._keyHandler = new InternalKeyHandler(this.stdin, config.useKittyKeyboard ?? false);
|
|
8711
8806
|
global.requestAnimationFrame = (callback) => {
|
|
8712
8807
|
const id = CliRenderer.animationFrameId++;
|
|
8713
8808
|
this.animationRequest.set(id, callback);
|
|
@@ -8795,6 +8890,9 @@ Captured output:
|
|
|
8795
8890
|
get keyInput() {
|
|
8796
8891
|
return this._keyHandler;
|
|
8797
8892
|
}
|
|
8893
|
+
get _internalKeyInput() {
|
|
8894
|
+
return this._keyHandler;
|
|
8895
|
+
}
|
|
8798
8896
|
get terminalWidth() {
|
|
8799
8897
|
return this._terminalWidth;
|
|
8800
8898
|
}
|
|
@@ -9572,7 +9670,7 @@ Captured output:
|
|
|
9572
9670
|
}
|
|
9573
9671
|
}
|
|
9574
9672
|
|
|
9575
|
-
export { __toESM, __commonJS, __export, __require, Edge, Gutter, exports_src, BorderChars, getBorderFromSides, getBorderSides, borderCharsToArray, BorderCharArrays, nonAlphanumericKeys, parseKeypress, ANSI, KeyHandler, RGBA, hexToRgb, rgbToHex, hsvToRgb, parseColor, fonts, measureText, getCharacterPositions, coordinateToCharacterIndex, renderFontToFrameBuffer, TextAttributes, DebugOverlayCorner, createTextAttributes, visualizeRenderableTree, isStyledText, StyledText, stringToStyledText, black, red, green, yellow, blue, magenta, cyan, white, brightBlack, brightRed, brightGreen, brightYellow, brightBlue, brightMagenta, brightCyan, brightWhite, bgBlack, bgRed, bgGreen, bgYellow, bgBlue, bgMagenta, bgCyan, bgWhite, bold, italic, underline, strikethrough, dim, reverse, blink, fg, bg, t, SyntaxStyle, hastToStyledText, parseAlign, parseBoxSizing, parseDimension, parseDirection, parseDisplay, parseEdge, parseFlexDirection, parseGutter, parseJustify, parseLogLevel, parseMeasureMode, parseOverflow, parsePositionType, parseUnit, parseWrap, MouseParser, Selection, convertGlobalToLocalSelection, ASCIIFontSelectionHelper, envRegistry, registerEnvVar, generateEnvMarkdown, generateEnvColored, env, TextBuffer, LogLevel2 as LogLevel, setRenderLibPath, resolveRenderLib, OptimizedBuffer, h, isVNode, maybeMakeRenderable, wrapWithDelegates, instantiate, delegate, isValidPercentage, LayoutEvents, RenderableEvents, isRenderable, BaseRenderable, Renderable, RootRenderable, capture, ConsolePosition, TerminalConsole, getObjectsInViewport, MouseEvent, MouseButton, createCliRenderer, CliRenderEvents, CliRenderer };
|
|
9673
|
+
export { __toESM, __commonJS, __export, __require, Edge, Gutter, exports_src, BorderChars, getBorderFromSides, getBorderSides, borderCharsToArray, BorderCharArrays, nonAlphanumericKeys, parseKeypress, ANSI, KeyEvent, PasteEvent, KeyHandler, InternalKeyHandler, RGBA, hexToRgb, rgbToHex, hsvToRgb, parseColor, fonts, measureText, getCharacterPositions, coordinateToCharacterIndex, renderFontToFrameBuffer, TextAttributes, DebugOverlayCorner, createTextAttributes, visualizeRenderableTree, isStyledText, StyledText, stringToStyledText, black, red, green, yellow, blue, magenta, cyan, white, brightBlack, brightRed, brightGreen, brightYellow, brightBlue, brightMagenta, brightCyan, brightWhite, bgBlack, bgRed, bgGreen, bgYellow, bgBlue, bgMagenta, bgCyan, bgWhite, bold, italic, underline, strikethrough, dim, reverse, blink, fg, bg, t, SyntaxStyle, hastToStyledText, parseAlign, parseBoxSizing, parseDimension, parseDirection, parseDisplay, parseEdge, parseFlexDirection, parseGutter, parseJustify, parseLogLevel, parseMeasureMode, parseOverflow, parsePositionType, parseUnit, parseWrap, MouseParser, Selection, convertGlobalToLocalSelection, ASCIIFontSelectionHelper, envRegistry, registerEnvVar, generateEnvMarkdown, generateEnvColored, env, TextBuffer, LogLevel2 as LogLevel, setRenderLibPath, resolveRenderLib, OptimizedBuffer, h, isVNode, maybeMakeRenderable, wrapWithDelegates, instantiate, delegate, isValidPercentage, LayoutEvents, RenderableEvents, isRenderable, BaseRenderable, Renderable, RootRenderable, capture, ConsolePosition, TerminalConsole, getObjectsInViewport, MouseEvent, MouseButton, createCliRenderer, CliRenderEvents, CliRenderer };
|
|
9576
9674
|
|
|
9577
|
-
//# debugId=
|
|
9578
|
-
//# sourceMappingURL=index-
|
|
9675
|
+
//# debugId=16DF4272CB23A07264756E2164756E21
|
|
9676
|
+
//# sourceMappingURL=index-bq6h36ne.js.map
|