@opentui/core 0.1.78 → 0.1.80

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,7 +4,7 @@
4
4
  "main": "index.js",
5
5
  "types": "index.d.ts",
6
6
  "type": "module",
7
- "version": "0.1.78",
7
+ "version": "0.1.80",
8
8
  "description": "OpenTUI is a TypeScript library for building terminal user interfaces (TUIs)",
9
9
  "license": "MIT",
10
10
  "repository": {
@@ -54,14 +54,14 @@
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
- "@opentui/core-darwin-x64": "0.1.78",
61
- "@opentui/core-darwin-arm64": "0.1.78",
62
- "@opentui/core-linux-x64": "0.1.78",
63
- "@opentui/core-linux-arm64": "0.1.78",
64
- "@opentui/core-win32-x64": "0.1.78",
65
- "@opentui/core-win32-arm64": "0.1.78"
60
+ "@opentui/core-darwin-x64": "0.1.80",
61
+ "@opentui/core-darwin-arm64": "0.1.80",
62
+ "@opentui/core-linux-x64": "0.1.80",
63
+ "@opentui/core-linux-arm64": "0.1.80",
64
+ "@opentui/core-win32-x64": "0.1.80",
65
+ "@opentui/core-win32-arm64": "0.1.80"
66
66
  }
67
67
  }
@@ -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";
@@ -125,4 +126,10 @@ export declare class DiffRenderable extends Renderable {
125
126
  set conceal(value: boolean);
126
127
  get fg(): RGBA | undefined;
127
128
  set fg(value: string | RGBA | undefined);
129
+ setLineColor(line: number, color: string | RGBA | LineColorConfig): void;
130
+ clearLineColor(line: number): void;
131
+ setLineColors(lineColors: Map<number, string | RGBA | LineColorConfig>): void;
132
+ clearAllLineColors(): void;
133
+ highlightLines(startLine: number, endLine: number, color: string | RGBA | LineColorConfig): void;
134
+ clearHighlightLines(startLine: number, endLine: number): void;
128
135
  }
