@webiny/ui 0.0.0-unstable.40876133bb → 0.0.0-unstable.496cf268ac

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 (394) hide show
  1. package/Accordion/Accordion.d.ts +1 -1
  2. package/Accordion/Accordion.js +5 -19
  3. package/Accordion/Accordion.js.map +1 -1
  4. package/Accordion/Accordion.stories.js +0 -8
  5. package/Accordion/Accordion.stories.js.map +1 -1
  6. package/Accordion/AccordionItem.d.ts +21 -2
  7. package/Accordion/AccordionItem.js +49 -71
  8. package/Accordion/AccordionItem.js.map +1 -1
  9. package/Accordion/AccordionItemActions.d.ts +8 -0
  10. package/Accordion/AccordionItemActions.js +28 -0
  11. package/Accordion/AccordionItemActions.js.map +1 -0
  12. package/Accordion/index.js +0 -4
  13. package/Accordion/index.js.map +1 -1
  14. package/Alert/Alert.d.ts +1 -1
  15. package/Alert/Alert.js +4 -11
  16. package/Alert/Alert.js.map +1 -1
  17. package/Alert/Alert.stories.js +0 -6
  18. package/Alert/Alert.stories.js.map +1 -1
  19. package/Alert/index.js +0 -2
  20. package/Alert/index.js.map +1 -1
  21. package/AutoComplete/AutoComplete.js +38 -88
  22. package/AutoComplete/AutoComplete.js.map +1 -1
  23. package/AutoComplete/AutoComplete.stories.js +0 -7
  24. package/AutoComplete/AutoComplete.stories.js.map +1 -1
  25. package/AutoComplete/MultiAutoComplete.js +52 -128
  26. package/AutoComplete/MultiAutoComplete.js.map +1 -1
  27. package/AutoComplete/MultiAutoComplete.stories.js +0 -8
  28. package/AutoComplete/MultiAutoComplete.stories.js.map +1 -1
  29. package/AutoComplete/index.js +0 -4
  30. package/AutoComplete/index.js.map +1 -1
  31. package/AutoComplete/styles.js +0 -2
  32. package/AutoComplete/styles.js.map +1 -1
  33. package/AutoComplete/utils.js +0 -8
  34. package/AutoComplete/utils.js.map +1 -1
  35. package/Avatar/Avatar.js +7 -18
  36. package/Avatar/Avatar.js.map +1 -1
  37. package/Avatar/Avatar.stories.js +0 -6
  38. package/Avatar/Avatar.stories.js.map +1 -1
  39. package/Avatar/index.js +0 -2
  40. package/Avatar/index.js.map +1 -1
  41. package/Button/Button.d.ts +30 -1
  42. package/Button/Button.js +39 -63
  43. package/Button/Button.js.map +1 -1
  44. package/Button/Button.stories.js +0 -10
  45. package/Button/Button.stories.js.map +1 -1
  46. package/Button/Button.styles.js +0 -2
  47. package/Button/Button.styles.js.map +1 -1
  48. package/Button/CopyButton/CopyButton.js +2 -12
  49. package/Button/CopyButton/CopyButton.js.map +1 -1
  50. package/Button/CopyButton/CopyButton.stories.js +0 -7
  51. package/Button/CopyButton/CopyButton.stories.js.map +1 -1
  52. package/Button/IconButton/IconButton.js +6 -12
  53. package/Button/IconButton/IconButton.js.map +1 -1
  54. package/Button/IconButton/IconButton.stories.js +0 -9
  55. package/Button/IconButton/IconButton.stories.js.map +1 -1
  56. package/Button/index.js +0 -6
  57. package/Button/index.js.map +1 -1
  58. package/Carousel/Carousel.js +0 -14
  59. package/Carousel/Carousel.js.map +1 -1
  60. package/Carousel/Carouser.stories.js +0 -7
  61. package/Carousel/Carouser.stories.js.map +1 -1
  62. package/Carousel/index.js +0 -2
  63. package/Carousel/index.js.map +1 -1
  64. package/Checkbox/Checkbox.d.ts +1 -0
  65. package/Checkbox/Checkbox.js +13 -31
  66. package/Checkbox/Checkbox.js.map +1 -1
  67. package/Checkbox/Checkbox.stories.js +0 -8
  68. package/Checkbox/Checkbox.stories.js.map +1 -1
  69. package/Checkbox/Checkbox.styles.js +0 -2
  70. package/Checkbox/Checkbox.styles.js.map +1 -1
  71. package/Checkbox/CheckboxGroup.js +7 -24
  72. package/Checkbox/CheckboxGroup.js.map +1 -1
  73. package/Checkbox/CheckboxGroup.stories.js +2 -10
  74. package/Checkbox/CheckboxGroup.stories.js.map +1 -1
  75. package/Checkbox/index.js +0 -3
  76. package/Checkbox/index.js.map +1 -1
  77. package/Chips/Chip.js +1 -8
  78. package/Chips/Chip.js.map +1 -1
  79. package/Chips/Chips.js +3 -13
  80. package/Chips/Chips.js.map +1 -1
  81. package/Chips/Chips.stories.js +0 -8
  82. package/Chips/Chips.stories.js.map +1 -1
  83. package/Chips/index.js +0 -4
  84. package/Chips/index.js.map +1 -1
  85. package/Chips/styles.js +0 -2
  86. package/Chips/styles.js.map +1 -1
  87. package/CodeEditor/CodeEditor.js +8 -36
  88. package/CodeEditor/CodeEditor.js.map +1 -1
  89. package/CodeEditor/CodeEditor.stories.js +0 -10
  90. package/CodeEditor/CodeEditor.stories.js.map +1 -1
  91. package/CodeEditor/index.js +0 -2
  92. package/CodeEditor/index.js.map +1 -1
  93. package/ColorPicker/ColorPicker.js +7 -31
  94. package/ColorPicker/ColorPicker.js.map +1 -1
  95. package/ColorPicker/ColorPicker.stories.js +0 -8
  96. package/ColorPicker/ColorPicker.stories.js.map +1 -1
  97. package/ColorPicker/index.js +0 -2
  98. package/ColorPicker/index.js.map +1 -1
  99. package/ConfirmationDialog/ConfirmationDialog.js +33 -65
  100. package/ConfirmationDialog/ConfirmationDialog.js.map +1 -1
  101. package/ConfirmationDialog/ConfirmationDialog.stories.js +0 -7
  102. package/ConfirmationDialog/ConfirmationDialog.stories.js.map +1 -1
  103. package/ConfirmationDialog/index.js +0 -4
  104. package/ConfirmationDialog/index.js.map +1 -1
  105. package/ConfirmationDialog/withConfirmation.js +0 -5
  106. package/ConfirmationDialog/withConfirmation.js.map +1 -1
  107. package/DataTable/DataTable.d.ts +16 -1
  108. package/DataTable/DataTable.js +62 -42
  109. package/DataTable/DataTable.js.map +1 -1
  110. package/DataTable/DataTable.stories.js +0 -6
  111. package/DataTable/DataTable.stories.js.map +1 -1
  112. package/DataTable/index.js +0 -2
  113. package/DataTable/index.js.map +1 -1
  114. package/DataTable/styled.d.ts +30 -1
  115. package/DataTable/styled.js +25 -7
  116. package/DataTable/styled.js.map +1 -1
  117. package/DelayedOnChange/DelayedOnChange.js +19 -35
  118. package/DelayedOnChange/DelayedOnChange.js.map +1 -1
  119. package/DelayedOnChange/index.js +0 -3
  120. package/DelayedOnChange/index.js.map +1 -1
  121. package/DelayedOnChange/withDelayedOnChange.js +3 -9
  122. package/DelayedOnChange/withDelayedOnChange.js.map +1 -1
  123. package/Dialog/Dialog.js +7 -39
  124. package/Dialog/Dialog.js.map +1 -1
  125. package/Dialog/Dialog.stories.js +0 -7
  126. package/Dialog/Dialog.stories.js.map +1 -1
  127. package/Dialog/index.js +0 -2
  128. package/Dialog/index.js.map +1 -1
  129. package/Drawer/Drawer.js +0 -9
  130. package/Drawer/Drawer.js.map +1 -1
  131. package/Drawer/Drawer.stories.js +0 -8
  132. package/Drawer/Drawer.stories.js.map +1 -1
  133. package/Drawer/index.js +0 -2
  134. package/Drawer/index.js.map +1 -1
  135. package/DynamicFieldset/Fieldset.js +7 -34
  136. package/DynamicFieldset/Fieldset.js.map +1 -1
  137. package/DynamicFieldset/index.js +0 -2
  138. package/DynamicFieldset/index.js.map +1 -1
  139. package/Elevation/Elevation.js +0 -5
  140. package/Elevation/Elevation.js.map +1 -1
  141. package/Elevation/Elevation.stories.js +0 -8
  142. package/Elevation/Elevation.stories.js.map +1 -1
  143. package/Elevation/index.js +0 -2
  144. package/Elevation/index.js.map +1 -1
  145. package/FormElementMessage/FormElementMessage.js +0 -5
  146. package/FormElementMessage/FormElementMessage.js.map +1 -1
  147. package/FormElementMessage/index.js +0 -1
  148. package/FormElementMessage/index.js.map +1 -1
  149. package/FullName/FullName.js +0 -7
  150. package/FullName/FullName.js.map +1 -1
  151. package/FullName/index.js +0 -2
  152. package/FullName/index.js.map +1 -1
  153. package/Grid/Grid.js +1 -9
  154. package/Grid/Grid.js.map +1 -1
  155. package/Grid/Grid.stories.js +0 -6
  156. package/Grid/Grid.stories.js.map +1 -1
  157. package/Grid/index.js +0 -2
  158. package/Grid/index.js.map +1 -1
  159. package/Helpers/ClassNames.js +0 -9
  160. package/Helpers/ClassNames.js.map +1 -1
  161. package/Helpers/index.js +0 -1
  162. package/Helpers/index.js.map +1 -1
  163. package/Icon/Icon.js +1 -7
  164. package/Icon/Icon.js.map +1 -1
  165. package/Icon/Icon.stories.js +0 -10
  166. package/Icon/Icon.stories.js.map +1 -1
  167. package/Icon/index.js +0 -2
  168. package/Icon/index.js.map +1 -1
  169. package/Image/Image.js +0 -8
  170. package/Image/Image.js.map +1 -1
  171. package/Image/Image.stories.js +0 -7
  172. package/Image/Image.stories.js.map +1 -1
  173. package/Image/index.js +0 -2
  174. package/Image/index.js.map +1 -1
  175. package/ImageEditor/ImageEditor.js +46 -107
  176. package/ImageEditor/ImageEditor.js.map +1 -1
  177. package/ImageEditor/index.js +0 -2
  178. package/ImageEditor/index.js.map +1 -1
  179. package/ImageEditor/toolbar/crop.js +1 -16
  180. package/ImageEditor/toolbar/crop.js.map +1 -1
  181. package/ImageEditor/toolbar/filter.js +11 -36
  182. package/ImageEditor/toolbar/filter.js.map +1 -1
  183. package/ImageEditor/toolbar/flip.js +0 -17
  184. package/ImageEditor/toolbar/flip.js.map +1 -1
  185. package/ImageEditor/toolbar/icons/index.js +0 -8
  186. package/ImageEditor/toolbar/icons/index.js.map +1 -1
  187. package/ImageEditor/toolbar/index.js +0 -5
  188. package/ImageEditor/toolbar/index.js.map +1 -1
  189. package/ImageEditor/toolbar/rotate.js +8 -43
  190. package/ImageEditor/toolbar/rotate.js.map +1 -1
  191. package/ImageUpload/Image.js +10 -34
  192. package/ImageUpload/Image.js.map +1 -1
  193. package/ImageUpload/ImageEditorDialog.js +11 -33
  194. package/ImageUpload/ImageEditorDialog.js.map +1 -1
  195. package/ImageUpload/MultiImageUpload.js +111 -175
  196. package/ImageUpload/MultiImageUpload.js.map +1 -1
  197. package/ImageUpload/MultiImageUpload.stories.js +0 -8
  198. package/ImageUpload/MultiImageUpload.stories.js.map +1 -1
  199. package/ImageUpload/SingleImageUpload.js +38 -79
  200. package/ImageUpload/SingleImageUpload.js.map +1 -1
  201. package/ImageUpload/SingleImageUpload.stories.js +0 -8
  202. package/ImageUpload/SingleImageUpload.stories.js.map +1 -1
  203. package/ImageUpload/index.js +0 -5
  204. package/ImageUpload/index.js.map +1 -1
  205. package/ImageUpload/styled.d.ts +27 -17
  206. package/ImageUpload/styled.js +0 -5
  207. package/ImageUpload/styled.js.map +1 -1
  208. package/Input/Input.d.ts +2 -12
  209. package/Input/Input.js +86 -149
  210. package/Input/Input.js.map +1 -1
  211. package/Input/Input.stories.js +0 -13
  212. package/Input/Input.stories.js.map +1 -1
  213. package/Input/__tests__/Input.test.js +4 -30
  214. package/Input/__tests__/Input.test.js.map +1 -1
  215. package/Input/index.js +0 -2
  216. package/Input/index.js.map +1 -1
  217. package/List/CollapsibleList/CollapsibleList.stories.js +0 -8
  218. package/List/CollapsibleList/CollapsibleList.stories.js.map +1 -1
  219. package/List/CollapsibleList/index.js +0 -6
  220. package/List/CollapsibleList/index.js.map +1 -1
  221. package/List/DataList/DataList.js +18 -97
  222. package/List/DataList/DataList.js.map +1 -1
  223. package/List/DataList/DataList.stories.js +2 -10
  224. package/List/DataList/DataList.stories.js.map +1 -1
  225. package/List/DataList/DataListModalOverlay/DataListModalOverlay.d.ts +8 -6
  226. package/List/DataList/DataListModalOverlay/DataListModalOverlay.js +5 -16
  227. package/List/DataList/DataListModalOverlay/DataListModalOverlay.js.map +1 -1
  228. package/List/DataList/DataListModalOverlay/DataListModalOverlayAction.js +3 -14
  229. package/List/DataList/DataListModalOverlay/DataListModalOverlayAction.js.map +1 -1
  230. package/List/DataList/DataListModalOverlay/DataListModalOverlayContext.js +3 -12
  231. package/List/DataList/DataListModalOverlay/DataListModalOverlayContext.js.map +1 -1
  232. package/List/DataList/DataListModalOverlay/index.js +0 -3
  233. package/List/DataList/DataListModalOverlay/index.js.map +1 -1
  234. package/List/DataList/DataListWithSections.js +4 -48
  235. package/List/DataList/DataListWithSections.js.map +1 -1
  236. package/List/DataList/Loader.js +0 -7
  237. package/List/DataList/Loader.js.map +1 -1
  238. package/List/DataList/NoData.js +0 -7
  239. package/List/DataList/NoData.js.map +1 -1
  240. package/List/DataList/icons/index.js +0 -29
  241. package/List/DataList/icons/index.js.map +1 -1
  242. package/List/DataList/index.js +0 -6
  243. package/List/DataList/index.js.map +1 -1
  244. package/List/List.js +0 -39
  245. package/List/List.js.map +1 -1
  246. package/List/List.stories.js +0 -12
  247. package/List/List.stories.js.map +1 -1
  248. package/List/icons/index.js +0 -3
  249. package/List/icons/index.js.map +1 -1
  250. package/List/index.js +0 -4
  251. package/List/index.js.map +1 -1
  252. package/Menu/Menu.js +2 -28
  253. package/Menu/Menu.js.map +1 -1
  254. package/Menu/Menu.stories.js +0 -7
  255. package/Menu/Menu.stories.js.map +1 -1
  256. package/Menu/index.js +0 -2
  257. package/Menu/index.js.map +1 -1
  258. package/Mosaic/Mosaic.js +3 -7
  259. package/Mosaic/Mosaic.js.map +1 -1
  260. package/Mosaic/Mosaic.stories.js +0 -6
  261. package/Mosaic/Mosaic.stories.js.map +1 -1
  262. package/Mosaic/index.js +0 -2
  263. package/Mosaic/index.js.map +1 -1
  264. package/Progress/CircularProgress.js +6 -14
  265. package/Progress/CircularProgress.js.map +1 -1
  266. package/Progress/index.js +0 -2
  267. package/Progress/index.js.map +1 -1
  268. package/Radio/Radio.js +9 -28
  269. package/Radio/Radio.js.map +1 -1
  270. package/Radio/Radio.styles.js +0 -2
  271. package/Radio/Radio.styles.js.map +1 -1
  272. package/Radio/RadioGroup.js +5 -21
  273. package/Radio/RadioGroup.js.map +1 -1
  274. package/Radio/RadioGroup.stories.js +2 -10
  275. package/Radio/RadioGroup.stories.js.map +1 -1
  276. package/Radio/index.js +0 -3
  277. package/Radio/index.js.map +1 -1
  278. package/RichTextEditor/RichTextEditor.js +30 -64
  279. package/RichTextEditor/RichTextEditor.js.map +1 -1
  280. package/RichTextEditor/RichTextEditor.stories.js +0 -7
  281. package/RichTextEditor/RichTextEditor.stories.js.map +1 -1
  282. package/RichTextEditor/createPropsFromConfig.js +0 -4
  283. package/RichTextEditor/createPropsFromConfig.js.map +1 -1
  284. package/RichTextEditor/index.js +0 -3
  285. package/RichTextEditor/index.js.map +1 -1
  286. package/Ripple/Ripple.js +0 -6
  287. package/Ripple/Ripple.js.map +1 -1
  288. package/Ripple/Ripple.stories.js +0 -12
  289. package/Ripple/Ripple.stories.js.map +1 -1
  290. package/Ripple/index.js +0 -2
  291. package/Ripple/index.js.map +1 -1
  292. package/Scrollbar/Scrollbar.js +0 -5
  293. package/Scrollbar/Scrollbar.js.map +1 -1
  294. package/Scrollbar/Scrollbar.stories.js +0 -6
  295. package/Scrollbar/Scrollbar.stories.js.map +1 -1
  296. package/Scrollbar/index.js +0 -2
  297. package/Scrollbar/index.js.map +1 -1
  298. package/Section/Section.stories.js +0 -7
  299. package/Section/Section.stories.js.map +1 -1
  300. package/Section/index.js +2 -12
  301. package/Section/index.js.map +1 -1
  302. package/Select/Select.js +9 -32
  303. package/Select/Select.js.map +1 -1
  304. package/Select/Select.stories.js +0 -8
  305. package/Select/Select.stories.js.map +1 -1
  306. package/Select/index.js +0 -2
  307. package/Select/index.js.map +1 -1
  308. package/Skeleton/Skeleton.d.ts +6 -2
  309. package/Skeleton/Skeleton.js +8 -11
  310. package/Skeleton/Skeleton.js.map +1 -1
  311. package/Skeleton/Skeleton.stories.js +0 -6
  312. package/Skeleton/Skeleton.stories.js.map +1 -1
  313. package/Skeleton/index.js +0 -2
  314. package/Skeleton/index.js.map +1 -1
  315. package/Slider/Slider.js +7 -29
  316. package/Slider/Slider.js.map +1 -1
  317. package/Slider/Slider.stories.js +1 -9
  318. package/Slider/Slider.stories.js.map +1 -1
  319. package/Slider/index.js +0 -2
  320. package/Slider/index.js.map +1 -1
  321. package/Snackbar/Snackbar.js +0 -19
  322. package/Snackbar/Snackbar.js.map +1 -1
  323. package/Snackbar/Snackbar.stories.js +0 -23
  324. package/Snackbar/Snackbar.stories.js.map +1 -1
  325. package/Snackbar/index.js +0 -1
  326. package/Snackbar/index.js.map +1 -1
  327. package/Switch/Switch.d.ts +1 -1
  328. package/Switch/Switch.js +5 -28
  329. package/Switch/Switch.js.map +1 -1
  330. package/Switch/Switch.stories.js +0 -8
  331. package/Switch/Switch.stories.js.map +1 -1
  332. package/Switch/index.js +0 -2
  333. package/Switch/index.js.map +1 -1
  334. package/Tabs/Tab.d.ts +1 -0
  335. package/Tabs/Tab.js +3 -9
  336. package/Tabs/Tab.js.map +1 -1
  337. package/Tabs/Tabs.d.ts +1 -0
  338. package/Tabs/Tabs.js +15 -28
  339. package/Tabs/Tabs.js.map +1 -1
  340. package/Tabs/Tabs.stories.js +0 -10
  341. package/Tabs/Tabs.stories.js.map +1 -1
  342. package/Tabs/index.js +0 -4
  343. package/Tabs/index.js.map +1 -1
  344. package/Tags/Tags.d.ts +8 -15
  345. package/Tags/Tags.js +77 -130
  346. package/Tags/Tags.js.map +1 -1
  347. package/Tags/Tags.stories.js +0 -8
  348. package/Tags/Tags.stories.js.map +1 -1
  349. package/Tags/index.js +0 -2
  350. package/Tags/index.js.map +1 -1
  351. package/Tooltip/Tooltip.js +0 -19
  352. package/Tooltip/Tooltip.js.map +1 -1
  353. package/Tooltip/Tooltip.stories.js +0 -6
  354. package/Tooltip/Tooltip.stories.js.map +1 -1
  355. package/Tooltip/index.js +0 -2
  356. package/Tooltip/index.js.map +1 -1
  357. package/TopAppBar/TopAppBar.js +1 -8
  358. package/TopAppBar/TopAppBar.js.map +1 -1
  359. package/TopAppBar/TopAppBar.stories.js +3 -16
  360. package/TopAppBar/TopAppBar.stories.js.map +1 -1
  361. package/TopAppBar/TopAppBarActionItem.js +0 -5
  362. package/TopAppBar/TopAppBarActionItem.js.map +1 -1
  363. package/TopAppBar/TopAppBarNavigationIcon.js +0 -5
  364. package/TopAppBar/TopAppBarNavigationIcon.js.map +1 -1
  365. package/TopAppBar/TopAppBarPrimary.js +1 -8
  366. package/TopAppBar/TopAppBarPrimary.js.map +1 -1
  367. package/TopAppBar/TopAppBarSecondary.js +3 -10
  368. package/TopAppBar/TopAppBarSecondary.js.map +1 -1
  369. package/TopAppBar/TopAppBarSection.js +1 -8
  370. package/TopAppBar/TopAppBarSection.js.map +1 -1
  371. package/TopAppBar/TopAppBarTitle.js +1 -8
  372. package/TopAppBar/TopAppBarTitle.js.map +1 -1
  373. package/TopAppBar/index.js +0 -14
  374. package/TopAppBar/index.js.map +1 -1
  375. package/TopProgressBar/TopProgressBar.js +0 -5
  376. package/TopProgressBar/TopProgressBar.js.map +1 -1
  377. package/TopProgressBar/TopProgressBar.stories.js +1 -8
  378. package/TopProgressBar/TopProgressBar.stories.js.map +1 -1
  379. package/TopProgressBar/hoc/index.js +0 -2
  380. package/TopProgressBar/hoc/index.js.map +1 -1
  381. package/TopProgressBar/hoc/withTopProgressBar.js +2 -8
  382. package/TopProgressBar/hoc/withTopProgressBar.js.map +1 -1
  383. package/TopProgressBar/index.js +0 -2
  384. package/TopProgressBar/index.js.map +1 -1
  385. package/Typography/Typography.d.ts +2 -2
  386. package/Typography/Typography.js +0 -5
  387. package/Typography/Typography.js.map +1 -1
  388. package/Typography/Typography.stories.js +0 -6
  389. package/Typography/Typography.stories.js.map +1 -1
  390. package/Typography/index.js +0 -2
  391. package/Typography/index.js.map +1 -1
  392. package/package.json +17 -15
  393. package/types.d.ts +3 -3
  394. package/types.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"names":["toolbar","flip","filter","crop","rotate","Toolbar","styled","display","justifyContent","alignItems","backgroundColor","margin","padding","position","width","boxSizing","zIndex","opacity","pointerEvents","ToolOptions","borderTop","ApplyCancelActions","textAlign","initScripts","Promise","resolve","window","Caman","loadScript","ImageEditor","tool","src","React","createRef","props","image","Image","canvas","current","onload","height","ctx","getContext","drawImage","setState","tt","onActivate","options","getToolOptions","startsWith","toDataURL","state","apply","deactivateTool","cancel","name","then","updateCanvas","setTimeout","key","option","autoEnable","activateTool","tools","children","editor","map","classNames","disabled","icon","renderForm","cancelActiveTool","applyActiveTool","maxWidth","render","getCanvasDataUrl","activeTool","Component"],"sources":["ImageEditor.tsx"],"sourcesContent":["import React from \"react\";\nimport { flip, filter, crop, rotate } from \"./toolbar\";\nimport { ImageEditorTool, ToolbarTool } from \"./toolbar/types\";\nimport styled from \"@emotion/styled\";\nimport classNames from \"classnames\";\nimport { ButtonSecondary, ButtonPrimary } from \"../Button\";\n/**\n * Package load-script does not have types.\n */\n// @ts-ignore\nimport loadScript from \"load-script\";\n\nconst toolbar = {\n flip,\n filter,\n crop,\n rotate\n};\n\nconst Toolbar = styled(\"div\")({\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n backgroundColor: \"var(--mdc-theme-secondary)\",\n margin: \"-24px -24px 0px -24px\",\n padding: 2,\n position: \"absolute\",\n width: \"100%\",\n boxSizing: \"border-box\",\n zIndex: 10,\n \"> div.disabled\": {\n opacity: 0.5,\n pointerEvents: \"none\"\n }\n});\n\nconst ToolOptions = styled(\"div\")({\n margin: \"50px -24px 10px -24px\",\n boxSizing: \"border-box\",\n padding: 10,\n backgroundColor: \"var(--mdc-theme-background)\",\n borderTop: \"1px solid var(--mdc-theme-on-background)\"\n});\n\nconst ApplyCancelActions = styled(\"div\")({\n textAlign: \"center\"\n});\n\nconst initScripts = (): Promise<string> => {\n return new Promise((resolve: any) => {\n // @ts-ignore\n if (window.Caman) {\n return resolve();\n }\n return loadScript(\n \"https://cdnjs.cloudflare.com/ajax/libs/camanjs/4.1.2/caman.full.min.js\",\n resolve\n );\n });\n};\n\ninterface RenderPropArgs {\n render: Function;\n getCanvasDataUrl: () => string;\n activeTool: ImageEditorTool | null;\n applyActiveTool: () => Promise<void>;\n cancelActiveTool: () => Promise<void>;\n}\n\ninterface ImageEditorPropsPropsOptions {\n autoEnable: boolean;\n}\n\ninterface ImageEditorProps {\n src: string;\n tools: ToolbarTool[];\n options?: {\n flip: ImageEditorPropsPropsOptions;\n filter: ImageEditorPropsPropsOptions;\n crop: ImageEditorPropsPropsOptions;\n rotate: ImageEditorPropsPropsOptions;\n };\n onToolActivate?: Function;\n onToolDeactivate?: Function;\n children?: (props: RenderPropArgs) => React.ReactNode;\n}\n\ninterface ImageEditorState {\n tool: ImageEditorTool | null;\n src: string;\n}\n\nclass ImageEditor extends React.Component<ImageEditorProps, ImageEditorState> {\n static defaultProps: Partial<ImageEditorProps> = {\n tools: [\"crop\", \"flip\", \"rotate\", \"filter\"]\n };\n\n public override state: ImageEditorState = {\n tool: null,\n src: \"\"\n };\n\n public canvas = React.createRef<HTMLCanvasElement>();\n public image?: HTMLImageElement;\n\n public override componentDidMount() {\n initScripts().then(() => {\n this.updateCanvas();\n setTimeout(() => {\n const { options } = this.props;\n if (!options || typeof options !== \"object\") {\n return;\n }\n for (const key in options) {\n const option = options[key as ToolbarTool];\n if (option.autoEnable === true) {\n const tool: ImageEditorTool | null = toolbar[key as ToolbarTool];\n tool && this.activateTool(tool);\n break;\n }\n }\n }, 250);\n });\n }\n\n private readonly updateCanvas = (): void => {\n const { src } = this.props;\n this.image = new window.Image();\n const canvas = this.canvas.current;\n if (canvas) {\n this.image.onload = () => {\n if (this.image) {\n canvas.width = this.image.width;\n canvas.height = this.image.height;\n const ctx = canvas.getContext(\"2d\") as CanvasRenderingContext2D;\n ctx.drawImage(this.image, 0, 0);\n }\n };\n\n this.image.src = src;\n }\n };\n\n private readonly activateTool = (tool: ToolbarTool | ImageEditorTool): void => {\n if (typeof tool === \"string\") {\n tool = toolbar[tool];\n }\n\n this.setState({ tool }, () => {\n const tt = tool as ImageEditorTool;\n typeof tt.onActivate === \"function\" &&\n tt.onActivate({ canvas: this.canvas, options: this.getToolOptions(tt) });\n });\n };\n\n private readonly deactivateTool = (): void => {\n this.setState({\n tool: null\n });\n };\n\n public readonly getCanvasDataUrl = (): string => {\n const canvas = this.canvas.current as HTMLCanvasElement;\n if (canvas) {\n const { src } = this.props;\n if (src.startsWith(\"data:image/jpeg;\")) {\n return canvas.toDataURL(\"image/jpeg\", 1.0);\n }\n\n return canvas.toDataURL();\n }\n\n return \"\";\n };\n\n private readonly applyActiveTool = async (): Promise<void> => {\n const { tool } = this.state;\n if (!tool) {\n return;\n }\n\n if (tool.apply) {\n await tool.apply({\n canvas: this.canvas\n });\n }\n this.deactivateTool();\n };\n\n private readonly cancelActiveTool = async (): Promise<void> => {\n const { tool } = this.state;\n if (!tool) {\n return;\n }\n\n if (tool.cancel) {\n await tool.cancel({\n canvas: this.canvas\n });\n }\n this.deactivateTool();\n };\n\n private readonly getToolOptions = (\n tool: ImageEditorTool\n ): Partial<ImageEditorPropsPropsOptions> => {\n const { options } = this.props;\n if (!options || typeof options !== \"object\") {\n return {};\n }\n\n return options[tool.name as ToolbarTool] || {};\n };\n\n public override render(): React.ReactNode {\n const { src, tools, children } = this.props;\n const { tool } = this.state;\n const editor = (\n <React.Fragment>\n <Toolbar>\n {tools.map(key => {\n const tool: ImageEditorTool = toolbar[key];\n if (!tool) {\n return null;\n }\n\n return (\n <div key={key} className={classNames({ disabled: this.state.tool })}>\n {tool.icon({\n activateTool: () => this.activateTool(tool)\n })}\n </div>\n );\n })}\n </Toolbar>\n\n <ToolOptions>\n {tool ? (\n <>\n {typeof tool.renderForm === \"function\" &&\n tool.renderForm({\n options: this.getToolOptions(tool as ImageEditorTool),\n image: this.image as HTMLImageElement,\n canvas: this.canvas\n })}\n\n <ApplyCancelActions>\n <ButtonSecondary\n data-testid=\"button-cancel\"\n onClick={() => {\n this.cancelActiveTool();\n }}\n >\n Cancel\n </ButtonSecondary>\n &nbsp;\n <ButtonPrimary\n data-testid=\"button-apply\"\n onClick={() => {\n this.applyActiveTool();\n }}\n >\n Apply\n </ButtonPrimary>\n </ApplyCancelActions>\n </>\n ) : (\n <div style={{ textAlign: \"center\" }}>\n Select a tool to start working on your image.\n </div>\n )}\n </ToolOptions>\n\n <div style={{ margin: \"0 auto\", textAlign: \"center\" }}>\n <canvas\n key={src}\n id={\"canvas\"}\n style={{ maxWidth: 700 }}\n ref={this.canvas as React.Ref<any>}\n />\n </div>\n </React.Fragment>\n );\n\n if (typeof children === \"function\") {\n return children({\n render: () => editor,\n // canvas: this.canvas,\n getCanvasDataUrl: this.getCanvasDataUrl,\n activeTool: this.state.tool,\n applyActiveTool: this.applyActiveTool,\n cancelActiveTool: this.cancelActiveTool\n });\n }\n\n return editor;\n }\n}\n\nexport { ImageEditor };\n"],"mappings":"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"}
