@yorab/react-paint 0.10.1 → 0.11.1
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/README.md +191 -1
- package/dist/{components → canvas/components}/Canvas.d.ts +4 -4
- package/dist/{components/toolbox → canvas/components}/EditTextBox.d.ts +3 -4
- package/dist/canvas/constants/app.d.ts +44 -0
- package/dist/canvas/constants/grid.d.ts +1 -0
- package/dist/{constants → canvas/constants}/shapes.d.ts +1 -1
- package/dist/{hooks → canvas/hooks}/useComponent.d.ts +1 -1
- package/dist/{hooks → canvas/hooks}/useDrawableCanvas.d.ts +5 -5
- package/dist/{hooks → canvas/hooks}/useKeyboard.d.ts +2 -2
- package/dist/canvas/hooks/useReactPaint.d.ts +119 -0
- package/dist/{hooks → canvas/hooks}/useShapes.d.ts +9 -4
- package/dist/canvas/index.d.ts +15 -0
- package/dist/{utils → canvas/utils}/canvas.d.ts +2 -2
- package/dist/{utils → canvas/utils}/data.d.ts +4 -4
- package/dist/{utils → canvas/utils}/file.d.ts +3 -3
- package/dist/{utils → canvas/utils}/grid.d.ts +1 -1
- package/dist/{utils → canvas/utils}/intersect.d.ts +3 -3
- package/dist/{utils → canvas/utils}/selection/lineSelection.d.ts +2 -2
- package/dist/{utils → canvas/utils}/selection/rectSelection.d.ts +3 -3
- package/dist/canvas/utils/selection/selectionFrame.d.ts +3 -0
- package/dist/{utils → canvas/utils}/selection.d.ts +3 -3
- package/dist/{utils → canvas/utils}/shapes/brush.d.ts +4 -4
- package/dist/{utils → canvas/utils}/shapes/circle.d.ts +4 -4
- package/dist/{utils → canvas/utils}/shapes/curve.d.ts +5 -5
- package/dist/{utils → canvas/utils}/shapes/ellipse.d.ts +4 -4
- package/dist/{utils → canvas/utils}/shapes/index.d.ts +5 -5
- package/dist/{utils → canvas/utils}/shapes/line.d.ts +4 -4
- package/dist/{utils → canvas/utils}/shapes/path.d.ts +2 -2
- package/dist/{utils → canvas/utils}/shapes/picture.d.ts +3 -3
- package/dist/{utils → canvas/utils}/shapes/polygon.d.ts +4 -4
- package/dist/{utils → canvas/utils}/shapes/rectangle.d.ts +4 -4
- package/dist/{utils → canvas/utils}/shapes/text.d.ts +4 -4
- package/dist/{utils → canvas/utils}/shapes/triangle.d.ts +1 -1
- package/dist/{utils → canvas/utils}/string.d.ts +0 -1
- package/dist/canvas/utils/tools.d.ts +3 -0
- package/dist/{utils → canvas/utils}/transform.d.ts +3 -3
- package/dist/{utils → canvas/utils}/trigo.d.ts +4 -4
- package/dist/{types → common/types}/Shapes.d.ts +4 -4
- package/dist/common/utils/array.d.ts +1 -0
- package/dist/editor/components/common/Loading.d.ts +6 -0
- package/dist/{components → editor/components}/common/Modal.d.ts +2 -2
- package/dist/{components → editor/components}/common/Panel.d.ts +2 -2
- package/dist/{components → editor/components}/common/Snackbar.d.ts +2 -3
- package/dist/{components → editor/components}/settings/ColorField.d.ts +2 -2
- package/dist/{components → editor/components}/settings/DeleteButton.d.ts +2 -3
- package/dist/{components → editor/components}/settings/FontFamilyField.d.ts +2 -2
- package/dist/{components → editor/components}/settings/LayoutButton.d.ts +1 -2
- package/dist/{components → editor/components}/settings/Layouts.d.ts +5 -6
- package/dist/{components → editor/components}/settings/LineArrowField.d.ts +2 -2
- package/dist/{components → editor/components}/settings/LineTypeField.d.ts +3 -3
- package/dist/{components → editor/components}/settings/PointsNumberField.d.ts +2 -2
- package/dist/{components → editor/components}/settings/RangeField.d.ts +2 -2
- package/dist/{components → editor/components}/settings/SelectField.d.ts +2 -2
- package/dist/{components → editor/components}/settings/SettingsBar.d.ts +4 -5
- package/dist/{components → editor/components}/settings/ToggleField.d.ts +2 -2
- package/dist/{components → editor/components}/toolbox/LoadFileTool.d.ts +2 -3
- package/dist/{components → editor/components}/toolbox/MenuGroup.d.ts +3 -4
- package/dist/{components → editor/components}/toolbox/PictureUrlInput.d.ts +1 -2
- package/dist/{components → editor/components}/toolbox/Tool.d.ts +2 -3
- package/dist/{components → editor/components}/toolbox/Toolbar.d.ts +3 -4
- package/dist/{components → editor/components}/toolbox/ToolbarGroup.d.ts +2 -3
- package/dist/editor/constants/grid.d.ts +7 -0
- package/dist/editor/constants/options.d.ts +13 -0
- package/dist/{constants → editor/constants}/snackbar.d.ts +1 -1
- package/dist/{constants → editor/constants}/style.d.ts +0 -3
- package/dist/{constants → editor/constants}/tools.d.ts +1 -1
- package/dist/{hooks → editor/hooks}/useDrag.d.ts +2 -2
- package/dist/{hooks → editor/hooks}/useSnackbar.d.ts +3 -3
- package/dist/editor/index.d.ts +24 -0
- package/dist/{utils → editor/utils}/style.d.ts +1 -1
- package/dist/editor/utils/toolbar.d.ts +11 -0
- package/dist/index.d.ts +6 -0
- package/dist/react-paint.css +1 -1
- package/dist/react-paint.js +970 -943
- package/dist/react-paint.umd.cjs +1 -1
- package/package.json +61 -56
- package/dist/components/App.d.ts +0 -20
- package/dist/components/common/Loading.d.ts +0 -7
- package/dist/constants/app.d.ts +0 -58
- package/dist/utils/array.d.ts +0 -1
- package/dist/utils/selection/selectionFrame.d.ts +0 -3
- package/dist/utils/toolbar.d.ts +0 -13
- /package/dist/{constants → canvas/constants}/picture.d.ts +0 -0
- /package/dist/{hooks → canvas/hooks}/useDoubleClick.d.ts +0 -0
- /package/dist/{hooks → canvas/hooks}/useResizeObserver.d.ts +0 -0
- /package/dist/{types → common/types}/Mode.d.ts +0 -0
- /package/dist/{types → common/types}/react.d.ts +0 -0
- /package/dist/{types → common/types}/tools.d.ts +0 -0
- /package/dist/{types → common/types}/utils.d.ts +0 -0
- /package/dist/{utils → common/utils}/dom.d.ts +0 -0
- /package/dist/{utils → common/utils}/object.d.ts +0 -0
- /package/dist/{utils → common/utils}/util.d.ts +0 -0
- /package/dist/{components → editor/components}/common/Button.d.ts +0 -0
- /package/dist/{constants → editor/constants}/icons.d.ts +0 -0
- /package/dist/{constants → editor/constants}/loading.d.ts +0 -0
- /package/dist/{types → editor/types}/snackbar.d.ts +0 -0
package/dist/react-paint.js
CHANGED
|
@@ -1,68 +1,21 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
const ie = ["transparent", "black", "white", "red", "green", "blue", "yellow"], Ae = [0, 1, 2], Kt = [[1, 0], [1, 2], [4, 6]], it = "serif", Xi = 1, Yi = 2, It = 3, Ne = [10, 20, 40], _i = ({ isLoading: e = !1 }) => {
|
|
4
|
-
const [i, t] = I("hidden");
|
|
5
|
-
return O(() => {
|
|
6
|
-
if (!e) {
|
|
7
|
-
t("fadeOut");
|
|
8
|
-
const a = setTimeout(() => t("hidden"), 300);
|
|
9
|
-
return () => {
|
|
10
|
-
clearTimeout(a);
|
|
11
|
-
};
|
|
12
|
-
}
|
|
13
|
-
t("visible");
|
|
14
|
-
}, [e]), i === "hidden" ? null : u("div", { className: "react-paint-editor-loading", "data-loading": i, style: { "--react-paint-editor-loading-zindex": Yi, "--react-paint-editor-loading-transition-duration": "300ms" }, children: N("div", { className: "react-paint-editor-loader", children: [u("div", {}), u("div", {}), u("div", {}), u("div", {})] }) });
|
|
15
|
-
}, z1 = 2, $1 = "blue", Me = 14, O1 = [[0, 0], [0.5, 0], [1, 0], [1, 0.5], [1, 1], [0.5, 1], [0, 1], [0, 0.5]], U1 = ["brush", "rect", "square", "line", "polygon", "circle", "curve", "ellipse", "picture", "text", "triangle"], B1 = '<svg><path d="M5.146 17.5Q4.146 17.5 3.208 17Q2.271 16.5 1.667 15.708Q2.208 15.75 2.802 15.344Q3.396 14.938 3.396 14.104Q3.396 13.042 4.135 12.292Q4.875 11.542 5.958 11.542Q7.021 11.542 7.76 12.292Q8.5 13.042 8.5 14.104Q8.5 15.5 7.51 16.5Q6.521 17.5 5.146 17.5ZM9.917 12.5 7.562 10.146 14.917 2.729Q15.146 2.5 15.469 2.5Q15.792 2.5 16.021 2.729L17.271 3.958Q17.5 4.188 17.5 4.531Q17.5 4.875 17.271 5.125Z"/></svg>', Wt = '<svg><path d="M2.5 17.5V2.5H17.5V17.5ZM4.25 15.75H15.75V4.25H4.25ZM4.25 15.75V4.25V15.75Z"/></svg>', zt = '<svg><path d="M10 18.333Q8.271 18.333 6.75 17.677Q5.229 17.021 4.104 15.896Q2.979 14.771 2.323 13.25Q1.667 11.729 1.667 10Q1.667 8.271 2.323 6.75Q2.979 5.229 4.104 4.104Q5.229 2.979 6.75 2.323Q8.271 1.667 10 1.667Q11.729 1.667 13.25 2.323Q14.771 2.979 15.896 4.104Q17.021 5.229 17.677 6.75Q18.333 8.271 18.333 10Q18.333 11.729 17.677 13.25Q17.021 14.771 15.896 15.896Q14.771 17.021 13.25 17.677Q11.729 18.333 10 18.333ZM10 16.583Q12.75 16.583 14.667 14.667Q16.583 12.75 16.583 10Q16.583 7.25 14.667 5.333Q12.75 3.417 10 3.417Q7.25 3.417 5.333 5.333Q3.417 7.25 3.417 10Q3.417 12.75 5.333 14.667Q7.25 16.583 10 16.583ZM10 10Q10 10 10 10Q10 10 10 10Q10 10 10 10Q10 10 10 10Q10 10 10 10Q10 10 10 10Q10 10 10 10Q10 10 10 10Z"/></svg>', $t = '<svg><path d="M12.25 18.333V16.167L6.833 13.458H2.5V8.208H6.25L8.25 5.917V1.667H13.5V6.917H9.708L7.75 9.146V11.958L12.25 14.208V13.083H17.5V18.333Z"/></svg>', X1 = '<svg><path d="M4.125 5.083V3.333H7.062L7.896 2.5H12.104L12.938 3.333H15.875V5.083ZM6.75 17.5Q6.021 17.5 5.51 16.99Q5 16.479 5 15.75V5.958H15V15.75Q15 16.479 14.49 16.99Q13.979 17.5 13.25 17.5Z"/></svg>', e1 = '<svg><path d="M10 17.5Q7.208 17.5 5.271 15.594Q3.333 13.688 3.333 10.958Q3.333 9.583 3.854 8.396Q4.375 7.208 5.292 6.292L10 1.667L14.688 6.292Q15.604 7.208 16.135 8.396Q16.667 9.583 16.667 10.958Q16.667 13.688 14.719 15.594Q12.771 17.5 10 17.5ZM5.146 11.667H14.854Q15.083 10.188 14.552 9.146Q14.021 8.104 13.479 7.562L10 4.125L6.521 7.562Q5.979 8.104 5.448 9.146Q4.917 10.188 5.146 11.667Z"/></svg>', Ot = '<svg><path d="M4.792 15.083 8.333 11.542 9.833 13.021 11.667 10.708 15.167 15.083ZM6.667 8.417Q5.938 8.417 5.427 7.906Q4.917 7.396 4.917 6.667Q4.917 5.938 5.427 5.427Q5.938 4.917 6.667 4.917Q7.396 4.917 7.906 5.427Q8.417 5.938 8.417 6.667Q8.417 7.396 7.906 7.906Q7.396 8.417 6.667 8.417ZM4.167 18.333Q3.125 18.333 2.396 17.604Q1.667 16.875 1.667 15.833V4.167Q1.667 3.125 2.396 2.396Q3.125 1.667 4.167 1.667H15.833Q16.875 1.667 17.604 2.396Q18.333 3.125 18.333 4.167V15.833Q18.333 16.875 17.604 17.604Q16.875 18.333 15.833 18.333ZM4.167 16.583H15.833Q16.146 16.583 16.365 16.365Q16.583 16.146 16.583 15.833V4.167Q16.583 3.854 16.365 3.635Q16.146 3.417 15.833 3.417H4.167Q3.854 3.417 3.635 3.635Q3.417 3.854 3.417 4.167V15.833Q3.417 16.146 3.635 16.365Q3.854 16.583 4.167 16.583Z"/></svg>', Y1 = '<svg><path d="M8.708 16.667V5.917H4.167V3.333H15.833V5.917H11.292V16.667Z"/></svg>', _1 = '<svg><path d="M7.5 15.833V14.083H12.833L3.333 4.583L4.583 3.333L14.083 12.833V7.5H15.833V15.833Z"/></svg>', j1 = '<svg><path d="M7.521 17.5Q6.125 17.5 5.146 16.51Q4.167 15.521 4.167 14.125V7.417Q3.438 7.125 2.969 6.49Q2.5 5.854 2.5 5.042Q2.5 3.979 3.24 3.24Q3.979 2.5 5.042 2.5Q6.104 2.5 6.844 3.24Q7.583 3.979 7.583 5.042Q7.583 5.854 7.115 6.49Q6.646 7.125 5.917 7.417V14.125Q5.917 14.792 6.385 15.271Q6.854 15.75 7.521 15.75Q8.188 15.75 8.656 15.271Q9.125 14.792 9.125 14.125V5.875Q9.125 4.479 10.104 3.49Q11.083 2.5 12.479 2.5Q13.875 2.5 14.854 3.49Q15.833 4.479 15.833 5.875V12.583Q16.562 12.875 17.031 13.51Q17.5 14.146 17.5 14.958Q17.5 16.021 16.76 16.76Q16.021 17.5 14.958 17.5Q13.896 17.5 13.156 16.76Q12.417 16.021 12.417 14.958Q12.417 14.146 12.885 13.5Q13.354 12.854 14.083 12.583V5.875Q14.083 5.208 13.615 4.729Q13.146 4.25 12.479 4.25Q11.812 4.25 11.344 4.729Q10.875 5.208 10.875 5.875V14.125Q10.875 15.521 9.896 16.51Q8.917 17.5 7.521 17.5Z"/></svg>', t1 = '<svg><path d="M5.833 15V3.333H10.375Q11.812 3.333 12.885 4.156Q13.958 4.979 13.958 6.375Q13.958 7.375 13.49 7.969Q13.021 8.562 12.396 8.875V9.042Q13.312 9.354 13.844 10.021Q14.375 10.688 14.375 11.75Q14.375 13.312 13.229 14.156Q12.083 15 10.5 15ZM8.125 8.042H10.188Q10.854 8.042 11.302 7.656Q11.75 7.271 11.75 6.708Q11.75 6.167 11.302 5.771Q10.854 5.375 10.188 5.375H8.125ZM8.125 12.917H10.354Q11.167 12.917 11.625 12.51Q12.083 12.104 12.083 11.458Q12.083 10.812 11.625 10.406Q11.167 10 10.354 10H8.125Z"/></svg>', i1 = '<svg><path d="M4.167 16.667V14.083H6.979L10.229 5.917H7.5V3.333H15.833V5.917H13.021L9.771 14.083H12.5V16.667Z"/></svg>', a1 = '<svg><path d="M3.021 16V15H17V16ZM3.021 13.5V12H17V13.5ZM3 10.5V8.5H16.979V10.5ZM3.021 7V4H17V7Z"/></svg>', n1 = '<svg><path d="M16.354 18.833 14.521 17Q13.542 17.646 12.396 17.99Q11.25 18.333 10 18.333Q8.271 18.333 6.75 17.677Q5.229 17.021 4.104 15.896Q2.979 14.771 2.323 13.25Q1.667 11.729 1.667 10Q1.667 8.729 2.01 7.594Q2.354 6.458 3 5.458L1.167 3.625L2.396 2.396L17.583 17.604ZM10 16.583Q10.896 16.583 11.708 16.365Q12.521 16.146 13.25 15.729L4.292 6.75Q3.875 7.479 3.646 8.292Q3.417 9.104 3.417 10Q3.417 12.729 5.344 14.656Q7.271 16.583 10 16.583ZM17 14.562 15.708 13.271Q16.125 12.542 16.354 11.719Q16.583 10.896 16.583 10Q16.583 7.271 14.656 5.344Q12.729 3.417 10 3.417Q9.104 3.417 8.292 3.646Q7.479 3.875 6.75 4.292L5.458 3Q6.458 2.354 7.594 2.01Q8.729 1.667 10 1.667Q11.729 1.667 13.25 2.323Q14.771 2.979 15.896 4.104Q17.021 5.229 17.677 6.75Q18.333 8.271 18.333 10Q18.333 11.271 17.979 12.417Q17.625 13.562 17 14.562ZM11.229 8.771Q11.229 8.771 11.229 8.771Q11.229 8.771 11.229 8.771Q11.229 8.771 11.229 8.771Q11.229 8.771 11.229 8.771Q11.229 8.771 11.229 8.771Q11.229 8.771 11.229 8.771ZM8.771 11.229Q8.771 11.229 8.771 11.229Q8.771 11.229 8.771 11.229Q8.771 11.229 8.771 11.229Q8.771 11.229 8.771 11.229Q8.771 11.229 8.771 11.229Q8.771 11.229 8.771 11.229Z"/></svg>', s1 = '<svg ><path d="M16.354 18.833 14.521 17Q13.542 17.646 12.396 17.99Q11.25 18.333 10 18.333Q8.271 18.333 6.75 17.677Q5.229 17.021 4.104 15.896Q2.979 14.771 2.323 13.25Q1.667 11.729 1.667 10Q1.667 8.729 2.01 7.594Q2.354 6.458 3 5.458L1.167 3.625L2.396 2.396L17.583 17.604ZM17 14.562 5.458 3Q6.458 2.354 7.594 2.01Q8.729 1.667 10 1.667Q11.729 1.667 13.25 2.323Q14.771 2.979 15.896 4.104Q17.021 5.229 17.677 6.75Q18.333 8.271 18.333 10Q18.333 11.271 17.979 12.417Q17.625 13.562 17 14.562Z"/></svg>', _ = "react-paint-", Ut = { type: "picture", id: `${_}picture`, icon: Ot, label: "Image", settings: { opacity: { min: 0, max: 100, step: 1, default: 100 } } }, q1 = { type: "brush", id: `${_}brush`, icon: B1, label: "Brosse", settings: { strokeColor: { values: ie, default: "black" }, opacity: { min: 0, max: 100, step: 1, default: 100 }, lineWidth: { min: 6, max: 20, step: 2, default: 10 }, lineDash: { values: Ae, default: 0 } } }, G1 = { type: "line", id: `${_}line`, icon: _1, label: "Ligne", settings: { strokeColor: { values: ie, default: "black" }, opacity: { min: 0, max: 100, step: 1, default: 100 }, lineWidth: { min: 1, max: 20, step: 1, default: 1 }, lineDash: { values: Ae, default: 0 }, lineArrow: { values: [0, 1, 2, 3], default: 0 } } }, J1 = { type: "polygon", id: `${_}polygon`, icon: $t, label: "Polygone", settings: { strokeColor: { values: ie, default: "black" }, fillColor: { values: ie, default: "black" }, opacity: { min: 0, max: 100, step: 1, default: 100 }, lineWidth: { min: 1, max: 20, step: 1, default: 1 }, lineDash: { values: Ae, default: 0 }, pointsCount: { min: 3, max: 10, step: 1, default: 3 } } }, K1 = { type: "curve", id: `${_}curve`, icon: j1, label: "Courbe", settings: { strokeColor: { values: ie, default: "black" }, fillColor: { values: ie, default: "black" }, opacity: { min: 0, max: 100, step: 1, default: 100 }, lineWidth: { min: 1, max: 20, step: 1, default: 1 }, lineDash: { values: Ae, default: 0 }, pointsCount: { min: 3, max: 10, step: 1, default: 3 } } }, ei = { type: "rect", id: `${_}rect`, icon: Wt, label: "Rectangle", settings: { strokeColor: { values: ie, default: "black" }, fillColor: { values: ie, default: "transparent" }, opacity: { min: 0, max: 100, step: 1, default: 100 }, lineWidth: { min: 1, max: 20, step: 1, default: 1 }, lineDash: { values: Ae, default: 0 } } }, ti = { type: "square", id: `${_}square`, icon: Wt, label: "Carré", settings: { strokeColor: { values: ie, default: "black" }, fillColor: { values: ie, default: "transparent" }, opacity: { min: 0, max: 100, step: 1, default: 100 }, lineWidth: { min: 1, max: 20, step: 1, default: 1 }, lineDash: { values: Ae, default: 0 } } }, ii = { type: "circle", id: `${_}circle`, icon: zt, label: "Cercle", settings: { strokeColor: { values: ie, default: "black" }, fillColor: { values: ie, default: "transparent" }, opacity: { min: 0, max: 100, step: 1, default: 100 }, lineWidth: { min: 1, max: 20, step: 1, default: 1 }, lineDash: { values: Ae, default: 0 } } }, ai = { type: "ellipse", id: `${_}ellipse`, icon: zt, label: "Ellipse", settings: { strokeColor: { values: ie, default: "black" }, fillColor: { values: ie, default: "transparent" }, opacity: { min: 0, max: 100, step: 1, default: 100 }, lineWidth: { min: 1, max: 20, step: 1, default: 1 }, lineDash: { values: Ae, default: 0 } } }, ni = { type: "text", id: `${_}text`, icon: Y1, label: "Texte", settings: { strokeColor: { values: ie, default: "black" }, opacity: { min: 0, max: 100, step: 1, default: 100 }, fontFamily: { values: ["arial", "serif", "monospace"], default: it }, fontBold: { values: [!1, !0], default: !1 }, fontItalic: { values: [!1, !0], default: !1 } } }, ke = { id: `${_}selection`, type: "selection", icon: '<svg><path d="M8.0145 11.1707C8.38484 10.9914 8.82183 11.1558 8.99959 11.5295L10.7031 15.2591L12.0363 14.6238L10.3254 10.9017C10.1476 10.528 10.3106 10.0795 10.6809 9.90761L10.8883 9.84782L12.5918 9.51148L6.48133 4.33192V12.389L7.82934 11.2903L8.0145 11.1707ZM10.6587 16.9258C10.2883 17.1052 9.84395 16.9482 9.67359 16.5745L8.05894 13.0318L6.19988 14.5416C6.07396 14.6462 5.91842 14.706 5.74066 14.706C5.54423 14.706 5.35584 14.6272 5.21694 14.4871C5.07803 14.3469 5 14.1568 5 13.9586V2.74741C5 2.54919 5.07803 2.35908 5.21694 2.21891C5.35584 2.07874 5.54423 2 5.74066 2C5.91842 2 6.08878 2.06727 6.21469 2.1719L6.2221 2.16443L14.7323 9.36947C15.0508 9.63854 15.0879 10.1094 14.8286 10.4233C14.7175 10.5579 14.562 10.6475 14.4064 10.6774L12.0659 11.1408L13.6954 14.6761C13.888 15.0498 13.7102 15.4908 13.3399 15.6627L10.6587 16.9258Z"/></svg>', label: "Sélection" }, We = { id: `${_}undo`, type: "undo", icon: '<svg><path d="M11.708 15.833H5.854V14.083H11.708Q13 14.083 13.958 13.292Q14.917 12.5 14.917 11.271Q14.917 10.042 13.958 9.24Q13 8.438 11.708 8.438H6.667L8.792 10.562L7.562 11.792L3.333 7.562L7.562 3.333L8.792 4.562L6.667 6.688H11.708Q13.729 6.688 15.198 7.99Q16.667 9.292 16.667 11.25Q16.667 13.208 15.198 14.521Q13.729 15.833 11.708 15.833Z"/></svg>', label: "Undo" }, ze = { id: `${_}redo`, type: "redo", icon: '<svg><path d="M8.292 15.833Q6.271 15.833 4.802 14.521Q3.333 13.208 3.333 11.25Q3.333 9.292 4.802 7.99Q6.271 6.688 8.292 6.688H13.333L11.208 4.562L12.438 3.333L16.667 7.562L12.438 11.792L11.208 10.562L13.333 8.438H8.292Q7 8.438 6.042 9.229Q5.083 10.021 5.083 11.25Q5.083 12.5 6.042 13.292Q7 14.083 8.292 14.083H14.146V15.833Z"/></svg>', label: "Redo" }, $e = { id: `${_}clear`, type: "clear", icon: '<svg><path d="M7.854 13.812 10 11.688 12.125 13.812 13.354 12.604 11.208 10.458 13.354 8.312 12.125 7.104 10 9.229 7.854 7.104 6.625 8.312 8.771 10.458 6.625 12.604ZM5.896 17.5Q5.167 17.5 4.656 16.99Q4.146 16.479 4.146 15.75V5.125H3.333V3.375H7.542V2.5H12.458V3.375H16.667V5.125H15.833V15.75Q15.833 16.479 15.323 16.99Q14.812 17.5 14.083 17.5Z"/></svg>', label: "Clear" }, Lt = { id: `${_}export`, type: "export", icon: '<svg><path d="M10 13.271 5.708 8.979 6.958 7.729 9.125 9.896V3.333H10.875V9.896L13.042 7.729L14.292 8.979ZM5.083 16.667Q4.354 16.667 3.844 16.156Q3.333 15.646 3.333 14.917V12.5H5.083V14.917Q5.083 14.917 5.083 14.917Q5.083 14.917 5.083 14.917H14.917Q14.917 14.917 14.917 14.917Q14.917 14.917 14.917 14.917V12.5H16.667V14.917Q16.667 15.646 16.156 16.156Q15.646 16.667 14.917 16.667Z"/></svg>', label: "Export PNG" }, o1 = { id: `${_}load`, type: "loadfile", icon: '<svg><path d="M3.417 16.667Q2.729 16.667 2.198 16.135Q1.667 15.604 1.667 14.917V5.083Q1.667 4.396 2.198 3.865Q2.729 3.333 3.417 3.333H8.25L9.917 5H16.667Q17.354 5 17.844 5.531Q18.333 6.062 18.333 6.75H3.417V14.917Q3.417 14.917 3.417 14.917Q3.417 14.917 3.417 14.917L5.438 8.5H19.583L17.396 15.479Q17.229 16.021 16.802 16.344Q16.375 16.667 15.833 16.667Z"/></svg>', label: "Load project" }, Vt = { id: `${_}save`, type: "savefile", icon: '<svg><path d="M17.5 5.833V15.75Q17.5 16.479 16.99 16.99Q16.479 17.5 15.75 17.5H4.25Q3.521 17.5 3.01 16.99Q2.5 16.479 2.5 15.75V4.25Q2.5 3.521 3.01 3.01Q3.521 2.5 4.25 2.5H14.167ZM10 14.917Q11.062 14.917 11.823 14.156Q12.583 13.396 12.583 12.333Q12.583 11.271 11.823 10.51Q11.062 9.75 10 9.75Q8.938 9.75 8.177 10.51Q7.417 11.271 7.417 12.333Q7.417 13.396 8.177 14.156Q8.938 14.917 10 14.917ZM5.021 8.396H12.521V5.021H5.021Z"/></svg>', label: "Save project" }, r1 = { id: `${_}upload-picture`, type: "uploadpicture", icon: Ot, label: "Upload picture" }, si = "react-paint-editor-canvas-drawcanvas", oi = "react-paint-editor-canvas-selectioncanvas", Pt = { layersManipulation: !0, grid: 0, canGrow: !1, canShrink: !0, withExport: !0, withLoadAndSave: !0, withUploadPicture: !0, withUrlPicture: !1, availableTools: [q1, G1, J1, K1, ei, ti, ii, ai, Ut, ni], clearCallback: "empty", brushAlgo: "simple", withFrameSelection: !1, withSkeleton: !1, uiStyle: { toolbarBackgroundColor: "white", dividerColor: "#36418129", fontRadius: 8, fontDisabledColor: "#3641812b", fontDisabledBackgroundColor: "transparent", fontColor: "#364181", fontBackgroundColor: "transparent", fontSelectedColor: "white", fontSelectedBackgroundColor: "#364181", fontHoverColor: "#364181", fontHoverBackgroundColor: "#afd8d8", canvasBackgroundColor: "white", canvasSelectionColor: $1, canvasSelectionWidth: z1, canvasSelectionPadding: 0 } }, ri = (e, i) => !!(e.target instanceof Node && i) && i.contains(e.target), li = (e) => {
|
|
16
|
-
e.lineCap = "round", e.lineJoin = "round";
|
|
17
|
-
}, De = (e, i = {}) => {
|
|
18
|
-
const { lineCap: t = "round", fillColor: a = "transparent", opacity: s = 100, strokeColor: n = $1, lineWidth: r = z1, lineDash: o = 0 } = i;
|
|
19
|
-
e.lineCap = t, e.globalAlpha = s / 100, e.fillStyle = a, e.strokeStyle = n, e.lineWidth = r, e.setLineDash(o === 0 ? [] : [Kt[o][0] * r, Kt[o][1] * r]);
|
|
20
|
-
}, Bt = (e, i, t, a) => {
|
|
21
|
-
e.save(), e.scale(i.canvasSize.scaleRatio, i.canvasSize.scaleRatio), e.translate(i.canvasOffset[0], i.canvasOffset[1]), t && a && (e.translate(a[0], a[1]), e.rotate(t), e.translate(-a[0], -a[1]));
|
|
22
|
-
}, ct = (e) => {
|
|
23
|
-
const i = new Path2D();
|
|
24
|
-
return i.rect(e.x, e.y, e.width, e.height), i;
|
|
25
|
-
}, ht = (e) => {
|
|
26
|
-
const i = new Path2D();
|
|
27
|
-
return i.arc(e.x, e.y, e.radius, 0, 2 * Math.PI), i;
|
|
28
|
-
}, Ft = (e) => {
|
|
29
|
-
const i = new Path2D();
|
|
30
|
-
return i.moveTo(...e.points[0]), i.lineTo(...e.points[1]), i;
|
|
31
|
-
}, ji = (e) => {
|
|
32
|
-
const i = new Path2D();
|
|
33
|
-
return i.moveTo(...e.points[0]), i.lineTo(...e.points[1]), i.lineTo(...e.points[2]), i.lineTo(...e.points[0]), i;
|
|
34
|
-
}, Xt = (e, i, t, a = !1) => {
|
|
35
|
-
const { borders: s } = Y(i, t);
|
|
36
|
-
return { border: ct(s), shapePath: e, anchors: [...i.points.map((n, r) => a && r > 0 && r < i.points.length - 1 ? ct({ x: n[0] - 7, y: n[1] - 7, width: Me / t.canvasSize.scaleRatio, height: Me / t.canvasSize.scaleRatio }) : ht({ x: n[0], y: n[1], radius: 7 / t.canvasSize.scaleRatio }))] };
|
|
37
|
-
}, Nt = (e) => 180 * e / Math.PI, di = (e, i) => {
|
|
38
|
-
const t = i.x - Math.min(Math.max(i.x, e.x), e.x + e.width), a = i.y - Math.min(Math.max(i.y, e.y), e.y + e.height);
|
|
39
|
-
return Math.sqrt(t * t + a * a) <= i.radius;
|
|
40
|
-
}, he = ({ origin: e = [0, 0], point: i, rotation: t }) => {
|
|
41
|
-
const a = [i[0] - e[0], i[1] - e[1]], s = a[1] * Math.cos(t) - a[0] * Math.sin(t);
|
|
42
|
-
return [a[1] * Math.sin(t) + a[0] * Math.cos(t) + e[0], s + e[1]];
|
|
43
|
-
}, l1 = (e) => (e + 2 * Math.PI) % (2 * Math.PI), d1 = ({ targetVector: [e, i], radian: t = !0, originVector: a }) => {
|
|
44
|
-
const s = l1(Math.atan2(i[1] - e[1], i[0] - e[0]));
|
|
45
|
-
if (a) {
|
|
46
|
-
const [n, r] = a, o = Math.atan2(r[1] - n[1], r[0] - n[0]), l = l1(s - o);
|
|
47
|
-
return t ? l : Nt(l);
|
|
48
|
-
}
|
|
49
|
-
return t ? s : Nt(s);
|
|
50
|
-
}, ut = 300, Dt = (e, i) => {
|
|
1
|
+
import Ei, { useState as W, useEffect as B, useRef as J, useCallback as R, useMemo as Di, useImperativeHandle as f1, useTransition as Fi } from "react";
|
|
2
|
+
import { jsx as h, jsxs as I, Fragment as pe } from "react/jsx-runtime";
|
|
3
|
+
const Ni = '<svg><path d="M5.146 17.5Q4.146 17.5 3.208 17Q2.271 16.5 1.667 15.708Q2.208 15.75 2.802 15.344Q3.396 14.938 3.396 14.104Q3.396 13.042 4.135 12.292Q4.875 11.542 5.958 11.542Q7.021 11.542 7.76 12.292Q8.5 13.042 8.5 14.104Q8.5 15.5 7.51 16.5Q6.521 17.5 5.146 17.5ZM9.917 12.5 7.562 10.146 14.917 2.729Q15.146 2.5 15.469 2.5Q15.792 2.5 16.021 2.729L17.271 3.958Q17.5 4.188 17.5 4.531Q17.5 4.875 17.271 5.125Z"/></svg>', Ft = '<svg><path d="M2.5 17.5V2.5H17.5V17.5ZM4.25 15.75H15.75V4.25H4.25ZM4.25 15.75V4.25V15.75Z"/></svg>', Nt = '<svg><path d="M10 18.333Q8.271 18.333 6.75 17.677Q5.229 17.021 4.104 15.896Q2.979 14.771 2.323 13.25Q1.667 11.729 1.667 10Q1.667 8.271 2.323 6.75Q2.979 5.229 4.104 4.104Q5.229 2.979 6.75 2.323Q8.271 1.667 10 1.667Q11.729 1.667 13.25 2.323Q14.771 2.979 15.896 4.104Q17.021 5.229 17.677 6.75Q18.333 8.271 18.333 10Q18.333 11.729 17.677 13.25Q17.021 14.771 15.896 15.896Q14.771 17.021 13.25 17.677Q11.729 18.333 10 18.333ZM10 16.583Q12.75 16.583 14.667 14.667Q16.583 12.75 16.583 10Q16.583 7.25 14.667 5.333Q12.75 3.417 10 3.417Q7.25 3.417 5.333 5.333Q3.417 7.25 3.417 10Q3.417 12.75 5.333 14.667Q7.25 16.583 10 16.583ZM10 10Q10 10 10 10Q10 10 10 10Q10 10 10 10Q10 10 10 10Q10 10 10 10Q10 10 10 10Q10 10 10 10Q10 10 10 10Z"/></svg>', Rt = '<svg><path d="M12.25 18.333V16.167L6.833 13.458H2.5V8.208H6.25L8.25 5.917V1.667H13.5V6.917H9.708L7.75 9.146V11.958L12.25 14.208V13.083H17.5V18.333Z"/></svg>', Ri = '<svg><path d="M4.125 5.083V3.333H7.062L7.896 2.5H12.104L12.938 3.333H15.875V5.083ZM6.75 17.5Q6.021 17.5 5.51 16.99Q5 16.479 5 15.75V5.958H15V15.75Q15 16.479 14.49 16.99Q13.979 17.5 13.25 17.5Z"/></svg>', Yt = '<svg><path d="M10 17.5Q7.208 17.5 5.271 15.594Q3.333 13.688 3.333 10.958Q3.333 9.583 3.854 8.396Q4.375 7.208 5.292 6.292L10 1.667L14.688 6.292Q15.604 7.208 16.135 8.396Q16.667 9.583 16.667 10.958Q16.667 13.688 14.719 15.594Q12.771 17.5 10 17.5ZM5.146 11.667H14.854Q15.083 10.188 14.552 9.146Q14.021 8.104 13.479 7.562L10 4.125L6.521 7.562Q5.979 8.104 5.448 9.146Q4.917 10.188 5.146 11.667Z"/></svg>', It = '<svg><path d="M4.792 15.083 8.333 11.542 9.833 13.021 11.667 10.708 15.167 15.083ZM6.667 8.417Q5.938 8.417 5.427 7.906Q4.917 7.396 4.917 6.667Q4.917 5.938 5.427 5.427Q5.938 4.917 6.667 4.917Q7.396 4.917 7.906 5.427Q8.417 5.938 8.417 6.667Q8.417 7.396 7.906 7.906Q7.396 8.417 6.667 8.417ZM4.167 18.333Q3.125 18.333 2.396 17.604Q1.667 16.875 1.667 15.833V4.167Q1.667 3.125 2.396 2.396Q3.125 1.667 4.167 1.667H15.833Q16.875 1.667 17.604 2.396Q18.333 3.125 18.333 4.167V15.833Q18.333 16.875 17.604 17.604Q16.875 18.333 15.833 18.333ZM4.167 16.583H15.833Q16.146 16.583 16.365 16.365Q16.583 16.146 16.583 15.833V4.167Q16.583 3.854 16.365 3.635Q16.146 3.417 15.833 3.417H4.167Q3.854 3.417 3.635 3.635Q3.417 3.854 3.417 4.167V15.833Q3.417 16.146 3.635 16.365Q3.854 16.583 4.167 16.583Z"/></svg>', Ii = '<svg><path d="M8.708 16.667V5.917H4.167V3.333H15.833V5.917H11.292V16.667Z"/></svg>', zi = '<svg><path d="M7.5 15.833V14.083H12.833L3.333 4.583L4.583 3.333L14.083 12.833V7.5H15.833V15.833Z"/></svg>', Wi = '<svg><path d="M7.521 17.5Q6.125 17.5 5.146 16.51Q4.167 15.521 4.167 14.125V7.417Q3.438 7.125 2.969 6.49Q2.5 5.854 2.5 5.042Q2.5 3.979 3.24 3.24Q3.979 2.5 5.042 2.5Q6.104 2.5 6.844 3.24Q7.583 3.979 7.583 5.042Q7.583 5.854 7.115 6.49Q6.646 7.125 5.917 7.417V14.125Q5.917 14.792 6.385 15.271Q6.854 15.75 7.521 15.75Q8.188 15.75 8.656 15.271Q9.125 14.792 9.125 14.125V5.875Q9.125 4.479 10.104 3.49Q11.083 2.5 12.479 2.5Q13.875 2.5 14.854 3.49Q15.833 4.479 15.833 5.875V12.583Q16.562 12.875 17.031 13.51Q17.5 14.146 17.5 14.958Q17.5 16.021 16.76 16.76Q16.021 17.5 14.958 17.5Q13.896 17.5 13.156 16.76Q12.417 16.021 12.417 14.958Q12.417 14.146 12.885 13.5Q13.354 12.854 14.083 12.583V5.875Q14.083 5.208 13.615 4.729Q13.146 4.25 12.479 4.25Q11.812 4.25 11.344 4.729Q10.875 5.208 10.875 5.875V14.125Q10.875 15.521 9.896 16.51Q8.917 17.5 7.521 17.5Z"/></svg>', jt = '<svg><path d="M5.833 15V3.333H10.375Q11.812 3.333 12.885 4.156Q13.958 4.979 13.958 6.375Q13.958 7.375 13.49 7.969Q13.021 8.562 12.396 8.875V9.042Q13.312 9.354 13.844 10.021Q14.375 10.688 14.375 11.75Q14.375 13.312 13.229 14.156Q12.083 15 10.5 15ZM8.125 8.042H10.188Q10.854 8.042 11.302 7.656Q11.75 7.271 11.75 6.708Q11.75 6.167 11.302 5.771Q10.854 5.375 10.188 5.375H8.125ZM8.125 12.917H10.354Q11.167 12.917 11.625 12.51Q12.083 12.104 12.083 11.458Q12.083 10.812 11.625 10.406Q11.167 10 10.354 10H8.125Z"/></svg>', _t = '<svg><path d="M4.167 16.667V14.083H6.979L10.229 5.917H7.5V3.333H15.833V5.917H13.021L9.771 14.083H12.5V16.667Z"/></svg>', qt = '<svg><path d="M3.021 16V15H17V16ZM3.021 13.5V12H17V13.5ZM3 10.5V8.5H16.979V10.5ZM3.021 7V4H17V7Z"/></svg>', Jt = '<svg><path d="M16.354 18.833 14.521 17Q13.542 17.646 12.396 17.99Q11.25 18.333 10 18.333Q8.271 18.333 6.75 17.677Q5.229 17.021 4.104 15.896Q2.979 14.771 2.323 13.25Q1.667 11.729 1.667 10Q1.667 8.729 2.01 7.594Q2.354 6.458 3 5.458L1.167 3.625L2.396 2.396L17.583 17.604ZM10 16.583Q10.896 16.583 11.708 16.365Q12.521 16.146 13.25 15.729L4.292 6.75Q3.875 7.479 3.646 8.292Q3.417 9.104 3.417 10Q3.417 12.729 5.344 14.656Q7.271 16.583 10 16.583ZM17 14.562 15.708 13.271Q16.125 12.542 16.354 11.719Q16.583 10.896 16.583 10Q16.583 7.271 14.656 5.344Q12.729 3.417 10 3.417Q9.104 3.417 8.292 3.646Q7.479 3.875 6.75 4.292L5.458 3Q6.458 2.354 7.594 2.01Q8.729 1.667 10 1.667Q11.729 1.667 13.25 2.323Q14.771 2.979 15.896 4.104Q17.021 5.229 17.677 6.75Q18.333 8.271 18.333 10Q18.333 11.271 17.979 12.417Q17.625 13.562 17 14.562ZM11.229 8.771Q11.229 8.771 11.229 8.771Q11.229 8.771 11.229 8.771Q11.229 8.771 11.229 8.771Q11.229 8.771 11.229 8.771Q11.229 8.771 11.229 8.771Q11.229 8.771 11.229 8.771ZM8.771 11.229Q8.771 11.229 8.771 11.229Q8.771 11.229 8.771 11.229Q8.771 11.229 8.771 11.229Q8.771 11.229 8.771 11.229Q8.771 11.229 8.771 11.229Q8.771 11.229 8.771 11.229Z"/></svg>', Kt = '<svg ><path d="M16.354 18.833 14.521 17Q13.542 17.646 12.396 17.99Q11.25 18.333 10 18.333Q8.271 18.333 6.75 17.677Q5.229 17.021 4.104 15.896Q2.979 14.771 2.323 13.25Q1.667 11.729 1.667 10Q1.667 8.729 2.01 7.594Q2.354 6.458 3 5.458L1.167 3.625L2.396 2.396L17.583 17.604ZM17 14.562 5.458 3Q6.458 2.354 7.594 2.01Q8.729 1.667 10 1.667Q11.729 1.667 13.25 2.323Q14.771 2.979 15.896 4.104Q17.021 5.229 17.677 6.75Q18.333 8.271 18.333 10Q18.333 11.271 17.979 12.417Q17.625 13.562 17 14.562Z"/></svg>', le = ["transparent", "black", "white", "red", "green", "blue", "yellow"], Re = [0, 1, 2], ei = [[1, 0], [1, 2], [4, 6]], st = "serif", m1 = 2, Oi = 3, y1 = 4, K = "react-paint-", zt = { type: "picture", id: `${K}picture`, icon: It, label: "Image", settings: { opacity: { min: 0, max: 100, step: 1, default: 100 } } }, $i = { type: "brush", id: `${K}brush`, icon: Ni, label: "Brosse", settings: { strokeColor: { values: le, default: "black" }, opacity: { min: 0, max: 100, step: 1, default: 100 }, lineWidth: { min: 6, max: 20, step: 2, default: 10 }, lineDash: { values: Re, default: 0 } } }, Ui = { type: "line", id: `${K}line`, icon: zi, label: "Ligne", settings: { strokeColor: { values: le, default: "black" }, opacity: { min: 0, max: 100, step: 1, default: 100 }, lineWidth: { min: 1, max: 20, step: 1, default: 1 }, lineDash: { values: Re, default: 0 }, lineArrow: { values: [0, 1, 2, 3], default: 0 } } }, Gi = { type: "polygon", id: `${K}polygon`, icon: Rt, label: "Polygone", settings: { strokeColor: { values: le, default: "black" }, fillColor: { values: le, default: "black" }, opacity: { min: 0, max: 100, step: 1, default: 100 }, lineWidth: { min: 1, max: 20, step: 1, default: 1 }, lineDash: { values: Re, default: 0 }, pointsCount: { min: 3, max: 10, step: 1, default: 3 } } }, Bi = { type: "curve", id: `${K}curve`, icon: Wi, label: "Courbe", settings: { strokeColor: { values: le, default: "black" }, fillColor: { values: le, default: "black" }, opacity: { min: 0, max: 100, step: 1, default: 100 }, lineWidth: { min: 1, max: 20, step: 1, default: 1 }, lineDash: { values: Re, default: 0 }, pointsCount: { min: 3, max: 10, step: 1, default: 3 } } }, Xi = { type: "rect", id: `${K}rect`, icon: Ft, label: "Rectangle", settings: { strokeColor: { values: le, default: "black" }, fillColor: { values: le, default: "transparent" }, opacity: { min: 0, max: 100, step: 1, default: 100 }, lineWidth: { min: 1, max: 20, step: 1, default: 1 }, lineDash: { values: Re, default: 0 } } }, Yi = { type: "square", id: `${K}square`, icon: Ft, label: "Carré", settings: { strokeColor: { values: le, default: "black" }, fillColor: { values: le, default: "transparent" }, opacity: { min: 0, max: 100, step: 1, default: 100 }, lineWidth: { min: 1, max: 20, step: 1, default: 1 }, lineDash: { values: Re, default: 0 } } }, ji = { type: "circle", id: `${K}circle`, icon: Nt, label: "Cercle", settings: { strokeColor: { values: le, default: "black" }, fillColor: { values: le, default: "transparent" }, opacity: { min: 0, max: 100, step: 1, default: 100 }, lineWidth: { min: 1, max: 20, step: 1, default: 1 }, lineDash: { values: Re, default: 0 } } }, _i = { type: "ellipse", id: `${K}ellipse`, icon: Nt, label: "Ellipse", settings: { strokeColor: { values: le, default: "black" }, fillColor: { values: le, default: "transparent" }, opacity: { min: 0, max: 100, step: 1, default: 100 }, lineWidth: { min: 1, max: 20, step: 1, default: 1 }, lineDash: { values: Re, default: 0 } } }, qi = { type: "text", id: `${K}text`, icon: Ii, label: "Texte", settings: { strokeColor: { values: le, default: "black" }, opacity: { min: 0, max: 100, step: 1, default: 100 }, fontFamily: { values: ["arial", "serif", "monospace"], default: st }, fontBold: { values: [!1, !0], default: !1 }, fontItalic: { values: [!1, !0], default: !1 } } }, Ze = { id: `${K}selection`, type: "selection", icon: '<svg><path d="M8.0145 11.1707C8.38484 10.9914 8.82183 11.1558 8.99959 11.5295L10.7031 15.2591L12.0363 14.6238L10.3254 10.9017C10.1476 10.528 10.3106 10.0795 10.6809 9.90761L10.8883 9.84782L12.5918 9.51148L6.48133 4.33192V12.389L7.82934 11.2903L8.0145 11.1707ZM10.6587 16.9258C10.2883 17.1052 9.84395 16.9482 9.67359 16.5745L8.05894 13.0318L6.19988 14.5416C6.07396 14.6462 5.91842 14.706 5.74066 14.706C5.54423 14.706 5.35584 14.6272 5.21694 14.4871C5.07803 14.3469 5 14.1568 5 13.9586V2.74741C5 2.54919 5.07803 2.35908 5.21694 2.21891C5.35584 2.07874 5.54423 2 5.74066 2C5.91842 2 6.08878 2.06727 6.21469 2.1719L6.2221 2.16443L14.7323 9.36947C15.0508 9.63854 15.0879 10.1094 14.8286 10.4233C14.7175 10.5579 14.562 10.6475 14.4064 10.6774L12.0659 11.1408L13.6954 14.6761C13.888 15.0498 13.7102 15.4908 13.3399 15.6627L10.6587 16.9258Z"/></svg>', label: "Sélection" }, Xe = { id: `${K}undo`, type: "undo", icon: '<svg><path d="M11.708 15.833H5.854V14.083H11.708Q13 14.083 13.958 13.292Q14.917 12.5 14.917 11.271Q14.917 10.042 13.958 9.24Q13 8.438 11.708 8.438H6.667L8.792 10.562L7.562 11.792L3.333 7.562L7.562 3.333L8.792 4.562L6.667 6.688H11.708Q13.729 6.688 15.198 7.99Q16.667 9.292 16.667 11.25Q16.667 13.208 15.198 14.521Q13.729 15.833 11.708 15.833Z"/></svg>', label: "Undo" }, Ye = { id: `${K}redo`, type: "redo", icon: '<svg><path d="M8.292 15.833Q6.271 15.833 4.802 14.521Q3.333 13.208 3.333 11.25Q3.333 9.292 4.802 7.99Q6.271 6.688 8.292 6.688H13.333L11.208 4.562L12.438 3.333L16.667 7.562L12.438 11.792L11.208 10.562L13.333 8.438H8.292Q7 8.438 6.042 9.229Q5.083 10.021 5.083 11.25Q5.083 12.5 6.042 13.292Q7 14.083 8.292 14.083H14.146V15.833Z"/></svg>', label: "Redo" }, je = { id: `${K}clear`, type: "clear", icon: '<svg><path d="M7.854 13.812 10 11.688 12.125 13.812 13.354 12.604 11.208 10.458 13.354 8.312 12.125 7.104 10 9.229 7.854 7.104 6.625 8.312 8.771 10.458 6.625 12.604ZM5.896 17.5Q5.167 17.5 4.656 16.99Q4.146 16.479 4.146 15.75V5.125H3.333V3.375H7.542V2.5H12.458V3.375H16.667V5.125H15.833V15.75Q15.833 16.479 15.323 16.99Q14.812 17.5 14.083 17.5Z"/></svg>', label: "Clear" }, Mt = { id: `${K}export`, type: "export", icon: '<svg><path d="M10 13.271 5.708 8.979 6.958 7.729 9.125 9.896V3.333H10.875V9.896L13.042 7.729L14.292 8.979ZM5.083 16.667Q4.354 16.667 3.844 16.156Q3.333 15.646 3.333 14.917V12.5H5.083V14.917Q5.083 14.917 5.083 14.917Q5.083 14.917 5.083 14.917H14.917Q14.917 14.917 14.917 14.917Q14.917 14.917 14.917 14.917V12.5H16.667V14.917Q16.667 15.646 16.156 16.156Q15.646 16.667 14.917 16.667Z"/></svg>', label: "Export PNG" }, ti = { id: `${K}load`, type: "loadfile", icon: '<svg><path d="M3.417 16.667Q2.729 16.667 2.198 16.135Q1.667 15.604 1.667 14.917V5.083Q1.667 4.396 2.198 3.865Q2.729 3.333 3.417 3.333H8.25L9.917 5H16.667Q17.354 5 17.844 5.531Q18.333 6.062 18.333 6.75H3.417V14.917Q3.417 14.917 3.417 14.917Q3.417 14.917 3.417 14.917L5.438 8.5H19.583L17.396 15.479Q17.229 16.021 16.802 16.344Q16.375 16.667 15.833 16.667Z"/></svg>', label: "Load project" }, kt = { id: `${K}save`, type: "savefile", icon: '<svg><path d="M17.5 5.833V15.75Q17.5 16.479 16.99 16.99Q16.479 17.5 15.75 17.5H4.25Q3.521 17.5 3.01 16.99Q2.5 16.479 2.5 15.75V4.25Q2.5 3.521 3.01 3.01Q3.521 2.5 4.25 2.5H14.167ZM10 14.917Q11.062 14.917 11.823 14.156Q12.583 13.396 12.583 12.333Q12.583 11.271 11.823 10.51Q11.062 9.75 10 9.75Q8.938 9.75 8.177 10.51Q7.417 11.271 7.417 12.333Q7.417 13.396 8.177 14.156Q8.938 14.917 10 14.917ZM5.021 8.396H12.521V5.021H5.021Z"/></svg>', label: "Save project" }, ii = { id: `${K}upload-picture`, type: "uploadpicture", icon: It, label: "Upload picture" }, Ji = 2, Ki = "blue", Ae = 14, e1 = [[0, 0], [0.5, 0], [1, 0], [1, 0.5], [1, 1], [0.5, 1], [0, 1], [0, 0.5]], t1 = ["brush", "rect", "square", "line", "polygon", "circle", "curve", "ellipse", "picture", "text", "triangle"], i1 = "react-paint-canvas-drawcanvas", a1 = "react-paint-canvas-selectioncanvas", ai = { layersManipulation: !0, grid: 0, canGrow: !1, canShrink: !0, withExport: !0, withLoadAndSave: !0, withUploadPicture: !0, withUrlPicture: !1, availableTools: [$i, Ui, Gi, Bi, Xi, Yi, ji, _i, zt, qi], clearCallback: "empty", brushAlgo: "simple", isBrushShapeDoneOnMouseUp: !0, withFrameSelection: !1, withSkeleton: !0, canvasSelectionPadding: 0 }, Q1 = { canvasBackgroundColor: "white", canvasSelectionColor: Ki, canvasSelectionWidth: Ji }, n1 = (e, i) => !!(e.target instanceof Node && i) && i.contains(e.target), ht = 300, Tt = (e, i) => {
|
|
51
4
|
const t = { ...i };
|
|
52
5
|
for (const a of e)
|
|
53
6
|
delete t[a];
|
|
54
7
|
return t;
|
|
55
|
-
},
|
|
8
|
+
}, re = (e, i, t) => {
|
|
56
9
|
const a = Array.isArray(t) ? [...t] : { ...t }, s = Array.isArray(e) ? e : typeof e == "string" ? e.split(".") : [e];
|
|
57
|
-
return s.reduce((n,
|
|
58
|
-
},
|
|
59
|
-
if (!
|
|
10
|
+
return s.reduce((n, o, r) => (n[o] = At(n[o]) ? { ...n[o] } : Array.isArray(n[o]) ? [...n[o]] : n[o] === void 0 || n[o] === null ? {} : n[o], r === s.length - 1 && (n[o] = i), n[o]), a), a;
|
|
11
|
+
}, At = (e) => typeof e == "object" && !Array.isArray(e) && e !== null, xe = (e, i, t) => {
|
|
12
|
+
if (!At(i) || !At(t))
|
|
60
13
|
return t;
|
|
61
14
|
const a = { ...i };
|
|
62
15
|
for (const s in t)
|
|
63
|
-
|
|
16
|
+
Object.hasOwn(t, s) && (Object.hasOwn(a, s) ? a[s] = e(a[s], t[s], s) ?? xe(e, a[s], t[s]) : a[s] = t[s]);
|
|
64
17
|
return a;
|
|
65
|
-
},
|
|
18
|
+
}, s1 = (e, i) => {
|
|
66
19
|
if (e === i)
|
|
67
20
|
return !0;
|
|
68
21
|
if (typeof e != "object" || typeof i != "object" || e === null || i === null)
|
|
@@ -71,134 +24,169 @@ const ie = ["transparent", "black", "white", "red", "green", "blue", "yellow"],
|
|
|
71
24
|
if (t.length !== a.length)
|
|
72
25
|
return !1;
|
|
73
26
|
for (const s of t)
|
|
74
|
-
if (!a.includes(s) || !
|
|
27
|
+
if (!a.includes(s) || !s1(e[s], i[s]))
|
|
75
28
|
return !1;
|
|
76
29
|
return !0;
|
|
77
|
-
},
|
|
30
|
+
}, Lt = {}, se = (e = "") => (Lt[e] || (Lt[e] = 0), `${e}${++Lt[e]}`), Wt = (e) => e.filter((i) => i != null), o1 = (e) => {
|
|
31
|
+
e.lineCap = "round", e.lineJoin = "round";
|
|
32
|
+
}, Oe = (e, i = {}) => {
|
|
33
|
+
const { lineCap: t = "round", fillColor: a = "transparent", opacity: s = 100, strokeColor: n = Ki, lineWidth: o = Ji, lineDash: r = 0 } = i;
|
|
34
|
+
e.lineCap = t, e.globalAlpha = s / 100, e.fillStyle = a, e.strokeStyle = n, e.lineWidth = o, e.setLineDash(r === 0 ? [] : [ei[r][0] * o, ei[r][1] * o]);
|
|
35
|
+
}, Ot = (e, i, t, a) => {
|
|
36
|
+
e.save(), e.scale(i.canvasSize.scaleRatio, i.canvasSize.scaleRatio), e.translate(i.canvasOffset[0], i.canvasOffset[1]), t && a && (e.translate(a[0], a[1]), e.rotate(t), e.translate(-a[0], -a[1]));
|
|
37
|
+
}, ut = (e) => {
|
|
38
|
+
const i = new Path2D();
|
|
39
|
+
return i.rect(e.x, e.y, e.width, e.height), i;
|
|
40
|
+
}, gt = (e) => {
|
|
41
|
+
const i = new Path2D();
|
|
42
|
+
return i.arc(e.x, e.y, e.radius, 0, 2 * Math.PI), i;
|
|
43
|
+
}, Zt = (e) => {
|
|
44
|
+
const i = new Path2D();
|
|
45
|
+
return i.moveTo(...e.points[0]), i.lineTo(...e.points[1]), i;
|
|
46
|
+
}, S1 = (e) => {
|
|
47
|
+
const i = new Path2D();
|
|
48
|
+
return i.moveTo(...e.points[0]), i.lineTo(...e.points[1]), i.lineTo(...e.points[2]), i.lineTo(...e.points[0]), i;
|
|
49
|
+
}, $t = (e, i, t, a = !1) => {
|
|
50
|
+
const { borders: s } = _(i, t);
|
|
51
|
+
return { border: ut(s), shapePath: e, anchors: [...i.points.map((n, o) => a && o > 0 && o < i.points.length - 1 ? ut({ x: n[0] - 7, y: n[1] - 7, width: Ae / t.canvasSize.scaleRatio, height: Ae / t.canvasSize.scaleRatio }) : gt({ x: n[0], y: n[1], radius: 7 / t.canvasSize.scaleRatio }))] };
|
|
52
|
+
}, Je = (e, i) => {
|
|
78
53
|
const t = ((a, { brushAlgo: s }) => {
|
|
79
54
|
if (a.points.length < 1 || a.style?.strokeColor === "transparent")
|
|
80
55
|
return;
|
|
81
|
-
const n = a.points.flat(),
|
|
82
|
-
for (const
|
|
83
|
-
if (!
|
|
56
|
+
const n = a.points.flat(), o = n.map((c) => c[0]), r = n.map((c) => c[1]), l = Math.min(...o), p = Math.min(...r), d = new Path2D();
|
|
57
|
+
for (const c of a.points) {
|
|
58
|
+
if (!c.length)
|
|
84
59
|
return;
|
|
85
|
-
if (
|
|
86
|
-
d.rect(...
|
|
87
|
-
else if (d.moveTo(...
|
|
88
|
-
for (let
|
|
89
|
-
const g =
|
|
90
|
-
d.quadraticCurveTo(...g,
|
|
60
|
+
if (c.length === 1)
|
|
61
|
+
d.rect(...Qe(c[0], l, p, a.scaleX, a.scaleY), 1, 1);
|
|
62
|
+
else if (d.moveTo(...Qe(c[0], l, p, a.scaleX, a.scaleY)), s === "quadratic") {
|
|
63
|
+
for (let u = 0; u < c.slice(1).length - 2; u++) {
|
|
64
|
+
const g = Qe(c[u], l, p, a.scaleX, a.scaleY), v = Qe(c[u + 1], l, p, a.scaleX, a.scaleY), w = (g[0] + v[0]) / 2, M = (g[1] + v[1]) / 2;
|
|
65
|
+
d.quadraticCurveTo(...g, w, M);
|
|
91
66
|
}
|
|
92
|
-
d.quadraticCurveTo(...
|
|
67
|
+
d.quadraticCurveTo(...Qe(c[c.length - 2], l, p, a.scaleX, a.scaleY), ...Qe(c[c.length - 1], l, p, a.scaleX, a.scaleY));
|
|
93
68
|
} else
|
|
94
|
-
for (const
|
|
95
|
-
d.lineTo(...
|
|
69
|
+
for (const u of c.slice(1))
|
|
70
|
+
d.lineTo(...Qe(u, l, p, a.scaleX, a.scaleY));
|
|
96
71
|
}
|
|
97
72
|
return d;
|
|
98
73
|
})(e, i);
|
|
99
|
-
return { ...e, path: t, selection:
|
|
100
|
-
},
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
74
|
+
return { ...e, path: t, selection: Ke(t, e, i) };
|
|
75
|
+
}, b1 = Je, Et = (e) => 180 * e / Math.PI, r1 = (e, i) => {
|
|
76
|
+
const t = i.x - Math.min(Math.max(i.x, e.x), e.x + e.width), a = i.y - Math.min(Math.max(i.y, e.y), e.y + e.height);
|
|
77
|
+
return Math.sqrt(t * t + a * a) <= i.radius;
|
|
78
|
+
}, ue = ({ origin: e = [0, 0], point: i, rotation: t }) => {
|
|
79
|
+
const a = [i[0] - e[0], i[1] - e[1]], s = a[1] * Math.cos(t) - a[0] * Math.sin(t);
|
|
80
|
+
return [a[1] * Math.sin(t) + a[0] * Math.cos(t) + e[0], s + e[1]];
|
|
81
|
+
}, ni = (e) => (e + 2 * Math.PI) % (2 * Math.PI), si = ({ targetVector: [e, i], radian: t = !0, originVector: a }) => {
|
|
82
|
+
const s = ni(Math.atan2(i[1] - e[1], i[0] - e[0]));
|
|
83
|
+
if (a) {
|
|
84
|
+
const [n, o] = a, r = Math.atan2(o[1] - n[1], o[0] - n[0]), l = ni(s - r);
|
|
85
|
+
return t ? l : Et(l);
|
|
86
|
+
}
|
|
87
|
+
return t ? s : Et(s);
|
|
88
|
+
}, Ne = (e, i = 2) => Math.round(e * 10 ** i) / 10 ** i, Qe = (e, i, t, a = 1, s = 1) => [i + (e[0] - i) * a, t + (e[1] - t) * s], O = (e, i, t = 0) => {
|
|
89
|
+
if (!i.gridGap)
|
|
90
|
+
return Ne(e);
|
|
91
|
+
const a = e + t, s = a >= 0 ? i.gridGap : -i.gridGap;
|
|
104
92
|
return a + s / 2 - (a + s / 2) % s - t;
|
|
105
|
-
},
|
|
93
|
+
}, C1 = (e, i, t = 0) => i.gridGap ? e + Math.PI / 18 / 2 - (e + Math.PI / 18 / 2) % (Math.PI / 18) : Ne(e, 3), w1 = (e, i, t, a, s, n) => {
|
|
106
94
|
switch (a.mode) {
|
|
107
95
|
case "brush":
|
|
108
|
-
return ((
|
|
109
|
-
const
|
|
110
|
-
return
|
|
96
|
+
return ((o, r, l) => {
|
|
97
|
+
const p = { ...o, points: re(o.points.length - 1, [...o.points[o.points.length - 1], [Math.round(r[0]), Math.round(r[1])]], o.points) };
|
|
98
|
+
return Je(p, l);
|
|
111
99
|
})(i, t, s);
|
|
112
100
|
case "translate":
|
|
113
|
-
return
|
|
101
|
+
return Dt(t, a.originalShape, a.cursorStartPosition, s);
|
|
114
102
|
case "rotate":
|
|
115
|
-
return
|
|
103
|
+
return R1(i, t, a.originalShape, a.cursorStartPosition, a.center, s);
|
|
116
104
|
case "resize":
|
|
117
|
-
return
|
|
105
|
+
return I1(e, i, t, a.originalShape, a, s, n);
|
|
118
106
|
default:
|
|
119
107
|
return i;
|
|
120
108
|
}
|
|
121
|
-
},
|
|
122
|
-
const { borders: a } =
|
|
123
|
-
return { border:
|
|
124
|
-
},
|
|
109
|
+
}, Ke = (e, i, t) => {
|
|
110
|
+
const { borders: a } = _(i, t);
|
|
111
|
+
return { border: ut(a), shapePath: e, line: Zt({ points: [[a.x + a.width / 2, a.y], [a.x + a.width / 2, a.y - 23 / t.canvasSize.scaleRatio]] }), anchors: [gt({ x: a.x + a.width / 2, y: a.y - 23 / t.canvasSize.scaleRatio, radius: 7 / t.canvasSize.scaleRatio }), ...e1.map((s) => gt({ x: a.x + a.width * s[0], y: a.y + a.height * s[1], radius: 7 / t.canvasSize.scaleRatio }))] };
|
|
112
|
+
}, oi = ({ borderStart: e, borderSize: i, vector: t, settings: a, invertedAxe: s, anchor: n }) => {
|
|
125
113
|
switch (n) {
|
|
126
114
|
case 0: {
|
|
127
115
|
if (s) {
|
|
128
|
-
const
|
|
129
|
-
return [e +
|
|
116
|
+
const r = i - 2 * a.selectionPadding;
|
|
117
|
+
return [e + r, t - r];
|
|
130
118
|
}
|
|
131
|
-
const
|
|
132
|
-
return [e + i -
|
|
119
|
+
const o = Math.max(2 * a.selectionPadding, i - t);
|
|
120
|
+
return [e + i - o, o];
|
|
133
121
|
}
|
|
134
122
|
case 0.5:
|
|
135
123
|
return [e, i];
|
|
136
124
|
case 1:
|
|
137
125
|
if (s) {
|
|
138
|
-
const
|
|
139
|
-
return [e +
|
|
126
|
+
const o = i + t;
|
|
127
|
+
return [e + o, 2 * a.selectionPadding - o];
|
|
140
128
|
}
|
|
141
129
|
return [e, Math.max(2 * a.selectionPadding, i + t)];
|
|
142
130
|
default:
|
|
143
131
|
return [0, 0];
|
|
144
132
|
}
|
|
145
|
-
},
|
|
146
|
-
const
|
|
147
|
-
return { borderX:
|
|
148
|
-
},
|
|
149
|
-
const { center: n, borders:
|
|
133
|
+
}, ri = ({ borderX: e, borderWidth: i, borderY: t, borderHeight: a, center: s, originalShape: n }) => {
|
|
134
|
+
const o = [e + i / 2 - s[0], t + a / 2 - s[1]], [r, l] = ue({ point: o, rotation: -n.rotation });
|
|
135
|
+
return { borderX: Ne(e + r - o[0]), borderWidth: Ne(i), borderY: Ne(t + l - o[1]), borderHeight: Ne(a) };
|
|
136
|
+
}, Be = (e, i, t, a, s = !1) => {
|
|
137
|
+
const { center: n, borders: o } = _(i, a), r = ue({ origin: n, point: e, rotation: i.rotation }), l = t.anchor[0] === 0 && r[0] >= o.x + o.width || t.anchor[0] === 1 && r[0] <= o.x, p = t.anchor[1] === 0 && r[1] >= o.y + o.height || t.anchor[1] === 1 && r[1] <= o.y, d = [O(r[0], a, t.anchor[0] === 0 && !l || t.anchor[0] === 1 && l ? a.selectionPadding : -a.selectionPadding), O(r[1], a, t.anchor[1] === 0 && !p || t.anchor[1] === 1 && p ? a.selectionPadding : -a.selectionPadding)], c = a.gridGap ? [t.anchor[0] === 0 ? o.x : t.anchor[0] === 0.5 ? o.x + o.width / 2 : o.x + o.width, t.anchor[1] === 0 ? o.y : t.anchor[1] === 0.5 ? o.y + o.height / 2 : o.y + o.height] : ue({ origin: n, point: t.cursorStartPosition, rotation: i.rotation }), u = [d[0] - c[0], d[1] - c[1]], [g, v] = oi({ borderStart: o.x, borderSize: o.width, vector: u[0], settings: a, invertedAxe: l, anchor: t.anchor[0] }), [w, M] = oi({ borderStart: o.y, borderSize: o.height, vector: u[1], settings: a, invertedAxe: p, anchor: t.anchor[1] });
|
|
150
138
|
if (s) {
|
|
151
|
-
const
|
|
152
|
-
const { selectionPadding:
|
|
153
|
-
let
|
|
154
|
-
return
|
|
155
|
-
})(
|
|
156
|
-
return
|
|
139
|
+
const S = ((L, b, k, P, E, A, H, C, V, z) => {
|
|
140
|
+
const { selectionPadding: y } = z, F = (b.width - 2 * y || 1) / (b.height - 2 * y || 1), x = (E - 2 * y) / (H - 2 * y);
|
|
141
|
+
let T, Z, f, m;
|
|
142
|
+
return V.anchor[0] !== 0.5 && V.anchor[1] !== 0.5 ? x < F ? (Z = A, m = H, f = (H - 2 * y) * F + 2 * y, T = V.anchor[0] === 0 ? b.width - L[0] > y ? b.x + (b.width - f) : b.x + b.width - 2 * y : b.width + L[0] > y ? b.x : b.x - f + 2 * y) : (T = P, f = E, m = (E - 2 * y) / F + 2 * y, Z = V.anchor[1] === 0 ? b.height - L[1] > y ? b.y + (b.height - m) : b.y + b.height - 2 * y : b.height + L[1] > y ? b.y : b.y - m + 2 * y) : V.anchor[0] !== 0.5 ? (T = P, f = E, m = (E - 2 * y) / F + 2 * y, Z = b.y + (b.height - m) / 2) : (Z = A, m = H, f = (H - 2 * y) * F + 2 * y, T = b.x + (b.width - f) / 2), { borderX: T, borderWidth: f, borderY: Z, borderHeight: m, center: k, originalShape: C };
|
|
143
|
+
})(u, o, n, g, v, w, M, i, t, a);
|
|
144
|
+
return ri(S);
|
|
157
145
|
}
|
|
158
|
-
return
|
|
159
|
-
},
|
|
160
|
-
const t =
|
|
161
|
-
return { ...e, path: t, selection:
|
|
162
|
-
},
|
|
146
|
+
return ri({ borderX: g, borderWidth: v, borderY: w, borderHeight: M, center: n, originalShape: i });
|
|
147
|
+
}, vt = (e, i) => {
|
|
148
|
+
const t = gt(e);
|
|
149
|
+
return { ...e, path: t, selection: Ke(t, e, i) };
|
|
150
|
+
}, x1 = vt, Vt = (e, i, t) => {
|
|
163
151
|
const { clientX: a = 0, clientY: s = 0 } = "touches" in e && e.touches[0] ? e.touches[0] : "changedTouches" in e && e.changedTouches[0] ? e.changedTouches[0] : "clientX" in e ? e : {}, n = i?.getBoundingClientRect() ?? { left: 0, top: 0, width: t.canvasSize.width, height: t.canvasSize.height };
|
|
164
152
|
return [(a - n.left) * (t.canvasSize.width / n.width) / t.canvasSize.scaleRatio, (s - n.top) * (t.canvasSize.height / n.height) / t.canvasSize.scaleRatio];
|
|
165
|
-
},
|
|
153
|
+
}, li = (e) => "touches" in e, $e = (e, i, [t, a], [s, n]) => ue({ origin: [t - s, a - n], point: e, rotation: i }), lt = (e, i, t) => t ? r1(e, { x: i[0], y: i[1], radius: t }) : ((a, s) => s[0] >= a.x && s[0] <= a.x + a.width && s[1] >= a.y && s[1] <= a.y + a.height)(e, i), at = (e, i, t, a = !1, s = 0) => {
|
|
166
154
|
if (e.locked)
|
|
167
155
|
return !1;
|
|
168
|
-
const { canvasSize: { scaleRatio: n } } = t, { borders:
|
|
156
|
+
const { canvasSize: { scaleRatio: n } } = t, { borders: o, center: r } = _(e, t), l = $e(i, e.rotation, r, t.canvasOffset);
|
|
169
157
|
if (a)
|
|
170
158
|
if (e.type === "line" || e.type === "polygon" || e.type === "curve") {
|
|
171
|
-
for (let
|
|
172
|
-
if (
|
|
173
|
-
return { mode: "resize", anchor:
|
|
159
|
+
for (let p = 0; p < e.points.length; p++)
|
|
160
|
+
if (lt({ x: e.points[p][0] - 7 / n, y: e.points[p][1] - 7 / n, width: Ae / n, height: Ae / n }, l, s))
|
|
161
|
+
return { mode: "resize", anchor: p };
|
|
174
162
|
} else {
|
|
175
|
-
if (
|
|
163
|
+
if (lt({ x: o.x + o.width / 2 - 7 / n, y: o.y - Ae / n - 16 / n, width: Ae / n, height: Ae / n }, l, s))
|
|
176
164
|
return { mode: "rotate" };
|
|
177
|
-
for (const
|
|
178
|
-
if (
|
|
179
|
-
return { mode: "resize", anchor:
|
|
165
|
+
for (const p of e1)
|
|
166
|
+
if (lt({ x: o.x + o.width * p[0] - 7 / n, y: o.y + o.height * p[1] - 7 / n, width: Ae / n, height: Ae / n }, l, s))
|
|
167
|
+
return { mode: "resize", anchor: p };
|
|
180
168
|
}
|
|
181
|
-
return !!
|
|
182
|
-
},
|
|
169
|
+
return !!lt(o, l, s) && { mode: "translate" };
|
|
170
|
+
}, l1 = (e, i, t, a) => {
|
|
183
171
|
if (i.locked)
|
|
184
172
|
return !1;
|
|
185
|
-
const { center: s } =
|
|
186
|
-
return "path" in i && i.path ? i.style?.fillColor && i.style?.fillColor !== "transparent" ? !!e.isPointInPath(i.path, n[0], n[1]) && { mode: "translate" } : (e.lineWidth = (i.style?.lineWidth ?? 0) + 15, !!e.isPointInStroke(i.path, n[0], n[1]) && { mode: "translate" }) :
|
|
173
|
+
const { center: s } = _(i, a), n = $e(t, i.rotation, s, a.canvasOffset);
|
|
174
|
+
return "path" in i && i.path ? i.style?.fillColor && i.style?.fillColor !== "transparent" ? !!e.isPointInPath(i.path, n[0], n[1]) && { mode: "translate" } : (e.lineWidth = (i.style?.lineWidth ?? 0) + 15, !!e.isPointInStroke(i.path, n[0], n[1]) && { mode: "translate" }) : at(i, t, a, !1);
|
|
187
175
|
};
|
|
188
|
-
function
|
|
176
|
+
function di(e, i) {
|
|
189
177
|
const t = Math.max(e.x, i.x), a = Math.max(e.y, i.y), s = Math.min(e.x + (e.width || 1), i.x + (i.width || 1)), n = Math.min(e.y + (e.height || 1), i.y + (i.height || 1));
|
|
190
178
|
if (t < s && a < n)
|
|
191
179
|
return { x: t, y: a, width: s - t, height: n - a };
|
|
192
180
|
}
|
|
193
|
-
const
|
|
181
|
+
const ci = ({ ctx: e, path: i, rect: t, offset: a, checkFill: s }) => {
|
|
194
182
|
for (let n = 0; n < a; n += a / 2)
|
|
195
|
-
for (let
|
|
196
|
-
for (let
|
|
197
|
-
for (let l =
|
|
198
|
-
if (s ? e.isPointInPath(i,
|
|
183
|
+
for (let o = 0; o < a; o += a / 2)
|
|
184
|
+
for (let r = n + t.x; r < t.x + t.width; r += a)
|
|
185
|
+
for (let l = o + t.y; l < t.y + t.height; l += a)
|
|
186
|
+
if (s ? e.isPointInPath(i, r, l) : e.isPointInStroke(i, r, l))
|
|
199
187
|
return !0;
|
|
200
188
|
return !1;
|
|
201
|
-
},
|
|
189
|
+
}, _e = (e, i) => {
|
|
202
190
|
const t = ((a) => {
|
|
203
191
|
if (a.points.length < 1)
|
|
204
192
|
return;
|
|
@@ -208,11 +196,11 @@ const g1 = ({ ctx: e, path: i, rect: t, offset: a, checkFill: s }) => {
|
|
|
208
196
|
s.lineTo(...n);
|
|
209
197
|
return s.lineTo(...a.points[0]), s;
|
|
210
198
|
})(e);
|
|
211
|
-
return { ...e, path: t, selection:
|
|
212
|
-
},
|
|
199
|
+
return { ...e, path: t, selection: $t(t, e, i) };
|
|
200
|
+
}, M1 = _e, d1 = (e, i) => {
|
|
213
201
|
const t = Math.min(...e.points.map((n) => n[0])) - i.selectionPadding, a = Math.max(...e.points.map((n) => n[0])) + i.selectionPadding, s = Math.min(...e.points.map((n) => n[1])) - i.selectionPadding;
|
|
214
202
|
return { x: t, width: a - t, y: s, height: Math.max(...e.points.map((n) => n[1])) + i.selectionPadding - s };
|
|
215
|
-
},
|
|
203
|
+
}, qe = (e, i) => {
|
|
216
204
|
const t = ((a) => {
|
|
217
205
|
if (a.points.length < 3)
|
|
218
206
|
return;
|
|
@@ -222,173 +210,138 @@ const g1 = ({ ctx: e, path: i, rect: t, offset: a, checkFill: s }) => {
|
|
|
222
210
|
s.quadraticCurveTo(...a.points[n], a.points.length - 2 === n ? a.points[n + 1][0] : (a.points[n + 1][0] - a.points[n][0]) / 2 + a.points[n][0], a.points.length - 2 === n ? a.points[n + 1][1] : (a.points[n + 1][1] - a.points[n][1]) / 2 + a.points[n][1]);
|
|
223
211
|
return s;
|
|
224
212
|
})(e);
|
|
225
|
-
return { ...e, path: t, selection:
|
|
226
|
-
},
|
|
213
|
+
return { ...e, path: t, selection: $t(t, e, i, !0) };
|
|
214
|
+
}, k1 = qe, L1 = d1, ft = (e, i) => {
|
|
227
215
|
const t = ((a) => {
|
|
228
216
|
const s = new Path2D();
|
|
229
217
|
return s.ellipse(a.x, a.y, a.radiusX, a.radiusY, 0, 0, 2 * Math.PI), s;
|
|
230
218
|
})(e);
|
|
231
|
-
return { ...e, path: t, selection:
|
|
232
|
-
},
|
|
233
|
-
return t = { ...e, type: "triangle" }, { ...t, path:
|
|
219
|
+
return { ...e, path: t, selection: Ke(t, e, i) };
|
|
220
|
+
}, V1 = ft, pi = (e) => {
|
|
221
|
+
return t = { ...e, type: "triangle" }, { ...t, path: S1(t) };
|
|
234
222
|
var t;
|
|
235
|
-
},
|
|
223
|
+
}, P1 = (e, i) => {
|
|
236
224
|
e.globalAlpha !== 0 && i.path && (i.style?.fillColor !== "transparent" && e.fill(i.path), i.style?.strokeColor !== "transparent" && e.stroke(i.path));
|
|
237
|
-
},
|
|
225
|
+
}, mt = (e, i) => {
|
|
238
226
|
const t = [];
|
|
239
227
|
let a;
|
|
240
228
|
if (e.style?.lineArrow === 1 || e.style?.lineArrow === 2 || e.style?.lineArrow === 3) {
|
|
241
|
-
const s = Math.PI / 2 -
|
|
242
|
-
e.style?.lineArrow !== 1 && e.style?.lineArrow !== 3 || t.push(
|
|
243
|
-
const n = (({ line:
|
|
244
|
-
const
|
|
245
|
-
let
|
|
229
|
+
const s = Math.PI / 2 - si({ targetVector: [e.points[0], e.points[1]] });
|
|
230
|
+
e.style?.lineArrow !== 1 && e.style?.lineArrow !== 3 || t.push(pi(hi(e.points[0], s, e.style))), e.style?.lineArrow !== 2 && e.style?.lineArrow !== 3 || t.push(pi(hi(e.points[1], s + Math.PI, e.style)));
|
|
231
|
+
const n = (({ line: o, size: r, direction: l }) => {
|
|
232
|
+
const p = Math.PI / 2 - si({ targetVector: [o.points[0], o.points[1]] }), d = [o.points[0][0] + (o.points[1][0] - o.points[0][0]) / 2, o.points[0][1] + (o.points[1][1] - o.points[0][1]) / 2];
|
|
233
|
+
let c, u;
|
|
246
234
|
if (["start", "both"].includes(l)) {
|
|
247
|
-
const g =
|
|
248
|
-
|
|
235
|
+
const g = ue({ point: o.points[0], origin: d, rotation: -p });
|
|
236
|
+
c = ue({ point: [g[0], g[1] + r], origin: d, rotation: p });
|
|
249
237
|
} else
|
|
250
|
-
|
|
238
|
+
c = [...o.points[0]];
|
|
251
239
|
if (["end", "both"].includes(l)) {
|
|
252
|
-
const g =
|
|
253
|
-
|
|
240
|
+
const g = ue({ point: o.points[1], origin: d, rotation: -p });
|
|
241
|
+
u = ue({ point: [g[0], g[1] - r], origin: d, rotation: p });
|
|
254
242
|
} else
|
|
255
|
-
|
|
256
|
-
return { points: [
|
|
243
|
+
u = [...o.points[1]];
|
|
244
|
+
return { points: [c, u] };
|
|
257
245
|
})({ line: e, size: 10 + 2 * (e.style?.lineWidth ?? 0), direction: e.style?.lineArrow === 1 ? "start" : e.style?.lineArrow === 2 ? "end" : "both" });
|
|
258
|
-
a =
|
|
246
|
+
a = Zt(n);
|
|
259
247
|
} else
|
|
260
|
-
a =
|
|
261
|
-
return { ...e, path: a, selection:
|
|
262
|
-
},
|
|
263
|
-
const a = [
|
|
248
|
+
a = Zt(e);
|
|
249
|
+
return { ...e, path: a, selection: $t(a, e, i), arrows: t, style: { ...e.style, lineCap: e.style?.lineArrow ? "butt" : "round" } };
|
|
250
|
+
}, H1 = mt, hi = (e, i, t) => {
|
|
251
|
+
const a = [ue({ point: [0, 0], rotation: i }), ue({ point: [-(5 + (t.lineWidth ?? 0)), 10 + 2 * (t.lineWidth ?? 0)], rotation: i }), ue({ point: [5 + (t.lineWidth ?? 0), 10 + 2 * (t.lineWidth ?? 0)], rotation: i })];
|
|
264
252
|
return { points: [[e[0] + a[0][0], e[1] + a[0][1]], [e[0] + a[1][0], e[1] + a[1][1]], [e[0] + a[2][0], e[1] + a[2][1]]], style: { ...t, fillColor: t.strokeColor, strokeColor: "transparent" } };
|
|
265
|
-
},
|
|
266
|
-
const
|
|
267
|
-
return e
|
|
268
|
-
},
|
|
269
|
-
const i = new DOMParser().parseFromString(e, "text/xml").getElementsByTagName("svg")[0], t = i.getAttribute("width"), a = i.getAttribute("height");
|
|
270
|
-
let s;
|
|
271
|
-
if (t || a)
|
|
272
|
-
s = e;
|
|
273
|
-
else {
|
|
274
|
-
const r = i.getAttribute("viewBox") ?? "0 0 300 300", [, , o, l] = r.split(" ");
|
|
275
|
-
i.setAttribute("width", o ?? ut), i.setAttribute("height", l ?? ut), s = new XMLSerializer().serializeToString(i);
|
|
276
|
-
}
|
|
277
|
-
const n = new Blob([s], { type: "image/svg+xml" });
|
|
278
|
-
return URL.createObjectURL(n);
|
|
279
|
-
}, vi = (e) => (e instanceof File ? e.name : e).includes(".svg"), fi = (e) => vi(e) ? fetch(e).then((i) => i.text()).then((i) => gi(i)) : fetch(e).then((i) => i.blob()).then((i) => URL.createObjectURL(i)), y1 = (e, i) => {
|
|
280
|
-
const t = document.createElement("a");
|
|
281
|
-
t.href = e, t.download = i, document.body.appendChild(t), t.click(), document.body.removeChild(t);
|
|
282
|
-
}, ra = (e) => {
|
|
283
|
-
const i = document.createElement("canvas");
|
|
284
|
-
i.width = e.width, i.height = e.height;
|
|
285
|
-
const t = i.getContext("2d");
|
|
286
|
-
return t ? (t.drawImage(e, 0, 0), i.toDataURL("image/png")) : "";
|
|
287
|
-
}, Q1 = (e, i, t, a) => {
|
|
288
|
-
const s = document.createElement("canvas");
|
|
289
|
-
s.width = i, s.height = t;
|
|
290
|
-
const n = s.getContext("2d");
|
|
291
|
-
if (!n)
|
|
292
|
-
return "";
|
|
293
|
-
n.clearRect(0, 0, i, t), li(n);
|
|
294
|
-
for (let r = e.length - 1; r >= 0; r--)
|
|
295
|
-
mi(n, e[r], te(["canvasSize", "scaleRatio"], 1, a));
|
|
296
|
-
return s.toDataURL("image/png");
|
|
297
|
-
}, la = (e, i, t) => {
|
|
298
|
-
return s = pi(e, i, t), `data:text/plain;charset=utf-8,${encodeURIComponent(JSON.stringify(s))}`;
|
|
299
|
-
var s;
|
|
300
|
-
}, mt = (e, i) => {
|
|
301
|
-
const t = ct(e);
|
|
302
|
-
return { ...e, path: t, selection: Xe(t, e, i) };
|
|
303
|
-
}, da = mt, ca = (e, i) => {
|
|
253
|
+
}, yt = (e, i) => {
|
|
254
|
+
const t = ut(e);
|
|
255
|
+
return { ...e, path: t, selection: Ke(t, e, i) };
|
|
256
|
+
}, T1 = yt, A1 = (e, i) => {
|
|
304
257
|
e.globalAlpha !== 0 && i.path && (i.style?.fillColor !== "transparent" && e.fill(i.path), i.style?.strokeColor !== "transparent" && e.stroke(i.path));
|
|
305
|
-
},
|
|
306
|
-
const [n,
|
|
307
|
-
if (!(
|
|
308
|
-
return [
|
|
309
|
-
const
|
|
310
|
-
if (
|
|
311
|
-
const v =
|
|
312
|
-
return [v, v /
|
|
258
|
+
}, ui = (e, i) => ({ x: e.x - i.selectionPadding, width: e.width + 2 * i.selectionPadding, y: e.y - i.selectionPadding, height: e.height + 2 * i.selectionPadding }), gi = (e, i, t, a, [s, n] = [!1, !1]) => ((o, r, [l, p], [d, c]) => ue({ origin: [l - d, p - c], point: o, rotation: -r }))([e[0] === 0.5 ? t.x + t.width / 2 : e[0] === 0 ? t.x + (s ? 0 : t.width) : t.x + (s ? t.width : 0), e[1] === 0.5 ? t.y + t.height / 2 : e[1] === 0 ? t.y + (n ? 0 : t.height) : t.y + (n ? t.height : 0)], t.rotation, i, a.canvasOffset), Qt = (e, i) => ({ ...e, selection: Ke(void 0, e, i) }), Z1 = Qt, vi = (e, i, t, a, s) => {
|
|
259
|
+
const [n, o] = ((r, l, p, d, c = !1) => {
|
|
260
|
+
if (!(r && l && d && p))
|
|
261
|
+
return [ht, ht];
|
|
262
|
+
const u = r / l;
|
|
263
|
+
if (u > p / d) {
|
|
264
|
+
const v = c ? p : Math.min(r, p);
|
|
265
|
+
return [v, v / u];
|
|
313
266
|
}
|
|
314
|
-
const g =
|
|
315
|
-
return [g *
|
|
267
|
+
const g = c ? d : Math.min(l, d);
|
|
268
|
+
return [g * u, g];
|
|
316
269
|
})(e.width, e.height, t, a, !0);
|
|
317
|
-
return
|
|
318
|
-
},
|
|
319
|
-
const
|
|
320
|
-
|
|
270
|
+
return Qt({ toolId: zt.id, type: "picture", id: se("picture_"), x: (t - n) / 2, y: (a - o) / 2, width: n, height: o, src: i, img: e, rotation: 0 }, s);
|
|
271
|
+
}, E1 = (e, i, t, a) => new Promise((s, n) => {
|
|
272
|
+
const o = new Image();
|
|
273
|
+
o.onerror = () => {
|
|
321
274
|
n(new Error("Some images could not be loaded"));
|
|
322
275
|
}, setTimeout(() => {
|
|
323
276
|
n(new Error("Timeout while loading images"));
|
|
324
|
-
}, 4e3), e instanceof File ? ((
|
|
325
|
-
const g = URL.createObjectURL(
|
|
326
|
-
|
|
327
|
-
if (URL.revokeObjectURL(
|
|
328
|
-
const
|
|
329
|
-
if (g ===
|
|
330
|
-
return void (
|
|
277
|
+
}, 4e3), e instanceof File ? ((r, l, p, d, c, u) => {
|
|
278
|
+
const g = URL.createObjectURL(p);
|
|
279
|
+
r.onload = async () => {
|
|
280
|
+
if (URL.revokeObjectURL(r.src), h1(p) && !r.width && !r.height) {
|
|
281
|
+
const w = await p.text(), M = p1(w);
|
|
282
|
+
if (g === r.src)
|
|
283
|
+
return void (r.src = M);
|
|
331
284
|
}
|
|
332
|
-
const v =
|
|
285
|
+
const v = vi(r, r.src, d, c, u);
|
|
333
286
|
l(v);
|
|
334
|
-
},
|
|
335
|
-
})(
|
|
336
|
-
|
|
337
|
-
URL.revokeObjectURL(
|
|
338
|
-
const g =
|
|
287
|
+
}, r.src = g;
|
|
288
|
+
})(o, s, e, i, t, a) : ((r, l, p, d, c, u) => {
|
|
289
|
+
r.onload = () => {
|
|
290
|
+
URL.revokeObjectURL(r.src);
|
|
291
|
+
const g = vi(r, p, d, c, u);
|
|
339
292
|
l(g);
|
|
340
|
-
},
|
|
341
|
-
|
|
293
|
+
}, u1(p).then((g) => {
|
|
294
|
+
r.src = g;
|
|
342
295
|
}).catch(() => {
|
|
343
|
-
|
|
296
|
+
r.src = "";
|
|
344
297
|
});
|
|
345
|
-
})(
|
|
346
|
-
}),
|
|
298
|
+
})(o, s, e, i, t, a);
|
|
299
|
+
}), Pt = ["Texte"], St = (e, i) => ({ ...e, selection: Ke(void 0, e, i) }), D1 = St, Ut = (e, i, t, a, s, n = st) => {
|
|
347
300
|
e.font = `${s ? "italic" : ""} ${a ? "bold" : ""} 1px ${n}`;
|
|
348
|
-
const
|
|
349
|
-
return Math.min(...
|
|
350
|
-
},
|
|
351
|
-
const s = { ...i, value: t }, n = ((v,
|
|
352
|
-
v.font = `${
|
|
353
|
-
const k =
|
|
301
|
+
const o = i.map((r) => t / e.measureText(r).width);
|
|
302
|
+
return Math.min(...o) || 36;
|
|
303
|
+
}, F1 = (e, i, t, a) => {
|
|
304
|
+
const s = { ...i, value: t }, n = ((v, w, M, S, L, b = st) => {
|
|
305
|
+
v.font = `${L ? "italic" : ""} ${S ? "bold" : ""} ${M}px ${b}`;
|
|
306
|
+
const k = w.map((P) => v.measureText(P).width);
|
|
354
307
|
return Math.max(...k) || 20;
|
|
355
|
-
})(e, s.value, s.fontSize, s.style?.fontBold ?? !1, s.style?.fontItalic ?? !1, s.style?.fontFamily),
|
|
356
|
-
return { ...
|
|
357
|
-
},
|
|
358
|
-
const s = [
|
|
308
|
+
})(e, s.value, s.fontSize, s.style?.fontBold ?? !1, s.style?.fontItalic ?? !1, s.style?.fontFamily), o = s.fontSize * s.value.length, r = { ...s, width: n, height: o }, { center: l } = _(i, a), { center: p } = _(r, a), [d, c] = gi([1, 1], l, i, a), [u, g] = gi([1, 1], p, r, a, [!1, !1]);
|
|
309
|
+
return { ...r, x: r.x - (u - d), y: r.y - (g - c) };
|
|
310
|
+
}, fi = (e, i, t, a) => {
|
|
311
|
+
const s = [O(t[0], a), O(t[1], a)];
|
|
359
312
|
switch (i.type) {
|
|
360
313
|
case "brush":
|
|
361
|
-
return ((n,
|
|
314
|
+
return ((n, o, r) => Je({ toolId: n.id, type: n.type, id: se(`${n.type}_`), points: [[o]], rotation: 0, scaleX: 1, scaleY: 1, style: { opacity: n.settings.opacity.default, strokeColor: n.settings.strokeColor.default, lineWidth: n.settings.lineWidth.default, lineDash: n.settings.lineDash.default } }, r))(i, s, a);
|
|
362
315
|
case "line":
|
|
363
|
-
return ((n,
|
|
364
|
-
const l = { toolId: n.id, type: n.type, id:
|
|
365
|
-
return
|
|
316
|
+
return ((n, o, r) => {
|
|
317
|
+
const l = { toolId: n.id, type: n.type, id: se(`${n.type}_`), points: [o, o], rotation: 0, style: { opacity: n.settings.opacity.default, strokeColor: n.settings.strokeColor.default, lineWidth: n.settings.lineWidth.default, lineDash: n.settings.lineDash.default, lineArrow: n.settings.lineArrow.default } };
|
|
318
|
+
return mt(l, r);
|
|
366
319
|
})(i, s, a);
|
|
367
320
|
case "polygon":
|
|
368
|
-
return ((n,
|
|
321
|
+
return ((n, o, r) => _e({ toolId: n.id, type: n.type, id: se(`${n.type}_`), points: new Array(n.settings.pointsCount.default).fill(o), rotation: 0, style: { opacity: n.settings.opacity.default, fillColor: n.settings.fillColor.default, strokeColor: n.settings.strokeColor.default, lineWidth: n.settings.lineWidth.default, lineDash: n.settings.lineDash.default, pointsCount: n.settings.pointsCount.default } }, r))(i, s, a);
|
|
369
322
|
case "curve":
|
|
370
|
-
return ((n,
|
|
323
|
+
return ((n, o, r) => qe({ toolId: n.id, type: n.type, id: se(`${n.type}_`), points: new Array(n.settings.pointsCount.default).fill(o), rotation: 0, style: { opacity: n.settings.opacity.default, fillColor: n.settings.fillColor.default, strokeColor: n.settings.strokeColor.default, lineWidth: n.settings.lineWidth.default, lineDash: n.settings.lineDash.default, pointsCount: n.settings.pointsCount.default } }, r))(i, s, a);
|
|
371
324
|
case "rect":
|
|
372
325
|
case "square":
|
|
373
|
-
return ((n,
|
|
374
|
-
const d = { toolId: n.id, type: n.type, id:
|
|
375
|
-
return
|
|
326
|
+
return ((n, o, r, l = 0, p = 0) => {
|
|
327
|
+
const d = { toolId: n.id, type: n.type, id: se(`${n.type}_`), x: o[0], y: o[1], width: l, height: p, rotation: 0, style: { opacity: n.settings.opacity.default, fillColor: n.settings.fillColor.default, strokeColor: n.settings.strokeColor.default, lineWidth: n.settings.lineWidth.default, lineDash: n.settings.lineDash.default } };
|
|
328
|
+
return yt(d, r);
|
|
376
329
|
})(i, s, a);
|
|
377
330
|
case "text":
|
|
378
|
-
return ((n,
|
|
379
|
-
const
|
|
380
|
-
return
|
|
331
|
+
return ((n, o, r, l) => {
|
|
332
|
+
const p = Ut(n, Pt, 50, o.settings?.fontBold.default ?? !1, o.settings?.fontItalic.default ?? !1, o.settings.fontFamily.default);
|
|
333
|
+
return St({ toolId: o.id, type: o.type, id: se(`${o.type}_`), x: r[0], y: r[1], value: Pt, fontSize: p, width: 50, height: p * (Pt.length || 1), rotation: 0, style: { opacity: o.settings.opacity.default, strokeColor: o.settings.strokeColor.default, fontFamily: o.settings.fontFamily.default, fontItalic: o.settings.fontItalic.default, fontBold: o.settings.fontBold.default } }, l);
|
|
381
334
|
})(e, i, s, a);
|
|
382
335
|
case "ellipse":
|
|
383
|
-
return ((n,
|
|
336
|
+
return ((n, o, r) => ft({ toolId: n.id, type: n.type, id: se(`${n.type}_`), x: o[0], y: o[1], radiusX: 0, radiusY: 0, rotation: 0, style: { opacity: n.settings.opacity.default, fillColor: n.settings.fillColor.default, strokeColor: n.settings.strokeColor.default, lineWidth: n.settings.lineWidth.default, lineDash: n.settings.lineDash.default } }, r))(i, s, a);
|
|
384
337
|
case "circle":
|
|
385
|
-
return ((n,
|
|
338
|
+
return ((n, o, r) => vt({ toolId: n.id, type: n.type, id: se(`${n.type}_`), x: o[0], y: o[1], radius: 0, rotation: 0, style: { opacity: n.settings.opacity.default, fillColor: n.settings.fillColor.default, strokeColor: n.settings.strokeColor.default, lineWidth: n.settings.lineWidth.default, lineDash: n.settings.lineDash.default } }, r))(i, s, a);
|
|
386
339
|
}
|
|
387
|
-
},
|
|
340
|
+
}, c1 = (e, i, t) => {
|
|
388
341
|
if (i.visible === !1)
|
|
389
342
|
return;
|
|
390
|
-
const { center: a } =
|
|
391
|
-
switch (
|
|
343
|
+
const { center: a } = _(i, t);
|
|
344
|
+
switch (Ot(e, t, i.rotation, a), Oe(e, i.style), i.type) {
|
|
392
345
|
case "brush":
|
|
393
346
|
((s, n) => {
|
|
394
347
|
n.points.length < 1 || !n.path || s.globalAlpha !== 0 && n.style?.strokeColor !== "transparent" && s.globalAlpha !== 0 && s.stroke(n.path);
|
|
@@ -397,9 +350,9 @@ const g1 = ({ ctx: e, path: i, rect: t, offset: a, checkFill: s }) => {
|
|
|
397
350
|
case "text":
|
|
398
351
|
((s, n) => {
|
|
399
352
|
if (s.globalAlpha !== 0 && n.style?.strokeColor && n.style.strokeColor !== "transparent") {
|
|
400
|
-
s.font = `${n.style?.fontItalic ? "italic" : ""} ${n.style?.fontBold ? "bold" : ""} ${n.fontSize}px ${n.style?.fontFamily ??
|
|
401
|
-
for (let
|
|
402
|
-
s.fillText(n.value[
|
|
353
|
+
s.font = `${n.style?.fontItalic ? "italic" : ""} ${n.style?.fontBold ? "bold" : ""} ${n.fontSize}px ${n.style?.fontFamily ?? st}`, s.textBaseline = "top", s.fillStyle = n.style.strokeColor;
|
|
354
|
+
for (let o = 0; o < n.value.length; o++)
|
|
355
|
+
s.fillText(n.value[o], n.x, n.y + o * n.fontSize, n.width);
|
|
403
356
|
}
|
|
404
357
|
})(e, i);
|
|
405
358
|
break;
|
|
@@ -407,8 +360,8 @@ const g1 = ({ ctx: e, path: i, rect: t, offset: a, checkFill: s }) => {
|
|
|
407
360
|
((s, n) => {
|
|
408
361
|
if (s.globalAlpha !== 0 && n.path) {
|
|
409
362
|
n.style?.fillColor !== "transparent" && s.fill(n.path), n.style?.strokeColor !== "transparent" && s.stroke(n.path);
|
|
410
|
-
for (const
|
|
411
|
-
|
|
363
|
+
for (const o of n.arrows ?? [])
|
|
364
|
+
Oe(s, o.style), P1(s, o);
|
|
412
365
|
}
|
|
413
366
|
})(e, i);
|
|
414
367
|
break;
|
|
@@ -434,7 +387,7 @@ const g1 = ({ ctx: e, path: i, rect: t, offset: a, checkFill: s }) => {
|
|
|
434
387
|
break;
|
|
435
388
|
case "rect":
|
|
436
389
|
case "square":
|
|
437
|
-
|
|
390
|
+
A1(e, i);
|
|
438
391
|
break;
|
|
439
392
|
case "picture":
|
|
440
393
|
((s, n) => {
|
|
@@ -442,153 +395,153 @@ const g1 = ({ ctx: e, path: i, rect: t, offset: a, checkFill: s }) => {
|
|
|
442
395
|
})(e, i);
|
|
443
396
|
}
|
|
444
397
|
e.restore();
|
|
445
|
-
},
|
|
398
|
+
}, N1 = (e, i) => {
|
|
446
399
|
switch (e.type) {
|
|
447
400
|
case "brush":
|
|
448
401
|
return ((t, { selectionPadding: a }) => {
|
|
449
|
-
const s = t.points.flat(), n = Math.min(...s.map((d) => d[0])),
|
|
450
|
-
return { x: n - a, width: l - n + a, y:
|
|
402
|
+
const s = t.points.flat(), n = Math.min(...s.map((d) => d[0])), o = Math.min(...s.map((d) => d[1])), r = s.map((d) => Qe(d, n, o, t.scaleX, t.scaleY)), l = Math.max(...r.map((d) => d[0])) + a, p = Math.max(...r.map((d) => d[1])) + a;
|
|
403
|
+
return { x: n - a, width: l - n + a, y: o - a, height: p - o + a };
|
|
451
404
|
})(e, i);
|
|
452
405
|
case "line":
|
|
453
406
|
return ((t, a) => ({ x: Math.min(t.points[0][0], t.points[1][0]) - a.selectionPadding, width: Math.abs(t.points[0][0] - t.points[1][0]) + 2 * a.selectionPadding, y: Math.min(t.points[0][1], t.points[1][1]) - a.selectionPadding, height: Math.abs(t.points[0][1] - t.points[1][1]) + 2 * a.selectionPadding }))(e, i);
|
|
454
407
|
case "polygon":
|
|
455
|
-
return
|
|
408
|
+
return d1(e, i);
|
|
456
409
|
case "curve":
|
|
457
|
-
return
|
|
410
|
+
return L1(e, i);
|
|
458
411
|
case "circle":
|
|
459
412
|
return ((t, a) => ({ x: t.x - t.radius - a.selectionPadding, width: 2 * (t.radius + a.selectionPadding), y: t.y - t.radius - a.selectionPadding, height: 2 * (t.radius + a.selectionPadding) }))(e, i);
|
|
460
413
|
case "ellipse":
|
|
461
414
|
return ((t, a) => ({ x: t.x - t.radiusX - a.selectionPadding, width: 2 * (t.radiusX + a.selectionPadding), y: t.y - t.radiusY - a.selectionPadding, height: 2 * (t.radiusY + a.selectionPadding) }))(e, i);
|
|
462
415
|
case "rect":
|
|
463
416
|
case "square":
|
|
464
|
-
return
|
|
417
|
+
return ui(e, i);
|
|
465
418
|
case "text":
|
|
466
419
|
return ((t, a) => ({ x: t.x - a.selectionPadding, width: t.width + 2 * a.selectionPadding, y: t.y - a.selectionPadding, height: t.height + 2 * a.selectionPadding }))(e, i);
|
|
467
420
|
case "picture":
|
|
468
|
-
return ((t, a) =>
|
|
421
|
+
return ((t, a) => ui(t, a))(e, i);
|
|
469
422
|
default:
|
|
470
423
|
return { x: 0, y: 0, width: 100, height: 100 };
|
|
471
424
|
}
|
|
472
|
-
},
|
|
473
|
-
const t =
|
|
425
|
+
}, _ = (e, i) => {
|
|
426
|
+
const t = N1(e, i), a = ((s) => [s.x + s.width / 2, s.y + s.height / 2])(t);
|
|
474
427
|
return { borders: t, center: a };
|
|
475
|
-
},
|
|
476
|
-
const
|
|
477
|
-
return { ...e, rotation:
|
|
478
|
-
},
|
|
428
|
+
}, R1 = (e, i, t, a, s, n) => {
|
|
429
|
+
const o = s[0] - a[0], r = s[1] - a[1], l = s[0] - i[0], p = s[1] - i[1], d = t.rotation + Math.atan2(p, l) - Math.atan2(r, o);
|
|
430
|
+
return { ...e, rotation: C1(d, n) };
|
|
431
|
+
}, I1 = (e, i, t, a, s, n, o) => {
|
|
479
432
|
switch (a.type) {
|
|
480
433
|
case "line":
|
|
481
|
-
return ((
|
|
482
|
-
const
|
|
483
|
-
return
|
|
434
|
+
return ((r, l, p, d) => {
|
|
435
|
+
const c = [O(r[0], d), O(r[1], d)], { center: u } = _(l, d), g = $e(c, l.rotation, u, d.canvasOffset), v = re(["points", p.anchor], g, l);
|
|
436
|
+
return mt(v, d);
|
|
484
437
|
})(t, a, s, n);
|
|
485
438
|
case "polygon":
|
|
486
|
-
return ((
|
|
487
|
-
const
|
|
488
|
-
return
|
|
439
|
+
return ((r, l, p, d) => {
|
|
440
|
+
const c = [O(r[0], d), O(r[1], d)], { center: u } = _(l, d), g = $e(c, l.rotation, u, d.canvasOffset), v = re(["points", p.anchor], g, l);
|
|
441
|
+
return _e(v, d);
|
|
489
442
|
})(t, a, s, n);
|
|
490
443
|
case "curve":
|
|
491
|
-
return ((
|
|
492
|
-
const
|
|
493
|
-
return
|
|
444
|
+
return ((r, l, p, d) => {
|
|
445
|
+
const c = [O(r[0], d), O(r[1], d)], { center: u } = _(l, d), g = $e(c, l.rotation, u, d.canvasOffset), v = re(["points", p.anchor], g, l);
|
|
446
|
+
return qe(v, d);
|
|
494
447
|
})(t, a, s, n);
|
|
495
448
|
case "brush":
|
|
496
|
-
return ((
|
|
497
|
-
const { borders:
|
|
498
|
-
if (!
|
|
449
|
+
return ((r, l, p, d, c) => {
|
|
450
|
+
const { borders: u } = _({ ...l, scaleX: 1, scaleY: 1 }, d), { borders: g } = _(l, d), { borderX: v, borderHeight: w, borderY: M, borderWidth: S } = Be(r, l, p, d, c), L = Math.max(0, u.width - 2 * d.selectionPadding), b = Math.max(0, u.height - 2 * d.selectionPadding), k = Math.max(0, S - 2 * d.selectionPadding), P = Math.max(0, w - 2 * d.selectionPadding), E = L ? k / L : 1, A = b ? P / b : 1;
|
|
451
|
+
if (!L || !b)
|
|
499
452
|
return l;
|
|
500
|
-
const H =
|
|
501
|
-
return
|
|
502
|
-
})(t, a, s, n,
|
|
453
|
+
const H = Ne(v - g.x), C = Ne(M - g.y);
|
|
454
|
+
return Je({ ...l, points: l.points.map((V) => V.map(([z, y]) => [z + H, y + C])), scaleX: E, scaleY: A }, d);
|
|
455
|
+
})(t, a, s, n, o);
|
|
503
456
|
case "circle":
|
|
504
|
-
return ((
|
|
505
|
-
const { borderX:
|
|
506
|
-
return
|
|
457
|
+
return ((r, l, p, d) => {
|
|
458
|
+
const { borderX: c, borderHeight: u, borderY: g, borderWidth: v } = Be(r, l, p, d, !0);
|
|
459
|
+
return vt({ ...l, radius: Math.max(0, v / 2 - d.selectionPadding), x: c + v / 2, y: g + u / 2 }, d);
|
|
507
460
|
})(t, a, s, n);
|
|
508
461
|
case "ellipse":
|
|
509
|
-
return ((
|
|
510
|
-
const { borderX:
|
|
511
|
-
return
|
|
512
|
-
})(t, a, s, n,
|
|
462
|
+
return ((r, l, p, d, c = !1) => {
|
|
463
|
+
const { borderX: u, borderHeight: g, borderY: v, borderWidth: w } = Be(r, l, p, d, c);
|
|
464
|
+
return ft({ ...l, radiusX: Math.max(0, w / 2 - d.selectionPadding), radiusY: Math.max(0, g / 2 - d.selectionPadding), x: u + w / 2, y: v + g / 2 }, d);
|
|
465
|
+
})(t, a, s, n, o);
|
|
513
466
|
case "rect":
|
|
514
467
|
case "square":
|
|
515
|
-
return ((
|
|
516
|
-
const { borderX:
|
|
517
|
-
return
|
|
518
|
-
})(t, a, s, n, i.type === "square" ||
|
|
468
|
+
return ((r, l, p, d, c = !1) => {
|
|
469
|
+
const { borderX: u, borderHeight: g, borderY: v, borderWidth: w } = Be(r, l, p, d, c);
|
|
470
|
+
return yt({ ...l, width: Math.max(0, w - 2 * d.selectionPadding), height: Math.max(0, g - 2 * d.selectionPadding), x: u + d.selectionPadding, y: v + d.selectionPadding }, d);
|
|
471
|
+
})(t, a, s, n, i.type === "square" || o);
|
|
519
472
|
case "text":
|
|
520
|
-
return ((
|
|
521
|
-
const { borderX:
|
|
522
|
-
return { ...
|
|
473
|
+
return ((r, l, p, d, c) => {
|
|
474
|
+
const { borderX: u, borderHeight: g, borderY: v, borderWidth: w } = Be(l, p, d, c, !0), M = St({ ...p, width: Math.max(0, w - 2 * c.selectionPadding), height: Math.max(0, g - 2 * c.selectionPadding), x: u + c.selectionPadding, y: v + c.selectionPadding }, c);
|
|
475
|
+
return { ...M, fontSize: Ut(r, M.value, M.width, M.style?.fontBold ?? !1, M.style?.fontItalic ?? !1, M.style?.fontFamily) };
|
|
523
476
|
})(e, t, a, s, n);
|
|
524
477
|
case "picture":
|
|
525
|
-
return ((
|
|
526
|
-
const { borderX:
|
|
527
|
-
return
|
|
478
|
+
return ((r, l, p, d, c) => {
|
|
479
|
+
const { borderX: u, borderHeight: g, borderY: v, borderWidth: w } = Be(r, l, p, d, !0);
|
|
480
|
+
return Qt({ ...l, width: Math.max(0, w - 2 * d.selectionPadding), height: Math.max(0, g - 2 * d.selectionPadding), x: u + d.selectionPadding, y: v + d.selectionPadding }, d);
|
|
528
481
|
})(t, a, s, n);
|
|
529
482
|
default:
|
|
530
483
|
return a;
|
|
531
484
|
}
|
|
532
|
-
},
|
|
485
|
+
}, Dt = (e, i, t, a) => {
|
|
533
486
|
switch (i.type) {
|
|
534
487
|
case "rect":
|
|
535
488
|
case "square":
|
|
536
|
-
return ((s, n,
|
|
489
|
+
return ((s, n, o, r) => yt({ ...n, x: O(n.x + s[0] - o[0], r), y: O(n.y + s[1] - o[1], r) }, r))(e, i, t, a);
|
|
537
490
|
case "ellipse":
|
|
538
|
-
return ((s, n,
|
|
491
|
+
return ((s, n, o, r) => ft({ ...n, x: O(n.x + s[0] - o[0], r), y: O(n.y + s[1] - o[1], r) }, r))(e, i, t, a);
|
|
539
492
|
case "circle":
|
|
540
|
-
return ((s, n,
|
|
493
|
+
return ((s, n, o, r) => vt({ ...n, x: O(n.x + s[0] - o[0], r), y: O(n.y + s[1] - o[1], r) }, r))(e, i, t, a);
|
|
541
494
|
case "picture":
|
|
542
|
-
return ((s, n,
|
|
495
|
+
return ((s, n, o, r) => Qt({ ...n, x: O(n.x + s[0] - o[0], r), y: O(n.y + s[1] - o[1], r) }, r))(e, i, t, a);
|
|
543
496
|
case "text":
|
|
544
|
-
return ((s, n,
|
|
497
|
+
return ((s, n, o, r) => St({ ...n, x: O(n.x + s[0] - o[0], r), y: O(n.y + s[1] - o[1], r) }, r))(e, i, t, a);
|
|
545
498
|
case "line":
|
|
546
|
-
return ((s, n,
|
|
499
|
+
return ((s, n, o, r) => mt({ ...n, points: n.points.map(([l, p]) => [O(l + s[0] - o[0], r), O(p + s[1] - o[1], r)]) }, r))(e, i, t, a);
|
|
547
500
|
case "polygon":
|
|
548
|
-
return ((s, n,
|
|
549
|
-
const { borders: l } =
|
|
550
|
-
return
|
|
501
|
+
return ((s, n, o, r) => {
|
|
502
|
+
const { borders: l } = _(n, r);
|
|
503
|
+
return _e({ ...n, points: n.points.map(([p, d]) => r.gridGap ? [p + O(l.x + s[0] - o[0], r) - l.x, d + O(l.y + s[1] - o[1], r) - l.y] : [O(p + s[0] - o[0], r), O(d + s[1] - o[1], r)]) }, r);
|
|
551
504
|
})(e, i, t, a);
|
|
552
505
|
case "curve":
|
|
553
|
-
return ((s, n,
|
|
554
|
-
const { borders: l } =
|
|
555
|
-
return
|
|
506
|
+
return ((s, n, o, r) => {
|
|
507
|
+
const { borders: l } = _(n, r);
|
|
508
|
+
return qe({ ...n, points: n.points.map(([p, d]) => r.gridGap ? [p + O(l.x + s[0] - o[0], r) - l.x, d + O(l.y + s[1] - o[1], r) - l.y] : [O(p + s[0] - o[0], r), O(d + s[1] - o[1], r)]) }, r);
|
|
556
509
|
})(e, i, t, a);
|
|
557
510
|
case "brush":
|
|
558
|
-
return ((s, n,
|
|
559
|
-
const { borders: l } =
|
|
560
|
-
return
|
|
511
|
+
return ((s, n, o, r) => {
|
|
512
|
+
const { borders: l } = _(n, r), p = r.gridGap ? O(l.x + s[0] - o[0], r) - l.x : s[0] - o[0], d = r.gridGap ? O(l.y + s[1] - o[1], r) - l.y : s[1] - o[1];
|
|
513
|
+
return Je({ ...n, points: n.points.map((c) => c.map(([u, g]) => [u + p, g + d])) }, r);
|
|
561
514
|
})(e, i, t, a);
|
|
562
515
|
default:
|
|
563
516
|
return i;
|
|
564
517
|
}
|
|
565
|
-
},
|
|
518
|
+
}, nt = (e, i) => {
|
|
566
519
|
switch (e.type) {
|
|
567
520
|
case "rect":
|
|
568
521
|
case "square":
|
|
569
|
-
return
|
|
522
|
+
return T1(e, i);
|
|
570
523
|
case "ellipse":
|
|
571
|
-
return
|
|
524
|
+
return V1(e, i);
|
|
572
525
|
case "circle":
|
|
573
|
-
return
|
|
526
|
+
return x1(e, i);
|
|
574
527
|
case "picture":
|
|
575
|
-
return
|
|
528
|
+
return Z1(e, i);
|
|
576
529
|
case "text":
|
|
577
|
-
return
|
|
530
|
+
return D1(e, i);
|
|
578
531
|
case "line":
|
|
579
|
-
return
|
|
532
|
+
return H1(e, i);
|
|
580
533
|
case "polygon":
|
|
581
|
-
return
|
|
534
|
+
return M1(e, i);
|
|
582
535
|
case "curve":
|
|
583
|
-
return
|
|
536
|
+
return k1(e, i);
|
|
584
537
|
case "brush":
|
|
585
|
-
return
|
|
538
|
+
return b1(e, i);
|
|
586
539
|
default:
|
|
587
540
|
return e;
|
|
588
541
|
}
|
|
589
|
-
},
|
|
590
|
-
const { center:
|
|
591
|
-
switch (
|
|
542
|
+
}, mi = ({ ctx: e, shape: i, settings: t, selectionWidth: a, selectionColor: s, withAnchors: n = !0 }) => {
|
|
543
|
+
const { center: o } = _(i, t);
|
|
544
|
+
switch (Ot(e, t, i.rotation, o), i.type) {
|
|
592
545
|
case "rect":
|
|
593
546
|
case "square":
|
|
594
547
|
case "circle":
|
|
@@ -596,175 +549,165 @@ const g1 = ({ ctx: e, path: i, rect: t, offset: a, checkFill: s }) => {
|
|
|
596
549
|
case "picture":
|
|
597
550
|
case "text":
|
|
598
551
|
case "brush":
|
|
599
|
-
((
|
|
600
|
-
if (l.selection && (
|
|
601
|
-
l.selection.shapePath &&
|
|
552
|
+
((r, l, p, d, c, u) => {
|
|
553
|
+
if (l.selection && (Oe(r, { fillColor: "transparent", strokeColor: p, lineWidth: d / c.canvasSize.scaleRatio }), l.selection.shapePath ? r.stroke(l.selection.shapePath) : r.stroke(l.selection.border), u && !l.locked)) {
|
|
554
|
+
l.selection.shapePath && r.stroke(l.selection.border), r.stroke(l.selection.line), Oe(r, { fillColor: "rgb(255,255,255)", strokeColor: "rgb(150,150,150)", lineWidth: 2 / c.canvasSize.scaleRatio });
|
|
602
555
|
for (const g of l.selection.anchors)
|
|
603
|
-
|
|
556
|
+
r.fill(g), r.stroke(g);
|
|
604
557
|
}
|
|
605
558
|
})(e, i, s, a, t, n);
|
|
606
559
|
break;
|
|
607
560
|
case "polygon":
|
|
608
561
|
case "line":
|
|
609
562
|
case "curve":
|
|
610
|
-
(({ ctx:
|
|
611
|
-
if (l.selection && (
|
|
612
|
-
|
|
563
|
+
(({ ctx: r, shape: l, withAnchors: p, selectionWidth: d, selectionColor: c, settings: u }) => {
|
|
564
|
+
if (l.selection && (Oe(r, { fillColor: "transparent", strokeColor: c, lineWidth: d / u.canvasSize.scaleRatio }), l.selection.shapePath && r.stroke(l.selection.shapePath), p && !l.locked)) {
|
|
565
|
+
Oe(r, { fillColor: "rgb(255,255,255)", strokeColor: "rgb(150,150,150)", lineWidth: 2 / u.canvasSize.scaleRatio });
|
|
613
566
|
for (const g of l.selection.anchors)
|
|
614
|
-
|
|
567
|
+
r.fill(g), r.stroke(g);
|
|
615
568
|
}
|
|
616
569
|
})({ ctx: e, shape: i, withAnchors: n, selectionWidth: a, selectionColor: s, settings: t });
|
|
617
570
|
}
|
|
618
571
|
e.restore();
|
|
619
|
-
},
|
|
620
|
-
|
|
621
|
-
|
|
572
|
+
}, z1 = ({ ctx: e, selectionFrame: i, settings: t }) => {
|
|
573
|
+
Ot(e, t), ((a, s, n) => {
|
|
574
|
+
Oe(a, { fillColor: "rgba(170,170,170, 0.1)", strokeColor: "rgb(170,170,170)", lineWidth: 1 / n.canvasSize.scaleRatio }), a.fillRect(s[0][0], s[0][1], s[1][0] - s[0][0], s[1][1] - s[0][1]), a.strokeRect(s[0][0], s[0][1], s[1][0] - s[0][0], s[1][1] - s[0][1]);
|
|
622
575
|
})(e, i, t), e.restore();
|
|
623
|
-
},
|
|
624
|
-
const
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
}, [r, S]), k = z((f) => {
|
|
683
|
-
const m = f.map((y) => Dt(["chosen"], y));
|
|
684
|
-
t.current = m, S();
|
|
685
|
-
}, [S]), A = z((f) => {
|
|
686
|
-
o((m) => m?.id === f.id ? void 0 : m), t.current = t.current.filter((m) => m.id !== f.id), S();
|
|
687
|
-
}, [S]), R = z((f) => {
|
|
688
|
-
h((m) => {
|
|
689
|
-
const y = f(m);
|
|
690
|
-
return t.current = m.states[y].shapes, o(m.states[y].selectedShape), te("cursor", y, m);
|
|
576
|
+
}, p1 = (e) => {
|
|
577
|
+
const i = new DOMParser().parseFromString(e, "text/xml").getElementsByTagName("svg")[0], t = i.getAttribute("width"), a = i.getAttribute("height");
|
|
578
|
+
let s;
|
|
579
|
+
if (t || a)
|
|
580
|
+
s = e;
|
|
581
|
+
else {
|
|
582
|
+
const o = i.getAttribute("viewBox") ?? "0 0 300 300", [, , r, l] = o.split(" ");
|
|
583
|
+
i.setAttribute("width", r ?? ht), i.setAttribute("height", l ?? ht), s = new XMLSerializer().serializeToString(i);
|
|
584
|
+
}
|
|
585
|
+
const n = new Blob([s], { type: "image/svg+xml" });
|
|
586
|
+
return URL.createObjectURL(n);
|
|
587
|
+
}, h1 = (e) => (e instanceof File ? e.name : e).includes(".svg"), u1 = (e) => h1(e) ? fetch(e).then((i) => i.text()).then((i) => p1(i)) : fetch(e).then((i) => i.blob()).then((i) => URL.createObjectURL(i)), yi = (e, i) => {
|
|
588
|
+
const t = document.createElement("a");
|
|
589
|
+
t.href = e, t.download = i, document.body.appendChild(t), t.click(), document.body.removeChild(t);
|
|
590
|
+
}, W1 = (e) => {
|
|
591
|
+
const i = document.createElement("canvas");
|
|
592
|
+
i.width = e.width, i.height = e.height;
|
|
593
|
+
const t = i.getContext("2d");
|
|
594
|
+
return t ? (t.drawImage(e, 0, 0), i.toDataURL("image/png")) : "";
|
|
595
|
+
}, Qi = (e, i, t, a) => {
|
|
596
|
+
const s = document.createElement("canvas");
|
|
597
|
+
s.width = i, s.height = t;
|
|
598
|
+
const n = s.getContext("2d");
|
|
599
|
+
if (!n)
|
|
600
|
+
return "";
|
|
601
|
+
n.clearRect(0, 0, i, t), o1(n);
|
|
602
|
+
for (let o = e.length - 1; o >= 0; o--)
|
|
603
|
+
c1(n, e[o], re(["canvasSize", "scaleRatio"], 1, a));
|
|
604
|
+
return s.toDataURL("image/png");
|
|
605
|
+
}, O1 = (e, i, t) => {
|
|
606
|
+
return s = Gt(e, i, t), `data:text/plain;charset=utf-8,${encodeURIComponent(JSON.stringify(s))}`;
|
|
607
|
+
var s;
|
|
608
|
+
}, $1 = (e) => {
|
|
609
|
+
const i = ["img", "id", "selection", "path", "arrows"];
|
|
610
|
+
return e.map((t) => t.type !== "picture" || t.src.startsWith("http") ? Tt(i, t) : Tt(i, { ...t, src: W1(t.img) }));
|
|
611
|
+
}, Gt = (e, i, t) => ({ shapes: $1(e), config: { width: i, height: t } }), Si = (e, i) => nt({ ...e, id: se(`${e.type}_`) }, i), U1 = (e) => {
|
|
612
|
+
const i = J([]), t = J({ dataChanged: [] }), [a, s] = W(void 0), [n, o] = W(void 0), [r, l] = W(void 0), [p, d] = W({ states: [{ shapes: [], selectedShape: void 0, source: "user" }], cursor: 0 }), c = p.cursor > 0, u = p.cursor < p.states.length - 1, g = i.current.length > 0, v = R(() => {
|
|
613
|
+
d((f) => s1(f.states[f.cursor].shapes, i.current) ? f : { states: [...f.states.slice(0, f.cursor + 1), { shapes: i.current, selectedShape: n, source: "user" }], cursor: f.cursor + 1 });
|
|
614
|
+
}, [n]), w = R((f) => {
|
|
615
|
+
i.current = [f, ...i.current];
|
|
616
|
+
}, []), M = R((f, m, Q) => {
|
|
617
|
+
if (f.target && "className" in f.target && ![i1, a1].includes(f.target.className))
|
|
618
|
+
return void l(void 0);
|
|
619
|
+
const D = i.current.find((N) => N.id === n?.id ? !!at(n, Q, e) : !!l1(m, N, Q, e));
|
|
620
|
+
l(D);
|
|
621
|
+
}, [e, n]), S = R(async (f, m = 300, Q = 300) => {
|
|
622
|
+
const D = await E1(f, m, Q, e);
|
|
623
|
+
return w(D), v(), D;
|
|
624
|
+
}, [w, v, e]), L = R((f, m = !1) => {
|
|
625
|
+
i.current = i.current.map((Q) => Q.id === n?.id ? f : Q), o((Q) => Q?.id === f.id ? f : Q), m && v();
|
|
626
|
+
}, [n, v]), b = R((f) => {
|
|
627
|
+
const m = f.map((Q) => Tt(["chosen"], Q));
|
|
628
|
+
i.current = m, v();
|
|
629
|
+
}, [v]), k = R((f) => {
|
|
630
|
+
o((m) => m?.id === f.id ? void 0 : m), i.current = i.current.filter((m) => m.id !== f.id), v();
|
|
631
|
+
}, [v]), P = R((f) => {
|
|
632
|
+
d((m) => {
|
|
633
|
+
const Q = f(m);
|
|
634
|
+
return i.current = m.states[Q].shapes, o(m.states[Q].selectedShape), re("cursor", Q, m);
|
|
691
635
|
});
|
|
692
|
-
}, []),
|
|
693
|
-
|
|
694
|
-
}, [
|
|
695
|
-
|
|
696
|
-
}, [
|
|
697
|
-
o(void 0),
|
|
698
|
-
}, []),
|
|
699
|
-
const
|
|
700
|
-
|
|
701
|
-
}, [
|
|
702
|
-
const m =
|
|
703
|
-
if (
|
|
636
|
+
}, []), E = R(() => {
|
|
637
|
+
P((f) => Math.max(0, f.cursor - 1));
|
|
638
|
+
}, [P]), A = R(() => {
|
|
639
|
+
P((f) => Math.min(f.states.length - 1, f.cursor + 1));
|
|
640
|
+
}, [P]), H = R((f, m) => {
|
|
641
|
+
o(void 0), i.current = f, d((Q) => m.clearHistory ? { states: [{ shapes: f, selectedShape: void 0, source: m.source }], cursor: 0 } : { states: [...Q.states.slice(0, Q.cursor + 1), { shapes: f, selectedShape: void 0, source: m.source }], cursor: Q.cursor + 1 });
|
|
642
|
+
}, []), C = R((f, m) => {
|
|
643
|
+
const Q = i.current, D = Q.findIndex((Y) => Y.id === f), N = Q.findIndex((Y) => Y.id === m);
|
|
644
|
+
b(D < N ? [...Q.slice(0, D), ...Q.slice(D + 1, N + 1), Q[D], ...Q.slice(N + 1, Q.length)] : [...Q.slice(0, N), Q[D], ...Q.slice(N, D), ...Q.slice(D + 1, Q.length)]);
|
|
645
|
+
}, [b]), V = R((f) => {
|
|
646
|
+
const m = i.current, Q = m.findIndex((N) => N.id === f.id);
|
|
647
|
+
if (Q < 0)
|
|
704
648
|
return;
|
|
705
|
-
const
|
|
706
|
-
o((
|
|
707
|
-
}, [
|
|
708
|
-
const m =
|
|
709
|
-
if (
|
|
649
|
+
const D = re("visible", f.visible === !1, f);
|
|
650
|
+
o((N) => N?.id === D.id ? D : N), b(re(Q, D, m));
|
|
651
|
+
}, [b]), z = R((f) => {
|
|
652
|
+
const m = i.current, Q = m.findIndex((N) => N.id === f.id);
|
|
653
|
+
if (Q < 0)
|
|
710
654
|
return;
|
|
711
|
-
const
|
|
712
|
-
o((
|
|
713
|
-
}, [
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
655
|
+
const D = re("locked", !f.locked, f);
|
|
656
|
+
o((N) => N?.id === D.id ? D : N), b(re(Q, D, m));
|
|
657
|
+
}, [b]), y = R((f, m) => {
|
|
658
|
+
Object.hasOwn(t.current, f) && (t.current[f] = [...t.current[f], m]);
|
|
659
|
+
}, []), F = R((f, m) => {
|
|
660
|
+
if (Object.hasOwn(t.current, f))
|
|
661
|
+
if (m) {
|
|
662
|
+
const Q = t.current[f].findIndex((D) => D === m);
|
|
663
|
+
t.current[f] = [...t.current[f].slice(0, Q), ...t.current[f].slice(Q + 1)];
|
|
664
|
+
} else
|
|
665
|
+
t.current[f] = [];
|
|
666
|
+
}, []), { canvasSize: { width: x, height: T } } = e;
|
|
667
|
+
B(() => {
|
|
668
|
+
const f = p.states[p.cursor], m = Gt(f.shapes, x, T);
|
|
669
|
+
for (const Q of t.current.dataChanged)
|
|
670
|
+
Q(m, f.source);
|
|
671
|
+
}, [x, T, p]), B(() => {
|
|
672
|
+
i.current = i.current.map((f) => nt(f, e)), o((f) => f === void 0 ? void 0 : i.current.find((m) => m.id === f.id));
|
|
673
|
+
}, [e]);
|
|
674
|
+
const Z = R((f, m) => {
|
|
675
|
+
s((Q) => {
|
|
676
|
+
const D = [Q?.[0] ?? [m[0], m[1]], [m[0], m[1]]], N = i.current.filter((Y) => ((de, $, U, oe) => {
|
|
677
|
+
const { selectionPadding: ee, canvasOffset: te } = oe, { center: ve, borders: Me } = _($, oe), ie = $e(U[0], $.rotation, ve, te), j = $e(U[1], $.rotation, ve, te), Se = Math.round(Math.min(ie[0], j[0]) - ee / 2), Ee = Math.round(Math.max(ie[0], j[0]) + ee), ke = Math.round(Math.min(ie[1], j[1]) - ee / 2), fe = { x: Se, y: ke, width: Ee - Se, height: Math.round(Math.max(ie[1], j[1]) + ee) - ke }, be = di(Me, fe);
|
|
678
|
+
if (!be)
|
|
724
679
|
return !1;
|
|
725
|
-
if (
|
|
680
|
+
if (Me.width <= 1 || Me.height <= 1 || !("path" in $) || !$.path)
|
|
726
681
|
return !0;
|
|
727
|
-
if (
|
|
728
|
-
const
|
|
729
|
-
for (const
|
|
730
|
-
if (
|
|
682
|
+
if (de.lineWidth = ($.style?.lineWidth ?? 0) + 10, $.type === "brush") {
|
|
683
|
+
const ne = $.points.flat(), Le = Math.min(...ne.map((ce) => ce[0])), Ie = Math.min(...ne.map((ce) => ce[1]));
|
|
684
|
+
for (const ce of $.points) {
|
|
685
|
+
if (ce.length < 1)
|
|
731
686
|
break;
|
|
732
|
-
if (
|
|
733
|
-
const
|
|
734
|
-
if (
|
|
687
|
+
if (ce.length < 2) {
|
|
688
|
+
const me = Qe(ce[0], Le, Ie, $.scaleX, $.scaleY);
|
|
689
|
+
if (r1(be, { x: me[0], y: me[1], radius: ($.style?.lineWidth ?? 1) / 2 }))
|
|
735
690
|
return !0;
|
|
736
691
|
}
|
|
737
|
-
for (let
|
|
738
|
-
const
|
|
739
|
-
if (
|
|
740
|
-
const
|
|
741
|
-
if (
|
|
692
|
+
for (let me = 0; me < ce.length - 1; me++) {
|
|
693
|
+
const ae = Qe(ce[me], Le, Ie, $.scaleX, $.scaleY), Ve = Qe(ce[me + 1], Le, Ie, $.scaleX, $.scaleY), Ue = di({ x: Math.min(ae[0], Ve[0]), y: Math.min(ae[1], Ve[1]), width: Math.abs(ae[0] - Ve[0]), height: Math.abs(ae[1] - Ve[1]) }, fe);
|
|
694
|
+
if (Ue) {
|
|
695
|
+
const Pe = new Path2D();
|
|
696
|
+
if (Pe.moveTo(...ae), Pe.lineTo(...Ve), ci({ ctx: de, path: Pe, rect: Ue, offset: 10, checkFill: !1 }))
|
|
742
697
|
return !0;
|
|
743
698
|
}
|
|
744
699
|
}
|
|
745
700
|
}
|
|
746
701
|
return !1;
|
|
747
702
|
}
|
|
748
|
-
const
|
|
749
|
-
return
|
|
750
|
-
})(f,
|
|
751
|
-
return o(
|
|
703
|
+
const De = !(!$.style?.fillColor || $.style?.fillColor === "transparent");
|
|
704
|
+
return ci({ ctx: de, path: $.path, rect: be, offset: 10, checkFill: De });
|
|
705
|
+
})(f, Y, D, e));
|
|
706
|
+
return o(N?.[0]), D;
|
|
752
707
|
});
|
|
753
|
-
}, [
|
|
754
|
-
return { shapesRef:
|
|
755
|
-
},
|
|
756
|
-
const e = j([]), [i, t] = I([]);
|
|
757
|
-
return O(() => () => {
|
|
758
|
-
for (const a of e.current)
|
|
759
|
-
clearTimeout(a);
|
|
760
|
-
}, []), { snackbarList: i, addSnackbar: ({ type: a = Va, duration: s = Pa, text: n }) => {
|
|
761
|
-
const r = { id: J("snackbar_"), duration: s, type: a, text: n };
|
|
762
|
-
t((o) => [...o, r]), e.current = [...e.current, setTimeout(() => {
|
|
763
|
-
return o = r.id, void t((l) => l.filter((c) => c.id !== o));
|
|
764
|
-
var o;
|
|
765
|
-
}, s)];
|
|
766
|
-
} };
|
|
767
|
-
}, T1 = (e, i = !1) => {
|
|
708
|
+
}, [e]);
|
|
709
|
+
return { registerEvent: y, unregisterEvent: F, shapesRef: i, selectedShape: n, hoveredShape: r, selectionFrame: a, setSelectionFrame: s, refreshSelectedShapes: Z, addShape: w, addPictureShape: S, moveShapes: C, saveShapes: v, setSelectedShape: o, refreshHoveredShape: M, toggleShapeVisibility: V, toggleShapeLock: z, removeShape: k, updateShape: L, backwardShape: E, forwardShape: A, clearShapes: H, canGoBackward: c, canGoForward: u, canClear: g };
|
|
710
|
+
}, bi = (e, i = !1) => {
|
|
768
711
|
const t = (s, n) => {
|
|
769
712
|
if (Array.isArray(s))
|
|
770
713
|
return n;
|
|
@@ -773,600 +716,684 @@ const g1 = ({ ctx: e, path: i, rect: t, offset: a, checkFill: s }) => {
|
|
|
773
716
|
return null;
|
|
774
717
|
switch (s.type) {
|
|
775
718
|
case "brush":
|
|
776
|
-
return
|
|
719
|
+
return xe(t, $i, s);
|
|
777
720
|
case "circle":
|
|
778
|
-
return
|
|
721
|
+
return xe(t, ji, s);
|
|
779
722
|
case "curve":
|
|
780
|
-
return
|
|
723
|
+
return xe(t, Bi, s);
|
|
781
724
|
case "ellipse":
|
|
782
|
-
return
|
|
725
|
+
return xe(t, _i, s);
|
|
783
726
|
case "line":
|
|
784
|
-
return
|
|
727
|
+
return xe(t, Ui, s);
|
|
785
728
|
case "polygon":
|
|
786
|
-
return
|
|
729
|
+
return xe(t, Gi, s);
|
|
787
730
|
case "rect":
|
|
788
|
-
return
|
|
731
|
+
return xe(t, Xi, s);
|
|
789
732
|
case "square":
|
|
790
|
-
return
|
|
733
|
+
return xe(t, Yi, s);
|
|
791
734
|
case "text":
|
|
792
|
-
return
|
|
735
|
+
return xe(t, qi, s);
|
|
793
736
|
}
|
|
794
737
|
return null;
|
|
795
738
|
});
|
|
796
|
-
return
|
|
797
|
-
},
|
|
798
|
-
|
|
739
|
+
return Wt(i ? [...a, zt] : a);
|
|
740
|
+
}, La = ({ width: e = 1e3, height: i = 600, shapes: t, mode: a = "editor", disabled: s = !1, options: n = ai }) => {
|
|
741
|
+
const { layersManipulation: o, brushAlgo: r, isBrushShapeDoneOnMouseUp: l, grid: p, canGrow: d, canShrink: c, withExport: u, withLoadAndSave: g, withUploadPicture: v, withUrlPicture: w, withSkeleton: M, withFrameSelection: S, clearCallback: L, availableTools: b, canvasSelectionPadding: k } = { ...ai, ...n }, P = a !== "viewer", E = s || !P, A = J(null), H = J(null), C = J(!1), V = R((G) => {
|
|
742
|
+
A.current = G;
|
|
743
|
+
}, []), [z, y] = W(Ze), [F, x] = W(p), [T, Z] = W({ width: e, height: i, scaleRatio: 1 }), [f, m] = W([0, 0]), Q = Di(() => ({ brushAlgo: r, isBrushShapeDoneOnMouseUp: l, canvasSize: T, canvasOffset: f, gridGap: F, selectionPadding: k }), [k, F, r, l, f, T]), [D, N] = W(bi(b, v || w)), { isInsideComponent: Y } = (({ disabled: G, componentRef: we }) => {
|
|
744
|
+
const [tt, ze] = W(!1);
|
|
745
|
+
return B(() => {
|
|
746
|
+
if (!G) {
|
|
747
|
+
const He = (We) => {
|
|
748
|
+
ze(n1(We, we.current));
|
|
749
|
+
};
|
|
750
|
+
return document.addEventListener("mousedown", He, { passive: !0 }), document.addEventListener("touchstart", He, { passive: !0 }), () => {
|
|
751
|
+
document.removeEventListener("mousedown", He), document.removeEventListener("touchstart", He);
|
|
752
|
+
};
|
|
753
|
+
}
|
|
754
|
+
ze(!1);
|
|
755
|
+
}, [G, we]), { isInsideComponent: tt };
|
|
756
|
+
})({ disabled: E, componentRef: A }), { registerEvent: de, unregisterEvent: $, shapesRef: U, selectedShape: oe, selectionFrame: ee, hoveredShape: te, addShape: ve, addPictureShape: Me, moveShapes: ie, setSelectedShape: j, setSelectionFrame: Se, refreshSelectedShapes: Ee, refreshHoveredShape: ke, removeShape: fe, updateShape: be, backwardShape: De, forwardShape: ne, clearShapes: Le, saveShapes: Ie, toggleShapeVisibility: ce, toggleShapeLock: me, canGoBackward: ae, canGoForward: Ve, canClear: Ue } = U1(Q), Pe = R((G) => {
|
|
757
|
+
j(void 0), y(G);
|
|
758
|
+
}, [j]), Ge = R((G, we) => {
|
|
759
|
+
Le(G, we), Pe(Ze), m([0, 0]);
|
|
760
|
+
}, [Pe, Le]), ot = R((G) => {
|
|
761
|
+
y(Ze), j(G);
|
|
762
|
+
}, [j]), bt = R(() => {
|
|
763
|
+
const G = O1(U.current, e, i);
|
|
764
|
+
if (!G)
|
|
765
|
+
throw new Error("L'encodage a échoué");
|
|
766
|
+
yi(G, "drawing.json");
|
|
767
|
+
}, [U, e, i]), Ct = R(() => {
|
|
768
|
+
const G = Qi(U.current, e, i, Q);
|
|
769
|
+
if (!G)
|
|
770
|
+
throw new Error();
|
|
771
|
+
yi(G, "drawing.png");
|
|
772
|
+
}, [U, e, i, Q]);
|
|
773
|
+
B(() => {
|
|
774
|
+
Y || j(void 0);
|
|
775
|
+
}, [Y, j]);
|
|
776
|
+
const Ce = R(async (G, we) => {
|
|
777
|
+
const tt = await (async (ze, He) => {
|
|
778
|
+
if (!ze)
|
|
779
|
+
return [];
|
|
780
|
+
const We = [], wt = Wt(ze.map((ye) => {
|
|
781
|
+
if (!ye || !t1.includes(ye.type))
|
|
782
|
+
return null;
|
|
783
|
+
if (ye.type === "picture") {
|
|
784
|
+
const Te = new Image(), g1 = new Promise((xt, v1) => {
|
|
785
|
+
Te.onload = () => {
|
|
786
|
+
URL.revokeObjectURL(Te.src), xt();
|
|
787
|
+
}, Te.onerror = () => {
|
|
788
|
+
v1(new Error("Some images could not be loaded"));
|
|
789
|
+
};
|
|
790
|
+
});
|
|
791
|
+
return We.push(g1), ye.src.startsWith("http") ? u1(ye.src).then((xt) => {
|
|
792
|
+
Te.src = xt;
|
|
793
|
+
}).catch(() => {
|
|
794
|
+
Te.src = "";
|
|
795
|
+
}) : Te.src = ye.src, Si({ ...ye, img: Te }, He);
|
|
796
|
+
}
|
|
797
|
+
return Si(ye, He);
|
|
798
|
+
}));
|
|
799
|
+
return await Promise.all(We), wt;
|
|
800
|
+
})(G, Q);
|
|
801
|
+
Ge(tt, we);
|
|
802
|
+
}, [Ge, Q]), q = R((G = [], we = !0) => {
|
|
803
|
+
Ce(G, { clearHistory: we, source: "remote" });
|
|
804
|
+
}, [Ce]);
|
|
805
|
+
C.current || (C.current = !0, t && Ce(t, { clearHistory: !0, source: "remote" }));
|
|
806
|
+
const ge = R(async (G) => {
|
|
807
|
+
const we = await (async (tt) => new Promise((ze, He) => {
|
|
808
|
+
const We = new FileReader();
|
|
809
|
+
We.onload = (wt) => {
|
|
810
|
+
const ye = wt.target?.result;
|
|
811
|
+
if (!ye)
|
|
812
|
+
return He("Impossible de récupérer les données du fichier");
|
|
813
|
+
const Te = JSON.parse(ye);
|
|
814
|
+
ze(Te);
|
|
815
|
+
}, We.readAsText(tt);
|
|
816
|
+
}))(G);
|
|
817
|
+
await Ce(we.shapes ?? [], { clearHistory: !0, source: "remote" });
|
|
818
|
+
}, [Ce]), rt = R(() => {
|
|
819
|
+
typeof L != "string" ? Ce(L(), { clearHistory: !1, source: "user" }) : L === "defaultShapes" && t !== void 0 ? Ce(t, { clearHistory: !1, source: "user" }) : Ge([], { clearHistory: !1, source: "user" });
|
|
820
|
+
}, [Ge, Ce, t, L]);
|
|
821
|
+
B(() => {
|
|
822
|
+
N(bi(b, v || w));
|
|
823
|
+
}, [b, v, w]);
|
|
824
|
+
const Fe = { canvas: H, editor: A, setEditor: V };
|
|
825
|
+
return { editorProps: { shapesRef: U, addPictureShape: Me, moveShapes: ie, toggleShapeVisibility: ce, toggleShapeLock: me, canGoBackward: ae, canGoForward: Ve, canClear: Ue, selectedShape: oe, removeShape: fe, updateShape: be, backwardShape: De, forwardShape: ne, refs: Fe, width: e, height: i, canvasSize: T, selectTool: Pe, selectShape: ot, activeTool: z, setActiveTool: y, setAvailableTools: N, isEditMode: P, isDisabled: E, availableTools: D, gridGap: F, setGridGap: x, loadFile: ge, exportPicture: Ct, exportData: bt, clearCanvas: rt, settings: Q, canvas: { canGrow: d, canShrink: c, layersManipulation: o, withExport: u, withLoadAndSave: g, withUploadPicture: v, withUrlPicture: w } }, canvasProps: { shapesRef: U, selectedShape: oe, selectionFrame: ee, hoveredShape: te, addShape: ve, setSelectedShape: j, setSelectionFrame: Se, refreshSelectedShapes: Ee, refreshHoveredShape: ke, removeShape: fe, updateShape: be, backwardShape: De, forwardShape: ne, saveShapes: Ie, refs: Fe, width: e, height: i, settings: Q, canvasSize: T, setCanvasSize: Z, setCanvasOffset: m, selectShape: ot, activeTool: z, setActiveTool: y, isInsideComponent: Y, isEditMode: P, isDisabled: E, canvas: { withSkeleton: M, withFrameSelection: S, canGrow: d, canShrink: c } }, registerEvent: de, unregisterEvent: $, resetCanvas: q, getCurrentImage: () => H.current ? Qi(U.current, e, i, Q) : void 0, getCurrentData: () => Gt(U.current, e, i) };
|
|
826
|
+
}, G1 = (e, i, t, a, s, n, o) => {
|
|
827
|
+
let r = !1;
|
|
799
828
|
if (s) {
|
|
800
|
-
|
|
801
|
-
const
|
|
829
|
+
r = at(s, t, a, !0, n ? 20 : void 0);
|
|
830
|
+
const p = ((d, c, u, g) => {
|
|
802
831
|
if (d.mode === "translate")
|
|
803
|
-
return { mode: "translate", cursorStartPosition:
|
|
832
|
+
return { mode: "translate", cursorStartPosition: u, originalShape: c };
|
|
804
833
|
if (d.mode === "rotate") {
|
|
805
|
-
const { center: v } =
|
|
806
|
-
return { mode: "rotate", cursorStartPosition:
|
|
834
|
+
const { center: v } = _(c, g);
|
|
835
|
+
return { mode: "rotate", cursorStartPosition: u, originalShape: c, center: [v[0], v[1]] };
|
|
807
836
|
}
|
|
808
|
-
return d.mode === "resize" ? { mode: "resize", cursorStartPosition:
|
|
809
|
-
})(
|
|
810
|
-
if (
|
|
811
|
-
return { shape: s, mode:
|
|
837
|
+
return d.mode === "resize" ? { mode: "resize", cursorStartPosition: u, originalShape: c, anchor: d.anchor } : void 0;
|
|
838
|
+
})(r || { mode: "default" }, s, t, a);
|
|
839
|
+
if (p?.mode === "resize" || p?.mode === "rotate")
|
|
840
|
+
return { shape: s, mode: p };
|
|
812
841
|
}
|
|
813
|
-
const l = i.find((
|
|
814
|
-
return l ? { shape: l, mode: { mode: "translate", cursorStartPosition: t, originalShape: l } } : { shape: void 0, mode: { mode:
|
|
815
|
-
},
|
|
816
|
-
const [
|
|
817
|
-
const
|
|
818
|
-
const
|
|
819
|
-
|
|
842
|
+
const l = i.find((p) => p.id === s?.id ? !!r : !!l1(e, p, t, a));
|
|
843
|
+
return l ? { shape: l, mode: { mode: "translate", cursorStartPosition: t, originalShape: l } } : { shape: void 0, mode: { mode: o ? "selectionFrame" : "default" } };
|
|
844
|
+
}, B1 = ({ disabled: e = !1, addShape: i, drawCanvasRef: t, setActiveTool: a, refreshHoveredShape: s, shapes: n, selectionMode: o, activeTool: r, isInsideComponent: l, setCanvasOffset: p, selectedShape: d, selectionCanvasRef: c, canvasOffsetStartPosition: u, refreshSelectedShapes: g, setSelectedShape: v, setSelectionFrame: w, setCanvasOffsetStartPosition: M, updateSingleShape: S, saveShapes: L, setSelectionMode: b, settings: k, isShiftPressed: P, withFrameSelection: E }) => {
|
|
845
|
+
const [A, H] = W({ mode: "default" }), { registerDoubleClickEvent: C, unRegisterDoubleClickEvent: V } = (() => {
|
|
846
|
+
const y = J(void 0), F = J(void 0), x = (T) => {
|
|
847
|
+
const Z = (/* @__PURE__ */ new Date()).getTime();
|
|
848
|
+
y.current && Z < y.current + 300 && F.current?.(T), y.current = (/* @__PURE__ */ new Date()).getTime();
|
|
820
849
|
};
|
|
821
|
-
return { registerDoubleClickEvent: (
|
|
822
|
-
|
|
823
|
-
}, unRegisterDoubleClickEvent: (
|
|
824
|
-
|
|
850
|
+
return { registerDoubleClickEvent: (T, Z) => {
|
|
851
|
+
F.current = Z, T.addEventListener("click", x), T.addEventListener("touchend", x);
|
|
852
|
+
}, unRegisterDoubleClickEvent: (T) => {
|
|
853
|
+
T.removeEventListener("click", x), T.removeEventListener("touchend", x);
|
|
825
854
|
} };
|
|
826
855
|
})();
|
|
827
|
-
|
|
828
|
-
const
|
|
829
|
-
const
|
|
830
|
-
if (!
|
|
856
|
+
B(() => {
|
|
857
|
+
const y = (F) => ((x, T, Z, f, m, Q, D, N, Y, de, $, U, oe) => {
|
|
858
|
+
const ee = T.current?.getContext("2d");
|
|
859
|
+
if (!ee)
|
|
831
860
|
return;
|
|
832
|
-
const
|
|
833
|
-
if (
|
|
834
|
-
if (
|
|
835
|
-
if (
|
|
836
|
-
if (
|
|
837
|
-
|
|
861
|
+
const te = Vt(x, T.current, U);
|
|
862
|
+
if (Z.type !== "move" || Q === void 0)
|
|
863
|
+
if (m.mode !== "selectionFrame") {
|
|
864
|
+
if (li(x) || N(x, ee, te, U), f !== void 0 && !f.locked)
|
|
865
|
+
if (m.mode === "default" || m.mode === "textedition")
|
|
866
|
+
D(at(f, te, U, !0) || { mode: "default" });
|
|
838
867
|
else {
|
|
839
|
-
const
|
|
840
|
-
if (!
|
|
868
|
+
const ve = T.current?.getContext("2d");
|
|
869
|
+
if (!ve)
|
|
841
870
|
return;
|
|
842
|
-
|
|
843
|
-
E(Le), ge(Le);
|
|
871
|
+
Y(w1(ve, f, te, m, U, oe));
|
|
844
872
|
}
|
|
845
873
|
} else
|
|
846
|
-
|
|
874
|
+
$(ee, te, U);
|
|
847
875
|
else
|
|
848
|
-
|
|
849
|
-
})(
|
|
876
|
+
de([te[0] - Q[0], te[1] - Q[1]]);
|
|
877
|
+
})(F, c, r, d, o, u, H, s, S, p, g, k, P);
|
|
850
878
|
if (l)
|
|
851
|
-
return document.addEventListener("mousemove",
|
|
852
|
-
document.removeEventListener("mousemove",
|
|
879
|
+
return document.addEventListener("mousemove", y), document.addEventListener("touchmove", y), () => {
|
|
880
|
+
document.removeEventListener("mousemove", y), document.removeEventListener("touchmove", y);
|
|
853
881
|
};
|
|
854
|
-
}, [l,
|
|
855
|
-
|
|
856
|
-
|
|
882
|
+
}, [l, c, d, o, u, S, r, p, s, g, k, P]);
|
|
883
|
+
const { isBrushShapeDoneOnMouseUp: z } = k;
|
|
884
|
+
return B(() => {
|
|
885
|
+
const y = () => {
|
|
886
|
+
o.mode !== "textedition" && o.mode !== "default" && (o.mode === "brush" && z && v(void 0), b({ mode: "default" }), w(void 0), L());
|
|
857
887
|
};
|
|
858
|
-
return l && (document.addEventListener("mouseup",
|
|
859
|
-
l && (document.removeEventListener("mouseup",
|
|
888
|
+
return l && (document.addEventListener("mouseup", y), document.addEventListener("touchend", y)), () => {
|
|
889
|
+
l && (document.removeEventListener("mouseup", y), document.removeEventListener("touchend", y));
|
|
860
890
|
};
|
|
861
|
-
}, [l,
|
|
862
|
-
const
|
|
863
|
-
if (!
|
|
891
|
+
}, [l, o, z, L, w, b, v]), B(() => {
|
|
892
|
+
const y = c.current;
|
|
893
|
+
if (!y)
|
|
864
894
|
return;
|
|
865
|
-
const
|
|
866
|
-
if (!
|
|
895
|
+
const F = y.getContext("2d");
|
|
896
|
+
if (!F || e)
|
|
867
897
|
return;
|
|
868
|
-
const
|
|
869
|
-
|
|
870
|
-
const
|
|
871
|
-
if (
|
|
872
|
-
const { shape:
|
|
873
|
-
v(
|
|
874
|
-
} else if (
|
|
875
|
-
|
|
876
|
-
else if (
|
|
877
|
-
const
|
|
878
|
-
if (!
|
|
898
|
+
const x = (T) => {
|
|
899
|
+
T.preventDefault();
|
|
900
|
+
const Z = Vt(T, c.current, k);
|
|
901
|
+
if (r.type === "selection") {
|
|
902
|
+
const { shape: f, mode: m } = G1(F, n, Z, k, d, li(T), E);
|
|
903
|
+
v(f), b(m), m.mode === "selectionFrame" && w([[Z[0], Z[1]], [Z[0], Z[1]]]);
|
|
904
|
+
} else if (r.type === "move")
|
|
905
|
+
M(Z);
|
|
906
|
+
else if (t1.some((f) => f === r.type)) {
|
|
907
|
+
const f = t.current?.getContext("2d");
|
|
908
|
+
if (!f)
|
|
879
909
|
return;
|
|
880
|
-
if (
|
|
881
|
-
if (d
|
|
882
|
-
const
|
|
883
|
-
const
|
|
884
|
-
return
|
|
885
|
-
})(d,
|
|
886
|
-
|
|
910
|
+
if (r.type === "brush") {
|
|
911
|
+
if (d?.type === "brush") {
|
|
912
|
+
const m = ((Q, D, N) => {
|
|
913
|
+
const Y = { ...Q, points: re(Q.points.length, [[Math.round(D[0]), Math.round(D[1])]], Q.points) };
|
|
914
|
+
return Je(Y, N);
|
|
915
|
+
})(d, Z, k);
|
|
916
|
+
S(m);
|
|
887
917
|
} else {
|
|
888
|
-
const
|
|
889
|
-
if (!
|
|
918
|
+
const m = fi(f, r, Z, k);
|
|
919
|
+
if (!m)
|
|
890
920
|
return;
|
|
891
|
-
i(
|
|
921
|
+
i(m), v(m);
|
|
892
922
|
}
|
|
893
|
-
|
|
894
|
-
} else if (
|
|
895
|
-
const
|
|
896
|
-
i(
|
|
923
|
+
b({ mode: "brush" });
|
|
924
|
+
} else if (r.type !== "picture") {
|
|
925
|
+
const m = fi(f, r, Z, k);
|
|
926
|
+
i(m), a(Ze), v(m), b({ mode: "resize", cursorStartPosition: [Z[0] + k.selectionPadding, Z[1] + k.selectionPadding], originalShape: m, anchor: r.type === "line" || r.type === "polygon" || r.type === "curve" ? 0 : [1, 1] });
|
|
897
927
|
}
|
|
898
928
|
}
|
|
899
929
|
};
|
|
900
|
-
return
|
|
901
|
-
|
|
930
|
+
return y.addEventListener("mousedown", x, { passive: !1 }), y.addEventListener("touchstart", x, { passive: !1 }), () => {
|
|
931
|
+
y.removeEventListener("mousedown", x), y.removeEventListener("touchstart", x);
|
|
902
932
|
};
|
|
903
|
-
}, [e,
|
|
904
|
-
const
|
|
905
|
-
if (
|
|
906
|
-
return l ? (
|
|
907
|
-
if (
|
|
908
|
-
const
|
|
909
|
-
|
|
933
|
+
}, [e, c, t, d, r, M, n, S, i, a, v, b, w, k, E]), B(() => {
|
|
934
|
+
const y = c.current;
|
|
935
|
+
if (y)
|
|
936
|
+
return l ? (C(y, (F) => {
|
|
937
|
+
if (r.type === "selection" && d?.type === "text") {
|
|
938
|
+
const x = Vt(F, c.current, k);
|
|
939
|
+
at(d, x, k) && b({ mode: "textedition", defaultValue: d.value });
|
|
910
940
|
}
|
|
911
941
|
}), () => {
|
|
912
|
-
|
|
942
|
+
V(y);
|
|
913
943
|
}) : void 0;
|
|
914
|
-
}, [
|
|
915
|
-
},
|
|
916
|
-
const
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
})(e).split("<div>").flatMap((t) => {
|
|
920
|
-
const a = t.replaceAll(Fa, "");
|
|
921
|
-
return a === "" ? void 0 : a.replaceAll(Za, "");
|
|
922
|
-
});
|
|
923
|
-
return ft(i);
|
|
924
|
-
}, Da = ({ disabled: e = !1, scaleRatio: i, shape: t, defaultValue: a, updateValue: s, saveShapes: n, settings: r }) => {
|
|
925
|
-
const o = j(null), l = j(n);
|
|
926
|
-
O(() => {
|
|
927
|
-
if (!o.current)
|
|
944
|
+
}, [C, V, l, c, r, d, b, k]), { hoverMode: A };
|
|
945
|
+
}, X1 = ({ disabled: e = !1, scaleRatio: i, shape: t, defaultValue: a, updateValue: s, saveShapes: n, settings: o }) => {
|
|
946
|
+
const r = J(null), l = J(n);
|
|
947
|
+
B(() => {
|
|
948
|
+
if (!r.current)
|
|
928
949
|
return;
|
|
929
|
-
const d =
|
|
930
|
-
|
|
931
|
-
const g =
|
|
950
|
+
const d = r.current, c = (u) => {
|
|
951
|
+
u.preventDefault();
|
|
952
|
+
const g = u.clipboardData?.getData("text/plain");
|
|
932
953
|
document.execCommand("insertText", !1, g);
|
|
933
954
|
};
|
|
934
|
-
|
|
935
|
-
|
|
955
|
+
d.addEventListener("paste", c), d.innerText = "";
|
|
956
|
+
for (const u of a) {
|
|
957
|
+
const g = document.createElement("div");
|
|
958
|
+
u === "" ? g.innerHTML = "<br/>" : g.innerText = u, d.appendChild(g);
|
|
959
|
+
}
|
|
960
|
+
return d.focus(), () => {
|
|
961
|
+
d.removeEventListener("paste", c);
|
|
936
962
|
};
|
|
937
|
-
}, [a]),
|
|
963
|
+
}, [a]), B(() => {
|
|
938
964
|
const d = l.current;
|
|
939
965
|
return () => {
|
|
940
966
|
d();
|
|
941
967
|
};
|
|
942
968
|
}, []);
|
|
943
|
-
const
|
|
944
|
-
const { borders: d, center:
|
|
945
|
-
return
|
|
946
|
-
}, [t,
|
|
947
|
-
return
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
},
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
+
const p = Di(() => {
|
|
970
|
+
const { borders: d, center: c } = _(t, o);
|
|
971
|
+
return ue({ point: [d.x, d.y], rotation: -t.rotation, origin: c });
|
|
972
|
+
}, [t, o]);
|
|
973
|
+
return h("div", { className: "react-paint-editor-toolbox-edittextbox", ref: r, "data-fontbold": t.style?.fontBold ?? !1, "data-fontitalic": t.style?.fontItalic ?? !1, contentEditable: !e, onInput: (d) => {
|
|
974
|
+
const c = Array.from(d.target.childNodes).map((u) => u.childNodes[0].nodeValue ?? "");
|
|
975
|
+
s(c);
|
|
976
|
+
}, style: { "--react-paint-editor-toolbox-edittextbox-transform": `translate3D(${p[0] * i}px, ${p[1] * i}px, 0) rotate(${Et(t.rotation)}deg)`, "--react-paint-editor-toolbox-edittextbox-fontsize": t.fontSize * i + "px", "--react-paint-editor-toolbox-edittextbox-padding": o.selectionPadding * i + "px", "--react-paint-editor-toolbox-edittextbox-color": t.style?.strokeColor ?? "inherit", "--react-paint-editor-toolbox-edittextbox-opacity": (t.style?.opacity ?? 100) / 100, "--react-paint-editor-toolbox-edittextbox-fontfamily": t.style?.fontFamily ?? st } });
|
|
977
|
+
}, Y1 = (e, i, t, a, s) => {
|
|
978
|
+
const { canvasSize: { width: n, height: o } } = t;
|
|
979
|
+
e.clearRect(0, 0, n, o), o1(e), t.gridGap && ((r, l, p, d) => {
|
|
980
|
+
const { gridGap: c, canvasOffset: u, canvasSize: { scaleRatio: g } } = d;
|
|
981
|
+
r.strokeStyle = "rgb(220,220,220)", r.lineWidth = 1, r.save(), r.scale(g, g), r.beginPath();
|
|
982
|
+
const v = -u[0] % c, w = -u[1] % c, M = Math.ceil(l / g / c), S = Math.ceil(p / g / c);
|
|
983
|
+
for (let L = 0; L < M; L++)
|
|
984
|
+
r.moveTo(v + (L + 1) * c, w), r.lineTo(v + (L + 1) * c, w + p / g);
|
|
985
|
+
for (let L = 0; L < S; L++)
|
|
986
|
+
r.moveTo(v, w + (L + 1) * c), r.lineTo(v + l / g, w + (L + 1) * c);
|
|
987
|
+
r.stroke(), r.restore();
|
|
988
|
+
})(e, n, o, t);
|
|
989
|
+
for (let r = a.length - 1; r >= 0; r--)
|
|
990
|
+
i.mode === "textedition" && a[r] === s || c1(e, a[r], t);
|
|
991
|
+
}, j1 = Ei.forwardRef(({ canGrow: e, disabled: i = !1, canvasSize: t, shapes: a, addShape: s, updateSingleShape: n, selectedShape: o, setSelectedShape: r, setSelectionFrame: l, hoveredShape: p, selectionFrame: d, refreshHoveredShape: c, refreshSelectedShapes: u, saveShapes: g, activeTool: v, setActiveTool: w, canvasOffsetStartPosition: M, setCanvasOffsetStartPosition: S, setCanvasOffset: L, isInsideComponent: b, selectionMode: k, setSelectionMode: P, selectionWidth: E, selectionColor: A, settings: H, isEditMode: C, isShiftPressed: V, withFrameSelection: z, withSkeleton: y }, F) => {
|
|
992
|
+
const x = J(null), T = J(null);
|
|
993
|
+
f1(F, () => x.current);
|
|
994
|
+
const { hoverMode: Z } = B1({ disabled: i, addShape: s, drawCanvasRef: x, setActiveTool: w, shapes: a, selectionMode: k, activeTool: v, isInsideComponent: b, setCanvasOffset: L, selectedShape: o, selectionCanvasRef: T, canvasOffsetStartPosition: M, setSelectedShape: r, setSelectionFrame: l, refreshHoveredShape: c, refreshSelectedShapes: u, setCanvasOffsetStartPosition: S, updateSingleShape: n, saveShapes: g, setSelectionMode: P, isShiftPressed: V, withFrameSelection: z, settings: H }), f = R((m) => {
|
|
995
|
+
if (o?.type !== "text")
|
|
969
996
|
return;
|
|
970
|
-
const
|
|
971
|
-
if (!
|
|
997
|
+
const Q = x.current?.getContext("2d");
|
|
998
|
+
if (!Q)
|
|
972
999
|
return;
|
|
973
|
-
const
|
|
974
|
-
n(
|
|
975
|
-
}, [n,
|
|
976
|
-
return
|
|
977
|
-
const
|
|
978
|
-
|
|
979
|
-
}, [a, k,
|
|
980
|
-
const
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
})(
|
|
984
|
-
}, [
|
|
985
|
-
}),
|
|
986
|
-
const [
|
|
987
|
-
return
|
|
1000
|
+
const D = nt(F1(Q, o, m, H), H);
|
|
1001
|
+
n(D);
|
|
1002
|
+
}, [n, o, H]);
|
|
1003
|
+
return B(() => {
|
|
1004
|
+
const m = x.current?.getContext("2d");
|
|
1005
|
+
m && window.requestAnimationFrame(() => Y1(m, k, H, a, o));
|
|
1006
|
+
}, [a, k, o, H]), B(() => {
|
|
1007
|
+
const m = T.current?.getContext("2d");
|
|
1008
|
+
m && window.requestAnimationFrame(() => ((Q, D, N, Y, de, $, U, oe, ee, te) => {
|
|
1009
|
+
Q.clearRect(0, 0, N.canvasSize.width, N.canvasSize.height), te && oe && oe.id !== U?.id && Y.type === "selection" && D.mode === "default" && mi({ ctx: Q, shape: oe, settings: N, selectionWidth: de, selectionColor: $, withAnchors: !1 }), U && Y.type !== "brush" && mi({ ctx: Q, shape: U, settings: N, selectionWidth: de, selectionColor: $, withAnchors: D.mode !== "textedition" }), ee && z1({ ctx: Q, selectionFrame: ee, settings: N });
|
|
1010
|
+
})(m, k, H, v, E, A, o, p, d, y));
|
|
1011
|
+
}, [p, d, k, o, v, H, E, A, y]), h("div", { className: "react-paint-canvas-box", children: I("div", { className: "react-paint-canvas-container", "data-grow": e, children: [h("canvas", { className: i1, ref: x, "data-grow": e, width: t.width, height: t.height }), C && h("canvas", { className: a1, ref: T, width: t.width, height: t.height, "data-grow": e, style: { "--react-paint-canvas-cursor": v.type !== "selection" && v.type !== "move" || Z.mode === "resize" ? "crosshair" : v.type === "move" || Z.mode === "translate" ? "move" : Z.mode === "rotate" ? "grab" : "default" } }), C && k.mode === "textedition" && o?.type === "text" && h(X1, { scaleRatio: t.scaleRatio, disabled: i, shape: o, defaultValue: k.defaultValue, updateValue: f, saveShapes: g, settings: H })] }) });
|
|
1012
|
+
}), Ci = "ArrowUp", wi = "ArrowDown", xi = "ArrowLeft", Mi = "ArrowRight", _1 = "Delete", q1 = "Backspace", J1 = "Escape", ki = "Shift", K1 = "z", ea = "Z", ta = "y", ia = "Y", Li = "copy", Vi = "paste", aa = ({ isInsideComponent: e, selectedShape: i, isEditingText: t, settings: a, setSelectedShape: s, removeShape: n, pasteShape: o, updateShape: r, backwardShape: l, forwardShape: p, setShiftPressed: d }) => {
|
|
1013
|
+
const [c, u] = W(void 0);
|
|
1014
|
+
return B(() => {
|
|
1015
|
+
const g = (S) => {
|
|
1016
|
+
i && (t || (S.preventDefault(), u({ ...i })));
|
|
1017
|
+
}, v = (S) => {
|
|
1018
|
+
c && (t || (S.preventDefault(), o(((L, b) => ({ ...Dt([20, 20], L, [0, 0], b), id: se(`${L.type}_`) }))(c, a))));
|
|
1019
|
+
}, w = (S) => {
|
|
1020
|
+
S.key === ki && d(!1);
|
|
1021
|
+
}, M = (S) => {
|
|
1022
|
+
if (S.metaKey || S.ctrlKey) {
|
|
1023
|
+
if (S.key === ea || S.key === K1)
|
|
1024
|
+
return S.preventDefault(), S.stopPropagation(), void l();
|
|
1025
|
+
if (S.key === ia || S.key === ta)
|
|
1026
|
+
return S.preventDefault(), S.stopPropagation(), void p();
|
|
1027
|
+
}
|
|
1028
|
+
if (S.key === ki)
|
|
1029
|
+
return void d(!0);
|
|
1030
|
+
if (!i)
|
|
1031
|
+
return;
|
|
1032
|
+
if (S.key === J1)
|
|
1033
|
+
return void s(void 0);
|
|
1034
|
+
if (t)
|
|
1035
|
+
return;
|
|
1036
|
+
const L = { [xi]: [a.gridGap ? -a.gridGap : -1, 0], [Mi]: [a.gridGap ? a.gridGap : 1, 0], [wi]: [0, a.gridGap ? a.gridGap : 1], [Ci]: [0, a.gridGap ? -a.gridGap : -1] };
|
|
1037
|
+
switch (S.key) {
|
|
1038
|
+
case xi:
|
|
1039
|
+
case Mi:
|
|
1040
|
+
case wi:
|
|
1041
|
+
case Ci:
|
|
1042
|
+
S.preventDefault(), S.stopPropagation(), r(Dt(L[S.key], i, [0, 0], a));
|
|
1043
|
+
break;
|
|
1044
|
+
case _1:
|
|
1045
|
+
case q1:
|
|
1046
|
+
S.preventDefault(), S.stopPropagation(), n(i);
|
|
1047
|
+
}
|
|
1048
|
+
};
|
|
1049
|
+
if (e)
|
|
1050
|
+
return document.addEventListener("keydown", M), document.addEventListener("keyup", w), document.addEventListener(Li, g), document.addEventListener(Vi, v), () => {
|
|
1051
|
+
document.removeEventListener("keydown", M), document.removeEventListener("keyup", w), document.removeEventListener(Li, g), document.removeEventListener(Vi, v);
|
|
1052
|
+
};
|
|
1053
|
+
}, [e, c, t, i, a, r, n, s, o, l, p, d]), {};
|
|
1054
|
+
}, Va = ({ options: e, className: i, style: t, canvasProps: a }) => {
|
|
1055
|
+
const { shapesRef: s, selectedShape: n, selectionFrame: o, hoveredShape: r, addShape: l, setSelectedShape: p, setSelectionFrame: d, refreshSelectedShapes: c, refreshHoveredShape: u, removeShape: g, updateShape: v, backwardShape: w, forwardShape: M, saveShapes: S, refs: L, width: b, height: k, settings: P, canvasSize: E, setCanvasSize: A, setCanvasOffset: H, selectShape: C, activeTool: V, setActiveTool: z, isInsideComponent: y, isEditMode: F, isDisabled: x, canvas: { withSkeleton: T, withFrameSelection: Z, canGrow: f, canShrink: m } } = a, { canvasBackgroundColor: Q, canvasSelectionColor: D, canvasSelectionWidth: N } = { ...Q1, ...e }, Y = J(null), [de, $] = W(void 0), [U, oe] = W({ mode: "default" }), [ee, te] = W(!1), ve = R((ie) => {
|
|
1056
|
+
l(ie), C(ie);
|
|
1057
|
+
}, [l, C]), Me = R((ie) => {
|
|
1058
|
+
const j = ie / b;
|
|
1059
|
+
A({ width: ie, height: k * j, scaleRatio: j });
|
|
1060
|
+
}, [b, k, A]);
|
|
1061
|
+
return aa({ isInsideComponent: y, isEditingText: U.mode === "textedition", settings: P, selectedShape: n, setSelectedShape: p, removeShape: g, pasteShape: ve, updateShape: v, backwardShape: w, forwardShape: M, setShiftPressed: te }), (({ onResized: ie, element: j }) => {
|
|
1062
|
+
B(() => {
|
|
1063
|
+
const Se = j.current;
|
|
1064
|
+
if (!Se)
|
|
1065
|
+
return;
|
|
1066
|
+
const Ee = new ResizeObserver((ke) => {
|
|
1067
|
+
const fe = ke?.[0]?.borderBoxSize?.[0], { width: be, height: De } = fe ? { width: fe.inlineSize, height: fe.blockSize } : ke?.[0].contentRect ?? {};
|
|
1068
|
+
ie(be, De);
|
|
1069
|
+
});
|
|
1070
|
+
return Ee.observe(Se), () => {
|
|
1071
|
+
Ee.unobserve(Se);
|
|
1072
|
+
};
|
|
1073
|
+
}, [j, ie]);
|
|
1074
|
+
})({ element: Y, onResized: Me }), h("div", { ref: Y, className: "react-paint-app-row" + (i ? ` ${i}` : ""), "data-grow": f, "data-shrink": m, style: { "--react-paint-app-row-width": E.width, "--react-paint-app-canvaswidth": `${b}px`, "--react-paint-app-row-aspectratio": `calc(${E.width} / ${E.height})`, "--react-paint-app-canvas-bg": Q, ...t }, children: h(j1, { ref: L.canvas, canGrow: f, disabled: x, isInsideComponent: y, activeTool: V, setActiveTool: z, canvasOffsetStartPosition: de, setCanvasOffsetStartPosition: $, shapes: s.current, addShape: l, updateSingleShape: v, selectedShape: n, selectionFrame: o, setSelectedShape: p, setSelectionFrame: d, hoveredShape: r, refreshHoveredShape: u, refreshSelectedShapes: c, settings: P, setCanvasOffset: H, saveShapes: S, canvasSize: E, selectionMode: U, setSelectionMode: oe, selectionColor: D, selectionWidth: N, isEditMode: F, isShiftPressed: ee, withFrameSelection: Z, withSkeleton: T }) });
|
|
1075
|
+
}, na = ({ isLoading: e = !1 }) => {
|
|
1076
|
+
const [i, t] = W("hidden");
|
|
1077
|
+
return B(() => {
|
|
1078
|
+
if (!e) {
|
|
1079
|
+
t("fadeOut");
|
|
1080
|
+
const a = setTimeout(() => t("hidden"), 300);
|
|
1081
|
+
return () => {
|
|
1082
|
+
clearTimeout(a);
|
|
1083
|
+
};
|
|
1084
|
+
}
|
|
1085
|
+
t("visible");
|
|
1086
|
+
}, [e]), i === "hidden" ? null : h("div", { className: "react-paint-editor-loading", "data-loading": i, style: { "--react-paint-editor-loading-zindex": m1, "--react-paint-editor-loading-transition-duration": "300ms" }, children: I("div", { className: "react-paint-editor-loader", children: [h("div", {}), h("div", {}), h("div", {}), h("div", {})] }) });
|
|
1087
|
+
}, sa = "infos", oa = 4e3, ra = ({ type: e, text: i, duration: t }) => {
|
|
1088
|
+
const [a, s] = W(!1);
|
|
1089
|
+
return B(() => {
|
|
988
1090
|
const n = setTimeout(() => {
|
|
989
1091
|
s(!0);
|
|
990
|
-
}, 100),
|
|
1092
|
+
}, 100), o = setTimeout(() => {
|
|
991
1093
|
s(!1);
|
|
992
1094
|
}, t - 500 - 100);
|
|
993
1095
|
return () => {
|
|
994
|
-
clearTimeout(n), clearTimeout(
|
|
1096
|
+
clearTimeout(n), clearTimeout(o);
|
|
995
1097
|
};
|
|
996
|
-
}, [t]),
|
|
997
|
-
},
|
|
1098
|
+
}, [t]), h("div", { className: "react-paint-editor-snackbar", "data-is-shown": +a, "data-type": e, style: { "--react-paint-editor-panel-transition-duration": "500ms" }, children: i });
|
|
1099
|
+
}, la = ({ snackbarList: e }) => h("div", { className: "react-paint-editor-snackbar-container", style: { "--react-paint-editor-snackbar-zindex": y1 }, children: e.map((i) => h(ra, { ...i }, i.id)) }), X = Ei.forwardRef((e, i) => {
|
|
998
1100
|
if (e.type === "file" || e.type === "color") {
|
|
999
|
-
const { hidden: d = !1, disabled:
|
|
1000
|
-
return
|
|
1101
|
+
const { hidden: d = !1, disabled: c = !1, selected: u = !1, icon: g, children: v, className: w = "", title: M, onClick: S, ...L } = e;
|
|
1102
|
+
return I("label", { className: `react-paint-editor-button ${w}`, title: M, onClick: S, "data-disabled": +c, "data-selected": +u, "data-hidden": +d, children: [h("input", { ref: i, disabled: c, ...L }), I("span", { className: "react-paint-editor-button-content", children: [v && h("span", { className: "react-paint-editor-button-children", children: v }), g && h("span", { className: "react-paint-editor-button-icon", dangerouslySetInnerHTML: { __html: g } })] })] });
|
|
1001
1103
|
}
|
|
1002
|
-
const { hidden: t = !1, disabled: a = !1, selected: s = !1, icon: n, children:
|
|
1003
|
-
return
|
|
1004
|
-
}),
|
|
1104
|
+
const { hidden: t = !1, disabled: a = !1, selected: s = !1, icon: n, children: o, type: r = "button", className: l = "", ...p } = e;
|
|
1105
|
+
return h("button", { className: `react-paint-editor-button ${l}`, ref: i, disabled: a, "data-disabled": +a, "data-selected": +s, "data-hidden": +t, type: r, ...p, children: I("span", { className: "react-paint-editor-button-content", children: [o && h("span", { className: "react-paint-editor-button-children", children: o }), n && h("span", { className: "react-paint-editor-button-icon", dangerouslySetInnerHTML: { __html: n } })] }) });
|
|
1106
|
+
}), et = ({ children: e, title: i = "", className: t = "", position: a = "bottom", fitContainer: s = !1, alignment: n = "center" }) => I("div", { className: `react-paint-editor-panel ${t}`, "data-fitcontainer": s, "data-position": a, "data-alignment": n, style: { "--react-paint-editor-panel-zindex": Oi }, children: [i && h("h3", { className: "react-paint-editor-panel-title", children: i }), e] }), da = (e) => {
|
|
1005
1107
|
switch (e) {
|
|
1006
1108
|
case "brush":
|
|
1007
|
-
return
|
|
1109
|
+
return Ni;
|
|
1008
1110
|
case "line":
|
|
1009
|
-
return
|
|
1111
|
+
return zi;
|
|
1010
1112
|
case "polygon":
|
|
1011
|
-
return
|
|
1113
|
+
return Rt;
|
|
1012
1114
|
case "curve":
|
|
1013
|
-
return
|
|
1115
|
+
return Wi;
|
|
1014
1116
|
case "rect":
|
|
1015
1117
|
case "square":
|
|
1016
|
-
return
|
|
1118
|
+
return Ft;
|
|
1017
1119
|
case "circle":
|
|
1018
1120
|
case "ellipse":
|
|
1019
|
-
return
|
|
1121
|
+
return Nt;
|
|
1020
1122
|
case "text":
|
|
1021
|
-
return
|
|
1123
|
+
return Ii;
|
|
1022
1124
|
case "picture":
|
|
1023
|
-
return
|
|
1125
|
+
return It;
|
|
1024
1126
|
case "triangle":
|
|
1025
1127
|
return "";
|
|
1026
1128
|
}
|
|
1027
|
-
},
|
|
1028
|
-
const d =
|
|
1029
|
-
const [
|
|
1030
|
-
return
|
|
1031
|
-
|
|
1032
|
-
}, [
|
|
1033
|
-
const
|
|
1034
|
-
if (!
|
|
1129
|
+
}, ca = ({ disabled: e = !1, shape: i, selected: t, layoutDragging: a, toggleShapeVisibility: s, toggleShapeLock: n, setLayoutDragging: o, handleRemove: r, handleSelect: l, onMoveShapes: p }) => {
|
|
1130
|
+
const d = J(null), { isOver: c } = (({ disabled: u = !1, ref: g, shape: v, layoutDragging: w, setLayoutDragging: M, handleSelect: S, onMoveShapes: L }) => {
|
|
1131
|
+
const [b, k] = W(!1);
|
|
1132
|
+
return B(() => {
|
|
1133
|
+
w || k(!1);
|
|
1134
|
+
}, [w]), B(() => {
|
|
1135
|
+
const P = g.current;
|
|
1136
|
+
if (!P)
|
|
1035
1137
|
return;
|
|
1036
|
-
const
|
|
1037
|
-
|
|
1038
|
-
},
|
|
1039
|
-
|
|
1040
|
-
},
|
|
1041
|
-
|
|
1042
|
-
},
|
|
1138
|
+
const E = () => {
|
|
1139
|
+
M(void 0);
|
|
1140
|
+
}, A = (y) => (y.preventDefault && y.preventDefault(), !1), H = (y) => {
|
|
1141
|
+
S(v), y.dataTransfer && (y.dataTransfer.effectAllowed = "move", y.dataTransfer.setData("draggableShapeId", v.id), M(v.id));
|
|
1142
|
+
}, C = () => {
|
|
1143
|
+
w !== v.id && k(!0);
|
|
1144
|
+
}, V = () => {
|
|
1043
1145
|
k(!1);
|
|
1044
|
-
},
|
|
1045
|
-
return
|
|
1046
|
-
|
|
1146
|
+
}, z = (y) => (y.stopPropagation(), y.dataTransfer && L(y.dataTransfer.getData("draggableShapeId"), v.id), !1);
|
|
1147
|
+
return u || (P.addEventListener("dragstart", H), P.addEventListener("dragend", E), P.addEventListener("dragover", A), P.addEventListener("dragenter", C), P.addEventListener("dragleave", V), P.addEventListener("drop", z)), () => {
|
|
1148
|
+
u || (P.removeEventListener("dragstart", H), P.removeEventListener("dragend", E), P.removeEventListener("dragover", A), P.removeEventListener("dragenter", C), P.removeEventListener("dragleave", V), P.removeEventListener("drop", z));
|
|
1047
1149
|
};
|
|
1048
|
-
}, [
|
|
1049
|
-
})({ disabled: e, ref: d, shape: i, layoutDragging: a, setLayoutDragging:
|
|
1050
|
-
return
|
|
1051
|
-
e || (
|
|
1052
|
-
}, "data-selected": +t, ref: d, children: [
|
|
1053
|
-
e || (
|
|
1054
|
-
}, icon: i.visible === !1 ? '<svg><path d="M13.521 11.021 12.25 9.75Q12.333 8.75 11.604 7.979Q10.875 7.208 9.812 7.312L8.542 6.042Q8.896 5.896 9.26 5.833Q9.625 5.771 10 5.771Q11.583 5.771 12.688 6.875Q13.792 7.979 13.792 9.562Q13.792 9.979 13.719 10.354Q13.646 10.729 13.521 11.021ZM16.167 13.646 14.917 12.417Q15.667 11.833 16.25 11.146Q16.833 10.458 17.25 9.562Q16.229 7.479 14.292 6.281Q12.354 5.083 10 5.083Q9.396 5.083 8.885 5.156Q8.375 5.229 7.875 5.375L6.5 4Q7.354 3.646 8.208 3.49Q9.062 3.333 10 3.333Q13.146 3.333 15.615 5.052Q18.083 6.771 19.167 9.562Q18.688 10.792 17.917 11.823Q17.146 12.854 16.167 13.646ZM16.396 18.854 12.938 15.396Q12.208 15.625 11.479 15.729Q10.75 15.833 10 15.833Q6.833 15.833 4.375 14.094Q1.917 12.354 0.833 9.562Q1.25 8.479 1.917 7.552Q2.583 6.625 3.417 5.875L1.125 3.562L2.375 2.354L17.625 17.625ZM4.604 7.062Q4.021 7.604 3.542 8.219Q3.062 8.833 2.729 9.562Q3.75 11.646 5.688 12.865Q7.625 14.083 10 14.083Q10.354 14.083 10.74 14.052Q11.125 14.021 11.479 13.938L10.812 13.271Q10.625 13.312 10.417 13.333Q10.208 13.354 10 13.354Q8.417 13.354 7.312 12.25Q6.208 11.146 6.208 9.562Q6.208 9.354 6.24 9.167Q6.271 8.979 6.312 8.771ZM11.375 8.875Q11.375 8.875 11.375 8.875Q11.375 8.875 11.375 8.875Q11.375 8.875 11.375 8.875Q11.375 8.875 11.375 8.875Q11.375 8.875 11.375 8.875Q11.375 8.875 11.375 8.875ZM8.042 10.5Q8.042 10.5 8.042 10.5Q8.042 10.5 8.042 10.5Q8.042 10.5 8.042 10.5Q8.042 10.5 8.042 10.5Q8.042 10.5 8.042 10.5Q8.042 10.5 8.042 10.5Z"/></svg>' : '<svg><path d="M10 13.354Q11.583 13.354 12.688 12.25Q13.792 11.146 13.792 9.562Q13.792 7.979 12.688 6.875Q11.583 5.771 10 5.771Q8.417 5.771 7.312 6.875Q6.208 7.979 6.208 9.562Q6.208 11.146 7.312 12.25Q8.417 13.354 10 13.354ZM10 11.812Q9.062 11.812 8.406 11.156Q7.75 10.5 7.75 9.562Q7.75 8.625 8.406 7.969Q9.062 7.312 10 7.312Q10.938 7.312 11.594 7.969Q12.25 8.625 12.25 9.562Q12.25 10.5 11.594 11.156Q10.938 11.812 10 11.812ZM10 15.833Q6.938 15.833 4.448 14.125Q1.958 12.417 0.833 9.562Q1.958 6.708 4.458 5.021Q6.958 3.333 10 3.333Q13.042 3.333 15.542 5.021Q18.042 6.708 19.167 9.562Q18.042 12.417 15.552 14.125Q13.062 15.833 10 15.833ZM10 9.562Q10 9.562 10 9.562Q10 9.562 10 9.562Q10 9.562 10 9.562Q10 9.562 10 9.562Q10 9.562 10 9.562Q10 9.562 10 9.562Q10 9.562 10 9.562Q10 9.562 10 9.562ZM10 14.083Q12.333 14.083 14.281 12.865Q16.229 11.646 17.25 9.562Q16.229 7.479 14.281 6.281Q12.333 5.083 10 5.083Q7.667 5.083 5.708 6.281Q3.75 7.479 2.729 9.562Q3.75 11.646 5.708 12.865Q7.667 14.083 10 14.083Z"/></svg>' }),
|
|
1055
|
-
e || (
|
|
1056
|
-
}, icon: i.locked ? '<svg><path d="M10 0.833Q11.771 0.833 12.99 2.052Q14.208 3.271 14.208 5.042V6.667H14.917Q15.646 6.667 16.156 7.177Q16.667 7.688 16.667 8.417V16.562Q16.667 17.292 16.156 17.812Q15.646 18.333 14.917 18.333H5.083Q4.354 18.333 3.844 17.812Q3.333 17.292 3.333 16.562V8.417Q3.333 7.688 3.844 7.177Q4.354 6.667 5.083 6.667H5.792V5.042Q5.792 3.271 7.01 2.052Q8.229 0.833 10 0.833ZM10 2.583Q8.979 2.583 8.26 3.302Q7.542 4.021 7.542 5.042V6.667H12.458V5.042Q12.458 4.021 11.74 3.302Q11.021 2.583 10 2.583ZM5.083 16.583H14.917Q14.917 16.583 14.917 16.583Q14.917 16.583 14.917 16.583V8.417Q14.917 8.417 14.917 8.417Q14.917 8.417 14.917 8.417H5.083Q5.083 8.417 5.083 8.417Q5.083 8.417 5.083 8.417V16.583Q5.083 16.583 5.083 16.583Q5.083 16.583 5.083 16.583ZM10 10.812Q9.292 10.812 8.802 11.302Q8.312 11.792 8.312 12.5Q8.312 13.208 8.802 13.698Q9.292 14.188 10 14.188Q10.708 14.188 11.198 13.698Q11.688 13.208 11.688 12.5Q11.688 11.792 11.198 11.302Q10.708 10.812 10 10.812ZM5.083 8.417Q5.083 8.417 5.083 8.417Q5.083 8.417 5.083 8.417V16.583Q5.083 16.583 5.083 16.583Q5.083 16.583 5.083 16.583Q5.083 16.583 5.083 16.583Q5.083 16.583 5.083 16.583V8.417Q5.083 8.417 5.083 8.417Q5.083 8.417 5.083 8.417Z"/></svg>' : '<svg><path d="M5.792 5.042Q5.792 3.271 7.01 2.052Q8.229 0.833 10 0.833Q11.771 0.833 12.99 2.052Q14.208 3.271 14.208 5.042V6.667H14.917Q15.646 6.667 16.156 7.177Q16.667 7.688 16.667 8.417V16.562Q16.667 17.292 16.156 17.812Q15.646 18.333 14.917 18.333H5.083Q4.354 18.333 3.844 17.812Q3.333 17.292 3.333 16.562V8.417Q3.333 7.688 3.844 7.177Q4.354 6.667 5.083 6.667H12.458V5.042Q12.458 4.021 11.74 3.302Q11.021 2.583 10 2.583Q8.979 2.583 8.26 3.302Q7.542 4.021 7.542 5.042ZM5.083 16.583H14.917Q14.917 16.583 14.917 16.583Q14.917 16.583 14.917 16.583V8.417Q14.917 8.417 14.917 8.417Q14.917 8.417 14.917 8.417H5.083Q5.083 8.417 5.083 8.417Q5.083 8.417 5.083 8.417V16.583Q5.083 16.583 5.083 16.583Q5.083 16.583 5.083 16.583ZM10 10.812Q9.292 10.812 8.802 11.302Q8.312 11.792 8.312 12.5Q8.312 13.208 8.802 13.698Q9.292 14.188 10 14.188Q10.708 14.188 11.198 13.698Q11.688 13.208 11.688 12.5Q11.688 11.792 11.198 11.302Q10.708 10.812 10 10.812ZM5.083 8.417Q5.083 8.417 5.083 8.417Q5.083 8.417 5.083 8.417V16.583Q5.083 16.583 5.083 16.583Q5.083 16.583 5.083 16.583Q5.083 16.583 5.083 16.583Q5.083 16.583 5.083 16.583V8.417Q5.083 8.417 5.083 8.417Q5.083 8.417 5.083 8.417Z"/></svg>' }),
|
|
1057
|
-
e || (
|
|
1058
|
-
}, icon:
|
|
1059
|
-
},
|
|
1060
|
-
const [
|
|
1061
|
-
return d ?
|
|
1062
|
-
},
|
|
1063
|
-
const [
|
|
1064
|
-
return n.length ?
|
|
1065
|
-
i((
|
|
1066
|
-
}, icon:
|
|
1067
|
-
l(
|
|
1068
|
-
}, children:
|
|
1069
|
-
const
|
|
1070
|
-
l(
|
|
1071
|
-
}, children:
|
|
1072
|
-
},
|
|
1150
|
+
}, [u, g, v, M, S, L, w]), { isOver: b };
|
|
1151
|
+
})({ disabled: e, ref: d, shape: i, layoutDragging: a, setLayoutDragging: o, handleSelect: l, onMoveShapes: p });
|
|
1152
|
+
return I("div", { className: "react-paint-editor-layout", "data-disabled": +e, draggable: !e, "data-is-dragging": +(a === i.id), "data-is-over": +c, onClick: (u) => {
|
|
1153
|
+
e || (u.preventDefault(), u.stopPropagation(), l(i));
|
|
1154
|
+
}, "data-selected": +t, ref: d, children: [h("span", { dangerouslySetInnerHTML: { __html: da(i.type) } }), h("span", { children: i.id }), h("div", { className: "react-paint-editor-layouts-separator" }), h(X, { className: "react-paint-editor-layouts-visible-button", title: i.visible ? "Hide" : "Show", "data-visible": i.visible !== !1, disabled: e, selected: t, onClick: (u) => {
|
|
1155
|
+
e || (u.preventDefault(), u.stopPropagation(), s(i));
|
|
1156
|
+
}, icon: i.visible === !1 ? '<svg><path d="M13.521 11.021 12.25 9.75Q12.333 8.75 11.604 7.979Q10.875 7.208 9.812 7.312L8.542 6.042Q8.896 5.896 9.26 5.833Q9.625 5.771 10 5.771Q11.583 5.771 12.688 6.875Q13.792 7.979 13.792 9.562Q13.792 9.979 13.719 10.354Q13.646 10.729 13.521 11.021ZM16.167 13.646 14.917 12.417Q15.667 11.833 16.25 11.146Q16.833 10.458 17.25 9.562Q16.229 7.479 14.292 6.281Q12.354 5.083 10 5.083Q9.396 5.083 8.885 5.156Q8.375 5.229 7.875 5.375L6.5 4Q7.354 3.646 8.208 3.49Q9.062 3.333 10 3.333Q13.146 3.333 15.615 5.052Q18.083 6.771 19.167 9.562Q18.688 10.792 17.917 11.823Q17.146 12.854 16.167 13.646ZM16.396 18.854 12.938 15.396Q12.208 15.625 11.479 15.729Q10.75 15.833 10 15.833Q6.833 15.833 4.375 14.094Q1.917 12.354 0.833 9.562Q1.25 8.479 1.917 7.552Q2.583 6.625 3.417 5.875L1.125 3.562L2.375 2.354L17.625 17.625ZM4.604 7.062Q4.021 7.604 3.542 8.219Q3.062 8.833 2.729 9.562Q3.75 11.646 5.688 12.865Q7.625 14.083 10 14.083Q10.354 14.083 10.74 14.052Q11.125 14.021 11.479 13.938L10.812 13.271Q10.625 13.312 10.417 13.333Q10.208 13.354 10 13.354Q8.417 13.354 7.312 12.25Q6.208 11.146 6.208 9.562Q6.208 9.354 6.24 9.167Q6.271 8.979 6.312 8.771ZM11.375 8.875Q11.375 8.875 11.375 8.875Q11.375 8.875 11.375 8.875Q11.375 8.875 11.375 8.875Q11.375 8.875 11.375 8.875Q11.375 8.875 11.375 8.875Q11.375 8.875 11.375 8.875ZM8.042 10.5Q8.042 10.5 8.042 10.5Q8.042 10.5 8.042 10.5Q8.042 10.5 8.042 10.5Q8.042 10.5 8.042 10.5Q8.042 10.5 8.042 10.5Q8.042 10.5 8.042 10.5Z"/></svg>' : '<svg><path d="M10 13.354Q11.583 13.354 12.688 12.25Q13.792 11.146 13.792 9.562Q13.792 7.979 12.688 6.875Q11.583 5.771 10 5.771Q8.417 5.771 7.312 6.875Q6.208 7.979 6.208 9.562Q6.208 11.146 7.312 12.25Q8.417 13.354 10 13.354ZM10 11.812Q9.062 11.812 8.406 11.156Q7.75 10.5 7.75 9.562Q7.75 8.625 8.406 7.969Q9.062 7.312 10 7.312Q10.938 7.312 11.594 7.969Q12.25 8.625 12.25 9.562Q12.25 10.5 11.594 11.156Q10.938 11.812 10 11.812ZM10 15.833Q6.938 15.833 4.448 14.125Q1.958 12.417 0.833 9.562Q1.958 6.708 4.458 5.021Q6.958 3.333 10 3.333Q13.042 3.333 15.542 5.021Q18.042 6.708 19.167 9.562Q18.042 12.417 15.552 14.125Q13.062 15.833 10 15.833ZM10 9.562Q10 9.562 10 9.562Q10 9.562 10 9.562Q10 9.562 10 9.562Q10 9.562 10 9.562Q10 9.562 10 9.562Q10 9.562 10 9.562Q10 9.562 10 9.562Q10 9.562 10 9.562ZM10 14.083Q12.333 14.083 14.281 12.865Q16.229 11.646 17.25 9.562Q16.229 7.479 14.281 6.281Q12.333 5.083 10 5.083Q7.667 5.083 5.708 6.281Q3.75 7.479 2.729 9.562Q3.75 11.646 5.708 12.865Q7.667 14.083 10 14.083Z"/></svg>' }), h(X, { className: "react-paint-editor-layouts-locked-button", title: i.locked ? "Locked" : "Unlocked", "data-locked": !!i.locked, disabled: e, selected: t, onClick: (u) => {
|
|
1157
|
+
e || (u.preventDefault(), u.stopPropagation(), n(i));
|
|
1158
|
+
}, icon: i.locked ? '<svg><path d="M10 0.833Q11.771 0.833 12.99 2.052Q14.208 3.271 14.208 5.042V6.667H14.917Q15.646 6.667 16.156 7.177Q16.667 7.688 16.667 8.417V16.562Q16.667 17.292 16.156 17.812Q15.646 18.333 14.917 18.333H5.083Q4.354 18.333 3.844 17.812Q3.333 17.292 3.333 16.562V8.417Q3.333 7.688 3.844 7.177Q4.354 6.667 5.083 6.667H5.792V5.042Q5.792 3.271 7.01 2.052Q8.229 0.833 10 0.833ZM10 2.583Q8.979 2.583 8.26 3.302Q7.542 4.021 7.542 5.042V6.667H12.458V5.042Q12.458 4.021 11.74 3.302Q11.021 2.583 10 2.583ZM5.083 16.583H14.917Q14.917 16.583 14.917 16.583Q14.917 16.583 14.917 16.583V8.417Q14.917 8.417 14.917 8.417Q14.917 8.417 14.917 8.417H5.083Q5.083 8.417 5.083 8.417Q5.083 8.417 5.083 8.417V16.583Q5.083 16.583 5.083 16.583Q5.083 16.583 5.083 16.583ZM10 10.812Q9.292 10.812 8.802 11.302Q8.312 11.792 8.312 12.5Q8.312 13.208 8.802 13.698Q9.292 14.188 10 14.188Q10.708 14.188 11.198 13.698Q11.688 13.208 11.688 12.5Q11.688 11.792 11.198 11.302Q10.708 10.812 10 10.812ZM5.083 8.417Q5.083 8.417 5.083 8.417Q5.083 8.417 5.083 8.417V16.583Q5.083 16.583 5.083 16.583Q5.083 16.583 5.083 16.583Q5.083 16.583 5.083 16.583Q5.083 16.583 5.083 16.583V8.417Q5.083 8.417 5.083 8.417Q5.083 8.417 5.083 8.417Z"/></svg>' : '<svg><path d="M5.792 5.042Q5.792 3.271 7.01 2.052Q8.229 0.833 10 0.833Q11.771 0.833 12.99 2.052Q14.208 3.271 14.208 5.042V6.667H14.917Q15.646 6.667 16.156 7.177Q16.667 7.688 16.667 8.417V16.562Q16.667 17.292 16.156 17.812Q15.646 18.333 14.917 18.333H5.083Q4.354 18.333 3.844 17.812Q3.333 17.292 3.333 16.562V8.417Q3.333 7.688 3.844 7.177Q4.354 6.667 5.083 6.667H12.458V5.042Q12.458 4.021 11.74 3.302Q11.021 2.583 10 2.583Q8.979 2.583 8.26 3.302Q7.542 4.021 7.542 5.042ZM5.083 16.583H14.917Q14.917 16.583 14.917 16.583Q14.917 16.583 14.917 16.583V8.417Q14.917 8.417 14.917 8.417Q14.917 8.417 14.917 8.417H5.083Q5.083 8.417 5.083 8.417Q5.083 8.417 5.083 8.417V16.583Q5.083 16.583 5.083 16.583Q5.083 16.583 5.083 16.583ZM10 10.812Q9.292 10.812 8.802 11.302Q8.312 11.792 8.312 12.5Q8.312 13.208 8.802 13.698Q9.292 14.188 10 14.188Q10.708 14.188 11.198 13.698Q11.688 13.208 11.688 12.5Q11.688 11.792 11.198 11.302Q10.708 10.812 10 10.812ZM5.083 8.417Q5.083 8.417 5.083 8.417Q5.083 8.417 5.083 8.417V16.583Q5.083 16.583 5.083 16.583Q5.083 16.583 5.083 16.583Q5.083 16.583 5.083 16.583Q5.083 16.583 5.083 16.583V8.417Q5.083 8.417 5.083 8.417Q5.083 8.417 5.083 8.417Z"/></svg>' }), h(X, { className: "react-paint-editor-layouts-remove-button", title: "Remove", disabled: e, onClick: (u) => {
|
|
1159
|
+
e || (u.preventDefault(), u.stopPropagation(), r(i));
|
|
1160
|
+
}, icon: Ri })] });
|
|
1161
|
+
}, pa = ({ gridFormat: e, setGridFormat: i, disabled: t = !1, shapes: a, removeShape: s, toggleShapeVisibility: n, toggleShapeLock: o, selectedShape: r, moveShapes: l, selectShape: p, isLayoutPanelShown: d }) => {
|
|
1162
|
+
const [c, u] = W(void 0);
|
|
1163
|
+
return d ? h(et, { alignment: "right", className: "react-paint-editor-layouts-panel", children: h("div", { className: "react-paint-editor-layouts-panel-content", children: I("div", { className: "react-paint-editor-layouts-scrolling-content", children: [I("div", { className: "react-paint-editor-layouts-row", children: [h("span", { className: "react-paint-editor-layouts-subtitle", children: "Grid" }), h(X, { icon: '<svg><path d="M18.333 15.854 16.583 14.104V13.354H15.833L14.083 11.604H16.583V8.375H13.375V10.896L11.625 9.146V8.375H10.875L9.125 6.625H11.625V3.417H8.396V5.896L6.646 4.146V3.417H5.896L4.146 1.667H16.583Q17.312 1.667 17.823 2.177Q18.333 2.688 18.333 3.417ZM13.375 6.625H16.583V3.417Q16.583 3.417 16.583 3.417Q16.583 3.417 16.583 3.417H13.375ZM16.771 19.229 15.854 18.333H3.417Q2.688 18.333 2.177 17.823Q1.667 17.312 1.667 16.583V4.125L0.812 3.271L2.042 2.021L18 18ZM13.375 16.583H14.104L13.375 15.833ZM8.396 11.604H9.125L8.396 10.854ZM8.396 16.583H11.625V14.083L10.875 13.354H8.396ZM3.417 6.625H4.167L3.417 5.875ZM3.417 11.604H6.646V9.104L5.917 8.375H3.417ZM6.646 16.583V13.354H3.417V16.583Q3.417 16.583 3.417 16.583Q3.417 16.583 3.417 16.583Z"/></svg>', className: "react-paint-editor-layouts-grid-button", selected: e === "none", disabled: t, onClick: () => i("none") }), ["small", "medium", "large"].map((g) => h(X, { className: "react-paint-editor-layouts-grid-button", selected: e === g, disabled: t, onClick: () => i(g), children: g.charAt(0).toUpperCase() }, g))] }), h("hr", {}), h("div", { className: "react-paint-editor-layouts", children: a.length === 0 ? h("div", { className: "react-paint-editor-layouts-placeholder", children: "No layer yet" }) : a.map((g) => h(ca, { shape: g, disabled: t, layoutDragging: c, setLayoutDragging: u, selected: r?.id === g.id, handleSelect: p, handleRemove: s, onMoveShapes: l, toggleShapeVisibility: n, toggleShapeLock: o }, g.id)) })] }) }) }) : null;
|
|
1164
|
+
}, Bt = ({ children: e, onClose: i, position: t = "center", className: a = "" }) => I("div", { className: "react-paint-editor-modal", "data-position": t, style: { "--react-paint-editor-modal-zindex": Oi }, children: [h("div", { className: "react-paint-editor-modal-mask", onClick: i }), h("div", { className: `react-paint-editor-modal-panel ${a}`, children: e })] }), dt = ({ selectedSettings: e, setSelectedSettings: i, title: t = "Choisissez une couleur", mode: a = "fill", disabled: s = !1, values: n, field: o, value: r = "", valueChanged: l }) => {
|
|
1165
|
+
const [p] = W(se("settings_")), d = e === p;
|
|
1166
|
+
return n.length ? I(pe, { children: [h(X, { selected: d, title: t, disabled: s, onClick: () => {
|
|
1167
|
+
i((c) => c === p ? void 0 : p);
|
|
1168
|
+
}, icon: r === "transparent" ? a === "fill" ? Kt : Jt : void 0, children: r !== "transparent" && h("div", { className: "react-paint-editor-colorfield-color", "data-mode": a, style: { "--react-paint-editor-colorfield-color-value": r } }) }), d && h(et, { title: t, alignment: "left", children: I("div", { className: "react-paint-editor-colorfield-wrapper", children: [n.map((c, u) => h(X, { title: c, selected: c === r, color: c, icon: c === "transparent" ? a === "fill" ? Kt : Jt : void 0, onClick: () => {
|
|
1169
|
+
l(o, c);
|
|
1170
|
+
}, children: c !== "transparent" && h("div", { className: "react-paint-editor-colorfield-color", color: c, "data-mode": a, style: { "--react-paint-editor-colorfield-color-value": c } }) }, c)), h(X, { type: "color", title: "Custom color", selected: !n.includes(r), value: r, onChange: (c) => {
|
|
1171
|
+
const u = +c.target.value;
|
|
1172
|
+
l(o, Number.isNaN(u) ? c.target.value : u);
|
|
1173
|
+
}, children: h("div", { className: "react-paint-editor-colorfield-customcolor", style: { "--react-paint-editor-colorfield-color-value": n.includes(r) ? "var(--react-paint-editor-app-font-color)" : r }, children: h("span", { dangerouslySetInnerHTML: { __html: '<svg><path d="M9.958 18.333Q8.25 18.333 6.74 17.677Q5.229 17.021 4.104 15.885Q2.979 14.75 2.323 13.229Q1.667 11.708 1.667 10Q1.667 8.271 2.333 6.75Q3 5.229 4.156 4.104Q5.312 2.979 6.854 2.323Q8.396 1.667 10.125 1.667Q11.771 1.667 13.26 2.25Q14.75 2.833 15.875 3.854Q17 4.875 17.667 6.26Q18.333 7.646 18.333 9.25Q18.333 11.688 16.792 12.948Q15.25 14.208 13.188 14.208H11.75Q11.625 14.208 11.562 14.281Q11.5 14.354 11.5 14.458Q11.5 14.688 11.812 15.219Q12.125 15.75 12.125 16.458Q12.125 17.458 11.51 17.896Q10.896 18.333 9.958 18.333ZM5.458 10.875Q6 10.875 6.375 10.5Q6.75 10.125 6.75 9.583Q6.75 9.042 6.375 8.667Q6 8.292 5.458 8.292Q4.917 8.292 4.542 8.667Q4.167 9.042 4.167 9.583Q4.167 10.125 4.542 10.5Q4.917 10.875 5.458 10.875ZM7.917 7.583Q8.458 7.583 8.833 7.208Q9.208 6.833 9.208 6.292Q9.208 5.75 8.833 5.375Q8.458 5 7.917 5Q7.375 5 7 5.375Q6.625 5.75 6.625 6.292Q6.625 6.833 7 7.208Q7.375 7.583 7.917 7.583ZM12.021 7.583Q12.562 7.583 12.938 7.208Q13.312 6.833 13.312 6.292Q13.312 5.75 12.938 5.375Q12.562 5 12.021 5Q11.479 5 11.104 5.375Q10.729 5.75 10.729 6.292Q10.729 6.833 11.104 7.208Q11.479 7.583 12.021 7.583ZM14.479 10.875Q15.021 10.875 15.396 10.5Q15.771 10.125 15.771 9.583Q15.771 9.042 15.396 8.667Q15.021 8.292 14.479 8.292Q13.938 8.292 13.562 8.667Q13.188 9.042 13.188 9.583Q13.188 10.125 13.562 10.5Q13.938 10.875 14.479 10.875Z"/></svg>' } }) }) })] }) })] }) : null;
|
|
1174
|
+
}, ha = ({ disabled: e = !1, selectedShape: i, removeShape: t }) => h(X, { title: "Delete", disabled: e, "data-disabled": +e, onClick: () => {
|
|
1073
1175
|
t(i);
|
|
1074
|
-
}, icon:
|
|
1075
|
-
const [d] =
|
|
1076
|
-
return
|
|
1077
|
-
t((
|
|
1078
|
-
} }),
|
|
1079
|
-
|
|
1080
|
-
})(
|
|
1081
|
-
},
|
|
1082
|
-
const
|
|
1083
|
-
|
|
1176
|
+
}, icon: Ri }), Xt = ({ CustomOption: e, selectedSettings: i, setSelectedSettings: t, title: a = "Choisissez l'option", disabled: s = !1, field: n, icon: o, values: r, defaultValue: l, valueChanged: p }) => {
|
|
1177
|
+
const [d] = W(se("settings_")), c = i === d;
|
|
1178
|
+
return r.length ? I(pe, { children: [h(X, { selected: c, title: a, icon: o, disabled: s, onClick: () => {
|
|
1179
|
+
t((u) => u === d ? void 0 : d);
|
|
1180
|
+
} }), c && h(et, { title: a, alignment: "left", fitContainer: !0, children: h("div", { className: "react-paint-editor-selectfield-wrapper", children: r.map((u) => h(X, { title: `${u}`, onClick: () => ((g) => {
|
|
1181
|
+
p(n, g);
|
|
1182
|
+
})(u), selected: l === u, style: { "--react-paint-editor-button-padding": "16px" }, children: h(e, { children: u }) }, u)) }) })] }) : null;
|
|
1183
|
+
}, ua = ({ children: e }) => h("span", { className: "react-paint-editor-fontfamily-option", style: { "--react-paint-editor-fontfamily-family": e }, children: e }), Pi = ({ selectedSettings: e, setSelectedSettings: i, disabled: t = !1, values: a, defaultValue: s, valueChanged: n }) => a.length ? h(Xt, { selectedSettings: e, setSelectedSettings: i, CustomOption: ua, title: "Police", icon: '<svg><path d="M5.312 14.979H7.125L8.042 12.479H11.979L12.896 14.979H14.708L10.917 5H9.083ZM8.542 10.958 9.958 6.958H10.042L11.458 10.958ZM3.417 18.333Q2.688 18.333 2.177 17.823Q1.667 17.312 1.667 16.583V3.417Q1.667 2.688 2.177 2.177Q2.688 1.667 3.417 1.667H16.583Q17.312 1.667 17.823 2.177Q18.333 2.688 18.333 3.417V16.583Q18.333 17.312 17.823 17.823Q17.312 18.333 16.583 18.333ZM3.417 16.583H16.583Q16.583 16.583 16.583 16.583Q16.583 16.583 16.583 16.583V3.417Q16.583 3.417 16.583 3.417Q16.583 3.417 16.583 3.417H3.417Q3.417 3.417 3.417 3.417Q3.417 3.417 3.417 3.417V16.583Q3.417 16.583 3.417 16.583Q3.417 16.583 3.417 16.583ZM3.417 3.417Q3.417 3.417 3.417 3.417Q3.417 3.417 3.417 3.417V16.583Q3.417 16.583 3.417 16.583Q3.417 16.583 3.417 16.583Q3.417 16.583 3.417 16.583Q3.417 16.583 3.417 16.583V3.417Q3.417 3.417 3.417 3.417Q3.417 3.417 3.417 3.417Z"/></svg>', disabled: t, field: "fontFamily", values: a, defaultValue: s, valueChanged: n }) : null, ga = ({ disabled: e, toggleLayoutPanel: i }) => h(X, { title: "Toggle layers panel", disabled: e, onClick: i, icon: '<svg><path d="M10 17.646 2.438 11.75 3.875 10.646 10 15.396 16.125 10.646 17.562 11.75ZM10 13.188 2.5 7.354 10 1.521 17.5 7.354Z"/></svg>', className: "react-paint-editor-layout-button" }), va = ({ children: e }) => I("span", { className: "react-paint-editor-linearrow-option", "data-type": e, children: [h("span", { className: "react-paint-editor-linearrow-left" }), h("span", { className: "react-paint-editor-linearrow-right" })] }), Hi = ({ selectedSettings: e, setSelectedSettings: i, disabled: t = !1, values: a, defaultValue: s, valueChanged: n }) => a.length ? h(Xt, { selectedSettings: e, setSelectedSettings: i, CustomOption: va, title: "Flèches", icon: '<svg><path d="M6 17 2 13 6 9 7.062 10.062 4.875 12.25H17V13.75H4.875L7.062 15.938ZM14 11 12.938 9.938 15.125 7.75H3V6.25H15.125L12.938 4.062L14 3L18 7Z"/></svg>', disabled: t, field: "lineArrow", values: a, defaultValue: s, valueChanged: n }) : null, fa = ({ children: e }) => I("span", { className: "react-paint-editor-linetype-option", "data-type": e, children: [h("span", {}), h("span", {}), h("span", {}), h("span", {}), h("span", {}), h("span", {}), h("span", {})] }), Ti = ({ selectedSettings: e, setSelectedSettings: i, disabled: t = !1, values: a, defaultValue: s, valueChanged: n }) => a.length ? h(Xt, { selectedSettings: e, setSelectedSettings: i, CustomOption: fa, icon: '<svg><path d="M3 16V14.5H4.5V16ZM6.125 16V14.5H7.625V16ZM9.25 16V14.5H10.75V16ZM12.375 16V14.5H13.875V16ZM15.5 16V14.5H17V16ZM3 13V11.5H6.5V13ZM8.25 13V11.5H11.75V13ZM13.5 13V11.5H17V13ZM3 10V8.5H9.25V10ZM10.75 10V8.5H17V10ZM3 7V4H17V7Z"/></svg>', title: "Type de traits", disabled: t, field: "lineDash", values: a, defaultValue: s, valueChanged: n }) : null, it = ({ selectedSettings: e, setSelectedSettings: i, title: t = "Choisissez l'intervalle", icon: a, disabled: s = !1, field: n, value: o = 1, min: r = 1, max: l = 20, step: p = 1, unity: d = "", valueChanged: c }) => {
|
|
1184
|
+
const u = Math.round(o), [g] = W(se("settings_")), v = J(null);
|
|
1185
|
+
B(() => () => {
|
|
1084
1186
|
v.current && clearTimeout(v.current);
|
|
1085
1187
|
}, []);
|
|
1086
|
-
const
|
|
1087
|
-
return
|
|
1088
|
-
i((
|
|
1089
|
-
} }),
|
|
1090
|
-
const
|
|
1091
|
-
|
|
1092
|
-
|
|
1188
|
+
const w = e === g;
|
|
1189
|
+
return r === l ? null : I(pe, { children: [h(X, { selected: w, title: t, disabled: s, icon: a, onClick: () => {
|
|
1190
|
+
i((M) => M === g ? void 0 : g);
|
|
1191
|
+
} }), w && h(et, { title: t, alignment: "left", fitContainer: !0, children: h("div", { children: I("label", { className: "react-paint-editor-rangefield", children: [h("input", { type: "range", min: r, max: l, step: p, value: o, onChange: (M) => {
|
|
1192
|
+
const S = +M.target.value;
|
|
1193
|
+
c(n, Number.isNaN(S) ? M.target.value : S, !1), v.current && clearTimeout(v.current), v.current = setTimeout(() => {
|
|
1194
|
+
c(n, Number.isNaN(S) ? M.target.value : S, !0);
|
|
1093
1195
|
}, 1e3);
|
|
1094
|
-
} }),
|
|
1095
|
-
},
|
|
1096
|
-
const [
|
|
1097
|
-
return s.length !== 2 ? null :
|
|
1098
|
-
e((l) => l ===
|
|
1196
|
+
} }), I("span", { children: [u, d] })] }) }) })] });
|
|
1197
|
+
}, Ai = ({ selectedSettings: e, setSelectedSettings: i, disabled: t = !1, min: a, max: s, step: n, value: o, valueChanged: r }) => a === s ? null : h(it, { selectedSettings: e, setSelectedSettings: i, icon: Rt, title: "Nombre de points", disabled: t, field: "pointsCount", min: a, max: s, step: n, unity: "", value: o, valueChanged: r }), ct = ({ setSelectedSettings: e, disabled: i = !1, field: t, icon: a, values: s, value: n = !1, valueChanged: o }) => {
|
|
1198
|
+
const [r] = W(se("settings_"));
|
|
1199
|
+
return s.length !== 2 ? null : h(X, { onClick: () => {
|
|
1200
|
+
e((l) => l === r ? void 0 : r), o(t, !n);
|
|
1099
1201
|
}, selected: n, disabled: i, icon: a });
|
|
1100
|
-
},
|
|
1101
|
-
const [
|
|
1102
|
-
|
|
1103
|
-
},
|
|
1104
|
-
|
|
1105
|
-
},
|
|
1106
|
-
if (
|
|
1107
|
-
if (
|
|
1202
|
+
}, Ht = ({ activeTool: e, selectedShape: i, selectedShapeTool: t, disabled: a, selectedSettings: s, setSelectedSettings: n, handleShapeStyleChange: o, handlePolygonLinesCount: r, handleShapeFontFamilyChange: l }) => i ? h(pe, { children: t && I(pe, { children: ["strokeColor" in t.settings && h(dt, { selectedSettings: s, setSelectedSettings: n, title: "Couleur du trait", mode: "stroke", disabled: a, field: "strokeColor", value: i.style?.strokeColor, valueChanged: o, values: t.settings.strokeColor.values }), "fillColor" in t.settings && h(dt, { selectedSettings: s, setSelectedSettings: n, title: "Couleur de fond", disabled: a, field: "fillColor", value: i.style?.fillColor, valueChanged: o, values: t.settings.fillColor.values }), "lineWidth" in t.settings && h(it, { selectedSettings: s, setSelectedSettings: n, title: "Epaisseur du trait", icon: qt, disabled: a, field: "lineWidth", value: i.style?.lineWidth, valueChanged: o, unity: "px", min: t.settings.lineWidth.min, max: t.settings.lineWidth.max, step: t.settings.lineWidth.step }), "lineDash" in t.settings && h(Ti, { selectedSettings: s, setSelectedSettings: n, disabled: a, defaultValue: i.style?.lineDash, valueChanged: o, values: t.settings.lineDash.values }), "lineArrow" in t.settings && h(Hi, { selectedSettings: s, setSelectedSettings: n, disabled: a, defaultValue: i.style?.lineArrow, valueChanged: o, values: t.settings.lineArrow.values }), "pointsCount" in t.settings && h(Ai, { selectedSettings: s, setSelectedSettings: n, disabled: a, valueChanged: r, min: t.settings.pointsCount.min, max: t.settings.pointsCount.max, step: t.settings.pointsCount.step, value: i.style?.pointsCount }), "fontFamily" in t.settings && h(Pi, { selectedSettings: s, setSelectedSettings: n, disabled: a, valueChanged: l, values: t.settings.fontFamily.values, defaultValue: i.style?.fontFamily }), "fontBold" in t.settings && h(ct, { setSelectedSettings: n, disabled: a, field: "fontBold", icon: jt, valueChanged: l, values: t.settings.fontBold.values, value: i.style?.fontBold }), "fontItalic" in t.settings && h(ct, { setSelectedSettings: n, disabled: a, field: "fontItalic", icon: _t, valueChanged: l, values: t.settings.fontItalic.values, value: i.style?.fontItalic }), "opacity" in t.settings && h(it, { selectedSettings: s, setSelectedSettings: n, title: "Opacité", icon: Yt, min: t.settings.opacity.min, max: t.settings.opacity.max, step: t.settings.opacity.step, unity: "%", disabled: a, field: "opacity", value: i.style?.opacity ?? 100, valueChanged: o })] }) }) : "settings" in e ? I(pe, { children: ["strokeColor" in e.settings && h(dt, { selectedSettings: s, setSelectedSettings: n, title: "Couleur du trait", mode: "stroke", disabled: a, field: "strokeColor", value: e.settings.strokeColor.default, valueChanged: o, values: e.settings.strokeColor.values }), "fillColor" in e.settings && h(dt, { selectedSettings: s, setSelectedSettings: n, title: "Couleur de fond", disabled: a, field: "fillColor", value: e.settings.fillColor.default, valueChanged: o, values: e.settings.fillColor.values }), "lineWidth" in e.settings && h(it, { selectedSettings: s, setSelectedSettings: n, title: "Epaisseur du trait", disabled: a, field: "lineWidth", icon: qt, value: e.settings.lineWidth.default, valueChanged: o, unity: "px", min: e.settings.lineWidth.min, max: e.settings.lineWidth.max, step: e.settings.lineWidth.step }), "lineDash" in e.settings && h(Ti, { selectedSettings: s, setSelectedSettings: n, disabled: a, defaultValue: e.settings.lineDash.default, valueChanged: o, values: e.settings.lineDash.values }), "lineArrow" in e.settings && h(Hi, { selectedSettings: s, setSelectedSettings: n, disabled: a, defaultValue: e.settings.lineArrow.default, valueChanged: o, values: e.settings.lineArrow.values }), "pointsCount" in e.settings && h(Ai, { selectedSettings: s, setSelectedSettings: n, disabled: a, valueChanged: r, min: e.settings.pointsCount.min, max: e.settings.pointsCount.max, step: e.settings.pointsCount.step, value: e.settings.pointsCount.default }), "fontFamily" in e.settings && h(Pi, { selectedSettings: s, setSelectedSettings: n, disabled: a, valueChanged: l, values: e.settings.fontFamily.values, defaultValue: e.settings.fontFamily.default }), "fontBold" in e.settings && h(ct, { setSelectedSettings: n, disabled: a, field: "fontBold", icon: jt, valueChanged: l, values: e.settings.fontBold.values, value: e.settings.fontBold.default }), "fontItalic" in e.settings && h(ct, { setSelectedSettings: n, disabled: a, field: "fontItalic", icon: _t, valueChanged: l, values: e.settings.fontItalic.values, value: e.settings.fontItalic.default }), "opacity" in e.settings && h(it, { selectedSettings: s, setSelectedSettings: n, title: "Opacité", icon: Yt, min: e.settings.opacity.min, max: e.settings.opacity.max, step: e.settings.opacity.step, unity: "%", disabled: a, field: "opacity", value: e.settings.opacity.default, valueChanged: o })] }) : null, ma = ({ width: e, disabled: i = !1, availableTools: t, updateToolSettings: a, layersManipulation: s, toggleLayoutPanel: n, activeTool: o, selectedShape: r, canvas: l, settings: p, updateShape: d, removeShape: c }) => {
|
|
1203
|
+
const [u, g] = W(void 0), [v, w] = W(!1), M = () => {
|
|
1204
|
+
w((A) => !A);
|
|
1205
|
+
}, S = r ? t.find((A) => A.id === r.toolId) || t.find((A) => A.type === r.type) : void 0, L = (S ? Object.keys(S.settings).length + 1 : "settings" in o ? Object.keys(o.settings).length : 0) + (s ? 1 : 0), b = e < 40 * L, k = (A, H, C = !0) => {
|
|
1206
|
+
r ? (d(nt(re(["style", A], H, r), p), C), S && a(S.id, A, H)) : a(o.id, A, H);
|
|
1207
|
+
}, P = (A, H) => {
|
|
1208
|
+
if (r) {
|
|
1209
|
+
if (r.type !== "text")
|
|
1108
1210
|
return;
|
|
1109
|
-
const
|
|
1110
|
-
if (!
|
|
1211
|
+
const C = l?.getContext("2d");
|
|
1212
|
+
if (!C)
|
|
1111
1213
|
return;
|
|
1112
|
-
const
|
|
1113
|
-
d(
|
|
1214
|
+
const V = re(["style", A], H, r), z = Ut(C, V.value, V.width, V.style?.fontBold ?? !1, V.style?.fontItalic ?? !1, V.style?.fontFamily), y = nt({ ...V, fontSize: z, height: z * V.value.length }, p);
|
|
1215
|
+
d(y, !0), S && a(S.id, A, H);
|
|
1114
1216
|
} else
|
|
1115
|
-
a(
|
|
1116
|
-
},
|
|
1117
|
-
if (
|
|
1118
|
-
if (
|
|
1217
|
+
a(o.id, A, H);
|
|
1218
|
+
}, E = (A, H) => {
|
|
1219
|
+
if (r) {
|
|
1220
|
+
if (r.type !== "polygon" && r.type !== "curve")
|
|
1119
1221
|
return;
|
|
1120
|
-
d(
|
|
1121
|
-
const
|
|
1122
|
-
if (
|
|
1123
|
-
return
|
|
1124
|
-
if (
|
|
1125
|
-
const
|
|
1126
|
-
return
|
|
1222
|
+
d(r.type === "polygon" ? ((C, V, z) => {
|
|
1223
|
+
const y = C.points.length;
|
|
1224
|
+
if (y === V)
|
|
1225
|
+
return C;
|
|
1226
|
+
if (y > V) {
|
|
1227
|
+
const Z = C.points.slice(0, V);
|
|
1228
|
+
return _e({ ...C, points: Z, style: { ...C.style, pointsCount: Z.length } }, z);
|
|
1127
1229
|
}
|
|
1128
|
-
const
|
|
1129
|
-
return
|
|
1130
|
-
})(
|
|
1131
|
-
const
|
|
1132
|
-
if (
|
|
1133
|
-
return
|
|
1134
|
-
if (
|
|
1135
|
-
const
|
|
1136
|
-
return
|
|
1230
|
+
const F = V - y, x = new Array(F).fill(void 0).map((Z, f) => [C.points[0][0] + (C.points[1][0] - C.points[0][0]) * (f + 1) / (F + 1), C.points[0][1] + (C.points[1][1] - C.points[0][1]) * (f + 1) / (F + 1)]), T = [C.points[0], ...x, ...C.points.slice(1, C.points.length)];
|
|
1231
|
+
return _e({ ...C, points: T, style: { ...C.style, pointsCount: T.length } }, z);
|
|
1232
|
+
})(r, H, p) : ((C, V, z) => {
|
|
1233
|
+
const y = C.points.length;
|
|
1234
|
+
if (y === V)
|
|
1235
|
+
return C;
|
|
1236
|
+
if (y > V) {
|
|
1237
|
+
const Z = C.points.slice(0, V);
|
|
1238
|
+
return qe({ ...C, points: Z, style: { ...C.style, pointsCount: Z.length } }, z);
|
|
1137
1239
|
}
|
|
1138
|
-
const
|
|
1139
|
-
return
|
|
1140
|
-
})(
|
|
1240
|
+
const F = V - y, x = new Array(F).fill(void 0).map((Z, f) => [C.points[0][0] + (C.points[1][0] - C.points[0][0]) * (f + 1) / (F + 1), C.points[0][1] + (C.points[1][1] - C.points[0][1]) * (f + 1) / (F + 1)]), T = [C.points[0], ...x, ...C.points.slice(1, C.points.length)];
|
|
1241
|
+
return qe({ ...C, points: T, style: { ...C.style, pointsCount: T.length } }, z);
|
|
1242
|
+
})(r, H, p), !0), S && a(S.id, A, H);
|
|
1141
1243
|
} else
|
|
1142
|
-
a(
|
|
1244
|
+
a(o.id, A, H);
|
|
1143
1245
|
};
|
|
1144
|
-
return
|
|
1145
|
-
},
|
|
1146
|
-
const
|
|
1147
|
-
return
|
|
1148
|
-
|
|
1149
|
-
}, onChange: (
|
|
1150
|
-
const l =
|
|
1246
|
+
return I(pe, { children: [I("div", { className: "react-paint-editor-settings-bar", children: [I("div", { className: "react-paint-editor-settings-shrinkable", children: [b && L > 2 && h(X, { disabled: i, onClick: M, title: "Toggle settings", icon: '<svg><path d="M2.5 15.833V14.083H7.667V15.833ZM2.5 5.917V4.167H10.771V5.917ZM9.208 17.5V12.438H10.958V14.083H17.5V15.833H10.958V17.5ZM5.917 12.542V10.875H2.5V9.125H5.917V7.479H7.667V12.542ZM9.208 10.875V9.125H17.5V10.875ZM12.333 7.562V2.5H14.083V4.167H17.5V5.917H14.083V7.562Z"/></svg>' }), r ? h(pe, { children: S && I(pe, { children: [!b && h(Ht, { activeTool: o, selectedShape: r, selectedShapeTool: S, disabled: i, selectedSettings: u, setSelectedSettings: g, handleShapeStyleChange: k, handlePolygonLinesCount: E, handleShapeFontFamilyChange: P }), o.type === "selection" && h(ha, { disabled: i, selectedShape: r, removeShape: c })] }) }) : !b && h(Ht, { activeTool: o, selectedShape: r, selectedShapeTool: S, disabled: i, selectedSettings: u, setSelectedSettings: g, handleShapeStyleChange: k, handlePolygonLinesCount: E, handleShapeFontFamilyChange: P })] }), h("div", { className: "react-paint-editor-settings-separator" }), s && h(ga, { disabled: i, toggleLayoutPanel: n })] }), v && h(Bt, { className: "react-paint-editor-settings-modal", onClose: M, position: "bottom", children: h(Ht, { activeTool: o, selectedShape: r, selectedShapeTool: S, disabled: i, selectedSettings: u, setSelectedSettings: g, handleShapeStyleChange: k, handlePolygonLinesCount: E, handleShapeFontFamilyChange: P }) })] });
|
|
1247
|
+
}, Zi = ({ disabled: e = !1, withText: i = !1, loadFile: t, type: a, img: s, accept: n }) => {
|
|
1248
|
+
const o = J(null);
|
|
1249
|
+
return h(X, { ref: o, type: "file", onClick: (r) => {
|
|
1250
|
+
r.stopPropagation(), o.current && (o.current.value = "");
|
|
1251
|
+
}, onChange: (r) => {
|
|
1252
|
+
const l = r.target.files?.item(0);
|
|
1151
1253
|
l && t(l);
|
|
1152
|
-
}, accept: n, title: a.label ?? a.type, icon: s, children: i ? a.label : void 0
|
|
1153
|
-
},
|
|
1254
|
+
}, accept: n, title: a.label ?? a.type, icon: s, disabled: e, children: i ? a.label : void 0 });
|
|
1255
|
+
}, he = ({ type: e, img: i, isActive: t, withText: a = !1, disabled: s = !1, setActive: n }) => h(X, { disabled: s, selected: t, onClick: () => {
|
|
1154
1256
|
n(e);
|
|
1155
|
-
}, title: e.label ?? e.type, icon: i, children: a ? e.label : void 0 }),
|
|
1156
|
-
const [
|
|
1157
|
-
return
|
|
1158
|
-
if (!
|
|
1257
|
+
}, title: e.label ?? e.type, icon: i, children: a ? e.label : void 0 }), ya = ({ activeTool: e, withActionsInMenu: i, hasActionToUndo: t = !1, hasActionToRedo: a = !1, hasActionToClear: s = !1, undoAction: n, redoAction: o, clearCanvas: r, alignment: l, group: p, vertical: d = !1, disabled: c = !1, withLoadAndSave: u, withExport: g, addPicture: v, loadFile: w, togglePictureUrlModal: M, saveFile: S, exportCanvasInFile: L, withUploadPicture: b, withUrlPicture: k }) => {
|
|
1258
|
+
const [P, E] = W(!1), [, A] = Fi(), H = p?.tools?.some((V) => V === e.type), C = (H ? e.icon : p.img) ?? p.title;
|
|
1259
|
+
return B(() => {
|
|
1260
|
+
if (!P)
|
|
1159
1261
|
return;
|
|
1160
|
-
const
|
|
1161
|
-
|
|
1262
|
+
const V = () => {
|
|
1263
|
+
E(!1);
|
|
1162
1264
|
};
|
|
1163
|
-
return document.addEventListener("click",
|
|
1164
|
-
document.removeEventListener("click",
|
|
1265
|
+
return document.addEventListener("click", V), () => {
|
|
1266
|
+
document.removeEventListener("click", V);
|
|
1165
1267
|
};
|
|
1166
|
-
}, [
|
|
1167
|
-
|
|
1168
|
-
|
|
1268
|
+
}, [P]), i || b || k || u || g ? I("div", { className: "react-paint-editor-toolbox-relative", children: [h(X, { selected: H, title: p.title, disabled: c, onClick: () => {
|
|
1269
|
+
A(() => {
|
|
1270
|
+
E(!0);
|
|
1169
1271
|
});
|
|
1170
|
-
}, icon:
|
|
1171
|
-
|
|
1172
|
-
}, img:
|
|
1173
|
-
|
|
1174
|
-
}, img:
|
|
1175
|
-
},
|
|
1176
|
-
const t =
|
|
1177
|
-
return
|
|
1272
|
+
}, icon: C }), P && h(et, { alignment: l, position: "top", children: I("div", { className: "react-paint-editor-toolbox-panel-content", "data-vertical": +d, children: [i && I(pe, { children: [h(he, { withText: !0, type: Xe, disabled: c || !t, img: Xe.icon, isActive: e.id === Xe.id, setActive: n }), h(he, { withText: !0, type: Ye, disabled: c || !a, img: Ye.icon, isActive: e.id === Ye.id, setActive: o }), h(he, { withText: !0, type: je, disabled: c || !s, img: je.icon, isActive: e.id === je.id, setActive: r }), (b || k || u) && h("hr", {})] }), b && h(Zi, { withText: !0, type: ii, disabled: c, loadFile: async (V) => {
|
|
1273
|
+
E(!1), await v(V);
|
|
1274
|
+
}, img: ii.icon, accept: "image/png, image/gif, image/jpeg, image/svg+xml" }), k && h(X, { disabled: c, selected: !1, onClick: M, title: "Add picture from URL", icon: '<svg><path d="M9.188 16.542V14.938Q8.5 14.938 8.021 14.458Q7.542 13.979 7.542 13.292V12.458L3.583 8.5Q3.5 8.875 3.458 9.25Q3.417 9.625 3.417 10Q3.417 12.5 5.062 14.365Q6.708 16.229 9.188 16.542ZM14.854 14.438Q15.708 13.521 16.146 12.385Q16.583 11.25 16.583 10Q16.583 7.979 15.469 6.313Q14.354 4.646 12.479 3.917V4.229Q12.479 4.917 12 5.396Q11.521 5.875 10.833 5.875H9.188V7.521Q9.188 7.875 8.948 8.115Q8.708 8.354 8.354 8.354H6.708V10H11.646Q12 10 12.24 10.229Q12.479 10.458 12.479 10.812V13.292H13.292Q13.833 13.292 14.26 13.604Q14.688 13.917 14.854 14.438ZM10 18.333Q8.271 18.333 6.75 17.677Q5.229 17.021 4.104 15.896Q2.979 14.771 2.323 13.25Q1.667 11.729 1.667 10Q1.667 8.271 2.323 6.75Q2.979 5.229 4.104 4.104Q5.229 2.979 6.75 2.323Q8.271 1.667 10 1.667Q11.729 1.667 13.25 2.323Q14.771 2.979 15.896 4.104Q17.021 5.229 17.677 6.75Q18.333 8.271 18.333 10Q18.333 11.729 17.677 13.25Q17.021 14.771 15.896 15.896Q14.771 17.021 13.25 17.677Q11.729 18.333 10 18.333Z"/></svg>', children: "Add picture from URL" }), (b || k) && u && h("hr", {}), u && I(pe, { children: [h(Zi, { withText: !0, type: ti, disabled: c, loadFile: (V) => {
|
|
1275
|
+
E(!1), w(V);
|
|
1276
|
+
}, img: ti.icon, accept: "application/JSON" }), h(he, { withText: !0, disabled: c, type: kt, img: kt.icon, isActive: e.id === kt.id, setActive: S })] }), g && h(he, { withText: !0, disabled: c, type: Mt, img: Mt.icon, isActive: e.id === Mt.id, setActive: L })] }) })] }) : null;
|
|
1277
|
+
}, Qa = ({ togglePictureUrlModal: e, addPicture: i }) => {
|
|
1278
|
+
const t = J(null);
|
|
1279
|
+
return B(() => {
|
|
1178
1280
|
t.current && t.current.focus();
|
|
1179
|
-
}, []),
|
|
1281
|
+
}, []), h(Bt, { className: "react-paint-editor-toolbox-pictureinput-modal", onClose: e, children: I("form", { onSubmit: async (a) => {
|
|
1180
1282
|
a.preventDefault();
|
|
1181
1283
|
const s = t.current?.value;
|
|
1182
1284
|
s && (await i(s), e());
|
|
1183
|
-
}, children: [
|
|
1184
|
-
},
|
|
1185
|
-
const n =
|
|
1285
|
+
}, children: [I("label", { children: ["URL ", h("input", { type: "text", ref: t })] }), h(X, { onClick: e, children: "Annuler" }), h(X, { type: "submit", selected: !0, children: "Ajouter" })] }) });
|
|
1286
|
+
}, Sa = ({ activeTool: e, alignment: i, group: t, disabled: a = !1, setActiveToolFromId: s }) => {
|
|
1287
|
+
const n = J(null), [o, r] = W(!1), [, l] = Fi(), [p, d] = W(void 0), c = (v) => {
|
|
1186
1288
|
d(v), s(v.id);
|
|
1187
1289
|
};
|
|
1188
|
-
if (
|
|
1189
|
-
if (!
|
|
1290
|
+
if (B(() => {
|
|
1291
|
+
if (!o)
|
|
1190
1292
|
return;
|
|
1191
|
-
const v = (
|
|
1192
|
-
!
|
|
1293
|
+
const v = (w) => {
|
|
1294
|
+
!n1(w, n.current) && r(!1);
|
|
1193
1295
|
};
|
|
1194
1296
|
return document.addEventListener("mousedown", v, { passive: !1 }), document.addEventListener("touchstart", v, { passive: !1 }), () => {
|
|
1195
1297
|
document.removeEventListener("mousedown", v), document.removeEventListener("touchstart", v);
|
|
1196
1298
|
};
|
|
1197
|
-
}, [
|
|
1198
|
-
return
|
|
1299
|
+
}, [o]), "type" in t)
|
|
1300
|
+
return h(he, { disabled: a, type: t, img: t.icon, isActive: e.id === t.id, setActive: c });
|
|
1199
1301
|
if (!t.toolsType.length)
|
|
1200
1302
|
return null;
|
|
1201
1303
|
if (t.toolsType?.length === 1)
|
|
1202
|
-
return
|
|
1203
|
-
const
|
|
1204
|
-
return
|
|
1205
|
-
|
|
1206
|
-
|
|
1304
|
+
return h(he, { disabled: a, type: t.toolsType[0], img: t.toolsType[0].icon, isActive: e.id === t.toolsType[0].id, setActive: c });
|
|
1305
|
+
const u = t?.toolsType.find((v) => v.type === e.type) !== void 0, g = (p ? p.icon : t.toolsType?.[0]?.icon) ?? t.title;
|
|
1306
|
+
return I("div", { className: "react-paint-editor-toolbargroup-relative", children: [h(X, { selected: u, title: t.title, disabled: a, onClick: () => {
|
|
1307
|
+
p ? s(p.id) : t.toolsType?.[0] && c(t.toolsType[0]), l(() => {
|
|
1308
|
+
r(!0);
|
|
1207
1309
|
});
|
|
1208
|
-
}, icon: g }),
|
|
1209
|
-
},
|
|
1210
|
-
const
|
|
1211
|
-
const
|
|
1212
|
-
if (typeof
|
|
1213
|
-
return
|
|
1214
|
-
const
|
|
1215
|
-
return
|
|
1310
|
+
}, icon: g }), o && h(et, { alignment: i, position: "top", children: h("div", { className: "react-paint-editor-toolbargroup-panel-content", "data-vertical": +t.vertical, ref: n, children: t.toolsType.map((v, w) => h(he, { disabled: a, type: v, img: v.icon, isActive: e.id === v.id, setActive: c }, v.id)) }) })] });
|
|
1311
|
+
}, ba = [{ title: "brush", toolsType: ["brush"], vertical: !1 }, { title: "lines", toolsType: ["line", "curve", "polygon"], vertical: !1 }, { title: "shapes", toolsType: ["rect", "square", "circle", "ellipse"], vertical: !1 }, "text"], Ca = ({ width: e, disabled: i = !1, activeTool: t, hasActionToUndo: a = !1, hasActionToRedo: s = !1, hasActionToClear: n = !1, withLoadAndSave: o, withExport: r, clearCanvas: l, setActiveTool: p, undoAction: d, redoAction: c, addPicture: u, loadFile: g, saveFile: v, exportCanvasInFile: w, availableTools: M, withUrlPicture: S, withUploadPicture: L }) => {
|
|
1312
|
+
const b = ((x, T) => {
|
|
1313
|
+
const Z = T.flatMap((f) => {
|
|
1314
|
+
if (typeof f != "object")
|
|
1315
|
+
return x.filter((Q) => Q.type === f);
|
|
1316
|
+
const m = x.filter((Q) => f.toolsType.includes(Q.type));
|
|
1317
|
+
return m ? { ...f, toolsType: m } : null;
|
|
1216
1318
|
});
|
|
1217
|
-
return
|
|
1218
|
-
})(
|
|
1219
|
-
|
|
1220
|
-
},
|
|
1221
|
-
|
|
1222
|
-
},
|
|
1223
|
-
|
|
1224
|
-
},
|
|
1225
|
-
return
|
|
1226
|
-
|
|
1227
|
-
}, exportCanvasInFile:
|
|
1228
|
-
|
|
1229
|
-
}, addPicture:
|
|
1230
|
-
},
|
|
1231
|
-
const
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
Ze(ke), xt();
|
|
1252
|
-
}, [Ze, xt]), Ni = z(() => {
|
|
1253
|
-
Ze(ke), Mt();
|
|
1254
|
-
}, [Ze, Mt]), ot = z((T = [], $ = !1) => {
|
|
1255
|
-
Gt(T, $), Ze(ke), Le([0, 0]);
|
|
1256
|
-
}, [Ze, Gt]), Fe = z(async (T, $ = !0) => {
|
|
1257
|
-
const pe = await (async (q, G) => {
|
|
1258
|
-
if (!q.shapes)
|
|
1259
|
-
return [];
|
|
1260
|
-
const ve = [], Je = ft(q.shapes.map((de) => {
|
|
1261
|
-
if (!de || !U1.includes(de.type))
|
|
1262
|
-
return null;
|
|
1263
|
-
if (de.type === "picture") {
|
|
1264
|
-
const xe = new Image(), Oi = new Promise((kt, Ui) => {
|
|
1265
|
-
xe.onload = () => {
|
|
1266
|
-
URL.revokeObjectURL(xe.src), kt();
|
|
1267
|
-
}, xe.onerror = () => {
|
|
1268
|
-
Ui(new Error("Some images could not be loaded"));
|
|
1269
|
-
};
|
|
1270
|
-
});
|
|
1271
|
-
return ve.push(Oi), de.src.startsWith("http") ? fi(de.src).then((kt) => {
|
|
1272
|
-
xe.src = kt;
|
|
1273
|
-
}).catch(() => {
|
|
1274
|
-
xe.src = "";
|
|
1275
|
-
}) : xe.src = de.src, m1({ ...de, img: xe }, G);
|
|
1276
|
-
}
|
|
1277
|
-
return m1(de, G);
|
|
1278
|
-
}));
|
|
1279
|
-
return await Promise.all(ve), Je;
|
|
1280
|
-
})(T, ue);
|
|
1281
|
-
ot(pe, $);
|
|
1282
|
-
}, [ot, ue]), Di = z(() => {
|
|
1283
|
-
typeof k != "string" ? Fe({ shapes: k() }, !1) : k === "defaultShapes" && t !== void 0 ? Fe({ shapes: t }, !1) : ot();
|
|
1284
|
-
}, [ot, Fe, t, k]), Ge = z((T) => {
|
|
1285
|
-
Qe(ke), Pe(T);
|
|
1286
|
-
}, [Pe]), Ei = z((T) => {
|
|
1287
|
-
St(T), Ge(T);
|
|
1288
|
-
}, [St, Ge]), Ri = z(() => {
|
|
1289
|
-
se(!0);
|
|
1319
|
+
return Wt(Z);
|
|
1320
|
+
})(M, ba), k = e < 40 * (5 + b.length), P = e < 40 * (2 + b.length), [E, A] = W(!1), [H, C] = W(!1), V = () => {
|
|
1321
|
+
A((x) => !x);
|
|
1322
|
+
}, z = (x) => {
|
|
1323
|
+
p(x), A(!1);
|
|
1324
|
+
}, y = (x) => {
|
|
1325
|
+
z(M.find((T) => T.id === x) ?? t);
|
|
1326
|
+
}, F = M.find((x) => x.type === t.type) !== void 0;
|
|
1327
|
+
return I(pe, { children: [I("div", { className: "react-paint-editor-toolbar-toolbox", children: [I("div", { className: "react-paint-editor-toolbar-shrinkable", children: [h(he, { type: Ze, disabled: i, img: Ze.icon, isActive: t.id === Ze.id, setActive: z }), P ? h(X, { disabled: i, onClick: V, title: "Toggle tools", icon: '<svg><path d="M5.333 9.292 10.021 1.646 14.708 9.292ZM14.562 18.333Q13 18.333 11.896 17.229Q10.792 16.125 10.792 14.562Q10.792 13 11.896 11.896Q13 10.792 14.562 10.792Q16.125 10.792 17.229 11.896Q18.333 13 18.333 14.562Q18.333 16.125 17.229 17.229Q16.125 18.333 14.562 18.333ZM2.5 17.917V11.188H9.229V17.917ZM14.562 16.583Q15.438 16.583 16.01 16.01Q16.583 15.438 16.583 14.562Q16.583 13.688 16.01 13.115Q15.438 12.542 14.562 12.542Q13.688 12.542 13.115 13.115Q12.542 13.688 12.542 14.562Q12.542 15.438 13.115 16.01Q13.688 16.583 14.562 16.583ZM4.25 16.167H7.479V12.938H4.25ZM8.458 7.542H11.583L10.021 5ZM10.021 7.542ZM7.479 12.938ZM14.562 14.562Q14.562 14.562 14.562 14.562Q14.562 14.562 14.562 14.562Q14.562 14.562 14.562 14.562Q14.562 14.562 14.562 14.562Q14.562 14.562 14.562 14.562Q14.562 14.562 14.562 14.562Q14.562 14.562 14.562 14.562Q14.562 14.562 14.562 14.562Z"/></svg>', selected: F }) : b.map((x, T) => h(Sa, { disabled: i, activeTool: t, group: x, setActiveToolFromId: y }, "id" in x ? x.id : x.title))] }), !k && I(pe, { children: [h(he, { type: Xe, disabled: i || !a, img: Xe.icon, isActive: t.id === Xe.id, setActive: d }), h(he, { type: Ye, disabled: i || !s, img: Ye.icon, isActive: t.id === Ye.id, setActive: c }), h(he, { type: je, disabled: i || !n, img: je.icon, isActive: t.id === je.id, setActive: l })] }), h(ya, { withActionsInMenu: k, disabled: i, vertical: !0, alignment: "right", group: { title: "Menu", img: '<svg><path d="M2.5 15V13.25H17.5V15ZM2.5 10.875V9.125H17.5V10.875ZM2.5 6.75V5H17.5V6.75Z"/></svg>' }, activeTool: t, addPicture: u, loadFile: g, saveFile: v, togglePictureUrlModal: () => {
|
|
1328
|
+
C(!0);
|
|
1329
|
+
}, exportCanvasInFile: w, withUploadPicture: L, withUrlPicture: S, withLoadAndSave: o, withExport: r, hasActionToUndo: a, hasActionToRedo: s, hasActionToClear: n, undoAction: d, redoAction: c, clearCanvas: l })] }), E && h(Bt, { className: "react-paint-editor-toolbar-modal", onClose: V, children: M.map((x, T) => x.type === "picture" ? null : h(he, { disabled: i, type: x, img: x.icon, withText: !1, isActive: t.id === x.id, setActive: z }, x.id)) }), H && h(Qa, { togglePictureUrlModal: () => {
|
|
1330
|
+
C((x) => !x);
|
|
1331
|
+
}, addPicture: u })] });
|
|
1332
|
+
}, pt = { none: 0, small: 10, medium: 20, large: 40 }, wa = { toolbarBackgroundColor: "white", dividerColor: "#36418129", fontRadius: 8, fontDisabledColor: "#3641812b", fontDisabledBackgroundColor: "transparent", fontColor: "#364181", fontBackgroundColor: "transparent", fontSelectedColor: "white", fontSelectedBackgroundColor: "#364181", fontHoverColor: "#364181", fontHoverBackgroundColor: "#afd8d8" }, xa = () => {
|
|
1333
|
+
const e = J([]), [i, t] = W([]);
|
|
1334
|
+
return B(() => () => {
|
|
1335
|
+
for (const a of e.current)
|
|
1336
|
+
clearTimeout(a);
|
|
1337
|
+
}, []), { snackbarList: i, addSnackbar: ({ type: a = sa, duration: s = oa, text: n }) => {
|
|
1338
|
+
const o = { id: se("snackbar_"), duration: s, type: a, text: n };
|
|
1339
|
+
t((r) => [...r, o]), e.current = [...e.current, setTimeout(() => {
|
|
1340
|
+
return r = o.id, void t((l) => l.filter((p) => p.id !== r));
|
|
1341
|
+
var r;
|
|
1342
|
+
}, s)];
|
|
1343
|
+
} };
|
|
1344
|
+
}, Pa = ({ editorProps: e, className: i, style: t, options: a, children: s }) => {
|
|
1345
|
+
const { shapesRef: n, addPictureShape: o, moveShapes: r, toggleShapeVisibility: l, toggleShapeLock: p, canGoBackward: d, canGoForward: c, canClear: u, selectedShape: g, removeShape: v, updateShape: w, backwardShape: M, forwardShape: S, refs: L, width: b, height: k, canvasSize: P, selectTool: E, selectShape: A, activeTool: H, setActiveTool: C, setAvailableTools: V, isEditMode: z, isDisabled: y, availableTools: F, gridGap: x, setGridGap: T, loadFile: Z, exportPicture: f, exportData: m, clearCanvas: Q, settings: D, canvas: { canGrow: N, layersManipulation: Y, withExport: de, withLoadAndSave: $, withUploadPicture: U, withUrlPicture: oe } } = e, { toolbarBackgroundColor: ee, dividerColor: te, fontRadius: ve, fontDisabledColor: Me, fontDisabledBackgroundColor: ie, fontColor: j, fontBackgroundColor: Se, fontSelectedColor: Ee, fontSelectedBackgroundColor: ke, fontHoverColor: fe, fontHoverBackgroundColor: be } = { ...wa, ...a }, [De, ne] = W(!1), [Le, Ie] = W(!1), ce = x >= pt.large ? "large" : x >= pt.medium ? "medium" : x >= pt.small ? "small" : "none", { snackbarList: me, addSnackbar: ae } = xa(), Ve = R((q, ge, rt) => {
|
|
1346
|
+
V((Fe) => Fe.map((G) => G.id === q ? re(["settings", ge, "default"], rt, G) : G)), C((Fe) => Fe.id === q ? re(["settings", ge, "default"], rt, Fe) : Fe);
|
|
1347
|
+
}, [C, V]), Ue = R(() => {
|
|
1348
|
+
E(Ze), M();
|
|
1349
|
+
}, [E, M]), Pe = R(() => {
|
|
1350
|
+
E(Ze), S();
|
|
1351
|
+
}, [E, S]), Ge = R(() => {
|
|
1352
|
+
ne(!0);
|
|
1290
1353
|
try {
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
y1(T, "drawing.png"), se(!1);
|
|
1295
|
-
} catch (T) {
|
|
1296
|
-
T instanceof Error && we({ type: "error", text: "L'export a échoué" }), console.warn(T);
|
|
1354
|
+
f(), ne(!1);
|
|
1355
|
+
} catch (q) {
|
|
1356
|
+
q instanceof Error && ae({ type: "error", text: "L'export a échoué" }), console.warn(q);
|
|
1297
1357
|
} finally {
|
|
1298
|
-
|
|
1358
|
+
ne(!1);
|
|
1299
1359
|
}
|
|
1300
|
-
}, [
|
|
1301
|
-
|
|
1360
|
+
}, [f, ae]), ot = R(() => {
|
|
1361
|
+
ne(!0);
|
|
1302
1362
|
try {
|
|
1303
|
-
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
y1(T, "drawing.json"), se(!1);
|
|
1307
|
-
} catch (T) {
|
|
1308
|
-
T instanceof Error && we({ type: "error", text: "L'enregistrement a échoué" }), console.warn(T);
|
|
1363
|
+
m(), ne(!1);
|
|
1364
|
+
} catch (q) {
|
|
1365
|
+
q instanceof Error && ae({ type: "error", text: "L'enregistrement a échoué" }), console.warn(q);
|
|
1309
1366
|
} finally {
|
|
1310
|
-
|
|
1367
|
+
ne(!1);
|
|
1311
1368
|
}
|
|
1312
|
-
}, [
|
|
1313
|
-
|
|
1369
|
+
}, [m, ae]), bt = R(async (q) => {
|
|
1370
|
+
ne(!0);
|
|
1314
1371
|
try {
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
const de = Je.target?.result;
|
|
1319
|
-
if (!de)
|
|
1320
|
-
return G("Impossible de récupérer les données du fichier");
|
|
1321
|
-
const xe = JSON.parse(de);
|
|
1322
|
-
q(xe);
|
|
1323
|
-
}, ve.readAsText(pe);
|
|
1324
|
-
}))(T);
|
|
1325
|
-
await Fe($), we({ type: "success", text: "Fichier chargé !" });
|
|
1326
|
-
} catch ($) {
|
|
1327
|
-
$ instanceof Error && we({ type: "error", text: "Le chargement a échoué" }), console.warn($);
|
|
1372
|
+
await Z(q), ae({ type: "success", text: "Fichier chargé !" });
|
|
1373
|
+
} catch (ge) {
|
|
1374
|
+
ge instanceof Error && ae({ type: "error", text: "Le chargement a échoué" }), console.warn(ge);
|
|
1328
1375
|
} finally {
|
|
1329
|
-
|
|
1376
|
+
ne(!1);
|
|
1330
1377
|
}
|
|
1331
|
-
}, [
|
|
1332
|
-
|
|
1378
|
+
}, [Z, ae]), Ct = R(async (q) => {
|
|
1379
|
+
ne(!0);
|
|
1333
1380
|
try {
|
|
1334
|
-
const
|
|
1335
|
-
|
|
1336
|
-
} catch (
|
|
1337
|
-
|
|
1381
|
+
const ge = await o(q, b, k);
|
|
1382
|
+
A(ge);
|
|
1383
|
+
} catch (ge) {
|
|
1384
|
+
ge instanceof Error && ae({ type: "error", text: "Le chargement a échoué" }), console.warn(ge);
|
|
1338
1385
|
} finally {
|
|
1339
|
-
|
|
1386
|
+
ne(!1);
|
|
1340
1387
|
}
|
|
1341
|
-
}, [
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
}, [
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
const pe = $.current;
|
|
1348
|
-
if (!pe)
|
|
1349
|
-
return;
|
|
1350
|
-
const q = new ResizeObserver((G) => {
|
|
1351
|
-
const ve = G?.[0]?.borderBoxSize?.[0], { width: Je, height: de } = ve ? { width: ve.inlineSize, height: ve.blockSize } : G?.[0].contentRect ?? {};
|
|
1352
|
-
T(Je, de);
|
|
1353
|
-
});
|
|
1354
|
-
return q.observe(pe), () => {
|
|
1355
|
-
q.unobserve(pe);
|
|
1356
|
-
};
|
|
1357
|
-
}, [$, T]);
|
|
1358
|
-
})({ element: ge, onResized: $i }), O(() => {
|
|
1359
|
-
nt(T1(A, x || b));
|
|
1360
|
-
}, [A, x, b]), O(() => {
|
|
1361
|
-
Te || Pe(void 0);
|
|
1362
|
-
}, [Te, Pe]);
|
|
1363
|
-
const Jt = j(Fe);
|
|
1364
|
-
return Jt.current = Fe, O(() => {
|
|
1365
|
-
t !== void 0 && Jt.current({ shapes: t });
|
|
1366
|
-
}, [t]), N("div", { ref: ge, className: `${a}${le ? " react-paint-editor-layout-opened" : ""} react-paint-editor-app`, "data-grow": p, "data-shrink": g, style: { "--react-paint-editor-app-canvaswidth": `${e}px`, "--react-paint-editor-app-toolbar-bg": R, "--react-paint-editor-app-divider-color": F, "--react-paint-editor-app-font-radius": H, "--react-paint-editor-app-font-disabled-color": M, "--react-paint-editor-app-font-disabled-bg": P, "--react-paint-editor-app-font-color": L, "--react-paint-editor-app-font-bg": w, "--react-paint-editor-app-font-selected-color": D, "--react-paint-editor-app-font-selected-bg": f, "--react-paint-editor-app-font-hover-color": m, "--react-paint-editor-app-font-hover-bg": y, "--react-paint-editor-app-canvas-bg": C }, children: [E && u(en, { width: X.width, disabled: re, activeTool: Ce, clearCanvas: Di, setActiveTool: Ze, exportCanvasInFile: Ri, saveFile: Ii, loadFile: Wi, addPicture: zi, hasActionToUndo: Pi, hasActionToRedo: Hi, hasActionToClear: Ai, undoAction: Fi, redoAction: Ni, availableTools: Re, withExport: v, withLoadAndSave: S, withUploadPicture: x, withUrlPicture: b }), N("div", { className: "react-paint-editor-app-row", "data-grow": p, style: { "--react-paint-editor-app-row-zindex": Xi, "--react-paint-editor-app-row-width": X.width, "--react-paint-editor-app-row-aspectratio": `calc(${X.width} / ${X.height})` }, children: [u(Ra, { canGrow: p, disabled: re, isInsideComponent: Te, activeTool: Ce, setActiveTool: Qe, canvasOffsetStartPosition: bt, setCanvasOffsetStartPosition: at, shapes: Ve.current, addShape: St, updateSingleShape: wt, selectedShape: st, selectionFrame: bi, setSelectedShape: Pe, setSelectionFrame: wi, hoveredShape: Si, refreshHoveredShape: Mi, refreshSelectedShapes: xi, settings: ue, setCanvasOffset: Le, saveShapes: ki, ref: ae, canvasSize: X, selectionMode: je, setSelectionMode: qe, selectionColor: V, selectionWidth: U, isEditMode: E, isShiftPressed: yi, withFrameSelection: Q, withSkeleton: Z }), E && c && u(Oa, { gridFormat: ne, setGridFormat: ee, disabled: re, shapes: Ve.current, moveShapes: Ci, selectedShape: st, removeShape: Ct, selectShape: Ge, toggleShapeVisibility: Li, toggleShapeLock: Vi, isLayoutPanelShown: le })] }), E && N(oe, { children: [u(ja, { width: X.width, disabled: re, activeTool: Ce, availableTools: Re, selectedShape: st, settings: ue, removeShape: Ct, updateShape: wt, canvas: ae.current, layersManipulation: c, toggleLayoutPanel: () => {
|
|
1367
|
-
Se((T) => !T);
|
|
1368
|
-
}, updateToolSettings: Zi }), u(_i, { isLoading: _e }), u(Wa, { snackbarList: Ti })] })] });
|
|
1388
|
+
}, [o, A, ae, b, k]), Ce = `${i ? `${i} ` : ""}${Le ? "react-paint-editor-layout-opened " : ""}react-paint-editor-app`;
|
|
1389
|
+
return I("div", { ref: L.setEditor, className: Ce, style: { "--react-paint-editor-app-maxWidth": N ? "100%" : `${b}px`, "--react-paint-editor-app-toolbar-bg": ee, "--react-paint-editor-app-divider-color": te, "--react-paint-editor-app-font-radius": ve, "--react-paint-editor-app-font-disabled-color": Me, "--react-paint-editor-app-font-disabled-bg": ie, "--react-paint-editor-app-font-color": j, "--react-paint-editor-app-font-bg": Se, "--react-paint-editor-app-font-selected-color": Ee, "--react-paint-editor-app-font-selected-bg": ke, "--react-paint-editor-app-font-hover-color": fe, "--react-paint-editor-app-font-hover-bg": be, ...t }, children: [z && h(Ca, { width: P.width, disabled: y, activeTool: H, clearCanvas: Q, setActiveTool: E, exportCanvasInFile: Ge, saveFile: ot, loadFile: bt, addPicture: Ct, hasActionToUndo: d, hasActionToRedo: c, hasActionToClear: u, undoAction: Ue, redoAction: Pe, availableTools: F, withExport: de, withLoadAndSave: $, withUploadPicture: U, withUrlPicture: oe }), s, z && Y && h(pa, { gridFormat: ce, setGridFormat: (q) => {
|
|
1390
|
+
T(pt[q]);
|
|
1391
|
+
}, disabled: y, shapes: n.current, moveShapes: r, selectedShape: g, removeShape: v, selectShape: A, toggleShapeVisibility: l, toggleShapeLock: p, isLayoutPanelShown: Le }), z && I(pe, { children: [h(ma, { width: P.width, disabled: y, activeTool: H, availableTools: F, selectedShape: g, settings: D, removeShape: v, updateShape: w, canvas: L.canvas.current, layersManipulation: Y, toggleLayoutPanel: () => {
|
|
1392
|
+
Ie((q) => !q);
|
|
1393
|
+
}, updateToolSettings: Ve }), h(na, { isLoading: De }), h(la, { snackbarList: me })] })] });
|
|
1369
1394
|
};
|
|
1370
1395
|
export {
|
|
1371
|
-
|
|
1396
|
+
Va as Canvas,
|
|
1397
|
+
Pa as Editor,
|
|
1398
|
+
La as useReactPaint
|
|
1372
1399
|
};
|