@yorab/react-paint 0.7.5 → 0.8.0

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 (149) hide show
  1. package/dist/components/App.d.ts +20 -0
  2. package/dist/components/Canvas.d.ts +38 -0
  3. package/dist/components/common/Button.d.ts +16 -0
  4. package/dist/components/common/Loading.d.ts +7 -0
  5. package/dist/components/common/Modal.d.ts +10 -0
  6. package/dist/components/common/Panel.d.ts +13 -0
  7. package/dist/components/common/Snackbar.d.ts +8 -0
  8. package/dist/components/settings/ColorField.d.ts +15 -0
  9. package/dist/components/settings/DeleteButton.d.ts +9 -0
  10. package/dist/components/settings/FontFamilyField.d.ts +12 -0
  11. package/dist/components/settings/LayoutButton.d.ts +8 -0
  12. package/dist/components/settings/Layouts.d.ts +19 -0
  13. package/dist/components/settings/LineArrowField.d.ts +12 -0
  14. package/dist/components/settings/LineTypeField.d.ts +16 -0
  15. package/dist/components/settings/PointsNumberField.d.ts +13 -0
  16. package/dist/components/settings/RangeField.d.ts +18 -0
  17. package/dist/components/settings/SelectField.d.ts +18 -0
  18. package/dist/components/settings/SettingsBar.d.ts +19 -0
  19. package/dist/components/settings/ToggleField.d.ts +12 -0
  20. package/dist/components/toolbox/EditTextBox.d.ts +14 -0
  21. package/dist/components/toolbox/LoadFileTool.d.ts +12 -0
  22. package/dist/components/toolbox/MenuGroup.d.ts +35 -0
  23. package/dist/components/toolbox/PictureUrlInput.d.ts +8 -0
  24. package/dist/components/toolbox/Tool.d.ts +12 -0
  25. package/dist/components/toolbox/Toolbar.d.ts +27 -0
  26. package/dist/components/toolbox/ToolbarGroup.d.ts +18 -0
  27. package/dist/constants/app.d.ts +41 -0
  28. package/dist/constants/icons.d.ts +41 -0
  29. package/dist/constants/loading.d.ts +1 -0
  30. package/dist/constants/picture.d.ts +1 -0
  31. package/dist/constants/shapes.d.ts +8 -0
  32. package/dist/constants/snackbar.d.ts +7 -0
  33. package/dist/constants/style.d.ts +17 -0
  34. package/dist/constants/tools.d.ts +32 -0
  35. package/dist/hooks/useComponent.d.ts +9 -0
  36. package/dist/hooks/useDoubleClick.d.ts +5 -0
  37. package/dist/hooks/useDrag.d.ts +15 -0
  38. package/dist/hooks/useDrawableCanvas.d.ts +37 -0
  39. package/dist/hooks/useKeyboard.d.ts +18 -0
  40. package/dist/hooks/useResizeObserver.d.ts +7 -0
  41. package/dist/hooks/useShapes.d.ts +22 -0
  42. package/dist/hooks/useSnackbar.d.ts +10 -0
  43. package/dist/react-paint.css +1 -0
  44. package/dist/react-paint.js +9109 -0
  45. package/dist/react-paint.umd.cjs +53 -0
  46. package/dist/types/Mode.d.ts +43 -0
  47. package/dist/types/Shapes.d.ts +112 -0
  48. package/dist/types/snackbar.d.ts +7 -0
  49. package/dist/types/tools.d.ts +124 -0
  50. package/dist/types/utils.d.ts +3 -0
  51. package/dist/utils/canvas.d.ts +10 -0
  52. package/dist/utils/data.d.ts +225 -0
  53. package/dist/utils/dom.d.ts +1 -0
  54. package/dist/utils/file.d.ts +10 -0
  55. package/dist/utils/intersect.d.ts +6 -0
  56. package/dist/utils/migration.d.ts +165 -0
  57. package/dist/utils/selection.d.ts +7 -0
  58. package/dist/utils/shapes/brush.d.ts +55 -0
  59. package/dist/utils/shapes/circle.d.ts +13 -0
  60. package/dist/utils/shapes/curve.d.ts +11 -0
  61. package/dist/utils/shapes/default.d.ts +10 -0
  62. package/dist/utils/shapes/ellipse.d.ts +13 -0
  63. package/dist/utils/shapes/grid.d.ts +3 -0
  64. package/dist/utils/shapes/index.d.ts +245 -0
  65. package/dist/utils/shapes/line.d.ts +23 -0
  66. package/dist/utils/shapes/picture.d.ts +6 -0
  67. package/dist/utils/shapes/polygon.d.ts +11 -0
  68. package/dist/utils/shapes/rectangle.d.ts +26 -0
  69. package/dist/utils/shapes/text.d.ts +48 -0
  70. package/dist/utils/shapes/triangle.d.ts +2 -0
  71. package/dist/utils/string.d.ts +3 -0
  72. package/dist/utils/style.d.ts +2 -0
  73. package/dist/utils/toolbar.d.ts +13 -0
  74. package/dist/utils/transform.d.ts +8 -0
  75. package/dist/utils/trigo.d.ts +10 -0
  76. package/package.json +51 -56
  77. package/dist/components/App.js +0 -496
  78. package/dist/components/Canvas.js +0 -194
  79. package/dist/components/common/Button.js +0 -88
  80. package/dist/components/common/Loading.js +0 -57
  81. package/dist/components/common/Modal.js +0 -46
  82. package/dist/components/common/Panel.js +0 -43
  83. package/dist/components/common/Snackbar.js +0 -68
  84. package/dist/components/settings/ColorField.js +0 -125
  85. package/dist/components/settings/DeleteButton.js +0 -37
  86. package/dist/components/settings/FontFamilyField.js +0 -67
  87. package/dist/components/settings/LayoutButton.js +0 -39
  88. package/dist/components/settings/Layouts.js +0 -214
  89. package/dist/components/settings/LineArrowField.js +0 -67
  90. package/dist/components/settings/LineTypeField.js +0 -65
  91. package/dist/components/settings/PointsNumberField.js +0 -45
  92. package/dist/components/settings/RangeField.js +0 -82
  93. package/dist/components/settings/SelectField.js +0 -81
  94. package/dist/components/settings/SettingsBar.js +0 -383
  95. package/dist/components/settings/ToggleField.js +0 -49
  96. package/dist/components/toolbox/EditTextBox.js +0 -138
  97. package/dist/components/toolbox/LoadFileTool.js +0 -58
  98. package/dist/components/toolbox/MenuGroup.js +0 -173
  99. package/dist/components/toolbox/PictureUrlInput.js +0 -68
  100. package/dist/components/toolbox/Tool.js +0 -41
  101. package/dist/components/toolbox/Toolbar.js +0 -203
  102. package/dist/components/toolbox/ToolbarGroup.js +0 -134
  103. package/dist/constants/app.js +0 -51
  104. package/dist/constants/icons.js +0 -88
  105. package/dist/constants/loading.js +0 -8
  106. package/dist/constants/picture.js +0 -8
  107. package/dist/constants/shapes.js +0 -20
  108. package/dist/constants/snackbar.js +0 -15
  109. package/dist/constants/style.js +0 -35
  110. package/dist/constants/tools.js +0 -424
  111. package/dist/hooks/useComponent.js +0 -47
  112. package/dist/hooks/useDoubleClick.js +0 -46
  113. package/dist/hooks/useDrag.js +0 -92
  114. package/dist/hooks/useDrawableCanvas.js +0 -230
  115. package/dist/hooks/useKeyboard.js +0 -142
  116. package/dist/hooks/useResizeObserver.js +0 -42
  117. package/dist/hooks/useShapes.js +0 -184
  118. package/dist/hooks/useSnackbar.js +0 -56
  119. package/dist/styles.css +0 -91
  120. package/dist/types/Mode.js +0 -5
  121. package/dist/types/Shapes.js +0 -5
  122. package/dist/types/snackbar.js +0 -5
  123. package/dist/types/tools.js +0 -5
  124. package/dist/types/utils.js +0 -5
  125. package/dist/utils/canvas.js +0 -49
  126. package/dist/utils/data.js +0 -49
  127. package/dist/utils/dom.js +0 -12
  128. package/dist/utils/file.js +0 -171
  129. package/dist/utils/intersect.js +0 -122
  130. package/dist/utils/migration.js +0 -59
  131. package/dist/utils/selection.js +0 -86
  132. package/dist/utils/shapes/brush.js +0 -135
  133. package/dist/utils/shapes/circle.js +0 -93
  134. package/dist/utils/shapes/curve.js +0 -55
  135. package/dist/utils/shapes/default.js +0 -73
  136. package/dist/utils/shapes/ellipse.js +0 -101
  137. package/dist/utils/shapes/grid.js +0 -36
  138. package/dist/utils/shapes/index.js +0 -341
  139. package/dist/utils/shapes/line.js +0 -179
  140. package/dist/utils/shapes/picture.js +0 -103
  141. package/dist/utils/shapes/polygon.js +0 -69
  142. package/dist/utils/shapes/rectangle.js +0 -100
  143. package/dist/utils/shapes/text.js +0 -128
  144. package/dist/utils/shapes/triangle.js +0 -24
  145. package/dist/utils/string.js +0 -36
  146. package/dist/utils/style.js +0 -46
  147. package/dist/utils/toolbar.js +0 -78
  148. package/dist/utils/transform.js +0 -109
  149. package/dist/utils/trigo.js +0 -42
