integration-modules 0.1.14 → 0.1.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/EmojiBoardWidget-qFIIWsdw.js +274 -0
- package/dist/chunks/EmojiBoardWidget-qFIIWsdw.js.map +1 -0
- package/dist/chunks/EmojiBoardWidget-uWxNQwpF.js +2 -0
- package/dist/chunks/EmojiBoardWidget-uWxNQwpF.js.map +1 -0
- package/dist/chunks/ShapeBoardWidget-CYvTmNUV.js +2 -0
- package/dist/chunks/ShapeBoardWidget-CYvTmNUV.js.map +1 -0
- package/dist/chunks/ShapeBoardWidget-ChVcXBBP.js +1312 -0
- package/dist/chunks/ShapeBoardWidget-ChVcXBBP.js.map +1 -0
- package/dist/chunks/constants-D-rHISmr.js +23 -0
- package/dist/chunks/constants-D-rHISmr.js.map +1 -0
- package/dist/chunks/constants-pVjh1MjZ.js +612 -0
- package/dist/chunks/constants-pVjh1MjZ.js.map +1 -0
- package/dist/emoji/index.cjs +1 -1
- package/dist/emoji/index.js +2 -2
- package/dist/index.cjs +36 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +17729 -85
- package/dist/index.mjs.map +1 -1
- package/dist/integration-modules.css +1 -1
- package/dist/shape/index.cjs +1 -1
- package/dist/shape/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunks/Board-CENI1zTY.js +0 -19484
- package/dist/chunks/Board-CENI1zTY.js.map +0 -1
- package/dist/chunks/Board-DBlzUx0o.js +0 -58
- package/dist/chunks/Board-DBlzUx0o.js.map +0 -1
- package/dist/chunks/EmojiBoardWidget-94JjolG3.js +0 -197
- package/dist/chunks/EmojiBoardWidget-94JjolG3.js.map +0 -1
- package/dist/chunks/EmojiBoardWidget-jQpQl320.js +0 -2
- package/dist/chunks/EmojiBoardWidget-jQpQl320.js.map +0 -1
- package/dist/chunks/ShapeBoardWidget-C9nNKwtj.js +0 -157
- package/dist/chunks/ShapeBoardWidget-C9nNKwtj.js.map +0 -1
- package/dist/chunks/ShapeBoardWidget-D1TcdWRO.js +0 -2
- package/dist/chunks/ShapeBoardWidget-D1TcdWRO.js.map +0 -1
|
@@ -1,197 +0,0 @@
|
|
|
1
|
-
import { u as C, j as t, s as u, f as N, B as L, E as Z, b as V, c as f, d as B } from "./Board-CENI1zTY.js";
|
|
2
|
-
import H, { useState as M, useRef as y, useEffect as x } from "react";
|
|
3
|
-
import { NodeResizer as T, Handle as b, Position as v } from "@xyflow/react";
|
|
4
|
-
const W = "data:image/svg+xml,%3csvg%20width='53'%20height='55'%20viewBox='0%200%2053%2055'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M17.4805%209.06134C28.3439%205.4148%2041.8081%2012.4889%2044.7236%2025.491C45.7716%2030.1654%2045.6693%2034.5328%2044.3408%2038.5027C43.0128%2042.4712%2040.4491%2046.075%2036.5225%2049.2059C25.9108%2057.6673%2010.2323%2054.5413%203.62305%2042.8719V42.8709L3.24805%2042.1883C1.43682%2038.7598%200.519459%2035.0399%200.5%2030.0115C0.77733%2023.2257%203.8013%2016.4937%2010.9961%2011.8436C12.8987%2010.6151%2015.1951%209.82717%2017.4795%209.06134H17.4805ZM34.9678%2013.3192C27.8426%208.00625%2017.0199%207.82577%209.95508%2014.4168C5.12103%2018.9247%202.80092%2024.4062%202.70703%2029.743V29.7527C2.71638%2035.6997%204.17812%2040.1971%207.25879%2044.2195C13.7769%2052.7395%2025.531%2054.6508%2034.2949%2048.6111C46.3065%2040.3282%2046.6344%2022.0153%2034.9678%2013.3192Z'%20fill='black'%20stroke='black'/%3e%3cpath%20d='M23.0724%2043.0767C18.121%2043.2052%2013.133%2039.5978%2012.0915%2035.1336C12.0276%2034.868%2012.0002%2034.5766%2012.0002%2034.3367C11.991%2033.6598%2012.3656%2033.5056%2012.6579%2033.4199C12.9503%2033.3428%2013.4984%2033.5998%2013.7176%2033.8655C14.1379%2034.371%2014.4028%2034.9794%2014.7225%2035.5535C16.0563%2037.9013%2017.92%2039.7092%2020.688%2040.489C25.8039%2041.9285%2031.1848%2038.4668%2031.9887%2033.2742C32.0161%2033.0686%2032.144%2032.7258%2032.1988%2032.5716C32.4911%2031.8347%2032.8383%2031.8004%2033.2677%2031.7662C33.9711%2031.7147%2034.2086%2032.3402%2034.1264%2032.9315C33.3042%2038.7067%2028.9009%2042.9824%2023.0724%2043.0767Z'%20fill='black'/%3e%3cpath%20d='M30.2759%2016.0326C30.2857%2015.6747%2030.3776%2015.1557%2030.981%2015.0582C31.5663%2014.9637%2032.0339%2015.2446%2032.2178%2015.5452C33.5514%2017.7549%2034.3449%2020.1562%2034.4241%2022.7076C34.4385%2023.0964%2034.0825%2023.745%2033.6232%2023.8192C32.9658%2023.9253%2032.3642%2023.4662%2032.1922%2023.0767C31.4726%2021.498%2030.2216%2017.945%2030.2759%2016.0326Z'%20fill='black'/%3e%3cpath%20d='M12.722%2024.0753C12.459%2022.614%2012.4411%2021.9477%2012.4645%2020.9964C12.4712%2020.6216%2012.5813%2020.1518%2013.1437%2019.8784C13.8461%2019.765%2014.1506%2020.2721%2014.2698%2020.5745C15.209%2022.9609%2015.7361%2025.0662%2016.1952%2027.6693C16.3062%2028.2859%2016.2131%2028.9528%2015.3937%2029.1373C14.5022%2029.3334%2014.2111%2028.6938%2013.9424%2028.0766C13.3162%2026.6566%2012.9865%2025.5451%2012.722%2024.0753Z'%20fill='black'/%3e%3cpath%20d='M46.5%2013.2895V12.65L45.75%206.89475L45%201.13949V0.500015'%20stroke='black'%20stroke-linecap='round'/%3e%3cpath%20d='M39%207.60529H39.675L45.75%206.89476L51.825%206.18423H52.5'%20stroke='black'%20stroke-linecap='round'/%3e%3c/svg%3e", O = "data:image/svg+xml,%3csvg%20width='53'%20height='55'%20viewBox='0%200%2053%2055'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M17.4805%209.06134C28.3439%205.4148%2041.8081%2012.4889%2044.7236%2025.491C45.7716%2030.1654%2045.6693%2034.5328%2044.3408%2038.5027C43.0128%2042.4712%2040.4491%2046.075%2036.5225%2049.2059C25.9108%2057.6673%2010.2323%2054.5413%203.62305%2042.8719V42.8709L3.24805%2042.1883C1.43682%2038.7598%200.519459%2035.0399%200.5%2030.0115C0.77733%2023.2257%203.8013%2016.4937%2010.9961%2011.8436C12.8987%2010.6151%2015.1951%209.82717%2017.4795%209.06134H17.4805ZM34.9678%2013.3192C27.8426%208.00625%2017.0199%207.82577%209.95508%2014.4168C5.12103%2018.9247%202.80092%2024.4062%202.70703%2029.743V29.7527C2.71638%2035.6997%204.17812%2040.1971%207.25879%2044.2195C13.7769%2052.7395%2025.531%2054.6508%2034.2949%2048.6111C46.3065%2040.3282%2046.6344%2022.0153%2034.9678%2013.3192Z'%20fill='%230000FF'%20stroke='%230000FF'/%3e%3cpath%20d='M23.0724%2043.0767C18.121%2043.2052%2013.133%2039.5978%2012.0915%2035.1336C12.0276%2034.868%2012.0002%2034.5766%2012.0002%2034.3367C11.991%2033.6598%2012.3656%2033.5056%2012.6579%2033.4199C12.9503%2033.3428%2013.4984%2033.5998%2013.7176%2033.8655C14.1379%2034.371%2014.4028%2034.9794%2014.7225%2035.5535C16.0563%2037.9013%2017.92%2039.7092%2020.688%2040.489C25.8039%2041.9285%2031.1848%2038.4668%2031.9887%2033.2742C32.0161%2033.0686%2032.144%2032.7258%2032.1988%2032.5716C32.4911%2031.8347%2032.8383%2031.8004%2033.2677%2031.7662C33.9711%2031.7147%2034.2086%2032.3402%2034.1264%2032.9315C33.3042%2038.7067%2028.9009%2042.9824%2023.0724%2043.0767Z'%20fill='%230000FF'/%3e%3cpath%20d='M30.2759%2016.0327C30.2857%2015.6747%2030.3776%2015.1557%2030.981%2015.0583C31.5663%2014.9637%2032.0339%2015.2446%2032.2178%2015.5452C33.5514%2017.7549%2034.3449%2020.1562%2034.4241%2022.7076C34.4385%2023.0965%2034.0825%2023.745%2033.6232%2023.8192C32.9658%2023.9254%2032.3642%2023.4662%2032.1922%2023.0768C31.4726%2021.498%2030.2216%2017.945%2030.2759%2016.0327Z'%20fill='%230000FF'/%3e%3cpath%20d='M12.722%2024.0753C12.459%2022.614%2012.4411%2021.9477%2012.4645%2020.9964C12.4712%2020.6216%2012.5813%2020.1518%2013.1437%2019.8784C13.8461%2019.765%2014.1506%2020.2721%2014.2698%2020.5745C15.209%2022.9609%2015.7361%2025.0662%2016.1952%2027.6693C16.3062%2028.2859%2016.2131%2028.9528%2015.3937%2029.1373C14.5022%2029.3334%2014.2111%2028.6938%2013.9424%2028.0766C13.3162%2026.6566%2012.9865%2025.5451%2012.722%2024.0753Z'%20fill='%230000FF'/%3e%3cpath%20d='M46.5%2013.2895V12.65L45.75%206.89475L45%201.13949V0.500015'%20stroke='%230000FF'%20stroke-linecap='round'/%3e%3cpath%20d='M39%207.60529H39.675L45.75%206.89476L51.825%206.18423H52.5'%20stroke='%230000FF'%20stroke-linecap='round'/%3e%3c/svg%3e", E = (o) => {
|
|
5
|
-
const { id: r, selected: l } = o, c = C(
|
|
6
|
-
(n) => n.stickers.find((e) => String(e.id) === String(r))
|
|
7
|
-
), d = C((n) => n.bringToFront), p = C((n) => n.updateSticker);
|
|
8
|
-
return !c || !c.imageUrl ? null : /* @__PURE__ */ t.jsxs(t.Fragment, { children: [
|
|
9
|
-
/* @__PURE__ */ t.jsx(
|
|
10
|
-
T,
|
|
11
|
-
{
|
|
12
|
-
isVisible: l,
|
|
13
|
-
minWidth: 30,
|
|
14
|
-
minHeight: 30,
|
|
15
|
-
onResizeEnd: async (n, e) => {
|
|
16
|
-
const s = Math.max(1, Math.round(e.width)), i = Math.max(1, Math.round(e.height));
|
|
17
|
-
p(r, { width: s, height: i });
|
|
18
|
-
try {
|
|
19
|
-
await u.updateTransform(r, s, i);
|
|
20
|
-
} catch (a) {
|
|
21
|
-
console.warn("Не удалось сохранить размер эмодзи", a);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
),
|
|
26
|
-
/* @__PURE__ */ t.jsx(b, { type: "target", position: v.Left }),
|
|
27
|
-
/* @__PURE__ */ t.jsx(b, { type: "source", position: v.Right }),
|
|
28
|
-
/* @__PURE__ */ t.jsx(
|
|
29
|
-
"div",
|
|
30
|
-
{
|
|
31
|
-
style: { width: c.width, height: c.height, position: "relative" },
|
|
32
|
-
onPointerDown: () => {
|
|
33
|
-
d(r);
|
|
34
|
-
},
|
|
35
|
-
children: /* @__PURE__ */ t.jsx(
|
|
36
|
-
"img",
|
|
37
|
-
{
|
|
38
|
-
src: c.imageUrl,
|
|
39
|
-
draggable: !1,
|
|
40
|
-
style: { width: "100%", height: "100%" }
|
|
41
|
-
}
|
|
42
|
-
)
|
|
43
|
-
}
|
|
44
|
-
)
|
|
45
|
-
] });
|
|
46
|
-
}, R = () => {
|
|
47
|
-
const [o, r] = M(!1), l = y(null), c = (e) => {
|
|
48
|
-
e.stopPropagation(), r((s) => !s);
|
|
49
|
-
}, d = C((e) => e.addSticker), p = C((e) => e.topZ), n = (e) => {
|
|
50
|
-
const s = (p || 1) + 1;
|
|
51
|
-
d({
|
|
52
|
-
id: e.id,
|
|
53
|
-
stickerId: e.id,
|
|
54
|
-
type: "emoji",
|
|
55
|
-
x: 100,
|
|
56
|
-
y: 100,
|
|
57
|
-
width: 50,
|
|
58
|
-
height: 50,
|
|
59
|
-
zIndex: s,
|
|
60
|
-
color: "transparent",
|
|
61
|
-
text: "",
|
|
62
|
-
imageUrl: e.url
|
|
63
|
-
});
|
|
64
|
-
};
|
|
65
|
-
return x(() => {
|
|
66
|
-
if (!o)
|
|
67
|
-
return;
|
|
68
|
-
const e = (s) => {
|
|
69
|
-
l.current && !l.current.contains(s.target) && r(!1);
|
|
70
|
-
};
|
|
71
|
-
return window.addEventListener("pointerdown", e), () => {
|
|
72
|
-
window.removeEventListener("pointerdown", e);
|
|
73
|
-
};
|
|
74
|
-
}, [o]), /* @__PURE__ */ t.jsxs(
|
|
75
|
-
"div",
|
|
76
|
-
{
|
|
77
|
-
className: "left-toolbar-container",
|
|
78
|
-
ref: l,
|
|
79
|
-
onClick: (e) => {
|
|
80
|
-
e.stopPropagation();
|
|
81
|
-
},
|
|
82
|
-
children: [
|
|
83
|
-
/* @__PURE__ */ t.jsx("div", { className: `toolbar-card ${o ? "toolbar-card--open" : ""}`, children: /* @__PURE__ */ t.jsx(
|
|
84
|
-
"button",
|
|
85
|
-
{
|
|
86
|
-
onClick: c,
|
|
87
|
-
className: `toolbar-btn toolbar-btn--icon toolbar-btn--emoji ${o ? "toolbar-btn--active" : ""}`,
|
|
88
|
-
children: /* @__PURE__ */ t.jsx("div", { className: `toolbar-emoji-plate ${o ? "toolbar-emoji-plate--active" : ""}`, children: /* @__PURE__ */ t.jsx("img", { src: o ? O : W, alt: "Эмодзи", draggable: !1 }) })
|
|
89
|
-
}
|
|
90
|
-
) }),
|
|
91
|
-
o && /* @__PURE__ */ t.jsx(
|
|
92
|
-
"div",
|
|
93
|
-
{
|
|
94
|
-
className: "palette-wrapper",
|
|
95
|
-
onClick: (e) => {
|
|
96
|
-
e.stopPropagation();
|
|
97
|
-
},
|
|
98
|
-
children: /* @__PURE__ */ t.jsxs("div", { className: "emoji-panel", style: { width: 300, height: 500 }, children: [
|
|
99
|
-
/* @__PURE__ */ t.jsx("div", { className: "emoji-panel-header", children: /* @__PURE__ */ t.jsx("span", { className: "emoji-header-title", children: "Стикеры" }) }),
|
|
100
|
-
/* @__PURE__ */ t.jsx("div", { className: "emoji-grid", children: N.map((e) => /* @__PURE__ */ t.jsx(
|
|
101
|
-
"button",
|
|
102
|
-
{
|
|
103
|
-
onClick: () => n(e),
|
|
104
|
-
className: "emoji-item",
|
|
105
|
-
children: /* @__PURE__ */ t.jsx("img", { src: e.url, draggable: !1 })
|
|
106
|
-
},
|
|
107
|
-
e.id
|
|
108
|
-
)) })
|
|
109
|
-
] })
|
|
110
|
-
}
|
|
111
|
-
),
|
|
112
|
-
/* @__PURE__ */ t.jsx(E, { emojiOpen: o })
|
|
113
|
-
]
|
|
114
|
-
}
|
|
115
|
-
);
|
|
116
|
-
}, _ = {
|
|
117
|
-
emoji: E
|
|
118
|
-
}, j = ({ children: o }) => /* @__PURE__ */ t.jsx("div", { children: o }), J = ({ nodeTypes: o }) => {
|
|
119
|
-
const r = C((s) => s.setStickers), l = y(null), [c, d] = M(() => j), p = {
|
|
120
|
-
..._,
|
|
121
|
-
...o || {}
|
|
122
|
-
};
|
|
123
|
-
async function n(s) {
|
|
124
|
-
if (f && f[s])
|
|
125
|
-
return f[s];
|
|
126
|
-
try {
|
|
127
|
-
const i = await u.getById(s);
|
|
128
|
-
if (i != null && i.name) {
|
|
129
|
-
const a = B.find((g) => g.name === i.name);
|
|
130
|
-
if (a)
|
|
131
|
-
return a.url;
|
|
132
|
-
}
|
|
133
|
-
} catch (i) {
|
|
134
|
-
console.warn("getEmojiUrlForStickerId: backend lookup failed", i);
|
|
135
|
-
}
|
|
136
|
-
return "";
|
|
137
|
-
}
|
|
138
|
-
x(() => {
|
|
139
|
-
(async () => {
|
|
140
|
-
var i;
|
|
141
|
-
try {
|
|
142
|
-
const a = await u.getBoard();
|
|
143
|
-
let g = 30, k = 30;
|
|
144
|
-
const w = [];
|
|
145
|
-
for (const h of a) {
|
|
146
|
-
const F = h.width ?? Z, S = h.height ?? V;
|
|
147
|
-
let m = ((i = f) == null ? void 0 : i[String(h.stickerId)]) ?? "";
|
|
148
|
-
if (!m)
|
|
149
|
-
try {
|
|
150
|
-
m = await n(h.stickerId);
|
|
151
|
-
} catch (I) {
|
|
152
|
-
console.warn("Ошибка при получении локального url для stickerId", h.stickerId, I), m = "";
|
|
153
|
-
}
|
|
154
|
-
w.push({
|
|
155
|
-
id: h.id,
|
|
156
|
-
x: g,
|
|
157
|
-
y: k,
|
|
158
|
-
color: "transparent",
|
|
159
|
-
width: F,
|
|
160
|
-
height: S,
|
|
161
|
-
text: "",
|
|
162
|
-
zIndex: 1,
|
|
163
|
-
stickerId: h.stickerId,
|
|
164
|
-
imageUrl: m,
|
|
165
|
-
type: "emoji"
|
|
166
|
-
}), g += 24, k += 24;
|
|
167
|
-
}
|
|
168
|
-
r(w);
|
|
169
|
-
} catch (a) {
|
|
170
|
-
console.warn("Не удалось загрузить доску для эмодзи:", a);
|
|
171
|
-
}
|
|
172
|
-
})();
|
|
173
|
-
}, [r]), x(() => {
|
|
174
|
-
let s = !0;
|
|
175
|
-
return import("@xyflow/react").then((i) => {
|
|
176
|
-
if (!s)
|
|
177
|
-
return;
|
|
178
|
-
const a = (i && (i.Widget || i.default || (i == null ? void 0 : i.widget) || (i == null ? void 0 : i.XyflowWidget))) ?? null;
|
|
179
|
-
typeof a == "function" || H.isValidElement(a) ? d(() => a) : d(() => j);
|
|
180
|
-
}).catch(() => {
|
|
181
|
-
s && d(() => j);
|
|
182
|
-
}), () => {
|
|
183
|
-
s = !1;
|
|
184
|
-
};
|
|
185
|
-
}, []);
|
|
186
|
-
const e = c || j;
|
|
187
|
-
return /* @__PURE__ */ t.jsx(e, { children: /* @__PURE__ */ t.jsxs("div", { className: "relative flex h-screen w-screen bg-gray-100", children: [
|
|
188
|
-
/* @__PURE__ */ t.jsx(R, {}),
|
|
189
|
-
/* @__PURE__ */ t.jsx(L, { ref: l, nodeTypes: p })
|
|
190
|
-
] }) });
|
|
191
|
-
};
|
|
192
|
-
export {
|
|
193
|
-
J as E,
|
|
194
|
-
R as a,
|
|
195
|
-
_ as e
|
|
196
|
-
};
|
|
197
|
-
//# sourceMappingURL=EmojiBoardWidget-94JjolG3.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"EmojiBoardWidget-94JjolG3.js","sources":["../../src/assets/emoji_add.svg?url","../../src/assets/emoji_add_active.svg?url","../../src/features/emoji-sticker/ui/EmojiNode.jsx","../../src/components/EmojiToolbar.jsx","../../src/features/emoji-sticker/public/emojiNodeTypes.js","../../src/widgets/EmojiBoardWidget.jsx"],"sourcesContent":["export default \"data:image/svg+xml,%3csvg%20width='53'%20height='55'%20viewBox='0%200%2053%2055'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M17.4805%209.06134C28.3439%205.4148%2041.8081%2012.4889%2044.7236%2025.491C45.7716%2030.1654%2045.6693%2034.5328%2044.3408%2038.5027C43.0128%2042.4712%2040.4491%2046.075%2036.5225%2049.2059C25.9108%2057.6673%2010.2323%2054.5413%203.62305%2042.8719V42.8709L3.24805%2042.1883C1.43682%2038.7598%200.519459%2035.0399%200.5%2030.0115C0.77733%2023.2257%203.8013%2016.4937%2010.9961%2011.8436C12.8987%2010.6151%2015.1951%209.82717%2017.4795%209.06134H17.4805ZM34.9678%2013.3192C27.8426%208.00625%2017.0199%207.82577%209.95508%2014.4168C5.12103%2018.9247%202.80092%2024.4062%202.70703%2029.743V29.7527C2.71638%2035.6997%204.17812%2040.1971%207.25879%2044.2195C13.7769%2052.7395%2025.531%2054.6508%2034.2949%2048.6111C46.3065%2040.3282%2046.6344%2022.0153%2034.9678%2013.3192Z'%20fill='black'%20stroke='black'/%3e%3cpath%20d='M23.0724%2043.0767C18.121%2043.2052%2013.133%2039.5978%2012.0915%2035.1336C12.0276%2034.868%2012.0002%2034.5766%2012.0002%2034.3367C11.991%2033.6598%2012.3656%2033.5056%2012.6579%2033.4199C12.9503%2033.3428%2013.4984%2033.5998%2013.7176%2033.8655C14.1379%2034.371%2014.4028%2034.9794%2014.7225%2035.5535C16.0563%2037.9013%2017.92%2039.7092%2020.688%2040.489C25.8039%2041.9285%2031.1848%2038.4668%2031.9887%2033.2742C32.0161%2033.0686%2032.144%2032.7258%2032.1988%2032.5716C32.4911%2031.8347%2032.8383%2031.8004%2033.2677%2031.7662C33.9711%2031.7147%2034.2086%2032.3402%2034.1264%2032.9315C33.3042%2038.7067%2028.9009%2042.9824%2023.0724%2043.0767Z'%20fill='black'/%3e%3cpath%20d='M30.2759%2016.0326C30.2857%2015.6747%2030.3776%2015.1557%2030.981%2015.0582C31.5663%2014.9637%2032.0339%2015.2446%2032.2178%2015.5452C33.5514%2017.7549%2034.3449%2020.1562%2034.4241%2022.7076C34.4385%2023.0964%2034.0825%2023.745%2033.6232%2023.8192C32.9658%2023.9253%2032.3642%2023.4662%2032.1922%2023.0767C31.4726%2021.498%2030.2216%2017.945%2030.2759%2016.0326Z'%20fill='black'/%3e%3cpath%20d='M12.722%2024.0753C12.459%2022.614%2012.4411%2021.9477%2012.4645%2020.9964C12.4712%2020.6216%2012.5813%2020.1518%2013.1437%2019.8784C13.8461%2019.765%2014.1506%2020.2721%2014.2698%2020.5745C15.209%2022.9609%2015.7361%2025.0662%2016.1952%2027.6693C16.3062%2028.2859%2016.2131%2028.9528%2015.3937%2029.1373C14.5022%2029.3334%2014.2111%2028.6938%2013.9424%2028.0766C13.3162%2026.6566%2012.9865%2025.5451%2012.722%2024.0753Z'%20fill='black'/%3e%3cpath%20d='M46.5%2013.2895V12.65L45.75%206.89475L45%201.13949V0.500015'%20stroke='black'%20stroke-linecap='round'/%3e%3cpath%20d='M39%207.60529H39.675L45.75%206.89476L51.825%206.18423H52.5'%20stroke='black'%20stroke-linecap='round'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20width='53'%20height='55'%20viewBox='0%200%2053%2055'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M17.4805%209.06134C28.3439%205.4148%2041.8081%2012.4889%2044.7236%2025.491C45.7716%2030.1654%2045.6693%2034.5328%2044.3408%2038.5027C43.0128%2042.4712%2040.4491%2046.075%2036.5225%2049.2059C25.9108%2057.6673%2010.2323%2054.5413%203.62305%2042.8719V42.8709L3.24805%2042.1883C1.43682%2038.7598%200.519459%2035.0399%200.5%2030.0115C0.77733%2023.2257%203.8013%2016.4937%2010.9961%2011.8436C12.8987%2010.6151%2015.1951%209.82717%2017.4795%209.06134H17.4805ZM34.9678%2013.3192C27.8426%208.00625%2017.0199%207.82577%209.95508%2014.4168C5.12103%2018.9247%202.80092%2024.4062%202.70703%2029.743V29.7527C2.71638%2035.6997%204.17812%2040.1971%207.25879%2044.2195C13.7769%2052.7395%2025.531%2054.6508%2034.2949%2048.6111C46.3065%2040.3282%2046.6344%2022.0153%2034.9678%2013.3192Z'%20fill='%230000FF'%20stroke='%230000FF'/%3e%3cpath%20d='M23.0724%2043.0767C18.121%2043.2052%2013.133%2039.5978%2012.0915%2035.1336C12.0276%2034.868%2012.0002%2034.5766%2012.0002%2034.3367C11.991%2033.6598%2012.3656%2033.5056%2012.6579%2033.4199C12.9503%2033.3428%2013.4984%2033.5998%2013.7176%2033.8655C14.1379%2034.371%2014.4028%2034.9794%2014.7225%2035.5535C16.0563%2037.9013%2017.92%2039.7092%2020.688%2040.489C25.8039%2041.9285%2031.1848%2038.4668%2031.9887%2033.2742C32.0161%2033.0686%2032.144%2032.7258%2032.1988%2032.5716C32.4911%2031.8347%2032.8383%2031.8004%2033.2677%2031.7662C33.9711%2031.7147%2034.2086%2032.3402%2034.1264%2032.9315C33.3042%2038.7067%2028.9009%2042.9824%2023.0724%2043.0767Z'%20fill='%230000FF'/%3e%3cpath%20d='M30.2759%2016.0327C30.2857%2015.6747%2030.3776%2015.1557%2030.981%2015.0583C31.5663%2014.9637%2032.0339%2015.2446%2032.2178%2015.5452C33.5514%2017.7549%2034.3449%2020.1562%2034.4241%2022.7076C34.4385%2023.0965%2034.0825%2023.745%2033.6232%2023.8192C32.9658%2023.9254%2032.3642%2023.4662%2032.1922%2023.0768C31.4726%2021.498%2030.2216%2017.945%2030.2759%2016.0327Z'%20fill='%230000FF'/%3e%3cpath%20d='M12.722%2024.0753C12.459%2022.614%2012.4411%2021.9477%2012.4645%2020.9964C12.4712%2020.6216%2012.5813%2020.1518%2013.1437%2019.8784C13.8461%2019.765%2014.1506%2020.2721%2014.2698%2020.5745C15.209%2022.9609%2015.7361%2025.0662%2016.1952%2027.6693C16.3062%2028.2859%2016.2131%2028.9528%2015.3937%2029.1373C14.5022%2029.3334%2014.2111%2028.6938%2013.9424%2028.0766C13.3162%2026.6566%2012.9865%2025.5451%2012.722%2024.0753Z'%20fill='%230000FF'/%3e%3cpath%20d='M46.5%2013.2895V12.65L45.75%206.89475L45%201.13949V0.500015'%20stroke='%230000FF'%20stroke-linecap='round'/%3e%3cpath%20d='M39%207.60529H39.675L45.75%206.89476L51.825%206.18423H52.5'%20stroke='%230000FF'%20stroke-linecap='round'/%3e%3c/svg%3e\"","import React from 'react';\r\nimport { NodeResizer, Handle, Position } from '@xyflow/react';\r\nimport { useStickersStore } from '../../../entities/stickers/model/useStickersStore.js';\r\nimport '../../../styles/sticker.css';\r\nimport { stickersApi } from '../../../shared/api/stickerApi.js';\r\n\r\n\r\nexport const EmojiNode = (props) => {\r\n const { id, selected } = props;\r\n\r\n const sticker = useStickersStore(s =>\r\n s.stickers.find(x => String(x.id) === String(id))\r\n );\r\n\r\n const bringToFront = useStickersStore(s => s.bringToFront);\r\n const updateSticker = useStickersStore(s => s.updateSticker);\r\n\r\n if (!sticker || !sticker.imageUrl) {\r\n return null;\r\n }\r\n\r\n return (\r\n <>\r\n <NodeResizer\r\n isVisible={selected}\r\n minWidth={30}\r\n minHeight={30}\r\n onResizeEnd={async (_, params) => {\r\n const w = Math.max(1, Math.round(params.width));\r\n const h = Math.max(1, Math.round(params.height));\r\n\r\n updateSticker(id, { width: w, height: h });\r\n\r\n try {\r\n await stickersApi.updateTransform(id, w, h);\r\n } catch (e) {\r\n console.warn('Не удалось сохранить размер эмодзи', e);\r\n }\r\n }}\r\n />\r\n\r\n <Handle type=\"target\" position={Position.Left} />\r\n <Handle type=\"source\" position={Position.Right} />\r\n\r\n <div\r\n style={{ width: sticker.width, height: sticker.height, position: 'relative' }}\r\n onPointerDown={() => {\r\n bringToFront(id);\r\n }}\r\n >\r\n <img\r\n src={sticker.imageUrl}\r\n draggable={false}\r\n style={{ width: '100%', height: '100%' }}\r\n />\r\n </div>\r\n </>\r\n );\r\n};","import React, { useState, useRef, useEffect } from 'react';\r\nimport emojiAdd from '../assets/emoji_add.svg?url';\r\nimport emojiAddActive from '../assets/emoji_add_active.svg?url';\r\nimport '../styles/stickerPalette.css';\r\nimport { EMOJI_ITEMS } from '../features/emoji-sticker/stickers.js';\r\nimport { EmojiNode } from '../features/emoji-sticker/ui/EmojiNode.jsx';\r\nimport { useStickersStore } from '../entities/stickers/model/useStickersStore';\r\n\r\nexport const EmojiToolbar = () => {\r\n const [emojiOpen, setEmojiOpen] = useState(false);\r\n const wrapperRef = useRef(null);\r\n\r\n const toggleEmoji = (e) => {\r\n e.stopPropagation();\r\n setEmojiOpen((v) => !v);\r\n };\r\n\r\n // Хук для добавления стикера в состояние при клике\r\n const addSticker = useStickersStore((s) => s.addSticker);\r\n const topZ = useStickersStore((s) => s.topZ);\r\n\r\n const handleStickerClick = (item) => {\r\n const nextZ = (topZ || 1) + 1;\r\n\r\n const x = 100;\r\n const y = 100;\r\n\r\n addSticker({\r\n id: item.id,\r\n stickerId: item.id,\r\n type: 'emoji',\r\n x,\r\n y,\r\n width: 50,\r\n height: 50,\r\n zIndex: nextZ,\r\n color: 'transparent',\r\n text: '',\r\n imageUrl: item.url,\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n if (!emojiOpen) {\r\n return;\r\n }\r\n\r\n const handler = (e) => {\r\n if (wrapperRef.current && !wrapperRef.current.contains(e.target)) {\r\n setEmojiOpen(false);\r\n }\r\n };\r\n\r\n window.addEventListener('pointerdown', handler);\r\n\r\n return () => {\r\n window.removeEventListener('pointerdown', handler);\r\n };\r\n }, [emojiOpen]);\r\n\r\n return (\r\n <div\r\n className=\"left-toolbar-container\"\r\n ref={wrapperRef}\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n }}\r\n >\r\n <div className={`toolbar-card ${emojiOpen ? 'toolbar-card--open' : ''}`}>\r\n <button\r\n onClick={toggleEmoji}\r\n className={`toolbar-btn toolbar-btn--icon toolbar-btn--emoji ${emojiOpen ? 'toolbar-btn--active' : ''}`}\r\n >\r\n <div className={`toolbar-emoji-plate ${emojiOpen ? 'toolbar-emoji-plate--active' : ''}`}>\r\n <img src={emojiOpen ? emojiAddActive : emojiAdd} alt=\"Эмодзи\" draggable={false} />\r\n </div>\r\n </button>\r\n </div>\r\n\r\n {emojiOpen && (\r\n <div\r\n className=\"palette-wrapper\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n }}\r\n >\r\n <div className=\"emoji-panel\" style={{ width: 300, height: 500 }}>\r\n <div className=\"emoji-panel-header\">\r\n <span className=\"emoji-header-title\">Стикеры</span>\r\n </div>\r\n\r\n <div className=\"emoji-grid\">\r\n {EMOJI_ITEMS.map((item) => (\r\n <button\r\n key={item.id}\r\n onClick={() => handleStickerClick(item)}\r\n className=\"emoji-item\"\r\n >\r\n <img src={item.url} draggable={false} />\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n <EmojiNode emojiOpen={emojiOpen} />\r\n </div>\r\n );\r\n};\r\n","import { EmojiNode } from '../ui/EmojiNode.jsx'\r\n\r\nexport const emojiNodeTypes = {\r\n emoji: EmojiNode,\r\n}\r\n","import React, { useEffect, useRef, useState } from 'react'\r\nimport { EmojiToolbar } from '../components/EmojiToolbar.jsx'\r\nimport { Board } from '../features/board/ui/Board.jsx'\r\nimport { useStickersStore } from '../entities/stickers/model/useStickersStore.js'\r\nimport { stickersApi } from '../shared/api/stickerApi.js'\r\nimport { EMOJI_W, EMOJI_H } from '../features/board/constants'\r\nimport { EMOJI_CATALOG, EMOJI_MAP } from '../features/emoji-sticker/stickers.js'\r\nimport { emojiNodeTypes } from '../features/emoji-sticker/public/emojiNodeTypes.js'\r\n\r\nconst SafeFallbackWidget = ({ children }) => <div>{children}</div>\r\n\r\n/**\r\n * @typedef {import('@xyflow/react').NodeProps} NodeProps\r\n * @typedef {Record<string, React.ComponentType<NodeProps>>} NodeTypes\r\n */\r\n\r\n/**\r\n * @param {{ nodeTypes?: NodeTypes }} props\r\n */\r\nexport const EmojiBoardWidget = ({ nodeTypes }) => {\r\n const setStickers = useStickersStore((state) => state.setStickers)\r\n const boardRef = useRef(null)\r\n const [WidgetComp, setWidgetComp] = useState(() => SafeFallbackWidget)\r\n\r\n const mergedNodeTypes = {\r\n ...emojiNodeTypes,\r\n ...(nodeTypes || {}),\r\n }\r\n\r\n async function getEmojiUrlForStickerId(stickerId) {\r\n if (EMOJI_MAP && EMOJI_MAP[stickerId]) {\r\n return EMOJI_MAP[stickerId]\r\n }\r\n\r\n try {\r\n const info = await stickersApi.getById(stickerId)\r\n if (info?.name) {\r\n const local = EMOJI_CATALOG.find((e) => e.name === info.name)\r\n if (local) {\r\n return local.url\r\n }\r\n }\r\n } catch (err) {\r\n console.warn('getEmojiUrlForStickerId: backend lookup failed', err)\r\n }\r\n\r\n return ''\r\n }\r\n\r\n useEffect(() => {\r\n const loadBoard = async () => {\r\n try {\r\n const boardEmojis = await stickersApi.getBoard()\r\n let x = 30\r\n let y = 30\r\n const items = []\r\n\r\n for (const e of boardEmojis) {\r\n const w = e.width ?? EMOJI_W\r\n const h = e.height ?? EMOJI_H\r\n\r\n let imageUrl = EMOJI_MAP?.[String(e.stickerId)] ?? ''\r\n if (!imageUrl) {\r\n try {\r\n imageUrl = await getEmojiUrlForStickerId(e.stickerId)\r\n } catch (err) {\r\n console.warn('Ошибка при получении локального url для stickerId', e.stickerId, err)\r\n imageUrl = ''\r\n }\r\n }\r\n\r\n items.push({\r\n id: e.id,\r\n x,\r\n y,\r\n color: 'transparent',\r\n width: w,\r\n height: h,\r\n text: '',\r\n zIndex: 1,\r\n stickerId: e.stickerId,\r\n imageUrl,\r\n type: 'emoji',\r\n })\r\n\r\n x += 24\r\n y += 24\r\n }\r\n\r\n setStickers(items)\r\n } catch (e) {\r\n console.warn('Не удалось загрузить доску для эмодзи:', e)\r\n }\r\n }\r\n\r\n loadBoard()\r\n }, [setStickers])\r\n\r\n useEffect(() => {\r\n let mounted = true\r\n\r\n import('@xyflow/react')\r\n .then((mod) => {\r\n if (!mounted) {\r\n return\r\n }\r\n\r\n const candidate = (mod && (mod.Widget || mod.default || mod?.widget || mod?.XyflowWidget)) ?? null\r\n if (typeof candidate === 'function' || React.isValidElement(candidate)) {\r\n setWidgetComp(() => candidate)\r\n } else {\r\n setWidgetComp(() => SafeFallbackWidget)\r\n }\r\n })\r\n .catch(() => {\r\n if (mounted) {\r\n setWidgetComp(() => SafeFallbackWidget)\r\n }\r\n })\r\n\r\n return () => { mounted = false }\r\n }, [])\r\n\r\n const Wrapper = WidgetComp || SafeFallbackWidget\r\n\r\n return (\r\n <Wrapper>\r\n <div className=\"relative flex h-screen w-screen bg-gray-100\">\r\n <EmojiToolbar />\r\n <Board ref={boardRef} nodeTypes={mergedNodeTypes} />\r\n </div>\r\n </Wrapper>\r\n )\r\n}\r\n"],"names":["emojiAdd","emojiAddActive","EmojiNode","props","id","selected","sticker","useStickersStore","s","x","bringToFront","updateSticker","jsxs","Fragment","jsx","NodeResizer","_","params","w","h","stickersApi","e","Handle","Position","EmojiToolbar","emojiOpen","setEmojiOpen","useState","wrapperRef","useRef","toggleEmoji","v","addSticker","topZ","handleStickerClick","item","nextZ","useEffect","handler","EMOJI_ITEMS","emojiNodeTypes","SafeFallbackWidget","children","EmojiBoardWidget","nodeTypes","setStickers","state","boardRef","WidgetComp","setWidgetComp","mergedNodeTypes","getEmojiUrlForStickerId","stickerId","EMOJI_MAP","info","local","EMOJI_CATALOG","err","boardEmojis","y","items","EMOJI_W","EMOJI_H","imageUrl","_a","mounted","mod","candidate","React","Wrapper","Board"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";var S=Object.create;var E=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var F=Object.getOwnPropertyNames;var I=Object.getPrototypeOf,N=Object.prototype.hasOwnProperty;var L=(s,r,n,l)=>{if(r&&typeof r=="object"||typeof r=="function")for(let a of F(r))!N.call(s,a)&&a!==n&&E(s,a,{get:()=>r[a],enumerable:!(l=y(r,a))||l.enumerable});return s};var Z=(s,r,n)=>(n=s!=null?S(I(s)):{},L(r||!s||!s.__esModule?E(n,"default",{value:s,enumerable:!0}):n,s));const e=require("./Board-DBlzUx0o.js"),p=require("react"),u=require("@xyflow/react"),A="data:image/svg+xml,%3csvg%20width='53'%20height='55'%20viewBox='0%200%2053%2055'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M17.4805%209.06134C28.3439%205.4148%2041.8081%2012.4889%2044.7236%2025.491C45.7716%2030.1654%2045.6693%2034.5328%2044.3408%2038.5027C43.0128%2042.4712%2040.4491%2046.075%2036.5225%2049.2059C25.9108%2057.6673%2010.2323%2054.5413%203.62305%2042.8719V42.8709L3.24805%2042.1883C1.43682%2038.7598%200.519459%2035.0399%200.5%2030.0115C0.77733%2023.2257%203.8013%2016.4937%2010.9961%2011.8436C12.8987%2010.6151%2015.1951%209.82717%2017.4795%209.06134H17.4805ZM34.9678%2013.3192C27.8426%208.00625%2017.0199%207.82577%209.95508%2014.4168C5.12103%2018.9247%202.80092%2024.4062%202.70703%2029.743V29.7527C2.71638%2035.6997%204.17812%2040.1971%207.25879%2044.2195C13.7769%2052.7395%2025.531%2054.6508%2034.2949%2048.6111C46.3065%2040.3282%2046.6344%2022.0153%2034.9678%2013.3192Z'%20fill='black'%20stroke='black'/%3e%3cpath%20d='M23.0724%2043.0767C18.121%2043.2052%2013.133%2039.5978%2012.0915%2035.1336C12.0276%2034.868%2012.0002%2034.5766%2012.0002%2034.3367C11.991%2033.6598%2012.3656%2033.5056%2012.6579%2033.4199C12.9503%2033.3428%2013.4984%2033.5998%2013.7176%2033.8655C14.1379%2034.371%2014.4028%2034.9794%2014.7225%2035.5535C16.0563%2037.9013%2017.92%2039.7092%2020.688%2040.489C25.8039%2041.9285%2031.1848%2038.4668%2031.9887%2033.2742C32.0161%2033.0686%2032.144%2032.7258%2032.1988%2032.5716C32.4911%2031.8347%2032.8383%2031.8004%2033.2677%2031.7662C33.9711%2031.7147%2034.2086%2032.3402%2034.1264%2032.9315C33.3042%2038.7067%2028.9009%2042.9824%2023.0724%2043.0767Z'%20fill='black'/%3e%3cpath%20d='M30.2759%2016.0326C30.2857%2015.6747%2030.3776%2015.1557%2030.981%2015.0582C31.5663%2014.9637%2032.0339%2015.2446%2032.2178%2015.5452C33.5514%2017.7549%2034.3449%2020.1562%2034.4241%2022.7076C34.4385%2023.0964%2034.0825%2023.745%2033.6232%2023.8192C32.9658%2023.9253%2032.3642%2023.4662%2032.1922%2023.0767C31.4726%2021.498%2030.2216%2017.945%2030.2759%2016.0326Z'%20fill='black'/%3e%3cpath%20d='M12.722%2024.0753C12.459%2022.614%2012.4411%2021.9477%2012.4645%2020.9964C12.4712%2020.6216%2012.5813%2020.1518%2013.1437%2019.8784C13.8461%2019.765%2014.1506%2020.2721%2014.2698%2020.5745C15.209%2022.9609%2015.7361%2025.0662%2016.1952%2027.6693C16.3062%2028.2859%2016.2131%2028.9528%2015.3937%2029.1373C14.5022%2029.3334%2014.2111%2028.6938%2013.9424%2028.0766C13.3162%2026.6566%2012.9865%2025.5451%2012.722%2024.0753Z'%20fill='black'/%3e%3cpath%20d='M46.5%2013.2895V12.65L45.75%206.89475L45%201.13949V0.500015'%20stroke='black'%20stroke-linecap='round'/%3e%3cpath%20d='M39%207.60529H39.675L45.75%206.89476L51.825%206.18423H52.5'%20stroke='black'%20stroke-linecap='round'/%3e%3c/svg%3e",O="data:image/svg+xml,%3csvg%20width='53'%20height='55'%20viewBox='0%200%2053%2055'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M17.4805%209.06134C28.3439%205.4148%2041.8081%2012.4889%2044.7236%2025.491C45.7716%2030.1654%2045.6693%2034.5328%2044.3408%2038.5027C43.0128%2042.4712%2040.4491%2046.075%2036.5225%2049.2059C25.9108%2057.6673%2010.2323%2054.5413%203.62305%2042.8719V42.8709L3.24805%2042.1883C1.43682%2038.7598%200.519459%2035.0399%200.5%2030.0115C0.77733%2023.2257%203.8013%2016.4937%2010.9961%2011.8436C12.8987%2010.6151%2015.1951%209.82717%2017.4795%209.06134H17.4805ZM34.9678%2013.3192C27.8426%208.00625%2017.0199%207.82577%209.95508%2014.4168C5.12103%2018.9247%202.80092%2024.4062%202.70703%2029.743V29.7527C2.71638%2035.6997%204.17812%2040.1971%207.25879%2044.2195C13.7769%2052.7395%2025.531%2054.6508%2034.2949%2048.6111C46.3065%2040.3282%2046.6344%2022.0153%2034.9678%2013.3192Z'%20fill='%230000FF'%20stroke='%230000FF'/%3e%3cpath%20d='M23.0724%2043.0767C18.121%2043.2052%2013.133%2039.5978%2012.0915%2035.1336C12.0276%2034.868%2012.0002%2034.5766%2012.0002%2034.3367C11.991%2033.6598%2012.3656%2033.5056%2012.6579%2033.4199C12.9503%2033.3428%2013.4984%2033.5998%2013.7176%2033.8655C14.1379%2034.371%2014.4028%2034.9794%2014.7225%2035.5535C16.0563%2037.9013%2017.92%2039.7092%2020.688%2040.489C25.8039%2041.9285%2031.1848%2038.4668%2031.9887%2033.2742C32.0161%2033.0686%2032.144%2032.7258%2032.1988%2032.5716C32.4911%2031.8347%2032.8383%2031.8004%2033.2677%2031.7662C33.9711%2031.7147%2034.2086%2032.3402%2034.1264%2032.9315C33.3042%2038.7067%2028.9009%2042.9824%2023.0724%2043.0767Z'%20fill='%230000FF'/%3e%3cpath%20d='M30.2759%2016.0327C30.2857%2015.6747%2030.3776%2015.1557%2030.981%2015.0583C31.5663%2014.9637%2032.0339%2015.2446%2032.2178%2015.5452C33.5514%2017.7549%2034.3449%2020.1562%2034.4241%2022.7076C34.4385%2023.0965%2034.0825%2023.745%2033.6232%2023.8192C32.9658%2023.9254%2032.3642%2023.4662%2032.1922%2023.0768C31.4726%2021.498%2030.2216%2017.945%2030.2759%2016.0327Z'%20fill='%230000FF'/%3e%3cpath%20d='M12.722%2024.0753C12.459%2022.614%2012.4411%2021.9477%2012.4645%2020.9964C12.4712%2020.6216%2012.5813%2020.1518%2013.1437%2019.8784C13.8461%2019.765%2014.1506%2020.2721%2014.2698%2020.5745C15.209%2022.9609%2015.7361%2025.0662%2016.1952%2027.6693C16.3062%2028.2859%2016.2131%2028.9528%2015.3937%2029.1373C14.5022%2029.3334%2014.2111%2028.6938%2013.9424%2028.0766C13.3162%2026.6566%2012.9865%2025.5451%2012.722%2024.0753Z'%20fill='%230000FF'/%3e%3cpath%20d='M46.5%2013.2895V12.65L45.75%206.89475L45%201.13949V0.500015'%20stroke='%230000FF'%20stroke-linecap='round'/%3e%3cpath%20d='M39%207.60529H39.675L45.75%206.89476L51.825%206.18423H52.5'%20stroke='%230000FF'%20stroke-linecap='round'/%3e%3c/svg%3e",k=s=>{const{id:r,selected:n}=s,l=e.useStickersStore(d=>d.stickers.find(t=>String(t.id)===String(r))),a=e.useStickersStore(d=>d.bringToFront),h=e.useStickersStore(d=>d.updateSticker);return!l||!l.imageUrl?null:e.jsxRuntimeExports.jsxs(e.jsxRuntimeExports.Fragment,{children:[e.jsxRuntimeExports.jsx(u.NodeResizer,{isVisible:n,minWidth:30,minHeight:30,onResizeEnd:async(d,t)=>{const o=Math.max(1,Math.round(t.width)),i=Math.max(1,Math.round(t.height));h(r,{width:o,height:i});try{await e.stickersApi.updateTransform(r,o,i)}catch(c){console.warn("Не удалось сохранить размер эмодзи",c)}}}),e.jsxRuntimeExports.jsx(u.Handle,{type:"target",position:u.Position.Left}),e.jsxRuntimeExports.jsx(u.Handle,{type:"source",position:u.Position.Right}),e.jsxRuntimeExports.jsx("div",{style:{width:l.width,height:l.height,position:"relative"},onPointerDown:()=>{a(r)},children:e.jsxRuntimeExports.jsx("img",{src:l.imageUrl,draggable:!1,style:{width:"100%",height:"100%"}})})]})},w=()=>{const[s,r]=p.useState(!1),n=p.useRef(null),l=t=>{t.stopPropagation(),r(o=>!o)},a=e.useStickersStore(t=>t.addSticker),h=e.useStickersStore(t=>t.topZ),d=t=>{const o=(h||1)+1;a({id:t.id,stickerId:t.id,type:"emoji",x:100,y:100,width:50,height:50,zIndex:o,color:"transparent",text:"",imageUrl:t.url})};return p.useEffect(()=>{if(!s)return;const t=o=>{n.current&&!n.current.contains(o.target)&&r(!1)};return window.addEventListener("pointerdown",t),()=>{window.removeEventListener("pointerdown",t)}},[s]),e.jsxRuntimeExports.jsxs("div",{className:"left-toolbar-container",ref:n,onClick:t=>{t.stopPropagation()},children:[e.jsxRuntimeExports.jsx("div",{className:`toolbar-card ${s?"toolbar-card--open":""}`,children:e.jsxRuntimeExports.jsx("button",{onClick:l,className:`toolbar-btn toolbar-btn--icon toolbar-btn--emoji ${s?"toolbar-btn--active":""}`,children:e.jsxRuntimeExports.jsx("div",{className:`toolbar-emoji-plate ${s?"toolbar-emoji-plate--active":""}`,children:e.jsxRuntimeExports.jsx("img",{src:s?O:A,alt:"Эмодзи",draggable:!1})})})}),s&&e.jsxRuntimeExports.jsx("div",{className:"palette-wrapper",onClick:t=>{t.stopPropagation()},children:e.jsxRuntimeExports.jsxs("div",{className:"emoji-panel",style:{width:300,height:500},children:[e.jsxRuntimeExports.jsx("div",{className:"emoji-panel-header",children:e.jsxRuntimeExports.jsx("span",{className:"emoji-header-title",children:"Стикеры"})}),e.jsxRuntimeExports.jsx("div",{className:"emoji-grid",children:e.EMOJI_ITEMS.map(t=>e.jsxRuntimeExports.jsx("button",{onClick:()=>d(t),className:"emoji-item",children:e.jsxRuntimeExports.jsx("img",{src:t.url,draggable:!1})},t.id))})]})}),e.jsxRuntimeExports.jsx(k,{emojiOpen:s})]})},b={emoji:k},j=({children:s})=>e.jsxRuntimeExports.jsx("div",{children:s}),T=({nodeTypes:s})=>{const r=e.useStickersStore(o=>o.setStickers),n=p.useRef(null),[l,a]=p.useState(()=>j),h={...b,...s||{}};async function d(o){if(e.EMOJI_MAP&&e.EMOJI_MAP[o])return e.EMOJI_MAP[o];try{const i=await e.stickersApi.getById(o);if(i!=null&&i.name){const c=e.EMOJI_CATALOG.find(C=>C.name===i.name);if(c)return c.url}}catch(i){console.warn("getEmojiUrlForStickerId: backend lookup failed",i)}return""}p.useEffect(()=>{(async()=>{var i;try{const c=await e.stickersApi.getBoard();let C=30,g=30;const f=[];for(const x of c){const R=x.width??e.EMOJI_W,M=x.height??e.EMOJI_H;let m=((i=e.EMOJI_MAP)==null?void 0:i[String(x.stickerId)])??"";if(!m)try{m=await d(x.stickerId)}catch(v){console.warn("Ошибка при получении локального url для stickerId",x.stickerId,v),m=""}f.push({id:x.id,x:C,y:g,color:"transparent",width:R,height:M,text:"",zIndex:1,stickerId:x.stickerId,imageUrl:m,type:"emoji"}),C+=24,g+=24}r(f)}catch(c){console.warn("Не удалось загрузить доску для эмодзи:",c)}})()},[r]),p.useEffect(()=>{let o=!0;return import("@xyflow/react").then(i=>{if(!o)return;const c=(i&&(i.Widget||i.default||(i==null?void 0:i.widget)||(i==null?void 0:i.XyflowWidget)))??null;typeof c=="function"||p.isValidElement(c)?a(()=>c):a(()=>j)}).catch(()=>{o&&a(()=>j)}),()=>{o=!1}},[]);const t=l||j;return e.jsxRuntimeExports.jsx(t,{children:e.jsxRuntimeExports.jsxs("div",{className:"relative flex h-screen w-screen bg-gray-100",children:[e.jsxRuntimeExports.jsx(w,{}),e.jsxRuntimeExports.jsx(e.Board,{ref:n,nodeTypes:h})]})})};exports.EmojiBoardWidget=T;exports.EmojiToolbar=w;exports.emojiNodeTypes=b;
|
|
2
|
-
//# sourceMappingURL=EmojiBoardWidget-jQpQl320.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"EmojiBoardWidget-jQpQl320.js","sources":["../../src/assets/emoji_add.svg?url","../../src/assets/emoji_add_active.svg?url","../../src/features/emoji-sticker/ui/EmojiNode.jsx","../../src/components/EmojiToolbar.jsx","../../src/features/emoji-sticker/public/emojiNodeTypes.js","../../src/widgets/EmojiBoardWidget.jsx"],"sourcesContent":["export default \"data:image/svg+xml,%3csvg%20width='53'%20height='55'%20viewBox='0%200%2053%2055'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M17.4805%209.06134C28.3439%205.4148%2041.8081%2012.4889%2044.7236%2025.491C45.7716%2030.1654%2045.6693%2034.5328%2044.3408%2038.5027C43.0128%2042.4712%2040.4491%2046.075%2036.5225%2049.2059C25.9108%2057.6673%2010.2323%2054.5413%203.62305%2042.8719V42.8709L3.24805%2042.1883C1.43682%2038.7598%200.519459%2035.0399%200.5%2030.0115C0.77733%2023.2257%203.8013%2016.4937%2010.9961%2011.8436C12.8987%2010.6151%2015.1951%209.82717%2017.4795%209.06134H17.4805ZM34.9678%2013.3192C27.8426%208.00625%2017.0199%207.82577%209.95508%2014.4168C5.12103%2018.9247%202.80092%2024.4062%202.70703%2029.743V29.7527C2.71638%2035.6997%204.17812%2040.1971%207.25879%2044.2195C13.7769%2052.7395%2025.531%2054.6508%2034.2949%2048.6111C46.3065%2040.3282%2046.6344%2022.0153%2034.9678%2013.3192Z'%20fill='black'%20stroke='black'/%3e%3cpath%20d='M23.0724%2043.0767C18.121%2043.2052%2013.133%2039.5978%2012.0915%2035.1336C12.0276%2034.868%2012.0002%2034.5766%2012.0002%2034.3367C11.991%2033.6598%2012.3656%2033.5056%2012.6579%2033.4199C12.9503%2033.3428%2013.4984%2033.5998%2013.7176%2033.8655C14.1379%2034.371%2014.4028%2034.9794%2014.7225%2035.5535C16.0563%2037.9013%2017.92%2039.7092%2020.688%2040.489C25.8039%2041.9285%2031.1848%2038.4668%2031.9887%2033.2742C32.0161%2033.0686%2032.144%2032.7258%2032.1988%2032.5716C32.4911%2031.8347%2032.8383%2031.8004%2033.2677%2031.7662C33.9711%2031.7147%2034.2086%2032.3402%2034.1264%2032.9315C33.3042%2038.7067%2028.9009%2042.9824%2023.0724%2043.0767Z'%20fill='black'/%3e%3cpath%20d='M30.2759%2016.0326C30.2857%2015.6747%2030.3776%2015.1557%2030.981%2015.0582C31.5663%2014.9637%2032.0339%2015.2446%2032.2178%2015.5452C33.5514%2017.7549%2034.3449%2020.1562%2034.4241%2022.7076C34.4385%2023.0964%2034.0825%2023.745%2033.6232%2023.8192C32.9658%2023.9253%2032.3642%2023.4662%2032.1922%2023.0767C31.4726%2021.498%2030.2216%2017.945%2030.2759%2016.0326Z'%20fill='black'/%3e%3cpath%20d='M12.722%2024.0753C12.459%2022.614%2012.4411%2021.9477%2012.4645%2020.9964C12.4712%2020.6216%2012.5813%2020.1518%2013.1437%2019.8784C13.8461%2019.765%2014.1506%2020.2721%2014.2698%2020.5745C15.209%2022.9609%2015.7361%2025.0662%2016.1952%2027.6693C16.3062%2028.2859%2016.2131%2028.9528%2015.3937%2029.1373C14.5022%2029.3334%2014.2111%2028.6938%2013.9424%2028.0766C13.3162%2026.6566%2012.9865%2025.5451%2012.722%2024.0753Z'%20fill='black'/%3e%3cpath%20d='M46.5%2013.2895V12.65L45.75%206.89475L45%201.13949V0.500015'%20stroke='black'%20stroke-linecap='round'/%3e%3cpath%20d='M39%207.60529H39.675L45.75%206.89476L51.825%206.18423H52.5'%20stroke='black'%20stroke-linecap='round'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20width='53'%20height='55'%20viewBox='0%200%2053%2055'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M17.4805%209.06134C28.3439%205.4148%2041.8081%2012.4889%2044.7236%2025.491C45.7716%2030.1654%2045.6693%2034.5328%2044.3408%2038.5027C43.0128%2042.4712%2040.4491%2046.075%2036.5225%2049.2059C25.9108%2057.6673%2010.2323%2054.5413%203.62305%2042.8719V42.8709L3.24805%2042.1883C1.43682%2038.7598%200.519459%2035.0399%200.5%2030.0115C0.77733%2023.2257%203.8013%2016.4937%2010.9961%2011.8436C12.8987%2010.6151%2015.1951%209.82717%2017.4795%209.06134H17.4805ZM34.9678%2013.3192C27.8426%208.00625%2017.0199%207.82577%209.95508%2014.4168C5.12103%2018.9247%202.80092%2024.4062%202.70703%2029.743V29.7527C2.71638%2035.6997%204.17812%2040.1971%207.25879%2044.2195C13.7769%2052.7395%2025.531%2054.6508%2034.2949%2048.6111C46.3065%2040.3282%2046.6344%2022.0153%2034.9678%2013.3192Z'%20fill='%230000FF'%20stroke='%230000FF'/%3e%3cpath%20d='M23.0724%2043.0767C18.121%2043.2052%2013.133%2039.5978%2012.0915%2035.1336C12.0276%2034.868%2012.0002%2034.5766%2012.0002%2034.3367C11.991%2033.6598%2012.3656%2033.5056%2012.6579%2033.4199C12.9503%2033.3428%2013.4984%2033.5998%2013.7176%2033.8655C14.1379%2034.371%2014.4028%2034.9794%2014.7225%2035.5535C16.0563%2037.9013%2017.92%2039.7092%2020.688%2040.489C25.8039%2041.9285%2031.1848%2038.4668%2031.9887%2033.2742C32.0161%2033.0686%2032.144%2032.7258%2032.1988%2032.5716C32.4911%2031.8347%2032.8383%2031.8004%2033.2677%2031.7662C33.9711%2031.7147%2034.2086%2032.3402%2034.1264%2032.9315C33.3042%2038.7067%2028.9009%2042.9824%2023.0724%2043.0767Z'%20fill='%230000FF'/%3e%3cpath%20d='M30.2759%2016.0327C30.2857%2015.6747%2030.3776%2015.1557%2030.981%2015.0583C31.5663%2014.9637%2032.0339%2015.2446%2032.2178%2015.5452C33.5514%2017.7549%2034.3449%2020.1562%2034.4241%2022.7076C34.4385%2023.0965%2034.0825%2023.745%2033.6232%2023.8192C32.9658%2023.9254%2032.3642%2023.4662%2032.1922%2023.0768C31.4726%2021.498%2030.2216%2017.945%2030.2759%2016.0327Z'%20fill='%230000FF'/%3e%3cpath%20d='M12.722%2024.0753C12.459%2022.614%2012.4411%2021.9477%2012.4645%2020.9964C12.4712%2020.6216%2012.5813%2020.1518%2013.1437%2019.8784C13.8461%2019.765%2014.1506%2020.2721%2014.2698%2020.5745C15.209%2022.9609%2015.7361%2025.0662%2016.1952%2027.6693C16.3062%2028.2859%2016.2131%2028.9528%2015.3937%2029.1373C14.5022%2029.3334%2014.2111%2028.6938%2013.9424%2028.0766C13.3162%2026.6566%2012.9865%2025.5451%2012.722%2024.0753Z'%20fill='%230000FF'/%3e%3cpath%20d='M46.5%2013.2895V12.65L45.75%206.89475L45%201.13949V0.500015'%20stroke='%230000FF'%20stroke-linecap='round'/%3e%3cpath%20d='M39%207.60529H39.675L45.75%206.89476L51.825%206.18423H52.5'%20stroke='%230000FF'%20stroke-linecap='round'/%3e%3c/svg%3e\"","import React from 'react';\r\nimport { NodeResizer, Handle, Position } from '@xyflow/react';\r\nimport { useStickersStore } from '../../../entities/stickers/model/useStickersStore.js';\r\nimport '../../../styles/sticker.css';\r\nimport { stickersApi } from '../../../shared/api/stickerApi.js';\r\n\r\n\r\nexport const EmojiNode = (props) => {\r\n const { id, selected } = props;\r\n\r\n const sticker = useStickersStore(s =>\r\n s.stickers.find(x => String(x.id) === String(id))\r\n );\r\n\r\n const bringToFront = useStickersStore(s => s.bringToFront);\r\n const updateSticker = useStickersStore(s => s.updateSticker);\r\n\r\n if (!sticker || !sticker.imageUrl) {\r\n return null;\r\n }\r\n\r\n return (\r\n <>\r\n <NodeResizer\r\n isVisible={selected}\r\n minWidth={30}\r\n minHeight={30}\r\n onResizeEnd={async (_, params) => {\r\n const w = Math.max(1, Math.round(params.width));\r\n const h = Math.max(1, Math.round(params.height));\r\n\r\n updateSticker(id, { width: w, height: h });\r\n\r\n try {\r\n await stickersApi.updateTransform(id, w, h);\r\n } catch (e) {\r\n console.warn('Не удалось сохранить размер эмодзи', e);\r\n }\r\n }}\r\n />\r\n\r\n <Handle type=\"target\" position={Position.Left} />\r\n <Handle type=\"source\" position={Position.Right} />\r\n\r\n <div\r\n style={{ width: sticker.width, height: sticker.height, position: 'relative' }}\r\n onPointerDown={() => {\r\n bringToFront(id);\r\n }}\r\n >\r\n <img\r\n src={sticker.imageUrl}\r\n draggable={false}\r\n style={{ width: '100%', height: '100%' }}\r\n />\r\n </div>\r\n </>\r\n );\r\n};","import React, { useState, useRef, useEffect } from 'react';\r\nimport emojiAdd from '../assets/emoji_add.svg?url';\r\nimport emojiAddActive from '../assets/emoji_add_active.svg?url';\r\nimport '../styles/stickerPalette.css';\r\nimport { EMOJI_ITEMS } from '../features/emoji-sticker/stickers.js';\r\nimport { EmojiNode } from '../features/emoji-sticker/ui/EmojiNode.jsx';\r\nimport { useStickersStore } from '../entities/stickers/model/useStickersStore';\r\n\r\nexport const EmojiToolbar = () => {\r\n const [emojiOpen, setEmojiOpen] = useState(false);\r\n const wrapperRef = useRef(null);\r\n\r\n const toggleEmoji = (e) => {\r\n e.stopPropagation();\r\n setEmojiOpen((v) => !v);\r\n };\r\n\r\n // Хук для добавления стикера в состояние при клике\r\n const addSticker = useStickersStore((s) => s.addSticker);\r\n const topZ = useStickersStore((s) => s.topZ);\r\n\r\n const handleStickerClick = (item) => {\r\n const nextZ = (topZ || 1) + 1;\r\n\r\n const x = 100;\r\n const y = 100;\r\n\r\n addSticker({\r\n id: item.id,\r\n stickerId: item.id,\r\n type: 'emoji',\r\n x,\r\n y,\r\n width: 50,\r\n height: 50,\r\n zIndex: nextZ,\r\n color: 'transparent',\r\n text: '',\r\n imageUrl: item.url,\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n if (!emojiOpen) {\r\n return;\r\n }\r\n\r\n const handler = (e) => {\r\n if (wrapperRef.current && !wrapperRef.current.contains(e.target)) {\r\n setEmojiOpen(false);\r\n }\r\n };\r\n\r\n window.addEventListener('pointerdown', handler);\r\n\r\n return () => {\r\n window.removeEventListener('pointerdown', handler);\r\n };\r\n }, [emojiOpen]);\r\n\r\n return (\r\n <div\r\n className=\"left-toolbar-container\"\r\n ref={wrapperRef}\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n }}\r\n >\r\n <div className={`toolbar-card ${emojiOpen ? 'toolbar-card--open' : ''}`}>\r\n <button\r\n onClick={toggleEmoji}\r\n className={`toolbar-btn toolbar-btn--icon toolbar-btn--emoji ${emojiOpen ? 'toolbar-btn--active' : ''}`}\r\n >\r\n <div className={`toolbar-emoji-plate ${emojiOpen ? 'toolbar-emoji-plate--active' : ''}`}>\r\n <img src={emojiOpen ? emojiAddActive : emojiAdd} alt=\"Эмодзи\" draggable={false} />\r\n </div>\r\n </button>\r\n </div>\r\n\r\n {emojiOpen && (\r\n <div\r\n className=\"palette-wrapper\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n }}\r\n >\r\n <div className=\"emoji-panel\" style={{ width: 300, height: 500 }}>\r\n <div className=\"emoji-panel-header\">\r\n <span className=\"emoji-header-title\">Стикеры</span>\r\n </div>\r\n\r\n <div className=\"emoji-grid\">\r\n {EMOJI_ITEMS.map((item) => (\r\n <button\r\n key={item.id}\r\n onClick={() => handleStickerClick(item)}\r\n className=\"emoji-item\"\r\n >\r\n <img src={item.url} draggable={false} />\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n <EmojiNode emojiOpen={emojiOpen} />\r\n </div>\r\n );\r\n};\r\n","import { EmojiNode } from '../ui/EmojiNode.jsx'\r\n\r\nexport const emojiNodeTypes = {\r\n emoji: EmojiNode,\r\n}\r\n","import React, { useEffect, useRef, useState } from 'react'\r\nimport { EmojiToolbar } from '../components/EmojiToolbar.jsx'\r\nimport { Board } from '../features/board/ui/Board.jsx'\r\nimport { useStickersStore } from '../entities/stickers/model/useStickersStore.js'\r\nimport { stickersApi } from '../shared/api/stickerApi.js'\r\nimport { EMOJI_W, EMOJI_H } from '../features/board/constants'\r\nimport { EMOJI_CATALOG, EMOJI_MAP } from '../features/emoji-sticker/stickers.js'\r\nimport { emojiNodeTypes } from '../features/emoji-sticker/public/emojiNodeTypes.js'\r\n\r\nconst SafeFallbackWidget = ({ children }) => <div>{children}</div>\r\n\r\n/**\r\n * @typedef {import('@xyflow/react').NodeProps} NodeProps\r\n * @typedef {Record<string, React.ComponentType<NodeProps>>} NodeTypes\r\n */\r\n\r\n/**\r\n * @param {{ nodeTypes?: NodeTypes }} props\r\n */\r\nexport const EmojiBoardWidget = ({ nodeTypes }) => {\r\n const setStickers = useStickersStore((state) => state.setStickers)\r\n const boardRef = useRef(null)\r\n const [WidgetComp, setWidgetComp] = useState(() => SafeFallbackWidget)\r\n\r\n const mergedNodeTypes = {\r\n ...emojiNodeTypes,\r\n ...(nodeTypes || {}),\r\n }\r\n\r\n async function getEmojiUrlForStickerId(stickerId) {\r\n if (EMOJI_MAP && EMOJI_MAP[stickerId]) {\r\n return EMOJI_MAP[stickerId]\r\n }\r\n\r\n try {\r\n const info = await stickersApi.getById(stickerId)\r\n if (info?.name) {\r\n const local = EMOJI_CATALOG.find((e) => e.name === info.name)\r\n if (local) {\r\n return local.url\r\n }\r\n }\r\n } catch (err) {\r\n console.warn('getEmojiUrlForStickerId: backend lookup failed', err)\r\n }\r\n\r\n return ''\r\n }\r\n\r\n useEffect(() => {\r\n const loadBoard = async () => {\r\n try {\r\n const boardEmojis = await stickersApi.getBoard()\r\n let x = 30\r\n let y = 30\r\n const items = []\r\n\r\n for (const e of boardEmojis) {\r\n const w = e.width ?? EMOJI_W\r\n const h = e.height ?? EMOJI_H\r\n\r\n let imageUrl = EMOJI_MAP?.[String(e.stickerId)] ?? ''\r\n if (!imageUrl) {\r\n try {\r\n imageUrl = await getEmojiUrlForStickerId(e.stickerId)\r\n } catch (err) {\r\n console.warn('Ошибка при получении локального url для stickerId', e.stickerId, err)\r\n imageUrl = ''\r\n }\r\n }\r\n\r\n items.push({\r\n id: e.id,\r\n x,\r\n y,\r\n color: 'transparent',\r\n width: w,\r\n height: h,\r\n text: '',\r\n zIndex: 1,\r\n stickerId: e.stickerId,\r\n imageUrl,\r\n type: 'emoji',\r\n })\r\n\r\n x += 24\r\n y += 24\r\n }\r\n\r\n setStickers(items)\r\n } catch (e) {\r\n console.warn('Не удалось загрузить доску для эмодзи:', e)\r\n }\r\n }\r\n\r\n loadBoard()\r\n }, [setStickers])\r\n\r\n useEffect(() => {\r\n let mounted = true\r\n\r\n import('@xyflow/react')\r\n .then((mod) => {\r\n if (!mounted) {\r\n return\r\n }\r\n\r\n const candidate = (mod && (mod.Widget || mod.default || mod?.widget || mod?.XyflowWidget)) ?? null\r\n if (typeof candidate === 'function' || React.isValidElement(candidate)) {\r\n setWidgetComp(() => candidate)\r\n } else {\r\n setWidgetComp(() => SafeFallbackWidget)\r\n }\r\n })\r\n .catch(() => {\r\n if (mounted) {\r\n setWidgetComp(() => SafeFallbackWidget)\r\n }\r\n })\r\n\r\n return () => { mounted = false }\r\n }, [])\r\n\r\n const Wrapper = WidgetComp || SafeFallbackWidget\r\n\r\n return (\r\n <Wrapper>\r\n <div className=\"relative flex h-screen w-screen bg-gray-100\">\r\n <EmojiToolbar />\r\n <Board ref={boardRef} nodeTypes={mergedNodeTypes} />\r\n </div>\r\n </Wrapper>\r\n )\r\n}\r\n"],"names":["emojiAdd","emojiAddActive","EmojiNode","props","id","selected","sticker","useStickersStore","s","x","bringToFront","updateSticker","jsxs","Fragment","jsx","NodeResizer","_","params","w","h","stickersApi","e","Handle","Position","EmojiToolbar","emojiOpen","setEmojiOpen","useState","wrapperRef","useRef","toggleEmoji","v","addSticker","topZ","handleStickerClick","item","nextZ","useEffect","handler","EMOJI_ITEMS","emojiNodeTypes","SafeFallbackWidget","children","EmojiBoardWidget","nodeTypes","setStickers","state","boardRef","WidgetComp","setWidgetComp","mergedNodeTypes","getEmojiUrlForStickerId","stickerId","EMOJI_MAP","info","local","EMOJI_CATALOG","err","boardEmojis","y","items","EMOJI_W","EMOJI_H","imageUrl","mounted","mod","candidate","React","Wrapper","Board"],"mappings":"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"}
|
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
import { j as e, S as B, e as y, D as N, u as C, B as A, a as w } from "./Board-CENI1zTY.js";
|
|
2
|
-
import I, { useState as b, useRef as f, useEffect as k } from "react";
|
|
3
|
-
const D = {
|
|
4
|
-
square: /* @__PURE__ */ e.jsx("svg", { width: "40", height: "40", children: /* @__PURE__ */ e.jsx("rect", { x: "4", y: "4", width: "32", height: "32", stroke: "black", fill: "none", strokeWidth: "2" }) }),
|
|
5
|
-
circle: /* @__PURE__ */ e.jsx("svg", { width: "40", height: "40", children: /* @__PURE__ */ e.jsx("circle", { cx: "20", cy: "20", r: "14", stroke: "black", fill: "none", strokeWidth: "2" }) }),
|
|
6
|
-
triangle: /* @__PURE__ */ e.jsx("svg", { width: "40", height: "40", children: /* @__PURE__ */ e.jsx("polygon", { points: "20,6 34,34 6,34", stroke: "black", fill: "none", strokeWidth: "2" }) }),
|
|
7
|
-
star: /* @__PURE__ */ e.jsx("svg", { width: "40", height: "40", children: /* @__PURE__ */ e.jsx(
|
|
8
|
-
"polygon",
|
|
9
|
-
{
|
|
10
|
-
points: "20,4 25,16 38,16 27,24 32,36 20,28 8,36 13,24 2,16 15,16",
|
|
11
|
-
stroke: "black",
|
|
12
|
-
fill: "none",
|
|
13
|
-
strokeWidth: "2"
|
|
14
|
-
}
|
|
15
|
-
) }),
|
|
16
|
-
stick: /* @__PURE__ */ e.jsx("svg", { width: "40", height: "40", children: /* @__PURE__ */ e.jsx("rect", { x: "16", y: "4", width: "8", height: "32", stroke: "black", fill: "none", strokeWidth: "2" }) }),
|
|
17
|
-
line: /* @__PURE__ */ e.jsx("svg", { width: "40", height: "40", children: /* @__PURE__ */ e.jsx("line", { x1: "4", y1: "20", x2: "36", y2: "20", stroke: "black", strokeWidth: "2" }) }),
|
|
18
|
-
arrow: /* @__PURE__ */ e.jsxs("svg", { width: "40", height: "40", children: [
|
|
19
|
-
/* @__PURE__ */ e.jsx("line", { x1: "4", y1: "20", x2: "30", y2: "20", stroke: "black", strokeWidth: "2" }),
|
|
20
|
-
/* @__PURE__ */ e.jsx("polygon", { points: "30,14 38,20 30,26", fill: "black" })
|
|
21
|
-
] }),
|
|
22
|
-
dblarrow: /* @__PURE__ */ e.jsxs("svg", { width: "40", height: "40", children: [
|
|
23
|
-
/* @__PURE__ */ e.jsx("polygon", { points: "4,20 12,14 12,26", fill: "black" }),
|
|
24
|
-
/* @__PURE__ */ e.jsx("line", { x1: "12", y1: "20", x2: "28", y2: "20", stroke: "black", strokeWidth: "2" }),
|
|
25
|
-
/* @__PURE__ */ e.jsx("polygon", { points: "28,14 36,20 28,26", fill: "black" })
|
|
26
|
-
] }),
|
|
27
|
-
parallelogram: /* @__PURE__ */ e.jsx("svg", { width: "40", height: "40", viewBox: "0 0 40 40", children: /* @__PURE__ */ e.jsx("polygon", { points: "8,8 34,8 26,32 0,32", stroke: "black", fill: "none", strokeWidth: "2" }) }),
|
|
28
|
-
roundedRect: /* @__PURE__ */ e.jsx("svg", { width: "40", height: "40", viewBox: "0 0 40 40", children: /* @__PURE__ */ e.jsx("rect", { x: "6", y: "10", width: "28", height: "20", rx: "4", ry: "4", stroke: "black", fill: "none", strokeWidth: "2" }) }),
|
|
29
|
-
capsule: /* @__PURE__ */ e.jsx("svg", { width: "40", height: "40", viewBox: "0 0 40 40", children: /* @__PURE__ */ e.jsx("rect", { x: "6", y: "14", width: "28", height: "12", rx: "6", ry: "6", stroke: "black", fill: "none", strokeWidth: "2" }) }),
|
|
30
|
-
pentagon: /* @__PURE__ */ e.jsx("svg", { width: "40", height: "40", viewBox: "0 0 40 40", children: /* @__PURE__ */ e.jsx("polygon", { points: "20,6 34,15 28,32 12,32 6,15", stroke: "black", fill: "none", strokeWidth: "2" }) }),
|
|
31
|
-
chevron: /* @__PURE__ */ e.jsx("svg", { width: "40", height: "40", viewBox: "0 0 100 100", children: /* @__PURE__ */ e.jsx(
|
|
32
|
-
"polyline",
|
|
33
|
-
{
|
|
34
|
-
points: "0,0 50,100 100,0",
|
|
35
|
-
fill: "none",
|
|
36
|
-
stroke: "black",
|
|
37
|
-
strokeWidth: "5"
|
|
38
|
-
}
|
|
39
|
-
) }),
|
|
40
|
-
table3x3: /* @__PURE__ */ e.jsxs("svg", { width: "40", height: "40", viewBox: "0 0 40 40", children: [
|
|
41
|
-
/* @__PURE__ */ e.jsx("rect", { x: "4", y: "4", width: "32", height: "32", stroke: "black", fill: "none", strokeWidth: "2" }),
|
|
42
|
-
/* @__PURE__ */ e.jsx("line", { x1: "14", y1: "4", x2: "14", y2: "36", stroke: "black", strokeWidth: "2" }),
|
|
43
|
-
/* @__PURE__ */ e.jsx("line", { x1: "26", y1: "4", x2: "26", y2: "36", stroke: "black", strokeWidth: "2" }),
|
|
44
|
-
/* @__PURE__ */ e.jsx("line", { x1: "4", y1: "14", x2: "36", y2: "14", stroke: "black", strokeWidth: "2" }),
|
|
45
|
-
/* @__PURE__ */ e.jsx("line", { x1: "4", y1: "26", x2: "36", y2: "26", stroke: "black", strokeWidth: "2" })
|
|
46
|
-
] }),
|
|
47
|
-
pyramid: /* @__PURE__ */ e.jsxs("svg", { width: "40", height: "40", viewBox: "0 0 40 40", children: [
|
|
48
|
-
/* @__PURE__ */ e.jsx("polygon", { points: "20,4 36,36 4,36", stroke: "black", fill: "none", strokeWidth: "2" }),
|
|
49
|
-
/* @__PURE__ */ e.jsx("line", { x1: "15", y1: "12", x2: "25", y2: "12", stroke: "black", strokeWidth: "2" }),
|
|
50
|
-
/* @__PURE__ */ e.jsx("line", { x1: "11", y1: "20", x2: "28", y2: "20", stroke: "black", strokeWidth: "2" }),
|
|
51
|
-
/* @__PURE__ */ e.jsx("line", { x1: "7", y1: "28", x2: "32", y2: "28", stroke: "black", strokeWidth: "2" })
|
|
52
|
-
] }),
|
|
53
|
-
circleArrow: /* @__PURE__ */ e.jsxs("svg", { width: "40", height: "40", viewBox: "0 0 40 40", children: [
|
|
54
|
-
/* @__PURE__ */ e.jsx("circle", { cx: "20", cy: "20", r: "14", stroke: "black", fill: "none", strokeWidth: "2" }),
|
|
55
|
-
/* @__PURE__ */ e.jsx("line", { x1: "20", y1: "6", x2: "20", y2: "0", stroke: "black", strokeWidth: "2" }),
|
|
56
|
-
/* @__PURE__ */ e.jsx("polygon", { points: "18,2 22,2 20,0", fill: "black" })
|
|
57
|
-
] }),
|
|
58
|
-
table3x3LeftMerge: /* @__PURE__ */ e.jsxs("svg", { width: "40", height: "40", viewBox: "0 0 40 40", children: [
|
|
59
|
-
/* @__PURE__ */ e.jsx("rect", { x: "4", y: "4", width: "32", height: "32", stroke: "black", fill: "none", strokeWidth: "2" }),
|
|
60
|
-
/* @__PURE__ */ e.jsx("line", { x1: "14", y1: "4", x2: "14", y2: "36", stroke: "black", strokeWidth: "2" }),
|
|
61
|
-
/* @__PURE__ */ e.jsx("line", { x1: "26", y1: "4", x2: "26", y2: "36", stroke: "black", strokeWidth: "2" }),
|
|
62
|
-
/* @__PURE__ */ e.jsx("line", { x1: "14", y1: "16", x2: "36", y2: "16", stroke: "black", strokeWidth: "2" }),
|
|
63
|
-
/* @__PURE__ */ e.jsx("line", { x1: "14", y1: "28", x2: "36", y2: "28", stroke: "black", strokeWidth: "2" })
|
|
64
|
-
] })
|
|
65
|
-
}, E = "data:image/svg+xml,%3csvg%20width='50'%20height='50'%20viewBox='0%200%2050%2050'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M3%201.5H47C47.8284%201.5%2048.5%202.17157%2048.5%203V47C48.5%2047.8284%2047.8284%2048.5%2047%2048.5H3C2.17157%2048.5%201.5%2047.8284%201.5%2047V3C1.5%202.17157%202.17157%201.5%203%201.5Z'%20stroke='black'%20stroke-width='3'/%3e%3c/svg%3e", P = "data:image/svg+xml,%3csvg%20width='50'%20height='50'%20viewBox='0%200%2050%2050'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M3%201.5H47C47.8284%201.5%2048.5%202.17157%2048.5%203V47C48.5%2047.8284%2047.8284%2048.5%2047%2048.5H3C2.17157%2048.5%201.5%2047.8284%201.5%2047V3C1.5%202.17157%202.17157%201.5%203%201.5Z'%20stroke='%230000FF'%20stroke-width='3'/%3e%3c/svg%3e", H = () => {
|
|
66
|
-
const [i, a] = b(!1), n = f(null), x = (t) => {
|
|
67
|
-
t.stopPropagation(), a((r) => !r);
|
|
68
|
-
};
|
|
69
|
-
k(() => {
|
|
70
|
-
if (!i) return;
|
|
71
|
-
const t = (r) => {
|
|
72
|
-
n.current && !n.current.contains(r.target) && a(!1);
|
|
73
|
-
};
|
|
74
|
-
return window.addEventListener("pointerdown", t), () => window.removeEventListener("pointerdown", t);
|
|
75
|
-
}, [i]);
|
|
76
|
-
const h = (t) => (r) => {
|
|
77
|
-
r.stopPropagation(), r.dataTransfer.setData(N, JSON.stringify({ shapeId: t.id })), r.dataTransfer.effectAllowed = "copy";
|
|
78
|
-
};
|
|
79
|
-
return /* @__PURE__ */ e.jsxs("div", { className: "left-toolbar-container", ref: n, onClick: (t) => t.stopPropagation(), children: [
|
|
80
|
-
/* @__PURE__ */ e.jsx("div", { className: `toolbar-card ${i ? "toolbar-card--open" : ""}`, children: /* @__PURE__ */ e.jsx("button", { onClick: x, className: `toolbar-btn toolbar-btn--icon toolbar-btn--shape ${i ? "toolbar-btn--active" : ""}`, children: /* @__PURE__ */ e.jsx("div", { className: `toolbar-shape-plate ${i ? "toolbar-shape-plate--active" : ""}`, children: /* @__PURE__ */ e.jsx("img", { src: i ? P : E, alt: "Фигуры", draggable: !1 }) }) }) }),
|
|
81
|
-
i && /* @__PURE__ */ e.jsx("div", { className: "palette-wrapper", onClick: (t) => t.stopPropagation(), children: /* @__PURE__ */ e.jsx("div", { className: "shape-panel", children: /* @__PURE__ */ e.jsx("div", { className: "shape-grid", children: B.map((t) => /* @__PURE__ */ e.jsx(
|
|
82
|
-
"button",
|
|
83
|
-
{
|
|
84
|
-
className: "shape-item",
|
|
85
|
-
draggable: !0,
|
|
86
|
-
onDragStart: h(t),
|
|
87
|
-
title: t.name,
|
|
88
|
-
children: D[t.id]
|
|
89
|
-
},
|
|
90
|
-
t.id
|
|
91
|
-
)) }) }) }),
|
|
92
|
-
/* @__PURE__ */ e.jsx(y, { shapeOpen: i })
|
|
93
|
-
] });
|
|
94
|
-
}, R = {
|
|
95
|
-
shape: y
|
|
96
|
-
}, d = ({ children: i }) => /* @__PURE__ */ e.jsx("div", { children: i }), M = ({ nodeTypes: i }) => {
|
|
97
|
-
const a = C((l) => l.setStickers), n = f(null), [x, h] = b(() => d), t = {
|
|
98
|
-
...R,
|
|
99
|
-
...i || {}
|
|
100
|
-
};
|
|
101
|
-
k(() => {
|
|
102
|
-
(async () => {
|
|
103
|
-
try {
|
|
104
|
-
const [s, c] = await Promise.all([
|
|
105
|
-
w.getAll(),
|
|
106
|
-
w.getBoard()
|
|
107
|
-
]), v = new Map(s.map((o) => [String(o.id), o.shapeId]));
|
|
108
|
-
let g = 30, p = 30;
|
|
109
|
-
const j = [];
|
|
110
|
-
for (const o of c) {
|
|
111
|
-
const W = o.width ?? 140, u = o.height ?? 140, S = o.rotation ?? 0, m = v.get(String(o.shapeId)) ?? "square";
|
|
112
|
-
j.push({
|
|
113
|
-
id: o.id,
|
|
114
|
-
stickerId: o.id,
|
|
115
|
-
type: "shape",
|
|
116
|
-
shapeId: m,
|
|
117
|
-
shapeDbId: o.shapeId,
|
|
118
|
-
x: g,
|
|
119
|
-
y: p,
|
|
120
|
-
width: W,
|
|
121
|
-
height: u,
|
|
122
|
-
rotation: S,
|
|
123
|
-
zIndex: 1,
|
|
124
|
-
fill: "transparent",
|
|
125
|
-
stroke: "#000"
|
|
126
|
-
}), g += 24, p += 24;
|
|
127
|
-
}
|
|
128
|
-
a(j);
|
|
129
|
-
} catch (s) {
|
|
130
|
-
console.warn("Не удалось загрузить доску для фигур:", s);
|
|
131
|
-
}
|
|
132
|
-
})();
|
|
133
|
-
}, [a]), k(() => {
|
|
134
|
-
let l = !0;
|
|
135
|
-
return import("@xyflow/react").then((s) => {
|
|
136
|
-
if (!l)
|
|
137
|
-
return;
|
|
138
|
-
const c = (s && (s.Widget || s.default || (s == null ? void 0 : s.widget) || (s == null ? void 0 : s.XyflowWidget))) ?? null;
|
|
139
|
-
typeof c == "function" || I.isValidElement(c) ? h(() => c) : h(() => d);
|
|
140
|
-
}).catch(() => {
|
|
141
|
-
l && h(() => d);
|
|
142
|
-
}), () => {
|
|
143
|
-
l = !1;
|
|
144
|
-
};
|
|
145
|
-
}, []);
|
|
146
|
-
const r = x || d;
|
|
147
|
-
return /* @__PURE__ */ e.jsx(r, { children: /* @__PURE__ */ e.jsxs("div", { className: "relative flex h-screen w-screen bg-gray-100", children: [
|
|
148
|
-
/* @__PURE__ */ e.jsx(H, {}),
|
|
149
|
-
/* @__PURE__ */ e.jsx(A, { ref: n, nodeTypes: t })
|
|
150
|
-
] }) });
|
|
151
|
-
};
|
|
152
|
-
export {
|
|
153
|
-
M as S,
|
|
154
|
-
H as a,
|
|
155
|
-
R as s
|
|
156
|
-
};
|
|
157
|
-
//# sourceMappingURL=ShapeBoardWidget-C9nNKwtj.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ShapeBoardWidget-C9nNKwtj.js","sources":["../../src/components/shapeIcons.jsx","../../src/assets/shape_add.svg","../../src/assets/shape_add_active.svg","../../src/components/ShapeToolbar.jsx","../../src/features/shape/public/shapeNodeTypes.js","../../src/widgets/ShapeBoardWidget.jsx"],"sourcesContent":["import React from \"react\";\r\n\r\nexport const SHAPE_ICONS = {\r\n square: (\r\n <svg width=\"40\" height=\"40\">\r\n <rect x=\"4\" y=\"4\" width=\"32\" height=\"32\" stroke=\"black\" fill=\"none\" strokeWidth=\"2\"/>\r\n </svg>\r\n ),\r\n\r\n circle: (\r\n <svg width=\"40\" height=\"40\">\r\n <circle cx=\"20\" cy=\"20\" r=\"14\" stroke=\"black\" fill=\"none\" strokeWidth=\"2\"/>\r\n </svg>\r\n ),\r\n\r\n triangle: (\r\n <svg width=\"40\" height=\"40\">\r\n <polygon points=\"20,6 34,34 6,34\" stroke=\"black\" fill=\"none\" strokeWidth=\"2\"/>\r\n </svg>\r\n ),\r\n\r\n star: (\r\n <svg width=\"40\" height=\"40\">\r\n <polygon\r\n points=\"20,4 25,16 38,16 27,24 32,36 20,28 8,36 13,24 2,16 15,16\"\r\n stroke=\"black\"\r\n fill=\"none\"\r\n strokeWidth=\"2\"\r\n />\r\n </svg>\r\n ),\r\n\r\n stick: (\r\n <svg width=\"40\" height=\"40\">\r\n <rect x=\"16\" y=\"4\" width=\"8\" height=\"32\" stroke=\"black\" fill=\"none\" strokeWidth=\"2\" />\r\n </svg>\r\n ),\r\n\r\n line: (\r\n <svg width=\"40\" height=\"40\">\r\n <line x1=\"4\" y1=\"20\" x2=\"36\" y2=\"20\" stroke=\"black\" strokeWidth=\"2\" />\r\n </svg>\r\n ),\r\n\r\n arrow: (\r\n <svg width=\"40\" height=\"40\">\r\n <line x1=\"4\" y1=\"20\" x2=\"30\" y2=\"20\" stroke=\"black\" strokeWidth=\"2\"/>\r\n <polygon points=\"30,14 38,20 30,26\" fill=\"black\"/>\r\n </svg>\r\n ),\r\n\r\n dblarrow: (\r\n <svg width=\"40\" height=\"40\">\r\n <polygon points=\"4,20 12,14 12,26\" fill=\"black\"/>\r\n <line x1=\"12\" y1=\"20\" x2=\"28\" y2=\"20\" stroke=\"black\" strokeWidth=\"2\"/>\r\n <polygon points=\"28,14 36,20 28,26\" fill=\"black\"/>\r\n </svg>\r\n ),\r\n\r\n parallelogram: (\r\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\">\r\n <polygon points=\"8,8 34,8 26,32 0,32\" stroke=\"black\" fill=\"none\" strokeWidth=\"2\"/>\r\n </svg>\r\n ),\r\n\r\n roundedRect: (\r\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\">\r\n <rect x=\"6\" y=\"10\" width=\"28\" height=\"20\" rx=\"4\" ry=\"4\" stroke=\"black\" fill=\"none\" strokeWidth=\"2\"/>\r\n </svg>\r\n ),\r\n\r\n capsule: (\r\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\">\r\n <rect x=\"6\" y=\"14\" width=\"28\" height=\"12\" rx=\"6\" ry=\"6\" stroke=\"black\" fill=\"none\" strokeWidth=\"2\"/>\r\n </svg>\r\n ),\r\n\r\n pentagon: (\r\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\">\r\n <polygon points=\"20,6 34,15 28,32 12,32 6,15\" stroke=\"black\" fill=\"none\" strokeWidth=\"2\"/>\r\n </svg>\r\n ),\r\n\r\n chevron: (\r\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 100 100\">\r\n <polyline\r\n points=\"0,0 50,100 100,0\"\r\n fill=\"none\"\r\n stroke=\"black\"\r\n strokeWidth=\"5\"\r\n />\r\n </svg>\r\n ),\r\n table3x3: (\r\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\">\r\n <rect x=\"4\" y=\"4\" width=\"32\" height=\"32\" stroke=\"black\" fill=\"none\" strokeWidth=\"2\"/>\r\n\r\n <line x1=\"14\" y1=\"4\" x2=\"14\" y2=\"36\" stroke=\"black\" strokeWidth=\"2\"/>\r\n <line x1=\"26\" y1=\"4\" x2=\"26\" y2=\"36\" stroke=\"black\" strokeWidth=\"2\"/>\r\n\r\n <line x1=\"4\" y1=\"14\" x2=\"36\" y2=\"14\" stroke=\"black\" strokeWidth=\"2\"/>\r\n <line x1=\"4\" y1=\"26\" x2=\"36\" y2=\"26\" stroke=\"black\" strokeWidth=\"2\"/>\r\n </svg>\r\n ),\r\n\r\n pyramid: (\r\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\">\r\n <polygon points=\"20,4 36,36 4,36\" stroke=\"black\" fill=\"none\" strokeWidth=\"2\" />\r\n <line x1=\"15\" y1=\"12\" x2=\"25\" y2=\"12\" stroke=\"black\" strokeWidth=\"2\" />\r\n <line x1=\"11\" y1=\"20\" x2=\"28\" y2=\"20\" stroke=\"black\" strokeWidth=\"2\" />\r\n <line x1=\"7\" y1=\"28\" x2=\"32\" y2=\"28\" stroke=\"black\" strokeWidth=\"2\" />\r\n </svg>\r\n ),\r\n circleArrow: (\r\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\">\r\n <circle cx=\"20\" cy=\"20\" r=\"14\" stroke=\"black\" fill=\"none\" strokeWidth=\"2\"/>\r\n <line x1=\"20\" y1=\"6\" x2=\"20\" y2=\"0\" stroke=\"black\" strokeWidth=\"2\"/>\r\n <polygon points=\"18,2 22,2 20,0\" fill=\"black\"/>\r\n </svg>\r\n ),\r\n\r\n table3x3LeftMerge: (\r\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\">\r\n <rect x=\"4\" y=\"4\" width=\"32\" height=\"32\" stroke=\"black\" fill=\"none\" strokeWidth=\"2\"/>\r\n <line x1=\"14\" y1=\"4\" x2=\"14\" y2=\"36\" stroke=\"black\" strokeWidth=\"2\"/>\r\n <line x1=\"26\" y1=\"4\" x2=\"26\" y2=\"36\" stroke=\"black\" strokeWidth=\"2\"/>\r\n <line x1=\"14\" y1=\"16\" x2=\"36\" y2=\"16\" stroke=\"black\" strokeWidth=\"2\"/>\r\n <line x1=\"14\" y1=\"28\" x2=\"36\" y2=\"28\" stroke=\"black\" strokeWidth=\"2\"/>\r\n </svg>\r\n ),\r\n};\r\n","export default \"data:image/svg+xml,%3csvg%20width='50'%20height='50'%20viewBox='0%200%2050%2050'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M3%201.5H47C47.8284%201.5%2048.5%202.17157%2048.5%203V47C48.5%2047.8284%2047.8284%2048.5%2047%2048.5H3C2.17157%2048.5%201.5%2047.8284%201.5%2047V3C1.5%202.17157%202.17157%201.5%203%201.5Z'%20stroke='black'%20stroke-width='3'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20width='50'%20height='50'%20viewBox='0%200%2050%2050'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M3%201.5H47C47.8284%201.5%2048.5%202.17157%2048.5%203V47C48.5%2047.8284%2047.8284%2048.5%2047%2048.5H3C2.17157%2048.5%201.5%2047.8284%201.5%2047V3C1.5%202.17157%202.17157%201.5%203%201.5Z'%20stroke='%230000FF'%20stroke-width='3'/%3e%3c/svg%3e\"","\r\nimport React, { useState, useRef, useEffect } from 'react';\r\nimport { SHAPES } from '../features/shape/constants.jsx';\r\nimport { SHAPE_ICONS } from \"./shapeIcons.jsx\";\r\nimport { DND_SHAPE } from '../features/board/constants.js';\r\nimport shapeAdd from '../assets/shape_add.svg';\r\nimport shapeAddActive from '../assets/shape_add_active.svg';\r\nimport '../styles/stickerPalette.css';\r\nimport { ShapeNode } from '../features/shape/ui/ShapeNode.jsx';\r\n\r\nexport const ShapeToolbar = () => {\r\n const [shapeOpen, setShapeOpen] = useState(false);\r\n const wrapperRef = useRef(null);\r\n\r\n const toggleShape = (e) => {\r\n e.stopPropagation();\r\n setShapeOpen((v) => !v);\r\n };\r\n\r\n useEffect(() => {\r\n if (!shapeOpen) return;\r\n const handler = (e) => {\r\n if (wrapperRef.current && !wrapperRef.current.contains(e.target)) {\r\n setShapeOpen(false);\r\n }\r\n };\r\n window.addEventListener('pointerdown', handler);\r\n return () => window.removeEventListener('pointerdown', handler);\r\n }, [shapeOpen]);\r\n\r\n const onShapeDragStart = (shape) => (e) => {\r\n e.stopPropagation();\r\n e.dataTransfer.setData(DND_SHAPE, JSON.stringify({ shapeId: shape.id }));\r\n e.dataTransfer.effectAllowed = 'copy';\r\n };\r\n\r\n return (\r\n <div className=\"left-toolbar-container\" ref={wrapperRef} onClick={(e) => e.stopPropagation()}>\r\n <div className={`toolbar-card ${shapeOpen ? 'toolbar-card--open' : ''}`}>\r\n <button onClick={toggleShape} className={`toolbar-btn toolbar-btn--icon toolbar-btn--shape ${shapeOpen ? 'toolbar-btn--active' : ''}`}>\r\n <div className={`toolbar-shape-plate ${shapeOpen ? 'toolbar-shape-plate--active' : ''}`}>\r\n <img src={shapeOpen ? shapeAddActive : shapeAdd} alt=\"Фигуры\" draggable={false} />\r\n </div>\r\n </button>\r\n </div>\r\n {shapeOpen && (\r\n <div className=\"palette-wrapper\" onClick={(e) => e.stopPropagation()}>\r\n <div className=\"shape-panel\">\r\n <div className=\"shape-grid\">\r\n {SHAPES.map((shape) => (\r\n <button\r\n key={shape.id}\r\n className=\"shape-item\"\r\n draggable\r\n onDragStart={onShapeDragStart(shape)}\r\n title={shape.name}\r\n >\r\n {SHAPE_ICONS[shape.id]}\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n <ShapeNode shapeOpen={shapeOpen} />\r\n </div>\r\n );\r\n};","import { ShapeNode } from '../ui/ShapeNode.jsx'\r\n\r\nexport const shapeNodeTypes = {\r\n shape: ShapeNode,\r\n}\r\n","import React, { useEffect, useRef, useState } from 'react'\r\nimport { ShapeToolbar } from '../components/ShapeToolbar.jsx'\r\nimport { Board } from '../features/board/ui/Board.jsx'\r\nimport { useStickersStore } from '../entities/stickers/model/useStickersStore.js'\r\nimport { shapesApi } from '../shared/api/shapesApi.js'\r\nimport { shapeNodeTypes } from '../features/shape/public/shapeNodeTypes.js'\r\n\r\nconst SafeFallbackWidget = ({ children }) => <div>{children}</div>\r\n\r\n/**\r\n * @typedef {import('@xyflow/react').NodeProps} NodeProps\r\n * @typedef {Record<string, React.ComponentType<NodeProps>>} NodeTypes\r\n */\r\n\r\n/**\r\n * @param {{ nodeTypes?: NodeTypes }} props\r\n */\r\nexport const ShapeBoardWidget = ({ nodeTypes }) => {\r\n const setStickers = useStickersStore((state) => state.setStickers)\r\n const boardRef = useRef(null)\r\n const [WidgetComp, setWidgetComp] = useState(() => SafeFallbackWidget)\r\n\r\n const mergedNodeTypes = {\r\n ...shapeNodeTypes,\r\n ...(nodeTypes || {}),\r\n }\r\n\r\n useEffect(() => {\r\n const loadBoard = async () => {\r\n try {\r\n const [allShapes, boardShapes] = await Promise.all([\r\n shapesApi.getAll(),\r\n shapesApi.getBoard(),\r\n ])\r\n\r\n const shapeKeyByDbId = new Map(allShapes.map((x) => [String(x.id), x.shapeId]))\r\n\r\n let x = 30\r\n let y = 30\r\n const items = []\r\n\r\n for (const s of boardShapes) {\r\n const w = s.width ?? 140\r\n const h = s.height ?? 140\r\n const r = s.rotation ?? 0\r\n\r\n const shapeKey = shapeKeyByDbId.get(String(s.shapeId)) ?? 'square'\r\n\r\n items.push({\r\n id: s.id,\r\n stickerId: s.id,\r\n type: 'shape',\r\n shapeId: shapeKey,\r\n shapeDbId: s.shapeId,\r\n x,\r\n y,\r\n width: w,\r\n height: h,\r\n rotation: r,\r\n zIndex: 1,\r\n fill: 'transparent',\r\n stroke: '#000',\r\n })\r\n\r\n x += 24\r\n y += 24\r\n }\r\n\r\n setStickers(items)\r\n } catch (e) {\r\n console.warn('Не удалось загрузить доску для фигур:', e)\r\n }\r\n }\r\n\r\n loadBoard()\r\n }, [setStickers])\r\n\r\n useEffect(() => {\r\n let mounted = true\r\n\r\n import('@xyflow/react')\r\n .then((mod) => {\r\n if (!mounted) {\r\n return\r\n }\r\n\r\n const candidate =\r\n (mod && (mod.Widget || mod.default || mod?.widget || mod?.XyflowWidget)) ?? null\r\n\r\n if (typeof candidate === 'function' || React.isValidElement(candidate)) {\r\n setWidgetComp(() => candidate)\r\n } else {\r\n setWidgetComp(() => SafeFallbackWidget)\r\n }\r\n })\r\n .catch(() => {\r\n if (mounted) {\r\n setWidgetComp(() => SafeFallbackWidget)\r\n }\r\n })\r\n\r\n return () => {\r\n mounted = false\r\n }\r\n }, [])\r\n\r\n const Wrapper = WidgetComp || SafeFallbackWidget\r\n\r\n return (\r\n <Wrapper>\r\n <div className=\"relative flex h-screen w-screen bg-gray-100\">\r\n <ShapeToolbar />\r\n <Board ref={boardRef} nodeTypes={mergedNodeTypes} />\r\n </div>\r\n </Wrapper>\r\n )\r\n}\r\n"],"names":["SHAPE_ICONS","jsx","jsxs","shapeAdd","shapeAddActive","ShapeToolbar","shapeOpen","setShapeOpen","useState","wrapperRef","useRef","toggleShape","e","v","useEffect","handler","onShapeDragStart","shape","DND_SHAPE","SHAPES","ShapeNode","shapeNodeTypes","SafeFallbackWidget","children","ShapeBoardWidget","nodeTypes","setStickers","useStickersStore","state","boardRef","WidgetComp","setWidgetComp","mergedNodeTypes","allShapes","boardShapes","shapesApi","shapeKeyByDbId","x","y","items","s","w","h","r","shapeKey","mounted","mod","candidate","React","Wrapper","Board"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";var v=Object.create;var u=Object.defineProperty;var W=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var B=Object.getPrototypeOf,N=Object.prototype.hasOwnProperty;var C=(e,i,r,h)=>{if(i&&typeof i=="object"||typeof i=="function")for(let n of S(i))!N.call(e,n)&&n!==r&&u(e,n,{get:()=>i[n],enumerable:!(h=W(i,n))||h.enumerable});return e};var A=(e,i,r)=>(r=e!=null?v(B(e)):{},C(i||!e||!e.__esModule?u(r,"default",{value:e,enumerable:!0}):r,e));const t=require("./Board-DBlzUx0o.js"),a=require("react"),I={square:t.jsxRuntimeExports.jsx("svg",{width:"40",height:"40",children:t.jsxRuntimeExports.jsx("rect",{x:"4",y:"4",width:"32",height:"32",stroke:"black",fill:"none",strokeWidth:"2"})}),circle:t.jsxRuntimeExports.jsx("svg",{width:"40",height:"40",children:t.jsxRuntimeExports.jsx("circle",{cx:"20",cy:"20",r:"14",stroke:"black",fill:"none",strokeWidth:"2"})}),triangle:t.jsxRuntimeExports.jsx("svg",{width:"40",height:"40",children:t.jsxRuntimeExports.jsx("polygon",{points:"20,6 34,34 6,34",stroke:"black",fill:"none",strokeWidth:"2"})}),star:t.jsxRuntimeExports.jsx("svg",{width:"40",height:"40",children:t.jsxRuntimeExports.jsx("polygon",{points:"20,4 25,16 38,16 27,24 32,36 20,28 8,36 13,24 2,16 15,16",stroke:"black",fill:"none",strokeWidth:"2"})}),stick:t.jsxRuntimeExports.jsx("svg",{width:"40",height:"40",children:t.jsxRuntimeExports.jsx("rect",{x:"16",y:"4",width:"8",height:"32",stroke:"black",fill:"none",strokeWidth:"2"})}),line:t.jsxRuntimeExports.jsx("svg",{width:"40",height:"40",children:t.jsxRuntimeExports.jsx("line",{x1:"4",y1:"20",x2:"36",y2:"20",stroke:"black",strokeWidth:"2"})}),arrow:t.jsxRuntimeExports.jsxs("svg",{width:"40",height:"40",children:[t.jsxRuntimeExports.jsx("line",{x1:"4",y1:"20",x2:"30",y2:"20",stroke:"black",strokeWidth:"2"}),t.jsxRuntimeExports.jsx("polygon",{points:"30,14 38,20 30,26",fill:"black"})]}),dblarrow:t.jsxRuntimeExports.jsxs("svg",{width:"40",height:"40",children:[t.jsxRuntimeExports.jsx("polygon",{points:"4,20 12,14 12,26",fill:"black"}),t.jsxRuntimeExports.jsx("line",{x1:"12",y1:"20",x2:"28",y2:"20",stroke:"black",strokeWidth:"2"}),t.jsxRuntimeExports.jsx("polygon",{points:"28,14 36,20 28,26",fill:"black"})]}),parallelogram:t.jsxRuntimeExports.jsx("svg",{width:"40",height:"40",viewBox:"0 0 40 40",children:t.jsxRuntimeExports.jsx("polygon",{points:"8,8 34,8 26,32 0,32",stroke:"black",fill:"none",strokeWidth:"2"})}),roundedRect:t.jsxRuntimeExports.jsx("svg",{width:"40",height:"40",viewBox:"0 0 40 40",children:t.jsxRuntimeExports.jsx("rect",{x:"6",y:"10",width:"28",height:"20",rx:"4",ry:"4",stroke:"black",fill:"none",strokeWidth:"2"})}),capsule:t.jsxRuntimeExports.jsx("svg",{width:"40",height:"40",viewBox:"0 0 40 40",children:t.jsxRuntimeExports.jsx("rect",{x:"6",y:"14",width:"28",height:"12",rx:"6",ry:"6",stroke:"black",fill:"none",strokeWidth:"2"})}),pentagon:t.jsxRuntimeExports.jsx("svg",{width:"40",height:"40",viewBox:"0 0 40 40",children:t.jsxRuntimeExports.jsx("polygon",{points:"20,6 34,15 28,32 12,32 6,15",stroke:"black",fill:"none",strokeWidth:"2"})}),chevron:t.jsxRuntimeExports.jsx("svg",{width:"40",height:"40",viewBox:"0 0 100 100",children:t.jsxRuntimeExports.jsx("polyline",{points:"0,0 50,100 100,0",fill:"none",stroke:"black",strokeWidth:"5"})}),table3x3:t.jsxRuntimeExports.jsxs("svg",{width:"40",height:"40",viewBox:"0 0 40 40",children:[t.jsxRuntimeExports.jsx("rect",{x:"4",y:"4",width:"32",height:"32",stroke:"black",fill:"none",strokeWidth:"2"}),t.jsxRuntimeExports.jsx("line",{x1:"14",y1:"4",x2:"14",y2:"36",stroke:"black",strokeWidth:"2"}),t.jsxRuntimeExports.jsx("line",{x1:"26",y1:"4",x2:"26",y2:"36",stroke:"black",strokeWidth:"2"}),t.jsxRuntimeExports.jsx("line",{x1:"4",y1:"14",x2:"36",y2:"14",stroke:"black",strokeWidth:"2"}),t.jsxRuntimeExports.jsx("line",{x1:"4",y1:"26",x2:"36",y2:"26",stroke:"black",strokeWidth:"2"})]}),pyramid:t.jsxRuntimeExports.jsxs("svg",{width:"40",height:"40",viewBox:"0 0 40 40",children:[t.jsxRuntimeExports.jsx("polygon",{points:"20,4 36,36 4,36",stroke:"black",fill:"none",strokeWidth:"2"}),t.jsxRuntimeExports.jsx("line",{x1:"15",y1:"12",x2:"25",y2:"12",stroke:"black",strokeWidth:"2"}),t.jsxRuntimeExports.jsx("line",{x1:"11",y1:"20",x2:"28",y2:"20",stroke:"black",strokeWidth:"2"}),t.jsxRuntimeExports.jsx("line",{x1:"7",y1:"28",x2:"32",y2:"28",stroke:"black",strokeWidth:"2"})]}),circleArrow:t.jsxRuntimeExports.jsxs("svg",{width:"40",height:"40",viewBox:"0 0 40 40",children:[t.jsxRuntimeExports.jsx("circle",{cx:"20",cy:"20",r:"14",stroke:"black",fill:"none",strokeWidth:"2"}),t.jsxRuntimeExports.jsx("line",{x1:"20",y1:"6",x2:"20",y2:"0",stroke:"black",strokeWidth:"2"}),t.jsxRuntimeExports.jsx("polygon",{points:"18,2 22,2 20,0",fill:"black"})]}),table3x3LeftMerge:t.jsxRuntimeExports.jsxs("svg",{width:"40",height:"40",viewBox:"0 0 40 40",children:[t.jsxRuntimeExports.jsx("rect",{x:"4",y:"4",width:"32",height:"32",stroke:"black",fill:"none",strokeWidth:"2"}),t.jsxRuntimeExports.jsx("line",{x1:"14",y1:"4",x2:"14",y2:"36",stroke:"black",strokeWidth:"2"}),t.jsxRuntimeExports.jsx("line",{x1:"26",y1:"4",x2:"26",y2:"36",stroke:"black",strokeWidth:"2"}),t.jsxRuntimeExports.jsx("line",{x1:"14",y1:"16",x2:"36",y2:"16",stroke:"black",strokeWidth:"2"}),t.jsxRuntimeExports.jsx("line",{x1:"14",y1:"28",x2:"36",y2:"28",stroke:"black",strokeWidth:"2"})]})},P="data:image/svg+xml,%3csvg%20width='50'%20height='50'%20viewBox='0%200%2050%2050'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M3%201.5H47C47.8284%201.5%2048.5%202.17157%2048.5%203V47C48.5%2047.8284%2047.8284%2048.5%2047%2048.5H3C2.17157%2048.5%201.5%2047.8284%201.5%2047V3C1.5%202.17157%202.17157%201.5%203%201.5Z'%20stroke='black'%20stroke-width='3'/%3e%3c/svg%3e",T="data:image/svg+xml,%3csvg%20width='50'%20height='50'%20viewBox='0%200%2050%2050'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M3%201.5H47C47.8284%201.5%2048.5%202.17157%2048.5%203V47C48.5%2047.8284%2047.8284%2048.5%2047%2048.5H3C2.17157%2048.5%201.5%2047.8284%201.5%2047V3C1.5%202.17157%202.17157%201.5%203%201.5Z'%20stroke='%230000FF'%20stroke-width='3'/%3e%3c/svg%3e",m=()=>{const[e,i]=a.useState(!1),r=a.useRef(null),h=s=>{s.stopPropagation(),i(l=>!l)};a.useEffect(()=>{if(!e)return;const s=l=>{r.current&&!r.current.contains(l.target)&&i(!1)};return window.addEventListener("pointerdown",s),()=>window.removeEventListener("pointerdown",s)},[e]);const n=s=>l=>{l.stopPropagation(),l.dataTransfer.setData(t.DND_SHAPE,JSON.stringify({shapeId:s.id})),l.dataTransfer.effectAllowed="copy"};return t.jsxRuntimeExports.jsxs("div",{className:"left-toolbar-container",ref:r,onClick:s=>s.stopPropagation(),children:[t.jsxRuntimeExports.jsx("div",{className:`toolbar-card ${e?"toolbar-card--open":""}`,children:t.jsxRuntimeExports.jsx("button",{onClick:h,className:`toolbar-btn toolbar-btn--icon toolbar-btn--shape ${e?"toolbar-btn--active":""}`,children:t.jsxRuntimeExports.jsx("div",{className:`toolbar-shape-plate ${e?"toolbar-shape-plate--active":""}`,children:t.jsxRuntimeExports.jsx("img",{src:e?T:P,alt:"Фигуры",draggable:!1})})})}),e&&t.jsxRuntimeExports.jsx("div",{className:"palette-wrapper",onClick:s=>s.stopPropagation(),children:t.jsxRuntimeExports.jsx("div",{className:"shape-panel",children:t.jsxRuntimeExports.jsx("div",{className:"shape-grid",children:t.SHAPES.map(s=>t.jsxRuntimeExports.jsx("button",{className:"shape-item",draggable:!0,onDragStart:n(s),title:s.name,children:I[s.id]},s.id))})})}),t.jsxRuntimeExports.jsx(t.ShapeNode,{shapeOpen:e})]})},E={shape:t.ShapeNode},d=({children:e})=>t.jsxRuntimeExports.jsx("div",{children:e}),D=({nodeTypes:e})=>{const i=t.useStickersStore(p=>p.setStickers),r=a.useRef(null),[h,n]=a.useState(()=>d),s={...E,...e||{}};a.useEffect(()=>{(async()=>{try{const[o,c]=await Promise.all([t.shapesApi.getAll(),t.shapesApi.getBoard()]),R=new Map(o.map(x=>[String(x.id),x.shapeId]));let j=30,k=30;const g=[];for(const x of c){const w=x.width??140,y=x.height??140,b=x.rotation??0,f=R.get(String(x.shapeId))??"square";g.push({id:x.id,stickerId:x.id,type:"shape",shapeId:f,shapeDbId:x.shapeId,x:j,y:k,width:w,height:y,rotation:b,zIndex:1,fill:"transparent",stroke:"#000"}),j+=24,k+=24}i(g)}catch(o){console.warn("Не удалось загрузить доску для фигур:",o)}})()},[i]),a.useEffect(()=>{let p=!0;return import("@xyflow/react").then(o=>{if(!p)return;const c=(o&&(o.Widget||o.default||(o==null?void 0:o.widget)||(o==null?void 0:o.XyflowWidget)))??null;typeof c=="function"||a.isValidElement(c)?n(()=>c):n(()=>d)}).catch(()=>{p&&n(()=>d)}),()=>{p=!1}},[]);const l=h||d;return t.jsxRuntimeExports.jsx(l,{children:t.jsxRuntimeExports.jsxs("div",{className:"relative flex h-screen w-screen bg-gray-100",children:[t.jsxRuntimeExports.jsx(m,{}),t.jsxRuntimeExports.jsx(t.Board,{ref:r,nodeTypes:s})]})})};exports.ShapeBoardWidget=D;exports.ShapeToolbar=m;exports.shapeNodeTypes=E;
|
|
2
|
-
//# sourceMappingURL=ShapeBoardWidget-D1TcdWRO.js.map
|