@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 CHANGED
@@ -5,7 +5,7 @@ import {
5
5
  __export,
6
6
  __require,
7
7
  __toESM
8
- } from "./index-qgmnmj4t.js";
8
+ } from "./index-fzz09cad.js";
9
9
 
10
10
  // ../../node_modules/omggif/omggif.js
11
11
  var require_omggif = __commonJS((exports) => {
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
@@ -24,4 +24,6 @@ export declare const ANSI: {
24
24
  enableSGRMouseMode: string;
25
25
  disableSGRMouseMode: string;
26
26
  clearRendererSpace: (height: number) => string;
27
+ bracketedPasteStart: string;
28
+ bracketedPasteEnd: string;
27
29
  };
@@ -2175,21 +2175,44 @@ var parseKeypress = (s = "", options = {}) => {
2175
2175
  // src/lib/KeyHandler.ts
2176
2176
  import { EventEmitter } from "events";
2177
2177
 
2178
- // src/singleton.ts
2179
- var singletonCacheSymbol = Symbol.for("@opentui/core/singleton");
2180
- function singleton(key, factory) {
2181
- const bag = globalThis[singletonCacheSymbol] ??= {};
2182
- if (!(key in bag)) {
2183
- bag[key] = factory();
2184
- }
2185
- return bag[key];
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, KeyHandler, getKeyHandler, 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 };
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=79C4862CCD9B2E9164756E2164756E21
9374
- //# sourceMappingURL=index-qgmnmj4t.js.map
9401
+ //# debugId=A96D84F0008C20CA64756E2164756E21
9402
+ //# sourceMappingURL=index-fzz09cad.js.map