abstract-image 3.1.3 → 3.2.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 (333) hide show
  1. package/CHANGELOG.md +27 -21
  2. package/LICENSE +21 -21
  3. package/README.md +71 -71
  4. package/lib/__stories__/react-svg-export/example-1.stories.d.ts.map +1 -1
  5. package/lib/__stories__/react-svg-export/example-1.stories.js +1 -1
  6. package/lib/__stories__/react-svg-export/example-1.stories.js.map +1 -1
  7. package/lib/_tests_/exporters/svg-export-image.test.d.ts +2 -0
  8. package/lib/_tests_/exporters/svg-export-image.test.d.ts.map +1 -0
  9. package/lib/_tests_/exporters/svg-export-image.test.js +35 -0
  10. package/lib/_tests_/exporters/svg-export-image.test.js.map +1 -0
  11. package/lib/exporters/__tests__/dxf/export-test-def.d.ts +11 -0
  12. package/lib/exporters/__tests__/dxf/export-test-def.d.ts.map +1 -0
  13. package/lib/exporters/__tests__/dxf/export-test-def.js +6 -0
  14. package/lib/exporters/__tests__/dxf/export-test-def.js.map +1 -0
  15. package/lib/exporters/__tests__/dxf/export.test.d.ts +3 -0
  16. package/lib/exporters/__tests__/dxf/export.test.d.ts.map +1 -0
  17. package/lib/exporters/__tests__/dxf/export.test.js +17 -0
  18. package/lib/exporters/__tests__/dxf/export.test.js.map +1 -0
  19. package/lib/exporters/__tests__/dxf/test-defs/dxf2d-ellipse.d.ts +3 -0
  20. package/lib/exporters/__tests__/dxf/test-defs/dxf2d-ellipse.d.ts.map +1 -0
  21. package/lib/exporters/__tests__/dxf/test-defs/dxf2d-ellipse.js +413 -0
  22. package/lib/exporters/__tests__/dxf/test-defs/dxf2d-ellipse.js.map +1 -0
  23. package/lib/exporters/__tests__/dxf/test-defs/dxf2d-group.d.ts +3 -0
  24. package/lib/exporters/__tests__/dxf/test-defs/dxf2d-group.d.ts.map +1 -0
  25. package/lib/exporters/__tests__/dxf/test-defs/dxf2d-group.js +160 -0
  26. package/lib/exporters/__tests__/dxf/test-defs/dxf2d-group.js.map +1 -0
  27. package/lib/exporters/__tests__/dxf/test-defs/dxf2d-line.d.ts +3 -0
  28. package/lib/exporters/__tests__/dxf/test-defs/dxf2d-line.d.ts.map +1 -0
  29. package/lib/exporters/__tests__/dxf/test-defs/dxf2d-line.js +89 -0
  30. package/lib/exporters/__tests__/dxf/test-defs/dxf2d-line.js.map +1 -0
  31. package/lib/exporters/__tests__/dxf/test-defs/dxf2d-polygon.d.ts +3 -0
  32. package/lib/exporters/__tests__/dxf/test-defs/dxf2d-polygon.d.ts.map +1 -0
  33. package/lib/exporters/__tests__/dxf/test-defs/dxf2d-polygon.js +123 -0
  34. package/lib/exporters/__tests__/dxf/test-defs/dxf2d-polygon.js.map +1 -0
  35. package/lib/exporters/__tests__/dxf/test-defs/dxf2d-polyline.d.ts +3 -0
  36. package/lib/exporters/__tests__/dxf/test-defs/dxf2d-polyline.d.ts.map +1 -0
  37. package/lib/exporters/__tests__/dxf/test-defs/dxf2d-polyline.js +113 -0
  38. package/lib/exporters/__tests__/dxf/test-defs/dxf2d-polyline.js.map +1 -0
  39. package/lib/exporters/__tests__/dxf/test-defs/dxf2d-rectangle.d.ts +3 -0
  40. package/lib/exporters/__tests__/dxf/test-defs/dxf2d-rectangle.d.ts.map +1 -0
  41. package/lib/exporters/__tests__/dxf/test-defs/dxf2d-rectangle.js +133 -0
  42. package/lib/exporters/__tests__/dxf/test-defs/dxf2d-rectangle.js.map +1 -0
  43. package/lib/exporters/__tests__/dxf/test-defs/dxf2d-text-growth-directions.d.ts +3 -0
  44. package/lib/exporters/__tests__/dxf/test-defs/dxf2d-text-growth-directions.d.ts.map +1 -0
  45. package/lib/exporters/__tests__/dxf/test-defs/dxf2d-text-growth-directions.js +172 -0
  46. package/lib/exporters/__tests__/dxf/test-defs/dxf2d-text-growth-directions.js.map +1 -0
  47. package/lib/exporters/__tests__/dxf/test-defs/dxf2d-text.d.ts +3 -0
  48. package/lib/exporters/__tests__/dxf/test-defs/dxf2d-text.d.ts.map +1 -0
  49. package/lib/exporters/__tests__/dxf/test-defs/dxf2d-text.js +97 -0
  50. package/lib/exporters/__tests__/dxf/test-defs/dxf2d-text.js.map +1 -0
  51. package/lib/exporters/__tests__/dxf2d-export-image/test-defs/dxf2d-ellipse.js +379 -379
  52. package/lib/exporters/__tests__/dxf2d-export-image/test-defs/dxf2d-group.d.ts.map +1 -1
  53. package/lib/exporters/__tests__/dxf2d-export-image/test-defs/dxf2d-group.js +124 -124
  54. package/lib/exporters/__tests__/dxf2d-export-image/test-defs/dxf2d-group.js.map +1 -1
  55. package/lib/exporters/__tests__/dxf2d-export-image/test-defs/dxf2d-line.js +55 -55
  56. package/lib/exporters/__tests__/dxf2d-export-image/test-defs/dxf2d-polygon.js +89 -89
  57. package/lib/exporters/__tests__/dxf2d-export-image/test-defs/dxf2d-polyline.js +79 -79
  58. package/lib/exporters/__tests__/dxf2d-export-image/test-defs/dxf2d-rectangle.js +99 -99
  59. package/lib/exporters/__tests__/dxf2d-export-image/test-defs/dxf2d-text-growth-directions.d.ts.map +1 -1
  60. package/lib/exporters/__tests__/dxf2d-export-image/test-defs/dxf2d-text-growth-directions.js +139 -139
  61. package/lib/exporters/__tests__/dxf2d-export-image/test-defs/dxf2d-text-growth-directions.js.map +1 -1
  62. package/lib/exporters/__tests__/dxf2d-export-image/test-defs/dxf2d-text.d.ts.map +1 -1
  63. package/lib/exporters/__tests__/dxf2d-export-image/test-defs/dxf2d-text.js +64 -64
  64. package/lib/exporters/__tests__/dxf2d-export-image/test-defs/dxf2d-text.js.map +1 -1
  65. package/lib/exporters/__tests__/eps-export-image/test-defs/eps-ellipse.js +24 -24
  66. package/lib/exporters/__tests__/eps-export-image/test-defs/eps-empty-text.d.ts.map +1 -1
  67. package/lib/exporters/__tests__/eps-export-image/test-defs/eps-empty-text.js +27 -27
  68. package/lib/exporters/__tests__/eps-export-image/test-defs/eps-empty-text.js.map +1 -1
  69. package/lib/exporters/__tests__/eps-export-image/test-defs/eps-group.d.ts.map +1 -1
  70. package/lib/exporters/__tests__/eps-export-image/test-defs/eps-group.js +32 -32
  71. package/lib/exporters/__tests__/eps-export-image/test-defs/eps-group.js.map +1 -1
  72. package/lib/exporters/__tests__/eps-export-image/test-defs/eps-line.js +20 -20
  73. package/lib/exporters/__tests__/eps-export-image/test-defs/eps-polygon.js +34 -34
  74. package/lib/exporters/__tests__/eps-export-image/test-defs/eps-polyline.js +26 -26
  75. package/lib/exporters/__tests__/eps-export-image/test-defs/eps-rectangle.js +20 -20
  76. package/lib/exporters/__tests__/eps-export-image/test-defs/eps-text-growth-directions.d.ts.map +1 -1
  77. package/lib/exporters/__tests__/eps-export-image/test-defs/eps-text-growth-directions.js +63 -63
  78. package/lib/exporters/__tests__/eps-export-image/test-defs/eps-text-growth-directions.js.map +1 -1
  79. package/lib/exporters/__tests__/eps-export-image/test-defs/eps-text.d.ts.map +1 -1
  80. package/lib/exporters/__tests__/eps-export-image/test-defs/eps-text.js +27 -27
  81. package/lib/exporters/__tests__/eps-export-image/test-defs/eps-text.js.map +1 -1
  82. package/lib/exporters/__tests__/exception/react-svg-direction-exception.test.js +2 -2
  83. package/lib/exporters/__tests__/exception/react-svg-direction-exception.test.js.map +1 -1
  84. package/lib/exporters/__tests__/exception/svg-direction-exception.test.js +2 -2
  85. package/lib/exporters/__tests__/exception/svg-direction-exception.test.js.map +1 -1
  86. package/lib/exporters/__tests__/export-test-def.d.ts +8 -0
  87. package/lib/exporters/__tests__/export-test-def.d.ts.map +1 -0
  88. package/lib/exporters/__tests__/export-test-def.js +3 -0
  89. package/lib/exporters/__tests__/export-test-def.js.map +1 -0
  90. package/lib/exporters/__tests__/export.test.d.ts +3 -0
  91. package/lib/exporters/__tests__/export.test.d.ts.map +1 -0
  92. package/lib/exporters/__tests__/export.test.js +18 -0
  93. package/lib/exporters/__tests__/export.test.js.map +1 -0
  94. package/lib/exporters/__tests__/react-svg/export-test-def.d.ts +12 -0
  95. package/lib/exporters/__tests__/react-svg/export-test-def.d.ts.map +1 -0
  96. package/lib/exporters/__tests__/react-svg/export-test-def.js +6 -0
  97. package/lib/exporters/__tests__/react-svg/export-test-def.js.map +1 -0
  98. package/lib/exporters/__tests__/react-svg/export.test.d.ts +3 -0
  99. package/lib/exporters/__tests__/react-svg/export.test.d.ts.map +1 -0
  100. package/lib/exporters/__tests__/react-svg/export.test.js +17 -0
  101. package/lib/exporters/__tests__/react-svg/export.test.js.map +1 -0
  102. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-binary-png.d.ts +3 -0
  103. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-binary-png.d.ts.map +1 -0
  104. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-binary-png.js +33 -0
  105. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-binary-png.js.map +1 -0
  106. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-binary.d.ts +3 -0
  107. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-binary.d.ts.map +1 -0
  108. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-binary.js +33 -0
  109. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-binary.js.map +1 -0
  110. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-callback.d.ts +3 -0
  111. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-callback.d.ts.map +1 -0
  112. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-callback.js +38 -0
  113. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-callback.js.map +1 -0
  114. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-ellipse.d.ts +3 -0
  115. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-ellipse.d.ts.map +1 -0
  116. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-ellipse.js +34 -0
  117. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-ellipse.js.map +1 -0
  118. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-empty-text.d.ts +3 -0
  119. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-empty-text.d.ts.map +1 -0
  120. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-empty-text.js +34 -0
  121. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-empty-text.js.map +1 -0
  122. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-group.d.ts +3 -0
  123. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-group.d.ts.map +1 -0
  124. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-group.js +37 -0
  125. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-group.js.map +1 -0
  126. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-line.d.ts +3 -0
  127. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-line.d.ts.map +1 -0
  128. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-line.js +34 -0
  129. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-line.js.map +1 -0
  130. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-polygon.d.ts +3 -0
  131. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-polygon.d.ts.map +1 -0
  132. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-polygon.js +40 -0
  133. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-polygon.js.map +1 -0
  134. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-polyline.d.ts +3 -0
  135. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-polyline.d.ts.map +1 -0
  136. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-polyline.js +42 -0
  137. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-polyline.js.map +1 -0
  138. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-rectangle.d.ts +3 -0
  139. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-rectangle.d.ts.map +1 -0
  140. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-rectangle.js +34 -0
  141. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-rectangle.js.map +1 -0
  142. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-subimage.d.ts +3 -0
  143. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-subimage.d.ts.map +1 -0
  144. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-subimage.js +33 -0
  145. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-subimage.js.map +1 -0
  146. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-text-growth-directions.d.ts +3 -0
  147. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-text-growth-directions.d.ts.map +1 -0
  148. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-text-growth-directions.js +37 -0
  149. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-text-growth-directions.js.map +1 -0
  150. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-text-sub.d.ts +3 -0
  151. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-text-sub.d.ts.map +1 -0
  152. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-text-sub.js +34 -0
  153. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-text-sub.js.map +1 -0
  154. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-text.d.ts +3 -0
  155. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-text.d.ts.map +1 -0
  156. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-text.js +34 -0
  157. package/lib/exporters/__tests__/react-svg/test-defs/react-svg-text.js.map +1 -0
  158. package/lib/exporters/__tests__/react-svg-export-image/test-defs/react-svg-callback.d.ts.map +1 -1
  159. package/lib/exporters/__tests__/react-svg-export-image/test-defs/react-svg-callback.js +1 -1
  160. package/lib/exporters/__tests__/react-svg-export-image/test-defs/react-svg-callback.js.map +1 -1
  161. package/lib/exporters/__tests__/react-svg-export-image/test-defs/react-svg-empty-text.d.ts.map +1 -1
  162. package/lib/exporters/__tests__/react-svg-export-image/test-defs/react-svg-empty-text.js +1 -1
  163. package/lib/exporters/__tests__/react-svg-export-image/test-defs/react-svg-empty-text.js.map +1 -1
  164. package/lib/exporters/__tests__/react-svg-export-image/test-defs/react-svg-group.d.ts.map +1 -1
  165. package/lib/exporters/__tests__/react-svg-export-image/test-defs/react-svg-group.js +1 -1
  166. package/lib/exporters/__tests__/react-svg-export-image/test-defs/react-svg-group.js.map +1 -1
  167. package/lib/exporters/__tests__/react-svg-export-image/test-defs/react-svg-subimage.d.ts.map +1 -1
  168. package/lib/exporters/__tests__/react-svg-export-image/test-defs/react-svg-subimage.js +1 -1
  169. package/lib/exporters/__tests__/react-svg-export-image/test-defs/react-svg-subimage.js.map +1 -1
  170. package/lib/exporters/__tests__/react-svg-export-image/test-defs/react-svg-text-growth-directions.d.ts.map +1 -1
  171. package/lib/exporters/__tests__/react-svg-export-image/test-defs/react-svg-text-growth-directions.js +4 -4
  172. package/lib/exporters/__tests__/react-svg-export-image/test-defs/react-svg-text-growth-directions.js.map +1 -1
  173. package/lib/exporters/__tests__/react-svg-export-image/test-defs/react-svg-text-sub.d.ts.map +1 -1
  174. package/lib/exporters/__tests__/react-svg-export-image/test-defs/react-svg-text-sub.js +1 -1
  175. package/lib/exporters/__tests__/react-svg-export-image/test-defs/react-svg-text-sub.js.map +1 -1
  176. package/lib/exporters/__tests__/react-svg-export-image/test-defs/react-svg-text.d.ts.map +1 -1
  177. package/lib/exporters/__tests__/react-svg-export-image/test-defs/react-svg-text.js +1 -1
  178. package/lib/exporters/__tests__/react-svg-export-image/test-defs/react-svg-text.js.map +1 -1
  179. package/lib/exporters/__tests__/svg/export-test-def.d.ts +11 -0
  180. package/lib/exporters/__tests__/svg/export-test-def.d.ts.map +1 -0
  181. package/lib/exporters/__tests__/svg/export-test-def.js +6 -0
  182. package/lib/exporters/__tests__/svg/export-test-def.js.map +1 -0
  183. package/lib/exporters/__tests__/svg/export.test.d.ts +3 -0
  184. package/lib/exporters/__tests__/svg/export.test.d.ts.map +1 -0
  185. package/lib/exporters/__tests__/svg/export.test.js +17 -0
  186. package/lib/exporters/__tests__/svg/export.test.js.map +1 -0
  187. package/lib/exporters/__tests__/svg/test-defs/svg-ellipse.d.ts +3 -0
  188. package/lib/exporters/__tests__/svg/test-defs/svg-ellipse.d.ts.map +1 -0
  189. package/lib/exporters/__tests__/svg/test-defs/svg-ellipse.js +34 -0
  190. package/lib/exporters/__tests__/svg/test-defs/svg-ellipse.js.map +1 -0
  191. package/lib/exporters/__tests__/svg/test-defs/svg-empty-text.d.ts +3 -0
  192. package/lib/exporters/__tests__/svg/test-defs/svg-empty-text.d.ts.map +1 -0
  193. package/lib/exporters/__tests__/svg/test-defs/svg-empty-text.js +34 -0
  194. package/lib/exporters/__tests__/svg/test-defs/svg-empty-text.js.map +1 -0
  195. package/lib/exporters/__tests__/svg/test-defs/svg-group.d.ts +3 -0
  196. package/lib/exporters/__tests__/svg/test-defs/svg-group.d.ts.map +1 -0
  197. package/lib/exporters/__tests__/svg/test-defs/svg-group.js +37 -0
  198. package/lib/exporters/__tests__/svg/test-defs/svg-group.js.map +1 -0
  199. package/lib/exporters/__tests__/svg/test-defs/svg-line.d.ts +3 -0
  200. package/lib/exporters/__tests__/svg/test-defs/svg-line.d.ts.map +1 -0
  201. package/lib/exporters/__tests__/svg/test-defs/svg-line.js +34 -0
  202. package/lib/exporters/__tests__/svg/test-defs/svg-line.js.map +1 -0
  203. package/lib/exporters/__tests__/svg/test-defs/svg-polygon.d.ts +3 -0
  204. package/lib/exporters/__tests__/svg/test-defs/svg-polygon.d.ts.map +1 -0
  205. package/lib/exporters/__tests__/svg/test-defs/svg-polygon.js +40 -0
  206. package/lib/exporters/__tests__/svg/test-defs/svg-polygon.js.map +1 -0
  207. package/lib/exporters/__tests__/svg/test-defs/svg-polyline.d.ts +3 -0
  208. package/lib/exporters/__tests__/svg/test-defs/svg-polyline.d.ts.map +1 -0
  209. package/lib/exporters/__tests__/svg/test-defs/svg-polyline.js +42 -0
  210. package/lib/exporters/__tests__/svg/test-defs/svg-polyline.js.map +1 -0
  211. package/lib/exporters/__tests__/svg/test-defs/svg-rectangle.d.ts +3 -0
  212. package/lib/exporters/__tests__/svg/test-defs/svg-rectangle.d.ts.map +1 -0
  213. package/lib/exporters/__tests__/svg/test-defs/svg-rectangle.js +34 -0
  214. package/lib/exporters/__tests__/svg/test-defs/svg-rectangle.js.map +1 -0
  215. package/lib/exporters/__tests__/svg/test-defs/svg-text-growth-directions.d.ts +3 -0
  216. package/lib/exporters/__tests__/svg/test-defs/svg-text-growth-directions.d.ts.map +1 -0
  217. package/lib/exporters/__tests__/svg/test-defs/svg-text-growth-directions.js +37 -0
  218. package/lib/exporters/__tests__/svg/test-defs/svg-text-growth-directions.js.map +1 -0
  219. package/lib/exporters/__tests__/svg/test-defs/svg-text-unknown-direction.d.ts +3 -0
  220. package/lib/exporters/__tests__/svg/test-defs/svg-text-unknown-direction.d.ts.map +1 -0
  221. package/lib/exporters/__tests__/svg/test-defs/svg-text-unknown-direction.js +34 -0
  222. package/lib/exporters/__tests__/svg/test-defs/svg-text-unknown-direction.js.map +1 -0
  223. package/lib/exporters/__tests__/svg/test-defs/svg-text.d.ts +3 -0
  224. package/lib/exporters/__tests__/svg/test-defs/svg-text.d.ts.map +1 -0
  225. package/lib/exporters/__tests__/svg/test-defs/svg-text.js +34 -0
  226. package/lib/exporters/__tests__/svg/test-defs/svg-text.js.map +1 -0
  227. package/lib/exporters/__tests__/svg-export-image/test-defs/svg-empty-text.d.ts.map +1 -1
  228. package/lib/exporters/__tests__/svg-export-image/test-defs/svg-empty-text.js +1 -1
  229. package/lib/exporters/__tests__/svg-export-image/test-defs/svg-empty-text.js.map +1 -1
  230. package/lib/exporters/__tests__/svg-export-image/test-defs/svg-group.d.ts.map +1 -1
  231. package/lib/exporters/__tests__/svg-export-image/test-defs/svg-group.js +1 -1
  232. package/lib/exporters/__tests__/svg-export-image/test-defs/svg-group.js.map +1 -1
  233. package/lib/exporters/__tests__/svg-export-image/test-defs/svg-text-growth-directions.d.ts.map +1 -1
  234. package/lib/exporters/__tests__/svg-export-image/test-defs/svg-text-growth-directions.js +4 -4
  235. package/lib/exporters/__tests__/svg-export-image/test-defs/svg-text-growth-directions.js.map +1 -1
  236. package/lib/exporters/__tests__/svg-export-image/test-defs/svg-text.d.ts.map +1 -1
  237. package/lib/exporters/__tests__/svg-export-image/test-defs/svg-text.js +1 -1
  238. package/lib/exporters/__tests__/svg-export-image/test-defs/svg-text.js.map +1 -1
  239. package/lib/exporters/__tests__/test-defs/png-export-image.d.ts +3 -0
  240. package/lib/exporters/__tests__/test-defs/png-export-image.d.ts.map +1 -0
  241. package/lib/exporters/__tests__/test-defs/png-export-image.js +9 -0
  242. package/lib/exporters/__tests__/test-defs/png-export-image.js.map +1 -0
  243. package/lib/exporters/__tests__/test-defs/svg-export-image.d.ts +3 -0
  244. package/lib/exporters/__tests__/test-defs/svg-export-image.d.ts.map +1 -0
  245. package/lib/exporters/__tests__/test-defs/svg-export-image.js +54 -0
  246. package/lib/exporters/__tests__/test-defs/svg-export-image.js.map +1 -0
  247. package/lib/exporters/react-svg-export-image.js +2 -2
  248. package/lib/exporters/react-svg-export-image.js.map +1 -1
  249. package/lib/model/__tests__/color/test-defs/color-from-string-6-digits.d.ts +3 -0
  250. package/lib/model/__tests__/color/test-defs/color-from-string-6-digits.d.ts.map +1 -0
  251. package/lib/model/__tests__/color/test-defs/color-from-string-6-digits.js +66 -0
  252. package/lib/model/__tests__/color/test-defs/color-from-string-6-digits.js.map +1 -0
  253. package/lib/model/component.d.ts +3 -2
  254. package/lib/model/component.d.ts.map +1 -1
  255. package/lib/model/component.js +12 -11
  256. package/lib/model/component.js.map +1 -1
  257. package/package.json +2 -2
  258. package/src/__stories__/react-svg-export/example-1.stories.tsx +54 -53
  259. package/src/__stories__/svg-export/example-1.stories.tsx +42 -42
  260. package/src/exporters/__tests__/dxf2d-export-image/export-test-def.ts +11 -11
  261. package/src/exporters/__tests__/dxf2d-export-image/export.test.tsx +13 -13
  262. package/src/exporters/__tests__/dxf2d-export-image/test-defs/dxf2d-ellipse.ts +405 -405
  263. package/src/exporters/__tests__/dxf2d-export-image/test-defs/dxf2d-group.ts +166 -165
  264. package/src/exporters/__tests__/dxf2d-export-image/test-defs/dxf2d-line.ts +80 -80
  265. package/src/exporters/__tests__/dxf2d-export-image/test-defs/dxf2d-polygon.ts +114 -114
  266. package/src/exporters/__tests__/dxf2d-export-image/test-defs/dxf2d-polyline.ts +103 -103
  267. package/src/exporters/__tests__/dxf2d-export-image/test-defs/dxf2d-rectangle.ts +125 -125
  268. package/src/exporters/__tests__/dxf2d-export-image/test-defs/dxf2d-text-growth-directions.ts +214 -210
  269. package/src/exporters/__tests__/dxf2d-export-image/test-defs/dxf2d-text.ts +97 -96
  270. package/src/exporters/__tests__/eps-export-image/export-test-def.ts +11 -11
  271. package/src/exporters/__tests__/eps-export-image/export.test.tsx +13 -13
  272. package/src/exporters/__tests__/eps-export-image/test-defs/eps-ellipse.ts +50 -50
  273. package/src/exporters/__tests__/eps-export-image/test-defs/eps-empty-text.ts +60 -59
  274. package/src/exporters/__tests__/eps-export-image/test-defs/eps-group.ts +74 -73
  275. package/src/exporters/__tests__/eps-export-image/test-defs/eps-line.ts +45 -45
  276. package/src/exporters/__tests__/eps-export-image/test-defs/eps-polygon.ts +65 -65
  277. package/src/exporters/__tests__/eps-export-image/test-defs/eps-polyline.ts +58 -58
  278. package/src/exporters/__tests__/eps-export-image/test-defs/eps-rectangle.ts +46 -46
  279. package/src/exporters/__tests__/eps-export-image/test-defs/eps-text-growth-directions.ts +138 -134
  280. package/src/exporters/__tests__/eps-export-image/test-defs/eps-text.ts +60 -59
  281. package/src/exporters/__tests__/exception/png-unsupported.test.tsx +25 -25
  282. package/src/exporters/__tests__/exception/react-svg-direction-exception.test.tsx +65 -63
  283. package/src/exporters/__tests__/exception/svg-direction-exception.test.tsx +65 -63
  284. package/src/exporters/__tests__/png-export-image/export-test-def.ts +11 -11
  285. package/src/exporters/__tests__/png-export-image/export.test.tsx +13 -13
  286. package/src/exporters/__tests__/png-export-image/test-defs/png-createPNG.tsx +26 -26
  287. package/src/exporters/__tests__/react-svg-export-image/export-test-def.tsx +13 -13
  288. package/src/exporters/__tests__/react-svg-export-image/export.test.tsx +13 -13
  289. package/src/exporters/__tests__/react-svg-export-image/test-defs/react-svg-binary-png.tsx +27 -27
  290. package/src/exporters/__tests__/react-svg-export-image/test-defs/react-svg-binary.tsx +26 -26
  291. package/src/exporters/__tests__/react-svg-export-image/test-defs/react-svg-callback.tsx +60 -59
  292. package/src/exporters/__tests__/react-svg-export-image/test-defs/react-svg-ellipse.tsx +28 -28
  293. package/src/exporters/__tests__/react-svg-export-image/test-defs/react-svg-empty-text.tsx +35 -34
  294. package/src/exporters/__tests__/react-svg-export-image/test-defs/react-svg-group.tsx +44 -43
  295. package/src/exporters/__tests__/react-svg-export-image/test-defs/react-svg-line.tsx +26 -26
  296. package/src/exporters/__tests__/react-svg-export-image/test-defs/react-svg-polygon.tsx +32 -32
  297. package/src/exporters/__tests__/react-svg-export-image/test-defs/react-svg-polyline.tsx +33 -33
  298. package/src/exporters/__tests__/react-svg-export-image/test-defs/react-svg-rectangle.tsx +27 -27
  299. package/src/exporters/__tests__/react-svg-export-image/test-defs/react-svg-subimage.tsx +36 -35
  300. package/src/exporters/__tests__/react-svg-export-image/test-defs/react-svg-text-growth-directions.tsx +80 -76
  301. package/src/exporters/__tests__/react-svg-export-image/test-defs/react-svg-text-sub.tsx +35 -34
  302. package/src/exporters/__tests__/react-svg-export-image/test-defs/react-svg-text.tsx +35 -34
  303. package/src/exporters/__tests__/svg-export-image/export-test-def.ts +11 -11
  304. package/src/exporters/__tests__/svg-export-image/export.test.tsx +13 -13
  305. package/src/exporters/__tests__/svg-export-image/test-defs/svg-binary.tsx +26 -26
  306. package/src/exporters/__tests__/svg-export-image/test-defs/svg-ellipse.ts +27 -27
  307. package/src/exporters/__tests__/svg-export-image/test-defs/svg-empty-text.ts +34 -33
  308. package/src/exporters/__tests__/svg-export-image/test-defs/svg-group.ts +44 -43
  309. package/src/exporters/__tests__/svg-export-image/test-defs/svg-line.ts +26 -26
  310. package/src/exporters/__tests__/svg-export-image/test-defs/svg-polygon.ts +32 -32
  311. package/src/exporters/__tests__/svg-export-image/test-defs/svg-polyline.ts +33 -33
  312. package/src/exporters/__tests__/svg-export-image/test-defs/svg-rectangle.ts +27 -27
  313. package/src/exporters/__tests__/svg-export-image/test-defs/svg-text-growth-directions.ts +80 -76
  314. package/src/exporters/__tests__/svg-export-image/test-defs/svg-text.ts +35 -34
  315. package/src/exporters/dxf2d-export-image.ts +218 -218
  316. package/src/exporters/eps-export-image.ts +154 -154
  317. package/src/exporters/index.ts +3 -3
  318. package/src/exporters/png-export-image.ts +12 -12
  319. package/src/exporters/react-svg-export-image.tsx +298 -298
  320. package/src/exporters/svg-export-image.ts +334 -334
  321. package/src/index.ts +11 -11
  322. package/src/model/__tests__/color/export-test-def.ts +13 -13
  323. package/src/model/__tests__/color/export.test.tsx +14 -14
  324. package/src/model/__tests__/color/test-defs/color-from-string.ts +46 -46
  325. package/src/model/__tests__/color/test-defs/color-to-string.ts +35 -35
  326. package/src/model/__tests__/color/test-defs/color-undefined-2.ts +8 -8
  327. package/src/model/__tests__/color/test-defs/color-undefined.ts +8 -8
  328. package/src/model/abstract-image.ts +25 -25
  329. package/src/model/color.ts +52 -52
  330. package/src/model/component.ts +266 -279
  331. package/src/model/index.ts +5 -5
  332. package/src/model/point.ts +11 -11
  333. package/src/model/size.ts +11 -11
