From c1a6771c24dcf48bdf0af8035a25a8e9eb8bc814 Mon Sep 17 00:00:00 2001 From: Ulrich-Matthias Schäfer Date: Sun, 3 Sep 2023 12:28:15 +0200 Subject: fixes #887 --- svg.js.d.ts | 2193 +++++++++++++++++++++++++++++++---------------------------- 1 file 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 { } - 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; - 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 {} + 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; + 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... + } } -- cgit v1.2.3