@yorab/react-paint 0.10.1 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/README.md +173 -1
  2. package/dist/{components → canvas/components}/Canvas.d.ts +4 -4
  3. package/dist/{components/toolbox → canvas/components}/EditTextBox.d.ts +3 -4
  4. package/dist/canvas/constants/app.d.ts +44 -0
  5. package/dist/canvas/constants/grid.d.ts +1 -0
  6. package/dist/{constants → canvas/constants}/shapes.d.ts +1 -1
  7. package/dist/{hooks → canvas/hooks}/useComponent.d.ts +1 -1
  8. package/dist/{hooks → canvas/hooks}/useDrawableCanvas.d.ts +5 -5
  9. package/dist/{hooks → canvas/hooks}/useKeyboard.d.ts +2 -2
  10. package/dist/canvas/hooks/useReactPaint.d.ts +131 -0
  11. package/dist/{hooks → canvas/hooks}/useShapes.d.ts +5 -3
  12. package/dist/canvas/index.d.ts +13 -0
  13. package/dist/{utils → canvas/utils}/canvas.d.ts +2 -2
  14. package/dist/{utils → canvas/utils}/data.d.ts +4 -4
  15. package/dist/{utils → canvas/utils}/file.d.ts +3 -3
  16. package/dist/{utils → canvas/utils}/grid.d.ts +1 -1
  17. package/dist/{utils → canvas/utils}/intersect.d.ts +3 -3
  18. package/dist/{utils → canvas/utils}/selection/lineSelection.d.ts +2 -2
  19. package/dist/{utils → canvas/utils}/selection/rectSelection.d.ts +3 -3
  20. package/dist/canvas/utils/selection/selectionFrame.d.ts +3 -0
  21. package/dist/{utils → canvas/utils}/selection.d.ts +3 -3
  22. package/dist/{utils → canvas/utils}/shapes/brush.d.ts +4 -4
  23. package/dist/{utils → canvas/utils}/shapes/circle.d.ts +4 -4
  24. package/dist/{utils → canvas/utils}/shapes/curve.d.ts +5 -5
  25. package/dist/{utils → canvas/utils}/shapes/ellipse.d.ts +4 -4
  26. package/dist/{utils → canvas/utils}/shapes/index.d.ts +5 -5
  27. package/dist/{utils → canvas/utils}/shapes/line.d.ts +4 -4
  28. package/dist/{utils → canvas/utils}/shapes/path.d.ts +2 -2
  29. package/dist/{utils → canvas/utils}/shapes/picture.d.ts +3 -3
  30. package/dist/{utils → canvas/utils}/shapes/polygon.d.ts +4 -4
  31. package/dist/{utils → canvas/utils}/shapes/rectangle.d.ts +4 -4
  32. package/dist/{utils → canvas/utils}/shapes/text.d.ts +4 -4
  33. package/dist/{utils → canvas/utils}/shapes/triangle.d.ts +1 -1
  34. package/dist/{utils → canvas/utils}/string.d.ts +0 -1
  35. package/dist/canvas/utils/tools.d.ts +3 -0
  36. package/dist/{utils → canvas/utils}/transform.d.ts +3 -3
  37. package/dist/{utils → canvas/utils}/trigo.d.ts +4 -4
  38. package/dist/{types → common/types}/Shapes.d.ts +4 -4
  39. package/dist/common/utils/array.d.ts +1 -0
  40. package/dist/editor/components/common/Loading.d.ts +6 -0
  41. package/dist/{components → editor/components}/common/Modal.d.ts +2 -2
  42. package/dist/{components → editor/components}/common/Panel.d.ts +2 -2
  43. package/dist/{components → editor/components}/common/Snackbar.d.ts +2 -3
  44. package/dist/{components → editor/components}/settings/ColorField.d.ts +2 -2
  45. package/dist/{components → editor/components}/settings/DeleteButton.d.ts +2 -3
  46. package/dist/{components → editor/components}/settings/FontFamilyField.d.ts +2 -2
  47. package/dist/{components → editor/components}/settings/LayoutButton.d.ts +1 -2
  48. package/dist/{components → editor/components}/settings/Layouts.d.ts +5 -6
  49. package/dist/{components → editor/components}/settings/LineArrowField.d.ts +2 -2
  50. package/dist/{components → editor/components}/settings/LineTypeField.d.ts +3 -3
  51. package/dist/{components → editor/components}/settings/PointsNumberField.d.ts +2 -2
  52. package/dist/{components → editor/components}/settings/RangeField.d.ts +2 -2
  53. package/dist/{components → editor/components}/settings/SelectField.d.ts +2 -2
  54. package/dist/{components → editor/components}/settings/SettingsBar.d.ts +4 -5
  55. package/dist/{components → editor/components}/settings/ToggleField.d.ts +2 -2
  56. package/dist/{components → editor/components}/toolbox/LoadFileTool.d.ts +2 -3
  57. package/dist/{components → editor/components}/toolbox/MenuGroup.d.ts +3 -4
  58. package/dist/{components → editor/components}/toolbox/PictureUrlInput.d.ts +1 -2
  59. package/dist/{components → editor/components}/toolbox/Tool.d.ts +2 -3
  60. package/dist/{components → editor/components}/toolbox/Toolbar.d.ts +3 -4
  61. package/dist/{components → editor/components}/toolbox/ToolbarGroup.d.ts +2 -3
  62. package/dist/editor/constants/grid.d.ts +7 -0
  63. package/dist/editor/constants/options.d.ts +13 -0
  64. package/dist/{constants → editor/constants}/snackbar.d.ts +1 -1
  65. package/dist/{constants → editor/constants}/style.d.ts +0 -3
  66. package/dist/{constants → editor/constants}/tools.d.ts +1 -1
  67. package/dist/{hooks → editor/hooks}/useDrag.d.ts +2 -2
  68. package/dist/{hooks → editor/hooks}/useSnackbar.d.ts +3 -3
  69. package/dist/editor/index.d.ts +24 -0
  70. package/dist/{utils → editor/utils}/style.d.ts +1 -1
  71. package/dist/editor/utils/toolbar.d.ts +11 -0
  72. package/dist/index.d.ts +6 -0
  73. package/dist/react-paint.css +1 -1
  74. package/dist/react-paint.js +943 -916
  75. package/dist/react-paint.umd.cjs +1 -1
  76. package/package.json +61 -56
  77. package/dist/components/App.d.ts +0 -20
  78. package/dist/components/common/Loading.d.ts +0 -7
  79. package/dist/constants/app.d.ts +0 -58
  80. package/dist/utils/array.d.ts +0 -1
  81. package/dist/utils/selection/selectionFrame.d.ts +0 -3
  82. package/dist/utils/toolbar.d.ts +0 -13
  83. /package/dist/{constants → canvas/constants}/picture.d.ts +0 -0
  84. /package/dist/{hooks → canvas/hooks}/useDoubleClick.d.ts +0 -0
  85. /package/dist/{hooks → canvas/hooks}/useResizeObserver.d.ts +0 -0
  86. /package/dist/{types → common/types}/Mode.d.ts +0 -0
  87. /package/dist/{types → common/types}/react.d.ts +0 -0
  88. /package/dist/{types → common/types}/tools.d.ts +0 -0
  89. /package/dist/{types → common/types}/utils.d.ts +0 -0
  90. /package/dist/{utils → common/utils}/dom.d.ts +0 -0
  91. /package/dist/{utils → common/utils}/object.d.ts +0 -0
  92. /package/dist/{utils → common/utils}/util.d.ts +0 -0
  93. /package/dist/{components → editor/components}/common/Button.d.ts +0 -0
  94. /package/dist/{constants → editor/constants}/icons.d.ts +0 -0
  95. /package/dist/{constants → editor/constants}/loading.d.ts +0 -0
  96. /package/dist/{types → editor/types}/snackbar.d.ts +0 -0
