@solostylist/image-editor 1.0.8 → 1.0.10

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 (270) hide show
  1. package/lib/actions/add-filter.js +11 -1
  2. package/lib/actions/change-pointer-icon.js +10 -1
  3. package/lib/actions/change-rotation.js +13 -1
  4. package/lib/actions/clear-annotations-selections.js +10 -1
  5. package/lib/actions/duplicate-annotations.js +26 -1
  6. package/lib/actions/enable-text-content-edit.js +10 -1
  7. package/lib/actions/hide-loader.js +10 -1
  8. package/lib/actions/index.js +36 -1
  9. package/lib/actions/redo.js +27 -1
  10. package/lib/actions/remove-annotations.js +27 -1
  11. package/lib/actions/reset.js +26 -1
  12. package/lib/actions/select-annotation.js +27 -1
  13. package/lib/actions/select-tab.js +16 -1
  14. package/lib/actions/select-tool.js +11 -1
  15. package/lib/actions/set-annotation.js +28 -1
  16. package/lib/actions/set-canvas-size.js +31 -1
  17. package/lib/actions/set-crop.js +25 -1
  18. package/lib/actions/set-feedback.js +11 -1
  19. package/lib/actions/set-finetune.js +13 -1
  20. package/lib/actions/set-latest-color.js +10 -1
  21. package/lib/actions/set-original-image.js +13 -1
  22. package/lib/actions/set-resize.js +14 -1
  23. package/lib/actions/set-saved.js +10 -1
  24. package/lib/actions/set-saving.js +11 -1
  25. package/lib/actions/set-show-tabs-menu.js +10 -1
  26. package/lib/actions/set-shown-image-dimensions.js +12 -1
  27. package/lib/actions/show-loader.js +10 -1
  28. package/lib/actions/toggle-flip.js +13 -1
  29. package/lib/actions/toggle-original-image-display.js +10 -1
  30. package/lib/actions/undo.js +27 -1
  31. package/lib/actions/update-state.js +7 -1
  32. package/lib/actions/zoom-canvas.js +37 -1
  33. package/lib/components/app/index.js +283 -1
  34. package/lib/components/assembly-point/index.js +23 -1
  35. package/lib/components/common/annotation-options/annotation-options.constants.js +10 -1
  36. package/lib/components/common/annotation-options/index.js +140 -1
  37. package/lib/components/common/annotation-options/opacity-field.js +23 -1
  38. package/lib/components/common/annotation-options/position-fields.js +39 -1
  39. package/lib/components/common/annotation-options/shadow-fields.js +62 -1
  40. package/lib/components/common/annotation-options/stroke-fields.js +33 -1
  41. package/lib/components/common/button-with-menu/index.js +86 -1
  42. package/lib/components/common/color-input/index.js +101 -1
  43. package/lib/components/common/color-picker-modal/index.js +70 -1
  44. package/lib/components/common/hidden-upload-input/index.js +17 -1
  45. package/lib/components/common/icon-wrapper/index.js +40 -1
  46. package/lib/components/common/image-preview-tile/index.js +57 -1
  47. package/lib/components/common/slider/index.js +38 -1
  48. package/lib/components/feedback-popup/index.js +41 -1
  49. package/lib/components/layers/design-layer/annotation-nodes/annotation-nodes.constants.js +10 -1
  50. package/lib/components/layers/design-layer/annotation-nodes/arrow-node.js +62 -1
  51. package/lib/components/layers/design-layer/annotation-nodes/ellipse-node.js +64 -1
  52. package/lib/components/layers/design-layer/annotation-nodes/image-node.js +78 -1
  53. package/lib/components/layers/design-layer/annotation-nodes/index.js +22 -1
  54. package/lib/components/layers/design-layer/annotation-nodes/line-node.js +60 -1
  55. package/lib/components/layers/design-layer/annotation-nodes/memoized-annotation.js +16 -1
  56. package/lib/components/layers/design-layer/annotation-nodes/polygon-node.js +63 -1
  57. package/lib/components/layers/design-layer/annotation-nodes/rect-node.js +65 -1
  58. package/lib/components/layers/design-layer/annotation-nodes/text-node.js +80 -1
  59. package/lib/components/layers/design-layer/index.js +202 -1
  60. package/lib/components/layers/design-layer/nodes-common-prop-types.js +16 -1
  61. package/lib/components/layers/design-layer/preview-group.js +9 -1
  62. package/lib/components/layers/index.js +2 -1
  63. package/lib/components/layers/transformers-layer/crop-transformer.js +248 -1
  64. package/lib/components/layers/transformers-layer/index.js +16 -1
  65. package/lib/components/layers/transformers-layer/nodes-transformer.js +73 -1
  66. package/lib/components/layers/transformers-layer/transformers-layer.utils.js +93 -1
  67. package/lib/components/main-canvas/canvas-node.js +177 -1
  68. package/lib/components/main-canvas/index.js +51 -1
  69. package/lib/components/main-canvas/touch-zooming-events.js +69 -1
  70. package/lib/components/node-controls/index.js +79 -1
  71. package/lib/components/tabs/index.js +66 -1
  72. package/lib/components/tabs/tabs.constants.js +27 -1
  73. package/lib/components/tabs-drawer/index.js +109 -1
  74. package/lib/components/tools/arrow/arrow-button.js +17 -1
  75. package/lib/components/tools/arrow/arrow-options.js +19 -1
  76. package/lib/components/tools/arrow/index.js +2 -1
  77. package/lib/components/tools/blur/blur-options.js +35 -1
  78. package/lib/components/tools/blur/blur.js +17 -1
  79. package/lib/components/tools/blur/index.js +2 -1
  80. package/lib/components/tools/brightness/brightness-options.js +36 -1
  81. package/lib/components/tools/brightness/brightness.js +17 -1
  82. package/lib/components/tools/brightness/index.js +2 -1
  83. package/lib/components/tools/contrast/contrast-options.js +35 -1
  84. package/lib/components/tools/contrast/contrast.js +17 -1
  85. package/lib/components/tools/contrast/index.js +2 -1
  86. package/lib/components/tools/crop/crop.constants.js +31 -1
  87. package/lib/components/tools/crop/crop.js +122 -1
  88. package/lib/components/tools/crop/index.js +1 -1
  89. package/lib/components/tools/ellipse/ellipse-button.js +17 -1
  90. package/lib/components/tools/ellipse/ellipse-options.js +17 -1
  91. package/lib/components/tools/ellipse/index.js +2 -1
  92. package/lib/components/tools/filters/filter-item.js +77 -1
  93. package/lib/components/tools/filters/filters.constants.js +139 -1
  94. package/lib/components/tools/filters/filters.js +74 -1
  95. package/lib/components/tools/filters/index.js +1 -1
  96. package/lib/components/tools/flip/flip-x.js +48 -1
  97. package/lib/components/tools/flip/flip-y.js +50 -1
  98. package/lib/components/tools/flip/index.js +2 -1
  99. package/lib/components/tools/hsv/hsv.js +17 -1
  100. package/lib/components/tools/hsv/hsvoptions.js +60 -1
  101. package/lib/components/tools/hsv/index.js +2 -1
  102. package/lib/components/tools/image/image-button.js +17 -1
  103. package/lib/components/tools/image/image-controls.js +12 -1
  104. package/lib/components/tools/image/image-options.js +162 -1
  105. package/lib/components/tools/image/images-gallery.js +55 -1
  106. package/lib/components/tools/image/index.js +2 -1
  107. package/lib/components/tools/line/index.js +2 -1
  108. package/lib/components/tools/line/line-button.js +17 -1
  109. package/lib/components/tools/line/line-options.js +19 -1
  110. package/lib/components/tools/pen/index.js +2 -1
  111. package/lib/components/tools/pen/pen-button.js +17 -1
  112. package/lib/components/tools/pen/pen-options.js +120 -1
  113. package/lib/components/tools/polygon/index.js +2 -1
  114. package/lib/components/tools/polygon/polygon-button.js +17 -1
  115. package/lib/components/tools/polygon/polygon-options.js +22 -1
  116. package/lib/components/tools/polygon/polygon-sides-field.js +23 -1
  117. package/lib/components/tools/polygon/polygon.constants.js +10 -1
  118. package/lib/components/tools/rect/index.js +2 -1
  119. package/lib/components/tools/rect/rect-button.js +17 -1
  120. package/lib/components/tools/rect/rect-corner-field.js +24 -1
  121. package/lib/components/tools/rect/rect-options.js +21 -1
  122. package/lib/components/tools/rect/rect.constants.js +10 -1
  123. package/lib/components/tools/resize/index.js +1 -1
  124. package/lib/components/tools/resize/resize.js +141 -1
  125. package/lib/components/tools/rotate/index.js +2 -1
  126. package/lib/components/tools/rotate/rotate-button.js +17 -1
  127. package/lib/components/tools/rotate/rotate-options.js +97 -1
  128. package/lib/components/tools/text/index.js +2 -1
  129. package/lib/components/tools/text/text-button.js +17 -1
  130. package/lib/components/tools/text/text-options/handle-text-change-area.js +122 -1
  131. package/lib/components/tools/text/text-options/index.js +17 -1
  132. package/lib/components/tools/text/text-options/text-alignment-fields.js +38 -1
  133. package/lib/components/tools/text/text-options/text-controls.js +147 -1
  134. package/lib/components/tools/text/text-options/text-options.constants.js +16 -1
  135. package/lib/components/tools/text/text-options/text-spacings-fields.js +34 -1
  136. package/lib/components/tools/tools.constants.js +98 -1
  137. package/lib/components/tools/warmth/index.js +2 -1
  138. package/lib/components/tools/warmth/warmth-options.js +35 -1
  139. package/lib/components/tools/warmth/warmth.js +17 -1
  140. package/lib/components/tools/watermark/index.js +1 -1
  141. package/lib/components/tools/watermark/watermark-padding.js +59 -1
  142. package/lib/components/tools/watermark/watermark.js +221 -1
  143. package/lib/components/tools/watermark/watermarks-gallery.js +77 -1
  144. package/lib/components/tools-bar/index.js +113 -1
  145. package/lib/components/tools-bar/tools-bar-item-button.js +39 -1
  146. package/lib/components/topbar/canvas-zooming.js +119 -1
  147. package/lib/components/topbar/confirmation-modal.js +53 -1
  148. package/lib/components/topbar/image-dimensions-and-display-toggle.js +68 -1
  149. package/lib/components/topbar/index.js +47 -1
  150. package/lib/components/topbar/redo-button.js +25 -1
  151. package/lib/components/topbar/reset-button.js +21 -1
  152. package/lib/components/topbar/save-button.js +251 -1
  153. package/lib/components/topbar/topbar.constants.js +31 -1
  154. package/lib/components/topbar/undo-button.js +27 -1
  155. package/lib/context/app-context.js +3 -1
  156. package/lib/context/app-provider-overriden-value.js +9 -1
  157. package/lib/context/app-provider.js +48 -1
  158. package/lib/context/app-reducer.js +5 -1
  159. package/lib/context/default-config.js +75 -1
  160. package/lib/context/default-translations.js +115 -1
  161. package/lib/context/get-initial-app-state.js +61 -1
  162. package/lib/context/index.js +4 -1
  163. package/lib/custom/filters/aden.js +8 -1
  164. package/lib/custom/filters/amaro.js +8 -1
  165. package/lib/custom/filters/ashby.js +8 -1
  166. package/lib/custom/filters/base-filters.js +82 -1
  167. package/lib/custom/filters/black-and-white.js +11 -1
  168. package/lib/custom/filters/brannan.js +8 -1
  169. package/lib/custom/filters/brooklyn.js +8 -1
  170. package/lib/custom/filters/charmes.js +8 -1
  171. package/lib/custom/filters/clarendon.js +9 -1
  172. package/lib/custom/filters/crema.js +8 -1
  173. package/lib/custom/filters/dogpatch.js +8 -1
  174. package/lib/custom/filters/earlybird.js +7 -1
  175. package/lib/custom/filters/gingham.js +8 -1
  176. package/lib/custom/filters/ginza.js +8 -1
  177. package/lib/custom/filters/hefe.js +8 -1
  178. package/lib/custom/filters/helena.js +8 -1
  179. package/lib/custom/filters/hudson.js +9 -1
  180. package/lib/custom/filters/index.js +40 -1
  181. package/lib/custom/filters/juno.js +8 -1
  182. package/lib/custom/filters/kelvin.js +9 -1
  183. package/lib/custom/filters/lark.js +9 -1
  184. package/lib/custom/filters/lo-fi.js +8 -1
  185. package/lib/custom/filters/ludwig.js +8 -1
  186. package/lib/custom/filters/maven.js +9 -1
  187. package/lib/custom/filters/mayfair.js +8 -1
  188. package/lib/custom/filters/moon.js +7 -1
  189. package/lib/custom/filters/nashville.js +8 -1
  190. package/lib/custom/filters/ninteen-seventy-seven.js +8 -1
  191. package/lib/custom/filters/perpetua.js +7 -1
  192. package/lib/custom/filters/reyes.js +9 -1
  193. package/lib/custom/filters/rise.js +9 -1
  194. package/lib/custom/filters/sierra.js +8 -1
  195. package/lib/custom/filters/skyline.js +8 -1
  196. package/lib/custom/filters/slumber.js +8 -1
  197. package/lib/custom/filters/stinson.js +8 -1
  198. package/lib/custom/filters/sutro.js +8 -1
  199. package/lib/custom/filters/toaster.js +8 -1
  200. package/lib/custom/filters/valencia.js +9 -1
  201. package/lib/custom/filters/vesper.js +9 -1
  202. package/lib/custom/filters/walden.js +8 -1
  203. package/lib/custom/filters/willow.js +8 -1
  204. package/lib/custom/filters/xpro2.js +9 -1
  205. package/lib/custom/finetunes/custom-threshold.js +19 -1
  206. package/lib/custom/finetunes/index.js +2 -1
  207. package/lib/custom/finetunes/warmth.js +15 -1
  208. package/lib/demo/app.js +175 -1
  209. package/lib/demo/index.js +1 -1
  210. package/lib/hooks/index.js +12 -1
  211. package/lib/hooks/use-annotation/get-bounding-rect-un-scaled.js +14 -1
  212. package/lib/hooks/use-annotation/get-new-annotation-preview.js +83 -1
  213. package/lib/hooks/use-annotation/index.js +138 -1
  214. package/lib/hooks/use-annotation/preview-then-call-annotation-adding.js +159 -1
  215. package/lib/hooks/use-annotation-events.js +83 -1
  216. package/lib/hooks/use-app-reducer.js +53 -1
  217. package/lib/hooks/use-debounced-callback.js +7 -1
  218. package/lib/hooks/use-drag.js +37 -1
  219. package/lib/hooks/use-filter.js +20 -1
  220. package/lib/hooks/use-finetune.js +31 -1
  221. package/lib/hooks/use-phone-screen.js +5 -1
  222. package/lib/hooks/use-popover.js +27 -1
  223. package/lib/hooks/use-resize-observer.js +60 -1
  224. package/lib/hooks/use-store.js +6 -1
  225. package/lib/hooks/use-transformed-img-data.js +156 -1
  226. package/lib/hooks/use-update-effect.js +18 -1
  227. package/lib/index.d.ts +2 -2
  228. package/lib/index.d.ts.map +1 -1
  229. package/lib/index.js +4 -1
  230. package/lib/types/actions.js +31 -1
  231. package/lib/types/annotations.js +42 -1
  232. package/lib/types/common.js +1 -1
  233. package/lib/types/config.js +34 -1
  234. package/lib/types/index.js +5 -1
  235. package/lib/types/state.js +1 -1
  236. package/lib/utils/assign-finetune-names-to-konva.js +7 -1
  237. package/lib/utils/calculate-zoom-data.js +36 -1
  238. package/lib/utils/compare-ratios.js +5 -1
  239. package/lib/utils/constants.js +84 -1
  240. package/lib/utils/crop-image.js +10 -1
  241. package/lib/utils/debounce.js +19 -1
  242. package/lib/utils/deep-merge.js +26 -1
  243. package/lib/utils/extract-current-design-state.js +15 -1
  244. package/lib/utils/extract-name-from-url.js +5 -1
  245. package/lib/utils/filter-str-to-class.js +9 -1
  246. package/lib/utils/finetunes-strs-to-classes.js +13 -1
  247. package/lib/utils/get-center-rotated-point.js +34 -1
  248. package/lib/utils/get-default-save-quality.js +5 -1
  249. package/lib/utils/get-dimensions-minimal-ratio.js +6 -1
  250. package/lib/utils/get-elem-document-coords.js +24 -1
  251. package/lib/utils/get-file-full-name.js +21 -1
  252. package/lib/utils/get-pointer-offset-position-bounded-to-object.js +26 -1
  253. package/lib/utils/get-proper-dimensions.js +21 -1
  254. package/lib/utils/get-proper-image-to-canvas-spacing.js +6 -1
  255. package/lib/utils/get-scroll-offset.js +13 -1
  256. package/lib/utils/get-size-after-rotation.js +31 -1
  257. package/lib/utils/get-zoom-fit-factor.js +5 -1
  258. package/lib/utils/image-to-base64.js +12 -1
  259. package/lib/utils/is-default-zero-values-only.js +6 -1
  260. package/lib/utils/is-same-image.js +4 -1
  261. package/lib/utils/load-image.js +19 -1
  262. package/lib/utils/map-crop-box.js +16 -1
  263. package/lib/utils/map-number.js +4 -1
  264. package/lib/utils/map-position-string-to-point.js +92 -1
  265. package/lib/utils/random-id.js +5 -1
  266. package/lib/utils/restrict-number.js +7 -1
  267. package/lib/utils/serialize-design-state.js +62 -1
  268. package/lib/utils/to-precised-float.js +5 -1
  269. package/lib/utils/translator.js +14 -1
  270. package/package.json +1 -1
