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,498 @@
1
+ /* eslint-disable */
2
+
3
+ // https://developer.mozilla.org/en-US/docs/Web/API/Element/closest
4
+ if (!Element.prototype.matches) {
5
+ Element.prototype.matches =
6
+ Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;
7
+ }
8
+
9
+ if (!Element.prototype.closest) {
10
+ Element.prototype.closest = function (s) {
11
+ var el = this;
12
+
13
+ do {
14
+ if (Element.prototype.matches.call(el, s)) return el;
15
+ el = el.parentElement || el.parentNode;
16
+ } while (el !== null && el.nodeType === 1);
17
+ return null;
18
+ };
19
+ }
20
+
21
+ /*
22
+ * classList.js: Cross-browser full element.classList implementation.
23
+ * 1.2.20171210
24
+ *
25
+ * By Eli Grey, http://eligrey.com
26
+ * License: Dedicated to the public domain.
27
+ * See https://github.com/eligrey/classList.js/blob/master/LICENSE.md
28
+ */
29
+
30
+ /*global self, document, DOMException */
31
+
32
+ /*! @source http://purl.eligrey.com/github/classList.js/blob/master/classList.js */
33
+
34
+ if ('document' in self) {
35
+ // Full polyfill for browsers with no classList support
36
+ // Including IE < Edge missing SVGElement.classList
37
+ if (
38
+ !('classList' in document.createElement('_')) ||
39
+ (document.createElementNS &&
40
+ !('classList' in document.createElementNS('http://www.w3.org/2000/svg', 'g')))
41
+ ) {
42
+ (function (view) {
43
+ 'use strict';
44
+
45
+ if (!('Element' in view)) return;
46
+
47
+ var classListProp = 'classList',
48
+ protoProp = 'prototype',
49
+ elemCtrProto = view.Element[protoProp],
50
+ objCtr = Object,
51
+ strTrim =
52
+ String[protoProp].trim ||
53
+ function () {
54
+ return this.replace(/^\s+|\s+$/g, '');
55
+ },
56
+ arrIndexOf =
57
+ Array[protoProp].indexOf ||
58
+ function (item) {
59
+ var i = 0,
60
+ len = this.length;
61
+ for (; i < len; i++) {
62
+ if (i in this && this[i] === item) {
63
+ return i;
64
+ }
65
+ }
66
+ return -1;
67
+ },
68
+ // Vendors: please allow content code to instantiate DOMExceptions
69
+ DOMEx = function (type, message) {
70
+ this.name = type;
71
+ this.code = DOMException[type];
72
+ this.message = message;
73
+ },
74
+ checkTokenAndGetIndex = function (classList, token) {
75
+ if (token === '') {
76
+ throw new DOMEx('SYNTAX_ERR', 'The token must not be empty.');
77
+ }
78
+ if (/\s/.test(token)) {
79
+ throw new DOMEx(
80
+ 'INVALID_CHARACTER_ERR',
81
+ 'The token must not contain space characters.'
82
+ );
83
+ }
84
+ return arrIndexOf.call(classList, token);
85
+ },
86
+ ClassList = function (elem) {
87
+ var trimmedClasses = strTrim.call(elem.getAttribute('class') || ''),
88
+ classes = trimmedClasses ? trimmedClasses.split(/\s+/) : [],
89
+ i = 0,
90
+ len = classes.length;
91
+ for (; i < len; i++) {
92
+ this.push(classes[i]);
93
+ }
94
+ this._updateClassName = function () {
95
+ elem.setAttribute('class', this.toString());
96
+ };
97
+ },
98
+ classListProto = (ClassList[protoProp] = []),
99
+ classListGetter = function () {
100
+ return new ClassList(this);
101
+ };
102
+ // Most DOMException implementations don't allow calling DOMException's toString()
103
+ // on non-DOMExceptions. Error's toString() is sufficient here.
104
+ DOMEx[protoProp] = Error[protoProp];
105
+ classListProto.item = function (i) {
106
+ return this[i] || null;
107
+ };
108
+ classListProto.contains = function (token) {
109
+ return ~checkTokenAndGetIndex(this, token + '');
110
+ };
111
+ classListProto.add = function () {
112
+ var tokens = arguments,
113
+ i = 0,
114
+ l = tokens.length,
115
+ token,
116
+ updated = false;
117
+ do {
118
+ token = tokens[i] + '';
119
+ if (!~checkTokenAndGetIndex(this, token)) {
120
+ this.push(token);
121
+ updated = true;
122
+ }
123
+ } while (++i < l);
124
+
125
+ if (updated) {
126
+ this._updateClassName();
127
+ }
128
+ };
129
+ classListProto.remove = function () {
130
+ var tokens = arguments,
131
+ i = 0,
132
+ l = tokens.length,
133
+ token,
134
+ updated = false,
135
+ index;
136
+ do {
137
+ token = tokens[i] + '';
138
+ index = checkTokenAndGetIndex(this, token);
139
+ while (~index) {
140
+ this.splice(index, 1);
141
+ updated = true;
142
+ index = checkTokenAndGetIndex(this, token);
143
+ }
144
+ } while (++i < l);
145
+
146
+ if (updated) {
147
+ this._updateClassName();
148
+ }
149
+ };
150
+ classListProto.toggle = function (token, force) {
151
+ var result = this.contains(token),
152
+ method = result ? force !== true && 'remove' : force !== false && 'add';
153
+ if (method) {
154
+ this[method](token);
155
+ }
156
+
157
+ if (force === true || force === false) {
158
+ return force;
159
+ } else {
160
+ return !result;
161
+ }
162
+ };
163
+ classListProto.replace = function (token, replacement_token) {
164
+ var index = checkTokenAndGetIndex(token + '');
165
+ if (~index) {
166
+ this.splice(index, 1, replacement_token);
167
+ this._updateClassName();
168
+ }
169
+ };
170
+ classListProto.toString = function () {
171
+ return this.join(' ');
172
+ };
173
+
174
+ if (objCtr.defineProperty) {
175
+ var classListPropDesc = {
176
+ get: classListGetter,
177
+ enumerable: true,
178
+ configurable: true,
179
+ };
180
+ try {
181
+ objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);
182
+ } catch (ex) {
183
+ // IE 8 doesn't support enumerable:true
184
+ // adding undefined to fight this issue https://github.com/eligrey/classList.js/issues/36
185
+ // modernie IE8-MSW7 machine has IE8 8.0.6001.18702 and is affected
186
+ if (ex.number === undefined || ex.number === -0x7ff5ec54) {
187
+ classListPropDesc.enumerable = false;
188
+ objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);
189
+ }
190
+ }
191
+ } else if (objCtr[protoProp].__defineGetter__) {
192
+ elemCtrProto.__defineGetter__(classListProp, classListGetter);
193
+ }
194
+ })(self);
195
+ }
196
+
197
+ // There is full or partial native classList support, so just check if we need
198
+ // to normalize the add/remove and toggle APIs.
199
+
200
+ (function () {
201
+ 'use strict';
202
+
203
+ var testElement = document.createElement('_');
204
+
205
+ testElement.classList.add('c1', 'c2');
206
+
207
+ // Polyfill for IE 10/11 and Firefox <26, where classList.add and
208
+ // classList.remove exist but support only one argument at a time.
209
+ if (!testElement.classList.contains('c2')) {
210
+ var createMethod = function (method) {
211
+ var original = DOMTokenList.prototype[method];
212
+
213
+ DOMTokenList.prototype[method] = function (token) {
214
+ var i,
215
+ len = arguments.length;
216
+
217
+ for (i = 0; i < len; i++) {
218
+ token = arguments[i];
219
+ original.call(this, token);
220
+ }
221
+ };
222
+ };
223
+ createMethod('add');
224
+ createMethod('remove');
225
+ }
226
+
227
+ testElement.classList.toggle('c3', false);
228
+
229
+ // Polyfill for IE 10 and Firefox <24, where classList.toggle does not
230
+ // support the second argument.
231
+ if (testElement.classList.contains('c3')) {
232
+ var _toggle = DOMTokenList.prototype.toggle;
233
+
234
+ DOMTokenList.prototype.toggle = function (token, force) {
235
+ if (1 in arguments && !this.contains(token) === !force) {
236
+ return force;
237
+ } else {
238
+ return _toggle.call(this, token);
239
+ }
240
+ };
241
+ }
242
+
243
+ // replace() polyfill
244
+ if (!('replace' in document.createElement('_').classList)) {
245
+ DOMTokenList.prototype.replace = function (token, replacement_token) {
246
+ var tokens = this.toString().split(' '),
247
+ index = tokens.indexOf(token + '');
248
+ if (~index) {
249
+ tokens = tokens.slice(index);
250
+ this.remove.apply(this, tokens);
251
+ this.add(replacement_token);
252
+ this.add.apply(this, tokens.slice(1));
253
+ }
254
+ };
255
+ }
256
+
257
+ testElement = null;
258
+ })();
259
+ }
260
+
261
+ /*!
262
+ * @copyright Copyright (c) 2017 IcoMoon.io
263
+ * @license Licensed under MIT license
264
+ * See https://github.com/Keyamoon/svgxuse
265
+ * @version 1.2.6
266
+ */
267
+ /*jslint browser: true */
268
+ /*global XDomainRequest, MutationObserver, window */
269
+ (function () {
270
+ 'use strict';
271
+ if (typeof window !== 'undefined' && window.addEventListener) {
272
+ var cache = Object.create(null); // holds xhr objects to prevent multiple requests
273
+ var checkUseElems;
274
+ var tid; // timeout id
275
+ var debouncedCheck = function () {
276
+ clearTimeout(tid);
277
+ tid = setTimeout(checkUseElems, 100);
278
+ };
279
+ var unobserveChanges = function () {
280
+ return;
281
+ };
282
+ var observeChanges = function () {
283
+ var observer;
284
+ window.addEventListener('resize', debouncedCheck, false);
285
+ window.addEventListener('orientationchange', debouncedCheck, false);
286
+ if (window.MutationObserver) {
287
+ observer = new MutationObserver(debouncedCheck);
288
+ observer.observe(document.documentElement, {
289
+ childList: true,
290
+ subtree: true,
291
+ attributes: true,
292
+ });
293
+ unobserveChanges = function () {
294
+ try {
295
+ observer.disconnect();
296
+ window.removeEventListener('resize', debouncedCheck, false);
297
+ window.removeEventListener('orientationchange', debouncedCheck, false);
298
+ } catch (ignore) {}
299
+ };
300
+ } else {
301
+ document.documentElement.addEventListener('DOMSubtreeModified', debouncedCheck, false);
302
+ unobserveChanges = function () {
303
+ document.documentElement.removeEventListener('DOMSubtreeModified', debouncedCheck, false);
304
+ window.removeEventListener('resize', debouncedCheck, false);
305
+ window.removeEventListener('orientationchange', debouncedCheck, false);
306
+ };
307
+ }
308
+ };
309
+ var createRequest = function (url) {
310
+ // In IE 9, cross origin requests can only be sent using XDomainRequest.
311
+ // XDomainRequest would fail if CORS headers are not set.
312
+ // Therefore, XDomainRequest should only be used with cross origin requests.
313
+ function getOrigin(loc) {
314
+ var a;
315
+ if (loc.protocol !== undefined) {
316
+ a = loc;
317
+ } else {
318
+ a = document.createElement('a');
319
+ a.href = loc;
320
+ }
321
+ return a.protocol.replace(/:/g, '') + a.host;
322
+ }
323
+ var Request;
324
+ var origin;
325
+ var origin2;
326
+ if (window.XMLHttpRequest) {
327
+ Request = new XMLHttpRequest();
328
+ origin = getOrigin(location);
329
+ origin2 = getOrigin(url);
330
+ if (Request.withCredentials === undefined && origin2 !== '' && origin2 !== origin) {
331
+ Request = XDomainRequest || undefined;
332
+ } else {
333
+ Request = XMLHttpRequest;
334
+ }
335
+ }
336
+ return Request;
337
+ };
338
+ var xlinkNS = 'http://www.w3.org/1999/xlink';
339
+ checkUseElems = function () {
340
+ var base;
341
+ var bcr;
342
+ var fallback = ''; // optional fallback URL in case no base path to SVG file was given and no symbol definition was found.
343
+ var hash;
344
+ var href;
345
+ var i;
346
+ var inProgressCount = 0;
347
+ var isHidden;
348
+ var Request;
349
+ var url;
350
+ var uses;
351
+ var xhr;
352
+ function observeIfDone() {
353
+ // If done with making changes, start watching for chagnes in DOM again
354
+ inProgressCount -= 1;
355
+ if (inProgressCount === 0) {
356
+ // if all xhrs were resolved
357
+ unobserveChanges(); // make sure to remove old handlers
358
+ observeChanges(); // watch for changes to DOM
359
+ }
360
+ }
361
+ function attrUpdateFunc(spec) {
362
+ return function () {
363
+ if (cache[spec.base] !== true) {
364
+ spec.useEl.setAttributeNS(xlinkNS, 'xlink:href', '#' + spec.hash);
365
+ if (spec.useEl.hasAttribute('href')) {
366
+ spec.useEl.setAttribute('href', '#' + spec.hash);
367
+ }
368
+ }
369
+ };
370
+ }
371
+ function onloadFunc(xhr) {
372
+ return function () {
373
+ var body = document.body;
374
+ var x = document.createElement('x');
375
+ var svg;
376
+ xhr.onload = null;
377
+ x.innerHTML = xhr.responseText;
378
+ svg = x.getElementsByTagName('svg')[0];
379
+ if (svg) {
380
+ svg.setAttribute('aria-hidden', 'true');
381
+ svg.style.position = 'absolute';
382
+ svg.style.width = 0;
383
+ svg.style.height = 0;
384
+ svg.style.overflow = 'hidden';
385
+ body.insertBefore(svg, body.firstChild);
386
+ }
387
+ observeIfDone();
388
+ };
389
+ }
390
+ function onErrorTimeout(xhr) {
391
+ return function () {
392
+ xhr.onerror = null;
393
+ xhr.ontimeout = null;
394
+ observeIfDone();
395
+ };
396
+ }
397
+ unobserveChanges(); // stop watching for changes to DOM
398
+ // find all use elements
399
+ uses = document.getElementsByTagName('use');
400
+ for (i = 0; i < uses.length; i += 1) {
401
+ try {
402
+ bcr = uses[i].getBoundingClientRect();
403
+ } catch (ignore) {
404
+ // failed to get bounding rectangle of the use element
405
+ bcr = false;
406
+ }
407
+ href =
408
+ uses[i].getAttribute('href') ||
409
+ uses[i].getAttributeNS(xlinkNS, 'href') ||
410
+ uses[i].getAttribute('xlink:href');
411
+ if (href && href.split) {
412
+ url = href.split('#');
413
+ } else {
414
+ url = ['', ''];
415
+ }
416
+ base = url[0];
417
+ hash = url[1];
418
+ isHidden = bcr && bcr.left === 0 && bcr.right === 0 && bcr.top === 0 && bcr.bottom === 0;
419
+ if (bcr && bcr.width === 0 && bcr.height === 0 && !isHidden) {
420
+ // the use element is empty
421
+ // if there is a reference to an external SVG, try to fetch it
422
+ // use the optional fallback URL if there is no reference to an external SVG
423
+ if (fallback && !base.length && hash && !document.getElementById(hash)) {
424
+ base = fallback;
425
+ }
426
+ if (uses[i].hasAttribute('href')) {
427
+ uses[i].setAttributeNS(xlinkNS, 'xlink:href', href);
428
+ }
429
+ if (base.length) {
430
+ // schedule updating xlink:href
431
+ xhr = cache[base];
432
+ if (xhr !== true) {
433
+ // true signifies that prepending the SVG was not required
434
+ setTimeout(
435
+ attrUpdateFunc({
436
+ useEl: uses[i],
437
+ base: base,
438
+ hash: hash,
439
+ }),
440
+ 0
441
+ );
442
+ }
443
+ if (xhr === undefined) {
444
+ Request = createRequest(base);
445
+ if (Request !== undefined) {
446
+ xhr = new Request();
447
+ cache[base] = xhr;
448
+ xhr.onload = onloadFunc(xhr);
449
+ xhr.onerror = onErrorTimeout(xhr);
450
+ xhr.ontimeout = onErrorTimeout(xhr);
451
+ xhr.open('GET', base);
452
+ xhr.send();
453
+ inProgressCount += 1;
454
+ }
455
+ }
456
+ }
457
+ } else {
458
+ if (!isHidden) {
459
+ if (cache[base] === undefined) {
460
+ // remember this URL if the use element was not empty and no request was sent
461
+ cache[base] = true;
462
+ } else if (cache[base].onload) {
463
+ // if it turns out that prepending the SVG is not necessary,
464
+ // abort the in-progress xhr.
465
+ cache[base].abort();
466
+ delete cache[base].onload;
467
+ cache[base] = true;
468
+ }
469
+ } else if (base.length && cache[base]) {
470
+ setTimeout(
471
+ attrUpdateFunc({
472
+ useEl: uses[i],
473
+ base: base,
474
+ hash: hash,
475
+ }),
476
+ 0
477
+ );
478
+ }
479
+ }
480
+ }
481
+ uses = '';
482
+ inProgressCount += 1;
483
+ observeIfDone();
484
+ };
485
+ var winLoad;
486
+ winLoad = function () {
487
+ window.removeEventListener('load', winLoad, false); // to prevent memory leaks
488
+ tid = setTimeout(checkUseElems, 0);
489
+ };
490
+ if (document.readyState !== 'complete') {
491
+ // The load event fires when all resources have finished loading, which allows detecting whether SVG use elements are empty.
492
+ window.addEventListener('load', winLoad, false);
493
+ } else {
494
+ // No need to add a listener if the document is already loaded, initialize immediately.
495
+ winLoad();
496
+ }
497
+ }
498
+ })();
@@ -0,0 +1,139 @@
1
+ import forEach from 'tui-code-snippet/collection/forEach';
2
+ import Submenu from '@/ui/submenuBase';
3
+ import templateHtml from '@/ui/template/submenu/crop';
4
+ import { assignmentForDestroy } from '@/util';
5
+
6
+ /**
7
+ * Crop ui class
8
+ * @class
9
+ * @ignore
10
+ */
11
+ class Crop extends Submenu {
12
+ constructor(subMenuElement, { locale, makeSvgIcon, menuBarPosition, usageStatistics }) {
13
+ super(subMenuElement, {
14
+ locale,
15
+ name: 'crop',
16
+ makeSvgIcon,
17
+ menuBarPosition,
18
+ templateHtml,
19
+ usageStatistics,
20
+ });
21
+
22
+ this.status = 'active';
23
+
24
+ this._els = {
25
+ apply: this.selector('.tie-crop-button .apply'),
26
+ cancel: this.selector('.tie-crop-button .cancel'),
27
+ preset: this.selector('.tie-crop-preset-button'),
28
+ };
29
+
30
+ this.defaultPresetButton = this._els.preset.querySelector('.preset-none');
31
+ }
32
+
33
+ /**
34
+ * Destroys the instance.
35
+ */
36
+ destroy() {
37
+ this._removeEvent();
38
+
39
+ assignmentForDestroy(this);
40
+ }
41
+
42
+ /**
43
+ * Add event for crop
44
+ * @param {Object} actions - actions for crop
45
+ * @param {Function} actions.crop - crop action
46
+ * @param {Function} actions.cancel - cancel action
47
+ * @param {Function} actions.preset - draw rectzone at a predefined ratio
48
+ */
49
+ addEvent(actions) {
50
+ const apply = this._applyEventHandler.bind(this);
51
+ const cancel = this._cancelEventHandler.bind(this);
52
+ const cropzonePreset = this._cropzonePresetEventHandler.bind(this);
53
+
54
+ this.eventHandler = {
55
+ apply,
56
+ cancel,
57
+ cropzonePreset,
58
+ };
59
+
60
+ this.actions = actions;
61
+ this._els.apply.addEventListener('click', apply);
62
+ this._els.cancel.addEventListener('click', cancel);
63
+ this._els.preset.addEventListener('click', cropzonePreset);
64
+ }
65
+
66
+ /**
67
+ * Remove event
68
+ * @private
69
+ */
70
+ _removeEvent() {
71
+ this._els.apply.removeEventListener('click', this.eventHandler.apply);
72
+ this._els.cancel.removeEventListener('click', this.eventHandler.cancel);
73
+ this._els.preset.removeEventListener('click', this.eventHandler.cropzonePreset);
74
+ }
75
+
76
+ _applyEventHandler() {
77
+ this.actions.crop();
78
+ this._els.apply.classList.remove('active');
79
+ }
80
+
81
+ _cancelEventHandler() {
82
+ this.actions.cancel();
83
+ this._els.apply.classList.remove('active');
84
+ }
85
+
86
+ _cropzonePresetEventHandler(event) {
87
+ const button = event.target.closest('.tui-image-editor-button.preset');
88
+ if (button) {
89
+ const [presetType] = button.className.match(/preset-[^\s]+/);
90
+
91
+ this._setPresetButtonActive(button);
92
+ this.actions.preset(presetType);
93
+ }
94
+ }
95
+
96
+ /**
97
+ * Executed when the menu starts.
98
+ */
99
+ changeStartMode() {
100
+ this.actions.modeChange('crop');
101
+ }
102
+
103
+ /**
104
+ * Returns the menu to its default state.
105
+ */
106
+ changeStandbyMode() {
107
+ this.actions.stopDrawingMode();
108
+ this._setPresetButtonActive();
109
+ }
110
+
111
+ /**
112
+ * Change apply button status
113
+ * @param {Boolean} enableStatus - apply button status
114
+ */
115
+ changeApplyButtonStatus(enableStatus) {
116
+ if (enableStatus) {
117
+ this._els.apply.classList.add('active');
118
+ } else {
119
+ this._els.apply.classList.remove('active');
120
+ }
121
+ }
122
+
123
+ /**
124
+ * Set preset button to active status
125
+ * @param {HTMLElement} button - event target element
126
+ * @private
127
+ */
128
+ _setPresetButtonActive(button = this.defaultPresetButton) {
129
+ forEach(this._els.preset.querySelectorAll('.preset'), (presetButton) => {
130
+ presetButton.classList.remove('active');
131
+ });
132
+
133
+ if (button) {
134
+ button.classList.add('active');
135
+ }
136
+ }
137
+ }
138
+
139
+ export default Crop;