@yorab/react-paint 0.5.0 → 0.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/Changelog.md +107 -0
  2. package/README.md +0 -7
  3. package/dist/components/App.js +114 -79
  4. package/dist/components/Canvas.js +7 -7
  5. package/dist/components/common/Button.js +4 -4
  6. package/dist/components/common/Loading.js +3 -3
  7. package/dist/components/common/Modal.js +8 -4
  8. package/dist/components/common/Panel.js +5 -2
  9. package/dist/components/common/Snackbar.js +2 -2
  10. package/dist/components/settings/ColorField.js +11 -5
  11. package/dist/components/settings/FontFamilyField.js +6 -3
  12. package/dist/components/settings/LayoutButton.js +1 -1
  13. package/dist/components/settings/Layouts.js +18 -9
  14. package/dist/components/settings/LineArrowField.js +7 -4
  15. package/dist/components/settings/LineTypeField.js +7 -4
  16. package/dist/components/settings/PointsNumberField.js +4 -1
  17. package/dist/components/settings/RangeField.js +6 -3
  18. package/dist/components/settings/SelectField.js +11 -4
  19. package/dist/components/settings/SettingsBar.js +246 -131
  20. package/dist/components/settings/ToggleField.js +56 -0
  21. package/dist/components/toolbox/EditTextBox.js +23 -16
  22. package/dist/components/toolbox/MenuGroup.js +11 -11
  23. package/dist/components/toolbox/PictureUrlInput.js +1 -1
  24. package/dist/components/toolbox/Toolbar.js +13 -7
  25. package/dist/components/toolbox/ToolbarGroup.js +13 -11
  26. package/dist/constants/icons.js +18 -8
  27. package/dist/constants/tools.js +10 -2
  28. package/dist/hooks/useDoubleClick.js +46 -0
  29. package/dist/hooks/useDrawableCanvas.js +29 -45
  30. package/dist/styles.css +55 -51
  31. package/dist/utils/data.js +27 -5
  32. package/dist/utils/draw.js +3 -3
  33. package/dist/utils/file.js +15 -14
  34. package/dist/utils/intersect.js +1 -0
  35. package/dist/utils/selection.js +1 -1
  36. package/dist/utils/transform.js +23 -10
  37. package/package.json +1 -1
@@ -37,6 +37,14 @@ var _LineTypeField = _interopRequireDefault(require("./LineTypeField"));
37
37
 
38
38
  var _LineArrowField = _interopRequireDefault(require("./LineArrowField"));
39
39
 
40
+ var _ToggleField = _interopRequireDefault(require("./ToggleField"));
41
+
42
+ var _icons = require("../../constants/icons");
43
+
44
+ var _Button = _interopRequireDefault(require("../common/Button"));
45
+
46
+ var _Modal = _interopRequireDefault(require("../common/Modal"));
47
+
40
48
  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); }
41
49
 
42
50
  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; }
@@ -45,113 +53,58 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
45
53
 
46
54
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
47
55
 
56
+ var SETTING_WIDTH = 40;
48
57
  var StyledSettingsBar = /*#__PURE__*/(0, _react2.styled)("div")({
49
58
  name: "StyledSettingsBar",
50
- "class": "s17kh6p4"
59
+ "class": "s16z54di"
51
60
  });
52
61
  var StyledSeparator = /*#__PURE__*/(0, _react2.styled)("div")({
53
62
  name: "StyledSeparator",
54
- "class": "s1fluhcn"
63
+ "class": "sa7lzh9"
64
+ });
65
+ var StyledToolsModal = /*#__PURE__*/(0, _react2.styled)(_Modal["default"])({
66
+ name: "StyledToolsModal",
67
+ "class": "s7b85in"
55
68
  });
56
69
 
