@opentui/core 0.5.4 → 0.5.7

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,5 +1,5 @@
1
1
  import { Renderable } from "../Renderable.js";
2
- import type { ViewportBounds } from "../types.js";
2
+ import type { SelectionBehavior, ViewportBounds } from "../types.js";
3
3
  import { fonts } from "./ascii.font.js";
4
4
  export declare class Selection {
5
5
  private _anchor;
@@ -9,13 +9,14 @@ export declare class Selection {
9
9
  private _isActive;
10
10
  private _isDragging;
11
11
  private _isStart;
12
+ behavior: SelectionBehavior;
12
13
  constructor(anchorRenderable: Renderable, anchor: {
13
14
  x: number;
14
15
  y: number;
15
16
  }, focus: {
16
17
  x: number;
17
18
  y: number;
18
- });
19
+ }, behavior?: SelectionBehavior);
19
20
  get isStart(): boolean;
20
21
  set isStart(value: boolean);
21
22
  get anchor(): {
@@ -47,6 +48,7 @@ export interface LocalSelectionBounds {
47
48
  focusX: number;
48
49
  focusY: number;
49
50
  isActive: boolean;
51
+ behavior: SelectionBehavior;
50
52
  }
51
53
  export declare function convertGlobalToLocalSelection(globalSelection: Selection | null, localX: number, localY: number): LocalSelectionBounds | null;
52
54
  export declare class ASCIIFontSelectionHelper {
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.4",
7
+ "version": "0.5.7",
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.4",
79
- "@opentui/core-darwin-arm64": "0.5.4",
80
- "@opentui/core-linux-x64": "0.5.4",
81
- "@opentui/core-linux-arm64": "0.5.4",
82
- "@opentui/core-win32-x64": "0.5.4",
83
- "@opentui/core-win32-arm64": "0.5.4",
84
- "@opentui/core-linux-x64-musl": "0.5.4",
85
- "@opentui/core-linux-arm64-musl": "0.5.4"
78
+ "@opentui/core-darwin-x64": "0.5.7",
79
+ "@opentui/core-darwin-arm64": "0.5.7",
80
+ "@opentui/core-linux-x64": "0.5.7",
81
+ "@opentui/core-linux-arm64": "0.5.7",
82
+ "@opentui/core-win32-x64": "0.5.7",
83
+ "@opentui/core-win32-arm64": "0.5.7",
84
+ "@opentui/core-linux-x64-musl": "0.5.7",
85
+ "@opentui/core-linux-arm64-musl": "0.5.7"
86
86
  }
87
87
  }
@@ -3,7 +3,7 @@ import { Selection, type LocalSelectionBounds } from "../lib/selection.js";
3
3
  import { EditBuffer, type LogicalCursor } from "../edit-buffer.js";
4
4
  import { EditorView, type VisualCursor } from "../editor-view.js";
5
5
  import { RGBA } from "../lib/RGBA.js";
6
- import type { RenderContext, Highlight, CursorStyleOptions, LineInfoProvider, LineInfo } from "../types.js";
6
+ import type { RenderContext, Highlight, CursorStyleOptions, LineInfoProvider, LineInfo, SelectionOccupancy } from "../types.js";
7
7
  import type { OptimizedBuffer } from "../buffer.js";
8
8
  import type { SyntaxStyle } from "../syntax-style.js";
9
9
  declare const BrandedEditBufferRenderable: unique symbol;
@@ -36,6 +36,7 @@ export interface EditBufferOptions extends RenderableOptions<EditBufferRenderabl
36
36
  showCursor?: boolean;
37
37
  cursorColor?: string | RGBA;
38
38
  cursorStyle?: CursorStyleOptions;
39
+ selectionOccupancy?: SelectionOccupancy;
39
40
  syntaxStyle?: SyntaxStyle;
40
41
  tabIndicator?: string | number;
41
42
  tabIndicatorColor?: string | RGBA;
@@ -120,6 +121,8 @@ export declare abstract class EditBufferRenderable extends Renderable implements
120
121
  set cursorColor(value: RGBA | string);
121
122
  get cursorStyle(): CursorStyleOptions;
