@opentui/core 0.1.50 → 0.1.52

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.
@@ -17,6 +17,7 @@ export declare class KeyEvent implements ParsedKey {
17
17
  capsLock?: boolean;
18
18
  numLock?: boolean;
19
19
  baseCode?: number;
20
+ repeated?: boolean;
20
21
  private _defaultPrevented;
21
22
  constructor(key: ParsedKey);
22
23
  get defaultPrevented(): boolean;
@@ -31,7 +32,6 @@ export declare class PasteEvent {
31
32
  }
32
33
  export type KeyHandlerEventMap = {
33
34
  keypress: [KeyEvent];
34
- keyrepeat: [KeyEvent];
35
35
  keyrelease: [KeyEvent];
36
36
  paste: [PasteEvent];
37
37
  };
@@ -18,6 +18,7 @@ export interface ParsedKey {
18
18
  capsLock?: boolean;
19
19
  numLock?: boolean;
20
20
  baseCode?: number;
21
+ repeated?: boolean;
21
22
  }
22
23
  export type ParseKeypressOptions = {
23
24
  useKittyKeyboard?: boolean;
@@ -27,12 +27,17 @@ export declare class TerminalPalette implements TerminalPaletteDetector {
27
27
  private writeFn;
28
28
  private activeListeners;
29
29
  private activeTimers;
30
- constructor(stdin: NodeJS.ReadStream, stdout: NodeJS.WriteStream, writeFn?: WriteFunction);
30
+ private inTmux;
31
+ constructor(stdin: NodeJS.ReadStream, stdout: NodeJS.WriteStream, writeFn?: WriteFunction, isTmux?: boolean);
32
+ /**
33
+ * Write an OSC sequence, wrapping for tmux if needed
34
+ */
35
+ private writeOsc;
31
36
  cleanup(): void;
32
37
  detectOSCSupport(timeoutMs?: number): Promise<boolean>;
33
38
  private queryPalette;
34
39
  private querySpecialColors;
35
40
  detect(options?: GetPaletteOptions): Promise<TerminalColors>;
36
41
  }
37
- export declare function createTerminalPalette(stdin: NodeJS.ReadStream, stdout: NodeJS.WriteStream, writeFn?: WriteFunction): TerminalPaletteDetector;
42
+ export declare function createTerminalPalette(stdin: NodeJS.ReadStream, stdout: NodeJS.WriteStream, writeFn?: WriteFunction, isTmux?: boolean): TerminalPaletteDetector;
38
43
  export {};
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.50",
7
+ "version": "0.1.52",
8
8
  "description": "OpenTUI is a TypeScript library for building terminal user interfaces (TUIs)",
9
9
  "license": "MIT",
10
10
  "repository": {
@@ -36,6 +36,7 @@
36
36
  },
37
37
  "dependencies": {
38
38
  "bun-ffi-structs": "0.1.2",
39
+ "diff": "8.0.2",
39
40
  "jimp": "1.6.0",
40
41
  "yoga-layout": "3.2.1"
41
42
  },
@@ -55,11 +56,11 @@
55
56
  "bun-webgpu": "0.1.4",
56
57
  "planck": "^1.4.2",
57
58
  "three": "0.177.0",
58
- "@opentui/core-darwin-x64": "0.1.50",
59
- "@opentui/core-darwin-arm64": "0.1.50",
60
- "@opentui/core-linux-x64": "0.1.50",
61
- "@opentui/core-linux-arm64": "0.1.50",
62
- "@opentui/core-win32-x64": "0.1.50",
63
- "@opentui/core-win32-arm64": "0.1.50"
59
+ "@opentui/core-darwin-x64": "0.1.52",
60
+ "@opentui/core-darwin-arm64": "0.1.52",
61
+ "@opentui/core-linux-x64": "0.1.52",
62
+ "@opentui/core-linux-arm64": "0.1.52",
63
+ "@opentui/core-win32-x64": "0.1.52",
64
+ "@opentui/core-win32-arm64": "0.1.52"
64
65
  }
65
66
  }
