@yorab/react-paint 0.7.5 → 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.
Files changed (149) hide show
  1. package/dist/components/App.d.ts +20 -0
  2. package/dist/components/Canvas.d.ts +38 -0
  3. package/dist/components/common/Button.d.ts +16 -0
  4. package/dist/components/common/Loading.d.ts +7 -0
  5. package/dist/components/common/Modal.d.ts +10 -0
  6. package/dist/components/common/Panel.d.ts +13 -0
  7. package/dist/components/common/Snackbar.d.ts +8 -0
  8. package/dist/components/settings/ColorField.d.ts +15 -0
  9. package/dist/components/settings/DeleteButton.d.ts +9 -0
  10. package/dist/components/settings/FontFamilyField.d.ts +12 -0
  11. package/dist/components/settings/LayoutButton.d.ts +8 -0
  12. package/dist/components/settings/Layouts.d.ts +19 -0
  13. package/dist/components/settings/LineArrowField.d.ts +12 -0
  14. package/dist/components/settings/LineTypeField.d.ts +16 -0
  15. package/dist/components/settings/PointsNumberField.d.ts +13 -0
  16. package/dist/components/settings/RangeField.d.ts +18 -0
  17. package/dist/components/settings/SelectField.d.ts +18 -0
  18. package/dist/components/settings/SettingsBar.d.ts +19 -0
  19. package/dist/components/settings/ToggleField.d.ts +12 -0
  20. package/dist/components/toolbox/EditTextBox.d.ts +14 -0
  21. package/dist/components/toolbox/LoadFileTool.d.ts +12 -0
  22. package/dist/components/toolbox/MenuGroup.d.ts +35 -0
  23. package/dist/components/toolbox/PictureUrlInput.d.ts +8 -0
  24. package/dist/components/toolbox/Tool.d.ts +12 -0
  25. package/dist/components/toolbox/Toolbar.d.ts +27 -0
  26. package/dist/components/toolbox/ToolbarGroup.d.ts +18 -0
  27. package/dist/constants/app.d.ts +41 -0
  28. package/dist/constants/icons.d.ts +41 -0
  29. package/dist/constants/loading.d.ts +1 -0
  30. package/dist/constants/picture.d.ts +1 -0
  31. package/dist/constants/shapes.d.ts +8 -0
  32. package/dist/constants/snackbar.d.ts +7 -0
  33. package/dist/constants/style.d.ts +17 -0
  34. package/dist/constants/tools.d.ts +32 -0
  35. package/dist/hooks/useComponent.d.ts +9 -0
  36. package/dist/hooks/useDoubleClick.d.ts +5 -0
  37. package/dist/hooks/useDrag.d.ts +15 -0
  38. package/dist/hooks/useDrawableCanvas.d.ts +37 -0
  39. package/dist/hooks/useKeyboard.d.ts +18 -0
  40. package/dist/hooks/useResizeObserver.d.ts +7 -0
  41. package/dist/hooks/useShapes.d.ts +22 -0
  42. package/dist/hooks/useSnackbar.d.ts +10 -0
  43. package/dist/react-paint.css +1 -0
  44. package/dist/react-paint.js +9109 -0
  45. package/dist/react-paint.umd.cjs +53 -0
  46. package/dist/types/Mode.d.ts +43 -0
  47. package/dist/types/Shapes.d.ts +112 -0
  48. package/dist/types/snackbar.d.ts +7 -0
  49. package/dist/types/tools.d.ts +124 -0
  50. package/dist/types/utils.d.ts +3 -0
  51. package/dist/utils/canvas.d.ts +10 -0
  52. package/dist/utils/data.d.ts +225 -0
  53. package/dist/utils/dom.d.ts +1 -0
  54. package/dist/utils/file.d.ts +10 -0
  55. package/dist/utils/intersect.d.ts +6 -0
  56. package/dist/utils/migration.d.ts +165 -0
  57. package/dist/utils/selection.d.ts +7 -0
  58. package/dist/utils/shapes/brush.d.ts +55 -0
  59. package/dist/utils/shapes/circle.d.ts +13 -0
  60. package/dist/utils/shapes/curve.d.ts +11 -0
  61. package/dist/utils/shapes/default.d.ts +10 -0
  62. package/dist/utils/shapes/ellipse.d.ts +13 -0
  63. package/dist/utils/shapes/grid.d.ts +3 -0
  64. package/dist/utils/shapes/index.d.ts +245 -0
  65. package/dist/utils/shapes/line.d.ts +23 -0
  66. package/dist/utils/shapes/picture.d.ts +6 -0
  67. package/dist/utils/shapes/polygon.d.ts +11 -0
  68. package/dist/utils/shapes/rectangle.d.ts +26 -0
  69. package/dist/utils/shapes/text.d.ts +48 -0
  70. package/dist/utils/shapes/triangle.d.ts +2 -0
  71. package/dist/utils/string.d.ts +3 -0
  72. package/dist/utils/style.d.ts +2 -0
  73. package/dist/utils/toolbar.d.ts +13 -0
  74. package/dist/utils/transform.d.ts +8 -0
  75. package/dist/utils/trigo.d.ts +10 -0
  76. package/package.json +51 -56
  77. package/dist/components/App.js +0 -496
  78. package/dist/components/Canvas.js +0 -194
  79. package/dist/components/common/Button.js +0 -88
  80. package/dist/components/common/Loading.js +0 -57
  81. package/dist/components/common/Modal.js +0 -46
  82. package/dist/components/common/Panel.js +0 -43
  83. package/dist/components/common/Snackbar.js +0 -68
  84. package/dist/components/settings/ColorField.js +0 -125
  85. package/dist/components/settings/DeleteButton.js +0 -37
  86. package/dist/components/settings/FontFamilyField.js +0 -67
  87. package/dist/components/settings/LayoutButton.js +0 -39
  88. package/dist/components/settings/Layouts.js +0 -214
  89. package/dist/components/settings/LineArrowField.js +0 -67
  90. package/dist/components/settings/LineTypeField.js +0 -65
  91. package/dist/components/settings/PointsNumberField.js +0 -45
  92. package/dist/components/settings/RangeField.js +0 -82
  93. package/dist/components/settings/SelectField.js +0 -81
  94. package/dist/components/settings/SettingsBar.js +0 -383
  95. package/dist/components/settings/ToggleField.js +0 -49
  96. package/dist/components/toolbox/EditTextBox.js +0 -138
  97. package/dist/components/toolbox/LoadFileTool.js +0 -58
  98. package/dist/components/toolbox/MenuGroup.js +0 -173
  99. package/dist/components/toolbox/PictureUrlInput.js +0 -68
  100. package/dist/components/toolbox/Tool.js +0 -41
  101. package/dist/components/toolbox/Toolbar.js +0 -203
  102. package/dist/components/toolbox/ToolbarGroup.js +0 -134
  103. package/dist/constants/app.js +0 -51
  104. package/dist/constants/icons.js +0 -88
  105. package/dist/constants/loading.js +0 -8
  106. package/dist/constants/picture.js +0 -8
  107. package/dist/constants/shapes.js +0 -20
  108. package/dist/constants/snackbar.js +0 -15
  109. package/dist/constants/style.js +0 -35
  110. package/dist/constants/tools.js +0 -424
  111. package/dist/hooks/useComponent.js +0 -47
  112. package/dist/hooks/useDoubleClick.js +0 -46
  113. package/dist/hooks/useDrag.js +0 -92
  114. package/dist/hooks/useDrawableCanvas.js +0 -230
  115. package/dist/hooks/useKeyboard.js +0 -142
  116. package/dist/hooks/useResizeObserver.js +0 -42
  117. package/dist/hooks/useShapes.js +0 -184
  118. package/dist/hooks/useSnackbar.js +0 -56
  119. package/dist/styles.css +0 -91
  120. package/dist/types/Mode.js +0 -5
  121. package/dist/types/Shapes.js +0 -5
  122. package/dist/types/snackbar.js +0 -5
  123. package/dist/types/tools.js +0 -5
  124. package/dist/types/utils.js +0 -5
  125. package/dist/utils/canvas.js +0 -49
  126. package/dist/utils/data.js +0 -49
  127. package/dist/utils/dom.js +0 -12
  128. package/dist/utils/file.js +0 -171
  129. package/dist/utils/intersect.js +0 -122
  130. package/dist/utils/migration.js +0 -59
  131. package/dist/utils/selection.js +0 -86
  132. package/dist/utils/shapes/brush.js +0 -135
  133. package/dist/utils/shapes/circle.js +0 -93
  134. package/dist/utils/shapes/curve.js +0 -55
  135. package/dist/utils/shapes/default.js +0 -73
  136. package/dist/utils/shapes/ellipse.js +0 -101
  137. package/dist/utils/shapes/grid.js +0 -36
  138. package/dist/utils/shapes/index.js +0 -341
  139. package/dist/utils/shapes/line.js +0 -179
  140. package/dist/utils/shapes/picture.js +0 -103
  141. package/dist/utils/shapes/polygon.js +0 -69
  142. package/dist/utils/shapes/rectangle.js +0 -100
  143. package/dist/utils/shapes/text.js +0 -128
  144. package/dist/utils/shapes/triangle.js +0 -24
  145. package/dist/utils/string.js +0 -36
  146. package/dist/utils/style.js +0 -46
  147. package/dist/utils/toolbar.js +0 -78
  148. package/dist/utils/transform.js +0 -109
  149. package/dist/utils/trigo.js +0 -42
