@yorab/react-paint 0.4.1 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/Changelog.md +26 -0
  2. package/README.md +0 -6
  3. package/dist/components/App.js +45 -38
  4. package/dist/components/Canvas.js +6 -6
  5. package/dist/components/settings/ColorField.js +5 -5
  6. package/dist/components/settings/FontFamilyField.js +6 -4
  7. package/dist/components/settings/Layouts.js +17 -8
  8. package/dist/components/settings/LineArrowField.js +6 -4
  9. package/dist/components/settings/LineTypeField.js +6 -4
  10. package/dist/components/settings/PointsNumberField.js +20 -30
  11. package/dist/components/settings/RangeField.js +1 -0
  12. package/dist/components/settings/SelectField.js +1 -0
  13. package/dist/components/settings/SettingsBar.js +141 -88
  14. package/dist/components/settings/ToggleField.js +56 -0
  15. package/dist/components/toolbox/EditTextBox.js +17 -10
  16. package/dist/components/toolbox/LoadFileTool.js +5 -3
  17. package/dist/components/toolbox/MenuGroup.js +37 -44
  18. package/dist/components/toolbox/Tool.js +4 -4
  19. package/dist/components/toolbox/Toolbar.js +81 -69
  20. package/dist/components/toolbox/ToolbarGroup.js +29 -31
  21. package/dist/constants/icons.js +6 -2
  22. package/dist/constants/style.js +3 -1
  23. package/dist/constants/tools.js +428 -0
  24. package/dist/hooks/useComponent.js +6 -2
  25. package/dist/hooks/useDoubleClick.js +46 -0
  26. package/dist/hooks/useDrawableCanvas.js +48 -55
  27. package/dist/styles.css +11 -11
  28. package/dist/types/Shapes.js +2 -16
  29. package/dist/types/tools.js +22 -0
  30. package/dist/utils/data.js +106 -28
  31. package/dist/utils/draw.js +3 -3
  32. package/dist/utils/file.js +15 -14
  33. package/dist/utils/selection.js +1 -1
  34. package/dist/utils/style.js +4 -2
  35. package/dist/utils/toolbar.js +66 -11
  36. package/dist/utils/transform.js +24 -11
  37. package/package.json +1 -1
@@ -25,16 +25,14 @@ var _Panel = _interopRequireDefault(require("../common/Panel"));
25
25
 
26
26
  var _react2 = require("@linaria/react");
27
27
 
28
- var _Shapes = require("../../types/Shapes");
29
-
30
- var _style = require("../../utils/style");
31
-
32
28
  var _Tool = _interopRequireDefault(require("./Tool"));
33
29
 
34
30
  var _LoadFileTool = _interopRequireDefault(require("./LoadFileTool"));
35
31
 
36
32
  var _icons = require("../../constants/icons");
37
33
 
34
+ var _tools = require("../../constants/tools");
35
+
38
36
  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
37
 
40
38
  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; }
