@opentuah/core 0.1.94 → 0.1.96

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.
@@ -19,5 +19,12 @@ export declare class MouseParser {
19
19
  private mouseButtonsPressed;
20
20
  private static readonly SCROLL_DIRECTIONS;
21
21
  reset(): void;
22
+ private decodeInput;
22
23
  parseMouseEvent(data: Buffer): RawMouseEvent | null;
24
+ parseAllMouseEvents(data: Buffer): RawMouseEvent[];
25
+ private parseMouseSequenceAt;
26
+ private parseSgrSequence;
27
+ private parseBasicSequence;
28
+ private decodeSgrEvent;
29
+ private decodeBasicEvent;
23
30
  }
package/package.json CHANGED
@@ -4,8 +4,8 @@
4
4
  "main": "index.js",
5
5
  "types": "index.d.ts",
6
6
  "type": "module",
7
- "version": "0.1.94",
8
- "description": "OpenTUI is a TypeScript library for building terminal user interfaces (TUIs)",
7
+ "version": "0.1.96",
8
+ "description": "OpenTUI is a TypeScript library on a native Zig core for building terminal user interfaces (TUIs)",
9
9
  "license": "MIT",
10
10
  "repository": {
11
11
  "type": "git",
@@ -54,16 +54,16 @@
54
54
  },
55
55
  "optionalDependencies": {
56
56
  "@dimforge/rapier2d-simd-compat": "^0.17.3",
57
- "bun-webgpu": "0.1.4",
57
+ "bun-webgpu": "0.1.5",
58
58
  "planck": "^1.4.2",
59
59
  "three": "0.177.0",
60
- "@opentuah/core-darwin-x64": "0.1.94",
61
- "@opentuah/core-darwin-arm64": "0.1.94",
62
- "@opentuah/core-linux-x64": "0.1.94",
63
- "@opentuah/core-linux-arm64": "0.1.94",
64
- "@opentuah/core-win32-x64": "0.1.94",
65
- "@opentuah/core-win32-arm64": "0.1.94",
66
- "@opentuah/core-linux-x64-musl": "0.1.94",
67
- "@opentuah/core-linux-arm64-musl": "0.1.94"
60
+ "@opentuah/core-darwin-x64": "0.1.96",
61
+ "@opentuah/core-darwin-arm64": "0.1.96",
62
+ "@opentuah/core-linux-x64": "0.1.96",
63
+ "@opentuah/core-linux-arm64": "0.1.96",
64
+ "@opentuah/core-linux-x64-musl": "0.1.96",
65
+ "@opentuah/core-linux-arm64-musl": "0.1.96",
66
+ "@opentuah/core-win32-x64": "0.1.96",
67
+ "@opentuah/core-win32-arm64": "0.1.96"
68
68
  }
69
69
  }
@@ -1,5 +1,6 @@
1
1
  import { Renderable, type RenderableOptions } from "../Renderable";
2
2
  import type { RenderContext } from "../types";
3
+ import { type LineColorConfig } from "./LineNumberRenderable";
3
4
  import { RGBA } from "../lib/RGBA";
4
5
  import { SyntaxStyle } from "../syntax-style";
5
6
  import type { TreeSitterClient } from "../lib/tree-sitter";
@@ -178,5 +179,11 @@ export declare class DiffRenderable extends Renderable {
178
179
  set addedWordBg(value: string | RGBA);
179
180
  get removedWordBg(): RGBA;
180
181
  set removedWordBg(value: string | RGBA);
182
+ setLineColor(line: number, color: string | RGBA | LineColorConfig): void;
183
+ clearLineColor(line: number): void;
184
+ setLineColors(lineColors: Map<number, string | RGBA | LineColorConfig>): void;
185
+ clearAllLineColors(): void;
186
+ highlightLines(startLine: number, endLine: number, color: string | RGBA | LineColorConfig): void;
187
+ clearHighlightLines(startLine: number, endLine: number): void;
181
188
  }
182
189
  export {};
@@ -93,4 +93,6 @@ export declare class LineNumberRenderable extends Renderable {
93
93
  * Clears all inline highlights.
94
94
  */
95
95
  clearInlineHighlights(): void;
96
+ highlightLines(startLine: number, endLine: number, color: string | RGBA | LineColorConfig): void;
97
+ clearHighlightLines(startLine: number, endLine: number): void;
96
98
  }