1
+ {"version":3,"names":["toolbar","flip","filter","crop","rotate","Toolbar","styled","display","justifyContent","alignItems","backgroundColor","margin","padding","position","width","boxSizing","zIndex","opacity","pointerEvents","ToolOptions","borderTop","ApplyCancelActions","textAlign","initScripts","Promise","resolve","window","Caman","loadScript","ImageEditor","tool","src","React","createRef","props","image","Image","canvas","current","onload","height","ctx","getContext","drawImage","setState","tt","onActivate","options","getToolOptions","startsWith","toDataURL","state","apply","deactivateTool","cancel","name","then","updateCanvas","setTimeout","key","option","autoEnable","activateTool","tools","children","editor","map","classNames","disabled","icon","renderForm","cancelActiveTool","applyActiveTool","maxWidth","render","getCanvasDataUrl","activeTool","Component"],"sources":["ImageEditor.tsx"],"sourcesContent":["import React from \"react\";\nimport { flip, filter, crop, rotate } from \"./toolbar\";\nimport { ImageEditorTool, ToolbarTool } from \"./toolbar/types\";\nimport styled from \"@emotion/styled\";\nimport classNames from \"classnames\";\nimport { ButtonSecondary, ButtonPrimary } from \"../Button\";\n/**\n * Package load-script does not have types.\n */\n// @ts-ignore\nimport loadScript from \"load-script\";\n\nconst toolbar = {\n flip,\n filter,\n crop,\n rotate\n};\n\nconst Toolbar = styled(\"div\")({\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n backgroundColor: \"var(--mdc-theme-secondary)\",\n margin: \"-24px -24px 0px -24px\",\n padding: 2,\n position: \"absolute\",\n width: \"100%\",\n boxSizing: \"border-box\",\n zIndex: 10,\n \"> div.disabled\": {\n opacity: 0.5,\n pointerEvents: \"none\"\n }\n});\n\nconst ToolOptions = styled(\"div\")({\n margin: \"50px -24px 10px -24px\",\n boxSizing: \"border-box\",\n padding: 10,\n backgroundColor: \"var(--mdc-theme-background)\",\n borderTop: \"1px solid var(--mdc-theme-on-background)\"\n});\n\nconst ApplyCancelActions = styled(\"div\")({\n textAlign: \"center\"\n});\n\nconst initScripts = (): Promise<string> => {\n return new Promise((resolve: any) => {\n // @ts-ignore\n if (window.Caman) {\n return resolve();\n }\n return loadScript(\n \"https://cdnjs.cloudflare.com/ajax/libs/camanjs/4.1.2/caman.full.min.js\",\n resolve\n );\n });\n};\n\ninterface RenderPropArgs {\n render: Function;\n getCanvasDataUrl: () => string;\n activeTool: ImageEditorTool | null;\n applyActiveTool: () => Promise<void>;\n cancelActiveTool: () => Promise<void>;\n}\n\ninterface ImageEditorPropsPropsOptions {\n autoEnable: boolean;\n}\n\ninterface ImageEditorProps {\n src: string;\n tools: ToolbarTool[];\n options?: {\n flip: ImageEditorPropsPropsOptions;\n filter: ImageEditorPropsPropsOptions;\n crop: ImageEditorPropsPropsOptions;\n rotate: ImageEditorPropsPropsOptions;\n };\n onToolActivate?: Function;\n onToolDeactivate?: Function;\n children?: (props: RenderPropArgs) => React.ReactNode;\n}\n\ninterface ImageEditorState {\n tool: ImageEditorTool | null;\n src: string;\n}\n\nclass ImageEditor extends React.Component<ImageEditorProps, ImageEditorState> {\n static defaultProps: Partial<ImageEditorProps> = {\n tools: [\"crop\", \"flip\", \"rotate\", \"filter\"]\n };\n\n public override state: ImageEditorState = {\n tool: null,\n src: \"\"\n };\n\n public canvas = React.createRef<HTMLCanvasElement>();\n public image?: HTMLImageElement;\n\n public override componentDidMount() {\n initScripts().then(() => {\n this.updateCanvas();\n setTimeout(() => {\n const { options } = this.props;\n if (!options || typeof options !== \"object\") {\n return;\n }\n for (const key in options) {\n const option = options[key as ToolbarTool];\n if (option.autoEnable === true) {\n const tool: ImageEditorTool | null = toolbar[key as ToolbarTool];\n tool && this.activateTool(tool);\n break;\n }\n }\n }, 250);\n });\n }\n\n private readonly updateCanvas = (): void => {\n const { src } = this.props;\n this.image = new window.Image();\n const canvas = this.canvas.current;\n if (canvas) {\n this.image.onload = () => {\n if (this.image) {\n canvas.width = this.image.width;\n canvas.height = this.image.height;\n const ctx = canvas.getContext(\"2d\") as CanvasRenderingContext2D;\n ctx.drawImage(this.image, 0, 0);\n }\n };\n\n this.image.src = src;\n }\n };\n\n private readonly activateTool = (tool: ToolbarTool | ImageEditorTool): void => {\n if (typeof tool === \"string\") {\n tool = toolbar[tool];\n }\n\n this.setState({ tool }, () => {\n const tt = tool as ImageEditorTool;\n typeof tt.onActivate === \"function\" &&\n tt.onActivate({ canvas: this.canvas, options: this.getToolOptions(tt) });\n });\n };\n\n private readonly deactivateTool = (): void => {\n this.setState({\n tool: null\n });\n };\n\n public readonly getCanvasDataUrl = (): string => {\n const canvas = this.canvas.current as HTMLCanvasElement;\n if (canvas) {\n const { src } = this.props;\n if (src.startsWith(\"data:image/jpeg;\")) {\n return canvas.toDataURL(\"image/jpeg\", 1.0);\n }\n\n return canvas.toDataURL();\n }\n\n return \"\";\n };\n\n private readonly applyActiveTool = async (): Promise<void> => {\n const { tool } = this.state;\n if (!tool) {\n return;\n }\n\n if (tool.apply) {\n await tool.apply({\n canvas: this.canvas\n });\n }\n this.deactivateTool();\n };\n\n private readonly cancelActiveTool = async (): Promise<void> => {\n const { tool } = this.state;\n if (!tool) {\n return;\n }\n\n if (tool.cancel) {\n await tool.cancel({\n canvas: this.canvas\n });\n }\n this.deactivateTool();\n };\n\n private readonly getToolOptions = (\n tool: ImageEditorTool\n ): Partial<ImageEditorPropsPropsOptions> => {\n const { options } = this.props;\n if (!options || typeof options !== \"object\") {\n return {};\n }\n\n return options[tool.name as ToolbarTool] || {};\n };\n\n public override render(): React.ReactNode {\n const { src, tools, children } = this.props;\n const { tool } = this.state;\n const editor = (\n <React.Fragment>\n <Toolbar>\n {tools.map(key => {\n const tool: ImageEditorTool = toolbar[key];\n if (!tool) {\n return null;\n }\n\n return (\n <div key={key} className={classNames({ disabled: this.state.tool })}>\n {tool.icon({\n activateTool: () => this.activateTool(tool)\n })}\n </div>\n );\n })}\n </Toolbar>\n\n <ToolOptions>\n {tool ? (\n <>\n {typeof tool.renderForm === \"function\" &&\n tool.renderForm({\n options: this.getToolOptions(tool as ImageEditorTool),\n image: this.image as HTMLImageElement,\n canvas: this.canvas\n })}\n\n <ApplyCancelActions>\n <ButtonSecondary\n data-testid=\"button-cancel\"\n onClick={() => {\n this.cancelActiveTool();\n }}\n >\n Cancel\n </ButtonSecondary>\n &nbsp;\n <ButtonPrimary\n data-testid=\"button-apply\"\n onClick={() => {\n this.applyActiveTool();\n }}\n >\n Apply\n </ButtonPrimary>\n </ApplyCancelActions>\n </>\n ) : (\n <div style={{ textAlign: \"center\" }}>\n Select a tool to start working on your image.\n </div>\n )}\n </ToolOptions>\n\n <div style={{ margin: \"0 auto\", textAlign: \"center\" }}>\n <canvas\n key={src}\n id={\"canvas\"}\n style={{ maxWidth: 700 }}\n ref={this.canvas as React.Ref<any>}\n />\n </div>\n </React.Fragment>\n );\n\n if (typeof children === \"function\") {\n return children({\n render: () => editor,\n // canvas: this.canvas,\n getCanvasDataUrl: this.getCanvasDataUrl,\n activeTool: this.state.tool,\n applyActiveTool: this.applyActiveTool,\n cancelActiveTool: this.cancelActiveTool\n });\n }\n\n return editor;\n }\n}\n\nexport { ImageEditor };\n"],"mappings":"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"}
@@ -3,9 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
-
7
6
  var _ImageEditor = require("./ImageEditor");