package/package.json CHANGED
@@ -1,78 +1,73 @@
1
1
  {
2
2
  "name": "@yorab/react-paint",
3
- "version": "0.7.5",
3
+ "version": "0.8.0",
4
+ "type": "module",
4
5
  "keywords": [],
5
6
  "author": "Yohann Rabatel",
6
7
  "license": "MIT",
7
- "main": "./dist/components/App.js",
8
+ "main": "./dist/react-paint.js",
9
+ "module": "./dist/react-paint.umd.cjs",
8
10
  "types": "./dist/components/App.d.ts",
11
+ "exports": {
12
+ ".": {
13
+ "import": "./dist/react-paint.js",
14
+ "require": "./dist/react-paint.umd.cjs",
15
+ "types": "./dist/components/App.d.ts"
16
+ },
17
+ "./react-paint.css": "./dist/react-paint.css"
18
+ },
9
19
  "files": [
10
20
  "README.md",
21
+ "LICENSE.txt",
11
22
  "package.json",
12
23
  "dist/"
13
24
  ],
14
25
  "dependencies": {
15
- "@linaria/react": "3.0.0-beta.22",
16
- "lodash": "^4.17.20"
26
+ "lodash": "4.17.21"
17
27
  },
18
28
  "devDependencies": {
19
- "@babel/cli": "7.12.8",
20
- "@babel/core": "^7.16.7",
21
- "@babel/plugin-transform-runtime": "^7.16.8",
22
- "@babel/preset-env": "^7.16.8",
23
- "@babel/preset-react": "^7.16.7",
24
- "@babel/preset-typescript": "^7.16.7",
25
- "@babel/runtime": "^7.16.7",
26
- "@linaria/babel-preset": "3.0.0-beta.22",
27
- "@linaria/core": "3.0.0-beta.22",
28
- "@linaria/webpack-loader": "3.0.0-beta.22",
29
- "@linaria/shaker": "^3.0.0-beta.22",
30
- "@testing-library/jest-dom": "^5.11.4",
31
- "@testing-library/react": "^11.1.0",
32
- "@testing-library/user-event": "^12.1.10",
33
- "@types/jest": "^26.0.15",
34
- "@types/lodash": "4.14.170",
35
- "@types/node": "^12.0.0",
36
- "@types/react": "^18.0.10",
37
- "@types/react-dom": "^18.0.5",
38
- "@typescript-eslint/eslint-plugin": "4.28.0",
39
- "@typescript-eslint/parser": "4.28.0",
40
- "babel-jest": "^27.4.6",
41
- "babel-loader": "^8.2.3",
42
- "babel-plugin-module-resolver": "^4.1.0",
43
- "css-loader": "^6.7.0",
44
- "eslint": "7.29.0",
45
- "eslint-config-prettier": "^8.3.0",
46
- "eslint-import-resolver-typescript": "2.4.0",
47
- "eslint-plugin-import": "2.23.4",
48
- "eslint-plugin-prettier": "^3.4.0",
49
- "eslint-plugin-react-hooks": "^4.2.0",
50
- "html-webpack-plugin": "^5.5.0",
51
- "mini-css-extract-plugin": "^2.6.0",
52
- "prettier": "^2.3.2",
53
- "react": "18.1.0",
54
- "react-dom": "18.1.0",
55
- "typescript": "^4.7.2",
56
- "webpack": "^5.66.0",
57
- "webpack-cli": "^4.9.1",
58
- "webpack-dev-server": "^4.7.3"
29
+ "@storybook/addon-essentials": "7.1.1",
30
+ "@storybook/addon-interactions": "7.1.1",
31
+ "@storybook/addon-links": "7.1.1",
32
+ "@storybook/addon-onboarding": "1.0.8",
33
+ "@storybook/blocks": "7.1.1",
34
+ "@storybook/react": "7.1.1",
35
+ "@storybook/react-vite": "7.1.1",
36
+ "@storybook/testing-library": "0.2.0",
37
+ "@types/lodash": "4.14.196",
38
+ "@types/node": "20.4.5",
39
+ "@types/react": "18.2.17",
40
+ "@types/react-dom": "18.2.7",
41
+ "@typescript-eslint/eslint-plugin": "6.0.0",
42
+ "@typescript-eslint/parser": "6.0.0",
43
+ "@vitejs/plugin-react": "4.0.3",
44
+ "eslint": "8.45.0",
45
+ "eslint-config-prettier": "8.9.0",
46
+ "eslint-import-resolver-typescript": "3.5.5",
47
+ "eslint-plugin-import": "2.28.0",
48
+ "eslint-plugin-prettier": "5.0.0",
49
+ "eslint-plugin-react-hooks": "4.6.0",
50
+ "eslint-plugin-storybook": "0.6.13",
51
+ "lightningcss": "1.21.5",
52
+ "prettier": "3.0.0",
53
+ "react": "18.2.0",
54
+ "react-dom": "18.2.0",
55
+ "storybook": "7.1.1",
56
+ "typescript": "5.1.6",
57
+ "vite": "4.4.5",
58
+ "vite-tsconfig-paths": "4.2.0"
59
59
  },
60
60
  "peerDependencies": {
61
- "react": "*",
62
- "react-dom": "*"
61
+ "react": "18.x",
62
+ "react-dom": "18.x"
63
63
  },
64
64
  "scripts": {
65
65
  "declarationfiles": "tsc --project tsconfig.prod.json",
66
- "start": "webpack serve --config webpack.config.js --open",
66
+ "start": "storybook dev -p 6006",
67
+ "build-storybook": "storybook build",
67
68
  "test": "echo \"Error: no test specified\" && exit 1",
68
- "buildexamples": "webpack --config webpack.prod.config.js",
69
- "build": "npx babel src/ --extensions '.js,.ts,.tsx,.jsx' --copy-files --delete-dir-on-start -d dist",
70
- "buildwithcss": "npm run build && npm run buildexamples && mv build/styles.css dist/styles.css",
71
- "publish": "npm run buildwithcss && npm publish --access public"
72
- },
73
- "jest": {
74
- "transform": {
75
- "^.+\\.[t|j]sx?$": "babel-jest"
76
- }
69
+ "build": "vite build && npm run declarationfiles",
70
+ "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
71
+ "publishnpm": "npm run build && npm publish --access public"
77
72
  }
78
73
  }