@@ -1,68 +1,21 @@
1
- import { jsx as u, jsxs as N, Fragment as oe } from "react/jsx-runtime";
2
- import R1, { useState as I, useEffect as O, useRef as j, useCallback as z, useMemo as I1, useImperativeHandle as Bi, useTransition as W1 } from "react";
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 Fi, { useState as z, useEffect as U, useRef as ae, useCallback as W, useMemo as Di, useImperativeHandle as m1, useTransition as Ni } from "react";
2
+ import { jsx as p, jsxs as I, Fragment as ue } from "react/jsx-runtime";
3
+ const Ri = '<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>', It = '<svg><path d="M2.5 17.5V2.5H17.5V17.5ZM4.25 15.75H15.75V4.25H4.25ZM4.25 15.75V4.25V15.75Z"/></svg>', Wt = '<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>', zt = '<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>', Ii = '<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>', _t = '<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>', $t = '<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>', Wi = '<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>', $i = '<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>', qt = '<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>', Jt = '<svg><path d="M4.167 16.667V14.083H6.979L10.229 5.917H7.5V3.333H15.833V5.917H13.021L9.771 14.083H12.5V16.667Z"/></svg>', Kt = '<svg><path d="M3.021 16V15H17V16ZM3.021 13.5V12H17V13.5ZM3 10.5V8.5H16.979V10.5ZM3.021 7V4H17V7Z"/></svg>', ei = '<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>', ti = '<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>', de = ["transparent", "black", "white", "red", "green", "blue", "yellow"], De = [0, 1, 2], ii = [[1, 0], [1, 2], [4, 6]], ot = "serif", y1 = 2, Oi = 3, Q1 = 4, ee = "react-paint-", Ot = { type: "picture", id: `${ee}picture`, icon: $t, label: "Image", settings: { opacity: { min: 0, max: 100, step: 1, default: 100 } } }, Gi = { type: "brush", id: `${ee}brush`, icon: Ri, label: "Brosse", settings: { strokeColor: { values: de, default: "black" }, opacity: { min: 0, max: 100, step: 1, default: 100 }, lineWidth: { min: 6, max: 20, step: 2, default: 10 }, lineDash: { values: De, default: 0 } } }, Ui = { type: "line", id: `${ee}line`, icon: zi, label: "Ligne", settings: { strokeColor: { values: de, default: "black" }, opacity: { min: 0, max: 100, step: 1, default: 100 }, lineWidth: { min: 1, max: 20, step: 1, default: 1 }, lineDash: { values: De, default: 0 }, lineArrow: { values: [0, 1, 2, 3], default: 0 } } }, Bi = { type: "polygon", id: `${ee}polygon`, icon: zt, label: "Polygone", settings: { strokeColor: { values: de, default: "black" }, fillColor: { values: de, default: "black" }, opacity: { min: 0, max: 100, step: 1, default: 100 }, lineWidth: { min: 1, max: 20, step: 1, default: 1 }, lineDash: { values: De, default: 0 }, pointsCount: { min: 3, max: 10, step: 1, default: 3 } } }, Xi = { type: "curve", id: `${ee}curve`, icon: $i, label: "Courbe", settings: { strokeColor: { values: de, default: "black" }, fillColor: { values: de, default: "black" }, opacity: { min: 0, max: 100, step: 1, default: 100 }, lineWidth: { min: 1, max: 20, step: 1, default: 1 }, lineDash: { values: De, default: 0 }, pointsCount: { min: 3, max: 10, step: 1, default: 3 } } }, Yi = { type: "rect", id: `${ee}rect`, icon: It, label: "Rectangle", settings: { strokeColor: { values: de, default: "black" }, fillColor: { values: de, default: "transparent" }, opacity: { min: 0, max: 100, step: 1, default: 100 }, lineWidth: { min: 1, max: 20, step: 1, default: 1 }, lineDash: { values: De, default: 0 } } }, ji = { type: "square", id: `${ee}square`, icon: It, label: "Carré", settings: { strokeColor: { values: de, default: "black" }, fillColor: { values: de, default: "transparent" }, opacity: { min: 0, max: 100, step: 1, default: 100 }, lineWidth: { min: 1, max: 20, step: 1, default: 1 }, lineDash: { values: De, default: 0 } } }, _i = { type: "circle", id: `${ee}circle`, icon: Wt, label: "Cercle", settings: { strokeColor: { values: de, default: "black" }, fillColor: { values: de, default: "transparent" }, opacity: { min: 0, max: 100, step: 1, default: 100 }, lineWidth: { min: 1, max: 20, step: 1, default: 1 }, lineDash: { values: De, default: 0 } } }, qi = { type: "ellipse", id: `${ee}ellipse`, icon: Wt, label: "Ellipse", settings: { strokeColor: { values: de, default: "black" }, fillColor: { values: de, default: "transparent" }, opacity: { min: 0, max: 100, step: 1, default: 100 }, lineWidth: { min: 1, max: 20, step: 1, default: 1 }, lineDash: { values: De, default: 0 } } }, Ji = { type: "text", id: `${ee}text`, icon: Wi, label: "Texte", settings: { strokeColor: { values: de, default: "black" }, opacity: { min: 0, max: 100, step: 1, default: 100 }, fontFamily: { values: ["arial", "serif", "monospace"], default: ot }, fontBold: { values: [!1, !0], default: !1 }, fontItalic: { values: [!1, !0], default: !1 } } }, Te = { id: `${ee}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: `${ee}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: `${ee}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: `${ee}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: `${ee}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" }, ai = { id: `${ee}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: `${ee}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" }, ni = { id: `${ee}upload-picture`, type: "uploadpicture", icon: $t, label: "Upload picture" }, Ki = 2, e1 = "blue", He = 14, t1 = [[0, 0], [0.5, 0], [1, 0], [1, 0.5], [1, 1], [0.5, 1], [0, 1], [0, 0.5]], i1 = ["brush", "rect", "square", "line", "polygon", "circle", "curve", "ellipse", "picture", "text", "triangle"], a1 = "react-paint-canvas-drawcanvas", n1 = "react-paint-canvas-selectioncanvas", Pt = { layersManipulation: !0, grid: 0, canGrow: !1, canShrink: !0, withExport: !0, withLoadAndSave: !0, withUploadPicture: !0, withUrlPicture: !1, availableTools: [Gi, Ui, Bi, Xi, Yi, ji, _i, qi, Ot, Ji], clearCallback: "empty", brushAlgo: "simple", withFrameSelection: !1, withSkeleton: !1, selection: { canvasSelectionColor: e1, canvasSelectionWidth: Ki, canvasSelectionPadding: 0 } }, S1 = { canvasBackgroundColor: "white" }, s1 = (e, i) => !!(e.target instanceof Node && i) && i.contains(e.target), ut = 300, Et = (e, i) => {
51
4
  const t = { ...i };
52
5
  for (const a of e)
53
6
  delete t[a];
54
7
  return t;
55
- }, te = (e, i, t) => {
8
+ }, le = (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, r, o) => (n[r] = Et(n[r]) ? { ...n[r] } : Array.isArray(n[r]) ? [...n[r]] : n[r] === void 0 || n[r] === null ? {} : n[r], o === s.length - 1 && (n[r] = i), n[r]), a), a;
58
- }, Et = (e) => typeof e == "object" && !Array.isArray(e) && e !== null, be = (e, i, t) => {
59
- if (!Et(i) || !Et(t))
10
+ return s.reduce((n, o, r) => (n[o] = Ft(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
+ }, Ft = (e) => typeof e == "object" && !Array.isArray(e) && e !== null, we = (e, i, t) => {
12
+ if (!Ft(i) || !Ft(t))
60
13
  return t;
61
14
  const a = { ...i };
62
15
  for (const s in t)
63
- t.hasOwnProperty(s) && (a.hasOwnProperty(s) ? a[s] = e(a[s], t[s], s) ?? be(e, a[s], t[s]) : a[s] = t[s]);
16
+ Object.hasOwn(t, s) && (Object.hasOwn(a, s) ? a[s] = e(a[s], t[s], s) ?? we(e, a[s], t[s]) : a[s] = t[s]);
64
17
  return a;
65
- }, ci = (e, i) => {
18
+ }, o1 = (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) || !ci(e[s], i[s]))
27
+ if (!a.includes(s) || !o1(e[s], i[s]))
75
28
  return !1;
76
29
  return !0;
77
- }, Ht = {}, J = (e = "") => (Ht[e] || (Ht[e] = 0), `${e}${++Ht[e]}`), Be = (e, i) => {
30
+ }, Ht = {}, se = (e = "") => (Ht[e] || (Ht[e] = 0), `${e}${++Ht[e]}`), ft = (e) => e.filter((i) => i != null), r1 = (e) => {
31
+ e.lineCap = "round", e.lineJoin = "round";
32
+ }, ze = (e, i = {}) => {
33
+ const { lineCap: t = "round", fillColor: a = "transparent", opacity: s = 100, strokeColor: n = e1, lineWidth: o = Ki, 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 ? [] : [ii[r][0] * o, ii[r][1] * o]);
35
+ }, Gt = (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
+ }, gt = (e) => {
38
+ const i = new Path2D();
39
+ return i.rect(e.x, e.y, e.width, e.height), i;
40
+ }, vt = (e) => {
41
+ const i = new Path2D();
42
+ return i.arc(e.x, e.y, e.radius, 0, 2 * Math.PI), i;
43
+ }, Dt = (e) => {
44
+ const i = new Path2D();
45
+ return i.moveTo(...e.points[0]), i.lineTo(...e.points[1]), i;
46
+ }, b1 = (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
+ }, Ut = (e, i, t, a = !1) => {
50
+ const { borders: s } = Y(i, t);
51
+ return { border: gt(s), shapePath: e, anchors: [...i.points.map((n, o) => a && o > 0 && o < i.points.length - 1 ? gt({ x: n[0] - 7, y: n[1] - 7, width: He / t.canvasSize.scaleRatio, height: He / t.canvasSize.scaleRatio }) : vt({ 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(), r = n.map((h) => h[0]), o = n.map((h) => h[1]), l = Math.min(...r), c = Math.min(...o), d = new Path2D();
56
+ const n = a.points.flat(), o = n.map((h) => h[0]), r = n.map((h) => h[1]), l = Math.min(...o), c = Math.min(...r), d = new Path2D();
82
57
  for (const h of a.points) {
83
58
  if (!h.length)
84
59
  return;
85
60
  if (h.length === 1)
86
- d.rect(...fe(h[0], l, c, a.scaleX, a.scaleY), 1, 1);
87
- else if (d.moveTo(...fe(h[0], l, c, a.scaleX, a.scaleY)), s === "quadratic") {
88
- for (let p = 0; p < h.slice(1).length - 2; p++) {
89
- const g = fe(h[p], l, c, a.scaleX, a.scaleY), v = fe(h[p + 1], l, c, a.scaleX, a.scaleY), S = (g[0] + v[0]) / 2, x = (g[1] + v[1]) / 2;
90
- d.quadraticCurveTo(...g, S, x);
61
+ d.rect(...Se(h[0], l, c, a.scaleX, a.scaleY), 1, 1);
62
+ else if (d.moveTo(...Se(h[0], l, c, a.scaleX, a.scaleY)), s === "quadratic") {
63
+ for (let u = 0; u < h.slice(1).length - 2; u++) {
64
+ const g = Se(h[u], l, c, a.scaleX, a.scaleY), v = Se(h[u + 1], l, c, a.scaleX, a.scaleY), x = (g[0] + v[0]) / 2, M = (g[1] + v[1]) / 2;
65
+ d.quadraticCurveTo(...g, x, M);
91
66
  }
92
- d.quadraticCurveTo(...fe(h[h.length - 2], l, c, a.scaleX, a.scaleY), ...fe(h[h.length - 1], l, c, a.scaleX, a.scaleY));
67
+ d.quadraticCurveTo(...Se(h[h.length - 2], l, c, a.scaleX, a.scaleY), ...Se(h[h.length - 1], l, c, a.scaleX, a.scaleY));
93
68
  } else
94
- for (const p of h.slice(1))
95
- d.lineTo(...fe(p, l, c, a.scaleX, a.scaleY));
69
+ for (const u of h.slice(1))
70
+ d.lineTo(...Se(u, l, c, a.scaleX, a.scaleY));
96
71
  }
97
72
  return d;
98
73
  })(e, i);
99
- return { ...e, path: t, selection: Xe(t, e, i) };
100
- }, qi = Be, He = (e, i = 2) => Math.round(e * 10 ** i) / 10 ** i, fe = (e, i, t, a = 1, s = 1) => [i + (e[0] - i) * a, t + (e[1] - t) * s], W = (e, i, t = 0) => {
101
- if (!i.gridFormat)
102
- return He(e);
103
- const a = e + t, s = a >= 0 ? Ne[i.gridFormat - 1] : -Ne[i.gridFormat - 1];
74
+ return { ...e, path: t, selection: Ke(t, e, i) };
75
+ }, C1 = Je, Nt = (e) => 180 * e / Math.PI, l1 = (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
+ }, ve = ({ 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
+ }, si = (e) => (e + 2 * Math.PI) % (2 * Math.PI), oi = ({ targetVector: [e, i], radian: t = !0, originVector: a }) => {
82
+ const s = si(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 = si(s - r);
85
+ return t ? l : Nt(l);
86
+ }
87
+ return t ? s : Nt(s);
88
+ }, Fe = (e, i = 2) => Math.round(e * 10 ** i) / 10 ** i, Se = (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 Fe(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
- }, Gi = (e, i, t = 0) => i.gridFormat ? e + Math.PI / 18 / 2 - (e + Math.PI / 18 / 2) % (Math.PI / 18) : He(e, 3), Ji = (e, i, t, a, s, n) => {
93
+ }, w1 = (e, i, t = 0) => i.gridGap ? e + Math.PI / 18 / 2 - (e + Math.PI / 18 / 2) % (Math.PI / 18) : Fe(e, 3), x1 = (e, i, t, a, s, n) => {
106
94
  switch (a.mode) {
107
95
  case "brush":
108
- return ((r, o, l) => {
109
- const c = { ...r, points: te(r.points.length - 1, [...r.points[r.points.length - 1], [Math.round(o[0]), Math.round(o[1])]], r.points) };
110
- return Be(c, l);
96
+ return ((o, r, l) => {
97
+ const c = { ...o, points: le(o.points.length - 1, [...o.points[o.points.length - 1], [Math.round(r[0]), Math.round(r[1])]], o.points) };
98
+ return Je(c, l);
111
99
  })(i, t, s);
112
100
  case "translate":
113
101
  return Rt(t, a.originalShape, a.cursorStartPosition, s);
114
102
  case "rotate":
115
- return fa(i, t, a.originalShape, a.cursorStartPosition, a.center, s);
103
+ return I1(i, t, a.originalShape, a.cursorStartPosition, a.center, s);
116
104
  case "resize":
117
- return ma(e, i, t, a.originalShape, a, s, n);
105
+ return W1(e, i, t, a.originalShape, a, s, n);
118
106
  default:
119
107
  return i;
120
108
  }
121
- }, Xe = (e, i, t) => {
109
+ }, Ke = (e, i, t) => {
122
110
  const { borders: a } = Y(i, t);
123
- return { border: ct(a), shapePath: e, line: Ft({ points: [[a.x + a.width / 2, a.y], [a.x + a.width / 2, a.y - 23 / t.canvasSize.scaleRatio]] }), anchors: [ht({ x: a.x + a.width / 2, y: a.y - 23 / t.canvasSize.scaleRatio, radius: 7 / t.canvasSize.scaleRatio }), ...O1.map((s) => ht({ x: a.x + a.width * s[0], y: a.y + a.height * s[1], radius: 7 / t.canvasSize.scaleRatio }))] };
124
- }, c1 = ({ borderStart: e, borderSize: i, vector: t, settings: a, invertedAxe: s, anchor: n }) => {
111
+ return { border: gt(a), shapePath: e, line: Dt({ points: [[a.x + a.width / 2, a.y], [a.x + a.width / 2, a.y - 23 / t.canvasSize.scaleRatio]] }), anchors: [vt({ x: a.x + a.width / 2, y: a.y - 23 / t.canvasSize.scaleRatio, radius: 7 / t.canvasSize.scaleRatio }), ...t1.map((s) => vt({ x: a.x + a.width * s[0], y: a.y + a.height * s[1], radius: 7 / t.canvasSize.scaleRatio }))] };
112
+ }, ri = ({ 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 o = i - 2 * a.selectionPadding;
129
- return [e + o, t - o];
116
+ const r = i - 2 * a.selectionPadding;
117
+ return [e + r, t - r];
130
118
  }
131
- const r = Math.max(2 * a.selectionPadding, i - t);
132
- return [e + i - r, r];
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 r = i + t;
139
- return [e + r, 2 * a.selectionPadding - r];
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
- }, h1 = ({ borderX: e, borderWidth: i, borderY: t, borderHeight: a, center: s, originalShape: n }) => {
146
- const r = [e + i / 2 - s[0], t + a / 2 - s[1]], [o, l] = he({ point: r, rotation: -n.rotation });
147
- return { borderX: He(e + o - r[0]), borderWidth: He(i), borderY: He(t + l - r[1]), borderHeight: He(a) };
148
- }, Ie = (e, i, t, a, s = !1) => {
149
- const { center: n, borders: r } = Y(i, a), o = he({ origin: n, point: e, rotation: i.rotation }), l = t.anchor[0] === 0 && o[0] >= r.x + r.width || t.anchor[0] === 1 && o[0] <= r.x, c = t.anchor[1] === 0 && o[1] >= r.y + r.height || t.anchor[1] === 1 && o[1] <= r.y, d = [W(o[0], a, t.anchor[0] === 0 && !l || t.anchor[0] === 1 && l ? a.selectionPadding : -a.selectionPadding), W(o[1], a, t.anchor[1] === 0 && !c || t.anchor[1] === 1 && c ? a.selectionPadding : -a.selectionPadding)], h = a.gridFormat ? [t.anchor[0] === 0 ? r.x : t.anchor[0] === 0.5 ? r.x + r.width / 2 : r.x + r.width, t.anchor[1] === 0 ? r.y : t.anchor[1] === 0.5 ? r.y + r.height / 2 : r.y + r.height] : he({ origin: n, point: t.cursorStartPosition, rotation: i.rotation }), p = [d[0] - h[0], d[1] - h[1]], [g, v] = c1({ borderStart: r.x, borderSize: r.width, vector: p[0], settings: a, invertedAxe: l, anchor: t.anchor[0] }), [S, x] = c1({ borderStart: r.y, borderSize: r.height, vector: p[1], settings: a, invertedAxe: c, anchor: t.anchor[1] });
133
+ }, li = ({ 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] = ve({ point: o, rotation: -n.rotation });
135
+ return { borderX: Fe(e + r - o[0]), borderWidth: Fe(i), borderY: Fe(t + l - o[1]), borderHeight: Fe(a) };
136
+ }, Be = (e, i, t, a, s = !1) => {
137
+ const { center: n, borders: o } = Y(i, a), r = ve({ 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, c = 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 && !c || t.anchor[1] === 1 && c ? a.selectionPadding : -a.selectionPadding)], h = 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] : ve({ origin: n, point: t.cursorStartPosition, rotation: i.rotation }), u = [d[0] - h[0], d[1] - h[1]], [g, v] = ri({ borderStart: o.x, borderSize: o.width, vector: u[0], settings: a, invertedAxe: l, anchor: t.anchor[0] }), [x, M] = ri({ borderStart: o.y, borderSize: o.height, vector: u[1], settings: a, invertedAxe: c, anchor: t.anchor[1] });
150
138
  if (s) {
151
- const b = ((Z, Q, k, A, R, F, H, M, P, L) => {
152
- const { selectionPadding: w } = L, D = (Q.width - 2 * w || 1) / (Q.height - 2 * w || 1), f = (R - 2 * w) / (H - 2 * w);
153
- let m, y, C, V;
154
- return P.anchor[0] !== 0.5 && P.anchor[1] !== 0.5 ? f < D ? (y = F, V = H, C = (H - 2 * w) * D + 2 * w, m = P.anchor[0] === 0 ? Q.width - Z[0] > w ? Q.x + (Q.width - C) : Q.x + Q.width - 2 * w : Q.width + Z[0] > w ? Q.x : Q.x - C + 2 * w) : (m = A, C = R, V = (R - 2 * w) / D + 2 * w, y = P.anchor[1] === 0 ? Q.height - Z[1] > w ? Q.y + (Q.height - V) : Q.y + Q.height - 2 * w : Q.height + Z[1] > w ? Q.y : Q.y - V + 2 * w) : P.anchor[0] !== 0.5 ? (m = A, C = R, V = (R - 2 * w) / D + 2 * w, y = Q.y + (Q.height - V) / 2) : (y = F, V = H, C = (H - 2 * w) * D + 2 * w, m = Q.x + (Q.width - C) / 2), { borderX: m, borderWidth: C, borderY: y, borderHeight: V, center: k, originalShape: M };
155
- })(p, r, n, g, v, S, x, i, t, a);
156
- return h1(b);
139
+ const y = ((P, Q, L, T, E, Z, H, C, V, k) => {
140
+ const { selectionPadding: S } = k, F = (Q.width - 2 * S || 1) / (Q.height - 2 * S || 1), w = (E - 2 * S) / (H - 2 * S);
141
+ let A, N, f, m;
142
+ return V.anchor[0] !== 0.5 && V.anchor[1] !== 0.5 ? w < F ? (N = Z, m = H, f = (H - 2 * S) * F + 2 * S, A = V.anchor[0] === 0 ? Q.width - P[0] > S ? Q.x + (Q.width - f) : Q.x + Q.width - 2 * S : Q.width + P[0] > S ? Q.x : Q.x - f + 2 * S) : (A = T, f = E, m = (E - 2 * S) / F + 2 * S, N = V.anchor[1] === 0 ? Q.height - P[1] > S ? Q.y + (Q.height - m) : Q.y + Q.height - 2 * S : Q.height + P[1] > S ? Q.y : Q.y - m + 2 * S) : V.anchor[0] !== 0.5 ? (A = T, f = E, m = (E - 2 * S) / F + 2 * S, N = Q.y + (Q.height - m) / 2) : (N = Z, m = H, f = (H - 2 * S) * F + 2 * S, A = Q.x + (Q.width - f) / 2), { borderX: A, borderWidth: f, borderY: N, borderHeight: m, center: L, originalShape: C };
143
+ })(u, o, n, g, v, x, M, i, t, a);
144
+ return li(y);
157
145
  }
158
- return h1({ borderX: g, borderWidth: v, borderY: S, borderHeight: x, center: n, originalShape: i });
159
- }, pt = (e, i) => {
160
- const t = ht(e);
161
- return { ...e, path: t, selection: Xe(t, e, i) };
162
- }, Ki = pt, At = (e, i, t) => {
146
+ return li({ borderX: g, borderWidth: v, borderY: x, borderHeight: M, center: n, originalShape: i });
147
+ }, mt = (e, i) => {
148
+ const t = vt(e);
149
+ return { ...e, path: t, selection: Ke(t, e, i) };
150
+ }, M1 = mt, Tt = (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
- }, u1 = (e) => "touches" in e, Ee = (e, i, [t, a], [s, n]) => he({ origin: [t - s, a - n], point: e, rotation: i }), rt = (e, i, t) => t ? di(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), et = (e, i, t, a = !1, s = 0) => {
153
+ }, di = (e) => "touches" in e, $e = (e, i, [t, a], [s, n]) => ve({ origin: [t - s, a - n], point: e, rotation: i }), dt = (e, i, t) => t ? l1(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), nt = (e, i, t, a = !1, s = 0) => {
166
154
  if (e.locked)
167
155
  return !1;
168
- const { canvasSize: { scaleRatio: n } } = t, { borders: r, center: o } = Y(e, t), l = Ee(i, e.rotation, o, t.canvasOffset);
156
+ const { canvasSize: { scaleRatio: n } } = t, { borders: o, center: r } = Y(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
159
  for (let c = 0; c < e.points.length; c++)
172
- if (rt({ x: e.points[c][0] - 7 / n, y: e.points[c][1] - 7 / n, width: Me / n, height: Me / n }, l, s))
160
+ if (dt({ x: e.points[c][0] - 7 / n, y: e.points[c][1] - 7 / n, width: He / n, height: He / n }, l, s))
173
161
  return { mode: "resize", anchor: c };
174
162
  } else {
175
- if (rt({ x: r.x + r.width / 2 - 7 / n, y: r.y - Me / n - 16 / n, width: Me / n, height: Me / n }, l, s))
163
+ if (dt({ x: o.x + o.width / 2 - 7 / n, y: o.y - He / n - 16 / n, width: He / n, height: He / n }, l, s))
176
164
  return { mode: "rotate" };
177
- for (const c of O1)
178
- if (rt({ x: r.x + r.width * c[0] - 7 / n, y: r.y + r.height * c[1] - 7 / n, width: Me / n, height: Me / n }, l, s))
165
+ for (const c of t1)
166
+ if (dt({ x: o.x + o.width * c[0] - 7 / n, y: o.y + o.height * c[1] - 7 / n, width: He / n, height: He / n }, l, s))
179
167
  return { mode: "resize", anchor: c };
180
168
  }
181
- return !!rt(r, l, s) && { mode: "translate" };
182
- }, hi = (e, i, t, a) => {
169
+ return !!dt(o, l, s) && { mode: "translate" };
170
+ }, d1 = (e, i, t, a) => {
183
171
  if (i.locked)
184
172
  return !1;
185
- const { center: s } = Y(i, a), n = Ee(t, i.rotation, s, a.canvasOffset);
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" }) : et(i, t, a, !1);
173
+ const { center: s } = Y(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" }) : nt(i, t, a, !1);
187
175
  };
188
- function p1(e, i) {
176
+ function ci(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 g1 = ({ ctx: e, path: i, rect: t, offset: a, checkFill: s }) => {
181
+ const hi = ({ ctx: e, path: i, rect: t, offset: a, checkFill: s }) => {
194
182
  for (let n = 0; n < a; n += a / 2)
195
- for (let r = 0; r < a; r += a / 2)
196
- for (let o = n + t.x; o < t.x + t.width; o += a)
197
- for (let l = r + t.y; l < t.y + t.height; l += a)
198
- if (s ? e.isPointInPath(i, o, l) : e.isPointInStroke(i, o, l))
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
- }, Oe = (e, i) => {
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: Xt(t, e, i) };
212
- }, ea = Oe, ui = (e, i) => {
199
+ return { ...e, path: t, selection: Ut(t, e, i) };
200
+ }, k1 = _e, c1 = (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
- }, Ue = (e, i) => {
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: Xt(t, e, i, !0) };
226
- }, ta = Ue, ia = ui, gt = (e, i) => {
213
+ return { ...e, path: t, selection: Ut(t, e, i, !0) };
214
+ }, L1 = qe, V1 = c1, yt = (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: Xe(t, e, i) };
232
- }, aa = gt, v1 = (e) => {
233
- return t = { ...e, type: "triangle" }, { ...t, path: ji(t) };
219
+ return { ...e, path: t, selection: Ke(t, e, i) };
220
+ }, P1 = yt, pi = (e) => {
221
+ return t = { ...e, type: "triangle" }, { ...t, path: b1(t) };
234
222
  var t;
235
- }, na = (e, i) => {
223
+ }, H1 = (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
- }, vt = (e, i) => {
225
+ }, Qt = (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 - d1({ targetVector: [e.points[0], e.points[1]] });
242
- e.style?.lineArrow !== 1 && e.style?.lineArrow !== 3 || t.push(v1(f1(e.points[0], s, e.style))), e.style?.lineArrow !== 2 && e.style?.lineArrow !== 3 || t.push(v1(f1(e.points[1], s + Math.PI, e.style)));
243
- const n = (({ line: r, size: o, direction: l }) => {
244
- const c = Math.PI / 2 - d1({ targetVector: [r.points[0], r.points[1]] }), d = [r.points[0][0] + (r.points[1][0] - r.points[0][0]) / 2, r.points[0][1] + (r.points[1][1] - r.points[0][1]) / 2];
245
- let h, p;
229
+ const s = Math.PI / 2 - oi({ targetVector: [e.points[0], e.points[1]] });
230
+ e.style?.lineArrow !== 1 && e.style?.lineArrow !== 3 || t.push(pi(ui(e.points[0], s, e.style))), e.style?.lineArrow !== 2 && e.style?.lineArrow !== 3 || t.push(pi(ui(e.points[1], s + Math.PI, e.style)));
231
+ const n = (({ line: o, size: r, direction: l }) => {
232
+ const c = Math.PI / 2 - oi({ 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 h, u;
246
234
  if (["start", "both"].includes(l)) {
247
- const g = he({ point: r.points[0], origin: d, rotation: -c });
248
- h = he({ point: [g[0], g[1] + o], origin: d, rotation: c });
235
+ const g = ve({ point: o.points[0], origin: d, rotation: -c });
236
+ h = ve({ point: [g[0], g[1] + r], origin: d, rotation: c });
249
237
  } else
250
- h = [...r.points[0]];
238
+ h = [...o.points[0]];
251
239
  if (["end", "both"].includes(l)) {
252
- const g = he({ point: r.points[1], origin: d, rotation: -c });
253
- p = he({ point: [g[0], g[1] - o], origin: d, rotation: c });
240
+ const g = ve({ point: o.points[1], origin: d, rotation: -c });
241
+ u = ve({ point: [g[0], g[1] - r], origin: d, rotation: c });
254
242
  } else
255
- p = [...r.points[1]];
256
- return { points: [h, p] };
243
+ u = [...o.points[1]];
244
+ return { points: [h, 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 = Ft(n);
246
+ a = Dt(n);
259
247
  } else
260
- a = Ft(e);
261
- return { ...e, path: a, selection: Xt(a, e, i), arrows: t, style: { ...e.style, lineCap: e.style?.lineArrow ? "butt" : "round" } };
262
- }, sa = vt, f1 = (e, i, t) => {
263
- const a = [he({ point: [0, 0], rotation: i }), he({ point: [-(5 + (t.lineWidth ?? 0)), 10 + 2 * (t.lineWidth ?? 0)], rotation: i }), he({ point: [5 + (t.lineWidth ?? 0), 10 + 2 * (t.lineWidth ?? 0)], rotation: i })];
248
+ a = Dt(e);
249
+ return { ...e, path: a, selection: Ut(a, e, i), arrows: t, style: { ...e.style, lineCap: e.style?.lineArrow ? "butt" : "round" } };
250
+ }, T1 = Qt, ui = (e, i, t) => {
251
+ const a = [ve({ point: [0, 0], rotation: i }), ve({ point: [-(5 + (t.lineWidth ?? 0)), 10 + 2 * (t.lineWidth ?? 0)], rotation: i }), ve({ 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
- }, ft = (e) => e.filter((i) => i != null), oa = (e) => {
266
- const i = ["img", "id", "selection", "path", "arrows"];
267
- return e.map((t) => t.type !== "picture" || t.src.startsWith("http") ? Dt(i, t) : Dt(i, { ...t, src: ra(t.img) }));
268
- }, pi = (e, i, t) => ({ shapes: oa(e), config: { width: i, height: t } }), m1 = (e, i) => tt({ ...e, id: J(`${e.type}_`) }, i), gi = (e) => {
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
+ }, St = (e, i) => {
254
+ const t = gt(e);
255
+ return { ...e, path: t, selection: Ke(t, e, i) };
256
+ }, A1 = St, Z1 = (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
- }, b1 = (e, i) => ({ x: e.x - i.selectionPadding, width: e.width + 2 * i.selectionPadding, y: e.y - i.selectionPadding, height: e.height + 2 * i.selectionPadding }), S1 = (e, i, t, a, [s, n] = [!1, !1]) => ((r, o, [l, c], [d, h]) => he({ origin: [l - d, c - h], point: r, rotation: -o }))([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), yt = (e, i) => ({ ...e, selection: Xe(void 0, e, i) }), ha = yt, C1 = (e, i, t, a, s) => {
306
- const [n, r] = ((o, l, c, d, h = !1) => {
307
- if (!(o && l && d && c))
258
+ }, gi = (e, i) => ({ x: e.x - i.selectionPadding, width: e.width + 2 * i.selectionPadding, y: e.y - i.selectionPadding, height: e.height + 2 * i.selectionPadding }), vi = (e, i, t, a, [s, n] = [!1, !1]) => ((o, r, [l, c], [d, h]) => ve({ origin: [l - d, c - h], 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), bt = (e, i) => ({ ...e, selection: Ke(void 0, e, i) }), E1 = bt, fi = (e, i, t, a, s) => {
259
+ const [n, o] = ((r, l, c, d, h = !1) => {
260
+ if (!(r && l && d && c))
308
261
  return [ut, ut];
309
- const p = o / l;
310
- if (p > c / d) {
311
- const v = h ? c : Math.min(o, c);
312
- return [v, v / p];
262
+ const u = r / l;
263
+ if (u > c / d) {
264
+ const v = h ? c : Math.min(r, c);
265
+ return [v, v / u];
313
266
  }
314
267
  const g = h ? d : Math.min(l, d);
315
- return [g * p, g];
268
+ return [g * u, g];
316
269
  })(e.width, e.height, t, a, !0);
317
- return yt({ toolId: Ut.id, type: "picture", id: J("picture_"), x: (t - n) / 2, y: (a - r) / 2, width: n, height: r, src: i, img: e, rotation: 0 }, s);
318
- }, ua = (e, i, t, a) => new Promise((s, n) => {
319
- const r = new Image();
320
- r.onerror = () => {
270
+ return bt({ toolId: Ot.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
+ }, F1 = (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 ? ((o, l, c, d, h, p) => {
277
+ }, 4e3), e instanceof File ? ((r, l, c, d, h, u) => {
325
278
  const g = URL.createObjectURL(c);
326
- o.onload = async () => {
327
- if (URL.revokeObjectURL(o.src), vi(c) && !o.width && !o.height) {
328
- const S = await c.text(), x = gi(S);
329
- if (g === o.src)
330
- return void (o.src = x);
279
+ r.onload = async () => {
280
+ if (URL.revokeObjectURL(r.src), u1(c) && !r.width && !r.height) {
281
+ const x = await c.text(), M = p1(x);
282
+ if (g === r.src)
283
+ return void (r.src = M);
331
284
  }
332
- const v = C1(o, o.src, d, h, p);
285
+ const v = fi(r, r.src, d, h, u);
333
286
  l(v);
334
- }, o.src = g;
335
- })(r, s, e, i, t, a) : ((o, l, c, d, h, p) => {
336
- o.onload = () => {
337
- URL.revokeObjectURL(o.src);
338
- const g = C1(o, c, d, h, p);
287
+ }, r.src = g;
288
+ })(o, s, e, i, t, a) : ((r, l, c, d, h, u) => {
289
+ r.onload = () => {
290
+ URL.revokeObjectURL(r.src);
291
+ const g = fi(r, c, d, h, u);
339
292
  l(g);
340
- }, fi(c).then((g) => {
341
- o.src = g;
293
+ }, g1(c).then((g) => {
294
+ r.src = g;
342
295
  }).catch(() => {
343
- o.src = "";
296
+ r.src = "";
344
297
  });
345
- })(r, s, e, i, t, a);
346
- }), Tt = ["Texte"], Qt = (e, i) => ({ ...e, selection: Xe(void 0, e, i) }), pa = Qt, Yt = (e, i, t, a, s, n = it) => {
298
+ })(o, s, e, i, t, a);
299
+ }), At = ["Texte"], Ct = (e, i) => ({ ...e, selection: Ke(void 0, e, i) }), D1 = Ct, Bt = (e, i, t, a, s, n = ot) => {
347
300
  e.font = `${s ? "italic" : ""} ${a ? "bold" : ""} 1px ${n}`;
348
- const r = i.map((o) => t / e.measureText(o).width);
349
- return Math.min(...r) || 36;
350
- }, ga = (e, i, t, a) => {
351
- const s = { ...i, value: t }, n = ((v, S, x, b, Z, Q = it) => {
352
- v.font = `${Z ? "italic" : ""} ${b ? "bold" : ""} ${x}px ${Q}`;
353
- const k = S.map((A) => v.measureText(A).width);
354
- return Math.max(...k) || 20;
355
- })(e, s.value, s.fontSize, s.style?.fontBold ?? !1, s.style?.fontItalic ?? !1, s.style?.fontFamily), r = s.fontSize * s.value.length, o = { ...s, width: n, height: r }, { center: l } = Y(i, a), { center: c } = Y(o, a), [d, h] = S1([1, 1], l, i, a), [p, g] = S1([1, 1], c, o, a, [!1, !1]);
356
- return { ...o, x: o.x - (p - d), y: o.y - (g - h) };
357
- }, w1 = (e, i, t, a) => {
358
- const s = [W(t[0], a), W(t[1], a)];
301
+ const o = i.map((r) => t / e.measureText(r).width);
302
+ return Math.min(...o) || 36;
303
+ }, N1 = (e, i, t, a) => {
304
+ const s = { ...i, value: t }, n = ((v, x, M, y, P, Q = ot) => {
305
+ v.font = `${P ? "italic" : ""} ${y ? "bold" : ""} ${M}px ${Q}`;
306
+ const L = x.map((T) => v.measureText(T).width);
307
+ return Math.max(...L) || 20;
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 } = Y(i, a), { center: c } = Y(r, a), [d, h] = vi([1, 1], l, i, a), [u, g] = vi([1, 1], c, r, a, [!1, !1]);
309
+ return { ...r, x: r.x - (u - d), y: r.y - (g - h) };
310
+ }, mi = (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, r, o) => Be({ toolId: n.id, type: n.type, id: J(`${n.type}_`), points: [[r]], 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 } }, o))(i, s, a);
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, r, o) => {
364
- const l = { toolId: n.id, type: n.type, id: J(`${n.type}_`), points: [r, r], 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 } };
365
- return vt(l, o);
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 Qt(l, r);
366
319
  })(i, s, a);
367
320
  case "polygon":
368
- return ((n, r, o) => Oe({ toolId: n.id, type: n.type, id: J(`${n.type}_`), points: new Array(n.settings.pointsCount.default).fill(r), 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 } }, o))(i, s, a);
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, r, o) => Ue({ toolId: n.id, type: n.type, id: J(`${n.type}_`), points: new Array(n.settings.pointsCount.default).fill(r), 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 } }, o))(i, s, a);
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, r, o, l = 0, c = 0) => {
374
- const d = { toolId: n.id, type: n.type, id: J(`${n.type}_`), x: r[0], y: r[1], width: l, height: c, 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 } };
375
- return mt(d, o);
326
+ return ((n, o, r, l = 0, c = 0) => {
327
+ const d = { toolId: n.id, type: n.type, id: se(`${n.type}_`), x: o[0], y: o[1], width: l, height: c, 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 St(d, r);
376
329
  })(i, s, a);
377
330
  case "text":
378
- return ((n, r, o, l) => {
379
- const c = Yt(n, Tt, 50, r.settings?.fontBold.default ?? !1, r.settings?.fontItalic.default ?? !1, r.settings.fontFamily.default);
380
- return Qt({ toolId: r.id, type: r.type, id: J(`${r.type}_`), x: o[0], y: o[1], value: Tt, fontSize: c, width: 50, height: c * (Tt.length || 1), rotation: 0, style: { opacity: r.settings.opacity.default, strokeColor: r.settings.strokeColor.default, fontFamily: r.settings.fontFamily.default, fontItalic: r.settings.fontItalic.default, fontBold: r.settings.fontBold.default } }, l);
331
+ return ((n, o, r, l) => {
332
+ const c = Bt(n, At, 50, o.settings?.fontBold.default ?? !1, o.settings?.fontItalic.default ?? !1, o.settings.fontFamily.default);
333
+ return Ct({ toolId: o.id, type: o.type, id: se(`${o.type}_`), x: r[0], y: r[1], value: At, fontSize: c, width: 50, height: c * (At.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, r, o) => gt({ toolId: n.id, type: n.type, id: J(`${n.type}_`), x: r[0], y: r[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 } }, o))(i, s, a);
336
+ return ((n, o, r) => yt({ 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, r, o) => pt({ toolId: n.id, type: n.type, id: J(`${n.type}_`), x: r[0], y: r[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 } }, o))(i, s, a);
338
+ return ((n, o, r) => mt({ 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
- }, mi = (e, i, t) => {
340
+ }, h1 = (e, i, t) => {
388
341
  if (i.visible === !1)
389
342
  return;
390
343
  const { center: a } = Y(i, t);
391
- switch (Bt(e, t, i.rotation, a), De(e, i.style), i.type) {
344
+ switch (Gt(e, t, i.rotation, a), ze(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 ?? it}`, s.textBaseline = "top", s.fillStyle = n.style.strokeColor;
401
- for (let r = 0; r < n.value.length; r++)
402
- s.fillText(n.value[r], n.x, n.y + r * n.fontSize, n.width);
353
+ s.font = `${n.style?.fontItalic ? "italic" : ""} ${n.style?.fontBold ? "bold" : ""} ${n.fontSize}px ${n.style?.fontFamily ?? ot}`, 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 r of n.arrows ?? [])
411
- De(s, r.style), na(s, r);
363
+ for (const o of n.arrows ?? [])
364
+ ze(s, o.style), H1(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
- ca(e, i);
390
+ Z1(e, i);
438
391
  break;
439
392
  case "picture":
440
393
  ((s, n) => {
@@ -442,89 +395,89 @@ const g1 = ({ ctx: e, path: i, rect: t, offset: a, checkFill: s }) => {
442
395
  })(e, i);
443
396
  }
444
397
  e.restore();
445
- }, va = (e, i) => {
398
+ }, R1 = (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])), r = Math.min(...s.map((d) => d[1])), o = s.map((d) => fe(d, n, r, t.scaleX, t.scaleY)), l = Math.max(...o.map((d) => d[0])) + a, c = Math.max(...o.map((d) => d[1])) + a;
450
- return { x: n - a, width: l - n + a, y: r - a, height: c - r + a };
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) => Se(d, n, o, t.scaleX, t.scaleY)), l = Math.max(...r.map((d) => d[0])) + a, c = Math.max(...r.map((d) => d[1])) + a;
403
+ return { x: n - a, width: l - n + a, y: o - a, height: c - 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 ui(e, i);
408
+ return c1(e, i);
456
409
  case "curve":
457
- return ia(e, i);
410
+ return V1(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 b1(e, i);
417
+ return gi(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) => b1(t, a))(e, i);
421
+ return ((t, a) => gi(t, a))(e, i);
469
422
  default:
470
423
  return { x: 0, y: 0, width: 100, height: 100 };
471
424
  }
