@opentui/core 0.0.0-20250919-6683564e → 0.0.0-20250922-2a20774e

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-0yx9rnxg.js";
8
+ } from "./index-mtc20a8y.js";
9
9
 
10
10
  // ../../node_modules/omggif/omggif.js
11
11
  var require_omggif = __commonJS((exports) => {
package/Renderable.d.ts CHANGED
@@ -228,6 +228,11 @@ export declare abstract class Renderable extends BaseRenderable {
228
228
  protected onLayoutResize(width: number, height: number): void;
229
229
  protected handleFrameBufferResize(width: number, height: number): void;
230
230
  protected createFrameBuffer(): void;
231
+ /**
232
+ * This will be called during a render pass.
233
+ * Requesting a render during a render pass will drop the requested render.
234
+ * If you need to request a render during a render pass, use process.nextTick.
235
+ */
231
236
  protected onResize(width: number, height: number): void;
232
237
  private replaceParent;
233
238
  private _forceLayoutUpdateFor;
@@ -290,13 +295,11 @@ interface RenderCommandRender extends RenderCommandBase {
290
295
  }
291
296
  export type RenderCommand = RenderCommandPushScissorRect | RenderCommandPopScissorRect | RenderCommandRender;
292
297
  export declare class RootRenderable extends Renderable {
293
- private yogaConfig;
294
298
  private renderList;
295
299
  constructor(ctx: RenderContext);
296
300
  render(buffer: OptimizedBuffer, deltaTime: number): void;
297
301
  protected propagateLiveCount(delta: number): void;
298
302
  calculateLayout(): void;
299
303
  resize(width: number, height: number): void;
300
- protected destroySelf(): void;
301
304
  }
302
305
  export {};
package/ansi.d.ts CHANGED
@@ -23,6 +23,5 @@ export declare const ANSI: {
23
23
  disableAnyEventTracking: string;
24
24
  enableSGRMouseMode: string;
25
25
  disableSGRMouseMode: string;
26
- makeRoomForRenderer: (height: number) => string;
27
26
  clearRendererSpace: (height: number) => string;
28
27
  };
@@ -2189,6 +2189,7 @@ function singleton(key, factory) {
2189
2189
  class KeyHandler extends EventEmitter {
2190
2190
  stdin;
2191
2191
  useKittyKeyboard;
2192
+ listener;
2192
2193
  constructor(stdin, useKittyKeyboard = false) {
2193
2194
  super();
2194
2195
  this.stdin = stdin || process.stdin;
@@ -2198,7 +2199,7 @@ class KeyHandler extends EventEmitter {
2198
2199
  }
2199
2200
  this.stdin.resume();
2200
2201
  this.stdin.setEncoding("utf8");
2201
- this.stdin.on("data", (key) => {
2202
+ this.listener = (key) => {
2202
2203
  const parsedKey = parseKeypress(key, { useKittyKeyboard: this.useKittyKeyboard });
2203
2204
  switch (parsedKey.eventType) {
2204
2205
  case "press":
@@ -2214,10 +2215,15 @@ class KeyHandler extends EventEmitter {
2214
2215
  this.emit("keypress", parsedKey);
2215
2216
  break;
2216
2217
  }
2217
- });
2218
+ };
2219
+ this.stdin.on("data", this.listener);
2218
2220
  }
2219
2221
  destroy() {
2220
- this.stdin.removeAllListeners("data");
2222
+ this.stdin.removeListener("data", this.listener);
2223
+ if (this.stdin.setRawMode) {
2224
+ this.stdin.setRawMode(false);
2225
+ }
2226
+ keyHandler = null;
2221
2227
  }
2222
2228
  }
2223
2229
  var keyHandler = null;
@@ -6222,6 +6228,9 @@ class BaseRenderable extends EventEmitter2 {
6222
6228
  this._visible = value;
6223
6229
  }
6224
6230
  }
6231
+ var yogaConfig = src_default.Config.create();
6232
+ yogaConfig.setUseWebDefaults(false);
6233
+ yogaConfig.setPointScaleFactor(1);
6225
6234
 
6226
6235
  class Renderable extends BaseRenderable {
6227
6236
  static renderablesByNumber = new Map;
@@ -6283,7 +6292,7 @@ class Renderable extends BaseRenderable {
6283
6292
  this.buffered = options.buffered ?? false;
6284
6293
  this._live = options.live ?? false;
6285
6294
  this._liveCount = this._live && this._visible ? 1 : 0;
6286
- this.yogaNode = src_default.Node.create();
6295
+ this.yogaNode = src_default.Node.create(yogaConfig);
6287
6296
  this.yogaNode.setDisplay(this._visible ? Display.Flex : Display.None);
6288
6297
  this.setupYogaProperties(options);
6289
6298
  this.applyEventOptions(options);
@@ -6551,8 +6560,7 @@ class Renderable extends BaseRenderable {
6551
6560
  if (options.flexShrink !== undefined) {
6552
6561
  node.setFlexShrink(options.flexShrink);
6553
6562
  } else {
6554
- const shrinkValue = options.flexGrow && options.flexGrow > 0 ? 1 : 0;
6555
- node.setFlexShrink(shrinkValue);
6563
+ node.setFlexShrink(1);
6556
6564
  }
6557
6565
  if (options.flexDirection !== undefined) {
6558
6566
  node.setFlexDirection(parseFlexDirection(options.flexDirection));
@@ -7228,17 +7236,13 @@ class Renderable extends BaseRenderable {
7228
7236
  }
7229
7237
 
7230
7238
  class RootRenderable extends Renderable {
7231
- yogaConfig;
7232
7239
  renderList = [];
7233
7240
  constructor(ctx) {
7234
7241
  super(ctx, { id: "__root__", zIndex: 0, visible: true, width: ctx.width, height: ctx.height, enableLayout: true });
7235
- this.yogaConfig = src_default.Config.create();
7236
- this.yogaConfig.setUseWebDefaults(false);
7237
- this.yogaConfig.setPointScaleFactor(1);
7238
7242
  if (this.yogaNode) {
7239
7243
  this.yogaNode.free();
7240
7244
  }
7241
- this.yogaNode = src_default.Node.create(this.yogaConfig);
7245
+ this.yogaNode = src_default.Node.create(yogaConfig);
7242
7246
  this.yogaNode.setWidth(ctx.width);
7243
7247
  this.yogaNode.setHeight(ctx.height);
7244
7248
  this.yogaNode.setFlexDirection(FlexDirection.Column);
@@ -7288,11 +7292,6 @@ class RootRenderable extends Renderable {
7288
7292
  this.height = height;
7289
7293
  this.emit("resized" /* RESIZED */, { width, height });
7290
7294
  }
7291
- destroySelf() {
7292
- try {
7293
- this.yogaConfig.free();
7294
- } catch (error) {}
7295
- }
7296
7295
  }
7297
7296
 
7298
7297
  // src/renderables/composition/vnode.ts
@@ -7548,12 +7547,12 @@ class TerminalConsoleCache extends EventEmitter4 {
7548
7547
  super();
7549
7548
  }
7550
7549
  activate() {
7550
+ if (process.env.OTUI_USE_CONSOLE === "false")
7551
+ return;
7551
7552
  this.setupConsoleCapture();
7552
7553
  this.overrideConsoleMethods();
7553
7554
  }
7554
7555
  setupConsoleCapture() {
7555
- if (process.env.OTUI_USE_CONSOLE === "false")
7556
- return;
7557
7556
  const mockStdout = new CapturedWritableStream("stdout", capture);
7558
7557
  const mockStderr = new CapturedWritableStream("stderr", capture);
7559
7558
  global.console = new Console({
@@ -8142,8 +8141,6 @@ var ANSI = {
8142
8141
  disableAnyEventTracking: "\x1B[?1003l",
8143
8142
  enableSGRMouseMode: "\x1B[?1006h",
8144
8143
  disableSGRMouseMode: "\x1B[?1006l",
8145
- makeRoomForRenderer: (height) => `
8146
- `.repeat(height) + `\x1B[${height}A`,
8147
8144
  clearRendererSpace: (height) => `\x1B[${height}A\x1B[1G\x1B[J`
8148
8145
  };
8149
8146
 
@@ -8277,6 +8274,21 @@ singleton("ProcessExitSignals", () => {
8277
8274
  });
8278
8275
  });
8279
8276
  });
8277
+ var rendererTracker = singleton("RendererTracker", () => {
8278
+ const renderers = new Set;
8279
+ return {
8280
+ addRenderer: (renderer) => {
8281
+ renderers.add(renderer);
8282
+ },
8283
+ removeRenderer: (renderer) => {
8284
+ renderers.delete(renderer);
8285
+ if (renderers.size === 0) {
8286
+ getKeyHandler().destroy();
8287
+ process.stdin.pause();
8288
+ }
8289
+ }
8290
+ };
8291
+ });
8280
8292
  async function createCliRenderer(config = {}) {
8281
8293
  if (process.argv.includes("--delay-start")) {
8282
8294
  await new Promise((resolve) => setTimeout(resolve, 5000));
@@ -8408,17 +8420,7 @@ class CliRenderer extends EventEmitter5 {
8408
8420
  this.realStdoutWrite.call(this.stdout, `
8409
8421
  === FATAL ERROR OCCURRED ===
8410
8422
  `);
8411
- this.realStdoutWrite.call(this.stdout, `Console cache:
8412
- `);
8413
- this.realStdoutWrite.call(this.stdout, this.console.getCachedLogs());
8414
- this.realStdoutWrite.call(this.stdout, `
8415
- Captured output:
8416
- `);
8417
- const capturedOutput = capture.claimOutput();
8418
- if (capturedOutput) {
8419
- this.realStdoutWrite.call(this.stdout, capturedOutput + `
8420
- `);
8421
- }
8423
+ this.dumpOutputCache();
8422
8424
  this.realStdoutWrite.call(this.stdout, `
8423
8425
  Error details:
8424
8426
  `);
@@ -8431,7 +8433,31 @@ Error details:
8431
8433
  process.exit(1);
8432
8434
  });
8433
8435
  }).bind(this);
8436
+ dumpOutputCache(optionalMessage = "") {
8437
+ const cachedLogs = this.console.getCachedLogs();
8438
+ const capturedOutput = capture.claimOutput();
8439
+ if (capturedOutput.length > 0 || cachedLogs.length > 0) {
8440
+ this.realStdoutWrite.call(this.stdout, optionalMessage);
8441
+ }
8442
+ if (cachedLogs.length > 0) {
8443
+ this.realStdoutWrite.call(this.stdout, `Console cache:
8444
+ `);
8445
+ this.realStdoutWrite.call(this.stdout, cachedLogs);
8446
+ }
8447
+ if (capturedOutput.length > 0) {
8448
+ this.realStdoutWrite.call(this.stdout, `
8449
+ Captured output:
8450
+ `);
8451
+ this.realStdoutWrite.call(this.stdout, capturedOutput + `
8452
+ `);
8453
+ }
8454
+ }
8434
8455
  exitHandler = (() => {
8456
+ if (true) {
8457
+ this.dumpOutputCache(`
8458
+ === UNHANDLED OUTPUT (this is only printed in non-production environments) ===
8459
+ `);
8460
+ }
8435
8461
  this.destroy();
8436
8462
  }).bind(this);
8437
8463
  warningHandler = ((warning) => {
@@ -8439,6 +8465,7 @@ Error details:
8439
8465
  }).bind(this);
8440
8466
  constructor(lib, rendererPtr, stdin, stdout, width, height, config = {}) {
8441
8467
  super();
8468
+ rendererTracker.addRenderer(this);
8442
8469
  this.stdin = stdin;
8443
8470
  this.stdout = stdout;
8444
8471
  this.realStdoutWrite = stdout.write;
@@ -8739,7 +8766,7 @@ Error details:
8739
8766
  }
8740
8767
  if (this.exitOnCtrlC && str === "\x03") {
8741
8768
  process.nextTick(() => {
8742
- process.exit();
8769
+ this.destroy();
8743
8770
  });
8744
8771
  return;
8745
8772
  }
@@ -9096,7 +9123,6 @@ Error details:
9096
9123
  process.removeListener("SIGWINCH", this.sigwinchHandler);
9097
9124
  process.removeListener("uncaughtException", this.handleError);
9098
9125
  process.removeListener("unhandledRejection", this.handleError);
9099
- process.removeListener("exit", this.exitHandler);
9100
9126
  process.removeListener("warning", this.warningHandler);
9101
9127
  capture.removeListener("write", this.captureCallback);
9102
9128
  if (this.memorySnapshotTimer) {
@@ -9118,6 +9144,7 @@ Error details:
9118
9144
  this.flushStdoutCache(this._splitHeight, true);
9119
9145
  }
9120
9146
  this.lib.destroyRenderer(this.rendererPtr);
9147
+ rendererTracker.removeRenderer(this);
9121
9148
  }
9122
9149
  startRenderLoop() {
9123
9150
  if (!this._isRunning)
@@ -9343,5 +9370,5 @@ Error details:
9343
9370
 
9344
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 };
9345
9372
 
9346
- //# debugId=F7540B181A9A091164756E2164756E21
9347
- //# sourceMappingURL=index-0yx9rnxg.js.map
9373
+ //# debugId=4FCA4D27FA80FDD264756E2164756E21
9374
+ //# sourceMappingURL=index-mtc20a8y.js.map