@yorab/react-paint 0.2.2

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