import { RemoveListener } from "@sheetxl/common";
import { SerializableProperties } from "../primitives";
import { TransactionStore, ITransaction } from "../transaction";
import { IWorkbookRangeListener, IWorkbookModel } from "../workbook";
import { RangeListenerOptions } from "../sheet";
import { SheetCellRangeCoordsAddresses, SheetCellRangeCoordsAddress, SheetCellRangeCoords, SheetCellCoords } from "../range";
import { NamedItem } from "./NamedItem";
import { INamedItems, INamedItemsListener, NamedItemsJSON, NamedRangeItem, NamedItemsSearchOptions } from "./INamedItems";
export interface NamedItemsOptions {
    /**
     * Required for resolving ranges.
     * @param address
     */
    decodeAddress: (address: SheetCellRangeCoordsAddresses) => SheetCellRangeCoords[];
    /**
     * Required for resolving ranges.
     * @param addresses
     */
    encodeAddress: (addresses: SheetCellRangeCoords) => string;
    /**
     * If provided then the named ranges will update when the ranges update.
     */
    addRangeListener?: (address: SheetCellRangeCoordsAddress, listener: IWorkbookRangeListener, options?: RangeListenerOptions) => RemoveListener;
    /**
     * A transaction store that can be used to undo/redo changes to the namedRanges.
     */
    transactionStore?: TransactionStore;
    workbook?: IWorkbookModel;
    initialJSON?: NamedItemsJSON;
}
export declare const REGEX_INVALID_NAME_FIRST_CHARS: RegExp;
export declare const REGEX_INVALID_NAME_TRAILING_CHARS: RegExp;
export declare class NamedItems implements INamedItems {
    private _listeners;
    private _options;
    private _transactionStore;
    private _transactionStoreRemoveListener;
    private _closed;
    constructor(options: NamedItemsOptions);
    search(options: NamedItemsSearchOptions): NamedItem[];
    lookupByName(name: string, anchor: SheetCellCoords): NamedItem | null;
    lookupByRanges(ranges: SheetCellRangeCoords[]): NamedItem[] | null;
    decodeAddress(address: SheetCellRangeCoordsAddresses): SheetCellRangeCoords[] | null;
    findValidateName(ranges: SheetCellRangeCoords[], scope?: string, template?: string, replaceHidden?: boolean): string;
    validateNamedItem(namedRangeItem: SerializableProperties<NamedRangeItem>, scope?: string, replaceHidden?: boolean): void;
    _validateSheetAddress(address: string): void;
    _validateRangeName(name: string, scope: string, replaceHidden?: boolean): void;
    addNamedRange(namedRange: SerializableProperties<NamedRangeItem> | string, replaceHidden?: boolean): NamedRangeItem;
    updateNamedRange(name: string, namedRange: SerializableProperties<NamedRangeItem>): NamedRangeItem;
    deleteNamedRange(namedRange: NamedRangeItem | string): NamedRangeItem | null;
    private _indexRange;
    private _addNamedItems;
    pushTransaction(description?: string): ITransaction;
    private _getTransactionState;
    private _pushTransaction;
    private _updateTransactionState;
    notifyNamedItemsChange(): void;
    notifyOnClose(): void;
    fromJSON(json: NamedItemsJSON): void;
    private _fromJSON;
    toJSON(): NamedItemsJSON | null;
    addListener(listener: INamedItemsListener): RemoveListener;
    isClosed(): boolean;
    close(): void;
    get isNamedItems(): true;
}
export default NamedItems;
//# sourceMappingURL=NamedItems.d.ts.map