@yorab/react-paint 0.6.3 → 0.6.6
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/README.md +2 -1
- package/dist/components/App.js +235 -387
- package/dist/components/Canvas.js +104 -114
- package/dist/components/common/Button.js +41 -50
- package/dist/components/common/Loading.js +21 -33
- package/dist/components/common/Modal.js +18 -17
- package/dist/components/common/Panel.js +20 -24
- package/dist/components/common/Snackbar.js +27 -34
- package/dist/components/settings/ColorField.js +59 -68
- package/dist/components/settings/DeleteButton.js +10 -9
- package/dist/components/settings/FontFamilyField.js +25 -20
- package/dist/components/settings/LayoutButton.js +11 -9
- package/dist/components/settings/Layouts.js +93 -103
- package/dist/components/settings/LineArrowField.js +25 -22
- package/dist/components/settings/LineTypeField.js +23 -20
- package/dist/components/settings/PointsNumberField.js +14 -13
- package/dist/components/settings/RangeField.js +35 -47
- package/dist/components/settings/SelectField.js +34 -43
- package/dist/components/settings/SettingsBar.js +95 -118
- package/dist/components/settings/ToggleField.js +18 -25
- package/dist/components/toolbox/EditTextBox.js +65 -40
- package/dist/components/toolbox/LoadFileTool.js +19 -21
- package/dist/components/toolbox/MenuGroup.js +60 -96
- package/dist/components/toolbox/PictureUrlInput.js +33 -62
- package/dist/components/toolbox/Tool.js +13 -13
- package/dist/components/toolbox/Toolbar.js +74 -106
- package/dist/components/toolbox/ToolbarGroup.js +41 -57
- package/dist/constants/icons.js +43 -43
- package/dist/constants/shapes.js +6 -6
- package/dist/constants/snackbar.js +3 -3
- package/dist/constants/style.js +13 -13
- package/dist/constants/tools.js +80 -80
- package/dist/hooks/useComponent.js +12 -19
- package/dist/hooks/useDoubleClick.js +12 -12
- package/dist/hooks/useDrag.js +24 -32
- package/dist/hooks/useDrawableCanvas.js +86 -100
- package/dist/hooks/useKeyboard.js +26 -36
- package/dist/hooks/useResizeObserver.js +18 -16
- package/dist/hooks/useShapes.js +91 -143
- package/dist/hooks/useSnackbar.js +28 -58
- package/dist/styles.css +55 -55
- package/dist/types/Mode.js +1 -1
- package/dist/types/Shapes.js +1 -1
- package/dist/types/keyboard.js +2 -2
- package/dist/types/tools.js +1 -1
- package/dist/utils/data.js +91 -107
- package/dist/utils/draw.js +116 -146
- package/dist/utils/file.js +69 -119
- package/dist/utils/intersect.js +57 -97
- package/dist/utils/selection.js +12 -12
- package/dist/utils/shapeData.js +33 -51
- package/dist/utils/string.js +10 -16
- package/dist/utils/style.js +1 -1
- package/dist/utils/toolbar.js +26 -38
- package/dist/utils/transform.js +183 -239
- package/package.json +5 -4
package/dist/hooks/useDrag.js
CHANGED
|
@@ -1,43 +1,35 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
3
|
Object.defineProperty(exports, "__esModule", {
|
|
6
4
|
value: true
|
|
7
5
|
});
|
|
8
|
-
exports
|
|
9
|
-
|
|
10
|
-
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
6
|
+
exports.default = void 0;
|
|
11
7
|
|
|
12
8
|
var _react = require("react");
|
|
13
9
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
isOver = _useState2[0],
|
|
27
|
-
setIsOver = _useState2[1];
|
|
28
|
-
|
|
29
|
-
(0, _react.useEffect)(function () {
|
|
10
|
+
const useDrag = _ref => {
|
|
11
|
+
let {
|
|
12
|
+
disabled = false,
|
|
13
|
+
ref,
|
|
14
|
+
shape,
|
|
15
|
+
layoutDragging,
|
|
16
|
+
setLayoutDragging,
|
|
17
|
+
handleSelect,
|
|
18
|
+
onMoveShapes
|
|
19
|
+
} = _ref;
|
|
20
|
+
const [isOver, setIsOver] = (0, _react.useState)(false);
|
|
21
|
+
(0, _react.useEffect)(() => {
|
|
30
22
|
if (!layoutDragging) setIsOver(false);
|
|
31
23
|
}, [layoutDragging]);
|
|
32
|
-
(0, _react.useEffect)(
|
|
33
|
-
|
|
24
|
+
(0, _react.useEffect)(() => {
|
|
25
|
+
const layoutRef = ref.current;
|
|
34
26
|
if (!layoutRef) return;
|
|
35
27
|
|
|
36
|
-
|
|
28
|
+
const handleDragEnd = () => {
|
|
37
29
|
setLayoutDragging(undefined);
|
|
38
30
|
};
|
|
39
31
|
|
|
40
|
-
|
|
32
|
+
const handleDragOver = e => {
|
|
41
33
|
if (e.preventDefault) {
|
|
42
34
|
e.preventDefault();
|
|
43
35
|
}
|
|
@@ -45,7 +37,7 @@ var useDrag = function useDrag(_ref) {
|
|
|
45
37
|
return false;
|
|
46
38
|
};
|
|
47
39
|
|
|
48
|
-
|
|
40
|
+
const handleDragStart = e => {
|
|
49
41
|
handleSelect(shape);
|
|
50
42
|
if (!e.dataTransfer) return;
|
|
51
43
|
e.dataTransfer.effectAllowed = 'move';
|
|
@@ -53,15 +45,15 @@ var useDrag = function useDrag(_ref) {
|
|
|
53
45
|
setLayoutDragging(shape.id);
|
|
54
46
|
};
|
|
55
47
|
|
|
56
|
-
|
|
48
|
+
const handleDragEnter = () => {
|
|
57
49
|
layoutDragging !== shape.id && setIsOver(true);
|
|
58
50
|
};
|
|
59
51
|
|
|
60
|
-
|
|
52
|
+
const handleDragLeave = () => {
|
|
61
53
|
setIsOver(false);
|
|
62
54
|
};
|
|
63
55
|
|
|
64
|
-
|
|
56
|
+
const handleDrop = e => {
|
|
65
57
|
e.stopPropagation(); // stops the browser from redirecting.
|
|
66
58
|
|
|
67
59
|
if (e.dataTransfer) {
|
|
@@ -80,7 +72,7 @@ var useDrag = function useDrag(_ref) {
|
|
|
80
72
|
layoutRef.addEventListener('drop', handleDrop);
|
|
81
73
|
}
|
|
82
74
|
|
|
83
|
-
return
|
|
75
|
+
return () => {
|
|
84
76
|
if (!disabled) {
|
|
85
77
|
layoutRef.removeEventListener('dragstart', handleDragStart);
|
|
86
78
|
layoutRef.removeEventListener('dragend', handleDragEnd);
|
|
@@ -92,9 +84,9 @@ var useDrag = function useDrag(_ref) {
|
|
|
92
84
|
};
|
|
93
85
|
}, [disabled, ref, shape, setLayoutDragging, handleSelect, onMoveShapes, layoutDragging]);
|
|
94
86
|
return {
|
|
95
|
-
isOver
|
|
87
|
+
isOver
|
|
96
88
|
};
|
|
97
89
|
};
|
|
98
90
|
|
|
99
91
|
var _default = useDrag;
|
|
100
|
-
exports
|
|
92
|
+
exports.default = _default;
|
|
@@ -5,9 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports
|
|
9
|
-
|
|
10
|
-
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
8
|
+
exports.default = void 0;
|
|
11
9
|
|
|
12
10
|
var _react = require("react");
|
|
13
11
|
|
|
@@ -29,100 +27,91 @@ var _tools = require("../types/tools");
|
|
|
29
27
|
|
|
30
28
|
var _tools2 = require("../constants/tools");
|
|
31
29
|
|
|
32
|
-
var
|
|
30
|
+
var _useDoubleClick = _interopRequireDefault(require("./useDoubleClick"));
|
|
33
31
|
|
|
34
|
-
|
|
32
|
+
const handleMove = (e, canvasRef, activeTool, canvasOffset, selectedShape, selectionMode, canvasOffsetStartPosition, width, height, scaleRatio, setHoverMode, updateSingleShape, setCanvasOffset, setSelectedShape, selectionPadding) => {
|
|
35
33
|
if (activeTool.type === _tools.ActionsEnum.move && canvasOffsetStartPosition !== undefined) {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
setCanvasOffset([_cursorPosition[0] - canvasOffsetStartPosition[0], _cursorPosition[1] - canvasOffsetStartPosition[1]]);
|
|
34
|
+
const cursorPosition = (0, _intersect.getCursorPosition)(e, canvasRef.current, width, height, scaleRatio);
|
|
35
|
+
setCanvasOffset([cursorPosition[0] - canvasOffsetStartPosition[0], cursorPosition[1] - canvasOffsetStartPosition[1]]);
|
|
39
36
|
}
|
|
40
37
|
|
|
41
38
|
if (selectedShape == undefined) return;
|
|
42
39
|
if (selectedShape.locked) return;
|
|
43
|
-
|
|
40
|
+
const cursorPosition = (0, _intersect.getCursorPosition)(e, canvasRef.current, width, height, scaleRatio);
|
|
44
41
|
|
|
45
|
-
if (selectionMode.mode === _Mode.SelectionModeLib
|
|
46
|
-
|
|
47
|
-
mode: _Mode.SelectionModeLib
|
|
42
|
+
if (selectionMode.mode === _Mode.SelectionModeLib.default || selectionMode.mode === _Mode.SelectionModeLib.textedition) {
|
|
43
|
+
const positionIntersection = (0, _intersect.checkPositionIntersection)(selectedShape, cursorPosition, canvasOffset, selectionPadding, scaleRatio, true) || {
|
|
44
|
+
mode: _Mode.SelectionModeLib.default
|
|
48
45
|
};
|
|
49
46
|
setHoverMode(positionIntersection);
|
|
50
47
|
} else {
|
|
51
48
|
var _canvasRef$current;
|
|
52
49
|
|
|
53
|
-
|
|
50
|
+
const ctx = (_canvasRef$current = canvasRef.current) === null || _canvasRef$current === void 0 ? void 0 : _canvasRef$current.getContext('2d');
|
|
54
51
|
if (!ctx) return;
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
updateSingleShape(_newShape);
|
|
59
|
-
setSelectedShape(_newShape);
|
|
52
|
+
const newShape = (0, _transform.transformShape)(ctx, selectedShape, cursorPosition, canvasOffset, selectionMode, selectionPadding);
|
|
53
|
+
updateSingleShape(newShape);
|
|
54
|
+
setSelectedShape(newShape);
|
|
60
55
|
}
|
|
61
56
|
};
|
|
62
57
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
(0, _react.useEffect)(function () {
|
|
101
|
-
var handleMouseMove = function handleMouseMove(e) {
|
|
102
|
-
return window.requestAnimationFrame(function () {
|
|
103
|
-
return handleMove(e, selectionCanvasRef, activeTool, canvasOffset, selectedShape, selectionMode, canvasOffsetStartPosition, width, height, scaleRatio, setHoverMode, updateSingleShape, setCanvasOffset, setSelectedShape, selectionPadding);
|
|
104
|
-
});
|
|
105
|
-
};
|
|
58
|
+
const useDrawableCanvas = _ref => {
|
|
59
|
+
let {
|
|
60
|
+
disabled = false,
|
|
61
|
+
addShape,
|
|
62
|
+
canvasSize,
|
|
63
|
+
drawCanvasRef,
|
|
64
|
+
setActiveTool,
|
|
65
|
+
shapes,
|
|
66
|
+
selectionMode,
|
|
67
|
+
activeTool,
|
|
68
|
+
isInsideComponent,
|
|
69
|
+
setCanvasOffset,
|
|
70
|
+
selectedShape,
|
|
71
|
+
selectionCanvasRef,
|
|
72
|
+
canvasOffsetStartPosition,
|
|
73
|
+
setSelectedShape,
|
|
74
|
+
setCanvasOffsetStartPosition,
|
|
75
|
+
updateSingleShape,
|
|
76
|
+
canvasOffset,
|
|
77
|
+
saveShapes,
|
|
78
|
+
setSelectionMode,
|
|
79
|
+
selectionPadding
|
|
80
|
+
} = _ref;
|
|
81
|
+
const {
|
|
82
|
+
width,
|
|
83
|
+
height,
|
|
84
|
+
scaleRatio
|
|
85
|
+
} = canvasSize;
|
|
86
|
+
const [hoverMode, setHoverMode] = (0, _react.useState)({
|
|
87
|
+
mode: _Mode.SelectionModeLib.default
|
|
88
|
+
});
|
|
89
|
+
const {
|
|
90
|
+
registerDoubleClickEvent,
|
|
91
|
+
unRegisterDoubleClickEvent
|
|
92
|
+
} = (0, _useDoubleClick.default)();
|
|
93
|
+
(0, _react.useEffect)(() => {
|
|
94
|
+
const handleMouseMove = e => window.requestAnimationFrame(() => handleMove(e, selectionCanvasRef, activeTool, canvasOffset, selectedShape, selectionMode, canvasOffsetStartPosition, width, height, scaleRatio, setHoverMode, updateSingleShape, setCanvasOffset, setSelectedShape, selectionPadding));
|
|
106
95
|
|
|
107
96
|
if (isInsideComponent) {
|
|
108
97
|
document.addEventListener('mousemove', handleMouseMove);
|
|
109
98
|
document.addEventListener('touchmove', handleMouseMove);
|
|
110
99
|
}
|
|
111
100
|
|
|
112
|
-
return
|
|
101
|
+
return () => {
|
|
113
102
|
if (isInsideComponent) {
|
|
114
103
|
document.removeEventListener('mousemove', handleMouseMove);
|
|
115
104
|
document.removeEventListener('touchmove', handleMouseMove);
|
|
116
105
|
}
|
|
117
106
|
};
|
|
118
107
|
}, [isInsideComponent, selectionCanvasRef, selectedShape, selectionMode, setHoverMode, canvasOffset, canvasOffsetStartPosition, width, height, scaleRatio, updateSingleShape, activeTool, setCanvasOffset, setSelectedShape, selectionPadding]);
|
|
119
|
-
(0, _react.useEffect)(
|
|
120
|
-
|
|
108
|
+
(0, _react.useEffect)(() => {
|
|
109
|
+
const handleMouseUp = () => {
|
|
121
110
|
if (selectionMode.mode === _Mode.SelectionModeLib.textedition) return;
|
|
122
111
|
|
|
123
|
-
if (selectionMode.mode !== _Mode.SelectionModeLib
|
|
112
|
+
if (selectionMode.mode !== _Mode.SelectionModeLib.default) {
|
|
124
113
|
setSelectionMode({
|
|
125
|
-
mode: _Mode.SelectionModeLib
|
|
114
|
+
mode: _Mode.SelectionModeLib.default
|
|
126
115
|
});
|
|
127
116
|
saveShapes();
|
|
128
117
|
}
|
|
@@ -133,67 +122,64 @@ var useDrawableCanvas = function useDrawableCanvas(_ref) {
|
|
|
133
122
|
document.addEventListener('touchend', handleMouseUp);
|
|
134
123
|
}
|
|
135
124
|
|
|
136
|
-
return
|
|
125
|
+
return () => {
|
|
137
126
|
if (isInsideComponent) {
|
|
138
127
|
document.removeEventListener('mouseup', handleMouseUp);
|
|
139
128
|
document.removeEventListener('touchend', handleMouseUp);
|
|
140
129
|
}
|
|
141
130
|
};
|
|
142
131
|
}, [isInsideComponent, selectionMode, saveShapes, setSelectionMode]);
|
|
143
|
-
(0, _react.useEffect)(
|
|
144
|
-
|
|
132
|
+
(0, _react.useEffect)(() => {
|
|
133
|
+
const ref = selectionCanvasRef.current;
|
|
145
134
|
if (!ref) return;
|
|
146
135
|
if (disabled) return;
|
|
147
136
|
|
|
148
|
-
|
|
137
|
+
const handleMouseDown = e => {
|
|
149
138
|
e.preventDefault();
|
|
150
|
-
|
|
139
|
+
const cursorPosition = (0, _intersect.getCursorPosition)(e, selectionCanvasRef.current, width, height, scaleRatio);
|
|
151
140
|
|
|
152
141
|
if (activeTool.type === _tools.ActionsEnum.selection) {
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
142
|
+
const {
|
|
143
|
+
shape,
|
|
144
|
+
mode
|
|
145
|
+
} = (0, _selection.selectShape)(shapes, cursorPosition, scaleRatio, canvasOffset, selectedShape, selectionPadding);
|
|
157
146
|
setSelectedShape(shape);
|
|
158
147
|
setSelectionMode(mode);
|
|
159
148
|
} else if (activeTool.type === _tools.ActionsEnum.move) {
|
|
160
149
|
setCanvasOffsetStartPosition(cursorPosition);
|
|
161
150
|
}
|
|
162
151
|
|
|
163
|
-
if (_fp
|
|
152
|
+
if (_fp.default.includes(activeTool.type, _Shapes.ShapeEnum)) {
|
|
164
153
|
var _drawCanvasRef$curren;
|
|
165
154
|
|
|
166
|
-
|
|
155
|
+
const drawCtx = (_drawCanvasRef$curren = drawCanvasRef.current) === null || _drawCanvasRef$curren === void 0 ? void 0 : _drawCanvasRef$curren.getContext('2d');
|
|
167
156
|
if (!drawCtx) return;
|
|
168
157
|
|
|
169
158
|
if (activeTool.type === _Shapes.ShapeEnum.brush) {
|
|
170
159
|
if (!!selectedShape) {
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
setSelectedShape(_newShape2);
|
|
160
|
+
const newShape = (0, _transform.createNewPointGroupToShape)(selectedShape, cursorPosition);
|
|
161
|
+
updateSingleShape(newShape);
|
|
162
|
+
setSelectedShape(newShape);
|
|
175
163
|
} else {
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
setSelectedShape(_newShape3);
|
|
164
|
+
const newShape = (0, _data.createShape)(drawCtx, activeTool, cursorPosition);
|
|
165
|
+
if (!newShape) return;
|
|
166
|
+
addShape(newShape);
|
|
167
|
+
setSelectedShape(newShape);
|
|
181
168
|
}
|
|
182
169
|
|
|
183
170
|
setSelectionMode({
|
|
184
171
|
mode: _Mode.SelectionModeLib.brush
|
|
185
172
|
});
|
|
186
173
|
} else {
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
addShape(_newShape4);
|
|
174
|
+
const newShape = (0, _data.createShape)(drawCtx, activeTool, cursorPosition);
|
|
175
|
+
if (!newShape) return;
|
|
176
|
+
addShape(newShape);
|
|
191
177
|
setActiveTool(_tools2.SELECTION_TOOL);
|
|
192
|
-
setSelectedShape(
|
|
178
|
+
setSelectedShape(newShape);
|
|
193
179
|
setSelectionMode({
|
|
194
180
|
mode: _Mode.SelectionModeLib.resize,
|
|
195
181
|
cursorStartPosition: cursorPosition,
|
|
196
|
-
originalShape:
|
|
182
|
+
originalShape: newShape,
|
|
197
183
|
anchor: activeTool.type === _Shapes.ShapeEnum.line || activeTool.type === _Shapes.ShapeEnum.polygon || activeTool.type === _Shapes.ShapeEnum.curve ? 0 : [1, 1]
|
|
198
184
|
});
|
|
199
185
|
}
|
|
@@ -206,19 +192,19 @@ var useDrawableCanvas = function useDrawableCanvas(_ref) {
|
|
|
206
192
|
ref.addEventListener('touchstart', handleMouseDown, {
|
|
207
193
|
passive: false
|
|
208
194
|
});
|
|
209
|
-
return
|
|
195
|
+
return () => {
|
|
210
196
|
ref.removeEventListener('mousedown', handleMouseDown);
|
|
211
197
|
ref.removeEventListener('touchstart', handleMouseDown);
|
|
212
198
|
};
|
|
213
199
|
}, [disabled, selectionCanvasRef, drawCanvasRef, selectedShape, activeTool, canvasOffset, setCanvasOffsetStartPosition, shapes, width, height, scaleRatio, updateSingleShape, addShape, setActiveTool, setSelectedShape, setSelectionMode, selectionPadding]);
|
|
214
|
-
(0, _react.useEffect)(
|
|
215
|
-
|
|
200
|
+
(0, _react.useEffect)(() => {
|
|
201
|
+
const ref = selectionCanvasRef.current;
|
|
216
202
|
if (!ref) return;
|
|
217
203
|
|
|
218
|
-
|
|
204
|
+
const handleDoubleClick = e => {
|
|
219
205
|
if (activeTool.type === _tools.ActionsEnum.selection) {
|
|
220
206
|
if ((selectedShape === null || selectedShape === void 0 ? void 0 : selectedShape.type) === _Shapes.ShapeEnum.text) {
|
|
221
|
-
|
|
207
|
+
const cursorPosition = (0, _intersect.getCursorPosition)(e, selectionCanvasRef.current, width, height, scaleRatio);
|
|
222
208
|
|
|
223
209
|
if ((0, _intersect.checkPositionIntersection)(selectedShape, cursorPosition, canvasOffset, selectionPadding)) {
|
|
224
210
|
setSelectionMode({
|
|
@@ -232,15 +218,15 @@ var useDrawableCanvas = function useDrawableCanvas(_ref) {
|
|
|
232
218
|
|
|
233
219
|
if (isInsideComponent) {
|
|
234
220
|
registerDoubleClickEvent(ref, handleDoubleClick);
|
|
235
|
-
return
|
|
221
|
+
return () => {
|
|
236
222
|
unRegisterDoubleClickEvent(ref);
|
|
237
223
|
};
|
|
238
224
|
}
|
|
239
225
|
}, [registerDoubleClickEvent, unRegisterDoubleClickEvent, isInsideComponent, selectionCanvasRef, activeTool, selectedShape, width, height, scaleRatio, canvasOffset, setSelectionMode, selectionPadding]);
|
|
240
226
|
return {
|
|
241
|
-
hoverMode
|
|
227
|
+
hoverMode
|
|
242
228
|
};
|
|
243
229
|
};
|
|
244
230
|
|
|
245
231
|
var _default = useDrawableCanvas;
|
|
246
|
-
exports
|
|
232
|
+
exports.default = _default;
|
|
@@ -5,11 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports
|
|
9
|
-
|
|
10
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
-
|
|
12
|
-
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
8
|
+
exports.default = void 0;
|
|
13
9
|
|
|
14
10
|
var _react = require("react");
|
|
15
11
|
|
|
@@ -19,42 +15,36 @@ var _data = require("../utils/data");
|
|
|
19
15
|
|
|
20
16
|
var _keyboard = require("../types/keyboard");
|
|
21
17
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
var _useState = (0, _react.useState)(undefined),
|
|
38
|
-
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
39
|
-
copiedShape = _useState2[0],
|
|
40
|
-
setCopiedShape = _useState2[1];
|
|
41
|
-
|
|
42
|
-
(0, _react.useEffect)(function () {
|
|
43
|
-
var handleCopy = function handleCopy(e) {
|
|
18
|
+
const useKeyboard = _ref => {
|
|
19
|
+
let {
|
|
20
|
+
isInsideComponent,
|
|
21
|
+
selectedShape,
|
|
22
|
+
isEditingText,
|
|
23
|
+
setSelectedShape,
|
|
24
|
+
removeShape,
|
|
25
|
+
pasteShape,
|
|
26
|
+
updateShape,
|
|
27
|
+
backwardShape,
|
|
28
|
+
forwardShape
|
|
29
|
+
} = _ref;
|
|
30
|
+
const [copiedShape, setCopiedShape] = (0, _react.useState)(undefined);
|
|
31
|
+
(0, _react.useEffect)(() => {
|
|
32
|
+
const handleCopy = e => {
|
|
44
33
|
if (!selectedShape) return;
|
|
45
34
|
if (isEditingText) return;
|
|
46
35
|
e.preventDefault();
|
|
47
|
-
setCopiedShape(
|
|
36
|
+
setCopiedShape({ ...selectedShape
|
|
37
|
+
});
|
|
48
38
|
};
|
|
49
39
|
|
|
50
|
-
|
|
40
|
+
const handlePaste = e => {
|
|
51
41
|
if (!copiedShape) return;
|
|
52
42
|
if (isEditingText) return;
|
|
53
43
|
e.preventDefault();
|
|
54
44
|
pasteShape((0, _data.copyShape)(copiedShape));
|
|
55
45
|
};
|
|
56
46
|
|
|
57
|
-
|
|
47
|
+
const handleKeyDown = e => {
|
|
58
48
|
if (e.metaKey || e.ctrlKey) {
|
|
59
49
|
if (e.key === _keyboard.KeyboardCode.Z) {
|
|
60
50
|
e.preventDefault();
|
|
@@ -80,19 +70,19 @@ var useKeyboard = function useKeyboard(_ref) {
|
|
|
80
70
|
|
|
81
71
|
switch (e.key) {
|
|
82
72
|
case _keyboard.KeyboardCode.ArrowLeft:
|
|
83
|
-
updateShape(_fp
|
|
73
|
+
updateShape(_fp.default.set('translation', [selectedShape.translation[0] - 1, selectedShape.translation[1]], selectedShape));
|
|
84
74
|
break;
|
|
85
75
|
|
|
86
76
|
case _keyboard.KeyboardCode.ArrowRight:
|
|
87
|
-
updateShape(_fp
|
|
77
|
+
updateShape(_fp.default.set('translation', [selectedShape.translation[0] + 1, selectedShape.translation[1]], selectedShape));
|
|
88
78
|
break;
|
|
89
79
|
|
|
90
80
|
case _keyboard.KeyboardCode.ArrowDown:
|
|
91
|
-
updateShape(_fp
|
|
81
|
+
updateShape(_fp.default.set('translation', [selectedShape.translation[0], selectedShape.translation[1] + 1], selectedShape));
|
|
92
82
|
break;
|
|
93
83
|
|
|
94
84
|
case _keyboard.KeyboardCode.ArrowUp:
|
|
95
|
-
updateShape(_fp
|
|
85
|
+
updateShape(_fp.default.set('translation', [selectedShape.translation[0], selectedShape.translation[1] - 1], selectedShape));
|
|
96
86
|
break;
|
|
97
87
|
|
|
98
88
|
case _keyboard.KeyboardCode.Delete:
|
|
@@ -108,7 +98,7 @@ var useKeyboard = function useKeyboard(_ref) {
|
|
|
108
98
|
document.addEventListener(_keyboard.KeyboardCommand.Paste, handlePaste);
|
|
109
99
|
}
|
|
110
100
|
|
|
111
|
-
return
|
|
101
|
+
return () => {
|
|
112
102
|
if (isInsideComponent) {
|
|
113
103
|
document.removeEventListener('keydown', handleKeyDown);
|
|
114
104
|
document.removeEventListener(_keyboard.KeyboardCommand.Copy, handleCopy);
|
|
@@ -120,4 +110,4 @@ var useKeyboard = function useKeyboard(_ref) {
|
|
|
120
110
|
};
|
|
121
111
|
|
|
122
112
|
var _default = useKeyboard;
|
|
123
|
-
exports
|
|
113
|
+
exports.default = _default;
|
|
@@ -5,36 +5,38 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports
|
|
8
|
+
exports.default = void 0;
|
|
9
9
|
|
|
10
10
|
var _fp = _interopRequireDefault(require("lodash/fp"));
|
|
11
11
|
|
|
12
12
|
var _react = require("react");
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
14
|
+
const useResizeObserver = _ref => {
|
|
15
|
+
let {
|
|
16
|
+
onResized,
|
|
17
|
+
element
|
|
18
|
+
} = _ref;
|
|
19
|
+
(0, _react.useEffect)(() => {
|
|
20
|
+
const current = element.current;
|
|
19
21
|
if (!current) return;
|
|
20
|
-
|
|
21
|
-
|
|
22
|
+
const resizeObserver = new ResizeObserver(entries => {
|
|
23
|
+
const {
|
|
24
|
+
width,
|
|
25
|
+
height
|
|
26
|
+
} = _fp.default.get('0.borderBoxSize', entries) ? _fp.default.flow(_fp.default.get('0.borderBoxSize'), _fp.default.castArray, _fp.default.first, el => {
|
|
22
27
|
return {
|
|
23
|
-
width: _fp
|
|
24
|
-
height: _fp
|
|
28
|
+
width: _fp.default.get('inlineSize', el),
|
|
29
|
+
height: _fp.default.get('blockSize', el)
|
|
25
30
|
};
|
|
26
|
-
})(entries) : _fp
|
|
27
|
-
width = _ref2.width,
|
|
28
|
-
height = _ref2.height;
|
|
29
|
-
|
|
31
|
+
})(entries) : _fp.default.get('0.contentRect', entries);
|
|
30
32
|
onResized(width, height);
|
|
31
33
|
});
|
|
32
34
|
resizeObserver.observe(current);
|
|
33
|
-
return
|
|
35
|
+
return () => {
|
|
34
36
|
resizeObserver.unobserve(current);
|
|
35
37
|
};
|
|
36
38
|
}, [element, onResized]);
|
|
37
39
|
};
|
|
38
40
|
|
|
39
41
|
var _default = useResizeObserver;
|
|
40
|
-
exports
|
|
42
|
+
exports.default = _default;
|