@@ -0,0 +1,121 @@
1
+ import { Renderable, type RenderableOptions } from "../Renderable";
2
+ import type { RenderContext } from "../types";
3
+ import { RGBA } from "../lib/RGBA";
4
+ import { SyntaxStyle } from "../syntax-style";
5
+ export interface DiffRenderableOptions extends RenderableOptions<DiffRenderable> {
6
+ diff?: string;
7
+ view?: "unified" | "split";
8
+ filetype?: string;
9
+ syntaxStyle?: SyntaxStyle;
10
+ wrapMode?: "word" | "char" | "none";
11
+ conceal?: boolean;
12
+ selectionBg?: string | RGBA;
13
+ selectionFg?: string | RGBA;
14
+ showLineNumbers?: boolean;
15
+ lineNumberFg?: string | RGBA;
16
+ lineNumberBg?: string | RGBA;
17
+ addedBg?: string | RGBA;
18
+ removedBg?: string | RGBA;
19
+ contextBg?: string | RGBA;
20
+ addedContentBg?: string | RGBA;
21
+ removedContentBg?: string | RGBA;
22
+ contextContentBg?: string | RGBA;
23
+ addedSignColor?: string | RGBA;
24
+ removedSignColor?: string | RGBA;
25
+ addedLineNumberBg?: string | RGBA;
26
+ removedLineNumberBg?: string | RGBA;
27
+ }
28
+ export declare class DiffRenderable extends Renderable {
29
+ private _diff;
30
+ private _view;
31
+ private _parsedDiff;
32
+ private _parseError;
33
+ private _filetype?;
34
+ private _syntaxStyle?;
35
+ private _wrapMode?;
36
+ private _conceal;
37
+ private _selectionBg?;
38
+ private _selectionFg?;
39
+ private _showLineNumbers;
40
+ private _lineNumberFg;
41
+ private _lineNumberBg;
42
+ private _addedBg;
43
+ private _removedBg;
44
+ private _contextBg;
45
+ private _addedContentBg;
46
+ private _removedContentBg;
47
+ private _contextContentBg;
48
+ private _addedSignColor;
49
+ private _removedSignColor;
50
+ private _addedLineNumberBg;
51
+ private _removedLineNumberBg;
52
+ private leftSide;
53
+ private rightSide;
54
+ private leftSideAdded;
55
+ private rightSideAdded;
56
+ private leftCodeRenderable;
57
+ private rightCodeRenderable;
58
+ private pendingRebuild;
59
+ private errorTextRenderable;
60
+ private errorCodeRenderable;
61
+ constructor(ctx: RenderContext, options: DiffRenderableOptions);
62
+ private parseDiff;
63
+ private buildView;
64
+ protected onResize(width: number, height: number): void;
65
+ private requestRebuild;
66
+ private rebuildView;
67
+ destroyRecursively(): void;
68
+ /**
69
+ * Create or update a CodeRenderable with the given content and options.
70
+ * Reuses existing instances to avoid expensive recreation.
71
+ */
72
+ private buildErrorView;
73
+ private createOrUpdateCodeRenderable;
74
+ /**
75
+ * Create or update a LineNumberRenderable side panel.
76
+ * Handles both creation and updates, ensuring the side is properly added to the render tree.
77
+ */
78
+ private createOrUpdateSide;
79
+ private buildUnifiedView;
80
+ private buildSplitView;
81
+ get diff(): string;
82
+ set diff(value: string);
83
+ get view(): "unified" | "split";
84
+ set view(value: "unified" | "split");
85
+ get filetype(): string | undefined;
86
+ set filetype(value: string | undefined);
87
+ get syntaxStyle(): SyntaxStyle | undefined;
88
+ set syntaxStyle(value: SyntaxStyle | undefined);
89
+ get wrapMode(): "word" | "char" | "none" | undefined;
90
+ set wrapMode(value: "word" | "char" | "none" | undefined);
91
+ get showLineNumbers(): boolean;
92
+ set showLineNumbers(value: boolean);
93
+ get addedBg(): RGBA;
94
+ set addedBg(value: string | RGBA);
95
+ get removedBg(): RGBA;
96
+ set removedBg(value: string | RGBA);
97
+ get contextBg(): RGBA;
98
+ set contextBg(value: string | RGBA);
99
+ get addedSignColor(): RGBA;
100
+ set addedSignColor(value: string | RGBA);
101
+ get removedSignColor(): RGBA;
102
+ set removedSignColor(value: string | RGBA);
103
+ get addedLineNumberBg(): RGBA;
104
+ set addedLineNumberBg(value: string | RGBA);
105
+ get removedLineNumberBg(): RGBA;
106
+ set removedLineNumberBg(value: string | RGBA);
107
+ get lineNumberFg(): RGBA;
108
+ set lineNumberFg(value: string | RGBA);
109
+ get lineNumberBg(): RGBA;
110
+ set lineNumberBg(value: string | RGBA);
111
+ get addedContentBg(): RGBA | null;
112
+ set addedContentBg(value: string | RGBA | null);
113
+ get removedContentBg(): RGBA | null;
114
+ set removedContentBg(value: string | RGBA | null);
115
+ get contextContentBg(): RGBA | null;
116
+ set contextContentBg(value: string | RGBA | null);
117
+ get selectionBg(): RGBA | undefined;
118
+ set selectionBg(value: string | RGBA | undefined);
119
+ get selectionFg(): RGBA | undefined;
120
+ set selectionFg(value: string | RGBA | undefined);
121
+ }
@@ -3,7 +3,7 @@ import { Selection, type LocalSelectionBounds } from "../lib/selection";
3
3
  import { EditBuffer, type LogicalCursor } from "../edit-buffer";
