@opentui/core 0.1.7 → 0.1.9

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/lib/RGBA.d.ts ADDED
@@ -0,0 +1,24 @@
1
+ export declare class RGBA {
2
+ buffer: Float32Array;
3
+ constructor(buffer: Float32Array);
4
+ static fromArray(array: Float32Array): RGBA;
5
+ static fromValues(r: number, g: number, b: number, a?: number): RGBA;
6
+ static fromInts(r: number, g: number, b: number, a?: number): RGBA;
7
+ static fromHex(hex: string): RGBA;
8
+ toInts(): [number, number, number, number];
9
+ get r(): number;
10
+ set r(value: number);
11
+ get g(): number;
12
+ set g(value: number);
13
+ get b(): number;
14
+ set b(value: number);
15
+ get a(): number;
16
+ set a(value: number);
17
+ map<R>(fn: (value: number) => R): R[];
18
+ toString(): string;
19
+ }
20
+ export type ColorInput = string | RGBA;
21
+ export declare function hexToRgb(hex: string): RGBA;
22
+ export declare function rgbToHex(rgb: RGBA): string;
23
+ export declare function hsvToRgb(h: number, s: number, v: number): RGBA;
24
+ export declare function parseColor(color: ColorInput): RGBA;
@@ -4,6 +4,7 @@ interface NodeMetadata {
4
4
  [key: string]: any;
5
5
  }
