integration-modules 0.1.7 → 0.1.9
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/{Board-CpOsQfT6.js → Board-C2sVqXKk.js} +35 -40
- package/dist/chunks/{Board-CpOsQfT6.js.map → Board-C2sVqXKk.js.map} +1 -1
- package/dist/chunks/{Board-jFbJOEpy.js → Board-D7raFrnX.js} +16 -16
- package/dist/chunks/{Board-jFbJOEpy.js.map → Board-D7raFrnX.js.map} +1 -1
- package/dist/chunks/{EmojiBoardWidget-eFGE2g4e.js → EmojiBoardWidget-Dk8VCGyk.js} +3 -2
- package/dist/chunks/{EmojiBoardWidget-eFGE2g4e.js.map → EmojiBoardWidget-Dk8VCGyk.js.map} +1 -1
- package/dist/chunks/{EmojiBoardWidget-DU57KxVP.js → EmojiBoardWidget-DpXXIo8W.js} +2 -2
- package/dist/chunks/{EmojiBoardWidget-DU57KxVP.js.map → EmojiBoardWidget-DpXXIo8W.js.map} +1 -1
- package/dist/chunks/{ShapeBoardWidget-B65qIGGa.js → ShapeBoardWidget-CURF-esc.js} +3 -2
- package/dist/chunks/{ShapeBoardWidget-B65qIGGa.js.map → ShapeBoardWidget-CURF-esc.js.map} +1 -1
- package/dist/chunks/{ShapeBoardWidget-TpOdsGEn.js → ShapeBoardWidget-lQuZw7IG.js} +2 -2
- package/dist/chunks/{ShapeBoardWidget-TpOdsGEn.js.map → ShapeBoardWidget-lQuZw7IG.js.map} +1 -1
- package/dist/emoji/index.cjs +1 -1
- package/dist/emoji/index.js +2 -2
- package/dist/index.cjs +1 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +91 -322
- package/dist/index.mjs.map +1 -1
- package/dist/{assets/integration-modules-BCtq75x-.css → 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/index.mjs
CHANGED
|
@@ -1,341 +1,110 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { E as
|
|
4
|
-
import
|
|
5
|
-
import { S as
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
"#85B3F9",
|
|
13
|
-
"#B2D0FE",
|
|
14
|
-
"#D6C7FF",
|
|
15
|
-
"#A6FFD6",
|
|
16
|
-
"#68DF8B",
|
|
17
|
-
"#FFFFFF",
|
|
18
|
-
"#262626"
|
|
19
|
-
], V = ({ onPick: s }) => {
|
|
20
|
-
const i = (n) => () => {
|
|
21
|
-
s && s(n);
|
|
22
|
-
}, l = (n) => (c) => {
|
|
23
|
-
c.stopPropagation();
|
|
24
|
-
try {
|
|
25
|
-
c.dataTransfer.setData(Z, JSON.stringify({ color: n })), c.dataTransfer.effectAllowed = "copy";
|
|
26
|
-
} catch (t) {
|
|
27
|
-
console.warn("Не удалось начать перенос заметки:", t);
|
|
28
|
-
}
|
|
1
|
+
import { u as M, j as o, B as _, s as j, a as S, E as N, b as O, c as i, d as v } from "./chunks/Board-C2sVqXKk.js";
|
|
2
|
+
import { e as C, a as J } from "./chunks/EmojiBoardWidget-Dk8VCGyk.js";
|
|
3
|
+
import { E as X } from "./chunks/EmojiBoardWidget-Dk8VCGyk.js";
|
|
4
|
+
import { s as R, a as F } from "./chunks/ShapeBoardWidget-CURF-esc.js";
|
|
5
|
+
import { S as Y } from "./chunks/ShapeBoardWidget-CURF-esc.js";
|
|
6
|
+
import U, { useRef as z, useState as D, useEffect as w } from "react";
|
|
7
|
+
const n = ({ children: d }) => /* @__PURE__ */ o.jsx("div", { children: d }), H = ({ nodeTypes: d }) => {
|
|
8
|
+
const f = M((s) => s.setStickers), E = z(null), [k, c] = D(() => n), b = {
|
|
9
|
+
...C,
|
|
10
|
+
...R,
|
|
11
|
+
...d || {}
|
|
29
12
|
};
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
type: "button",
|
|
34
|
-
className: "color-swatch color-swatch--large",
|
|
35
|
-
title: n,
|
|
36
|
-
style: { background: n },
|
|
37
|
-
onClick: i(n),
|
|
38
|
-
draggable: !0,
|
|
39
|
-
onDragStart: l(n)
|
|
40
|
-
},
|
|
41
|
-
n
|
|
42
|
-
)) }) });
|
|
43
|
-
}, W = "data:image/svg+xml,%3csvg%20width='58'%20height='53'%20viewBox='0%200%2058%2053'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M1.5%204.5C1.5%202.84315%202.84315%201.5%204.5%201.5H52.8237C54.4806%201.5%2055.8237%202.84315%2055.8237%204.5V26.2263C55.8237%2040.0334%2044.6308%2051.2263%2030.8237%2051.2263H4.5C2.84315%2051.2263%201.5%2049.8832%201.5%2048.2263V4.5Z'%20stroke='black'%20stroke-width='3'/%3e%3cpath%20d='M35.0601%2031.2097C34.7425%2031.0584%2034.3739%2030.9988%2033.9426%2031.1381L33.7534%2031.2097L33.7524%2031.2107C33.5121%2031.3184%2033.3222%2031.459%2033.2417%2031.6573C33.1549%2031.8715%2033.2259%2032.0712%2033.3187%2032.2156C33.4103%2032.3579%2033.5466%2032.4867%2033.6731%2032.5948C33.7936%2032.6977%2033.9493%2032.8164%2034.0458%2032.896C36.3535%2034.7931%2039.159%2036.2031%2043.164%2036.228L43.163%2036.229C47.4558%2036.378%2051.4539%2036.0058%2054.6019%2034.0582C55.1353%2033.7296%2055.6664%2033.348%2056.0128%2032.9039L56.0118%2032.9029C56.1048%2032.7875%2056.2271%2032.5829%2056.1927%2032.3439C56.1537%2032.0744%2055.9392%2031.8802%2055.6031%2031.7644L55.4249%2031.7188C55.2448%2031.6873%2055.0608%2031.6962%2054.8946%2031.7229C54.6708%2031.7588%2054.4593%2031.8298%2054.2959%2031.903L54.2969%2031.9031C53.9148%2032.0702%2053.565%2032.2641%2053.2255%2032.4511C52.8827%2032.6399%2052.5495%2032.8224%2052.1866%2032.9789L52.1856%2032.9789C48.701%2034.4994%2044.8566%2034.9504%2040.6985%2034.1745L40.6985%2034.1736C38.6283%2033.7916%2037.1913%2032.8572%2035.9052%2031.8179L35.9042%2031.8169C35.6881%2031.6444%2035.3972%2031.3703%2035.0601%2031.2097Z'%20fill='black'%20stroke='black'%20stroke-width='0.5'/%3e%3cpath%20d='M33.3199%2032.0092C33.3711%2031.784%2033.5023%2031.5723%2033.7172%2031.3748L33.7186%2031.3732C33.9351%2031.1771%2034.16%2031.0665%2034.3932%2031.0561C34.6255%2031.0457%2034.8211%2031.1371%2034.9778%2031.2547C35.1328%2031.3711%2035.2665%2031.5255%2035.3799%2031.6731L35.6886%2032.0981C37.637%2034.7374%2038.8375%2037.7048%2037.8721%2041.3534C37.0056%2045.2765%2035.513%2048.7857%2032.1275%2051.0424C31.5557%2051.4251%2030.9218%2051.7831%2030.2602%2051.9579C30.0886%2052.0063%2029.8315%2052.042%2029.586%2051.9604C29.3206%2051.8722%2029.1054%2051.659%2029.0272%2051.288L29.0119%2051.1918C28.9909%2050.9686%2029.0611%2050.7564%2029.156%2050.581C29.2641%2050.3813%2029.4161%2050.208%2029.5556%2050.081C29.8749%2049.7851%2030.2219%2049.5259%2030.5549%2049.2766C30.8073%2049.0875%2031.0527%2048.9034%2031.2845%2048.7058L31.5119%2048.5028L31.5131%2048.5021C34.3886%2045.833%2035.9263%2042.5303%2035.9218%2038.5803L35.9211%2038.5791C35.9245%2036.6231%2035.0456%2035.0563%2033.9747%2033.5785L33.9739%2033.5773C33.9268%2033.5114%2033.8755%2033.4438%2033.821%2033.3711C33.7673%2033.2995%2033.7113%2033.2234%2033.6569%2033.1455C33.5491%2032.9909%2033.4413%2032.8178%2033.3724%2032.6319C33.3026%2032.4439%2033.2691%2032.2329%2033.3199%2032.0092Z'%20fill='black'%20stroke='black'%20stroke-width='0.5'/%3e%3c/svg%3e", I = "data:image/svg+xml,%3csvg%20width='58'%20height='53'%20viewBox='0%200%2058%2053'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M1.5%204.5C1.5%202.84315%202.84315%201.5%204.5%201.5H52.8237C54.4806%201.5%2055.8237%202.84315%2055.8237%204.5V26.2263C55.8237%2040.0334%2044.6308%2051.2263%2030.8237%2051.2263H4.5C2.84315%2051.2263%201.5%2049.8832%201.5%2048.2263V4.5Z'%20stroke='%230000FF'%20stroke-width='3'/%3e%3cpath%20d='M35.0599%2031.2098C34.7423%2031.0585%2034.3737%2030.9989%2033.9424%2031.1382L33.7532%2031.2097L33.7522%2031.2107C33.5119%2031.3185%2033.3221%2031.459%2033.2415%2031.6573C33.1547%2031.8716%2033.2257%2032.0713%2033.3185%2032.2156C33.4101%2032.3579%2033.5464%2032.4868%2033.6729%2032.5948C33.7935%2032.6977%2033.9491%2032.8165%2034.0457%2032.896C36.3533%2034.7932%2039.1588%2036.2031%2043.1638%2036.2281L43.1628%2036.229C47.4556%2036.3781%2051.4537%2036.0059%2054.6017%2034.0583C55.1351%2033.7297%2055.6662%2033.3481%2056.0126%2032.9039L56.0117%2032.9029C56.1047%2032.7876%2056.2269%2032.5829%2056.1925%2032.344C56.1535%2032.0744%2055.939%2031.8803%2055.603%2031.7645L55.4247%2031.7189C55.2446%2031.6874%2055.0607%2031.6962%2054.8944%2031.7229C54.6706%2031.7589%2054.4592%2031.8298%2054.2957%2031.9031L54.2967%2031.9031C53.9146%2032.0702%2053.5648%2032.2642%2053.2253%2032.4511C52.8825%2032.6399%2052.5493%2032.8225%2052.1864%2032.9789L52.1854%2032.9789C48.7008%2034.4994%2044.8564%2034.9504%2040.6983%2034.1746L40.6984%2034.1736C38.6281%2033.7917%2037.1911%2032.8573%2035.905%2031.818L35.904%2031.817C35.688%2031.6445%2035.397%2031.3704%2035.0599%2031.2098Z'%20fill='%230000FF'%20stroke='%230000FF'%20stroke-width='0.5'/%3e%3cpath%20d='M33.32%2032.0091C33.3712%2031.7839%2033.5024%2031.5722%2033.7173%2031.3747L33.7188%2031.373C33.9352%2031.177%2034.1602%2031.0664%2034.3934%2031.056C34.6256%2031.0456%2034.8213%2031.137%2034.9779%2031.2546C35.1329%2031.371%2035.2666%2031.5254%2035.3801%2031.673L35.6888%2032.098C37.6372%2034.7373%2038.8377%2037.7047%2037.8722%2041.3533C37.0057%2045.2764%2035.5131%2048.7856%2032.1276%2051.0422C31.5558%2051.425%2030.9219%2051.783%2030.2604%2051.9578C30.0887%2052.0062%2029.8316%2052.0419%2029.5861%2051.9603C29.3207%2051.8721%2029.1055%2051.6589%2029.0273%2051.2879L29.012%2051.1917C28.9911%2050.9685%2029.0612%2050.7563%2029.1561%2050.5809C29.2643%2050.3812%2029.4162%2050.2079%2029.5557%2050.0809C29.875%2049.785%2030.222%2049.5258%2030.555%2049.2765C30.8075%2049.0874%2031.0529%2048.9032%2031.2846%2048.7057L31.512%2048.5027L31.5132%2048.502C34.3887%2045.8329%2035.9264%2042.5302%2035.9219%2038.5801L35.9212%2038.579C35.9246%2036.623%2035.0457%2035.0562%2033.9748%2033.5784L33.9741%2033.5772C33.927%2033.5113%2033.8756%2033.4437%2033.8211%2033.371C33.7674%2033.2994%2033.7114%2033.2233%2033.6571%2033.1454C33.5492%2032.9908%2033.4414%2032.8177%2033.3725%2032.6318C33.3028%2032.4437%2033.2692%2032.2328%2033.32%2032.0091Z'%20fill='%230000FF'%20stroke='%230000FF'%20stroke-width='0.5'/%3e%3c/svg%3e", B = ({ onPick: s }) => {
|
|
44
|
-
const [i, l] = g(!1), n = x(null), c = (t) => {
|
|
45
|
-
t.stopPropagation(), l((e) => !e);
|
|
46
|
-
};
|
|
47
|
-
return k(() => {
|
|
48
|
-
if (!i) return;
|
|
49
|
-
const t = (e) => {
|
|
50
|
-
n.current && !n.current.contains(e.target) && l(!1);
|
|
51
|
-
};
|
|
52
|
-
return window.addEventListener("pointerdown", t), () => window.removeEventListener("pointerdown", t);
|
|
53
|
-
}, [i]), /* @__PURE__ */ a.jsxs("div", { className: "left-toolbar-container dragHandle__custom", ref: n, onClick: (t) => t.stopPropagation(), children: [
|
|
54
|
-
/* @__PURE__ */ a.jsx("div", { className: `toolbar-card ${i ? "toolbar-card--open" : ""}`, children: /* @__PURE__ */ a.jsx("button", { onClick: c, className: `toolbar-btn toolbar-btn--icon toolbar-btn--note ${i ? "toolbar-btn--active" : ""}`, children: /* @__PURE__ */ a.jsx("div", { className: `toolbar-note-plate ${i ? "toolbar-note-plate--active" : ""}`, children: /* @__PURE__ */ a.jsx("img", { src: i ? I : W, alt: "Заметки", draggable: !1 }) }) }) }),
|
|
55
|
-
i && /* @__PURE__ */ a.jsx("div", { className: "palette-wrapper", onClick: (t) => t.stopPropagation(), children: /* @__PURE__ */ a.jsx(V, { onPick: (t) => {
|
|
56
|
-
s?.(t), l(!1);
|
|
57
|
-
} }) })
|
|
58
|
-
] });
|
|
59
|
-
}, f = ({ children: s }) => /* @__PURE__ */ a.jsx("div", { children: s }), O = () => {
|
|
60
|
-
const s = p((o) => o.addSticker), i = p((o) => o.setStickers), l = x(null), [n, c] = g(() => f);
|
|
61
|
-
k(() => {
|
|
62
|
-
(async () => {
|
|
63
|
-
try {
|
|
64
|
-
const r = await j.getAll();
|
|
65
|
-
let h = 30, C = 30;
|
|
66
|
-
const w = [];
|
|
67
|
-
for (const d of r) {
|
|
68
|
-
const u = d.width ?? L, v = d.height ?? M;
|
|
69
|
-
w.push({
|
|
70
|
-
id: d.id,
|
|
71
|
-
x: h,
|
|
72
|
-
y: C,
|
|
73
|
-
color: d.color,
|
|
74
|
-
width: u,
|
|
75
|
-
height: v,
|
|
76
|
-
text: d.content ?? "",
|
|
77
|
-
zIndex: 1
|
|
78
|
-
}), h += 24, C += 24;
|
|
79
|
-
}
|
|
80
|
-
i(w);
|
|
81
|
-
} catch (r) {
|
|
82
|
-
console.warn("Не удалось загрузить доску для заметок:", r);
|
|
83
|
-
}
|
|
84
|
-
})();
|
|
85
|
-
}, [i]), k(() => {
|
|
86
|
-
let o = !0;
|
|
87
|
-
return import("@xyflow/react").then((r) => {
|
|
88
|
-
if (!o) return;
|
|
89
|
-
const h = (r && (r.Widget || r.default || r?.widget || r?.XyflowWidget)) ?? null;
|
|
90
|
-
typeof h == "function" || y.isValidElement(h) ? c(() => h) : c(() => f);
|
|
91
|
-
}).catch(() => {
|
|
92
|
-
o && c(() => f);
|
|
93
|
-
}), () => {
|
|
94
|
-
o = !1;
|
|
95
|
-
};
|
|
96
|
-
}, []);
|
|
97
|
-
const t = n || f, e = async (o) => {
|
|
13
|
+
async function B(s) {
|
|
14
|
+
if (i && i[s])
|
|
15
|
+
return i[s];
|
|
98
16
|
try {
|
|
99
|
-
const
|
|
100
|
-
if (
|
|
101
|
-
l.
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
width: h,
|
|
105
|
-
height: C
|
|
106
|
-
});
|
|
107
|
-
return;
|
|
17
|
+
const t = await j.getById(s);
|
|
18
|
+
if (t?.name) {
|
|
19
|
+
const a = v.find((l) => l.name === t.name);
|
|
20
|
+
if (a)
|
|
21
|
+
return a.url;
|
|
108
22
|
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
x: 260,
|
|
112
|
-
y: 120,
|
|
113
|
-
color: o,
|
|
114
|
-
width: h,
|
|
115
|
-
height: C,
|
|
116
|
-
text: r.content ?? ""
|
|
117
|
-
});
|
|
118
|
-
} catch (r) {
|
|
119
|
-
console.warn("Не удалось создать заметку:", r);
|
|
120
|
-
}
|
|
121
|
-
};
|
|
122
|
-
return /* @__PURE__ */ a.jsx(t, { children: /* @__PURE__ */ a.jsxs("div", { className: "relative flex h-screen w-screen bg-gray-100", children: [
|
|
123
|
-
/* @__PURE__ */ a.jsx(B, { onPick: e }),
|
|
124
|
-
/* @__PURE__ */ a.jsx(F, { ref: l })
|
|
125
|
-
] }) });
|
|
126
|
-
}, E = "data:image/svg+xml,%3csvg%20width='52'%20height='51'%20viewBox='0%200%2052%2051'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M1.5%2049.0548V1.50049'%20stroke='black'%20stroke-width='3'%20stroke-linecap='round'/%3e%3cpath%20d='M14.0801%2034.3356L1.5%201.50049'%20stroke='black'%20stroke-width='3'/%3e%3cpath%20d='M14.0801%2034.3356L26.6602%201.50049'%20stroke='black'%20stroke-width='3'%20stroke-linecap='round'/%3e%3cpath%20d='M26.6602%201.50049V49.0548'%20stroke='black'%20stroke-width='3'%20stroke-linecap='round'/%3e%3cpath%20d='M50%2025.2776C50%2031.5634%2047.7786%2037.5611%2043.8701%2041.9583C40.3263%2045.945%2035.6696%2048.3122%2030.7773%2048.7151L30.7773%201.84009C35.6696%202.243%2040.3263%204.61018%2043.8701%208.59692C47.7786%2012.9941%2050%2018.9918%2050%2025.2776Z'%20stroke='black'%20stroke-width='3'/%3e%3c/svg%3e", A = "data:image/svg+xml,%3csvg%20width='52'%20height='51'%20viewBox='0%200%2052%2051'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M1.5%2049.0548V1.50049'%20stroke='%230000FF'%20stroke-width='3'%20stroke-linecap='round'/%3e%3cpath%20d='M14.0801%2034.3356L1.5%201.50049'%20stroke='%230000FF'%20stroke-width='3'/%3e%3cpath%20d='M14.0801%2034.3356L26.6602%201.50049'%20stroke='%230000FF'%20stroke-width='3'%20stroke-linecap='round'/%3e%3cpath%20d='M26.6602%201.50049V49.0548'%20stroke='%230000FF'%20stroke-width='3'%20stroke-linecap='round'/%3e%3cpath%20d='M50%2025.2776C50%2031.5634%2047.7786%2037.5611%2043.8701%2041.9583C40.3263%2045.945%2035.6696%2048.3122%2030.7773%2048.7151L30.7773%201.84009C35.6696%202.243%2040.3263%204.61018%2043.8701%208.59692C47.7786%2012.9941%2050%2018.9918%2050%2025.2776Z'%20stroke='%230000FF'%20stroke-width='3'/%3e%3c/svg%3e", R = () => {
|
|
127
|
-
const [s, i] = g(!1), l = p((t) => t.addSticker), n = p((t) => t.topZ), c = async () => {
|
|
128
|
-
if (!s) {
|
|
129
|
-
i(!0);
|
|
130
|
-
try {
|
|
131
|
-
const t = (n || 1) + 1, e = await S.create({
|
|
132
|
-
content: `# Новый Markdown
|
|
133
|
-
|
|
134
|
-
Начните писать здесь...`,
|
|
135
|
-
width: 600,
|
|
136
|
-
height: 400,
|
|
137
|
-
isEditorVisible: !0
|
|
138
|
-
}), o = window.innerWidth / 2 - 300, r = window.innerHeight / 2 - 200;
|
|
139
|
-
l({
|
|
140
|
-
id: e.id,
|
|
141
|
-
stickerId: e.markdownId,
|
|
142
|
-
isEditorVisible: e.isEditorVisible ?? !0,
|
|
143
|
-
type: "markdown",
|
|
144
|
-
x: o,
|
|
145
|
-
y: r,
|
|
146
|
-
width: e.width ?? 600,
|
|
147
|
-
height: e.height ?? 400,
|
|
148
|
-
text: e.content ?? "",
|
|
149
|
-
zIndex: t
|
|
150
|
-
});
|
|
151
|
-
} catch (t) {
|
|
152
|
-
console.warn("Не удалось создать markdown блок:", t);
|
|
153
|
-
} finally {
|
|
154
|
-
i(!1);
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
};
|
|
158
|
-
return /* @__PURE__ */ a.jsx("div", { className: "left-toolbar-container", onClick: (t) => t.stopPropagation(), children: /* @__PURE__ */ a.jsx("div", { className: "toolbar-card", children: /* @__PURE__ */ a.jsx(
|
|
159
|
-
"button",
|
|
160
|
-
{
|
|
161
|
-
onClick: c,
|
|
162
|
-
disabled: s,
|
|
163
|
-
className: `toolbar-btn toolbar-btn--icon toolbar-btn--markdown ${s ? "toolbar-btn--active" : ""}`.trim(),
|
|
164
|
-
title: "Добавить Markdown блок",
|
|
165
|
-
children: /* @__PURE__ */ a.jsx("div", { className: `toolbar-markdown-plate ${s ? "toolbar-markdown-plate--active" : ""}`, children: /* @__PURE__ */ a.jsx(
|
|
166
|
-
"img",
|
|
167
|
-
{
|
|
168
|
-
src: s ? A : E,
|
|
169
|
-
alt: "Markdown",
|
|
170
|
-
draggable: !1
|
|
171
|
-
}
|
|
172
|
-
) })
|
|
23
|
+
} catch (t) {
|
|
24
|
+
console.warn("getEmojiUrlForStickerId: backend lookup failed", t);
|
|
173
25
|
}
|
|
174
|
-
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
k(() => {
|
|
26
|
+
return "";
|
|
27
|
+
}
|
|
28
|
+
w(() => {
|
|
178
29
|
(async () => {
|
|
179
30
|
try {
|
|
180
|
-
const
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
31
|
+
const [t, a, l] = await Promise.all([
|
|
32
|
+
j.getBoard(),
|
|
33
|
+
S.getAll(),
|
|
34
|
+
S.getBoard()
|
|
35
|
+
]), T = new Map(a.map((e) => [String(e.id), e.shapeId]));
|
|
36
|
+
let m = 30, g = 30;
|
|
37
|
+
const u = [];
|
|
38
|
+
for (const e of t) {
|
|
39
|
+
const p = e.width ?? N, h = e.height ?? O;
|
|
40
|
+
let r = i?.[String(e.stickerId)] ?? "";
|
|
41
|
+
r || (r = await B(e.stickerId)), u.push({
|
|
42
|
+
id: e.id,
|
|
43
|
+
x: m,
|
|
44
|
+
y: g,
|
|
45
|
+
color: "transparent",
|
|
46
|
+
width: p,
|
|
47
|
+
height: h,
|
|
48
|
+
text: "",
|
|
49
|
+
zIndex: 1,
|
|
50
|
+
stickerId: e.stickerId,
|
|
51
|
+
imageUrl: r,
|
|
52
|
+
type: "emoji"
|
|
53
|
+
}), m += 24, g += 24;
|
|
197
54
|
}
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
/* @__PURE__ */ a.jsx(R, { createInCenter: () => ({ x: 300, y: 200 }) }),
|
|
218
|
-
/* @__PURE__ */ a.jsx(F, { ref: i })
|
|
219
|
-
] }) });
|
|
220
|
-
}, D = "data:image/svg+xml,%3csvg%20width='57'%20height='45'%20viewBox='0%200%2057%2045'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M9.1%2023.36H1V44H49.06L55%2033.1067L49.06%2023.36H41.5M9.1%2023.36V18.2M9.1%2023.36H25.3M25.3%2023.36V14.76M25.3%2023.36H41.5M41.5%2023.36V11.32M41.5%2011.32V1H55L51.22%206.16L55%2011.32H41.5Z'%20stroke='black'%20stroke-width='2'/%3e%3cpath%20d='M22.5999%2033.6799L16.6599%2043.9999H32.8599L38.7999%2033.6799L32.8599%2023.3599H16.6599L22.5999%2033.6799Z'%20stroke='black'%20stroke-width='2'/%3e%3cpath%20d='M25.3003%209.45337C26.4817%209.45351%2027.5405%2010.489%2027.5405%2011.8938C27.5403%2013.2983%2026.4816%2014.3331%2025.3003%2014.3333C24.1189%2014.3333%2023.0603%2013.2984%2023.0601%2011.8938C23.0601%2010.4889%2024.1188%209.45337%2025.3003%209.45337Z'%20stroke='black'%20stroke-width='2'/%3e%3cpath%20d='M25.3003%209.45337C26.4817%209.45351%2027.5405%2010.489%2027.5405%2011.8938C27.5403%2013.2983%2026.4816%2014.3331%2025.3003%2014.3333C24.1189%2014.3333%2023.0603%2013.2984%2023.0601%2011.8938C23.0601%2010.4889%2024.1188%209.45337%2025.3003%209.45337Z'%20stroke='black'%20stroke-width='2'/%3e%3cpath%20d='M25.3003%209.45337C26.4817%209.45351%2027.5405%2010.489%2027.5405%2011.8938C27.5403%2013.2983%2026.4816%2014.3331%2025.3003%2014.3333C24.1189%2014.3333%2023.0603%2013.2984%2023.0601%2011.8938C23.0601%2010.4889%2024.1188%209.45337%2025.3003%209.45337Z'%20stroke='black'%20stroke-width='2'/%3e%3cpath%20d='M9.10028%2012.8933C10.2817%2012.8934%2011.3405%2013.929%2011.3405%2015.3337C11.3403%2016.7383%2010.2816%2017.7731%209.10028%2017.7732C7.91887%2017.7732%206.86026%2016.7384%206.86005%2015.3337C6.86005%2013.9289%207.91875%2012.8933%209.10028%2012.8933Z'%20stroke='black'%20stroke-width='2'/%3e%3cpath%20d='M9.10028%2012.8933C10.2817%2012.8934%2011.3405%2013.929%2011.3405%2015.3337C11.3403%2016.7383%2010.2816%2017.7731%209.10028%2017.7732C7.91887%2017.7732%206.86026%2016.7384%206.86005%2015.3337C6.86005%2013.9289%207.91875%2012.8933%209.10028%2012.8933Z'%20stroke='black'%20stroke-width='2'/%3e%3cpath%20d='M9.10028%2012.8933C10.2817%2012.8934%2011.3405%2013.929%2011.3405%2015.3337C11.3403%2016.7383%2010.2816%2017.7731%209.10028%2017.7732C7.91887%2017.7732%206.86026%2016.7384%206.86005%2015.3337C6.86005%2013.9289%207.91875%2012.8933%209.10028%2012.8933Z'%20stroke='black'%20stroke-width='2'/%3e%3c/svg%3e", T = "data:image/svg+xml,%3csvg%20width='57'%20height='45'%20viewBox='0%200%2057%2045'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M9.1%2023.36H1V44H49.06L55%2033.1067L49.06%2023.36H41.5M9.1%2023.36V18.2M9.1%2023.36H25.3M25.3%2023.36V14.76M25.3%2023.36H41.5M41.5%2023.36V11.32M41.5%2011.32V1H55L51.22%206.16L55%2011.32H41.5Z'%20stroke='black'%20stroke-width='2'/%3e%3cpath%20d='M22.5999%2033.6799L16.6599%2043.9999H32.8599L38.7999%2033.6799L32.8599%2023.3599H16.6599L22.5999%2033.6799Z'%20stroke='black'%20stroke-width='2'/%3e%3cpath%20d='M25.3003%209.45337C26.4817%209.45351%2027.5405%2010.489%2027.5405%2011.8938C27.5403%2013.2983%2026.4816%2014.3331%2025.3003%2014.3333C24.1189%2014.3333%2023.0603%2013.2984%2023.0601%2011.8938C23.0601%2010.4889%2024.1188%209.45337%2025.3003%209.45337Z'%20stroke='black'%20stroke-width='2'/%3e%3cpath%20d='M25.3003%209.45337C26.4817%209.45351%2027.5405%2010.489%2027.5405%2011.8938C27.5403%2013.2983%2026.4816%2014.3331%2025.3003%2014.3333C24.1189%2014.3333%2023.0603%2013.2984%2023.0601%2011.8938C23.0601%2010.4889%2024.1188%209.45337%2025.3003%209.45337Z'%20stroke='black'%20stroke-width='2'/%3e%3cpath%20d='M25.3003%209.45337C26.4817%209.45351%2027.5405%2010.489%2027.5405%2011.8938C27.5403%2013.2983%2026.4816%2014.3331%2025.3003%2014.3333C24.1189%2014.3333%2023.0603%2013.2984%2023.0601%2011.8938C23.0601%2010.4889%2024.1188%209.45337%2025.3003%209.45337Z'%20stroke='black'%20stroke-width='2'/%3e%3cpath%20d='M9.10028%2012.8933C10.2817%2012.8934%2011.3405%2013.929%2011.3405%2015.3337C11.3403%2016.7383%2010.2816%2017.7731%209.10028%2017.7732C7.91887%2017.7732%206.86026%2016.7384%206.86005%2015.3337C6.86005%2013.9289%207.91875%2012.8933%209.10028%2012.8933Z'%20stroke='black'%20stroke-width='2'/%3e%3cpath%20d='M9.10028%2012.8933C10.2817%2012.8934%2011.3405%2013.929%2011.3405%2015.3337C11.3403%2016.7383%2010.2816%2017.7731%209.10028%2017.7732C7.91887%2017.7732%206.86026%2016.7384%206.86005%2015.3337C6.86005%2013.9289%207.91875%2012.8933%209.10028%2012.8933Z'%20stroke='black'%20stroke-width='2'/%3e%3cpath%20d='M9.10028%2012.8933C10.2817%2012.8934%2011.3405%2013.929%2011.3405%2015.3337C11.3403%2016.7383%2010.2816%2017.7731%209.10028%2017.7732C7.91887%2017.7732%206.86026%2016.7384%206.86005%2015.3337C6.86005%2013.9289%207.91875%2012.8933%209.10028%2012.8933Z'%20stroke='black'%20stroke-width='2'/%3e%3c/svg%3e", $ = () => {
|
|
221
|
-
const [s, i] = g(!1), l = p((t) => t.addSticker), n = p((t) => t.topZ), c = async () => {
|
|
222
|
-
if (!s) {
|
|
223
|
-
i(!0);
|
|
224
|
-
try {
|
|
225
|
-
const t = (n || 1) + 1, e = await N.create({
|
|
226
|
-
text: "",
|
|
227
|
-
description: "",
|
|
228
|
-
date: null,
|
|
229
|
-
completed: !1,
|
|
230
|
-
cancelled: !1,
|
|
231
|
-
zIndex: t,
|
|
232
|
-
width: 200,
|
|
233
|
-
height: 50,
|
|
234
|
-
parentId: null
|
|
235
|
-
}), o = window.innerWidth / 2 - 100, r = window.innerHeight / 2 - 60;
|
|
236
|
-
l({
|
|
237
|
-
id: String(e.id),
|
|
238
|
-
type: "roadmap",
|
|
239
|
-
x: o,
|
|
240
|
-
y: r,
|
|
241
|
-
width: e.width ?? 200,
|
|
242
|
-
height: e.height ?? 120,
|
|
243
|
-
text: e.text ?? "",
|
|
244
|
-
description: e.description ?? "",
|
|
245
|
-
date: e.date ?? null,
|
|
246
|
-
completed: e.completed ?? !1,
|
|
247
|
-
cancelled: e.cancelled ?? !1,
|
|
248
|
-
parentId: e.parentId ?? null,
|
|
249
|
-
zIndex: e.zIndex ?? t
|
|
250
|
-
});
|
|
251
|
-
} catch (t) {
|
|
252
|
-
console.warn("Не удалось создать roadmap:", t);
|
|
253
|
-
} finally {
|
|
254
|
-
i(!1);
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
};
|
|
258
|
-
return /* @__PURE__ */ a.jsx("div", { className: "left-toolbar-container", onClick: (t) => t.stopPropagation(), children: /* @__PURE__ */ a.jsx("div", { className: "toolbar-card", children: /* @__PURE__ */ a.jsx(
|
|
259
|
-
"button",
|
|
260
|
-
{
|
|
261
|
-
onClick: c,
|
|
262
|
-
disabled: s,
|
|
263
|
-
className: `toolbar-btn toolbar-btn--icon toolbar-btn--markdown ${s ? "toolbar-btn--active" : ""}`,
|
|
264
|
-
title: "Добавить Roadmap",
|
|
265
|
-
children: /* @__PURE__ */ a.jsx("div", { className: `toolbar-markdown-plate ${s ? "toolbar-markdown-plate--active" : ""}`, children: /* @__PURE__ */ a.jsx(
|
|
266
|
-
"img",
|
|
267
|
-
{
|
|
268
|
-
src: s ? T : D,
|
|
269
|
-
alt: "Roadmap",
|
|
270
|
-
draggable: !1
|
|
271
|
-
}
|
|
272
|
-
) })
|
|
273
|
-
}
|
|
274
|
-
) }) });
|
|
275
|
-
}, m = ({ children: s }) => /* @__PURE__ */ a.jsx("div", { children: s }), X = () => {
|
|
276
|
-
const s = p((e) => e.setStickers), i = p((e) => e.setEdges), l = x(null), [n, c] = g(() => m);
|
|
277
|
-
k(() => {
|
|
278
|
-
(async () => {
|
|
279
|
-
try {
|
|
280
|
-
const o = await N.getAll();
|
|
281
|
-
let r = 30, h = 30;
|
|
282
|
-
const C = [], w = [];
|
|
283
|
-
for (const d of o) {
|
|
284
|
-
const u = d.width ?? 200, v = d.height ?? 120;
|
|
285
|
-
C.push({
|
|
286
|
-
id: String(d.id),
|
|
287
|
-
type: "roadmap",
|
|
288
|
-
x: r,
|
|
289
|
-
y: h,
|
|
290
|
-
width: u,
|
|
291
|
-
height: v,
|
|
292
|
-
text: d.text ?? "",
|
|
293
|
-
description: d.description ?? "",
|
|
294
|
-
date: d.date ?? null,
|
|
295
|
-
completed: d.completed ?? !1,
|
|
296
|
-
cancelled: d.cancelled ?? !1,
|
|
297
|
-
parentId: d.parentId ?? null,
|
|
298
|
-
zIndex: d.zIndex ?? 1
|
|
299
|
-
}), d.parentId && w.push({
|
|
300
|
-
id: `e-${d.parentId}-${d.id}`,
|
|
301
|
-
source: String(d.parentId),
|
|
302
|
-
target: String(d.id),
|
|
303
|
-
type: "default",
|
|
304
|
-
animated: !1
|
|
305
|
-
}), r += 24, h += 24;
|
|
55
|
+
let x = 420, y = 30;
|
|
56
|
+
const I = [];
|
|
57
|
+
for (const e of l) {
|
|
58
|
+
const p = e.width ?? 140, h = e.height ?? 140, r = e.rotation ?? 0, A = T.get(String(e.shapeId)) ?? "square";
|
|
59
|
+
I.push({
|
|
60
|
+
id: e.id,
|
|
61
|
+
stickerId: e.id,
|
|
62
|
+
type: "shape",
|
|
63
|
+
shapeId: A,
|
|
64
|
+
shapeDbId: e.shapeId,
|
|
65
|
+
x,
|
|
66
|
+
y,
|
|
67
|
+
width: p,
|
|
68
|
+
height: h,
|
|
69
|
+
rotation: r,
|
|
70
|
+
zIndex: 1,
|
|
71
|
+
fill: "transparent",
|
|
72
|
+
stroke: "#000"
|
|
73
|
+
}), x += 24, y += 24;
|
|
306
74
|
}
|
|
307
|
-
|
|
308
|
-
} catch (
|
|
309
|
-
console.warn("Не удалось загрузить
|
|
75
|
+
f([...u, ...I]);
|
|
76
|
+
} catch (t) {
|
|
77
|
+
console.warn("Не удалось загрузить доску:", t);
|
|
310
78
|
}
|
|
311
79
|
})();
|
|
312
|
-
}, [
|
|
313
|
-
let
|
|
314
|
-
return import("@xyflow/react").then((
|
|
315
|
-
if (!
|
|
316
|
-
|
|
317
|
-
|
|
80
|
+
}, [f]), w(() => {
|
|
81
|
+
let s = !0;
|
|
82
|
+
return import("@xyflow/react").then((t) => {
|
|
83
|
+
if (!s)
|
|
84
|
+
return;
|
|
85
|
+
const a = (t && (t.Widget || t.default || t?.widget || t?.XyflowWidget)) ?? null;
|
|
86
|
+
typeof a == "function" || U.isValidElement(a) ? c(() => a) : c(() => n);
|
|
318
87
|
}).catch(() => {
|
|
319
|
-
|
|
88
|
+
s && c(() => n);
|
|
320
89
|
}), () => {
|
|
321
|
-
|
|
90
|
+
s = !1;
|
|
322
91
|
};
|
|
323
92
|
}, []);
|
|
324
|
-
const
|
|
325
|
-
return /* @__PURE__ */
|
|
326
|
-
/* @__PURE__ */
|
|
327
|
-
|
|
93
|
+
const W = k || n;
|
|
94
|
+
return /* @__PURE__ */ o.jsx(W, { children: /* @__PURE__ */ o.jsxs("div", { className: "relative flex h-screen w-screen bg-gray-100", children: [
|
|
95
|
+
/* @__PURE__ */ o.jsxs("div", { className: "flex flex-col", children: [
|
|
96
|
+
/* @__PURE__ */ o.jsx(J, {}),
|
|
97
|
+
/* @__PURE__ */ o.jsx(F, {})
|
|
98
|
+
] }),
|
|
99
|
+
/* @__PURE__ */ o.jsx(_, { ref: E, nodeTypes: b })
|
|
328
100
|
] }) });
|
|
329
101
|
};
|
|
330
102
|
export {
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
q as baseNodeTypes,
|
|
338
|
-
Q as emojiNodeTypes,
|
|
339
|
-
e2 as shapeNodeTypes
|
|
103
|
+
_ as Board,
|
|
104
|
+
H as CombinedBoardWidget,
|
|
105
|
+
X as EmojiBoardWidget,
|
|
106
|
+
Y as ShapeBoardWidget,
|
|
107
|
+
C as emojiNodeTypes,
|
|
108
|
+
R as shapeNodeTypes
|
|
340
109
|
};
|
|
341
110
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../src/components/ColorPalette.jsx","../src/assets/note_add.svg","../src/assets/note_add_active.svg","../src/components/NoteToolbar.jsx","../src/widgets/NoteBoardWidget.jsx","../src/assets/markdown_add.svg","../src/assets/markdown_add_active.svg","../src/components/MarkdownToolbar.jsx","../src/widgets/MarkdownBoardWidget.jsx","../src/assets/roadmap_add.svg","../src/assets/roadmap_add_active.svg","../src/components/RoadmapToolbar.jsx","../src/widgets/RoadmapBoardWidget.jsx"],"sourcesContent":["import React from 'react'\n\nconst DND_NOTE = 'application/x-integration-note'\n\nconst COLORS = [\n '#FFF79A', '#FFD7A6', '#FFD1F2', '#FD9AE7',\n '#99E5FF', '#85B3F9', '#B2D0FE', '#D6C7FF',\n '#A6FFD6', '#68DF8B', '#FFFFFF', '#262626'\n]\n\nexport const ColorPalette = ({ onPick }) => {\n const onSwatchClick = (color) => () => {\n if (onPick) {\n onPick(color)\n }\n }\n\n const onSwatchDragStart = (color) => (e) => {\n e.stopPropagation()\n\n try {\n e.dataTransfer.setData(DND_NOTE, JSON.stringify({ color }))\n e.dataTransfer.effectAllowed = 'copy'\n } catch (err) {\n console.warn('Не удалось начать перенос заметки:', err)\n }\n }\n\n return (\n <div className=\"palette-panel--large\" role=\"dialog\" aria-label=\"Палитра\">\n <div className=\"palette-grid\">\n {COLORS.map((c) => (\n <button\n key={c}\n type=\"button\"\n className=\"color-swatch color-swatch--large\"\n title={c}\n style={{ background: c }}\n onClick={onSwatchClick(c)}\n draggable\n onDragStart={onSwatchDragStart(c)}\n />\n ))}\n </div>\n </div>\n )\n}","export default \"data:image/svg+xml,%3csvg%20width='58'%20height='53'%20viewBox='0%200%2058%2053'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M1.5%204.5C1.5%202.84315%202.84315%201.5%204.5%201.5H52.8237C54.4806%201.5%2055.8237%202.84315%2055.8237%204.5V26.2263C55.8237%2040.0334%2044.6308%2051.2263%2030.8237%2051.2263H4.5C2.84315%2051.2263%201.5%2049.8832%201.5%2048.2263V4.5Z'%20stroke='black'%20stroke-width='3'/%3e%3cpath%20d='M35.0601%2031.2097C34.7425%2031.0584%2034.3739%2030.9988%2033.9426%2031.1381L33.7534%2031.2097L33.7524%2031.2107C33.5121%2031.3184%2033.3222%2031.459%2033.2417%2031.6573C33.1549%2031.8715%2033.2259%2032.0712%2033.3187%2032.2156C33.4103%2032.3579%2033.5466%2032.4867%2033.6731%2032.5948C33.7936%2032.6977%2033.9493%2032.8164%2034.0458%2032.896C36.3535%2034.7931%2039.159%2036.2031%2043.164%2036.228L43.163%2036.229C47.4558%2036.378%2051.4539%2036.0058%2054.6019%2034.0582C55.1353%2033.7296%2055.6664%2033.348%2056.0128%2032.9039L56.0118%2032.9029C56.1048%2032.7875%2056.2271%2032.5829%2056.1927%2032.3439C56.1537%2032.0744%2055.9392%2031.8802%2055.6031%2031.7644L55.4249%2031.7188C55.2448%2031.6873%2055.0608%2031.6962%2054.8946%2031.7229C54.6708%2031.7588%2054.4593%2031.8298%2054.2959%2031.903L54.2969%2031.9031C53.9148%2032.0702%2053.565%2032.2641%2053.2255%2032.4511C52.8827%2032.6399%2052.5495%2032.8224%2052.1866%2032.9789L52.1856%2032.9789C48.701%2034.4994%2044.8566%2034.9504%2040.6985%2034.1745L40.6985%2034.1736C38.6283%2033.7916%2037.1913%2032.8572%2035.9052%2031.8179L35.9042%2031.8169C35.6881%2031.6444%2035.3972%2031.3703%2035.0601%2031.2097Z'%20fill='black'%20stroke='black'%20stroke-width='0.5'/%3e%3cpath%20d='M33.3199%2032.0092C33.3711%2031.784%2033.5023%2031.5723%2033.7172%2031.3748L33.7186%2031.3732C33.9351%2031.1771%2034.16%2031.0665%2034.3932%2031.0561C34.6255%2031.0457%2034.8211%2031.1371%2034.9778%2031.2547C35.1328%2031.3711%2035.2665%2031.5255%2035.3799%2031.6731L35.6886%2032.0981C37.637%2034.7374%2038.8375%2037.7048%2037.8721%2041.3534C37.0056%2045.2765%2035.513%2048.7857%2032.1275%2051.0424C31.5557%2051.4251%2030.9218%2051.7831%2030.2602%2051.9579C30.0886%2052.0063%2029.8315%2052.042%2029.586%2051.9604C29.3206%2051.8722%2029.1054%2051.659%2029.0272%2051.288L29.0119%2051.1918C28.9909%2050.9686%2029.0611%2050.7564%2029.156%2050.581C29.2641%2050.3813%2029.4161%2050.208%2029.5556%2050.081C29.8749%2049.7851%2030.2219%2049.5259%2030.5549%2049.2766C30.8073%2049.0875%2031.0527%2048.9034%2031.2845%2048.7058L31.5119%2048.5028L31.5131%2048.5021C34.3886%2045.833%2035.9263%2042.5303%2035.9218%2038.5803L35.9211%2038.5791C35.9245%2036.6231%2035.0456%2035.0563%2033.9747%2033.5785L33.9739%2033.5773C33.9268%2033.5114%2033.8755%2033.4438%2033.821%2033.3711C33.7673%2033.2995%2033.7113%2033.2234%2033.6569%2033.1455C33.5491%2032.9909%2033.4413%2032.8178%2033.3724%2032.6319C33.3026%2032.4439%2033.2691%2032.2329%2033.3199%2032.0092Z'%20fill='black'%20stroke='black'%20stroke-width='0.5'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20width='58'%20height='53'%20viewBox='0%200%2058%2053'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M1.5%204.5C1.5%202.84315%202.84315%201.5%204.5%201.5H52.8237C54.4806%201.5%2055.8237%202.84315%2055.8237%204.5V26.2263C55.8237%2040.0334%2044.6308%2051.2263%2030.8237%2051.2263H4.5C2.84315%2051.2263%201.5%2049.8832%201.5%2048.2263V4.5Z'%20stroke='%230000FF'%20stroke-width='3'/%3e%3cpath%20d='M35.0599%2031.2098C34.7423%2031.0585%2034.3737%2030.9989%2033.9424%2031.1382L33.7532%2031.2097L33.7522%2031.2107C33.5119%2031.3185%2033.3221%2031.459%2033.2415%2031.6573C33.1547%2031.8716%2033.2257%2032.0713%2033.3185%2032.2156C33.4101%2032.3579%2033.5464%2032.4868%2033.6729%2032.5948C33.7935%2032.6977%2033.9491%2032.8165%2034.0457%2032.896C36.3533%2034.7932%2039.1588%2036.2031%2043.1638%2036.2281L43.1628%2036.229C47.4556%2036.3781%2051.4537%2036.0059%2054.6017%2034.0583C55.1351%2033.7297%2055.6662%2033.3481%2056.0126%2032.9039L56.0117%2032.9029C56.1047%2032.7876%2056.2269%2032.5829%2056.1925%2032.344C56.1535%2032.0744%2055.939%2031.8803%2055.603%2031.7645L55.4247%2031.7189C55.2446%2031.6874%2055.0607%2031.6962%2054.8944%2031.7229C54.6706%2031.7589%2054.4592%2031.8298%2054.2957%2031.9031L54.2967%2031.9031C53.9146%2032.0702%2053.5648%2032.2642%2053.2253%2032.4511C52.8825%2032.6399%2052.5493%2032.8225%2052.1864%2032.9789L52.1854%2032.9789C48.7008%2034.4994%2044.8564%2034.9504%2040.6983%2034.1746L40.6984%2034.1736C38.6281%2033.7917%2037.1911%2032.8573%2035.905%2031.818L35.904%2031.817C35.688%2031.6445%2035.397%2031.3704%2035.0599%2031.2098Z'%20fill='%230000FF'%20stroke='%230000FF'%20stroke-width='0.5'/%3e%3cpath%20d='M33.32%2032.0091C33.3712%2031.7839%2033.5024%2031.5722%2033.7173%2031.3747L33.7188%2031.373C33.9352%2031.177%2034.1602%2031.0664%2034.3934%2031.056C34.6256%2031.0456%2034.8213%2031.137%2034.9779%2031.2546C35.1329%2031.371%2035.2666%2031.5254%2035.3801%2031.673L35.6888%2032.098C37.6372%2034.7373%2038.8377%2037.7047%2037.8722%2041.3533C37.0057%2045.2764%2035.5131%2048.7856%2032.1276%2051.0422C31.5558%2051.425%2030.9219%2051.783%2030.2604%2051.9578C30.0887%2052.0062%2029.8316%2052.0419%2029.5861%2051.9603C29.3207%2051.8721%2029.1055%2051.6589%2029.0273%2051.2879L29.012%2051.1917C28.9911%2050.9685%2029.0612%2050.7563%2029.1561%2050.5809C29.2643%2050.3812%2029.4162%2050.2079%2029.5557%2050.0809C29.875%2049.785%2030.222%2049.5258%2030.555%2049.2765C30.8075%2049.0874%2031.0529%2048.9032%2031.2846%2048.7057L31.512%2048.5027L31.5132%2048.502C34.3887%2045.8329%2035.9264%2042.5302%2035.9219%2038.5801L35.9212%2038.579C35.9246%2036.623%2035.0457%2035.0562%2033.9748%2033.5784L33.9741%2033.5772C33.927%2033.5113%2033.8756%2033.4437%2033.8211%2033.371C33.7674%2033.2994%2033.7114%2033.2233%2033.6571%2033.1454C33.5492%2032.9908%2033.4414%2032.8177%2033.3725%2032.6318C33.3028%2032.4437%2033.2692%2032.2328%2033.32%2032.0091Z'%20fill='%230000FF'%20stroke='%230000FF'%20stroke-width='0.5'/%3e%3c/svg%3e\"","// NoteToolbar.jsx\nimport React, { useState, useRef, useEffect } from 'react';\nimport { ColorPalette } from './ColorPalette.jsx';\nimport noteAdd from '../assets/note_add.svg';\nimport noteAddActive from '../assets/note_add_active.svg';\nimport '../styles/stickerPalette.css';\n\nexport const NoteToolbar = ({ onPick }) => {\n const [open, setOpen] = useState(false);\n const wrapperRef = useRef(null);\n\n const toggle = (e) => {\n e.stopPropagation();\n setOpen((v) => !v);\n };\n\n useEffect(() => {\n if (!open) return;\n const handler = (e) => {\n if (wrapperRef.current && !wrapperRef.current.contains(e.target)) {\n setOpen(false);\n }\n };\n window.addEventListener('pointerdown', handler);\n return () => window.removeEventListener('pointerdown', handler);\n }, [open]);\n\n return (\n <div className=\"left-toolbar-container dragHandle__custom\" ref={wrapperRef} onClick={(e) => e.stopPropagation()}>\n <div className={`toolbar-card ${open ? 'toolbar-card--open' : ''}`}>\n <button onClick={toggle} className={`toolbar-btn toolbar-btn--icon toolbar-btn--note ${open ? 'toolbar-btn--active' : ''}`}>\n <div className={`toolbar-note-plate ${open ? 'toolbar-note-plate--active' : ''}`}>\n <img src={open ? noteAddActive : noteAdd} alt=\"Заметки\" draggable={false} />\n </div>\n </button>\n </div>\n {open && (\n <div className=\"palette-wrapper\" onClick={(e) => e.stopPropagation()}>\n <ColorPalette onPick={(color) => { onPick?.(color); setOpen(false); }} />\n </div>\n )}\n </div>\n );\n};","// NoteBoardWidget.jsx\nimport React, { useEffect, useRef, useState } from 'react';\nimport { NoteToolbar } from '../components/NoteToolbar.jsx';\nimport { Board } from '../features/board/ui/Board.jsx';\nimport { useStickersStore } from '../entities/stickers/model/useStickersStore.js';\nimport { notesApi } from '../shared/api/notesApi.js';\nimport { NOTE_W, NOTE_H } from '../features/board/constants';\n\nconst SafeFallbackWidget = ({ children }) => <div>{children}</div>;\n\nexport const NoteBoardWidget = () => {\n const addSticker = useStickersStore((state) => state.addSticker);\n const setStickers = useStickersStore((state) => state.setStickers);\n const boardRef = useRef(null);\n const [WidgetComp, setWidgetComp] = useState(() => SafeFallbackWidget);\n\n useEffect(() => {\n const loadBoard = async () => {\n try {\n const notes = await notesApi.getAll();\n let x = 30;\n let y = 30;\n const items = [];\n for (const n of notes) {\n const w = n.width ?? NOTE_W;\n const h = n.height ?? NOTE_H;\n items.push({\n id: n.id,\n x,\n y,\n color: n.color,\n width: w,\n height: h,\n text: n.content ?? '',\n zIndex: 1,\n });\n x += 24;\n y += 24;\n }\n setStickers(items);\n } catch (e) {\n console.warn('Не удалось загрузить доску для заметок:', e);\n }\n };\n loadBoard();\n }, [setStickers]);\n\n useEffect(() => {\n let mounted = true;\n import('@xyflow/react')\n .then((mod) => {\n if (!mounted) return;\n const candidate = (mod && (mod.Widget || mod.default || mod?.widget || mod?.XyflowWidget)) ?? null;\n if (typeof candidate === 'function' || React.isValidElement(candidate)) {\n setWidgetComp(() => candidate);\n } else {\n setWidgetComp(() => SafeFallbackWidget);\n }\n })\n .catch(() => {\n if (mounted) setWidgetComp(() => SafeFallbackWidget);\n });\n return () => { mounted = false; };\n }, []);\n\n const Wrapper = WidgetComp || SafeFallbackWidget;\n\n const handlePick = async (color) => {\n try {\n const created = await notesApi.create(color, NOTE_W, NOTE_H);\n const w = created.width ?? NOTE_W;\n const h = created.height ?? NOTE_H;\n if (boardRef.current?.addStickerAtCenter) {\n boardRef.current.addStickerAtCenter(color, {\n id: created.id,\n text: created.content ?? '',\n width: w,\n height: h,\n });\n return;\n }\n addSticker({\n id: created.id,\n x: 260,\n y: 120,\n color,\n width: w,\n height: h,\n text: created.content ?? '',\n });\n } catch (e) {\n console.warn('Не удалось создать заметку:', e);\n }\n };\n\n return (\n <Wrapper>\n <div className=\"relative flex h-screen w-screen bg-gray-100\">\n <NoteToolbar onPick={handlePick} />\n <Board ref={boardRef} />\n </div>\n </Wrapper>\n );\n};","export default \"data:image/svg+xml,%3csvg%20width='52'%20height='51'%20viewBox='0%200%2052%2051'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M1.5%2049.0548V1.50049'%20stroke='black'%20stroke-width='3'%20stroke-linecap='round'/%3e%3cpath%20d='M14.0801%2034.3356L1.5%201.50049'%20stroke='black'%20stroke-width='3'/%3e%3cpath%20d='M14.0801%2034.3356L26.6602%201.50049'%20stroke='black'%20stroke-width='3'%20stroke-linecap='round'/%3e%3cpath%20d='M26.6602%201.50049V49.0548'%20stroke='black'%20stroke-width='3'%20stroke-linecap='round'/%3e%3cpath%20d='M50%2025.2776C50%2031.5634%2047.7786%2037.5611%2043.8701%2041.9583C40.3263%2045.945%2035.6696%2048.3122%2030.7773%2048.7151L30.7773%201.84009C35.6696%202.243%2040.3263%204.61018%2043.8701%208.59692C47.7786%2012.9941%2050%2018.9918%2050%2025.2776Z'%20stroke='black'%20stroke-width='3'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20width='52'%20height='51'%20viewBox='0%200%2052%2051'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M1.5%2049.0548V1.50049'%20stroke='%230000FF'%20stroke-width='3'%20stroke-linecap='round'/%3e%3cpath%20d='M14.0801%2034.3356L1.5%201.50049'%20stroke='%230000FF'%20stroke-width='3'/%3e%3cpath%20d='M14.0801%2034.3356L26.6602%201.50049'%20stroke='%230000FF'%20stroke-width='3'%20stroke-linecap='round'/%3e%3cpath%20d='M26.6602%201.50049V49.0548'%20stroke='%230000FF'%20stroke-width='3'%20stroke-linecap='round'/%3e%3cpath%20d='M50%2025.2776C50%2031.5634%2047.7786%2037.5611%2043.8701%2041.9583C40.3263%2045.945%2035.6696%2048.3122%2030.7773%2048.7151L30.7773%201.84009C35.6696%202.243%2040.3263%204.61018%2043.8701%208.59692C47.7786%2012.9941%2050%2018.9918%2050%2025.2776Z'%20stroke='%230000FF'%20stroke-width='3'/%3e%3c/svg%3e\"","import React, { useState } from 'react';\nimport markdownAdd from '../assets/markdown_add.svg';\nimport markdownAddActive from '../assets/markdown_add_active.svg';\nimport { useStickersStore } from '../entities/stickers/model/useStickersStore';\nimport { markdownApi } from '../shared/api/markdownApi';\nimport '../styles/stickerPalette.css';\nimport '../features/markdown/markdown.css';\n\nexport const MarkdownToolbar = () => {\n const [isCreating, setIsCreating] = useState(false);\n\n const addSticker = useStickersStore(state => state.addSticker);\n const topZ = useStickersStore(state => state.topZ);\n\n const createMarkdown = async () => {\n if (isCreating) return;\n setIsCreating(true);\n\n try {\n const nextZ = (topZ || 1) + 1;\n\n const created = await markdownApi.create({\n content: '# Новый Markdown\\n\\nНачните писать здесь...',\n width: 600,\n height: 400,\n isEditorVisible: true\n });\n\n const centerX = window.innerWidth / 2 - 300;\n const centerY = window.innerHeight / 2 - 200;\n\n addSticker({\n id: created.id,\n stickerId: created.markdownId,\n isEditorVisible: created.isEditorVisible ?? true,\n type: 'markdown',\n x: centerX,\n y: centerY,\n width: created.width ?? 600,\n height: created.height ?? 400,\n text: created.content ?? '',\n zIndex: nextZ\n });\n } catch (err) {\n console.warn('Не удалось создать markdown блок:', err);\n } finally {\n setIsCreating(false);\n }\n };\n\n return (\n <div className=\"left-toolbar-container\" onClick={e => e.stopPropagation()}>\n <div className=\"toolbar-card\">\n <button\n onClick={createMarkdown}\n disabled={isCreating}\n className={`toolbar-btn toolbar-btn--icon toolbar-btn--markdown ${isCreating ? 'toolbar-btn--active' : ''}`.trim()}\n title=\"Добавить Markdown блок\"\n >\n <div className={`toolbar-markdown-plate ${isCreating ? 'toolbar-markdown-plate--active' : ''}`}>\n <img\n src={isCreating ? markdownAddActive : markdownAdd}\n alt=\"Markdown\"\n draggable={false}\n />\n </div>\n </button>\n </div>\n </div>\n );\n};","// MarkdownBoardWidget.jsx\nimport React, { useEffect, useRef, useState } from 'react';\nimport { MarkdownToolbar } from '../components/MarkdownToolbar.jsx';\nimport { Board } from '../features/board/ui/Board.jsx';\nimport { useStickersStore } from '../entities/stickers/model/useStickersStore.js';\nimport { markdownApi } from '../shared/api/markdownApi';\n\nconst SafeFallbackWidget = ({ children }) => <div>{children}</div>;\n\nexport const MarkdownBoardWidget = () => {\n const setStickers = useStickersStore((state) => state.setStickers);\n const boardRef = useRef(null);\n const [WidgetComp, setWidgetComp] = useState(() => SafeFallbackWidget);\n\n useEffect(() => {\n const loadBoard = async () => {\n try {\n const boardMarkdowns = await markdownApi.getBoard();\n let x = 30;\n let y = 30;\n const items = [];\n for (const m of boardMarkdowns) {\n const w = m.width ?? 600;\n const h = m.height ?? 400;\n items.push({\n id: m.id,\n stickerId: m.markdownId,\n isEditorVisible: m.isEditorVisible ?? true,\n type: 'markdown',\n x,\n y,\n width: w,\n height: h,\n text: m.content ?? '',\n zIndex: 1,\n });\n x += 24;\n y += 24;\n }\n setStickers(items);\n } catch (e) {\n console.warn('Не удалось загрузить доску для markdown:', e);\n }\n };\n loadBoard();\n }, [setStickers]);\n\n useEffect(() => {\n let mounted = true;\n import('@xyflow/react')\n .then((mod) => {\n if (!mounted) return;\n const candidate = (mod && (mod.Widget || mod.default || mod?.widget || mod?.XyflowWidget)) ?? null;\n if (typeof candidate === 'function' || React.isValidElement(candidate)) {\n setWidgetComp(() => candidate);\n } else {\n setWidgetComp(() => SafeFallbackWidget);\n }\n })\n .catch(() => {\n if (mounted) setWidgetComp(() => SafeFallbackWidget);\n });\n return () => { mounted = false; };\n }, []);\n\n const Wrapper = WidgetComp || SafeFallbackWidget;\n\n return (\n <Wrapper>\n <div className=\"relative flex h-screen w-screen bg-gray-100\">\n <MarkdownToolbar createInCenter={() => {\n return { x: 300, y: 200 };\n }} />\n <Board ref={boardRef} />\n </div>\n </Wrapper>\n );\n};","export default \"data:image/svg+xml,%3csvg%20width='57'%20height='45'%20viewBox='0%200%2057%2045'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M9.1%2023.36H1V44H49.06L55%2033.1067L49.06%2023.36H41.5M9.1%2023.36V18.2M9.1%2023.36H25.3M25.3%2023.36V14.76M25.3%2023.36H41.5M41.5%2023.36V11.32M41.5%2011.32V1H55L51.22%206.16L55%2011.32H41.5Z'%20stroke='black'%20stroke-width='2'/%3e%3cpath%20d='M22.5999%2033.6799L16.6599%2043.9999H32.8599L38.7999%2033.6799L32.8599%2023.3599H16.6599L22.5999%2033.6799Z'%20stroke='black'%20stroke-width='2'/%3e%3cpath%20d='M25.3003%209.45337C26.4817%209.45351%2027.5405%2010.489%2027.5405%2011.8938C27.5403%2013.2983%2026.4816%2014.3331%2025.3003%2014.3333C24.1189%2014.3333%2023.0603%2013.2984%2023.0601%2011.8938C23.0601%2010.4889%2024.1188%209.45337%2025.3003%209.45337Z'%20stroke='black'%20stroke-width='2'/%3e%3cpath%20d='M25.3003%209.45337C26.4817%209.45351%2027.5405%2010.489%2027.5405%2011.8938C27.5403%2013.2983%2026.4816%2014.3331%2025.3003%2014.3333C24.1189%2014.3333%2023.0603%2013.2984%2023.0601%2011.8938C23.0601%2010.4889%2024.1188%209.45337%2025.3003%209.45337Z'%20stroke='black'%20stroke-width='2'/%3e%3cpath%20d='M25.3003%209.45337C26.4817%209.45351%2027.5405%2010.489%2027.5405%2011.8938C27.5403%2013.2983%2026.4816%2014.3331%2025.3003%2014.3333C24.1189%2014.3333%2023.0603%2013.2984%2023.0601%2011.8938C23.0601%2010.4889%2024.1188%209.45337%2025.3003%209.45337Z'%20stroke='black'%20stroke-width='2'/%3e%3cpath%20d='M9.10028%2012.8933C10.2817%2012.8934%2011.3405%2013.929%2011.3405%2015.3337C11.3403%2016.7383%2010.2816%2017.7731%209.10028%2017.7732C7.91887%2017.7732%206.86026%2016.7384%206.86005%2015.3337C6.86005%2013.9289%207.91875%2012.8933%209.10028%2012.8933Z'%20stroke='black'%20stroke-width='2'/%3e%3cpath%20d='M9.10028%2012.8933C10.2817%2012.8934%2011.3405%2013.929%2011.3405%2015.3337C11.3403%2016.7383%2010.2816%2017.7731%209.10028%2017.7732C7.91887%2017.7732%206.86026%2016.7384%206.86005%2015.3337C6.86005%2013.9289%207.91875%2012.8933%209.10028%2012.8933Z'%20stroke='black'%20stroke-width='2'/%3e%3cpath%20d='M9.10028%2012.8933C10.2817%2012.8934%2011.3405%2013.929%2011.3405%2015.3337C11.3403%2016.7383%2010.2816%2017.7731%209.10028%2017.7732C7.91887%2017.7732%206.86026%2016.7384%206.86005%2015.3337C6.86005%2013.9289%207.91875%2012.8933%209.10028%2012.8933Z'%20stroke='black'%20stroke-width='2'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20width='57'%20height='45'%20viewBox='0%200%2057%2045'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M9.1%2023.36H1V44H49.06L55%2033.1067L49.06%2023.36H41.5M9.1%2023.36V18.2M9.1%2023.36H25.3M25.3%2023.36V14.76M25.3%2023.36H41.5M41.5%2023.36V11.32M41.5%2011.32V1H55L51.22%206.16L55%2011.32H41.5Z'%20stroke='black'%20stroke-width='2'/%3e%3cpath%20d='M22.5999%2033.6799L16.6599%2043.9999H32.8599L38.7999%2033.6799L32.8599%2023.3599H16.6599L22.5999%2033.6799Z'%20stroke='black'%20stroke-width='2'/%3e%3cpath%20d='M25.3003%209.45337C26.4817%209.45351%2027.5405%2010.489%2027.5405%2011.8938C27.5403%2013.2983%2026.4816%2014.3331%2025.3003%2014.3333C24.1189%2014.3333%2023.0603%2013.2984%2023.0601%2011.8938C23.0601%2010.4889%2024.1188%209.45337%2025.3003%209.45337Z'%20stroke='black'%20stroke-width='2'/%3e%3cpath%20d='M25.3003%209.45337C26.4817%209.45351%2027.5405%2010.489%2027.5405%2011.8938C27.5403%2013.2983%2026.4816%2014.3331%2025.3003%2014.3333C24.1189%2014.3333%2023.0603%2013.2984%2023.0601%2011.8938C23.0601%2010.4889%2024.1188%209.45337%2025.3003%209.45337Z'%20stroke='black'%20stroke-width='2'/%3e%3cpath%20d='M25.3003%209.45337C26.4817%209.45351%2027.5405%2010.489%2027.5405%2011.8938C27.5403%2013.2983%2026.4816%2014.3331%2025.3003%2014.3333C24.1189%2014.3333%2023.0603%2013.2984%2023.0601%2011.8938C23.0601%2010.4889%2024.1188%209.45337%2025.3003%209.45337Z'%20stroke='black'%20stroke-width='2'/%3e%3cpath%20d='M9.10028%2012.8933C10.2817%2012.8934%2011.3405%2013.929%2011.3405%2015.3337C11.3403%2016.7383%2010.2816%2017.7731%209.10028%2017.7732C7.91887%2017.7732%206.86026%2016.7384%206.86005%2015.3337C6.86005%2013.9289%207.91875%2012.8933%209.10028%2012.8933Z'%20stroke='black'%20stroke-width='2'/%3e%3cpath%20d='M9.10028%2012.8933C10.2817%2012.8934%2011.3405%2013.929%2011.3405%2015.3337C11.3403%2016.7383%2010.2816%2017.7731%209.10028%2017.7732C7.91887%2017.7732%206.86026%2016.7384%206.86005%2015.3337C6.86005%2013.9289%207.91875%2012.8933%209.10028%2012.8933Z'%20stroke='black'%20stroke-width='2'/%3e%3cpath%20d='M9.10028%2012.8933C10.2817%2012.8934%2011.3405%2013.929%2011.3405%2015.3337C11.3403%2016.7383%2010.2816%2017.7731%209.10028%2017.7732C7.91887%2017.7732%206.86026%2016.7384%206.86005%2015.3337C6.86005%2013.9289%207.91875%2012.8933%209.10028%2012.8933Z'%20stroke='black'%20stroke-width='2'/%3e%3c/svg%3e\"","import React, { useState } from 'react';\nimport roadmapAdd from '../assets/roadmap_add.svg';\nimport roadmapAddActive from '../assets/roadmap_add_active.svg';\nimport { useStickersStore } from '../entities/stickers/model/useStickersStore';\nimport { roadmapApi } from '../shared/api/roadmapApi.js';\nimport '../styles/stickerPalette.css';\nimport '../features/roadmap/roadmap.css';\n\nexport const RoadmapToolbar = () => {\n const [isCreating, setIsCreating] = useState(false);\n\n const addSticker = useStickersStore(state => state.addSticker);\n const topZ = useStickersStore(state => state.topZ);\n\n const createRoadmap = async () => {\n if (isCreating) return;\n setIsCreating(true);\n\n try {\n const nextZ = (topZ || 1) + 1;\n\n const created = await roadmapApi.create({\n text: '',\n description: '',\n date: null,\n completed: false,\n cancelled: false,\n zIndex: nextZ,\n width: 200,\n height: 50,\n parentId: null\n });\n\n // Добавляем в центр экрана (можно настроить координаты)\n const centerX = window.innerWidth / 2 - 100; // - половина ширины\n const centerY = window.innerHeight / 2 - 60; // - половина высоты\n\n addSticker({\n id: String(created.id),\n type: 'roadmap',\n x: centerX,\n y: centerY,\n width: created.width ?? 200,\n height: created.height ?? 120,\n text: created.text ?? '',\n description: created.description ?? '',\n date: created.date ?? null,\n completed: created.completed ?? false,\n cancelled: created.cancelled ?? false,\n parentId: created.parentId ?? null,\n zIndex: created.zIndex ?? nextZ\n });\n } catch (err) {\n console.warn('Не удалось создать roadmap:', err);\n } finally {\n setIsCreating(false);\n }\n };\n\n return (\n <div className=\"left-toolbar-container\" onClick={e => e.stopPropagation()}>\n <div className=\"toolbar-card\">\n <button\n onClick={createRoadmap}\n disabled={isCreating}\n className={`toolbar-btn toolbar-btn--icon toolbar-btn--markdown ${isCreating ? 'toolbar-btn--active' : ''}`}\n title=\"Добавить Roadmap\"\n >\n <div className={`toolbar-markdown-plate ${isCreating ? 'toolbar-markdown-plate--active' : ''}`}>\n <img\n src={isCreating ? roadmapAddActive : roadmapAdd}\n alt=\"Roadmap\"\n draggable={false}\n />\n </div>\n </button>\n </div>\n </div>\n );\n};","// RoadmapBoardWidget.jsx\nimport React, { useEffect, useRef, useState } from 'react';\nimport { RoadmapToolbar } from '../components/RoadmapToolbar.jsx';\nimport { Board } from '../features/board/ui/Board.jsx';\nimport { useStickersStore } from '../entities/stickers/model/useStickersStore.js';\nimport { roadmapApi } from \"../shared/api/roadmapApi.js\";\n\n\nconst SafeFallbackWidget = ({ children }) => <div>{children}</div>;\n\nexport const RoadmapBoardWidget = () => {\n const setStickers = useStickersStore((state) => state.setStickers);\n const setEdges = useStickersStore((state) => state.setEdges);\n const boardRef = useRef(null);\n const [WidgetComp, setWidgetComp] = useState(() => SafeFallbackWidget);\n\n useEffect(() => {\n const loadBoard = async () => {\n try {\n const roadmaps = await roadmapApi.getAll();\n let x = 30;\n let y = 30;\n const items = [];\n const edges = [];\n for (const r of roadmaps) {\n const w = r.width ?? 200;\n const h = r.height ?? 120;\n items.push({\n id: String(r.id),\n type: 'roadmap',\n x,\n y,\n width: w,\n height: h,\n text: r.text ?? '',\n description: r.description ?? '',\n date: r.date ?? null,\n completed: r.completed ?? false,\n cancelled: r.cancelled ?? false,\n parentId: r.parentId ?? null,\n zIndex: r.zIndex ?? 1,\n });\n if (r.parentId) {\n edges.push({\n id: `e-${r.parentId}-${r.id}`,\n source: String(r.parentId),\n target: String(r.id),\n type: 'default',\n animated: false,\n });\n }\n x += 24;\n y += 24;\n }\n setStickers(items);\n setEdges(edges);\n } catch (e) {\n console.warn('Не удалось загрузить доску для роадмапа:', e);\n }\n };\n loadBoard();\n }, [setStickers, setEdges]);\n\n useEffect(() => {\n let mounted = true;\n import('@xyflow/react')\n .then((mod) => {\n if (!mounted) return;\n const candidate = (mod && (mod.Widget || mod.default || mod?.widget || mod?.XyflowWidget)) ?? null;\n if (typeof candidate === 'function' || React.isValidElement(candidate)) {\n setWidgetComp(() => candidate);\n } else {\n setWidgetComp(() => SafeFallbackWidget);\n }\n })\n .catch(() => {\n if (mounted) setWidgetComp(() => SafeFallbackWidget);\n });\n return () => { mounted = false; };\n }, []);\n\n const Wrapper = WidgetComp || SafeFallbackWidget;\n\n return (\n <Wrapper>\n <div className=\"relative flex h-screen w-screen bg-gray-100\">\n <RoadmapToolbar createInCenter={() => {\n return { x: 300, y: 200 };\n }} />\n <Board ref={boardRef} />\n </div>\n </Wrapper>\n );\n};"],"names":["DND_NOTE","COLORS","ColorPalette","onPick","onSwatchClick","color","onSwatchDragStart","e","err","jsx","c","noteAdd","noteAddActive","NoteToolbar","open","setOpen","useState","wrapperRef","useRef","toggle","v","useEffect","handler","jsxs","SafeFallbackWidget","children","NoteBoardWidget","addSticker","useStickersStore","state","setStickers","boardRef","WidgetComp","setWidgetComp","notes","notesApi","x","y","items","n","w","NOTE_W","h","NOTE_H","mounted","mod","candidate","React","Wrapper","handlePick","created","Board","markdownAdd","markdownAddActive","MarkdownToolbar","isCreating","setIsCreating","topZ","createMarkdown","nextZ","markdownApi","centerX","centerY","MarkdownBoardWidget","boardMarkdowns","m","roadmapAdd","roadmapAddActive","RoadmapToolbar","createRoadmap","roadmapApi","RoadmapBoardWidget","setEdges","roadmaps","edges","r"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/widgets/CombinedBoardWidget.jsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react'\nimport { EmojiToolbar } from '../components/EmojiToolbar.jsx'\nimport { ShapeToolbar } from '../components/ShapeToolbar.jsx'\nimport { Board } from '../features/board/ui/Board.jsx'\nimport { useStickersStore } from '../entities/stickers/model/useStickersStore.js'\nimport { stickersApi } from '../shared/api/stickerApi.js'\nimport { shapesApi } from '../shared/api/shapesApi.js'\nimport { EMOJI_W, EMOJI_H } from '../features/board/constants'\nimport { EMOJI_CATALOG, EMOJI_MAP } from '../features/emoji-sticker/stickers.js'\nimport { emojiNodeTypes } from '../features/emoji-sticker/public/emojiNodeTypes.js'\nimport { shapeNodeTypes } from '../features/shape/public/shapeNodeTypes.js'\n\nconst SafeFallbackWidget = ({ children }) => <div>{children}</div>\n\n/**\n * @typedef {import('@xyflow/react').NodeProps} NodeProps\n * @typedef {Record<string, React.ComponentType<NodeProps>>} NodeTypes\n */\n\n/**\n * @param {{ nodeTypes?: NodeTypes }} props\n */\nexport const CombinedBoardWidget = ({ nodeTypes }) => {\n const setStickers = useStickersStore((state) => state.setStickers)\n const boardRef = useRef(null)\n const [WidgetComp, setWidgetComp] = useState(() => SafeFallbackWidget)\n\n const mergedNodeTypes = {\n ...emojiNodeTypes,\n ...shapeNodeTypes,\n ...(nodeTypes || {}),\n }\n\n async function getEmojiUrlForStickerId(stickerId) {\n if (EMOJI_MAP && EMOJI_MAP[stickerId]) {\n return EMOJI_MAP[stickerId]\n }\n\n try {\n const info = await stickersApi.getById(stickerId)\n if (info?.name) {\n const local = EMOJI_CATALOG.find((e) => e.name === info.name)\n if (local) {\n return local.url\n }\n }\n } catch (err) {\n console.warn('getEmojiUrlForStickerId: backend lookup failed', err)\n }\n\n return ''\n }\n\n useEffect(() => {\n const loadBoard = async () => {\n try {\n const [boardEmojis, allShapes, boardShapes] = await Promise.all([\n stickersApi.getBoard(),\n shapesApi.getAll(),\n shapesApi.getBoard(),\n ])\n\n const shapeKeyByDbId = new Map(allShapes.map((x) => [String(x.id), x.shapeId]))\n\n // emoji\n let ex = 30\n let ey = 30\n const emojiItems = []\n\n for (const e of boardEmojis) {\n const w = e.width ?? EMOJI_W\n const h = e.height ?? EMOJI_H\n\n let imageUrl = EMOJI_MAP?.[String(e.stickerId)] ?? ''\n if (!imageUrl) {\n imageUrl = await getEmojiUrlForStickerId(e.stickerId)\n }\n\n emojiItems.push({\n id: e.id,\n x: ex,\n y: ey,\n color: 'transparent',\n width: w,\n height: h,\n text: '',\n zIndex: 1,\n stickerId: e.stickerId,\n imageUrl,\n type: 'emoji',\n })\n\n ex += 24\n ey += 24\n }\n\n // shapes (чтобы визуально не накладывались — сместим старт)\n let sx = 420\n let sy = 30\n const shapeItems = []\n\n for (const s of boardShapes) {\n const w = s.width ?? 140\n const h = s.height ?? 140\n const r = s.rotation ?? 0\n const shapeKey = shapeKeyByDbId.get(String(s.shapeId)) ?? 'square'\n\n shapeItems.push({\n id: s.id,\n stickerId: s.id,\n type: 'shape',\n shapeId: shapeKey,\n shapeDbId: s.shapeId,\n x: sx,\n y: sy,\n width: w,\n height: h,\n rotation: r,\n zIndex: 1,\n fill: 'transparent',\n stroke: '#000',\n })\n\n sx += 24\n sy += 24\n }\n\n setStickers([...emojiItems, ...shapeItems])\n } catch (e) {\n console.warn('Не удалось загрузить доску:', e)\n }\n }\n\n loadBoard()\n }, [setStickers])\n\n useEffect(() => {\n let mounted = true\n\n import('@xyflow/react')\n .then((mod) => {\n if (!mounted) {\n return\n }\n\n const candidate = (mod && (mod.Widget || mod.default || mod?.widget || mod?.XyflowWidget)) ?? null\n if (typeof candidate === 'function' || React.isValidElement(candidate)) {\n setWidgetComp(() => candidate)\n } else {\n setWidgetComp(() => SafeFallbackWidget)\n }\n })\n .catch(() => {\n if (mounted) {\n setWidgetComp(() => SafeFallbackWidget)\n }\n })\n\n return () => {\n mounted = false\n }\n }, [])\n\n const Wrapper = WidgetComp || SafeFallbackWidget\n\n return (\n <Wrapper>\n <div className=\"relative flex h-screen w-screen bg-gray-100\">\n <div className=\"flex flex-col\">\n <EmojiToolbar />\n <ShapeToolbar />\n </div>\n <Board ref={boardRef} nodeTypes={mergedNodeTypes} />\n </div>\n </Wrapper>\n )\n}\n"],"names":["SafeFallbackWidget","children","jsx","CombinedBoardWidget","nodeTypes","setStickers","useStickersStore","state","boardRef","useRef","WidgetComp","setWidgetComp","useState","mergedNodeTypes","emojiNodeTypes","shapeNodeTypes","getEmojiUrlForStickerId","stickerId","EMOJI_MAP","info","stickersApi","local","EMOJI_CATALOG","e","err","useEffect","boardEmojis","allShapes","boardShapes","shapesApi","shapeKeyByDbId","x","ex","ey","emojiItems","w","EMOJI_W","EMOJI_H","imageUrl","sx","sy","shapeItems","s","shapeKey","mounted","mod","candidate","React","Wrapper","jsxs","EmojiToolbar","ShapeToolbar","Board"],"mappings":"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"}
|