integration-modules 0.1.10 → 0.1.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/README.md +16 -16
  2. package/dist/chunks/{Board-D7raFrnX.js → Board-3Ww5x9rN.js} +22 -22
  3. package/dist/chunks/Board-3Ww5x9rN.js.map +1 -0
  4. package/dist/chunks/{Board-C2sVqXKk.js → Board-snD7KHu1.js} +1694 -1638
  5. package/dist/chunks/Board-snD7KHu1.js.map +1 -0
  6. package/dist/chunks/{EmojiBoardWidget-DpXXIo8W.js → EmojiBoardWidget-af0pUa-V.js} +2 -2
  7. package/dist/chunks/EmojiBoardWidget-af0pUa-V.js.map +1 -0
  8. package/dist/chunks/{EmojiBoardWidget-Dk8VCGyk.js → EmojiBoardWidget-h0XAiqE4.js} +97 -96
  9. package/dist/chunks/EmojiBoardWidget-h0XAiqE4.js.map +1 -0
  10. package/dist/chunks/{ShapeBoardWidget-CURF-esc.js → ShapeBoardWidget-BN5RXzJF.js} +21 -20
  11. package/dist/chunks/ShapeBoardWidget-BN5RXzJF.js.map +1 -0
  12. package/dist/chunks/{ShapeBoardWidget-lQuZw7IG.js → ShapeBoardWidget-Du1LcAr8.js} +2 -2
  13. package/dist/chunks/ShapeBoardWidget-Du1LcAr8.js.map +1 -0
  14. package/dist/emoji/index.cjs +1 -1
  15. package/dist/emoji/index.js +2 -2
  16. package/dist/index.cjs +1 -1
  17. package/dist/index.cjs.map +1 -1
  18. package/dist/index.mjs +5 -5
  19. package/dist/index.mjs.map +1 -1
  20. package/dist/integration-modules.css +1 -1
  21. package/dist/shape/index.cjs +1 -1
  22. package/dist/shape/index.js +1 -1
  23. package/package.json +78 -78
  24. package/dist/chunks/Board-C2sVqXKk.js.map +0 -1
  25. package/dist/chunks/Board-D7raFrnX.js.map +0 -1
  26. package/dist/chunks/EmojiBoardWidget-Dk8VCGyk.js.map +0 -1
  27. package/dist/chunks/EmojiBoardWidget-DpXXIo8W.js.map +0 -1
  28. package/dist/chunks/ShapeBoardWidget-CURF-esc.js.map +0 -1
  29. package/dist/chunks/ShapeBoardWidget-lQuZw7IG.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShapeBoardWidget-BN5RXzJF.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 dragHandle__custom\" 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 +1,2 @@
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,o,h)=>{if(i&&typeof i=="object"||typeof i=="function")for(let r of S(i))!N.call(e,r)&&r!==o&&u(e,r,{get:()=>i[r],enumerable:!(h=W(i,r))||h.enumerable});return e};var A=(e,i,o)=>(o=e!=null?v(B(e)):{},C(i||!e||!e.__esModule?u(o,"default",{value:e,enumerable:!0}):o,e));const t=require("./Board-D7raFrnX.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"})]})},H="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",m=()=>{const[e,i]=a.useState(!1),o=a.useRef(null),h=s=>{s.stopPropagation(),i(x=>!x)};a.useEffect(()=>{if(!e)return;const s=x=>{o.current&&!o.current.contains(x.target)&&i(!1)};return window.addEventListener("pointerdown",s),()=>window.removeEventListener("pointerdown",s)},[e]);const r=s=>x=>{x.stopPropagation(),x.dataTransfer.setData(t.DND_SHAPE,JSON.stringify({shapeId:s.id})),x.dataTransfer.effectAllowed="copy"};return t.jsxRuntimeExports.jsxs("div",{className:"left-toolbar-container dragHandle__custom",ref:o,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?P:H,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:r(s),title:s.name,children:I[s.id]},s.id))})})})]})},E={shape:t.ShapeNode},p=({children:e})=>t.jsxRuntimeExports.jsx("div",{children:e}),T=({nodeTypes:e})=>{const i=t.useStickersStore(c=>c.setStickers),o=a.useRef(null),[h,r]=a.useState(()=>p),s={...E,...e||{}};a.useEffect(()=>{(async()=>{try{const[l,d]=await Promise.all([t.shapesApi.getAll(),t.shapesApi.getBoard()]),R=new Map(l.map(n=>[String(n.id),n.shapeId]));let j=30,k=30;const g=[];for(const n of d){const w=n.width??140,y=n.height??140,b=n.rotation??0,f=R.get(String(n.shapeId))??"square";g.push({id:n.id,stickerId:n.id,type:"shape",shapeId:f,shapeDbId:n.shapeId,x:j,y:k,width:w,height:y,rotation:b,zIndex:1,fill:"transparent",stroke:"#000"}),j+=24,k+=24}i(g)}catch(l){console.warn("Не удалось загрузить доску для фигур:",l)}})()},[i]),a.useEffect(()=>{let c=!0;return import("@xyflow/react").then(l=>{if(!c)return;const d=(l&&(l.Widget||l.default||l?.widget||l?.XyflowWidget))??null;typeof d=="function"||a.isValidElement(d)?r(()=>d):r(()=>p)}).catch(()=>{c&&r(()=>p)}),()=>{c=!1}},[]);const x=h||p;return t.jsxRuntimeExports.jsx(x,{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:o,nodeTypes:s})]})})};exports.ShapeBoardWidget=T;exports.ShapeToolbar=m;exports.shapeNodeTypes=E;
2
- //# sourceMappingURL=ShapeBoardWidget-lQuZw7IG.js.map
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,o,h)=>{if(i&&typeof i=="object"||typeof i=="function")for(let r of S(i))!N.call(e,r)&&r!==o&&u(e,r,{get:()=>i[r],enumerable:!(h=W(i,r))||h.enumerable});return e};var A=(e,i,o)=>(o=e!=null?v(B(e)):{},C(i||!e||!e.__esModule?u(o,"default",{value:e,enumerable:!0}):o,e));const t=require("./Board-3Ww5x9rN.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"})]})},H="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",m=()=>{const[e,i]=a.useState(!1),o=a.useRef(null),h=s=>{s.stopPropagation(),i(x=>!x)};a.useEffect(()=>{if(!e)return;const s=x=>{o.current&&!o.current.contains(x.target)&&i(!1)};return window.addEventListener("pointerdown",s),()=>window.removeEventListener("pointerdown",s)},[e]);const r=s=>x=>{x.stopPropagation(),x.dataTransfer.setData(t.DND_SHAPE,JSON.stringify({shapeId:s.id})),x.dataTransfer.effectAllowed="copy"};return t.jsxRuntimeExports.jsxs("div",{className:"left-toolbar-container dragHandle__custom",ref:o,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?P:H,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:r(s),title:s.name,children:I[s.id]},s.id))})})}),t.jsxRuntimeExports.jsx(t.ShapeNode,{shapeOpen:e})]})},E={shape:t.ShapeNode},p=({children:e})=>t.jsxRuntimeExports.jsx("div",{children:e}),T=({nodeTypes:e})=>{const i=t.useStickersStore(d=>d.setStickers),o=a.useRef(null),[h,r]=a.useState(()=>p),s={...E,...e||{}};a.useEffect(()=>{(async()=>{try{const[l,c]=await Promise.all([t.shapesApi.getAll(),t.shapesApi.getBoard()]),R=new Map(l.map(n=>[String(n.id),n.shapeId]));let j=30,k=30;const g=[];for(const n of c){const w=n.width??140,y=n.height??140,b=n.rotation??0,f=R.get(String(n.shapeId))??"square";g.push({id:n.id,stickerId:n.id,type:"shape",shapeId:f,shapeDbId:n.shapeId,x:j,y:k,width:w,height:y,rotation:b,zIndex:1,fill:"transparent",stroke:"#000"}),j+=24,k+=24}i(g)}catch(l){console.warn("Не удалось загрузить доску для фигур:",l)}})()},[i]),a.useEffect(()=>{let d=!0;return import("@xyflow/react").then(l=>{if(!d)return;const c=(l&&(l.Widget||l.default||l?.widget||l?.XyflowWidget))??null;typeof c=="function"||a.isValidElement(c)?r(()=>c):r(()=>p)}).catch(()=>{d&&r(()=>p)}),()=>{d=!1}},[]);const x=h||p;return t.jsxRuntimeExports.jsx(x,{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:o,nodeTypes:s})]})})};exports.ShapeBoardWidget=T;exports.ShapeToolbar=m;exports.shapeNodeTypes=E;
2
+ //# sourceMappingURL=ShapeBoardWidget-Du1LcAr8.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShapeBoardWidget-Du1LcAr8.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 dragHandle__custom\" 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","h","r","shapeKey","mounted","mod","candidate","React","Wrapper","Board"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("../chunks/Board-D7raFrnX.js");const e=require("../chunks/EmojiBoardWidget-DpXXIo8W.js");exports.EmojiBoardWidget=e.EmojiBoardWidget;exports.emojiNodeTypes=e.emojiNodeTypes;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("../chunks/Board-3Ww5x9rN.js");const e=require("../chunks/EmojiBoardWidget-af0pUa-V.js");exports.EmojiBoardWidget=e.EmojiBoardWidget;exports.emojiNodeTypes=e.emojiNodeTypes;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1,5 +1,5 @@
1
- import "../chunks/Board-C2sVqXKk.js";
2
- import { E as m, e as r } from "../chunks/EmojiBoardWidget-Dk8VCGyk.js";
1
+ import "../chunks/Board-snD7KHu1.js";
2
+ import { E as m, e as r } from "../chunks/EmojiBoardWidget-h0XAiqE4.js";
3
3
  export {
4
4
  m as EmojiBoardWidget,
5
5
  r as emojiNodeTypes
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
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;
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-3Ww5x9rN.js"),u=require("./chunks/EmojiBoardWidget-af0pUa-V.js"),g=require("./chunks/ShapeBoardWidget-Du1LcAr8.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
@@ -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 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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"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/widgets/CombinedBoardWidget.jsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react'\r\nimport { EmojiToolbar } from '../components/EmojiToolbar.jsx'\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 { stickersApi } from '../shared/api/stickerApi.js'\r\nimport { shapesApi } from '../shared/api/shapesApi.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\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 CombinedBoardWidget = ({ 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 ...shapeNodeTypes,\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, allShapes, boardShapes] = await Promise.all([\r\n stickersApi.getBoard(),\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 ex = 30\r\n let ey = 30\r\n let z = 1\r\n const emojiItems = []\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 imageUrl = await getEmojiUrlForStickerId(e.stickerId)\r\n }\r\n\r\n emojiItems.push({\r\n id: e.id,\r\n x: ex,\r\n y: ey,\r\n color: 'transparent',\r\n width: w,\r\n height: h,\r\n text: '',\r\n zIndex: z,\r\n stickerId: e.stickerId,\r\n imageUrl,\r\n type: 'emoji',\r\n })\r\n\r\n ex += 24\r\n ey += 24\r\n z += 1\r\n }\r\n\r\n let sx = 500\r\n let sy = 30\r\n let sz = 10000\r\n const shapeItems = []\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 const shapeKey = shapeKeyByDbId.get(String(s.shapeId)) ?? 'square'\r\n\r\n shapeItems.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: sx,\r\n y: sy,\r\n width: w,\r\n height: h,\r\n rotation: r,\r\n zIndex: sz,\r\n fill: 'transparent',\r\n stroke: '#000',\r\n })\r\n\r\n sx += 24\r\n sy += 24\r\n sz += 1\r\n }\r\n\r\n setStickers([...emojiItems, ...shapeItems])\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 () => {\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 <div className=\"flex flex-col\">\r\n <EmojiToolbar />\r\n <ShapeToolbar />\r\n </div>\r\n <Board ref={boardRef} nodeTypes={mergedNodeTypes} />\r\n </div>\r\n </Wrapper>\r\n )\r\n}\r\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":"ksBAYMA,EAAqB,CAAC,CAAE,SAAAC,KAAeC,EAAAA,kBAAAA,IAAC,OAAK,SAAAD,EAAS,EAU/CE,EAAsB,CAAC,CAAE,UAAAC,KAAgB,CAClD,MAAMC,EAAcC,EAAAA,iBAAkBC,GAAUA,EAAM,WAAW,EAC3DC,EAAWC,EAAAA,OAAO,IAAI,EACtB,CAACC,EAAYC,CAAa,EAAIC,EAAAA,SAAS,IAAMZ,CAAkB,EAE/Da,EAAkB,CACpB,GAAGC,EAAAA,eACH,GAAGC,EAAAA,eACH,GAAIX,GAAa,CAAA,CAAC,EAGtB,eAAeY,EAAwBC,EAAW,CAC9C,GAAIC,EAAAA,WAAaA,YAAUD,CAAS,EAChC,OAAOC,EAAAA,UAAUD,CAAS,EAG9B,GAAI,CACA,MAAME,EAAO,MAAMC,cAAY,QAAQH,CAAS,EAChD,GAAIE,GAAM,KAAM,CACZ,MAAME,EAAQC,EAAAA,cAAc,KAAMC,GAAMA,EAAE,OAASJ,EAAK,IAAI,EAC5D,GAAIE,EACA,OAAOA,EAAM,GAErB,CACJ,OAASG,EAAK,CACV,QAAQ,KAAK,iDAAkDA,CAAG,CACtE,CAEA,MAAO,EACX,CAEAC,EAAAA,UAAU,IAAM,EACM,SAAY,CAC1B,GAAI,CACA,KAAM,CAACC,EAAaC,EAAWC,CAAW,EAAI,MAAM,QAAQ,IAAI,CAC5DR,EAAAA,YAAY,SAAA,EACZS,EAAAA,UAAU,OAAA,EACVA,EAAAA,UAAU,SAAA,CAAS,CACtB,EAEKC,EAAiB,IAAI,IAAIH,EAAU,IAAKI,GAAM,CAAC,OAAOA,EAAE,EAAE,EAAGA,EAAE,OAAO,CAAC,CAAC,EAE9E,IAAIC,EAAK,GACLC,EAAK,GACLC,EAAI,EACR,MAAMC,EAAa,CAAA,EAEnB,UAAWZ,KAAKG,EAAa,CACzB,MAAMU,EAAIb,EAAE,OAASc,EAAAA,QACfC,EAAIf,EAAE,QAAUgB,EAAAA,QAEtB,IAAIC,EAAWtB,EAAAA,YAAY,OAAOK,EAAE,SAAS,CAAC,GAAK,GAC9CiB,IACDA,EAAW,MAAMxB,EAAwBO,EAAE,SAAS,GAGxDY,EAAW,KAAK,CACZ,GAAIZ,EAAE,GACN,EAAGS,EACHC,EACA,MAAO,cACP,MAAOG,EACP,OAAQE,EACR,KAAM,GACN,OAAQJ,EACR,UAAWX,EAAE,UACb,SAAAiB,EACA,KAAM,OAAA,CACT,EAEDR,GAAM,GACNC,GAAM,GACNC,GAAK,CACT,CAEA,IAAIO,EAAK,IACLC,EAAK,GACLC,EAAK,IACT,MAAMC,EAAa,CAAA,EAEnB,UAAWC,KAAKjB,EAAa,CACzB,MAAMQ,EAAIS,EAAE,OAAS,IACfP,EAAIO,EAAE,QAAU,IAChBC,EAAID,EAAE,UAAY,EAClBE,EAAWjB,EAAe,IAAI,OAAOe,EAAE,OAAO,CAAC,GAAK,SAE1DD,EAAW,KAAK,CACZ,GAAIC,EAAE,GACN,UAAWA,EAAE,GACb,KAAM,QACN,QAASE,EACT,UAAWF,EAAE,QACb,EAAGJ,EACH,EAAGC,EACH,MAAON,EACP,OAAQE,EACR,SAAUQ,EACV,OAAQH,EACR,KAAM,cACN,OAAQ,MAAA,CACX,EAEDF,GAAM,GACNC,GAAM,GACNC,GAAM,CACV,CAEAtC,EAAY,CAAC,GAAG8B,EAAY,GAAGS,CAAU,CAAC,CAC9C,OAASrB,EAAG,CACR,QAAQ,KAAK,8BAA+BA,CAAC,CACjD,CACJ,GAEA,CACJ,EAAG,CAAClB,CAAW,CAAC,EAEhBoB,EAAAA,UAAU,IAAM,CACZ,IAAIuB,EAAU,GAEd,cAAO,eAAe,EACjB,KAAMC,GAAQ,CACX,GAAI,CAACD,EACD,OAGJ,MAAME,GAAaD,IAAQA,EAAI,QAAUA,EAAI,SAAWA,GAAK,QAAUA,GAAK,gBAAkB,KAC1F,OAAOC,GAAc,YAAcC,EAAM,eAAeD,CAAS,EACjEvC,EAAc,IAAMuC,CAAS,EAE7BvC,EAAc,IAAMX,CAAkB,CAE9C,CAAC,EACA,MAAM,IAAM,CACLgD,GACArC,EAAc,IAAMX,CAAkB,CAE9C,CAAC,EAEE,IAAM,CACTgD,EAAU,EACd,CACJ,EAAG,CAAA,CAAE,EAEL,MAAMI,EAAU1C,GAAcV,EAE9B,OACIE,EAAAA,kBAAAA,IAACkD,EAAA,CACG,SAAAC,EAAAA,kBAAAA,KAAC,MAAA,CAAI,UAAU,8CACX,SAAA,CAAAA,EAAAA,kBAAAA,KAAC,MAAA,CAAI,UAAU,gBACX,SAAA,CAAAnD,EAAAA,kBAAAA,IAACoD,EAAAA,aAAA,EAAa,0BACbC,EAAAA,aAAA,CAAA,CAAa,CAAA,EAClB,EACArD,EAAAA,kBAAAA,IAACsD,EAAAA,MAAA,CAAM,IAAKhD,EAAU,UAAWK,CAAA,CAAiB,CAAA,CAAA,CACtD,CAAA,CACJ,CAER"}
package/dist/index.mjs CHANGED
@@ -1,8 +1,8 @@
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";
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-snD7KHu1.js";
2
+ import { e as J, a as R } from "./chunks/EmojiBoardWidget-h0XAiqE4.js";
3
+ import { E as Y } from "./chunks/EmojiBoardWidget-h0XAiqE4.js";
4
+ import { s as F, a as U } from "./chunks/ShapeBoardWidget-BN5RXzJF.js";
5
+ import { S as $ } from "./chunks/ShapeBoardWidget-BN5RXzJF.js";
6
6
  import D, { useRef as K, useState as P, useEffect as k } from "react";
7
7
  const n = ({ children: d }) => /* @__PURE__ */ o.jsx("div", { children: d }), V = ({ nodeTypes: d }) => {
8
8
  const f = N((s) => s.setStickers), b = K(null), [B, c] = P(() => n), W = {
@@ -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 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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"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/widgets/CombinedBoardWidget.jsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react'\r\nimport { EmojiToolbar } from '../components/EmojiToolbar.jsx'\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 { stickersApi } from '../shared/api/stickerApi.js'\r\nimport { shapesApi } from '../shared/api/shapesApi.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\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 CombinedBoardWidget = ({ 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 ...shapeNodeTypes,\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, allShapes, boardShapes] = await Promise.all([\r\n stickersApi.getBoard(),\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 ex = 30\r\n let ey = 30\r\n let z = 1\r\n const emojiItems = []\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 imageUrl = await getEmojiUrlForStickerId(e.stickerId)\r\n }\r\n\r\n emojiItems.push({\r\n id: e.id,\r\n x: ex,\r\n y: ey,\r\n color: 'transparent',\r\n width: w,\r\n height: h,\r\n text: '',\r\n zIndex: z,\r\n stickerId: e.stickerId,\r\n imageUrl,\r\n type: 'emoji',\r\n })\r\n\r\n ex += 24\r\n ey += 24\r\n z += 1\r\n }\r\n\r\n let sx = 500\r\n let sy = 30\r\n let sz = 10000\r\n const shapeItems = []\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 const shapeKey = shapeKeyByDbId.get(String(s.shapeId)) ?? 'square'\r\n\r\n shapeItems.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: sx,\r\n y: sy,\r\n width: w,\r\n height: h,\r\n rotation: r,\r\n zIndex: sz,\r\n fill: 'transparent',\r\n stroke: '#000',\r\n })\r\n\r\n sx += 24\r\n sy += 24\r\n sz += 1\r\n }\r\n\r\n setStickers([...emojiItems, ...shapeItems])\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 () => {\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 <div className=\"flex flex-col\">\r\n <EmojiToolbar />\r\n <ShapeToolbar />\r\n </div>\r\n <Board ref={boardRef} nodeTypes={mergedNodeTypes} />\r\n </div>\r\n </Wrapper>\r\n )\r\n}\r\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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"}