@opentui/core 0.1.13 → 0.1.15

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,6 +1,11 @@
1
1
  import { EventEmitter } from "events";
2
- export declare class KeyHandler extends EventEmitter {
2
+ import { type ParsedKey } from "./parse.keypress";
3
+ type KeyHandlerEventMap = {
4
+ keypress: [ParsedKey];
5
+ };
6
+ export declare class KeyHandler extends EventEmitter<KeyHandlerEventMap> {
3
7
  constructor();
4
8
  destroy(): void;
5
9
  }
6
10
  export declare function getKeyHandler(): KeyHandler;
11
+ export {};
@@ -1,11 +1,15 @@
1
- import { Renderable } from "..";
2
- import type { SelectionState } from "../types";
1
+ import { Renderable, type ViewportBounds } from "..";
3
2
  import { fonts } from "./ascii.font";
4
3
  export declare class Selection {
5
4
  private _anchor;
6
- private _focus;
5
+ private _originalFocus;
6
+ private _normalizedAnchor;
7
+ private _normalizedFocus;
7
8
  private _selectedRenderables;
8
- constructor(anchor: {
9
+ private _touchedRenderables;
10
+ private _isActive;
11
+ private _isSelecting;
12
+ constructor(anchorRenderable: Renderable, anchor: {
9
13
  x: number;
10
14
  y: number;
11
15
  }, focus: {
@@ -20,51 +24,40 @@ export declare class Selection {
20
24
  x: number;
21
25
  y: number;
22
26
  };
23
- get bounds(): {
24
- startX: number;
25
- startY: number;
26
- endX: number;
27
- endY: number;
28
- };
27
+ set focus(value: {
28
+ x: number;
29
+ y: number;
30
+ });
31
+ private _updateNormalizedSelection;
32
+ get isActive(): boolean;
33
+ set isActive(value: boolean);
34
+ get isSelecting(): boolean;
35
+ set isSelecting(value: boolean);
36
+ get bounds(): ViewportBounds;
29
37
  updateSelectedRenderables(selectedRenderables: Renderable[]): void;
38
+ get selectedRenderables(): Renderable[];
39
+ updateTouchedRenderables(touchedRenderables: Renderable[]): void;
40
+ get touchedRenderables(): Renderable[];
30
41
  getSelectedText(): string;
31
42
  }
32
- export declare class TextSelectionHelper {
33
- private getX;
34
- private getY;
35
- private getTextLength;
36
- private getLineInfo?;
37
- private localSelection;
38
- private cachedGlobalSelection;
39
- constructor(getX: () => number, getY: () => number, getTextLength: () => number, getLineInfo?: (() => {
40
- lineStarts: number[];
41
- lineWidths: number[];
42
- }) | undefined);
43
- hasSelection(): boolean;
44
- getSelection(): {
45
- start: number;
46
- end: number;
47
- } | null;
48
- reevaluateSelection(width: number, height?: number): boolean;
49
- shouldStartSelection(x: number, y: number, width: number, height: number): boolean;
50
- onSelectionChanged(selection: SelectionState | null, width: number, height?: number): boolean;
51
- private calculateSingleLineSelection;
52
- private calculateMultiLineSelection;
43
+ export interface LocalSelectionBounds {
44
+ anchorX: number;
45
+ anchorY: number;
46
+ focusX: number;
47
+ focusY: number;
48
+ isActive: boolean;
53
49
  }
50
+ export declare function convertGlobalToLocalSelection(globalSelection: Selection | null, localX: number, localY: number): LocalSelectionBounds | null;
54
51
  export declare class ASCIIFontSelectionHelper {
55
- private getX;
56
- private getY;
57
52
  private getText;
58
53
  private getFont;
59
54
  private localSelection;
60
- private cachedGlobalSelection;
61
- constructor(getX: () => number, getY: () => number, getText: () => string, getFont: () => keyof typeof fonts);
55
+ constructor(getText: () => string, getFont: () => keyof typeof fonts);
62
56
  hasSelection(): boolean;
63
57
  getSelection(): {
64
58
  start: number;
65
59
  end: number;
66
60
  } | null;
67
- shouldStartSelection(x: number, y: number, width: number, height: number): boolean;
68
- onSelectionChanged(selection: SelectionState | null, width: number, height: number): boolean;
69
- reevaluateSelection(width: number, height: number): boolean;
61
+ shouldStartSelection(localX: number, localY: number, width: number, height: number): boolean;
62
+ onLocalSelectionChanged(localSelection: LocalSelectionBounds | null, width: number, height: number): boolean;
70
63
  }
@@ -14,11 +14,8 @@ export interface StyleAttrs {
14
14
  }
15
15
  export declare class StyledText {
16
16
  readonly chunks: TextChunk[];
17
- private _plainText;
18
17
  constructor(chunks: TextChunk[]);
19
- toString(): string;
20
18
  private static _createInstance;
21
- private static _chunksToPlainText;
22
19
  insert(chunk: TextChunk, index?: number): StyledText;
23
20
  remove(chunk: TextChunk): StyledText;
24
21
  replace(chunk: TextChunk, oldChunk: TextChunk): 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.13",
7
+ "version": "0.1.15",
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.13",
42
- "@opentui/core-darwin-arm64": "0.1.13",
43
- "@opentui/core-linux-x64": "0.1.13",
44
- "@opentui/core-linux-arm64": "0.1.13",
45
- "@opentui/core-win32-x64": "0.1.13",
46
- "@opentui/core-win32-arm64": "0.1.13"
41
+ "@opentui/core-darwin-x64": "0.1.15",
42
+ "@opentui/core-darwin-arm64": "0.1.15",
43
+ "@opentui/core-linux-x64": "0.1.15",
44
+ "@opentui/core-linux-arm64": "0.1.15",
45
+ "@opentui/core-win32-x64": "0.1.15",
46
+ "@opentui/core-win32-arm64": "0.1.15"
47
47
  }
48
48
  }
@@ -1,8 +1,9 @@
1
1
  import type { RenderableOptions } from "../Renderable";
2
+ import { Selection } from "../lib/selection";
2
3
  import { type fonts, type ASCIIFontName } from "../lib/ascii.font";
3
4
  import { RGBA } from "../lib/RGBA";
4
5
  import { FrameBufferRenderable } from "./FrameBuffer";
5
- import type { RenderContext, SelectionState } from "../types";
6
+ import type { RenderContext } from "../types";
6
7
  export interface ASCIIFontOptions extends RenderableOptions<ASCIIFontRenderable> {
7
8
  text?: string;
8
9
  font?: ASCIIFontName;
@@ -20,6 +21,7 @@ export declare class ASCIIFontRenderable extends FrameBufferRenderable {
20
21
  private _bg;
21
22
  private _selectionBg;
22
23
  private _selectionFg;
24
+ private lastLocalSelection;
23
25
  private selectionHelper;
24
26
  constructor(ctx: RenderContext, options: ASCIIFontOptions);
25
27
  get text(): string;
@@ -32,7 +34,7 @@ export declare class ASCIIFontRenderable extends FrameBufferRenderable {
32
34
  set bg(value: RGBA | string);
33
35
  private updateDimensions;
34
36
  shouldStartSelection(x: number, y: number): boolean;
35
- onSelectionChanged(selection: SelectionState | null): boolean;
37
+ onSelectionChanged(selection: Selection | null): boolean;
36
38
  getSelectedText(): string;
37
39
  hasSelection(): boolean;
38
40
  protected onResize(width: number, height: number): void;
@@ -3,7 +3,7 @@ import type { OptimizedBuffer } from "../buffer";
3
3
  import { type BorderCharacters, type BorderSides, type BorderSidesConfig, type BorderStyle } from "../lib";
4
4
  import { type ColorInput, RGBA } from "../lib/RGBA";
5
5
  import type { RenderContext } from "../types";
6
- export interface BoxOptions extends RenderableOptions<BoxRenderable> {
6
+ export interface BoxOptions<TRenderable extends Renderable = BoxRenderable> extends RenderableOptions<TRenderable> {
7
7
  backgroundColor?: string | RGBA;
8
8
  borderStyle?: BorderStyle;
9
9
  border?: boolean | BorderSides[];
@@ -56,6 +56,12 @@ export declare class BoxRenderable extends Renderable {
56
56
  get titleAlignment(): "left" | "center" | "right";
57
57
  set titleAlignment(value: "left" | "center" | "right");
58
58
  protected renderSelf(buffer: OptimizedBuffer): void;
59
+ protected getScissorRect(): {
60
+ x: number;
61
+ y: number;
62
+ width: number;
63
+ height: number;
64
+ };
59
65
  private applyYogaBorders;
60
66
  private applyYogaGap;
61
67
  set gap(gap: number | `${number}%` | undefined);
@@ -0,0 +1,77 @@
1
+ import type { OptimizedBuffer } from "../buffer";
2
+ import { RGBA, type ColorInput } from "../lib";
3
+ import type { ParsedKey } from "../lib/parse.keypress";
4
+ import { Renderable, type RenderableOptions } from "../Renderable";
5
+ import type { RenderContext } from "../types";
6
+ import { SliderRenderable, type SliderOptions } from "./Slider";
7
+ export interface ScrollBarOptions extends RenderableOptions<ScrollBarRenderable> {
8
+ orientation: "vertical" | "horizontal";
9
+ showArrows?: boolean;
10
+ arrowOptions?: Omit<ArrowOptions, "direction">;
11
+ trackOptions?: Partial<SliderOptions>;
12
+ onChange?: (position: number) => void;
13
+ }
14
+ export type ScrollUnit = "absolute" | "viewport" | "content" | "step";
15
+ export declare class ScrollBarRenderable extends Renderable {
16
+ readonly slider: SliderRenderable;
17
+ readonly startArrow: ArrowRenderable;
18
+ readonly endArrow: ArrowRenderable;
19
+ readonly orientation: "vertical" | "horizontal";
20
+ protected focusable: boolean;
21
+ private _scrollSize;
22
+ private _scrollPosition;
23
+ private _viewportSize;
24
+ private _showArrows;
25
+ private _manualVisibility;
26
+ private _onChange;
27
+ scrollStep: number | undefined | null;
28
+ get visible(): boolean;
29
+ set visible(value: boolean);
30
+ resetVisibilityControl(): void;
31
+ get scrollSize(): number;
32
+ get scrollPosition(): number;
33
+ get viewportSize(): number;
34
+ set scrollSize(value: number);
35
+ set scrollPosition(value: number);
36
+ set viewportSize(value: number);
37
+ get showArrows(): boolean;
38
+ set showArrows(value: boolean);
39
+ constructor(ctx: RenderContext, { trackOptions, arrowOptions, orientation, showArrows, ...options }: ScrollBarOptions);
40
+ set arrowOptions(options: ScrollBarOptions["arrowOptions"]);
41
+ set trackOptions(options: ScrollBarOptions["trackOptions"]);
42
+ private updateSliderFromScrollState;
43
+ scrollBy(delta: number, unit?: ScrollUnit): void;
44
+ private recalculateVisibility;
45
+ handleKeyPress(key: ParsedKey | string): boolean;
46
+ }
47
+ export interface ArrowOptions extends RenderableOptions<ArrowRenderable> {
48
+ direction: "up" | "down" | "left" | "right";
49
+ foregroundColor?: ColorInput;
50
+ backgroundColor?: ColorInput;
51
+ attributes?: number;
52
+ arrowChars?: {
53
+ up?: string;
54
+ down?: string;
55
+ left?: string;
56
+ right?: string;
57
+ };
58
+ }
59
+ export declare class ArrowRenderable extends Renderable {
60
+ private _direction;
61
+ private _foregroundColor;
62
+ private _backgroundColor;
63
+ private _attributes;
64
+ private _arrowChars;
65
+ constructor(ctx: RenderContext, options: ArrowOptions);
66
+ get direction(): "up" | "down" | "left" | "right";
67
+ set direction(value: "up" | "down" | "left" | "right");
68
+ get foregroundColor(): RGBA;
69
+ set foregroundColor(value: ColorInput);
70
+ get backgroundColor(): RGBA;
71
+ set backgroundColor(value: ColorInput);
72
+ get attributes(): number;
73
+ set attributes(value: number);
74
+ set arrowChars(value: ArrowOptions["arrowChars"]);
75
+ protected renderSelf(buffer: OptimizedBuffer): void;
76
+ private getArrowChar;
77
+ }
@@ -0,0 +1,82 @@
1
+ import { type ParsedKey } from "../lib";
2
+ import type { Renderable, RenderableOptions } from "../Renderable";
3
+ import type { MouseEvent } from "../renderer";
4
+ import type { RenderContext } from "../types";
5
+ import { BoxRenderable, type BoxOptions } from "./Box";
6
+ import type { VNode } from "./composition/vnode";
7
+ import { ScrollBarRenderable, type ScrollBarOptions, type ScrollUnit } from "./ScrollBar";
8
+ declare class ContentRenderable extends BoxRenderable {
9
+ private viewport;
10
+ constructor(ctx: RenderContext, viewport: BoxRenderable, options: RenderableOptions<BoxRenderable>);
11
+ protected _getChildren(): Renderable[];
12
+ }
13
+ export interface ScrollBoxOptions extends BoxOptions<ScrollBoxRenderable> {
14
+ rootOptions?: BoxOptions;
15
+ wrapperOptions?: BoxOptions;
16
+ viewportOptions?: BoxOptions;
17
+ contentOptions?: BoxOptions;
18
+ scrollbarOptions?: Omit<ScrollBarOptions, "orientation">;
19
+ verticalScrollbarOptions?: Omit<ScrollBarOptions, "orientation">;
20
+ horizontalScrollbarOptions?: Omit<ScrollBarOptions, "orientation">;
21
+ }
22
+ export declare class ScrollBoxRenderable extends BoxRenderable {
23
+ static idCounter: number;
24
+ private internalId;
25
+ readonly wrapper: BoxRenderable;
26
+ readonly viewport: BoxRenderable;
27
+ readonly content: ContentRenderable;
28
+ readonly horizontalScrollBar: ScrollBarRenderable;
29
+ readonly verticalScrollBar: ScrollBarRenderable;
30
+ protected focusable: boolean;
31
+ private selectionListener?;
32
+ private autoScrollMouseX;
33
+ private autoScrollMouseY;
34
+ private readonly autoScrollThresholdVertical;
35
+ private readonly autoScrollThresholdHorizontal;
36
+ private readonly autoScrollSpeedSlow;
37
+ private readonly autoScrollSpeedMedium;
38
+ private readonly autoScrollSpeedFast;
39
+ private isAutoScrolling;
40
+ private cachedAutoScrollSpeed;
41
+ private autoScrollAccumulatorX;
42
+ private autoScrollAccumulatorY;
43
+ get scrollTop(): number;
44
+ set scrollTop(value: number);
45
+ get scrollLeft(): number;
46
+ set scrollLeft(value: number);
47
+ get scrollWidth(): number;
48
+ get scrollHeight(): number;
49
+ constructor(ctx: RenderContext, { wrapperOptions, viewportOptions, contentOptions, rootOptions, scrollbarOptions, verticalScrollbarOptions, horizontalScrollbarOptions, ...options }: ScrollBoxOptions);
50
+ protected onUpdate(deltaTime: number): void;
51
+ scrollBy(delta: number | {
52
+ x: number;
53
+ y: number;
54
+ }, unit?: ScrollUnit): void;
55
+ scrollTo(position: number | {
56
+ x: number;
57
+ y: number;
58
+ }): void;
59
+ add(obj: Renderable | VNode<any, any[]>, index?: number): number;
60
+ remove(id: string): void;
61
+ getChildren(): Renderable[];
62
+ protected onMouseEvent(event: MouseEvent): void;
63
+ handleKeyPress(key: ParsedKey | string): boolean;
64
+ startAutoScroll(mouseX: number, mouseY: number): void;
65
+ updateAutoScroll(mouseX: number, mouseY: number): void;
66
+ stopAutoScroll(): void;
67
+ private hasOtherLiveReasons;
68
+ private handleAutoScroll;
69
+ private getAutoScrollDirectionX;
70
+ private getAutoScrollDirectionY;
71
+ private getAutoScrollSpeed;
72
+ private recalculateBarProps;
73
+ set rootOptions(options: ScrollBoxOptions["rootOptions"]);
74
+ set wrapperOptions(options: ScrollBoxOptions["wrapperOptions"]);
75
+ set viewportOptions(options: ScrollBoxOptions["viewportOptions"]);
76
+ set contentOptions(options: ScrollBoxOptions["contentOptions"]);
77
+ set scrollbarOptions(options: ScrollBoxOptions["scrollbarOptions"]);
78
+ set verticalScrollbarOptions(options: ScrollBoxOptions["verticalScrollbarOptions"]);
79
+ set horizontalScrollbarOptions(options: ScrollBoxOptions["horizontalScrollbarOptions"]);
80
+ protected destroySelf(): void;
81
+ }
82
+ export {};
@@ -0,0 +1,31 @@
1
+ import { type ColorInput, OptimizedBuffer, Renderable, type RenderableOptions, type RenderContext, RGBA } from "../index";
2
+ export interface SliderOptions extends RenderableOptions<SliderRenderable> {
3
+ orientation: "vertical" | "horizontal";
4
+ thumbSize?: number;
5
+ thumbPosition?: number;
6
+ backgroundColor?: ColorInput;
7
+ foregroundColor?: ColorInput;
8
+ onChange?: (position: number) => void;
9
+ }
10
+ export declare class SliderRenderable extends Renderable {
11
+ readonly orientation: "vertical" | "horizontal";
12
+ private _thumbSize;
13
+ private _thumbPosition;
14
+ private _backgroundColor;
15
+ private _foregroundColor;
16
+ private _onChange?;
17
+ constructor(ctx: RenderContext, options: SliderOptions);
18
+ get thumbSize(): number;
19
+ set thumbSize(value: number);
20
+ get thumbPosition(): number;
21
+ set thumbPosition(value: number);
22
+ get backgroundColor(): RGBA;
23
+ set backgroundColor(value: ColorInput);
24
+ get foregroundColor(): RGBA;
25
+ set foregroundColor(value: ColorInput);
26
+ private setupMouseHandling;
27
+ private updatePositionFromMouse;
28
+ private getThumbPosition;
29
+ private getThumbRect;
30
+ protected renderSelf(buffer: OptimizedBuffer): void;
31
+ }
@@ -1,7 +1,8 @@
1
1
  import { Renderable, type RenderableOptions } from "../Renderable";
2
+ import { Selection } from "../lib/selection";
2
3
  import { StyledText } from "../lib/styled-text";
3
4
  import { RGBA } from "../lib/RGBA";
4
- import { type SelectionState, type RenderContext } from "../types";
5
+ import { type RenderContext } from "../types";
5
6
  import type { OptimizedBuffer } from "../buffer";
6
7
  export interface TextOptions extends RenderableOptions<TextRenderable> {
7
8
  content?: StyledText | string;
@@ -20,27 +21,43 @@ export declare class TextRenderable extends Renderable {
20
21
  private _defaultAttributes;
21
22
  private _selectionBg;
22
23
  private _selectionFg;
23
- private selectionHelper;
24
+ private lastLocalSelection;
24
25
  private textBuffer;
25
- private _plainText;
26
26
  private _lineInfo;
27
+ protected _defaultOptions: {
28
+ content: string;
29
+ fg: RGBA;
30
+ bg: RGBA;
31
+ selectionBg: undefined;
32
+ selectionFg: undefined;
33
+ selectable: true;
34
+ attributes: number;
35
+ };
27
36
  constructor(ctx: RenderContext, options: TextOptions);
28
37
  get content(): StyledText;
29
38
  set content(value: StyledText | string);
30
39
  get fg(): RGBA;
31
40
  set fg(value: RGBA | string | undefined);
41
+ get selectionBg(): RGBA | undefined;
42
+ set selectionBg(value: RGBA | string | undefined);
43
+ get selectionFg(): RGBA | undefined;
44
+ set selectionFg(value: RGBA | string | undefined);
32
45
  get bg(): RGBA;
33
46
  set bg(value: RGBA | string | undefined);
34
47
  get attributes(): number;
35
48
  set attributes(value: number);
36
49
  protected onResize(width: number, height: number): void;
37
- private syncSelectionToTextBuffer;
50
+ private updateLocalSelection;
38
51
  private updateTextInfo;
39
52
  private setupMeasureFunc;
40
53
  shouldStartSelection(x: number, y: number): boolean;
41
- onSelectionChanged(selection: SelectionState | null): boolean;
54
+ onSelectionChanged(selection: Selection | null): boolean;
42
55
  getSelectedText(): string;
43
56
  hasSelection(): boolean;
57
+ getSelection(): {
58
+ start: number;
59
+ end: number;
60
+ } | null;
44
61
  private updateTextBuffer;
45
62
  protected renderSelf(buffer: OptimizedBuffer): void;
46
63
  destroy(): void;
@@ -28,11 +28,18 @@ export declare function h<P>(type: Construct<P>, props?: P, ...children: VChild[
28
28
  export declare function isVNode(node: any): node is VNode;
29
29
  export declare function ensureRenderable(ctx: RenderContext, node: Renderable | VNode<any, any[]>): Renderable;
30
30
  export declare function wrapWithDelegates<T extends InstanceType<RenderableConstructor>>(instance: T, delegateMap: Record<string, string> | undefined): T;
31
- export declare function instantiate(ctx: RenderContext, node: VChild): Renderable;
31
+ export type InstantiateFn<NodeType extends VNode | Renderable> = Renderable & {
32
+ __node?: NodeType;
33
+ };
34
+ export declare function instantiate<NodeType extends VNode | Renderable>(ctx: RenderContext, node: NodeType): InstantiateFn<NodeType>;
32
35
  export type DelegateMap<T> = Partial<Record<keyof T, string>>;
33
- export declare function delegate<TCtor extends RenderableConstructor<any>, K extends keyof InstanceType<TCtor>>(mapping: Partial<Record<K, string>>, vnode: ProxiedVNode<TCtor>): ProxiedVNode<TCtor>;
34
- export declare function delegate<TCtor extends RenderableConstructor<any>, K extends keyof InstanceType<TCtor>>(mapping: Partial<Record<K, string>>, vnode: VNode<any> & {
35
- type: TCtor;
36
+ export type ValidateShape<Given, AllowedKeys> = {
37
+ [K in keyof Given]: K extends keyof AllowedKeys ? NonNullable<Given[K]> : never;
38
+ };
39
+ type InferNode<T> = T extends InstantiateFn<infer U> ? U : never;
40
+ export declare function delegate<Factory extends InstantiateFn<any>, InnerNode extends InferNode<Factory>, TargetMap extends Record<keyof InnerNode, string>, const Mapping extends Partial<TargetMap>>(mapping: ValidateShape<Mapping, TargetMap>, vnode: Factory): Renderable;
41
+ export declare function delegate<ConstructorType extends RenderableConstructor<any>, TargetMap extends Record<keyof InstanceType<ConstructorType>, string>, const Mapping extends Partial<TargetMap>>(mapping: ValidateShape<Mapping, TargetMap>, vnode: ProxiedVNode<ConstructorType>): ProxiedVNode<ConstructorType>;
42
+ export declare function delegate<ConstructorType extends RenderableConstructor<any>, const Mapping extends DelegateMap<InstanceType<ConstructorType>>>(mapping: ValidateShape<Mapping, string>, vnode: VNode & {
43
+ type: ConstructorType;
36
44
  }): VNode;
37
- export declare function delegate(mapping: Record<string, string>, vnode: VNode<any>): VNode;
38
- export declare function delegate(mapping: Record<string, string>, renderable: Renderable): Renderable;
45
+ export {};
@@ -5,6 +5,8 @@ export * from "./ASCIIFont";
5
5
  export * from "./Input";
6
6
  export * from "./Select";
7
7
  export * from "./TabSelect";
8
+ export * from "./ScrollBox";
9
+ export * from "./ScrollBar";
8
10
  export * from "./composition/constructs";
9
11
  export * from "./composition/vnode";
10
12
  export * from "./composition/VRenderable";
package/renderer.d.ts CHANGED
@@ -43,12 +43,14 @@ export declare class MouseEvent {
43
43
  };
44
44
  readonly scroll?: ScrollInfo;
45
45
  readonly target: Renderable | null;
46
- private _defaultPrevented;
47
- get defaultPrevented(): boolean;
46
+ readonly isSelecting?: boolean;
47
+ private _propagationStopped;
48
+ get propagationStopped(): boolean;
48
49
  constructor(target: Renderable | null, attributes: RawMouseEvent & {
49
50
  source?: Renderable;
51
+ isSelecting?: boolean;
50
52
  });
51
- preventDefault(): void;
53
+ stopPropagation(): void;
52
54
  }
53
55
  export declare enum MouseButton {
54
56
  LEFT = 0,
@@ -116,7 +118,6 @@ export declare class CliRenderer extends EventEmitter implements RenderContext {
116
118
  private lastOverRenderableNum;
117
119
  private lastOverRenderable?;
118
120
  private currentSelection;
119
- private selectionState;
120
121
  private selectionContainers;
121
122
  private _splitHeight;
122
123
  private renderOffset;
@@ -133,7 +134,7 @@ export declare class CliRenderer extends EventEmitter implements RenderContext {
133
134
  addToHitGrid(x: number, y: number, width: number, height: number, id: number): void;
134
135
  get widthMethod(): WidthMethod;
135
136
  private writeOut;
136
- needsUpdate(): void;
137
+ requestRender(): void;
137
138
  get useConsole(): boolean;
138
139
  set useConsole(value: boolean);
139
140
  get isRunning(): boolean;
@@ -191,6 +192,7 @@ export declare class CliRenderer extends EventEmitter implements RenderContext {
191
192
  requestLive(): void;
192
193
  dropLive(): void;
193
194
  start(): void;
195
+ auto(): void;
194
196
  private internalStart;
195
197
  pause(): void;
196
198
  private internalPause;
@@ -213,12 +215,14 @@ export declare class CliRenderer extends EventEmitter implements RenderContext {
213
215
  resetStats(): void;
214
216
  setGatherStats(enabled: boolean): void;
215
217
  getSelection(): Selection | null;
218
+ get hasSelection(): boolean;
216
219
  getSelectionContainer(): Renderable | null;
217
- hasSelection(): boolean;
218
220
  clearSelection(): void;
219
221
  private startSelection;
220
222
  private updateSelection;
223
+ requestSelectionUpdate(): void;
221
224
  private isWithinContainer;
222
225
  private finishSelection;
223
226
  private notifySelectablesOfSelectionChange;
227
+ private walkSelectableRenderables;
224
228
  }
package/text-buffer.d.ts CHANGED
@@ -14,18 +14,11 @@ export interface TextChunk {
14
14
  export declare class TextBuffer {
15
15
  private lib;
16
16
  private bufferPtr;
17
- private buffer;
18
17
  private _length;
19
18
  private _capacity;
20
19
  private _lineInfo?;
21
- constructor(lib: RenderLib, ptr: Pointer, buffer: {
22
- char: Uint32Array;
23
- fg: Float32Array;
24
- bg: Float32Array;
25
- attributes: Uint16Array;
26
- }, capacity: number);
20
+ constructor(lib: RenderLib, ptr: Pointer, capacity: number);
27
21
  static create(capacity: number | undefined, widthMethod: WidthMethod): TextBuffer;
28
- private syncBuffersAfterResize;
29
22
  setStyledText(text: StyledText): void;
30
23
  setDefaultFg(fg: RGBA | null): void;
31
24
  setDefaultBg(bg: RGBA | null): void;
@@ -34,13 +27,19 @@ export declare class TextBuffer {
34
27
  get length(): number;
35
28
  get capacity(): number;
36
29
  get ptr(): Pointer;
30
+ getSelectedText(): string;
37
31
  get lineInfo(): {
38
32
  lineStarts: number[];
39
33
  lineWidths: number[];
40
34
  };
41
- toString(): string;
42
- concat(other: TextBuffer): TextBuffer;
43
35
  setSelection(start: number, end: number, bgColor?: RGBA, fgColor?: RGBA): void;
44
36
  resetSelection(): void;
37
+ setLocalSelection(anchorX: number, anchorY: number, focusX: number, focusY: number, bgColor?: RGBA, fgColor?: RGBA): boolean;
38
+ resetLocalSelection(): void;
39
+ getSelection(): {
40
+ start: number;
41
+ end: number;
42
+ } | null;
43
+ hasSelection(): boolean;
45
44
  destroy(): void;
46
45
  }
package/types.d.ts CHANGED
@@ -1,4 +1,6 @@
1
1
  import type { RGBA } from "./lib/RGBA";
2
+ import type { EventEmitter } from "events";
3
+ import type { Selection } from "./lib/selection";
2
4
  export declare const TextAttributes: {
3
5
  NONE: number;
4
6
  BOLD: number;
@@ -18,11 +20,22 @@ export declare enum DebugOverlayCorner {
18
20
  bottomRight = 3
19
21
  }
20
22
  export type WidthMethod = "wcwidth" | "unicode";
21
- export interface RenderContext {
23
+ export interface RendererEvents {
24
+ resize: (width: number, height: number) => void;
25
+ key: (data: Buffer) => void;
26
+ "memory:snapshot": (snapshot: {
27
+ heapUsed: number;
28
+ heapTotal: number;
29
+ arrayBuffers: number;
30
+ }) => void;
31
+ selection: (selection: Selection) => void;
32
+ "debugOverlay:toggle": (enabled: boolean) => void;
33
+ }
34
+ export interface RenderContext extends EventEmitter {
22
35
  addToHitGrid: (x: number, y: number, width: number, height: number, id: number) => void;
23
36
  width: number;
24
37
  height: number;
25
- needsUpdate: () => void;
38
+ requestRender: () => void;
26
39
  setCursorPosition: (x: number, y: number, visible: boolean) => void;
27
40
  setCursorStyle: (style: CursorStyle, blinking: boolean) => void;
28
41
  setCursorColor: (color: RGBA) => void;
@@ -30,16 +43,14 @@ export interface RenderContext {
30
43
  capabilities: any | null;
31
44
  requestLive: () => void;
32
45
  dropLive: () => void;
46
+ hasSelection: boolean;
47
+ getSelection: () => Selection | null;
48
+ requestSelectionUpdate: () => void;
33
49
  }
34
- export interface SelectionState {
35
- anchor: {
36
- x: number;
37
- y: number;
38
- };
39
- focus: {
40
- x: number;
41
- y: number;
42
- };
43
- isActive: boolean;
44
- isSelecting: boolean;
50
+ export type Timeout = ReturnType<typeof setTimeout> | undefined;
51
+ export interface ViewportBounds {
52
+ x: number;
53
+ y: number;
54
+ width: number;
55
+ height: number;
45
56
  }