import { NotificationService, SearchComponent } from '@alauda/ui';
import { ChangeDetectorRef, ElementRef, EventEmitter, OnChanges, OnDestroy, OnInit, SimpleChanges, TemplateRef } from '@angular/core';
import { Subject } from 'rxjs';
import { Terminal } from 'xterm';
import { CanvasAddon } from 'xterm-addon-canvas';
import { WebglAddon } from 'xterm-addon-webgl';
import { ApiGatewayService } from '../../api/public-api';
import { K8sPermissionService } from '../../permission/k8s-permission.service';
import { TranslateService } from '../../translate/public-api';
import { ConnectionStatus } from '../constants';
import { TerminalOption } from '../types';
import * as i0 from "@angular/core";
export declare const BIN_SH = "/bin/sh";
export declare const EXEC_FAILED_MESSAGE_CONTAINERD = "Internal error occurred: error executing command in container";
export declare const EXEC_FAILED_MESSAGE_DOCKER = "OCI runtime exec failed: exec failed: unable to start container process";
export declare const NO_PERMISSION_CODE = 40001;
export declare function initRendererAddon(): WebglAddon | CanvasAddon;
/**
 * For dispatching keyboard events automatically to xterm,
 * please view https://www.physics.udel.edu/~watson/scen103/ascii.html for reference.
 *
 * For instance, if you want to dispatch `Ctrl+C` to xterm, you should dispatch `\x03`(aka `\u0003`) to the socket.
 *
 * ```ts
 * socket.send('0' + encode('\u0003'))
 * ```
 */
export declare class TerminalComponent implements OnChanges, OnDestroy, OnInit {
    private readonly apiGateway;
    private readonly notification;
    private readonly translate;
    private readonly cdr;
    private readonly k8sPermission;
    private readonly globalNamespace;
    ConnectionStatus: typeof ConnectionStatus;
    option: TerminalOption;
    index: number;
    extraButton: TemplateRef<unknown>;
    extraContent: TemplateRef<unknown>;
    readonly connectionStatusChange: EventEmitter<ConnectionStatus>;
    readonly sendData: EventEmitter<string>;
    readonly socketReady: EventEmitter<WebSocket>;
    readonly fallbackShell: EventEmitter<string>;
    anchorRef: ElementRef<HTMLDivElement>;
    searchInputRef: SearchComponent;
    beforeUnload(event: BeforeUnloadEvent): void;
    unload(_event: BeforeUnloadEvent): void;
    theme: 'light' | 'dark';
    fontSize: number;
    searching: boolean;
    searchKeyword: string;
    coding: string;
    connectionStatus: ConnectionStatus;
    commandHasRun: boolean;
    xterm: Terminal;
    private searchAddon;
    private fitAddon;
    private socket;
    private ping;
    socket$$: Subject<WebSocket>;
    shouldFallBackOnClose: boolean;
    get themeClass(): string;
    get showLoading(): boolean;
    constructor(apiGateway: ApiGatewayService, notification: NotificationService, translate: TranslateService, cdr: ChangeDetectorRef, k8sPermission: K8sPermissionService, globalNamespace: string);
    ngOnInit(): void;
    ngOnChanges({ option }: SimpleChanges): void;
    ngOnDestroy(): void;
    focus(): void;
    reconnect(): void;
    killProcess(): void;
    switchTheme(): void;
    fontSizeChange(size: number): void;
    openSearching(): void;
    closeSearching(): void;
    onShellKeyDown(event: KeyboardEvent): void;
    onSearchInputKeyDown(event: KeyboardEvent): void;
    private getSearchOptions;
    findNext(): void;
    findPrevious(): void;
    private initXterm;
    private initFitAddon;
    private initSearchAddon;
    private initSocket;
    private readonly initSocketListeners;
    private readonly initSocketConnection;
    private fallBackOnClose;
    private closeSocket;
    private resizeRemoteTerminal;
    private updateConnectionStatus;
    activateTerminal(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<TerminalComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<TerminalComponent, "acl-terminal", never, { "option": { "alias": "option"; "required": false; }; "index": { "alias": "index"; "required": false; }; "extraButton": { "alias": "extraButton"; "required": false; }; "extraContent": { "alias": "extraContent"; "required": false; }; }, { "connectionStatusChange": "connectionStatusChange"; "sendData": "sendData"; "socketReady": "socketReady"; "fallbackShell": "fallbackShell"; }, never, never, false, never>;
}
