drawui-react 0.4.0 → 0.4.1

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/README.md CHANGED
@@ -59,6 +59,16 @@ export function App() {
59
59
 
60
60
  ## 更新日志
61
61
 
62
+ ### v0.4.1
63
+
64
+ - 📊 **新增「表格」图形与完整编辑体验**:工具栏独立「表格」按钮 + 8×6 选择器插入;选中后浮出**表格悬浮工具条**(插入 / 删除行列、合并 / 拆分单元格),双击单元格进入就地编辑。
65
+ - **飞书式选区**:表格内拖拽 = 框选单元格(拖到表格外自动扩成整行 / 整列),只有左上角六点把手能拖动整张表;选区浅蓝高亮,点合并块内任意一格即选中整块。
66
+ - **插入 / 删除可指定位置**:主体按钮 = 下方 / 右侧插入,箭头展开「上方 / 下方 / 左侧 / 右侧」位置菜单;删除作用于选区覆盖的所有行列,且只占一步撤销。
67
+ - **文字自动换行 + 行高按内容增高**:就地编辑框改为自动增高的 textarea,编辑时的折行与画布、SVG 导出完全一致。
68
+ - ✨ **体验优化**:网格线对齐物理像素(非 100% 缩放不再「发花」);悬停全文提示只在文字被截断时弹出;撤销粒度修正为「一个编辑会话 = 一步」;界面文字不再被拖蓝选中复制;工具栏下拉 / 弹层层级高于画布浮层,不再被样式面板盖住。
69
+ - 🐞 **UML 修复**:行文字统一由 `drawui-core` 的 `uml.ts` 生成(画布 / 导出 / 尺寸同源);整行可自由删除(含可见性符号),删空即空白;就地编辑不再「删到冒号就删不动」。
70
+ - 📦 依赖的 `drawui-core` 同步升级到 `0.4.1`。
71
+
62
72
  ### v0.4.0
63
73
 
64
74
  - 💾 **工具栏新增「导出数据 / 导入数据」**:把完整文档(图形 + 相机 + 版本号)存成 JSON,下次导入即可继续绘制;导入成功提示「已恢复 N 个图形」,导入失败(选错文件 / 格式不对)显示红色 ✕ 提示,不再无声无息(基于 `drawui-core` 的 `exportJSON` / `importJSON`)。
@@ -205,6 +215,16 @@ export function App() {
205
215
 
206
216
  ## Changelog
207
217
 
218
+ ### v0.4.1
219
+
220
+ - 📊 **New `table` shape with a full editing experience**: a dedicated toolbar button with an 8×6 picker inserts a table; selecting it reveals a **floating table toolbar** (insert / delete rows & columns, merge / split cells), and double-clicking a cell opens the in-place editor.
221
+ - **Feishu-style selection**: dragging inside the table selects a cell range (dragging past the edge extends it to full rows / columns); only the six-dot handle at the top-left moves the whole table. The selection is highlighted in light blue and clicking any cell inside a merged block selects the entire block.
222
+ - **Insert / delete at a chosen position**: the main button inserts below / to the right, the caret opens a position menu (above / below / left / right); deletion applies to every row / column covered by the selection and costs a single undo step.
223
+ - **Text wraps and rows grow to fit**: the in-place editor is now an auto-growing textarea whose wrapping matches the canvas and the SVG export exactly.
224
+ - ✨ **Experience polish**: grid lines snap to physical pixels (no more moiré at non-100% zoom); the hover "full text" tooltip only shows when the text is actually truncated; undo granularity is now "one editing session = one step"; UI text can no longer be selected / copied by dragging; toolbar dropdowns now sit above canvas overlays instead of being covered by the style panel.
225
+ - 🐞 **UML fixes**: row text comes solely from `uml.ts` in `drawui-core` (canvas, export and sizing share one source); a row can be deleted freely — visibility marker included — and stays empty once cleared; in-place editing no longer gets stuck at the colon.
226
+ - 📦 Bundled `drawui-core` is bumped to `0.4.1`.
227
+
208
228
  ### v0.4.0
209
229
 
210
230
  - 💾 **New "Export data / Import data" toolbar actions**: save the full document (shapes + camera + version) as JSON and import it later to keep drawing. Successful import shows "restored N shapes"; a wrong file / bad format shows a red ✕ failure toast — no more silent no-ops (backed by `exportJSON` / `importJSON` from `drawui-core`).
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- 'use strict';var react=require('react'),drawuiCore=require('drawui-core'),jsxRuntime=require('react/jsx-runtime');function G(){let[o,e]=react.useState(drawuiCore.getLanguage());return react.useEffect(()=>drawuiCore.subscribeLanguage(()=>e(drawuiCore.getLanguage())),[]),o}var no=["#ffeb3b","#22c55e","#3b82f6","#ec4899","#8b5cf6","#f97316"],ro="drawui:highlighterColor";function ht(){if(typeof window>"u")return drawuiCore.DEFAULT_HIGHLIGHTER_COLOR;try{let o=window.localStorage.getItem(ro);return o&&/^#[0-9a-fA-F]{6}$/.test(o)?o.toLowerCase():drawuiCore.DEFAULT_HIGHLIGHTER_COLOR}catch{return drawuiCore.DEFAULT_HIGHLIGHTER_COLOR}}function ao(o){if(!(typeof window>"u"))try{window.localStorage.setItem(ro,o);}catch{}}var so="drawui:stickyNoteColor";function yt(){if(typeof window>"u")return drawuiCore.STICKY_NOTE_DEFAULT_COLOR;try{let o=window.localStorage.getItem(so);return o&&/^#[0-9a-fA-F]{6}$/.test(o)?o.toLowerCase():drawuiCore.STICKY_NOTE_DEFAULT_COLOR}catch{return drawuiCore.STICKY_NOTE_DEFAULT_COLOR}}function lo(o){if(!(typeof window>"u"))try{window.localStorage.setItem(so,o);}catch{}}function Jo({icon:o,size:e=24,ink:n=drawuiCore.ICON_DEFAULT_INK}){return jsxRuntime.jsxs("svg",{viewBox:`0 0 ${drawuiCore.ICON_GRID} ${drawuiCore.ICON_GRID}`,width:e,height:e,fill:"none","aria-hidden":"true",children:[o.disc&&jsxRuntime.jsx("circle",{cx:drawuiCore.ICON_GRID/2,cy:drawuiCore.ICON_GRID/2,r:drawuiCore.ICON_GRID/2-1,fill:o.disc}),o.layers.map((r,h)=>{let d=r.fill??"ink",s=r.stroke??"ink";return jsxRuntime.jsx("path",{d:r.d,fill:d==="none"?"none":d==="ink"?n:d,...s==="none"?{}:{stroke:s==="ink"?n:s,strokeWidth:r.w??1.8,strokeLinecap:"round",strokeLinejoin:"round"}},h)}),o.label&&jsxRuntime.jsx("text",{x:drawuiCore.ICON_GRID/2,y:drawuiCore.ICON_GRID/2+.5,textAnchor:"middle",dominantBaseline:"central",fontFamily:"sans-serif",fontSize:o.label.size??13,fill:o.label.color,children:o.label.text})]})}var yo="drawui:recentIcons",fo=12;function At(o,e){let n=/^#?([0-9a-f]{6})$/i.exec(o.trim());if(!n)return o;let r=parseInt(n[1],16);return `rgba(${r>>16&255}, ${r>>8&255}, ${r&255}, ${e})`}function Qo(){if(typeof window>"u")return [];try{let o=JSON.parse(window.localStorage.getItem(yo)||"[]");return Array.isArray(o)?o.filter(e=>typeof e=="string").slice(0,fo):[]}catch{return []}}function en(o){if(!(typeof window>"u"))try{window.localStorage.setItem(yo,JSON.stringify(o));}catch{}}var ho=o=>({"--dw-icon-cat":o,"--dw-icon-cat-soft":At(o,.12)}),mo=react.memo(function({onPick:e,onClose:n}){G();let[r,h]=react.useState(""),[d,s]=react.useState(drawuiCore.ICON_CATEGORIES[0].id),[l,S]=react.useState(Qo),f=react.useRef(null),u=react.useRef(null);react.useEffect(()=>{u.current?.focus();},[]),react.useEffect(()=>{let p=L=>{let se=f.current;se&&(se.contains(L.target)||L.target?.closest?.("[data-icon-toggle]")||n());},A=L=>{L.key==="Escape"&&(L.stopPropagation(),n());};return window.addEventListener("pointerdown",p),window.addEventListener("keydown",A),()=>{window.removeEventListener("pointerdown",p),window.removeEventListener("keydown",A);}},[n]);let w=react.useMemo(()=>l.map(p=>drawuiCore.getIcon(p)).filter(p=>!!p),[l]),I=react.useMemo(()=>r.trim()?drawuiCore.searchIcons(r):d==="recent"?w:drawuiCore.iconsByCategory(d),[r,d,w]),z=d==="recent"?drawuiCore.ICON_CATEGORY_INK.status:drawuiCore.ICON_CATEGORY_INK[d]??drawuiCore.ICON_DEFAULT_INK,C=r.trim()?drawuiCore.t("icon.search"):d==="recent"?drawuiCore.t("icon.recent"):drawuiCore.t(drawuiCore.ICON_CATEGORIES.find(p=>p.id===d)?.labelKey??"icon.search"),B=p=>{e(p),S(A=>{let L=[p.id,...A.filter(se=>se!==p.id)].slice(0,fo);return en(L),L});};return jsxRuntime.jsxs("div",{className:"drawui-icon-panel",ref:f,style:{"--dw-icon-accent":z,"--dw-icon-soft":At(z,.08),"--dw-icon-ring":At(z,.22)},children:[jsxRuntime.jsxs("label",{className:"drawui-icon-search",children:[jsxRuntime.jsxs("svg",{viewBox:"0 0 24 24",width:"15",height:"15",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",children:[jsxRuntime.jsx("circle",{cx:"10.5",cy:"10.5",r:"6.5"}),jsxRuntime.jsx("path",{d:"M15.4 15.4L20 20"})]}),jsxRuntime.jsx("input",{ref:u,value:r,onChange:p=>h(p.target.value),onKeyDown:p=>{p.key==="Enter"&&I.length>0&&B(I[0]);},placeholder:drawuiCore.t("icon.search"),"aria-label":drawuiCore.t("icon.search")}),jsxRuntime.jsx("span",{className:"drawui-icon-count",children:I.length})]}),!r.trim()&&jsxRuntime.jsxs("div",{className:"drawui-icon-cats",children:[w.length>0&&jsxRuntime.jsxs("button",{type:"button",className:`drawui-icon-cat${d==="recent"?" active":""}`,style:ho(drawuiCore.ICON_CATEGORY_INK.status),onClick:()=>s("recent"),children:[jsxRuntime.jsx("i",{className:"drawui-icon-dot"}),drawuiCore.t("icon.recent")]}),drawuiCore.ICON_CATEGORIES.map(p=>jsxRuntime.jsxs("button",{type:"button",className:`drawui-icon-cat${d===p.id?" active":""}`,style:ho(drawuiCore.ICON_CATEGORY_INK[p.id]??drawuiCore.ICON_DEFAULT_INK),onClick:()=>s(p.id),children:[jsxRuntime.jsx("i",{className:"drawui-icon-dot"}),drawuiCore.t(p.labelKey)]},p.id))]}),jsxRuntime.jsxs("div",{className:"drawui-icon-card",children:[jsxRuntime.jsxs("div",{className:"drawui-icon-card-head",children:[jsxRuntime.jsx("span",{className:"drawui-icon-card-title",children:C}),jsxRuntime.jsx("span",{className:"drawui-icon-card-count",children:I.length})]}),jsxRuntime.jsxs("div",{className:"drawui-icon-grid",children:[I.map(p=>jsxRuntime.jsx("button",{type:"button",className:"drawui-icon-item",title:`${p.zh} / ${p.en}`,"aria-label":`${p.zh} ${p.en}`,onClick:()=>B(p),children:jsxRuntime.jsx(Jo,{icon:p,size:30,ink:drawuiCore.iconInk(p)})},p.id)),I.length===0&&jsxRuntime.jsx("div",{className:"drawui-icon-empty",children:drawuiCore.t("icon.empty")})]})]})]})});var Ce=o=>`${o.x.toFixed(1)},${o.y.toFixed(1)}`,go=(o,e)=>{let n=e*Math.PI/180;return {x:o.x*Math.cos(n)-o.y*Math.sin(n),y:o.x*Math.sin(n)+o.y*Math.cos(n)}},ot={x:Math.SQRT1_2,y:-Math.SQRT1_2},$t={x:4.6,y:19.4},st={x:19,y:5};function Dt(o,e,n){let r={x:-n.y,y:n.x},h=s=>({x:e.x-n.x*s,y:e.y-n.y*s}),d=(s,l)=>({x:s.x+r.x*l,y:s.y+r.y*l});switch(o){case "end":{let s=h(5.6);return jsxRuntime.jsx("polygon",{points:`${Ce(e)} ${Ce(d(s,2.7))} ${Ce(d(s,-2.7))}`,fill:"currentColor",stroke:"none"})}case "inheritance":case "realization":{let s=h(8.6);return jsxRuntime.jsx("polygon",{points:`${Ce(e)} ${Ce(d(s,3.5))} ${Ce(d(s,-3.5))}`,fill:"none"})}case "aggregation":case "composition":{let s=h(4.3),l=h(8.6);return jsxRuntime.jsx("polygon",{points:`${Ce(e)} ${Ce(d(s,2.7))} ${Ce(l)} ${Ce(d(s,-2.7))}`,fill:o==="composition"?"currentColor":"none",stroke:"currentColor"})}case "dependency":{let s=go({x:-n.x,y:-n.y},30),l=go({x:-n.x,y:-n.y},-30);return jsxRuntime.jsx("path",{d:`M ${Ce({x:e.x+s.x*5.8,y:e.y+s.y*5.8})} L ${Ce(e)} L ${Ce({x:e.x+l.x*5.8,y:e.y+l.y*5.8})}`,fill:"none"})}default:return null}}function Ie(o,e){let n=e||o==="dependency"||o==="realization",r=n?{x:st.x-ot.x*8.6,y:st.y-ot.y*8.6}:st,h={x:-ot.x,y:-ot.y};return jsxRuntime.jsxs("svg",{viewBox:"0 0 24 24",width:"18",height:"18",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntime.jsx("line",{x1:$t.x,y1:$t.y,x2:r.x,y2:r.y,strokeDasharray:n?"3 2.6":void 0}),(o==="end"||o==="both")&&Dt("end",st,ot),(o==="start"||o==="both")&&Dt("end",$t,h),o!=="none"&&o!=="start"&&o!=="end"&&o!=="both"?Dt(o,st,ot):null]})}var mt=o=>jsxRuntime.jsx("svg",{viewBox:"0 0 24 24",width:"18",height:"18",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:jsxRuntime.jsx("path",{d:o})}),on=[{type:"straight",labelKey:"style.connection.straight",icon:mt("M3 12h18")},{type:"polyline",labelKey:"style.connection.polyline",icon:mt("M4 8 C 12 8, 12 16, 20 16")},{type:"orthogonal",labelKey:"style.connection.orthogonal",icon:mt("M5 5v14h14")},{type:"curve",labelKey:"style.connection.curve",icon:mt("M3 13 C 6 7, 9 7, 12 12 C 15 17, 18 17, 21 11")}],wo=[{key:"none",arrowHead:"none",dashed:false,labelKey:"style.arrowhead.none",icon:Ie("none",false)},{key:"end",arrowHead:"end",dashed:false,labelKey:"style.arrowhead.end",icon:Ie("end",false)},{key:"start",arrowHead:"start",dashed:false,labelKey:"style.arrowhead.start",icon:Ie("start",false)},{key:"both",arrowHead:"both",dashed:false,labelKey:"style.arrowhead.both",icon:Ie("both",false)},{key:"none-dashed",arrowHead:"none",dashed:true,labelKey:"style.arrowhead.none-dashed",icon:Ie("none",true)},{key:"both-dashed",arrowHead:"both",dashed:true,labelKey:"style.arrowhead.both-dashed",icon:Ie("both",true)}],xo=[{key:"inheritance",arrowHead:"inheritance",dashed:false,labelKey:"style.arrowhead.inheritance",icon:Ie("inheritance",false)},{key:"composition",arrowHead:"composition",dashed:false,labelKey:"style.arrowhead.composition",icon:Ie("composition",false)},{key:"aggregation",arrowHead:"aggregation",dashed:false,labelKey:"style.arrowhead.aggregation",icon:Ie("aggregation",false)},{key:"dependency",arrowHead:"dependency",dashed:true,labelKey:"style.arrowhead.dependency",icon:Ie("dependency",true)},{key:"realization",arrowHead:"realization",dashed:true,labelKey:"style.arrowhead.realization",icon:Ie("realization",true)}],bo=[...wo,...xo];function nn(o,e){let n=bo.find(r=>r.arrowHead===o&&r.dashed===e);return n?n.key:bo.find(r=>r.arrowHead===o)?.key}var bt=react.memo(function({connectionType:e,arrowHead:n,dashed:r,onConnectionTypeChange:h,onArrowStyleChange:d,onOptionHover:s,onOptionLeave:l}){G();let S=nn(n,r),f=u=>jsxRuntime.jsx("div",{className:"drawui-connection-row",children:u.map(w=>jsxRuntime.jsxs("button",{className:`drawui-connection-btn${S===w.key?" active":""}`,onClick:()=>d(w),"data-drawui-tip":s?void 0:drawuiCore.t(w.labelKey),onMouseEnter:s?I=>s(w.labelKey,I.currentTarget):void 0,onMouseLeave:s?l:void 0,"aria-label":drawuiCore.t(w.labelKey),type:"button",children:[jsxRuntime.jsx("span",{className:"drawui-connection-icon",children:w.icon}),jsxRuntime.jsx("span",{className:"drawui-connection-label",children:drawuiCore.t(w.labelKey)})]},w.key))});return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("div",{className:"drawui-style-popover-title",children:drawuiCore.t("style.connection")}),jsxRuntime.jsx("div",{className:"drawui-connection-row",children:on.map(u=>jsxRuntime.jsxs("button",{className:`drawui-connection-btn${e===u.type?" active":""}`,onClick:()=>h(u.type),"data-drawui-tip":s?void 0:drawuiCore.t(u.labelKey),onMouseEnter:s?w=>s(u.labelKey,w.currentTarget):void 0,onMouseLeave:s?l:void 0,"aria-label":drawuiCore.t(u.labelKey),type:"button",children:[jsxRuntime.jsx("span",{className:"drawui-connection-icon",children:u.icon}),jsxRuntime.jsx("span",{className:"drawui-connection-label",children:drawuiCore.t(u.labelKey)})]},u.type))}),jsxRuntime.jsx("div",{className:"drawui-style-popover-title",children:drawuiCore.t("style.arrow")}),f(wo),jsxRuntime.jsx("div",{className:"drawui-style-popover-title",children:drawuiCore.t("style.uml")}),f(xo)]})});var vo=[{type:"rectangle",icon:jsxRuntime.jsx("rect",{x:"3",y:"5",width:"18",height:"14",rx:"0"})},{type:"rounded-rectangle",icon:jsxRuntime.jsx("rect",{x:"3",y:"5",width:"18",height:"14",rx:"4"})},{type:"circle",icon:jsxRuntime.jsx("circle",{cx:"12",cy:"12",r:"8"})},{type:"ellipse",icon:jsxRuntime.jsx("ellipse",{cx:"12",cy:"12",rx:"9",ry:"6"})},{type:"diamond",icon:jsxRuntime.jsx("path",{d:"M12 3L21 12L12 21L3 12Z"})},{type:"triangle",icon:jsxRuntime.jsx("path",{d:"M12 4L20 19L4 19Z"})},{type:"hexagon",icon:jsxRuntime.jsx("path",{d:"M12 3L20 7.5V16.5L12 21L4 16.5V7.5Z"})},{type:"parallelogram",icon:jsxRuntime.jsx("path",{d:"M7 5L20 5L17 19L4 19Z"})},{type:"trapezoid",icon:jsxRuntime.jsx("path",{d:"M6 5L18 5L21 19L3 19Z"})},{type:"pentagon",icon:jsxRuntime.jsx("path",{d:"M12 3L21 10L17.5 21L6.5 21L3 10Z"})},{type:"octagon",icon:jsxRuntime.jsx("path",{d:"M8 3L16 3L21 8L21 16L16 21L8 21L3 16L3 8Z"})},{type:"star",icon:jsxRuntime.jsx("path",{d:"M12 2L14.5 8.5L21 9L16 13.5L17.5 20L12 16.5L6.5 20L8 13.5L3 9L9.5 8.5Z"})},{type:"cylinder",icon:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("ellipse",{cx:"12",cy:"6.5",rx:"6",ry:"2.8"}),jsxRuntime.jsx("path",{d:"M6 6.5v11c0 1.5 2.7 2.8 6 2.8s6-1.3 6-2.8v-11"})]})},{type:"cloud",icon:jsxRuntime.jsx("path",{d:"M7 18.5h9.4a3.4 3.4 0 0 0 .3-6.8 5 5 0 0 0-9.5-1.2A3.9 3.9 0 0 0 7 18.5Z"})},{type:"heart",icon:jsxRuntime.jsx("path",{d:"M12 20.3S4.6 15.7 4.6 10.5A4.1 4.1 0 0 1 12 7.6a4.1 4.1 0 0 1 7.4 2.9c0 5.2-7.4 9.8-7.4 9.8Z"})},{type:"block-arrow-right",icon:jsxRuntime.jsx("path",{d:"M3 9h9V5l9 7-9 7v-4H3Z"})},{type:"block-arrow-left",icon:jsxRuntime.jsx("path",{d:"M21 9h-9V5L3 12l9 7v-4h9Z"})},{type:"block-arrow-up",icon:jsxRuntime.jsx("path",{d:"M9 21v-9H5l7-9 7 9h-4v9Z"})},{type:"block-arrow-down",icon:jsxRuntime.jsx("path",{d:"M9 3v9H5l7 9 7-9h-4V3Z"})},{type:"block-arrow-double",icon:jsxRuntime.jsx("path",{d:"M2 12l4.5-6v3.5h11V6L22 12l-4.5 6v-3.5h-11V18Z"})},{type:"right-triangle",icon:jsxRuntime.jsx("path",{d:"M4 4v16h16Z"})},{type:"cross",icon:jsxRuntime.jsx("path",{d:"M9.5 3h5v6.5H21v5h-6.5V21h-5v-6.5H3v-5h6.5Z"})},{type:"envelope",icon:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("rect",{x:"3",y:"5",width:"18",height:"14"}),jsxRuntime.jsx("path",{d:"M3 5l18 14M21 5L3 19"})]})},{type:"checkbox",icon:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("rect",{x:"3",y:"3",width:"18",height:"18",rx:"3"}),jsxRuntime.jsx("path",{d:"M7.8 12.3l2.7 2.7 5.7-6.2"})]})},{type:"speech-rect",icon:jsxRuntime.jsx(jsxRuntime.Fragment,{children:jsxRuntime.jsx("path",{d:"M3 5h18v11H8l-3.2 3.2V16H3Z"})})},{type:"speech-round",icon:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("ellipse",{cx:"12",cy:"10.5",rx:"9",ry:"6.5"}),jsxRuntime.jsx("path",{d:"M8 16.2 6 21l5-3.4"})]})},{type:"cube",icon:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("path",{d:"M12 3 20 7.5v9L12 21 4 16.5v-9Z"}),jsxRuntime.jsx("path",{d:"M4 7.5 12 12l8-4.5M12 12v9"})]})},{type:"cuboid",icon:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("path",{d:"M12 4 21 8.5v7L12 20 3 15.5v-7Z"}),jsxRuntime.jsx("path",{d:"M3 8.5 12 13l9-4.5M12 13v7"})]})},{type:"triangular-pyramid",icon:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("path",{d:"M12 3 21.5 16.5 12 21 2.5 16.5Z"}),jsxRuntime.jsx("path",{d:"M12 3v18M2.5 16.5h19"})]})},{type:"quadrangular-pyramid",icon:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("path",{d:"M12 3 22.5 17 12 21 1.5 17Z"}),jsxRuntime.jsx("path",{d:"M12 3v18M12 12 1.5 17M12 12l10.5 5"})]})},{type:"sphere",icon:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("circle",{cx:"12",cy:"12",r:"9"}),jsxRuntime.jsx("ellipse",{cx:"12",cy:"12",rx:"9",ry:"2.5"})]})},{type:"ellipsoid",icon:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("ellipse",{cx:"12",cy:"12",rx:"10",ry:"6.5"}),jsxRuntime.jsx("ellipse",{cx:"12",cy:"12",rx:"10",ry:"1.9"})]})},{type:"pie",icon:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("ellipse",{cx:"12",cy:"9",rx:"9",ry:"3.5"}),jsxRuntime.jsx("path",{d:"M3 9v5c0 1.9 4 3.5 9 3.5s9-1.6 9-3.5V9"}),jsxRuntime.jsx("path",{d:"M12 9 5.6 12M12 9l6.4 3"})]})},{type:"hollow-pie",icon:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("ellipse",{cx:"12",cy:"9",rx:"9",ry:"3.5"}),jsxRuntime.jsx("path",{d:"M3 9v5c0 1.9 4 3.5 9 3.5s9-1.6 9-3.5V9"}),jsxRuntime.jsx("ellipse",{cx:"12",cy:"9",rx:"3.6",ry:"1.5"})]})},{type:"sector",icon:jsxRuntime.jsx("path",{d:"M12 3a9 9 0 1 0 9 9h-9Z"})},{type:"delay",icon:jsxRuntime.jsx("path",{d:"M3 5h12a7 7 0 0 1 0 14H3Z"})},{type:"predefined-process",icon:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("rect",{x:"3",y:"5",width:"18",height:"14"}),jsxRuntime.jsx("path",{d:"M6.5 5v14M17.5 5v14"})]})},{type:"document",icon:jsxRuntime.jsx("path",{d:"M3 5h18v10.5c-5 3.5-13-3.5-18 0Z"})},{type:"stadium",icon:jsxRuntime.jsx("rect",{x:"3",y:"6.5",width:"18",height:"11",rx:"5.5"})},{type:"chevron",icon:jsxRuntime.jsx("path",{d:"M2 4h9l9 8-9 8H2l8-8Z"})},{type:"brace-left",icon:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("path",{d:"M1 1C3.9 1 5.1 2.4 5.1 5.1c0 3.7 1.2 6.9 2.9 6.9-1.7 0-2.9 3.2-2.9 6.9 0 2.7-1.2 4.1-4.1 4.1"}),jsxRuntime.jsx("path",{d:"M12 9.6h10M12 14.4h10"})]})},{type:"brace-right",icon:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("path",{d:"M23 1c-2.9 0-4.1 1.4-4.1 4.1 0 3.7-1.2 6.9-2.9 6.9 1.7 0 2.9 3.2 2.9 6.9 0 2.7 1.2 4.1 4.1 4.1"}),jsxRuntime.jsx("path",{d:"M2 9.6h10M2 14.4h10"})]})},{type:"uml-class",icon:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("rect",{x:"3",y:"3",width:"18",height:"18",rx:"2"}),jsxRuntime.jsx("line",{x1:"3",y1:"9",x2:"21",y2:"9"}),jsxRuntime.jsx("line",{x1:"3",y1:"15",x2:"21",y2:"15"}),jsxRuntime.jsx("line",{x1:"7",y1:"6",x2:"17",y2:"6"}),jsxRuntime.jsx("line",{x1:"7",y1:"12",x2:"13",y2:"12"}),jsxRuntime.jsx("line",{x1:"7",y1:"18",x2:"11",y2:"18"})]})},{type:"uml-interface",icon:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("rect",{x:"3",y:"3",width:"18",height:"18",rx:"2"}),jsxRuntime.jsx("line",{x1:"3",y1:"9",x2:"21",y2:"9"}),jsxRuntime.jsx("line",{x1:"7",y1:"6",x2:"17",y2:"6"}),jsxRuntime.jsx("line",{x1:"7",y1:"12",x2:"13",y2:"12"})]})},{type:"class-catalog",icon:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("rect",{x:"3",y:"5",width:"18",height:"14",rx:"1.5"}),jsxRuntime.jsx("line",{x1:"6.6",y1:"5",x2:"6.6",y2:"19"}),jsxRuntime.jsx("line",{x1:"17.4",y1:"5",x2:"17.4",y2:"19"})]})}],sn=[{key:"basic",labelKey:"shapeGroup.basic",items:[{type:"rectangle"},{type:"rounded-rectangle"},{type:"stadium"},{type:"circle"},{type:"ellipse"},{type:"diamond"},{type:"triangle"},{type:"right-triangle"},{type:"hexagon"},{type:"parallelogram"},{type:"trapezoid"},{type:"pentagon"},{type:"octagon"},{type:"star"},{type:"envelope"},{type:"checkbox"}]},{key:"flowchart",labelKey:"shapeGroup.flowchart",items:[{type:"rectangle",labelKey:"flow.process"},{type:"rounded-rectangle",labelKey:"flow.step"},{type:"stadium",labelKey:"flow.startEnd"},{type:"diamond",labelKey:"flow.decision"},{type:"parallelogram",labelKey:"flow.data"},{type:"trapezoid",labelKey:"flow.manual"},{type:"hexagon",labelKey:"flow.preparation"},{type:"cylinder",labelKey:"flow.database"},{type:"delay",labelKey:"flow.delay"},{type:"predefined-process"},{type:"document"},{type:"block-arrow-right"},{type:"block-arrow-left"},{type:"block-arrow-up"},{type:"block-arrow-down"},{type:"block-arrow-double"}]},{key:"uml",labelKey:"shapeGroup.uml",items:[{type:"uml-class"},{type:"uml-interface"},{type:"rounded-rectangle",labelKey:"class.plain"},{type:"class-catalog"}]},{key:"solid",labelKey:"shapeGroup.solid",items:[{type:"cylinder"},{type:"cube"},{type:"cuboid"},{type:"triangular-pyramid"},{type:"quadrangular-pyramid"},{type:"sphere"},{type:"ellipsoid"},{type:"pie"},{type:"hollow-pie"}]},{key:"other",labelKey:"shapeGroup.other",items:[{type:"cloud"},{type:"heart"},{type:"cross"},{type:"sector"},{type:"chevron"},{type:"speech-rect"},{type:"speech-round"},{type:"brace-left"},{type:"brace-right"}]}],ln=new Map(vo.map(o=>[o.type,o.icon])),cn=new Set(vo.map(o=>o.type)),dn=jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("path",{d:"M4 4h16v11l-5 5H4Z"}),jsxRuntime.jsx("path",{d:"M20 15h-5v5"})]}),un=[{type:"arrow",icon:"M5 12h14M12 5l7 7-7 7",labelKey:"toolbar.arrow"},{type:"text",icon:"M4 7V4h16v3M9 20h6M12 4v16",labelKey:"toolbar.text"}],pn="M17 3a2.85 2.85 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3Z",zt="M0 -1Q0.24 -0.24 1 0Q0.24 0.24 0 1Q-0.24 0.24 -1 0Q-0.24 -0.24 0 -1Z",hn=[{type:"eraser",icon:"M7 21l-4.3-4.3c-1-1-1-2.5 0-3.4l9.6-9.6c1-1 2.5-1 3.4 0l5.6 5.6c1 1 1 2.5 0 3.4L13 21M22 21H7M5 11l9 9",labelKey:"toolbar.eraser"}],Bt=react.memo(function({activeTool:e,onToolChange:n,showGrid:r,onToggleGrid:h,canUndo:d=false,canRedo:s=false,onUndo:l,onRedo:S,onExport:f,onExportData:u,onImportData:w,onHighlighterColorChange:I,onStickyNoteColorChange:z,onInsertIcon:C,arrowStyle:B,onArrowStyleChange:p}){let[A,L]=react.useState(false),[se,i]=react.useState(false),[x,y]=react.useState(null),[j,O]=react.useState(false),[_,X]=react.useState(false),[de,Q]=react.useState(ht),[fe,b]=react.useState(false),[ee,Le]=react.useState(yt),[re,Me]=react.useState(false),P=react.useRef(null),ue=react.useRef(null),le=react.useRef(null),Se=react.useRef(null),me=react.useRef(null);G();let Ne=[{format:"png",labelKey:"toolbar.export.png"},{format:"svg",labelKey:"toolbar.export.svg"},{format:"pdf",labelKey:"toolbar.export.pdf"}],Re=()=>{P.current&&(clearTimeout(P.current),P.current=null),O(true);},Te=()=>{P.current=window.setTimeout(()=>O(false),200);},$=react.useRef(null),v=()=>{O(false),U(),$.current?.click();},ae=a=>{let N=a.target.files?.[0];N&&w?.(N),a.target.value="";},Y=()=>{ue.current&&(clearTimeout(ue.current),ue.current=null),L(true);},q=()=>{ue.current=window.setTimeout(()=>{L(false),U();},200);},W=()=>{le.current&&(clearTimeout(le.current),le.current=null),i(true);},He=()=>{le.current=window.setTimeout(()=>{i(false),U();},200);},te=(a,N)=>{let pe=a.closest(".drawui-toolbar");if(!pe)return;let ge=a.getBoundingClientRect(),we=pe.getBoundingClientRect(),Ee=ge.bottom+46>window.innerHeight;y({label:N,x:ge.left-we.left+ge.width/2,y:Ee?ge.top-we.top-8:ge.bottom-we.top+8,above:Ee});},U=()=>y(null),ze=()=>{Se.current&&(clearTimeout(Se.current),Se.current=null),X(true);},Ze=()=>{Se.current=window.setTimeout(()=>X(false),200);},g=a=>{Q(a),ao(a),I?.(a),n("highlighter");},R=()=>{me.current&&(clearTimeout(me.current),me.current=null),b(true);},H=()=>{me.current=window.setTimeout(()=>b(false),200);},D=a=>{Le(a),lo(a),z?.(a),n("sticky-note"),b(false);};return jsxRuntime.jsx("div",{className:"drawui-toolbar-container",children:jsxRuntime.jsxs("div",{className:"drawui-toolbar",children:[jsxRuntime.jsx("button",{className:`drawui-toolbar-button ${e==="select"?"active":""}`,onClick:()=>n("select"),onMouseEnter:a=>te(a.currentTarget,"toolbar.select"),onMouseLeave:U,children:jsxRuntime.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:jsxRuntime.jsx("path",{d:"M6 3 6 19.6 10.3 15.7 13 21.1 15.8 19.8 13.1 14.5 18.6 14 Z"})})}),jsxRuntime.jsx("button",{className:`drawui-toolbar-button ${e==="hand"?"active":""}`,onClick:()=>n("hand"),onMouseEnter:a=>te(a.currentTarget,"toolbar.hand"),onMouseLeave:U,children:jsxRuntime.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntime.jsx("path",{d:"M7.6 12.6V5.6a1.5 1.5 0 0 1 3 0v4.6"}),jsxRuntime.jsx("path",{d:"M10.6 10.2V4.1a1.5 1.5 0 0 1 3 0v6.1"}),jsxRuntime.jsx("path",{d:"M13.6 10.4V5.2a1.5 1.5 0 0 1 3 0v6.6"}),jsxRuntime.jsx("path",{d:"M16.6 11.8V8.1a1.5 1.5 0 0 1 3 0v6.6a6.2 6.2 0 0 1-6.2 6.2h-1.5a6.2 6.2 0 0 1-5-2.5l-3.2-4.4a1.5 1.5 0 0 1 2.3-1.9l2.6 2.5"})]})}),jsxRuntime.jsx("div",{className:"drawui-toolbar-divider"}),jsxRuntime.jsxs("div",{className:"drawui-toolbar-dropdown",onMouseEnter:Y,onMouseLeave:q,children:[jsxRuntime.jsx("button",{className:`drawui-toolbar-button ${cn.has(e)?"active":""}`,onClick:()=>{n("rounded-rectangle"),L(false),U();},"data-drawui-tip":A?void 0:drawuiCore.t("toolbar.shapes"),children:jsxRuntime.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:jsxRuntime.jsx("rect",{x:"3",y:"5",width:"18",height:"14",rx:"4",ry:"4"})})}),A&&jsxRuntime.jsx("div",{className:"drawui-toolbar-shape-grid drawui-shape-menu",children:jsxRuntime.jsx("div",{className:"drawui-shape-menu-scroll",children:sn.map(a=>jsxRuntime.jsxs("div",{className:"drawui-shape-group",children:[jsxRuntime.jsx("div",{className:"drawui-shape-group-title",children:drawuiCore.t(a.labelKey)}),jsxRuntime.jsx("div",{className:"drawui-shape-group-grid",children:a.items.map(N=>{let pe=N.labelKey??`tool.${N.type}`;return jsxRuntime.jsx("button",{type:"button",className:`drawui-toolbar-shape-item ${e===N.type?"active":""}`,onClick:()=>{n(N.type),L(false),U();},onMouseEnter:ge=>te(ge.currentTarget,pe),onMouseLeave:U,"aria-label":drawuiCore.t(pe),children:jsxRuntime.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:ln.get(N.type)})},`${a.key}-${N.type}`)})})]},a.key))})})]}),jsxRuntime.jsxs("div",{className:"drawui-toolbar-dropdown",onMouseEnter:R,onMouseLeave:H,children:[jsxRuntime.jsxs("button",{className:`drawui-toolbar-button ${e==="sticky-note"?"active":""}`,onClick:()=>{n("sticky-note"),b(false),U();},"data-drawui-tip":fe?void 0:drawuiCore.t("tool.sticky-note"),children:[jsxRuntime.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:dn}),jsxRuntime.jsx("span",{className:"drawui-toolbar-color-chip",style:{background:ee}})]}),fe&&jsxRuntime.jsxs("div",{className:"drawui-toolbar-shape-grid drawui-sticky-panel",children:[jsxRuntime.jsxs("div",{className:"drawui-sticky-panel-head",children:[jsxRuntime.jsx("span",{className:"drawui-sticky-panel-title",children:drawuiCore.t("tool.sticky-note")}),jsxRuntime.jsx("span",{className:"drawui-sticky-panel-key",children:"N"})]}),jsxRuntime.jsx("div",{className:"drawui-sticky-panel-grid",children:drawuiCore.STICKY_NOTE_COLORS.map(a=>jsxRuntime.jsx("button",{type:"button","aria-label":a,className:`drawui-sticky-swatch${ee.toLowerCase()===a.toLowerCase()?" active":""}`,style:{background:a},onClick:()=>D(a)},a))})]})]}),jsxRuntime.jsxs("div",{className:"drawui-toolbar-dropdown",children:[jsxRuntime.jsx("button",{className:`drawui-toolbar-button ${re?"active":""}`,"data-icon-toggle":"","data-drawui-tip":re?void 0:drawuiCore.t("toolbar.icon"),onClick:()=>{Me(a=>!a),U();},children:jsxRuntime.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntime.jsx("circle",{cx:"12",cy:"12",r:"9"}),jsxRuntime.jsx("path",{d:"M8.5 10.2h0.01"}),jsxRuntime.jsx("path",{d:"M15.5 10.2h0.01"}),jsxRuntime.jsx("path",{d:"M8.8 14.2c0.9 1 2 1.5 3.2 1.5s2.3 -0.5 3.2 -1.5"})]})}),re&&jsxRuntime.jsx(mo,{onPick:a=>C?.(a.id),onClose:()=>Me(false)})]}),jsxRuntime.jsx("div",{className:"drawui-toolbar-divider"}),jsxRuntime.jsxs("div",{className:"drawui-toolbar-dropdown",onMouseEnter:W,onMouseLeave:He,children:[jsxRuntime.jsx("button",{className:`drawui-toolbar-button ${e==="arrow"?"active":""}`,onClick:()=>{n("arrow"),i(false),U();},"data-drawui-tip":se?void 0:drawuiCore.t("toolbar.arrow"),children:jsxRuntime.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:jsxRuntime.jsx("path",{d:"M5 12h14M12 5l7 7-7 7"})})}),se&&jsxRuntime.jsx("div",{className:"drawui-toolbar-shape-grid drawui-arrow-menu",onPointerDown:a=>{a.target.closest("button")||(i(false),U());},children:jsxRuntime.jsx(bt,{connectionType:B?.connectionType??"straight",arrowHead:B?.arrowHead??"end",dashed:!!B?.dashed,onConnectionTypeChange:a=>{p?.({connectionType:a}),n("arrow"),i(false),U();},onArrowStyleChange:a=>{p?.({arrowHead:a.arrowHead,dashed:a.dashed}),n("arrow"),i(false),U();},onOptionHover:(a,N)=>te(N,a),onOptionLeave:U})})]}),un.filter(a=>a.type!=="arrow").map(a=>jsxRuntime.jsx("button",{className:`drawui-toolbar-button ${e===a.type?"active":""}`,onClick:()=>n(a.type),"data-drawui-tip":drawuiCore.t(a.labelKey),children:jsxRuntime.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:jsxRuntime.jsx("path",{d:a.icon})})},a.type)),jsxRuntime.jsx("div",{className:"drawui-toolbar-divider"}),jsxRuntime.jsx("button",{className:`drawui-toolbar-button ${e==="pen"?"active":""}`,onClick:()=>n("pen"),"data-drawui-tip":drawuiCore.t("toolbar.pen"),children:jsxRuntime.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:jsxRuntime.jsx("path",{d:pn})})}),jsxRuntime.jsxs("div",{className:"drawui-toolbar-dropdown",onMouseEnter:ze,onMouseLeave:Ze,children:[jsxRuntime.jsxs("button",{className:`drawui-toolbar-button ${e==="highlighter"?"active":""}`,onClick:()=>n("highlighter"),onMouseEnter:a=>te(a.currentTarget,"toolbar.highlighter"),onMouseLeave:U,children:[jsxRuntime.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntime.jsx("path",{d:"M4.6 19.6 12.8 11.4",strokeWidth:"3.6",strokeLinecap:"square"}),jsxRuntime.jsx("path",{d:"M14.6 9.6 16.2 8",strokeWidth:"3.6",strokeLinecap:"square"}),jsxRuntime.jsxs("g",{fill:"currentColor",stroke:"none",children:[jsxRuntime.jsx("path",{d:zt,transform:"translate(7.4 5.4) scale(2.4)"}),jsxRuntime.jsx("path",{d:zt,transform:"translate(18.4 3.4) scale(2.5)"}),jsxRuntime.jsx("path",{d:zt,transform:"translate(21 10.6) scale(2.2)"})]})]}),jsxRuntime.jsx("span",{className:"drawui-toolbar-color-chip",style:{background:de}})]}),_&&jsxRuntime.jsx("div",{className:"drawui-toolbar-shape-grid drawui-toolbar-highlighter-grid",children:no.map(a=>jsxRuntime.jsx("button",{type:"button","aria-label":a,className:`drawui-highlighter-swatch${de.toLowerCase()===a.toLowerCase()?" active":""}`,style:{background:a},onClick:()=>g(a)},a))})]}),jsxRuntime.jsx("div",{className:"drawui-toolbar-divider"}),hn.map(a=>jsxRuntime.jsx("button",{className:`drawui-toolbar-button ${e===a.type?"active":""}`,onClick:()=>n(a.type),"data-drawui-tip":drawuiCore.t(a.labelKey),children:jsxRuntime.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:jsxRuntime.jsx("path",{d:a.icon})})},a.type)),jsxRuntime.jsx("button",{className:`drawui-toolbar-button ${e==="mind-map"?"active":""}`,onClick:()=>n("mind-map"),"data-drawui-tip":drawuiCore.t("toolbar.mind-map"),children:jsxRuntime.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntime.jsx("circle",{cx:"5",cy:"12",r:"2.4"}),jsxRuntime.jsx("path",{d:"M7.4 12h3.6"}),jsxRuntime.jsx("path",{d:"M11 12c0-2.6 1.6-4.4 3.4-4.4"}),jsxRuntime.jsx("path",{d:"M11 12c0 2.6 1.6 4.4 3.4 4.4"}),jsxRuntime.jsx("circle",{cx:"17.4",cy:"7.6",r:"1.7"}),jsxRuntime.jsx("circle",{cx:"17.4",cy:"16.4",r:"1.7"}),jsxRuntime.jsx("circle",{cx:"15.6",cy:"12",r:"1.7"})]})}),jsxRuntime.jsx("div",{className:"drawui-toolbar-divider"}),jsxRuntime.jsx("button",{className:`drawui-toolbar-button ${r?"active":""}`,onClick:h,"data-drawui-tip":drawuiCore.t("toolbar.grid"),children:jsxRuntime.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntime.jsx("rect",{x:"3",y:"3",width:"7",height:"7",rx:"1"}),jsxRuntime.jsx("rect",{x:"14",y:"3",width:"7",height:"7",rx:"1"}),jsxRuntime.jsx("rect",{x:"14",y:"14",width:"7",height:"7",rx:"1"}),jsxRuntime.jsx("rect",{x:"3",y:"14",width:"7",height:"7",rx:"1"})]})}),jsxRuntime.jsx("div",{className:"drawui-toolbar-divider"}),jsxRuntime.jsx("button",{className:"drawui-toolbar-button",onClick:l,disabled:!d,style:d?void 0:{opacity:.4,cursor:"default"},"data-drawui-tip":drawuiCore.t("toolbar.undo"),children:jsxRuntime.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntime.jsx("path",{d:"M3 7v6h6"}),jsxRuntime.jsx("path",{d:"M21 17a9 9 0 0 0-9-9 9 9 0 0 0-6 2.3L3 13"})]})}),jsxRuntime.jsx("button",{className:"drawui-toolbar-button",onClick:S,disabled:!s,style:s?void 0:{opacity:.4,cursor:"default"},"data-drawui-tip":drawuiCore.t("toolbar.redo"),children:jsxRuntime.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntime.jsx("path",{d:"M21 7v6h-6"}),jsxRuntime.jsx("path",{d:"M3 17a9 9 0 0 1 9-9 9 9 0 0 1 6 2.3L21 13"})]})}),jsxRuntime.jsx("div",{className:"drawui-toolbar-divider"}),jsxRuntime.jsxs("div",{className:"drawui-toolbar-dropdown",onMouseEnter:Re,onMouseLeave:Te,children:[jsxRuntime.jsx("button",{className:"drawui-toolbar-button","data-drawui-tip":j?void 0:drawuiCore.t("toolbar.export"),children:jsxRuntime.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntime.jsx("path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"}),jsxRuntime.jsx("polyline",{points:"7 10 12 15 17 10"}),jsxRuntime.jsx("line",{x1:"12",y1:"15",x2:"12",y2:"3"})]})}),j&&jsxRuntime.jsxs("div",{className:"drawui-toolbar-shape-grid drawui-toolbar-export-grid",children:[Ne.map(a=>jsxRuntime.jsx("button",{className:"drawui-toolbar-shape-item drawui-toolbar-export-item",onClick:()=>{f?.(a.format),O(false);},"data-drawui-tip":drawuiCore.t(a.labelKey),children:drawuiCore.t(a.labelKey)},a.format)),jsxRuntime.jsx("div",{className:"drawui-toolbar-export-divider"}),jsxRuntime.jsx("button",{className:"drawui-toolbar-shape-item drawui-toolbar-export-item",onClick:()=>{u?.(),O(false);},"data-drawui-tip":drawuiCore.t("toolbar.export.data"),children:drawuiCore.t("toolbar.export.data")}),jsxRuntime.jsx("button",{className:"drawui-toolbar-shape-item drawui-toolbar-export-item",onClick:v,"data-drawui-tip":drawuiCore.t("toolbar.import.data"),children:drawuiCore.t("toolbar.import.data")})]})]}),jsxRuntime.jsx("input",{ref:$,type:"file",accept:".json,application/json",style:{display:"none"},onChange:ae}),x&&jsxRuntime.jsx("div",{className:`drawui-shape-tip ${x.above?"is-above":"is-below"}`,style:{left:x.x,top:x.y},children:drawuiCore.t(x.label)})]})})});var Ut=react.memo(function({onZoomIn:e,onZoomOut:n,onReset:r,zoomLevel:h=100}){return G(),jsxRuntime.jsxs("div",{className:"drawui-zoom-control",children:[jsxRuntime.jsx("button",{className:"drawui-zoom-button",onClick:e,"data-drawui-tip":drawuiCore.t("zoom.in"),children:jsxRuntime.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntime.jsx("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),jsxRuntime.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"})]})}),jsxRuntime.jsxs("div",{className:"drawui-zoom-level",children:[h,"%"]}),jsxRuntime.jsx("button",{className:"drawui-zoom-button",onClick:n,"data-drawui-tip":drawuiCore.t("zoom.out"),children:jsxRuntime.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:jsxRuntime.jsx("line",{x1:"12",y1:"5",x2:"12",y2:"19"})})}),jsxRuntime.jsx("button",{className:"drawui-zoom-button",onClick:r,"data-drawui-tip":drawuiCore.t("zoom.reset"),children:jsxRuntime.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntime.jsx("path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8"}),jsxRuntime.jsx("path",{d:"M3 3v5h5"})]})})]})});var Mo=["#ffffff","#f1f5f9","#e2e8f0","#ede9fe","#dbeafe","#e0e7ff","#dcfce7","#fef9c3","#fee2e2"],So=["#0f172a","#475569","#94a3b8","#8b5cf6","#3b82f6","#1d4ed8","#16a34a","#eab308","#dc2626"],xn=Mo.filter(o=>o!=="#f1f5f9"),vn=[...xn,...So],kn=[...Mo,...So],Co=15,Lo="drawui:customColors";function Mn(){if(typeof window>"u")return [];try{let o=window.localStorage.getItem(Lo);if(!o)return [];let e=JSON.parse(o);return Array.isArray(e)?e.filter(n=>typeof n=="string").slice(-Co):[]}catch{return []}}function Sn(o){if(!(typeof window>"u"))try{window.localStorage.setItem(Lo,JSON.stringify(o));}catch{}}var Wt=[{key:"fill",labelKey:"style.fill",hasTransparent:true,hasOpacity:true},{key:"stroke",labelKey:"style.stroke",hasTransparent:false,hasOpacity:true},{key:"text",labelKey:"style.text",hasTransparent:false},{key:"highlight",labelKey:"style.highlight",hasTransparent:true,hasOpacity:true}],ko=(o,e)=>!!o&&!!e&&o.toLowerCase()===e.toLowerCase(),ct=10,Fe=12,We=o=>!o||o==="transparent",To=react.memo(function({editor:e,selectedCount:n,hasLineSelection:r,currentConnectionType:h,currentArrowHead:d,currentDashed:s}){G();let l=!!e?.getEditingShapeId(),[S,f]=react.useState(null),[u,w]=react.useState(null),[,I]=react.useState(0),z=react.useRef(null),C=react.useRef(null),B=react.useRef(null),[p,A]=react.useState({tw:168,th:42,pw:228,ph:160}),[L,se]=react.useState(Mn),i=react.useRef(null),x=react.useCallback(c=>{let M=c.trim().toLowerCase();/^#[0-9a-f]{6}$/.test(M)&&se(m=>{let K=m.filter(E=>E!==M);for(K.push(M);K.length>Co;)K.shift();return Sn(K),K});},[]);if(react.useEffect(()=>{let c=i.current;if(!c)return;let M=()=>{c.value&&x(c.value);};return c.addEventListener("change",M),()=>c.removeEventListener("change",M)},[x,u]),react.useEffect(()=>{if(!e)return;let c=e.subscribe(()=>I(M=>(M+1)%1e6));return ()=>{c();}},[e]),react.useEffect(()=>{w(null);},[n,l]),react.useEffect(()=>{if(!u)return;let c=M=>{z.current&&!z.current.contains(M.target)&&w(null);};return document.addEventListener("pointerdown",c,true),()=>document.removeEventListener("pointerdown",c,true)},[u]),react.useLayoutEffect(()=>{let c=C.current?.offsetWidth??p.tw,M=C.current?.offsetHeight??p.th,m=B.current?.offsetWidth??p.pw,K=B.current?.offsetHeight??p.ph;A(E=>E.tw===c&&E.th===M&&E.pw===m&&E.ph===K?E:{tw:c,th:M,pw:m,ph:K});}),!e||n===0||l)return null;let y=e.getSelectedIds(),O=e.getShapes().filter(c=>y.includes(c.id)),_=O[0],X=_?.id??"",de=_?.style.fillColor,Q=_?.style.strokeColor??"#1f2937",fe=_?.textColor??"#1f2937",b=_?.highlightColor,ee={fill:de,stroke:Q,text:fe,highlight:b},Le=O.length>0&&O.every(c=>c.type==="sticky-note"),re={fill:_?.style.fillOpacity??1,stroke:_?.style.strokeOpacity??1,highlight:_?.highlightOpacity??1},Me=c=>S&&S.key===`${X}:${c}`?S.value:re[c]??1,P=(c,M)=>{switch(c){case "stroke":e.updateSelectedShapesStyle({strokeColor:M});break;case "fill":e.updateSelectedShapesStyle({fillColor:M});break;case "text":e.updateSelectedShapesText({textColor:M});break;case "highlight":e.updateSelectedShapesText({highlightColor:M});break}},ue=(c,M)=>{f({key:`${X}:${c}`,value:M}),c==="highlight"?e.updateSelectedShapesText({highlightOpacity:M}):c==="stroke"?e.updateSelectedShapesStyle({strokeOpacity:M}):e.updateSelectedShapesStyle({fillOpacity:M});},le=c=>e.updateConnectionType(c),Se=c=>e.updateArrowStyle({arrowHead:c.arrowHead,dashed:c.dashed}),me=!!r&&O.length>0&&O.every(c=>c.type==="line"||c.type==="arrow"),Ne=O.length>0&&O.every(c=>c.type==="text"),Re=O.length>0&&O.every(c=>c.type==="sticky-note"||c.type==="icon"),Te=me?Wt.filter(c=>c.key==="stroke"):Re?Wt.filter(c=>c.key!=="stroke"):Wt,$=c=>c.key==="stroke"&&me?"style.line":c.labelKey,v=u&&u!=="more"?Te.find(c=>c.key===u):void 0,ae=!!u&&(u==="more"||u==="prefix"||!!v),Y=Le&&v?.key==="fill",q=e.getCamera(),W=drawuiCore.getContentBounds(O,0),He=q.pageToScreen({x:W.x,y:W.y}),te=q.pageToScreen({x:W.x+W.width,y:W.y+W.height}),U=window.innerWidth,ze=window.innerHeight,Ze=te.y+ct,g=He.y-ct,R=p.th+(ae?ct+p.ph:0),H=Ze+R<=ze-Fe,D=g-R>=Fe,a=H||!D,N=(He.x+te.x)/2,pe=(c,M,m)=>Math.max(M,Math.min(c,Math.max(M,m))),ge=pe(N-p.tw/2,Fe,U-p.tw-Fe),we=a?Ze:g-p.th,Ee=pe(N-p.pw/2,Fe,U-p.pw-Fe),Xe=ae?pe(a?we+p.th+ct:we-ct-p.ph,Fe,ze-p.ph-Fe):0;return jsxRuntime.jsxs("div",{className:"drawui-style-floating",ref:z,children:[jsxRuntime.jsxs("div",{className:"drawui-style-toolbar",ref:C,style:{left:ge,top:we},children:[Te.map(c=>jsxRuntime.jsxs("button",{className:`drawui-style-tool-btn${u===c.key?" active":""}`,onClick:()=>w(u===c.key?null:c.key),"data-drawui-tip":drawuiCore.t($(c)),type:"button",children:[c.key==="fill"&&jsxRuntime.jsx("span",{className:`drawui-st-swatch${We(de)?" drawui-st-none":""}`,style:We(de)?void 0:{background:de}}),c.key==="stroke"&&(me?jsxRuntime.jsx("span",{className:`drawui-st-line${We(Q)?" drawui-st-line-none":""}`,style:We(Q)?void 0:{background:Q}}):jsxRuntime.jsx("span",{className:`drawui-st-frame${We(Q)?" drawui-st-frame-none":""}`,style:We(Q)?void 0:{borderColor:Q}})),c.key==="text"&&jsxRuntime.jsx("span",{className:"drawui-st-text",style:{color:fe},children:"A"}),c.key==="highlight"&&jsxRuntime.jsx("span",{className:`drawui-st-hl${We(b)?" drawui-st-none":""}`,style:We(b)?void 0:{background:b},children:"A"})]},c.key)),r&&jsxRuntime.jsx("button",{className:`drawui-style-tool-btn${u==="more"?" active":""}`,onClick:()=>w(u==="more"?null:"more"),"data-drawui-tip":drawuiCore.t("style.connection"),type:"button",children:"\u22EF"}),Ne&&jsxRuntime.jsx("button",{className:`drawui-style-tool-btn${u==="prefix"?" active":""}`,onClick:()=>w(u==="prefix"?null:"prefix"),"data-drawui-tip":drawuiCore.t("style.prefix"),type:"button",children:jsxRuntime.jsxs("svg",{viewBox:"0 0 24 24",width:"18",height:"18",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",children:[jsxRuntime.jsx("circle",{cx:"5",cy:"8",r:"1.7",fill:"currentColor",stroke:"none"}),jsxRuntime.jsx("circle",{cx:"5",cy:"16",r:"1.7",fill:"currentColor",stroke:"none"}),jsxRuntime.jsx("line",{x1:"10.5",y1:"8",x2:"20",y2:"8"}),jsxRuntime.jsx("line",{x1:"10.5",y1:"16",x2:"20",y2:"16"})]})})]}),ae&&jsxRuntime.jsx("div",{className:"drawui-style-popover",ref:B,style:{left:Ee,top:Xe},children:u==="prefix"?jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("div",{className:"drawui-style-popover-title",children:drawuiCore.t("style.prefix")}),jsxRuntime.jsx("div",{className:"drawui-muted-hint",children:drawuiCore.t("style.prefix.soon")})]}):v?jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("div",{className:"drawui-style-popover-title",children:drawuiCore.t($(v))}),jsxRuntime.jsxs("div",{className:"drawui-color-row",children:[v.hasTransparent&&!Y&&jsxRuntime.jsx("button",{className:`drawui-color-swatch drawui-color-swatch-transparent${We(ee[v.key])?" active":""}`,onClick:()=>P(v.key,"transparent"),"aria-label":drawuiCore.t("style.none"),type:"button"}),(Y?drawuiCore.STICKY_NOTE_COLORS:v.hasTransparent?vn:kn).map(c=>jsxRuntime.jsx("button",{className:`drawui-color-swatch${ko(c,ee[v.key])?" active":""}`,style:{background:c},onClick:()=>P(v.key,c),"aria-label":c,type:"button"},c)),L.map(c=>jsxRuntime.jsx("button",{className:`drawui-color-swatch drawui-color-custom${ko(c,ee[v.key])?" active":""}`,style:{background:c},onClick:()=>P(v.key,c),"aria-label":c,type:"button"},`custom-${c}`)),jsxRuntime.jsxs("span",{className:"drawui-color-swatch drawui-color-add","data-drawui-tip":drawuiCore.t("style.addColor"),children:["+",jsxRuntime.jsx("input",{ref:i,type:"color",defaultValue:"#3b82f6",className:"drawui-color-add-input","aria-label":drawuiCore.t("style.addColor")})]})]}),v.hasOpacity&&jsxRuntime.jsxs("div",{className:"drawui-opacity-row",children:[jsxRuntime.jsx("span",{className:"drawui-opacity-label",children:drawuiCore.t("style.opacity")}),jsxRuntime.jsx("input",{type:"range",min:0,max:100,value:Math.round(Me(v.key)*100),onChange:c=>ue(v.key,Number(c.target.value)/100),className:"drawui-opacity-slider"}),jsxRuntime.jsxs("span",{className:"drawui-opacity-value",children:[Math.round(Me(v.key)*100),"%"]})]})]}):jsxRuntime.jsx(jsxRuntime.Fragment,{children:jsxRuntime.jsx(bt,{connectionType:h??"straight",arrowHead:d??"end",dashed:!!s,onConnectionTypeChange:le,onArrowStyleChange:Se})})})]})});var Vt=14,Io=20,Rn=["#1f2937","#ef4444","#f97316","#facc15","#22c55e","#3b82f6","#8b5cf6","#ec4899","#9ca3af"],Hn=[12,14,16,18,20,24];function Ro(o,e,n){let r=o,h=n,d=r.charAt(0);if(r.length>1&&(d==="+"||d==="-"||d==="#"||d==="~")&&r.charAt(1)===" "&&(h=d,r=r.slice(2)),r=r.replace(/^\s+|\s+$/g,""),e==="attribute"){let w=r.indexOf(":");return w===-1?{visibility:h,name:r,type:"",params:"",returnType:""}:{visibility:h,name:r.slice(0,w).replace(/^\s+|\s+$/g,""),type:r.slice(w+1).replace(/^\s+|\s+$/g,""),params:"",returnType:""}}let s=r.indexOf("(");if(s===-1){let w=r.lastIndexOf(":");return w===-1?{visibility:h,name:r,type:"",params:"",returnType:""}:{visibility:h,name:r.slice(0,w).replace(/^\s+|\s+$/g,""),type:"",params:"",returnType:r.slice(w+1).replace(/^\s+|\s+$/g,"")}}let l=r.slice(0,s).replace(/^\s+|\s+$/g,""),S=r.indexOf(")",s);if(S===-1)return {visibility:h,name:l,type:"",params:r.slice(s+1).replace(/^\s+|\s+$/g,""),returnType:""};let f=r.slice(s+1,S).replace(/^\s+|\s+$/g,""),u=r.slice(S+1).replace(/^\s+|\s+$/g,"");return u.startsWith(":")&&(u=u.slice(1).replace(/^\s+|\s+$/g,"")),{visibility:h,name:l,type:"",params:f,returnType:u}}function Pn(o,e){let n=`${e.visibility} `;return o==="attribute"?`${n}${e.name}: ${e.type??""}`:`${n}${e.name}(${e.params??""}): ${e.returnType??""}`}var Po=react.memo(function({editor:e,umlClass:n,editing:r}){let[,h]=react.useState(0);G(),react.useEffect(()=>{if(!e)return;let g=e.subscribe(()=>h(R=>R+1));return ()=>{g();}},[e]);let[d,s]=react.useState(null),[l,S]=react.useState(false),f=react.useRef(null),u=react.useRef(null),w=react.useCallback((g,R)=>{f.current&&(clearTimeout(f.current),f.current=null),s({section:g,rowId:R}),S(false);},[]),I=react.useCallback(()=>{f.current&&clearTimeout(f.current),f.current=window.setTimeout(()=>{s(null),S(false);},150);},[]);if(!e||!n||r!==n.id)return null;let z=e.getCamera(),{id:C,x:B,y:p,width:A,height:L,className:se,methods:i}=n,x=n.type==="uml-interface",y=x?[]:n.attributes,j=A/2,O=L/2,_=drawuiCore.UML_HEADER_HEIGHT,X=drawuiCore.UML_LINE_HEIGHT,de=drawuiCore.UML_PADDING_X,Q=drawuiCore.UML_PADDING_Y,fe=x?0:y.length>0?y.length*X+Q*2:Q*2,b=z.zoom,ee=(A-de*2)*b,Le=4*b,re=z.pageToScreen({x:B-j+de,y:p}),Me=z.pageToScreen({x:B,y:p-O+_/2}),P=g=>z.pageToScreen({x:B,y:g}).y,ue=X*b,le=g=>p+(-O+_+Q+X/2+g*X),Se=g=>p+(-O+_+fe+Q+X/2+g*X),me=p+(-O+_+fe),Ne=p+O,Re={background:"#ffffff",borderWidth:1,borderStyle:"solid",borderColor:"transparent",outline:"none",padding:0,fontFamily:"sans-serif",boxSizing:"border-box"},Te=(g,R)=>{let H=y.find(a=>a.id===g);if(!H)return;let D=Ro(R,"attribute",H.visibility);e.updateUmlClass(C,{attributes:y.map(a=>a.id===g?{...a,...D}:a)});},$=(g,R)=>{let H=i.find(N=>N.id===g);if(!H)return;let D=Ro(R,"method",H.visibility),a=i.map(N=>N.id===g?{...N,...D}:N);x?e.updateUmlInterface(C,{methods:a}):e.updateUmlClass(C,{methods:a});},v=(g,R,H)=>{u.current={section:g,from:R},H.dataTransfer.effectAllowed="move",H.dataTransfer.setData("text/plain",`${g}:${R}`);},ae=g=>{g.preventDefault(),g.dataTransfer.dropEffect="move";},Y=(g,R,H)=>{H.preventDefault();let D=u.current;!D||D.section!==g||(g==="attribute"?e.reorderUmlAttribute(C,D.from,R):e.reorderUmlMethod(C,D.from,R),u.current=null);},q=(g,R,H,D)=>{let a=P(D),N=d?.section===g&&d.rowId===H.id,pe=(H.fontSize||drawuiCore.UML_FONT_SIZE)*b,ge=H.textColor||"#1f2937",we={position:"absolute",left:re.x-Vt*b-Le,top:a-ue/2,width:Vt*b+Le+ee+Io*b,height:ue,display:"flex",alignItems:"center",gap:2,pointerEvents:"none",zIndex:53},Ee={...Re,width:ee,height:ue-2,fontSize:pe,color:ge,textDecoration:H.strikethrough?"line-through":"none",pointerEvents:"auto",...N?{borderColor:"var(--dw-primary)"}:{}},Xe={width:Vt*b,height:ue-2,cursor:"grab",color:"#9ca3af",display:"flex",alignItems:"center",justifyContent:"center",userSelect:"none",fontSize:12*b,lineHeight:1,opacity:N?1:.55,pointerEvents:"auto"},c={width:Io*b,height:ue-6,border:"none",background:"transparent",color:"#9ca3af",cursor:"pointer",borderRadius:3,fontSize:14*b,opacity:N?1:.35,pointerEvents:"auto"};return jsxRuntime.jsxs("div",{style:we,onDragOver:ae,onDrop:M=>Y(g,R,M),children:[jsxRuntime.jsx("span",{style:Xe,draggable:true,onDragStart:M=>v(g,R,M),"data-drawui-tip":drawuiCore.t("uml.drag"),children:"\u22EE\u22EE"}),jsxRuntime.jsx("input",{style:Ee,value:Pn(g,H),onChange:M=>g==="attribute"?Te(H.id,M.target.value):$(H.id,M.target.value),onFocus:()=>w(g,H.id),onBlur:I,spellCheck:false}),jsxRuntime.jsx("button",{style:c,onMouseDown:M=>M.preventDefault(),onClick:()=>{g==="attribute"?e.removeUmlAttribute(C,H.id):e.removeUmlMethod(C,H.id);},"data-drawui-tip":drawuiCore.t("uml.delete"),children:"\xD7"})]},H.id)},W=(g,R,H)=>{let D=P(R),a=g==="attribute";return jsxRuntime.jsxs("button",{onMouseDown:N=>N.preventDefault(),onClick:()=>a?e.addUmlAttribute(C):e.addUmlMethod(C),className:"drawui-uml-add-row",style:{position:"absolute",left:re.x,top:D-9*b,height:18*b,padding:`0 ${6*b}px`,fontSize:11*b,lineHeight:1,border:"1px dashed #cbd5e1",background:"rgba(255,255,255,0.85)",color:"#64748b",borderRadius:3,cursor:"pointer",pointerEvents:"auto",display:"flex",alignItems:"center",gap:3,whiteSpace:"nowrap",zIndex:53},"data-drawui-tip":H,children:[jsxRuntime.jsx("span",{style:{fontSize:13*b,lineHeight:1},children:"+"}),jsxRuntime.jsx("span",{children:H})]},`add-${g}`)},He=()=>{if(!d||d.section==="className")return null;let g=d.section,R=d.rowId,D=(g==="attribute"?y:i).find(E=>E.id===R);if(!D)return null;let a=224*b,N=30*b,pe=z.pageToScreen({x:B,y:p}).x,ge=z.pageToScreen({x:B,y:p-O}).y,we=20*b,Ee=ge-N-we,Xe=pe-a/2,c=Ee+N,M=D.textColor||"#1f2937",m=D.fontSize||drawuiCore.UML_FONT_SIZE,K=!!D.strikethrough;return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("div",{style:{position:"absolute",left:pe-.5,top:c,width:1,height:we,background:"#d1d5db",pointerEvents:"none",zIndex:59}}),jsxRuntime.jsxs("div",{className:"drawui-uml-toolbar",style:{position:"absolute",left:Xe,top:Ee,width:a,height:N,background:"#ffffff",border:"1px solid #e5e7eb",borderRadius:6,boxShadow:"0 4px 12px rgba(0, 0, 0, 0.1)",display:"flex",alignItems:"center",gap:4*b,padding:`0 ${6*b}px`,pointerEvents:"auto",zIndex:60,fontSize:12*b},onMouseDown:E=>E.preventDefault(),children:[jsxRuntime.jsxs("div",{style:{position:"relative"},children:[jsxRuntime.jsxs("button",{onClick:()=>S(E=>!E),className:"drawui-uml-toolbar-btn","data-drawui-tip":drawuiCore.t("uml.textColor"),style:{border:"none",background:"transparent",cursor:"pointer",padding:2,display:"flex",alignItems:"center",borderRadius:3},children:[jsxRuntime.jsx("span",{style:{fontWeight:700,color:M,fontSize:13*b,textDecoration:K?"line-through":"none"},children:"A"}),jsxRuntime.jsx("span",{style:{width:10*b,height:2*b,background:M,marginLeft:3,borderRadius:1}})]}),l&&jsxRuntime.jsxs("div",{style:{position:"absolute",top:"100%",left:0,marginTop:4,background:"#ffffff",border:"1px solid #e5e7eb",borderRadius:4,padding:4,display:"flex",gap:2,boxShadow:"0 2px 8px rgba(0, 0, 0, 0.1)",zIndex:61},children:[jsxRuntime.jsx("button",{onClick:()=>{e.updateUmlRowStyle(C,g,D.id,{textColor:null}),S(false);},style:{width:14,height:14,border:"1px solid #e5e7eb",background:"transparent",cursor:"pointer",borderRadius:2},"data-drawui-tip":drawuiCore.t("uml.defaultColor")}),Rn.map(E=>jsxRuntime.jsx("button",{onClick:()=>{e.updateUmlRowStyle(C,g,D.id,{textColor:E}),S(false);},style:{width:14,height:14,border:"none",background:E,cursor:"pointer",borderRadius:2},"data-drawui-tip":E},E))]})]}),jsxRuntime.jsx("select",{value:m,onChange:E=>e.updateUmlRowStyle(C,g,D.id,{fontSize:Number(E.target.value)}),style:{border:"1px solid #e5e7eb",borderRadius:3,padding:`0 ${2*b}px`,fontSize:12*b,height:20*b,background:"#ffffff"},"data-drawui-tip":drawuiCore.t("uml.fontSize"),children:Hn.map(E=>jsxRuntime.jsx("option",{value:E,children:E},E))}),jsxRuntime.jsx("button",{onClick:()=>e.updateUmlRowStyle(C,g,D.id,{strikethrough:!K}),className:"drawui-uml-toolbar-btn","data-drawui-tip":drawuiCore.t("uml.strikethrough"),style:{border:"none",background:K?"var(--dw-primary-weak)":"transparent",cursor:"pointer",padding:2,borderRadius:3},children:jsxRuntime.jsx("span",{style:{fontWeight:700,fontSize:13*b,textDecoration:"line-through"},children:"A"})}),jsxRuntime.jsx("button",{onClick:()=>{g==="attribute"?e.removeUmlAttribute(C,D.id):e.removeUmlMethod(C,D.id),s(null);},className:"drawui-uml-toolbar-btn","data-drawui-tip":drawuiCore.t("uml.delete"),style:{border:"none",background:"transparent",cursor:"pointer",color:"#ef4444",padding:2,marginLeft:"auto",borderRadius:3},children:jsxRuntime.jsxs("svg",{width:14*b,height:14*b,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntime.jsx("polyline",{points:"3 6 5 6 21 6"}),jsxRuntime.jsx("path",{d:"M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6"}),jsxRuntime.jsx("path",{d:"M10 11v6"}),jsxRuntime.jsx("path",{d:"M14 11v6"}),jsxRuntime.jsx("path",{d:"M9 6V4a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2"})]})})]})]})},te=z.pageToScreen({x:B-j,y:p}).x,U=z.pageToScreen({x:B,y:p-O}).y,ze=A*b,Ze=L*b;return jsxRuntime.jsxs("div",{style:{position:"absolute",inset:0,pointerEvents:"none",zIndex:50},children:[jsxRuntime.jsx("div",{style:{position:"absolute",left:te+1,top:U+1,width:Math.max(0,ze-2),height:Math.max(0,Ze-2),background:"#ffffff",pointerEvents:"none",zIndex:51}}),jsxRuntime.jsx("input",{style:{...Re,position:"absolute",left:Me.x-ee/2,top:Me.y-_*b/2+2,width:ee,height:_*b-4,textAlign:"center",fontWeight:700,fontSize:(n.fontSize||drawuiCore.UML_FONT_SIZE)*b,color:n.textColor||"#1f2937",pointerEvents:"auto",zIndex:52,...d?.section==="className"?{borderColor:"var(--dw-primary)"}:{}},value:se,onChange:g=>x?e.updateUmlInterface(C,{className:g.target.value}):e.updateUmlClass(C,{className:g.target.value}),onFocus:()=>w("className",""),onBlur:I,spellCheck:false}),!x&&jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[y.map((g,R)=>q("attribute",R,g,le(R))),W("attribute",me,"\u5C5E\u6027")]}),i.map((g,R)=>q("method",R,g,Se(R))),W("method",Ne,drawuiCore.t("uml.method")),He()]})});var Ao=react.memo(function({editor:e,panelOpen:n,onOpenPanel:r}){let[,h]=react.useState(0);G(),react.useEffect(()=>{if(!e)return;let A=e.subscribe(()=>h(L=>L+1));return ()=>{A();}},[e]);let d=react.useRef(false),s=react.useRef(false);if(!e)return null;let l=e.getMindMapEditingShapeId();if(!l||n)return null;let S=e.getMindMapSelectedNode();if(!S||S.shapeId!==l)return null;let f=e.getMindMapNode(l,S.nodeId),u=e.getMindMapNodeScreenRect(l,S.nodeId);if(!f||!u)return null;let w=e.getCamera().getZoom(),I=drawuiCore.MINDMAP_FONT_SIZE*w,z=Math.max(100,u.width+24),C=u.height+8,B={position:"absolute",left:u.x+u.width/2,top:u.y-4,transform:"translateX(-50%)",width:z,height:C,border:"1.5px solid var(--dw-primary, #3b82f6)",borderRadius:6,background:"#ffffff",boxShadow:"0 2px 10px rgba(0,0,0,0.15)",outline:"none",padding:`0 ${(f.icon?24:12)*w}px`,fontFamily:"sans-serif",fontSize:I,color:"#1f2937",boxSizing:"border-box",pointerEvents:"auto",zIndex:55},p={position:"absolute",left:u.x+u.width+12,top:u.y+u.height/2-11,width:22,height:22,border:"1px solid #e5e7eb",background:"#ffffff",borderRadius:"50%",cursor:"pointer",color:"#6b7280",fontSize:13,lineHeight:1,display:"flex",alignItems:"center",justifyContent:"center",boxShadow:"0 1px 4px rgba(0,0,0,0.12)",pointerEvents:"auto",zIndex:55};return jsxRuntime.jsxs("div",{style:{position:"absolute",inset:0,pointerEvents:"none",zIndex:50},children:[jsxRuntime.jsx("input",{autoFocus:true,style:B,value:f.text,spellCheck:false,onChange:A=>{let L=!d.current;d.current=true,e.updateMindMapNode(l,S.nodeId,{text:A.target.value},L);},onBlur:()=>{if(s.current){s.current=false;return}e.exitMindMapEdit();},onKeyDown:A=>{A.key==="Enter"?A.target.blur():A.key==="Escape"&&e.exitMindMapEdit();}}),jsxRuntime.jsx("button",{style:p,"data-drawui-tip":drawuiCore.t("mindmap.more"),onMouseDown:A=>{A.preventDefault(),s.current=true,setTimeout(()=>{s.current=false;},300);},onClick:r,children:"\u22EF"})]})});var $o=[...drawuiCore.MINDMAP_COLORS,"#1f2937","#9ca3af"],Do=["\u{1F4A1}","\u2B50","\u{1F525}","\u{1F4CC}","\u2705","\u2757","\u26A0\uFE0F","\u{1F3F7}\uFE0F"],Fn={position:"absolute",width:232,background:"rgba(255,255,255,0.96)",border:"1px solid #e5e7eb",borderRadius:8,boxShadow:"0 6px 20px rgba(0,0,0,0.12)",padding:"10px 12px",fontSize:12,color:"#1f2937",zIndex:70,boxSizing:"border-box",fontFamily:"sans-serif"},Yt={fontSize:11,color:"#6b7280",marginBottom:4,display:"block"},kt={display:"flex",gap:4,alignItems:"center",flexWrap:"wrap"},Mt={border:"1px solid #e5e7eb",background:"#ffffff",borderRadius:5,padding:"3px 8px",fontSize:12,color:"#374151",cursor:"pointer",lineHeight:1.5},jt={width:"100%",border:"1px solid #e5e7eb",borderRadius:5,padding:"4px 8px",fontSize:12,outline:"none",boxSizing:"border-box",background:"#ffffff",color:"#1f2937"},zo=react.memo(function({editor:e,mindMap:n}){let[,r]=react.useState(0);G(),react.useEffect(()=>{if(!e)return;let i=e.subscribe(()=>r(x=>x+1));return ()=>{i();}},[e]);let h=react.useRef(null);if(!e||!n||e.getMindMapEditingShapeId()!==n.id)return null;let d=e.getMindMapSelectedNode();if(!d||d.shapeId!==n.id)return null;let s=i=>{if(i.id===d.nodeId)return i;for(let x of i.children??[]){let y=s(x);if(y)return y}return null},l=s(n.root);if(!l)return null;let S=e.getCamera(),u=drawuiCore.layoutMindMap(n.root).positions.get(l.id);if(!u)return null;let w=S.zoom,I=S.pageToScreen({x:n.x+u.x,y:n.y+u.y}),z=I.x+u.width*w/2+14,C=I.y-80,p=Math.max(8,Math.min(z,(window.innerWidth||1024)-232-8)),A=Math.max(8,Math.min(C,(window.innerHeight||768)-320)),L=i=>{e.updateMindMapNode(n.id,l.id,i);},se=!!l.id&&l.id!==n.root.id;return jsxRuntime.jsxs("div",{ref:h,style:{...Fn,left:p,top:A},onMouseDown:i=>i.stopPropagation(),children:[jsxRuntime.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:8},children:[jsxRuntime.jsx("span",{style:{fontWeight:600,fontSize:12},children:drawuiCore.t("mindmap.nodeText")}),jsxRuntime.jsx("button",{onClick:()=>e.exitMindMapEdit(),"data-drawui-tip":drawuiCore.t("mindmap.close"),style:{border:"none",background:"transparent",cursor:"pointer",color:"#9ca3af",fontSize:14,lineHeight:1,padding:2},children:"\xD7"})]}),jsxRuntime.jsx("input",{style:{...jt,marginBottom:8},value:l.text,onChange:i=>L({text:i.target.value}),spellCheck:false}),jsxRuntime.jsxs("div",{style:{...kt,marginBottom:10},children:[jsxRuntime.jsxs("button",{style:Mt,onClick:()=>e.addMindMapChild(n.id,l.id),children:["+ ",drawuiCore.t("mindmap.addChild")]}),se&&jsxRuntime.jsxs("button",{style:Mt,onClick:()=>e.addMindMapSibling(n.id,l.id),children:["+ ",drawuiCore.t("mindmap.addSibling")]}),!!l.children?.length&&jsxRuntime.jsx("button",{style:Mt,onClick:()=>e.toggleMindMapCollapse(n.id,l.id),children:l.collapsed?drawuiCore.t("mindmap.expand"):drawuiCore.t("mindmap.collapse")}),jsxRuntime.jsx("button",{style:{...Mt,color:"#ef4444",borderColor:"#fecaca",marginLeft:"auto"},onClick:()=>e.deleteMindMapNode(n.id,l.id),children:drawuiCore.t("mindmap.deleteNode")})]}),jsxRuntime.jsx("span",{style:Yt,children:drawuiCore.t("mindmap.color")}),jsxRuntime.jsxs("div",{style:{...kt,marginBottom:10},children:[jsxRuntime.jsx("button",{"data-drawui-tip":drawuiCore.t("mindmap.levelColor"),onClick:()=>L({color:void 0}),style:{width:18,height:18,borderRadius:4,border:"1.5px solid #d1d5db",background:"conic-gradient(#ef4444, #f59e0b, #10b981, #3b82f6, #8b5cf6, #ec4899, #ef4444)",cursor:"pointer",flexShrink:0}}),$o.map(i=>jsxRuntime.jsx("button",{"data-drawui-tip":i,onClick:()=>L({color:i}),style:{width:18,height:18,borderRadius:4,border:l.color===i?"2px solid #111827":"1px solid #d1d5db",background:i,cursor:"pointer",flexShrink:0}},i))]}),jsxRuntime.jsx("span",{style:Yt,children:drawuiCore.t("mindmap.icon")}),jsxRuntime.jsxs("div",{style:{...kt,marginBottom:10},children:[jsxRuntime.jsx("button",{"data-drawui-tip":drawuiCore.t("mindmap.noIcon"),onClick:()=>L({icon:void 0}),style:{width:22,height:22,borderRadius:4,border:l.icon?"1px solid #d1d5db":"2px solid #111827",background:"#f9fafb",cursor:"pointer",fontSize:11,color:"#9ca3af",lineHeight:1},children:"\u2205"}),Do.map(i=>jsxRuntime.jsx("button",{onClick:()=>L({icon:i}),style:{width:22,height:22,borderRadius:4,border:l.icon===i?"2px solid #111827":"1px solid #d1d5db",background:"#f9fafb",cursor:"pointer",fontSize:13,lineHeight:1},children:i},i)),jsxRuntime.jsx("input",{placeholder:"\u270F\uFE0F",defaultValue:l.icon&&!Do.includes(l.icon)?l.icon:"",onKeyDown:i=>{if(i.key==="Enter"){let x=i.target.value.trim();L({icon:x||void 0});}},onBlur:i=>{let x=i.target.value.trim();x!==l.icon&&L({icon:x||void 0});},style:{...jt,width:56,padding:"2px 4px",textAlign:"center"}})]}),jsxRuntime.jsx("span",{style:Yt,children:drawuiCore.t("mindmap.note")}),jsxRuntime.jsx("input",{style:{...jt,marginBottom:6},value:l.note??"",placeholder:drawuiCore.t("mindmap.notePlaceholder"),onChange:i=>L({note:i.target.value||void 0}),spellCheck:false}),!!l.note&&jsxRuntime.jsxs("div",{style:{...kt,marginTop:4},children:[jsxRuntime.jsx("span",{style:{fontSize:11,color:"#6b7280"},children:drawuiCore.t("mindmap.noteColor")}),jsxRuntime.jsx("button",{"data-drawui-tip":drawuiCore.t("mindmap.noteColorDefault"),onClick:()=>L({noteColor:void 0}),style:{width:16,height:16,borderRadius:3,border:l.noteColor?"1px solid #d1d5db":"2px solid #111827",background:"repeating-conic-gradient(#ef4444 0% 25%, #f59e0b 0% 50%, #10b981 0% 75%, #3b82f6 0% 100%)",cursor:"pointer"}}),$o.map(i=>jsxRuntime.jsx("button",{onClick:()=>L({noteColor:i}),style:{width:16,height:16,borderRadius:3,border:l.noteColor===i?"2px solid #111827":"1px solid #d1d5db",background:i,cursor:"pointer"}},i))]})]})});var qt=220,Jt=140,qn="#fafafa";function Jn(o,e){let n=Math.min(o.x,e.x),r=Math.min(o.y,e.y),h=Math.max(o.x+o.width,e.x+e.width),d=Math.max(o.y+o.height,e.y+e.height);return {x:n,y:r,width:h-n,height:d-r}}function Qn(o){return {x:o.x+o.width/2,y:o.y+o.height/2}}function er(){return {x:0,y:0,width:0,height:0}}function tr(o){let e=1/0,n=1/0,r=-1/0,h=-1/0,d=false;for(let s of o){let l=eo(s);l&&(d=true,l.x<e&&(e=l.x),l.y<n&&(n=l.y),l.x+l.width>r&&(r=l.x+l.width),l.y+l.height>h&&(h=l.y+l.height));}return d?{x:e,y:n,width:r-e,height:h-n}:null}function eo(o){switch(o.type){case "rectangle":case "sticky-note":case "icon":case "rounded-rectangle":case "ellipse":case "diamond":case "triangle":case "hexagon":case "parallelogram":case "trapezoid":case "pentagon":case "octagon":case "star":case "cylinder":case "cloud":case "heart":case "block-arrow-right":case "block-arrow-left":case "block-arrow-up":case "block-arrow-down":case "block-arrow-double":case "right-triangle":case "cross":case "speech-rect":case "speech-round":case "cube":case "sector":case "delay":case "predefined-process":case "document":case "stadium":case "class-catalog":case "chevron":case "brace-left":case "brace-right":case "envelope":case "checkbox":case "triangular-pyramid":case "quadrangular-pyramid":case "cuboid":case "sphere":case "ellipsoid":case "pie":case "hollow-pie":case "uml-class":case "uml-interface":case "mind-map":case "text":return {x:o.x-o.width/2,y:o.y-o.height/2,width:o.width,height:o.height};case "circle":return {x:o.x-o.radius,y:o.y-o.radius,width:o.radius*2,height:o.radius*2};case "line":case "arrow":{let e=o.points;if(!e||e.length===0)return null;let n=1/0,r=1/0,h=-1/0,d=-1/0;for(let s of e)s.x<n&&(n=s.x),s.y<r&&(r=s.y),s.x>h&&(h=s.x),s.y>d&&(d=s.y);return {x:n,y:r,width:h-n,height:d-r}}case "draw":{let e=o,n=e.width,r=e.height;if(typeof n=="number"&&typeof r=="number")return {x:e.x-n/2,y:e.y-r/2,width:n,height:r};let h=e.points;if(!h||h.length===0)return null;let d=1/0,s=1/0,l=-1/0,S=-1/0;for(let f of h){let u=f.x+e.x,w=f.y+e.y;u<d&&(d=u),w<s&&(s=w),u>l&&(l=u),w>S&&(S=w);}return {x:d,y:s,width:l-d,height:S-s}}default:return null}}function or(o){let e=o.getCamera(),n=e.screenToPage({x:0,y:0}),r=e.screenToPage({x:window.innerWidth,y:window.innerHeight});return {x:n.x,y:n.y,width:r.x-n.x,height:r.y-n.y}}function nr(o,e,n){if(o.width<=0||o.height<=0)return {x:o.x-e/2,y:o.y-n/2,width:e,height:n};let r=e/n,h=o.width,d=h/r;d<o.height&&(d=o.height,h=d*r);let s=Qn(o);return {x:s.x-h/2,y:s.y-d/2,width:h,height:d}}function Qt(o,e,n,r){let h=(o-n.left)/n.width,d=(e-n.top)/n.height;return {x:r.x+h*r.width,y:r.y+d*r.height}}var Uo=react.memo(function({editor:e}){let n=react.useRef(null),r=react.useRef(null),[h,d]=react.useState(false),[s,l]=react.useState(100),[S,f]=react.useState(false),[u,w]=react.useState(false);G();let I=react.useRef(null),z=react.useRef(null);react.useLayoutEffect(()=>{let i=n.current,x=r.current;if(!i||!x)return;let y=window.devicePixelRatio||1;i.width=Math.round(qt*y),i.height=Math.round(Jt*y),i.style.width=`${qt}px`,i.style.height=`${Jt}px`;},[h]);let C=react.useCallback(()=>{let i=n.current,x=r.current;if(!i||!x||!e)return;let y=i.getContext("2d");if(!y)return;let j=qt,O=Jt,_=i.width,X=i.height,de=e.getShapes(),Q=new Set(e.getSelectedIds()),fe=drawuiCore.getTheme(),b=drawuiCore.hexToRgba(fe.text,.16),ee=fe.primary,Le=drawuiCore.hexToRgba(fe.primary,.18),re=drawuiCore.hexToRgba(fe.primary,.85),Me=tr(de),P=or(e),ue=Me?Jn(Me,P):P.width>0?P:er(),le=nr(ue,j,O);z.current=le;let Se=_/le.width,me=X/le.height,Ne=j/le.width;y.setTransform(1,0,0,1,0,0),y.fillStyle=qn,y.fillRect(0,0,_,X),y.setTransform(Se,0,0,me,-Se*le.x,-me*le.y),y.fillStyle=b;for(let $ of de){let v=eo($);v&&y.fillRect(v.x,v.y,v.width,v.height);}y.fillStyle=ee;for(let $ of de){if(!Q.has($.id))continue;let v=eo($);v&&y.fillRect(v.x,v.y,v.width,v.height);}y.fillStyle=Le,y.fillRect(P.x,P.y,P.width,P.height);let Re=1.5/Ne;y.strokeStyle=re,y.lineWidth=Re,y.lineJoin="round";let Te=Math.min(P.width/6,P.height/6,6/Ne);if(y.beginPath(),Te*Ne<1)y.rect(P.x,P.y,P.width,P.height);else {let $=P.x,v=P.y,ae=P.width,Y=P.height,q=Math.min(Te,ae/2,Y/2);y.moveTo($+q,v),y.lineTo($+ae-q,v),y.quadraticCurveTo($+ae,v,$+ae,v+q),y.lineTo($+ae,v+Y-q),y.quadraticCurveTo($+ae,v+Y,$+ae-q,v+Y),y.lineTo($+q,v+Y),y.quadraticCurveTo($,v+Y,$,v+Y-q),y.lineTo($,v+q),y.quadraticCurveTo($,v,$+q,v),y.closePath();}y.stroke(),y.setTransform(1,0,0,1,0,0);},[e]);react.useEffect(()=>{if(!e||h)return;C();let i=e.subscribe(C),x=drawuiCore.subscribeTheme(C),y=()=>C();return window.addEventListener("resize",y),()=>{i(),x(),window.removeEventListener("resize",y);}},[e,h,C]),react.useEffect(()=>{if(!e)return;let i=()=>{let y=e.getCamera().getZoom();l(Math.round(y*100));};i();let x=e.subscribe(i);return ()=>{x();}},[e]);let B=react.useCallback((i,x)=>{if(!e)return;let y=e.getCamera(),j=y.getZoom(),O=window.innerWidth/2,_=window.innerHeight/2,X=y;X.x=O-i*j,X.y=_-x*j,e.requestRender();},[e]),p=i=>{if(!e||!r.current||i.button!==0)return;let x=r.current.getBoundingClientRect(),y=z.current;if(!y)return;let j=Qt(i.clientX,i.clientY,x,y);I.current={pointerId:i.pointerId,rect:{left:x.left,top:x.top,width:x.width,height:x.height},canvasBox:y},i.currentTarget.setPointerCapture(i.pointerId),w(true),B(j.x,j.y);},A=i=>{if(!u||!e||!I.current||!r.current)return;let x=I.current,y=Qt(i.clientX,i.clientY,x.rect,x.canvasBox);B(y.x,y.y);},L=i=>{if(u){w(false),I.current=null;try{i.currentTarget.releasePointerCapture(i.pointerId);}catch{}}},se=i=>{if(!e||!r.current)return;let x=z.current;if(!x)return;let y=r.current.getBoundingClientRect(),j=Qt(i.clientX,i.clientY,y,x);B(j.x,j.y);};return jsxRuntime.jsxs("div",{className:`drawui-minimap ${h?"collapsed":""}`,children:[jsxRuntime.jsx("button",{className:"drawui-minimap-toggle",onClick:()=>d(i=>!i),"data-drawui-tip":h?drawuiCore.t("minimap.expand"):drawuiCore.t("minimap.collapse"),"data-drawui-tip-pos":"top","aria-label":h?drawuiCore.t("minimap.expand"):drawuiCore.t("minimap.collapse"),children:jsxRuntime.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:h?jsxRuntime.jsx("polyline",{points:"9 6 15 12 9 18"}):jsxRuntime.jsx("polyline",{points:"15 6 9 12 15 18"})})}),!h&&jsxRuntime.jsxs("div",{className:"drawui-minimap-panel",children:[jsxRuntime.jsxs("div",{className:"drawui-minimap-header",children:[jsxRuntime.jsx("span",{className:"drawui-minimap-title",children:drawuiCore.t("minimap.title")}),jsxRuntime.jsxs("span",{className:"drawui-minimap-zoom",children:[s,"%"]})]}),jsxRuntime.jsx("div",{ref:r,className:"drawui-minimap-canvas-wrap",style:{cursor:u?"grabbing":S?"pointer":"default"},onPointerEnter:()=>f(true),onPointerLeave:()=>f(false),children:jsxRuntime.jsx("canvas",{ref:n,className:"drawui-minimap-canvas",onPointerDown:p,onPointerMove:A,onPointerUp:L,onPointerCancel:L,onDoubleClick:se})})]})]})});var ye=o=>jsxRuntime.jsx("svg",{viewBox:"0 0 24 24",width:"18",height:"18",className:"drawui-gen-shape-glyph",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round",children:o}),ir=[{type:"rectangle",labelKey:"shape.rectangle",glyph:ye(jsxRuntime.jsx("rect",{x:"4",y:"7",width:"16",height:"10",rx:"1"}))},{type:"rounded-rectangle",labelKey:"shape.rounded-rectangle",glyph:ye(jsxRuntime.jsx("rect",{x:"4",y:"7",width:"16",height:"10",rx:"4"}))},{type:"circle",labelKey:"shape.circle",glyph:ye(jsxRuntime.jsx("circle",{cx:"12",cy:"12",r:"5.5"}))},{type:"ellipse",labelKey:"shape.ellipse",glyph:ye(jsxRuntime.jsx("ellipse",{cx:"12",cy:"12",rx:"7",ry:"4.5"}))},{type:"diamond",labelKey:"shape.diamond",glyph:ye(jsxRuntime.jsx("path",{d:"M12 5 L19 12 L12 19 L5 12 Z"}))},{type:"triangle",labelKey:"shape.triangle",glyph:ye(jsxRuntime.jsx("path",{d:"M12 4 L20 19 H4 Z"}))},{type:"hexagon",labelKey:"shape.hexagon",glyph:ye(jsxRuntime.jsx("path",{d:"M12 3 L19.5 7.5 V16.5 L12 21 L4.5 16.5 V7.5 Z"}))},{type:"parallelogram",labelKey:"shape.parallelogram",glyph:ye(jsxRuntime.jsx("path",{d:"M6 7 L19 7 L16 17 H7 Z"}))},{type:"trapezoid",labelKey:"shape.trapezoid",glyph:ye(jsxRuntime.jsx("path",{d:"M7 6 H17 L20 18 H4 Z"}))},{type:"pentagon",labelKey:"shape.pentagon",glyph:ye(jsxRuntime.jsx("path",{d:"M12 4 L19.5 9.5 L16.5 18.5 H7.5 L4.5 9.5 Z"}))},{type:"octagon",labelKey:"shape.octagon",glyph:ye(jsxRuntime.jsx("path",{d:"M8 4 H16 L20 8 V16 L16 20 H8 L4 16 V8 Z"}))},{type:"star",labelKey:"shape.star",glyph:ye(jsxRuntime.jsx("path",{d:"M12 3 L14 9.5 L20.5 10 L15.5 14 L17.5 20.5 L12 16.8 L6.5 20.5 L8.5 14 L3.5 10 L10 9.5 Z"}))},{type:"sticky-note",labelKey:"shape.sticky-note",glyph:ye(jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("path",{d:"M4 4h16v11l-5 5H4Z"}),jsxRuntime.jsx("path",{d:"M20 15h-5v5"})]}))},{type:"uml-class",labelKey:"shape.uml-class",glyph:ye(jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("rect",{x:"3",y:"4",width:"18",height:"16",rx:"1"}),jsxRuntime.jsx("path",{d:"M3 9 H21"}),jsxRuntime.jsx("path",{d:"M3 15 H21"}),jsxRuntime.jsx("path",{d:"M6 6.5 H10"}),jsxRuntime.jsx("path",{d:"M6 12.5 H12"})]}))},{type:"uml-interface",labelKey:"shape.uml-interface",glyph:ye(jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("rect",{x:"3",y:"4",width:"18",height:"16",rx:"1"}),jsxRuntime.jsx("path",{d:"M3 9 H21"}),jsxRuntime.jsx("path",{d:"M6 6.5 H10"}),jsxRuntime.jsx("path",{d:"M6 12.5 H12"})]}))},{type:"mind-map",labelKey:"shape.mind-map",glyph:ye(jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("circle",{cx:"5",cy:"12",r:"2"}),jsxRuntime.jsx("path",{d:"M7 12h2.6"}),jsxRuntime.jsx("path",{d:"M9.6 12c0-2 1.2-3.4 2.6-3.4"}),jsxRuntime.jsx("path",{d:"M9.6 12c0 2 1.2 3.4 2.6 3.4"}),jsxRuntime.jsx("circle",{cx:"15.2",cy:"8.6",r:"1.3"}),jsxRuntime.jsx("circle",{cx:"15.2",cy:"15.4",r:"1.3"}),jsxRuntime.jsx("circle",{cx:"13.6",cy:"12",r:"1.3"})]}))}];function Wo({editor:o,x:e,y:n,context:r,existingArrowId:h,defaultShapeType:d,onClose:s}){let l=react.useRef(null);G();let S=f=>{o?.createGeneratedConnection(r,{type:f,existingArrowId:h}),s();};return react.useEffect(()=>{let f=I=>{l.current&&!l.current.contains(I.target)&&s();},u=I=>{I.key==="Escape"&&(I.preventDefault(),s());},w=setTimeout(()=>{window.addEventListener("pointerdown",f,true),window.addEventListener("keydown",u,true);},0);return ()=>{clearTimeout(w),window.removeEventListener("pointerdown",f,true),window.removeEventListener("keydown",u,true);}},[s]),jsxRuntime.jsxs("div",{className:"drawui-gen-menu",ref:l,style:{left:e,top:n},children:[jsxRuntime.jsx("div",{className:"drawui-gen-menu-label",children:drawuiCore.t("menu.title")}),jsxRuntime.jsx("div",{className:"drawui-gen-shape-grid",children:ir.map(f=>jsxRuntime.jsxs("button",{className:`drawui-gen-shape-btn${f.type===d?" drawui-gen-shape-active":""}`,onClick:()=>S(f.type),"data-drawui-tip":drawuiCore.t(f.labelKey),children:[f.glyph,jsxRuntime.jsx("span",{className:"drawui-gen-shape-label",children:drawuiCore.t(f.labelKey)})]},f.type))}),jsxRuntime.jsx("div",{className:"drawui-gen-menu-hint",children:drawuiCore.t("menu.cancel")})]})}var dr={select:"tool.select",hand:"tool.hand",rectangle:"tool.rectangle","rounded-rectangle":"tool.rounded-rectangle",circle:"tool.circle",ellipse:"tool.ellipse",diamond:"tool.diamond",triangle:"tool.triangle",hexagon:"tool.hexagon",parallelogram:"tool.parallelogram",trapezoid:"tool.trapezoid",pentagon:"tool.pentagon",octagon:"tool.octagon",star:"tool.star",cylinder:"tool.cylinder",cloud:"tool.cloud",heart:"tool.heart","block-arrow-right":"tool.block-arrow-right","block-arrow-left":"tool.block-arrow-left","block-arrow-up":"tool.block-arrow-up","block-arrow-down":"tool.block-arrow-down","block-arrow-double":"tool.block-arrow-double","right-triangle":"tool.right-triangle",cross:"tool.cross","speech-rect":"tool.speech-rect","speech-round":"tool.speech-round",cube:"tool.cube",sector:"tool.sector",delay:"tool.delay","predefined-process":"tool.predefined-process",document:"tool.document",stadium:"tool.stadium","class-catalog":"tool.class-catalog",chevron:"tool.chevron","brace-left":"tool.brace-left","brace-right":"tool.brace-right",envelope:"tool.envelope",checkbox:"tool.checkbox","sticky-note":"tool.sticky-note",icon:"toolbar.icon","triangular-pyramid":"tool.triangular-pyramid","quadrangular-pyramid":"tool.quadrangular-pyramid",cuboid:"tool.cuboid",sphere:"tool.sphere",ellipsoid:"tool.ellipsoid",pie:"tool.pie","hollow-pie":"tool.hollow-pie","uml-class":"tool.uml-class","uml-interface":"tool.uml-interface",line:"tool.line",arrow:"tool.arrow",text:"tool.text",draw:"tool.draw",pen:"tool.pen",highlighter:"tool.highlighter",eraser:"tool.eraser","mind-map":"tool.mind-map"};function ur({initialTool:o="select",className:e="",themeColor:n,language:r="zh-CN",data:h,onChange:d,onReady:s}){let l=react.useRef(null),S=react.useRef(null),f=react.useRef(null),[u,w]=react.useState(null);G();let[I,z]=react.useState(o),[C,B]=react.useState(false),[p,A]=react.useState(0),[L,se]=react.useState(false),[i,x]=react.useState("straight"),[y,j]=react.useState("end"),[O,_]=react.useState(false),[X,de]=react.useState(void 0),[Q,fe]=react.useState(100),[b,ee]=react.useState(null),[Le,re]=react.useState(null),[Me,P]=react.useState(false),[ue,le]=react.useState(false),[Se,me]=react.useState(null),[Ne,Re]=react.useState(null),[Te,$]=react.useState(false),[v,ae]=react.useState(null),[Y,q]=react.useState(null),W=react.useRef(null),He=react.useRef(0),te=react.useRef(null),U=react.useRef(d);U.current=d;let ze=react.useRef(s);ze.current=s,react.useEffect(()=>{if(!l.current)return;let m=new drawuiCore.Editor(l.current,{theme:n?{primary:n,editBorder:n,selection:{outline:n,handleStroke:n,handleFill:"#ffffff",outlineFill:drawuiCore.hexToRgba(n,.1),shadow:n}}:void 0,language:r,shapes:h,persist:!h});f.current=m,w(m),window.__drawuiEditor=m,m.setHighlighterColor(ht()),m.setStickyNoteColor(yt()),ze.current?.(m),o&&m.setActiveTool(o);let K=m.subscribe(()=>{z(m.getActiveTool());let ie=m.getSelectedIds();A(ie.length);let xe=m.getShapes().filter(Ke=>ie.includes(Ke.id)&&(Ke.type==="line"||Ke.type==="arrow"));if(se(xe.length>0),xe.length>0&&xe[0].connectionType?x(xe[0].connectionType):xe.length>0&&x("straight"),xe.length>0){let Ke=xe.find(It=>It.type==="arrow");Ke&&(j(Ke.arrowHead??"end"),_(Ke.dashed??false));}fe(Math.round(m.getCamera().getZoom()*100)),de(m.getArrowStyle()),P(m.canUndo()),le(m.canRedo());let Pe=m.getSelectedUml();me(Pe),Pe||ae(null);let pt=m.getSelectedMindMap();Re(pt),m.getMindMapEditingShapeId()||$(false),U.current?.(m.getData());}),E=m.subscribeNotifications(ie=>{re({type:"success",text:ie}),W.current&&clearTimeout(W.current),W.current=setTimeout(()=>re(null),3500);}),qe=m.subscribeUi(ie=>{ie.kind==="shapeTypeMenu"&&q({x:ie.screenX,y:ie.screenY,context:ie.context,existingArrowId:ie.existingArrowId,defaultShapeType:ie.defaultShapeType});});return ()=>{K(),E(),qe(),W.current&&clearTimeout(W.current),cancelAnimationFrame(He.current),m.dispose();}},[o]),react.useEffect(()=>{if(!n)return;let m=S.current;m&&(m.style.setProperty("--dw-primary",n),m.style.setProperty("--dw-primary-hover",drawuiCore.shadeColor(n,-0.12)),m.style.setProperty("--dw-primary-weak",drawuiCore.hexToRgba(n,.1)),m.style.setProperty("--dw-primary-contrast","#ffffff"),m.style.setProperty("--dw-shadow-primary",`0 2px 8px ${drawuiCore.hexToRgba(n,.3)}`)),f.current?.setTheme({primary:n,editBorder:n,selection:{outline:n,handleStroke:n,handleFill:"#ffffff",outlineFill:drawuiCore.hexToRgba(n,.1),shadow:n}});},[n]),react.useEffect(()=>{drawuiCore.setLanguage(r),f.current?.setLanguage(r);},[r]);let Ze=react.useCallback(m=>{f.current?.setActiveTool(m);},[]),g=react.useCallback(()=>{f.current?.zoomIn();},[]),R=react.useCallback(()=>{f.current?.zoomOut();},[]),H=react.useCallback(()=>{f.current?.resetZoom();},[]),D=react.useCallback(()=>{let m=!C;B(m),f.current?.setShowGrid(m);},[C]),a=react.useCallback(()=>{f.current?.undo();},[]),N=react.useCallback(()=>{f.current?.redo();},[]),pe=react.useCallback(m=>{f.current?.downloadImage("drawui",m,{background:"#ffffff"});},[]),ge=react.useCallback(()=>{f.current?.downloadJSON("drawui-data");},[]),we=react.useCallback(m=>{let K=new FileReader;K.onload=()=>{let E=typeof K.result=="string"?K.result:"";if(f.current?.importJSON(E)??false){let ie=f.current?.getShapes().length??0;re({type:"success",text:drawuiCore.t("import.success",{n:ie})});}else re({type:"error",text:drawuiCore.t("import.fail")});W.current&&clearTimeout(W.current),W.current=setTimeout(()=>re(null),3500);},K.onerror=()=>{re({type:"error",text:drawuiCore.t("import.fail")}),W.current&&clearTimeout(W.current),W.current=setTimeout(()=>re(null),3500);},K.readAsText(m,"utf-8");},[]),Ee=react.useCallback(m=>{let K=f.current,E=l.current;if(!K||!E)return;if(K.isPointerDown()){te.current!==null&&(te.current=null,ee(null));return}let qe=m.clientX,ie=m.clientY;cancelAnimationFrame(He.current),He.current=requestAnimationFrame(()=>{let et=E.getBoundingClientRect(),xe=qe-et.left,Pe=ie-et.top,pt=xe+12,Ke=Pe+12,It=K.getSelectedUml()?.id,tt=K.getUmlRowAtScreenPoint({x:xe,y:Pe});if(tt&&tt.shape.id!==It&&tt.text){te.current!==tt.text&&(te.current=tt.text,ee({text:tt.text,x:pt,y:Ke}));return}let it=K.getShapeAtScreenPoint({x:xe,y:Pe});it&&it.text?te.current!==it.text&&(te.current=it.text,ee({text:it.text,x:pt,y:Ke})):te.current!==null&&(te.current=null,ee(null));});},[]),Xe=react.useCallback(()=>{ee(null);},[]),c=react.useCallback(m=>{let K=f.current,E=l.current;if(!K||!E)return;let qe=E.getBoundingClientRect(),ie=m.clientX-qe.left,et=m.clientY-qe.top,xe=K.getUmlRowAtScreenPoint({x:ie,y:et});if(xe){ae(xe.shape.id);return}let Pe=K.getMindMapNodeAtScreenPoint({x:ie,y:et});Pe&&K.beginMindMapEdit(Pe.shapeId,Pe.nodeId);},[]),M=react.useCallback(()=>{q(null);},[]);return jsxRuntime.jsxs("div",{ref:S,className:`drawui-canvas-board ${e}`,children:[jsxRuntime.jsx("canvas",{ref:l,className:"drawui-canvas",onMouseMove:Ee,onMouseLeave:Xe,onDoubleClick:c}),b&&jsxRuntime.jsx("div",{className:"drawui-tooltip",style:{left:b.x,top:b.y},children:b.text}),jsxRuntime.jsx(Bt,{activeTool:I,onToolChange:Ze,showGrid:C,onToggleGrid:D,canUndo:Me,canRedo:ue,onUndo:a,onRedo:N,onExport:pe,onExportData:ge,onImportData:we,onHighlighterColorChange:m=>f.current?.setHighlighterColor(m),onStickyNoteColorChange:m=>f.current?.setStickyNoteColor(m),onInsertIcon:m=>f.current?.insertIcon(m),arrowStyle:X,onArrowStyleChange:m=>f.current?.setArrowStyle(m)}),jsxRuntime.jsx(Ut,{onZoomIn:g,onZoomOut:R,onReset:H,zoomLevel:Q}),jsxRuntime.jsx(To,{editor:u,selectedCount:p,hasLineSelection:L,currentConnectionType:i,currentArrowHead:y,currentDashed:O}),jsxRuntime.jsx(Po,{editor:u,umlClass:Se,editing:v}),jsxRuntime.jsx(Ao,{editor:u,panelOpen:Te,onOpenPanel:()=>$(true)}),Te&&jsxRuntime.jsx(zo,{editor:u,mindMap:Ne}),jsxRuntime.jsx(Uo,{editor:u}),Y&&jsxRuntime.jsx(Wo,{editor:u,x:Y.x,y:Y.y,context:Y.context,existingArrowId:Y.existingArrowId,defaultShapeType:Y.defaultShapeType,onClose:M}),jsxRuntime.jsxs("div",{className:"drawui-status-bar",children:[jsxRuntime.jsx("div",{className:"drawui-status-item",children:jsxRuntime.jsx("span",{children:drawuiCore.t(dr[I])})}),jsxRuntime.jsx("div",{className:"drawui-status-item",children:jsxRuntime.jsx("span",{children:p===0?drawuiCore.t("status.none"):drawuiCore.t("status.selected",{n:p})})}),jsxRuntime.jsx("div",{className:"drawui-status-item",children:jsxRuntime.jsxs("span",{children:[Q,"%"]})})]}),Le&&jsxRuntime.jsxs("div",{className:"drawui-toast",children:[Le.type==="success"?jsxRuntime.jsx("svg",{className:"drawui-toast-icon",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:jsxRuntime.jsx("polyline",{points:"20 6 9 17 4 12"})}):jsxRuntime.jsxs("svg",{className:"drawui-toast-icon drawui-toast-icon-error",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntime.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),jsxRuntime.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]}),Le.text]})]})}exports.CanvasBoard=ur;exports.Toolbar=Bt;exports.ZoomControl=Ut;
1
+ 'use strict';var react=require('react'),drawuiCore=require('drawui-core'),jsxRuntime=require('react/jsx-runtime');function U(){let[o,e]=react.useState(drawuiCore.getLanguage());return react.useEffect(()=>drawuiCore.subscribeLanguage(()=>e(drawuiCore.getLanguage())),[]),o}var so=["#ffeb3b","#22c55e","#3b82f6","#ec4899","#8b5cf6","#f97316"],lo="drawui:highlighterColor";function mt(){if(typeof window>"u")return drawuiCore.DEFAULT_HIGHLIGHTER_COLOR;try{let o=window.localStorage.getItem(lo);return o&&/^#[0-9a-fA-F]{6}$/.test(o)?o.toLowerCase():drawuiCore.DEFAULT_HIGHLIGHTER_COLOR}catch{return drawuiCore.DEFAULT_HIGHLIGHTER_COLOR}}function co(o){if(!(typeof window>"u"))try{window.localStorage.setItem(lo,o);}catch{}}var po="drawui:stickyNoteColor";function bt(){if(typeof window>"u")return drawuiCore.STICKY_NOTE_DEFAULT_COLOR;try{let o=window.localStorage.getItem(po);return o&&/^#[0-9a-fA-F]{6}$/.test(o)?o.toLowerCase():drawuiCore.STICKY_NOTE_DEFAULT_COLOR}catch{return drawuiCore.STICKY_NOTE_DEFAULT_COLOR}}function ho(o){if(!(typeof window>"u"))try{window.localStorage.setItem(po,o);}catch{}}function dn({icon:o,size:e=24,ink:n=drawuiCore.ICON_DEFAULT_INK}){return jsxRuntime.jsxs("svg",{viewBox:`0 0 ${drawuiCore.ICON_GRID} ${drawuiCore.ICON_GRID}`,width:e,height:e,fill:"none","aria-hidden":"true",children:[o.disc&&jsxRuntime.jsx("circle",{cx:drawuiCore.ICON_GRID/2,cy:drawuiCore.ICON_GRID/2,r:drawuiCore.ICON_GRID/2-1,fill:o.disc}),o.layers.map((r,h)=>{let c=r.fill??"ink",a=r.stroke??"ink";return jsxRuntime.jsx("path",{d:r.d,fill:c==="none"?"none":c==="ink"?n:c,...a==="none"?{}:{stroke:a==="ink"?n:a,strokeWidth:r.w??1.8,strokeLinecap:"round",strokeLinejoin:"round"}},h)}),o.label&&jsxRuntime.jsx("text",{x:drawuiCore.ICON_GRID/2,y:drawuiCore.ICON_GRID/2+.5,textAnchor:"middle",dominantBaseline:"central",fontFamily:"sans-serif",fontSize:o.label.size??13,fill:o.label.color,children:o.label.text})]})}var go="drawui:recentIcons",wo=12;function zt(o,e){let n=/^#?([0-9a-f]{6})$/i.exec(o.trim());if(!n)return o;let r=parseInt(n[1],16);return `rgba(${r>>16&255}, ${r>>8&255}, ${r&255}, ${e})`}function un(){if(typeof window>"u")return [];try{let o=JSON.parse(window.localStorage.getItem(go)||"[]");return Array.isArray(o)?o.filter(e=>typeof e=="string").slice(0,wo):[]}catch{return []}}function pn(o){if(!(typeof window>"u"))try{window.localStorage.setItem(go,JSON.stringify(o));}catch{}}var bo=o=>({"--dw-icon-cat":o,"--dw-icon-cat-soft":zt(o,.12)}),vo=react.memo(function({onPick:e,onClose:n}){U();let[r,h]=react.useState(""),[c,a]=react.useState(drawuiCore.ICON_CATEGORIES[0].id),[l,S]=react.useState(un),g=react.useRef(null),p=react.useRef(null);react.useEffect(()=>{p.current?.focus();},[]),react.useEffect(()=>{let d=C=>{let Z=g.current;Z&&(Z.contains(C.target)||C.target?.closest?.("[data-icon-toggle]")||n());},E=C=>{C.key==="Escape"&&(C.stopPropagation(),n());};return window.addEventListener("pointerdown",d),window.addEventListener("keydown",E),()=>{window.removeEventListener("pointerdown",d),window.removeEventListener("keydown",E);}},[n]);let b=react.useMemo(()=>l.map(d=>drawuiCore.getIcon(d)).filter(d=>!!d),[l]),x=react.useMemo(()=>r.trim()?drawuiCore.searchIcons(r):c==="recent"?b:drawuiCore.iconsByCategory(c),[r,c,b]),N=c==="recent"?drawuiCore.ICON_CATEGORY_INK.status:drawuiCore.ICON_CATEGORY_INK[c]??drawuiCore.ICON_DEFAULT_INK,K=r.trim()?drawuiCore.t("icon.search"):c==="recent"?drawuiCore.t("icon.recent"):drawuiCore.t(drawuiCore.ICON_CATEGORIES.find(d=>d.id===c)?.labelKey??"icon.search"),I=d=>{e(d),S(E=>{let C=[d.id,...E.filter(Z=>Z!==d.id)].slice(0,wo);return pn(C),C});};return jsxRuntime.jsxs("div",{className:"drawui-icon-panel",ref:g,style:{"--dw-icon-accent":N,"--dw-icon-soft":zt(N,.08),"--dw-icon-ring":zt(N,.22)},children:[jsxRuntime.jsxs("label",{className:"drawui-icon-search",children:[jsxRuntime.jsxs("svg",{viewBox:"0 0 24 24",width:"15",height:"15",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",children:[jsxRuntime.jsx("circle",{cx:"10.5",cy:"10.5",r:"6.5"}),jsxRuntime.jsx("path",{d:"M15.4 15.4L20 20"})]}),jsxRuntime.jsx("input",{ref:p,value:r,onChange:d=>h(d.target.value),onKeyDown:d=>{d.key==="Enter"&&x.length>0&&I(x[0]);},placeholder:drawuiCore.t("icon.search"),"aria-label":drawuiCore.t("icon.search")}),jsxRuntime.jsx("span",{className:"drawui-icon-count",children:x.length})]}),!r.trim()&&jsxRuntime.jsxs("div",{className:"drawui-icon-cats",children:[b.length>0&&jsxRuntime.jsxs("button",{type:"button",className:`drawui-icon-cat${c==="recent"?" active":""}`,style:bo(drawuiCore.ICON_CATEGORY_INK.status),onClick:()=>a("recent"),children:[jsxRuntime.jsx("i",{className:"drawui-icon-dot"}),drawuiCore.t("icon.recent")]}),drawuiCore.ICON_CATEGORIES.map(d=>jsxRuntime.jsxs("button",{type:"button",className:`drawui-icon-cat${c===d.id?" active":""}`,style:bo(drawuiCore.ICON_CATEGORY_INK[d.id]??drawuiCore.ICON_DEFAULT_INK),onClick:()=>a(d.id),children:[jsxRuntime.jsx("i",{className:"drawui-icon-dot"}),drawuiCore.t(d.labelKey)]},d.id))]}),jsxRuntime.jsxs("div",{className:"drawui-icon-card",children:[jsxRuntime.jsxs("div",{className:"drawui-icon-card-head",children:[jsxRuntime.jsx("span",{className:"drawui-icon-card-title",children:K}),jsxRuntime.jsx("span",{className:"drawui-icon-card-count",children:x.length})]}),jsxRuntime.jsxs("div",{className:"drawui-icon-grid",children:[x.map(d=>jsxRuntime.jsx("button",{type:"button",className:"drawui-icon-item",title:`${d.zh} / ${d.en}`,"aria-label":`${d.zh} ${d.en}`,onClick:()=>I(d),children:jsxRuntime.jsx(dn,{icon:d,size:30,ink:drawuiCore.iconInk(d)})},d.id)),x.length===0&&jsxRuntime.jsx("div",{className:"drawui-icon-empty",children:drawuiCore.t("icon.empty")})]})]})]})});var Le=o=>`${o.x.toFixed(1)},${o.y.toFixed(1)}`,xo=(o,e)=>{let n=e*Math.PI/180;return {x:o.x*Math.cos(n)-o.y*Math.sin(n),y:o.x*Math.sin(n)+o.y*Math.cos(n)}},it={x:Math.SQRT1_2,y:-Math.SQRT1_2},_t={x:4.6,y:19.4},dt={x:19,y:5};function Wt(o,e,n){let r={x:-n.y,y:n.x},h=a=>({x:e.x-n.x*a,y:e.y-n.y*a}),c=(a,l)=>({x:a.x+r.x*l,y:a.y+r.y*l});switch(o){case "end":{let a=h(5.6);return jsxRuntime.jsx("polygon",{points:`${Le(e)} ${Le(c(a,2.7))} ${Le(c(a,-2.7))}`,fill:"currentColor",stroke:"none"})}case "inheritance":case "realization":{let a=h(8.6);return jsxRuntime.jsx("polygon",{points:`${Le(e)} ${Le(c(a,3.5))} ${Le(c(a,-3.5))}`,fill:"none"})}case "aggregation":case "composition":{let a=h(4.3),l=h(8.6);return jsxRuntime.jsx("polygon",{points:`${Le(e)} ${Le(c(a,2.7))} ${Le(l)} ${Le(c(a,-2.7))}`,fill:o==="composition"?"currentColor":"none",stroke:"currentColor"})}case "dependency":{let a=xo({x:-n.x,y:-n.y},30),l=xo({x:-n.x,y:-n.y},-30);return jsxRuntime.jsx("path",{d:`M ${Le({x:e.x+a.x*5.8,y:e.y+a.y*5.8})} L ${Le(e)} L ${Le({x:e.x+l.x*5.8,y:e.y+l.y*5.8})}`,fill:"none"})}default:return null}}function Ae(o,e){let n=e||o==="dependency"||o==="realization",r=n?{x:dt.x-it.x*8.6,y:dt.y-it.y*8.6}:dt,h={x:-it.x,y:-it.y};return jsxRuntime.jsxs("svg",{viewBox:"0 0 24 24",width:"18",height:"18",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntime.jsx("line",{x1:_t.x,y1:_t.y,x2:r.x,y2:r.y,strokeDasharray:n?"3 2.6":void 0}),(o==="end"||o==="both")&&Wt("end",dt,it),(o==="start"||o==="both")&&Wt("end",_t,h),o!=="none"&&o!=="start"&&o!=="end"&&o!=="both"?Wt(o,dt,it):null]})}var wt=o=>jsxRuntime.jsx("svg",{viewBox:"0 0 24 24",width:"18",height:"18",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:jsxRuntime.jsx("path",{d:o})}),yn=[{type:"straight",labelKey:"style.connection.straight",icon:wt("M3 12h18")},{type:"polyline",labelKey:"style.connection.polyline",icon:wt("M4 8 C 12 8, 12 16, 20 16")},{type:"orthogonal",labelKey:"style.connection.orthogonal",icon:wt("M5 5v14h14")},{type:"curve",labelKey:"style.connection.curve",icon:wt("M3 13 C 6 7, 9 7, 12 12 C 15 17, 18 17, 21 11")}],Co=[{key:"none",arrowHead:"none",dashed:false,labelKey:"style.arrowhead.none",icon:Ae("none",false)},{key:"end",arrowHead:"end",dashed:false,labelKey:"style.arrowhead.end",icon:Ae("end",false)},{key:"start",arrowHead:"start",dashed:false,labelKey:"style.arrowhead.start",icon:Ae("start",false)},{key:"both",arrowHead:"both",dashed:false,labelKey:"style.arrowhead.both",icon:Ae("both",false)},{key:"none-dashed",arrowHead:"none",dashed:true,labelKey:"style.arrowhead.none-dashed",icon:Ae("none",true)},{key:"both-dashed",arrowHead:"both",dashed:true,labelKey:"style.arrowhead.both-dashed",icon:Ae("both",true)}],So=[{key:"inheritance",arrowHead:"inheritance",dashed:false,labelKey:"style.arrowhead.inheritance",icon:Ae("inheritance",false)},{key:"composition",arrowHead:"composition",dashed:false,labelKey:"style.arrowhead.composition",icon:Ae("composition",false)},{key:"aggregation",arrowHead:"aggregation",dashed:false,labelKey:"style.arrowhead.aggregation",icon:Ae("aggregation",false)},{key:"dependency",arrowHead:"dependency",dashed:true,labelKey:"style.arrowhead.dependency",icon:Ae("dependency",true)},{key:"realization",arrowHead:"realization",dashed:true,labelKey:"style.arrowhead.realization",icon:Ae("realization",true)}],ko=[...Co,...So];function fn(o,e){let n=ko.find(r=>r.arrowHead===o&&r.dashed===e);return n?n.key:ko.find(r=>r.arrowHead===o)?.key}var xt=react.memo(function({connectionType:e,arrowHead:n,dashed:r,onConnectionTypeChange:h,onArrowStyleChange:c,onOptionHover:a,onOptionLeave:l}){U();let S=fn(n,r),g=p=>jsxRuntime.jsx("div",{className:"drawui-connection-row",children:p.map(b=>jsxRuntime.jsxs("button",{className:`drawui-connection-btn${S===b.key?" active":""}`,onClick:()=>c(b),"data-drawui-tip":a?void 0:drawuiCore.t(b.labelKey),onMouseEnter:a?x=>a(b.labelKey,x.currentTarget):void 0,onMouseLeave:a?l:void 0,"aria-label":drawuiCore.t(b.labelKey),type:"button",children:[jsxRuntime.jsx("span",{className:"drawui-connection-icon",children:b.icon}),jsxRuntime.jsx("span",{className:"drawui-connection-label",children:drawuiCore.t(b.labelKey)})]},b.key))});return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("div",{className:"drawui-style-popover-title",children:drawuiCore.t("style.connection")}),jsxRuntime.jsx("div",{className:"drawui-connection-row",children:yn.map(p=>jsxRuntime.jsxs("button",{className:`drawui-connection-btn${e===p.type?" active":""}`,onClick:()=>h(p.type),"data-drawui-tip":a?void 0:drawuiCore.t(p.labelKey),onMouseEnter:a?b=>a(p.labelKey,b.currentTarget):void 0,onMouseLeave:a?l:void 0,"aria-label":drawuiCore.t(p.labelKey),type:"button",children:[jsxRuntime.jsx("span",{className:"drawui-connection-icon",children:p.icon}),jsxRuntime.jsx("span",{className:"drawui-connection-label",children:drawuiCore.t(p.labelKey)})]},p.type))}),jsxRuntime.jsx("div",{className:"drawui-style-popover-title",children:drawuiCore.t("style.arrow")}),g(Co),jsxRuntime.jsx("div",{className:"drawui-style-popover-title",children:drawuiCore.t("style.uml")}),g(So)]})});var Mo=[{type:"rectangle",icon:jsxRuntime.jsx("rect",{x:"3",y:"5",width:"18",height:"14",rx:"0"})},{type:"rounded-rectangle",icon:jsxRuntime.jsx("rect",{x:"3",y:"5",width:"18",height:"14",rx:"4"})},{type:"circle",icon:jsxRuntime.jsx("circle",{cx:"12",cy:"12",r:"8"})},{type:"ellipse",icon:jsxRuntime.jsx("ellipse",{cx:"12",cy:"12",rx:"9",ry:"6"})},{type:"diamond",icon:jsxRuntime.jsx("path",{d:"M12 3L21 12L12 21L3 12Z"})},{type:"triangle",icon:jsxRuntime.jsx("path",{d:"M12 4L20 19L4 19Z"})},{type:"hexagon",icon:jsxRuntime.jsx("path",{d:"M12 3L20 7.5V16.5L12 21L4 16.5V7.5Z"})},{type:"parallelogram",icon:jsxRuntime.jsx("path",{d:"M7 5L20 5L17 19L4 19Z"})},{type:"trapezoid",icon:jsxRuntime.jsx("path",{d:"M6 5L18 5L21 19L3 19Z"})},{type:"pentagon",icon:jsxRuntime.jsx("path",{d:"M12 3L21 10L17.5 21L6.5 21L3 10Z"})},{type:"octagon",icon:jsxRuntime.jsx("path",{d:"M8 3L16 3L21 8L21 16L16 21L8 21L3 16L3 8Z"})},{type:"star",icon:jsxRuntime.jsx("path",{d:"M12 2L14.5 8.5L21 9L16 13.5L17.5 20L12 16.5L6.5 20L8 13.5L3 9L9.5 8.5Z"})},{type:"cylinder",icon:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("ellipse",{cx:"12",cy:"6.5",rx:"6",ry:"2.8"}),jsxRuntime.jsx("path",{d:"M6 6.5v11c0 1.5 2.7 2.8 6 2.8s6-1.3 6-2.8v-11"})]})},{type:"cloud",icon:jsxRuntime.jsx("path",{d:"M7 18.5h9.4a3.4 3.4 0 0 0 .3-6.8 5 5 0 0 0-9.5-1.2A3.9 3.9 0 0 0 7 18.5Z"})},{type:"heart",icon:jsxRuntime.jsx("path",{d:"M12 20.3S4.6 15.7 4.6 10.5A4.1 4.1 0 0 1 12 7.6a4.1 4.1 0 0 1 7.4 2.9c0 5.2-7.4 9.8-7.4 9.8Z"})},{type:"block-arrow-right",icon:jsxRuntime.jsx("path",{d:"M3 9h9V5l9 7-9 7v-4H3Z"})},{type:"block-arrow-left",icon:jsxRuntime.jsx("path",{d:"M21 9h-9V5L3 12l9 7v-4h9Z"})},{type:"block-arrow-up",icon:jsxRuntime.jsx("path",{d:"M9 21v-9H5l7-9 7 9h-4v9Z"})},{type:"block-arrow-down",icon:jsxRuntime.jsx("path",{d:"M9 3v9H5l7 9 7-9h-4V3Z"})},{type:"block-arrow-double",icon:jsxRuntime.jsx("path",{d:"M2 12l4.5-6v3.5h11V6L22 12l-4.5 6v-3.5h-11V18Z"})},{type:"right-triangle",icon:jsxRuntime.jsx("path",{d:"M4 4v16h16Z"})},{type:"cross",icon:jsxRuntime.jsx("path",{d:"M9.5 3h5v6.5H21v5h-6.5V21h-5v-6.5H3v-5h6.5Z"})},{type:"envelope",icon:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("rect",{x:"3",y:"5",width:"18",height:"14"}),jsxRuntime.jsx("path",{d:"M3 5l18 14M21 5L3 19"})]})},{type:"checkbox",icon:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("rect",{x:"3",y:"3",width:"18",height:"18",rx:"3"}),jsxRuntime.jsx("path",{d:"M7.8 12.3l2.7 2.7 5.7-6.2"})]})},{type:"speech-rect",icon:jsxRuntime.jsx(jsxRuntime.Fragment,{children:jsxRuntime.jsx("path",{d:"M3 5h18v11H8l-3.2 3.2V16H3Z"})})},{type:"speech-round",icon:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("ellipse",{cx:"12",cy:"10.5",rx:"9",ry:"6.5"}),jsxRuntime.jsx("path",{d:"M8 16.2 6 21l5-3.4"})]})},{type:"cube",icon:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("path",{d:"M12 3 20 7.5v9L12 21 4 16.5v-9Z"}),jsxRuntime.jsx("path",{d:"M4 7.5 12 12l8-4.5M12 12v9"})]})},{type:"cuboid",icon:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("path",{d:"M12 4 21 8.5v7L12 20 3 15.5v-7Z"}),jsxRuntime.jsx("path",{d:"M3 8.5 12 13l9-4.5M12 13v7"})]})},{type:"triangular-pyramid",icon:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("path",{d:"M12 3 21.5 16.5 12 21 2.5 16.5Z"}),jsxRuntime.jsx("path",{d:"M12 3v18M2.5 16.5h19"})]})},{type:"quadrangular-pyramid",icon:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("path",{d:"M12 3 22.5 17 12 21 1.5 17Z"}),jsxRuntime.jsx("path",{d:"M12 3v18M12 12 1.5 17M12 12l10.5 5"})]})},{type:"sphere",icon:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("circle",{cx:"12",cy:"12",r:"9"}),jsxRuntime.jsx("ellipse",{cx:"12",cy:"12",rx:"9",ry:"2.5"})]})},{type:"ellipsoid",icon:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("ellipse",{cx:"12",cy:"12",rx:"10",ry:"6.5"}),jsxRuntime.jsx("ellipse",{cx:"12",cy:"12",rx:"10",ry:"1.9"})]})},{type:"pie",icon:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("ellipse",{cx:"12",cy:"9",rx:"9",ry:"3.5"}),jsxRuntime.jsx("path",{d:"M3 9v5c0 1.9 4 3.5 9 3.5s9-1.6 9-3.5V9"}),jsxRuntime.jsx("path",{d:"M12 9 5.6 12M12 9l6.4 3"})]})},{type:"hollow-pie",icon:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("ellipse",{cx:"12",cy:"9",rx:"9",ry:"3.5"}),jsxRuntime.jsx("path",{d:"M3 9v5c0 1.9 4 3.5 9 3.5s9-1.6 9-3.5V9"}),jsxRuntime.jsx("ellipse",{cx:"12",cy:"9",rx:"3.6",ry:"1.5"})]})},{type:"sector",icon:jsxRuntime.jsx("path",{d:"M12 3a9 9 0 1 0 9 9h-9Z"})},{type:"delay",icon:jsxRuntime.jsx("path",{d:"M3 5h12a7 7 0 0 1 0 14H3Z"})},{type:"predefined-process",icon:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("rect",{x:"3",y:"5",width:"18",height:"14"}),jsxRuntime.jsx("path",{d:"M6.5 5v14M17.5 5v14"})]})},{type:"document",icon:jsxRuntime.jsx("path",{d:"M3 5h18v10.5c-5 3.5-13-3.5-18 0Z"})},{type:"stadium",icon:jsxRuntime.jsx("rect",{x:"3",y:"6.5",width:"18",height:"11",rx:"5.5"})},{type:"chevron",icon:jsxRuntime.jsx("path",{d:"M2 4h9l9 8-9 8H2l8-8Z"})},{type:"brace-left",icon:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("path",{d:"M1 1C3.9 1 5.1 2.4 5.1 5.1c0 3.7 1.2 6.9 2.9 6.9-1.7 0-2.9 3.2-2.9 6.9 0 2.7-1.2 4.1-4.1 4.1"}),jsxRuntime.jsx("path",{d:"M12 9.6h10M12 14.4h10"})]})},{type:"brace-right",icon:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("path",{d:"M23 1c-2.9 0-4.1 1.4-4.1 4.1 0 3.7-1.2 6.9-2.9 6.9 1.7 0 2.9 3.2 2.9 6.9 0 2.7 1.2 4.1 4.1 4.1"}),jsxRuntime.jsx("path",{d:"M2 9.6h10M2 14.4h10"})]})},{type:"uml-class",icon:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("rect",{x:"3",y:"3",width:"18",height:"18",rx:"2"}),jsxRuntime.jsx("line",{x1:"3",y1:"9",x2:"21",y2:"9"}),jsxRuntime.jsx("line",{x1:"3",y1:"15",x2:"21",y2:"15"}),jsxRuntime.jsx("line",{x1:"7",y1:"6",x2:"17",y2:"6"}),jsxRuntime.jsx("line",{x1:"7",y1:"12",x2:"13",y2:"12"}),jsxRuntime.jsx("line",{x1:"7",y1:"18",x2:"11",y2:"18"})]})},{type:"uml-interface",icon:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("rect",{x:"3",y:"3",width:"18",height:"18",rx:"2"}),jsxRuntime.jsx("line",{x1:"3",y1:"9",x2:"21",y2:"9"}),jsxRuntime.jsx("line",{x1:"7",y1:"6",x2:"17",y2:"6"}),jsxRuntime.jsx("line",{x1:"7",y1:"12",x2:"13",y2:"12"})]})},{type:"class-catalog",icon:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("rect",{x:"3",y:"5",width:"18",height:"14",rx:"1.5"}),jsxRuntime.jsx("line",{x1:"6.6",y1:"5",x2:"6.6",y2:"19"}),jsxRuntime.jsx("line",{x1:"17.4",y1:"5",x2:"17.4",y2:"19"})]})}],gn=[{key:"basic",labelKey:"shapeGroup.basic",items:[{type:"rectangle"},{type:"rounded-rectangle"},{type:"stadium"},{type:"circle"},{type:"ellipse"},{type:"diamond"},{type:"triangle"},{type:"right-triangle"},{type:"hexagon"},{type:"parallelogram"},{type:"trapezoid"},{type:"pentagon"},{type:"octagon"},{type:"star"},{type:"envelope"},{type:"checkbox"}]},{key:"flowchart",labelKey:"shapeGroup.flowchart",items:[{type:"rectangle",labelKey:"flow.process"},{type:"rounded-rectangle",labelKey:"flow.step"},{type:"stadium",labelKey:"flow.startEnd"},{type:"diamond",labelKey:"flow.decision"},{type:"parallelogram",labelKey:"flow.data"},{type:"trapezoid",labelKey:"flow.manual"},{type:"hexagon",labelKey:"flow.preparation"},{type:"cylinder",labelKey:"flow.database"},{type:"delay",labelKey:"flow.delay"},{type:"predefined-process"},{type:"document"},{type:"block-arrow-right"},{type:"block-arrow-left"},{type:"block-arrow-up"},{type:"block-arrow-down"},{type:"block-arrow-double"}]},{key:"uml",labelKey:"shapeGroup.uml",items:[{type:"uml-class"},{type:"uml-interface"},{type:"rounded-rectangle",labelKey:"class.plain"},{type:"class-catalog"}]},{key:"solid",labelKey:"shapeGroup.solid",items:[{type:"cylinder"},{type:"cube"},{type:"cuboid"},{type:"triangular-pyramid"},{type:"quadrangular-pyramid"},{type:"sphere"},{type:"ellipsoid"},{type:"pie"},{type:"hollow-pie"}]},{key:"other",labelKey:"shapeGroup.other",items:[{type:"cloud"},{type:"heart"},{type:"cross"},{type:"sector"},{type:"chevron"},{type:"speech-rect"},{type:"speech-round"},{type:"brace-left"},{type:"brace-right"}]}],wn=new Map(Mo.map(o=>[o.type,o.icon])),vn=new Set(Mo.map(o=>o.type)),xn=jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("path",{d:"M4 4h16v11l-5 5H4Z"}),jsxRuntime.jsx("path",{d:"M20 15h-5v5"})]}),kn=[{type:"arrow",icon:"M5 12h14M12 5l7 7-7 7",labelKey:"toolbar.arrow"},{type:"text",icon:"M4 7V4h16v3M9 20h6M12 4v16",labelKey:"toolbar.text"}],Cn="M17 3a2.85 2.85 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3Z",Ut=8,Sn=6,Zt="M0 -1Q0.24 -0.24 1 0Q0.24 0.24 0 1Q-0.24 0.24 -1 0Q-0.24 -0.24 0 -1Z",Mn=[{type:"eraser",icon:"M7 21l-4.3-4.3c-1-1-1-2.5 0-3.4l9.6-9.6c1-1 2.5-1 3.4 0l5.6 5.6c1 1 1 2.5 0 3.4L13 21M22 21H7M5 11l9 9",labelKey:"toolbar.eraser"}],Gt=react.memo(function({activeTool:e,onToolChange:n,showGrid:r,onToggleGrid:h,canUndo:c=false,canRedo:a=false,onUndo:l,onRedo:S,onExport:g,onExportData:p,onImportData:b,onHighlighterColorChange:x,onStickyNoteColorChange:N,onInsertIcon:K,onInsertTable:I,arrowStyle:d,onArrowStyleChange:E}){let[C,Z]=react.useState(false),[s,w]=react.useState(false),[m,G]=react.useState(null),[z,_]=react.useState(false),[Q,F]=react.useState(false),[H,Y]=react.useState(mt),[j,ee]=react.useState(false),[M,ue]=react.useState(bt),[xe,B]=react.useState(false),[Re,ye]=react.useState(false),[se,Te]=react.useState(null),ke=react.useRef(null),Ne=react.useRef(null),fe=react.useRef(null),O=react.useRef(null),v=react.useRef(null);U();let pe=[{format:"png",labelKey:"toolbar.export.png"},{format:"svg",labelKey:"toolbar.export.svg"},{format:"pdf",labelKey:"toolbar.export.pdf"}],oe=()=>{ke.current&&(clearTimeout(ke.current),ke.current=null),_(true);},le=()=>{ke.current=window.setTimeout(()=>_(false),200);},X=react.useRef(null),He=()=>{_(false),y(),X.current?.click();},me=u=>{let W=u.target.files?.[0];W&&b?.(W),u.target.value="";},We=()=>{Ne.current&&(clearTimeout(Ne.current),Ne.current=null),Z(true);},Ue=()=>{Ne.current=window.setTimeout(()=>{Z(false),y();},200);},Ye=()=>{fe.current&&(clearTimeout(fe.current),fe.current=null),w(true);},je=()=>{fe.current=window.setTimeout(()=>{w(false),y();},200);},Ee=(u,W)=>{let i=u.closest(".drawui-toolbar");if(!i)return;let T=u.getBoundingClientRect(),f=i.getBoundingClientRect(),k=T.bottom+46>window.innerHeight;G({label:W,x:T.left-f.left+T.width/2,y:k?T.top-f.top-8:T.bottom-f.top+8,above:k});},y=()=>G(null),$=()=>{O.current&&(clearTimeout(O.current),O.current=null),F(true);},P=()=>{O.current=window.setTimeout(()=>F(false),200);},D=u=>{Y(u),co(u),x?.(u),n("highlighter");},q=()=>{v.current&&(clearTimeout(v.current),v.current=null),ee(true);},ne=()=>{v.current=window.setTimeout(()=>ee(false),200);},Ie=u=>{ue(u),ho(u),N?.(u),n("sticky-note"),ee(false);};return jsxRuntime.jsx("div",{className:"drawui-toolbar-container",children:jsxRuntime.jsxs("div",{className:"drawui-toolbar",children:[jsxRuntime.jsx("button",{className:`drawui-toolbar-button ${e==="select"?"active":""}`,onClick:()=>n("select"),onMouseEnter:u=>Ee(u.currentTarget,"toolbar.select"),onMouseLeave:y,children:jsxRuntime.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:jsxRuntime.jsx("path",{d:"M6 3 6 19.6 10.3 15.7 13 21.1 15.8 19.8 13.1 14.5 18.6 14 Z"})})}),jsxRuntime.jsx("button",{className:`drawui-toolbar-button ${e==="hand"?"active":""}`,onClick:()=>n("hand"),onMouseEnter:u=>Ee(u.currentTarget,"toolbar.hand"),onMouseLeave:y,children:jsxRuntime.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntime.jsx("path",{d:"M7.6 12.6V5.6a1.5 1.5 0 0 1 3 0v4.6"}),jsxRuntime.jsx("path",{d:"M10.6 10.2V4.1a1.5 1.5 0 0 1 3 0v6.1"}),jsxRuntime.jsx("path",{d:"M13.6 10.4V5.2a1.5 1.5 0 0 1 3 0v6.6"}),jsxRuntime.jsx("path",{d:"M16.6 11.8V8.1a1.5 1.5 0 0 1 3 0v6.6a6.2 6.2 0 0 1-6.2 6.2h-1.5a6.2 6.2 0 0 1-5-2.5l-3.2-4.4a1.5 1.5 0 0 1 2.3-1.9l2.6 2.5"})]})}),jsxRuntime.jsx("div",{className:"drawui-toolbar-divider"}),jsxRuntime.jsxs("div",{className:"drawui-toolbar-dropdown",onMouseEnter:We,onMouseLeave:Ue,children:[jsxRuntime.jsx("button",{className:`drawui-toolbar-button ${vn.has(e)?"active":""}`,onClick:()=>{n("rounded-rectangle"),Z(false),y();},"data-drawui-tip":C?void 0:drawuiCore.t("toolbar.shapes"),children:jsxRuntime.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:jsxRuntime.jsx("rect",{x:"3",y:"5",width:"18",height:"14",rx:"4",ry:"4"})})}),C&&jsxRuntime.jsx("div",{className:"drawui-toolbar-shape-grid drawui-shape-menu",children:jsxRuntime.jsx("div",{className:"drawui-shape-menu-scroll",children:gn.map(u=>jsxRuntime.jsxs("div",{className:"drawui-shape-group",children:[jsxRuntime.jsx("div",{className:"drawui-shape-group-title",children:drawuiCore.t(u.labelKey)}),jsxRuntime.jsx("div",{className:"drawui-shape-group-grid",children:u.items.map(W=>{let i=W.labelKey??`tool.${W.type}`;return jsxRuntime.jsx("button",{type:"button",className:`drawui-toolbar-shape-item ${e===W.type?"active":""}`,onClick:()=>{n(W.type),Z(false),y();},onMouseEnter:T=>Ee(T.currentTarget,i),onMouseLeave:y,"aria-label":drawuiCore.t(i),children:jsxRuntime.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:wn.get(W.type)})},`${u.key}-${W.type}`)})})]},u.key))})})]}),jsxRuntime.jsxs("div",{className:"drawui-toolbar-dropdown",onMouseEnter:q,onMouseLeave:ne,children:[jsxRuntime.jsxs("button",{className:`drawui-toolbar-button ${e==="sticky-note"?"active":""}`,onClick:()=>{n("sticky-note"),ee(false),y();},"data-drawui-tip":j?void 0:drawuiCore.t("tool.sticky-note"),children:[jsxRuntime.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:xn}),jsxRuntime.jsx("span",{className:"drawui-toolbar-color-chip",style:{background:M}})]}),j&&jsxRuntime.jsxs("div",{className:"drawui-toolbar-shape-grid drawui-sticky-panel",children:[jsxRuntime.jsxs("div",{className:"drawui-sticky-panel-head",children:[jsxRuntime.jsx("span",{className:"drawui-sticky-panel-title",children:drawuiCore.t("tool.sticky-note")}),jsxRuntime.jsx("span",{className:"drawui-sticky-panel-key",children:"N"})]}),jsxRuntime.jsx("div",{className:"drawui-sticky-panel-grid",children:drawuiCore.STICKY_NOTE_COLORS.map(u=>jsxRuntime.jsx("button",{type:"button","aria-label":u,className:`drawui-sticky-swatch${M.toLowerCase()===u.toLowerCase()?" active":""}`,style:{background:u},onClick:()=>Ie(u)},u))})]})]}),jsxRuntime.jsxs("div",{className:"drawui-toolbar-dropdown",children:[jsxRuntime.jsx("button",{className:`drawui-toolbar-button ${xe?"active":""}`,"data-icon-toggle":"","data-drawui-tip":xe?void 0:drawuiCore.t("toolbar.icon"),onClick:()=>{B(u=>!u),y();},children:jsxRuntime.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntime.jsx("circle",{cx:"12",cy:"12",r:"9"}),jsxRuntime.jsx("path",{d:"M8.5 10.2h0.01"}),jsxRuntime.jsx("path",{d:"M15.5 10.2h0.01"}),jsxRuntime.jsx("path",{d:"M8.8 14.2c0.9 1 2 1.5 3.2 1.5s2.3 -0.5 3.2 -1.5"})]})}),xe&&jsxRuntime.jsx(vo,{onPick:u=>K?.(u.id),onClose:()=>B(false)})]}),jsxRuntime.jsx("div",{className:"drawui-toolbar-divider"}),jsxRuntime.jsxs("div",{className:"drawui-toolbar-dropdown",onMouseEnter:Ye,onMouseLeave:je,children:[jsxRuntime.jsx("button",{className:`drawui-toolbar-button ${e==="arrow"?"active":""}`,onClick:()=>{n("arrow"),w(false),y();},"data-drawui-tip":s?void 0:drawuiCore.t("toolbar.arrow"),children:jsxRuntime.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:jsxRuntime.jsx("path",{d:"M5 12h14M12 5l7 7-7 7"})})}),s&&jsxRuntime.jsx("div",{className:"drawui-toolbar-shape-grid drawui-arrow-menu",onPointerDown:u=>{u.target.closest("button")||(w(false),y());},children:jsxRuntime.jsx(xt,{connectionType:d?.connectionType??"straight",arrowHead:d?.arrowHead??"end",dashed:!!d?.dashed,onConnectionTypeChange:u=>{E?.({connectionType:u}),n("arrow"),w(false),y();},onArrowStyleChange:u=>{E?.({arrowHead:u.arrowHead,dashed:u.dashed}),n("arrow"),w(false),y();},onOptionHover:(u,W)=>Ee(W,u),onOptionLeave:y})})]}),kn.filter(u=>u.type!=="arrow").map(u=>jsxRuntime.jsx("button",{className:`drawui-toolbar-button ${e===u.type?"active":""}`,onClick:()=>n(u.type),"data-drawui-tip":drawuiCore.t(u.labelKey),children:jsxRuntime.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:jsxRuntime.jsx("path",{d:u.icon})})},u.type)),jsxRuntime.jsx("div",{className:"drawui-toolbar-divider"}),jsxRuntime.jsx("button",{className:`drawui-toolbar-button ${e==="pen"?"active":""}`,onClick:()=>n("pen"),"data-drawui-tip":drawuiCore.t("toolbar.pen"),children:jsxRuntime.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:jsxRuntime.jsx("path",{d:Cn})})}),jsxRuntime.jsxs("div",{className:"drawui-toolbar-dropdown",onMouseEnter:$,onMouseLeave:P,children:[jsxRuntime.jsxs("button",{className:`drawui-toolbar-button ${e==="highlighter"?"active":""}`,onClick:()=>n("highlighter"),onMouseEnter:u=>Ee(u.currentTarget,"toolbar.highlighter"),onMouseLeave:y,children:[jsxRuntime.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntime.jsx("path",{d:"M4.6 19.6 12.8 11.4",strokeWidth:"3.6",strokeLinecap:"square"}),jsxRuntime.jsx("path",{d:"M14.6 9.6 16.2 8",strokeWidth:"3.6",strokeLinecap:"square"}),jsxRuntime.jsxs("g",{fill:"currentColor",stroke:"none",children:[jsxRuntime.jsx("path",{d:Zt,transform:"translate(7.4 5.4) scale(2.4)"}),jsxRuntime.jsx("path",{d:Zt,transform:"translate(18.4 3.4) scale(2.5)"}),jsxRuntime.jsx("path",{d:Zt,transform:"translate(21 10.6) scale(2.2)"})]})]}),jsxRuntime.jsx("span",{className:"drawui-toolbar-color-chip",style:{background:H}})]}),Q&&jsxRuntime.jsx("div",{className:"drawui-toolbar-shape-grid drawui-toolbar-highlighter-grid",children:so.map(u=>jsxRuntime.jsx("button",{type:"button","aria-label":u,className:`drawui-highlighter-swatch${H.toLowerCase()===u.toLowerCase()?" active":""}`,style:{background:u},onClick:()=>D(u)},u))})]}),jsxRuntime.jsx("div",{className:"drawui-toolbar-divider"}),Mn.map(u=>jsxRuntime.jsx("button",{className:`drawui-toolbar-button ${e===u.type?"active":""}`,onClick:()=>n(u.type),"data-drawui-tip":drawuiCore.t(u.labelKey),children:jsxRuntime.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:jsxRuntime.jsx("path",{d:u.icon})})},u.type)),jsxRuntime.jsx("button",{className:`drawui-toolbar-button ${e==="mind-map"?"active":""}`,onClick:()=>n("mind-map"),"data-drawui-tip":drawuiCore.t("toolbar.mind-map"),children:jsxRuntime.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntime.jsx("circle",{cx:"5",cy:"12",r:"2.4"}),jsxRuntime.jsx("path",{d:"M7.4 12h3.6"}),jsxRuntime.jsx("path",{d:"M11 12c0-2.6 1.6-4.4 3.4-4.4"}),jsxRuntime.jsx("path",{d:"M11 12c0 2.6 1.6 4.4 3.4 4.4"}),jsxRuntime.jsx("circle",{cx:"17.4",cy:"7.6",r:"1.7"}),jsxRuntime.jsx("circle",{cx:"17.4",cy:"16.4",r:"1.7"}),jsxRuntime.jsx("circle",{cx:"15.6",cy:"12",r:"1.7"})]})}),jsxRuntime.jsxs("div",{className:"drawui-toolbar-dropdown",children:[jsxRuntime.jsx("button",{className:`drawui-toolbar-button ${Re?"active":""}`,onClick:()=>ye(u=>!u),"data-drawui-tip":drawuiCore.t("toolbar.table"),"data-table-toggle":true,children:jsxRuntime.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinejoin:"round",children:[jsxRuntime.jsx("rect",{x:"3",y:"4",width:"18",height:"16",rx:"2"}),jsxRuntime.jsx("line",{x1:"3",y1:"9.3",x2:"21",y2:"9.3"}),jsxRuntime.jsx("line",{x1:"9",y1:"4",x2:"9",y2:"20"}),jsxRuntime.jsx("line",{x1:"15",y1:"4",x2:"15",y2:"20"})]})}),Re&&jsxRuntime.jsxs("div",{className:"drawui-table-picker",children:[jsxRuntime.jsx("div",{className:"drawui-table-picker-hint",children:se?`${se.rows} \xD7 ${se.cols}`:drawuiCore.t("table.pickHint")}),jsxRuntime.jsx("div",{className:"drawui-table-picker-grid",children:Array.from({length:Sn*Ut},(u,W)=>{let i=Math.floor(W/Ut),T=W%Ut,f=se&&i<se.rows&&T<se.cols;return jsxRuntime.jsx("button",{type:"button","aria-label":`${i+1}x${T+1}`,className:"drawui-table-picker-cell",style:f?{borderColor:"var(--dw-primary)",background:"var(--dw-primary-weak)"}:void 0,onMouseEnter:()=>Te({rows:i+1,cols:T+1}),onClick:()=>{I?.(i+1,T+1),ye(false),Te(null),y();}},W)})})]})]}),jsxRuntime.jsx("div",{className:"drawui-toolbar-divider"}),jsxRuntime.jsx("button",{className:`drawui-toolbar-button ${r?"active":""}`,onClick:h,"data-drawui-tip":drawuiCore.t("toolbar.grid"),children:jsxRuntime.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntime.jsx("rect",{x:"3",y:"3",width:"7",height:"7",rx:"1"}),jsxRuntime.jsx("rect",{x:"14",y:"3",width:"7",height:"7",rx:"1"}),jsxRuntime.jsx("rect",{x:"14",y:"14",width:"7",height:"7",rx:"1"}),jsxRuntime.jsx("rect",{x:"3",y:"14",width:"7",height:"7",rx:"1"})]})}),jsxRuntime.jsx("div",{className:"drawui-toolbar-divider"}),jsxRuntime.jsx("button",{className:"drawui-toolbar-button",onClick:l,disabled:!c,style:c?void 0:{opacity:.4,cursor:"default"},"data-drawui-tip":drawuiCore.t("toolbar.undo"),children:jsxRuntime.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntime.jsx("path",{d:"M3 7v6h6"}),jsxRuntime.jsx("path",{d:"M21 17a9 9 0 0 0-9-9 9 9 0 0 0-6 2.3L3 13"})]})}),jsxRuntime.jsx("button",{className:"drawui-toolbar-button",onClick:S,disabled:!a,style:a?void 0:{opacity:.4,cursor:"default"},"data-drawui-tip":drawuiCore.t("toolbar.redo"),children:jsxRuntime.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntime.jsx("path",{d:"M21 7v6h-6"}),jsxRuntime.jsx("path",{d:"M3 17a9 9 0 0 1 9-9 9 9 0 0 1 6 2.3L21 13"})]})}),jsxRuntime.jsx("div",{className:"drawui-toolbar-divider"}),jsxRuntime.jsxs("div",{className:"drawui-toolbar-dropdown",onMouseEnter:oe,onMouseLeave:le,children:[jsxRuntime.jsx("button",{className:"drawui-toolbar-button","data-drawui-tip":z?void 0:drawuiCore.t("toolbar.export"),children:jsxRuntime.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntime.jsx("path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"}),jsxRuntime.jsx("polyline",{points:"7 10 12 15 17 10"}),jsxRuntime.jsx("line",{x1:"12",y1:"15",x2:"12",y2:"3"})]})}),z&&jsxRuntime.jsxs("div",{className:"drawui-toolbar-shape-grid drawui-toolbar-export-grid",children:[pe.map(u=>jsxRuntime.jsx("button",{className:"drawui-toolbar-shape-item drawui-toolbar-export-item",onClick:()=>{g?.(u.format),_(false);},"data-drawui-tip":drawuiCore.t(u.labelKey),children:drawuiCore.t(u.labelKey)},u.format)),jsxRuntime.jsx("div",{className:"drawui-toolbar-export-divider"}),jsxRuntime.jsx("button",{className:"drawui-toolbar-shape-item drawui-toolbar-export-item",onClick:()=>{p?.(),_(false);},"data-drawui-tip":drawuiCore.t("toolbar.export.data"),children:drawuiCore.t("toolbar.export.data")}),jsxRuntime.jsx("button",{className:"drawui-toolbar-shape-item drawui-toolbar-export-item",onClick:He,"data-drawui-tip":drawuiCore.t("toolbar.import.data"),children:drawuiCore.t("toolbar.import.data")})]})]}),jsxRuntime.jsx("input",{ref:X,type:"file",accept:".json,application/json",style:{display:"none"},onChange:me}),m&&jsxRuntime.jsx("div",{className:`drawui-shape-tip ${m.above?"is-above":"is-below"}`,style:{left:m.x,top:m.y},children:drawuiCore.t(m.label)})]})})});var Vt=react.memo(function({onZoomIn:e,onZoomOut:n,onReset:r,zoomLevel:h=100}){return U(),jsxRuntime.jsxs("div",{className:"drawui-zoom-control",children:[jsxRuntime.jsx("button",{className:"drawui-zoom-button",onClick:e,"data-drawui-tip":drawuiCore.t("zoom.in"),children:jsxRuntime.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntime.jsx("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),jsxRuntime.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"})]})}),jsxRuntime.jsxs("div",{className:"drawui-zoom-level",children:[h,"%"]}),jsxRuntime.jsx("button",{className:"drawui-zoom-button",onClick:n,"data-drawui-tip":drawuiCore.t("zoom.out"),children:jsxRuntime.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:jsxRuntime.jsx("line",{x1:"12",y1:"5",x2:"12",y2:"19"})})}),jsxRuntime.jsx("button",{className:"drawui-zoom-button",onClick:r,"data-drawui-tip":drawuiCore.t("zoom.reset"),children:jsxRuntime.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntime.jsx("path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8"}),jsxRuntime.jsx("path",{d:"M3 3v5h5"})]})})]})});var Lo=["#ffffff","#f1f5f9","#e2e8f0","#ede9fe","#dbeafe","#e0e7ff","#dcfce7","#fef9c3","#fee2e2"],No=["#0f172a","#475569","#94a3b8","#8b5cf6","#3b82f6","#1d4ed8","#16a34a","#eab308","#dc2626"],Hn=Lo.filter(o=>o!=="#f1f5f9"),Pn=[...Hn,...No],An=[...Lo,...No],Eo=15,Io="drawui:customColors";function Kn(){if(typeof window>"u")return [];try{let o=window.localStorage.getItem(Io);if(!o)return [];let e=JSON.parse(o);return Array.isArray(e)?e.filter(n=>typeof n=="string").slice(-Eo):[]}catch{return []}}function On(o){if(!(typeof window>"u"))try{window.localStorage.setItem(Io,JSON.stringify(o));}catch{}}var Yt=[{key:"fill",labelKey:"style.fill",hasTransparent:true,hasOpacity:true},{key:"stroke",labelKey:"style.stroke",hasTransparent:false,hasOpacity:true},{key:"text",labelKey:"style.text",hasTransparent:false},{key:"highlight",labelKey:"style.highlight",hasTransparent:true,hasOpacity:true}],To=(o,e)=>!!o&&!!e&&o.toLowerCase()===e.toLowerCase(),pt=10,qe=12,Ve=o=>!o||o==="transparent",Ro=react.memo(function({editor:e,selectedCount:n,hasLineSelection:r,currentConnectionType:h,currentArrowHead:c,currentDashed:a}){U();let l=!!e?.getEditingShapeId(),[S,g]=react.useState(null),[p,b]=react.useState(null),[,x]=react.useState(0),N=react.useRef(null),K=react.useRef(null),I=react.useRef(null),[d,E]=react.useState({tw:168,th:42,pw:228,ph:160}),[C,Z]=react.useState(Kn),s=react.useRef(null),w=react.useCallback(i=>{let T=i.trim().toLowerCase();/^#[0-9a-f]{6}$/.test(T)&&Z(f=>{let k=f.filter(ce=>ce!==T);for(k.push(T);k.length>Eo;)k.shift();return On(k),k});},[]);if(react.useEffect(()=>{let i=s.current;if(!i)return;let T=()=>{i.value&&w(i.value);};return i.addEventListener("change",T),()=>i.removeEventListener("change",T)},[w,p]),react.useEffect(()=>{if(!e)return;let i=e.subscribe(()=>x(T=>(T+1)%1e6));return ()=>{i();}},[e]),react.useEffect(()=>{b(null);},[n,l]),react.useEffect(()=>{if(!p)return;let i=T=>{N.current&&!N.current.contains(T.target)&&b(null);};return document.addEventListener("pointerdown",i,true),()=>document.removeEventListener("pointerdown",i,true)},[p]),react.useLayoutEffect(()=>{let i=K.current?.offsetWidth??d.tw,T=K.current?.offsetHeight??d.th,f=I.current?.offsetWidth??d.pw,k=I.current?.offsetHeight??d.ph;E(ce=>ce.tw===i&&ce.th===T&&ce.pw===f&&ce.ph===k?ce:{tw:i,th:T,pw:f,ph:k});}),!e||n===0||l)return null;let m=e.getSelectedIds(),z=e.getShapes().filter(i=>m.includes(i.id)),_=z[0],Q=_?.id??"",F=_?.style.fillColor,H=_?.style.strokeColor??"#1f2937",Y=_?.textColor??"#1f2937",j=_?.highlightColor,ee={fill:F,stroke:H,text:Y,highlight:j},M=z.length>0&&z.every(i=>i.type==="sticky-note"),ue={fill:_?.style.fillOpacity??1,stroke:_?.style.strokeOpacity??1,highlight:_?.highlightOpacity??1},xe=i=>S&&S.key===`${Q}:${i}`?S.value:ue[i]??1,B=(i,T)=>{switch(i){case "stroke":e.updateSelectedShapesStyle({strokeColor:T});break;case "fill":e.updateSelectedShapesStyle({fillColor:T});break;case "text":e.updateSelectedShapesText({textColor:T});break;case "highlight":e.updateSelectedShapesText({highlightColor:T});break}},Re=(i,T)=>{g({key:`${Q}:${i}`,value:T}),i==="highlight"?e.updateSelectedShapesText({highlightOpacity:T}):i==="stroke"?e.updateSelectedShapesStyle({strokeOpacity:T}):e.updateSelectedShapesStyle({fillOpacity:T});},ye=i=>e.updateConnectionType(i),se=i=>e.updateArrowStyle({arrowHead:i.arrowHead,dashed:i.dashed}),Te=!!r&&z.length>0&&z.every(i=>i.type==="line"||i.type==="arrow"),ke=z.length>0&&z.every(i=>i.type==="text"),Ne=z.length>0&&z.every(i=>i.type==="sticky-note"||i.type==="icon"),fe=Te?Yt.filter(i=>i.key==="stroke"):Ne?Yt.filter(i=>i.key!=="stroke"):Yt,O=i=>i.key==="stroke"&&Te?"style.line":i.labelKey,v=p&&p!=="more"?fe.find(i=>i.key===p):void 0,pe=!!p&&(p==="more"||p==="prefix"||!!v),oe=M&&v?.key==="fill",le=e.getCamera(),X=drawuiCore.getContentBounds(z,0),He=le.pageToScreen({x:X.x,y:X.y}),me=le.pageToScreen({x:X.x+X.width,y:X.y+X.height}),We=window.innerWidth,Ue=window.innerHeight,Ye=me.y+pt,je=He.y-pt,Ee=d.th+(pe?pt+d.ph:0),y=Ye+Ee<=Ue-qe,$=je-Ee>=qe,P=y||!$,D=(He.x+me.x)/2,q=(i,T,f)=>Math.max(T,Math.min(i,Math.max(T,f))),ne=q(D-d.tw/2,qe,We-d.tw-qe),Ie=P?Ye:je-d.th,u=q(D-d.pw/2,qe,We-d.pw-qe),W=pe?q(P?Ie+d.th+pt:Ie-pt-d.ph,qe,Ue-d.ph-qe):0;return jsxRuntime.jsxs("div",{className:"drawui-style-floating",ref:N,children:[jsxRuntime.jsxs("div",{className:"drawui-style-toolbar",ref:K,style:{left:ne,top:Ie},children:[fe.map(i=>jsxRuntime.jsxs("button",{className:`drawui-style-tool-btn${p===i.key?" active":""}`,onClick:()=>b(p===i.key?null:i.key),"data-drawui-tip":drawuiCore.t(O(i)),type:"button",children:[i.key==="fill"&&jsxRuntime.jsx("span",{className:`drawui-st-swatch${Ve(F)?" drawui-st-none":""}`,style:Ve(F)?void 0:{background:F}}),i.key==="stroke"&&(Te?jsxRuntime.jsx("span",{className:`drawui-st-line${Ve(H)?" drawui-st-line-none":""}`,style:Ve(H)?void 0:{background:H}}):jsxRuntime.jsx("span",{className:`drawui-st-frame${Ve(H)?" drawui-st-frame-none":""}`,style:Ve(H)?void 0:{borderColor:H}})),i.key==="text"&&jsxRuntime.jsx("span",{className:"drawui-st-text",style:{color:Y},children:"A"}),i.key==="highlight"&&jsxRuntime.jsx("span",{className:`drawui-st-hl${Ve(j)?" drawui-st-none":""}`,style:Ve(j)?void 0:{background:j},children:"A"})]},i.key)),r&&jsxRuntime.jsx("button",{className:`drawui-style-tool-btn${p==="more"?" active":""}`,onClick:()=>b(p==="more"?null:"more"),"data-drawui-tip":drawuiCore.t("style.connection"),type:"button",children:"\u22EF"}),ke&&jsxRuntime.jsx("button",{className:`drawui-style-tool-btn${p==="prefix"?" active":""}`,onClick:()=>b(p==="prefix"?null:"prefix"),"data-drawui-tip":drawuiCore.t("style.prefix"),type:"button",children:jsxRuntime.jsxs("svg",{viewBox:"0 0 24 24",width:"18",height:"18",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",children:[jsxRuntime.jsx("circle",{cx:"5",cy:"8",r:"1.7",fill:"currentColor",stroke:"none"}),jsxRuntime.jsx("circle",{cx:"5",cy:"16",r:"1.7",fill:"currentColor",stroke:"none"}),jsxRuntime.jsx("line",{x1:"10.5",y1:"8",x2:"20",y2:"8"}),jsxRuntime.jsx("line",{x1:"10.5",y1:"16",x2:"20",y2:"16"})]})})]}),pe&&jsxRuntime.jsx("div",{className:"drawui-style-popover",ref:I,style:{left:u,top:W},children:p==="prefix"?jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("div",{className:"drawui-style-popover-title",children:drawuiCore.t("style.prefix")}),jsxRuntime.jsx("div",{className:"drawui-muted-hint",children:drawuiCore.t("style.prefix.soon")})]}):v?jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("div",{className:"drawui-style-popover-title",children:drawuiCore.t(O(v))}),jsxRuntime.jsxs("div",{className:"drawui-color-row",children:[v.hasTransparent&&!oe&&jsxRuntime.jsx("button",{className:`drawui-color-swatch drawui-color-swatch-transparent${Ve(ee[v.key])?" active":""}`,onClick:()=>B(v.key,"transparent"),"aria-label":drawuiCore.t("style.none"),type:"button"}),(oe?drawuiCore.STICKY_NOTE_COLORS:v.hasTransparent?Pn:An).map(i=>jsxRuntime.jsx("button",{className:`drawui-color-swatch${To(i,ee[v.key])?" active":""}`,style:{background:i},onClick:()=>B(v.key,i),"aria-label":i,type:"button"},i)),C.map(i=>jsxRuntime.jsx("button",{className:`drawui-color-swatch drawui-color-custom${To(i,ee[v.key])?" active":""}`,style:{background:i},onClick:()=>B(v.key,i),"aria-label":i,type:"button"},`custom-${i}`)),jsxRuntime.jsxs("span",{className:"drawui-color-swatch drawui-color-add","data-drawui-tip":drawuiCore.t("style.addColor"),children:["+",jsxRuntime.jsx("input",{ref:s,type:"color",defaultValue:"#3b82f6",className:"drawui-color-add-input","aria-label":drawuiCore.t("style.addColor")})]})]}),v.hasOpacity&&jsxRuntime.jsxs("div",{className:"drawui-opacity-row",children:[jsxRuntime.jsx("span",{className:"drawui-opacity-label",children:drawuiCore.t("style.opacity")}),jsxRuntime.jsx("input",{type:"range",min:0,max:100,value:Math.round(xe(v.key)*100),onChange:i=>Re(v.key,Number(i.target.value)/100),className:"drawui-opacity-slider"}),jsxRuntime.jsxs("span",{className:"drawui-opacity-value",children:[Math.round(xe(v.key)*100),"%"]})]})]}):jsxRuntime.jsx(jsxRuntime.Fragment,{children:jsxRuntime.jsx(xt,{connectionType:h??"straight",arrowHead:c??"end",dashed:!!a,onConnectionTypeChange:ye,onArrowStyleChange:se})})})]})});var qt=14,Ao=20,Un=["#1f2937","#ef4444","#f97316","#facc15","#22c55e","#3b82f6","#8b5cf6","#ec4899","#9ca3af"],Zn=[12,14,16,18,20,24];function Ko(o,e,n){let r=o,h="",c=r.charAt(0);if(r.length>1&&(c==="+"||c==="-"||c==="#"||c==="~")&&r.charAt(1)===" "&&(h=c,r=r.slice(2)),r=r.replace(/^\s+|\s+$/g,""),e==="attribute"){let b=r.indexOf(":");return b===-1?{visibility:h,name:r,type:"",params:"",returnType:""}:{visibility:h,name:r.slice(0,b).replace(/^\s+|\s+$/g,""),type:r.slice(b+1).replace(/^\s+|\s+$/g,""),params:"",returnType:""}}let a=r.indexOf("(");if(a===-1){let b=r.lastIndexOf(":");return b===-1?{visibility:h,name:r,type:"",params:"",returnType:""}:{visibility:h,name:r.slice(0,b).replace(/^\s+|\s+$/g,""),type:"",params:"",returnType:r.slice(b+1).replace(/^\s+|\s+$/g,"")}}let l=r.slice(0,a).replace(/^\s+|\s+$/g,""),S=r.indexOf(")",a);if(S===-1)return {visibility:h,name:l,type:"",params:r.slice(a+1).replace(/^\s+|\s+$/g,""),returnType:""};let g=r.slice(a+1,S).replace(/^\s+|\s+$/g,""),p=r.slice(S+1).replace(/^\s+|\s+$/g,"");return p.startsWith(":")&&(p=p.slice(1).replace(/^\s+|\s+$/g,"")),{visibility:h,name:l,type:"",params:g,returnType:p}}function Gn(o,e){let n=e.visibility?`${e.visibility} `:"";return o==="attribute"?`${n}${e.name}${e.type?`: ${e.type}`:""}`:`${n}${e.name}(${e.params??""})${e.returnType?`: ${e.returnType}`:""}`}var $o=react.memo(function({editor:e,umlClass:n,editing:r}){let[,h]=react.useState(0);U(),react.useEffect(()=>{if(!e)return;let y=e.subscribe(()=>h($=>$+1));return ()=>{y();}},[e]);let[c,a]=react.useState(null),[l,S]=react.useState(false),[g,p]=react.useState(null),b=react.useRef(null),x=react.useRef(null),N=react.useCallback((y,$)=>{b.current&&(clearTimeout(b.current),b.current=null),a({section:y,rowId:$}),S(false);},[]),K=react.useCallback(()=>{b.current&&clearTimeout(b.current),b.current=window.setTimeout(()=>{a(null),S(false);},150);},[]);if(!e||!n||r!==n.id)return null;let I=e.getCamera(),{id:d,x:E,y:C,width:Z,height:s,className:w,methods:m}=n,G=n.type==="uml-interface",z=G?[]:n.attributes,_=Z/2,Q=s/2,F=drawuiCore.UML_HEADER_HEIGHT,H=drawuiCore.UML_LINE_HEIGHT,Y=drawuiCore.UML_PADDING_X,j=drawuiCore.UML_PADDING_Y,ee=G?0:z.length>0?z.length*H+j*2:j*2,M=I.zoom,ue=(Z-Y*2)*M,xe=4*M,B=I.pageToScreen({x:E-_+Y,y:C}),Re=I.pageToScreen({x:E,y:C-Q+F/2}),ye=y=>I.pageToScreen({x:E,y}).y,se=H*M,Te=y=>C+(-Q+F+j+H/2+y*H),ke=y=>C+(-Q+F+ee+j+H/2+y*H),Ne=C+(-Q+F+ee),fe=C+Q,O={background:"#ffffff",borderWidth:1,borderStyle:"solid",borderColor:"transparent",outline:"none",padding:0,fontFamily:"sans-serif",boxSizing:"border-box"},v=(y,$)=>{let P=z.find(q=>q.id===y);if(!P)return;let D=Ko($,"attribute",P.visibility);e.updateUmlClass(d,{attributes:z.map(q=>q.id===y?{...q,...D}:q)});},pe=(y,$)=>{let P=m.find(ne=>ne.id===y);if(!P)return;let D=Ko($,"method",P.visibility),q=m.map(ne=>ne.id===y?{...ne,...D}:ne);G?e.updateUmlInterface(d,{methods:q}):e.updateUmlClass(d,{methods:q});},oe=(y,$,P)=>{x.current={section:y,from:$},P.dataTransfer.effectAllowed="move",P.dataTransfer.setData("text/plain",`${y}:${$}`);},le=y=>{y.preventDefault(),y.dataTransfer.dropEffect="move";},X=(y,$,P)=>{P.preventDefault();let D=x.current;!D||D.section!==y||(y==="attribute"?e.reorderUmlAttribute(d,D.from,$):e.reorderUmlMethod(d,D.from,$),x.current=null);},He=(y,$,P,D)=>{let q=ye(D),ne=c?.section===y&&c.rowId===P.id,Ie=(P.fontSize||drawuiCore.UML_FONT_SIZE)*M,u=P.textColor||"#1f2937",W={position:"absolute",left:B.x-qt*M-xe,top:q-se/2,width:qt*M+xe+ue+Ao*M,height:se,display:"flex",alignItems:"center",gap:2,pointerEvents:"none",zIndex:53},i={...O,width:ue,height:se-2,fontSize:Ie,color:u,textDecoration:P.strikethrough?"line-through":"none",pointerEvents:"auto",...ne?{borderColor:"var(--dw-primary)"}:{}},T={width:qt*M,height:se-2,cursor:"grab",color:"#9ca3af",display:"flex",alignItems:"center",justifyContent:"center",userSelect:"none",fontSize:12*M,lineHeight:1,opacity:ne?1:.55,pointerEvents:"auto"},f={width:Ao*M,height:se-6,border:"none",background:"transparent",color:"#9ca3af",cursor:"pointer",borderRadius:3,fontSize:14*M,opacity:ne?1:.35,pointerEvents:"auto"};return jsxRuntime.jsxs("div",{style:W,onDragOver:le,onDrop:k=>X(y,$,k),children:[jsxRuntime.jsx("span",{style:T,draggable:true,onDragStart:k=>oe(y,$,k),"data-drawui-tip":drawuiCore.t("uml.drag"),children:"\u22EE\u22EE"}),jsxRuntime.jsx("input",{style:i,value:g&&g.rowId===P.id?g.text:Gn(y,P),onChange:k=>{p({rowId:P.id,text:k.target.value}),y==="attribute"?v(P.id,k.target.value):pe(P.id,k.target.value);},onFocus:()=>N(y,P.id),onBlur:()=>{p(null),K();},spellCheck:false}),jsxRuntime.jsx("button",{style:f,onMouseDown:k=>k.preventDefault(),onClick:()=>{y==="attribute"?e.removeUmlAttribute(d,P.id):e.removeUmlMethod(d,P.id);},"data-drawui-tip":drawuiCore.t("uml.delete"),children:"\xD7"})]},P.id)},me=(y,$,P)=>{let D=ye($),q=y==="attribute";return jsxRuntime.jsxs("button",{onMouseDown:ne=>ne.preventDefault(),onClick:()=>q?e.addUmlAttribute(d):e.addUmlMethod(d),className:"drawui-uml-add-row",style:{position:"absolute",left:B.x,top:D-9*M,height:18*M,padding:`0 ${6*M}px`,fontSize:11*M,lineHeight:1,border:"1px dashed #cbd5e1",background:"rgba(255,255,255,0.85)",color:"#64748b",borderRadius:3,cursor:"pointer",pointerEvents:"auto",display:"flex",alignItems:"center",gap:3,whiteSpace:"nowrap",zIndex:53},"data-drawui-tip":P,children:[jsxRuntime.jsx("span",{style:{fontSize:13*M,lineHeight:1},children:"+"}),jsxRuntime.jsx("span",{children:P})]},`add-${y}`)},We=()=>{if(!c||c.section==="className")return null;let y=c.section,$=c.rowId,D=(y==="attribute"?z:m).find(R=>R.id===$);if(!D)return null;let q=224*M,ne=30*M,Ie=I.pageToScreen({x:E,y:C}).x,u=I.pageToScreen({x:E,y:C-Q}).y,W=20*M,i=u-ne-W,T=Ie-q/2,f=i+ne,k=D.textColor||"#1f2937",ce=D.fontSize||drawuiCore.UML_FONT_SIZE,Pe=!!D.strikethrough;return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("div",{style:{position:"absolute",left:Ie-.5,top:f,width:1,height:W,background:"#d1d5db",pointerEvents:"none",zIndex:59}}),jsxRuntime.jsxs("div",{className:"drawui-uml-toolbar",style:{position:"absolute",left:T,top:i,width:q,height:ne,background:"#ffffff",border:"1px solid #e5e7eb",borderRadius:6,boxShadow:"0 4px 12px rgba(0, 0, 0, 0.1)",display:"flex",alignItems:"center",gap:4*M,padding:`0 ${6*M}px`,pointerEvents:"auto",zIndex:60,fontSize:12*M},onMouseDown:R=>R.preventDefault(),children:[jsxRuntime.jsxs("div",{style:{position:"relative"},children:[jsxRuntime.jsxs("button",{onClick:()=>S(R=>!R),className:"drawui-uml-toolbar-btn","data-drawui-tip":drawuiCore.t("uml.textColor"),style:{border:"none",background:"transparent",cursor:"pointer",padding:2,display:"flex",alignItems:"center",borderRadius:3},children:[jsxRuntime.jsx("span",{style:{fontWeight:700,color:k,fontSize:13*M,textDecoration:Pe?"line-through":"none"},children:"A"}),jsxRuntime.jsx("span",{style:{width:10*M,height:2*M,background:k,marginLeft:3,borderRadius:1}})]}),l&&jsxRuntime.jsxs("div",{style:{position:"absolute",top:"100%",left:0,marginTop:4,background:"#ffffff",border:"1px solid #e5e7eb",borderRadius:4,padding:4,display:"flex",gap:2,boxShadow:"0 2px 8px rgba(0, 0, 0, 0.1)",zIndex:61},children:[jsxRuntime.jsx("button",{onClick:()=>{e.updateUmlRowStyle(d,y,D.id,{textColor:null}),S(false);},style:{width:14,height:14,border:"1px solid #e5e7eb",background:"transparent",cursor:"pointer",borderRadius:2},"data-drawui-tip":drawuiCore.t("uml.defaultColor")}),Un.map(R=>jsxRuntime.jsx("button",{onClick:()=>{e.updateUmlRowStyle(d,y,D.id,{textColor:R}),S(false);},style:{width:14,height:14,border:"none",background:R,cursor:"pointer",borderRadius:2},"data-drawui-tip":R},R))]})]}),jsxRuntime.jsx("select",{value:ce,onChange:R=>e.updateUmlRowStyle(d,y,D.id,{fontSize:Number(R.target.value)}),style:{border:"1px solid #e5e7eb",borderRadius:3,padding:`0 ${2*M}px`,fontSize:12*M,height:20*M,background:"#ffffff"},"data-drawui-tip":drawuiCore.t("uml.fontSize"),children:Zn.map(R=>jsxRuntime.jsx("option",{value:R,children:R},R))}),jsxRuntime.jsx("button",{onClick:()=>e.updateUmlRowStyle(d,y,D.id,{strikethrough:!Pe}),className:"drawui-uml-toolbar-btn","data-drawui-tip":drawuiCore.t("uml.strikethrough"),style:{border:"none",background:Pe?"var(--dw-primary-weak)":"transparent",cursor:"pointer",padding:2,borderRadius:3},children:jsxRuntime.jsx("span",{style:{fontWeight:700,fontSize:13*M,textDecoration:"line-through"},children:"A"})}),jsxRuntime.jsx("button",{onClick:()=>{y==="attribute"?e.removeUmlAttribute(d,D.id):e.removeUmlMethod(d,D.id),a(null);},className:"drawui-uml-toolbar-btn","data-drawui-tip":drawuiCore.t("uml.delete"),style:{border:"none",background:"transparent",cursor:"pointer",color:"#ef4444",padding:2,marginLeft:"auto",borderRadius:3},children:jsxRuntime.jsxs("svg",{width:14*M,height:14*M,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntime.jsx("polyline",{points:"3 6 5 6 21 6"}),jsxRuntime.jsx("path",{d:"M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6"}),jsxRuntime.jsx("path",{d:"M10 11v6"}),jsxRuntime.jsx("path",{d:"M14 11v6"}),jsxRuntime.jsx("path",{d:"M9 6V4a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2"})]})})]})]})},Ue=I.pageToScreen({x:E-_,y:C}).x,Ye=I.pageToScreen({x:E,y:C-Q}).y,je=Z*M,Ee=s*M;return jsxRuntime.jsxs("div",{style:{position:"absolute",inset:0,pointerEvents:"none",zIndex:50},children:[jsxRuntime.jsx("div",{style:{position:"absolute",left:Ue+1,top:Ye+1,width:Math.max(0,je-2),height:Math.max(0,Ee-2),background:"#ffffff",pointerEvents:"none",zIndex:51}}),jsxRuntime.jsx("input",{style:{...O,position:"absolute",left:Re.x-ue/2,top:Re.y-F*M/2+2,width:ue,height:F*M-4,textAlign:"center",fontWeight:700,fontSize:(n.fontSize||drawuiCore.UML_FONT_SIZE)*M,color:n.textColor||"#1f2937",pointerEvents:"auto",zIndex:52,...c?.section==="className"?{borderColor:"var(--dw-primary)"}:{}},value:w,onChange:y=>G?e.updateUmlInterface(d,{className:y.target.value}):e.updateUmlClass(d,{className:y.target.value}),onFocus:()=>N("className",""),onBlur:K,spellCheck:false}),!G&&jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[z.map((y,$)=>He("attribute",$,y,Te($))),me("attribute",Ne,"\u5C5E\u6027")]}),m.map((y,$)=>He("method",$,y,ke($))),me("method",fe,drawuiCore.t("uml.method")),We()]})});var _o=react.memo(function({editor:e,panelOpen:n,onOpenPanel:r}){let[,h]=react.useState(0);U(),react.useEffect(()=>{if(!e)return;let s=e.subscribe(()=>h(w=>w+1));return ()=>{s();}},[e]);let c=react.useRef(false),a=react.useRef(false),l=e?.getMindMapEditingShapeId()??null,S=e?.getMindMapSelectedNode()?.nodeId??"",g=l?`${l}\0${S}`:"";if(react.useEffect(()=>{c.current=false;},[g]),!e)return null;let p=e.getMindMapEditingShapeId();if(!p||n)return null;let b=e.getMindMapSelectedNode();if(!b||b.shapeId!==p)return null;let x=e.getMindMapNode(p,b.nodeId),N=e.getMindMapNodeScreenRect(p,b.nodeId);if(!x||!N)return null;let K=e.getCamera().getZoom(),I=drawuiCore.MINDMAP_FONT_SIZE*K,d=Math.max(100,N.width+24),E=N.height+8,C={position:"absolute",left:N.x+N.width/2,top:N.y-4,transform:"translateX(-50%)",width:d,height:E,border:"1.5px solid var(--dw-primary, #3b82f6)",borderRadius:6,background:"#ffffff",boxShadow:"0 2px 10px rgba(0,0,0,0.15)",outline:"none",padding:`0 ${(x.icon?24:12)*K}px`,fontFamily:"sans-serif",fontSize:I,color:"#1f2937",boxSizing:"border-box",pointerEvents:"auto",zIndex:55},Z={position:"absolute",left:N.x+N.width+12,top:N.y+N.height/2-11,width:22,height:22,border:"1px solid #e5e7eb",background:"#ffffff",borderRadius:"50%",cursor:"pointer",color:"#6b7280",fontSize:13,lineHeight:1,display:"flex",alignItems:"center",justifyContent:"center",boxShadow:"0 1px 4px rgba(0,0,0,0.12)",pointerEvents:"auto",zIndex:55};return jsxRuntime.jsxs("div",{style:{position:"absolute",inset:0,pointerEvents:"none",zIndex:50},children:[jsxRuntime.jsx("input",{autoFocus:true,style:C,value:x.text,spellCheck:false,onChange:s=>{let w=!c.current;c.current=true,e.updateMindMapNode(p,b.nodeId,{text:s.target.value},w);},onBlur:()=>{if(a.current){a.current=false;return}e.exitMindMapEdit();},onKeyDown:s=>{s.key==="Enter"?s.target.blur():s.key==="Escape"&&e.exitMindMapEdit();}}),jsxRuntime.jsx("button",{style:Z,"data-drawui-tip":drawuiCore.t("mindmap.more"),onMouseDown:s=>{s.preventDefault(),a.current=true,setTimeout(()=>{a.current=false;},300);},onClick:r,children:"\u22EF"})]})});var Zo=react.memo(function({editor:e,panelOpen:n}){let[,r]=react.useState(0);U(),react.useEffect(()=>{if(!e)return;let E=e.subscribe(()=>r(C=>C+1));return ()=>{E();}},[e]);let h=react.useRef(false),c=e?.getTableEditing()??null,a=c?`${c.shapeId}\0${c.row}\0${c.col}`:"";if(react.useEffect(()=>{h.current=false;},[a]),!e||n)return null;let l=e.getTableEditing();if(!l)return null;let{shapeId:S,row:g,col:p}=l,b=e.getTableCell(S,g,p),x=e.getTableScreenRect(S,g,p);if(!b||!x)return null;let N=e.getSelectedTable(),K=b.fontSize||N?.fontSize||drawuiCore.TABLE_FONT_SIZE,I=e.getCamera().getZoom(),d={left:x.x-1,top:x.y-1,width:x.width+2,height:x.height+2,padding:`${drawuiCore.TABLE_CELL_PADDING_Y*I}px ${drawuiCore.TABLE_CELL_PADDING_X*I}px`,fontFamily:"sans-serif",fontSize:K*I,lineHeight:drawuiCore.TABLE_LINE_HEIGHT_RATIO,fontWeight:b.bold?700:400,color:b.textColor||N?.textColor||"#1f2937",textAlign:b.align==="center"?"center":b.align==="right"?"right":"left"};return jsxRuntime.jsx("div",{style:{position:"absolute",inset:0,pointerEvents:"none",zIndex:50},children:jsxRuntime.jsx("textarea",{autoFocus:true,rows:1,className:"drawui-table-cell-input",style:d,value:b.text,spellCheck:false,onChange:E=>{let C=!h.current;h.current=true,e.updateTableCell(S,g,p,{text:E.target.value},C);},onBlur:()=>{e.exitTableEdit();},onKeyDown:E=>{(E.key==="Enter"||E.key==="Escape")&&(E.preventDefault(),E.target.blur());}})})});var Vo=react.memo(function({editor:e}){let[,n]=react.useState(0),[r,h]=react.useState(null),c=react.useRef(null);if(U(),react.useEffect(()=>{if(!e)return;let H=e.subscribe(()=>n(Y=>Y+1));return ()=>{H();}},[e]),react.useEffect(()=>{if(!r)return;let H=j=>{let ee=j.target;ee&&c.current?.contains(ee)||h(null);},Y=j=>{j.key==="Escape"&&h(null);};return window.addEventListener("pointerdown",H,true),window.addEventListener("keydown",Y),()=>{window.removeEventListener("pointerdown",H,true),window.removeEventListener("keydown",Y);}},[r]),!e)return null;let a=e.getSelectedTable();if(!a)return null;let l=e.getTableSelection();if(!l||l.shapeId!==a.id)return null;let S=e.getTableScreenRect(a.id);if(!S)return null;let g=a.cells.length,p=a.cells[0]?.length??0,b=drawuiCore.tableExpandRangeToMerges(a,l.anchor.row,l.anchor.col,l.focus.row,l.focus.col),{r1:x,c1:N,r2:K,c2:I}=b,d=drawuiCore.tableCoveredMap(a.cells),E=0;for(let H=x;H<=K;H++)for(let Y=N;Y<=I;Y++)d[H]?.[Y]||E++;let C=E>1,Z=drawuiCore.tableRangeHasMerge(a,x,N,K,I),s=x===K?`${x+1}`:`${x+1}\u2013${K+1}`,w=N===I?`${N+1}`:`${N+1}\u2013${I+1}`,m=g-(K-x+1)>=1,G=p-(I-N+1)>=1,_=S.y>56?S.y-40:S.y+S.height+10,Q=H=>H.stopPropagation(),F=H=>()=>{H(),h(null);};return jsxRuntime.jsxs("div",{className:"drawui-table-toolbar","data-table-toolbar":a.id,style:{left:S.x+S.width/2,top:_},onPointerDown:Q,children:[jsxRuntime.jsxs("div",{className:"drawui-table-split",children:[jsxRuntime.jsx("button",{className:"drawui-table-btn-main",title:drawuiCore.t("table.insertRowBelow"),onClick:()=>e.insertTableRowRelative(a.id,"below"),children:drawuiCore.t("table.insertRow")}),jsxRuntime.jsx("button",{className:`drawui-table-btn-caret ${r==="row"?"active":""}`,"data-table-insert-row":true,title:`${drawuiCore.t("table.insertRowAbove")} / ${drawuiCore.t("table.insertRowBelow")}`,onClick:()=>h(r==="row"?null:"row"),children:jsxRuntime.jsx("svg",{viewBox:"0 0 10 10",width:"8",height:"8","aria-hidden":"true",children:jsxRuntime.jsx("path",{d:"M1 3l4 4 4-4",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})}),r==="row"&&jsxRuntime.jsxs("div",{className:"drawui-table-menu",ref:c,"data-table-row-menu":true,children:[jsxRuntime.jsx("button",{onClick:F(()=>e.insertTableRowRelative(a.id,"above")),children:drawuiCore.t("table.insertRowAbove")}),jsxRuntime.jsx("button",{onClick:F(()=>e.insertTableRowRelative(a.id,"below")),children:drawuiCore.t("table.insertRowBelow")})]})]}),jsxRuntime.jsx("button",{title:`${drawuiCore.t("table.deleteRow")} \xB7 ${s}`,disabled:!m,onClick:()=>e.deleteTableRowsInSelection(a.id),children:drawuiCore.t("table.deleteRow")}),jsxRuntime.jsxs("div",{className:"drawui-table-split",children:[jsxRuntime.jsx("button",{className:"drawui-table-btn-main",title:drawuiCore.t("table.insertColRight"),onClick:()=>e.insertTableColumnRelative(a.id,"right"),children:drawuiCore.t("table.insertCol")}),jsxRuntime.jsx("button",{className:`drawui-table-btn-caret ${r==="col"?"active":""}`,"data-table-insert-col":true,title:`${drawuiCore.t("table.insertColLeft")} / ${drawuiCore.t("table.insertColRight")}`,onClick:()=>h(r==="col"?null:"col"),children:jsxRuntime.jsx("svg",{viewBox:"0 0 10 10",width:"8",height:"8","aria-hidden":"true",children:jsxRuntime.jsx("path",{d:"M1 3l4 4 4-4",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})}),r==="col"&&jsxRuntime.jsxs("div",{className:"drawui-table-menu",ref:c,"data-table-col-menu":true,children:[jsxRuntime.jsx("button",{onClick:F(()=>e.insertTableColumnRelative(a.id,"left")),children:drawuiCore.t("table.insertColLeft")}),jsxRuntime.jsx("button",{onClick:F(()=>e.insertTableColumnRelative(a.id,"right")),children:drawuiCore.t("table.insertColRight")})]})]}),jsxRuntime.jsx("button",{title:`${drawuiCore.t("table.deleteCol")} \xB7 ${w}`,disabled:!G,onClick:()=>e.deleteTableColsInSelection(a.id),children:drawuiCore.t("table.deleteCol")}),jsxRuntime.jsx("button",{title:drawuiCore.t("table.merge"),disabled:!C,onClick:()=>e.mergeTableCells(a.id),children:drawuiCore.t("table.merge")}),jsxRuntime.jsx("button",{title:drawuiCore.t("table.split"),disabled:!Z,onClick:()=>e.splitTableCells(a.id),children:drawuiCore.t("table.split")})]})});var Yo=[...drawuiCore.MINDMAP_COLORS,"#1f2937","#9ca3af"],jo=["\u{1F4A1}","\u2B50","\u{1F525}","\u{1F4CC}","\u2705","\u2757","\u26A0\uFE0F","\u{1F3F7}\uFE0F"],fr={position:"absolute",width:232,background:"rgba(255,255,255,0.96)",border:"1px solid #e5e7eb",borderRadius:8,boxShadow:"0 6px 20px rgba(0,0,0,0.12)",padding:"10px 12px",fontSize:12,color:"#1f2937",zIndex:70,boxSizing:"border-box",fontFamily:"sans-serif"},Jt={fontSize:11,color:"#6b7280",marginBottom:4,display:"block"},Tt={display:"flex",gap:4,alignItems:"center",flexWrap:"wrap"},Lt={border:"1px solid #e5e7eb",background:"#ffffff",borderRadius:5,padding:"3px 8px",fontSize:12,color:"#374151",cursor:"pointer",lineHeight:1.5},Qt={width:"100%",border:"1px solid #e5e7eb",borderRadius:5,padding:"4px 8px",fontSize:12,outline:"none",boxSizing:"border-box",background:"#ffffff",color:"#1f2937"},Xo=react.memo(function({editor:e,mindMap:n}){let[,r]=react.useState(0);U(),react.useEffect(()=>{if(!e)return;let s=e.subscribe(()=>r(w=>w+1));return ()=>{s();}},[e]);let h=react.useRef(null);if(!e||!n||e.getMindMapEditingShapeId()!==n.id)return null;let c=e.getMindMapSelectedNode();if(!c||c.shapeId!==n.id)return null;let a=s=>{if(s.id===c.nodeId)return s;for(let w of s.children??[]){let m=a(w);if(m)return m}return null},l=a(n.root);if(!l)return null;let S=e.getCamera(),p=drawuiCore.layoutMindMap(n.root).positions.get(l.id);if(!p)return null;let b=S.zoom,x=S.pageToScreen({x:n.x+p.x,y:n.y+p.y}),N=x.x+p.width*b/2+14,K=x.y-80,d=Math.max(8,Math.min(N,(window.innerWidth||1024)-232-8)),E=Math.max(8,Math.min(K,(window.innerHeight||768)-320)),C=s=>{e.updateMindMapNode(n.id,l.id,s);},Z=!!l.id&&l.id!==n.root.id;return jsxRuntime.jsxs("div",{ref:h,style:{...fr,left:d,top:E},onMouseDown:s=>s.stopPropagation(),children:[jsxRuntime.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:8},children:[jsxRuntime.jsx("span",{style:{fontWeight:600,fontSize:12},children:drawuiCore.t("mindmap.nodeText")}),jsxRuntime.jsx("button",{onClick:()=>e.exitMindMapEdit(),"data-drawui-tip":drawuiCore.t("mindmap.close"),style:{border:"none",background:"transparent",cursor:"pointer",color:"#9ca3af",fontSize:14,lineHeight:1,padding:2},children:"\xD7"})]}),jsxRuntime.jsx("input",{style:{...Qt,marginBottom:8},value:l.text,onChange:s=>C({text:s.target.value}),spellCheck:false}),jsxRuntime.jsxs("div",{style:{...Tt,marginBottom:10},children:[jsxRuntime.jsxs("button",{style:Lt,onClick:()=>e.addMindMapChild(n.id,l.id),children:["+ ",drawuiCore.t("mindmap.addChild")]}),Z&&jsxRuntime.jsxs("button",{style:Lt,onClick:()=>e.addMindMapSibling(n.id,l.id),children:["+ ",drawuiCore.t("mindmap.addSibling")]}),!!l.children?.length&&jsxRuntime.jsx("button",{style:Lt,onClick:()=>e.toggleMindMapCollapse(n.id,l.id),children:l.collapsed?drawuiCore.t("mindmap.expand"):drawuiCore.t("mindmap.collapse")}),jsxRuntime.jsx("button",{style:{...Lt,color:"#ef4444",borderColor:"#fecaca",marginLeft:"auto"},onClick:()=>e.deleteMindMapNode(n.id,l.id),children:drawuiCore.t("mindmap.deleteNode")})]}),jsxRuntime.jsx("span",{style:Jt,children:drawuiCore.t("mindmap.color")}),jsxRuntime.jsxs("div",{style:{...Tt,marginBottom:10},children:[jsxRuntime.jsx("button",{"data-drawui-tip":drawuiCore.t("mindmap.levelColor"),onClick:()=>C({color:void 0}),style:{width:18,height:18,borderRadius:4,border:"1.5px solid #d1d5db",background:"conic-gradient(#ef4444, #f59e0b, #10b981, #3b82f6, #8b5cf6, #ec4899, #ef4444)",cursor:"pointer",flexShrink:0}}),Yo.map(s=>jsxRuntime.jsx("button",{"data-drawui-tip":s,onClick:()=>C({color:s}),style:{width:18,height:18,borderRadius:4,border:l.color===s?"2px solid #111827":"1px solid #d1d5db",background:s,cursor:"pointer",flexShrink:0}},s))]}),jsxRuntime.jsx("span",{style:Jt,children:drawuiCore.t("mindmap.icon")}),jsxRuntime.jsxs("div",{style:{...Tt,marginBottom:10},children:[jsxRuntime.jsx("button",{"data-drawui-tip":drawuiCore.t("mindmap.noIcon"),onClick:()=>C({icon:void 0}),style:{width:22,height:22,borderRadius:4,border:l.icon?"1px solid #d1d5db":"2px solid #111827",background:"#f9fafb",cursor:"pointer",fontSize:11,color:"#9ca3af",lineHeight:1},children:"\u2205"}),jo.map(s=>jsxRuntime.jsx("button",{onClick:()=>C({icon:s}),style:{width:22,height:22,borderRadius:4,border:l.icon===s?"2px solid #111827":"1px solid #d1d5db",background:"#f9fafb",cursor:"pointer",fontSize:13,lineHeight:1},children:s},s)),jsxRuntime.jsx("input",{placeholder:"\u270F\uFE0F",defaultValue:l.icon&&!jo.includes(l.icon)?l.icon:"",onKeyDown:s=>{if(s.key==="Enter"){let w=s.target.value.trim();C({icon:w||void 0});}},onBlur:s=>{let w=s.target.value.trim();w!==l.icon&&C({icon:w||void 0});},style:{...Qt,width:56,padding:"2px 4px",textAlign:"center"}})]}),jsxRuntime.jsx("span",{style:Jt,children:drawuiCore.t("mindmap.note")}),jsxRuntime.jsx("input",{style:{...Qt,marginBottom:6},value:l.note??"",placeholder:drawuiCore.t("mindmap.notePlaceholder"),onChange:s=>C({note:s.target.value||void 0}),spellCheck:false}),!!l.note&&jsxRuntime.jsxs("div",{style:{...Tt,marginTop:4},children:[jsxRuntime.jsx("span",{style:{fontSize:11,color:"#6b7280"},children:drawuiCore.t("mindmap.noteColor")}),jsxRuntime.jsx("button",{"data-drawui-tip":drawuiCore.t("mindmap.noteColorDefault"),onClick:()=>C({noteColor:void 0}),style:{width:16,height:16,borderRadius:3,border:l.noteColor?"1px solid #d1d5db":"2px solid #111827",background:"repeating-conic-gradient(#ef4444 0% 25%, #f59e0b 0% 50%, #10b981 0% 75%, #3b82f6 0% 100%)",cursor:"pointer"}}),Yo.map(s=>jsxRuntime.jsx("button",{onClick:()=>C({noteColor:s}),style:{width:16,height:16,borderRadius:3,border:l.noteColor===s?"2px solid #111827":"1px solid #d1d5db",background:s,cursor:"pointer"}},s))]})]})});var to=220,oo=140,vr="#fafafa";function xr(o,e){let n=Math.min(o.x,e.x),r=Math.min(o.y,e.y),h=Math.max(o.x+o.width,e.x+e.width),c=Math.max(o.y+o.height,e.y+e.height);return {x:n,y:r,width:h-n,height:c-r}}function kr(o){return {x:o.x+o.width/2,y:o.y+o.height/2}}function Cr(){return {x:0,y:0,width:0,height:0}}function Sr(o){let e=1/0,n=1/0,r=-1/0,h=-1/0,c=false;for(let a of o){let l=ro(a);l&&(c=true,l.x<e&&(e=l.x),l.y<n&&(n=l.y),l.x+l.width>r&&(r=l.x+l.width),l.y+l.height>h&&(h=l.y+l.height));}return c?{x:e,y:n,width:r-e,height:h-n}:null}function ro(o){switch(o.type){case "rectangle":case "sticky-note":case "icon":case "rounded-rectangle":case "ellipse":case "diamond":case "triangle":case "hexagon":case "parallelogram":case "trapezoid":case "pentagon":case "octagon":case "star":case "cylinder":case "cloud":case "heart":case "block-arrow-right":case "block-arrow-left":case "block-arrow-up":case "block-arrow-down":case "block-arrow-double":case "right-triangle":case "cross":case "speech-rect":case "speech-round":case "cube":case "sector":case "delay":case "predefined-process":case "document":case "stadium":case "class-catalog":case "chevron":case "brace-left":case "brace-right":case "envelope":case "checkbox":case "triangular-pyramid":case "quadrangular-pyramid":case "cuboid":case "sphere":case "ellipsoid":case "pie":case "hollow-pie":case "uml-class":case "uml-interface":case "mind-map":case "table":case "text":return {x:o.x-o.width/2,y:o.y-o.height/2,width:o.width,height:o.height};case "circle":return {x:o.x-o.radius,y:o.y-o.radius,width:o.radius*2,height:o.radius*2};case "line":case "arrow":{let e=o.points;if(!e||e.length===0)return null;let n=1/0,r=1/0,h=-1/0,c=-1/0;for(let a of e)a.x<n&&(n=a.x),a.y<r&&(r=a.y),a.x>h&&(h=a.x),a.y>c&&(c=a.y);return {x:n,y:r,width:h-n,height:c-r}}case "draw":{let e=o,n=e.width,r=e.height;if(typeof n=="number"&&typeof r=="number")return {x:e.x-n/2,y:e.y-r/2,width:n,height:r};let h=e.points;if(!h||h.length===0)return null;let c=1/0,a=1/0,l=-1/0,S=-1/0;for(let g of h){let p=g.x+e.x,b=g.y+e.y;p<c&&(c=p),b<a&&(a=b),p>l&&(l=p),b>S&&(S=b);}return {x:c,y:a,width:l-c,height:S-a}}default:return null}}function Mr(o){let e=o.getCamera(),n=e.screenToPage({x:0,y:0}),r=e.screenToPage({x:window.innerWidth,y:window.innerHeight});return {x:n.x,y:n.y,width:r.x-n.x,height:r.y-n.y}}function Tr(o,e,n){if(o.width<=0||o.height<=0)return {x:o.x-e/2,y:o.y-n/2,width:e,height:n};let r=e/n,h=o.width,c=h/r;c<o.height&&(c=o.height,h=c*r);let a=kr(o);return {x:a.x-h/2,y:a.y-c/2,width:h,height:c}}function no(o,e,n,r){let h=(o-n.left)/n.width,c=(e-n.top)/n.height;return {x:r.x+h*r.width,y:r.y+c*r.height}}var Qo=react.memo(function({editor:e}){let n=react.useRef(null),r=react.useRef(null),[h,c]=react.useState(false),[a,l]=react.useState(100),[S,g]=react.useState(false),[p,b]=react.useState(false);U();let x=react.useRef(null),N=react.useRef(null);react.useLayoutEffect(()=>{let s=n.current,w=r.current;if(!s||!w)return;let m=window.devicePixelRatio||1;s.width=Math.round(to*m),s.height=Math.round(oo*m),s.style.width=`${to}px`,s.style.height=`${oo}px`;},[h]);let K=react.useCallback(()=>{let s=n.current,w=r.current;if(!s||!w||!e)return;let m=s.getContext("2d");if(!m)return;let G=to,z=oo,_=s.width,Q=s.height,F=e.getShapes(),H=new Set(e.getSelectedIds()),Y=drawuiCore.getTheme(),j=drawuiCore.hexToRgba(Y.text,.16),ee=Y.primary,M=drawuiCore.hexToRgba(Y.primary,.18),ue=drawuiCore.hexToRgba(Y.primary,.85),xe=Sr(F),B=Mr(e),Re=xe?xr(xe,B):B.width>0?B:Cr(),ye=Tr(Re,G,z);N.current=ye;let se=_/ye.width,Te=Q/ye.height,ke=G/ye.width;m.setTransform(1,0,0,1,0,0),m.fillStyle=vr,m.fillRect(0,0,_,Q),m.setTransform(se,0,0,Te,-se*ye.x,-Te*ye.y),m.fillStyle=j;for(let O of F){let v=ro(O);v&&m.fillRect(v.x,v.y,v.width,v.height);}m.fillStyle=ee;for(let O of F){if(!H.has(O.id))continue;let v=ro(O);v&&m.fillRect(v.x,v.y,v.width,v.height);}m.fillStyle=M,m.fillRect(B.x,B.y,B.width,B.height);let Ne=1.5/ke;m.strokeStyle=ue,m.lineWidth=Ne,m.lineJoin="round";let fe=Math.min(B.width/6,B.height/6,6/ke);if(m.beginPath(),fe*ke<1)m.rect(B.x,B.y,B.width,B.height);else {let O=B.x,v=B.y,pe=B.width,oe=B.height,le=Math.min(fe,pe/2,oe/2);m.moveTo(O+le,v),m.lineTo(O+pe-le,v),m.quadraticCurveTo(O+pe,v,O+pe,v+le),m.lineTo(O+pe,v+oe-le),m.quadraticCurveTo(O+pe,v+oe,O+pe-le,v+oe),m.lineTo(O+le,v+oe),m.quadraticCurveTo(O,v+oe,O,v+oe-le),m.lineTo(O,v+le),m.quadraticCurveTo(O,v,O+le,v),m.closePath();}m.stroke(),m.setTransform(1,0,0,1,0,0);},[e]);react.useEffect(()=>{if(!e||h)return;K();let s=e.subscribe(K),w=drawuiCore.subscribeTheme(K),m=()=>K();return window.addEventListener("resize",m),()=>{s(),w(),window.removeEventListener("resize",m);}},[e,h,K]),react.useEffect(()=>{if(!e)return;let s=()=>{let m=e.getCamera().getZoom();l(Math.round(m*100));};s();let w=e.subscribe(s);return ()=>{w();}},[e]);let I=react.useCallback((s,w)=>{if(!e)return;let m=e.getCamera(),G=m.getZoom(),z=window.innerWidth/2,_=window.innerHeight/2,Q=m;Q.x=z-s*G,Q.y=_-w*G,e.requestRender();},[e]),d=s=>{if(!e||!r.current||s.button!==0)return;let w=r.current.getBoundingClientRect(),m=N.current;if(!m)return;let G=no(s.clientX,s.clientY,w,m);x.current={pointerId:s.pointerId,rect:{left:w.left,top:w.top,width:w.width,height:w.height},canvasBox:m},s.currentTarget.setPointerCapture(s.pointerId),b(true),I(G.x,G.y);},E=s=>{if(!p||!e||!x.current||!r.current)return;let w=x.current,m=no(s.clientX,s.clientY,w.rect,w.canvasBox);I(m.x,m.y);},C=s=>{if(p){b(false),x.current=null;try{s.currentTarget.releasePointerCapture(s.pointerId);}catch{}}},Z=s=>{if(!e||!r.current)return;let w=N.current;if(!w)return;let m=r.current.getBoundingClientRect(),G=no(s.clientX,s.clientY,m,w);I(G.x,G.y);};return jsxRuntime.jsxs("div",{className:`drawui-minimap ${h?"collapsed":""}`,children:[jsxRuntime.jsx("button",{className:"drawui-minimap-toggle",onClick:()=>c(s=>!s),"data-drawui-tip":h?drawuiCore.t("minimap.expand"):drawuiCore.t("minimap.collapse"),"data-drawui-tip-pos":"top","aria-label":h?drawuiCore.t("minimap.expand"):drawuiCore.t("minimap.collapse"),children:jsxRuntime.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:h?jsxRuntime.jsx("polyline",{points:"9 6 15 12 9 18"}):jsxRuntime.jsx("polyline",{points:"15 6 9 12 15 18"})})}),!h&&jsxRuntime.jsxs("div",{className:"drawui-minimap-panel",children:[jsxRuntime.jsxs("div",{className:"drawui-minimap-header",children:[jsxRuntime.jsx("span",{className:"drawui-minimap-title",children:drawuiCore.t("minimap.title")}),jsxRuntime.jsxs("span",{className:"drawui-minimap-zoom",children:[a,"%"]})]}),jsxRuntime.jsx("div",{ref:r,className:"drawui-minimap-canvas-wrap",style:{cursor:p?"grabbing":S?"pointer":"default"},onPointerEnter:()=>g(true),onPointerLeave:()=>g(false),children:jsxRuntime.jsx("canvas",{ref:n,className:"drawui-minimap-canvas",onPointerDown:d,onPointerMove:E,onPointerUp:C,onPointerCancel:C,onDoubleClick:Z})})]})]})});var we=o=>jsxRuntime.jsx("svg",{viewBox:"0 0 24 24",width:"18",height:"18",className:"drawui-gen-shape-glyph",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round",children:o}),Er=[{type:"rectangle",labelKey:"shape.rectangle",glyph:we(jsxRuntime.jsx("rect",{x:"4",y:"7",width:"16",height:"10",rx:"1"}))},{type:"rounded-rectangle",labelKey:"shape.rounded-rectangle",glyph:we(jsxRuntime.jsx("rect",{x:"4",y:"7",width:"16",height:"10",rx:"4"}))},{type:"circle",labelKey:"shape.circle",glyph:we(jsxRuntime.jsx("circle",{cx:"12",cy:"12",r:"5.5"}))},{type:"ellipse",labelKey:"shape.ellipse",glyph:we(jsxRuntime.jsx("ellipse",{cx:"12",cy:"12",rx:"7",ry:"4.5"}))},{type:"diamond",labelKey:"shape.diamond",glyph:we(jsxRuntime.jsx("path",{d:"M12 5 L19 12 L12 19 L5 12 Z"}))},{type:"triangle",labelKey:"shape.triangle",glyph:we(jsxRuntime.jsx("path",{d:"M12 4 L20 19 H4 Z"}))},{type:"hexagon",labelKey:"shape.hexagon",glyph:we(jsxRuntime.jsx("path",{d:"M12 3 L19.5 7.5 V16.5 L12 21 L4.5 16.5 V7.5 Z"}))},{type:"parallelogram",labelKey:"shape.parallelogram",glyph:we(jsxRuntime.jsx("path",{d:"M6 7 L19 7 L16 17 H7 Z"}))},{type:"trapezoid",labelKey:"shape.trapezoid",glyph:we(jsxRuntime.jsx("path",{d:"M7 6 H17 L20 18 H4 Z"}))},{type:"pentagon",labelKey:"shape.pentagon",glyph:we(jsxRuntime.jsx("path",{d:"M12 4 L19.5 9.5 L16.5 18.5 H7.5 L4.5 9.5 Z"}))},{type:"octagon",labelKey:"shape.octagon",glyph:we(jsxRuntime.jsx("path",{d:"M8 4 H16 L20 8 V16 L16 20 H8 L4 16 V8 Z"}))},{type:"star",labelKey:"shape.star",glyph:we(jsxRuntime.jsx("path",{d:"M12 3 L14 9.5 L20.5 10 L15.5 14 L17.5 20.5 L12 16.8 L6.5 20.5 L8.5 14 L3.5 10 L10 9.5 Z"}))},{type:"sticky-note",labelKey:"shape.sticky-note",glyph:we(jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("path",{d:"M4 4h16v11l-5 5H4Z"}),jsxRuntime.jsx("path",{d:"M20 15h-5v5"})]}))},{type:"uml-class",labelKey:"shape.uml-class",glyph:we(jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("rect",{x:"3",y:"4",width:"18",height:"16",rx:"1"}),jsxRuntime.jsx("path",{d:"M3 9 H21"}),jsxRuntime.jsx("path",{d:"M3 15 H21"}),jsxRuntime.jsx("path",{d:"M6 6.5 H10"}),jsxRuntime.jsx("path",{d:"M6 12.5 H12"})]}))},{type:"uml-interface",labelKey:"shape.uml-interface",glyph:we(jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("rect",{x:"3",y:"4",width:"18",height:"16",rx:"1"}),jsxRuntime.jsx("path",{d:"M3 9 H21"}),jsxRuntime.jsx("path",{d:"M6 6.5 H10"}),jsxRuntime.jsx("path",{d:"M6 12.5 H12"})]}))},{type:"mind-map",labelKey:"shape.mind-map",glyph:we(jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("circle",{cx:"5",cy:"12",r:"2"}),jsxRuntime.jsx("path",{d:"M7 12h2.6"}),jsxRuntime.jsx("path",{d:"M9.6 12c0-2 1.2-3.4 2.6-3.4"}),jsxRuntime.jsx("path",{d:"M9.6 12c0 2 1.2 3.4 2.6 3.4"}),jsxRuntime.jsx("circle",{cx:"15.2",cy:"8.6",r:"1.3"}),jsxRuntime.jsx("circle",{cx:"15.2",cy:"15.4",r:"1.3"}),jsxRuntime.jsx("circle",{cx:"13.6",cy:"12",r:"1.3"})]}))}];function en({editor:o,x:e,y:n,context:r,existingArrowId:h,defaultShapeType:c,onClose:a}){let l=react.useRef(null);U();let S=g=>{o?.createGeneratedConnection(r,{type:g,existingArrowId:h}),a();};return react.useEffect(()=>{let g=x=>{l.current&&!l.current.contains(x.target)&&a();},p=x=>{x.key==="Escape"&&(x.preventDefault(),a());},b=setTimeout(()=>{window.addEventListener("pointerdown",g,true),window.addEventListener("keydown",p,true);},0);return ()=>{clearTimeout(b),window.removeEventListener("pointerdown",g,true),window.removeEventListener("keydown",p,true);}},[a]),jsxRuntime.jsxs("div",{className:"drawui-gen-menu",ref:l,style:{left:e,top:n},children:[jsxRuntime.jsx("div",{className:"drawui-gen-menu-label",children:drawuiCore.t("menu.title")}),jsxRuntime.jsx("div",{className:"drawui-gen-shape-grid",children:Er.map(g=>jsxRuntime.jsxs("button",{className:`drawui-gen-shape-btn${g.type===c?" drawui-gen-shape-active":""}`,onClick:()=>S(g.type),"data-drawui-tip":drawuiCore.t(g.labelKey),children:[g.glyph,jsxRuntime.jsx("span",{className:"drawui-gen-shape-label",children:drawuiCore.t(g.labelKey)})]},g.type))}),jsxRuntime.jsx("div",{className:"drawui-gen-menu-hint",children:drawuiCore.t("menu.cancel")})]})}var Pr={select:"tool.select",hand:"tool.hand",rectangle:"tool.rectangle","rounded-rectangle":"tool.rounded-rectangle",circle:"tool.circle",ellipse:"tool.ellipse",diamond:"tool.diamond",triangle:"tool.triangle",hexagon:"tool.hexagon",parallelogram:"tool.parallelogram",trapezoid:"tool.trapezoid",pentagon:"tool.pentagon",octagon:"tool.octagon",star:"tool.star",cylinder:"tool.cylinder",cloud:"tool.cloud",heart:"tool.heart","block-arrow-right":"tool.block-arrow-right","block-arrow-left":"tool.block-arrow-left","block-arrow-up":"tool.block-arrow-up","block-arrow-down":"tool.block-arrow-down","block-arrow-double":"tool.block-arrow-double","right-triangle":"tool.right-triangle",cross:"tool.cross","speech-rect":"tool.speech-rect","speech-round":"tool.speech-round",cube:"tool.cube",sector:"tool.sector",delay:"tool.delay","predefined-process":"tool.predefined-process",document:"tool.document",stadium:"tool.stadium","class-catalog":"tool.class-catalog",chevron:"tool.chevron","brace-left":"tool.brace-left","brace-right":"tool.brace-right",envelope:"tool.envelope",checkbox:"tool.checkbox","sticky-note":"tool.sticky-note",icon:"toolbar.icon","triangular-pyramid":"tool.triangular-pyramid","quadrangular-pyramid":"tool.quadrangular-pyramid",cuboid:"tool.cuboid",sphere:"tool.sphere",ellipsoid:"tool.ellipsoid",pie:"tool.pie","hollow-pie":"tool.hollow-pie","uml-class":"tool.uml-class","uml-interface":"tool.uml-interface",line:"tool.line",arrow:"tool.arrow",text:"tool.text",draw:"tool.draw",pen:"tool.pen",highlighter:"tool.highlighter",eraser:"tool.eraser","mind-map":"tool.mind-map",table:"tool.table"};function Ar({initialTool:o="select",className:e="",themeColor:n,language:r="zh-CN",data:h,onChange:c,onReady:a}){let l=react.useRef(null),S=react.useRef(null),g=react.useRef(null),[p,b]=react.useState(null);U();let[x,N]=react.useState(o),[K,I]=react.useState(false),[d,E]=react.useState(0),[C,Z]=react.useState(false),[s,w]=react.useState("straight"),[m,G]=react.useState("end"),[z,_]=react.useState(false),[Q,F]=react.useState(void 0),[H,Y]=react.useState(100),[j,ee]=react.useState(null),[M,ue]=react.useState(null),[xe,B]=react.useState(false),[Re,ye]=react.useState(false),[se,Te]=react.useState(null),[ke,Ne]=react.useState(null),[fe,O]=react.useState(false),[v,pe]=react.useState(null),[oe,le]=react.useState(null),X=react.useRef(null),He=react.useRef(0),me=react.useRef(null),We=react.useRef(c);We.current=c;let Ue=react.useRef(a);Ue.current=a,react.useEffect(()=>{if(!l.current)return;let f=new drawuiCore.Editor(l.current,{theme:n?{primary:n,editBorder:n,selection:{outline:n,handleStroke:n,handleFill:"#ffffff",outlineFill:drawuiCore.hexToRgba(n,.1),shadow:n}}:void 0,language:r,shapes:h,persist:!h});g.current=f,b(f),window.__drawuiEditor=f,f.setHighlighterColor(mt()),f.setStickyNoteColor(bt()),Ue.current?.(f),o&&f.setActiveTool(o);let k=f.subscribe(()=>{N(f.getActiveTool());let R=f.getSelectedIds();E(R.length);let Ce=f.getShapes().filter($e=>R.includes($e.id)&&($e.type==="line"||$e.type==="arrow"));if(Z(Ce.length>0),Ce.length>0&&Ce[0].connectionType?w(Ce[0].connectionType):Ce.length>0&&w("straight"),Ce.length>0){let $e=Ce.find(At=>At.type==="arrow");$e&&(G($e.arrowHead??"end"),_($e.dashed??false));}Y(Math.round(f.getCamera().getZoom()*100)),F(f.getArrowStyle()),B(f.canUndo()),ye(f.canRedo());let Oe=f.getSelectedUml();Te(Oe),Oe||pe(null);let Ze=f.getSelectedMindMap();Ne(Ze),f.getMindMapEditingShapeId()||O(false),We.current?.(f.getData());}),ce=f.subscribeNotifications(R=>{ue({type:"success",text:R}),X.current&&clearTimeout(X.current),X.current=setTimeout(()=>ue(null),3500);}),Pe=f.subscribeUi(R=>{R.kind==="shapeTypeMenu"&&le({x:R.screenX,y:R.screenY,context:R.context,existingArrowId:R.existingArrowId,defaultShapeType:R.defaultShapeType});});return ()=>{k(),ce(),Pe(),X.current&&clearTimeout(X.current),cancelAnimationFrame(He.current),f.dispose();}},[o]),react.useEffect(()=>{if(!n)return;let f=S.current;f&&(f.style.setProperty("--dw-primary",n),f.style.setProperty("--dw-primary-hover",drawuiCore.shadeColor(n,-0.12)),f.style.setProperty("--dw-primary-weak",drawuiCore.hexToRgba(n,.1)),f.style.setProperty("--dw-primary-contrast","#ffffff"),f.style.setProperty("--dw-shadow-primary",`0 2px 8px ${drawuiCore.hexToRgba(n,.3)}`)),g.current?.setTheme({primary:n,editBorder:n,selection:{outline:n,handleStroke:n,handleFill:"#ffffff",outlineFill:drawuiCore.hexToRgba(n,.1),shadow:n}});},[n]),react.useEffect(()=>{drawuiCore.setLanguage(r),g.current?.setLanguage(r);},[r]);let Ye=react.useCallback(f=>{g.current?.setActiveTool(f);},[]),je=react.useCallback(()=>{g.current?.zoomIn();},[]),Ee=react.useCallback(()=>{g.current?.zoomOut();},[]),y=react.useCallback(()=>{g.current?.resetZoom();},[]),$=react.useCallback(()=>{let f=!K;I(f),g.current?.setShowGrid(f);},[K]),P=react.useCallback(()=>{g.current?.undo();},[]),D=react.useCallback(()=>{g.current?.redo();},[]),q=react.useCallback(f=>{g.current?.downloadImage("drawui",f,{background:"#ffffff"});},[]),ne=react.useCallback(()=>{g.current?.downloadJSON("drawui-data");},[]),Ie=react.useCallback(f=>{let k=new FileReader;k.onload=()=>{let ce=typeof k.result=="string"?k.result:"";if(g.current?.importJSON(ce)??false){let R=g.current?.getShapes().length??0;ue({type:"success",text:drawuiCore.t("import.success",{n:R})});}else ue({type:"error",text:drawuiCore.t("import.fail")});X.current&&clearTimeout(X.current),X.current=setTimeout(()=>ue(null),3500);},k.onerror=()=>{ue({type:"error",text:drawuiCore.t("import.fail")}),X.current&&clearTimeout(X.current),X.current=setTimeout(()=>ue(null),3500);},k.readAsText(f,"utf-8");},[]),u=react.useCallback(f=>{let k=g.current,ce=l.current;if(!k||!ce)return;if(k.isPointerDown()){me.current!==null&&(me.current=null,ee(null));return}let Pe=f.clientX,R=f.clientY;cancelAnimationFrame(He.current),He.current=requestAnimationFrame(()=>{let tt=ce.getBoundingClientRect(),Ce=Pe-tt.left,Oe=R-tt.top,Ze=Ce+12,$e=Oe+12,At=k.getSelectedUml()?.id,ot=k.getUmlRowAtScreenPoint({x:Ce,y:Oe});if(ot&&ot.shape.id!==At&&ot.text&&k.isUmlRowTextTruncated(ot)){me.current!==ot.text&&(me.current=ot.text,ee({text:ot.text,x:Ze,y:$e}));return}let at=k.getShapeAtScreenPoint({x:Ce,y:Oe});at&&at.text&&k.isShapeTextTruncated(at.id)?me.current!==at.text&&(me.current=at.text,ee({text:at.text,x:Ze,y:$e})):me.current!==null&&(me.current=null,ee(null));});},[]),W=react.useCallback(()=>{ee(null);},[]),i=react.useCallback(f=>{let k=g.current,ce=l.current;if(!k||!ce)return;let Pe=ce.getBoundingClientRect(),R=f.clientX-Pe.left,tt=f.clientY-Pe.top,Ce=k.getUmlRowAtScreenPoint({x:R,y:tt});if(Ce){pe(Ce.shape.id);return}let Oe=k.getMindMapNodeAtScreenPoint({x:R,y:tt});if(Oe){k.beginMindMapEdit(Oe.shapeId,Oe.nodeId);return}let Ze=k.getTableAtScreenPoint({x:R,y:tt});Ze&&k.beginTableEdit(Ze.shapeId,Ze.row,Ze.col);},[]),T=react.useCallback(()=>{le(null);},[]);return jsxRuntime.jsxs("div",{ref:S,className:`drawui-canvas-board ${e}`,children:[jsxRuntime.jsx("canvas",{ref:l,className:"drawui-canvas",onMouseMove:u,onMouseLeave:W,onDoubleClick:i}),j&&jsxRuntime.jsx("div",{className:"drawui-tooltip",style:{left:j.x,top:j.y},children:j.text}),jsxRuntime.jsx(Gt,{activeTool:x,onToolChange:Ye,showGrid:K,onToggleGrid:$,canUndo:xe,canRedo:Re,onUndo:P,onRedo:D,onExport:q,onExportData:ne,onImportData:Ie,onHighlighterColorChange:f=>g.current?.setHighlighterColor(f),onStickyNoteColorChange:f=>g.current?.setStickyNoteColor(f),onInsertIcon:f=>g.current?.insertIcon(f),onInsertTable:(f,k)=>g.current?.insertTable(f,k),arrowStyle:Q,onArrowStyleChange:f=>g.current?.setArrowStyle(f)}),jsxRuntime.jsx(Vt,{onZoomIn:je,onZoomOut:Ee,onReset:y,zoomLevel:H}),jsxRuntime.jsx(Ro,{editor:p,selectedCount:d,hasLineSelection:C,currentConnectionType:s,currentArrowHead:m,currentDashed:z}),jsxRuntime.jsx($o,{editor:p,umlClass:se,editing:v}),jsxRuntime.jsx(Vo,{editor:p}),jsxRuntime.jsx(Zo,{editor:p,panelOpen:fe}),jsxRuntime.jsx(_o,{editor:p,panelOpen:fe,onOpenPanel:()=>O(true)}),fe&&jsxRuntime.jsx(Xo,{editor:p,mindMap:ke}),jsxRuntime.jsx(Qo,{editor:p}),oe&&jsxRuntime.jsx(en,{editor:p,x:oe.x,y:oe.y,context:oe.context,existingArrowId:oe.existingArrowId,defaultShapeType:oe.defaultShapeType,onClose:T}),jsxRuntime.jsxs("div",{className:"drawui-status-bar",children:[jsxRuntime.jsx("div",{className:"drawui-status-item",children:jsxRuntime.jsx("span",{children:drawuiCore.t(Pr[x])})}),jsxRuntime.jsx("div",{className:"drawui-status-item",children:jsxRuntime.jsx("span",{children:d===0?drawuiCore.t("status.none"):drawuiCore.t("status.selected",{n:d})})}),jsxRuntime.jsx("div",{className:"drawui-status-item",children:jsxRuntime.jsxs("span",{children:[H,"%"]})})]}),M&&jsxRuntime.jsxs("div",{className:"drawui-toast",children:[M.type==="success"?jsxRuntime.jsx("svg",{className:"drawui-toast-icon",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:jsxRuntime.jsx("polyline",{points:"20 6 9 17 4 12"})}):jsxRuntime.jsxs("svg",{className:"drawui-toast-icon drawui-toast-icon-error",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntime.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),jsxRuntime.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]}),M.text]})]})}exports.CanvasBoard=Ar;exports.Toolbar=Gt;exports.ZoomControl=Vt;
package/dist/index.d.cts CHANGED
@@ -38,6 +38,8 @@ interface ToolbarProps {
38
38
  onStickyNoteColorChange?: (color: string) => void;
39
39
  /** 从图标库面板选了一个图标:宿主负责插入画布 */
40
40
  onInsertIcon?: (iconId: string) => void;
41
+ /** 「表格」行列选择器里选了 rows×cols:宿主负责插入画布 */
42
+ onInsertTable?: (rows: number, cols: number) => void;
41
43
  /** 新建箭头的默认样式(工具栏「箭头」下拉里展示/修改) */
42
44
  arrowStyle?: ArrowStyle;
43
45
  onArrowStyleChange?: (updates: Partial<ArrowStyle>) => void;
package/dist/index.d.ts CHANGED
@@ -38,6 +38,8 @@ interface ToolbarProps {
38
38
  onStickyNoteColorChange?: (color: string) => void;
39
39
  /** 从图标库面板选了一个图标:宿主负责插入画布 */
40
40
  onInsertIcon?: (iconId: string) => void;
41
+ /** 「表格」行列选择器里选了 rows×cols:宿主负责插入画布 */
42
+ onInsertTable?: (rows: number, cols: number) => void;
41
43
  /** 新建箭头的默认样式(工具栏「箭头」下拉里展示/修改) */
42
44
  arrowStyle?: ArrowStyle;
43
45
  onArrowStyleChange?: (updates: Partial<ArrowStyle>) => void;
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import {memo,useState,useRef,useEffect,useMemo,useCallback,useLayoutEffect}from'react';import {ICON_CATEGORIES,getIcon,searchIcons,iconsByCategory,ICON_CATEGORY_INK,ICON_DEFAULT_INK,t,iconInk,STICKY_NOTE_COLORS,getContentBounds,UML_FONT_SIZE,MINDMAP_COLORS,layoutMindMap,getTheme,hexToRgba,subscribeTheme,getLanguage,subscribeLanguage,ICON_GRID,DEFAULT_HIGHLIGHTER_COLOR,STICKY_NOTE_DEFAULT_COLOR,UML_LINE_HEIGHT,UML_PADDING_Y,UML_PADDING_X,UML_HEADER_HEIGHT,MINDMAP_FONT_SIZE,Editor,shadeColor,setLanguage}from'drawui-core';import {jsxs,jsx,Fragment}from'react/jsx-runtime';function G(){let[o,e]=useState(getLanguage());return useEffect(()=>subscribeLanguage(()=>e(getLanguage())),[]),o}var no=["#ffeb3b","#22c55e","#3b82f6","#ec4899","#8b5cf6","#f97316"],ro="drawui:highlighterColor";function ht(){if(typeof window>"u")return DEFAULT_HIGHLIGHTER_COLOR;try{let o=window.localStorage.getItem(ro);return o&&/^#[0-9a-fA-F]{6}$/.test(o)?o.toLowerCase():DEFAULT_HIGHLIGHTER_COLOR}catch{return DEFAULT_HIGHLIGHTER_COLOR}}function ao(o){if(!(typeof window>"u"))try{window.localStorage.setItem(ro,o);}catch{}}var so="drawui:stickyNoteColor";function yt(){if(typeof window>"u")return STICKY_NOTE_DEFAULT_COLOR;try{let o=window.localStorage.getItem(so);return o&&/^#[0-9a-fA-F]{6}$/.test(o)?o.toLowerCase():STICKY_NOTE_DEFAULT_COLOR}catch{return STICKY_NOTE_DEFAULT_COLOR}}function lo(o){if(!(typeof window>"u"))try{window.localStorage.setItem(so,o);}catch{}}function Jo({icon:o,size:e=24,ink:n=ICON_DEFAULT_INK}){return jsxs("svg",{viewBox:`0 0 ${ICON_GRID} ${ICON_GRID}`,width:e,height:e,fill:"none","aria-hidden":"true",children:[o.disc&&jsx("circle",{cx:ICON_GRID/2,cy:ICON_GRID/2,r:ICON_GRID/2-1,fill:o.disc}),o.layers.map((r,h)=>{let d=r.fill??"ink",s=r.stroke??"ink";return jsx("path",{d:r.d,fill:d==="none"?"none":d==="ink"?n:d,...s==="none"?{}:{stroke:s==="ink"?n:s,strokeWidth:r.w??1.8,strokeLinecap:"round",strokeLinejoin:"round"}},h)}),o.label&&jsx("text",{x:ICON_GRID/2,y:ICON_GRID/2+.5,textAnchor:"middle",dominantBaseline:"central",fontFamily:"sans-serif",fontSize:o.label.size??13,fill:o.label.color,children:o.label.text})]})}var yo="drawui:recentIcons",fo=12;function At(o,e){let n=/^#?([0-9a-f]{6})$/i.exec(o.trim());if(!n)return o;let r=parseInt(n[1],16);return `rgba(${r>>16&255}, ${r>>8&255}, ${r&255}, ${e})`}function Qo(){if(typeof window>"u")return [];try{let o=JSON.parse(window.localStorage.getItem(yo)||"[]");return Array.isArray(o)?o.filter(e=>typeof e=="string").slice(0,fo):[]}catch{return []}}function en(o){if(!(typeof window>"u"))try{window.localStorage.setItem(yo,JSON.stringify(o));}catch{}}var ho=o=>({"--dw-icon-cat":o,"--dw-icon-cat-soft":At(o,.12)}),mo=memo(function({onPick:e,onClose:n}){G();let[r,h]=useState(""),[d,s]=useState(ICON_CATEGORIES[0].id),[l,S]=useState(Qo),f=useRef(null),u=useRef(null);useEffect(()=>{u.current?.focus();},[]),useEffect(()=>{let p=L=>{let se=f.current;se&&(se.contains(L.target)||L.target?.closest?.("[data-icon-toggle]")||n());},A=L=>{L.key==="Escape"&&(L.stopPropagation(),n());};return window.addEventListener("pointerdown",p),window.addEventListener("keydown",A),()=>{window.removeEventListener("pointerdown",p),window.removeEventListener("keydown",A);}},[n]);let w=useMemo(()=>l.map(p=>getIcon(p)).filter(p=>!!p),[l]),I=useMemo(()=>r.trim()?searchIcons(r):d==="recent"?w:iconsByCategory(d),[r,d,w]),z=d==="recent"?ICON_CATEGORY_INK.status:ICON_CATEGORY_INK[d]??ICON_DEFAULT_INK,C=r.trim()?t("icon.search"):d==="recent"?t("icon.recent"):t(ICON_CATEGORIES.find(p=>p.id===d)?.labelKey??"icon.search"),B=p=>{e(p),S(A=>{let L=[p.id,...A.filter(se=>se!==p.id)].slice(0,fo);return en(L),L});};return jsxs("div",{className:"drawui-icon-panel",ref:f,style:{"--dw-icon-accent":z,"--dw-icon-soft":At(z,.08),"--dw-icon-ring":At(z,.22)},children:[jsxs("label",{className:"drawui-icon-search",children:[jsxs("svg",{viewBox:"0 0 24 24",width:"15",height:"15",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",children:[jsx("circle",{cx:"10.5",cy:"10.5",r:"6.5"}),jsx("path",{d:"M15.4 15.4L20 20"})]}),jsx("input",{ref:u,value:r,onChange:p=>h(p.target.value),onKeyDown:p=>{p.key==="Enter"&&I.length>0&&B(I[0]);},placeholder:t("icon.search"),"aria-label":t("icon.search")}),jsx("span",{className:"drawui-icon-count",children:I.length})]}),!r.trim()&&jsxs("div",{className:"drawui-icon-cats",children:[w.length>0&&jsxs("button",{type:"button",className:`drawui-icon-cat${d==="recent"?" active":""}`,style:ho(ICON_CATEGORY_INK.status),onClick:()=>s("recent"),children:[jsx("i",{className:"drawui-icon-dot"}),t("icon.recent")]}),ICON_CATEGORIES.map(p=>jsxs("button",{type:"button",className:`drawui-icon-cat${d===p.id?" active":""}`,style:ho(ICON_CATEGORY_INK[p.id]??ICON_DEFAULT_INK),onClick:()=>s(p.id),children:[jsx("i",{className:"drawui-icon-dot"}),t(p.labelKey)]},p.id))]}),jsxs("div",{className:"drawui-icon-card",children:[jsxs("div",{className:"drawui-icon-card-head",children:[jsx("span",{className:"drawui-icon-card-title",children:C}),jsx("span",{className:"drawui-icon-card-count",children:I.length})]}),jsxs("div",{className:"drawui-icon-grid",children:[I.map(p=>jsx("button",{type:"button",className:"drawui-icon-item",title:`${p.zh} / ${p.en}`,"aria-label":`${p.zh} ${p.en}`,onClick:()=>B(p),children:jsx(Jo,{icon:p,size:30,ink:iconInk(p)})},p.id)),I.length===0&&jsx("div",{className:"drawui-icon-empty",children:t("icon.empty")})]})]})]})});var Ce=o=>`${o.x.toFixed(1)},${o.y.toFixed(1)}`,go=(o,e)=>{let n=e*Math.PI/180;return {x:o.x*Math.cos(n)-o.y*Math.sin(n),y:o.x*Math.sin(n)+o.y*Math.cos(n)}},ot={x:Math.SQRT1_2,y:-Math.SQRT1_2},$t={x:4.6,y:19.4},st={x:19,y:5};function Dt(o,e,n){let r={x:-n.y,y:n.x},h=s=>({x:e.x-n.x*s,y:e.y-n.y*s}),d=(s,l)=>({x:s.x+r.x*l,y:s.y+r.y*l});switch(o){case "end":{let s=h(5.6);return jsx("polygon",{points:`${Ce(e)} ${Ce(d(s,2.7))} ${Ce(d(s,-2.7))}`,fill:"currentColor",stroke:"none"})}case "inheritance":case "realization":{let s=h(8.6);return jsx("polygon",{points:`${Ce(e)} ${Ce(d(s,3.5))} ${Ce(d(s,-3.5))}`,fill:"none"})}case "aggregation":case "composition":{let s=h(4.3),l=h(8.6);return jsx("polygon",{points:`${Ce(e)} ${Ce(d(s,2.7))} ${Ce(l)} ${Ce(d(s,-2.7))}`,fill:o==="composition"?"currentColor":"none",stroke:"currentColor"})}case "dependency":{let s=go({x:-n.x,y:-n.y},30),l=go({x:-n.x,y:-n.y},-30);return jsx("path",{d:`M ${Ce({x:e.x+s.x*5.8,y:e.y+s.y*5.8})} L ${Ce(e)} L ${Ce({x:e.x+l.x*5.8,y:e.y+l.y*5.8})}`,fill:"none"})}default:return null}}function Ie(o,e){let n=e||o==="dependency"||o==="realization",r=n?{x:st.x-ot.x*8.6,y:st.y-ot.y*8.6}:st,h={x:-ot.x,y:-ot.y};return jsxs("svg",{viewBox:"0 0 24 24",width:"18",height:"18",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[jsx("line",{x1:$t.x,y1:$t.y,x2:r.x,y2:r.y,strokeDasharray:n?"3 2.6":void 0}),(o==="end"||o==="both")&&Dt("end",st,ot),(o==="start"||o==="both")&&Dt("end",$t,h),o!=="none"&&o!=="start"&&o!=="end"&&o!=="both"?Dt(o,st,ot):null]})}var mt=o=>jsx("svg",{viewBox:"0 0 24 24",width:"18",height:"18",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:jsx("path",{d:o})}),on=[{type:"straight",labelKey:"style.connection.straight",icon:mt("M3 12h18")},{type:"polyline",labelKey:"style.connection.polyline",icon:mt("M4 8 C 12 8, 12 16, 20 16")},{type:"orthogonal",labelKey:"style.connection.orthogonal",icon:mt("M5 5v14h14")},{type:"curve",labelKey:"style.connection.curve",icon:mt("M3 13 C 6 7, 9 7, 12 12 C 15 17, 18 17, 21 11")}],wo=[{key:"none",arrowHead:"none",dashed:false,labelKey:"style.arrowhead.none",icon:Ie("none",false)},{key:"end",arrowHead:"end",dashed:false,labelKey:"style.arrowhead.end",icon:Ie("end",false)},{key:"start",arrowHead:"start",dashed:false,labelKey:"style.arrowhead.start",icon:Ie("start",false)},{key:"both",arrowHead:"both",dashed:false,labelKey:"style.arrowhead.both",icon:Ie("both",false)},{key:"none-dashed",arrowHead:"none",dashed:true,labelKey:"style.arrowhead.none-dashed",icon:Ie("none",true)},{key:"both-dashed",arrowHead:"both",dashed:true,labelKey:"style.arrowhead.both-dashed",icon:Ie("both",true)}],xo=[{key:"inheritance",arrowHead:"inheritance",dashed:false,labelKey:"style.arrowhead.inheritance",icon:Ie("inheritance",false)},{key:"composition",arrowHead:"composition",dashed:false,labelKey:"style.arrowhead.composition",icon:Ie("composition",false)},{key:"aggregation",arrowHead:"aggregation",dashed:false,labelKey:"style.arrowhead.aggregation",icon:Ie("aggregation",false)},{key:"dependency",arrowHead:"dependency",dashed:true,labelKey:"style.arrowhead.dependency",icon:Ie("dependency",true)},{key:"realization",arrowHead:"realization",dashed:true,labelKey:"style.arrowhead.realization",icon:Ie("realization",true)}],bo=[...wo,...xo];function nn(o,e){let n=bo.find(r=>r.arrowHead===o&&r.dashed===e);return n?n.key:bo.find(r=>r.arrowHead===o)?.key}var bt=memo(function({connectionType:e,arrowHead:n,dashed:r,onConnectionTypeChange:h,onArrowStyleChange:d,onOptionHover:s,onOptionLeave:l}){G();let S=nn(n,r),f=u=>jsx("div",{className:"drawui-connection-row",children:u.map(w=>jsxs("button",{className:`drawui-connection-btn${S===w.key?" active":""}`,onClick:()=>d(w),"data-drawui-tip":s?void 0:t(w.labelKey),onMouseEnter:s?I=>s(w.labelKey,I.currentTarget):void 0,onMouseLeave:s?l:void 0,"aria-label":t(w.labelKey),type:"button",children:[jsx("span",{className:"drawui-connection-icon",children:w.icon}),jsx("span",{className:"drawui-connection-label",children:t(w.labelKey)})]},w.key))});return jsxs(Fragment,{children:[jsx("div",{className:"drawui-style-popover-title",children:t("style.connection")}),jsx("div",{className:"drawui-connection-row",children:on.map(u=>jsxs("button",{className:`drawui-connection-btn${e===u.type?" active":""}`,onClick:()=>h(u.type),"data-drawui-tip":s?void 0:t(u.labelKey),onMouseEnter:s?w=>s(u.labelKey,w.currentTarget):void 0,onMouseLeave:s?l:void 0,"aria-label":t(u.labelKey),type:"button",children:[jsx("span",{className:"drawui-connection-icon",children:u.icon}),jsx("span",{className:"drawui-connection-label",children:t(u.labelKey)})]},u.type))}),jsx("div",{className:"drawui-style-popover-title",children:t("style.arrow")}),f(wo),jsx("div",{className:"drawui-style-popover-title",children:t("style.uml")}),f(xo)]})});var vo=[{type:"rectangle",icon:jsx("rect",{x:"3",y:"5",width:"18",height:"14",rx:"0"})},{type:"rounded-rectangle",icon:jsx("rect",{x:"3",y:"5",width:"18",height:"14",rx:"4"})},{type:"circle",icon:jsx("circle",{cx:"12",cy:"12",r:"8"})},{type:"ellipse",icon:jsx("ellipse",{cx:"12",cy:"12",rx:"9",ry:"6"})},{type:"diamond",icon:jsx("path",{d:"M12 3L21 12L12 21L3 12Z"})},{type:"triangle",icon:jsx("path",{d:"M12 4L20 19L4 19Z"})},{type:"hexagon",icon:jsx("path",{d:"M12 3L20 7.5V16.5L12 21L4 16.5V7.5Z"})},{type:"parallelogram",icon:jsx("path",{d:"M7 5L20 5L17 19L4 19Z"})},{type:"trapezoid",icon:jsx("path",{d:"M6 5L18 5L21 19L3 19Z"})},{type:"pentagon",icon:jsx("path",{d:"M12 3L21 10L17.5 21L6.5 21L3 10Z"})},{type:"octagon",icon:jsx("path",{d:"M8 3L16 3L21 8L21 16L16 21L8 21L3 16L3 8Z"})},{type:"star",icon:jsx("path",{d:"M12 2L14.5 8.5L21 9L16 13.5L17.5 20L12 16.5L6.5 20L8 13.5L3 9L9.5 8.5Z"})},{type:"cylinder",icon:jsxs(Fragment,{children:[jsx("ellipse",{cx:"12",cy:"6.5",rx:"6",ry:"2.8"}),jsx("path",{d:"M6 6.5v11c0 1.5 2.7 2.8 6 2.8s6-1.3 6-2.8v-11"})]})},{type:"cloud",icon:jsx("path",{d:"M7 18.5h9.4a3.4 3.4 0 0 0 .3-6.8 5 5 0 0 0-9.5-1.2A3.9 3.9 0 0 0 7 18.5Z"})},{type:"heart",icon:jsx("path",{d:"M12 20.3S4.6 15.7 4.6 10.5A4.1 4.1 0 0 1 12 7.6a4.1 4.1 0 0 1 7.4 2.9c0 5.2-7.4 9.8-7.4 9.8Z"})},{type:"block-arrow-right",icon:jsx("path",{d:"M3 9h9V5l9 7-9 7v-4H3Z"})},{type:"block-arrow-left",icon:jsx("path",{d:"M21 9h-9V5L3 12l9 7v-4h9Z"})},{type:"block-arrow-up",icon:jsx("path",{d:"M9 21v-9H5l7-9 7 9h-4v9Z"})},{type:"block-arrow-down",icon:jsx("path",{d:"M9 3v9H5l7 9 7-9h-4V3Z"})},{type:"block-arrow-double",icon:jsx("path",{d:"M2 12l4.5-6v3.5h11V6L22 12l-4.5 6v-3.5h-11V18Z"})},{type:"right-triangle",icon:jsx("path",{d:"M4 4v16h16Z"})},{type:"cross",icon:jsx("path",{d:"M9.5 3h5v6.5H21v5h-6.5V21h-5v-6.5H3v-5h6.5Z"})},{type:"envelope",icon:jsxs(Fragment,{children:[jsx("rect",{x:"3",y:"5",width:"18",height:"14"}),jsx("path",{d:"M3 5l18 14M21 5L3 19"})]})},{type:"checkbox",icon:jsxs(Fragment,{children:[jsx("rect",{x:"3",y:"3",width:"18",height:"18",rx:"3"}),jsx("path",{d:"M7.8 12.3l2.7 2.7 5.7-6.2"})]})},{type:"speech-rect",icon:jsx(Fragment,{children:jsx("path",{d:"M3 5h18v11H8l-3.2 3.2V16H3Z"})})},{type:"speech-round",icon:jsxs(Fragment,{children:[jsx("ellipse",{cx:"12",cy:"10.5",rx:"9",ry:"6.5"}),jsx("path",{d:"M8 16.2 6 21l5-3.4"})]})},{type:"cube",icon:jsxs(Fragment,{children:[jsx("path",{d:"M12 3 20 7.5v9L12 21 4 16.5v-9Z"}),jsx("path",{d:"M4 7.5 12 12l8-4.5M12 12v9"})]})},{type:"cuboid",icon:jsxs(Fragment,{children:[jsx("path",{d:"M12 4 21 8.5v7L12 20 3 15.5v-7Z"}),jsx("path",{d:"M3 8.5 12 13l9-4.5M12 13v7"})]})},{type:"triangular-pyramid",icon:jsxs(Fragment,{children:[jsx("path",{d:"M12 3 21.5 16.5 12 21 2.5 16.5Z"}),jsx("path",{d:"M12 3v18M2.5 16.5h19"})]})},{type:"quadrangular-pyramid",icon:jsxs(Fragment,{children:[jsx("path",{d:"M12 3 22.5 17 12 21 1.5 17Z"}),jsx("path",{d:"M12 3v18M12 12 1.5 17M12 12l10.5 5"})]})},{type:"sphere",icon:jsxs(Fragment,{children:[jsx("circle",{cx:"12",cy:"12",r:"9"}),jsx("ellipse",{cx:"12",cy:"12",rx:"9",ry:"2.5"})]})},{type:"ellipsoid",icon:jsxs(Fragment,{children:[jsx("ellipse",{cx:"12",cy:"12",rx:"10",ry:"6.5"}),jsx("ellipse",{cx:"12",cy:"12",rx:"10",ry:"1.9"})]})},{type:"pie",icon:jsxs(Fragment,{children:[jsx("ellipse",{cx:"12",cy:"9",rx:"9",ry:"3.5"}),jsx("path",{d:"M3 9v5c0 1.9 4 3.5 9 3.5s9-1.6 9-3.5V9"}),jsx("path",{d:"M12 9 5.6 12M12 9l6.4 3"})]})},{type:"hollow-pie",icon:jsxs(Fragment,{children:[jsx("ellipse",{cx:"12",cy:"9",rx:"9",ry:"3.5"}),jsx("path",{d:"M3 9v5c0 1.9 4 3.5 9 3.5s9-1.6 9-3.5V9"}),jsx("ellipse",{cx:"12",cy:"9",rx:"3.6",ry:"1.5"})]})},{type:"sector",icon:jsx("path",{d:"M12 3a9 9 0 1 0 9 9h-9Z"})},{type:"delay",icon:jsx("path",{d:"M3 5h12a7 7 0 0 1 0 14H3Z"})},{type:"predefined-process",icon:jsxs(Fragment,{children:[jsx("rect",{x:"3",y:"5",width:"18",height:"14"}),jsx("path",{d:"M6.5 5v14M17.5 5v14"})]})},{type:"document",icon:jsx("path",{d:"M3 5h18v10.5c-5 3.5-13-3.5-18 0Z"})},{type:"stadium",icon:jsx("rect",{x:"3",y:"6.5",width:"18",height:"11",rx:"5.5"})},{type:"chevron",icon:jsx("path",{d:"M2 4h9l9 8-9 8H2l8-8Z"})},{type:"brace-left",icon:jsxs(Fragment,{children:[jsx("path",{d:"M1 1C3.9 1 5.1 2.4 5.1 5.1c0 3.7 1.2 6.9 2.9 6.9-1.7 0-2.9 3.2-2.9 6.9 0 2.7-1.2 4.1-4.1 4.1"}),jsx("path",{d:"M12 9.6h10M12 14.4h10"})]})},{type:"brace-right",icon:jsxs(Fragment,{children:[jsx("path",{d:"M23 1c-2.9 0-4.1 1.4-4.1 4.1 0 3.7-1.2 6.9-2.9 6.9 1.7 0 2.9 3.2 2.9 6.9 0 2.7 1.2 4.1 4.1 4.1"}),jsx("path",{d:"M2 9.6h10M2 14.4h10"})]})},{type:"uml-class",icon:jsxs(Fragment,{children:[jsx("rect",{x:"3",y:"3",width:"18",height:"18",rx:"2"}),jsx("line",{x1:"3",y1:"9",x2:"21",y2:"9"}),jsx("line",{x1:"3",y1:"15",x2:"21",y2:"15"}),jsx("line",{x1:"7",y1:"6",x2:"17",y2:"6"}),jsx("line",{x1:"7",y1:"12",x2:"13",y2:"12"}),jsx("line",{x1:"7",y1:"18",x2:"11",y2:"18"})]})},{type:"uml-interface",icon:jsxs(Fragment,{children:[jsx("rect",{x:"3",y:"3",width:"18",height:"18",rx:"2"}),jsx("line",{x1:"3",y1:"9",x2:"21",y2:"9"}),jsx("line",{x1:"7",y1:"6",x2:"17",y2:"6"}),jsx("line",{x1:"7",y1:"12",x2:"13",y2:"12"})]})},{type:"class-catalog",icon:jsxs(Fragment,{children:[jsx("rect",{x:"3",y:"5",width:"18",height:"14",rx:"1.5"}),jsx("line",{x1:"6.6",y1:"5",x2:"6.6",y2:"19"}),jsx("line",{x1:"17.4",y1:"5",x2:"17.4",y2:"19"})]})}],sn=[{key:"basic",labelKey:"shapeGroup.basic",items:[{type:"rectangle"},{type:"rounded-rectangle"},{type:"stadium"},{type:"circle"},{type:"ellipse"},{type:"diamond"},{type:"triangle"},{type:"right-triangle"},{type:"hexagon"},{type:"parallelogram"},{type:"trapezoid"},{type:"pentagon"},{type:"octagon"},{type:"star"},{type:"envelope"},{type:"checkbox"}]},{key:"flowchart",labelKey:"shapeGroup.flowchart",items:[{type:"rectangle",labelKey:"flow.process"},{type:"rounded-rectangle",labelKey:"flow.step"},{type:"stadium",labelKey:"flow.startEnd"},{type:"diamond",labelKey:"flow.decision"},{type:"parallelogram",labelKey:"flow.data"},{type:"trapezoid",labelKey:"flow.manual"},{type:"hexagon",labelKey:"flow.preparation"},{type:"cylinder",labelKey:"flow.database"},{type:"delay",labelKey:"flow.delay"},{type:"predefined-process"},{type:"document"},{type:"block-arrow-right"},{type:"block-arrow-left"},{type:"block-arrow-up"},{type:"block-arrow-down"},{type:"block-arrow-double"}]},{key:"uml",labelKey:"shapeGroup.uml",items:[{type:"uml-class"},{type:"uml-interface"},{type:"rounded-rectangle",labelKey:"class.plain"},{type:"class-catalog"}]},{key:"solid",labelKey:"shapeGroup.solid",items:[{type:"cylinder"},{type:"cube"},{type:"cuboid"},{type:"triangular-pyramid"},{type:"quadrangular-pyramid"},{type:"sphere"},{type:"ellipsoid"},{type:"pie"},{type:"hollow-pie"}]},{key:"other",labelKey:"shapeGroup.other",items:[{type:"cloud"},{type:"heart"},{type:"cross"},{type:"sector"},{type:"chevron"},{type:"speech-rect"},{type:"speech-round"},{type:"brace-left"},{type:"brace-right"}]}],ln=new Map(vo.map(o=>[o.type,o.icon])),cn=new Set(vo.map(o=>o.type)),dn=jsxs(Fragment,{children:[jsx("path",{d:"M4 4h16v11l-5 5H4Z"}),jsx("path",{d:"M20 15h-5v5"})]}),un=[{type:"arrow",icon:"M5 12h14M12 5l7 7-7 7",labelKey:"toolbar.arrow"},{type:"text",icon:"M4 7V4h16v3M9 20h6M12 4v16",labelKey:"toolbar.text"}],pn="M17 3a2.85 2.85 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3Z",zt="M0 -1Q0.24 -0.24 1 0Q0.24 0.24 0 1Q-0.24 0.24 -1 0Q-0.24 -0.24 0 -1Z",hn=[{type:"eraser",icon:"M7 21l-4.3-4.3c-1-1-1-2.5 0-3.4l9.6-9.6c1-1 2.5-1 3.4 0l5.6 5.6c1 1 1 2.5 0 3.4L13 21M22 21H7M5 11l9 9",labelKey:"toolbar.eraser"}],Bt=memo(function({activeTool:e,onToolChange:n,showGrid:r,onToggleGrid:h,canUndo:d=false,canRedo:s=false,onUndo:l,onRedo:S,onExport:f,onExportData:u,onImportData:w,onHighlighterColorChange:I,onStickyNoteColorChange:z,onInsertIcon:C,arrowStyle:B,onArrowStyleChange:p}){let[A,L]=useState(false),[se,i]=useState(false),[x,y]=useState(null),[j,O]=useState(false),[_,X]=useState(false),[de,Q]=useState(ht),[fe,b]=useState(false),[ee,Le]=useState(yt),[re,Me]=useState(false),P=useRef(null),ue=useRef(null),le=useRef(null),Se=useRef(null),me=useRef(null);G();let Ne=[{format:"png",labelKey:"toolbar.export.png"},{format:"svg",labelKey:"toolbar.export.svg"},{format:"pdf",labelKey:"toolbar.export.pdf"}],Re=()=>{P.current&&(clearTimeout(P.current),P.current=null),O(true);},Te=()=>{P.current=window.setTimeout(()=>O(false),200);},$=useRef(null),v=()=>{O(false),U(),$.current?.click();},ae=a=>{let N=a.target.files?.[0];N&&w?.(N),a.target.value="";},Y=()=>{ue.current&&(clearTimeout(ue.current),ue.current=null),L(true);},q=()=>{ue.current=window.setTimeout(()=>{L(false),U();},200);},W=()=>{le.current&&(clearTimeout(le.current),le.current=null),i(true);},He=()=>{le.current=window.setTimeout(()=>{i(false),U();},200);},te=(a,N)=>{let pe=a.closest(".drawui-toolbar");if(!pe)return;let ge=a.getBoundingClientRect(),we=pe.getBoundingClientRect(),Ee=ge.bottom+46>window.innerHeight;y({label:N,x:ge.left-we.left+ge.width/2,y:Ee?ge.top-we.top-8:ge.bottom-we.top+8,above:Ee});},U=()=>y(null),ze=()=>{Se.current&&(clearTimeout(Se.current),Se.current=null),X(true);},Ze=()=>{Se.current=window.setTimeout(()=>X(false),200);},g=a=>{Q(a),ao(a),I?.(a),n("highlighter");},R=()=>{me.current&&(clearTimeout(me.current),me.current=null),b(true);},H=()=>{me.current=window.setTimeout(()=>b(false),200);},D=a=>{Le(a),lo(a),z?.(a),n("sticky-note"),b(false);};return jsx("div",{className:"drawui-toolbar-container",children:jsxs("div",{className:"drawui-toolbar",children:[jsx("button",{className:`drawui-toolbar-button ${e==="select"?"active":""}`,onClick:()=>n("select"),onMouseEnter:a=>te(a.currentTarget,"toolbar.select"),onMouseLeave:U,children:jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:jsx("path",{d:"M6 3 6 19.6 10.3 15.7 13 21.1 15.8 19.8 13.1 14.5 18.6 14 Z"})})}),jsx("button",{className:`drawui-toolbar-button ${e==="hand"?"active":""}`,onClick:()=>n("hand"),onMouseEnter:a=>te(a.currentTarget,"toolbar.hand"),onMouseLeave:U,children:jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",strokeLinejoin:"round",children:[jsx("path",{d:"M7.6 12.6V5.6a1.5 1.5 0 0 1 3 0v4.6"}),jsx("path",{d:"M10.6 10.2V4.1a1.5 1.5 0 0 1 3 0v6.1"}),jsx("path",{d:"M13.6 10.4V5.2a1.5 1.5 0 0 1 3 0v6.6"}),jsx("path",{d:"M16.6 11.8V8.1a1.5 1.5 0 0 1 3 0v6.6a6.2 6.2 0 0 1-6.2 6.2h-1.5a6.2 6.2 0 0 1-5-2.5l-3.2-4.4a1.5 1.5 0 0 1 2.3-1.9l2.6 2.5"})]})}),jsx("div",{className:"drawui-toolbar-divider"}),jsxs("div",{className:"drawui-toolbar-dropdown",onMouseEnter:Y,onMouseLeave:q,children:[jsx("button",{className:`drawui-toolbar-button ${cn.has(e)?"active":""}`,onClick:()=>{n("rounded-rectangle"),L(false),U();},"data-drawui-tip":A?void 0:t("toolbar.shapes"),children:jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:jsx("rect",{x:"3",y:"5",width:"18",height:"14",rx:"4",ry:"4"})})}),A&&jsx("div",{className:"drawui-toolbar-shape-grid drawui-shape-menu",children:jsx("div",{className:"drawui-shape-menu-scroll",children:sn.map(a=>jsxs("div",{className:"drawui-shape-group",children:[jsx("div",{className:"drawui-shape-group-title",children:t(a.labelKey)}),jsx("div",{className:"drawui-shape-group-grid",children:a.items.map(N=>{let pe=N.labelKey??`tool.${N.type}`;return jsx("button",{type:"button",className:`drawui-toolbar-shape-item ${e===N.type?"active":""}`,onClick:()=>{n(N.type),L(false),U();},onMouseEnter:ge=>te(ge.currentTarget,pe),onMouseLeave:U,"aria-label":t(pe),children:jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:ln.get(N.type)})},`${a.key}-${N.type}`)})})]},a.key))})})]}),jsxs("div",{className:"drawui-toolbar-dropdown",onMouseEnter:R,onMouseLeave:H,children:[jsxs("button",{className:`drawui-toolbar-button ${e==="sticky-note"?"active":""}`,onClick:()=>{n("sticky-note"),b(false),U();},"data-drawui-tip":fe?void 0:t("tool.sticky-note"),children:[jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:dn}),jsx("span",{className:"drawui-toolbar-color-chip",style:{background:ee}})]}),fe&&jsxs("div",{className:"drawui-toolbar-shape-grid drawui-sticky-panel",children:[jsxs("div",{className:"drawui-sticky-panel-head",children:[jsx("span",{className:"drawui-sticky-panel-title",children:t("tool.sticky-note")}),jsx("span",{className:"drawui-sticky-panel-key",children:"N"})]}),jsx("div",{className:"drawui-sticky-panel-grid",children:STICKY_NOTE_COLORS.map(a=>jsx("button",{type:"button","aria-label":a,className:`drawui-sticky-swatch${ee.toLowerCase()===a.toLowerCase()?" active":""}`,style:{background:a},onClick:()=>D(a)},a))})]})]}),jsxs("div",{className:"drawui-toolbar-dropdown",children:[jsx("button",{className:`drawui-toolbar-button ${re?"active":""}`,"data-icon-toggle":"","data-drawui-tip":re?void 0:t("toolbar.icon"),onClick:()=>{Me(a=>!a),U();},children:jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[jsx("circle",{cx:"12",cy:"12",r:"9"}),jsx("path",{d:"M8.5 10.2h0.01"}),jsx("path",{d:"M15.5 10.2h0.01"}),jsx("path",{d:"M8.8 14.2c0.9 1 2 1.5 3.2 1.5s2.3 -0.5 3.2 -1.5"})]})}),re&&jsx(mo,{onPick:a=>C?.(a.id),onClose:()=>Me(false)})]}),jsx("div",{className:"drawui-toolbar-divider"}),jsxs("div",{className:"drawui-toolbar-dropdown",onMouseEnter:W,onMouseLeave:He,children:[jsx("button",{className:`drawui-toolbar-button ${e==="arrow"?"active":""}`,onClick:()=>{n("arrow"),i(false),U();},"data-drawui-tip":se?void 0:t("toolbar.arrow"),children:jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:jsx("path",{d:"M5 12h14M12 5l7 7-7 7"})})}),se&&jsx("div",{className:"drawui-toolbar-shape-grid drawui-arrow-menu",onPointerDown:a=>{a.target.closest("button")||(i(false),U());},children:jsx(bt,{connectionType:B?.connectionType??"straight",arrowHead:B?.arrowHead??"end",dashed:!!B?.dashed,onConnectionTypeChange:a=>{p?.({connectionType:a}),n("arrow"),i(false),U();},onArrowStyleChange:a=>{p?.({arrowHead:a.arrowHead,dashed:a.dashed}),n("arrow"),i(false),U();},onOptionHover:(a,N)=>te(N,a),onOptionLeave:U})})]}),un.filter(a=>a.type!=="arrow").map(a=>jsx("button",{className:`drawui-toolbar-button ${e===a.type?"active":""}`,onClick:()=>n(a.type),"data-drawui-tip":t(a.labelKey),children:jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:jsx("path",{d:a.icon})})},a.type)),jsx("div",{className:"drawui-toolbar-divider"}),jsx("button",{className:`drawui-toolbar-button ${e==="pen"?"active":""}`,onClick:()=>n("pen"),"data-drawui-tip":t("toolbar.pen"),children:jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:jsx("path",{d:pn})})}),jsxs("div",{className:"drawui-toolbar-dropdown",onMouseEnter:ze,onMouseLeave:Ze,children:[jsxs("button",{className:`drawui-toolbar-button ${e==="highlighter"?"active":""}`,onClick:()=>n("highlighter"),onMouseEnter:a=>te(a.currentTarget,"toolbar.highlighter"),onMouseLeave:U,children:[jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",strokeLinejoin:"round",children:[jsx("path",{d:"M4.6 19.6 12.8 11.4",strokeWidth:"3.6",strokeLinecap:"square"}),jsx("path",{d:"M14.6 9.6 16.2 8",strokeWidth:"3.6",strokeLinecap:"square"}),jsxs("g",{fill:"currentColor",stroke:"none",children:[jsx("path",{d:zt,transform:"translate(7.4 5.4) scale(2.4)"}),jsx("path",{d:zt,transform:"translate(18.4 3.4) scale(2.5)"}),jsx("path",{d:zt,transform:"translate(21 10.6) scale(2.2)"})]})]}),jsx("span",{className:"drawui-toolbar-color-chip",style:{background:de}})]}),_&&jsx("div",{className:"drawui-toolbar-shape-grid drawui-toolbar-highlighter-grid",children:no.map(a=>jsx("button",{type:"button","aria-label":a,className:`drawui-highlighter-swatch${de.toLowerCase()===a.toLowerCase()?" active":""}`,style:{background:a},onClick:()=>g(a)},a))})]}),jsx("div",{className:"drawui-toolbar-divider"}),hn.map(a=>jsx("button",{className:`drawui-toolbar-button ${e===a.type?"active":""}`,onClick:()=>n(a.type),"data-drawui-tip":t(a.labelKey),children:jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:jsx("path",{d:a.icon})})},a.type)),jsx("button",{className:`drawui-toolbar-button ${e==="mind-map"?"active":""}`,onClick:()=>n("mind-map"),"data-drawui-tip":t("toolbar.mind-map"),children:jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[jsx("circle",{cx:"5",cy:"12",r:"2.4"}),jsx("path",{d:"M7.4 12h3.6"}),jsx("path",{d:"M11 12c0-2.6 1.6-4.4 3.4-4.4"}),jsx("path",{d:"M11 12c0 2.6 1.6 4.4 3.4 4.4"}),jsx("circle",{cx:"17.4",cy:"7.6",r:"1.7"}),jsx("circle",{cx:"17.4",cy:"16.4",r:"1.7"}),jsx("circle",{cx:"15.6",cy:"12",r:"1.7"})]})}),jsx("div",{className:"drawui-toolbar-divider"}),jsx("button",{className:`drawui-toolbar-button ${r?"active":""}`,onClick:h,"data-drawui-tip":t("toolbar.grid"),children:jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsx("rect",{x:"3",y:"3",width:"7",height:"7",rx:"1"}),jsx("rect",{x:"14",y:"3",width:"7",height:"7",rx:"1"}),jsx("rect",{x:"14",y:"14",width:"7",height:"7",rx:"1"}),jsx("rect",{x:"3",y:"14",width:"7",height:"7",rx:"1"})]})}),jsx("div",{className:"drawui-toolbar-divider"}),jsx("button",{className:"drawui-toolbar-button",onClick:l,disabled:!d,style:d?void 0:{opacity:.4,cursor:"default"},"data-drawui-tip":t("toolbar.undo"),children:jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsx("path",{d:"M3 7v6h6"}),jsx("path",{d:"M21 17a9 9 0 0 0-9-9 9 9 0 0 0-6 2.3L3 13"})]})}),jsx("button",{className:"drawui-toolbar-button",onClick:S,disabled:!s,style:s?void 0:{opacity:.4,cursor:"default"},"data-drawui-tip":t("toolbar.redo"),children:jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsx("path",{d:"M21 7v6h-6"}),jsx("path",{d:"M3 17a9 9 0 0 1 9-9 9 9 0 0 1 6 2.3L21 13"})]})}),jsx("div",{className:"drawui-toolbar-divider"}),jsxs("div",{className:"drawui-toolbar-dropdown",onMouseEnter:Re,onMouseLeave:Te,children:[jsx("button",{className:"drawui-toolbar-button","data-drawui-tip":j?void 0:t("toolbar.export"),children:jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsx("path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"}),jsx("polyline",{points:"7 10 12 15 17 10"}),jsx("line",{x1:"12",y1:"15",x2:"12",y2:"3"})]})}),j&&jsxs("div",{className:"drawui-toolbar-shape-grid drawui-toolbar-export-grid",children:[Ne.map(a=>jsx("button",{className:"drawui-toolbar-shape-item drawui-toolbar-export-item",onClick:()=>{f?.(a.format),O(false);},"data-drawui-tip":t(a.labelKey),children:t(a.labelKey)},a.format)),jsx("div",{className:"drawui-toolbar-export-divider"}),jsx("button",{className:"drawui-toolbar-shape-item drawui-toolbar-export-item",onClick:()=>{u?.(),O(false);},"data-drawui-tip":t("toolbar.export.data"),children:t("toolbar.export.data")}),jsx("button",{className:"drawui-toolbar-shape-item drawui-toolbar-export-item",onClick:v,"data-drawui-tip":t("toolbar.import.data"),children:t("toolbar.import.data")})]})]}),jsx("input",{ref:$,type:"file",accept:".json,application/json",style:{display:"none"},onChange:ae}),x&&jsx("div",{className:`drawui-shape-tip ${x.above?"is-above":"is-below"}`,style:{left:x.x,top:x.y},children:t(x.label)})]})})});var Ut=memo(function({onZoomIn:e,onZoomOut:n,onReset:r,zoomLevel:h=100}){return G(),jsxs("div",{className:"drawui-zoom-control",children:[jsx("button",{className:"drawui-zoom-button",onClick:e,"data-drawui-tip":t("zoom.in"),children:jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsx("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"})]})}),jsxs("div",{className:"drawui-zoom-level",children:[h,"%"]}),jsx("button",{className:"drawui-zoom-button",onClick:n,"data-drawui-tip":t("zoom.out"),children:jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:jsx("line",{x1:"12",y1:"5",x2:"12",y2:"19"})})}),jsx("button",{className:"drawui-zoom-button",onClick:r,"data-drawui-tip":t("zoom.reset"),children:jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsx("path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8"}),jsx("path",{d:"M3 3v5h5"})]})})]})});var Mo=["#ffffff","#f1f5f9","#e2e8f0","#ede9fe","#dbeafe","#e0e7ff","#dcfce7","#fef9c3","#fee2e2"],So=["#0f172a","#475569","#94a3b8","#8b5cf6","#3b82f6","#1d4ed8","#16a34a","#eab308","#dc2626"],xn=Mo.filter(o=>o!=="#f1f5f9"),vn=[...xn,...So],kn=[...Mo,...So],Co=15,Lo="drawui:customColors";function Mn(){if(typeof window>"u")return [];try{let o=window.localStorage.getItem(Lo);if(!o)return [];let e=JSON.parse(o);return Array.isArray(e)?e.filter(n=>typeof n=="string").slice(-Co):[]}catch{return []}}function Sn(o){if(!(typeof window>"u"))try{window.localStorage.setItem(Lo,JSON.stringify(o));}catch{}}var Wt=[{key:"fill",labelKey:"style.fill",hasTransparent:true,hasOpacity:true},{key:"stroke",labelKey:"style.stroke",hasTransparent:false,hasOpacity:true},{key:"text",labelKey:"style.text",hasTransparent:false},{key:"highlight",labelKey:"style.highlight",hasTransparent:true,hasOpacity:true}],ko=(o,e)=>!!o&&!!e&&o.toLowerCase()===e.toLowerCase(),ct=10,Fe=12,We=o=>!o||o==="transparent",To=memo(function({editor:e,selectedCount:n,hasLineSelection:r,currentConnectionType:h,currentArrowHead:d,currentDashed:s}){G();let l=!!e?.getEditingShapeId(),[S,f]=useState(null),[u,w]=useState(null),[,I]=useState(0),z=useRef(null),C=useRef(null),B=useRef(null),[p,A]=useState({tw:168,th:42,pw:228,ph:160}),[L,se]=useState(Mn),i=useRef(null),x=useCallback(c=>{let M=c.trim().toLowerCase();/^#[0-9a-f]{6}$/.test(M)&&se(m=>{let K=m.filter(E=>E!==M);for(K.push(M);K.length>Co;)K.shift();return Sn(K),K});},[]);if(useEffect(()=>{let c=i.current;if(!c)return;let M=()=>{c.value&&x(c.value);};return c.addEventListener("change",M),()=>c.removeEventListener("change",M)},[x,u]),useEffect(()=>{if(!e)return;let c=e.subscribe(()=>I(M=>(M+1)%1e6));return ()=>{c();}},[e]),useEffect(()=>{w(null);},[n,l]),useEffect(()=>{if(!u)return;let c=M=>{z.current&&!z.current.contains(M.target)&&w(null);};return document.addEventListener("pointerdown",c,true),()=>document.removeEventListener("pointerdown",c,true)},[u]),useLayoutEffect(()=>{let c=C.current?.offsetWidth??p.tw,M=C.current?.offsetHeight??p.th,m=B.current?.offsetWidth??p.pw,K=B.current?.offsetHeight??p.ph;A(E=>E.tw===c&&E.th===M&&E.pw===m&&E.ph===K?E:{tw:c,th:M,pw:m,ph:K});}),!e||n===0||l)return null;let y=e.getSelectedIds(),O=e.getShapes().filter(c=>y.includes(c.id)),_=O[0],X=_?.id??"",de=_?.style.fillColor,Q=_?.style.strokeColor??"#1f2937",fe=_?.textColor??"#1f2937",b=_?.highlightColor,ee={fill:de,stroke:Q,text:fe,highlight:b},Le=O.length>0&&O.every(c=>c.type==="sticky-note"),re={fill:_?.style.fillOpacity??1,stroke:_?.style.strokeOpacity??1,highlight:_?.highlightOpacity??1},Me=c=>S&&S.key===`${X}:${c}`?S.value:re[c]??1,P=(c,M)=>{switch(c){case "stroke":e.updateSelectedShapesStyle({strokeColor:M});break;case "fill":e.updateSelectedShapesStyle({fillColor:M});break;case "text":e.updateSelectedShapesText({textColor:M});break;case "highlight":e.updateSelectedShapesText({highlightColor:M});break}},ue=(c,M)=>{f({key:`${X}:${c}`,value:M}),c==="highlight"?e.updateSelectedShapesText({highlightOpacity:M}):c==="stroke"?e.updateSelectedShapesStyle({strokeOpacity:M}):e.updateSelectedShapesStyle({fillOpacity:M});},le=c=>e.updateConnectionType(c),Se=c=>e.updateArrowStyle({arrowHead:c.arrowHead,dashed:c.dashed}),me=!!r&&O.length>0&&O.every(c=>c.type==="line"||c.type==="arrow"),Ne=O.length>0&&O.every(c=>c.type==="text"),Re=O.length>0&&O.every(c=>c.type==="sticky-note"||c.type==="icon"),Te=me?Wt.filter(c=>c.key==="stroke"):Re?Wt.filter(c=>c.key!=="stroke"):Wt,$=c=>c.key==="stroke"&&me?"style.line":c.labelKey,v=u&&u!=="more"?Te.find(c=>c.key===u):void 0,ae=!!u&&(u==="more"||u==="prefix"||!!v),Y=Le&&v?.key==="fill",q=e.getCamera(),W=getContentBounds(O,0),He=q.pageToScreen({x:W.x,y:W.y}),te=q.pageToScreen({x:W.x+W.width,y:W.y+W.height}),U=window.innerWidth,ze=window.innerHeight,Ze=te.y+ct,g=He.y-ct,R=p.th+(ae?ct+p.ph:0),H=Ze+R<=ze-Fe,D=g-R>=Fe,a=H||!D,N=(He.x+te.x)/2,pe=(c,M,m)=>Math.max(M,Math.min(c,Math.max(M,m))),ge=pe(N-p.tw/2,Fe,U-p.tw-Fe),we=a?Ze:g-p.th,Ee=pe(N-p.pw/2,Fe,U-p.pw-Fe),Xe=ae?pe(a?we+p.th+ct:we-ct-p.ph,Fe,ze-p.ph-Fe):0;return jsxs("div",{className:"drawui-style-floating",ref:z,children:[jsxs("div",{className:"drawui-style-toolbar",ref:C,style:{left:ge,top:we},children:[Te.map(c=>jsxs("button",{className:`drawui-style-tool-btn${u===c.key?" active":""}`,onClick:()=>w(u===c.key?null:c.key),"data-drawui-tip":t($(c)),type:"button",children:[c.key==="fill"&&jsx("span",{className:`drawui-st-swatch${We(de)?" drawui-st-none":""}`,style:We(de)?void 0:{background:de}}),c.key==="stroke"&&(me?jsx("span",{className:`drawui-st-line${We(Q)?" drawui-st-line-none":""}`,style:We(Q)?void 0:{background:Q}}):jsx("span",{className:`drawui-st-frame${We(Q)?" drawui-st-frame-none":""}`,style:We(Q)?void 0:{borderColor:Q}})),c.key==="text"&&jsx("span",{className:"drawui-st-text",style:{color:fe},children:"A"}),c.key==="highlight"&&jsx("span",{className:`drawui-st-hl${We(b)?" drawui-st-none":""}`,style:We(b)?void 0:{background:b},children:"A"})]},c.key)),r&&jsx("button",{className:`drawui-style-tool-btn${u==="more"?" active":""}`,onClick:()=>w(u==="more"?null:"more"),"data-drawui-tip":t("style.connection"),type:"button",children:"\u22EF"}),Ne&&jsx("button",{className:`drawui-style-tool-btn${u==="prefix"?" active":""}`,onClick:()=>w(u==="prefix"?null:"prefix"),"data-drawui-tip":t("style.prefix"),type:"button",children:jsxs("svg",{viewBox:"0 0 24 24",width:"18",height:"18",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",children:[jsx("circle",{cx:"5",cy:"8",r:"1.7",fill:"currentColor",stroke:"none"}),jsx("circle",{cx:"5",cy:"16",r:"1.7",fill:"currentColor",stroke:"none"}),jsx("line",{x1:"10.5",y1:"8",x2:"20",y2:"8"}),jsx("line",{x1:"10.5",y1:"16",x2:"20",y2:"16"})]})})]}),ae&&jsx("div",{className:"drawui-style-popover",ref:B,style:{left:Ee,top:Xe},children:u==="prefix"?jsxs(Fragment,{children:[jsx("div",{className:"drawui-style-popover-title",children:t("style.prefix")}),jsx("div",{className:"drawui-muted-hint",children:t("style.prefix.soon")})]}):v?jsxs(Fragment,{children:[jsx("div",{className:"drawui-style-popover-title",children:t($(v))}),jsxs("div",{className:"drawui-color-row",children:[v.hasTransparent&&!Y&&jsx("button",{className:`drawui-color-swatch drawui-color-swatch-transparent${We(ee[v.key])?" active":""}`,onClick:()=>P(v.key,"transparent"),"aria-label":t("style.none"),type:"button"}),(Y?STICKY_NOTE_COLORS:v.hasTransparent?vn:kn).map(c=>jsx("button",{className:`drawui-color-swatch${ko(c,ee[v.key])?" active":""}`,style:{background:c},onClick:()=>P(v.key,c),"aria-label":c,type:"button"},c)),L.map(c=>jsx("button",{className:`drawui-color-swatch drawui-color-custom${ko(c,ee[v.key])?" active":""}`,style:{background:c},onClick:()=>P(v.key,c),"aria-label":c,type:"button"},`custom-${c}`)),jsxs("span",{className:"drawui-color-swatch drawui-color-add","data-drawui-tip":t("style.addColor"),children:["+",jsx("input",{ref:i,type:"color",defaultValue:"#3b82f6",className:"drawui-color-add-input","aria-label":t("style.addColor")})]})]}),v.hasOpacity&&jsxs("div",{className:"drawui-opacity-row",children:[jsx("span",{className:"drawui-opacity-label",children:t("style.opacity")}),jsx("input",{type:"range",min:0,max:100,value:Math.round(Me(v.key)*100),onChange:c=>ue(v.key,Number(c.target.value)/100),className:"drawui-opacity-slider"}),jsxs("span",{className:"drawui-opacity-value",children:[Math.round(Me(v.key)*100),"%"]})]})]}):jsx(Fragment,{children:jsx(bt,{connectionType:h??"straight",arrowHead:d??"end",dashed:!!s,onConnectionTypeChange:le,onArrowStyleChange:Se})})})]})});var Vt=14,Io=20,Rn=["#1f2937","#ef4444","#f97316","#facc15","#22c55e","#3b82f6","#8b5cf6","#ec4899","#9ca3af"],Hn=[12,14,16,18,20,24];function Ro(o,e,n){let r=o,h=n,d=r.charAt(0);if(r.length>1&&(d==="+"||d==="-"||d==="#"||d==="~")&&r.charAt(1)===" "&&(h=d,r=r.slice(2)),r=r.replace(/^\s+|\s+$/g,""),e==="attribute"){let w=r.indexOf(":");return w===-1?{visibility:h,name:r,type:"",params:"",returnType:""}:{visibility:h,name:r.slice(0,w).replace(/^\s+|\s+$/g,""),type:r.slice(w+1).replace(/^\s+|\s+$/g,""),params:"",returnType:""}}let s=r.indexOf("(");if(s===-1){let w=r.lastIndexOf(":");return w===-1?{visibility:h,name:r,type:"",params:"",returnType:""}:{visibility:h,name:r.slice(0,w).replace(/^\s+|\s+$/g,""),type:"",params:"",returnType:r.slice(w+1).replace(/^\s+|\s+$/g,"")}}let l=r.slice(0,s).replace(/^\s+|\s+$/g,""),S=r.indexOf(")",s);if(S===-1)return {visibility:h,name:l,type:"",params:r.slice(s+1).replace(/^\s+|\s+$/g,""),returnType:""};let f=r.slice(s+1,S).replace(/^\s+|\s+$/g,""),u=r.slice(S+1).replace(/^\s+|\s+$/g,"");return u.startsWith(":")&&(u=u.slice(1).replace(/^\s+|\s+$/g,"")),{visibility:h,name:l,type:"",params:f,returnType:u}}function Pn(o,e){let n=`${e.visibility} `;return o==="attribute"?`${n}${e.name}: ${e.type??""}`:`${n}${e.name}(${e.params??""}): ${e.returnType??""}`}var Po=memo(function({editor:e,umlClass:n,editing:r}){let[,h]=useState(0);G(),useEffect(()=>{if(!e)return;let g=e.subscribe(()=>h(R=>R+1));return ()=>{g();}},[e]);let[d,s]=useState(null),[l,S]=useState(false),f=useRef(null),u=useRef(null),w=useCallback((g,R)=>{f.current&&(clearTimeout(f.current),f.current=null),s({section:g,rowId:R}),S(false);},[]),I=useCallback(()=>{f.current&&clearTimeout(f.current),f.current=window.setTimeout(()=>{s(null),S(false);},150);},[]);if(!e||!n||r!==n.id)return null;let z=e.getCamera(),{id:C,x:B,y:p,width:A,height:L,className:se,methods:i}=n,x=n.type==="uml-interface",y=x?[]:n.attributes,j=A/2,O=L/2,_=UML_HEADER_HEIGHT,X=UML_LINE_HEIGHT,de=UML_PADDING_X,Q=UML_PADDING_Y,fe=x?0:y.length>0?y.length*X+Q*2:Q*2,b=z.zoom,ee=(A-de*2)*b,Le=4*b,re=z.pageToScreen({x:B-j+de,y:p}),Me=z.pageToScreen({x:B,y:p-O+_/2}),P=g=>z.pageToScreen({x:B,y:g}).y,ue=X*b,le=g=>p+(-O+_+Q+X/2+g*X),Se=g=>p+(-O+_+fe+Q+X/2+g*X),me=p+(-O+_+fe),Ne=p+O,Re={background:"#ffffff",borderWidth:1,borderStyle:"solid",borderColor:"transparent",outline:"none",padding:0,fontFamily:"sans-serif",boxSizing:"border-box"},Te=(g,R)=>{let H=y.find(a=>a.id===g);if(!H)return;let D=Ro(R,"attribute",H.visibility);e.updateUmlClass(C,{attributes:y.map(a=>a.id===g?{...a,...D}:a)});},$=(g,R)=>{let H=i.find(N=>N.id===g);if(!H)return;let D=Ro(R,"method",H.visibility),a=i.map(N=>N.id===g?{...N,...D}:N);x?e.updateUmlInterface(C,{methods:a}):e.updateUmlClass(C,{methods:a});},v=(g,R,H)=>{u.current={section:g,from:R},H.dataTransfer.effectAllowed="move",H.dataTransfer.setData("text/plain",`${g}:${R}`);},ae=g=>{g.preventDefault(),g.dataTransfer.dropEffect="move";},Y=(g,R,H)=>{H.preventDefault();let D=u.current;!D||D.section!==g||(g==="attribute"?e.reorderUmlAttribute(C,D.from,R):e.reorderUmlMethod(C,D.from,R),u.current=null);},q=(g,R,H,D)=>{let a=P(D),N=d?.section===g&&d.rowId===H.id,pe=(H.fontSize||UML_FONT_SIZE)*b,ge=H.textColor||"#1f2937",we={position:"absolute",left:re.x-Vt*b-Le,top:a-ue/2,width:Vt*b+Le+ee+Io*b,height:ue,display:"flex",alignItems:"center",gap:2,pointerEvents:"none",zIndex:53},Ee={...Re,width:ee,height:ue-2,fontSize:pe,color:ge,textDecoration:H.strikethrough?"line-through":"none",pointerEvents:"auto",...N?{borderColor:"var(--dw-primary)"}:{}},Xe={width:Vt*b,height:ue-2,cursor:"grab",color:"#9ca3af",display:"flex",alignItems:"center",justifyContent:"center",userSelect:"none",fontSize:12*b,lineHeight:1,opacity:N?1:.55,pointerEvents:"auto"},c={width:Io*b,height:ue-6,border:"none",background:"transparent",color:"#9ca3af",cursor:"pointer",borderRadius:3,fontSize:14*b,opacity:N?1:.35,pointerEvents:"auto"};return jsxs("div",{style:we,onDragOver:ae,onDrop:M=>Y(g,R,M),children:[jsx("span",{style:Xe,draggable:true,onDragStart:M=>v(g,R,M),"data-drawui-tip":t("uml.drag"),children:"\u22EE\u22EE"}),jsx("input",{style:Ee,value:Pn(g,H),onChange:M=>g==="attribute"?Te(H.id,M.target.value):$(H.id,M.target.value),onFocus:()=>w(g,H.id),onBlur:I,spellCheck:false}),jsx("button",{style:c,onMouseDown:M=>M.preventDefault(),onClick:()=>{g==="attribute"?e.removeUmlAttribute(C,H.id):e.removeUmlMethod(C,H.id);},"data-drawui-tip":t("uml.delete"),children:"\xD7"})]},H.id)},W=(g,R,H)=>{let D=P(R),a=g==="attribute";return jsxs("button",{onMouseDown:N=>N.preventDefault(),onClick:()=>a?e.addUmlAttribute(C):e.addUmlMethod(C),className:"drawui-uml-add-row",style:{position:"absolute",left:re.x,top:D-9*b,height:18*b,padding:`0 ${6*b}px`,fontSize:11*b,lineHeight:1,border:"1px dashed #cbd5e1",background:"rgba(255,255,255,0.85)",color:"#64748b",borderRadius:3,cursor:"pointer",pointerEvents:"auto",display:"flex",alignItems:"center",gap:3,whiteSpace:"nowrap",zIndex:53},"data-drawui-tip":H,children:[jsx("span",{style:{fontSize:13*b,lineHeight:1},children:"+"}),jsx("span",{children:H})]},`add-${g}`)},He=()=>{if(!d||d.section==="className")return null;let g=d.section,R=d.rowId,D=(g==="attribute"?y:i).find(E=>E.id===R);if(!D)return null;let a=224*b,N=30*b,pe=z.pageToScreen({x:B,y:p}).x,ge=z.pageToScreen({x:B,y:p-O}).y,we=20*b,Ee=ge-N-we,Xe=pe-a/2,c=Ee+N,M=D.textColor||"#1f2937",m=D.fontSize||UML_FONT_SIZE,K=!!D.strikethrough;return jsxs(Fragment,{children:[jsx("div",{style:{position:"absolute",left:pe-.5,top:c,width:1,height:we,background:"#d1d5db",pointerEvents:"none",zIndex:59}}),jsxs("div",{className:"drawui-uml-toolbar",style:{position:"absolute",left:Xe,top:Ee,width:a,height:N,background:"#ffffff",border:"1px solid #e5e7eb",borderRadius:6,boxShadow:"0 4px 12px rgba(0, 0, 0, 0.1)",display:"flex",alignItems:"center",gap:4*b,padding:`0 ${6*b}px`,pointerEvents:"auto",zIndex:60,fontSize:12*b},onMouseDown:E=>E.preventDefault(),children:[jsxs("div",{style:{position:"relative"},children:[jsxs("button",{onClick:()=>S(E=>!E),className:"drawui-uml-toolbar-btn","data-drawui-tip":t("uml.textColor"),style:{border:"none",background:"transparent",cursor:"pointer",padding:2,display:"flex",alignItems:"center",borderRadius:3},children:[jsx("span",{style:{fontWeight:700,color:M,fontSize:13*b,textDecoration:K?"line-through":"none"},children:"A"}),jsx("span",{style:{width:10*b,height:2*b,background:M,marginLeft:3,borderRadius:1}})]}),l&&jsxs("div",{style:{position:"absolute",top:"100%",left:0,marginTop:4,background:"#ffffff",border:"1px solid #e5e7eb",borderRadius:4,padding:4,display:"flex",gap:2,boxShadow:"0 2px 8px rgba(0, 0, 0, 0.1)",zIndex:61},children:[jsx("button",{onClick:()=>{e.updateUmlRowStyle(C,g,D.id,{textColor:null}),S(false);},style:{width:14,height:14,border:"1px solid #e5e7eb",background:"transparent",cursor:"pointer",borderRadius:2},"data-drawui-tip":t("uml.defaultColor")}),Rn.map(E=>jsx("button",{onClick:()=>{e.updateUmlRowStyle(C,g,D.id,{textColor:E}),S(false);},style:{width:14,height:14,border:"none",background:E,cursor:"pointer",borderRadius:2},"data-drawui-tip":E},E))]})]}),jsx("select",{value:m,onChange:E=>e.updateUmlRowStyle(C,g,D.id,{fontSize:Number(E.target.value)}),style:{border:"1px solid #e5e7eb",borderRadius:3,padding:`0 ${2*b}px`,fontSize:12*b,height:20*b,background:"#ffffff"},"data-drawui-tip":t("uml.fontSize"),children:Hn.map(E=>jsx("option",{value:E,children:E},E))}),jsx("button",{onClick:()=>e.updateUmlRowStyle(C,g,D.id,{strikethrough:!K}),className:"drawui-uml-toolbar-btn","data-drawui-tip":t("uml.strikethrough"),style:{border:"none",background:K?"var(--dw-primary-weak)":"transparent",cursor:"pointer",padding:2,borderRadius:3},children:jsx("span",{style:{fontWeight:700,fontSize:13*b,textDecoration:"line-through"},children:"A"})}),jsx("button",{onClick:()=>{g==="attribute"?e.removeUmlAttribute(C,D.id):e.removeUmlMethod(C,D.id),s(null);},className:"drawui-uml-toolbar-btn","data-drawui-tip":t("uml.delete"),style:{border:"none",background:"transparent",cursor:"pointer",color:"#ef4444",padding:2,marginLeft:"auto",borderRadius:3},children:jsxs("svg",{width:14*b,height:14*b,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsx("polyline",{points:"3 6 5 6 21 6"}),jsx("path",{d:"M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6"}),jsx("path",{d:"M10 11v6"}),jsx("path",{d:"M14 11v6"}),jsx("path",{d:"M9 6V4a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2"})]})})]})]})},te=z.pageToScreen({x:B-j,y:p}).x,U=z.pageToScreen({x:B,y:p-O}).y,ze=A*b,Ze=L*b;return jsxs("div",{style:{position:"absolute",inset:0,pointerEvents:"none",zIndex:50},children:[jsx("div",{style:{position:"absolute",left:te+1,top:U+1,width:Math.max(0,ze-2),height:Math.max(0,Ze-2),background:"#ffffff",pointerEvents:"none",zIndex:51}}),jsx("input",{style:{...Re,position:"absolute",left:Me.x-ee/2,top:Me.y-_*b/2+2,width:ee,height:_*b-4,textAlign:"center",fontWeight:700,fontSize:(n.fontSize||UML_FONT_SIZE)*b,color:n.textColor||"#1f2937",pointerEvents:"auto",zIndex:52,...d?.section==="className"?{borderColor:"var(--dw-primary)"}:{}},value:se,onChange:g=>x?e.updateUmlInterface(C,{className:g.target.value}):e.updateUmlClass(C,{className:g.target.value}),onFocus:()=>w("className",""),onBlur:I,spellCheck:false}),!x&&jsxs(Fragment,{children:[y.map((g,R)=>q("attribute",R,g,le(R))),W("attribute",me,"\u5C5E\u6027")]}),i.map((g,R)=>q("method",R,g,Se(R))),W("method",Ne,t("uml.method")),He()]})});var Ao=memo(function({editor:e,panelOpen:n,onOpenPanel:r}){let[,h]=useState(0);G(),useEffect(()=>{if(!e)return;let A=e.subscribe(()=>h(L=>L+1));return ()=>{A();}},[e]);let d=useRef(false),s=useRef(false);if(!e)return null;let l=e.getMindMapEditingShapeId();if(!l||n)return null;let S=e.getMindMapSelectedNode();if(!S||S.shapeId!==l)return null;let f=e.getMindMapNode(l,S.nodeId),u=e.getMindMapNodeScreenRect(l,S.nodeId);if(!f||!u)return null;let w=e.getCamera().getZoom(),I=MINDMAP_FONT_SIZE*w,z=Math.max(100,u.width+24),C=u.height+8,B={position:"absolute",left:u.x+u.width/2,top:u.y-4,transform:"translateX(-50%)",width:z,height:C,border:"1.5px solid var(--dw-primary, #3b82f6)",borderRadius:6,background:"#ffffff",boxShadow:"0 2px 10px rgba(0,0,0,0.15)",outline:"none",padding:`0 ${(f.icon?24:12)*w}px`,fontFamily:"sans-serif",fontSize:I,color:"#1f2937",boxSizing:"border-box",pointerEvents:"auto",zIndex:55},p={position:"absolute",left:u.x+u.width+12,top:u.y+u.height/2-11,width:22,height:22,border:"1px solid #e5e7eb",background:"#ffffff",borderRadius:"50%",cursor:"pointer",color:"#6b7280",fontSize:13,lineHeight:1,display:"flex",alignItems:"center",justifyContent:"center",boxShadow:"0 1px 4px rgba(0,0,0,0.12)",pointerEvents:"auto",zIndex:55};return jsxs("div",{style:{position:"absolute",inset:0,pointerEvents:"none",zIndex:50},children:[jsx("input",{autoFocus:true,style:B,value:f.text,spellCheck:false,onChange:A=>{let L=!d.current;d.current=true,e.updateMindMapNode(l,S.nodeId,{text:A.target.value},L);},onBlur:()=>{if(s.current){s.current=false;return}e.exitMindMapEdit();},onKeyDown:A=>{A.key==="Enter"?A.target.blur():A.key==="Escape"&&e.exitMindMapEdit();}}),jsx("button",{style:p,"data-drawui-tip":t("mindmap.more"),onMouseDown:A=>{A.preventDefault(),s.current=true,setTimeout(()=>{s.current=false;},300);},onClick:r,children:"\u22EF"})]})});var $o=[...MINDMAP_COLORS,"#1f2937","#9ca3af"],Do=["\u{1F4A1}","\u2B50","\u{1F525}","\u{1F4CC}","\u2705","\u2757","\u26A0\uFE0F","\u{1F3F7}\uFE0F"],Fn={position:"absolute",width:232,background:"rgba(255,255,255,0.96)",border:"1px solid #e5e7eb",borderRadius:8,boxShadow:"0 6px 20px rgba(0,0,0,0.12)",padding:"10px 12px",fontSize:12,color:"#1f2937",zIndex:70,boxSizing:"border-box",fontFamily:"sans-serif"},Yt={fontSize:11,color:"#6b7280",marginBottom:4,display:"block"},kt={display:"flex",gap:4,alignItems:"center",flexWrap:"wrap"},Mt={border:"1px solid #e5e7eb",background:"#ffffff",borderRadius:5,padding:"3px 8px",fontSize:12,color:"#374151",cursor:"pointer",lineHeight:1.5},jt={width:"100%",border:"1px solid #e5e7eb",borderRadius:5,padding:"4px 8px",fontSize:12,outline:"none",boxSizing:"border-box",background:"#ffffff",color:"#1f2937"},zo=memo(function({editor:e,mindMap:n}){let[,r]=useState(0);G(),useEffect(()=>{if(!e)return;let i=e.subscribe(()=>r(x=>x+1));return ()=>{i();}},[e]);let h=useRef(null);if(!e||!n||e.getMindMapEditingShapeId()!==n.id)return null;let d=e.getMindMapSelectedNode();if(!d||d.shapeId!==n.id)return null;let s=i=>{if(i.id===d.nodeId)return i;for(let x of i.children??[]){let y=s(x);if(y)return y}return null},l=s(n.root);if(!l)return null;let S=e.getCamera(),u=layoutMindMap(n.root).positions.get(l.id);if(!u)return null;let w=S.zoom,I=S.pageToScreen({x:n.x+u.x,y:n.y+u.y}),z=I.x+u.width*w/2+14,C=I.y-80,p=Math.max(8,Math.min(z,(window.innerWidth||1024)-232-8)),A=Math.max(8,Math.min(C,(window.innerHeight||768)-320)),L=i=>{e.updateMindMapNode(n.id,l.id,i);},se=!!l.id&&l.id!==n.root.id;return jsxs("div",{ref:h,style:{...Fn,left:p,top:A},onMouseDown:i=>i.stopPropagation(),children:[jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:8},children:[jsx("span",{style:{fontWeight:600,fontSize:12},children:t("mindmap.nodeText")}),jsx("button",{onClick:()=>e.exitMindMapEdit(),"data-drawui-tip":t("mindmap.close"),style:{border:"none",background:"transparent",cursor:"pointer",color:"#9ca3af",fontSize:14,lineHeight:1,padding:2},children:"\xD7"})]}),jsx("input",{style:{...jt,marginBottom:8},value:l.text,onChange:i=>L({text:i.target.value}),spellCheck:false}),jsxs("div",{style:{...kt,marginBottom:10},children:[jsxs("button",{style:Mt,onClick:()=>e.addMindMapChild(n.id,l.id),children:["+ ",t("mindmap.addChild")]}),se&&jsxs("button",{style:Mt,onClick:()=>e.addMindMapSibling(n.id,l.id),children:["+ ",t("mindmap.addSibling")]}),!!l.children?.length&&jsx("button",{style:Mt,onClick:()=>e.toggleMindMapCollapse(n.id,l.id),children:l.collapsed?t("mindmap.expand"):t("mindmap.collapse")}),jsx("button",{style:{...Mt,color:"#ef4444",borderColor:"#fecaca",marginLeft:"auto"},onClick:()=>e.deleteMindMapNode(n.id,l.id),children:t("mindmap.deleteNode")})]}),jsx("span",{style:Yt,children:t("mindmap.color")}),jsxs("div",{style:{...kt,marginBottom:10},children:[jsx("button",{"data-drawui-tip":t("mindmap.levelColor"),onClick:()=>L({color:void 0}),style:{width:18,height:18,borderRadius:4,border:"1.5px solid #d1d5db",background:"conic-gradient(#ef4444, #f59e0b, #10b981, #3b82f6, #8b5cf6, #ec4899, #ef4444)",cursor:"pointer",flexShrink:0}}),$o.map(i=>jsx("button",{"data-drawui-tip":i,onClick:()=>L({color:i}),style:{width:18,height:18,borderRadius:4,border:l.color===i?"2px solid #111827":"1px solid #d1d5db",background:i,cursor:"pointer",flexShrink:0}},i))]}),jsx("span",{style:Yt,children:t("mindmap.icon")}),jsxs("div",{style:{...kt,marginBottom:10},children:[jsx("button",{"data-drawui-tip":t("mindmap.noIcon"),onClick:()=>L({icon:void 0}),style:{width:22,height:22,borderRadius:4,border:l.icon?"1px solid #d1d5db":"2px solid #111827",background:"#f9fafb",cursor:"pointer",fontSize:11,color:"#9ca3af",lineHeight:1},children:"\u2205"}),Do.map(i=>jsx("button",{onClick:()=>L({icon:i}),style:{width:22,height:22,borderRadius:4,border:l.icon===i?"2px solid #111827":"1px solid #d1d5db",background:"#f9fafb",cursor:"pointer",fontSize:13,lineHeight:1},children:i},i)),jsx("input",{placeholder:"\u270F\uFE0F",defaultValue:l.icon&&!Do.includes(l.icon)?l.icon:"",onKeyDown:i=>{if(i.key==="Enter"){let x=i.target.value.trim();L({icon:x||void 0});}},onBlur:i=>{let x=i.target.value.trim();x!==l.icon&&L({icon:x||void 0});},style:{...jt,width:56,padding:"2px 4px",textAlign:"center"}})]}),jsx("span",{style:Yt,children:t("mindmap.note")}),jsx("input",{style:{...jt,marginBottom:6},value:l.note??"",placeholder:t("mindmap.notePlaceholder"),onChange:i=>L({note:i.target.value||void 0}),spellCheck:false}),!!l.note&&jsxs("div",{style:{...kt,marginTop:4},children:[jsx("span",{style:{fontSize:11,color:"#6b7280"},children:t("mindmap.noteColor")}),jsx("button",{"data-drawui-tip":t("mindmap.noteColorDefault"),onClick:()=>L({noteColor:void 0}),style:{width:16,height:16,borderRadius:3,border:l.noteColor?"1px solid #d1d5db":"2px solid #111827",background:"repeating-conic-gradient(#ef4444 0% 25%, #f59e0b 0% 50%, #10b981 0% 75%, #3b82f6 0% 100%)",cursor:"pointer"}}),$o.map(i=>jsx("button",{onClick:()=>L({noteColor:i}),style:{width:16,height:16,borderRadius:3,border:l.noteColor===i?"2px solid #111827":"1px solid #d1d5db",background:i,cursor:"pointer"}},i))]})]})});var qt=220,Jt=140,qn="#fafafa";function Jn(o,e){let n=Math.min(o.x,e.x),r=Math.min(o.y,e.y),h=Math.max(o.x+o.width,e.x+e.width),d=Math.max(o.y+o.height,e.y+e.height);return {x:n,y:r,width:h-n,height:d-r}}function Qn(o){return {x:o.x+o.width/2,y:o.y+o.height/2}}function er(){return {x:0,y:0,width:0,height:0}}function tr(o){let e=1/0,n=1/0,r=-1/0,h=-1/0,d=false;for(let s of o){let l=eo(s);l&&(d=true,l.x<e&&(e=l.x),l.y<n&&(n=l.y),l.x+l.width>r&&(r=l.x+l.width),l.y+l.height>h&&(h=l.y+l.height));}return d?{x:e,y:n,width:r-e,height:h-n}:null}function eo(o){switch(o.type){case "rectangle":case "sticky-note":case "icon":case "rounded-rectangle":case "ellipse":case "diamond":case "triangle":case "hexagon":case "parallelogram":case "trapezoid":case "pentagon":case "octagon":case "star":case "cylinder":case "cloud":case "heart":case "block-arrow-right":case "block-arrow-left":case "block-arrow-up":case "block-arrow-down":case "block-arrow-double":case "right-triangle":case "cross":case "speech-rect":case "speech-round":case "cube":case "sector":case "delay":case "predefined-process":case "document":case "stadium":case "class-catalog":case "chevron":case "brace-left":case "brace-right":case "envelope":case "checkbox":case "triangular-pyramid":case "quadrangular-pyramid":case "cuboid":case "sphere":case "ellipsoid":case "pie":case "hollow-pie":case "uml-class":case "uml-interface":case "mind-map":case "text":return {x:o.x-o.width/2,y:o.y-o.height/2,width:o.width,height:o.height};case "circle":return {x:o.x-o.radius,y:o.y-o.radius,width:o.radius*2,height:o.radius*2};case "line":case "arrow":{let e=o.points;if(!e||e.length===0)return null;let n=1/0,r=1/0,h=-1/0,d=-1/0;for(let s of e)s.x<n&&(n=s.x),s.y<r&&(r=s.y),s.x>h&&(h=s.x),s.y>d&&(d=s.y);return {x:n,y:r,width:h-n,height:d-r}}case "draw":{let e=o,n=e.width,r=e.height;if(typeof n=="number"&&typeof r=="number")return {x:e.x-n/2,y:e.y-r/2,width:n,height:r};let h=e.points;if(!h||h.length===0)return null;let d=1/0,s=1/0,l=-1/0,S=-1/0;for(let f of h){let u=f.x+e.x,w=f.y+e.y;u<d&&(d=u),w<s&&(s=w),u>l&&(l=u),w>S&&(S=w);}return {x:d,y:s,width:l-d,height:S-s}}default:return null}}function or(o){let e=o.getCamera(),n=e.screenToPage({x:0,y:0}),r=e.screenToPage({x:window.innerWidth,y:window.innerHeight});return {x:n.x,y:n.y,width:r.x-n.x,height:r.y-n.y}}function nr(o,e,n){if(o.width<=0||o.height<=0)return {x:o.x-e/2,y:o.y-n/2,width:e,height:n};let r=e/n,h=o.width,d=h/r;d<o.height&&(d=o.height,h=d*r);let s=Qn(o);return {x:s.x-h/2,y:s.y-d/2,width:h,height:d}}function Qt(o,e,n,r){let h=(o-n.left)/n.width,d=(e-n.top)/n.height;return {x:r.x+h*r.width,y:r.y+d*r.height}}var Uo=memo(function({editor:e}){let n=useRef(null),r=useRef(null),[h,d]=useState(false),[s,l]=useState(100),[S,f]=useState(false),[u,w]=useState(false);G();let I=useRef(null),z=useRef(null);useLayoutEffect(()=>{let i=n.current,x=r.current;if(!i||!x)return;let y=window.devicePixelRatio||1;i.width=Math.round(qt*y),i.height=Math.round(Jt*y),i.style.width=`${qt}px`,i.style.height=`${Jt}px`;},[h]);let C=useCallback(()=>{let i=n.current,x=r.current;if(!i||!x||!e)return;let y=i.getContext("2d");if(!y)return;let j=qt,O=Jt,_=i.width,X=i.height,de=e.getShapes(),Q=new Set(e.getSelectedIds()),fe=getTheme(),b=hexToRgba(fe.text,.16),ee=fe.primary,Le=hexToRgba(fe.primary,.18),re=hexToRgba(fe.primary,.85),Me=tr(de),P=or(e),ue=Me?Jn(Me,P):P.width>0?P:er(),le=nr(ue,j,O);z.current=le;let Se=_/le.width,me=X/le.height,Ne=j/le.width;y.setTransform(1,0,0,1,0,0),y.fillStyle=qn,y.fillRect(0,0,_,X),y.setTransform(Se,0,0,me,-Se*le.x,-me*le.y),y.fillStyle=b;for(let $ of de){let v=eo($);v&&y.fillRect(v.x,v.y,v.width,v.height);}y.fillStyle=ee;for(let $ of de){if(!Q.has($.id))continue;let v=eo($);v&&y.fillRect(v.x,v.y,v.width,v.height);}y.fillStyle=Le,y.fillRect(P.x,P.y,P.width,P.height);let Re=1.5/Ne;y.strokeStyle=re,y.lineWidth=Re,y.lineJoin="round";let Te=Math.min(P.width/6,P.height/6,6/Ne);if(y.beginPath(),Te*Ne<1)y.rect(P.x,P.y,P.width,P.height);else {let $=P.x,v=P.y,ae=P.width,Y=P.height,q=Math.min(Te,ae/2,Y/2);y.moveTo($+q,v),y.lineTo($+ae-q,v),y.quadraticCurveTo($+ae,v,$+ae,v+q),y.lineTo($+ae,v+Y-q),y.quadraticCurveTo($+ae,v+Y,$+ae-q,v+Y),y.lineTo($+q,v+Y),y.quadraticCurveTo($,v+Y,$,v+Y-q),y.lineTo($,v+q),y.quadraticCurveTo($,v,$+q,v),y.closePath();}y.stroke(),y.setTransform(1,0,0,1,0,0);},[e]);useEffect(()=>{if(!e||h)return;C();let i=e.subscribe(C),x=subscribeTheme(C),y=()=>C();return window.addEventListener("resize",y),()=>{i(),x(),window.removeEventListener("resize",y);}},[e,h,C]),useEffect(()=>{if(!e)return;let i=()=>{let y=e.getCamera().getZoom();l(Math.round(y*100));};i();let x=e.subscribe(i);return ()=>{x();}},[e]);let B=useCallback((i,x)=>{if(!e)return;let y=e.getCamera(),j=y.getZoom(),O=window.innerWidth/2,_=window.innerHeight/2,X=y;X.x=O-i*j,X.y=_-x*j,e.requestRender();},[e]),p=i=>{if(!e||!r.current||i.button!==0)return;let x=r.current.getBoundingClientRect(),y=z.current;if(!y)return;let j=Qt(i.clientX,i.clientY,x,y);I.current={pointerId:i.pointerId,rect:{left:x.left,top:x.top,width:x.width,height:x.height},canvasBox:y},i.currentTarget.setPointerCapture(i.pointerId),w(true),B(j.x,j.y);},A=i=>{if(!u||!e||!I.current||!r.current)return;let x=I.current,y=Qt(i.clientX,i.clientY,x.rect,x.canvasBox);B(y.x,y.y);},L=i=>{if(u){w(false),I.current=null;try{i.currentTarget.releasePointerCapture(i.pointerId);}catch{}}},se=i=>{if(!e||!r.current)return;let x=z.current;if(!x)return;let y=r.current.getBoundingClientRect(),j=Qt(i.clientX,i.clientY,y,x);B(j.x,j.y);};return jsxs("div",{className:`drawui-minimap ${h?"collapsed":""}`,children:[jsx("button",{className:"drawui-minimap-toggle",onClick:()=>d(i=>!i),"data-drawui-tip":h?t("minimap.expand"):t("minimap.collapse"),"data-drawui-tip-pos":"top","aria-label":h?t("minimap.expand"):t("minimap.collapse"),children:jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:h?jsx("polyline",{points:"9 6 15 12 9 18"}):jsx("polyline",{points:"15 6 9 12 15 18"})})}),!h&&jsxs("div",{className:"drawui-minimap-panel",children:[jsxs("div",{className:"drawui-minimap-header",children:[jsx("span",{className:"drawui-minimap-title",children:t("minimap.title")}),jsxs("span",{className:"drawui-minimap-zoom",children:[s,"%"]})]}),jsx("div",{ref:r,className:"drawui-minimap-canvas-wrap",style:{cursor:u?"grabbing":S?"pointer":"default"},onPointerEnter:()=>f(true),onPointerLeave:()=>f(false),children:jsx("canvas",{ref:n,className:"drawui-minimap-canvas",onPointerDown:p,onPointerMove:A,onPointerUp:L,onPointerCancel:L,onDoubleClick:se})})]})]})});var ye=o=>jsx("svg",{viewBox:"0 0 24 24",width:"18",height:"18",className:"drawui-gen-shape-glyph",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round",children:o}),ir=[{type:"rectangle",labelKey:"shape.rectangle",glyph:ye(jsx("rect",{x:"4",y:"7",width:"16",height:"10",rx:"1"}))},{type:"rounded-rectangle",labelKey:"shape.rounded-rectangle",glyph:ye(jsx("rect",{x:"4",y:"7",width:"16",height:"10",rx:"4"}))},{type:"circle",labelKey:"shape.circle",glyph:ye(jsx("circle",{cx:"12",cy:"12",r:"5.5"}))},{type:"ellipse",labelKey:"shape.ellipse",glyph:ye(jsx("ellipse",{cx:"12",cy:"12",rx:"7",ry:"4.5"}))},{type:"diamond",labelKey:"shape.diamond",glyph:ye(jsx("path",{d:"M12 5 L19 12 L12 19 L5 12 Z"}))},{type:"triangle",labelKey:"shape.triangle",glyph:ye(jsx("path",{d:"M12 4 L20 19 H4 Z"}))},{type:"hexagon",labelKey:"shape.hexagon",glyph:ye(jsx("path",{d:"M12 3 L19.5 7.5 V16.5 L12 21 L4.5 16.5 V7.5 Z"}))},{type:"parallelogram",labelKey:"shape.parallelogram",glyph:ye(jsx("path",{d:"M6 7 L19 7 L16 17 H7 Z"}))},{type:"trapezoid",labelKey:"shape.trapezoid",glyph:ye(jsx("path",{d:"M7 6 H17 L20 18 H4 Z"}))},{type:"pentagon",labelKey:"shape.pentagon",glyph:ye(jsx("path",{d:"M12 4 L19.5 9.5 L16.5 18.5 H7.5 L4.5 9.5 Z"}))},{type:"octagon",labelKey:"shape.octagon",glyph:ye(jsx("path",{d:"M8 4 H16 L20 8 V16 L16 20 H8 L4 16 V8 Z"}))},{type:"star",labelKey:"shape.star",glyph:ye(jsx("path",{d:"M12 3 L14 9.5 L20.5 10 L15.5 14 L17.5 20.5 L12 16.8 L6.5 20.5 L8.5 14 L3.5 10 L10 9.5 Z"}))},{type:"sticky-note",labelKey:"shape.sticky-note",glyph:ye(jsxs(Fragment,{children:[jsx("path",{d:"M4 4h16v11l-5 5H4Z"}),jsx("path",{d:"M20 15h-5v5"})]}))},{type:"uml-class",labelKey:"shape.uml-class",glyph:ye(jsxs(Fragment,{children:[jsx("rect",{x:"3",y:"4",width:"18",height:"16",rx:"1"}),jsx("path",{d:"M3 9 H21"}),jsx("path",{d:"M3 15 H21"}),jsx("path",{d:"M6 6.5 H10"}),jsx("path",{d:"M6 12.5 H12"})]}))},{type:"uml-interface",labelKey:"shape.uml-interface",glyph:ye(jsxs(Fragment,{children:[jsx("rect",{x:"3",y:"4",width:"18",height:"16",rx:"1"}),jsx("path",{d:"M3 9 H21"}),jsx("path",{d:"M6 6.5 H10"}),jsx("path",{d:"M6 12.5 H12"})]}))},{type:"mind-map",labelKey:"shape.mind-map",glyph:ye(jsxs(Fragment,{children:[jsx("circle",{cx:"5",cy:"12",r:"2"}),jsx("path",{d:"M7 12h2.6"}),jsx("path",{d:"M9.6 12c0-2 1.2-3.4 2.6-3.4"}),jsx("path",{d:"M9.6 12c0 2 1.2 3.4 2.6 3.4"}),jsx("circle",{cx:"15.2",cy:"8.6",r:"1.3"}),jsx("circle",{cx:"15.2",cy:"15.4",r:"1.3"}),jsx("circle",{cx:"13.6",cy:"12",r:"1.3"})]}))}];function Wo({editor:o,x:e,y:n,context:r,existingArrowId:h,defaultShapeType:d,onClose:s}){let l=useRef(null);G();let S=f=>{o?.createGeneratedConnection(r,{type:f,existingArrowId:h}),s();};return useEffect(()=>{let f=I=>{l.current&&!l.current.contains(I.target)&&s();},u=I=>{I.key==="Escape"&&(I.preventDefault(),s());},w=setTimeout(()=>{window.addEventListener("pointerdown",f,true),window.addEventListener("keydown",u,true);},0);return ()=>{clearTimeout(w),window.removeEventListener("pointerdown",f,true),window.removeEventListener("keydown",u,true);}},[s]),jsxs("div",{className:"drawui-gen-menu",ref:l,style:{left:e,top:n},children:[jsx("div",{className:"drawui-gen-menu-label",children:t("menu.title")}),jsx("div",{className:"drawui-gen-shape-grid",children:ir.map(f=>jsxs("button",{className:`drawui-gen-shape-btn${f.type===d?" drawui-gen-shape-active":""}`,onClick:()=>S(f.type),"data-drawui-tip":t(f.labelKey),children:[f.glyph,jsx("span",{className:"drawui-gen-shape-label",children:t(f.labelKey)})]},f.type))}),jsx("div",{className:"drawui-gen-menu-hint",children:t("menu.cancel")})]})}var dr={select:"tool.select",hand:"tool.hand",rectangle:"tool.rectangle","rounded-rectangle":"tool.rounded-rectangle",circle:"tool.circle",ellipse:"tool.ellipse",diamond:"tool.diamond",triangle:"tool.triangle",hexagon:"tool.hexagon",parallelogram:"tool.parallelogram",trapezoid:"tool.trapezoid",pentagon:"tool.pentagon",octagon:"tool.octagon",star:"tool.star",cylinder:"tool.cylinder",cloud:"tool.cloud",heart:"tool.heart","block-arrow-right":"tool.block-arrow-right","block-arrow-left":"tool.block-arrow-left","block-arrow-up":"tool.block-arrow-up","block-arrow-down":"tool.block-arrow-down","block-arrow-double":"tool.block-arrow-double","right-triangle":"tool.right-triangle",cross:"tool.cross","speech-rect":"tool.speech-rect","speech-round":"tool.speech-round",cube:"tool.cube",sector:"tool.sector",delay:"tool.delay","predefined-process":"tool.predefined-process",document:"tool.document",stadium:"tool.stadium","class-catalog":"tool.class-catalog",chevron:"tool.chevron","brace-left":"tool.brace-left","brace-right":"tool.brace-right",envelope:"tool.envelope",checkbox:"tool.checkbox","sticky-note":"tool.sticky-note",icon:"toolbar.icon","triangular-pyramid":"tool.triangular-pyramid","quadrangular-pyramid":"tool.quadrangular-pyramid",cuboid:"tool.cuboid",sphere:"tool.sphere",ellipsoid:"tool.ellipsoid",pie:"tool.pie","hollow-pie":"tool.hollow-pie","uml-class":"tool.uml-class","uml-interface":"tool.uml-interface",line:"tool.line",arrow:"tool.arrow",text:"tool.text",draw:"tool.draw",pen:"tool.pen",highlighter:"tool.highlighter",eraser:"tool.eraser","mind-map":"tool.mind-map"};function ur({initialTool:o="select",className:e="",themeColor:n,language:r="zh-CN",data:h,onChange:d,onReady:s}){let l=useRef(null),S=useRef(null),f=useRef(null),[u,w]=useState(null);G();let[I,z]=useState(o),[C,B]=useState(false),[p,A]=useState(0),[L,se]=useState(false),[i,x]=useState("straight"),[y,j]=useState("end"),[O,_]=useState(false),[X,de]=useState(void 0),[Q,fe]=useState(100),[b,ee]=useState(null),[Le,re]=useState(null),[Me,P]=useState(false),[ue,le]=useState(false),[Se,me]=useState(null),[Ne,Re]=useState(null),[Te,$]=useState(false),[v,ae]=useState(null),[Y,q]=useState(null),W=useRef(null),He=useRef(0),te=useRef(null),U=useRef(d);U.current=d;let ze=useRef(s);ze.current=s,useEffect(()=>{if(!l.current)return;let m=new Editor(l.current,{theme:n?{primary:n,editBorder:n,selection:{outline:n,handleStroke:n,handleFill:"#ffffff",outlineFill:hexToRgba(n,.1),shadow:n}}:void 0,language:r,shapes:h,persist:!h});f.current=m,w(m),window.__drawuiEditor=m,m.setHighlighterColor(ht()),m.setStickyNoteColor(yt()),ze.current?.(m),o&&m.setActiveTool(o);let K=m.subscribe(()=>{z(m.getActiveTool());let ie=m.getSelectedIds();A(ie.length);let xe=m.getShapes().filter(Ke=>ie.includes(Ke.id)&&(Ke.type==="line"||Ke.type==="arrow"));if(se(xe.length>0),xe.length>0&&xe[0].connectionType?x(xe[0].connectionType):xe.length>0&&x("straight"),xe.length>0){let Ke=xe.find(It=>It.type==="arrow");Ke&&(j(Ke.arrowHead??"end"),_(Ke.dashed??false));}fe(Math.round(m.getCamera().getZoom()*100)),de(m.getArrowStyle()),P(m.canUndo()),le(m.canRedo());let Pe=m.getSelectedUml();me(Pe),Pe||ae(null);let pt=m.getSelectedMindMap();Re(pt),m.getMindMapEditingShapeId()||$(false),U.current?.(m.getData());}),E=m.subscribeNotifications(ie=>{re({type:"success",text:ie}),W.current&&clearTimeout(W.current),W.current=setTimeout(()=>re(null),3500);}),qe=m.subscribeUi(ie=>{ie.kind==="shapeTypeMenu"&&q({x:ie.screenX,y:ie.screenY,context:ie.context,existingArrowId:ie.existingArrowId,defaultShapeType:ie.defaultShapeType});});return ()=>{K(),E(),qe(),W.current&&clearTimeout(W.current),cancelAnimationFrame(He.current),m.dispose();}},[o]),useEffect(()=>{if(!n)return;let m=S.current;m&&(m.style.setProperty("--dw-primary",n),m.style.setProperty("--dw-primary-hover",shadeColor(n,-0.12)),m.style.setProperty("--dw-primary-weak",hexToRgba(n,.1)),m.style.setProperty("--dw-primary-contrast","#ffffff"),m.style.setProperty("--dw-shadow-primary",`0 2px 8px ${hexToRgba(n,.3)}`)),f.current?.setTheme({primary:n,editBorder:n,selection:{outline:n,handleStroke:n,handleFill:"#ffffff",outlineFill:hexToRgba(n,.1),shadow:n}});},[n]),useEffect(()=>{setLanguage(r),f.current?.setLanguage(r);},[r]);let Ze=useCallback(m=>{f.current?.setActiveTool(m);},[]),g=useCallback(()=>{f.current?.zoomIn();},[]),R=useCallback(()=>{f.current?.zoomOut();},[]),H=useCallback(()=>{f.current?.resetZoom();},[]),D=useCallback(()=>{let m=!C;B(m),f.current?.setShowGrid(m);},[C]),a=useCallback(()=>{f.current?.undo();},[]),N=useCallback(()=>{f.current?.redo();},[]),pe=useCallback(m=>{f.current?.downloadImage("drawui",m,{background:"#ffffff"});},[]),ge=useCallback(()=>{f.current?.downloadJSON("drawui-data");},[]),we=useCallback(m=>{let K=new FileReader;K.onload=()=>{let E=typeof K.result=="string"?K.result:"";if(f.current?.importJSON(E)??false){let ie=f.current?.getShapes().length??0;re({type:"success",text:t("import.success",{n:ie})});}else re({type:"error",text:t("import.fail")});W.current&&clearTimeout(W.current),W.current=setTimeout(()=>re(null),3500);},K.onerror=()=>{re({type:"error",text:t("import.fail")}),W.current&&clearTimeout(W.current),W.current=setTimeout(()=>re(null),3500);},K.readAsText(m,"utf-8");},[]),Ee=useCallback(m=>{let K=f.current,E=l.current;if(!K||!E)return;if(K.isPointerDown()){te.current!==null&&(te.current=null,ee(null));return}let qe=m.clientX,ie=m.clientY;cancelAnimationFrame(He.current),He.current=requestAnimationFrame(()=>{let et=E.getBoundingClientRect(),xe=qe-et.left,Pe=ie-et.top,pt=xe+12,Ke=Pe+12,It=K.getSelectedUml()?.id,tt=K.getUmlRowAtScreenPoint({x:xe,y:Pe});if(tt&&tt.shape.id!==It&&tt.text){te.current!==tt.text&&(te.current=tt.text,ee({text:tt.text,x:pt,y:Ke}));return}let it=K.getShapeAtScreenPoint({x:xe,y:Pe});it&&it.text?te.current!==it.text&&(te.current=it.text,ee({text:it.text,x:pt,y:Ke})):te.current!==null&&(te.current=null,ee(null));});},[]),Xe=useCallback(()=>{ee(null);},[]),c=useCallback(m=>{let K=f.current,E=l.current;if(!K||!E)return;let qe=E.getBoundingClientRect(),ie=m.clientX-qe.left,et=m.clientY-qe.top,xe=K.getUmlRowAtScreenPoint({x:ie,y:et});if(xe){ae(xe.shape.id);return}let Pe=K.getMindMapNodeAtScreenPoint({x:ie,y:et});Pe&&K.beginMindMapEdit(Pe.shapeId,Pe.nodeId);},[]),M=useCallback(()=>{q(null);},[]);return jsxs("div",{ref:S,className:`drawui-canvas-board ${e}`,children:[jsx("canvas",{ref:l,className:"drawui-canvas",onMouseMove:Ee,onMouseLeave:Xe,onDoubleClick:c}),b&&jsx("div",{className:"drawui-tooltip",style:{left:b.x,top:b.y},children:b.text}),jsx(Bt,{activeTool:I,onToolChange:Ze,showGrid:C,onToggleGrid:D,canUndo:Me,canRedo:ue,onUndo:a,onRedo:N,onExport:pe,onExportData:ge,onImportData:we,onHighlighterColorChange:m=>f.current?.setHighlighterColor(m),onStickyNoteColorChange:m=>f.current?.setStickyNoteColor(m),onInsertIcon:m=>f.current?.insertIcon(m),arrowStyle:X,onArrowStyleChange:m=>f.current?.setArrowStyle(m)}),jsx(Ut,{onZoomIn:g,onZoomOut:R,onReset:H,zoomLevel:Q}),jsx(To,{editor:u,selectedCount:p,hasLineSelection:L,currentConnectionType:i,currentArrowHead:y,currentDashed:O}),jsx(Po,{editor:u,umlClass:Se,editing:v}),jsx(Ao,{editor:u,panelOpen:Te,onOpenPanel:()=>$(true)}),Te&&jsx(zo,{editor:u,mindMap:Ne}),jsx(Uo,{editor:u}),Y&&jsx(Wo,{editor:u,x:Y.x,y:Y.y,context:Y.context,existingArrowId:Y.existingArrowId,defaultShapeType:Y.defaultShapeType,onClose:M}),jsxs("div",{className:"drawui-status-bar",children:[jsx("div",{className:"drawui-status-item",children:jsx("span",{children:t(dr[I])})}),jsx("div",{className:"drawui-status-item",children:jsx("span",{children:p===0?t("status.none"):t("status.selected",{n:p})})}),jsx("div",{className:"drawui-status-item",children:jsxs("span",{children:[Q,"%"]})})]}),Le&&jsxs("div",{className:"drawui-toast",children:[Le.type==="success"?jsx("svg",{className:"drawui-toast-icon",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:jsx("polyline",{points:"20 6 9 17 4 12"})}):jsxs("svg",{className:"drawui-toast-icon drawui-toast-icon-error",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]}),Le.text]})]})}export{ur as CanvasBoard,Bt as Toolbar,Ut as ZoomControl};
1
+ import {memo,useState,useRef,useEffect,useMemo,useCallback,useLayoutEffect}from'react';import {ICON_CATEGORIES,getIcon,searchIcons,iconsByCategory,ICON_CATEGORY_INK,ICON_DEFAULT_INK,t,iconInk,STICKY_NOTE_COLORS,getContentBounds,UML_FONT_SIZE,TABLE_FONT_SIZE,TABLE_LINE_HEIGHT_RATIO,tableExpandRangeToMerges,tableCoveredMap,tableRangeHasMerge,MINDMAP_COLORS,layoutMindMap,getTheme,hexToRgba,subscribeTheme,getLanguage,subscribeLanguage,ICON_GRID,DEFAULT_HIGHLIGHTER_COLOR,STICKY_NOTE_DEFAULT_COLOR,UML_LINE_HEIGHT,UML_PADDING_Y,UML_PADDING_X,UML_HEADER_HEIGHT,MINDMAP_FONT_SIZE,TABLE_CELL_PADDING_Y,TABLE_CELL_PADDING_X,Editor,shadeColor,setLanguage}from'drawui-core';import {jsxs,jsx,Fragment}from'react/jsx-runtime';function U(){let[o,e]=useState(getLanguage());return useEffect(()=>subscribeLanguage(()=>e(getLanguage())),[]),o}var so=["#ffeb3b","#22c55e","#3b82f6","#ec4899","#8b5cf6","#f97316"],lo="drawui:highlighterColor";function mt(){if(typeof window>"u")return DEFAULT_HIGHLIGHTER_COLOR;try{let o=window.localStorage.getItem(lo);return o&&/^#[0-9a-fA-F]{6}$/.test(o)?o.toLowerCase():DEFAULT_HIGHLIGHTER_COLOR}catch{return DEFAULT_HIGHLIGHTER_COLOR}}function co(o){if(!(typeof window>"u"))try{window.localStorage.setItem(lo,o);}catch{}}var po="drawui:stickyNoteColor";function bt(){if(typeof window>"u")return STICKY_NOTE_DEFAULT_COLOR;try{let o=window.localStorage.getItem(po);return o&&/^#[0-9a-fA-F]{6}$/.test(o)?o.toLowerCase():STICKY_NOTE_DEFAULT_COLOR}catch{return STICKY_NOTE_DEFAULT_COLOR}}function ho(o){if(!(typeof window>"u"))try{window.localStorage.setItem(po,o);}catch{}}function dn({icon:o,size:e=24,ink:n=ICON_DEFAULT_INK}){return jsxs("svg",{viewBox:`0 0 ${ICON_GRID} ${ICON_GRID}`,width:e,height:e,fill:"none","aria-hidden":"true",children:[o.disc&&jsx("circle",{cx:ICON_GRID/2,cy:ICON_GRID/2,r:ICON_GRID/2-1,fill:o.disc}),o.layers.map((r,h)=>{let c=r.fill??"ink",a=r.stroke??"ink";return jsx("path",{d:r.d,fill:c==="none"?"none":c==="ink"?n:c,...a==="none"?{}:{stroke:a==="ink"?n:a,strokeWidth:r.w??1.8,strokeLinecap:"round",strokeLinejoin:"round"}},h)}),o.label&&jsx("text",{x:ICON_GRID/2,y:ICON_GRID/2+.5,textAnchor:"middle",dominantBaseline:"central",fontFamily:"sans-serif",fontSize:o.label.size??13,fill:o.label.color,children:o.label.text})]})}var go="drawui:recentIcons",wo=12;function zt(o,e){let n=/^#?([0-9a-f]{6})$/i.exec(o.trim());if(!n)return o;let r=parseInt(n[1],16);return `rgba(${r>>16&255}, ${r>>8&255}, ${r&255}, ${e})`}function un(){if(typeof window>"u")return [];try{let o=JSON.parse(window.localStorage.getItem(go)||"[]");return Array.isArray(o)?o.filter(e=>typeof e=="string").slice(0,wo):[]}catch{return []}}function pn(o){if(!(typeof window>"u"))try{window.localStorage.setItem(go,JSON.stringify(o));}catch{}}var bo=o=>({"--dw-icon-cat":o,"--dw-icon-cat-soft":zt(o,.12)}),vo=memo(function({onPick:e,onClose:n}){U();let[r,h]=useState(""),[c,a]=useState(ICON_CATEGORIES[0].id),[l,S]=useState(un),g=useRef(null),p=useRef(null);useEffect(()=>{p.current?.focus();},[]),useEffect(()=>{let d=C=>{let Z=g.current;Z&&(Z.contains(C.target)||C.target?.closest?.("[data-icon-toggle]")||n());},E=C=>{C.key==="Escape"&&(C.stopPropagation(),n());};return window.addEventListener("pointerdown",d),window.addEventListener("keydown",E),()=>{window.removeEventListener("pointerdown",d),window.removeEventListener("keydown",E);}},[n]);let b=useMemo(()=>l.map(d=>getIcon(d)).filter(d=>!!d),[l]),x=useMemo(()=>r.trim()?searchIcons(r):c==="recent"?b:iconsByCategory(c),[r,c,b]),N=c==="recent"?ICON_CATEGORY_INK.status:ICON_CATEGORY_INK[c]??ICON_DEFAULT_INK,K=r.trim()?t("icon.search"):c==="recent"?t("icon.recent"):t(ICON_CATEGORIES.find(d=>d.id===c)?.labelKey??"icon.search"),I=d=>{e(d),S(E=>{let C=[d.id,...E.filter(Z=>Z!==d.id)].slice(0,wo);return pn(C),C});};return jsxs("div",{className:"drawui-icon-panel",ref:g,style:{"--dw-icon-accent":N,"--dw-icon-soft":zt(N,.08),"--dw-icon-ring":zt(N,.22)},children:[jsxs("label",{className:"drawui-icon-search",children:[jsxs("svg",{viewBox:"0 0 24 24",width:"15",height:"15",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",children:[jsx("circle",{cx:"10.5",cy:"10.5",r:"6.5"}),jsx("path",{d:"M15.4 15.4L20 20"})]}),jsx("input",{ref:p,value:r,onChange:d=>h(d.target.value),onKeyDown:d=>{d.key==="Enter"&&x.length>0&&I(x[0]);},placeholder:t("icon.search"),"aria-label":t("icon.search")}),jsx("span",{className:"drawui-icon-count",children:x.length})]}),!r.trim()&&jsxs("div",{className:"drawui-icon-cats",children:[b.length>0&&jsxs("button",{type:"button",className:`drawui-icon-cat${c==="recent"?" active":""}`,style:bo(ICON_CATEGORY_INK.status),onClick:()=>a("recent"),children:[jsx("i",{className:"drawui-icon-dot"}),t("icon.recent")]}),ICON_CATEGORIES.map(d=>jsxs("button",{type:"button",className:`drawui-icon-cat${c===d.id?" active":""}`,style:bo(ICON_CATEGORY_INK[d.id]??ICON_DEFAULT_INK),onClick:()=>a(d.id),children:[jsx("i",{className:"drawui-icon-dot"}),t(d.labelKey)]},d.id))]}),jsxs("div",{className:"drawui-icon-card",children:[jsxs("div",{className:"drawui-icon-card-head",children:[jsx("span",{className:"drawui-icon-card-title",children:K}),jsx("span",{className:"drawui-icon-card-count",children:x.length})]}),jsxs("div",{className:"drawui-icon-grid",children:[x.map(d=>jsx("button",{type:"button",className:"drawui-icon-item",title:`${d.zh} / ${d.en}`,"aria-label":`${d.zh} ${d.en}`,onClick:()=>I(d),children:jsx(dn,{icon:d,size:30,ink:iconInk(d)})},d.id)),x.length===0&&jsx("div",{className:"drawui-icon-empty",children:t("icon.empty")})]})]})]})});var Le=o=>`${o.x.toFixed(1)},${o.y.toFixed(1)}`,xo=(o,e)=>{let n=e*Math.PI/180;return {x:o.x*Math.cos(n)-o.y*Math.sin(n),y:o.x*Math.sin(n)+o.y*Math.cos(n)}},it={x:Math.SQRT1_2,y:-Math.SQRT1_2},_t={x:4.6,y:19.4},dt={x:19,y:5};function Wt(o,e,n){let r={x:-n.y,y:n.x},h=a=>({x:e.x-n.x*a,y:e.y-n.y*a}),c=(a,l)=>({x:a.x+r.x*l,y:a.y+r.y*l});switch(o){case "end":{let a=h(5.6);return jsx("polygon",{points:`${Le(e)} ${Le(c(a,2.7))} ${Le(c(a,-2.7))}`,fill:"currentColor",stroke:"none"})}case "inheritance":case "realization":{let a=h(8.6);return jsx("polygon",{points:`${Le(e)} ${Le(c(a,3.5))} ${Le(c(a,-3.5))}`,fill:"none"})}case "aggregation":case "composition":{let a=h(4.3),l=h(8.6);return jsx("polygon",{points:`${Le(e)} ${Le(c(a,2.7))} ${Le(l)} ${Le(c(a,-2.7))}`,fill:o==="composition"?"currentColor":"none",stroke:"currentColor"})}case "dependency":{let a=xo({x:-n.x,y:-n.y},30),l=xo({x:-n.x,y:-n.y},-30);return jsx("path",{d:`M ${Le({x:e.x+a.x*5.8,y:e.y+a.y*5.8})} L ${Le(e)} L ${Le({x:e.x+l.x*5.8,y:e.y+l.y*5.8})}`,fill:"none"})}default:return null}}function Ae(o,e){let n=e||o==="dependency"||o==="realization",r=n?{x:dt.x-it.x*8.6,y:dt.y-it.y*8.6}:dt,h={x:-it.x,y:-it.y};return jsxs("svg",{viewBox:"0 0 24 24",width:"18",height:"18",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[jsx("line",{x1:_t.x,y1:_t.y,x2:r.x,y2:r.y,strokeDasharray:n?"3 2.6":void 0}),(o==="end"||o==="both")&&Wt("end",dt,it),(o==="start"||o==="both")&&Wt("end",_t,h),o!=="none"&&o!=="start"&&o!=="end"&&o!=="both"?Wt(o,dt,it):null]})}var wt=o=>jsx("svg",{viewBox:"0 0 24 24",width:"18",height:"18",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:jsx("path",{d:o})}),yn=[{type:"straight",labelKey:"style.connection.straight",icon:wt("M3 12h18")},{type:"polyline",labelKey:"style.connection.polyline",icon:wt("M4 8 C 12 8, 12 16, 20 16")},{type:"orthogonal",labelKey:"style.connection.orthogonal",icon:wt("M5 5v14h14")},{type:"curve",labelKey:"style.connection.curve",icon:wt("M3 13 C 6 7, 9 7, 12 12 C 15 17, 18 17, 21 11")}],Co=[{key:"none",arrowHead:"none",dashed:false,labelKey:"style.arrowhead.none",icon:Ae("none",false)},{key:"end",arrowHead:"end",dashed:false,labelKey:"style.arrowhead.end",icon:Ae("end",false)},{key:"start",arrowHead:"start",dashed:false,labelKey:"style.arrowhead.start",icon:Ae("start",false)},{key:"both",arrowHead:"both",dashed:false,labelKey:"style.arrowhead.both",icon:Ae("both",false)},{key:"none-dashed",arrowHead:"none",dashed:true,labelKey:"style.arrowhead.none-dashed",icon:Ae("none",true)},{key:"both-dashed",arrowHead:"both",dashed:true,labelKey:"style.arrowhead.both-dashed",icon:Ae("both",true)}],So=[{key:"inheritance",arrowHead:"inheritance",dashed:false,labelKey:"style.arrowhead.inheritance",icon:Ae("inheritance",false)},{key:"composition",arrowHead:"composition",dashed:false,labelKey:"style.arrowhead.composition",icon:Ae("composition",false)},{key:"aggregation",arrowHead:"aggregation",dashed:false,labelKey:"style.arrowhead.aggregation",icon:Ae("aggregation",false)},{key:"dependency",arrowHead:"dependency",dashed:true,labelKey:"style.arrowhead.dependency",icon:Ae("dependency",true)},{key:"realization",arrowHead:"realization",dashed:true,labelKey:"style.arrowhead.realization",icon:Ae("realization",true)}],ko=[...Co,...So];function fn(o,e){let n=ko.find(r=>r.arrowHead===o&&r.dashed===e);return n?n.key:ko.find(r=>r.arrowHead===o)?.key}var xt=memo(function({connectionType:e,arrowHead:n,dashed:r,onConnectionTypeChange:h,onArrowStyleChange:c,onOptionHover:a,onOptionLeave:l}){U();let S=fn(n,r),g=p=>jsx("div",{className:"drawui-connection-row",children:p.map(b=>jsxs("button",{className:`drawui-connection-btn${S===b.key?" active":""}`,onClick:()=>c(b),"data-drawui-tip":a?void 0:t(b.labelKey),onMouseEnter:a?x=>a(b.labelKey,x.currentTarget):void 0,onMouseLeave:a?l:void 0,"aria-label":t(b.labelKey),type:"button",children:[jsx("span",{className:"drawui-connection-icon",children:b.icon}),jsx("span",{className:"drawui-connection-label",children:t(b.labelKey)})]},b.key))});return jsxs(Fragment,{children:[jsx("div",{className:"drawui-style-popover-title",children:t("style.connection")}),jsx("div",{className:"drawui-connection-row",children:yn.map(p=>jsxs("button",{className:`drawui-connection-btn${e===p.type?" active":""}`,onClick:()=>h(p.type),"data-drawui-tip":a?void 0:t(p.labelKey),onMouseEnter:a?b=>a(p.labelKey,b.currentTarget):void 0,onMouseLeave:a?l:void 0,"aria-label":t(p.labelKey),type:"button",children:[jsx("span",{className:"drawui-connection-icon",children:p.icon}),jsx("span",{className:"drawui-connection-label",children:t(p.labelKey)})]},p.type))}),jsx("div",{className:"drawui-style-popover-title",children:t("style.arrow")}),g(Co),jsx("div",{className:"drawui-style-popover-title",children:t("style.uml")}),g(So)]})});var Mo=[{type:"rectangle",icon:jsx("rect",{x:"3",y:"5",width:"18",height:"14",rx:"0"})},{type:"rounded-rectangle",icon:jsx("rect",{x:"3",y:"5",width:"18",height:"14",rx:"4"})},{type:"circle",icon:jsx("circle",{cx:"12",cy:"12",r:"8"})},{type:"ellipse",icon:jsx("ellipse",{cx:"12",cy:"12",rx:"9",ry:"6"})},{type:"diamond",icon:jsx("path",{d:"M12 3L21 12L12 21L3 12Z"})},{type:"triangle",icon:jsx("path",{d:"M12 4L20 19L4 19Z"})},{type:"hexagon",icon:jsx("path",{d:"M12 3L20 7.5V16.5L12 21L4 16.5V7.5Z"})},{type:"parallelogram",icon:jsx("path",{d:"M7 5L20 5L17 19L4 19Z"})},{type:"trapezoid",icon:jsx("path",{d:"M6 5L18 5L21 19L3 19Z"})},{type:"pentagon",icon:jsx("path",{d:"M12 3L21 10L17.5 21L6.5 21L3 10Z"})},{type:"octagon",icon:jsx("path",{d:"M8 3L16 3L21 8L21 16L16 21L8 21L3 16L3 8Z"})},{type:"star",icon:jsx("path",{d:"M12 2L14.5 8.5L21 9L16 13.5L17.5 20L12 16.5L6.5 20L8 13.5L3 9L9.5 8.5Z"})},{type:"cylinder",icon:jsxs(Fragment,{children:[jsx("ellipse",{cx:"12",cy:"6.5",rx:"6",ry:"2.8"}),jsx("path",{d:"M6 6.5v11c0 1.5 2.7 2.8 6 2.8s6-1.3 6-2.8v-11"})]})},{type:"cloud",icon:jsx("path",{d:"M7 18.5h9.4a3.4 3.4 0 0 0 .3-6.8 5 5 0 0 0-9.5-1.2A3.9 3.9 0 0 0 7 18.5Z"})},{type:"heart",icon:jsx("path",{d:"M12 20.3S4.6 15.7 4.6 10.5A4.1 4.1 0 0 1 12 7.6a4.1 4.1 0 0 1 7.4 2.9c0 5.2-7.4 9.8-7.4 9.8Z"})},{type:"block-arrow-right",icon:jsx("path",{d:"M3 9h9V5l9 7-9 7v-4H3Z"})},{type:"block-arrow-left",icon:jsx("path",{d:"M21 9h-9V5L3 12l9 7v-4h9Z"})},{type:"block-arrow-up",icon:jsx("path",{d:"M9 21v-9H5l7-9 7 9h-4v9Z"})},{type:"block-arrow-down",icon:jsx("path",{d:"M9 3v9H5l7 9 7-9h-4V3Z"})},{type:"block-arrow-double",icon:jsx("path",{d:"M2 12l4.5-6v3.5h11V6L22 12l-4.5 6v-3.5h-11V18Z"})},{type:"right-triangle",icon:jsx("path",{d:"M4 4v16h16Z"})},{type:"cross",icon:jsx("path",{d:"M9.5 3h5v6.5H21v5h-6.5V21h-5v-6.5H3v-5h6.5Z"})},{type:"envelope",icon:jsxs(Fragment,{children:[jsx("rect",{x:"3",y:"5",width:"18",height:"14"}),jsx("path",{d:"M3 5l18 14M21 5L3 19"})]})},{type:"checkbox",icon:jsxs(Fragment,{children:[jsx("rect",{x:"3",y:"3",width:"18",height:"18",rx:"3"}),jsx("path",{d:"M7.8 12.3l2.7 2.7 5.7-6.2"})]})},{type:"speech-rect",icon:jsx(Fragment,{children:jsx("path",{d:"M3 5h18v11H8l-3.2 3.2V16H3Z"})})},{type:"speech-round",icon:jsxs(Fragment,{children:[jsx("ellipse",{cx:"12",cy:"10.5",rx:"9",ry:"6.5"}),jsx("path",{d:"M8 16.2 6 21l5-3.4"})]})},{type:"cube",icon:jsxs(Fragment,{children:[jsx("path",{d:"M12 3 20 7.5v9L12 21 4 16.5v-9Z"}),jsx("path",{d:"M4 7.5 12 12l8-4.5M12 12v9"})]})},{type:"cuboid",icon:jsxs(Fragment,{children:[jsx("path",{d:"M12 4 21 8.5v7L12 20 3 15.5v-7Z"}),jsx("path",{d:"M3 8.5 12 13l9-4.5M12 13v7"})]})},{type:"triangular-pyramid",icon:jsxs(Fragment,{children:[jsx("path",{d:"M12 3 21.5 16.5 12 21 2.5 16.5Z"}),jsx("path",{d:"M12 3v18M2.5 16.5h19"})]})},{type:"quadrangular-pyramid",icon:jsxs(Fragment,{children:[jsx("path",{d:"M12 3 22.5 17 12 21 1.5 17Z"}),jsx("path",{d:"M12 3v18M12 12 1.5 17M12 12l10.5 5"})]})},{type:"sphere",icon:jsxs(Fragment,{children:[jsx("circle",{cx:"12",cy:"12",r:"9"}),jsx("ellipse",{cx:"12",cy:"12",rx:"9",ry:"2.5"})]})},{type:"ellipsoid",icon:jsxs(Fragment,{children:[jsx("ellipse",{cx:"12",cy:"12",rx:"10",ry:"6.5"}),jsx("ellipse",{cx:"12",cy:"12",rx:"10",ry:"1.9"})]})},{type:"pie",icon:jsxs(Fragment,{children:[jsx("ellipse",{cx:"12",cy:"9",rx:"9",ry:"3.5"}),jsx("path",{d:"M3 9v5c0 1.9 4 3.5 9 3.5s9-1.6 9-3.5V9"}),jsx("path",{d:"M12 9 5.6 12M12 9l6.4 3"})]})},{type:"hollow-pie",icon:jsxs(Fragment,{children:[jsx("ellipse",{cx:"12",cy:"9",rx:"9",ry:"3.5"}),jsx("path",{d:"M3 9v5c0 1.9 4 3.5 9 3.5s9-1.6 9-3.5V9"}),jsx("ellipse",{cx:"12",cy:"9",rx:"3.6",ry:"1.5"})]})},{type:"sector",icon:jsx("path",{d:"M12 3a9 9 0 1 0 9 9h-9Z"})},{type:"delay",icon:jsx("path",{d:"M3 5h12a7 7 0 0 1 0 14H3Z"})},{type:"predefined-process",icon:jsxs(Fragment,{children:[jsx("rect",{x:"3",y:"5",width:"18",height:"14"}),jsx("path",{d:"M6.5 5v14M17.5 5v14"})]})},{type:"document",icon:jsx("path",{d:"M3 5h18v10.5c-5 3.5-13-3.5-18 0Z"})},{type:"stadium",icon:jsx("rect",{x:"3",y:"6.5",width:"18",height:"11",rx:"5.5"})},{type:"chevron",icon:jsx("path",{d:"M2 4h9l9 8-9 8H2l8-8Z"})},{type:"brace-left",icon:jsxs(Fragment,{children:[jsx("path",{d:"M1 1C3.9 1 5.1 2.4 5.1 5.1c0 3.7 1.2 6.9 2.9 6.9-1.7 0-2.9 3.2-2.9 6.9 0 2.7-1.2 4.1-4.1 4.1"}),jsx("path",{d:"M12 9.6h10M12 14.4h10"})]})},{type:"brace-right",icon:jsxs(Fragment,{children:[jsx("path",{d:"M23 1c-2.9 0-4.1 1.4-4.1 4.1 0 3.7-1.2 6.9-2.9 6.9 1.7 0 2.9 3.2 2.9 6.9 0 2.7 1.2 4.1 4.1 4.1"}),jsx("path",{d:"M2 9.6h10M2 14.4h10"})]})},{type:"uml-class",icon:jsxs(Fragment,{children:[jsx("rect",{x:"3",y:"3",width:"18",height:"18",rx:"2"}),jsx("line",{x1:"3",y1:"9",x2:"21",y2:"9"}),jsx("line",{x1:"3",y1:"15",x2:"21",y2:"15"}),jsx("line",{x1:"7",y1:"6",x2:"17",y2:"6"}),jsx("line",{x1:"7",y1:"12",x2:"13",y2:"12"}),jsx("line",{x1:"7",y1:"18",x2:"11",y2:"18"})]})},{type:"uml-interface",icon:jsxs(Fragment,{children:[jsx("rect",{x:"3",y:"3",width:"18",height:"18",rx:"2"}),jsx("line",{x1:"3",y1:"9",x2:"21",y2:"9"}),jsx("line",{x1:"7",y1:"6",x2:"17",y2:"6"}),jsx("line",{x1:"7",y1:"12",x2:"13",y2:"12"})]})},{type:"class-catalog",icon:jsxs(Fragment,{children:[jsx("rect",{x:"3",y:"5",width:"18",height:"14",rx:"1.5"}),jsx("line",{x1:"6.6",y1:"5",x2:"6.6",y2:"19"}),jsx("line",{x1:"17.4",y1:"5",x2:"17.4",y2:"19"})]})}],gn=[{key:"basic",labelKey:"shapeGroup.basic",items:[{type:"rectangle"},{type:"rounded-rectangle"},{type:"stadium"},{type:"circle"},{type:"ellipse"},{type:"diamond"},{type:"triangle"},{type:"right-triangle"},{type:"hexagon"},{type:"parallelogram"},{type:"trapezoid"},{type:"pentagon"},{type:"octagon"},{type:"star"},{type:"envelope"},{type:"checkbox"}]},{key:"flowchart",labelKey:"shapeGroup.flowchart",items:[{type:"rectangle",labelKey:"flow.process"},{type:"rounded-rectangle",labelKey:"flow.step"},{type:"stadium",labelKey:"flow.startEnd"},{type:"diamond",labelKey:"flow.decision"},{type:"parallelogram",labelKey:"flow.data"},{type:"trapezoid",labelKey:"flow.manual"},{type:"hexagon",labelKey:"flow.preparation"},{type:"cylinder",labelKey:"flow.database"},{type:"delay",labelKey:"flow.delay"},{type:"predefined-process"},{type:"document"},{type:"block-arrow-right"},{type:"block-arrow-left"},{type:"block-arrow-up"},{type:"block-arrow-down"},{type:"block-arrow-double"}]},{key:"uml",labelKey:"shapeGroup.uml",items:[{type:"uml-class"},{type:"uml-interface"},{type:"rounded-rectangle",labelKey:"class.plain"},{type:"class-catalog"}]},{key:"solid",labelKey:"shapeGroup.solid",items:[{type:"cylinder"},{type:"cube"},{type:"cuboid"},{type:"triangular-pyramid"},{type:"quadrangular-pyramid"},{type:"sphere"},{type:"ellipsoid"},{type:"pie"},{type:"hollow-pie"}]},{key:"other",labelKey:"shapeGroup.other",items:[{type:"cloud"},{type:"heart"},{type:"cross"},{type:"sector"},{type:"chevron"},{type:"speech-rect"},{type:"speech-round"},{type:"brace-left"},{type:"brace-right"}]}],wn=new Map(Mo.map(o=>[o.type,o.icon])),vn=new Set(Mo.map(o=>o.type)),xn=jsxs(Fragment,{children:[jsx("path",{d:"M4 4h16v11l-5 5H4Z"}),jsx("path",{d:"M20 15h-5v5"})]}),kn=[{type:"arrow",icon:"M5 12h14M12 5l7 7-7 7",labelKey:"toolbar.arrow"},{type:"text",icon:"M4 7V4h16v3M9 20h6M12 4v16",labelKey:"toolbar.text"}],Cn="M17 3a2.85 2.85 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3Z",Ut=8,Sn=6,Zt="M0 -1Q0.24 -0.24 1 0Q0.24 0.24 0 1Q-0.24 0.24 -1 0Q-0.24 -0.24 0 -1Z",Mn=[{type:"eraser",icon:"M7 21l-4.3-4.3c-1-1-1-2.5 0-3.4l9.6-9.6c1-1 2.5-1 3.4 0l5.6 5.6c1 1 1 2.5 0 3.4L13 21M22 21H7M5 11l9 9",labelKey:"toolbar.eraser"}],Gt=memo(function({activeTool:e,onToolChange:n,showGrid:r,onToggleGrid:h,canUndo:c=false,canRedo:a=false,onUndo:l,onRedo:S,onExport:g,onExportData:p,onImportData:b,onHighlighterColorChange:x,onStickyNoteColorChange:N,onInsertIcon:K,onInsertTable:I,arrowStyle:d,onArrowStyleChange:E}){let[C,Z]=useState(false),[s,w]=useState(false),[m,G]=useState(null),[z,_]=useState(false),[Q,F]=useState(false),[H,Y]=useState(mt),[j,ee]=useState(false),[M,ue]=useState(bt),[xe,B]=useState(false),[Re,ye]=useState(false),[se,Te]=useState(null),ke=useRef(null),Ne=useRef(null),fe=useRef(null),O=useRef(null),v=useRef(null);U();let pe=[{format:"png",labelKey:"toolbar.export.png"},{format:"svg",labelKey:"toolbar.export.svg"},{format:"pdf",labelKey:"toolbar.export.pdf"}],oe=()=>{ke.current&&(clearTimeout(ke.current),ke.current=null),_(true);},le=()=>{ke.current=window.setTimeout(()=>_(false),200);},X=useRef(null),He=()=>{_(false),y(),X.current?.click();},me=u=>{let W=u.target.files?.[0];W&&b?.(W),u.target.value="";},We=()=>{Ne.current&&(clearTimeout(Ne.current),Ne.current=null),Z(true);},Ue=()=>{Ne.current=window.setTimeout(()=>{Z(false),y();},200);},Ye=()=>{fe.current&&(clearTimeout(fe.current),fe.current=null),w(true);},je=()=>{fe.current=window.setTimeout(()=>{w(false),y();},200);},Ee=(u,W)=>{let i=u.closest(".drawui-toolbar");if(!i)return;let T=u.getBoundingClientRect(),f=i.getBoundingClientRect(),k=T.bottom+46>window.innerHeight;G({label:W,x:T.left-f.left+T.width/2,y:k?T.top-f.top-8:T.bottom-f.top+8,above:k});},y=()=>G(null),$=()=>{O.current&&(clearTimeout(O.current),O.current=null),F(true);},P=()=>{O.current=window.setTimeout(()=>F(false),200);},D=u=>{Y(u),co(u),x?.(u),n("highlighter");},q=()=>{v.current&&(clearTimeout(v.current),v.current=null),ee(true);},ne=()=>{v.current=window.setTimeout(()=>ee(false),200);},Ie=u=>{ue(u),ho(u),N?.(u),n("sticky-note"),ee(false);};return jsx("div",{className:"drawui-toolbar-container",children:jsxs("div",{className:"drawui-toolbar",children:[jsx("button",{className:`drawui-toolbar-button ${e==="select"?"active":""}`,onClick:()=>n("select"),onMouseEnter:u=>Ee(u.currentTarget,"toolbar.select"),onMouseLeave:y,children:jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:jsx("path",{d:"M6 3 6 19.6 10.3 15.7 13 21.1 15.8 19.8 13.1 14.5 18.6 14 Z"})})}),jsx("button",{className:`drawui-toolbar-button ${e==="hand"?"active":""}`,onClick:()=>n("hand"),onMouseEnter:u=>Ee(u.currentTarget,"toolbar.hand"),onMouseLeave:y,children:jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",strokeLinejoin:"round",children:[jsx("path",{d:"M7.6 12.6V5.6a1.5 1.5 0 0 1 3 0v4.6"}),jsx("path",{d:"M10.6 10.2V4.1a1.5 1.5 0 0 1 3 0v6.1"}),jsx("path",{d:"M13.6 10.4V5.2a1.5 1.5 0 0 1 3 0v6.6"}),jsx("path",{d:"M16.6 11.8V8.1a1.5 1.5 0 0 1 3 0v6.6a6.2 6.2 0 0 1-6.2 6.2h-1.5a6.2 6.2 0 0 1-5-2.5l-3.2-4.4a1.5 1.5 0 0 1 2.3-1.9l2.6 2.5"})]})}),jsx("div",{className:"drawui-toolbar-divider"}),jsxs("div",{className:"drawui-toolbar-dropdown",onMouseEnter:We,onMouseLeave:Ue,children:[jsx("button",{className:`drawui-toolbar-button ${vn.has(e)?"active":""}`,onClick:()=>{n("rounded-rectangle"),Z(false),y();},"data-drawui-tip":C?void 0:t("toolbar.shapes"),children:jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:jsx("rect",{x:"3",y:"5",width:"18",height:"14",rx:"4",ry:"4"})})}),C&&jsx("div",{className:"drawui-toolbar-shape-grid drawui-shape-menu",children:jsx("div",{className:"drawui-shape-menu-scroll",children:gn.map(u=>jsxs("div",{className:"drawui-shape-group",children:[jsx("div",{className:"drawui-shape-group-title",children:t(u.labelKey)}),jsx("div",{className:"drawui-shape-group-grid",children:u.items.map(W=>{let i=W.labelKey??`tool.${W.type}`;return jsx("button",{type:"button",className:`drawui-toolbar-shape-item ${e===W.type?"active":""}`,onClick:()=>{n(W.type),Z(false),y();},onMouseEnter:T=>Ee(T.currentTarget,i),onMouseLeave:y,"aria-label":t(i),children:jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:wn.get(W.type)})},`${u.key}-${W.type}`)})})]},u.key))})})]}),jsxs("div",{className:"drawui-toolbar-dropdown",onMouseEnter:q,onMouseLeave:ne,children:[jsxs("button",{className:`drawui-toolbar-button ${e==="sticky-note"?"active":""}`,onClick:()=>{n("sticky-note"),ee(false),y();},"data-drawui-tip":j?void 0:t("tool.sticky-note"),children:[jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:xn}),jsx("span",{className:"drawui-toolbar-color-chip",style:{background:M}})]}),j&&jsxs("div",{className:"drawui-toolbar-shape-grid drawui-sticky-panel",children:[jsxs("div",{className:"drawui-sticky-panel-head",children:[jsx("span",{className:"drawui-sticky-panel-title",children:t("tool.sticky-note")}),jsx("span",{className:"drawui-sticky-panel-key",children:"N"})]}),jsx("div",{className:"drawui-sticky-panel-grid",children:STICKY_NOTE_COLORS.map(u=>jsx("button",{type:"button","aria-label":u,className:`drawui-sticky-swatch${M.toLowerCase()===u.toLowerCase()?" active":""}`,style:{background:u},onClick:()=>Ie(u)},u))})]})]}),jsxs("div",{className:"drawui-toolbar-dropdown",children:[jsx("button",{className:`drawui-toolbar-button ${xe?"active":""}`,"data-icon-toggle":"","data-drawui-tip":xe?void 0:t("toolbar.icon"),onClick:()=>{B(u=>!u),y();},children:jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[jsx("circle",{cx:"12",cy:"12",r:"9"}),jsx("path",{d:"M8.5 10.2h0.01"}),jsx("path",{d:"M15.5 10.2h0.01"}),jsx("path",{d:"M8.8 14.2c0.9 1 2 1.5 3.2 1.5s2.3 -0.5 3.2 -1.5"})]})}),xe&&jsx(vo,{onPick:u=>K?.(u.id),onClose:()=>B(false)})]}),jsx("div",{className:"drawui-toolbar-divider"}),jsxs("div",{className:"drawui-toolbar-dropdown",onMouseEnter:Ye,onMouseLeave:je,children:[jsx("button",{className:`drawui-toolbar-button ${e==="arrow"?"active":""}`,onClick:()=>{n("arrow"),w(false),y();},"data-drawui-tip":s?void 0:t("toolbar.arrow"),children:jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:jsx("path",{d:"M5 12h14M12 5l7 7-7 7"})})}),s&&jsx("div",{className:"drawui-toolbar-shape-grid drawui-arrow-menu",onPointerDown:u=>{u.target.closest("button")||(w(false),y());},children:jsx(xt,{connectionType:d?.connectionType??"straight",arrowHead:d?.arrowHead??"end",dashed:!!d?.dashed,onConnectionTypeChange:u=>{E?.({connectionType:u}),n("arrow"),w(false),y();},onArrowStyleChange:u=>{E?.({arrowHead:u.arrowHead,dashed:u.dashed}),n("arrow"),w(false),y();},onOptionHover:(u,W)=>Ee(W,u),onOptionLeave:y})})]}),kn.filter(u=>u.type!=="arrow").map(u=>jsx("button",{className:`drawui-toolbar-button ${e===u.type?"active":""}`,onClick:()=>n(u.type),"data-drawui-tip":t(u.labelKey),children:jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:jsx("path",{d:u.icon})})},u.type)),jsx("div",{className:"drawui-toolbar-divider"}),jsx("button",{className:`drawui-toolbar-button ${e==="pen"?"active":""}`,onClick:()=>n("pen"),"data-drawui-tip":t("toolbar.pen"),children:jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:jsx("path",{d:Cn})})}),jsxs("div",{className:"drawui-toolbar-dropdown",onMouseEnter:$,onMouseLeave:P,children:[jsxs("button",{className:`drawui-toolbar-button ${e==="highlighter"?"active":""}`,onClick:()=>n("highlighter"),onMouseEnter:u=>Ee(u.currentTarget,"toolbar.highlighter"),onMouseLeave:y,children:[jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",strokeLinejoin:"round",children:[jsx("path",{d:"M4.6 19.6 12.8 11.4",strokeWidth:"3.6",strokeLinecap:"square"}),jsx("path",{d:"M14.6 9.6 16.2 8",strokeWidth:"3.6",strokeLinecap:"square"}),jsxs("g",{fill:"currentColor",stroke:"none",children:[jsx("path",{d:Zt,transform:"translate(7.4 5.4) scale(2.4)"}),jsx("path",{d:Zt,transform:"translate(18.4 3.4) scale(2.5)"}),jsx("path",{d:Zt,transform:"translate(21 10.6) scale(2.2)"})]})]}),jsx("span",{className:"drawui-toolbar-color-chip",style:{background:H}})]}),Q&&jsx("div",{className:"drawui-toolbar-shape-grid drawui-toolbar-highlighter-grid",children:so.map(u=>jsx("button",{type:"button","aria-label":u,className:`drawui-highlighter-swatch${H.toLowerCase()===u.toLowerCase()?" active":""}`,style:{background:u},onClick:()=>D(u)},u))})]}),jsx("div",{className:"drawui-toolbar-divider"}),Mn.map(u=>jsx("button",{className:`drawui-toolbar-button ${e===u.type?"active":""}`,onClick:()=>n(u.type),"data-drawui-tip":t(u.labelKey),children:jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:jsx("path",{d:u.icon})})},u.type)),jsx("button",{className:`drawui-toolbar-button ${e==="mind-map"?"active":""}`,onClick:()=>n("mind-map"),"data-drawui-tip":t("toolbar.mind-map"),children:jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[jsx("circle",{cx:"5",cy:"12",r:"2.4"}),jsx("path",{d:"M7.4 12h3.6"}),jsx("path",{d:"M11 12c0-2.6 1.6-4.4 3.4-4.4"}),jsx("path",{d:"M11 12c0 2.6 1.6 4.4 3.4 4.4"}),jsx("circle",{cx:"17.4",cy:"7.6",r:"1.7"}),jsx("circle",{cx:"17.4",cy:"16.4",r:"1.7"}),jsx("circle",{cx:"15.6",cy:"12",r:"1.7"})]})}),jsxs("div",{className:"drawui-toolbar-dropdown",children:[jsx("button",{className:`drawui-toolbar-button ${Re?"active":""}`,onClick:()=>ye(u=>!u),"data-drawui-tip":t("toolbar.table"),"data-table-toggle":true,children:jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinejoin:"round",children:[jsx("rect",{x:"3",y:"4",width:"18",height:"16",rx:"2"}),jsx("line",{x1:"3",y1:"9.3",x2:"21",y2:"9.3"}),jsx("line",{x1:"9",y1:"4",x2:"9",y2:"20"}),jsx("line",{x1:"15",y1:"4",x2:"15",y2:"20"})]})}),Re&&jsxs("div",{className:"drawui-table-picker",children:[jsx("div",{className:"drawui-table-picker-hint",children:se?`${se.rows} \xD7 ${se.cols}`:t("table.pickHint")}),jsx("div",{className:"drawui-table-picker-grid",children:Array.from({length:Sn*Ut},(u,W)=>{let i=Math.floor(W/Ut),T=W%Ut,f=se&&i<se.rows&&T<se.cols;return jsx("button",{type:"button","aria-label":`${i+1}x${T+1}`,className:"drawui-table-picker-cell",style:f?{borderColor:"var(--dw-primary)",background:"var(--dw-primary-weak)"}:void 0,onMouseEnter:()=>Te({rows:i+1,cols:T+1}),onClick:()=>{I?.(i+1,T+1),ye(false),Te(null),y();}},W)})})]})]}),jsx("div",{className:"drawui-toolbar-divider"}),jsx("button",{className:`drawui-toolbar-button ${r?"active":""}`,onClick:h,"data-drawui-tip":t("toolbar.grid"),children:jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsx("rect",{x:"3",y:"3",width:"7",height:"7",rx:"1"}),jsx("rect",{x:"14",y:"3",width:"7",height:"7",rx:"1"}),jsx("rect",{x:"14",y:"14",width:"7",height:"7",rx:"1"}),jsx("rect",{x:"3",y:"14",width:"7",height:"7",rx:"1"})]})}),jsx("div",{className:"drawui-toolbar-divider"}),jsx("button",{className:"drawui-toolbar-button",onClick:l,disabled:!c,style:c?void 0:{opacity:.4,cursor:"default"},"data-drawui-tip":t("toolbar.undo"),children:jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsx("path",{d:"M3 7v6h6"}),jsx("path",{d:"M21 17a9 9 0 0 0-9-9 9 9 0 0 0-6 2.3L3 13"})]})}),jsx("button",{className:"drawui-toolbar-button",onClick:S,disabled:!a,style:a?void 0:{opacity:.4,cursor:"default"},"data-drawui-tip":t("toolbar.redo"),children:jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsx("path",{d:"M21 7v6h-6"}),jsx("path",{d:"M3 17a9 9 0 0 1 9-9 9 9 0 0 1 6 2.3L21 13"})]})}),jsx("div",{className:"drawui-toolbar-divider"}),jsxs("div",{className:"drawui-toolbar-dropdown",onMouseEnter:oe,onMouseLeave:le,children:[jsx("button",{className:"drawui-toolbar-button","data-drawui-tip":z?void 0:t("toolbar.export"),children:jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsx("path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"}),jsx("polyline",{points:"7 10 12 15 17 10"}),jsx("line",{x1:"12",y1:"15",x2:"12",y2:"3"})]})}),z&&jsxs("div",{className:"drawui-toolbar-shape-grid drawui-toolbar-export-grid",children:[pe.map(u=>jsx("button",{className:"drawui-toolbar-shape-item drawui-toolbar-export-item",onClick:()=>{g?.(u.format),_(false);},"data-drawui-tip":t(u.labelKey),children:t(u.labelKey)},u.format)),jsx("div",{className:"drawui-toolbar-export-divider"}),jsx("button",{className:"drawui-toolbar-shape-item drawui-toolbar-export-item",onClick:()=>{p?.(),_(false);},"data-drawui-tip":t("toolbar.export.data"),children:t("toolbar.export.data")}),jsx("button",{className:"drawui-toolbar-shape-item drawui-toolbar-export-item",onClick:He,"data-drawui-tip":t("toolbar.import.data"),children:t("toolbar.import.data")})]})]}),jsx("input",{ref:X,type:"file",accept:".json,application/json",style:{display:"none"},onChange:me}),m&&jsx("div",{className:`drawui-shape-tip ${m.above?"is-above":"is-below"}`,style:{left:m.x,top:m.y},children:t(m.label)})]})})});var Vt=memo(function({onZoomIn:e,onZoomOut:n,onReset:r,zoomLevel:h=100}){return U(),jsxs("div",{className:"drawui-zoom-control",children:[jsx("button",{className:"drawui-zoom-button",onClick:e,"data-drawui-tip":t("zoom.in"),children:jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsx("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"})]})}),jsxs("div",{className:"drawui-zoom-level",children:[h,"%"]}),jsx("button",{className:"drawui-zoom-button",onClick:n,"data-drawui-tip":t("zoom.out"),children:jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:jsx("line",{x1:"12",y1:"5",x2:"12",y2:"19"})})}),jsx("button",{className:"drawui-zoom-button",onClick:r,"data-drawui-tip":t("zoom.reset"),children:jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsx("path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8"}),jsx("path",{d:"M3 3v5h5"})]})})]})});var Lo=["#ffffff","#f1f5f9","#e2e8f0","#ede9fe","#dbeafe","#e0e7ff","#dcfce7","#fef9c3","#fee2e2"],No=["#0f172a","#475569","#94a3b8","#8b5cf6","#3b82f6","#1d4ed8","#16a34a","#eab308","#dc2626"],Hn=Lo.filter(o=>o!=="#f1f5f9"),Pn=[...Hn,...No],An=[...Lo,...No],Eo=15,Io="drawui:customColors";function Kn(){if(typeof window>"u")return [];try{let o=window.localStorage.getItem(Io);if(!o)return [];let e=JSON.parse(o);return Array.isArray(e)?e.filter(n=>typeof n=="string").slice(-Eo):[]}catch{return []}}function On(o){if(!(typeof window>"u"))try{window.localStorage.setItem(Io,JSON.stringify(o));}catch{}}var Yt=[{key:"fill",labelKey:"style.fill",hasTransparent:true,hasOpacity:true},{key:"stroke",labelKey:"style.stroke",hasTransparent:false,hasOpacity:true},{key:"text",labelKey:"style.text",hasTransparent:false},{key:"highlight",labelKey:"style.highlight",hasTransparent:true,hasOpacity:true}],To=(o,e)=>!!o&&!!e&&o.toLowerCase()===e.toLowerCase(),pt=10,qe=12,Ve=o=>!o||o==="transparent",Ro=memo(function({editor:e,selectedCount:n,hasLineSelection:r,currentConnectionType:h,currentArrowHead:c,currentDashed:a}){U();let l=!!e?.getEditingShapeId(),[S,g]=useState(null),[p,b]=useState(null),[,x]=useState(0),N=useRef(null),K=useRef(null),I=useRef(null),[d,E]=useState({tw:168,th:42,pw:228,ph:160}),[C,Z]=useState(Kn),s=useRef(null),w=useCallback(i=>{let T=i.trim().toLowerCase();/^#[0-9a-f]{6}$/.test(T)&&Z(f=>{let k=f.filter(ce=>ce!==T);for(k.push(T);k.length>Eo;)k.shift();return On(k),k});},[]);if(useEffect(()=>{let i=s.current;if(!i)return;let T=()=>{i.value&&w(i.value);};return i.addEventListener("change",T),()=>i.removeEventListener("change",T)},[w,p]),useEffect(()=>{if(!e)return;let i=e.subscribe(()=>x(T=>(T+1)%1e6));return ()=>{i();}},[e]),useEffect(()=>{b(null);},[n,l]),useEffect(()=>{if(!p)return;let i=T=>{N.current&&!N.current.contains(T.target)&&b(null);};return document.addEventListener("pointerdown",i,true),()=>document.removeEventListener("pointerdown",i,true)},[p]),useLayoutEffect(()=>{let i=K.current?.offsetWidth??d.tw,T=K.current?.offsetHeight??d.th,f=I.current?.offsetWidth??d.pw,k=I.current?.offsetHeight??d.ph;E(ce=>ce.tw===i&&ce.th===T&&ce.pw===f&&ce.ph===k?ce:{tw:i,th:T,pw:f,ph:k});}),!e||n===0||l)return null;let m=e.getSelectedIds(),z=e.getShapes().filter(i=>m.includes(i.id)),_=z[0],Q=_?.id??"",F=_?.style.fillColor,H=_?.style.strokeColor??"#1f2937",Y=_?.textColor??"#1f2937",j=_?.highlightColor,ee={fill:F,stroke:H,text:Y,highlight:j},M=z.length>0&&z.every(i=>i.type==="sticky-note"),ue={fill:_?.style.fillOpacity??1,stroke:_?.style.strokeOpacity??1,highlight:_?.highlightOpacity??1},xe=i=>S&&S.key===`${Q}:${i}`?S.value:ue[i]??1,B=(i,T)=>{switch(i){case "stroke":e.updateSelectedShapesStyle({strokeColor:T});break;case "fill":e.updateSelectedShapesStyle({fillColor:T});break;case "text":e.updateSelectedShapesText({textColor:T});break;case "highlight":e.updateSelectedShapesText({highlightColor:T});break}},Re=(i,T)=>{g({key:`${Q}:${i}`,value:T}),i==="highlight"?e.updateSelectedShapesText({highlightOpacity:T}):i==="stroke"?e.updateSelectedShapesStyle({strokeOpacity:T}):e.updateSelectedShapesStyle({fillOpacity:T});},ye=i=>e.updateConnectionType(i),se=i=>e.updateArrowStyle({arrowHead:i.arrowHead,dashed:i.dashed}),Te=!!r&&z.length>0&&z.every(i=>i.type==="line"||i.type==="arrow"),ke=z.length>0&&z.every(i=>i.type==="text"),Ne=z.length>0&&z.every(i=>i.type==="sticky-note"||i.type==="icon"),fe=Te?Yt.filter(i=>i.key==="stroke"):Ne?Yt.filter(i=>i.key!=="stroke"):Yt,O=i=>i.key==="stroke"&&Te?"style.line":i.labelKey,v=p&&p!=="more"?fe.find(i=>i.key===p):void 0,pe=!!p&&(p==="more"||p==="prefix"||!!v),oe=M&&v?.key==="fill",le=e.getCamera(),X=getContentBounds(z,0),He=le.pageToScreen({x:X.x,y:X.y}),me=le.pageToScreen({x:X.x+X.width,y:X.y+X.height}),We=window.innerWidth,Ue=window.innerHeight,Ye=me.y+pt,je=He.y-pt,Ee=d.th+(pe?pt+d.ph:0),y=Ye+Ee<=Ue-qe,$=je-Ee>=qe,P=y||!$,D=(He.x+me.x)/2,q=(i,T,f)=>Math.max(T,Math.min(i,Math.max(T,f))),ne=q(D-d.tw/2,qe,We-d.tw-qe),Ie=P?Ye:je-d.th,u=q(D-d.pw/2,qe,We-d.pw-qe),W=pe?q(P?Ie+d.th+pt:Ie-pt-d.ph,qe,Ue-d.ph-qe):0;return jsxs("div",{className:"drawui-style-floating",ref:N,children:[jsxs("div",{className:"drawui-style-toolbar",ref:K,style:{left:ne,top:Ie},children:[fe.map(i=>jsxs("button",{className:`drawui-style-tool-btn${p===i.key?" active":""}`,onClick:()=>b(p===i.key?null:i.key),"data-drawui-tip":t(O(i)),type:"button",children:[i.key==="fill"&&jsx("span",{className:`drawui-st-swatch${Ve(F)?" drawui-st-none":""}`,style:Ve(F)?void 0:{background:F}}),i.key==="stroke"&&(Te?jsx("span",{className:`drawui-st-line${Ve(H)?" drawui-st-line-none":""}`,style:Ve(H)?void 0:{background:H}}):jsx("span",{className:`drawui-st-frame${Ve(H)?" drawui-st-frame-none":""}`,style:Ve(H)?void 0:{borderColor:H}})),i.key==="text"&&jsx("span",{className:"drawui-st-text",style:{color:Y},children:"A"}),i.key==="highlight"&&jsx("span",{className:`drawui-st-hl${Ve(j)?" drawui-st-none":""}`,style:Ve(j)?void 0:{background:j},children:"A"})]},i.key)),r&&jsx("button",{className:`drawui-style-tool-btn${p==="more"?" active":""}`,onClick:()=>b(p==="more"?null:"more"),"data-drawui-tip":t("style.connection"),type:"button",children:"\u22EF"}),ke&&jsx("button",{className:`drawui-style-tool-btn${p==="prefix"?" active":""}`,onClick:()=>b(p==="prefix"?null:"prefix"),"data-drawui-tip":t("style.prefix"),type:"button",children:jsxs("svg",{viewBox:"0 0 24 24",width:"18",height:"18",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",children:[jsx("circle",{cx:"5",cy:"8",r:"1.7",fill:"currentColor",stroke:"none"}),jsx("circle",{cx:"5",cy:"16",r:"1.7",fill:"currentColor",stroke:"none"}),jsx("line",{x1:"10.5",y1:"8",x2:"20",y2:"8"}),jsx("line",{x1:"10.5",y1:"16",x2:"20",y2:"16"})]})})]}),pe&&jsx("div",{className:"drawui-style-popover",ref:I,style:{left:u,top:W},children:p==="prefix"?jsxs(Fragment,{children:[jsx("div",{className:"drawui-style-popover-title",children:t("style.prefix")}),jsx("div",{className:"drawui-muted-hint",children:t("style.prefix.soon")})]}):v?jsxs(Fragment,{children:[jsx("div",{className:"drawui-style-popover-title",children:t(O(v))}),jsxs("div",{className:"drawui-color-row",children:[v.hasTransparent&&!oe&&jsx("button",{className:`drawui-color-swatch drawui-color-swatch-transparent${Ve(ee[v.key])?" active":""}`,onClick:()=>B(v.key,"transparent"),"aria-label":t("style.none"),type:"button"}),(oe?STICKY_NOTE_COLORS:v.hasTransparent?Pn:An).map(i=>jsx("button",{className:`drawui-color-swatch${To(i,ee[v.key])?" active":""}`,style:{background:i},onClick:()=>B(v.key,i),"aria-label":i,type:"button"},i)),C.map(i=>jsx("button",{className:`drawui-color-swatch drawui-color-custom${To(i,ee[v.key])?" active":""}`,style:{background:i},onClick:()=>B(v.key,i),"aria-label":i,type:"button"},`custom-${i}`)),jsxs("span",{className:"drawui-color-swatch drawui-color-add","data-drawui-tip":t("style.addColor"),children:["+",jsx("input",{ref:s,type:"color",defaultValue:"#3b82f6",className:"drawui-color-add-input","aria-label":t("style.addColor")})]})]}),v.hasOpacity&&jsxs("div",{className:"drawui-opacity-row",children:[jsx("span",{className:"drawui-opacity-label",children:t("style.opacity")}),jsx("input",{type:"range",min:0,max:100,value:Math.round(xe(v.key)*100),onChange:i=>Re(v.key,Number(i.target.value)/100),className:"drawui-opacity-slider"}),jsxs("span",{className:"drawui-opacity-value",children:[Math.round(xe(v.key)*100),"%"]})]})]}):jsx(Fragment,{children:jsx(xt,{connectionType:h??"straight",arrowHead:c??"end",dashed:!!a,onConnectionTypeChange:ye,onArrowStyleChange:se})})})]})});var qt=14,Ao=20,Un=["#1f2937","#ef4444","#f97316","#facc15","#22c55e","#3b82f6","#8b5cf6","#ec4899","#9ca3af"],Zn=[12,14,16,18,20,24];function Ko(o,e,n){let r=o,h="",c=r.charAt(0);if(r.length>1&&(c==="+"||c==="-"||c==="#"||c==="~")&&r.charAt(1)===" "&&(h=c,r=r.slice(2)),r=r.replace(/^\s+|\s+$/g,""),e==="attribute"){let b=r.indexOf(":");return b===-1?{visibility:h,name:r,type:"",params:"",returnType:""}:{visibility:h,name:r.slice(0,b).replace(/^\s+|\s+$/g,""),type:r.slice(b+1).replace(/^\s+|\s+$/g,""),params:"",returnType:""}}let a=r.indexOf("(");if(a===-1){let b=r.lastIndexOf(":");return b===-1?{visibility:h,name:r,type:"",params:"",returnType:""}:{visibility:h,name:r.slice(0,b).replace(/^\s+|\s+$/g,""),type:"",params:"",returnType:r.slice(b+1).replace(/^\s+|\s+$/g,"")}}let l=r.slice(0,a).replace(/^\s+|\s+$/g,""),S=r.indexOf(")",a);if(S===-1)return {visibility:h,name:l,type:"",params:r.slice(a+1).replace(/^\s+|\s+$/g,""),returnType:""};let g=r.slice(a+1,S).replace(/^\s+|\s+$/g,""),p=r.slice(S+1).replace(/^\s+|\s+$/g,"");return p.startsWith(":")&&(p=p.slice(1).replace(/^\s+|\s+$/g,"")),{visibility:h,name:l,type:"",params:g,returnType:p}}function Gn(o,e){let n=e.visibility?`${e.visibility} `:"";return o==="attribute"?`${n}${e.name}${e.type?`: ${e.type}`:""}`:`${n}${e.name}(${e.params??""})${e.returnType?`: ${e.returnType}`:""}`}var $o=memo(function({editor:e,umlClass:n,editing:r}){let[,h]=useState(0);U(),useEffect(()=>{if(!e)return;let y=e.subscribe(()=>h($=>$+1));return ()=>{y();}},[e]);let[c,a]=useState(null),[l,S]=useState(false),[g,p]=useState(null),b=useRef(null),x=useRef(null),N=useCallback((y,$)=>{b.current&&(clearTimeout(b.current),b.current=null),a({section:y,rowId:$}),S(false);},[]),K=useCallback(()=>{b.current&&clearTimeout(b.current),b.current=window.setTimeout(()=>{a(null),S(false);},150);},[]);if(!e||!n||r!==n.id)return null;let I=e.getCamera(),{id:d,x:E,y:C,width:Z,height:s,className:w,methods:m}=n,G=n.type==="uml-interface",z=G?[]:n.attributes,_=Z/2,Q=s/2,F=UML_HEADER_HEIGHT,H=UML_LINE_HEIGHT,Y=UML_PADDING_X,j=UML_PADDING_Y,ee=G?0:z.length>0?z.length*H+j*2:j*2,M=I.zoom,ue=(Z-Y*2)*M,xe=4*M,B=I.pageToScreen({x:E-_+Y,y:C}),Re=I.pageToScreen({x:E,y:C-Q+F/2}),ye=y=>I.pageToScreen({x:E,y}).y,se=H*M,Te=y=>C+(-Q+F+j+H/2+y*H),ke=y=>C+(-Q+F+ee+j+H/2+y*H),Ne=C+(-Q+F+ee),fe=C+Q,O={background:"#ffffff",borderWidth:1,borderStyle:"solid",borderColor:"transparent",outline:"none",padding:0,fontFamily:"sans-serif",boxSizing:"border-box"},v=(y,$)=>{let P=z.find(q=>q.id===y);if(!P)return;let D=Ko($,"attribute",P.visibility);e.updateUmlClass(d,{attributes:z.map(q=>q.id===y?{...q,...D}:q)});},pe=(y,$)=>{let P=m.find(ne=>ne.id===y);if(!P)return;let D=Ko($,"method",P.visibility),q=m.map(ne=>ne.id===y?{...ne,...D}:ne);G?e.updateUmlInterface(d,{methods:q}):e.updateUmlClass(d,{methods:q});},oe=(y,$,P)=>{x.current={section:y,from:$},P.dataTransfer.effectAllowed="move",P.dataTransfer.setData("text/plain",`${y}:${$}`);},le=y=>{y.preventDefault(),y.dataTransfer.dropEffect="move";},X=(y,$,P)=>{P.preventDefault();let D=x.current;!D||D.section!==y||(y==="attribute"?e.reorderUmlAttribute(d,D.from,$):e.reorderUmlMethod(d,D.from,$),x.current=null);},He=(y,$,P,D)=>{let q=ye(D),ne=c?.section===y&&c.rowId===P.id,Ie=(P.fontSize||UML_FONT_SIZE)*M,u=P.textColor||"#1f2937",W={position:"absolute",left:B.x-qt*M-xe,top:q-se/2,width:qt*M+xe+ue+Ao*M,height:se,display:"flex",alignItems:"center",gap:2,pointerEvents:"none",zIndex:53},i={...O,width:ue,height:se-2,fontSize:Ie,color:u,textDecoration:P.strikethrough?"line-through":"none",pointerEvents:"auto",...ne?{borderColor:"var(--dw-primary)"}:{}},T={width:qt*M,height:se-2,cursor:"grab",color:"#9ca3af",display:"flex",alignItems:"center",justifyContent:"center",userSelect:"none",fontSize:12*M,lineHeight:1,opacity:ne?1:.55,pointerEvents:"auto"},f={width:Ao*M,height:se-6,border:"none",background:"transparent",color:"#9ca3af",cursor:"pointer",borderRadius:3,fontSize:14*M,opacity:ne?1:.35,pointerEvents:"auto"};return jsxs("div",{style:W,onDragOver:le,onDrop:k=>X(y,$,k),children:[jsx("span",{style:T,draggable:true,onDragStart:k=>oe(y,$,k),"data-drawui-tip":t("uml.drag"),children:"\u22EE\u22EE"}),jsx("input",{style:i,value:g&&g.rowId===P.id?g.text:Gn(y,P),onChange:k=>{p({rowId:P.id,text:k.target.value}),y==="attribute"?v(P.id,k.target.value):pe(P.id,k.target.value);},onFocus:()=>N(y,P.id),onBlur:()=>{p(null),K();},spellCheck:false}),jsx("button",{style:f,onMouseDown:k=>k.preventDefault(),onClick:()=>{y==="attribute"?e.removeUmlAttribute(d,P.id):e.removeUmlMethod(d,P.id);},"data-drawui-tip":t("uml.delete"),children:"\xD7"})]},P.id)},me=(y,$,P)=>{let D=ye($),q=y==="attribute";return jsxs("button",{onMouseDown:ne=>ne.preventDefault(),onClick:()=>q?e.addUmlAttribute(d):e.addUmlMethod(d),className:"drawui-uml-add-row",style:{position:"absolute",left:B.x,top:D-9*M,height:18*M,padding:`0 ${6*M}px`,fontSize:11*M,lineHeight:1,border:"1px dashed #cbd5e1",background:"rgba(255,255,255,0.85)",color:"#64748b",borderRadius:3,cursor:"pointer",pointerEvents:"auto",display:"flex",alignItems:"center",gap:3,whiteSpace:"nowrap",zIndex:53},"data-drawui-tip":P,children:[jsx("span",{style:{fontSize:13*M,lineHeight:1},children:"+"}),jsx("span",{children:P})]},`add-${y}`)},We=()=>{if(!c||c.section==="className")return null;let y=c.section,$=c.rowId,D=(y==="attribute"?z:m).find(R=>R.id===$);if(!D)return null;let q=224*M,ne=30*M,Ie=I.pageToScreen({x:E,y:C}).x,u=I.pageToScreen({x:E,y:C-Q}).y,W=20*M,i=u-ne-W,T=Ie-q/2,f=i+ne,k=D.textColor||"#1f2937",ce=D.fontSize||UML_FONT_SIZE,Pe=!!D.strikethrough;return jsxs(Fragment,{children:[jsx("div",{style:{position:"absolute",left:Ie-.5,top:f,width:1,height:W,background:"#d1d5db",pointerEvents:"none",zIndex:59}}),jsxs("div",{className:"drawui-uml-toolbar",style:{position:"absolute",left:T,top:i,width:q,height:ne,background:"#ffffff",border:"1px solid #e5e7eb",borderRadius:6,boxShadow:"0 4px 12px rgba(0, 0, 0, 0.1)",display:"flex",alignItems:"center",gap:4*M,padding:`0 ${6*M}px`,pointerEvents:"auto",zIndex:60,fontSize:12*M},onMouseDown:R=>R.preventDefault(),children:[jsxs("div",{style:{position:"relative"},children:[jsxs("button",{onClick:()=>S(R=>!R),className:"drawui-uml-toolbar-btn","data-drawui-tip":t("uml.textColor"),style:{border:"none",background:"transparent",cursor:"pointer",padding:2,display:"flex",alignItems:"center",borderRadius:3},children:[jsx("span",{style:{fontWeight:700,color:k,fontSize:13*M,textDecoration:Pe?"line-through":"none"},children:"A"}),jsx("span",{style:{width:10*M,height:2*M,background:k,marginLeft:3,borderRadius:1}})]}),l&&jsxs("div",{style:{position:"absolute",top:"100%",left:0,marginTop:4,background:"#ffffff",border:"1px solid #e5e7eb",borderRadius:4,padding:4,display:"flex",gap:2,boxShadow:"0 2px 8px rgba(0, 0, 0, 0.1)",zIndex:61},children:[jsx("button",{onClick:()=>{e.updateUmlRowStyle(d,y,D.id,{textColor:null}),S(false);},style:{width:14,height:14,border:"1px solid #e5e7eb",background:"transparent",cursor:"pointer",borderRadius:2},"data-drawui-tip":t("uml.defaultColor")}),Un.map(R=>jsx("button",{onClick:()=>{e.updateUmlRowStyle(d,y,D.id,{textColor:R}),S(false);},style:{width:14,height:14,border:"none",background:R,cursor:"pointer",borderRadius:2},"data-drawui-tip":R},R))]})]}),jsx("select",{value:ce,onChange:R=>e.updateUmlRowStyle(d,y,D.id,{fontSize:Number(R.target.value)}),style:{border:"1px solid #e5e7eb",borderRadius:3,padding:`0 ${2*M}px`,fontSize:12*M,height:20*M,background:"#ffffff"},"data-drawui-tip":t("uml.fontSize"),children:Zn.map(R=>jsx("option",{value:R,children:R},R))}),jsx("button",{onClick:()=>e.updateUmlRowStyle(d,y,D.id,{strikethrough:!Pe}),className:"drawui-uml-toolbar-btn","data-drawui-tip":t("uml.strikethrough"),style:{border:"none",background:Pe?"var(--dw-primary-weak)":"transparent",cursor:"pointer",padding:2,borderRadius:3},children:jsx("span",{style:{fontWeight:700,fontSize:13*M,textDecoration:"line-through"},children:"A"})}),jsx("button",{onClick:()=>{y==="attribute"?e.removeUmlAttribute(d,D.id):e.removeUmlMethod(d,D.id),a(null);},className:"drawui-uml-toolbar-btn","data-drawui-tip":t("uml.delete"),style:{border:"none",background:"transparent",cursor:"pointer",color:"#ef4444",padding:2,marginLeft:"auto",borderRadius:3},children:jsxs("svg",{width:14*M,height:14*M,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsx("polyline",{points:"3 6 5 6 21 6"}),jsx("path",{d:"M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6"}),jsx("path",{d:"M10 11v6"}),jsx("path",{d:"M14 11v6"}),jsx("path",{d:"M9 6V4a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2"})]})})]})]})},Ue=I.pageToScreen({x:E-_,y:C}).x,Ye=I.pageToScreen({x:E,y:C-Q}).y,je=Z*M,Ee=s*M;return jsxs("div",{style:{position:"absolute",inset:0,pointerEvents:"none",zIndex:50},children:[jsx("div",{style:{position:"absolute",left:Ue+1,top:Ye+1,width:Math.max(0,je-2),height:Math.max(0,Ee-2),background:"#ffffff",pointerEvents:"none",zIndex:51}}),jsx("input",{style:{...O,position:"absolute",left:Re.x-ue/2,top:Re.y-F*M/2+2,width:ue,height:F*M-4,textAlign:"center",fontWeight:700,fontSize:(n.fontSize||UML_FONT_SIZE)*M,color:n.textColor||"#1f2937",pointerEvents:"auto",zIndex:52,...c?.section==="className"?{borderColor:"var(--dw-primary)"}:{}},value:w,onChange:y=>G?e.updateUmlInterface(d,{className:y.target.value}):e.updateUmlClass(d,{className:y.target.value}),onFocus:()=>N("className",""),onBlur:K,spellCheck:false}),!G&&jsxs(Fragment,{children:[z.map((y,$)=>He("attribute",$,y,Te($))),me("attribute",Ne,"\u5C5E\u6027")]}),m.map((y,$)=>He("method",$,y,ke($))),me("method",fe,t("uml.method")),We()]})});var _o=memo(function({editor:e,panelOpen:n,onOpenPanel:r}){let[,h]=useState(0);U(),useEffect(()=>{if(!e)return;let s=e.subscribe(()=>h(w=>w+1));return ()=>{s();}},[e]);let c=useRef(false),a=useRef(false),l=e?.getMindMapEditingShapeId()??null,S=e?.getMindMapSelectedNode()?.nodeId??"",g=l?`${l}\0${S}`:"";if(useEffect(()=>{c.current=false;},[g]),!e)return null;let p=e.getMindMapEditingShapeId();if(!p||n)return null;let b=e.getMindMapSelectedNode();if(!b||b.shapeId!==p)return null;let x=e.getMindMapNode(p,b.nodeId),N=e.getMindMapNodeScreenRect(p,b.nodeId);if(!x||!N)return null;let K=e.getCamera().getZoom(),I=MINDMAP_FONT_SIZE*K,d=Math.max(100,N.width+24),E=N.height+8,C={position:"absolute",left:N.x+N.width/2,top:N.y-4,transform:"translateX(-50%)",width:d,height:E,border:"1.5px solid var(--dw-primary, #3b82f6)",borderRadius:6,background:"#ffffff",boxShadow:"0 2px 10px rgba(0,0,0,0.15)",outline:"none",padding:`0 ${(x.icon?24:12)*K}px`,fontFamily:"sans-serif",fontSize:I,color:"#1f2937",boxSizing:"border-box",pointerEvents:"auto",zIndex:55},Z={position:"absolute",left:N.x+N.width+12,top:N.y+N.height/2-11,width:22,height:22,border:"1px solid #e5e7eb",background:"#ffffff",borderRadius:"50%",cursor:"pointer",color:"#6b7280",fontSize:13,lineHeight:1,display:"flex",alignItems:"center",justifyContent:"center",boxShadow:"0 1px 4px rgba(0,0,0,0.12)",pointerEvents:"auto",zIndex:55};return jsxs("div",{style:{position:"absolute",inset:0,pointerEvents:"none",zIndex:50},children:[jsx("input",{autoFocus:true,style:C,value:x.text,spellCheck:false,onChange:s=>{let w=!c.current;c.current=true,e.updateMindMapNode(p,b.nodeId,{text:s.target.value},w);},onBlur:()=>{if(a.current){a.current=false;return}e.exitMindMapEdit();},onKeyDown:s=>{s.key==="Enter"?s.target.blur():s.key==="Escape"&&e.exitMindMapEdit();}}),jsx("button",{style:Z,"data-drawui-tip":t("mindmap.more"),onMouseDown:s=>{s.preventDefault(),a.current=true,setTimeout(()=>{a.current=false;},300);},onClick:r,children:"\u22EF"})]})});var Zo=memo(function({editor:e,panelOpen:n}){let[,r]=useState(0);U(),useEffect(()=>{if(!e)return;let E=e.subscribe(()=>r(C=>C+1));return ()=>{E();}},[e]);let h=useRef(false),c=e?.getTableEditing()??null,a=c?`${c.shapeId}\0${c.row}\0${c.col}`:"";if(useEffect(()=>{h.current=false;},[a]),!e||n)return null;let l=e.getTableEditing();if(!l)return null;let{shapeId:S,row:g,col:p}=l,b=e.getTableCell(S,g,p),x=e.getTableScreenRect(S,g,p);if(!b||!x)return null;let N=e.getSelectedTable(),K=b.fontSize||N?.fontSize||TABLE_FONT_SIZE,I=e.getCamera().getZoom(),d={left:x.x-1,top:x.y-1,width:x.width+2,height:x.height+2,padding:`${TABLE_CELL_PADDING_Y*I}px ${TABLE_CELL_PADDING_X*I}px`,fontFamily:"sans-serif",fontSize:K*I,lineHeight:TABLE_LINE_HEIGHT_RATIO,fontWeight:b.bold?700:400,color:b.textColor||N?.textColor||"#1f2937",textAlign:b.align==="center"?"center":b.align==="right"?"right":"left"};return jsx("div",{style:{position:"absolute",inset:0,pointerEvents:"none",zIndex:50},children:jsx("textarea",{autoFocus:true,rows:1,className:"drawui-table-cell-input",style:d,value:b.text,spellCheck:false,onChange:E=>{let C=!h.current;h.current=true,e.updateTableCell(S,g,p,{text:E.target.value},C);},onBlur:()=>{e.exitTableEdit();},onKeyDown:E=>{(E.key==="Enter"||E.key==="Escape")&&(E.preventDefault(),E.target.blur());}})})});var Vo=memo(function({editor:e}){let[,n]=useState(0),[r,h]=useState(null),c=useRef(null);if(U(),useEffect(()=>{if(!e)return;let H=e.subscribe(()=>n(Y=>Y+1));return ()=>{H();}},[e]),useEffect(()=>{if(!r)return;let H=j=>{let ee=j.target;ee&&c.current?.contains(ee)||h(null);},Y=j=>{j.key==="Escape"&&h(null);};return window.addEventListener("pointerdown",H,true),window.addEventListener("keydown",Y),()=>{window.removeEventListener("pointerdown",H,true),window.removeEventListener("keydown",Y);}},[r]),!e)return null;let a=e.getSelectedTable();if(!a)return null;let l=e.getTableSelection();if(!l||l.shapeId!==a.id)return null;let S=e.getTableScreenRect(a.id);if(!S)return null;let g=a.cells.length,p=a.cells[0]?.length??0,b=tableExpandRangeToMerges(a,l.anchor.row,l.anchor.col,l.focus.row,l.focus.col),{r1:x,c1:N,r2:K,c2:I}=b,d=tableCoveredMap(a.cells),E=0;for(let H=x;H<=K;H++)for(let Y=N;Y<=I;Y++)d[H]?.[Y]||E++;let C=E>1,Z=tableRangeHasMerge(a,x,N,K,I),s=x===K?`${x+1}`:`${x+1}\u2013${K+1}`,w=N===I?`${N+1}`:`${N+1}\u2013${I+1}`,m=g-(K-x+1)>=1,G=p-(I-N+1)>=1,_=S.y>56?S.y-40:S.y+S.height+10,Q=H=>H.stopPropagation(),F=H=>()=>{H(),h(null);};return jsxs("div",{className:"drawui-table-toolbar","data-table-toolbar":a.id,style:{left:S.x+S.width/2,top:_},onPointerDown:Q,children:[jsxs("div",{className:"drawui-table-split",children:[jsx("button",{className:"drawui-table-btn-main",title:t("table.insertRowBelow"),onClick:()=>e.insertTableRowRelative(a.id,"below"),children:t("table.insertRow")}),jsx("button",{className:`drawui-table-btn-caret ${r==="row"?"active":""}`,"data-table-insert-row":true,title:`${t("table.insertRowAbove")} / ${t("table.insertRowBelow")}`,onClick:()=>h(r==="row"?null:"row"),children:jsx("svg",{viewBox:"0 0 10 10",width:"8",height:"8","aria-hidden":"true",children:jsx("path",{d:"M1 3l4 4 4-4",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})}),r==="row"&&jsxs("div",{className:"drawui-table-menu",ref:c,"data-table-row-menu":true,children:[jsx("button",{onClick:F(()=>e.insertTableRowRelative(a.id,"above")),children:t("table.insertRowAbove")}),jsx("button",{onClick:F(()=>e.insertTableRowRelative(a.id,"below")),children:t("table.insertRowBelow")})]})]}),jsx("button",{title:`${t("table.deleteRow")} \xB7 ${s}`,disabled:!m,onClick:()=>e.deleteTableRowsInSelection(a.id),children:t("table.deleteRow")}),jsxs("div",{className:"drawui-table-split",children:[jsx("button",{className:"drawui-table-btn-main",title:t("table.insertColRight"),onClick:()=>e.insertTableColumnRelative(a.id,"right"),children:t("table.insertCol")}),jsx("button",{className:`drawui-table-btn-caret ${r==="col"?"active":""}`,"data-table-insert-col":true,title:`${t("table.insertColLeft")} / ${t("table.insertColRight")}`,onClick:()=>h(r==="col"?null:"col"),children:jsx("svg",{viewBox:"0 0 10 10",width:"8",height:"8","aria-hidden":"true",children:jsx("path",{d:"M1 3l4 4 4-4",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})}),r==="col"&&jsxs("div",{className:"drawui-table-menu",ref:c,"data-table-col-menu":true,children:[jsx("button",{onClick:F(()=>e.insertTableColumnRelative(a.id,"left")),children:t("table.insertColLeft")}),jsx("button",{onClick:F(()=>e.insertTableColumnRelative(a.id,"right")),children:t("table.insertColRight")})]})]}),jsx("button",{title:`${t("table.deleteCol")} \xB7 ${w}`,disabled:!G,onClick:()=>e.deleteTableColsInSelection(a.id),children:t("table.deleteCol")}),jsx("button",{title:t("table.merge"),disabled:!C,onClick:()=>e.mergeTableCells(a.id),children:t("table.merge")}),jsx("button",{title:t("table.split"),disabled:!Z,onClick:()=>e.splitTableCells(a.id),children:t("table.split")})]})});var Yo=[...MINDMAP_COLORS,"#1f2937","#9ca3af"],jo=["\u{1F4A1}","\u2B50","\u{1F525}","\u{1F4CC}","\u2705","\u2757","\u26A0\uFE0F","\u{1F3F7}\uFE0F"],fr={position:"absolute",width:232,background:"rgba(255,255,255,0.96)",border:"1px solid #e5e7eb",borderRadius:8,boxShadow:"0 6px 20px rgba(0,0,0,0.12)",padding:"10px 12px",fontSize:12,color:"#1f2937",zIndex:70,boxSizing:"border-box",fontFamily:"sans-serif"},Jt={fontSize:11,color:"#6b7280",marginBottom:4,display:"block"},Tt={display:"flex",gap:4,alignItems:"center",flexWrap:"wrap"},Lt={border:"1px solid #e5e7eb",background:"#ffffff",borderRadius:5,padding:"3px 8px",fontSize:12,color:"#374151",cursor:"pointer",lineHeight:1.5},Qt={width:"100%",border:"1px solid #e5e7eb",borderRadius:5,padding:"4px 8px",fontSize:12,outline:"none",boxSizing:"border-box",background:"#ffffff",color:"#1f2937"},Xo=memo(function({editor:e,mindMap:n}){let[,r]=useState(0);U(),useEffect(()=>{if(!e)return;let s=e.subscribe(()=>r(w=>w+1));return ()=>{s();}},[e]);let h=useRef(null);if(!e||!n||e.getMindMapEditingShapeId()!==n.id)return null;let c=e.getMindMapSelectedNode();if(!c||c.shapeId!==n.id)return null;let a=s=>{if(s.id===c.nodeId)return s;for(let w of s.children??[]){let m=a(w);if(m)return m}return null},l=a(n.root);if(!l)return null;let S=e.getCamera(),p=layoutMindMap(n.root).positions.get(l.id);if(!p)return null;let b=S.zoom,x=S.pageToScreen({x:n.x+p.x,y:n.y+p.y}),N=x.x+p.width*b/2+14,K=x.y-80,d=Math.max(8,Math.min(N,(window.innerWidth||1024)-232-8)),E=Math.max(8,Math.min(K,(window.innerHeight||768)-320)),C=s=>{e.updateMindMapNode(n.id,l.id,s);},Z=!!l.id&&l.id!==n.root.id;return jsxs("div",{ref:h,style:{...fr,left:d,top:E},onMouseDown:s=>s.stopPropagation(),children:[jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:8},children:[jsx("span",{style:{fontWeight:600,fontSize:12},children:t("mindmap.nodeText")}),jsx("button",{onClick:()=>e.exitMindMapEdit(),"data-drawui-tip":t("mindmap.close"),style:{border:"none",background:"transparent",cursor:"pointer",color:"#9ca3af",fontSize:14,lineHeight:1,padding:2},children:"\xD7"})]}),jsx("input",{style:{...Qt,marginBottom:8},value:l.text,onChange:s=>C({text:s.target.value}),spellCheck:false}),jsxs("div",{style:{...Tt,marginBottom:10},children:[jsxs("button",{style:Lt,onClick:()=>e.addMindMapChild(n.id,l.id),children:["+ ",t("mindmap.addChild")]}),Z&&jsxs("button",{style:Lt,onClick:()=>e.addMindMapSibling(n.id,l.id),children:["+ ",t("mindmap.addSibling")]}),!!l.children?.length&&jsx("button",{style:Lt,onClick:()=>e.toggleMindMapCollapse(n.id,l.id),children:l.collapsed?t("mindmap.expand"):t("mindmap.collapse")}),jsx("button",{style:{...Lt,color:"#ef4444",borderColor:"#fecaca",marginLeft:"auto"},onClick:()=>e.deleteMindMapNode(n.id,l.id),children:t("mindmap.deleteNode")})]}),jsx("span",{style:Jt,children:t("mindmap.color")}),jsxs("div",{style:{...Tt,marginBottom:10},children:[jsx("button",{"data-drawui-tip":t("mindmap.levelColor"),onClick:()=>C({color:void 0}),style:{width:18,height:18,borderRadius:4,border:"1.5px solid #d1d5db",background:"conic-gradient(#ef4444, #f59e0b, #10b981, #3b82f6, #8b5cf6, #ec4899, #ef4444)",cursor:"pointer",flexShrink:0}}),Yo.map(s=>jsx("button",{"data-drawui-tip":s,onClick:()=>C({color:s}),style:{width:18,height:18,borderRadius:4,border:l.color===s?"2px solid #111827":"1px solid #d1d5db",background:s,cursor:"pointer",flexShrink:0}},s))]}),jsx("span",{style:Jt,children:t("mindmap.icon")}),jsxs("div",{style:{...Tt,marginBottom:10},children:[jsx("button",{"data-drawui-tip":t("mindmap.noIcon"),onClick:()=>C({icon:void 0}),style:{width:22,height:22,borderRadius:4,border:l.icon?"1px solid #d1d5db":"2px solid #111827",background:"#f9fafb",cursor:"pointer",fontSize:11,color:"#9ca3af",lineHeight:1},children:"\u2205"}),jo.map(s=>jsx("button",{onClick:()=>C({icon:s}),style:{width:22,height:22,borderRadius:4,border:l.icon===s?"2px solid #111827":"1px solid #d1d5db",background:"#f9fafb",cursor:"pointer",fontSize:13,lineHeight:1},children:s},s)),jsx("input",{placeholder:"\u270F\uFE0F",defaultValue:l.icon&&!jo.includes(l.icon)?l.icon:"",onKeyDown:s=>{if(s.key==="Enter"){let w=s.target.value.trim();C({icon:w||void 0});}},onBlur:s=>{let w=s.target.value.trim();w!==l.icon&&C({icon:w||void 0});},style:{...Qt,width:56,padding:"2px 4px",textAlign:"center"}})]}),jsx("span",{style:Jt,children:t("mindmap.note")}),jsx("input",{style:{...Qt,marginBottom:6},value:l.note??"",placeholder:t("mindmap.notePlaceholder"),onChange:s=>C({note:s.target.value||void 0}),spellCheck:false}),!!l.note&&jsxs("div",{style:{...Tt,marginTop:4},children:[jsx("span",{style:{fontSize:11,color:"#6b7280"},children:t("mindmap.noteColor")}),jsx("button",{"data-drawui-tip":t("mindmap.noteColorDefault"),onClick:()=>C({noteColor:void 0}),style:{width:16,height:16,borderRadius:3,border:l.noteColor?"1px solid #d1d5db":"2px solid #111827",background:"repeating-conic-gradient(#ef4444 0% 25%, #f59e0b 0% 50%, #10b981 0% 75%, #3b82f6 0% 100%)",cursor:"pointer"}}),Yo.map(s=>jsx("button",{onClick:()=>C({noteColor:s}),style:{width:16,height:16,borderRadius:3,border:l.noteColor===s?"2px solid #111827":"1px solid #d1d5db",background:s,cursor:"pointer"}},s))]})]})});var to=220,oo=140,vr="#fafafa";function xr(o,e){let n=Math.min(o.x,e.x),r=Math.min(o.y,e.y),h=Math.max(o.x+o.width,e.x+e.width),c=Math.max(o.y+o.height,e.y+e.height);return {x:n,y:r,width:h-n,height:c-r}}function kr(o){return {x:o.x+o.width/2,y:o.y+o.height/2}}function Cr(){return {x:0,y:0,width:0,height:0}}function Sr(o){let e=1/0,n=1/0,r=-1/0,h=-1/0,c=false;for(let a of o){let l=ro(a);l&&(c=true,l.x<e&&(e=l.x),l.y<n&&(n=l.y),l.x+l.width>r&&(r=l.x+l.width),l.y+l.height>h&&(h=l.y+l.height));}return c?{x:e,y:n,width:r-e,height:h-n}:null}function ro(o){switch(o.type){case "rectangle":case "sticky-note":case "icon":case "rounded-rectangle":case "ellipse":case "diamond":case "triangle":case "hexagon":case "parallelogram":case "trapezoid":case "pentagon":case "octagon":case "star":case "cylinder":case "cloud":case "heart":case "block-arrow-right":case "block-arrow-left":case "block-arrow-up":case "block-arrow-down":case "block-arrow-double":case "right-triangle":case "cross":case "speech-rect":case "speech-round":case "cube":case "sector":case "delay":case "predefined-process":case "document":case "stadium":case "class-catalog":case "chevron":case "brace-left":case "brace-right":case "envelope":case "checkbox":case "triangular-pyramid":case "quadrangular-pyramid":case "cuboid":case "sphere":case "ellipsoid":case "pie":case "hollow-pie":case "uml-class":case "uml-interface":case "mind-map":case "table":case "text":return {x:o.x-o.width/2,y:o.y-o.height/2,width:o.width,height:o.height};case "circle":return {x:o.x-o.radius,y:o.y-o.radius,width:o.radius*2,height:o.radius*2};case "line":case "arrow":{let e=o.points;if(!e||e.length===0)return null;let n=1/0,r=1/0,h=-1/0,c=-1/0;for(let a of e)a.x<n&&(n=a.x),a.y<r&&(r=a.y),a.x>h&&(h=a.x),a.y>c&&(c=a.y);return {x:n,y:r,width:h-n,height:c-r}}case "draw":{let e=o,n=e.width,r=e.height;if(typeof n=="number"&&typeof r=="number")return {x:e.x-n/2,y:e.y-r/2,width:n,height:r};let h=e.points;if(!h||h.length===0)return null;let c=1/0,a=1/0,l=-1/0,S=-1/0;for(let g of h){let p=g.x+e.x,b=g.y+e.y;p<c&&(c=p),b<a&&(a=b),p>l&&(l=p),b>S&&(S=b);}return {x:c,y:a,width:l-c,height:S-a}}default:return null}}function Mr(o){let e=o.getCamera(),n=e.screenToPage({x:0,y:0}),r=e.screenToPage({x:window.innerWidth,y:window.innerHeight});return {x:n.x,y:n.y,width:r.x-n.x,height:r.y-n.y}}function Tr(o,e,n){if(o.width<=0||o.height<=0)return {x:o.x-e/2,y:o.y-n/2,width:e,height:n};let r=e/n,h=o.width,c=h/r;c<o.height&&(c=o.height,h=c*r);let a=kr(o);return {x:a.x-h/2,y:a.y-c/2,width:h,height:c}}function no(o,e,n,r){let h=(o-n.left)/n.width,c=(e-n.top)/n.height;return {x:r.x+h*r.width,y:r.y+c*r.height}}var Qo=memo(function({editor:e}){let n=useRef(null),r=useRef(null),[h,c]=useState(false),[a,l]=useState(100),[S,g]=useState(false),[p,b]=useState(false);U();let x=useRef(null),N=useRef(null);useLayoutEffect(()=>{let s=n.current,w=r.current;if(!s||!w)return;let m=window.devicePixelRatio||1;s.width=Math.round(to*m),s.height=Math.round(oo*m),s.style.width=`${to}px`,s.style.height=`${oo}px`;},[h]);let K=useCallback(()=>{let s=n.current,w=r.current;if(!s||!w||!e)return;let m=s.getContext("2d");if(!m)return;let G=to,z=oo,_=s.width,Q=s.height,F=e.getShapes(),H=new Set(e.getSelectedIds()),Y=getTheme(),j=hexToRgba(Y.text,.16),ee=Y.primary,M=hexToRgba(Y.primary,.18),ue=hexToRgba(Y.primary,.85),xe=Sr(F),B=Mr(e),Re=xe?xr(xe,B):B.width>0?B:Cr(),ye=Tr(Re,G,z);N.current=ye;let se=_/ye.width,Te=Q/ye.height,ke=G/ye.width;m.setTransform(1,0,0,1,0,0),m.fillStyle=vr,m.fillRect(0,0,_,Q),m.setTransform(se,0,0,Te,-se*ye.x,-Te*ye.y),m.fillStyle=j;for(let O of F){let v=ro(O);v&&m.fillRect(v.x,v.y,v.width,v.height);}m.fillStyle=ee;for(let O of F){if(!H.has(O.id))continue;let v=ro(O);v&&m.fillRect(v.x,v.y,v.width,v.height);}m.fillStyle=M,m.fillRect(B.x,B.y,B.width,B.height);let Ne=1.5/ke;m.strokeStyle=ue,m.lineWidth=Ne,m.lineJoin="round";let fe=Math.min(B.width/6,B.height/6,6/ke);if(m.beginPath(),fe*ke<1)m.rect(B.x,B.y,B.width,B.height);else {let O=B.x,v=B.y,pe=B.width,oe=B.height,le=Math.min(fe,pe/2,oe/2);m.moveTo(O+le,v),m.lineTo(O+pe-le,v),m.quadraticCurveTo(O+pe,v,O+pe,v+le),m.lineTo(O+pe,v+oe-le),m.quadraticCurveTo(O+pe,v+oe,O+pe-le,v+oe),m.lineTo(O+le,v+oe),m.quadraticCurveTo(O,v+oe,O,v+oe-le),m.lineTo(O,v+le),m.quadraticCurveTo(O,v,O+le,v),m.closePath();}m.stroke(),m.setTransform(1,0,0,1,0,0);},[e]);useEffect(()=>{if(!e||h)return;K();let s=e.subscribe(K),w=subscribeTheme(K),m=()=>K();return window.addEventListener("resize",m),()=>{s(),w(),window.removeEventListener("resize",m);}},[e,h,K]),useEffect(()=>{if(!e)return;let s=()=>{let m=e.getCamera().getZoom();l(Math.round(m*100));};s();let w=e.subscribe(s);return ()=>{w();}},[e]);let I=useCallback((s,w)=>{if(!e)return;let m=e.getCamera(),G=m.getZoom(),z=window.innerWidth/2,_=window.innerHeight/2,Q=m;Q.x=z-s*G,Q.y=_-w*G,e.requestRender();},[e]),d=s=>{if(!e||!r.current||s.button!==0)return;let w=r.current.getBoundingClientRect(),m=N.current;if(!m)return;let G=no(s.clientX,s.clientY,w,m);x.current={pointerId:s.pointerId,rect:{left:w.left,top:w.top,width:w.width,height:w.height},canvasBox:m},s.currentTarget.setPointerCapture(s.pointerId),b(true),I(G.x,G.y);},E=s=>{if(!p||!e||!x.current||!r.current)return;let w=x.current,m=no(s.clientX,s.clientY,w.rect,w.canvasBox);I(m.x,m.y);},C=s=>{if(p){b(false),x.current=null;try{s.currentTarget.releasePointerCapture(s.pointerId);}catch{}}},Z=s=>{if(!e||!r.current)return;let w=N.current;if(!w)return;let m=r.current.getBoundingClientRect(),G=no(s.clientX,s.clientY,m,w);I(G.x,G.y);};return jsxs("div",{className:`drawui-minimap ${h?"collapsed":""}`,children:[jsx("button",{className:"drawui-minimap-toggle",onClick:()=>c(s=>!s),"data-drawui-tip":h?t("minimap.expand"):t("minimap.collapse"),"data-drawui-tip-pos":"top","aria-label":h?t("minimap.expand"):t("minimap.collapse"),children:jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:h?jsx("polyline",{points:"9 6 15 12 9 18"}):jsx("polyline",{points:"15 6 9 12 15 18"})})}),!h&&jsxs("div",{className:"drawui-minimap-panel",children:[jsxs("div",{className:"drawui-minimap-header",children:[jsx("span",{className:"drawui-minimap-title",children:t("minimap.title")}),jsxs("span",{className:"drawui-minimap-zoom",children:[a,"%"]})]}),jsx("div",{ref:r,className:"drawui-minimap-canvas-wrap",style:{cursor:p?"grabbing":S?"pointer":"default"},onPointerEnter:()=>g(true),onPointerLeave:()=>g(false),children:jsx("canvas",{ref:n,className:"drawui-minimap-canvas",onPointerDown:d,onPointerMove:E,onPointerUp:C,onPointerCancel:C,onDoubleClick:Z})})]})]})});var we=o=>jsx("svg",{viewBox:"0 0 24 24",width:"18",height:"18",className:"drawui-gen-shape-glyph",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round",children:o}),Er=[{type:"rectangle",labelKey:"shape.rectangle",glyph:we(jsx("rect",{x:"4",y:"7",width:"16",height:"10",rx:"1"}))},{type:"rounded-rectangle",labelKey:"shape.rounded-rectangle",glyph:we(jsx("rect",{x:"4",y:"7",width:"16",height:"10",rx:"4"}))},{type:"circle",labelKey:"shape.circle",glyph:we(jsx("circle",{cx:"12",cy:"12",r:"5.5"}))},{type:"ellipse",labelKey:"shape.ellipse",glyph:we(jsx("ellipse",{cx:"12",cy:"12",rx:"7",ry:"4.5"}))},{type:"diamond",labelKey:"shape.diamond",glyph:we(jsx("path",{d:"M12 5 L19 12 L12 19 L5 12 Z"}))},{type:"triangle",labelKey:"shape.triangle",glyph:we(jsx("path",{d:"M12 4 L20 19 H4 Z"}))},{type:"hexagon",labelKey:"shape.hexagon",glyph:we(jsx("path",{d:"M12 3 L19.5 7.5 V16.5 L12 21 L4.5 16.5 V7.5 Z"}))},{type:"parallelogram",labelKey:"shape.parallelogram",glyph:we(jsx("path",{d:"M6 7 L19 7 L16 17 H7 Z"}))},{type:"trapezoid",labelKey:"shape.trapezoid",glyph:we(jsx("path",{d:"M7 6 H17 L20 18 H4 Z"}))},{type:"pentagon",labelKey:"shape.pentagon",glyph:we(jsx("path",{d:"M12 4 L19.5 9.5 L16.5 18.5 H7.5 L4.5 9.5 Z"}))},{type:"octagon",labelKey:"shape.octagon",glyph:we(jsx("path",{d:"M8 4 H16 L20 8 V16 L16 20 H8 L4 16 V8 Z"}))},{type:"star",labelKey:"shape.star",glyph:we(jsx("path",{d:"M12 3 L14 9.5 L20.5 10 L15.5 14 L17.5 20.5 L12 16.8 L6.5 20.5 L8.5 14 L3.5 10 L10 9.5 Z"}))},{type:"sticky-note",labelKey:"shape.sticky-note",glyph:we(jsxs(Fragment,{children:[jsx("path",{d:"M4 4h16v11l-5 5H4Z"}),jsx("path",{d:"M20 15h-5v5"})]}))},{type:"uml-class",labelKey:"shape.uml-class",glyph:we(jsxs(Fragment,{children:[jsx("rect",{x:"3",y:"4",width:"18",height:"16",rx:"1"}),jsx("path",{d:"M3 9 H21"}),jsx("path",{d:"M3 15 H21"}),jsx("path",{d:"M6 6.5 H10"}),jsx("path",{d:"M6 12.5 H12"})]}))},{type:"uml-interface",labelKey:"shape.uml-interface",glyph:we(jsxs(Fragment,{children:[jsx("rect",{x:"3",y:"4",width:"18",height:"16",rx:"1"}),jsx("path",{d:"M3 9 H21"}),jsx("path",{d:"M6 6.5 H10"}),jsx("path",{d:"M6 12.5 H12"})]}))},{type:"mind-map",labelKey:"shape.mind-map",glyph:we(jsxs(Fragment,{children:[jsx("circle",{cx:"5",cy:"12",r:"2"}),jsx("path",{d:"M7 12h2.6"}),jsx("path",{d:"M9.6 12c0-2 1.2-3.4 2.6-3.4"}),jsx("path",{d:"M9.6 12c0 2 1.2 3.4 2.6 3.4"}),jsx("circle",{cx:"15.2",cy:"8.6",r:"1.3"}),jsx("circle",{cx:"15.2",cy:"15.4",r:"1.3"}),jsx("circle",{cx:"13.6",cy:"12",r:"1.3"})]}))}];function en({editor:o,x:e,y:n,context:r,existingArrowId:h,defaultShapeType:c,onClose:a}){let l=useRef(null);U();let S=g=>{o?.createGeneratedConnection(r,{type:g,existingArrowId:h}),a();};return useEffect(()=>{let g=x=>{l.current&&!l.current.contains(x.target)&&a();},p=x=>{x.key==="Escape"&&(x.preventDefault(),a());},b=setTimeout(()=>{window.addEventListener("pointerdown",g,true),window.addEventListener("keydown",p,true);},0);return ()=>{clearTimeout(b),window.removeEventListener("pointerdown",g,true),window.removeEventListener("keydown",p,true);}},[a]),jsxs("div",{className:"drawui-gen-menu",ref:l,style:{left:e,top:n},children:[jsx("div",{className:"drawui-gen-menu-label",children:t("menu.title")}),jsx("div",{className:"drawui-gen-shape-grid",children:Er.map(g=>jsxs("button",{className:`drawui-gen-shape-btn${g.type===c?" drawui-gen-shape-active":""}`,onClick:()=>S(g.type),"data-drawui-tip":t(g.labelKey),children:[g.glyph,jsx("span",{className:"drawui-gen-shape-label",children:t(g.labelKey)})]},g.type))}),jsx("div",{className:"drawui-gen-menu-hint",children:t("menu.cancel")})]})}var Pr={select:"tool.select",hand:"tool.hand",rectangle:"tool.rectangle","rounded-rectangle":"tool.rounded-rectangle",circle:"tool.circle",ellipse:"tool.ellipse",diamond:"tool.diamond",triangle:"tool.triangle",hexagon:"tool.hexagon",parallelogram:"tool.parallelogram",trapezoid:"tool.trapezoid",pentagon:"tool.pentagon",octagon:"tool.octagon",star:"tool.star",cylinder:"tool.cylinder",cloud:"tool.cloud",heart:"tool.heart","block-arrow-right":"tool.block-arrow-right","block-arrow-left":"tool.block-arrow-left","block-arrow-up":"tool.block-arrow-up","block-arrow-down":"tool.block-arrow-down","block-arrow-double":"tool.block-arrow-double","right-triangle":"tool.right-triangle",cross:"tool.cross","speech-rect":"tool.speech-rect","speech-round":"tool.speech-round",cube:"tool.cube",sector:"tool.sector",delay:"tool.delay","predefined-process":"tool.predefined-process",document:"tool.document",stadium:"tool.stadium","class-catalog":"tool.class-catalog",chevron:"tool.chevron","brace-left":"tool.brace-left","brace-right":"tool.brace-right",envelope:"tool.envelope",checkbox:"tool.checkbox","sticky-note":"tool.sticky-note",icon:"toolbar.icon","triangular-pyramid":"tool.triangular-pyramid","quadrangular-pyramid":"tool.quadrangular-pyramid",cuboid:"tool.cuboid",sphere:"tool.sphere",ellipsoid:"tool.ellipsoid",pie:"tool.pie","hollow-pie":"tool.hollow-pie","uml-class":"tool.uml-class","uml-interface":"tool.uml-interface",line:"tool.line",arrow:"tool.arrow",text:"tool.text",draw:"tool.draw",pen:"tool.pen",highlighter:"tool.highlighter",eraser:"tool.eraser","mind-map":"tool.mind-map",table:"tool.table"};function Ar({initialTool:o="select",className:e="",themeColor:n,language:r="zh-CN",data:h,onChange:c,onReady:a}){let l=useRef(null),S=useRef(null),g=useRef(null),[p,b]=useState(null);U();let[x,N]=useState(o),[K,I]=useState(false),[d,E]=useState(0),[C,Z]=useState(false),[s,w]=useState("straight"),[m,G]=useState("end"),[z,_]=useState(false),[Q,F]=useState(void 0),[H,Y]=useState(100),[j,ee]=useState(null),[M,ue]=useState(null),[xe,B]=useState(false),[Re,ye]=useState(false),[se,Te]=useState(null),[ke,Ne]=useState(null),[fe,O]=useState(false),[v,pe]=useState(null),[oe,le]=useState(null),X=useRef(null),He=useRef(0),me=useRef(null),We=useRef(c);We.current=c;let Ue=useRef(a);Ue.current=a,useEffect(()=>{if(!l.current)return;let f=new Editor(l.current,{theme:n?{primary:n,editBorder:n,selection:{outline:n,handleStroke:n,handleFill:"#ffffff",outlineFill:hexToRgba(n,.1),shadow:n}}:void 0,language:r,shapes:h,persist:!h});g.current=f,b(f),window.__drawuiEditor=f,f.setHighlighterColor(mt()),f.setStickyNoteColor(bt()),Ue.current?.(f),o&&f.setActiveTool(o);let k=f.subscribe(()=>{N(f.getActiveTool());let R=f.getSelectedIds();E(R.length);let Ce=f.getShapes().filter($e=>R.includes($e.id)&&($e.type==="line"||$e.type==="arrow"));if(Z(Ce.length>0),Ce.length>0&&Ce[0].connectionType?w(Ce[0].connectionType):Ce.length>0&&w("straight"),Ce.length>0){let $e=Ce.find(At=>At.type==="arrow");$e&&(G($e.arrowHead??"end"),_($e.dashed??false));}Y(Math.round(f.getCamera().getZoom()*100)),F(f.getArrowStyle()),B(f.canUndo()),ye(f.canRedo());let Oe=f.getSelectedUml();Te(Oe),Oe||pe(null);let Ze=f.getSelectedMindMap();Ne(Ze),f.getMindMapEditingShapeId()||O(false),We.current?.(f.getData());}),ce=f.subscribeNotifications(R=>{ue({type:"success",text:R}),X.current&&clearTimeout(X.current),X.current=setTimeout(()=>ue(null),3500);}),Pe=f.subscribeUi(R=>{R.kind==="shapeTypeMenu"&&le({x:R.screenX,y:R.screenY,context:R.context,existingArrowId:R.existingArrowId,defaultShapeType:R.defaultShapeType});});return ()=>{k(),ce(),Pe(),X.current&&clearTimeout(X.current),cancelAnimationFrame(He.current),f.dispose();}},[o]),useEffect(()=>{if(!n)return;let f=S.current;f&&(f.style.setProperty("--dw-primary",n),f.style.setProperty("--dw-primary-hover",shadeColor(n,-0.12)),f.style.setProperty("--dw-primary-weak",hexToRgba(n,.1)),f.style.setProperty("--dw-primary-contrast","#ffffff"),f.style.setProperty("--dw-shadow-primary",`0 2px 8px ${hexToRgba(n,.3)}`)),g.current?.setTheme({primary:n,editBorder:n,selection:{outline:n,handleStroke:n,handleFill:"#ffffff",outlineFill:hexToRgba(n,.1),shadow:n}});},[n]),useEffect(()=>{setLanguage(r),g.current?.setLanguage(r);},[r]);let Ye=useCallback(f=>{g.current?.setActiveTool(f);},[]),je=useCallback(()=>{g.current?.zoomIn();},[]),Ee=useCallback(()=>{g.current?.zoomOut();},[]),y=useCallback(()=>{g.current?.resetZoom();},[]),$=useCallback(()=>{let f=!K;I(f),g.current?.setShowGrid(f);},[K]),P=useCallback(()=>{g.current?.undo();},[]),D=useCallback(()=>{g.current?.redo();},[]),q=useCallback(f=>{g.current?.downloadImage("drawui",f,{background:"#ffffff"});},[]),ne=useCallback(()=>{g.current?.downloadJSON("drawui-data");},[]),Ie=useCallback(f=>{let k=new FileReader;k.onload=()=>{let ce=typeof k.result=="string"?k.result:"";if(g.current?.importJSON(ce)??false){let R=g.current?.getShapes().length??0;ue({type:"success",text:t("import.success",{n:R})});}else ue({type:"error",text:t("import.fail")});X.current&&clearTimeout(X.current),X.current=setTimeout(()=>ue(null),3500);},k.onerror=()=>{ue({type:"error",text:t("import.fail")}),X.current&&clearTimeout(X.current),X.current=setTimeout(()=>ue(null),3500);},k.readAsText(f,"utf-8");},[]),u=useCallback(f=>{let k=g.current,ce=l.current;if(!k||!ce)return;if(k.isPointerDown()){me.current!==null&&(me.current=null,ee(null));return}let Pe=f.clientX,R=f.clientY;cancelAnimationFrame(He.current),He.current=requestAnimationFrame(()=>{let tt=ce.getBoundingClientRect(),Ce=Pe-tt.left,Oe=R-tt.top,Ze=Ce+12,$e=Oe+12,At=k.getSelectedUml()?.id,ot=k.getUmlRowAtScreenPoint({x:Ce,y:Oe});if(ot&&ot.shape.id!==At&&ot.text&&k.isUmlRowTextTruncated(ot)){me.current!==ot.text&&(me.current=ot.text,ee({text:ot.text,x:Ze,y:$e}));return}let at=k.getShapeAtScreenPoint({x:Ce,y:Oe});at&&at.text&&k.isShapeTextTruncated(at.id)?me.current!==at.text&&(me.current=at.text,ee({text:at.text,x:Ze,y:$e})):me.current!==null&&(me.current=null,ee(null));});},[]),W=useCallback(()=>{ee(null);},[]),i=useCallback(f=>{let k=g.current,ce=l.current;if(!k||!ce)return;let Pe=ce.getBoundingClientRect(),R=f.clientX-Pe.left,tt=f.clientY-Pe.top,Ce=k.getUmlRowAtScreenPoint({x:R,y:tt});if(Ce){pe(Ce.shape.id);return}let Oe=k.getMindMapNodeAtScreenPoint({x:R,y:tt});if(Oe){k.beginMindMapEdit(Oe.shapeId,Oe.nodeId);return}let Ze=k.getTableAtScreenPoint({x:R,y:tt});Ze&&k.beginTableEdit(Ze.shapeId,Ze.row,Ze.col);},[]),T=useCallback(()=>{le(null);},[]);return jsxs("div",{ref:S,className:`drawui-canvas-board ${e}`,children:[jsx("canvas",{ref:l,className:"drawui-canvas",onMouseMove:u,onMouseLeave:W,onDoubleClick:i}),j&&jsx("div",{className:"drawui-tooltip",style:{left:j.x,top:j.y},children:j.text}),jsx(Gt,{activeTool:x,onToolChange:Ye,showGrid:K,onToggleGrid:$,canUndo:xe,canRedo:Re,onUndo:P,onRedo:D,onExport:q,onExportData:ne,onImportData:Ie,onHighlighterColorChange:f=>g.current?.setHighlighterColor(f),onStickyNoteColorChange:f=>g.current?.setStickyNoteColor(f),onInsertIcon:f=>g.current?.insertIcon(f),onInsertTable:(f,k)=>g.current?.insertTable(f,k),arrowStyle:Q,onArrowStyleChange:f=>g.current?.setArrowStyle(f)}),jsx(Vt,{onZoomIn:je,onZoomOut:Ee,onReset:y,zoomLevel:H}),jsx(Ro,{editor:p,selectedCount:d,hasLineSelection:C,currentConnectionType:s,currentArrowHead:m,currentDashed:z}),jsx($o,{editor:p,umlClass:se,editing:v}),jsx(Vo,{editor:p}),jsx(Zo,{editor:p,panelOpen:fe}),jsx(_o,{editor:p,panelOpen:fe,onOpenPanel:()=>O(true)}),fe&&jsx(Xo,{editor:p,mindMap:ke}),jsx(Qo,{editor:p}),oe&&jsx(en,{editor:p,x:oe.x,y:oe.y,context:oe.context,existingArrowId:oe.existingArrowId,defaultShapeType:oe.defaultShapeType,onClose:T}),jsxs("div",{className:"drawui-status-bar",children:[jsx("div",{className:"drawui-status-item",children:jsx("span",{children:t(Pr[x])})}),jsx("div",{className:"drawui-status-item",children:jsx("span",{children:d===0?t("status.none"):t("status.selected",{n:d})})}),jsx("div",{className:"drawui-status-item",children:jsxs("span",{children:[H,"%"]})})]}),M&&jsxs("div",{className:"drawui-toast",children:[M.type==="success"?jsx("svg",{className:"drawui-toast-icon",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:jsx("polyline",{points:"20 6 9 17 4 12"})}):jsxs("svg",{className:"drawui-toast-icon drawui-toast-icon-error",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]}),M.text]})]})}export{Ar as CanvasBoard,Gt as Toolbar,Vt as ZoomControl};
package/dist/styles.css CHANGED
@@ -73,6 +73,14 @@
73
73
  inset: 0;
74
74
  overflow: hidden;
75
75
  background-color: var(--dw-canvas-bg);
76
+ user-select: none;
77
+ -webkit-user-select: none;
78
+ }
79
+ .drawui-canvas-board input,
80
+ .drawui-canvas-board textarea,
81
+ .drawui-canvas-board [contenteditable='true'] {
82
+ user-select: text;
83
+ -webkit-user-select: text;
76
84
  }
77
85
  .drawui-canvas {
78
86
  display: block;
@@ -95,7 +103,7 @@
95
103
  border-radius: 14px;
96
104
  box-shadow: var(--dw-shadow-md);
97
105
  border: 1px solid var(--dw-panel-border);
98
- z-index: 100;
106
+ z-index: 900;
99
107
  }
100
108
  .drawui-toolbar-button {
101
109
  position: relative;
@@ -141,7 +149,7 @@
141
149
  top: 5px;
142
150
  left: 50%;
143
151
  transform: translateX(-50%);
144
- z-index: 100;
152
+ z-index: 900;
145
153
  }
146
154
  .drawui-toolbar-dropdown {
147
155
  position: relative;
@@ -1267,3 +1275,133 @@
1267
1275
  color: var(--dw-text-faint);
1268
1276
  padding: 0 2px;
1269
1277
  }
1278
+ .drawui-table-picker {
1279
+ position: absolute;
1280
+ top: calc(100% + 14px);
1281
+ left: 50%;
1282
+ transform: translateX(-50%);
1283
+ padding: 10px 12px 8px;
1284
+ background: var(--dw-panel-bg);
1285
+ backdrop-filter: blur(16px);
1286
+ -webkit-backdrop-filter: blur(16px);
1287
+ border-radius: 14px;
1288
+ box-shadow: var(--dw-shadow-lg);
1289
+ border: 1px solid var(--dw-panel-border);
1290
+ background: var(--dw-panel-bg-deep);
1291
+ animation: dropdownFadeIn 0.15s cubic-bezier(0.4, 0, 0.2, 1);
1292
+ z-index: 500;
1293
+ }
1294
+ .drawui-table-picker-hint {
1295
+ font-size: 11px;
1296
+ color: var(--dw-text-muted);
1297
+ margin-bottom: 8px;
1298
+ white-space: nowrap;
1299
+ }
1300
+ .drawui-table-picker-grid {
1301
+ display: grid;
1302
+ grid-template-columns: repeat(8, 18px);
1303
+ grid-auto-rows: 18px;
1304
+ gap: 3px;
1305
+ }
1306
+ .drawui-table-picker-cell {
1307
+ box-sizing: border-box;
1308
+ border: 1px solid var(--dw-dash);
1309
+ background: var(--dw-panel-bg);
1310
+ border-radius: 3px;
1311
+ padding: 0;
1312
+ cursor: pointer;
1313
+ }
1314
+ .drawui-table-picker-cell:hover {
1315
+ border-color: var(--dw-primary);
1316
+ background: var(--dw-primary-weak);
1317
+ }
1318
+ .drawui-table-toolbar {
1319
+ position: absolute;
1320
+ display: flex;
1321
+ align-items: center;
1322
+ gap: 2px;
1323
+ padding: 4px;
1324
+ background: var(--dw-panel-bg);
1325
+ backdrop-filter: blur(16px);
1326
+ -webkit-backdrop-filter: blur(16px);
1327
+ border-radius: 12px;
1328
+ box-shadow: var(--dw-shadow-lg);
1329
+ border: 1px solid var(--dw-panel-border);
1330
+ background: var(--dw-panel-bg-deep);
1331
+ z-index: 100;
1332
+ transform: translateX(-50%);
1333
+ white-space: nowrap;
1334
+ }
1335
+ .drawui-table-toolbar button {
1336
+ border: none;
1337
+ background: transparent;
1338
+ padding: 5px 9px;
1339
+ border-radius: 8px;
1340
+ font-size: 12px;
1341
+ line-height: 1;
1342
+ color: var(--dw-text);
1343
+ cursor: pointer;
1344
+ white-space: nowrap;
1345
+ }
1346
+ .drawui-table-toolbar button:hover:not(:disabled) {
1347
+ background: var(--dw-primary-weak);
1348
+ color: var(--dw-primary-hover);
1349
+ }
1350
+ .drawui-table-toolbar button:disabled {
1351
+ opacity: 0.35;
1352
+ cursor: default;
1353
+ }
1354
+ .drawui-table-split {
1355
+ position: relative;
1356
+ display: flex;
1357
+ align-items: center;
1358
+ }
1359
+ .drawui-table-toolbar .drawui-table-split .drawui-table-btn-caret {
1360
+ padding: 5px 4px;
1361
+ color: var(--dw-text-muted);
1362
+ }
1363
+ .drawui-table-toolbar .drawui-table-split .drawui-table-btn-caret.active {
1364
+ background: var(--dw-primary-weak);
1365
+ color: var(--dw-primary-hover);
1366
+ }
1367
+ .drawui-table-menu {
1368
+ position: absolute;
1369
+ top: calc(100% + 6px);
1370
+ left: 50%;
1371
+ transform: translateX(-50%);
1372
+ display: flex;
1373
+ flex-direction: column;
1374
+ min-width: 132px;
1375
+ padding: 4px;
1376
+ gap: 2px;
1377
+ background: var(--dw-panel-bg);
1378
+ backdrop-filter: blur(16px);
1379
+ -webkit-backdrop-filter: blur(16px);
1380
+ border-radius: 12px;
1381
+ box-shadow: var(--dw-shadow-lg);
1382
+ border: 1px solid var(--dw-panel-border);
1383
+ background: var(--dw-panel-bg-deep);
1384
+ z-index: 500;
1385
+ }
1386
+ .drawui-table-toolbar .drawui-table-menu button {
1387
+ width: 100%;
1388
+ text-align: left;
1389
+ padding: 6px 10px;
1390
+ font-size: 12px;
1391
+ }
1392
+ .drawui-table-cell-input {
1393
+ position: absolute;
1394
+ border: 1.5px solid var(--dw-primary, #3b82f6);
1395
+ border-radius: 4px;
1396
+ background: #ffffff;
1397
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.15);
1398
+ outline: none;
1399
+ font-family: sans-serif;
1400
+ box-sizing: border-box;
1401
+ pointer-events: auto;
1402
+ z-index: 55;
1403
+ white-space: pre-wrap;
1404
+ word-break: break-word;
1405
+ overflow: hidden;
1406
+ resize: none;
1407
+ }
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "drawui-react",
3
- "version": "0.4.0",
3
+ "version": "0.4.1",
4
4
  "type": "module",
5
- "description": "React wrapper for drawui-core canvas drawing (PNG / SVG / PDF export, UML, mind map)",
5
+ "description": "React wrapper for drawui-core canvas drawing (PNG / SVG / PDF export, table, UML, mind map)",
6
6
  "license": "MIT",
7
7
  "files": [
8
8
  "dist"
@@ -30,7 +30,7 @@
30
30
  "access": "public"
31
31
  },
32
32
  "dependencies": {
33
- "drawui-core": "0.4.0"
33
+ "drawui-core": "0.4.1"
34
34
  },
35
35
  "peerDependencies": {
36
36
  "react": "^18.3.1"