@@ -0,0 +1,126 @@
1
+ import { type RenderableOptions, Renderable } from "../Renderable";
2
+ import type { OptimizedBuffer } from "../buffer";
3
+ import { type BorderStyle } from "../lib/border";
4
+ import { type Selection } from "../lib/selection";
5
+ import { RGBA, type ColorInput } from "../lib/RGBA";
6
+ import { type TextChunk } from "../text-buffer";
7
+ import type { RenderContext } from "../types";
8
+ export type TextTableCellContent = TextChunk[] | null | undefined;
9
+ export type TextTableContent = TextTableCellContent[][];
10
+ export type TextTableColumnWidthMode = "content" | "fill";
11
+ export interface TextTableOptions extends RenderableOptions<TextTableRenderable> {
12
+ content?: TextTableContent;
13
+ wrapMode?: "none" | "char" | "word";
14
+ columnWidthMode?: TextTableColumnWidthMode;
15
+ cellPadding?: number;
16
+ showBorders?: boolean;
17
+ border?: boolean;
18
+ outerBorder?: boolean;
19
+ selectable?: boolean;
20
+ selectionBg?: ColorInput;
21
+ selectionFg?: ColorInput;
22
+ borderStyle?: BorderStyle;
23
+ borderColor?: ColorInput;
24
+ borderBackgroundColor?: ColorInput;
25
+ backgroundColor?: ColorInput;
26
+ fg?: ColorInput;
27
+ bg?: ColorInput;
28
+ attributes?: number;
29
+ }
30
+ export declare class TextTableRenderable extends Renderable {
31
+ private _content;
32
+ private _wrapMode;
33
+ private _columnWidthMode;
34
+ private _cellPadding;
35
+ private _showBorders;
36
+ private _border;
37
+ private _outerBorder;
38
+ private _hasExplicitOuterBorder;
39
+ private _borderStyle;
40
+ private _borderColor;
41
+ private _borderBackgroundColor;
42
+ private _backgroundColor;
43
+ private _defaultFg;
44
+ private _defaultBg;
45
+ private _defaultAttributes;
46
+ private _selectionBg;
47
+ private _selectionFg;
48
+ private _lastLocalSelection;
49
+ private _cells;
50
+ private _prevCellContent;
51
+ private _rowCount;
52
+ private _columnCount;
53
+ private _layout;
54
+ private _layoutDirty;
55
+ private _rasterDirty;
56
+ private _cachedMeasureLayout;
57
+ private _cachedMeasureWidth;
58
+ private readonly _defaultOptions;
59
+ constructor(ctx: RenderContext, options?: TextTableOptions);
60
+ get content(): TextTableContent;
61
+ set content(value: TextTableContent);
62
+ get wrapMode(): "none" | "char" | "word";
63
+ set wrapMode(value: "none" | "char" | "word");
64
+ get columnWidthMode(): TextTableColumnWidthMode;
65
+ set columnWidthMode(value: TextTableColumnWidthMode);
66
+ get cellPadding(): number;
67
+ set cellPadding(value: number);
68
+ get showBorders(): boolean;
69
+ set showBorders(value: boolean);
70
+ get outerBorder(): boolean;
71
+ set outerBorder(value: boolean);
72
+ get border(): boolean;
73
+ set border(value: boolean);
74
+ get borderStyle(): BorderStyle;
75
+ set borderStyle(value: BorderStyle);
76
+ get borderColor(): RGBA;
77
+ set borderColor(value: ColorInput);
78
+ shouldStartSelection(x: number, y: number): boolean;
79
+ onSelectionChanged(selection: Selection | null): boolean;
80
+ hasSelection(): boolean;
81
+ getSelection(): {
82
+ start: number;
83
+ end: number;
84
+ } | null;
85
+ getSelectedText(): string;
86
+ protected onResize(width: number, height: number): void;
87
+ protected renderSelf(buffer: OptimizedBuffer): void;
88
+ protected destroySelf(): void;
89
+ private setupMeasureFunc;
90
+ private rebuildCells;
91
+ private updateCellsDiff;
92
+ private createCell;
93
+ private toStyledText;
94
+ private destroyCells;
95
+ private rebuildLayoutForCurrentWidth;
96
+ private computeLayout;
97
+ private computeColumnWidths;
98
+ private expandColumnWidths;
99
+ private fitColumnWidths;
100
+ private computeRowHeights;
101
+ private computeOffsets;
102
+ private applyLayoutToViews;
103
+ private resolveBorderLayout;
104
+ private getVerticalBorderCount;
105
+ private getHorizontalBorderCount;
106
+ private drawBorders;
107
+ private drawCells;
108
+ private drawCellRange;
109
+ private redrawSelectionRows;
110
+ private clearCellRange;
111
+ private ensureLayoutReady;
112
+ private getCellAtLocalPosition;
113
+ private applySelectionToCells;
114
+ private findRowForLocalY;
115
+ private getSelectionRowRange;
116
+ private getDirtySelectionRowRange;
117
+ private resetRowSelection;
118
+ private resetCellSelections;
119
+ private createEmptyLayout;
120
+ private resolveLayoutWidthConstraint;
121
+ private getHorizontalCellPadding;
122
+ private getVerticalCellPadding;
123
+ private resolveCellPadding;
124
+ private invalidateLayoutAndRaster;
125
+ private invalidateRasterOnly;
126
+ }
@@ -95,7 +95,7 @@ export declare class TextareaRenderable extends EditBufferRenderable {
95
95
  focus(): void;
96
96
  blur(): void;
97
97
  get placeholder(): StyledText | string | null;
98
- set placeholder(value: StyledText | string | null);
98
+ set placeholder(value: StyledText | string | null | undefined);
99
99
  get placeholderColor(): RGBA;
100
100
  set placeholderColor(value: ColorInput);
101
101
  get backgroundColor(): RGBA;
@@ -13,6 +13,7 @@ export * from "./ScrollBar";
13
13
  export * from "./ScrollBox";
14
14
  export * from "./Select";
15
15
  export * from "./Slider";
16
+ export * from "./TextTable";
16
17
  export * from "./TabSelect";
17
18
  export * from "./Terminal";
18
19
  export * from "./Text";
package/renderer.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { Renderable, RootRenderable } from "./Renderable";
2
- import { type CursorStyle, DebugOverlayCorner, type RenderContext, type ThemeMode, type WidthMethod } from "./types";
2
+ import { DebugOverlayCorner, type CursorStyleOptions, type MousePointerStyle, type RenderContext, type ThemeMode, type WidthMethod } from "./types";
3
3
  import { RGBA, type ColorInput } from "./lib/RGBA";
4
4
  import type { Pointer } from "bun:ffi";
5
5
  import { OptimizedBuffer } from "./buffer";
@@ -17,6 +17,7 @@ export interface CliRendererConfig {
17
17
  remote?: boolean;
18
18
  exitOnCtrlC?: boolean;
19
19
  exitSignals?: NodeJS.Signals[];
20
+ forwardEnvKeys?: string[];
20
21
  debounceDelay?: number;
21
22
  targetFps?: number;
22
23
  maxFps?: number;
@@ -194,6 +195,7 @@ export declare class CliRenderer extends EventEmitter implements RenderContext {
194
195
  private _latestPointer;
195
196
  private _hasPointer;
196
197
  private _lastPointerModifiers;
198
+ private _currentMousePointerStyle;
197
199
  private _currentFocusedRenderable;
198
200
  private lifecyclePasses;
199
201
  private _openConsoleOnError;
@@ -276,12 +278,14 @@ export declare class CliRenderer extends EventEmitter implements RenderContext {
276
278
  private setupInput;
277
279
  private dispatchMouseEvent;
278
280
  private handleMouseData;
281
+ private processSingleMouseEvent;
279
282
  /**
280
283
  * Recheck hover state after hit grid changes.
281
284
  * Called after render when native code detects the hit grid changed.
282
285
  * Fires out/over events if the element under the cursor changed.
283
286
  */
284
287
  private recheckHoverState;
288
+ setMousePointer(style: MousePointerStyle): void;
285
289
  hitTest(x: number, y: number): number;
286
290
  private takeMemorySnapshot;
287
291
  private startMemorySnapshotTimer;
@@ -304,10 +308,10 @@ export declare class CliRenderer extends EventEmitter implements RenderContext {
304
308
  dumpBuffers(timestamp?: number): void;
305
309
  dumpStdoutBuffer(timestamp?: number): void;
306
310
  static setCursorPosition(renderer: CliRenderer, x: number, y: number, visible?: boolean): void;
307
- static setCursorStyle(renderer: CliRenderer, style: CursorStyle, blinking?: boolean, color?: RGBA): void;
311
+ static setCursorStyle(renderer: CliRenderer, options: CursorStyleOptions): void;
308
312
  static setCursorColor(renderer: CliRenderer, color: RGBA): void;
309
313
  setCursorPosition(x: number, y: number, visible?: boolean): void;
310
- setCursorStyle(style: CursorStyle, blinking?: boolean, color?: RGBA): void;
314
+ setCursorStyle(options: CursorStyleOptions): void;
311
315
  setCursorColor(color: RGBA): void;
312
316
  getCursorState(): import("./zig").CursorState;
313
317
  addPostProcessFn(processFn: (buffer: OptimizedBuffer, deltaTime: number) => void): void;
package/testing.js CHANGED
@@ -4,7 +4,7 @@ import {
4
4
  CliRenderer,
5
5
  TreeSitterClient,
6
6
  resolveRenderLib
7
- } from "./index-bm6w895a.js";
7
+ } from "./index-yc0yx782.js";
8
8
 
9
9
  // src/testing/test-renderer.ts
10
10
  import { Readable } from "stream";
package/types.d.ts CHANGED
@@ -23,9 +23,12 @@ export declare const ATTRIBUTE_BASE_MASK = 255;
23
23
  export declare function getBaseAttributes(attr: number): number;
24
24
  export type ThemeMode = "dark" | "light";
25
25
  export type CursorStyle = "block" | "line" | "underline";
26
+ export type MousePointerStyle = "default" | "pointer" | "text" | "crosshair" | "move" | "not-allowed";
26
27
  export interface CursorStyleOptions {
27
- style: CursorStyle;
28
- blinking: boolean;
28
+ style?: CursorStyle;
29
+ blinking?: boolean;
30
+ color?: RGBA;
31
+ cursor?: MousePointerStyle;
29
32
  }
30
33
  export declare enum DebugOverlayCorner {
31
34
  topLeft = 0,
@@ -55,8 +58,9 @@ export interface RenderContext extends EventEmitter {
55
58
  height: number;
56
59
  requestRender: () => void;
57
60
  setCursorPosition: (x: number, y: number, visible: boolean) => void;
58
- setCursorStyle: (style: CursorStyle, blinking: boolean) => void;
61
+ setCursorStyle: (options: CursorStyleOptions) => void;
59
62
  setCursorColor: (color: RGBA) => void;
63
+ setMousePointer: (shape: MousePointerStyle) => void;
60
64
  widthMethod: WidthMethod;
61
65
  capabilities: any | null;
62
66
  requestLive: () => void;
package/zig-structs.d.ts CHANGED
@@ -40,6 +40,22 @@ export declare const LineInfoStruct: import("bun-ffi-structs").DefineStructRetur
40
40
  }], readonly ["maxWidth", "u32"]], {}>;
41
41
  export declare const MeasureResultStruct: import("bun-ffi-structs").DefineStructReturnType<[readonly ["lineCount", "u32"], readonly ["maxWidth", "u32"]], {}>;
42
42
  export declare const CursorStateStruct: import("bun-ffi-structs").DefineStructReturnType<[readonly ["x", "u32"], readonly ["y", "u32"], readonly ["visible", "bool_u8"], readonly ["style", "u8"], readonly ["blinking", "bool_u8"], readonly ["r", "f32"], readonly ["g", "f32"], readonly ["b", "f32"], readonly ["a", "f32"]], {}>;
43
+ export declare const CursorStyleOptionsStruct: import("bun-ffi-structs").DefineStructReturnType<[readonly ["style", "u8", {
44
+ readonly default: 255;
45
+ }], readonly ["blinking", "u8", {
46
+ readonly default: 255;
47
+ }], readonly ["color", "pointer", {
48
+ readonly optional: true;
49
+ readonly packTransform: (rgba?: RGBA) => Pointer | null;
50
+ readonly unpackTransform: (ptr?: Pointer) => RGBA | undefined;
51
+ }], readonly ["cursor", "u8", {
52
+ readonly default: 255;
53
+ }]], {}>;
54
+ export declare const GridDrawOptionsStruct: import("bun-ffi-structs").DefineStructReturnType<[readonly ["drawInner", "bool_u8", {
55
+ readonly default: true;
56
+ }], readonly ["drawOuter", "bool_u8", {
57
+ readonly default: true;
58
+ }]], {}>;
43
59
  export type GrowthPolicy = "grow" | "block";
44
60
  export type NativeSpanFeedOptions = {
45
61
  chunkSize?: number;
package/zig.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { type Pointer } from "bun:ffi";
2
- import { type CursorStyle, type DebugOverlayCorner, type WidthMethod, type Highlight, type LineInfo } from "./types";
2
+ import { type CursorStyle, type CursorStyleOptions, type DebugOverlayCorner, type WidthMethod, type Highlight, type LineInfo } from "./types";
3
3
  export type { LineInfo };
4
4
  import { RGBA } from "./lib/RGBA";
5
5
  import { OptimizedBuffer } from "./buffer";
@@ -43,6 +43,7 @@ export interface RenderLib {
43
43
  testing?: boolean;
44
44
  remote?: boolean;
45
45
  }) => Pointer | null;
46
+ setTerminalEnvVar: (renderer: Pointer, key: string, value: string) => boolean;
46
47
  destroyRenderer: (renderer: Pointer) => void;
47
48
  setUseThread: (renderer: Pointer, useThread: boolean) => void;
48
49
  setBackgroundColor: (renderer: Pointer, color: RGBA) => void;
@@ -75,13 +76,17 @@ export interface RenderLib {
75
76
  bufferDrawPackedBuffer: (buffer: Pointer, dataPtr: Pointer, dataLen: number, posX: number, posY: number, terminalWidthCells: number, terminalHeightCells: number) => void;
76
77
  bufferDrawGrayscaleBuffer: (buffer: Pointer, posX: number, posY: number, intensitiesPtr: Pointer, srcWidth: number, srcHeight: number, fg: RGBA | null, bg: RGBA | null) => void;
77
78
  bufferDrawGrayscaleBufferSupersampled: (buffer: Pointer, posX: number, posY: number, intensitiesPtr: Pointer, srcWidth: number, srcHeight: number, fg: RGBA | null, bg: RGBA | null) => void;
79
+ bufferDrawGrid: (buffer: Pointer, borderChars: Uint32Array, borderFg: RGBA, borderBg: RGBA, columnOffsets: Int32Array, columnCount: number, rowOffsets: Int32Array, rowCount: number, options: {
80
+ drawInner: boolean;
81
+ drawOuter: boolean;
82
+ }) => void;
78
83
  bufferDrawBox: (buffer: Pointer, x: number, y: number, width: number, height: number, borderChars: Uint32Array, packedOptions: number, borderColor: RGBA, backgroundColor: RGBA, title: string | null) => void;
79
84
  bufferResize: (buffer: Pointer, width: number, height: number) => void;
80
85
  resizeRenderer: (renderer: Pointer, width: number, height: number) => void;
81
86
  setCursorPosition: (renderer: Pointer, x: number, y: number, visible: boolean) => void;
82
- setCursorStyle: (renderer: Pointer, style: CursorStyle, blinking: boolean) => void;
83
87
  setCursorColor: (renderer: Pointer, color: RGBA) => void;
84
88
  getCursorState: (renderer: Pointer) => CursorState;
89
+ setCursorStyleOptions: (renderer: Pointer, options: CursorStyleOptions) => void;
85
90
  setDebugOverlay: (renderer: Pointer, enabled: boolean, corner: DebugOverlayCorner) => void;
86
91
  clearTerminal: (renderer: Pointer) => void;
87
92
  setTerminalTitle: (renderer: Pointer, title: string) => void;