@hadi77ir/pdfme-svg 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (242) hide show
  1. package/README.md +63 -0
  2. package/dist/applyparseattributes.d.ts +6 -0
  3. package/dist/applyparseattributes.d.ts.map +1 -0
  4. package/dist/applyparseattributes.js +333 -0
  5. package/dist/applyparseattributes.js.map +1 -0
  6. package/dist/context/attributestate.d.ts +34 -0
  7. package/dist/context/attributestate.d.ts.map +1 -0
  8. package/dist/context/attributestate.js +109 -0
  9. package/dist/context/attributestate.js.map +1 -0
  10. package/dist/context/context.d.ts +59 -0
  11. package/dist/context/context.d.ts.map +1 -0
  12. package/dist/context/context.js +46 -0
  13. package/dist/context/context.js.map +1 -0
  14. package/dist/context/referenceshandler.d.ts +15 -0
  15. package/dist/context/referenceshandler.d.ts.map +1 -0
  16. package/dist/context/referenceshandler.js +31 -0
  17. package/dist/context/referenceshandler.js.map +1 -0
  18. package/dist/context/stylesheets.d.ts +13 -0
  19. package/dist/context/stylesheets.d.ts.map +1 -0
  20. package/dist/context/stylesheets.js +163 -0
  21. package/dist/context/stylesheets.js.map +1 -0
  22. package/dist/context/textmeasure.d.ts +19 -0
  23. package/dist/context/textmeasure.d.ts.map +1 -0
  24. package/dist/context/textmeasure.js +93 -0
  25. package/dist/context/textmeasure.js.map +1 -0
  26. package/dist/context/viewport.d.ts +6 -0
  27. package/dist/context/viewport.d.ts.map +1 -0
  28. package/dist/context/viewport.js +7 -0
  29. package/dist/context/viewport.js.map +1 -0
  30. package/dist/fill/ColorFill.d.ts +10 -0
  31. package/dist/fill/ColorFill.d.ts.map +1 -0
  32. package/dist/fill/ColorFill.js +10 -0
  33. package/dist/fill/ColorFill.js.map +1 -0
  34. package/dist/fill/Fill.d.ts +14 -0
  35. package/dist/fill/Fill.d.ts.map +1 -0
  36. package/dist/fill/Fill.js +2 -0
  37. package/dist/fill/Fill.js.map +1 -0
  38. package/dist/fill/GradientFill.d.ts +11 -0
  39. package/dist/fill/GradientFill.d.ts.map +1 -0
  40. package/dist/fill/GradientFill.js +37 -0
  41. package/dist/fill/GradientFill.js.map +1 -0
  42. package/dist/fill/PatternFill.d.ts +11 -0
  43. package/dist/fill/PatternFill.d.ts.map +1 -0
  44. package/dist/fill/PatternFill.js +67 -0
  45. package/dist/fill/PatternFill.js.map +1 -0
  46. package/dist/fill/parseFill.d.ts +4 -0
  47. package/dist/fill/parseFill.d.ts.map +1 -0
  48. package/dist/fill/parseFill.js +61 -0
  49. package/dist/fill/parseFill.js.map +1 -0
  50. package/dist/index.d.ts +7 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +232 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/jspdf-shim.d.ts +132 -0
  55. package/dist/jspdf-shim.d.ts.map +1 -0
  56. package/dist/jspdf-shim.js +744 -0
  57. package/dist/jspdf-shim.js.map +1 -0
  58. package/dist/jspdf.d.ts +2 -0
  59. package/dist/jspdf.d.ts.map +1 -0
  60. package/dist/jspdf.js +2 -0
  61. package/dist/jspdf.js.map +1 -0
  62. package/dist/markerlist.d.ts +24 -0
  63. package/dist/markerlist.d.ts.map +1 -0
  64. package/dist/markerlist.js +47 -0
  65. package/dist/markerlist.js.map +1 -0
  66. package/dist/nodes/anchor.d.ts +6 -0
  67. package/dist/nodes/anchor.d.ts.map +1 -0
  68. package/dist/nodes/anchor.js +15 -0
  69. package/dist/nodes/anchor.js.map +1 -0
  70. package/dist/nodes/circle.d.ts +11 -0
  71. package/dist/nodes/circle.d.ts.map +1 -0
  72. package/dist/nodes/circle.js +17 -0
  73. package/dist/nodes/circle.js.map +1 -0
  74. package/dist/nodes/clippath.d.ts +10 -0
  75. package/dist/nodes/clippath.d.ts.map +1 -0
  76. package/dist/nodes/clippath.js +48 -0
  77. package/dist/nodes/clippath.js.map +1 -0
  78. package/dist/nodes/containernode.d.ts +8 -0
  79. package/dist/nodes/containernode.d.ts.map +1 -0
  80. package/dist/nodes/containernode.js +13 -0
  81. package/dist/nodes/containernode.js.map +1 -0
  82. package/dist/nodes/ellipse.d.ts +9 -0
  83. package/dist/nodes/ellipse.d.ts.map +1 -0
  84. package/dist/nodes/ellipse.js +14 -0
  85. package/dist/nodes/ellipse.js.map +1 -0
  86. package/dist/nodes/ellipsebase.d.ts +14 -0
  87. package/dist/nodes/ellipsebase.d.ts.map +1 -0
  88. package/dist/nodes/ellipsebase.js +30 -0
  89. package/dist/nodes/ellipsebase.js.map +1 -0
  90. package/dist/nodes/geometrynode.d.ts +19 -0
  91. package/dist/nodes/geometrynode.d.ts.map +1 -0
  92. package/dist/nodes/geometrynode.js +213 -0
  93. package/dist/nodes/geometrynode.js.map +1 -0
  94. package/dist/nodes/gradient.d.ts +28 -0
  95. package/dist/nodes/gradient.d.ts.map +1 -0
  96. package/dist/nodes/gradient.js +87 -0
  97. package/dist/nodes/gradient.js.map +1 -0
  98. package/dist/nodes/graphicsnode.d.ts +4 -0
  99. package/dist/nodes/graphicsnode.d.ts.map +1 -0
  100. package/dist/nodes/graphicsnode.js +4 -0
  101. package/dist/nodes/graphicsnode.js.map +1 -0
  102. package/dist/nodes/group.d.ts +8 -0
  103. package/dist/nodes/group.d.ts.map +1 -0
  104. package/dist/nodes/group.js +11 -0
  105. package/dist/nodes/group.js.map +1 -0
  106. package/dist/nodes/image.d.ts +23 -0
  107. package/dist/nodes/image.d.ts.map +1 -0
  108. package/dist/nodes/image.js +152 -0
  109. package/dist/nodes/image.js.map +1 -0
  110. package/dist/nodes/line.d.ts +13 -0
  111. package/dist/nodes/line.d.ts.map +1 -0
  112. package/dist/nodes/line.js +30 -0
  113. package/dist/nodes/line.js.map +1 -0
  114. package/dist/nodes/lineargradient.d.ts +7 -0
  115. package/dist/nodes/lineargradient.d.ts.map +1 -0
  116. package/dist/nodes/lineargradient.js +15 -0
  117. package/dist/nodes/lineargradient.js.map +1 -0
  118. package/dist/nodes/marker.d.ts +11 -0
  119. package/dist/nodes/marker.d.ts.map +1 -0
  120. package/dist/nodes/marker.js +70 -0
  121. package/dist/nodes/marker.js.map +1 -0
  122. package/dist/nodes/nonrenderednode.d.ts +11 -0
  123. package/dist/nodes/nonrenderednode.d.ts.map +1 -0
  124. package/dist/nodes/nonrenderednode.js +15 -0
  125. package/dist/nodes/nonrenderednode.js.map +1 -0
  126. package/dist/nodes/path.d.ts +12 -0
  127. package/dist/nodes/path.d.ts.map +1 -0
  128. package/dist/nodes/path.js +75 -0
  129. package/dist/nodes/path.js.map +1 -0
  130. package/dist/nodes/pattern.d.ts +11 -0
  131. package/dist/nodes/pattern.d.ts.map +1 -0
  132. package/dist/nodes/pattern.js +39 -0
  133. package/dist/nodes/pattern.js.map +1 -0
  134. package/dist/nodes/polygon.d.ts +6 -0
  135. package/dist/nodes/polygon.d.ts.map +1 -0
  136. package/dist/nodes/polygon.js +7 -0
  137. package/dist/nodes/polygon.js.map +1 -0
  138. package/dist/nodes/polyline.d.ts +6 -0
  139. package/dist/nodes/polyline.d.ts.map +1 -0
  140. package/dist/nodes/polyline.js +7 -0
  141. package/dist/nodes/polyline.js.map +1 -0
  142. package/dist/nodes/radialgradient.d.ts +7 -0
  143. package/dist/nodes/radialgradient.d.ts.map +1 -0
  144. package/dist/nodes/radialgradient.js +21 -0
  145. package/dist/nodes/radialgradient.js.map +1 -0
  146. package/dist/nodes/rect.d.ts +12 -0
  147. package/dist/nodes/rect.d.ts.map +1 -0
  148. package/dist/nodes/rect.js +50 -0
  149. package/dist/nodes/rect.js.map +1 -0
  150. package/dist/nodes/renderednode.d.ts +7 -0
  151. package/dist/nodes/renderednode.d.ts.map +1 -0
  152. package/dist/nodes/renderednode.js +43 -0
  153. package/dist/nodes/renderednode.js.map +1 -0
  154. package/dist/nodes/svg.d.ts +21 -0
  155. package/dist/nodes/svg.d.ts.map +1 -0
  156. package/dist/nodes/svg.js +175 -0
  157. package/dist/nodes/svg.js.map +1 -0
  158. package/dist/nodes/svgnode.d.ts +18 -0
  159. package/dist/nodes/svgnode.d.ts.map +1 -0
  160. package/dist/nodes/svgnode.js +30 -0
  161. package/dist/nodes/svgnode.js.map +1 -0
  162. package/dist/nodes/symbol.d.ts +10 -0
  163. package/dist/nodes/symbol.d.ts.map +1 -0
  164. package/dist/nodes/symbol.js +62 -0
  165. package/dist/nodes/symbol.js.map +1 -0
  166. package/dist/nodes/text.d.ts +13 -0
  167. package/dist/nodes/text.d.ts.map +1 -0
  168. package/dist/nodes/text.js +172 -0
  169. package/dist/nodes/text.js.map +1 -0
  170. package/dist/nodes/traverse.d.ts +15 -0
  171. package/dist/nodes/traverse.d.ts.map +1 -0
  172. package/dist/nodes/traverse.js +47 -0
  173. package/dist/nodes/traverse.js.map +1 -0
  174. package/dist/nodes/use.d.ts +15 -0
  175. package/dist/nodes/use.d.ts.map +1 -0
  176. package/dist/nodes/use.js +99 -0
  177. package/dist/nodes/use.js.map +1 -0
  178. package/dist/nodes/void.d.ts +11 -0
  179. package/dist/nodes/void.d.ts.map +1 -0
  180. package/dist/nodes/void.js +19 -0
  181. package/dist/nodes/void.js.map +1 -0
  182. package/dist/parse.d.ts +5 -0
  183. package/dist/parse.d.ts.map +1 -0
  184. package/dist/parse.js +96 -0
  185. package/dist/parse.js.map +1 -0
  186. package/dist/svg2pdf.d.ts +10 -0
  187. package/dist/svg2pdf.d.ts.map +1 -0
  188. package/dist/svg2pdf.js +49 -0
  189. package/dist/svg2pdf.js.map +1 -0
  190. package/dist/textchunk.d.ts +36 -0
  191. package/dist/textchunk.d.ts.map +1 -0
  192. package/dist/textchunk.js +144 -0
  193. package/dist/textchunk.js.map +1 -0
  194. package/dist/utils/applyclippath.d.ts +6 -0
  195. package/dist/utils/applyclippath.d.ts.map +1 -0
  196. package/dist/utils/applyclippath.js +20 -0
  197. package/dist/utils/applyclippath.js.map +1 -0
  198. package/dist/utils/bbox.d.ts +6 -0
  199. package/dist/utils/bbox.d.ts.map +1 -0
  200. package/dist/utils/bbox.js +62 -0
  201. package/dist/utils/bbox.js.map +1 -0
  202. package/dist/utils/constants.d.ts +7 -0
  203. package/dist/utils/constants.d.ts.map +1 -0
  204. package/dist/utils/constants.js +17 -0
  205. package/dist/utils/constants.js.map +1 -0
  206. package/dist/utils/fonts.d.ts +14 -0
  207. package/dist/utils/fonts.d.ts.map +1 -0
  208. package/dist/utils/fonts.js +59 -0
  209. package/dist/utils/fonts.js.map +1 -0
  210. package/dist/utils/geometry.d.ts +11 -0
  211. package/dist/utils/geometry.d.ts.map +1 -0
  212. package/dist/utils/geometry.js +26 -0
  213. package/dist/utils/geometry.js.map +1 -0
  214. package/dist/utils/misc.d.ts +12 -0
  215. package/dist/utils/misc.d.ts.map +1 -0
  216. package/dist/utils/misc.js +26 -0
  217. package/dist/utils/misc.js.map +1 -0
  218. package/dist/utils/node.d.ts +9 -0
  219. package/dist/utils/node.d.ts.map +1 -0
  220. package/dist/utils/node.js +58 -0
  221. package/dist/utils/node.js.map +1 -0
  222. package/dist/utils/parsing.d.ts +13 -0
  223. package/dist/utils/parsing.d.ts.map +1 -0
  224. package/dist/utils/parsing.js +41 -0
  225. package/dist/utils/parsing.js.map +1 -0
  226. package/dist/utils/path.d.ts +39 -0
  227. package/dist/utils/path.d.ts.map +1 -0
  228. package/dist/utils/path.js +86 -0
  229. package/dist/utils/path.js.map +1 -0
  230. package/dist/utils/rgbcolor.d.ts +15 -0
  231. package/dist/utils/rgbcolor.d.ts.map +1 -0
  232. package/dist/utils/rgbcolor.js +297 -0
  233. package/dist/utils/rgbcolor.js.map +1 -0
  234. package/dist/utils/text.d.ts +15 -0
  235. package/dist/utils/text.d.ts.map +1 -0
  236. package/dist/utils/text.js +57 -0
  237. package/dist/utils/text.js.map +1 -0
  238. package/dist/utils/transform.d.ts +5 -0
  239. package/dist/utils/transform.d.ts.map +1 -0
  240. package/dist/utils/transform.js +113 -0
  241. package/dist/utils/transform.js.map +1 -0
  242. package/package.json +57 -0
