@yorab/react-paint 0.6.4 → 0.7.1

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