@@ -75,13 +73,18 @@ var MenuGroup = function MenuGroup(_ref) {
75
73
  togglePictureUrlModal = _ref.togglePictureUrlModal,
76
74
  saveFile = _ref.saveFile,
77
75
  exportCanvasInFile = _ref.exportCanvasInFile,
78
- availableTools = _ref.availableTools;
76
+ withUploadPicture = _ref.withUploadPicture,
77
+ withUrlPicture = _ref.withUrlPicture;
79
78
 
80
79
  var _useState = (0, _react.useState)(false),
81
80
  _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
82
81
  isOpen = _useState2[0],
83
82
  setIsOpen = _useState2[1];
84
83
 
84
+ var _useTransition = (0, _react.useTransition)(),
85
+ _useTransition2 = (0, _slicedToArray2["default"])(_useTransition, 2),
86
+ startTransition = _useTransition2[1];
87
+
85
88
  var loadFile = function loadFile(file) {
86
89
  setIsOpen(false);
87
90
  loadFileFromProps(file);
@@ -111,12 +114,14 @@ var MenuGroup = function MenuGroup(_ref) {
111
114
  }();
112
115
 
113
116
  var openPanel = function openPanel() {
114
- setIsOpen(true);
117
+ startTransition(function () {
118
+ setIsOpen(true);
119
+ });
115
120
  };
116
121
 
117
- var isActive = _fp["default"].includes(activeTool, group === null || group === void 0 ? void 0 : group.tools);
122
+ var isActive = _fp["default"].includes(activeTool.type, group === null || group === void 0 ? void 0 : group.tools);
118
123
 
119
- var groupIcon = (_ref3 = isActive ? (0, _style.getShapePicture)(activeTool) : group.img) !== null && _ref3 !== void 0 ? _ref3 : group.title;
124
+ var groupIcon = (_ref3 = isActive ? activeTool.icon : group.img) !== null && _ref3 !== void 0 ? _ref3 : group.title;
120
125
  (0, _react.useEffect)(function () {
121
126
  if (!isOpen) return;
122
127
 
@@ -124,19 +129,12 @@ var MenuGroup = function MenuGroup(_ref) {
124
129
  setIsOpen(false);
125
130
  };
126
131
 
127
- var timeoutId = setTimeout(function () {
128
- //TODO find a better fix than settimeout for react18
129
- document.addEventListener('click', closePanel);
130
- }, 0);
132
+ document.addEventListener('click', closePanel);
131
133
  return function () {
132
- clearTimeout(timeoutId);
133
134
  document.removeEventListener('click', closePanel);
134
135
  };
135
136
  }, [isOpen]);
136
-
137
- var withPicture = _fp["default"].includes(_Shapes.ShapeEnum.picture, availableTools);
138
-
139
- var withMenu = withActionsInMenu || withPicture || withLoadAndSave || withExport;
137
+ var withMenu = withActionsInMenu || withUploadPicture || withUrlPicture || withLoadAndSave || withExport;
140
138
  return withMenu ? /*#__PURE__*/_react["default"].createElement(StyledRelative, null, /*#__PURE__*/_react["default"].createElement(_Button["default"], {
141
139
  selected: isActive,
142
140
  title: group.title,
@@ -148,66 +146,61 @@ var MenuGroup = function MenuGroup(_ref) {
148
146
  alignment: alignment
149
147
  }, withActionsInMenu && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_Tool["default"], {
150
148
  withText: true,
151
- type: _Shapes.ToolEnum.undo,
149
+ type: _tools.UNDO_TOOL,
152
150
  disabled: disabled || !hasActionToUndo,
153
- lib: "Undo",
154
- img: _icons.undoIcon,
155
- isActive: activeTool === _Shapes.ToolEnum.undo,
151
+ img: _tools.UNDO_TOOL.icon,
152
+ isActive: activeTool.id === _tools.UNDO_TOOL.id,
156
153
  setActive: undoAction
157
154
  }), /*#__PURE__*/_react["default"].createElement(_Tool["default"], {
158
155
  withText: true,
159
- type: _Shapes.ToolEnum.redo,
156
+ type: _tools.REDO_TOOL,
160
157
  disabled: disabled || !hasActionToRedo,
161
- lib: "Redo",
162
- img: _icons.redoIcon,
163
- isActive: activeTool === _Shapes.ToolEnum.redo,
158
+ img: _tools.REDO_TOOL.icon,
159
+ isActive: activeTool.id === _tools.REDO_TOOL.id,
164
160
  setActive: redoAction
165
161
  }), /*#__PURE__*/_react["default"].createElement(_Tool["default"], {
166
162
  withText: true,
167
- type: _Shapes.ToolEnum.clear,
163
+ type: _tools.CLEAR_TOOL,
168
164
  disabled: disabled || !hasActionToClear,
169
- lib: "Clear",
170
- img: _icons.clearIcon,
171
- isActive: activeTool === _Shapes.ToolEnum.clear,
165
+ img: _tools.CLEAR_TOOL.icon,
166
+ isActive: activeTool.id === _tools.CLEAR_TOOL.id,
172
167
  setActive: function setActive() {
173
168
  return clearCanvas();
174
169
  }
175
- }), (withPicture || withLoadAndSave) && /*#__PURE__*/_react["default"].createElement("hr", null)), withPicture && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_LoadFileTool["default"], {
170
+ }), (withUploadPicture || withUrlPicture || withLoadAndSave) && /*#__PURE__*/_react["default"].createElement("hr", null)), withUploadPicture && /*#__PURE__*/_react["default"].createElement(_LoadFileTool["default"], {
176
171
  withText: true,
172
+ type: _tools.UPLOAD_PICTURE_TOOL,
177
173
  disabled: disabled,
178
174
  loadFile: addPicture,
179
- lib: "Upload picture",
180
- img: _icons.pictureIcon,
175
+ img: _tools.UPLOAD_PICTURE_TOOL.icon,
181
176
  accept: "image/png, image/gif, image/jpeg"
182
- }), /*#__PURE__*/_react["default"].createElement(_Button["default"], {
177
+ }), withUrlPicture && /*#__PURE__*/_react["default"].createElement(_Button["default"], {
183
178
  disabled: disabled,
184
179
  selected: false,
185
180
  onClick: togglePictureUrlModal,
186
181
  title: "Add picture from URL",
187
182
  icon: _icons.publicIcon,
188
183
  children: "Add picture from URL"
189
- }), withLoadAndSave && /*#__PURE__*/_react["default"].createElement("hr", null)), withLoadAndSave && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_LoadFileTool["default"], {
184
+ }), (withUploadPicture || withUrlPicture) && withLoadAndSave && /*#__PURE__*/_react["default"].createElement("hr", null), withLoadAndSave && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_LoadFileTool["default"], {
190
185
  withText: true,
186
+ type: _tools.LOAD_TOOL,
191
187
  disabled: disabled,
192
188
  loadFile: loadFile,
193
- lib: "Load project",
194
- img: _icons.openFileIcon,
189
+ img: _tools.LOAD_TOOL.icon,
195
190
  accept: "application/JSON"
196
191
  }), /*#__PURE__*/_react["default"].createElement(_Tool["default"], {
197
192
  withText: true,
198
193
  disabled: disabled,
199
- type: _Shapes.ToolEnum.saveFile,
200
- lib: "Save project",
201
- img: _icons.saveIcon,
202
- isActive: activeTool === _Shapes.ToolEnum.saveFile,
194
+ type: _tools.SAVE_TOOL,
195
+ img: _tools.SAVE_TOOL.icon,
196
+ isActive: activeTool.id === _tools.SAVE_TOOL.id,
203
197
  setActive: saveFile
204
198
  })), withExport && /*#__PURE__*/_react["default"].createElement(_Tool["default"], {
205
199
  withText: true,
206
200
  disabled: disabled,
207
- type: _Shapes.ToolEnum["export"],
208
- lib: "Export PNG",
209
- img: _icons.exportFileIcon,
210
- isActive: activeTool === _Shapes.ToolEnum["export"],
201
+ type: _tools.EXPORT_TOOL,
202
+ img: _tools.EXPORT_TOOL.icon,
203
+ isActive: activeTool.id === _tools.EXPORT_TOOL.id,
211
204
  setActive: exportCanvasInFile
212
205
  }))) : null;
