aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--svg.js.d.ts2193
1 files changed, 1170 insertions, 1023 deletions
diff --git a/svg.js.d.ts b/svg.js.d.ts
index 47d858e..1a6d6b5 100644
--- a/svg.js.d.ts
+++ b/svg.js.d.ts
@@ -5,1033 +5,1180 @@ 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;
+ 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;
- 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;
- clone(parent: Parent): 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 | ((pos: number) => number), delay?: number): Animation;
- animate(info: { ease?: string | ((pos: number) => number); 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<number> { }
- 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<number | string> { }
- 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;
- font(key: string, value: any): this;
- }
- interface Text {
- font(font: FontData): this;
- font(key: string, value: any): 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;
+ 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(parent?: Parent): 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 | ((pos: number) => number),
+ delay?: number
+ ): Animation;
+ animate(info: {
+ ease?: string | ((pos: number) => number);
+ 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;
- 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...
- }
+ 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<number> {}
+ 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<number | string> {}
+ 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;
+ font(key: string, value: any): this;
+ }
+ interface Text {
+ font(font: FontData): this;
+ font(key: string, value: any): 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...
+ }
}