472
425
  }, Y = (e, i) => {
473
- const t = va(e, i), a = ((s) => [s.x + s.width / 2, s.y + s.height / 2])(t);
426
+ const t = R1(e, i), a = ((s) => [s.x + s.width / 2, s.y + s.height / 2])(t);
474
427
  return { borders: t, center: a };
475
- }, fa = (e, i, t, a, s, n) => {
476
- const r = s[0] - a[0], o = s[1] - a[1], l = s[0] - i[0], c = s[1] - i[1], d = t.rotation + Math.atan2(c, l) - Math.atan2(o, r);
477
- return { ...e, rotation: Gi(d, n) };
478
- }, ma = (e, i, t, a, s, n, r) => {
428
+ }, I1 = (e, i, t, a, s, n) => {
429
+ const o = s[0] - a[0], r = s[1] - a[1], l = s[0] - i[0], c = s[1] - i[1], d = t.rotation + Math.atan2(c, l) - Math.atan2(r, o);
430
+ return { ...e, rotation: w1(d, n) };
431
+ }, W1 = (e, i, t, a, s, n, o) => {
479
432
  switch (a.type) {
480
433
  case "line":
481
- return ((o, l, c, d) => {
482
- const h = [W(o[0], d), W(o[1], d)], { center: p } = Y(l, d), g = Ee(h, l.rotation, p, d.canvasOffset), v = te(["points", c.anchor], g, l);
483
- return vt(v, d);
434
+ return ((r, l, c, d) => {
435
+ const h = [O(r[0], d), O(r[1], d)], { center: u } = Y(l, d), g = $e(h, l.rotation, u, d.canvasOffset), v = le(["points", c.anchor], g, l);
436
+ return Qt(v, d);
484
437
  })(t, a, s, n);
485
438
  case "polygon":
486
- return ((o, l, c, d) => {
487
- const h = [W(o[0], d), W(o[1], d)], { center: p } = Y(l, d), g = Ee(h, l.rotation, p, d.canvasOffset), v = te(["points", c.anchor], g, l);
488
- return Oe(v, d);
439
+ return ((r, l, c, d) => {
440
+ const h = [O(r[0], d), O(r[1], d)], { center: u } = Y(l, d), g = $e(h, l.rotation, u, d.canvasOffset), v = le(["points", c.anchor], g, l);
441
+ return _e(v, d);
489
442
  })(t, a, s, n);
490
443
  case "curve":
491
- return ((o, l, c, d) => {
492
- const h = [W(o[0], d), W(o[1], d)], { center: p } = Y(l, d), g = Ee(h, l.rotation, p, d.canvasOffset), v = te(["points", c.anchor], g, l);
493
- return Ue(v, d);
444
+ return ((r, l, c, d) => {
445
+ const h = [O(r[0], d), O(r[1], d)], { center: u } = Y(l, d), g = $e(h, l.rotation, u, d.canvasOffset), v = le(["points", c.anchor], g, l);
446
+ return qe(v, d);
494
447
  })(t, a, s, n);
495
448
  case "brush":
496
- return ((o, l, c, d, h) => {
497
- const { borders: p } = Y({ ...l, scaleX: 1, scaleY: 1 }, d), { borders: g } = Y(l, d), { borderX: v, borderHeight: S, borderY: x, borderWidth: b } = Ie(o, l, c, d, h), Z = Math.max(0, p.width - 2 * d.selectionPadding), Q = Math.max(0, p.height - 2 * d.selectionPadding), k = Math.max(0, b - 2 * d.selectionPadding), A = Math.max(0, S - 2 * d.selectionPadding), R = Z ? k / Z : 1, F = Q ? A / Q : 1;
498
- if (!Z || !Q)
449
+ return ((r, l, c, d, h) => {
450
+ const { borders: u } = Y({ ...l, scaleX: 1, scaleY: 1 }, d), { borders: g } = Y(l, d), { borderX: v, borderHeight: x, borderY: M, borderWidth: y } = Be(r, l, c, d, h), P = Math.max(0, u.width - 2 * d.selectionPadding), Q = Math.max(0, u.height - 2 * d.selectionPadding), L = Math.max(0, y - 2 * d.selectionPadding), T = Math.max(0, x - 2 * d.selectionPadding), E = P ? L / P : 1, Z = Q ? T / Q : 1;
451
+ if (!P || !Q)
499
452
  return l;
500
- const H = He(v - g.x), M = He(x - g.y);
501
- return Be({ ...l, points: l.points.map((P) => P.map(([L, w]) => [L + H, w + M])), scaleX: R, scaleY: F }, d);
502
- })(t, a, s, n, r);
453
+ const H = Fe(v - g.x), C = Fe(M - g.y);
454
+ return Je({ ...l, points: l.points.map((V) => V.map(([k, S]) => [k + H, S + C])), scaleX: E, scaleY: Z }, d);
455
+ })(t, a, s, n, o);
503
456
  case "circle":
504
- return ((o, l, c, d) => {
505
- const { borderX: h, borderHeight: p, borderY: g, borderWidth: v } = Ie(o, l, c, d, !0);
506
- return pt({ ...l, radius: Math.max(0, v / 2 - d.selectionPadding), x: h + v / 2, y: g + p / 2 }, d);
457
+ return ((r, l, c, d) => {
458
+ const { borderX: h, borderHeight: u, borderY: g, borderWidth: v } = Be(r, l, c, d, !0);
459
+ return mt({ ...l, radius: Math.max(0, v / 2 - d.selectionPadding), x: h + v / 2, y: g + u / 2 }, d);
507
460
  })(t, a, s, n);
508
461
  case "ellipse":
509
- return ((o, l, c, d, h = !1) => {
510
- const { borderX: p, borderHeight: g, borderY: v, borderWidth: S } = Ie(o, l, c, d, h);
511
- return gt({ ...l, radiusX: Math.max(0, S / 2 - d.selectionPadding), radiusY: Math.max(0, g / 2 - d.selectionPadding), x: p + S / 2, y: v + g / 2 }, d);
512
- })(t, a, s, n, r);
462
+ return ((r, l, c, d, h = !1) => {
463
+ const { borderX: u, borderHeight: g, borderY: v, borderWidth: x } = Be(r, l, c, d, h);
464
+ return yt({ ...l, radiusX: Math.max(0, x / 2 - d.selectionPadding), radiusY: Math.max(0, g / 2 - d.selectionPadding), x: u + x / 2, y: v + g / 2 }, d);
465
+ })(t, a, s, n, o);
513
466
  case "rect":
514
467
  case "square":
515
- return ((o, l, c, d, h = !1) => {
516
- const { borderX: p, borderHeight: g, borderY: v, borderWidth: S } = Ie(o, l, c, d, h);
517
- return mt({ ...l, width: Math.max(0, S - 2 * d.selectionPadding), height: Math.max(0, g - 2 * d.selectionPadding), x: p + d.selectionPadding, y: v + d.selectionPadding }, d);
518
- })(t, a, s, n, i.type === "square" || r);
468
+ return ((r, l, c, d, h = !1) => {
469
+ const { borderX: u, borderHeight: g, borderY: v, borderWidth: x } = Be(r, l, c, d, h);
470
+ return St({ ...l, width: Math.max(0, x - 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 ((o, l, c, d, h) => {
521
- const { borderX: p, borderHeight: g, borderY: v, borderWidth: S } = Ie(l, c, d, h, !0), x = Qt({ ...c, width: Math.max(0, S - 2 * h.selectionPadding), height: Math.max(0, g - 2 * h.selectionPadding), x: p + h.selectionPadding, y: v + h.selectionPadding }, h);
522
- return { ...x, fontSize: Yt(o, x.value, x.width, x.style?.fontBold ?? !1, x.style?.fontItalic ?? !1, x.style?.fontFamily) };
473
+ return ((r, l, c, d, h) => {
474
+ const { borderX: u, borderHeight: g, borderY: v, borderWidth: x } = Be(l, c, d, h, !0), M = Ct({ ...c, width: Math.max(0, x - 2 * h.selectionPadding), height: Math.max(0, g - 2 * h.selectionPadding), x: u + h.selectionPadding, y: v + h.selectionPadding }, h);
475
+ return { ...M, fontSize: Bt(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 ((o, l, c, d, h) => {
526
- const { borderX: p, borderHeight: g, borderY: v, borderWidth: S } = Ie(o, l, c, d, !0);
527
- return yt({ ...l, width: Math.max(0, S - 2 * d.selectionPadding), height: Math.max(0, g - 2 * d.selectionPadding), x: p + d.selectionPadding, y: v + d.selectionPadding }, d);
478
+ return ((r, l, c, d, h) => {
479
+ const { borderX: u, borderHeight: g, borderY: v, borderWidth: x } = Be(r, l, c, d, !0);
480
+ return bt({ ...l, width: Math.max(0, x - 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;
@@ -533,62 +486,62 @@ const g1 = ({ ctx: e, path: i, rect: t, offset: a, checkFill: s }) => {
533
486
  switch (i.type) {
534
487
  case "rect":
535
488
  case "square":
536
- return ((s, n, r, o) => mt({ ...n, x: W(n.x + s[0] - r[0], o), y: W(n.y + s[1] - r[1], o) }, o))(e, i, t, a);
489
+ 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);
537
490
  case "ellipse":
538
- return ((s, n, r, o) => gt({ ...n, x: W(n.x + s[0] - r[0], o), y: W(n.y + s[1] - r[1], o) }, o))(e, i, t, a);
491
+ 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);
539
492
  case "circle":
540
- return ((s, n, r, o) => pt({ ...n, x: W(n.x + s[0] - r[0], o), y: W(n.y + s[1] - r[1], o) }, o))(e, i, t, a);
493
+ return ((s, n, o, r) => mt({ ...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, r, o) => yt({ ...n, x: W(n.x + s[0] - r[0], o), y: W(n.y + s[1] - r[1], o) }, o))(e, i, t, a);
495
+ return ((s, n, o, r) => bt({ ...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, r, o) => Qt({ ...n, x: W(n.x + s[0] - r[0], o), y: W(n.y + s[1] - r[1], o) }, o))(e, i, t, a);
497
+ return ((s, n, o, r) => Ct({ ...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, r, o) => vt({ ...n, points: n.points.map(([l, c]) => [W(l + s[0] - r[0], o), W(c + s[1] - r[1], o)]) }, o))(e, i, t, a);
499
+ return ((s, n, o, r) => Qt({ ...n, points: n.points.map(([l, c]) => [O(l + s[0] - o[0], r), O(c + s[1] - o[1], r)]) }, r))(e, i, t, a);
547
500
  case "polygon":
548
- return ((s, n, r, o) => {
549
- const { borders: l } = Y(n, o);
550
- return Oe({ ...n, points: n.points.map(([c, d]) => o.gridFormat ? [c + W(l.x + s[0] - r[0], o) - l.x, d + W(l.y + s[1] - r[1], o) - l.y] : [W(c + s[0] - r[0], o), W(d + s[1] - r[1], o)]) }, o);
501
+ return ((s, n, o, r) => {
502
+ const { borders: l } = Y(n, r);
503
+ return _e({ ...n, points: n.points.map(([c, d]) => r.gridGap ? [c + O(l.x + s[0] - o[0], r) - l.x, d + O(l.y + s[1] - o[1], r) - l.y] : [O(c + 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, r, o) => {
554
- const { borders: l } = Y(n, o);
555
- return Ue({ ...n, points: n.points.map(([c, d]) => o.gridFormat ? [c + W(l.x + s[0] - r[0], o) - l.x, d + W(l.y + s[1] - r[1], o) - l.y] : [W(c + s[0] - r[0], o), W(d + s[1] - r[1], o)]) }, o);
506
+ return ((s, n, o, r) => {
507
+ const { borders: l } = Y(n, r);
508
+ return qe({ ...n, points: n.points.map(([c, d]) => r.gridGap ? [c + O(l.x + s[0] - o[0], r) - l.x, d + O(l.y + s[1] - o[1], r) - l.y] : [O(c + 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, r, o) => {
559
- const { borders: l } = Y(n, o), c = o.gridFormat ? W(l.x + s[0] - r[0], o) - l.x : s[0] - r[0], d = o.gridFormat ? W(l.y + s[1] - r[1], o) - l.y : s[1] - r[1];
560
- return Be({ ...n, points: n.points.map((h) => h.map(([p, g]) => [p + c, g + d])) }, o);
511
+ return ((s, n, o, r) => {
512
+ const { borders: l } = Y(n, r), c = 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((h) => h.map(([u, g]) => [u + c, g + d])) }, r);
561
514
  })(e, i, t, a);
562
515
  default:
563
516
  return i;
564
517
  }
565
- }, tt = (e, i) => {
518
+ }, st = (e, i) => {
566
519
  switch (e.type) {
567
520
  case "rect":
568
521
  case "square":
569
- return da(e, i);
522
+ return A1(e, i);
570
523
  case "ellipse":
571
- return aa(e, i);
524
+ return P1(e, i);
572
525
  case "circle":
573
- return Ki(e, i);
526
+ return M1(e, i);
574
527
  case "picture":
575
- return ha(e, i);
528
+ return E1(e, i);
576
529
  case "text":
577
- return pa(e, i);
530
+ return D1(e, i);
578
531
  case "line":
579
- return sa(e, i);
532
+ return T1(e, i);
580
533
  case "polygon":
581
- return ea(e, i);
534
+ return k1(e, i);
582
535
  case "curve":
583
- return ta(e, i);
536
+ return L1(e, i);
584
537
  case "brush":
585
- return qi(e, i);
538
+ return C1(e, i);
586
539
  default:
587
540
  return e;
588
541
  }
589
- }, x1 = ({ ctx: e, shape: i, settings: t, selectionWidth: a, selectionColor: s, withAnchors: n = !0 }) => {
590
- const { center: r } = Y(i, t);
591
- switch (Bt(e, t, i.rotation, r), i.type) {
542
+ }, yi = ({ ctx: e, shape: i, settings: t, selectionWidth: a, selectionColor: s, withAnchors: n = !0 }) => {
543
+ const { center: o } = Y(i, t);
544
+ switch (Gt(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
- ((o, l, c, d, h, p) => {
600
- if (l.selection && (De(o, { fillColor: "transparent", strokeColor: c, lineWidth: d / h.canvasSize.scaleRatio }), l.selection.shapePath ? o.stroke(l.selection.shapePath) : o.stroke(l.selection.border), p && !l.locked)) {
601
- l.selection.shapePath && o.stroke(l.selection.border), o.stroke(l.selection.line), De(o, { fillColor: "rgb(255,255,255)", strokeColor: "rgb(150,150,150)", lineWidth: 2 / h.canvasSize.scaleRatio });
552
+ ((r, l, c, d, h, u) => {
553
+ if (l.selection && (ze(r, { fillColor: "transparent", strokeColor: c, lineWidth: d / h.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), ze(r, { fillColor: "rgb(255,255,255)", strokeColor: "rgb(150,150,150)", lineWidth: 2 / h.canvasSize.scaleRatio });
602
555
  for (const g of l.selection.anchors)
603
- o.fill(g), o.stroke(g);
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: o, shape: l, withAnchors: c, selectionWidth: d, selectionColor: h, settings: p }) => {
611
- if (l.selection && (De(o, { fillColor: "transparent", strokeColor: h, lineWidth: d / p.canvasSize.scaleRatio }), l.selection.shapePath && o.stroke(l.selection.shapePath), c && !l.locked)) {
612
- De(o, { fillColor: "rgb(255,255,255)", strokeColor: "rgb(150,150,150)", lineWidth: 2 / p.canvasSize.scaleRatio });
563
+ (({ ctx: r, shape: l, withAnchors: c, selectionWidth: d, selectionColor: h, settings: u }) => {
564
+ if (l.selection && (ze(r, { fillColor: "transparent", strokeColor: h, lineWidth: d / u.canvasSize.scaleRatio }), l.selection.shapePath && r.stroke(l.selection.shapePath), c && !l.locked)) {
565
+ ze(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
- o.fill(g), o.stroke(g);
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
- }, ya = ({ ctx: e, selectionFrame: i, settings: t }) => {
620
- Bt(e, t), ((a, s, n) => {
621
- De(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]);
572
+ }, z1 = ({ ctx: e, selectionFrame: i, settings: t }) => {
573
+ Gt(e, t), ((a, s, n) => {
574
+ ze(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
- }, M1 = "ArrowUp", k1 = "ArrowDown", L1 = "ArrowLeft", V1 = "ArrowRight", Qa = "Delete", ba = "Backspace", Sa = "Escape", P1 = "Shift", Ca = "z", wa = "Z", xa = "y", Ma = "Y", H1 = "copy", A1 = "paste", ka = ({ isInsideComponent: e, selectedShape: i, isEditingText: t, settings: a, setSelectedShape: s, removeShape: n, pasteShape: r, updateShape: o, backwardShape: l, forwardShape: c, setShiftPressed: d }) => {
624
- const [h, p] = I(void 0);
625
- return O(() => {
626
- const g = (b) => {
627
- i && (t || (b.preventDefault(), p({ ...i })));
628
- }, v = (b) => {
629
- h && (t || (b.preventDefault(), r(((Z, Q) => ({ ...Rt([20, 20], Z, [0, 0], Q), id: J(`${Z.type}_`) }))(h, a))));
630
- }, S = (b) => {
631
- b.key === P1 && d(!1);
632
- }, x = (b) => {
633
- if (b.metaKey || b.ctrlKey) {
634
- if (b.key === wa || b.key === Ca)
635
- return b.preventDefault(), b.stopPropagation(), void l();
636
- if (b.key === Ma || b.key === xa)
637
- return b.preventDefault(), b.stopPropagation(), void c();
638
- }
639
- if (b.key === P1)
640
- return void d(!0);
641
- if (!i)
642
- return;
643
- if (b.key === Sa)
644
- return void s(void 0);
645
- if (t)
646
- return;
647
- const Z = { [L1]: [a.gridFormat ? -Ne[a.gridFormat - 1] : -1, 0], [V1]: [a.gridFormat ? Ne[a.gridFormat - 1] : 1, 0], [k1]: [0, a.gridFormat ? Ne[a.gridFormat - 1] : 1], [M1]: [0, a.gridFormat ? -Ne[a.gridFormat - 1] : -1] };
648
- switch (b.key) {
649
- case L1:
650
- case V1:
651
- case k1:
652
- case M1:
653
- o(Rt(Z[b.key], i, [0, 0], a));
654
- break;
655
- case Qa:
656
- case ba:
657
- n(i);
658
- }
659
- };
660
- if (e)
661
- return document.addEventListener("keydown", x), document.addEventListener("keyup", S), document.addEventListener(H1, g), document.addEventListener(A1, v), () => {
662
- document.removeEventListener("keydown", x), document.removeEventListener("keyup", S), document.removeEventListener(H1, g), document.removeEventListener(A1, v);
663
- };
664
- }, [e, h, t, i, a, o, n, s, r, l, c, d]), {};
665
- }, La = (e, i) => {
666
- const t = j([]), a = j(e);
667
- a.current = e;
668
- const [s, n] = I(void 0), [r, o] = I(void 0), [l, c] = I(void 0), [d, h] = I({ states: [{ shapes: [], selectedShape: void 0 }], cursor: 0 }), p = d.cursor > 0, g = d.cursor < d.states.length - 1, v = t.current.length > 0, S = z(() => {
669
- h((f) => ci(f.states[f.cursor].shapes, t.current) ? f : { states: [...f.states.slice(0, f.cursor + 1), { shapes: t.current, selectedShape: r }], cursor: f.cursor + 1 });
670
- }, [r]), x = z((f) => {
671
- t.current = [f, ...t.current];
672
- }, []), b = z((f, m, y) => {
673
- if (f.target && "className" in f.target && ![si, oi].includes(f.target.className))
674
- return void c(void 0);
675
- const C = t.current.find((V) => V.id === r?.id ? !!et(r, y, i) : !!hi(m, V, y, i));
676
- c(C);
677
- }, [i, r]), Z = z(async (f, m = 300, y = 300) => {
678
- const C = await ua(f, m, y, i);
679
- return x(C), S(), C;
680
- }, [x, S, i]), Q = z((f, m = !1) => {
681
- t.current = t.current.map((y) => y.id === r?.id ? f : y), o((y) => y?.id === f.id ? f : y), m && S();
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 ?? ut), i.setAttribute("height", l ?? ut), s = new XMLSerializer().serializeToString(i);
584
+ }
585
+ const n = new Blob([s], { type: "image/svg+xml" });
586
+ return URL.createObjectURL(n);
587
+ }, u1 = (e) => (e instanceof File ? e.name : e).includes(".svg"), g1 = (e) => u1(e) ? fetch(e).then((i) => i.text()).then((i) => p1(i)) : fetch(e).then((i) => i.blob()).then((i) => URL.createObjectURL(i)), Qi = (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
+ }, $1 = (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
+ }, Si = (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), r1(n);
602
+ for (let o = e.length - 1; o >= 0; o--)
603
+ h1(n, e[o], le(["canvasSize", "scaleRatio"], 1, a));
604
+ return s.toDataURL("image/png");
605
+ }, O1 = (e, i, t) => {
606
+ return s = Xt(e, i, t), `data:text/plain;charset=utf-8,${encodeURIComponent(JSON.stringify(s))}`;
607
+ var s;
608
+ }, G1 = (e) => {
609
+ const i = ["img", "id", "selection", "path", "arrows"];
610
+ return e.map((t) => t.type !== "picture" || t.src.startsWith("http") ? Et(i, t) : Et(i, { ...t, src: $1(t.img) }));
611
+ }, Xt = (e, i, t) => ({ shapes: G1(e), config: { width: i, height: t } }), bi = (e, i) => st({ ...e, id: se(`${e.type}_`) }, i), U1 = (e) => {
612
+ const i = ae([]), t = ae({ dataChanged: [] }), [a, s] = z(void 0), [n, o] = z(void 0), [r, l] = z(void 0), [c, d] = z({ states: [{ shapes: [], selectedShape: void 0 }], cursor: 0 }), h = c.cursor > 0, u = c.cursor < c.states.length - 1, g = i.current.length > 0, v = W(() => {
613
+ d((f) => o1(f.states[f.cursor].shapes, i.current) ? f : { states: [...f.states.slice(0, f.cursor + 1), { shapes: i.current, selectedShape: n }], cursor: f.cursor + 1 });
614
+ }, [n]), x = W((f) => {
615
+ i.current = [f, ...i.current];
616
+ }, []), M = W((f, m, b) => {
617
+ if (f.target && "className" in f.target && ![a1, n1].includes(f.target.className))
618
+ return void l(void 0);
619
+ const R = i.current.find((D) => D.id === n?.id ? !!nt(n, b, e) : !!d1(m, D, b, e));
620
+ l(R);
621
+ }, [e, n]), y = W(async (f, m = 300, b = 300) => {
622
+ const R = await F1(f, m, b, e);
623
+ return x(R), v(), R;
624
+ }, [x, v, e]), P = W((f, m = !1) => {
625
+ i.current = i.current.map((b) => b.id === n?.id ? f : b), o((b) => b?.id === f.id ? f : b), m && v();
626
+ }, [n, v]), Q = W((f) => {
627
+ const m = f.map((b) => Et(["chosen"], b));
628
+ i.current = m, v();
629
+ }, [v]), L = W((f) => {
630
+ o((m) => m?.id === f.id ? void 0 : m), i.current = i.current.filter((m) => m.id !== f.id), v();
631
+ }, [v]), T = W((f) => {
632
+ d((m) => {
633
+ const b = f(m);
634
+ return i.current = m.states[b].shapes, o(m.states[b].selectedShape), le("cursor", b, m);
691
635
  });
692
- }, []), F = z(() => {
693
- R((f) => Math.max(0, f.cursor - 1));
694
- }, [R]), H = z(() => {
695
- R((f) => Math.min(f.states.length - 1, f.cursor + 1));
696
- }, [R]), M = z((f = [], m = !1) => {
697
- o(void 0), t.current = f, h((y) => m ? { states: [{ shapes: f, selectedShape: void 0 }], cursor: 0 } : { states: [...y.states.slice(0, y.cursor + 1), { shapes: f, selectedShape: void 0 }], cursor: y.cursor + 1 });
698
- }, []), P = z((f, m) => {
699
- const y = t.current, C = y.findIndex((U) => U.id === f), V = y.findIndex((U) => U.id === m);
700
- k(C < V ? [...y.slice(0, C), ...y.slice(C + 1, V + 1), y[C], ...y.slice(V + 1, y.length)] : [...y.slice(0, V), y[C], ...y.slice(V, C), ...y.slice(C + 1, y.length)]);
701
- }, [k]), L = z((f) => {
702
- const m = t.current, y = m.findIndex((V) => V.id === f.id);
703
- if (y < 0)
636
+ }, []), E = W(() => {
637
+ T((f) => Math.max(0, f.cursor - 1));
638
+ }, [T]), Z = W(() => {
639
+ T((f) => Math.min(f.states.length - 1, f.cursor + 1));
640
+ }, [T]), H = W((f = [], m = !1) => {
641
+ o(void 0), i.current = f, d((b) => m ? { states: [{ shapes: f, selectedShape: void 0 }], cursor: 0 } : { states: [...b.states.slice(0, b.cursor + 1), { shapes: f, selectedShape: void 0 }], cursor: b.cursor + 1 });
642
+ }, []), C = W((f, m) => {
643
+ const b = i.current, R = b.findIndex((_) => _.id === f), D = b.findIndex((_) => _.id === m);
644
+ Q(R < D ? [...b.slice(0, R), ...b.slice(R + 1, D + 1), b[R], ...b.slice(D + 1, b.length)] : [...b.slice(0, D), b[R], ...b.slice(D, R), ...b.slice(R + 1, b.length)]);
645
+ }, [Q]), V = W((f) => {
646
+ const m = i.current, b = m.findIndex((D) => D.id === f.id);
647
+ if (b < 0)
704
648
  return;
705
- const C = te("visible", f.visible === !1, f);
706
- o((V) => V?.id === C.id ? C : V), k(te(y, C, m));
707
- }, [k]), w = z((f) => {
708
- const m = t.current, y = m.findIndex((V) => V.id === f.id);
709
- if (y < 0)
649
+ const R = le("visible", f.visible === !1, f);
650
+ o((D) => D?.id === R.id ? R : D), Q(le(b, R, m));
651
+ }, [Q]), k = W((f) => {
652
+ const m = i.current, b = m.findIndex((D) => D.id === f.id);
653
+ if (b < 0)
710
654
  return;
711
- const C = te("locked", !f.locked, f);
712
- o((V) => V?.id === C.id ? C : V), k(te(y, C, m));
713
- }, [k]);
714
- O(() => {
715
- a.current?.();
716
- }, [d]), O(() => {
717
- t.current = t.current.map((f) => tt(f, i)), o((f) => f === void 0 ? void 0 : t.current.find((m) => m.id === f.id));
718
- }, [i]);
719
- const D = z((f, m) => {
720
- n((y) => {
721
- const C = [y?.[0] ?? [m[0], m[1]], [m[0], m[1]]], V = t.current.filter((U) => ((K, E, re, ge) => {
722
- const { selectionPadding: ae, canvasOffset: X } = ge, { center: me, borders: ne } = Y(E, ge), ee = Ee(re[0], E.rotation, me, X), ye = Ee(re[1], E.rotation, me, X), Le = Math.round(Math.min(ee[0], ye[0]) - ae / 2), bt = Math.round(Math.max(ee[0], ye[0]) + ae), at = Math.round(Math.min(ee[1], ye[1]) - ae / 2), ue = { x: Le, y: at, width: bt - Le, height: Math.round(Math.max(ee[1], ye[1]) + ae) - at }, Re = p1(ne, ue);
723
- if (!Re)
655
+ const R = le("locked", !f.locked, f);
656
+ o((D) => D?.id === R.id ? R : D), Q(le(b, R, m));
657
+ }, [Q]), S = W((f, m) => {
658
+ Object.hasOwn(t.current, f) && (t.current[f] = [...t.current[f], m]);
659
+ }, []), F = W((f, m) => {
660
+ if (Object.hasOwn(t.current, f))
661
+ if (m) {
662
+ const b = t.current[f].findIndex((R) => R === m);
663
+ t.current[f] = [...t.current[f].slice(0, b), ...t.current[f].slice(b + 1)];
664
+ } else
665
+ t.current[f] = [];
666
+ }, []), { canvasSize: { width: w, height: A } } = e;
667
+ U(() => {
668
+ const f = Xt(i.current, w, A);
669
+ for (const m of t.current.dataChanged)
670
+ m(f);
671
+ }, [w, A, c]), U(() => {
672
+ i.current = i.current.map((f) => st(f, e)), o((f) => f === void 0 ? void 0 : i.current.find((m) => m.id === f.id));
673
+ }, [e]);
674
+ const N = W((f, m) => {
675
+ s((b) => {
676
+ const R = [b?.[0] ?? [m[0], m[1]], [m[0], m[1]]], D = i.current.filter((_) => ((oe, $, j, ce) => {
677
+ const { selectionPadding: G, canvasOffset: q } = ce, { center: me, borders: fe } = Y($, ce), te = $e(j[0], $.rotation, me, q), he = $e(j[1], $.rotation, me, q), be = Math.round(Math.min(te[0], he[0]) - G / 2), pe = Math.round(Math.max(te[0], he[0]) + G), xe = Math.round(Math.min(te[1], he[1]) - G / 2), Ce = { x: be, y: xe, width: pe - be, height: Math.round(Math.max(te[1], he[1]) + G) - xe }, Me = ci(fe, Ce);
678
+ if (!Me)
724
679
  return !1;
725
- if (ne.width <= 1 || ne.height <= 1 || !("path" in E) || !E.path)
680
+ if (fe.width <= 1 || fe.height <= 1 || !("path" in $) || !$.path)
726
681
  return !0;
727
- if (K.lineWidth = (E.style?.lineWidth ?? 0) + 10, E.type === "brush") {
728
- const Te = E.points.flat(), _e = Math.min(...Te.map((le) => le[0])), se = Math.min(...Te.map((le) => le[1]));
729
- for (const le of E.points) {
730
- if (le.length < 1)
682
+ if (oe.lineWidth = ($.style?.lineWidth ?? 0) + 10, $.type === "brush") {
683
+ const ne = $.points.flat(), ke = Math.min(...ne.map((re) => re[0])), Ze = Math.min(...ne.map((re) => re[1]));
684
+ for (const re of $.points) {
685
+ if (re.length < 1)
731
686
  break;
732
- if (le.length < 2) {
733
- const Se = fe(le[0], _e, se, E.scaleX, E.scaleY);
734
- if (di(Re, { x: Se[0], y: Se[1], radius: (E.style?.lineWidth ?? 1) / 2 }))
687
+ if (re.length < 2) {
688
+ const ye = Se(re[0], ke, Ze, $.scaleX, $.scaleY);
689
+ if (l1(Me, { x: ye[0], y: ye[1], radius: ($.style?.lineWidth ?? 1) / 2 }))
735
690
  return !0;
736
691
  }
737
- for (let Se = 0; Se < le.length - 1; Se++) {
738
- const Ce = fe(le[Se], _e, se, E.scaleX, E.scaleY), Qe = fe(le[Se + 1], _e, se, E.scaleX, E.scaleY), je = p1({ x: Math.min(Ce[0], Qe[0]), y: Math.min(Ce[1], Qe[1]), width: Math.abs(Ce[0] - Qe[0]), height: Math.abs(Ce[1] - Qe[1]) }, ue);
739
- if (je) {
740
- const qe = new Path2D();
741
- if (qe.moveTo(...Ce), qe.lineTo(...Qe), g1({ ctx: K, path: qe, rect: je, offset: 10, checkFill: !1 }))
692
+ for (let ye = 0; ye < re.length - 1; ye++) {
693
+ const ie = Se(re[ye], ke, Ze, $.scaleX, $.scaleY), Le = Se(re[ye + 1], ke, Ze, $.scaleX, $.scaleY), Oe = ci({ x: Math.min(ie[0], Le[0]), y: Math.min(ie[1], Le[1]), width: Math.abs(ie[0] - Le[0]), height: Math.abs(ie[1] - Le[1]) }, Ce);
694
+ if (Oe) {
695
+ const Ne = new Path2D();
696
+ if (Ne.moveTo(...ie), Ne.lineTo(...Le), hi({ ctx: oe, path: Ne, rect: Oe, offset: 10, checkFill: !1 }))
742
697
  return !0;
743
698
  }
744
699
  }
745
700
  }
746
701
  return !1;
747
702
  }
748
- const nt = !(!E.style?.fillColor || E.style?.fillColor === "transparent");
749
- return g1({ ctx: K, path: E.path, rect: Re, offset: 10, checkFill: nt });
750
- })(f, U, C, i));
751
- return o(V?.[0]), C;
703
+ const Ae = !(!$.style?.fillColor || $.style?.fillColor === "transparent");
704
+ return hi({ ctx: oe, path: $.path, rect: Me, offset: 10, checkFill: Ae });
705
+ })(f, _, R, e));
706
+ return o(D?.[0]), R;
752
707
  });
753
- }, [i]);
754
- return { shapesRef: t, selectedShape: r, hoveredShape: l, selectionFrame: s, setSelectionFrame: n, refreshSelectedShapes: D, addShape: x, addPictureShape: Z, moveShapes: P, saveShapes: S, setSelectedShape: o, refreshHoveredShape: b, toggleShapeVisibility: L, toggleShapeLock: w, removeShape: A, updateShape: Q, backwardShape: F, forwardShape: H, clearShapes: M, canGoBackward: p, canGoForward: g, canClear: v };
755
- }, Va = "infos", Pa = 4e3, Ha = () => {
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: S, unregisterEvent: F, shapesRef: i, selectedShape: n, hoveredShape: r, selectionFrame: a, setSelectionFrame: s, refreshSelectedShapes: N, addShape: x, addPictureShape: y, moveShapes: C, saveShapes: v, setSelectedShape: o, refreshHoveredShape: M, toggleShapeVisibility: V, toggleShapeLock: k, removeShape: L, updateShape: P, backwardShape: E, forwardShape: Z, clearShapes: H, canGoBackward: h, canGoForward: u, canClear: g };
710
+ }, Ci = (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 be(t, q1, s);
719
+ return we(t, Gi, s);
777
720
  case "circle":
778
- return be(t, ii, s);
721
+ return we(t, _i, s);
779
722
  case "curve":
780
- return be(t, K1, s);
723
+ return we(t, Xi, s);
781
724
  case "ellipse":
782
- return be(t, ai, s);
725
+ return we(t, qi, s);
783
726
  case "line":
784
- return be(t, G1, s);
727
+ return we(t, Ui, s);
785
728
  case "polygon":
786
- return be(t, J1, s);
729
+ return we(t, Bi, s);
787
730
  case "rect":
788
- return be(t, ei, s);
731
+ return we(t, Yi, s);
789
732
  case "square":
790
- return be(t, ti, s);
733
+ return we(t, ji, s);
791
734
  case "text":
792
- return be(t, ni, s);
735
+ return we(t, Ji, s);
793
736
  }
794
737
  return null;
795
738
  });
796
- return ft(i ? [...a, Ut] : a);
797
- }, Aa = (e, i, t, a, s, n, r) => {
798
- let o = !1;
739
+ return ft(i ? [...a, Ot] : a);
740
+ }, Ta = ({ width: e = 1e3, height: i = 600, shapes: t, mode: a = "editor", disabled: s = !1, options: n = Pt }) => {
741
+ const { layersManipulation: o, brushAlgo: r, grid: l, canGrow: c, canShrink: d, withExport: h, withLoadAndSave: u, withUploadPicture: g, withUrlPicture: v, withSkeleton: x, withFrameSelection: M, clearCallback: y, availableTools: P } = { ...Pt, ...n }, { canvasSelectionColor: Q, canvasSelectionWidth: L, canvasSelectionPadding: T } = { ...Pt.selection, ...n?.selection }, E = a !== "viewer", Z = s || !E, H = ae(null), C = ae(null), [V, k] = z(!1), S = W((X) => {
742
+ H.current = X;
743
+ }, []), [F, w] = z(Te), [A, N] = z(l), [f, m] = z({ width: e, height: i, scaleRatio: 1 }), [b, R] = z([0, 0]), D = Di(() => ({ brushAlgo: r, canvasSize: f, canvasOffset: b, gridGap: A, selectionPadding: T }), [T, A, r, b, f]), [_, oe] = z(Ci(P, g || v)), { isInsideComponent: $ } = (({ disabled: X, componentRef: Ee }) => {
744
+ const [it, Ie] = z(!1);
745
+ return U(() => {
746
+ if (!X) {
747
+ const Ve = (We) => {
748
+ Ie(s1(We, Ee.current));
749
+ };
750
+ return document.addEventListener("mousedown", Ve, { passive: !0 }), document.addEventListener("touchstart", Ve, { passive: !0 }), () => {
751
+ document.removeEventListener("mousedown", Ve), document.removeEventListener("touchstart", Ve);
752
+ };
753
+ }
754
+ Ie(!1);
755
+ }, [X, Ee]), { isInsideComponent: it };
756
+ })({ disabled: Z, componentRef: H }), { registerEvent: j, unregisterEvent: ce, shapesRef: G, selectedShape: q, selectionFrame: me, hoveredShape: fe, addShape: te, addPictureShape: he, moveShapes: be, setSelectedShape: pe, setSelectionFrame: xe, refreshSelectedShapes: Ce, refreshHoveredShape: Me, removeShape: Ae, updateShape: ne, backwardShape: ke, forwardShape: Ze, clearShapes: re, saveShapes: ye, toggleShapeVisibility: ie, toggleShapeLock: Le, canGoBackward: Oe, canGoForward: Ne, canClear: wt } = U1(D), tt = W((X) => {
757
+ pe(void 0), w(X);
758
+ }, [pe]), Ge = W((X = [], Ee = !1) => {
759
+ re(X, Ee), tt(Te), R([0, 0]);
760
+ }, [tt, re]), rt = W((X) => {
761
+ w(Te), pe(X);
762
+ }, [pe]), xt = W(() => {
763
+ const X = O1(G.current, e, i);
764
+ if (!X)
765
+ throw new Error("L'encodage a échoué");
766
+ Qi(X, "drawing.json");
767
+ }, [G, e, i]), J = W(() => {
768
+ const X = Si(G.current, e, i, D);
769
+ if (!X)
770
+ throw new Error();
771
+ Qi(X, "drawing.png");
772
+ }, [G, e, i, D]);
773
+ U(() => {
774
+ $ || pe(void 0);
775
+ }, [$, pe]);
776
+ const K = W(async (X, Ee = !0) => {
777
+ const it = await (async (Ie, Ve) => {
778
+ if (!Ie)
779
+ return [];
780
+ const We = [], Mt = ft(Ie.map((Qe) => {
781
+ if (!Qe || !i1.includes(Qe.type))
782
+ return null;
783
+ if (Qe.type === "picture") {
784
+ const Pe = new Image(), v1 = new Promise((kt, f1) => {
785
+ Pe.onload = () => {
786
+ URL.revokeObjectURL(Pe.src), kt();
787
+ }, Pe.onerror = () => {
788
+ f1(new Error("Some images could not be loaded"));
789
+ };
790
+ });
791
+ return We.push(v1), Qe.src.startsWith("http") ? g1(Qe.src).then((kt) => {
792
+ Pe.src = kt;
793
+ }).catch(() => {
794
+ Pe.src = "";
795
+ }) : Pe.src = Qe.src, bi({ ...Qe, img: Pe }, Ve);
796
+ }
797
+ return bi(Qe, Ve);
798
+ }));
799
+ return await Promise.all(We), Mt;
800
+ })(X, D);
801
+ Ge(it, Ee);
802
+ }, [Ge, D]);
803
+ V || t === void 0 || (k(!0), K(t));
804
+ const lt = W(async (X) => {
805
+ const Ee = await (async (it) => new Promise((Ie, Ve) => {
806
+ const We = new FileReader();
807
+ We.onload = (Mt) => {
808
+ const Qe = Mt.target?.result;
809
+ if (!Qe)
810
+ return Ve("Impossible de récupérer les données du fichier");
811
+ const Pe = JSON.parse(Qe);
812
+ Ie(Pe);
813
+ }, We.readAsText(it);
814
+ }))(X);
815
+ await K(Ee.shapes ?? []);
816
+ }, [K]), Re = W(() => {
817
+ typeof y != "string" ? K(y(), !1) : y === "defaultShapes" && t !== void 0 ? K(t, !1) : Ge();
818
+ }, [Ge, K, t, y]);
819
+ U(() => {
820
+ oe(Ci(P, g || v));
821
+ }, [P, g, v]);
822
+ const Ue = { canvas: C, editor: H, setEditor: S };
823
+ return { editorProps: { shapesRef: G, addPictureShape: he, moveShapes: be, toggleShapeVisibility: ie, toggleShapeLock: Le, canGoBackward: Oe, canGoForward: Ne, canClear: wt, selectedShape: q, removeShape: Ae, updateShape: ne, backwardShape: ke, forwardShape: Ze, refs: Ue, width: e, height: i, canvasSize: f, selectTool: tt, selectShape: rt, activeTool: F, setActiveTool: w, setAvailableTools: oe, isEditMode: E, isDisabled: Z, availableTools: _, gridGap: A, setGridGap: N, loadFile: lt, exportPicture: J, exportData: xt, clearCanvas: Re, settings: D, canvas: { selection: { canvasSelectionColor: Q, canvasSelectionWidth: L, canvasSelectionPadding: T }, withSkeleton: x, withFrameSelection: M, canGrow: c, canShrink: d, layersManipulation: o, withExport: h, withLoadAndSave: u, withUploadPicture: g, withUrlPicture: v, clearCallback: y } }, canvasProps: { shapesRef: G, selectedShape: q, selectionFrame: me, hoveredShape: fe, addShape: te, setSelectedShape: pe, setSelectionFrame: xe, refreshSelectedShapes: Ce, refreshHoveredShape: Me, removeShape: Ae, updateShape: ne, backwardShape: ke, forwardShape: Ze, saveShapes: ye, refs: Ue, width: e, height: i, settings: D, canvasSize: f, setCanvasSize: m, setCanvasOffset: R, selectShape: rt, activeTool: F, setActiveTool: w, isInsideComponent: $, isEditMode: E, isDisabled: Z, canvas: { selection: { canvasSelectionColor: Q, canvasSelectionWidth: L }, withSkeleton: x, withFrameSelection: M, canGrow: c, canShrink: d } }, registerEvent: j, unregisterEvent: ce, resetCanvas: K, getCurrentImage: () => C.current ? Si(G.current, e, i, D) : void 0, getCurrentData: () => Xt(G.current, e, i) };
824
+ }, B1 = (e, i, t, a, s, n, o) => {
825
+ let r = !1;
799
826
  if (s) {
800
- o = et(s, t, a, !0, n ? 20 : void 0);
801
- const c = ((d, h, p, g) => {
827
+ r = nt(s, t, a, !0, n ? 20 : void 0);
828
+ const c = ((d, h, u, g) => {
802
829
  if (d.mode === "translate")
803
- return { mode: "translate", cursorStartPosition: p, originalShape: h };
830
+ return { mode: "translate", cursorStartPosition: u, originalShape: h };
804
831
  if (d.mode === "rotate") {
805
832
  const { center: v } = Y(h, g);
806
- return { mode: "rotate", cursorStartPosition: p, originalShape: h, center: [v[0], v[1]] };
833
+ return { mode: "rotate", cursorStartPosition: u, originalShape: h, center: [v[0], v[1]] };
807
834
  }
808
- return d.mode === "resize" ? { mode: "resize", cursorStartPosition: p, originalShape: h, anchor: d.anchor } : void 0;
809
- })(o || { mode: "default" }, s, t, a);
835
+ return d.mode === "resize" ? { mode: "resize", cursorStartPosition: u, originalShape: h, anchor: d.anchor } : void 0;
836
+ })(r || { mode: "default" }, s, t, a);
810
837
  if (c?.mode === "resize" || c?.mode === "rotate")
811
838
  return { shape: s, mode: c };
812
839
  }
813
- const l = i.find((c) => c.id === s?.id ? !!o : !!hi(e, c, t, a));
814
- return l ? { shape: l, mode: { mode: "translate", cursorStartPosition: t, originalShape: l } } : { shape: void 0, mode: { mode: r ? "selectionFrame" : "default" } };
815
- }, Ta = ({ disabled: e = !1, addShape: i, drawCanvasRef: t, setActiveTool: a, refreshHoveredShape: s, shapes: n, selectionMode: r, activeTool: o, isInsideComponent: l, setCanvasOffset: c, selectedShape: d, selectionCanvasRef: h, canvasOffsetStartPosition: p, refreshSelectedShapes: g, setSelectedShape: v, setSelectionFrame: S, setCanvasOffsetStartPosition: x, updateSingleShape: b, saveShapes: Z, setSelectionMode: Q, settings: k, isShiftPressed: A, withFrameSelection: R }) => {
816
- const [F, H] = I({ mode: "default" }), { registerDoubleClickEvent: M, unRegisterDoubleClickEvent: P } = (() => {
817
- const L = j(void 0), w = j(void 0), D = (f) => {
818
- const m = (/* @__PURE__ */ new Date()).getTime();
819
- L.current && m < L.current + 300 && w.current?.(f), L.current = (/* @__PURE__ */ new Date()).getTime();
840
+ const l = i.find((c) => c.id === s?.id ? !!r : !!d1(e, c, t, a));
841
+ return l ? { shape: l, mode: { mode: "translate", cursorStartPosition: t, originalShape: l } } : { shape: void 0, mode: { mode: o ? "selectionFrame" : "default" } };
842
+ }, X1 = ({ disabled: e = !1, addShape: i, drawCanvasRef: t, setActiveTool: a, refreshHoveredShape: s, shapes: n, selectionMode: o, activeTool: r, isInsideComponent: l, setCanvasOffset: c, selectedShape: d, selectionCanvasRef: h, canvasOffsetStartPosition: u, refreshSelectedShapes: g, setSelectedShape: v, setSelectionFrame: x, setCanvasOffsetStartPosition: M, updateSingleShape: y, saveShapes: P, setSelectionMode: Q, settings: L, isShiftPressed: T, withFrameSelection: E }) => {
843
+ const [Z, H] = z({ mode: "default" }), { registerDoubleClickEvent: C, unRegisterDoubleClickEvent: V } = (() => {
844
+ const k = ae(void 0), S = ae(void 0), F = (w) => {
845
+ const A = (/* @__PURE__ */ new Date()).getTime();
846
+ k.current && A < k.current + 300 && S.current?.(w), k.current = (/* @__PURE__ */ new Date()).getTime();
820
847
  };
821
- return { registerDoubleClickEvent: (f, m) => {
822
- w.current = m, f.addEventListener("click", D), f.addEventListener("touchend", D);
823
- }, unRegisterDoubleClickEvent: (f) => {
824
- f.removeEventListener("click", D), f.removeEventListener("touchend", D);
848
+ return { registerDoubleClickEvent: (w, A) => {
849
+ S.current = A, w.addEventListener("click", F), w.addEventListener("touchend", F);
850
+ }, unRegisterDoubleClickEvent: (w) => {
851
+ w.removeEventListener("click", F), w.removeEventListener("touchend", F);
825
852
  } };
826
853
  })();
827
- return O(() => {
828
- const L = (w) => window.requestAnimationFrame(() => ((D, f, m, y, C, V, U, K, E, re, ge, ae, X, me) => {
829
- const ne = f.current?.getContext("2d");
830
- if (!ne)
854
+ return U(() => {
855
+ const k = (S) => window.requestAnimationFrame(() => ((F, w, A, N, f, m, b, R, D, _, oe, $, j, ce) => {
856
+ const G = w.current?.getContext("2d");
857
+ if (!G)
831
858
  return;
832
- const ee = At(D, f.current, X);
833
- if (m.type !== "move" || V === void 0)
834
- if (C.mode !== "selectionFrame") {
835
- if (u1(D) || K(D, ne, ee, X), y !== void 0 && !y.locked)
836
- if (C.mode === "default" || C.mode === "textedition")
837
- U(et(y, ee, X, !0) || { mode: "default" });
859
+ const q = Tt(F, w.current, j);
860
+ if (A.type !== "move" || m === void 0)
861
+ if (f.mode !== "selectionFrame") {
862
+ if (di(F) || R(F, G, q, j), N !== void 0 && !N.locked)
863
+ if (f.mode === "default" || f.mode === "textedition")
864
+ b(nt(N, q, j, !0) || { mode: "default" });
838
865
  else {
839
- const ye = f.current?.getContext("2d");
840
- if (!ye)
866
+ const me = w.current?.getContext("2d");
867
+ if (!me)
841
868
  return;
842
- const Le = Ji(ye, y, ee, C, X, me);
843
- E(Le), ge(Le);
869
+ const fe = x1(me, N, q, f, j, ce);
870
+ D(fe), oe(fe);
844
871
  }
845
872
  } else
846
- ae(ne, ee, X);
873
+ $(G, q, j);
847
874
  else
848
- re([ee[0] - V[0], ee[1] - V[1]]);
849
- })(w, h, o, d, r, p, H, s, b, c, v, g, k, A));
875
+ _([q[0] - m[0], q[1] - m[1]]);
876
+ })(S, h, r, d, o, u, H, s, y, c, v, g, L, T));
850
877
  if (l)
851
- return document.addEventListener("mousemove", L), document.addEventListener("touchmove", L), () => {
852
- document.removeEventListener("mousemove", L), document.removeEventListener("touchmove", L);
878
+ return document.addEventListener("mousemove", k), document.addEventListener("touchmove", k), () => {
879
+ document.removeEventListener("mousemove", k), document.removeEventListener("touchmove", k);
853
880
  };
854
- }, [l, h, d, r, p, b, o, c, v, s, g, k, A]), O(() => {
855
- const L = () => {
856
- r.mode !== "textedition" && r.mode !== "default" && (Q({ mode: "default" }), S(void 0), Z());
881
+ }, [l, h, d, o, u, y, r, c, v, s, g, L, T]), U(() => {
882
+ const k = () => {
883
+ o.mode !== "textedition" && o.mode !== "default" && (Q({ mode: "default" }), x(void 0), P());
857
884
  };
858
- return l && (document.addEventListener("mouseup", L), document.addEventListener("touchend", L)), () => {
859
- l && (document.removeEventListener("mouseup", L), document.removeEventListener("touchend", L));
885
+ return l && (document.addEventListener("mouseup", k), document.addEventListener("touchend", k)), () => {
886
+ l && (document.removeEventListener("mouseup", k), document.removeEventListener("touchend", k));
860
887
  };
861
- }, [l, r, Z, S, Q]), O(() => {
862
- const L = h.current;
863
- if (!L)
888
+ }, [l, o, P, x, Q]), U(() => {
889
+ const k = h.current;
890
+ if (!k)
864
891
  return;
865
- const w = L.getContext("2d");
866
- if (!w || e)
892
+ const S = k.getContext("2d");
893
+ if (!S || e)
867
894
  return;
868
- const D = (f) => {
869
- f.preventDefault();
870
- const m = At(f, h.current, k);
871
- if (o.type === "selection") {
872
- const { shape: y, mode: C } = Aa(w, n, m, k, d, u1(f), R);
873
- v(y), Q(C), C.mode === "selectionFrame" && S([[m[0], m[1]], [m[0], m[1]]]);
874
- } else if (o.type === "move")
875
- x(m);
876
- else if (U1.some((y) => y === o.type)) {
877
- const y = t.current?.getContext("2d");
878
- if (!y)
895
+ const F = (w) => {
896
+ w.preventDefault();
897
+ const A = Tt(w, h.current, L);
898
+ if (r.type === "selection") {
899
+ const { shape: N, mode: f } = B1(S, n, A, L, d, di(w), E);
900
+ v(N), Q(f), f.mode === "selectionFrame" && x([[A[0], A[1]], [A[0], A[1]]]);
901
+ } else if (r.type === "move")
902
+ M(A);
903
+ else if (i1.some((N) => N === r.type)) {
904
+ const N = t.current?.getContext("2d");
905
+ if (!N)
879
906
  return;
880
- if (o.type === "brush") {
907
+ if (r.type === "brush") {
881
908
  if (d && d.type === "brush") {
882
- const C = ((V, U, K) => {
883
- const E = { ...V, points: te(V.points.length, [[Math.round(U[0]), Math.round(U[1])]], V.points) };
884
- return Be(E, K);
885
- })(d, m, k);
886
- b(C), v(C);
909
+ const f = ((m, b, R) => {
910
+ const D = { ...m, points: le(m.points.length, [[Math.round(b[0]), Math.round(b[1])]], m.points) };
911
+ return Je(D, R);
912
+ })(d, A, L);
913
+ y(f), v(f);
887
914
  } else {
888
- const C = w1(y, o, m, k);
889
- if (!C)
915
+ const f = mi(N, r, A, L);
916
+ if (!f)
890
917
  return;
891
- i(C), v(C);
918
+ i(f), v(f);
892
919
  }
893
920
  Q({ mode: "brush" });
894
- } else if (o.type !== "picture") {
895
- const C = w1(y, o, m, k);
896
- i(C), a(ke), v(C), Q({ mode: "resize", cursorStartPosition: [m[0] + k.selectionPadding, m[1] + k.selectionPadding], originalShape: C, anchor: o.type === "line" || o.type === "polygon" || o.type === "curve" ? 0 : [1, 1] });
921
+ } else if (r.type !== "picture") {
922
+ const f = mi(N, r, A, L);
923
+ i(f), a(Te), v(f), Q({ mode: "resize", cursorStartPosition: [A[0] + L.selectionPadding, A[1] + L.selectionPadding], originalShape: f, anchor: r.type === "line" || r.type === "polygon" || r.type === "curve" ? 0 : [1, 1] });
897
924
  }
898
925
  }
899
926
  };
900
- return L.addEventListener("mousedown", D, { passive: !1 }), L.addEventListener("touchstart", D, { passive: !1 }), () => {
901
- L.removeEventListener("mousedown", D), L.removeEventListener("touchstart", D);
927
+ return k.addEventListener("mousedown", F, { passive: !1 }), k.addEventListener("touchstart", F, { passive: !1 }), () => {
928
+ k.removeEventListener("mousedown", F), k.removeEventListener("touchstart", F);
902
929
  };
903
- }, [e, h, t, d, o, x, n, b, i, a, v, Q, S, k, R]), O(() => {
904
- const L = h.current;
905
- if (L)
906
- return l ? (M(L, (w) => {
907
- if (o.type === "selection" && d?.type === "text") {
908
- const D = At(w, h.current, k);
909
- et(d, D, k) && Q({ mode: "textedition", defaultValue: d.value });
930
+ }, [e, h, t, d, r, M, n, y, i, a, v, Q, x, L, E]), U(() => {
931
+ const k = h.current;
932
+ if (k)
933
+ return l ? (C(k, (S) => {
934
+ if (r.type === "selection" && d?.type === "text") {
935
+ const F = Tt(S, h.current, L);
936
+ nt(d, F, L) && Q({ mode: "textedition", defaultValue: d.value });
910
937
  }
911
938
  }), () => {
912
- P(L);
939
+ V(k);
913
940
  }) : void 0;
914
- }, [M, P, l, h, o, d, Q, k]), { hoverMode: F };
915
- }, Za = /(<([^>]+)>)/gi, Fa = /<(\/)?div(\/?\s?)>/gi, Na = (e) => {
941
+ }, [C, V, l, h, r, d, Q, L]), { hoverMode: Z };
942
+ }, Y1 = /(<([^>]+)>)/gi, j1 = /<(\/)?div(\/?\s?)>/gi, _1 = (e) => {
916
943
  const i = ((t) => {
917
944
  const a = document.createElement("textarea");
918
945
  return a.innerHTML = t, a.value;
919
946
  })(e).split("<div>").flatMap((t) => {
920
- const a = t.replaceAll(Fa, "");
921
- return a === "" ? void 0 : a.replaceAll(Za, "");
947
+ const a = t.replaceAll(j1, "");
948
+ return a === "" ? void 0 : a.replaceAll(Y1, "");
922
949
  });
923
950
  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)
951
+ }, q1 = ({ disabled: e = !1, scaleRatio: i, shape: t, defaultValue: a, updateValue: s, saveShapes: n, settings: o }) => {
952
+ const r = ae(null), l = ae(n);
953
+ U(() => {
954
+ if (!r.current)
928
955
  return;
929
- const d = o.current, h = (p) => {
930
- p.preventDefault();
931
- const g = p.clipboardData?.getData("text/plain");
956
+ const d = r.current, h = (u) => {
957
+ u.preventDefault();
958
+ const g = u.clipboardData?.getData("text/plain");
932
959
  document.execCommand("insertText", !1, g);
933
960
  };
934
- return d.addEventListener("paste", h), d.innerHTML = a.map((p) => `<div>${p === "" ? "<br/>" : p}</div>`).join(""), d.focus(), () => {
961
+ return d.addEventListener("paste", h), d.innerHTML = a.map((u) => `<div>${u === "" ? "<br/>" : u}</div>`).join(""), d.focus(), () => {
935
962
  d.removeEventListener("paste", h);
936
963
  };
937
- }, [a]), O(() => {
964
+ }, [a]), U(() => {
938
965
  const d = l.current;
939
966
  return () => {
940
967
  d();
941
968
  };
942
969
  }, []);
943
- const c = I1(() => {
944
- const { borders: d, center: h } = Y(t, r);
945
- return he({ point: [d.x, d.y], rotation: -t.rotation, origin: h });
946
- }, [t, r]);
947
- return u("div", { className: "react-paint-editor-toolbox-edittextbox", ref: o, "data-fontbold": t.style?.fontBold ?? !1, "data-fontitalic": t.style?.fontItalic ?? !1, contentEditable: !e, onInput: (d) => {
948
- s(Na(d.target.innerHTML));
949
- }, style: { "--react-paint-editor-toolbox-edittextbox-transform": `translate3D(${c[0] * i}px, ${c[1] * i}px, 0) rotate(${Nt(t.rotation)}deg)`, "--react-paint-editor-toolbox-edittextbox-fontsize": t.fontSize * i + "px", "--react-paint-editor-toolbox-edittextbox-padding": r.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 ?? it } });
950
- }, Ea = (e, i, t, a, s) => {
951
- const { canvasSize: { width: n, height: r } } = t;
952
- e.clearRect(0, 0, n, r), li(e), t.gridFormat && ((o, l, c, d) => {
953
- const { gridFormat: h, canvasOffset: p, canvasSize: { scaleRatio: g } } = d;
954
- o.strokeStyle = "rgb(220,220,220)", o.lineWidth = 1, o.save(), o.scale(g, g), o.beginPath();
955
- const v = Ne[h - 1], S = -p[0] % v, x = -p[1] % v, b = Math.ceil(l / g / v), Z = Math.ceil(c / g / v);
956
- for (let Q = 0; Q < b; Q++)
957
- o.moveTo(S + (Q + 1) * v, x), o.lineTo(S + (Q + 1) * v, x + c / g);
958
- for (let Q = 0; Q < Z; Q++)
959
- o.moveTo(S, x + (Q + 1) * v), o.lineTo(S + l / g, x + (Q + 1) * v);
960
- o.stroke(), o.restore();
961
- })(e, n, r, t);
962
- for (let o = a.length - 1; o >= 0; o--)
963
- i.mode === "textedition" && a[o] === s || mi(e, a[o], t);
964
- }, Ra = R1.forwardRef(({ canGrow: e, disabled: i = !1, canvasSize: t, shapes: a, addShape: s, updateSingleShape: n, selectedShape: r, setSelectedShape: o, setSelectionFrame: l, hoveredShape: c, selectionFrame: d, refreshHoveredShape: h, refreshSelectedShapes: p, saveShapes: g, activeTool: v, setActiveTool: S, canvasOffsetStartPosition: x, setCanvasOffsetStartPosition: b, setCanvasOffset: Z, isInsideComponent: Q, selectionMode: k, setSelectionMode: A, selectionWidth: R, selectionColor: F, settings: H, isEditMode: M, isShiftPressed: P, withFrameSelection: L, withSkeleton: w }, D) => {
965
- const f = j(null), m = j(null);
966
- Bi(D, () => f.current);
967
- const { hoverMode: y } = Ta({ disabled: i, addShape: s, drawCanvasRef: f, setActiveTool: S, shapes: a, selectionMode: k, activeTool: v, isInsideComponent: Q, setCanvasOffset: Z, selectedShape: r, selectionCanvasRef: m, canvasOffsetStartPosition: x, setSelectedShape: o, setSelectionFrame: l, refreshHoveredShape: h, refreshSelectedShapes: p, setCanvasOffsetStartPosition: b, updateSingleShape: n, saveShapes: g, setSelectionMode: A, isShiftPressed: P, withFrameSelection: L, settings: H }), C = z((V) => {
968
- if (r?.type !== "text")
970
+ const c = Di(() => {
971
+ const { borders: d, center: h } = Y(t, o);
972
+ return ve({ point: [d.x, d.y], rotation: -t.rotation, origin: h });
973
+ }, [t, o]);
974
+ return p("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) => {
975
+ s(_1(d.target.innerHTML));
976
+ }, style: { "--react-paint-editor-toolbox-edittextbox-transform": `translate3D(${c[0] * i}px, ${c[1] * i}px, 0) rotate(${Nt(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 ?? ot } });
977
+ }, J1 = (e, i, t, a, s) => {
978
+ const { canvasSize: { width: n, height: o } } = t;
979
+ e.clearRect(0, 0, n, o), r1(e), t.gridGap && ((r, l, c, d) => {
980
+ const { gridGap: h, 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] % h, x = -u[1] % h, M = Math.ceil(l / g / h), y = Math.ceil(c / g / h);
983
+ for (let P = 0; P < M; P++)
984
+ r.moveTo(v + (P + 1) * h, x), r.lineTo(v + (P + 1) * h, x + c / g);
985
+ for (let P = 0; P < y; P++)
986
+ r.moveTo(v, x + (P + 1) * h), r.lineTo(v + l / g, x + (P + 1) * h);
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 || h1(e, a[r], t);
991
+ }, K1 = Fi.forwardRef(({ canGrow: e, disabled: i = !1, canvasSize: t, shapes: a, addShape: s, updateSingleShape: n, selectedShape: o, setSelectedShape: r, setSelectionFrame: l, hoveredShape: c, selectionFrame: d, refreshHoveredShape: h, refreshSelectedShapes: u, saveShapes: g, activeTool: v, setActiveTool: x, canvasOffsetStartPosition: M, setCanvasOffsetStartPosition: y, setCanvasOffset: P, isInsideComponent: Q, selectionMode: L, setSelectionMode: T, selectionWidth: E, selectionColor: Z, settings: H, isEditMode: C, isShiftPressed: V, withFrameSelection: k, withSkeleton: S }, F) => {
992
+ const w = ae(null), A = ae(null);
993
+ m1(F, () => w.current);
994
+ const { hoverMode: N } = X1({ disabled: i, addShape: s, drawCanvasRef: w, setActiveTool: x, shapes: a, selectionMode: L, activeTool: v, isInsideComponent: Q, setCanvasOffset: P, selectedShape: o, selectionCanvasRef: A, canvasOffsetStartPosition: M, setSelectedShape: r, setSelectionFrame: l, refreshHoveredShape: h, refreshSelectedShapes: u, setCanvasOffsetStartPosition: y, updateSingleShape: n, saveShapes: g, setSelectionMode: T, isShiftPressed: V, withFrameSelection: k, settings: H }), f = W((m) => {
995
+ if (o?.type !== "text")
969
996
  return;
970
- const U = f.current?.getContext("2d");
971
- if (!U)
997
+ const b = w.current?.getContext("2d");
998
+ if (!b)
972
999
  return;
973
- const K = tt(ga(U, r, V, H), H);
974
- n(K);
975
- }, [n, r, H]);
976
- return O(() => {
977
- const V = f.current?.getContext("2d");
978
- V && window.requestAnimationFrame(() => Ea(V, k, H, a, r));
979
- }, [a, k, r, H]), O(() => {
980
- const V = m.current?.getContext("2d");
981
- V && window.requestAnimationFrame(() => ((U, K, E, re, ge, ae, X, me, ne, ee) => {
982
- U.clearRect(0, 0, E.canvasSize.width, E.canvasSize.height), ee && me && me.id !== X?.id && re.type === "selection" && K.mode === "default" && x1({ ctx: U, shape: me, settings: E, selectionWidth: ge, selectionColor: ae, withAnchors: !1 }), X && re.type !== "brush" && x1({ ctx: U, shape: X, settings: E, selectionWidth: ge, selectionColor: ae, withAnchors: K.mode !== "textedition" }), ne && ya({ ctx: U, selectionFrame: ne, settings: E });
983
- })(V, k, H, v, R, F, r, c, d, w));
984
- }, [c, d, k, r, v, H, R, F, w]), u("div", { className: "react-paint-editor-canvas-box", children: N("div", { className: "react-paint-editor-canvas-container", "data-grow": e, children: [u("canvas", { className: si, ref: f, "data-grow": e, width: t.width, height: t.height }), M && u("canvas", { className: oi, ref: m, width: t.width, height: t.height, "data-grow": e, style: { "--react-paint-editor-canvas-cursor": v.type !== "selection" && v.type !== "move" || y.mode === "resize" ? "crosshair" : v.type === "move" || y.mode === "translate" ? "move" : y.mode === "rotate" ? "grab" : "default" } }), M && k.mode === "textedition" && r?.type === "text" && u(Da, { scaleRatio: t.scaleRatio, disabled: i, shape: r, defaultValue: k.defaultValue, updateValue: C, saveShapes: g, settings: H })] }) });
985
- }), Ia = ({ type: e, text: i, duration: t }) => {
986
- const [a, s] = I(!1);
987
- return O(() => {
1000
+ const R = st(N1(b, o, m, H), H);
1001
+ n(R);
1002
+ }, [n, o, H]);
1003
+ return U(() => {
1004
+ const m = w.current?.getContext("2d");
1005
+ m && window.requestAnimationFrame(() => J1(m, L, H, a, o));
1006
+ }, [a, L, o, H]), U(() => {
1007
+ const m = A.current?.getContext("2d");
1008
+ m && window.requestAnimationFrame(() => ((b, R, D, _, oe, $, j, ce, G, q) => {
1009
+ b.clearRect(0, 0, D.canvasSize.width, D.canvasSize.height), q && ce && ce.id !== j?.id && _.type === "selection" && R.mode === "default" && yi({ ctx: b, shape: ce, settings: D, selectionWidth: oe, selectionColor: $, withAnchors: !1 }), j && _.type !== "brush" && yi({ ctx: b, shape: j, settings: D, selectionWidth: oe, selectionColor: $, withAnchors: R.mode !== "textedition" }), G && z1({ ctx: b, selectionFrame: G, settings: D });
1010
+ })(m, L, H, v, E, Z, o, c, d, S));
1011
+ }, [c, d, L, o, v, H, E, Z, S]), p("div", { className: "react-paint-canvas-box", children: I("div", { className: "react-paint-canvas-container", "data-grow": e, children: [p("canvas", { className: a1, ref: w, "data-grow": e, width: t.width, height: t.height }), C && p("canvas", { className: n1, ref: A, width: t.width, height: t.height, "data-grow": e, style: { "--react-paint-canvas-cursor": v.type !== "selection" && v.type !== "move" || N.mode === "resize" ? "crosshair" : v.type === "move" || N.mode === "translate" ? "move" : N.mode === "rotate" ? "grab" : "default" } }), C && L.mode === "textedition" && o?.type === "text" && p(q1, { scaleRatio: t.scaleRatio, disabled: i, shape: o, defaultValue: L.defaultValue, updateValue: f, saveShapes: g, settings: H })] }) });
1012
+ }), wi = "ArrowUp", xi = "ArrowDown", Mi = "ArrowLeft", ki = "ArrowRight", ea = "Delete", ta = "Backspace", ia = "Escape", Li = "Shift", aa = "z", na = "Z", sa = "y", oa = "Y", Vi = "copy", Pi = "paste", ra = ({ isInsideComponent: e, selectedShape: i, isEditingText: t, settings: a, setSelectedShape: s, removeShape: n, pasteShape: o, updateShape: r, backwardShape: l, forwardShape: c, setShiftPressed: d }) => {
1013
+ const [h, u] = z(void 0);
1014
+ return U(() => {
1015
+ const g = (y) => {
1016
+ i && (t || (y.preventDefault(), u({ ...i })));
1017
+ }, v = (y) => {
1018
+ h && (t || (y.preventDefault(), o(((P, Q) => ({ ...Rt([20, 20], P, [0, 0], Q), id: se(`${P.type}_`) }))(h, a))));
1019
+ }, x = (y) => {
1020
+ y.key === Li && d(!1);
1021
+ }, M = (y) => {
1022
+ if (y.metaKey || y.ctrlKey) {
1023
+ if (y.key === na || y.key === aa)
1024
+ return y.preventDefault(), y.stopPropagation(), void l();
1025
+ if (y.key === oa || y.key === sa)
1026
+ return y.preventDefault(), y.stopPropagation(), void c();
1027
+ }
1028
+ if (y.key === Li)
1029
+ return void d(!0);
1030
+ if (!i)
1031
+ return;
1032
+ if (y.key === ia)
1033
+ return void s(void 0);
1034
+ if (t)
1035
+ return;
1036
+ const P = { [Mi]: [a.gridGap ? -a.gridGap : -1, 0], [ki]: [a.gridGap ? a.gridGap : 1, 0], [xi]: [0, a.gridGap ? a.gridGap : 1], [wi]: [0, a.gridGap ? -a.gridGap : -1] };
1037
+ switch (y.key) {
1038
+ case Mi:
1039
+ case ki:
1040
+ case xi:
1041
+ case wi:
1042
+ r(Rt(P[y.key], i, [0, 0], a));
1043
+ break;
1044
+ case ea:
1045
+ case ta:
1046
+ n(i);
1047
+ }
1048
+ };
1049
+ if (e)
1050
+ return document.addEventListener("keydown", M), document.addEventListener("keyup", x), document.addEventListener(Vi, g), document.addEventListener(Pi, v), () => {
1051
+ document.removeEventListener("keydown", M), document.removeEventListener("keyup", x), document.removeEventListener(Vi, g), document.removeEventListener(Pi, v);
1052
+ };
1053
+ }, [e, h, t, i, a, r, n, s, o, l, c, d]), {};
1054
+ }, Aa = ({ options: e, className: i, style: t, canvasProps: a }) => {
1055
+ const { shapesRef: s, selectedShape: n, selectionFrame: o, hoveredShape: r, addShape: l, setSelectedShape: c, setSelectionFrame: d, refreshSelectedShapes: h, refreshHoveredShape: u, removeShape: g, updateShape: v, backwardShape: x, forwardShape: M, saveShapes: y, refs: P, width: Q, height: L, settings: T, canvasSize: E, setCanvasSize: Z, setCanvasOffset: H, selectShape: C, activeTool: V, setActiveTool: k, isInsideComponent: S, isEditMode: F, isDisabled: w, canvas: { selection: { canvasSelectionColor: A, canvasSelectionWidth: N }, withSkeleton: f, withFrameSelection: m, canGrow: b, canShrink: R } } = a, { canvasBackgroundColor: D } = { ...S1, ...e }, _ = ae(null), [oe, $] = z(void 0), [j, ce] = z({ mode: "default" }), [G, q] = z(!1), me = W((te) => {
1056
+ l(te), C(te);
1057
+ }, [l, C]), fe = W((te) => {
1058
+ const he = te / Q;
1059
+ Z({ width: te, height: L * he, scaleRatio: he });
1060
+ }, [Q, L, Z]);
1061
+ return ra({ isInsideComponent: S, isEditingText: j.mode === "textedition", settings: T, selectedShape: n, setSelectedShape: c, removeShape: g, pasteShape: me, updateShape: v, backwardShape: x, forwardShape: M, setShiftPressed: q }), (({ onResized: te, element: he }) => {
1062
+ U(() => {
1063
+ const be = he.current;
1064
+ if (!be)
1065
+ return;
1066
+ const pe = new ResizeObserver((xe) => {
1067
+ const Ce = xe?.[0]?.borderBoxSize?.[0], { width: Me, height: Ae } = Ce ? { width: Ce.inlineSize, height: Ce.blockSize } : xe?.[0].contentRect ?? {};
1068
+ te(Me, Ae);
1069
+ });
1070
+ return pe.observe(be), () => {
1071
+ pe.unobserve(be);
1072
+ };
1073
+ }, [he, te]);
1074
+ })({ element: _, onResized: fe }), p("div", { ref: _, className: "react-paint-app-row" + (i ? ` ${i}` : ""), "data-grow": b, "data-shrink": R, style: { "--react-paint-app-row-width": E.width, "--react-paint-app-canvaswidth": `${Q}px`, "--react-paint-app-row-aspectratio": `calc(${E.width} / ${E.height})`, "--react-paint-app-canvas-bg": D, ...t }, children: p(K1, { ref: P.canvas, canGrow: b, disabled: w, isInsideComponent: S, activeTool: V, setActiveTool: k, canvasOffsetStartPosition: oe, setCanvasOffsetStartPosition: $, shapes: s.current, addShape: l, updateSingleShape: v, selectedShape: n, selectionFrame: o, setSelectedShape: c, setSelectionFrame: d, hoveredShape: r, refreshHoveredShape: u, refreshSelectedShapes: h, settings: T, setCanvasOffset: H, saveShapes: y, canvasSize: E, selectionMode: j, setSelectionMode: ce, selectionColor: A, selectionWidth: N, isEditMode: F, isShiftPressed: G, withFrameSelection: m, withSkeleton: f }) });
1075
+ }, la = ({ isLoading: e = !1 }) => {
1076
+ const [i, t] = z("hidden");
1077
+ return U(() => {
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 : p("div", { className: "react-paint-editor-loading", "data-loading": i, style: { "--react-paint-editor-loading-zindex": y1, "--react-paint-editor-loading-transition-duration": "300ms" }, children: I("div", { className: "react-paint-editor-loader", children: [p("div", {}), p("div", {}), p("div", {}), p("div", {})] }) });
1087
+ }, da = "infos", ca = 4e3, ha = ({ type: e, text: i, duration: t }) => {
1088
+ const [a, s] = z(!1);
1089
+ return U(() => {
988
1090
  const n = setTimeout(() => {
989
1091
  s(!0);
990
- }, 100), r = setTimeout(() => {
1092
+ }, 100), o = setTimeout(() => {
991
1093
  s(!1);
992
1094
  }, t - 500 - 100);
993
1095
  return () => {
994
- clearTimeout(n), clearTimeout(r);
1096
+ clearTimeout(n), clearTimeout(o);
995
1097
  };
996
- }, [t]), u("div", { className: "react-paint-editor-snackbar", "data-is-shown": +a, "data-type": e, style: { "--react-paint-editor-panel-transition-duration": "500ms" }, children: i });
997
- }, Wa = ({ snackbarList: e }) => u("div", { className: "react-paint-editor-snackbar-container", style: { "--react-paint-editor-snackbar-zindex": It }, children: e.map((i) => u(Ia, { ...i }, i.id)) }), B = R1.forwardRef((e, i) => {
1098
+ }, [t]), p("div", { className: "react-paint-editor-snackbar", "data-is-shown": +a, "data-type": e, style: { "--react-paint-editor-panel-transition-duration": "500ms" }, children: i });
1099
+ }, pa = ({ snackbarList: e }) => p("div", { className: "react-paint-editor-snackbar-container", style: { "--react-paint-editor-snackbar-zindex": Q1 }, children: e.map((i) => p(ha, { ...i }, i.id)) }), B = Fi.forwardRef((e, i) => {
998
1100
  if (e.type === "file" || e.type === "color") {
999
- const { hidden: d = !1, disabled: h = !1, selected: p = !1, icon: g, children: v, className: S = "", title: x, onClick: b, ...Z } = e;
1000
- return N("label", { className: `react-paint-editor-button ${S}`, title: x, onClick: b, "data-disabled": +h, "data-selected": +p, "data-hidden": +d, children: [u("input", { ref: i, disabled: h, ...Z }), N("span", { className: "react-paint-editor-button-content", children: [v && u("span", { className: "react-paint-editor-button-children", children: v }), g && u("span", { className: "react-paint-editor-button-icon", dangerouslySetInnerHTML: { __html: g } })] })] });
1101
+ const { hidden: d = !1, disabled: h = !1, selected: u = !1, icon: g, children: v, className: x = "", title: M, onClick: y, ...P } = e;
1102
+ return I("label", { className: `react-paint-editor-button ${x}`, title: M, onClick: y, "data-disabled": +h, "data-selected": +u, "data-hidden": +d, children: [p("input", { ref: i, disabled: h, ...P }), I("span", { className: "react-paint-editor-button-content", children: [v && p("span", { className: "react-paint-editor-button-children", children: v }), g && p("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: r, type: o = "button", className: l = "", ...c } = e;
1003
- return u("button", { className: `react-paint-editor-button ${l}`, ref: i, disabled: a, "data-disabled": +a, "data-selected": +s, "data-hidden": +t, type: o, ...c, children: N("span", { className: "react-paint-editor-button-content", children: [r && u("span", { className: "react-paint-editor-button-children", children: r }), n && u("span", { className: "react-paint-editor-button-icon", dangerouslySetInnerHTML: { __html: n } })] }) });
1004
- }), Ye = ({ children: e, title: i = "", className: t = "", position: a = "bottom", fitContainer: s = !1, alignment: n = "center" }) => N("div", { className: `react-paint-editor-panel ${t}`, "data-fitcontainer": s, "data-position": a, "data-alignment": n, style: { "--react-paint-editor-panel-zindex": It }, children: [i && u("h3", { className: "react-paint-editor-panel-title", children: i }), e] }), za = (e) => {
1104
+ const { hidden: t = !1, disabled: a = !1, selected: s = !1, icon: n, children: o, type: r = "button", className: l = "", ...c } = e;
1105
+ return p("button", { className: `react-paint-editor-button ${l}`, ref: i, disabled: a, "data-disabled": +a, "data-selected": +s, "data-hidden": +t, type: r, ...c, children: I("span", { className: "react-paint-editor-button-content", children: [o && p("span", { className: "react-paint-editor-button-children", children: o }), n && p("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 && p("h3", { className: "react-paint-editor-panel-title", children: i }), e] }), ua = (e) => {
1005
1107
  switch (e) {
1006
1108
  case "brush":
1007
- return B1;
1109
+ return Ri;
1008
1110
  case "line":
1009
- return _1;
1111
+ return zi;
1010
1112
  case "polygon":
1011
- return $t;
1113
+ return zt;
1012
1114
  case "curve":
1013
- return j1;
1115
+ return $i;
1014
1116
  case "rect":
1015
1117
  case "square":
1016
- return Wt;
1118
+ return It;
1017
1119
  case "circle":
1018
1120
  case "ellipse":
1019
- return zt;
1121
+ return Wt;
1020
1122
  case "text":
1021
- return Y1;
1123
+ return Wi;
1022
1124
  case "picture":
1023
- return Ot;
1125
+ return $t;
1024
1126
  case "triangle":
1025
1127
  return "";
1026
1128
  }
1027
- }, $a = ({ disabled: e = !1, shape: i, selected: t, layoutDragging: a, toggleShapeVisibility: s, toggleShapeLock: n, setLayoutDragging: r, handleRemove: o, handleSelect: l, onMoveShapes: c }) => {
1028
- const d = j(null), { isOver: h } = (({ disabled: p = !1, ref: g, shape: v, layoutDragging: S, setLayoutDragging: x, handleSelect: b, onMoveShapes: Z }) => {
1029
- const [Q, k] = I(!1);
1030
- return O(() => {
1031
- S || k(!1);
1032
- }, [S]), O(() => {
1033
- const A = g.current;
1034
- if (!A)
1129
+ }, ga = ({ disabled: e = !1, shape: i, selected: t, layoutDragging: a, toggleShapeVisibility: s, toggleShapeLock: n, setLayoutDragging: o, handleRemove: r, handleSelect: l, onMoveShapes: c }) => {
1130
+ const d = ae(null), { isOver: h } = (({ disabled: u = !1, ref: g, shape: v, layoutDragging: x, setLayoutDragging: M, handleSelect: y, onMoveShapes: P }) => {
1131
+ const [Q, L] = z(!1);
1132
+ return U(() => {
1133
+ x || L(!1);
1134
+ }, [x]), U(() => {
1135
+ const T = g.current;
1136
+ if (!T)
1035
1137
  return;
1036
- const R = () => {
1037
- x(void 0);
1038
- }, F = (w) => (w.preventDefault && w.preventDefault(), !1), H = (w) => {
1039
- b(v), w.dataTransfer && (w.dataTransfer.effectAllowed = "move", w.dataTransfer.setData("draggableShapeId", v.id), x(v.id));
1040
- }, M = () => {
1041
- S !== v.id && k(!0);
1042
- }, P = () => {
1043
- k(!1);
1044
- }, L = (w) => (w.stopPropagation(), w.dataTransfer && Z(w.dataTransfer.getData("draggableShapeId"), v.id), !1);
1045
- return p || (A.addEventListener("dragstart", H), A.addEventListener("dragend", R), A.addEventListener("dragover", F), A.addEventListener("dragenter", M), A.addEventListener("dragleave", P), A.addEventListener("drop", L)), () => {
1046
- p || (A.removeEventListener("dragstart", H), A.removeEventListener("dragend", R), A.removeEventListener("dragover", F), A.removeEventListener("dragenter", M), A.removeEventListener("dragleave", P), A.removeEventListener("drop", L));
1138
+ const E = () => {
1139
+ M(void 0);
1140
+ }, Z = (S) => (S.preventDefault && S.preventDefault(), !1), H = (S) => {
1141
+ y(v), S.dataTransfer && (S.dataTransfer.effectAllowed = "move", S.dataTransfer.setData("draggableShapeId", v.id), M(v.id));
1142
+ }, C = () => {
1143
+ x !== v.id && L(!0);
1144
+ }, V = () => {
1145
+ L(!1);
1146
+ }, k = (S) => (S.stopPropagation(), S.dataTransfer && P(S.dataTransfer.getData("draggableShapeId"), v.id), !1);
1147
+ return u || (T.addEventListener("dragstart", H), T.addEventListener("dragend", E), T.addEventListener("dragover", Z), T.addEventListener("dragenter", C), T.addEventListener("dragleave", V), T.addEventListener("drop", k)), () => {
1148
+ u || (T.removeEventListener("dragstart", H), T.removeEventListener("dragend", E), T.removeEventListener("dragover", Z), T.removeEventListener("dragenter", C), T.removeEventListener("dragleave", V), T.removeEventListener("drop", k));
1047
1149
  };
1048
- }, [p, g, v, x, b, Z, S]), { isOver: Q };
1049
- })({ disabled: e, ref: d, shape: i, layoutDragging: a, setLayoutDragging: r, handleSelect: l, onMoveShapes: c });
1050
- return N("div", { className: "react-paint-editor-layout", "data-disabled": +e, draggable: !e, "data-is-dragging": +(a === i.id), "data-is-over": +h, onClick: (p) => {
1051
- e || (p.preventDefault(), p.stopPropagation(), l(i));
1052
- }, "data-selected": +t, ref: d, children: [u("span", { dangerouslySetInnerHTML: { __html: za(i.type) } }), u("span", { children: i.id }), u("div", { className: "react-paint-editor-layouts-separator" }), u(B, { className: "react-paint-editor-layouts-visible-button", title: i.visible ? "Hide" : "Show", "data-visible": i.visible !== !1, disabled: e, selected: t, onClick: (p) => {
1053
- e || (p.preventDefault(), p.stopPropagation(), s(i));
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>' }), u(B, { className: "react-paint-editor-layouts-locked-button", title: i.locked ? "Locked" : "Unlocked", "data-locked": !!i.locked, disabled: e, selected: t, onClick: (p) => {
1055
- e || (p.preventDefault(), p.stopPropagation(), n(i));
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>' }), u(B, { className: "react-paint-editor-layouts-remove-button", title: "Remove", disabled: e, onClick: (p) => {
1057
- e || (p.preventDefault(), p.stopPropagation(), o(i));
1058
- }, icon: X1 })] });
1059
- }, Oa = ({ gridFormat: e, setGridFormat: i, disabled: t = !1, shapes: a, removeShape: s, toggleShapeVisibility: n, toggleShapeLock: r, selectedShape: o, moveShapes: l, selectShape: c, isLayoutPanelShown: d }) => {
1060
- const [h, p] = I(void 0);
1061
- return d ? u(Ye, { alignment: "right", className: "react-paint-editor-layouts-panel", children: u("div", { className: "react-paint-editor-layouts-panel-content", children: N("div", { className: "react-paint-editor-layouts-scrolling-content", children: [N("div", { className: "react-paint-editor-layouts-row", children: [u("span", { className: "react-paint-editor-layouts-subtitle", children: "Grid" }), u(B, { 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 === 0, disabled: t, onClick: () => i(0) }), ["S", "M", "L"].map((g, v) => u(B, { className: "react-paint-editor-layouts-grid-button", selected: e === v + 1, disabled: t, onClick: () => i(v + 1), children: g }, g))] }), u("hr", {}), u("div", { className: "react-paint-editor-layouts", children: a.length === 0 ? u("div", { className: "react-paint-editor-layouts-placeholder", children: "No layer yet" }) : a.map((g) => u($a, { shape: g, disabled: t, layoutDragging: h, setLayoutDragging: p, selected: o?.id === g.id, handleSelect: c, handleRemove: s, onMoveShapes: l, toggleShapeVisibility: n, toggleShapeLock: r }, g.id)) })] }) }) }) : null;
1062
- }, _t = ({ children: e, onClose: i, position: t = "center", className: a = "" }) => N("div", { className: "react-paint-editor-modal", "data-position": t, style: { "--react-paint-editor-modal-zindex": It }, children: [u("div", { className: "react-paint-editor-modal-mask", onClick: i }), u("div", { className: `react-paint-editor-modal-panel ${a}`, children: e })] }), lt = ({ selectedSettings: e, setSelectedSettings: i, title: t = "Choisissez une couleur", mode: a = "fill", disabled: s = !1, values: n, field: r, value: o = "", valueChanged: l }) => {
1063
- const [c] = I(J("settings_")), d = e === c;
1064
- return n.length ? N(oe, { children: [u(B, { selected: d, title: t, disabled: s, onClick: () => {
1150
+ }, [u, g, v, M, y, P, x]), { isOver: Q };
1151
+ })({ disabled: e, ref: d, shape: i, layoutDragging: a, setLayoutDragging: o, handleSelect: l, onMoveShapes: c });
1152
+ return I("div", { className: "react-paint-editor-layout", "data-disabled": +e, draggable: !e, "data-is-dragging": +(a === i.id), "data-is-over": +h, onClick: (u) => {
1153
+ e || (u.preventDefault(), u.stopPropagation(), l(i));
1154
+ }, "data-selected": +t, ref: d, children: [p("span", { dangerouslySetInnerHTML: { __html: ua(i.type) } }), p("span", { children: i.id }), p("div", { className: "react-paint-editor-layouts-separator" }), p(B, { 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>' }), p(B, { 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>' }), p(B, { className: "react-paint-editor-layouts-remove-button", title: "Remove", disabled: e, onClick: (u) => {
1159
+ e || (u.preventDefault(), u.stopPropagation(), r(i));
1160
+ }, icon: Ii })] });
1161
+ }, va = ({ gridFormat: e, setGridFormat: i, disabled: t = !1, shapes: a, removeShape: s, toggleShapeVisibility: n, toggleShapeLock: o, selectedShape: r, moveShapes: l, selectShape: c, isLayoutPanelShown: d }) => {
1162
+ const [h, u] = z(void 0);
1163
+ return d ? p(et, { alignment: "right", className: "react-paint-editor-layouts-panel", children: p("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: [p("span", { className: "react-paint-editor-layouts-subtitle", children: "Grid" }), p(B, { 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) => p(B, { className: "react-paint-editor-layouts-grid-button", selected: e === g, disabled: t, onClick: () => i(g), children: g.charAt(0).toUpperCase() }, g))] }), p("hr", {}), p("div", { className: "react-paint-editor-layouts", children: a.length === 0 ? p("div", { className: "react-paint-editor-layouts-placeholder", children: "No layer yet" }) : a.map((g) => p(ga, { shape: g, disabled: t, layoutDragging: h, setLayoutDragging: u, selected: r?.id === g.id, handleSelect: c, handleRemove: s, onMoveShapes: l, toggleShapeVisibility: n, toggleShapeLock: o }, g.id)) })] }) }) }) : null;
1164
+ }, Yt = ({ 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: [p("div", { className: "react-paint-editor-modal-mask", onClick: i }), p("div", { className: `react-paint-editor-modal-panel ${a}`, children: e })] }), ct = ({ 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 [c] = z(se("settings_")), d = e === c;
1166
+ return n.length ? I(ue, { children: [p(B, { selected: d, title: t, disabled: s, onClick: () => {
1065
1167
  i((h) => h === c ? void 0 : c);
1066
- }, icon: o === "transparent" ? a === "fill" ? s1 : n1 : void 0, children: o !== "transparent" && u("div", { className: "react-paint-editor-colorfield-color", "data-mode": a, style: { "--react-paint-editor-colorfield-color-value": o } }) }), d && u(Ye, { title: t, alignment: "left", children: N("div", { className: "react-paint-editor-colorfield-wrapper", children: [n.map((h, p) => u(B, { title: h, selected: h === o, color: h, icon: h === "transparent" ? a === "fill" ? s1 : n1 : void 0, onClick: () => {
1067
- l(r, h);
1068
- }, children: h !== "transparent" && u("div", { className: "react-paint-editor-colorfield-color", color: h, "data-mode": a, style: { "--react-paint-editor-colorfield-color-value": h } }) }, h)), u(B, { type: "color", title: "Custom color", selected: !n.includes(o), value: o, onChange: (h) => {
1069
- const p = +h.target.value;
1070
- l(r, Number.isNaN(p) ? h.target.value : p);
1071
- }, children: u("div", { className: "react-paint-editor-colorfield-customcolor", style: { "--react-paint-editor-colorfield-color-value": n.includes(o) ? "var(--react-paint-editor-app-font-color)" : o }, children: u("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;
1072
- }, Ua = ({ disabled: e = !1, selectedShape: i, removeShape: t }) => u(B, { title: "Delete", disabled: e, "data-disabled": +e, onClick: () => {
1168
+ }, icon: r === "transparent" ? a === "fill" ? ti : ei : void 0, children: r !== "transparent" && p("div", { className: "react-paint-editor-colorfield-color", "data-mode": a, style: { "--react-paint-editor-colorfield-color-value": r } }) }), d && p(et, { title: t, alignment: "left", children: I("div", { className: "react-paint-editor-colorfield-wrapper", children: [n.map((h, u) => p(B, { title: h, selected: h === r, color: h, icon: h === "transparent" ? a === "fill" ? ti : ei : void 0, onClick: () => {
1169
+ l(o, h);
1170
+ }, children: h !== "transparent" && p("div", { className: "react-paint-editor-colorfield-color", color: h, "data-mode": a, style: { "--react-paint-editor-colorfield-color-value": h } }) }, h)), p(B, { type: "color", title: "Custom color", selected: !n.includes(r), value: r, onChange: (h) => {
1171
+ const u = +h.target.value;
1172
+ l(o, Number.isNaN(u) ? h.target.value : u);
1173
+ }, children: p("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: p("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
+ }, fa = ({ disabled: e = !1, selectedShape: i, removeShape: t }) => p(B, { title: "Delete", disabled: e, "data-disabled": +e, onClick: () => {
1073
1175
  t(i);
1074
- }, icon: X1 }), jt = ({ CustomOption: e, selectedSettings: i, setSelectedSettings: t, title: a = "Choisissez l'option", disabled: s = !1, field: n, icon: r, values: o, defaultValue: l, valueChanged: c }) => {
1075
- const [d] = I(J("settings_")), h = i === d;
1076
- return o.length ? N(oe, { children: [u(B, { selected: h, title: a, icon: r, disabled: s, onClick: () => {
1077
- t((p) => p === d ? void 0 : d);
1078
- } }), h && u(Ye, { title: a, alignment: "left", fitContainer: !0, children: u("div", { className: "react-paint-editor-selectfield-wrapper", children: o.map((p) => u(B, { title: `${p}`, onClick: () => ((g) => {
1176
+ }, icon: Ii }), jt = ({ CustomOption: e, selectedSettings: i, setSelectedSettings: t, title: a = "Choisissez l'option", disabled: s = !1, field: n, icon: o, values: r, defaultValue: l, valueChanged: c }) => {
1177
+ const [d] = z(se("settings_")), h = i === d;
1178
+ return r.length ? I(ue, { children: [p(B, { selected: h, title: a, icon: o, disabled: s, onClick: () => {
1179
+ t((u) => u === d ? void 0 : d);
1180
+ } }), h && p(et, { title: a, alignment: "left", fitContainer: !0, children: p("div", { className: "react-paint-editor-selectfield-wrapper", children: r.map((u) => p(B, { title: `${u}`, onClick: () => ((g) => {
1079
1181
  c(n, g);
1080
- })(p), selected: l === p, style: { "--react-paint-editor-button-padding": "16px" }, children: u(e, { children: p }) }, p)) }) })] }) : null;
1081
- }, Ba = ({ children: e }) => u("span", { className: "react-paint-editor-fontfamily-option", style: { "--react-paint-editor-fontfamily-family": e }, children: e }), Z1 = ({ selectedSettings: e, setSelectedSettings: i, disabled: t = !1, values: a, defaultValue: s, valueChanged: n }) => a.length ? u(jt, { selectedSettings: e, setSelectedSettings: i, CustomOption: Ba, 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, Xa = ({ disabled: e, toggleLayoutPanel: i }) => u(B, { 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" }), Ya = ({ children: e }) => N("span", { className: "react-paint-editor-linearrow-option", "data-type": e, children: [u("span", { className: "react-paint-editor-linearrow-left" }), u("span", { className: "react-paint-editor-linearrow-right" })] }), F1 = ({ selectedSettings: e, setSelectedSettings: i, disabled: t = !1, values: a, defaultValue: s, valueChanged: n }) => a.length ? u(jt, { selectedSettings: e, setSelectedSettings: i, CustomOption: Ya, 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, _a = ({ children: e }) => N("span", { className: "react-paint-editor-linetype-option", "data-type": e, children: [u("span", {}), u("span", {}), u("span", {}), u("span", {}), u("span", {}), u("span", {}), u("span", {})] }), N1 = ({ selectedSettings: e, setSelectedSettings: i, disabled: t = !1, values: a, defaultValue: s, valueChanged: n }) => a.length ? u(jt, { selectedSettings: e, setSelectedSettings: i, CustomOption: _a, 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, Ke = ({ selectedSettings: e, setSelectedSettings: i, title: t = "Choisissez l'intervalle", icon: a, disabled: s = !1, field: n, value: r = 1, min: o = 1, max: l = 20, step: c = 1, unity: d = "", valueChanged: h }) => {
1082
- const p = Math.round(r), [g] = I(J("settings_")), v = j(null);
1083
- O(() => () => {
1182
+ })(u), selected: l === u, style: { "--react-paint-editor-button-padding": "16px" }, children: p(e, { children: u }) }, u)) }) })] }) : null;
1183
+ }, ma = ({ children: e }) => p("span", { className: "react-paint-editor-fontfamily-option", style: { "--react-paint-editor-fontfamily-family": e }, children: e }), Hi = ({ selectedSettings: e, setSelectedSettings: i, disabled: t = !1, values: a, defaultValue: s, valueChanged: n }) => a.length ? p(jt, { selectedSettings: e, setSelectedSettings: i, CustomOption: ma, 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, ya = ({ disabled: e, toggleLayoutPanel: i }) => p(B, { 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" }), Qa = ({ children: e }) => I("span", { className: "react-paint-editor-linearrow-option", "data-type": e, children: [p("span", { className: "react-paint-editor-linearrow-left" }), p("span", { className: "react-paint-editor-linearrow-right" })] }), Ti = ({ selectedSettings: e, setSelectedSettings: i, disabled: t = !1, values: a, defaultValue: s, valueChanged: n }) => a.length ? p(jt, { selectedSettings: e, setSelectedSettings: i, CustomOption: Qa, 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, Sa = ({ children: e }) => I("span", { className: "react-paint-editor-linetype-option", "data-type": e, children: [p("span", {}), p("span", {}), p("span", {}), p("span", {}), p("span", {}), p("span", {}), p("span", {})] }), Ai = ({ selectedSettings: e, setSelectedSettings: i, disabled: t = !1, values: a, defaultValue: s, valueChanged: n }) => a.length ? p(jt, { selectedSettings: e, setSelectedSettings: i, CustomOption: Sa, 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, at = ({ 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: c = 1, unity: d = "", valueChanged: h }) => {
1184
+ const u = Math.round(o), [g] = z(se("settings_")), v = ae(null);
1185
+ U(() => () => {
1084
1186
  v.current && clearTimeout(v.current);
1085
1187
  }, []);
1086
- const S = e === g;
1087
- return o === l ? null : N(oe, { children: [u(B, { selected: S, title: t, disabled: s, icon: a, onClick: () => {
1088
- i((x) => x === g ? void 0 : g);
1089
- } }), S && u(Ye, { title: t, alignment: "left", fitContainer: !0, children: u("div", { children: N("label", { className: "react-paint-editor-rangefield", children: [u("input", { type: "range", min: o, max: l, step: c, value: r, onChange: (x) => {
1090
- const b = +x.target.value;
1091
- h(n, Number.isNaN(b) ? x.target.value : b, !1), v.current && clearTimeout(v.current), v.current = setTimeout(() => {
1092
- h(n, Number.isNaN(b) ? x.target.value : b, !0);
1188
+ const x = e === g;
1189
+ return r === l ? null : I(ue, { children: [p(B, { selected: x, title: t, disabled: s, icon: a, onClick: () => {
1190
+ i((M) => M === g ? void 0 : g);
1191
+ } }), x && p(et, { title: t, alignment: "left", fitContainer: !0, children: p("div", { children: I("label", { className: "react-paint-editor-rangefield", children: [p("input", { type: "range", min: r, max: l, step: c, value: o, onChange: (M) => {
1192
+ const y = +M.target.value;
1193
+ h(n, Number.isNaN(y) ? M.target.value : y, !1), v.current && clearTimeout(v.current), v.current = setTimeout(() => {
1194
+ h(n, Number.isNaN(y) ? M.target.value : y, !0);
1093
1195
  }, 1e3);
1094
- } }), N("span", { children: [p, d] })] }) }) })] });
1095
- }, D1 = ({ selectedSettings: e, setSelectedSettings: i, disabled: t = !1, min: a, max: s, step: n, value: r, valueChanged: o }) => a === s ? null : u(Ke, { selectedSettings: e, setSelectedSettings: i, icon: $t, title: "Nombre de points", disabled: t, field: "pointsCount", min: a, max: s, step: n, unity: "", value: r, valueChanged: o }), dt = ({ setSelectedSettings: e, disabled: i = !1, field: t, icon: a, values: s, value: n = !1, valueChanged: r }) => {
1096
- const [o] = I(J("settings_"));
1097
- return s.length !== 2 ? null : u(B, { onClick: () => {
1098
- e((l) => l === o ? void 0 : o), r(t, !n);
1196
+ } }), I("span", { children: [u, d] })] }) }) })] });
1197
+ }, Zi = ({ selectedSettings: e, setSelectedSettings: i, disabled: t = !1, min: a, max: s, step: n, value: o, valueChanged: r }) => a === s ? null : p(at, { selectedSettings: e, setSelectedSettings: i, icon: zt, title: "Nombre de points", disabled: t, field: "pointsCount", min: a, max: s, step: n, unity: "", value: o, valueChanged: r }), ht = ({ setSelectedSettings: e, disabled: i = !1, field: t, icon: a, values: s, value: n = !1, valueChanged: o }) => {
1198
+ const [r] = z(se("settings_"));
1199
+ return s.length !== 2 ? null : p(B, { onClick: () => {
1200
+ e((l) => l === r ? void 0 : r), o(t, !n);
1099
1201
  }, selected: n, disabled: i, icon: a });
1100
- }, Zt = ({ activeTool: e, selectedShape: i, selectedShapeTool: t, disabled: a, selectedSettings: s, setSelectedSettings: n, handleShapeStyleChange: r, handlePolygonLinesCount: o, handleShapeFontFamilyChange: l }) => i ? u(oe, { children: t && N(oe, { children: ["strokeColor" in t.settings && u(lt, { selectedSettings: s, setSelectedSettings: n, title: "Couleur du trait", mode: "stroke", disabled: a, field: "strokeColor", value: i.style?.strokeColor, valueChanged: r, values: t.settings.strokeColor.values }), "fillColor" in t.settings && u(lt, { selectedSettings: s, setSelectedSettings: n, title: "Couleur de fond", disabled: a, field: "fillColor", value: i.style?.fillColor, valueChanged: r, values: t.settings.fillColor.values }), "lineWidth" in t.settings && u(Ke, { selectedSettings: s, setSelectedSettings: n, title: "Epaisseur du trait", icon: a1, disabled: a, field: "lineWidth", value: i.style?.lineWidth, valueChanged: r, unity: "px", min: t.settings.lineWidth.min, max: t.settings.lineWidth.max, step: t.settings.lineWidth.step }), "lineDash" in t.settings && u(N1, { selectedSettings: s, setSelectedSettings: n, disabled: a, defaultValue: i.style?.lineDash, valueChanged: r, values: t.settings.lineDash.values }), "lineArrow" in t.settings && u(F1, { selectedSettings: s, setSelectedSettings: n, disabled: a, defaultValue: i.style?.lineArrow, valueChanged: r, values: t.settings.lineArrow.values }), "pointsCount" in t.settings && u(D1, { selectedSettings: s, setSelectedSettings: n, disabled: a, valueChanged: o, min: t.settings.pointsCount.min, max: t.settings.pointsCount.max, step: t.settings.pointsCount.step, value: i.style?.pointsCount }), "fontFamily" in t.settings && u(Z1, { selectedSettings: s, setSelectedSettings: n, disabled: a, valueChanged: l, values: t.settings.fontFamily.values, defaultValue: i.style?.fontFamily }), "fontBold" in t.settings && u(dt, { setSelectedSettings: n, disabled: a, field: "fontBold", icon: t1, valueChanged: l, values: t.settings.fontBold.values, value: i.style?.fontBold }), "fontItalic" in t.settings && u(dt, { setSelectedSettings: n, disabled: a, field: "fontItalic", icon: i1, valueChanged: l, values: t.settings.fontItalic.values, value: i.style?.fontItalic }), "opacity" in t.settings && u(Ke, { selectedSettings: s, setSelectedSettings: n, title: "Opacité", icon: e1, 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: r })] }) }) : "settings" in e ? N(oe, { children: ["strokeColor" in e.settings && u(lt, { selectedSettings: s, setSelectedSettings: n, title: "Couleur du trait", mode: "stroke", disabled: a, field: "strokeColor", value: e.settings.strokeColor.default, valueChanged: r, values: e.settings.strokeColor.values }), "fillColor" in e.settings && u(lt, { selectedSettings: s, setSelectedSettings: n, title: "Couleur de fond", disabled: a, field: "fillColor", value: e.settings.fillColor.default, valueChanged: r, values: e.settings.fillColor.values }), "lineWidth" in e.settings && u(Ke, { selectedSettings: s, setSelectedSettings: n, title: "Epaisseur du trait", disabled: a, field: "lineWidth", icon: a1, value: e.settings.lineWidth.default, valueChanged: r, unity: "px", min: e.settings.lineWidth.min, max: e.settings.lineWidth.max, step: e.settings.lineWidth.step }), "lineDash" in e.settings && u(N1, { selectedSettings: s, setSelectedSettings: n, disabled: a, defaultValue: e.settings.lineDash.default, valueChanged: r, values: e.settings.lineDash.values }), "lineArrow" in e.settings && u(F1, { selectedSettings: s, setSelectedSettings: n, disabled: a, defaultValue: e.settings.lineArrow.default, valueChanged: r, values: e.settings.lineArrow.values }), "pointsCount" in e.settings && u(D1, { selectedSettings: s, setSelectedSettings: n, disabled: a, valueChanged: o, min: e.settings.pointsCount.min, max: e.settings.pointsCount.max, step: e.settings.pointsCount.step, value: e.settings.pointsCount.default }), "fontFamily" in e.settings && u(Z1, { selectedSettings: s, setSelectedSettings: n, disabled: a, valueChanged: l, values: e.settings.fontFamily.values, defaultValue: e.settings.fontFamily.default }), "fontBold" in e.settings && u(dt, { setSelectedSettings: n, disabled: a, field: "fontBold", icon: t1, valueChanged: l, values: e.settings.fontBold.values, value: e.settings.fontBold.default }), "fontItalic" in e.settings && u(dt, { setSelectedSettings: n, disabled: a, field: "fontItalic", icon: i1, valueChanged: l, values: e.settings.fontItalic.values, value: e.settings.fontItalic.default }), "opacity" in e.settings && u(Ke, { selectedSettings: s, setSelectedSettings: n, title: "Opacité", icon: e1, 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: r })] }) : null, ja = ({ width: e, disabled: i = !1, availableTools: t, updateToolSettings: a, layersManipulation: s, toggleLayoutPanel: n, activeTool: r, selectedShape: o, canvas: l, settings: c, updateShape: d, removeShape: h }) => {
1101
- const [p, g] = I(void 0), [v, S] = I(!1), x = () => {
1102
- S((F) => !F);
1103
- }, b = o ? t.find((F) => F.id === o.toolId) || t.find((F) => F.type === o.type) : void 0, Z = (b ? Object.keys(b.settings).length + 1 : "settings" in r ? Object.keys(r.settings).length : 0) + (s ? 1 : 0), Q = e < 40 * Z, k = (F, H, M = !0) => {
1104
- o ? (d(tt(te(["style", F], H, o), c), M), b && a(b.id, F, H)) : a(r.id, F, H);
1105
- }, A = (F, H) => {
1106
- if (o) {
1107
- if (o.type !== "text")
1202
+ }, Zt = ({ activeTool: e, selectedShape: i, selectedShapeTool: t, disabled: a, selectedSettings: s, setSelectedSettings: n, handleShapeStyleChange: o, handlePolygonLinesCount: r, handleShapeFontFamilyChange: l }) => i ? p(ue, { children: t && I(ue, { children: ["strokeColor" in t.settings && p(ct, { 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 && p(ct, { 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 && p(at, { selectedSettings: s, setSelectedSettings: n, title: "Epaisseur du trait", icon: Kt, 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 && p(Ai, { selectedSettings: s, setSelectedSettings: n, disabled: a, defaultValue: i.style?.lineDash, valueChanged: o, values: t.settings.lineDash.values }), "lineArrow" in t.settings && p(Ti, { selectedSettings: s, setSelectedSettings: n, disabled: a, defaultValue: i.style?.lineArrow, valueChanged: o, values: t.settings.lineArrow.values }), "pointsCount" in t.settings && p(Zi, { 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 && p(Hi, { selectedSettings: s, setSelectedSettings: n, disabled: a, valueChanged: l, values: t.settings.fontFamily.values, defaultValue: i.style?.fontFamily }), "fontBold" in t.settings && p(ht, { setSelectedSettings: n, disabled: a, field: "fontBold", icon: qt, valueChanged: l, values: t.settings.fontBold.values, value: i.style?.fontBold }), "fontItalic" in t.settings && p(ht, { setSelectedSettings: n, disabled: a, field: "fontItalic", icon: Jt, valueChanged: l, values: t.settings.fontItalic.values, value: i.style?.fontItalic }), "opacity" in t.settings && p(at, { selectedSettings: s, setSelectedSettings: n, title: "Opacité", icon: _t, 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(ue, { children: ["strokeColor" in e.settings && p(ct, { 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 && p(ct, { 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 && p(at, { selectedSettings: s, setSelectedSettings: n, title: "Epaisseur du trait", disabled: a, field: "lineWidth", icon: Kt, 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 && p(Ai, { selectedSettings: s, setSelectedSettings: n, disabled: a, defaultValue: e.settings.lineDash.default, valueChanged: o, values: e.settings.lineDash.values }), "lineArrow" in e.settings && p(Ti, { selectedSettings: s, setSelectedSettings: n, disabled: a, defaultValue: e.settings.lineArrow.default, valueChanged: o, values: e.settings.lineArrow.values }), "pointsCount" in e.settings && p(Zi, { 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 && p(Hi, { selectedSettings: s, setSelectedSettings: n, disabled: a, valueChanged: l, values: e.settings.fontFamily.values, defaultValue: e.settings.fontFamily.default }), "fontBold" in e.settings && p(ht, { setSelectedSettings: n, disabled: a, field: "fontBold", icon: qt, valueChanged: l, values: e.settings.fontBold.values, value: e.settings.fontBold.default }), "fontItalic" in e.settings && p(ht, { setSelectedSettings: n, disabled: a, field: "fontItalic", icon: Jt, valueChanged: l, values: e.settings.fontItalic.values, value: e.settings.fontItalic.default }), "opacity" in e.settings && p(at, { selectedSettings: s, setSelectedSettings: n, title: "Opacité", icon: _t, 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, ba = ({ width: e, disabled: i = !1, availableTools: t, updateToolSettings: a, layersManipulation: s, toggleLayoutPanel: n, activeTool: o, selectedShape: r, canvas: l, settings: c, updateShape: d, removeShape: h }) => {
1203
+ const [u, g] = z(void 0), [v, x] = z(!1), M = () => {
1204
+ x((Z) => !Z);
1205
+ }, y = r ? t.find((Z) => Z.id === r.toolId) || t.find((Z) => Z.type === r.type) : void 0, P = (y ? Object.keys(y.settings).length + 1 : "settings" in o ? Object.keys(o.settings).length : 0) + (s ? 1 : 0), Q = e < 40 * P, L = (Z, H, C = !0) => {
1206
+ r ? (d(st(le(["style", Z], H, r), c), C), y && a(y.id, Z, H)) : a(o.id, Z, H);
1207
+ }, T = (Z, H) => {
1208
+ if (r) {
1209
+ if (r.type !== "text")
1108
1210
  return;
1109
- const M = l?.getContext("2d");
1110
- if (!M)
1211
+ const C = l?.getContext("2d");
1212
+ if (!C)
1111
1213
  return;
1112
- const P = te(["style", F], H, o), L = Yt(M, P.value, P.width, P.style?.fontBold ?? !1, P.style?.fontItalic ?? !1, P.style?.fontFamily), w = tt({ ...P, fontSize: L, height: L * P.value.length }, c);
1113
- d(w, !0), b && a(b.id, F, H);
1214
+ const V = le(["style", Z], H, r), k = Bt(C, V.value, V.width, V.style?.fontBold ?? !1, V.style?.fontItalic ?? !1, V.style?.fontFamily), S = st({ ...V, fontSize: k, height: k * V.value.length }, c);
1215
+ d(S, !0), y && a(y.id, Z, H);
1114
1216
  } else
1115
- a(r.id, F, H);
1116
- }, R = (F, H) => {
1117
- if (o) {
1118
- if (o.type !== "polygon" && o.type !== "curve")
1217
+ a(o.id, Z, H);
1218
+ }, E = (Z, H) => {
1219
+ if (r) {
1220
+ if (r.type !== "polygon" && r.type !== "curve")
1119
1221
  return;
1120
- d(o.type === "polygon" ? ((M, P, L) => {
1121
- const w = M.points.length;
1122
- if (w === P)
1123
- return M;
1124
- if (w > P) {
1125
- const y = M.points.slice(0, P);
1126
- return Oe({ ...M, points: y, style: { ...M.style, pointsCount: y.length } }, L);
1222
+ d(r.type === "polygon" ? ((C, V, k) => {
1223
+ const S = C.points.length;
1224
+ if (S === V)
1225
+ return C;
1226
+ if (S > V) {
1227
+ const N = C.points.slice(0, V);
1228
+ return _e({ ...C, points: N, style: { ...C.style, pointsCount: N.length } }, k);
1127
1229
  }
1128
- const D = P - w, f = new Array(D).fill(void 0).map((y, C) => [M.points[0][0] + (M.points[1][0] - M.points[0][0]) * (C + 1) / (D + 1), M.points[0][1] + (M.points[1][1] - M.points[0][1]) * (C + 1) / (D + 1)]), m = [M.points[0], ...f, ...M.points.slice(1, M.points.length)];
1129
- return Oe({ ...M, points: m, style: { ...M.style, pointsCount: m.length } }, L);
1130
- })(o, H, c) : ((M, P, L) => {
1131
- const w = M.points.length;
1132
- if (w === P)
1133
- return M;
1134
- if (w > P) {
1135
- const y = M.points.slice(0, P);
1136
- return Ue({ ...M, points: y, style: { ...M.style, pointsCount: y.length } }, L);
1230
+ const F = V - S, w = new Array(F).fill(void 0).map((N, 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)]), A = [C.points[0], ...w, ...C.points.slice(1, C.points.length)];
1231
+ return _e({ ...C, points: A, style: { ...C.style, pointsCount: A.length } }, k);
1232
+ })(r, H, c) : ((C, V, k) => {
1233
+ const S = C.points.length;
1234
+ if (S === V)
1235
+ return C;
1236
+ if (S > V) {
1237
+ const N = C.points.slice(0, V);
1238
+ return qe({ ...C, points: N, style: { ...C.style, pointsCount: N.length } }, k);
1137
1239
  }
1138
- const D = P - w, f = new Array(D).fill(void 0).map((y, C) => [M.points[0][0] + (M.points[1][0] - M.points[0][0]) * (C + 1) / (D + 1), M.points[0][1] + (M.points[1][1] - M.points[0][1]) * (C + 1) / (D + 1)]), m = [M.points[0], ...f, ...M.points.slice(1, M.points.length)];
1139
- return Ue({ ...M, points: m, style: { ...M.style, pointsCount: m.length } }, L);
1140
- })(o, H, c), !0), b && a(b.id, F, H);
1240
+ const F = V - S, w = new Array(F).fill(void 0).map((N, 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)]), A = [C.points[0], ...w, ...C.points.slice(1, C.points.length)];
1241
+ return qe({ ...C, points: A, style: { ...C.style, pointsCount: A.length } }, k);
1242
+ })(r, H, c), !0), y && a(y.id, Z, H);
1141
1243
  } else
1142
- a(r.id, F, H);
1244
+ a(o.id, Z, H);
1143
1245
  };
1144
- return N(oe, { children: [N("div", { className: "react-paint-editor-settings-bar", children: [N("div", { className: "react-paint-editor-settings-shrinkable", children: [Q && Z > 2 && u(B, { disabled: i, onClick: x, 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>' }), o ? u(oe, { children: b && N(oe, { children: [!Q && u(Zt, { activeTool: r, selectedShape: o, selectedShapeTool: b, disabled: i, selectedSettings: p, setSelectedSettings: g, handleShapeStyleChange: k, handlePolygonLinesCount: R, handleShapeFontFamilyChange: A }), u(Ua, { disabled: i, selectedShape: o, removeShape: h })] }) }) : !Q && u(Zt, { activeTool: r, selectedShape: o, selectedShapeTool: b, disabled: i, selectedSettings: p, setSelectedSettings: g, handleShapeStyleChange: k, handlePolygonLinesCount: R, handleShapeFontFamilyChange: A })] }), u("div", { className: "react-paint-editor-settings-separator" }), s && u(Xa, { disabled: i, toggleLayoutPanel: n })] }), v && u(_t, { className: "react-paint-editor-settings-modal", onClose: x, position: "bottom", children: u(Zt, { activeTool: r, selectedShape: o, selectedShapeTool: b, disabled: i, selectedSettings: p, setSelectedSettings: g, handleShapeStyleChange: k, handlePolygonLinesCount: R, handleShapeFontFamilyChange: A }) })] });
1145
- }, E1 = ({ disabled: e = !1, withText: i = !1, loadFile: t, type: a, img: s, accept: n }) => {
1146
- const r = j(null);
1147
- return u(B, { ref: r, type: "file", onClick: (o) => {
1148
- o.stopPropagation(), r.current && (r.current.value = "");
1149
- }, onChange: (o) => {
1150
- const l = o.target.files?.item(0);
1246
+ return I(ue, { children: [I("div", { className: "react-paint-editor-settings-bar", children: [I("div", { className: "react-paint-editor-settings-shrinkable", children: [Q && P > 2 && p(B, { 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 ? p(ue, { children: y && I(ue, { children: [!Q && p(Zt, { activeTool: o, selectedShape: r, selectedShapeTool: y, disabled: i, selectedSettings: u, setSelectedSettings: g, handleShapeStyleChange: L, handlePolygonLinesCount: E, handleShapeFontFamilyChange: T }), p(fa, { disabled: i, selectedShape: r, removeShape: h })] }) }) : !Q && p(Zt, { activeTool: o, selectedShape: r, selectedShapeTool: y, disabled: i, selectedSettings: u, setSelectedSettings: g, handleShapeStyleChange: L, handlePolygonLinesCount: E, handleShapeFontFamilyChange: T })] }), p("div", { className: "react-paint-editor-settings-separator" }), s && p(ya, { disabled: i, toggleLayoutPanel: n })] }), v && p(Yt, { className: "react-paint-editor-settings-modal", onClose: M, position: "bottom", children: p(Zt, { activeTool: o, selectedShape: r, selectedShapeTool: y, disabled: i, selectedSettings: u, setSelectedSettings: g, handleShapeStyleChange: L, handlePolygonLinesCount: E, handleShapeFontFamilyChange: T }) })] });
1247
+ }, Ei = ({ disabled: e = !1, withText: i = !1, loadFile: t, type: a, img: s, accept: n }) => {
1248
+ const o = ae(null);
1249
+ return p(B, { 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, disabled: e });
1153
- }, ce = ({ type: e, img: i, isActive: t, withText: a = !1, disabled: s = !1, setActive: n }) => u(B, { disabled: s, selected: t, onClick: () => {
1254
+ }, accept: n, title: a.label ?? a.type, icon: s, disabled: e, children: i ? a.label : void 0 });
1255
+ }, ge = ({ type: e, img: i, isActive: t, withText: a = !1, disabled: s = !1, setActive: n }) => p(B, { disabled: s, selected: t, onClick: () => {
1154
1256
  n(e);
1155
- }, title: e.label ?? e.type, icon: i, children: a ? e.label : void 0 }), qa = ({ activeTool: e, withActionsInMenu: i, hasActionToUndo: t = !1, hasActionToRedo: a = !1, hasActionToClear: s = !1, undoAction: n, redoAction: r, clearCanvas: o, alignment: l, group: c, vertical: d = !1, disabled: h = !1, withLoadAndSave: p, withExport: g, addPicture: v, loadFile: S, togglePictureUrlModal: x, saveFile: b, exportCanvasInFile: Z, withUploadPicture: Q, withUrlPicture: k }) => {
1156
- const [A, R] = I(!1), [, F] = W1(), H = c?.tools?.some((P) => P === e.type), M = (H ? e.icon : c.img) ?? c.title;
1157
- return O(() => {
1158
- if (!A)
1257
+ }, title: e.label ?? e.type, icon: i, children: a ? e.label : void 0 }), Ca = ({ activeTool: e, withActionsInMenu: i, hasActionToUndo: t = !1, hasActionToRedo: a = !1, hasActionToClear: s = !1, undoAction: n, redoAction: o, clearCanvas: r, alignment: l, group: c, vertical: d = !1, disabled: h = !1, withLoadAndSave: u, withExport: g, addPicture: v, loadFile: x, togglePictureUrlModal: M, saveFile: y, exportCanvasInFile: P, withUploadPicture: Q, withUrlPicture: L }) => {
1258
+ const [T, E] = z(!1), [, Z] = Ni(), H = c?.tools?.some((V) => V === e.type), C = (H ? e.icon : c.img) ?? c.title;
1259
+ return U(() => {
1260
+ if (!T)
1159
1261
  return;
1160
- const P = () => {
1161
- R(!1);
1262
+ const V = () => {
1263
+ E(!1);
1162
1264
  };
1163
- return document.addEventListener("click", P), () => {
1164
- document.removeEventListener("click", P);
1265
+ return document.addEventListener("click", V), () => {
1266
+ document.removeEventListener("click", V);
1165
1267
  };
1166
- }, [A]), i || Q || k || p || g ? N("div", { className: "react-paint-editor-toolbox-relative", children: [u(B, { selected: H, title: c.title, disabled: h, onClick: () => {
1167
- F(() => {
1168
- R(!0);
1268
+ }, [T]), i || Q || L || u || g ? I("div", { className: "react-paint-editor-toolbox-relative", children: [p(B, { selected: H, title: c.title, disabled: h, onClick: () => {
1269
+ Z(() => {
1270
+ E(!0);
1169
1271
  });
1170
- }, icon: M }), A && u(Ye, { alignment: l, position: "top", children: N("div", { className: "react-paint-editor-toolbox-panel-content", "data-vertical": +d, children: [i && N(oe, { children: [u(ce, { withText: !0, type: We, disabled: h || !t, img: We.icon, isActive: e.id === We.id, setActive: n }), u(ce, { withText: !0, type: ze, disabled: h || !a, img: ze.icon, isActive: e.id === ze.id, setActive: r }), u(ce, { withText: !0, type: $e, disabled: h || !s, img: $e.icon, isActive: e.id === $e.id, setActive: o }), (Q || k || p) && u("hr", {})] }), Q && u(E1, { withText: !0, type: r1, disabled: h, loadFile: async (P) => {
1171
- R(!1), await v(P);
1172
- }, img: r1.icon, accept: "image/png, image/gif, image/jpeg, image/svg+xml" }), k && u(B, { disabled: h, selected: !1, onClick: x, 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" }), (Q || k) && p && u("hr", {}), p && N(oe, { children: [u(E1, { withText: !0, type: o1, disabled: h, loadFile: (P) => {
1173
- R(!1), S(P);
1174
- }, img: o1.icon, accept: "application/JSON" }), u(ce, { withText: !0, disabled: h, type: Vt, img: Vt.icon, isActive: e.id === Vt.id, setActive: b })] }), g && u(ce, { withText: !0, disabled: h, type: Lt, img: Lt.icon, isActive: e.id === Lt.id, setActive: Z })] }) })] }) : null;
1175
- }, Ga = ({ togglePictureUrlModal: e, addPicture: i }) => {
1176
- const t = j(null);
1177
- return O(() => {
1272
+ }, icon: C }), T && p(et, { alignment: l, position: "top", children: I("div", { className: "react-paint-editor-toolbox-panel-content", "data-vertical": +d, children: [i && I(ue, { children: [p(ge, { withText: !0, type: Xe, disabled: h || !t, img: Xe.icon, isActive: e.id === Xe.id, setActive: n }), p(ge, { withText: !0, type: Ye, disabled: h || !a, img: Ye.icon, isActive: e.id === Ye.id, setActive: o }), p(ge, { withText: !0, type: je, disabled: h || !s, img: je.icon, isActive: e.id === je.id, setActive: r }), (Q || L || u) && p("hr", {})] }), Q && p(Ei, { withText: !0, type: ni, disabled: h, loadFile: async (V) => {
1273
+ E(!1), await v(V);
1274
+ }, img: ni.icon, accept: "image/png, image/gif, image/jpeg, image/svg+xml" }), L && p(B, { disabled: h, 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" }), (Q || L) && u && p("hr", {}), u && I(ue, { children: [p(Ei, { withText: !0, type: ai, disabled: h, loadFile: (V) => {
1275
+ E(!1), x(V);
1276
+ }, img: ai.icon, accept: "application/JSON" }), p(ge, { withText: !0, disabled: h, type: Vt, img: Vt.icon, isActive: e.id === Vt.id, setActive: y })] }), g && p(ge, { withText: !0, disabled: h, type: Lt, img: Lt.icon, isActive: e.id === Lt.id, setActive: P })] }) })] }) : null;
1277
+ }, wa = ({ togglePictureUrlModal: e, addPicture: i }) => {
1278
+ const t = ae(null);
1279
+ return U(() => {
1178
1280
  t.current && t.current.focus();
1179
- }, []), u(_t, { className: "react-paint-editor-toolbox-pictureinput-modal", onClose: e, children: N("form", { onSubmit: async (a) => {
1281
+ }, []), p(Yt, { 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: [N("label", { children: ["URL ", u("input", { type: "text", ref: t })] }), u(B, { onClick: e, children: "Annuler" }), u(B, { type: "submit", selected: !0, children: "Ajouter" })] }) });
1184
- }, Ja = ({ activeTool: e, alignment: i, group: t, disabled: a = !1, setActiveToolFromId: s }) => {
1185
- const n = j(null), [r, o] = I(!1), [, l] = W1(), [c, d] = I(void 0), h = (v) => {
1285
+ }, children: [I("label", { children: ["URL ", p("input", { type: "text", ref: t })] }), p(B, { onClick: e, children: "Annuler" }), p(B, { type: "submit", selected: !0, children: "Ajouter" })] }) });
1286
+ }, xa = ({ activeTool: e, alignment: i, group: t, disabled: a = !1, setActiveToolFromId: s }) => {
1287
+ const n = ae(null), [o, r] = z(!1), [, l] = Ni(), [c, d] = z(void 0), h = (v) => {
1186
1288
  d(v), s(v.id);
1187
1289
  };
1188
- if (O(() => {
1189
- if (!r)
1290
+ if (U(() => {
1291
+ if (!o)
1190
1292
  return;
1191
- const v = (S) => {
1192
- !ri(S, n.current) && o(!1);
1293
+ const v = (x) => {
1294
+ !s1(x, 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
- }, [r]), "type" in t)
1198
- return u(ce, { disabled: a, type: t, img: t.icon, isActive: e.id === t.id, setActive: h });
1299
+ }, [o]), "type" in t)
1300
+ return p(ge, { disabled: a, type: t, img: t.icon, isActive: e.id === t.id, setActive: h });
1199
1301
  if (!t.toolsType.length)
1200
1302
  return null;
1201
1303
  if (t.toolsType?.length === 1)
1202
- return u(ce, { disabled: a, type: t.toolsType[0], img: t.toolsType[0].icon, isActive: e.id === t.toolsType[0].id, setActive: h });
1203
- const p = t?.toolsType.find((v) => v.type === e.type) !== void 0, g = (c ? c.icon : t.toolsType?.[0]?.icon) ?? t.title;
1204
- return N("div", { className: "react-paint-editor-toolbargroup-relative", children: [u(B, { selected: p, title: t.title, disabled: a, onClick: () => {
1304
+ return p(ge, { disabled: a, type: t.toolsType[0], img: t.toolsType[0].icon, isActive: e.id === t.toolsType[0].id, setActive: h });
1305
+ const u = t?.toolsType.find((v) => v.type === e.type) !== void 0, g = (c ? c.icon : t.toolsType?.[0]?.icon) ?? t.title;
1306
+ return I("div", { className: "react-paint-editor-toolbargroup-relative", children: [p(B, { selected: u, title: t.title, disabled: a, onClick: () => {
1205
1307
  c ? s(c.id) : t.toolsType?.[0] && h(t.toolsType[0]), l(() => {
1206
- o(!0);
1308
+ r(!0);
1207
1309
  });
1208
- }, icon: g }), r && u(Ye, { alignment: i, position: "top", children: u("div", { className: "react-paint-editor-toolbargroup-panel-content", "data-vertical": +t.vertical, ref: n, children: t.toolsType.map((v, S) => u(ce, { disabled: a, type: v, img: v.icon, isActive: e.id === v.id, setActive: h }, S)) }) })] });
1209
- }, Ka = [{ title: "brush", toolsType: ["brush"], vertical: !1 }, { title: "lines", toolsType: ["line", "curve", "polygon"], vertical: !1 }, { title: "shapes", toolsType: ["rect", "square", "circle", "ellipse"], vertical: !1 }, "text"], en = ({ width: e, disabled: i = !1, activeTool: t, hasActionToUndo: a = !1, hasActionToRedo: s = !1, hasActionToClear: n = !1, withLoadAndSave: r, withExport: o, clearCanvas: l, setActiveTool: c, undoAction: d, redoAction: h, addPicture: p, loadFile: g, saveFile: v, exportCanvasInFile: S, availableTools: x, withUrlPicture: b, withUploadPicture: Z }) => {
1210
- const Q = ((f, m) => {
1211
- const y = m.flatMap((C) => {
1212
- if (typeof C != "object")
1213
- return f.filter((U) => U.type === C);
1214
- const V = f.filter((U) => C.toolsType.includes(U.type));
1215
- return V ? { ...C, toolsType: V } : null;
1310
+ }, icon: g }), o && p(et, { alignment: i, position: "top", children: p("div", { className: "react-paint-editor-toolbargroup-panel-content", "data-vertical": +t.vertical, ref: n, children: t.toolsType.map((v, x) => p(ge, { disabled: a, type: v, img: v.icon, isActive: e.id === v.id, setActive: h }, v.id)) }) })] });
1311
+ }, Ma = [{ title: "brush", toolsType: ["brush"], vertical: !1 }, { title: "lines", toolsType: ["line", "curve", "polygon"], vertical: !1 }, { title: "shapes", toolsType: ["rect", "square", "circle", "ellipse"], vertical: !1 }, "text"], ka = ({ width: e, disabled: i = !1, activeTool: t, hasActionToUndo: a = !1, hasActionToRedo: s = !1, hasActionToClear: n = !1, withLoadAndSave: o, withExport: r, clearCanvas: l, setActiveTool: c, undoAction: d, redoAction: h, addPicture: u, loadFile: g, saveFile: v, exportCanvasInFile: x, availableTools: M, withUrlPicture: y, withUploadPicture: P }) => {
1312
+ const Q = ((w, A) => {
1313
+ const N = A.flatMap((f) => {
1314
+ if (typeof f != "object")
1315
+ return w.filter((b) => b.type === f);
1316
+ const m = w.filter((b) => f.toolsType.includes(b.type));
1317
+ return m ? { ...f, toolsType: m } : null;
1216
1318
  });
1217
- return ft(y);
1218
- })(x, Ka), k = e < 40 * (5 + Q.length), A = e < 40 * (2 + Q.length), [R, F] = I(!1), [H, M] = I(!1), P = () => {
1219
- F((f) => !f);
1220
- }, L = (f) => {
1221
- c(f), F(!1);
1222
- }, w = (f) => {
1223
- L(x.find((m) => m.id === f) ?? t);
1224
- }, D = x.find((f) => f.type === t.type) !== void 0;
1225
- return N(oe, { children: [N("div", { className: "react-paint-editor-toolbar-toolbox", children: [N("div", { className: "react-paint-editor-toolbar-shrinkable", children: [u(ce, { type: ke, disabled: i, img: ke.icon, isActive: t.id === ke.id, setActive: L }), A ? u(B, { disabled: i, onClick: P, 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: D }) : Q.map((f, m) => u(Ja, { disabled: i, activeTool: t, group: f, setActiveToolFromId: w }, m))] }), !k && N(oe, { children: [u(ce, { type: We, disabled: i || !a, img: We.icon, isActive: t.id === We.id, setActive: d }), u(ce, { type: ze, disabled: i || !s, img: ze.icon, isActive: t.id === ze.id, setActive: h }), u(ce, { type: $e, disabled: i || !n, img: $e.icon, isActive: t.id === $e.id, setActive: l })] }), u(qa, { 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: p, loadFile: g, saveFile: v, togglePictureUrlModal: () => {
1226
- M(!0);
1227
- }, exportCanvasInFile: S, withUploadPicture: Z, withUrlPicture: b, withLoadAndSave: r, withExport: o, hasActionToUndo: a, hasActionToRedo: s, hasActionToClear: n, undoAction: d, redoAction: h, clearCanvas: l })] }), R && u(_t, { className: "react-paint-editor-toolbar-modal", onClose: P, children: x.map((f, m) => f.type === "picture" ? null : u(ce, { disabled: i, type: f, img: f.icon, withText: !1, isActive: t.id === f.id, setActive: L }, m)) }), H && u(Ga, { togglePictureUrlModal: () => {
1228
- M((f) => !f);
1229
- }, addPicture: p })] });
1230
- }, nn = ({ width: e = 1e3, height: i = 600, shapes: t, className: a = "", mode: s = "editor", disabled: n = !1, onDataChanged: r, apiRef: o, options: l = Pt }) => {
1231
- const { layersManipulation: c, brushAlgo: d, grid: h, canGrow: p, canShrink: g, withExport: v, withLoadAndSave: S, withUploadPicture: x, withUrlPicture: b, withSkeleton: Z, withFrameSelection: Q, clearCallback: k, availableTools: A } = { ...Pt, ...l }, { toolbarBackgroundColor: R, dividerColor: F, fontRadius: H, fontDisabledColor: M, fontDisabledBackgroundColor: P, fontColor: L, fontBackgroundColor: w, fontSelectedColor: D, fontSelectedBackgroundColor: f, fontHoverColor: m, fontHoverBackgroundColor: y, canvasBackgroundColor: C, canvasSelectionColor: V, canvasSelectionWidth: U, canvasSelectionPadding: K } = { ...Pt.uiStyle, ...l?.uiStyle ?? {} }, E = s !== "viewer", re = n || !E, ge = j(null), ae = j(null), [X, me] = I({ width: e, height: i, scaleRatio: 1 }), [ne, ee] = I(h), [ye, Le] = I([0, 0]), [bt, at] = I(void 0), ue = I1(() => ({ brushAlgo: d, canvasSize: X, canvasOffset: ye, gridFormat: ne, selectionPadding: K }), [K, ne, d, ye, X]), [Re, nt] = I(T1(A, x || b)), { isInsideComponent: Te } = (({ disabled: T, componentRef: $ }) => {
1232
- const [pe, q] = I(!1);
1233
- return O(() => {
1234
- if (!T) {
1235
- const G = (ve) => {
1236
- q(ri(ve, $.current));
1237
- };
1238
- return document.addEventListener("mousedown", G, { passive: !0 }), document.addEventListener("touchstart", G, { passive: !0 }), () => {
1239
- document.removeEventListener("mousedown", G), document.removeEventListener("touchstart", G);
1240
- };
1241
- }
1242
- q(!1);
1243
- }, [T, $]), { isInsideComponent: pe };
1244
- })({ disabled: re, componentRef: ge }), [_e, se] = I(!1), [le, Se] = I(!1), [Ce, Qe] = I(ke), [je, qe] = I({ mode: "default" }), [yi, Qi] = I(!1);
1245
- o && (o.current = { getCurrentImage: () => ae.current ? Q1(Ve.current, e, i, ue) : void 0, getCurrentData: () => pi(Ve.current, e, i) });
1246
- const { shapesRef: Ve, selectedShape: st, selectionFrame: bi, hoveredShape: Si, addShape: St, addPictureShape: qt, moveShapes: Ci, setSelectedShape: Pe, setSelectionFrame: wi, refreshSelectedShapes: xi, refreshHoveredShape: Mi, removeShape: Ct, updateShape: wt, backwardShape: xt, forwardShape: Mt, clearShapes: Gt, saveShapes: ki, toggleShapeVisibility: Li, toggleShapeLock: Vi, canGoBackward: Pi, canGoForward: Hi, canClear: Ai } = La(r, ue), { snackbarList: Ti, addSnackbar: we } = Ha(), Ze = z((T) => {
1247
- Pe(void 0), Qe(T);
1248
- }, [Pe]), Zi = z((T, $, pe) => {
1249
- nt((q) => q.map((G) => G.id === T ? te(["settings", $, "default"], pe, G) : G)), Qe((q) => q.id === T ? te(["settings", $, "default"], pe, q) : q);
1250
- }, []), Fi = z(() => {
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 ft(N);
1320
+ })(M, Ma), L = e < 40 * (5 + Q.length), T = e < 40 * (2 + Q.length), [E, Z] = z(!1), [H, C] = z(!1), V = () => {
1321
+ Z((w) => !w);
1322
+ }, k = (w) => {
1323
+ c(w), Z(!1);
1324
+ }, S = (w) => {
1325
+ k(M.find((A) => A.id === w) ?? t);
1326
+ }, F = M.find((w) => w.type === t.type) !== void 0;
1327
+ return I(ue, { children: [I("div", { className: "react-paint-editor-toolbar-toolbox", children: [I("div", { className: "react-paint-editor-toolbar-shrinkable", children: [p(ge, { type: Te, disabled: i, img: Te.icon, isActive: t.id === Te.id, setActive: k }), T ? p(B, { 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 }) : Q.map((w, A) => p(xa, { disabled: i, activeTool: t, group: w, setActiveToolFromId: S }, "id" in w ? w.id : w.title))] }), !L && I(ue, { children: [p(ge, { type: Xe, disabled: i || !a, img: Xe.icon, isActive: t.id === Xe.id, setActive: d }), p(ge, { type: Ye, disabled: i || !s, img: Ye.icon, isActive: t.id === Ye.id, setActive: h }), p(ge, { type: je, disabled: i || !n, img: je.icon, isActive: t.id === je.id, setActive: l })] }), p(Ca, { withActionsInMenu: L, 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: x, withUploadPicture: P, withUrlPicture: y, withLoadAndSave: o, withExport: r, hasActionToUndo: a, hasActionToRedo: s, hasActionToClear: n, undoAction: d, redoAction: h, clearCanvas: l })] }), E && p(Yt, { className: "react-paint-editor-toolbar-modal", onClose: V, children: M.map((w, A) => w.type === "picture" ? null : p(ge, { disabled: i, type: w, img: w.icon, withText: !1, isActive: t.id === w.id, setActive: k }, w.id)) }), H && p(wa, { togglePictureUrlModal: () => {
1330
+ C((w) => !w);
1331
+ }, addPicture: u })] });
1332
+ }, pt = { none: 0, small: 10, medium: 20, large: 40 }, La = { toolbarBackgroundColor: "white", dividerColor: "#36418129", fontRadius: 8, fontDisabledColor: "#3641812b", fontDisabledBackgroundColor: "transparent", fontColor: "#364181", fontBackgroundColor: "transparent", fontSelectedColor: "white", fontSelectedBackgroundColor: "#364181", fontHoverColor: "#364181", fontHoverBackgroundColor: "#afd8d8" }, Va = () => {
1333
+ const e = ae([]), [i, t] = z([]);
1334
+ return U(() => () => {
1335
+ for (const a of e.current)
1336
+ clearTimeout(a);
1337
+ }, []), { snackbarList: i, addSnackbar: ({ type: a = da, duration: s = ca, 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((c) => c.id !== r));
1341
+ var r;
1342
+ }, s)];
1343
+ } };
1344
+ }, Za = ({ editorProps: e, className: i, style: t, options: a, children: s }) => {
1345
+ const { shapesRef: n, addPictureShape: o, moveShapes: r, toggleShapeVisibility: l, toggleShapeLock: c, canGoBackward: d, canGoForward: h, canClear: u, selectedShape: g, removeShape: v, updateShape: x, backwardShape: M, forwardShape: y, refs: P, width: Q, height: L, canvasSize: T, selectTool: E, selectShape: Z, activeTool: H, setActiveTool: C, setAvailableTools: V, isEditMode: k, isDisabled: S, availableTools: F, gridGap: w, setGridGap: A, loadFile: N, exportPicture: f, exportData: m, clearCanvas: b, settings: R, canvas: { canGrow: D, layersManipulation: _, withExport: oe, withLoadAndSave: $, withUploadPicture: j, withUrlPicture: ce } } = e, { toolbarBackgroundColor: G, dividerColor: q, fontRadius: me, fontDisabledColor: fe, fontDisabledBackgroundColor: te, fontColor: he, fontBackgroundColor: be, fontSelectedColor: pe, fontSelectedBackgroundColor: xe, fontHoverColor: Ce, fontHoverBackgroundColor: Me } = { ...La, ...a }, [Ae, ne] = z(!1), [ke, Ze] = z(!1), re = w >= pt.large ? "large" : w >= pt.medium ? "medium" : w >= pt.small ? "small" : "none", { snackbarList: ye, addSnackbar: ie } = Va(), Le = W((J, K, lt) => {
1346
+ V((Re) => Re.map((Ue) => Ue.id === J ? le(["settings", K, "default"], lt, Ue) : Ue)), C((Re) => Re.id === J ? le(["settings", K, "default"], lt, Re) : Re);
1347
+ }, [C, V]), Oe = W(() => {
1348
+ E(Te), M();
1349
+ }, [E, M]), Ne = W(() => {
1350
+ E(Te), y();
1351
+ }, [E, y]), wt = W(() => {
1352
+ ne(!0);
1290
1353
  try {
1291
- const T = ae.current && Q1(Ve.current, e, i, ue);
1292
- if (!T)
1293
- throw new Error();
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 (J) {
1356
+ J instanceof Error && ie({ type: "error", text: "L'export a échoué" }), console.warn(J);
1297
1357
  } finally {
1298
- se(!1);
1358
+ ne(!1);
1299
1359
  }
1300
- }, [we, Ve, e, i, ue]), Ii = z(() => {
1301
- se(!0);
1360
+ }, [f, ie]), tt = W(() => {
1361
+ ne(!0);
1302
1362
  try {
1303
- const T = la(Ve.current, e, i);
1304
- if (!T)
1305
- throw new Error("L'encodage a échoué");
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 (J) {
1365
+ J instanceof Error && ie({ type: "error", text: "L'enregistrement a échoué" }), console.warn(J);
1309
1366
  } finally {
1310
- se(!1);
1367
+ ne(!1);
1311
1368
  }
1312
- }, [Ve, we, e, i]), Wi = z(async (T) => {
1313
- se(!0);
1369
+ }, [m, ie]), Ge = W(async (J) => {
1370
+ ne(!0);
1314
1371
  try {
1315
- const $ = await (async (pe) => new Promise((q, G) => {
1316
- const ve = new FileReader();
1317
- ve.onload = (Je) => {
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 N(J), ie({ type: "success", text: "Fichier chargé !" });
1373
+ } catch (K) {
1374
+ K instanceof Error && ie({ type: "error", text: "Le chargement a échoué" }), console.warn(K);
1328
1375
  } finally {
1329
- se(!1);
1376
+ ne(!1);
1330
1377
  }
1331
- }, [Fe, we]), zi = z(async (T) => {
1332
- se(!0);
1378
+ }, [N, ie]), rt = W(async (J) => {
1379
+ ne(!0);
1333
1380
  try {
1334
- const $ = await qt(T, e, i);
1335
- Ge($);
1336
- } catch ($) {
1337
- $ instanceof Error && we({ type: "error", text: "Le chargement a échoué" }), console.warn($);
1381
+ const K = await o(J, Q, L);
1382
+ Z(K);
1383
+ } catch (K) {
1384
+ K instanceof Error && ie({ type: "error", text: "Le chargement a échoué" }), console.warn(K);
1338
1385
  } finally {
1339
- se(!1);
1386
+ ne(!1);
1340
1387
  }
1341
- }, [qt, Ge, we, e, i]), $i = z((T) => {
1342
- const $ = T / e;
1343
- me({ width: T, height: i * $, scaleRatio: $ });
1344
- }, [e, i]);
1345
- ka({ isInsideComponent: Te, isEditingText: je.mode === "textedition", settings: ue, selectedShape: st, setSelectedShape: Pe, removeShape: Ct, pasteShape: Ei, updateShape: wt, backwardShape: xt, forwardShape: Mt, setShiftPressed: Qi }), (({ onResized: T, element: $ }) => {
1346
- O(() => {
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, Z, ie, Q, L]), xt = `${i ? `${i} ` : ""}${ke ? "react-paint-editor-layout-opened " : ""}react-paint-editor-app`;
1389
+ return I("div", { ref: P.setEditor, className: xt, style: { "--react-paint-editor-app-maxWidth": D ? "100%" : `${Q}px`, "--react-paint-editor-app-toolbar-bg": G, "--react-paint-editor-app-divider-color": q, "--react-paint-editor-app-font-radius": me, "--react-paint-editor-app-font-disabled-color": fe, "--react-paint-editor-app-font-disabled-bg": te, "--react-paint-editor-app-font-color": he, "--react-paint-editor-app-font-bg": be, "--react-paint-editor-app-font-selected-color": pe, "--react-paint-editor-app-font-selected-bg": xe, "--react-paint-editor-app-font-hover-color": Ce, "--react-paint-editor-app-font-hover-bg": Me, ...t }, children: [k && p(ka, { width: T.width, disabled: S, activeTool: H, clearCanvas: b, setActiveTool: E, exportCanvasInFile: wt, saveFile: tt, loadFile: Ge, addPicture: rt, hasActionToUndo: d, hasActionToRedo: h, hasActionToClear: u, undoAction: Oe, redoAction: Ne, availableTools: F, withExport: oe, withLoadAndSave: $, withUploadPicture: j, withUrlPicture: ce }), s, k && _ && p(va, { gridFormat: re, setGridFormat: (J) => {
1390
+ A(pt[J]);
1391
+ }, disabled: S, shapes: n.current, moveShapes: r, selectedShape: g, removeShape: v, selectShape: Z, toggleShapeVisibility: l, toggleShapeLock: c, isLayoutPanelShown: ke }), k && I(ue, { children: [p(ba, { width: T.width, disabled: S, activeTool: H, availableTools: F, selectedShape: g, settings: R, removeShape: v, updateShape: x, canvas: P.canvas.current, layersManipulation: _, toggleLayoutPanel: () => {
1392
+ Ze((J) => !J);
1393
+ }, updateToolSettings: Le }), p(la, { isLoading: Ae }), p(pa, { snackbarList: ye })] })] });
1369
1394
  };
1370
1395
  export {
1371
- nn as default
1396
+ Aa as Canvas,
1397
+ Za as Editor,
1398
+ Ta as useReactPaint
1372
1399
  };