57
- var SettingsBar = function SettingsBar(_ref) {
58
- var _selectedShape$style, _selectedShape$style2, _selectedShape$style3, _selectedShape$style4, _selectedShape$style5, _selectedShape$style6, _selectedShape$style7, _selectedShape$style$, _selectedShape$style8;
70
+ var SettingsItems = function SettingsItems(_ref) {
71
+ var _selectedShape$style, _selectedShape$style2, _selectedShape$style3, _selectedShape$style4, _selectedShape$style5, _selectedShape$style6, _selectedShape$style7, _selectedShape$style8, _selectedShape$style9, _selectedShape$style$, _selectedShape$style10;
59
72
 
60
- var _ref$disabled = _ref.disabled,
61
- disabled = _ref$disabled === void 0 ? false : _ref$disabled,
62
- availableTools = _ref.availableTools,
63
- layersManipulation = _ref.layersManipulation,
64
- toggleLayoutPanel = _ref.toggleLayoutPanel,
65
- activeTool = _ref.activeTool,
73
+ var activeTool = _ref.activeTool,
66
74
  selectedShape = _ref.selectedShape,
67
- canvas = _ref.canvas,
68
- updateShape = _ref.updateShape,
69
- removeShape = _ref.removeShape;
70
-
71
- // const shapes = [
72
- // ShapeEnum.brush,
73
- // ShapeEnum.ellipse,
74
- // ShapeEnum.circle,
75
- // ShapeEnum.rect,
76
- // ShapeEnum.square,
77
- // ShapeEnum.line,
78
- // ShapeEnum.polygon,
79
- // ShapeEnum.curve,
80
- // ShapeEnum.text
81
- // ]
82
- var _useState = (0, _react.useState)(undefined),
83
- _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
84
- selectedSettings = _useState2[0],
85
- setSelectedSettings = _useState2[1];
86
-
87
- var handleShapeStyleChange = function handleShapeStyleChange(field, value) {
88
- if (selectedShape) {
89
- updateShape(_fp["default"].set(field, value, selectedShape), true);
90
- } // } else {
91
- // setDefaultConf(prevDefaultConf => _.set(field, value, prevDefaultConf))
92
- // }
93
-
94
- };
95
-
96
- var handleShapeFontFamilyChange = function handleShapeFontFamilyChange(field, value) {
97
- if (selectedShape) {
98
- var _newShape$style;
99
-
100
- var ctx = canvas === null || canvas === void 0 ? void 0 : canvas.getContext('2d');
101
- if (!ctx) return;
102
-
103
- var newShape = _fp["default"].set(field, value, selectedShape);
104
-
105
- var fontSize = (0, _transform.calculateTextFontSize)(ctx, newShape.value, newShape.width, (_newShape$style = newShape.style) === null || _newShape$style === void 0 ? void 0 : _newShape$style.fontFamily);
106
-
107
- var resizedShape = _objectSpread(_objectSpread({}, newShape), {}, {
108
- fontSize: fontSize,
109
- height: fontSize * newShape.value.length
110
- });
111
-
112
- updateShape(resizedShape, true);
113
- } // else {
114
- // setDefaultConf(prevDefaultConf => _.set(field, value, prevDefaultConf))
115
- // }
116
-
117
- };
118
-
119
- var handlePolygonLinesCount = function handlePolygonLinesCount(field, value) {
120
- if (selectedShape) {
121
- updateShape((0, _transform.updatePolygonLinesCount)(selectedShape, value), true);
122
- } // else {
123
- // setDefaultConf(prevDefaultConf => _.set(field, value, prevDefaultConf))
124
- // }
125
-
126
- };
127
-
128
- var selectedShapeTool = selectedShape ? _fp["default"].find({
129
- id: selectedShape.toolId
130
- }, availableTools) || _fp["default"].find({
131
- type: selectedShape.type
132
- }, availableTools) : undefined;
133
- return /*#__PURE__*/_react["default"].createElement(StyledSettingsBar, null, selectedShape ? /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, selectedShapeTool && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, 'pointsCount' in selectedShapeTool.settings && /*#__PURE__*/_react["default"].createElement(_PointsNumberField["default"], {
75
+ selectedShapeTool = _ref.selectedShapeTool,
76
+ disabled = _ref.disabled,
77
+ selectedSettings = _ref.selectedSettings,
78
+ setSelectedSettings = _ref.setSelectedSettings,
79
+ handleShapeStyleChange = _ref.handleShapeStyleChange,
80
+ handlePolygonLinesCount = _ref.handlePolygonLinesCount,
81
+ handleShapeFontFamilyChange = _ref.handleShapeFontFamilyChange;
82
+ return selectedShape ? /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, selectedShapeTool && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, 'strokeColor' in selectedShapeTool.settings && /*#__PURE__*/_react["default"].createElement(_ColorField["default"], {
134
83
  selectedSettings: selectedSettings,
135
84
  setSelectedSettings: setSelectedSettings,
85
+ title: "Couleur du trait",
86
+ mode: "stroke",
136
87
  disabled: disabled,
137
- valueChanged: handlePolygonLinesCount,
138
- min: selectedShapeTool.settings.pointsCount.min,
139
- max: selectedShapeTool.settings.pointsCount.max,
140
- step: selectedShapeTool.settings.pointsCount.step,
141
- value: (_selectedShape$style = selectedShape.style) === null || _selectedShape$style === void 0 ? void 0 : _selectedShape$style.pointsCount
142
- }), 'fontFamily' in selectedShapeTool.settings && /*#__PURE__*/_react["default"].createElement(_FontFamilyField["default"], {
88
+ field: "strokeColor",
89
+ value: (_selectedShape$style = selectedShape.style) === null || _selectedShape$style === void 0 ? void 0 : _selectedShape$style.strokeColor,
90
+ valueChanged: handleShapeStyleChange,
91
+ values: selectedShapeTool.settings.strokeColor.values
92
+ }), 'fillColor' in selectedShapeTool.settings && /*#__PURE__*/_react["default"].createElement(_ColorField["default"], {
143
93
  selectedSettings: selectedSettings,
144
94
  setSelectedSettings: setSelectedSettings,
95
+ title: "Couleur de fond",
145
96
  disabled: disabled,
146
- valueChanged: handleShapeFontFamilyChange,
147
- values: selectedShapeTool.settings.fontFamily.values,
148
- defaultValue: (_selectedShape$style2 = selectedShape.style) === null || _selectedShape$style2 === void 0 ? void 0 : _selectedShape$style2.fontFamily
97
+ field: "fillColor",
98
+ value: (_selectedShape$style2 = selectedShape.style) === null || _selectedShape$style2 === void 0 ? void 0 : _selectedShape$style2.fillColor,
99
+ valueChanged: handleShapeStyleChange,
100
+ values: selectedShapeTool.settings.fillColor.values
149
101
  }), 'lineWidth' in selectedShapeTool.settings && /*#__PURE__*/_react["default"].createElement(_RangeField["default"], {
150
102
  selectedSettings: selectedSettings,
151
103
  setSelectedSettings: setSelectedSettings,
152
104
  title: "Epaisseur du trait",
105
+ icon: _icons.lineWidthIcon,
153
106
  disabled: disabled,
154
- field: "style.lineWidth",
107
+ field: "lineWidth",
155
108
  value: (_selectedShape$style3 = selectedShape.style) === null || _selectedShape$style3 === void 0 ? void 0 : _selectedShape$style3.lineWidth,
156
109
  valueChanged: handleShapeStyleChange,
157
110
  unity: "px",
@@ -172,62 +125,77 @@ var SettingsBar = function SettingsBar(_ref) {
172
125
  defaultValue: (_selectedShape$style5 = selectedShape.style) === null || _selectedShape$style5 === void 0 ? void 0 : _selectedShape$style5.lineArrow,
173
126
  valueChanged: handleShapeStyleChange,
174
127
  values: selectedShapeTool.settings.lineArrow.values
175
- }), 'strokeColor' in selectedShapeTool.settings && /*#__PURE__*/_react["default"].createElement(_ColorField["default"], {
128
+ }), 'pointsCount' in selectedShapeTool.settings && /*#__PURE__*/_react["default"].createElement(_PointsNumberField["default"], {
176
129
  selectedSettings: selectedSettings,
177
130
  setSelectedSettings: setSelectedSettings,
178
- title: "Couleur du trait",
179
131
  disabled: disabled,
180
- field: "style.strokeColor",
181
- value: (_selectedShape$style6 = selectedShape.style) === null || _selectedShape$style6 === void 0 ? void 0 : _selectedShape$style6.strokeColor,
182
- valueChanged: handleShapeStyleChange,
183
- values: selectedShapeTool.settings.strokeColor.values
184
- }), 'fillColor' in selectedShapeTool.settings && /*#__PURE__*/_react["default"].createElement(_ColorField["default"], {
132
+ valueChanged: handlePolygonLinesCount,
133
+ min: selectedShapeTool.settings.pointsCount.min,
134
+ max: selectedShapeTool.settings.pointsCount.max,
135
+ step: selectedShapeTool.settings.pointsCount.step,
136
+ value: (_selectedShape$style6 = selectedShape.style) === null || _selectedShape$style6 === void 0 ? void 0 : _selectedShape$style6.pointsCount
137
+ }), 'fontFamily' in selectedShapeTool.settings && /*#__PURE__*/_react["default"].createElement(_FontFamilyField["default"], {
185
138
  selectedSettings: selectedSettings,
186
139
  setSelectedSettings: setSelectedSettings,
187
- title: "Couleur de fond",
188
140
  disabled: disabled,
189
- field: "style.fillColor",
190
- value: (_selectedShape$style7 = selectedShape.style) === null || _selectedShape$style7 === void 0 ? void 0 : _selectedShape$style7.fillColor,
191
- valueChanged: handleShapeStyleChange,
192
- values: selectedShapeTool.settings.fillColor.values
141
+ valueChanged: handleShapeFontFamilyChange,
142
+ values: selectedShapeTool.settings.fontFamily.values,
143
+ defaultValue: (_selectedShape$style7 = selectedShape.style) === null || _selectedShape$style7 === void 0 ? void 0 : _selectedShape$style7.fontFamily
144
+ }), 'fontBold' in selectedShapeTool.settings && /*#__PURE__*/_react["default"].createElement(_ToggleField["default"], {
145
+ setSelectedSettings: setSelectedSettings,
146
+ disabled: disabled,
147
+ field: "fontBold",
148
+ icon: _icons.boldIcon,
149
+ valueChanged: handleShapeFontFamilyChange,
150
+ values: selectedShapeTool.settings.fontBold.values,
151
+ value: (_selectedShape$style8 = selectedShape.style) === null || _selectedShape$style8 === void 0 ? void 0 : _selectedShape$style8.fontBold
152
+ }), 'fontItalic' in selectedShapeTool.settings && /*#__PURE__*/_react["default"].createElement(_ToggleField["default"], {
153
+ setSelectedSettings: setSelectedSettings,
154
+ disabled: disabled,
155
+ field: "fontItalic",
156
+ icon: _icons.italicIcon,
157
+ valueChanged: handleShapeFontFamilyChange,
158
+ values: selectedShapeTool.settings.fontItalic.values,
159
+ value: (_selectedShape$style9 = selectedShape.style) === null || _selectedShape$style9 === void 0 ? void 0 : _selectedShape$style9.fontItalic
193
160
  }), 'opacity' in selectedShapeTool.settings && /*#__PURE__*/_react["default"].createElement(_RangeField["default"], {
194
161
  selectedSettings: selectedSettings,
195
162
  setSelectedSettings: setSelectedSettings,
196
163
  title: "Opacit\xE9",
164
+ icon: _icons.opacityIcon,
197
165
  min: selectedShapeTool.settings.opacity.min,
198
166
  max: selectedShapeTool.settings.opacity.max,
199
167
  step: selectedShapeTool.settings.opacity.step,
200
168
  unity: "%",
201
169
  disabled: disabled,
202
- field: "style.globalAlpha",
203
- value: (_selectedShape$style$ = (_selectedShape$style8 = selectedShape.style) === null || _selectedShape$style8 === void 0 ? void 0 : _selectedShape$style8.globalAlpha) !== null && _selectedShape$style$ !== void 0 ? _selectedShape$style$ : 100,
170
+ field: "globalAlpha",
171
+ value: (_selectedShape$style$ = (_selectedShape$style10 = selectedShape.style) === null || _selectedShape$style10 === void 0 ? void 0 : _selectedShape$style10.globalAlpha) !== null && _selectedShape$style$ !== void 0 ? _selectedShape$style$ : 100,
204
172
  valueChanged: handleShapeStyleChange
205
- })), /*#__PURE__*/_react["default"].createElement(_DeleteButton["default"], {
206
- disabled: disabled,
207
- selectedShape: selectedShape,
208
- removeShape: removeShape
209
- })) : 'settings' in activeTool && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, 'pointsCount' in activeTool.settings && /*#__PURE__*/_react["default"].createElement(_PointsNumberField["default"], {
173
+ }))) : 'settings' in activeTool ? /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, 'strokeColor' in activeTool.settings && /*#__PURE__*/_react["default"].createElement(_ColorField["default"], {
210
174
  selectedSettings: selectedSettings,
211
175
  setSelectedSettings: setSelectedSettings,
176
+ title: "Couleur du trait",
177
+ mode: "stroke",
212
178
  disabled: disabled,
213
- valueChanged: handlePolygonLinesCount,
214
- min: activeTool.settings.pointsCount.min,
215
- max: activeTool.settings.pointsCount.max,
216
- step: activeTool.settings.pointsCount.step,
217
- value: activeTool.settings.pointsCount["default"]
218
- }), 'fontFamily' in activeTool.settings && /*#__PURE__*/_react["default"].createElement(_FontFamilyField["default"], {
179
+ field: "strokeColor",
180
+ value: activeTool.settings.strokeColor["default"],
181
+ valueChanged: handleShapeStyleChange,
182
+ values: activeTool.settings.strokeColor.values
183
+ }), 'fillColor' in activeTool.settings && /*#__PURE__*/_react["default"].createElement(_ColorField["default"], {
219
184
  selectedSettings: selectedSettings,
220
185
  setSelectedSettings: setSelectedSettings,
186
+ title: "Couleur de fond",
221
187
  disabled: disabled,
222
- valueChanged: handleShapeFontFamilyChange,
223
- values: activeTool.settings.fontFamily.values,
224
- defaultValue: activeTool.settings.fontFamily["default"]
188
+ field: "fillColor",
189
+ value: activeTool.settings.fillColor["default"],
190
+ valueChanged: handleShapeStyleChange,
191
+ values: activeTool.settings.fillColor.values
225
192
  }), 'lineWidth' in activeTool.settings && /*#__PURE__*/_react["default"].createElement(_RangeField["default"], {
226
193
  selectedSettings: selectedSettings,
227
194
  setSelectedSettings: setSelectedSettings,
228
195
  title: "Epaisseur du trait",
229
196
  disabled: disabled,
230
- field: "style.lineWidth",
197
+ field: "lineWidth",
198
+ icon: _icons.lineWidthIcon,
231
199
  value: activeTool.settings.lineWidth["default"],
232
200
  valueChanged: handleShapeStyleChange,
233
201
  unity: "px",
@@ -248,41 +216,188 @@ var SettingsBar = function SettingsBar(_ref) {
248
216
  defaultValue: activeTool.settings.lineArrow["default"],
249
217
  valueChanged: handleShapeStyleChange,
250
218
  values: activeTool.settings.lineArrow.values
251
- }), 'strokeColor' in activeTool.settings && /*#__PURE__*/_react["default"].createElement(_ColorField["default"], {
219
+ }), 'pointsCount' in activeTool.settings && /*#__PURE__*/_react["default"].createElement(_PointsNumberField["default"], {
252
220
  selectedSettings: selectedSettings,
253
221
  setSelectedSettings: setSelectedSettings,
254
- title: "Couleur du trait",
255
222
  disabled: disabled,
256
- field: "style.strokeColor",
257
- value: activeTool.settings.strokeColor["default"],
258
- valueChanged: handleShapeStyleChange,
259
- values: activeTool.settings.strokeColor.values
260
- }), 'fillColor' in activeTool.settings && /*#__PURE__*/_react["default"].createElement(_ColorField["default"], {
223
+ valueChanged: handlePolygonLinesCount,
224
+ min: activeTool.settings.pointsCount.min,
225
+ max: activeTool.settings.pointsCount.max,
226
+ step: activeTool.settings.pointsCount.step,
227
+ value: activeTool.settings.pointsCount["default"]
228
+ }), 'fontFamily' in activeTool.settings && /*#__PURE__*/_react["default"].createElement(_FontFamilyField["default"], {
261
229
  selectedSettings: selectedSettings,
262
230
  setSelectedSettings: setSelectedSettings,
263
- title: "Couleur de fond",
264
231
  disabled: disabled,
265
- field: "style.fillColor",
266
- value: activeTool.settings.fillColor["default"],
267
- valueChanged: handleShapeStyleChange,
268
- values: activeTool.settings.fillColor.values
232
+ valueChanged: handleShapeFontFamilyChange,
233
+ values: activeTool.settings.fontFamily.values,
234
+ defaultValue: activeTool.settings.fontFamily["default"]
235
+ }), 'fontBold' in activeTool.settings && /*#__PURE__*/_react["default"].createElement(_ToggleField["default"], {
236
+ setSelectedSettings: setSelectedSettings,
237
+ disabled: disabled,
238
+ field: "fontBold",
239
+ icon: _icons.boldIcon,
240
+ valueChanged: handleShapeFontFamilyChange,
241
+ values: activeTool.settings.fontBold.values,
242
+ value: activeTool.settings.fontBold["default"]
243
+ }), 'fontItalic' in activeTool.settings && /*#__PURE__*/_react["default"].createElement(_ToggleField["default"], {
244
+ setSelectedSettings: setSelectedSettings,
245
+ disabled: disabled,
246
+ field: "fontItalic",
247
+ icon: _icons.italicIcon,
248
+ valueChanged: handleShapeFontFamilyChange,
249
+ values: activeTool.settings.fontItalic.values,
250
+ value: activeTool.settings.fontItalic["default"]
269
251
  }), 'opacity' in activeTool.settings && /*#__PURE__*/_react["default"].createElement(_RangeField["default"], {
270
252
  selectedSettings: selectedSettings,
271
253
  setSelectedSettings: setSelectedSettings,
272
254
  title: "Opacit\xE9",
255
+ icon: _icons.opacityIcon,
273
256
  min: activeTool.settings.opacity.min,
274
257
  max: activeTool.settings.opacity.max,
275
258
  step: activeTool.settings.opacity.step,
276
259
  unity: "%",
277
260
  disabled: disabled,
278
- field: "style.globalAlpha",
261
+ field: "globalAlpha",
279
262
  value: activeTool.settings.opacity["default"],
280
263
  valueChanged: handleShapeStyleChange
281
- })), /*#__PURE__*/_react["default"].createElement(StyledSeparator, null), layersManipulation && /*#__PURE__*/_react["default"].createElement(_LayoutButton["default"], {
264
+ })) : null;
265
+ };
266
+
267
+ var SettingsBar = function SettingsBar(_ref2) {
268
+ var width = _ref2.width,
269
+ _ref2$disabled = _ref2.disabled,
270
+ disabled = _ref2$disabled === void 0 ? false : _ref2$disabled,
271
+ availableTools = _ref2.availableTools,
272
+ updateToolSettings = _ref2.updateToolSettings,
273
+ layersManipulation = _ref2.layersManipulation,
274
+ toggleLayoutPanel = _ref2.toggleLayoutPanel,
275
+ activeTool = _ref2.activeTool,
276
+ selectedShape = _ref2.selectedShape,
277
+ canvas = _ref2.canvas,
278
+ updateShape = _ref2.updateShape,
279
+ removeShape = _ref2.removeShape;
280
+
281
+ var _useState = (0, _react.useState)(undefined),
282
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
283
+ selectedSettings = _useState2[0],
284
+ setSelectedSettings = _useState2[1];
285
+
286
+ var _useState3 = (0, _react.useState)(false),
287
+ _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
288
+ isMenuOpen = _useState4[0],
289
+ setIsMenuOpen = _useState4[1];
290
+
291
+ var toggleTools = function toggleTools() {
292
+ setIsMenuOpen(function (prev) {
293
+ return !prev;
294
+ });
295
+ };
296
+
297
+ var selectedShapeTool = selectedShape ? _fp["default"].find({
298
+ id: selectedShape.toolId
299
+ }, availableTools) || _fp["default"].find({
300
+ type: selectedShape.type
301
+ }, availableTools) : undefined;
302
+ var nbSettingsTools = (selectedShapeTool ? _fp["default"].size(selectedShapeTool.settings) + 1 : 'settings' in activeTool ? _fp["default"].size(activeTool.settings) : 0) + (layersManipulation ? 1 : 0);
303
+ var settingsBreakpoint = nbSettingsTools * SETTING_WIDTH;
304
+
305
+ var _useState5 = (0, _react.useState)(width < settingsBreakpoint),
306
+ _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
307
+ settingsInMenu = _useState6[0],
308
+ setSettingsInMenu = _useState6[1];
309
+
310
+ var handleShapeStyleChange = function handleShapeStyleChange(field, value) {
311
+ if (selectedShape) {
312
+ updateShape(_fp["default"].set(['style', field], value, selectedShape), true);
313
+ updateToolSettings(selectedShape.toolId, field, value);
314
+ } else {
315
+ updateToolSettings(activeTool.id, field, value);
316
+ }
317
+ };
318
+
319
+ var handleShapeFontFamilyChange = function handleShapeFontFamilyChange(field, value) {
320
+ if (selectedShape) {
321
+ var _newShape$style$fontB, _newShape$style, _newShape$style$fontI, _newShape$style2, _newShape$style3;
322
+
323
+ var ctx = canvas === null || canvas === void 0 ? void 0 : canvas.getContext('2d');
324
+ if (!ctx) return;
325
+
326
+ var newShape = _fp["default"].set(['style', field], value, selectedShape);
327
+
328
+ var fontSize = (0, _transform.calculateTextFontSize)(ctx, newShape.value, newShape.width, (_newShape$style$fontB = (_newShape$style = newShape.style) === null || _newShape$style === void 0 ? void 0 : _newShape$style.fontBold) !== null && _newShape$style$fontB !== void 0 ? _newShape$style$fontB : false, (_newShape$style$fontI = (_newShape$style2 = newShape.style) === null || _newShape$style2 === void 0 ? void 0 : _newShape$style2.fontItalic) !== null && _newShape$style$fontI !== void 0 ? _newShape$style$fontI : false, (_newShape$style3 = newShape.style) === null || _newShape$style3 === void 0 ? void 0 : _newShape$style3.fontFamily);
329
+
330
+ var resizedShape = _objectSpread(_objectSpread({}, newShape), {}, {
331
+ fontSize: fontSize,
332
+ height: fontSize * newShape.value.length
333
+ });
334
+
335
+ updateShape(resizedShape, true);
336
+ updateToolSettings(selectedShape.toolId, field, value);
337
+ } else {
338
+ updateToolSettings(activeTool.id, field, value);
339
+ }
340
+ };
341
+
342
+ var handlePolygonLinesCount = function handlePolygonLinesCount(field, value) {
343
+ if (selectedShape) {
344
+ updateShape((0, _transform.updatePolygonLinesCount)(selectedShape, value), true);
345
+ updateToolSettings(selectedShape.toolId, field, value);
346
+ } else {
347
+ updateToolSettings(activeTool.id, field, value);
348
+ }
349
+ };
350
+
351
+ (0, _react.useEffect)(function () {
352
+ setSettingsInMenu(width < settingsBreakpoint);
353
+ }, [width, settingsBreakpoint]);
354
+ return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(StyledSettingsBar, null, settingsInMenu && nbSettingsTools > 2 && /*#__PURE__*/_react["default"].createElement(_Button["default"], {
355
+ disabled: disabled,
356
+ onClick: toggleTools,
357
+ title: "Toggle settings",
358
+ icon: _icons.settingsIcon
359
+ }), selectedShape ? /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, selectedShapeTool && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, !settingsInMenu && /*#__PURE__*/_react["default"].createElement(SettingsItems, {
360
+ activeTool: activeTool,
361
+ selectedShape: selectedShape,
362
+ selectedShapeTool: selectedShapeTool,
363
+ disabled: disabled,
364
+ selectedSettings: selectedSettings,
365
+ setSelectedSettings: setSelectedSettings,
366
+ handleShapeStyleChange: handleShapeStyleChange,
367
+ handlePolygonLinesCount: handlePolygonLinesCount,
368
+ handleShapeFontFamilyChange: handleShapeFontFamilyChange
369
+ }), /*#__PURE__*/_react["default"].createElement(_DeleteButton["default"], {
370
+ disabled: disabled,
371
+ selectedShape: selectedShape,
372
+ removeShape: removeShape
373
+ }))) : !settingsInMenu && /*#__PURE__*/_react["default"].createElement(SettingsItems, {
374
+ activeTool: activeTool,
375
+ selectedShape: selectedShape,
376
+ selectedShapeTool: selectedShapeTool,
377
+ disabled: disabled,
378
+ selectedSettings: selectedSettings,
379
+ setSelectedSettings: setSelectedSettings,
380
+ handleShapeStyleChange: handleShapeStyleChange,
381
+ handlePolygonLinesCount: handlePolygonLinesCount,
382
+ handleShapeFontFamilyChange: handleShapeFontFamilyChange
383
+ }), /*#__PURE__*/_react["default"].createElement(StyledSeparator, null), layersManipulation && /*#__PURE__*/_react["default"].createElement(_LayoutButton["default"], {
282
384
  layersManipulation: layersManipulation,
283
385
  disabled: disabled,
284
386
  toggleLayoutPanel: toggleLayoutPanel
285
- }));
387
+ })), isMenuOpen && /*#__PURE__*/_react["default"].createElement(StyledToolsModal, {
388
+ onClose: toggleTools,
389
+ position: "bottom"
390
+ }, /*#__PURE__*/_react["default"].createElement(SettingsItems, {
391
+ activeTool: activeTool,
392
+ selectedShape: selectedShape,
393
+ selectedShapeTool: selectedShapeTool,
394
+ disabled: disabled,
395
+ selectedSettings: selectedSettings,
396
+ setSelectedSettings: setSelectedSettings,
397
+ handleShapeStyleChange: handleShapeStyleChange,
398
+ handlePolygonLinesCount: handlePolygonLinesCount,
399
+ handleShapeFontFamilyChange: handleShapeFontFamilyChange
400
+ })));
286
401
  };
