You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

svg.js.d.ts 51KB

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