import React from 'react';
import { Tab as KuiTab, Stream } from '@kui-shell/core';
import { BlockViewTraits, BlockOperationTraits } from './';
import { ActiveBlock, ProcessingBlock, FinishedBlock } from './BlockModel';
import SplitPosition from '../SplitPosition';
import { Maximizable } from '../../Sidecar/width';
type Props = React.PropsWithChildren<{
    /** tab UUID */
    uuid: string;
    /** for key handlers, which may go away soon */
    tab: KuiTab;
    /** Block ordinal */
    idx: number;
    /** Block ordinal to be displayed to user */
    displayedIdx?: number;
    /** Position of the enclosing split. Default: SplitPosition.default */
    splitPosition?: SplitPosition;
    model: ProcessingBlock | FinishedBlock | ActiveBlock;
    onRender: () => void;
    willUpdateCommand?: (idx: number, command: string) => void;
}> & Maximizable & BlockViewTraits & BlockOperationTraits;
interface State {
    alreadyListen: boolean;
    assertHasContent?: boolean;
    isResultRendered: boolean;
    nStreamingOutputs: number;
    streamingConsumer: Stream;
}
export default class Output extends React.PureComponent<Props, State> {
    private readonly _willRemove;
    private readonly _willUpdateCommand;
    private streamingOutput;
    constructor(props: Props);
    private streamingConsumer;
    static getDerivedStateFromProps(props: Props, state: State): State | {
        alreadyListen: boolean;
        isResultRendered: boolean;
        streamingOutput: any[];
    } | {
        alreadyListen: boolean;
        isResultRendered: boolean;
        streamingOutput?: undefined;
    };
    private unmounted;
    componentDidMount(): void;
    componentWillUnmount(): void;
    private onRender;
    private readonly _onRender;
    private hasStreamingOutput;
    private outputWillOverflow;
    private stream;
    private result;
    private cursor;
    private isShowingSomethingInTerminal;
    private ok;
    private ctx;
    /** For output-only blocks, render the Block Actions */
    private actions;
    /** @return the UI for the main/content part of the Output */
    private content;
    render(): JSX.Element;
}
export {};
