import * as Specification from "../specification/specification"; import { BindingValue } from "../binding/binding"; export declare type ScaleArgument = BindingValue | ScaleBinding; export interface ScaleAttributeInfo { name: string; type: string; binding: BindingValue; } export interface ScaleBindingAttributeInfo extends ScaleAttributeInfo { scaleBinding: ScaleBinding; bindedName: string; } export declare class ScaleBinding { private _scale; private _returnType; private _argTypes; private _args; constructor(scale: Scale, returnType: string, argTypes: string[], ...args: ScaleArgument[]); getReturnType(): string; getAttributes(): ScaleBindingAttributeInfo[]; getExpression(attrs: { [name: string]: Specification.Expression; }): Specification.Expression; } export interface Scale { (...args: ScaleArgument[]): ScaleBinding; getExpression: (attrs: { [name: string]: Specification.Expression; }, ...values: Specification.Expression[]) => Specification.Expression; getAttributes: () => ScaleAttributeInfo[]; } export interface DomainRangeScale extends Scale { domain(): [BindingValue, BindingValue]; domain(value: [BindingValue, BindingValue]): DomainRangeScale; range(): [BindingValue, BindingValue]; range(value: [BindingValue, BindingValue]): DomainRangeScale; } export interface InterpolateScale extends Scale { t(): BindingValue; t(value: BindingValue): InterpolateScale; } export interface CustomScale extends Scale { attr(name: string): BindingValue; attr(name: string, value: BindingValue): CustomScale; attr(name: string, type: string, value: BindingValue): CustomScale; }