@@ -51,6 +51,13 @@ export declare class InputRenderable extends TextareaRenderable {
51
51
  submit(): boolean;
52
52
  deleteCharBackward(): boolean;
53
53
  deleteChar(): boolean;
54
+ deleteLine(): boolean;
55
+ deleteWordBackward(): boolean;
56
+ deleteWordForward(): boolean;
57
+ deleteToLineStart(): boolean;
58
+ deleteToLineEnd(): boolean;
59
+ undo(): boolean;
60
+ redo(): boolean;
54
61
  deleteCharacter(direction: "backward" | "forward"): void;
55
62
  set maxLength(maxLength: number);
56
63
  get maxLength(): number;
@@ -69,4 +69,6 @@ export declare class LineNumberRenderable extends Renderable {
69
69
  getHideLineNumbers(): Set<number>;
70
70
  setLineNumbers(lineNumbers: Map<number, number>): void;
71
71
  getLineNumbers(): Map<number, number>;
72
+ highlightLines(startLine: number, endLine: number, color: string | RGBA | LineColorConfig): void;
73
+ clearHighlightLines(startLine: number, endLine: number): void;
72
74
  }
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";
@@ -194,6 +194,7 @@ export declare class CliRenderer extends EventEmitter implements RenderContext {
194
194
  private _latestPointer;
195
195
  private _hasPointer;
196
196
  private _lastPointerModifiers;
197
+ private _currentMousePointerStyle;
197
198
  private _currentFocusedRenderable;
198
199
  private lifecyclePasses;
199
200
  private _openConsoleOnError;
@@ -276,12 +277,14 @@ export declare class CliRenderer extends EventEmitter implements RenderContext {
276
277
  private setupInput;
277
278
  private dispatchMouseEvent;
278
279
  private handleMouseData;
280
+ private processSingleMouseEvent;
279
281
  /**
280
282
  * Recheck hover state after hit grid changes.
281
283
  * Called after render when native code detects the hit grid changed.
282
284
  * Fires out/over events if the element under the cursor changed.
283
285
  */
284
286
  private recheckHoverState;
287
+ setMousePointer(style: MousePointerStyle): void;
285
288
  hitTest(x: number, y: number): number;
286
289
  private takeMemorySnapshot;
287
290
  private startMemorySnapshotTimer;
@@ -304,10 +307,10 @@ export declare class CliRenderer extends EventEmitter implements RenderContext {
304
307
  dumpBuffers(timestamp?: number): void;
305
308
  dumpStdoutBuffer(timestamp?: number): void;
306
309
  static setCursorPosition(renderer: CliRenderer, x: number, y: number, visible?: boolean): void;
307
- static setCursorStyle(renderer: CliRenderer, style: CursorStyle, blinking?: boolean, color?: RGBA): void;
310
+ static setCursorStyle(renderer: CliRenderer, options: CursorStyleOptions): void;
308
311
  static setCursorColor(renderer: CliRenderer, color: RGBA): void;
309
312
  setCursorPosition(x: number, y: number, visible?: boolean): void;
310
- setCursorStyle(style: CursorStyle, blinking?: boolean, color?: RGBA): void;
313
+ setCursorStyle(options: CursorStyleOptions): void;
311
314
  setCursorColor(color: RGBA): void;
312
315
  getCursorState(): import("./zig").CursorState;
313
316
  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-rje6z21e.js";
7
+ } from "./index-vnvba6q9.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,3 +40,82 @@ 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 type GrowthPolicy = "grow" | "block";
55
+ export type NativeSpanFeedOptions = {
56
+ chunkSize?: number;
57
+ initialChunks?: number;
58
+ maxBytes?: bigint;
59
+ growthPolicy?: GrowthPolicy;
60
+ autoCommitOnFull?: boolean;
61
+ spanQueueCapacity?: number;
62
+ };
63
+ export type NativeSpanFeedStats = {
64
+ bytesWritten: bigint;
65
+ spansCommitted: bigint;
66
+ chunks: number;
67
+ pendingSpans: number;
68
+ };
69
+ export type SpanInfo = {
70
+ chunkPtr: Pointer;
71
+ offset: number;
72
+ len: number;
73
+ chunkIndex: number;
74
+ };
75
+ export type ReserveInfo = {
76
+ ptr: Pointer;
77
+ len: number;
78
+ };
79
+ export declare const NativeSpanFeedOptionsStruct: import("bun-ffi-structs").DefineStructReturnType<[readonly ["chunkSize", "u32", {
80
+ readonly default: number;
81
+ }], readonly ["initialChunks", "u32", {
82
+ readonly default: 2;
83
+ }], readonly ["maxBytes", "u64", {
84
+ readonly default: 0n;
85
+ }], readonly ["growthPolicy", import("bun-ffi-structs").EnumDef<{
86
+ grow: number;
87
+ block: number;
88
+ }>, {
89
+ readonly default: "grow";
90
+ }], readonly ["autoCommitOnFull", "bool_u8", {
91
+ readonly default: true;
92
+ }], readonly ["spanQueueCapacity", "u32", {
93
+ readonly default: 0;
94
+ }]], {}>;
95
+ export declare const NativeSpanFeedStatsStruct: import("bun-ffi-structs").DefineStructReturnType<[readonly ["bytesWritten", "u64"], readonly ["spansCommitted", "u64"], readonly ["chunks", "u32"], readonly ["pendingSpans", "u32"]], {}>;
96
+ export declare const SpanInfoStruct: import("bun-ffi-structs").DefineStructReturnType<[readonly ["chunkPtr", "pointer"], readonly ["offset", "u32"], readonly ["len", "u32"], readonly ["chunkIndex", "u32"], readonly ["reserved", "u32", {
97
+ readonly default: 0;
98
+ }]], {
99
+ readonly reduceValue: (value: {
100
+ chunkPtr: Pointer;
101
+ offset: number;
102
+ len: number;
103
+ chunkIndex: number;
104
+ }) => {
105
+ chunkPtr: Pointer;
106
+ offset: number;
107
+ len: number;
108
+ chunkIndex: number;
109
+ };
110
+ }>;
111
+ export declare const ReserveInfoStruct: import("bun-ffi-structs").DefineStructReturnType<[readonly ["ptr", "pointer"], readonly ["len", "u32"], readonly ["reserved", "u32", {
112
+ readonly default: 0;
113
+ }]], {
114
+ readonly reduceValue: (value: {
115
+ ptr: Pointer;
116
+ len: number;
117
+ }) => {
118
+ ptr: Pointer;
119
+ len: number;
120
+ };
121
+ }>;
package/zig.d.ts CHANGED
@@ -1,9 +1,10 @@
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";
6
6
  import { TextBuffer } from "./text-buffer";
7
+ import type { NativeSpanFeedOptions, NativeSpanFeedStats, ReserveInfo } from "./zig-structs";
7
8
  export declare enum LogLevel {
8
9
  Error = 0,
9
10
  Warn = 1,
@@ -36,6 +37,7 @@ export interface CursorState {
36
37
  blinking: boolean;
37
38
  color: RGBA;
38
39
  }
40
+ export type NativeSpanFeedEventHandler = (eventId: number, arg0: Pointer, arg1: number | bigint) => void;
39
41
  export interface RenderLib {
40
42
  createRenderer: (width: number, height: number, options?: {
41
43
  testing?: boolean;
@@ -77,9 +79,9 @@ export interface RenderLib {
77
79
  bufferResize: (buffer: Pointer, width: number, height: number) => void;
78
80
  resizeRenderer: (renderer: Pointer, width: number, height: number) => void;
79
81
  setCursorPosition: (renderer: Pointer, x: number, y: number, visible: boolean) => void;
80
- setCursorStyle: (renderer: Pointer, style: CursorStyle, blinking: boolean) => void;
81
82
  setCursorColor: (renderer: Pointer, color: RGBA) => void;
82
83
  getCursorState: (renderer: Pointer) => CursorState;
84
+ setCursorStyleOptions: (renderer: Pointer, options: CursorStyleOptions) => void;
83
85
  setDebugOverlay: (renderer: Pointer, enabled: boolean, corner: DebugOverlayCorner) => void;
84
86
  clearTerminal: (renderer: Pointer) => void;
85
87
  setTerminalTitle: (renderer: Pointer, title: string) => void;
@@ -317,6 +319,22 @@ export interface RenderLib {
317
319
  }>;
318
320
  }) => void;
319
321
  bufferDrawChar: (buffer: Pointer, char: number, x: number, y: number, fg: RGBA, bg: RGBA, attributes?: number) => void;
322
+ registerNativeSpanFeedStream: (stream: Pointer, handler: NativeSpanFeedEventHandler) => void;
323
+ unregisterNativeSpanFeedStream: (stream: Pointer) => void;
324
+ createNativeSpanFeed: (options?: NativeSpanFeedOptions | null) => Pointer;
325
+ attachNativeSpanFeed: (stream: Pointer) => number;
326
+ destroyNativeSpanFeed: (stream: Pointer) => void;
327
+ streamWrite: (stream: Pointer, data: Uint8Array | string) => number;
328
+ streamCommit: (stream: Pointer) => number;
329
+ streamDrainSpans: (stream: Pointer, outBuffer: Uint8Array, maxSpans: number) => number;
330
+ streamClose: (stream: Pointer) => number;
331
+ streamSetOptions: (stream: Pointer, options: NativeSpanFeedOptions) => number;
332
+ streamGetStats: (stream: Pointer) => NativeSpanFeedStats | null;
333
+ streamReserve: (stream: Pointer, minLen: number) => {
334
+ status: number;
335
+ info: ReserveInfo | null;
336
+ };
337
+ streamCommitReserved: (stream: Pointer, length: number) => number;
320
338
  onNativeEvent: (name: string, handler: (data: ArrayBuffer) => void) => void;
321
339
  onceNativeEvent: (name: string, handler: (data: ArrayBuffer) => void) => void;
322
340
  offNativeEvent: (name: string, handler: (data: ArrayBuffer) => void) => void;