import type { DisplayObject } from '../display-objects';
import type { IElement } from '../dom';
import type { StyleValueRegistry } from './interfaces';
export type CSSPropertySyntaxFactory =
(syntax: string) => CSSProperty
;
export type Interpolatable = number | boolean | number[] | boolean[];
type CSSPropertyMixer = (left: Parsed, right: Parsed, displayObject: IElement | null) => [T, T, (i: T) => string | any] | undefined;
type CSSPropertyParser = (value: string | any, object: DisplayObject) => Parsed;
type CSSPropertyCalculator = (name: string, oldParsed: Parsed, parsed: Parsed, object: IElement, registry: StyleValueRegistry) => Used;
/**
* 1. parser: raw CSS string -> Computed Value
* 2. calculator: Computed Value -> Used Value
* 3. mixer(in animation system): Used Value -> new Used Value
* 4. post processor
*/
export interface CSSProperty {
/**
* parse CSS string to CSSStyleValue
*
* @example
* '10' -> CSS.number(10)
* '10px' -> CSS.px(10)
* '180deg' -> CSS.deg(180)
*/
parser: CSSPropertyParser;
parserWithCSSDisabled: CSSPropertyParser;
/**
* convert parsed value to used value.
* eg. in `lineWidth`, convert [CSSUnitValue] to [CSSUnitValue, CSSUnitValue]
*
* in Blink, it convert a CSSValue to an appropriate platform value
*/
calculator: CSSPropertyCalculator;
/**
* used with interpolation in animation system
*/
mixer: CSSPropertyMixer;
preProcessor: (object: IElement) => void;
/**
* eg. update local position after x/y/z caculated
*/
postProcessor: (object: IElement, attributes: string[]) => void;
}
export {};
//# sourceMappingURL=CSSProperty.d.ts.map