@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.
- package/Changelog.md +26 -0
- package/README.md +99 -0
- package/dist/components/App.d.ts +20 -0
- package/dist/components/App.js +533 -0
- package/dist/components/Canvas.d.ts +28 -0
- package/dist/components/Canvas.js +188 -0
- package/dist/components/common/Button.d.ts +14 -0
- package/dist/components/common/Button.js +97 -0
- package/dist/components/common/Loading.d.ts +6 -0
- package/dist/components/common/Loading.js +66 -0
- package/dist/components/common/Modal.d.ts +8 -0
- package/dist/components/common/Modal.js +41 -0
- package/dist/components/common/Panel.d.ts +10 -0
- package/dist/components/common/Panel.js +48 -0
- package/dist/components/common/Snackbar.d.ts +7 -0
- package/dist/components/common/Snackbar.js +75 -0
- package/dist/components/settings/ColorField.d.ts +12 -0
- package/dist/components/settings/ColorField.js +128 -0
- package/dist/components/settings/DeleteButton.d.ts +9 -0
- package/dist/components/settings/DeleteButton.js +36 -0
- package/dist/components/settings/FontFamilyField.d.ts +10 -0
- package/dist/components/settings/FontFamilyField.js +57 -0
- package/dist/components/settings/LayoutButton.d.ts +8 -0
- package/dist/components/settings/LayoutButton.js +37 -0
- package/dist/components/settings/Layouts.d.ts +18 -0
- package/dist/components/settings/Layouts.js +218 -0
- package/dist/components/settings/LineArrowField.d.ts +10 -0
- package/dist/components/settings/LineArrowField.js +59 -0
- package/dist/components/settings/LineTypeField.d.ts +14 -0
- package/dist/components/settings/LineTypeField.js +57 -0
- package/dist/components/settings/PointsNumberField.d.ts +11 -0
- package/dist/components/settings/PointsNumberField.js +51 -0
- package/dist/components/settings/RangeField.d.ts +16 -0
- package/dist/components/settings/RangeField.js +90 -0
- package/dist/components/settings/SelectField.d.ts +16 -0
- package/dist/components/settings/SelectField.js +82 -0
- package/dist/components/settings/SettingsBar.d.ts +16 -0
- package/dist/components/settings/SettingsBar.js +262 -0
- package/dist/components/toolbox/EditTextBox.d.ts +10 -0
- package/dist/components/toolbox/EditTextBox.js +89 -0
- package/dist/components/toolbox/LoadFileTool.d.ts +11 -0
- package/dist/components/toolbox/LoadFileTool.js +58 -0
- package/dist/components/toolbox/MenuGroup.d.ts +23 -0
- package/dist/components/toolbox/MenuGroup.js +173 -0
- package/dist/components/toolbox/PictureUrlInput.d.ts +7 -0
- package/dist/components/toolbox/PictureUrlInput.js +96 -0
- package/dist/components/toolbox/Tool.d.ts +13 -0
- package/dist/components/toolbox/Tool.js +41 -0
- package/dist/components/toolbox/Toolbar.d.ts +20 -0
- package/dist/components/toolbox/Toolbar.js +205 -0
- package/dist/components/toolbox/ToolbarGroup.d.ts +18 -0
- package/dist/components/toolbox/ToolbarGroup.js +139 -0
- package/dist/constants/draw.d.ts +2 -0
- package/dist/constants/draw.js +10 -0
- package/dist/constants/icons.d.ts +36 -0
- package/dist/constants/icons.js +80 -0
- package/dist/constants/shapes.d.ts +5 -0
- package/dist/constants/shapes.js +14 -0
- package/dist/constants/snackbar.d.ts +11 -0
- package/dist/constants/snackbar.js +23 -0
- package/dist/constants/style.d.ts +12 -0
- package/dist/constants/style.js +30 -0
- package/dist/hooks/useComponent.d.ts +9 -0
- package/dist/hooks/useComponent.js +48 -0
- package/dist/hooks/useDrag.d.ts +15 -0
- package/dist/hooks/useDrag.js +100 -0
- package/dist/hooks/useDrawableCanvas.d.ts +30 -0
- package/dist/hooks/useDrawableCanvas.js +250 -0
- package/dist/hooks/useKeyboard.d.ts +15 -0
- package/dist/hooks/useKeyboard.js +123 -0
- package/dist/hooks/useShapes.d.ts +22 -0
- package/dist/hooks/useShapes.js +229 -0
- package/dist/hooks/useSnackbar.d.ts +16 -0
- package/dist/hooks/useSnackbar.js +86 -0
- package/dist/schemas/drawableShape.json +1021 -0
- package/dist/styles.css +88 -0
- package/dist/types/Mode.d.ts +51 -0
- package/dist/types/Mode.js +17 -0
- package/dist/types/Shapes.d.ts +122 -0
- package/dist/types/Shapes.js +35 -0
- package/dist/types/keyboard.d.ts +15 -0
- package/dist/types/keyboard.js +28 -0
- package/dist/utils/data.d.ts +4 -0
- package/dist/utils/data.js +178 -0
- package/dist/utils/draw.d.ts +18 -0
- package/dist/utils/draw.js +422 -0
- package/dist/utils/file.d.ts +33 -0
- package/dist/utils/file.js +220 -0
- package/dist/utils/intersect.d.ts +8 -0
- package/dist/utils/intersect.js +194 -0
- package/dist/utils/selection.d.ts +7 -0
- package/dist/utils/selection.js +88 -0
- package/dist/utils/shapeData.d.ts +5 -0
- package/dist/utils/shapeData.js +178 -0
- package/dist/utils/string.d.ts +3 -0
- package/dist/utils/string.js +42 -0
- package/dist/utils/style.d.ts +2 -0
- package/dist/utils/style.js +46 -0
- package/dist/utils/toolbar.d.ts +12 -0
- package/dist/utils/toolbar.js +37 -0
- package/dist/utils/transform.d.ts +271 -0
- package/dist/utils/transform.js +371 -0
- package/package.json +79 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
declare type LoadFileToolType = {
|
|
3
|
+
disabled?: boolean;
|
|
4
|
+
loadFile: (file: File) => void;
|
|
5
|
+
lib: string;
|
|
6
|
+
img?: string;
|
|
7
|
+
accept: string;
|
|
8
|
+
withText?: boolean;
|
|
9
|
+
};
|
|
10
|
+
declare const LoadFileTool: ({ disabled, withText, loadFile, lib, img, accept }: LoadFileToolType) => JSX.Element;
|
|
11
|
+
export default LoadFileTool;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
+
|
|
7
|
+
Object.defineProperty(exports, "__esModule", {
|
|
8
|
+
value: true
|
|
9
|
+
});
|
|
10
|
+
exports["default"] = void 0;
|
|
11
|
+
|
|
12
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
13
|
+
|
|
14
|
+
var _Button = _interopRequireDefault(require("../common/Button"));
|
|
15
|
+
|
|
16
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
17
|
+
|
|
18
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
19
|
+
|
|
20
|
+
var LoadFileTool = function LoadFileTool(_ref) {
|
|
21
|
+
var _ref$disabled = _ref.disabled,
|
|
22
|
+
disabled = _ref$disabled === void 0 ? false : _ref$disabled,
|
|
23
|
+
_ref$withText = _ref.withText,
|
|
24
|
+
withText = _ref$withText === void 0 ? false : _ref$withText,
|
|
25
|
+
loadFile = _ref.loadFile,
|
|
26
|
+
lib = _ref.lib,
|
|
27
|
+
img = _ref.img,
|
|
28
|
+
accept = _ref.accept;
|
|
29
|
+
var inputRef = (0, _react.useRef)(null);
|
|
30
|
+
|
|
31
|
+
var handleClick = function handleClick(event) {
|
|
32
|
+
event.stopPropagation();
|
|
33
|
+
if (inputRef.current) inputRef.current.value = '';
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
var handleChange = function handleChange(event) {
|
|
37
|
+
var _event$target$files;
|
|
38
|
+
|
|
39
|
+
var file = (_event$target$files = event.target.files) === null || _event$target$files === void 0 ? void 0 : _event$target$files.item(0);
|
|
40
|
+
if (!file) return;
|
|
41
|
+
loadFile(file);
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
return /*#__PURE__*/_react["default"].createElement(_Button["default"], {
|
|
45
|
+
ref: inputRef,
|
|
46
|
+
type: "file",
|
|
47
|
+
onClick: handleClick,
|
|
48
|
+
onChange: handleChange,
|
|
49
|
+
accept: accept,
|
|
50
|
+
title: lib,
|
|
51
|
+
icon: img,
|
|
52
|
+
children: withText ? lib : undefined,
|
|
53
|
+
disabled: disabled
|
|
54
|
+
});
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
var _default = LoadFileTool;
|
|
58
|
+
exports["default"] = _default;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ShapeEnum, ToolsType } from 'types/Shapes';
|
|
3
|
+
declare type ToolbarGroupType = {
|
|
4
|
+
activeTool: React.SetStateAction<ToolsType>;
|
|
5
|
+
group: {
|
|
6
|
+
tools?: ShapeEnum[];
|
|
7
|
+
title: string;
|
|
8
|
+
img: string;
|
|
9
|
+
};
|
|
10
|
+
vertical?: boolean;
|
|
11
|
+
alignment?: 'left' | 'center' | 'right';
|
|
12
|
+
title?: string;
|
|
13
|
+
disabled?: boolean;
|
|
14
|
+
img?: string;
|
|
15
|
+
loadFile: (file: File) => void;
|
|
16
|
+
addPicture: (file: File) => Promise<void>;
|
|
17
|
+
saveFile: () => void;
|
|
18
|
+
exportCanvasInFile: () => void;
|
|
19
|
+
availableTools: ShapeEnum[];
|
|
20
|
+
togglePictureUrlModal: () => void;
|
|
21
|
+
};
|
|
22
|
+
declare const MenuGroup: ({ activeTool, alignment, group, vertical, disabled, addPicture: addPictureFromProps, loadFile: loadFileFromProps, togglePictureUrlModal, saveFile, exportCanvasInFile, availableTools }: ToolbarGroupType) => JSX.Element;
|
|
23
|
+
export default MenuGroup;
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
+
|
|
7
|
+
Object.defineProperty(exports, "__esModule", {
|
|
8
|
+
value: true
|
|
9
|
+
});
|
|
10
|
+
exports["default"] = void 0;
|
|
11
|
+
|
|
12
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
13
|
+
|
|
14
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
15
|
+
|
|
16
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
17
|
+
|
|
18
|
+
var _fp = _interopRequireDefault(require("lodash/fp"));
|
|
19
|
+
|
|
20
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
21
|
+
|
|
22
|
+
var _Button = _interopRequireDefault(require("../common/Button"));
|
|
23
|
+
|
|
24
|
+
var _Panel = _interopRequireDefault(require("../common/Panel"));
|
|
25
|
+
|
|
26
|
+
var _react2 = require("@linaria/react");
|
|
27
|
+
|
|
28
|
+
var _Shapes = require("../../types/Shapes");
|
|
29
|
+
|
|
30
|
+
var _style = require("../../utils/style");
|
|
31
|
+
|
|
32
|
+
var _Tool = _interopRequireDefault(require("./Tool"));
|
|
33
|
+
|
|
34
|
+
var _LoadFileTool = _interopRequireDefault(require("./LoadFileTool"));
|
|
35
|
+
|
|
36
|
+
var _icons = require("../../constants/icons");
|
|
37
|
+
|
|
38
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
39
|
+
|
|
40
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
41
|
+
|
|
42
|
+
var StyledPanel = /*#__PURE__*/(0, _react2.styled)(_Panel["default"])({
|
|
43
|
+
name: "StyledPanel",
|
|
44
|
+
"class": "s1uphjfh"
|
|
45
|
+
});
|
|
46
|
+
var StyledRelative = /*#__PURE__*/(0, _react2.styled)("div")({
|
|
47
|
+
name: "StyledRelative",
|
|
48
|
+
"class": "s1e5a6k5"
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
var MenuGroup = function MenuGroup(_ref) {
|
|
52
|
+
var _ref3;
|
|
53
|
+
|
|
54
|
+
var activeTool = _ref.activeTool,
|
|
55
|
+
alignment = _ref.alignment,
|
|
56
|
+
group = _ref.group,
|
|
57
|
+
_ref$vertical = _ref.vertical,
|
|
58
|
+
vertical = _ref$vertical === void 0 ? false : _ref$vertical,
|
|
59
|
+
_ref$disabled = _ref.disabled,
|
|
60
|
+
disabled = _ref$disabled === void 0 ? false : _ref$disabled,
|
|
61
|
+
addPictureFromProps = _ref.addPicture,
|
|
62
|
+
loadFileFromProps = _ref.loadFile,
|
|
63
|
+
togglePictureUrlModal = _ref.togglePictureUrlModal,
|
|
64
|
+
saveFile = _ref.saveFile,
|
|
65
|
+
exportCanvasInFile = _ref.exportCanvasInFile,
|
|
66
|
+
availableTools = _ref.availableTools;
|
|
67
|
+
|
|
68
|
+
var _useState = (0, _react.useState)(false),
|
|
69
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
70
|
+
isOpen = _useState2[0],
|
|
71
|
+
setIsOpen = _useState2[1];
|
|
72
|
+
|
|
73
|
+
var loadFile = function loadFile(file) {
|
|
74
|
+
setIsOpen(false);
|
|
75
|
+
loadFileFromProps(file);
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
var addPicture = /*#__PURE__*/function () {
|
|
79
|
+
var _ref2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(file) {
|
|
80
|
+
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
81
|
+
while (1) {
|
|
82
|
+
switch (_context.prev = _context.next) {
|
|
83
|
+
case 0:
|
|
84
|
+
setIsOpen(false);
|
|
85
|
+
_context.next = 3;
|
|
86
|
+
return addPictureFromProps(file);
|
|
87
|
+
|
|
88
|
+
case 3:
|
|
89
|
+
case "end":
|
|
90
|
+
return _context.stop();
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}, _callee);
|
|
94
|
+
}));
|
|
95
|
+
|
|
96
|
+
return function addPicture(_x) {
|
|
97
|
+
return _ref2.apply(this, arguments);
|
|
98
|
+
};
|
|
99
|
+
}();
|
|
100
|
+
|
|
101
|
+
var openPanel = function openPanel() {
|
|
102
|
+
setIsOpen(true);
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
var isActive = _fp["default"].includes(activeTool, group === null || group === void 0 ? void 0 : group.tools);
|
|
106
|
+
|
|
107
|
+
var groupIcon = (_ref3 = isActive ? (0, _style.getShapePicture)(activeTool) : group.img) !== null && _ref3 !== void 0 ? _ref3 : group.title;
|
|
108
|
+
(0, _react.useEffect)(function () {
|
|
109
|
+
if (!isOpen) return;
|
|
110
|
+
|
|
111
|
+
var closePanel = function closePanel() {
|
|
112
|
+
setIsOpen(false);
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
var timeoutId = setTimeout(function () {
|
|
116
|
+
//TODO find a better fix than settimeout for react18
|
|
117
|
+
document.addEventListener('click', closePanel);
|
|
118
|
+
}, 0);
|
|
119
|
+
return function () {
|
|
120
|
+
document.removeEventListener('click', closePanel);
|
|
121
|
+
};
|
|
122
|
+
}, [isOpen]);
|
|
123
|
+
return /*#__PURE__*/_react["default"].createElement(StyledRelative, null, /*#__PURE__*/_react["default"].createElement(_Button["default"], {
|
|
124
|
+
selected: isActive,
|
|
125
|
+
title: group.title,
|
|
126
|
+
disabled: disabled,
|
|
127
|
+
onClick: openPanel,
|
|
128
|
+
icon: groupIcon
|
|
129
|
+
}), isOpen && /*#__PURE__*/_react["default"].createElement(StyledPanel, {
|
|
130
|
+
vertical: vertical,
|
|
131
|
+
alignment: alignment
|
|
132
|
+
}, _fp["default"].includes(_Shapes.ShapeEnum.picture, availableTools) && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_LoadFileTool["default"], {
|
|
133
|
+
withText: true,
|
|
134
|
+
disabled: disabled,
|
|
135
|
+
loadFile: addPicture,
|
|
136
|
+
lib: "Upload picture",
|
|
137
|
+
img: _icons.pictureIcon,
|
|
138
|
+
accept: "image/png, image/gif, image/jpeg"
|
|
139
|
+
}), /*#__PURE__*/_react["default"].createElement(_Button["default"], {
|
|
140
|
+
disabled: disabled,
|
|
141
|
+
selected: false,
|
|
142
|
+
onClick: togglePictureUrlModal,
|
|
143
|
+
title: "Add picture from URL",
|
|
144
|
+
icon: _icons.publicIcon,
|
|
145
|
+
children: "Add picture from URL"
|
|
146
|
+
}), /*#__PURE__*/_react["default"].createElement("hr", null)), /*#__PURE__*/_react["default"].createElement(_LoadFileTool["default"], {
|
|
147
|
+
withText: true,
|
|
148
|
+
disabled: disabled,
|
|
149
|
+
loadFile: loadFile,
|
|
150
|
+
lib: "Load project",
|
|
151
|
+
img: _icons.openFileIcon,
|
|
152
|
+
accept: "application/JSON"
|
|
153
|
+
}), /*#__PURE__*/_react["default"].createElement(_Tool["default"], {
|
|
154
|
+
withText: true,
|
|
155
|
+
disabled: disabled,
|
|
156
|
+
type: _Shapes.ToolEnum.saveFile,
|
|
157
|
+
lib: "Save project",
|
|
158
|
+
img: _icons.saveIcon,
|
|
159
|
+
isActive: activeTool === _Shapes.ToolEnum.saveFile,
|
|
160
|
+
setActive: saveFile
|
|
161
|
+
}), /*#__PURE__*/_react["default"].createElement(_Tool["default"], {
|
|
162
|
+
withText: true,
|
|
163
|
+
disabled: disabled,
|
|
164
|
+
type: _Shapes.ToolEnum["export"],
|
|
165
|
+
lib: "Export PNG",
|
|
166
|
+
img: _icons.exportFileIcon,
|
|
167
|
+
isActive: activeTool === _Shapes.ToolEnum["export"],
|
|
168
|
+
setActive: exportCanvasInFile
|
|
169
|
+
})));
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
var _default = MenuGroup;
|
|
173
|
+
exports["default"] = _default;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
declare type PictureUrlModalType = {
|
|
3
|
+
togglePictureUrlModal: () => void;
|
|
4
|
+
addPicture: (url: string) => Promise<void>;
|
|
5
|
+
};
|
|
6
|
+
declare const PictureUrlModal: ({ togglePictureUrlModal, addPicture }: PictureUrlModalType) => JSX.Element;
|
|
7
|
+
export default PictureUrlModal;
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
+
|
|
7
|
+
Object.defineProperty(exports, "__esModule", {
|
|
8
|
+
value: true
|
|
9
|
+
});
|
|
10
|
+
exports["default"] = void 0;
|
|
11
|
+
|
|
12
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
13
|
+
|
|
14
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
15
|
+
|
|
16
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
17
|
+
|
|
18
|
+
var _Button = _interopRequireDefault(require("../common/Button"));
|
|
19
|
+
|
|
20
|
+
var _Modal = _interopRequireDefault(require("../common/Modal"));
|
|
21
|
+
|
|
22
|
+
var _react2 = require("@linaria/react");
|
|
23
|
+
|
|
24
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
25
|
+
|
|
26
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
27
|
+
|
|
28
|
+
var StyledInputModal = /*#__PURE__*/(0, _react2.styled)(_Modal["default"])({
|
|
29
|
+
name: "StyledInputModal",
|
|
30
|
+
"class": "s95bkm9"
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
var PictureUrlModal = function PictureUrlModal(_ref) {
|
|
34
|
+
var togglePictureUrlModal = _ref.togglePictureUrlModal,
|
|
35
|
+
addPicture = _ref.addPicture;
|
|
36
|
+
var pictureUrlInputRef = (0, _react.useRef)(null);
|
|
37
|
+
|
|
38
|
+
var addPictureFromUrl = /*#__PURE__*/function () {
|
|
39
|
+
var _ref2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
40
|
+
var _pictureUrlInputRef$c;
|
|
41
|
+
|
|
42
|
+
var url;
|
|
43
|
+
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
44
|
+
while (1) {
|
|
45
|
+
switch (_context.prev = _context.next) {
|
|
46
|
+
case 0:
|
|
47
|
+
url = (_pictureUrlInputRef$c = pictureUrlInputRef.current) === null || _pictureUrlInputRef$c === void 0 ? void 0 : _pictureUrlInputRef$c.value;
|
|
48
|
+
|
|
49
|
+
if (!url) {
|
|
50
|
+
_context.next = 5;
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
_context.next = 4;
|
|
55
|
+
return addPicture(url);
|
|
56
|
+
|
|
57
|
+
case 4:
|
|
58
|
+
togglePictureUrlModal();
|
|
59
|
+
|
|
60
|
+
case 5:
|
|
61
|
+
return _context.abrupt("return");
|
|
62
|
+
|
|
63
|
+
case 6:
|
|
64
|
+
case "end":
|
|
65
|
+
return _context.stop();
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}, _callee);
|
|
69
|
+
}));
|
|
70
|
+
|
|
71
|
+
return function addPictureFromUrl() {
|
|
72
|
+
return _ref2.apply(this, arguments);
|
|
73
|
+
};
|
|
74
|
+
}();
|
|
75
|
+
|
|
76
|
+
(0, _react.useEffect)(function () {
|
|
77
|
+
if (!pictureUrlInputRef.current) return;
|
|
78
|
+
pictureUrlInputRef.current.focus();
|
|
79
|
+
}, []);
|
|
80
|
+
return /*#__PURE__*/_react["default"].createElement(StyledInputModal, {
|
|
81
|
+
onClose: togglePictureUrlModal
|
|
82
|
+
}, /*#__PURE__*/_react["default"].createElement("form", {
|
|
83
|
+
onSubmit: addPictureFromUrl
|
|
84
|
+
}, /*#__PURE__*/_react["default"].createElement("label", null, "URL\xA0", /*#__PURE__*/_react["default"].createElement("input", {
|
|
85
|
+
type: "text",
|
|
86
|
+
ref: pictureUrlInputRef
|
|
87
|
+
})), /*#__PURE__*/_react["default"].createElement(_Button["default"], {
|
|
88
|
+
onClick: togglePictureUrlModal
|
|
89
|
+
}, "Annuler"), /*#__PURE__*/_react["default"].createElement(_Button["default"], {
|
|
90
|
+
type: "submit",
|
|
91
|
+
selected: true
|
|
92
|
+
}, "Ajouter")));
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
var _default = PictureUrlModal;
|
|
96
|
+
exports["default"] = _default;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { ToolsType } from 'types/Shapes';
|
|
3
|
+
declare type ToolType = {
|
|
4
|
+
type: ToolsType;
|
|
5
|
+
lib: string;
|
|
6
|
+
img?: string;
|
|
7
|
+
withText?: boolean;
|
|
8
|
+
isActive: boolean;
|
|
9
|
+
disabled?: boolean;
|
|
10
|
+
setActive: (marker: ToolsType) => void;
|
|
11
|
+
};
|
|
12
|
+
declare const Tool: ({ type, lib, img, isActive, withText, disabled, setActive }: ToolType) => JSX.Element;
|
|
13
|
+
export default Tool;
|
|
@@ -0,0 +1,41 @@
|
|
|
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 = _interopRequireDefault(require("react"));
|
|
11
|
+
|
|
12
|
+
var _Button = _interopRequireDefault(require("../common/Button"));
|
|
13
|
+
|
|
14
|
+
var Tool = function Tool(_ref) {
|
|
15
|
+
var type = _ref.type,
|
|
16
|
+
_ref$lib = _ref.lib,
|
|
17
|
+
lib = _ref$lib === void 0 ? '' : _ref$lib,
|
|
18
|
+
img = _ref.img,
|
|
19
|
+
isActive = _ref.isActive,
|
|
20
|
+
_ref$withText = _ref.withText,
|
|
21
|
+
withText = _ref$withText === void 0 ? false : _ref$withText,
|
|
22
|
+
_ref$disabled = _ref.disabled,
|
|
23
|
+
disabled = _ref$disabled === void 0 ? false : _ref$disabled,
|
|
24
|
+
setActive = _ref.setActive;
|
|
25
|
+
|
|
26
|
+
var handleClick = function handleClick() {
|
|
27
|
+
setActive(type);
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
return /*#__PURE__*/_react["default"].createElement(_Button["default"], {
|
|
31
|
+
disabled: disabled,
|
|
32
|
+
selected: isActive,
|
|
33
|
+
onClick: handleClick,
|
|
34
|
+
title: lib,
|
|
35
|
+
icon: img,
|
|
36
|
+
children: withText ? lib : undefined
|
|
37
|
+
});
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
var _default = Tool;
|
|
41
|
+
exports["default"] = _default;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ShapeEnum, ToolsType } from 'types/Shapes';
|
|
3
|
+
declare type ToolboxType = {
|
|
4
|
+
disabled?: boolean;
|
|
5
|
+
activeTool: React.SetStateAction<ToolsType>;
|
|
6
|
+
hasActionToUndo?: boolean;
|
|
7
|
+
hasActionToRedo?: boolean;
|
|
8
|
+
hasActionToClear?: boolean;
|
|
9
|
+
undoAction: () => void;
|
|
10
|
+
redoAction: () => void;
|
|
11
|
+
clearCanvas: () => void;
|
|
12
|
+
setActiveTool: (tool: ToolsType) => void;
|
|
13
|
+
loadFile: (file: File) => void;
|
|
14
|
+
addPicture: (file: File | string) => Promise<void>;
|
|
15
|
+
saveFile: () => void;
|
|
16
|
+
exportCanvasInFile: () => void;
|
|
17
|
+
availableTools: ShapeEnum[];
|
|
18
|
+
};
|
|
19
|
+
declare const Toolbar: ({ disabled, activeTool, hasActionToUndo, hasActionToRedo, hasActionToClear, clearCanvas, setActiveTool: setActiveToolFromProps, undoAction, redoAction, addPicture, loadFile, saveFile, exportCanvasInFile, availableTools }: ToolboxType) => JSX.Element;
|
|
20
|
+
export default Toolbar;
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
+
|
|
7
|
+
Object.defineProperty(exports, "__esModule", {
|
|
8
|
+
value: true
|
|
9
|
+
});
|
|
10
|
+
exports["default"] = void 0;
|
|
11
|
+
|
|
12
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
13
|
+
|
|
14
|
+
var _icons = require("../../constants/icons");
|
|
15
|
+
|
|
16
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
17
|
+
|
|
18
|
+
var _react2 = require("@linaria/react");
|
|
19
|
+
|
|
20
|
+
var _Shapes = require("../../types/Shapes");
|
|
21
|
+
|
|
22
|
+
var _Button = _interopRequireDefault(require("../common/Button"));
|
|
23
|
+
|
|
24
|
+
var _toolbar = require("../../utils/toolbar");
|
|
25
|
+
|
|
26
|
+
var _ToolbarGroup = _interopRequireDefault(require("./ToolbarGroup"));
|
|
27
|
+
|
|
28
|
+
var _MenuGroup = _interopRequireDefault(require("./MenuGroup"));
|
|
29
|
+
|
|
30
|
+
var _Tool = _interopRequireDefault(require("./Tool"));
|
|
31
|
+
|
|
32
|
+
var _style = require("../../utils/style");
|
|
33
|
+
|
|
34
|
+
var _Modal = _interopRequireDefault(require("../common/Modal"));
|
|
35
|
+
|
|
36
|
+
var _PictureUrlInput = _interopRequireDefault(require("./PictureUrlInput"));
|
|
37
|
+
|
|
38
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
39
|
+
|
|
40
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
41
|
+
|
|
42
|
+
var StyledShrinkableTools = /*#__PURE__*/(0, _react2.styled)("div")({
|
|
43
|
+
name: "StyledShrinkableTools",
|
|
44
|
+
"class": "so6hnjf"
|
|
45
|
+
});
|
|
46
|
+
var StyledToolbox = /*#__PURE__*/(0, _react2.styled)("div")({
|
|
47
|
+
name: "StyledToolbox",
|
|
48
|
+
"class": "s1c1dllr"
|
|
49
|
+
});
|
|
50
|
+
var StyledShrinkableToolsInner = /*#__PURE__*/(0, _react2.styled)("div")({
|
|
51
|
+
name: "StyledShrinkableToolsInner",
|
|
52
|
+
"class": "s1g032mh"
|
|
53
|
+
});
|
|
54
|
+
var StyledToolsModal = /*#__PURE__*/(0, _react2.styled)(_Modal["default"])({
|
|
55
|
+
name: "StyledToolsModal",
|
|
56
|
+
"class": "s4owjrv"
|
|
57
|
+
});
|
|
58
|
+
var TOOLBAR_STRUCTURE = [{
|
|
59
|
+
title: 'brush',
|
|
60
|
+
img: _icons.gestureIcon,
|
|
61
|
+
tools: [_Shapes.ShapeEnum.brush],
|
|
62
|
+
vertical: false
|
|
63
|
+
}, {
|
|
64
|
+
title: 'lines',
|
|
65
|
+
img: _icons.arrowIcon,
|
|
66
|
+
tools: [_Shapes.ShapeEnum.line, _Shapes.ShapeEnum.curve, _Shapes.ShapeEnum.polygon],
|
|
67
|
+
vertical: false
|
|
68
|
+
}, {
|
|
69
|
+
title: 'shapes',
|
|
70
|
+
img: _icons.shapesIcon,
|
|
71
|
+
tools: [_Shapes.ShapeEnum.rect, _Shapes.ShapeEnum.square, _Shapes.ShapeEnum.circle, _Shapes.ShapeEnum.ellipse],
|
|
72
|
+
vertical: false
|
|
73
|
+
}, _Shapes.ShapeEnum.text];
|
|
74
|
+
|
|
75
|
+
var Toolbar = function Toolbar(_ref) {
|
|
76
|
+
var _ref$disabled = _ref.disabled,
|
|
77
|
+
disabled = _ref$disabled === void 0 ? false : _ref$disabled,
|
|
78
|
+
activeTool = _ref.activeTool,
|
|
79
|
+
_ref$hasActionToUndo = _ref.hasActionToUndo,
|
|
80
|
+
hasActionToUndo = _ref$hasActionToUndo === void 0 ? false : _ref$hasActionToUndo,
|
|
81
|
+
_ref$hasActionToRedo = _ref.hasActionToRedo,
|
|
82
|
+
hasActionToRedo = _ref$hasActionToRedo === void 0 ? false : _ref$hasActionToRedo,
|
|
83
|
+
_ref$hasActionToClear = _ref.hasActionToClear,
|
|
84
|
+
hasActionToClear = _ref$hasActionToClear === void 0 ? false : _ref$hasActionToClear,
|
|
85
|
+
clearCanvas = _ref.clearCanvas,
|
|
86
|
+
setActiveToolFromProps = _ref.setActiveTool,
|
|
87
|
+
undoAction = _ref.undoAction,
|
|
88
|
+
redoAction = _ref.redoAction,
|
|
89
|
+
addPicture = _ref.addPicture,
|
|
90
|
+
loadFile = _ref.loadFile,
|
|
91
|
+
saveFile = _ref.saveFile,
|
|
92
|
+
exportCanvasInFile = _ref.exportCanvasInFile,
|
|
93
|
+
availableTools = _ref.availableTools;
|
|
94
|
+
|
|
95
|
+
var _useState = (0, _react.useState)(false),
|
|
96
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
97
|
+
isMenuOpen = _useState2[0],
|
|
98
|
+
setIsMenuOpen = _useState2[1];
|
|
99
|
+
|
|
100
|
+
var _useState3 = (0, _react.useState)(false),
|
|
101
|
+
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
|
|
102
|
+
isPictureUrlModalOpen = _useState4[0],
|
|
103
|
+
setIsPictureUrlModalOpen = _useState4[1];
|
|
104
|
+
|
|
105
|
+
var toggleTools = function toggleTools() {
|
|
106
|
+
setIsMenuOpen(function (prev) {
|
|
107
|
+
return !prev;
|
|
108
|
+
});
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
var openPictureUrlModal = function openPictureUrlModal() {
|
|
112
|
+
setIsPictureUrlModalOpen(true);
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
var togglePictureUrlModal = function togglePictureUrlModal() {
|
|
116
|
+
setIsPictureUrlModalOpen(function (prev) {
|
|
117
|
+
return !prev;
|
|
118
|
+
});
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
var setActiveTool = function setActiveTool(tool) {
|
|
122
|
+
setActiveToolFromProps(tool);
|
|
123
|
+
setIsMenuOpen(false);
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
var currentStructure = (0, _toolbar.getCurrentStructure)(availableTools, TOOLBAR_STRUCTURE);
|
|
127
|
+
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(StyledToolbox, null, /*#__PURE__*/_react["default"].createElement(_Tool["default"], {
|
|
128
|
+
type: _Shapes.ToolEnum.selection,
|
|
129
|
+
disabled: disabled,
|
|
130
|
+
lib: "selection",
|
|
131
|
+
img: _icons.selectIcon,
|
|
132
|
+
isActive: activeTool === _Shapes.ToolEnum.selection,
|
|
133
|
+
setActive: setActiveTool
|
|
134
|
+
}), /*#__PURE__*/_react["default"].createElement(_Tool["default"], {
|
|
135
|
+
type: _Shapes.ToolEnum.undo,
|
|
136
|
+
disabled: disabled || !hasActionToUndo,
|
|
137
|
+
lib: "Undo",
|
|
138
|
+
img: _icons.undoIcon,
|
|
139
|
+
isActive: activeTool === _Shapes.ToolEnum.undo,
|
|
140
|
+
setActive: undoAction
|
|
141
|
+
}), /*#__PURE__*/_react["default"].createElement(_Tool["default"], {
|
|
142
|
+
type: _Shapes.ToolEnum.redo,
|
|
143
|
+
disabled: disabled || !hasActionToRedo,
|
|
144
|
+
lib: "Redo",
|
|
145
|
+
img: _icons.redoIcon,
|
|
146
|
+
isActive: activeTool === _Shapes.ToolEnum.redo,
|
|
147
|
+
setActive: redoAction
|
|
148
|
+
}), /*#__PURE__*/_react["default"].createElement(_Tool["default"], {
|
|
149
|
+
type: _Shapes.ToolEnum.clear,
|
|
150
|
+
disabled: disabled || !hasActionToClear,
|
|
151
|
+
lib: "Clear",
|
|
152
|
+
img: _icons.clearIcon,
|
|
153
|
+
isActive: activeTool === _Shapes.ToolEnum.clear,
|
|
154
|
+
setActive: function setActive() {
|
|
155
|
+
return clearCanvas();
|
|
156
|
+
}
|
|
157
|
+
}), /*#__PURE__*/_react["default"].createElement(StyledShrinkableTools, null, /*#__PURE__*/_react["default"].createElement(StyledShrinkableToolsInner, null, currentStructure.map(function (group, i) {
|
|
158
|
+
return /*#__PURE__*/_react["default"].createElement(_ToolbarGroup["default"], {
|
|
159
|
+
disabled: disabled,
|
|
160
|
+
key: i,
|
|
161
|
+
activeTool: activeTool,
|
|
162
|
+
group: group,
|
|
163
|
+
setActiveTool: setActiveTool
|
|
164
|
+
});
|
|
165
|
+
})), /*#__PURE__*/_react["default"].createElement(_Button["default"], {
|
|
166
|
+
disabled: disabled,
|
|
167
|
+
onClick: toggleTools,
|
|
168
|
+
title: "Toggle tools",
|
|
169
|
+
icon: _icons.dotsIcon
|
|
170
|
+
})), /*#__PURE__*/_react["default"].createElement(_MenuGroup["default"], {
|
|
171
|
+
disabled: disabled,
|
|
172
|
+
vertical: true,
|
|
173
|
+
alignment: "right",
|
|
174
|
+
group: {
|
|
175
|
+
title: 'Menu',
|
|
176
|
+
img: _icons.menuIcon
|
|
177
|
+
},
|
|
178
|
+
activeTool: activeTool,
|
|
179
|
+
addPicture: addPicture,
|
|
180
|
+
loadFile: loadFile,
|
|
181
|
+
saveFile: saveFile,
|
|
182
|
+
togglePictureUrlModal: openPictureUrlModal,
|
|
183
|
+
exportCanvasInFile: exportCanvasInFile,
|
|
184
|
+
availableTools: availableTools
|
|
185
|
+
})), isMenuOpen && /*#__PURE__*/_react["default"].createElement(StyledToolsModal, {
|
|
186
|
+
onClose: toggleTools
|
|
187
|
+
}, availableTools.map(function (toolType) {
|
|
188
|
+
return toolType === _Shapes.ShapeEnum.picture ? null : /*#__PURE__*/_react["default"].createElement(_Tool["default"], {
|
|
189
|
+
disabled: disabled,
|
|
190
|
+
key: toolType,
|
|
191
|
+
type: toolType,
|
|
192
|
+
lib: toolType,
|
|
193
|
+
withText: false,
|
|
194
|
+
img: (0, _style.getShapePicture)(toolType),
|
|
195
|
+
isActive: activeTool === toolType,
|
|
196
|
+
setActive: setActiveTool
|
|
197
|
+
});
|
|
198
|
+
})), isPictureUrlModalOpen && /*#__PURE__*/_react["default"].createElement(_PictureUrlInput["default"], {
|
|
199
|
+
togglePictureUrlModal: togglePictureUrlModal,
|
|
200
|
+
addPicture: addPicture
|
|
201
|
+
}));
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
var _default = Toolbar;
|
|
205
|
+
exports["default"] = _default;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ShapeEnum, ToolsType } from 'types/Shapes';
|
|
3
|
+
declare type ToolbarGroupType = {
|
|
4
|
+
activeTool: React.SetStateAction<ToolsType>;
|
|
5
|
+
group: ShapeEnum | {
|
|
6
|
+
vertical: boolean;
|
|
7
|
+
tools?: ShapeEnum[];
|
|
8
|
+
title: string;
|
|
9
|
+
img: string;
|
|
10
|
+
};
|
|
11
|
+
alignment?: 'left' | 'center' | 'right';
|
|
12
|
+
title?: string;
|
|
13
|
+
disabled?: boolean;
|
|
14
|
+
img?: string;
|
|
15
|
+
setActiveTool: (tool: ToolsType) => void;
|
|
16
|
+
};
|
|
17
|
+
declare const ToolbarGroup: ({ activeTool, alignment, group, disabled, setActiveTool: setActiveToolFromProps }: ToolbarGroupType) => JSX.Element | null;
|
|
18
|
+
export default ToolbarGroup;
|