@yorab/react-paint 0.2.2 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Changelog.md +24 -0
- package/LICENSE.txt +21 -0
- package/README.md +6 -89
- package/dist/components/App.js +125 -102
- package/dist/components/Canvas.js +17 -14
- package/dist/components/settings/LayoutButton.js +3 -3
- package/dist/components/settings/Layouts.js +6 -19
- package/dist/components/settings/SettingsBar.js +3 -3
- package/dist/components/toolbox/EditTextBox.js +3 -2
- package/dist/components/toolbox/MenuGroup.js +1 -0
- package/dist/components/toolbox/PictureUrlInput.js +8 -7
- package/dist/hooks/useDrawableCanvas.js +19 -17
- package/dist/hooks/useResizeObserver.js +40 -0
- package/dist/hooks/useShapes.js +12 -8
- package/dist/styles.css +16 -17
- package/dist/utils/data.js +71 -19
- package/dist/utils/draw.js +53 -44
- package/dist/utils/file.js +26 -60
- package/dist/utils/intersect.js +18 -14
- package/dist/utils/selection.js +3 -3
- package/dist/utils/transform.js +18 -2
- package/package.json +6 -7
- package/dist/components/App.d.ts +0 -20
- package/dist/components/Canvas.d.ts +0 -28
- package/dist/components/common/Button.d.ts +0 -14
- package/dist/components/common/Loading.d.ts +0 -6
- package/dist/components/common/Modal.d.ts +0 -8
- package/dist/components/common/Panel.d.ts +0 -10
- package/dist/components/common/Snackbar.d.ts +0 -7
- package/dist/components/settings/ColorField.d.ts +0 -12
- package/dist/components/settings/DeleteButton.d.ts +0 -9
- package/dist/components/settings/FontFamilyField.d.ts +0 -10
- package/dist/components/settings/LayoutButton.d.ts +0 -8
- package/dist/components/settings/Layouts.d.ts +0 -18
- package/dist/components/settings/LineArrowField.d.ts +0 -10
- package/dist/components/settings/LineTypeField.d.ts +0 -14
- package/dist/components/settings/PointsNumberField.d.ts +0 -11
- package/dist/components/settings/RangeField.d.ts +0 -16
- package/dist/components/settings/SelectField.d.ts +0 -16
- package/dist/components/settings/SettingsBar.d.ts +0 -16
- package/dist/components/toolbox/EditTextBox.d.ts +0 -10
- package/dist/components/toolbox/LoadFileTool.d.ts +0 -11
- package/dist/components/toolbox/MenuGroup.d.ts +0 -23
- package/dist/components/toolbox/PictureUrlInput.d.ts +0 -7
- package/dist/components/toolbox/Tool.d.ts +0 -13
- package/dist/components/toolbox/Toolbar.d.ts +0 -20
- package/dist/components/toolbox/ToolbarGroup.d.ts +0 -18
- package/dist/constants/draw.d.ts +0 -2
- package/dist/constants/draw.js +0 -10
- package/dist/constants/icons.d.ts +0 -36
- package/dist/constants/shapes.d.ts +0 -5
- package/dist/constants/snackbar.d.ts +0 -11
- package/dist/constants/style.d.ts +0 -12
- package/dist/hooks/useComponent.d.ts +0 -9
- package/dist/hooks/useDrag.d.ts +0 -15
- package/dist/hooks/useDrawableCanvas.d.ts +0 -30
- package/dist/hooks/useKeyboard.d.ts +0 -15
- package/dist/hooks/useShapes.d.ts +0 -22
- package/dist/hooks/useSnackbar.d.ts +0 -16
- package/dist/schemas/drawableShape.json +0 -1021
- package/dist/types/Mode.d.ts +0 -51
- package/dist/types/Shapes.d.ts +0 -122
- package/dist/types/keyboard.d.ts +0 -15
- package/dist/utils/data.d.ts +0 -4
- package/dist/utils/draw.d.ts +0 -18
- package/dist/utils/file.d.ts +0 -33
- package/dist/utils/intersect.d.ts +0 -8
- package/dist/utils/selection.d.ts +0 -7
- package/dist/utils/shapeData.d.ts +0 -5
- package/dist/utils/string.d.ts +0 -3
- package/dist/utils/style.d.ts +0 -2
- package/dist/utils/toolbar.d.ts +0 -12
- package/dist/utils/transform.d.ts +0 -271
|
@@ -25,8 +25,6 @@ var _Mode = require("../types/Mode");
|
|
|
25
25
|
|
|
26
26
|
var _transform = require("../utils/transform");
|
|
27
27
|
|
|
28
|
-
var _draw2 = require("../constants/draw");
|
|
29
|
-
|
|
30
28
|
var _EditTextBox = _interopRequireDefault(require("./toolbox/EditTextBox"));
|
|
31
29
|
|
|
32
30
|
var _useDrawableCanvas2 = _interopRequireDefault(require("../hooks/useDrawableCanvas"));
|
|
@@ -41,19 +39,23 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
|
|
|
41
39
|
|
|
42
40
|
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; }
|
|
43
41
|
|
|
44
|
-
var drawCanvas = function drawCanvas(drawCtx, selectionCtx, selectionMode,
|
|
42
|
+
var drawCanvas = function drawCanvas(drawCtx, selectionCtx, selectionMode, canvasSize, activeTool, canvasOffset, shapes, selectedShape) {
|
|
43
|
+
var width = canvasSize.width,
|
|
44
|
+
height = canvasSize.height,
|
|
45
|
+
scaleRatio = canvasSize.scaleRatio;
|
|
45
46
|
drawCtx.clearRect(0, 0, width, height);
|
|
46
47
|
selectionCtx.clearRect(0, 0, width, height);
|
|
47
48
|
|
|
48
49
|
for (var i = shapes.length - 1; i >= 0; i--) {
|
|
49
50
|
if (selectionMode.mode !== _Mode.SelectionModeLib.textedition || shapes[i] !== selectedShape) {
|
|
50
|
-
(0, _draw.drawShape)(drawCtx, shapes[i], canvasOffset);
|
|
51
|
+
(0, _draw.drawShape)(drawCtx, shapes[i], scaleRatio, canvasOffset);
|
|
51
52
|
}
|
|
52
53
|
}
|
|
53
54
|
|
|
54
55
|
selectedShape && activeTool !== _Shapes.ShapeEnum.brush && (0, _draw.drawSelection)({
|
|
55
56
|
ctx: selectionCtx,
|
|
56
57
|
shape: selectedShape,
|
|
58
|
+
scaleRatio: scaleRatio,
|
|
57
59
|
canvasOffset: canvasOffset,
|
|
58
60
|
withAnchors: selectionMode.mode !== _Mode.SelectionModeLib.textedition
|
|
59
61
|
});
|
|
@@ -87,8 +89,7 @@ var Canvas = /*#__PURE__*/_react["default"].forwardRef(function (_ref2, ref) {
|
|
|
87
89
|
canGrow = _ref2.canGrow,
|
|
88
90
|
_ref2$disabled = _ref2.disabled,
|
|
89
91
|
disabled = _ref2$disabled === void 0 ? false : _ref2$disabled,
|
|
90
|
-
|
|
91
|
-
height = _ref2.height,
|
|
92
|
+
canvasSize = _ref2.canvasSize,
|
|
92
93
|
shapes = _ref2.shapes,
|
|
93
94
|
addShape = _ref2.addShape,
|
|
94
95
|
updateSingleShape = _ref2.updateSingleShape,
|
|
@@ -115,13 +116,12 @@ var Canvas = /*#__PURE__*/_react["default"].forwardRef(function (_ref2, ref) {
|
|
|
115
116
|
var _useDrawableCanvas = (0, _useDrawableCanvas2["default"])({
|
|
116
117
|
disabled: disabled,
|
|
117
118
|
addShape: addShape,
|
|
119
|
+
canvasSize: canvasSize,
|
|
118
120
|
drawCanvasRef: drawCanvasRef,
|
|
119
121
|
setActiveTool: setActiveTool,
|
|
120
122
|
shapes: shapes,
|
|
121
123
|
defaultConf: defaultConf,
|
|
122
124
|
selectionMode: selectionMode,
|
|
123
|
-
width: width,
|
|
124
|
-
height: height,
|
|
125
125
|
activeTool: activeTool,
|
|
126
126
|
isInsideComponent: isInsideComponent,
|
|
127
127
|
setCanvasOffset: setCanvasOffset,
|
|
@@ -160,23 +160,26 @@ var Canvas = /*#__PURE__*/_react["default"].forwardRef(function (_ref2, ref) {
|
|
|
160
160
|
|
|
161
161
|
var drawCtx = (_drawCanvasRef$curren2 = drawCanvasRef.current) === null || _drawCanvasRef$curren2 === void 0 ? void 0 : _drawCanvasRef$curren2.getContext('2d');
|
|
162
162
|
var selectionCtx = (_selectionCanvasRef$c = selectionCanvasRef.current) === null || _selectionCanvasRef$c === void 0 ? void 0 : _selectionCanvasRef$c.getContext('2d');
|
|
163
|
-
drawCtx && selectionCtx &&
|
|
164
|
-
|
|
163
|
+
drawCtx && selectionCtx && window.requestAnimationFrame(function () {
|
|
164
|
+
return drawCanvas(drawCtx, selectionCtx, selectionMode, canvasSize, activeTool, canvasOffset, shapes, selectedShape);
|
|
165
|
+
});
|
|
166
|
+
}, [shapes, selectionMode, selectedShape, activeTool, canvasOffset, canvasSize]);
|
|
165
167
|
return /*#__PURE__*/_react["default"].createElement(StyledCanvasBox, null, /*#__PURE__*/_react["default"].createElement(StyledCanvasContainer, {
|
|
166
168
|
"data-grid": withGrid,
|
|
167
169
|
"data-grow": canGrow
|
|
168
170
|
}, /*#__PURE__*/_react["default"].createElement(StyledDrawCanvas, {
|
|
169
171
|
ref: drawCanvasRef,
|
|
170
172
|
"data-grow": canGrow,
|
|
171
|
-
width: width,
|
|
172
|
-
height: height
|
|
173
|
+
width: canvasSize.width,
|
|
174
|
+
height: canvasSize.height
|
|
173
175
|
}), /*#__PURE__*/_react["default"].createElement(StyledSelectionCanvas, {
|
|
174
176
|
ref: selectionCanvasRef,
|
|
175
|
-
width: width,
|
|
176
|
-
height: height,
|
|
177
|
+
width: canvasSize.width,
|
|
178
|
+
height: canvasSize.height,
|
|
177
179
|
"data-grow": canGrow,
|
|
178
180
|
cursor: activeTool !== _Shapes.ToolEnum.selection && activeTool !== _Shapes.ToolEnum.move || hoverMode.mode === _Mode.SelectionModeLib.resize ? 'crosshair' : activeTool === _Shapes.ToolEnum.move || hoverMode.mode === _Mode.SelectionModeLib.translate ? 'move' : hoverMode.mode === _Mode.SelectionModeLib.rotate ? 'grab' : 'default'
|
|
179
181
|
}), selectionMode.mode === _Mode.SelectionModeLib.textedition && (selectedShape === null || selectedShape === void 0 ? void 0 : selectedShape.type) === _Shapes.ShapeEnum.text && /*#__PURE__*/_react["default"].createElement(_EditTextBox["default"], {
|
|
182
|
+
scaleRatio: canvasSize.scaleRatio,
|
|
180
183
|
disabled: disabled,
|
|
181
184
|
shape: selectedShape,
|
|
182
185
|
defaultValue: selectionMode.defaultValue,
|
|
@@ -21,12 +21,12 @@ var StyleToggleLayoutButton = /*#__PURE__*/(0, _react2.styled)(_Button["default"
|
|
|
21
21
|
});
|
|
22
22
|
|
|
23
23
|
var LayoutButton = function LayoutButton(_ref) {
|
|
24
|
-
var
|
|
24
|
+
var layersManipulation = _ref.layersManipulation,
|
|
25
25
|
disabled = _ref.disabled,
|
|
26
26
|
toggleLayoutPanel = _ref.toggleLayoutPanel;
|
|
27
27
|
return /*#__PURE__*/_react["default"].createElement(StyleToggleLayoutButton, {
|
|
28
|
-
title: "Toggle
|
|
29
|
-
"data-hidden":
|
|
28
|
+
title: "Toggle layers panel",
|
|
29
|
+
"data-hidden": !layersManipulation,
|
|
30
30
|
disabled: disabled,
|
|
31
31
|
onClick: toggleLayoutPanel,
|
|
32
32
|
icon: _icons.layersIcon
|
|
@@ -133,16 +133,18 @@ var Layout = function Layout(_ref) {
|
|
|
133
133
|
dangerouslySetInnerHTML: {
|
|
134
134
|
__html: (0, _style.getShapePicture)(shape.type)
|
|
135
135
|
}
|
|
136
|
-
}), /*#__PURE__*/_react["default"].createElement(StyledSeparator, null), /*#__PURE__*/_react["default"].createElement(StyledVisibleButton, {
|
|
136
|
+
}), /*#__PURE__*/_react["default"].createElement("span", null, shape.id), /*#__PURE__*/_react["default"].createElement(StyledSeparator, null), /*#__PURE__*/_react["default"].createElement(StyledVisibleButton, {
|
|
137
137
|
title: shape.visible ? 'Hide' : 'Show',
|
|
138
138
|
"data-visible": shape.visible !== false,
|
|
139
139
|
disabled: disabled,
|
|
140
|
+
selected: selected,
|
|
140
141
|
onClick: onToggleShapeVisibility,
|
|
141
142
|
icon: shape.visible === false ? _icons.visibilityOffIcon : _icons.visibilityIcon
|
|
142
143
|
}), /*#__PURE__*/_react["default"].createElement(StyledLockedButton, {
|
|
143
144
|
title: shape.locked ? 'Locked' : 'Unlocked',
|
|
144
145
|
"data-locked": !!shape.locked,
|
|
145
146
|
disabled: disabled,
|
|
147
|
+
selected: selected,
|
|
146
148
|
onClick: onToggleShapeLock,
|
|
147
149
|
icon: shape.locked ? _icons.lockedIcon : _icons.unlockedIcon
|
|
148
150
|
}));
|
|
@@ -160,7 +162,6 @@ var Layouts = function Layouts(_ref2) {
|
|
|
160
162
|
selectedShape = _ref2.selectedShape,
|
|
161
163
|
moveShapes = _ref2.moveShapes,
|
|
162
164
|
selectShape = _ref2.selectShape,
|
|
163
|
-
withLayouts = _ref2.withLayouts,
|
|
164
165
|
isLayoutPanelShown = _ref2.isLayoutPanelShown;
|
|
165
166
|
|
|
166
167
|
var _useState = (0, _react.useState)(undefined),
|
|
@@ -174,22 +175,8 @@ var Layouts = function Layouts(_ref2) {
|
|
|
174
175
|
});
|
|
175
176
|
};
|
|
176
177
|
|
|
177
|
-
return isLayoutPanelShown ?
|
|
178
|
-
|
|
179
|
-
key: shape.id,
|
|
180
|
-
shape: shape,
|
|
181
|
-
disabled: disabled,
|
|
182
|
-
layoutDragging: layoutDragging,
|
|
183
|
-
setLayoutDragging: setLayoutDragging,
|
|
184
|
-
selected: (selectedShape === null || selectedShape === void 0 ? void 0 : selectedShape.id) === shape.id,
|
|
185
|
-
handleSelect: selectShape,
|
|
186
|
-
handleRemove: removeShape,
|
|
187
|
-
onMoveShapes: moveShapes,
|
|
188
|
-
toggleShapeVisibility: toggleShapeVisibility,
|
|
189
|
-
toggleShapeLock: toggleShapeLock
|
|
190
|
-
});
|
|
191
|
-
}, shapes)) : /*#__PURE__*/_react["default"].createElement(StyledPanelLayouts, {
|
|
192
|
-
title: "Layouts",
|
|
178
|
+
return isLayoutPanelShown ? /*#__PURE__*/_react["default"].createElement(StyledPanelLayouts, {
|
|
179
|
+
title: "Layers",
|
|
193
180
|
alignment: "right"
|
|
194
181
|
}, /*#__PURE__*/_react["default"].createElement(StyledScrollingContent, null, /*#__PURE__*/_react["default"].createElement(StyledGridButton, {
|
|
195
182
|
title: withGrid ? 'Grid on' : 'Grid off',
|
|
@@ -197,7 +184,7 @@ var Layouts = function Layouts(_ref2) {
|
|
|
197
184
|
disabled: disabled,
|
|
198
185
|
onClick: onToggleGrid,
|
|
199
186
|
icon: withGrid ? _icons.gridOnIcon : _icons.gridOffIcon
|
|
200
|
-
}, "Toggle grid"), /*#__PURE__*/_react["default"].createElement("hr", null), /*#__PURE__*/_react["default"].createElement(StyledLayouts, null, shapes.length === 0 ? /*#__PURE__*/_react["default"].createElement(StyledPlaceholder, null, "No
|
|
187
|
+
}, "Toggle grid"), /*#__PURE__*/_react["default"].createElement("hr", null), /*#__PURE__*/_react["default"].createElement(StyledLayouts, null, shapes.length === 0 ? /*#__PURE__*/_react["default"].createElement(StyledPlaceholder, null, "No layer yet") : _fp["default"].map(function (shape) {
|
|
201
188
|
return /*#__PURE__*/_react["default"].createElement(Layout, {
|
|
202
189
|
key: shape.id,
|
|
203
190
|
shape: shape,
|
|
@@ -63,7 +63,7 @@ var SettingsBar = function SettingsBar(_ref) {
|
|
|
63
63
|
|
|
64
64
|
var _ref$disabled = _ref.disabled,
|
|
65
65
|
disabled = _ref$disabled === void 0 ? false : _ref$disabled,
|
|
66
|
-
|
|
66
|
+
layersManipulation = _ref.layersManipulation,
|
|
67
67
|
toggleLayoutPanel = _ref.toggleLayoutPanel,
|
|
68
68
|
activeTool = _ref.activeTool,
|
|
69
69
|
selectedShape = _ref.selectedShape,
|
|
@@ -251,8 +251,8 @@ var SettingsBar = function SettingsBar(_ref) {
|
|
|
251
251
|
field: "style.globalAlpha",
|
|
252
252
|
value: (_defaultConf$style7 = defaultConf.style) === null || _defaultConf$style7 === void 0 ? void 0 : _defaultConf$style7.globalAlpha,
|
|
253
253
|
valueChanged: handleShapeStyleChange
|
|
254
|
-
})), /*#__PURE__*/_react["default"].createElement(StyledSeparator, null), /*#__PURE__*/_react["default"].createElement(_LayoutButton["default"], {
|
|
255
|
-
|
|
254
|
+
})), /*#__PURE__*/_react["default"].createElement(StyledSeparator, null), layersManipulation && /*#__PURE__*/_react["default"].createElement(_LayoutButton["default"], {
|
|
255
|
+
layersManipulation: layersManipulation,
|
|
256
256
|
disabled: disabled,
|
|
257
257
|
toggleLayoutPanel: toggleLayoutPanel
|
|
258
258
|
}));
|
|
@@ -53,6 +53,7 @@ var EditTextBox = function EditTextBox(_ref5) {
|
|
|
53
53
|
|
|
54
54
|
var _ref5$disabled = _ref5.disabled,
|
|
55
55
|
disabled = _ref5$disabled === void 0 ? false : _ref5$disabled,
|
|
56
|
+
scaleRatio = _ref5.scaleRatio,
|
|
56
57
|
shape = _ref5.shape,
|
|
57
58
|
defaultValue = _ref5.defaultValue,
|
|
58
59
|
updateValue = _ref5.updateValue;
|
|
@@ -76,8 +77,8 @@ var EditTextBox = function EditTextBox(_ref5) {
|
|
|
76
77
|
}, [shape]);
|
|
77
78
|
return /*#__PURE__*/_react["default"].createElement(StyledEditBox, {
|
|
78
79
|
ref: ref,
|
|
79
|
-
transform: "translate3D(".concat(position[0], "px, ").concat(position[1], "px, 0) rotate(").concat((0, _transform.radiansToDegrees)(shape.rotation), "deg)"),
|
|
80
|
-
fontsize: shape.fontSize,
|
|
80
|
+
transform: "translate3D(".concat(position[0] * scaleRatio, "px, ").concat(position[1] * scaleRatio, "px, 0) rotate(").concat((0, _transform.radiansToDegrees)(shape.rotation), "deg)"),
|
|
81
|
+
fontsize: shape.fontSize * scaleRatio,
|
|
81
82
|
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',
|
|
82
83
|
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,
|
|
83
84
|
contentEditable: !disabled,
|
|
@@ -36,7 +36,7 @@ var PictureUrlModal = function PictureUrlModal(_ref) {
|
|
|
36
36
|
var pictureUrlInputRef = (0, _react.useRef)(null);
|
|
37
37
|
|
|
38
38
|
var addPictureFromUrl = /*#__PURE__*/function () {
|
|
39
|
-
var _ref2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
39
|
+
var _ref2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(e) {
|
|
40
40
|
var _pictureUrlInputRef$c;
|
|
41
41
|
|
|
42
42
|
var url;
|
|
@@ -44,23 +44,24 @@ var PictureUrlModal = function PictureUrlModal(_ref) {
|
|
|
44
44
|
while (1) {
|
|
45
45
|
switch (_context.prev = _context.next) {
|
|
46
46
|
case 0:
|
|
47
|
+
e.preventDefault();
|
|
47
48
|
url = (_pictureUrlInputRef$c = pictureUrlInputRef.current) === null || _pictureUrlInputRef$c === void 0 ? void 0 : _pictureUrlInputRef$c.value;
|
|
48
49
|
|
|
49
50
|
if (!url) {
|
|
50
|
-
_context.next =
|
|
51
|
+
_context.next = 6;
|
|
51
52
|
break;
|
|
52
53
|
}
|
|
53
54
|
|
|
54
|
-
_context.next =
|
|
55
|
+
_context.next = 5;
|
|
55
56
|
return addPicture(url);
|
|
56
57
|
|
|
57
|
-
case
|
|
58
|
+
case 5:
|
|
58
59
|
togglePictureUrlModal();
|
|
59
60
|
|
|
60
|
-
case
|
|
61
|
+
case 6:
|
|
61
62
|
return _context.abrupt("return");
|
|
62
63
|
|
|
63
|
-
case
|
|
64
|
+
case 7:
|
|
64
65
|
case "end":
|
|
65
66
|
return _context.stop();
|
|
66
67
|
}
|
|
@@ -68,7 +69,7 @@ var PictureUrlModal = function PictureUrlModal(_ref) {
|
|
|
68
69
|
}, _callee);
|
|
69
70
|
}));
|
|
70
71
|
|
|
71
|
-
return function addPictureFromUrl() {
|
|
72
|
+
return function addPictureFromUrl(_x) {
|
|
72
73
|
return _ref2.apply(this, arguments);
|
|
73
74
|
};
|
|
74
75
|
}();
|
|
@@ -23,23 +23,21 @@ var _Mode = require("../types/Mode");
|
|
|
23
23
|
|
|
24
24
|
var _transform = require("../utils/transform");
|
|
25
25
|
|
|
26
|
-
var _draw = require("../constants/draw");
|
|
27
|
-
|
|
28
26
|
var _data = require("../utils/data");
|
|
29
27
|
|
|
30
|
-
var handleMove = function handleMove(e, canvasRef, activeTool, canvasOffset, selectedShape, selectionMode, canvasOffsetStartPosition, width, height, setHoverMode, updateSingleShape, setCanvasOffset, setSelectedShape) {
|
|
28
|
+
var handleMove = function handleMove(e, canvasRef, activeTool, canvasOffset, selectedShape, selectionMode, canvasOffsetStartPosition, width, height, scaleRatio, setHoverMode, updateSingleShape, setCanvasOffset, setSelectedShape) {
|
|
31
29
|
if (activeTool === _Shapes.ToolEnum.move && canvasOffsetStartPosition !== undefined) {
|
|
32
|
-
var _cursorPosition = (0, _intersect.getCursorPosition)(e, canvasRef.current, width, height);
|
|
30
|
+
var _cursorPosition = (0, _intersect.getCursorPosition)(e, canvasRef.current, width, height, scaleRatio);
|
|
33
31
|
|
|
34
32
|
setCanvasOffset([_cursorPosition[0] - canvasOffsetStartPosition[0], _cursorPosition[1] - canvasOffsetStartPosition[1]]);
|
|
35
33
|
}
|
|
36
34
|
|
|
37
35
|
if (selectedShape == undefined) return;
|
|
38
36
|
if (selectedShape.locked) return;
|
|
39
|
-
var cursorPosition = (0, _intersect.getCursorPosition)(e, canvasRef.current, width, height);
|
|
37
|
+
var cursorPosition = (0, _intersect.getCursorPosition)(e, canvasRef.current, width, height, scaleRatio);
|
|
40
38
|
|
|
41
39
|
if (selectionMode.mode === _Mode.SelectionModeLib["default"]) {
|
|
42
|
-
var positionIntersection = (0, _intersect.checkPositionIntersection)(selectedShape, cursorPosition, canvasOffset, true) || {
|
|
40
|
+
var positionIntersection = (0, _intersect.checkPositionIntersection)(selectedShape, cursorPosition, canvasOffset, scaleRatio, true) || {
|
|
43
41
|
mode: _Mode.SelectionModeLib["default"]
|
|
44
42
|
};
|
|
45
43
|
setHoverMode(positionIntersection);
|
|
@@ -60,13 +58,12 @@ var useDrawableCanvas = function useDrawableCanvas(_ref) {
|
|
|
60
58
|
var _ref$disabled = _ref.disabled,
|
|
61
59
|
disabled = _ref$disabled === void 0 ? false : _ref$disabled,
|
|
62
60
|
addShape = _ref.addShape,
|
|
61
|
+
canvasSize = _ref.canvasSize,
|
|
63
62
|
drawCanvasRef = _ref.drawCanvasRef,
|
|
64
63
|
setActiveTool = _ref.setActiveTool,
|
|
65
64
|
shapes = _ref.shapes,
|
|
66
65
|
defaultConf = _ref.defaultConf,
|
|
67
66
|
selectionMode = _ref.selectionMode,
|
|
68
|
-
width = _ref.width,
|
|
69
|
-
height = _ref.height,
|
|
70
67
|
activeTool = _ref.activeTool,
|
|
71
68
|
isInsideComponent = _ref.isInsideComponent,
|
|
72
69
|
setCanvasOffset = _ref.setCanvasOffset,
|
|
@@ -79,6 +76,9 @@ var useDrawableCanvas = function useDrawableCanvas(_ref) {
|
|
|
79
76
|
canvasOffset = _ref.canvasOffset,
|
|
80
77
|
saveShapes = _ref.saveShapes,
|
|
81
78
|
setSelectionMode = _ref.setSelectionMode;
|
|
79
|
+
var width = canvasSize.width,
|
|
80
|
+
height = canvasSize.height,
|
|
81
|
+
scaleRatio = canvasSize.scaleRatio;
|
|
82
82
|
|
|
83
83
|
var _useState = (0, _react.useState)({
|
|
84
84
|
mode: _Mode.SelectionModeLib["default"]
|
|
@@ -89,7 +89,9 @@ var useDrawableCanvas = function useDrawableCanvas(_ref) {
|
|
|
89
89
|
|
|
90
90
|
(0, _react.useEffect)(function () {
|
|
91
91
|
var handleMouseMove = function handleMouseMove(e) {
|
|
92
|
-
return
|
|
92
|
+
return window.requestAnimationFrame(function () {
|
|
93
|
+
return handleMove(e, selectionCanvasRef, activeTool, canvasOffset, selectedShape, selectionMode, canvasOffsetStartPosition, width, height, scaleRatio, setHoverMode, updateSingleShape, setCanvasOffset, setSelectedShape);
|
|
94
|
+
});
|
|
93
95
|
};
|
|
94
96
|
|
|
95
97
|
if (isInsideComponent) {
|
|
@@ -103,7 +105,7 @@ var useDrawableCanvas = function useDrawableCanvas(_ref) {
|
|
|
103
105
|
document.removeEventListener('touchmove', handleMouseMove);
|
|
104
106
|
}
|
|
105
107
|
};
|
|
106
|
-
}, [isInsideComponent, selectionCanvasRef, selectedShape, selectionMode, setHoverMode, canvasOffset, canvasOffsetStartPosition, width, height, updateSingleShape, activeTool, setCanvasOffset, setSelectedShape]);
|
|
108
|
+
}, [isInsideComponent, selectionCanvasRef, selectedShape, selectionMode, setHoverMode, canvasOffset, canvasOffsetStartPosition, width, height, scaleRatio, updateSingleShape, activeTool, setCanvasOffset, setSelectedShape]);
|
|
107
109
|
(0, _react.useEffect)(function () {
|
|
108
110
|
var handleMouseUp = function handleMouseUp(e) {
|
|
109
111
|
if (selectionMode.mode === _Mode.SelectionModeLib.textedition) return;
|
|
@@ -111,7 +113,7 @@ var useDrawableCanvas = function useDrawableCanvas(_ref) {
|
|
|
111
113
|
if (activeTool === _Shapes.ShapeEnum.text) {
|
|
112
114
|
var _drawCanvasRef$curren;
|
|
113
115
|
|
|
114
|
-
var cursorPosition = (0, _intersect.getCursorPosition)(e, selectionCanvasRef.current, width, height);
|
|
116
|
+
var cursorPosition = (0, _intersect.getCursorPosition)(e, selectionCanvasRef.current, width, height, scaleRatio);
|
|
115
117
|
var drawCtx = (_drawCanvasRef$curren = drawCanvasRef.current) === null || _drawCanvasRef$curren === void 0 ? void 0 : _drawCanvasRef$curren.getContext('2d');
|
|
116
118
|
if (!drawCtx) return;
|
|
117
119
|
|
|
@@ -146,7 +148,7 @@ var useDrawableCanvas = function useDrawableCanvas(_ref) {
|
|
|
146
148
|
document.removeEventListener('touchend', handleMouseUp);
|
|
147
149
|
}
|
|
148
150
|
};
|
|
149
|
-
}, [isInsideComponent, selectionCanvasRef, drawCanvasRef, selectionMode, saveShapes, activeTool, addShape, defaultConf, width, height, setActiveTool, setSelectedShape, setSelectionMode]);
|
|
151
|
+
}, [isInsideComponent, selectionCanvasRef, drawCanvasRef, selectionMode, saveShapes, activeTool, addShape, defaultConf, width, height, scaleRatio, setActiveTool, setSelectedShape, setSelectionMode]);
|
|
150
152
|
(0, _react.useEffect)(function () {
|
|
151
153
|
var ref = selectionCanvasRef.current;
|
|
152
154
|
if (!ref) return;
|
|
@@ -154,10 +156,10 @@ var useDrawableCanvas = function useDrawableCanvas(_ref) {
|
|
|
154
156
|
|
|
155
157
|
var handleMouseDown = function handleMouseDown(e) {
|
|
156
158
|
e.preventDefault();
|
|
157
|
-
var cursorPosition = (0, _intersect.getCursorPosition)(e, selectionCanvasRef.current, width, height);
|
|
159
|
+
var cursorPosition = (0, _intersect.getCursorPosition)(e, selectionCanvasRef.current, width, height, scaleRatio);
|
|
158
160
|
|
|
159
161
|
if (activeTool === _Shapes.ToolEnum.selection) {
|
|
160
|
-
var _selectShape = (0, _selection.selectShape)(shapes, cursorPosition, canvasOffset, selectedShape),
|
|
162
|
+
var _selectShape = (0, _selection.selectShape)(shapes, cursorPosition, scaleRatio, canvasOffset, selectedShape),
|
|
161
163
|
shape = _selectShape.shape,
|
|
162
164
|
mode = _selectShape.mode;
|
|
163
165
|
|
|
@@ -211,7 +213,7 @@ var useDrawableCanvas = function useDrawableCanvas(_ref) {
|
|
|
211
213
|
ref.removeEventListener('mousedown', handleMouseDown);
|
|
212
214
|
ref.removeEventListener('touchstart', handleMouseDown);
|
|
213
215
|
};
|
|
214
|
-
}, [disabled, selectionCanvasRef, drawCanvasRef, selectedShape, activeTool, canvasOffset, setCanvasOffsetStartPosition, shapes, defaultConf, width, height, updateSingleShape, addShape, setActiveTool, setSelectedShape, setSelectionMode]);
|
|
216
|
+
}, [disabled, selectionCanvasRef, drawCanvasRef, selectedShape, activeTool, canvasOffset, setCanvasOffsetStartPosition, shapes, defaultConf, width, height, scaleRatio, updateSingleShape, addShape, setActiveTool, setSelectedShape, setSelectionMode]);
|
|
215
217
|
(0, _react.useEffect)(function () {
|
|
216
218
|
var ref = selectionCanvasRef.current;
|
|
217
219
|
if (!ref) return;
|
|
@@ -219,7 +221,7 @@ var useDrawableCanvas = function useDrawableCanvas(_ref) {
|
|
|
219
221
|
var handleDoubleClick = function handleDoubleClick(e) {
|
|
220
222
|
if (activeTool === _Shapes.ToolEnum.selection) {
|
|
221
223
|
if ((selectedShape === null || selectedShape === void 0 ? void 0 : selectedShape.type) === _Shapes.ShapeEnum.text) {
|
|
222
|
-
var cursorPosition = (0, _intersect.getCursorPosition)(e, selectionCanvasRef.current, width, height);
|
|
224
|
+
var cursorPosition = (0, _intersect.getCursorPosition)(e, selectionCanvasRef.current, width, height, scaleRatio);
|
|
223
225
|
|
|
224
226
|
if ((0, _intersect.checkPositionIntersection)(selectedShape, cursorPosition, canvasOffset)) {
|
|
225
227
|
setSelectionMode({
|
|
@@ -240,7 +242,7 @@ var useDrawableCanvas = function useDrawableCanvas(_ref) {
|
|
|
240
242
|
ref.removeEventListener('dblclick', handleDoubleClick);
|
|
241
243
|
}
|
|
242
244
|
};
|
|
243
|
-
}, [isInsideComponent, selectionCanvasRef, activeTool, selectedShape, width, height, canvasOffset, setSelectionMode]);
|
|
245
|
+
}, [isInsideComponent, selectionCanvasRef, activeTool, selectedShape, width, height, scaleRatio, canvasOffset, setSelectionMode]);
|
|
244
246
|
return {
|
|
245
247
|
hoverMode: hoverMode
|
|
246
248
|
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports["default"] = void 0;
|
|
9
|
+
|
|
10
|
+
var _fp = _interopRequireDefault(require("lodash/fp"));
|
|
11
|
+
|
|
12
|
+
var _react = require("react");
|
|
13
|
+
|
|
14
|
+
var useResizeObserver = function useResizeObserver(_ref) {
|
|
15
|
+
var onResized = _ref.onResized,
|
|
16
|
+
element = _ref.element;
|
|
17
|
+
(0, _react.useEffect)(function () {
|
|
18
|
+
var current = element.current;
|
|
19
|
+
if (!current) return;
|
|
20
|
+
var resizeObserver = new ResizeObserver(function (entries) {
|
|
21
|
+
var _ref2 = _fp["default"].get('0.borderBoxSize', entries) ? _fp["default"].flow(_fp["default"].get('0.borderBoxSize'), _fp["default"].castArray, _fp["default"].first, function (el) {
|
|
22
|
+
return {
|
|
23
|
+
width: _fp["default"].get('inlineSize', el),
|
|
24
|
+
height: _fp["default"].get('blockSize', el)
|
|
25
|
+
};
|
|
26
|
+
})(entries) : _fp["default"].get('0.contentRect', entries),
|
|
27
|
+
width = _ref2.width,
|
|
28
|
+
height = _ref2.height;
|
|
29
|
+
|
|
30
|
+
onResized(width, height);
|
|
31
|
+
});
|
|
32
|
+
resizeObserver.observe(current);
|
|
33
|
+
return function () {
|
|
34
|
+
resizeObserver.unobserve(current);
|
|
35
|
+
};
|
|
36
|
+
}, [element, onResized]);
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
var _default = useResizeObserver;
|
|
40
|
+
exports["default"] = _default;
|
package/dist/hooks/useShapes.js
CHANGED
|
@@ -24,6 +24,8 @@ var _data = require("../utils/data");
|
|
|
24
24
|
var useShapes = function useShapes() {
|
|
25
25
|
var onDataChanged = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _fp["default"].noop;
|
|
26
26
|
var shapesRef = (0, _react.useRef)([]);
|
|
27
|
+
var onDataChangedRef = (0, _react.useRef)(onDataChanged);
|
|
28
|
+
onDataChangedRef.current = onDataChanged;
|
|
27
29
|
|
|
28
30
|
var _useState = (0, _react.useState)(undefined),
|
|
29
31
|
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
@@ -60,23 +62,25 @@ var useShapes = function useShapes() {
|
|
|
60
62
|
}, []);
|
|
61
63
|
var addPictureShape = (0, _react.useCallback)( /*#__PURE__*/function () {
|
|
62
64
|
var _ref = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(fileOrUrl) {
|
|
63
|
-
var
|
|
65
|
+
var maxWidth,
|
|
66
|
+
maxHeight,
|
|
64
67
|
pictureShape,
|
|
65
68
|
_args = arguments;
|
|
66
69
|
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
67
70
|
while (1) {
|
|
68
71
|
switch (_context.prev = _context.next) {
|
|
69
72
|
case 0:
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
+
maxWidth = _args.length > 1 && _args[1] !== undefined ? _args[1] : 300;
|
|
74
|
+
maxHeight = _args.length > 2 && _args[2] !== undefined ? _args[2] : 300;
|
|
75
|
+
_context.next = 4;
|
|
76
|
+
return (0, _data.createPicture)(fileOrUrl, maxWidth, maxHeight);
|
|
73
77
|
|
|
74
|
-
case
|
|
78
|
+
case 4:
|
|
75
79
|
pictureShape = _context.sent;
|
|
76
80
|
addShape(pictureShape);
|
|
77
81
|
return _context.abrupt("return", pictureShape);
|
|
78
82
|
|
|
79
|
-
case
|
|
83
|
+
case 7:
|
|
80
84
|
case "end":
|
|
81
85
|
return _context.stop();
|
|
82
86
|
}
|
|
@@ -202,8 +206,8 @@ var useShapes = function useShapes() {
|
|
|
202
206
|
updateShapes(_fp["default"].set(shapeIndex, newShape, shapes));
|
|
203
207
|
}, [updateShapes]);
|
|
204
208
|
(0, _react.useEffect)(function () {
|
|
205
|
-
|
|
206
|
-
}, [
|
|
209
|
+
onDataChangedRef.current();
|
|
210
|
+
}, [savedShapes]);
|
|
207
211
|
return {
|
|
208
212
|
shapesRef: shapesRef,
|
|
209
213
|
selectedShape: selectedShape,
|
package/dist/styles.css
CHANGED
|
@@ -1,33 +1,32 @@
|
|
|
1
|
-
|
|
1
|
+
#react-paint-root {
|
|
2
2
|
margin: 0;
|
|
3
3
|
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu',
|
|
4
4
|
'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
|
|
5
|
-
-webkit-font-smoothing: antialiased;
|
|
6
|
-
-moz-osx-font-smoothing: grayscale;
|
|
7
5
|
background: #F3F3F3;
|
|
6
|
+
|
|
8
7
|
}
|
|
9
8
|
|
|
10
|
-
.examples {
|
|
9
|
+
#react-paint-root .examples {
|
|
11
10
|
display: flex;
|
|
12
11
|
}
|
|
13
12
|
|
|
14
|
-
.menu {
|
|
13
|
+
#react-paint-root .menu {
|
|
15
14
|
width: 250px;
|
|
16
15
|
min-width: 0;
|
|
17
16
|
display: flex;
|
|
18
17
|
flex-direction: column;
|
|
19
18
|
}
|
|
20
19
|
|
|
21
|
-
.menu a {
|
|
20
|
+
#react-paint-root .menu a {
|
|
22
21
|
margin: 8px;
|
|
23
22
|
padding: 4px;
|
|
24
23
|
}
|
|
25
24
|
|
|
26
|
-
.menu a.selected {
|
|
25
|
+
#react-paint-root .menu a.selected {
|
|
27
26
|
color: green;
|
|
28
27
|
}
|
|
29
28
|
|
|
30
|
-
.currentApp {
|
|
29
|
+
#react-paint-root .currentApp {
|
|
31
30
|
flex: 1;
|
|
32
31
|
min-width: 0;
|
|
33
32
|
}
|
|
@@ -41,28 +40,28 @@ body {
|
|
|
41
40
|
.sst453j{width:100%;box-sizing:border-box;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:2px 6px;}
|
|
42
41
|
.s1q5lsc2{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}
|
|
43
42
|
.s1dis2j8{-webkit-flex:1;-ms-flex:1;flex:1;text-align:left;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.s1dis2j8 + .s1q5lsc2{margin-left:12px;}
|
|
44
|
-
.s1xzg253{position:absolute;z-index:3;background:var(--bg-color);bottom:100%;box-shadow:0 3px 8px rgb(0 0 0 / 24%);padding:
|
|
43
|
+
.s1xzg253{position:absolute;z-index:3;background:var(--bg-color);bottom:100%;box-shadow:0 3px 8px rgb(0 0 0 / 24%);padding:8px;border-radius:8px;white-space:nowrap;}.s1xzg253[data-alignment='left']{left:0;margin:4px;}.s1xzg253[data-alignment='center']{left:50%;-webkit-transform:translate3d(-50%,0px,0px);-ms-transform:translate3d(-50%,0px,0px);transform:translate3d(-50%,0px,0px);margin:4px 0px;}.s1xzg253[data-alignment='right']{right:0;margin:4px;}
|
|
45
44
|
.s17qj3jh{margin-bottom:8px;margin-top:4px;font-size:18px;}
|
|
46
45
|
.su3a8bs{display:inline-block;background:var(--bg-color);box-sizing:border-box;overflow-y:auto;min-width:200px;}
|
|
47
|
-
.szboplp{border:3px solid transparent;padding:4px 0px;position:relative;background:var(--bg-color);box-sizing:border-box;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;}.szboplp[data-is-over='1']{border:3px dotted var(--btn-hover);}.szboplp[data-is-dragging='1']{opacity:0.4;}.szboplp[data-selected='1']{color:var(--text-color-selected);
|
|
46
|
+
.szboplp{border:3px solid transparent;padding:4px 0px;position:relative;background:var(--bg-color);box-sizing:border-box;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;}.szboplp[data-is-over='1']{border:3px dotted var(--btn-hover);}.szboplp[data-is-dragging='1']{opacity:0.4;}.szboplp[data-selected='1']{color:var(--text-color-selected);background:var(--bg-color-selected);}.szboplp[data-selected='0'][data-disabled='0']:hover{background:var(--btn-hover);}.szboplp[data-disabled='1']{opacity:0.25;cursor:default;}.szboplp[data-disabled='0']{cursor:move;}.szboplp > span{height:20px;}.szboplp > span > svg{fill:#8a8a8a;width:20px;height:20px;padding:0 16px;}
|
|
48
47
|
.sff5xt[data-visible='false']{opacity:0.2;}
|
|
49
48
|
.sj3bift[data-locked='false']{opacity:0.2;}
|
|
50
49
|
.s10ip0a4[data-grid='false'] svg{opacity:0.2;}
|
|
51
50
|
.s1j9uq9o{-webkit-flex:1;-ms-flex:1;flex:1;}
|
|
52
51
|
.s156ddbb{bottom:0;left:unset;top:unset;max-height:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}
|
|
53
|
-
.s11gt4hl{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;overflow-y:auto;}
|
|
52
|
+
.s11gt4hl{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;overflow-y:auto;}
|
|
54
53
|
.s13cxqhq{opacity:0.6;text-align:center;padding:12px 0px;}
|
|
55
54
|
.s1bvz4xj{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;bottom:unset;top:100%;}.s1bvz4xj[data-vertical='1']{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}
|
|
56
55
|
.siejlch{position:relative;display:inline-block;}
|
|
57
56
|
.s1uphjfh{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;bottom:unset;top:100%;}.s1uphjfh[data-vertical='1']{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}.s1uphjfh hr{width:100%;border:none;border-top:1px solid var(--text-color);opacity:0.6;}
|
|
58
57
|
.s1e5a6k5{position:relative;display:inline-block;}
|
|
59
58
|
.s1c8tp02{z-index:3;position:absolute;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;left:0;right:0;bottom:0;top:0;}
|
|
60
|
-
.svkxpz4{display:grid;background:var(--bg-color);box-shadow:0 3px 8px rgb(0 0 0 / 24%);padding:
|
|
59
|
+
.svkxpz4{display:grid;background:var(--bg-color);box-shadow:0 3px 8px rgb(0 0 0 / 24%);padding:12px;border-radius:8px;white-space:nowrap;position:relative;}
|
|
61
60
|
.s1s9jyyg{position:absolute;left:0;top:0;right:0;bottom:0;background:#00000073;}
|
|
62
61
|
.s95bkm9 form{grid-template-columns:3fr 1fr 1fr;}.s95bkm9 form input{color:var(--text-color);border:2px solid var(--text-color);outline:none;}
|
|
63
62
|
.so6hnjf{-webkit-flex:1;-ms-flex:1;flex:1;position:relative;height:100%;text-align:center;max-height:72px;}
|
|
64
|
-
.s1c1dllr{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;max-height:36px;background:var(--bg-color);}
|
|
65
|
-
.s1g032mh{display:inline-block;text-align:left;
|
|
63
|
+
.s1c1dllr{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;max-height:36px;background:var(--bg-color);border-bottom:1px solid var(--border-color);box-sizing:border-box;}
|
|
64
|
+
.s1g032mh{display:inline-block;text-align:left;margin-right:36px;text-align:right;}.s1g032mh + *{position:absolute;right:0;bottom:36px;}
|
|
66
65
|
.s4owjrv{grid-template-columns:1fr 1fr 1fr;}
|
|
67
66
|
.snh2jyk{width:24px;height:24px;box-sizing:border-box;border-radius:50%;border:1px solid gray;background:var(--snh2jyk-0);background-repeat:repeat;background-size:16px;}
|
|
68
67
|
.sfm1cqx{width:36px;height:36px;box-sizing:border-box;border-radius:50%;color:var(--sfm1cqx-0);display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:baseline;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;font-size:48px;line-height:36px;position:relative;bottom:6px;font-weight:bold;}
|
|
@@ -77,12 +76,12 @@ body {
|
|
|
77
76
|
.s1xxj4yl{position:absolute;left:0;top:50%;-webkit-transform:translate3d(-25%,-50%,0px);-ms-transform:translate3d(-25%,-50%,0px);transform:translate3d(-25%,-50%,0px);display:inline-block;width:0;height:0;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:15px solid black;}
|
|
78
77
|
.sbd6jc8{position:absolute;right:0;top:50%;-webkit-transform:translate3d(25%,-50%,0px);-ms-transform:translate3d(25%,-50%,0px);transform:translate3d(25%,-50%,0px);display:inline-block;width:0;height:0;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:15px solid black;}
|
|
79
78
|
.scawaat{position:relative;display:inline-block;width:60px;height:2px;background:black;vertical-align:middle;}.scawaat[data-type='0'] .s1xxj4yl,.scawaat[data-type='1'] .s1xxj4yl{display:none;}.scawaat[data-type='0'] .sbd6jc8,.scawaat[data-type='2'] .sbd6jc8{display:none;}
|
|
80
|
-
.s16z54di{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;background:var(--bg-color);position:relative;}
|
|
79
|
+
.s16z54di{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;background:var(--bg-color);position:relative;height:36px;border-top:1px solid var(--border-color);box-sizing:border-box;}
|
|
81
80
|
.sa7lzh9{-webkit-flex:1;-ms-flex:1;flex:1;}
|
|
82
81
|
.s1xssqat{display:inline-block;padding:12px 48px;margin:4px;max-width:calc(100% - 24px);overflow-wrap:break-word;box-sizing:border-box;-webkit-transition:all 500ms;transition:all 500ms;opacity:0;-webkit-transform:translate3d(0px,40px,0px);-ms-transform:translate3d(0px,40px,0px);transform:translate3d(0px,40px,0px);}.s1xssqat[data-type='0']{background:#646464;color:white;}.s1xssqat[data-type='1']{background:#c3a200;color:black;}.s1xssqat[data-type='2']{background:#911717;color:white;}.s1xssqat[data-type='3']{background:#088900;color:white;}.s1xssqat[data-is-shown='1']{opacity:1;-webkit-transform:translate3d(0px,0px,0px);-ms-transform:translate3d(0px,0px,0px);transform:translate3d(0px,0px,0px);}.s1xssqat[data-is-shown='0']{opacity:0;-webkit-transform:translate3d(0px,40px,0px);-ms-transform:translate3d(0px,40px,0px);transform:translate3d(0px,40px,0px);}
|
|
83
82
|
.s1bgtt22{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column-reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;position:absolute;z-index:4;bottom:0;left:0;right:0;height:0px;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}
|
|
84
83
|
.s9j48u3{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;position:absolute;z-index:2;top:0;bottom:0;left:0;right:0;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#00000050;-webkit-transition:opacity 300ms linear;transition:opacity 300ms linear;opacity:0;}.s9j48u3[data-loading='visible']{opacity:1;}
|
|
85
|
-
.s4auclc{width:40px;height:40px;position:relative;-webkit-transform:rotate(10deg);-ms-transform:rotate(10deg);transform:rotate(10deg);-webkit-animation:react-paint-
|
|
84
|
+
.s4auclc{width:40px;height:40px;position:relative;-webkit-transform:rotate(10deg);-ms-transform:rotate(10deg);transform:rotate(10deg);-webkit-animation:react-paint-rotation-s4auclc 1s infinite;animation:react-paint-rotation-s4auclc 1s infinite;}@-webkit-keyframes react-paint-rotation-s4auclc{from{-webkit-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}to{-webkit-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}@keyframes react-paint-rotation-s4auclc{from{-webkit-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}to{-webkit-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}
|
|
86
85
|
.s1l3fbq{border-radius:50%;position:absolute;width:15px;height:15px;}.s1l3fbq:nth-child(1){left:0;background-color:#5c6bc0;}.s1l3fbq:nth-child(2){right:0;background-color:#8bc34a;}.s1l3fbq:nth-child(3){bottom:0;background-color:#ffb74d;}.s1l3fbq:nth-child(4){bottom:0;right:0;background-color:#f44336;}
|
|
87
|
-
.s1v9piyg{--bg-color:white;--text-color:#364181;--btn-hover:#afd8d8;--bg-color-selected:#364181;--text-color-selected:white;--shrinkedcanvas-bg-color:white;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;color:var(--text-color);position:relative;overflow:hidden;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}.s1v9piyg[data-grow='false']{
|
|
86
|
+
.s1v9piyg{--bg-color:white;--text-color:#364181;--btn-hover:#afd8d8;--bg-color-selected:#364181;--text-color-selected:white;--shrinkedcanvas-bg-color:white;--border-color:#36418129;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;color:var(--text-color);position:relative;overflow:hidden;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}.s1v9piyg hr{width:100%;border:none;border-top:1px solid var(--border-color);}.s1v9piyg[data-grow='false']{max-width:var(--s1v9piyg-0);}.s1v9piyg[data-shrink='false']{min-width:var(--s1v9piyg-1);}
|
|
88
87
|
.s6o5tmu{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;position:relative;max-width:100%;z-index:1;aspect-ratio:var(--s6o5tmu-2);}.layoutPanelOpened .s6o5tmu{background:var(--shrinkedcanvas-bg-color);}.s6o5tmu[data-grow='true']{width:100%;}.s6o5tmu[data-grow='false']{width:var(--s6o5tmu-1);}
|