287
402
 
288
403
  var _default = SettingsBar;
@@ -0,0 +1,56 @@
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 _fp = _interopRequireDefault(require("lodash/fp"));
15
+
16
+ var _react = _interopRequireWildcard(require("react"));
17
+
18
+ var _Button = _interopRequireDefault(require("../common/Button"));
19
+
20
+ 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); }
21
+
22
+ 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; }
23
+
24
+ var ToggleField = function ToggleField(_ref) {
25
+ var setSelectedSettings = _ref.setSelectedSettings,
26
+ _ref$disabled = _ref.disabled,
27
+ disabled = _ref$disabled === void 0 ? false : _ref$disabled,
28
+ field = _ref.field,
29
+ icon = _ref.icon,
30
+ values = _ref.values,
31
+ _ref$value = _ref.value,
32
+ value = _ref$value === void 0 ? false : _ref$value,
33
+ valueChanged = _ref.valueChanged;
34
+
35
+ var _useState = (0, _react.useState)(_fp["default"].uniqueId('settings_')),
36
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 1),
37
+ customKey = _useState2[0];
38
+
39
+ var handleClick = function handleClick() {
40
+ setSelectedSettings(function (prev) {
41
+ return prev === customKey ? undefined : customKey;
42
+ });
43
+ valueChanged(field, !value);
44
+ };
45
+
46
+ if (values.length !== 2) return null;
47
+ return /*#__PURE__*/_react["default"].createElement(_Button["default"], {
48
+ onClick: handleClick,
49
+ selected: value,
50
+ disabled: disabled,
51
+ icon: icon
52
+ });
53
+ };
54
+
55
+ var _default = ToggleField;
56
+ exports["default"] = _default;
@@ -27,41 +27,45 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
27
27
 
