import { INotifyPropertyChanged, EmitType, Base } from '@syncfusion/ej2-base';
import { CalculateModel } from './calculate-model';
import { IFormulaColl, FailureEventArgs, StoredCellInfo } from '../common/interface';
import { Parser } from './parser';
/**
 * Represents the calculate library.
 *
 * @hidden
 */
export declare class Calculate extends Base<HTMLElement> implements INotifyPropertyChanged {
    private lFormulas;
    libraryFormulas: any;
    /** @hidden */
    storedData: Map<string, FormulaInfo>;
    /** @hidden */
    actCell: string;
    private keyToRowsMap;
    private rowsToKeyMap;
    /** @hidden */
    rightBracket: string;
    /** @hidden */
    leftBracket: string;
    /** @hidden */
    sheetToken: string;
    cell: string;
    private cellPrefix;
    private treatEmptyStringAsZero;
    /** @hidden */
    parentObject: Object | Calculate;
    /** @hidden */
    tic: string;
    /** @hidden */
    singleTic: string;
    /** @hidden */
    trueValue: string;
    /** @hidden */
    falseValue: string;
    private parseDecimalSeparator;
    /** @hidden */
    spreadSheetUsedRange: number[];
    /** @hidden */
    arithMarker: string;
    /** @hidden */
    arithMarker2: string;
    private dependentCells;
    private dependentFormulaCells;
    minValue: number;
    maxValue: number;
    categoryCollection: string[];
    dependencyLevel: number;
    /** @hidden */
    randomValues: Map<string, string>;
    /** @hidden */
    isRandomVal: boolean;
    /** @hidden */
    randCollection: string[];
    /** @hidden */
    dependencyCollection: string[];
    /** @hidden */
    uniqueRange: string[];
    private uniqueCells;
    /** @hidden */
    sortRange: string[];
    private sortCells;
    /**
     * @hidden
     */
    formulaErrorStrings: string[];
    private errorStrings;
    /** @hidden */
    grid: Object | Calculate;
    /** @hidden */
    parser: Parser;
    private parseArgumentSeparator;
    private dateTime1900;
    private isParseDecimalSeparatorChanged;
    private isArgumentSeparatorChanged;
    private sheetFamilyID;
    private defaultFamilyItem;
    private sheetFamiliesList;
    private modelToSheetID;
    /** @hidden */
    tokenCount: number;
    private sortedSheetNames;
    private tempSheetPlaceHolder;
    /** @hidden */
    namedRanges: Map<string, string>;
    private formulaInfoTable;
    private millisecondsOfaDay;
    private parseDateTimeSeparator;
    /**
     * Triggers when the calculation caught any errors.
     *
     * @event anEvent
     */
    onFailure: EmitType<FailureEventArgs>;
    /**
     * Base constructor for creating Calculate library.
     *
     * @param {Object} parent - specify the parent
     */
    constructor(parent?: Object);
    /**
     * To get the argument separator to split the formula arguments.
     *
     * @returns {string} - To get the argument separator to split the formula arguments.
     */
    getParseArgumentSeparator(): string;
    /**
     * To set the argument separator to split the formula arguments.
     *
     * @param {string} value - Argument separator based on the culture.
     * @returns {void} - To set the argument separator to split the formula arguments.
     */
    setParseArgumentSeparator(value: string): void;
    /**
     * To get the date separator to split the date value.
     *
     * @returns {string} - To get the date separator to split the date value.
     */
    getParseDateTimeSeparator(): string;
    /**
     * To set whether the empty string is treated as zero or not.
     *
     * @param {boolean} value - specify the boolean.
     * @returns {void} - To set whether the empty string is treated as zero or not.
     */
    setTreatEmptyStringAsZero(value: boolean): void;
    /**
     * To get whether the empty string is treated as zero or not.
     *
     * @returns {boolean} - To get whether the empty string is treated as zero or not.
     */
    getTreatEmptyStringAsZero(): boolean;
    /**
     * To set the date separator to split the date value.
     *
     * @param {string} value - Argument separator based on the culture.
     * @returns {void} - To set the date separator to split the date value.
     */
    setParseDateTimeSeparator(value: string): void;
    onPropertyChanged(newProp: CalculateModel, oldProp: CalculateModel): void;
    protected getModuleName(): string;
    /**
     * @hidden
     * @returns {string} - get Formula Character.
     */
    getFormulaCharacter(): string;
    /**
     * @hidden
     * @param {string} text - specify the text
     * @returns {boolean} - Returns boolean value.
     */
    isUpperChar(text: string): boolean;
    private resetKeys;
    /**
     * @hidden
     * @param {string} cellRef -  specify the cell reference
     * @returns {void} - update Dependent Cell
     */
    updateDependentCell(cellRef: string): void;
    /**
     * @hidden
     * @returns {Map<string, string[]>} - get Dependent Cells
     */
    getDependentCells(): Map<string, string[]>;
    /**
     * @hidden
     * @returns {Map<string, Map<string, string>>} - get Dependent Formula Cells
     */
    getDependentFormulaCells(): Map<string, Map<string, string>>;
    /**
     * To get library formulas collection.
     *
     * @returns {Map<string, Function>} - To get library formulas collection.
     */
    getLibraryFormulas(): Map<string, IFormulaColl>;
    /**
     * To get library function.
     *
     * @param {string} libFormula - Library formula to get a corresponding function.
     * @returns {Function} - To get library function.
     */
    getFunction(libFormula: string): Function;
    /**
     * @hidden
     * @param {string} val - specify the value.
     * @returns {Date} - convert integer to date.
     */
    intToDate(val: string): Date;
    getFormulaInfoTable(): Map<string, FormulaInfo>;
    /**
     * To get the formula text.
     *
     * @returns {void} - To get the formula text.
     */
    getParseDecimalSeparator(): string;
    /**
     * To get the formula text.
     *
     * @param {string} value - Specifies the decimal separator value.
     * @returns {void} - To get the formula text.
     */
    setParseDecimalSeparator(value: string): void;
    /**
     * @hidden
     * @param {string} cellRef -  specify the cell reference
     * @returns {string} - get sheet token.
     */
    getSheetToken(cellRef: string): string;
    /**
     * @hidden
     * @param {Object} grd - specify the id
     * @returns {number} - get sheet id.
     */
    getSheetID(grd: Object): number;
    /**
     * @hidden
     * @param {string | number} value - specify the value.
     * @returns {number} - parse float
     */
    parseFloat(value: string | number): number;
    /**
     * To get the row index of the given cell.
     *
     * @param {string} cell - Cell address for getting row index.
     * @returns {number} - To get the row index of the given cell.
     */
    rowIndex(cell: string): number;
    /**
     * To get the column index of the given cell.
     *
     * @param {string} cell - Cell address for getting column index.
     * @returns {number} - To get the column index of the given cell.
     */
    colIndex(cell: string): number;
    /**
     * To get the valid error strings.
     *
     * @hidden
     * @returns {string[]} - to get error strings.
     */
    getErrorStrings(): string[];
    /**
     * @hidden
     * @param {string} text - specify the text
     * @param {number} startIndex - specify the start index
     * @param {number} length - specify the length
     * @returns {string} - Returns sub string
     */
    substring(text: string, startIndex: number, length?: number): string;
    /**
     * @hidden
     * @param {string} c - specify the characer of the string
     * @returns {boolean} - Return the boolean type
     */
    isChar(c: string): boolean;
    /**
     * @hidden
     * @param {Object} model - specify the model
     * @param {Object} calcId - specify the calculate instance id.
     * @returns {CalcSheetFamilyItem} - get Sheet Family Item.
     */
    getSheetFamilyItem(model: Object, calcId?: number): CalcSheetFamilyItem;
    /**
     * Register a key value pair for formula.
     *
     * @param {string} key - Key for formula reference .
     * @param {string | number} value - Value for the corresponding key.
     * @returns {void} - Register a key value pair for formula.
     */
    setKeyValue(key: string, value: string | number): void;
    /**
     * @hidden
     * @param {string} cell - specify the cell
     * @returns {void} - clears the  Formula Dependent Cells.
     */
    clearFormulaDependentCells(cell: string): void;
    private arrayRemove;
    /**
     * Register a key value pair for formula.
     *
     * @param {string} key - Key for getting the corresponding value.
     * @returns {string | number} - to get key value.
     */
    getKeyValue(key: string): string | number;
    getNamedRanges(): Map<string, string>;
    /**
     * Adds a named range to the NamedRanges collection.
     *
     * @param {string} name - Name of the named range.
     * @param {string} range - Range for the specified name.
     * @returns {boolean} - Adds a named range to the NamedRanges collection.
     */
    addNamedRange(name: string, range: string): boolean;
    /**
     * Update the sheet name changes in the named range collection.
     *
     * @hidden
     * @param {string} pName - Previous name of the sheet.
     * @param {string} name -  Current name of the sheet.
     * @returns {void} - Update the sheet name changes in the named range collection.
     */
    updateNamedRange(pName: string, name: string): void;
    /**
     * Remove the specified named range form the named range collection.
     *
     * @param {string} name - Name of the specified named range.
     * @returns {boolean} - Remove the specified named range form the named range collection.
     */
    removeNamedRange(name: string): boolean;
    /**
     * @hidden
     * @param {number} col - specify the column
     * @returns {string} - to convert the alpha.
     */
    convertAlpha(col: number): string;
    /**
     * @hidden
     * @param {string} cellRange - specify the cell range.
     * @returns {string} - to get cell collection.
     */
    getCellCollection(cellRange: string): string[] | string;
    /**
     * Compute the given formula.
     *
     * @param {string} formulaText - Specifies to compute the given formula.
     * @param {boolean} isFromComputeExpression - Specifies to confirm it was called from the ComputeExpression function.
     * @returns {string | number} - compute the given formula
     */
    computeFormula(formulaText: string, isFromComputeExpression?: boolean): string | number;
    private calculateFormula;
    /**
     * @hidden
     * @param {string[]} range - Specify the range.
     * @param {string} isAvgIf - Specify the AVERAGEIF computation.
     * @returns {number[] | string} - To compute the sum if and average if.
     */
    computeSumIfAndAvgIf(range: string[], isAvgIf: boolean): number[] | string;
    /**
     * @hidden
     * @param {string[]} range - specify the range
     * @returns {string} - to compute lookup
     */
    computeLookup(range: string[]): string;
    computeVHLookup(range: string[], isVlookup?: boolean): string;
    private findClosestMatch;
    private compareStrings;
    findWildCardValue(lookVal: string, cellValue: string): string;
    /**
     * @hidden
     * @param {string[] | string} criteriaRange - Specifies the criteria reange.
     * @param {string[] | string} sumRange - Specifies the sum range.
     * @param {string} criteria - Specifies the criteria against which values are checked.
     * @param {number} checkCriteria - Specifies the check criteria value.
     * @param {string} op - Specifies the operator value.
     * @param {boolean} isAsterisk - Indicates whether asterisk (*) is used as a wildcard or not.
     * @param {boolean} isQuestionMark - Indicates whether question mark (?) is used as a wildcard or not.
     * @returns {number[]} - Returns computed sum if value.
     */
    getComputeSumIfValue(criteriaRange: string[] | string, sumRange: string[] | string, criteria: string, checkCriteria: number, op: string, isAsterisk: boolean, isQuestionMark: boolean): number[];
    private getValueFromRange;
    /**
     * @hidden
     * @param {string[]} args - specifies the args
     * @param {string} op - specify the operator.
     * @returns {string} - Compute and or.
     */
    computeAndOrNot(args: string[], op: string): string;
    /**
     * @hidden
     * @param {string} text - specify the text
     * @returns {string} - to strip out the tic from the formula arguments.
     */
    removeTics(text: string): string;
    /**
     * @hidden
     * @param {string} range - specify the range
     * @returns {string} - to get cell from the range.
     */
    getCellFrom(range: string): string;
    private computeValue;
    private getValArithmetic;
    /**
     * Used to perform logical operation between two values.
     *
     * @hidden
     * @param {string[]} stack - Specifies the values that are used to perform the logical operation.
     * @param {string} operator - Specifies the logical operator.
     * @param {string[]} emptyStack - Specifies the values that are used to perform the logical operation for empty string value case.
     * @returns {string} - It returns whether the logical operation is TRUE or FALSE.
     */
    processLogical(stack: string[], operator: string, emptyStack?: string[]): string;
    /**
     * @hidden
     * @param {StoredCellInfo} sCell - specified the cell information
     * @returns {string[]} - compute stored cells
     */
    computeStoreCells(sCell: StoredCellInfo): string[];
    computeIfsFormulas(range: string[], isCountIfs?: string, isAvgIfs?: string): string | number;
    computeCountIfsFormulas(range: string[]): string | number;
    private getOperatorAndCriteria;
    private processNestedFormula;
    /**
     * @hidden
     * @param {string | number} value - Specify the value
     * @returns {boolean} -  Returns boolean value
     */
    isNaN(value: string | number): boolean;
    /**
     * @hidden
     * @param {string} val - Specifies the value.
     * @returns {boolean} - Returns boolean value.
     */
    isNumber(val: string | number): boolean;
    /**
     * @hidden
     * @param {number} doubleNumber - To specify the double number
     * @returns {Date} - Returns date.
     */
    fromOADate(doubleNumber: number): Date;
    /**
     * @hidden
     * @param {number} year - Specify the year.
     * @param {number} month - Specify the month.
     * @param {number} day - Specify the day.
     * @returns {number} -  to get serial date from date.
     */
    getSerialDateFromDate(year: number, month: number, day: number): number;
    /**
     * @hidden
     * @param {string | number} value - Specify the Time
     * @returns {string} -  returns to time.
     */
    intToTime(value: string | number): Date;
    /**
     * @hidden
     * @param {Date} dateTime - Specify the date Time
     * @param {boolean} isTime - Specify the boolean value.
     * @param {boolean} isTimeOnly - Specify the value is only a time without date.
     * @returns {number} -  returns to date.
     */
    toOADate(dateTime: Date, isTime?: boolean, isTimeOnly?: boolean): number;
    /**
     * @hidden
     * @param {string} date - Specify the date
     * @returns {string} -  returns calculate Date
     */
    calculateDate(date: string): string;
    /**
     * @hidden
     * @param {string} s - Specify the s
     * @returns {boolean} -  returns boolean value.
     */
    isTextEmpty(s: string): boolean;
    /**
     * @hidden
     * @param {string} text - Specify the text
     * @returns {boolean} -  returns boolean value.
     */
    isDigit(text: string): boolean;
    /**
     * @hidden
     * @param {string} condition - Specify the text
     * @returns {string} -  returns text value.
     */
    getANDComputedValue(condition: string): string;
    private findLastIndexOfq;
    /**
     * To get the exact value from argument.
     *
     * @param {string} val - Formula argument for getting a exact value.
     * @param {boolean} isUnique - It specifies unique formula or not.
     * @param {boolean} isIfError - It specifies `IFERROR` formula or not.
     * @param {boolean} isSubtotal - It specifies subtotal formula.
     * @param {boolean} isIFFormula - It specifies IF formula or not.
     * @returns {string} - To get the exact value from argument.
     */
    getValueFromArg(val: string, isUnique?: boolean, isIfError?: boolean, isSubtotal?: boolean, isIFFormula?: boolean): string;
    isDate(date: any): Date;
    /**
     * @hidden
     * @param {any} date - Specify the date
     * @returns {any} - Returns date value.
     */
    parseDate(date: any): any;
    checkDateFormat(date: string, pvtParse?: boolean, fromIsDate?: boolean): Date;
    /**
     * @hidden
     * @param {string} args - Specify the args
     * @returns {boolean} - Returns boolean value.
     */
    isCellReference(args: string): boolean;
    /**
     * @hidden
     * @param {string} text - Specify the text.
     * @returns {string} - set Tokens For Sheets.
     */
    setTokensForSheets(text: string): string;
    private getParentObjectCellValue;
    getCellValueFn(grid: Object, actCell: string, sheetId: number, updateDependentCell?: boolean, refresh?: boolean, isUnique?: boolean, isSubtotal?: boolean): (row: number, col: number, curCell: string) => string;
    private isValidCell;
    /**
     * Returns the Sheet ID based on parent object reference.
     *
     * @hidden
     * @param {Object} grd - Specify the parent object reference.
     * @returns {number} - Returns the Sheet ID.
     */
    getSheetId(grd: Object): number;
    /**
     * Getting the formula result.
     *
     * @param {Object} grid - Specifies the parent object.
     * @param {number} row - Row index of the parent object or key.
     * @param {number} col - Column index of the parent object.
     * @returns {string} - Getting the formula result.
     */
    getValueRowCol(grid: Object, row: number, col: number): string;
    /**
     * Registers a custom formula function to use in the spreadsheet.
     *
     * @param {string} formulaName - Specifies the name to display for the custom formula.
     * @param {string | Function} functionName - Specifies the function or its name to use as the custom formula logic.
     * @param {string} [formulaDescription] - Specifies the description of the custom formula in the Insert function dialog for help.
     * @param {string} [category] - Specifies the category to group the formula in the Insert Function dialog.
     * {% codeBlock src='spreadsheet/addCustomFunction/index.md' %}{% endcodeBlock %}
     * @returns {void} - Registers the custom formula in spreadsheet.
     */
    defineFunction(formulaName: string, functionName: string | Function, formulaDescription: string, category: string): void;
    /**
     * Specifies when changing the value.
     *
     * @param {string} grid - Parent object reference name.
     * @param {ValueChangedArgs} changeArgs - Value changed arguments.
     * @param {boolean} isCalculate - Value that allow to calculate.
     * @param {number[]} usedRangeCol - Specify the used range collection.
     * @param {boolean} refresh - Specifies for refreshing the value.
     * @param {string} sheetName - Specifies for sheet name for spreadsheet.
     * @param {boolean} isRandomFormula - Specifies for random formula values.
     * @param {boolean} randomFormulaRefreshing - Specifies for refreshing the random formula.
     * @param {boolean} isDelete - An optional flag indicating whether is from delete cells.
     * @param {number[]} deletedRange - An optional range array indicating the deleted cells.
     * @param {boolean} refreshDependentCells - Specifies dependent cell values are need to update or not.
     * @param {string} action - Specifies calculating option.
     * @returns {void} - Specifies when changing the value.
     */
    valueChanged(grid: string, changeArgs: ValueChangedArgs, isCalculate?: boolean, usedRangeCol?: number[], refresh?: boolean, sheetName?: string, isRandomFormula?: boolean, randomFormulaRefreshing?: boolean, isDelete?: boolean, deletedRange?: number[], refreshDependentCells?: boolean, action?: string): void;
    /**
     * @hidden
     * @param {number} value - specify the value
     * @param {string | number} formulaValue -  specify the formula value.
     * @param {number} row - specify the row
     * @param {number} col - specify the col.
     * @returns {void} - to set value row and column.
     */
    setValueRowCol(value: number, formulaValue: string | number, row: number, col: number): void;
    private getSortedSheetNames;
    /**
     * @hidden
     * @param {string} error -  specify the string
     * @returns {string} - to get error line.
     */
    getErrorLine(error: string): string;
    /** @hidden
     * @returns {number} - to return the sheet id
     */
    createSheetFamilyID(): number;
    /**
     * @hidden
     * @param {string[]} args - Specify the args.
     * @param {string} operation - Specify the operation.
     * @returns {string} - To compute min max.
     */
    computeMinMax(args: string[], operation: string): string;
    /**
     * @hidden
     * @param {string[]} args - Specify the args.
     * @param {boolean} isSubtotalFormula - Specify the args is from subtotal formula or not.
     * @returns {string} - to calculate average.
     */
    calculateAvg(args: string[], isSubtotalFormula?: boolean): string;
    /**
     * @hidden
     * @param {string} refName - specify the reference name.
     * @param {Object | string } model - model - Specify the model.model
     * @param {number} sheetFamilyID - specify the sheet family id.
     * @returns {string} - register Grid As Sheet.
     */
    registerGridAsSheet(refName: string, model: Object | string, sheetFamilyID: number): string;
    /**
     * @hidden
     * @param {string} refName - Specify the reference name
     * @param {string | Object} model - Specify the model
     * @param {boolean} unRegisterAll - Un registed all the availbe model.
     * @returns {void} - To un register grid sheet.
     */
    unregisterGridAsSheet(refName: string, model: string | Object, unRegisterAll?: boolean): void;
    /**
     * @hidden
     * @param {string} formula - Specify the formula.
     * @param {boolean} isFromComputeExpression - Specifies to confirm it was called from the ComputeExpression function.
     * @returns {string | number} - To compute the expression.
     */
    computeExpression(formula: string, isFromComputeExpression?: boolean): string | number;
    private isSheetMember;
    /**
     * To dispose the calculate engine.
     *
     * @returns {void} - To dispose the calculate engine.
     */
    dispose(): void;
    refreshRandValues(cellRef: string): void;
    refresh(cellRef: string, uniqueCell?: string, dependentCell?: string[], isRandomFormula?: boolean, isDelete?: boolean, deletedRange?: number[], refreshDependentCells?: boolean, action?: string): void;
}
/** @hidden */
export declare class FormulaError {
    /**
     * @hidden
     */
    message: string;
    formulaCorrection: boolean;
    constructor(errorMessage: string, formulaAutoCorrection?: boolean);
}
/** @hidden */
export declare class FormulaInfo {
    /**
     * @hidden
     */
    calcID: number;
    /**
     * @hidden
     */
    formulaText: string;
    private formulaValue;
    private parsedFormula;
    private calcID1;
    /**
     * @hidden
     * @returns {void} - To get Formula Text
     */
    getFormulaText(): string;
    /**
     * @hidden
     * @param {string} value - Specify the value
     * @returns {void} - To set Formula Text
     */
    setFormulaText(value: string): void;
    /**
     * @hidden
     * @returns {string} - To get Formula Value
     */
    getFormulaValue(): string | number;
    /**
     * @hidden
     * @param {string | number} value - Specify the value
     * @returns {void} - To set Parsed Formula
     */
    setFormulaValue(value: string | number): void;
    /**
     * @hidden
     * @returns {string} - To get Parsed Formula
     */
    getParsedFormula(): string;
    /**
     * @hidden
     * @param {string} value - Specify the value
     * @returns {void} - To set Parsed Formula
     */
    setParsedFormula(value: string): void;
}
/** @hidden */
export declare class CalcSheetFamilyItem {
    /**
     * @hidden
     */
    isSheetMember: boolean;
    /**
     * @hidden
     */
    parentObjectToToken: Map<Object, string>;
    /**
     * @hidden
     */
    sheetDependentFormulaCells: Map<string, Map<string, string>>;
    /**
     * @hidden
     */
    sheetNameToParentObject: Map<string, Object>;
    /**
     * @hidden
     */
    sheetNameToToken: Map<string, string>;
    /**
     * @hidden
     */
    tokenToParentObject: Map<string, Object>;
    /**
     * @hidden
     */
    sheetFormulaInfotable: Map<string, FormulaInfo>;
}
/**
 * @hidden
 * @param {number} col - Specify the column
 * @returns {string} - To returns get Alphalabel.
 */
export declare function getAlphalabel(col: number): string;
export declare class ValueChangedArgs {
    /** @hidden */
    row: number;
    /** @hidden */
    col: number;
    /** @hidden */
    value: number | string;
    /** @hidden */
    getRowIndex: Function;
    /** @hidden */
    setRowIndex: Function;
    /** @hidden */
    getColIndex: Function;
    /** @hidden */
    setColIndex: Function;
    /** @hidden */
    getFormulaValue: Function;
    constructor(row: number, col: number, value: number | string);
}
