/** * borrow from gradient-parser, but we delete some browser compatible prefix such as `-webkit-` * @see https://github.com/rafaelcaricio/gradient-parser */ export interface LinearGradientNode { type: 'linear-gradient'; orientation?: DirectionalNode | AngularNode | undefined; colorStops: ColorStop[]; } export interface RepeatingLinearGradientNode { type: 'repeating-linear-gradient'; orientation?: DirectionalNode | AngularNode | undefined; colorStops: ColorStop[]; } export interface RadialGradientNode { type: 'radial-gradient'; orientation?: (ShapeNode | DefaultRadialNode | ExtentKeywordNode)[] | undefined; colorStops: ColorStop[]; } export interface ConicGradientNode { type: 'conic-gradient'; orientation?: (ShapeNode | DefaultRadialNode | ExtentKeywordNode)[] | undefined; colorStops: ColorStop[]; } export interface RepeatingRadialGradientNode { type: 'repeating-radial-gradient'; orientation?: (ShapeNode | DefaultRadialNode | ExtentKeywordNode)[] | undefined; colorStops: ColorStop[]; } export interface DirectionalNode { type: 'directional'; value: 'left' | 'top' | 'bottom' | 'right' | 'left top' | 'top left' | 'left bottom' | 'bottom left' | 'right top' | 'top right' | 'right bottom' | 'bottom right'; } export interface AngularNode { type: 'angular'; value: string; } export interface LiteralNode { type: 'literal'; value: string; length?: PxNode | EmNode | PercentNode | undefined; } export interface HexNode { type: 'hex'; value: string; length?: PxNode | EmNode | PercentNode | undefined; } export interface RgbNode { type: 'rgb'; value: [string, string, string]; length?: PxNode | EmNode | PercentNode | undefined; } export interface RgbaNode { type: 'rgba'; value: [string, string, string, string?]; length?: PxNode | EmNode | PercentNode | undefined; } export interface ShapeNode { type: 'shape'; style?: ExtentKeywordNode | PxNode | EmNode | PercentNode | PositionKeywordNode | undefined; value: 'ellipse' | 'circle'; at?: PositionNode | undefined; } export interface DefaultRadialNode { type: 'default-radial'; at: PositionNode; } export interface PositionKeywordNode { type: 'position-keyword'; value: 'center' | 'left' | 'top' | 'bottom' | 'right'; } export interface PositionNode { type: 'position'; value: { x: ExtentKeywordNode | PxNode | EmNode | PercentNode | PositionKeywordNode; y: ExtentKeywordNode | PxNode | EmNode | PercentNode | PositionKeywordNode; }; } export interface ExtentKeywordNode { type: 'extent-keyword'; value: 'closest-side' | 'closest-corner' | 'farthest-side' | 'farthest-corner' | 'contain' | 'cover'; at?: PositionNode | undefined; } export interface PxNode { type: 'px'; value: string; } export interface EmNode { type: 'em'; value: string; } export interface PercentNode { type: '%'; value: string; } export type ColorStop = LiteralNode | HexNode | RgbNode | RgbaNode; export type GradientNode = LinearGradientNode | RepeatingLinearGradientNode | RadialGradientNode | RepeatingRadialGradientNode | ConicGradientNode; export declare function colorStopToString(colorStop: ColorStop): string; export declare const parseGradientAST: (code: string) => GradientNode[]; export declare function computeLinearGradient(min: [number, number], width: number, height: number, angle: number): { x1: number; y1: number; x2: number; y2: number; }; export declare function computeConicGradient(min: [number, number], width: number, height: number, cx: { type: string; value: number; }, cy: { type: string; value: number; }): { x: number; y: number; }; export declare function computeRadialGradient(min: [number, number], width: number, height: number, cx: { type: string; value: number; }, cy: { type: string; value: number; }, size?: { type: string; value: number | string; }): { x: number; y: number; r: number; }; export interface LinearGradient { type: 'linear-gradient'; angle: number; steps: { offset: { type: string; value: number; }; color: string; }[]; } export interface RadialGradient { type: 'radial-gradient'; cx: { value: number; type: string; }; cy: { value: number; type: string; }; size?: { value: number | string; type: string; }; steps: { offset: { type: string; value: number; }; color: string; }[]; } export interface ConicGradient { type: 'conic-gradient'; cx: { value: number; type: string; }; cy: { value: number; type: string; }; angle: number; steps: { offset: { type: string; value: number; }; color: string; }[]; } export type Gradient = LinearGradient | RadialGradient | ConicGradient; export declare function isGradient(colorStr: string): boolean; export declare function parseGradient(colorStr: string): Gradient[];