interface NavigationTabState {
    scrollTop?: number;
    expandedSections?: string[];
    selectedItems?: string[];
}
interface NavigationState {
    activeTab?: string;
    tabStates?: Record<string, NavigationTabState>;
    uiState?: Record<string, any>;
}
interface State {
    id: string;
    tab?: string;
    navigationState?: NavigationState;
    [key: string]: any;
}
interface EditorStateOptions {
    scopeKey?: string;
    persist?: boolean;
}
/**
 * @class
 *
 * EditorState
 *
 * A class to work with the internal editor state of the component
 *
 */
export declare class EditorState {
    history: State[];
    current: number;
    private readonly persistEnabled;
    private readonly storageKey?;
    constructor(options?: EditorStateOptions);
    private normaliseScopeKey;
    private hydrate;
    private persist;
    private cloneNavigationState;
    private mergeNavigationState;
    private latestEntryForId;
    clearPersistedState(): void;
    dispose(options?: {
        clearPersistedState?: boolean;
    }): void;
    reset(): void;
    /**
     * Push a new state onto the history stack
     *
     * A new state is an entry with the id of the currently displayed entity.
     *
     * @param {Object} options
     * @param {String} options.id - the id of the entity that is currently displayed
     */
    push({ id }: State): void;
    /**
     * Go back through the state
     */
    back(): void;
    /**
     * Go forward through the state
     */
    forward(): void;
    /**
     * Return the current entry
     */
    latest(): State;
    canBack(): boolean;
    canForward(): boolean;
    /**
     * Update the current entry
     *
     * @param {Object} an object to be merged into the current entry
     */
    update(newState: State): void;
    updateNavigationState(navigationState: NavigationState): void;
    updateNavigationStateForId(id: string, navigationState: NavigationState): void;
    getNavigationState(id?: string): NavigationState | undefined;
    prune(validIds: Set<string>): void;
    /**
     * Delete a property from the current entry
     *
     * @param {Object} object
     * @param {String} object.property - the property to remove from the current entry
     */
    deleteFromState({ property }: {
        property: string;
    }): void;
    /**
     * Replace an id in the state
     *
     * When we change an entity id, we also need to update the history
     *   so we don't try to navigate back to a non-existent entity
     *
     * @param {Object} object
     * @param {String} object.id - the id to replace
     * @param {String} object.newId - the replacement
     */
    replaceId({ id, newId }: {
        id: string;
        newId: string;
    }): void;
}
export {};
