@opentui/core 0.1.19-snapshot4-010c3be8 → 0.1.19

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.
@@ -1,3 +1,4 @@
1
+ import type { TextRenderable } from "../renderables/Text";
1
2
  import type { TextChunk } from "../text-buffer";
2
3
  import { type ColorInput } from "./RGBA";
3
4
  export type Color = ColorInput;
@@ -13,11 +14,21 @@ export interface StyleAttrs {
13
14
  blink?: boolean;
14
15
  }
15
16
  export declare class StyledText {
16
- readonly chunks: TextChunk[];
17
+ chunks: TextChunk[];
18
+ textRenderable?: TextRenderable;
17
19
  constructor(chunks: TextChunk[]);
18
- private static _createInstance;
20
+ mount(textRenderable: TextRenderable): void;
21
+ /**
22
+ * @deprecated: Use textRenderable.insertChunk instead
23
+ */
19
24
  insert(chunk: TextChunk, index?: number): StyledText;
25
+ /**
26
+ * @deprecated: Use textRenderable.removeChunk instead
27
+ */
20
28
  remove(chunk: TextChunk): StyledText;
29
+ /**
30
+ * @deprecated: Use textRenderable.replaceChunk instead
31
+ */
21
32
  replace(chunk: TextChunk, oldChunk: TextChunk): StyledText;
22
33
  }
23
34
  export declare function stringToStyledText(content: string): StyledText;
@@ -59,10 +70,4 @@ export declare const bg: (color: Color) => (input: StylableInput) => TextChunk;
59
70
  * Template literal handler for styled text (non-cached version).
60
71
  * Returns a StyledText object containing chunks of text with optional styles.
61
72
  */
62
- export declare function tn(strings: TemplateStringsArray, ...values: StylableInput[]): StyledText;
63
- /**
64
- * Template literal handler for styled text (cached version).
65
- * Returns a StyledText object containing chunks of text with optional styles.
66
- * Uses caching to avoid re-encoding the same template strings.
67
- */
68
73
  export declare function t(strings: TemplateStringsArray, ...values: StylableInput[]): StyledText;
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.19-snapshot4-010c3be8",
7
+ "version": "0.1.19",
8
8
  "description": "OpenTUI is a TypeScript library for building terminal user interfaces (TUIs)",
9
9
  "license": "MIT",
10
10
  "repository": {
@@ -38,11 +38,11 @@
38
38
  "bun-webgpu": "0.1.3",
39
39
  "planck": "^1.4.2",
40
40
  "three": "0.177.0",
41
- "@opentui/core-darwin-x64": "0.1.19-snapshot4-010c3be8",
42
- "@opentui/core-darwin-arm64": "0.1.19-snapshot4-010c3be8",
43
- "@opentui/core-linux-x64": "0.1.19-snapshot4-010c3be8",
44
- "@opentui/core-linux-arm64": "0.1.19-snapshot4-010c3be8",
45
- "@opentui/core-win32-x64": "0.1.19-snapshot4-010c3be8",
46
- "@opentui/core-win32-arm64": "0.1.19-snapshot4-010c3be8"
41
+ "@opentui/core-darwin-x64": "0.1.19",
42
+ "@opentui/core-darwin-arm64": "0.1.19",
43
+ "@opentui/core-linux-x64": "0.1.19",
44
+ "@opentui/core-linux-arm64": "0.1.19",
45
+ "@opentui/core-win32-x64": "0.1.19",
46
+ "@opentui/core-win32-arm64": "0.1.19"
47
47
  }
48
48
  }
@@ -1,6 +1,7 @@
1
- import { Renderable, type RenderableOptions } from "../Renderable";
1
+ import { BaseRenderable, Renderable, type RenderableOptions } from "../Renderable";
2
2
  import { Selection } from "../lib/selection";
3
3
  import { StyledText } from "../lib/styled-text";
4
+ import { type TextChunk } from "../text-buffer";
4
5
  import { RGBA } from "../lib/RGBA";
5
6
  import { type RenderContext } from "../types";
6
7
  import type { OptimizedBuffer } from "../buffer";
