@opentui/core 0.5.3 → 0.5.6

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/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "main": "index.node.js",
5
5
  "types": "index.d.ts",
6
6
  "type": "module",
7
- "version": "0.5.3",
7
+ "version": "0.5.6",
8
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": {
@@ -75,13 +75,13 @@
75
75
  "web-tree-sitter": "0.25.10"
76
76
  },
77
77
  "optionalDependencies": {
78
- "@opentui/core-darwin-x64": "0.5.3",
79
- "@opentui/core-darwin-arm64": "0.5.3",
80
- "@opentui/core-linux-x64": "0.5.3",
81
- "@opentui/core-linux-arm64": "0.5.3",
82
- "@opentui/core-win32-x64": "0.5.3",
83
- "@opentui/core-win32-arm64": "0.5.3",
84
- "@opentui/core-linux-x64-musl": "0.5.3",
85
- "@opentui/core-linux-arm64-musl": "0.5.3"
78
+ "@opentui/core-darwin-x64": "0.5.6",
79
+ "@opentui/core-darwin-arm64": "0.5.6",
80
+ "@opentui/core-linux-x64": "0.5.6",
81
+ "@opentui/core-linux-arm64": "0.5.6",
82
+ "@opentui/core-win32-x64": "0.5.6",
83
+ "@opentui/core-win32-arm64": "0.5.6",
84
+ "@opentui/core-linux-x64-musl": "0.5.6",
85
+ "@opentui/core-linux-arm64-musl": "0.5.6"
86
86
  }
87
87
  }
@@ -0,0 +1,67 @@
1
+ import { type RenderableOptions, Renderable } from "../Renderable.js";
2
+ import type { KeyEvent, PasteEvent } from "../lib/KeyHandler.js";
3
+ import type { RenderContext } from "../types.js";
4
+ import type { OptimizedBuffer } from "../buffer.js";
5
+ import { type Selection } from "../lib/selection.js";
6
+ export type EmbeddedTerminalDataSource = "input" | "response";
7
+ export interface EmbeddedTerminalOptions extends RenderableOptions<EmbeddedTerminalRenderable> {
8
+ cols?: number;
9
+ rows?: number;
10
+ maxScrollback?: number;
11
+ onData?: (data: Uint8Array, source: EmbeddedTerminalDataSource) => void;
12
+ onTerminalResize?: (cols: number, rows: number) => void;
13
+ onScreenChange?: () => void;
14
+ selectable?: boolean;
15
+ }
16
+ export type EmbeddedTerminalScreen = {
17
+ text: string;
18
+ lines: string[];
19
+ columns: number;
20
+ rows: number;
21
+ cursor: {
22
+ x: number;
23
+ y: number;
24
+ visible: boolean;
25
+ };
26
+ };
27
+ export declare class EmbeddedTerminalRenderable extends Renderable {
28
+ selectable: boolean;
29
+ private readonly lib;
30
+ private handle;
31
+ private _onData?;
32
+ private _onTerminalResize?;
33
+ private _onScreenChange?;
34
+ private keyreleaseHandler;
35
+ private hadRenderHooks;
36
+ private selection;
37
+ constructor(ctx: RenderContext, options: EmbeddedTerminalOptions);
38
+ get onData(): ((data: Uint8Array, source: EmbeddedTerminalDataSource) => void) | undefined;
39
+ set onData(value: ((data: Uint8Array, source: EmbeddedTerminalDataSource) => void) | undefined);
40
+ get onTerminalResize(): ((cols: number, rows: number) => void) | undefined;
41
+ set onTerminalResize(value: ((cols: number, rows: number) => void) | undefined);
42
+ get onScreenChange(): (() => void) | undefined;
43
+ set onScreenChange(value: (() => void) | undefined);
44
+ screen(): EmbeddedTerminalScreen;
45
+ write(data: string | Uint8Array): void;
46
+ invalidate(): void;
47
+ encodeKey(key: KeyEvent): Uint8Array;
48
+ encodePaste(bytes: Uint8Array): Uint8Array;
49
+ shouldStartSelection(x: number, y: number): boolean;
50
+ onSelectionChanged(selection: Selection | null): boolean;
51
+ hasSelection(): boolean;
52
+ getSelectedText(): string;
53
+ focus(): void;
54
+ blur(): void;
55
+ handleKeyPress(key: KeyEvent): boolean;
56
+ handlePaste(event: PasteEvent): void;
57
+ render(buffer: OptimizedBuffer, deltaTime: number): void;
58
+ protected onResize(width: number, height: number): void;
59
+ protected renderSelf(buffer: OptimizedBuffer): void;
60
+ protected destroySelf(): void;
61
+ protected onRemove(): void;
62
+ private setupMouse;
63
+ private forwardMouse;
64
+ private flushResponses;
65
+ private removeKeyreleaseHandler;
66
+ private send;
67
+ }
@@ -6,6 +6,7 @@ export * from "./composition/VRenderable.js";
6
6
  export * from "./composition/vnode.js";