@@ -0,0 +1,175 @@
1
+ import { parseFloats } from '../utils/parsing';
2
+ import { getAttribute, svgNodeAndChildrenVisible } from '../utils/node';
3
+ import { ContainerNode } from './containernode';
4
+ import { computeViewBoxTransform, parseTransform } from '../utils/transform';
5
+ import { Viewport } from '../context/viewport';
6
+ export class Svg extends ContainerNode {
7
+ isVisible(parentVisible, context) {
8
+ return svgNodeAndChildrenVisible(this, parentVisible, context);
9
+ }
10
+ async render(context) {
11
+ if (!this.isVisible(context.attributeState.visibility !== 'hidden', context)) {
12
+ return;
13
+ }
14
+ const x = this.getX(context);
15
+ const y = this.getY(context);
16
+ const width = this.getWidth(context);
17
+ const height = this.getHeight(context);
18
+ context.pdf.saveGraphicsState();
19
+ let transform = context.transform;
20
+ if (this.element.hasAttribute('transform')) {
21
+ // SVG 2 allows transforms on SVG elements
22
+ // "The transform should be applied as if the ‘svg’ had a parent element with that transform set."
23
+ transform = context.pdf.matrixMult(
24
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
25
+ parseTransform(this.element.getAttribute('transform'), context), transform);
26
+ }
27
+ context.pdf.setCurrentTransformationMatrix(transform);
28
+ if (!context.withinUse &&
29
+ getAttribute(this.element, context.styleSheets, 'overflow') !== 'visible') {
30
+ // establish a new viewport
31
+ context.pdf
32
+ .rect(x, y, width, height)
33
+ .clip()
34
+ .discardPath();
35
+ }
36
+ await super.render(context.clone({
37
+ transform: context.pdf.unitMatrix,
38
+ viewport: context.withinUse ? context.viewport : new Viewport(width, height)
39
+ }));
40
+ context.pdf.restoreGraphicsState();
41
+ }
42
+ computeNodeTransform(context) {
43
+ return this.computeNodeTransformCore(context);
44
+ }
45
+ computeNodeTransformCore(context) {
46
+ if (context.withinUse) {
47
+ return context.pdf.unitMatrix;
48
+ }
49
+ const x = this.getX(context);
50
+ const y = this.getY(context);
51
+ const viewBox = this.getViewBox();
52
+ let nodeTransform;
53
+ if (viewBox) {
54
+ const width = this.getWidth(context);
55
+ const height = this.getHeight(context);
56
+ nodeTransform = computeViewBoxTransform(this.element, viewBox, x, y, width, height, context);
57
+ }
58
+ else {
59
+ nodeTransform = context.pdf.Matrix(1, 0, 0, 1, x, y);
60
+ }
61
+ return nodeTransform;
62
+ }
63
+ getWidth(context) {
64
+ if (this.width !== undefined) {
65
+ return this.width;
66
+ }
67
+ let width;
68
+ const parameters = context.svg2pdfParameters;
69
+ if (this.isOutermostSvg(context)) {
70
+ // special treatment for the outermost SVG element
71
+ if (parameters.width != null) {
72
+ // if there is a user defined width, use it
73
+ width = parameters.width;
74
+ }
75
+ else {
76
+ // otherwise check if the SVG element defines the width itself
77
+ const widthAttr = getAttribute(this.element, context.styleSheets, 'width');
78
+ if (widthAttr) {
79
+ width = parseFloat(widthAttr);
80
+ }
81
+ else {
82
+ // if not, check if we can figure out the aspect ratio from the viewBox attribute
83
+ const viewBox = this.getViewBox();
84
+ if (viewBox &&
85
+ (parameters.height != null || getAttribute(this.element, context.styleSheets, 'height'))) {
86
+ // if there is a viewBox and the height is defined, use the width that matches the height together with the aspect ratio
87
+ const aspectRatio = viewBox[2] / viewBox[3];
88
+ width = this.getHeight(context) * aspectRatio;
89
+ }
90
+ else {
91
+ // if there is no viewBox use a default of 300 or the largest size that fits into the outer viewport
92
+ // at an aspect ratio of 2:1
93
+ width = Math.min(300, context.viewport.width, context.viewport.height * 2);
94
+ }
95
+ }
96
+ }
97
+ }
98
+ else {
99
+ const widthAttr = getAttribute(this.element, context.styleSheets, 'width');
100
+ width = widthAttr ? parseFloat(widthAttr) : context.viewport.width;
101
+ }
102
+ return (this.width = width);
103
+ }
104
+ getHeight(context) {
105
+ if (this.height !== undefined) {
106
+ return this.height;
107
+ }
108
+ let height;
109
+ const parameters = context.svg2pdfParameters;
110
+ if (this.isOutermostSvg(context)) {
111
+ // special treatment for the outermost SVG element
112
+ if (parameters.height != null) {
113
+ // if there is a user defined height, use it
114
+ height = parameters.height;
115
+ }
116
+ else {
117
+ // otherwise check if the SVG element defines the height itself
118
+ const heightAttr = getAttribute(this.element, context.styleSheets, 'height');
119
+ if (heightAttr) {
120
+ height = parseFloat(heightAttr);
121
+ }
122
+ else {
123
+ // if not, check if we can figure out the aspect ratio from the viewBox attribute
124
+ const viewBox = this.getViewBox();
125
+ if (viewBox) {
126
+ // if there is a viewBox, use the height that matches the width together with the aspect ratio
127
+ const aspectRatio = viewBox[2] / viewBox[3];
128
+ height = this.getWidth(context) / aspectRatio;
129
+ }
130
+ else {
131
+ // if there is no viewBox use a default of 150 or the largest size that fits into the outer viewport
132
+ // at an aspect ratio of 2:1
133
+ height = Math.min(150, context.viewport.width / 2, context.viewport.height);
134
+ }
135
+ }
136
+ }
137
+ }
138
+ else {
139
+ const heightAttr = getAttribute(this.element, context.styleSheets, 'height');
140
+ height = heightAttr ? parseFloat(heightAttr) : context.viewport.height;
141
+ }
142
+ return (this.height = height);
143
+ }
144
+ getX(context) {
145
+ if (this.x !== undefined) {
146
+ return this.x;
147
+ }
148
+ if (this.isOutermostSvg(context)) {
149
+ return (this.x = 0);
150
+ }
151
+ const xAttr = getAttribute(this.element, context.styleSheets, 'x');
152
+ return (this.x = xAttr ? parseFloat(xAttr) : 0);
153
+ }
154
+ getY(context) {
155
+ if (this.y !== undefined) {
156
+ return this.y;
157
+ }
158
+ if (this.isOutermostSvg(context)) {
159
+ return (this.y = 0);
160
+ }
161
+ const yAttr = getAttribute(this.element, context.styleSheets, 'y');
162
+ return (this.y = yAttr ? parseFloat(yAttr) : 0);
163
+ }
164
+ getViewBox() {
165
+ if (this.viewBox !== undefined) {
166
+ return this.viewBox;
167
+ }
168
+ const viewBox = this.element.getAttribute('viewBox');
169
+ return (this.viewBox = viewBox ? parseFloats(viewBox) : undefined);
170
+ }
171
+ isOutermostSvg(context) {
172
+ return context.svg2pdfParameters.element === this.element;
173
+ }
174
+ }
175
+ //# sourceMappingURL=svg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"svg.js","sourceRoot":"","sources":["../../src/nodes/svg.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { Context } from '../context/context';
2
+ import { Rect } from '../utils/geometry';
3
+ import { Matrix } from 'jspdf';
4
+ export declare abstract class SvgNode {
5
+ readonly element: Element;
6
+ readonly children: SvgNode[];
7
+ protected parent: SvgNode | null;
8
+ constructor(element: Element, children: SvgNode[]);
9
+ setParent(parent: SvgNode): void;
10
+ getParent(): SvgNode | null;
11
+ abstract render(parentContext: Context): Promise<void>;
12
+ abstract isVisible(parentHidden: boolean, context: Context): boolean;
13
+ getBoundingBox(context: Context): number[];
14
+ protected abstract getBoundingBoxCore(context: Context): Rect;
15
+ computeNodeTransform(context: Context): Matrix;
16
+ protected abstract computeNodeTransformCore(context: Context): Matrix;
17
+ }
18
+ //# sourceMappingURL=svgnode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"svgnode.d.ts","sourceRoot":"","sources":["../../src/nodes/svgnode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAG5C,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAE9B,8BAAsB,OAAO;IAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAA;IAC5B,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAA;gBAEpB,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE;IAMjD,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAIhC,SAAS,IAAI,OAAO,GAAG,IAAI;IAI3B,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAEtD,QAAQ,CAAC,SAAS,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO;IAEpE,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,EAAE;IAO1C,SAAS,CAAC,QAAQ,CAAC,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAE7D,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM;IAO9C,SAAS,CAAC,QAAQ,CAAC,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM;CACtE"}
@@ -0,0 +1,30 @@
1
+ import { getAttribute } from '../utils/node';
2
+ import { parseTransform } from '../utils/transform';
3
+ export class SvgNode {
4
+ constructor(element, children) {
5
+ this.element = element;
6
+ this.children = children;
7
+ this.parent = null;
8
+ }
9
+ setParent(parent) {
10
+ this.parent = parent;
11
+ }
12
+ getParent() {
13
+ return this.parent;
14
+ }
15
+ getBoundingBox(context) {
16
+ if (getAttribute(this.element, context.styleSheets, 'display') === 'none') {
17
+ return [0, 0, 0, 0];
18
+ }
19
+ return this.getBoundingBoxCore(context);
20
+ }
21
+ computeNodeTransform(context) {
22
+ const nodeTransform = this.computeNodeTransformCore(context);
23
+ const transformString = getAttribute(this.element, context.styleSheets, 'transform');
24
+ if (!transformString)
25
+ return nodeTransform;
26
+ else
27
+ return context.pdf.matrixMult(nodeTransform, parseTransform(transformString, context));
28
+ }
29
+ }
30
+ //# sourceMappingURL=svgnode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"svgnode.js","sourceRoot":"","sources":["../../src/nodes/svgnode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAInD,MAAM,OAAgB,OAAO;IAK3B,YAAY,OAAgB,EAAE,QAAmB;QAC/C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;IACpB,CAAC;IAED,SAAS,CAAC,MAAe;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;IAMD,cAAc,CAAC,OAAgB;QAC7B,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,KAAK,MAAM,EAAE,CAAC;YAC1E,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QACrB,CAAC;QACD,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAA;IACzC,CAAC;IAID,oBAAoB,CAAC,OAAgB;QACnC,MAAM,aAAa,GAAG,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAA;QAC5D,MAAM,eAAe,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;QACpF,IAAI,CAAC,eAAe;YAAE,OAAO,aAAa,CAAA;;YACrC,OAAO,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,aAAa,EAAE,cAAc,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAA;IAC7F,CAAC;CAGF"}
@@ -0,0 +1,10 @@
1
+ import { Context } from '../context/context';
2
+ import { NonRenderedNode } from './nonrenderednode';
3
+ import { Matrix } from 'jspdf';
4
+ export declare class Symbol extends NonRenderedNode {
5
+ apply(parentContext: Context): Promise<void>;
6
+ getBoundingBoxCore(context: Context): number[];
7
+ isVisible(parentVisible: boolean, context: Context): boolean;
8
+ computeNodeTransformCore(context: Context): Matrix;
9
+ }
10
+ //# sourceMappingURL=symbol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbol.d.ts","sourceRoot":"","sources":["../../src/nodes/symbol.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAI5C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAGnD,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAE9B,qBAAa,MAAO,SAAQ,eAAe;IACnC,KAAK,CAAC,aAAa,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BlD,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,EAAE;IAG9C,SAAS,CAAC,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO;IAG5D,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM;CAiCnD"}
@@ -0,0 +1,62 @@
1
+ import { getAttribute, svgNodeAndChildrenVisible } from '../utils/node';
2
+ import { getBoundingBoxByChildren } from '../utils/bbox';
3
+ import { parseFloats } from '../utils/parsing';
4
+ import { computeViewBoxTransform } from '../utils/transform';
5
+ import { NonRenderedNode } from './nonrenderednode';
6
+ import { applyAttributes, parseAttributes } from '../applyparseattributes';
7
+ import { applyClipPath, getClipPathNode } from '../utils/applyclippath';
8
+ export class Symbol extends NonRenderedNode {
9
+ async apply(parentContext) {
10
+ if (!this.isVisible(parentContext.attributeState.visibility !== 'hidden', parentContext)) {
11
+ return;
12
+ }
13
+ const context = parentContext.clone();
14
+ context.transform = context.pdf.unitMatrix;
15
+ parseAttributes(context, this);
16
+ const clipPathAttribute = getAttribute(this.element, context.styleSheets, 'clip-path');
17
+ const hasClipPath = clipPathAttribute && clipPathAttribute !== 'none';
18
+ if (hasClipPath) {
19
+ const clipNode = getClipPathNode(clipPathAttribute, this, context);
20
+ if (clipNode) {
21
+ if (clipNode.isVisible(true, context)) {
22
+ await applyClipPath(this, clipNode, context);
23
+ }
24
+ else {
25
+ return;
26
+ }
27
+ }
28
+ }
29
+ applyAttributes(context, parentContext, this.element);
30
+ for (const child of this.children) {
31
+ await child.render(context);
32
+ }
33
+ }
34
+ getBoundingBoxCore(context) {
35
+ return getBoundingBoxByChildren(context, this);
36
+ }
37
+ isVisible(parentVisible, context) {
38
+ return svgNodeAndChildrenVisible(this, parentVisible, context);
39
+ }
40
+ computeNodeTransformCore(context) {
41
+ const x = parseFloat(getAttribute(this.element, context.styleSheets, 'x') || '0');
42
+ const y = parseFloat(getAttribute(this.element, context.styleSheets, 'y') || '0');
43
+ // TODO: implement refX/refY - this is still to do because common browsers don't seem to support the feature yet
44
+ // x += parseFloat(this.element.getAttribute("refX")) || 0; ???
45
+ // y += parseFloat(this.element.getAttribute("refY")) || 0; ???
46
+ const viewBox = this.element.getAttribute('viewBox');
47
+ if (viewBox) {
48
+ const box = parseFloats(viewBox);
49
+ const width = parseFloat(getAttribute(this.element, context.styleSheets, 'width') ||
50
+ getAttribute(this.element.ownerSVGElement, context.styleSheets, 'width') ||
51
+ viewBox[2]);
52
+ const height = parseFloat(getAttribute(this.element, context.styleSheets, 'height') ||
53
+ getAttribute(this.element.ownerSVGElement, context.styleSheets, 'height') ||
54
+ viewBox[3]);
55
+ return computeViewBoxTransform(this.element, box, x, y, width, height, context);
56
+ }
57
+ else {
58
+ return context.pdf.Matrix(1, 0, 0, 1, x, y);
59
+ }
60
+ }
61
+ }
62
+ //# sourceMappingURL=symbol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbol.js","sourceRoot":"","sources":["../../src/nodes/symbol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { Context } from '../context/context';
2
+ import { GraphicsNode } from './graphicsnode';
3
+ import { Rect } from '../utils/geometry';
4
+ import { Matrix } from 'jspdf';
5
+ export declare class TextNode extends GraphicsNode {
6
+ private boundingBox;
7
+ private processTSpans;
8
+ protected renderCore(context: Context): Promise<void>;
9
+ isVisible(parentVisible: boolean, context: Context): boolean;
10
+ protected getBoundingBoxCore(context: Context): Rect;
11
+ protected computeNodeTransformCore(context: Context): Matrix;
12
+ }
13
+ //# sourceMappingURL=text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/nodes/text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAc5C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAS9B,qBAAa,QAAS,SAAQ,YAAY;IACxC,OAAO,CAAC,WAAW,CAAe;IAClC,OAAO,CAAC,aAAa;cAwFL,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAsH3D,SAAS,CAAC,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO;IAI5D,SAAS,CAAC,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAMpD,SAAS,CAAC,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM;CAG7D"}
@@ -0,0 +1,172 @@
1
+ import { TextChunk } from '../textchunk';
2
+ import { defaultBoundingBox } from '../utils/bbox';
3
+ import { mapAlignmentBaseline, toPixels } from '../utils/misc';
4
+ import { getAttribute, nodeIs, svgNodeAndChildrenVisible } from '../utils/node';
5
+ import { consolidateSpaces, getTextRenderingMode, removeNewlines, replaceTabsBySpace, transformText, transformXmlSpace, trimLeft } from '../utils/text';
6
+ import { GraphicsNode } from './graphicsnode';
7
+ import { parseAttributes } from '../applyparseattributes';
8
+ export class TextNode extends GraphicsNode {
9
+ constructor() {
10
+ super(...arguments);
11
+ this.boundingBox = [];
12
+ }
13
+ processTSpans(textNode, node, context, textChunks, currentTextSegment, trimInfo) {
14
+ const pdfFontSize = context.pdf.getFontSize();
15
+ const shouldPreserve = context.attributeState.xmlSpace === 'preserve' || context.attributeState.whiteSpace === 'pre';
16
+ let firstText = true, initialSpace = false;
17
+ for (let i = 0; i < node.childNodes.length; i++) {
18
+ const childNode = node.childNodes[i];
19
+ if (!childNode.textContent) {
20
+ continue;
21
+ }
22
+ const textContent = childNode.textContent;
23
+ if (childNode.nodeName === '#text') {
24
+ let trimmedText = removeNewlines(textContent);
25
+ trimmedText = replaceTabsBySpace(trimmedText);
26
+ if (!shouldPreserve) {
27
+ trimmedText = consolidateSpaces(trimmedText);
28
+ // If first text in tspan and starts with a space
29
+ if (firstText && trimmedText.match(/^\s/)) {
30
+ initialSpace = true;
31
+ }
32
+ // No longer the first text if we've found a letter
33
+ if (trimmedText.match(/[^\s]/)) {
34
+ firstText = false;
35
+ }
36
+ // Consolidate spaces across different children
37
+ if (trimInfo.prevText.match(/\s$/)) {
38
+ trimmedText = trimLeft(trimmedText);
39
+ }
40
+ }
41
+ const transformedText = transformText(node, trimmedText, context);
42
+ currentTextSegment.add(node, transformedText, context);
43
+ trimInfo.prevText = textContent;
44
+ trimInfo.prevContext = context;
45
+ }
46
+ else if (nodeIs(childNode, 'title')) {
47
+ // ignore <title> elements
48
+ }
49
+ else if (nodeIs(childNode, 'tspan')) {
50
+ const tSpan = childNode;
51
+ const tSpanAbsX = tSpan.getAttribute('x');
52
+ if (tSpanAbsX !== null) {
53
+ const x = toPixels(tSpanAbsX, pdfFontSize);
54
+ currentTextSegment = new TextChunk(this, getAttribute(tSpan, context.styleSheets, 'text-anchor') ||
55
+ context.attributeState.textAnchor, x, 0);
56
+ textChunks.push({ type: 'y', chunk: currentTextSegment });
57
+ }
58
+ const tSpanAbsY = tSpan.getAttribute('y');
59
+ if (tSpanAbsY !== null) {
60
+ const y = toPixels(tSpanAbsY, pdfFontSize);
61
+ currentTextSegment = new TextChunk(this, getAttribute(tSpan, context.styleSheets, 'text-anchor') ||
62
+ context.attributeState.textAnchor, 0, y);
63
+ textChunks.push({ type: 'x', chunk: currentTextSegment });
64
+ }
65
+ const childContext = context.clone();
66
+ parseAttributes(childContext, textNode, tSpan);
67
+ this.processTSpans(textNode, tSpan, childContext, textChunks, currentTextSegment, trimInfo);
68
+ }
69
+ }
70
+ return initialSpace;
71
+ }
72
+ async renderCore(context) {
73
+ context.pdf.saveGraphicsState();
74
+ let xOffset = 0;
75
+ let charSpace = 0;
76
+ // If string starts with \s then for charSpace calculations
77
+ // need to treat it as if it contains one extra character
78
+ let lengthAdjustment = 1;
79
+ const pdfFontSize = context.pdf.getFontSize();
80
+ const textX = toPixels(this.element.getAttribute('x'), pdfFontSize);
81
+ const textY = toPixels(this.element.getAttribute('y'), pdfFontSize);
82
+ const dx = toPixels(this.element.getAttribute('dx'), pdfFontSize);
83
+ const dy = toPixels(this.element.getAttribute('dy'), pdfFontSize);
84
+ const textLength = parseFloat(this.element.getAttribute('textLength') || '0');
85
+ const visibility = context.attributeState.visibility;
86
+ // when there are no tspans draw the text directly
87
+ const tSpanCount = this.element.childElementCount;
88
+ if (tSpanCount === 0) {
89
+ const textContent = this.element.textContent || '';
90
+ const trimmedText = transformXmlSpace(textContent, context.attributeState);
91
+ const transformedText = transformText(this.element, trimmedText, context);
92
+ xOffset = context.textMeasure.getTextOffset(transformedText, context.attributeState);
93
+ if (textLength > 0) {
94
+ const defaultSize = context.textMeasure.measureTextWidth(transformedText, context.attributeState);
95
+ const shouldPreserve = context.attributeState.xmlSpace === 'preserve' || context.attributeState.whiteSpace === 'pre';
96
+ if (!shouldPreserve && textContent.match(/^\s/)) {
97
+ lengthAdjustment = 0;
98
+ }
99
+ charSpace = (textLength - defaultSize) / (transformedText.length - lengthAdjustment) || 0;
100
+ }
101
+ if (visibility === 'visible') {
102
+ const alignmentBaseline = context.attributeState.alignmentBaseline;
103
+ const textRenderingMode = getTextRenderingMode(context.attributeState);
104
+ context.pdf.text(transformedText, textX + dx - xOffset, textY + dy, {
105
+ baseline: mapAlignmentBaseline(alignmentBaseline),
106
+ angle: context.transform,
107
+ renderingMode: textRenderingMode === 'fill' ? void 0 : textRenderingMode,
108
+ charSpace: charSpace === 0 ? void 0 : charSpace
109
+ });
110
+ this.boundingBox = [
111
+ textX + dx - xOffset,
112
+ textY + dy + 0.1 * pdfFontSize,
113
+ context.textMeasure.measureTextWidth(transformedText, context.attributeState),
114
+ pdfFontSize
115
+ ];
116
+ }
117
+ }
118
+ else {
119
+ // otherwise loop over tspans and position each relative to the previous one
120
+ const textChunks = [];
121
+ const currentTextSegment = new TextChunk(this, context.attributeState.textAnchor, textX + dx, textY + dy);
122
+ textChunks.push({ type: '', chunk: currentTextSegment });
123
+ const initialSpace = this.processTSpans(this, this.element, context, textChunks, currentTextSegment,
124
+ // Set prevText to ' ' so any spaces on left of <text> are trimmed
125
+ { prevText: ' ', prevContext: context });
126
+ lengthAdjustment = initialSpace ? 0 : 1;
127
+ // Right trim the chunks (if required)
128
+ let trimRight = true;
129
+ for (let r = textChunks.length - 1; r >= 0; r--) {
130
+ if (trimRight) {
131
+ trimRight = textChunks[r].chunk.rightTrimText();
132
+ }
133
+ }
134
+ if (textLength > 0) {
135
+ // Calculate the total 'default' width of this text element
136
+ let totalDefaultWidth = 0;
137
+ let totalLength = 0;
138
+ textChunks.forEach(({ chunk }) => {
139
+ chunk.measureText(context);
140
+ chunk.textMeasures.forEach(({ width, length }) => {
141
+ totalDefaultWidth += width;
142
+ totalLength += length;
143
+ });
144
+ });
145
+ charSpace = (textLength - totalDefaultWidth) / (totalLength - lengthAdjustment);
146
+ }
147
+ // Put the textchunks
148
+ textChunks.reduce((lastPositions, { type, chunk }) => {
149
+ if (type === 'x') {
150
+ chunk.setX(lastPositions[0]);
151
+ }
152
+ else if (type === 'y') {
153
+ chunk.setY(lastPositions[1]);
154
+ }
155
+ return chunk.put(context, charSpace);
156
+ }, [0, 0]);
157
+ }
158
+ context.pdf.restoreGraphicsState();
159
+ }
160
+ isVisible(parentVisible, context) {
161
+ return svgNodeAndChildrenVisible(this, parentVisible, context);
162
+ }
163
+ getBoundingBoxCore(context) {
164
+ return this.boundingBox.length > 0
165
+ ? this.boundingBox
166
+ : defaultBoundingBox(this.element, context);
167
+ }
168
+ computeNodeTransformCore(context) {
169
+ return context.pdf.unitMatrix;
170
+ }
171
+ }
172
+ //# sourceMappingURL=text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/nodes/text.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { Context } from '../context/context';
2
+ import { Path } from '../utils/path';
3
+ import { GeometryNode } from './geometrynode';
4
+ import { SvgNode } from './svgnode';
5
+ import { Point } from '../utils/geometry';
6
+ import { Matrix } from 'jspdf';
7
+ export declare abstract class Traverse extends GeometryNode {
8
+ private readonly closed;
9
+ protected constructor(closed: boolean, node: Element, children: SvgNode[]);
10
+ protected getPath(context: Context): Path | null;
11
+ isVisible(parentVisible: boolean, context: Context): boolean;
12
+ protected computeNodeTransformCore(context: Context): Matrix;
13
+ static parsePointsString(string: string): Point[];
14
+ }
15
+ //# sourceMappingURL=traverse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traverse.d.ts","sourceRoot":"","sources":["../../src/nodes/traverse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AAEpC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAE9B,8BAAsB,QAAS,SAAQ,YAAY;IACjD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAEhC,SAAS,aAAa,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE;IAMzE,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,GAAG,IAAI;IA2BhD,SAAS,CAAC,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO;IAI5D,SAAS,CAAC,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM;IAI5D,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE;CAUlD"}
@@ -0,0 +1,47 @@
1
+ import { Path } from '../utils/path';
2
+ import { svgNodeIsVisible } from '../utils/node';
3
+ import { GeometryNode } from './geometrynode';
4
+ import { parseFloats } from '../utils/parsing';
5
+ export class Traverse extends GeometryNode {
6
+ constructor(closed, node, children) {
7
+ super(true, node, children);
8
+ this.closed = closed;
9
+ }
10
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
11
+ getPath(context) {
12
+ if (!this.element.hasAttribute('points') || this.element.getAttribute('points') === '') {
13
+ return null;
14
+ }
15
+ // @ts-ignore
16
+ const points = Traverse.parsePointsString(this.element.getAttribute('points'));
17
+ const path = new Path();
18
+ if (points.length < 1) {
19
+ return path;
20
+ }
21
+ path.moveTo(points[0][0], points[0][1]);
22
+ for (let i = 1; i < points.length; i++) {
23
+ path.lineTo(points[i][0], points[i][1]);
24
+ }
25
+ if (this.closed) {
26
+ path.close();
27
+ }
28
+ return path;
29
+ }
30
+ isVisible(parentVisible, context) {
31
+ return svgNodeIsVisible(this, parentVisible, context);
32
+ }
33
+ computeNodeTransformCore(context) {
34
+ return context.pdf.unitMatrix;
35
+ }
36
+ static parsePointsString(string) {
37
+ const floats = parseFloats(string);
38
+ const result = [];
39
+ for (let i = 0; i < floats.length - 1; i += 2) {
40
+ const x = floats[i];
41
+ const y = floats[i + 1];
42
+ result.push([x, y]);
43
+ }
44
+ return result;
45
+ }
46
+ }
47
+ //# sourceMappingURL=traverse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traverse.js","sourceRoot":"","sources":["../../src/nodes/traverse.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAI9C,MAAM,OAAgB,QAAS,SAAQ,YAAY;IAGjD,YAAsB,MAAe,EAAE,IAAa,EAAE,QAAmB;QACvE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;QAC3B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;IAED,6DAA6D;IACnD,OAAO,CAAC,OAAgB;QAChC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC;YACvF,OAAO,IAAI,CAAA;QACb,CAAC;QAED,aAAa;QACb,MAAM,MAAM,GAAG,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAA;QAE9E,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAA;QAEvB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,IAAI,CAAA;QACb,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAEvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACzC,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,KAAK,EAAE,CAAA;QACd,CAAC;QAED,OAAO,IAAI,CAAA;IACb,CAAC;IAED,SAAS,CAAC,aAAsB,EAAE,OAAgB;QAChD,OAAO,gBAAgB,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,CAAC,CAAA;IACvD,CAAC;IAES,wBAAwB,CAAC,OAAgB;QACjD,OAAO,OAAO,CAAC,GAAG,CAAC,UAAU,CAAA;IAC/B,CAAC;IAED,MAAM,CAAC,iBAAiB,CAAC,MAAc;QACrC,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAA;QAClC,MAAM,MAAM,GAAG,EAAE,CAAA;QACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9C,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;YACnB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;YACvB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QACrB,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ import { Context } from '../context/context';
2
+ import { GraphicsNode } from './graphicsnode';
3
+ import { Matrix } from 'jspdf';
4
+ /**
5
+ * Draws the element referenced by a use node, makes use of pdf's XObjects/FormObjects so nodes are only written once
6
+ * to the pdf document. This highly reduces the file size and computation time.
7
+ */
8
+ export declare class Use extends GraphicsNode {
9
+ protected renderCore(context: Context): Promise<void>;
10
+ private static renderReferencedNode;
11
+ protected getBoundingBoxCore(context: Context): number[];
12
+ isVisible(parentVisible: boolean, context: Context): boolean;
13
+ protected computeNodeTransformCore(context: Context): Matrix;
14
+ }
15
+ //# sourceMappingURL=use.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use.d.ts","sourceRoot":"","sources":["../../src/nodes/use.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAG5C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAQ9B;;;GAGG;AACH,qBAAa,GAAI,SAAQ,YAAY;cACnB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;mBA6EtC,oBAAoB;IAsBzC,SAAS,CAAC,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,EAAE;IAIxD,SAAS,CAAC,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO;IAI5D,SAAS,CAAC,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM;CAG7D"}