@@ -24,6 +25,7 @@ export declare class TextRenderable extends Renderable {
24
25
  private lastLocalSelection;
25
26
  private textBuffer;
26
27
  private _lineInfo;
28
+ private rootTextNode;
27
29
  protected _defaultOptions: {
28
30
  content: string;
29
31
  fg: RGBA;
@@ -34,7 +36,12 @@ export declare class TextRenderable extends Renderable {
34
36
  attributes: number;
35
37
  };
36
38
  constructor(ctx: RenderContext, options: TextOptions);
39
+ private updateTextBuffer;
40
+ private clearChunks;
37
41
  get content(): StyledText;
42
+ get plainText(): string;
43
+ get textLength(): number;
44
+ get chunks(): TextChunk[];
38
45
  set content(value: StyledText | string);
39
46
  get fg(): RGBA;
40
47
  set fg(value: RGBA | string | undefined);
@@ -50,6 +57,14 @@ export declare class TextRenderable extends Renderable {
50
57
  private updateLocalSelection;
51
58
  private updateTextInfo;
52
59
  private setupMeasureFunc;
60
+ insertChunk(chunk: TextChunk, index?: number): void;
61
+ removeChunk(chunk: TextChunk): void;
62
+ replaceChunk(chunk: TextChunk, oldChunk: TextChunk): void;
63
+ private updateTextFromNodes;
64
+ add(obj: Renderable | any, index?: number): number;
65
+ remove(id: string): void;
66
+ insertBefore(obj: BaseRenderable | any, anchor?: BaseRenderable): number;
67
+ clear(): void;
53
68
  shouldStartSelection(x: number, y: number): boolean;
54
69
  onSelectionChanged(selection: Selection | null): boolean;
55
70
  getSelectedText(): string;
@@ -58,7 +73,7 @@ export declare class TextRenderable extends Renderable {
58
73
  start: number;
59
74
  end: number;
60
75
  } | null;
61
- private updateTextBuffer;
76
+ render(buffer: OptimizedBuffer, deltaTime: number): void;
62
77
  protected renderSelf(buffer: OptimizedBuffer): void;
63
78
  destroy(): void;
64
79
  }
@@ -0,0 +1,57 @@
1
+ import { BaseRenderable, type BaseRenderableOptions } from "../Renderable";
2
+ import { RGBA } from "../lib/RGBA";
3
+ import { type TextChunk } from "../text-buffer";
4
+ import type { RenderContext } from "../types";
5
+ export interface TextNodeOptions extends BaseRenderableOptions {
6
+ fg?: string | RGBA;
7
+ bg?: string | RGBA;
8
+ attributes?: number;
9
+ }
10
+ declare const BrandedTextNodeRenderable: unique symbol;
11
+ export declare function isTextNodeRenderable(obj: any): obj is TextNodeRenderable;
12
+ export declare class TextNodeRenderable extends BaseRenderable {
13
+ [BrandedTextNodeRenderable]: boolean;
14
+ fg?: RGBA;
15
+ bg?: RGBA;
16
+ attributes: number;
17
+ private _children;
18
+ parent: TextNodeRenderable | null;
19
+ constructor(options: TextNodeOptions);
20
+ get children(): (string | TextNodeRenderable)[];
21
+ set children(children: (string | TextNodeRenderable)[]);
22
+ requestRender(): void;
23
+ add(obj: TextNodeRenderable | string, index?: number): number;
24
+ insertBefore(child: string | TextNodeRenderable, anchorNode: string | TextNodeRenderable): this;
25
+ remove(child: string | TextNodeRenderable): this;
26
+ clear(): void;
27
+ mergeStyles(parentStyle: {
28
+ fg?: RGBA;
29
+ bg?: RGBA;
30
+ attributes: number;
31
+ }): {
32
+ fg?: RGBA;
33
+ bg?: RGBA;
34
+ attributes: number;
35
+ };
36
+ gatherWithInheritedStyle(parentStyle?: {
37
+ fg?: RGBA;
38
+ bg?: RGBA;
39
+ attributes: number;
40
+ }): TextChunk[];
41
+ static fromString(text: string, options?: Partial<TextNodeOptions>): TextNodeRenderable;
42
+ static fromNodes(nodes: TextNodeRenderable[], options?: Partial<TextNodeOptions>): TextNodeRenderable;
43
+ toChunks(parentStyle?: {
44
+ fg?: RGBA;
45
+ bg?: RGBA;
46
+ attributes: number;
47
+ }): TextChunk[];
48
+ getChildren(): BaseRenderable[];
49
+ getChildrenCount(): number;
50
+ getRenderable(id: string): BaseRenderable | undefined;
51
+ }
52
+ export declare class RootTextNodeRenderable extends TextNodeRenderable {
53
+ private readonly ctx;
54
+ constructor(ctx: RenderContext, options: TextNodeOptions);
55
+ requestRender(): void;
56
+ }
57
+ export {};
@@ -1,12 +1,33 @@
1
1
  import { ASCIIFontRenderable, BoxRenderable, InputRenderable, SelectRenderable, TabSelectRenderable, TextRenderable, VRenderable, type ASCIIFontOptions, type BoxOptions, type TextOptions, type VRenderableOptions, type InputRenderableOptions, type SelectRenderableOptions, type TabSelectRenderableOptions, FrameBufferRenderable, type FrameBufferOptions } from "../";
2
- import { type VChild, type ProxiedVNode } from "./vnode";
3
- export declare function Generic(props?: VRenderableOptions, ...children: VChild[]): ProxiedVNode<typeof VRenderable>;
4
- export declare function Box(props?: BoxOptions, ...children: VChild[]): ProxiedVNode<typeof BoxRenderable>;
2
+ import { TextNodeRenderable } from "../TextNode";
3
+ import { type VChild } from "./vnode";
4
+ import type { RGBA } from "../../lib/RGBA";
5
+ export declare function Generic(props?: VRenderableOptions, ...children: VChild[]): import("./vnode").ProxiedVNode<typeof VRenderable>;
6
+ export declare function Box(props?: BoxOptions, ...children: VChild[]): import("./vnode").ProxiedVNode<typeof BoxRenderable>;
5
7
  export declare function Text(props?: TextOptions & {
6
8
  content?: any;
7
- }, ...children: VChild[]): ProxiedVNode<typeof TextRenderable>;
8
- export declare function ASCIIFont(props?: ASCIIFontOptions, ...children: VChild[]): ProxiedVNode<typeof ASCIIFontRenderable>;
9
- export declare function Input(props?: InputRenderableOptions, ...children: VChild[]): ProxiedVNode<typeof InputRenderable>;
10
- export declare function Select(props?: SelectRenderableOptions, ...children: VChild[]): ProxiedVNode<typeof SelectRenderable>;
11
- export declare function TabSelect(props?: TabSelectRenderableOptions, ...children: VChild[]): ProxiedVNode<typeof TabSelectRenderable>;
12
- export declare function FrameBuffer(props: FrameBufferOptions, ...children: VChild[]): ProxiedVNode<typeof FrameBufferRenderable>;
9
+ }, ...children: VChild[] | TextNodeRenderable[]): import("./vnode").ProxiedVNode<typeof TextRenderable>;
10
+ export declare function ASCIIFont(props?: ASCIIFontOptions, ...children: VChild[]): import("./vnode").ProxiedVNode<typeof ASCIIFontRenderable>;
11
+ export declare function Input(props?: InputRenderableOptions, ...children: VChild[]): import("./vnode").ProxiedVNode<typeof InputRenderable>;
12
+ export declare function Select(props?: SelectRenderableOptions, ...children: VChild[]): import("./vnode").ProxiedVNode<typeof SelectRenderable>;
13
+ export declare function TabSelect(props?: TabSelectRenderableOptions, ...children: VChild[]): import("./vnode").ProxiedVNode<typeof TabSelectRenderable>;
14
+ export declare function FrameBuffer(props: FrameBufferOptions, ...children: VChild[]): import("./vnode").ProxiedVNode<typeof FrameBufferRenderable>;
15
+ export declare const vstyles: {
16
+ bold: (...children: (string | TextNodeRenderable)[]) => TextNodeRenderable;
17
+ italic: (...children: (string | TextNodeRenderable)[]) => TextNodeRenderable;
18
+ underline: (...children: (string | TextNodeRenderable)[]) => TextNodeRenderable;
19
+ dim: (...children: (string | TextNodeRenderable)[]) => TextNodeRenderable;
20
+ blink: (...children: (string | TextNodeRenderable)[]) => TextNodeRenderable;
21
+ inverse: (...children: (string | TextNodeRenderable)[]) => TextNodeRenderable;
22
+ hidden: (...children: (string | TextNodeRenderable)[]) => TextNodeRenderable;
23
+ strikethrough: (...children: (string | TextNodeRenderable)[]) => TextNodeRenderable;
24
+ boldItalic: (...children: (string | TextNodeRenderable)[]) => TextNodeRenderable;
25
+ boldUnderline: (...children: (string | TextNodeRenderable)[]) => TextNodeRenderable;
26
+ italicUnderline: (...children: (string | TextNodeRenderable)[]) => TextNodeRenderable;
27
+ boldItalicUnderline: (...children: (string | TextNodeRenderable)[]) => TextNodeRenderable;
28
+ color: (color: string | RGBA, ...children: (string | TextNodeRenderable)[]) => TextNodeRenderable;
29
+ bgColor: (bgColor: string | RGBA, ...children: (string | TextNodeRenderable)[]) => TextNodeRenderable;
30
+ fg: (color: string | RGBA, ...children: (string | TextNodeRenderable)[]) => TextNodeRenderable;
31
+ bg: (bgColor: string | RGBA, ...children: (string | TextNodeRenderable)[]) => TextNodeRenderable;
32
+ styled: (attributes?: number, ...children: (string | TextNodeRenderable)[]) => TextNodeRenderable;
33
+ };
@@ -1,6 +1,7 @@
1
1
  export * from "./Box";
