@opentui/core 0.0.0-20250922-ce4434a8 → 0.0.0-20250922-8d3a9252
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-fzz09cad.js} +78 -50
- package/{index-qgmnmj4t.js.map → index-fzz09cad.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,16 +2259,8 @@ class KeyHandler extends EventEmitter {
|
|
|
2223
2259
|
if (this.stdin.setRawMode) {
|
|
2224
2260
|
this.stdin.setRawMode(false);
|
|
2225
2261
|
}
|
|
2226
|
-
keyHandler = null;
|
|
2227
2262
|
}
|
|
2228
2263
|
}
|
|
2229
|
-
var keyHandler = null;
|
|
2230
|
-
function getKeyHandler(useKittyKeyboard = false) {
|
|
2231
|
-
if (!keyHandler) {
|
|
2232
|
-
keyHandler = singleton("KeyHandler", () => new KeyHandler(process.stdin, useKittyKeyboard));
|
|
2233
|
-
}
|
|
2234
|
-
return keyHandler;
|
|
2235
|
-
}
|
|
2236
2264
|
|
|
2237
2265
|
// src/lib/RGBA.ts
|
|
2238
2266
|
class RGBA {
|
|
@@ -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() {
|
|
@@ -7204,6 +7245,12 @@ class Renderable extends BaseRenderable {
|
|
|
7204
7245
|
else
|
|
7205
7246
|
delete this._mouseListeners["scroll"];
|
|
7206
7247
|
}
|
|
7248
|
+
set onPaste(handler) {
|
|
7249
|
+
this._pasteListener = handler;
|
|
7250
|
+
}
|
|
7251
|
+
get onPaste() {
|
|
7252
|
+
return this._pasteListener;
|
|
7253
|
+
}
|
|
7207
7254
|
set onKeyDown(handler) {
|
|
7208
7255
|
if (handler)
|
|
7209
7256
|
this._keyListeners["down"] = handler;
|
|
@@ -7230,6 +7277,7 @@ class Renderable extends BaseRenderable {
|
|
|
7230
7277
|
this.onMouseOver = options.onMouseOver;
|
|
7231
7278
|
this.onMouseOut = options.onMouseOut;
|
|
7232
7279
|
this.onMouseScroll = options.onMouseScroll;
|
|
7280
|
+
this.onPaste = options.onPaste;
|
|
7233
7281
|
this.onKeyDown = options.onKeyDown;
|
|
7234
7282
|
this.onSizeChange = options.onSizeChange;
|
|
7235
7283
|
}
|
|
@@ -7514,6 +7562,16 @@ class CapturedWritableStream extends Writable {
|
|
|
7514
7562
|
}
|
|
7515
7563
|
}
|
|
7516
7564
|
|
|
7565
|
+
// src/singleton.ts
|
|
7566
|
+
var singletonCacheSymbol = Symbol.for("@opentui/core/singleton");
|
|
7567
|
+
function singleton(key, factory) {
|
|
7568
|
+
const bag = globalThis[singletonCacheSymbol] ??= {};
|
|
7569
|
+
if (!(key in bag)) {
|
|
7570
|
+
bag[key] = factory();
|
|
7571
|
+
}
|
|
7572
|
+
return bag[key];
|
|
7573
|
+
}
|
|
7574
|
+
|
|
7517
7575
|
// src/console.ts
|
|
7518
7576
|
function getCallerInfo() {
|
|
7519
7577
|
const err = new Error;
|
|
@@ -8115,35 +8173,6 @@ class TerminalConsole extends EventEmitter4 {
|
|
|
8115
8173
|
}
|
|
8116
8174
|
}
|
|
8117
8175
|
|
|
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
8176
|
// src/renderer.ts
|
|
8148
8177
|
import { EventEmitter as EventEmitter5 } from "events";
|
|
8149
8178
|
|
|
@@ -8283,7 +8312,6 @@ var rendererTracker = singleton("RendererTracker", () => {
|
|
|
8283
8312
|
removeRenderer: (renderer) => {
|
|
8284
8313
|
renderers.delete(renderer);
|
|
8285
8314
|
if (renderers.size === 0) {
|
|
8286
|
-
getKeyHandler().destroy();
|
|
8287
8315
|
process.stdin.pause();
|
|
8288
8316
|
}
|
|
8289
8317
|
}
|
|
@@ -9368,7 +9396,7 @@ Captured output:
|
|
|
9368
9396
|
}
|
|
9369
9397
|
}
|
|
9370
9398
|
|
|
9371
|
-
export { __toESM, __commonJS, __export, __require, Edge, Gutter, exports_src, BorderChars, getBorderFromSides, getBorderSides, borderCharsToArray, BorderCharArrays, nonAlphanumericKeys, parseKeypress,
|
|
9399
|
+
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
9400
|
|
|
9373
|
-
//# debugId=
|
|
9374
|
-
//# sourceMappingURL=index-
|
|
9401
|
+
//# debugId=A96D84F0008C20CA64756E2164756E21
|
|
9402
|
+
//# sourceMappingURL=index-fzz09cad.js.map
|