@yorab/react-paint 0.7.6 → 0.8.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/dist/components/App.d.ts +20 -0
- package/dist/components/Canvas.d.ts +38 -0
- package/dist/components/common/Button.d.ts +16 -0
- package/dist/components/common/Loading.d.ts +7 -0
- package/dist/components/common/Modal.d.ts +10 -0
- package/dist/components/common/Panel.d.ts +13 -0
- package/dist/components/common/Snackbar.d.ts +8 -0
- package/dist/components/settings/ColorField.d.ts +15 -0
- package/dist/components/settings/DeleteButton.d.ts +9 -0
- package/dist/components/settings/FontFamilyField.d.ts +12 -0
- package/dist/components/settings/LayoutButton.d.ts +8 -0
- package/dist/components/settings/Layouts.d.ts +19 -0
- package/dist/components/settings/LineArrowField.d.ts +12 -0
- package/dist/components/settings/LineTypeField.d.ts +16 -0
- package/dist/components/settings/PointsNumberField.d.ts +13 -0
- package/dist/components/settings/RangeField.d.ts +18 -0
- package/dist/components/settings/SelectField.d.ts +18 -0
- package/dist/components/settings/SettingsBar.d.ts +19 -0
- package/dist/components/settings/ToggleField.d.ts +12 -0
- package/dist/components/toolbox/EditTextBox.d.ts +14 -0
- package/dist/components/toolbox/LoadFileTool.d.ts +12 -0
- package/dist/components/toolbox/MenuGroup.d.ts +35 -0
- package/dist/components/toolbox/PictureUrlInput.d.ts +8 -0
- package/dist/components/toolbox/Tool.d.ts +12 -0
- package/dist/components/toolbox/Toolbar.d.ts +27 -0
- package/dist/components/toolbox/ToolbarGroup.d.ts +18 -0
- package/dist/constants/app.d.ts +41 -0
- package/dist/constants/icons.d.ts +41 -0
- package/dist/constants/loading.d.ts +1 -0
- package/dist/constants/picture.d.ts +1 -0
- package/dist/constants/shapes.d.ts +8 -0
- package/dist/constants/snackbar.d.ts +7 -0
- package/dist/constants/style.d.ts +17 -0
- package/dist/constants/tools.d.ts +32 -0
- package/dist/hooks/useComponent.d.ts +9 -0
- package/dist/hooks/useDoubleClick.d.ts +5 -0
- package/dist/hooks/useDrag.d.ts +15 -0
- package/dist/hooks/useDrawableCanvas.d.ts +37 -0
- package/dist/hooks/useKeyboard.d.ts +18 -0
- package/dist/hooks/useResizeObserver.d.ts +7 -0
- package/dist/hooks/useShapes.d.ts +22 -0
- package/dist/hooks/useSnackbar.d.ts +10 -0
- package/dist/react-paint.css +1 -0
- package/dist/react-paint.js +9109 -0
- package/dist/react-paint.umd.cjs +53 -0
- package/dist/types/Mode.d.ts +43 -0
- package/dist/types/Shapes.d.ts +112 -0
- package/dist/types/snackbar.d.ts +7 -0
- package/dist/types/tools.d.ts +124 -0
- package/dist/types/utils.d.ts +3 -0
- package/dist/utils/canvas.d.ts +10 -0
- package/dist/utils/data.d.ts +225 -0
- package/dist/utils/dom.d.ts +1 -0
- package/dist/utils/file.d.ts +10 -0
- package/dist/utils/intersect.d.ts +6 -0
- package/dist/utils/migration.d.ts +165 -0
- package/dist/utils/selection.d.ts +7 -0
- package/dist/utils/shapes/brush.d.ts +55 -0
- package/dist/utils/shapes/circle.d.ts +13 -0
- package/dist/utils/shapes/curve.d.ts +11 -0
- package/dist/utils/shapes/default.d.ts +10 -0
- package/dist/utils/shapes/ellipse.d.ts +13 -0
- package/dist/utils/shapes/grid.d.ts +3 -0
- package/dist/utils/shapes/index.d.ts +245 -0
- package/dist/utils/shapes/line.d.ts +23 -0
- package/dist/utils/shapes/picture.d.ts +6 -0
- package/dist/utils/shapes/polygon.d.ts +11 -0
- package/dist/utils/shapes/rectangle.d.ts +26 -0
- package/dist/utils/shapes/text.d.ts +48 -0
- package/dist/utils/shapes/triangle.d.ts +2 -0
- package/dist/utils/string.d.ts +3 -0
- package/dist/utils/style.d.ts +2 -0
- package/dist/utils/toolbar.d.ts +13 -0
- package/dist/utils/transform.d.ts +8 -0
- package/dist/utils/trigo.d.ts +10 -0
- package/package.json +51 -56
- package/dist/components/App.js +0 -496
- package/dist/components/Canvas.js +0 -194
- package/dist/components/common/Button.js +0 -88
- package/dist/components/common/Loading.js +0 -57
- package/dist/components/common/Modal.js +0 -46
- package/dist/components/common/Panel.js +0 -43
- package/dist/components/common/Snackbar.js +0 -68
- package/dist/components/settings/ColorField.js +0 -125
- package/dist/components/settings/DeleteButton.js +0 -37
- package/dist/components/settings/FontFamilyField.js +0 -67
- package/dist/components/settings/LayoutButton.js +0 -39
- package/dist/components/settings/Layouts.js +0 -214
- package/dist/components/settings/LineArrowField.js +0 -67
- package/dist/components/settings/LineTypeField.js +0 -65
- package/dist/components/settings/PointsNumberField.js +0 -45
- package/dist/components/settings/RangeField.js +0 -82
- package/dist/components/settings/SelectField.js +0 -81
- package/dist/components/settings/SettingsBar.js +0 -383
- package/dist/components/settings/ToggleField.js +0 -49
- package/dist/components/toolbox/EditTextBox.js +0 -138
- package/dist/components/toolbox/LoadFileTool.js +0 -58
- package/dist/components/toolbox/MenuGroup.js +0 -173
- package/dist/components/toolbox/PictureUrlInput.js +0 -68
- package/dist/components/toolbox/Tool.js +0 -41
- package/dist/components/toolbox/Toolbar.js +0 -203
- package/dist/components/toolbox/ToolbarGroup.js +0 -134
- package/dist/constants/app.js +0 -51
- package/dist/constants/icons.js +0 -88
- package/dist/constants/loading.js +0 -8
- package/dist/constants/picture.js +0 -8
- package/dist/constants/shapes.js +0 -20
- package/dist/constants/snackbar.js +0 -15
- package/dist/constants/style.js +0 -35
- package/dist/constants/tools.js +0 -424
- package/dist/hooks/useComponent.js +0 -47
- package/dist/hooks/useDoubleClick.js +0 -46
- package/dist/hooks/useDrag.js +0 -92
- package/dist/hooks/useDrawableCanvas.js +0 -230
- package/dist/hooks/useKeyboard.js +0 -142
- package/dist/hooks/useResizeObserver.js +0 -42
- package/dist/hooks/useShapes.js +0 -184
- package/dist/hooks/useSnackbar.js +0 -56
- package/dist/styles.css +0 -91
- package/dist/types/Mode.js +0 -5
- package/dist/types/Shapes.js +0 -5
- package/dist/types/snackbar.js +0 -5
- package/dist/types/tools.js +0 -5
- package/dist/types/utils.js +0 -5
- package/dist/utils/canvas.js +0 -49
- package/dist/utils/data.js +0 -49
- package/dist/utils/dom.js +0 -12
- package/dist/utils/file.js +0 -177
- package/dist/utils/intersect.js +0 -122
- package/dist/utils/migration.js +0 -59
- package/dist/utils/selection.js +0 -86
- package/dist/utils/shapes/brush.js +0 -135
- package/dist/utils/shapes/circle.js +0 -93
- package/dist/utils/shapes/curve.js +0 -55
- package/dist/utils/shapes/default.js +0 -73
- package/dist/utils/shapes/ellipse.js +0 -101
- package/dist/utils/shapes/grid.js +0 -36
- package/dist/utils/shapes/index.js +0 -341
- package/dist/utils/shapes/line.js +0 -179
- package/dist/utils/shapes/picture.js +0 -109
- package/dist/utils/shapes/polygon.js +0 -69
- package/dist/utils/shapes/rectangle.js +0 -100
- package/dist/utils/shapes/text.js +0 -128
- package/dist/utils/shapes/triangle.js +0 -24
- package/dist/utils/string.js +0 -36
- package/dist/utils/style.js +0 -46
- package/dist/utils/toolbar.js +0 -78
- package/dist/utils/transform.js +0 -109
- package/dist/utils/trigo.js +0 -42
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { ActionsTool, CustomTool, ToolsBrushSettings, ToolsCircleSettings, ToolsCurveSettings, ToolsEllipseSettings, ToolsLineSettings, ToolsPictureSettings, ToolsPolygonSettings, ToolsRectSettings, ToolsSquareSettings, ToolsTextSettings } from '../types/tools';
|
|
2
|
+
export declare const SETTINGS_DEFAULT_RECT: ToolsRectSettings;
|
|
3
|
+
export declare const SETTINGS_DEFAULT_SQUARE: ToolsSquareSettings;
|
|
4
|
+
export declare const SETTINGS_DEFAULT_CIRCLE: ToolsCircleSettings;
|
|
5
|
+
export declare const SETTINGS_DEFAULT_ELLIPSE: ToolsEllipseSettings;
|
|
6
|
+
export declare const SETTINGS_DEFAULT_PICTURE: ToolsPictureSettings;
|
|
7
|
+
export declare const SETTINGS_DEFAULT_TEXT: ToolsTextSettings;
|
|
8
|
+
export declare const SETTINGS_DEFAULT_BRUSH: ToolsBrushSettings;
|
|
9
|
+
export declare const SETTINGS_DEFAULT_LINE: ToolsLineSettings;
|
|
10
|
+
export declare const SETTINGS_DEFAULT_POLYGON: ToolsPolygonSettings;
|
|
11
|
+
export declare const SETTINGS_DEFAULT_CURVE: ToolsCurveSettings;
|
|
12
|
+
export declare const DEFAULT_SHAPE_PICTURE: CustomTool;
|
|
13
|
+
export declare const DEFAULT_SHAPE_BRUSH: CustomTool;
|
|
14
|
+
export declare const DEFAULT_SHAPE_LINE: CustomTool;
|
|
15
|
+
export declare const DEFAULT_SHAPE_POLYGON: CustomTool;
|
|
16
|
+
export declare const DEFAULT_SHAPE_CURVE: CustomTool;
|
|
17
|
+
export declare const DEFAULT_SHAPE_RECT: CustomTool;
|
|
18
|
+
export declare const DEFAULT_SHAPE_SQUARE: CustomTool;
|
|
19
|
+
export declare const DEFAULT_SHAPE_CIRCLE: CustomTool;
|
|
20
|
+
export declare const DEFAULT_SHAPE_ELLIPSE: CustomTool;
|
|
21
|
+
export declare const DEFAULT_SHAPE_TEXT: CustomTool;
|
|
22
|
+
export declare const DEFAULT_SHAPE_TOOLS: CustomTool[];
|
|
23
|
+
export declare const SELECTION_TOOL: ActionsTool;
|
|
24
|
+
export declare const UNDO_TOOL: ActionsTool;
|
|
25
|
+
export declare const REDO_TOOL: ActionsTool;
|
|
26
|
+
export declare const CLEAR_TOOL: ActionsTool;
|
|
27
|
+
export declare const EXPORT_TOOL: ActionsTool;
|
|
28
|
+
export declare const LOAD_TOOL: ActionsTool;
|
|
29
|
+
export declare const SAVE_TOOL: ActionsTool;
|
|
30
|
+
export declare const MOVE_TOOL: ActionsTool;
|
|
31
|
+
export declare const UPLOAD_PICTURE_TOOL: ActionsTool;
|
|
32
|
+
export declare const ADD_URL_PICTURE_TOOL: ActionsTool;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { RefObject } from 'react';
|
|
2
|
+
type UseComponentType = {
|
|
3
|
+
disabled: boolean;
|
|
4
|
+
componentRef: RefObject<HTMLElement>;
|
|
5
|
+
};
|
|
6
|
+
declare const useComponent: ({ disabled, componentRef }: UseComponentType) => {
|
|
7
|
+
isInsideComponent: boolean;
|
|
8
|
+
};
|
|
9
|
+
export default useComponent;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { RefObject } from 'react';
|
|
2
|
+
import type { DrawableShape } from '../types/Shapes';
|
|
3
|
+
type useDragType = {
|
|
4
|
+
disabled?: boolean;
|
|
5
|
+
ref: RefObject<HTMLDivElement>;
|
|
6
|
+
shape: DrawableShape;
|
|
7
|
+
layoutDragging: string | undefined;
|
|
8
|
+
setLayoutDragging: (shapeId: string | undefined) => void;
|
|
9
|
+
handleSelect: (shape: DrawableShape) => void;
|
|
10
|
+
onMoveShapes: (firstShapeId: string, lastShapeId: string) => void;
|
|
11
|
+
};
|
|
12
|
+
declare const useDrag: ({ disabled, ref, shape, layoutDragging, setLayoutDragging, handleSelect, onMoveShapes }: useDragType) => {
|
|
13
|
+
isOver: boolean;
|
|
14
|
+
};
|
|
15
|
+
export default useDrag;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { DrawableShape, Point } from '../types/Shapes';
|
|
3
|
+
import type { HoverModeData, SelectionModeData } from '../types/Mode';
|
|
4
|
+
import type { ToolsType } from '../types/tools';
|
|
5
|
+
import type { GridFormatType } from '../constants/app';
|
|
6
|
+
type UseCanvasType = {
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
canvasSize: {
|
|
9
|
+
width: number;
|
|
10
|
+
height: number;
|
|
11
|
+
scaleRatio: number;
|
|
12
|
+
};
|
|
13
|
+
shapes: DrawableShape[];
|
|
14
|
+
saveShapes: () => void;
|
|
15
|
+
addShape: (newShape: DrawableShape) => void;
|
|
16
|
+
updateSingleShape: (updatedShape: DrawableShape) => void;
|
|
17
|
+
selectedShape: DrawableShape | undefined;
|
|
18
|
+
setSelectedShape: React.Dispatch<React.SetStateAction<DrawableShape | undefined>>;
|
|
19
|
+
activeTool: ToolsType;
|
|
20
|
+
setActiveTool: React.Dispatch<React.SetStateAction<ToolsType>>;
|
|
21
|
+
canvasOffsetStartPosition: Point | undefined;
|
|
22
|
+
setCanvasOffsetStartPosition: React.Dispatch<React.SetStateAction<Point | undefined>>;
|
|
23
|
+
gridFormat: GridFormatType;
|
|
24
|
+
canvasOffset: Point;
|
|
25
|
+
setCanvasOffset: React.Dispatch<React.SetStateAction<Point>>;
|
|
26
|
+
isInsideComponent: boolean;
|
|
27
|
+
selectionMode: SelectionModeData<number | Point>;
|
|
28
|
+
setSelectionMode: React.Dispatch<React.SetStateAction<SelectionModeData<number | Point>>>;
|
|
29
|
+
drawCanvasRef: React.MutableRefObject<HTMLCanvasElement | null>;
|
|
30
|
+
selectionCanvasRef: React.MutableRefObject<HTMLCanvasElement | null>;
|
|
31
|
+
selectionPadding: number;
|
|
32
|
+
isShiftPressed: boolean;
|
|
33
|
+
};
|
|
34
|
+
declare const useDrawableCanvas: ({ disabled, addShape, canvasSize, drawCanvasRef, setActiveTool, shapes, selectionMode, activeTool, isInsideComponent, setCanvasOffset, selectedShape, selectionCanvasRef, canvasOffsetStartPosition, setSelectedShape, setCanvasOffsetStartPosition, updateSingleShape, gridFormat, canvasOffset, saveShapes, setSelectionMode, selectionPadding, isShiftPressed }: UseCanvasType) => {
|
|
35
|
+
hoverMode: HoverModeData;
|
|
36
|
+
};
|
|
37
|
+
export default useDrawableCanvas;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import type { GridFormatType } from '../constants/app';
|
|
3
|
+
import type { DrawableShape } from '../types/Shapes';
|
|
4
|
+
type UseKeyboardType = {
|
|
5
|
+
isInsideComponent: boolean;
|
|
6
|
+
selectedShape: DrawableShape | undefined;
|
|
7
|
+
pasteShape: (shape: DrawableShape) => void;
|
|
8
|
+
updateShape: (shape: DrawableShape) => void;
|
|
9
|
+
setSelectedShape: (value: React.SetStateAction<DrawableShape | undefined>) => void;
|
|
10
|
+
removeShape: (shape: DrawableShape) => void;
|
|
11
|
+
backwardShape: () => void;
|
|
12
|
+
forwardShape: () => void;
|
|
13
|
+
setShiftPressed: (value: React.SetStateAction<boolean>) => void;
|
|
14
|
+
isEditingText: boolean;
|
|
15
|
+
gridFormat: GridFormatType;
|
|
16
|
+
};
|
|
17
|
+
declare const useKeyboard: ({ gridFormat, isInsideComponent, selectedShape, isEditingText, setSelectedShape, removeShape, pasteShape, updateShape, backwardShape, forwardShape, setShiftPressed }: UseKeyboardType) => {};
|
|
18
|
+
export default useKeyboard;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
type UseResizeObserverType = {
|
|
3
|
+
element: React.RefObject<HTMLElement>;
|
|
4
|
+
onResized: (width: number, height: number) => unknown;
|
|
5
|
+
};
|
|
6
|
+
declare const useResizeObserver: ({ onResized, element }: UseResizeObserverType) => void;
|
|
7
|
+
export default useResizeObserver;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import type { DrawableShape } from '../types/Shapes';
|
|
3
|
+
declare const useShapes: (onDataChanged?: () => void) => {
|
|
4
|
+
shapesRef: import("react").MutableRefObject<DrawableShape[]>;
|
|
5
|
+
selectedShape: DrawableShape | undefined;
|
|
6
|
+
addShape: (newShape: DrawableShape) => void;
|
|
7
|
+
addPictureShape: (fileOrUrl: File | string, maxWidth?: number, maxHeight?: number) => Promise<import("../types/Shapes").DrawablePicture>;
|
|
8
|
+
moveShapes: (firstShapeId: string, lastShapeId: string) => void;
|
|
9
|
+
saveShapes: () => void;
|
|
10
|
+
setSelectedShape: import("react").Dispatch<import("react").SetStateAction<DrawableShape | undefined>>;
|
|
11
|
+
toggleShapeVisibility: (shape: DrawableShape) => void;
|
|
12
|
+
toggleShapeLock: (shape: DrawableShape) => void;
|
|
13
|
+
removeShape: (shape: DrawableShape) => void;
|
|
14
|
+
updateShape: (updatedShape: DrawableShape, withSave?: boolean) => void;
|
|
15
|
+
backwardShape: () => void;
|
|
16
|
+
forwardShape: () => void;
|
|
17
|
+
clearShapes: (shapesToInit?: DrawableShape[], clearHistory?: boolean) => void;
|
|
18
|
+
canGoBackward: boolean;
|
|
19
|
+
canGoForward: boolean;
|
|
20
|
+
canClear: boolean;
|
|
21
|
+
};
|
|
22
|
+
export default useShapes;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { SnackBarType, SnackbarTypeType } from '../types/snackbar';
|
|
2
|
+
declare const useSnackbar: () => {
|
|
3
|
+
snackbarList: SnackBarType[];
|
|
4
|
+
addSnackbar: ({ type, duration, text }: {
|
|
5
|
+
type?: SnackbarTypeType | undefined;
|
|
6
|
+
duration?: number | undefined;
|
|
7
|
+
text: string;
|
|
8
|
+
}) => void;
|
|
9
|
+
};
|
|
10
|
+
export default useSnackbar;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.react-paint-editor-toolbox-edittextbox{transform-origin:0 0;box-sizing:border-box;transform:var(--react-paint-editor-toolbox-edittextbox-transform);color:var(--react-paint-editor-toolbox-edittextbox-color);padding:var(--react-paint-editor-toolbox-edittextbox-padding);line-height:1;font-size:var(--react-paint-editor-toolbox-edittextbox-fontsize);font-family:var(--react-paint-editor-toolbox-edittextbox-fontfamily);opacity:var(--react-paint-editor-toolbox-edittextbox-opacity);background:0 0;outline:none;width:-webkit-max-content;width:-moz-max-content;width:max-content;display:inline-block;position:absolute;top:0;left:0}.react-paint-editor-toolbox-edittextbox[data-fontbold=true]{font-weight:700}.react-paint-editor-toolbox-edittextbox[data-fontitalic=true]{font-style:italic}.react-paint-editor-canvas-box{flex:1;justify-content:center;align-items:center;display:flex}.react-paint-editor-canvas-container{background-color:var(--react-paint-editor-app-canvas-bg);background-repeat:repeat;background-size:16px;display:grid;position:relative;overflow:hidden}.react-paint-editor-canvas-container[data-grow=true]{width:100%;height:100%}.react-paint-editor-canvas-drawcanvas{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;touch-action:none;grid-area:1/1;max-width:100%;display:block}.react-paint-editor-canvas-drawcanvas[data-grow=true]{width:100%}.react-paint-editor-canvas-selectioncanvas{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;touch-action:none;cursor:var(--react-paint-editor-canvas-cursor);grid-area:1/1;max-width:100%;display:block;position:relative}.react-paint-editor-canvas-selectioncanvas[data-grow=true]{width:100%}.react-paint-editor-button{vertical-align:middle;box-sizing:border-box;cursor:pointer;border-radius:var(--react-paint-editor-app-font-radius);color:var(--react-paint-editor-app-font-color);padding:var(--react-paint-editor-button-padding,0);background:0 0;border:none;justify-content:center;align-items:center;min-width:32px;height:32px;margin:2px 4px;font-size:14px;display:inline-flex}.react-paint-editor-button[data-selected="1"]{color:var(--react-paint-editor-app-font-selected-color);background:var(--react-paint-editor-app-font-selected-bg)}.react-paint-editor-button[data-hidden="1"]{visibility:hidden}.react-paint-editor-button[data-disabled="1"]{cursor:default;color:var(--react-paint-editor-app-font-disabled-color);background:var(--react-paint-editor-app-font-disabled-bg)}.react-paint-editor-button[data-selected="0"][data-disabled="0"]{background:var(--react-paint-editor-app-font-bg);color:var(--react-paint-editor-app-font-color)}.react-paint-editor-button[data-selected="0"][data-disabled="0"]:hover{color:var(--react-paint-editor-app-font-hover-color);background:var(--react-paint-editor-app-font-hover-bg)}.react-paint-editor-button[data-disabled="0"]{cursor:pointer}.react-paint-editor-button svg{fill:currentColor;width:20px;height:20px}.react-paint-editor-button input{visibility:hidden;position:absolute}.react-paint-editor-button-content{box-sizing:border-box;width:100%;padding:2px 6px;display:flex}.react-paint-editor-button-icon{align-items:center;display:flex}.react-paint-editor-button-children{text-align:left;flex:1;align-items:center;display:flex}.react-paint-editor-button-children+.react-paint-editor-button-icon{margin-left:12px}.react-paint-editor-panel{z-index:var(--react-paint-editor-panel-zindex);background:var(--react-paint-editor-app-toolbar-bg);white-space:nowrap;box-sizing:border-box;border-radius:8px;padding:8px;position:absolute;box-shadow:0 3px 8px rgba(0,0,0,.24)}.react-paint-editor-panel[data-alignment=left]{margin:4px;left:0}.react-paint-editor-panel[data-alignment=center]{margin:4px 0;left:50%;transform:translate(-50%)}.react-paint-editor-panel[data-alignment=right]{margin:4px;right:0}.react-paint-editor-panel[data-position=bottom]{bottom:100%}.react-paint-editor-panel[data-position=top]{top:100%}.react-paint-editor-panel[data-fitcontainer=true]{max-width:100%}.react-paint-editor-panel-title{margin-top:4px;margin-bottom:8px;font-size:18px}.react-paint-editor-layouts{background:var(--react-paint-editor-app-toolbar-bg);box-sizing:border-box;min-width:200px;display:inline-block;overflow-y:auto}.react-paint-editor-layouts-remove-button.react-paint-editor-layouts-remove-button{margin:2px 0}.react-paint-editor-layouts-remove-button.react-paint-editor-layouts-remove-button:not(:hover){opacity:.2}.react-paint-editor-layout{background:var(--react-paint-editor-app-toolbar-bg);box-sizing:border-box;border:3px solid transparent;justify-content:space-between;align-items:center;padding:4px 0;display:flex;position:relative}.react-paint-editor-layout[data-is-over="1"]{border:3px dotted var(--react-paint-editor-app-font-hover-bg)}.react-paint-editor-layout[data-is-dragging="1"]{opacity:.4}.react-paint-editor-layout[data-selected="1"]{color:var(--react-paint-editor-app-font-selected-color);background:var(--react-paint-editor-app-font-selected-bg)}.react-paint-editor-layout[data-selected="1"] .react-paint-editor-layouts-remove-button{color:#fff}.react-paint-editor-layout[data-selected="0"][data-disabled="0"]{background:var(--react-paint-editor-app-font-bg);color:var(--react-paint-editor-app-font-color)}.react-paint-editor-layout[data-selected="0"][data-disabled="0"]:hover{color:var(--react-paint-editor-app-font-hover-color);background:var(--react-paint-editor-app-font-hover-bg)}.react-paint-editor-layout[data-disabled="1"]{cursor:default;color:var(--react-paint-editor-app-font-disabled-color);background:var(--react-paint-editor-app-font-disabled-bg)}.react-paint-editor-layout[data-disabled="0"]{cursor:move}.react-paint-editor-layout>span{color:#8a8a8a;height:20px;line-height:1}.react-paint-editor-layout>span>svg{fill:#8a8a8a;width:20px;height:20px;padding:0 4px;transform:scale(.75)}.react-paint-editor-layouts-visible-button.react-paint-editor-layouts-visible-button{margin:2px 0}.react-paint-editor-layouts-visible-button.react-paint-editor-layouts-visible-button[data-visible=false]{opacity:.2}.react-paint-editor-layouts-locked-button.react-paint-editor-layouts-locked-button{margin:2px 0}.react-paint-editor-layouts-locked-button.react-paint-editor-layouts-locked-button[data-locked=false]{opacity:.2}.react-paint-editor-layouts-grid-button.react-paint-editor-layouts-grid-button span{justify-content:center}.react-paint-editor-layouts-subtitle{min-width:60px;font-weight:700}.react-paint-editor-layouts-separator{flex:1}.react-paint-editor-layouts-panel.react-paint-editor-layouts-panel.react-paint-editor-layouts-panel{bottom:0;top:unset}.react-paint-editor-layouts-panel-content{flex-direction:column;max-height:100%;display:flex}.react-paint-editor-layouts-scrolling-content{flex-direction:column;display:flex;overflow-y:auto}.react-paint-editor-layouts-row{align-items:center;display:flex}.react-paint-editor-layouts-placeholder{opacity:.6;text-align:center;padding:12px 0}.react-paint-editor-toolbargroup-panel-content{display:flex}.react-paint-editor-toolbargroup-panel-content[data-vertical="1"]{flex-direction:column}.react-paint-editor-toolbargroup-relative{display:inline-block;position:relative}.react-paint-editor-toolbox-panel-content{display:flex}.react-paint-editor-toolbox-panel-content[data-vertical="1"]{flex-direction:column}.react-paint-editor-toolbox-relative{display:inline-block;position:relative}.react-paint-editor-modal{z-index:var(--react-paint-editor-modal-zindex);justify-content:center;align-items:center;display:flex;position:absolute;top:0;bottom:0;left:0;right:0}.react-paint-editor-modal[data-position=center]{align-items:center}.react-paint-editor-modal[data-position=bottom]{align-items:end}.react-paint-editor-modal-panel{background:var(--react-paint-editor-app-toolbar-bg);white-space:nowrap;border-radius:8px;padding:4px;display:grid;position:relative;box-shadow:0 3px 8px rgba(0,0,0,.24)}.react-paint-editor-modal-mask{background:rgba(0,0,0,.45);position:absolute;top:0;bottom:0;left:0;right:0}.react-paint-editor-toolbox-pictureinput-modal form{grid-template-columns:3fr 1fr 1fr}.react-paint-editor-toolbox-pictureinput-modal form input{color:var(--react-paint-editor-app-font-color);border:1px solid var(--react-paint-editor-app-font-color);background:var(--react-paint-editor-app-toolbar-bg);outline:none}.react-paint-editor-toolbar-shrinkable{text-align:center;flex:1;height:36px;position:relative}.react-paint-editor-toolbar-toolbox{background:var(--react-paint-editor-app-toolbar-bg);border-bottom:1px solid var(--react-paint-editor-app-divider-color);box-sizing:border-box;max-height:36px;display:flex}.react-paint-editor-toolbar-modal{grid-template-columns:1fr 1fr 1fr}.react-paint-editor-colorfield-color{box-sizing:border-box;border-radius:50%;width:20px;height:20px}.react-paint-editor-colorfield-color[data-mode=fill]{background:var(--react-paint-editor-colorfield-color-value);border:1px solid rgba(128,128,128,.22)}.react-paint-editor-colorfield-color[data-mode=stroke]{border:4px solid rgba(128,128,128,.22)}.react-paint-editor-colorfield-color[data-mode=stroke]:after{content:"";border:2px solid var(--react-paint-editor-colorfield-color-value);box-sizing:border-box;border-radius:100%;width:18px;height:18px;display:block;position:relative;top:-3px;left:-3px}.react-paint-editor-colorfield-wrapper{flex-wrap:wrap;display:flex}.react-paint-editor-colorfield-customcolor{box-sizing:border-box;color:var(--react-paint-editor-colorfield-color-value);border-radius:50%;justify-content:center;align-items:baseline;width:20px;height:20px;font-weight:700;display:flex}.react-paint-editor-layout-opened .react-paint-editor-layout-button.react-paint-editor-layout-button.react-paint-editor-layout-button{color:var(--react-paint-editor-app-font-selected-color);background:var(--react-paint-editor-app-font-selected-bg)}.react-paint-editor-rangefield{flex-wrap:wrap;align-items:center;max-width:100%;display:inline-flex}.react-paint-editor-selectfield-wrapper{flex-wrap:wrap;display:flex}.react-paint-editor-fontfamily-option{font-family:var(--react-paint-editor-fontfamily-family)}.react-paint-editor-linetype-option{display:inline-block}.react-paint-editor-linetype-option[data-type="0"]>span{background:currentColor}.react-paint-editor-linetype-option[data-type="2"]{position:relative;left:3px}.react-paint-editor-linetype-option[data-type="2"]>span:nth-child(3n-1){background:currentColor;width:12px}.react-paint-editor-linetype-option[data-type="2"]>span:nth-child(n+11){display:none}.react-paint-editor-linetype-option[data-type="1"]>span:nth-child(odd){background:currentColor}.react-paint-editor-linetype-option>span{vertical-align:middle;background:0 0;width:6px;height:2px;display:inline-block}.react-paint-editor-linearrow-left{border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:15px solid;width:0;height:0;display:inline-block;position:absolute;top:50%;left:0;transform:translate(-25%,-50%)}.react-paint-editor-linearrow-right{border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:15px solid;width:0;height:0;display:inline-block;position:absolute;top:50%;right:0;transform:translate(25%,-50%)}.react-paint-editor-linearrow-option{vertical-align:middle;background:currentColor;width:60px;height:2px;display:inline-block;position:relative}.react-paint-editor-linearrow-option[data-type="0"] .react-paint-editor-linearrow-left,.react-paint-editor-linearrow-option[data-type="1"] .react-paint-editor-linearrow-left,.react-paint-editor-linearrow-option[data-type="0"] .react-paint-editor-linearrow-right,.react-paint-editor-linearrow-option[data-type="2"] .react-paint-editor-linearrow-right{display:none}.react-paint-editor-settings-bar{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background:var(--react-paint-editor-app-toolbar-bg);border-top:1px solid var(--react-paint-editor-app-divider-color);box-sizing:border-box;height:36px;display:flex;position:relative}.react-paint-editor-settings-separator{flex:1}.react-paint-editor-settings-modal{grid-template-columns:repeat(auto-fill,40px);width:100%}.react-paint-editor-snackbar-container{z-index:var(--react-paint-editor-snackbar-zindex);flex-direction:column-reverse;align-items:center;height:0;display:flex;position:absolute;bottom:0;left:0;right:0}.react-paint-editor-snackbar{color:#fff;overflow-wrap:break-word;box-sizing:border-box;transition:all var(--react-paint-editor-panel-transition-duration);opacity:0;max-width:calc(100% - 24px);margin:4px;padding:12px 48px;display:inline-block;transform:translateY(40px)}.react-paint-editor-snackbar[data-type=infos]{background:#646464}.react-paint-editor-snackbar[data-type=error]{background:#911717}.react-paint-editor-snackbar[data-type=success]{background:#088900}.react-paint-editor-snackbar[data-is-shown="1"]{opacity:1;transform:translate(0,0)}.react-paint-editor-snackbar[data-is-shown="0"]{opacity:0;transform:translateY(40px)}.react-paint-editor-loading{z-index:var(--react-paint-editor-loading-zindex);transition:opacity var(--react-paint-editor-loading-transition-duration)linear;opacity:0;background:rgba(0,0,0,.314);justify-content:center;align-items:center;display:flex;position:absolute;top:0;bottom:0;left:0;right:0}.react-paint-editor-loading[data-loading=visible]{opacity:1}@keyframes react-paint-editor-loading-rotation{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.react-paint-editor-loader{width:40px;height:40px;animation:1s infinite react-paint-editor-loading-rotation;position:relative;transform:rotate(10deg)}.react-paint-editor-loader>div{border-radius:50%;width:15px;height:15px;position:absolute}.react-paint-editor-loader>div:first-child{background-color:#5c6bc0;left:0}.react-paint-editor-loader>div:nth-child(2){background-color:#8bc34a;right:0}.react-paint-editor-loader>div:nth-child(3){background-color:#ffb74d;bottom:0}.react-paint-editor-loader>div:nth-child(4){background-color:#f44336;bottom:0;right:0}.react-paint-editor-app{color:var(--react-paint-editor-app-font-color);flex-direction:column;display:flex;position:relative}.react-paint-editor-app hr{border:none;border-top:1px solid var(--react-paint-editor-app-divider-color);width:100%}.react-paint-editor-app[data-grow=false]{max-width:min(100%,var(--react-paint-editor-app-canvaswidth))}.react-paint-editor-app[data-shrink=false]{min-width:var(--react-paint-editor-app-canvaswidth)}.react-paint-editor-app-row{z-index:var(--react-paint-editor-app-row-zindex);aspect-ratio:var(--react-paint-editor-app-row-aspectratio);flex-direction:row;max-width:100%;display:flex;position:relative}.react-paint-editor-app-row[data-grow=true]{width:100%}.react-paint-editor-app-row[data-grow=false]{width:var(--react-paint-editor-app-row-width)}
|