import { KeyStrokeContext, Menu, NavigateButtonModel, Outline, Page, SomeRequired } from '../../../index';
/**
 * The outline navigation works mostly browser-side. The navigation logic is implemented in JavaScript.
 * When a navigation button is clicked, we process that click browser-side first and send an event to
 * the server which nodes have been selected. We do that for better user experience. In a first attempt
 * the whole navigation logic was on the server, which caused a lag and flickering in the UI.
 */
export declare abstract class NavigateButton extends Menu implements NavigateButtonModel {
    model: NavigateButtonModel;
    initModel: SomeRequired<this['model'], 'parent' | 'node' | 'outline'>;
    node: Page;
    outline: Outline;
    altKeyStrokeContext: KeyStrokeContext;
    overflow: boolean;
    protected _defaultText: string;
    protected _defaultIconId: string;
    constructor();
    protected _render(): void;
    protected _renderProperties(): void;
    protected _remove(): void;
    /**
     * Toggles the visibility of the detail form according to {@link _toggleDetail}. Called when the button is clicked and {@link _isDetail} is `true`.
     */
    protected _setDetailVisible(): void;
    /**
     * @returns `true` if the page has a detail form and the detail form is marked as visible.
     */
    protected _hasDetailForm(): boolean;
    /**
     * @returns `true` if the page has a detail table and the detail table is marked as visible and the detail table contains
     *          at least one row. The last requirement can be lifted by setting the optional parameter `requireRows` to false.
     */
    protected _hasDetailTable(requireRows?: boolean): boolean;
    protected _doAction(): void;
    /**
     * Returns `true` if the button is in "detail toggle mode", i .e. the page has both a detail form and a detail table and the button
     * should toggle between these two detail views instead of changing the selected page. In other words, when this is `true`, clicking
     * the button does not {@link _drill drill} up or down like normal, but only changes the displayed "detail content".
     */
    protected abstract _isDetail(): boolean;
    /**
     * Sets the outline selection to the child or parent page. Called when the button is clicked and {@link _isDetail} is `false`.
     */
    protected abstract _drill(): any;
    /**
     * Specifies the new value of {@link Page#detailFormVisibleByUi} when toggling the detail content instead of changing the selected page.
     */
    protected abstract _toggleDetail(): boolean;
    /**
     * Computes whether this button should be enabled in the current state of the application.
     */
    protected abstract _buttonEnabled(): boolean;
    /**
     * Called when enabled state must be re-calculated and probably rendered.
     */
    updateEnabled(): void;
}
//# sourceMappingURL=NavigateButton.d.ts.map