@yorab/react-paint 0.7.6 → 0.9.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.
- package/README.md +1 -11
- package/dist/components/App.d.ts +20 -0
- package/dist/components/Canvas.d.ts +38 -0
- package/dist/components/common/Button.d.ts +16 -0
- package/dist/components/common/Loading.d.ts +7 -0
- package/dist/components/common/Modal.d.ts +10 -0
- package/dist/components/common/Panel.d.ts +13 -0
- package/dist/components/common/Snackbar.d.ts +8 -0
- package/dist/components/settings/ColorField.d.ts +15 -0
- package/dist/components/settings/DeleteButton.d.ts +9 -0
- package/dist/components/settings/FontFamilyField.d.ts +12 -0
- package/dist/components/settings/LayoutButton.d.ts +8 -0
- package/dist/components/settings/Layouts.d.ts +19 -0
- package/dist/components/settings/LineArrowField.d.ts +12 -0
- package/dist/components/settings/LineTypeField.d.ts +16 -0
- package/dist/components/settings/PointsNumberField.d.ts +13 -0
- package/dist/components/settings/RangeField.d.ts +18 -0
- package/dist/components/settings/SelectField.d.ts +18 -0
- package/dist/components/settings/SettingsBar.d.ts +21 -0
- package/dist/components/settings/ToggleField.d.ts +12 -0
- package/dist/components/toolbox/EditTextBox.d.ts +14 -0
- package/dist/components/toolbox/LoadFileTool.d.ts +12 -0
- package/dist/components/toolbox/MenuGroup.d.ts +35 -0
- package/dist/components/toolbox/PictureUrlInput.d.ts +8 -0
- package/dist/components/toolbox/Tool.d.ts +12 -0
- package/dist/components/toolbox/Toolbar.d.ts +27 -0
- package/dist/components/toolbox/ToolbarGroup.d.ts +18 -0
- package/dist/constants/app.d.ts +41 -0
- package/dist/constants/icons.d.ts +41 -0
- package/dist/constants/loading.d.ts +1 -0
- package/dist/constants/picture.d.ts +1 -0
- package/dist/constants/shapes.d.ts +8 -0
- package/dist/constants/snackbar.d.ts +7 -0
- package/dist/constants/style.d.ts +17 -0
- package/dist/constants/tools.d.ts +32 -0
- package/dist/hooks/useComponent.d.ts +9 -0
- package/dist/hooks/useDoubleClick.d.ts +5 -0
- package/dist/hooks/useDrag.d.ts +15 -0
- package/dist/hooks/useDrawableCanvas.d.ts +37 -0
- package/dist/hooks/useKeyboard.d.ts +20 -0
- package/dist/hooks/useResizeObserver.d.ts +7 -0
- package/dist/hooks/useShapes.d.ts +26 -0
- package/dist/hooks/useSnackbar.d.ts +10 -0
- package/dist/react-paint.css +1 -0
- package/dist/react-paint.js +8887 -0
- package/dist/react-paint.umd.cjs +27 -0
- package/dist/types/Mode.d.ts +43 -0
- package/dist/types/Shapes.d.ts +128 -0
- package/dist/types/react.d.ts +7 -0
- package/dist/types/snackbar.d.ts +7 -0
- package/dist/types/tools.d.ts +125 -0
- package/dist/types/utils.d.ts +4 -0
- package/dist/utils/canvas.d.ts +10 -0
- package/dist/utils/data.d.ts +4 -0
- package/dist/utils/dom.d.ts +1 -0
- package/dist/utils/file.d.ts +10 -0
- package/dist/utils/grid.d.ts +3 -0
- package/dist/utils/intersect.d.ts +6 -0
- package/dist/utils/migration.d.ts +147 -0
- package/dist/utils/selection/lineSelection.d.ts +12 -0
- package/dist/utils/selection/rectSelection.d.ts +13 -0
- package/dist/utils/selection.d.ts +7 -0
- package/dist/utils/shapes/brush.d.ts +20 -0
- package/dist/utils/shapes/circle.d.ts +17 -0
- package/dist/utils/shapes/curve.d.ts +16 -0
- package/dist/utils/shapes/ellipse.d.ts +17 -0
- package/dist/utils/shapes/index.d.ts +29 -0
- package/dist/utils/shapes/line.d.ts +17 -0
- package/dist/utils/shapes/path.d.ts +9 -0
- package/dist/utils/shapes/picture.d.ts +12 -0
- package/dist/utils/shapes/polygon.d.ts +17 -0
- package/dist/utils/shapes/rectangle.d.ts +20 -0
- package/dist/utils/shapes/text.d.ts +19 -0
- package/dist/utils/shapes/triangle.d.ts +3 -0
- package/dist/utils/string.d.ts +3 -0
- package/dist/utils/style.d.ts +2 -0
- package/dist/utils/toolbar.d.ts +13 -0
- package/dist/utils/transform.d.ts +9 -0
- package/dist/utils/trigo.d.ts +16 -0
- package/package.json +52 -57
- package/dist/components/App.js +0 -496
- package/dist/components/Canvas.js +0 -194
- package/dist/components/common/Button.js +0 -88
- package/dist/components/common/Loading.js +0 -57
- package/dist/components/common/Modal.js +0 -46
- package/dist/components/common/Panel.js +0 -43
- package/dist/components/common/Snackbar.js +0 -68
- package/dist/components/settings/ColorField.js +0 -125
- package/dist/components/settings/DeleteButton.js +0 -37
- package/dist/components/settings/FontFamilyField.js +0 -67
- package/dist/components/settings/LayoutButton.js +0 -39
- package/dist/components/settings/Layouts.js +0 -214
- package/dist/components/settings/LineArrowField.js +0 -67
- package/dist/components/settings/LineTypeField.js +0 -65
- package/dist/components/settings/PointsNumberField.js +0 -45
- package/dist/components/settings/RangeField.js +0 -82
- package/dist/components/settings/SelectField.js +0 -81
- package/dist/components/settings/SettingsBar.js +0 -383
- package/dist/components/settings/ToggleField.js +0 -49
- package/dist/components/toolbox/EditTextBox.js +0 -138
- package/dist/components/toolbox/LoadFileTool.js +0 -58
- package/dist/components/toolbox/MenuGroup.js +0 -173
- package/dist/components/toolbox/PictureUrlInput.js +0 -68
- package/dist/components/toolbox/Tool.js +0 -41
- package/dist/components/toolbox/Toolbar.js +0 -203
- package/dist/components/toolbox/ToolbarGroup.js +0 -134
- package/dist/constants/app.js +0 -51
- package/dist/constants/icons.js +0 -88
- package/dist/constants/loading.js +0 -8
- package/dist/constants/picture.js +0 -8
- package/dist/constants/shapes.js +0 -20
- package/dist/constants/snackbar.js +0 -15
- package/dist/constants/style.js +0 -35
- package/dist/constants/tools.js +0 -424
- package/dist/hooks/useComponent.js +0 -47
- package/dist/hooks/useDoubleClick.js +0 -46
- package/dist/hooks/useDrag.js +0 -92
- package/dist/hooks/useDrawableCanvas.js +0 -230
- package/dist/hooks/useKeyboard.js +0 -142
- package/dist/hooks/useResizeObserver.js +0 -42
- package/dist/hooks/useShapes.js +0 -184
- package/dist/hooks/useSnackbar.js +0 -56
- package/dist/styles.css +0 -91
- package/dist/types/Mode.js +0 -5
- package/dist/types/Shapes.js +0 -5
- package/dist/types/snackbar.js +0 -5
- package/dist/types/tools.js +0 -5
- package/dist/types/utils.js +0 -5
- package/dist/utils/canvas.js +0 -49
- package/dist/utils/data.js +0 -49
- package/dist/utils/dom.js +0 -12
- package/dist/utils/file.js +0 -177
- package/dist/utils/intersect.js +0 -122
- package/dist/utils/migration.js +0 -59
- package/dist/utils/selection.js +0 -86
- package/dist/utils/shapes/brush.js +0 -135
- package/dist/utils/shapes/circle.js +0 -93
- package/dist/utils/shapes/curve.js +0 -55
- package/dist/utils/shapes/default.js +0 -73
- package/dist/utils/shapes/ellipse.js +0 -101
- package/dist/utils/shapes/grid.js +0 -36
- package/dist/utils/shapes/index.js +0 -341
- package/dist/utils/shapes/line.js +0 -179
- package/dist/utils/shapes/picture.js +0 -109
- package/dist/utils/shapes/polygon.js +0 -69
- package/dist/utils/shapes/rectangle.js +0 -100
- package/dist/utils/shapes/text.js +0 -128
- package/dist/utils/shapes/triangle.js +0 -24
- package/dist/utils/string.js +0 -36
- package/dist/utils/style.js +0 -46
- package/dist/utils/toolbar.js +0 -78
- package/dist/utils/transform.js +0 -109
- 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;
|
package/dist/hooks/useDrag.js
DELETED
|
@@ -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;
|