@@ -1,334 +1,334 @@
1
- import * as AbstractImage from "../model/index";
2
-
3
- export function createSVG(
4
- image: AbstractImage.AbstractImage,
5
- pixelWidth?: number,
6
- pixelHeight?: number
7
- ): string {
8
- const imageElements = image.components.map((c: AbstractImage.Component) =>
9
- abstractComponentToSVG(c)
10
- );
11
-
12
- return createElement(
13
- "svg",
14
- {
15
- xmlns: "http://www.w3.org/2000/svg",
16
- width: `${pixelWidth || image.size.width}px`,
17
- height: `${pixelHeight || image.size.height}px`,
18
- viewBox: [0, 0, image.size.width, image.size.height].join(" ")
19
- },
20
- imageElements
21
- );
22
- }
23
-
24
- function abstractComponentToSVG(component: AbstractImage.Component): string {
25
- switch (component.type) {
26
- case "group":
27
- return createElement(
28
- "g",
29
- {
30
- name: component.name
31
- },
32
- component.children.map(c => abstractComponentToSVG(c))
33
- );
34
- case "binaryimage":
35
- switch (component.format) {
36
- case "svg":
37
- return createElement("g", {}, [
38
- component.data.reduce((a, b) => a + String.fromCharCode(b), "")
39
- ]);
40
- default:
41
- return "";
42
- }
43
- case "subimage":
44
- return "";
45
- case "line":
46
- return createElement(
47
- "line",
48
- {
49
- x1: component.start.x.toString(),
50
- y1: component.start.y.toString(),
51
- x2: component.end.x.toString(),
52
- y2: component.end.y.toString(),
53
- stroke: colorToRgb(component.strokeColor),
54
- strokeOpacity: colorToOpacity(component.strokeColor),
55
- strokeWidth: component.strokeThickness.toString()
56
- },
57
- []
58
- );
59
- case "polyline":
60
- return createElement(
61
- "polyline",
62
- {
63
- fill: "none",
64
- points: component.points
65
- .map(p => p.x.toString() + "," + p.y.toString())
66
- .join(" "),
67
- stroke: colorToRgb(component.strokeColor),
68
- strokeOpacity: colorToOpacity(component.strokeColor),
69
- strokeWidth: component.strokeThickness.toString()
70
- },
71
- []
72
- );
73
- case "text":
74
- if (!component.text) {
75
- return "";
76
- }
77
- const lineHeight = component.fontSize;
78
-
79
- const shadowStyle = {
80
- textAnchor: getTextAnchor(component.horizontalGrowthDirection),
81
- fontSize: component.fontSize.toString() + "px",
82
- fontWeight: component.fontWeight,
83
- fontFamily: component.fontFamily,
84
- stroke: colorToRgb(component.strokeColor),
85
- strokeOpacity: colorToOpacity(component.strokeColor),
86
- strokeWidth: component.strokeThickness.toString() + "px"
87
- };
88
-
89
- const style = {
90
- textAnchor: getTextAnchor(component.horizontalGrowthDirection),
91
- fontSize: component.fontSize.toString() + "px",
92
- fontWeight: component.fontWeight,
93
- fontFamily: component.fontFamily,
94
- fill: colorToRgb(component.textColor),
95
- fillOpacity: colorToOpacity(component.textColor)
96
- };
97
-
98
- const dy = getBaselineAdjustment(component.verticalGrowthDirection);
99
-
100
- const transform =
101
- "rotate(" +
102
- component.clockwiseRotationDegrees.toString() +
103
- " " +
104
- component.position.x.toString() +
105
- " " +
106
- component.position.y.toString() +
107
- ")";
108
-
109
- const lines: Array<string> =
110
- component.text !== null ? component.text.split("\n") : [];
111
-
112
- const tSpans = lines.map(t =>
113
- createElement(
114
- "tspan",
115
- {
116
- x: component.position.x.toString(),
117
- y: (
118
- component.position.y +
119
- (lines.indexOf(t) + dy) * lineHeight
120
- ).toString(),
121
- height: lineHeight.toString() + "px"
122
- },
123
- [
124
- t
125
- .replace(
126
- "<sub>",
127
- `<tspan style="font-size: ${component.fontSize *
128
- 0.8}px" baseline-shift="sub">`
129
- )
130
- .replace("</sub>", "</tspan>")
131
- ]
132
- )
133
- );
134
-
135
- const cs: Array<string> = [];
136
-
137
- if (component.strokeThickness > 0 && component.strokeColor !== null) {
138
- cs.push(
139
- createElement(
140
- "text",
141
- {
142
- style: objectToAttributeValue(shadowStyle),
143
- transform: transform
144
- },
145
- tSpans
146
- )
147
- );
148
- }
149
- cs.push(
150
- createElement(
151
- "text",
152
- {
153
- style: objectToAttributeValue(style),
154
- transform: transform
155
- },
156
- tSpans
157
- )
158
- );
159
- return cs.join();
160
- case "ellipse":
161
- const rx = Math.abs(component.bottomRight.x - component.topLeft.x) * 0.5;
162
- const ry = Math.abs(component.bottomRight.y - component.topLeft.y) * 0.5;
163
- const cx = (component.bottomRight.x + component.topLeft.x) * 0.5;
164
- const cy = (component.bottomRight.y + component.topLeft.y) * 0.5;
165
- return createElement(
166
- "ellipse",
167
- {
168
- cx: cx.toString(),
169
- cy: cy.toString(),
170
- rx: rx.toString(),
171
- ry: ry.toString(),
172
- stroke: colorToRgb(component.strokeColor),
173
- strokeOpacity: colorToOpacity(component.strokeColor),
174
- strokeWidth: component.strokeThickness.toString(),
175
- fill: colorToRgb(component.fillColor),
176
- fillOpacity: colorToOpacity(component.fillColor)
177
- },
178
- []
179
- );
180
- case "polygon":
181
- return createElement(
182
- "polygon",
183
- {
184
- points: component.points
185
- .map(p => p.x.toString() + "," + p.y.toString())
186
- .join(" "),
187
- stroke: colorToRgb(component.strokeColor),
188
- strokeOpacity: colorToOpacity(component.strokeColor),
189
- strokeWidth: component.strokeThickness.toString(),
190
- fill: colorToRgb(component.fillColor),
191
- fillOpacity: colorToOpacity(component.fillColor)
192
- },
193
- []
194
- );
195
- case "rectangle":
196
- return createElement(
197
- "rect",
198
- {
199
- x: component.topLeft.x.toString(),
200
- y: component.topLeft.y.toString(),
201
- width: Math.abs(
202
- component.bottomRight.x - component.topLeft.x
203
- ).toString(),
204
- height: Math.abs(
205
- component.bottomRight.y - component.topLeft.y
206
- ).toString(),
207
- stroke: colorToRgb(component.strokeColor),
208
- strokeOpacity: colorToOpacity(component.strokeColor),
209
- strokeWidth: component.strokeThickness.toString(),
210
- fill: colorToRgb(component.fillColor),
211
- fillOpacity: colorToOpacity(component.fillColor)
212
- },
213
- []
214
- );
215
- default:
216
- return "";
217
- }
218
- }
219
-
220
- interface Attributes {
221
- readonly [key: string]: string;
222
- }
223
-
224
- function createElement(
225
- elementName: string,
226
- attributes: Attributes,
227
- innerElements: string[]
228
- ): string {
229
- const formattedName = convertUpperToHyphenLower(elementName);
230
- let element = `<${formattedName}`;
231
-
232
- if (Object.keys(attributes).length > 0) {
233
- element = Object.keys(attributes).reduce(
234
- (previousValue: string, currentValue: string) => {
235
- if (attributes[currentValue]) {
236
- return (
237
- previousValue +
238
- ` ${convertUpperToHyphenLower(currentValue)}="${
239
- attributes[currentValue]
240
- }"`
241
- );
242
- } else {
243
- return previousValue;
244
- }
245
- },
246
- element
247
- );
248
- }
249
-
250
- element += ">";
251
-
252
- if (innerElements.length > 0) {
253
- element = innerElements.reduce(
254
- (previousValue: string, currentValue: string) => {
255
- if (!currentValue || currentValue.length < 1) {
256
- return previousValue;
257
- } else {
258
- return previousValue + `${currentValue}`;
259
- }
260
- },
261
- element
262
- );
263
- }
264
-
265
- element += `</${formattedName}>`;
266
-
267
- return element;
268
- }
269
-
270
- function objectToAttributeValue(attributes: Attributes): string {
271
- if (attributes && Object.keys(attributes).length > 0) {
272
- return Object.keys(attributes).reduce(
273
- (previousValue: string, currentValue: string) => {
274
- if (attributes[currentValue]) {
275
- return (
276
- previousValue +
277
- `${convertUpperToHyphenLower(currentValue)}:${
278
- attributes[currentValue]
279
- };`
280
- );
281
- } else {
282
- return previousValue;
283
- }
284
- },
285
- ""
286
- );
287
- }
288
-
289
- return "";
290
- }
291
-
292
- function convertUpperToHyphenLower(elementName: string): string {
293
- function upperToHyphenLower(match: string): string {
294
- return "-" + match.toLowerCase();
295
- }
296
-
297
- return elementName !== "viewBox"
298
- ? elementName.replace(/[A-Z]/g, upperToHyphenLower)
299
- : elementName;
300
- }
301
-
302
- function getBaselineAdjustment(d: AbstractImage.GrowthDirection): number {
303
- if (d === "up") {
304
- return 0.0;
305
- }
306
- if (d === "uniform") {
307
- return 0.5;
308
- }
309
- if (d === "down") {
310
- return 1.0;
311
- }
312
- throw "Unknown text alignment " + d;
313
- }
314
-
315
- function getTextAnchor(d: AbstractImage.GrowthDirection): string {
316
- if (d === "left") {
317
- return "end";
318
- }
319
- if (d === "uniform") {
320
- return "middle";
321
- }
322
- if (d === "right") {
323
- return "start";
324
- }
325
- throw "Unknown text alignment " + d;
326
- }
327
-
328
- function colorToRgb(color: AbstractImage.Color): string {
329
- return `rgb(${color.r.toString()}, ${color.g.toString()}, ${color.b.toString()})`;
330
- }
331
-
332
- function colorToOpacity(color: AbstractImage.Color): string {
333
- return (color.a / 255).toString();
334
- }
1
+ import * as AbstractImage from "../model/index";
2
+
3
+ export function createSVG(
4
+ image: AbstractImage.AbstractImage,
5
+ pixelWidth?: number,
6
+ pixelHeight?: number
7
+ ): string {
8
+ const imageElements = image.components.map((c: AbstractImage.Component) =>
9
+ abstractComponentToSVG(c)
10
+ );
11
+
12
+ return createElement(
13
+ "svg",
14
+ {
15
+ xmlns: "http://www.w3.org/2000/svg",
16
+ width: `${pixelWidth || image.size.width}px`,
17
+ height: `${pixelHeight || image.size.height}px`,
18
+ viewBox: [0, 0, image.size.width, image.size.height].join(" ")
19
+ },
20
+ imageElements
21
+ );
22
+ }
23
+
24
+ function abstractComponentToSVG(component: AbstractImage.Component): string {
25
+ switch (component.type) {
26
+ case "group":
27
+ return createElement(
28
+ "g",
29
+ {
30
+ name: component.name
31
+ },
32
+ component.children.map(c => abstractComponentToSVG(c))
33
+ );
34
+ case "binaryimage":
35
+ switch (component.format) {
36
+ case "svg":
37
+ return createElement("g", {}, [
38
+ component.data.reduce((a, b) => a + String.fromCharCode(b), "")
39
+ ]);
40
+ default:
41
+ return "";
42
+ }
43
+ case "subimage":
44
+ return "";
45
+ case "line":
46
+ return createElement(
47
+ "line",
48
+ {
49
+ x1: component.start.x.toString(),
50
+ y1: component.start.y.toString(),
51
+ x2: component.end.x.toString(),
52
+ y2: component.end.y.toString(),
53
+ stroke: colorToRgb(component.strokeColor),
54
+ strokeOpacity: colorToOpacity(component.strokeColor),
55
+ strokeWidth: component.strokeThickness.toString()
56
+ },
57
+ []
58
+ );
59
+ case "polyline":
60
+ return createElement(
61
+ "polyline",
62
+ {
63
+ fill: "none",
64
+ points: component.points
65
+ .map(p => p.x.toString() + "," + p.y.toString())
66
+ .join(" "),
67
+ stroke: colorToRgb(component.strokeColor),
68
+ strokeOpacity: colorToOpacity(component.strokeColor),
69
+ strokeWidth: component.strokeThickness.toString()
70
+ },
71
+ []
72
+ );
73
+ case "text":
74
+ if (!component.text) {
75
+ return "";
76
+ }
77
+ const lineHeight = component.fontSize;
78
+
79
+ const shadowStyle = {
80
+ textAnchor: getTextAnchor(component.horizontalGrowthDirection),
81
+ fontSize: component.fontSize.toString() + "px",
82
+ fontWeight: component.fontWeight,
83
+ fontFamily: component.fontFamily,
84
+ stroke: colorToRgb(component.strokeColor),
85
+ strokeOpacity: colorToOpacity(component.strokeColor),
86
+ strokeWidth: component.strokeThickness.toString() + "px"
87
+ };
88
+
89
+ const style = {
90
+ textAnchor: getTextAnchor(component.horizontalGrowthDirection),
91
+ fontSize: component.fontSize.toString() + "px",
92
+ fontWeight: component.fontWeight,
93
+ fontFamily: component.fontFamily,
94
+ fill: colorToRgb(component.textColor),
95
+ fillOpacity: colorToOpacity(component.textColor)
96
+ };
97
+
98
+ const dy = getBaselineAdjustment(component.verticalGrowthDirection);
99
+
100
+ const transform =
101
+ "rotate(" +
102
+ component.clockwiseRotationDegrees.toString() +
103
+ " " +
104
+ component.position.x.toString() +
105
+ " " +
106
+ component.position.y.toString() +
107
+ ")";
108
+
109
+ const lines: Array<string> =
110
+ component.text !== null ? component.text.split("\n") : [];
111
+
112
+ const tSpans = lines.map(t =>
113
+ createElement(
114
+ "tspan",
115
+ {
116
+ x: component.position.x.toString(),
117
+ y: (
118
+ component.position.y +
119
+ (lines.indexOf(t) + dy) * lineHeight
120
+ ).toString(),
121
+ height: lineHeight.toString() + "px"
122
+ },
123
+ [
124
+ t
125
+ .replace(
126
+ "<sub>",
127
+ `<tspan style="font-size: ${component.fontSize *
128
+ 0.8}px" baseline-shift="sub">`
129
+ )
130
+ .replace("</sub>", "</tspan>")
131
+ ]
132
+ )
133
+ );
134
+
135
+ const cs: Array<string> = [];
136
+
137
+ if (component.strokeThickness > 0 && component.strokeColor !== null) {
138
+ cs.push(
139
+ createElement(
140
+ "text",
141
+ {
142
+ style: objectToAttributeValue(shadowStyle),
143
+ transform: transform
144
+ },
145
+ tSpans
146
+ )
147
+ );
148
+ }
149
+ cs.push(
150
+ createElement(
151
+ "text",
152
+ {
153
+ style: objectToAttributeValue(style),
154
+ transform: transform
155
+ },
156
+ tSpans
157
+ )
158
+ );
159
+ return cs.join();
160
+ case "ellipse":
161
+ const rx = Math.abs(component.bottomRight.x - component.topLeft.x) * 0.5;
162
+ const ry = Math.abs(component.bottomRight.y - component.topLeft.y) * 0.5;
163
+ const cx = (component.bottomRight.x + component.topLeft.x) * 0.5;
164
+ const cy = (component.bottomRight.y + component.topLeft.y) * 0.5;
165
+ return createElement(
166
+ "ellipse",
167
+ {
168
+ cx: cx.toString(),
169
+ cy: cy.toString(),
170
+ rx: rx.toString(),
171
+ ry: ry.toString(),
172
+ stroke: colorToRgb(component.strokeColor),
173
+ strokeOpacity: colorToOpacity(component.strokeColor),
174
+ strokeWidth: component.strokeThickness.toString(),
175
+ fill: colorToRgb(component.fillColor),
176
+ fillOpacity: colorToOpacity(component.fillColor)
177
+ },
178
+ []
179
+ );
180
+ case "polygon":
181
+ return createElement(
182
+ "polygon",
183
+ {
184
+ points: component.points
185
+ .map(p => p.x.toString() + "," + p.y.toString())
186
+ .join(" "),
187
+ stroke: colorToRgb(component.strokeColor),
188
+ strokeOpacity: colorToOpacity(component.strokeColor),
189
+ strokeWidth: component.strokeThickness.toString(),
190
+ fill: colorToRgb(component.fillColor),
191
+ fillOpacity: colorToOpacity(component.fillColor)
192
+ },
193
+ []
194
+ );
195
+ case "rectangle":
196
+ return createElement(
197
+ "rect",
198
+ {
199
+ x: component.topLeft.x.toString(),
200
+ y: component.topLeft.y.toString(),
201
+ width: Math.abs(
202
+ component.bottomRight.x - component.topLeft.x
203
+ ).toString(),
204
+ height: Math.abs(
205
+ component.bottomRight.y - component.topLeft.y
206
+ ).toString(),
207
+ stroke: colorToRgb(component.strokeColor),
208
+ strokeOpacity: colorToOpacity(component.strokeColor),
209
+ strokeWidth: component.strokeThickness.toString(),
210
+ fill: colorToRgb(component.fillColor),
211
+ fillOpacity: colorToOpacity(component.fillColor)
212
+ },
213
+ []
214
+ );
215
+ default:
216
+ return "";
217
+ }
218
+ }
219
+
220
+ interface Attributes {
221
+ readonly [key: string]: string;
222
+ }
223
+
224
+ function createElement(
225
+ elementName: string,
226
+ attributes: Attributes,
227
+ innerElements: string[]
228
+ ): string {
229
+ const formattedName = convertUpperToHyphenLower(elementName);
230
+ let element = `<${formattedName}`;
231
+
232
+ if (Object.keys(attributes).length > 0) {
233
+ element = Object.keys(attributes).reduce(
234
+ (previousValue: string, currentValue: string) => {
235
+ if (attributes[currentValue]) {
236
+ return (
237
+ previousValue +
238
+ ` ${convertUpperToHyphenLower(currentValue)}="${
239
+ attributes[currentValue]
240
+ }"`
241
+ );
242
+ } else {
243
+ return previousValue;
244
+ }
245
+ },
246
+ element
247
+ );
248
+ }
249
+
250
+ element += ">";
251
+
252
+ if (innerElements.length > 0) {
253
+ element = innerElements.reduce(
254
+ (previousValue: string, currentValue: string) => {
255
+ if (!currentValue || currentValue.length < 1) {
256
+ return previousValue;
257
+ } else {
258
+ return previousValue + `${currentValue}`;
259
+ }
260
+ },
261
+ element
262
+ );
263
+ }
264
+
265
+ element += `</${formattedName}>`;
266
+
267
+ return element;
268
+ }
269
+
270
+ function objectToAttributeValue(attributes: Attributes): string {
271
+ if (attributes && Object.keys(attributes).length > 0) {
272
+ return Object.keys(attributes).reduce(
273
+ (previousValue: string, currentValue: string) => {
274
+ if (attributes[currentValue]) {
275
+ return (
276
+ previousValue +
277
+ `${convertUpperToHyphenLower(currentValue)}:${
278
+ attributes[currentValue]
279
+ };`
280
+ );
281
+ } else {
282
+ return previousValue;
283
+ }
284
+ },
285
+ ""
286
+ );
287
+ }
288
+
289
+ return "";
290
+ }
291
+
292
+ function convertUpperToHyphenLower(elementName: string): string {
293
+ function upperToHyphenLower(match: string): string {
294
+ return "-" + match.toLowerCase();
295
+ }
296
+
297
+ return elementName !== "viewBox"
298
+ ? elementName.replace(/[A-Z]/g, upperToHyphenLower)
299
+ : elementName;
300
+ }
301
+
302
+ function getBaselineAdjustment(d: AbstractImage.GrowthDirection): number {
303
+ if (d === "up") {
304
+ return 0.0;
305
+ }
306
+ if (d === "uniform") {
307
+ return 0.5;
308
+ }
309
+ if (d === "down") {
310
+ return 1.0;
311
+ }
312
+ throw "Unknown text alignment " + d;
313
+ }
314
+
315
+ function getTextAnchor(d: AbstractImage.GrowthDirection): string {
316
+ if (d === "left") {
317
+ return "end";
318
+ }
319
+ if (d === "uniform") {
320
+ return "middle";
321
+ }
322
+ if (d === "right") {
323
+ return "start";
324
+ }
325
+ throw "Unknown text alignment " + d;
326
+ }
327
+
328
+ function colorToRgb(color: AbstractImage.Color): string {
329
+ return `rgb(${color.r.toString()}, ${color.g.toString()}, ${color.b.toString()})`;
330
+ }
331
+
332
+ function colorToOpacity(color: AbstractImage.Color): string {
333
+ return (color.a / 255).toString();
334
+ }