drawui-react 0.4.2 → 0.5.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/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- 'use strict';var react=require('react'),drawuiCore=require('drawui-core'),jsxRuntime=require('react/jsx-runtime');function Z(){let[t,e]=react.useState(drawuiCore.getLanguage());return react.useEffect(()=>drawuiCore.subscribeLanguage(()=>e(drawuiCore.getLanguage())),[]),t}var gn=["#ffeb3b","#22c55e","#3b82f6","#ec4899","#8b5cf6","#f97316"],wn="drawui:highlighterColor";function Ct(){if(typeof window>"u")return drawuiCore.DEFAULT_HIGHLIGHTER_COLOR;try{let t=window.localStorage.getItem(wn);return t&&/^#[0-9a-fA-F]{6}$/.test(t)?t.toLowerCase():drawuiCore.DEFAULT_HIGHLIGHTER_COLOR}catch{return drawuiCore.DEFAULT_HIGHLIGHTER_COLOR}}function vn(t){if(!(typeof window>"u"))try{window.localStorage.setItem(wn,t);}catch{}}var kn="drawui:stickyNoteColor";function St(){if(typeof window>"u")return drawuiCore.STICKY_NOTE_DEFAULT_COLOR;try{let t=window.localStorage.getItem(kn);return t&&/^#[0-9a-fA-F]{6}$/.test(t)?t.toLowerCase():drawuiCore.STICKY_NOTE_DEFAULT_COLOR}catch{return drawuiCore.STICKY_NOTE_DEFAULT_COLOR}}function Cn(t){if(!(typeof window>"u"))try{window.localStorage.setItem(kn,t);}catch{}}function Co({icon:t,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:[t.disc&&jsxRuntime.jsx("circle",{cx:drawuiCore.ICON_GRID/2,cy:drawuiCore.ICON_GRID/2,r:drawuiCore.ICON_GRID/2-1,fill:t.disc}),t.layers.map((a,y)=>{let c=a.fill??"ink",r=a.stroke??"ink";return jsxRuntime.jsx("path",{d:a.d,fill:c==="none"?"none":c==="ink"?n:c,...r==="none"?{}:{stroke:r==="ink"?n:r,strokeWidth:a.w??1.8,strokeLinecap:"round",strokeLinejoin:"round"}},y)}),t.label&&jsxRuntime.jsx("text",{x:drawuiCore.ICON_GRID/2,y:drawuiCore.ICON_GRID/2+.5,textAnchor:"middle",dominantBaseline:"central",fontFamily:"sans-serif",fontSize:t.label.size??13,fill:t.label.color,children:t.label.text})]})}var Nn="drawui:recentIcons",En=12;function Vt(t,e){let n=/^#?([0-9a-f]{6})$/i.exec(t.trim());if(!n)return t;let a=parseInt(n[1],16);return `rgba(${a>>16&255}, ${a>>8&255}, ${a&255}, ${e})`}function So(){if(typeof window>"u")return [];try{let t=JSON.parse(window.localStorage.getItem(Nn)||"[]");return Array.isArray(t)?t.filter(e=>typeof e=="string").slice(0,En):[]}catch{return []}}function Mo(t){if(!(typeof window>"u"))try{window.localStorage.setItem(Nn,JSON.stringify(t));}catch{}}var Tn=t=>({"--dw-icon-cat":t,"--dw-icon-cat-soft":Vt(t,.12)}),In=react.memo(function({onPick:e,onClose:n}){Z();let[a,y]=react.useState(""),[c,r]=react.useState(drawuiCore.ICON_CATEGORIES[0].id),[s,S]=react.useState(So),f=react.useRef(null),d=react.useRef(null);react.useEffect(()=>{d.current?.focus();},[]),react.useEffect(()=>{let u=C=>{let F=f.current;F&&(F.contains(C.target)||C.target?.closest?.("[data-icon-toggle]")||n());},E=C=>{C.key==="Escape"&&(C.stopPropagation(),n());};return window.addEventListener("pointerdown",u),window.addEventListener("keydown",E),()=>{window.removeEventListener("pointerdown",u),window.removeEventListener("keydown",E);}},[n]);let b=react.useMemo(()=>s.map(u=>drawuiCore.getIcon(u)).filter(u=>!!u),[s]),v=react.useMemo(()=>a.trim()?drawuiCore.searchIcons(a):c==="recent"?b:drawuiCore.iconsByCategory(c),[a,c,b]),T=c==="recent"?drawuiCore.ICON_CATEGORY_INK.status:drawuiCore.ICON_CATEGORY_INK[c]??drawuiCore.ICON_DEFAULT_INK,H=a.trim()?drawuiCore.t("icon.search"):c==="recent"?drawuiCore.t("icon.recent"):drawuiCore.t(drawuiCore.ICON_CATEGORIES.find(u=>u.id===c)?.labelKey??"icon.search"),I=u=>{e(u),S(E=>{let C=[u.id,...E.filter(F=>F!==u.id)].slice(0,En);return Mo(C),C});};return jsxRuntime.jsxs("div",{className:"drawui-icon-panel",ref:f,style:{"--dw-icon-accent":T,"--dw-icon-soft":Vt(T,.08),"--dw-icon-ring":Vt(T,.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:d,value:a,onChange:u=>y(u.target.value),onKeyDown:u=>{u.key==="Enter"&&v.length>0&&I(v[0]);},placeholder:drawuiCore.t("icon.search"),"aria-label":drawuiCore.t("icon.search")}),jsxRuntime.jsx("span",{className:"drawui-icon-count",children:v.length})]}),!a.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:Tn(drawuiCore.ICON_CATEGORY_INK.status),onClick:()=>r("recent"),children:[jsxRuntime.jsx("i",{className:"drawui-icon-dot"}),drawuiCore.t("icon.recent")]}),drawuiCore.ICON_CATEGORIES.map(u=>jsxRuntime.jsxs("button",{type:"button",className:`drawui-icon-cat${c===u.id?" active":""}`,style:Tn(drawuiCore.ICON_CATEGORY_INK[u.id]??drawuiCore.ICON_DEFAULT_INK),onClick:()=>r(u.id),children:[jsxRuntime.jsx("i",{className:"drawui-icon-dot"}),drawuiCore.t(u.labelKey)]},u.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:H}),jsxRuntime.jsx("span",{className:"drawui-icon-card-count",children:v.length})]}),jsxRuntime.jsxs("div",{className:"drawui-icon-grid",children:[v.map(u=>jsxRuntime.jsx("button",{type:"button",className:"drawui-icon-item",title:`${u.zh} / ${u.en}`,"aria-label":`${u.zh} ${u.en}`,onClick:()=>I(u),children:jsxRuntime.jsx(Co,{icon:u,size:30,ink:drawuiCore.iconInk(u)})},u.id)),v.length===0&&jsxRuntime.jsx("div",{className:"drawui-icon-empty",children:drawuiCore.t("icon.empty")})]})]})]})});var Ie=t=>`${t.x.toFixed(1)},${t.y.toFixed(1)}`,Rn=(t,e)=>{let n=e*Math.PI/180;return {x:t.x*Math.cos(n)-t.y*Math.sin(n),y:t.x*Math.sin(n)+t.y*Math.cos(n)}},pt={x:Math.SQRT1_2,y:-Math.SQRT1_2},Yt={x:4.6,y:19.4},bt={x:19,y:5};function jt(t,e,n){let a={x:-n.y,y:n.x},y=r=>({x:e.x-n.x*r,y:e.y-n.y*r}),c=(r,s)=>({x:r.x+a.x*s,y:r.y+a.y*s});switch(t){case "end":{let r=y(5.6);return jsxRuntime.jsx("polygon",{points:`${Ie(e)} ${Ie(c(r,2.7))} ${Ie(c(r,-2.7))}`,fill:"currentColor",stroke:"none"})}case "inheritance":case "realization":{let r=y(8.6);return jsxRuntime.jsx("polygon",{points:`${Ie(e)} ${Ie(c(r,3.5))} ${Ie(c(r,-3.5))}`,fill:"none"})}case "aggregation":case "composition":{let r=y(4.3),s=y(8.6);return jsxRuntime.jsx("polygon",{points:`${Ie(e)} ${Ie(c(r,2.7))} ${Ie(s)} ${Ie(c(r,-2.7))}`,fill:t==="composition"?"currentColor":"none",stroke:"currentColor"})}case "dependency":{let r=Rn({x:-n.x,y:-n.y},30),s=Rn({x:-n.x,y:-n.y},-30);return jsxRuntime.jsx("path",{d:`M ${Ie({x:e.x+r.x*5.8,y:e.y+r.y*5.8})} L ${Ie(e)} L ${Ie({x:e.x+s.x*5.8,y:e.y+s.y*5.8})}`,fill:"none"})}default:return null}}function De(t,e){let n=e||t==="dependency"||t==="realization",a=n?{x:bt.x-pt.x*8.6,y:bt.y-pt.y*8.6}:bt,y={x:-pt.x,y:-pt.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:Yt.x,y1:Yt.y,x2:a.x,y2:a.y,strokeDasharray:n?"3 2.6":void 0}),(t==="end"||t==="both")&&jt("end",bt,pt),(t==="start"||t==="both")&&jt("end",Yt,y),t!=="none"&&t!=="start"&&t!=="end"&&t!=="both"?jt(t,bt,pt):null]})}var Lt=t=>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:t})}),To=[{type:"straight",labelKey:"style.connection.straight",icon:Lt("M3 12h18")},{type:"polyline",labelKey:"style.connection.polyline",icon:Lt("M4 8 C 12 8, 12 16, 20 16")},{type:"orthogonal",labelKey:"style.connection.orthogonal",icon:Lt("M5 5v14h14")},{type:"curve",labelKey:"style.connection.curve",icon:Lt("M3 13 C 6 7, 9 7, 12 12 C 15 17, 18 17, 21 11")}],Pn=[{key:"none",arrowHead:"none",dashed:false,labelKey:"style.arrowhead.none",icon:De("none",false)},{key:"end",arrowHead:"end",dashed:false,labelKey:"style.arrowhead.end",icon:De("end",false)},{key:"start",arrowHead:"start",dashed:false,labelKey:"style.arrowhead.start",icon:De("start",false)},{key:"both",arrowHead:"both",dashed:false,labelKey:"style.arrowhead.both",icon:De("both",false)},{key:"none-dashed",arrowHead:"none",dashed:true,labelKey:"style.arrowhead.none-dashed",icon:De("none",true)},{key:"both-dashed",arrowHead:"both",dashed:true,labelKey:"style.arrowhead.both-dashed",icon:De("both",true)}],An=[{key:"inheritance",arrowHead:"inheritance",dashed:false,labelKey:"style.arrowhead.inheritance",icon:De("inheritance",false)},{key:"composition",arrowHead:"composition",dashed:false,labelKey:"style.arrowhead.composition",icon:De("composition",false)},{key:"aggregation",arrowHead:"aggregation",dashed:false,labelKey:"style.arrowhead.aggregation",icon:De("aggregation",false)},{key:"dependency",arrowHead:"dependency",dashed:true,labelKey:"style.arrowhead.dependency",icon:De("dependency",true)},{key:"realization",arrowHead:"realization",dashed:true,labelKey:"style.arrowhead.realization",icon:De("realization",true)}],Hn=[...Pn,...An];function No(t,e){let n=Hn.find(a=>a.arrowHead===t&&a.dashed===e);return n?n.key:Hn.find(a=>a.arrowHead===t)?.key}var Nt=react.memo(function({connectionType:e,arrowHead:n,dashed:a,onConnectionTypeChange:y,onArrowStyleChange:c,onOptionHover:r,onOptionLeave:s}){Z();let S=No(n,a),f=d=>jsxRuntime.jsx("div",{className:"drawui-connection-row",children:d.map(b=>jsxRuntime.jsxs("button",{className:`drawui-connection-btn${S===b.key?" active":""}`,onClick:()=>c(b),"data-drawui-tip":r?void 0:drawuiCore.t(b.labelKey),onMouseEnter:r?v=>r(b.labelKey,v.currentTarget):void 0,onMouseLeave:r?s: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:To.map(d=>jsxRuntime.jsxs("button",{className:`drawui-connection-btn${e===d.type?" active":""}`,onClick:()=>y(d.type),"data-drawui-tip":r?void 0:drawuiCore.t(d.labelKey),onMouseEnter:r?b=>r(d.labelKey,b.currentTarget):void 0,onMouseLeave:r?s:void 0,"aria-label":drawuiCore.t(d.labelKey),type:"button",children:[jsxRuntime.jsx("span",{className:"drawui-connection-icon",children:d.icon}),jsxRuntime.jsx("span",{className:"drawui-connection-label",children:drawuiCore.t(d.labelKey)})]},d.type))}),jsxRuntime.jsx("div",{className:"drawui-style-popover-title",children:drawuiCore.t("style.arrow")}),f(Pn),jsxRuntime.jsx("div",{className:"drawui-style-popover-title",children:drawuiCore.t("style.uml")}),f(An)]})});var Kn=[{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"})]})}],Ro=[{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"}]}],Ho=new Map(Kn.map(t=>[t.type,t.icon])),Po=new Set(Kn.map(t=>t.type)),Ao=jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("path",{d:"M4 4h16v11l-5 5H4Z"}),jsxRuntime.jsx("path",{d:"M20 15h-5v5"})]}),Ko=[{type:"arrow",icon:"M5 12h14M12 5l7 7-7 7",labelKey:"toolbar.arrow"},{type:"text",icon:"M4 7V4h16v3M9 20h6M12 4v16",labelKey:"toolbar.text"}],Oo="M17 3a2.85 2.85 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3Z",Xt=8,$o=6,qt="M0 -1Q0.24 -0.24 1 0Q0.24 0.24 0 1Q-0.24 0.24 -1 0Q-0.24 -0.24 0 -1Z",Do=[{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"}],Jt=react.memo(function({activeTool:e,onToolChange:n,showGrid:a,onToggleGrid:y,canUndo:c=false,canRedo:r=false,onUndo:s,onRedo:S,onExport:f,onExportData:d,onImportData:b,onHighlighterColorChange:v,onStickyNoteColorChange:T,onInsertIcon:H,onInsertTable:I,arrowStyle:u,onArrowStyleChange:E}){let[C,F]=react.useState(false),[i,x]=react.useState(false),[p,_]=react.useState(null),[w,R]=react.useState(false),[B,O]=react.useState(false),[P,X]=react.useState(Ct),[q,te]=react.useState(false),[M,pe]=react.useState(St),[Se,U]=react.useState(false),[Ke,be]=react.useState(false),[ce,Ee]=react.useState(null),Me=react.useRef(null),Re=react.useRef(null),ge=react.useRef(null),$=react.useRef(null),k=react.useRef(null);Z();let ye=[{format:"png",labelKey:"toolbar.export.png"},{format:"svg",labelKey:"toolbar.export.svg"},{format:"pdf",labelKey:"toolbar.export.pdf"}],re=()=>{Me.current&&(clearTimeout(Me.current),Me.current=null),R(true);},de=()=>{Me.current=window.setTimeout(()=>R(false),200);},J=react.useRef(null),Oe=()=>{R(false),m(),J.current?.click();},we=h=>{let V=h.target.files?.[0];V&&b?.(V),h.target.value="";},Ye=()=>{Re.current&&(clearTimeout(Re.current),Re.current=null),F(true);},je=()=>{Re.current=window.setTimeout(()=>{F(false),m();},200);},et=()=>{ge.current&&(clearTimeout(ge.current),ge.current=null),x(true);},tt=()=>{ge.current=window.setTimeout(()=>{x(false),m();},200);},He=(h,V)=>{let l=h.closest(".drawui-toolbar");if(!l)return;let L=h.getBoundingClientRect(),ue=l.getBoundingClientRect(),G=L.bottom+46>window.innerHeight;_({label:V,x:L.left-ue.left+L.width/2,y:G?L.top-ue.top-8:L.bottom-ue.top+8,above:G});},m=()=>_(null),D=()=>{$.current&&(clearTimeout($.current),$.current=null),O(true);},z=()=>{$.current=window.setTimeout(()=>O(false),200);},W=h=>{X(h),vn(h),v?.(h),n("highlighter");},Q=()=>{k.current&&(clearTimeout(k.current),k.current=null),te(true);},ae=()=>{k.current=window.setTimeout(()=>te(false),200);},Pe=h=>{pe(h),Cn(h),T?.(h),n("sticky-note"),te(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:h=>He(h.currentTarget,"toolbar.select"),onMouseLeave:m,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:h=>He(h.currentTarget,"toolbar.hand"),onMouseLeave:m,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:Ye,onMouseLeave:je,children:[jsxRuntime.jsx("button",{className:`drawui-toolbar-button ${Po.has(e)?"active":""}`,onClick:()=>{n("rounded-rectangle"),F(false),m();},"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:Ro.map(h=>jsxRuntime.jsxs("div",{className:"drawui-shape-group",children:[jsxRuntime.jsx("div",{className:"drawui-shape-group-title",children:drawuiCore.t(h.labelKey)}),jsxRuntime.jsx("div",{className:"drawui-shape-group-grid",children:h.items.map(V=>{let l=V.labelKey??`tool.${V.type}`;return jsxRuntime.jsx("button",{type:"button",className:`drawui-toolbar-shape-item ${e===V.type?"active":""}`,onClick:()=>{n(V.type),F(false),m();},onMouseEnter:L=>He(L.currentTarget,l),onMouseLeave:m,"aria-label":drawuiCore.t(l),children:jsxRuntime.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:Ho.get(V.type)})},`${h.key}-${V.type}`)})})]},h.key))})})]}),jsxRuntime.jsxs("div",{className:"drawui-toolbar-dropdown",onMouseEnter:Q,onMouseLeave:ae,children:[jsxRuntime.jsxs("button",{className:`drawui-toolbar-button ${e==="sticky-note"?"active":""}`,onClick:()=>{n("sticky-note"),te(false),m();},"data-drawui-tip":q?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:Ao}),jsxRuntime.jsx("span",{className:"drawui-toolbar-color-chip",style:{background:M}})]}),q&&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(h=>jsxRuntime.jsx("button",{type:"button","aria-label":h,className:`drawui-sticky-swatch${M.toLowerCase()===h.toLowerCase()?" active":""}`,style:{background:h},onClick:()=>Pe(h)},h))})]})]}),jsxRuntime.jsxs("div",{className:"drawui-toolbar-dropdown",children:[jsxRuntime.jsx("button",{className:`drawui-toolbar-button ${Se?"active":""}`,"data-icon-toggle":"","data-drawui-tip":Se?void 0:drawuiCore.t("toolbar.icon"),onClick:()=>{U(h=>!h),m();},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"})]})}),Se&&jsxRuntime.jsx(In,{onPick:h=>H?.(h.id),onClose:()=>U(false)})]}),jsxRuntime.jsx("div",{className:"drawui-toolbar-divider"}),jsxRuntime.jsxs("div",{className:"drawui-toolbar-dropdown",onMouseEnter:et,onMouseLeave:tt,children:[jsxRuntime.jsx("button",{className:`drawui-toolbar-button ${e==="arrow"?"active":""}`,onClick:()=>{n("arrow"),x(false),m();},"data-drawui-tip":i?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"})})}),i&&jsxRuntime.jsx("div",{className:"drawui-toolbar-shape-grid drawui-arrow-menu",onPointerDown:h=>{h.target.closest("button")||(x(false),m());},children:jsxRuntime.jsx(Nt,{connectionType:u?.connectionType??"straight",arrowHead:u?.arrowHead??"end",dashed:!!u?.dashed,onConnectionTypeChange:h=>{E?.({connectionType:h}),n("arrow"),x(false),m();},onArrowStyleChange:h=>{E?.({arrowHead:h.arrowHead,dashed:h.dashed}),n("arrow"),x(false),m();},onOptionHover:(h,V)=>He(V,h),onOptionLeave:m})})]}),Ko.filter(h=>h.type!=="arrow").map(h=>jsxRuntime.jsx("button",{className:`drawui-toolbar-button ${e===h.type?"active":""}`,onClick:()=>n(h.type),"data-drawui-tip":drawuiCore.t(h.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:h.icon})})},h.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:Oo})})}),jsxRuntime.jsxs("div",{className:"drawui-toolbar-dropdown",onMouseEnter:D,onMouseLeave:z,children:[jsxRuntime.jsxs("button",{className:`drawui-toolbar-button ${e==="highlighter"?"active":""}`,onClick:()=>n("highlighter"),onMouseEnter:h=>He(h.currentTarget,"toolbar.highlighter"),onMouseLeave:m,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:qt,transform:"translate(7.4 5.4) scale(2.4)"}),jsxRuntime.jsx("path",{d:qt,transform:"translate(18.4 3.4) scale(2.5)"}),jsxRuntime.jsx("path",{d:qt,transform:"translate(21 10.6) scale(2.2)"})]})]}),jsxRuntime.jsx("span",{className:"drawui-toolbar-color-chip",style:{background:P}})]}),B&&jsxRuntime.jsx("div",{className:"drawui-toolbar-shape-grid drawui-toolbar-highlighter-grid",children:gn.map(h=>jsxRuntime.jsx("button",{type:"button","aria-label":h,className:`drawui-highlighter-swatch${P.toLowerCase()===h.toLowerCase()?" active":""}`,style:{background:h},onClick:()=>W(h)},h))})]}),jsxRuntime.jsx("div",{className:"drawui-toolbar-divider"}),Do.map(h=>jsxRuntime.jsx("button",{className:`drawui-toolbar-button ${e===h.type?"active":""}`,onClick:()=>n(h.type),"data-drawui-tip":drawuiCore.t(h.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:h.icon})})},h.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 ${Ke?"active":""}`,onClick:()=>be(h=>!h),"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"})]})}),Ke&&jsxRuntime.jsxs("div",{className:"drawui-table-picker",children:[jsxRuntime.jsx("div",{className:"drawui-table-picker-hint",children:ce?`${ce.rows} \xD7 ${ce.cols}`:drawuiCore.t("table.pickHint")}),jsxRuntime.jsx("div",{className:"drawui-table-picker-grid",children:Array.from({length:$o*Xt},(h,V)=>{let l=Math.floor(V/Xt),L=V%Xt,ue=ce&&l<ce.rows&&L<ce.cols;return jsxRuntime.jsx("button",{type:"button","aria-label":`${l+1}x${L+1}`,className:"drawui-table-picker-cell",style:ue?{borderColor:"var(--dw-primary)",background:"var(--dw-primary-weak)"}:void 0,onMouseEnter:()=>Ee({rows:l+1,cols:L+1}),onClick:()=>{I?.(l+1,L+1),be(false),Ee(null),m();}},V)})})]})]}),jsxRuntime.jsx("div",{className:"drawui-toolbar-divider"}),jsxRuntime.jsx("button",{className:`drawui-toolbar-button ${a?"active":""}`,onClick:y,"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:s,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:!r,style:r?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:de,children:[jsxRuntime.jsx("button",{className:"drawui-toolbar-button","data-drawui-tip":w?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"})]})}),w&&jsxRuntime.jsxs("div",{className:"drawui-toolbar-shape-grid drawui-toolbar-export-grid",children:[ye.map(h=>jsxRuntime.jsx("button",{className:"drawui-toolbar-shape-item drawui-toolbar-export-item",onClick:()=>{f?.(h.format),R(false);},"data-drawui-tip":drawuiCore.t(h.labelKey),children:drawuiCore.t(h.labelKey)},h.format)),jsxRuntime.jsx("div",{className:"drawui-toolbar-export-divider"}),jsxRuntime.jsx("button",{className:"drawui-toolbar-shape-item drawui-toolbar-export-item",onClick:()=>{d?.(),R(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:Oe,"data-drawui-tip":drawuiCore.t("toolbar.import.data"),children:drawuiCore.t("toolbar.import.data")})]})]}),jsxRuntime.jsx("input",{ref:J,type:"file",accept:".json,application/json",style:{display:"none"},onChange:we}),p&&jsxRuntime.jsx("div",{className:`drawui-shape-tip ${p.above?"is-above":"is-below"}`,style:{left:p.x,top:p.y},children:drawuiCore.t(p.label)})]})})});var en=react.memo(function({onZoomIn:e,onZoomOut:n,onReset:a,zoomLevel:y=100}){return Z(),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:[y,"%"]}),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:a,"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 $n=["#ffffff","#f1f5f9","#e2e8f0","#ede9fe","#dbeafe","#e0e7ff","#dcfce7","#fef9c3","#fee2e2"],Dn=["#0f172a","#475569","#94a3b8","#8b5cf6","#3b82f6","#1d4ed8","#16a34a","#eab308","#dc2626"],Go=$n.filter(t=>t!=="#f1f5f9"),Fo=[...Go,...Dn],Vo=[...$n,...Dn],Bn=15,zn="drawui:customColors";function Yo(){if(typeof window>"u")return [];try{let t=window.localStorage.getItem(zn);if(!t)return [];let e=JSON.parse(t);return Array.isArray(e)?e.filter(n=>typeof n=="string").slice(-Bn):[]}catch{return []}}function jo(t){if(!(typeof window>"u"))try{window.localStorage.setItem(zn,JSON.stringify(t));}catch{}}var tn=[{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}],On=(t,e)=>!!t&&!!e&&t.toLowerCase()===e.toLowerCase(),wt=10,ot=12,Qe=t=>!t||t==="transparent",_n=react.memo(function({editor:e,selectedCount:n,hasLineSelection:a,currentConnectionType:y,currentArrowHead:c,currentDashed:r}){Z();let s=!!e?.getEditingShapeId(),[S,f]=react.useState(null),[d,b]=react.useState(null),[,v]=react.useState(0),T=react.useRef(null),H=react.useRef(null),I=react.useRef(null),[u,E]=react.useState({tw:168,th:42,pw:228,ph:160}),[C,F]=react.useState(Yo),i=react.useRef(null),x=react.useCallback(l=>{let L=l.trim().toLowerCase();/^#[0-9a-f]{6}$/.test(L)&&F(ue=>{let G=ue.filter($e=>$e!==L);for(G.push(L);G.length>Bn;)G.shift();return jo(G),G});},[]);if(react.useEffect(()=>{let l=i.current;if(!l)return;let L=()=>{l.value&&x(l.value);};return l.addEventListener("change",L),()=>l.removeEventListener("change",L)},[x,d]),react.useEffect(()=>{if(!e)return;let l=e.subscribe(()=>v(L=>(L+1)%1e6));return ()=>{l();}},[e]),react.useEffect(()=>{b(null);},[n,s]),react.useEffect(()=>{if(!d)return;let l=L=>{T.current&&!T.current.contains(L.target)&&b(null);};return document.addEventListener("pointerdown",l,true),()=>document.removeEventListener("pointerdown",l,true)},[d]),react.useLayoutEffect(()=>{let l=H.current?.offsetWidth??u.tw,L=H.current?.offsetHeight??u.th,ue=I.current?.offsetWidth??u.pw,G=I.current?.offsetHeight??u.ph;E($e=>$e.tw===l&&$e.th===L&&$e.pw===ue&&$e.ph===G?$e:{tw:l,th:L,pw:ue,ph:G});}),!e||n===0||s)return null;let p=e.getSelectedIds(),w=e.getShapes().filter(l=>p.includes(l.id)),R=w[0],B=R?.id??"",O=R?.style.fillColor,P=R?.style.strokeColor??"#1f2937",X=R?.textColor??"#1f2937",q=R?.highlightColor,te={fill:O,stroke:P,text:X,highlight:q},M=w.length>0&&w.every(l=>l.type==="sticky-note"),pe={fill:R?.style.fillOpacity??1,stroke:R?.style.strokeOpacity??1,highlight:R?.highlightOpacity??1},Se=l=>S&&S.key===`${B}:${l}`?S.value:pe[l]??1,U=(l,L)=>{switch(l){case "stroke":e.updateSelectedShapesStyle({strokeColor:L});break;case "fill":e.updateSelectedShapesStyle({fillColor:L});break;case "text":e.updateSelectedShapesText({textColor:L});break;case "highlight":e.updateSelectedShapesText({highlightColor:L});break}},Ke=(l,L)=>{f({key:`${B}:${l}`,value:L}),l==="highlight"?e.updateSelectedShapesText({highlightOpacity:L}):l==="stroke"?e.updateSelectedShapesStyle({strokeOpacity:L}):e.updateSelectedShapesStyle({fillOpacity:L});},be=l=>e.updateConnectionType(l),ce=l=>e.updateArrowStyle({arrowHead:l.arrowHead,dashed:l.dashed}),Ee=!!a&&w.length>0&&w.every(l=>l.type==="line"||l.type==="arrow"),Me=w.length>0&&w.every(l=>l.type==="text"),Re=w.length>0&&w.every(l=>l.type==="sticky-note"||l.type==="icon"),ge=Ee?tn.filter(l=>l.key==="stroke"):Re?tn.filter(l=>l.key!=="stroke"):tn,$=l=>l.key==="stroke"&&Ee?"style.line":l.labelKey,k=d&&d!=="more"?ge.find(l=>l.key===d):void 0,ye=!!d&&(d==="more"||d==="prefix"||!!k),re=M&&k?.key==="fill",de=e.getCamera(),J=drawuiCore.getContentBounds(w,0),Oe=de.pageToScreen({x:J.x,y:J.y}),we=de.pageToScreen({x:J.x+J.width,y:J.y+J.height}),Ye=window.innerWidth,je=window.innerHeight,et=we.y+wt,tt=Oe.y-wt,He=u.th+(ye?wt+u.ph:0),m=et+He<=je-ot,D=tt-He>=ot,z=m||!D,W=(Oe.x+we.x)/2,Q=(l,L,ue)=>Math.max(L,Math.min(l,Math.max(L,ue))),ae=Q(W-u.tw/2,ot,Ye-u.tw-ot),Pe=z?et:tt-u.th,h=Q(W-u.pw/2,ot,Ye-u.pw-ot),V=ye?Q(z?Pe+u.th+wt:Pe-wt-u.ph,ot,je-u.ph-ot):0;return jsxRuntime.jsxs("div",{className:"drawui-style-floating",ref:T,children:[jsxRuntime.jsxs("div",{className:"drawui-style-toolbar",ref:H,style:{left:ae,top:Pe},children:[ge.map(l=>jsxRuntime.jsxs("button",{className:`drawui-style-tool-btn${d===l.key?" active":""}`,onClick:()=>b(d===l.key?null:l.key),"data-drawui-tip":drawuiCore.t($(l)),type:"button",children:[l.key==="fill"&&jsxRuntime.jsx("span",{className:`drawui-st-swatch${Qe(O)?" drawui-st-none":""}`,style:Qe(O)?void 0:{background:O}}),l.key==="stroke"&&(Ee?jsxRuntime.jsx("span",{className:`drawui-st-line${Qe(P)?" drawui-st-line-none":""}`,style:Qe(P)?void 0:{background:P}}):jsxRuntime.jsx("span",{className:`drawui-st-frame${Qe(P)?" drawui-st-frame-none":""}`,style:Qe(P)?void 0:{borderColor:P}})),l.key==="text"&&jsxRuntime.jsx("span",{className:"drawui-st-text",style:{color:X},children:"A"}),l.key==="highlight"&&jsxRuntime.jsx("span",{className:`drawui-st-hl${Qe(q)?" drawui-st-none":""}`,style:Qe(q)?void 0:{background:q},children:"A"})]},l.key)),a&&jsxRuntime.jsx("button",{className:`drawui-style-tool-btn${d==="more"?" active":""}`,onClick:()=>b(d==="more"?null:"more"),"data-drawui-tip":drawuiCore.t("style.connection"),type:"button",children:"\u22EF"}),Me&&jsxRuntime.jsx("button",{className:`drawui-style-tool-btn${d==="prefix"?" active":""}`,onClick:()=>b(d==="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"})]})})]}),ye&&jsxRuntime.jsx("div",{className:"drawui-style-popover",ref:I,style:{left:h,top:V},children:d==="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")})]}):k?jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("div",{className:"drawui-style-popover-title",children:drawuiCore.t($(k))}),jsxRuntime.jsxs("div",{className:"drawui-color-row",children:[k.hasTransparent&&!re&&jsxRuntime.jsx("button",{className:`drawui-color-swatch drawui-color-swatch-transparent${Qe(te[k.key])?" active":""}`,onClick:()=>U(k.key,"transparent"),"aria-label":drawuiCore.t("style.none"),type:"button"}),(re?drawuiCore.STICKY_NOTE_COLORS:k.hasTransparent?Fo:Vo).map(l=>jsxRuntime.jsx("button",{className:`drawui-color-swatch${On(l,te[k.key])?" active":""}`,style:{background:l},onClick:()=>U(k.key,l),"aria-label":l,type:"button"},l)),C.map(l=>jsxRuntime.jsx("button",{className:`drawui-color-swatch drawui-color-custom${On(l,te[k.key])?" active":""}`,style:{background:l},onClick:()=>U(k.key,l),"aria-label":l,type:"button"},`custom-${l}`)),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")})]})]}),k.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(Se(k.key)*100),onChange:l=>Ke(k.key,Number(l.target.value)/100),className:"drawui-opacity-slider"}),jsxRuntime.jsxs("span",{className:"drawui-opacity-value",children:[Math.round(Se(k.key)*100),"%"]})]})]}):jsxRuntime.jsx(jsxRuntime.Fragment,{children:jsxRuntime.jsx(Nt,{connectionType:y??"straight",arrowHead:c??"end",dashed:!!r,onConnectionTypeChange:be,onArrowStyleChange:ce})})})]})});var rn=14,Zn=20,nr=["#1f2937","#ef4444","#f97316","#facc15","#22c55e","#3b82f6","#8b5cf6","#ec4899","#9ca3af"],or=[12,14,16,18,20,24];function Gn(t,e){let n=t,a="",y=n.charAt(0);if(n.length>1&&(y==="+"||y==="-"||y==="#"||y==="~")&&n.charAt(1)===" "&&(a=y,n=n.slice(2)),n=n.replace(/^\s+|\s+$/g,""),e==="attribute"){let d=n.indexOf(":");return d===-1?{visibility:a,name:n,type:"",params:"",returnType:""}:{visibility:a,name:n.slice(0,d).replace(/^\s+|\s+$/g,""),type:n.slice(d+1).replace(/^\s+|\s+$/g,""),params:"",returnType:""}}let c=n.indexOf("(");if(c===-1){let d=n.lastIndexOf(":");return d===-1?{visibility:a,name:n,type:"",params:"",returnType:""}:{visibility:a,name:n.slice(0,d).replace(/^\s+|\s+$/g,""),type:"",params:"",returnType:n.slice(d+1).replace(/^\s+|\s+$/g,"")}}let r=n.slice(0,c).replace(/^\s+|\s+$/g,""),s=n.indexOf(")",c);if(s===-1)return {visibility:a,name:r,type:"",params:n.slice(c+1).replace(/^\s+|\s+$/g,""),returnType:""};let S=n.slice(c+1,s).replace(/^\s+|\s+$/g,""),f=n.slice(s+1).replace(/^\s+|\s+$/g,"");return f.startsWith(":")&&(f=f.slice(1).replace(/^\s+|\s+$/g,"")),{visibility:a,name:r,type:"",params:S,returnType:f}}function rr(t,e){let n=e.visibility?`${e.visibility} `:"";return t==="attribute"?`${n}${e.name}${e.type?`: ${e.type}`:""}`:`${n}${e.name}(${e.params??""})${e.returnType?`: ${e.returnType}`:""}`}var Vn=react.memo(function({editor:e,umlClass:n,editing:a}){let[,y]=react.useState(0);Z(),react.useEffect(()=>{if(!e)return;let m=e.subscribe(()=>y(D=>D+1));return ()=>{m();}},[e]);let[c,r]=react.useState(null),[s,S]=react.useState(false),[f,d]=react.useState(null),b=react.useRef(null),v=react.useRef(null),T=react.useCallback((m,D)=>{b.current&&(clearTimeout(b.current),b.current=null),r({section:m,rowId:D}),S(false);},[]),H=react.useCallback(()=>{b.current&&clearTimeout(b.current),b.current=window.setTimeout(()=>{r(null),S(false);},150);},[]);if(!e||!n||a!==n.id)return null;let I=e.getCamera(),{id:u,x:E,y:C,width:F,height:i,className:x,methods:p}=n,_=n.type==="uml-interface",w=_?[]:n.attributes,R=F/2,B=i/2,O=drawuiCore.UML_HEADER_HEIGHT,P=drawuiCore.UML_LINE_HEIGHT,X=drawuiCore.UML_PADDING_X,q=drawuiCore.UML_PADDING_Y,te=_?0:w.length>0?w.length*P+q*2:q*2,M=I.zoom,pe=(F-X*2)*M,Se=4*M,U=I.pageToScreen({x:E-R+X,y:C}),Ke=I.pageToScreen({x:E,y:C-B+O/2}),be=m=>I.pageToScreen({x:E,y:m}).y,ce=P*M,Ee=m=>C+(-B+O+q+P/2+m*P),Me=m=>C+(-B+O+te+q+P/2+m*P),Re=C+(-B+O+te),ge=C+B,$={background:"#ffffff",borderWidth:1,borderStyle:"solid",borderColor:"transparent",outline:"none",padding:0,fontFamily:"sans-serif",boxSizing:"border-box"},k=(m,D)=>{if(!w.find(Q=>Q.id===m))return;let W=Gn(D,"attribute");e.updateUmlClass(u,{attributes:w.map(Q=>Q.id===m?{...Q,...W}:Q)});},ye=(m,D)=>{if(!p.find(ae=>ae.id===m))return;let W=Gn(D,"method"),Q=p.map(ae=>ae.id===m?{...ae,...W}:ae);_?e.updateUmlInterface(u,{methods:Q}):e.updateUmlClass(u,{methods:Q});},re=(m,D,z)=>{v.current={section:m,from:D},z.dataTransfer.effectAllowed="move",z.dataTransfer.setData("text/plain",`${m}:${D}`);},de=m=>{m.preventDefault(),m.dataTransfer.dropEffect="move";},J=(m,D,z)=>{z.preventDefault();let W=v.current;!W||W.section!==m||(m==="attribute"?e.reorderUmlAttribute(u,W.from,D):e.reorderUmlMethod(u,W.from,D),v.current=null);},Oe=(m,D,z,W)=>{let Q=be(W),ae=c?.section===m&&c.rowId===z.id,Pe=(z.fontSize||drawuiCore.UML_FONT_SIZE)*M,h=z.textColor||"#1f2937",V={position:"absolute",left:U.x-rn*M-Se,top:Q-ce/2,width:rn*M+Se+pe+Zn*M,height:ce,display:"flex",alignItems:"center",gap:2,pointerEvents:"none",zIndex:53},l={...$,width:pe,height:ce-2,fontSize:Pe,color:h,textDecoration:z.strikethrough?"line-through":"none",pointerEvents:"auto",...ae?{borderColor:"var(--dw-primary)"}:{}},L={width:rn*M,height:ce-2,cursor:"grab",color:"#9ca3af",display:"flex",alignItems:"center",justifyContent:"center",userSelect:"none",fontSize:12*M,lineHeight:1,opacity:ae?1:.55,pointerEvents:"auto"},ue={width:Zn*M,height:ce-6,border:"none",background:"transparent",color:"#9ca3af",cursor:"pointer",borderRadius:3,fontSize:14*M,opacity:ae?1:.35,pointerEvents:"auto"};return jsxRuntime.jsxs("div",{style:V,onDragOver:de,onDrop:G=>J(m,D,G),children:[jsxRuntime.jsx("span",{style:L,draggable:true,onDragStart:G=>re(m,D,G),"data-drawui-tip":drawuiCore.t("uml.drag"),children:"\u22EE\u22EE"}),jsxRuntime.jsx("input",{style:l,value:f&&f.rowId===z.id?f.text:rr(m,z),onChange:G=>{d({rowId:z.id,text:G.target.value}),m==="attribute"?k(z.id,G.target.value):ye(z.id,G.target.value);},onFocus:()=>T(m,z.id),onBlur:()=>{d(null),H();},spellCheck:false}),jsxRuntime.jsx("button",{style:ue,onMouseDown:G=>G.preventDefault(),onClick:()=>{m==="attribute"?e.removeUmlAttribute(u,z.id):e.removeUmlMethod(u,z.id);},"data-drawui-tip":drawuiCore.t("uml.delete"),children:"\xD7"})]},z.id)},we=(m,D,z)=>{let W=be(D),Q=m==="attribute";return jsxRuntime.jsxs("button",{onMouseDown:ae=>ae.preventDefault(),onClick:()=>Q?e.addUmlAttribute(u):e.addUmlMethod(u),className:"drawui-uml-add-row",style:{position:"absolute",left:U.x,top:W-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":z,children:[jsxRuntime.jsx("span",{style:{fontSize:13*M,lineHeight:1},children:"+"}),jsxRuntime.jsx("span",{children:z})]},`add-${m}`)},Ye=()=>{if(!c||c.section==="className")return null;let m=c.section,D=c.rowId,W=(m==="attribute"?w:p).find(he=>he.id===D);if(!W)return null;let Q=224*M,ae=30*M,Pe=I.pageToScreen({x:E,y:C}).x,h=I.pageToScreen({x:E,y:C-B}).y,V=20*M,l=h-ae-V,L=Pe-Q/2,ue=l+ae,G=W.textColor||"#1f2937",$e=W.fontSize||drawuiCore.UML_FONT_SIZE,mt=!!W.strikethrough;return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("div",{style:{position:"absolute",left:Pe-.5,top:ue,width:1,height:V,background:"#d1d5db",pointerEvents:"none",zIndex:59}}),jsxRuntime.jsxs("div",{className:"drawui-uml-toolbar",style:{position:"absolute",left:L,top:l,width:Q,height:ae,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:he=>he.preventDefault(),children:[jsxRuntime.jsxs("div",{style:{position:"relative"},children:[jsxRuntime.jsxs("button",{onClick:()=>S(he=>!he),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:G,fontSize:13*M,textDecoration:mt?"line-through":"none"},children:"A"}),jsxRuntime.jsx("span",{style:{width:10*M,height:2*M,background:G,marginLeft:3,borderRadius:1}})]}),s&&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(u,m,W.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")}),nr.map(he=>jsxRuntime.jsx("button",{onClick:()=>{e.updateUmlRowStyle(u,m,W.id,{textColor:he}),S(false);},style:{width:14,height:14,border:"none",background:he,cursor:"pointer",borderRadius:2},"data-drawui-tip":he},he))]})]}),jsxRuntime.jsx("select",{value:$e,onChange:he=>e.updateUmlRowStyle(u,m,W.id,{fontSize:Number(he.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:or.map(he=>jsxRuntime.jsx("option",{value:he,children:he},he))}),jsxRuntime.jsx("button",{onClick:()=>e.updateUmlRowStyle(u,m,W.id,{strikethrough:!mt}),className:"drawui-uml-toolbar-btn","data-drawui-tip":drawuiCore.t("uml.strikethrough"),style:{border:"none",background:mt?"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:()=>{m==="attribute"?e.removeUmlAttribute(u,W.id):e.removeUmlMethod(u,W.id),r(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"})]})})]})]})},je=I.pageToScreen({x:E-R,y:C}).x,et=I.pageToScreen({x:E,y:C-B}).y,tt=F*M,He=i*M;return jsxRuntime.jsxs("div",{style:{position:"absolute",inset:0,pointerEvents:"none",zIndex:50},children:[jsxRuntime.jsx("div",{style:{position:"absolute",left:je+1,top:et+1,width:Math.max(0,tt-2),height:Math.max(0,He-2),background:"#ffffff",pointerEvents:"none",zIndex:51}}),jsxRuntime.jsx("input",{style:{...$,position:"absolute",left:Ke.x-pe/2,top:Ke.y-O*M/2+2,width:pe,height:O*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:x,onChange:m=>_?e.updateUmlInterface(u,{className:m.target.value}):e.updateUmlClass(u,{className:m.target.value}),onFocus:()=>T("className",""),onBlur:H,spellCheck:false}),!_&&jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[w.map((m,D)=>Oe("attribute",D,m,Ee(D))),we("attribute",Re,"\u5C5E\u6027")]}),p.map((m,D)=>Oe("method",D,m,Me(D))),we("method",ge,drawuiCore.t("uml.method")),Ye()]})});var qn=react.memo(function({editor:e,panelOpen:n,onOpenPanel:a}){let[,y]=react.useState(0);Z(),react.useEffect(()=>{if(!e)return;let i=e.subscribe(()=>y(x=>x+1));return ()=>{i();}},[e]);let c=react.useRef(false),r=react.useRef(false),s=e?.getMindMapEditingShapeId()??null,S=e?.getMindMapSelectedNode()?.nodeId??"",f=s?`${s}\0${S}`:"";if(react.useEffect(()=>{c.current=false;},[f]),!e)return null;let d=e.getMindMapEditingShapeId();if(!d||n)return null;let b=e.getMindMapSelectedNode();if(!b||b.shapeId!==d)return null;let v=e.getMindMapNode(d,b.nodeId),T=e.getMindMapNodeScreenRect(d,b.nodeId);if(!v||!T)return null;let H=e.getCamera().getZoom(),I=drawuiCore.MINDMAP_FONT_SIZE*H,u=Math.max(100,T.width+24),E=T.height+8,C={position:"absolute",left:T.x+T.width/2,top:T.y-4,transform:"translateX(-50%)",width:u,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 ${(v.icon?24:12)*H}px`,fontFamily:"sans-serif",fontSize:I,color:"#1f2937",boxSizing:"border-box",pointerEvents:"auto",zIndex:55},F={position:"absolute",left:T.x+T.width+12,top:T.y+T.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:v.text,spellCheck:false,onChange:i=>{let x=!c.current;c.current=true,e.updateMindMapNode(d,b.nodeId,{text:i.target.value},x);},onBlur:()=>{if(r.current){r.current=false;return}e.exitMindMapEdit();},onKeyDown:i=>{i.key==="Enter"?i.target.blur():i.key==="Escape"&&e.exitMindMapEdit();}}),jsxRuntime.jsx("button",{style:F,"data-drawui-tip":drawuiCore.t("mindmap.more"),onMouseDown:i=>{i.preventDefault(),r.current=true,setTimeout(()=>{r.current=false;},300);},onClick:a,children:"\u22EF"})]})});var eo=react.memo(function({editor:e,panelOpen:n}){let[,a]=react.useState(0);Z(),react.useEffect(()=>{if(!e)return;let E=e.subscribe(()=>a(C=>C+1));return ()=>{E();}},[e]);let y=react.useRef(false),c=e?.getTableEditing()??null,r=c?`${c.shapeId}\0${c.row}\0${c.col}`:"";if(react.useEffect(()=>{y.current=false;},[r]),!e||n)return null;let s=e.getTableEditing();if(!s)return null;let{shapeId:S,row:f,col:d}=s,b=e.getTableCell(S,f,d),v=e.getTableScreenRect(S,f,d);if(!b||!v)return null;let T=e.getSelectedTable(),H=b.fontSize||T?.fontSize||drawuiCore.TABLE_FONT_SIZE,I=e.getCamera().getZoom(),u={left:v.x-1,top:v.y-1,width:v.width+2,height:v.height+2,padding:`${drawuiCore.TABLE_CELL_PADDING_Y*I}px ${drawuiCore.TABLE_CELL_PADDING_X*I}px`,fontFamily:"sans-serif",fontSize:H*I,lineHeight:drawuiCore.TABLE_LINE_HEIGHT_RATIO,fontWeight:b.bold?700:400,color:b.textColor||T?.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:u,value:b.text,spellCheck:false,onChange:E=>{let C=!y.current;y.current=true,e.updateTableCell(S,f,d,{text:E.target.value},C);},onBlur:()=>{e.exitTableEdit();},onKeyDown:E=>{(E.key==="Enter"||E.key==="Escape")&&(E.preventDefault(),E.target.blur());}})})});var oo=react.memo(function({editor:e}){let[,n]=react.useState(0),[a,y]=react.useState(null),c=react.useRef(null);if(Z(),react.useEffect(()=>{if(!e)return;let P=e.subscribe(()=>n(X=>X+1));return ()=>{P();}},[e]),react.useEffect(()=>{if(!a)return;let P=q=>{let te=q.target;te&&c.current?.contains(te)||y(null);},X=q=>{q.key==="Escape"&&y(null);};return window.addEventListener("pointerdown",P,true),window.addEventListener("keydown",X),()=>{window.removeEventListener("pointerdown",P,true),window.removeEventListener("keydown",X);}},[a]),!e)return null;let r=e.getSelectedTable();if(!r)return null;let s=e.getTableSelection();if(!s||s.shapeId!==r.id)return null;let S=e.getTableScreenRect(r.id);if(!S)return null;let f=r.cells.length,d=r.cells[0]?.length??0,b=drawuiCore.tableExpandRangeToMerges(r,s.anchor.row,s.anchor.col,s.focus.row,s.focus.col),{r1:v,c1:T,r2:H,c2:I}=b,u=drawuiCore.tableCoveredMap(r.cells),E=0;for(let P=v;P<=H;P++)for(let X=T;X<=I;X++)u[P]?.[X]||E++;let C=E>1,F=drawuiCore.tableRangeHasMerge(r,v,T,H,I),i=v===H?`${v+1}`:`${v+1}\u2013${H+1}`,x=T===I?`${T+1}`:`${T+1}\u2013${I+1}`,p=f-(H-v+1)>=1,_=d-(I-T+1)>=1,R=S.y>56?S.y-40:S.y+S.height+10,B=P=>P.stopPropagation(),O=P=>()=>{P(),y(null);};return jsxRuntime.jsxs("div",{className:"drawui-table-toolbar","data-table-toolbar":r.id,style:{left:S.x+S.width/2,top:R},onPointerDown:B,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(r.id,"below"),children:drawuiCore.t("table.insertRow")}),jsxRuntime.jsx("button",{className:`drawui-table-btn-caret ${a==="row"?"active":""}`,"data-table-insert-row":true,title:`${drawuiCore.t("table.insertRowAbove")} / ${drawuiCore.t("table.insertRowBelow")}`,onClick:()=>y(a==="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"})})}),a==="row"&&jsxRuntime.jsxs("div",{className:"drawui-table-menu",ref:c,"data-table-row-menu":true,children:[jsxRuntime.jsx("button",{onClick:O(()=>e.insertTableRowRelative(r.id,"above")),children:drawuiCore.t("table.insertRowAbove")}),jsxRuntime.jsx("button",{onClick:O(()=>e.insertTableRowRelative(r.id,"below")),children:drawuiCore.t("table.insertRowBelow")})]})]}),jsxRuntime.jsx("button",{title:`${drawuiCore.t("table.deleteRow")} \xB7 ${i}`,disabled:!p,onClick:()=>e.deleteTableRowsInSelection(r.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(r.id,"right"),children:drawuiCore.t("table.insertCol")}),jsxRuntime.jsx("button",{className:`drawui-table-btn-caret ${a==="col"?"active":""}`,"data-table-insert-col":true,title:`${drawuiCore.t("table.insertColLeft")} / ${drawuiCore.t("table.insertColRight")}`,onClick:()=>y(a==="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"})})}),a==="col"&&jsxRuntime.jsxs("div",{className:"drawui-table-menu",ref:c,"data-table-col-menu":true,children:[jsxRuntime.jsx("button",{onClick:O(()=>e.insertTableColumnRelative(r.id,"left")),children:drawuiCore.t("table.insertColLeft")}),jsxRuntime.jsx("button",{onClick:O(()=>e.insertTableColumnRelative(r.id,"right")),children:drawuiCore.t("table.insertColRight")})]})]}),jsxRuntime.jsx("button",{title:`${drawuiCore.t("table.deleteCol")} \xB7 ${x}`,disabled:!_,onClick:()=>e.deleteTableColsInSelection(r.id),children:drawuiCore.t("table.deleteCol")}),jsxRuntime.jsx("button",{title:drawuiCore.t("table.merge"),disabled:!C,onClick:()=>e.mergeTableCells(r.id),children:drawuiCore.t("table.merge")}),jsxRuntime.jsx("button",{title:drawuiCore.t("table.split"),disabled:!F,onClick:()=>e.splitTableCells(r.id),children:drawuiCore.t("table.split")})]})});var ro=[...drawuiCore.MINDMAP_COLORS,"#1f2937","#9ca3af"],ao=["\u{1F4A1}","\u2B50","\u{1F525}","\u{1F4CC}","\u2705","\u2757","\u26A0\uFE0F","\u{1F3F7}\uFE0F"],Nr={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"},an={fontSize:11,color:"#6b7280",marginBottom:4,display:"block"},Pt={display:"flex",gap:4,alignItems:"center",flexWrap:"wrap"},At={border:"1px solid #e5e7eb",background:"#ffffff",borderRadius:5,padding:"3px 8px",fontSize:12,color:"#374151",cursor:"pointer",lineHeight:1.5},sn={width:"100%",border:"1px solid #e5e7eb",borderRadius:5,padding:"4px 8px",fontSize:12,outline:"none",boxSizing:"border-box",background:"#ffffff",color:"#1f2937"},io=react.memo(function({editor:e,mindMap:n}){let[,a]=react.useState(0);Z(),react.useEffect(()=>{if(!e)return;let i=e.subscribe(()=>a(x=>x+1));return ()=>{i();}},[e]);let y=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 r=i=>{if(i.id===c.nodeId)return i;for(let x of i.children??[]){let p=r(x);if(p)return p}return null},s=r(n.root);if(!s)return null;let S=e.getCamera(),d=drawuiCore.layoutMindMap(n.root).positions.get(s.id);if(!d)return null;let b=S.zoom,v=S.pageToScreen({x:n.x+d.x,y:n.y+d.y}),T=v.x+d.width*b/2+14,H=v.y-80,u=Math.max(8,Math.min(T,(window.innerWidth||1024)-232-8)),E=Math.max(8,Math.min(H,(window.innerHeight||768)-320)),C=i=>{e.updateMindMapNode(n.id,s.id,i);},F=!!s.id&&s.id!==n.root.id;return jsxRuntime.jsxs("div",{ref:y,style:{...Nr,left:u,top:E},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:{...sn,marginBottom:8},value:s.text,onChange:i=>C({text:i.target.value}),spellCheck:false}),jsxRuntime.jsxs("div",{style:{...Pt,marginBottom:10},children:[jsxRuntime.jsxs("button",{style:At,onClick:()=>e.addMindMapChild(n.id,s.id),children:["+ ",drawuiCore.t("mindmap.addChild")]}),F&&jsxRuntime.jsxs("button",{style:At,onClick:()=>e.addMindMapSibling(n.id,s.id),children:["+ ",drawuiCore.t("mindmap.addSibling")]}),!!s.children?.length&&jsxRuntime.jsx("button",{style:At,onClick:()=>e.toggleMindMapCollapse(n.id,s.id),children:s.collapsed?drawuiCore.t("mindmap.expand"):drawuiCore.t("mindmap.collapse")}),jsxRuntime.jsx("button",{style:{...At,color:"#ef4444",borderColor:"#fecaca",marginLeft:"auto"},onClick:()=>e.deleteMindMapNode(n.id,s.id),children:drawuiCore.t("mindmap.deleteNode")})]}),jsxRuntime.jsx("span",{style:an,children:drawuiCore.t("mindmap.color")}),jsxRuntime.jsxs("div",{style:{...Pt,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}}),ro.map(i=>jsxRuntime.jsx("button",{"data-drawui-tip":i,onClick:()=>C({color:i}),style:{width:18,height:18,borderRadius:4,border:s.color===i?"2px solid #111827":"1px solid #d1d5db",background:i,cursor:"pointer",flexShrink:0}},i))]}),jsxRuntime.jsx("span",{style:an,children:drawuiCore.t("mindmap.icon")}),jsxRuntime.jsxs("div",{style:{...Pt,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:s.icon?"1px solid #d1d5db":"2px solid #111827",background:"#f9fafb",cursor:"pointer",fontSize:11,color:"#9ca3af",lineHeight:1},children:"\u2205"}),ao.map(i=>jsxRuntime.jsx("button",{onClick:()=>C({icon:i}),style:{width:22,height:22,borderRadius:4,border:s.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:s.icon&&!ao.includes(s.icon)?s.icon:"",onKeyDown:i=>{if(i.key==="Enter"){let x=i.target.value.trim();C({icon:x||void 0});}},onBlur:i=>{let x=i.target.value.trim();x!==s.icon&&C({icon:x||void 0});},style:{...sn,width:56,padding:"2px 4px",textAlign:"center"}})]}),jsxRuntime.jsx("span",{style:an,children:drawuiCore.t("mindmap.note")}),jsxRuntime.jsx("input",{style:{...sn,marginBottom:6},value:s.note??"",placeholder:drawuiCore.t("mindmap.notePlaceholder"),onChange:i=>C({note:i.target.value||void 0}),spellCheck:false}),!!s.note&&jsxRuntime.jsxs("div",{style:{...Pt,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:s.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"}}),ro.map(i=>jsxRuntime.jsx("button",{onClick:()=>C({noteColor:i}),style:{width:16,height:16,borderRadius:3,border:s.noteColor===i?"2px solid #111827":"1px solid #d1d5db",background:i,cursor:"pointer"}},i))]})]})});var cn=220,dn=140,Pr="#fafafa";function Ar(t,e){let n=Math.min(t.x,e.x),a=Math.min(t.y,e.y),y=Math.max(t.x+t.width,e.x+e.width),c=Math.max(t.y+t.height,e.y+e.height);return {x:n,y:a,width:y-n,height:c-a}}function Kr(t){return {x:t.x+t.width/2,y:t.y+t.height/2}}function Or(){return {x:0,y:0,width:0,height:0}}function $r(t){let e=1/0,n=1/0,a=-1/0,y=-1/0,c=false;for(let r of t){let s=pn(r);s&&(c=true,s.x<e&&(e=s.x),s.y<n&&(n=s.y),s.x+s.width>a&&(a=s.x+s.width),s.y+s.height>y&&(y=s.y+s.height));}return c?{x:e,y:n,width:a-e,height:y-n}:null}function pn(t){switch(t.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:t.x-t.width/2,y:t.y-t.height/2,width:t.width,height:t.height};case "circle":return {x:t.x-t.radius,y:t.y-t.radius,width:t.radius*2,height:t.radius*2};case "line":case "arrow":{let e=t.points;if(!e||e.length===0)return null;let n=1/0,a=1/0,y=-1/0,c=-1/0;for(let r of e)r.x<n&&(n=r.x),r.y<a&&(a=r.y),r.x>y&&(y=r.x),r.y>c&&(c=r.y);return {x:n,y:a,width:y-n,height:c-a}}case "draw":{let e=t,n=e.width,a=e.height;if(typeof n=="number"&&typeof a=="number")return {x:e.x-n/2,y:e.y-a/2,width:n,height:a};let y=e.points;if(!y||y.length===0)return null;let c=1/0,r=1/0,s=-1/0,S=-1/0;for(let f of y){let d=f.x+e.x,b=f.y+e.y;d<c&&(c=d),b<r&&(r=b),d>s&&(s=d),b>S&&(S=b);}return {x:c,y:r,width:s-c,height:S-r}}default:return null}}function Dr(t){let e=t.getCamera(),n=e.screenToPage({x:0,y:0}),a=e.screenToPage({x:window.innerWidth,y:window.innerHeight});return {x:n.x,y:n.y,width:a.x-n.x,height:a.y-n.y}}function Br(t,e,n){if(t.width<=0||t.height<=0)return {x:t.x-e/2,y:t.y-n/2,width:e,height:n};let a=e/n,y=t.width,c=y/a;c<t.height&&(c=t.height,y=c*a);let r=Kr(t);return {x:r.x-y/2,y:r.y-c/2,width:y,height:c}}function un(t,e,n,a){let y=(t-n.left)/n.width,c=(e-n.top)/n.height;return {x:a.x+y*a.width,y:a.y+c*a.height}}var co=react.memo(function({editor:e}){let n=react.useRef(null),a=react.useRef(null),[y,c]=react.useState(false),[r,s]=react.useState(100),[S,f]=react.useState(false),[d,b]=react.useState(false);Z();let v=react.useRef(null),T=react.useRef(null);react.useLayoutEffect(()=>{let i=n.current,x=a.current;if(!i||!x)return;let p=window.devicePixelRatio||1;i.width=Math.round(cn*p),i.height=Math.round(dn*p),i.style.width=`${cn}px`,i.style.height=`${dn}px`;},[y]);let H=react.useCallback(()=>{let i=n.current,x=a.current;if(!i||!x||!e)return;let p=i.getContext("2d");if(!p)return;let _=cn,w=dn,R=i.width,B=i.height,O=e.getShapes(),P=new Set(e.getSelectedIds()),X=drawuiCore.getTheme(),q=drawuiCore.hexToRgba(X.text,.16),te=X.primary,M=drawuiCore.hexToRgba(X.primary,.18),pe=drawuiCore.hexToRgba(X.primary,.85),Se=$r(O),U=Dr(e),Ke=Se?Ar(Se,U):U.width>0?U:Or(),be=Br(Ke,_,w);T.current=be;let ce=R/be.width,Ee=B/be.height,Me=_/be.width;p.setTransform(1,0,0,1,0,0),p.fillStyle=Pr,p.fillRect(0,0,R,B),p.setTransform(ce,0,0,Ee,-ce*be.x,-Ee*be.y),p.fillStyle=q;for(let $ of O){let k=pn($);k&&p.fillRect(k.x,k.y,k.width,k.height);}p.fillStyle=te;for(let $ of O){if(!P.has($.id))continue;let k=pn($);k&&p.fillRect(k.x,k.y,k.width,k.height);}p.fillStyle=M,p.fillRect(U.x,U.y,U.width,U.height);let Re=1.5/Me;p.strokeStyle=pe,p.lineWidth=Re,p.lineJoin="round";let ge=Math.min(U.width/6,U.height/6,6/Me);if(p.beginPath(),ge*Me<1)p.rect(U.x,U.y,U.width,U.height);else {let $=U.x,k=U.y,ye=U.width,re=U.height,de=Math.min(ge,ye/2,re/2);p.moveTo($+de,k),p.lineTo($+ye-de,k),p.quadraticCurveTo($+ye,k,$+ye,k+de),p.lineTo($+ye,k+re-de),p.quadraticCurveTo($+ye,k+re,$+ye-de,k+re),p.lineTo($+de,k+re),p.quadraticCurveTo($,k+re,$,k+re-de),p.lineTo($,k+de),p.quadraticCurveTo($,k,$+de,k),p.closePath();}p.stroke(),p.setTransform(1,0,0,1,0,0);},[e]);react.useEffect(()=>{if(!e||y)return;H();let i=e.subscribe(H),x=drawuiCore.subscribeTheme(H),p=()=>H();return window.addEventListener("resize",p),()=>{i(),x(),window.removeEventListener("resize",p);}},[e,y,H]),react.useEffect(()=>{if(!e)return;let i=()=>{let p=e.getCamera().getZoom();s(Math.round(p*100));};i();let x=e.subscribe(i);return ()=>{x();}},[e]);let I=react.useCallback((i,x)=>{if(!e)return;let p=e.getCamera(),_=p.getZoom(),w=window.innerWidth/2,R=window.innerHeight/2,B=p;B.x=w-i*_,B.y=R-x*_,e.requestRender();},[e]),u=i=>{if(!e||!a.current||i.button!==0)return;let x=a.current.getBoundingClientRect(),p=T.current;if(!p)return;let _=un(i.clientX,i.clientY,x,p);v.current={pointerId:i.pointerId,rect:{left:x.left,top:x.top,width:x.width,height:x.height},canvasBox:p},i.currentTarget.setPointerCapture(i.pointerId),b(true),I(_.x,_.y);},E=i=>{if(!d||!e||!v.current||!a.current)return;let x=v.current,p=un(i.clientX,i.clientY,x.rect,x.canvasBox);I(p.x,p.y);},C=i=>{if(d){b(false),v.current=null;try{i.currentTarget.releasePointerCapture(i.pointerId);}catch{}}},F=i=>{if(!e||!a.current)return;let x=T.current;if(!x)return;let p=a.current.getBoundingClientRect(),_=un(i.clientX,i.clientY,p,x);I(_.x,_.y);};return jsxRuntime.jsxs("div",{className:`drawui-minimap ${y?"collapsed":""}`,children:[jsxRuntime.jsx("button",{className:"drawui-minimap-toggle",onClick:()=>c(i=>!i),"data-drawui-tip":y?drawuiCore.t("minimap.expand"):drawuiCore.t("minimap.collapse"),"data-drawui-tip-pos":"top","aria-label":y?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:y?jsxRuntime.jsx("polyline",{points:"9 6 15 12 9 18"}):jsxRuntime.jsx("polyline",{points:"15 6 9 12 15 18"})})}),!y&&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:[r,"%"]})]}),jsxRuntime.jsx("div",{ref:a,className:"drawui-minimap-canvas-wrap",style:{cursor:d?"grabbing":S?"pointer":"default"},onPointerEnter:()=>f(true),onPointerLeave:()=>f(false),children:jsxRuntime.jsx("canvas",{ref:n,className:"drawui-minimap-canvas",onPointerDown:u,onPointerMove:E,onPointerUp:C,onPointerCancel:C,onDoubleClick:F})})]})]})});var ke=t=>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:t}),Wr=[{type:"rectangle",labelKey:"shape.rectangle",glyph:ke(jsxRuntime.jsx("rect",{x:"4",y:"7",width:"16",height:"10",rx:"1"}))},{type:"rounded-rectangle",labelKey:"shape.rounded-rectangle",glyph:ke(jsxRuntime.jsx("rect",{x:"4",y:"7",width:"16",height:"10",rx:"4"}))},{type:"circle",labelKey:"shape.circle",glyph:ke(jsxRuntime.jsx("circle",{cx:"12",cy:"12",r:"5.5"}))},{type:"ellipse",labelKey:"shape.ellipse",glyph:ke(jsxRuntime.jsx("ellipse",{cx:"12",cy:"12",rx:"7",ry:"4.5"}))},{type:"diamond",labelKey:"shape.diamond",glyph:ke(jsxRuntime.jsx("path",{d:"M12 5 L19 12 L12 19 L5 12 Z"}))},{type:"triangle",labelKey:"shape.triangle",glyph:ke(jsxRuntime.jsx("path",{d:"M12 4 L20 19 H4 Z"}))},{type:"hexagon",labelKey:"shape.hexagon",glyph:ke(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:ke(jsxRuntime.jsx("path",{d:"M6 7 L19 7 L16 17 H7 Z"}))},{type:"trapezoid",labelKey:"shape.trapezoid",glyph:ke(jsxRuntime.jsx("path",{d:"M7 6 H17 L20 18 H4 Z"}))},{type:"pentagon",labelKey:"shape.pentagon",glyph:ke(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:ke(jsxRuntime.jsx("path",{d:"M8 4 H16 L20 8 V16 L16 20 H8 L4 16 V8 Z"}))},{type:"star",labelKey:"shape.star",glyph:ke(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:ke(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:ke(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:ke(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:ke(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 uo({editor:t,x:e,y:n,context:a,existingArrowId:y,defaultShapeType:c,onClose:r}){let s=react.useRef(null);Z();let S=f=>{t?.createGeneratedConnection(a,{type:f,existingArrowId:y}),r();};return react.useEffect(()=>{let f=v=>{s.current&&!s.current.contains(v.target)&&r();},d=v=>{v.key==="Escape"&&(v.preventDefault(),r());},b=setTimeout(()=>{window.addEventListener("pointerdown",f,true),window.addEventListener("keydown",d,true);},0);return ()=>{clearTimeout(b),window.removeEventListener("pointerdown",f,true),window.removeEventListener("keydown",d,true);}},[r]),jsxRuntime.jsxs("div",{className:"drawui-gen-menu",ref:s,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:Wr.map(f=>jsxRuntime.jsxs("button",{className:`drawui-gen-shape-btn${f.type===c?" 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 Fr=typeof navigator<"u"&&/mac|iphone|ipad/i.test(navigator.platform||navigator.userAgent);function Ne(t){if(Fr)switch(t){case "copy":return "\u2318C";case "copyAsImage":return "\u21E7\u2318C";case "paste":return "\u2318V";case "duplicate":return "\u2318D";case "copyStyle":return "\u2325\u2318C";case "pasteStyle":return "\u2325\u2318V";case "lock":return "\u2325\u2318L";case "flipH":return "\u21E7H";case "flipV":return "\u21E7V";case "delete":return "\u232B";case "group":return "\u2318G";case "ungroup":return "\u21E7\u2318G"}switch(t){case "copy":return "Ctrl + C";case "copyAsImage":return "Ctrl + Shift + C";case "paste":return "Ctrl + V";case "duplicate":return "Ctrl + D";case "copyStyle":return "Ctrl + Alt + C";case "pasteStyle":return "Ctrl + Alt + V";case "lock":return "Ctrl + Alt + L";case "flipH":return "Shift + H";case "flipV":return "Shift + V";case "delete":return "Del";case "group":return "Ctrl + G";case "ungroup":return "Ctrl + Shift + G"}}var yo={sep:true},Vr=t=>"sep"in t&&t.sep===true;function ho({editor:t,pos:e,onClose:n}){Z();let[,a]=react.useState(0),y=react.useRef(null),[c,r]=react.useState(null),[s,S]=react.useState(null);react.useEffect(()=>{let w=t.subscribe(()=>a(R=>R+1));return ()=>{w();}},[t]),react.useLayoutEffect(()=>{let w=y.current;if(!w)return;let R=w.getBoundingClientRect(),B=Math.max(8,Math.min(e.x,window.innerWidth-R.width-8)),O=Math.max(8,Math.min(e.y,window.innerHeight-R.height-8));r({left:B,top:O});},[e.x,e.y]),react.useEffect(()=>{let w=O=>{y.current&&!y.current.contains(O.target)&&n();},R=O=>{O.key==="Escape"&&(O.preventDefault(),n());},B=setTimeout(()=>{window.addEventListener("pointerdown",w,true),window.addEventListener("keydown",R,true);},0);return ()=>{clearTimeout(B),window.removeEventListener("pointerdown",w,true),window.removeEventListener("keydown",R,true);}},[n]);let f=t.getSelectedIds(),d=f.length>0,b=e.shapeId,v=b?t.isShapeLocked(b):false,T=t.getSelectedShapes().some(w=>!w.locked&&drawuiCore.isFlippableShapeType(w.type)),H=d&&!v&&t.hasCopiedStyle(),I=t.hasClipboard(),u=d&&!v,E=d&&!v?t.getSelectedGroupId():null,C=d&&!v&&f.length>=2&&!E,i=(b?t.getShapes().find(w=>w.id===b):void 0)?.groupId??null,x=E?true:!!i&&!v,p=w=>()=>{w(),n();},_;return v?_=i?[{key:"ctx.unlockGroup",action:p(()=>i&&t.setGroupLocked(i,false))},{key:"ctx.ungroup",shortcut:Ne("ungroup"),action:p(()=>i&&t.ungroupIds([i]))}]:[{key:"ctx.unlock",action:()=>b&&t.setShapeLocked(b,false)}]:d?_=[{key:"ctx.copy",shortcut:Ne("copy"),action:p(()=>t.copySelected())},{key:"ctx.copyAsImage",shortcut:Ne("copyAsImage"),action:p(()=>{t.copySelectedAsImage();})},{key:"ctx.paste",shortcut:Ne("paste"),disabled:!I,action:p(()=>t.paste())},{key:"ctx.duplicate",shortcut:Ne("duplicate"),action:p(()=>t.duplicateSelected())},{key:"ctx.layer",submenu:[{key:"ctx.bringToFront",disabled:!u,action:()=>t.bringToFront()},{key:"ctx.bringForward",disabled:!u,action:()=>t.bringForward()},{key:"ctx.sendBackward",disabled:!u,action:()=>t.sendBackward()},{key:"ctx.sendToBack",disabled:!u,action:()=>t.sendToBack()}]},{key:"ctx.copyStyle",shortcut:Ne("copyStyle"),action:p(()=>t.copyStyle())},{key:"ctx.pasteStyle",shortcut:Ne("pasteStyle"),disabled:!H,action:p(()=>t.pasteStyle())},yo,{key:"ctx.flipH",shortcut:Ne("flipH"),disabled:!T,action:p(()=>t.flipSelected("horizontal"))},{key:"ctx.flipV",shortcut:Ne("flipV"),disabled:!T,action:p(()=>t.flipSelected("vertical"))},{key:"ctx.rotate",action:p(()=>t.rotateSelected90(true))},E?{key:"ctx.ungroup",shortcut:Ne("ungroup"),disabled:!x,action:p(()=>t.ungroupSelected())}:{key:"ctx.group",shortcut:Ne("group"),disabled:!C,action:p(()=>t.groupSelected())},yo,{key:"ctx.lock",shortcut:Ne("lock"),action:p(()=>t.setSelectedShapesLocked(true))},{key:"ctx.delete",shortcut:Ne("delete"),action:p(()=>t.deleteSelected())}]:_=[{key:"ctx.paste",shortcut:Ne("paste"),disabled:!I,action:p(()=>t.paste())}],jsxRuntime.jsx("div",{ref:y,className:"drawui-context-menu",style:c?{left:c.left,top:c.top}:{visibility:"hidden",left:e.x,top:e.y},onContextMenu:w=>w.preventDefault(),children:_.map((w,R)=>Vr(w)?jsxRuntime.jsx("div",{className:"drawui-context-sep"},`sep-${R}`):w.submenu?jsxRuntime.jsxs("div",{className:"drawui-context-sub",onMouseEnter:()=>S(w.key),onMouseLeave:()=>S(null),children:[jsxRuntime.jsxs("button",{type:"button",className:"drawui-context-item",disabled:w.disabled,children:[jsxRuntime.jsx("span",{children:drawuiCore.t(w.key)}),jsxRuntime.jsx("svg",{className:"drawui-context-caret",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:jsxRuntime.jsx("polyline",{points:"9 18 15 12 9 6"})})]}),s===w.key&&jsxRuntime.jsx("div",{className:"drawui-context-submenu",children:w.submenu.map(B=>jsxRuntime.jsx("button",{type:"button",className:"drawui-context-item",disabled:B.disabled,onClick:()=>{B.action(),n();},children:jsxRuntime.jsx("span",{children:drawuiCore.t(B.key)})},B.key))})]},w.key):jsxRuntime.jsxs("button",{type:"button",className:"drawui-context-item",disabled:w.disabled,onClick:w.action,children:[jsxRuntime.jsx("span",{children:drawuiCore.t(w.key)}),w.shortcut&&jsxRuntime.jsx("span",{className:"drawui-context-kbd",children:w.shortcut})]},w.key))})}var qr={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 Jr({initialTool:t="select",className:e="",themeColor:n,language:a="zh-CN",data:y,onChange:c,onReady:r}){let s=react.useRef(null),S=react.useRef(null),f=react.useRef(null),[d,b]=react.useState(null);Z();let[v,T]=react.useState(t),[H,I]=react.useState(false),[u,E]=react.useState(0),[C,F]=react.useState(false),[i,x]=react.useState("straight"),[p,_]=react.useState("end"),[w,R]=react.useState(false),[B,O]=react.useState(void 0),[P,X]=react.useState(100),[q,te]=react.useState(null),[M,pe]=react.useState(null),[Se,U]=react.useState(false),[Ke,be]=react.useState(false),[ce,Ee]=react.useState(null),[Me,Re]=react.useState(null),[ge,$]=react.useState(false),[k,ye]=react.useState(null),[re,de]=react.useState(null),J=react.useRef(null),Oe=react.useRef(0),we=react.useRef(null),Ye=react.useRef(c);Ye.current=c;let je=react.useRef(r);je.current=r,react.useEffect(()=>{if(!s.current)return;let g=new drawuiCore.Editor(s.current,{theme:n?{primary:n,editBorder:n,selection:{outline:n,handleStroke:n,handleFill:"#ffffff",outlineFill:drawuiCore.hexToRgba(n,.1),shadow:n}}:void 0,language:a,shapes:y,persist:!y});f.current=g,b(g),window.__drawuiEditor=g,g.setHighlighterColor(Ct()),g.setStickyNoteColor(St()),je.current?.(g),t&&g.setActiveTool(t);let K=g.subscribe(()=>{T(g.getActiveTool());let Y=g.getSelectedIds();E(Y.length);let Le=g.getShapes().filter(We=>Y.includes(We.id)&&(We.type==="line"||We.type==="arrow"));if(F(Le.length>0),Le.length>0&&Le[0].connectionType?x(Le[0].connectionType):Le.length>0&&x("straight"),Le.length>0){let We=Le.find(_t=>_t.type==="arrow");We&&(_(We.arrowHead??"end"),R(We.dashed??false));}X(Math.round(g.getCamera().getZoom()*100)),O(g.getArrowStyle()),U(g.canUndo()),be(g.canRedo());let _e=g.getSelectedUml();Ee(_e),_e||ye(null);let Xe=g.getSelectedMindMap();Re(Xe),g.getMindMapEditingShapeId()||$(false),Ye.current?.(g.getData());}),Ae=g.subscribeNotifications(Y=>{pe({type:"success",text:Y}),J.current&&clearTimeout(J.current),J.current=setTimeout(()=>pe(null),3500);}),ze=g.subscribeUi(Y=>{Y.kind==="shapeTypeMenu"&&de({x:Y.screenX,y:Y.screenY,context:Y.context,existingArrowId:Y.existingArrowId,defaultShapeType:Y.defaultShapeType});});return ()=>{K(),Ae(),ze(),J.current&&clearTimeout(J.current),cancelAnimationFrame(Oe.current),g.dispose();}},[t]),react.useEffect(()=>{if(!n)return;let g=S.current;g&&(g.style.setProperty("--dw-primary",n),g.style.setProperty("--dw-primary-hover",drawuiCore.shadeColor(n,-0.12)),g.style.setProperty("--dw-primary-weak",drawuiCore.hexToRgba(n,.1)),g.style.setProperty("--dw-primary-contrast","#ffffff"),g.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(a),f.current?.setLanguage(a);},[a]);let et=react.useCallback(g=>{f.current?.setActiveTool(g);},[]),tt=react.useCallback(()=>{f.current?.zoomIn();},[]),He=react.useCallback(()=>{f.current?.zoomOut();},[]),m=react.useCallback(()=>{f.current?.resetZoom();},[]),D=react.useCallback(()=>{let g=!H;I(g),f.current?.setShowGrid(g);},[H]),z=react.useCallback(()=>{f.current?.undo();},[]),W=react.useCallback(()=>{f.current?.redo();},[]),Q=react.useCallback(g=>{f.current?.downloadImage("drawui",g,{background:"#ffffff"});},[]),ae=react.useCallback(()=>{f.current?.downloadJSON("drawui-data");},[]),Pe=react.useCallback(g=>{let K=new FileReader;K.onload=()=>{let Ae=typeof K.result=="string"?K.result:"";if(f.current?.importJSON(Ae)??false){let Y=f.current?.getShapes().length??0;pe({type:"success",text:drawuiCore.t("import.success",{n:Y})});}else pe({type:"error",text:drawuiCore.t("import.fail")});J.current&&clearTimeout(J.current),J.current=setTimeout(()=>pe(null),3500);},K.onerror=()=>{pe({type:"error",text:drawuiCore.t("import.fail")}),J.current&&clearTimeout(J.current),J.current=setTimeout(()=>pe(null),3500);},K.readAsText(g,"utf-8");},[]),h=react.useCallback(g=>{let K=f.current,Ae=s.current;if(!K||!Ae)return;if(K.isPointerDown()){we.current!==null&&(we.current=null,te(null));return}let ze=g.clientX,Y=g.clientY;cancelAnimationFrame(Oe.current),Oe.current=requestAnimationFrame(()=>{let st=Ae.getBoundingClientRect(),Le=ze-st.left,_e=Y-st.top,Xe=Le+12,We=_e+12,_t=K.getSelectedUml()?.id,lt=K.getUmlRowAtScreenPoint({x:Le,y:_e});if(lt&&lt.shape.id!==_t&&lt.text&&K.isUmlRowTextTruncated(lt)){we.current!==lt.text&&(we.current=lt.text,te({text:lt.text,x:Xe,y:We}));return}let ut=K.getShapeAtScreenPoint({x:Le,y:_e});ut&&ut.text&&K.isShapeTextTruncated(ut.id)?we.current!==ut.text&&(we.current=ut.text,te({text:ut.text,x:Xe,y:We})):we.current!==null&&(we.current=null,te(null));});},[]),V=react.useCallback(()=>{te(null);},[]),l=react.useCallback(g=>{let K=f.current,Ae=s.current;if(!K||!Ae)return;let ze=Ae.getBoundingClientRect(),Y=g.clientX-ze.left,st=g.clientY-ze.top,Le=K.getUmlRowAtScreenPoint({x:Y,y:st});if(Le){ye(Le.shape.id);return}let _e=K.getMindMapNodeAtScreenPoint({x:Y,y:st});if(_e){K.beginMindMapEdit(_e.shapeId,_e.nodeId);return}let Xe=K.getTableAtScreenPoint({x:Y,y:st});Xe&&K.beginTableEdit(Xe.shapeId,Xe.row,Xe.col);},[]),L=react.useCallback(()=>{de(null);},[]),[ue,G]=react.useState(null),$e=react.useCallback(()=>G(null),[]),mt=react.useCallback(g=>{g.preventDefault();let K=f.current,Ae=s.current;if(!K||!Ae||K.isEditing())return;let ze=Ae.getBoundingClientRect(),Y=K.getShapeAtScreenPoint({x:g.clientX-ze.left,y:g.clientY-ze.top});Y?K.isShapeLocked(Y.id)?K.selectShapeRaw(Y.id):K.getSelectedIds().includes(Y.id)||K.selectShape(Y.id,g.shiftKey):K.selectShape("",false),G({x:g.clientX,y:g.clientY,shapeId:Y?.id??null});},[]),he=react.useCallback(g=>{g.preventDefault();},[]);return jsxRuntime.jsxs("div",{ref:S,className:`drawui-canvas-board ${e}`,onContextMenu:he,children:[jsxRuntime.jsx("canvas",{ref:s,className:"drawui-canvas",onMouseMove:h,onMouseLeave:V,onDoubleClick:l,onContextMenu:mt}),q&&jsxRuntime.jsx("div",{className:"drawui-tooltip",style:{left:q.x,top:q.y},children:q.text}),jsxRuntime.jsx(Jt,{activeTool:v,onToolChange:et,showGrid:H,onToggleGrid:D,canUndo:Se,canRedo:Ke,onUndo:z,onRedo:W,onExport:Q,onExportData:ae,onImportData:Pe,onHighlighterColorChange:g=>f.current?.setHighlighterColor(g),onStickyNoteColorChange:g=>f.current?.setStickyNoteColor(g),onInsertIcon:g=>f.current?.insertIcon(g),onInsertTable:(g,K)=>f.current?.insertTable(g,K),arrowStyle:B,onArrowStyleChange:g=>f.current?.setArrowStyle(g)}),jsxRuntime.jsx(en,{onZoomIn:tt,onZoomOut:He,onReset:m,zoomLevel:P}),jsxRuntime.jsx(_n,{editor:d,selectedCount:u,hasLineSelection:C,currentConnectionType:i,currentArrowHead:p,currentDashed:w}),jsxRuntime.jsx(Vn,{editor:d,umlClass:ce,editing:k}),jsxRuntime.jsx(oo,{editor:d}),jsxRuntime.jsx(eo,{editor:d,panelOpen:ge}),jsxRuntime.jsx(qn,{editor:d,panelOpen:ge,onOpenPanel:()=>$(true)}),ge&&jsxRuntime.jsx(io,{editor:d,mindMap:Me}),jsxRuntime.jsx(co,{editor:d}),re&&jsxRuntime.jsx(uo,{editor:d,x:re.x,y:re.y,context:re.context,existingArrowId:re.existingArrowId,defaultShapeType:re.defaultShapeType,onClose:L}),ue&&d&&jsxRuntime.jsx(ho,{editor:d,pos:ue,onClose:$e}),jsxRuntime.jsxs("div",{className:"drawui-status-bar",children:[jsxRuntime.jsx("div",{className:"drawui-status-item",children:jsxRuntime.jsx("span",{children:drawuiCore.t(qr[v])})}),jsxRuntime.jsx("div",{className:"drawui-status-item",children:jsxRuntime.jsx("span",{children:u===0?drawuiCore.t("status.none"):drawuiCore.t("status.selected",{n:u})})}),jsxRuntime.jsx("div",{className:"drawui-status-item",children:jsxRuntime.jsxs("span",{children:[P,"%"]})})]}),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=Jr;exports.Toolbar=Jt;exports.ZoomControl=en;
1
+ 'use strict';var react=require('react'),drawuiCore=require('drawui-core'),jsxRuntime=require('react/jsx-runtime');function Y(){let[t,e]=react.useState(drawuiCore.getLanguage());return react.useEffect(()=>drawuiCore.subscribeLanguage(()=>e(drawuiCore.getLanguage())),[]),t}var bn=["#ffeb3b","#22c55e","#3b82f6","#ec4899","#8b5cf6","#f97316"],wn="drawui:highlighterColor";function Ct(){if(typeof window>"u")return drawuiCore.DEFAULT_HIGHLIGHTER_COLOR;try{let t=window.localStorage.getItem(wn);return t&&/^#[0-9a-fA-F]{6}$/.test(t)?t.toLowerCase():drawuiCore.DEFAULT_HIGHLIGHTER_COLOR}catch{return drawuiCore.DEFAULT_HIGHLIGHTER_COLOR}}function xn(t){if(!(typeof window>"u"))try{window.localStorage.setItem(wn,t);}catch{}}var kn="drawui:stickyNoteColor";function St(){if(typeof window>"u")return drawuiCore.STICKY_NOTE_DEFAULT_COLOR;try{let t=window.localStorage.getItem(kn);return t&&/^#[0-9a-fA-F]{6}$/.test(t)?t.toLowerCase():drawuiCore.STICKY_NOTE_DEFAULT_COLOR}catch{return drawuiCore.STICKY_NOTE_DEFAULT_COLOR}}function Cn(t){if(!(typeof window>"u"))try{window.localStorage.setItem(kn,t);}catch{}}function Mo({icon:t,size:e=24,ink:o=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:[t.disc&&jsxRuntime.jsx("circle",{cx:drawuiCore.ICON_GRID/2,cy:drawuiCore.ICON_GRID/2,r:drawuiCore.ICON_GRID/2-1,fill:t.disc}),t.layers.map((i,p)=>{let l=i.fill??"ink",a=i.stroke??"ink";return jsxRuntime.jsx("path",{d:i.d,fill:l==="none"?"none":l==="ink"?o:l,...a==="none"?{}:{stroke:a==="ink"?o:a,strokeWidth:i.w??1.8,strokeLinecap:"round",strokeLinejoin:"round"}},p)}),t.label&&jsxRuntime.jsx("text",{x:drawuiCore.ICON_GRID/2,y:drawuiCore.ICON_GRID/2+.5,textAnchor:"middle",dominantBaseline:"central",fontFamily:"sans-serif",fontSize:t.label.size??13,fill:t.label.color,children:t.label.text})]})}var En="drawui:recentIcons",Nn=12;function Ft(t,e){let o=/^#?([0-9a-f]{6})$/i.exec(t.trim());if(!o)return t;let i=parseInt(o[1],16);return `rgba(${i>>16&255}, ${i>>8&255}, ${i&255}, ${e})`}function To(){if(typeof window>"u")return [];try{let t=JSON.parse(window.localStorage.getItem(En)||"[]");return Array.isArray(t)?t.filter(e=>typeof e=="string").slice(0,Nn):[]}catch{return []}}function Lo(t){if(!(typeof window>"u"))try{window.localStorage.setItem(En,JSON.stringify(t));}catch{}}var Ln=t=>({"--dw-icon-cat":t,"--dw-icon-cat-soft":Ft(t,.12)}),In=react.memo(function({onPick:e,onClose:o}){Y();let[i,p]=react.useState(""),[l,a]=react.useState(drawuiCore.ICON_CATEGORIES[0].id),[c,k]=react.useState(To),S=react.useRef(null),s=react.useRef(null);react.useEffect(()=>{s.current?.focus();},[]),react.useEffect(()=>{let u=T=>{let g=S.current;g&&(g.contains(T.target)||T.target?.closest?.("[data-icon-toggle]")||o());},R=T=>{T.key==="Escape"&&(T.stopPropagation(),o());};return window.addEventListener("pointerdown",u),window.addEventListener("keydown",R),()=>{window.removeEventListener("pointerdown",u),window.removeEventListener("keydown",R);}},[o]);let y=react.useMemo(()=>c.map(u=>drawuiCore.getIcon(u)).filter(u=>!!u),[c]),w=react.useMemo(()=>i.trim()?drawuiCore.searchIcons(i):l==="recent"?y:drawuiCore.iconsByCategory(l),[i,l,y]),N=l==="recent"?drawuiCore.ICON_CATEGORY_INK.status:drawuiCore.ICON_CATEGORY_INK[l]??drawuiCore.ICON_DEFAULT_INK,$=i.trim()?drawuiCore.t("icon.search"):l==="recent"?drawuiCore.t("icon.recent"):drawuiCore.t(drawuiCore.ICON_CATEGORIES.find(u=>u.id===l)?.labelKey??"icon.search"),I=u=>{e(u),k(R=>{let T=[u.id,...R.filter(g=>g!==u.id)].slice(0,Nn);return Lo(T),T});};return jsxRuntime.jsxs("div",{className:"drawui-icon-panel",ref:S,style:{"--dw-icon-accent":N,"--dw-icon-soft":Ft(N,.08),"--dw-icon-ring":Ft(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:s,value:i,onChange:u=>p(u.target.value),onKeyDown:u=>{u.key==="Enter"&&w.length>0&&I(w[0]);},placeholder:drawuiCore.t("icon.search"),"aria-label":drawuiCore.t("icon.search")}),jsxRuntime.jsx("span",{className:"drawui-icon-count",children:w.length})]}),!i.trim()&&jsxRuntime.jsxs("div",{className:"drawui-icon-cats",children:[y.length>0&&jsxRuntime.jsxs("button",{type:"button",className:`drawui-icon-cat${l==="recent"?" active":""}`,style:Ln(drawuiCore.ICON_CATEGORY_INK.status),onClick:()=>a("recent"),children:[jsxRuntime.jsx("i",{className:"drawui-icon-dot"}),drawuiCore.t("icon.recent")]}),drawuiCore.ICON_CATEGORIES.map(u=>jsxRuntime.jsxs("button",{type:"button",className:`drawui-icon-cat${l===u.id?" active":""}`,style:Ln(drawuiCore.ICON_CATEGORY_INK[u.id]??drawuiCore.ICON_DEFAULT_INK),onClick:()=>a(u.id),children:[jsxRuntime.jsx("i",{className:"drawui-icon-dot"}),drawuiCore.t(u.labelKey)]},u.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:$}),jsxRuntime.jsx("span",{className:"drawui-icon-card-count",children:w.length})]}),jsxRuntime.jsxs("div",{className:"drawui-icon-grid",children:[w.map(u=>jsxRuntime.jsx("button",{type:"button",className:"drawui-icon-item",title:`${u.zh} / ${u.en}`,"aria-label":`${u.zh} ${u.en}`,onClick:()=>I(u),children:jsxRuntime.jsx(Mo,{icon:u,size:30,ink:drawuiCore.iconInk(u)})},u.id)),w.length===0&&jsxRuntime.jsx("div",{className:"drawui-icon-empty",children:drawuiCore.t("icon.empty")})]})]})]})});var Ie=t=>`${t.x.toFixed(1)},${t.y.toFixed(1)}`,Rn=(t,e)=>{let o=e*Math.PI/180;return {x:t.x*Math.cos(o)-t.y*Math.sin(o),y:t.x*Math.sin(o)+t.y*Math.cos(o)}},ht={x:Math.SQRT1_2,y:-Math.SQRT1_2},Vt={x:4.6,y:19.4},gt={x:19,y:5};function Yt(t,e,o){let i={x:-o.y,y:o.x},p=a=>({x:e.x-o.x*a,y:e.y-o.y*a}),l=(a,c)=>({x:a.x+i.x*c,y:a.y+i.y*c});switch(t){case "end":{let a=p(5.6);return jsxRuntime.jsx("polygon",{points:`${Ie(e)} ${Ie(l(a,2.7))} ${Ie(l(a,-2.7))}`,fill:"currentColor",stroke:"none"})}case "inheritance":case "realization":{let a=p(8.6);return jsxRuntime.jsx("polygon",{points:`${Ie(e)} ${Ie(l(a,3.5))} ${Ie(l(a,-3.5))}`,fill:"none"})}case "aggregation":case "composition":{let a=p(4.3),c=p(8.6);return jsxRuntime.jsx("polygon",{points:`${Ie(e)} ${Ie(l(a,2.7))} ${Ie(c)} ${Ie(l(a,-2.7))}`,fill:t==="composition"?"currentColor":"none",stroke:"currentColor"})}case "dependency":{let a=Rn({x:-o.x,y:-o.y},30),c=Rn({x:-o.x,y:-o.y},-30);return jsxRuntime.jsx("path",{d:`M ${Ie({x:e.x+a.x*5.8,y:e.y+a.y*5.8})} L ${Ie(e)} L ${Ie({x:e.x+c.x*5.8,y:e.y+c.y*5.8})}`,fill:"none"})}default:return null}}function Be(t,e){let o=e||t==="dependency"||t==="realization",i=o?{x:gt.x-ht.x*8.6,y:gt.y-ht.y*8.6}:gt,p={x:-ht.x,y:-ht.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:Vt.x,y1:Vt.y,x2:i.x,y2:i.y,strokeDasharray:o?"3 2.6":void 0}),(t==="end"||t==="both")&&Yt("end",gt,ht),(t==="start"||t==="both")&&Yt("end",Vt,p),t!=="none"&&t!=="start"&&t!=="end"&&t!=="both"?Yt(t,gt,ht):null]})}var Tt=t=>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:t})}),No=[{type:"straight",labelKey:"style.connection.straight",icon:Tt("M3 12h18")},{type:"polyline",labelKey:"style.connection.polyline",icon:Tt("M4 8 C 12 8, 12 16, 20 16")},{type:"orthogonal",labelKey:"style.connection.orthogonal",icon:Tt("M5 5v14h14")},{type:"curve",labelKey:"style.connection.curve",icon:Tt("M3 13 C 6 7, 9 7, 12 12 C 15 17, 18 17, 21 11")}],Pn=[{key:"none",arrowHead:"none",dashed:false,labelKey:"style.arrowhead.none",icon:Be("none",false)},{key:"end",arrowHead:"end",dashed:false,labelKey:"style.arrowhead.end",icon:Be("end",false)},{key:"start",arrowHead:"start",dashed:false,labelKey:"style.arrowhead.start",icon:Be("start",false)},{key:"both",arrowHead:"both",dashed:false,labelKey:"style.arrowhead.both",icon:Be("both",false)},{key:"none-dashed",arrowHead:"none",dashed:true,labelKey:"style.arrowhead.none-dashed",icon:Be("none",true)},{key:"both-dashed",arrowHead:"both",dashed:true,labelKey:"style.arrowhead.both-dashed",icon:Be("both",true)}],An=[{key:"inheritance",arrowHead:"inheritance",dashed:false,labelKey:"style.arrowhead.inheritance",icon:Be("inheritance",false)},{key:"composition",arrowHead:"composition",dashed:false,labelKey:"style.arrowhead.composition",icon:Be("composition",false)},{key:"aggregation",arrowHead:"aggregation",dashed:false,labelKey:"style.arrowhead.aggregation",icon:Be("aggregation",false)},{key:"dependency",arrowHead:"dependency",dashed:true,labelKey:"style.arrowhead.dependency",icon:Be("dependency",true)},{key:"realization",arrowHead:"realization",dashed:true,labelKey:"style.arrowhead.realization",icon:Be("realization",true)}],Hn=[...Pn,...An];function Io(t,e){let o=Hn.find(i=>i.arrowHead===t&&i.dashed===e);return o?o.key:Hn.find(i=>i.arrowHead===t)?.key}var Et=react.memo(function({connectionType:e,arrowHead:o,dashed:i,onConnectionTypeChange:p,onArrowStyleChange:l,onOptionHover:a,onOptionLeave:c}){Y();let k=Io(o,i),S=s=>jsxRuntime.jsx("div",{className:"drawui-connection-row",children:s.map(y=>jsxRuntime.jsxs("button",{className:`drawui-connection-btn${k===y.key?" active":""}`,onClick:()=>l(y),"data-drawui-tip":a?void 0:drawuiCore.t(y.labelKey),onMouseEnter:a?w=>a(y.labelKey,w.currentTarget):void 0,onMouseLeave:a?c:void 0,"aria-label":drawuiCore.t(y.labelKey),type:"button",children:[jsxRuntime.jsx("span",{className:"drawui-connection-icon",children:y.icon}),jsxRuntime.jsx("span",{className:"drawui-connection-label",children:drawuiCore.t(y.labelKey)})]},y.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:No.map(s=>jsxRuntime.jsxs("button",{className:`drawui-connection-btn${e===s.type?" active":""}`,onClick:()=>p(s.type),"data-drawui-tip":a?void 0:drawuiCore.t(s.labelKey),onMouseEnter:a?y=>a(s.labelKey,y.currentTarget):void 0,onMouseLeave:a?c:void 0,"aria-label":drawuiCore.t(s.labelKey),type:"button",children:[jsxRuntime.jsx("span",{className:"drawui-connection-icon",children:s.icon}),jsxRuntime.jsx("span",{className:"drawui-connection-label",children:drawuiCore.t(s.labelKey)})]},s.type))}),jsxRuntime.jsx("div",{className:"drawui-style-popover-title",children:drawuiCore.t("style.arrow")}),S(Pn),jsxRuntime.jsx("div",{className:"drawui-style-popover-title",children:drawuiCore.t("style.uml")}),S(An)]})});var Kn=[{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"})]})}],Po=[{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"}]}],Ao=new Map(Kn.map(t=>[t.type,t.icon])),Ko=new Set(Kn.map(t=>t.type)),Oo=jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("path",{d:"M4 4h16v11l-5 5H4Z"}),jsxRuntime.jsx("path",{d:"M20 15h-5v5"})]}),$o=[{type:"arrow",icon:"M5 12h14M12 5l7 7-7 7",labelKey:"toolbar.arrow"},{type:"text",icon:"M4 7V4h16v3M9 20h6M12 4v16",labelKey:"toolbar.text"}],Do="M17 3a2.85 2.85 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3Z",jt=8,Bo=6,Xt="M0 -1Q0.24 -0.24 1 0Q0.24 0.24 0 1Q-0.24 0.24 -1 0Q-0.24 -0.24 0 -1Z",zo=[{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"}],qt=react.memo(function({activeTool:e,onToolChange:o,showGrid:i,onToggleGrid:p,canUndo:l=false,canRedo:a=false,onUndo:c,onRedo:k,onExport:S,onExportData:s,onImportData:y,onHighlighterColorChange:w,onStickyNoteColorChange:N,onInsertIcon:$,onInsertTable:I,onInsertImage:u,arrowStyle:R,onArrowStyleChange:T}){let[g,h]=react.useState(false),[v,m]=react.useState(false),[b,P]=react.useState(null),[U,z]=react.useState(false),[Q,D]=react.useState(false),[X,pe]=react.useState(Ct),[ye,M]=react.useState(false),[ve,V]=react.useState(St),[G,Ae]=react.useState(false),[me,ke]=react.useState(false),Le=react.useRef(null),Ke=r=>{let W=Array.from(r.target.files||[]);W.length&&u?.(W),r.target.value="";},[Se,Re]=react.useState(null),_=react.useRef(null),C=react.useRef(null),ie=react.useRef(null),se=react.useRef(null),j=react.useRef(null);Y();let Ee=[{format:"png",labelKey:"toolbar.export.png"},{format:"svg",labelKey:"toolbar.export.svg"},{format:"pdf",labelKey:"toolbar.export.pdf"}],B=()=>{_.current&&(clearTimeout(_.current),_.current=null),z(true);},Oe=()=>{_.current=window.setTimeout(()=>z(false),200);},ge=react.useRef(null),Xe=()=>{z(false),L(),ge.current?.click();},qe=r=>{let W=r.target.files?.[0];W&&y?.(W),r.target.value="";},ot=()=>{C.current&&(clearTimeout(C.current),C.current=null),h(true);},rt=()=>{C.current=window.setTimeout(()=>{h(false),L();},200);},x=()=>{ie.current&&(clearTimeout(ie.current),ie.current=null),m(true);},Z=()=>{ie.current=window.setTimeout(()=>{m(false),L();},200);},A=(r,W)=>{let K=r.closest(".drawui-toolbar");if(!K)return;let q=r.getBoundingClientRect(),$e=K.getBoundingClientRect(),ae=q.bottom+46>window.innerHeight;P({label:W,x:q.left-$e.left+q.width/2,y:ae?q.top-$e.top-8:q.bottom-$e.top+8,above:ae});},L=()=>P(null),ee=()=>{se.current&&(clearTimeout(se.current),se.current=null),D(true);},re=()=>{se.current=window.setTimeout(()=>D(false),200);},He=r=>{pe(r),xn(r),w?.(r),o("highlighter");},Je=()=>{j.current&&(clearTimeout(j.current),j.current=null),M(true);},_e=()=>{j.current=window.setTimeout(()=>M(false),200);},d=r=>{V(r),Cn(r),N?.(r),o("sticky-note"),M(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:()=>o("select"),onMouseEnter:r=>A(r.currentTarget,"toolbar.select"),onMouseLeave:L,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:()=>o("hand"),onMouseEnter:r=>A(r.currentTarget,"toolbar.hand"),onMouseLeave:L,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:ot,onMouseLeave:rt,children:[jsxRuntime.jsx("button",{className:`drawui-toolbar-button ${Ko.has(e)?"active":""}`,onClick:()=>{o("rounded-rectangle"),h(false),L();},"data-drawui-tip":g?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"})})}),g&&jsxRuntime.jsx("div",{className:"drawui-toolbar-shape-grid drawui-shape-menu",children:jsxRuntime.jsx("div",{className:"drawui-shape-menu-scroll",children:Po.map(r=>jsxRuntime.jsxs("div",{className:"drawui-shape-group",children:[jsxRuntime.jsx("div",{className:"drawui-shape-group-title",children:drawuiCore.t(r.labelKey)}),jsxRuntime.jsx("div",{className:"drawui-shape-group-grid",children:r.items.map(W=>{let K=W.labelKey??`tool.${W.type}`;return jsxRuntime.jsx("button",{type:"button",className:`drawui-toolbar-shape-item ${e===W.type?"active":""}`,onClick:()=>{o(W.type),h(false),L();},onMouseEnter:q=>A(q.currentTarget,K),onMouseLeave:L,"aria-label":drawuiCore.t(K),children:jsxRuntime.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:Ao.get(W.type)})},`${r.key}-${W.type}`)})})]},r.key))})})]}),jsxRuntime.jsxs("div",{className:"drawui-toolbar-dropdown",onMouseEnter:Je,onMouseLeave:_e,children:[jsxRuntime.jsxs("button",{className:`drawui-toolbar-button ${e==="sticky-note"?"active":""}`,onClick:()=>{o("sticky-note"),M(false),L();},"data-drawui-tip":ye?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:Oo}),jsxRuntime.jsx("span",{className:"drawui-toolbar-color-chip",style:{background:ve}})]}),ye&&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(r=>jsxRuntime.jsx("button",{type:"button","aria-label":r,className:`drawui-sticky-swatch${ve.toLowerCase()===r.toLowerCase()?" active":""}`,style:{background:r},onClick:()=>d(r)},r))})]})]}),jsxRuntime.jsxs("div",{className:"drawui-toolbar-dropdown",children:[jsxRuntime.jsx("button",{className:`drawui-toolbar-button ${G?"active":""}`,"data-icon-toggle":"","data-drawui-tip":G?void 0:drawuiCore.t("toolbar.icon"),onClick:()=>{Ae(r=>!r),L();},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"})]})}),G&&jsxRuntime.jsx(In,{onPick:r=>$?.(r.id),onClose:()=>Ae(false)})]}),jsxRuntime.jsx("div",{className:"drawui-toolbar-divider"}),jsxRuntime.jsxs("div",{className:"drawui-toolbar-dropdown",onMouseEnter:x,onMouseLeave:Z,children:[jsxRuntime.jsx("button",{className:`drawui-toolbar-button ${e==="arrow"?"active":""}`,onClick:()=>{o("arrow"),m(false),L();},"data-drawui-tip":v?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"})})}),v&&jsxRuntime.jsx("div",{className:"drawui-toolbar-shape-grid drawui-arrow-menu",onPointerDown:r=>{r.target.closest("button")||(m(false),L());},children:jsxRuntime.jsx(Et,{connectionType:R?.connectionType??"straight",arrowHead:R?.arrowHead??"end",dashed:!!R?.dashed,onConnectionTypeChange:r=>{T?.({connectionType:r}),o("arrow"),m(false),L();},onArrowStyleChange:r=>{T?.({arrowHead:r.arrowHead,dashed:r.dashed}),o("arrow"),m(false),L();},onOptionHover:(r,W)=>A(W,r),onOptionLeave:L})})]}),$o.filter(r=>r.type!=="arrow").map(r=>jsxRuntime.jsx("button",{className:`drawui-toolbar-button ${e===r.type?"active":""}`,onClick:()=>o(r.type),"data-drawui-tip":drawuiCore.t(r.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:r.icon})})},r.type)),jsxRuntime.jsx("div",{className:"drawui-toolbar-divider"}),jsxRuntime.jsx("button",{className:`drawui-toolbar-button ${e==="pen"?"active":""}`,onClick:()=>o("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:Do})})}),jsxRuntime.jsxs("div",{className:"drawui-toolbar-dropdown",onMouseEnter:ee,onMouseLeave:re,children:[jsxRuntime.jsxs("button",{className:`drawui-toolbar-button ${e==="highlighter"?"active":""}`,onClick:()=>o("highlighter"),onMouseEnter:r=>A(r.currentTarget,"toolbar.highlighter"),onMouseLeave:L,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:Xt,transform:"translate(7.4 5.4) scale(2.4)"}),jsxRuntime.jsx("path",{d:Xt,transform:"translate(18.4 3.4) scale(2.5)"}),jsxRuntime.jsx("path",{d:Xt,transform:"translate(21 10.6) scale(2.2)"})]})]}),jsxRuntime.jsx("span",{className:"drawui-toolbar-color-chip",style:{background:X}})]}),Q&&jsxRuntime.jsx("div",{className:"drawui-toolbar-shape-grid drawui-toolbar-highlighter-grid",children:bn.map(r=>jsxRuntime.jsx("button",{type:"button","aria-label":r,className:`drawui-highlighter-swatch${X.toLowerCase()===r.toLowerCase()?" active":""}`,style:{background:r},onClick:()=>He(r)},r))})]}),jsxRuntime.jsx("div",{className:"drawui-toolbar-divider"}),zo.map(r=>jsxRuntime.jsx("button",{className:`drawui-toolbar-button ${e===r.type?"active":""}`,onClick:()=>o(r.type),"data-drawui-tip":drawuiCore.t(r.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:r.icon})})},r.type)),jsxRuntime.jsx("button",{className:`drawui-toolbar-button ${e==="mind-map"?"active":""}`,onClick:()=>o("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("button",{className:"drawui-toolbar-button",onClick:()=>Le.current?.click(),"data-drawui-tip":drawuiCore.t("toolbar.image"),"data-image-toggle":true,children:jsxRuntime.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntime.jsx("rect",{x:"3",y:"4",width:"18",height:"16",rx:"2"}),jsxRuntime.jsx("circle",{cx:"8.5",cy:"9.5",r:"1.6"}),jsxRuntime.jsx("path",{d:"M21 15.5l-4.5-4.5L6 21"})]})}),jsxRuntime.jsx("input",{ref:Le,type:"file",accept:"image/*",multiple:true,style:{display:"none"},onChange:Ke}),jsxRuntime.jsxs("div",{className:"drawui-toolbar-dropdown",children:[jsxRuntime.jsx("button",{className:`drawui-toolbar-button ${me?"active":""}`,onClick:()=>ke(r=>!r),"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"})]})}),me&&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:Bo*jt},(r,W)=>{let K=Math.floor(W/jt),q=W%jt,$e=Se&&K<Se.rows&&q<Se.cols;return jsxRuntime.jsx("button",{type:"button","aria-label":`${K+1}x${q+1}`,className:"drawui-table-picker-cell",style:$e?{borderColor:"var(--dw-primary)",background:"var(--dw-primary-weak)"}:void 0,onMouseEnter:()=>Re({rows:K+1,cols:q+1}),onClick:()=>{I?.(K+1,q+1),ke(false),Re(null),L();}},W)})})]})]}),jsxRuntime.jsx("div",{className:"drawui-toolbar-divider"}),jsxRuntime.jsx("button",{className:`drawui-toolbar-button ${i?"active":""}`,onClick:p,"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:c,disabled:!l,style:l?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:k,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:B,onMouseLeave:Oe,children:[jsxRuntime.jsx("button",{className:"drawui-toolbar-button","data-drawui-tip":U?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"})]})}),U&&jsxRuntime.jsxs("div",{className:"drawui-toolbar-shape-grid drawui-toolbar-export-grid",children:[Ee.map(r=>jsxRuntime.jsx("button",{className:"drawui-toolbar-shape-item drawui-toolbar-export-item",onClick:()=>{S?.(r.format),z(false);},"data-drawui-tip":drawuiCore.t(r.labelKey),children:drawuiCore.t(r.labelKey)},r.format)),jsxRuntime.jsx("div",{className:"drawui-toolbar-export-divider"}),jsxRuntime.jsx("button",{className:"drawui-toolbar-shape-item drawui-toolbar-export-item",onClick:()=>{s?.(),z(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:Xe,"data-drawui-tip":drawuiCore.t("toolbar.import.data"),children:drawuiCore.t("toolbar.import.data")})]})]}),jsxRuntime.jsx("input",{ref:ge,type:"file",accept:".json,application/json",style:{display:"none"},onChange:qe}),b&&jsxRuntime.jsx("div",{className:`drawui-shape-tip ${b.above?"is-above":"is-below"}`,style:{left:b.x,top:b.y},children:drawuiCore.t(b.label)})]})})});var Qt=react.memo(function({onZoomIn:e,onZoomOut:o,onReset:i,zoomLevel:p=100}){return Y(),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:[p,"%"]}),jsxRuntime.jsx("button",{className:"drawui-zoom-button",onClick:o,"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:i,"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 $n=["#ffffff","#f1f5f9","#e2e8f0","#ede9fe","#dbeafe","#e0e7ff","#dcfce7","#fef9c3","#fee2e2"],Dn=["#0f172a","#475569","#94a3b8","#8b5cf6","#3b82f6","#1d4ed8","#16a34a","#eab308","#dc2626"],Vo=$n.filter(t=>t!=="#f1f5f9"),Yo=[...Vo,...Dn],jo=[...$n,...Dn],Bn=15,zn="drawui:customColors";function Xo(){if(typeof window>"u")return [];try{let t=window.localStorage.getItem(zn);if(!t)return [];let e=JSON.parse(t);return Array.isArray(e)?e.filter(o=>typeof o=="string").slice(-Bn):[]}catch{return []}}function qo(t){if(!(typeof window>"u"))try{window.localStorage.setItem(zn,JSON.stringify(t));}catch{}}var en=[{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}],On=(t,e)=>!!t&&!!e&&t.toLowerCase()===e.toLowerCase(),wt=10,it=12,nt=t=>!t||t==="transparent",_n=react.memo(function({editor:e,selectedCount:o,hasLineSelection:i,currentConnectionType:p,currentArrowHead:l,currentDashed:a}){Y();let c=!!e?.getEditingShapeId(),[k,S]=react.useState(null),[s,y]=react.useState(null),[,w]=react.useState(0),N=react.useRef(null),$=react.useRef(null),I=react.useRef(null),[u,R]=react.useState({tw:168,th:42,pw:228,ph:160}),[T,g]=react.useState(Xo),h=react.useRef(null),v=react.useCallback(d=>{let r=d.trim().toLowerCase();/^#[0-9a-f]{6}$/.test(r)&&g(W=>{let K=W.filter(q=>q!==r);for(K.push(r);K.length>Bn;)K.shift();return qo(K),K});},[]);if(react.useEffect(()=>{let d=h.current;if(!d)return;let r=()=>{d.value&&v(d.value);};return d.addEventListener("change",r),()=>d.removeEventListener("change",r)},[v,s]),react.useEffect(()=>{if(!e)return;let d=e.subscribe(()=>w(r=>(r+1)%1e6));return ()=>{d();}},[e]),react.useEffect(()=>{y(null);},[o,c]),react.useEffect(()=>{if(!s)return;let d=r=>{N.current&&!N.current.contains(r.target)&&y(null);};return document.addEventListener("pointerdown",d,true),()=>document.removeEventListener("pointerdown",d,true)},[s]),react.useLayoutEffect(()=>{let d=$.current?.offsetWidth??u.tw,r=$.current?.offsetHeight??u.th,W=I.current?.offsetWidth??u.pw,K=I.current?.offsetHeight??u.ph;R(q=>q.tw===d&&q.th===r&&q.pw===W&&q.ph===K?q:{tw:d,th:r,pw:W,ph:K});}),!e||o===0||c)return null;let m=e.getSelectedIds(),P=e.getShapes().filter(d=>m.includes(d.id)),U=P[0],z=U?.id??"",Q=U?.style.fillColor,D=U?.style.strokeColor??"#1f2937",X=U?.textColor??"#1f2937",pe=U?.highlightColor,ye={fill:Q,stroke:D,text:X,highlight:pe},M=P.length>0&&P.every(d=>d.type==="sticky-note"),ve={fill:U?.style.fillOpacity??1,stroke:U?.style.strokeOpacity??1,highlight:U?.highlightOpacity??1},V=d=>k&&k.key===`${z}:${d}`?k.value:ve[d]??1,G=(d,r)=>{switch(d){case "stroke":e.updateSelectedShapesStyle({strokeColor:r});break;case "fill":e.updateSelectedShapesStyle({fillColor:r});break;case "text":e.updateSelectedShapesText({textColor:r});break;case "highlight":e.updateSelectedShapesText({highlightColor:r});break}},Ae=(d,r)=>{S({key:`${z}:${d}`,value:r}),d==="highlight"?e.updateSelectedShapesText({highlightOpacity:r}):d==="stroke"?e.updateSelectedShapesStyle({strokeOpacity:r}):e.updateSelectedShapesStyle({fillOpacity:r});},me=d=>e.updateConnectionType(d),ke=d=>e.updateArrowStyle({arrowHead:d.arrowHead,dashed:d.dashed}),Le=!!i&&P.length>0&&P.every(d=>d.type==="line"||d.type==="arrow"),Ke=P.length>0&&P.every(d=>d.type==="text"),Se=P.length>0&&P.every(d=>d.type==="sticky-note"||d.type==="icon"),Re=Le?en.filter(d=>d.key==="stroke"):Se?en.filter(d=>d.key!=="stroke"):en,_=d=>d.key==="stroke"&&Le?"style.line":d.labelKey,C=s&&s!=="more"?Re.find(d=>d.key===s):void 0,ie=!!s&&(s==="more"||s==="prefix"||!!C),se=M&&C?.key==="fill",j=e.getCamera(),Ee=drawuiCore.getContentBounds(P,0),B=j.pageToScreen({x:Ee.x,y:Ee.y}),Oe=j.pageToScreen({x:Ee.x+Ee.width,y:Ee.y+Ee.height}),ge=window.innerWidth,Xe=window.innerHeight,qe=Oe.y+wt,ot=B.y-wt,rt=u.th+(ie?wt+u.ph:0),x=qe+rt<=Xe-it,Z=ot-rt>=it,A=x||!Z,L=(B.x+Oe.x)/2,ee=(d,r,W)=>Math.max(r,Math.min(d,Math.max(r,W))),re=ee(L-u.tw/2,it,ge-u.tw-it),He=A?qe:ot-u.th,Je=ee(L-u.pw/2,it,ge-u.pw-it),_e=ie?ee(A?He+u.th+wt:He-wt-u.ph,it,Xe-u.ph-it):0;return jsxRuntime.jsxs("div",{className:"drawui-style-floating",ref:N,children:[jsxRuntime.jsxs("div",{className:"drawui-style-toolbar",ref:$,style:{left:re,top:He},children:[Re.map(d=>jsxRuntime.jsxs("button",{className:`drawui-style-tool-btn${s===d.key?" active":""}`,onClick:()=>y(s===d.key?null:d.key),"data-drawui-tip":drawuiCore.t(_(d)),type:"button",children:[d.key==="fill"&&jsxRuntime.jsx("span",{className:`drawui-st-swatch${nt(Q)?" drawui-st-none":""}`,style:nt(Q)?void 0:{background:Q}}),d.key==="stroke"&&(Le?jsxRuntime.jsx("span",{className:`drawui-st-line${nt(D)?" drawui-st-line-none":""}`,style:nt(D)?void 0:{background:D}}):jsxRuntime.jsx("span",{className:`drawui-st-frame${nt(D)?" drawui-st-frame-none":""}`,style:nt(D)?void 0:{borderColor:D}})),d.key==="text"&&jsxRuntime.jsx("span",{className:"drawui-st-text",style:{color:X},children:"A"}),d.key==="highlight"&&jsxRuntime.jsx("span",{className:`drawui-st-hl${nt(pe)?" drawui-st-none":""}`,style:nt(pe)?void 0:{background:pe},children:"A"})]},d.key)),i&&jsxRuntime.jsx("button",{className:`drawui-style-tool-btn${s==="more"?" active":""}`,onClick:()=>y(s==="more"?null:"more"),"data-drawui-tip":drawuiCore.t("style.connection"),type:"button",children:"\u22EF"}),Ke&&jsxRuntime.jsx("button",{className:`drawui-style-tool-btn${s==="prefix"?" active":""}`,onClick:()=>y(s==="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"})]})})]}),ie&&jsxRuntime.jsx("div",{className:"drawui-style-popover",ref:I,style:{left:Je,top:_e},children:s==="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")})]}):C?jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("div",{className:"drawui-style-popover-title",children:drawuiCore.t(_(C))}),jsxRuntime.jsxs("div",{className:"drawui-color-row",children:[C.hasTransparent&&!se&&jsxRuntime.jsx("button",{className:`drawui-color-swatch drawui-color-swatch-transparent${nt(ye[C.key])?" active":""}`,onClick:()=>G(C.key,"transparent"),"aria-label":drawuiCore.t("style.none"),type:"button"}),(se?drawuiCore.STICKY_NOTE_COLORS:C.hasTransparent?Yo:jo).map(d=>jsxRuntime.jsx("button",{className:`drawui-color-swatch${On(d,ye[C.key])?" active":""}`,style:{background:d},onClick:()=>G(C.key,d),"aria-label":d,type:"button"},d)),T.map(d=>jsxRuntime.jsx("button",{className:`drawui-color-swatch drawui-color-custom${On(d,ye[C.key])?" active":""}`,style:{background:d},onClick:()=>G(C.key,d),"aria-label":d,type:"button"},`custom-${d}`)),jsxRuntime.jsxs("span",{className:"drawui-color-swatch drawui-color-add","data-drawui-tip":drawuiCore.t("style.addColor"),children:["+",jsxRuntime.jsx("input",{ref:h,type:"color",defaultValue:"#3b82f6",className:"drawui-color-add-input","aria-label":drawuiCore.t("style.addColor")})]})]}),C.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(V(C.key)*100),onChange:d=>Ae(C.key,Number(d.target.value)/100),className:"drawui-opacity-slider"}),jsxRuntime.jsxs("span",{className:"drawui-opacity-value",children:[Math.round(V(C.key)*100),"%"]})]})]}):jsxRuntime.jsx(jsxRuntime.Fragment,{children:jsxRuntime.jsx(Et,{connectionType:p??"straight",arrowHead:l??"end",dashed:!!a,onConnectionTypeChange:me,onArrowStyleChange:ke})})})]})});var on=14,Zn=20,rr=["#1f2937","#ef4444","#f97316","#facc15","#22c55e","#3b82f6","#8b5cf6","#ec4899","#9ca3af"],ar=[12,14,16,18,20,24];function Gn(t,e){let o=t,i="",p=o.charAt(0);if(o.length>1&&(p==="+"||p==="-"||p==="#"||p==="~")&&o.charAt(1)===" "&&(i=p,o=o.slice(2)),o=o.replace(/^\s+|\s+$/g,""),e==="attribute"){let s=o.indexOf(":");return s===-1?{visibility:i,name:o,type:"",params:"",returnType:""}:{visibility:i,name:o.slice(0,s).replace(/^\s+|\s+$/g,""),type:o.slice(s+1).replace(/^\s+|\s+$/g,""),params:"",returnType:""}}let l=o.indexOf("(");if(l===-1){let s=o.lastIndexOf(":");return s===-1?{visibility:i,name:o,type:"",params:"",returnType:""}:{visibility:i,name:o.slice(0,s).replace(/^\s+|\s+$/g,""),type:"",params:"",returnType:o.slice(s+1).replace(/^\s+|\s+$/g,"")}}let a=o.slice(0,l).replace(/^\s+|\s+$/g,""),c=o.indexOf(")",l);if(c===-1)return {visibility:i,name:a,type:"",params:o.slice(l+1).replace(/^\s+|\s+$/g,""),returnType:""};let k=o.slice(l+1,c).replace(/^\s+|\s+$/g,""),S=o.slice(c+1).replace(/^\s+|\s+$/g,"");return S.startsWith(":")&&(S=S.slice(1).replace(/^\s+|\s+$/g,"")),{visibility:i,name:a,type:"",params:k,returnType:S}}function ir(t,e){let o=e.visibility?`${e.visibility} `:"";return t==="attribute"?`${o}${e.name}${e.type?`: ${e.type}`:""}`:`${o}${e.name}(${e.params??""})${e.returnType?`: ${e.returnType}`:""}`}var Vn=react.memo(function({editor:e,umlClass:o,editing:i}){let[,p]=react.useState(0);Y(),react.useEffect(()=>{if(!e)return;let x=e.subscribe(()=>p(Z=>Z+1));return ()=>{x();}},[e]);let[l,a]=react.useState(null),[c,k]=react.useState(false),[S,s]=react.useState(null),y=react.useRef(null),w=react.useRef(null),N=react.useCallback((x,Z)=>{y.current&&(clearTimeout(y.current),y.current=null),a({section:x,rowId:Z}),k(false);},[]),$=react.useCallback(()=>{y.current&&clearTimeout(y.current),y.current=window.setTimeout(()=>{a(null),k(false);},150);},[]);if(!e||!o||i!==o.id)return null;let I=e.getCamera(),{id:u,x:R,y:T,width:g,height:h,className:v,methods:m}=o,b=o.type==="uml-interface",P=b?[]:o.attributes,U=g/2,z=h/2,Q=drawuiCore.UML_HEADER_HEIGHT,D=drawuiCore.UML_LINE_HEIGHT,X=drawuiCore.UML_PADDING_X,pe=drawuiCore.UML_PADDING_Y,ye=b?0:P.length>0?P.length*D+pe*2:pe*2,M=I.zoom,ve=(g-X*2)*M,V=4*M,G=I.pageToScreen({x:R-U+X,y:T}),Ae=I.pageToScreen({x:R,y:T-z+Q/2}),me=x=>I.pageToScreen({x:R,y:x}).y,ke=D*M,Le=x=>T+(-z+Q+pe+D/2+x*D),Ke=x=>T+(-z+Q+ye+pe+D/2+x*D),Se=T+(-z+Q+ye),Re=T+z,_={background:"#ffffff",borderWidth:1,borderStyle:"solid",borderColor:"transparent",outline:"none",padding:0,fontFamily:"sans-serif",boxSizing:"border-box"},C=(x,Z)=>{if(!P.find(ee=>ee.id===x))return;let L=Gn(Z,"attribute");e.updateUmlClass(u,{attributes:P.map(ee=>ee.id===x?{...ee,...L}:ee)});},ie=(x,Z)=>{if(!m.find(re=>re.id===x))return;let L=Gn(Z,"method"),ee=m.map(re=>re.id===x?{...re,...L}:re);b?e.updateUmlInterface(u,{methods:ee}):e.updateUmlClass(u,{methods:ee});},se=(x,Z,A)=>{w.current={section:x,from:Z},A.dataTransfer.effectAllowed="move",A.dataTransfer.setData("text/plain",`${x}:${Z}`);},j=x=>{x.preventDefault(),x.dataTransfer.dropEffect="move";},Ee=(x,Z,A)=>{A.preventDefault();let L=w.current;!L||L.section!==x||(x==="attribute"?e.reorderUmlAttribute(u,L.from,Z):e.reorderUmlMethod(u,L.from,Z),w.current=null);},B=(x,Z,A,L)=>{let ee=me(L),re=l?.section===x&&l.rowId===A.id,He=(A.fontSize||drawuiCore.UML_FONT_SIZE)*M,Je=A.textColor||"#1f2937",_e={position:"absolute",left:G.x-on*M-V,top:ee-ke/2,width:on*M+V+ve+Zn*M,height:ke,display:"flex",alignItems:"center",gap:2,pointerEvents:"none",zIndex:53},d={..._,width:ve,height:ke-2,fontSize:He,color:Je,textDecoration:A.strikethrough?"line-through":"none",pointerEvents:"auto",...re?{borderColor:"var(--dw-primary)"}:{}},r={width:on*M,height:ke-2,cursor:"grab",color:"#9ca3af",display:"flex",alignItems:"center",justifyContent:"center",userSelect:"none",fontSize:12*M,lineHeight:1,opacity:re?1:.55,pointerEvents:"auto"},W={width:Zn*M,height:ke-6,border:"none",background:"transparent",color:"#9ca3af",cursor:"pointer",borderRadius:3,fontSize:14*M,opacity:re?1:.35,pointerEvents:"auto"};return jsxRuntime.jsxs("div",{style:_e,onDragOver:j,onDrop:K=>Ee(x,Z,K),children:[jsxRuntime.jsx("span",{style:r,draggable:true,onDragStart:K=>se(x,Z,K),"data-drawui-tip":drawuiCore.t("uml.drag"),children:"\u22EE\u22EE"}),jsxRuntime.jsx("input",{style:d,value:S&&S.rowId===A.id?S.text:ir(x,A),onChange:K=>{s({rowId:A.id,text:K.target.value}),x==="attribute"?C(A.id,K.target.value):ie(A.id,K.target.value);},onFocus:()=>N(x,A.id),onBlur:()=>{s(null),$();},spellCheck:false}),jsxRuntime.jsx("button",{style:W,onMouseDown:K=>K.preventDefault(),onClick:()=>{x==="attribute"?e.removeUmlAttribute(u,A.id):e.removeUmlMethod(u,A.id);},"data-drawui-tip":drawuiCore.t("uml.delete"),children:"\xD7"})]},A.id)},Oe=(x,Z,A)=>{let L=me(Z),ee=x==="attribute";return jsxRuntime.jsxs("button",{onMouseDown:re=>re.preventDefault(),onClick:()=>ee?e.addUmlAttribute(u):e.addUmlMethod(u),className:"drawui-uml-add-row",style:{position:"absolute",left:G.x,top:L-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":A,children:[jsxRuntime.jsx("span",{style:{fontSize:13*M,lineHeight:1},children:"+"}),jsxRuntime.jsx("span",{children:A})]},`add-${x}`)},ge=()=>{if(!l||l.section==="className")return null;let x=l.section,Z=l.rowId,L=(x==="attribute"?P:m).find(ae=>ae.id===Z);if(!L)return null;let ee=224*M,re=30*M,He=I.pageToScreen({x:R,y:T}).x,Je=I.pageToScreen({x:R,y:T-z}).y,_e=20*M,d=Je-re-_e,r=He-ee/2,W=d+re,K=L.textColor||"#1f2937",q=L.fontSize||drawuiCore.UML_FONT_SIZE,$e=!!L.strikethrough;return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("div",{style:{position:"absolute",left:He-.5,top:W,width:1,height:_e,background:"#d1d5db",pointerEvents:"none",zIndex:59}}),jsxRuntime.jsxs("div",{className:"drawui-uml-toolbar",style:{position:"absolute",left:r,top:d,width:ee,height:re,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:ae=>ae.preventDefault(),children:[jsxRuntime.jsxs("div",{style:{position:"relative"},children:[jsxRuntime.jsxs("button",{onClick:()=>k(ae=>!ae),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:$e?"line-through":"none"},children:"A"}),jsxRuntime.jsx("span",{style:{width:10*M,height:2*M,background:K,marginLeft:3,borderRadius:1}})]}),c&&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(u,x,L.id,{textColor:null}),k(false);},style:{width:14,height:14,border:"1px solid #e5e7eb",background:"transparent",cursor:"pointer",borderRadius:2},"data-drawui-tip":drawuiCore.t("uml.defaultColor")}),rr.map(ae=>jsxRuntime.jsx("button",{onClick:()=>{e.updateUmlRowStyle(u,x,L.id,{textColor:ae}),k(false);},style:{width:14,height:14,border:"none",background:ae,cursor:"pointer",borderRadius:2},"data-drawui-tip":ae},ae))]})]}),jsxRuntime.jsx("select",{value:q,onChange:ae=>e.updateUmlRowStyle(u,x,L.id,{fontSize:Number(ae.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:ar.map(ae=>jsxRuntime.jsx("option",{value:ae,children:ae},ae))}),jsxRuntime.jsx("button",{onClick:()=>e.updateUmlRowStyle(u,x,L.id,{strikethrough:!$e}),className:"drawui-uml-toolbar-btn","data-drawui-tip":drawuiCore.t("uml.strikethrough"),style:{border:"none",background:$e?"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:()=>{x==="attribute"?e.removeUmlAttribute(u,L.id):e.removeUmlMethod(u,L.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"})]})})]})]})},Xe=I.pageToScreen({x:R-U,y:T}).x,qe=I.pageToScreen({x:R,y:T-z}).y,ot=g*M,rt=h*M;return jsxRuntime.jsxs("div",{style:{position:"absolute",inset:0,pointerEvents:"none",zIndex:50},children:[jsxRuntime.jsx("div",{style:{position:"absolute",left:Xe+1,top:qe+1,width:Math.max(0,ot-2),height:Math.max(0,rt-2),background:"#ffffff",pointerEvents:"none",zIndex:51}}),jsxRuntime.jsx("input",{style:{..._,position:"absolute",left:Ae.x-ve/2,top:Ae.y-Q*M/2+2,width:ve,height:Q*M-4,textAlign:"center",fontWeight:700,fontSize:(o.fontSize||drawuiCore.UML_FONT_SIZE)*M,color:o.textColor||"#1f2937",pointerEvents:"auto",zIndex:52,...l?.section==="className"?{borderColor:"var(--dw-primary)"}:{}},value:v,onChange:x=>b?e.updateUmlInterface(u,{className:x.target.value}):e.updateUmlClass(u,{className:x.target.value}),onFocus:()=>N("className",""),onBlur:$,spellCheck:false}),!b&&jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[P.map((x,Z)=>B("attribute",Z,x,Le(Z))),Oe("attribute",Se,"\u5C5E\u6027")]}),m.map((x,Z)=>B("method",Z,x,Ke(Z))),Oe("method",Re,drawuiCore.t("uml.method")),ge()]})});var qn=react.memo(function({editor:e,panelOpen:o,onOpenPanel:i}){let[,p]=react.useState(0);Y(),react.useEffect(()=>{if(!e)return;let h=e.subscribe(()=>p(v=>v+1));return ()=>{h();}},[e]);let l=react.useRef(false),a=react.useRef(false),c=e?.getMindMapEditingShapeId()??null,k=e?.getMindMapSelectedNode()?.nodeId??"",S=c?`${c}\0${k}`:"";if(react.useEffect(()=>{l.current=false;},[S]),!e)return null;let s=e.getMindMapEditingShapeId();if(!s||o)return null;let y=e.getMindMapSelectedNode();if(!y||y.shapeId!==s)return null;let w=e.getMindMapNode(s,y.nodeId),N=e.getMindMapNodeScreenRect(s,y.nodeId);if(!w||!N)return null;let $=e.getCamera().getZoom(),I=drawuiCore.MINDMAP_FONT_SIZE*$,u=Math.max(100,N.width+24),R=N.height+8,T={position:"absolute",left:N.x+N.width/2,top:N.y-4,transform:"translateX(-50%)",width:u,height:R,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 ${(w.icon?24:12)*$}px`,fontFamily:"sans-serif",fontSize:I,color:"#1f2937",boxSizing:"border-box",pointerEvents:"auto",zIndex:55},g={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:T,value:w.text,spellCheck:false,onChange:h=>{let v=!l.current;l.current=true,e.updateMindMapNode(s,y.nodeId,{text:h.target.value},v);},onBlur:()=>{if(a.current){a.current=false;return}let h=e.getMindMapSelectedNode();h&&(h.shapeId!==s||h.nodeId!==y.nodeId)||e.exitMindMapEdit();},onKeyDown:h=>{h.key==="Enter"?h.target.blur():h.key==="Escape"&&e.exitMindMapEdit();}}),jsxRuntime.jsx("button",{style:g,"data-drawui-tip":drawuiCore.t("mindmap.more"),onMouseDown:h=>{h.preventDefault(),a.current=true,setTimeout(()=>{a.current=false;},300);},onClick:i,children:"\u22EF"})]})});var eo=react.memo(function({editor:e,panelOpen:o}){let[,i]=react.useState(0);Y(),react.useEffect(()=>{if(!e)return;let R=e.subscribe(()=>i(T=>T+1));return ()=>{R();}},[e]);let p=react.useRef(false),l=e?.getTableEditing()??null,a=l?`${l.shapeId}\0${l.row}\0${l.col}`:"";if(react.useEffect(()=>{p.current=false;},[a]),!e||o)return null;let c=e.getTableEditing();if(!c)return null;let{shapeId:k,row:S,col:s}=c,y=e.getTableCell(k,S,s),w=e.getTableScreenRect(k,S,s);if(!y||!w)return null;let N=e.getSelectedTable(),$=y.fontSize||N?.fontSize||drawuiCore.TABLE_FONT_SIZE,I=e.getCamera().getZoom(),u={left:w.x-1,top:w.y-1,width:w.width+2,height:w.height+2,padding:`${drawuiCore.TABLE_CELL_PADDING_Y*I}px ${drawuiCore.TABLE_CELL_PADDING_X*I}px`,fontFamily:"sans-serif",fontSize:$*I,lineHeight:drawuiCore.TABLE_LINE_HEIGHT_RATIO,fontWeight:y.bold?700:400,color:y.textColor||N?.textColor||"#1f2937",textAlign:y.align==="center"?"center":y.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:u,value:y.text,spellCheck:false,onChange:R=>{let T=!p.current;p.current=true,e.updateTableCell(k,S,s,{text:R.target.value},T);},onBlur:()=>{e.exitTableEdit();},onKeyDown:R=>{(R.key==="Enter"||R.key==="Escape")&&(R.preventDefault(),R.target.blur());}})})});var oo=react.memo(function({editor:e}){let[,o]=react.useState(0),[i,p]=react.useState(null),l=react.useRef(null);if(Y(),react.useEffect(()=>{if(!e)return;let D=e.subscribe(()=>o(X=>X+1));return ()=>{D();}},[e]),react.useEffect(()=>{if(!i)return;let D=pe=>{let ye=pe.target;ye&&l.current?.contains(ye)||p(null);},X=pe=>{pe.key==="Escape"&&p(null);};return window.addEventListener("pointerdown",D,true),window.addEventListener("keydown",X),()=>{window.removeEventListener("pointerdown",D,true),window.removeEventListener("keydown",X);}},[i]),!e)return null;let a=e.getSelectedTable();if(!a)return null;let c=e.getTableSelection();if(!c||c.shapeId!==a.id)return null;let k=e.getTableScreenRect(a.id);if(!k)return null;let S=a.cells.length,s=a.cells[0]?.length??0,y=drawuiCore.tableExpandRangeToMerges(a,c.anchor.row,c.anchor.col,c.focus.row,c.focus.col),{r1:w,c1:N,r2:$,c2:I}=y,u=drawuiCore.tableCoveredMap(a.cells),R=0;for(let D=w;D<=$;D++)for(let X=N;X<=I;X++)u[D]?.[X]||R++;let T=R>1,g=drawuiCore.tableRangeHasMerge(a,w,N,$,I),h=w===$?`${w+1}`:`${w+1}\u2013${$+1}`,v=N===I?`${N+1}`:`${N+1}\u2013${I+1}`,m=S-($-w+1)>=1,b=s-(I-N+1)>=1,U=k.y>56?k.y-40:k.y+k.height+10,z=D=>D.stopPropagation(),Q=D=>()=>{D(),p(null);};return jsxRuntime.jsxs("div",{className:"drawui-table-toolbar","data-table-toolbar":a.id,style:{left:k.x+k.width/2,top:U},onPointerDown:z,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 ${i==="row"?"active":""}`,"data-table-insert-row":true,title:`${drawuiCore.t("table.insertRowAbove")} / ${drawuiCore.t("table.insertRowBelow")}`,onClick:()=>p(i==="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"})})}),i==="row"&&jsxRuntime.jsxs("div",{className:"drawui-table-menu",ref:l,"data-table-row-menu":true,children:[jsxRuntime.jsx("button",{onClick:Q(()=>e.insertTableRowRelative(a.id,"above")),children:drawuiCore.t("table.insertRowAbove")}),jsxRuntime.jsx("button",{onClick:Q(()=>e.insertTableRowRelative(a.id,"below")),children:drawuiCore.t("table.insertRowBelow")})]})]}),jsxRuntime.jsx("button",{title:`${drawuiCore.t("table.deleteRow")} \xB7 ${h}`,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 ${i==="col"?"active":""}`,"data-table-insert-col":true,title:`${drawuiCore.t("table.insertColLeft")} / ${drawuiCore.t("table.insertColRight")}`,onClick:()=>p(i==="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"})})}),i==="col"&&jsxRuntime.jsxs("div",{className:"drawui-table-menu",ref:l,"data-table-col-menu":true,children:[jsxRuntime.jsx("button",{onClick:Q(()=>e.insertTableColumnRelative(a.id,"left")),children:drawuiCore.t("table.insertColLeft")}),jsxRuntime.jsx("button",{onClick:Q(()=>e.insertTableColumnRelative(a.id,"right")),children:drawuiCore.t("table.insertColRight")})]})]}),jsxRuntime.jsx("button",{title:`${drawuiCore.t("table.deleteCol")} \xB7 ${v}`,disabled:!b,onClick:()=>e.deleteTableColsInSelection(a.id),children:drawuiCore.t("table.deleteCol")}),jsxRuntime.jsx("button",{title:drawuiCore.t("table.merge"),disabled:!T,onClick:()=>e.mergeTableCells(a.id),children:drawuiCore.t("table.merge")}),jsxRuntime.jsx("button",{title:drawuiCore.t("table.split"),disabled:!g,onClick:()=>e.splitTableCells(a.id),children:drawuiCore.t("table.split")})]})});var ro=[...drawuiCore.MINDMAP_COLORS,"#1f2937","#9ca3af"],ao=["\u{1F4A1}","\u2B50","\u{1F525}","\u{1F4CC}","\u2705","\u2757","\u26A0\uFE0F","\u{1F3F7}\uFE0F"],Ir={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"},rn={fontSize:11,color:"#6b7280",marginBottom:4,display:"block"},Pt={display:"flex",gap:4,alignItems:"center",flexWrap:"wrap"},io={border:"1px solid #e5e7eb",background:"#ffffff",borderRadius:5,padding:"3px 6px",fontSize:12,color:"#374151",cursor:"pointer",lineHeight:1.5,whiteSpace:"nowrap"},an={width:"100%",border:"1px solid #e5e7eb",borderRadius:5,padding:"4px 8px",fontSize:12,outline:"none",boxSizing:"border-box",background:"#ffffff",color:"#1f2937"},so=react.memo(function({editor:e,mindMap:o}){let[,i]=react.useState(0);Y(),react.useEffect(()=>{if(!e)return;let g=e.subscribe(()=>i(h=>h+1));return ()=>{g();}},[e]);let p=react.useRef(null);if(!e||!o||e.getMindMapEditingShapeId()!==o.id)return null;let l=e.getMindMapSelectedNode();if(!l||l.shapeId!==o.id)return null;let a=g=>{if(g.id===l.nodeId)return g;for(let h of g.children??[]){let v=a(h);if(v)return v}return null},c=a(o.root);if(!c)return null;let k=e.getCamera(),s=drawuiCore.layoutMindMap(o.root).positions.get(c.id);if(!s)return null;let y=k.zoom,w=k.pageToScreen({x:o.x+s.x,y:o.y+s.y}),N=w.x+s.width*y/2+14,$=w.y-80,u=Math.max(8,Math.min(N,(window.innerWidth||1024)-232-8)),R=Math.max(8,Math.min($,(window.innerHeight||768)-320)),T=g=>{e.updateMindMapNode(o.id,c.id,g);};return jsxRuntime.jsxs("div",{ref:p,style:{...Ir,left:u,top:R},onMouseDown:g=>g.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.jsxs("span",{style:{display:"flex",alignItems:"center",gap:2},children:[!!c.children?.length&&jsxRuntime.jsx("button",{style:{...io,padding:"1px 5px",color:"#6b7280"},"data-drawui-tip":c.collapsed?drawuiCore.t("mindmap.expand"):drawuiCore.t("mindmap.collapse"),onClick:()=>e.toggleMindMapCollapse(o.id,c.id),children:c.collapsed?drawuiCore.t("mindmap.expand"):drawuiCore.t("mindmap.collapse")}),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:{...an,marginBottom:8},value:c.text,onChange:g=>T({text:g.target.value}),spellCheck:false}),jsxRuntime.jsx("div",{style:{...Pt,gap:4,marginBottom:10,flexWrap:"nowrap",justifyContent:"flex-end"},children:jsxRuntime.jsx("button",{style:{...io,color:"#ef4444",borderColor:"#fecaca"},onClick:()=>e.deleteMindMapNode(o.id,c.id),children:drawuiCore.t("mindmap.deleteNode")})}),jsxRuntime.jsx("span",{style:rn,children:drawuiCore.t("mindmap.color")}),jsxRuntime.jsxs("div",{style:{...Pt,marginBottom:10},children:[jsxRuntime.jsx("button",{"data-drawui-tip":drawuiCore.t("mindmap.levelColor"),onClick:()=>T({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}}),ro.map(g=>jsxRuntime.jsx("button",{"data-drawui-tip":g,onClick:()=>T({color:g}),style:{width:18,height:18,borderRadius:4,border:c.color===g?"2px solid #111827":"1px solid #d1d5db",background:g,cursor:"pointer",flexShrink:0}},g))]}),jsxRuntime.jsx("span",{style:rn,children:drawuiCore.t("mindmap.icon")}),jsxRuntime.jsxs("div",{style:{...Pt,marginBottom:10},children:[jsxRuntime.jsx("button",{"data-drawui-tip":drawuiCore.t("mindmap.noIcon"),onClick:()=>T({icon:void 0}),style:{width:22,height:22,borderRadius:4,border:c.icon?"1px solid #d1d5db":"2px solid #111827",background:"#f9fafb",cursor:"pointer",fontSize:11,color:"#9ca3af",lineHeight:1},children:"\u2205"}),ao.map(g=>jsxRuntime.jsx("button",{onClick:()=>T({icon:g}),style:{width:22,height:22,borderRadius:4,border:c.icon===g?"2px solid #111827":"1px solid #d1d5db",background:"#f9fafb",cursor:"pointer",fontSize:13,lineHeight:1},children:g},g)),jsxRuntime.jsx("input",{placeholder:"\u270F\uFE0F",defaultValue:c.icon&&!ao.includes(c.icon)?c.icon:"",onKeyDown:g=>{if(g.key==="Enter"){let h=g.target.value.trim();T({icon:h||void 0});}},onBlur:g=>{let h=g.target.value.trim();h!==c.icon&&T({icon:h||void 0});},style:{...an,width:56,padding:"2px 4px",textAlign:"center"}})]}),jsxRuntime.jsx("span",{style:rn,children:drawuiCore.t("mindmap.note")}),jsxRuntime.jsx("input",{style:{...an,marginBottom:6},value:c.note??"",placeholder:drawuiCore.t("mindmap.notePlaceholder"),onChange:g=>T({note:g.target.value||void 0}),spellCheck:false}),!!c.note&&jsxRuntime.jsxs("div",{style:{...Pt,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:()=>T({noteColor:void 0}),style:{width:16,height:16,borderRadius:3,border:c.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"}}),ro.map(g=>jsxRuntime.jsx("button",{onClick:()=>T({noteColor:g}),style:{width:16,height:16,borderRadius:3,border:c.noteColor===g?"2px solid #111827":"1px solid #d1d5db",background:g,cursor:"pointer"}},g))]})]})});var ln=220,cn=140,Kr="#fafafa";function Or(t,e){let o=Math.min(t.x,e.x),i=Math.min(t.y,e.y),p=Math.max(t.x+t.width,e.x+e.width),l=Math.max(t.y+t.height,e.y+e.height);return {x:o,y:i,width:p-o,height:l-i}}function $r(t){return {x:t.x+t.width/2,y:t.y+t.height/2}}function Dr(){return {x:0,y:0,width:0,height:0}}function Br(t){let e=1/0,o=1/0,i=-1/0,p=-1/0,l=false;for(let a of t){let c=un(a);c&&(l=true,c.x<e&&(e=c.x),c.y<o&&(o=c.y),c.x+c.width>i&&(i=c.x+c.width),c.y+c.height>p&&(p=c.y+c.height));}return l?{x:e,y:o,width:i-e,height:p-o}:null}function un(t){switch(t.type){case "rectangle":case "sticky-note":case "icon":case "image":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:t.x-t.width/2,y:t.y-t.height/2,width:t.width,height:t.height};case "circle":return {x:t.x-t.radius,y:t.y-t.radius,width:t.radius*2,height:t.radius*2};case "line":case "arrow":{let e=t.points;if(!e||e.length===0)return null;let o=1/0,i=1/0,p=-1/0,l=-1/0;for(let a of e)a.x<o&&(o=a.x),a.y<i&&(i=a.y),a.x>p&&(p=a.x),a.y>l&&(l=a.y);return {x:o,y:i,width:p-o,height:l-i}}case "draw":{let e=t,o=e.width,i=e.height;if(typeof o=="number"&&typeof i=="number")return {x:e.x-o/2,y:e.y-i/2,width:o,height:i};let p=e.points;if(!p||p.length===0)return null;let l=1/0,a=1/0,c=-1/0,k=-1/0;for(let S of p){let s=S.x+e.x,y=S.y+e.y;s<l&&(l=s),y<a&&(a=y),s>c&&(c=s),y>k&&(k=y);}return {x:l,y:a,width:c-l,height:k-a}}default:return null}}function zr(t){let e=t.getCamera(),o=e.screenToPage({x:0,y:0}),i=e.screenToPage({x:window.innerWidth,y:window.innerHeight});return {x:o.x,y:o.y,width:i.x-o.x,height:i.y-o.y}}function _r(t,e,o){if(t.width<=0||t.height<=0)return {x:t.x-e/2,y:t.y-o/2,width:e,height:o};let i=e/o,p=t.width,l=p/i;l<t.height&&(l=t.height,p=l*i);let a=$r(t);return {x:a.x-p/2,y:a.y-l/2,width:p,height:l}}function dn(t,e,o,i){let p=(t-o.left)/o.width,l=(e-o.top)/o.height;return {x:i.x+p*i.width,y:i.y+l*i.height}}var uo=react.memo(function({editor:e}){let o=react.useRef(null),i=react.useRef(null),[p,l]=react.useState(false),[a,c]=react.useState(100),[k,S]=react.useState(false),[s,y]=react.useState(false);Y();let w=react.useRef(null),N=react.useRef(null);react.useLayoutEffect(()=>{let h=o.current,v=i.current;if(!h||!v)return;let m=window.devicePixelRatio||1;h.width=Math.round(ln*m),h.height=Math.round(cn*m),h.style.width=`${ln}px`,h.style.height=`${cn}px`;},[p]);let $=react.useCallback(()=>{let h=o.current,v=i.current;if(!h||!v||!e)return;let m=h.getContext("2d");if(!m)return;let b=ln,P=cn,U=h.width,z=h.height,Q=e.getShapes(),D=new Set(e.getSelectedIds()),X=drawuiCore.getTheme(),pe=drawuiCore.hexToRgba(X.text,.16),ye=X.primary,M=drawuiCore.hexToRgba(X.primary,.18),ve=drawuiCore.hexToRgba(X.primary,.85),V=Br(Q),G=zr(e),Ae=V?Or(V,G):G.width>0?G:Dr(),me=_r(Ae,b,P);N.current=me;let ke=U/me.width,Le=z/me.height,Ke=b/me.width;m.setTransform(1,0,0,1,0,0),m.fillStyle=Kr,m.fillRect(0,0,U,z),m.setTransform(ke,0,0,Le,-ke*me.x,-Le*me.y),m.fillStyle=pe;for(let _ of Q){let C=un(_);C&&m.fillRect(C.x,C.y,C.width,C.height);}m.fillStyle=ye;for(let _ of Q){if(!D.has(_.id))continue;let C=un(_);C&&m.fillRect(C.x,C.y,C.width,C.height);}m.fillStyle=M,m.fillRect(G.x,G.y,G.width,G.height);let Se=1.5/Ke;m.strokeStyle=ve,m.lineWidth=Se,m.lineJoin="round";let Re=Math.min(G.width/6,G.height/6,6/Ke);if(m.beginPath(),Re*Ke<1)m.rect(G.x,G.y,G.width,G.height);else {let _=G.x,C=G.y,ie=G.width,se=G.height,j=Math.min(Re,ie/2,se/2);m.moveTo(_+j,C),m.lineTo(_+ie-j,C),m.quadraticCurveTo(_+ie,C,_+ie,C+j),m.lineTo(_+ie,C+se-j),m.quadraticCurveTo(_+ie,C+se,_+ie-j,C+se),m.lineTo(_+j,C+se),m.quadraticCurveTo(_,C+se,_,C+se-j),m.lineTo(_,C+j),m.quadraticCurveTo(_,C,_+j,C),m.closePath();}m.stroke(),m.setTransform(1,0,0,1,0,0);},[e]);react.useEffect(()=>{if(!e||p)return;$();let h=e.subscribe($),v=drawuiCore.subscribeTheme($),m=()=>$();return window.addEventListener("resize",m),()=>{h(),v(),window.removeEventListener("resize",m);}},[e,p,$]),react.useEffect(()=>{if(!e)return;let h=()=>{let m=e.getCamera().getZoom();c(Math.round(m*100));};h();let v=e.subscribe(h);return ()=>{v();}},[e]);let I=react.useCallback((h,v)=>{if(!e)return;let m=e.getCamera(),b=m.getZoom(),P=window.innerWidth/2,U=window.innerHeight/2,z=m;z.x=P-h*b,z.y=U-v*b,e.requestRender();},[e]),u=h=>{if(!e||!i.current||h.button!==0)return;let v=i.current.getBoundingClientRect(),m=N.current;if(!m)return;let b=dn(h.clientX,h.clientY,v,m);w.current={pointerId:h.pointerId,rect:{left:v.left,top:v.top,width:v.width,height:v.height},canvasBox:m},h.currentTarget.setPointerCapture(h.pointerId),y(true),I(b.x,b.y);},R=h=>{if(!s||!e||!w.current||!i.current)return;let v=w.current,m=dn(h.clientX,h.clientY,v.rect,v.canvasBox);I(m.x,m.y);},T=h=>{if(s){y(false),w.current=null;try{h.currentTarget.releasePointerCapture(h.pointerId);}catch{}}},g=h=>{if(!e||!i.current)return;let v=N.current;if(!v)return;let m=i.current.getBoundingClientRect(),b=dn(h.clientX,h.clientY,m,v);I(b.x,b.y);};return jsxRuntime.jsxs("div",{className:`drawui-minimap ${p?"collapsed":""}`,children:[jsxRuntime.jsx("button",{className:"drawui-minimap-toggle",onClick:()=>l(h=>!h),"data-drawui-tip":p?drawuiCore.t("minimap.expand"):drawuiCore.t("minimap.collapse"),"data-drawui-tip-pos":"top","aria-label":p?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:p?jsxRuntime.jsx("polyline",{points:"9 6 15 12 9 18"}):jsxRuntime.jsx("polyline",{points:"15 6 9 12 15 18"})})}),!p&&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:i,className:"drawui-minimap-canvas-wrap",style:{cursor:s?"grabbing":k?"pointer":"default"},onPointerEnter:()=>S(true),onPointerLeave:()=>S(false),children:jsxRuntime.jsx("canvas",{ref:o,className:"drawui-minimap-canvas",onPointerDown:u,onPointerMove:R,onPointerUp:T,onPointerCancel:T,onDoubleClick:g})})]})]})});var xe=t=>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:t}),Zr=[{type:"rectangle",labelKey:"shape.rectangle",glyph:xe(jsxRuntime.jsx("rect",{x:"4",y:"7",width:"16",height:"10",rx:"1"}))},{type:"rounded-rectangle",labelKey:"shape.rounded-rectangle",glyph:xe(jsxRuntime.jsx("rect",{x:"4",y:"7",width:"16",height:"10",rx:"4"}))},{type:"circle",labelKey:"shape.circle",glyph:xe(jsxRuntime.jsx("circle",{cx:"12",cy:"12",r:"5.5"}))},{type:"ellipse",labelKey:"shape.ellipse",glyph:xe(jsxRuntime.jsx("ellipse",{cx:"12",cy:"12",rx:"7",ry:"4.5"}))},{type:"diamond",labelKey:"shape.diamond",glyph:xe(jsxRuntime.jsx("path",{d:"M12 5 L19 12 L12 19 L5 12 Z"}))},{type:"triangle",labelKey:"shape.triangle",glyph:xe(jsxRuntime.jsx("path",{d:"M12 4 L20 19 H4 Z"}))},{type:"hexagon",labelKey:"shape.hexagon",glyph:xe(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:xe(jsxRuntime.jsx("path",{d:"M6 7 L19 7 L16 17 H7 Z"}))},{type:"trapezoid",labelKey:"shape.trapezoid",glyph:xe(jsxRuntime.jsx("path",{d:"M7 6 H17 L20 18 H4 Z"}))},{type:"pentagon",labelKey:"shape.pentagon",glyph:xe(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:xe(jsxRuntime.jsx("path",{d:"M8 4 H16 L20 8 V16 L16 20 H8 L4 16 V8 Z"}))},{type:"star",labelKey:"shape.star",glyph:xe(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:xe(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:xe(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:xe(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:xe(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 po({editor:t,x:e,y:o,context:i,existingArrowId:p,defaultShapeType:l,onClose:a}){let c=react.useRef(null);Y();let k=S=>{t?.createGeneratedConnection(i,{type:S,existingArrowId:p}),a();};return react.useEffect(()=>{let S=w=>{c.current&&!c.current.contains(w.target)&&a();},s=w=>{w.key==="Escape"&&(w.preventDefault(),a());},y=setTimeout(()=>{window.addEventListener("pointerdown",S,true),window.addEventListener("keydown",s,true);},0);return ()=>{clearTimeout(y),window.removeEventListener("pointerdown",S,true),window.removeEventListener("keydown",s,true);}},[a]),jsxRuntime.jsxs("div",{className:"drawui-gen-menu",ref:c,style:{left:e,top:o},children:[jsxRuntime.jsx("div",{className:"drawui-gen-menu-label",children:drawuiCore.t("menu.title")}),jsxRuntime.jsx("div",{className:"drawui-gen-shape-grid",children:Zr.map(S=>jsxRuntime.jsxs("button",{className:`drawui-gen-shape-btn${S.type===l?" drawui-gen-shape-active":""}`,onClick:()=>k(S.type),"data-drawui-tip":drawuiCore.t(S.labelKey),children:[S.glyph,jsxRuntime.jsx("span",{className:"drawui-gen-shape-label",children:drawuiCore.t(S.labelKey)})]},S.type))}),jsxRuntime.jsx("div",{className:"drawui-gen-menu-hint",children:drawuiCore.t("menu.cancel")})]})}var Vr=typeof navigator<"u"&&/mac|iphone|ipad/i.test(navigator.platform||navigator.userAgent);function Pe(t){if(Vr)switch(t){case "copy":return "\u2318C";case "copyAsImage":return "\u21E7\u2318C";case "paste":return "\u2318V";case "duplicate":return "\u2318D";case "copyStyle":return "\u2325\u2318C";case "pasteStyle":return "\u2325\u2318V";case "lock":return "\u2325\u2318L";case "delete":return "\u232B";case "group":return "\u2318G";case "ungroup":return "\u21E7\u2318G"}switch(t){case "copy":return "Ctrl + C";case "copyAsImage":return "Ctrl + Shift + C";case "paste":return "Ctrl + V";case "duplicate":return "Ctrl + D";case "copyStyle":return "Ctrl + Alt + C";case "pasteStyle":return "Ctrl + Alt + V";case "lock":return "Ctrl + Alt + L";case "delete":return "Del";case "group":return "Ctrl + G";case "ungroup":return "Ctrl + Shift + G"}}var ho={sep:true},Yr=t=>"sep"in t&&t.sep===true;function fo({editor:t,pos:e,onClose:o}){Y();let[,i]=react.useState(0),p=react.useRef(null),[l,a]=react.useState(null),[c,k]=react.useState(null);react.useEffect(()=>{let b=t.subscribe(()=>i(P=>P+1));return ()=>{b();}},[t]),react.useLayoutEffect(()=>{let b=p.current;if(!b)return;let P=b.getBoundingClientRect(),U=Math.max(8,Math.min(e.x,window.innerWidth-P.width-8)),z=Math.max(8,Math.min(e.y,window.innerHeight-P.height-8));a({left:U,top:z});},[e.x,e.y]),react.useEffect(()=>{let b=z=>{p.current&&!p.current.contains(z.target)&&o();},P=z=>{z.key==="Escape"&&(z.preventDefault(),o());},U=setTimeout(()=>{window.addEventListener("pointerdown",b,true),window.addEventListener("keydown",P,true);},0);return ()=>{clearTimeout(U),window.removeEventListener("pointerdown",b,true),window.removeEventListener("keydown",P,true);}},[o]);let S=t.getSelectedIds(),s=S.length>0,y=e.shapeId,w=y?t.isShapeLocked(y):false,N=s&&!w&&t.hasCopiedStyle(),$=t.hasClipboard(),I=s&&!w,u=s&&!w?t.getSelectedGroupId():null,R=s&&!w&&S.length>=2&&!u,g=(y?t.getShapes().find(b=>b.id===y):void 0)?.groupId??null,h=u?true:!!g&&!w,v=b=>()=>{b(),o();},m;return w?m=g?[{key:"ctx.ungroup",shortcut:Pe("ungroup"),action:v(()=>g&&t.ungroupIds([g]))}]:[{key:"ctx.unlock",action:()=>y&&t.setShapeLocked(y,false)}]:s?m=[{key:"ctx.copy",shortcut:Pe("copy"),action:v(()=>t.copySelected())},{key:"ctx.copyAsImage",shortcut:Pe("copyAsImage"),action:v(()=>{t.copySelectedAsImage();})},{key:"ctx.paste",shortcut:Pe("paste"),disabled:!$,action:v(()=>t.paste())},{key:"ctx.duplicate",shortcut:Pe("duplicate"),action:v(()=>t.duplicateSelected())},{key:"ctx.layer",submenu:[{key:"ctx.bringToFront",disabled:!I,action:()=>t.bringToFront()},{key:"ctx.bringForward",disabled:!I,action:()=>t.bringForward()},{key:"ctx.sendBackward",disabled:!I,action:()=>t.sendBackward()},{key:"ctx.sendToBack",disabled:!I,action:()=>t.sendToBack()}]},{key:"ctx.copyStyle",shortcut:Pe("copyStyle"),action:v(()=>t.copyStyle())},{key:"ctx.pasteStyle",shortcut:Pe("pasteStyle"),disabled:!N,action:v(()=>t.pasteStyle())},ho,{key:"ctx.rotate",submenu:[{key:"ctx.rotate90",action:()=>t.rotateSelected(90)},{key:"ctx.rotate180",action:()=>t.rotateSelected(180)},{key:"ctx.rotate270",action:()=>t.rotateSelected(270)}]},u?{key:"ctx.ungroup",shortcut:Pe("ungroup"),disabled:!h,action:v(()=>t.ungroupSelected())}:{key:"ctx.group",shortcut:Pe("group"),disabled:!R,action:v(()=>t.groupSelected())},ho,{key:"ctx.lock",shortcut:Pe("lock"),action:v(()=>t.setSelectedShapesLocked(true))},{key:"ctx.delete",shortcut:Pe("delete"),action:v(()=>t.deleteSelected())}]:m=[{key:"ctx.paste",shortcut:Pe("paste"),disabled:!$,action:v(()=>t.paste())}],jsxRuntime.jsx("div",{ref:p,className:"drawui-context-menu",style:l?{left:l.left,top:l.top}:{visibility:"hidden",left:e.x,top:e.y},onContextMenu:b=>b.preventDefault(),children:m.map((b,P)=>Yr(b)?jsxRuntime.jsx("div",{className:"drawui-context-sep"},`sep-${P}`):b.submenu?jsxRuntime.jsxs("div",{className:"drawui-context-sub",onMouseEnter:()=>k(b.key),onMouseLeave:()=>k(null),children:[jsxRuntime.jsxs("button",{type:"button",className:"drawui-context-item",disabled:b.disabled,children:[jsxRuntime.jsx("span",{children:drawuiCore.t(b.key)}),jsxRuntime.jsx("svg",{className:"drawui-context-caret",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:jsxRuntime.jsx("polyline",{points:"9 18 15 12 9 6"})})]}),c===b.key&&jsxRuntime.jsx("div",{className:"drawui-context-submenu",children:b.submenu.map(U=>jsxRuntime.jsx("button",{type:"button",className:"drawui-context-item",disabled:U.disabled,onClick:()=>{U.action(),o();},children:jsxRuntime.jsx("span",{children:drawuiCore.t(U.key)})},U.key))})]},b.key):jsxRuntime.jsxs("button",{type:"button",className:"drawui-context-item",disabled:b.disabled,onClick:b.action,children:[jsxRuntime.jsx("span",{children:drawuiCore.t(b.key)}),b.shortcut&&jsxRuntime.jsx("span",{className:"drawui-context-kbd",children:b.shortcut})]},b.key))})}var Jr={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",image:"tool.image"};function mn(t){let e=t instanceof Error?t.message:String(t);return e.startsWith("image.tooLarge")?drawuiCore.t("image.tooLarge"):`${drawuiCore.t("image.uploadFailed")}\uFF1A${e}`}function Qr({initialTool:t="select",className:e="",themeColor:o,language:i="zh-CN",data:p,onChange:l,onReady:a,imageUpload:c}){let k=react.useRef(null),S=react.useRef(null),s=react.useRef(null),[y,w]=react.useState(null);Y();let[N,$]=react.useState(t),[I,u]=react.useState(false),[R,T]=react.useState(0),[g,h]=react.useState(false),[v,m]=react.useState("straight"),[b,P]=react.useState("end"),[U,z]=react.useState(false),[Q,D]=react.useState(void 0),[X,pe]=react.useState(100),[ye,M]=react.useState(null),[ve,V]=react.useState(null),[G,Ae]=react.useState(false),[me,ke]=react.useState(false),[Le,Ke]=react.useState(null),[Se,Re]=react.useState(null),[_,C]=react.useState(false),[ie,se]=react.useState(null),[j,Ee]=react.useState(null),B=react.useRef(null),Oe=react.useRef(0),ge=react.useRef(null),Xe=react.useRef(l);Xe.current=l;let qe=react.useRef(a);qe.current=a,react.useEffect(()=>{if(!k.current)return;let f=new drawuiCore.Editor(k.current,{theme:o?{primary:o,editBorder:o,selection:{outline:o,handleStroke:o,handleFill:"#ffffff",outlineFill:drawuiCore.hexToRgba(o,.1),shadow:o}}:void 0,language:i,shapes:p,persist:!p,imageUpload:c});s.current=f,w(f),window.__drawuiEditor=f,f.setHighlighterColor(Ct()),f.setStickyNoteColor(St()),qe.current?.(f),t&&f.setActiveTool(t);let H=f.subscribe(()=>{$(f.getActiveTool());let F=f.getSelectedIds();T(F.length);let Me=f.getShapes().filter(Ue=>F.includes(Ue.id)&&(Ue.type==="line"||Ue.type==="arrow"));if(h(Me.length>0),Me.length>0&&Me[0].connectionType?m(Me[0].connectionType):Me.length>0&&m("straight"),Me.length>0){let Ue=Me.find(zt=>zt.type==="arrow");Ue&&(P(Ue.arrowHead??"end"),z(Ue.dashed??false));}pe(Math.round(f.getCamera().getZoom()*100)),D(f.getArrowStyle()),Ae(f.canUndo()),ke(f.canRedo());let We=f.getSelectedUml();Ke(We),We||se(null);let Qe=f.getSelectedMindMap();Re(Qe),f.getMindMapEditingShapeId()||C(false),Xe.current?.(f.getData());}),le=f.subscribeNotifications(F=>{V({type:"success",text:F}),B.current&&clearTimeout(B.current),B.current=setTimeout(()=>V(null),3500);}),Ne=f.subscribeUi(F=>{if(F.kind==="imageError"){V({type:"error",text:mn(F.message)}),B.current&&clearTimeout(B.current),B.current=setTimeout(()=>V(null),4e3);return}F.kind==="shapeTypeMenu"&&Ee({x:F.screenX,y:F.screenY,context:F.context,existingArrowId:F.existingArrowId,defaultShapeType:F.defaultShapeType});});return ()=>{H(),le(),Ne(),B.current&&clearTimeout(B.current),cancelAnimationFrame(Oe.current),f.dispose();}},[t]),react.useEffect(()=>{if(!o)return;let f=S.current;f&&(f.style.setProperty("--dw-primary",o),f.style.setProperty("--dw-primary-hover",drawuiCore.shadeColor(o,-0.12)),f.style.setProperty("--dw-primary-weak",drawuiCore.hexToRgba(o,.1)),f.style.setProperty("--dw-primary-contrast","#ffffff"),f.style.setProperty("--dw-shadow-primary",`0 2px 8px ${drawuiCore.hexToRgba(o,.3)}`)),s.current?.setTheme({primary:o,editBorder:o,selection:{outline:o,handleStroke:o,handleFill:"#ffffff",outlineFill:drawuiCore.hexToRgba(o,.1),shadow:o}});},[o]),react.useEffect(()=>{drawuiCore.setLanguage(i),s.current?.setLanguage(i);},[i]);let ot=react.useCallback(f=>{s.current?.setActiveTool(f);},[]),rt=react.useCallback(()=>{s.current?.zoomIn();},[]),x=react.useCallback(()=>{s.current?.zoomOut();},[]),Z=react.useCallback(()=>{s.current?.resetZoom();},[]),A=react.useCallback(()=>{let f=!I;u(f),s.current?.setShowGrid(f);},[I]),L=react.useCallback(()=>{s.current?.undo();},[]),ee=react.useCallback(()=>{s.current?.redo();},[]),re=react.useCallback(f=>{s.current?.downloadImage("drawui",f,{background:"#ffffff"});},[]),He=react.useCallback(()=>{s.current?.downloadJSON("drawui-data");},[]),Je=react.useCallback(f=>{let H=new FileReader;H.onload=()=>{let le=typeof H.result=="string"?H.result:"";if(s.current?.importJSON(le)??false){let F=s.current?.getShapes().length??0;V({type:"success",text:drawuiCore.t("import.success",{n:F})});}else V({type:"error",text:drawuiCore.t("import.fail")});B.current&&clearTimeout(B.current),B.current=setTimeout(()=>V(null),3500);},H.onerror=()=>{V({type:"error",text:drawuiCore.t("import.fail")}),B.current&&clearTimeout(B.current),B.current=setTimeout(()=>V(null),3500);},H.readAsText(f,"utf-8");},[]),_e=react.useCallback(f=>{let H=s.current,le=k.current;if(!H||!le)return;if(H.isPointerDown()){ge.current!==null&&(ge.current=null,M(null));return}let Ne=f.clientX,F=f.clientY;cancelAnimationFrame(Oe.current),Oe.current=requestAnimationFrame(()=>{let De=le.getBoundingClientRect(),Me=Ne-De.left,We=F-De.top,Qe=Me+12,Ue=We+12,zt=H.getSelectedUml()?.id,ct=H.getUmlRowAtScreenPoint({x:Me,y:We});if(ct&&ct.shape.id!==zt&&ct.text&&H.isUmlRowTextTruncated(ct)){ge.current!==ct.text&&(ge.current=ct.text,M({text:ct.text,x:Qe,y:Ue}));return}let yt=H.getShapeAtScreenPoint({x:Me,y:We});yt&&yt.text&&H.isShapeTextTruncated(yt.id)?ge.current!==yt.text&&(ge.current=yt.text,M({text:yt.text,x:Qe,y:Ue})):ge.current!==null&&(ge.current=null,M(null));});},[]),d=react.useCallback(()=>{M(null);},[]),r=react.useCallback(f=>{let H=s.current,le=k.current;if(!H||!le)return;let Ne=le.getBoundingClientRect(),F=f.clientX-Ne.left,De=f.clientY-Ne.top,Me=H.getUmlRowAtScreenPoint({x:F,y:De});if(Me){se(Me.shape.id);return}let We=H.getMindMapNodeAtScreenPoint({x:F,y:De});if(We){H.beginMindMapEdit(We.shapeId,We.nodeId);return}let Qe=H.getTableAtScreenPoint({x:F,y:De});Qe&&H.beginTableEdit(Qe.shapeId,Qe.row,Qe.col);},[]),W=react.useCallback(()=>{Ee(null);},[]),[K,q]=react.useState(null),$e=react.useCallback(()=>q(null),[]),ae=react.useCallback(f=>{f.preventDefault();let H=s.current,le=k.current;if(!H||!le||H.isEditing())return;let Ne=le.getBoundingClientRect(),F=H.getShapeAtScreenPoint({x:f.clientX-Ne.left,y:f.clientY-Ne.top});F?H.isShapeLocked(F.id)?H.selectShapeRaw(F.id):H.getSelectedIds().includes(F.id)||H.selectShape(F.id,f.shiftKey):H.selectShape("",false),q({x:f.clientX,y:f.clientY,shapeId:F?.id??null});},[]),mo=react.useCallback(f=>{f.preventDefault();},[]);return jsxRuntime.jsxs("div",{ref:S,className:`drawui-canvas-board ${e}`,onContextMenu:mo,onDragOver:f=>{f.dataTransfer?.types?.includes("Files")&&(f.preventDefault(),f.dataTransfer.dropEffect="copy");},onDrop:f=>{let H=Array.from(f.dataTransfer?.files||[]).filter(De=>(De.type||"").startsWith("image/"));if(!H.length)return;f.preventDefault();let le=s.current;if(!le)return;let Ne=f.currentTarget.getBoundingClientRect(),F=le.getCamera().screenToPage({x:f.clientX-Ne.left,y:f.clientY-Ne.top});le.insertImageFiles(H,F).then(()=>{!le.hasImageUploader()&&le.hasTemporaryImages()&&(V({type:"success",text:drawuiCore.t("image.temporaryInserted")}),B.current&&clearTimeout(B.current),B.current=setTimeout(()=>V(null),4e3));}).catch(De=>{V({type:"error",text:mn(De)}),B.current&&clearTimeout(B.current),B.current=setTimeout(()=>V(null),4e3);});},children:[jsxRuntime.jsx("canvas",{ref:k,className:"drawui-canvas",onMouseMove:_e,onMouseLeave:d,onDoubleClick:r,onContextMenu:ae}),ye&&jsxRuntime.jsx("div",{className:"drawui-tooltip",style:{left:ye.x,top:ye.y},children:ye.text}),jsxRuntime.jsx(qt,{activeTool:N,onToolChange:ot,showGrid:I,onToggleGrid:A,canUndo:G,canRedo:me,onUndo:L,onRedo:ee,onExport:re,onExportData:He,onImportData:Je,onHighlighterColorChange:f=>s.current?.setHighlighterColor(f),onStickyNoteColorChange:f=>s.current?.setStickyNoteColor(f),onInsertIcon:f=>s.current?.insertIcon(f),onInsertTable:(f,H)=>s.current?.insertTable(f,H),onInsertImage:f=>{let H=s.current;H&&H.insertImageFiles(f).then(()=>{!H.hasImageUploader()&&H.hasTemporaryImages()&&(V({type:"success",text:drawuiCore.t("image.temporaryInserted")}),B.current&&clearTimeout(B.current),B.current=setTimeout(()=>V(null),4e3));}).catch(le=>{V({type:"error",text:mn(le)}),B.current&&clearTimeout(B.current),B.current=setTimeout(()=>V(null),4e3);});},arrowStyle:Q,onArrowStyleChange:f=>s.current?.setArrowStyle(f)}),jsxRuntime.jsx(Qt,{onZoomIn:rt,onZoomOut:x,onReset:Z,zoomLevel:X}),jsxRuntime.jsx(_n,{editor:y,selectedCount:R,hasLineSelection:g,currentConnectionType:v,currentArrowHead:b,currentDashed:U}),jsxRuntime.jsx(Vn,{editor:y,umlClass:Le,editing:ie}),jsxRuntime.jsx(oo,{editor:y}),jsxRuntime.jsx(eo,{editor:y,panelOpen:_}),jsxRuntime.jsx(qn,{editor:y,panelOpen:_,onOpenPanel:()=>C(true)}),_&&jsxRuntime.jsx(so,{editor:y,mindMap:Se}),jsxRuntime.jsx(uo,{editor:y}),j&&jsxRuntime.jsx(po,{editor:y,x:j.x,y:j.y,context:j.context,existingArrowId:j.existingArrowId,defaultShapeType:j.defaultShapeType,onClose:W}),K&&y&&jsxRuntime.jsx(fo,{editor:y,pos:K,onClose:$e}),jsxRuntime.jsxs("div",{className:"drawui-status-bar",children:[jsxRuntime.jsx("div",{className:"drawui-status-item",children:jsxRuntime.jsx("span",{children:drawuiCore.t(Jr[N])})}),jsxRuntime.jsx("div",{className:"drawui-status-item",children:jsxRuntime.jsx("span",{children:R===0?drawuiCore.t("status.none"):drawuiCore.t("status.selected",{n:R})})}),jsxRuntime.jsx("div",{className:"drawui-status-item",children:jsxRuntime.jsxs("span",{children:[X,"%"]})})]}),ve&&jsxRuntime.jsxs("div",{className:"drawui-toast",children:[ve.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"})]}),ve.text]})]})}exports.CanvasBoard=Qr;exports.Toolbar=qt;exports.ZoomControl=Qt;
package/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as react from 'react';
2
- import { ToolType, Language, Shape, EditorData, Editor, ExportFormat, ArrowStyle } from 'drawui-core';
2
+ import { ToolType, Language, Shape, EditorData, Editor, ImageUploadOption, ExportFormat, ArrowStyle } from 'drawui-core';
3
3
  export { ToolType } from 'drawui-core';
4
4
 
5
5
  interface CanvasBoardProps {
@@ -15,8 +15,14 @@ interface CanvasBoardProps {
15
15
  onChange?: (data: EditorData) => void;
16
16
  /** 编辑器实例就绪回调:可拿到 Editor 做完全控制(setShapes/undo/zoom 等) */
17
17
  onReady?: (editor: Editor) => void;
18
+ /**
19
+ * 图片上传通道(「图片」按钮 / 粘贴 / 拖入文件时用):
20
+ * - `{ url }` 配置或自定义上传函数 → 图片传到接入方服务器,只存返回的 URL(刷新不丢)
21
+ * - 不传 → 退回本地临时 blob(图形带 temporary,刷新即失效)
22
+ */
23
+ imageUpload?: ImageUploadOption;
18
24
  }
19
- declare function CanvasBoard({ initialTool, className, themeColor, language, data, onChange, onReady, }: CanvasBoardProps): react.JSX.Element;
25
+ declare function CanvasBoard({ initialTool, className, themeColor, language, data, onChange, onReady, imageUpload, }: CanvasBoardProps): react.JSX.Element;
20
26
 
21
27
  interface ToolbarProps {
22
28
  activeTool: ToolType;
@@ -40,6 +46,8 @@ interface ToolbarProps {
40
46
  onInsertIcon?: (iconId: string) => void;
41
47
  /** 「表格」行列选择器里选了 rows×cols:宿主负责插入画布 */
42
48
  onInsertTable?: (rows: number, cols: number) => void;
49
+ /** 「图片」按钮选了文件(多选):宿主负责上传并插入画布 */
50
+ onInsertImage?: (files: File[]) => void;
43
51
  /** 新建箭头的默认样式(工具栏「箭头」下拉里展示/修改) */
44
52
  arrowStyle?: ArrowStyle;
45
53
  onArrowStyleChange?: (updates: Partial<ArrowStyle>) => void;