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,42 @@
1
+ import commandFactory from '@/factory/command';
2
+ import { componentNames, commandNames } from '@/consts';
3
+
4
+ const { ICON } = componentNames;
5
+
6
+ const command = {
7
+ name: commandNames.ADD_ICON,
8
+
9
+ /**
10
+ * Add an icon
11
+ * @param {Graphics} graphics - Graphics instance
12
+ * @param {string} type - Icon type ('arrow', 'cancel', custom icon name)
13
+ * @param {Object} options - Icon options
14
+ * @param {string} [options.fill] - Icon foreground color
15
+ * @param {string} [options.left] - Icon x position
16
+ * @param {string} [options.top] - Icon y position
17
+ * @returns {Promise}
18
+ */
19
+ execute(graphics, type, options) {
20
+ const iconComp = graphics.getComponent(ICON);
21
+
22
+ return iconComp.add(type, options).then((objectProps) => {
23
+ this.undoData.object = graphics.getObject(objectProps.id);
24
+
25
+ return objectProps;
26
+ });
27
+ },
28
+
29
+ /**
30
+ * @param {Graphics} graphics - Graphics instance
31
+ * @returns {Promise}
32
+ */
33
+ undo(graphics) {
34
+ graphics.remove(this.undoData.object);
35
+
36
+ return Promise.resolve();
37
+ },
38
+ };
39
+
40
+ commandFactory.register(command);
41
+
42
+ export default command;
@@ -0,0 +1,34 @@
1
+ import commandFactory from '@/factory/command';
2
+ import { commandNames } from '@/consts';
3
+
4
+ const command = {
5
+ name: commandNames.ADD_IMAGE_OBJECT,
6
+
7
+ /**
8
+ * Add an image object
9
+ * @param {Graphics} graphics - Graphics instance
10
+ * @param {string} imgUrl - Image url to make object
11
+ * @returns {Promise}
12
+ */
13
+ execute(graphics, imgUrl) {
14
+ return graphics.addImageObject(imgUrl).then((objectProps) => {
15
+ this.undoData.object = graphics.getObject(objectProps.id);
16
+
17
+ return objectProps;
18
+ });
19
+ },
20
+
21
+ /**
22
+ * @param {Graphics} graphics - Graphics instance
23
+ * @returns {Promise}
24
+ */
25
+ undo(graphics) {
26
+ graphics.remove(this.undoData.object);
27
+
28
+ return Promise.resolve();
29
+ },
30
+ };
31
+
32
+ commandFactory.register(command);
33
+
34
+ export default command;
@@ -0,0 +1,43 @@
1
+ import commandFactory from '@/factory/command';
2
+ import { commandNames, rejectMessages } from '@/consts';
3
+
4
+ const command = {
5
+ name: commandNames.ADD_OBJECT,
6
+
7
+ /**
8
+ * Add an object
9
+ * @param {Graphics} graphics - Graphics instance
10
+ * @param {Object} object - Fabric object
11
+ * @returns {Promise}
12
+ */
13
+ execute(graphics, object) {
14
+ return new Promise((resolve, reject) => {
15
+ if (!graphics.contains(object)) {
16
+ graphics.add(object);
17
+ resolve(object);
18
+ } else {
19
+ reject(rejectMessages.addedObject);
20
+ }
21
+ });
22
+ },
23
+
24
+ /**
25
+ * @param {Graphics} graphics - Graphics instance
26
+ * @param {Object} object - Fabric object
27
+ * @returns {Promise}
28
+ */
29
+ undo(graphics, object) {
30
+ return new Promise((resolve, reject) => {
31
+ if (graphics.contains(object)) {
32
+ graphics.remove(object);
33
+ resolve(object);
34
+ } else {
35
+ reject(rejectMessages.noObject);
36
+ }
37
+ });
38
+ },
39
+ };
40
+
41
+ commandFactory.register(command);
42
+
43
+ export default command;
@@ -0,0 +1,51 @@
1
+ import commandFactory from '@/factory/command';
2
+ import { componentNames, commandNames } from '@/consts';
3
+
4
+ const { SHAPE } = componentNames;
5
+
6
+ const command = {
7
+ name: commandNames.ADD_SHAPE,
8
+
9
+ /**
10
+ * Add a shape
11
+ * @param {Graphics} graphics - Graphics instance
12
+ * @param {string} type - Shape type (ex: 'rect', 'circle', 'triangle')
13
+ * @param {Object} options - Shape options
14
+ * @param {string} [options.fill] - Shape foreground color (ex: '#fff', 'transparent')
15
+ * @param {string} [options.stroke] - Shape outline color
16
+ * @param {number} [options.strokeWidth] - Shape outline width
17
+ * @param {number} [options.width] - Width value (When type option is 'rect', this options can use)
18
+ * @param {number} [options.height] - Height value (When type option is 'rect', this options can use)
19
+ * @param {number} [options.rx] - Radius x value (When type option is 'circle', this options can use)
20
+ * @param {number} [options.ry] - Radius y value (When type option is 'circle', this options can use)
21
+ * @param {number} [options.left] - Shape x position
22
+ * @param {number} [options.top] - Shape y position
23
+ * @param {number} [options.isRegular] - Whether resizing shape has 1:1 ratio or not
24
+ * @returns {Promise}
25
+ */
26
+ execute(graphics, type, options) {
27
+ const shapeComp = graphics.getComponent(SHAPE);
28
+
29
+ return shapeComp.add(type, options).then((objectProps) => {
30
+ const { id } = objectProps;
31
+
32
+ this.undoData.object = graphics.getObject(id);
33
+
34
+ return objectProps;
35
+ });
36
+ },
37
+
38
+ /**
39
+ * @param {Graphics} graphics - Graphics instance
40
+ * @returns {Promise}
41
+ */
42
+ undo(graphics) {
43
+ graphics.remove(this.undoData.object);
44
+
45
+ return Promise.resolve();
46
+ },
47
+ };
48
+
49
+ commandFactory.register(command);
50
+
51
+ export default command;
@@ -0,0 +1,73 @@
1
+ import commandFactory from '@/factory/command';
2
+ import { componentNames, commandNames, rejectMessages } from '@/consts';
3
+ import {
4
+ setCachedUndoDataForDimension,
5
+ makeSelectionUndoData,
6
+ makeSelectionUndoDatum,
7
+ } from '@/helper/selectionModifyHelper';
8
+
9
+ const { TEXT } = componentNames;
10
+
11
+ const command = {
12
+ name: commandNames.ADD_TEXT,
13
+
14
+ /**
15
+ * Add a text object
16
+ * @param {Graphics} graphics - Graphics instance
17
+ * @param {string} text - Initial input text
18
+ * @param {Object} [options] Options for text styles
19
+ * @param {Object} [options.styles] Initial styles
20
+ * @param {string} [options.styles.fill] Color
21
+ * @param {string} [options.styles.fontFamily] Font type for text
22
+ * @param {number} [options.styles.fontSize] Size
23
+ * @param {string} [options.styles.fontStyle] Type of inclination (normal / italic)
24
+ * @param {string} [options.styles.fontWeight] Type of thicker or thinner looking (normal / bold)
25
+ * @param {string} [options.styles.textAlign] Type of text align (left / center / right)
26
+ * @param {string} [options.styles.textDecoration] Type of line (underline / line-through / overline)
27
+ * @param {{x: number, y: number}} [options.position] - Initial position
28
+ * @returns {Promise}
29
+ */
30
+ execute(graphics, text, options) {
31
+ const textComp = graphics.getComponent(TEXT);
32
+
33
+ if (this.undoData.object) {
34
+ const undoObject = this.undoData.object;
35
+
36
+ return new Promise((resolve, reject) => {
37
+ if (!graphics.contains(undoObject)) {
38
+ graphics.add(undoObject);
39
+ resolve(undoObject);
40
+ } else {
41
+ reject(rejectMessages.redo);
42
+ }
43
+ });
44
+ }
45
+
46
+ return textComp.add(text, options).then((objectProps) => {
47
+ const { id } = objectProps;
48
+ const textObject = graphics.getObject(id);
49
+
50
+ this.undoData.object = textObject;
51
+
52
+ setCachedUndoDataForDimension(
53
+ makeSelectionUndoData(textObject, () => makeSelectionUndoDatum(id, textObject, false))
54
+ );
55
+
56
+ return objectProps;
57
+ });
58
+ },
59
+
60
+ /**
61
+ * @param {Graphics} graphics - Graphics instance
62
+ * @returns {Promise}
63
+ */
64
+ undo(graphics) {
65
+ graphics.remove(this.undoData.object);
66
+
67
+ return Promise.resolve();
68
+ },
69
+ };
70
+
71
+ commandFactory.register(command);
72
+
73
+ export default command;
@@ -0,0 +1,95 @@
1
+ import extend from 'tui-code-snippet/object/extend';
2
+ import commandFactory from '@/factory/command';
3
+ import { componentNames, rejectMessages, commandNames } from '@/consts';
4
+
5
+ const { FILTER } = componentNames;
6
+
7
+ /**
8
+ * Cached data for undo
9
+ * @type {Object}
10
+ */
11
+ let cachedUndoDataForSilent = null;
12
+
13
+ /**
14
+ * Make undoData
15
+ * @param {string} type - Filter type
16
+ * @param {Object} prevfilterOption - prev Filter options
17
+ * @param {Object} options - Filter options
18
+ * @returns {object} - undo data
19
+ */
20
+ function makeUndoData(type, prevfilterOption, options) {
21
+ const undoData = {};
22
+
23
+ if (type === 'mask') {
24
+ undoData.object = options.mask;
25
+ }
26
+
27
+ undoData.options = prevfilterOption;
28
+
29
+ return undoData;
30
+ }
31
+
32
+ const command = {
33
+ name: commandNames.APPLY_FILTER,
34
+
35
+ /**
36
+ * Apply a filter into an image
37
+ * @param {Graphics} graphics - Graphics instance
38
+ * @param {string} type - Filter type
39
+ * @param {Object} options - Filter options
40
+ * @param {number} options.maskObjId - masking image object id
41
+ * @param {boolean} isSilent - is silent execution or not
42
+ * @returns {Promise}
43
+ */
44
+ execute(graphics, type, options, isSilent) {
45
+ const filterComp = graphics.getComponent(FILTER);
46
+
47
+ if (type === 'mask') {
48
+ const maskObj = graphics.getObject(options.maskObjId);
49
+
50
+ if (!(maskObj && maskObj.isType('image'))) {
51
+ return Promise.reject(rejectMessages.invalidParameters);
52
+ }
53
+
54
+ extend(options, { mask: maskObj });
55
+ graphics.remove(options.mask);
56
+ }
57
+ if (!this.isRedo) {
58
+ const prevfilterOption = filterComp.getOptions(type);
59
+ const undoData = makeUndoData(type, prevfilterOption, options);
60
+
61
+ cachedUndoDataForSilent = this.setUndoData(undoData, cachedUndoDataForSilent, isSilent);
62
+ }
63
+
64
+ return filterComp.add(type, options);
65
+ },
66
+
67
+ /**
68
+ * @param {Graphics} graphics - Graphics instance
69
+ * @param {string} type - Filter type
70
+ * @returns {Promise}
71
+ */
72
+ undo(graphics, type) {
73
+ const filterComp = graphics.getComponent(FILTER);
74
+
75
+ if (type === 'mask') {
76
+ const mask = this.undoData.object;
77
+ graphics.add(mask);
78
+ graphics.setActiveObject(mask);
79
+
80
+ return filterComp.remove(type);
81
+ }
82
+
83
+ // options changed case
84
+ if (this.undoData.options) {
85
+ return filterComp.add(type, this.undoData.options);
86
+ }
87
+
88
+ // filter added case
89
+ return filterComp.remove(type);
90
+ },
91
+ };
92
+
93
+ commandFactory.register(command);
94
+
95
+ export default command;
@@ -0,0 +1,48 @@
1
+ import commandFactory from '@/factory/command';
2
+ import { componentNames, rejectMessages, commandNames } from '@/consts';
3
+
4
+ const { ICON } = componentNames;
5
+
6
+ const command = {
7
+ name: commandNames.CHANGE_ICON_COLOR,
8
+
9
+ /**
10
+ * Change icon color
11
+ * @param {Graphics} graphics - Graphics instance
12
+ * @param {number} id - object id
13
+ * @param {string} color - Color for icon
14
+ * @returns {Promise}
15
+ */
16
+ execute(graphics, id, color) {
17
+ return new Promise((resolve, reject) => {
18
+ const iconComp = graphics.getComponent(ICON);
19
+ const targetObj = graphics.getObject(id);
20
+
21
+ if (!targetObj) {
22
+ reject(rejectMessages.noObject);
23
+ }
24
+
25
+ this.undoData.object = targetObj;
26
+ this.undoData.color = iconComp.getColor(targetObj);
27
+ iconComp.setColor(color, targetObj);
28
+ resolve();
29
+ });
30
+ },
31
+
32
+ /**
33
+ * @param {Graphics} graphics - Graphics instance
34
+ * @returns {Promise}
35
+ */
36
+ undo(graphics) {
37
+ const iconComp = graphics.getComponent(ICON);
38
+ const { object: icon, color } = this.undoData;
39
+
40
+ iconComp.setColor(color, icon);
41
+
42
+ return Promise.resolve();
43
+ },
44
+ };
45
+
46
+ commandFactory.register(command);
47
+
48
+ export default command;
@@ -0,0 +1,31 @@
1
+ import commandFactory from '@/factory/command';
2
+ import { commandNames } from '@/consts';
3
+ import { getCachedUndoDataForDimension } from '@/helper/selectionModifyHelper';
4
+
5
+ const command = {
6
+ name: commandNames.CHANGE_SELECTION,
7
+
8
+ execute(graphics, props) {
9
+ if (this.isRedo) {
10
+ props.forEach((prop) => {
11
+ graphics.setObjectProperties(prop.id, prop);
12
+ });
13
+ } else {
14
+ this.undoData = getCachedUndoDataForDimension();
15
+ }
16
+
17
+ return Promise.resolve();
18
+ },
19
+
20
+ undo(graphics) {
21
+ this.undoData.forEach((datum) => {
22
+ graphics.setObjectProperties(datum.id, datum);
23
+ });
24
+
25
+ return Promise.resolve();
26
+ },
27
+ };
28
+
29
+ commandFactory.register(command);
30
+
31
+ export default command;
@@ -0,0 +1,84 @@
1
+ import forEachOwnProperties from 'tui-code-snippet/collection/forEachOwnProperties';
2
+ import commandFactory from '@/factory/command';
3
+ import { componentNames, rejectMessages, commandNames } from '@/consts';
4
+
5
+ const { SHAPE } = componentNames;
6
+
7
+ /**
8
+ * Cached data for undo
9
+ * @type {Object}
10
+ */
11
+ let cachedUndoDataForSilent = null;
12
+
13
+ /**
14
+ * Make undoData
15
+ * @param {object} options - shape options
16
+ * @param {Component} targetObj - shape component
17
+ * @returns {object} - undo data
18
+ */
19
+ function makeUndoData(options, targetObj) {
20
+ const undoData = {
21
+ object: targetObj,
22
+ options: {},
23
+ };
24
+
25
+ forEachOwnProperties(options, (value, key) => {
26
+ undoData.options[key] = targetObj[key];
27
+ });
28
+
29
+ return undoData;
30
+ }
31
+
32
+ const command = {
33
+ name: commandNames.CHANGE_SHAPE,
34
+
35
+ /**
36
+ * Change a shape
37
+ * @param {Graphics} graphics - Graphics instance
38
+ * @param {number} id - object id
39
+ * @param {Object} options - Shape options
40
+ * @param {string} [options.fill] - Shape foreground color (ex: '#fff', 'transparent')
41
+ * @param {string} [options.stroke] - Shape outline color
42
+ * @param {number} [options.strokeWidth] - Shape outline width
43
+ * @param {number} [options.width] - Width value (When type option is 'rect', this options can use)
44
+ * @param {number} [options.height] - Height value (When type option is 'rect', this options can use)
45
+ * @param {number} [options.rx] - Radius x value (When type option is 'circle', this options can use)
46
+ * @param {number} [options.ry] - Radius y value (When type option is 'circle', this options can use)
47
+ * @param {number} [options.left] - Shape x position
48
+ * @param {number} [options.top] - Shape y position
49
+ * @param {number} [options.isRegular] - Whether resizing shape has 1:1 ratio or not
50
+ * @param {boolean} isSilent - is silent execution or not
51
+ * @returns {Promise}
52
+ */
53
+ execute(graphics, id, options, isSilent) {
54
+ const shapeComp = graphics.getComponent(SHAPE);
55
+ const targetObj = graphics.getObject(id);
56
+
57
+ if (!targetObj) {
58
+ return Promise.reject(rejectMessages.noObject);
59
+ }
60
+
61
+ if (!this.isRedo) {
62
+ const undoData = makeUndoData(options, targetObj);
63
+
64
+ cachedUndoDataForSilent = this.setUndoData(undoData, cachedUndoDataForSilent, isSilent);
65
+ }
66
+
67
+ return shapeComp.change(targetObj, options);
68
+ },
69
+
70
+ /**
71
+ * @param {Graphics} graphics - Graphics instance
72
+ * @returns {Promise}
73
+ */
74
+ undo(graphics) {
75
+ const shapeComp = graphics.getComponent(SHAPE);
76
+ const { object: shape, options } = this.undoData;
77
+
78
+ return shapeComp.change(shape, options);
79
+ },
80
+ };
81
+
82
+ commandFactory.register(command);
83
+
84
+ export default command;
@@ -0,0 +1,44 @@
1
+ import commandFactory from '@/factory/command';
2
+ import { componentNames, rejectMessages, commandNames } from '@/consts';
3
+
4
+ const { TEXT } = componentNames;
5
+
6
+ const command = {
7
+ name: commandNames.CHANGE_TEXT,
8
+
9
+ /**
10
+ * Change a text
11
+ * @param {Graphics} graphics - Graphics instance
12
+ * @param {number} id - object id
13
+ * @param {string} text - Changing text
14
+ * @returns {Promise}
15
+ */
16
+ execute(graphics, id, text) {
17
+ const textComp = graphics.getComponent(TEXT);
18
+ const targetObj = graphics.getObject(id);
19
+
20
+ if (!targetObj) {
21
+ return Promise.reject(rejectMessages.noObject);
22
+ }
23
+
24
+ this.undoData.object = targetObj;
25
+ this.undoData.text = textComp.getText(targetObj);
26
+
27
+ return textComp.change(targetObj, text);
28
+ },
29
+
30
+ /**
31
+ * @param {Graphics} graphics - Graphics instance
32
+ * @returns {Promise}
33
+ */
34
+ undo(graphics) {
35
+ const textComp = graphics.getComponent(TEXT);
36
+ const { object: textObj, text } = this.undoData;
37
+
38
+ return textComp.change(textObj, text);
39
+ },
40
+ };
41
+
42
+ commandFactory.register(command);
43
+
44
+ export default command;
@@ -0,0 +1,80 @@
1
+ import forEachOwnProperties from 'tui-code-snippet/collection/forEachOwnProperties';
2
+ import commandFactory from '@/factory/command';
3
+ import { componentNames, rejectMessages, commandNames } from '@/consts';
4
+
5
+ const { TEXT } = componentNames;
6
+
7
+ /**
8
+ * Cached data for undo
9
+ * @type {Object}
10
+ */
11
+ let cachedUndoDataForSilent = null;
12
+
13
+ /**
14
+ * Make undoData
15
+ * @param {object} styles - text styles
16
+ * @param {Component} targetObj - text component
17
+ * @returns {object} - undo data
18
+ */
19
+ function makeUndoData(styles, targetObj) {
20
+ const undoData = {
21
+ object: targetObj,
22
+ styles: {},
23
+ };
24
+ forEachOwnProperties(styles, (value, key) => {
25
+ const undoValue = targetObj[key];
26
+ undoData.styles[key] = undoValue;
27
+ });
28
+
29
+ return undoData;
30
+ }
31
+
32
+ const command = {
33
+ name: commandNames.CHANGE_TEXT_STYLE,
34
+
35
+ /**
36
+ * Change text styles
37
+ * @param {Graphics} graphics - Graphics instance
38
+ * @param {number} id - object id
39
+ * @param {Object} styles - text styles
40
+ * @param {string} [styles.fill] Color
41
+ * @param {string} [styles.fontFamily] Font type for text
42
+ * @param {number} [styles.fontSize] Size
43
+ * @param {string} [styles.fontStyle] Type of inclination (normal / italic)
44
+ * @param {string} [styles.fontWeight] Type of thicker or thinner looking (normal / bold)
45
+ * @param {string} [styles.textAlign] Type of text align (left / center / right)
46
+ * @param {string} [styles.textDecoration] Type of line (underline / line-through / overline)
47
+ * @param {boolean} isSilent - is silent execution or not
48
+ * @returns {Promise}
49
+ */
50
+ execute(graphics, id, styles, isSilent) {
51
+ const textComp = graphics.getComponent(TEXT);
52
+ const targetObj = graphics.getObject(id);
53
+
54
+ if (!targetObj) {
55
+ return Promise.reject(rejectMessages.noObject);
56
+ }
57
+ if (!this.isRedo) {
58
+ const undoData = makeUndoData(styles, targetObj);
59
+
60
+ cachedUndoDataForSilent = this.setUndoData(undoData, cachedUndoDataForSilent, isSilent);
61
+ }
62
+
63
+ return textComp.setStyle(targetObj, styles);
64
+ },
65
+
66
+ /**
67
+ * @param {Graphics} graphics - Graphics instance
68
+ * @returns {Promise}
69
+ */
70
+ undo(graphics) {
71
+ const textComp = graphics.getComponent(TEXT);
72
+ const { object: textObj, styles } = this.undoData;
73
+
74
+ return textComp.setStyle(textObj, styles);
75
+ },
76
+ };
77
+
78
+ commandFactory.register(command);
79
+
80
+ export default command;
@@ -0,0 +1,33 @@
1
+ import commandFactory from '@/factory/command';
2
+ import { commandNames } from '@/consts';
3
+
4
+ const command = {
5
+ name: commandNames.CLEAR_OBJECTS,
6
+
7
+ /**
8
+ * Clear all objects without background (main) image
9
+ * @param {Graphics} graphics - Graphics instance
10
+ * @returns {Promise}
11
+ */
12
+ execute(graphics) {
13
+ return new Promise((resolve) => {
14
+ this.undoData.objects = graphics.removeAll();
15
+ resolve();
16
+ });
17
+ },
18
+
19
+ /**
20
+ * @param {Graphics} graphics - Graphics instance
21
+ * @returns {Promise}
22
+ * @ignore
23
+ */
24
+ undo(graphics) {
25
+ graphics.add(this.undoData.objects);
26
+
27
+ return Promise.resolve();
28
+ },
29
+ };
30
+
31
+ commandFactory.register(command);
32
+
33
+ export default command;
@@ -0,0 +1,36 @@
1
+ import commandFactory from '@/factory/command';
2
+ import { componentNames, commandNames } from '@/consts';
3
+
4
+ const { FLIP } = componentNames;
5
+
6
+ const command = {
7
+ name: commandNames.FLIP_IMAGE,
8
+
9
+ /**
10
+ * flip an image
11
+ * @param {Graphics} graphics - Graphics instance
12
+ * @param {string} type - 'flipX' or 'flipY' or 'reset'
13
+ * @returns {Promise}
14
+ */
15
+ execute(graphics, type) {
16
+ const flipComp = graphics.getComponent(FLIP);
17
+
18
+ this.undoData.setting = flipComp.getCurrentSetting();
19
+
20
+ return flipComp[type]();
21
+ },
22
+
23
+ /**
24
+ * @param {Graphics} graphics - Graphics instance
25
+ * @returns {Promise}
26
+ */
27
+ undo(graphics) {
28
+ const flipComp = graphics.getComponent(FLIP);
29
+
30
+ return flipComp.set(this.undoData.setting);
31
+ },
32
+ };
33
+
34
+ commandFactory.register(command);
35
+
36
+ export default command;