ding-image-editor 3.15.3

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 (374) hide show
  1. package/README.md +193 -0
  2. package/dist/svg/icon-a.svg +376 -0
  3. package/dist/svg/icon-b.svg +369 -0
  4. package/dist/svg/icon-c.svg +369 -0
  5. package/dist/svg/icon-d.svg +369 -0
  6. package/dist/tui-image-editor.css +6 -0
  7. package/dist/tui-image-editor.js +62329 -0
  8. package/dist/tui-image-editor.min.css +5 -0
  9. package/dist/tui-image-editor.min.js +15 -0
  10. package/index.d.ts +334 -0
  11. package/package.json +52 -0
  12. package/src/css/buttons.styl +102 -0
  13. package/src/css/checkbox.styl +86 -0
  14. package/src/css/colorpicker.styl +98 -0
  15. package/src/css/gridtable.styl +45 -0
  16. package/src/css/icon.styl +44 -0
  17. package/src/css/index.styl +17 -0
  18. package/src/css/main.styl +163 -0
  19. package/src/css/position.styl +309 -0
  20. package/src/css/range.styl +91 -0
  21. package/src/css/submenu.styl +168 -0
  22. package/src/index.js +29 -0
  23. package/src/js/action.js +686 -0
  24. package/src/js/command/addIcon.js +42 -0
  25. package/src/js/command/addImageObject.js +34 -0
  26. package/src/js/command/addObject.js +43 -0
  27. package/src/js/command/addShape.js +51 -0
  28. package/src/js/command/addText.js +73 -0
  29. package/src/js/command/applyFilter.js +95 -0
  30. package/src/js/command/changeIconColor.js +48 -0
  31. package/src/js/command/changeSelection.js +31 -0
  32. package/src/js/command/changeShape.js +84 -0
  33. package/src/js/command/changeText.js +44 -0
  34. package/src/js/command/changeTextStyle.js +80 -0
  35. package/src/js/command/clearObjects.js +33 -0
  36. package/src/js/command/flip.js +36 -0
  37. package/src/js/command/loadImage.js +58 -0
  38. package/src/js/command/removeFilter.js +38 -0
  39. package/src/js/command/removeObject.js +37 -0
  40. package/src/js/command/resize.js +41 -0
  41. package/src/js/command/resizeCanvasDimension.js +40 -0
  42. package/src/js/command/rotate.js +64 -0
  43. package/src/js/command/setObjectPosition.js +50 -0
  44. package/src/js/command/setObjectProperties.js +55 -0
  45. package/src/js/component/cropper.js +407 -0
  46. package/src/js/component/filter.js +229 -0
  47. package/src/js/component/flip.js +146 -0
  48. package/src/js/component/freeDrawing.js +144 -0
  49. package/src/js/component/icon.js +246 -0
  50. package/src/js/component/imageLoader.js +84 -0
  51. package/src/js/component/line.js +205 -0
  52. package/src/js/component/resize.js +103 -0
  53. package/src/js/component/rotation.js +91 -0
  54. package/src/js/component/shape.js +601 -0
  55. package/src/js/component/text.js +572 -0
  56. package/src/js/component/zoom.js +708 -0
  57. package/src/js/consts.js +404 -0
  58. package/src/js/drawingMode/cropper.js +35 -0
  59. package/src/js/drawingMode/freeDrawing.js +36 -0
  60. package/src/js/drawingMode/icon.js +35 -0
  61. package/src/js/drawingMode/lineDrawing.js +36 -0
  62. package/src/js/drawingMode/resize.js +35 -0
  63. package/src/js/drawingMode/shape.js +35 -0
  64. package/src/js/drawingMode/text.js +35 -0
  65. package/src/js/drawingMode/zoom.js +37 -0
  66. package/src/js/extension/arrowLine.js +172 -0
  67. package/src/js/extension/blur.js +29 -0
  68. package/src/js/extension/colorFilter.js +104 -0
  69. package/src/js/extension/cropzone.js +568 -0
  70. package/src/js/extension/emboss.js +29 -0
  71. package/src/js/extension/mask.js +90 -0
  72. package/src/js/extension/sharpen.js +29 -0
  73. package/src/js/factory/command.js +36 -0
  74. package/src/js/factory/errorMessage.js +27 -0
  75. package/src/js/graphics.js +1539 -0
  76. package/src/js/helper/imagetracer.js +1396 -0
  77. package/src/js/helper/selectionModifyHelper.js +86 -0
  78. package/src/js/helper/shapeFilterFillHelper.js +564 -0
  79. package/src/js/helper/shapeResizeHelper.js +237 -0
  80. package/src/js/imageEditor.js +1795 -0
  81. package/src/js/interface/command.js +131 -0
  82. package/src/js/interface/component.js +127 -0
  83. package/src/js/interface/drawingMode.js +47 -0
  84. package/src/js/invoker.js +292 -0
  85. package/src/js/polyfill.js +498 -0
  86. package/src/js/ui/crop.js +139 -0
  87. package/src/js/ui/draw.js +187 -0
  88. package/src/js/ui/filter.js +510 -0
  89. package/src/js/ui/flip.js +87 -0
  90. package/src/js/ui/history.js +171 -0
  91. package/src/js/ui/icon.js +191 -0
  92. package/src/js/ui/locale/locale.js +19 -0
  93. package/src/js/ui/mask.js +96 -0
  94. package/src/js/ui/panelMenu.js +130 -0
  95. package/src/js/ui/resize.js +241 -0
  96. package/src/js/ui/rotate.js +123 -0
  97. package/src/js/ui/shape.js +265 -0
  98. package/src/js/ui/submenuBase.js +122 -0
  99. package/src/js/ui/template/controls.js +21 -0
  100. package/src/js/ui/template/mainContainer.js +38 -0
  101. package/src/js/ui/template/style.js +146 -0
  102. package/src/js/ui/template/submenu/crop.js +73 -0
  103. package/src/js/ui/template/submenu/draw.js +42 -0
  104. package/src/js/ui/template/submenu/filter.js +157 -0
  105. package/src/js/ui/template/submenu/flip.js +41 -0
  106. package/src/js/ui/template/submenu/history.js +22 -0
  107. package/src/js/ui/template/submenu/icon.js +108 -0
  108. package/src/js/ui/template/submenu/mask.js +30 -0
  109. package/src/js/ui/template/submenu/resize.js +54 -0
  110. package/src/js/ui/template/submenu/rotate.js +32 -0
  111. package/src/js/ui/template/submenu/shape.js +45 -0
  112. package/src/js/ui/template/submenu/text.js +67 -0
  113. package/src/js/ui/template/submenu/zoom.js +41 -0
  114. package/src/js/ui/text.js +279 -0
  115. package/src/js/ui/theme/standard.js +220 -0
  116. package/src/js/ui/theme/theme.js +249 -0
  117. package/src/js/ui/tools/colorpicker.js +250 -0
  118. package/src/js/ui/tools/range.js +390 -0
  119. package/src/js/ui.js +858 -0
  120. package/src/js/util.js +551 -0
  121. package/src/svg/default.svg +335 -0
  122. package/src/svg/icon-a/ic-apply.svg +6 -0
  123. package/src/svg/icon-a/ic-cancel.svg +6 -0
  124. package/src/svg/icon-a/ic-color-transparent-w.svg +12 -0
  125. package/src/svg/icon-a/ic-crop.svg +7 -0
  126. package/src/svg/icon-a/ic-delete-all.svg +6 -0
  127. package/src/svg/icon-a/ic-delete.svg +6 -0
  128. package/src/svg/icon-a/ic-draw-free.svg +5 -0
  129. package/src/svg/icon-a/ic-draw-line.svg +5 -0
  130. package/src/svg/icon-a/ic-draw.svg +6 -0
  131. package/src/svg/icon-a/ic-filter.svg +7 -0
  132. package/src/svg/icon-a/ic-flip-reset.svg +7 -0
  133. package/src/svg/icon-a/ic-flip-x.svg +6 -0
  134. package/src/svg/icon-a/ic-flip-y.svg +6 -0
  135. package/src/svg/icon-a/ic-flip.svg +6 -0
  136. package/src/svg/icon-a/ic-history-check.svg +5 -0
  137. package/src/svg/icon-a/ic-history-crop.svg +7 -0
  138. package/src/svg/icon-a/ic-history-delete.svg +9 -0
  139. package/src/svg/icon-a/ic-history-draw.svg +7 -0
  140. package/src/svg/icon-a/ic-history-filter.svg +8 -0
  141. package/src/svg/icon-a/ic-history-flip.svg +6 -0
  142. package/src/svg/icon-a/ic-history-group.svg +9 -0
  143. package/src/svg/icon-a/ic-history-icon.svg +6 -0
  144. package/src/svg/icon-a/ic-history-load.svg +7 -0
  145. package/src/svg/icon-a/ic-history-mask.svg +9 -0
  146. package/src/svg/icon-a/ic-history-resize.svg +12 -0
  147. package/src/svg/icon-a/ic-history-rotate.svg +16 -0
  148. package/src/svg/icon-a/ic-history-shape.svg +7 -0
  149. package/src/svg/icon-a/ic-history-text.svg +8 -0
  150. package/src/svg/icon-a/ic-history.svg +6 -0
  151. package/src/svg/icon-a/ic-icon-arrow-2.svg +5 -0
  152. package/src/svg/icon-a/ic-icon-arrow-3.svg +5 -0
  153. package/src/svg/icon-a/ic-icon-arrow.svg +5 -0
  154. package/src/svg/icon-a/ic-icon-bubble.svg +5 -0
  155. package/src/svg/icon-a/ic-icon-heart.svg +5 -0
  156. package/src/svg/icon-a/ic-icon-load.svg +8 -0
  157. package/src/svg/icon-a/ic-icon-location.svg +8 -0
  158. package/src/svg/icon-a/ic-icon-polygon.svg +5 -0
  159. package/src/svg/icon-a/ic-icon-star-2.svg +5 -0
  160. package/src/svg/icon-a/ic-icon-star.svg +5 -0
  161. package/src/svg/icon-a/ic-icon.svg +5 -0
  162. package/src/svg/icon-a/ic-mask-load.svg +8 -0
  163. package/src/svg/icon-a/ic-mask.svg +6 -0
  164. package/src/svg/icon-a/ic-redo.svg +7 -0
  165. package/src/svg/icon-a/ic-reset.svg +7 -0
  166. package/src/svg/icon-a/ic-resize.svg +13 -0
  167. package/src/svg/icon-a/ic-rotate-clockwise.svg +7 -0
  168. package/src/svg/icon-a/ic-rotate-counterclockwise.svg +7 -0
  169. package/src/svg/icon-a/ic-rotate.svg +7 -0
  170. package/src/svg/icon-a/ic-shape-circle.svg +5 -0
  171. package/src/svg/icon-a/ic-shape-rectangle.svg +5 -0
  172. package/src/svg/icon-a/ic-shape-triangle.svg +5 -0
  173. package/src/svg/icon-a/ic-shape.svg +6 -0
  174. package/src/svg/icon-a/ic-text-align-center.svg +6 -0
  175. package/src/svg/icon-a/ic-text-align-left.svg +6 -0
  176. package/src/svg/icon-a/ic-text-align-right.svg +6 -0
  177. package/src/svg/icon-a/ic-text-bold.svg +7 -0
  178. package/src/svg/icon-a/ic-text-italic.svg +6 -0
  179. package/src/svg/icon-a/ic-text-underline.svg +7 -0
  180. package/src/svg/icon-a/ic-text.svg +7 -0
  181. package/src/svg/icon-a/ic-undo.svg +7 -0
  182. package/src/svg/icon-a/ic-zoom-hand.svg +8 -0
  183. package/src/svg/icon-a/ic-zoom-zoom-in.svg +10 -0
  184. package/src/svg/icon-a/ic-zoom-zoom-out.svg +9 -0
  185. package/src/svg/icon-a/img-bi.svg +5 -0
  186. package/src/svg/icon-b/ic-apply.svg +6 -0
  187. package/src/svg/icon-b/ic-cancel.svg +6 -0
  188. package/src/svg/icon-b/ic-crop.svg +7 -0
  189. package/src/svg/icon-b/ic-delete-all.svg +6 -0
  190. package/src/svg/icon-b/ic-delete.svg +6 -0
  191. package/src/svg/icon-b/ic-draw-free.svg +5 -0
  192. package/src/svg/icon-b/ic-draw-line.svg +5 -0
  193. package/src/svg/icon-b/ic-draw.svg +6 -0
  194. package/src/svg/icon-b/ic-filter.svg +7 -0
  195. package/src/svg/icon-b/ic-flip-reset.svg +7 -0
  196. package/src/svg/icon-b/ic-flip-x.svg +6 -0
  197. package/src/svg/icon-b/ic-flip-y.svg +6 -0
  198. package/src/svg/icon-b/ic-flip.svg +6 -0
  199. package/src/svg/icon-b/ic-history-check.svg +5 -0
  200. package/src/svg/icon-b/ic-history-crop.svg +7 -0
  201. package/src/svg/icon-b/ic-history-delete.svg +9 -0
  202. package/src/svg/icon-b/ic-history-draw.svg +7 -0
  203. package/src/svg/icon-b/ic-history-filter.svg +8 -0
  204. package/src/svg/icon-b/ic-history-flip.svg +6 -0
  205. package/src/svg/icon-b/ic-history-group.svg +9 -0
  206. package/src/svg/icon-b/ic-history-icon.svg +6 -0
  207. package/src/svg/icon-b/ic-history-load.svg +7 -0
  208. package/src/svg/icon-b/ic-history-mask.svg +9 -0
  209. package/src/svg/icon-b/ic-history-resize.svg +12 -0
  210. package/src/svg/icon-b/ic-history-rotate.svg +16 -0
  211. package/src/svg/icon-b/ic-history-shape.svg +7 -0
  212. package/src/svg/icon-b/ic-history-text.svg +8 -0
  213. package/src/svg/icon-b/ic-history.svg +6 -0
  214. package/src/svg/icon-b/ic-icon-arrow-2.svg +5 -0
  215. package/src/svg/icon-b/ic-icon-arrow-3.svg +5 -0
  216. package/src/svg/icon-b/ic-icon-arrow.svg +5 -0
  217. package/src/svg/icon-b/ic-icon-bubble.svg +5 -0
  218. package/src/svg/icon-b/ic-icon-heart.svg +5 -0
  219. package/src/svg/icon-b/ic-icon-load.svg +8 -0
  220. package/src/svg/icon-b/ic-icon-location.svg +8 -0
  221. package/src/svg/icon-b/ic-icon-polygon.svg +5 -0
  222. package/src/svg/icon-b/ic-icon-star-2.svg +5 -0
  223. package/src/svg/icon-b/ic-icon-star.svg +5 -0
  224. package/src/svg/icon-b/ic-icon.svg +5 -0
  225. package/src/svg/icon-b/ic-mask-load.svg +8 -0
  226. package/src/svg/icon-b/ic-mask.svg +6 -0
  227. package/src/svg/icon-b/ic-redo.svg +7 -0
  228. package/src/svg/icon-b/ic-reset.svg +7 -0
  229. package/src/svg/icon-b/ic-resize.svg +13 -0
  230. package/src/svg/icon-b/ic-rotate-clockwise.svg +7 -0
  231. package/src/svg/icon-b/ic-rotate-counterclockwise.svg +7 -0
  232. package/src/svg/icon-b/ic-rotate.svg +7 -0
  233. package/src/svg/icon-b/ic-shape-circle.svg +5 -0
  234. package/src/svg/icon-b/ic-shape-rectangle.svg +5 -0
  235. package/src/svg/icon-b/ic-shape-triangle.svg +5 -0
  236. package/src/svg/icon-b/ic-shape.svg +6 -0
  237. package/src/svg/icon-b/ic-text-align-center.svg +6 -0
  238. package/src/svg/icon-b/ic-text-align-left.svg +6 -0
  239. package/src/svg/icon-b/ic-text-align-right.svg +6 -0
  240. package/src/svg/icon-b/ic-text-bold.svg +7 -0
  241. package/src/svg/icon-b/ic-text-italic.svg +6 -0
  242. package/src/svg/icon-b/ic-text-underline.svg +7 -0
  243. package/src/svg/icon-b/ic-text.svg +7 -0
  244. package/src/svg/icon-b/ic-undo.svg +7 -0
  245. package/src/svg/icon-b/ic-zoom-hand.svg +8 -0
  246. package/src/svg/icon-b/ic-zoom-zoom-in.svg +12 -0
  247. package/src/svg/icon-b/ic-zoom-zoom-out.svg +11 -0
  248. package/src/svg/icon-b/img-bi.svg +5 -0
  249. package/src/svg/icon-c/ic-apply.svg +6 -0
  250. package/src/svg/icon-c/ic-cancel.svg +6 -0
  251. package/src/svg/icon-c/ic-crop.svg +7 -0
  252. package/src/svg/icon-c/ic-delete-all.svg +6 -0
  253. package/src/svg/icon-c/ic-delete.svg +6 -0
  254. package/src/svg/icon-c/ic-draw-free.svg +5 -0
  255. package/src/svg/icon-c/ic-draw-line.svg +5 -0
  256. package/src/svg/icon-c/ic-draw.svg +6 -0
  257. package/src/svg/icon-c/ic-filter.svg +7 -0
  258. package/src/svg/icon-c/ic-flip-reset.svg +7 -0
  259. package/src/svg/icon-c/ic-flip-x.svg +6 -0
  260. package/src/svg/icon-c/ic-flip-y.svg +6 -0
  261. package/src/svg/icon-c/ic-flip.svg +6 -0
  262. package/src/svg/icon-c/ic-history-check.svg +5 -0
  263. package/src/svg/icon-c/ic-history-crop.svg +7 -0
  264. package/src/svg/icon-c/ic-history-delete.svg +9 -0
  265. package/src/svg/icon-c/ic-history-draw.svg +7 -0
  266. package/src/svg/icon-c/ic-history-filter.svg +8 -0
  267. package/src/svg/icon-c/ic-history-flip.svg +6 -0
  268. package/src/svg/icon-c/ic-history-group.svg +9 -0
  269. package/src/svg/icon-c/ic-history-icon.svg +6 -0
  270. package/src/svg/icon-c/ic-history-load.svg +7 -0
  271. package/src/svg/icon-c/ic-history-mask.svg +9 -0
  272. package/src/svg/icon-c/ic-history-resize.svg +12 -0
  273. package/src/svg/icon-c/ic-history-rotate.svg +16 -0
  274. package/src/svg/icon-c/ic-history-shape.svg +7 -0
  275. package/src/svg/icon-c/ic-history-text.svg +8 -0
  276. package/src/svg/icon-c/ic-history.svg +6 -0
  277. package/src/svg/icon-c/ic-icon-arrow-2.svg +5 -0
  278. package/src/svg/icon-c/ic-icon-arrow-3.svg +5 -0
  279. package/src/svg/icon-c/ic-icon-arrow.svg +5 -0
  280. package/src/svg/icon-c/ic-icon-bubble.svg +5 -0
  281. package/src/svg/icon-c/ic-icon-heart.svg +5 -0
  282. package/src/svg/icon-c/ic-icon-load.svg +8 -0
  283. package/src/svg/icon-c/ic-icon-location.svg +8 -0
  284. package/src/svg/icon-c/ic-icon-polygon.svg +5 -0
  285. package/src/svg/icon-c/ic-icon-star-2.svg +5 -0
  286. package/src/svg/icon-c/ic-icon-star.svg +5 -0
  287. package/src/svg/icon-c/ic-icon.svg +5 -0
  288. package/src/svg/icon-c/ic-mask-load.svg +8 -0
  289. package/src/svg/icon-c/ic-mask.svg +6 -0
  290. package/src/svg/icon-c/ic-redo.svg +7 -0
  291. package/src/svg/icon-c/ic-reset.svg +7 -0
  292. package/src/svg/icon-c/ic-resize.svg +13 -0
  293. package/src/svg/icon-c/ic-rotate-clockwise.svg +7 -0
  294. package/src/svg/icon-c/ic-rotate-counterclockwise.svg +7 -0
  295. package/src/svg/icon-c/ic-rotate.svg +7 -0
  296. package/src/svg/icon-c/ic-shape-circle.svg +5 -0
  297. package/src/svg/icon-c/ic-shape-rectangle.svg +5 -0
  298. package/src/svg/icon-c/ic-shape-triangle.svg +5 -0
  299. package/src/svg/icon-c/ic-shape.svg +6 -0
  300. package/src/svg/icon-c/ic-text-align-center.svg +6 -0
  301. package/src/svg/icon-c/ic-text-align-left.svg +6 -0
  302. package/src/svg/icon-c/ic-text-align-right.svg +6 -0
  303. package/src/svg/icon-c/ic-text-bold.svg +7 -0
  304. package/src/svg/icon-c/ic-text-italic.svg +6 -0
  305. package/src/svg/icon-c/ic-text-underline.svg +7 -0
  306. package/src/svg/icon-c/ic-text.svg +7 -0
  307. package/src/svg/icon-c/ic-undo.svg +7 -0
  308. package/src/svg/icon-c/ic-zoom-hand.svg +8 -0
  309. package/src/svg/icon-c/ic-zoom-zoom-in.svg +12 -0
  310. package/src/svg/icon-c/ic-zoom-zoom-out.svg +11 -0
  311. package/src/svg/icon-c/img-bi.svg +5 -0
  312. package/src/svg/icon-d/ic-apply.svg +6 -0
  313. package/src/svg/icon-d/ic-cancel.svg +6 -0
  314. package/src/svg/icon-d/ic-crop.svg +7 -0
  315. package/src/svg/icon-d/ic-delete-all.svg +6 -0
  316. package/src/svg/icon-d/ic-delete.svg +6 -0
  317. package/src/svg/icon-d/ic-draw-free.svg +5 -0
  318. package/src/svg/icon-d/ic-draw-line.svg +5 -0
  319. package/src/svg/icon-d/ic-draw.svg +6 -0
  320. package/src/svg/icon-d/ic-filter.svg +7 -0
  321. package/src/svg/icon-d/ic-flip-reset.svg +7 -0
  322. package/src/svg/icon-d/ic-flip-x.svg +6 -0
  323. package/src/svg/icon-d/ic-flip-y.svg +6 -0
  324. package/src/svg/icon-d/ic-flip.svg +6 -0
  325. package/src/svg/icon-d/ic-history-check.svg +5 -0
  326. package/src/svg/icon-d/ic-history-crop.svg +7 -0
  327. package/src/svg/icon-d/ic-history-delete.svg +9 -0
  328. package/src/svg/icon-d/ic-history-draw.svg +7 -0
  329. package/src/svg/icon-d/ic-history-filter.svg +8 -0
  330. package/src/svg/icon-d/ic-history-flip.svg +6 -0
  331. package/src/svg/icon-d/ic-history-group.svg +9 -0
  332. package/src/svg/icon-d/ic-history-icon.svg +6 -0
  333. package/src/svg/icon-d/ic-history-load.svg +7 -0
  334. package/src/svg/icon-d/ic-history-mask.svg +9 -0
  335. package/src/svg/icon-d/ic-history-resize.svg +12 -0
  336. package/src/svg/icon-d/ic-history-rotate.svg +16 -0
  337. package/src/svg/icon-d/ic-history-shape.svg +7 -0
  338. package/src/svg/icon-d/ic-history-text.svg +8 -0
  339. package/src/svg/icon-d/ic-history.svg +6 -0
  340. package/src/svg/icon-d/ic-icon-arrow-2.svg +5 -0
  341. package/src/svg/icon-d/ic-icon-arrow-3.svg +5 -0
  342. package/src/svg/icon-d/ic-icon-arrow.svg +5 -0
  343. package/src/svg/icon-d/ic-icon-bubble.svg +5 -0
  344. package/src/svg/icon-d/ic-icon-heart.svg +5 -0
  345. package/src/svg/icon-d/ic-icon-load.svg +8 -0
  346. package/src/svg/icon-d/ic-icon-location.svg +8 -0
  347. package/src/svg/icon-d/ic-icon-polygon.svg +5 -0
  348. package/src/svg/icon-d/ic-icon-star-2.svg +5 -0
  349. package/src/svg/icon-d/ic-icon-star.svg +5 -0
  350. package/src/svg/icon-d/ic-icon.svg +5 -0
  351. package/src/svg/icon-d/ic-mask-load.svg +8 -0
  352. package/src/svg/icon-d/ic-mask.svg +6 -0
  353. package/src/svg/icon-d/ic-redo.svg +7 -0
  354. package/src/svg/icon-d/ic-reset.svg +7 -0
  355. package/src/svg/icon-d/ic-resize.svg +13 -0
  356. package/src/svg/icon-d/ic-rotate-clockwise.svg +7 -0
  357. package/src/svg/icon-d/ic-rotate-counterclockwise.svg +7 -0
  358. package/src/svg/icon-d/ic-rotate.svg +7 -0
  359. package/src/svg/icon-d/ic-shape-circle.svg +5 -0
  360. package/src/svg/icon-d/ic-shape-rectangle.svg +5 -0
  361. package/src/svg/icon-d/ic-shape-triangle.svg +5 -0
  362. package/src/svg/icon-d/ic-shape.svg +6 -0
  363. package/src/svg/icon-d/ic-text-align-center.svg +6 -0
  364. package/src/svg/icon-d/ic-text-align-left.svg +6 -0
  365. package/src/svg/icon-d/ic-text-align-right.svg +6 -0
  366. package/src/svg/icon-d/ic-text-bold.svg +7 -0
  367. package/src/svg/icon-d/ic-text-italic.svg +6 -0
  368. package/src/svg/icon-d/ic-text-underline.svg +7 -0
  369. package/src/svg/icon-d/ic-text.svg +7 -0
  370. package/src/svg/icon-d/ic-undo.svg +7 -0
  371. package/src/svg/icon-d/ic-zoom-hand.svg +8 -0
  372. package/src/svg/icon-d/ic-zoom-zoom-in.svg +12 -0
  373. package/src/svg/icon-d/ic-zoom-zoom-out.svg +11 -0
  374. package/src/svg/icon-d/img-bi.svg +5 -0
