@opentui/core 0.0.0-20250908-4906ddad
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/3d/SpriteResourceManager.d.ts +74 -0
- package/3d/SpriteUtils.d.ts +13 -0
- package/3d/TextureUtils.d.ts +24 -0
- package/3d/WGPURenderer.d.ts +59 -0
- package/3d/animation/ExplodingSpriteEffect.d.ts +71 -0
- package/3d/animation/PhysicsExplodingSpriteEffect.d.ts +76 -0
- package/3d/animation/SpriteAnimator.d.ts +124 -0
- package/3d/animation/SpriteParticleGenerator.d.ts +62 -0
- package/3d/canvas.d.ts +42 -0
- package/3d/index.d.ts +11 -0
- package/3d/physics/PlanckPhysicsAdapter.d.ts +19 -0
- package/3d/physics/RapierPhysicsAdapter.d.ts +19 -0
- package/3d/physics/physics-interface.d.ts +27 -0
- package/3d.d.ts +2 -0
- package/3d.js +33847 -0
- package/3d.js.map +154 -0
- package/LICENSE +21 -0
- package/README.md +43 -0
- package/Renderable.d.ts +266 -0
- package/animation/Timeline.d.ts +125 -0
- package/ansi.d.ts +28 -0
- package/buffer.d.ts +74 -0
- package/console.d.ts +86 -0
- package/index-d6kwx5pm.js +8837 -0
- package/index-d6kwx5pm.js.map +36 -0
- package/index.d.ts +12 -0
- package/index.js +3721 -0
- package/index.js.map +23 -0
- package/lib/KeyHandler.d.ts +11 -0
- package/lib/RGBA.d.ts +24 -0
- package/lib/TrackedNode.d.ts +36 -0
- package/lib/ascii.font.d.ts +301 -0
- package/lib/border.d.ts +47 -0
- package/lib/hast-styled-text.d.ts +38 -0
- package/lib/index.d.ts +11 -0
- package/lib/output.capture.d.ts +24 -0
- package/lib/parse.keypress.d.ts +14 -0
- package/lib/parse.mouse.d.ts +23 -0
- package/lib/selection.d.ts +63 -0
- package/lib/styled-text.d.ts +73 -0
- package/lib/word-jumps.d.ts +2 -0
- package/lib/yoga.options.d.ts +31 -0
- package/package.json +48 -0
- package/post/filters.d.ts +105 -0
- package/renderables/ASCIIFont.d.ts +43 -0
- package/renderables/Box.d.ts +70 -0
- package/renderables/FrameBuffer.d.ts +16 -0
- package/renderables/Input.d.ts +70 -0
- package/renderables/ScrollBar.d.ts +77 -0
- package/renderables/ScrollBox.d.ts +82 -0
- package/renderables/Select.d.ts +102 -0
- package/renderables/Slider.d.ts +31 -0
- package/renderables/TabSelect.d.ts +86 -0
- package/renderables/Text.d.ts +72 -0
- package/renderables/composition/VRenderable.d.ts +16 -0
- package/renderables/composition/constructs.d.ts +12 -0
- package/renderables/composition/vnode.d.ts +46 -0
- package/renderables/index.d.ts +12 -0
- package/renderer.d.ts +232 -0
- package/singleton.d.ts +5 -0
- package/text-buffer.d.ts +52 -0
- package/types.d.ts +56 -0
- package/utils.d.ts +10 -0
- package/zig.d.ts +110 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { Renderable, type RenderableOptions } from "../Renderable";
|
|
2
|
+
import { OptimizedBuffer } from "../buffer";
|
|
3
|
+
import { type ColorInput } from "../lib/RGBA";
|
|
4
|
+
import type { ParsedKey } from "../lib/parse.keypress";
|
|
5
|
+
import type { RenderContext } from "../types";
|
|
6
|
+
export interface TabSelectOption {
|
|
7
|
+
name: string;
|
|
8
|
+
description: string;
|
|
9
|
+
value?: any;
|
|
10
|
+
}
|
|
11
|
+
export interface TabSelectRenderableOptions extends Omit<RenderableOptions<TabSelectRenderable>, "height"> {
|
|
12
|
+
height?: number;
|
|
13
|
+
options?: TabSelectOption[];
|
|
14
|
+
tabWidth?: number;
|
|
15
|
+
backgroundColor?: ColorInput;
|
|
16
|
+
textColor?: ColorInput;
|
|
17
|
+
focusedBackgroundColor?: ColorInput;
|
|
18
|
+
focusedTextColor?: ColorInput;
|
|
19
|
+
selectedBackgroundColor?: ColorInput;
|
|
20
|
+
selectedTextColor?: ColorInput;
|
|
21
|
+
selectedDescriptionColor?: ColorInput;
|
|
22
|
+
showScrollArrows?: boolean;
|
|
23
|
+
showDescription?: boolean;
|
|
24
|
+
showUnderline?: boolean;
|
|
25
|
+
wrapSelection?: boolean;
|
|
26
|
+
}
|
|
27
|
+
export declare enum TabSelectRenderableEvents {
|
|
28
|
+
SELECTION_CHANGED = "selectionChanged",
|
|
29
|
+
ITEM_SELECTED = "itemSelected"
|
|
30
|
+
}
|
|
31
|
+
export declare class TabSelectRenderable extends Renderable {
|
|
32
|
+
protected focusable: boolean;
|
|
33
|
+
private _options;
|
|
34
|
+
private selectedIndex;
|
|
35
|
+
private scrollOffset;
|
|
36
|
+
private _tabWidth;
|
|
37
|
+
private maxVisibleTabs;
|
|
38
|
+
private _backgroundColor;
|
|
39
|
+
private _textColor;
|
|
40
|
+
private _focusedBackgroundColor;
|
|
41
|
+
private _focusedTextColor;
|
|
42
|
+
private _selectedBackgroundColor;
|
|
43
|
+
private _selectedTextColor;
|
|
44
|
+
private _selectedDescriptionColor;
|
|
45
|
+
private _showScrollArrows;
|
|
46
|
+
private _showDescription;
|
|
47
|
+
private _showUnderline;
|
|
48
|
+
private _wrapSelection;
|
|
49
|
+
constructor(ctx: RenderContext, options: TabSelectRenderableOptions);
|
|
50
|
+
private calculateDynamicHeight;
|
|
51
|
+
protected renderSelf(buffer: OptimizedBuffer, deltaTime: number): void;
|
|
52
|
+
private refreshFrameBuffer;
|
|
53
|
+
private truncateText;
|
|
54
|
+
private renderScrollArrowsToFrameBuffer;
|
|
55
|
+
setOptions(options: TabSelectOption[]): void;
|
|
56
|
+
getSelectedOption(): TabSelectOption | null;
|
|
57
|
+
getSelectedIndex(): number;
|
|
58
|
+
moveLeft(): void;
|
|
59
|
+
moveRight(): void;
|
|
60
|
+
selectCurrent(): void;
|
|
61
|
+
setSelectedIndex(index: number): void;
|
|
62
|
+
private updateScrollOffset;
|
|
63
|
+
protected onResize(width: number, height: number): void;
|
|
64
|
+
setTabWidth(tabWidth: number): void;
|
|
65
|
+
getTabWidth(): number;
|
|
66
|
+
handleKeyPress(key: ParsedKey | string): boolean;
|
|
67
|
+
get options(): TabSelectOption[];
|
|
68
|
+
set options(options: TabSelectOption[]);
|
|
69
|
+
set backgroundColor(color: ColorInput);
|
|
70
|
+
set textColor(color: ColorInput);
|
|
71
|
+
set focusedBackgroundColor(color: ColorInput);
|
|
72
|
+
set focusedTextColor(color: ColorInput);
|
|
73
|
+
set selectedBackgroundColor(color: ColorInput);
|
|
74
|
+
set selectedTextColor(color: ColorInput);
|
|
75
|
+
set selectedDescriptionColor(color: ColorInput);
|
|
76
|
+
get showDescription(): boolean;
|
|
77
|
+
set showDescription(show: boolean);
|
|
78
|
+
get showUnderline(): boolean;
|
|
79
|
+
set showUnderline(show: boolean);
|
|
80
|
+
get showScrollArrows(): boolean;
|
|
81
|
+
set showScrollArrows(show: boolean);
|
|
82
|
+
get wrapSelection(): boolean;
|
|
83
|
+
set wrapSelection(wrap: boolean);
|
|
84
|
+
get tabWidth(): number;
|
|
85
|
+
set tabWidth(tabWidth: number);
|
|
86
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { Renderable, type RenderableOptions } from "../Renderable";
|
|
2
|
+
import { Selection } from "../lib/selection";
|
|
3
|
+
import { StyledText } from "../lib/styled-text";
|
|
4
|
+
import { type TextChunk } from "../text-buffer";
|
|
5
|
+
import { RGBA } from "../lib/RGBA";
|
|
6
|
+
import { type RenderContext } from "../types";
|
|
7
|
+
import type { OptimizedBuffer } from "../buffer";
|
|
8
|
+
export interface TextOptions extends RenderableOptions<TextRenderable> {
|
|
9
|
+
content?: StyledText | string;
|
|
10
|
+
fg?: string | RGBA;
|
|
11
|
+
bg?: string | RGBA;
|
|
12
|
+
selectionBg?: string | RGBA;
|
|
13
|
+
selectionFg?: string | RGBA;
|
|
14
|
+
selectable?: boolean;
|
|
15
|
+
attributes?: number;
|
|
16
|
+
}
|
|
17
|
+
export declare class TextRenderable extends Renderable {
|
|
18
|
+
selectable: boolean;
|
|
19
|
+
private _text;
|
|
20
|
+
private _defaultFg;
|
|
21
|
+
private _defaultBg;
|
|
22
|
+
private _defaultAttributes;
|
|
23
|
+
private _selectionBg;
|
|
24
|
+
private _selectionFg;
|
|
25
|
+
private lastLocalSelection;
|
|
26
|
+
private textBuffer;
|
|
27
|
+
private _lineInfo;
|
|
28
|
+
protected _defaultOptions: {
|
|
29
|
+
content: string;
|
|
30
|
+
fg: RGBA;
|
|
31
|
+
bg: RGBA;
|
|
32
|
+
selectionBg: undefined;
|
|
33
|
+
selectionFg: undefined;
|
|
34
|
+
selectable: true;
|
|
35
|
+
attributes: number;
|
|
36
|
+
};
|
|
37
|
+
constructor(ctx: RenderContext, options: TextOptions);
|
|
38
|
+
private updateTextBuffer;
|
|
39
|
+
private clearChunks;
|
|
40
|
+
get content(): StyledText;
|
|
41
|
+
get plainText(): string;
|
|
42
|
+
get textLength(): number;
|
|
43
|
+
get chunks(): TextChunk[];
|
|
44
|
+
set content(value: StyledText | string);
|
|
45
|
+
get fg(): RGBA;
|
|
46
|
+
set fg(value: RGBA | string | undefined);
|
|
47
|
+
get selectionBg(): RGBA | undefined;
|
|
48
|
+
set selectionBg(value: RGBA | string | undefined);
|
|
49
|
+
get selectionFg(): RGBA | undefined;
|
|
50
|
+
set selectionFg(value: RGBA | string | undefined);
|
|
51
|
+
get bg(): RGBA;
|
|
52
|
+
set bg(value: RGBA | string | undefined);
|
|
53
|
+
get attributes(): number;
|
|
54
|
+
set attributes(value: number);
|
|
55
|
+
protected onResize(width: number, height: number): void;
|
|
56
|
+
private updateLocalSelection;
|
|
57
|
+
private updateTextInfo;
|
|
58
|
+
private setupMeasureFunc;
|
|
59
|
+
insertChunk(chunk: TextChunk, index?: number): void;
|
|
60
|
+
removeChunk(chunk: TextChunk): void;
|
|
61
|
+
replaceChunk(chunk: TextChunk, oldChunk: TextChunk): void;
|
|
62
|
+
shouldStartSelection(x: number, y: number): boolean;
|
|
63
|
+
onSelectionChanged(selection: Selection | null): boolean;
|
|
64
|
+
getSelectedText(): string;
|
|
65
|
+
hasSelection(): boolean;
|
|
66
|
+
getSelection(): {
|
|
67
|
+
start: number;
|
|
68
|
+
end: number;
|
|
69
|
+
} | null;
|
|
70
|
+
protected renderSelf(buffer: OptimizedBuffer): void;
|
|
71
|
+
destroy(): void;
|
|
72
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Renderable, type RenderableOptions } from "../../Renderable";
|
|
2
|
+
import type { OptimizedBuffer } from "../../buffer";
|
|
3
|
+
import type { RenderContext } from "../../types";
|
|
4
|
+
export interface VRenderableOptions extends RenderableOptions<VRenderable> {
|
|
5
|
+
render?: (this: VRenderable | VRenderableOptions, buffer: OptimizedBuffer, deltaTime: number, renderable: VRenderable) => void;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* A generic renderable that accepts a custom render function as a prop.
|
|
9
|
+
* This allows functional constructs to specify custom rendering behavior
|
|
10
|
+
* without needing to subclass Renderable.
|
|
11
|
+
*/
|
|
12
|
+
export declare class VRenderable extends Renderable {
|
|
13
|
+
private options;
|
|
14
|
+
constructor(ctx: RenderContext, options: VRenderableOptions);
|
|
15
|
+
protected renderSelf(buffer: OptimizedBuffer, deltaTime: number): void;
|
|
16
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
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>;
|
|
5
|
+
export declare function Text(props?: TextOptions & {
|
|
6
|
+
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>;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Renderable, type RenderableOptions } from "../../Renderable";
|
|
2
|
+
import type { RenderContext } from "../../types";
|
|
3
|
+
export type VChild = VNode | Renderable | VChild[] | null | undefined | false;
|
|
4
|
+
export interface PendingCall {
|
|
5
|
+
method: string;
|
|
6
|
+
args: any[];
|
|
7
|
+
isProperty?: boolean;
|
|
8
|
+
}
|
|
9
|
+
declare const BrandedVNode: unique symbol;
|
|
10
|
+
export interface VNode<P = any, C = VChild[]> {
|
|
11
|
+
[BrandedVNode]: true;
|
|
12
|
+
type: Construct<P>;
|
|
13
|
+
props?: P;
|
|
14
|
+
children?: C;
|
|
15
|
+
__delegateMap?: Record<string, string>;
|
|
16
|
+
__pendingCalls?: PendingCall[];
|
|
17
|
+
}
|
|
18
|
+
export type ProxiedVNode<TCtor extends RenderableConstructor<any>> = VNode<TCtor extends RenderableConstructor<infer P> ? P : any> & {
|
|
19
|
+
[K in keyof InstanceType<TCtor>]: InstanceType<TCtor>[K] extends (...args: infer Args) => any ? (...args: Args) => ProxiedVNode<TCtor> : InstanceType<TCtor>[K];
|
|
20
|
+
};
|
|
21
|
+
export interface RenderableConstructor<P extends RenderableOptions<any> = RenderableOptions<any>> {
|
|
22
|
+
new (ctx: RenderContext, options: P): Renderable;
|
|
23
|
+
}
|
|
24
|
+
export type FunctionalConstruct<P = any> = (props: P, children?: VChild[]) => VNode;
|
|
25
|
+
export type Construct<P = any> = RenderableConstructor<P extends RenderableOptions<any> ? P : never> | FunctionalConstruct<P>;
|
|
26
|
+
export declare function h<TCtor extends RenderableConstructor<any>>(type: TCtor, props?: TCtor extends RenderableConstructor<infer P> ? P : never, ...children: VChild[]): ProxiedVNode<TCtor>;
|
|
27
|
+
export declare function h<P>(type: FunctionalConstruct<P>, props?: P, ...children: VChild[]): VNode<P>;
|
|
28
|
+
export declare function h<P>(type: Construct<P>, props?: P, ...children: VChild[]): VNode<P> | ProxiedVNode<any>;
|
|
29
|
+
export declare function isVNode(node: any): node is VNode;
|
|
30
|
+
export declare function maybeMakeRenderable(ctx: RenderContext, node: Renderable | VNode<any, any[]>): Renderable | null;
|
|
31
|
+
export declare function wrapWithDelegates<T extends InstanceType<RenderableConstructor>>(instance: T, delegateMap: Record<string, string> | undefined): T;
|
|
32
|
+
export type InstantiateFn<NodeType extends VNode | Renderable> = Renderable & {
|
|
33
|
+
__node?: NodeType;
|
|
34
|
+
};
|
|
35
|
+
export declare function instantiate<NodeType extends VNode | Renderable>(ctx: RenderContext, node: NodeType): InstantiateFn<NodeType>;
|
|
36
|
+
export type DelegateMap<T> = Partial<Record<keyof T, string>>;
|
|
37
|
+
export type ValidateShape<Given, AllowedKeys> = {
|
|
38
|
+
[K in keyof Given]: K extends keyof AllowedKeys ? NonNullable<Given[K]> : never;
|
|
39
|
+
};
|
|
40
|
+
type InferNode<T> = T extends InstantiateFn<infer U> ? U : never;
|
|
41
|
+
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;
|
|
42
|
+
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>;
|
|
43
|
+
export declare function delegate<ConstructorType extends RenderableConstructor<any>, const Mapping extends DelegateMap<InstanceType<ConstructorType>>>(mapping: ValidateShape<Mapping, string>, vnode: VNode & {
|
|
44
|
+
type: ConstructorType;
|
|
45
|
+
}): VNode;
|
|
46
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export * from "./Box";
|
|
2
|
+
export * from "./FrameBuffer";
|
|
3
|
+
export * from "./Text";
|
|
4
|
+
export * from "./ASCIIFont";
|
|
5
|
+
export * from "./Input";
|
|
6
|
+
export * from "./Select";
|
|
7
|
+
export * from "./TabSelect";
|
|
8
|
+
export * from "./ScrollBox";
|
|
9
|
+
export * from "./ScrollBar";
|
|
10
|
+
export * from "./composition/constructs";
|
|
11
|
+
export * from "./composition/vnode";
|
|
12
|
+
export * from "./composition/VRenderable";
|
package/renderer.d.ts
ADDED
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import { Renderable, RootRenderable } from "./Renderable";
|
|
2
|
+
import { type CursorStyle, DebugOverlayCorner, type RenderContext, type WidthMethod } from "./types";
|
|
3
|
+
import { RGBA, type ColorInput } from "./lib/RGBA";
|
|
4
|
+
import type { Pointer } from "bun:ffi";
|
|
5
|
+
import { OptimizedBuffer } from "./buffer";
|
|
6
|
+
import { type RenderLib } from "./zig";
|
|
7
|
+
import { TerminalConsole, type ConsoleOptions } from "./console";
|
|
8
|
+
import { type MouseEventType, type RawMouseEvent, type ScrollInfo } from "./lib/parse.mouse";
|
|
9
|
+
import { Selection } from "./lib/selection";
|
|
10
|
+
import { EventEmitter } from "events";
|
|
11
|
+
export interface CliRendererConfig {
|
|
12
|
+
stdin?: NodeJS.ReadStream;
|
|
13
|
+
stdout?: NodeJS.WriteStream;
|
|
14
|
+
exitOnCtrlC?: boolean;
|
|
15
|
+
debounceDelay?: number;
|
|
16
|
+
targetFps?: number;
|
|
17
|
+
memorySnapshotInterval?: number;
|
|
18
|
+
useThread?: boolean;
|
|
19
|
+
gatherStats?: boolean;
|
|
20
|
+
maxStatSamples?: number;
|
|
21
|
+
consoleOptions?: ConsoleOptions;
|
|
22
|
+
postProcessFns?: ((buffer: OptimizedBuffer, deltaTime: number) => void)[];
|
|
23
|
+
enableMouseMovement?: boolean;
|
|
24
|
+
useMouse?: boolean;
|
|
25
|
+
useAlternateScreen?: boolean;
|
|
26
|
+
useConsole?: boolean;
|
|
27
|
+
experimental_splitHeight?: number;
|
|
28
|
+
}
|
|
29
|
+
export type PixelResolution = {
|
|
30
|
+
width: number;
|
|
31
|
+
height: number;
|
|
32
|
+
};
|
|
33
|
+
export declare class MouseEvent {
|
|
34
|
+
readonly type: MouseEventType;
|
|
35
|
+
readonly button: number;
|
|
36
|
+
readonly x: number;
|
|
37
|
+
readonly y: number;
|
|
38
|
+
readonly source?: Renderable;
|
|
39
|
+
readonly modifiers: {
|
|
40
|
+
shift: boolean;
|
|
41
|
+
alt: boolean;
|
|
42
|
+
ctrl: boolean;
|
|
43
|
+
};
|
|
44
|
+
readonly scroll?: ScrollInfo;
|
|
45
|
+
readonly target: Renderable | null;
|
|
46
|
+
readonly isSelecting?: boolean;
|
|
47
|
+
private _propagationStopped;
|
|
48
|
+
private _defaultPrevented;
|
|
49
|
+
get propagationStopped(): boolean;
|
|
50
|
+
get defaultPrevented(): boolean;
|
|
51
|
+
constructor(target: Renderable | null, attributes: RawMouseEvent & {
|
|
52
|
+
source?: Renderable;
|
|
53
|
+
isSelecting?: boolean;
|
|
54
|
+
});
|
|
55
|
+
stopPropagation(): void;
|
|
56
|
+
preventDefault(): void;
|
|
57
|
+
}
|
|
58
|
+
export declare enum MouseButton {
|
|
59
|
+
LEFT = 0,
|
|
60
|
+
MIDDLE = 1,
|
|
61
|
+
RIGHT = 2,
|
|
62
|
+
WHEEL_UP = 4,
|
|
63
|
+
WHEEL_DOWN = 5
|
|
64
|
+
}
|
|
65
|
+
export declare function createCliRenderer(config?: CliRendererConfig): Promise<CliRenderer>;
|
|
66
|
+
export declare enum CliRenderEvents {
|
|
67
|
+
DEBUG_OVERLAY_TOGGLE = "debugOverlay:toggle"
|
|
68
|
+
}
|
|
69
|
+
export declare class CliRenderer extends EventEmitter implements RenderContext {
|
|
70
|
+
private static animationFrameId;
|
|
71
|
+
private lib;
|
|
72
|
+
rendererPtr: Pointer;
|
|
73
|
+
private stdin;
|
|
74
|
+
private stdout;
|
|
75
|
+
private exitOnCtrlC;
|
|
76
|
+
private isDestroyed;
|
|
77
|
+
nextRenderBuffer: OptimizedBuffer;
|
|
78
|
+
currentRenderBuffer: OptimizedBuffer;
|
|
79
|
+
private _isRunning;
|
|
80
|
+
private targetFps;
|
|
81
|
+
private memorySnapshotInterval;
|
|
82
|
+
private memorySnapshotTimer;
|
|
83
|
+
private lastMemorySnapshot;
|
|
84
|
+
readonly root: RootRenderable;
|
|
85
|
+
width: number;
|
|
86
|
+
height: number;
|
|
87
|
+
private _useThread;
|
|
88
|
+
private gatherStats;
|
|
89
|
+
private frameTimes;
|
|
90
|
+
private maxStatSamples;
|
|
91
|
+
private postProcessFns;
|
|
92
|
+
private backgroundColor;
|
|
93
|
+
private waitingForPixelResolution;
|
|
94
|
+
private rendering;
|
|
95
|
+
private renderingNative;
|
|
96
|
+
private renderTimeout;
|
|
97
|
+
private lastTime;
|
|
98
|
+
private frameCount;
|
|
99
|
+
private lastFpsTime;
|
|
100
|
+
private currentFps;
|
|
101
|
+
private targetFrameTime;
|
|
102
|
+
private immediateRerenderRequested;
|
|
103
|
+
private updateScheduled;
|
|
104
|
+
private liveRequestCounter;
|
|
105
|
+
private controlState;
|
|
106
|
+
private frameCallbacks;
|
|
107
|
+
private renderStats;
|
|
108
|
+
debugOverlay: {
|
|
109
|
+
enabled: boolean;
|
|
110
|
+
corner: DebugOverlayCorner;
|
|
111
|
+
};
|
|
112
|
+
private _console;
|
|
113
|
+
private _resolution;
|
|
114
|
+
private animationRequest;
|
|
115
|
+
private resizeTimeoutId;
|
|
116
|
+
private resizeDebounceDelay;
|
|
117
|
+
private enableMouseMovement;
|
|
118
|
+
private _useMouse;
|
|
119
|
+
private _useAlternateScreen;
|
|
120
|
+
private capturedRenderable?;
|
|
121
|
+
private lastOverRenderableNum;
|
|
122
|
+
private lastOverRenderable?;
|
|
123
|
+
private currentSelection;
|
|
124
|
+
private selectionContainers;
|
|
125
|
+
private _splitHeight;
|
|
126
|
+
private renderOffset;
|
|
127
|
+
private _terminalWidth;
|
|
128
|
+
private _terminalHeight;
|
|
129
|
+
private _terminalIsSetup;
|
|
130
|
+
private realStdoutWrite;
|
|
131
|
+
private captureCallback;
|
|
132
|
+
private _useConsole;
|
|
133
|
+
private mouseParser;
|
|
134
|
+
private sigwinchHandler;
|
|
135
|
+
private _capabilities;
|
|
136
|
+
private _latestPointer;
|
|
137
|
+
constructor(lib: RenderLib, rendererPtr: Pointer, stdin: NodeJS.ReadStream, stdout: NodeJS.WriteStream, width: number, height: number, config?: CliRendererConfig);
|
|
138
|
+
addToHitGrid(x: number, y: number, width: number, height: number, id: number): void;
|
|
139
|
+
get widthMethod(): WidthMethod;
|
|
140
|
+
private writeOut;
|
|
141
|
+
requestRender(): void;
|
|
142
|
+
get useConsole(): boolean;
|
|
143
|
+
set useConsole(value: boolean);
|
|
144
|
+
get isRunning(): boolean;
|
|
145
|
+
get resolution(): PixelResolution | null;
|
|
146
|
+
get console(): TerminalConsole;
|
|
147
|
+
get terminalWidth(): number;
|
|
148
|
+
get terminalHeight(): number;
|
|
149
|
+
get useThread(): boolean;
|
|
150
|
+
get useMouse(): boolean;
|
|
151
|
+
set useMouse(useMouse: boolean);
|
|
152
|
+
get experimental_splitHeight(): number;
|
|
153
|
+
get liveRequestCount(): number;
|
|
154
|
+
get currentControlState(): string;
|
|
155
|
+
get capabilities(): any | null;
|
|
156
|
+
set experimental_splitHeight(splitHeight: number);
|
|
157
|
+
private interceptStdoutWrite;
|
|
158
|
+
private disableStdoutInterception;
|
|
159
|
+
private flushStdoutCache;
|
|
160
|
+
private enableMouse;
|
|
161
|
+
private disableMouse;
|
|
162
|
+
enableKittyKeyboard(flags?: number): void;
|
|
163
|
+
disableKittyKeyboard(): void;
|
|
164
|
+
set useThread(useThread: boolean);
|
|
165
|
+
setupTerminal(): Promise<void>;
|
|
166
|
+
private handleMouseData;
|
|
167
|
+
private takeMemorySnapshot;
|
|
168
|
+
private startMemorySnapshotTimer;
|
|
169
|
+
setMemorySnapshotInterval(interval: number): void;
|
|
170
|
+
private handleResize;
|
|
171
|
+
private queryPixelResolution;
|
|
172
|
+
private processResize;
|
|
173
|
+
setBackgroundColor(color: ColorInput): void;
|
|
174
|
+
toggleDebugOverlay(): void;
|
|
175
|
+
configureDebugOverlay(options: {
|
|
176
|
+
enabled?: boolean;
|
|
177
|
+
corner?: DebugOverlayCorner;
|
|
178
|
+
}): void;
|
|
179
|
+
clearTerminal(): void;
|
|
180
|
+
setTerminalTitle(title: string): void;
|
|
181
|
+
dumpHitGrid(): void;
|
|
182
|
+
dumpBuffers(timestamp?: number): void;
|
|
183
|
+
dumpStdoutBuffer(timestamp?: number): void;
|
|
184
|
+
static setCursorPosition(renderer: CliRenderer, x: number, y: number, visible?: boolean): void;
|
|
185
|
+
static setCursorStyle(renderer: CliRenderer, style: CursorStyle, blinking?: boolean, color?: RGBA): void;
|
|
186
|
+
static setCursorColor(renderer: CliRenderer, color: RGBA): void;
|
|
187
|
+
setCursorPosition(x: number, y: number, visible?: boolean): void;
|
|
188
|
+
setCursorStyle(style: CursorStyle, blinking?: boolean, color?: RGBA): void;
|
|
189
|
+
setCursorColor(color: RGBA): void;
|
|
190
|
+
addPostProcessFn(processFn: (buffer: OptimizedBuffer, deltaTime: number) => void): void;
|
|
191
|
+
removePostProcessFn(processFn: (buffer: OptimizedBuffer, deltaTime: number) => void): void;
|
|
192
|
+
clearPostProcessFns(): void;
|
|
193
|
+
setFrameCallback(callback: (deltaTime: number) => Promise<void>): void;
|
|
194
|
+
removeFrameCallback(callback: (deltaTime: number) => Promise<void>): void;
|
|
195
|
+
clearFrameCallbacks(): void;
|
|
196
|
+
requestLive(): void;
|
|
197
|
+
dropLive(): void;
|
|
198
|
+
start(): void;
|
|
199
|
+
auto(): void;
|
|
200
|
+
private internalStart;
|
|
201
|
+
pause(): void;
|
|
202
|
+
private internalPause;
|
|
203
|
+
stop(): void;
|
|
204
|
+
private internalStop;
|
|
205
|
+
destroy(): void;
|
|
206
|
+
private startRenderLoop;
|
|
207
|
+
private loop;
|
|
208
|
+
intermediateRender(): void;
|
|
209
|
+
private renderNative;
|
|
210
|
+
private collectStatSample;
|
|
211
|
+
getStats(): {
|
|
212
|
+
fps: number;
|
|
213
|
+
frameCount: number;
|
|
214
|
+
frameTimes: number[];
|
|
215
|
+
averageFrameTime: number;
|
|
216
|
+
minFrameTime: number;
|
|
217
|
+
maxFrameTime: number;
|
|
218
|
+
};
|
|
219
|
+
resetStats(): void;
|
|
220
|
+
setGatherStats(enabled: boolean): void;
|
|
221
|
+
getSelection(): Selection | null;
|
|
222
|
+
get hasSelection(): boolean;
|
|
223
|
+
getSelectionContainer(): Renderable | null;
|
|
224
|
+
clearSelection(): void;
|
|
225
|
+
private startSelection;
|
|
226
|
+
private updateSelection;
|
|
227
|
+
requestSelectionUpdate(): void;
|
|
228
|
+
private isWithinContainer;
|
|
229
|
+
private finishSelection;
|
|
230
|
+
private notifySelectablesOfSelectionChange;
|
|
231
|
+
private walkSelectableRenderables;
|
|
232
|
+
}
|
package/singleton.d.ts
ADDED
package/text-buffer.d.ts
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { StyledText } from "./lib/styled-text";
|
|
2
|
+
import { RGBA } from "./lib/RGBA";
|
|
3
|
+
import { type RenderLib } from "./zig";
|
|
4
|
+
import { type Pointer } from "bun:ffi";
|
|
5
|
+
import { type WidthMethod } from "./types";
|
|
6
|
+
export interface TextChunk {
|
|
7
|
+
__isChunk: true;
|
|
8
|
+
text: Uint8Array;
|
|
9
|
+
plainText: string;
|
|
10
|
+
fg?: RGBA;
|
|
11
|
+
bg?: RGBA;
|
|
12
|
+
attributes?: number;
|
|
13
|
+
}
|
|
14
|
+
export declare class TextBuffer {
|
|
15
|
+
private lib;
|
|
16
|
+
private bufferPtr;
|
|
17
|
+
private _length;
|
|
18
|
+
private _capacity;
|
|
19
|
+
private _lineInfo?;
|
|
20
|
+
constructor(lib: RenderLib, ptr: Pointer, capacity: number);
|
|
21
|
+
static create(capacity: number | undefined, widthMethod: WidthMethod): TextBuffer;
|
|
22
|
+
setStyledText(text: StyledText): void;
|
|
23
|
+
setDefaultFg(fg: RGBA | null): void;
|
|
24
|
+
setDefaultBg(bg: RGBA | null): void;
|
|
25
|
+
setDefaultAttributes(attributes: number | null): void;
|
|
26
|
+
resetDefaults(): void;
|
|
27
|
+
get length(): number;
|
|
28
|
+
get capacity(): number;
|
|
29
|
+
get ptr(): Pointer;
|
|
30
|
+
getSelectedText(): string;
|
|
31
|
+
getPlainText(): string;
|
|
32
|
+
get lineInfo(): {
|
|
33
|
+
lineStarts: number[];
|
|
34
|
+
lineWidths: number[];
|
|
35
|
+
};
|
|
36
|
+
setSelection(start: number, end: number, bgColor?: RGBA, fgColor?: RGBA): void;
|
|
37
|
+
resetSelection(): void;
|
|
38
|
+
setLocalSelection(anchorX: number, anchorY: number, focusX: number, focusY: number, bgColor?: RGBA, fgColor?: RGBA): boolean;
|
|
39
|
+
resetLocalSelection(): void;
|
|
40
|
+
getSelection(): {
|
|
41
|
+
start: number;
|
|
42
|
+
end: number;
|
|
43
|
+
} | null;
|
|
44
|
+
hasSelection(): boolean;
|
|
45
|
+
insertChunkGroup(index: number, text: string, fg?: RGBA, bg?: RGBA, attributes?: number): void;
|
|
46
|
+
insertEncodedChunkGroup(index: number, textBytes: Uint8Array, fg?: RGBA, bg?: RGBA, attributes?: number): void;
|
|
47
|
+
removeChunkGroup(index: number): void;
|
|
48
|
+
replaceChunkGroup(index: number, text: string, fg?: RGBA, bg?: RGBA, attributes?: number): void;
|
|
49
|
+
replaceEncodedChunkGroup(index: number, textBytes: Uint8Array, fg?: RGBA, bg?: RGBA, attributes?: number): void;
|
|
50
|
+
get chunkGroupCount(): number;
|
|
51
|
+
destroy(): void;
|
|
52
|
+
}
|
package/types.d.ts
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { RGBA } from "./lib/RGBA";
|
|
2
|
+
import type { EventEmitter } from "events";
|
|
3
|
+
import type { Selection } from "./lib/selection";
|
|
4
|
+
export declare const TextAttributes: {
|
|
5
|
+
NONE: number;
|
|
6
|
+
BOLD: number;
|
|
7
|
+
DIM: number;
|
|
8
|
+
ITALIC: number;
|
|
9
|
+
UNDERLINE: number;
|
|
10
|
+
BLINK: number;
|
|
11
|
+
INVERSE: number;
|
|
12
|
+
HIDDEN: number;
|
|
13
|
+
STRIKETHROUGH: number;
|
|
14
|
+
};
|
|
15
|
+
export type CursorStyle = "block" | "line" | "underline";
|
|
16
|
+
export declare enum DebugOverlayCorner {
|
|
17
|
+
topLeft = 0,
|
|
18
|
+
topRight = 1,
|
|
19
|
+
bottomLeft = 2,
|
|
20
|
+
bottomRight = 3
|
|
21
|
+
}
|
|
22
|
+
export type WidthMethod = "wcwidth" | "unicode";
|
|
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 {
|
|
35
|
+
addToHitGrid: (x: number, y: number, width: number, height: number, id: number) => void;
|
|
36
|
+
width: number;
|
|
37
|
+
height: number;
|
|
38
|
+
requestRender: () => void;
|
|
39
|
+
setCursorPosition: (x: number, y: number, visible: boolean) => void;
|
|
40
|
+
setCursorStyle: (style: CursorStyle, blinking: boolean) => void;
|
|
41
|
+
setCursorColor: (color: RGBA) => void;
|
|
42
|
+
widthMethod: WidthMethod;
|
|
43
|
+
capabilities: any | null;
|
|
44
|
+
requestLive: () => void;
|
|
45
|
+
dropLive: () => void;
|
|
46
|
+
hasSelection: boolean;
|
|
47
|
+
getSelection: () => Selection | null;
|
|
48
|
+
requestSelectionUpdate: () => void;
|
|
49
|
+
}
|
|
50
|
+
export type Timeout = ReturnType<typeof setTimeout> | undefined;
|
|
51
|
+
export interface ViewportBounds {
|
|
52
|
+
x: number;
|
|
53
|
+
y: number;
|
|
54
|
+
width: number;
|
|
55
|
+
height: number;
|
|
56
|
+
}
|
package/utils.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare function createTextAttributes({ bold, italic, underline, dim, blink, inverse, hidden, strikethrough, }?: {
|
|
2
|
+
bold?: boolean;
|
|
3
|
+
italic?: boolean;
|
|
4
|
+
underline?: boolean;
|
|
5
|
+
dim?: boolean;
|
|
6
|
+
blink?: boolean;
|
|
7
|
+
inverse?: boolean;
|
|
8
|
+
hidden?: boolean;
|
|
9
|
+
strikethrough?: boolean;
|
|
10
|
+
}): number;
|