4
4
  import { EditorView, type VisualCursor } from "../editor-view";
5
5
  import { RGBA } from "../lib/RGBA";
6
- import type { RenderContext, Highlight, CursorStyleOptions } from "../types";
6
+ import type { RenderContext, Highlight, CursorStyleOptions, LineInfoProvider, LineInfo } from "../types";
7
7
  import type { OptimizedBuffer } from "../buffer";
8
8
  import type { SyntaxStyle } from "../syntax-style";
9
9
  export interface CursorChangeEvent {
@@ -30,7 +30,7 @@ export interface EditBufferOptions extends RenderableOptions<EditBufferRenderabl
30
30
  onCursorChange?: (event: CursorChangeEvent) => void;
31
31
  onContentChange?: (event: ContentChangeEvent) => void;
32
32
  }
33
- export declare abstract class EditBufferRenderable extends Renderable {
33
+ export declare abstract class EditBufferRenderable extends Renderable implements LineInfoProvider {
34
34
  protected _focusable: boolean;
35
35
  selectable: boolean;
36
36
  protected _textColor: RGBA;
@@ -46,6 +46,7 @@ export declare abstract class EditBufferRenderable extends Renderable {
46
46
  protected lastLocalSelection: LocalSelectionBounds | null;
47
47
  protected _tabIndicator?: string | number;
48
48
  protected _tabIndicatorColor?: RGBA;
49
+ private _selectionAnchorState;
49
50
  private _cursorChangeListener;
50
51
  private _contentChangeListener;
51
52
  readonly editBuffer: EditBuffer;
@@ -69,7 +70,10 @@ export declare abstract class EditBufferRenderable extends Renderable {
69
70
  tabIndicatorColor: undefined;
70
71
  };
71
72
  constructor(ctx: RenderContext, options: EditBufferOptions);
73
+ get lineInfo(): LineInfo;
72
74
  private setupEventListeners;
75
+ get lineCount(): number;
76
+ get scrollY(): number;
73
77
  get plainText(): string;
74
78
  get logicalCursor(): LogicalCursor;
75
79
  get visualCursor(): VisualCursor;
@@ -136,4 +140,5 @@ export declare abstract class EditBufferRenderable extends Renderable {
136
140
  insertText(text: string): void;
137
141
  getTextRange(startOffset: number, endOffset: number): string;
138
142
  getTextRangeByCoords(startRow: number, startCol: number, endRow: number, endCol: number): string;
143
+ protected updateSelectionForMovement(shiftPressed: boolean, isBeforeMovement: boolean): void;
139
144
  }
@@ -0,0 +1,71 @@
1
+ import { Renderable, type RenderableOptions } from "../Renderable";
2
+ import { OptimizedBuffer } from "../buffer";
3
+ import type { RenderContext, LineInfoProvider } from "../types";
4
+ import { RGBA } from "../lib/RGBA";
5
+ export interface LineSign {
6
+ before?: string;
7
+ beforeColor?: string | RGBA;
8
+ after?: string;
9
+ afterColor?: string | RGBA;
10
+ }
11
+ export interface LineColorConfig {
12
+ gutter?: string | RGBA;
13
+ content?: string | RGBA;
14
+ }
15
+ export interface LineNumberOptions extends RenderableOptions<LineNumberRenderable> {
16
+ target?: Renderable & LineInfoProvider;
17
+ fg?: string | RGBA;
18
+ bg?: string | RGBA;
19
+ minWidth?: number;
20
+ paddingRight?: number;
21
+ lineColors?: Map<number, string | RGBA | LineColorConfig>;
22
+ lineSigns?: Map<number, LineSign>;
23
+ lineNumberOffset?: number;
24
+ hideLineNumbers?: Set<number>;
25
+ lineNumbers?: Map<number, number>;
26
+ }
27
+ export declare class LineNumberRenderable extends Renderable {
28
+ private gutter;
29
+ private target;
30
+ private _lineColorsGutter;
31
+ private _lineColorsContent;
32
+ private _lineSigns;
33
+ private _fg;
34
+ private _bg;
35
+ private _minWidth;
36
+ private _paddingRight;
37
+ private _lineNumberOffset;
38
+ private _hideLineNumbers;
39
+ private _lineNumbers;
40
+ private _isDestroying;
41
+ private handleLineInfoChange;
42
+ private parseLineColor;
43
+ constructor(ctx: RenderContext, options: LineNumberOptions);
44
+ private setTarget;
45
+ add(child: Renderable): number;
46
+ remove(id: string): void;
47
+ destroyRecursively(): void;
48
+ clearTarget(): void;
49
+ protected renderSelf(buffer: OptimizedBuffer): void;
50
+ set showLineNumbers(value: boolean);
51
+ get showLineNumbers(): boolean;
52
+ setLineColor(line: number, color: string | RGBA | LineColorConfig): void;
53
+ clearLineColor(line: number): void;
54
+ clearAllLineColors(): void;
55
+ setLineColors(lineColors: Map<number, string | RGBA | LineColorConfig>): void;
56
+ getLineColors(): {
57
+ gutter: Map<number, RGBA>;
58
+ content: Map<number, RGBA>;
59
+ };
60
+ setLineSign(line: number, sign: LineSign): void;
61
+ clearLineSign(line: number): void;
62
+ clearAllLineSigns(): void;
63
+ setLineSigns(lineSigns: Map<number, LineSign>): void;
64
+ getLineSigns(): Map<number, LineSign>;
65
+ set lineNumberOffset(value: number);
66
+ get lineNumberOffset(): number;
67
+ setHideLineNumbers(hideLineNumbers: Set<number>): void;
68
+ getHideLineNumbers(): Set<number>;
69
+ setLineNumbers(lineNumbers: Map<number, number>): void;
70
+ getLineNumbers(): Map<number, number>;
71
+ }
@@ -3,7 +3,7 @@ import { Selection, type LocalSelectionBounds } from "../lib/selection";
3
3
  import { TextBuffer } from "../text-buffer";
4
4
  import { TextBufferView } from "../text-buffer-view";
5
5
  import { RGBA } from "../lib/RGBA";
6
- import { type RenderContext } from "../types";
6
+ import { type RenderContext, type LineInfoProvider } from "../types";
7
7
  import type { OptimizedBuffer } from "../buffer";
8
8
  import type { LineInfo } from "../zig";
9
9
  export interface TextBufferOptions extends RenderableOptions<TextBufferRenderable> {
@@ -17,7 +17,7 @@ export interface TextBufferOptions extends RenderableOptions<TextBufferRenderabl
17
17
  tabIndicator?: string | number;
18
18
  tabIndicatorColor?: string | RGBA;
19
19
  }
20
- export declare abstract class TextBufferRenderable extends Renderable {
20
+ export declare abstract class TextBufferRenderable extends Renderable implements LineInfoProvider {
21
21
  selectable: boolean;
22
22
  protected _defaultFg: RGBA;
23
23
  protected _defaultBg: RGBA;
@@ -28,9 +28,10 @@ export declare abstract class TextBufferRenderable extends Renderable {
28
28
  protected lastLocalSelection: LocalSelectionBounds | null;
29
29
  protected _tabIndicator?: string | number;
30
30
  protected _tabIndicatorColor?: RGBA;
31
+ protected _scrollX: number;
32
+ protected _scrollY: number;
31
33
  protected textBuffer: TextBuffer;
32
34
  protected textBufferView: TextBufferView;
33
- protected _lineInfo: LineInfo;
34
35
  protected _defaultOptions: {
35
36
  fg: RGBA;
36
37
  bg: RGBA;
@@ -43,6 +44,19 @@ export declare abstract class TextBufferRenderable extends Renderable {
43
44
  tabIndicatorColor: undefined;
44
45
  };
45
46
  constructor(ctx: RenderContext, options: TextBufferOptions);
47
+ protected onMouseEvent(event: any): void;
48
+ protected handleScroll(event: any): void;
49
+ get lineInfo(): LineInfo;
50
+ get lineCount(): number;
51
+ get scrollY(): number;
52
+ set scrollY(value: number);
53
+ get scrollX(): number;
54
+ set scrollX(value: number);
55
+ get scrollWidth(): number;
56
+ get scrollHeight(): number;
57
+ get maxScrollY(): number;
58
+ get maxScrollX(): number;
59
+ protected updateViewportOffset(): void;
46
60
  get plainText(): string;
47
61
  get textLength(): number;
48
62
  get fg(): RGBA;
@@ -65,8 +79,6 @@ export declare abstract class TextBufferRenderable extends Renderable {
65
79
  protected refreshLocalSelection(): boolean;
66
80
  private updateLocalSelection;
67
81
  protected updateTextInfo(): void;
68
- private updateLineInfo;
69
- private updateWrapWidth;
70
82
  private setupMeasureFunc;
71
83
  shouldStartSelection(x: number, y: number): boolean;
72
84
  onSelectionChanged(selection: Selection | null): boolean;
@@ -5,7 +5,7 @@ import { RGBA, type ColorInput } from "../lib/RGBA";
5
5
  import { type KeyBinding as BaseKeyBinding } from "../lib/keymapping";
6
6
  import { type StyledText } from "../lib/styled-text";
7
7
  import type { ExtmarksController } from "../lib/extmarks";
8
- export type TextareaAction = "move-left" | "move-right" | "move-up" | "move-down" | "select-left" | "select-right" | "select-up" | "select-down" | "line-home" | "line-end" | "select-line-home" | "select-line-end" | "buffer-home" | "buffer-end" | "delete-line" | "delete-to-line-end" | "delete-to-line-start" | "backspace" | "delete" | "newline" | "undo" | "redo" | "word-forward" | "word-backward" | "select-word-forward" | "select-word-backward" | "delete-word-forward" | "delete-word-backward" | "submit";
8
+ export type TextareaAction = "move-left" | "move-right" | "move-up" | "move-down" | "select-left" | "select-right" | "select-up" | "select-down" | "line-home" | "line-end" | "select-line-home" | "select-line-end" | "buffer-home" | "buffer-end" | "select-buffer-home" | "select-buffer-end" | "delete-line" | "delete-to-line-end" | "delete-to-line-start" | "backspace" | "delete" | "newline" | "undo" | "redo" | "word-forward" | "word-backward" | "select-word-forward" | "select-word-backward" | "delete-word-forward" | "delete-word-backward" | "submit";
9
9
  export type KeyBinding = BaseKeyBinding<TextareaAction>;
10
10
  export interface SubmitEvent {
11
11
  }
@@ -62,8 +62,12 @@ export declare class TextareaRenderable extends EditBufferRenderable {
62
62
  gotoLineEnd(options?: {
63
63
  select?: boolean;
64
64
  }): boolean;
65
- gotoBufferHome(): boolean;
66
- gotoBufferEnd(): boolean;
65
+ gotoBufferHome(options?: {
66
+ select?: boolean;
67
+ }): boolean;
68
+ gotoBufferEnd(options?: {
69
+ select?: boolean;
70
+ }): boolean;
67
71
  deleteToLineEnd(): boolean;
68
72
  deleteToLineStart(): boolean;
69
73
  undo(): boolean;
@@ -76,7 +80,6 @@ export declare class TextareaRenderable extends EditBufferRenderable {
76
80
  }): boolean;
77
81
  deleteWordForward(): boolean;
78
82
  deleteWordBackward(): boolean;
79
- private handleShiftSelection;
80
83
  focus(): void;
81
84
  blur(): void;
82
85
  get placeholder(): StyledText | string | null;
@@ -4,8 +4,10 @@ export * from "./Code";
4
4
  export * from "./composition/constructs";
5
5
  export * from "./composition/VRenderable";
6
6
  export * from "./composition/vnode";
7
+ export * from "./Diff";
7
8
  export * from "./FrameBuffer";
8
9
  export * from "./Input";
10
+ export * from "./LineNumberRenderable";
9
11
  export * from "./ScrollBar";
10
12
  export * from "./ScrollBox";
11
13
  export * from "./Select";
package/testing.js CHANGED
@@ -4,7 +4,7 @@ import {
4
4
  CliRenderer,
5
5
  TreeSitterClient,
6
6
  resolveRenderLib
7
- } from "./index-ztfy2qy3.js";
7
+ } from "./index-vhxgbbed.js";
8
8
 
9
9
  // src/testing/test-renderer.ts
10
10
  import { Readable } from "stream";
@@ -23,11 +23,16 @@ export declare class TextBufferView {
23
23
  setWrapWidth(width: number | null): void;
24
24
  setWrapMode(mode: "none" | "char" | "word"): void;
25
25
  setViewportSize(width: number, height: number): void;
26
+ setViewport(x: number, y: number, width: number, height: number): void;
26
27
  get lineInfo(): LineInfo;
27
28
  get logicalLineInfo(): LineInfo;
28
29
  getSelectedText(): string;
29
30
  getPlainText(): string;
30
31
  setTabIndicator(indicator: string | number): void;
31
32
  setTabIndicatorColor(color: RGBA): void;
33
+ measureForDimensions(width: number, height: number): {
34
+ lineCount: number;
35
+ maxWidth: number;
36
+ } | null;
32
37
  destroy(): void;
33
38
  }
package/text-buffer.d.ts CHANGED
@@ -33,6 +33,7 @@ export declare class TextBuffer {
33
33
  setDefaultBg(bg: RGBA | null): void;
34
34
  setDefaultAttributes(attributes: number | null): void;
35
35
  resetDefaults(): void;
36
+ getLineCount(): number;
36
37
  get length(): number;
37
38
  get byteSize(): number;
38
39
  get ptr(): Pointer;
package/types.d.ts CHANGED
@@ -77,3 +77,15 @@ export interface Highlight {
77
77
  priority?: number | null;
78
78
  hlRef?: number | null;
79
79
  }
80
+ export interface LineInfo {
81
+ lineStarts: number[];
82
+ lineWidths: number[];
83
+ maxLineWidth: number;
84
+ lineSources: number[];
85
+ lineWraps: number[];
86
+ }
87
+ export interface LineInfoProvider {
88
+ get lineInfo(): LineInfo;
89
+ get lineCount(): number;
90
+ get scrollY(): number;
91
+ }
package/zig-structs.d.ts CHANGED
@@ -29,3 +29,13 @@ export declare const TerminalCapabilitiesStruct: import("bun-ffi-structs").Defin
29
29
  readonly lengthOf: "term_version";
30
30
  }], readonly ["term_from_xtversion", "bool_u8"]], {}>;
31
31
  export declare const EncodedCharStruct: import("bun-ffi-structs").DefineStructReturnType<[readonly ["width", "u8"], readonly ["char", "u32"]], {}>;
32
+ export declare const LineInfoStruct: import("bun-ffi-structs").DefineStructReturnType<[readonly ["starts", readonly ["u32"]], readonly ["startsLen", "u32", {
33
+ readonly lengthOf: "starts";
34
+ }], readonly ["widths", readonly ["u32"]], readonly ["widthsLen", "u32", {
35
+ readonly lengthOf: "widths";
36
+ }], readonly ["sources", readonly ["u32"]], readonly ["sourcesLen", "u32", {
37
+ readonly lengthOf: "sources";
38
+ }], readonly ["wraps", readonly ["u32"]], readonly ["wrapsLen", "u32", {
39
+ readonly lengthOf: "wraps";
40
+ }], readonly ["maxWidth", "u32"]], {}>;
41
+ export declare const MeasureResultStruct: import("bun-ffi-structs").DefineStructReturnType<[readonly ["lineCount", "u32"], readonly ["maxWidth", "u32"]], {}>;
package/zig.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import { type Pointer } from "bun:ffi";
2
- import { type CursorStyle, type DebugOverlayCorner, type WidthMethod, type Highlight } from "./types";
2
+ import { type CursorStyle, type DebugOverlayCorner, type WidthMethod, type Highlight, type LineInfo } from "./types";
3
+ export type { LineInfo };
3
4
  import { RGBA } from "./lib/RGBA";
4
5
  import { OptimizedBuffer } from "./buffer";
5
6
  import { TextBuffer } from "./text-buffer";
@@ -9,11 +10,6 @@ export declare enum LogLevel {
9
10
  Info = 2,
10
11
  Debug = 3
11
12
  }
12
- export interface LineInfo {
13
- lineStarts: number[];
14
- lineWidths: number[];
15
- maxLineWidth: number;
16
- }
17
13
  /**
18
14
  * VisualCursor represents a cursor position with both visual and logical coordinates.
19
15
  * Visual coordinates (visualRow, visualCol) are VIEWPORT-RELATIVE.
@@ -132,12 +128,17 @@ export interface RenderLib {
132
128
  textBufferViewSetWrapWidth: (view: Pointer, width: number) => void;
133
129
  textBufferViewSetWrapMode: (view: Pointer, mode: "none" | "char" | "word") => void;
134
130
  textBufferViewSetViewportSize: (view: Pointer, width: number, height: number) => void;
131
+ textBufferViewSetViewport: (view: Pointer, x: number, y: number, width: number, height: number) => void;
135
132
  textBufferViewGetLineInfo: (view: Pointer) => LineInfo;
136
133
  textBufferViewGetLogicalLineInfo: (view: Pointer) => LineInfo;
137
134
  textBufferViewGetSelectedTextBytes: (view: Pointer, maxLength: number) => Uint8Array | null;
138
135
  textBufferViewGetPlainTextBytes: (view: Pointer, maxLength: number) => Uint8Array | null;
139
136
  textBufferViewSetTabIndicator: (view: Pointer, indicator: number) => void;
140
137
  textBufferViewSetTabIndicatorColor: (view: Pointer, color: RGBA) => void;
138
+ textBufferViewMeasureForDimensions: (view: Pointer, width: number, height: number) => {
139
+ lineCount: number;
140
+ maxWidth: number;
141
+ } | null;
141
142
  readonly encoder: TextEncoder;
142
143
  readonly decoder: TextDecoder;
143
144
  bufferDrawTextBufferView: (buffer: Pointer, view: Pointer, x: number, y: number) => void;