@@ -1,496 +0,0 @@
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 _react = _interopRequireWildcard(require("react"));
11
-
12
- var _Canvas = _interopRequireDefault(require("./Canvas"));
13
-
14
- var _Layouts = _interopRequireDefault(require("./settings/Layouts"));
15
-
16
- var _Toolbar = _interopRequireDefault(require("./toolbox/Toolbar"));
17
-
18
- var _react2 = require("@linaria/react");
19
-
20
- var _SettingsBar = _interopRequireDefault(require("./settings/SettingsBar"));
21
-
22
- var _style = require("../constants/style");
23
-
24
- var _useKeyboard = _interopRequireDefault(require("../hooks/useKeyboard"));
25
-
26
- var _file = require("../utils/file");
27
-
28
- var _useComponent = _interopRequireDefault(require("../hooks/useComponent"));
29
-
30
- var _useShapes = _interopRequireDefault(require("../hooks/useShapes"));
31
-
32
- var _Snackbar = _interopRequireDefault(require("./common/Snackbar"));
33
-
34
- var _useSnackbar = _interopRequireDefault(require("../hooks/useSnackbar"));
35
-
36
- var _Loading = _interopRequireDefault(require("./common/Loading"));
37
-
38
- var _data = require("../utils/data");
39
-
40
- var _useResizeObserver = _interopRequireDefault(require("../hooks/useResizeObserver"));
41
-
42
- var _toolbar = require("../utils/toolbar");
43
-
44
- var _tools = require("../constants/tools");
45
-
46
- var _fp = _interopRequireDefault(require("lodash/fp"));
47
-
48
- var _app = require("../constants/app");
49
-
50
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
51
-
52
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
53
-
54
- const StyledApp = /*#__PURE__*/(0, _react2.styled)('div')({
55
- name: "StyledApp",
56
- class: "s1v9piyg",
57
- vars: {
58
- "s1v9piyg-0": [props => props.toolbarBackgroundColor],
59
- "s1v9piyg-1": [props => props.dividerColor],
60
- "s1v9piyg-2": [props => props.fontRadius, "px"],
61
- "s1v9piyg-3": [props => props.fontDisabledColor],
62
- "s1v9piyg-4": [props => props.fontDisabledBackgroundColor],
63
- "s1v9piyg-5": [props => props.fontColor],
64
- "s1v9piyg-6": [props => props.fontBackgroundColor],
65
- "s1v9piyg-7": [props => props.fontSelectedColor],
66
- "s1v9piyg-8": [props => props.fontSelectedBackgroundColor],
67
- "s1v9piyg-9": [props => props.fontHoverColor],
68
- "s1v9piyg-10": [props => props.fontHoverBackgroundColor],
69
- "s1v9piyg-11": [props => props.canvasBackgroundColor],
70
- "s1v9piyg-12": [_ref => {
71
- let {
72
- canvasWidth
73
- } = _ref;
74
- return "min(100%, ".concat(canvasWidth, "px)");
75
- }],
76
- "s1v9piyg-13": [_ref2 => {
77
- let {
78
- canvasWidth
79
- } = _ref2;
80
- return canvasWidth;
81
- }, "px"]
82
- }
83
- });
84
- const StyledRow = /*#__PURE__*/(0, _react2.styled)('div')({
85
- name: "StyledRow",
86
- class: "s6o5tmu",
87
- vars: {
88
- "s6o5tmu-0": [_ref3 => {
89
- let {
90
- width
91
- } = _ref3;
92
- return width;
93
- }, "px"],
94
- "s6o5tmu-1": [_ref4 => {
95
- let {
96
- aspectRatio
97
- } = _ref4;
98
- return aspectRatio;
99
- }]
100
- }
101
- });
102
-
103
- const App = _ref5 => {
104
- var _options$uiStyle;
105
-
106
- let {
107
- width: canvasWidth = 1000,
108
- height: canvasHeight = 600,
109
- shapes: shapesFromProps,
110
- className: classNameFromProps,
111
- mode = 'editor',
112
- disabled: disabledFromProps = false,
113
- onDataChanged,
114
- apiRef,
115
- options
116
- } = _ref5;
117
- const {
118
- layersManipulation,
119
- grid,
120
- canGrow,
121
- canShrink,
122
- withExport,
123
- withLoadAndSave,
124
- withUploadPicture,
125
- withUrlPicture,
126
- clearCallback,
127
- availableTools: availableToolsFromProps
128
- } = { ..._app.DEFAULT_OPTIONS,
129
- ...options
130
- };
131
- const {
132
- toolbarBackgroundColor,
133
- dividerColor,
134
- fontRadius,
135
- fontDisabledColor,
136
- fontDisabledBackgroundColor,
137
- fontColor,
138
- fontBackgroundColor,
139
- fontSelectedColor,
140
- fontSelectedBackgroundColor,
141
- fontHoverColor,
142
- fontHoverBackgroundColor,
143
- canvasBackgroundColor,
144
- canvasSelectionColor,
145
- canvasSelectionWidth // canvasSelectionPadding
146
-
147
- } = { ..._app.DEFAULT_OPTIONS.uiStyle,
148
- ...((_options$uiStyle = options === null || options === void 0 ? void 0 : options.uiStyle) !== null && _options$uiStyle !== void 0 ? _options$uiStyle : {})
149
- };
150
- const isEditMode = mode !== 'viewer';
151
- const disabled = disabledFromProps || !isEditMode;
152
- const componentRef = (0, _react.useRef)(null);
153
- const canvasRef = (0, _react.useRef)(null);
154
- const [canvasSize, setCanvasSize] = (0, _react.useState)({
155
- width: canvasWidth,
156
- height: canvasHeight,
157
- scaleRatio: 1
158
- });
159
- const canvasSelectionPadding = 0; // selection padding should not be larger than 0 until shape resizing is refactored
160
-
161
- const [availableTools, setAvailableTools] = (0, _react.useState)((0, _toolbar.sanitizeTools)(availableToolsFromProps, withUploadPicture || withUrlPicture));
162
- (0, _react.useEffect)(() => {
163
- setAvailableTools((0, _toolbar.sanitizeTools)(availableToolsFromProps, withUploadPicture || withUrlPicture));
164
- }, [availableToolsFromProps, withUploadPicture, withUrlPicture]);
165
- const {
166
- isInsideComponent
167
- } = (0, _useComponent.default)({
168
- disabled,
169
- componentRef
170
- });
171
- const [isLoading, setIsLoading] = (0, _react.useState)(false);
172
- const [isLayoutPanelShown, setIsLayoutPanelShown] = (0, _react.useState)(false);
173
- const [canvasOffset, setCanvasOffset] = (0, _react.useState)([0, 0]);
174
- const [canvasOffsetStartPosition, setCanvasOffsetStartPosition] = (0, _react.useState)(undefined);
175
- const [activeTool, setActiveTool] = (0, _react.useState)(_tools.SELECTION_TOOL);
176
- const [selectionMode, setSelectionMode] = (0, _react.useState)({
177
- mode: 'default'
178
- });
179
- const [gridFormat, setGridFormat] = (0, _react.useState)(grid);
180
- const [isShiftPressed, setShiftPressed] = (0, _react.useState)(false);
181
- const {
182
- shapesRef,
183
- selectedShape,
184
- addShape,
185
- addPictureShape,
186
- moveShapes,
187
- setSelectedShape,
188
- removeShape,
189
- updateShape,
190
- backwardShape,
191
- forwardShape,
192
- clearShapes,
193
- saveShapes,
194
- toggleShapeVisibility,
195
- toggleShapeLock,
196
- canGoBackward,
197
- canGoForward,
198
- canClear
199
- } = (0, _useShapes.default)(onDataChanged);
200
- const {
201
- snackbarList,
202
- addSnackbar
203
- } = (0, _useSnackbar.default)();
204
- const selectTool = (0, _react.useCallback)(tool => {
205
- setSelectedShape(undefined);
206
- setActiveTool(tool);
207
- }, [setSelectedShape]);
208
- const updateToolSettings = (0, _react.useCallback)((toolId, field, value) => {
209
- setAvailableTools(availableTools => availableTools.map(tool => tool.id === toolId ? _fp.default.set(['settings', field, 'default'], value, tool) : tool));
210
- setActiveTool(activeTool => activeTool.id === toolId ? _fp.default.set(['settings', field, 'default'], value, activeTool) : activeTool);
211
- }, []);
212
- const undoAction = (0, _react.useCallback)(() => {
213
- selectTool(_tools.SELECTION_TOOL);
214
- backwardShape();
215
- }, [selectTool, backwardShape]);
216
- const redoAction = (0, _react.useCallback)(() => {
217
- selectTool(_tools.SELECTION_TOOL);
218
- forwardShape();
219
- }, [selectTool, forwardShape]);
220
- const resetCanvas = (0, _react.useCallback)(function () {
221
- let shapesToInit = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
222
- let clearHistory = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
223
- clearShapes(shapesToInit, clearHistory);
224
- selectTool(_tools.SELECTION_TOOL);
225
- setCanvasOffset([0, 0]);
226
- }, [selectTool, clearShapes]);
227
- const loadImportedData = (0, _react.useCallback)(async function (json) {
228
- let clearHistory = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
229
- const shapes = await (0, _file.decodeImportedData)(json);
230
- resetCanvas(shapes, clearHistory);
231
- }, [resetCanvas]);
232
- const clearCanvas = (0, _react.useCallback)(() => {
233
- if (typeof clearCallback !== 'string') {
234
- void loadImportedData({
235
- shapes: clearCallback()
236
- }, false);
237
- } else {
238
- if (clearCallback === 'defaultShapes' && shapesFromProps !== undefined) {
239
- void loadImportedData({
240
- shapes: shapesFromProps
241
- }, false);
242
- } else {
243
- resetCanvas();
244
- }
245
- }
246
- }, [resetCanvas, loadImportedData, shapesFromProps, clearCallback]);
247
- const selectShape = (0, _react.useCallback)(shape => {
248
- setActiveTool(_tools.SELECTION_TOOL);
249
- setSelectedShape(shape);
250
- }, [setSelectedShape]);
251
- const pasteShape = (0, _react.useCallback)(shape => {
252
- addShape(shape);
253
- selectShape(shape);
254
- }, [addShape, selectShape]);
255
- const exportCanvasInFile = (0, _react.useCallback)(() => {
256
- setIsLoading(true);
257
-
258
- try {
259
- const dataURL = canvasRef.current && (0, _file.getCanvasImage)(shapesRef.current, canvasOffset, canvasWidth, canvasHeight, canvasSelectionPadding);
260
-
261
- if (!dataURL) {
262
- throw new Error();
263
- }
264
-
265
- (0, _file.downloadFile)(dataURL, 'drawing.png');
266
- setIsLoading(false);
267
- } catch (e) {
268
- if (e instanceof Error) {
269
- addSnackbar({
270
- type: 'error',
271
- text: "L'export a échoué"
272
- });
273
- }
274
-
275
- console.warn(e);
276
- } finally {
277
- setIsLoading(false);
278
- }
279
- }, [addSnackbar, shapesRef, canvasOffset, canvasWidth, canvasHeight, canvasSelectionPadding]);
280
- const saveFile = (0, _react.useCallback)(() => {
281
- setIsLoading(true);
282
-
283
- try {
284
- const content = (0, _file.encodeShapesInString)(shapesRef.current, canvasWidth, canvasHeight);
285
-
286
- if (!content) {
287
- throw new Error("L'encodage a échoué");
288
- }
289
-
290
- (0, _file.downloadFile)(content, 'drawing.json');
291
- setIsLoading(false);
292
- } catch (e) {
293
- if (e instanceof Error) {
294
- addSnackbar({
295
- type: 'error',
296
- text: "L'enregistrement a échoué"
297
- });
298
- }
299
-
300
- console.warn(e);
301
- } finally {
302
- setIsLoading(false);
303
- }
304
- }, [shapesRef, addSnackbar, canvasWidth, canvasHeight]);
305
- const loadFile = (0, _react.useCallback)(async file => {
306
- setIsLoading(true);
307
-
308
- try {
309
- const json = await (0, _file.decodeJson)(file);
310
- await loadImportedData(json);
311
- addSnackbar({
312
- type: 'success',
313
- text: 'Fichier chargé !'
314
- });
315
- } catch (e) {
316
- if (e instanceof Error) {
317
- addSnackbar({
318
- type: 'error',
319
- text: 'Le chargement a échoué'
320
- });
321
- }
322
-
323
- console.warn(e);
324
- } finally {
325
- setIsLoading(false);
326
- }
327
- }, [loadImportedData, addSnackbar]);
328
- const addPicture = (0, _react.useCallback)(async fileOrUrl => {
329
- setIsLoading(true);
330
-
331
- try {
332
- const pictureShape = await addPictureShape(fileOrUrl, canvasWidth, canvasHeight);
333
- selectShape(pictureShape);
334
- } catch (e) {
335
- if (e instanceof Error) {
336
- addSnackbar({
337
- type: 'error',
338
- text: 'Le chargement a échoué'
339
- });
340
- }
341
-
342
- console.warn(e);
343
- } finally {
344
- setIsLoading(false);
345
- }
346
- }, [addPictureShape, selectShape, addSnackbar, canvasWidth, canvasHeight]);
347
- const onResized = (0, _react.useCallback)(measuredWidth => {
348
- const scaleRatio = measuredWidth / canvasWidth;
349
- setCanvasSize({
350
- width: measuredWidth,
351
- height: canvasHeight * scaleRatio,
352
- scaleRatio
353
- });
354
- }, [canvasWidth, canvasHeight]);
355
- (0, _useKeyboard.default)({
356
- isInsideComponent,
357
- gridFormat,
358
- isEditingText: selectionMode.mode === 'textedition',
359
- selectedShape,
360
- setSelectedShape,
361
- removeShape,
362
- pasteShape,
363
- updateShape,
364
- backwardShape,
365
- forwardShape,
366
- setShiftPressed
367
- });
368
- (0, _useResizeObserver.default)({
369
- element: componentRef,
370
- onResized
371
- });
372
- (0, _react.useEffect)(() => {
373
- if (!isInsideComponent) setSelectedShape(undefined);
374
- }, [isInsideComponent, setSelectedShape]);
375
- (0, _react.useEffect)(() => {
376
- if (shapesFromProps !== undefined) {
377
- void loadImportedData({
378
- shapes: shapesFromProps
379
- });
380
- }
381
- }, [loadImportedData, shapesFromProps]);
382
- (0, _react.useEffect)(() => {
383
- if (!apiRef) return;
384
- apiRef.current = {
385
- getCurrentImage: () => {
386
- return canvasRef.current ? (0, _file.getCanvasImage)(shapesRef.current, canvasOffset, canvasWidth, canvasHeight, canvasSelectionPadding) : undefined;
387
- },
388
- getCurrentData: () => {
389
- return (0, _data.buildDataToExport)(shapesRef.current, canvasWidth, canvasHeight);
390
- }
391
- };
392
- }, [apiRef, shapesRef, canvasOffset, canvasWidth, canvasHeight, canvasSelectionPadding]);
393
- const className = "".concat(classNameFromProps !== null && classNameFromProps !== void 0 ? classNameFromProps : '', " ").concat(isLayoutPanelShown ? 'layoutPanelOpened' : '');
394
- return /*#__PURE__*/_react.default.createElement(StyledApp, {
395
- ref: componentRef,
396
- className: className,
397
- "data-grow": canGrow,
398
- "data-shrink": canShrink,
399
- canvasWidth: canvasWidth,
400
- toolbarBackgroundColor: toolbarBackgroundColor,
401
- dividerColor: dividerColor,
402
- fontRadius: fontRadius,
403
- fontDisabledColor: fontDisabledColor,
404
- fontDisabledBackgroundColor: fontDisabledBackgroundColor,
405
- fontColor: fontColor,
406
- fontBackgroundColor: fontBackgroundColor,
407
- fontSelectedColor: fontSelectedColor,
408
- fontSelectedBackgroundColor: fontSelectedBackgroundColor,
409
- fontHoverColor: fontHoverColor,
410
- fontHoverBackgroundColor: fontHoverBackgroundColor,
411
- canvasBackgroundColor: canvasBackgroundColor
412
- }, isEditMode && /*#__PURE__*/_react.default.createElement(_Toolbar.default, {
413
- width: canvasSize.width,
414
- disabled: disabled,
415
- activeTool: activeTool,
416
- clearCanvas: clearCanvas,
417
- setActiveTool: selectTool,
418
- exportCanvasInFile: exportCanvasInFile,
419
- saveFile: saveFile,
420
- loadFile: loadFile,
421
- addPicture: addPicture,
422
- hasActionToUndo: canGoBackward,
423
- hasActionToRedo: canGoForward,
424
- hasActionToClear: canClear,
425
- undoAction: undoAction,
426
- redoAction: redoAction,
427
- availableTools: availableTools,
428
- withExport: withExport,
429
- withLoadAndSave: withLoadAndSave,
430
- withUploadPicture: withUploadPicture,
431
- withUrlPicture: withUrlPicture
432
- }), /*#__PURE__*/_react.default.createElement(StyledRow, {
433
- "data-grow": canGrow,
434
- width: canvasSize.width,
435
- aspectRatio: "calc(".concat(canvasSize.width, " / ").concat(canvasSize.height, ")")
436
- }, /*#__PURE__*/_react.default.createElement(_Canvas.default, {
437
- canGrow: canGrow,
438
- gridFormat: gridFormat,
439
- disabled: disabled,
440
- isInsideComponent: isInsideComponent,
441
- activeTool: activeTool,
442
- setActiveTool: setActiveTool,
443
- canvasOffsetStartPosition: canvasOffsetStartPosition,
444
- setCanvasOffsetStartPosition: setCanvasOffsetStartPosition,
445
- shapes: shapesRef.current,
446
- addShape: addShape,
447
- updateSingleShape: updateShape,
448
- selectedShape: selectedShape,
449
- setSelectedShape: setSelectedShape,
450
- canvasOffset: canvasOffset,
451
- setCanvasOffset: setCanvasOffset,
452
- saveShapes: saveShapes,
453
- ref: canvasRef,
454
- canvasSize: canvasSize,
455
- selectionMode: selectionMode,
456
- setSelectionMode: setSelectionMode,
457
- selectionColor: canvasSelectionColor,
458
- selectionWidth: canvasSelectionWidth,
459
- selectionPadding: canvasSelectionPadding,
460
- isEditMode: isEditMode,
461
- isShiftPressed: isShiftPressed
462
- }), isEditMode && layersManipulation && /*#__PURE__*/_react.default.createElement(_Layouts.default, {
463
- gridFormat: gridFormat,
464
- setGridFormat: setGridFormat,
465
- disabled: disabled,
466
- shapes: shapesRef.current,
467
- moveShapes: moveShapes,
468
- selectedShape: selectedShape,
469
- removeShape: removeShape,
470
- selectShape: selectShape,
471
- toggleShapeVisibility: toggleShapeVisibility,
472
- toggleShapeLock: toggleShapeLock,
473
- isLayoutPanelShown: isLayoutPanelShown
474
- })), isEditMode && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_SettingsBar.default, {
475
- width: canvasSize.width,
476
- disabled: disabled,
477
- activeTool: activeTool,
478
- availableTools: availableTools,
479
- selectedShape: selectedShape,
480
- removeShape: removeShape,
481
- updateShape: updateShape,
482
- canvas: canvasRef.current,
483
- layersManipulation: layersManipulation,
484
- toggleLayoutPanel: () => {
485
- setIsLayoutPanelShown(prev => !prev);
486
- },
487
- updateToolSettings: updateToolSettings
488
- }), /*#__PURE__*/_react.default.createElement(_Loading.default, {
489
- isLoading: isLoading
490
- }), /*#__PURE__*/_react.default.createElement(_Snackbar.default, {
491
- snackbarList: snackbarList
492
- })));
493
- };
494
-
495
- var _default = App;
496
- exports.default = _default;