28
28
  var StyledEditBox = /*#__PURE__*/(0, _react2.styled)("div")({
29
29
  name: "StyledEditBox",
30
- "class": "se8ufj4",
30
+ "class": "s1unz6yq",
31
31
  vars: {
32
- "se8ufj4-0": [function (_ref) {
32
+ "s1unz6yq-0": [function (_ref) {
33
33
  var transform = _ref.transform;
34
34
  return transform;
35
35
  }],
36
- "se8ufj4-1": [function (_ref2) {
36
+ "s1unz6yq-1": [function (_ref2) {
37
37
  var color = _ref2.color;
38
38
  return color;
39
39
  }],
40
- "se8ufj4-2": [function (_ref3) {
40
+ "s1unz6yq-2": [function (_ref3) {
41
41
  var padding = _ref3.padding;
42
42
  return padding;
43
43
  }, "px"],
44
- "se8ufj4-3": [function (_ref4) {
44
+ "s1unz6yq-3": [function (_ref4) {
45
45
  var fontsize = _ref4.fontsize;
46
46
  return fontsize;
47
47
  }, "px"],
48
- "se8ufj4-5": [function (_ref5) {
48
+ "s1unz6yq-5": [function (_ref5) {
49
49
  var fontfamily = _ref5.fontfamily;
50
50
  return fontfamily;
51
+ }],
52
+ "s1unz6yq-6": [function (_ref6) {
53
+ var opacity = _ref6.opacity;
54
+ return opacity;
51
55
  }]
52
56
  }
53
57
  });
54
58
 
55
- var EditTextBox = function EditTextBox(_ref6) {
56
- var _shape$style$strokeCo, _shape$style, _shape$style$fontFami, _shape$style2;
59
+ var EditTextBox = function EditTextBox(_ref7) {
60
+ var _shape$style$strokeCo, _shape$style, _shape$style$globalAl, _shape$style2, _shape$style$fontFami, _shape$style3, _shape$style$fontBold, _shape$style4, _shape$style$fontItal, _shape$style5;
57
61
 
58
- var _ref6$disabled = _ref6.disabled,
59
- disabled = _ref6$disabled === void 0 ? false : _ref6$disabled,
60
- scaleRatio = _ref6.scaleRatio,
61
- shape = _ref6.shape,
62
- defaultValue = _ref6.defaultValue,
63
- updateValue = _ref6.updateValue,
64
- selectionPadding = _ref6.selectionPadding;
62
+ var _ref7$disabled = _ref7.disabled,
63
+ disabled = _ref7$disabled === void 0 ? false : _ref7$disabled,
64
+ scaleRatio = _ref7.scaleRatio,
65
+ shape = _ref7.shape,
66
+ defaultValue = _ref7.defaultValue,
67
+ updateValue = _ref7.updateValue,
68
+ selectionPadding = _ref7.selectionPadding;
65
69
  var ref = (0, _react.useRef)(null);
66
70
 
67
71
  var updateContentEditable = function updateContentEditable(e) {
@@ -86,7 +90,10 @@ var EditTextBox = function EditTextBox(_ref6) {
86
90
  fontsize: shape.fontSize * scaleRatio,
87
91
  padding: selectionPadding * scaleRatio,
88
92
  color: (_shape$style$strokeCo = (_shape$style = shape.style) === null || _shape$style === void 0 ? void 0 : _shape$style.strokeColor) !== null && _shape$style$strokeCo !== void 0 ? _shape$style$strokeCo : 'inherit',
89
- fontfamily: (_shape$style$fontFami = (_shape$style2 = shape.style) === null || _shape$style2 === void 0 ? void 0 : _shape$style2.fontFamily) !== null && _shape$style$fontFami !== void 0 ? _shape$style$fontFami : _style.STYLE_FONT_DEFAULT,
93
+ opacity: ((_shape$style$globalAl = (_shape$style2 = shape.style) === null || _shape$style2 === void 0 ? void 0 : _shape$style2.globalAlpha) !== null && _shape$style$globalAl !== void 0 ? _shape$style$globalAl : 100) / 100,
94
+ fontfamily: (_shape$style$fontFami = (_shape$style3 = shape.style) === null || _shape$style3 === void 0 ? void 0 : _shape$style3.fontFamily) !== null && _shape$style$fontFami !== void 0 ? _shape$style$fontFami : _style.STYLE_FONT_DEFAULT,
95
+ "data-fontbold": (_shape$style$fontBold = (_shape$style4 = shape.style) === null || _shape$style4 === void 0 ? void 0 : _shape$style4.fontBold) !== null && _shape$style$fontBold !== void 0 ? _shape$style$fontBold : false,
96
+ "data-fontitalic": (_shape$style$fontItal = (_shape$style5 = shape.style) === null || _shape$style5 === void 0 ? void 0 : _shape$style5.fontItalic) !== null && _shape$style$fontItal !== void 0 ? _shape$style$fontItal : false,
90
97
  contentEditable: !disabled,
91
98
  onInput: updateContentEditable
92
99
  });