122
123
  set cursorStyle(style: CursorStyleOptions);
124
+ get selectionOccupancy(): SelectionOccupancy;
125
+ set selectionOccupancy(value: SelectionOccupancy | null | undefined);
123
126
  get tabIndicator(): string | number | undefined;
124
127
  set tabIndicator(value: string | number | undefined);
125
128
  get tabIndicatorColor(): RGBA | undefined;
@@ -153,6 +156,7 @@ export declare abstract class EditBufferRenderable extends Renderable implements
153
156
  deleteCharBackward(): boolean;
154
157
  newLine(): boolean;
155
158
  deleteLine(): boolean;
159
+ private collapseSelectionToEdge;
156
160
  moveCursorLeft(options?: {
157
161
  select?: boolean;
158
162
  }): boolean;
@@ -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/renderer.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { Renderable, RootRenderable } from "./Renderable.js";
2
- import { DebugOverlayCorner, type CursorStyleOptions, type MousePointerStyle, type RenderContext, type TerminalCapabilities, type ThemeMode, type WidthMethod } from "./types.js";
2
+ import { DebugOverlayCorner, type CursorStyleOptions, type MousePointerStyle, type RenderContext, type TerminalCapabilities, type ThemeMode, type SelectionBehavior, type WidthMethod } from "./types.js";
3
3
  import { RGBA, type ColorInput } from "./lib/RGBA.js";
4
4
  import { OptimizedBuffer } from "./buffer.js";
5
5
  import { type NativeBufferedOutput, type NativeRenderStats, type RendererHandle } from "./zig.js";
@@ -295,6 +295,7 @@ export declare class CliRenderer extends EventEmitter implements RenderContext {
295
295
  private lastOverRenderable?;
296
296
  private currentSelection;
297
297
  private selectionContainers;
298
+ private lastClick;
298
299
  private clipboard;
299
300
  private _splitHeight;
300
301
  private renderOffset;
@@ -585,11 +586,13 @@ export declare class CliRenderer extends EventEmitter implements RenderContext {
585
586
  get hasSelection(): boolean;
586
587
  getSelectionContainer(): Renderable | null;
587
588
  clearSelection(): void;
589
+ private clearSelectionState;
588
590
  /**
589
591
  * Start a new selection at the given coordinates.
590
592
  * Used by both mouse and keyboard selection.
591
593
  */
592
- startSelection(renderable: Renderable, x: number, y: number): void;
594
+ startSelection(renderable: Renderable, x: number, y: number, behavior?: SelectionBehavior): void;
595
+ private nextClickBehavior;
593
596
  updateSelection(currentRenderable: Renderable | undefined, x: number, y: number, options?: {
594
597
  finishDragging?: boolean;
595
598
  }): void;
package/testing.bun.js CHANGED
@@ -2,11 +2,11 @@
2
2
  import {
3
3
  ANSI,
4
4
  CliRenderer
5
- } from "./chunk-bun-gvv8cwwz.js";
5
+ } from "./chunk-bun-z4gs6jzg.js";
6
6
  import {
7
7
  SystemClock,
8
8
  TreeSitterClient
9
- } from "./chunk-bun-1n307cze.js";
9
+ } from "./chunk-bun-xmsp0nqq.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-tq0x9mbj.js";
4
+ } from "./chunk-node-591ssncm.js";
5
5
  import {
6
6
  SystemClock,
7
7
  TreeSitterClient
8
- } from "./chunk-node-crchpns1.js";
8
+ } from "./chunk-node-267dafd8.js";
9
9
 
10
10
  // src/testing/mock-keys.ts
11
11
  import { Buffer as Buffer2 } from "node:buffer";
@@ -1,6 +1,7 @@
1
1
  import { RGBA } from "./lib/RGBA.js";
2
2
  import { type LineInfo, type MeasureResult, type RenderLib, type TextBufferViewHandle } from "./zig.js";
3
3
  import type { TextBuffer } from "./text-buffer.js";
