import type { ISessionContext, ISessionContextDialogs, IWidgetTracker } from '@jupyterlab/apputils';
import type { Cell } from '@jupyterlab/cells';
import type { ITranslator } from '@jupyterlab/translation';
import { Token } from '@lumino/coreutils';
import type { ISignal } from '@lumino/signaling';
import type { Widget } from '@lumino/widgets';
import type { KernelError } from './actions';
import type { INotebookModel } from './model';
import type { NotebookTools } from './notebooktools';
import type { NotebookPanel } from './panel';
import type { StaticNotebook } from './widget';
import type { NotebookWidgetFactory } from './widgetfactory';
/**
 * The notebook widget factory token.
 */
export declare const INotebookWidgetFactory: Token<NotebookWidgetFactory.IFactory>;
/**
 * The notebook tools token.
 */
export declare const INotebookTools: Token<INotebookTools>;
/**
 * The interface for notebook metadata tools.
 */
export interface INotebookTools extends Widget {
    activeNotebookPanel: NotebookPanel | null;
    activeCell: Cell | null;
    selectedCells: Cell[];
    addItem(options: NotebookTools.IAddOptions): void;
    addSection(options: NotebookTools.IAddSectionOptions): void;
}
/**
 * The namespace for NotebookTools class statics.
 */
export declare namespace INotebookTools {
    /**
     * The options used to add an item to the notebook tools.
     */
    interface IAddOptions {
        /**
         * The tool to add to the notebook tools area.
         */
        tool: ITool;
        /**
         * The section to which the tool should be added.
         */
        section: 'advanced' | string;
        /**
         * The rank order of the widget among its siblings.
         */
        rank?: number;
    }
    /**
     * The options used to add a section to the notebook tools.
     */
    interface IAddSectionOptions {
        /**
         * The name of the new section.
         */
        sectionName: string;
        /**
         * The tool to add to the notebook tools area.
         */
        tool?: INotebookTools.ITool;
        /**
         * The label of the new section.
         */
        label?: string;
        /**
         * The rank order of the section among its siblings.
         */
        rank?: number;
    }
    interface ITool extends Widget {
        /**
         * The notebook tools object.
         */
        notebookTools: INotebookTools;
    }
}
/**
 * The notebook tracker token.
 */
export declare const INotebookTracker: Token<INotebookTracker>;
/**
 * An object that tracks notebook widgets.
 */
export interface INotebookTracker extends IWidgetTracker<NotebookPanel> {
    /**
     * The currently focused cell.
     *
     * #### Notes
     * If there is no cell with the focus, then this value is `null`.
     */
    readonly activeCell: Cell | null;
    /**
     * A signal emitted when the current active cell changes.
     *
     * #### Notes
     * If there is no cell with the focus, then `null` will be emitted.
     */
    readonly activeCellChanged: ISignal<this, Cell | null>;
    /**
     * A signal emitted when the selection state changes.
     */
    readonly selectionChanged: ISignal<this, void>;
}
/**
 * Notebook cell executor namespace
 */
export declare namespace INotebookCellExecutor {
    /**
     * Execution options for notebook cell executor.
     */
    interface IRunCellOptions {
        /**
         * Cell to execute
         */
        cell: Cell;
        /**
         * Notebook to which the cell belongs
         */
        notebook: INotebookModel;
        /**
         * Notebook widget configuration
         */
        notebookConfig: StaticNotebook.INotebookConfig;
        /**
         * A callback to notify a cell completed execution.
         */
        onCellExecuted: (args: {
            cell: Cell;
            success: boolean;
            error?: KernelError | null;
        }) => void;
        /**
         * A callback to notify that a cell execution is scheduled.
         */
        onCellExecutionScheduled: (args: {
            cell: Cell;
        }) => void;
        /**
         * Document session context
         */
        sessionContext?: ISessionContext;
        /**
         * Session dialogs
         */
        sessionDialogs?: ISessionContextDialogs;
        /**
         * Application translator
         */
        translator?: ITranslator;
    }
}
/**
 * Notebook cell executor interface
 */
export interface INotebookCellExecutor {
    /**
     * Execute a cell.
     *
     * @param options Cell execution options
     */
    runCell(options: INotebookCellExecutor.IRunCellOptions): Promise<boolean>;
}
/**
 * The notebook cell executor token.
 */
export declare const INotebookCellExecutor: Token<INotebookCellExecutor>;