213
206
  };
@@ -12,9 +12,9 @@ var _react = _interopRequireDefault(require("react"));
12
12
  var _Button = _interopRequireDefault(require("../common/Button"));
13
13
 
14
14
  var Tool = function Tool(_ref) {
15
+ var _type$lib;
16
+
15
17
  var type = _ref.type,
16
- _ref$lib = _ref.lib,
17
- lib = _ref$lib === void 0 ? '' : _ref$lib,
18
18
  img = _ref.img,
19
19
  isActive = _ref.isActive,
20
20
  _ref$withText = _ref.withText,
@@ -31,9 +31,9 @@ var Tool = function Tool(_ref) {
31
31
  disabled: disabled,
32
32
  selected: isActive,
33
33
  onClick: handleClick,
34
- title: lib,
34
+ title: (_type$lib = type.lib) !== null && _type$lib !== void 0 ? _type$lib : type.type,
35
35
  icon: img,
36
- children: withText ? lib : undefined
36
+ children: withText ? type.lib : undefined
37
37
  });
38
38
  };
39
39
 
@@ -29,18 +29,19 @@ var _MenuGroup = _interopRequireDefault(require("./MenuGroup"));
29
29
 
30
30
  var _Tool = _interopRequireDefault(require("./Tool"));
31
31
 
32
- var _style = require("../../utils/style");
33
-
34
32
  var _Modal = _interopRequireDefault(require("../common/Modal"));
35
33
 
36
34
  var _PictureUrlInput = _interopRequireDefault(require("./PictureUrlInput"));
37
35
 
36
+ var _fp = _interopRequireDefault(require("lodash/fp"));
37
+
38
+ var _tools = require("../../constants/tools");
39
+
38
40
  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
41
 
40
42
  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
43
 
