Advertisement
Guest User

Untitled

a guest
Apr 7th, 2020
902
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
JSON 53.82 KB | None | 0 0
  1. // Type definitions for @svgdotjs version 3.x
  2. // Project: @svgdotjs/svg.js
  3.  
  4. // trick to keep reference to Array build-in type
  5. declare class BuiltInArray<T> extends Array<T> { }
  6.  
  7. declare module "@svgdotjs/svg.js" {
  8.  
  9.     function SVG(): Svg;
  10.     function SVG(selector: QuerySelector): Element;
  11.     function SVG<T>(el: T): SVGTypeMapping<T>
  12.     function SVG(domElement: HTMLElement): Element;
  13.  
  14.     function eid(name: string): string;
  15.     function get(id: string): Element;
  16.  
  17.     function create(name: string): any;
  18.     function extend(parent: Object, obj: Object): void;
  19.     function invent(config: Object): any;
  20.     function adopt(node: HTMLElement): Element;
  21.     function prepare(element: HTMLElement): void;
  22.     function getClass(name: string): Element;
  23.  
  24.     function on(el: Node, events: string, cb: EventListener, binbind?: any, options?: AddEventListenerOptions): void;
  25.     function on(el: Node, events: Event[], cb: EventListener, binbind?: any, options?: AddEventListenerOptions): void;
  26.  
  27.     function off(el: Node, events?: string, cb?: EventListener | number): void;
  28.     function off(el: Node, events?: Event[], cb?: EventListener | number): void;
  29.  
  30.     function dispatch(node: Node, event: Event, data?: Object): Event
  31.  
  32.     function find(query: QuerySelector): List<Element>
  33.     function findOne(query: QuerySelector): Element
  34.  
  35.     let utils: {
  36.         map(array: any[], block: Function): any;
  37.         filter(array: any[], block: Function): any;
  38.         radians(d: number): number;
  39.         degrees(r: number): number;
  40.         filterSVGElements: HTMLElement[]
  41.     }
  42.     let defaults: {
  43.         attrs: {
  44.             'fill-opacity': number;
  45.             'stroke-opacity': number;
  46.             'stroke-width': number;
  47.             'stroke-linejoin': string;
  48.             'stroke-linecap': string;
  49.             'fill': string;
  50.             'stroke': string;
  51.             'opacity': number;
  52.             'x': number;
  53.             'y': number;
  54.             'cx': number;
  55.             'cy': number;
  56.             'width': number;
  57.             'height': number;
  58.             'r': number;
  59.             'rx': number;
  60.             'ry': number;
  61.             'offset': number;
  62.             'stop-opacity': number;
  63.             'stop-color': string;
  64.             'font-size': number;
  65.             'font-family': string;
  66.             'text-anchor': string;
  67.         },
  68.         timeline: {
  69.             duration: number;
  70.             ease: string;
  71.             delay: number;
  72.         }
  73.  
  74.     }
  75.  
  76.     let easing: {
  77.         '-'(pos: number): number;
  78.         '<>'(pos: number): number;
  79.         '>'(pos: number): number;
  80.         '<'(pos: number): number;
  81.         bezier(x1: number, y1: number, x2: number, y2: number): (t: number) => number;
  82.         steps(steps: number, stepPosition?: string): (t: number, beforeFlag?: boolean) => number;
  83.     }
  84.  
  85.     let regex: {
  86.         delimiter: RegExp;
  87.         dots: RegExp;
  88.         hex: RegExp;
  89.         hyphen: RegExp;
  90.         isBlank: RegExp;
  91.         isCss: RegExp;
  92.         isHex: RegExp;
  93.         isImage: RegExp;
  94.         isNumber: RegExp;
  95.         isPathLetter: RegExp;
  96.         isPercent: RegExp;
  97.         isRgb: RegExp;
  98.         numberAndUnit: RegExp;
  99.         numbersWithDots: RegExp;
  100.         pathLetters: RegExp;
  101.         reference: RegExp;
  102.         rgb: RegExp;
  103.         transforms: RegExp;
  104.         whitespace: RegExp;
  105.     }
  106.  
  107.     let namespaces: {
  108.         ns: string;
  109.         xmlns: string;
  110.         xlink: string;
  111.         svgjs: string;
  112.     }
  113.  
  114.     interface LinkedHTMLElement extends HTMLElement {
  115.         instance: Element;
  116.     }
  117.  
  118.     // ************ Standard object/option/properties declaration ************
  119.  
  120.     type AttrNumberValue = number | "auto"
  121.  
  122.     /**
  123.      * The SVG core attributes are all the common attributes that can be specified on any SVG element.
  124.      * More information see https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/Core
  125.      */
  126.     interface CoreAttr {
  127.         id?: string
  128.         lang?: string
  129.         tabindex?: number
  130.         "xml:lang"?: string
  131.     }
  132.  
  133.     /**
  134.      * The SVG styling attributes are all the attributes that can be specified on any SVG element to apply CSS styling effects.
  135.      * More information see https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/Styling
  136.      */
  137.     interface StylingAttr {
  138.         /**
  139.          * a valid HTML class name
  140.          */
  141.         class?: string
  142.         /**
  143.          * SVG css style string format. It all can be find here https://www.w3.org/TR/SVG/styling.html#StyleAttribute
  144.          */
  145.         style?: string
  146.     }
  147.  
  148.     /**
  149.      * A global attribute that can be use with any svg element
  150.      */
  151.     interface GlobalAttr extends CoreAttr, StylingAttr { }
  152.  
  153.     // TODO: implement SVG Presentation Attributes. See https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/Presentation
  154.  
  155.     interface PathBaseAttr {
  156.         pathLength?: number
  157.     }
  158.  
  159.     interface RadiusAxisAttr {
  160.         rx?: AttrNumberValue
  161.         ry?: AttrNumberValue
  162.     }
  163.  
  164.     /**
  165.      * SVG Rectangle attribute, more information see https://developer.mozilla.org/en-US/docs/Web/SVG/Element/rect
  166.      */
  167.     interface RectAttr extends RadiusAxisAttr, PathBaseAttr, GlobalAttr {
  168.         x?: number
  169.         y?: number
  170.         width: AttrNumberValue
  171.         height: AttrNumberValue
  172.     }
  173.  
  174.     /**
  175.      * SVG Line attribute, more information see https://developer.mozilla.org/en-US/docs/Web/SVG/Element/line
  176.      */
  177.     interface LineAttr extends PathBaseAttr, GlobalAttr {
  178.         x1?: number
  179.         y1?: number
  180.         x2?: number
  181.         y2?: number
  182.     }
  183.  
  184.     /**
  185.      * SVG Circle attribute, more information see https://developer.mozilla.org/en-US/docs/Web/SVG/Element/circle
  186.      */
  187.     interface CircleAttr extends PathBaseAttr, GlobalAttr {
  188.         cx?: number | string
  189.         cy?: number | string
  190.         r?: number | string
  191.     }
  192.  
  193.     /**
  194.      * SVG Ellipse attribute, more information see https://developer.mozilla.org/en-US/docs/Web/SVG/Element/ellipse
  195.      */
  196.     interface EllipseAttr extends PathBaseAttr, GlobalAttr {
  197.         cx?: number | string
  198.         cy?: number | string
  199.         rx?: number | string
  200.         ry?: number | string
  201.     }
  202.  
  203.     /**
  204.      * SVG Path attribute, more information see https://developer.mozilla.org/en-US/docs/Web/SVG/Element/path
  205.      */
  206.     interface PathAttr extends PathBaseAttr, GlobalAttr {
  207.         d?: string
  208.     }
  209.  
  210.     /**
  211.      * SVG Path attribute, more information see https://developer.mozilla.org/en-US/docs/Web/SVG/Element/polygon
  212.      * or https://developer.mozilla.org/en-US/docs/Web/SVG/Element/polyline
  213.      */
  214.     interface PolyAttr extends PathBaseAttr, GlobalAttr {
  215.         points?: string
  216.     }
  217.  
  218.     /**
  219.      * SVG Text attribute, more information see https://developer.mozilla.org/en-US/docs/Web/SVG/Element/text
  220.      */
  221.     interface TextAttr extends GlobalAttr {
  222.         x?: number | string
  223.         y?: number | string
  224.         dx?: number | string
  225.         dy?: number | string
  226.         lengthAdjust?: "spacing" | "spacingAndGlyphs"
  227.         textLength?: number | string
  228.         // see https://developer.mozilla.org/en-US/docs/Web/API/SVGNumberList
  229.         // or https://developer.mozilla.org/en-US/docs/Web/SVG/Content_type#List-of-Ts
  230.         // TODO: tbd
  231.         // rotate?: string
  232.     }
  233.  
  234.     /**
  235.      * SVG TextPath attribute, more information see https://developer.mozilla.org/en-US/docs/Web/SVG/Element/textPath
  236.      */
  237.     interface TextPathAttr extends GlobalAttr {
  238.         href?: string
  239.         lengthAdjust?: "spacing" | "spacingAndGlyphs"
  240.         method?: "align" | "stretch"
  241.         side?: "left" | "right"
  242.         spacing?: "auto" | "exact"
  243.         startOffset?: number | string
  244.         textLength?: number | string
  245.         // See https://developer.mozilla.org/en-US/docs/Web/SVG/Element/textPath
  246.         // TODO: tbd as there is no reference to see the detail of how it would look like
  247.         // path?: string
  248.     }
  249.  
  250.     /**
  251.      * A generic Dom Box object.
  252.      * Notice: DOMRect is still in experiment state and document is not complete (Draft)
  253.      * See https://developer.mozilla.org/en-US/docs/Web/API/DOMRect
  254.      */
  255.     interface DOMRect {
  256.         x?: number
  257.         y?: number
  258.         width?: number
  259.         height?: number
  260.         top?: number
  261.         right?: number
  262.         bottom?: number
  263.         left?: number
  264.     }
  265.  
  266.     // ************ SVG.JS generic Conditional Types declaration ************
  267.  
  268.     type SVGTypeMapping<T> =
  269.         T extends HTMLElement ? Dom :
  270.         T extends SVGSVGElement ? Svg :
  271.         T extends SVGRectElement ? Rect :
  272.         T extends SVGCircleElement ? Circle :
  273.         T extends SVGPathElement ? Path :
  274.         T extends SVGTextElement ? Text :
  275.         T extends SVGTextPathElement ? TextPath :
  276.         T extends SVGGElement ? G :
  277.         T extends SVGLineElement ? Line :
  278.         T extends SVGPolylineElement ? Polyline :
  279.         T extends SVGPolygonElement ? Polygon :
  280.         T extends SVGGradientElement ? Gradient :
  281.         T extends SVGImageElement ? Image :
  282.         T extends SVGEllipseElement ? Ellipse :
  283.         T extends SVGMaskElement ? Mask :
  284.         T extends SVGMarkerElement ? Marker :
  285.         T extends SVGClipPathElement ? ClipPath :
  286.         T extends SVGTSpanElement ? Tspan :
  287.         T extends SVGSymbolElement ? Symbol :
  288.         T extends SVGUseElement ? Use : Element
  289.  
  290.     // element type as string
  291.     type SvgType = "svg"
  292.     type ClipPathType = "clipPath"
  293.     type TextType = "text"
  294.     type GType = "g"
  295.     type AType = "a"
  296.  
  297.     type ParentElement = SvgType | GType | AType
  298.  
  299.     type AttrTypeMapping<T> =
  300.         T extends Rect ? RectAttr : GlobalAttr
  301.  
  302.     type ElementAlias = Dom | Svg | Rect | Line | Polygon | Polyline | Ellipse | ClipPath | Use |
  303.         Text | Path | TextPath | Circle | G | Gradient | Image | Element
  304.  
  305.     type AttributeReference = "href" | "marker-start" | "marker-mid" | "marker-end" | "mask" |
  306.         "clip-path" | "filter" | "fill"
  307.  
  308.     // ************* SVG.JS Type Declaration *************
  309.     // ********** Locate in directory src/types **********
  310.  
  311.     // SVGArray.js
  312.     // Notice: below class is defined the name as `Array` rather than `SVGArray`.
  313.     // The purpose of giving the name as `Array` is to allow it to be aligned with SVG.JS export type
  314.     // as SVG.JS export it as `Array` (to be precise `SVG.Array`) so reading through JS documentation
  315.     // should be more straightforward.
  316.     /**
  317.      * Type alias to native array.
  318.      *
  319.      * **Caution**: If argument is a string, generic type must be a number or array of number and
  320.      * the string is format as a concatenate of number separate by comma.
  321.      * This is expensive to build runtime type check for such as case so please use it carefully.
  322.      */
  323.     type ArrayAlias<T> = BuiltInArray<T> | T[] | string
  324.  
  325.     class Array<T> extends BuiltInArray<T> {
  326.         constructor(array?: ArrayAlias<T>);
  327.  
  328.         /**
  329.          * Return array of generic T however it's flatten array by 1 level as it using `apply` function.
  330.          * For example: if T is a `number[]` which is the number of 2 dimension `Array<number[]>` the result will be `number[]`
  331.          */
  332.         toArray(): any[]
  333.         /**
  334.          * return a concatenated string of each element separated by space
  335.          */
  336.         toString(): string
  337.         valueOf(): T[]
  338.         clone(): Array<T>
  339.         toSet(): Set<T>
  340.         parse(a?: ArrayAlias<T>): T[]
  341.         to(a: any): Morphable;
  342.     }
  343.  
  344.     // point.js
  345.     class Point {
  346.         x: number;
  347.         y: number;
  348.         constructor();
  349.         constructor(position: CoordinateXY);
  350.         constructor(point: Point);
  351.         constructor(x: number, y?: number);
  352.         clone(): Point;
  353.         transform(matrix: Matrix): this;
  354.         transformO(matrix: Matrix): this;
  355.         toArray(): ArrayXY;
  356.     }
  357.  
  358.     // pointArray.js
  359.     class PointArray extends Array<ArrayXY> {
  360.         constructor();
  361.         constructor(array?: ArrayAlias<ArrayXY> | number[]);
  362.  
  363.         toLine(): LineAttr;
  364.         at(pos: number): PointArray;
  365.         transform(m: Matrix | MatrixLike): PointArray
  366.         move(x: number, y: number): this;
  367.         size(width: number, height: number): this;
  368.         bbox(): Box;
  369.         to(a: any): Morphable;
  370.         toString(): string;
  371.     }
  372.  
  373.     // SVGNumber.js
  374.     type NumberUnit = [number, string]
  375.  
  376.     class Number {
  377.         constructor();
  378.         constructor(value: Number);
  379.         constructor(value: string);
  380.         constructor(value: number, unit?: any);
  381.         constructor(n: NumberUnit);
  382.  
  383.         value: number
  384.         unit: any
  385.  
  386.         toString(): string;
  387.         toJSON(): Object;  // same as toString
  388.         toArray(): NumberUnit
  389.         valueOf(): number;
  390.         plus(number: NumberAlias): Number;
  391.         minus(number: NumberAlias): Number;
  392.         times(number: NumberAlias): Number;
  393.         divide(number: NumberAlias): Number;
  394.         convert(unit: string): Number;
  395.         to(a: any): Morphable
  396.     }
  397.  
  398.     type NumberAlias = Number | number | string;
  399.  
  400.     // PathArray.js
  401.  
  402.     type LineCommand = ['M' | 'm' | 'L' | 'l', number, number] | ['H' | 'h' | 'V' | 'v', number] | ['Z' | 'z']
  403.  
  404.     type CurveCommand =
  405.         // Bezier Curves
  406.         ['C' | 'c', number, number, number, number, number, number] |
  407.         ['S' | 's' | 'Q' | 'q', number, number, number, number] | ['T' | 't', number, number] |
  408.         // Arcs
  409.         ['A' | 'a', number, number, number, number, number, number, number]
  410.  
  411.     type PathCommand = LineCommand | CurveCommand
  412.  
  413.     type PathArrayAlias = PathArray | PathCommand[] | (string | number)[] | string;
  414.  
  415.     class PathArray extends Array<PathCommand> {
  416.         constructor();
  417.         constructor(d: ArrayAlias<PathCommand> | PathArrayAlias);
  418.  
  419.         move(x: number, y: number): this;
  420.         size(width: number, height: number): this;
  421.         equalCommands(other: PathArray): boolean
  422.         morph(pa: PathArray): this
  423.         at(pos: number): PathArray
  424.         parse(array?: ArrayAlias<PathCommand> | PathArrayAlias): PathCommand[];
  425.         bbox(): Box;
  426.         to(a: any): Morphable
  427.     }
  428.  
  429.     // Matrix.js
  430.     interface TransformData {
  431.         origin?: number[];
  432.         scaleX?: number;
  433.         scaleY?: number;
  434.         shear?: number;
  435.         rotate?: number;
  436.         translateX?: number;
  437.         translateY?: number;
  438.         originX?: number;
  439.         originY?: number;
  440.     }
  441.  
  442.     interface MatrixLike {
  443.         a?: number;
  444.         b?: number;
  445.         c?: number;
  446.         d?: number;
  447.         e?: number;
  448.         f?: number;
  449.     }
  450.  
  451.     interface MatrixExtract extends TransformData, MatrixLike { }
  452.  
  453.     type FlipType = 'both' | 'x' | 'y' | boolean
  454.     type ArrayXY = [number, number]
  455.     type CoordinateXY = ArrayXY | { x: number, y: number }
  456.  
  457.     interface MatrixTransformParam {
  458.         flip?: FlipType
  459.         skew?: ArrayXY | number
  460.         skewX?: number
  461.         skewY?: number
  462.         scale?: ArrayXY | number
  463.         scaleX?: number
  464.         scaleY?: number
  465.         shear?: number
  466.         theta?: number
  467.         origin?: CoordinateXY
  468.         around?: CoordinateXY
  469.         ox?: number
  470.         originX?: number
  471.         oy?: number
  472.         originY?: number
  473.         position?: CoordinateXY
  474.         px?: number
  475.         positionX?: number
  476.         py?: number
  477.         positionY?: number
  478.         translate?: CoordinateXY
  479.         tx?: number
  480.         translateX?: number
  481.         ty?: number
  482.         translateY?: number
  483.         relative?: CoordinateXY
  484.         rx?: number
  485.         relativeX?: number
  486.         ry?: number
  487.         relativeY?: number
  488.     }
  489.  
  490.     type MatrixAlias = MatrixLike | TransformData | MatrixTransformParam | number[] | Element | string;
  491.  
  492.     class Matrix implements MatrixLike {
  493.         constructor();
  494.         constructor(source: MatrixAlias);
  495.         constructor(a: number, b: number, c: number, d: number, e: number, f: number);
  496.  
  497.         a: number;
  498.         b: number;
  499.         c: number;
  500.         d: number;
  501.         e: number;
  502.         f: number;
  503.  
  504.         // *** To Be use by Test Only in restrict mode ***
  505.         [key: string]: any
  506.  
  507.         clone(): Matrix;
  508.         transform(o: MatrixLike | MatrixTransformParam): Matrix
  509.         compose(o: MatrixExtract): Matrix
  510.         decompose(cx?: number, cy?: number): MatrixExtract
  511.         multiply(m: MatrixAlias | Matrix): Matrix;
  512.         multiplyO(m: MatrixAlias | Matrix): this;
  513.         lmultiply(m: MatrixAlias | Matrix): Matrix;
  514.         lmultiplyO(m: MatrixAlias | Matrix): this;
  515.         inverse(): Matrix;
  516.         inverseO(): this;
  517.         translate(x?: number, y?: number): Matrix;
  518.         translateO(x?: number, y?: number): this;
  519.         scale(x: number, y?: number, cx?: number, cy?: number): Matrix;
  520.         scaleO(x: number, y?: number, cx?: number, cy?: number): this;
  521.         rotate(r: number, cx?: number, cy?: number): Matrix;
  522.         rotateO(r: number, cx?: number, cy?: number): this;
  523.         flip(a: NumberAlias, offset?: number): Matrix;
  524.         flipO(a: NumberAlias, offset?: number): this;
  525.         flip(offset?: number): Matrix;
  526.         shear(a: number, cx?: number, cy?: number): Matrix;
  527.         shearO(a: number, cx?: number, cy?: number): this;
  528.         skew(y?: number, cx?: number, cy?: number): Matrix;
  529.         skewO(y?: number, cx?: number, cy?: number): this;
  530.         skew(x: number, y?: number, cx?: number, cy?: number): Matrix;
  531.         skewX(x: number, cx?: number, cy?: number): Matrix;
  532.         skewY(y: number, cx?: number, cy?: number): Matrix;
  533.         around(cx?: number, cy?: number, matrix?: Matrix): Matrix;
  534.         aroundO(cx?: number, cy?: number, matrix?: Matrix): this;
  535.         equals(m: Matrix): boolean
  536.         toString(): string;
  537.         toArray(): number[];
  538.         valueOf(): MatrixLike;
  539.         to(a: any): Morphable;
  540.     }
  541.  
  542.     // List.js
  543.     interface List<T> extends Array<T> {
  544.         each(fn: Function): void
  545.         each(...args: any[]): void
  546.         toArray(): T[]
  547.     }
  548.  
  549.     class EventObject {
  550.         [key: string]: EventObject;
  551.     }
  552.  
  553.     // EventTarget.js
  554.     class EventTarget {
  555.         events: EventObject
  556.  
  557.         addEventListener(): void
  558.         dispatch(event: Event | string, data?: object): Event
  559.         dispatchEvent(event: Event): boolean
  560.         fire(event: Event | string, data?: object): this
  561.         getEventHolder(): this | Node
  562.         getEventTarget(): this | Node
  563.  
  564.         on(events: string | Event[], cb: EventListener, binbind?: any, options?: AddEventListenerOptions): this;
  565.         off(events?: string | Event[], cb?: EventListener | number): this;
  566.  
  567.         removeEventListener(): void
  568.     }
  569.  
  570.     // Color.js
  571.     interface ColorLike {
  572.         r: number;
  573.         g: number;
  574.         b: number;
  575.  
  576.         x: number;
  577.         y: number;
  578.         z: number;
  579.  
  580.         h: number;
  581.         s: number;
  582.         l: number;
  583.         a: number;
  584.         c: number;
  585.  
  586.         m: number;
  587.         k: number;
  588.  
  589.         space: string;
  590.     }
  591.  
  592.     type ColorAlias = string | ColorLike;
  593.  
  594.     class Color implements ColorLike {
  595.         r: number;
  596.         g: number;
  597.         b: number;
  598.  
  599.         x: number;
  600.         y: number;
  601.         z: number;
  602.  
  603.         h: number;
  604.         s: number;
  605.         l: number;
  606.         a: number;
  607.         c: number;
  608.  
  609.         m: number;
  610.         k: number;
  611.  
  612.         space: string;
  613.         constructor()
  614.         constructor(color: ColorAlias, space?: string);
  615.         constructor(a: number, b: number, c: number, space?: string)
  616.         constructor(a: number, b: number, c: number, d: number, space?: string)
  617.         constructor(a: number[], space?: string)
  618.  
  619.         brightness(): number;
  620.         morph(color: ColorAlias): Color;
  621.         at(pos: number): Color;
  622.  
  623.         rgb(): Color
  624.         lab(): Color
  625.         xyz(): Color
  626.         lch(): Color
  627.         hsl(): Color
  628.         cmyk(): Color
  629.         toHex(): string
  630.         toString(): string
  631.         toRgb(): string
  632.         toArray(): any[]
  633.  
  634.         to(a: any): Morphable
  635.         fromArray(a: any): this
  636.     }
  637.  
  638.     // Box.js
  639.     interface BoxLike {
  640.         height?: number;
  641.         width?: number;
  642.         y?: number;
  643.         x?: number;
  644.         cx?: number;
  645.         cy?: number;
  646.         w?: number;
  647.         h?: number;
  648.         x2?: number;
  649.         y2?: number;
  650.     }
  651.  
  652.     class Box implements BoxLike {
  653.         height: number;
  654.         width: number;
  655.         y: number;
  656.         x: number;
  657.         cx: number;
  658.         cy: number;
  659.         w: number;
  660.         h: number;
  661.         x2: number;
  662.         y2: number;
  663.  
  664.         constructor();
  665.         constructor(source: string);
  666.         constructor(source: number[]);
  667.         constructor(source: DOMRect);
  668.         constructor(x: number, y: number, width: number, height: number);
  669.  
  670.         merge(box: Box): Box;
  671.         transform(m: Matrix): Box
  672.         addOffset(): this;
  673.         toString(): string;
  674.         toArray(): number[];
  675.         isNulled(): boolean;
  676.         to(v: MorphValueLike): Morphable;
  677.     }
  678.  
  679.     // Morphable.js
  680.     type MorphValueLike = string | number | ObjectBag | NonMorphable | MatrixExtract | Array<any> | any[]
  681.  
  682.     class Morphable {
  683.         constructor();
  684.         constructor(st: Stepper);
  685.  
  686.         from(): MorphValueLike
  687.         from(v: MorphValueLike): this
  688.         to(): MorphValueLike
  689.         to(v: MorphValueLike): this
  690.         type(): any
  691.         type(t: any): this
  692.         stepper(): Stepper
  693.         stepper(st: Stepper): this
  694.         done(): boolean
  695.         at(pos: number): any
  696.     }
  697.  
  698.     class ObjectBag {
  699.         constructor();
  700.         constructor(a: Object);
  701.         valueOf(): Object
  702.         toArray(): Object[]
  703.  
  704.         to(a: Object): Morphable
  705.         fromArray(a: any[]): this
  706.     }
  707.  
  708.     class NonMorphable {
  709.         constructor(a: Object)
  710.         valueOf(): Object
  711.         toArray(): Object[]
  712.  
  713.         to(a: Object): Morphable
  714.         fromArray(a: Object): this
  715.     }
  716.  
  717.     class TransformBag {
  718.         constructor()
  719.         constructor(a: number[])
  720.         constructor(a: TransformData)
  721.         defaults: TransformData
  722.         toArray(): number[]
  723.         to(t: TransformData): Morphable
  724.         fromArray(t: number[]): this
  725.     }
  726.  
  727.     interface Stepper {
  728.         done(c?: object): boolean
  729.     }
  730.  
  731.     class Ease implements Stepper {
  732.         constructor()
  733.         constructor(fn: string)
  734.         constructor(fn: Function)
  735.  
  736.         step(from: number, to: number, pos: number): number
  737.         done(): boolean
  738.     }
  739.  
  740.     class Controller implements Stepper {
  741.         constructor(fn?: Function)
  742.         step(current: number, target: number, dt: number, c: number): number
  743.         done(c?: object): boolean
  744.     }
  745.  
  746.     // Queue.js
  747.     interface QueueParam {
  748.         value: any
  749.         next?: any
  750.         prev?: any
  751.     }
  752.  
  753.     class Queue {
  754.         constructor();
  755.  
  756.         push(value: any): QueueParam
  757.         shift(): any
  758.         first(): number
  759.         last(): number
  760.         remove(item: QueueParam): void
  761.     }
  762.  
  763.     // Timeline.js
  764.     class Timeline extends EventTarget {
  765.         constructor()
  766.         constructor(fn: Function)
  767.  
  768.         schedule(runner?: Runner, delay?: number, when?: string): this
  769.         unschedule(runner: Runner): this
  770.         getEndTime(): number
  771.         updateTime(): this
  772.         play(): this
  773.         pause(): this
  774.         stop(): this
  775.         finish(): this
  776.         speed(speed: number): this
  777.         reverse(yes: boolean): this
  778.         seek(dt: number): this
  779.         time(): number
  780.         time(time: number): this
  781.         source(): Function
  782.         source(fn: Function): this
  783.     }
  784.  
  785.     // Runner.js
  786.     interface TimesParam {
  787.         duration: number
  788.         delay: number
  789.         when: number | string
  790.         swing: boolean
  791.         wait: number
  792.         times: number
  793.     }
  794.  
  795.     type TimeLike = number | TimesParam | Stepper
  796.  
  797.     class Runner {
  798.         constructor();
  799.         constructor(options: Function);
  800.         constructor(options: number);
  801.         constructor(options: object);
  802.         constructor(options: Controller);
  803.  
  804.         static sanitise: (duration?: TimeLike, delay?: number, when?: string) => Object
  805.  
  806.         element(): Element
  807.         element(el: Element): this
  808.         timeline(): Timeline
  809.         timeline(timeline: Timeline): this
  810.         animate(duration: number, delay?: number, when?: string): this
  811.         schedule(delay: number, when?: string): this
  812.         schedule(timeline: Timeline, delay?: number, when?: string): this
  813.         unschedule(): this
  814.         loop(times?: number, swing?: boolean, wait?: number): this
  815.         loop(times: TimesParam): this
  816.         delay(delay: number): this
  817.  
  818.         during(fn: Function): this
  819.         queue(initFn: Function, runFn: Function, retargetFn?: boolean | Function, isTransform?: boolean): this
  820.         after(fn: EventListener): this
  821.         time(): number
  822.         time(time: number): this
  823.         duration(): number
  824.         loops(): number
  825.         loops(p: number): this
  826.         position(): number
  827.         position(p: number): this
  828.         progress(): number
  829.         progress(p: number): this
  830.         step(deta?: number): this
  831.         reset(): this
  832.         finish(): this
  833.         reverse(r?: boolean): this
  834.         ease(fn: Function): this
  835.         active(): boolean
  836.         active(a: boolean): this
  837.         addTransform(m: Matrix): this
  838.         clearTransform(): this
  839.         clearTransformsFromQueue(): void
  840.  
  841.         // extends prototypes
  842.         attr(a: string | Object, v?: string): this
  843.         css(s: string | Object, v?: string): this
  844.         styleAttr(type: string, name: string | Object, val?: string): this
  845.         zoom(level: NumberAlias, point: Point): this
  846.         transform(transforms: MatrixTransformParam, relative?: boolean, affine?: boolean): this
  847.         x(x: number): this
  848.         y(y: number): this
  849.         dx(dx: number): this
  850.         dy(dy: number): this
  851.         cx(x: number): this
  852.         cy(y: number): this
  853.         move(x: number, y: number): this
  854.         center(x: number, y: number): this
  855.         size(width: number, height: number): this
  856.         width(width: number): this
  857.         height(height: number): this
  858.         plot(a: Object): this
  859.         plot(a: number, b: number, c: number, d: number): this
  860.         leading(value: number): this
  861.         viewbox(x: number, y: number, width: number, height: number): this
  862.         update(offset: number, color: number, opacity: number): this
  863.         update(o: StopProperties): this
  864.         rx(): number
  865.         rx(rx: number): this
  866.         ry(): number
  867.         ry(ry: number): this
  868.         from(x: NumberAlias, y: NumberAlias): this
  869.         to(x: NumberAlias, y: NumberAlias): this
  870.     }
  871.  
  872.     // Animator.js
  873.     let Animator: {
  874.         nextDraw: any
  875.         frames: Queue
  876.         timeouts: Queue
  877.         immediates: Queue
  878.  
  879.         timer(): boolean
  880.         frame(fn: Function): Object
  881.         timeout(fn: Function, delay?: number): Object
  882.         immediate(fn: Function): Object
  883.         cancelFrame(o: Object): void
  884.         clearTimeout(o: Object): void
  885.         cancelImmediate(o: Object): void
  886.     }
  887.  
  888.     // use with parent query
  889.     type ParentTypeAlias = typeof Svg | typeof G | typeof A;
  890.  
  891.     // use with putIn
  892.     type ParentClassAlias = Svg | G | A;
  893.  
  894.     /**
  895.      * Just fancy type alias to refer to css query selector.
  896.      */
  897.     type QuerySelector = string
  898.  
  899.     // cannot really avoid using anonymous any string as typescript does not provide
  900.     // runtime type check for example, QuerySelector should contain . or # at least
  901.     // Important: this type alias is provided an overview of how value look as a string
  902.     type ParentQueryAlias = ParentElement | keyof HTMLElementTagNameMap | ParentTypeAlias | QuerySelector
  903.  
  904.     type ParentQueryMapping<T> =
  905.         T extends Tspan | TextPath ? ParentQueryAlias | TextType | ClipPathType | Text | ClipPath | Dom :
  906.         T extends Shape ? ParentQueryAlias | ClipPathType | ClipPath | Dom :
  907.         T extends Element ? ParentQueryAlias | Dom : keyof HTMLElementTagNameMap | Dom
  908.  
  909.     type ParentQueryResultMapping<T> =
  910.         T extends Tspan | TextPath ? ParentClassAlias | Text | ClipPath | Dom :
  911.         T extends Circle ? ParentClassAlias | Text | ClipPath | Mask | Dom :
  912.         T extends Shape ? ParentClassAlias | ClipPath | Dom : ParentClassAlias | Dom
  913.  
  914.     type PutInMapping<T> =
  915.         T extends Svg ? ParentClassAlias | Dom | HTMLElement | string :
  916.         T extends Shape ? ParentClassAlias | ClipPath | string :
  917.         T extends Element ? ParentClassAlias | string : HTMLElement | string
  918.  
  919.     type PutInResultMapping<T> =
  920.         T extends Svg ? ParentTypeAlias | Dom :
  921.         T extends Element ? ParentTypeAlias : Dom
  922.  
  923.     class Dom extends EventTarget {
  924.         node: HTMLElement | SVGElement;
  925.         type: string;
  926.  
  927.         constructor(node?: HTMLElement, attr?: Object);
  928.         constructor(att: Object);
  929.         add(element: Element, i?: number): this;
  930.         addTo(parent: Dom | HTMLElement | string): this
  931.         children(): List<Element>;
  932.         clear(): this;
  933.         clone(): this;
  934.         each(block: (index: number, children: Element[]) => void, deep?: boolean): this;
  935.         element(element: string, inherit?: Object): this;
  936.         first(): Element;
  937.         get(i: number): Element;
  938.         getEventHolder(): LinkedHTMLElement;
  939.         getEventTarget(): LinkedHTMLElement;
  940.         has(element: Element): boolean;
  941.         id(): string
  942.         id(id: string): this
  943.         index(element: Element): number;
  944.         last(): Element;
  945.         matches(selector: string): boolean;
  946.         /**
  947.          * Get the parent of current element. The input query can be given with string, object type or none (undefined).
  948.          * The input is vary based on the implement in hierarchy of SVG.JS element or dom.
  949.          * 1. If The input is a string, the string value must be a valid HTML element tag name or svg tag name. e.g "svg" or "g" or "div"
  950.          * 2. If the given input is an object type then only SVG.JS object type is accept. e.g Dom, Svg or G
  951.          * 3. if the given input query is undefined then the element will return the closest parent in Dom hierarchy
  952.          *
  953.          * For more information see ParentQueryMapping.
  954.          * @param type can be either string, object type or undefined.
  955.          */
  956.         parent<T extends this>(type?: ParentQueryMapping<T>): ParentQueryResultMapping<T>;
  957.         put(element: Element, i?: number): Element;
  958.         /**
  959.          * Put the element into the given parent element. The input parent element can be vary base on the class implementation.
  960.          * 1. If the current class is a Dom then parent input is only accept a valid HTML element or a valid string id of HTML element
  961.          * 2. If the current class is an Svg then parent input can only Dom, Svg, G, A, a valid HTML element and a valid string id of HTML element
  962.          *
  963.          * For more information see PutInMapping.
  964.          * @param parent an object of SVG.JS Dom or implement container or a string id or a valid HTML element object.
  965.          */
  966.         putIn<T extends this>(parent: PutInMapping<T>): PutInResultMapping<T>;
  967.  
  968.         remove(): this;
  969.         removeElement(element: Element): this;
  970.         replace<T extends Dom>(element: T): T;
  971.         round(precision?: number, map?: string[]): this
  972.         svg(): string;
  973.         svg(a: string, outer: true): Element;
  974.         svg(a: string, outer?: false): this;
  975.         svg(a: boolean, outer?: boolean): string;
  976.         svg(a: null | Function, outer?: boolean): string;
  977.  
  978.         toString(): string;
  979.         words(text: string): this;
  980.         writeDataToDom(): this;
  981.  
  982.         // prototype extend Attribute in attr.js
  983.         /**
  984.          * Get the attribute object of SVG Element. The return object will be vary based on
  985.          * the instance itself. For example, G element will only return GlobalAttr where Rect
  986.          * will return RectAttr instead.
  987.          */
  988.         attr(): any;
  989.         /**
  990.          * Add or update the attribute from the SVG Element. To remove the attribute from the element set value to null
  991.          * @param name name of attribute
  992.          * @param value value of attribute can be string or number or null
  993.          * @param namespace optional string that define namespace
  994.          */
  995.         attr(name: string, value: any, namespace?: string): this;
  996.         attr(name: string): any;
  997.         attr(obj: Object): this;
  998.         attr(obj: Object[]): Object;
  999.  
  1000.         // prototype extend Selector in selector.js
  1001.         find(query: string): List<Element>
  1002.         findOne(query: string): Dom
  1003.  
  1004.         // prototype method register in data.js
  1005.         data(a: string): Object | string | number
  1006.         data(a: string, v: Object, substain?: boolean): this
  1007.         data(a: Object): this
  1008.  
  1009.         // prototype method register in arrange.js
  1010.         siblings(): List<Element>
  1011.         position(): number
  1012.         next(): Element
  1013.         prev(): Element
  1014.         forward(): this
  1015.         backward(): this
  1016.         front(): this
  1017.         back(): this
  1018.         before(el: Element): Element
  1019.         after(el: Element): Element
  1020.         insertBefore(el: Element): this
  1021.         insertAfter(el: Element): this
  1022.  
  1023.         // prototype method register in class.js
  1024.         classes(): string[]
  1025.         hasClass(name: string): boolean
  1026.         addClass(name: string): this
  1027.         removeClass(name: string): this
  1028.         toggleClass(name: string): this
  1029.  
  1030.         // prototype method register in css.js
  1031.         css(): CSSStyleDeclaration;
  1032.         css(style: string): string
  1033.         css(style: string, val: any): this
  1034.         css(style: CSSStyleDeclaration): this
  1035.         css(style: string[]): CSSStyleDeclaration;
  1036.         show(): this
  1037.         hide(): this
  1038.         visible(): boolean
  1039.  
  1040.         // memory.js
  1041.         remember(name: string, value: any): this;
  1042.         remember(name: string): any;
  1043.         remember(obj: Object): this;
  1044.         forget(...keys: string[]): this;
  1045.         forget(): this;
  1046.         memory(): Object;
  1047.  
  1048.         addEventListener(): void
  1049.         dispatch(event: Event | string, data?: object): Event
  1050.         dispatchEvent(event: Event): boolean
  1051.         fire(event: Event | string, data?: object): this
  1052.         getEventHolder(): this | Node
  1053.         getEventTarget(): this | Node
  1054.  
  1055.         on(events: string | Event[], cb: EventListener, binbind?: any, options?: AddEventListenerOptions): this;
  1056.         off(events?: string | Event[], cb?: EventListener | number): this;
  1057.         removeEventListener(): void
  1058.     }
  1059.  
  1060.     // clip.js
  1061.     class ClipPath extends Container {
  1062.         constructor();
  1063.         constructor(node?: SVGClipPathElement);
  1064.         constructor(attr: Object);
  1065.         node: SVGClipPathElement;
  1066.  
  1067.         targets(): List<Element>;
  1068.         remove(): this;
  1069.     }
  1070.  
  1071.     // container.js
  1072.     interface ViewBoxLike {
  1073.         x: number;
  1074.         y: number;
  1075.         width: number;
  1076.         height: number;
  1077.     }
  1078.  
  1079.     class Container extends Element {
  1080.         circle(size?: NumberAlias): Circle;
  1081.         circle(size: number, unit: number): Circle;
  1082.         clip(): ClipPath;
  1083.         ellipse(width?: number, height?: number): Ellipse;
  1084.         flatten(parent: Dom, depth?: number): this;
  1085.         gradient(type: string, block?: (stop: Gradient) => void): Gradient;
  1086.         group(): G;
  1087.  
  1088.         image(): Image;
  1089.         image(href?: string, callback?: (e: Event) => void): Image;
  1090.         line(points?: PointArrayAlias): Line;
  1091.         line(x1: number, y1: number, x2: number, y2: number): Line;
  1092.         link(url: string): A;
  1093.         marker(width?: number, height?: number, block?: (marker: Marker) => void): Marker
  1094.         mask(): Mask;
  1095.         nested(): Svg;
  1096.         path(): Path;
  1097.         path(d: PathArrayAlias): Path;
  1098.         pattern(width?: number, height?: number, block?: (pattern: Pattern) => void): Pattern
  1099.         plain(text: string): Text;
  1100.         polygon(points?: PointArrayAlias): Polygon;
  1101.         polyline(points?: PointArrayAlias): Polyline;
  1102.         rect(width?: number, height?: number): Rect;
  1103.         text(block: (tspan: Tspan) => void): Text;
  1104.         text(text: string): Text;
  1105.         ungroup(parent: Dom, depth?: number): this;
  1106.         use(element: Element | string, file?: string): Use;
  1107.         viewbox(): Box;
  1108.         viewbox(viewbox: ViewBoxLike | string): this;
  1109.         viewbox(x: number, y: number, width: number, height: number): this;
  1110.         textPath(text: string | Text, path: string | Path): TextPath
  1111.         symbol(): Symbol
  1112.     }
  1113.  
  1114.     class Defs extends Container {
  1115.         constructor(node?: SVGDefsElement);
  1116.         node: SVGDefsElement;
  1117.         marker(width?: number, height?: number, block?: (marker: Marker) => void): Marker
  1118.     }
  1119.  
  1120.     class Svg extends Container {
  1121.         constructor(svgElement?: SVGSVGElement);
  1122.         constructor(id: string);
  1123.         node: SVGSVGElement;
  1124.         namespace(): this;
  1125.         defs(): Defs;
  1126.         remove(): this;
  1127.         isRoot(): boolean;
  1128.     }
  1129.  
  1130.     interface Sugar {
  1131.         fill(): any
  1132.         fill(fill: FillData): this;
  1133.         fill(color: string): this;
  1134.         fill(pattern: Element): this;
  1135.         fill(image: Image): this;
  1136.         stroke(): any;
  1137.         stroke(stroke: StrokeData): this;
  1138.         stroke(color: string): this;
  1139.         matrix(a?: number, b?: number, c?: number, d?: number, e?: number, f?: number): this;
  1140.         matrix(mat: MatrixAlias, b?: number, c?: number, d?: number, e?: number, f?: number): this;
  1141.         rotate(degrees: number, cx?: number, cy?: number): this;
  1142.         skew(skewX?: number, skewY?: number, cx?: number, cy?: number): this;
  1143.         scale(scaleX?: number, scaleY?: number, cx?: number, cy?: number): this;
  1144.         translate(x: number, y: number): this;
  1145.         shear(lam: Matrix, cx: number, cy: number): this
  1146.         relative(x: number, y: number): this
  1147.         flip(direction?: string, around?: number): this
  1148.         flip(around: number): this
  1149.         opacity(): number
  1150.         opacity(value: number): this
  1151.         font(a: string): string
  1152.         font(a: string, v: string | number): this
  1153.         font(a: Object): this
  1154.     }
  1155.  
  1156.     // Symbol.js
  1157.     class Symbol extends Container {
  1158.         constructor(svgElement?: SVGSymbolElement);
  1159.         constructor(attr: Object)
  1160.         node: SVGSymbolElement;
  1161.     }
  1162.  
  1163.     class Element extends Dom implements Sugar {
  1164.         constructor(node?: SVGElement);
  1165.         constructor(attr: Object);
  1166.         node: HTMLElement | SVGElement;
  1167.         type: string;
  1168.         dom: any
  1169.  
  1170.         addClass(name: string): this;
  1171.         after(element: Element): Element;
  1172.         animate(duration?: number, ease?: string, delay?: number): Runner;
  1173.         animate(info: { ease?: string; duration?: number; delay?: number }): Runner;
  1174.         delay(by: number, when?: string): Runner
  1175.         attr(): any;
  1176.         attr(name: string, value: any, namespace?: string): this;
  1177.         attr(name: string): any;
  1178.         attr(obj: string[]): Object;
  1179.         attr(obj: Object): this;
  1180.         back(): this;
  1181.         backward(): this;
  1182.         bbox(): Box;
  1183.         before(element: Element): Element;
  1184.         center(x: number, y: number): this;
  1185.         classes(): string[];
  1186.         click(cb: Function | null): this;
  1187.         clipper(): ClipPath;
  1188.         clipWith(element: Element): this;
  1189.         clone(): this;
  1190.         ctm(): Matrix;
  1191.         cx(): number;
  1192.         cx(x: number): this;
  1193.         cy(): number;
  1194.         cy(y: number): this;
  1195.         data(name: string, value: any, sustain?: boolean): this;
  1196.         data(name: string): any;
  1197.         data(val: Object): this;
  1198.         dblclick(cb: Function | null): this;
  1199.         defs(): Defs;
  1200.         dmove(x: NumberAlias, y: NumberAlias): this;
  1201.         dx(x: NumberAlias): this;
  1202.         dy(y: NumberAlias): this;
  1203.         event(): Event | CustomEvent;
  1204.         fill(): any;
  1205.         fill(color: string): this;
  1206.         fill(color: Color | ColorLike): this;
  1207.         fill(color: FillData): this;
  1208.         fill(pattern: Element): this;
  1209.         fire(event: Event): this;
  1210.         fire(event: string, data?: any): this;
  1211.         flip(a: string, offset?: number): this;
  1212.         flip(offset?: number): this;
  1213.         font(a: Object): this
  1214.         font(a: string, v: string | number): this
  1215.         font(a: string): string
  1216.         forget(...keys: string[]): this;
  1217.         forget(): this;
  1218.         forward(): this;
  1219.         front(): this;
  1220.         hasClass(name: string): boolean;
  1221.         height(): number;
  1222.         height(height: NumberAlias): this;
  1223.         hide(): this;
  1224.         hide(): this;
  1225.         id(): string;
  1226.         id(id: string): this;
  1227.         inside(x: number, y: number): boolean;
  1228.         is(cls: any): boolean;
  1229.         linkTo(url: (link: A) => void): A;
  1230.         linkTo(url: string): A;
  1231.         masker(): Mask
  1232.         maskWith(element: Element): this;
  1233.         maskWith(mask: Mask): this;
  1234.         matches(selector: string): boolean;
  1235.         matrix(): Matrix;
  1236.         matrix(a?: number, b?: number, c?: number, d?: number, e?: number, f?: number): this;
  1237.         matrix(mat: MatrixAlias, b?: number, c?: number, d?: number, e?: number, f?: number): this;
  1238.         matrixify(): Matrix;
  1239.         memory(): Object;
  1240.         mousedown(cb: Function | null): this;
  1241.         mousemove(cb: Function | null): this;
  1242.         mouseout(cb: Function | null): this;
  1243.         mouseover(cb: Function | null): this;
  1244.         mouseup(cb: Function | null): this;
  1245.         move(x: NumberAlias, y: NumberAlias): this;
  1246.         native(): LinkedHTMLElement;
  1247.         next(): Element;
  1248.         off(events?: string | Event[], cb?: EventListener | number): this;
  1249.         on(event: string, cb: Function, context?: Object): this;
  1250.         opacity(): number;
  1251.         opacity(o: number): this;
  1252.         relative(x: number, y: number): this
  1253.         shear(lam: Matrix, cx: number, cy: number): this
  1254.         toRoot(): Svg;
  1255.         /**
  1256.          * By default parents will return a list of element up until html Document.
  1257.          */
  1258.         parents(): List<Element>
  1259.         /**
  1260.          * List the parent by hierarchy until the given parent type or object. If the given value is null
  1261.          * then the result is only provided the list up until Svg root element which mean no Dom parent element is included.
  1262.          * @param util a parent type
  1263.          */
  1264.         parents<T extends Dom>(util: string | null | T | HTMLElement): List<Element>
  1265.         /**
  1266.          * Get reference svg element based on the given attribute.
  1267.          * @param attr a svg attribute
  1268.          */
  1269.         reference<R extends Dom>(attr: AttributeReference): R | null
  1270.  
  1271.         point(): Point;
  1272.         point(position: CoordinateXY): Point;
  1273.         point(point: Point): Point;
  1274.         point(x: number, y: number): Point;
  1275.         position(): number;
  1276.         prev(): Element;
  1277.         rbox(element?: Element): Box;
  1278.         reference(type: string): Element;
  1279.         remember(name: string, value: any): this;
  1280.         remember(name: string): any;
  1281.         remember(obj: Object): this;
  1282.         remove(): this;
  1283.         removeClass(name: string): this;
  1284.         root(): Svg;
  1285.         rotate(d: number, cx?: number, cy?: number): this;
  1286.         scale(x?: number, y?: number, cx?: number, cy?: number): this;
  1287.         screenCTM(): Matrix;
  1288.         setData(data: object): this;
  1289.         show(): this;
  1290.         show(): this;
  1291.         size(width?: NumberAlias, height?: NumberAlias): this;
  1292.         skew(x?: number, y?: number, cx?: number, cy?: number): this;
  1293.         stop(jumpToEnd: boolean, clearQueue: boolean): Animation;
  1294.         stop(offset?: NumberAlias | string, color?: NumberAlias, opacity?: NumberAlias): Stop;
  1295.         stop(val: { offset?: NumberAlias | string, color?: NumberAlias, opacity?: NumberAlias }): Stop;
  1296.         stroke(): any;
  1297.         stroke(color: string): this;
  1298.         stroke(stroke: StrokeData): this;
  1299.         timeline(): Timeline
  1300.         timeline(tl: Timeline): this
  1301.         toggleClass(name: string): this;
  1302.         toParent(parent: Dom): this;
  1303.         toSvg(): this;
  1304.         touchcancel(cb: Function | null): this;
  1305.         touchend(cb: Function | null): this;
  1306.         touchleave(cb: Function | null): this;
  1307.         touchmove(cb: Function | null): this;
  1308.         touchstart(cb: Function | null): this;
  1309.         transform(): MatrixExtract;
  1310.         transform(t: MatrixAlias, relative?: boolean): this;
  1311.         translate(x: number, y: number): this;
  1312.         unclip(): this;
  1313.         unmask(): this;
  1314.         untransform(): this;
  1315.         visible(): boolean;
  1316.         width(): number;
  1317.         width(width: NumberAlias): this;
  1318.         x(): number;
  1319.         x(x: NumberAlias): this;
  1320.         y(): number;
  1321.         y(y: NumberAlias): this;
  1322.     }
  1323.  
  1324.     // ellipse.js
  1325.     interface CircleMethods extends Shape {
  1326.         rx(rx: number): this;
  1327.         rx(): this;
  1328.         ry(ry: number): this;
  1329.         ry(): this;
  1330.         radius(x: number, y?: number): this;
  1331.     }
  1332.     class Circle extends Shape implements CircleMethods {
  1333.         constructor(node?: SVGCircleElement);
  1334.         constructor(attr: CircleAttr)
  1335.  
  1336.         node: SVGCircleElement;
  1337.  
  1338.         rx(rx: number): this;
  1339.         rx(): this;
  1340.         ry(ry: number): this;
  1341.         ry(): this;
  1342.         radius(x: number, y?: number): this;
  1343.     }
  1344.     class Ellipse extends Shape implements CircleMethods {
  1345.         node: SVGEllipseElement;
  1346.         constructor(attr: EllipseAttr)
  1347.         constructor(node?: SVGEllipseElement);
  1348.  
  1349.         rx(rx: number): this;
  1350.         rx(): this;
  1351.         ry(ry: number): this;
  1352.         ry(): this;
  1353.         radius(x: number, y?: number): this;
  1354.     }
  1355.  
  1356.     interface StopProperties {
  1357.         color?: ColorAlias;
  1358.         offset?: number | string;
  1359.         opacity?: number;
  1360.     }
  1361.  
  1362.     // gradient.js
  1363.     class Stop extends Element {
  1364.         update(offset?: number, color?: ColorAlias, opacity?: number): this;
  1365.         update(opts: StopProperties): this;
  1366.     }
  1367.     class Gradient extends Container {
  1368.         constructor(node?: SVGGradientElement);
  1369.         constructor(attr: Object);
  1370.         constructor(type: string);
  1371.         node: SVGGradientElement;
  1372.  
  1373.         at(offset?: number, color?: ColorAlias, opacity?: number): Stop;
  1374.         at(opts: StopProperties): Stop;
  1375.         url(): string;
  1376.         toString(): string;
  1377.         targets(): List<Element>
  1378.         bbox(): Box
  1379.  
  1380.         // gradiented.js
  1381.         from(x: number, y: number): this;
  1382.         to(x: number, y: number): this;
  1383.  
  1384.         // TODO: check with main.js
  1385.         radius(x: number, y?: number): this;
  1386.         targets(): List<Element>
  1387.         bbox(): Box
  1388.         update(block?: (gradient: Gradient) => void): this;
  1389.     }
  1390.  
  1391.     // group.js
  1392.     class G extends Container {
  1393.         constructor(node?: SVGGElement);
  1394.         constructor(attr: Object);
  1395.         node: SVGGElement;
  1396.         gbox(): Box;
  1397.     }
  1398.  
  1399.     // hyperlink.js
  1400.     class A extends Container {
  1401.         constructor(node?: SVGAElement);
  1402.         constructor(attr: Object);
  1403.         node: SVGAElement;
  1404.         to(url: string): this;
  1405.         to(): string;
  1406.         target(target: string): this;
  1407.         target(): string;
  1408.     }
  1409.  
  1410.     // image.js
  1411.     class Image extends Shape {
  1412.         constructor(node?: SVGImageElement);
  1413.         constructor(attr: Object);
  1414.         node: SVGImageElement;
  1415.         load(url?: string): this;
  1416.     }
  1417.  
  1418.     // line.js
  1419.     type PointArrayAlias = number[] | ArrayXY[] | PointArray | string;
  1420.  
  1421.     class Line extends Shape {
  1422.         constructor(attr: LineAttr)
  1423.         constructor(node?: SVGLineElement);
  1424.  
  1425.         node: SVGLineElement;
  1426.  
  1427.         array(): PointArray;
  1428.         plot(): PointArray
  1429.         plot(points?: PointArrayAlias): this;
  1430.         plot(x1: number, y1: number, x2: number, y2: number): this;
  1431.         move(x: number, y: number): this;
  1432.         size(width?: number, height?: number): this;
  1433.         marker(position: string, width?: number, height?: number, block?: (marker: Marker) => void): Marker;
  1434.         marker(position: string, marker: Marker): Marker;
  1435.     }
  1436.  
  1437.     // marker.js
  1438.     // TODO: check register method marker
  1439.     class Marker extends Container {
  1440.         constructor();
  1441.  
  1442.         node: SVGMarkerElement;
  1443.  
  1444.         ref(x: string | number, y: string | number): this;
  1445.         update(block: (marker: Marker) => void): this;
  1446.         toString(): string;
  1447.     }
  1448.     // mask.js
  1449.     class Mask extends Container {
  1450.         constructor(node?: SVGMaskElement);
  1451.         constructor(attr: Object);
  1452.         node: SVGMaskElement;
  1453.         remove(): this
  1454.         targets(): List<Element>;
  1455.     }
  1456.  
  1457.     // path.js
  1458.     class Path extends Shape {
  1459.         constructor(attr: PathAttr)
  1460.         constructor(node?: SVGPathElement);
  1461.  
  1462.         node: SVGPathElement;
  1463.  
  1464.         morphArray: PathArray;
  1465.         array(): PathArray;
  1466.         plot(): PathArray;
  1467.         plot(d: PathArrayAlias): this;
  1468.         marker(position: string, width?: number, height?: number, block?: (marker: Marker) => void): this;
  1469.         marker(position: string, marker: Marker): this;
  1470.  
  1471.         // sugar.js
  1472.         length(): number;
  1473.         pointAt(length: number): { x: number, y: number };
  1474.         text(text: string): TextPath
  1475.         text(text: Text): TextPath
  1476.         targets(): List<Element>
  1477.  
  1478.     }
  1479.  
  1480.  
  1481.     // pattern.js
  1482.     class Pattern extends Container {
  1483.         url(): string;
  1484.         url(...rest: any[]): never;
  1485.         update(block: (pattern: Pattern) => void): this;
  1486.         toString(): string;
  1487.     }
  1488.  
  1489.     // poly.js
  1490.     interface poly {
  1491.         array(): PointArray;
  1492.         plot(): PointArray
  1493.         plot(p: PointArrayAlias): this;
  1494.         clear(): this;
  1495.         move(x: NumberAlias, y: NumberAlias): this;
  1496.         size(width: number, height?: number): this;
  1497.     }
  1498.  
  1499.     // pointed.js
  1500.     interface pointed {
  1501.         x(): number
  1502.         x(x: number): this
  1503.         y(): number
  1504.         y(y: number): this
  1505.         height(): number
  1506.         height(h: number): this
  1507.         width(): number
  1508.         width(w: number): this
  1509.     }
  1510.  
  1511.     class Polyline extends Shape implements poly, pointed {
  1512.         constructor(node?: SVGPolylineElement);
  1513.         constructor(attr: PolyAttr);
  1514.  
  1515.         node: SVGPolylineElement;
  1516.  
  1517.         array(): PointArray;
  1518.         plot(): PointArray
  1519.         plot(p: PointArrayAlias): this;
  1520.         move(x: number, y: number): this;
  1521.         size(width: number, height?: number): this;
  1522.         marker(position: string, width?: number, height?: number, block?: (marker: Marker) => void): Marker;
  1523.         marker(position: string, marker: Marker): Marker;
  1524.     }
  1525.  
  1526.     class Polygon extends Shape implements poly {
  1527.         constructor(node?: SVGPolygonElement);
  1528.         constructor(attr: PolyAttr)
  1529.  
  1530.         node: SVGPolygonElement;
  1531.         array(): PointArray;
  1532.         plot(): PointArray;
  1533.         plot(p: PointArrayAlias): this;
  1534.         move(x: number, y: number): this;
  1535.         size(width: number, height?: number): this;
  1536.         marker(position: string, width?: number, height?: number, block?: (marker: Marker) => void): Marker;
  1537.         marker(position: string, marker: Marker): Marker;
  1538.     }
  1539.  
  1540.     class Rect extends Shape {
  1541.         constructor(node?: SVGRectElement);
  1542.         constructor(attr: RectAttr)
  1543.         node: SVGRectElement;
  1544.         radius(x: number, y?: number): this;
  1545.     }
  1546.  
  1547.     // shape.js
  1548.     class Shape extends Element {
  1549.     }
  1550.  
  1551.     // sugar.js
  1552.     interface StrokeData {
  1553.         color?: string;
  1554.         width?: number;
  1555.         opacity?: number;
  1556.         linecap?: string;
  1557.         linejoin?: string;
  1558.         miterlimit?: number;
  1559.         dasharray?: string;
  1560.         dashoffset?: number;
  1561.     }
  1562.  
  1563.     interface FillData {
  1564.         color?: string
  1565.         opacity?: number
  1566.         rule?: string
  1567.     }
  1568.  
  1569.     interface FontData {
  1570.         family?: string;
  1571.         size?: NumberAlias;
  1572.         anchor?: string;
  1573.         leading?: NumberAlias;
  1574.         weight?: string;
  1575.         style?: string
  1576.     }
  1577.     // textable.js
  1578.     interface Textable {
  1579.         plain(text: string): this;
  1580.         length(): number;
  1581.     }
  1582.  
  1583.     // text.js
  1584.     class Text extends Shape implements Textable {
  1585.         constructor(node?: SVGElement);
  1586.         constructor(attr: TextAttr)
  1587.  
  1588.         clone(): this;
  1589.         text(): string;
  1590.         text(text: string): this;
  1591.         text(block: (text: this) => void): this;
  1592.         leading(): Number;
  1593.         leading(leading: NumberAlias): this;
  1594.         rebuild(enabled: boolean): this;
  1595.         build(enabled: boolean): this;
  1596.         clear(): this;
  1597.         plain(text: string): this;
  1598.         length(): number;
  1599.         get(i: number): Tspan;
  1600.         path(): TextPath
  1601.         path(d: PathArrayAlias | Path): TextPath;
  1602.         track(): Element;
  1603.         textPath(): Element;
  1604.         ax(): string
  1605.         ax(x: string): this
  1606.         ay(): string
  1607.         ay(y: string): this
  1608.         amove(x: number, y: number): this
  1609.  
  1610.         // main.js, from extend/copy prototypes from Tspan
  1611.         tspan(text: string): Tspan;
  1612.         tspan(block: (tspan: Tspan) => void): this;
  1613.     }
  1614.  
  1615.     class Tspan extends Text implements Textable {
  1616.         constructor(node?: SVGElement);
  1617.         constructor(attr: TextAttr);
  1618.         dx(): number;
  1619.         dx(x: NumberAlias): this;
  1620.         dy(): number;
  1621.         dy(y: NumberAlias): this;
  1622.         newLine(): this;
  1623.         tspan(text: string): Tspan;
  1624.         tspan(block: (tspan: Tspan) => void): this;
  1625.         length(): number;
  1626.         text(): string;
  1627.         text(text: string): this;
  1628.         text(block: (text: this) => void): this;
  1629.         plain(text: string): this;
  1630.     }
  1631.  
  1632.     // textpath.js
  1633.     class TextPath extends Text {
  1634.         constructor();
  1635.         constructor(attr: TextPathAttr)
  1636.  
  1637.         array(): Array<any>
  1638.         plot(): PathArray
  1639.         plot(d: string): this
  1640.         track(): Path
  1641.     }
  1642.  
  1643.     // use.js
  1644.     class Use extends Shape {
  1645.         element(element: string, file?: string): this;
  1646.     }
  1647.  
  1648.     // viewbox.js
  1649.     type ViewBoxAlias = ViewBoxLike | number[] | string | Element;
  1650.  
  1651.     interface ViewBox {
  1652.         x: number;
  1653.         y: number;
  1654.         width: number;
  1655.         height: number;
  1656.         zoom?: number;
  1657.         toString(): string;
  1658.         morph(source: ViewBoxAlias): ViewBox;
  1659.         morph(x: number, y: number, width: number, height: number): ViewBox;
  1660.         at(pos: number): ViewBox;
  1661.     }
  1662. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement