integration-modules 0.1.9 → 0.1.10
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/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +47 -47
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var N=Object.create;var b=Object.defineProperty;var O=Object.getOwnPropertyDescriptor;var J=Object.getOwnPropertyNames;var _=Object.getPrototypeOf,P=Object.prototype.hasOwnProperty;var q=(s,i,d,p)=>{if(i&&typeof i=="object"||typeof i=="function")for(let a of J(i))!P.call(s,a)&&a!==d&&b(s,a,{get:()=>i[a],enumerable:!(p=O(i,a))||p.enumerable});return s};var v=(s,i,d)=>(d=s!=null?N(_(s)):{},q(i||!s||!s.__esModule?b(d,"default",{value:s,enumerable:!0}):d,s));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./chunks/Board-D7raFrnX.js"),u=require("./chunks/EmojiBoardWidget-DpXXIo8W.js"),g=require("./chunks/ShapeBoardWidget-lQuZw7IG.js"),l=require("react"),h=({children:s})=>e.jsxRuntimeExports.jsx("div",{children:s}),C=({nodeTypes:s})=>{const i=e.useStickersStore(r=>r.setStickers),d=l.useRef(null),[p,a]=l.useState(()=>h),k={...u.emojiNodeTypes,...g.shapeNodeTypes,...s||{}};async function M(r){if(e.EMOJI_MAP&&e.EMOJI_MAP[r])return e.EMOJI_MAP[r];try{const o=await e.stickersApi.getById(r);if(o?.name){const n=e.EMOJI_CATALOG.find(m=>m.name===o.name);if(n)return n.url}}catch(o){console.warn("getEmojiUrlForStickerId: backend lookup failed",o)}return""}l.useEffect(()=>{(async()=>{try{const[o,n,m]=await Promise.all([e.stickersApi.getBoard(),e.shapesApi.getAll(),e.shapesApi.getBoard()]),A=new Map(n.map(t=>[String(t.id),t.shapeId]));let j=30,y=30,E=1;const I=[];for(const t of o){const f=t.width??e.EMOJI_W,x=t.height??e.EMOJI_H;let c=e.EMOJI_MAP?.[String(t.stickerId)]??"";c||(c=await M(t.stickerId)),I.push({id:t.id,x:j,y,color:"transparent",width:f,height:x,text:"",zIndex:E,stickerId:t.stickerId,imageUrl:c,type:"emoji"}),j+=24,y+=24,E+=1}let S=500,B=30,w=1e4;const W=[];for(const t of m){const f=t.width??140,x=t.height??140,c=t.rotation??0,R=A.get(String(t.shapeId))??"square";W.push({id:t.id,stickerId:t.id,type:"shape",shapeId:R,shapeDbId:t.shapeId,x:S,y:B,width:f,height:x,rotation:c,zIndex:w,fill:"transparent",stroke:"#000"}),S+=24,B+=24,w+=1}i([...I,...W])}catch(o){console.warn("Не удалось загрузить доску:",o)}})()},[i]),l.useEffect(()=>{let r=!0;return import("@xyflow/react").then(o=>{if(!r)return;const n=(o&&(o.Widget||o.default||o?.widget||o?.XyflowWidget))??null;typeof n=="function"||l.isValidElement(n)?a(()=>n):a(()=>h)}).catch(()=>{r&&a(()=>h)}),()=>{r=!1}},[]);const T=p||h;return e.jsxRuntimeExports.jsx(T,{children:e.jsxRuntimeExports.jsxs("div",{className:"relative flex h-screen w-screen bg-gray-100",children:[e.jsxRuntimeExports.jsxs("div",{className:"flex flex-col",children:[e.jsxRuntimeExports.jsx(u.EmojiToolbar,{}),e.jsxRuntimeExports.jsx(g.ShapeToolbar,{})]}),e.jsxRuntimeExports.jsx(e.Board,{ref:d,nodeTypes:k})]})})};exports.Board=e.Board;exports.EmojiBoardWidget=u.EmojiBoardWidget;exports.emojiNodeTypes=u.emojiNodeTypes;exports.ShapeBoardWidget=g.ShapeBoardWidget;exports.shapeNodeTypes=g.shapeNodeTypes;exports.CombinedBoardWidget=C;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","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
|
|
1
|
+
{"version":3,"file":"index.cjs","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 let ex = 30\n let ey = 30\n let z = 1\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: z,\n stickerId: e.stickerId,\n imageUrl,\n type: 'emoji',\n })\n\n ex += 24\n ey += 24\n z += 1\n }\n\n let sx = 500\n let sy = 30\n let sz = 10000\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: sz,\n fill: 'transparent',\n stroke: '#000',\n })\n\n sx += 24\n sy += 24\n sz += 1\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","z","emojiItems","w","EMOJI_W","h","EMOJI_H","imageUrl","sx","sy","sz","shapeItems","s","r","shapeKey","mounted","mod","candidate","React","Wrapper","jsxs","EmojiToolbar","ShapeToolbar","Board"],"mappings":"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"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
import { u as
|
|
2
|
-
import { e as
|
|
3
|
-
import { E as
|
|
4
|
-
import { s as
|
|
5
|
-
import { S as
|
|
6
|
-
import
|
|
7
|
-
const n = ({ children: d }) => /* @__PURE__ */ o.jsx("div", { children: d }),
|
|
8
|
-
const f =
|
|
9
|
-
...
|
|
10
|
-
...
|
|
1
|
+
import { u as N, j as o, B as O, s as w, a as E, E as v, b as z, c as i, d as C } from "./chunks/Board-C2sVqXKk.js";
|
|
2
|
+
import { e as J, a as R } from "./chunks/EmojiBoardWidget-Dk8VCGyk.js";
|
|
3
|
+
import { E as Y } from "./chunks/EmojiBoardWidget-Dk8VCGyk.js";
|
|
4
|
+
import { s as F, a as U } from "./chunks/ShapeBoardWidget-CURF-esc.js";
|
|
5
|
+
import { S as $ } from "./chunks/ShapeBoardWidget-CURF-esc.js";
|
|
6
|
+
import D, { useRef as K, useState as P, useEffect as k } from "react";
|
|
7
|
+
const n = ({ children: d }) => /* @__PURE__ */ o.jsx("div", { children: d }), V = ({ nodeTypes: d }) => {
|
|
8
|
+
const f = N((s) => s.setStickers), b = K(null), [B, c] = P(() => n), W = {
|
|
9
|
+
...J,
|
|
10
|
+
...F,
|
|
11
11
|
...d || {}
|
|
12
12
|
};
|
|
13
|
-
async function
|
|
13
|
+
async function T(s) {
|
|
14
14
|
if (i && i[s])
|
|
15
15
|
return i[s];
|
|
16
16
|
try {
|
|
17
|
-
const t = await
|
|
17
|
+
const t = await w.getById(s);
|
|
18
18
|
if (t?.name) {
|
|
19
|
-
const a =
|
|
19
|
+
const a = C.find((l) => l.name === t.name);
|
|
20
20
|
if (a)
|
|
21
21
|
return a.url;
|
|
22
22
|
}
|
|
@@ -25,20 +25,20 @@ const n = ({ children: d }) => /* @__PURE__ */ o.jsx("div", { children: d }), H
|
|
|
25
25
|
}
|
|
26
26
|
return "";
|
|
27
27
|
}
|
|
28
|
-
|
|
28
|
+
k(() => {
|
|
29
29
|
(async () => {
|
|
30
30
|
try {
|
|
31
31
|
const [t, a, l] = await Promise.all([
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
]),
|
|
36
|
-
let m = 30, g = 30;
|
|
37
|
-
const
|
|
32
|
+
w.getBoard(),
|
|
33
|
+
E.getAll(),
|
|
34
|
+
E.getBoard()
|
|
35
|
+
]), M = new Map(a.map((e) => [String(e.id), e.shapeId]));
|
|
36
|
+
let m = 30, g = 30, u = 1;
|
|
37
|
+
const x = [];
|
|
38
38
|
for (const e of t) {
|
|
39
|
-
const p = e.width ??
|
|
39
|
+
const p = e.width ?? v, h = e.height ?? z;
|
|
40
40
|
let r = i?.[String(e.stickerId)] ?? "";
|
|
41
|
-
r || (r = await
|
|
41
|
+
r || (r = await T(e.stickerId)), x.push({
|
|
42
42
|
id: e.id,
|
|
43
43
|
x: m,
|
|
44
44
|
y: g,
|
|
@@ -46,65 +46,65 @@ const n = ({ children: d }) => /* @__PURE__ */ o.jsx("div", { children: d }), H
|
|
|
46
46
|
width: p,
|
|
47
47
|
height: h,
|
|
48
48
|
text: "",
|
|
49
|
-
zIndex:
|
|
49
|
+
zIndex: u,
|
|
50
50
|
stickerId: e.stickerId,
|
|
51
51
|
imageUrl: r,
|
|
52
52
|
type: "emoji"
|
|
53
|
-
}), m += 24, g += 24;
|
|
53
|
+
}), m += 24, g += 24, u += 1;
|
|
54
54
|
}
|
|
55
|
-
let
|
|
56
|
-
const
|
|
55
|
+
let y = 500, I = 30, j = 1e4;
|
|
56
|
+
const S = [];
|
|
57
57
|
for (const e of l) {
|
|
58
|
-
const p = e.width ?? 140, h = e.height ?? 140, r = e.rotation ?? 0,
|
|
59
|
-
|
|
58
|
+
const p = e.width ?? 140, h = e.height ?? 140, r = e.rotation ?? 0, _ = M.get(String(e.shapeId)) ?? "square";
|
|
59
|
+
S.push({
|
|
60
60
|
id: e.id,
|
|
61
61
|
stickerId: e.id,
|
|
62
62
|
type: "shape",
|
|
63
|
-
shapeId:
|
|
63
|
+
shapeId: _,
|
|
64
64
|
shapeDbId: e.shapeId,
|
|
65
|
-
x,
|
|
66
|
-
y,
|
|
65
|
+
x: y,
|
|
66
|
+
y: I,
|
|
67
67
|
width: p,
|
|
68
68
|
height: h,
|
|
69
69
|
rotation: r,
|
|
70
|
-
zIndex:
|
|
70
|
+
zIndex: j,
|
|
71
71
|
fill: "transparent",
|
|
72
72
|
stroke: "#000"
|
|
73
|
-
}),
|
|
73
|
+
}), y += 24, I += 24, j += 1;
|
|
74
74
|
}
|
|
75
|
-
f([...
|
|
75
|
+
f([...x, ...S]);
|
|
76
76
|
} catch (t) {
|
|
77
77
|
console.warn("Не удалось загрузить доску:", t);
|
|
78
78
|
}
|
|
79
79
|
})();
|
|
80
|
-
}, [f]),
|
|
80
|
+
}, [f]), k(() => {
|
|
81
81
|
let s = !0;
|
|
82
82
|
return import("@xyflow/react").then((t) => {
|
|
83
83
|
if (!s)
|
|
84
84
|
return;
|
|
85
85
|
const a = (t && (t.Widget || t.default || t?.widget || t?.XyflowWidget)) ?? null;
|
|
86
|
-
typeof a == "function" ||
|
|
86
|
+
typeof a == "function" || D.isValidElement(a) ? c(() => a) : c(() => n);
|
|
87
87
|
}).catch(() => {
|
|
88
88
|
s && c(() => n);
|
|
89
89
|
}), () => {
|
|
90
90
|
s = !1;
|
|
91
91
|
};
|
|
92
92
|
}, []);
|
|
93
|
-
const
|
|
94
|
-
return /* @__PURE__ */ o.jsx(
|
|
93
|
+
const A = B || n;
|
|
94
|
+
return /* @__PURE__ */ o.jsx(A, { children: /* @__PURE__ */ o.jsxs("div", { className: "relative flex h-screen w-screen bg-gray-100", children: [
|
|
95
95
|
/* @__PURE__ */ o.jsxs("div", { className: "flex flex-col", children: [
|
|
96
|
-
/* @__PURE__ */ o.jsx(
|
|
97
|
-
/* @__PURE__ */ o.jsx(
|
|
96
|
+
/* @__PURE__ */ o.jsx(R, {}),
|
|
97
|
+
/* @__PURE__ */ o.jsx(U, {})
|
|
98
98
|
] }),
|
|
99
|
-
/* @__PURE__ */ o.jsx(
|
|
99
|
+
/* @__PURE__ */ o.jsx(O, { ref: b, nodeTypes: W })
|
|
100
100
|
] }) });
|
|
101
101
|
};
|
|
102
102
|
export {
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
103
|
+
O as Board,
|
|
104
|
+
V as CombinedBoardWidget,
|
|
105
|
+
Y as EmojiBoardWidget,
|
|
106
|
+
$ as ShapeBoardWidget,
|
|
107
|
+
J as emojiNodeTypes,
|
|
108
|
+
F as shapeNodeTypes
|
|
109
109
|
};
|
|
110
110
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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
|
|
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 let ex = 30\n let ey = 30\n let z = 1\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: z,\n stickerId: e.stickerId,\n imageUrl,\n type: 'emoji',\n })\n\n ex += 24\n ey += 24\n z += 1\n }\n\n let sx = 500\n let sy = 30\n let sz = 10000\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: sz,\n fill: 'transparent',\n stroke: '#000',\n })\n\n sx += 24\n sy += 24\n sz += 1\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","z","emojiItems","w","EMOJI_W","EMOJI_H","imageUrl","sx","sy","sz","shapeItems","s","shapeKey","mounted","mod","candidate","React","Wrapper","jsxs","EmojiToolbar","ShapeToolbar","Board"],"mappings":"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"}
|