42
- var ACTIONS_MENU_BREAKPOINT = 400;
43
- var TOOLS_MENU_BREAKPOINT = 280;
44
+ var TOOL_WIDTH = 40;
44
45
  var StyledShrinkableTools = /*#__PURE__*/(0, _react2.styled)("div")({
45
46
  name: "StyledShrinkableTools",
46
47
  "class": "so6hnjf"
@@ -55,15 +56,15 @@ var StyledToolsModal = /*#__PURE__*/(0, _react2.styled)(_Modal["default"])({
55
56
  });
56
57
  var TOOLBAR_STRUCTURE = [{
57
58
  title: 'brush',
58
- tools: [_Shapes.ShapeEnum.brush],
59
+ toolsType: [_Shapes.ShapeEnum.brush],
59
60
  vertical: false
60
61
  }, {
61
62
  title: 'lines',
62
- tools: [_Shapes.ShapeEnum.line, _Shapes.ShapeEnum.curve, _Shapes.ShapeEnum.polygon],
63
+ toolsType: [_Shapes.ShapeEnum.line, _Shapes.ShapeEnum.curve, _Shapes.ShapeEnum.polygon],
63
64
  vertical: false
64
65
  }, {
65
66
  title: 'shapes',
66
- tools: [_Shapes.ShapeEnum.rect, _Shapes.ShapeEnum.square, _Shapes.ShapeEnum.circle, _Shapes.ShapeEnum.ellipse],
67
+ toolsType: [_Shapes.ShapeEnum.rect, _Shapes.ShapeEnum.square, _Shapes.ShapeEnum.circle, _Shapes.ShapeEnum.ellipse],
67
68
  vertical: false
68
69
  }, _Shapes.ShapeEnum.text];
69
70
 
@@ -88,7 +89,12 @@ var Toolbar = function Toolbar(_ref) {
88
89
  loadFile = _ref.loadFile,
89
90
  saveFile = _ref.saveFile,
90
91
  exportCanvasInFile = _ref.exportCanvasInFile,
91
- availableTools = _ref.availableTools;
92
+ availableTools = _ref.availableTools,
93
+ withUrlPicture = _ref.withUrlPicture,
94
+ withUploadPicture = _ref.withUploadPicture;
95
+ var currentStructure = (0, _toolbar.getCurrentStructure)(availableTools, TOOLBAR_STRUCTURE);
96
+ var fullToolbarSize = (5 + currentStructure.length) * TOOL_WIDTH;
97
+ var withMenuToolbarSize = (2 + currentStructure.length) * TOOL_WIDTH;
92
98
 
93
99
  var _useState = (0, _react.useState)(false),
94
100
  _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
@@ -100,12 +106,12 @@ var Toolbar = function Toolbar(_ref) {
100
106
  isPictureUrlModalOpen = _useState4[0],
101
107
  setIsPictureUrlModalOpen = _useState4[1];
102
108
 
103
- var _useState5 = (0, _react.useState)(width < ACTIONS_MENU_BREAKPOINT),
109
+ var _useState5 = (0, _react.useState)(width < fullToolbarSize),
104
110
  _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
105
111
  actionsInMenu = _useState6[0],
106
112
  setActionsInMenu = _useState6[1];
107
113
 
108
- var _useState7 = (0, _react.useState)(width < TOOLS_MENU_BREAKPOINT),
114
+ var _useState7 = (0, _react.useState)(width < withMenuToolbarSize),
109
115
  _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
110
116
  toolsInMenu = _useState8[0],
111
117
  setToolsInMenu = _useState8[1];
@@ -131,17 +137,67 @@ var Toolbar = function Toolbar(_ref) {
131
137
  setIsMenuOpen(false);
132
138
  };
133
139
 
140
+ var setActiveToolFromId = function setActiveToolFromId(toolId) {
141
+ var _availableTools$find;
142
+
143
+ setActiveTool((_availableTools$find = availableTools.find(function (tool) {
144
+ return tool.id === toolId;
145
+ })) !== null && _availableTools$find !== void 0 ? _availableTools$find : activeTool);
146
+ }; //360 240
147
+
148
+
134
149
  (0, _react.useEffect)(function () {
135
- setActionsInMenu(width < ACTIONS_MENU_BREAKPOINT);
136
- setToolsInMenu(width < TOOLS_MENU_BREAKPOINT);
137
- }, [width]);
138
- var currentStructure = (0, _toolbar.getCurrentStructure)(availableTools, TOOLBAR_STRUCTURE);
139
- var isAnyToolSelected = availableTools.includes(activeTool);
140
- return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(StyledToolbox, null, /*#__PURE__*/_react["default"].createElement(_MenuGroup["default"], {
150
+ setActionsInMenu(width < fullToolbarSize);
151
+ setToolsInMenu(width < withMenuToolbarSize);
152
+ }, [width, fullToolbarSize, withMenuToolbarSize]);
153
+ var isAnyToolSelected = _fp["default"].find({
154
+ type: activeTool
155
+ }, availableTools) !== undefined;
156
+ return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(StyledToolbox, null, /*#__PURE__*/_react["default"].createElement(StyledShrinkableTools, null, /*#__PURE__*/_react["default"].createElement(_Tool["default"], {
157
+ type: _tools.SELECTION_TOOL,
158
+ disabled: disabled,
159
+ img: _tools.SELECTION_TOOL.icon,
160
+ isActive: activeTool.id === _tools.SELECTION_TOOL.id,
161
+ setActive: setActiveTool
162
+ }), toolsInMenu ? /*#__PURE__*/_react["default"].createElement(_Button["default"], {
163
+ disabled: disabled,
164
+ onClick: toggleTools,
165
+ title: "Toggle tools",
166
+ icon: _icons.shapesIcon,
167
+ selected: isAnyToolSelected
168
+ }) : currentStructure.map(function (group, i) {
169
+ return /*#__PURE__*/_react["default"].createElement(_ToolbarGroup["default"], {
170
+ disabled: disabled,
171
+ key: i,
172
+ activeTool: activeTool,
173
+ group: group,
174
+ setActiveToolFromId: setActiveToolFromId
175
+ });
176
+ })), !actionsInMenu && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_Tool["default"], {
177
+ type: _tools.UNDO_TOOL,
178
+ disabled: disabled || !hasActionToUndo,
179
+ img: _tools.UNDO_TOOL.icon,
180
+ isActive: activeTool.id === _tools.UNDO_TOOL.id,
181
+ setActive: undoAction
182
+ }), /*#__PURE__*/_react["default"].createElement(_Tool["default"], {
183
+ type: _tools.REDO_TOOL,
184
+ disabled: disabled || !hasActionToRedo,
185
+ img: _tools.REDO_TOOL.icon,
186
+ isActive: activeTool.id === _tools.REDO_TOOL.id,
187
+ setActive: redoAction
188
+ }), /*#__PURE__*/_react["default"].createElement(_Tool["default"], {
189
+ type: _tools.CLEAR_TOOL,
190
+ disabled: disabled || !hasActionToClear,
191
+ img: _tools.CLEAR_TOOL.icon,
192
+ isActive: activeTool.id === _tools.CLEAR_TOOL.id,
193
+ setActive: function setActive() {
194
+ return clearCanvas();
195
+ }
196
+ })), /*#__PURE__*/_react["default"].createElement(_MenuGroup["default"], {
141
197
  withActionsInMenu: actionsInMenu,
142
198
  disabled: disabled,
143
199
  vertical: true,
144
- alignment: "left",
200
+ alignment: "right",
145
201
  group: {
146
202
  title: 'Menu',
147
203
  img: _icons.menuIcon
@@ -152,7 +208,8 @@ var Toolbar = function Toolbar(_ref) {
152
208
  saveFile: saveFile,
153
209
  togglePictureUrlModal: openPictureUrlModal,
154
210
  exportCanvasInFile: exportCanvasInFile,
155
- availableTools: availableTools,
211
+ withUploadPicture: withUploadPicture,
212
+ withUrlPicture: withUrlPicture,
156
213
  withLoadAndSave: withLoadAndSave,
157
214
  withExport: withExport,
158
215
  hasActionToUndo: hasActionToUndo,
@@ -161,61 +218,16 @@ var Toolbar = function Toolbar(_ref) {
161
218
  undoAction: undoAction,
162
219
  redoAction: redoAction,
163
220
  clearCanvas: clearCanvas
164
- }), /*#__PURE__*/_react["default"].createElement(_Tool["default"], {
165
- type: _Shapes.ToolEnum.selection,
166
- disabled: disabled,
167
- lib: "selection",
168
- img: _icons.selectIcon,
169
- isActive: activeTool === _Shapes.ToolEnum.selection,
170
- setActive: setActiveTool
171
- }), !actionsInMenu && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_Tool["default"], {
172
- type: _Shapes.ToolEnum.undo,
173
- disabled: disabled || !hasActionToUndo,
174
- lib: "Undo",
175
- img: _icons.undoIcon,
176
- isActive: activeTool === _Shapes.ToolEnum.undo,
177
- setActive: undoAction
178
- }), /*#__PURE__*/_react["default"].createElement(_Tool["default"], {
179
- type: _Shapes.ToolEnum.redo,
180
- disabled: disabled || !hasActionToRedo,
181
- lib: "Redo",
182
- img: _icons.redoIcon,
183
- isActive: activeTool === _Shapes.ToolEnum.redo,
184
- setActive: redoAction
185
- }), /*#__PURE__*/_react["default"].createElement(_Tool["default"], {
186
- type: _Shapes.ToolEnum.clear,
187
- disabled: disabled || !hasActionToClear,
188
- lib: "Clear",
189
- img: _icons.clearIcon,
190
- isActive: activeTool === _Shapes.ToolEnum.clear,
191
- setActive: function setActive() {
192
- return clearCanvas();
193
- }
194
- })), /*#__PURE__*/_react["default"].createElement(StyledShrinkableTools, null, toolsInMenu ? /*#__PURE__*/_react["default"].createElement(_Button["default"], {
195
- disabled: disabled,
196
- onClick: toggleTools,
197
- title: "Toggle tools",
198
- icon: _icons.shapesIcon,
199
- selected: isAnyToolSelected
200
- }) : currentStructure.map(function (group, i) {
201
- return /*#__PURE__*/_react["default"].createElement(_ToolbarGroup["default"], {
202
- disabled: disabled,
203
- key: i,
204
- activeTool: activeTool,
205
- group: group,
206
- setActiveTool: setActiveTool
207
- });
208
- }))), isMenuOpen && /*#__PURE__*/_react["default"].createElement(StyledToolsModal, {
221
+ })), isMenuOpen && /*#__PURE__*/_react["default"].createElement(StyledToolsModal, {
209
222
  onClose: toggleTools
210
- }, availableTools.map(function (toolType) {
211
- return toolType === _Shapes.ShapeEnum.picture ? null : /*#__PURE__*/_react["default"].createElement(_Tool["default"], {
223
+ }, availableTools.map(function (toolType, index) {
224
+ return toolType.type === _Shapes.ShapeEnum.picture ? null : /*#__PURE__*/_react["default"].createElement(_Tool["default"], {
212
225
  disabled: disabled,
213
- key: toolType,
226
+ key: index,
214
227
  type: toolType,
215
- lib: toolType,
228
+ img: toolType.icon,
216
229
  withText: false,
217
- img: (0, _style.getShapePicture)(toolType),
218
- isActive: activeTool === toolType,
230
+ isActive: activeTool.id === toolType.id,
219
231
  setActive: setActiveTool
220
232
  });
221
233
  })), isPictureUrlModalOpen && /*#__PURE__*/_react["default"].createElement(_PictureUrlInput["default"], {
@@ -21,8 +21,6 @@ var _Panel = _interopRequireDefault(require("../common/Panel"));
21
21
 
22
22
  var _react2 = require("@linaria/react");
23
23
 
24
- var _style = require("../../utils/style");
25
-
26
24
  var _Tool = _interopRequireDefault(require("./Tool"));
27
25
 
28
26
  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,20 +37,24 @@ var StyledRelative = /*#__PURE__*/(0, _react2.styled)("div")({
39
37
  });
40
38
 
41
39
  var ToolbarGroup = function ToolbarGroup(_ref) {
42
- var _group$tools, _ref2;
40
+ var _group$toolsType, _ref2;
43
41
 
44
42
  var activeTool = _ref.activeTool,
45
43
  alignment = _ref.alignment,
46
44
  group = _ref.group,
47
45
  _ref$disabled = _ref.disabled,
48
46
  disabled = _ref$disabled === void 0 ? false : _ref$disabled,
49
- setActiveToolFromProps = _ref.setActiveTool;
47
+ setActiveToolFromId = _ref.setActiveToolFromId;
50
48
 
51
49
  var _useState = (0, _react.useState)(false),
52
50
  _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
53
51
  isOpen = _useState2[0],
54
52
  setIsOpen = _useState2[1];
55
53
 
54
+ var _useTransition = (0, _react.useTransition)(),
55
+ _useTransition2 = (0, _slicedToArray2["default"])(_useTransition, 2),
56
+ startTransition = _useTransition2[1];
57
+
56
58
  var _useState3 = (0, _react.useState)(undefined),
57
59
  _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
58
60
  localActiveTool = _useState4[0],
@@ -60,7 +62,7 @@ var ToolbarGroup = function ToolbarGroup(_ref) {
60
62
 
61
63
  var setActiveTool = function setActiveTool(tool) {
62
64
  setLocalActiveTool(tool);
63
- setActiveToolFromProps(tool);
65
+ setActiveToolFromId(tool.id);
64
66
  };
65
67
 
66
68
  (0, _react.useEffect)(function () {
@@ -70,47 +72,44 @@ var ToolbarGroup = function ToolbarGroup(_ref) {
70
72
  setIsOpen(false);
71
73
  };
72
74
 
73
- var timeoutId = setTimeout(function () {
74
- //TODO find a better fix than settimeout for react18
75
- document.addEventListener('click', closePanel);
76
- }, 0);
75
+ document.addEventListener('click', closePanel);
77
76
  return function () {
78
- clearTimeout(timeoutId);
79
77
  document.removeEventListener('click', closePanel);
80
78
  };
81
79
  }, [isOpen]);
82
80
 
83
- if (!_fp["default"].isObject(group)) {
81
+ if ('type' in group) {
84
82
  return /*#__PURE__*/_react["default"].createElement(_Tool["default"], {
85
83
  disabled: disabled,
86
84
  type: group,
87
- lib: group,
88
- img: (0, _style.getShapePicture)(group),
89
- isActive: activeTool === group,
85
+ img: group.icon,
86
+ isActive: activeTool.id === group.id,
90
87
  setActive: setActiveTool
91
88
  });
92
89
  }
93
90
 
94
- if (_fp["default"].isEmpty(group.tools)) return null;
91
+ if (_fp["default"].isEmpty(group.toolsType)) return null;
95
92
 
96
- if (((_group$tools = group.tools) === null || _group$tools === void 0 ? void 0 : _group$tools.length) === 1) {
93
+ if (((_group$toolsType = group.toolsType) === null || _group$toolsType === void 0 ? void 0 : _group$toolsType.length) === 1) {
97
94
  return /*#__PURE__*/_react["default"].createElement(_Tool["default"], {
98
95
  disabled: disabled,
99
- type: group.tools[0],
100
- lib: group.tools[0],
101
- img: (0, _style.getShapePicture)(group.tools[0]),
102
- isActive: activeTool === group.tools[0],
96
+ type: group.toolsType[0],
97
+ img: group.toolsType[0].icon,
98
+ isActive: activeTool.id === group.toolsType[0].id,
103
99
  setActive: setActiveTool
104
100
  });
105
101
  }
106
102
 
107
- var isActive = _fp["default"].includes(activeTool, group === null || group === void 0 ? void 0 : group.tools);
108
-
109
- var groupIcon = (_ref2 = localActiveTool ? (0, _style.getShapePicture)(localActiveTool) : group.tools && group.tools[0] && (0, _style.getShapePicture)(group.tools[0])) !== null && _ref2 !== void 0 ? _ref2 : group.title;
103
+ var isActive = _fp["default"].find({
104
+ type: activeTool.type
105
+ }, group === null || group === void 0 ? void 0 : group.toolsType) !== undefined;
106
+ var groupIcon = (_ref2 = localActiveTool ? localActiveTool.icon : group.toolsType && group.toolsType[0] && group.toolsType[0].icon) !== null && _ref2 !== void 0 ? _ref2 : group.title;
110
107
 
111
108
  var openPanel = function openPanel() {
112
- if (localActiveTool) setActiveToolFromProps(localActiveTool);else group.tools && group.tools[0] && setActiveTool(group.tools[0]);
113
- setIsOpen(true); // group.tools && group.tools[0] && setActiveTool(group.tools[0])
109
+ if (localActiveTool) setActiveToolFromId(localActiveTool.id);else group.toolsType && group.toolsType[0] && setActiveTool(group.toolsType[0]);
110
+ startTransition(function () {
111
+ setIsOpen(true);
112
+ });
114
113
  };
115
114
 
116
115
  return /*#__PURE__*/_react["default"].createElement(StyledRelative, null, /*#__PURE__*/_react["default"].createElement(_Button["default"], {
@@ -122,17 +121,16 @@ var ToolbarGroup = function ToolbarGroup(_ref) {
122
121
  }), isOpen && /*#__PURE__*/_react["default"].createElement(StyledPanel, {
123
122
  vertical: group.vertical,
124
123
  alignment: alignment
125
- }, _fp["default"].map(function (toolType) {
124
+ }, group.toolsType.map(function (toolType, i) {
126
125
  return /*#__PURE__*/_react["default"].createElement(_Tool["default"], {
127
126
  disabled: disabled,
128
- key: toolType,
127
+ key: i,
129
128
  type: toolType,
130
- lib: toolType,
131
- img: (0, _style.getShapePicture)(toolType),
132
- isActive: activeTool === toolType,
129
+ img: toolType.icon,
130
+ isActive: activeTool.id === toolType.id,
133
131
  setActive: setActiveTool
134
132
  });
135
- }, group.tools)));
133
+ })));
136
134
  };
137
135
 
138
136
  var _default = ToolbarGroup;
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.visibilityOffIcon = exports.visibilityIcon = exports.unlockedIcon = exports.undoIcon = exports.trashIcon = exports.textIcon = exports.squareIcon = exports.shapesIcon = exports.selectIcon = exports.saveIcon = exports.redoIcon = exports.recIcon = exports.publicIcon = exports.polygonIcon = exports.pictureIcon = exports.penIcon = exports.paletteIcon = exports.paintIcon = exports.openFileIcon = exports.opacityIcon = exports.menuIcon = exports.lockedIcon = exports.layersIcon = exports.gridOnIcon = exports.gridOffIcon = exports.gestureIcon = exports.exportFileIcon = exports.encodedTransparentIcon = exports.ellipseIcon = exports.dragIcon = exports.dotsIcon = exports.curveIcon = exports.clearIcon = exports.circleIcon = exports.brushIcon = exports.arrowIcon = void 0;
6
+ exports.visibilityOffIcon = exports.visibilityIcon = exports.unlockedIcon = exports.undoIcon = exports.trashIcon = exports.textIcon = exports.squareIcon = exports.shapesIcon = exports.selectIcon = exports.saveIcon = exports.redoIcon = exports.recIcon = exports.publicIcon = exports.polygonIcon = exports.pictureIcon = exports.penIcon = exports.paletteIcon = exports.paintIcon = exports.openFileIcon = exports.opacityIcon = exports.menuIcon = exports.lockedIcon = exports.layersIcon = exports.italicIcon = exports.gridOnIcon = exports.gridOffIcon = exports.gestureIcon = exports.exportFileIcon = exports.encodedTransparentIcon = exports.ellipseIcon = exports.dragIcon = exports.dotsIcon = exports.curveIcon = exports.clearIcon = exports.circleIcon = exports.brushIcon = exports.boldIcon = exports.arrowIcon = void 0;
7
7
  var brushIcon = '<svg><path d="M5.146 17.5Q4.146 17.5 3.208 17Q2.271 16.5 1.667 15.708Q2.208 15.75 2.802 15.344Q3.396 14.938 3.396 14.104Q3.396 13.042 4.135 12.292Q4.875 11.542 5.958 11.542Q7.021 11.542 7.76 12.292Q8.5 13.042 8.5 14.104Q8.5 15.5 7.51 16.5Q6.521 17.5 5.146 17.5ZM9.917 12.5 7.562 10.146 14.917 2.729Q15.146 2.5 15.469 2.5Q15.792 2.5 16.021 2.729L17.271 3.958Q17.5 4.188 17.5 4.531Q17.5 4.875 17.271 5.125Z"/></svg>';
8
8
  exports.brushIcon = brushIcon;
9
9
  var squareIcon = '<svg><path d="M2.5 17.5V2.5H17.5V17.5ZM4.25 15.75H15.75V4.25H4.25ZM4.25 15.75V4.25V15.75Z"/></svg>';
@@ -77,4 +77,8 @@ exports.ellipseIcon = ellipseIcon;
77
77
  var selectIcon = '<svg><path d="M8.854 17.5Q8.5 17.5 8.188 17.354Q7.875 17.208 7.604 16.958L3.271 12.646L4.5 11.375Q4.812 11.042 5.24 10.906Q5.667 10.771 6.104 10.875L7.479 11.188V4.667Q7.479 3.771 8.115 3.135Q8.75 2.5 9.646 2.5Q10.542 2.5 11.177 3.135Q11.812 3.771 11.812 4.667V8.062H12.188Q12.333 8.062 12.458 8.094Q12.583 8.125 12.708 8.188L15.812 9.708Q16.292 9.938 16.542 10.406Q16.792 10.875 16.688 11.417L15.917 16.042Q15.812 16.688 15.323 17.094Q14.833 17.5 14.167 17.5ZM8.854 15.75H14.167L14.958 11.229Q14.958 11.229 14.958 11.229Q14.958 11.229 14.958 11.229L11.5 9.562H10.062V4.667Q10.062 4.479 9.948 4.365Q9.833 4.25 9.646 4.25Q9.458 4.25 9.344 4.365Q9.229 4.479 9.229 4.667V13.333L5.708 12.604ZM8.854 15.75H9.229Q9.229 15.75 9.344 15.75Q9.458 15.75 9.646 15.75Q9.833 15.75 9.948 15.75Q10.062 15.75 10.062 15.75H11.521H14.167Q14.167 15.75 14.167 15.75Q14.167 15.75 14.167 15.75Z"/></svg>';
78
78
  exports.selectIcon = selectIcon;
79
79
  var curveIcon = '<svg><path d="M7.521 17.5Q6.125 17.5 5.146 16.51Q4.167 15.521 4.167 14.125V7.417Q3.438 7.125 2.969 6.49Q2.5 5.854 2.5 5.042Q2.5 3.979 3.24 3.24Q3.979 2.5 5.042 2.5Q6.104 2.5 6.844 3.24Q7.583 3.979 7.583 5.042Q7.583 5.854 7.115 6.49Q6.646 7.125 5.917 7.417V14.125Q5.917 14.792 6.385 15.271Q6.854 15.75 7.521 15.75Q8.188 15.75 8.656 15.271Q9.125 14.792 9.125 14.125V5.875Q9.125 4.479 10.104 3.49Q11.083 2.5 12.479 2.5Q13.875 2.5 14.854 3.49Q15.833 4.479 15.833 5.875V12.583Q16.562 12.875 17.031 13.51Q17.5 14.146 17.5 14.958Q17.5 16.021 16.76 16.76Q16.021 17.5 14.958 17.5Q13.896 17.5 13.156 16.76Q12.417 16.021 12.417 14.958Q12.417 14.146 12.885 13.5Q13.354 12.854 14.083 12.583V5.875Q14.083 5.208 13.615 4.729Q13.146 4.25 12.479 4.25Q11.812 4.25 11.344 4.729Q10.875 5.208 10.875 5.875V14.125Q10.875 15.521 9.896 16.51Q8.917 17.5 7.521 17.5Z"/></svg>';
80
- exports.curveIcon = curveIcon;
80
+ exports.curveIcon = curveIcon;
81
+ var boldIcon = '<svg><path d="M5.833 15V3.333H10.375Q11.812 3.333 12.885 4.156Q13.958 4.979 13.958 6.375Q13.958 7.375 13.49 7.969Q13.021 8.562 12.396 8.875V9.042Q13.312 9.354 13.844 10.021Q14.375 10.688 14.375 11.75Q14.375 13.312 13.229 14.156Q12.083 15 10.5 15ZM8.125 8.042H10.188Q10.854 8.042 11.302 7.656Q11.75 7.271 11.75 6.708Q11.75 6.167 11.302 5.771Q10.854 5.375 10.188 5.375H8.125ZM8.125 12.917H10.354Q11.167 12.917 11.625 12.51Q12.083 12.104 12.083 11.458Q12.083 10.812 11.625 10.406Q11.167 10 10.354 10H8.125Z"/></svg>';
82
+ exports.boldIcon = boldIcon;
83
+ var italicIcon = '<svg><path d="M4.167 16.667V14.083H6.979L10.229 5.917H7.5V3.333H15.833V5.917H13.021L9.771 14.083H12.5V16.667Z"/></svg>';
84
+ exports.italicIcon = italicIcon;
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.STYLE_ZINDEX_SNACKBAR = exports.STYLE_ZINDEX_PANEL = exports.STYLE_ZINDEX_LOADING = exports.STYLE_ZINDEX_APP = exports.STYLE_LINE_WITH_ARROW = exports.STYLE_LINE_DASH = exports.STYLE_FONT_DEFAULT = exports.STYLE_FONTS = exports.STYLE_COLORS = exports.POLYGON_POINTS_VALUES = exports.LINE_DASH_DATA = exports.CURVE_POINTS_VALUES = void 0;
6
+ exports.STYLE_ZINDEX_SNACKBAR = exports.STYLE_ZINDEX_PANEL = exports.STYLE_ZINDEX_LOADING = exports.STYLE_ZINDEX_APP = exports.STYLE_LINE_WITH_ARROW = exports.STYLE_LINE_DASH = exports.STYLE_FONT_SIZE_DEFAULT = exports.STYLE_FONT_DEFAULT = exports.STYLE_FONTS = exports.STYLE_COLORS = exports.POLYGON_POINTS_VALUES = exports.LINE_DASH_DATA = exports.CURVE_POINTS_VALUES = void 0;
7
7
  var POLYGON_POINTS_VALUES = [3, 4, 5, 6, 7, 8, 9, 10];
8
8
  exports.POLYGON_POINTS_VALUES = POLYGON_POINTS_VALUES;
9
9
  var CURVE_POINTS_VALUES = [3, 4, 5, 6, 7, 8, 9];
@@ -20,6 +20,8 @@ var STYLE_FONTS = ['arial', 'serif', 'monospace'];
20
20
  exports.STYLE_FONTS = STYLE_FONTS;
21
21
  var STYLE_FONT_DEFAULT = 'serif';
22
22
  exports.STYLE_FONT_DEFAULT = STYLE_FONT_DEFAULT;
23
+ var STYLE_FONT_SIZE_DEFAULT = 36;
24
+ exports.STYLE_FONT_SIZE_DEFAULT = STYLE_FONT_SIZE_DEFAULT;
23
25
  var STYLE_ZINDEX_APP = 1;
24
26
  exports.STYLE_ZINDEX_APP = STYLE_ZINDEX_APP;
25
27
  var STYLE_ZINDEX_LOADING = 2;