@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.
- package/lib/actions/add-filter.js +11 -1
- package/lib/actions/change-pointer-icon.js +10 -1
- package/lib/actions/change-rotation.js +13 -1
- package/lib/actions/clear-annotations-selections.js +10 -1
- package/lib/actions/duplicate-annotations.js +26 -1
- package/lib/actions/enable-text-content-edit.js +10 -1
- package/lib/actions/hide-loader.js +10 -1
- package/lib/actions/index.js +36 -1
- package/lib/actions/redo.js +27 -1
- package/lib/actions/remove-annotations.js +27 -1
- package/lib/actions/reset.js +26 -1
- package/lib/actions/select-annotation.js +27 -1
- package/lib/actions/select-tab.js +16 -1
- package/lib/actions/select-tool.js +11 -1
- package/lib/actions/set-annotation.js +28 -1
- package/lib/actions/set-canvas-size.js +31 -1
- package/lib/actions/set-crop.js +25 -1
- package/lib/actions/set-feedback.js +11 -1
- package/lib/actions/set-finetune.js +13 -1
- package/lib/actions/set-latest-color.js +10 -1
- package/lib/actions/set-original-image.js +13 -1
- package/lib/actions/set-resize.js +14 -1
- package/lib/actions/set-saved.js +10 -1
- package/lib/actions/set-saving.js +11 -1
- package/lib/actions/set-show-tabs-menu.js +10 -1
- package/lib/actions/set-shown-image-dimensions.js +12 -1
- package/lib/actions/show-loader.js +10 -1
- package/lib/actions/toggle-flip.js +13 -1
- package/lib/actions/toggle-original-image-display.js +10 -1
- package/lib/actions/undo.js +27 -1
- package/lib/actions/update-state.js +7 -1
- package/lib/actions/zoom-canvas.js +37 -1
- package/lib/components/app/index.js +283 -1
- package/lib/components/assembly-point/index.js +23 -1
- package/lib/components/common/annotation-options/annotation-options.constants.js +10 -1
- package/lib/components/common/annotation-options/index.js +140 -1
- package/lib/components/common/annotation-options/opacity-field.js +23 -1
- package/lib/components/common/annotation-options/position-fields.js +39 -1
- package/lib/components/common/annotation-options/shadow-fields.js +62 -1
- package/lib/components/common/annotation-options/stroke-fields.js +33 -1
- package/lib/components/common/button-with-menu/index.js +86 -1
- package/lib/components/common/color-input/index.js +101 -1
- package/lib/components/common/color-picker-modal/index.js +70 -1
- package/lib/components/common/hidden-upload-input/index.js +17 -1
- package/lib/components/common/icon-wrapper/index.js +40 -1
- package/lib/components/common/image-preview-tile/index.js +57 -1
- package/lib/components/common/slider/index.js +38 -1
- package/lib/components/feedback-popup/index.js +41 -1
- package/lib/components/layers/design-layer/annotation-nodes/annotation-nodes.constants.js +10 -1
- package/lib/components/layers/design-layer/annotation-nodes/arrow-node.js +62 -1
- package/lib/components/layers/design-layer/annotation-nodes/ellipse-node.js +64 -1
- package/lib/components/layers/design-layer/annotation-nodes/image-node.js +78 -1
- package/lib/components/layers/design-layer/annotation-nodes/index.js +22 -1
- package/lib/components/layers/design-layer/annotation-nodes/line-node.js +60 -1
- package/lib/components/layers/design-layer/annotation-nodes/memoized-annotation.js +16 -1
- package/lib/components/layers/design-layer/annotation-nodes/polygon-node.js +63 -1
- package/lib/components/layers/design-layer/annotation-nodes/rect-node.js +65 -1
- package/lib/components/layers/design-layer/annotation-nodes/text-node.js +80 -1
- package/lib/components/layers/design-layer/index.js +202 -1
- package/lib/components/layers/design-layer/nodes-common-prop-types.js +16 -1
- package/lib/components/layers/design-layer/preview-group.js +9 -1
- package/lib/components/layers/index.js +2 -1
- package/lib/components/layers/transformers-layer/crop-transformer.js +248 -1
- package/lib/components/layers/transformers-layer/index.js +16 -1
- package/lib/components/layers/transformers-layer/nodes-transformer.js +73 -1
- package/lib/components/layers/transformers-layer/transformers-layer.utils.js +93 -1
- package/lib/components/main-canvas/canvas-node.js +177 -1
- package/lib/components/main-canvas/index.js +51 -1
- package/lib/components/main-canvas/touch-zooming-events.js +69 -1
- package/lib/components/node-controls/index.js +79 -1
- package/lib/components/tabs/index.js +66 -1
- package/lib/components/tabs/tabs.constants.js +27 -1
- package/lib/components/tabs-drawer/index.js +109 -1
- package/lib/components/tools/arrow/arrow-button.js +17 -1
- package/lib/components/tools/arrow/arrow-options.js +19 -1
- package/lib/components/tools/arrow/index.js +2 -1
- package/lib/components/tools/blur/blur-options.js +35 -1
- package/lib/components/tools/blur/blur.js +17 -1
- package/lib/components/tools/blur/index.js +2 -1
- package/lib/components/tools/brightness/brightness-options.js +36 -1
- package/lib/components/tools/brightness/brightness.js +17 -1
- package/lib/components/tools/brightness/index.js +2 -1
- package/lib/components/tools/contrast/contrast-options.js +35 -1
- package/lib/components/tools/contrast/contrast.js +17 -1
- package/lib/components/tools/contrast/index.js +2 -1
- package/lib/components/tools/crop/crop.constants.js +31 -1
- package/lib/components/tools/crop/crop.js +122 -1
- package/lib/components/tools/crop/index.js +1 -1
- package/lib/components/tools/ellipse/ellipse-button.js +17 -1
- package/lib/components/tools/ellipse/ellipse-options.js +17 -1
- package/lib/components/tools/ellipse/index.js +2 -1
- package/lib/components/tools/filters/filter-item.js +77 -1
- package/lib/components/tools/filters/filters.constants.js +139 -1
- package/lib/components/tools/filters/filters.js +74 -1
- package/lib/components/tools/filters/index.js +1 -1
- package/lib/components/tools/flip/flip-x.js +48 -1
- package/lib/components/tools/flip/flip-y.js +50 -1
- package/lib/components/tools/flip/index.js +2 -1
- package/lib/components/tools/hsv/hsv.js +17 -1
- package/lib/components/tools/hsv/hsvoptions.js +60 -1
- package/lib/components/tools/hsv/index.js +2 -1
- package/lib/components/tools/image/image-button.js +17 -1
- package/lib/components/tools/image/image-controls.js +12 -1
- package/lib/components/tools/image/image-options.js +162 -1
- package/lib/components/tools/image/images-gallery.js +55 -1
- package/lib/components/tools/image/index.js +2 -1
- package/lib/components/tools/line/index.js +2 -1
- package/lib/components/tools/line/line-button.js +17 -1
- package/lib/components/tools/line/line-options.js +19 -1
- package/lib/components/tools/pen/index.js +2 -1
- package/lib/components/tools/pen/pen-button.js +17 -1
- package/lib/components/tools/pen/pen-options.js +120 -1
- package/lib/components/tools/polygon/index.js +2 -1
- package/lib/components/tools/polygon/polygon-button.js +17 -1
- package/lib/components/tools/polygon/polygon-options.js +22 -1
- package/lib/components/tools/polygon/polygon-sides-field.js +23 -1
- package/lib/components/tools/polygon/polygon.constants.js +10 -1
- package/lib/components/tools/rect/index.js +2 -1
- package/lib/components/tools/rect/rect-button.js +17 -1
- package/lib/components/tools/rect/rect-corner-field.js +24 -1
- package/lib/components/tools/rect/rect-options.js +21 -1
- package/lib/components/tools/rect/rect.constants.js +10 -1
- package/lib/components/tools/resize/index.js +1 -1
- package/lib/components/tools/resize/resize.js +141 -1
- package/lib/components/tools/rotate/index.js +2 -1
- package/lib/components/tools/rotate/rotate-button.js +17 -1
- package/lib/components/tools/rotate/rotate-options.js +97 -1
- package/lib/components/tools/text/index.js +2 -1
- package/lib/components/tools/text/text-button.js +17 -1
- package/lib/components/tools/text/text-options/handle-text-change-area.js +122 -1
- package/lib/components/tools/text/text-options/index.js +17 -1
- package/lib/components/tools/text/text-options/text-alignment-fields.js +38 -1
- package/lib/components/tools/text/text-options/text-controls.js +147 -1
- package/lib/components/tools/text/text-options/text-options.constants.js +16 -1
- package/lib/components/tools/text/text-options/text-spacings-fields.js +34 -1
- package/lib/components/tools/tools.constants.js +98 -1
- package/lib/components/tools/warmth/index.js +2 -1
- package/lib/components/tools/warmth/warmth-options.js +35 -1
- package/lib/components/tools/warmth/warmth.js +17 -1
- package/lib/components/tools/watermark/index.js +1 -1
- package/lib/components/tools/watermark/watermark-padding.js +59 -1
- package/lib/components/tools/watermark/watermark.js +221 -1
- package/lib/components/tools/watermark/watermarks-gallery.js +77 -1
- package/lib/components/tools-bar/index.js +113 -1
- package/lib/components/tools-bar/tools-bar-item-button.js +39 -1
- package/lib/components/topbar/canvas-zooming.js +119 -1
- package/lib/components/topbar/confirmation-modal.js +53 -1
- package/lib/components/topbar/image-dimensions-and-display-toggle.js +68 -1
- package/lib/components/topbar/index.js +47 -1
- package/lib/components/topbar/redo-button.js +25 -1
- package/lib/components/topbar/reset-button.js +21 -1
- package/lib/components/topbar/save-button.js +251 -1
- package/lib/components/topbar/topbar.constants.js +31 -1
- package/lib/components/topbar/undo-button.js +27 -1
- package/lib/context/app-context.js +3 -1
- package/lib/context/app-provider-overriden-value.js +9 -1
- package/lib/context/app-provider.js +48 -1
- package/lib/context/app-reducer.js +5 -1
- package/lib/context/default-config.js +75 -1
- package/lib/context/default-translations.js +115 -1
- package/lib/context/get-initial-app-state.js +61 -1
- package/lib/context/index.js +4 -1
- package/lib/custom/filters/aden.js +8 -1
- package/lib/custom/filters/amaro.js +8 -1
- package/lib/custom/filters/ashby.js +8 -1
- package/lib/custom/filters/base-filters.js +82 -1
- package/lib/custom/filters/black-and-white.js +11 -1
- package/lib/custom/filters/brannan.js +8 -1
- package/lib/custom/filters/brooklyn.js +8 -1
- package/lib/custom/filters/charmes.js +8 -1
- package/lib/custom/filters/clarendon.js +9 -1
- package/lib/custom/filters/crema.js +8 -1
- package/lib/custom/filters/dogpatch.js +8 -1
- package/lib/custom/filters/earlybird.js +7 -1
- package/lib/custom/filters/gingham.js +8 -1
- package/lib/custom/filters/ginza.js +8 -1
- package/lib/custom/filters/hefe.js +8 -1
- package/lib/custom/filters/helena.js +8 -1
- package/lib/custom/filters/hudson.js +9 -1
- package/lib/custom/filters/index.js +40 -1
- package/lib/custom/filters/juno.js +8 -1
- package/lib/custom/filters/kelvin.js +9 -1
- package/lib/custom/filters/lark.js +9 -1
- package/lib/custom/filters/lo-fi.js +8 -1
- package/lib/custom/filters/ludwig.js +8 -1
- package/lib/custom/filters/maven.js +9 -1
- package/lib/custom/filters/mayfair.js +8 -1
- package/lib/custom/filters/moon.js +7 -1
- package/lib/custom/filters/nashville.js +8 -1
- package/lib/custom/filters/ninteen-seventy-seven.js +8 -1
- package/lib/custom/filters/perpetua.js +7 -1
- package/lib/custom/filters/reyes.js +9 -1
- package/lib/custom/filters/rise.js +9 -1
- package/lib/custom/filters/sierra.js +8 -1
- package/lib/custom/filters/skyline.js +8 -1
- package/lib/custom/filters/slumber.js +8 -1
- package/lib/custom/filters/stinson.js +8 -1
- package/lib/custom/filters/sutro.js +8 -1
- package/lib/custom/filters/toaster.js +8 -1
- package/lib/custom/filters/valencia.js +9 -1
- package/lib/custom/filters/vesper.js +9 -1
- package/lib/custom/filters/walden.js +8 -1
- package/lib/custom/filters/willow.js +8 -1
- package/lib/custom/filters/xpro2.js +9 -1
- package/lib/custom/finetunes/custom-threshold.js +19 -1
- package/lib/custom/finetunes/index.js +2 -1
- package/lib/custom/finetunes/warmth.js +15 -1
- package/lib/demo/app.js +175 -1
- package/lib/demo/index.js +1 -1
- package/lib/hooks/index.js +12 -1
- package/lib/hooks/use-annotation/get-bounding-rect-un-scaled.js +14 -1
- package/lib/hooks/use-annotation/get-new-annotation-preview.js +83 -1
- package/lib/hooks/use-annotation/index.js +138 -1
- package/lib/hooks/use-annotation/preview-then-call-annotation-adding.js +159 -1
- package/lib/hooks/use-annotation-events.js +83 -1
- package/lib/hooks/use-app-reducer.js +53 -1
- package/lib/hooks/use-debounced-callback.js +7 -1
- package/lib/hooks/use-drag.js +37 -1
- package/lib/hooks/use-filter.js +20 -1
- package/lib/hooks/use-finetune.js +31 -1
- package/lib/hooks/use-phone-screen.js +5 -1
- package/lib/hooks/use-popover.js +27 -1
- package/lib/hooks/use-resize-observer.js +60 -1
- package/lib/hooks/use-store.js +6 -1
- package/lib/hooks/use-transformed-img-data.js +156 -1
- package/lib/hooks/use-update-effect.js +18 -1
- package/lib/index.d.ts +2 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +4 -1
- package/lib/types/actions.js +31 -1
- package/lib/types/annotations.js +42 -1
- package/lib/types/common.js +1 -1
- package/lib/types/config.js +34 -1
- package/lib/types/index.js +5 -1
- package/lib/types/state.js +1 -1
- package/lib/utils/assign-finetune-names-to-konva.js +7 -1
- package/lib/utils/calculate-zoom-data.js +36 -1
- package/lib/utils/compare-ratios.js +5 -1
- package/lib/utils/constants.js +84 -1
- package/lib/utils/crop-image.js +10 -1
- package/lib/utils/debounce.js +19 -1
- package/lib/utils/deep-merge.js +26 -1
- package/lib/utils/extract-current-design-state.js +15 -1
- package/lib/utils/extract-name-from-url.js +5 -1
- package/lib/utils/filter-str-to-class.js +9 -1
- package/lib/utils/finetunes-strs-to-classes.js +13 -1
- package/lib/utils/get-center-rotated-point.js +34 -1
- package/lib/utils/get-default-save-quality.js +5 -1
- package/lib/utils/get-dimensions-minimal-ratio.js +6 -1
- package/lib/utils/get-elem-document-coords.js +24 -1
- package/lib/utils/get-file-full-name.js +21 -1
- package/lib/utils/get-pointer-offset-position-bounded-to-object.js +26 -1
- package/lib/utils/get-proper-dimensions.js +21 -1
- package/lib/utils/get-proper-image-to-canvas-spacing.js +6 -1
- package/lib/utils/get-scroll-offset.js +13 -1
- package/lib/utils/get-size-after-rotation.js +31 -1
- package/lib/utils/get-zoom-fit-factor.js +5 -1
- package/lib/utils/image-to-base64.js +12 -1
- package/lib/utils/is-default-zero-values-only.js +6 -1
- package/lib/utils/is-same-image.js +4 -1
- package/lib/utils/load-image.js +19 -1
- package/lib/utils/map-crop-box.js +16 -1
- package/lib/utils/map-number.js +4 -1
- package/lib/utils/map-position-string-to-point.js +92 -1
- package/lib/utils/random-id.js +5 -1
- package/lib/utils/restrict-number.js +7 -1
- package/lib/utils/serialize-design-state.js +62 -1
- package/lib/utils/to-precised-float.js +5 -1
- package/lib/utils/translator.js +14 -1
- package/package.json +1 -1
|
@@ -1 +1,93 @@
|
|
|
1
|
-
import _defineProperty from
|
|
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
|
|
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";
|
|
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";
|
|
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";
|
|
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
|
|
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
|
|
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
|
+
}];
|