@@ -0,0 +1,146 @@
1
+ import extend from 'tui-code-snippet/object/extend';
2
+ import Component from '@/interface/component';
3
+ import { componentNames, rejectMessages } from '@/consts';
4
+
5
+ /**
6
+ * Flip
7
+ * @class Flip
8
+ * @param {Graphics} graphics - Graphics instance
9
+ * @extends {Component}
10
+ * @ignore
11
+ */
12
+ class Flip extends Component {
13
+ constructor(graphics) {
14
+ super(componentNames.FLIP, graphics);
15
+ }
16
+
17
+ /**
18
+ * Get current flip settings
19
+ * @returns {{flipX: Boolean, flipY: Boolean}}
20
+ */
21
+ getCurrentSetting() {
22
+ const canvasImage = this.getCanvasImage();
23
+
24
+ return {
25
+ flipX: canvasImage.flipX,
26
+ flipY: canvasImage.flipY,
27
+ };
28
+ }
29
+
30
+ /**
31
+ * Set flipX, flipY
32
+ * @param {{flipX: Boolean, flipY: Boolean}} newSetting - Flip setting
33
+ * @returns {Promise}
34
+ */
35
+ set(newSetting) {
36
+ const setting = this.getCurrentSetting();
37
+ const isChangingFlipX = setting.flipX !== newSetting.flipX;
38
+ const isChangingFlipY = setting.flipY !== newSetting.flipY;
39
+
40
+ if (!isChangingFlipX && !isChangingFlipY) {
41
+ return Promise.reject(rejectMessages.flip);
42
+ }
43
+
44
+ extend(setting, newSetting);
45
+ this.setImageProperties(setting, true);
46
+ this._invertAngle(isChangingFlipX, isChangingFlipY);
47
+ this._flipObjects(isChangingFlipX, isChangingFlipY);
48
+
49
+ return Promise.resolve({
50
+ flipX: setting.flipX,
51
+ flipY: setting.flipY,
52
+ angle: this.getCanvasImage().angle,
53
+ });
54
+ }
55
+
56
+ /**
57
+ * Invert image angle for flip
58
+ * @param {boolean} isChangingFlipX - Change flipX
59
+ * @param {boolean} isChangingFlipY - Change flipY
60
+ */
61
+ _invertAngle(isChangingFlipX, isChangingFlipY) {
62
+ const canvasImage = this.getCanvasImage();
63
+ let { angle } = canvasImage;
64
+
65
+ if (isChangingFlipX) {
66
+ angle *= -1;
67
+ }
68
+ if (isChangingFlipY) {
69
+ angle *= -1;
70
+ }
71
+ canvasImage.rotate(parseFloat(angle)).setCoords(); // parseFloat for -0 to 0
72
+ }
73
+
74
+ /**
75
+ * Flip objects
76
+ * @param {boolean} isChangingFlipX - Change flipX
77
+ * @param {boolean} isChangingFlipY - Change flipY
78
+ * @private
79
+ */
80
+ _flipObjects(isChangingFlipX, isChangingFlipY) {
81
+ const canvas = this.getCanvas();
82
+
83
+ if (isChangingFlipX) {
84
+ canvas.forEachObject((obj) => {
85
+ obj
86
+ .set({
87
+ angle: parseFloat(obj.angle * -1), // parseFloat for -0 to 0
88
+ flipX: !obj.flipX,
89
+ left: canvas.width - obj.left,
90
+ })
91
+ .setCoords();
92
+ });
93
+ }
94
+ if (isChangingFlipY) {
95
+ canvas.forEachObject((obj) => {
96
+ obj
97
+ .set({
98
+ angle: parseFloat(obj.angle * -1), // parseFloat for -0 to 0
99
+ flipY: !obj.flipY,
100
+ top: canvas.height - obj.top,
101
+ })
102
+ .setCoords();
103
+ });
104
+ }
105
+ canvas.renderAll();
106
+ }
107
+
108
+ /**
109
+ * Reset flip settings
110
+ * @returns {Promise}
111
+ */
112
+ reset() {
113
+ return this.set({
114
+ flipX: false,
115
+ flipY: false,
116
+ });
117
+ }
118
+
119
+ /**
120
+ * Flip x
121
+ * @returns {Promise}
122
+ */
123
+ flipX() {
124
+ const current = this.getCurrentSetting();
125
+
126
+ return this.set({
127
+ flipX: !current.flipX,
128
+ flipY: current.flipY,
129
+ });
130
+ }
131
+
132
+ /**
133
+ * Flip y
134
+ * @returns {Promise}
135
+ */
136
+ flipY() {
137
+ const current = this.getCurrentSetting();
138
+
139
+ return this.set({
140
+ flipX: current.flipX,
141
+ flipY: !current.flipY,
142
+ });
143
+ }
144
+ }
145
+
146
+ export default Flip;
@@ -0,0 +1,144 @@
1
+ import { fabric } from 'fabric';
2
+ import Component from '@/interface/component';
3
+ import { componentNames } from '@/consts';
4
+
5
+ /**
6
+ * FreeDrawing
7
+ * @class FreeDrawing
8
+ * @param {Graphics} graphics - Graphics instance
9
+ * @extends {Component}
10
+ * @ignore
11
+ */
12
+ class FreeDrawing extends Component {
13
+ constructor(graphics) {
14
+ super(componentNames.FREE_DRAWING, graphics);
15
+
16
+ /**
17
+ * Brush width
18
+ * @type {number}
19
+ */
20
+ this.width = 12;
21
+
22
+ /**
23
+ * fabric.Color instance for brush color
24
+ * @type {fabric.Color}
25
+ */
26
+ this.oColor = new fabric.Color('rgba(0, 0, 0, 0.5)');
27
+ this._handlers = {
28
+ mousedown: this._onFabricMouseDown.bind(this),
29
+ mousemove: this._onFabricMouseMove.bind(this),
30
+ mouseup: this._onFabricMouseUp.bind(this),
31
+ };
32
+ }
33
+
34
+ /**
35
+ * Start free drawing mode
36
+ * @param {{width: ?number, color: ?string}} [setting] - Brush width & color
37
+ */
38
+ start(setting) {
39
+ console.log(setting);
40
+ if (setting?.masik) {
41
+ this.startMasik();
42
+ } else {
43
+ const canvas = this.getCanvas();
44
+ canvas.isDrawingMode = true;
45
+ this.setBrush(setting);
46
+ }
47
+ }
48
+
49
+ /**
50
+ * Set brush
51
+ * @param {{width: ?number, color: ?string}} [setting] - Brush width & color
52
+ */
53
+ setBrush(setting) {
54
+ const brush = this.getCanvas().freeDrawingBrush;
55
+
56
+ setting = setting || {};
57
+ this.width = setting.width || this.width;
58
+ if (setting.color) {
59
+ this.oColor = new fabric.Color(setting.color);
60
+ }
61
+ brush.width = this.width;
62
+ brush.color = this.oColor.toRgba();
63
+ }
64
+
65
+ /**
66
+ * End free drawing mode
67
+ */
68
+ end() {
69
+ const canvas = this.getCanvas();
70
+ canvas.isDrawingMode = false;
71
+ canvas.selection = true;
72
+ canvas.off('mouse:down', this._handlers.mousedown);
73
+ }
74
+
75
+ /**
76
+ * Set masik
77
+ */
78
+ startMasik() {
79
+ const canvas = this.getCanvas();
80
+ canvas.selection = false;
81
+ canvas.on('mouse:down', this._handlers.mousedown);
82
+ }
83
+
84
+ /**
85
+ * MouseDown event handler on canvas
86
+ * @param {{target: fabric.Object, e: MouseEvent}} fEvent - Fabric event object
87
+ * @private
88
+ */
89
+ _onFabricMouseDown() {
90
+ const canvas = this.getCanvas();
91
+ canvas.on({
92
+ 'mouse:move': this._handlers.mousemove,
93
+ 'mouse:up': this._handlers.mouseup,
94
+ });
95
+ }
96
+
97
+ /**
98
+ * MouseDown event handler on canvas
99
+ * @param {{target: fabric.Object, e: MouseEvent}} fEvent - Fabric event object
100
+ * @private
101
+ */
102
+ _onFabricMouseMove(fEvent) {
103
+ const canvas = this.getCanvas();
104
+ const blockSize = 20;
105
+ const startPoints = canvas.getPointer(fEvent.e);
106
+ const startX = startPoints.x;
107
+ const startY = startPoints.y;
108
+ const ctx = canvas.getContext('2d');
109
+ const imageData = ctx.getImageData(startX, startY, blockSize, blockSize);
110
+ const { data } = imageData;
111
+ let r = 0;
112
+ let g = 0;
113
+ let b = 0;
114
+ for (let i = 0; i < data.length; i += 4) {
115
+ r += data[i];
116
+ g += data[i + 1];
117
+ b += data[i + 2];
118
+ }
119
+ r = Math.floor(r / (blockSize * blockSize));
120
+ g = Math.floor(g / (blockSize * blockSize));
121
+ b = Math.floor(b / (blockSize * blockSize));
122
+ for (let i = 0; i < data.length; i += 4) {
123
+ data[i] = r;
124
+ data[i + 1] = g;
125
+ data[i + 2] = b;
126
+ data[i + 3] = 255; // Alpha值
127
+ }
128
+ ctx.putImageData(imageData, startX, startY);
129
+ }
130
+
131
+ /**
132
+ * MouseUp event handler on canvas
133
+ * @private
134
+ */
135
+ _onFabricMouseUp() {
136
+ const canvas = this.getCanvas();
137
+ canvas.off({
138
+ 'mouse:move': this._handlers.mousemove,
139
+ 'mouse:up': this._handlers.mouseup,
140
+ });
141
+ }
142
+ }
143
+
144
+ export default FreeDrawing;
@@ -0,0 +1,246 @@
1
+ import { fabric } from 'fabric';
2
+ import extend from 'tui-code-snippet/object/extend';
3
+ import forEach from 'tui-code-snippet/collection/forEach';
4
+ import Component from '@/interface/component';
5
+ import { eventNames as events, rejectMessages, componentNames, fObjectOptions } from '@/consts';
6
+
7
+ const pathMap = {
8
+ arrow: 'M 0 90 H 105 V 120 L 160 60 L 105 0 V 30 H 0 Z',
9
+ cancel:
10
+ 'M 0 30 L 30 60 L 0 90 L 30 120 L 60 90 L 90 120 L 120 90 ' +
11
+ 'L 90 60 L 120 30 L 90 0 L 60 30 L 30 0 Z',
12
+ };
13
+
14
+ /**
15
+ * Icon
16
+ * @class Icon
17
+ * @param {Graphics} graphics - Graphics instance
18
+ * @extends {Component}
19
+ * @ignore
20
+ */
21
+ class Icon extends Component {
22
+ constructor(graphics) {
23
+ super(componentNames.ICON, graphics);
24
+
25
+ /**
26
+ * Default icon color
27
+ * @type {string}
28
+ */
29
+ this._oColor = '#000000';
30
+
31
+ /**
32
+ * Path value of each icon type
33
+ * @type {Object}
34
+ */
35
+ this._pathMap = pathMap;
36
+
37
+ /**
38
+ * Type of the drawing icon
39
+ * @type {string}
40
+ * @private
41
+ */
42
+ this._type = null;
43
+
44
+ /**
45
+ * Color of the drawing icon
46
+ * @type {string}
47
+ * @private
48
+ */
49
+ this._iconColor = null;
50
+
51
+ /**
52
+ * Event handler list
53
+ * @type {Object}
54
+ * @private
55
+ */
56
+ this._handlers = {
57
+ mousedown: this._onFabricMouseDown.bind(this),
58
+ mousemove: this._onFabricMouseMove.bind(this),
59
+ mouseup: this._onFabricMouseUp.bind(this),
60
+ };
61
+ }
62
+
63
+ /**
64
+ * Set states of the current drawing shape
65
+ * @ignore
66
+ * @param {string} type - Icon type ('arrow', 'cancel', custom icon name)
67
+ * @param {string} iconColor - Icon foreground color
68
+ */
69
+ setStates(type, iconColor) {
70
+ this._type = type;
71
+ this._iconColor = iconColor;
72
+ }
73
+
74
+ /**
75
+ * Start to draw the icon on canvas
76
+ * @ignore
77
+ */
78
+ start() {
79
+ const canvas = this.getCanvas();
80
+ canvas.selection = false;
81
+ canvas.on('mouse:down', this._handlers.mousedown);
82
+ }
83
+
84
+ /**
85
+ * End to draw the icon on canvas
86
+ * @ignore
87
+ */
88
+ end() {
89
+ const canvas = this.getCanvas();
90
+
91
+ canvas.selection = true;
92
+ canvas.off({
93
+ 'mouse:down': this._handlers.mousedown,
94
+ });
95
+ }
96
+
97
+ /**
98
+ * Add icon
99
+ * @param {string} type - Icon type
100
+ * @param {Object} options - Icon options
101
+ * @param {string} [options.fill] - Icon foreground color
102
+ * @param {string} [options.left] - Icon x position
103
+ * @param {string} [options.top] - Icon y position
104
+ * @returns {Promise}
105
+ */
106
+ add(type, options) {
107
+ return new Promise((resolve, reject) => {
108
+ const canvas = this.getCanvas();
109
+ const path = this._pathMap[type];
110
+ const selectionStyle = fObjectOptions.SELECTION_STYLE;
111
+ const icon = path ? this._createIcon(path) : null;
112
+ this._icon = icon;
113
+
114
+ if (!icon) {
115
+ reject(rejectMessages.invalidParameters);
116
+ }
117
+
118
+ icon.set(
119
+ extend(
120
+ {
121
+ type: 'icon',
122
+ fill: this._oColor,
123
+ },
124
+ selectionStyle,
125
+ options,
126
+ this.graphics.controlStyle
127
+ )
128
+ );
129
+
130
+ canvas.add(icon).setActiveObject(icon);
131
+
132
+ resolve(this.graphics.createObjectProperties(icon));
133
+ });
134
+ }
135
+
136
+ /**
137
+ * Register icon paths
138
+ * @param {{key: string, value: string}} pathInfos - Path infos
139
+ */
140
+ registerPaths(pathInfos) {
141
+ forEach(
142
+ pathInfos,
143
+ (path, type) => {
144
+ this._pathMap[type] = path;
145
+ },
146
+ this
147
+ );
148
+ }
149
+
150
+ /**
151
+ * Set icon object color
152
+ * @param {string} color - Color to set
153
+ * @param {fabric.Path}[obj] - Current activated path object
154
+ */
155
+ setColor(color, obj) {
156
+ this._oColor = color;
157
+
158
+ if (obj && obj.get('type') === 'icon') {
159
+ obj.set({ fill: this._oColor });
160
+ this.getCanvas().renderAll();
161
+ }
162
+ }
163
+
164
+ /**
165
+ * Get icon color
166
+ * @param {fabric.Path}[obj] - Current activated path object
167
+ * @returns {string} color
168
+ */
169
+ getColor(obj) {
170
+ return obj.fill;
171
+ }
172
+
173
+ /**
174
+ * Create icon object
175
+ * @param {string} path - Path value to create icon
176
+ * @returns {fabric.Path} Path object
177
+ */
178
+ _createIcon(path) {
179
+ return new fabric.Path(path);
180
+ }
181
+
182
+ /**
183
+ * MouseDown event handler on canvas
184
+ * @param {{target: fabric.Object, e: MouseEvent}} fEvent - Fabric event object
185
+ * @private
186
+ */
187
+ _onFabricMouseDown(fEvent) {
188
+ const canvas = this.getCanvas();
189
+
190
+ this._startPoint = canvas.getPointer(fEvent.e);
191
+ const { x: left, y: top } = this._startPoint;
192
+
193
+ this.add(this._type, {
194
+ left,
195
+ top,
196
+ fill: this._iconColor,
197
+ }).then(() => {
198
+ this.fire(events.ADD_OBJECT, this.graphics.createObjectProperties(this._icon));
199
+ canvas.on('mouse:move', this._handlers.mousemove);
200
+ canvas.on('mouse:up', this._handlers.mouseup);
201
+ });
202
+ }
203
+
204
+ /**
205
+ * MouseMove event handler on canvas
206
+ * @param {{target: fabric.Object, e: MouseEvent}} fEvent - Fabric event object
207
+ * @private
208
+ */
209
+ _onFabricMouseMove(fEvent) {
210
+ const canvas = this.getCanvas();
211
+
212
+ if (!this._icon) {
213
+ return;
214
+ }
215
+ const moveOriginPointer = canvas.getPointer(fEvent.e);
216
+
217
+ const scaleX = (moveOriginPointer.x - this._startPoint.x) / this._icon.width;
218
+ const scaleY = (moveOriginPointer.y - this._startPoint.y) / this._icon.height;
219
+
220
+ this._icon.set({
221
+ scaleX: Math.abs(scaleX * 2),
222
+ scaleY: Math.abs(scaleY * 2),
223
+ });
224
+
225
+ this._icon.setCoords();
226
+ canvas.renderAll();
227
+ }
228
+
229
+ /**
230
+ * MouseUp event handler on canvas
231
+ * @private
232
+ */
233
+ _onFabricMouseUp() {
234
+ const canvas = this.getCanvas();
235
+
236
+ this.fire(events.OBJECT_ADDED, this.graphics.createObjectProperties(this._icon));
237
+
238
+ this._icon = null;
239
+
240
+ canvas.off('mouse:down', this._handlers.mousedown);
241
+ canvas.off('mouse:move', this._handlers.mousemove);
242
+ canvas.off('mouse:up', this._handlers.mouseup);
243
+ }
244
+ }
245
+
246
+ export default Icon;
@@ -0,0 +1,84 @@
1
+ import Component from '@/interface/component';
2
+ import { componentNames, rejectMessages } from '@/consts';
3
+
4
+ const imageOption = {
5
+ padding: 0,
6
+ crossOrigin: 'Anonymous',
7
+ };
8
+
9
+ /**
10
+ * ImageLoader components
11
+ * @extends {Component}
12
+ * @class ImageLoader
13
+ * @param {Graphics} graphics - Graphics instance
14
+ * @ignore
15
+ */
16
+ class ImageLoader extends Component {
17
+ constructor(graphics) {
18
+ super(componentNames.IMAGE_LOADER, graphics);
19
+ }
20
+
21
+ /**
22
+ * Load image from url
23
+ * @param {?string} imageName - File name
24
+ * @param {?(fabric.Image|string)} img - fabric.Image instance or URL of an image
25
+ * @returns {Promise}
26
+ */
27
+ load(imageName, img) {
28
+ let promise;
29
+
30
+ if (!imageName && !img) {
31
+ // Back to the initial state, not error.
32
+ const canvas = this.getCanvas();
33
+
34
+ canvas.backgroundImage = null;
35
+ canvas.renderAll();
36
+
37
+ promise = new Promise((resolve) => {
38
+ this.setCanvasImage('', null);
39
+ resolve();
40
+ });
41
+ } else {
42
+ promise = this._setBackgroundImage(img).then((oImage) => {
43
+ this.setCanvasImage(imageName, oImage);
44
+ this.adjustCanvasDimension();
45
+
46
+ return oImage;
47
+ });
48
+ }
49
+
50
+ return promise;
51
+ }
52
+
53
+ /**
54
+ * Set background image
55
+ * @param {?(fabric.Image|String)} img fabric.Image instance or URL of an image to set background to
56
+ * @returns {Promise}
57
+ * @private
58
+ */
59
+ _setBackgroundImage(img) {
60
+ if (!img) {
61
+ return Promise.reject(rejectMessages.loadImage);
62
+ }
63
+
64
+ return new Promise((resolve, reject) => {
65
+ const canvas = this.getCanvas();
66
+
67
+ canvas.setBackgroundImage(
68
+ img,
69
+ () => {
70
+ const oImage = canvas.backgroundImage;
71
+
72
+ if (oImage && oImage.getElement()) {
73
+ resolve(oImage);
74
+ } else {
75
+ reject(rejectMessages.loadingImageFailed);
76
+ }
77
+ },
78
+ imageOption
79
+ );
80
+ });
81
+ }
82
+ }
83
+
84
+ export default ImageLoader;