@huanban/rulego-editor-react 1.0.8 → 1.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs.js CHANGED
@@ -2508,5 +2508,5 @@ ${M}">
2508
2508
  ${g.desc||g.label||""}`,children:[N.jsx("div",{className:"rge-node-block__icon",children:g.icon?N.jsx("img",{src:g.icon,alt:"",className:"rge-node-block__icon-img"}):N.jsx("span",{className:"rge-node-block__icon-text",children:p.iconLabel})}),N.jsx("span",{className:"rge-node-block__label",children:g.label||g.type.split("/").pop()}),!g.notInput&&N.jsx("span",{className:"rge-node-block__port rge-node-block__port--input"}),!g.notOutput&&N.jsx("span",{className:"rge-node-block__port rge-node-block__port--output"})]},g.type)})})]},h)}),Object.keys(c).length===0&&N.jsxs("div",{className:"rge-sidebar-empty",children:[N.jsx("span",{style:{fontSize:32,opacity:.3},children:"📦"}),N.jsx("p",{children:"未找到匹配的组件"})]})]})]})};fC.displayName="ComponentSidebar";const LN=r=>r.toLowerCase().includes("int"),QN=r=>r.toLowerCase().includes("float"),gC=({visible:r,nodeModel:t,nodeView:e,onSubmit:o,onClose:i})=>{var S,M;const[n,a]=rt.useState({}),[s,l]=rt.useState({}),[c,u]=rt.useState({});rt.useEffect(()=>{if(!t)return;const O={...t.configuration||{}};e!=null&&e.fields&&e.fields.forEach(I=>{!(I.name in O)&&I.defaultValue!==void 0&&(O[I.name]=I.defaultValue)}),a({id:t.id||"",nodeId:t.nodeId||"",type:t.type||"",name:t.name||"",debugMode:t.debugMode||!1,configuration:O,additionalInfo:t.additionalInfo||{}});const b={},_={};Object.entries(O).forEach(([I,P])=>{Array.isArray(P)?_[I]=P.map(R=>({value:String(R)})):P&&typeof P=="object"&&!(P instanceof Date)&&(b[I]=Object.entries(P).map(([R,L])=>({key:R,value:String(L)})))}),l(b),u(_)},[t,e]);const d=rt.useCallback((O,b)=>{a(_=>({..._,[O]:b}))},[]),h=rt.useCallback((O,b)=>{a(_=>({..._,configuration:{..._.configuration,[O]:b}}))},[]),p=O=>{l(b=>({...b,[O]:[...b[O]||[],{key:"",value:""}]}))},f=(O,b)=>{l(_=>({..._,[O]:_[O].filter((I,P)=>P!==b)}))},g=(O,b,_,I)=>{l(P=>({...P,[O]:P[O].map((R,L)=>L===b?{...R,[_]:I}:R)}))},m=O=>{u(b=>({...b,[O]:[...b[O]||[],{value:""}]}))},y=(O,b)=>{u(_=>({..._,[O]:_[O].filter((I,P)=>P!==b)}))},v=(O,b,_)=>{u(I=>({...I,[O]:I[O].map((P,R)=>R===b?{value:_}:P)}))},x=()=>{const O={...n.configuration};Object.entries(s).forEach(([b,_])=>{const I={};_.forEach(P=>{P.key&&(I[P.key]=P.value)}),O[b]=I}),Object.entries(c).forEach(([b,_])=>{O[b]=_.map(I=>I.value).filter(Boolean)}),o({...n,configuration:O})};return!r||!t?null:N.jsx("div",{className:`rge-node-drawer-overlay ${r?"visible":""}`,onClick:i,children:N.jsxs("div",{className:"rge-node-drawer",onClick:O=>O.stopPropagation(),children:[N.jsxs("div",{className:"rge-drawer-header",children:[N.jsxs("div",{className:"rge-drawer-title",children:[N.jsx("span",{children:"💻"}),N.jsx("span",{children:(e==null?void 0:e.label)||t.type})]}),N.jsx("button",{className:"rge-drawer-close",onClick:i,children:"✕"})]}),N.jsxs("div",{className:"rge-drawer-body",children:[N.jsxs("div",{className:"rge-form-section",children:[N.jsx("label",{className:"rge-form-label",children:"节点 ID"}),N.jsxs("div",{className:"rge-form-row",children:[N.jsx("input",{type:"text",className:"rge-form-input rge-flex-1",value:n.id||"",onChange:O=>d("id",O.target.value)}),N.jsxs("label",{className:"rge-debug-toggle",children:[N.jsx("input",{type:"checkbox",checked:n.debugMode||!1,onChange:O=>d("debugMode",O.target.checked)}),N.jsx("span",{children:"🐛"}),N.jsx("span",{children:"调试"})]})]})]}),N.jsxs("div",{className:"rge-form-section",children:[N.jsx("label",{className:"rge-form-label",children:"名称"}),N.jsx("input",{type:"text",className:"rge-form-input",value:n.name||"",onChange:O=>d("name",O.target.value)})]}),(S=e==null?void 0:e.fields)==null?void 0:S.map(O=>{var b,_,I,P,R;return N.jsxs("div",{className:"rge-form-section",children:[N.jsx("label",{className:"rge-form-label",children:O.label||O.name}),(O.type==="Boolean"||O.type==="bool")&&N.jsxs("div",{className:"rge-form-switch-row",children:[N.jsxs("label",{className:"rge-switch-toggle",children:[N.jsx("input",{type:"checkbox",checked:!!((b=n.configuration)!=null&&b[O.name]),onChange:L=>h(O.name,L.target.checked)}),N.jsx("span",{className:"rge-switch-slider"})]}),O.desc&&N.jsx("span",{className:"rge-field-desc",children:O.desc})]}),O.type==="map"&&N.jsxs("div",{className:"rge-map-editor",children:[N.jsxs("div",{className:"rge-map-header",children:[N.jsx("span",{children:"Key"}),N.jsx("span",{children:"Value"}),N.jsx("span",{})]}),(s[O.name]||[]).map((L,w)=>N.jsxs("div",{className:"rge-map-row",children:[N.jsx("input",{type:"text",className:"rge-form-input",placeholder:"键",value:L.key,onChange:D=>g(O.name,w,"key",D.target.value)}),N.jsx("input",{type:"text",className:"rge-form-input",placeholder:"值",value:L.value,onChange:D=>g(O.name,w,"value",D.target.value)}),N.jsx("button",{className:"rge-btn-icon-danger",onClick:()=>f(O.name,w),children:"🗑"})]},w)),N.jsx("button",{className:"rge-btn-add",onClick:()=>p(O.name),children:"+ 添加"}),O.desc&&N.jsx("span",{className:"rge-field-desc",children:O.desc})]}),O.type==="array"&&N.jsxs("div",{className:"rge-array-editor",children:[(c[O.name]||[]).map((L,w)=>N.jsxs("div",{className:"rge-array-row",children:[N.jsx("input",{type:"text",className:"rge-form-input rge-flex-1",placeholder:"请输入值",value:L.value,onChange:D=>v(O.name,w,D.target.value)}),N.jsx("button",{className:"rge-btn-icon-danger",onClick:()=>y(O.name,w),children:"🗑"})]},w)),N.jsx("button",{className:"rge-btn-add",onClick:()=>m(O.name),children:"+ 添加"}),O.desc&&N.jsx("span",{className:"rge-field-desc",children:O.desc})]}),(O.name==="jsScript"||O.name==="JsScript")&&N.jsxs("div",{className:"rge-script-editor",children:[N.jsx("textarea",{className:"rge-code-textarea",rows:10,value:String(((_=n.configuration)==null?void 0:_[O.name])??""),onChange:L=>h(O.name,L.target.value),placeholder:"请输入 JS 脚本...",spellCheck:!1}),O.desc&&N.jsx("span",{className:"rge-field-desc",children:O.desc})]}),LN(O.type)&&O.name!=="jsScript"&&O.name!=="JsScript"&&N.jsxs(N.Fragment,{children:[N.jsx("input",{type:"number",className:"rge-form-input",value:String(((I=n.configuration)==null?void 0:I[O.name])??""),onChange:L=>h(O.name,parseInt(L.target.value,10)||0)}),O.desc&&N.jsx("span",{className:"rge-field-desc",children:O.desc})]}),QN(O.type)&&N.jsxs(N.Fragment,{children:[N.jsx("input",{type:"number",step:"0.01",className:"rge-form-input",value:String(((P=n.configuration)==null?void 0:P[O.name])??""),onChange:L=>h(O.name,parseFloat(L.target.value)||0)}),O.desc&&N.jsx("span",{className:"rge-field-desc",children:O.desc})]}),!["Boolean","bool","map","array"].includes(O.type)&&!LN(O.type)&&!QN(O.type)&&O.name!=="jsScript"&&O.name!=="JsScript"&&N.jsxs(N.Fragment,{children:[N.jsx("input",{type:"text",className:"rge-form-input",value:String(((R=n.configuration)==null?void 0:R[O.name])??""),onChange:L=>h(O.name,L.target.value)}),O.desc&&N.jsx("span",{className:"rge-field-desc",children:O.desc})]})]},O.name)}),N.jsxs("div",{className:"rge-form-section",children:[N.jsx("label",{className:"rge-form-label",children:"描述"}),N.jsx("textarea",{className:"rge-form-textarea",rows:3,placeholder:"请输入节点描述",value:String(((M=n.additionalInfo)==null?void 0:M.description)??""),onChange:O=>d("additionalInfo",{...n.additionalInfo,description:O.target.value})})]})]}),N.jsxs("div",{className:"rge-drawer-footer",children:[N.jsx("button",{className:"rge-btn-cancel",onClick:i,children:"取消"}),N.jsx("button",{className:"rge-btn-submit",onClick:x,children:"确认"})]})]})})};gC.displayName="NodePropertyDrawer";const RN=[{value:"Success",label:"成功 (Success)",color:"#52c41a"},{value:"Failure",label:"失败 (Failure)",color:"#ff4d4f"},{value:"True",label:"是 (True)",color:"#1890ff"},{value:"False",label:"否 (False)",color:"#fa8c16"},{value:"Post Telemetry",label:"Post Telemetry",color:"#722ed1"}],mC=({visible:r,edgeModel:t,onSubmit:e,onClose:o})=>{const[i,n]=rt.useState(""),[a,s]=rt.useState(""),[l,c]=rt.useState(!1);rt.useEffect(()=>{if(!t)return;const p=t.relationType||"Success";RN.some(g=>g.value===p)?(n(p),c(!1),s("")):(n(""),c(!0),s(p))},[t]);const u=p=>{n(p),c(!1),s("")},d=()=>{c(!0),n("")},h=()=>{if(!t)return;const p=l?a.trim()||"Success":i||"Success";e({...t,relationType:p})};return!r||!t?null:N.jsx("div",{className:`rge-edge-drawer-overlay ${r?"visible":""}`,onClick:o,children:N.jsxs("div",{className:"rge-edge-drawer",onClick:p=>p.stopPropagation(),children:[N.jsxs("div",{className:"rge-drawer-header",children:[N.jsxs("div",{className:"rge-drawer-title",children:[N.jsx("span",{children:"🔗"}),N.jsx("span",{children:"连线属性"})]}),N.jsx("button",{className:"rge-drawer-close",onClick:o,children:"✕"})]}),N.jsxs("div",{className:"rge-drawer-body",children:[N.jsxs("div",{className:"rge-form-section",children:[N.jsx("label",{className:"rge-form-label",children:"连线 ID"}),N.jsx("div",{className:"rge-form-value",children:t.id})]}),N.jsxs("div",{className:"rge-edge-endpoints",children:[N.jsxs("div",{className:"rge-endpoint",children:[N.jsx("span",{className:"rge-endpoint-label",children:"来源"}),N.jsx("span",{className:"rge-endpoint-id",children:t.sourceNodeId})]}),N.jsx("span",{className:"rge-endpoint-arrow",children:"→"}),N.jsxs("div",{className:"rge-endpoint",children:[N.jsx("span",{className:"rge-endpoint-label",children:"目标"}),N.jsx("span",{className:"rge-endpoint-id",children:t.targetNodeId})]})]}),N.jsxs("div",{className:"rge-form-section",children:[N.jsx("label",{className:"rge-form-label",children:"关系类型"}),N.jsxs("div",{className:"rge-relation-types",children:[RN.map(p=>N.jsxs("button",{className:`rge-relation-type-btn ${!l&&i===p.value?"active":""}`,style:{borderColor:!l&&i===p.value?p.color:void 0,color:!l&&i===p.value?p.color:void 0},onClick:()=>u(p.value),children:[!l&&i===p.value&&N.jsx("span",{children:"✓"}),p.label]},p.value)),N.jsx("button",{className:`rge-relation-type-btn ${l?"active custom":""}`,onClick:d,children:"自定义"})]}),l&&N.jsx("input",{type:"text",className:"rge-form-input rge-mt-8",placeholder:"请输入自定义关系类型",value:a,onChange:p=>s(p.target.value),autoFocus:!0})]})]}),N.jsxs("div",{className:"rge-drawer-footer",children:[N.jsx("button",{className:"rge-btn-cancel",onClick:o,children:"取消"}),N.jsx("button",{className:"rge-btn-submit",onClick:h,children:"确认"})]})]})})};mC.displayName="EdgePropertyDrawer";const vtt=(r,t)=>{console[r==="success"?"log":r==="warning"?"warn":"error"](`[DebugPanel] ${r}: ${t}`)},yC=({visible:r,chainId:t,selectedNodeId:e,onClose:o,onSendMessage:i,onFetchDebugLogs:n,onFetchRunLogs:a,onNotify:s=vtt})=>{const[l,c]=rt.useState("send"),[u,d]=rt.useState("TEST_MSG"),[h,p]=rt.useState(`{
2509
2509
  "temperature": 25.5,
2510
2510
  "humidity": 60
2511
- }`),[f,g]=rt.useState(!1),[m,y]=rt.useState(""),[v,x]=rt.useState([]),[S,M]=rt.useState(!1),[O,b]=rt.useState([]),[_,I]=rt.useState(!1),[P,R]=rt.useState({visible:!1,title:"",data:""}),L=rt.useCallback(async()=>{if(!t){s("warning","请先选择规则链");return}if(!i){s("warning","未配置发送消息回调");return}try{g(!0);let U;try{U=JSON.parse(h)}catch{s("error","消息体 JSON 格式错误");return}const ft=await i(t,u,U);ft.success?(s("success","消息发送成功"),y(JSON.stringify(ft.data,null,2))):(s("error","发送失败: "+(ft.msg||"未知错误")),y(ft.msg||"发送失败"))}catch(U){s("error","发送异常: "+(U instanceof Error?U.message:String(U)))}finally{g(!1)}},[t,u,h,i,s]),w=rt.useCallback(async()=>{if(!(!t||!n))try{M(!0);const U=await n(t,e);x(U.items||[])}catch{s("error","加载调试日志失败")}finally{M(!1)}},[t,e,n,s]),D=rt.useCallback(async()=>{if(a)try{I(!0);const U=await a();b(U||[])}catch{s("error","加载运行日志失败")}finally{I(!1)}},[a,s]),E=(U,ft)=>{let Ot=ft;try{Ot=JSON.stringify(JSON.parse(ft),null,2)}catch{}R({visible:!0,title:U,data:Ot})},W=U=>new Date(U).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}),V=async U=>{try{await navigator.clipboard.writeText(U),s("success","已复制")}catch{s("error","复制失败")}};return r?N.jsxs("div",{className:"rge-debug-panel",children:[N.jsxs("div",{className:"rge-debug-header",children:[N.jsxs("div",{className:"rge-debug-tabs",children:[N.jsx("button",{className:`rge-debug-tab ${l==="send"?"active":""}`,onClick:()=>c("send"),children:"📤 发送消息"}),N.jsx("button",{className:`rge-debug-tab ${l==="debug"?"active":""}`,onClick:()=>{c("debug"),w()},children:"🐛 调试日志"}),N.jsx("button",{className:`rge-debug-tab ${l==="logs"?"active":""}`,onClick:()=>{c("logs"),D()},children:"📋 运行日志"})]}),N.jsx("button",{className:"rge-drawer-close",onClick:o,children:"✕"})]}),l==="send"&&N.jsxs("div",{className:"rge-debug-body",children:[N.jsxs("div",{className:"rge-form-section",children:[N.jsx("label",{className:"rge-form-label",children:"规则链 ID"}),N.jsx("input",{type:"text",className:"rge-form-input",value:t,readOnly:!0})]}),N.jsxs("div",{className:"rge-form-section",children:[N.jsx("label",{className:"rge-form-label",children:"消息类型"}),N.jsx("input",{type:"text",className:"rge-form-input",value:u,onChange:U=>d(U.target.value),placeholder:"如 TEST_MSG"})]}),N.jsxs("div",{className:"rge-form-section",children:[N.jsx("label",{className:"rge-form-label",children:"消息体 (JSON)"}),N.jsx("textarea",{className:"rge-code-textarea",rows:8,value:h,onChange:U=>p(U.target.value),spellCheck:!1})]}),N.jsxs("button",{className:"rge-btn-submit rge-full-width",onClick:L,disabled:f,children:["📤 ",f?"发送中...":"发送测试消息"]}),m&&N.jsxs("div",{className:"rge-form-section rge-mt-16",children:[N.jsxs("div",{className:"rge-label-row",children:[N.jsx("label",{className:"rge-form-label",children:"响应数据"}),N.jsx("button",{className:"rge-btn-mini",onClick:()=>V(m),children:"📋 复制"})]}),N.jsx("pre",{className:"rge-response-pre",children:m})]})]}),l==="debug"&&N.jsxs("div",{className:"rge-debug-body",children:[N.jsxs("div",{className:"rge-toolbar-row",children:[e&&N.jsxs("span",{className:"rge-tag",children:["节点: ",e]}),N.jsxs("button",{className:"rge-btn-mini",onClick:w,disabled:S,children:["🔄 ",S?"加载中...":"刷新"]})]}),v.length===0?N.jsxs("div",{className:"rge-empty-tip",children:[N.jsx("span",{style:{fontSize:32,opacity:.3},children:"🐛"}),N.jsx("p",{children:S?"加载中...":"暂无调试日志"}),N.jsx("p",{className:"rge-sub-tip",children:'需要在节点上开启"调试模式"并发送消息'})]}):N.jsxs("div",{className:"rge-log-table",children:[N.jsxs("div",{className:"rge-log-table-header",children:[N.jsx("span",{children:"时间"}),N.jsx("span",{children:"类型"}),N.jsx("span",{children:"关系"}),N.jsx("span",{children:"消息类型"}),N.jsx("span",{children:"操作"})]}),v.map((U,ft)=>N.jsxs("div",{className:`rge-log-table-row ${U.err?"error":""}`,children:[N.jsx("span",{children:W(U.ts)}),N.jsx("span",{className:"rge-tag-small",children:U.flowType}),N.jsx("span",{className:"rge-tag-small",children:U.relationType}),N.jsx("span",{title:U.msg.type,children:U.msg.type.length>12?U.msg.type.slice(0,12)+"...":U.msg.type}),N.jsxs("span",{className:"rge-log-actions",children:[N.jsx("button",{className:"rge-btn-link",onClick:()=>E("数据",U.msg.data),children:"数据"}),N.jsx("button",{className:"rge-btn-link",onClick:()=>E("元数据",JSON.stringify(U.msg.metadata)),children:"元数据"}),U.err&&N.jsx("button",{className:"rge-btn-link danger",onClick:()=>E("错误",U.err||""),children:"错误"})]})]},ft))]})]}),l==="logs"&&N.jsxs("div",{className:"rge-debug-body",children:[N.jsx("div",{className:"rge-toolbar-row",children:N.jsxs("button",{className:"rge-btn-mini",onClick:D,disabled:_,children:["🔄 ",_?"加载中...":"刷新"]})}),O.length===0?N.jsxs("div",{className:"rge-empty-tip",children:[N.jsx("span",{style:{fontSize:32,opacity:.3},children:"📋"}),N.jsx("p",{children:_?"加载中...":"暂无运行日志"})]}):N.jsx("div",{className:"rge-log-list",children:O.map((U,ft)=>N.jsx("div",{className:"rge-run-log-item",onClick:()=>E("日志详情",JSON.stringify(U)),children:N.jsx("pre",{children:typeof U=="string"?U:JSON.stringify(U,null,2)})},ft))})]}),P.visible&&N.jsx("div",{className:"rge-detail-overlay",onClick:()=>R({...P,visible:!1}),children:N.jsxs("div",{className:"rge-detail-modal",onClick:U=>U.stopPropagation(),children:[N.jsxs("div",{className:"rge-detail-header",children:[N.jsx("span",{children:P.title}),N.jsxs("div",{children:[N.jsx("button",{className:"rge-btn-mini",onClick:()=>V(P.data),children:"📋"}),N.jsx("button",{className:"rge-drawer-close",onClick:()=>R({...P,visible:!1}),children:"✕"})]})]}),N.jsx("pre",{className:"rge-detail-pre",children:P.data})]})})]}):null};yC.displayName="DebugPanel";const vC=({visible:r,data:t,title:e="规则链数据",fileNamePrefix:o="rulechain",onClose:i,onNotify:n})=>{const a=t?JSON.stringify(t,null,2):"{}",s=async()=>{try{await navigator.clipboard.writeText(a),n==null||n("success","JSON 已复制到剪贴板")}catch{n==null||n("error","复制失败")}},l=()=>{try{const c=new Blob([a],{type:"application/json"}),u=URL.createObjectURL(c),d=new Date().toISOString().slice(0,19).replace(/[:]/g,"-"),h=`${o}_${d}.json`,p=document.createElement("a");p.href=u,p.download=h,document.body.appendChild(p),p.click(),document.body.removeChild(p),URL.revokeObjectURL(u),n==null||n("success",`已下载 ${h}`)}catch{n==null||n("error","下载失败")}};return r?N.jsx("div",{className:"rge-dataview-overlay",onClick:i,children:N.jsxs("div",{className:"rge-dataview-dialog",onClick:c=>c.stopPropagation(),children:[N.jsxs("div",{className:"rge-dialog-header",children:[N.jsxs("div",{className:"rge-dialog-title",children:[N.jsx("span",{children:"📋"}),N.jsx("span",{children:e})]}),N.jsx("button",{className:"rge-drawer-close",onClick:i,children:"✕"})]}),N.jsxs("div",{className:"rge-dialog-toolbar",children:[N.jsx("button",{className:"rge-btn-outline",onClick:s,children:"📋 复制"}),N.jsx("button",{className:"rge-btn-outline",onClick:l,children:"⬇️ 下载"})]}),N.jsx("div",{className:"rge-dialog-body",children:N.jsx("pre",{className:"rge-json-pre",children:a})})]})}):null};vC.displayName="DataViewDialog";const bC=({canUndo:r=!1,canRedo:t=!1,isFullscreen:e=!1,isDebugMode:o=!1,zoomLevel:i=100,hasSelection:n=!1,onSave:a,onUndo:s,onRedo:l,onDelete:c,onZoomIn:u,onZoomOut:d,onFitView:h,onResetZoom:p,onFullscreen:f,onToggleDebug:g,onViewData:m,onSettings:y,onValidate:v,onNew:x,onImport:S,onExport:M,extraButtons:O=[],hiddenButtons:b=[],chainName:_})=>{const[I,P]=rt.useState(!1),R=D=>b.includes(D),w=[{key:"new",icon:"📄",tooltip:"新建规则链",onClick:()=>x==null?void 0:x(),hidden:R("new")||!x},{key:"save",icon:"💾",tooltip:"保存 (Ctrl+S)",onClick:()=>a==null?void 0:a(),hidden:R("save")},{key:"import",icon:"📥",tooltip:"导入",onClick:()=>S==null?void 0:S(),hidden:R("import")||!S},{key:"export",icon:"📤",tooltip:"导出",onClick:()=>M==null?void 0:M(),hidden:R("export")||!M},{key:"undo",icon:"↩️",tooltip:"撤销 (Ctrl+Z)",onClick:()=>s==null?void 0:s(),disabled:!r,hidden:R("undo"),dividerBefore:!0},{key:"redo",icon:"↪️",tooltip:"重做 (Ctrl+Y)",onClick:()=>l==null?void 0:l(),disabled:!t,hidden:R("redo")},{key:"delete",icon:"🗑️",tooltip:"删除选中 (Del)",onClick:()=>c==null?void 0:c(),disabled:!n,hidden:R("delete")},{key:"zoomIn",icon:"🔍+",tooltip:"放大",onClick:()=>u==null?void 0:u(),hidden:R("zoomIn"),dividerBefore:!0},{key:"zoomOut",icon:"🔍-",tooltip:"缩小",onClick:()=>d==null?void 0:d(),hidden:R("zoomOut")},{key:"fitView",icon:"⊞",tooltip:"适应画布",onClick:()=>h==null?void 0:h(),hidden:R("fitView")},{key:"resetZoom",icon:"1:1",tooltip:"重置缩放",onClick:()=>p==null?void 0:p(),hidden:R("resetZoom")},{key:"validate",icon:"✅",tooltip:"校验规则链",onClick:()=>v==null?void 0:v(),hidden:R("validate")||!v,dividerBefore:!0},{key:"debug",icon:"🐛",tooltip:o?"关闭调试":"开启调试",onClick:()=>g==null?void 0:g(),active:o,hidden:R("debug")},{key:"viewData",icon:"{ }",tooltip:"查看数据",onClick:()=>m==null?void 0:m(),hidden:R("viewData")},{key:"settings",icon:"⚙️",tooltip:"设置",onClick:()=>y==null?void 0:y(),hidden:R("settings")||!y},{key:"fullscreen",icon:e?"⊟":"⊞",tooltip:e?"退出全屏":"全屏",onClick:()=>f==null?void 0:f(),hidden:R("fullscreen")},...O].filter(D=>!D.hidden);return N.jsxs("div",{className:"rge-editor-toolbar",children:[N.jsx("div",{className:"rge-toolbar-left",children:w.map(D=>N.jsxs(rt.Fragment,{children:[D.dividerBefore&&N.jsx("div",{className:"rge-toolbar-divider"}),N.jsx("button",{className:`rge-toolbar-btn ${D.active?"active":""} ${D.disabled?"disabled":""}`,onClick:D.onClick,disabled:D.disabled,title:D.tooltip,children:N.jsx("span",{className:"rge-toolbar-icon",children:D.icon})})]},D.key))}),_&&N.jsx("div",{className:"rge-toolbar-center",children:N.jsx("span",{className:"rge-chain-name",children:_})}),N.jsxs("div",{className:"rge-toolbar-right",children:[N.jsxs("button",{className:"rge-toolbar-zoom-btn",onClick:()=>P(!I),title:"缩放选项",children:[i,"%"]}),I&&N.jsxs("div",{className:"rge-zoom-menu",onMouseLeave:()=>P(!1),children:[[50,75,100,125,150,200].map(D=>N.jsxs("button",{className:`rge-zoom-option ${D===i?"active":""}`,onClick:()=>{p==null||p(),P(!1)},children:[D,"%"]},D)),N.jsx("div",{className:"rge-toolbar-divider horizontal"}),N.jsx("button",{className:"rge-zoom-option",onClick:()=>{h==null||h(),P(!1)},children:"适应画布"})]})]})]})};bC.displayName="EditorToolbar";const OC=({visible:r,x:t,y:e,items:o,onClose:i})=>{const n=rt.useRef(null),a=rt.useCallback(u=>{n.current&&!n.current.contains(u.target)&&i()},[i]),s=rt.useCallback(u=>{u.key==="Escape"&&i()},[i]);if(rt.useEffect(()=>(r&&(document.addEventListener("mousedown",a),document.addEventListener("keydown",s)),()=>{document.removeEventListener("mousedown",a),document.removeEventListener("keydown",s)}),[r,a,s]),rt.useEffect(()=>{if(r&&n.current){const u=n.current.getBoundingClientRect(),d=window.innerWidth,h=window.innerHeight;let p=t,f=e;u.right>d&&(p=d-u.width-8),u.bottom>h&&(f=h-u.height-8),p<0&&(p=8),f<0&&(f=8),n.current.style.left=`${p}px`,n.current.style.top=`${f}px`}},[r,t,e]),!r)return null;const l=o.filter(u=>!u.hidden),c=u=>u.children&&u.children.length>0?N.jsxs("div",{className:"rge-ctx-menu-item has-submenu",children:[N.jsxs("div",{className:"rge-ctx-menu-item-content",children:[u.icon&&N.jsx("span",{className:"rge-ctx-menu-icon",children:u.icon}),N.jsx("span",{className:"rge-ctx-menu-label",children:u.label}),N.jsx("span",{className:"rge-ctx-menu-arrow",children:"▶"})]}),N.jsx("div",{className:"rge-ctx-submenu",children:u.children.filter(d=>!d.hidden).map(c)})]},u.key):N.jsxs(rt.Fragment,{children:[u.dividerBefore&&N.jsx("div",{className:"rge-ctx-menu-divider"}),N.jsx("button",{className:`rge-ctx-menu-item ${u.disabled?"disabled":""} ${u.danger?"danger":""}`,onClick:()=>{var d;u.disabled||((d=u.onClick)==null||d.call(u),i())},disabled:u.disabled,children:N.jsxs("div",{className:"rge-ctx-menu-item-content",children:[u.icon&&N.jsx("span",{className:"rge-ctx-menu-icon",children:u.icon}),N.jsx("span",{className:"rge-ctx-menu-label",children:u.label}),u.shortcut&&N.jsx("span",{className:"rge-ctx-menu-shortcut",children:u.shortcut})]})})]},u.key);return N.jsx("div",{ref:n,className:"rge-ctx-menu",style:{left:t,top:e},children:l.map(c)})};OC.displayName="ContextMenu";function btt(r){return[{key:"edit",label:"编辑属性",icon:"✏️",shortcut:"Enter",onClick:r.onEditProperties},{key:"copy",label:"复制",icon:"📋",shortcut:"Ctrl+C",onClick:r.onCopy},{key:"duplicate",label:"复制节点",icon:"📑",shortcut:"Ctrl+D",onClick:r.onDuplicate},{key:"connections",label:"查看连接",icon:"🔗",onClick:r.onViewConnections},{key:"delete",label:"删除",icon:"🗑️",shortcut:"Del",danger:!0,dividerBefore:!0,onClick:r.onDelete}]}function Ott(r){return[{key:"edit",label:"编辑属性",icon:"✏️",onClick:r.onEditProperties},{key:"delete",label:"删除",icon:"🗑️",shortcut:"Del",danger:!0,dividerBefore:!0,onClick:r.onDelete}]}function xtt(r){return[{key:"paste",label:"粘贴",icon:"📋",shortcut:"Ctrl+V",onClick:r.onPaste},{key:"selectAll",label:"全选",icon:"⊞",shortcut:"Ctrl+A",onClick:r.onSelectAll},{key:"fitView",label:"适应画布",icon:"🔲",dividerBefore:!0,onClick:r.onFitView},{key:"resetZoom",label:"重置缩放",icon:"1:1",onClick:r.onResetZoom}]}const Rg={"start-input":"#52c41a",filter:"#1890ff",jsFilter:"#1890ff",exprFilter:"#1890ff",transformer:"#722ed1",jsTransform:"#722ed1",template:"#722ed1",action:"#fa8c16",restApiCall:"#fa8c16",mqttClient:"#fa8c16",sendMail:"#fa8c16",dbClient:"#fa8c16",log:"#fa8c16",subChain:"#eb2f96",default:"#8c8c8c"};function Mtt(r,t){return t||(r&&Rg[r]?Rg[r]:Rg.default)}const xC=({nodes:r,viewport:t,width:e=200,height:o=150,defaultCollapsed:i=!1,position:n="bottom-right",onViewportChange:a,onNodeClick:s})=>{const[l,c]=rt.useState(i),u=rt.useRef(null),d=rt.useRef(!1),h=rt.useCallback(()=>{if(r.length===0)return{minX:0,minY:0,maxX:100,maxY:100};let v=1/0,x=1/0,S=-1/0,M=-1/0;r.forEach(b=>{const _=b.width||60,I=b.height||40;v=Math.min(v,b.x),x=Math.min(x,b.y),S=Math.max(S,b.x+_),M=Math.max(M,b.y+I)});const O=50;return{minX:v-O,minY:x-O,maxX:S+O,maxY:M+O}},[r]);rt.useEffect(()=>{if(l||!u.current)return;const v=u.current.getContext("2d");if(!v)return;const x=h(),S=x.maxX-x.minX,M=x.maxY-x.minY,O=Math.min(e/S,o/M);if(v.clearRect(0,0,e,o),v.fillStyle="rgba(30, 30, 30, 0.85)",v.fillRect(0,0,e,o),r.forEach(b=>{const _=(b.x-x.minX)*O,I=(b.y-x.minY)*O,P=Math.max((b.width||60)*O,4),R=Math.max((b.height||40)*O,3);v.fillStyle=b.selected?"#ff4d4f":Mtt(b.type,b.color),v.fillRect(_,I,P,R),b.selected&&(v.strokeStyle="#fff",v.lineWidth=1,v.strokeRect(_-1,I-1,P+2,R+2))}),t){const b=(t.x-x.minX)*O,_=(t.y-x.minY)*O,I=t.width*O,P=t.height*O;v.strokeStyle="rgba(64, 169, 255, 0.8)",v.lineWidth=2,v.strokeRect(b,_,I,P),v.fillStyle="rgba(64, 169, 255, 0.1)",v.fillRect(b,_,I,P)}},[r,t,l,e,o,h]);const p=rt.useCallback(v=>{if(!a||!u.current)return;const x=u.current.getBoundingClientRect(),S=v.clientX-x.left,M=v.clientY-x.top,O=h(),b=O.maxX-O.minX,_=O.maxY-O.minY,I=Math.min(e/b,o/_),P=S/I+O.minX,R=M/I+O.minY;a({x:P,y:R})},[a,h,e,o]),f=rt.useCallback(v=>{d.current=!0,p(v)},[p]),g=rt.useCallback(v=>{d.current&&p(v)},[p]),m=rt.useCallback(()=>{d.current=!1},[]),y={position:"absolute",zIndex:100,...n.includes("bottom")?{bottom:16}:{top:16},...n.includes("right")?{right:16}:{left:16}};return N.jsxs("div",{className:"rge-minimap",style:y,children:[N.jsxs("div",{className:"rge-minimap-header",onClick:()=>c(!l),children:[N.jsx("span",{className:"rge-minimap-title",children:"🗺 小地图"}),N.jsx("span",{className:"rge-minimap-toggle",children:l?"▶":"▼"})]}),!l&&N.jsx("canvas",{ref:u,width:e,height:o,className:"rge-minimap-canvas",onMouseDown:f,onMouseMove:g,onMouseUp:m,onMouseLeave:m})]})};xC.displayName="MiniMap";const Ad={error:"❌",warning:"⚠️",info:"ℹ️"},MC=({items:r,isValid:t,visible:e=!0,loading:o=!1,title:i="规则链校验",onValidate:n,onItemClick:a,onClose:s,onClear:l})=>{const[c,u]=rt.useState("all"),d=rt.useMemo(()=>{const p={error:0,warning:0,info:0};return r.forEach(f=>{p[f.level]!==void 0&&p[f.level]++}),p},[r]),h=rt.useMemo(()=>c==="all"?r:r.filter(p=>p.level===c),[r,c]);return e?N.jsxs("div",{className:"rge-validation-panel",children:[N.jsxs("div",{className:"rge-validation-header",children:[N.jsxs("span",{className:"rge-validation-title",children:[t!==void 0&&(t?"✅":"❌")," ",i]}),N.jsxs("div",{className:"rge-validation-actions",children:[n&&N.jsxs("button",{className:"rge-validation-btn",onClick:n,disabled:o,title:"重新校验",children:[o?"⏳":"🔄"," 校验"]}),l&&r.length>0&&N.jsx("button",{className:"rge-validation-btn",onClick:l,title:"清除结果",children:"🧹"}),s&&N.jsx("button",{className:"rge-validation-btn",onClick:s,title:"关闭",children:"✕"})]})]}),N.jsxs("div",{className:"rge-validation-stats",children:[N.jsxs("button",{className:`rge-validation-stat ${c==="all"?"active":""}`,onClick:()=>u("all"),children:["全部 (",r.length,")"]}),N.jsxs("button",{className:`rge-validation-stat error ${c==="error"?"active":""}`,onClick:()=>u("error"),children:[Ad.error," ",d.error]}),N.jsxs("button",{className:`rge-validation-stat warning ${c==="warning"?"active":""}`,onClick:()=>u("warning"),children:[Ad.warning," ",d.warning]}),N.jsxs("button",{className:`rge-validation-stat info ${c==="info"?"active":""}`,onClick:()=>u("info"),children:[Ad.info," ",d.info]})]}),N.jsxs("div",{className:"rge-validation-body",children:[o&&N.jsx("div",{className:"rge-validation-loading",children:"⏳ 正在校验..."}),!o&&h.length===0&&N.jsx("div",{className:"rge-validation-empty",children:r.length===0?"🎉 无校验结果,请点击校验按钮开始":"当前筛选无结果"}),!o&&h.map((p,f)=>N.jsxs("div",{className:`rge-validation-item level-${p.level}`,onClick:()=>a==null?void 0:a(p),role:"button",tabIndex:0,children:[N.jsx("span",{className:"rge-validation-item-icon",children:Ad[p.level]}),N.jsxs("div",{className:"rge-validation-item-content",children:[N.jsx("div",{className:"rge-validation-item-message",children:p.message}),N.jsxs("div",{className:"rge-validation-item-meta",children:[N.jsx("span",{className:"rge-validation-item-rule",children:p.rule}),p.elementId&&N.jsxs("span",{className:"rge-validation-item-element",children:[p.elementType==="node"?"📦":"↗️"," ",p.elementId]})]})]})]},`${p.rule}-${p.elementId||f}`))]})]}):null};MC.displayName="ValidationPanel";const wC=({visible:r,data:t,readOnly:e=!1,title:o="规则链设置",customFields:i=[],onSave:n,onClose:a})=>{const[s,l]=rt.useState(t),[c,u]=rt.useState({});rt.useEffect(()=>{l(t),u({})},[t,r]);const d=(f,g)=>{l(m=>({...m,[f]:g})),c[f]&&u(m=>{const y={...m};return delete y[f],y})},h=()=>{const f={};return(!s.name||s.name.trim()==="")&&(f.name="规则链名称不能为空"),u(f),Object.keys(f).length===0},p=()=>{e||h()&&(n==null||n(s),a())};return rt.useEffect(()=>{const f=g=>{g.key==="Escape"&&r&&a()};return document.addEventListener("keydown",f),()=>document.removeEventListener("keydown",f)},[r,a]),r?N.jsx("div",{className:"rge-modal-overlay",onClick:a,children:N.jsxs("div",{className:"rge-modal",onClick:f=>f.stopPropagation(),children:[N.jsxs("div",{className:"rge-modal-header",children:[N.jsxs("span",{className:"rge-modal-title",children:["⚙️ ",o]}),N.jsx("button",{className:"rge-modal-close",onClick:a,children:"✕"})]}),N.jsxs("div",{className:"rge-modal-body",children:[s.id&&N.jsxs("div",{className:"rge-form-group",children:[N.jsx("label",{className:"rge-form-label",children:"ID"}),N.jsx("input",{className:"rge-form-input",value:s.id,disabled:!0})]}),N.jsxs("div",{className:"rge-form-group",children:[N.jsxs("label",{className:"rge-form-label",children:["名称 ",N.jsx("span",{className:"rge-required",children:"*"})]}),N.jsx("input",{className:`rge-form-input ${c.name?"error":""}`,value:s.name,onChange:f=>d("name",f.target.value),placeholder:"请输入规则链名称",disabled:e}),c.name&&N.jsx("span",{className:"rge-form-error",children:c.name})]}),N.jsxs("div",{className:"rge-form-group",children:[N.jsx("label",{className:"rge-form-label",children:"描述"}),N.jsx("textarea",{className:"rge-form-textarea",value:s.description||"",onChange:f=>d("description",f.target.value),placeholder:"请输入规则链描述",rows:3,disabled:e})]}),N.jsxs("div",{className:"rge-form-row",children:[N.jsxs("div",{className:"rge-form-group inline",children:[N.jsx("label",{className:"rge-form-label",children:"根链"}),N.jsxs("label",{className:"rge-switch",children:[N.jsx("input",{type:"checkbox",checked:s.root||!1,onChange:f=>d("root",f.target.checked),disabled:e}),N.jsx("span",{className:"rge-switch-slider"})]})]}),N.jsxs("div",{className:"rge-form-group inline",children:[N.jsx("label",{className:"rge-form-label",children:"调试模式"}),N.jsxs("label",{className:"rge-switch",children:[N.jsx("input",{type:"checkbox",checked:s.debugMode||!1,onChange:f=>d("debugMode",f.target.checked),disabled:e}),N.jsx("span",{className:"rge-switch-slider"})]})]})]}),i.map(f=>{var g;return N.jsxs("div",{className:"rge-form-group",children:[N.jsx("label",{className:"rge-form-label",children:f.label}),f.type==="text"&&N.jsx("input",{className:"rge-form-input",value:String((s[f.key]??f.defaultValue)||""),onChange:m=>d(f.key,m.target.value),placeholder:f.placeholder,disabled:e}),f.type==="number"&&N.jsx("input",{className:"rge-form-input",type:"number",value:s[f.key]??f.defaultValue??"",onChange:m=>d(f.key,Number(m.target.value)),placeholder:f.placeholder,disabled:e}),f.type==="textarea"&&N.jsx("textarea",{className:"rge-form-textarea",value:String((s[f.key]??f.defaultValue)||""),onChange:m=>d(f.key,m.target.value),placeholder:f.placeholder,rows:3,disabled:e}),f.type==="select"&&N.jsx("select",{className:"rge-form-select",value:String((s[f.key]??f.defaultValue)||""),onChange:m=>d(f.key,m.target.value),disabled:e,children:(g=f.options)==null?void 0:g.map(m=>N.jsx("option",{value:m.value,children:m.label},m.value))}),f.type==="switch"&&N.jsxs("label",{className:"rge-switch",children:[N.jsx("input",{type:"checkbox",checked:s[f.key]??f.defaultValue??!1,onChange:m=>d(f.key,m.target.checked),disabled:e}),N.jsx("span",{className:"rge-switch-slider"})]}),f.help&&N.jsx("span",{className:"rge-form-help",children:f.help})]},f.key)}),s.additionalInfo&&Object.keys(s.additionalInfo).length>0&&N.jsxs("div",{className:"rge-form-group",children:[N.jsx("label",{className:"rge-form-label",children:"额外配置 (JSON)"}),N.jsx("textarea",{className:"rge-form-textarea mono",value:JSON.stringify(s.additionalInfo,null,2),onChange:f=>{try{d("additionalInfo",JSON.parse(f.target.value))}catch{}},rows:5,disabled:e})]})]}),N.jsxs("div",{className:"rge-modal-footer",children:[N.jsx("button",{className:"rge-btn secondary",onClick:a,children:"取消"}),!e&&N.jsx("button",{className:"rge-btn primary",onClick:p,children:"💾 保存"})]})]})}):null};wC.displayName="RuleChainSettings";const wtt=({mode:r="export",data:t,chainName:e="rule-chain",onImport:o,onClose:i,onNotify:n})=>{var _,I,P,R,L,w,D,E,W;const[a,s]=rt.useState(r),[l,c]=rt.useState(""),[u,d]=rt.useState(null),[h,p]=rt.useState(""),[f,g]=rt.useState(!1),m=rt.useRef(null),y=t?JSON.stringify(t,null,2):"",v=rt.useCallback(V=>{p(""),c(V);try{const U=JSON.parse(V);if(!U.ruleChain&&!U.metadata){p("JSON 格式不符合 RuleGo 规则链规范(缺少 ruleChain 或 metadata 字段)"),d(null);return}d(U)}catch(U){p(`JSON 解析失败: ${U.message}`),d(null)}},[]),x=rt.useCallback(V=>{var Ot;const U=(Ot=V.target.files)==null?void 0:Ot[0];if(!U)return;if(!U.name.endsWith(".json")){p("请选择 .json 文件");return}const ft=new FileReader;ft.onload=Q=>{var ot;const F=(ot=Q.target)==null?void 0:ot.result;v(F)},ft.readAsText(U)},[v]),S=rt.useCallback(V=>{var Ot;V.preventDefault(),g(!1);const U=(Ot=V.dataTransfer.files)==null?void 0:Ot[0];if(!U)return;if(!U.name.endsWith(".json")){p("请选择 .json 文件");return}const ft=new FileReader;ft.onload=Q=>{var ot;const F=(ot=Q.target)==null?void 0:ot.result;v(F)},ft.readAsText(U)},[v]),M=rt.useCallback(()=>{navigator.clipboard.writeText(y).then(()=>{n==null||n("success","已复制到剪贴板")}).catch(()=>{const V=document.createElement("textarea");V.value=y,document.body.appendChild(V),V.select(),document.execCommand("copy"),document.body.removeChild(V),n==null||n("success","已复制到剪贴板")})},[y,n]),O=rt.useCallback(()=>{const U=`${e.replace(/[^a-zA-Z0-9_\-\u4e00-\u9fa5]/g,"_")}_${new Date().toISOString().slice(0,10)}.json`,ft=new Blob([y],{type:"application/json"}),Ot=URL.createObjectURL(ft),Q=document.createElement("a");Q.href=Ot,Q.download=U,document.body.appendChild(Q),Q.click(),document.body.removeChild(Q),URL.revokeObjectURL(Ot),n==null||n("success",`已下载: ${U}`)},[y,e,n]),b=rt.useCallback(()=>{if(!u){n==null||n("error","没有可导入的数据");return}o==null||o(u),n==null||n("success","规则链导入成功"),i()},[u,o,n,i]);return N.jsx("div",{className:"rge-modal-overlay",onClick:V=>{V.target===V.currentTarget&&i()},children:N.jsxs("div",{className:"rge-modal",style:{width:640},children:[N.jsxs("div",{className:"rge-modal-header",children:[N.jsx("div",{className:"rge-modal-title",children:a==="export"?"📤 导出规则链":"📥 导入规则链"}),N.jsx("button",{className:"rge-modal-close",onClick:i,children:"✕"})]}),N.jsxs("div",{className:"rge-ie-tabs",children:[N.jsx("button",{className:`rge-ie-tab ${a==="export"?"active":""}`,onClick:()=>s("export"),children:"📤 导出"}),N.jsx("button",{className:`rge-ie-tab ${a==="import"?"active":""}`,onClick:()=>s("import"),children:"📥 导入"})]}),N.jsx("div",{className:"rge-modal-body",children:a==="export"?N.jsxs(N.Fragment,{children:[N.jsxs("div",{className:"rge-ie-info",children:[N.jsxs("span",{children:["📋 节点: ",((I=(_=t==null?void 0:t.metadata)==null?void 0:_.nodes)==null?void 0:I.length)||0]}),N.jsxs("span",{children:["🔗 连线: ",((R=(P=t==null?void 0:t.metadata)==null?void 0:P.connections)==null?void 0:R.length)||0]}),N.jsxs("span",{children:["📏 大小: ",(y.length/1024).toFixed(1)," KB"]})]}),N.jsx("pre",{className:"rge-ie-preview",children:y})]}):N.jsxs(N.Fragment,{children:[N.jsxs("div",{className:`rge-ie-dropzone ${f?"dragover":""} ${l?"has-file":""}`,onDragOver:V=>{V.preventDefault(),g(!0)},onDragLeave:()=>g(!1),onDrop:S,onClick:()=>{var V;return(V=m.current)==null?void 0:V.click()},children:[N.jsx("input",{ref:m,type:"file",accept:".json",style:{display:"none"},onChange:x}),l?N.jsx("span",{className:"rge-ie-file-name",children:"✅ 文件已加载,点击重新选择"}):N.jsxs(N.Fragment,{children:[N.jsx("span",{className:"rge-ie-drop-icon",children:"📁"}),N.jsx("span",{className:"rge-ie-drop-text",children:"拖拽 JSON 文件到此处,或点击选择文件"})]})]}),h&&N.jsxs("div",{className:"rge-ie-error",children:["❌ ",h]}),u&&N.jsxs("div",{className:"rge-ie-import-info",children:[N.jsxs("div",{className:"rge-ie-info",children:[N.jsxs("span",{children:["📋 节点: ",((w=(L=u==null?void 0:u.metadata)==null?void 0:L.nodes)==null?void 0:w.length)||0]}),N.jsxs("span",{children:["🔗 连线: ",((E=(D=u==null?void 0:u.metadata)==null?void 0:D.connections)==null?void 0:E.length)||0]}),N.jsxs("span",{children:["📛 名称: ",((W=u==null?void 0:u.ruleChain)==null?void 0:W.name)||"未知"]})]}),N.jsx("pre",{className:"rge-ie-preview",style:{maxHeight:200},children:JSON.stringify(u,null,2)})]})]})}),N.jsxs("div",{className:"rge-modal-footer",children:[N.jsx("button",{className:"rge-btn secondary",onClick:i,children:"取消"}),a==="export"?N.jsxs(N.Fragment,{children:[N.jsx("button",{className:"rge-btn secondary",onClick:M,children:"📋 复制"}),N.jsx("button",{className:"rge-btn primary",onClick:O,children:"💾 下载文件"})]}):N.jsx("button",{className:"rge-btn primary",onClick:b,disabled:!u,children:"确认导入"})]})]})})};function YN(r,t){if(!t)return r;const e=r.toLowerCase(),o=t.toLowerCase(),i=e.indexOf(o);return i===-1?r:N.jsxs(N.Fragment,{children:[r.slice(0,i),N.jsx("mark",{className:"rge-search-highlight",children:r.slice(i,i+t.length)}),r.slice(i+t.length)]})}const Ntt=({nodes:r,onSelectNode:t,onClose:e,position:o="top-center"})=>{const[i,n]=rt.useState(""),[a,s]=rt.useState(0),l=rt.useRef(null);rt.useEffect(()=>{var p;(p=l.current)==null||p.focus()},[]);const c=rt.useMemo(()=>{if(!i.trim())return[];const p=i.toLowerCase().trim();return r.filter(f=>f.name.toLowerCase().includes(p)||f.type.toLowerCase().includes(p)||f.id.toLowerCase().includes(p)||f.typeLabel&&f.typeLabel.toLowerCase().includes(p)||f.extra&&f.extra.toLowerCase().includes(p))},[r,i]),u=rt.useCallback(p=>{switch(p.key){case"ArrowDown":p.preventDefault(),s(f=>Math.min(f+1,c.length-1));break;case"ArrowUp":p.preventDefault(),s(f=>Math.max(f-1,0));break;case"Enter":p.preventDefault(),c[a]&&(t==null||t(c[a].id));break;case"Escape":p.preventDefault(),e();break}},[c,a,t,e]),d=rt.useCallback(p=>{n(p.target.value),s(0)},[]),h=rt.useCallback(p=>{t==null||t(p)},[t]);return N.jsxs("div",{className:`rge-search-panel ${o}`,children:[N.jsxs("div",{className:"rge-search-input-wrapper",children:[N.jsx("span",{className:"rge-search-icon",children:"🔍"}),N.jsx("input",{ref:l,type:"text",className:"rge-search-input",placeholder:"搜索节点名称、类型或 ID...",value:i,onChange:d,onKeyDown:u}),i&&N.jsxs("span",{className:"rge-search-count",children:[c.length," 个结果"]}),N.jsx("button",{className:"rge-search-close",onClick:e,children:"✕"})]}),i&&c.length>0&&N.jsx("div",{className:"rge-search-results",children:c.map((p,f)=>N.jsxs("div",{className:`rge-search-result-item ${f===a?"active":""}`,onClick:()=>h(p.id),onMouseEnter:()=>s(f),children:[N.jsxs("div",{className:"rge-search-result-main",children:[N.jsx("span",{className:"rge-search-result-name",children:YN(p.name,i)}),N.jsx("span",{className:"rge-search-result-type",children:p.typeLabel||p.type})]}),N.jsxs("div",{className:"rge-search-result-id",children:["ID: ",YN(p.id,i)]})]},p.id))}),i&&c.length===0&&N.jsx("div",{className:"rge-search-empty",children:"🔍 没有找到匹配的节点"})]})},Stt={design:"✏️",info:"ℹ️",start:"▶️",stop:"⏹️",copy:"📋",delete:"🗑️",search:"🔍",refresh:"🔄",add:"➕",workflow:"⚡",logs:"📄"},_tt=r=>{var nt,ht;const{apiBase:t,apiOptions:e,fetcher:o,pageSize:i=10,theme:n="light",className:a="",style:s,icons:l,showSearch:c=!0,showCreate:u=!0,showRefresh:d=!0,renderHeader:h,renderActions:p,renderEmpty:f,renderCreateForm:g,renderRow:m,onDesign:y,onInfo:v,onViewLogs:x,onChange:S,onError:M,onCreateSuccess:O}=r,b={...Stt,...l},_=rt.useRef(null);o?_.current=o:t&&(!_.current||((ht=(nt=_.current)==null?void 0:nt.getApiBase)==null?void 0:ht.call(nt))!==t)&&(_.current=new Ka({apiBase:t,...e}));const I=_.current,[P,R]=rt.useState([]),[L,w]=rt.useState(0),[D,E]=rt.useState(1),[W]=rt.useState(i),[V,U]=rt.useState(""),[ft,Ot]=rt.useState(!1),[Q,F]=rt.useState(!1),[ot,st]=rt.useState(""),[at,z]=rt.useState(""),[B,X]=rt.useState(null),it=rt.useCallback(async(mt,vt)=>{if(I){Ot(!0);try{const dt=await I.list(mt??D,W,vt??V);R(dt.items),w(dt.total)}catch(dt){M==null||M(dt instanceof Error?dt:new Error(String(dt)))}finally{Ot(!1)}}},[I,D,W,V,M]);rt.useEffect(()=>{it()},[it]);const ut=rt.useCallback(()=>{E(1),it(1,V)},[V,it]),wt=rt.useCallback(mt=>{mt.key==="Enter"&&ut()},[ut]),bt=Math.max(1,Math.ceil(L/W)),lt=rt.useCallback(()=>{D>1&&(E(D-1),it(D-1))},[D,it]),Qt=rt.useCallback(()=>{D<bt&&(E(D+1),it(D+1))},[D,bt,it]),It=rt.useCallback(async(mt,vt)=>{if(I){X(mt);try{const dt=await I.operate(mt,vt);if(!dt.success)throw new Error(dt.msg||"操作失败");await it(),S==null||S()}catch(dt){M==null||M(dt instanceof Error?dt:new Error(String(dt)))}finally{X(null)}}},[I,it,S,M]),Yt=rt.useCallback(async mt=>{if(I){X(mt);try{const vt=await I.copy(mt);if(!vt.success)throw new Error(vt.msg||"复制失败");await it(),S==null||S()}catch(vt){M==null||M(vt instanceof Error?vt:new Error(String(vt)))}finally{X(null)}}},[I,it,S,M]),St=rt.useCallback(async(mt,vt)=>{if(I&&window.confirm(`确定删除工作流「${vt}」吗?此操作不可恢复。`)){X(mt);try{const dt=await I.remove(mt);if(!dt.success)throw new Error(dt.msg||"删除失败");await it(),S==null||S()}catch(dt){M==null||M(dt instanceof Error?dt:new Error(String(dt)))}finally{X(null)}}},[I,it,S,M]),xt=rt.useCallback(async mt=>{if(!I)return;const vt=mt||{ruleChain:{id:Ka.generateChainId(),name:ot.trim()||"新工作流",root:!1,disabled:!0,additionalInfo:{description:at.trim(),createTime:new Date().toISOString()}},metadata:{nodes:[],connections:[]}};try{const dt=await I.create(vt);if(!dt.success)throw new Error(dt.msg||"创建失败");F(!1),st(""),z(""),await it(),S==null||S();const Zt=vt.ruleChain,Jt=String((Zt==null?void 0:Zt.id)??"");Jt&&(O==null||O(Jt))}catch(dt){M==null||M(dt instanceof Error?dt:new Error(String(dt)))}},[I,ot,at,it,S,M,O]),T=mt=>{const vt=B===mt.id;return N.jsxs("div",{className:"huanban_rulego_list__actions",children:[y&&N.jsxs("button",{className:"huanban_rulego_list__action_btn huanban_rulego_list__action_btn--design",disabled:vt,onClick:()=>y(mt.id),title:"设计",children:[b.design," ",N.jsx("span",{children:"设计"})]}),v&&N.jsxs("button",{className:"huanban_rulego_list__action_btn huanban_rulego_list__action_btn--info",disabled:vt,onClick:()=>v(mt),title:"信息",children:[b.info," ",N.jsx("span",{children:"信息"})]}),N.jsxs("button",{className:"huanban_rulego_list__action_btn huanban_rulego_list__action_btn--operate",disabled:vt,onClick:()=>It(mt.id,mt.deployed?"stop":"start"),title:mt.deployed?"下线":"上线",children:[mt.deployed?b.stop:b.start,N.jsx("span",{children:mt.deployed?"下线":"上线"})]}),N.jsxs("button",{className:"huanban_rulego_list__action_btn huanban_rulego_list__action_btn--copy",disabled:vt,onClick:()=>Yt(mt.id),title:"复制",children:[b.copy," ",N.jsx("span",{children:"复制"})]}),N.jsxs("button",{className:"huanban_rulego_list__action_btn huanban_rulego_list__action_btn--delete",disabled:vt,onClick:()=>St(mt.id,mt.name),title:"删除",children:[b.delete," ",N.jsx("span",{children:"删除"})]}),x&&N.jsxs("button",{className:"huanban_rulego_list__action_btn huanban_rulego_list__action_btn--logs",disabled:vt,onClick:()=>x(mt.id),title:"日志",children:[b.logs," ",N.jsx("span",{children:"日志"})]})]})},k=(mt,vt)=>{const dt=T(mt),Zt=p?p(mt,dt):dt;return N.jsxs("div",{className:`huanban_rulego_list__row ${mt.deployed?"huanban_rulego_list__row--deployed":"huanban_rulego_list__row--offline"}`,"data-id":mt.id,children:[N.jsxs("div",{className:"huanban_rulego_list__row_main",children:[N.jsx("span",{className:"huanban_rulego_list__row_icon",children:b.workflow}),N.jsxs("div",{className:"huanban_rulego_list__row_info",children:[N.jsx("span",{className:"huanban_rulego_list__row_name",children:mt.name}),N.jsx("span",{className:"huanban_rulego_list__row_id",children:mt.id})]}),N.jsx("span",{className:`huanban_rulego_list__row_status ${mt.deployed?"huanban_rulego_list__row_status--on":"huanban_rulego_list__row_status--off"}`,children:mt.deployed?"已上线":"已下线"})]}),mt.description&&N.jsx("div",{className:"huanban_rulego_list__row_desc",children:mt.description}),Zt]},mt.id)},Y=N.jsxs("div",{className:"huanban_rulego_list__header",children:[N.jsxs("h3",{className:"huanban_rulego_list__title",children:[b.workflow," 工作流列表",N.jsxs("span",{className:"huanban_rulego_list__count",children:["(",L,")"]})]}),N.jsxs("div",{className:"huanban_rulego_list__toolbar",children:[c&&N.jsxs("div",{className:"huanban_rulego_list__search",children:[N.jsx("input",{className:"huanban_rulego_list__search_input",type:"text",placeholder:"搜索工作流...",value:V,onChange:mt=>U(mt.target.value),onKeyDown:wt}),N.jsx("button",{className:"huanban_rulego_list__search_btn",onClick:ut,title:"搜索",children:b.search})]}),d&&N.jsx("button",{className:"huanban_rulego_list__toolbar_btn",onClick:()=>it(),title:"刷新",disabled:ft,children:b.refresh}),u&&N.jsxs("button",{className:"huanban_rulego_list__toolbar_btn huanban_rulego_list__toolbar_btn--primary",onClick:()=>F(!0),title:"新建工作流",children:[b.add," 新建"]})]})]}),et=N.jsxs("div",{className:"huanban_rulego_list__form",children:[N.jsxs("label",{className:"huanban_rulego_list__form_label",children:["名称",N.jsx("input",{className:"huanban_rulego_list__form_input",type:"text",value:ot,onChange:mt=>st(mt.target.value),placeholder:"输入工作流名称",autoFocus:!0})]}),N.jsxs("label",{className:"huanban_rulego_list__form_label",children:["描述",N.jsx("textarea",{className:"huanban_rulego_list__form_textarea",value:at,onChange:mt=>z(mt.target.value),placeholder:"可选描述",rows:3})]})]}),$=N.jsxs("div",{className:"huanban_rulego_list__empty",children:[N.jsx("span",{className:"huanban_rulego_list__empty_icon",children:b.workflow}),N.jsx("p",{children:"暂无工作流"}),u&&N.jsxs("button",{className:"huanban_rulego_list__empty_btn",onClick:()=>F(!0),children:[b.add," 创建第一个工作流"]})]}),ct=n!=="light"?`huanban_rulego_list--${n}`:"";return N.jsxs("div",{className:`huanban_rulego_list ${ct} ${a}`.trim(),style:s,children:[h?h(Y):Y,N.jsxs("div",{className:"huanban_rulego_list__body",children:[ft&&N.jsxs("div",{className:"huanban_rulego_list__loading",children:[N.jsx("span",{className:"huanban_rulego_list__spinner"}),"加载中..."]}),!ft&&P.length===0&&(f?f():$),!ft&&P.length>0&&N.jsx("div",{className:"huanban_rulego_list__rows",children:P.map((mt,vt)=>{const dt=k(mt);return m?N.jsx(rt.Fragment,{children:m(mt,vt,dt)},mt.id):N.jsx(rt.Fragment,{children:dt},mt.id)})})]}),L>W&&N.jsxs("div",{className:"huanban_rulego_list__pagination",children:[N.jsx("button",{className:"huanban_rulego_list__page_btn",disabled:D<=1,onClick:lt,children:"上一页"}),N.jsxs("span",{className:"huanban_rulego_list__page_info",children:[D," / ",bt]}),N.jsx("button",{className:"huanban_rulego_list__page_btn",disabled:D>=bt,onClick:Qt,children:"下一页"})]}),Q&&N.jsx("div",{className:"huanban_rulego_list__modal_mask",onClick:()=>F(!1),children:N.jsxs("div",{className:"huanban_rulego_list__modal",onClick:mt=>mt.stopPropagation(),children:[N.jsxs("div",{className:"huanban_rulego_list__modal_header",children:[N.jsx("h4",{children:"新建工作流"}),N.jsx("button",{className:"huanban_rulego_list__modal_close",onClick:()=>F(!1),children:"✕"})]}),N.jsx("div",{className:"huanban_rulego_list__modal_body",children:g?g(et,{close:()=>F(!1),submit:mt=>xt(mt)}):et}),N.jsxs("div",{className:"huanban_rulego_list__modal_footer",children:[N.jsx("button",{className:"huanban_rulego_list__btn huanban_rulego_list__btn--cancel",onClick:()=>F(!1),children:"取消"}),N.jsx("button",{className:"huanban_rulego_list__btn huanban_rulego_list__btn--primary",onClick:()=>xt(),children:"创建"})]})]})})]})},Ttt={variable:"📦",secret:"🔐",api:"🔗",mcp:"🤖",copy:"📋",delete:"🗑️",add:"➕",save:"💾"},$N=({entries:r,onChange:t,icons:e,keyPlaceholder:o="Key",valuePlaceholder:i="Value",valueType:n="text"})=>{const a=()=>t([...r,{key:"",value:""}]),s=c=>t(r.filter((u,d)=>d!==c)),l=(c,u,d)=>{const h=[...r];h[c]={...h[c],[u]:d},t(h)};return N.jsxs("div",{className:"huanban_rulego_info__kv",children:[r.map((c,u)=>N.jsxs("div",{className:"huanban_rulego_info__kv_row",children:[N.jsx("input",{className:"huanban_rulego_info__kv_input",type:"text",placeholder:o,value:c.key,onChange:d=>l(u,"key",d.target.value)}),N.jsx("input",{className:"huanban_rulego_info__kv_input",type:n,placeholder:i,value:c.value,onChange:d=>l(u,"value",d.target.value)}),N.jsx("button",{className:"huanban_rulego_info__kv_del",onClick:()=>s(u),title:"删除",children:e.delete})]},u)),N.jsxs("button",{className:"huanban_rulego_info__kv_add",onClick:a,children:[e.add," 添加"]})]})},Itt=r=>{var ut,wt,bt;const{apiBase:t,apiOptions:e,fetcher:o,workflow:i,theme:n="light",className:a="",style:s,icons:l,defaultTab:c="base",renderBaseInfo:u,renderVarsSecrets:d,renderIntegration:h,renderExtraTabs:p,onSave:f,onError:g,onRefresh:m}=r,y={...Ttt,...l},v=rt.useRef(null);o?v.current=o:t&&(!v.current||((wt=(ut=v.current)==null?void 0:ut.getApiBase)==null?void 0:wt.call(ut))!==t)&&(v.current=new Ka({apiBase:t,...e}));const x=v.current,[S,M]=rt.useState(c),[O,b]=rt.useState(""),[_,I]=rt.useState(""),[P,R]=rt.useState([]),[L,w]=rt.useState([]),[D,E]=rt.useState(!1),[W,V]=rt.useState(null);rt.useEffect(()=>{!i||!x||(b(i.name),I(i.description),x.getContent(i.id).then(lt=>{V(lt);const Qt=(lt==null?void 0:lt.ruleChain)??lt,It=(Qt==null?void 0:Qt.additionalInfo)??{},Yt=(It==null?void 0:It.vars)??(Qt==null?void 0:Qt.vars)??{};R(Object.entries(Yt).map(([xt,T])=>({key:xt,value:String(T)})));const St=(It==null?void 0:It.secrets)??(Qt==null?void 0:Qt.secrets)??{};w(Object.entries(St).map(([xt,T])=>({key:xt,value:String(T)})))}).catch(lt=>g==null?void 0:g(lt instanceof Error?lt:new Error(String(lt)))))},[i,x,g]);const U=rt.useCallback(async()=>{if(!(!x||!i)){E(!0);try{const lt=await x.saveBaseInfo(i.id,{name:O.trim(),additionalInfo:{...i.additionalInfo||{},description:_.trim(),updateTime:new Date().toISOString()}});if(!lt.success)throw new Error(lt.msg||"保存失败");f==null||f("base"),m==null||m()}catch(lt){g==null||g(lt instanceof Error?lt:new Error(String(lt)))}finally{E(!1)}}},[x,i,O,_,f,g,m]),ft=rt.useCallback(async lt=>{if(!(!x||!i)){E(!0);try{const Qt=lt==="vars"?P:L,It={};Qt.forEach(St=>{St.key.trim()&&(It[St.key.trim()]=St.value)});const Yt=await x.saveConfig(i.id,lt,It);if(!Yt.success)throw new Error(Yt.msg||"保存失败");f==null||f(lt),m==null||m()}catch(Qt){g==null||g(Qt instanceof Error?Qt:new Error(String(Qt)))}finally{E(!1)}}},[x,i,P,L,f,g,m]),Ot=rt.useCallback(lt=>{navigator.clipboard.writeText(lt).catch(()=>{const Qt=document.createElement("textarea");Qt.value=lt,document.body.appendChild(Qt),Qt.select(),document.execCommand("copy"),document.body.removeChild(Qt)})},[]);if(!i)return N.jsx("div",{className:`huanban_rulego_info huanban_rulego_info--empty ${a}`.trim(),style:s,children:N.jsx("p",{className:"huanban_rulego_info__no_data",children:"请选择一个工作流查看详情"})});const Q=t||((bt=x==null?void 0:x.getApiBase)==null?void 0:bt.call(x))||"",F=[{key:"base",label:"基础信息"},{key:"vars",label:`${y.variable} 变量与秘钥`},{key:"integration",label:`${y.api} 应用集成`}],ot=p?p(i):[],st=[...F,...ot.map(lt=>({key:lt.key,label:lt.label}))],at=N.jsxs("div",{className:"huanban_rulego_info__panel",children:[N.jsxs("label",{className:"huanban_rulego_info__label",children:["名称",N.jsx("input",{className:"huanban_rulego_info__input",type:"text",value:O,onChange:lt=>b(lt.target.value)})]}),N.jsxs("label",{className:"huanban_rulego_info__label",children:["描述",N.jsx("textarea",{className:"huanban_rulego_info__textarea",rows:3,value:_,onChange:lt=>I(lt.target.value)})]}),N.jsx("div",{className:"huanban_rulego_info__row",children:N.jsxs("span",{className:"huanban_rulego_info__field",children:["ID: ",i.id]})}),N.jsx("div",{className:"huanban_rulego_info__row",children:N.jsx("span",{className:`huanban_rulego_info__status ${i.deployed?"huanban_rulego_info__status--on":"huanban_rulego_info__status--off"}`,children:i.deployed?"已上线":"已下线"})}),N.jsxs("button",{className:"huanban_rulego_info__save_btn",disabled:D,onClick:U,children:[y.save," ",D?"保存中...":"保存基础信息"]})]}),z=N.jsxs("div",{className:"huanban_rulego_info__panel",children:[N.jsxs("h4",{className:"huanban_rulego_info__subtitle",children:[y.variable," 变量"]}),N.jsx($N,{entries:P,onChange:R,icons:y,keyPlaceholder:"变量名",valuePlaceholder:"变量值"}),N.jsxs("button",{className:"huanban_rulego_info__save_btn",disabled:D,onClick:()=>ft("vars"),children:[y.save," 保存变量"]}),N.jsxs("h4",{className:"huanban_rulego_info__subtitle",style:{marginTop:20},children:[y.secret," 秘钥"]}),N.jsx($N,{entries:L,onChange:w,icons:y,keyPlaceholder:"秘钥名",valuePlaceholder:"秘钥值",valueType:"password"}),N.jsxs("button",{className:"huanban_rulego_info__save_btn",disabled:D,onClick:()=>ft("secrets"),children:[y.save," 保存秘钥"]})]}),B=N.jsxs("div",{className:"huanban_rulego_info__panel",children:[N.jsxs("h4",{className:"huanban_rulego_info__subtitle",children:[y.api," API 集成"]}),N.jsxs("div",{className:"huanban_rulego_info__integration_item",children:[N.jsx("span",{className:"huanban_rulego_info__integration_label",children:"执行 API:"}),N.jsxs("code",{className:"huanban_rulego_info__integration_url",children:["POST ",Q,"/rules/",i.id,"/execute/:msgType"]}),N.jsx("button",{className:"huanban_rulego_info__copy_btn",onClick:()=>Ot(`${Q}/rules/${i.id}/execute/:msgType`),children:y.copy})]}),N.jsxs("div",{className:"huanban_rulego_info__integration_item",children:[N.jsx("span",{className:"huanban_rulego_info__integration_label",children:"通知 API:"}),N.jsxs("code",{className:"huanban_rulego_info__integration_url",children:["POST ",Q,"/rules/",i.id,"/notify/:msgType"]}),N.jsx("button",{className:"huanban_rulego_info__copy_btn",onClick:()=>Ot(`${Q}/rules/${i.id}/notify/:msgType`),children:y.copy})]}),N.jsxs("h4",{className:"huanban_rulego_info__subtitle",style:{marginTop:20},children:[y.mcp," MCP 集成"]}),N.jsxs("div",{className:"huanban_rulego_info__integration_item",children:[N.jsx("span",{className:"huanban_rulego_info__integration_label",children:"MCP SSE:"}),N.jsxs("code",{className:"huanban_rulego_info__integration_url",children:[Q,"/mcp/",i.id,"/sse"]}),N.jsx("button",{className:"huanban_rulego_info__copy_btn",onClick:()=>Ot(`${Q}/mcp/${i.id}/sse`),children:y.copy})]})]}),X=()=>{switch(S){case"base":return u?u(i,at):at;case"vars":return d?d(i,z):z;case"integration":return h?h(i,Q,B):B;default:{const lt=ot.find(Qt=>Qt.key===S);return lt?lt.children:null}}},it=n!=="light"?`huanban_rulego_info--${n}`:"";return N.jsxs("div",{className:`huanban_rulego_info ${it} ${a}`.trim(),style:s,children:[N.jsx("div",{className:"huanban_rulego_info__tabs",children:st.map(lt=>N.jsx("button",{className:`huanban_rulego_info__tab ${S===lt.key?"huanban_rulego_info__tab--active":""}`,onClick:()=>M(lt.key),children:lt.label},lt.key))}),N.jsx("div",{className:"huanban_rulego_info__content",children:X()})]})},Dtt={isReady:!1,isDirty:!1,isLoading:!1,selectedNode:null,selectedEdge:null,componentGroups:[],currentNodeView:null,currentNodeModel:{},canUndo:!1,canRedo:!1};function Ctt(r={}){const[t,e]=rt.useState(Dtt),o=rt.useRef(null),i=rt.useRef([]),n=rt.useRef(r);rt.useEffect(()=>{const d=new AT(n.current);o.current=d;const h=d.store.subscribe(p=>{e({isReady:p.isReady,isDirty:p.isDirty,isLoading:p.isLoading,selectedNode:p.selectedNode,selectedEdge:p.selectedEdge,componentGroups:p.componentGroups,currentNodeView:p.currentNodeView,currentNodeModel:p.currentNodeModel,canUndo:p.canUndo,canRedo:p.canRedo})});return()=>{for(const p of i.current)p();i.current=[],h(),d.destroy(),o.current=null}},[]);const a=rt.useCallback(d=>{o.current&&o.current.init(d)},[]),s=rt.useCallback(d=>{o.current&&o.current.loadData(d)},[]),l=rt.useCallback((d,h)=>{if(o.current){const p=o.current.eventBus.on(d,h);i.current.push(p)}},[]),c=rt.useCallback((d,...h)=>{o.current&&o.current.eventBus.emit(d,...h)},[]),u=rt.useCallback(()=>{o.current&&o.current.eventBus.emit("editor:save",{data:{},success:!1})},[]);return{core:o.current,...t,loadData:s,on:l,emit:c,init:a,save:u}}function jtt(r){const[t,e]=rt.useState("light"),[o,i]=rt.useState(["light","dark","blue"]);rt.useEffect(()=>{r&&(e(r.theme.getTheme()),i(r.theme.getAvailableThemes().map(a=>a.name)))},[r]);const n=rt.useCallback(a=>{r&&(r.theme.setTheme(a),e(a))},[r]);return{currentTheme:t,themes:o,setTheme:n}}function Att(r){const[t,e]=rt.useState((r==null?void 0:r.i18n.getLocale())||"zh-CN"),o=rt.useCallback((n,a)=>r?r.i18n.t(n,a):n,[r]),i=rt.useCallback(n=>{r&&(r.i18n.setLocale(n),e(n))},[r]);return{t:o,locale:t,setLocale:i}}function NC(){return typeof navigator>"u"?!1:/Mac|iPod|iPhone|iPad/.test(navigator.platform||"")}function Ett(){const r=document.activeElement;if(!r)return!1;const t=r.tagName.toLowerCase();return!!(t==="input"||t==="textarea"||r.isContentEditable)}function ktt(r){const{shortcuts:t,enabled:e=!0,target:o}=r,i=rt.useRef(t);i.current=t,rt.useEffect(()=>{if(!e)return;const n=NC(),a=l=>{const c=l,u=c.key.toLowerCase();for(const d of i.current){if(u!==d.key.toLowerCase())continue;const h=d.ctrl?n?c.metaKey:c.ctrlKey:!(n?c.metaKey:c.ctrlKey),p=d.shift?c.shiftKey:!c.shiftKey,f=d.alt?c.altKey:!c.altKey;if(!(!h||!p||!f)&&!(!d.enableInInput&&Ett())){c.preventDefault(),c.stopPropagation(),d.handler(c);return}}},s=o||document;return s.addEventListener("keydown",a),()=>{s.removeEventListener("keydown",a)}},[e,o])}function ztt(r){const t=NC(),e=[];return r.ctrl&&e.push(t?"⌘":"Ctrl"),r.shift&&e.push(t?"⇧":"Shift"),r.alt&&e.push(t?"⌥":"Alt"),e.push(r.key.toUpperCase()),t?e.join(""):e.join("+")}function Ptt(r){return[{key:"s",ctrl:!0,description:"保存",handler:()=>{var t;return(t=r.onSave)==null?void 0:t.call(r)}},{key:"z",ctrl:!0,description:"撤销",handler:()=>{var t;return(t=r.onUndo)==null?void 0:t.call(r)}},{key:"z",ctrl:!0,shift:!0,description:"重做",handler:()=>{var t;return(t=r.onRedo)==null?void 0:t.call(r)}},{key:"y",ctrl:!0,description:"重做",handler:()=>{var t;return(t=r.onRedo)==null?void 0:t.call(r)}},{key:"delete",description:"删除",handler:()=>{var t;return(t=r.onDelete)==null?void 0:t.call(r)}},{key:"backspace",description:"删除",handler:()=>{var t;return(t=r.onDelete)==null?void 0:t.call(r)}},{key:"c",ctrl:!0,description:"复制",handler:()=>{var t;return(t=r.onCopy)==null?void 0:t.call(r)}},{key:"v",ctrl:!0,description:"粘贴",handler:()=>{var t;return(t=r.onPaste)==null?void 0:t.call(r)}},{key:"a",ctrl:!0,description:"全选",handler:()=>{var t;return(t=r.onSelectAll)==null?void 0:t.call(r)}},{key:"1",ctrl:!0,description:"适应画布",handler:()=>{var t;return(t=r.onFitView)==null?void 0:t.call(r)}},{key:"=",ctrl:!0,description:"放大",handler:()=>{var t;return(t=r.onZoomIn)==null?void 0:t.call(r)}},{key:"-",ctrl:!0,description:"缩小",handler:()=>{var t;return(t=r.onZoomOut)==null?void 0:t.call(r)}},{key:"escape",description:"取消选择",handler:()=>{var t;return(t=r.onEscape)==null?void 0:t.call(r)}}]}const Ltt=30;function Qtt(){return`node_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,8)}`}function Rtt(r){const[t,e]=rt.useState([]),o=rt.useRef(0),i=rt.useCallback(()=>{var d,h,p;const c=((d=r.getSelectedNodes)==null?void 0:d.call(r))||[];if(c.length===0){(h=r.onNotify)==null||h.call(r,"info","没有选中的节点");return}const u=c.map(f=>({...f}));e(u),o.current=0,(p=r.onNotify)==null||p.call(r,"success",`已复制 ${u.length} 个节点`)},[r]),n=rt.useCallback(()=>{var h,p,f,g;const c=((h=r.getSelectedNodes)==null?void 0:h.call(r))||[];if(c.length===0){(p=r.onNotify)==null||p.call(r,"info","没有选中的节点");return}const u=c.map(m=>({...m}));e(u),o.current=0;const d=c.map(m=>m.originalId);(f=r.onDeleteNodes)==null||f.call(r,d),(g=r.onNotify)==null||g.call(r,"success",`已剪切 ${u.length} 个节点`)},[r]),a=rt.useCallback(()=>{var d,h,p;if(t.length===0){(d=r.onNotify)==null||d.call(r,"info","剪贴板为空");return}o.current+=1;const c=Ltt*o.current,u=t.map(f=>({...f,originalId:Qtt(),x:f.x+c,y:f.y+c}));(h=r.onAddNodes)==null||h.call(r,u),(p=r.onNotify)==null||p.call(r,"success",`已粘贴 ${u.length} 个节点`)},[t,r]),s=rt.useCallback(()=>{var c;(c=r.onSelectAll)==null||c.call(r)},[r]),l=rt.useCallback(()=>{e([]),o.current=0},[]);return{copy:i,cut:n,paste:a,selectAll:s,hasContent:t.length>0,clipboardCount:t.length,clear:l}}exports.ComponentSidebar=fC;exports.ContextMenu=OC;exports.DEFAULT_ROUTES=hC;exports.DataViewDialog=vC;exports.DebugPanel=yC;exports.EdgePropertyDrawer=mC;exports.EditorToolbar=bC;exports.ImportExportDialog=wtt;exports.MiniMap=xC;exports.NodePropertyDrawer=gC;exports.RuleChainAPI=Ka;exports.RuleChainSettings=wC;exports.RuleGoEditor=pC;exports.SearchPanel=Ntt;exports.ValidationPanel=MC;exports.WorkflowInfoPanel=Itt;exports.WorkflowList=_tt;exports.getCanvasContextMenuItems=xtt;exports.getDefaultEditorShortcuts=Ptt;exports.getEdgeContextMenuItems=Ott;exports.getNodeContextMenuItems=btt;exports.getShortcutLabel=ztt;exports.useClipboard=Rtt;exports.useEditorCore=Ctt;exports.useEditorI18n=Att;exports.useEditorTheme=jtt;exports.useKeyboardShortcuts=ktt;
2511
+ }`),[f,g]=rt.useState(!1),[m,y]=rt.useState(""),[v,x]=rt.useState([]),[S,M]=rt.useState(!1),[O,b]=rt.useState([]),[_,I]=rt.useState(!1),[P,R]=rt.useState({visible:!1,title:"",data:""}),L=rt.useCallback(async()=>{if(!t){s("warning","请先选择规则链");return}if(!i){s("warning","未配置发送消息回调");return}try{g(!0);let U;try{U=JSON.parse(h)}catch{s("error","消息体 JSON 格式错误");return}const ft=await i(t,u,U);ft.success?(s("success","消息发送成功"),y(JSON.stringify(ft.data,null,2))):(s("error","发送失败: "+(ft.msg||"未知错误")),y(ft.msg||"发送失败"))}catch(U){s("error","发送异常: "+(U instanceof Error?U.message:String(U)))}finally{g(!1)}},[t,u,h,i,s]),w=rt.useCallback(async()=>{if(!(!t||!n))try{M(!0);const U=await n(t,e);x(U.items||[])}catch{s("error","加载调试日志失败")}finally{M(!1)}},[t,e,n,s]),D=rt.useCallback(async()=>{if(a)try{I(!0);const U=await a();b(U||[])}catch{s("error","加载运行日志失败")}finally{I(!1)}},[a,s]),E=(U,ft)=>{let Ot=ft;try{Ot=JSON.stringify(JSON.parse(ft),null,2)}catch{}R({visible:!0,title:U,data:Ot})},W=U=>new Date(U).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}),V=async U=>{try{await navigator.clipboard.writeText(U),s("success","已复制")}catch{s("error","复制失败")}};return r?N.jsxs("div",{className:"rge-debug-panel",children:[N.jsxs("div",{className:"rge-debug-header",children:[N.jsxs("div",{className:"rge-debug-tabs",children:[N.jsx("button",{className:`rge-debug-tab ${l==="send"?"active":""}`,onClick:()=>c("send"),children:"📤 发送消息"}),N.jsx("button",{className:`rge-debug-tab ${l==="debug"?"active":""}`,onClick:()=>{c("debug"),w()},children:"🐛 调试日志"}),N.jsx("button",{className:`rge-debug-tab ${l==="logs"?"active":""}`,onClick:()=>{c("logs"),D()},children:"📋 运行日志"})]}),N.jsx("button",{className:"rge-drawer-close",onClick:o,children:"✕"})]}),l==="send"&&N.jsxs("div",{className:"rge-debug-body",children:[N.jsxs("div",{className:"rge-form-section",children:[N.jsx("label",{className:"rge-form-label",children:"规则链 ID"}),N.jsx("input",{type:"text",className:"rge-form-input",value:t,readOnly:!0})]}),N.jsxs("div",{className:"rge-form-section",children:[N.jsx("label",{className:"rge-form-label",children:"消息类型"}),N.jsx("input",{type:"text",className:"rge-form-input",value:u,onChange:U=>d(U.target.value),placeholder:"如 TEST_MSG"})]}),N.jsxs("div",{className:"rge-form-section",children:[N.jsx("label",{className:"rge-form-label",children:"消息体 (JSON)"}),N.jsx("textarea",{className:"rge-code-textarea",rows:8,value:h,onChange:U=>p(U.target.value),spellCheck:!1})]}),N.jsxs("button",{className:"rge-btn-submit rge-full-width",onClick:L,disabled:f,children:["📤 ",f?"发送中...":"发送测试消息"]}),m&&N.jsxs("div",{className:"rge-form-section rge-mt-16",children:[N.jsxs("div",{className:"rge-label-row",children:[N.jsx("label",{className:"rge-form-label",children:"响应数据"}),N.jsx("button",{className:"rge-btn-mini",onClick:()=>V(m),children:"📋 复制"})]}),N.jsx("pre",{className:"rge-response-pre",children:m})]})]}),l==="debug"&&N.jsxs("div",{className:"rge-debug-body",children:[N.jsxs("div",{className:"rge-toolbar-row",children:[e&&N.jsxs("span",{className:"rge-tag",children:["节点: ",e]}),N.jsxs("button",{className:"rge-btn-mini",onClick:w,disabled:S,children:["🔄 ",S?"加载中...":"刷新"]})]}),v.length===0?N.jsxs("div",{className:"rge-empty-tip",children:[N.jsx("span",{style:{fontSize:32,opacity:.3},children:"🐛"}),N.jsx("p",{children:S?"加载中...":"暂无调试日志"}),N.jsx("p",{className:"rge-sub-tip",children:'需要在节点上开启"调试模式"并发送消息'})]}):N.jsxs("div",{className:"rge-log-table",children:[N.jsxs("div",{className:"rge-log-table-header",children:[N.jsx("span",{children:"时间"}),N.jsx("span",{children:"类型"}),N.jsx("span",{children:"关系"}),N.jsx("span",{children:"消息类型"}),N.jsx("span",{children:"操作"})]}),v.map((U,ft)=>N.jsxs("div",{className:`rge-log-table-row ${U.err?"error":""}`,children:[N.jsx("span",{children:W(U.ts)}),N.jsx("span",{className:"rge-tag-small",children:U.flowType}),N.jsx("span",{className:"rge-tag-small",children:U.relationType}),N.jsx("span",{title:U.msg.type,children:U.msg.type.length>12?U.msg.type.slice(0,12)+"...":U.msg.type}),N.jsxs("span",{className:"rge-log-actions",children:[N.jsx("button",{className:"rge-btn-link",onClick:()=>E("数据",U.msg.data),children:"数据"}),N.jsx("button",{className:"rge-btn-link",onClick:()=>E("元数据",JSON.stringify(U.msg.metadata)),children:"元数据"}),U.err&&N.jsx("button",{className:"rge-btn-link danger",onClick:()=>E("错误",U.err||""),children:"错误"})]})]},ft))]})]}),l==="logs"&&N.jsxs("div",{className:"rge-debug-body",children:[N.jsx("div",{className:"rge-toolbar-row",children:N.jsxs("button",{className:"rge-btn-mini",onClick:D,disabled:_,children:["🔄 ",_?"加载中...":"刷新"]})}),O.length===0?N.jsxs("div",{className:"rge-empty-tip",children:[N.jsx("span",{style:{fontSize:32,opacity:.3},children:"📋"}),N.jsx("p",{children:_?"加载中...":"暂无运行日志"})]}):N.jsx("div",{className:"rge-log-list",children:O.map((U,ft)=>N.jsx("div",{className:"rge-run-log-item",onClick:()=>E("日志详情",JSON.stringify(U)),children:N.jsx("pre",{children:typeof U=="string"?U:JSON.stringify(U,null,2)})},ft))})]}),P.visible&&N.jsx("div",{className:"rge-detail-overlay",onClick:()=>R({...P,visible:!1}),children:N.jsxs("div",{className:"rge-detail-modal",onClick:U=>U.stopPropagation(),children:[N.jsxs("div",{className:"rge-detail-header",children:[N.jsx("span",{children:P.title}),N.jsxs("div",{children:[N.jsx("button",{className:"rge-btn-mini",onClick:()=>V(P.data),children:"📋"}),N.jsx("button",{className:"rge-drawer-close",onClick:()=>R({...P,visible:!1}),children:"✕"})]})]}),N.jsx("pre",{className:"rge-detail-pre",children:P.data})]})})]}):null};yC.displayName="DebugPanel";const vC=({visible:r,data:t,title:e="规则链数据",fileNamePrefix:o="rulechain",onClose:i,onNotify:n})=>{const a=t?JSON.stringify(t,null,2):"{}",s=async()=>{try{await navigator.clipboard.writeText(a),n==null||n("success","JSON 已复制到剪贴板")}catch{n==null||n("error","复制失败")}},l=()=>{try{const c=new Blob([a],{type:"application/json"}),u=URL.createObjectURL(c),d=new Date().toISOString().slice(0,19).replace(/[:]/g,"-"),h=`${o}_${d}.json`,p=document.createElement("a");p.href=u,p.download=h,document.body.appendChild(p),p.click(),document.body.removeChild(p),URL.revokeObjectURL(u),n==null||n("success",`已下载 ${h}`)}catch{n==null||n("error","下载失败")}};return r?N.jsx("div",{className:"rge-dataview-overlay",onClick:i,children:N.jsxs("div",{className:"rge-dataview-dialog",onClick:c=>c.stopPropagation(),children:[N.jsxs("div",{className:"rge-dialog-header",children:[N.jsxs("div",{className:"rge-dialog-title",children:[N.jsx("span",{children:"📋"}),N.jsx("span",{children:e})]}),N.jsx("button",{className:"rge-drawer-close",onClick:i,children:"✕"})]}),N.jsxs("div",{className:"rge-dialog-toolbar",children:[N.jsx("button",{className:"rge-btn-outline",onClick:s,children:"📋 复制"}),N.jsx("button",{className:"rge-btn-outline",onClick:l,children:"⬇️ 下载"})]}),N.jsx("div",{className:"rge-dialog-body",children:N.jsx("pre",{className:"rge-json-pre",children:a})})]})}):null};vC.displayName="DataViewDialog";const bC=({canUndo:r=!1,canRedo:t=!1,isFullscreen:e=!1,isDebugMode:o=!1,zoomLevel:i=100,hasSelection:n=!1,onSave:a,onUndo:s,onRedo:l,onDelete:c,onZoomIn:u,onZoomOut:d,onFitView:h,onResetZoom:p,onFullscreen:f,onToggleDebug:g,onViewData:m,onSettings:y,onValidate:v,onNew:x,onImport:S,onExport:M,extraButtons:O=[],hiddenButtons:b=[],chainName:_})=>{const[I,P]=rt.useState(!1),R=D=>b.includes(D),w=[{key:"new",icon:"📄",tooltip:"新建规则链",onClick:()=>x==null?void 0:x(),hidden:R("new")||!x},{key:"save",icon:"💾",tooltip:"保存 (Ctrl+S)",onClick:()=>a==null?void 0:a(),hidden:R("save")},{key:"import",icon:"📥",tooltip:"导入",onClick:()=>S==null?void 0:S(),hidden:R("import")||!S},{key:"export",icon:"📤",tooltip:"导出",onClick:()=>M==null?void 0:M(),hidden:R("export")||!M},{key:"undo",icon:"↩️",tooltip:"撤销 (Ctrl+Z)",onClick:()=>s==null?void 0:s(),disabled:!r,hidden:R("undo"),dividerBefore:!0},{key:"redo",icon:"↪️",tooltip:"重做 (Ctrl+Y)",onClick:()=>l==null?void 0:l(),disabled:!t,hidden:R("redo")},{key:"delete",icon:"🗑️",tooltip:"删除选中 (Del)",onClick:()=>c==null?void 0:c(),disabled:!n,hidden:R("delete")},{key:"zoomIn",icon:"🔍+",tooltip:"放大",onClick:()=>u==null?void 0:u(),hidden:R("zoomIn"),dividerBefore:!0},{key:"zoomOut",icon:"🔍-",tooltip:"缩小",onClick:()=>d==null?void 0:d(),hidden:R("zoomOut")},{key:"fitView",icon:"⊞",tooltip:"适应画布",onClick:()=>h==null?void 0:h(),hidden:R("fitView")},{key:"resetZoom",icon:"1:1",tooltip:"重置缩放",onClick:()=>p==null?void 0:p(),hidden:R("resetZoom")},{key:"validate",icon:"✅",tooltip:"校验规则链",onClick:()=>v==null?void 0:v(),hidden:R("validate")||!v,dividerBefore:!0},{key:"debug",icon:"🐛",tooltip:o?"关闭调试":"开启调试",onClick:()=>g==null?void 0:g(),active:o,hidden:R("debug")},{key:"viewData",icon:"{ }",tooltip:"查看数据",onClick:()=>m==null?void 0:m(),hidden:R("viewData")},{key:"settings",icon:"⚙️",tooltip:"设置",onClick:()=>y==null?void 0:y(),hidden:R("settings")||!y},{key:"fullscreen",icon:e?"⊟":"⊞",tooltip:e?"退出全屏":"全屏",onClick:()=>f==null?void 0:f(),hidden:R("fullscreen")},...O].filter(D=>!D.hidden);return N.jsxs("div",{className:"rge-editor-toolbar",children:[N.jsx("div",{className:"rge-toolbar-left",children:w.map(D=>N.jsxs(rt.Fragment,{children:[D.dividerBefore&&N.jsx("div",{className:"rge-toolbar-divider"}),N.jsx("button",{className:`rge-toolbar-btn ${D.active?"active":""} ${D.disabled?"disabled":""}`,onClick:D.onClick,disabled:D.disabled,title:D.tooltip,children:N.jsx("span",{className:"rge-toolbar-icon",children:D.icon})})]},D.key))}),_&&N.jsx("div",{className:"rge-toolbar-center",children:N.jsx("span",{className:"rge-chain-name",children:_})}),N.jsxs("div",{className:"rge-toolbar-right",children:[N.jsxs("button",{className:"rge-toolbar-zoom-btn",onClick:()=>P(!I),title:"缩放选项",children:[i,"%"]}),I&&N.jsxs("div",{className:"rge-zoom-menu",onMouseLeave:()=>P(!1),children:[[50,75,100,125,150,200].map(D=>N.jsxs("button",{className:`rge-zoom-option ${D===i?"active":""}`,onClick:()=>{p==null||p(),P(!1)},children:[D,"%"]},D)),N.jsx("div",{className:"rge-toolbar-divider horizontal"}),N.jsx("button",{className:"rge-zoom-option",onClick:()=>{h==null||h(),P(!1)},children:"适应画布"})]})]})]})};bC.displayName="EditorToolbar";const OC=({visible:r,x:t,y:e,items:o,onClose:i})=>{const n=rt.useRef(null),a=rt.useCallback(u=>{n.current&&!n.current.contains(u.target)&&i()},[i]),s=rt.useCallback(u=>{u.key==="Escape"&&i()},[i]);if(rt.useEffect(()=>(r&&(document.addEventListener("mousedown",a),document.addEventListener("keydown",s)),()=>{document.removeEventListener("mousedown",a),document.removeEventListener("keydown",s)}),[r,a,s]),rt.useEffect(()=>{if(r&&n.current){const u=n.current.getBoundingClientRect(),d=window.innerWidth,h=window.innerHeight;let p=t,f=e;u.right>d&&(p=d-u.width-8),u.bottom>h&&(f=h-u.height-8),p<0&&(p=8),f<0&&(f=8),n.current.style.left=`${p}px`,n.current.style.top=`${f}px`}},[r,t,e]),!r)return null;const l=o.filter(u=>!u.hidden),c=u=>u.children&&u.children.length>0?N.jsxs("div",{className:"rge-ctx-menu-item has-submenu",children:[N.jsxs("div",{className:"rge-ctx-menu-item-content",children:[u.icon&&N.jsx("span",{className:"rge-ctx-menu-icon",children:u.icon}),N.jsx("span",{className:"rge-ctx-menu-label",children:u.label}),N.jsx("span",{className:"rge-ctx-menu-arrow",children:"▶"})]}),N.jsx("div",{className:"rge-ctx-submenu",children:u.children.filter(d=>!d.hidden).map(c)})]},u.key):N.jsxs(rt.Fragment,{children:[u.dividerBefore&&N.jsx("div",{className:"rge-ctx-menu-divider"}),N.jsx("button",{className:`rge-ctx-menu-item ${u.disabled?"disabled":""} ${u.danger?"danger":""}`,onClick:()=>{var d;u.disabled||((d=u.onClick)==null||d.call(u),i())},disabled:u.disabled,children:N.jsxs("div",{className:"rge-ctx-menu-item-content",children:[u.icon&&N.jsx("span",{className:"rge-ctx-menu-icon",children:u.icon}),N.jsx("span",{className:"rge-ctx-menu-label",children:u.label}),u.shortcut&&N.jsx("span",{className:"rge-ctx-menu-shortcut",children:u.shortcut})]})})]},u.key);return N.jsx("div",{ref:n,className:"rge-ctx-menu",style:{left:t,top:e},children:l.map(c)})};OC.displayName="ContextMenu";function btt(r){return[{key:"edit",label:"编辑属性",icon:"✏️",shortcut:"Enter",onClick:r.onEditProperties},{key:"copy",label:"复制",icon:"📋",shortcut:"Ctrl+C",onClick:r.onCopy},{key:"duplicate",label:"复制节点",icon:"📑",shortcut:"Ctrl+D",onClick:r.onDuplicate},{key:"connections",label:"查看连接",icon:"🔗",onClick:r.onViewConnections},{key:"delete",label:"删除",icon:"🗑️",shortcut:"Del",danger:!0,dividerBefore:!0,onClick:r.onDelete}]}function Ott(r){return[{key:"edit",label:"编辑属性",icon:"✏️",onClick:r.onEditProperties},{key:"delete",label:"删除",icon:"🗑️",shortcut:"Del",danger:!0,dividerBefore:!0,onClick:r.onDelete}]}function xtt(r){return[{key:"paste",label:"粘贴",icon:"📋",shortcut:"Ctrl+V",onClick:r.onPaste},{key:"selectAll",label:"全选",icon:"⊞",shortcut:"Ctrl+A",onClick:r.onSelectAll},{key:"fitView",label:"适应画布",icon:"🔲",dividerBefore:!0,onClick:r.onFitView},{key:"resetZoom",label:"重置缩放",icon:"1:1",onClick:r.onResetZoom}]}const Rg={"start-input":"#52c41a",filter:"#1890ff",jsFilter:"#1890ff",exprFilter:"#1890ff",transformer:"#722ed1",jsTransform:"#722ed1",template:"#722ed1",action:"#fa8c16",restApiCall:"#fa8c16",mqttClient:"#fa8c16",sendMail:"#fa8c16",dbClient:"#fa8c16",log:"#fa8c16",subChain:"#eb2f96",default:"#8c8c8c"};function Mtt(r,t){return t||(r&&Rg[r]?Rg[r]:Rg.default)}const xC=({nodes:r,viewport:t,width:e=200,height:o=150,defaultCollapsed:i=!1,position:n="bottom-right",onViewportChange:a,onNodeClick:s})=>{const[l,c]=rt.useState(i),u=rt.useRef(null),d=rt.useRef(!1),h=rt.useCallback(()=>{if(r.length===0)return{minX:0,minY:0,maxX:100,maxY:100};let v=1/0,x=1/0,S=-1/0,M=-1/0;r.forEach(b=>{const _=b.width||60,I=b.height||40;v=Math.min(v,b.x),x=Math.min(x,b.y),S=Math.max(S,b.x+_),M=Math.max(M,b.y+I)});const O=50;return{minX:v-O,minY:x-O,maxX:S+O,maxY:M+O}},[r]);rt.useEffect(()=>{if(l||!u.current)return;const v=u.current.getContext("2d");if(!v)return;const x=h(),S=x.maxX-x.minX,M=x.maxY-x.minY,O=Math.min(e/S,o/M);if(v.clearRect(0,0,e,o),v.fillStyle="rgba(30, 30, 30, 0.85)",v.fillRect(0,0,e,o),r.forEach(b=>{const _=(b.x-x.minX)*O,I=(b.y-x.minY)*O,P=Math.max((b.width||60)*O,4),R=Math.max((b.height||40)*O,3);v.fillStyle=b.selected?"#ff4d4f":Mtt(b.type,b.color),v.fillRect(_,I,P,R),b.selected&&(v.strokeStyle="#fff",v.lineWidth=1,v.strokeRect(_-1,I-1,P+2,R+2))}),t){const b=(t.x-x.minX)*O,_=(t.y-x.minY)*O,I=t.width*O,P=t.height*O;v.strokeStyle="rgba(64, 169, 255, 0.8)",v.lineWidth=2,v.strokeRect(b,_,I,P),v.fillStyle="rgba(64, 169, 255, 0.1)",v.fillRect(b,_,I,P)}},[r,t,l,e,o,h]);const p=rt.useCallback(v=>{if(!a||!u.current)return;const x=u.current.getBoundingClientRect(),S=v.clientX-x.left,M=v.clientY-x.top,O=h(),b=O.maxX-O.minX,_=O.maxY-O.minY,I=Math.min(e/b,o/_),P=S/I+O.minX,R=M/I+O.minY;a({x:P,y:R})},[a,h,e,o]),f=rt.useCallback(v=>{d.current=!0,p(v)},[p]),g=rt.useCallback(v=>{d.current&&p(v)},[p]),m=rt.useCallback(()=>{d.current=!1},[]),y={position:"absolute",zIndex:100,...n.includes("bottom")?{bottom:16}:{top:16},...n.includes("right")?{right:16}:{left:16}};return N.jsxs("div",{className:"rge-minimap",style:y,children:[N.jsxs("div",{className:"rge-minimap-header",onClick:()=>c(!l),children:[N.jsx("span",{className:"rge-minimap-title",children:"🗺 小地图"}),N.jsx("span",{className:"rge-minimap-toggle",children:l?"▶":"▼"})]}),!l&&N.jsx("canvas",{ref:u,width:e,height:o,className:"rge-minimap-canvas",onMouseDown:f,onMouseMove:g,onMouseUp:m,onMouseLeave:m})]})};xC.displayName="MiniMap";const Ad={error:"❌",warning:"⚠️",info:"ℹ️"},MC=({items:r,isValid:t,visible:e=!0,loading:o=!1,title:i="规则链校验",onValidate:n,onItemClick:a,onClose:s,onClear:l})=>{const[c,u]=rt.useState("all"),d=rt.useMemo(()=>{const p={error:0,warning:0,info:0};return r.forEach(f=>{p[f.level]!==void 0&&p[f.level]++}),p},[r]),h=rt.useMemo(()=>c==="all"?r:r.filter(p=>p.level===c),[r,c]);return e?N.jsxs("div",{className:"rge-validation-panel",children:[N.jsxs("div",{className:"rge-validation-header",children:[N.jsxs("span",{className:"rge-validation-title",children:[t!==void 0&&(t?"✅":"❌")," ",i]}),N.jsxs("div",{className:"rge-validation-actions",children:[n&&N.jsxs("button",{className:"rge-validation-btn",onClick:n,disabled:o,title:"重新校验",children:[o?"⏳":"🔄"," 校验"]}),l&&r.length>0&&N.jsx("button",{className:"rge-validation-btn",onClick:l,title:"清除结果",children:"🧹"}),s&&N.jsx("button",{className:"rge-validation-btn",onClick:s,title:"关闭",children:"✕"})]})]}),N.jsxs("div",{className:"rge-validation-stats",children:[N.jsxs("button",{className:`rge-validation-stat ${c==="all"?"active":""}`,onClick:()=>u("all"),children:["全部 (",r.length,")"]}),N.jsxs("button",{className:`rge-validation-stat error ${c==="error"?"active":""}`,onClick:()=>u("error"),children:[Ad.error," ",d.error]}),N.jsxs("button",{className:`rge-validation-stat warning ${c==="warning"?"active":""}`,onClick:()=>u("warning"),children:[Ad.warning," ",d.warning]}),N.jsxs("button",{className:`rge-validation-stat info ${c==="info"?"active":""}`,onClick:()=>u("info"),children:[Ad.info," ",d.info]})]}),N.jsxs("div",{className:"rge-validation-body",children:[o&&N.jsx("div",{className:"rge-validation-loading",children:"⏳ 正在校验..."}),!o&&h.length===0&&N.jsx("div",{className:"rge-validation-empty",children:r.length===0?"🎉 无校验结果,请点击校验按钮开始":"当前筛选无结果"}),!o&&h.map((p,f)=>N.jsxs("div",{className:`rge-validation-item level-${p.level}`,onClick:()=>a==null?void 0:a(p),role:"button",tabIndex:0,children:[N.jsx("span",{className:"rge-validation-item-icon",children:Ad[p.level]}),N.jsxs("div",{className:"rge-validation-item-content",children:[N.jsx("div",{className:"rge-validation-item-message",children:p.message}),N.jsxs("div",{className:"rge-validation-item-meta",children:[N.jsx("span",{className:"rge-validation-item-rule",children:p.rule}),p.elementId&&N.jsxs("span",{className:"rge-validation-item-element",children:[p.elementType==="node"?"📦":"↗️"," ",p.elementId]})]})]})]},`${p.rule}-${p.elementId||f}`))]})]}):null};MC.displayName="ValidationPanel";const wC=({visible:r,data:t,readOnly:e=!1,title:o="规则链设置",customFields:i=[],onSave:n,onClose:a})=>{const[s,l]=rt.useState(t),[c,u]=rt.useState({});rt.useEffect(()=>{l(t),u({})},[t,r]);const d=(f,g)=>{l(m=>({...m,[f]:g})),c[f]&&u(m=>{const y={...m};return delete y[f],y})},h=()=>{const f={};return(!s.name||s.name.trim()==="")&&(f.name="规则链名称不能为空"),u(f),Object.keys(f).length===0},p=()=>{e||h()&&(n==null||n(s),a())};return rt.useEffect(()=>{const f=g=>{g.key==="Escape"&&r&&a()};return document.addEventListener("keydown",f),()=>document.removeEventListener("keydown",f)},[r,a]),r?N.jsx("div",{className:"rge-modal-overlay",onClick:a,children:N.jsxs("div",{className:"rge-modal",onClick:f=>f.stopPropagation(),children:[N.jsxs("div",{className:"rge-modal-header",children:[N.jsxs("span",{className:"rge-modal-title",children:["⚙️ ",o]}),N.jsx("button",{className:"rge-modal-close",onClick:a,children:"✕"})]}),N.jsxs("div",{className:"rge-modal-body",children:[s.id&&N.jsxs("div",{className:"rge-form-group",children:[N.jsx("label",{className:"rge-form-label",children:"ID"}),N.jsx("input",{className:"rge-form-input",value:s.id,disabled:!0})]}),N.jsxs("div",{className:"rge-form-group",children:[N.jsxs("label",{className:"rge-form-label",children:["名称 ",N.jsx("span",{className:"rge-required",children:"*"})]}),N.jsx("input",{className:`rge-form-input ${c.name?"error":""}`,value:s.name,onChange:f=>d("name",f.target.value),placeholder:"请输入规则链名称",disabled:e}),c.name&&N.jsx("span",{className:"rge-form-error",children:c.name})]}),N.jsxs("div",{className:"rge-form-group",children:[N.jsx("label",{className:"rge-form-label",children:"描述"}),N.jsx("textarea",{className:"rge-form-textarea",value:s.description||"",onChange:f=>d("description",f.target.value),placeholder:"请输入规则链描述",rows:3,disabled:e})]}),N.jsxs("div",{className:"rge-form-row",children:[N.jsxs("div",{className:"rge-form-group inline",children:[N.jsx("label",{className:"rge-form-label",children:"根链"}),N.jsxs("label",{className:"rge-switch",children:[N.jsx("input",{type:"checkbox",checked:s.root||!1,onChange:f=>d("root",f.target.checked),disabled:e}),N.jsx("span",{className:"rge-switch-slider"})]})]}),N.jsxs("div",{className:"rge-form-group inline",children:[N.jsx("label",{className:"rge-form-label",children:"调试模式"}),N.jsxs("label",{className:"rge-switch",children:[N.jsx("input",{type:"checkbox",checked:s.debugMode||!1,onChange:f=>d("debugMode",f.target.checked),disabled:e}),N.jsx("span",{className:"rge-switch-slider"})]})]})]}),i.map(f=>{var g;return N.jsxs("div",{className:"rge-form-group",children:[N.jsx("label",{className:"rge-form-label",children:f.label}),f.type==="text"&&N.jsx("input",{className:"rge-form-input",value:String((s[f.key]??f.defaultValue)||""),onChange:m=>d(f.key,m.target.value),placeholder:f.placeholder,disabled:e}),f.type==="number"&&N.jsx("input",{className:"rge-form-input",type:"number",value:s[f.key]??f.defaultValue??"",onChange:m=>d(f.key,Number(m.target.value)),placeholder:f.placeholder,disabled:e}),f.type==="textarea"&&N.jsx("textarea",{className:"rge-form-textarea",value:String((s[f.key]??f.defaultValue)||""),onChange:m=>d(f.key,m.target.value),placeholder:f.placeholder,rows:3,disabled:e}),f.type==="select"&&N.jsx("select",{className:"rge-form-select",value:String((s[f.key]??f.defaultValue)||""),onChange:m=>d(f.key,m.target.value),disabled:e,children:(g=f.options)==null?void 0:g.map(m=>N.jsx("option",{value:m.value,children:m.label},m.value))}),f.type==="switch"&&N.jsxs("label",{className:"rge-switch",children:[N.jsx("input",{type:"checkbox",checked:s[f.key]??f.defaultValue??!1,onChange:m=>d(f.key,m.target.checked),disabled:e}),N.jsx("span",{className:"rge-switch-slider"})]}),f.help&&N.jsx("span",{className:"rge-form-help",children:f.help})]},f.key)}),s.additionalInfo&&Object.keys(s.additionalInfo).length>0&&N.jsxs("div",{className:"rge-form-group",children:[N.jsx("label",{className:"rge-form-label",children:"额外配置 (JSON)"}),N.jsx("textarea",{className:"rge-form-textarea mono",value:JSON.stringify(s.additionalInfo,null,2),onChange:f=>{try{d("additionalInfo",JSON.parse(f.target.value))}catch{}},rows:5,disabled:e})]})]}),N.jsxs("div",{className:"rge-modal-footer",children:[N.jsx("button",{className:"rge-btn secondary",onClick:a,children:"取消"}),!e&&N.jsx("button",{className:"rge-btn primary",onClick:p,children:"💾 保存"})]})]})}):null};wC.displayName="RuleChainSettings";const wtt=({mode:r="export",data:t,chainName:e="rule-chain",onImport:o,onClose:i,onNotify:n})=>{var _,I,P,R,L,w,D,E,W;const[a,s]=rt.useState(r),[l,c]=rt.useState(""),[u,d]=rt.useState(null),[h,p]=rt.useState(""),[f,g]=rt.useState(!1),m=rt.useRef(null),y=t?JSON.stringify(t,null,2):"",v=rt.useCallback(V=>{p(""),c(V);try{const U=JSON.parse(V);if(!U.ruleChain&&!U.metadata){p("JSON 格式不符合 RuleGo 规则链规范(缺少 ruleChain 或 metadata 字段)"),d(null);return}d(U)}catch(U){p(`JSON 解析失败: ${U.message}`),d(null)}},[]),x=rt.useCallback(V=>{var Ot;const U=(Ot=V.target.files)==null?void 0:Ot[0];if(!U)return;if(!U.name.endsWith(".json")){p("请选择 .json 文件");return}const ft=new FileReader;ft.onload=Q=>{var ot;const F=(ot=Q.target)==null?void 0:ot.result;v(F)},ft.readAsText(U)},[v]),S=rt.useCallback(V=>{var Ot;V.preventDefault(),g(!1);const U=(Ot=V.dataTransfer.files)==null?void 0:Ot[0];if(!U)return;if(!U.name.endsWith(".json")){p("请选择 .json 文件");return}const ft=new FileReader;ft.onload=Q=>{var ot;const F=(ot=Q.target)==null?void 0:ot.result;v(F)},ft.readAsText(U)},[v]),M=rt.useCallback(()=>{navigator.clipboard.writeText(y).then(()=>{n==null||n("success","已复制到剪贴板")}).catch(()=>{const V=document.createElement("textarea");V.value=y,document.body.appendChild(V),V.select(),document.execCommand("copy"),document.body.removeChild(V),n==null||n("success","已复制到剪贴板")})},[y,n]),O=rt.useCallback(()=>{const U=`${e.replace(/[^a-zA-Z0-9_\-\u4e00-\u9fa5]/g,"_")}_${new Date().toISOString().slice(0,10)}.json`,ft=new Blob([y],{type:"application/json"}),Ot=URL.createObjectURL(ft),Q=document.createElement("a");Q.href=Ot,Q.download=U,document.body.appendChild(Q),Q.click(),document.body.removeChild(Q),URL.revokeObjectURL(Ot),n==null||n("success",`已下载: ${U}`)},[y,e,n]),b=rt.useCallback(()=>{if(!u){n==null||n("error","没有可导入的数据");return}o==null||o(u),n==null||n("success","规则链导入成功"),i()},[u,o,n,i]);return N.jsx("div",{className:"rge-modal-overlay",onClick:V=>{V.target===V.currentTarget&&i()},children:N.jsxs("div",{className:"rge-modal",style:{width:640},children:[N.jsxs("div",{className:"rge-modal-header",children:[N.jsx("div",{className:"rge-modal-title",children:a==="export"?"📤 导出规则链":"📥 导入规则链"}),N.jsx("button",{className:"rge-modal-close",onClick:i,children:"✕"})]}),N.jsxs("div",{className:"rge-ie-tabs",children:[N.jsx("button",{className:`rge-ie-tab ${a==="export"?"active":""}`,onClick:()=>s("export"),children:"📤 导出"}),N.jsx("button",{className:`rge-ie-tab ${a==="import"?"active":""}`,onClick:()=>s("import"),children:"📥 导入"})]}),N.jsx("div",{className:"rge-modal-body",children:a==="export"?N.jsxs(N.Fragment,{children:[N.jsxs("div",{className:"rge-ie-info",children:[N.jsxs("span",{children:["📋 节点: ",((I=(_=t==null?void 0:t.metadata)==null?void 0:_.nodes)==null?void 0:I.length)||0]}),N.jsxs("span",{children:["🔗 连线: ",((R=(P=t==null?void 0:t.metadata)==null?void 0:P.connections)==null?void 0:R.length)||0]}),N.jsxs("span",{children:["📏 大小: ",(y.length/1024).toFixed(1)," KB"]})]}),N.jsx("pre",{className:"rge-ie-preview",children:y})]}):N.jsxs(N.Fragment,{children:[N.jsxs("div",{className:`rge-ie-dropzone ${f?"dragover":""} ${l?"has-file":""}`,onDragOver:V=>{V.preventDefault(),g(!0)},onDragLeave:()=>g(!1),onDrop:S,onClick:()=>{var V;return(V=m.current)==null?void 0:V.click()},children:[N.jsx("input",{ref:m,type:"file",accept:".json",style:{display:"none"},onChange:x}),l?N.jsx("span",{className:"rge-ie-file-name",children:"✅ 文件已加载,点击重新选择"}):N.jsxs(N.Fragment,{children:[N.jsx("span",{className:"rge-ie-drop-icon",children:"📁"}),N.jsx("span",{className:"rge-ie-drop-text",children:"拖拽 JSON 文件到此处,或点击选择文件"})]})]}),h&&N.jsxs("div",{className:"rge-ie-error",children:["❌ ",h]}),u&&N.jsxs("div",{className:"rge-ie-import-info",children:[N.jsxs("div",{className:"rge-ie-info",children:[N.jsxs("span",{children:["📋 节点: ",((w=(L=u==null?void 0:u.metadata)==null?void 0:L.nodes)==null?void 0:w.length)||0]}),N.jsxs("span",{children:["🔗 连线: ",((E=(D=u==null?void 0:u.metadata)==null?void 0:D.connections)==null?void 0:E.length)||0]}),N.jsxs("span",{children:["📛 名称: ",((W=u==null?void 0:u.ruleChain)==null?void 0:W.name)||"未知"]})]}),N.jsx("pre",{className:"rge-ie-preview",style:{maxHeight:200},children:JSON.stringify(u,null,2)})]})]})}),N.jsxs("div",{className:"rge-modal-footer",children:[N.jsx("button",{className:"rge-btn secondary",onClick:i,children:"取消"}),a==="export"?N.jsxs(N.Fragment,{children:[N.jsx("button",{className:"rge-btn secondary",onClick:M,children:"📋 复制"}),N.jsx("button",{className:"rge-btn primary",onClick:O,children:"💾 下载文件"})]}):N.jsx("button",{className:"rge-btn primary",onClick:b,disabled:!u,children:"确认导入"})]})]})})};function YN(r,t){if(!t)return r;const e=r.toLowerCase(),o=t.toLowerCase(),i=e.indexOf(o);return i===-1?r:N.jsxs(N.Fragment,{children:[r.slice(0,i),N.jsx("mark",{className:"rge-search-highlight",children:r.slice(i,i+t.length)}),r.slice(i+t.length)]})}const Ntt=({nodes:r,onSelectNode:t,onClose:e,position:o="top-center"})=>{const[i,n]=rt.useState(""),[a,s]=rt.useState(0),l=rt.useRef(null);rt.useEffect(()=>{var p;(p=l.current)==null||p.focus()},[]);const c=rt.useMemo(()=>{if(!i.trim())return[];const p=i.toLowerCase().trim();return r.filter(f=>f.name.toLowerCase().includes(p)||f.type.toLowerCase().includes(p)||f.id.toLowerCase().includes(p)||f.typeLabel&&f.typeLabel.toLowerCase().includes(p)||f.extra&&f.extra.toLowerCase().includes(p))},[r,i]),u=rt.useCallback(p=>{switch(p.key){case"ArrowDown":p.preventDefault(),s(f=>Math.min(f+1,c.length-1));break;case"ArrowUp":p.preventDefault(),s(f=>Math.max(f-1,0));break;case"Enter":p.preventDefault(),c[a]&&(t==null||t(c[a].id));break;case"Escape":p.preventDefault(),e();break}},[c,a,t,e]),d=rt.useCallback(p=>{n(p.target.value),s(0)},[]),h=rt.useCallback(p=>{t==null||t(p)},[t]);return N.jsxs("div",{className:`rge-search-panel ${o}`,children:[N.jsxs("div",{className:"rge-search-input-wrapper",children:[N.jsx("span",{className:"rge-search-icon",children:"🔍"}),N.jsx("input",{ref:l,type:"text",className:"rge-search-input",placeholder:"搜索节点名称、类型或 ID...",value:i,onChange:d,onKeyDown:u}),i&&N.jsxs("span",{className:"rge-search-count",children:[c.length," 个结果"]}),N.jsx("button",{className:"rge-search-close",onClick:e,children:"✕"})]}),i&&c.length>0&&N.jsx("div",{className:"rge-search-results",children:c.map((p,f)=>N.jsxs("div",{className:`rge-search-result-item ${f===a?"active":""}`,onClick:()=>h(p.id),onMouseEnter:()=>s(f),children:[N.jsxs("div",{className:"rge-search-result-main",children:[N.jsx("span",{className:"rge-search-result-name",children:YN(p.name,i)}),N.jsx("span",{className:"rge-search-result-type",children:p.typeLabel||p.type})]}),N.jsxs("div",{className:"rge-search-result-id",children:["ID: ",YN(p.id,i)]})]},p.id))}),i&&c.length===0&&N.jsx("div",{className:"rge-search-empty",children:"🔍 没有找到匹配的节点"})]})},Stt={design:"✏️",info:"ℹ️",start:"▶️",stop:"⏹️",copy:"📋",delete:"🗑️",search:"🔍",refresh:"🔄",add:"➕",workflow:"⚡",logs:"📄"},_tt=r=>{var nt,ht;const{apiBase:t,apiOptions:e,fetcher:o,pageSize:i=10,theme:n="light",className:a="",style:s,icons:l,showSearch:c=!0,showCreate:u=!0,showRefresh:d=!0,renderHeader:h,renderActions:p,renderEmpty:f,renderCreateForm:g,renderRow:m,onDesign:y,onInfo:v,onViewLogs:x,onChange:S,onError:M,onCreateSuccess:O}=r,b={...Stt,...l},_=rt.useRef(null);o?_.current=o:t&&(!_.current||((ht=(nt=_.current)==null?void 0:nt.getApiBase)==null?void 0:ht.call(nt))!==t)&&(_.current=new Ka({apiBase:t,...e}));const I=_.current,[P,R]=rt.useState([]),[L,w]=rt.useState(0),[D,E]=rt.useState(1),[W]=rt.useState(i),[V,U]=rt.useState(""),[ft,Ot]=rt.useState(!1),[Q,F]=rt.useState(!1),[ot,st]=rt.useState(""),[at,z]=rt.useState(""),[B,X]=rt.useState(null),it=rt.useCallback(async(mt,vt)=>{if(I){Ot(!0);try{const dt=await I.list(mt??D,W,vt??V);R(dt.items),w(dt.total)}catch(dt){M==null||M(dt instanceof Error?dt:new Error(String(dt)))}finally{Ot(!1)}}},[I,D,W,V,M]);rt.useEffect(()=>{it()},[it]);const ut=rt.useCallback(()=>{E(1),it(1,V)},[V,it]),wt=rt.useCallback(mt=>{mt.key==="Enter"&&ut()},[ut]),bt=Math.max(1,Math.ceil(L/W)),lt=rt.useCallback(()=>{D>1&&(E(D-1),it(D-1))},[D,it]),Qt=rt.useCallback(()=>{D<bt&&(E(D+1),it(D+1))},[D,bt,it]),It=rt.useCallback(async(mt,vt)=>{if(I){X(mt);try{const dt=await I.operate(mt,vt);if(!dt.success)throw new Error(dt.msg||"操作失败");await it(),S==null||S()}catch(dt){M==null||M(dt instanceof Error?dt:new Error(String(dt)))}finally{X(null)}}},[I,it,S,M]),Yt=rt.useCallback(async mt=>{if(I){X(mt);try{const vt=await I.copy(mt);if(!vt.success)throw new Error(vt.msg||"复制失败");await it(),S==null||S()}catch(vt){M==null||M(vt instanceof Error?vt:new Error(String(vt)))}finally{X(null)}}},[I,it,S,M]),St=rt.useCallback(async(mt,vt)=>{if(I&&window.confirm(`确定删除工作流「${vt}」吗?此操作不可恢复。`)){X(mt);try{const dt=await I.remove(mt);if(!dt.success)throw new Error(dt.msg||"删除失败");await it(),S==null||S()}catch(dt){M==null||M(dt instanceof Error?dt:new Error(String(dt)))}finally{X(null)}}},[I,it,S,M]),xt=rt.useCallback(async mt=>{if(!I)return;const vt=mt||{ruleChain:{id:Ka.generateChainId(),name:ot.trim()||"新工作流",root:!1,disabled:!0,additionalInfo:{description:at.trim(),createTime:new Date().toISOString()}},metadata:{nodes:[],connections:[]}};try{const dt=await I.create(vt);if(!dt.success)throw new Error(dt.msg||"创建失败");F(!1),st(""),z(""),await it(),S==null||S();const Zt=vt.ruleChain,Jt=String((Zt==null?void 0:Zt.id)??"");Jt&&(O==null||O(Jt))}catch(dt){M==null||M(dt instanceof Error?dt:new Error(String(dt)))}},[I,ot,at,it,S,M,O]),T=mt=>{const vt=B===mt.id;return N.jsxs("div",{className:"huanban_rulego_list__actions",children:[y&&N.jsxs("button",{className:"huanban_rulego_list__action_btn huanban_rulego_list__action_btn--design",disabled:vt,onClick:()=>y(mt.id),title:"设计",children:[b.design," ",N.jsx("span",{children:"设计"})]}),v&&N.jsxs("button",{className:"huanban_rulego_list__action_btn huanban_rulego_list__action_btn--info",disabled:vt,onClick:()=>v(mt),title:"信息",children:[b.info," ",N.jsx("span",{children:"信息"})]}),N.jsxs("button",{className:"huanban_rulego_list__action_btn huanban_rulego_list__action_btn--operate",disabled:vt,onClick:()=>It(mt.id,mt.deployed?"stop":"start"),title:mt.deployed?"下线":"上线",children:[mt.deployed?b.stop:b.start,N.jsx("span",{children:mt.deployed?"下线":"上线"})]}),N.jsxs("button",{className:"huanban_rulego_list__action_btn huanban_rulego_list__action_btn--copy",disabled:vt,onClick:()=>Yt(mt.id),title:"复制",children:[b.copy," ",N.jsx("span",{children:"复制"})]}),N.jsxs("button",{className:"huanban_rulego_list__action_btn huanban_rulego_list__action_btn--delete",disabled:vt,onClick:()=>St(mt.id,mt.name),title:"删除",children:[b.delete," ",N.jsx("span",{children:"删除"})]}),x&&N.jsxs("button",{className:"huanban_rulego_list__action_btn huanban_rulego_list__action_btn--logs",disabled:vt,onClick:()=>x(mt.id),title:"日志",children:[b.logs," ",N.jsx("span",{children:"日志"})]})]})},k=(mt,vt)=>{const dt=T(mt),Zt=p?p(mt,dt):dt;return N.jsxs("div",{className:`huanban_rulego_list__row ${mt.deployed?"huanban_rulego_list__row--deployed":"huanban_rulego_list__row--offline"}`,"data-id":mt.id,children:[N.jsxs("div",{className:"huanban_rulego_list__row_main",children:[N.jsx("span",{className:"huanban_rulego_list__row_icon",children:b.workflow}),N.jsxs("div",{className:"huanban_rulego_list__row_info",children:[N.jsx("span",{className:"huanban_rulego_list__row_name",children:mt.name}),N.jsx("span",{className:"huanban_rulego_list__row_id",children:mt.id})]}),N.jsx("span",{className:`huanban_rulego_list__row_status ${mt.deployed?"huanban_rulego_list__row_status--on":"huanban_rulego_list__row_status--off"}`,children:mt.deployed?"已上线":"已下线"})]}),mt.description&&N.jsx("div",{className:"huanban_rulego_list__row_desc",children:mt.description}),Zt]},mt.id)},Y=N.jsxs("div",{className:"huanban_rulego_list__header",children:[N.jsxs("h3",{className:"huanban_rulego_list__title",children:[b.workflow," 工作流列表",N.jsxs("span",{className:"huanban_rulego_list__count",children:["(",L,")"]})]}),N.jsxs("div",{className:"huanban_rulego_list__toolbar",children:[c&&N.jsxs("div",{className:"huanban_rulego_list__search",children:[N.jsx("input",{className:"huanban_rulego_list__search_input",type:"text",placeholder:"搜索工作流...",value:V,onChange:mt=>U(mt.target.value),onKeyDown:wt}),N.jsx("button",{className:"huanban_rulego_list__search_btn",onClick:ut,title:"搜索",children:b.search})]}),d&&N.jsx("button",{className:"huanban_rulego_list__toolbar_btn",onClick:()=>it(),title:"刷新",disabled:ft,children:b.refresh}),u&&N.jsxs("button",{className:"huanban_rulego_list__toolbar_btn huanban_rulego_list__toolbar_btn--primary",onClick:()=>F(!0),title:"新建工作流",children:[b.add," 新建"]})]})]}),et=N.jsxs("div",{className:"huanban_rulego_list__form",children:[N.jsxs("label",{className:"huanban_rulego_list__form_label",children:["名称",N.jsx("input",{className:"huanban_rulego_list__form_input",type:"text",value:ot,onChange:mt=>st(mt.target.value),placeholder:"输入工作流名称",autoFocus:!0})]}),N.jsxs("label",{className:"huanban_rulego_list__form_label",children:["描述",N.jsx("textarea",{className:"huanban_rulego_list__form_textarea",value:at,onChange:mt=>z(mt.target.value),placeholder:"可选描述",rows:3})]})]}),$=N.jsxs("div",{className:"huanban_rulego_list__empty",children:[N.jsx("span",{className:"huanban_rulego_list__empty_icon",children:b.workflow}),N.jsx("p",{children:"暂无工作流"}),u&&N.jsxs("button",{className:"huanban_rulego_list__empty_btn",onClick:()=>F(!0),children:[b.add," 创建第一个工作流"]})]}),ct=n!=="light"?`huanban_rulego_list--${n}`:"";return N.jsxs("div",{className:`huanban_rulego_list ${ct} ${a}`.trim(),style:s,children:[h?h(Y):Y,N.jsxs("div",{className:"huanban_rulego_list__body",children:[ft&&N.jsxs("div",{className:"huanban_rulego_list__loading",children:[N.jsx("span",{className:"huanban_rulego_list__spinner"}),"加载中..."]}),!ft&&P.length===0&&(f?f():$),!ft&&P.length>0&&N.jsx("div",{className:"huanban_rulego_list__rows",children:P.map((mt,vt)=>{const dt=k(mt);return m?N.jsx(rt.Fragment,{children:m(mt,vt,dt)},mt.id):N.jsx(rt.Fragment,{children:dt},mt.id)})})]}),L>W&&N.jsxs("div",{className:"huanban_rulego_list__pagination",children:[N.jsx("button",{className:"huanban_rulego_list__page_btn",disabled:D<=1,onClick:lt,children:"上一页"}),N.jsxs("span",{className:"huanban_rulego_list__page_info",children:[D," / ",bt]}),N.jsx("button",{className:"huanban_rulego_list__page_btn",disabled:D>=bt,onClick:Qt,children:"下一页"})]}),Q&&N.jsx("div",{className:"huanban_rulego_list__modal_mask",onClick:()=>F(!1),children:N.jsxs("div",{className:"huanban_rulego_list__modal",onClick:mt=>mt.stopPropagation(),children:[N.jsxs("div",{className:"huanban_rulego_list__modal_header",children:[N.jsx("h4",{children:"新建工作流"}),N.jsx("button",{className:"huanban_rulego_list__modal_close",onClick:()=>F(!1),children:"✕"})]}),N.jsx("div",{className:"huanban_rulego_list__modal_body",children:g?g(et,{close:()=>F(!1),submit:mt=>xt(mt)}):et}),N.jsxs("div",{className:"huanban_rulego_list__modal_footer",children:[N.jsx("button",{className:"huanban_rulego_list__btn huanban_rulego_list__btn--cancel",onClick:()=>F(!1),children:"取消"}),N.jsx("button",{className:"huanban_rulego_list__btn huanban_rulego_list__btn--primary",onClick:()=>xt(),children:"创建"})]})]})})]})},Ttt={variable:"📦",secret:"🔐",api:"🔗",mcp:"🤖",copy:"📋",delete:"🗑️",add:"➕",save:"💾"},$N=({entries:r,onChange:t,icons:e,keyPlaceholder:o="Key",valuePlaceholder:i="Value",valueType:n="text"})=>{const a=()=>t([...r,{key:"",value:""}]),s=c=>t(r.filter((u,d)=>d!==c)),l=(c,u,d)=>{const h=[...r];h[c]={...h[c],[u]:d},t(h)};return N.jsxs("div",{className:"huanban_rulego_info__kv",children:[r.length>0&&N.jsxs("div",{className:"huanban_rulego_info__kv_row huanban_rulego_info__kv_header",children:[N.jsx("span",{className:"huanban_rulego_info__kv_th",children:o}),N.jsx("span",{className:"huanban_rulego_info__kv_th",children:i}),N.jsx("span",{className:"huanban_rulego_info__kv_th huanban_rulego_info__kv_th--action",children:"操作"})]}),r.map((c,u)=>N.jsxs("div",{className:"huanban_rulego_info__kv_row",children:[N.jsx("input",{className:"huanban_rulego_info__kv_input",type:"text",placeholder:o,value:c.key,onChange:d=>l(u,"key",d.target.value)}),N.jsx("input",{className:"huanban_rulego_info__kv_input",type:n,placeholder:i,value:c.value,onChange:d=>l(u,"value",d.target.value)}),N.jsx("button",{className:"huanban_rulego_info__kv_del",onClick:()=>s(u),title:"删除",children:e.delete})]},u)),N.jsxs("button",{className:"huanban_rulego_info__kv_add",onClick:a,children:[e.add," 添加"]})]})},Itt=r=>{var ut,wt,bt;const{apiBase:t,apiOptions:e,fetcher:o,workflow:i,theme:n="light",className:a="",style:s,icons:l,defaultTab:c="base",renderBaseInfo:u,renderVarsSecrets:d,renderIntegration:h,renderExtraTabs:p,onSave:f,onError:g,onRefresh:m}=r,y={...Ttt,...l},v=rt.useRef(null);o?v.current=o:t&&(!v.current||((wt=(ut=v.current)==null?void 0:ut.getApiBase)==null?void 0:wt.call(ut))!==t)&&(v.current=new Ka({apiBase:t,...e}));const x=v.current,[S,M]=rt.useState(c),[O,b]=rt.useState(""),[_,I]=rt.useState(""),[P,R]=rt.useState([]),[L,w]=rt.useState([]),[D,E]=rt.useState(!1),[W,V]=rt.useState(null);rt.useEffect(()=>{!i||!x||(b(i.name),I(i.description),x.getContent(i.id).then(lt=>{V(lt);const Qt=(lt==null?void 0:lt.ruleChain)??lt,It=(Qt==null?void 0:Qt.additionalInfo)??{},Yt=(It==null?void 0:It.vars)??(Qt==null?void 0:Qt.vars)??{};R(Object.entries(Yt).map(([xt,T])=>({key:xt,value:String(T)})));const St=(It==null?void 0:It.secrets)??(Qt==null?void 0:Qt.secrets)??{};w(Object.entries(St).map(([xt,T])=>({key:xt,value:String(T)})))}).catch(lt=>g==null?void 0:g(lt instanceof Error?lt:new Error(String(lt)))))},[i,x,g]);const U=rt.useCallback(async()=>{if(!(!x||!i)){E(!0);try{const lt=await x.saveBaseInfo(i.id,{name:O.trim(),additionalInfo:{...i.additionalInfo||{},description:_.trim(),updateTime:new Date().toISOString()}});if(!lt.success)throw new Error(lt.msg||"保存失败");f==null||f("base"),m==null||m()}catch(lt){g==null||g(lt instanceof Error?lt:new Error(String(lt)))}finally{E(!1)}}},[x,i,O,_,f,g,m]),ft=rt.useCallback(async lt=>{if(!(!x||!i)){E(!0);try{const Qt=lt==="vars"?P:L,It={};Qt.forEach(St=>{St.key.trim()&&(It[St.key.trim()]=St.value)});const Yt=await x.saveConfig(i.id,lt,It);if(!Yt.success)throw new Error(Yt.msg||"保存失败");f==null||f(lt),m==null||m()}catch(Qt){g==null||g(Qt instanceof Error?Qt:new Error(String(Qt)))}finally{E(!1)}}},[x,i,P,L,f,g,m]),Ot=rt.useCallback(lt=>{navigator.clipboard.writeText(lt).catch(()=>{const Qt=document.createElement("textarea");Qt.value=lt,document.body.appendChild(Qt),Qt.select(),document.execCommand("copy"),document.body.removeChild(Qt)})},[]);if(!i)return N.jsx("div",{className:`huanban_rulego_info huanban_rulego_info--empty ${a}`.trim(),style:s,children:N.jsx("p",{className:"huanban_rulego_info__no_data",children:"请选择一个工作流查看详情"})});const Q=t||((bt=x==null?void 0:x.getApiBase)==null?void 0:bt.call(x))||"",F=[{key:"base",label:"基础信息"},{key:"vars",label:`${y.variable} 变量与秘钥`},{key:"integration",label:`${y.api} 应用集成`}],ot=p?p(i):[],st=[...F,...ot.map(lt=>({key:lt.key,label:lt.label}))],at=N.jsxs("div",{className:"huanban_rulego_info__panel",children:[N.jsxs("label",{className:"huanban_rulego_info__label",children:["名称",N.jsx("input",{className:"huanban_rulego_info__input",type:"text",value:O,onChange:lt=>b(lt.target.value)})]}),N.jsxs("label",{className:"huanban_rulego_info__label",children:["描述",N.jsx("textarea",{className:"huanban_rulego_info__textarea",rows:3,value:_,onChange:lt=>I(lt.target.value)})]}),N.jsx("div",{className:"huanban_rulego_info__row",children:N.jsxs("span",{className:"huanban_rulego_info__field",children:["ID: ",i.id]})}),N.jsx("div",{className:"huanban_rulego_info__row",children:N.jsx("span",{className:`huanban_rulego_info__status ${i.deployed?"huanban_rulego_info__status--on":"huanban_rulego_info__status--off"}`,children:i.deployed?"已上线":"已下线"})}),N.jsxs("button",{className:"huanban_rulego_info__save_btn",disabled:D,onClick:U,children:[y.save," ",D?"保存中...":"保存基础信息"]})]}),z=N.jsxs("div",{className:"huanban_rulego_info__panel",children:[N.jsxs("h4",{className:"huanban_rulego_info__subtitle",children:[y.variable," 变量"]}),N.jsx($N,{entries:P,onChange:R,icons:y,keyPlaceholder:"变量名",valuePlaceholder:"变量值"}),N.jsxs("button",{className:"huanban_rulego_info__save_btn",disabled:D,onClick:()=>ft("vars"),children:[y.save," 保存变量"]}),N.jsxs("h4",{className:"huanban_rulego_info__subtitle",style:{marginTop:20},children:[y.secret," 秘钥"]}),N.jsx($N,{entries:L,onChange:w,icons:y,keyPlaceholder:"秘钥名",valuePlaceholder:"秘钥值",valueType:"password"}),N.jsxs("button",{className:"huanban_rulego_info__save_btn",disabled:D,onClick:()=>ft("secrets"),children:[y.save," 保存秘钥"]})]}),B=N.jsxs("div",{className:"huanban_rulego_info__panel",children:[N.jsxs("h4",{className:"huanban_rulego_info__subtitle",children:[y.api," API 集成"]}),N.jsxs("div",{className:"huanban_rulego_info__integration_item",children:[N.jsx("span",{className:"huanban_rulego_info__integration_label",children:"执行 API:"}),N.jsxs("code",{className:"huanban_rulego_info__integration_url",children:["POST ",Q,"/rules/",i.id,"/execute/:msgType"]}),N.jsx("button",{className:"huanban_rulego_info__copy_btn",onClick:()=>Ot(`${Q}/rules/${i.id}/execute/:msgType`),children:y.copy})]}),N.jsxs("div",{className:"huanban_rulego_info__integration_item",children:[N.jsx("span",{className:"huanban_rulego_info__integration_label",children:"通知 API:"}),N.jsxs("code",{className:"huanban_rulego_info__integration_url",children:["POST ",Q,"/rules/",i.id,"/notify/:msgType"]}),N.jsx("button",{className:"huanban_rulego_info__copy_btn",onClick:()=>Ot(`${Q}/rules/${i.id}/notify/:msgType`),children:y.copy})]}),N.jsxs("h4",{className:"huanban_rulego_info__subtitle",style:{marginTop:20},children:[y.mcp," MCP 集成"]}),N.jsxs("div",{className:"huanban_rulego_info__integration_item",children:[N.jsx("span",{className:"huanban_rulego_info__integration_label",children:"MCP SSE:"}),N.jsxs("code",{className:"huanban_rulego_info__integration_url",children:[Q,"/mcp/",i.id,"/sse"]}),N.jsx("button",{className:"huanban_rulego_info__copy_btn",onClick:()=>Ot(`${Q}/mcp/${i.id}/sse`),children:y.copy})]})]}),X=()=>{switch(S){case"base":return u?u(i,at):at;case"vars":return d?d(i,z):z;case"integration":return h?h(i,Q,B):B;default:{const lt=ot.find(Qt=>Qt.key===S);return lt?lt.children:null}}},it=n!=="light"?`huanban_rulego_info--${n}`:"";return N.jsxs("div",{className:`huanban_rulego_info ${it} ${a}`.trim(),style:s,children:[N.jsx("div",{className:"huanban_rulego_info__tabs",children:st.map(lt=>N.jsx("button",{className:`huanban_rulego_info__tab ${S===lt.key?"huanban_rulego_info__tab--active":""}`,onClick:()=>M(lt.key),children:lt.label},lt.key))}),N.jsx("div",{className:"huanban_rulego_info__content",children:X()})]})},Dtt={isReady:!1,isDirty:!1,isLoading:!1,selectedNode:null,selectedEdge:null,componentGroups:[],currentNodeView:null,currentNodeModel:{},canUndo:!1,canRedo:!1};function Ctt(r={}){const[t,e]=rt.useState(Dtt),o=rt.useRef(null),i=rt.useRef([]),n=rt.useRef(r);rt.useEffect(()=>{const d=new AT(n.current);o.current=d;const h=d.store.subscribe(p=>{e({isReady:p.isReady,isDirty:p.isDirty,isLoading:p.isLoading,selectedNode:p.selectedNode,selectedEdge:p.selectedEdge,componentGroups:p.componentGroups,currentNodeView:p.currentNodeView,currentNodeModel:p.currentNodeModel,canUndo:p.canUndo,canRedo:p.canRedo})});return()=>{for(const p of i.current)p();i.current=[],h(),d.destroy(),o.current=null}},[]);const a=rt.useCallback(d=>{o.current&&o.current.init(d)},[]),s=rt.useCallback(d=>{o.current&&o.current.loadData(d)},[]),l=rt.useCallback((d,h)=>{if(o.current){const p=o.current.eventBus.on(d,h);i.current.push(p)}},[]),c=rt.useCallback((d,...h)=>{o.current&&o.current.eventBus.emit(d,...h)},[]),u=rt.useCallback(()=>{o.current&&o.current.eventBus.emit("editor:save",{data:{},success:!1})},[]);return{core:o.current,...t,loadData:s,on:l,emit:c,init:a,save:u}}function jtt(r){const[t,e]=rt.useState("light"),[o,i]=rt.useState(["light","dark","blue"]);rt.useEffect(()=>{r&&(e(r.theme.getTheme()),i(r.theme.getAvailableThemes().map(a=>a.name)))},[r]);const n=rt.useCallback(a=>{r&&(r.theme.setTheme(a),e(a))},[r]);return{currentTheme:t,themes:o,setTheme:n}}function Att(r){const[t,e]=rt.useState((r==null?void 0:r.i18n.getLocale())||"zh-CN"),o=rt.useCallback((n,a)=>r?r.i18n.t(n,a):n,[r]),i=rt.useCallback(n=>{r&&(r.i18n.setLocale(n),e(n))},[r]);return{t:o,locale:t,setLocale:i}}function NC(){return typeof navigator>"u"?!1:/Mac|iPod|iPhone|iPad/.test(navigator.platform||"")}function Ett(){const r=document.activeElement;if(!r)return!1;const t=r.tagName.toLowerCase();return!!(t==="input"||t==="textarea"||r.isContentEditable)}function ktt(r){const{shortcuts:t,enabled:e=!0,target:o}=r,i=rt.useRef(t);i.current=t,rt.useEffect(()=>{if(!e)return;const n=NC(),a=l=>{const c=l,u=c.key.toLowerCase();for(const d of i.current){if(u!==d.key.toLowerCase())continue;const h=d.ctrl?n?c.metaKey:c.ctrlKey:!(n?c.metaKey:c.ctrlKey),p=d.shift?c.shiftKey:!c.shiftKey,f=d.alt?c.altKey:!c.altKey;if(!(!h||!p||!f)&&!(!d.enableInInput&&Ett())){c.preventDefault(),c.stopPropagation(),d.handler(c);return}}},s=o||document;return s.addEventListener("keydown",a),()=>{s.removeEventListener("keydown",a)}},[e,o])}function ztt(r){const t=NC(),e=[];return r.ctrl&&e.push(t?"⌘":"Ctrl"),r.shift&&e.push(t?"⇧":"Shift"),r.alt&&e.push(t?"⌥":"Alt"),e.push(r.key.toUpperCase()),t?e.join(""):e.join("+")}function Ptt(r){return[{key:"s",ctrl:!0,description:"保存",handler:()=>{var t;return(t=r.onSave)==null?void 0:t.call(r)}},{key:"z",ctrl:!0,description:"撤销",handler:()=>{var t;return(t=r.onUndo)==null?void 0:t.call(r)}},{key:"z",ctrl:!0,shift:!0,description:"重做",handler:()=>{var t;return(t=r.onRedo)==null?void 0:t.call(r)}},{key:"y",ctrl:!0,description:"重做",handler:()=>{var t;return(t=r.onRedo)==null?void 0:t.call(r)}},{key:"delete",description:"删除",handler:()=>{var t;return(t=r.onDelete)==null?void 0:t.call(r)}},{key:"backspace",description:"删除",handler:()=>{var t;return(t=r.onDelete)==null?void 0:t.call(r)}},{key:"c",ctrl:!0,description:"复制",handler:()=>{var t;return(t=r.onCopy)==null?void 0:t.call(r)}},{key:"v",ctrl:!0,description:"粘贴",handler:()=>{var t;return(t=r.onPaste)==null?void 0:t.call(r)}},{key:"a",ctrl:!0,description:"全选",handler:()=>{var t;return(t=r.onSelectAll)==null?void 0:t.call(r)}},{key:"1",ctrl:!0,description:"适应画布",handler:()=>{var t;return(t=r.onFitView)==null?void 0:t.call(r)}},{key:"=",ctrl:!0,description:"放大",handler:()=>{var t;return(t=r.onZoomIn)==null?void 0:t.call(r)}},{key:"-",ctrl:!0,description:"缩小",handler:()=>{var t;return(t=r.onZoomOut)==null?void 0:t.call(r)}},{key:"escape",description:"取消选择",handler:()=>{var t;return(t=r.onEscape)==null?void 0:t.call(r)}}]}const Ltt=30;function Qtt(){return`node_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,8)}`}function Rtt(r){const[t,e]=rt.useState([]),o=rt.useRef(0),i=rt.useCallback(()=>{var d,h,p;const c=((d=r.getSelectedNodes)==null?void 0:d.call(r))||[];if(c.length===0){(h=r.onNotify)==null||h.call(r,"info","没有选中的节点");return}const u=c.map(f=>({...f}));e(u),o.current=0,(p=r.onNotify)==null||p.call(r,"success",`已复制 ${u.length} 个节点`)},[r]),n=rt.useCallback(()=>{var h,p,f,g;const c=((h=r.getSelectedNodes)==null?void 0:h.call(r))||[];if(c.length===0){(p=r.onNotify)==null||p.call(r,"info","没有选中的节点");return}const u=c.map(m=>({...m}));e(u),o.current=0;const d=c.map(m=>m.originalId);(f=r.onDeleteNodes)==null||f.call(r,d),(g=r.onNotify)==null||g.call(r,"success",`已剪切 ${u.length} 个节点`)},[r]),a=rt.useCallback(()=>{var d,h,p;if(t.length===0){(d=r.onNotify)==null||d.call(r,"info","剪贴板为空");return}o.current+=1;const c=Ltt*o.current,u=t.map(f=>({...f,originalId:Qtt(),x:f.x+c,y:f.y+c}));(h=r.onAddNodes)==null||h.call(r,u),(p=r.onNotify)==null||p.call(r,"success",`已粘贴 ${u.length} 个节点`)},[t,r]),s=rt.useCallback(()=>{var c;(c=r.onSelectAll)==null||c.call(r)},[r]),l=rt.useCallback(()=>{e([]),o.current=0},[]);return{copy:i,cut:n,paste:a,selectAll:s,hasContent:t.length>0,clipboardCount:t.length,clear:l}}exports.ComponentSidebar=fC;exports.ContextMenu=OC;exports.DEFAULT_ROUTES=hC;exports.DataViewDialog=vC;exports.DebugPanel=yC;exports.EdgePropertyDrawer=mC;exports.EditorToolbar=bC;exports.ImportExportDialog=wtt;exports.MiniMap=xC;exports.NodePropertyDrawer=gC;exports.RuleChainAPI=Ka;exports.RuleChainSettings=wC;exports.RuleGoEditor=pC;exports.SearchPanel=Ntt;exports.ValidationPanel=MC;exports.WorkflowInfoPanel=Itt;exports.WorkflowList=_tt;exports.getCanvasContextMenuItems=xtt;exports.getDefaultEditorShortcuts=Ptt;exports.getEdgeContextMenuItems=Ott;exports.getNodeContextMenuItems=btt;exports.getShortcutLabel=ztt;exports.useClipboard=Rtt;exports.useEditorCore=Ctt;exports.useEditorI18n=Att;exports.useEditorTheme=jtt;exports.useKeyboardShortcuts=ktt;
2512
2512
  //# sourceMappingURL=index.cjs.js.map