7
7
  export * from "./Diff.js";
8
8
  export * from "./EditBufferRenderable.js";
9
+ export * from "./EmbeddedTerminal.js";
9
10
  export * from "./FrameBuffer.js";
10
11
  export * from "./Input.js";
11
12
  export * from "./Image.js";
package/testing.bun.js CHANGED
@@ -2,11 +2,11 @@
2
2
  import {
3
3
  ANSI,
4
4
  CliRenderer
5
- } from "./chunk-bun-t68f2fmr.js";
5
+ } from "./chunk-bun-da1keqyp.js";
6
6
  import {
7
7
  SystemClock,
8
8
  TreeSitterClient
9
- } from "./chunk-bun-26r5c5w5.js";
9
+ } from "./chunk-bun-9335djz2.js";
10
10
 
11
11
  // src/testing/mock-keys.ts
12
12
  import { Buffer as Buffer2 } from "buffer";
package/testing.js CHANGED
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  ANSI,
3
3
  CliRenderer
4
- } from "./chunk-node-kq7as74d.js";
4
+ } from "./chunk-node-ks0581vk.js";
5
5
  import {
6
6
  SystemClock,
7
7
  TreeSitterClient
8
- } from "./chunk-node-aj3n20gq.js";
8
+ } from "./chunk-node-2h23nsbj.js";
9
9
 
10
10
  // src/testing/mock-keys.ts
11
11
  import { Buffer as Buffer2 } from "node:buffer";
package/utils.d.ts CHANGED
@@ -1,11 +1,12 @@
1
1
  import { Renderable } from "./Renderable.js";
2
- export declare function createTextAttributes({ bold, italic, underline, dim, blink, inverse, hidden, strikethrough, }?: {
2
+ export declare function createTextAttributes({ bold, italic, underline, dim, blink, inverse, reverse, hidden, strikethrough, }?: {
3
3
  bold?: boolean;
4
4
  italic?: boolean;
5
5
  underline?: boolean;
6
6
  dim?: boolean;
7
7
  blink?: boolean;
8
8
  inverse?: boolean;
9
+ reverse?: boolean;
9
10
  hidden?: boolean;
10
11
  strikethrough?: boolean;
11
12
  }): number;
package/yoga.bun.js CHANGED
@@ -93,7 +93,7 @@ import {
93
93
  WRAP_WRAP_REVERSE,
94
94
  Wrap,
95
95
  yoga_default
96
- } from "./chunk-bun-26r5c5w5.js";
96
+ } from "./chunk-bun-9335djz2.js";
97
97
  export {
98
98
  yoga_default as default,
99
99
  Wrap,
package/yoga.js CHANGED
@@ -92,7 +92,7 @@ import {
92
92
  WRAP_WRAP_REVERSE,
93
93
  Wrap,
94
94
  yoga_default
95
- } from "./chunk-node-aj3n20gq.js";
95
+ } from "./chunk-node-2h23nsbj.js";
96
96
  export {
97
97
  yoga_default as default,
98
98
  Wrap,
package/zig-structs.d.ts CHANGED
@@ -82,6 +82,8 @@ export declare const LineInfoStruct: import("bun-ffi-structs").DefineStructRetur
82
82
  }], readonly ["widthColsMax", "u32"]], {}>;
83
83
  export declare const MeasureResultStruct: import("bun-ffi-structs").DefineStructReturnType<[readonly ["lineCount", "u32"], readonly ["widthColsMax", "u32"]], {}>;
84
84
  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"]], {}>;