2
2
  export * from "./FrameBuffer";
3
3
  export * from "./Text";
4
+ export * from "./TextNode";
4
5
  export * from "./ASCIIFont";
5
6
  export * from "./Input";
6
7
  export * from "./Select";
package/text-buffer.d.ts CHANGED
@@ -5,8 +5,7 @@ import { type Pointer } from "bun:ffi";
5
5
  import { type WidthMethod } from "./types";
6
6
  export interface TextChunk {
7
7
  __isChunk: true;
8
- text: Uint8Array;
9
- plainText: string;
8
+ text: string;
10
9
  fg?: RGBA;
11
10
  bg?: RGBA;
12
11
  attributes?: number;
@@ -28,6 +27,7 @@ export declare class TextBuffer {
28
27
  get capacity(): number;
29
28
  get ptr(): Pointer;
30
29
  getSelectedText(): string;
30
+ getPlainText(): string;
31
31
  get lineInfo(): {
32
32
  lineStarts: number[];
33
33
  lineWidths: number[];
@@ -41,5 +41,11 @@ export declare class TextBuffer {
41
41
  end: number;
42
42
  } | null;
43
43
  hasSelection(): boolean;
44
+ insertChunkGroup(index: number, text: string, fg?: RGBA, bg?: RGBA, attributes?: number): void;
45
+ insertEncodedChunkGroup(index: number, textBytes: Uint8Array, fg?: RGBA, bg?: RGBA, attributes?: number): void;
46
+ removeChunkGroup(index: number): void;
47
+ replaceChunkGroup(index: number, text: string, fg?: RGBA, bg?: RGBA, attributes?: number): void;
48
+ replaceEncodedChunkGroup(index: number, textBytes: Uint8Array, fg?: RGBA, bg?: RGBA, attributes?: number): void;
49
+ get chunkGroupCount(): number;
44
50
  destroy(): void;
45
51
  }
package/zig.d.ts CHANGED
@@ -86,6 +86,8 @@ export interface RenderLib {
86
86
  end: number;
87
87
  } | null;
88
88
  getSelectedTextBytes: (buffer: Pointer, maxLength: number) => Uint8Array | null;
89
+ getPlainTextBytes: (buffer: Pointer, maxLength: number) => Uint8Array | null;
90
+ readonly encoder: TextEncoder;
89
91
  readonly decoder: TextDecoder;
90
92
  bufferDrawTextBuffer: (buffer: Pointer, textBuffer: Pointer, x: number, y: number, clipRect?: {
91
93
  x: number;
@@ -96,6 +98,11 @@ export interface RenderLib {
96
98
  bufferPushScissorRect: (buffer: Pointer, x: number, y: number, width: number, height: number) => void;
97
99
  bufferPopScissorRect: (buffer: Pointer) => void;
98
100
  bufferClearScissorRects: (buffer: Pointer) => void;
101
+ textBufferInsertChunkGroup: (buffer: Pointer, index: number, textBytes: Uint8Array, fg: RGBA | null, bg: RGBA | null, attributes: number | null) => number;
102
+ textBufferRemoveChunkGroup: (buffer: Pointer, index: number) => number;
103
+ textBufferReplaceChunkGroup: (buffer: Pointer, index: number, textBytes: Uint8Array, fg: RGBA | null, bg: RGBA | null, attributes: number | null) => number;
104
+ textBufferGetChunkGroupCount: (buffer: Pointer) => number;
105
+ getArenaAllocatedBytes: () => number;
99
106
  getTerminalCapabilities: (renderer: Pointer) => any;
100
107
  processCapabilityResponse: (renderer: Pointer, response: string) => void;
101
108
  }