@@ -1,47 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _react = require("react");
9
-
10
- var _dom = require("../utils/dom");
11
-
12
- const useComponent = _ref => {
13
- let {
14
- disabled,
15
- componentRef
16
- } = _ref;
17
- const [isInsideComponent, setIsInsideComponent] = (0, _react.useState)(false);
18
- (0, _react.useEffect)(() => {
19
- const onDetectClick = event => {
20
- setIsInsideComponent((0, _dom.isEventInsideNode)(event, componentRef.current));
21
- };
22
-
23
- if (disabled) {
24
- setIsInsideComponent(false);
25
- } else {
26
- document.addEventListener('mousedown', onDetectClick, {
27
- passive: true
28
- });
29
- document.addEventListener('touchstart', onDetectClick, {
30
- passive: true
31
- });
32
- }
33
-
34
- return () => {
35
- if (!disabled) {
36
- document.removeEventListener('mousedown', onDetectClick);
37
- document.removeEventListener('touchstart', onDetectClick);
38
- }
39
- };
40
- }, [disabled, componentRef]);
41
- return {
42
- isInsideComponent
43
- };
44
- };
45
-
46
- var _default = useComponent;
47
- exports.default = _default;
@@ -1,46 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _react = require("react");
9
-
10
- const DELTA_TIME_THRESHOLD_MS = 300;
11
-
12
- const useDoubleClick = () => {
13
- const lastClickTimestampRef = (0, _react.useRef)(undefined);
14
- const callbackRef = (0, _react.useRef)(undefined);
15
-
16
- const onClick = e => {
17
- const currentTimestamp = new Date().getTime();
18
-
19
- if (lastClickTimestampRef.current && currentTimestamp < lastClickTimestampRef.current + DELTA_TIME_THRESHOLD_MS) {
20
- var _callbackRef$current;
21
-
22
- (_callbackRef$current = callbackRef.current) === null || _callbackRef$current === void 0 ? void 0 : _callbackRef$current.call(callbackRef, e);
23
- }
24
-
25
- lastClickTimestampRef.current = new Date().getTime();
26
- };
27
-
28
- const registerDoubleClickEvent = (element, callback) => {
29
- callbackRef.current = callback;
30
- element.addEventListener('click', onClick);
31
- element.addEventListener('touchend', onClick);
32
- };
33
-
34
- const unRegisterDoubleClickEvent = element => {
35
- element.removeEventListener('click', onClick);
36
- element.removeEventListener('touchend', onClick);
37
- };
38
-
39
- return {
40
- registerDoubleClickEvent,
41
- unRegisterDoubleClickEvent
42
- };
43
- };
44
-
45
- var _default = useDoubleClick;
46
- exports.default = _default;
@@ -1,92 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _react = require("react");
9
-
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)(() => {
22
- if (!layoutDragging) setIsOver(false);
23
- }, [layoutDragging]);
24
- (0, _react.useEffect)(() => {
25
- const layoutRef = ref.current;
26
- if (!layoutRef) return;
27
-
28
- const handleDragEnd = () => {
29
- setLayoutDragging(undefined);
30
- };
31
-
32
- const handleDragOver = e => {
33
- if (e.preventDefault) {
34
- e.preventDefault();
35
- }
36
-
37
- return false;
38
- };
39
-
40
- const handleDragStart = e => {
41
- handleSelect(shape);
42
- if (!e.dataTransfer) return;
43
- e.dataTransfer.effectAllowed = 'move';
44
- e.dataTransfer.setData('draggableShapeId', shape.id);
45
- setLayoutDragging(shape.id);
46
- };
47
-
48
- const handleDragEnter = () => {
49
- layoutDragging !== shape.id && setIsOver(true);
50
- };
51
-
52
- const handleDragLeave = () => {
53
- setIsOver(false);
54
- };
55
-
56
- const handleDrop = e => {
57
- e.stopPropagation(); // stops the browser from redirecting.
58
-
59
- if (e.dataTransfer) {
60
- onMoveShapes(e.dataTransfer.getData('draggableShapeId'), shape.id);
61
- }
62
-
63
- return false;
64
- };
65
-
66
- if (!disabled) {
67
- layoutRef.addEventListener('dragstart', handleDragStart);
68
- layoutRef.addEventListener('dragend', handleDragEnd);
69
- layoutRef.addEventListener('dragover', handleDragOver);
70
- layoutRef.addEventListener('dragenter', handleDragEnter);
71
- layoutRef.addEventListener('dragleave', handleDragLeave);
72
- layoutRef.addEventListener('drop', handleDrop);
73
- }
74
-
75
- return () => {
76
- if (!disabled) {
77
- layoutRef.removeEventListener('dragstart', handleDragStart);
78
- layoutRef.removeEventListener('dragend', handleDragEnd);
79
- layoutRef.removeEventListener('dragover', handleDragOver);
80
- layoutRef.removeEventListener('dragenter', handleDragEnter);
81
- layoutRef.removeEventListener('dragleave', handleDragLeave);
82
- layoutRef.removeEventListener('drop', handleDrop);
83
- }
84
- };
85
- }, [disabled, ref, shape, setLayoutDragging, handleSelect, onMoveShapes, layoutDragging]);
86
- return {
87
- isOver
88
- };
89
- };
90
-
91
- var _default = useDrag;
92
- exports.default = _default;
@@ -1,230 +0,0 @@
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 _react = require("react");
11
-
12
- var _selection = require("../utils/selection");
13
-
14
- var _intersect = require("../utils/intersect");
15
-
16
- var _transform = require("../utils/transform");
17
-
18
- var _tools = require("../constants/tools");
19
-
20
- var _useDoubleClick = _interopRequireDefault(require("./useDoubleClick"));
21
-
22
- var _shapes = require("../constants/shapes");
23
-
24
- var _shapes2 = require("../utils/shapes");
25
-
26
- var _brush = require("../utils/shapes/brush");
27
-
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]]);
32
- }
33
-
34
- if (selectedShape == undefined) return;
35
- if (selectedShape.locked) return;
36
- const cursorPosition = (0, _intersect.getCursorPosition)(e, canvasRef.current, width, height, scaleRatio);
37
-
38
- if (selectionMode.mode === 'default' || selectionMode.mode === 'textedition') {
39
- const positionIntersection = (0, _intersect.checkPositionIntersection)(selectedShape, cursorPosition, canvasOffset, selectionPadding, scaleRatio, true) || {
40
- mode: 'default'
41
- };
42
- setHoverMode(positionIntersection);
43
- } else {
44
- var _canvasRef$current;
45
-
46
- const ctx = (_canvasRef$current = canvasRef.current) === null || _canvasRef$current === void 0 ? void 0 : _canvasRef$current.getContext('2d');
47
- if (!ctx) return;
48
- const newShape = (0, _transform.transformShape)(ctx, selectedShape, cursorPosition, gridFormat, canvasOffset, selectionMode, selectionPadding, isShiftPressed);
49
- updateSingleShape(newShape);
50
- setSelectedShape(newShape);
51
- }
52
- };
53
-
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));
93
-
94
- if (isInsideComponent) {
95
- document.addEventListener('mousemove', handleMouseMove);
96
- document.addEventListener('touchmove', handleMouseMove);
97
- }
98
-
99
- return () => {
100
- if (isInsideComponent) {
101
- document.removeEventListener('mousemove', handleMouseMove);
102
- document.removeEventListener('touchmove', handleMouseMove);
103
- }
104
- };
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;
109
-
110
- if (selectionMode.mode !== 'default') {
111
- setSelectionMode({
112
- mode: 'default'
113
- });
114
- saveShapes();
115
- }
116
- };
117
-
118
- if (isInsideComponent) {
119
- document.addEventListener('mouseup', handleMouseUp);
120
- document.addEventListener('touchend', handleMouseUp);
121
- }
122
-
123
- return () => {
124
- if (isInsideComponent) {
125
- document.removeEventListener('mouseup', handleMouseUp);
126
- document.removeEventListener('touchend', handleMouseUp);
127
- }
128
- };
129
- }, [isInsideComponent, selectionMode, saveShapes, setSelectionMode]);
130
- (0, _react.useEffect)(() => {
131
- const ref = selectionCanvasRef.current;
132
- if (!ref) return;
133
- if (disabled) return;
134
-
135
- const handleMouseDown = e => {
136
- e.preventDefault();
137
- const cursorPosition = (0, _intersect.getCursorPosition)(e, selectionCanvasRef.current, width, height, scaleRatio);
138
-
139
- if (activeTool.type === 'selection') {
140
- const {
141
- shape,
142
- mode
143
- } = (0, _selection.selectShape)(shapes, cursorPosition, scaleRatio, canvasOffset, selectedShape, selectionPadding);
144
- setSelectedShape(shape);
145
- setSelectionMode(mode);
146
- } else if (activeTool.type === 'move') {
147
- setCanvasOffsetStartPosition(cursorPosition);
148
- }
149
-
150
- if (_shapes.ShapeTypeArray.includes(activeTool.type)) {
151
- var _drawCanvasRef$curren;
152
-
153
- const drawCtx = (_drawCanvasRef$curren = drawCanvasRef.current) === null || _drawCanvasRef$curren === void 0 ? void 0 : _drawCanvasRef$curren.getContext('2d');
154
- if (!drawCtx) return;
155
-
156
- if (activeTool.type === 'brush') {
157
- if (!!selectedShape) {
158
- const newShape = (0, _brush.addNewPointGroupToShape)(selectedShape, cursorPosition);
159
- updateSingleShape(newShape);
160
- setSelectedShape(newShape);
161
- } else {
162
- const newShape = (0, _shapes2.createShape)(drawCtx, activeTool, cursorPosition, gridFormat);
163
- if (!newShape) return;
164
- addShape(newShape);
165
- setSelectedShape(newShape);
166
- }
167
-
168
- setSelectionMode({
169
- mode: 'brush'
170
- });
171
- } else {
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);
177
- setSelectionMode({
178
- mode: 'resize',
179
- cursorStartPosition: cursorPosition,
180
- originalShape: newShape,
181
- anchor: activeTool.type === 'line' || activeTool.type === 'polygon' || activeTool.type === 'curve' ? 0 : [1, 1]
182
- });
183
- }
184
- }
185
- };
186
-
187
- ref.addEventListener('mousedown', handleMouseDown, {
188
- passive: false
189
- });
190
- ref.addEventListener('touchstart', handleMouseDown, {
191
- passive: false
192
- });
193
- return () => {
194
- ref.removeEventListener('mousedown', handleMouseDown);
195
- ref.removeEventListener('touchstart', handleMouseDown);
196
- };
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;
200
- if (!ref) return;
201
-
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);
206
-
207
- if ((0, _intersect.checkPositionIntersection)(selectedShape, cursorPosition, canvasOffset, selectionPadding)) {
208
- setSelectionMode({
209
- mode: 'textedition',
210
- defaultValue: selectedShape.value
211
- });
212
- }
213
- }
214
- }
215
- };
216
-
217
- if (isInsideComponent) {
218
- registerDoubleClickEvent(ref, handleDoubleClick);
219
- return () => {
220
- unRegisterDoubleClickEvent(ref);
221
- };
222
- }
223
- }, [registerDoubleClickEvent, unRegisterDoubleClickEvent, isInsideComponent, selectionCanvasRef, activeTool, selectedShape, width, height, scaleRatio, canvasOffset, setSelectionMode, selectionPadding]);
224
- return {
225
- hoverMode
226
- };
227
- };
228
-
229
- var _default = useDrawableCanvas;
230
- exports.default = _default;
@@ -1,142 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _style = require("../constants/style");
9
-
10
- var _react = require("react");
11
-
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
- Z: 'Z',
25
- y: 'y',
26
- Y: 'Y'
27
- };
28
- const KeyboardCommand = {
29
- Copy: 'copy',
30
- Paste: 'paste'
31
- };
32
-
33
- const useKeyboard = _ref => {
34
- let {
35
- gridFormat,
36
- isInsideComponent,
37
- selectedShape,
38
- isEditingText,
39
- setSelectedShape,
40
- removeShape,
41
- pasteShape,
42
- updateShape,
43
- backwardShape,
44
- forwardShape,
45
- setShiftPressed
46
- } = _ref;
47
- const [copiedShape, setCopiedShape] = (0, _react.useState)(undefined);
48
- (0, _react.useEffect)(() => {
49
- const handleCopy = e => {
50
- if (!selectedShape) return;
51
- if (isEditingText) return;
52
- e.preventDefault();
53
- setCopiedShape({ ...selectedShape
54
- });
55
- };
56
-
57
- const handlePaste = e => {
58
- if (!copiedShape) return;
59
- if (isEditingText) return;
60
- e.preventDefault();
61
- pasteShape((0, _shapes.copyShape)(copiedShape, gridFormat));
62
- };
63
-
64
- const handleKeyUp = e => {
65
- switch (e.key) {
66
- case KeyboardCode.Shift:
67
- setShiftPressed(false);
68
- break;
69
- }
70
- };
71
-
72
- const handleKeyDown = e => {
73
- if (e.metaKey || e.ctrlKey) {
74
- if (e.key === KeyboardCode.Z || e.key === KeyboardCode.z) {
75
- e.preventDefault();
76
- e.stopPropagation();
77
- backwardShape();
78
- return;
79
- } else if (e.key === KeyboardCode.Y || e.key === KeyboardCode.y) {
80
- e.preventDefault();
81
- e.stopPropagation();
82
- forwardShape();
83
- return;
84
- }
85
- }
86
-
87
- if (e.key === KeyboardCode.Shift) {
88
- setShiftPressed(true);
89
- return;
90
- }
91
-
92
- if (!selectedShape) return;
93
-
94
- if (e.key === KeyboardCode.Escape) {
95
- setSelectedShape(undefined);
96
- return;
97
- }
98
-
99
- if (isEditingText) return;
100
- const translationMap = {
101
- [KeyboardCode.ArrowLeft]: [gridFormat ? -_style.GRID_STEP[gridFormat - 1] : -1, 0],
102
- [KeyboardCode.ArrowRight]: [gridFormat ? _style.GRID_STEP[gridFormat - 1] : 1, 0],
103
- [KeyboardCode.ArrowDown]: [0, gridFormat ? _style.GRID_STEP[gridFormat - 1] : 1],
104
- [KeyboardCode.ArrowUp]: [0, gridFormat ? -_style.GRID_STEP[gridFormat - 1] : -1]
105
- };
106
-
107
- switch (e.key) {
108
- case KeyboardCode.ArrowLeft:
109
- case KeyboardCode.ArrowRight:
110
- case KeyboardCode.ArrowDown:
111
- case KeyboardCode.ArrowUp:
112
- updateShape((0, _shapes.translateShape)(translationMap[e.key], selectedShape, [0, 0], gridFormat));
113
- break;
114
-
115
- case KeyboardCode.Delete:
116
- case KeyboardCode.Backspace:
117
- removeShape(selectedShape);
118
- break;
119
- }
120
- };
121
-
122
- if (isInsideComponent) {
123
- document.addEventListener('keydown', handleKeyDown);
124
- document.addEventListener('keyup', handleKeyUp);
125
- document.addEventListener(KeyboardCommand.Copy, handleCopy);
126
- document.addEventListener(KeyboardCommand.Paste, handlePaste);
127
- }
128
-
129
- return () => {
130
- if (isInsideComponent) {
131
- document.removeEventListener('keydown', handleKeyDown);
132
- document.removeEventListener('keyup', handleKeyUp);
133
- document.removeEventListener(KeyboardCommand.Copy, handleCopy);
134
- document.removeEventListener(KeyboardCommand.Paste, handlePaste);
135
- }
136
- };
137
- }, [isInsideComponent, gridFormat, copiedShape, isEditingText, selectedShape, updateShape, removeShape, setSelectedShape, pasteShape, backwardShape, forwardShape, setShiftPressed]);
138
- return {};
139
- };
140
-
141
- var _default = useKeyboard;
142
- exports.default = _default;
@@ -1,42 +0,0 @@
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 _fp = _interopRequireDefault(require("lodash/fp"));
11
-
12
- var _react = require("react");
13
-
14
- const useResizeObserver = _ref => {
15
- let {
16
- onResized,
17
- element
18
- } = _ref;
19
- (0, _react.useEffect)(() => {
20
- const current = element.current;
21
- if (!current) return;
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 => {
27
- return {
28
- width: _fp.default.get('inlineSize', el),
29
- height: _fp.default.get('blockSize', el)
30
- };
31
- })(entries) : _fp.default.get('0.contentRect', entries);
32
- onResized(width, height);
33
- });
34
- resizeObserver.observe(current);
35
- return () => {
36
- resizeObserver.unobserve(current);
37
- };
38
- }, [element, onResized]);
39
- };
40
-
41
- var _default = useResizeObserver;
42
- exports.default = _default;