export = svgjs; export as namespace svgjs; declare var svgjs: svgjs.Library; // todo add SVG.FX declare namespace svgjs { export interface Library { (id: string): Doc; (domElement: HTMLElement): Doc; ns: string; xmlns: string; xlink: string; svgjs: string; supported: boolean; did: number; eid(name: string): string; create(name: string): any; extend(parent: Object, obj: Object): void; invent(config: Object): any; adopt(node: HTMLElement): Element; prepare(element: HTMLElement): void; } interface LinkedHTMLElement extends HTMLElement { instance: Element; } // arrange.js interface Element { front(): this; back(): this; forward(): this; backward(): this; siblings(): Element[]; position(): number; next(): Element; previous(): Element; before(element: Element): Element; after(element: Element): Element; } // array.js type ArrayAlias = _Array | number[] | string; interface _Array { new (array?: ArrayAlias, fallback?: number[]): _Array; value: number[]; morph(array: number[]): this; settle(): number[]; at(pos: NumberAlias): _Array; toString(): string; valueOf(): number[]; parse(array: ArrayAlias): number[]; split(string: string): number[]; reverse(): this; clone(): _Array; } interface Library { Array: _Array } // attr.js interface Element { attr(): object; attr(name: string): any; attr(obj: Object): this; attr(name: string, value: any, namespace?: string): this; } // bare.js export interface Bare extends Element { new (element: string, inherit?: any): Bare; words(text: string): this; } interface Parent { element(element: string, inherit?: Object): Bare; } interface Library { Bare: Bare; } // boxes.js interface Box { height: number; width: number; y: number; x: number; cx: number; cy: number; w: number; h: number; x2: number; y2: number; merge(box: Box): Box; transform(m: Matrix): Box } export interface BBox extends Box { new (element?: Element): BBox; } export interface RBox extends Box { new (element?: Element): RBox; } export interface TBox extends Box { new (element?: Element): TBox; } interface Element { bbox(): BBox; rbox(element?: Element): RBox; tbox(): TBox; } interface Library { BBox: BBox; RBox: RBox; TBox: TBox; } // clip.js export interface ClipPath extends Container { new (): ClipPath; targets: Element[]; remove(): this; } interface Container { clip(): ClipPath; } interface Element { clipWith(element: Element): this; clipper: ClipPath; unclip(): this; } interface Library { ClipPath: ClipPath; } // color.js interface ColorLike { r: number; g: number; b: number; } type ColorAlias = string | ColorLike; export interface Color extends ColorLike{ new (): Color; new (color: ColorAlias): Color; toString(): string; toHex(): string; toRgb(): string; brightness(): number; morph(color: ColorAlias): Color; at(pos: number): Color; } interface Library { Color: Color; } // container.js interface ViewBoxLike { x: number; y: number; width: number; height:number; } export interface Container extends Parent { new (): Container; } interface Library { Container: Container } // data.js interface Element { data(name: string): any; data(name: string, value: any, sustain?: boolean): this; } // default.js interface Library { defaults: { attrs: { 'fill-opacity': number; 'stroke-opacity': number; 'stroke-width': number; 'stroke-linejoin': string; 'stroke-linecap': string; 'fill': string; 'stroke': string; 'opacity': number; 'x': number; 'y': number; 'cx': number; 'cy': number; 'width': number; 'height': number; 'r': number; 'rx': number; 'ry': number; 'offset': number; 'stop-opacity': number; 'stop-color': string; 'font-size': number; 'font-family': string; 'text-anchor': string; } } } // defs.js export interface Defs extends Container { new (): Defs; } interface Library { Defs: Defs } // doc.js export interface Doc extends Container { new (): Doc; new (id: string): Doc; new (domElement: HTMLElement): Doc; namespace(): this; defs(): Defs; parent(): HTMLElement; spof(): this; remove(): this; } interface Library { Doc: Doc; } type ParentTypeAlias = string | Doc | Nested | G; // element.js export interface Element { new (): Element; node: LinkedHTMLElement; type: string; x(x: NumberAlias): this; x(): number; y(y: NumberAlias): this; y(): number; //cx(x: number, anchor?: boolean): this; cx(x: number): this; cx(): number; //cy(y: number, anchor?: boolean): this; cy(y: number): this; cy(): number; move(x: NumberAlias, y: NumberAlias): this; center(x: number, y: number): this; width(width: NumberAlias): this; width(): number; height(height: NumberAlias): this; height(): number; size(width?: NumberAlias, height?: NumberAlias): this; clone(): Element; remove(): this; replace(element: Element): Element; addTo(parent: Parent): this; putIn(parent: Parent): Parent; id(): string; id(id: string): this; inside(x: number, y: number): boolean; show(): this; hide(): this; visible(): boolean; toString(): string; classes(): string[]; hasClass(name: string): boolean; addClass(name: string): this; removeClass(name: string): this; toggleClass(name: string): this; reference(type: string): Element; // Add HTMLElement for Doc inheritance parent(type?: ParentTypeAlias): Parent | HTMLElement; doc(): Parent; parents(): Parent[]; matches(selector: string): boolean; native(): LinkedHTMLElement; svg(svg: string): this; svg(): string; writeDataToDom(): this; setData(data: object): this; is(cls: any): boolean; } interface Library { Element: Element; } // ellipse.js interface CircleMethods extends Shape { rx(rx: number): this; rx(): this; ry(ry: number): this; ry(): this; radius(x: number, y?: number): this; } export interface Circle extends CircleMethods { new (): Circle; } export interface Ellipse extends CircleMethods { new (): Ellipse; } interface Container { circle(size?: number): Circle; ellipse(width?: number, height?: number): Ellipse; } interface Library { Circle: Circle; Ellipse: Ellipse; } // event.js interface Element { on(event: string, cb: Function, context?: Object): this; off(event: string, cb?: Function, context?: Object): this; fire(event: string, data?: any): this; fire(event: Event): this; event(): Event | CustomEvent; click(cb: Function): this; dblclick(cb: Function): this; mousedown(cb: Function): this; mouseup(cb: Function): this; mouseover(cb: Function): this; mouseout(cb: Function): this; mousemove(cb: Function): this; touchstart(cb: Function): this; touchmove(cb: Function): this; touchleave(cb: Function): this; touchend(cb: Function): this; touchcancel(cb: Function): this; } //fx.js interface Library { easing: { '-'(pos: number): number; '<>'(pos: number): number; '>'(pos: number): number; '<'(pos: number): number; } } interface Element { animate(duration?: number, ease?: string, delay?: number): Animation; animate(info: { ease?: string; duration?: number; delay?: number }): Animation; stop(jumpToEnd:boolean,clearQueue:boolean): Animation; } // TODO finishs FX interface StopProperties { color?: ColorAlias; offset?: number; opacity?: number; } // gradient.js export interface Stop extends Element { new (): Stop; update(offset?: number, color?: ColorAlias, opacity?: number): this; update(opts: StopProperties): this; } export interface Gradient extends Container { new (type: string): Gradient; at(offset?: number, color?: ColorAlias, opacity?: number): Stop; at(opts: StopProperties): Stop; update(block?: Function): this; fill(): string; fill(...params: any[]): never; toString(): string; from(x: number, y: number): this; to(x: number, y: number): this; radius(x: number, y?: number): this; } interface Container { gradient(type: string, block?: (stop: Gradient) => void): Gradient; } interface Library { Gradient: Gradient; Stop: Stop; } // group.js export interface G extends Container { new (): G; gbox(): BBox; } interface Container { group(): G; } interface Library { G: G; } // hyperlink.js export interface A extends Container { new (): A; to(url: string): this; to(): string; show(target: string): this; show(): string; show(...params: any[]): never; target(target: string): this; target(): string; } interface Container { link(url: string): A; } interface Element { linkTo(url: string): A; linkTo(url: (link: A) => void): A; } interface Library { A: A; } // image.js export interface Image extends Shape { new (): Image; load(url?: string): this; loaded(cb: (info: { width: number, height: number, ratio: number, url: string }) => void): this; error(cb: (event: Event) => void): this; } interface Container { image(): Image; image(href: string, size?: number): Image; image(href: string, width?: number, height?: number): Image; } interface Library { Image: Image; } // line.js interface ArrayPoint extends Array { } type PointArrayAlias = ArrayPoint[] | number[] | PointArray | string; export interface Line extends Shape { new (): Line; array(): PointArray; plot(points: PointArrayAlias): this; plot(x1: number, y1: number, x2: number, y2: number): this; move(x: number, y: number): this; size(width?: number, height?: number): this; } interface Container { line(points: PointArrayAlias): Line; line(x1: number, y1: number, x2: number, y2: number): Line; } interface Library { Line: Line; } // marker.js export interface Marker extends Container { new (): Marker; ref(x: string | number, y: string | number): this; update(block: (marker: Marker) => void): this; toString(): string; } interface Container { marker(width?: number, height?: number, block?: (marker: Marker) => void): Marker } interface Defs { marker(width?: number, height?: number, block?: (marker: Marker) => void): Marker } interface Line { marker(position: string, width?: number, height?: number, block?: (marker: Marker) => void): Marker; marker(position: string, marker: Marker): Marker; } interface Polyline { marker(position: string, width?: number, height?: number, block?: (marker: Marker) => void): Marker; marker(position: string, marker: Marker): Marker; } interface Polygon { marker(position: string, width?: number, height?: number, block?: (marker: Marker) => void): Marker; marker(position: string, marker: Marker): Marker; } interface Path { marker(position: string, width?: number, height?: number, block?: (marker: Marker) => void): Marker; marker(position: string, marker: Marker): Marker; } interface Library { Marker: Marker; } // mask.js export interface Mask extends Container { new (): Mask; targets: Element[]; } interface Container { mask(): Mask; } interface Element { maskWith(mask: Mask): this; maskWith(element: Element): this; masker: Mask; unmask(): this; } interface Library { Mask: Mask; } // matrix.js interface MatrixExtract { x: number; y: number; transformedX: number; transformedY: number; skewX: number; skewY: number; scaleX: number; scaleY: number; rotation: number; a: number; b: number; c: number; d: number; e: number; f: number; matrix: Matrix; } interface MatrixLike { a: number; b: number; c: number; d: number; e: number; f: number; } type MatrixAlias = MatrixLike | number[] | Element | string; export interface Matrix { new (): Matrix; new (source: MatrixAlias): Matrix; new (a: number, b: number, c: number, d: number, e: number, f: number): Matrix; a: number; b: number; c: number; d: number; e: number; f: number; extract(): MatrixExtract; clone(): Matrix; morph(matrix: Matrix): this; at(pos: number): Matrix; multiply(matrix: Matrix): Matrix; inverse(): Matrix; translate(x: number, y: number): Matrix; scale(x: number, y?: number, cx?: number, cy?: number): Matrix; rotate(r: number, cx?: number, cy?: number): Matrix; flip(a: string, offset?: number): Matrix; flip(offset?: number): Matrix; skew(x: number, y?: number, cx?: number, cy?: number): Matrix; skewX(x: number, cx?: number, cy?: number): Matrix; skewY(y: number, cx?: number, cy?: number): Matrix; around(cx: number, cy: number, matrix: Matrix): Matrix; native(): SVGMatrix; toString(): string; } interface Element { ctm(): Matrix; screenCTM(): Matrix; } interface Library { Matrix: Matrix } // memory.js interface Element { remember(name: string, value: any): this; remember(name: string): any; remember(obj: Object): this; forget(...keys: string[]): this; forget(): this; memory(): Object; } // nested.js export interface Nested extends Container { new (): Nested; } interface Container { nested(): Nested; } interface Library { Nested: Nested; } // number.js interface _Number { new (): _Number; new (value: _Number): _Number; new (value: string): _Number; new (value: number, unit?: any): _Number; toString(): string; toJSON(): Object; valueOf(): number; plus(number: number): _Number; minus(number: number): _Number; times(number: number): _Number; divide(number: number): _Number; to(unit: string): _Number; morph(number: any): this; at(pos: number): _Number; } interface Library { Number: _Number; } type NumberAlias = _Number | number | string; // parent.js export interface Parent extends Element { new (): Parent; children(): Element[]; add(element: Element, i?: number): this; put(element: Element, i?: number): Element; has(element: Element): boolean; index(element: Element): number; get(i: number): Element; first(): Element; last(): Element; each(block: (index: number, children: Element[]) => void, deep?: boolean): this; removeElement(element: Element): this; clear(): this; defs(): Defs; } interface Library{ Parent: Parent } // path.js interface PathArrayPoint extends Array { } type PathArrayAlias = PathArray | (string | number)[] | PathArrayPoint[] | string; export interface Path extends Shape { new (): Path; morphArray: PathArray; array(): PathArray; plot(d: PathArrayAlias): this; } interface Container { path(): Path; path(d: PathArrayAlias): Path; } interface Library{ Path: Path } // pathArray.js export interface PathArray extends _Array { new (): PathArray; new (d: PathArrayAlias): PathArray; move(x: number, y: number): this; size(width?: number, height?: number): this; parse(array: PathArrayAlias): PathArrayPoint[]; parse(array: ArrayAlias): never; bbox(): BBox; } interface Library { PathArray: PathArray; } // pattern.js export interface Pattern extends Container { new (): Pattern; fill(): string; fill(...rest: any[]): never; update(block: (pattern: Pattern) => void): this; toString(): string; } interface Container { pattern(width?: number, height?: number, block?: (pattern: Pattern) => void): Pattern } interface Library { Pattern: Pattern } // point.js export interface Point { new (): Point; new (position: ArrayPoint): Point; new (point: Point): Point; new (position: { x: number, y: number }): Point; new (x: number, y: number): Point; x: number; y: number; clone(): Point; morph(point: Point): this; at(pos: number): Point; native(): SVGPoint; transform(matrix: Matrix): Point; } interface Library { Point: Point; } interface Element { point(): Point; point(position: ArrayPoint): Point; point(position: { x: number, y: number }): Point; point(x: number, y: number): Point; } // pointArray.js export interface PointArray extends _Array { new (): PointArray; new (points: PointArrayAlias): PointArray; toString(): string; toLine(): { x1: number; y1: number; x2: number; y2: number; }; parse(points: PointArrayAlias): ArrayPoint[]; parse(array: ArrayAlias): never; move(x: number, y: number): this; size(width?: number, height?: number): this; bbox(): BBox; } interface Library { PointArray: PointArray } // poly.js interface poly extends Shape { array(): PointArray; plot(p: PointArrayAlias): this; move(x: number, y: number): this; size(width: number, height: number): this; } export interface PolyLine extends poly { new (): PolyLine; } interface Library { PolyLine: PolyLine; } interface Container { polyline(points: PointArrayAlias): PolyLine; } export interface Polygon extends poly { new (): Polygon; } interface Library { Polygon: Polygon; } interface Container { polygon(points: PointArrayAlias): Polygon; } // rect.js export interface Rect extends Shape { new (): Rect; radius(x: number, y?: number): this; } interface Library { Rect: Rect; } interface Container { rect(width?: number, height?: number): Rect; } // regex.js interface Library { regex: { numberAndUnit: RegExp; hex: RegExp; rgb: RegExp; reference: RegExp; transforms: RegExp; whitespace: RegExp; isHex: RegExp; isRgb: RegExp; isCss: RegExp; isBlank: RegExp; isNumber: RegExp; isPercent: RegExp; isImage: RegExp; delimiter: RegExp; hyphen: RegExp; pathLetters: RegExp; isPathLetter: RegExp; dots: RegExp; } } // selector.js interface Library { get(id: string): Element; select(query: string, parent?: HTMLElement): Set; } interface Parent { select(query: string): Set; } // set.js export interface Set { new (members?: Element[]): Set; add(...elments: Element[]): this; remove(element: Element): this; each(block: (index: number, members: Element[]) => void): this; clear(): this; length(): number; has(element: Element): this; index(element: Element): number; get(i: number): Element; first(): Element; last(): Element; valueOf(): Element[]; bbox(): BBox; click(cb: Function): Set; } interface Container { set(members?: Element[]): Set; } interface Library { Set: Set; } // shape.js export interface Shape extends Element { new (): Shape; } interface Library { Shape: Shape; } // style.js interface Element { style(styles: Object): this; style(style: string): any; style(style: string, value: any): this; } // sugar.js interface StrokeData { color?: string; width?: number; opacity?: number; linecap?: string; linejoin?: string; miterlimit?: number; dasharray?: string; dashoffset?: number; } interface Element { fill(fill: { color?: string; opacity?: number, rule?: string }): this; fill(color: string): this; fill(pattern: Element): this; fill(image: Image): this; stroke(stroke: StrokeData): this; stroke(color: string): this; rotate(d: number, cx?: number, cy?: number): this; skew(x: number, y?: number, cx?: number, cy?: number): this; scale(x: number, y?: number, cx?: number, cy?: number): this; translate(x: number, y: number): this; flip(a: string, offset?: number): this; flip(offset?: number): this; matrix(m: MatrixAlias): this; matrix(a: number, b: number, c: number, d: number, e: number, f: number): this; opacity(o: number): this; opacity(): number; dx(x: NumberAlias): this; dy(y: NumberAlias): this; dmove(x: NumberAlias, y: NumberAlias): this; } interface Path { length(): number; pointAt(length: number): { x: number, y: number }; } interface FontData { family?: string; size?: NumberAlias; anchor?: string; leading?: NumberAlias; weight?: string; style?: string } interface Parent { font(font: FontData): this; } interface Text { font(font: FontData): this; } // text.js export interface Text extends Shape { new (): Text; clone(): Text; text(): string; text(text: string): this; text(block: (text: Text) => void): this; size(fontSize: NumberAlias): this; leading(): number; leading(leading: NumberAlias): this; lines(): Set; rebuild(enabled: boolean): this; build(enabled: boolean): this; plain(text: string): this; tspan(text: string): Tspan; tspan(block: (tspan: Tspan) => void): this; clear(): this; length(): number; } interface Container { text(text: string): Text; text(block: (tspan: Tspan) => void): Text; plain(text: string): Text; } interface Library { Text: Text; } export interface Tspan extends Shape { new (): Tspan; text(): string; text(text: string): Tspan; text(block: (tspan: Tspan) => void): this; dx(x: NumberAlias): this; dy(y: NumberAlias): this; newLine(): this; plain(text: any): this; tspan(text: string): Tspan; tspan(block: (tspan: Tspan) => void): this; clear(): this; length(): number; } interface Library { Tspan: Tspan; } // textpath.js export interface TextPath extends Parent { new (): TextPath; } interface Text { path(d: PathArrayAlias): this; track(): Element; textPath(): Element; } interface Library { TextPath: TextPath; } // transform.js interface Element { transform(t: Transform, relative?: boolean): Element; transform(): Transform; untransform(): this; matrixify(): Matrix; toParent(parent: Parent): this; toDoc(): this; } interface Transform { x?: number; y?: number; rotation?: number; cx?: number; cy?: number; scaleX?: number; scaleY?: number; skewX?: number; skewY?: number; matrix?: Matrix; // 1,0,0,1,0,0 a?: number; // direct digits of matrix b?: number; c?: number; d?: number; e?: number; f?: number; scale?: number; } export interface Transformation { new (...transform: Transform[]): Transformation; new (source: Transform, inversed?: boolean): Transformation; at(pos: number): Matrix; undo(transform: Transform): this } export interface Translate extends Transformation {new (): Translate} export interface Rotate extends Transformation {new (): Rotate} export interface Scale extends Transformation {new (): Scale} export interface Skew extends Transformation {new (): Skew} interface Library { Transformation: Transformation; Translate: Translate; Rotate: Rotate; Scale: Scale; Skew: Skew; } // ungroup.js interface Parent { ungroup(parent: Parent, depth?: number): this; flatten(parent: Parent, depth?: number): this; } // use.js export interface Use extends Shape { new (): Use; element(element: Element, file?: string): this; } interface Container { use(element: Element | string, file?: string): Use; } interface Library { Use: Use; } // utilities.js interface Library { utils: { map(array: any[], block: Function): any; filter(array: any[], block: Function): any; radians(d: number): number; degrees(r: number): number; filterSVGElements: HTMLElement[] } } // viewbox.js type ViewBoxAlias = ViewBoxLike | number[] | string | Element; interface ViewBox { new (source: ViewBoxAlias): ViewBox; new (x: number, y: number, width: number, height: number): ViewBox; x: number; y: number; width: number; height: number; zoom?: number; toString(): string; morph(source: ViewBoxAlias): ViewBox; morph(x: number, y: number, width: number, height: number): ViewBox; at(pos:number): ViewBox; } interface Container { viewbox(): ViewBox; viewbox(x: number, y: number, width: number, height: number): this; viewbox(viewbox: ViewBoxLike): this; } interface Library { ViewBox: ViewBox; } export interface Animation { stop(): Animation; finish(): Animation; pause(): Animation; play(): Animation; reverse(reversed?: boolean): Animation; attr(name: string, value: any, namespace?: string): Animation; attr(obj: Object): Animation; attr(name: string): any; attr(): object; viewbox(x: number, y: number, w: number, h: number): Animation; move(x: number, y: number, anchor?: boolean): Animation; dmove(x: number, y: number): Animation; x(x: number, anchor?: boolean): Animation; y(y: number, anchor?: boolean): Animation; center(x: number, y: number, anchor?: boolean): Animation; cx(x: number, anchor?: boolean): Animation; cy(y: number, anchor?: boolean): Animation; size(w: number, h: number, anchor?: boolean): Animation; during(cb: (pos: number) => void): Animation; to(value: number): Animation; after(cb: () => void): Animation; delay(delayMS: number): Animation; rotate(degrees: number, cx?: number, cy?: number): Animation; skew(skewX: number, skewY?: number, cx?: number, cy?: number): Animation; scale(scaleX: number, scaleY?: number, cx?: number, cy?: number): Animation; translate(x: number, y: number): Animation; transform(t: Transform, relative?: boolean): Animation; // TODO style, etc, bbox... } }