8
-
9
7
  Object.keys(_ImageEditor).forEach(function (key) {
10
8
  if (key === "default" || key === "__esModule") return;
11
9
  if (key in exports && exports[key] === _ImageEditor[key]) return;
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export * from \"./ImageEditor\";\n"],"mappings":";;;;;;AAAA;;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA"}
1
+ {"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export * from \"./ImageEditor\";\n"],"mappings":";;;;;AAAA;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA"}
@@ -1,26 +1,17 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = void 0;
9
-
10
8
  var _react = _interopRequireDefault(require("react"));
11
-
12
9
  var _crop = require("./icons/crop.svg");
13
-
14
10
  var _Button = require("../../Button");
15
-
16
11
  var _Tooltip = require("../../Tooltip");
17
-
18
12
  var _cropperjs = _interopRequireDefault(require("cropperjs"));
19
-
20
13
  require("cropperjs/dist/cropper.css");
21
-
22
14
  var cropper = undefined;
23
-
24
15
  var renderForm = function renderForm() {
25
16
  return /*#__PURE__*/_react.default.createElement("div", {
26
17
  style: {
@@ -28,7 +19,6 @@ var renderForm = function renderForm() {
28
19
  }
29
20
  }, "Click and drag to crop a portion of the image. Hold Shift to persist aspect ratio.");
30
21
  };
31
-
32
22
  var tool = {
33
23
  name: "crop",
34
24
  icon: function icon(_ref) {
@@ -47,7 +37,7 @@ var tool = {
47
37
  renderForm: renderForm,
48
38
  onActivate: function onActivate(_ref2) {
49
39
  var canvas = _ref2.canvas,
50
- options = _ref2.options;
40
+ options = _ref2.options;
51
41
  cropper = new _cropperjs.default(canvas.current, options);
52
42
  },
53
43
  cancel: function cancel() {
@@ -60,14 +50,11 @@ var tool = {
60
50
  resolve();
61
51
  return;
62
52
  }
63
-
64
53
  var current = canvas.current;
65
54
  var src = cropper.getCroppedCanvas().toDataURL();
66
-
67
55
  if (current) {
68
56
  var image = new window.Image();
69
57
  var ctx = current.getContext("2d");
70
-
71
58
  image.onload = function () {
72
59
  ctx.drawImage(image, 0, 0);
73
60
  current.width = image.width;
@@ -75,10 +62,8 @@ var tool = {
75
62
  ctx.drawImage(image, 0, 0);
76
63
  resolve();
77
64
  };
78
-
79
65
  image.src = src;
80
66
  }
81
-
82
67
  cropper.destroy();
83
68
  cropper = undefined;
84
69
  });
@@ -1 +1 @@
1
- {"version":3,"names":["cropper","undefined","renderForm","textAlign","tool","name","icon","activateTool","onActivate","canvas","options","Cropper","current","cancel","destroy","apply","Promise","resolve","src","getCroppedCanvas","toDataURL","image","window","Image","ctx","getContext","onload","drawImage","width","height"],"sources":["crop.tsx"],"sourcesContent":["import React from \"react\";\nimport { ImageEditorTool } from \"./types\";\nimport { ReactComponent as CropIcon } from \"./icons/crop.svg\";\nimport { IconButton } from \"~/Button\";\nimport { Tooltip } from \"~/Tooltip\";\nimport Cropper from \"cropperjs\";\nimport \"cropperjs/dist/cropper.css\";\n\nlet cropper: Cropper | undefined = undefined;\n\nconst renderForm = () => {\n return (\n <div style={{ textAlign: \"center\" }}>\n Click and drag to crop a portion of the image. Hold Shift to persist aspect ratio.\n </div>\n );\n};\n\nconst tool: ImageEditorTool = {\n name: \"crop\",\n icon({ activateTool }) {\n return (\n <Tooltip placement={\"bottom\"} content={\"Crop\"}>\n <IconButton\n icon={<CropIcon />}\n onClick={() => activateTool(\"crop\")}\n data-testid={\"crop-item\"}\n />\n </Tooltip>\n );\n },\n renderForm,\n onActivate: ({ canvas, options }) => {\n cropper = new Cropper(canvas.current as HTMLCanvasElement, options);\n },\n cancel: () => cropper && cropper.destroy(),\n apply: ({ canvas }) => {\n return new Promise((resolve: any) => {\n if (!cropper) {\n resolve();\n return;\n }\n\n const current = canvas.current;\n const src = cropper.getCroppedCanvas().toDataURL();\n if (current) {\n const image = new window.Image();\n const ctx = current.getContext(\"2d\") as CanvasRenderingContext2D;\n image.onload = () => {\n ctx.drawImage(image, 0, 0);\n current.width = image.width;\n current.height = image.height;\n\n ctx.drawImage(image, 0, 0);\n resolve();\n };\n image.src = src;\n }\n\n cropper.destroy();\n cropper = undefined;\n });\n }\n};\n\nexport default tool;\n"],"mappings":";;;;;;;;;AAAA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AAEA,IAAIA,OAA4B,GAAGC,SAAnC;;AAEA,IAAMC,UAAU,GAAG,SAAbA,UAAa,GAAM;EACrB,oBACI;IAAK,KAAK,EAAE;MAAEC,SAAS,EAAE;IAAb;EAAZ,wFADJ;AAKH,CAND;;AAQA,IAAMC,IAAqB,GAAG;EAC1BC,IAAI,EAAE,MADoB;EAE1BC,IAF0B,sBAEH;IAAA,IAAhBC,YAAgB,QAAhBA,YAAgB;IACnB,oBACI,6BAAC,gBAAD;MAAS,SAAS,EAAE,QAApB;MAA8B,OAAO,EAAE;IAAvC,gBACI,6BAAC,kBAAD;MACI,IAAI,eAAE,6BAAC,oBAAD,OADV;MAEI,OAAO,EAAE;QAAA,OAAMA,YAAY,CAAC,MAAD,CAAlB;MAAA,CAFb;MAGI,eAAa;IAHjB,EADJ,CADJ;EASH,CAZyB;EAa1BL,UAAU,EAAVA,UAb0B;EAc1BM,UAAU,EAAE,2BAAyB;IAAA,IAAtBC,MAAsB,SAAtBA,MAAsB;IAAA,IAAdC,OAAc,SAAdA,OAAc;IACjCV,OAAO,GAAG,IAAIW,kBAAJ,CAAYF,MAAM,CAACG,OAAnB,EAAiDF,OAAjD,CAAV;EACH,CAhByB;EAiB1BG,MAAM,EAAE;IAAA,OAAMb,OAAO,IAAIA,OAAO,CAACc,OAAR,EAAjB;EAAA,CAjBkB;EAkB1BC,KAAK,EAAE,sBAAgB;IAAA,IAAbN,MAAa,SAAbA,MAAa;IACnB,OAAO,IAAIO,OAAJ,CAAY,UAACC,OAAD,EAAkB;MACjC,IAAI,CAACjB,OAAL,EAAc;QACViB,OAAO;QACP;MACH;;MAED,IAAML,OAAO,GAAGH,MAAM,CAACG,OAAvB;MACA,IAAMM,GAAG,GAAGlB,OAAO,CAACmB,gBAAR,GAA2BC,SAA3B,EAAZ;;MACA,IAAIR,OAAJ,EAAa;QACT,IAAMS,KAAK,GAAG,IAAIC,MAAM,CAACC,KAAX,EAAd;QACA,IAAMC,GAAG,GAAGZ,OAAO,CAACa,UAAR,CAAmB,IAAnB,CAAZ;;QACAJ,KAAK,CAACK,MAAN,GAAe,YAAM;UACjBF,GAAG,CAACG,SAAJ,CAAcN,KAAd,EAAqB,CAArB,EAAwB,CAAxB;UACAT,OAAO,CAACgB,KAAR,GAAgBP,KAAK,CAACO,KAAtB;UACAhB,OAAO,CAACiB,MAAR,GAAiBR,KAAK,CAACQ,MAAvB;UAEAL,GAAG,CAACG,SAAJ,CAAcN,KAAd,EAAqB,CAArB,EAAwB,CAAxB;UACAJ,OAAO;QACV,CAPD;;QAQAI,KAAK,CAACH,GAAN,GAAYA,GAAZ;MACH;;MAEDlB,OAAO,CAACc,OAAR;MACAd,OAAO,GAAGC,SAAV;IACH,CAxBM,CAAP;EAyBH;AA5CyB,CAA9B;eA+CeG,I"}
1
+ {"version":3,"names":["cropper","undefined","renderForm","textAlign","tool","name","icon","activateTool","onActivate","canvas","options","Cropper","current","cancel","destroy","apply","Promise","resolve","src","getCroppedCanvas","toDataURL","image","window","Image","ctx","getContext","onload","drawImage","width","height"],"sources":["crop.tsx"],"sourcesContent":["import React from \"react\";\nimport { ImageEditorTool } from \"./types\";\nimport { ReactComponent as CropIcon } from \"./icons/crop.svg\";\nimport { IconButton } from \"~/Button\";\nimport { Tooltip } from \"~/Tooltip\";\nimport Cropper from \"cropperjs\";\nimport \"cropperjs/dist/cropper.css\";\n\nlet cropper: Cropper | undefined = undefined;\n\nconst renderForm = () => {\n return (\n <div style={{ textAlign: \"center\" }}>\n Click and drag to crop a portion of the image. Hold Shift to persist aspect ratio.\n </div>\n );\n};\n\nconst tool: ImageEditorTool = {\n name: \"crop\",\n icon({ activateTool }) {\n return (\n <Tooltip placement={\"bottom\"} content={\"Crop\"}>\n <IconButton\n icon={<CropIcon />}\n onClick={() => activateTool(\"crop\")}\n data-testid={\"crop-item\"}\n />\n </Tooltip>\n );\n },\n renderForm,\n onActivate: ({ canvas, options }) => {\n cropper = new Cropper(canvas.current as HTMLCanvasElement, options);\n },\n cancel: () => cropper && cropper.destroy(),\n apply: ({ canvas }) => {\n return new Promise((resolve: any) => {\n if (!cropper) {\n resolve();\n return;\n }\n\n const current = canvas.current;\n const src = cropper.getCroppedCanvas().toDataURL();\n if (current) {\n const image = new window.Image();\n const ctx = current.getContext(\"2d\") as CanvasRenderingContext2D;\n image.onload = () => {\n ctx.drawImage(image, 0, 0);\n current.width = image.width;\n current.height = image.height;\n\n ctx.drawImage(image, 0, 0);\n resolve();\n };\n image.src = src;\n }\n\n cropper.destroy();\n cropper = undefined;\n });\n }\n};\n\nexport default tool;\n"],"mappings":";;;;;;;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA,IAAIA,OAA4B,GAAGC,SAAS;AAE5C,IAAMC,UAAU,GAAG,SAAbA,UAAU,GAAS;EACrB,oBACI;IAAK,KAAK,EAAE;MAAEC,SAAS,EAAE;IAAS;EAAE,GAAC,oFAErC,CAAM;AAEd,CAAC;AAED,IAAMC,IAAqB,GAAG;EAC1BC,IAAI,EAAE,MAAM;EACZC,IAAI,sBAAmB;IAAA,IAAhBC,YAAY,QAAZA,YAAY;IACf,oBACI,6BAAC,gBAAO;MAAC,SAAS,EAAE,QAAS;MAAC,OAAO,EAAE;IAAO,gBAC1C,6BAAC,kBAAU;MACP,IAAI,eAAE,6BAAC,oBAAQ,OAAI;MACnB,OAAO,EAAE;QAAA,OAAMA,YAAY,CAAC,MAAM,CAAC;MAAA,CAAC;MACpC,eAAa;IAAY,EAC3B,CACI;EAElB,CAAC;EACDL,UAAU,EAAVA,UAAU;EACVM,UAAU,EAAE,2BAAyB;IAAA,IAAtBC,MAAM,SAANA,MAAM;MAAEC,OAAO,SAAPA,OAAO;IAC1BV,OAAO,GAAG,IAAIW,kBAAO,CAACF,MAAM,CAACG,OAAO,EAAuBF,OAAO,CAAC;EACvE,CAAC;EACDG,MAAM,EAAE;IAAA,OAAMb,OAAO,IAAIA,OAAO,CAACc,OAAO,EAAE;EAAA;EAC1CC,KAAK,EAAE,sBAAgB;IAAA,IAAbN,MAAM,SAANA,MAAM;IACZ,OAAO,IAAIO,OAAO,CAAC,UAACC,OAAY,EAAK;MACjC,IAAI,CAACjB,OAAO,EAAE;QACViB,OAAO,EAAE;QACT;MACJ;MAEA,IAAML,OAAO,GAAGH,MAAM,CAACG,OAAO;MAC9B,IAAMM,GAAG,GAAGlB,OAAO,CAACmB,gBAAgB,EAAE,CAACC,SAAS,EAAE;MAClD,IAAIR,OAAO,EAAE;QACT,IAAMS,KAAK,GAAG,IAAIC,MAAM,CAACC,KAAK,EAAE;QAChC,IAAMC,GAAG,GAAGZ,OAAO,CAACa,UAAU,CAAC,IAAI,CAA6B;QAChEJ,KAAK,CAACK,MAAM,GAAG,YAAM;UACjBF,GAAG,CAACG,SAAS,CAACN,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;UAC1BT,OAAO,CAACgB,KAAK,GAAGP,KAAK,CAACO,KAAK;UAC3BhB,OAAO,CAACiB,MAAM,GAAGR,KAAK,CAACQ,MAAM;UAE7BL,GAAG,CAACG,SAAS,CAACN,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;UAC1BJ,OAAO,EAAE;QACb,CAAC;QACDI,KAAK,CAACH,GAAG,GAAGA,GAAG;MACnB;MAEAlB,OAAO,CAACc,OAAO,EAAE;MACjBd,OAAO,GAAGC,SAAS;IACvB,CAAC,CAAC;EACN;AACJ,CAAC;AAAC,eAEaG,IAAI;AAAA"}
@@ -1,44 +1,29 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = void 0;
9
-
10
8
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
11
-
12
9
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
-
14
10
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
15
-
16
11
  var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
17
-
18
12
  var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
19
-
20
13
  var _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/createSuper"));
21
-
22
14
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
23
-
24
15
  var _debounce2 = _interopRequireDefault(require("lodash/debounce"));
25
-
26
16
  var _react = _interopRequireDefault(require("react"));
27
-
28
17
  var _filter = require("./icons/filter.svg");
29
-
30
18
  var _Slider = require("../../Slider");
31
-
32
19
  var _Button = require("../../Button");
33
-
34
20
  var _Tooltip = require("../../Tooltip");
35
-
36
21
  var _styled = _interopRequireDefault(require("@emotion/styled"));
37
-
38
22
  /**
39
23
  * When using Caman, we added @ts-ignore because it does not exist in packages, but it is loaded in packages/ui/src/ImageEditor/ImageEditor.tsx:38.
40
24
  * TODO: use some other library to edit images
41
25
  */
26
+
42
27
  var Wrapper = /*#__PURE__*/(0, _styled.default)("div", {
43
28
  target: "e1cnct9n0",
44
29
  label: "Wrapper"
@@ -98,21 +83,15 @@ var sliders = [{
98
83
  key: "sharpen",
99
84
  label: "Sharpen"
100
85
  }];
101
-
102
86
  var RenderForm = /*#__PURE__*/function (_React$Component) {
103
87
  (0, _inherits2.default)(RenderForm, _React$Component);
104
-
105
88
  var _super = (0, _createSuper2.default)(RenderForm);
106
-
107
89
  function RenderForm() {
108
90
  var _this;
109
-
110
91
  (0, _classCallCheck2.default)(this, RenderForm);
111
-
112
92
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
113
93
  args[_key] = arguments[_key];
114
94
  }
115
-
116
95
  _this = _super.call.apply(_super, [this].concat(args));
117
96
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "state", {
118
97
  processing: false,
@@ -120,20 +99,21 @@ var RenderForm = /*#__PURE__*/function (_React$Component) {
120
99
  });
121
100
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "applyFilters", (0, _debounce2.default)(function () {
122
101
  var canvas = _this.props.canvas;
123
- var values = _this.state.values; // eslint-disable-next-line @typescript-eslint/no-this-alias
124
-
125
- var component = (0, _assertThisInitialized2.default)(_this); // @ts-ignore
102
+ var values = _this.state.values;
103
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
104
+ var component = (0, _assertThisInitialized2.default)(_this);
126
105
 
106
+ // @ts-ignore
127
107
  Caman(canvas.current, function () {
128
108
  var _this2 = this;
129
-
130
109
  // @ts-ignore
131
110
  this.revert(false);
132
- Object.keys(values).forEach( // @ts-ignore
111
+ Object.keys(values).forEach(
112
+ // @ts-ignore
133
113
  function (key) {
134
114
  return values[key] !== 0 && _this2[key] && _this2[key](values[key]);
135
- }); // @ts-ignore
136
-
115
+ });
116
+ // @ts-ignore
137
117
  this.render();
138
118
  component.setState({
139
119
  processing: false
@@ -151,7 +131,6 @@ var RenderForm = /*#__PURE__*/function (_React$Component) {
151
131
  });
152
132
  return _this;
153
133
  }
154
-
155
134
  (0, _createClass2.default)(RenderForm, [{
156
135
  key: "componentDidMount",
157
136
  value: function componentDidMount() {
@@ -161,7 +140,6 @@ var RenderForm = /*#__PURE__*/function (_React$Component) {
161
140
  key: "render",
162
141
  value: function render() {
163
142
  var _this3 = this;
164
-
165
143
  return /*#__PURE__*/_react.default.createElement(Wrapper, null, /*#__PURE__*/_react.default.createElement("ul", null, sliders.map(function (props) {
166
144
  return /*#__PURE__*/_react.default.createElement("li", {
167
145
  key: props.key
@@ -191,9 +169,7 @@ var RenderForm = /*#__PURE__*/function (_React$Component) {
191
169
  processing: true
192
170
  }, function () {
193
171
  _this3.resetFiltersValues();
194
-
195
172
  _this3.applyFilters();
196
-
197
173
  _this3.setState({
198
174
  processing: false
199
175
  });
@@ -204,7 +180,6 @@ var RenderForm = /*#__PURE__*/function (_React$Component) {
204
180
  }]);
205
181
  return RenderForm;
206
182
  }(_react.default.Component);
207
-
208
183
  var tool = {
209
184
  name: "filter",
210
185
  icon: function icon(_ref) {
@@ -228,8 +203,8 @@ var tool = {
228
203
  // @ts-ignore
229
204
  Caman(canvas.current, function () {
230
205
  // @ts-ignore
231
- this.revert(false); // @ts-ignore
232
-
206
+ this.revert(false);
207
+ // @ts-ignore
233
208
  this.render();
234
209
  });
235
210
  }
@@ -1 +1 @@
1
- {"version":3,"names":["Wrapper","styled","ul","textAlign","li","display","width","padding","sliders","key","label","min","RenderForm","processing","values","canvas","props","state","component","Caman","current","revert","Object","keys","forEach","render","setState","reduce","output","resetFiltersValues","map","value","applyFilters","React","Component","tool","name","icon","activateTool","renderForm","cancel"],"sources":["filter.tsx"],"sourcesContent":["/**\n * When using Caman, we added @ts-ignore because it does not exist in packages, but it is loaded in packages/ui/src/ImageEditor/ImageEditor.tsx:38.\n * TODO: use some other library to edit images\n */\nimport React from \"react\";\nimport { ReactComponent as FilterIcon } from \"./icons/filter.svg\";\nimport { Slider } from \"~/Slider\";\nimport { ImageEditorTool } from \"./types\";\nimport { IconButton, ButtonDefault } from \"~/Button\";\nimport { Tooltip } from \"~/Tooltip\";\nimport { debounce } from \"lodash\";\nimport styled from \"@emotion/styled\";\n\ninterface RenderFormState {\n values: Record<string, any>;\n processing: boolean;\n}\n\ninterface RenderFormProps {\n canvas: any;\n renderApplyCancel?: Function;\n}\n\nconst Wrapper = styled(\"div\")({\n ul: {\n textAlign: \"center\",\n li: {\n display: \"inline-block\",\n width: 180,\n padding: 10\n }\n },\n \".buttons\": {\n textAlign: \"center\"\n }\n});\n\nconst sliders = [\n {\n key: \"brightness\",\n label: \"Brightness\",\n min: -100\n },\n {\n key: \"vibrance\",\n label: \"Vibrance\",\n min: -100\n },\n {\n key: \"hue\",\n label: \"Hue\",\n min: -100\n },\n {\n key: \"gamma\",\n label: \"Gamma\"\n },\n {\n key: \"clip\",\n label: \"Clip\"\n },\n {\n key: \"stackBlur\",\n label: \"Blur\"\n },\n {\n key: \"contrast\",\n label: \"Contrast\",\n min: -100\n },\n {\n key: \"saturation\",\n label: \"Saturation\",\n min: -100\n },\n {\n key: \"exposure\",\n label: \"Exposure\",\n min: -100\n },\n {\n key: \"sepia\",\n label: \"Sepia\"\n },\n {\n key: \"noise\",\n label: \"Noise\"\n },\n {\n key: \"sharpen\",\n label: \"Sharpen\"\n }\n];\n\nclass RenderForm extends React.Component<RenderFormProps, RenderFormState> {\n public override state: RenderFormState = {\n processing: false,\n values: {}\n };\n\n public override componentDidMount() {\n this.resetFiltersValues();\n }\n\n private readonly applyFilters = debounce(() => {\n const { canvas } = this.props;\n const { values } = this.state;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const component = this;\n\n // @ts-ignore\n Caman(canvas.current, function () {\n // @ts-ignore\n this.revert(false);\n Object.keys(values).forEach(\n // @ts-ignore\n key => values[key] !== 0 && this[key] && this[key](values[key])\n );\n // @ts-ignore\n this.render();\n component.setState({ processing: false });\n });\n }, 200);\n\n private readonly resetFiltersValues = () => {\n this.setState(state => {\n sliders.reduce((output, current) => {\n state.values[current.key] = 0;\n return output;\n }, {});\n\n return state;\n });\n };\n\n public override render() {\n return (\n <Wrapper>\n <ul>\n {sliders.map(props => (\n <li key={props.key}>\n <Slider\n value={this.state.values[props.key]}\n min={0}\n max={100}\n disabled={this.state.processing}\n onInput={(value: string) => {\n this.setState(state => {\n const values = { ...state.values };\n values[props.key] = value;\n\n return { ...state, processing: true, values };\n }, this.applyFilters);\n }}\n {...props}\n />\n </li>\n ))}\n </ul>\n\n <div style={{ textAlign: \"center\" }}>\n <ButtonDefault\n onClick={() => {\n this.setState({ processing: true }, () => {\n this.resetFiltersValues();\n this.applyFilters();\n this.setState({ processing: false });\n });\n }}\n >\n Reset filters\n </ButtonDefault>\n </div>\n </Wrapper>\n );\n }\n}\n\nconst tool: ImageEditorTool = {\n name: \"filter\",\n icon({ activateTool }) {\n return (\n <Tooltip placement={\"bottom\"} content={\"Filter\"}>\n <IconButton\n icon={<FilterIcon />}\n onClick={() => activateTool(\"filter\")}\n data-testid={\"filter-item\"}\n />\n </Tooltip>\n );\n },\n renderForm(props) {\n return <RenderForm {...props} />;\n },\n cancel: ({ canvas }) => {\n // @ts-ignore\n Caman(canvas.current, function () {\n // @ts-ignore\n this.revert(false);\n // @ts-ignore\n this.render();\n });\n }\n};\n\nexport default tool;\n"],"mappings":"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"}
1
+ {"version":3,"names":["Wrapper","styled","ul","textAlign","li","display","width","padding","sliders","key","label","min","RenderForm","processing","values","canvas","props","state","component","Caman","current","revert","Object","keys","forEach","render","setState","reduce","output","resetFiltersValues","map","value","applyFilters","React","Component","tool","name","icon","activateTool","renderForm","cancel"],"sources":["filter.tsx"],"sourcesContent":["/**\n * When using Caman, we added @ts-ignore because it does not exist in packages, but it is loaded in packages/ui/src/ImageEditor/ImageEditor.tsx:38.\n * TODO: use some other library to edit images\n */\nimport React from \"react\";\nimport { ReactComponent as FilterIcon } from \"./icons/filter.svg\";\nimport { Slider } from \"~/Slider\";\nimport { ImageEditorTool } from \"./types\";\nimport { IconButton, ButtonDefault } from \"~/Button\";\nimport { Tooltip } from \"~/Tooltip\";\nimport { debounce } from \"lodash\";\nimport styled from \"@emotion/styled\";\n\ninterface RenderFormState {\n values: Record<string, any>;\n processing: boolean;\n}\n\ninterface RenderFormProps {\n canvas: any;\n renderApplyCancel?: Function;\n}\n\nconst Wrapper = styled(\"div\")({\n ul: {\n textAlign: \"center\",\n li: {\n display: \"inline-block\",\n width: 180,\n padding: 10\n }\n },\n \".buttons\": {\n textAlign: \"center\"\n }\n});\n\nconst sliders = [\n {\n key: \"brightness\",\n label: \"Brightness\",\n min: -100\n },\n {\n key: \"vibrance\",\n label: \"Vibrance\",\n min: -100\n },\n {\n key: \"hue\",\n label: \"Hue\",\n min: -100\n },\n {\n key: \"gamma\",\n label: \"Gamma\"\n },\n {\n key: \"clip\",\n label: \"Clip\"\n },\n {\n key: \"stackBlur\",\n label: \"Blur\"\n },\n {\n key: \"contrast\",\n label: \"Contrast\",\n min: -100\n },\n {\n key: \"saturation\",\n label: \"Saturation\",\n min: -100\n },\n {\n key: \"exposure\",\n label: \"Exposure\",\n min: -100\n },\n {\n key: \"sepia\",\n label: \"Sepia\"\n },\n {\n key: \"noise\",\n label: \"Noise\"\n },\n {\n key: \"sharpen\",\n label: \"Sharpen\"\n }\n];\n\nclass RenderForm extends React.Component<RenderFormProps, RenderFormState> {\n public override state: RenderFormState = {\n processing: false,\n values: {}\n };\n\n public override componentDidMount() {\n this.resetFiltersValues();\n }\n\n private readonly applyFilters = debounce(() => {\n const { canvas } = this.props;\n const { values } = this.state;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const component = this;\n\n // @ts-ignore\n Caman(canvas.current, function () {\n // @ts-ignore\n this.revert(false);\n Object.keys(values).forEach(\n // @ts-ignore\n key => values[key] !== 0 && this[key] && this[key](values[key])\n );\n // @ts-ignore\n this.render();\n component.setState({ processing: false });\n });\n }, 200);\n\n private readonly resetFiltersValues = () => {\n this.setState(state => {\n sliders.reduce((output, current) => {\n state.values[current.key] = 0;\n return output;\n }, {});\n\n return state;\n });\n };\n\n public override render() {\n return (\n <Wrapper>\n <ul>\n {sliders.map(props => (\n <li key={props.key}>\n <Slider\n value={this.state.values[props.key]}\n min={0}\n max={100}\n disabled={this.state.processing}\n onInput={(value: string) => {\n this.setState(state => {\n const values = { ...state.values };\n values[props.key] = value;\n\n return { ...state, processing: true, values };\n }, this.applyFilters);\n }}\n {...props}\n />\n </li>\n ))}\n </ul>\n\n <div style={{ textAlign: \"center\" }}>\n <ButtonDefault\n onClick={() => {\n this.setState({ processing: true }, () => {\n this.resetFiltersValues();\n this.applyFilters();\n this.setState({ processing: false });\n });\n }}\n >\n Reset filters\n </ButtonDefault>\n </div>\n </Wrapper>\n );\n }\n}\n\nconst tool: ImageEditorTool = {\n name: \"filter\",\n icon({ activateTool }) {\n return (\n <Tooltip placement={\"bottom\"} content={\"Filter\"}>\n <IconButton\n icon={<FilterIcon />}\n onClick={() => activateTool(\"filter\")}\n data-testid={\"filter-item\"}\n />\n </Tooltip>\n );\n },\n renderForm(props) {\n return <RenderForm {...props} />;\n },\n cancel: ({ canvas }) => {\n // @ts-ignore\n Caman(canvas.current, function () {\n // @ts-ignore\n this.revert(false);\n // @ts-ignore\n this.render();\n });\n }\n};\n\nexport default tool;\n"],"mappings":";;;;;;;;;;;;;;;AAIA;AACA;AACA;AAEA;AACA;AAEA;AAXA;AACA;AACA;AACA;;AAoBA,IAAMA,OAAO,oBAAGC,eAAM,EAAC,KAAK;EAAA;EAAA;AAAA,GAAE;EAC1BC,EAAE,EAAE;IACAC,SAAS,EAAE,QAAQ;IACnBC,EAAE,EAAE;MACAC,OAAO,EAAE,cAAc;MACvBC,KAAK,EAAE,GAAG;MACVC,OAAO,EAAE;IACb;EACJ,CAAC;EACD,UAAU,EAAE;IACRJ,SAAS,EAAE;EACf;AACJ,CAAC,CAAC;AAEF,IAAMK,OAAO,GAAG,CACZ;EACIC,GAAG,EAAE,YAAY;EACjBC,KAAK,EAAE,YAAY;EACnBC,GAAG,EAAE,CAAC;AACV,CAAC,EACD;EACIF,GAAG,EAAE,UAAU;EACfC,KAAK,EAAE,UAAU;EACjBC,GAAG,EAAE,CAAC;AACV,CAAC,EACD;EACIF,GAAG,EAAE,KAAK;EACVC,KAAK,EAAE,KAAK;EACZC,GAAG,EAAE,CAAC;AACV,CAAC,EACD;EACIF,GAAG,EAAE,OAAO;EACZC,KAAK,EAAE;AACX,CAAC,EACD;EACID,GAAG,EAAE,MAAM;EACXC,KAAK,EAAE;AACX,CAAC,EACD;EACID,GAAG,EAAE,WAAW;EAChBC,KAAK,EAAE;AACX,CAAC,EACD;EACID,GAAG,EAAE,UAAU;EACfC,KAAK,EAAE,UAAU;EACjBC,GAAG,EAAE,CAAC;AACV,CAAC,EACD;EACIF,GAAG,EAAE,YAAY;EACjBC,KAAK,EAAE,YAAY;EACnBC,GAAG,EAAE,CAAC;AACV,CAAC,EACD;EACIF,GAAG,EAAE,UAAU;EACfC,KAAK,EAAE,UAAU;EACjBC,GAAG,EAAE,CAAC;AACV,CAAC,EACD;EACIF,GAAG,EAAE,OAAO;EACZC,KAAK,EAAE;AACX,CAAC,EACD;EACID,GAAG,EAAE,OAAO;EACZC,KAAK,EAAE;AACX,CAAC,EACD;EACID,GAAG,EAAE,SAAS;EACdC,KAAK,EAAE;AACX,CAAC,CACJ;AAAC,IAEIE,UAAU;EAAA;EAAA;EAAA;IAAA;IAAA;IAAA;MAAA;IAAA;IAAA;IAAA,oFAC6B;MACrCC,UAAU,EAAE,KAAK;MACjBC,MAAM,EAAE,CAAC;IACb,CAAC;IAAA,2FAM+B,wBAAS,YAAM;MAC3C,IAAQC,MAAM,GAAK,MAAKC,KAAK,CAArBD,MAAM;MACd,IAAQD,MAAM,GAAK,MAAKG,KAAK,CAArBH,MAAM;MACd;MACA,IAAMI,SAAS,8CAAO;;MAEtB;MACAC,KAAK,CAACJ,MAAM,CAACK,OAAO,EAAE,YAAY;QAAA;QAC9B;QACA,IAAI,CAACC,MAAM,CAAC,KAAK,CAAC;QAClBC,MAAM,CAACC,IAAI,CAACT,MAAM,CAAC,CAACU,OAAO;QACvB;QACA,UAAAf,GAAG;UAAA,OAAIK,MAAM,CAACL,GAAG,CAAC,KAAK,CAAC,IAAI,MAAI,CAACA,GAAG,CAAC,IAAI,MAAI,CAACA,GAAG,CAAC,CAACK,MAAM,CAACL,GAAG,CAAC,CAAC;QAAA,EAClE;QACD;QACA,IAAI,CAACgB,MAAM,EAAE;QACbP,SAAS,CAACQ,QAAQ,CAAC;UAAEb,UAAU,EAAE;QAAM,CAAC,CAAC;MAC7C,CAAC,CAAC;IACN,CAAC,EAAE,GAAG,CAAC;IAAA,iGAE+B,YAAM;MACxC,MAAKa,QAAQ,CAAC,UAAAT,KAAK,EAAI;QACnBT,OAAO,CAACmB,MAAM,CAAC,UAACC,MAAM,EAAER,OAAO,EAAK;UAChCH,KAAK,CAACH,MAAM,CAACM,OAAO,CAACX,GAAG,CAAC,GAAG,CAAC;UAC7B,OAAOmB,MAAM;QACjB,CAAC,EAAE,CAAC,CAAC,CAAC;QAEN,OAAOX,KAAK;MAChB,CAAC,CAAC;IACN,CAAC;IAAA;EAAA;EAAA;IAAA;IAAA,OAjCD,6BAAoC;MAChC,IAAI,CAACY,kBAAkB,EAAE;IAC7B;EAAC;IAAA;IAAA,OAiCD,kBAAyB;MAAA;MACrB,oBACI,6BAAC,OAAO,qBACJ,yCACKrB,OAAO,CAACsB,GAAG,CAAC,UAAAd,KAAK;QAAA,oBACd;UAAI,GAAG,EAAEA,KAAK,CAACP;QAAI,gBACf,6BAAC,cAAM;UACH,KAAK,EAAE,MAAI,CAACQ,KAAK,CAACH,MAAM,CAACE,KAAK,CAACP,GAAG,CAAE;UACpC,GAAG,EAAE,CAAE;UACP,GAAG,EAAE,GAAI;UACT,QAAQ,EAAE,MAAI,CAACQ,KAAK,CAACJ,UAAW;UAChC,OAAO,EAAE,iBAACkB,KAAa,EAAK;YACxB,MAAI,CAACL,QAAQ,CAAC,UAAAT,KAAK,EAAI;cACnB,IAAMH,MAAM,mCAAQG,KAAK,CAACH,MAAM,CAAE;cAClCA,MAAM,CAACE,KAAK,CAACP,GAAG,CAAC,GAAGsB,KAAK;cAEzB,mEAAYd,KAAK;gBAAEJ,UAAU,EAAE,IAAI;gBAAEC,MAAM,EAANA;cAAM;YAC/C,CAAC,EAAE,MAAI,CAACkB,YAAY,CAAC;UACzB;QAAE,GACEhB,KAAK,EACX,CACD;MAAA,CACR,CAAC,CACD,eAEL;QAAK,KAAK,EAAE;UAAEb,SAAS,EAAE;QAAS;MAAE,gBAChC,6BAAC,qBAAa;QACV,OAAO,EAAE,mBAAM;UACX,MAAI,CAACuB,QAAQ,CAAC;YAAEb,UAAU,EAAE;UAAK,CAAC,EAAE,YAAM;YACtC,MAAI,CAACgB,kBAAkB,EAAE;YACzB,MAAI,CAACG,YAAY,EAAE;YACnB,MAAI,CAACN,QAAQ,CAAC;cAAEb,UAAU,EAAE;YAAM,CAAC,CAAC;UACxC,CAAC,CAAC;QACN;MAAE,GACL,eAED,CAAgB,CACd,CACA;IAElB;EAAC;EAAA;AAAA,EAjFoBoB,cAAK,CAACC,SAAS;AAoFxC,IAAMC,IAAqB,GAAG;EAC1BC,IAAI,EAAE,QAAQ;EACdC,IAAI,sBAAmB;IAAA,IAAhBC,YAAY,QAAZA,YAAY;IACf,oBACI,6BAAC,gBAAO;MAAC,SAAS,EAAE,QAAS;MAAC,OAAO,EAAE;IAAS,gBAC5C,6BAAC,kBAAU;MACP,IAAI,eAAE,6BAAC,sBAAU,OAAI;MACrB,OAAO,EAAE;QAAA,OAAMA,YAAY,CAAC,QAAQ,CAAC;MAAA,CAAC;MACtC,eAAa;IAAc,EAC7B,CACI;EAElB,CAAC;EACDC,UAAU,sBAACvB,KAAK,EAAE;IACd,oBAAO,6BAAC,UAAU,EAAKA,KAAK,CAAI;EACpC,CAAC;EACDwB,MAAM,EAAE,uBAAgB;IAAA,IAAbzB,MAAM,SAANA,MAAM;IACb;IACAI,KAAK,CAACJ,MAAM,CAACK,OAAO,EAAE,YAAY;MAC9B;MACA,IAAI,CAACC,MAAM,CAAC,KAAK,CAAC;MAClB;MACA,IAAI,CAACI,MAAM,EAAE;IACjB,CAAC,CAAC;EACN;AACJ,CAAC;AAAC,eAEaU,IAAI;AAAA"}
@@ -1,30 +1,21 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = void 0;
9
-
10
8
  var _react = _interopRequireDefault(require("react"));
11
-
12
9
  var _flip = require("./icons/flip.svg");
13
-
14
10
  var _cropperjs = _interopRequireDefault(require("cropperjs"));
15
-
16
11
  require("cropperjs/dist/cropper.css");
17
-
18
12
  var _Button = require("../../Button");
19
-
20
13
  var _Tooltip = require("../../Tooltip");
21
-
22
14
  var cropper;
23
15
  var flipped = {
24
16
  x: 1,
25
17
  y: 1
26
18
  };
27
-
28
19
  var renderForm = function renderForm() {
29
20
  return /*#__PURE__*/_react.default.createElement("div", {
30
21
  style: {
@@ -35,7 +26,6 @@ var renderForm = function renderForm() {
35
26
  if (!cropper) {
36
27
  return;
37
28
  }
38
-
39
29
  flipped.x = flipped.x === 1 ? -1 : 1;
40
30
  cropper.scaleX(flipped.x);
41
31
  }
@@ -44,13 +34,11 @@ var renderForm = function renderForm() {
44
34
  if (!cropper) {
45
35
  return;
46
36
  }
47
-
48
37
  flipped.y = flipped.y === 1 ? -1 : 1;
49
38
  cropper.scaleY(flipped.y);
50
39
  }
51
40
  }, "FlipY"));
52
41
  };
53
-
54
42
  var tool = {
55
43
  name: "flip",
56
44
  icon: function icon(_ref) {
@@ -88,14 +76,11 @@ var tool = {
88
76
  resolve();
89
77
  return;
90
78
  }
91
-
92
79
  var current = canvas.current;
93
80
  var src = cropper.getCroppedCanvas().toDataURL();
94
-
95
81
  if (current) {
96
82
  var image = new window.Image();
97
83
  var ctx = current.getContext("2d");
98
-
99
84
  image.onload = function () {
100
85
  ctx.drawImage(image, 0, 0);
101
86
  current.width = image.width;
@@ -103,10 +88,8 @@ var tool = {
103
88
  ctx.drawImage(image, 0, 0);
104
89
  resolve();
105
90
  };
106
-
107
91
  image.src = src;
108
92
  }
109
-
110
93
  cropper.destroy();
111
94
  });
112
95
  }
@@ -1 +1 @@
1
- {"version":3,"names":["cropper","flipped","x","y","renderForm","textAlign","scaleX","scaleY","tool","name","icon","activateTool","cancel","destroy","onActivate","canvas","Cropper","current","background","modal","guides","dragMode","highlight","autoCrop","apply","Promise","resolve","src","getCroppedCanvas","toDataURL","image","window","Image","ctx","getContext","onload","drawImage","width","height"],"sources":["flip.tsx"],"sourcesContent":["import React from \"react\";\nimport { ImageEditorTool } from \"./types\";\nimport { ReactComponent as FlipIcon } from \"./icons/flip.svg\";\nimport Cropper from \"cropperjs\";\nimport \"cropperjs/dist/cropper.css\";\n\nimport { IconButton, ButtonDefault } from \"../../Button\";\nimport { Tooltip } from \"~/Tooltip\";\n\nlet cropper: Cropper;\n\nconst flipped = { x: 1, y: 1 };\n\nconst renderForm = () => {\n return (\n <div style={{ textAlign: \"center\" }}>\n <ButtonDefault\n onClick={() => {\n if (!cropper) {\n return;\n }\n\n flipped.x = flipped.x === 1 ? -1 : 1;\n cropper.scaleX(flipped.x);\n }}\n >\n FlipX\n </ButtonDefault>\n <ButtonDefault\n onClick={() => {\n if (!cropper) {\n return;\n }\n\n flipped.y = flipped.y === 1 ? -1 : 1;\n cropper.scaleY(flipped.y);\n }}\n >\n FlipY\n </ButtonDefault>\n </div>\n );\n};\n\nconst tool: ImageEditorTool = {\n name: \"flip\",\n icon({ activateTool }) {\n return (\n <Tooltip placement={\"bottom\"} content={\"Flip\"}>\n <IconButton\n icon={<FlipIcon />}\n onClick={() => activateTool(\"flip\")}\n data-testid={\"flip-item\"}\n />\n </Tooltip>\n );\n },\n renderForm,\n cancel: () => cropper && cropper.destroy(),\n onActivate: ({ canvas }) => {\n cropper = new Cropper(canvas.current as HTMLCanvasElement, {\n background: false,\n modal: false,\n guides: false,\n dragMode: \"none\",\n highlight: false,\n autoCrop: false\n });\n },\n apply: ({ canvas }) => {\n return new Promise((resolve: any) => {\n if (!cropper) {\n resolve();\n return;\n }\n\n const current = canvas.current;\n const src = cropper.getCroppedCanvas().toDataURL();\n if (current) {\n const image = new window.Image();\n const ctx = current.getContext(\"2d\") as CanvasRenderingContext2D;\n image.onload = () => {\n ctx.drawImage(image, 0, 0);\n current.width = image.width;\n current.height = image.height;\n\n ctx.drawImage(image, 0, 0);\n resolve();\n };\n image.src = src;\n }\n\n cropper.destroy();\n });\n }\n};\n\nexport default tool;\n"],"mappings":"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"}
1
+ {"version":3,"names":["cropper","flipped","x","y","renderForm","textAlign","scaleX","scaleY","tool","name","icon","activateTool","cancel","destroy","onActivate","canvas","Cropper","current","background","modal","guides","dragMode","highlight","autoCrop","apply","Promise","resolve","src","getCroppedCanvas","toDataURL","image","window","Image","ctx","getContext","onload","drawImage","width","height"],"sources":["flip.tsx"],"sourcesContent":["import React from \"react\";\nimport { ImageEditorTool } from \"./types\";\nimport { ReactComponent as FlipIcon } from \"./icons/flip.svg\";\nimport Cropper from \"cropperjs\";\nimport \"cropperjs/dist/cropper.css\";\n\nimport { IconButton, ButtonDefault } from \"../../Button\";\nimport { Tooltip } from \"~/Tooltip\";\n\nlet cropper: Cropper;\n\nconst flipped = { x: 1, y: 1 };\n\nconst renderForm = () => {\n return (\n <div style={{ textAlign: \"center\" }}>\n <ButtonDefault\n onClick={() => {\n if (!cropper) {\n return;\n }\n\n flipped.x = flipped.x === 1 ? -1 : 1;\n cropper.scaleX(flipped.x);\n }}\n >\n FlipX\n </ButtonDefault>\n <ButtonDefault\n onClick={() => {\n if (!cropper) {\n return;\n }\n\n flipped.y = flipped.y === 1 ? -1 : 1;\n cropper.scaleY(flipped.y);\n }}\n >\n FlipY\n </ButtonDefault>\n </div>\n );\n};\n\nconst tool: ImageEditorTool = {\n name: \"flip\",\n icon({ activateTool }) {\n return (\n <Tooltip placement={\"bottom\"} content={\"Flip\"}>\n <IconButton\n icon={<FlipIcon />}\n onClick={() => activateTool(\"flip\")}\n data-testid={\"flip-item\"}\n />\n </Tooltip>\n );\n },\n renderForm,\n cancel: () => cropper && cropper.destroy(),\n onActivate: ({ canvas }) => {\n cropper = new Cropper(canvas.current as HTMLCanvasElement, {\n background: false,\n modal: false,\n guides: false,\n dragMode: \"none\",\n highlight: false,\n autoCrop: false\n });\n },\n apply: ({ canvas }) => {\n return new Promise((resolve: any) => {\n if (!cropper) {\n resolve();\n return;\n }\n\n const current = canvas.current;\n const src = cropper.getCroppedCanvas().toDataURL();\n if (current) {\n const image = new window.Image();\n const ctx = current.getContext(\"2d\") as CanvasRenderingContext2D;\n image.onload = () => {\n ctx.drawImage(image, 0, 0);\n current.width = image.width;\n current.height = image.height;\n\n ctx.drawImage(image, 0, 0);\n resolve();\n };\n image.src = src;\n }\n\n cropper.destroy();\n });\n }\n};\n\nexport default tool;\n"],"mappings":"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"}
@@ -51,19 +51,11 @@ Object.defineProperty(exports, "UndoIcon", {
51
51
  return _undo.ReactComponent;
52
52
  }
53
53
  });
54
-
55
54
  var _crop = require("./crop.svg");
56
-
57
55
  var _draw = require("./draw.svg");
58
-
59
56
  var _filter = require("./filter.svg");
60
-
61
57
  var _flip = require("./flip.svg");
62
-
63
58
  var _redo = require("./redo.svg");
64
-
65
59
  var _rotateLeft = require("./rotateLeft.svg");
66
-
67
60
  var _rotateRight = require("./rotateRight.svg");
68
-
69
61
  var _undo = require("./undo.svg");
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export { ReactComponent as CropIcon } from \"./crop.svg\";\nexport { ReactComponent as DrawIcon } from \"./draw.svg\";\nexport { ReactComponent as FilterIcon } from \"./filter.svg\";\nexport { ReactComponent as FlipIcon } from \"./flip.svg\";\nexport { ReactComponent as RedoIcon } from \"./redo.svg\";\nexport { ReactComponent as RotateLeftIcon } from \"./rotateLeft.svg\";\nexport { ReactComponent as RotateRightIcon } from \"./rotateRight.svg\";\nexport { ReactComponent as UndoIcon } from \"./undo.svg\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA"}
1
+ {"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export { ReactComponent as CropIcon } from \"./crop.svg\";\nexport { ReactComponent as DrawIcon } from \"./draw.svg\";\nexport { ReactComponent as FilterIcon } from \"./filter.svg\";\nexport { ReactComponent as FlipIcon } from \"./flip.svg\";\nexport { ReactComponent as RedoIcon } from \"./redo.svg\";\nexport { ReactComponent as RotateLeftIcon } from \"./rotateLeft.svg\";\nexport { ReactComponent as RotateRightIcon } from \"./rotateRight.svg\";\nexport { ReactComponent as UndoIcon } from \"./undo.svg\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA"}
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
@@ -29,11 +28,7 @@ Object.defineProperty(exports, "rotate", {
29
28
  return _rotate.default;
30
29
  }
31
30
  });
32
-
33
31
  var _crop = _interopRequireDefault(require("./crop"));
34
-
35
32
  var _flip = _interopRequireDefault(require("./flip"));
36
-
37
33
  var _filter = _interopRequireDefault(require("./filter"));
38
-
39
34
  var _rotate = _interopRequireDefault(require("./rotate"));
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export { default as crop } from \"./crop\";\nexport { default as flip } from \"./flip\";\nexport { default as filter } from \"./filter\";\nexport { default as rotate } from \"./rotate\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA"}
1
+ {"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export { default as crop } from \"./crop\";\nexport { default as flip } from \"./flip\";\nexport { default as filter } from \"./filter\";\nexport { default as rotate } from \"./rotate\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA"}