85
+ export declare const EmbeddedTerminalCursorStruct: import("bun-ffi-structs").DefineStructReturnType<[readonly ["x", "u16"], readonly ["y", "u16"], readonly ["hasValue", "bool_u8"], readonly ["visible", "bool_u8"], readonly ["blinking", "bool_u8"], readonly ["wideTail", "bool_u8"], readonly ["style", "u8"], readonly ["colorHasValue", "bool_u8"], readonly ["colorR", "u8"], readonly ["colorG", "u8"], readonly ["colorB", "u8"], readonly ["padding", "u8"]], {}>;
86
+ export declare const EmbeddedTerminalKeyOptionsStruct: import("bun-ffi-structs").DefineStructReturnType<[readonly ["action", "u8"], readonly ["composing", "u8"], readonly ["mods", "u16"], readonly ["consumedMods", "u16"], readonly ["padding", "u16"], readonly ["unshiftedCodepoint", "u32"]], {}>;
85
87
  export declare const CursorStyleOptionsStruct: import("bun-ffi-structs").DefineStructReturnType<[readonly ["style", "u8", {
86
88
  readonly default: 255;
87
89
  }], readonly ["blinking", "u8", {
package/zig.d.ts CHANGED
@@ -89,6 +89,38 @@ export declare enum NativeClipboardShutdownStatus {
89
89
  Ready = 1,
90
90
  InvalidHandle = 2
91
91
  }
92
+ export type EmbeddedTerminalHandle = NativeHandle<"embedded_terminal">;
93
+ export type EmbeddedTerminalCursor = {
94
+ x: number;
95
+ y: number;
96
+ hasValue: boolean;
97
+ visible: boolean;
98
+ blinking: boolean;
99
+ wideTail: boolean;
100
+ style: "bar" | "block" | "underline" | "block-hollow";
101
+ color?: {
102
+ r: number;
103
+ g: number;
104
+ b: number;
105
+ };
106
+ };
107
+ export type EmbeddedTerminalKey = {
108
+ action?: "release" | "press" | "repeat";
109
+ key?: string;
110
+ mods?: number;
111
+ consumedMods?: number;
112
+ composing?: boolean;
113
+ text?: string;
114
+ unshiftedCodepoint?: number;
115
+ };
116
+ export type EmbeddedTerminalMouse = {
117
+ action: "press" | "release" | "motion";
118
+ button?: "unknown" | "left" | "right" | "middle" | "four" | "five" | "six" | "seven";
119
+ mods?: number;
120
+ x: number;
121
+ y: number;
122
+ anyButtonPressed?: boolean;
123
+ };
92
124
  export declare enum LogLevel {
93
125
  Error = 0,
94
126
  Warn = 1,
@@ -225,7 +257,7 @@ export interface AudioEngineLib {
225
257
  export interface RenderLib extends AudioEngineLib {
226
258
  createRenderer: (width: number, height: number, options?: NativeRendererCreateOptions) => RendererHandle | null;
227
259
  setTerminalEnvVar: (renderer: RendererHandle, key: string, value: string) => boolean;
228
- destroyRenderer: (renderer: RendererHandle) => void;
260
+ destroyRenderer: (renderer: RendererHandle, flushInput?: boolean) => void;
229
261
  setUseThread: (renderer: RendererHandle, useThread: boolean) => void;
230
262
  setClearOnShutdown: (renderer: RendererHandle, clear: boolean) => void;
231
263
  setBackgroundColor: (renderer: RendererHandle, color: RGBA) => void;
@@ -263,13 +295,13 @@ export interface RenderLib extends AudioEngineLib {
263
295
  bufferSetCellWithAlphaBlending: (buffer: OptimizedBufferHandle, x: number, y: number, char: string, color: RGBA, bgColor: RGBA, attributes?: number) => void;
264
296
  bufferSetCell: (buffer: OptimizedBufferHandle, x: number, y: number, char: string, color: RGBA, bgColor: RGBA, attributes?: number) => void;
265
297
  bufferFillRect: (buffer: OptimizedBufferHandle, x: number, y: number, width: number, height: number, color: RGBA) => void;
266
- bufferColorMatrix: (buffer: OptimizedBufferHandle, matrixPtr: Pointer, cellMaskPtr: Pointer, cellMaskCount: number, strength: number, target: TargetChannel) => void;
267
- bufferColorMatrixUniform: (buffer: OptimizedBufferHandle, matrixPtr: Pointer, strength: number, target: TargetChannel) => void;
268
- bufferDrawSuperSampleBuffer: (buffer: OptimizedBufferHandle, x: number, y: number, pixelDataPtr: Pointer, pixelDataLength: number, format: "bgra8unorm" | "rgba8unorm", alignedBytesPerRow: number) => void;
298
+ bufferColorMatrix: (buffer: OptimizedBufferHandle, matrix: Pointer | Float32Array, cellMask: Pointer | Float32Array, cellMaskCount: number, strength: number, target: TargetChannel) => void;
299
+ bufferColorMatrixUniform: (buffer: OptimizedBufferHandle, matrix: Pointer | Float32Array, strength: number, target: TargetChannel) => void;
300
+ bufferDrawSuperSampleBuffer: (buffer: OptimizedBufferHandle, x: number, y: number, pixelData: Pointer | Uint8Array, pixelDataLength: number, format: "bgra8unorm" | "rgba8unorm", alignedBytesPerRow: number) => void;
269
301
  bufferDrawImage: (buffer: OptimizedBufferHandle, image: ImageHandle, x: number, y: number, width: number, height: number, pixelWidth: number, pixelHeight: number, sourceX: number, sourceY: number, sourceWidth: number, sourceHeight: number, protocol: ImageRenderProtocol) => boolean;
270
- bufferDrawPackedBuffer: (buffer: OptimizedBufferHandle, dataPtr: Pointer, dataLen: number, posX: number, posY: number, terminalWidthCells: number, terminalHeightCells: number) => void;
271
- bufferDrawGrayscaleBuffer: (buffer: OptimizedBufferHandle, posX: number, posY: number, intensitiesPtr: Pointer, srcWidth: number, srcHeight: number, fg: RGBA | null, bg: RGBA | null) => void;
272
- bufferDrawGrayscaleBufferSupersampled: (buffer: OptimizedBufferHandle, posX: number, posY: number, intensitiesPtr: Pointer, srcWidth: number, srcHeight: number, fg: RGBA | null, bg: RGBA | null) => void;
302
+ bufferDrawPackedBuffer: (buffer: OptimizedBufferHandle, data: Pointer | Uint8Array, dataLen: number, posX: number, posY: number, terminalWidthCells: number, terminalHeightCells: number) => void;
303
+ bufferDrawGrayscaleBuffer: (buffer: OptimizedBufferHandle, posX: number, posY: number, intensities: Pointer | Float32Array, srcWidth: number, srcHeight: number, fg: RGBA | null, bg: RGBA | null) => void;
304
+ bufferDrawGrayscaleBufferSupersampled: (buffer: OptimizedBufferHandle, posX: number, posY: number, intensities: Pointer | Float32Array, srcWidth: number, srcHeight: number, fg: RGBA | null, bg: RGBA | null) => void;
273
305
  bufferDrawGrid: (buffer: OptimizedBufferHandle, borderChars: Uint32Array, borderFg: RGBA, borderBg: RGBA, columnOffsets: Int32Array, columnCount: number, rowOffsets: Int32Array, rowCount: number, options: {
274
306
  drawInner: boolean;
275
307
  drawOuter: boolean;
@@ -683,6 +715,32 @@ export interface RenderLib extends AudioEngineLib {
683
715
  destroyNativeRenderable: (handle: NativeRenderableHandle) => void;
684
716
  nativeRenderableAttachYogaNode: (handle: NativeRenderableHandle, node: Pointer) => boolean;
685
717
  nativeRenderableSetMeasureTarget: (handle: NativeRenderableHandle, kind: NativeMeasureTargetKind, target: NativeMeasureTargetHandle | 0) => boolean;
718
+ createEmbeddedTerminal: (options: {
719
+ cols: number;
720
+ rows: number;
721
+ maxScrollback?: number;
722
+ }) => EmbeddedTerminalHandle;
723
+ destroyEmbeddedTerminal: (handle: EmbeddedTerminalHandle) => void;
724
+ embeddedTerminalWrite: (handle: EmbeddedTerminalHandle, data: string | Uint8Array) => void;
725
+ embeddedTerminalResize: (handle: EmbeddedTerminalHandle, cols: number, rows: number) => void;
726
+ embeddedTerminalInvalidate: (handle: EmbeddedTerminalHandle) => void;
727
+ embeddedTerminalScroll: (handle: EmbeddedTerminalHandle, delta: number) => void;
728
+ embeddedTerminalSetSelection: (handle: EmbeddedTerminalHandle, start: {
729
+ x: number;
730
+ y: number;
731
+ }, end: {
732
+ x: number;
733
+ y: number;
734
+ }) => void;
735
+ embeddedTerminalClearSelection: (handle: EmbeddedTerminalHandle) => void;
736
+ embeddedTerminalGetSelectedText: (handle: EmbeddedTerminalHandle) => Uint8Array;
737
+ embeddedTerminalCompose: (handle: EmbeddedTerminalHandle, target: OptimizedBufferHandle, x: number, y: number) => void;
738
+ embeddedTerminalCursor: (handle: EmbeddedTerminalHandle) => EmbeddedTerminalCursor;
739
+ embeddedTerminalEncodeKey: (handle: EmbeddedTerminalHandle, key: EmbeddedTerminalKey) => Uint8Array;
740
+ embeddedTerminalEncodeMouse: (handle: EmbeddedTerminalHandle, mouse: EmbeddedTerminalMouse) => Uint8Array;
741
+ embeddedTerminalEncodePaste: (handle: EmbeddedTerminalHandle, input: Uint8Array) => Uint8Array;
742
+ embeddedTerminalEncodeFocus: (handle: EmbeddedTerminalHandle, focused: boolean) => Uint8Array;
743
+ embeddedTerminalDrainResponses: (handle: EmbeddedTerminalHandle) => Uint8Array;
686
744
  onNativeEvent: (name: string, handler: (data: ArrayBuffer) => void) => void;
687
745
  onceNativeEvent: (name: string, handler: (data: ArrayBuffer) => void) => void;
688
746
  offNativeEvent: (name: string, handler: (data: ArrayBuffer) => void) => void;