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

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