declare class BuiltInArray<T> extends Array<T> { }
declare type CSSStyleName = Exclude<keyof CSSStyleDeclaration, "parentRule" | "length" >
declare module "@svgdotjs/svg.js" {
function SVG(): Svg;
function SVG(selector: QuerySelector): Element;
function SVG<T>(el: T): SVGTypeMapping<T>
function SVG(domElement: HTMLElement): Element;
function eid(name: string): string;
function get(id: string): Element;
function create(name: string): any;
function extend(parent: object, obj: object): void;
function invent(config: object): any;
function adopt(node: HTMLElement): Element;
function prepare(element: HTMLElement): void;
function getClass(name: string): Element;
function on(el: Node | Window, events: string, cb: EventListener, binbind?: any, options?: AddEventListenerOptions): void;
function on(el: Node | Window, events: Event[], cb: EventListener, binbind?: any, options?: AddEventListenerOptions): void;
function off(el: Node | Window, events?: string, cb?: EventListener | number, options?: AddEventListenerOptions): void;
function off(el: Node | Window, events?: Event[], cb?: EventListener | number, options?: AddEventListenerOptions): void;
function dispatch(node: Node | Window, event: Event, data?: object, options?: object): Event
function find(query: QuerySelector): List<Element>
function findOne(query: QuerySelector): Element | null
function getWindow(): Window;
function registerWindow(win: Window, doc: Document): void;
function restoreWindow(): void;
function saveWindow(): void;
function withWindow(win: Window, fn: (win: Window, doc: Document) => void): void;
let utils: {
map(array: any[], block: Function): any;
filter(array: any[], block: Function): any;
radians(d: number): number;
degrees(r: number): number;
camelCase(s: string): string;
unCamelCase(s: string): string;
capitalize(s: string): string;
}
let 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;
},
timeline: {
duration: number;
ease: string;
delay: number;
}
}
let regex: {
delimiter: RegExp;
dots: RegExp;
hex: RegExp;
hyphen: RegExp;
isBlank: RegExp;
isHex: RegExp;
isImage: RegExp;
isNumber: RegExp;
isPathLetter: RegExp;
isRgb: RegExp;
numberAndUnit: RegExp;
numbersWithDots: RegExp;
pathLetters: RegExp;
reference: RegExp;
rgb: RegExp;
transforms: RegExp;
whitespace: RegExp;
}
let namespaces: {
ns: string;
xmlns: string;
xlink: string;
svgjs: string;
}
interface LinkedHTMLElement extends HTMLElement {
instance: Element;
}
type AttrNumberValue = number | "auto";
interface CoreAttr {
id?: string
lang?: string
tabindex?: number
"xml:lang"?: string
}
interface StylingAttr {
class?: string
style?: string
}
interface GlobalAttr extends CoreAttr, StylingAttr { }
TODO
interface PathBaseAttr {
pathLength?: number
}
interface RadiusAxisAttr {
rx?: AttrNumberValue
ry?: AttrNumberValue
}
interface RectAttr extends RadiusAxisAttr, PathBaseAttr, GlobalAttr {
x?: number
y?: number
width: AttrNumberValue
height: AttrNumberValue
}
interface LineAttr extends PathBaseAttr, GlobalAttr {
x1?: number
y1?: number
x2?: number
y2?: number
}
interface CircleAttr extends PathBaseAttr, GlobalAttr {
cx?: number | string
cy?: number | string
r?: number | string
}
interface EllipseAttr extends PathBaseAttr, GlobalAttr {
cx?: number | string
cy?: number | string
rx?: number | string
ry?: number | string
}
interface PathAttr extends PathBaseAttr, GlobalAttr {
d?: string
}
interface PolyAttr extends PathBaseAttr, GlobalAttr {
points?: string
}
interface TextAttr extends GlobalAttr {
x?: number | string
y?: number | string
dx?: number | string
dy?: number | string
lengthAdjust?: "spacing" | "spacingAndGlyphs"
textLength?: number | string
TODO
}
interface TextPathAttr extends GlobalAttr {
href?: string
lengthAdjust?: "spacing" | "spacingAndGlyphs"
method?: "align" | "stretch"
side?: "left" | "right"
spacing?: "auto" | "exact"
startOffset?: number | string
textLength?: number | string
TODO
}
interface DOMRect {
x?: number
y?: number
width?: number
height?: number
top?: number
right?: number
bottom?: number
left?: number
}
type SVGTypeMapping<T> =
T extends HTMLElement ? Dom :
T extends SVGSVGElement ? Svg :
T extends SVGRectElement ? Rect :
T extends SVGCircleElement ? Circle :
T extends SVGPathElement ? Path :
T extends SVGTextElement ? Text :
T extends SVGTextPathElement ? TextPath :
T extends SVGGElement ? G :
T extends SVGLineElement ? Line :
T extends SVGPolylineElement ? Polyline :
T extends SVGPolygonElement ? Polygon :
T extends SVGGradientElement ? Gradient :
T extends SVGImageElement ? Image :
T extends SVGEllipseElement ? Ellipse :
T extends SVGMaskElement ? Mask :
T extends SVGMarkerElement ? Marker :
T extends SVGClipPathElement ? ClipPath :
T extends SVGTSpanElement ? Tspan :
T extends SVGSymbolElement ? Symbol :
T extends SVGUseElement ? Use : Element
type SvgType = "svg"
type ClipPathType = "clipPath"
type TextType = "text"
type GType = "g"
type AType = "a"
type ParentElement = SvgType | GType | AType
type AttrTypeMapping<T> =
T extends Rect ? RectAttr : GlobalAttr
type ElementAlias = Dom | Svg | Rect | Line | Polygon | Polyline | Ellipse | ClipPath | Use |
Text | Path | TextPath | Circle | G | Gradient | Image | Element
type ElementTypeAlias = typeof Dom | typeof Svg | typeof Rect | typeof Line | typeof Polygon |
typeof Polyline | typeof Ellipse | typeof ClipPath | typeof Use | typeof Text | typeof Path |
typeof TextPath | typeof Circle | typeof G | typeof Gradient | typeof Image | typeof Element
type AttributeReference = "href" | "marker-start" | "marker-mid" | "marker-end" | "mask" |
"clip-path" | "filter" | "fill"
type ArrayAlias<T> = BuiltInArray<T> | T[] | string
class Array<T> extends BuiltInArray<T> {
constructor(array?: ArrayAlias<T>);
toArray(): any[]
toString(): string
valueOf(): T[]
clone(): Array<T>
toSet(): Set<T>
parse(a?: ArrayAlias<T>): T[]
to(a: any): Morphable;
}
class Point {
x: number;
y: number;
constructor();
constructor(position: CoordinateXY);
constructor(point: Point);
constructor(x: number, y?: number);
clone(): Point;
transform(matrix: Matrix): this;
transformO(matrix: Matrix): this;
toArray(): ArrayXY;
}
class PointArray extends Array<ArrayXY> {
constructor();
constructor(array?: ArrayAlias<ArrayXY> | number[]);
toLine(): LineAttr;
transform(m: Matrix | MatrixLike): PointArray
move(x: number, y: number): this;
size(width: number, height: number): this;
bbox(): Box;
to(a: any): Morphable;
toString(): string;
}
type NumberUnit = [number, string]
class Number {
constructor();
constructor(value: Number);
constructor(value: string);
constructor(value: number, unit?: any);
constructor(n: NumberUnit);
value: number
unit: any
toString(): string;
toJSON(): object;
toArray(): NumberUnit
valueOf(): number;
plus(number: NumberAlias): Number;
minus(number: NumberAlias): Number;
times(number: NumberAlias): Number;
divide(number: NumberAlias): Number;
convert(unit: string): Number;
to(a: any): Morphable
}
type NumberAlias = Number | number | string;
type LineCommand = ['M' | 'm' | 'L' | 'l', number, number] | ['H' | 'h' | 'V' | 'v', number] | ['Z' | 'z']
type CurveCommand =
['C' | 'c', number, number, number, number, number, number] |
['S' | 's' | 'Q' | 'q', number, number, number, number] | ['T' | 't', number, number] |
['A' | 'a', number, number, number, number, number, number, number]
type PathCommand = LineCommand | CurveCommand
type PathArrayAlias = PathArray | PathCommand[] | (string | number)[] | string;
class PathArray extends Array<PathCommand> {
constructor();
constructor(d: ArrayAlias<PathCommand> | PathArrayAlias);
move(x: number, y: number): this;
size(width: number, height: number): this;
equalCommands(other: PathArray): boolean
morph(pa: PathArray): this
parse(array?: ArrayAlias<PathCommand> | PathArrayAlias): PathCommand[];
bbox(): Box;
to(a: any): Morphable
}
interface TransformData {
origin?: number[];
scaleX?: number;
scaleY?: number;
shear?: number;
rotate?: number;
translateX?: number;
translateY?: number;
originX?: number;
originY?: number;
}
interface MatrixLike {
a?: number;
b?: number;
c?: number;
d?: number;
e?: number;
f?: number;
}
interface MatrixExtract extends TransformData, MatrixLike { }
type FlipType = 'both' | 'x' | 'y' | boolean
type ArrayXY = [number, number]
type CoordinateXY = ArrayXY | { x: number, y: number }
interface MatrixTransformParam {
rotate?: number
flip?: FlipType
skew?: ArrayXY | number
skewX?: number
skewY?: number
scale?: ArrayXY | number
scaleX?: number
scaleY?: number
shear?: number
theta?: number
origin?: CoordinateXY | string
around?: CoordinateXY
ox?: number
originX?: number
oy?: number
originY?: number
position?: CoordinateXY
px?: number
positionX?: number
py?: number
positionY?: number
translate?: CoordinateXY
tx?: number
translateX?: number
ty?: number
translateY?: number
relative?: CoordinateXY
rx?: number
relativeX?: number
ry?: number
relativeY?: number
}
type MatrixAlias = MatrixLike | TransformData | MatrixTransformParam | number[] | Element | string;
class Matrix implements MatrixLike {
constructor();
constructor(source: MatrixAlias);
constructor(a: number, b: number, c: number, d: number, e: number, f: number);
a: number;
b: number;
c: number;
d: number;
e: number;
f: number;
[key: string]: any
clone(): Matrix;
transform(o: MatrixLike | MatrixTransformParam): Matrix
compose(o: MatrixExtract): Matrix
decompose(cx?: number, cy?: number): MatrixExtract
multiply(m: MatrixAlias | Matrix): Matrix;
multiplyO(m: MatrixAlias | Matrix): this;
lmultiply(m: MatrixAlias | Matrix): Matrix;
lmultiplyO(m: MatrixAlias | Matrix): this;
inverse(): Matrix;
inverseO(): this;
translate(x?: number, y?: number): Matrix;
translateO(x?: number, y?: number): this;
scale(x: number, y?: number, cx?: number, cy?: number): Matrix;
scaleO(x: number, y?: number, cx?: number, cy?: number): this;
rotate(r: number, cx?: number, cy?: number): Matrix;
rotateO(r: number, cx?: number, cy?: number): this;
flip(a: NumberAlias, offset?: number): Matrix;
flipO(a: NumberAlias, offset?: number): this;
flip(offset?: number): Matrix;
shear(a: number, cx?: number, cy?: number): Matrix;
shearO(a: number, cx?: number, cy?: number): this;
skew(y?: number, cx?: number, cy?: number): Matrix;
skewO(y?: number, cx?: number, cy?: number): this;
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;
aroundO(cx?: number, cy?: number, matrix?: Matrix): this;
equals(m: Matrix): boolean
toString(): string;
toArray(): number[];
valueOf(): MatrixLike;
to(a: any): Morphable;
}
type ListEachCallback<T> = (el: T, index: number, list: List<T>) => any;
class List<T> extends BuiltInArray<T> {
each(fn: ListEachCallback<T>): List<any>;
each(name: string, ...args: any[]): List<any>;
toArray(): T[];
}
class Eventobject {
[key: string]: Eventobject;
}
class EventTarget {
events: Eventobject
addEventListener(): void
dispatch(event: Event | string, data?: object): Event
dispatchEvent(event: Event): boolean
fire(event: Event | string, data?: object): this
getEventHolder(): this | Node
getEventTarget(): this | Node
on(events: string | Event[], cb: EventListener, binbind?: any, options?: AddEventListenerOptions): this;
off(events?: string | Event[], cb?: EventListener | number, options?: AddEventListenerOptions): this;
removeEventListener(): void
}
interface ColorLike {
r: number;
g: number;
b: number;
x: number;
y: number;
z: number;
h: number;
s: number;
l: number;
a: number;
c: number;
m: number;
k: number;
space: string;
}
type ColorAlias = string | ColorLike;
class Color implements ColorLike {
r: number;
g: number;
b: number;
x: number;
y: number;
z: number;
h: number;
s: number;
l: number;
a: number;
c: number;
m: number;
k: number;
space: string;
constructor()
constructor(color: ColorAlias, space?: string);
constructor(a: number, b: number, c: number, space?: string)
constructor(a: number, b: number, c: number, d: number, space?: string)
constructor(a: number[], space?: string)
rgb(): Color
lab(): Color
xyz(): Color
lch(): Color
hsl(): Color
cmyk(): Color
toHex(): string
toString(): string
toRgb(): string
toArray(): any[]
to(a: any): Morphable
fromArray(a: any): this
static random(mode: 'sine', time?: number): Color
static random(mode?: string): Color
}
interface BoxLike {
height: number;
width: number;
y: number;
x: number;
cx?: number;
cy?: number;
w?: number;
h?: number;
x2?: number;
y2?: number;
}
class Box implements BoxLike {
height: number;
width: number;
y: number;
x: number;
cx: number;
cy: number;
w: number;
h: number;
x2: number;
y2: number;
constructor();
constructor(source: string);
constructor(source: number[]);
constructor(source: DOMRect);
constructor(x: number, y: number, width: number, height: number);
merge(box: BoxLike): Box;
transform(m: Matrix): Box
addOffset(): this;
toString(): string;
toArray(): number[];
isNulled(): boolean;
to(v: MorphValueLike): Morphable;
}
type MorphValueLike = string | number | objectBag | NonMorphable | MatrixExtract | Array<any> | any[]
class Morphable {
constructor();
constructor(st: Stepper);
from(): MorphValueLike
from(v: MorphValueLike): this
to(): MorphValueLike
to(v: MorphValueLike): this
type(): any
type(t: any): this
stepper(): Stepper
stepper(st: Stepper): this
done(): boolean
at(pos: number): any
}
class objectBag {
constructor();
constructor(a: object);
valueOf(): object
toArray(): object[]
to(a: object): Morphable
fromArray(a: any[]): this
}
class NonMorphable {
constructor(a: object)
valueOf(): object
toArray(): object[]
to(a: object): Morphable
fromArray(a: object): this
}
class TransformBag {
constructor()
constructor(a: number[])
constructor(a: TransformData)
defaults: TransformData
toArray(): number[]
to(t: TransformData): Morphable
fromArray(t: number[]): this
}
interface Stepper {
done(c?: object): boolean
}
class Ease implements Stepper {
constructor()
constructor(fn: string)
constructor(fn: Function)
step(from: number, to: number, pos: number): number
done(): boolean
}
class Controller implements Stepper {
constructor(fn?: Function)
step(current: number, target: number, dt: number, c: number): number
done(c?: object): boolean
}
interface QueueParam {
value: any
next?: any
prev?: any
}
class Queue {
constructor();
push(value: any): QueueParam
shift(): any
first(): number
last(): number
remove(item: QueueParam): void
}
interface ScheduledRunnerInfo {
start: number
duration: number
end: number
runner: Runner
}
class Timeline extends EventTarget {
constructor()
constructor(fn: Function)
schedule(runner: Runner, delay?: number, when?: string): this
schedule(): ScheduledRunnerInfo[]
unschedule(runner: Runner): this
getEndTime(): number
updateTime(): this
persist(dtOrForever?: number | boolean): this
play(): this
pause(): this
stop(): this
finish(): this
speed(speed: number): this
reverse(yes: boolean): this
seek(dt: number): this
time(): number
time(time: number): this
source(): Function
source(fn: Function): this
}
interface TimesParam {
duration: number
delay: number
when: number | string
swing: boolean
wait: number
times: number
}
type TimeLike = number | TimesParam | Stepper
type EasingCallback = (...any: any) => number
type EasingLiteral = "<>" | "-" | "<" | ">"
class Runner {
constructor();
constructor(options: Function);
constructor(options: number);
constructor(options: Controller);
static sanitise: (duration?: TimeLike, delay?: number, when?: string) => object
element(): Element
element(el: Element): this
timeline(): Timeline
timeline(timeline: Timeline): this
animate(duration: TimeLike, delay?: number, when?: string): this
schedule(delay: number, when?: string): this
schedule(timeline: Timeline, delay?: number, when?: string): this
unschedule(): this
loop(times?: number, swing?: boolean, wait?: number): this
loop(times: TimesParam): this
delay(delay: number): this
during(fn: Function): this
queue(initFn: Function, runFn: Function, retargetFn?: boolean | Function, isTransform?: boolean): this
after(fn: EventListener): this
time(): number
time(time: number): this
duration(): number
loops(): number
loops(p: number): this
persist(dtOrForever?: number | boolean): this
position(): number
position(p: number): this
progress(): number
progress(p: number): this
step(deta?: number): this
reset(): this
finish(): this
reverse(r?: boolean): this
ease(fn: EasingCallback) : this
ease(kind: EasingLiteral) : this
active(): boolean
active(a: boolean): this
addTransform(m: Matrix): this
clearTransform(): this
clearTransformsFromQueue(): void
attr(a: string | object, v?: string): this
css(s: string | object, v?: string): this
styleAttr(type: string, name: string | object, val?: string): this
zoom(level: NumberAlias, point?: Point): this
transform(transforms: MatrixTransformParam, relative?: boolean, affine?: boolean): this
x(x: number): this
y(y: number): this
dx(dx: number): this
dy(dy: number): this
cx(x: number): this
cy(y: number): this
dmove(dx: number, dy: number): this
move(x: number, y: number): this
center(x: number, y: number): this
size(width: number, height: number): this
width(width: number): this
height(height: number): this
plot(a: object): this
plot(a: number, b: number, c: number, d: number): this
leading(value: number): this
viewbox(x: number, y: number, width: number, height: number): this
update(offset: number, color: number, opacity: number): this
update(o: StopProperties): this
rx(): number
rx(rx: number): this
ry(): number
ry(ry: number): this
from(x: NumberAlias, y: NumberAlias): this
to(x: NumberAlias, y: NumberAlias): this
}
let Animator: {
nextDraw: any
frames: Queue
timeouts: Queue
immediates: Queue
timer(): boolean
frame(fn: Function): object
timeout(fn: Function, delay?: number): object
immediate(fn: Function): object
cancelFrame(o: object): void
clearTimeout(o: object): void
cancelImmediate(o: object): void
}
type QuerySelector = string
class Dom extends EventTarget {
node: HTMLElement | SVGElement;
type: string;
constructor(node?: HTMLElement, attr?: object);
constructor(att: object);
add(element: Element, i?: number): this;
addTo(parent: Dom | HTMLElement | string): this
children(): List<Element>;
clear(): this;
clone(): this;
each(block: (index: number, children: Element[]) => void, deep?: boolean): this;
element(element: string, inherit?: object): this;
first(): Element;
get(i: number): Element;
getEventHolder(): LinkedHTMLElement;
getEventTarget(): LinkedHTMLElement;
has(element: Element): boolean;
id(): string
id(id: string): this
index(element: Element): number;
last(): Element;
matches(selector: string): boolean;
@paramtype
parent(type?: ElementTypeAlias | QuerySelector): Dom | null;
put(element: Element, i?: number): Element;
@paramparent
putIn(parent: ElementAlias | Node | QuerySelector): Dom;
remove(): this;
removeElement(element: Element): this;
replace<T extends Dom>(element: T): T;
round(precision?: number, map?: string[]): this
svg(): string;
svg(a: string, outer: true): Element;
svg(a: string, outer?: false): this;
svg(a: boolean, outer?: boolean): string;
svg(a: null | Function, outer?: boolean): string;
toString(): string;
words(text: string): this;
writeDataToDom(): this;
attr(): any;
@paramname
@paramvalue
@paramnamespace
attr(name: string, value: any, namespace?: string): this;
attr(name: string): any;
attr(obj: object): this;
attr(obj: string[]): object;
find(query: string): List<Element>
findOne(query: string): Dom | null
data(a: string): object | string | number
data(a: string, v: object, substain?: boolean): this
data(a: object): this
siblings(): List<Element>
position(): number
next(): Element
prev(): Element
forward(): this
backward(): this
front(): this
back(): this
before(el: Element): Element
after(el: Element): Element
insertBefore(el: Element): this
insertAfter(el: Element): this
classes(): string[]
hasClass(name: string): boolean
addClass(name: string): this
removeClass(name: string): this
toggleClass(name: string): this
css(): Partial<CSSStyleDeclaration>
css<T extends CSSStyleName>(style: T): CSSStyleDeclaration[T]
css<T extends CSSStyleName[]>(style: T): Partial<CSSStyleDeclaration>
css<T extends CSSStyleName>(style: T, val: CSSStyleDeclaration[T]): this
css(style: Partial<CSSStyleDeclaration>): this
show(): this
hide(): this
visible(): boolean
remember(name: string, value: any): this;
remember(name: string): any;
remember(obj: object): this;
forget(...keys: string[]): this;
forget(): this;
memory(): object;
addEventListener(): void
dispatch(event: Event | string, data?: object): Event
dispatchEvent(event: Event): boolean
fire(event: Event | string, data?: object): this
getEventHolder(): this | Node
getEventTarget(): this | Node
removeEventListener(): void
}
class ClipPath extends Container {
constructor();
constructor(node?: SVGClipPathElement);
constructor(attr: object);
node: SVGClipPathElement;
targets(): List<Element>;
remove(): this;
}
interface ViewBoxLike {
x: number;
y: number;
width: number;
height: number;
}
class Container extends Element {
circle(size?: NumberAlias): Circle;
circle(size: number, unit: number): Circle;
clip(): ClipPath;
ellipse(width?: number, height?: number): Ellipse;
flatten(parent: Dom, depth?: number): this;
foreignObject(width: number, height: number) : ForeignObject
gradient(type: string, block?: (stop: Gradient) => void): Gradient;
group(): G;
image(): Image;
image(href?: string, callback?: (e: Event) => void): Image;
line(points?: PointArrayAlias): Line;
line(x1: number, y1: number, x2: number, y2: number): Line;
link(url: string): A;
marker(width?: number, height?: number, block?: (marker: Marker) => void): Marker
mask(): Mask;
nested(): Svg;
path(): Path;
path(d: PathArrayAlias): Path;
pattern(width?: number, height?: number, block?: (pattern: Pattern) => void): Pattern
plain(text: string): Text;
polygon(points?: PointArrayAlias): Polygon;
polyline(points?: PointArrayAlias): Polyline;
rect(width?: number, height?: number): Rect;
style(): Style;
text(block: (tspan: Tspan) => void): Text;
text(text: string): Text;
ungroup(parent: Dom, depth?: number): this;
use(element: Element | string, file?: string): Use;
viewbox(): Box;
viewbox(viewbox: ViewBoxLike | string): this;
viewbox(x: number, y: number, width: number, height: number): this;
textPath(text: string | Text, path: string | Path): TextPath
symbol(): Symbol
zoom(): number
zoom(level: NumberAlias, point?: Point): this;
}
class Defs extends Container {
constructor(node?: SVGDefsElement);
node: SVGDefsElement;
marker(width?: number, height?: number, block?: (marker: Marker) => void): Marker
}
class Svg extends Container {
constructor(svgElement?: SVGSVGElement);
constructor(id: string);
node: SVGSVGElement;
namespace(): this;
defs(): Defs;
remove(): this;
isRoot(): boolean;
}
interface Sugar {
fill(): any
fill(fill: FillData): this;
fill(color: string): this;
fill(pattern: Element): this;
fill(image: Image): this;
stroke(): any;
stroke(stroke: StrokeData): this;
stroke(color: string): this;
matrix(a?: number, b?: number, c?: number, d?: number, e?: number, f?: number): this;
matrix(mat: MatrixAlias, b?: number, c?: number, d?: number, e?: number, f?: number): this;
rotate(degrees: number, cx?: number, cy?: number): this;
skew(skewX?: number, skewY?: number, cx?: number, cy?: number): this;
scale(scaleX?: number, scaleY?: number, cx?: number, cy?: number): this;
translate(x: number, y: number): this;
shear(lam: Matrix, cx: number, cy: number): this
relative(x: number, y: number): this
flip(direction?: string, around?: number): this
flip(around: number): this
opacity(): number
opacity(value: number): this
font(a: string): string
font(a: string, v: string | number): this
font(a: object): this
}
class Symbol extends Container {
constructor(svgElement?: SVGSymbolElement);
constructor(attr: object)
node: SVGSymbolElement;
}
class Element extends Dom implements Sugar {
constructor(node?: SVGElement);
constructor(attr: object);
node: SVGElement;
type: string;
dom: any
addClass(name: string): this;
after(element: Element): Element;
animate(duration?: TimeLike, delay?: number, when?: string): Runner;
delay(by: number, when?: string): Runner
attr(): any;
attr(name: string, value: any, namespace?: string): this;
attr(name: string): any;
attr(obj: string[]): object;
attr(obj: object): this;
back(): this;
backward(): this;
bbox(): Box;
before(element: Element): Element;
center(x: number, y: number): this;
classes(): string[];
click(cb: Function | null): this;
clipper(): ClipPath;
clipWith(element: Element): this;
clone(): this;
ctm(): Matrix;
cx(): number;
cx(x: number): this;
cy(): number;
cy(y: number): this;
data(name: string, value: any, sustain?: boolean): this;
data(name: string): any;
data(val: object): this;
dblclick(cb: Function | null): this;
defs(): Defs;
dmove(x: NumberAlias, y: NumberAlias): this;
dx(x: NumberAlias): this;
dy(y: NumberAlias): this;
event(): Event | CustomEvent;
fill(): any;
fill(color: string): this;
fill(color: Color | ColorLike): this;
fill(color: FillData): this;
fill(pattern: Element): this;
fire(event: Event): this;
fire(event: string, data?: any): this;
flip(a: string, offset?: number): this;
flip(offset?: number): this;
font(a: object): this
font(a: string, v: string | number): this
font(a: string): string
forget(...keys: string[]): this;
forget(): this;
forward(): this;
front(): this;
hasClass(name: string): boolean;
height(): NumberAlias;
height(height: NumberAlias): this;
hide(): this;
hide(): this;
id(): string;
id(id: string): this;
inside(x: number, y: number): boolean;
is(cls: any): boolean;
linkTo(url: (link: A) => void): A;
linkTo(url: string): A;
masker(): Mask
maskWith(element: Element): this;
maskWith(mask: Mask): this;
matches(selector: string): boolean;
matrix(): Matrix;
matrix(a?: number, b?: number, c?: number, d?: number, e?: number, f?: number): this;
matrix(mat: MatrixAlias, b?: number, c?: number, d?: number, e?: number, f?: number): this;
matrixify(): Matrix;
memory(): object;
mousedown(cb: Function | null): this;
mousemove(cb: Function | null): this;
mouseout(cb: Function | null): this;
mouseover(cb: Function | null): this;
mouseup(cb: Function | null): this;
mouseenter(cb: Function | null): this;
mouseleave(cb: Function | null): this;
move(x: NumberAlias, y: NumberAlias): this;
native(): LinkedHTMLElement;
next(): Element;
opacity(): number;
opacity(o: number): this;
relative(x: number, y: number): this
shear(lam: Matrix, cx: number, cy: number): this
toRoot(): Svg;
parents(): List<Element>
@paramutil
parents<T extends Dom>(util: QuerySelector | T | null ): List<Element>
@paramattr
reference<R extends Dom>(attr: AttributeReference): R | null
point(): Point;
point(position: CoordinateXY): Point;
point(point: Point): Point;
point(x: number, y: number): Point;
position(): number;
prev(): Element;
rbox(element?: Element): Box;
reference(type: string): Element;
remember(name: string, value: any): this;
remember(name: string): any;
remember(obj: object): this;
remove(): this;
removeClass(name: string): this;
root(): Svg;
rotate(d: number, cx?: number, cy?: number): this;
scale(x?: number, y?: number, cx?: number, cy?: number): this;
screenCTM(): Matrix;
setData(data: object): this;
show(): this;
show(): this;
size(width?: NumberAlias, height?: NumberAlias): this;
skew(x?: number, y?: number, cx?: number, cy?: number): this;
stop(jumpToEnd: boolean, clearQueue: boolean): Animation;
stop(offset?: NumberAlias | string, color?: NumberAlias, opacity?: NumberAlias): Stop;
stop(val: { offset?: NumberAlias | string, color?: NumberAlias, opacity?: NumberAlias }): Stop;
stroke(): any;
stroke(color: string): this;
stroke(stroke: StrokeData): this;
timeline(): Timeline
timeline(tl: Timeline): this
toggleClass(name: string): this;
toParent(parent: Dom): this;
toSvg(): this;
touchcancel(cb: Function | null): this;
touchend(cb: Function | null): this;
touchleave(cb: Function | null): this;
touchmove(cb: Function | null): this;
touchstart(cb: Function | null): this;
transform(): MatrixExtract;
transform(t: MatrixAlias, relative?: boolean): this;
translate(x: number, y: number): this;
unclip(): this;
unmask(): this;
untransform(): this;
visible(): boolean;
width(): NumberAlias;
width(width: NumberAlias): this;
x(): NumberAlias;
x(x: NumberAlias): this;
y(): NumberAlias;
y(y: NumberAlias): this;
}
interface CircleMethods extends Shape {
rx(rx: number): this;
rx(): this;
ry(ry: number): this;
ry(): this;
radius(x: number, y?: number): this;
}
class Circle extends Shape implements CircleMethods {
constructor(node?: SVGCircleElement);
constructor(attr: CircleAttr)
node: SVGCircleElement;
rx(rx: number): this;
rx(): this;
ry(ry: number): this;
ry(): this;
radius(x: number, y?: number): this;
}
class Ellipse extends Shape implements CircleMethods {
node: SVGEllipseElement;
constructor(attr: EllipseAttr)
constructor(node?: SVGEllipseElement);
rx(rx: number): this;
rx(): this;
ry(ry: number): this;
ry(): this;
radius(x: number, y?: number): this;
}
interface StopProperties {
color?: ColorAlias;
offset?: number | string;
opacity?: number;
}
class Stop extends Element {
update(offset?: number, color?: ColorAlias, opacity?: number): this;
update(opts: StopProperties): this;
}
class Gradient extends Container {
constructor(node?: SVGGradientElement);
constructor(attr: object);
constructor(type: string);
node: SVGGradientElement;
at(offset?: number, color?: ColorAlias, opacity?: number): Stop;
at(opts: StopProperties): Stop;
url(): string;
toString(): string;
targets(): List<Element>
bbox(): Box
from(x: number, y: number): this;
to(x: number, y: number): this;
TODO
radius(x: number, y?: number): this;
targets(): List<Element>
bbox(): Box
update(block?: (gradient: Gradient) => void): this;
}
class G extends Container {
constructor(node?: SVGGElement);
constructor(attr: object);
node: SVGGElement;
gbox(): Box;
}
class A extends Container {
constructor(node?: SVGAElement);
constructor(attr: object);
node: SVGAElement;
to(url: string): this;
to(): string;
target(target: string): this;
target(): string;
}
class ForeignObject extends Element {
constructor(node?: SVGForeignObjectElement, attrs?: object);
constructor(attrs?: object);
add(element: Dom, i?: number): this;
}
class Image extends Shape {
constructor(node?: SVGImageElement);
constructor(attr: object);
node: SVGImageElement;
load(url?: string, callback?: (event: Event) => void): this;
}
type PointArrayAlias = number[] | ArrayXY[] | PointArray | string;
class Line extends Shape {
constructor(attr: LineAttr)
constructor(node?: SVGLineElement);
node: SVGLineElement;
array(): PointArray;
plot(): 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;
marker(position: string, width?: number, height?: number, block?: (marker: Marker) => void): Marker;
marker(position: string, marker: Marker): Marker;
}
TODO
class Marker extends Container {
constructor();
node: SVGMarkerElement;
ref(x: string | number, y: string | number): this;
update(block: (marker: Marker) => void): this;
toString(): string;
orient(orientation: 'auto' | 'auto-start-reverse' | number | Number): this;
orient(): string;
}
class Mask extends Container {
constructor(node?: SVGMaskElement);
constructor(attr: object);
node: SVGMaskElement;
remove(): this
targets(): List<Element>;
}
class Path extends Shape {
constructor(attr: PathAttr)
constructor(node?: SVGPathElement);
node: SVGPathElement;
morphArray: PathArray;
array(): PathArray;
plot(): PathArray;
plot(d: PathArrayAlias): this;
marker(position: string, width?: number, height?: number, block?: (marker: Marker) => void): this;
marker(position: string, marker: Marker): this;
length(): number;
pointAt(length: number): { x: number, y: number };
text(text: string): TextPath
text(text: Text): TextPath
targets(): List<Element>
}
class Pattern extends Container {
url(): string;
url(...rest: any[]): never;
update(block: (pattern: Pattern) => void): this;
toString(): string;
}
interface poly {
array(): PointArray;
plot(): PointArray
plot(p: PointArrayAlias): this;
clear(): this;
move(x: number, y: number): this;
size(width: number, height?: number): this;
}
interface pointed {
x(): number
x(x: number): this
y(): number
y(y: number): this
height(): number
height(h: number): this
width(): number
width(w: number): this
}
class Polyline extends Shape implements poly, pointed {
constructor(node?: SVGPolylineElement);
constructor(attr: PolyAttr);
node: SVGPolylineElement;
array(): PointArray;
plot(): PointArray
plot(p: PointArrayAlias): this;
x(): number;
x(x: number): this
y(): number;
y(y: number): this
height(): number
height(h: number): this
width(): number
width(w: number): this
move(x: number, y: number): this;
size(width: number, height?: number): this;
marker(position: string, width?: number, height?: number, block?: (marker: Marker) => void): Marker;
marker(position: string, marker: Marker): Marker;
}
class Polygon extends Shape implements poly, pointed {
constructor(node?: SVGPolygonElement);
constructor(attr: PolyAttr)
node: SVGPolygonElement;
array(): PointArray;
plot(): PointArray;
plot(p: PointArrayAlias): this;
x(): number;
x(x: number): this
y(): number;
y(y: number): this
height(): number
height(h: number): this
width(): number
width(w: number): this
move(x: number, y: number): this;
size(width: number, height?: number): this;
marker(position: string, width?: number, height?: number, block?: (marker: Marker) => void): Marker;
marker(position: string, marker: Marker): Marker;
}
class Rect extends Shape {
constructor(node?: SVGRectElement);
constructor(attr: RectAttr)
node: SVGRectElement;
radius(x: number, y?: number): this;
}
class Shape extends Element {
}
interface StrokeData {
color?: string;
width?: number;
opacity?: number;
linecap?: string;
linejoin?: string;
miterlimit?: number;
dasharray?: string;
dashoffset?: number;
}
interface FillData {
color?: string
opacity?: number
rule?: string
}
interface FontData {
family?: string;
size?: NumberAlias;
anchor?: string;
leading?: NumberAlias;
weight?: string;
style?: string
}
interface Textable {
plain(text: string): this;
length(): number;
}
class Text extends Shape implements Textable {
constructor(node?: SVGElement);
constructor(attr: TextAttr)
clone(): this;
text(): string;
text(text: string): this;
text(block: (text: this) => void): this;
leading(): Number;
leading(leading: NumberAlias): this;
rebuild(enabled: boolean): this;
build(enabled: boolean): this;
clear(): this;
plain(text: string): this;
length(): number;
get(i: number): Tspan;
path(): TextPath
path(d: PathArrayAlias | Path): TextPath;
track(): Element;
ax(): string
ax(x: string): this
ay(): string
ay(y: string): this
amove(x: number, y: number): this
textPath(): TextPath
tspan(text: string): Tspan;
tspan(block: (tspan: Tspan) => void): this;
}
class Tspan extends Text implements Textable {
constructor(node?: SVGElement);
constructor(attr: TextAttr);
dx(): number;
dx(x: NumberAlias): this;
dy(): number;
dy(y: NumberAlias): this;
newLine(): this;
tspan(text: string): Tspan;
tspan(block: (tspan: Tspan) => void): this;
length(): number;
text(): string;
text(text: string): this;
text(block: (text: this) => void): this;
plain(text: string): this;
}
class TextPath extends Text {
constructor();
constructor(attr: TextPathAttr)
array(): Array<any>
plot(): PathArray
plot(d: string): this
track(): Path
}
class Style extends Element {
constructor(node: SVGElement, attr?: StylingAttr);
addText(text: string): this;
font(a: object): this
font(a: string, v: string | number): this
font(a: string): string
rule(selector: string, obj: any): this;
}
class Use extends Shape {
use(element: string, file?: string): this;
}
type ViewBoxAlias = ViewBoxLike | number[] | string | Element;
interface ViewBox {
x: number;
y: number;
width: number;
height: number;
toString(): string;
at(pos: number): ViewBox;
}
}