@opentui/core 0.0.0-20251102-23e7b561 → 0.0.0-20251106-dd34dace
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/edit-buffer.d.ts +2 -0
- package/{index-rzgaxyf4.js → index-n8nbvvhk.js} +115 -10
- package/{index-rzgaxyf4.js.map → index-n8nbvvhk.js.map} +8 -8
- package/index.js +197 -42
- package/index.js.map +9 -9
- package/package.json +7 -7
- package/renderables/Code.d.ts +12 -0
- package/renderables/EditBufferRenderable.d.ts +11 -1
- package/renderables/Input.d.ts +9 -1
- package/renderables/ScrollBox.d.ts +8 -2
- package/renderables/Select.d.ts +4 -1
- package/renderer.d.ts +4 -0
- package/testing/mock-tree-sitter-client.d.ts +20 -0
- package/testing.d.ts +1 -0
- package/testing.js +35 -2
- package/testing.js.map +4 -3
- package/text-buffer.d.ts +1 -0
- package/types.d.ts +4 -0
- package/zig.d.ts +6 -0
package/3d.js
CHANGED
package/edit-buffer.d.ts
CHANGED
|
@@ -58,6 +58,8 @@ export declare class EditBuffer extends EventEmitter {
|
|
|
58
58
|
} | null;
|
|
59
59
|
positionToOffset(row: number, col: number): number;
|
|
60
60
|
getLineStartOffset(row: number): number;
|
|
61
|
+
getTextRange(startOffset: number, endOffset: number): string;
|
|
62
|
+
getTextRangeByCoords(startRow: number, startCol: number, endRow: number, endCol: number): string;
|
|
61
63
|
debugLogRope(): void;
|
|
62
64
|
undo(): string | null;
|
|
63
65
|
redo(): string | null;
|
|
@@ -5684,8 +5684,9 @@ function getParsers() {
|
|
|
5684
5684
|
}
|
|
5685
5685
|
|
|
5686
5686
|
// src/lib/tree-sitter/client.ts
|
|
5687
|
-
import { resolve as resolve2, isAbsolute
|
|
5687
|
+
import { resolve as resolve2, isAbsolute } from "path";
|
|
5688
5688
|
import { existsSync } from "fs";
|
|
5689
|
+
import { parse } from "path";
|
|
5689
5690
|
registerEnvVar({
|
|
5690
5691
|
name: "OTUI_TREE_SITTER_WORKER_PATH",
|
|
5691
5692
|
description: "Path to the TreeSitter worker",
|
|
@@ -5738,9 +5739,9 @@ class TreeSitterClient extends EventEmitter3 {
|
|
|
5738
5739
|
}
|
|
5739
5740
|
let worker_path;
|
|
5740
5741
|
if (env.OTUI_TREE_SITTER_WORKER_PATH) {
|
|
5741
|
-
worker_path =
|
|
5742
|
+
worker_path = env.OTUI_TREE_SITTER_WORKER_PATH;
|
|
5742
5743
|
} else if (typeof OTUI_TREE_SITTER_WORKER_PATH !== "undefined") {
|
|
5743
|
-
worker_path =
|
|
5744
|
+
worker_path = OTUI_TREE_SITTER_WORKER_PATH;
|
|
5744
5745
|
} else if (this.options.workerPath) {
|
|
5745
5746
|
worker_path = this.options.workerPath;
|
|
5746
5747
|
} else {
|
|
@@ -8407,6 +8408,14 @@ function getOpenTUILib(libPath) {
|
|
|
8407
8408
|
args: ["ptr"],
|
|
8408
8409
|
returns: "void"
|
|
8409
8410
|
},
|
|
8411
|
+
setUseKittyKeyboard: {
|
|
8412
|
+
args: ["ptr", "bool"],
|
|
8413
|
+
returns: "void"
|
|
8414
|
+
},
|
|
8415
|
+
getUseKittyKeyboard: {
|
|
8416
|
+
args: ["ptr"],
|
|
8417
|
+
returns: "bool"
|
|
8418
|
+
},
|
|
8410
8419
|
setupTerminal: {
|
|
8411
8420
|
args: ["ptr", "bool"],
|
|
8412
8421
|
returns: "void"
|
|
@@ -8527,6 +8536,14 @@ function getOpenTUILib(libPath) {
|
|
|
8527
8536
|
args: ["ptr"],
|
|
8528
8537
|
returns: "u32"
|
|
8529
8538
|
},
|
|
8539
|
+
textBufferGetTextRange: {
|
|
8540
|
+
args: ["ptr", "u32", "u32", "ptr", "usize"],
|
|
8541
|
+
returns: "usize"
|
|
8542
|
+
},
|
|
8543
|
+
textBufferGetTextRangeByCoords: {
|
|
8544
|
+
args: ["ptr", "u32", "u32", "u32", "u32", "ptr", "usize"],
|
|
8545
|
+
returns: "usize"
|
|
8546
|
+
},
|
|
8530
8547
|
createTextBufferView: {
|
|
8531
8548
|
args: ["ptr"],
|
|
8532
8549
|
returns: "ptr"
|
|
@@ -8791,6 +8808,14 @@ function getOpenTUILib(libPath) {
|
|
|
8791
8808
|
args: ["ptr", "u32"],
|
|
8792
8809
|
returns: "u32"
|
|
8793
8810
|
},
|
|
8811
|
+
editBufferGetTextRange: {
|
|
8812
|
+
args: ["ptr", "u32", "u32", "ptr", "usize"],
|
|
8813
|
+
returns: "usize"
|
|
8814
|
+
},
|
|
8815
|
+
editBufferGetTextRangeByCoords: {
|
|
8816
|
+
args: ["ptr", "u32", "u32", "u32", "u32", "ptr", "usize"],
|
|
8817
|
+
returns: "usize"
|
|
8818
|
+
},
|
|
8794
8819
|
editorViewSetSelection: {
|
|
8795
8820
|
args: ["ptr", "u32", "u32", "ptr", "ptr"],
|
|
8796
8821
|
returns: "void"
|
|
@@ -8911,16 +8936,28 @@ function convertToDebugSymbols(symbols) {
|
|
|
8911
8936
|
const debugSymbols = {};
|
|
8912
8937
|
const traceSymbols = {};
|
|
8913
8938
|
let hasTracing = false;
|
|
8939
|
+
let ffiLogWriter = null;
|
|
8914
8940
|
Object.entries(symbols).forEach(([key, value]) => {
|
|
8915
8941
|
debugSymbols[key] = value;
|
|
8916
8942
|
});
|
|
8917
8943
|
if (env.OTUI_DEBUG_FFI) {
|
|
8944
|
+
const now = new Date;
|
|
8945
|
+
const timestamp = now.toISOString().replace(/[:.]/g, "-").replace(/T/, "_").split("Z")[0];
|
|
8946
|
+
const logFilePath = `ffi_debug_${timestamp}.log`;
|
|
8947
|
+
ffiLogWriter = Bun.file(logFilePath).writer();
|
|
8948
|
+
const writer = ffiLogWriter;
|
|
8949
|
+
const writeSync = (msg) => {
|
|
8950
|
+
const buffer = new TextEncoder().encode(msg + `
|
|
8951
|
+
`);
|
|
8952
|
+
writer.write(buffer);
|
|
8953
|
+
writer.flush();
|
|
8954
|
+
};
|
|
8918
8955
|
Object.entries(symbols).forEach(([key, value]) => {
|
|
8919
8956
|
if (typeof value === "function") {
|
|
8920
8957
|
debugSymbols[key] = (...args) => {
|
|
8921
|
-
|
|
8958
|
+
writeSync(`${key}(${args.map((arg) => String(arg)).join(", ")})`);
|
|
8922
8959
|
const result = value(...args);
|
|
8923
|
-
|
|
8960
|
+
writeSync(`${key} returned: ${String(result)}`);
|
|
8924
8961
|
return result;
|
|
8925
8962
|
};
|
|
8926
8963
|
}
|
|
@@ -8942,6 +8979,13 @@ function convertToDebugSymbols(symbols) {
|
|
|
8942
8979
|
}
|
|
8943
8980
|
});
|
|
8944
8981
|
}
|
|
8982
|
+
if (env.OTUI_DEBUG_FFI && ffiLogWriter) {
|
|
8983
|
+
process.on("exit", () => {
|
|
8984
|
+
try {
|
|
8985
|
+
ffiLogWriter.end();
|
|
8986
|
+
} catch (e) {}
|
|
8987
|
+
});
|
|
8988
|
+
}
|
|
8945
8989
|
if (hasTracing) {
|
|
8946
8990
|
process.on("exit", () => {
|
|
8947
8991
|
const allStats = [];
|
|
@@ -9331,6 +9375,12 @@ class FFIRenderLib {
|
|
|
9331
9375
|
disableKittyKeyboard(renderer) {
|
|
9332
9376
|
this.opentui.symbols.disableKittyKeyboard(renderer);
|
|
9333
9377
|
}
|
|
9378
|
+
setUseKittyKeyboard(renderer, use) {
|
|
9379
|
+
this.opentui.symbols.setUseKittyKeyboard(renderer, use);
|
|
9380
|
+
}
|
|
9381
|
+
getUseKittyKeyboard(renderer) {
|
|
9382
|
+
return this.opentui.symbols.getUseKittyKeyboard(renderer);
|
|
9383
|
+
}
|
|
9334
9384
|
setupTerminal(renderer, useAlternateScreen) {
|
|
9335
9385
|
this.opentui.symbols.setupTerminal(renderer, useAlternateScreen);
|
|
9336
9386
|
}
|
|
@@ -9425,6 +9475,24 @@ class FFIRenderLib {
|
|
|
9425
9475
|
}
|
|
9426
9476
|
return outBuffer.slice(0, actualLen);
|
|
9427
9477
|
}
|
|
9478
|
+
textBufferGetTextRange(buffer, startOffset, endOffset, maxLength) {
|
|
9479
|
+
const outBuffer = new Uint8Array(maxLength);
|
|
9480
|
+
const actualLen = this.opentui.symbols.textBufferGetTextRange(buffer, startOffset, endOffset, ptr3(outBuffer), maxLength);
|
|
9481
|
+
const len = typeof actualLen === "bigint" ? Number(actualLen) : actualLen;
|
|
9482
|
+
if (len === 0) {
|
|
9483
|
+
return null;
|
|
9484
|
+
}
|
|
9485
|
+
return outBuffer.slice(0, len);
|
|
9486
|
+
}
|
|
9487
|
+
textBufferGetTextRangeByCoords(buffer, startRow, startCol, endRow, endCol, maxLength) {
|
|
9488
|
+
const outBuffer = new Uint8Array(maxLength);
|
|
9489
|
+
const actualLen = this.opentui.symbols.textBufferGetTextRangeByCoords(buffer, startRow, startCol, endRow, endCol, ptr3(outBuffer), maxLength);
|
|
9490
|
+
const len = typeof actualLen === "bigint" ? Number(actualLen) : actualLen;
|
|
9491
|
+
if (len === 0) {
|
|
9492
|
+
return null;
|
|
9493
|
+
}
|
|
9494
|
+
return outBuffer.slice(0, len);
|
|
9495
|
+
}
|
|
9428
9496
|
createTextBufferView(textBuffer) {
|
|
9429
9497
|
const viewPtr = this.opentui.symbols.createTextBufferView(textBuffer);
|
|
9430
9498
|
if (!viewPtr) {
|
|
@@ -9805,6 +9873,22 @@ class FFIRenderLib {
|
|
|
9805
9873
|
editBufferGetLineStartOffset(buffer, row) {
|
|
9806
9874
|
return this.opentui.symbols.editBufferGetLineStartOffset(buffer, row);
|
|
9807
9875
|
}
|
|
9876
|
+
editBufferGetTextRange(buffer, startOffset, endOffset, maxLength) {
|
|
9877
|
+
const outBuffer = new Uint8Array(maxLength);
|
|
9878
|
+
const actualLen = this.opentui.symbols.editBufferGetTextRange(buffer, startOffset, endOffset, ptr3(outBuffer), maxLength);
|
|
9879
|
+
const len = typeof actualLen === "bigint" ? Number(actualLen) : actualLen;
|
|
9880
|
+
if (len === 0)
|
|
9881
|
+
return null;
|
|
9882
|
+
return outBuffer.slice(0, len);
|
|
9883
|
+
}
|
|
9884
|
+
editBufferGetTextRangeByCoords(buffer, startRow, startCol, endRow, endCol, maxLength) {
|
|
9885
|
+
const outBuffer = new Uint8Array(maxLength);
|
|
9886
|
+
const actualLen = this.opentui.symbols.editBufferGetTextRangeByCoords(buffer, startRow, startCol, endRow, endCol, ptr3(outBuffer), maxLength);
|
|
9887
|
+
const len = typeof actualLen === "bigint" ? Number(actualLen) : actualLen;
|
|
9888
|
+
if (len === 0)
|
|
9889
|
+
return null;
|
|
9890
|
+
return outBuffer.slice(0, len);
|
|
9891
|
+
}
|
|
9808
9892
|
editorViewSetSelection(view, start, end, bgColor, fgColor) {
|
|
9809
9893
|
const bg2 = bgColor ? bgColor.buffer : null;
|
|
9810
9894
|
const fg2 = fgColor ? fgColor.buffer : null;
|
|
@@ -10090,6 +10174,17 @@ class TextBuffer {
|
|
|
10090
10174
|
return "";
|
|
10091
10175
|
return this.lib.decoder.decode(plainBytes);
|
|
10092
10176
|
}
|
|
10177
|
+
getTextRange(startOffset, endOffset) {
|
|
10178
|
+
this.guard();
|
|
10179
|
+
if (startOffset >= endOffset)
|
|
10180
|
+
return "";
|
|
10181
|
+
if (this._byteSize === 0)
|
|
10182
|
+
return "";
|
|
10183
|
+
const rangeBytes = this.lib.textBufferGetTextRange(this.bufferPtr, startOffset, endOffset, this._byteSize);
|
|
10184
|
+
if (!rangeBytes)
|
|
10185
|
+
return "";
|
|
10186
|
+
return this.lib.decoder.decode(rangeBytes);
|
|
10187
|
+
}
|
|
10093
10188
|
addHighlightByCharRange(highlight) {
|
|
10094
10189
|
this.guard();
|
|
10095
10190
|
this.lib.textBufferAddHighlightByCharRange(this.bufferPtr, highlight);
|
|
@@ -10976,7 +11071,7 @@ class Renderable extends BaseRenderable {
|
|
|
10976
11071
|
}
|
|
10977
11072
|
try {
|
|
10978
11073
|
const widthMethod = this._ctx.widthMethod;
|
|
10979
|
-
this.frameBuffer = OptimizedBuffer.create(w, h, widthMethod, { respectAlpha: true });
|
|
11074
|
+
this.frameBuffer = OptimizedBuffer.create(w, h, widthMethod, { respectAlpha: true, id: `framebuffer-${this.id}` });
|
|
10980
11075
|
} catch (error) {
|
|
10981
11076
|
console.error(`Failed to create frame buffer for ${this.id}:`, error);
|
|
10982
11077
|
this.frameBuffer = null;
|
|
@@ -12455,6 +12550,8 @@ async function createCliRenderer(config = {}) {
|
|
|
12455
12550
|
config.useThread = false;
|
|
12456
12551
|
}
|
|
12457
12552
|
ziglib.setUseThread(rendererPtr, config.useThread);
|
|
12553
|
+
const useKittyKeyboard = config.useKittyKeyboard ?? true;
|
|
12554
|
+
ziglib.setUseKittyKeyboard(rendererPtr, useKittyKeyboard);
|
|
12458
12555
|
const renderer = new CliRenderer(ziglib, rendererPtr, stdin, stdout, width, height, config);
|
|
12459
12556
|
await renderer.setupTerminal();
|
|
12460
12557
|
return renderer;
|
|
@@ -12564,9 +12661,10 @@ class CliRenderer extends EventEmitter9 {
|
|
|
12564
12661
|
_latestPointer = { x: 0, y: 0 };
|
|
12565
12662
|
_currentFocusedRenderable = null;
|
|
12566
12663
|
lifecyclePasses = new Set;
|
|
12664
|
+
_openConsoleOnError = true;
|
|
12567
12665
|
handleError = ((error) => {
|
|
12568
12666
|
console.error(error);
|
|
12569
|
-
if (
|
|
12667
|
+
if (this._openConsoleOnError) {
|
|
12570
12668
|
this.console.show();
|
|
12571
12669
|
}
|
|
12572
12670
|
}).bind(this);
|
|
@@ -12651,7 +12749,8 @@ Captured output:
|
|
|
12651
12749
|
process.on("exit", this.exitHandler);
|
|
12652
12750
|
this._console = new TerminalConsole(this, config.consoleOptions);
|
|
12653
12751
|
this.useConsole = config.useConsole ?? true;
|
|
12654
|
-
this.
|
|
12752
|
+
this._openConsoleOnError = config.openConsoleOnError ?? true;
|
|
12753
|
+
this._keyHandler = new InternalKeyHandler(this.stdin, config.useKittyKeyboard ?? true);
|
|
12655
12754
|
this._keyHandler.on("keypress", (event) => {
|
|
12656
12755
|
if (this.exitOnCtrlC && event.name === "c" && event.ctrl) {
|
|
12657
12756
|
process.nextTick(() => {
|
|
@@ -12787,6 +12886,12 @@ Captured output:
|
|
|
12787
12886
|
get capabilities() {
|
|
12788
12887
|
return this._capabilities;
|
|
12789
12888
|
}
|
|
12889
|
+
get useKittyKeyboard() {
|
|
12890
|
+
return this.lib.getUseKittyKeyboard(this.rendererPtr);
|
|
12891
|
+
}
|
|
12892
|
+
set useKittyKeyboard(use) {
|
|
12893
|
+
this.lib.setUseKittyKeyboard(this.rendererPtr, use);
|
|
12894
|
+
}
|
|
12790
12895
|
set experimental_splitHeight(splitHeight) {
|
|
12791
12896
|
if (splitHeight < 0)
|
|
12792
12897
|
splitHeight = 0;
|
|
@@ -13560,5 +13665,5 @@ Captured output:
|
|
|
13560
13665
|
|
|
13561
13666
|
export { __toESM, __commonJS, __export, __require, Edge, Gutter, exports_src, BorderChars, getBorderFromSides, getBorderSides, borderCharsToArray, BorderCharArrays, nonAlphanumericKeys, parseKeypress, ANSI, StdinBuffer, 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, 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, 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, RendererControlState, CliRenderer };
|
|
13562
13667
|
|
|
13563
|
-
//# debugId=
|
|
13564
|
-
//# sourceMappingURL=index-
|
|
13668
|
+
//# debugId=A88F8272C607FC3964756E2164756E21
|
|
13669
|
+
//# sourceMappingURL=index-n8nbvvhk.js.map
|