import { ImageLike } from '../core/types'; 
 | 
import { SVGVNode } from '../svg/core'; 
 | 
  
 | 
type ImagePatternRepeat = 'repeat' | 'repeat-x' | 'repeat-y' | 'no-repeat' 
 | 
  
 | 
export interface PatternObjectBase { 
 | 
    id?: number 
 | 
    // type is now unused, so make it optional 
 | 
    type?: 'pattern' 
 | 
  
 | 
    x?: number 
 | 
    y?: number 
 | 
    rotation?: number 
 | 
    scaleX?: number 
 | 
    scaleY?: number 
 | 
} 
 | 
  
 | 
export interface ImagePatternObject extends PatternObjectBase { 
 | 
    image: ImageLike | string 
 | 
    repeat?: ImagePatternRepeat 
 | 
  
 | 
    /** 
 | 
     * Width and height of image. 
 | 
     * `imageWidth` and `imageHeight` are only used in svg-ssr renderer. 
 | 
     * Because we can't get the size of image in svg-ssr renderer. 
 | 
     * They need to be give explictly. 
 | 
     */ 
 | 
    imageWidth?: number 
 | 
    imageHeight?: number 
 | 
} 
 | 
  
 | 
export interface InnerImagePatternObject extends ImagePatternObject { 
 | 
    // Cached image. Which is created in the canvas painter. 
 | 
    __image?: ImageLike 
 | 
} 
 | 
  
 | 
export interface SVGPatternObject extends PatternObjectBase { 
 | 
    /** 
 | 
     * svg vnode can only be used in svg renderer currently. 
 | 
     * svgWidth, svgHeight defines width and height used for pattern. 
 | 
     */ 
 | 
    svgElement?: SVGVNode 
 | 
    svgWidth?: number 
 | 
    svgHeight?: number 
 | 
} 
 | 
  
 | 
export type PatternObject = ImagePatternObject | SVGPatternObject 
 | 
  
 | 
class Pattern { 
 | 
  
 | 
    type: 'pattern' 
 | 
  
 | 
    image: ImageLike | string 
 | 
    /** 
 | 
     * svg element can only be used in svg renderer currently. 
 | 
     * 
 | 
     * Will be string if using SSR rendering. 
 | 
     */ 
 | 
    svgElement: SVGElement | string 
 | 
  
 | 
    repeat: ImagePatternRepeat 
 | 
  
 | 
    x: number 
 | 
    y: number 
 | 
    rotation: number 
 | 
    scaleX: number 
 | 
    scaleY: number 
 | 
  
 | 
    constructor(image: ImageLike | string, repeat: ImagePatternRepeat) { 
 | 
        // Should do nothing more in this constructor. Because gradient can be 
 | 
        // declard by `color: {image: ...}`, where this constructor will not be called. 
 | 
        this.image = image; 
 | 
        this.repeat = repeat; 
 | 
  
 | 
        this.x = 0; 
 | 
        this.y = 0; 
 | 
        this.rotation = 0; 
 | 
        this.scaleX = 1; 
 | 
        this.scaleY = 1; 
 | 
    } 
 | 
} 
 | 
  
 | 
export default Pattern; 
 |