@yorab/react-paint 0.6.4 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/dist/components/App.js +236 -423
- package/dist/components/Canvas.js +120 -139
- package/dist/components/common/Button.js +41 -50
- package/dist/components/common/Loading.js +24 -33
- package/dist/components/common/Modal.js +18 -17
- package/dist/components/common/Panel.js +20 -28
- package/dist/components/common/Snackbar.js +31 -38
- package/dist/components/settings/ColorField.js +59 -68
- package/dist/components/settings/DeleteButton.js +10 -9
- package/dist/components/settings/FontFamilyField.js +25 -20
- package/dist/components/settings/LayoutButton.js +11 -9
- package/dist/components/settings/Layouts.js +111 -111
- package/dist/components/settings/LineArrowField.js +25 -22
- package/dist/components/settings/LineTypeField.js +23 -20
- package/dist/components/settings/PointsNumberField.js +14 -13
- package/dist/components/settings/RangeField.js +35 -47
- package/dist/components/settings/SelectField.js +34 -43
- package/dist/components/settings/SettingsBar.js +100 -121
- package/dist/components/settings/ToggleField.js +18 -25
- package/dist/components/toolbox/EditTextBox.js +62 -49
- package/dist/components/toolbox/LoadFileTool.js +19 -21
- package/dist/components/toolbox/MenuGroup.js +66 -100
- package/dist/components/toolbox/PictureUrlInput.js +33 -62
- package/dist/components/toolbox/Tool.js +13 -13
- package/dist/components/toolbox/Toolbar.js +79 -113
- package/dist/components/toolbox/ToolbarGroup.js +60 -63
- package/dist/constants/app.js +51 -0
- package/dist/constants/icons.js +42 -48
- package/dist/constants/loading.js +8 -0
- package/dist/constants/shapes.js +10 -8
- package/dist/constants/snackbar.js +7 -15
- package/dist/constants/style.js +21 -18
- package/dist/constants/tools.js +99 -103
- package/dist/hooks/useComponent.js +15 -20
- package/dist/hooks/useDoubleClick.js +12 -12
- package/dist/hooks/useDrag.js +24 -32
- package/dist/hooks/useDrawableCanvas.js +106 -122
- package/dist/hooks/useKeyboard.js +80 -63
- package/dist/hooks/useResizeObserver.js +18 -16
- package/dist/hooks/useShapes.js +92 -144
- package/dist/hooks/useSnackbar.js +28 -58
- package/dist/styles.css +16 -13
- package/dist/types/Mode.js +1 -13
- package/dist/types/Shapes.js +1 -17
- package/dist/types/snackbar.js +5 -0
- package/dist/types/tools.js +1 -18
- package/dist/utils/canvas.js +49 -0
- package/dist/utils/data.js +15 -274
- package/dist/utils/dom.js +12 -0
- package/dist/utils/file.js +75 -120
- package/dist/utils/intersect.js +54 -131
- package/dist/utils/migration.js +59 -0
- package/dist/utils/selection.js +18 -20
- package/dist/utils/shapes/brush.js +135 -0
- package/dist/utils/shapes/circle.js +93 -0
- package/dist/utils/shapes/curve.js +55 -0
- package/dist/utils/shapes/default.js +73 -0
- package/dist/utils/shapes/ellipse.js +101 -0
- package/dist/utils/shapes/grid.js +36 -0
- package/dist/utils/shapes/index.js +341 -0
- package/dist/utils/shapes/line.js +179 -0
- package/dist/utils/shapes/picture.js +88 -0
- package/dist/utils/shapes/polygon.js +69 -0
- package/dist/utils/shapes/rectangle.js +100 -0
- package/dist/utils/shapes/text.js +128 -0
- package/dist/utils/shapes/triangle.js +24 -0
- package/dist/utils/string.js +10 -16
- package/dist/utils/style.js +11 -13
- package/dist/utils/toolbar.js +35 -49
- package/dist/utils/transform.js +47 -339
- package/dist/utils/trigo.js +42 -0
- package/package.json +6 -6
- package/Changelog.md +0 -119
- package/dist/types/keyboard.js +0 -28
- package/dist/utils/draw.js +0 -461
- package/dist/utils/shapeData.js +0 -173
package/dist/components/App.js
CHANGED
|
@@ -2,20 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
4
|
|
|
5
|
-
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
-
|
|
7
5
|
Object.defineProperty(exports, "__esModule", {
|
|
8
6
|
value: true
|
|
9
7
|
});
|
|
10
|
-
exports
|
|
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 _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
8
|
+
exports.default = void 0;
|
|
19
9
|
|
|
20
10
|
var _react = _interopRequireWildcard(require("react"));
|
|
21
11
|
|
|
@@ -35,17 +25,13 @@ var _useKeyboard = _interopRequireDefault(require("../hooks/useKeyboard"));
|
|
|
35
25
|
|
|
36
26
|
var _file = require("../utils/file");
|
|
37
27
|
|
|
38
|
-
var
|
|
28
|
+
var _useComponent = _interopRequireDefault(require("../hooks/useComponent"));
|
|
39
29
|
|
|
40
|
-
var
|
|
41
|
-
|
|
42
|
-
var _useShapes2 = _interopRequireDefault(require("../hooks/useShapes"));
|
|
30
|
+
var _useShapes = _interopRequireDefault(require("../hooks/useShapes"));
|
|
43
31
|
|
|
44
32
|
var _Snackbar = _interopRequireDefault(require("./common/Snackbar"));
|
|
45
33
|
|
|
46
|
-
var
|
|
47
|
-
|
|
48
|
-
var _snackbar = require("../constants/snackbar");
|
|
34
|
+
var _useSnackbar = _interopRequireDefault(require("../hooks/useSnackbar"));
|
|
49
35
|
|
|
50
36
|
var _Loading = _interopRequireDefault(require("./common/Loading"));
|
|
51
37
|
|
|
@@ -53,310 +39,197 @@ var _data = require("../utils/data");
|
|
|
53
39
|
|
|
54
40
|
var _useResizeObserver = _interopRequireDefault(require("../hooks/useResizeObserver"));
|
|
55
41
|
|
|
56
|
-
var _shapes = require("../constants/shapes");
|
|
57
|
-
|
|
58
42
|
var _toolbar = require("../utils/toolbar");
|
|
59
43
|
|
|
60
44
|
var _tools = require("../constants/tools");
|
|
61
45
|
|
|
62
46
|
var _fp = _interopRequireDefault(require("lodash/fp"));
|
|
63
47
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
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; }
|
|
48
|
+
var _app = require("../constants/app");
|
|
67
49
|
|
|
68
|
-
function
|
|
50
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
69
51
|
|
|
70
|
-
function
|
|
52
|
+
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; }
|
|
71
53
|
|
|
72
|
-
|
|
54
|
+
const StyledApp = /*#__PURE__*/(0, _react2.styled)('div')({
|
|
73
55
|
name: "StyledApp",
|
|
74
|
-
|
|
56
|
+
class: "s1v9piyg",
|
|
75
57
|
vars: {
|
|
76
|
-
"s1v9piyg-0": [
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
"s1v9piyg-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
"s1v9piyg-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
"s1v9piyg-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
"s1v9piyg-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
return props.fontColor;
|
|
93
|
-
}],
|
|
94
|
-
"s1v9piyg-6": [function (props) {
|
|
95
|
-
return props.fontBackgroundColor;
|
|
96
|
-
}],
|
|
97
|
-
"s1v9piyg-7": [function (props) {
|
|
98
|
-
return props.fontSelectedColor;
|
|
99
|
-
}],
|
|
100
|
-
"s1v9piyg-8": [function (props) {
|
|
101
|
-
return props.fontSelectedBackgroundColor;
|
|
102
|
-
}],
|
|
103
|
-
"s1v9piyg-9": [function (props) {
|
|
104
|
-
return props.fontHoverColor;
|
|
105
|
-
}],
|
|
106
|
-
"s1v9piyg-10": [function (props) {
|
|
107
|
-
return props.fontHoverBackgroundColor;
|
|
108
|
-
}],
|
|
109
|
-
"s1v9piyg-11": [function (props) {
|
|
110
|
-
return props.canvasBackgroundColor;
|
|
111
|
-
}],
|
|
112
|
-
"s1v9piyg-12": [function (_ref) {
|
|
113
|
-
var canvasWidth = _ref.canvasWidth;
|
|
58
|
+
"s1v9piyg-0": [props => props.toolbarBackgroundColor],
|
|
59
|
+
"s1v9piyg-1": [props => props.dividerColor],
|
|
60
|
+
"s1v9piyg-2": [props => props.fontRadius, "px"],
|
|
61
|
+
"s1v9piyg-3": [props => props.fontDisabledColor],
|
|
62
|
+
"s1v9piyg-4": [props => props.fontDisabledBackgroundColor],
|
|
63
|
+
"s1v9piyg-5": [props => props.fontColor],
|
|
64
|
+
"s1v9piyg-6": [props => props.fontBackgroundColor],
|
|
65
|
+
"s1v9piyg-7": [props => props.fontSelectedColor],
|
|
66
|
+
"s1v9piyg-8": [props => props.fontSelectedBackgroundColor],
|
|
67
|
+
"s1v9piyg-9": [props => props.fontHoverColor],
|
|
68
|
+
"s1v9piyg-10": [props => props.fontHoverBackgroundColor],
|
|
69
|
+
"s1v9piyg-11": [props => props.canvasBackgroundColor],
|
|
70
|
+
"s1v9piyg-12": [_ref => {
|
|
71
|
+
let {
|
|
72
|
+
canvasWidth
|
|
73
|
+
} = _ref;
|
|
114
74
|
return "min(100%, ".concat(canvasWidth, "px)");
|
|
115
75
|
}],
|
|
116
|
-
"s1v9piyg-13": [
|
|
117
|
-
|
|
76
|
+
"s1v9piyg-13": [_ref2 => {
|
|
77
|
+
let {
|
|
78
|
+
canvasWidth
|
|
79
|
+
} = _ref2;
|
|
118
80
|
return canvasWidth;
|
|
119
81
|
}, "px"]
|
|
120
82
|
}
|
|
121
83
|
});
|
|
122
|
-
|
|
84
|
+
const StyledRow = /*#__PURE__*/(0, _react2.styled)('div')({
|
|
123
85
|
name: "StyledRow",
|
|
124
|
-
|
|
86
|
+
class: "s6o5tmu",
|
|
125
87
|
vars: {
|
|
126
|
-
"s6o5tmu-
|
|
127
|
-
|
|
88
|
+
"s6o5tmu-0": [_ref3 => {
|
|
89
|
+
let {
|
|
90
|
+
width
|
|
91
|
+
} = _ref3;
|
|
128
92
|
return width;
|
|
129
93
|
}, "px"],
|
|
130
|
-
"s6o5tmu-
|
|
131
|
-
|
|
94
|
+
"s6o5tmu-1": [_ref4 => {
|
|
95
|
+
let {
|
|
96
|
+
aspectRatio
|
|
97
|
+
} = _ref4;
|
|
132
98
|
return aspectRatio;
|
|
133
99
|
}]
|
|
134
100
|
}
|
|
135
101
|
});
|
|
136
|
-
var DEFAULT_OPTIONS = {
|
|
137
|
-
layersManipulation: true,
|
|
138
|
-
gridVisible: false,
|
|
139
|
-
canGrow: false,
|
|
140
|
-
canShrink: true,
|
|
141
|
-
withExport: true,
|
|
142
|
-
withLoadAndSave: true,
|
|
143
|
-
withUploadPicture: true,
|
|
144
|
-
withUrlPicture: false,
|
|
145
|
-
availableTools: _tools.DEFAULT_SHAPE_TOOLS,
|
|
146
|
-
clearCallback: 'empty',
|
|
147
|
-
uiStyle: {
|
|
148
|
-
toolbarBackgroundColor: 'white',
|
|
149
|
-
dividerColor: '#36418129',
|
|
150
|
-
fontRadius: 8,
|
|
151
|
-
fontDisabledColor: '#3641812b',
|
|
152
|
-
fontDisabledBackgroundColor: 'transparent',
|
|
153
|
-
fontColor: '#364181',
|
|
154
|
-
fontBackgroundColor: 'transparent',
|
|
155
|
-
fontSelectedColor: 'white',
|
|
156
|
-
fontSelectedBackgroundColor: '#364181',
|
|
157
|
-
fontHoverColor: '#364181',
|
|
158
|
-
fontHoverBackgroundColor: '#afd8d8',
|
|
159
|
-
canvasBackgroundColor: 'white',
|
|
160
|
-
canvasSelectionColor: _shapes.SELECTION_DEFAULT_COLOR,
|
|
161
|
-
canvasSelectionWidth: _shapes.SELECTION_DEFAULT_WIDTH,
|
|
162
|
-
canvasSelectionPadding: _shapes.SELECTION_DEFAULT_PADDING
|
|
163
|
-
}
|
|
164
|
-
};
|
|
165
102
|
|
|
166
|
-
|
|
103
|
+
const App = _ref5 => {
|
|
167
104
|
var _options$uiStyle;
|
|
168
105
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
106
|
+
let {
|
|
107
|
+
width: canvasWidth = 1000,
|
|
108
|
+
height: canvasHeight = 600,
|
|
109
|
+
shapes: shapesFromProps,
|
|
110
|
+
className: classNameFromProps,
|
|
111
|
+
mode = 'editor',
|
|
112
|
+
disabled: disabledFromProps = false,
|
|
113
|
+
onDataChanged,
|
|
114
|
+
apiRef,
|
|
115
|
+
options
|
|
116
|
+
} = _ref5;
|
|
117
|
+
const {
|
|
118
|
+
layersManipulation,
|
|
119
|
+
grid,
|
|
120
|
+
canGrow,
|
|
121
|
+
canShrink,
|
|
122
|
+
withExport,
|
|
123
|
+
withLoadAndSave,
|
|
124
|
+
withUploadPicture,
|
|
125
|
+
withUrlPicture,
|
|
126
|
+
clearCallback,
|
|
127
|
+
availableTools: availableToolsFromProps
|
|
128
|
+
} = { ..._app.DEFAULT_OPTIONS,
|
|
129
|
+
...options
|
|
130
|
+
};
|
|
131
|
+
const {
|
|
132
|
+
toolbarBackgroundColor,
|
|
133
|
+
dividerColor,
|
|
134
|
+
fontRadius,
|
|
135
|
+
fontDisabledColor,
|
|
136
|
+
fontDisabledBackgroundColor,
|
|
137
|
+
fontColor,
|
|
138
|
+
fontBackgroundColor,
|
|
139
|
+
fontSelectedColor,
|
|
140
|
+
fontSelectedBackgroundColor,
|
|
141
|
+
fontHoverColor,
|
|
142
|
+
fontHoverBackgroundColor,
|
|
143
|
+
canvasBackgroundColor,
|
|
144
|
+
canvasSelectionColor,
|
|
145
|
+
canvasSelectionWidth // canvasSelectionPadding
|
|
146
|
+
|
|
147
|
+
} = { ..._app.DEFAULT_OPTIONS.uiStyle,
|
|
148
|
+
...((_options$uiStyle = options === null || options === void 0 ? void 0 : options.uiStyle) !== null && _options$uiStyle !== void 0 ? _options$uiStyle : {})
|
|
149
|
+
};
|
|
150
|
+
const isEditMode = mode !== 'viewer';
|
|
151
|
+
const disabled = disabledFromProps || !isEditMode;
|
|
152
|
+
const componentRef = (0, _react.useRef)(null);
|
|
153
|
+
const canvasRef = (0, _react.useRef)(null);
|
|
154
|
+
const [canvasSize, setCanvasSize] = (0, _react.useState)({
|
|
218
155
|
width: canvasWidth,
|
|
219
156
|
height: canvasHeight,
|
|
220
157
|
scaleRatio: 1
|
|
221
|
-
})
|
|
222
|
-
|
|
223
|
-
canvasSize = _useState2[0],
|
|
224
|
-
setCanvasSize = _useState2[1];
|
|
225
|
-
|
|
226
|
-
var _useState3 = (0, _react.useState)((0, _toolbar.sanitizeTools)(availableToolsFromProps, withUploadPicture || withUrlPicture)),
|
|
227
|
-
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
|
|
228
|
-
availableTools = _useState4[0],
|
|
229
|
-
setAvailableTools = _useState4[1];
|
|
158
|
+
});
|
|
159
|
+
const canvasSelectionPadding = 0; // selection padding should not be larger than 0 until shape resizing is refactored
|
|
230
160
|
|
|
231
|
-
(0, _react.
|
|
161
|
+
const [availableTools, setAvailableTools] = (0, _react.useState)((0, _toolbar.sanitizeTools)(availableToolsFromProps, withUploadPicture || withUrlPicture));
|
|
162
|
+
(0, _react.useEffect)(() => {
|
|
232
163
|
setAvailableTools((0, _toolbar.sanitizeTools)(availableToolsFromProps, withUploadPicture || withUrlPicture));
|
|
233
164
|
}, [availableToolsFromProps, withUploadPicture, withUrlPicture]);
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
})
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
_useState18 = (0, _slicedToArray2["default"])(_useState17, 2),
|
|
275
|
-
withGrid = _useState18[0],
|
|
276
|
-
setWithGrid = _useState18[1];
|
|
277
|
-
|
|
278
|
-
var _useShapes = (0, _useShapes2["default"])(onDataChanged),
|
|
279
|
-
shapesRef = _useShapes.shapesRef,
|
|
280
|
-
selectedShape = _useShapes.selectedShape,
|
|
281
|
-
addShape = _useShapes.addShape,
|
|
282
|
-
addPictureShape = _useShapes.addPictureShape,
|
|
283
|
-
moveShapes = _useShapes.moveShapes,
|
|
284
|
-
setSelectedShape = _useShapes.setSelectedShape,
|
|
285
|
-
removeShape = _useShapes.removeShape,
|
|
286
|
-
updateShape = _useShapes.updateShape,
|
|
287
|
-
backwardShape = _useShapes.backwardShape,
|
|
288
|
-
forwardShape = _useShapes.forwardShape,
|
|
289
|
-
clearShapes = _useShapes.clearShapes,
|
|
290
|
-
saveShapes = _useShapes.saveShapes,
|
|
291
|
-
toggleShapeVisibility = _useShapes.toggleShapeVisibility,
|
|
292
|
-
toggleShapeLock = _useShapes.toggleShapeLock,
|
|
293
|
-
canGoBackward = _useShapes.canGoBackward,
|
|
294
|
-
canGoForward = _useShapes.canGoForward,
|
|
295
|
-
canClear = _useShapes.canClear;
|
|
296
|
-
|
|
297
|
-
var _useSnackbar = (0, _useSnackbar2["default"])(),
|
|
298
|
-
snackbarList = _useSnackbar.snackbarList,
|
|
299
|
-
addSnackbar = _useSnackbar.addSnackbar;
|
|
300
|
-
|
|
301
|
-
var selectTool = (0, _react.useCallback)(function (tool) {
|
|
165
|
+
const {
|
|
166
|
+
isInsideComponent
|
|
167
|
+
} = (0, _useComponent.default)({
|
|
168
|
+
disabled,
|
|
169
|
+
componentRef
|
|
170
|
+
});
|
|
171
|
+
const [isLoading, setIsLoading] = (0, _react.useState)(false);
|
|
172
|
+
const [isLayoutPanelShown, setIsLayoutPanelShown] = (0, _react.useState)(false);
|
|
173
|
+
const [canvasOffset, setCanvasOffset] = (0, _react.useState)([0, 0]);
|
|
174
|
+
const [canvasOffsetStartPosition, setCanvasOffsetStartPosition] = (0, _react.useState)(undefined);
|
|
175
|
+
const [activeTool, setActiveTool] = (0, _react.useState)(_tools.SELECTION_TOOL);
|
|
176
|
+
const [selectionMode, setSelectionMode] = (0, _react.useState)({
|
|
177
|
+
mode: 'default'
|
|
178
|
+
});
|
|
179
|
+
const [gridFormat, setGridFormat] = (0, _react.useState)(grid);
|
|
180
|
+
const [isShiftPressed, setShiftPressed] = (0, _react.useState)(false);
|
|
181
|
+
const {
|
|
182
|
+
shapesRef,
|
|
183
|
+
selectedShape,
|
|
184
|
+
addShape,
|
|
185
|
+
addPictureShape,
|
|
186
|
+
moveShapes,
|
|
187
|
+
setSelectedShape,
|
|
188
|
+
removeShape,
|
|
189
|
+
updateShape,
|
|
190
|
+
backwardShape,
|
|
191
|
+
forwardShape,
|
|
192
|
+
clearShapes,
|
|
193
|
+
saveShapes,
|
|
194
|
+
toggleShapeVisibility,
|
|
195
|
+
toggleShapeLock,
|
|
196
|
+
canGoBackward,
|
|
197
|
+
canGoForward,
|
|
198
|
+
canClear
|
|
199
|
+
} = (0, _useShapes.default)(onDataChanged);
|
|
200
|
+
const {
|
|
201
|
+
snackbarList,
|
|
202
|
+
addSnackbar
|
|
203
|
+
} = (0, _useSnackbar.default)();
|
|
204
|
+
const selectTool = (0, _react.useCallback)(tool => {
|
|
302
205
|
setSelectedShape(undefined);
|
|
303
206
|
setActiveTool(tool);
|
|
304
207
|
}, [setSelectedShape]);
|
|
305
|
-
|
|
306
|
-
setAvailableTools(
|
|
307
|
-
|
|
308
|
-
return tool.id === toolId ? _fp["default"].set(['settings', field, 'default'], value, tool) : tool;
|
|
309
|
-
});
|
|
310
|
-
});
|
|
311
|
-
setActiveTool(function (activeTool) {
|
|
312
|
-
return activeTool.id === toolId ? _fp["default"].set(['settings', field, 'default'], value, activeTool) : activeTool;
|
|
313
|
-
});
|
|
208
|
+
const updateToolSettings = (0, _react.useCallback)((toolId, field, value) => {
|
|
209
|
+
setAvailableTools(availableTools => availableTools.map(tool => tool.id === toolId ? _fp.default.set(['settings', field, 'default'], value, tool) : tool));
|
|
210
|
+
setActiveTool(activeTool => activeTool.id === toolId ? _fp.default.set(['settings', field, 'default'], value, activeTool) : activeTool);
|
|
314
211
|
}, []);
|
|
315
|
-
|
|
212
|
+
const undoAction = (0, _react.useCallback)(() => {
|
|
316
213
|
selectTool(_tools.SELECTION_TOOL);
|
|
317
214
|
backwardShape();
|
|
318
215
|
}, [selectTool, backwardShape]);
|
|
319
|
-
|
|
216
|
+
const redoAction = (0, _react.useCallback)(() => {
|
|
320
217
|
selectTool(_tools.SELECTION_TOOL);
|
|
321
218
|
forwardShape();
|
|
322
219
|
}, [selectTool, forwardShape]);
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
220
|
+
const resetCanvas = (0, _react.useCallback)(function () {
|
|
221
|
+
let shapesToInit = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
222
|
+
let clearHistory = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
326
223
|
clearShapes(shapesToInit, clearHistory);
|
|
327
224
|
selectTool(_tools.SELECTION_TOOL);
|
|
328
225
|
setCanvasOffset([0, 0]);
|
|
329
226
|
}, [selectTool, clearShapes]);
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
while (1) {
|
|
337
|
-
switch (_context.prev = _context.next) {
|
|
338
|
-
case 0:
|
|
339
|
-
clearHistory = _args.length > 1 && _args[1] !== undefined ? _args[1] : true;
|
|
340
|
-
_context.next = 3;
|
|
341
|
-
return (0, _file.decodeImportedData)(json);
|
|
342
|
-
|
|
343
|
-
case 3:
|
|
344
|
-
shapes = _context.sent;
|
|
345
|
-
resetCanvas(shapes, clearHistory);
|
|
346
|
-
|
|
347
|
-
case 5:
|
|
348
|
-
case "end":
|
|
349
|
-
return _context.stop();
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
}, _callee);
|
|
353
|
-
}));
|
|
354
|
-
|
|
355
|
-
return function (_x) {
|
|
356
|
-
return _ref6.apply(this, arguments);
|
|
357
|
-
};
|
|
358
|
-
}(), [resetCanvas]);
|
|
359
|
-
var clearCanvas = (0, _react.useCallback)(function () {
|
|
227
|
+
const loadImportedData = (0, _react.useCallback)(async function (json) {
|
|
228
|
+
let clearHistory = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
229
|
+
const shapes = await (0, _file.decodeImportedData)(json);
|
|
230
|
+
resetCanvas(shapes, clearHistory);
|
|
231
|
+
}, [resetCanvas]);
|
|
232
|
+
const clearCanvas = (0, _react.useCallback)(() => {
|
|
360
233
|
if (typeof clearCallback !== 'string') {
|
|
361
234
|
void loadImportedData({
|
|
362
235
|
shapes: clearCallback()
|
|
@@ -371,19 +244,19 @@ var App = function App(_ref5) {
|
|
|
371
244
|
}
|
|
372
245
|
}
|
|
373
246
|
}, [resetCanvas, loadImportedData, shapesFromProps, clearCallback]);
|
|
374
|
-
|
|
247
|
+
const selectShape = (0, _react.useCallback)(shape => {
|
|
375
248
|
setActiveTool(_tools.SELECTION_TOOL);
|
|
376
249
|
setSelectedShape(shape);
|
|
377
250
|
}, [setSelectedShape]);
|
|
378
|
-
|
|
251
|
+
const pasteShape = (0, _react.useCallback)(shape => {
|
|
379
252
|
addShape(shape);
|
|
380
253
|
selectShape(shape);
|
|
381
254
|
}, [addShape, selectShape]);
|
|
382
|
-
|
|
255
|
+
const exportCanvasInFile = (0, _react.useCallback)(() => {
|
|
383
256
|
setIsLoading(true);
|
|
384
257
|
|
|
385
258
|
try {
|
|
386
|
-
|
|
259
|
+
const dataURL = canvasRef.current && (0, _file.getCanvasImage)(shapesRef.current, canvasOffset, canvasWidth, canvasHeight, canvasSelectionPadding);
|
|
387
260
|
|
|
388
261
|
if (!dataURL) {
|
|
389
262
|
throw new Error();
|
|
@@ -394,7 +267,7 @@ var App = function App(_ref5) {
|
|
|
394
267
|
} catch (e) {
|
|
395
268
|
if (e instanceof Error) {
|
|
396
269
|
addSnackbar({
|
|
397
|
-
type:
|
|
270
|
+
type: 'error',
|
|
398
271
|
text: "L'export a échoué"
|
|
399
272
|
});
|
|
400
273
|
}
|
|
@@ -404,11 +277,11 @@ var App = function App(_ref5) {
|
|
|
404
277
|
setIsLoading(false);
|
|
405
278
|
}
|
|
406
279
|
}, [addSnackbar, shapesRef, canvasOffset, canvasWidth, canvasHeight, canvasSelectionPadding]);
|
|
407
|
-
|
|
280
|
+
const saveFile = (0, _react.useCallback)(() => {
|
|
408
281
|
setIsLoading(true);
|
|
409
282
|
|
|
410
283
|
try {
|
|
411
|
-
|
|
284
|
+
const content = (0, _file.encodeShapesInString)(shapesRef.current, canvasWidth, canvasHeight);
|
|
412
285
|
|
|
413
286
|
if (!content) {
|
|
414
287
|
throw new Error("L'encodage a échoué");
|
|
@@ -419,7 +292,7 @@ var App = function App(_ref5) {
|
|
|
419
292
|
} catch (e) {
|
|
420
293
|
if (e instanceof Error) {
|
|
421
294
|
addSnackbar({
|
|
422
|
-
type:
|
|
295
|
+
type: 'error',
|
|
423
296
|
text: "L'enregistrement a échoué"
|
|
424
297
|
});
|
|
425
298
|
}
|
|
@@ -429,155 +302,96 @@ var App = function App(_ref5) {
|
|
|
429
302
|
setIsLoading(false);
|
|
430
303
|
}
|
|
431
304
|
}, [shapesRef, addSnackbar, canvasWidth, canvasHeight]);
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
case "end":
|
|
477
|
-
return _context2.stop();
|
|
478
|
-
}
|
|
479
|
-
}
|
|
480
|
-
}, _callee2, null, [[1, 10, 14, 17]]);
|
|
481
|
-
}));
|
|
482
|
-
|
|
483
|
-
return function (_x2) {
|
|
484
|
-
return _ref7.apply(this, arguments);
|
|
485
|
-
};
|
|
486
|
-
}(), [loadImportedData, addSnackbar]);
|
|
487
|
-
var addPicture = (0, _react.useCallback)( /*#__PURE__*/function () {
|
|
488
|
-
var _ref8 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(fileOrUrl) {
|
|
489
|
-
var pictureShape;
|
|
490
|
-
return _regenerator["default"].wrap(function _callee3$(_context3) {
|
|
491
|
-
while (1) {
|
|
492
|
-
switch (_context3.prev = _context3.next) {
|
|
493
|
-
case 0:
|
|
494
|
-
setIsLoading(true);
|
|
495
|
-
_context3.prev = 1;
|
|
496
|
-
_context3.next = 4;
|
|
497
|
-
return addPictureShape(fileOrUrl, canvasWidth, canvasHeight);
|
|
498
|
-
|
|
499
|
-
case 4:
|
|
500
|
-
pictureShape = _context3.sent;
|
|
501
|
-
selectShape(pictureShape);
|
|
502
|
-
_context3.next = 12;
|
|
503
|
-
break;
|
|
504
|
-
|
|
505
|
-
case 8:
|
|
506
|
-
_context3.prev = 8;
|
|
507
|
-
_context3.t0 = _context3["catch"](1);
|
|
508
|
-
|
|
509
|
-
if (_context3.t0 instanceof Error) {
|
|
510
|
-
addSnackbar({
|
|
511
|
-
type: _snackbar.SnackbarTypeEnum.Error,
|
|
512
|
-
text: 'Le chargement a échoué'
|
|
513
|
-
});
|
|
514
|
-
}
|
|
515
|
-
|
|
516
|
-
console.warn(_context3.t0);
|
|
517
|
-
|
|
518
|
-
case 12:
|
|
519
|
-
_context3.prev = 12;
|
|
520
|
-
setIsLoading(false);
|
|
521
|
-
return _context3.finish(12);
|
|
522
|
-
|
|
523
|
-
case 15:
|
|
524
|
-
case "end":
|
|
525
|
-
return _context3.stop();
|
|
526
|
-
}
|
|
527
|
-
}
|
|
528
|
-
}, _callee3, null, [[1, 8, 12, 15]]);
|
|
529
|
-
}));
|
|
530
|
-
|
|
531
|
-
return function (_x3) {
|
|
532
|
-
return _ref8.apply(this, arguments);
|
|
533
|
-
};
|
|
534
|
-
}(), [addPictureShape, selectShape, addSnackbar, canvasWidth, canvasHeight]);
|
|
535
|
-
var onResized = (0, _react.useCallback)(function (measuredWidth) {
|
|
536
|
-
var scaleRatio = measuredWidth / canvasWidth;
|
|
305
|
+
const loadFile = (0, _react.useCallback)(async file => {
|
|
306
|
+
setIsLoading(true);
|
|
307
|
+
|
|
308
|
+
try {
|
|
309
|
+
const json = await (0, _file.decodeJson)(file);
|
|
310
|
+
await loadImportedData(json);
|
|
311
|
+
addSnackbar({
|
|
312
|
+
type: 'success',
|
|
313
|
+
text: 'Fichier chargé !'
|
|
314
|
+
});
|
|
315
|
+
} catch (e) {
|
|
316
|
+
if (e instanceof Error) {
|
|
317
|
+
addSnackbar({
|
|
318
|
+
type: 'error',
|
|
319
|
+
text: 'Le chargement a échoué'
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
console.warn(e);
|
|
324
|
+
} finally {
|
|
325
|
+
setIsLoading(false);
|
|
326
|
+
}
|
|
327
|
+
}, [loadImportedData, addSnackbar]);
|
|
328
|
+
const addPicture = (0, _react.useCallback)(async fileOrUrl => {
|
|
329
|
+
setIsLoading(true);
|
|
330
|
+
|
|
331
|
+
try {
|
|
332
|
+
const pictureShape = await addPictureShape(fileOrUrl, canvasWidth, canvasHeight);
|
|
333
|
+
selectShape(pictureShape);
|
|
334
|
+
} catch (e) {
|
|
335
|
+
if (e instanceof Error) {
|
|
336
|
+
addSnackbar({
|
|
337
|
+
type: 'error',
|
|
338
|
+
text: 'Le chargement a échoué'
|
|
339
|
+
});
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
console.warn(e);
|
|
343
|
+
} finally {
|
|
344
|
+
setIsLoading(false);
|
|
345
|
+
}
|
|
346
|
+
}, [addPictureShape, selectShape, addSnackbar, canvasWidth, canvasHeight]);
|
|
347
|
+
const onResized = (0, _react.useCallback)(measuredWidth => {
|
|
348
|
+
const scaleRatio = measuredWidth / canvasWidth;
|
|
537
349
|
setCanvasSize({
|
|
538
350
|
width: measuredWidth,
|
|
539
351
|
height: canvasHeight * scaleRatio,
|
|
540
|
-
scaleRatio
|
|
352
|
+
scaleRatio
|
|
541
353
|
});
|
|
542
354
|
}, [canvasWidth, canvasHeight]);
|
|
543
|
-
(0, _useKeyboard
|
|
544
|
-
isInsideComponent
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
355
|
+
(0, _useKeyboard.default)({
|
|
356
|
+
isInsideComponent,
|
|
357
|
+
gridFormat,
|
|
358
|
+
isEditingText: selectionMode.mode === 'textedition',
|
|
359
|
+
selectedShape,
|
|
360
|
+
setSelectedShape,
|
|
361
|
+
removeShape,
|
|
362
|
+
pasteShape,
|
|
363
|
+
updateShape,
|
|
364
|
+
backwardShape,
|
|
365
|
+
forwardShape,
|
|
366
|
+
setShiftPressed
|
|
553
367
|
});
|
|
554
|
-
(0, _useResizeObserver
|
|
368
|
+
(0, _useResizeObserver.default)({
|
|
555
369
|
element: componentRef,
|
|
556
|
-
onResized
|
|
370
|
+
onResized
|
|
557
371
|
});
|
|
558
|
-
(0, _react.useEffect)(
|
|
372
|
+
(0, _react.useEffect)(() => {
|
|
559
373
|
if (!isInsideComponent) setSelectedShape(undefined);
|
|
560
374
|
}, [isInsideComponent, setSelectedShape]);
|
|
561
|
-
(0, _react.useEffect)(
|
|
375
|
+
(0, _react.useEffect)(() => {
|
|
562
376
|
if (shapesFromProps !== undefined) {
|
|
563
377
|
void loadImportedData({
|
|
564
378
|
shapes: shapesFromProps
|
|
565
379
|
});
|
|
566
380
|
}
|
|
567
381
|
}, [loadImportedData, shapesFromProps]);
|
|
568
|
-
(0, _react.useEffect)(
|
|
382
|
+
(0, _react.useEffect)(() => {
|
|
569
383
|
if (!apiRef) return;
|
|
570
384
|
apiRef.current = {
|
|
571
|
-
getCurrentImage:
|
|
385
|
+
getCurrentImage: () => {
|
|
572
386
|
return canvasRef.current ? (0, _file.getCanvasImage)(shapesRef.current, canvasOffset, canvasWidth, canvasHeight, canvasSelectionPadding) : undefined;
|
|
573
387
|
},
|
|
574
|
-
getCurrentData:
|
|
388
|
+
getCurrentData: () => {
|
|
575
389
|
return (0, _data.buildDataToExport)(shapesRef.current, canvasWidth, canvasHeight);
|
|
576
390
|
}
|
|
577
391
|
};
|
|
578
392
|
}, [apiRef, shapesRef, canvasOffset, canvasWidth, canvasHeight, canvasSelectionPadding]);
|
|
579
|
-
|
|
580
|
-
return /*#__PURE__*/_react
|
|
393
|
+
const className = "".concat(classNameFromProps !== null && classNameFromProps !== void 0 ? classNameFromProps : '', " ").concat(isLayoutPanelShown ? 'layoutPanelOpened' : '');
|
|
394
|
+
return /*#__PURE__*/_react.default.createElement(StyledApp, {
|
|
581
395
|
ref: componentRef,
|
|
582
396
|
className: className,
|
|
583
397
|
"data-grow": canGrow,
|
|
@@ -595,7 +409,7 @@ var App = function App(_ref5) {
|
|
|
595
409
|
fontHoverColor: fontHoverColor,
|
|
596
410
|
fontHoverBackgroundColor: fontHoverBackgroundColor,
|
|
597
411
|
canvasBackgroundColor: canvasBackgroundColor
|
|
598
|
-
}, isEditMode && /*#__PURE__*/_react
|
|
412
|
+
}, isEditMode && /*#__PURE__*/_react.default.createElement(_Toolbar.default, {
|
|
599
413
|
width: canvasSize.width,
|
|
600
414
|
disabled: disabled,
|
|
601
415
|
activeTool: activeTool,
|
|
@@ -615,13 +429,13 @@ var App = function App(_ref5) {
|
|
|
615
429
|
withLoadAndSave: withLoadAndSave,
|
|
616
430
|
withUploadPicture: withUploadPicture,
|
|
617
431
|
withUrlPicture: withUrlPicture
|
|
618
|
-
}), /*#__PURE__*/_react
|
|
432
|
+
}), /*#__PURE__*/_react.default.createElement(StyledRow, {
|
|
619
433
|
"data-grow": canGrow,
|
|
620
434
|
width: canvasSize.width,
|
|
621
435
|
aspectRatio: "calc(".concat(canvasSize.width, " / ").concat(canvasSize.height, ")")
|
|
622
|
-
}, /*#__PURE__*/_react
|
|
436
|
+
}, /*#__PURE__*/_react.default.createElement(_Canvas.default, {
|
|
623
437
|
canGrow: canGrow,
|
|
624
|
-
|
|
438
|
+
gridFormat: gridFormat,
|
|
625
439
|
disabled: disabled,
|
|
626
440
|
isInsideComponent: isInsideComponent,
|
|
627
441
|
activeTool: activeTool,
|
|
@@ -643,10 +457,11 @@ var App = function App(_ref5) {
|
|
|
643
457
|
selectionColor: canvasSelectionColor,
|
|
644
458
|
selectionWidth: canvasSelectionWidth,
|
|
645
459
|
selectionPadding: canvasSelectionPadding,
|
|
646
|
-
isEditMode: isEditMode
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
460
|
+
isEditMode: isEditMode,
|
|
461
|
+
isShiftPressed: isShiftPressed
|
|
462
|
+
}), isEditMode && layersManipulation && /*#__PURE__*/_react.default.createElement(_Layouts.default, {
|
|
463
|
+
gridFormat: gridFormat,
|
|
464
|
+
setGridFormat: setGridFormat,
|
|
650
465
|
disabled: disabled,
|
|
651
466
|
shapes: shapesRef.current,
|
|
652
467
|
moveShapes: moveShapes,
|
|
@@ -656,7 +471,7 @@ var App = function App(_ref5) {
|
|
|
656
471
|
toggleShapeVisibility: toggleShapeVisibility,
|
|
657
472
|
toggleShapeLock: toggleShapeLock,
|
|
658
473
|
isLayoutPanelShown: isLayoutPanelShown
|
|
659
|
-
})), isEditMode && /*#__PURE__*/_react
|
|
474
|
+
})), isEditMode && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_SettingsBar.default, {
|
|
660
475
|
width: canvasSize.width,
|
|
661
476
|
disabled: disabled,
|
|
662
477
|
activeTool: activeTool,
|
|
@@ -666,18 +481,16 @@ var App = function App(_ref5) {
|
|
|
666
481
|
updateShape: updateShape,
|
|
667
482
|
canvas: canvasRef.current,
|
|
668
483
|
layersManipulation: layersManipulation,
|
|
669
|
-
toggleLayoutPanel:
|
|
670
|
-
setIsLayoutPanelShown(
|
|
671
|
-
return !prev;
|
|
672
|
-
});
|
|
484
|
+
toggleLayoutPanel: () => {
|
|
485
|
+
setIsLayoutPanelShown(prev => !prev);
|
|
673
486
|
},
|
|
674
487
|
updateToolSettings: updateToolSettings
|
|
675
|
-
}), /*#__PURE__*/_react
|
|
488
|
+
}), /*#__PURE__*/_react.default.createElement(_Loading.default, {
|
|
676
489
|
isLoading: isLoading
|
|
677
|
-
}), /*#__PURE__*/_react
|
|
490
|
+
}), /*#__PURE__*/_react.default.createElement(_Snackbar.default, {
|
|
678
491
|
snackbarList: snackbarList
|
|
679
492
|
})));
|
|
680
493
|
};
|
|
681
494
|
|
|
682
495
|
var _default = App;
|
|
683
|
-
exports
|
|
496
|
+
exports.default = _default;
|