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 48KB

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