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

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016
  1. export = svgjs;
  2. export as namespace svgjs;
  3. declare var svgjs: svgjs.Library;
  4. // todo add SVG.FX
  5. declare namespace svgjs {
  6. export interface Library {
  7. (id: string): Doc;
  8. (domElement: HTMLElement): Doc;
  9. ns: string;
  10. xmlns: string;
  11. xlink: string;
  12. svgjs: string;
  13. supported: boolean;
  14. did: number;
  15. eid(name: string): string;
  16. create(name: string): any;
  17. extend(parent: Object, obj: Object): void;
  18. invent(config: Object): any;
  19. adopt(node: HTMLElement): Element;
  20. prepare(element: HTMLElement): void;
  21. }
  22. interface LinkedHTMLElement extends HTMLElement {
  23. instance: Element;
  24. }
  25. // arrange.js
  26. interface Element {
  27. front(): this;
  28. back(): this;
  29. forward(): this;
  30. backward(): this;
  31. siblings(): Element[];
  32. position(): number;
  33. next(): Element;
  34. previous(): Element;
  35. before(element: Element): Element;
  36. after(element: Element): Element;
  37. }
  38. // array.js
  39. type ArrayAlias = _Array | number[] | string;
  40. interface _Array {
  41. new (array?: ArrayAlias, fallback?: number[]): _Array;
  42. value: number[];
  43. morph(array: number[]): this;
  44. settle(): number[];
  45. at(pos: NumberAlias): _Array;
  46. toString(): string;
  47. valueOf(): number[];
  48. parse(array: ArrayAlias): number[];
  49. split(string: string): number[];
  50. reverse(): this;
  51. clone(): _Array;
  52. }
  53. interface Library { Array: _Array }
  54. // attr.js
  55. interface Element {
  56. attr(): object;
  57. attr(name: string): any;
  58. attr(obj: Object): this;
  59. attr(name: string, value: any, namespace?: string): this;
  60. }
  61. // bare.js
  62. export interface Bare extends Element {
  63. new (element: string, inherit?: any): Bare;
  64. words(text: string): this;
  65. }
  66. interface Parent {
  67. element(element: string, inherit?: Object): Bare;
  68. }
  69. interface Library { Bare: Bare; }
  70. // boxes.js
  71. interface Box {
  72. height: number;
  73. width: number;
  74. y: number;
  75. x: number;
  76. cx: number;
  77. cy: number;
  78. w: number;
  79. h: number;
  80. x2: number;
  81. y2: number;
  82. merge(box: Box): Box;
  83. transform(m: Matrix): Box
  84. }
  85. export interface BBox extends Box {
  86. new (element?: Element): BBox;
  87. }
  88. export interface RBox extends Box {
  89. new (element?: Element): RBox;
  90. }
  91. export interface TBox extends Box {
  92. new (element?: Element): TBox;
  93. }
  94. interface Element {
  95. bbox(): BBox;
  96. rbox(): RBox;
  97. tbox(): TBox;
  98. }
  99. interface Library {
  100. BBox: BBox;
  101. RBox: RBox;
  102. TBox: TBox;
  103. }
  104. // clip.js
  105. export interface ClipPath extends Container {
  106. new (): ClipPath;
  107. targets: Element[];
  108. remove(): this;
  109. }
  110. interface Container {
  111. clip(): ClipPath;
  112. }
  113. interface Element {
  114. clipWith(element: Element): this;
  115. clipper: ClipPath;
  116. unclip(): this;
  117. }
  118. interface Library { ClipPath: ClipPath; }
  119. // color.js
  120. interface ColorLike {
  121. r: number;
  122. g: number;
  123. b: number;
  124. }
  125. type ColorAlias = string | ColorLike;
  126. export interface Color extends ColorLike{
  127. new (): Color;
  128. new (color: ColorAlias): Color;
  129. toString(): string;
  130. toHex(): string;
  131. toRgb(): string;
  132. brightness(): number;
  133. morph(color: ColorAlias): Color;
  134. at(pos: number): Color;
  135. }
  136. interface Library { Color: Color; }
  137. // container.js
  138. interface ViewBoxLike {
  139. x: number;
  140. y: number;
  141. width: number;
  142. height:number;
  143. }
  144. export interface Container extends Parent {
  145. new (): Container;
  146. }
  147. interface Library { Container: Container }
  148. // data.js
  149. interface Element {
  150. data(name: string): any;
  151. data(name: string, value: any, sustain?: boolean): this;
  152. }
  153. // default.js
  154. interface Library {
  155. defaults: {
  156. attrs: {
  157. 'fill-opacity': number;
  158. 'stroke-opacity': number;
  159. 'stroke-width': number;
  160. 'stroke-linejoin': string;
  161. 'stroke-linecap': string;
  162. 'fill': string;
  163. 'stroke': string;
  164. 'opacity': number;
  165. 'x': number;
  166. 'y': number;
  167. 'cx': number;
  168. 'cy': number;
  169. 'width': number;
  170. 'height': number;
  171. 'r': number;
  172. 'rx': number;
  173. 'ry': number;
  174. 'offset': number;
  175. 'stop-opacity': number;
  176. 'stop-color': string;
  177. 'font-size': number;
  178. 'font-family': string;
  179. 'text-anchor': string;
  180. }
  181. }
  182. }
  183. // defs.js
  184. export interface Defs extends Container {
  185. new (): Defs;
  186. }
  187. interface Library { Defs: Defs }
  188. // doc.js
  189. export interface Doc extends Container {
  190. new (): Doc;
  191. new (id: string): Doc;
  192. new (domElement: HTMLElement): Doc;
  193. namespace(): this;
  194. defs(): Defs;
  195. parent(): HTMLElement;
  196. spof(): this;
  197. remove(): this;
  198. }
  199. interface Library { Doc: Doc; }
  200. // element.js
  201. export interface Element {
  202. new (): Element;
  203. node: LinkedHTMLElement;
  204. type: string;
  205. x(x: NumberAlias): this;
  206. x(): number;
  207. y(y: NumberAlias): this;
  208. y(): number;
  209. //cx(x: number, anchor?: boolean): this;
  210. cx(x: number): this;
  211. cx(): number;
  212. //cy(y: number, anchor?: boolean): this;
  213. cy(y: number): this;
  214. cy(): number;
  215. move(x: NumberAlias, y: NumberAlias): this;
  216. center(x: number, y: number): this;
  217. width(width: NumberAlias): this;
  218. width(): number;
  219. height(height: NumberAlias): this;
  220. height(): number;
  221. size(width?: NumberAlias, height?: NumberAlias): this;
  222. clone(): Element;
  223. remove(): this;
  224. replace(element: Element): Element;
  225. addTo(parent: Parent): this;
  226. putIn(parent: Parent): Parent;
  227. id(): string;
  228. id(id: string): this;
  229. inside(x: number, y: number): boolean;
  230. show(): this;
  231. hide(): this;
  232. visible(): boolean;
  233. toString(): string;
  234. classes(): string[];
  235. hasClass(name: string): boolean;
  236. addClass(name: string): this;
  237. removeClass(name: string): this;
  238. toggleClass(name: string): this;
  239. reference(type: string): Element;
  240. parents(): Parent[];
  241. matches(selector: string): boolean;
  242. native(): LinkedHTMLElement;
  243. svg(svg: string): this;
  244. writeDataToDom(): this,
  245. setData(data: object): this,
  246. is(cls: any): boolean;
  247. }
  248. interface Library { Element: Element; }
  249. // ellipse.js
  250. interface CircleMethods extends Shape {
  251. rx(rx: number): this;
  252. rx(): this;
  253. ry(ry: number): this;
  254. ry(): this;
  255. radius(x: number, y?: number): this;
  256. }
  257. export interface Circle extends CircleMethods {
  258. new (): Circle;
  259. }
  260. export interface Ellipse extends CircleMethods {
  261. new (): Ellipse;
  262. }
  263. interface Container {
  264. circle(size?: number): Circle;
  265. ellipse(width?: number, height?: number): Ellipse;
  266. }
  267. interface Library {
  268. Circle: Circle;
  269. Ellipse: Ellipse;
  270. }
  271. // event.js
  272. interface Element {
  273. on(event: string, cb: Function, context?: Object): this;
  274. off(event: string, cb: Function, context?: Object): this;
  275. fire(event: string, data?: any): this;
  276. fire(event: Event): this;
  277. click(cb: Function): this;
  278. dblclick(cb: Function): this;
  279. mousedown(cb: Function): this;
  280. mouseup(cb: Function): this;
  281. mouseover(cb: Function): this;
  282. mouseout(cb: Function): this;
  283. mousemove(cb: Function): this;
  284. touchstart(cb: Function): this;
  285. touchmove(cb: Function): this;
  286. touchleave(cb: Function): this;
  287. touchend(cb: Function): this;
  288. touchcancel(cb: Function): this;
  289. }
  290. //fx.js
  291. interface Library {
  292. easing: {
  293. '-'(pos: number): number;
  294. '<>'(pos: number): number;
  295. '>'(pos: number): number;
  296. '<'(pos: number): number;
  297. }
  298. }
  299. interface Element {
  300. animate(duration?: number, ease?: string, delay?: number): Animation;
  301. animate(info: { ease?: string; duration?: number; delay?: number }): Animation;
  302. stop(jumpToEnd:boolean,clearQueue:boolean): Animation;
  303. }
  304. // TODO finishs FX
  305. interface StopProperties {
  306. color?: ColorAlias;
  307. offset?: number;
  308. opacity?: number;
  309. }
  310. // gradient.js
  311. export interface Stop extends Element {
  312. new (): Stop;
  313. update(offset?: number, color?: ColorAlias, opacity?: number): this;
  314. update(opts: StopProperties): this;
  315. }
  316. export interface Gradient extends Container {
  317. new (type: string): Gradient;
  318. at(offset?: number, color?: ColorAlias, opacity?: number): Stop;
  319. at(opts: StopProperties): Stop;
  320. update(block?: Function): this;
  321. fill(): string;
  322. fill(...params: any[]): never;
  323. toString(): string;
  324. from(x: number, y: number): this;
  325. to(x: number, y: number): this;
  326. radius(x: number, y?: number): this;
  327. }
  328. interface Container {
  329. gradient(type: string, block?: (stop: Gradient) => void): Gradient;
  330. }
  331. interface Library {
  332. Gradient: Gradient;
  333. Stop: Stop;
  334. }
  335. // group.js
  336. export interface G extends Container {
  337. new (): G;
  338. gbox(): BBox;
  339. }
  340. interface Container { group(): G; }
  341. interface Library { G: G; }
  342. // hyperlink.js
  343. export interface A extends Container {
  344. new (): A;
  345. to(url: string): this;
  346. to(): string;
  347. show(target: string): this;
  348. show(): string;
  349. show(...params: any[]): never;
  350. target(target: string): this;
  351. target(): string;
  352. }
  353. interface Container {
  354. link(url: string): A;
  355. }
  356. interface Element {
  357. linkTo(url: string): A;
  358. linkTo(url: (link: A) => void): A;
  359. }
  360. interface Library { A: A; }
  361. // image.js
  362. export interface Image extends Shape {
  363. new (): Image;
  364. load(url?: string): this;
  365. loaded(cb: (info: { width: number, height: number, ratio: number, url: string }) => void): this;
  366. error(cb: (event: Event) => void): this;
  367. }
  368. interface Container {
  369. image(): Image;
  370. image(href: string, size?: number): Image;
  371. image(href: string, width?: number, height?: number): Image;
  372. }
  373. interface Library { Image: Image; }
  374. // line.js
  375. interface ArrayPoint extends Array<number> { }
  376. type PointArrayAlias = ArrayPoint | number[] | PointArray | string;
  377. export interface Line extends Shape {
  378. new (): Line;
  379. array(): PointArray;
  380. plot(points: PointArrayAlias): this;
  381. plot(x1: number, y1: number, x2: number, y2: number): this;
  382. move(x: number, y: number): this;
  383. size(width?: number, height?: number): this;
  384. }
  385. interface Container {
  386. line(points: PointArrayAlias): Line;
  387. line(x1: number, y1: number, x2: number, y2: number): Line;
  388. }
  389. interface Library { Line: Line; }
  390. // marker.js
  391. export interface Marker extends Container {
  392. new (): Marker;
  393. ref(x: string | number, y: string | number): this;
  394. update(block: (marker: Marker) => void): this;
  395. toString(): string;
  396. }
  397. interface Container {
  398. marker(width?: number, height?: number, block?: (marker: Marker) => void): Marker
  399. }
  400. interface Defs {
  401. marker(width?: number, height?: number, block?: (marker: Marker) => void): Marker
  402. }
  403. interface Line {
  404. marker(position: string, width?: number, height?: number, block?: (marker: Marker) => void): Marker;
  405. marker(position: string, marker: Marker): Marker;
  406. }
  407. interface Polyline {
  408. marker(position: string, width?: number, height?: number, block?: (marker: Marker) => void): Marker;
  409. marker(position: string, marker: Marker): Marker;
  410. }
  411. interface Polygon {
  412. marker(position: string, width?: number, height?: number, block?: (marker: Marker) => void): Marker;
  413. marker(position: string, marker: Marker): Marker;
  414. }
  415. interface Path {
  416. marker(position: string, width?: number, height?: number, block?: (marker: Marker) => void): Marker;
  417. marker(position: string, marker: Marker): Marker;
  418. }
  419. interface Library {
  420. Marker: Marker;
  421. }
  422. // mask.js
  423. export interface Mask extends Container {
  424. new (): Mask;
  425. targets: Element[];
  426. }
  427. interface Container { mask(): Mask; }
  428. interface Element {
  429. maskWith(mask: Mask): this;
  430. maskWith(element: Element): this;
  431. masker: Mask;
  432. unmask(): this;
  433. }
  434. interface Library { Mask: Mask; }
  435. // matrix.js
  436. interface MatrixExtract {
  437. x: number;
  438. y: number;
  439. transformedX: number;
  440. transformedY: number;
  441. skewX: number;
  442. skewY: number;
  443. scaleX: number;
  444. scaleY: number;
  445. rotation: number;
  446. a: number;
  447. b: number;
  448. c: number;
  449. d: number;
  450. e: number;
  451. f: number;
  452. matrix: Matrix;
  453. }
  454. interface MatrixLike {
  455. a: number;
  456. b: number;
  457. c: number;
  458. d: number;
  459. e: number;
  460. f: number;
  461. }
  462. type MatrixAlias = MatrixLike | number[] | Element | string;
  463. export interface Matrix {
  464. new (): Matrix;
  465. new (source: MatrixAlias): Matrix;
  466. new (a: number, b: number, c: number, d: number, e: number, f: number): Matrix;
  467. a: number;
  468. b: number;
  469. c: number;
  470. d: number;
  471. e: number;
  472. f: number;
  473. extract(): MatrixExtract;
  474. clone(): Matrix;
  475. morph(matrix: Matrix): this;
  476. at(pos: number): Matrix;
  477. multiply(matrix: Matrix): Matrix;
  478. inverse(): Matrix;
  479. translate(x: number, y: number): Matrix;
  480. scale(x: number, y?: number, cx?: number, cy?: number): Matrix;
  481. rotate(r: number, cx?: number, cy?: number): Matrix;
  482. flip(a: string, offset?: number): Matrix;
  483. flip(offset?: number): Matrix;
  484. skew(x: number, y?: number, cx?: number, cy?: number): Matrix;
  485. skewX(x: number, cx?: number, cy?: number): Matrix;
  486. skewY(y: number, cx?: number, cy?: number): Matrix;
  487. around(cx: number, cy: number, matrix: Matrix): Matrix;
  488. native(): SVGMatrix;
  489. toString(): string;
  490. }
  491. interface Element {
  492. ctm(): Matrix;
  493. screenCTM(): Matrix;
  494. }
  495. interface Library { Matrix: Matrix }
  496. // memory.js
  497. interface Element {
  498. remember(name: string, value: any): this;
  499. remember(obj: Object): this;
  500. remember(name: string): any;
  501. forget(...keys: string[]): this;
  502. forget(): this;
  503. memory(): Object;
  504. }
  505. // nested.js
  506. export interface Nested extends Container {
  507. new (): Nested;
  508. }
  509. interface Container { nested(): Nested; }
  510. interface Library { Nested: Nested; }
  511. // number.js
  512. interface _Number {
  513. new (): _Number;
  514. new (value: _Number): _Number;
  515. new (value: string): _Number;
  516. new (value: number, unit?: any): _Number;
  517. toString(): string;
  518. toJSON(): Object;
  519. valueOf(): number;
  520. plus(number: number): _Number;
  521. minus(number: number): _Number;
  522. times(number: number): _Number;
  523. divide(number: number): _Number;
  524. to(unit: string): _Number;
  525. morph(number: any): this;
  526. at(pos: number): _Number;
  527. }
  528. interface Library { Number: _Number; }
  529. type NumberAlias = _Number | number | string;
  530. // parent.js
  531. export interface Parent extends Element {
  532. new (): Parent;
  533. children(): Element[];
  534. add(element: Element, i?: number): this;
  535. put(element: Element, i?: number): Element;
  536. has(element: Element): boolean;
  537. index(element: Element): number;
  538. get(i: number): Element;
  539. first(): Element;
  540. last(): Element;
  541. each(block: (index: number, children: Element[]) => void, deep?: boolean): this;
  542. removeElement(element: Element): this;
  543. clear(): this;
  544. defs(): Defs;
  545. }
  546. interface Library{ Parent: Parent }
  547. // path.js
  548. interface PathArrayPoint extends Array<number | string> { }
  549. type PathArrayAlias = PathArray | (string | number)[] | PathArrayPoint[] | string;
  550. export interface Path extends Shape {
  551. new (): Path;
  552. morphArray: PathArray;
  553. array(): PathArray;
  554. plot(d: PathArrayAlias): this;
  555. }
  556. interface Container {
  557. path(): Path;
  558. path(d: PathArrayAlias): Path;
  559. }
  560. interface Library{ Path: Path }
  561. // pathArray.js
  562. export interface PathArray extends _Array {
  563. new (): PathArray;
  564. new (d: PathArrayAlias): PathArray;
  565. move(x: number, y: number): this;
  566. size(width?: number, height?: number): this;
  567. parse(array: PathArrayAlias): PathArrayPoint[];
  568. parse(array: ArrayAlias): never;
  569. bbox(): BBox;
  570. }
  571. interface Library { PathArray: PathArray; }
  572. // pattern.js
  573. export interface Pattern extends Container {
  574. new (): Pattern;
  575. fill(): string;
  576. fill(...rest: any[]): never;
  577. update(block: (pattern: Pattern) => void): this;
  578. toString(): string;
  579. }
  580. interface Container {
  581. pattern(width?: number, height?: number, block?: (pattern: Pattern) => void): Pattern
  582. }
  583. interface Library { Pattern: Pattern }
  584. // point.js
  585. export interface Point {
  586. new (): Point;
  587. new (position: ArrayPoint): Point;
  588. new (point: Point): Point;
  589. new (position: { x: number, y: number }): Point;
  590. new (x: number, y: number): Point;
  591. clone(): Point;
  592. morph(point: Point): this;
  593. at(pos: number): Point;
  594. native(): SVGPoint;
  595. transform(matrix: Matrix): Point;
  596. }
  597. interface Library { Point: Point; }
  598. interface Element {
  599. point(): Point;
  600. point(position: ArrayPoint): Point;
  601. point(position: { x: number, y: number }): Point;
  602. point(x: number, y: number): Point;
  603. }
  604. // pointArray.js
  605. export interface PointArray extends _Array {
  606. new (): PointArray;
  607. new (points: PointArrayAlias): PointArray;
  608. toString(): string;
  609. toLine(): {
  610. x1: number;
  611. y1: number;
  612. x2: number;
  613. y2: number;
  614. };
  615. parse(points: PointArrayAlias): ArrayPoint[];
  616. parse(array: ArrayAlias): never;
  617. move(x: number, y: number): this;
  618. size(width?: number, height?: number): this;
  619. bbox(): BBox;
  620. }
  621. interface Library { PointArray: PointArray }
  622. // poly.js
  623. interface poly extends Shape {
  624. array(): PointArray;
  625. plot(p: PointArrayAlias): this;
  626. move(x: number, y: number): this;
  627. size(width: number, height: number): this;
  628. }
  629. export interface PolyLine extends poly {
  630. new (): PolyLine;
  631. }
  632. interface Library { PolyLine: PolyLine; }
  633. interface Container {
  634. polyline(points: PointArrayAlias): PolyLine;
  635. }
  636. export interface Polygon extends poly {
  637. new (): Polygon;
  638. }
  639. interface Library { Polygon: Polygon; }
  640. interface Container {
  641. polygon(points: PointArrayAlias): Polygon;
  642. }
  643. // rect.js
  644. export interface Rect extends Shape {
  645. new (): Rect;
  646. radius(x: number, y?: number): this;
  647. }
  648. interface Library { Rect: Rect; }
  649. interface Container {
  650. rect(width?: number, height?: number): Rect;
  651. }
  652. // regex.js
  653. interface Library {
  654. regex: {
  655. numberAndUnit: RegExp;
  656. hex: RegExp;
  657. rgb: RegExp;
  658. reference: RegExp;
  659. transforms: RegExp;
  660. whitespace: RegExp;
  661. isHex: RegExp;
  662. isRgb: RegExp;
  663. isCss: RegExp;
  664. isBlank: RegExp;
  665. isNumber: RegExp;
  666. isPercent: RegExp;
  667. isImage: RegExp;
  668. delimiter: RegExp;
  669. hyphen: RegExp;
  670. pathLetters: RegExp;
  671. isPathLetter: RegExp;
  672. dots: RegExp;
  673. }
  674. }
  675. // selector.js
  676. interface Library {
  677. get(id: string): Element;
  678. select(query: string, parent: HTMLElement): Set;
  679. }
  680. interface Parent {
  681. select(query: string): Set;
  682. }
  683. // set.js
  684. export interface Set {
  685. new (members?: Element[]): Set;
  686. add(...elments: Element[]): this;
  687. remove(element: Element): this;
  688. each(block: (index: number, members: Element[]) => void): this;
  689. clear(): this;
  690. length(): number;
  691. has(element: Element): this;
  692. index(element: Element): number;
  693. get(i: number): Element;
  694. first(): Element;
  695. last(): Element;
  696. valueOf(): Element[];
  697. bbox(): BBox;
  698. }
  699. interface Container { set(members?: Element[]): Set; }
  700. interface Library { Set: Set; }
  701. // shape.js
  702. export interface Shape extends Element {
  703. new (): Shape;
  704. }
  705. interface Library { Shape: Shape; }
  706. // style.js
  707. interface Element {
  708. style(styles: Object): this;
  709. style(style: string): any;
  710. style(style: string, value: any): this;
  711. }
  712. // sugar.js
  713. interface StrokeData {
  714. color?: string;
  715. width?: number;
  716. opacity?: number;
  717. linecap?: string;
  718. linejoin?: string;
  719. miterlimit?: number;
  720. dasharray?: string;
  721. dashoffset?: number;
  722. }
  723. interface Element {
  724. fill(fill: { color?: string; opacity?: number, rule?: string }): this;
  725. fill(color: string): this;
  726. fill(pattern: Element): this;
  727. fill(image: Image): this;
  728. stroke(stroke: StrokeData): this;
  729. stroke(color: string): this;
  730. rotate(d: number, cx?: number, cy?: number): this;
  731. skew(x: number, y?: number, cx?: number, cy?: number): this;
  732. scale(x: number, y?: number, cx?: number, cy?: number): this;
  733. translate(x: number, y: number): this;
  734. flip(a: string, offset?: number): this;
  735. flip(offset?: number): this;
  736. matrix(m: MatrixAlias): this;
  737. matrix(a: number, b: number, c: number, d: number, e: number, f: number): this;
  738. opacity(o: number): this;
  739. opacity(): number;
  740. dx(x: NumberAlias): this;
  741. dy(y: NumberAlias): this;
  742. dmove(x: NumberAlias, y: NumberAlias): this;
  743. }
  744. interface Path {
  745. length(): number;
  746. pointAt(length: number): { x: number, y: number };
  747. }
  748. interface FontData {
  749. family?: string;
  750. size?: NumberAlias;
  751. anchor?: string;
  752. leading?: NumberAlias;
  753. weight?: string;
  754. style?: string
  755. }
  756. interface Parent {
  757. font(font: FontData): this;
  758. }
  759. interface Text {
  760. font(font: FontData): this;
  761. }
  762. // text.js
  763. export interface Text extends Shape {
  764. new (): Text;
  765. clone(): Text;
  766. text(): string;
  767. text(text: string): this;
  768. text(block: (text: Text) => void): this;
  769. size(fontSize: NumberAlias): this;
  770. leading(): number;
  771. leading(leading: NumberAlias): this;
  772. lines(): Set;
  773. rebuild(enabled: boolean): this;
  774. build(enabled: boolean): this;
  775. plain(text: string): this;
  776. tspan(text: string): Tspan;
  777. tspan(block: (tspan: Tspan) => void): this;
  778. clear(): this;
  779. length(): number;
  780. }
  781. interface Container {
  782. text(text: string): Text;
  783. text(block: (tspan: Tspan) => void): Text;
  784. plain(text: string): Text;
  785. }
  786. interface Library { Text: Text; }
  787. export interface Tspan extends Shape {
  788. new (): Tspan;
  789. text(): string;
  790. text(text: string): Tspan;
  791. text(block: (tspan: Tspan) => void): this;
  792. dx(x: NumberAlias): this;
  793. dy(y: NumberAlias): this;
  794. newLine(): this;
  795. plain(text: any): this;
  796. tspan(text: string): Tspan;
  797. tspan(block: (tspan: Tspan) => void): this;
  798. clear(): this;
  799. length(): number;
  800. }
  801. interface Library { Tspan: Tspan; }
  802. // textpath.js
  803. export interface TextPath extends Parent {
  804. new (): TextPath;
  805. }
  806. interface Text {
  807. path(d: PathArrayAlias): this;
  808. track(): Element;
  809. textPath(): Element;
  810. }
  811. interface Library { TextPath: TextPath; }
  812. // transform.js
  813. interface Element {
  814. transform(t: Transform, relative?: boolean): Element;
  815. transform(): Transform;
  816. untransform(): this;
  817. matrixify(): Matrix;
  818. toParent(parent: Parent): this;
  819. toDoc(): this;
  820. }
  821. interface Transform {
  822. x?: number;
  823. y?: number;
  824. rotation?: number;
  825. cx?: number;
  826. cy?: number;
  827. scaleX?: number;
  828. scaleY?: number;
  829. skewX?: number;
  830. skewY?: number;
  831. matrix?: Matrix; // 1,0,0,1,0,0
  832. a?: number; // direct digits of matrix
  833. b?: number;
  834. c?: number;
  835. d?: number;
  836. e?: number;
  837. f?: number;
  838. }
  839. export interface Transformation {
  840. new (...transform: Transform[]): Transformation;
  841. new (source: Transform, inversed?: boolean): Transformation;
  842. at(pos: number): Matrix;
  843. undo(transform: Transform): this
  844. }
  845. export interface Translate extends Transformation {new (): Translate}
  846. export interface Rotate extends Transformation {new (): Rotate}
  847. export interface Scale extends Transformation {new (): Scale}
  848. export interface Skew extends Transformation {new (): Skew}
  849. interface Library {
  850. Transformation: Transformation;
  851. Translate: Translate;
  852. Rotate: Rotate;
  853. Scale: Scale;
  854. Skew: Skew;
  855. }
  856. // ungroup.js
  857. interface Parent {
  858. ungroup(parent: Parent, depth?: number): this;
  859. flatten(parent: Parent, depth?: number): this;
  860. }
  861. // use.js
  862. export interface Use extends Shape {
  863. new (): Use;
  864. element(element: Element, file?: string): this;
  865. }
  866. interface Container {
  867. use(element: Element, file?: string): Use;
  868. }
  869. interface Library { Use: Use; }
  870. // utilities.js
  871. interface Library {
  872. utils: {
  873. map(array: any[], block: Function): any;
  874. filter(array: any[], block: Function): any;
  875. radians(d: number): number;
  876. degrees(r: number): number;
  877. filterSVGElements: HTMLElement[]
  878. }
  879. }
  880. // viewbox.js
  881. type ViewBoxAlias = ViewBoxLike | number[] | string | Element;
  882. interface ViewBox {
  883. new (source: ViewBoxAlias): ViewBox;
  884. new (x: number, y: number, width: number, height: number): ViewBox;
  885. x: number;
  886. y: number;
  887. width: number;
  888. height: number;
  889. zoom?: number;
  890. toString(): string;
  891. morph(source: ViewBoxAlias): ViewBox;
  892. morph(x: number, y: number, width: number, height: number): ViewBox;
  893. at(pos:number): ViewBox;
  894. }
  895. interface Container {
  896. viewbox(): ViewBox;
  897. viewbox(x: number, y: number, width: number, height: number): this;
  898. viewbox(viewbox: ViewBoxLike): this;
  899. }
  900. interface Library { ViewBox: ViewBox; }
  901. export interface Animation {
  902. stop(): Animation;
  903. attr(name: string, value: any, namespace?: string): Animation;
  904. attr(obj: Object): Animation;
  905. attr(name: string): any;
  906. attr(): object;
  907. viewbox(x: number, y: number, w: number, h: number): Animation;
  908. move(x: number, y: number, anchor?: boolean): Animation;
  909. x(x: number, anchor?: boolean): Animation;
  910. y(y: number, anchor?: boolean): Animation;
  911. center(x: number, y: number, anchor?: boolean): Animation;
  912. cx(x: number, anchor?: boolean): Animation;
  913. cy(y: number, anchor?: boolean): Animation;
  914. size(w: number, h: number, anchor?: boolean): Animation;
  915. during(cb: (pos: number) => void): Animation;
  916. to(value: number): Animation;
  917. after(cb: () => void): Animation;
  918. rotate(degrees: number, cx?: number, cy?: number): Animation
  919. skew(skewX: number, skewY?: number, cx?: number, cy?: number): Animation
  920. scale(scaleX: number, scaleY?: number, cx?: number, cy?: number): Animation
  921. translate(x: number, y: number): Animation
  922. // TODO style, etc, bbox...
  923. }
  924. }