ascii-ui
Version:
Graphic terminal emulator for HTML canvas elements
133 lines (132 loc) • 4.11 kB
TypeScript
import { EventManager } from './EventManager';
import { FocusManager } from './FocusManager';
import { Widget, WidgetConstructor } from './Widget';
import { BidirectionalIterator, WidgetContainer } from './WidgetContainer';
export declare type AcceptedImage = HTMLImageElement | HTMLCanvasElement;
export declare type EscapeCallback = (params: EscapeCommandParams) => number;
export interface ImageOffset {
x: number;
y: number;
}
export interface ImageSize {
width: number;
height: number;
}
export interface ImageCropParams {
srcX: number;
srcY: number;
srcW: number;
srcH: number;
}
export interface EscapeCommandParams {
text: string;
index: number;
match: string;
col: number;
line: number;
terminal: Terminal;
}
export interface TileSize {
columns: number;
rows: number;
}
export interface TilePosition {
col: number;
line: number;
}
export interface CharStyle {
font?: string;
offsetX?: number;
offsetY?: number;
fg?: string;
bg?: string;
}
export interface ViewPortOptions {
top?: number;
right?: number;
bottom?: number;
left?: number;
}
export interface TerminalOptions extends CharStyle {
tileWidth?: number;
tileHeight?: number;
columns?: number;
rows?: number;
minColumns?: number;
minRows?: number;
maxColumns?: number;
maxRows?: number;
autoRender?: boolean;
autoSize?: boolean;
cursor?: boolean;
cursorFrequency?: number;
decayTime?: number;
decayInitialAlpha?: number;
commands?: {
[key: string]: EscapeCallback;
};
viewport?: ViewPortOptions;
avoidDoubleRendering?: boolean;
verbose?: boolean;
clearStyle?: TextTile;
}
export interface TextTile extends CharStyle {
char: string;
}
export interface ImageTile {
image: AcceptedImage;
dstW: number;
dstH: number;
offset?: ImageOffset;
crop?: ImageCropParams;
}
export declare class Terminal implements WidgetContainer {
static defaultOptions: TerminalOptions;
readonly focusManager: FocusManager;
readonly eventManager: EventManager;
protected readonly options: TerminalOptions;
private readonly canvas;
private readonly ctx;
private readonly buffer;
private dirtyTiles;
private readonly decayTiles;
private decayChange;
private cursorX;
private cursorY;
private cursorVisible;
private updateCursorInterval;
private escapeCharactersRegExpString;
private lastRenderTime;
private readonly attachedWidgets;
constructor(canvas: HTMLCanvasElement, options?: TerminalOptions);
setOptions(options: TerminalOptions): void;
clear(): void;
clear(col: number, line: number, width: number, height: number): void;
render(): void;
renderAll(): void;
getViewport(): ViewPortOptions;
getSize(): TileSize;
isCursorEnabled(): boolean;
getCursor(): TilePosition;
setCursor(col: number, line: number): void;
moveCursor(dx: number, dy: number): void;
getTilePosition(x: number, y: number): TilePosition;
setTextStyle(style: CharStyle): void;
getTextStyle(): CharStyle;
setText(text: string, col?: number, line?: number): void;
setImage(img: AcceptedImage, col?: number, line?: number, offset?: ImageOffset, size?: ImageSize, crop?: ImageCropParams): void;
getText(size?: number, col?: number, line?: number): string;
setTiles(tiles: TextTile | TextTile[] | ImageTile | ImageTile[], col?: number, line?: number): void;
getParent(): WidgetContainer;
attachWidget<WidgetType extends Widget>(WidgetClass: WidgetConstructor<WidgetType>, options?: any): WidgetType;
dettachWidget(widget: Widget): boolean;
getWidgetAt(column: number, line: number): Widget;
getLeafWidgetAt(column: number, line: number): Widget;
getWidgetPath(widget: Widget): Array<Widget | WidgetContainer>;
[Symbol.iterator](startWidget?: Widget | number): BidirectionalIterator<Widget>;
private iterateTiles;
private setCursorFrequency;
private info;
private addDirtyTile;
private resize;
}