import type { Color, InitSignal, Locale, NewSignal, RangeConfig, RangeScheme, SignalRef } from 'vega';
import { Axis, AxisConfigMixins } from './axis.js';
import { CompositeMarkConfigMixins } from './compositemark/index.js';
import { ExprRef } from './expr.js';
import { HeaderConfigMixins } from './header.js';
import { LegendConfig } from './legend.js';
import { AnyMarkConfig, MarkConfig, MarkConfigMixins } from './mark.js';
import { ProjectionConfig } from './projection.js';
import { ScaleConfig } from './scale.js';
import { SelectionConfig } from './selection.js';
import { BaseViewBackground, CompositionConfigMixins } from './spec/base.js';
import { TopLevelProperties } from './spec/toplevel.js';
import { TitleConfig } from './title.js';
export interface ViewConfig<ES extends ExprRef | SignalRef> extends BaseViewBackground<ES> {
    /**
     * The default width when the plot has a continuous field for x or longitude, or has arc marks.
     *
     * __Default value:__ `300`
     */
    continuousWidth?: number;
    /**
     * The default width when the plot has non-arc marks and either a discrete x-field or no x-field.
     * The width can be either a number indicating a fixed width or an object in the form of `{step: number}` defining the width per discrete step.
     *
     * __Default value:__ a step size based on `config.view.step`.
     */
    discreteWidth?: number | {
        step: number;
    };
    /**
     * The default height when the plot has a continuous y-field for x or latitude, or has arc marks.
     *
     * __Default value:__ `300`
     */
    continuousHeight?: number;
    /**
     * The default height when the plot has non arc marks and either a discrete y-field or no y-field.
     * The height can be either a number indicating a fixed height or an object in the form of `{step: number}` defining the height per discrete step.
     *
     * __Default value:__ a step size based on `config.view.step`.
     */
    discreteHeight?: number | {
        step: number;
    };
    /**
     * Default step size for x-/y- discrete fields.
     */
    step?: number;
    /**
     * Whether the view should be clipped.
     */
    clip?: boolean;
}
export declare function getViewConfigContinuousSize<ES extends ExprRef | SignalRef>(viewConfig: ViewConfig<ES>, channel: 'width' | 'height'): any;
export declare function getViewConfigDiscreteStep<ES extends ExprRef | SignalRef>(viewConfig: ViewConfig<ES>, channel: 'width' | 'height'): number;
export declare function getViewConfigDiscreteSize<ES extends ExprRef | SignalRef>(viewConfig: ViewConfig<ES>, channel: 'width' | 'height'): any;
export declare const DEFAULT_STEP = 20;
export declare const defaultViewConfig: ViewConfig<SignalRef>;
export declare function isVgScheme(rangeScheme: string[] | RangeScheme): rangeScheme is RangeScheme;
export type ColorConfig = Record<string, Color>;
export type FontSizeConfig = Record<string, number>;
export interface FormatConfig {
    /**
     * If numberFormatType is not specified,
     * D3 number format for guide labels, text marks, and tooltips of non-normalized fields (fields *without* `stack: "normalize"`). For example `"s"` for SI units.
     * Use [D3's number format pattern](https://github.com/d3/d3-format#locale_format).
     *
     * If `config.numberFormatType` is specified and `config.customFormatTypes` is `true`, this value will be passed as `format` alongside `datum.value` to the `config.numberFormatType` function.
     */
    numberFormat?: string;
    /**
     * [Custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type)
     * for `config.numberFormat`.
     *
     * __Default value:__ `undefined` -- This is equilvalent to call D3-format, which is exposed as [`format` in Vega-Expression](https://vega.github.io/vega/docs/expressions/#format).
     * __Note:__ You must also set `customFormatTypes` to `true` to use this feature.
     */
    numberFormatType?: string;
    /**
     * If normalizedNumberFormatType is not specified,
     * D3 number format for axis labels, text marks, and tooltips of normalized stacked fields (fields with `stack: "normalize"`). For example `"s"` for SI units.
     * Use [D3's number format pattern](https://github.com/d3/d3-format#locale_format).
     *
     * If `config.normalizedNumberFormatType` is specified and `config.customFormatTypes` is `true`, this value will be passed as `format` alongside `datum.value` to the `config.numberFormatType` function.
     * __Default value:__ `%`
     */
    normalizedNumberFormat?: string;
    /**
     * [Custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type)
     * for `config.normalizedNumberFormat`.
     *
     * __Default value:__ `undefined` -- This is equilvalent to call D3-format, which is exposed as [`format` in Vega-Expression](https://vega.github.io/vega/docs/expressions/#format).
     * __Note:__ You must also set `customFormatTypes` to `true` to use this feature.
     */
    normalizedNumberFormatType?: string;
    /**
     * Default time format for raw time values (without time units) in text marks, legend labels and header labels.
     *
     * __Default value:__ `"%b %d, %Y"`
     * __Note:__ Axes automatically determine the format for each label automatically so this config does not affect axes.
     */
    timeFormat?: string;
    /**
     * [Custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type)
     * for `config.timeFormat`.
     *
     * __Default value:__ `undefined` -- This is equilvalent to call D3-time-format, which is exposed as [`timeFormat` in Vega-Expression](https://vega.github.io/vega/docs/expressions/#timeFormat).
     * __Note:__ You must also set `customFormatTypes` to `true` and there must *not* be a `timeUnit` defined to use this feature.
     */
    timeFormatType?: string;
}
export interface VLOnlyConfig<ES extends ExprRef | SignalRef> extends FormatConfig {
    /**
     * Default font for all text marks, titles, and labels.
     */
    font?: string;
    /**
     * Default color signals.
     *
     * @hidden
     */
    color?: boolean | ColorConfig;
    /**
     * Default font size signals.
     *
     * @hidden
     */
    fontSize?: boolean | FontSizeConfig;
    /**
     * Default axis and legend title for count fields.
     *
     * __Default value:__ `'Count of Records`.
     *
     * @type {string}
     */
    countTitle?: string;
    /**
     * Defines how Vega-Lite generates title for fields. There are three possible styles:
     * - `"verbal"` (Default) - displays function in a verbal style (e.g., "Sum of field", "Year-month of date", "field (binned)").
     * - `"function"` - displays function using parentheses and capitalized texts (e.g., "SUM(field)", "YEARMONTH(date)", "BIN(field)").
     * - `"plain"` - displays only the field name without functions (e.g., "field", "date", "field").
     */
    fieldTitle?: 'verbal' | 'functional' | 'plain';
    /**
     * Allow the `formatType` property for text marks and guides to accept a custom formatter function [registered as a Vega expression](https://vega.github.io/vega-lite/usage/compile.html#format-type).
     */
    customFormatTypes?: boolean;
    /**
     * Define [custom format configuration](https://vega.github.io/vega-lite/docs/config.html#format) for tooltips. If unspecified, default format config will be applied.
     */
    tooltipFormat?: FormatConfig;
    /** Default properties for [single view plots](https://vega.github.io/vega-lite/docs/spec.html#single). */
    view?: ViewConfig<ES>;
    /**
     * Scale configuration determines default properties for all [scales](https://vega.github.io/vega-lite/docs/scale.html). For a full list of scale configuration options, please see the [corresponding section of the scale documentation](https://vega.github.io/vega-lite/docs/scale.html#config).
     */
    scale?: ScaleConfig<ES>;
    /** An object hash for defining default properties for each type of selections. */
    selection?: SelectionConfig;
}
export type StyleConfigIndex<ES extends ExprRef | SignalRef> = Partial<Record<string, AnyMarkConfig<ES> | Axis<ES>>> & MarkConfigMixins<ES> & {
    /**
     * Default style for axis, legend, and header titles.
     */
    'guide-title'?: MarkConfig<ES>;
    /**
     * Default style for axis, legend, and header labels.
     */
    'guide-label'?: MarkConfig<ES>;
    /**
     * Default style for chart titles
     */
    'group-title'?: MarkConfig<ES>;
    /**
     * Default style for chart subtitles
     */
    'group-subtitle'?: MarkConfig<ES>;
};
export interface Config<ES extends ExprRef | SignalRef = ExprRef | SignalRef> extends TopLevelProperties<ES>, VLOnlyConfig<ES>, MarkConfigMixins<ES>, CompositeMarkConfigMixins, AxisConfigMixins<ES>, HeaderConfigMixins<ES>, CompositionConfigMixins {
    /**
     * An object hash that defines default range arrays or schemes for using with scales.
     * For a full list of scale range configuration options, please see the [corresponding section of the scale documentation](https://vega.github.io/vega-lite/docs/scale.html#config).
     */
    range?: RangeConfig;
    /**
     * Legend configuration, which determines default properties for all [legends](https://vega.github.io/vega-lite/docs/legend.html). For a full list of legend configuration options, please see the [corresponding section of in the legend documentation](https://vega.github.io/vega-lite/docs/legend.html#config).
     */
    legend?: LegendConfig<ES>;
    /**
     * Title configuration, which determines default properties for all [titles](https://vega.github.io/vega-lite/docs/title.html). For a full list of title configuration options, please see the [corresponding section of the title documentation](https://vega.github.io/vega-lite/docs/title.html#config).
     */
    title?: TitleConfig<ES>;
    /**
     * Projection configuration, which determines default properties for all [projections](https://vega.github.io/vega-lite/docs/projection.html). For a full list of projection configuration options, please see the [corresponding section of the projection documentation](https://vega.github.io/vega-lite/docs/projection.html#config).
     */
    projection?: ProjectionConfig;
    /** An object hash that defines key-value mappings to determine default properties for marks with a given [style](https://vega.github.io/vega-lite/docs/mark.html#mark-def). The keys represent styles names; the values have to be valid [mark configuration objects](https://vega.github.io/vega-lite/docs/mark.html#config). */
    style?: StyleConfigIndex<ES>;
    /**
     * A delimiter, such as a newline character, upon which to break text strings into multiple lines. This property provides a global default for text marks, which is overridden by mark or style config settings, and by the lineBreak mark encoding channel. If signal-valued, either string or regular expression (regexp) values are valid.
     */
    lineBreak?: string | ES;
    /**
     * A boolean flag indicating if ARIA default attributes should be included for marks and guides (SVG output only). If false, the `"aria-hidden"` attribute will be set for all guides, removing them from the ARIA accessibility tree and Vega-Lite will not generate default descriptions for marks.
     *
     * __Default value:__ `true`.
     */
    aria?: boolean;
    /**
     * Locale definitions for string parsing and formatting of number and date values. The locale object should contain `number` and/or `time` properties with [locale definitions](https://vega.github.io/vega/docs/api/locale/). Locale definitions provided in the config block may be overridden by the View constructor locale option.
     */
    locale?: Locale;
    /**
     * @hidden
     */
    signals?: (InitSignal | NewSignal)[];
}
export declare const defaultConfig: Config<SignalRef>;
export declare const DEFAULT_FONT_SIZE: {
    text: number;
    guideLabel: number;
    guideTitle: number;
    groupTitle: number;
    groupSubtitle: number;
};
export declare const DEFAULT_COLOR: {
    blue: string;
    orange: string;
    red: string;
    teal: string;
    green: string;
    yellow: string;
    purple: string;
    pink: string;
    brown: string;
    gray0: string;
    gray1: string;
    gray2: string;
    gray3: string;
    gray4: string;
    gray5: string;
    gray6: string;
    gray7: string;
    gray8: string;
    gray9: string;
    gray10: string;
    gray11: string;
    gray12: string;
    gray13: string;
    gray14: string;
    gray15: string;
};
export declare function colorSignalConfig(color?: boolean | ColorConfig): Config;
export declare function fontSizeSignalConfig(fontSize: boolean | FontSizeConfig): Config;
export declare function fontConfig(font: string): Config;
/**
 * Merge specified config with default config and config for the `color` flag,
 * then replace all expressions with signals
 */
export declare function initConfig(specifiedConfig?: Config): Config<SignalRef>;
export declare function stripAndRedirectConfig(config: Config<SignalRef>): Config<SignalRef>;
//# sourceMappingURL=config.d.ts.map