@opentui/core 0.1.28 → 0.1.29

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/README.md CHANGED
@@ -30,6 +30,16 @@ bun install
30
30
  bun run src/examples/index.ts
31
31
  ```
32
32
 
33
+ ## Benchmarks
34
+
35
+ Run native performance benchmarks:
36
+
37
+ ```bash
38
+ bun run bench:native
39
+ ```
40
+
41
+ See [src/zig/bench.zig](src/zig/bench.zig) for available options like `--filter` and `--mem`.
42
+
33
43
  ## CLI Renderer
34
44
 
35
45
  ### Renderables
package/Renderable.d.ts CHANGED
@@ -140,6 +140,7 @@ export declare abstract class Renderable extends BaseRenderable {
140
140
  protected _positionType: PositionTypeString;
141
141
  protected _overflow: OverflowString;
142
142
  protected _position: Position;
143
+ private _flexShrink;
143
144
  private renderableMapById;
144
145
  protected _childrenInLayoutOrder: Renderable[];
145
146
  protected _childrenInZIndexOrder: Renderable[];
@@ -201,33 +202,33 @@ export declare abstract class Renderable extends BaseRenderable {
201
202
  getChildrenSortedByPrimaryAxis(): Renderable[];
202
203
  private setupYogaProperties;
203
204
  private setupMarginAndPadding;
204
- set position(positionType: PositionTypeString);
205
+ set position(positionType: PositionTypeString | null | undefined);
205
206
  get overflow(): OverflowString;
206
- set overflow(overflow: OverflowString);
207
+ set overflow(overflow: OverflowString | null | undefined);
207
208
  setPosition(position: Position): void;
208
209
  private updateYogaPosition;
209
- set flexGrow(grow: number);
210
- set flexShrink(shrink: number);
211
- set flexDirection(direction: FlexDirectionString);
212
- set flexWrap(wrap: WrapString);
213
- set alignItems(alignItems: AlignString);
214
- set justifyContent(justifyContent: JustifyString);
215
- set alignSelf(alignSelf: AlignString);
216
- set flexBasis(basis: number | "auto" | undefined);
217
- set minWidth(minWidth: number | `${number}%` | undefined);
218
- set maxWidth(maxWidth: number | `${number}%` | undefined);
219
- set minHeight(minHeight: number | `${number}%` | undefined);
220
- set maxHeight(maxHeight: number | `${number}%` | undefined);
221
- set margin(margin: number | "auto" | `${number}%` | undefined);
222
- set marginTop(margin: number | "auto" | `${number}%` | undefined);
223
- set marginRight(margin: number | "auto" | `${number}%` | undefined);
224
- set marginBottom(margin: number | "auto" | `${number}%` | undefined);
225
- set marginLeft(margin: number | "auto" | `${number}%` | undefined);
226
- set padding(padding: number | `${number}%` | undefined);
227
- set paddingTop(padding: number | `${number}%` | undefined);
228
- set paddingRight(padding: number | `${number}%` | undefined);
229
- set paddingBottom(padding: number | `${number}%` | undefined);
230
- set paddingLeft(padding: number | `${number}%` | undefined);
210
+ set flexGrow(grow: number | null | undefined);
211
+ set flexShrink(shrink: number | null | undefined);
212
+ set flexDirection(direction: FlexDirectionString | null | undefined);
213
+ set flexWrap(wrap: WrapString | null | undefined);
214
+ set alignItems(alignItems: AlignString | null | undefined);
215
+ set justifyContent(justifyContent: JustifyString | null | undefined);
216
+ set alignSelf(alignSelf: AlignString | null | undefined);
217
+ set flexBasis(basis: number | "auto" | null | undefined);
218
+ set minWidth(minWidth: number | `${number}%` | null | undefined);
219
+ set maxWidth(maxWidth: number | `${number}%` | null | undefined);
220
+ set minHeight(minHeight: number | `${number}%` | null | undefined);
221
+ set maxHeight(maxHeight: number | `${number}%` | null | undefined);
222
+ set margin(margin: number | "auto" | `${number}%` | null | undefined);
223
+ set marginTop(margin: number | "auto" | `${number}%` | null | undefined);
224
+ set marginRight(margin: number | "auto" | `${number}%` | null | undefined);
225
+ set marginBottom(margin: number | "auto" | `${number}%` | null | undefined);
226
+ set marginLeft(margin: number | "auto" | `${number}%` | null | undefined);
227
+ set padding(padding: number | `${number}%` | null | undefined);
228
+ set paddingTop(padding: number | `${number}%` | null | undefined);
229
+ set paddingRight(padding: number | `${number}%` | null | undefined);
230
+ set paddingBottom(padding: number | `${number}%` | null | undefined);
231
+ set paddingLeft(padding: number | `${number}%` | null | undefined);
231
232
  getLayoutNode(): YogaNode;
232
233
  updateFromLayout(): void;
233
234
  protected onLayoutResize(width: number, height: number): void;
package/buffer.d.ts CHANGED
@@ -1,9 +1,10 @@
1
- import type { TextBuffer } from "./text-buffer";
2
1
  import { RGBA } from "./lib";
3
2
  import { type RenderLib } from "./zig";
4
3
  import { type Pointer } from "bun:ffi";
5
4
  import { type BorderStyle, type BorderSides } from "./lib";
6
5
  import { type WidthMethod } from "./types";
6
+ import type { TextBufferView } from "./text-buffer-view";
7
+ import type { EditorView } from "./editor-view";
7
8
  export declare class OptimizedBuffer {
8
9
  private static fbIdCounter;
9
10
  id: string;
@@ -47,12 +48,8 @@ export declare class OptimizedBuffer {
47
48
  fillRect(x: number, y: number, width: number, height: number, bg: RGBA): void;
48
49
  drawFrameBuffer(destX: number, destY: number, frameBuffer: OptimizedBuffer, sourceX?: number, sourceY?: number, sourceWidth?: number, sourceHeight?: number): void;
49
50
  destroy(): void;
50
- drawTextBuffer(textBuffer: TextBuffer, x: number, y: number, clipRect?: {
51
- x: number;
52
- y: number;
53
- width: number;
54
- height: number;
55
- }): void;
51
+ drawTextBuffer(textBufferView: TextBufferView, x: number, y: number): void;
52
+ drawEditorView(editorView: EditorView, x: number, y: number): void;
56
53
  drawSuperSampleBuffer(x: number, y: number, pixelDataPtr: Pointer, pixelDataLength: number, format: "bgra8unorm" | "rgba8unorm", alignedBytesPerRow: number): void;
57
54
  drawPackedBuffer(dataPtr: Pointer, dataLen: number, posX: number, posY: number, terminalWidthCells: number, terminalHeightCells: number): void;
58
55
  resize(width: number, height: number): void;
@@ -0,0 +1,76 @@
1
+ import { type RenderLib } from "./zig";
2
+ import { type Pointer } from "bun:ffi";
3
+ import { type WidthMethod, type Highlight } from "./types";
4
+ import { RGBA } from "./lib/RGBA";
5
+ import { EventEmitter } from "events";
6
+ import type { SyntaxStyle } from "./syntax-style";
7
+ export interface CursorPosition {
8
+ line: number;
9
+ visualColumn: number;
10
+ offset: number;
11
+ }
12
+ /**
13
+ * EditBuffer provides a text editing buffer with cursor management,
14
+ * incremental editing, and grapheme-aware operations.
15
+ */
16
+ export declare class EditBuffer extends EventEmitter {
17
+ private static registry;
18
+ private static nativeEventsSubscribed;
19
+ private lib;
20
+ private bufferPtr;
21
+ private textBufferPtr;
22
+ readonly id: number;
23
+ private _destroyed;
24
+ private _textBytes;
25
+ private _singleTextBytes;
26
+ private _singleTextMemId;
27
+ private _syntaxStyle?;
28
+ constructor(lib: RenderLib, ptr: Pointer);
29
+ static create(widthMethod: WidthMethod): EditBuffer;
30
+ private static subscribeToNativeEvents;
31
+ private guard;
32
+ get ptr(): Pointer;
33
+ setText(text: string, opts?: {
34
+ history?: boolean;
35
+ }): void;
36
+ setTextOwned(text: string, opts?: {
37
+ history?: boolean;
38
+ }): void;
39
+ getText(): string;
40
+ insertChar(char: string): void;
41
+ insertText(text: string): void;
42
+ deleteChar(): void;
43
+ deleteCharBackward(): void;
44
+ newLine(): void;
45
+ deleteLine(): void;
46
+ moveCursorLeft(): void;
47
+ moveCursorRight(): void;
48
+ moveCursorUp(): void;
49
+ moveCursorDown(): void;
50
+ gotoLine(line: number): void;
51
+ setCursor(line: number, col: number): void;
52
+ setCursorToLineCol(line: number, col: number): void;
53
+ setCursorByOffset(offset: number): void;
54
+ getCursorPosition(): CursorPosition;
55
+ debugLogRope(): void;
56
+ undo(): string | null;
57
+ redo(): string | null;
58
+ canUndo(): boolean;
59
+ canRedo(): boolean;
60
+ clearHistory(): void;
61
+ setDefaultFg(fg: RGBA | null): void;
62
+ setDefaultBg(bg: RGBA | null): void;
63
+ setDefaultAttributes(attributes: number | null): void;
64
+ resetDefaults(): void;
65
+ setPlaceholder(text: string | null): void;
66
+ setPlaceholderColor(color: RGBA): void;
67
+ setSyntaxStyle(style: SyntaxStyle | null): void;
68
+ getSyntaxStyle(): SyntaxStyle | null;
69
+ addHighlight(lineIdx: number, highlight: Highlight): void;
70
+ addHighlightByCharRange(highlight: Highlight): void;
71
+ removeHighlightsByRef(hlRef: number): void;
72
+ clearLineHighlights(lineIdx: number): void;
73
+ clearAllHighlights(): void;
74
+ getLineHighlights(lineIdx: number): Array<Highlight>;
75
+ destroy(): void;
76
+ }
@@ -0,0 +1,50 @@
1
+ import { RGBA } from "./lib/RGBA";
2
+ import { type RenderLib, type VisualCursor, type LineInfo } from "./zig";
3
+ import { type Pointer } from "bun:ffi";
4
+ import type { EditBuffer } from "./edit-buffer";
5
+ export interface Viewport {
6
+ offsetY: number;
7
+ offsetX: number;
8
+ height: number;
9
+ width: number;
10
+ }
11
+ export type { VisualCursor };
12
+ export declare class EditorView {
13
+ private lib;
14
+ private viewPtr;
15
+ private editBuffer;
16
+ private _destroyed;
17
+ constructor(lib: RenderLib, ptr: Pointer, editBuffer: EditBuffer);
18
+ static create(editBuffer: EditBuffer, viewportWidth: number, viewportHeight: number): EditorView;
19
+ private guard;
20
+ get ptr(): Pointer;
21
+ setViewportSize(width: number, height: number): void;
22
+ getViewport(): Viewport;
23
+ setScrollMargin(margin: number): void;
24
+ setWrapMode(mode: "none" | "char" | "word"): void;
25
+ getVirtualLineCount(): number;
26
+ getTotalVirtualLineCount(): number;
27
+ setSelection(start: number, end: number, bgColor?: RGBA, fgColor?: RGBA): void;
28
+ resetSelection(): void;
29
+ getSelection(): {
30
+ start: number;
31
+ end: number;
32
+ } | null;
33
+ hasSelection(): boolean;
34
+ setLocalSelection(anchorX: number, anchorY: number, focusX: number, focusY: number, bgColor?: RGBA, fgColor?: RGBA): boolean;
35
+ resetLocalSelection(): void;
36
+ getSelectedText(): string;
37
+ getCursor(): {
38
+ row: number;
39
+ col: number;
40
+ };
41
+ getText(): string;
42
+ getVisualCursor(): VisualCursor;
43
+ moveUpVisual(): void;
44
+ moveDownVisual(): void;
45
+ deleteSelectedText(): void;
46
+ setCursorByOffset(offset: number): void;
47
+ getLineInfo(): LineInfo;
48
+ getLogicalLineInfo(): LineInfo;
49
+ destroy(): void;
50
+ }