ng-terminal
Version:
NgTerminal is a terminal component on Angular 16 or higher.
1 lines • 78.9 kB
Source Map (JSON)
{"version":3,"file":"ng-terminal.mjs","sources":["../../../projects/ng-terminal/src/lib/linear-render.service.ts","../../../projects/ng-terminal/src/lib/module-options.ts","../../../projects/ng-terminal/src/lib/logging.service.ts","../../../projects/ng-terminal/src/lib/global-style/global-style.component.ts","../../../projects/ng-terminal/src/lib/global-style/global-style.component.html","../../../projects/ng-terminal/src/lib/ng-terminal.component.ts","../../../projects/ng-terminal/src/lib/ng-terminal.component.html","../../../projects/ng-terminal/src/lib/ng-terminal.module.ts","../../../projects/ng-terminal/src/lib/functions-using-csi.ts","../../../projects/ng-terminal/src/public-api.ts","../../../projects/ng-terminal/src/ng-terminal.ts"],"sourcesContent":["import { Injectable, ElementRef, OnDestroy } from '@angular/core';\nimport { Subject, Observable } from 'rxjs';\n\n/**\n *\n * In the past, indivisual property changes caused very unexpected behavior on NgTerminal.\n * To solve issues related to property changes, Queue is applied.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class LinearRenderService implements OnDestroy {\n constructor(private hostRef: ElementRef) {}\n\n private handlerToCheckElementConnection?: ReturnType<typeof setInterval> =\n undefined;\n\n /**\n * This queue has items to have a influence on the view and items are handled in order.\n */\n private propertyChangeQueue: PropertyChangeSet[] = [];\n private itemsToBeHandled = new Subject<PropertyChangeSet>();\n\n get renderObservable(): Observable<PropertyChangeSet> {\n return this.itemsToBeHandled;\n }\n\n /**\n * {@link handleNextOne()} calls {@link handleImmediate()} if an element is connected.\n * Otherwise, {@link pollAndHandle()} is called.\n */\n public handleNextOne(lazy = false) {\n if (!this.hostRef.nativeElement.isConnected || lazy) {\n this.pollAndHandle(\n !this.hostRef.nativeElement.isConnected\n ? 'NOT_CONNECTED_ELEMENT'\n : 'LAZY'\n );\n } else {\n this.handleImmediate();\n }\n }\n\n /**\n * This method pushes item into {@link propertyChangeQueue}.\n * @param item\n */\n public pushAndHandle(item: PropertyChangeSet, lazy = false) {\n let changeWithDefault = {\n ...item,\n };\n this.propertyChangeQueue.push(changeWithDefault);\n this.handleNextOne(lazy);\n }\n\n /**\n * {@link pollAndHandle()} continues checking whether new item is put on a queue to call {@link handleImmediate()}.\n */\n private pollAndHandle(mode: 'NOT_CONNECTED_ELEMENT' | 'LAZY') {\n const pollFunction = () => {\n if (this.handlerToCheckElementConnection) return;\n const interval = setInterval(\n () => {\n if (this.hostRef.nativeElement.isConnected) {\n clearInterval(interval);\n this.handlerToCheckElementConnection = undefined;\n this.handleImmediate();\n }\n },\n mode === 'NOT_CONNECTED_ELEMENT' ? 500 : 30\n );\n this.handlerToCheckElementConnection = interval;\n };\n // Start polling\n pollFunction();\n }\n\n /**\n * Handle a next set of changes if it exists.\n */\n private handleImmediate = () => {\n if (!this.handlerToCheckElementConnection) {\n let list = this.propertyChangeQueue.splice(0, 1);\n if (list.length == 1) {\n this.itemsToBeHandled.next(list[0]);\n }\n }\n };\n\n ngOnDestroy(): void {\n if (this.handlerToCheckElementConnection)\n clearInterval(this.handlerToCheckElementConnection);\n }\n}\n\nexport type PropertyChangeSet =\n | { time: Date; type: 'rowChanged'}\n | { time: Date; type: 'columnChanged'}\n | {\n time: Date; type: 'dragged';\n dragged: { draggedWidth: string; draggedHeight: string };\n }\n | { time: Date; type: 'hostResized'; hostResized: { width: string; height: string } }\n | { time: Date; type: 'detectBoxResized'; detectBoxResized: { width: string } }\n | {\n time: Date; type: 'xtermViewportExceedingOuterDiv';\n xtermViewportExceedingOuterDiv: {\n width: string;\n height: string;\n outerDivWidth: string;\n outerDivHeight: string;\n };\n }\n | { time: Date; type: 'none' };\n","\nexport class ModuleOptions {\n enableLog: boolean = true;\n }","import { Injectable, Optional } from '@angular/core';\nimport { ModuleOptions } from './module-options';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LoggingService {\n private enableLog: boolean = false;\n constructor(@Optional() _options?: ModuleOptions) {\n if (_options) this.enableLog = _options.enableLog;\n }\n\n log(loggingFunc: () => void) {\n if (this.enableLog) loggingFunc();\n }\n}\n","import { Component, OnInit, ViewEncapsulation } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'global-style',\r\n templateUrl: './global-style.component.html',\r\n styleUrls: ['../../../../../node_modules/xterm/css/xterm.css'], //global styles\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class GlobalStyleComponent implements OnInit {\r\n\r\n constructor() { }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n}\r\n","","import {\n Component,\n OnInit,\n ViewChild,\n ElementRef,\n Input,\n Output,\n EventEmitter,\n OnDestroy,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n OnChanges,\n Renderer2,\n SimpleChanges,\n isDevMode,\n Optional,\n} from '@angular/core';\nimport { ITerminalOptions, Terminal } from '@xterm/xterm';\nimport { FitAddon } from '@xterm/addon-fit';\nimport { NgTerminal } from './ng-terminal';\nimport { Subject, Observable, Subscription } from 'rxjs';\nimport { ResizeEvent } from 'angular-resizable-element';\nimport {\n LinearRenderService,\n PropertyChangeSet,\n} from './linear-render.service';\nimport { LoggingService } from './logging.service';\n\n@Component({\n selector: 'ng-terminal',\n templateUrl: './ng-terminal.component.html',\n styleUrls: ['./ng-terminal.component.css'],\n providers: [LinearRenderService],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgTerminalComponent\n implements OnInit, OnChanges, AfterViewInit, NgTerminal, OnDestroy\n{\n private linearRender: LinearRenderService;\n private xterm?: Terminal;\n private fitAddon?: FitAddon;\n private dataSubject: Subject<string> = new Subject<string>();\n private keySubject = new Subject<{ key: string; domEvent: KeyboardEvent }>();\n\n private keyInputSubjectSubscription?: Subscription = undefined;\n private keyEventSubjectSubscription?: Subscription = undefined;\n private allLogsSubjectSubscription?: Subscription = undefined;\n private dataSourceSubscription?: Subscription = undefined;\n private resizableObservers: ResizeObserver[] = [];\n private dataSource?: Observable<string> = undefined;\n private readonly paddingSize = 5;\n stylesForResizeBox: Partial<CSSStyleDeclaration> = { display: 'block' };\n\n /**\n * @deprecated use (data)='' instead.\n * An emitter emits printable characters pushed from xterm's onData() when a user typed on the terminal.\n */\n @Output('keyInput')\n keyInputEmitter = new EventEmitter<string>();\n\n /**\n * @deprecated use (key)='' instead.\n * An emitter emits key and keybaord event pushed from xterm's onKey() when a user typed on the terminal.\n */\n @Output('keyEvent')\n keyEventEmitter = new EventEmitter<{\n key: string;\n domEvent: KeyboardEvent;\n }>();\n\n /**\n * An emitter emits printable characters pushed from xterm's onData() when a user typed on the terminal.\n */\n @Output('data')\n dataEmitter = this.keyInputEmitter;\n\n /**\n * An emitter emits key and keybaord event pushed from xterm's onKey() when a user typed on the terminal.\n */\n @Output('key')\n keyEmitter = this.keyEventEmitter;\n\n /**\n * A datsource is an observable where NgTerminal reads charactors.\n */\n @Input('dataSource')\n set _dataSource(dataSource: Observable<string> | undefined) {\n if (!dataSource) return;\n if (this.dataSourceSubscription != undefined)\n this.dataSourceSubscription.unsubscribe();\n this.dataSource = dataSource;\n this.dataSourceSubscription = this.dataSource.subscribe((data) =>\n this.write(data)\n );\n }\n\n /**\n * Change the row count of a terminal immediately.\n */\n @Input('rows')\n _rowsInput?: number;\n\n /**\n * Change the column count of a terminal immediately.\n */\n @Input('cols')\n _colsInput?: number;\n\n /**\n * Set the minimum width to limit dragging.\n */\n @Input('minWidth')\n _minWidthInput?: number;\n\n /**\n * Set the minimum height to limit dragging.\n */\n @Input('minHeight')\n _minHeightInput?: number;\n\n /**\n * Toggle draggable.\n */\n @Input('draggable')\n set draggable(draggable: boolean) {\n this._draggable = draggable;\n }\n\n /**\n * An wrapper of {@link ITerminalOptions} for Xterm.\n */\n @Input('xtermOptions')\n _xtermOptions: ITerminalOptions & { theme?: { border?: string } } = {};\n\n @ViewChild('terminal', { static: true })\n terminalOuter!: ElementRef<HTMLDivElement>;\n\n @ViewChild('resizeBox', { static: true })\n resizeBox!: ElementRef<HTMLDivElement>;\n\n @ViewChild('detectBox', { static: true })\n detectBox!: ElementRef<HTMLDivElement>;\n\n get draggable() {\n return this._draggable;\n }\n\n lastDraggedPosition?: { width: string; height: string } = undefined;\n\n _draggable: boolean = false;\n\n _stylesInput: any = {};\n\n setMinWidth(width: number): void {\n this._minWidthInput = width;\n }\n\n setMinHeight(height: number): void {\n this._minHeightInput = height;\n }\n\n setDraggable(draggable: boolean): void {\n this._draggable = draggable;\n this.lastDraggedPosition = undefined; // Reset position values\n }\n\n setXtermOptions(\n options: ITerminalOptions & { theme?: { border?: string } }\n ): void {\n this._xtermOptions = options;\n this.linearRender.pushAndHandle({ time: new Date(), type: 'none' });\n }\n\n setRows(rows: number): void {\n if (this._rowsInput != rows) {\n this._rowsInput = rows;\n this.linearRender.pushAndHandle({\n time: new Date(),\n type: 'rowChanged',\n });\n }\n }\n\n setCols(cols: number): void {\n if (this._colsInput != cols) {\n this._colsInput = cols;\n this.linearRender.pushAndHandle({\n time: new Date(),\n type: 'columnChanged',\n });\n }\n }\n\n setStyle(styleObject: any): void {\n if (\n JSON.stringify(this._stylesInput ?? {}) !=\n JSON.stringify(styleObject ?? {})\n ) {\n this._stylesInput = styleObject;\n this.linearRender.pushAndHandle({\n time: new Date(),\n type: 'none',\n });\n }\n }\n\n handleToCheckLazyContainer?: ReturnType<typeof setInterval> = undefined;\n\n constructor(\n private renderer: Renderer2, //Render is being used for fast rendering without markForCheck().\n private hostRef: ElementRef<HTMLElement>,\n private loggingService: LoggingService,\n ) {\n this.linearRender = new LinearRenderService(hostRef);\n }\n\n private setup() {\n if (this.xterm) {\n this.xterm.onData((input) => {\n this.dataSubject.next(input);\n });\n this.xterm.onKey((e) => {\n this.keySubject.next(e);\n });\n }\n this.keyInputSubjectSubscription = this.dataSubject.subscribe((data) => {\n this.keyInputEmitter.emit(data);\n });\n this.keyEventSubjectSubscription = this.keySubject.subscribe((e) => {\n this.keyEventEmitter.emit(e);\n });\n this.setupResizeObservers();\n // if (ob3) this.resizableObservers.push(ob3);\n this.allLogsSubjectSubscription =\n this.linearRender.renderObservable.subscribe((change) => {\n if (change) this.coordinateOuterAndTerminal(change);\n else this.coordinateOuterAndTerminal(change);\n this.linearRender.handleNextOne();\n });\n this.linearRender.handleNextOne();\n }\n\n /**\n * set dimensions\n */\n private setOuterDimensions(\n left: number,\n top: number,\n width: number,\n height: number\n ) {\n this.linearRender.pushAndHandle({\n time: new Date(),\n type: 'dragged',\n dragged: { draggedWidth: `${width}px`, draggedHeight: `${height}px` },\n });\n }\n\n private applyStylesToResizeBox() {\n Object.keys(this.stylesForResizeBox)\n .map((key) => {\n return { key, value: (this.stylesForResizeBox as StringToString)[key] };\n })\n .forEach(({ key, value }) => {\n if (this.resizeBox) {\n if (value)\n this.renderer.setStyle(this.resizeBox.nativeElement, key, value);\n else {\n this.renderer.removeStyle(this.resizeBox.nativeElement, key);\n }\n }\n });\n this.stylesForResizeBox = this.stylesForResizeBox; //invalidate\n }\n\n ngOnInit() {}\n\n /**\n * It creates new terminal in #terminal.\n */\n ngAfterViewInit() {\n this.fitAddon = new FitAddon();\n this.xterm = new Terminal({\n allowProposedApi: true,\n });\n if (!(this.terminalOuter.nativeElement as HTMLElement).isConnected) {\n this.handleToCheckLazyContainer = setInterval(() => {\n if ((this.terminalOuter.nativeElement as HTMLElement).isConnected) {\n try {\n this.loggingService.log(() => console.debug(\"The container's been connected.\"));\n this.xterm!.open(this.terminalOuter.nativeElement);\n this.xterm!.loadAddon(this.fitAddon!!);\n this.setup();\n this.linearRender.pushAndHandle({ time: new Date(), type: 'none' });\n } finally {\n if (this.handleToCheckLazyContainer)\n clearInterval(this.handleToCheckLazyContainer);\n }\n }\n }, 500);\n } else {\n this.xterm.open(this.terminalOuter.nativeElement);\n this.xterm.loadAddon(this.fitAddon);\n this.setup();\n this.linearRender.pushAndHandle({ time: new Date(), type: 'none' });\n }\n }\n\n ngOnChanges(changes?: SimpleChanges) {\n this.loggingService.log(() => console.group('onChanges'));\n this.loggingService.log(() => console.debug('prop: ', changes));\n this.loggingService.log(() => console.groupEnd());\n if (changes?.['_rowsInput']) {\n if (\n changes?.['_rowsInput']?.previousValue !=\n changes?.['_rowsInput']?.currentValue\n ) {\n this.linearRender.pushAndHandle({\n time: new Date(),\n type: 'rowChanged',\n });\n }\n }\n if (changes?.['_colsInput']) {\n if (\n changes?.['_colsInput']?.previousValue !=\n changes?.['_colsInput']?.currentValue\n ) {\n this.linearRender.pushAndHandle({\n time: new Date(),\n type: 'columnChanged',\n });\n }\n }\n if (changes?.['draggable'])\n this.linearRender.pushAndHandle({ time: new Date(), type: 'none' });\n }\n\n resizeHandleStyleRule?: CSSStyleRule;\n resizeHandleActiveStyleRule?: CSSStyleRule;\n\n /**\n * It serves a callback function to adjust the dimensions of the xterm-screen, xterm-view, and resize box\n * after making any changes to the outer box, rows, or columns, or when the resize box is being dragged.\n *\n * There several factors that affect dimensions, as I mentioned earlier.\n * Regardless of whether the draggable feature is on, if new row or column value is input, this value will be applied.\n * - Draggable = New specified Row/Column value > Full (Default)\n * @param change This argument represents a single change that occured.\n * @returns\n */\n private coordinateOuterAndTerminal(change: PropertyChangeSet) {\n this.loggingService.log(() => console.debug(`changeList: ${JSON.stringify(change)}`))\n if (!this.xterm) return;\n const isHostElementVisible =\n this.hostRef.nativeElement?.offsetParent !== null;\n if (!isHostElementVisible) {\n // Do nothing if the host element is invisible.\n this.loggingService.log(() => console.debug('`display` of host element was set to `none`'));\n return;\n }\n this.doUpdateXtermStyles();\n this.doAdjustDimensionOfResizeBox(change);\n this.doAdjustSizeOfXtermScreen(change);\n this.doUpdateViewportAndResizeBoxWithPixcelUnit();\n }\n\n /**\n * apply options to the xterm terminal\n * @returns\n */\n private doUpdateXtermStyles() {\n if (!this.xterm) return;\n this.xterm.options = { ...this._xtermOptions };\n // apply the theme to the background of the handle\n if (this._xtermOptions.theme?.background) {\n if (!this.resizeHandleStyleRule)\n this.resizeHandleStyleRule = this.findCssStyleRule('.resize-handle[');\n if (this.resizeHandleStyleRule)\n this.resizeHandleStyleRule.style.backgroundColor =\n this._xtermOptions.theme.background;\n }\n if (this._xtermOptions.theme?.border) {\n if (!this.resizeHandleActiveStyleRule)\n this.resizeHandleActiveStyleRule =\n this.findCssStyleRule('.handle-active');\n if (this.resizeHandleActiveStyleRule)\n this.resizeHandleActiveStyleRule.style.backgroundColor =\n this._xtermOptions.theme.border;\n }\n }\n\n /**\n * If the resize handles are moved, the resize box adjusts to the new dimensions;\n * otherwise, it defaults to a maximized size.\n * @param change\n */\n private doAdjustDimensionOfResizeBox(change: PropertyChangeSet) {\n this.stylesForResizeBox = {\n ...this.stylesForResizeBox,\n ...this._stylesInput,\n width: this.stylesForResizeBox.width,\n height: this.stylesForResizeBox.height,\n };\n\n // Reset styles of the resize element\n if (change.type === 'dragged') {\n const minWidth = this._minWidthInput ?? 24;\n const minHeight = this._minHeightInput ?? 24;\n const width =\n parseInt(change.dragged.draggedWidth) > minWidth\n ? change.dragged.draggedWidth\n : `${minWidth}px`;\n const height =\n parseInt(change.dragged.draggedHeight) > minHeight\n ? change.dragged.draggedHeight\n : `${minHeight}px`;\n this.stylesForResizeBox.width = width;\n this.stylesForResizeBox.height = height;\n this.lastDraggedPosition = {\n width,\n height,\n };\n this.applyStylesToResizeBox();\n } else if (!(this.draggable && this.lastDraggedPosition)) {\n // When `_colsInput` and `draggable` is not enabled,\n // it fits the size to the host element.\n const currentHostWidth = getComputedStyle(\n this.hostRef.nativeElement\n ).width;\n const detectBoxWidth = getComputedStyle(\n this.detectBox.nativeElement\n ).width;\n let smallParent = false;\n if (parseFloat(detectBoxWidth) < parseFloat(currentHostWidth)) {\n // the width of the parent is smaller than that of resize-box element\n smallParent = true;\n }\n if (smallParent) {\n // It's been written to solve https://github.com/qwefgh90/ng-terminal/issues/79\n // If the width of the flex-box (that is the parent of the host element) is smaller than that of child element, the host element is adjusted to the width of child element\n // host element: 1000px, resize-box(child): 985px -> host element: 985px, resize-box(child): 970px -> ... -> stop\n\n // This code check if the parent element (that is the parent of `<ng-terminal>), is smaller than `.resize-box`\n // and ensures that the width of the `<ng-terminal>` adjusts to match that of the parent element rather than the child elements, in the subsequent events.\n this.stylesForResizeBox.width = `${parseFloat(detectBoxWidth)}px`;\n this.applyStylesToResizeBox();\n } else {\n // but if the dimension of host element is resized, update width and height\n // If `_rowsInput` is specified, NgTerminal keep the current height; otherwise, the height is set to 100%\n if (!this._rowsInput) this.stylesForResizeBox.height = '100%';\n if (!this._colsInput) this.stylesForResizeBox.width = '100%';\n this.applyStylesToResizeBox();\n }\n }\n }\n\n /**\n * This function uses fitAddon() to adjust the dimension of xterm-screen to character unit\n * If the draggable value is true or there are no fixed values for the row or column,\n * it fits the xterm terminal boxes into the resize box;\n * otherwise, it resizes the xterm terminal with specified row and column values.\n */\n private doAdjustSizeOfXtermScreen(change: PropertyChangeSet) {\n if (!this.xterm) return;\n if (\n (change.type == 'rowChanged' && this._rowsInput) ||\n (change.type == 'columnChanged' && this._colsInput)\n ) {\n this.xterm.resize(\n this._colsInput ?? this.xterm.cols,\n this._rowsInput ?? this.xterm.rows\n );\n }\n else {\n if (this.xterm.element) {\n // The fitAddon.fit() operation doesn't recognize the padding values of terminalOuter.\n // It seems to be using the padding values of xterm element instead.\n // Therefore, we establish a brief time frame to adjust the padding values before and after executing fitAddon.fit().\n // If this line is removed, when dragging resize-box vertically, the width is decreased.\n this.xterm.element.style.paddingLeft = `${this.paddingSize}px`;\n this.printDimension('Before fitAddon.fit() of Xterm');\n this.fitAddon?.fit();\n this.printDimension('After fitAddon.fit() of Xterm');\n this.xterm.element.style.paddingLeft = `${0}px`;\n }\n }\n }\n\n /**\n * This functions sets width of the resize box, xterm-viewport and xterm-screen with specific pixel values.\n */\n private doUpdateViewportAndResizeBoxWithPixcelUnit() {\n if (this.xterm?.element) {\n let xtermScreen =\n this.xterm.element.getElementsByClassName('xterm-screen')[0];\n let xtermViewport =\n this.xterm.element.getElementsByClassName('xterm-viewport')[0];\n const screenWidth = xtermScreen.clientWidth;\n const screenHeight = xtermScreen.clientHeight;\n const core = (this.underlying as any)._core;\n const scrollBarWidth: number = core.viewport.scrollBarWidth as number;\n const hostWidth = parseInt(\n getComputedStyle(this.hostRef.nativeElement).width\n );\n\n // It fixes a bug where the viewport's width isn't updated by fitAddon.fit()\n this.renderer.setStyle(\n xtermViewport,\n 'width',\n `${screenWidth + scrollBarWidth}px`\n );\n\n // It adjusts the dimension of the resize box to the xterm-screen element.\n const calulatedBoxWidth =\n screenWidth + scrollBarWidth + this.paddingSize * 2;\n const componentElement = this.hostRef.nativeElement as HTMLElement;\n const componentWith = parseInt(getComputedStyle(componentElement).width);\n const restrictedWidth =\n calulatedBoxWidth > componentWith ? componentWith : calulatedBoxWidth;\n\n this.stylesForResizeBox = {\n ...this.stylesForResizeBox,\n width: `${restrictedWidth}px`,\n height: `${screenHeight + this.paddingSize * 2}px`,\n };\n this.applyStylesToResizeBox();\n this.printDimension(\n 'After update the dimensions for all boxes with pixel values'\n );\n }\n }\n\n private printDimension(title: string) {\n if (this.xterm?.element) {\n let resizeBox = this.resizeBox.nativeElement as HTMLDivElement;\n let xtermScreen =\n this.xterm.element.getElementsByClassName('xterm-screen')[0];\n let xtermViewport =\n this.xterm.element.getElementsByClassName('xterm-viewport')[0];\n const screenWidth = xtermScreen.clientWidth;\n const screenHeight = xtermScreen.clientHeight;\n\n this.loggingService.log(() => console.group(`${title}`));\n this.loggingService.log(() => console.debug(`width(resizeBox): ${getComputedStyle(resizeBox).width},\nwidth(viewport): ${getComputedStyle(xtermViewport).width},\nwidth(screen): ${screenWidth}\nscrollBarWidth: ${this.scrollBarWidth}`));\n this.loggingService.log(() => console.debug(`height(resizeBox): ${getComputedStyle(resizeBox).height},\nheight(viewport) ${getComputedStyle(xtermViewport).height},\nheight(screen): ${screenHeight}`));\n this.loggingService.log(() => console.groupEnd());\n }\n }\n\n /**\n * If pushAndHandle() were used, there could be an issue\n * because it can adjust the size of elements during a loop of ResizeObserver.\n */\n private setupResizeObservers() {\n this.resizableObservers = [];\n let ob1 = this.observeXtermViewportDimension();\n let ob2 = this.observeHostDimension();\n if (ob1) this.resizableObservers.push(ob1);\n if (ob2) this.resizableObservers.push(ob2);\n }\n\n private observeXtermViewportDimension() {\n let xtermViewport = this.terminalOuter.nativeElement.querySelector(\n '.xterm-viewport'\n ) as HTMLDivElement | undefined;\n if (xtermViewport) {\n const resizeObserver = new ResizeObserver((entries) => {\n const outerDivWidth = (\n this.terminalOuter.nativeElement as HTMLDivElement | undefined\n )?.clientWidth;\n const outerDivHeight = (\n this.terminalOuter.nativeElement as HTMLDivElement | undefined\n )?.clientHeight;\n for (let entry of entries) {\n if (entry.contentBoxSize.length > 0) {\n let width: number = entry.target.clientWidth;\n let height: number = entry.target.clientHeight;\n if (\n (outerDivWidth && width > outerDivWidth) ||\n (outerDivHeight && height > outerDivHeight)\n ) {\n this.loggingService.log(() => console.debug(\n 'Changes on a xterm viewport element will be handled.'\n ));\n this.linearRender.pushAndHandle(\n {\n time: new Date(),\n type: 'xtermViewportExceedingOuterDiv',\n xtermViewportExceedingOuterDiv: {\n width: `${width}`,\n height: `${height}`,\n outerDivWidth: `${outerDivWidth}`,\n outerDivHeight: `${outerDivHeight}`,\n },\n },\n true\n );\n }\n }\n }\n });\n resizeObserver.observe(xtermViewport);\n return resizeObserver;\n } else {\n this.loggingService.log(() => console.error(\n 'Invalid state is detected. xterm element should exist below .terminal-outer.'\n ));\n }\n return undefined;\n }\n\n lastDetectedWidth = 0;\n private observeHostDimension() {\n let hostElement = this.hostRef.nativeElement;\n let detectBox = this.detectBox.nativeElement;\n if (hostElement && detectBox) {\n const resizeObserver = new ResizeObserver((entries) => {\n for (let entry of entries) {\n if (entry.target === hostElement) {\n if (entry.contentBoxSize.length > 0) {\n let width = getComputedStyle(entry.target).width;\n let height = getComputedStyle(entry.target).height;\n if (parseInt(width) >= 0 && parseInt(height) >= 0) {\n this.loggingService.log(() => console.debug('Changes on a host element will be handled.'));\n this.linearRender.pushAndHandle(\n {\n time: new Date(),\n type: 'hostResized',\n hostResized: { width: `${width}`, height: `${height}` },\n },\n true\n );\n }\n }\n }\n if (entry.target === detectBox) {\n if (entry.contentBoxSize.length > 0) {\n let width = getComputedStyle(entry.target).width;\n if (\n parseInt(width) >= 0 &&\n parseInt(width) <= this.lastDetectedWidth\n ) {\n this.loggingService.log(() => console.debug(\n 'Changes on a detect-box element will be handled.'\n ));\n this.linearRender.pushAndHandle(\n {\n time: new Date(),\n type: 'detectBoxResized',\n detectBoxResized: { width: `${width}` },\n },\n true\n );\n }\n this.lastDetectedWidth = parseInt(width);\n }\n }\n }\n });\n resizeObserver.observe(hostElement);\n resizeObserver.observe(detectBox);\n return resizeObserver;\n } else {\n this.loggingService.log(() => console.error(\n 'Invalid state is detected. xterm element should exist below .terminal-outer.'\n ));\n }\n return undefined;\n }\n /**\n * clean all resources\n */\n ngOnDestroy(): void {\n this.resizableObservers.forEach((ob) => ob.disconnect());\n if (this.keyInputSubjectSubscription)\n this.keyInputSubjectSubscription.unsubscribe();\n if (this.dataSourceSubscription) this.dataSourceSubscription.unsubscribe();\n if (this.keyEventSubjectSubscription)\n this.keyEventSubjectSubscription.unsubscribe();\n if (this.allLogsSubjectSubscription)\n this.allLogsSubjectSubscription.unsubscribe();\n if (this.handleToCheckLazyContainer)\n clearInterval(this.handleToCheckLazyContainer);\n if (this.xterm) this.xterm.dispose();\n this.loggingService.log(() => console.debug('All resources has been cleaned up.'));\n }\n\n write(chars: string) {\n this.xterm?.write(chars);\n }\n\n get keyInput(): Observable<string> {\n return this.dataSubject;\n }\n\n onData(): Observable<string> {\n return this.dataSubject;\n }\n\n get keyEventInput(): Observable<{ key: string; domEvent: KeyboardEvent }> {\n return this.keySubject;\n }\n\n onKey(): Observable<{ key: string; domEvent: KeyboardEvent }> {\n return this.keySubject;\n }\n\n get underlying(): Terminal | undefined {\n return this.xterm;\n }\n\n get isDraggableOnEdgeActivated() {\n // return this.displayOption.activateDraggableOnEdge != undefined && this.displayOption.fixedGrid == undefined;\n return this._draggable;\n }\n\n private get scrollBarWidth() {\n const core = (this.underlying as any)._core;\n return core.viewport.scrollBarWidth as number;\n }\n\n /**\n * After user coordinate dimensions of terminal, it's called.\n * @param left\n * @param top\n * @param width\n * @param height\n */\n onResizeEnd(left: number, top: number, width: number, height: number): void {\n this.setOuterDimensions(left, top, width, height);\n }\n\n /**\n * Before onResizeEnd is called, it valiates dimensions to change.\n * @param re dimension to be submitted from resizable stuff\n */\n validatorFactory(): (re: ResizeEvent) => boolean {\n const comp = this;\n return (re: ResizeEvent) => {\n if (this._draggable) {\n return true;\n } else return false;\n };\n }\n\n private findCssStyleRule(containingSelector: string) {\n for (let i = 0; i < document.styleSheets.length; i++) {\n let sheet = document.styleSheets.item(i);\n if (sheet) {\n for (let i = 0; i < sheet.cssRules.length; i++) {\n let rule = sheet.cssRules.item(i) as CSSStyleRule;\n if ('selectorText' in rule)\n if (rule.selectorText.includes(containingSelector)) return rule;\n }\n }\n }\n return undefined;\n }\n}\n\ninterface StringToString {\n [index: string]: string;\n}\n","<!-- Hierarchy: parent element(user) > host element(ng-terminal) > resize-box element > outer element -->\n<global-style></global-style>\n<div mwlResizable #resizeBox class=\"resize-box\" [validateResize]=\"validatorFactory()\" [enableGhostResize]=\"true\"\n (resizeEnd)=\"onResizeEnd($event.rectangle.left, $event.rectangle.top, $event.rectangle.width??0, $event.rectangle.height??0)\">\n <div #terminal class=\"terminal-outer\">\n </div>\n <div class=\"resize-handle resize-handle-top\" mwlResizeHandle [ngClass]=\"{'handle-active' : isDraggableOnEdgeActivated}\"\n [resizeEdges]=\"{ top: false }\"></div>\n <div class=\"resize-handle resize-handle-left\" mwlResizeHandle [ngClass]=\"{'handle-active' : isDraggableOnEdgeActivated}\"\n [resizeEdges]=\"{ left: false }\"></div>\n <div class=\"resize-handle resize-handle-right\" mwlResizeHandle [ngClass]=\"{'handle-active' : isDraggableOnEdgeActivated}\"\n [resizeEdges]=\"isDraggableOnEdgeActivated ? { right: true } : { right: false }\"></div>\n <div class=\"resize-handle resize-handle-bottom\" mwlResizeHandle [ngClass]=\"{'handle-active' : isDraggableOnEdgeActivated}\"\n [resizeEdges]=\"isDraggableOnEdgeActivated ? { bottom: true } : { bottom: false }\"></div>\n</div>\n<div #detectBox style=\"width: 100%; height: 0px; position: absolute;\">\n</div>","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { NgTerminalComponent } from './ng-terminal.component';\nimport { ResizableModule } from 'angular-resizable-element';\nimport { GlobalStyleComponent } from './global-style/global-style.component';\nimport { CommonModule } from '@angular/common';\nimport { ModuleOptions } from './module-options';\n\n@NgModule({\n declarations: [NgTerminalComponent, GlobalStyleComponent],\n imports: [ResizableModule, CommonModule],\n exports: [NgTerminalComponent],\n})\nexport class NgTerminalModule {\n static forRoot(\n config?: ModuleOptions\n ): ModuleWithProviders<NgTerminalModule> {\n return {\n ngModule: NgTerminalModule,\n providers: [\n {provide: ModuleOptions, useValue: config }\n ]\n };\n }\n}","/**\n *\n * It is a CSI sequences generator\n * https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-Functions-using-CSI-_-ordered-by-the-final-character_s_\n */\nlet CSI = '\\x9b';\n\nexport class FunctionsUsingCSI {\n static get CSI() {\n return CSI;\n }\n\n /**\n * CSI Ps @ Insert Ps (Blank) Character(s) (default = 1) (ICH).\n *\n * */\n static insertBlank(count: number) {\n return `${CSI}${count}@`;\n }\n /**\n * CSI Ps SP @ */\n /**\n * CSI Ps A Cursor Up Ps Times (default = 1) (CUU).\n * \\x9b3A */\n static cursorUp(count: number) {\n return `${CSI}${count}A`;\n }\n /**\n * CSI Ps SP A */\n /**\n * CSI Ps B Cursor Down Ps Times (default = 1) (CUD).\n * \\x9b3B */\n static cursorDown(count: number) {\n return `${CSI}${count}B`;\n }\n /**\n * CSI Ps C Cursor Forward Ps Times (default = 1) (CUF).\n * \\x9b3C */\n static cursorForward(count: number) {\n return `${CSI}${count}C`;\n }\n /**\n * CSI Ps D Cursor Backward Ps Times (default = 1) (CUB).\n * \\x9b3D */\n static cursorBackward(count: number) {\n return `${CSI}${count}D`;\n }\n /**\n * CSI Ps E Cursor Next Line Ps Times (default = 1) (CNL).\n * \\x9b3E\n * */\n static cursorNextLine(count: number) {\n return `${CSI}${count}E`;\n }\n /**\n * CSI Ps F Cursor Preceding Line Ps Times (default = 1) (CPL).\n * \\x9b3F\n * */\n static cursorPrecedingLine(count: number) {\n return `${CSI}${count}F`;\n }\n /**\n * CSI Ps G Cursor Character Absolute [column] (default = [row,1]) (CHA).\n * \\x9b9G\n * */\n static cursorColumn(count: number) {\n return `${CSI}${count}G`;\n }\n /**\n * CSI Ps ; Ps H Cursor Position [row;column] (default = [1,1]) (CUP).\n * \\x9b2;2H\n * */\n static cursorPosition(row: number, col: number) {\n return `${CSI}${row};${col}H`;\n }\n /**\n * CSI Ps I Cursor Forward Tabulation Ps tab stops (default = 1) (CHT). */\n /**\n * CSI Ps J Erase in Display (ED), VT100.\n * Ps = 0 -> Erase Below (default).\n * Ps = 1 -> Erase Above.\n * Ps = 2 -> Erase All.\n * Ps = 3 -> Erase Saved Lines (xterm).\n * \\x9b2J\n * */\n static eraseInDisplay(category: KindOfEraseInDisplay) {\n return `${CSI}${category}J`;\n }\n\n /**\n * CSI ? Ps J\n * Erase in Display (DECSED), VT220.\n * Ps = 0 -> Selective Erase Below (default).\n * Ps = 1 -> Selective Erase Above.\n * Ps = 2 -> Selective Erase All.\n * Ps = 3 -> Selective Erase Saved Lines (xterm).\n * \\x9b?2J\n * */\n static eraseSelectiveThingsInDisplay(category: KindOfEraseInDisplay) {\n return `${CSI}?${category}J`;\n }\n /**\n * CSI Ps K\n * Erase in Line (EL), VT100.\n * Ps = 0 -> Erase to Right (default).\n * Ps = 1 -> Erase to Left.\n * Ps = 2 -> Erase All.\n * \\x9b?1K\n * */\n static eraseInLine(category: KindOfEraseInLine) {\n return `${CSI}${category}K`;\n }\n /**\n * CSI ? Ps K\n * Erase in Line (DECSEL), VT220.\n * Ps = 0 -> Selective Erase to Right (default).\n * Ps = 1 -> Selective Erase to Left.\n * Ps = 2 -> Selective Erase All.\n * \\x9b?1K\n * */\n static eraseSelectiveThingsInLine(category: KindOfEraseInLine) {\n return `${CSI}?${category}K`;\n }\n /**\n * CSI Ps L Insert Ps Line(s) (default = 1) (IL).\n * \\x9b2L\n * */\n static insertLines(count: number) {\n return `${CSI}${count}L`;\n }\n /**\n * CSI Ps M Delete Ps Line(s) (default = 1) (DL).\n * \\x9b2M\n * */\n static deleteLines(count: number) {\n return `${CSI}${count}M`;\n }\n /**\n * CSI Ps P Delete Ps Character(s) (default = 1) (DCH).\n * \\x9b2P\n * */\n static deleteCharacter(count: number) {\n return `${CSI}${count}P`;\n }\n /**\n * CSI Ps S Scroll up Ps lines (default = 1) (SU), VT420, ECMA-48.\n * \\x9b2S\n * */\n static scrollUpLines(count: number) {\n return `${CSI}${count}S`;\n }\n /**\n * CSI ? Pi ; Pa ; Pv S */\n /**\n * CSI Ps T Scroll down Ps lines (default = 1) (SD), VT420.\n * \\x9b2T\n * */\n static scrollDownLines(count: number) {\n return `${CSI}${count}T`;\n }\n /**\n * CSI Ps ; Ps ; Ps ; Ps ; Ps T */\n /**\n * CSI > Ps ; Ps T */\n /**\n * CSI Ps X Erase Ps Character(s) (default = 1) (ECH).\n * \\x9b2X\n * */\n static eraseCharacters(count: number) {\n return `${CSI}${count}X`;\n }\n /**\n * CSI Ps Z Cursor Backward Tabulation Ps tab stops (default = 1) (CBT).\n * \\x9b2Z\n * */\n static cursorBackwardTabulationPstabstops(count: number) {\n return `${CSI}${count}Z`;\n }\n /**\n * CSI Ps ^ Scroll down Ps lines (default = 1) (SD), ECMA-48.\n * \\x9b2^\n * */\n static scrolldownPslines(count: number) {\n return `${CSI}${count}^`;\n }\n /**\n * CSI Ps ` Character Position Absolute [column] (default = [row,1])\n * \\x9b1` */\n static characterPositionAbsolute(count: number) {\n return `${CSI}${count}\\``;\n }\n /**\n * CSI Ps a Character Position Relative [columns] (default = [row,col+1])\n * \\x9b1a */\n static characterPositionRelative(count: number) {\n return `${CSI}${count}a`;\n }\n /**\n * CSI Ps b Repeat the preceding graphic character Ps times (REP).\n * \\x9b1b\n * */\n static repeatThePrecedingGraphicCharacter(count: number) {\n return `${CSI}${count}b`;\n }\n /**\n * CSI Pm d Line Position Absolute [row] (default = [1,column]) (VPA). \n * \\x9b4d\n * */\n static linePositionAbsolute(count: number) {\n return `${CSI}${count}d`;\n }\n /**\n * CSI Pm e Line Position Relative [rows] (default = [row+1,column]) \n * \\x9b1e\n * */\n static linePositionRelative(count: number) {\n return `${CSI}${count}e`;\n }\n /**\n * CSI Ps ; Ps f Horizontal and Vertical Position [row;column] (default =\n * [1,1]) \n * \\x9b3;5f\n * */\n static horizontalandVerticalPosition(row: number, column: number) {\n return `${CSI}${row};${column}f`;\n }\n\n /**\n * CSI Ps g Tab Clear (TBC). \n * \\x9b3g\n * */\n /**\n * CSI Pm h Set Mode (SM).\n * \\x9b4h\n * */\n static setMode(mode: KindOfSetMode, ...additionalModes: KindOfSetMode[]) {\n const modes = [mode, ...(additionalModes ?? [])];\n return `${CSI}${modes.join(\";\")}h`;\n }\n /**\n * CSI ? Pm h DEC Private Mode Set (DECSET).\n * */\n /**\n * CSI Pm i Media Copy (MC). */\n /**\n * CSI ? Pm i */\n /**\n * CSI Pm l Reset Mode (RM). \n * \\x9b4l\n * */\n static resetMode(mode: KindOfResetMode, ...additionalModes: KindOfResetMode[]) {\n const modes = [mode, ...(additionalModes ?? [])];\n return `${CSI}${modes.join(\";\")}l`;\n }\n /**\n * CSI ? Pm l */\n /**\n * CSI Pm m Character Attributes (SGR).\n * \\x9b31m\n * */\n static characterAttributes(\n firstAttribute: KindOfCharacterAttributes,\n ...additionalAttributes: KindOfCharacterAttributes[]\n ) {\n const chars: KindOfCharacterAttributes[] = [\n firstAttribute,\n ...(additionalAttributes ?? []),\n ];\n return `${CSI}${chars.join(';')}m`;\n }\n /**\n * CSI > Ps ; Ps m */\n /**\n * CSI Ps n Device Status Report (DSR). */\n /**\n * CSI > Ps n */\n /**\n * CSI ? Ps n */\n /**\n * CSI > Ps p */\n /**\n * CSI ! p Soft terminal reset (DECSTR), VT220 and up. */\n /**\n * CSI Ps ; Ps \" p */\n /**\n * CSI Ps $ p */\n /**\n * CSI ? Ps $ p */\n /**\n * CSI # p */\n /**\n * CSI Ps ; Ps # p */\n /**\n * CSI Ps q Load LEDs (DECLL), VT100. */\n /**\n * CSI Ps SP q */\n /**\n * CSI Ps \" q */\n /**\n * CSI # q Pop video attributes from stack (XTPOPSGR), xterm. This is an */\n /**\n * CSI Ps ; Ps r */\n /**\n * CSI ? Pm r */\n /**\n * CSI Pt ; Pl ; Pb ; Pr ; Ps $ r */\n /**\n * CSI s Save cursor, available only when DECLRMM is disabled (SCOSC, */\n /**\n * CSI Pl ; Pr s */\n /**\n * CSI ? Pm s */\n /**\n * CSI Ps ; Ps ; Ps t */\n /**\n * CSI > Ps ; Ps t */\n /**\n * CSI Ps SP t */\n /**\n * CSI Pt ; Pl ; Pb ; Pr ; Ps $ t */\n /**\n * CSI u Restore cursor (SCORC, also ANSI.SYS). */\n /**\n * CSI Ps SP u */\n /**\n * CSI Pt ; Pl ; Pb ; Pr ; Pp ; Pt ; Pl ; Pp $ v */\n /**\n * CSI Ps $ w */\n /**\n * CSI Pt ; Pl ; Pb ; Pr ' w */\n /**\n * CSI Ps x Request Terminal Parameters (DECREQTPARM). */\n /**\n * CSI Ps * x */\n /**\n * CSI Pc ; Pt ; Pl ; Pb ; Pr $ x */\n /**\n * CSI Ps # y */\n /**\n * CSI Pi ; Pg ; Pt ; Pl ; Pb ; Pr * y */\n /**\n * CSI Ps ; Pu ' z */\n /**\n * CSI Pt ; Pl ; Pb ; Pr $ z */\n /**\n * CSI Pm ' { */\n /**\n * CSI # { */\n /**\n * CSI Ps ; Ps # { */\n /**\n * CSI Pt ; Pl ; Pb ; Pr $ { */\n /**\n * CSI Pt ; Pl ; Pb ; Pr # | */\n /**\n * CSI Ps $ | */\n /**\n * CSI Ps ' | */\n /**\n * CSI Ps * | */\n /**\n * CSI # } Pop video attributes from stack (XTPOPSGR), xterm. Popping */\n /**\n * CSI Pm ' } */\n /**\n * CSI Pm ' ~ */\n}\nexport enum KindOfEraseInDisplay {\n Below = 0,\n Above = 1,\n All = 2,\n SavedLines = 3,\n}\nexport enum KindOfEraseInLine {\n Right = 0,\n Left = 1,\n All = 2,\n}\n\nexport enum KindOfTabClear{\n ClearCurrentColumn = 0,\n ClearAll = 3\n}\n\n\nexport enum KindOfSetMode{\n KeyboardActionMode = 2,\n InsertMode = 4,\n SendReceive = 12,\n AutomaticNewline = 20\n}\nexport enum KindOfResetMode{\n KeyboardActionMode = 2,\n ReplaceMode = 4,\n SendReceive = 12,\n NormalNewline = 20\n}\nexport enum KindOfCharacterAttributes {\n Normal = 0,\n Bold = 1,\n Faint = 2,\n Italicized = 3,\n Underlined = 4,\n Blink = 5,\n Inverse = 7,\n Invisible = 8,\n CrossedOutcharacters = 9,\n DoublyUnderlined = 21,\n NormalNeitherBoldNorFaint = 22,\n Notitalicized = 23,\n Notunderlined = 24,\n Steady = 25,\n Positive = 27,\n Visible = 28,\n NotcrossedOut = 29,\n SetforegroundcolortoBlack = 30,\n SetforegroundcolortoRed = 31,\n SetforegroundcolortoGreen = 32,\n SetforegroundcolortoYellow = 33,\n SetforegroundcolortoBlue = 34,\n SetforegroundcolortoMagenta = 35,\n SetforegroundcolortoCyan = 36,\n SetforegroundcolortoWhite = 37,\n Setforegroundcolortodefault = 39,\n SetbackgroundcolortoBlack = 40,\n SetbackgroundcolortoRed = 41,\n SetbackgroundcolortoGreen = 42,\n SetbackgroundcolortoYellow = 43,\n SetbackgroundcolortoBlue = 44,\n SetbackgroundcolortoMagenta = 45,\n SetbackgroundcolortoCyan = 46,\n SetbackgroundcolortoWhite = 47,\n SetbackgroundcolortoDefault = 49,\n}\n","/*\n * Public API Surface of ng-terminal\n */\n\nexport * from './lib/ng-terminal.component';\nexport * from './lib/ng-terminal.module';\nexport * from './lib/functions-using-csi';\nexport * from './lib/ng-terminal';\nexport * from './lib/module-options';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ModuleOptions","i1.LoggingService","i4.GlobalStyleComponent"],"mappings":"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"}