4
+ import type { SelectionBehavior, SelectionOccupancy } from "./types.js";
4
5
  export declare class TextBufferView {
5
6
  private lib;
6
7
  private viewPtr;
@@ -18,9 +19,11 @@ export declare class TextBufferView {
18
19
  end: number;
19
20
  } | null;
20
21
  hasSelection(): boolean;
21
- setLocalSelection(anchorX: number, anchorY: number, focusX: number, focusY: number, bgColor?: RGBA, fgColor?: RGBA): boolean;
22
- updateLocalSelection(anchorX: number, anchorY: number, focusX: number, focusY: number, bgColor?: RGBA, fgColor?: RGBA): boolean;
22
+ setLocalSelection(anchorX: number, anchorY: number, focusX: number, focusY: number, bgColor?: RGBA, fgColor?: RGBA, behavior?: SelectionBehavior): boolean;
23
+ updateLocalSelection(anchorX: number, anchorY: number, focusX: number, focusY: number, bgColor?: RGBA, fgColor?: RGBA, behavior?: SelectionBehavior): boolean;
23
24
  resetLocalSelection(): void;
25
+ setSelectionOccupancy(occupancy: SelectionOccupancy): void;
26
+ getSelectionOccupancy(): SelectionOccupancy;
24
27
  setWrapWidth(width: number | null): void;
25
28
  setWrapMode(mode: "none" | "char" | "word"): void;
26
29
  setFirstLineOffset(offset: number): void;
package/types.d.ts CHANGED
@@ -24,6 +24,15 @@ export declare const ATTRIBUTE_BASE_MASK = 255;
24
24
  export declare function getBaseAttributes(attr: number): number;
25
25
  export type ThemeMode = "dark" | "light";
26
26
  export type CursorStyle = "block" | "line" | "underline" | "default";
27
+ /** How a selection occupies cells between stored anchor and focus offsets.
28
+ * Independent of `cursorStyle` (CSI `q` is paint). Default `cell` includes
29
+ * the grapheme under the max endpoint. `boundary` is the half-open insert
30
+ * range `[min, max)`. */
31
+ export type SelectionOccupancy = "cell" | "boundary";
32
+ /** How local cell coordinates expand into a highlight range.
33
+ * `cell` is the current inclusive press/drag. `word` and `line` expand
34
+ * each endpoint through native selectWord / selectLine. */
35
+ export type SelectionBehavior = "cell" | "word" | "line";
27
36
  export type MousePointerStyle = "default" | "pointer" | "text" | "crosshair" | "move" | "not-allowed";
28
37
  export interface CursorStyleOptions {
29
38
  style?: CursorStyle;
@@ -128,7 +137,7 @@ export interface RenderContext extends EventEmitter {
128
137
  keyInput: KeyHandler;
129
138
  _internalKeyInput: InternalKeyHandler;
130
139
  clearSelection: () => void;
131
- startSelection: (renderable: Renderable, x: number, y: number) => void;
140
+ startSelection: (renderable: Renderable, x: number, y: number, behavior?: SelectionBehavior) => void;
132
141
  updateSelection: (currentRenderable: Renderable | undefined, x: number, y: number, options?: {
133
142
  finishDragging?: boolean;
134
143
  }) => void;
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-1n307cze.js";
96
+ } from "./chunk-bun-xmsp0nqq.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-crchpns1.js";
95
+ } from "./chunk-node-267dafd8.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
@@ -1,5 +1,5 @@
1
1
  import { type FFICallbackInstance, type Pointer } from "./platform/ffi.js";
2
- import { type CursorStyle, type CursorStyleOptions, type TargetChannel, type DebugOverlayCorner, type WidthMethod, type TerminalCapabilities, type Highlight, type LineInfo, type ImageRenderProtocol } from "./types.js";
2
+ import { type CursorStyle, type CursorStyleOptions, type SelectionOccupancy, type SelectionBehavior, type TargetChannel, type DebugOverlayCorner, type WidthMethod, type TerminalCapabilities, type Highlight, type LineInfo, type ImageRenderProtocol } from "./types.js";
3
3
  export type { LineInfo, AllocatorStats, AudioStreamCreateOptions, BuildOptions, NativeAudioCaptureStats, NativeAudioStreamStats, NativeRenderStats, };
4
4
  import { RGBA } from "./lib/RGBA.js";
5
5
  import { OptimizedBuffer } from "./buffer.js";
@@ -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,
@@ -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;
@@ -442,10 +474,12 @@ export interface RenderLib extends AudioEngineLib {
442
474
  start: number;
443
475
  end: number;
444
476
  } | null;
445
- textBufferViewSetLocalSelection: (view: TextBufferViewHandle, anchorX: number, anchorY: number, focusX: number, focusY: number, bgColor: RGBA | null, fgColor: RGBA | null) => boolean;
477
+ textBufferViewSetLocalSelection: (view: TextBufferViewHandle, anchorX: number, anchorY: number, focusX: number, focusY: number, bgColor: RGBA | null, fgColor: RGBA | null, behavior?: SelectionBehavior) => boolean;
446
478
  textBufferViewUpdateSelection: (view: TextBufferViewHandle, end: number, bgColor: RGBA | null, fgColor: RGBA | null) => void;
447
- textBufferViewUpdateLocalSelection: (view: TextBufferViewHandle, anchorX: number, anchorY: number, focusX: number, focusY: number, bgColor: RGBA | null, fgColor: RGBA | null) => boolean;
479
+ textBufferViewUpdateLocalSelection: (view: TextBufferViewHandle, anchorX: number, anchorY: number, focusX: number, focusY: number, bgColor: RGBA | null, fgColor: RGBA | null, behavior?: SelectionBehavior) => boolean;
448
480
  textBufferViewResetLocalSelection: (view: TextBufferViewHandle) => void;
481
+ textBufferViewSetSelectionOccupancy: (view: TextBufferViewHandle, occupancy: SelectionOccupancy) => void;
482
+ textBufferViewGetSelectionOccupancy: (view: TextBufferViewHandle) => SelectionOccupancy;
449
483
  textBufferViewSetWrapWidth: (view: TextBufferViewHandle, width: number) => void;
450
484
  textBufferViewSetWrapMode: (view: TextBufferViewHandle, mode: "none" | "char" | "word") => void;
451
485
  textBufferViewSetFirstLineOffset: (view: TextBufferViewHandle, offset: number) => void;
@@ -541,10 +575,14 @@ export interface RenderLib extends AudioEngineLib {
541
575
  start: number;
542
576
  end: number;
543
577
  } | null;
544
- editorViewSetLocalSelection: (view: EditorViewHandle, anchorX: number, anchorY: number, focusX: number, focusY: number, bgColor: RGBA | null, fgColor: RGBA | null, updateCursor: boolean, followCursor: boolean) => boolean;
578
+ editorViewSetLocalSelection: (view: EditorViewHandle, anchorX: number, anchorY: number, focusX: number, focusY: number, bgColor: RGBA | null, fgColor: RGBA | null, updateCursor: boolean, followCursor: boolean, behavior?: SelectionBehavior) => boolean;
545
579
  editorViewUpdateSelection: (view: EditorViewHandle, end: number, bgColor: RGBA | null, fgColor: RGBA | null) => void;
546
- editorViewUpdateLocalSelection: (view: EditorViewHandle, anchorX: number, anchorY: number, focusX: number, focusY: number, bgColor: RGBA | null, fgColor: RGBA | null, updateCursor: boolean, followCursor: boolean) => boolean;
580
+ editorViewUpdateLocalSelection: (view: EditorViewHandle, anchorX: number, anchorY: number, focusX: number, focusY: number, bgColor: RGBA | null, fgColor: RGBA | null, updateCursor: boolean, followCursor: boolean, behavior?: SelectionBehavior) => boolean;
547
581
  editorViewResetLocalSelection: (view: EditorViewHandle) => void;
582
+ editorViewConvertSelectionToCell: (view: EditorViewHandle) => boolean;
583
+ editorViewSetSelectionOccupancy: (view: EditorViewHandle, occupancy: SelectionOccupancy) => void;
584
+ editorViewSetSelectionInclusive: (view: EditorViewHandle, start: number, end: number, bgColor: RGBA | null, fgColor: RGBA | null) => void;
585
+ editorViewSetSelectionColors: (view: EditorViewHandle, bgColor: RGBA | null, fgColor: RGBA | null) => void;
548
586
  editorViewGetSelectedTextBytes: (view: EditorViewHandle, maxLength: number) => Uint8Array | null;
549
587
  editorViewGetCursor: (view: EditorViewHandle) => {
550
588
  row: number;
@@ -561,6 +599,7 @@ export interface RenderLib extends AudioEngineLib {
561
599
  editorViewGetEOL: (view: EditorViewHandle) => VisualCursor;
562
600
  editorViewGetVisualSOL: (view: EditorViewHandle) => VisualCursor;
563
601
  editorViewGetVisualEOL: (view: EditorViewHandle) => VisualCursor;
602
+ editorViewGotoVisualLineEnd: (view: EditorViewHandle) => void;
564
603
  editorViewGetLineInfo: (view: EditorViewHandle) => LineInfo;
565
604
  editorViewGetLogicalLineInfo: (view: EditorViewHandle) => LineInfo;
566
605
  editorViewSetPlaceholderStyledText: (view: EditorViewHandle, chunks: Array<{
@@ -683,6 +722,32 @@ export interface RenderLib extends AudioEngineLib {
683
722
  destroyNativeRenderable: (handle: NativeRenderableHandle) => void;
684
723
  nativeRenderableAttachYogaNode: (handle: NativeRenderableHandle, node: Pointer) => boolean;
685
724
  nativeRenderableSetMeasureTarget: (handle: NativeRenderableHandle, kind: NativeMeasureTargetKind, target: NativeMeasureTargetHandle | 0) => boolean;
725
+ createEmbeddedTerminal: (options: {
726
+ cols: number;
727
+ rows: number;
728
+ maxScrollback?: number;
729
+ }) => EmbeddedTerminalHandle;
730
+ destroyEmbeddedTerminal: (handle: EmbeddedTerminalHandle) => void;
731
+ embeddedTerminalWrite: (handle: EmbeddedTerminalHandle, data: string | Uint8Array) => void;
732
+ embeddedTerminalResize: (handle: EmbeddedTerminalHandle, cols: number, rows: number) => void;
733
+ embeddedTerminalInvalidate: (handle: EmbeddedTerminalHandle) => void;
734
+ embeddedTerminalScroll: (handle: EmbeddedTerminalHandle, delta: number) => void;
735
+ embeddedTerminalSetSelection: (handle: EmbeddedTerminalHandle, start: {
736
+ x: number;
737
+ y: number;
738
+ }, end: {
739
+ x: number;
740
+ y: number;
741
+ }) => void;
742
+ embeddedTerminalClearSelection: (handle: EmbeddedTerminalHandle) => void;
743
+ embeddedTerminalGetSelectedText: (handle: EmbeddedTerminalHandle) => Uint8Array;
744
+ embeddedTerminalCompose: (handle: EmbeddedTerminalHandle, target: OptimizedBufferHandle, x: number, y: number) => void;
745
+ embeddedTerminalCursor: (handle: EmbeddedTerminalHandle) => EmbeddedTerminalCursor;
746
+ embeddedTerminalEncodeKey: (handle: EmbeddedTerminalHandle, key: EmbeddedTerminalKey) => Uint8Array;
747
+ embeddedTerminalEncodeMouse: (handle: EmbeddedTerminalHandle, mouse: EmbeddedTerminalMouse) => Uint8Array;
748
+ embeddedTerminalEncodePaste: (handle: EmbeddedTerminalHandle, input: Uint8Array) => Uint8Array;
749
+ embeddedTerminalEncodeFocus: (handle: EmbeddedTerminalHandle, focused: boolean) => Uint8Array;
750
+ embeddedTerminalDrainResponses: (handle: EmbeddedTerminalHandle) => Uint8Array;
686
751
  onNativeEvent: (name: string, handler: (data: ArrayBuffer) => void) => void;
687
752
  onceNativeEvent: (name: string, handler: (data: ArrayBuffer) => void) => void;
688
753
  offNativeEvent: (name: string, handler: (data: ArrayBuffer) => void) => void;