@opentui/core 0.0.0-20250922-ce4434a8 → 0.0.0-20250922-1555550d
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 +6 -0
- package/ansi.d.ts +2 -0
- package/{index-qgmnmj4t.js → index-eqy4135c.js} +83 -53
- package/{index-qgmnmj4t.js.map → index-eqy4135c.js.map} +8 -8
- package/index.js +2 -4
- package/index.js.map +3 -3
- package/lib/KeyHandler.d.ts +3 -1
- package/package.json +7 -7
- package/renderables/Input.d.ts +2 -2
- package/testing/mock-keys.d.ts +1 -0
- package/testing.js +8 -3
- package/testing.js.map +3 -3
package/3d.js
CHANGED
package/Renderable.d.ts
CHANGED
|
@@ -77,6 +77,7 @@ export interface RenderableOptions<T extends BaseRenderable = BaseRenderable> ex
|
|
|
77
77
|
onMouseOver?: (this: T, event: MouseEvent) => void;
|
|
78
78
|
onMouseOut?: (this: T, event: MouseEvent) => void;
|
|
79
79
|
onMouseScroll?: (this: T, event: MouseEvent) => void;
|
|
80
|
+
onPaste?: (this: T, text: string) => void;
|
|
80
81
|
onKeyDown?: (key: ParsedKey) => void;
|
|
81
82
|
onSizeChange?: (this: T) => void;
|
|
82
83
|
}
|
|
@@ -126,11 +127,13 @@ export declare abstract class Renderable extends BaseRenderable {
|
|
|
126
127
|
protected _focusable: boolean;
|
|
127
128
|
protected _focused: boolean;
|
|
128
129
|
protected keypressHandler: ((key: ParsedKey) => void) | null;
|
|
130
|
+
protected pasteHandler: ((text: string) => void) | null;
|
|
129
131
|
private _live;
|
|
130
132
|
protected _liveCount: number;
|
|
131
133
|
private _sizeChangeListener;
|
|
132
134
|
private _mouseListener;
|
|
133
135
|
private _mouseListeners;
|
|
136
|
+
private _pasteListener;
|
|
134
137
|
private _keyListeners;
|
|
135
138
|
protected yogaNode: YogaNode;
|
|
136
139
|
protected _positionType: PositionTypeString;
|
|
@@ -167,6 +170,7 @@ export declare abstract class Renderable extends BaseRenderable {
|
|
|
167
170
|
set live(value: boolean);
|
|
168
171
|
protected propagateLiveCount(delta: number): void;
|
|
169
172
|
handleKeyPress?(key: ParsedKey | string): boolean;
|
|
173
|
+
handlePaste?(text: string): void;
|
|
170
174
|
findDescendantById(id: string): Renderable | undefined;
|
|
171
175
|
requestRender(): void;
|
|
172
176
|
get translateX(): number;
|
|
@@ -270,6 +274,8 @@ export declare abstract class Renderable extends BaseRenderable {
|
|
|
270
274
|
set onMouseOver(handler: ((event: MouseEvent) => void) | undefined);
|
|
271
275
|
set onMouseOut(handler: ((event: MouseEvent) => void) | undefined);
|
|
272
276
|
set onMouseScroll(handler: ((event: MouseEvent) => void) | undefined);
|
|
277
|
+
set onPaste(handler: ((text: string) => void) | undefined);
|
|
278
|
+
get onPaste(): ((text: string) => void) | undefined;
|
|
273
279
|
set onKeyDown(handler: ((key: ParsedKey) => void) | undefined);
|
|
274
280
|
get onKeyDown(): ((key: ParsedKey) => void) | undefined;
|
|
275
281
|
set onSizeChange(handler: (() => void) | undefined);
|
package/ansi.d.ts
CHANGED
|
@@ -2175,21 +2175,44 @@ var parseKeypress = (s = "", options = {}) => {
|
|
|
2175
2175
|
// src/lib/KeyHandler.ts
|
|
2176
2176
|
import { EventEmitter } from "events";
|
|
2177
2177
|
|
|
2178
|
-
// src/
|
|
2179
|
-
var
|
|
2180
|
-
|
|
2181
|
-
|
|
2182
|
-
|
|
2183
|
-
|
|
2184
|
-
|
|
2185
|
-
|
|
2186
|
-
|
|
2178
|
+
// src/ansi.ts
|
|
2179
|
+
var ANSI = {
|
|
2180
|
+
switchToAlternateScreen: "\x1B[?1049h",
|
|
2181
|
+
switchToMainScreen: "\x1B[?1049l",
|
|
2182
|
+
reset: "\x1B[0m",
|
|
2183
|
+
hideCursor: "\x1B[?25l",
|
|
2184
|
+
showCursor: "\x1B[?25h",
|
|
2185
|
+
resetCursorColor: "\x1B]12;default\x07",
|
|
2186
|
+
saveCursorState: "\x1B[s",
|
|
2187
|
+
restoreCursorState: "\x1B[u",
|
|
2188
|
+
queryPixelSize: "\x1B[14t",
|
|
2189
|
+
scrollDown: (lines) => `\x1B[${lines}T`,
|
|
2190
|
+
scrollUp: (lines) => `\x1B[${lines}S`,
|
|
2191
|
+
moveCursor: (row, col) => `\x1B[${row};${col}H`,
|
|
2192
|
+
moveCursorAndClear: (row, col) => `\x1B[${row};${col}H\x1B[J`,
|
|
2193
|
+
clearFromCursor: "\x1B[J",
|
|
2194
|
+
setRgbBackground: (r, g, b) => `\x1B[48;2;${r};${g};${b}m`,
|
|
2195
|
+
resetBackground: "\x1B[49m",
|
|
2196
|
+
enableMouseTracking: "\x1B[?1000h",
|
|
2197
|
+
disableMouseTracking: "\x1B[?1000l",
|
|
2198
|
+
enableButtonEventTracking: "\x1B[?1002h",
|
|
2199
|
+
disableButtonEventTracking: "\x1B[?1002l",
|
|
2200
|
+
enableAnyEventTracking: "\x1B[?1003h",
|
|
2201
|
+
disableAnyEventTracking: "\x1B[?1003l",
|
|
2202
|
+
enableSGRMouseMode: "\x1B[?1006h",
|
|
2203
|
+
disableSGRMouseMode: "\x1B[?1006l",
|
|
2204
|
+
clearRendererSpace: (height) => `\x1B[${height}A\x1B[1G\x1B[J`,
|
|
2205
|
+
bracketedPasteStart: "\x1B[200~",
|
|
2206
|
+
bracketedPasteEnd: "\x1B[201~"
|
|
2207
|
+
};
|
|
2187
2208
|
|
|
2188
2209
|
// src/lib/KeyHandler.ts
|
|
2189
2210
|
class KeyHandler extends EventEmitter {
|
|
2190
2211
|
stdin;
|
|
2191
2212
|
useKittyKeyboard;
|
|
2192
2213
|
listener;
|
|
2214
|
+
pasteMode = false;
|
|
2215
|
+
pasteBuffer = [];
|
|
2193
2216
|
constructor(stdin, useKittyKeyboard = false) {
|
|
2194
2217
|
super();
|
|
2195
2218
|
this.stdin = stdin || process.stdin;
|
|
@@ -2200,6 +2223,19 @@ class KeyHandler extends EventEmitter {
|
|
|
2200
2223
|
this.stdin.resume();
|
|
2201
2224
|
this.stdin.setEncoding("utf8");
|
|
2202
2225
|
this.listener = (key) => {
|
|
2226
|
+
let data = key.toString();
|
|
2227
|
+
if (data.startsWith(ANSI.bracketedPasteStart)) {
|
|
2228
|
+
this.pasteMode = true;
|
|
2229
|
+
}
|
|
2230
|
+
if (this.pasteMode) {
|
|
2231
|
+
this.pasteBuffer.push(Bun.stripANSI(data));
|
|
2232
|
+
if (data.endsWith(ANSI.bracketedPasteEnd)) {
|
|
2233
|
+
this.pasteMode = false;
|
|
2234
|
+
this.emit("paste", this.pasteBuffer.join(""));
|
|
2235
|
+
this.pasteBuffer = [];
|
|
2236
|
+
}
|
|
2237
|
+
return;
|
|
2238
|
+
}
|
|
2203
2239
|
const parsedKey = parseKeypress(key, { useKittyKeyboard: this.useKittyKeyboard });
|
|
2204
2240
|
switch (parsedKey.eventType) {
|
|
2205
2241
|
case "press":
|
|
@@ -2223,15 +2259,7 @@ class KeyHandler extends EventEmitter {
|
|
|
2223
2259
|
if (this.stdin.setRawMode) {
|
|
2224
2260
|
this.stdin.setRawMode(false);
|
|
2225
2261
|
}
|
|
2226
|
-
keyHandler = null;
|
|
2227
|
-
}
|
|
2228
|
-
}
|
|
2229
|
-
var keyHandler = null;
|
|
2230
|
-
function getKeyHandler(useKittyKeyboard = false) {
|
|
2231
|
-
if (!keyHandler) {
|
|
2232
|
-
keyHandler = singleton("KeyHandler", () => new KeyHandler(process.stdin, useKittyKeyboard));
|
|
2233
2262
|
}
|
|
2234
|
-
return keyHandler;
|
|
2235
2263
|
}
|
|
2236
2264
|
|
|
2237
2265
|
// src/lib/RGBA.ts
|
|
@@ -6251,11 +6279,13 @@ class Renderable extends BaseRenderable {
|
|
|
6251
6279
|
_focusable = false;
|
|
6252
6280
|
_focused = false;
|
|
6253
6281
|
keypressHandler = null;
|
|
6282
|
+
pasteHandler = null;
|
|
6254
6283
|
_live = false;
|
|
6255
6284
|
_liveCount = 0;
|
|
6256
6285
|
_sizeChangeListener = undefined;
|
|
6257
6286
|
_mouseListener = null;
|
|
6258
6287
|
_mouseListeners = {};
|
|
6288
|
+
_pasteListener = undefined;
|
|
6259
6289
|
_keyListeners = {};
|
|
6260
6290
|
yogaNode;
|
|
6261
6291
|
_positionType = "relative";
|
|
@@ -6365,7 +6395,14 @@ class Renderable extends BaseRenderable {
|
|
|
6365
6395
|
this.handleKeyPress(key);
|
|
6366
6396
|
}
|
|
6367
6397
|
};
|
|
6398
|
+
this.pasteHandler = (text) => {
|
|
6399
|
+
this._pasteListener?.call(this, text);
|
|
6400
|
+
if (this.handlePaste) {
|
|
6401
|
+
this.handlePaste(text);
|
|
6402
|
+
}
|
|
6403
|
+
};
|
|
6368
6404
|
this.ctx.keyInput.on("keypress", this.keypressHandler);
|
|
6405
|
+
this.ctx.keyInput.on("paste", this.pasteHandler);
|
|
6369
6406
|
this.emit("focused" /* FOCUSED */);
|
|
6370
6407
|
}
|
|
6371
6408
|
blur() {
|
|
@@ -6377,6 +6414,10 @@ class Renderable extends BaseRenderable {
|
|
|
6377
6414
|
this.ctx.keyInput.off("keypress", this.keypressHandler);
|
|
6378
6415
|
this.keypressHandler = null;
|
|
6379
6416
|
}
|
|
6417
|
+
if (this.pasteHandler) {
|
|
6418
|
+
this.ctx.keyInput.off("paste", this.pasteHandler);
|
|
6419
|
+
this.pasteHandler = null;
|
|
6420
|
+
}
|
|
6380
6421
|
this.emit("blurred" /* BLURRED */);
|
|
6381
6422
|
}
|
|
6382
6423
|
get focused() {
|
|
@@ -6405,9 +6446,11 @@ class Renderable extends BaseRenderable {
|
|
|
6405
6446
|
for (const child of this._childrenInLayoutOrder) {
|
|
6406
6447
|
if (child.id === id)
|
|
6407
6448
|
return child;
|
|
6408
|
-
|
|
6409
|
-
|
|
6410
|
-
|
|
6449
|
+
if (isRenderable(child)) {
|
|
6450
|
+
const found = child.findDescendantById(id);
|
|
6451
|
+
if (found)
|
|
6452
|
+
return found;
|
|
6453
|
+
}
|
|
6411
6454
|
}
|
|
6412
6455
|
return;
|
|
6413
6456
|
}
|
|
@@ -7204,6 +7247,12 @@ class Renderable extends BaseRenderable {
|
|
|
7204
7247
|
else
|
|
7205
7248
|
delete this._mouseListeners["scroll"];
|
|
7206
7249
|
}
|
|
7250
|
+
set onPaste(handler) {
|
|
7251
|
+
this._pasteListener = handler;
|
|
7252
|
+
}
|
|
7253
|
+
get onPaste() {
|
|
7254
|
+
return this._pasteListener;
|
|
7255
|
+
}
|
|
7207
7256
|
set onKeyDown(handler) {
|
|
7208
7257
|
if (handler)
|
|
7209
7258
|
this._keyListeners["down"] = handler;
|
|
@@ -7230,6 +7279,7 @@ class Renderable extends BaseRenderable {
|
|
|
7230
7279
|
this.onMouseOver = options.onMouseOver;
|
|
7231
7280
|
this.onMouseOut = options.onMouseOut;
|
|
7232
7281
|
this.onMouseScroll = options.onMouseScroll;
|
|
7282
|
+
this.onPaste = options.onPaste;
|
|
7233
7283
|
this.onKeyDown = options.onKeyDown;
|
|
7234
7284
|
this.onSizeChange = options.onSizeChange;
|
|
7235
7285
|
}
|
|
@@ -7514,6 +7564,16 @@ class CapturedWritableStream extends Writable {
|
|
|
7514
7564
|
}
|
|
7515
7565
|
}
|
|
7516
7566
|
|
|
7567
|
+
// src/singleton.ts
|
|
7568
|
+
var singletonCacheSymbol = Symbol.for("@opentui/core/singleton");
|
|
7569
|
+
function singleton(key, factory) {
|
|
7570
|
+
const bag = globalThis[singletonCacheSymbol] ??= {};
|
|
7571
|
+
if (!(key in bag)) {
|
|
7572
|
+
bag[key] = factory();
|
|
7573
|
+
}
|
|
7574
|
+
return bag[key];
|
|
7575
|
+
}
|
|
7576
|
+
|
|
7517
7577
|
// src/console.ts
|
|
7518
7578
|
function getCallerInfo() {
|
|
7519
7579
|
const err = new Error;
|
|
@@ -8115,35 +8175,6 @@ class TerminalConsole extends EventEmitter4 {
|
|
|
8115
8175
|
}
|
|
8116
8176
|
}
|
|
8117
8177
|
|
|
8118
|
-
// src/ansi.ts
|
|
8119
|
-
var ANSI = {
|
|
8120
|
-
switchToAlternateScreen: "\x1B[?1049h",
|
|
8121
|
-
switchToMainScreen: "\x1B[?1049l",
|
|
8122
|
-
reset: "\x1B[0m",
|
|
8123
|
-
hideCursor: "\x1B[?25l",
|
|
8124
|
-
showCursor: "\x1B[?25h",
|
|
8125
|
-
resetCursorColor: "\x1B]12;default\x07",
|
|
8126
|
-
saveCursorState: "\x1B[s",
|
|
8127
|
-
restoreCursorState: "\x1B[u",
|
|
8128
|
-
queryPixelSize: "\x1B[14t",
|
|
8129
|
-
scrollDown: (lines) => `\x1B[${lines}T`,
|
|
8130
|
-
scrollUp: (lines) => `\x1B[${lines}S`,
|
|
8131
|
-
moveCursor: (row, col) => `\x1B[${row};${col}H`,
|
|
8132
|
-
moveCursorAndClear: (row, col) => `\x1B[${row};${col}H\x1B[J`,
|
|
8133
|
-
clearFromCursor: "\x1B[J",
|
|
8134
|
-
setRgbBackground: (r, g, b) => `\x1B[48;2;${r};${g};${b}m`,
|
|
8135
|
-
resetBackground: "\x1B[49m",
|
|
8136
|
-
enableMouseTracking: "\x1B[?1000h",
|
|
8137
|
-
disableMouseTracking: "\x1B[?1000l",
|
|
8138
|
-
enableButtonEventTracking: "\x1B[?1002h",
|
|
8139
|
-
disableButtonEventTracking: "\x1B[?1002l",
|
|
8140
|
-
enableAnyEventTracking: "\x1B[?1003h",
|
|
8141
|
-
disableAnyEventTracking: "\x1B[?1003l",
|
|
8142
|
-
enableSGRMouseMode: "\x1B[?1006h",
|
|
8143
|
-
disableSGRMouseMode: "\x1B[?1006l",
|
|
8144
|
-
clearRendererSpace: (height) => `\x1B[${height}A\x1B[1G\x1B[J`
|
|
8145
|
-
};
|
|
8146
|
-
|
|
8147
8178
|
// src/renderer.ts
|
|
8148
8179
|
import { EventEmitter as EventEmitter5 } from "events";
|
|
8149
8180
|
|
|
@@ -8283,7 +8314,6 @@ var rendererTracker = singleton("RendererTracker", () => {
|
|
|
8283
8314
|
removeRenderer: (renderer) => {
|
|
8284
8315
|
renderers.delete(renderer);
|
|
8285
8316
|
if (renderers.size === 0) {
|
|
8286
|
-
getKeyHandler().destroy();
|
|
8287
8317
|
process.stdin.pause();
|
|
8288
8318
|
}
|
|
8289
8319
|
}
|
|
@@ -9368,7 +9398,7 @@ Captured output:
|
|
|
9368
9398
|
}
|
|
9369
9399
|
}
|
|
9370
9400
|
|
|
9371
|
-
export { __toESM, __commonJS, __export, __require, Edge, Gutter, exports_src, BorderChars, getBorderFromSides, getBorderSides, borderCharsToArray, BorderCharArrays, nonAlphanumericKeys, parseKeypress,
|
|
9401
|
+
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, 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 };
|
|
9372
9402
|
|
|
9373
|
-
//# debugId=
|
|
9374
|
-
//# sourceMappingURL=index-
|
|
9403
|
+
//# debugId=C47A8261B5915FF064756E2164756E21
|
|
9404
|
+
//# sourceMappingURL=index-eqy4135c.js.map
|