@opentui/core 0.1.41 → 0.1.43

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-kj9k00yt.js";
8
+ } from "./index-23t1sg60.js";
9
9
 
10
10
  // ../../node_modules/omggif/omggif.js
11
11
  var require_omggif = __commonJS((exports) => {
package/console.d.ts CHANGED
@@ -45,6 +45,7 @@ export declare class TerminalConsole extends EventEmitter {
45
45
  private _displayLines;
46
46
  private _allLogEntries;
47
47
  private _needsFrameBufferUpdate;
48
+ private _entryListener;
48
49
  private markNeedsRerender;
49
50
  private _rgbaInfo;
50
51
  private _rgbaWarn;
@@ -74,6 +75,7 @@ export declare class TerminalConsole extends EventEmitter {
74
75
  blur(): void;
75
76
  show(): void;
76
77
  hide(): void;
78
+ destroy(): void;
77
79
  getCachedLogs(): string;
78
80
  private updateFrameBuffer;
79
81
  renderToBuffer(buffer: OptimizedBuffer): void;
@@ -2540,76 +2540,6 @@ function parseColor(color) {
2540
2540
  }
2541
2541
  return color;
2542
2542
  }
2543
- // src/lib/fonts/tiny.json
2544
- var tiny_default = {
2545
- name: "tiny",
2546
- version: "0.2.0",
2547
- homepage: "https://github.com/dominikwilkowski/cfonts",
2548
- colors: 1,
2549
- lines: 2,
2550
- buffer: ["", ""],
2551
- letterspace: [" ", " "],
2552
- letterspace_size: 1,
2553
- chars: {
2554
- A: ["\u2584\u2580\u2588", "\u2588\u2580\u2588"],
2555
- B: ["\u2588\u2584\u2584", "\u2588\u2584\u2588"],
2556
- C: ["\u2588\u2580\u2580", "\u2588\u2584\u2584"],
2557
- D: ["\u2588\u2580\u2584", "\u2588\u2584\u2580"],
2558
- E: ["\u2588\u2580\u2580", "\u2588\u2588\u2584"],
2559
- F: ["\u2588\u2580\u2580", "\u2588\u2580 "],
2560
- G: ["\u2588\u2580\u2580", "\u2588\u2584\u2588"],
2561
- H: ["\u2588 \u2588", "\u2588\u2580\u2588"],
2562
- I: ["\u2588", "\u2588"],
2563
- J: [" \u2588", "\u2588\u2584\u2588"],
2564
- K: ["\u2588\u2584\u2580", "\u2588 \u2588"],
2565
- L: ["\u2588 ", "\u2588\u2584\u2584"],
2566
- M: ["\u2588\u2580\u2584\u2580\u2588", "\u2588 \u2580 \u2588"],
2567
- N: ["\u2588\u2584 \u2588", "\u2588 \u2580\u2588"],
2568
- O: ["\u2588\u2580\u2588", "\u2588\u2584\u2588"],
2569
- P: ["\u2588\u2580\u2588", "\u2588\u2580\u2580"],
2570
- Q: ["\u2588\u2580\u2588", "\u2580\u2580\u2588"],
2571
- R: ["\u2588\u2580\u2588", "\u2588\u2580\u2584"],
2572
- S: ["\u2588\u2580\u2580", "\u2584\u2584\u2588"],
2573
- T: ["\u2580\u2588\u2580", " \u2588 "],
2574
- U: ["\u2588 \u2588", "\u2588\u2584\u2588"],
2575
- V: ["\u2588 \u2588", "\u2580\u2584\u2580"],
2576
- W: ["\u2588 \u2588 \u2588", "\u2580\u2584\u2580\u2584\u2580"],
2577
- X: ["\u2580\u2584\u2580", "\u2588 \u2588"],
2578
- Y: ["\u2588\u2584\u2588", " \u2588 "],
2579
- Z: ["\u2580\u2588", "\u2588\u2584"],
2580
- "0": ["\u259E\u2588\u259A", "\u259A\u2588\u259E"],
2581
- "1": ["\u2584\u2588", " \u2588"],
2582
- "2": ["\u2580\u2588", "\u2588\u2584"],
2583
- "3": ["\u2580\u2580\u2588", "\u2584\u2588\u2588"],
2584
- "4": ["\u2588 \u2588", "\u2580\u2580\u2588"],
2585
- "5": ["\u2588\u2580", "\u2584\u2588"],
2586
- "6": ["\u2588\u2584\u2584", "\u2588\u2584\u2588"],
2587
- "7": ["\u2580\u2580\u2588", " \u2588"],
2588
- "8": ["\u2588\u2588\u2588", "\u2588\u2584\u2588"],
2589
- "9": ["\u2588\u2580\u2588", "\u2580\u2580\u2588"],
2590
- "!": ["\u2588", "\u2584"],
2591
- "?": ["\u2580\u2588", " \u2584"],
2592
- ".": [" ", "\u2584"],
2593
- "+": ["\u2584\u2588\u2584", " \u2580 "],
2594
- "-": ["\u2584\u2584", " "],
2595
- _: [" ", "\u2584\u2584"],
2596
- "=": ["\u2580\u2580", "\u2580\u2580"],
2597
- "@": ["\u259B\u2588\u259C", "\u2599\u259F\u2583"],
2598
- "#": ["\u259F\u2584\u2599", "\u259C\u2580\u259B"],
2599
- $: ["\u2596\u2588\u2597", "\u2598\u2588\u259D"],
2600
- "%": ["\u2580 \u2584\u2580", "\u2584\u2580 \u2584"],
2601
- "&": ["\u2584\u2584\u2588", "\u2588\u2584\u2588"],
2602
- "(": ["\u2584\u2580", "\u2580\u2584"],
2603
- ")": ["\u2580\u2584", "\u2584\u2580"],
2604
- "/": [" \u2584\u2580", "\u2584\u2580 "],
2605
- ":": ["\u2580", "\u2584"],
2606
- ";": [" ", "\u2584\u2580"],
2607
- ",": [" ", "\u2588"],
2608
- "'": ["\u2580", " "],
2609
- '"': ["\u259B \u259C", " "],
2610
- " ": [" ", " "]
2611
- }
2612
- };
2613
2543
  // src/lib/fonts/block.json
2614
2544
  var block_default = {
2615
2545
  name: "block",
@@ -3930,6 +3860,76 @@ var slick_default = {
3930
3860
  " ": ["<c2>\u2571\u2571\u2571</c2>", "<c2>\u2571\u2571\u2571</c2>", "<c2>\u2571\u2571\u2571</c2>", "<c2>\u2571\u2571\u2571</c2>", "<c2>\u2571\u2571\u2571</c2>", "<c2>\u2571\u2571\u2571</c2>"]
3931
3861
  }
3932
3862
  };
3863
+ // src/lib/fonts/tiny.json
3864
+ var tiny_default = {
3865
+ name: "tiny",
3866
+ version: "0.2.0",
3867
+ homepage: "https://github.com/dominikwilkowski/cfonts",
3868
+ colors: 1,
3869
+ lines: 2,
3870
+ buffer: ["", ""],
3871
+ letterspace: [" ", " "],
3872
+ letterspace_size: 1,
3873
+ chars: {
3874
+ A: ["\u2584\u2580\u2588", "\u2588\u2580\u2588"],
3875
+ B: ["\u2588\u2584\u2584", "\u2588\u2584\u2588"],
3876
+ C: ["\u2588\u2580\u2580", "\u2588\u2584\u2584"],
3877
+ D: ["\u2588\u2580\u2584", "\u2588\u2584\u2580"],
3878
+ E: ["\u2588\u2580\u2580", "\u2588\u2588\u2584"],
3879
+ F: ["\u2588\u2580\u2580", "\u2588\u2580 "],
3880
+ G: ["\u2588\u2580\u2580", "\u2588\u2584\u2588"],
3881
+ H: ["\u2588 \u2588", "\u2588\u2580\u2588"],
3882
+ I: ["\u2588", "\u2588"],
3883
+ J: [" \u2588", "\u2588\u2584\u2588"],
3884
+ K: ["\u2588\u2584\u2580", "\u2588 \u2588"],
3885
+ L: ["\u2588 ", "\u2588\u2584\u2584"],
3886
+ M: ["\u2588\u2580\u2584\u2580\u2588", "\u2588 \u2580 \u2588"],
3887
+ N: ["\u2588\u2584 \u2588", "\u2588 \u2580\u2588"],
3888
+ O: ["\u2588\u2580\u2588", "\u2588\u2584\u2588"],
3889
+ P: ["\u2588\u2580\u2588", "\u2588\u2580\u2580"],
3890
+ Q: ["\u2588\u2580\u2588", "\u2580\u2580\u2588"],
3891
+ R: ["\u2588\u2580\u2588", "\u2588\u2580\u2584"],
3892
+ S: ["\u2588\u2580\u2580", "\u2584\u2584\u2588"],
3893
+ T: ["\u2580\u2588\u2580", " \u2588 "],
3894
+ U: ["\u2588 \u2588", "\u2588\u2584\u2588"],
3895
+ V: ["\u2588 \u2588", "\u2580\u2584\u2580"],
3896
+ W: ["\u2588 \u2588 \u2588", "\u2580\u2584\u2580\u2584\u2580"],
3897
+ X: ["\u2580\u2584\u2580", "\u2588 \u2588"],
3898
+ Y: ["\u2588\u2584\u2588", " \u2588 "],
3899
+ Z: ["\u2580\u2588", "\u2588\u2584"],
3900
+ "0": ["\u259E\u2588\u259A", "\u259A\u2588\u259E"],
3901
+ "1": ["\u2584\u2588", " \u2588"],
3902
+ "2": ["\u2580\u2588", "\u2588\u2584"],
3903
+ "3": ["\u2580\u2580\u2588", "\u2584\u2588\u2588"],
3904
+ "4": ["\u2588 \u2588", "\u2580\u2580\u2588"],
3905
+ "5": ["\u2588\u2580", "\u2584\u2588"],
3906
+ "6": ["\u2588\u2584\u2584", "\u2588\u2584\u2588"],
3907
+ "7": ["\u2580\u2580\u2588", " \u2588"],
3908
+ "8": ["\u2588\u2588\u2588", "\u2588\u2584\u2588"],
3909
+ "9": ["\u2588\u2580\u2588", "\u2580\u2580\u2588"],
3910
+ "!": ["\u2588", "\u2584"],
3911
+ "?": ["\u2580\u2588", " \u2584"],
3912
+ ".": [" ", "\u2584"],
3913
+ "+": ["\u2584\u2588\u2584", " \u2580 "],
3914
+ "-": ["\u2584\u2584", " "],
3915
+ _: [" ", "\u2584\u2584"],
3916
+ "=": ["\u2580\u2580", "\u2580\u2580"],
3917
+ "@": ["\u259B\u2588\u259C", "\u2599\u259F\u2583"],
3918
+ "#": ["\u259F\u2584\u2599", "\u259C\u2580\u259B"],
3919
+ $: ["\u2596\u2588\u2597", "\u2598\u2588\u259D"],
3920
+ "%": ["\u2580 \u2584\u2580", "\u2584\u2580 \u2584"],
3921
+ "&": ["\u2584\u2584\u2588", "\u2588\u2584\u2588"],
3922
+ "(": ["\u2584\u2580", "\u2580\u2584"],
3923
+ ")": ["\u2580\u2584", "\u2584\u2580"],
3924
+ "/": [" \u2584\u2580", "\u2584\u2580 "],
3925
+ ":": ["\u2580", "\u2584"],
3926
+ ";": [" ", "\u2584\u2580"],
3927
+ ",": [" ", "\u2588"],
3928
+ "'": ["\u2580", " "],
3929
+ '"': ["\u259B \u259C", " "],
3930
+ " ": [" ", " "]
3931
+ }
3932
+ };
3933
3933
 
3934
3934
  // src/lib/ascii.font.ts
3935
3935
  var fonts = {
@@ -4074,8 +4074,8 @@ function renderFontToFrameBuffer(buffer, {
4074
4074
  text,
4075
4075
  x = 0,
4076
4076
  y = 0,
4077
- fg = [RGBA.fromInts(255, 255, 255, 255)],
4078
- bg = RGBA.fromInts(0, 0, 0, 255),
4077
+ color = [RGBA.fromInts(255, 255, 255, 255)],
4078
+ backgroundColor = RGBA.fromInts(0, 0, 0, 255),
4079
4079
  font = "tiny"
4080
4080
  }) {
4081
4081
  const width = buffer.width;
@@ -4085,7 +4085,7 @@ function renderFontToFrameBuffer(buffer, {
4085
4085
  console.warn(`Font '${font}' not found`);
4086
4086
  return { width: 0, height: 0 };
4087
4087
  }
4088
- const colors = Array.isArray(fg) ? fg : [fg];
4088
+ const colors = Array.isArray(color) ? color : [color];
4089
4089
  if (y < 0 || y + fontDef.lines > height) {
4090
4090
  return { width: 0, height: fontDef.lines };
4091
4091
  }
@@ -4131,7 +4131,7 @@ function renderFontToFrameBuffer(buffer, {
4131
4131
  if (renderX >= 0 && renderX < width) {
4132
4132
  const fontChar = segment.text[charIdx];
4133
4133
  if (fontChar !== " ") {
4134
- buffer.setCellWithAlphaBlending(renderX, renderY, fontChar, segmentColor, bg);
4134
+ buffer.setCellWithAlphaBlending(renderX, renderY, fontChar, parseColor(segmentColor), parseColor(backgroundColor));
4135
4135
  }
4136
4136
  }
4137
4137
  }
@@ -7221,8 +7221,8 @@ class ExtmarksController {
7221
7221
  this.editBuffer.clearAllHighlights();
7222
7222
  for (const extmark of this.extmarks.values()) {
7223
7223
  if (extmark.styleId !== undefined) {
7224
- const startWithoutNewlines = this.offsetToCharOffset(extmark.start);
7225
- const endWithoutNewlines = this.offsetToCharOffset(extmark.end);
7224
+ const startWithoutNewlines = this.offsetExcludingNewlines(extmark.start);
7225
+ const endWithoutNewlines = this.offsetExcludingNewlines(extmark.end);
7226
7226
  this.editBuffer.addHighlightByCharRange({
7227
7227
  start: startWithoutNewlines,
7228
7228
  end: endWithoutNewlines,
@@ -7233,16 +7233,38 @@ class ExtmarksController {
7233
7233
  }
7234
7234
  }
7235
7235
  }
7236
- offsetToCharOffset(offset) {
7236
+ offsetExcludingNewlines(offset) {
7237
7237
  const text = this.editBuffer.getText();
7238
- let charOffset = 0;
7239
- for (let i = 0;i < offset && i < text.length; i++) {
7240
- if (text[i] !== `
7238
+ let displayWidthSoFar = 0;
7239
+ let newlineCount = 0;
7240
+ let i = 0;
7241
+ while (i < text.length && displayWidthSoFar < offset) {
7242
+ if (text[i] === `
7243
+ `) {
7244
+ displayWidthSoFar++;
7245
+ newlineCount++;
7246
+ i++;
7247
+ } else {
7248
+ let j = i;
7249
+ while (j < text.length && text[j] !== `
7241
7250
  `) {
7242
- charOffset++;
7251
+ j++;
7252
+ }
7253
+ const chunk = text.substring(i, j);
7254
+ const chunkWidth = Bun.stringWidth(chunk);
7255
+ if (displayWidthSoFar + chunkWidth < offset) {
7256
+ displayWidthSoFar += chunkWidth;
7257
+ i = j;
7258
+ } else {
7259
+ for (let k = i;k < j && displayWidthSoFar < offset; k++) {
7260
+ const charWidth = Bun.stringWidth(text[k]);
7261
+ displayWidthSoFar += charWidth;
7262
+ }
7263
+ break;
7264
+ }
7243
7265
  }
7244
7266
  }
7245
- return charOffset;
7267
+ return offset - newlineCount;
7246
7268
  }
7247
7269
  create(options) {
7248
7270
  if (this.destroyed) {
@@ -12311,6 +12333,7 @@ class TerminalConsole extends EventEmitter8 {
12311
12333
  _displayLines = [];
12312
12334
  _allLogEntries = [];
12313
12335
  _needsFrameBufferUpdate = false;
12336
+ _entryListener;
12314
12337
  markNeedsRerender() {
12315
12338
  this._needsFrameBufferUpdate = true;
12316
12339
  this.renderer.requestRender();
@@ -12350,9 +12373,10 @@ class TerminalConsole extends EventEmitter8 {
12350
12373
  this._rgbaCursor = parseColor(this.options.cursorColor);
12351
12374
  this._updateConsoleDimensions();
12352
12375
  this._scrollToBottom(true);
12353
- terminalConsoleCache.on("entry", (logEntry) => {
12376
+ this._entryListener = (logEntry) => {
12354
12377
  this._handleNewLog(logEntry);
12355
- });
12378
+ };
12379
+ terminalConsoleCache.on("entry", this._entryListener);
12356
12380
  if (env.SHOW_CONSOLE) {
12357
12381
  this.show();
12358
12382
  }
@@ -12592,6 +12616,11 @@ class TerminalConsole extends EventEmitter8 {
12592
12616
  terminalConsoleCache.setCachingEnabled(true);
12593
12617
  }
12594
12618
  }
12619
+ destroy() {
12620
+ this.hide();
12621
+ this.deactivate();
12622
+ terminalConsoleCache.off("entry", this._entryListener);
12623
+ }
12595
12624
  getCachedLogs() {
12596
12625
  return terminalConsoleCache.cachedLogs.map((logEntry) => logEntry[0].toISOString() + " " + logEntry.slice(1).join(" ")).join(`
12597
12626
  `);
@@ -13118,6 +13147,7 @@ class CliRenderer extends EventEmitter9 {
13118
13147
  _paletteDetector = null;
13119
13148
  _cachedPalette = null;
13120
13149
  _paletteDetectionPromise = null;
13150
+ _onDestroy;
13121
13151
  inputHandlers = [];
13122
13152
  prependedInputHandlers = [];
13123
13153
  handleError = ((error) => {
@@ -13219,6 +13249,7 @@ Captured output:
13219
13249
  this._console = new TerminalConsole(this, config.consoleOptions);
13220
13250
  this.useConsole = config.useConsole ?? true;
13221
13251
  this._openConsoleOnError = config.openConsoleOnError ?? true;
13252
+ this._onDestroy = config.onDestroy;
13222
13253
  global.requestAnimationFrame = (callback) => {
13223
13254
  const id = CliRenderer.animationFrameId++;
13224
13255
  this.animationRequest.set(id, callback);
@@ -13926,7 +13957,7 @@ Captured output:
13926
13957
  console.error("Error destroying root renderable:", e instanceof Error ? e.stack : String(e));
13927
13958
  }
13928
13959
  this._stdinBuffer.destroy();
13929
- this._console.deactivate();
13960
+ this._console.destroy();
13930
13961
  this.disableStdoutInterception();
13931
13962
  if (this._splitHeight > 0) {
13932
13963
  this.flushStdoutCache(this._splitHeight, true);
@@ -13937,6 +13968,13 @@ Captured output:
13937
13968
  this.stdin.removeListener("data", this.stdinListener);
13938
13969
  this.lib.destroyRenderer(this.rendererPtr);
13939
13970
  rendererTracker.removeRenderer(this);
13971
+ if (this._onDestroy) {
13972
+ try {
13973
+ this._onDestroy();
13974
+ } catch (e) {
13975
+ console.error("Error in onDestroy callback:", e instanceof Error ? e.stack : String(e));
13976
+ }
13977
+ }
13940
13978
  }
13941
13979
  startRenderLoop() {
13942
13980
  if (!this._isRunning)
@@ -14200,5 +14238,5 @@ Captured output:
14200
14238
 
14201
14239
  export { __toESM, __commonJS, __export, __require, Edge, Gutter, exports_src, BorderChars, getBorderFromSides, getBorderSides, borderCharsToArray, BorderCharArrays, nonAlphanumericKeys, parseKeypress, 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, hastToStyledText, LinearScrollAccel, MacOSScrollAccel, StdinBuffer, parseAlign, parseBoxSizing, parseDimension, parseDirection, parseDisplay, parseEdge, parseFlexDirection, parseGutter, parseJustify, parseLogLevel, parseMeasureMode, parseOverflow, parsePositionType, parseUnit, parseWrap, MouseParser, Selection, convertGlobalToLocalSelection, ASCIIFontSelectionHelper, envRegistry, registerEnvVar, clearEnvCache, generateEnvMarkdown, generateEnvColored, env, treeSitterToTextChunks, treeSitterToStyledText, addDefaultParsers, TreeSitterClient, DataPathsManager, getDataPaths, extToFiletype, pathToFiletype, main, getTreeSitterClient, ExtmarksController, createExtmarksController, TerminalPalette, createTerminalPalette, TextBuffer, LogLevel2 as LogLevel, setRenderLibPath, resolveRenderLib, OptimizedBuffer, h, isVNode, maybeMakeRenderable, wrapWithDelegates, instantiate, delegate, isValidPercentage, LayoutEvents, RenderableEvents, isRenderable, BaseRenderable, Renderable, RootRenderable, ANSI, capture, ConsolePosition, TerminalConsole, getObjectsInViewport, MouseEvent, MouseButton, createCliRenderer, CliRenderEvents, RendererControlState, CliRenderer };
14202
14240
 
14203
- //# debugId=7BD9FAB5ED52E27064756E2164756E21
14204
- //# sourceMappingURL=index-kj9k00yt.js.map
14241
+ //# debugId=9F34534FC469D86364756E2164756E21
14242
+ //# sourceMappingURL=index-23t1sg60.js.map