import { AbstractFormatter } from '../Formatter';
import { DataType, TypedValue } from '../DataPrimitive';
import { DataPoint } from '../DataPoint';
/**
 * @class FormatByType
 *
 * Formats the value based on the value type and the provided config. For example
 *
 * ```js
 <Table
    context = {{
        formattedConfig: {
            number: {
                unit: '$',
                unitPosition: 'before',
                precision: 2,
                thousandSeparated: true,
            },
        },
    }}

    options = {{
        columnFormat: {
            formatted: {
                data: '> table | seriesByName("formatted") | formatByType(formattedConfig)',
            },
        },
    }}

    dataSources = {{
        primary: {
            requestParams: { offset: 0, count: 20 },
            data: {
                fields: [
                    { name: 'number' },
                    { name: 'formatted' },
                ],
                columns: [
                    [-927916.96, -924916.9, -654089.75],
                    [-927916.96, -924916.9, -654089.75],
                ],
            },
            meta: { totalCount: 100 },
        },
    }}
 />
 * ```
 *
 *  ## Config Object
 *
 *  ### number
 *
 *  * **unit?**: `string` to be appended or prepended to the value
 *  * **unitPosition?**: `{"before" | "after"}` where should the `unit` be placed. Maps to numbro `prefix` or `postfix`
 *  * **numberPrecision?**: `number` maps to numbro `mantissa`
 *  * **mantissa?**: `number` number of decimal points to show
 *  * **trimMantissa?**: `boolean` ending 0s in decimal points will be trimmed
 *  * **thousandSeparated?**: `boolean` should show `,` for thousands
 *  * **output?**: `"currency" | "percent" | "byte" | "time" | "ordinal" | "number"` value will be converted to one of thse formats
 *  * **base?**: `"decimal" | "binary" | "general"` used for converting value to bytes
 *  * **prefix?**: `string` string to be added in front of the value
 *  * **postfix?**: `string` string to be appended to the value
 *  * **forceAverage?**: `"trillion" | "billion" | "million" | "thousand"` can be used to force one the selected average
 *  * **average?**: `boolean` rounds up the value to the closed average
 *  * **totalLength?**: `number` used only for `average`. The number length to format data in
 *  * **spaceSeparated?**: `boolean` used with `average` to introduce space between number and average
 *  * **abbreviations?**: `{
        thousand?: string;
        million?: string;
        billion?: string;
        trillion?: string;
    }` abbreviation values for averages.
 *  * **negative?**: `"sign" | "parenthesis"` display sign or parenthesis for negative numbers
 *  * **forceSign?**: `boolean` always show + or - sign
 *
 *
 *  * For examples, refer [Numbro](https://numbrojs.com/format.html#format)
 *
 * #### time
 *
 *  * **format**: valid moment format string.  Refer - [moment display](https://momentjs.com/docs/#/displaying/)
 *
 *
 *
 
 */
export declare class FormatByType extends AbstractFormatter {
    private config;
    constructor(config: Record<string, unknown>);
    protected formatTypedValue(p: DataPoint): TypedValue<DataType>;
}