@@ -1 +1,93 @@
1
- import _defineProperty from"@babel/runtime/helpers/defineProperty";import _slicedToArray from"@babel/runtime/helpers/slicedToArray";function ownKeys(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function _objectSpread(a){for(var b,c=1;c<arguments.length;c++)b=null==arguments[c]?{}:arguments[c],c%2?ownKeys(Object(b),!0).forEach(function(c){_defineProperty(a,c,b[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(b)):ownKeys(Object(b)).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))});return a}import compareRatios from"utils/compare-ratios";import restrictNumber from"utils/restrict-number";import toPrecisedFloat from"utils/to-precised-float";export var boundDragging=function(a,b){var c=b.width-(2*a.radiusX||a.width),d=b.height-(2*a.radiusY||a.height);return{x:toPrecisedFloat(Math.min(Math.max(a.x,0),c)),y:toPrecisedFloat(Math.min(Math.max(a.y,0),d))}};export var getPositionByPlaceLabel=function(a,b,c){var d=a.split("-"),e=_slicedToArray(d,2),f=e[0],g=e[1],h={x:0,y:0};return"center"===f?h.y=b.height/2-c.height/2:"bottom"===f&&(h.y=b.height-c.height),"center"===g?h.x=b.width/2-c.width/2:"right"===g&&(h.x=b.width-c.width),h};export var boundResizing=function(a,b,c,d){var e=4<arguments.length&&void 0!==arguments[4]?arguments[4]:{},f={x:toPrecisedFloat(c.abstractX*c.scaledBy),y:toPrecisedFloat(c.abstractY*c.scaledBy),width:toPrecisedFloat(c.width*(e.noScale?1:c.scaledBy)),height:toPrecisedFloat(c.height*(e.noScale?1:c.scaledBy))},g=_objectSpread({},b);if(b.x<f.x&&(g.x=f.x,g.width=a.x-f.x+a.width),b.y<f.y&&(g.y=f.y,g.height=a.y-f.y+a.height),g.x+g.width>f.x+f.width&&(g.width=f.x+f.width-g.x),g.y+g.height>f.y+f.height&&(g.height=f.y+f.height-g.y),"number"==typeof d&&!compareRatios(g.width/g.height,d)){var h=g.height*d,i=g.width/d;toPrecisedFloat(g.y+i)<=f.y+f.height?g.height=i:g.width=h}if((e.minWidth&&g.width<=e.minWidth||e.maxWidth&&g.width>=e.maxWidth)&&(g.width=restrictNumber(g.width,e.minWidth,e.maxWidth),g.x=a.x,g.y=a.y,"number"==typeof d&&(g.height=g.width/d)),(e.minHeight&&b.height<=e.minHeight||e.maxHeight&&b.height>=e.maxHeight)&&(g.height=restrictNumber(g.height,e.minHeight,e.maxHeight),g.x=a.x,g.y=a.y,"number"==typeof d&&(g.width=g.height*d)),"string"==typeof e.lockCropAreaAt){var j=getPositionByPlaceLabel(e.lockCropAreaAt,f,g),k=j.x,l=j.y;g.x=k,g.y=l}return g};
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
4
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
5
+ import compareRatios from 'utils/compare-ratios';
6
+ import restrictNumber from 'utils/restrict-number';
7
+ import toPrecisedFloat from 'utils/to-precised-float';
8
+ export var boundDragging = function boundDragging(newDimensions, allowedArea) {
9
+ var maxAllowedX = allowedArea.width - (newDimensions.radiusX * 2 || newDimensions.width);
10
+ var maxAllowedY = allowedArea.height - (newDimensions.radiusY * 2 || newDimensions.height);
11
+ return {
12
+ x: toPrecisedFloat(Math.min(Math.max(newDimensions.x, 0), maxAllowedX)),
13
+ y: toPrecisedFloat(Math.min(Math.max(newDimensions.y, 0), maxAllowedY))
14
+ };
15
+ };
16
+ export var getPositionByPlaceLabel = function getPositionByPlaceLabel(position, allowedArea, currentDimensions) {
17
+ var _position$split = position.split('-'),
18
+ _position$split2 = _slicedToArray(_position$split, 2),
19
+ yPlace = _position$split2[0],
20
+ xPlace = _position$split2[1];
21
+ var newPosition = {
22
+ x: 0,
23
+ y: 0
24
+ };
25
+ if (yPlace === 'center') {
26
+ newPosition.y = allowedArea.height / 2 - currentDimensions.height / 2;
27
+ } else if (yPlace === 'bottom') {
28
+ newPosition.y = allowedArea.height - currentDimensions.height;
29
+ }
30
+ if (xPlace === 'center') {
31
+ newPosition.x = allowedArea.width / 2 - currentDimensions.width / 2;
32
+ } else if (xPlace === 'right') {
33
+ newPosition.x = allowedArea.width - currentDimensions.width;
34
+ }
35
+ return newPosition;
36
+ };
37
+ export var boundResizing = function boundResizing(oldDimensions, newDimensions, allowedArea, ratio) {
38
+ var cropRestrictions = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
39
+ var scaledAllowedArea = {
40
+ x: toPrecisedFloat(allowedArea.abstractX * allowedArea.scaledBy),
41
+ y: toPrecisedFloat(allowedArea.abstractY * allowedArea.scaledBy),
42
+ width: toPrecisedFloat(allowedArea.width * (cropRestrictions.noScale ? 1 : allowedArea.scaledBy)),
43
+ height: toPrecisedFloat(allowedArea.height * (cropRestrictions.noScale ? 1 : allowedArea.scaledBy))
44
+ };
45
+ var boundedDimensions = _objectSpread({}, newDimensions);
46
+ if (newDimensions.x < scaledAllowedArea.x) {
47
+ boundedDimensions.x = scaledAllowedArea.x;
48
+ boundedDimensions.width = oldDimensions.x - scaledAllowedArea.x + oldDimensions.width;
49
+ }
50
+ if (newDimensions.y < scaledAllowedArea.y) {
51
+ boundedDimensions.y = scaledAllowedArea.y;
52
+ boundedDimensions.height = oldDimensions.y - scaledAllowedArea.y + oldDimensions.height;
53
+ }
54
+ if (boundedDimensions.x + boundedDimensions.width > scaledAllowedArea.x + scaledAllowedArea.width) {
55
+ boundedDimensions.width = scaledAllowedArea.x + scaledAllowedArea.width - boundedDimensions.x;
56
+ }
57
+ if (boundedDimensions.y + boundedDimensions.height > scaledAllowedArea.y + scaledAllowedArea.height) {
58
+ boundedDimensions.height = scaledAllowedArea.y + scaledAllowedArea.height - boundedDimensions.y;
59
+ }
60
+ if (typeof ratio === 'number' && !compareRatios(boundedDimensions.width / boundedDimensions.height, ratio)) {
61
+ var ratioedBoundedWidth = boundedDimensions.height * ratio;
62
+ var ratioedBoundedHeight = boundedDimensions.width / ratio;
63
+ if (toPrecisedFloat(boundedDimensions.y + ratioedBoundedHeight) <= scaledAllowedArea.y + scaledAllowedArea.height) {
64
+ boundedDimensions.height = ratioedBoundedHeight;
65
+ } else {
66
+ boundedDimensions.width = ratioedBoundedWidth;
67
+ }
68
+ }
69
+ if (cropRestrictions.minWidth && boundedDimensions.width <= cropRestrictions.minWidth || cropRestrictions.maxWidth && boundedDimensions.width >= cropRestrictions.maxWidth) {
70
+ boundedDimensions.width = restrictNumber(boundedDimensions.width, cropRestrictions.minWidth, cropRestrictions.maxWidth);
71
+ boundedDimensions.x = oldDimensions.x;
72
+ boundedDimensions.y = oldDimensions.y;
73
+ if (typeof ratio === 'number') {
74
+ boundedDimensions.height = boundedDimensions.width / ratio;
75
+ }
76
+ }
77
+ if (cropRestrictions.minHeight && newDimensions.height <= cropRestrictions.minHeight || cropRestrictions.maxHeight && newDimensions.height >= cropRestrictions.maxHeight) {
78
+ boundedDimensions.height = restrictNumber(boundedDimensions.height, cropRestrictions.minHeight, cropRestrictions.maxHeight);
79
+ boundedDimensions.x = oldDimensions.x;
80
+ boundedDimensions.y = oldDimensions.y;
81
+ if (typeof ratio === 'number') {
82
+ boundedDimensions.width = boundedDimensions.height * ratio;
83
+ }
84
+ }
85
+ if (typeof cropRestrictions.lockCropAreaAt === 'string') {
86
+ var _getPositionByPlaceLa = getPositionByPlaceLabel(cropRestrictions.lockCropAreaAt, scaledAllowedArea, boundedDimensions),
87
+ x = _getPositionByPlaceLa.x,
88
+ y = _getPositionByPlaceLa.y;
89
+ boundedDimensions.x = x;
90
+ boundedDimensions.y = y;
91
+ }
92
+ return boundedDimensions;
93
+ };
@@ -1 +1,177 @@
1
- import _defineProperty from"@babel/runtime/helpers/defineProperty";import _slicedToArray from"@babel/runtime/helpers/slicedToArray";function ownKeys(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function _objectSpread(a){for(var b,c=1;c<arguments.length;c++)b=null==arguments[c]?{}:arguments[c],c%2?ownKeys(Object(b),!0).forEach(function(c){_defineProperty(a,c,b[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(b)):ownKeys(Object(b)).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))});return a}import Konva from"konva";import{memo,useCallback,useEffect,useMemo,useRef,useState}from"react";import{Stage,useStrictMode}from"react-konva";import{CHANGE_POINTER_ICON,CLEAR_ANNOTATIONS_SELECTIONS,ZOOM_CANVAS}from"actions";import{useStore}from"hooks";import{DEFAULT_ZOOM_FACTOR,POINTER_ICONS,TABS_IDS,TOOLS_IDS}from"utils/constants";import{endTouchesZooming,zoomOnTouchesMove}from"./touch-zooming-events";var ZOOM_DELTA_TO_SCALE_CONVERT_FACTOR=.006,CanvasNode=function(a){var b=a.children;useStrictMode(!0);var c=useRef(null),d=useStore(),f=d.dispatch,g=d.pointerCssIcon,h=d.tabId,i=d.toolId,j=d.canvasWidth,k=d.canvasHeight,l=d.canvasScale,m=d.selectionsIds,n=void 0===m?[]:m,o=d.zoom,p=void 0===o?{}:o,q=d.config,r=q.previewPixelRatio,s=q.disableZooming;Konva.pixelRatio=r;var t=DEFAULT_ZOOM_FACTOR,u=!s&&i!==TOOLS_IDS.CROP,v=useState(h!==TABS_IDS.ANNOTATE&&h!==TABS_IDS.WATERMARK&&p.factor>t),w=_slicedToArray(v,2),x=w[0],y=w[1],z=useMemo(function(){return{cursor:g===POINTER_ICONS.DEFAULT&&h===TABS_IDS.ANNOTATE?POINTER_ICONS.DRAW:g}},[h,g]),A=function(a){f({type:ZOOM_CANVAS,payload:a})},B=useCallback(function(a){var b;a.evt.preventDefault();var c=a.currentTarget;null===(b=c.container)||void 0===b||b.call(c).focus(),a.target instanceof Konva.Stage&&0<n.length&&f({type:CLEAR_ANNOTATIONS_SELECTIONS})},[n]),C=function(){return y(h!==TABS_IDS.ANNOTATE||h===TABS_IDS.WATERMARK)},D=function(a){("Space"===a.code||"Control"===a.key)&&!a.repeat&&p.factor>t&&u&&(a.preventDefault(),y(!0),f({type:CHANGE_POINTER_ICON,payload:{pointerCssIcon:POINTER_ICONS.DRAG}}))},E=function(a){"Space"===a.code&&(a.preventDefault(),C())},F=function(){c.current&&c.current.container().focus()};useEffect(function(){f({type:CHANGE_POINTER_ICON,payload:{pointerCssIcon:POINTER_ICONS[x?"DRAG":"DEFAULT"]}})},[x]),useEffect(function(){y(h!==TABS_IDS.ANNOTATE&&h!==TABS_IDS.WATERMARK&&p.factor>t);var a;return c.current&&(a=c.current.container(),a.addEventListener("mouseenter",F),a.addEventListener("keydown",D),a.addEventListener("keyup",E)),function(){a&&(a.removeEventListener("mouseenter",F),a.removeEventListener("keydown",D),a.removeEventListener("keyup",E))}},[h,p.factor,t]);var G=l*(u&&p.factor||t);return React.createElement(Stage,{tabIndex:-1,ref:c,width:j,height:k,scaleX:G,scaleY:G,x:u&&p.x||null,y:u&&p.y||null,zoomFactor:u&&p.factor||t,onWheel:u?function(a){a.evt.preventDefault();var b=a.currentTarget,c=b.getPointerPosition();if(c){var d=(p.factor||t)+a.evt.deltaY*-ZOOM_DELTA_TO_SCALE_CONVERT_FACTOR;A(_objectSpread(_objectSpread({},c),{},{factor:d}))}}:void 0,onTap:B,onClick:B,onTouchMove:u?function(a){return zoomOnTouchesMove(a,A)}:void 0,onDragStart:function(a){var b;1<(null===(b=a.evt.touches)||void 0===b?void 0:b.length)&&y(!1)},onTouchEnd:u?function(){endTouchesZooming(C)}:void 0,dragBoundFunc:function(a){var b=Math.min(0,Math.max(a.x,j*(1-p.factor))),c=Math.min(0,Math.max(a.y,k*(1-p.factor)));return{x:b,y:c}},draggable:u&&x,onDragEnd:function(a){a.currentTarget.draggable()&&"stage"===a.target.nodeType.toLowerCase()&&u&&x&&A({factor:p.factor,x:a.target.x(),y:a.target.y(),preparedDimensions:!0})},style:_objectSpread(_objectSpread({},z),{},{outline:"none",backgroundColor:"var(--s-palette-background-paper)"})},b)};export default memo(CanvasNode);
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
4
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
5
+ import Konva from 'konva';
6
+ import { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react';
7
+ import { Stage, useStrictMode } from 'react-konva';
8
+ import { CHANGE_POINTER_ICON, CLEAR_ANNOTATIONS_SELECTIONS, ZOOM_CANVAS } from 'actions';
9
+ import { useStore } from 'hooks';
10
+ import { DEFAULT_ZOOM_FACTOR, POINTER_ICONS, TABS_IDS, TOOLS_IDS } from 'utils/constants';
11
+ import { endTouchesZooming, zoomOnTouchesMove } from "./touch-zooming-events";
12
+ var ZOOM_DELTA_TO_SCALE_CONVERT_FACTOR = 0.006;
13
+ var CanvasNode = function CanvasNode(_ref) {
14
+ var children = _ref.children;
15
+ useStrictMode(true);
16
+ var canvasRef = useRef(null);
17
+ var _useStore = useStore(),
18
+ dispatch = _useStore.dispatch,
19
+ pointerCssIcon = _useStore.pointerCssIcon,
20
+ tabId = _useStore.tabId,
21
+ toolId = _useStore.toolId,
22
+ canvasWidth = _useStore.canvasWidth,
23
+ canvasHeight = _useStore.canvasHeight,
24
+ canvasScale = _useStore.canvasScale,
25
+ _useStore$selectionsI = _useStore.selectionsIds,
26
+ selectionsIds = _useStore$selectionsI === void 0 ? [] : _useStore$selectionsI,
27
+ _useStore$zoom = _useStore.zoom,
28
+ zoom = _useStore$zoom === void 0 ? {} : _useStore$zoom,
29
+ _useStore$config = _useStore.config,
30
+ previewPixelRatio = _useStore$config.previewPixelRatio,
31
+ disableZooming = _useStore$config.disableZooming;
32
+ Konva.pixelRatio = previewPixelRatio;
33
+ var defaultZoomFactor = DEFAULT_ZOOM_FACTOR;
34
+ var isZoomEnabled = !disableZooming && toolId !== TOOLS_IDS.CROP;
35
+ var _useState = useState(tabId !== TABS_IDS.ANNOTATE && tabId !== TABS_IDS.WATERMARK && zoom.factor > defaultZoomFactor),
36
+ _useState2 = _slicedToArray(_useState, 2),
37
+ isPanningEnabled = _useState2[0],
38
+ setIsPanningEnabled = _useState2[1];
39
+ var cursorStyle = useMemo(function () {
40
+ return {
41
+ cursor: pointerCssIcon === POINTER_ICONS.DEFAULT && tabId === TABS_IDS.ANNOTATE ? POINTER_ICONS.DRAW : pointerCssIcon
42
+ };
43
+ }, [tabId, pointerCssIcon]);
44
+ var saveZoom = function saveZoom(newZoomProps) {
45
+ dispatch({
46
+ type: ZOOM_CANVAS,
47
+ payload: newZoomProps
48
+ });
49
+ };
50
+ var handleCanvasDragEnd = function handleCanvasDragEnd(e) {
51
+ if (e.currentTarget.draggable() && e.target.nodeType.toLowerCase() === 'stage' && isZoomEnabled && isPanningEnabled) {
52
+ saveZoom({
53
+ factor: zoom.factor,
54
+ x: e.target.x(),
55
+ y: e.target.y(),
56
+ preparedDimensions: true
57
+ });
58
+ }
59
+ };
60
+ var clearSelections = useCallback(function (e) {
61
+ var _stage$container;
62
+ e.evt.preventDefault();
63
+ var stage = e.currentTarget;
64
+ (_stage$container = stage.container) === null || _stage$container === void 0 || _stage$container.call(stage).focus();
65
+ if (e.target instanceof Konva.Stage && selectionsIds.length > 0) {
66
+ dispatch({
67
+ type: CLEAR_ANNOTATIONS_SELECTIONS
68
+ });
69
+ }
70
+ }, [selectionsIds]);
71
+ var dragBoundFunc = function dragBoundFunc(pos) {
72
+ var x = Math.min(0, Math.max(pos.x, canvasWidth * (1 - zoom.factor)));
73
+ var y = Math.min(0, Math.max(pos.y, canvasHeight * (1 - zoom.factor)));
74
+ return {
75
+ x: x,
76
+ y: y
77
+ };
78
+ };
79
+ var handleZoom = function handleZoom(e) {
80
+ e.evt.preventDefault();
81
+ var stage = e.currentTarget;
82
+ var pointer = stage.getPointerPosition();
83
+ if (!pointer) return;
84
+ var newScale = (zoom.factor || defaultZoomFactor) + e.evt.deltaY * -ZOOM_DELTA_TO_SCALE_CONVERT_FACTOR;
85
+ saveZoom(_objectSpread(_objectSpread({}, pointer), {}, {
86
+ factor: newScale
87
+ }));
88
+ };
89
+ var preventDraggingIfMultiTouches = function preventDraggingIfMultiTouches(e) {
90
+ var _touches;
91
+ if (((_touches = e.evt.touches) === null || _touches === void 0 ? void 0 : _touches.length) > 1) {
92
+ setIsPanningEnabled(false);
93
+ }
94
+ };
95
+ var resetPanningAbility = function resetPanningAbility() {
96
+ return setIsPanningEnabled(tabId !== TABS_IDS.ANNOTATE || tabId === TABS_IDS.WATERMARK);
97
+ };
98
+ var endTouchesZoomingEnablePanning = function endTouchesZoomingEnablePanning() {
99
+ endTouchesZooming(resetPanningAbility);
100
+ };
101
+ var mapKeyboardKeys = function mapKeyboardKeys(e) {
102
+ if ((e.code === 'Space' || e.key === 'Control') && !e.repeat && zoom.factor > defaultZoomFactor && isZoomEnabled) {
103
+ e.preventDefault();
104
+ setIsPanningEnabled(true);
105
+ dispatch({
106
+ type: CHANGE_POINTER_ICON,
107
+ payload: {
108
+ pointerCssIcon: POINTER_ICONS.DRAG
109
+ }
110
+ });
111
+ }
112
+ };
113
+ var revertKeyboardKeysEffect = function revertKeyboardKeysEffect(e) {
114
+ if (e.code === 'Space') {
115
+ e.preventDefault();
116
+ resetPanningAbility();
117
+ }
118
+ };
119
+ var focusCanvasOnEnter = function focusCanvasOnEnter() {
120
+ if (canvasRef.current) {
121
+ canvasRef.current.container().focus();
122
+ }
123
+ };
124
+ useEffect(function () {
125
+ dispatch({
126
+ type: CHANGE_POINTER_ICON,
127
+ payload: {
128
+ pointerCssIcon: POINTER_ICONS[isPanningEnabled ? 'DRAG' : 'DEFAULT']
129
+ }
130
+ });
131
+ }, [isPanningEnabled]);
132
+ useEffect(function () {
133
+ setIsPanningEnabled(tabId !== TABS_IDS.ANNOTATE && tabId !== TABS_IDS.WATERMARK && zoom.factor > defaultZoomFactor);
134
+ var canvasContainer;
135
+ if (canvasRef.current) {
136
+ canvasContainer = canvasRef.current.container();
137
+ canvasContainer.addEventListener('mouseenter', focusCanvasOnEnter);
138
+ canvasContainer.addEventListener('keydown', mapKeyboardKeys);
139
+ canvasContainer.addEventListener('keyup', revertKeyboardKeysEffect);
140
+ }
141
+ return function () {
142
+ if (canvasContainer) {
143
+ canvasContainer.removeEventListener('mouseenter', focusCanvasOnEnter);
144
+ canvasContainer.removeEventListener('keydown', mapKeyboardKeys);
145
+ canvasContainer.removeEventListener('keyup', revertKeyboardKeysEffect);
146
+ }
147
+ };
148
+ }, [tabId, zoom.factor, defaultZoomFactor]);
149
+ var zoomedResponsiveCanvasScale = canvasScale * (isZoomEnabled && zoom.factor || defaultZoomFactor);
150
+ return React.createElement(Stage, {
151
+ tabIndex: -1,
152
+ ref: canvasRef,
153
+ width: canvasWidth,
154
+ height: canvasHeight,
155
+ scaleX: zoomedResponsiveCanvasScale,
156
+ scaleY: zoomedResponsiveCanvasScale,
157
+ x: isZoomEnabled && zoom.x || null,
158
+ y: isZoomEnabled && zoom.y || null,
159
+ zoomFactor: isZoomEnabled && zoom.factor || defaultZoomFactor,
160
+ onWheel: isZoomEnabled ? handleZoom : undefined,
161
+ onTap: clearSelections,
162
+ onClick: clearSelections,
163
+ onTouchMove: isZoomEnabled ? function (e) {
164
+ return zoomOnTouchesMove(e, saveZoom);
165
+ } : undefined,
166
+ onDragStart: preventDraggingIfMultiTouches,
167
+ onTouchEnd: isZoomEnabled ? endTouchesZoomingEnablePanning : undefined,
168
+ dragBoundFunc: dragBoundFunc,
169
+ draggable: isZoomEnabled && isPanningEnabled,
170
+ onDragEnd: handleCanvasDragEnd,
171
+ style: _objectSpread(_objectSpread({}, cursorStyle), {}, {
172
+ outline: 'none',
173
+ backgroundColor: 'var(--s-palette-background-paper)'
174
+ })
175
+ }, children);
176
+ };
177
+ export default memo(CanvasNode);
@@ -1 +1,51 @@
1
- import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import{useCallback,useEffect,useRef}from"react";import{Box}from"@mui/material";import{SET_CANVAS_SIZE}from"actions";import{DesignLayer,TransformersLayer}from"components/layers";import NodeControls from"components/node-controls";import{AppProviderOverridenValue}from"context";import{useResizeObserver,useStore}from"hooks";import CanvasNode from"./canvas-node";var MainCanvas=function(){var a,b=useResizeObserver(),c=_slicedToArray(b,1),d=c[0],e=useStore(),f=useRef(null),g=useCallback(function(a){var b=a.width,c=a.height;e.dispatch({type:SET_CANVAS_SIZE,payload:{canvasWidth:b,canvasHeight:c}})},[]);return useEffect(function(){d(f.current,g)},[]),React.createElement(Box,{height:"calc(100vh - 60px - 120px)",position:"relative",flexGrow:1,ref:f},!e.textIdOfEditableContent&&React.createElement(NodeControls,null),e.isShowOriginalImage&&React.createElement("img",{style:{maxWidth:"98%",maxHeight:"98%",position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",zIndex:2},src:null===(a=e.originalImage)||void 0===a?void 0:a.src}),React.createElement(CanvasNode,null,React.createElement(AppProviderOverridenValue,{overridingValue:e},React.createElement(DesignLayer,null),React.createElement(TransformersLayer,null))))};export default MainCanvas;
1
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
+ import { useCallback, useEffect, useRef } from 'react';
3
+ import { Box } from '@mui/material';
4
+ import { SET_CANVAS_SIZE } from 'actions';
5
+ import { DesignLayer, TransformersLayer } from 'components/layers';
6
+ import NodeControls from 'components/node-controls';
7
+ import { AppProviderOverridenValue } from 'context';
8
+ import { useResizeObserver, useStore } from 'hooks';
9
+ import CanvasNode from "./canvas-node";
10
+ var MainCanvas = function MainCanvas() {
11
+ var _providedAppContext$o;
12
+ var _useResizeObserver = useResizeObserver(),
13
+ _useResizeObserver2 = _slicedToArray(_useResizeObserver, 1),
14
+ observeResize = _useResizeObserver2[0];
15
+ var providedAppContext = useStore();
16
+ var canvasContainerRef = useRef(null);
17
+ var setNewCanvasSize = useCallback(function (_ref) {
18
+ var containerWidth = _ref.width,
19
+ containerHeight = _ref.height;
20
+ providedAppContext.dispatch({
21
+ type: SET_CANVAS_SIZE,
22
+ payload: {
23
+ canvasWidth: containerWidth,
24
+ canvasHeight: containerHeight
25
+ }
26
+ });
27
+ }, []);
28
+ useEffect(function () {
29
+ observeResize(canvasContainerRef.current, setNewCanvasSize);
30
+ }, []);
31
+ return React.createElement(Box, {
32
+ height: "calc(100vh - 60px - 120px)",
33
+ position: "relative",
34
+ flexGrow: 1,
35
+ ref: canvasContainerRef
36
+ }, !providedAppContext.textIdOfEditableContent && React.createElement(NodeControls, null), providedAppContext.isShowOriginalImage && React.createElement("img", {
37
+ style: {
38
+ maxWidth: '98%',
39
+ maxHeight: '98%',
40
+ position: 'absolute',
41
+ top: '50%',
42
+ left: '50%',
43
+ transform: 'translate(-50%, -50%)',
44
+ zIndex: 2
45
+ },
46
+ src: (_providedAppContext$o = providedAppContext.originalImage) === null || _providedAppContext$o === void 0 ? void 0 : _providedAppContext$o.src
47
+ }), React.createElement(CanvasNode, null, React.createElement(AppProviderOverridenValue, {
48
+ overridingValue: providedAppContext
49
+ }, React.createElement(DesignLayer, null), React.createElement(TransformersLayer, null))));
50
+ };
51
+ export default MainCanvas;
@@ -1 +1,69 @@
1
- import _defineProperty from"@babel/runtime/helpers/defineProperty";function ownKeys(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function _objectSpread(a){for(var b,c=1;c<arguments.length;c++)b=null==arguments[c]?{}:arguments[c],c%2?ownKeys(Object(b),!0).forEach(function(c){_defineProperty(a,c,b[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(b)):ownKeys(Object(b)).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))});return a}import{DEFAULT_ZOOM_FACTOR}from"utils/constants";function getDistance(a,b){return Math.sqrt(Math.pow(b.x-a.x,2)+Math.pow(b.y-a.y,2))}function getCenter(a,b){return{x:(a.x+b.x)/2,y:(a.y+b.y)/2}}var lastCenter=null,lastDist=0;export var zoomOnTouchesMove=function(a,b){a.evt.preventDefault();var c=a.evt.touches[0],d=a.evt.touches[1];if(c&&d){var e=a.currentTarget;e.isDragging()&&e.stopDrag();var f={x:c.clientX,y:c.clientY},g={x:d.clientX,y:d.clientY};if(!lastCenter)return void(lastCenter=getCenter(f,g));var h=getCenter(f,g),i=getDistance(f,g);lastDist||(lastDist=i);var j=e.attrs.zoomFactor||DEFAULT_ZOOM_FACTOR,k={x:(h.x-e.x())/j,y:(h.y-e.y())/j},l=(j||DEFAULT_ZOOM_FACTOR)*(i/lastDist),m=h.x-lastCenter.x,n=h.y-lastCenter.y,o={x:h.x-k.x*l+m,y:h.y-k.y*l+n};lastDist=i,lastCenter=h,b(_objectSpread(_objectSpread({},o),{},{factor:l,preparedDimensions:!0}))}};export var endTouchesZooming=function(a){lastDist=0,lastCenter=null,"function"==typeof a&&a()};
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
+ import { DEFAULT_ZOOM_FACTOR } from 'utils/constants';
5
+ function getDistance(p1, p2) {
6
+ return Math.sqrt(Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2));
7
+ }
8
+ function getCenter(p1, p2) {
9
+ return {
10
+ x: (p1.x + p2.x) / 2,
11
+ y: (p1.y + p2.y) / 2
12
+ };
13
+ }
14
+ var lastCenter = null;
15
+ var lastDist = 0;
16
+ export var zoomOnTouchesMove = function zoomOnTouchesMove(e, saveZoomFn) {
17
+ e.evt.preventDefault();
18
+ var touch1 = e.evt.touches[0];
19
+ var touch2 = e.evt.touches[1];
20
+ if (!touch1 || !touch2) {
21
+ return;
22
+ }
23
+ var stageCanvas = e.currentTarget;
24
+ if (stageCanvas.isDragging()) {
25
+ stageCanvas.stopDrag();
26
+ }
27
+ var p1 = {
28
+ x: touch1.clientX,
29
+ y: touch1.clientY
30
+ };
31
+ var p2 = {
32
+ x: touch2.clientX,
33
+ y: touch2.clientY
34
+ };
35
+ if (!lastCenter) {
36
+ lastCenter = getCenter(p1, p2);
37
+ return;
38
+ }
39
+ var newCenter = getCenter(p1, p2);
40
+ var dist = getDistance(p1, p2);
41
+ if (!lastDist) {
42
+ lastDist = dist;
43
+ }
44
+ var currentZoomFactor = stageCanvas.attrs.zoomFactor || DEFAULT_ZOOM_FACTOR;
45
+ var pointTo = {
46
+ x: (newCenter.x - stageCanvas.x()) / currentZoomFactor,
47
+ y: (newCenter.y - stageCanvas.y()) / currentZoomFactor
48
+ };
49
+ var scale = (currentZoomFactor || DEFAULT_ZOOM_FACTOR) * (dist / lastDist);
50
+ var dx = newCenter.x - lastCenter.x;
51
+ var dy = newCenter.y - lastCenter.y;
52
+ var newPos = {
53
+ x: newCenter.x - pointTo.x * scale + dx,
54
+ y: newCenter.y - pointTo.y * scale + dy
55
+ };
56
+ lastDist = dist;
57
+ lastCenter = newCenter;
58
+ saveZoomFn(_objectSpread(_objectSpread({}, newPos), {}, {
59
+ factor: scale,
60
+ preparedDimensions: true
61
+ }));
62
+ };
63
+ export var endTouchesZooming = function endTouchesZooming(cb) {
64
+ lastDist = 0;
65
+ lastCenter = null;
66
+ if (typeof cb === 'function') {
67
+ cb();
68
+ }
69
+ };
@@ -1 +1,79 @@
1
- import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import{ContentCopy,DeleteOutlined}from"@mui/icons-material";import{SFlexBox,SIconButton}from"@solostylist/ui-kit/core";import{useEffect,useMemo,useState}from"react";import{DUPLICATE_ANNOTATIONS,REMOVE_ANNOTATIONS}from"actions";import{useStore}from"hooks";import{NODES_TRANSFORMER_ID,WATERMARK_ANNOTATION_ID}from"utils/constants";import debounce from"utils/debounce";var NodeControls=function(){var a=useStore(),b=a.selectionsIds,c=void 0===b?[]:b,d=a.designLayer,e=a.annotations,f=a.dispatch,g=useState({left:0,top:0}),h=_slicedToArray(g,2),i=h[0],j=h[1],k=useMemo(function(){var a,b=d;return null===b||void 0===b||null===(a=b.getStage())||void 0===a?void 0:a.findOne("#".concat(NODES_TRANSFORMER_ID))},[d]),l=c.length,m=debounce(function(){k&&j({left:(k.x()+k.width()/2)*k.scaleX(),top:(k.y()+k.height())*k.scaleY()})},0);if(useEffect(function(){m()},[c,k,e]),0===l||!k)return null;return React.createElement(SFlexBox,{sx:{position:"absolute",zIndex:1,bgcolor:"background.paper",borderRadius:4,alignItems:"center",justifyContent:"center",top:(i.top||0)+8,left:(i.left||0)+4,transform:"translateX(-50%)",gap:1,p:1}},c[0]!==WATERMARK_ANNOTATION_ID&&React.createElement(SIconButton,{onClick:function(){f({type:DUPLICATE_ANNOTATIONS,payload:{annotationsIds:c}})}},React.createElement(ContentCopy,null)),React.createElement(SIconButton,{onClick:function(){f({type:REMOVE_ANNOTATIONS,payload:{annotationsIds:c}})},color:"error"},React.createElement(DeleteOutlined,null)))};export default NodeControls;
1
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
+ import { ContentCopy, DeleteOutlined } from '@mui/icons-material';
3
+ import { SFlexBox, SIconButton } from '@solostylist/ui-kit/core';
4
+ import { useEffect, useMemo, useState } from 'react';
5
+ import { DUPLICATE_ANNOTATIONS, REMOVE_ANNOTATIONS } from 'actions';
6
+ import { useStore } from 'hooks';
7
+ import { NODES_TRANSFORMER_ID, WATERMARK_ANNOTATION_ID } from 'utils/constants';
8
+ import debounce from 'utils/debounce';
9
+ var NodeControls = function NodeControls() {
10
+ var _useStore = useStore(),
11
+ _useStore$selectionsI = _useStore.selectionsIds,
12
+ selectionsIds = _useStore$selectionsI === void 0 ? [] : _useStore$selectionsI,
13
+ designLayer = _useStore.designLayer,
14
+ annotations = _useStore.annotations,
15
+ dispatch = _useStore.dispatch;
16
+ var _useState = useState({
17
+ left: 0,
18
+ top: 0
19
+ }),
20
+ _useState2 = _slicedToArray(_useState, 2),
21
+ position = _useState2[0],
22
+ setPosition = _useState2[1];
23
+ var nodesTransformer = useMemo(function () {
24
+ var _layer$getStage;
25
+ var layer = designLayer;
26
+ return layer === null || layer === void 0 || (_layer$getStage = layer.getStage()) === null || _layer$getStage === void 0 ? void 0 : _layer$getStage.findOne("#".concat(NODES_TRANSFORMER_ID));
27
+ }, [designLayer]);
28
+ var selectionsLength = selectionsIds.length;
29
+ var updatePosition = debounce(function () {
30
+ if (!nodesTransformer) {
31
+ return;
32
+ }
33
+ setPosition({
34
+ left: (nodesTransformer.x() + nodesTransformer.width() / 2) * nodesTransformer.scaleX(),
35
+ top: (nodesTransformer.y() + nodesTransformer.height()) * nodesTransformer.scaleY()
36
+ });
37
+ }, 0);
38
+ useEffect(function () {
39
+ updatePosition();
40
+ }, [selectionsIds, nodesTransformer, annotations]);
41
+ if (selectionsLength === 0 || !nodesTransformer) return null;
42
+ var duplicateSelectedNodes = function duplicateSelectedNodes() {
43
+ dispatch({
44
+ type: DUPLICATE_ANNOTATIONS,
45
+ payload: {
46
+ annotationsIds: selectionsIds
47
+ }
48
+ });
49
+ };
50
+ var removeSelectedNodes = function removeSelectedNodes() {
51
+ dispatch({
52
+ type: REMOVE_ANNOTATIONS,
53
+ payload: {
54
+ annotationsIds: selectionsIds
55
+ }
56
+ });
57
+ };
58
+ return React.createElement(SFlexBox, {
59
+ sx: {
60
+ position: 'absolute',
61
+ zIndex: 1,
62
+ bgcolor: 'background.paper',
63
+ borderRadius: 4,
64
+ alignItems: 'center',
65
+ justifyContent: 'center',
66
+ top: (position.top || 0) + 8,
67
+ left: (position.left || 0) + 4,
68
+ transform: 'translateX(-50%)',
69
+ gap: 1,
70
+ p: 1
71
+ }
72
+ }, selectionsIds[0] !== WATERMARK_ANNOTATION_ID && React.createElement(SIconButton, {
73
+ onClick: duplicateSelectedNodes
74
+ }, React.createElement(ContentCopy, null)), React.createElement(SIconButton, {
75
+ onClick: removeSelectedNodes,
76
+ color: "error"
77
+ }, React.createElement(DeleteOutlined, null)));
78
+ };
79
+ export default NodeControls;
@@ -1 +1,66 @@
1
- import{STabs}from"@solostylist/ui-kit/core";import{useCallback,useMemo}from"react";import{SELECT_TAB}from"actions";import{useStore}from"hooks";import{AVAILABLE_TABS}from"./tabs.constants";var Tabs=function(a){var b=a.toggleMainMenu,c=useStore(),d=c.t,e=c.tabId,f=void 0===e?null:e,g=c.dispatch,h=c.config,i=h.defaultTabId,j=h.tabsIds,k=useCallback(function(a,c){g({type:SELECT_TAB,payload:{tabId:c}}),null===b||void 0===b||b(!1)},[g,b]),l=useMemo(function(){var a=[],b=Array.isArray(j)?j:Object.keys(j||{});return 0<b.length?AVAILABLE_TABS.forEach(function(c){var d=b.indexOf(c.id);-1!==d&&(a[d]=c)}):a=AVAILABLE_TABS,(0<a.length?a:AVAILABLE_TABS).filter(function(a){return!!a}).map(function(a){return{label:d(a.labelKey),icon:React.createElement(a.icon,null),value:a.id,iconPosition:"top"}})},[j,d]);return 1>=l.length?null:React.createElement(STabs,{sx:{minWidth:120,width:120},tabs:l,activeTab:f||i,onTabChange:k,orientation:"vertical",variant:"scrollable",scrollButtons:"auto"})};export default Tabs;
1
+ import { STabs } from '@solostylist/ui-kit/core';
2
+ import { useCallback, useMemo } from 'react';
3
+ import { SELECT_TAB } from 'actions';
4
+ import { useStore } from 'hooks';
5
+ import { AVAILABLE_TABS } from "./tabs.constants";
6
+ var Tabs = function Tabs(_ref) {
7
+ var toggleMainMenu = _ref.toggleMainMenu;
8
+ var _useStore = useStore(),
9
+ t = _useStore.t,
10
+ _useStore$tabId = _useStore.tabId,
11
+ tabId = _useStore$tabId === void 0 ? null : _useStore$tabId,
12
+ dispatch = _useStore.dispatch,
13
+ _useStore$config = _useStore.config,
14
+ defaultTabId = _useStore$config.defaultTabId,
15
+ tabsIds = _useStore$config.tabsIds;
16
+ var currentTabId = tabId || defaultTabId;
17
+ var selectTab = useCallback(function (event, newTabId) {
18
+ dispatch({
19
+ type: SELECT_TAB,
20
+ payload: {
21
+ tabId: newTabId
22
+ }
23
+ });
24
+ toggleMainMenu === null || toggleMainMenu === void 0 || toggleMainMenu(false);
25
+ }, [dispatch, toggleMainMenu]);
26
+ var chosenTabsConfig = useMemo(function () {
27
+ var tabs = [];
28
+ var tabsIdsArray = Array.isArray(tabsIds) ? tabsIds : Object.keys(tabsIds || {});
29
+ if (tabsIdsArray.length > 0) {
30
+ AVAILABLE_TABS.forEach(function (tab) {
31
+ var index = tabsIdsArray.indexOf(tab.id);
32
+ if (index !== -1) {
33
+ tabs[index] = tab;
34
+ }
35
+ });
36
+ } else {
37
+ tabs = AVAILABLE_TABS;
38
+ }
39
+ return (tabs.length > 0 ? tabs : AVAILABLE_TABS).filter(function (tab) {
40
+ return Boolean(tab);
41
+ }).map(function (tab) {
42
+ return {
43
+ label: t(tab.labelKey),
44
+ icon: React.createElement(tab.icon, null),
45
+ value: tab.id,
46
+ iconPosition: 'top'
47
+ };
48
+ });
49
+ }, [tabsIds, t]);
50
+ if (chosenTabsConfig.length <= 1) {
51
+ return null;
52
+ }
53
+ return React.createElement(STabs, {
54
+ sx: {
55
+ minWidth: 120,
56
+ width: 120
57
+ },
58
+ tabs: chosenTabsConfig,
59
+ activeTab: currentTabId,
60
+ onTabChange: selectTab,
61
+ orientation: "vertical",
62
+ variant: "scrollable",
63
+ scrollButtons: "auto"
64
+ });
65
+ };
66
+ export default Tabs;
@@ -1 +1,27 @@
1
- import{BrandingWatermarkOutlined,CropOutlined,EditOutlined,PhotoFilterOutlined,PhotoSizeSelectLargeOutlined,TuneOutlined}from"@mui/icons-material";import{TABS_IDS}from"utils/constants";export var AVAILABLE_TABS=[{id:TABS_IDS.ADJUST,labelKey:"adjustTab",icon:CropOutlined},{id:TABS_IDS.FINETUNE,labelKey:"finetuneTab",icon:TuneOutlined},{id:TABS_IDS.FILTERS,labelKey:"filtersTab",icon:PhotoFilterOutlined},{id:TABS_IDS.WATERMARK,labelKey:"watermarkTab",icon:BrandingWatermarkOutlined},{id:TABS_IDS.ANNOTATE,labelKey:"annotateTabLabel",icon:EditOutlined},{id:TABS_IDS.RESIZE,labelKey:"resizeTab",icon:PhotoSizeSelectLargeOutlined}];
1
+ import { BrandingWatermarkOutlined, CropOutlined, EditOutlined, PhotoFilterOutlined, PhotoSizeSelectLargeOutlined, TuneOutlined } from '@mui/icons-material';
2
+ import { TABS_IDS } from 'utils/constants';
3
+ export var AVAILABLE_TABS = [{
4
+ id: TABS_IDS.ADJUST,
5
+ labelKey: 'adjustTab',
6
+ icon: CropOutlined
7
+ }, {
8
+ id: TABS_IDS.FINETUNE,
9
+ labelKey: 'finetuneTab',
10
+ icon: TuneOutlined
11
+ }, {
12
+ id: TABS_IDS.FILTERS,
13
+ labelKey: 'filtersTab',
14
+ icon: PhotoFilterOutlined
15
+ }, {
16
+ id: TABS_IDS.WATERMARK,
17
+ labelKey: 'watermarkTab',
18
+ icon: BrandingWatermarkOutlined
19
+ }, {
20
+ id: TABS_IDS.ANNOTATE,
21
+ labelKey: 'annotateTabLabel',
22
+ icon: EditOutlined
23
+ }, {
24
+ id: TABS_IDS.RESIZE,
25
+ labelKey: 'resizeTab',
26
+ icon: PhotoSizeSelectLargeOutlined
27
+ }];