ng-terminal
Version:
NgTerminal is a terminal component on Angular 16 or higher.
196 lines (195 loc) • 7.45 kB
TypeScript
import { OnInit, ElementRef, EventEmitter, OnDestroy, AfterViewInit, OnChanges, Renderer2, SimpleChanges } from '@angular/core';
import { ITerminalOptions, Terminal } from '@xterm/xterm';
import { NgTerminal } from './ng-terminal';
import { Observable } from 'rxjs';
import { ResizeEvent } from 'angular-resizable-element';
import { LoggingService } from './logging.service';
import * as i0 from "@angular/core";
export declare class NgTerminalComponent implements OnInit, OnChanges, AfterViewInit, NgTerminal, OnDestroy {
private renderer;
private hostRef;
private loggingService;
private linearRender;
private xterm?;
private fitAddon?;
private dataSubject;
private keySubject;
private keyInputSubjectSubscription?;
private keyEventSubjectSubscription?;
private allLogsSubjectSubscription?;
private dataSourceSubscription?;
private resizableObservers;
private dataSource?;
private readonly paddingSize;
stylesForResizeBox: Partial<CSSStyleDeclaration>;
/**
* @deprecated use (data)='' instead.
* An emitter emits printable characters pushed from xterm's onData() when a user typed on the terminal.
*/
keyInputEmitter: EventEmitter<string>;
/**
* @deprecated use (key)='' instead.
* An emitter emits key and keybaord event pushed from xterm's onKey() when a user typed on the terminal.
*/
keyEventEmitter: EventEmitter<{
key: string;
domEvent: KeyboardEvent;
}>;
/**
* An emitter emits printable characters pushed from xterm's onData() when a user typed on the terminal.
*/
dataEmitter: EventEmitter<string>;
/**
* An emitter emits key and keybaord event pushed from xterm's onKey() when a user typed on the terminal.
*/
keyEmitter: EventEmitter<{
key: string;
domEvent: KeyboardEvent;
}>;
/**
* A datsource is an observable where NgTerminal reads charactors.
*/
set _dataSource(dataSource: Observable<string> | undefined);
/**
* Change the row count of a terminal immediately.
*/
_rowsInput?: number;
/**
* Change the column count of a terminal immediately.
*/
_colsInput?: number;
/**
* Set the minimum width to limit dragging.
*/
_minWidthInput?: number;
/**
* Set the minimum height to limit dragging.
*/
_minHeightInput?: number;
/**
* Toggle draggable.
*/
set draggable(draggable: boolean);
/**
* An wrapper of {@link ITerminalOptions} for Xterm.
*/
_xtermOptions: ITerminalOptions & {
theme?: {
border?: string;
};
};
terminalOuter: ElementRef<HTMLDivElement>;
resizeBox: ElementRef<HTMLDivElement>;
detectBox: ElementRef<HTMLDivElement>;
get draggable(): boolean;
lastDraggedPosition?: {
width: string;
height: string;
};
_draggable: boolean;
_stylesInput: any;
setMinWidth(width: number): void;
setMinHeight(height: number): void;
setDraggable(draggable: boolean): void;
setXtermOptions(options: ITerminalOptions & {
theme?: {
border?: string;
};
}): void;
setRows(rows: number): void;
setCols(cols: number): void;
setStyle(styleObject: any): void;
handleToCheckLazyContainer?: ReturnType<typeof setInterval>;
constructor(renderer: Renderer2, //Render is being used for fast rendering without markForCheck().
hostRef: ElementRef<HTMLElement>, loggingService: LoggingService);
private setup;
/**
* set dimensions
*/
private setOuterDimensions;
private applyStylesToResizeBox;
ngOnInit(): void;
/**
* It creates new terminal in #terminal.
*/
ngAfterViewInit(): void;
ngOnChanges(changes?: SimpleChanges): void;
resizeHandleStyleRule?: CSSStyleRule;
resizeHandleActiveStyleRule?: CSSStyleRule;
/**
* It serves a callback function to adjust the dimensions of the xterm-screen, xterm-view, and resize box
* after making any changes to the outer box, rows, or columns, or when the resize box is being dragged.
*
* There several factors that affect dimensions, as I mentioned earlier.
* Regardless of whether the draggable feature is on, if new row or column value is input, this value will be applied.
* - Draggable = New specified Row/Column value > Full (Default)
* @param change This argument represents a single change that occured.
* @returns
*/
private coordinateOuterAndTerminal;
/**
* apply options to the xterm terminal
* @returns
*/
private doUpdateXtermStyles;
/**
* If the resize handles are moved, the resize box adjusts to the new dimensions;
* otherwise, it defaults to a maximized size.
* @param change
*/
private doAdjustDimensionOfResizeBox;
/**
* This function uses fitAddon() to adjust the dimension of xterm-screen to character unit
* If the draggable value is true or there are no fixed values for the row or column,
* it fits the xterm terminal boxes into the resize box;
* otherwise, it resizes the xterm terminal with specified row and column values.
*/
private doAdjustSizeOfXtermScreen;
/**
* This functions sets width of the resize box, xterm-viewport and xterm-screen with specific pixel values.
*/
private doUpdateViewportAndResizeBoxWithPixcelUnit;
private printDimension;
/**
* If pushAndHandle() were used, there could be an issue
* because it can adjust the size of elements during a loop of ResizeObserver.
*/
private setupResizeObservers;
private observeXtermViewportDimension;
lastDetectedWidth: number;
private observeHostDimension;
/**
* clean all resources
*/
ngOnDestroy(): void;
write(chars: string): void;
get keyInput(): Observable<string>;
onData(): Observable<string>;
get keyEventInput(): Observable<{
key: string;
domEvent: KeyboardEvent;
}>;
onKey(): Observable<{
key: string;
domEvent: KeyboardEvent;
}>;
get underlying(): Terminal | undefined;
get isDraggableOnEdgeActivated(): boolean;
private get scrollBarWidth();
/**
* After user coordinate dimensions of terminal, it's called.
* @param left
* @param top
* @param width
* @param height
*/
onResizeEnd(left: number, top: number, width: number, height: number): void;
/**
* Before onResizeEnd is called, it valiates dimensions to change.
* @param re dimension to be submitted from resizable stuff
*/
validatorFactory(): (re: ResizeEvent) => boolean;
private findCssStyleRule;
static ɵfac: i0.ɵɵFactoryDeclaration<NgTerminalComponent, never>;
static ɵcmp: i0.ɵɵComponentDeclaration<NgTerminalComponent, "ng-terminal", never, { "_dataSource": "dataSource"; "_rowsInput": "rows"; "_colsInput": "cols"; "_minWidthInput": "minWidth"; "_minHeightInput": "minHeight"; "draggable": "draggable"; "_xtermOptions": "xtermOptions"; }, { "keyInputEmitter": "keyInput"; "keyEventEmitter": "keyEvent"; "dataEmitter": "data"; "keyEmitter": "key"; }, never, never, false, never>;
}