6
6
  declare class TrackedNode<T extends NodeMetadata = NodeMetadata> extends EventEmitter {
7
+ private static idCounter;
7
8
  id: number;
8
9
  yogaNode: YogaNode;
9
10
  metadata: T;
@@ -1,5 +1,5 @@
1
1
  import { OptimizedBuffer } from "../buffer";
2
- import { RGBA } from "../types";
2
+ import { RGBA } from "./RGBA";
3
3
  export declare const fonts: {
4
4
  tiny: {
5
5
  name: string;
package/lib/border.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { ColorInput } from "../types";
1
+ import type { ColorInput } from "./RGBA";
2
2
  export interface BorderCharacters {
3
3
  topLeft: string;
4
4
  topRight: string;
@@ -1,4 +1,4 @@
1
- import type { RGBA } from "../types";
1
+ import { RGBA } from "./RGBA";
2
2
  import { StyledText } from "./styled-text";
3
3
  export interface HASTText {
4
4
  type: "text";
package/lib/index.d.ts CHANGED
@@ -3,3 +3,9 @@ export * from "./TrackedNode";
3
3
  export * from "./KeyHandler";
4
4
  export * from "./ascii.font";
5
5
  export * from "./hast-styled-text";
6
+ export * from "./RGBA";
7
+ export * from "./parse.keypress";
8
+ export * from "./styled-text";
9
+ export * from "./yoga.options";
10
+ export * from "./parse.mouse";
11
+ export * from "./selection";
@@ -1,5 +1,5 @@
1
1
  import type { TextChunk } from "../text-buffer";
2
- import type { ColorInput } from "../types";
2
+ import { type ColorInput } from "./RGBA";
3
3
  export type Color = ColorInput;
4
4
  export interface StyleAttrs {
5
5
  fg?: Color;
@@ -17,10 +17,11 @@ export declare class StyledText {
17
17
  private _plainText;
18
18
  constructor(chunks: TextChunk[]);
19
19
  toString(): string;
20
- private _chunksToPlainText;
21
- insert(chunk: TextChunk, index?: number): void;
22
- remove(chunk: TextChunk): void;
23
- replace(chunk: TextChunk, oldChunk: TextChunk): void;
20
+ private static _createInstance;
21
+ private static _chunksToPlainText;
22
+ insert(chunk: TextChunk, index?: number): StyledText;
23
+ remove(chunk: TextChunk): StyledText;
24
+ replace(chunk: TextChunk, oldChunk: TextChunk): StyledText;
24
25
  }
25
26
  export declare function stringToStyledText(content: string): StyledText;
26
27
  export type StylableInput = string | number | boolean | TextChunk;
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.7",
7
+ "version": "0.1.9",
8
8
  "description": "OpenTUI is a TypeScript library for building terminal user interfaces (TUIs)",
9
9
  "license": "MIT",
10
10
  "repository": {
@@ -30,20 +30,19 @@
30
30
  },
31
31
  "devDependencies": {
32
32
  "@types/bun": "latest",
33
- "@types/three": "^0.177.0",
34
- "commander": "^13.1.0",
35
- "prettier": "3.6.2"
33
+ "@types/three": "0.177.0",
34
+ "commander": "^13.1.0"
36
35
  },
37
36
  "optionalDependencies": {
38
37
  "@dimforge/rapier2d-simd-compat": "^0.17.3",
39
38
  "bun-webgpu": "0.1.3",
40
39
  "planck": "^1.4.2",
41
40
  "three": "0.177.0",
42
- "@opentui/core-darwin-x64": "0.1.7",
43
- "@opentui/core-darwin-arm64": "0.1.7",
44
- "@opentui/core-linux-x64": "0.1.7",
45
- "@opentui/core-linux-arm64": "0.1.7",
46
- "@opentui/core-win32-x64": "0.1.7",
47
- "@opentui/core-win32-arm64": "0.1.7"
41
+ "@opentui/core-darwin-x64": "0.1.9",
42
+ "@opentui/core-darwin-arm64": "0.1.9",
43
+ "@opentui/core-linux-x64": "0.1.9",
44
+ "@opentui/core-linux-arm64": "0.1.9",
45
+ "@opentui/core-win32-x64": "0.1.9",
46
+ "@opentui/core-win32-arm64": "0.1.9"
48
47
  }
49
48
  }
@@ -1,7 +1,8 @@
1
1
  import type { RenderableOptions } from "../Renderable";
2
- import { RGBA, type SelectionState } from "../types";
3
2
  import { type fonts } from "../lib/ascii.font";
3
+ import { RGBA } from "../lib/RGBA";
4
4
  import { FrameBufferRenderable } from "./FrameBuffer";
5
+ import type { SelectionState } from "../types";
5
6
  export interface ASCIIFontOptions extends RenderableOptions {
6
7
  text?: string;
7
8
  font?: "tiny" | "block" | "shade" | "slick";
@@ -1,8 +1,7 @@
1
1
  import { type RenderableOptions, Renderable } from "../Renderable";
2
2
  import type { OptimizedBuffer } from "../buffer";
3
- import { RGBA } from "../types";
3
+ import { RGBA, type ColorInput } from "../lib/RGBA";
4
4
  import { type BorderStyle, type BorderSides, type BorderCharacters, type BorderSidesConfig } from "../lib";
5
- import type { ColorInput } from "../types";
6
5
  export interface BoxOptions extends RenderableOptions {
7
6
  backgroundColor?: string | RGBA;
8
7
  borderStyle?: BorderStyle;
@@ -20,12 +19,15 @@ export declare class BoxRenderable extends Renderable {
20
19
  protected _borderStyle: BorderStyle;
21
20
  protected _borderColor: RGBA;
22
21
  protected _focusedBorderColor: RGBA;
23
- protected customBorderChars?: Uint32Array;
22
+ private _customBorderCharsObj;
23
+ protected _customBorderChars?: Uint32Array;
24
24
  protected borderSides: BorderSidesConfig;
25
25
  shouldFill: boolean;
26
26
  protected _title?: string;
27
27
  protected _titleAlignment: "left" | "center" | "right";
28
28
  constructor(id: string, options: BoxOptions);
29
+ get customBorderChars(): BorderCharacters | undefined;
30
+ set customBorderChars(value: BorderCharacters | undefined);
29
31
  get backgroundColor(): RGBA;
30
32
  set backgroundColor(value: RGBA | string | undefined);
31
33
  get border(): boolean | BorderSides[];
@@ -1,7 +1,7 @@
1
1
  import { Renderable, type RenderableOptions } from "../Renderable";
2
2
  import { OptimizedBuffer } from "../buffer";
3
3
  import type { ParsedKey } from "../lib/parse.keypress";
4
- import type { ColorInput } from "../types";
4
+ import { type ColorInput } from "../lib/RGBA";
5
5
  export interface InputRenderableOptions extends RenderableOptions {
6
6
  backgroundColor?: ColorInput;
7
7
  textColor?: ColorInput;
@@ -51,5 +51,7 @@ export declare class InputRenderable extends Renderable {
51
51
  set focusedTextColor(color: ColorInput);
52
52
  set placeholderColor(color: ColorInput);
53
53
  set cursorColor(color: ColorInput);
54
+ updateFromLayout(): void;
55
+ protected onResize(width: number, height: number): void;
54
56
  protected destroySelf(): void;
55
57
  }
@@ -2,7 +2,7 @@ import { Renderable, type RenderableOptions } from "../Renderable";
2
2
  import { OptimizedBuffer } from "../buffer";
3
3
  import { fonts } from "../lib/ascii.font";
4
4
  import type { ParsedKey } from "../lib/parse.keypress";
5
- import type { ColorInput } from "../types";
5
+ import { type ColorInput } from "../lib/RGBA";
6
6
  export interface SelectOption {
7
7
  name: string;
8
8
  description: string;
@@ -1,6 +1,6 @@
1
1
  import { Renderable, type RenderableOptions } from "../Renderable";
2
2
  import { OptimizedBuffer } from "../buffer";
3
- import type { ColorInput } from "../types";
3
+ import { type ColorInput } from "../lib/RGBA";
4
4
  import type { ParsedKey } from "../lib/parse.keypress";
5
5
  export interface TabSelectOption {
6
6
  name: string;
@@ -29,22 +29,22 @@ export declare enum TabSelectRenderableEvents {
29
29
  }
30
30
  export declare class TabSelectRenderable extends Renderable {
31
31
  protected focusable: boolean;
32
- private options;
32
+ private _options;
33
33
  private selectedIndex;
34
34
  private scrollOffset;
35
- private tabWidth;
35
+ private _tabWidth;
36
36
  private maxVisibleTabs;
37
- private backgroundColor;
38
- private textColor;
39
- private focusedBackgroundColor;
40
- private focusedTextColor;
41
- private selectedBackgroundColor;
42
- private selectedTextColor;
43
- private selectedDescriptionColor;
44
- private showScrollArrows;
45
- private showDescription;
46
- private showUnderline;
47
- private wrapSelection;
37
+ private _backgroundColor;
38
+ private _textColor;
39
+ private _focusedBackgroundColor;
40
+ private _focusedTextColor;
41
+ private _selectedBackgroundColor;
42
+ private _selectedTextColor;
43
+ private _selectedDescriptionColor;
44
+ private _showScrollArrows;
45
+ private _showDescription;
46
+ private _showUnderline;
47
+ private _wrapSelection;
48
48
  constructor(id: string, options: TabSelectRenderableOptions);
49
49
  private calculateDynamicHeight;
50
50
  protected renderSelf(buffer: OptimizedBuffer, deltaTime: number): void;
@@ -63,12 +63,23 @@ export declare class TabSelectRenderable extends Renderable {
63
63
  setTabWidth(tabWidth: number): void;
64
64
  getTabWidth(): number;
65
65
  handleKeyPress(key: ParsedKey | string): boolean;
66
- setShowDescription(show: boolean): void;
67
- getShowDescription(): boolean;
68
- setShowUnderline(show: boolean): void;
69
- getShowUnderline(): boolean;
70
- setShowScrollArrows(show: boolean): void;
71
- getShowScrollArrows(): boolean;
72
- setWrapSelection(wrap: boolean): void;
73
- getWrapSelection(): boolean;
66
+ get options(): TabSelectOption[];
67
+ set options(options: TabSelectOption[]);
68
+ set backgroundColor(color: ColorInput);
69
+ set textColor(color: ColorInput);
70
+ set focusedBackgroundColor(color: ColorInput);
71
+ set focusedTextColor(color: ColorInput);
72
+ set selectedBackgroundColor(color: ColorInput);
73
+ set selectedTextColor(color: ColorInput);
74
+ set selectedDescriptionColor(color: ColorInput);
75
+ get showDescription(): boolean;
76
+ set showDescription(show: boolean);
77
+ get showUnderline(): boolean;
78
+ set showUnderline(show: boolean);
79
+ get showScrollArrows(): boolean;
80
+ set showScrollArrows(show: boolean);
81
+ get wrapSelection(): boolean;
82
+ set wrapSelection(wrap: boolean);
83
+ get tabWidth(): number;
84
+ set tabWidth(tabWidth: number);
74
85
  }
@@ -1,6 +1,7 @@
1
1
  import { Renderable, type RenderableOptions } from "../Renderable";
2
2
  import { StyledText } from "../lib/styled-text";
3
- import { RGBA, type SelectionState } from "../types";
3
+ import { RGBA } from "../lib/RGBA";
4
+ import type { SelectionState } from "../types";
4
5
  import type { OptimizedBuffer } from "../buffer";
5
6
  export interface TextOptions extends RenderableOptions {
6
7
  content?: StyledText | string;
package/renderer.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import { Renderable, RootRenderable } from "./Renderable";
2
- import { type ColorInput, type CursorStyle, DebugOverlayCorner, RGBA } from "./types";
2
+ import { type CursorStyle, DebugOverlayCorner } from "./types";
3
+ import { RGBA, type ColorInput } from "./lib/RGBA";
3
4
  import type { Pointer } from "bun:ffi";
4
5
  import { OptimizedBuffer } from "./buffer";
5
6
  import { type RenderLib } from "./zig";
@@ -61,6 +62,7 @@ export declare enum CliRenderEvents {
61
62
  DEBUG_OVERLAY_TOGGLE = "debugOverlay:toggle"
62
63
  }
63
64
  export declare class CliRenderer extends EventEmitter {
65
+ private static animationFrameId;
64
66
  private lib;
65
67
  rendererPtr: Pointer;
66
68
  private stdin;
@@ -84,7 +86,6 @@ export declare class CliRenderer extends EventEmitter {
84
86
  private postProcessFns;
85
87
  private backgroundColor;
86
88
  private waitingForPixelResolution;
87
- private shutdownRequested;
88
89
  private rendering;
89
90
  private renderingNative;
90
91
  private renderTimeout;
@@ -95,6 +96,8 @@ export declare class CliRenderer extends EventEmitter {
95
96
  private targetFrameTime;
96
97
  private immediateRerenderRequested;
97
98
  private updateScheduled;
99
+ private liveRequestCounter;
100
+ private controlState;
98
101
  private frameCallbacks;
99
102
  private renderStats;
100
103
  debugOverlay: {
@@ -139,6 +142,8 @@ export declare class CliRenderer extends EventEmitter {
139
142
  get useMouse(): boolean;
140
143
  set useMouse(useMouse: boolean);
141
144
  get experimental_splitHeight(): number;
145
+ get liveRequestCount(): number;
146
+ get currentControlState(): string;
142
147
  set experimental_splitHeight(splitHeight: number);
143
148
  private interceptStdoutWrite;
144
149
  private disableStdoutInterception;
@@ -176,9 +181,14 @@ export declare class CliRenderer extends EventEmitter {
176
181
  setFrameCallback(callback: (deltaTime: number) => Promise<void>): void;
177
182
  removeFrameCallback(callback: (deltaTime: number) => Promise<void>): void;
178
183
  clearFrameCallbacks(): void;
184
+ requestLive(): void;
185
+ dropLive(): void;
179
186
  start(): void;
187
+ private internalStart;
180
188
  pause(): void;
189
+ private internalPause;
181
190
  stop(): void;
191
+ private internalStop;
182
192
  destroy(): void;
183
193
  private startRenderLoop;
184
194
  private loop;
package/singleton.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Ensures a value is initialized once per process,
3
+ * persists across Bun hot reloads, and is type-safe.
4
+ */
5
+ export declare function singleton<T>(key: string, factory: () => T): T;
package/text-buffer.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { StyledText } from "./lib/styled-text";
2
- import { RGBA } from "./types";
2
+ import { RGBA } from "./lib/RGBA";
3
3
  import { type RenderLib } from "./zig";
4
4
  import { type Pointer } from "bun:ffi";
5
5
  export interface TextChunk {
package/types.d.ts CHANGED
@@ -1,23 +1,3 @@
1
- export declare class RGBA {
2
- buffer: Float32Array;
3
- constructor(buffer: Float32Array);
4
- static fromArray(array: Float32Array): RGBA;
5
- static fromValues(r: number, g: number, b: number, a?: number): RGBA;
6
- static fromInts(r: number, g: number, b: number, a?: number): RGBA;
7
- static fromHex(hex: string): RGBA;
8
- toInts(): [number, number, number, number];
9
- get r(): number;
10
- set r(value: number);
11
- get g(): number;
12
- set g(value: number);
13
- get b(): number;
14
- set b(value: number);
15
- get a(): number;
16
- set a(value: number);
17
- map<R>(fn: (value: number) => R): R[];
18
- toString(): string;
19
- }
20
- export type ColorInput = string | RGBA;
21
1
  export declare const TextAttributes: {
22
2
  NONE: number;
23
3
  BOLD: number;
package/utils.d.ts CHANGED
@@ -1,8 +1,3 @@
1
- import { type ColorInput, RGBA } from "./types";
2
- export declare function hexToRgb(hex: string): RGBA;
3
- export declare function rgbToHex(rgb: RGBA): string;
4
- export declare function hsvToRgb(h: number, s: number, v: number): RGBA;
5
- export declare function parseColor(color: ColorInput): RGBA;
6
1
  export declare function createTextAttributes({ bold, italic, underline, dim, blink, inverse, hidden, strikethrough, }?: {
7
2
  bold?: boolean;
8
3
  italic?: boolean;
package/zig.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { type Pointer } from "bun:ffi";
2
2
  import type { CursorStyle, DebugOverlayCorner } from "./types";
3
- import { RGBA } from "./types";
3
+ import { RGBA } from "./lib/RGBA";
4
4
  import { OptimizedBuffer } from "./buffer";
5
5
  import { TextBuffer } from "./text-buffer";
6
6
  export interface RenderLib {