import { AggregateOp, ColorValueRef, Compare as VgCompare, ExprRef as VgExprRef, Field as VgField, GeoShapeTransform as VgGeoShapeTransform, LayoutAlign, NumericValueRef, ProjectionType, RangeBand, RangeRaw, RangeScheme, ScaleData, ScaledValueRef, SignalRef, SortField as VgSortField, Title as VgTitle, Transforms as VgTransform, UnionSortField as VgUnionSortField } from 'vega-typings';
import { ValueOrGradientOrText } from './channeldef';
import { NiceTime, ScaleType } from './scale';
import { SortOrder } from './sort';
export { VgSortField, VgUnionSortField, VgCompare, VgTitle, LayoutAlign, ProjectionType, VgExprRef };
declare type ExcludeMapped<T, E> = {
    [P in keyof T]: Exclude<T[P], E>;
};
export declare type ExcludeMappedValueRef<T> = ExcludeMapped<T, ScaledValueRef<any> | NumericValueRef | ColorValueRef>;
export declare type ExcludeMappedValueRefButKeepSignal<T> = ExcludeMapped<T, Exclude<ScaledValueRef<any> | NumericValueRef | ColorValueRef, SignalRef>>;
export declare type ExcludeMappedSignalRefs<T> = ExcludeMapped<T, SignalRef>;
export interface VgData {
    name: string;
    source?: string;
    values?: any;
    format?: {
        type?: string;
        parse?: string | object;
        property?: string;
        feature?: string;
        mesh?: string;
    };
    url?: string;
    transform?: VgTransform[];
}
export interface VgDataRef {
    data: string;
    field: VgField;
    sort?: VgSortField;
}
export declare function isSignalRef(o: any): o is SignalRef;
export interface VgValueRef {
    value?: ValueOrGradientOrText | number[];
    field?: string | {
        datum?: string;
        group?: string;
        parent?: string;
    };
    signal?: string;
    scale?: string;
    mult?: number;
    offset?: number | VgValueRef;
    band?: boolean | number | VgValueRef;
    test?: string;
}
export interface DataRefUnionDomain {
    fields: (any[] | VgDataRef | SignalRef)[];
    sort?: VgUnionSortField;
}
export interface VgFieldRefUnionDomain {
    data: string;
    fields: VgField[];
    sort?: VgUnionSortField;
}
export declare type VgRange = RangeScheme | ScaleData | RangeBand | RangeRaw;
export declare function isVgRangeStep(range: VgRange): range is VgRangeStep;
export interface VgRangeStep {
    step: number | SignalRef;
}
export declare type VgNonUnionDomain = any[] | VgDataRef | SignalRef;
export declare type VgDomain = VgNonUnionDomain | DataRefUnionDomain | VgFieldRefUnionDomain;
export declare type VgMarkGroup = any;
export interface VgScale {
    name: string;
    type: ScaleType;
    align?: number;
    domain?: VgDomain;
    domainMid?: number;
    domainRaw?: SignalRef;
    bins?: number[] | SignalRef;
    range: VgRange;
    clamp?: boolean;
    base?: number;
    exponent?: number;
    constant?: number;
    interpolate?: ScaleInterpolate | ScaleInterpolateParams;
    nice?: boolean | number | NiceTime | {
        interval: string;
        step: number;
    };
    padding?: number;
    paddingInner?: number;
    paddingOuter?: number;
    reverse?: boolean;
    round?: boolean;
    zero?: boolean;
}
export declare type ScaleInterpolate = 'rgb' | 'lab' | 'hcl' | 'hsl' | 'hsl-long' | 'hcl-long' | 'cubehelix' | 'cubehelix-long';
export interface ScaleInterpolateParams {
    type: 'rgb' | 'cubehelix' | 'cubehelix-long';
    gamma?: number;
}
export interface RowCol<T> {
    row?: T;
    column?: T;
}
export interface VgLayout {
    center?: boolean | RowCol<boolean>;
    padding?: number | RowCol<number>;
    headerBand?: number | RowCol<number>;
    footerBand?: number | RowCol<number>;
    titleAnchor?: 'start' | 'end' | RowCol<'start' | 'end'>;
    offset?: number | {
        rowHeader?: number;
        rowFooter?: number;
        rowTitle?: number;
        columnHeader?: number;
        columnFooter?: number;
        columnTitle?: number;
    };
    bounds?: 'full' | 'flush';
    columns?: number | {
        signal: string;
    };
    align?: LayoutAlign | RowCol<LayoutAlign>;
}
export declare function isDataRefUnionedDomain(domain: VgDomain): domain is DataRefUnionDomain;
export declare function isFieldRefUnionDomain(domain: VgDomain): domain is VgFieldRefUnionDomain;
export declare function isDataRefDomain(domain: VgDomain): domain is VgDataRef;
export declare type VgEncodeChannel = 'x' | 'x2' | 'xc' | 'width' | 'y' | 'y2' | 'yc' | 'height' | 'opacity' | 'fill' | 'fillOpacity' | 'stroke' | 'strokeWidth' | 'strokeCap' | 'strokeOpacity' | 'strokeDash' | 'strokeDashOffset' | 'strokeMiterLimit' | 'strokeJoin' | 'strokeOffset' | 'strokeForeground' | 'cursor' | 'clip' | 'size' | 'shape' | 'path' | 'innerRadius' | 'outerRadius' | 'startAngle' | 'endAngle' | 'interpolate' | 'tension' | 'orient' | 'url' | 'align' | 'baseline' | 'text' | 'dir' | 'ellipsis' | 'limit' | 'dx' | 'dy' | 'radius' | 'theta' | 'angle' | 'font' | 'fontSize' | 'fontWeight' | 'fontStyle' | 'tooltip' | 'href' | 'cursor' | 'defined' | 'cornerRadius' | 'cornerRadiusTopLeft' | 'cornerRadiusTopRight' | 'cornerRadiusBottomRight' | 'cornerRadiusBottomLeft' | 'scaleX' | 'scaleY';
export declare type VgEncodeEntry = {
    [k in VgEncodeChannel]?: VgValueRef | (VgValueRef & {
        test?: string;
    })[];
};
export declare type VgPostEncodingTransform = VgGeoShapeTransform;
export declare type VgGuideEncode = any;
export declare type StrokeCap = 'butt' | 'round' | 'square';
export declare type StrokeJoin = 'miter' | 'round' | 'bevel';
export declare type Dir = 'ltr' | 'rtl';
export declare const VG_MARK_CONFIGS: ("stroke" | "shape" | "text" | "width" | "height" | "tooltip" | "aspect" | "fill" | "opacity" | "fillOpacity" | "strokeOpacity" | "strokeWidth" | "strokeDash" | "strokeDashOffset" | "strokeOffset" | "strokeCap" | "strokeJoin" | "strokeMiterLimit" | "orient" | "interpolate" | "tension" | "size" | "align" | "angle" | "baseline" | "dir" | "dx" | "dy" | "ellipsis" | "radius" | "limit" | "lineBreak" | "lineHeight" | "theta" | "font" | "fontSize" | "fontStyle" | "fontWeight" | "href" | "cursor" | "cornerRadius" | "cornerRadiusTopLeft" | "cornerRadiusTopRight" | "cornerRadiusBottomRight" | "cornerRadiusBottomLeft")[];
export declare const VG_CORNERRADIUS_CHANNELS: readonly ["cornerRadius", "cornerRadiusTopLeft", "cornerRadiusTopRight", "cornerRadiusBottomLeft", "cornerRadiusBottomRight"];
export interface VgComparator {
    field?: string | string[];
    order?: SortOrder | SortOrder[];
}
export interface VgJoinAggregateTransform {
    type: 'joinaggregate';
    as?: string[];
    ops?: AggregateOp[];
    fields?: string[];
    groupby?: string[];
}
//# sourceMappingURL=vega.schema.d.ts.map