Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

svg.js.d.ts 54KB

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