mokelay-editor 0.0.3 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/assets/ApiBuilderShell-Bm4OYwge.js +1 -0
  2. package/assets/ApiBuilderShell-DGgsHv3d.css +1 -0
  3. package/assets/EditorPanel-CF3kVQ21.css +1 -0
  4. package/assets/EditorPanel-DU-O-EE-.js +1 -0
  5. package/assets/MPage-ChS8xsfM.js +1 -0
  6. package/assets/MPage.vue_vue_type_script_setup_true_lang-D2OXItLi.js +1 -0
  7. package/assets/PreviewPanel-Dt5b3mBI.js +1 -0
  8. package/assets/block-advanced-CdUL2rGG.js +1 -0
  9. package/assets/block-advanced-DfEsE7Tf.css +1 -0
  10. package/assets/block-chart-BDhOWgsD.css +1 -0
  11. package/assets/block-chart-C_HzJKhS.js +1 -0
  12. package/assets/block-datasource-B8nJNjoV.js +1 -0
  13. package/assets/block-datasource-DIH8wAmJ.css +1 -0
  14. package/assets/block-editor-selector-DWvvND_N.js +72 -0
  15. package/assets/block-editor-selector-Da_ew6E9.css +1 -0
  16. package/assets/block-form-0t-EPu3N.css +1 -0
  17. package/assets/block-form-C_cJnRtX.js +51 -0
  18. package/assets/echarts-BN_iJMI5.js +24 -0
  19. package/assets/{editorjs-hCuh8vdW.js → editorjs-CrGo22NX.js} +10 -10
  20. package/assets/element-plus-Bo3B6ZwD.js +1 -0
  21. package/assets/element-plus-Dit-l95b.css +1 -0
  22. package/assets/index-BJ_rhCtu.js +10 -0
  23. package/assets/index-D7DgezOc.css +1 -0
  24. package/assets/vue-vendor-CGusfGYN.js +17 -0
  25. package/assets/zrender-CyMoNtco.js +29 -0
  26. package/index.html +19 -6
  27. package/package.json +1 -1
  28. package/assets/EditorPanel-C1sfyxYP.js +0 -1
  29. package/assets/EditorPanel-vQbiWj6F.css +0 -1
  30. package/assets/MForm-DHyGtILs.css +0 -1
  31. package/assets/MForm-IOgKE4fR.js +0 -50
  32. package/assets/MPage-DdQoXp86.css +0 -1
  33. package/assets/MPage-okwcd_fI.js +0 -1
  34. package/assets/MPage.vue_vue_type_script_setup_true_lang-BfUuzlf-.js +0 -51
  35. package/assets/PreviewPanel-BB0_i9aa.js +0 -1
  36. package/assets/index-CH5-XypS.css +0 -1
  37. package/assets/index-DKqdRiPk.js +0 -26
@@ -0,0 +1 @@
1
+ import{f as ss,r as K,F as Oe,o as c,j as p,l as s,t as C,G as h,H as q,C as g,n as D,S as T,U as te,u as P,W as B,p as fe,D as be,L as rs,e as G,A as as}from"./vue-vendor-CGusfGYN.js";import{_ as ns}from"./block-advanced-CdUL2rGG.js";import"./element-plus-Bo3B6ZwD.js";const Ke=[{value:"header",title:"Header"},{value:"query",title:"Query"},{value:"body",title:"Body"}],os=[{value:"EQ",title:"等于"},{value:"NEQ",title:"不等于"},{value:"GT",title:"大于"},{value:"GE",title:"大于等于"},{value:"LT",title:"小于"},{value:"LE",title:"小于等于"},{value:"IN",title:"包含在"},{value:"NOTIN",title:"不包含在"}],rt=[{name:"trim",title:"去空格",description:"去除字符串前后空格。",needsParam:!1},{name:"is_not_null",title:"必填",description:"不能为空。",needsParam:!1},{name:"is_null",title:"必须为空",description:"值必须为空。",needsParam:!1},{name:"not_null",title:"是否有值",description:"返回布尔值。",needsParam:!1},{name:"email_check",title:"邮箱格式",description:"校验邮箱。",needsParam:!1},{name:"number_check",title:"数字格式",description:"校验数字。",needsParam:!1},{name:"eq",title:"必须等于",description:"值必须等于参数。",needsParam:!0,defaultParam:["expected"]},{name:"min",title:"最小长度",description:"字符串或数组长度下限。",needsParam:!0,defaultParam:[1]},{name:"max",title:"最大长度",description:"字符串或数组长度上限。",needsParam:!0,defaultParam:[255]},{name:"regex",title:"正则匹配",description:"用正则校验字符串。",needsParam:!0,defaultParam:["^[a-zA-Z0-9_-]+$"]},{name:"hash_make",title:"生成密码哈希",description:"把明文密码转成 hash。",needsParam:!1},{name:"hash_check",title:"校验密码",description:"校验 hash 与明文密码。",needsParam:!0,defaultParam:[{template:"{{request.body.password}}"}]}],ve=[{functionName:"list",title:"列表查询",shortTitle:"列表",group:"query",description:"查询多行数据,不分页。",outputs:["datas"],defaultInputs:()=>({datasource:"Mokelay",table:"users",fields:["id","name","created_at"],conditions:[],orderBy:[]})},{functionName:"page",title:"分页查询",shortTitle:"分页",group:"query",description:"查询当前页数据和分页信息。",outputs:["datas","total","totalPages","page","pageSize","hasPreviousPage","hasNextPage"],defaultInputs:()=>({datasource:"Mokelay",table:"pages",fields:["uuid","name","updated_at"],page:{template:"{{request.query.page}}"},pageSize:{template:"{{request.query.pageSize}}"},conditions:[],orderBy:[{fieldName:"updated_at",direction:"DESC"}]})},{functionName:"count",title:"统计数量",shortTitle:"统计",group:"query",description:"统计满足条件的记录数。",outputs:["total"],defaultInputs:()=>({datasource:"Mokelay",table:"users",conditions:[]})},{functionName:"read",title:"读取单条",shortTitle:"读取",group:"query",description:"读取第一条匹配记录。",outputs:["data"],defaultInputs:()=>({datasource:"Mokelay",table:"users",fields:["id","name","email"],conditions:[E("id",{template:"{{request.query.id}}"})]})},{functionName:"create",title:"创建数据",shortTitle:"创建",group:"write",description:"插入一条数据,并返回唯一 ID。",outputs:["uuid"],defaultInputs:()=>({datasource:"Mokelay",table:"users",idField:"id",fields:{name:{template:"{{request.body.name}}"}}})},{functionName:"update",title:"更新数据",shortTitle:"更新",group:"write",description:"更新符合条件的数据。",outputs:["affected"],defaultInputs:()=>({datasource:"Mokelay",table:"users",fields:{name:{template:"{{request.body.name}}"}},conditions:[E("id",{template:"{{request.query.id}}"})]})},{functionName:"delete",title:"删除数据",shortTitle:"删除",group:"write",description:"删除符合条件的数据。",outputs:["affected"],defaultInputs:()=>({datasource:"Mokelay",table:"users",conditions:[E("id",{template:"{{request.body.id}}"})]})},{functionName:"addSession",title:"写入 Session",shortTitle:"写入会话",group:"session",description:"把值写入编排 Session。",outputs:[],defaultInputs:()=>({key:"user",value:{template:"{{blocks['read_user'].outputs.data}}"}})},{functionName:"readSession",title:"读取 Session",shortTitle:"读取会话",group:"session",description:"读取 Session key。",outputs:["value"],defaultInputs:()=>({key:"user"})},{functionName:"removeSession",title:"清除 Session",shortTitle:"清除会话",group:"session",description:"删除 Session key。",outputs:[],defaultInputs:()=>({key:"user"})}],Je=[{id:"register",title:"注册接口",description:"校验邮箱重复,创建用户,读取用户,写入 Session。",build:e=>is(e)},{id:"login",title:"登录接口",description:"读取用户,校验密码,写入 Session。",build:e=>ls(e)},{id:"me",title:"当前用户",description:"读取 Session 并返回登录状态。",build:()=>({uuid:"me",alias:"当前用户接口",method:"GET",blocks:[I("readSession","read_user_session","读取用户 Session")],response:{user:_("blocks['read_user_session'].outputs.value"),loggedIn:{template:"{{blocks['read_user_session'].outputs.value}}",processors:["not_null"]}}})},{id:"logout",title:"退出登录",description:"清除 Session 并返回成功标记。",build:()=>({uuid:"logout",alias:"退出登录接口",method:"POST",blocks:[I("removeSession","clear_user_session","清除用户 Session")],response:{success:!0}})},{id:"page",title:"分页列表",description:"读取 page/pageSize,返回数据和分页信息。",build:e=>us(e)},{id:"detail",title:"详情查询",description:"按主键读取单条数据。",build:e=>ds(e)},{id:"create-read",title:"创建后读取",description:"创建记录后读取完整数据返回。",build:e=>cs(e)},{id:"update-read",title:"更新后读取",description:"更新记录后读取最新数据返回。",build:e=>ps(e)},{id:"delete",title:"删除接口",description:"按主键删除并返回影响行数。",build:e=>({uuid:`delete_${e.table}_by_${e.idField}`,alias:`删除 ${e.table}`,method:"POST",request:{body:[R(e.idField)]},blocks:[{...I("delete","delete_record","删除记录"),inputs:{datasource:e.datasource,table:e.table,conditions:[E(e.idField,_(`request.body.${e.idField}`))]}}],response:{affected:_("blocks['delete_record'].outputs.affected")}})},{id:"count",title:"统计接口",description:"统计表数据总数。",build:e=>({uuid:`count_${e.table}`,alias:`统计 ${e.table}`,method:"GET",blocks:[{...I("count","count_records","统计数量"),inputs:{datasource:e.datasource,table:e.table,conditions:[]}}],response:{total:_("blocks['count_records'].outputs.total")}})}];function se(e){return ve.find(n=>n.functionName===e)}function He(e){return rt.find(n=>n.name===e)}function Ue(e){var n;return((n=se(e))==null?void 0:n.outputs)??[]}function F(e){return typeof e=="string"?e:e.key}function X(e){return typeof e=="string"?e:e.processor}function I(e,n,o){const l=se(e);return{uuid:n||`${e}_${at()}`,alias:o||(l==null?void 0:l.title),functionName:e,inputs:M((l==null?void 0:l.defaultInputs())??{}),outputs:((l==null?void 0:l.outputs)??[]).map(d=>d)}}function je(){return{uuid:`api_${at()}`,alias:"未命名 API",method:"GET",request:{header:[],query:[],body:[]},blocks:[],response:null}}function _(e){return{template:`{{${e}}}`}}function R(e,n=["is_not_null"]){return{key:e,processors:n}}function E(e="id",n=""){return{group:!1,fieldName:e,fieldValue:n,conditionType:"EQ"}}function we(e={}){var n,o,l;return{datasource:((n=e.datasource)==null?void 0:n.trim())||"Mokelay",table:((o=e.table)==null?void 0:o.trim())||"users",idField:((l=e.idField)==null?void 0:l.trim())||"id",requestFields:Xe(e.requestFields,["name","email"]),returnFields:Xe(e.returnFields,["id","name","email"])}}function M(e){return JSON.parse(JSON.stringify(e))}function Xe(e,n){if(!Array.isArray(e))return n;const o=e.filter(l=>typeof l=="string").map(l=>l.trim()).filter(Boolean);return o.length?Array.from(new Set(o)):n}function at(){return Math.random().toString(36).slice(2,8)}function is(e){const n=Ve(e.returnFields,"blocks['read_record'].outputs.data");return{uuid:`register_${e.table}`,alias:`${e.table} 注册接口`,method:"POST",request:{body:[R("name",["trim","is_not_null",{processor:"max",param:[128]}]),R("email",["trim","is_not_null","email_check",{processor:"max",param:[255]}]),R("password",["is_not_null",{processor:"min",param:[8]},{processor:"max",param:[128]}])]},blocks:[{...I("count","check_duplicate","校验邮箱重复"),inputs:{datasource:e.datasource,table:e.table,conditions:[E("email",_("request.body.email"))]},outputs:[{key:"total",processors:[{processor:"eq",param:[0]}]}]},{...I("create","create_record","创建用户"),inputs:{datasource:e.datasource,table:e.table,idField:e.idField,fields:{name:_("request.body.name"),email:_("request.body.email"),password_hash:{template:"{{request.body.password}}",processors:["hash_make"]}}}},{...I("read","read_record","读取新用户"),inputs:{datasource:e.datasource,table:e.table,fields:e.returnFields,conditions:[E(e.idField,_("blocks['create_record'].outputs.uuid"))]}},{...I("addSession","set_user_session","写入用户 Session"),inputs:{key:"user",value:_("blocks['read_record'].outputs.data")}}],response:{user:n}}}function ls(e){return{uuid:`login_${e.table}`,alias:`${e.table} 登录接口`,method:"POST",request:{body:[R("email",["trim","is_not_null","email_check",{processor:"max",param:[255]}]),R("password",["is_not_null"])]},blocks:[{...I("read","read_user","按邮箱读取用户"),inputs:{datasource:e.datasource,table:e.table,fields:Array.from(new Set([...e.returnFields,"password_hash"])),conditions:[E("email",_("request.body.email"))]},outputs:[{key:"data",processors:["is_not_null"]}]},{...I("addSession","set_user_session","校验密码并写入 Session"),inputs:{key:"user",password_check:{template:"{{blocks['read_user'].outputs.data.password_hash}}",processors:[{processor:"hash_check",param:[_("request.body.password")]}]},value:Ve(e.returnFields,"blocks['read_user'].outputs.data")}}],response:{user:Ve(e.returnFields,"blocks['read_user'].outputs.data")}}}function us(e){return{uuid:`page_${e.table}`,alias:`${e.table} 分页列表`,method:"GET",request:{query:["page","pageSize"]},blocks:[{...I("page","page_records","分页查询"),inputs:{datasource:e.datasource,table:e.table,fields:e.returnFields,page:_("request.query.page"),pageSize:_("request.query.pageSize"),orderBy:[{fieldName:e.idField,direction:"DESC"}]}}],response:{datas:_("blocks['page_records'].outputs.datas"),pagination:{page:_("blocks['page_records'].outputs.page"),pageSize:_("blocks['page_records'].outputs.pageSize"),total:_("blocks['page_records'].outputs.total"),totalPages:_("blocks['page_records'].outputs.totalPages"),hasPreviousPage:_("blocks['page_records'].outputs.hasPreviousPage"),hasNextPage:_("blocks['page_records'].outputs.hasNextPage")}}}}function ds(e){return{uuid:`read_${e.table}_by_${e.idField}`,alias:`${e.table} 详情查询`,method:"GET",request:{query:[R(e.idField)]},blocks:[{...I("read","read_record","读取详情"),inputs:{datasource:e.datasource,table:e.table,fields:e.returnFields,conditions:[E(e.idField,_(`request.query.${e.idField}`))]}}],response:{data:_("blocks['read_record'].outputs.data")}}}function cs(e){return{uuid:`create_${e.table}`,alias:`创建 ${e.table}`,method:"POST",request:{body:e.requestFields.map(n=>R(n))},blocks:[{...I("create","create_record","创建记录"),inputs:{datasource:e.datasource,table:e.table,idField:e.idField,fields:Object.fromEntries(e.requestFields.map(n=>[n,_(`request.body.${n}`)]))}},{...I("read","read_record","读取新记录"),inputs:{datasource:e.datasource,table:e.table,fields:e.returnFields,conditions:[E(e.idField,_("blocks['create_record'].outputs.uuid"))]}}],response:{uuid:_("blocks['create_record'].outputs.uuid"),data:_("blocks['read_record'].outputs.data")}}}function ps(e){return{uuid:`update_${e.table}_by_${e.idField}`,alias:`更新 ${e.table}`,method:"POST",request:{query:[R(e.idField)],body:e.requestFields.map(n=>R(n))},blocks:[{...I("update","update_record","更新记录"),inputs:{datasource:e.datasource,table:e.table,fields:Object.fromEntries(e.requestFields.map(n=>[n,_(`request.body.${n}`)])),conditions:[E(e.idField,_(`request.query.${e.idField}`))]}},{...I("read","read_record","读取最新记录"),inputs:{datasource:e.datasource,table:e.table,fields:e.returnFields,conditions:[E(e.idField,_(`request.query.${e.idField}`))]}}],response:{affected:_("blocks['update_record'].outputs.affected"),data:_("blocks['read_record'].outputs.data")}}}function Ve(e,n){return Object.fromEntries(e.map(o=>[o,_(`${n}.${o}`)]))}const fs=/^[A-Za-z0-9_-]{1,128}$/,bs=/^[A-Za-z_][A-Za-z0-9_]*$/,ms=new Set(["GET","POST"]),gs=new Set(["GE","GT","LE","LT","NEQ","EQ","NOTIN","IN"]),ys=new Set(["trim","is_not_null","is_null","not_null","email_check","number_check","eq","min","max","regex","hash_make","hash_check"]);function nt(e){var i,d,y;const n=[],o=(b,f,x)=>{n.push({id:`${b}_${n.length}_${x}`,severity:b,message:f,target:x})};(i=e.uuid)!=null&&i.trim()?fs.test(e.uuid)||o("error","API 标识只能包含字母、数字、下划线和连字符,长度 1-128。","api"):o("error","API 标识不能为空。","api"),ms.has(String(e.method).toUpperCase())||o("error","请求方法必须是 GET 或 POST。","api");for(const b of["header","query","body"]){const f=((d=e.request)==null?void 0:d[b])??[],x=new Set;f.forEach((u,A)=>{const N=F(u);N.trim()||o("error",`${b} 第 ${A+1} 个参数名不能为空。`,"request"),x.has(N)&&o("warning",`${b}.${N} 重复声明,建议只保留一个。`,"request"),x.add(N),ot(typeof u=="string"?[]:u.processors??[],o,"request")})}const l=new Set;for(const b of e.blocks??[]){const f=`block:${b.uuid}`;if((y=b.uuid)!=null&&y.trim()||o("error","Block UUID 不能为空。",f),l.has(b.uuid)&&o("error",`Block UUID ${b.uuid} 重复。`,f),l.add(b.uuid),!se(b.functionName)){o("error",`不支持的 Block 类型:${b.functionName}。`,f);continue}xs(b.outputs,b.functionName,o,f);const u=b.inputs??{};if(["list","page","count","read","delete","create","update"].includes(b.functionName)){const A=u.datasource;typeof A!="string"||!A.trim()?o("error","数据库 Block 必须选择数据源。",f):bs.test(A)||o("error","数据源只能包含字母、数字、下划线,且不能以数字开头。",f),(typeof u.table!="string"||!u.table.trim())&&o("error","数据库 Block 必须填写表名。",f)}["list","page","read"].includes(b.functionName)&&(!Array.isArray(u.fields)||!u.fields.length)&&o("error","查询字段不能为空。",f),b.functionName==="create"&&((typeof u.idField!="string"||!u.idField.trim())&&o("error","创建数据必须配置返回 ID 字段。",f),Ye(u.fields)||o("error","创建字段不能为空。",f)),b.functionName==="update"&&(Ye(u.fields)||o("error","更新字段不能为空。",f),(!Array.isArray(u.conditions)||!u.conditions.length)&&o("warning","更新没有条件,会更新整张表,本地发布前需要二次确认。",f)),b.functionName==="delete"&&(!Array.isArray(u.conditions)||!u.conditions.length)&&o("warning","删除没有条件,会删除整张表数据,本地发布前需要二次确认。",f),["list","page","count","read","delete","update"].includes(b.functionName)&&hs(u.conditions,o,f),["list","page"].includes(b.functionName)&&_s(u.orderBy,o,f),["addSession","removeSession","readSession"].includes(b.functionName)&&(typeof u.key!="string"||!u.key.trim())&&o("error","Session key 不能为空。",f),b.functionName==="addSession"&&!Object.prototype.hasOwnProperty.call(u,"value")&&o("error","写入 Session 必须配置 value。",f)}return ws(e,o),n}function ks(e){return e.some(n=>n.severity==="error")}function vs(e){return e.some(n=>n.severity==="warning"&&/整张表/.test(n.message))}function xs(e,n,o,l){if(!e)return;const i=Ue(n);for(const d of e){const y=F(d);i.includes(y)||o("error",`${n} 不支持输出 ${y}。`,l),typeof d!="string"&&ot(d.processors??[],o,l)}}function ot(e,n,o){for(const l of e){const i=X(l);ys.has(i)||n("error",`不支持的处理规则:${i}。`,o)}}function hs(e,n,o){if(e!==void 0){if(!Array.isArray(e)){n("error","conditions 必须是数组。",o);return}for(const l of e)it(l,n,o)}}function it(e,n,o){if(!re(e)){n("error","条件必须是对象。",o);return}if(e.group===!0){if(e.groupType!=="AND"&&e.groupType!=="OR"&&n("error","条件组必须选择 AND 或 OR。",o),!Array.isArray(e.groups)||!e.groups.length){n("error","条件组不能为空。",o);return}e.groups.forEach(l=>it(l,n,o));return}e.group!==!1&&n("error","普通条件 group 必须为 false。",o),(typeof e.fieldName!="string"||!e.fieldName.trim())&&n("error","条件字段不能为空。",o),gs.has(String(e.conditionType))||n("error","条件类型无效。",o),Object.prototype.hasOwnProperty.call(e,"fieldValue")||n("error","条件值不能为空。",o),(e.conditionType==="IN"||e.conditionType==="NOTIN")&&(!Array.isArray(e.fieldValue)||!e.fieldValue.length)&&n("error","IN / NOTIN 的条件值必须是非空数组。",o)}function _s(e,n,o){if(e!==void 0){if(!Array.isArray(e)){n("error","orderBy 必须是数组。",o);return}for(const l of e){if(!re(l)||typeof l.fieldName!="string"||!l.fieldName.trim()){n("error","排序字段不能为空。",o);continue}l.direction!==void 0&&l.direction!=="ASC"&&l.direction!=="DESC"&&n("error","排序方向只能是 ASC 或 DESC。",o)}}}function ws(e,n){var d,y,b;const o={header:new Set((((d=e.request)==null?void 0:d.header)??[]).map(F)),query:new Set((((y=e.request)==null?void 0:y.query)??[]).map(F)),body:new Set((((b=e.request)==null?void 0:b.body)??[]).map(F))},l=new Map;for(const f of e.blocks??[])l.set(f.uuid,new Set((f.outputs??Ue(f.functionName)).map(F)));const i=Ss(e);for(const f of i)for(const x of qs(f.value)){const u=x.match(/^(request\.)?(header|query|body)\.([A-Za-z0-9_.$[\]'-]+)/);if(u){const N=u[2],$=u[3].split(/[.[\]]/)[0];o[N].has($)||n("warning",`变量 ${x} 未在 request 中声明。`,f.target)}const A=x.match(/^blocks\['([^']+)'\]\.outputs\.([A-Za-z0-9_]+)/);if(A){const[,N,$]=A,j=l.get(N);j?j.has($)||n("warning",`步骤 ${N} 不声明输出 ${$}。`,f.target):n("warning",`变量引用了不存在的步骤:${N}。`,f.target)}}}function Ss(e,n="response"){const o=[],l=(i,d)=>{if(re(i)&&typeof i.template=="string"){o.push({value:i.template,target:d});return}if(Array.isArray(i)){i.forEach(y=>l(y,d));return}if(re(i))for(const y of Object.values(i))l(y,d)};return l(e,n),o}function qs(e){return Array.from(e.matchAll(/\{\{\s*([^}]+?)\s*\}\}/g),n=>n[1].trim())}function Ye(e){return re(e)&&Object.keys(e).length>0}function re(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}const $s=/^\s*\{\{\s*([^}]+?)\s*\}\}\s*$/,As=/\{\{\s*([^}]+?)\s*\}\}/g;function Re(e,n){return{header:De(e,"header",n),query:De(e,"query",n),body:De(e,"body",n)}}function Is(e,n){const o=[],l=nt(e);for(const f of l)f.severity==="error"&&o.push(f.message);const i=Re(e,n),d={request:i,header:i.header,query:i.query,body:i.body,now:new Date().toISOString(),blocks:{}},y=[];try{Ns(e,d)}catch(f){o.push(Be(f))}for(const f of e.blocks??[]){if(o.length){y.push({uuid:f.uuid,alias:f.alias||f.uuid,functionName:f.functionName,inputs:f.inputs??{},outputs:{},status:"skipped",message:"前置校验失败,已跳过。"});continue}try{const x=ae(f.inputs??{},d),u=Cs(f,x);d.blocks[f.uuid]={inputs:x,outputs:u},y.push({uuid:f.uuid,alias:f.alias||f.uuid,functionName:f.functionName,inputs:x,outputs:u,status:"success",message:"已模拟执行。"})}catch(x){const u=Be(x);o.push(u),d.blocks[f.uuid]={inputs:f.inputs??{},outputs:{}},y.push({uuid:f.uuid,alias:f.alias||f.uuid,functionName:f.functionName,inputs:f.inputs??{},outputs:{},status:"error",message:u})}}let b=null;if(!o.length)try{b=e.response==null?null:ae(e.response,d)}catch(f){o.push(Be(f))}return{ok:o.length===0,data:b,errors:o,request:i,logs:y,apiJson:e}}function De(e,n,o){var i,d;const l={};for(const y of((i=e.request)==null?void 0:i[n])??[]){const b=F(y);l[b]=((d=o==null?void 0:o[n])==null?void 0:d[b])??Fs(b)}return l}function Ns(e,n){var o;for(const l of["header","query","body"])for(const i of((o=e.request)==null?void 0:o[l])??[]){const d=F(i),y=n.request[l][d];if(typeof i=="string"){if(xe(y))throw new Error(`请填写 ${l}.${d}`);continue}n.request[l][d]=lt(y,i.processors??[],`${l}.${d}`,n)}}function Cs(e,n){const o=Array.isArray(n.fields)?n.fields.filter(i=>typeof i=="string"):["id","name"],l=Object.fromEntries(o.map(i=>[i,Ps(i)]));return e.functionName==="list"?{datas:[l,{...l,id:"mock_2"}]}:e.functionName==="page"?{datas:[l],total:1,totalPages:1,page:Number(n.page||1),pageSize:Number(n.pageSize||20),hasPreviousPage:!1,hasNextPage:!1}:e.functionName==="count"?{total:1}:e.functionName==="read"?{data:l}:e.functionName==="create"?{uuid:"mock_created_id"}:e.functionName==="update"||e.functionName==="delete"?{affected:1}:e.functionName==="readSession"?{value:{id:"mock_user",name:"Mock User",email:"mock@example.com"}}:{}}function ae(e,n){if(Array.isArray(e))return e.map(o=>ae(o,n));if(Ds(e)){const o=e.template.match($s),l=o?et(n,o[1].trim()):e.template.replace(As,(i,d)=>Os(et(n,String(d).trim())));return lt(l,e.processors??[],e.template,n)}return ze(e)?Object.fromEntries(Object.entries(e).map(([o,l])=>[o,ae(l,n)])):e}function et(e,n){const o=n.replace(/^request\./,"request.").replace(/^header\./,"request.header.").replace(/^query\./,"request.query.").replace(/^body\./,"request.body."),l=Ts(o);let i=e;for(const d of l){if(ze(i)&&d in i){i=i[d];continue}if(Array.isArray(i)&&/^\d+$/.test(d)){i=i[Number(d)];continue}throw new Error(`变量不存在:${n}`)}return i}function Ts(e){const n=[];let o="";for(let l=0;l<e.length;l+=1){const i=e[l];if(i==="."){o&&n.push(o),o="";continue}if(i==="["){o&&n.push(o),o="";const d=e.indexOf("]",l);if(d===-1)throw new Error(`变量路径无效:${e}`);const y=e.slice(l+1,d).trim();n.push(y.replace(/^['"]|['"]$/g,"")),l=d;continue}o+=i}return o&&n.push(o),n}function lt(e,n,o,l){let i=e;for(const d of n){const y=X(d);if(y==="trim"&&typeof i=="string")i=i.trim();else if(y==="is_not_null"){if(xe(i))throw new Error(`请填写 ${o}`)}else if(y==="is_null"){if(!xe(i))throw new Error(`${o} 必须为空`)}else if(y==="not_null")i=!xe(i);else if(y==="email_check"){if(typeof i!="string"||!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(i))throw new Error(`${o} 需要是邮箱格式`)}else if(y==="number_check"){if(!Number.isFinite(Number(i)))throw new Error(`${o} 需要是数字`)}else if(y==="min"){const b=Number(me(d,l)[0]);if((typeof i=="string"||Array.isArray(i))&&i.length<b)throw new Error(`${o} 长度不能小于 ${b}`)}else if(y==="max"){const b=Number(me(d,l)[0]);if((typeof i=="string"||Array.isArray(i))&&i.length>b)throw new Error(`${o} 长度不能大于 ${b}`)}else if(y==="eq"){const b=me(d,l)[0];if(JSON.stringify(i)!==JSON.stringify(b))throw new Error(`${o} 必须等于 ${JSON.stringify(b)}`)}else if(y==="regex"){const b=String(me(d,l)[0]??"");if(typeof i!="string"||!new RegExp(b.replace(/^\/|\/[a-z]*$/g,"")).test(i))throw new Error(`${o} 不符合正则规则`)}else y==="hash_make"?i=`mock_hash(${String(i)})`:y==="hash_check"&&(i=!0)}return i}function me(e,n){if(typeof e=="string"||e.param===void 0)return[];const o=ae(e.param,n);return Array.isArray(o)?o:[o]}function Fs(e){const n=e.toLowerCase();return n.includes("email")?"mock@example.com":n.includes("password")?"password123":n.includes("pageSize".toLowerCase())?"20":n==="page"?"1":n.endsWith("id")||n.includes("uuid")?"mock_id":n.includes("blocks")?[]:`mock_${e}`}function Ps(e){const n=e.toLowerCase();return n.includes("email")?"mock@example.com":n.includes("created")||n.includes("updated")?new Date().toISOString():n.endsWith("id")||n==="uuid"?"mock_id":n.includes("blocks")?[]:n.includes("total")?1:`mock_${e}`}function Os(e){return e==null?"":typeof e=="string"?e:JSON.stringify(e)}function Ds(e){return ze(e)&&typeof e.template=="string"}function xe(e){return e==null||e===""}function Be(e){return e instanceof Error?e.message:"测试执行失败"}function ze(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}const Bs=we({datasource:"Mokelay",table:"users",idField:"id",requestFields:["name","email"],returnFields:["id","name","email","plan"]}),ge=we({datasource:"Mokelay",table:"pages",idField:"uuid",requestFields:["name","blocks"],returnFields:["uuid","name","blocks","created_at","updated_at"]}),tt=we({datasource:"BingX",table:"wallets",idField:"id",requestFields:["chain_id","address","label","wallet_type"],returnFields:["id","chain_id","address","label","wallet_type","created_at","updated_at"]});function V(e,n=Bs){const o=Je.find(l=>l.id===e);if(!o)throw new Error(`Missing template: ${e}`);return o.build(n)}const Es=[{id:"login",title:"登录接口",description:"读取用户、校验密码、写入 Session。",apiJson:V("login")},{id:"register",title:"注册接口",description:"校验重复邮箱、创建用户、写入 Session。",apiJson:V("register")},{id:"me",title:"当前用户",description:"读取 Session 并返回 loggedIn。",apiJson:V("me")},{id:"logout",title:"退出登录",description:"清除 Session 并返回 success。",apiJson:V("logout")},{id:"list-pages",title:"页面分页",description:"分页查询 pages 并返回 pagination。",apiJson:V("page",ge)},{id:"read-page",title:"页面详情",description:"按 uuid 查询单个页面。",apiJson:V("detail",ge)},{id:"create-page",title:"创建页面",description:"创建记录后读取完整数据。",apiJson:V("create-read",ge)},{id:"update-page",title:"更新页面",description:"更新 blocks 后读取最新页面。",apiJson:V("update-read",ge)},{id:"delete-wallet",title:"删除钱包",description:"按 id 删除钱包并返回 affected。",apiJson:V("delete",tt)},{id:"count-wallets",title:"统计钱包",description:"统计 BingX wallets 记录数量。",apiJson:V("count",tt)}],ut="mokelay-api-builder-drafts",dt="mokelay-api-builder-active-draft";function ne(e=je()){const n=new Date().toISOString(),o=Se(e);return{id:o.uuid||`api_${Q()}`,apiJson:o,status:"draft",disabledBlockIds:[],versions:[],testCases:[],createdAt:n,updatedAt:n}}function Js(e){const n=M(e.apiJson),o=Q();n.uuid=`${n.uuid||"api"}_copy_${o}`,n.alias=`${n.alias||"未命名 API"} 副本`;const l=ne(n);return l.disabledBlockIds=[...e.disabledBlockIds],l}function Se(e){return U(e)?{uuid:O(e.uuid)||`api_${Q()}`,alias:O(e.alias)||"未命名 API",method:O(e.method).toUpperCase()==="POST"?"POST":"GET",request:Gs(e.request),blocks:Array.isArray(e.blocks)?e.blocks.map(n=>Ws(n)):[],response:U(e.response)?M(e.response):(e.response===null,null)}:je()}function he(e){const n=M(Se(e.apiJson)),o=new Set(e.disabledBlockIds);return n.blocks=(n.blocks??[]).filter(l=>!o.has(l.uuid)),n}function Vs(){if(typeof localStorage>"u")return[];try{const e=localStorage.getItem(ut),n=e?JSON.parse(e):[];return Array.isArray(n)?n.map(o=>Ms(o)):[]}catch{return[]}}function Rs(e){typeof localStorage>"u"||localStorage.setItem(ut,JSON.stringify(e))}function Us(){return typeof localStorage>"u"?"":localStorage.getItem(dt)||""}function Ee(e){typeof localStorage>"u"||localStorage.setItem(dt,e)}function ye(e,n){const o={...n,updatedAt:new Date().toISOString()},l=e.findIndex(d=>d.id===n.id);if(l===-1)return[o,...e];const i=[...e];return i[l]=o,i}function ct(e,n="本地版本"){return{id:`version_${Q()}`,label:n,apiJson:he(e),disabledBlockIds:[...e.disabledBlockIds],createdAt:new Date().toISOString()}}function st(e,n){e.versions=[ct(e,n),...e.versions].slice(0,20),e.updatedAt=new Date().toISOString()}function js(e,n){e.testCases=[n,...e.testCases].slice(0,20),e.updatedAt=new Date().toISOString()}function zs(e,n){e.apiJson=M(n.apiJson),e.disabledBlockIds=[...n.disabledBlockIds],e.status="draft",e.updatedAt=new Date().toISOString()}function Ms(e){if(!U(e))return ne();const n=Se(e.apiJson),o=new Date().toISOString();return{id:O(e.id)||n.uuid||`api_${Q()}`,apiJson:n,status:e.status==="published"?"published":"draft",disabledBlockIds:pt(e.disabledBlockIds),versions:Array.isArray(e.versions)?e.versions.map(l=>Ls(l)):[],testCases:Array.isArray(e.testCases)?e.testCases.filter(U):[],createdAt:O(e.createdAt)||o,updatedAt:O(e.updatedAt)||o}}function Ls(e){return U(e)?{id:O(e.id)||`version_${Q()}`,label:O(e.label)||"本地版本",apiJson:Se(e.apiJson),disabledBlockIds:pt(e.disabledBlockIds),createdAt:O(e.createdAt)||new Date().toISOString()}:ct(ne(),"空版本")}function Gs(e){return U(e)?{header:_e(e.header),query:_e(e.query),body:_e(e.body)}:{header:[],query:[],body:[]}}function _e(e){return Array.isArray(e)?e.map(n=>{if(typeof n=="string")return n;if(!U(n))return;const o=O(n.key);if(o)return{key:o,processors:Qs(n.processors)}}).filter(n=>!!n):[]}function Qs(e){return Array.isArray(e)?e.map(n=>{if(typeof n=="string"&&n.trim())return n.trim();if(!U(n))return;const o=O(n.processor);if(o)return{processor:o,...Object.prototype.hasOwnProperty.call(n,"param")?{param:Zs(n.param)}:{}}}).filter(n=>!!n):[]}function Ws(e){return U(e)?{uuid:O(e.uuid)||`block_${Q()}`,alias:O(e.alias)||void 0,functionName:O(e.functionName)||"read",inputs:U(e.inputs)?M(e.inputs):{},outputs:Array.isArray(e.outputs)?_e(e.outputs):e.outputs===null?null:void 0}:{uuid:`block_${Q()}`,functionName:"read",inputs:{},outputs:[]}}function pt(e){return Array.isArray(e)?e.filter(n=>typeof n=="string"):[]}function O(e){return typeof e=="string"?e:""}function Zs(e){return e===void 0?e:M(e)}function U(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Q(){return Math.random().toString(36).slice(2,10)}function Ks(e,n){var l,i;const o=[];for(const d of["header","query","body"])for(const y of((l=e.request)==null?void 0:l[d])??[]){const b=F(y);o.push({id:`request-${d}-${b}`,label:`请求 ${d}.${b}`,path:`request.${d}.${b}`,source:"request"})}for(const d of e.blocks??[]){if(n&&d.uuid===n)break;const y=(i=d.outputs)!=null&&i.length?d.outputs.map(F):Ue(d.functionName);for(const b of y)o.push({id:`block-${d.uuid}-${b}`,label:`${d.alias||d.uuid}.${b}`,path:`blocks['${d.uuid}'].outputs.${b}`,source:"block"}),b==="data"&&o.push({id:`block-${d.uuid}-${b}-field`,label:`${d.alias||d.uuid}.data.字段`,path:`blocks['${d.uuid}'].outputs.data.id`,source:"block"})}return o.push({id:"system-now",label:"系统时间 now",path:"now",source:"system"}),o}function ke(e){return{template:`{{${e}}}`}}const Hs={"data-testid":"api-builder-shell",class:"flex min-h-[calc(100vh-112px)] flex-1 flex-col gap-4"},Xs={key:0,class:"grid gap-4 xl:grid-cols-[minmax(0,1fr)_360px]"},Ys={class:"rounded-xl border border-slate-200 bg-white p-4 shadow-sm dark:border-slate-700 dark:bg-slate-900"},er={class:"mt-6 overflow-hidden rounded-lg border border-slate-200 dark:border-slate-700"},tr={class:"min-w-full divide-y divide-slate-200 text-sm dark:divide-slate-700"},sr={class:"divide-y divide-slate-200 dark:divide-slate-700"},rr={key:0},ar={class:"px-4 py-3 font-medium text-slate-900 dark:text-white"},nr={class:"px-4 py-3 font-mono text-xs text-slate-500 dark:text-slate-400"},or={class:"px-4 py-3"},ir={class:"rounded-md bg-sky-100 px-2 py-1 text-xs font-semibold text-sky-800 dark:bg-sky-500/20 dark:text-sky-100"},lr={class:"px-4 py-3"},ur={class:"px-4 py-3 text-slate-500 dark:text-slate-400"},dr={class:"px-4 py-3 text-right"},cr=["onClick"],pr=["onClick"],fr={class:"space-y-4"},br={class:"rounded-xl border border-slate-200 bg-white p-4 shadow-sm dark:border-slate-700 dark:bg-slate-900"},mr={class:"mt-3 space-y-3"},gr=["value"],yr={class:"grid grid-cols-2 gap-2"},kr={class:"rounded-xl border border-slate-200 bg-white p-4 shadow-sm dark:border-slate-700 dark:bg-slate-900"},vr={class:"mt-3 grid gap-2"},xr=["onClick"],hr={class:"block text-sm font-semibold text-slate-900 dark:text-white"},_r={class:"mt-1 block text-xs leading-5 text-slate-500 dark:text-slate-400"},wr={key:1,class:"flex flex-1 flex-col gap-4"},Sr={class:"rounded-xl border border-slate-200 bg-white p-4 shadow-sm dark:border-slate-700 dark:bg-slate-900"},qr={class:"flex flex-wrap items-center justify-between gap-3"},$r={class:"flex flex-wrap items-center gap-3"},Ar={class:"text-xl font-semibold text-slate-950 dark:text-white"},Ir={class:"rounded-md bg-sky-100 px-2 py-1 text-xs font-semibold text-sky-800 dark:bg-sky-500/20 dark:text-sky-100"},Nr={class:"rounded bg-slate-100 px-2 py-1 text-xs text-slate-600 dark:bg-slate-800 dark:text-slate-300"},Cr={class:"grid min-h-[660px] flex-1 gap-4 xl:grid-cols-[280px_minmax(0,1fr)_380px]"},Tr={class:"space-y-4 rounded-xl border border-slate-200 bg-white p-4 shadow-sm dark:border-slate-700 dark:bg-slate-900"},Fr={class:"grid grid-cols-3 gap-2"},Pr={class:"mt-2 grid gap-2"},Or=["onClick"],Dr={class:"mt-2 grid gap-2"},Br=["onClick"],Er={class:"mt-2 grid gap-2"},Jr=["onClick"],Vr={class:"rounded-xl border border-slate-200 bg-white p-4 shadow-sm dark:border-slate-700 dark:bg-slate-900"},Rr={class:"flex items-center justify-between gap-3"},Ur={class:"flex items-center gap-2 text-xs"},jr={class:"rounded-md bg-rose-100 px-2 py-1 font-semibold text-rose-700 dark:bg-rose-500/20 dark:text-rose-100"},zr={class:"rounded-md bg-amber-100 px-2 py-1 font-semibold text-amber-700 dark:bg-amber-500/20 dark:text-amber-100"},Mr={class:"mt-4 space-y-3"},Lr=["data-block-uuid","onClick","onDragstart","onDrop"],Gr={class:"flex flex-wrap items-start justify-between gap-3"},Qr={class:"min-w-0"},Wr={class:"flex flex-wrap items-center gap-2"},Zr={class:"flex h-7 w-7 items-center justify-center rounded-full bg-slate-900 text-xs font-bold text-white dark:bg-white dark:text-slate-950"},Kr={class:"font-semibold text-slate-950 dark:text-white"},Hr={class:"rounded-md bg-white px-2 py-1 text-xs font-semibold text-slate-600 ring-1 ring-slate-200 dark:bg-slate-900 dark:text-slate-300 dark:ring-slate-700"},Xr={key:0,class:"rounded-md bg-slate-200 px-2 py-1 text-xs font-semibold text-slate-600 dark:bg-slate-700 dark:text-slate-300"},Yr={class:"mt-2 text-sm text-slate-500 dark:text-slate-400"},ea={class:"flex flex-wrap gap-1"},ta=["onClick"],sa=["onClick"],ra=["onClick"],aa={class:"mt-3 grid gap-2 text-xs sm:grid-cols-3"},na={class:"rounded-lg bg-white p-2 text-slate-600 dark:bg-slate-900 dark:text-slate-300"},oa={class:"rounded-lg bg-white p-2 text-slate-600 dark:bg-slate-900 dark:text-slate-300"},ia={class:"rounded-lg bg-white p-2 text-slate-600 dark:bg-slate-900 dark:text-slate-300"},la={class:"rounded-xl border border-slate-200 bg-white p-4 shadow-sm dark:border-slate-700 dark:bg-slate-900"},ua={class:"mt-4 space-y-3"},da={class:"builder-field"},ca={class:"builder-field"},pa={class:"builder-field"},fa={class:"rounded-lg bg-slate-50 p-3 text-sm text-slate-600 dark:bg-slate-800 dark:text-slate-300"},ba={class:"mt-4 space-y-5"},ma={class:"mb-2 flex items-center justify-between"},ga={class:"text-sm font-semibold text-slate-900 dark:text-white"},ya=["onClick"],ka={class:"space-y-2"},va={class:"grid gap-2 sm:grid-cols-[minmax(0,1fr)_auto]"},xa=["value","onInput"],ha={class:"flex items-center gap-2 text-sm text-slate-600 dark:text-slate-300"},_a=["checked","onChange"],wa={class:"mt-2 flex flex-wrap gap-2"},Sa=["onClick"],qa=["onChange"],$a=["value"],Aa=["onClick"],Ia={class:"mt-4 space-y-3"},Na=["value","onInput"],Ca={class:"mt-2 grid gap-2"},Ta=["value","onInput"],Fa=["onChange"],Pa=["value"],Oa=["onClick"],Da={class:"mt-4 space-y-3"},Ba={class:"builder-field"},Ea={class:"builder-field"},Ja={class:"builder-field"},Va=["value"],Ra={class:"builder-field"},Ua=["value"],ja={class:"builder-field"},za=["value"],Ma={key:1,class:"builder-field"},La=["value"],Ga={key:2,class:"grid grid-cols-2 gap-2"},Qa={class:"builder-field"},Wa=["value"],Za={class:"builder-field"},Ka=["value"],Ha={key:3,class:"builder-field"},Xa=["value"],Ya={key:4},en={class:"space-y-2"},tn=["value","onInput"],sn=["value","onInput"],rn=["onChange"],an=["value"],nn=["onClick"],on={key:5},ln={class:"space-y-2"},un={class:"grid gap-2 sm:grid-cols-2"},dn=["onUpdate:modelValue"],cn=["onUpdate:modelValue"],pn=["value"],fn=["value","onInput"],bn=["onChange"],mn=["value"],gn={class:"flex items-center justify-between gap-2"},yn=["onUpdate:modelValue"],kn={class:"text-xs text-slate-500"},vn=["value","onInput"],xn=["onClick"],hn={key:6},_n={class:"space-y-2"},wn=["onUpdate:modelValue"],Sn=["onUpdate:modelValue"],qn=["onClick"],$n={key:7,class:"builder-field"},An=["value"],In={class:"builder-field"},Nn=["value"],Cn=["value"],Tn={class:"rounded-xl border border-slate-200 bg-white shadow-sm dark:border-slate-700 dark:bg-slate-900"},Fn={class:"flex flex-wrap gap-2 border-b border-slate-200 p-3 dark:border-slate-700"},Pn={class:"p-4"},On={key:0},Dn={"data-testid":"api-builder-json",class:"max-h-[420px] overflow-auto rounded-lg bg-slate-950 p-4 text-xs leading-5 text-slate-100"},Bn={key:1,class:"space-y-2"},En={key:0,class:"rounded-lg bg-emerald-50 p-3 text-sm text-emerald-800 dark:bg-emerald-500/10 dark:text-emerald-100"},Jn=["onClick"],Vn={key:2,class:"grid gap-4 xl:grid-cols-[360px_minmax(0,1fr)]"},Rn={class:"space-y-4"},Un={class:"mb-2 text-sm font-semibold text-slate-900 dark:text-white"},jn={class:"space-y-2"},zn=["value","onInput"],Mn={key:0,class:"text-xs text-slate-500 dark:text-slate-400"},Ln={key:0,class:"rounded-lg bg-slate-50 p-4 text-sm text-slate-500 dark:bg-slate-800 dark:text-slate-400"},Gn={key:1,class:"space-y-3"},Qn={class:"grid gap-3 lg:grid-cols-2"},Wn={class:"max-h-72 overflow-auto rounded-lg bg-slate-950 p-3 text-xs text-slate-100"},Zn={class:"space-y-2"},Kn={class:"flex items-center justify-between gap-2"},Hn={class:"text-slate-900 dark:text-white"},Xn={class:"mt-1 text-xs text-slate-500"},Yn={key:3,class:"space-y-2"},eo={key:0,class:"rounded-lg bg-slate-50 p-3 text-sm text-slate-500 dark:bg-slate-800 dark:text-slate-400"},to={class:"text-sm font-semibold text-slate-900 dark:text-white"},so={class:"text-xs text-slate-500"},ro=["onClick"],ao={key:2,class:"rounded-xl border border-slate-200 bg-white p-8 text-center shadow-sm dark:border-slate-700 dark:bg-slate-900"},no=ss({__name:"ApiBuilderShell",props:{routeUuid:{default:null}},setup(e){const n=e,o=K(Vs()),l=K(n.routeUuid||Us()),i=K({type:"api"}),d=K("json"),y=K(""),b=K({header:{},query:{},body:{}}),f=K(null),x=rs({selectedTemplateId:"page",datasource:"Mokelay",table:"users",idField:"id",requestFields:"name,email",returnFields:"id,name,email,created_at"}),u=G(()=>o.value.find(r=>r.id===l.value)??null),A=G(()=>u.value?he(u.value):null),N=G(()=>A.value?nt(A.value):[]),$=G(()=>{var t;const r=i.value;return!u.value||r.type!=="block"?null:((t=u.value.apiJson.blocks)==null?void 0:t.find(k=>k.uuid===r.uuid))??null}),j=G(()=>{if(!u.value)return[];const r=i.value.type==="block"?i.value.uuid:void 0;return Ks(u.value.apiJson,r)}),Me=G(()=>[...o.value].sort((r,t)=>t.updatedAt.localeCompare(r.updatedAt))),ft=G(()=>!!n.routeUuid),qe=G(()=>({query:ve.filter(r=>r.group==="query"),write:ve.filter(r=>r.group==="write"),session:ve.filter(r=>r.group==="session")}));Oe(()=>n.routeUuid,r=>{r&&(l.value=r,Ee(r),i.value={type:"api"})},{immediate:!0}),Oe(o,r=>{Rs(r)},{deep:!0}),Oe(u,r=>{if(!r){f.value=null;return}b.value=Re(he(r),b.value),Ee(r.id)},{immediate:!0});function $e(){window.location.hash="/apis"}function oe(r){l.value=r.id,Ee(r.id),window.location.hash=`/apis/${encodeURIComponent(r.id)}`}function bt(){const r=ne(je());o.value=ye(o.value,r),oe(r)}function Le(r){const t=ne(r);o.value=ye(o.value,t),oe(t)}function mt(r=x.selectedTemplateId){const t=Je.find(w=>w.id===r);if(!t)return;const k=we({datasource:x.datasource,table:x.table,idField:x.idField,requestFields:Pe(x.requestFields),returnFields:Pe(x.returnFields)});Le(t.build(k))}function gt(){if(!u.value)return;const r=Js(u.value);o.value=ye(o.value,r),oe(r)}function yt(r){window.confirm(`删除本地草稿「${r.apiJson.alias||r.apiJson.uuid}」?`)&&(o.value=o.value.filter(t=>t.id!==r.id),l.value===r.id&&(l.value="",$e()))}function Ge(){u.value&&(o.value=ye(o.value,u.value))}function kt(){if(!u.value)return;const r=N.value;if(ks(r)){d.value="validation";return}vs(r)&&!window.confirm("存在会影响整张表的高风险操作,仍然本地发布?")||(st(u.value,"本地发布快照"),u.value.status="published",Ge())}function ie(r){if(!u.value)return;const t=I(r);u.value.apiJson.blocks=[...u.value.apiJson.blocks??[],t],i.value={type:"block",uuid:t.uuid},as(()=>{var k;(k=document.querySelector(`[data-block-uuid="${t.uuid}"]`))==null||k.scrollIntoView({block:"center",behavior:"smooth"})})}function vt(r){if(!u.value)return;const t=M(r);t.uuid=`${r.uuid}_copy`,t.alias=`${r.alias||r.uuid} 副本`;const k=u.value.apiJson.blocks??[],w=k.findIndex(a=>a.uuid===r.uuid);k.splice(w+1,0,t),i.value={type:"block",uuid:t.uuid}}function xt(r){u.value&&(u.value.apiJson.blocks=(u.value.apiJson.blocks??[]).filter(t=>t.uuid!==r.uuid),u.value.disabledBlockIds=u.value.disabledBlockIds.filter(t=>t!==r.uuid),i.value={type:"api"})}function ht(r){if(!u.value)return;const t=new Set(u.value.disabledBlockIds);t.has(r.uuid)?t.delete(r.uuid):t.add(r.uuid),u.value.disabledBlockIds=Array.from(t)}function Ae(r){var t;return((t=u.value)==null?void 0:t.disabledBlockIds.includes(r.uuid))??!1}function _t(r){y.value=r.uuid}function wt(r){if(!u.value||!y.value||y.value===r.uuid)return;const t=u.value.apiJson.blocks??[],k=t.findIndex(v=>v.uuid===y.value),w=t.findIndex(v=>v.uuid===r.uuid);if(k===-1||w===-1)return;const[a]=t.splice(k,1);t.splice(w,0,a),y.value=""}function St(r){i.value={type:"block",uuid:r.uuid}}function Qe(r){return N.value.filter(t=>t.severity===r).length}function qt(r){if(r.target==="api"||r.target==="request"||r.target==="response"){i.value={type:r.target};return}i.value={type:"block",uuid:r.target.replace(/^block:/,"")}}function L(r){if(!u.value)return[];const t=Ot();return t[r]??(t[r]=[]),t[r]}function $t(r){L(r).push({key:r==="query"?"id":"name",processors:r==="body"?["is_not_null"]:[]})}function At(r,t){L(r).splice(t,1)}function It(r,t,k){const w=L(r),a=w[t];if(typeof a=="string"){w[t]=k;return}a.key=k}function Ie(r,t,k){const w=L(r),a=w[t];if(typeof a=="string"){w[t]={key:a,processors:k};return}a.processors=k}function Nt(r,t){const k=Y(L(r)[t]),a=k.map(X).includes("is_not_null")?k.filter(v=>X(v)!=="is_not_null"):["is_not_null",...k];Ie(r,t,a)}function Ct(r,t,k){if(!k)return;const w=He(k),a=w!=null&&w.needsParam?{processor:k,param:M(w.defaultParam??[])}:k;Ie(r,t,[...Y(L(r)[t]),a])}function Tt(r,t,k){const w=Y(L(r)[t]);w.splice(k,1),Ie(r,t,w)}function Ft(r){return typeof r=="string"?r:r.key}function Y(r){return typeof r=="string"?[]:[...r.processors??[]]}function Pt(r){return typeof r=="string"||Y(r).some(t=>X(t)==="is_not_null")}function Ot(){var r;if(!u.value)throw new Error("No active draft");return(r=u.value.apiJson).request??(r.request={}),u.value.apiJson.request}function J(r=$.value){return r?(r.inputs??(r.inputs={}),r.inputs):{}}function z(r,t){$.value&&(J()[r]=t)}function le(r){const t=J()[r];return typeof t=="string"?t:""}function Dt(r){const t=J()[r];return Array.isArray(t)?t.filter(k=>typeof k=="string").join(", "):""}function Bt(r,t){z(r,Pe(t))}function Et(){const r=J().fields;return H(r)?Object.entries(r):[]}function Jt(){const r=Ce("fields");r.name=ke("request.body.name")}function Ne(r,t,k){const w=Ce("fields");delete w[r],w[t||r]=k}function Vt(r){const t=Ce("fields");delete t[r]}function Ce(r){const t=J();return H(t[r])||(t[r]={}),t[r]}function ue(){const r=J();return Array.isArray(r.conditions)||(r.conditions=[]),r.conditions}function Rt(){ue().push({group:!1,fieldName:"id",conditionType:"EQ",fieldValue:ke("request.query.id")})}function Ut(){ue().push({group:!0,groupType:"OR",groups:[{group:!1,fieldName:"plan",conditionType:"EQ",fieldValue:"free"},{group:!1,fieldName:"plan",conditionType:"EQ",fieldValue:"pro"}]})}function jt(r){ue().splice(r,1)}function zt(r,t){try{const k=JSON.parse(t);Array.isArray(k)&&(r.groups=k)}catch{}}function Te(){const r=J();return Array.isArray(r.orderBy)||(r.orderBy=[]),r.orderBy}function Mt(){Te().push({fieldName:"created_at",direction:"DESC"})}function Lt(r){Te().splice(r,1)}function Gt(){const r=de();return Object.entries(r)}function de(){return u.value?(H(u.value.apiJson.response)||(u.value.apiJson.response={}),u.value.apiJson.response):{}}function Qt(){const r=de();r.data=j.value[0]?ke(j.value[0].path):null}function Fe(r,t,k){const w=de();delete w[r],w[t||r]=k}function Wt(r){const t=de();delete t[r]}function ce(r,t){t&&r(ke(t))}function W(r){return r===void 0?"":H(r)&&typeof r.template=="string"?r.template:typeof r=="string"?r:JSON.stringify(r)}function Z(r){const t=r.trim();if(!t)return"";if(t.startsWith("{{")&&t.endsWith("}}"))return{template:t};try{return JSON.parse(t)}catch{return r}}function Zt(r){var k;const t=X(r);return((k=He(t))==null?void 0:k.title)??t}function pe(r){return JSON.stringify(r,null,2)}function Kt(){var r;A.value&&((r=navigator.clipboard)==null||r.writeText(pe(A.value)))}function Ht(){u.value&&(st(u.value,"手动快照"),d.value="versions")}function Xt(r){u.value&&window.confirm(`回滚到「${r.label}」?当前草稿会变为未发布。`)&&(zs(u.value,r),i.value={type:"api"})}function Yt(r,t,k){b.value={...b.value,[r]:{...b.value[r],[t]:Z(k)}}}function es(){if(!u.value)return;const r=he(u.value),t=Is(r,b.value);f.value=t,js(u.value,{id:`test_${Date.now()}`,name:t.ok?"Dry-run 通过":"Dry-run 失败",request:t.request,result:t,createdAt:new Date().toISOString()}),d.value="test"}function ts(){A.value&&(b.value=Re(A.value))}function Pe(r){return Array.isArray(r)?r.map(t=>t.trim()).filter(Boolean):r.split(",").map(t=>t.trim()).filter(Boolean)}function We(r){return r?new Intl.DateTimeFormat("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}).format(new Date(r)):""}function H(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}return(r,t)=>{var k,w;return c(),p("section",Hs,[ft.value?u.value&&A.value?(c(),p("div",wr,[s("section",Sr,[s("div",qr,[s("div",null,[s("button",{class:"mb-2 text-sm font-medium text-teal-700 hover:text-teal-500 dark:text-teal-300",onClick:$e},"返回 API 列表"),s("div",$r,[s("h2",Ar,g(u.value.apiJson.alias||"未命名 API"),1),s("span",Ir,g(u.value.apiJson.method),1),s("span",{class:D(["rounded-md px-2 py-1 text-xs font-semibold",u.value.status==="published"?"bg-emerald-100 text-emerald-800 dark:bg-emerald-500/20 dark:text-emerald-100":"bg-amber-100 text-amber-800 dark:bg-amber-500/20 dark:text-amber-100"])},g(u.value.status==="published"?"本地已发布":"草稿"),3),s("code",Nr,"/api/mokelay/"+g(u.value.apiJson.uuid),1)])]),s("div",{class:"flex flex-wrap gap-2"},[s("button",{class:"builder-secondary-button",onClick:gt},"复制 API"),s("button",{class:"builder-secondary-button",onClick:Ht},"保存快照"),s("button",{class:"builder-secondary-button",onClick:Ge},"保存本地"),s("button",{class:"rounded-lg bg-teal-600 px-3 py-2 text-sm font-semibold text-white hover:bg-teal-500",onClick:kt},"本地发布")])])]),s("div",Cr,[s("aside",Tr,[s("div",Fr,[s("button",{class:D(["builder-nav-button",{"builder-nav-button-active":i.value.type==="api"}]),onClick:t[7]||(t[7]=a=>i.value={type:"api"})},"入口",2),s("button",{class:D(["builder-nav-button",{"builder-nav-button-active":i.value.type==="request"}]),onClick:t[8]||(t[8]=a=>i.value={type:"request"})},"请求",2),s("button",{class:D(["builder-nav-button",{"builder-nav-button-active":i.value.type==="response"}]),onClick:t[9]||(t[9]=a=>i.value={type:"response"})},"响应",2)]),s("div",null,[t[35]||(t[35]=s("h3",{class:"text-sm font-semibold text-slate-900 dark:text-white"},"查询数据",-1)),s("div",Pr,[(c(!0),p(h,null,q(qe.value.query,a=>(c(),p("button",{key:a.functionName,class:"builder-palette-button",onClick:v=>ie(a.functionName)},[s("span",null,g(a.title),1),s("small",null,g(a.description),1)],8,Or))),128))])]),s("div",null,[t[36]||(t[36]=s("h3",{class:"text-sm font-semibold text-slate-900 dark:text-white"},"写入数据",-1)),s("div",Dr,[(c(!0),p(h,null,q(qe.value.write,a=>(c(),p("button",{key:a.functionName,class:"builder-palette-button",onClick:v=>ie(a.functionName)},[s("span",null,g(a.title),1),s("small",null,g(a.description),1)],8,Br))),128))])]),s("div",null,[t[37]||(t[37]=s("h3",{class:"text-sm font-semibold text-slate-900 dark:text-white"},"登录态",-1)),s("div",Er,[(c(!0),p(h,null,q(qe.value.session,a=>(c(),p("button",{key:a.functionName,class:"builder-palette-button",onClick:v=>ie(a.functionName)},[s("span",null,g(a.title),1),s("small",null,g(a.description),1)],8,Jr))),128))])])]),s("main",Vr,[s("div",Rr,[t[38]||(t[38]=s("div",null,[s("h3",{class:"text-base font-semibold text-slate-950 dark:text-white"},"编排步骤"),s("p",{class:"mt-1 text-sm text-slate-500 dark:text-slate-400"},"按顺序执行。拖动步骤卡片可以排序。")],-1)),s("div",Ur,[s("span",jr,g(Qe("error"))+" 错误",1),s("span",zr,g(Qe("warning"))+" 提醒",1)])]),s("div",Mr,[(k=u.value.apiJson.blocks)!=null&&k.length?C("",!0):(c(),p("button",{key:0,class:"w-full rounded-lg border border-dashed border-slate-300 px-4 py-5 text-sm font-medium text-slate-500 hover:border-teal-400 hover:bg-teal-50 dark:border-slate-700 dark:text-slate-400 dark:hover:border-teal-500 dark:hover:bg-teal-500/10",onClick:t[10]||(t[10]=a=>ie("read"))}," 添加第一个步骤 ")),(c(!0),p(h,null,q(u.value.apiJson.blocks,(a,v)=>{var m;return c(),p("article",{key:a.uuid,"data-block-uuid":a.uuid,draggable:"true",class:D(["rounded-xl border p-4 transition",[i.value.type==="block"&&i.value.uuid===a.uuid?"border-teal-400 bg-teal-50/70 dark:border-teal-400 dark:bg-teal-500/10":"border-slate-200 bg-slate-50 dark:border-slate-700 dark:bg-slate-800/50",Ae(a)?"opacity-55":""]]),onClick:S=>St(a),onDragstart:S=>_t(a),onDragover:t[11]||(t[11]=fe(()=>{},["prevent"])),onDrop:S=>wt(a)},[s("div",Gr,[s("div",Qr,[s("div",Wr,[s("span",Zr,g(v+1),1),s("h4",Kr,g(a.alias||((m=P(se)(a.functionName))==null?void 0:m.title)||a.functionName),1),s("span",Hr,g(a.functionName),1),Ae(a)?(c(),p("span",Xr,"已禁用")):C("",!0)]),s("p",Yr,g(a.uuid)+" · "+g((a.outputs||[]).map(P(F)).join(", ")||"无输出"),1)]),s("div",ea,[s("button",{class:"builder-icon-button",onClick:fe(S=>ht(a),["stop"])},g(Ae(a)?"启用":"禁用"),9,ta),s("button",{class:"builder-icon-button",onClick:fe(S=>vt(a),["stop"])},"复制",8,sa),s("button",{class:"builder-icon-button text-rose-700 dark:text-rose-200",onClick:fe(S=>xt(a),["stop"])},"删除",8,ra)])]),s("div",aa,[s("div",na,"数据源:"+g(H(a.inputs)&&a.inputs.datasource||"-"),1),s("div",oa,"表:"+g(H(a.inputs)&&a.inputs.table||"-"),1),s("div",ia,"输出:"+g((a.outputs||[]).map(P(F)).join(", ")||"-"),1)])],42,Lr)}),128))])]),s("aside",la,[i.value.type==="api"?(c(),p(h,{key:0},[t[44]||(t[44]=s("h3",{class:"text-base font-semibold text-slate-950 dark:text-white"},"接口入口",-1)),s("div",ua,[s("label",da,[t[39]||(t[39]=s("span",null,"接口名称",-1)),T(s("input",{"onUpdate:modelValue":t[12]||(t[12]=a=>u.value.apiJson.alias=a),class:"builder-input"},null,512),[[B,u.value.apiJson.alias]])]),s("label",ca,[t[40]||(t[40]=s("span",null,"API 标识",-1)),T(s("input",{"onUpdate:modelValue":t[13]||(t[13]=a=>u.value.apiJson.uuid=a),class:"builder-input font-mono"},null,512),[[B,u.value.apiJson.uuid]])]),s("label",pa,[t[42]||(t[42]=s("span",null,"请求方法",-1)),T(s("select",{"onUpdate:modelValue":t[14]||(t[14]=a=>u.value.apiJson.method=a),class:"builder-input"},[...t[41]||(t[41]=[s("option",{value:"GET"},"GET",-1),s("option",{value:"POST"},"POST",-1)])],512),[[te,u.value.apiJson.method]])]),s("div",fa,[t[43]||(t[43]=be(" 路径预览:",-1)),s("code",null,"/api/mokelay/"+g(u.value.apiJson.uuid),1)])])],64)):i.value.type==="request"?(c(),p(h,{key:1},[t[47]||(t[47]=s("h3",{class:"text-base font-semibold text-slate-950 dark:text-white"},"请求参数",-1)),s("div",ba,[(c(!0),p(h,null,q(P(Ke),a=>(c(),p("section",{key:a.value},[s("div",ma,[s("h4",ga,g(a.title),1),s("button",{class:"builder-small-button",onClick:v=>$t(a.value)},"添加参数",8,ya)]),s("div",ka,[(c(!0),p(h,null,q(L(a.value),(v,m)=>(c(),p("div",{key:`${a.value}-${m}`,class:"rounded-lg border border-slate-200 p-3 dark:border-slate-700"},[s("div",va,[s("input",{class:"builder-input",value:Ft(v),placeholder:"参数名",onInput:S=>It(a.value,m,S.target.value)},null,40,xa),s("label",ha,[s("input",{type:"checkbox",checked:Pt(v),onChange:S=>Nt(a.value,m)},null,40,_a),t[45]||(t[45]=be(" 必填 ",-1))])]),s("div",wa,[(c(!0),p(h,null,q(Y(v),(S,ee)=>(c(),p("span",{key:ee,class:"rounded-full bg-teal-100 px-2 py-1 text-xs font-semibold text-teal-800 dark:bg-teal-500/20 dark:text-teal-100"},[be(g(Zt(S))+" ",1),s("button",{class:"ml-1",onClick:Ze=>Tt(a.value,m,ee)},"×",8,Sa)]))),128)),s("select",{class:"rounded-md border border-slate-300 bg-white px-2 py-1 text-xs dark:border-slate-700 dark:bg-slate-950",onChange:S=>{Ct(a.value,m,S.target.value),S.target.value=""}},[t[46]||(t[46]=s("option",{value:""},"添加规则",-1)),(c(!0),p(h,null,q(P(rt),S=>(c(),p("option",{key:S.name,value:S.name},g(S.title),9,$a))),128))],40,qa),s("button",{class:"ml-auto text-xs text-rose-600",onClick:S=>At(a.value,m)},"删除",8,Aa)])]))),128))])]))),128))])],64)):i.value.type==="response"?(c(),p(h,{key:2},[t[49]||(t[49]=s("h3",{class:"text-base font-semibold text-slate-950 dark:text-white"},"响应组装",-1)),t[50]||(t[50]=s("p",{class:"mt-1 text-sm text-slate-500 dark:text-slate-400"},"把变量映射到响应 data 的字段。",-1)),s("div",Ia,[(c(!0),p(h,null,q(Gt(),([a,v])=>(c(),p("div",{key:a,class:"rounded-lg border border-slate-200 p-3 dark:border-slate-700"},[s("input",{class:"builder-input",value:a,onInput:m=>Fe(a,m.target.value,v)},null,40,Na),s("div",Ca,[s("input",{class:"builder-input font-mono text-xs",value:W(v),onInput:m=>Fe(a,a,Z(m.target.value))},null,40,Ta),s("select",{class:"builder-input",onChange:m=>{ce(S=>Fe(a,a,S),m.target.value),m.target.value=""}},[t[48]||(t[48]=s("option",{value:""},"从变量选择器填入",-1)),(c(!0),p(h,null,q(j.value,m=>(c(),p("option",{key:m.id,value:m.path},g(m.label)+" · "+g(m.path),9,Pa))),128))],40,Fa)]),s("button",{class:"mt-2 text-xs text-rose-600",onClick:m=>Wt(a)},"删除字段",8,Oa)]))),128)),s("button",{class:"builder-secondary-button w-full",onClick:Qt},"添加响应字段")])],64)):$.value?(c(),p(h,{key:3},[t[70]||(t[70]=s("h3",{class:"text-base font-semibold text-slate-950 dark:text-white"},"步骤配置",-1)),s("div",Da,[s("label",Ba,[t[51]||(t[51]=s("span",null,"业务名称",-1)),T(s("input",{"onUpdate:modelValue":t[15]||(t[15]=a=>$.value.alias=a),class:"builder-input"},null,512),[[B,$.value.alias]])]),s("label",Ea,[t[52]||(t[52]=s("span",null,"Block UUID",-1)),T(s("input",{"onUpdate:modelValue":t[16]||(t[16]=a=>$.value.uuid=a),class:"builder-input font-mono"},null,512),[[B,$.value.uuid]])]),s("label",Ja,[t[53]||(t[53]=s("span",null,"类型",-1)),s("input",{value:((w=P(se)($.value.functionName))==null?void 0:w.title)||$.value.functionName,class:"builder-input",disabled:""},null,8,Va)]),["list","page","count","read","delete","create","update"].includes($.value.functionName)?(c(),p(h,{key:0},[s("label",Ra,[t[54]||(t[54]=s("span",null,"数据源",-1)),s("input",{class:"builder-input",value:le("datasource"),onInput:t[17]||(t[17]=a=>z("datasource",a.target.value))},null,40,Ua)]),s("label",ja,[t[55]||(t[55]=s("span",null,"表名",-1)),s("input",{class:"builder-input",value:le("table"),onInput:t[18]||(t[18]=a=>z("table",a.target.value))},null,40,za)])],64)):C("",!0),["list","page","read"].includes($.value.functionName)?(c(),p("label",Ma,[t[56]||(t[56]=s("span",null,"查询字段",-1)),s("input",{class:"builder-input",value:Dt("fields"),placeholder:"id, name, email",onInput:t[19]||(t[19]=a=>Bt("fields",a.target.value))},null,40,La)])):C("",!0),$.value.functionName==="page"?(c(),p("div",Ga,[s("label",Qa,[t[57]||(t[57]=s("span",null,"页码",-1)),s("input",{class:"builder-input font-mono text-xs",value:W(J().page),onInput:t[20]||(t[20]=a=>z("page",Z(a.target.value)))},null,40,Wa)]),s("label",Za,[t[58]||(t[58]=s("span",null,"每页数量",-1)),s("input",{class:"builder-input font-mono text-xs",value:W(J().pageSize),onInput:t[21]||(t[21]=a=>z("pageSize",Z(a.target.value)))},null,40,Ka)])])):C("",!0),$.value.functionName==="create"?(c(),p("label",Ha,[t[59]||(t[59]=s("span",null,"返回 ID 字段",-1)),s("input",{class:"builder-input",value:le("idField"),onInput:t[22]||(t[22]=a=>z("idField",a.target.value))},null,40,Xa)])):C("",!0),["create","update"].includes($.value.functionName)?(c(),p("div",Ya,[s("div",{class:"mb-2 flex items-center justify-between"},[t[60]||(t[60]=s("h4",{class:"text-sm font-semibold text-slate-900 dark:text-white"},"写入字段",-1)),s("button",{class:"builder-small-button",onClick:Jt},"添加字段")]),s("div",en,[(c(!0),p(h,null,q(Et(),([a,v])=>(c(),p("div",{key:a,class:"rounded-lg border border-slate-200 p-3 dark:border-slate-700"},[s("input",{class:"builder-input",value:a,onInput:m=>Ne(a,m.target.value,v)},null,40,tn),s("input",{class:"builder-input mt-2 font-mono text-xs",value:W(v),onInput:m=>Ne(a,a,Z(m.target.value))},null,40,sn),s("select",{class:"builder-input mt-2",onChange:m=>{ce(S=>Ne(a,a,S),m.target.value),m.target.value=""}},[t[61]||(t[61]=s("option",{value:""},"选择变量",-1)),(c(!0),p(h,null,q(j.value,m=>(c(),p("option",{key:m.id,value:m.path},g(m.label),9,an))),128))],40,rn),s("button",{class:"mt-2 text-xs text-rose-600",onClick:m=>Vt(a)},"删除字段",8,nn)]))),128))])])):C("",!0),["list","page","count","read","delete","update"].includes($.value.functionName)?(c(),p("div",on,[s("div",{class:"mb-2 flex items-center justify-between"},[t[62]||(t[62]=s("h4",{class:"text-sm font-semibold text-slate-900 dark:text-white"},"条件",-1)),s("div",{class:"flex gap-1"},[s("button",{class:"builder-small-button",onClick:Rt},"添加条件"),s("button",{class:"builder-small-button",onClick:Ut},"添加 OR 组")])]),s("div",ln,[(c(!0),p(h,null,q(ue(),(a,v)=>(c(),p("div",{key:v,class:"rounded-lg border border-slate-200 p-3 dark:border-slate-700"},[a.group?(c(),p(h,{key:1},[s("div",gn,[T(s("select",{"onUpdate:modelValue":m=>a.groupType=m,class:"builder-input"},[...t[64]||(t[64]=[s("option",{value:"AND"},"AND",-1),s("option",{value:"OR"},"OR",-1)])],8,yn),[[te,a.groupType]]),s("span",kn,"条件组包含 "+g(a.groups.length)+" 条,JSON 预览会保留嵌套结构。",1)]),s("textarea",{class:"builder-input mt-2 min-h-28 font-mono text-xs",value:pe(a.groups),onInput:m=>zt(a,m.target.value)},null,40,vn)],64)):(c(),p(h,{key:0},[s("div",un,[T(s("input",{"onUpdate:modelValue":m=>a.fieldName=m,class:"builder-input",placeholder:"字段"},null,8,dn),[[B,a.fieldName]]),T(s("select",{"onUpdate:modelValue":m=>a.conditionType=m,class:"builder-input"},[(c(!0),p(h,null,q(P(os),m=>(c(),p("option",{key:m.value,value:m.value},g(m.title),9,pn))),128))],8,cn),[[te,a.conditionType]])]),s("input",{class:"builder-input mt-2 font-mono text-xs",value:W(a.fieldValue),onInput:m=>a.fieldValue=Z(m.target.value)},null,40,fn),s("select",{class:"builder-input mt-2",onChange:m=>{ce(S=>a.fieldValue=S,m.target.value),m.target.value=""}},[t[63]||(t[63]=s("option",{value:""},"选择变量",-1)),(c(!0),p(h,null,q(j.value,m=>(c(),p("option",{key:m.id,value:m.path},g(m.label),9,mn))),128))],40,bn)],64)),s("button",{class:"mt-2 text-xs text-rose-600",onClick:m=>jt(v)},"删除条件",8,xn)]))),128))])])):C("",!0),["list","page"].includes($.value.functionName)?(c(),p("div",hn,[s("div",{class:"mb-2 flex items-center justify-between"},[t[65]||(t[65]=s("h4",{class:"text-sm font-semibold text-slate-900 dark:text-white"},"排序",-1)),s("button",{class:"builder-small-button",onClick:Mt},"添加排序")]),s("div",_n,[(c(!0),p(h,null,q(Te(),(a,v)=>(c(),p("div",{key:v,class:"grid grid-cols-[minmax(0,1fr)_96px_auto] gap-2"},[T(s("input",{"onUpdate:modelValue":m=>a.fieldName=m,class:"builder-input",placeholder:"字段"},null,8,wn),[[B,a.fieldName]]),T(s("select",{"onUpdate:modelValue":m=>a.direction=m,class:"builder-input"},[...t[66]||(t[66]=[s("option",{value:"ASC"},"ASC",-1),s("option",{value:"DESC"},"DESC",-1)])],8,Sn),[[te,a.direction]]),s("button",{class:"text-xs text-rose-600",onClick:m=>Lt(v)},"删除",8,qn)]))),128))])])):C("",!0),["addSession","removeSession","readSession"].includes($.value.functionName)?(c(),p("label",$n,[t[67]||(t[67]=s("span",null,"Session key",-1)),s("input",{class:"builder-input",value:le("key"),onInput:t[23]||(t[23]=a=>z("key",a.target.value))},null,40,An)])):C("",!0),$.value.functionName==="addSession"?(c(),p(h,{key:8},[s("label",In,[t[68]||(t[68]=s("span",null,"Session value",-1)),s("input",{class:"builder-input font-mono text-xs",value:W(J().value),onInput:t[24]||(t[24]=a=>z("value",Z(a.target.value)))},null,40,Nn)]),s("select",{class:"builder-input",onChange:t[25]||(t[25]=a=>{ce(v=>z("value",v),a.target.value),a.target.value=""})},[t[69]||(t[69]=s("option",{value:""},"选择变量",-1)),(c(!0),p(h,null,q(j.value,a=>(c(),p("option",{key:a.id,value:a.path},g(a.label),9,Cn))),128))],32)],64)):C("",!0)])],64)):C("",!0)])]),s("section",Tn,[s("div",Fn,[s("button",{class:D(["builder-tab-button",{"builder-tab-button-active":d.value==="json"}]),onClick:t[26]||(t[26]=a=>d.value="json")},"JSON 预览",2),s("button",{class:D(["builder-tab-button",{"builder-tab-button-active":d.value==="validation"}]),onClick:t[27]||(t[27]=a=>d.value="validation")},"校验 "+g(N.value.length),3),s("button",{class:D(["builder-tab-button",{"builder-tab-button-active":d.value==="test"}]),onClick:t[28]||(t[28]=a=>d.value="test")},"测试",2),s("button",{class:D(["builder-tab-button",{"builder-tab-button-active":d.value==="versions"}]),onClick:t[29]||(t[29]=a=>d.value="versions")},"版本 "+g(u.value.versions.length),3)]),s("div",Pn,[d.value==="json"?(c(),p("div",On,[s("div",{class:"mb-3 flex justify-end"},[s("button",{class:"builder-secondary-button",onClick:Kt},"复制 JSON")]),s("pre",Dn,g(pe(A.value)),1)])):d.value==="validation"?(c(),p("div",Bn,[N.value.length?C("",!0):(c(),p("p",En,"校验通过,可以本地发布或复制 JSON。")),(c(!0),p(h,null,q(N.value,a=>(c(),p("button",{key:a.id,class:D(["block w-full rounded-lg border p-3 text-left text-sm",a.severity==="error"?"border-rose-200 bg-rose-50 text-rose-800 dark:border-rose-500/30 dark:bg-rose-500/10 dark:text-rose-100":"border-amber-200 bg-amber-50 text-amber-800 dark:border-amber-500/30 dark:bg-amber-500/10 dark:text-amber-100"]),onClick:v=>qt(a)},[s("strong",null,g(a.severity==="error"?"错误":"提醒"),1),be(" · "+g(a.message),1)],10,Jn))),128))])):d.value==="test"?(c(),p("div",Vn,[s("div",Rn,[(c(!0),p(h,null,q(P(Ke),a=>{var v,m;return c(),p("section",{key:a.value},[s("h4",Un,g(a.title),1),s("div",jn,[(c(!0),p(h,null,q(((v=A.value.request)==null?void 0:v[a.value])||[],S=>{var ee;return c(),p("label",{key:`${a.value}-${P(F)(S)}`,class:"builder-field"},[s("span",null,g(P(F)(S)),1),s("input",{class:"builder-input",value:W((ee=b.value[a.value])==null?void 0:ee[P(F)(S)]),onInput:Ze=>Yt(a.value,P(F)(S),Ze.target.value)},null,40,zn)])}),128)),(((m=A.value.request)==null?void 0:m[a.value])||[]).length?C("",!0):(c(),p("p",Mn,"没有 "+g(a.title)+" 参数。",1))])])}),128)),s("div",{class:"flex gap-2"},[s("button",{class:"rounded-lg bg-teal-600 px-3 py-2 text-sm font-semibold text-white hover:bg-teal-500",onClick:es},"运行 Dry-run"),s("button",{class:"builder-secondary-button",onClick:ts},"重置表单")])]),s("div",null,[f.value?(c(),p("div",Gn,[s("p",{class:D(["rounded-lg p-3 text-sm font-semibold",f.value.ok?"bg-emerald-50 text-emerald-800 dark:bg-emerald-500/10 dark:text-emerald-100":"bg-rose-50 text-rose-800 dark:bg-rose-500/10 dark:text-rose-100"])},g(f.value.ok?"Dry-run 通过":f.value.errors.join(";")),3),s("div",Qn,[s("pre",Wn,g(pe({ok:f.value.ok,data:f.value.data})),1),s("div",Zn,[(c(!0),p(h,null,q(f.value.logs,a=>(c(),p("div",{key:a.uuid,class:"rounded-lg border border-slate-200 p-3 text-sm dark:border-slate-700"},[s("div",Kn,[s("strong",Hn,g(a.alias),1),s("span",{class:D(["rounded px-2 py-0.5 text-xs",a.status==="success"?"bg-emerald-100 text-emerald-700 dark:bg-emerald-500/20 dark:text-emerald-100":"bg-slate-100 text-slate-600 dark:bg-slate-800 dark:text-slate-300"])},g(a.status),3)]),s("p",Xn,g(a.message),1)]))),128))])])])):(c(),p("p",Ln,"填写测试表单后运行 dry-run。它不会访问数据库,只验证当前草稿的 JSON、模板路径和模拟链路。"))])])):(c(),p("div",Yn,[u.value.versions.length?C("",!0):(c(),p("p",eo,"还没有本地版本。点击“保存快照”或“本地发布”会生成版本。")),(c(!0),p(h,null,q(u.value.versions,a=>{var v;return c(),p("div",{key:a.id,class:"flex flex-wrap items-center justify-between gap-3 rounded-lg border border-slate-200 p-3 dark:border-slate-700"},[s("div",null,[s("p",to,g(a.label),1),s("p",so,g(We(a.createdAt))+" · "+g(((v=a.apiJson.blocks)==null?void 0:v.length)||0)+" steps",1)]),s("button",{class:"builder-secondary-button",onClick:m=>Xt(a)},"回滚",8,ro)])}),128))]))])])])):(c(),p("section",ao,[t[71]||(t[71]=s("h2",{class:"text-xl font-semibold text-slate-950 dark:text-white"},"找不到这个本地 API 草稿",-1)),t[72]||(t[72]=s("p",{class:"mt-2 text-sm text-slate-500 dark:text-slate-400"},"草稿只保存在当前浏览器。可以返回列表重新创建。",-1)),s("button",{class:"mt-4 rounded-lg bg-teal-600 px-4 py-2 text-sm font-semibold text-white hover:bg-teal-500",onClick:$e},"返回 API 列表")])):(c(),p("div",Xs,[s("section",Ys,[s("div",{class:"flex flex-wrap items-start justify-between gap-3"},[t[30]||(t[30]=s("div",null,[s("p",{class:"text-sm font-medium text-teal-700 dark:text-teal-300"},"API Builder"),s("h2",{class:"mt-1 text-2xl font-semibold text-slate-950 dark:text-white"},"可视化搭建内部数据 API"),s("p",{class:"mt-2 max-w-3xl text-sm leading-6 text-slate-600 dark:text-slate-300"}," 纯客户端草稿工作台。先把接口入口、请求参数、编排步骤和响应结构搭顺,再导出符合 Mokelay Orchestration 的 API JSON。 ")],-1)),s("button",{"data-testid":"api-builder-new",class:"rounded-lg bg-teal-600 px-4 py-2 text-sm font-semibold text-white hover:bg-teal-500",onClick:bt}," 新建 API ")]),s("div",er,[s("table",tr,[t[32]||(t[32]=s("thead",{class:"bg-slate-50 text-left text-xs uppercase tracking-wide text-slate-500 dark:bg-slate-800/70 dark:text-slate-400"},[s("tr",null,[s("th",{class:"px-4 py-3"},"名称"),s("th",{class:"px-4 py-3"},"UUID"),s("th",{class:"px-4 py-3"},"方法"),s("th",{class:"px-4 py-3"},"状态"),s("th",{class:"px-4 py-3"},"最近编辑"),s("th",{class:"px-4 py-3 text-right"},"操作")])],-1)),s("tbody",sr,[Me.value.length?C("",!0):(c(),p("tr",rr,[...t[31]||(t[31]=[s("td",{colspan:"6",class:"px-4 py-8 text-center text-slate-500 dark:text-slate-400"},"暂无本地草稿,可以从右侧模板或样例开始。",-1)])])),(c(!0),p(h,null,q(Me.value,a=>(c(),p("tr",{key:a.id,class:"bg-white dark:bg-slate-900"},[s("td",ar,g(a.apiJson.alias||"未命名 API"),1),s("td",nr,g(a.apiJson.uuid),1),s("td",or,[s("span",ir,g(a.apiJson.method),1)]),s("td",lr,[s("span",{class:D(["rounded-md px-2 py-1 text-xs font-semibold",a.status==="published"?"bg-emerald-100 text-emerald-800 dark:bg-emerald-500/20 dark:text-emerald-100":"bg-amber-100 text-amber-800 dark:bg-amber-500/20 dark:text-amber-100"])},g(a.status==="published"?"本地已发布":"草稿"),3)]),s("td",ur,g(We(a.updatedAt)),1),s("td",dr,[s("button",{class:"rounded-md px-2 py-1 text-teal-700 hover:bg-teal-50 dark:text-teal-200 dark:hover:bg-teal-500/10",onClick:v=>oe(a)},"打开",8,cr),s("button",{class:"rounded-md px-2 py-1 text-rose-700 hover:bg-rose-50 dark:text-rose-200 dark:hover:bg-rose-500/10",onClick:v=>yt(a)},"删除",8,pr)])]))),128))])])])]),s("aside",fr,[s("section",br,[t[33]||(t[33]=s("h3",{class:"text-sm font-semibold text-slate-900 dark:text-white"},"从模板创建",-1)),s("div",mr,[T(s("select",{"onUpdate:modelValue":t[0]||(t[0]=a=>x.selectedTemplateId=a),class:"builder-input"},[(c(!0),p(h,null,q(P(Je),a=>(c(),p("option",{key:a.id,value:a.id},g(a.title),9,gr))),128))],512),[[te,x.selectedTemplateId]]),s("div",yr,[T(s("input",{"onUpdate:modelValue":t[1]||(t[1]=a=>x.datasource=a),class:"builder-input",placeholder:"数据源,如 Mokelay"},null,512),[[B,x.datasource]]),T(s("input",{"onUpdate:modelValue":t[2]||(t[2]=a=>x.table=a),class:"builder-input",placeholder:"表名,如 users"},null,512),[[B,x.table]]),T(s("input",{"onUpdate:modelValue":t[3]||(t[3]=a=>x.idField=a),class:"builder-input",placeholder:"主键,如 id"},null,512),[[B,x.idField]]),T(s("input",{"onUpdate:modelValue":t[4]||(t[4]=a=>x.requestFields=a),class:"builder-input",placeholder:"请求字段,逗号分隔"},null,512),[[B,x.requestFields]])]),T(s("input",{"onUpdate:modelValue":t[5]||(t[5]=a=>x.returnFields=a),class:"builder-input",placeholder:"返回字段,逗号分隔"},null,512),[[B,x.returnFields]]),s("button",{class:"w-full rounded-lg bg-slate-900 px-3 py-2 text-sm font-semibold text-white hover:bg-slate-700 dark:bg-white dark:text-slate-950",onClick:t[6]||(t[6]=a=>mt())}," 使用模板 ")])]),s("section",kr,[t[34]||(t[34]=s("h3",{class:"text-sm font-semibold text-slate-900 dark:text-white"},"内置样例",-1)),s("div",vr,[(c(!0),p(h,null,q(P(Es),a=>(c(),p("button",{key:a.id,class:"rounded-lg border border-slate-200 p-3 text-left hover:border-teal-300 hover:bg-teal-50 dark:border-slate-700 dark:hover:border-teal-500/60 dark:hover:bg-teal-500/10",onClick:v=>Le(a.apiJson)},[s("span",hr,g(a.title),1),s("span",_r,g(a.description),1)],8,xr))),128))])])])]))])}}}),uo=ns(no,[["__scopeId","data-v-1d9d7b69"]]);export{uo as default};
@@ -0,0 +1 @@
1
+ .builder-input[data-v-1d9d7b69]{width:100%;border-radius:.5rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(203 213 225 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));padding:.5rem .75rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity, 1));outline:2px solid transparent;outline-offset:2px;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.builder-input[data-v-1d9d7b69]:focus{--tw-border-opacity: 1;border-color:rgb(20 184 166 / var(--tw-border-opacity, 1));--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-color: rgb(20 184 166 / .2) }.builder-input[data-v-1d9d7b69]:disabled{cursor:not-allowed;--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.builder-input[data-v-1d9d7b69]:is(.dark *){--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(2 6 23 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}.builder-input[data-v-1d9d7b69]:disabled:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.builder-field[data-v-1d9d7b69]{display:flex;flex-direction:column;gap:.25rem;font-size:.875rem;line-height:1.25rem;font-weight:500;--tw-text-opacity: 1;color:rgb(51 65 85 / var(--tw-text-opacity, 1))}.builder-field[data-v-1d9d7b69]:is(.dark *){--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.builder-secondary-button[data-v-1d9d7b69]{border-radius:.5rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(203 213 225 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));padding:.5rem .75rem;font-size:.875rem;line-height:1.25rem;font-weight:600;--tw-text-opacity: 1;color:rgb(51 65 85 / var(--tw-text-opacity, 1))}.builder-secondary-button[data-v-1d9d7b69]:hover{--tw-bg-opacity: 1;background-color:rgb(248 250 252 / var(--tw-bg-opacity, 1))}.builder-secondary-button[data-v-1d9d7b69]:is(.dark *){--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(2 6 23 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.builder-secondary-button[data-v-1d9d7b69]:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.builder-small-button[data-v-1d9d7b69]{border-radius:.375rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(203 213 225 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));padding:.25rem .5rem;font-size:.75rem;line-height:1rem;font-weight:600;--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity, 1))}.builder-small-button[data-v-1d9d7b69]:hover{--tw-bg-opacity: 1;background-color:rgb(248 250 252 / var(--tw-bg-opacity, 1))}.builder-small-button[data-v-1d9d7b69]:is(.dark *){--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(2 6 23 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.builder-small-button[data-v-1d9d7b69]:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.builder-icon-button[data-v-1d9d7b69]{border-radius:.375rem;padding:.25rem .5rem;font-size:.75rem;line-height:1rem;font-weight:600;--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity, 1))}.builder-icon-button[data-v-1d9d7b69]:hover{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.builder-icon-button[data-v-1d9d7b69]:is(.dark *){--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.builder-icon-button[data-v-1d9d7b69]:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.builder-nav-button[data-v-1d9d7b69]{border-radius:.5rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1));padding:.5rem .75rem;font-size:.875rem;line-height:1.25rem;font-weight:600;--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity, 1))}.builder-nav-button[data-v-1d9d7b69]:hover{--tw-border-opacity: 1;border-color:rgb(94 234 212 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(240 253 250 / var(--tw-bg-opacity, 1))}.builder-nav-button[data-v-1d9d7b69]:is(.dark *){--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1));--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.builder-nav-button[data-v-1d9d7b69]:hover:is(.dark *){background-color:#14b8a61a}.builder-nav-button-active[data-v-1d9d7b69]{--tw-border-opacity: 1;border-color:rgb(45 212 191 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(240 253 250 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(17 94 89 / var(--tw-text-opacity, 1))}.builder-nav-button-active[data-v-1d9d7b69]:is(.dark *){--tw-border-opacity: 1;border-color:rgb(20 184 166 / var(--tw-border-opacity, 1));background-color:#14b8a633;--tw-text-opacity: 1;color:rgb(204 251 241 / var(--tw-text-opacity, 1))}.builder-palette-button[data-v-1d9d7b69]{border-radius:.5rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1));padding:.75rem;text-align:left}.builder-palette-button[data-v-1d9d7b69]:hover{--tw-border-opacity: 1;border-color:rgb(94 234 212 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(240 253 250 / var(--tw-bg-opacity, 1))}.builder-palette-button[data-v-1d9d7b69]:is(.dark *){--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1))}.builder-palette-button[data-v-1d9d7b69]:hover:is(.dark *){border-color:#14b8a699;background-color:#14b8a61a}.builder-palette-button span[data-v-1d9d7b69]{display:block;font-size:.875rem;line-height:1.25rem;font-weight:600;--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity, 1))}.builder-palette-button span[data-v-1d9d7b69]:is(.dark *){--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.builder-palette-button small[data-v-1d9d7b69]{margin-top:.25rem;display:block;font-size:.75rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.builder-palette-button small[data-v-1d9d7b69]:is(.dark *){--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.builder-tab-button[data-v-1d9d7b69]{border-radius:.5rem;padding:.5rem .75rem;font-size:.875rem;line-height:1.25rem;font-weight:600;--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity, 1))}.builder-tab-button[data-v-1d9d7b69]:hover{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1))}.builder-tab-button[data-v-1d9d7b69]:is(.dark *){--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.builder-tab-button[data-v-1d9d7b69]:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.builder-tab-button-active[data-v-1d9d7b69]{--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.builder-tab-button-active[data-v-1d9d7b69]:hover{--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.builder-tab-button-active[data-v-1d9d7b69]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(2 6 23 / var(--tw-text-opacity, 1))}.builder-tab-button-active[data-v-1d9d7b69]:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}
@@ -0,0 +1 @@
1
+ [data-v-5543de7b] .mokelay-editor-tool{position:relative}[data-v-5543de7b] .mokelay-editor-tool__property-dialog{width:min(100%,480px);border:0;border-radius:16px;padding:0;box-shadow:0 24px 80px #0f172a52}[data-v-5543de7b] .mokelay-editor-tool__property-dialog::backdrop{background:#0f172a73}[data-v-5543de7b] .mokelay-editor-tool__property-panel{margin:0;padding:20px;background:#fff}[data-v-5543de7b] .mokelay-editor-tool__property-header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:16px}[data-v-5543de7b] .mokelay-editor-tool__property-title{margin:0;color:#0f172a;font-size:18px;font-weight:600}[data-v-5543de7b] .mokelay-editor-tool__property-close{border:0;border-radius:10px;padding:8px 12px;background:#e2e8f0;color:#334155;cursor:pointer}[data-v-5543de7b] .mokelay-editor-tool__property-body{display:flex;flex-direction:column;gap:14px}[data-v-5543de7b] .mokelay-editor-tool__property-field{display:flex;flex-direction:column;gap:6px}[data-v-5543de7b] .mokelay-editor-tool__property-field--checkbox{flex-direction:row;align-items:center;gap:10px}[data-v-5543de7b] .mokelay-editor-tool__property-label{color:#334155;font-size:13px;font-weight:600}[data-v-5543de7b] .mokelay-editor-tool__property-checkbox{width:16px;height:16px;margin:0}[data-v-5543de7b] .mokelay-editor-tool__property-input{width:100%;border:1px solid rgb(148 163 184 / .65);border-radius:10px;padding:10px 12px;background:#fff;color:#0f172a;font-size:14px;line-height:20px}[data-v-5543de7b] .mokelay-editor-tool__property-input:focus{outline:none;border-color:#6366f1;box-shadow:0 0 0 2px #6366f126}[data-v-5543de7b] .mokelay-editor-tool__property-textarea{min-height:128px;resize:vertical;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}[data-v-5543de7b] .mokelay-editor-tool__property-input[aria-invalid=true]{border-color:#dc2626;box-shadow:0 0 0 2px #dc26261f}[data-v-5543de7b] .mokelay-editor-tool__property-error{color:#dc2626;font-size:12px;line-height:18px}.dark{background:#0f172a}.dark{color:#f1f5f9}.dark{background:#334155;color:#f1f5f9}.dark{color:#cbd5e1}.dark{background:#0f172a;color:#e2e8f0;border-color:#475569e6}
@@ -0,0 +1 @@
1
+ import{_ as f}from"./MPage.vue_vue_type_script_setup_true_lang-D2OXItLi.js";import{u as b,_ as g}from"./block-advanced-CdUL2rGG.js";import{f as x,o as r,j as a,C as n,u as h,t as i,x as y,r as _}from"./vue-vendor-CGusfGYN.js";import"./editorjs-CrGo22NX.js";import"./block-editor-selector-DWvvND_N.js";import"./block-form-C_cJnRtX.js";import"./block-chart-C_HzJKhS.js";import"./echarts-BN_iJMI5.js";import"./zrender-CyMoNtco.js";import"./block-datasource-B8nJNjoV.js";import"./element-plus-Bo3B6ZwD.js";const v={"data-testid":"editor-panel",class:"flex min-h-[520px] flex-1 flex-col rounded-xl border border-slate-200 bg-white p-4 shadow-sm dark:border-slate-700 dark:bg-slate-900"},C={key:0,"data-testid":"editor-loading-state",class:"mb-3 rounded border border-sky-300 bg-sky-50 p-3 text-sm text-sky-800 dark:border-sky-500/60 dark:bg-sky-900/30 dark:text-sky-100"},B={key:1,"data-testid":"editor-error-state",class:"mb-3 rounded border border-red-300 bg-red-50 p-3 text-sm text-red-800 dark:border-red-500/60 dark:bg-red-900/30 dark:text-red-100"},E=x({__name:"EditorPanel",props:{blocks:{default:()=>[]},loading:{type:Boolean,default:!1},error:{default:""}},emits:["change"],setup(e,{expose:l,emit:c}){const m=e,s=c,d=_(null),{t:u}=b();async function k(){var o;const t=await((o=d.value)==null?void 0:o.saveEditor())??{blocks:m.blocks};return s("change",t.blocks),t}function p(t){s("change",t)}return l({save:k}),(t,o)=>(r(),a("section",v,[e.loading?(r(),a("p",C,n(h(u)("page.loading")),1)):e.error?(r(),a("p",B,n(e.error),1)):i("",!0),e.loading?i("",!0):(r(),y(f,{key:2,ref_key:"pageRef",ref:d,edit:!0,value:e.blocks,onChange:p},null,8,["value"]))]))}}),z=g(E,[["__scopeId","data-v-5543de7b"]]);export{z as default};
@@ -0,0 +1 @@
1
+ import{_ as o}from"./MPage.vue_vue_type_script_setup_true_lang-D2OXItLi.js";import"./editorjs-CrGo22NX.js";import"./block-advanced-CdUL2rGG.js";import"./vue-vendor-CGusfGYN.js";import"./element-plus-Bo3B6ZwD.js";import"./block-editor-selector-DWvvND_N.js";import"./block-form-C_cJnRtX.js";import"./block-chart-C_HzJKhS.js";import"./echarts-BN_iJMI5.js";import"./zrender-CyMoNtco.js";import"./block-datasource-B8nJNjoV.js";export{o as default};
@@ -0,0 +1 @@
1
+ import{A,F as L,E as q}from"./editorjs-CrGo22NX.js";import{u as z,k as D}from"./block-advanced-CdUL2rGG.js";import{c as G}from"./block-editor-selector-DWvvND_N.js";import{_ as E}from"./block-form-C_cJnRtX.js";import{f as H,z as U,F as v,A as B,B as I,o,j as i,G as k,H as g,x as K,q as Q,t as W,e as C,r as X}from"./vue-vendor-CGusfGYN.js";const Y={key:1,"data-testid":"preview-blocks",class:"space-y-1"},Z=["data-testid"],ee={key:1,"data-testid":"preview-columns",class:"grid gap-3 md:grid-cols-2"},te=["data-testid"],ae=["data-testid"],le=H({__name:"MPage",props:{edit:{type:Boolean,default:!1},value:{default:()=>[]},onToolChange:{}},emits:["change"],setup($,{expose:T,emit:J}){const s=$,N=J,l=C(()=>s.edit);let r=null,c=!1,u=!1,n={blocks:s.value};const{t:S,localeValue:h}=z(),d=X(null),x=C(()=>Array.isArray(s.value)?s.value:[]);function F(e){const t=e.data.cols;return Array.isArray(t)?t.filter(a=>typeof a=="object"&&a!==null):[]}function M(e){return Array.isArray(e.blocks)?e.blocks:[]}function w(e){return{blocks:e}}function O(e,t){return JSON.stringify(e)===JSON.stringify(t)}function P(e){var a;const t={edit:s.edit,value:e};(a=s.onToolChange)==null||a.call(s,t),u=!0,N("change",e)}async function f(){if(!d.value||!l.value||r)return;const e={...G({edit:!0}),table:{class:L,inlineToolbar:!0}};r=new A({holder:d.value,placeholder:S("editor.placeholder"),tools:{...e,columns:{class:q,config:{EditorJsLibrary:A,tools:e}}},data:n,i18n:{messages:D(h.value)},onChange:async()=>{if(!r)return;const t=await r.save();n=t,!c&&P(t.blocks)}})}async function y(){const e=r;if(e){r=null;try{n=await e.save()}catch{n=w(s.value)}e.destroy()}}async function _(){await y(),await B(),await f()}async function R(){if(!r)return n;const e=await r.save();return n=e,e}return T({saveEditor:R}),U(async()=>{await f()}),v(()=>s.value,async e=>{if(u){u=!1;return}const t=Array.isArray(e)?e:[],a=Array.isArray(n.blocks)?n.blocks:[];O(t,a)||(c=!0,n=w(t),r&&await _(),c=!1)},{deep:!0}),v(h,async()=>{r&&await _()}),v(l,async e=>{if(e){await B(),await f();return}await y()}),I(async()=>{await y()}),(e,t)=>l.value?(o(),i("div",{key:0,ref_key:"holderRef",ref:d,"data-testid":"editor-surface",class:"min-h-0 flex-1 rounded-lg border border-slate-300 bg-slate-50 py-3 pr-3 pl-11 dark:border-slate-700 dark:bg-slate-950"},null,512)):(o(),i("div",Y,[(o(!0),i(k,null,g(x.value,(a,p)=>(o(),i("div",{key:p,"data-testid":`preview-block-${a.type}`,class:"p-0"},[a.type!=="columns"?(o(),K(E,{key:0,block:a},null,8,["block"])):a.type==="columns"?(o(),i("div",ee,[(o(!0),i(k,null,g(F(a),(V,m)=>(o(),i("div",{key:`columns-${p}-${m}`,"data-testid":`preview-column-${m}`,class:"space-y-2 p-2"},[(o(!0),i(k,null,g(M(V),(b,j)=>(o(),i("div",{key:`columns-${p}-${m}-${j}`,"data-testid":`preview-column-block-${b.type}`,class:"p-2"},[Q(E,{block:b,"compact-table":""},null,8,["block"])],8,ae))),128))],8,te))),128))])):W("",!0)],8,Z))),128))]))}});export{le as _};
@@ -0,0 +1 @@
1
+ import{u as s}from"./block-advanced-CdUL2rGG.js";import{_ as l}from"./MPage.vue_vue_type_script_setup_true_lang-D2OXItLi.js";import{f as i,o as r,j as t,l as n,C as a,u as d,x as b}from"./vue-vendor-CGusfGYN.js";import"./element-plus-Bo3B6ZwD.js";import"./editorjs-CrGo22NX.js";import"./block-editor-selector-DWvvND_N.js";import"./block-form-C_cJnRtX.js";import"./block-chart-C_HzJKhS.js";import"./echarts-BN_iJMI5.js";import"./zrender-CyMoNtco.js";import"./block-datasource-B8nJNjoV.js";const m={"data-testid":"preview-panel",class:"flex min-h-[520px] flex-1 flex-col rounded-xl border border-slate-200 bg-white p-4 shadow-sm dark:border-slate-700 dark:bg-slate-900"},c={class:"flex-1 overflow-auto"},p={key:0,"data-testid":"preview-loading-state",class:"rounded border border-sky-300 bg-sky-50 p-3 text-sky-800 dark:border-sky-500/60 dark:bg-sky-900/30 dark:text-sky-100"},k={key:1,"data-testid":"preview-error-state",class:"rounded border border-red-300 bg-red-50 p-3 text-red-800 dark:border-red-500/60 dark:bg-red-900/30 dark:text-red-100"},f={key:2,"data-testid":"preview-empty-state",class:"rounded border border-amber-300 bg-amber-50 p-3 text-amber-800 dark:border-amber-500/60 dark:bg-amber-900/30 dark:text-amber-100"},D=i({__name:"PreviewPanel",props:{blocks:{default:()=>[]},loading:{type:Boolean,default:!1},error:{default:""}},setup(e){const{t:o}=s();return(u,g)=>(r(),t("section",m,[n("div",c,[e.loading?(r(),t("p",p,a(d(o)("page.loading")),1)):e.error?(r(),t("p",k,a(e.error),1)):e.blocks.length?(r(),b(l,{key:3,edit:!1,value:e.blocks},null,8,["value"])):(r(),t("p",f,a(d(o)("preview.emptyState")),1))])]))}});export{D as default};
@@ -0,0 +1 @@
1
+ import{r as F,e as D,y as Be,f as ae,o as f,j as g,l as S,z as xe,A as ue,B as Te,C as z,q as Fe,s as De,D as Ie,u as Y,E as he,F as we,v as q,G as A,H as U,p as Ne,t as K,x as Ee,m as Re,I as Oe,n as ce,J as Pe}from"./vue-vendor-CGusfGYN.js";import{E as Ue}from"./element-plus-Bo3B6ZwD.js";const je={app:{title:"Mokelay Editor",subtitle:"Mokelay page configurator",darkMode:"Dark mode",dark:"Dark",light:"Light",language:"Language",chinese:"中文",english:"English"},editor:{placeholder:"Start typing your content...",defaultParagraph:"Welcome to the Mokelay editor starter template.",fullscreenEdit:"Fullscreen",saveContent:"Save",saving:"Saving...",saveSuccess:"Saved",saveFailed:"Save failed. Please try again.",previewPage:"Preview",properties:"Properties",propertyDialogTitle:"Property Settings",configJson:"Config JSON",close:"Close",invalidJson:"Enter valid JSON."},preview:{title:"Config Preview",backToEditor:"Back",emptyState:"No page content yet."},globalCalls:{ok:"OK",cancel:"Cancel",alertRoleLabel:"Alert",confirmRoleLabel:"Confirm",messageRoleLabel:"Message"},input:{toolboxTitle:"Input",defaultPlaceholder:"Please enter...",propertyPanelTitle:"Input Properties",properties:{placeholder:"Placeholder",value:"Default value",valuePlaceholder:"Please enter a default value"}},link:{toolboxTitle:"Link",defaultText:"Link",defaultUrl:"https://mokelay.com",propertyPanelTitle:"Link Properties",properties:{text:"Link text",url:"Link URL",open:"Open in new page"}},advanceInput:{toolboxTitle:"Advanced Input"},dividerLine:{toolboxTitle:"Divider"},chart:{toolboxTitle:"Chart",propertyPanelTitle:"Chart Properties",defaultSeriesName:"Data",types:{line:"Line chart",bar:"Bar chart",pie:"Pie chart"},properties:{type:"Chart type",xAxis:"X-axis data",series:"Series data"},validation:{invalidJson:"Enter valid JSON."}},editorSelector:{toolboxTitle:"Component Selector",placeholder:"Select a component"},form:{toolboxTitle:"Form",placeholder:"Add a form item"},advanceTable:{toolboxTitle:"Advanced Table",propertyPanelTitle:"Advanced Table Properties",defaultColumnName:"Column",empty:"No data",selectAll:"Select all",selectRow:"Select row",properties:{index:"Show index column",selection:"Show selection column"},defaultColumns:{name:"Name",status:"Status",tag:"Tag",owner:"Owner",link:"Link"},defaultRows:{first:{name:"Mokelay Page",status:"Designing",tag:"Design",owner:"Product Team",linkText:"Website",linkUrl:"https://mokelay.com"},second:{name:"Advanced Table",status:"Previewable",tag:"Preview",owner:"Editor Team",linkText:"Docs",linkUrl:"https://editor.mokelay.com"}}},datasource:{toolboxTitle:"Datasource Editor",title:"Datasource",empty:"No items",emptySchema:'No field config yet. Click "Generate field config" first.',noListRecord:"This schema does not contain an array field for list data.",noFormFields:"This schema does not contain simple fields for a form.",fields:{type:"Datasource type",rawData:"JSON data",domain:"API domain",path:"API path",method:"Method",key:"Key",mock:"Mock data",jsonSchema:"JSON Schema",generatedFields:"Fields",searchFields:"Search fields or paths",recordPath:"List data path",rootRecordPath:"Root data",selectedFields:"Selected fields",required:"Required"},sections:{headers:"Header",queries:"Query",body:"Body",generateFields:"Generate field config",fieldSelection:"Field selection"},actions:{add:"Add",remove:"Remove",parseJsonSchema:"Parse JSON Schema",parsingJsonSchema:"Parsing...",generateFields:"Generate field config",generatingFields:"Generating..."},tabs:{list:"List fields",form:"Form fields",advanced:"Advanced Schema"},help:{generateFields:"Detect fields from JSON data or an API response, then prepare them for list and form components.",fieldSelection:"Choose the fields components should use, and rename them with business-friendly labels."},schemaTypes:{object:"Object",array:"List",string:"Text",number:"Number",boolean:"Switch",null:"Empty",union:"Union"},componentHints:{text:"Text",number:"Number",switch:"Switch",object:"Object",array:"List"},validation:{invalidJson:"Enter valid JSON.",invalidJsonSchema:"Enter a JSON Schema that matches the supported format.",invalidNumber:"Enter a valid number.",invalidObject:"Enter a valid JSON object.",invalidArray:"Enter a valid JSON array.",fixJsonBeforeSchema:"Fix JSON data before parsing JSON Schema.",fixBodyBeforeSchema:"Fix Body mock data before parsing JSON Schema.",nonJsonResponse:"The API response is not JSON.",invalidJsonResponse:"The API response is not valid JSON.",apiRequestFailed:"API request failed:",emptyArraySchema:"Cannot infer JSON Schema from an empty array.",mixedArraySchema:"The array contains incompatible types, so JSON Schema cannot be inferred."}},formItem:{toolboxTitle:"Form Item",defaultLabelName:"Field",propertyPanelTitle:"Form Item Properties",emptyEditor:"No editor selected",properties:{labelName:"Field label",variableName:"Variable name",editor:"Editor",layout:"Layout"},placeholders:{labelName:"Enter field label",variableName:"Enter variable name"},layouts:{vertical:"Vertical",horizontal:"Horizontal"}},tag:{toolboxTitle:"Tag",defaultTagName:"Tag",propertyPanelTitle:"Tag Properties",properties:{tagName:"Tag name",type:"Type",size:"Size",color:"Custom color",colorPlaceholder:"e.g. #409EFF",closable:"Closable"},types:{default:"Default",primary:"Primary",success:"Success",info:"Info",warning:"Warning",danger:"Danger"},sizes:{default:"Default",large:"Large",medium:"Medium",small:"Small"}},page:{toolboxTitle:"Page",loading:"Loading page...",loadFailed:"Failed to load page. Please try again."}},Ve={},He={app:{title:"Mokelay Editor",subtitle:"Mokelay页面配置器",darkMode:"深色模式",dark:"深色",light:"浅色",language:"语言",chinese:"中文",english:"English"},editor:{placeholder:"开始输入你的内容...",defaultParagraph:"欢迎使用 Mokelay 编辑器初始化模板。",fullscreenEdit:"全屏编辑",saveContent:"保存",saving:"保存中...",saveSuccess:"保存成功",saveFailed:"保存失败,请稍后重试",previewPage:"预览",properties:"属性",propertyDialogTitle:"属性设置",configJson:"配置 JSON",close:"关闭",invalidJson:"请输入有效 JSON。"},preview:{title:"配置预览",backToEditor:"返回",emptyState:"暂无页面内容。"},globalCalls:{ok:"确定",cancel:"取消",alertRoleLabel:"提示",confirmRoleLabel:"确认",messageRoleLabel:"消息"},input:{toolboxTitle:"输入框",defaultPlaceholder:"请输入.....",propertyPanelTitle:"输入框属性",properties:{placeholder:"占位提示",value:"默认值",valuePlaceholder:"请输入默认值"}},link:{toolboxTitle:"链接",defaultText:"链接",defaultUrl:"https://mokelay.com",propertyPanelTitle:"链接属性",properties:{text:"链接文本",url:"链接地址",open:"新页面打开"}},advanceInput:{toolboxTitle:"高级输入框"},dividerLine:{toolboxTitle:"分割线"},chart:{toolboxTitle:"图表",propertyPanelTitle:"图表属性",defaultSeriesName:"数据",types:{line:"折线图",bar:"柱状图",pie:"饼图"},properties:{type:"图表类型",xAxis:"横坐标数据",series:"图表数据"},validation:{invalidJson:"请输入有效 JSON。"}},editorSelector:{toolboxTitle:"组件选择器",placeholder:"选择组件"},form:{toolboxTitle:"表单",placeholder:"添加表单项"},advanceTable:{toolboxTitle:"高级表格",propertyPanelTitle:"高级表格属性",defaultColumnName:"列",empty:"暂无数据",selectAll:"全选",selectRow:"选择行",properties:{index:"显示序号列",selection:"显示多选列"},defaultColumns:{name:"名称",status:"状态",tag:"标签",owner:"负责人",link:"链接"},defaultRows:{first:{name:"Mokelay 页面",status:"设计中",tag:"设计",owner:"产品团队",linkText:"官网",linkUrl:"https://mokelay.com"},second:{name:"高级表格",status:"可预览",tag:"预览",owner:"编辑器团队",linkText:"文档",linkUrl:"https://editor.mokelay.com"}}},datasource:{toolboxTitle:"数据源编辑器",title:"数据源",empty:"暂无配置项",emptySchema:"还没有字段配置,请先点击“生成字段配置”。",noListRecord:"当前 Schema 中没有可作为列表数据的数组字段。",noFormFields:"当前 Schema 中没有可用于表单的普通字段。",fields:{type:"数据源类型",rawData:"JSON 数据",domain:"API 域名",path:"API Path",method:"调用方法",key:"Key",mock:"Mock 数据",jsonSchema:"JSON Schema",generatedFields:"字段数",searchFields:"搜索字段名称或路径",recordPath:"列表数据位置",rootRecordPath:"根数据",selectedFields:"已选择字段",required:"必填"},sections:{headers:"Header",queries:"Query",body:"Body",generateFields:"生成字段配置",fieldSelection:"字段选择"},actions:{add:"添加",remove:"删除",parseJsonSchema:"解析JSON Schema",parsingJsonSchema:"解析中...",generateFields:"生成字段配置",generatingFields:"生成中..."},tabs:{list:"列表字段",form:"表单字段",advanced:"高级 Schema"},help:{generateFields:"从 JSON 数据或 API 响应中识别字段,生成给列表和表单使用的配置。",fieldSelection:"勾选需要给组件使用的字段,可以直接改成业务同学看得懂的名称。"},schemaTypes:{object:"对象",array:"列表",string:"文本",number:"数字",boolean:"开关",null:"空值",union:"联合"},componentHints:{text:"文本",number:"数字",switch:"开关",object:"对象",array:"列表"},validation:{invalidJson:"请输入标准 JSON 结构。",invalidJsonSchema:"请输入符合数据格式的 JSON Schema。",invalidNumber:"请输入有效数字。",invalidObject:"请输入标准 JSON 对象。",invalidArray:"请输入标准 JSON 数组。",fixJsonBeforeSchema:"请先修正 JSON 数据。",fixBodyBeforeSchema:"请先修正 Body 中的 Mock 数据。",nonJsonResponse:"API 响应不是 JSON 数据。",invalidJsonResponse:"API 响应不是有效 JSON 数据。",apiRequestFailed:"API 请求失败:",emptyArraySchema:"空数组无法推断 JSON Schema。",mixedArraySchema:"数组中包含无法合并的类型,无法推断 JSON Schema。"}},formItem:{toolboxTitle:"表单项",defaultLabelName:"字段",propertyPanelTitle:"表单项属性",emptyEditor:"未选择编辑器",properties:{labelName:"字段文本",variableName:"变量名",editor:"编辑器",layout:"布局方式"},placeholders:{labelName:"请输入字段文本",variableName:"请输入变量名"},layouts:{vertical:"垂直",horizontal:"水平"}},tag:{toolboxTitle:"标签",defaultTagName:"标签",propertyPanelTitle:"标签属性",properties:{tagName:"标签内容",type:"标签类型",size:"标签尺寸",color:"自定义颜色",colorPlaceholder:"例如:#409EFF",closable:"可关闭"},types:{default:"默认",primary:"主要",success:"成功",info:"信息",warning:"警告",danger:"危险"},sizes:{default:"默认",large:"大",medium:"中",small:"小"}},page:{toolboxTitle:"页面",loading:"正在读取页面...",loadFailed:"页面读取失败,请稍后重试。"}},We={ui:{blockTunes:{toggler:{"Click to tune":"点击设置","or drag to move":"或拖拽移动"}},inlineToolbar:{converter:{"Convert to":"转换为"}},toolbar:{toolbox:{Add:"添加"}},popover:{Filter:"筛选","Nothing found":"未找到结果"}},blockTunes:{delete:{Delete:"删除"},moveUp:{"Move up":"上移"},moveDown:{"Move down":"下移"}},toolNames:{Text:"文本",Heading:"标题",List:"列表",Warning:"提示",Checklist:"清单",Quote:"引用",Delimiter:"分割线",Table:"表格",Link:"链接",Columns:"分栏"}},qe={zh:He,en:je},Ke={zh:We,en:Ve},Me="mokelay-editor-locale";function Xe(e){const s=(document.cookie?document.cookie.split("; "):[]).find(c=>c.startsWith(`${e}=`));return s?decodeURIComponent(s.slice(e.length+1)):null}function Ge(e,t){document.cookie=`${e}=${encodeURIComponent(t)}; path=/; max-age=31536000; samesite=lax`}function Qe(){return navigator.language.toLowerCase().startsWith("zh")?"zh":"en"}function Ye(){const e=Xe(Me);return e==="zh"||e==="en"?e:Qe()}const te=F(Ye());function ze(e){const t=e.split(".");let s=qe[te.value];for(const c of t){if(typeof s=="object"&&s!==null&&c in s){s=s[c];continue}s=void 0;break}return typeof s=="string"?s:e}function Ae(e){te.value=e,Ge(Me,e)}function Ce(){return{locale:Be(te),t:ze,setLocale:Ae,localeValue:D(()=>te.value)}}function Yt(e){return Ke[e]}const r={t:ze,get locale(){return te.value},setLocale:Ae};function Zt(e){return e}const Ze={class:"ce-input-tool","data-testid":"editor-input-tool"},et=["placeholder","value"],tt={toolbox:{get title(){return r.t("input.toolboxTitle")},icon:'<svg width="18" height="18" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><rect x="3" y="6" width="18" height="12" rx="2" ry="2" fill="none" stroke="currentColor" stroke-width="2"/><path d="M8 12h8" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg>'},propertyPanel:{get title(){return r.t("input.propertyPanelTitle")},get fields(){return[{key:"placeholder",label:r.t("input.properties.placeholder"),placeholder:r.t("input.defaultPlaceholder")},{key:"value",label:r.t("input.properties.value"),placeholder:r.t("input.properties.valuePlaceholder")}]}},createInitialProps:()=>({placeholder:r.t("input.defaultPlaceholder"),value:""}),normalizeProps:e=>({edit:e.edit??!1,placeholder:e.placeholder??"",value:e.value??""}),serialize:e=>({placeholder:e.placeholder??"",value:e.value??""})},at=ae({__name:"MInput",props:{edit:{type:Boolean},placeholder:{},value:{},onChange:{type:Function},onToolChange:{type:Function}},setup(e){const t=e;function s(c){var T,M;const h={edit:t.edit,placeholder:t.placeholder??"",value:t.value??"",...c};(T=t.onToolChange)==null||T.call(t,h),(M=t.onChange)==null||M.call(t,h)}return(c,h)=>(f(),g("div",Ze,[S("input",{"data-testid":"editor-input-control",class:"ce-input-tool__control",type:"text",placeholder:e.placeholder,value:e.value,onInput:h[0]||(h[0]=T=>s({value:T.target.value}))},null,40,et)]))}}),oe=(e,t)=>{const s=e.__vccOpts||e;for(const[c,h]of t)s[c]=h;return s},ot=oe(at,[["__scopeId","data-v-38751236"]]),nt=["href","target","rel"],lt={toolbox:{get title(){return r.t("link.toolboxTitle")},icon:'<svg width="18" height="18" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M10.6 13.4a4 4 0 0 0 5.7 0l2.1-2.1a4 4 0 0 0-5.7-5.7l-1.2 1.2" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"/><path d="M13.4 10.6a4 4 0 0 0-5.7 0l-2.1 2.1a4 4 0 0 0 5.7 5.7l1.2-1.2" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg>'},propertyPanel:{get title(){return r.t("link.propertyPanelTitle")},get fields(){return[{key:"text",label:r.t("link.properties.text"),placeholder:r.t("link.defaultText")},{key:"url",label:r.t("link.properties.url"),placeholder:r.t("link.defaultUrl")},{key:"open",label:r.t("link.properties.open"),type:"checkbox"}]}},createInitialProps:()=>({text:r.t("link.defaultText"),url:r.t("link.defaultUrl"),open:!1}),normalizeProps:e=>{var t,s;return{edit:e.edit??!1,text:((t=e.text)==null?void 0:t.trim())||r.t("link.defaultText"),url:((s=e.url)==null?void 0:s.trim())||r.t("link.defaultUrl"),open:e.open===!0}},serialize:e=>{var t,s;return{text:((t=e.text)==null?void 0:t.trim())||r.t("link.defaultText"),url:((s=e.url)==null?void 0:s.trim())||r.t("link.defaultUrl"),open:e.open===!0}}},rt=ae({__name:"MLink",props:{edit:{type:Boolean},text:{},url:{},open:{type:Boolean},onChange:{type:Function},onToolChange:{type:Function}},setup(e){const t=e,{t:s}=Ce(),c=F(null),h=D(()=>{var b;return((b=t.text)==null?void 0:b.trim())||s("link.defaultText")}),T=D(()=>O(t.url??"")),M=D(()=>t.open?"_blank":void 0),E=D(()=>t.open?"noopener noreferrer":void 0);let k=null;function x(){k!==null&&(window.clearTimeout(k),k=null)}function C(){var B;const b=c.value;if(!b)return;const y=b.closest(".ce-block"),N=(B=b.closest(".codex-editor"))==null?void 0:B.querySelector(".ce-toolbar"),L=N==null?void 0:N.querySelector(".ce-toolbar__plus");if(!y||!N||!L)return;const $=y.getBoundingClientRect(),H=b.getBoundingClientRect(),ee=L.getBoundingClientRect().height||26,W=y.offsetTop+(H.top-$.top)+(H.height-ee)/2;N.style.top=`${Math.round(W)}px`}function w(){x(),k=window.setTimeout(()=>{C()},0)}function O(b){const y=b.trim();if(!y)return"#";if(y.startsWith("//"))return`https:${y}`;const N=y.match(/^([a-z][a-z\d+.-]*):/i);if(!N)return y;const L=N[1].toLowerCase();return["http","https","mailto","tel"].includes(L)?y:"#"}function V(b){var N,L;const y={edit:t.edit,text:t.text??"",url:t.url??"",open:t.open??!1,...b};(N=t.onToolChange)==null||N.call(t,y),(L=t.onChange)==null||L.call(t,y)}function J(b){(t.edit||T.value==="#")&&b.preventDefault(),V({text:h.value,url:t.url??"",open:t.open??!1})}return xe(()=>{ue(()=>{var b,y;(b=c.value)==null||b.addEventListener("mouseenter",w),(y=c.value)==null||y.addEventListener("mousemove",w)})}),Te(()=>{var b,y;x(),(b=c.value)==null||b.removeEventListener("mouseenter",w),(y=c.value)==null||y.removeEventListener("mousemove",w)}),(b,y)=>(f(),g("span",{ref_key:"rootRef",ref:c,class:"ce-link-tool","data-testid":"editor-link-tool"},[S("a",{class:"ce-link-tool__anchor","data-testid":"editor-link-value",href:T.value,target:M.value,rel:E.value,onClick:J},z(h.value),9,nt)],512))}}),it=oe(rt,[["__scopeId","data-v-e56db1bc"]]),st={toolbox:{get title(){return r.t("tag.toolboxTitle")},icon:'<svg width="18" height="18" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><rect x="4" y="7" width="16" height="10" rx="5" ry="5" fill="none" stroke="currentColor" stroke-width="2"/><circle cx="8" cy="12" r="1.4" fill="currentColor"/></svg>'},propertyPanel:{get title(){return r.t("tag.propertyPanelTitle")},get fields(){return[{key:"tagName",label:r.t("tag.properties.tagName"),placeholder:r.t("tag.defaultTagName")},{key:"type",label:r.t("tag.properties.type"),type:"select",options:[{label:r.t("tag.types.default"),value:""},{label:r.t("tag.types.primary"),value:"primary"},{label:r.t("tag.types.success"),value:"success"},{label:r.t("tag.types.info"),value:"info"},{label:r.t("tag.types.warning"),value:"warning"},{label:r.t("tag.types.danger"),value:"danger"}]},{key:"size",label:r.t("tag.properties.size"),type:"select",options:[{label:r.t("tag.sizes.default"),value:""},{label:r.t("tag.sizes.large"),value:"large"},{label:r.t("tag.sizes.medium"),value:"default"},{label:r.t("tag.sizes.small"),value:"small"}]},{key:"color",label:r.t("tag.properties.color"),placeholder:r.t("tag.properties.colorPlaceholder")},{key:"closable",label:r.t("tag.properties.closable"),type:"checkbox"}]}},createInitialProps:()=>({tagName:r.t("tag.defaultTagName"),closable:!1,size:"",color:"",type:"success"}),normalizeProps:e=>{var t;return{edit:e.edit??!1,tagName:((t=e.tagName)==null?void 0:t.trim())||r.t("tag.defaultTagName"),closable:e.closable===!0,size:e.size??"",color:e.color??"",type:e.type??"success"}},serialize:e=>{var t;return{tagName:((t=e.tagName)==null?void 0:t.trim())||r.t("tag.defaultTagName"),closable:e.closable??!1,size:e.size??"",color:e.color??"",type:e.type??""}}},ct=ae({__name:"MTag",props:{edit:{type:Boolean},tagName:{},closable:{type:Boolean},size:{},color:{},type:{},onChange:{type:Function},onToolChange:{type:Function}},setup(e){const t=e,s=F(null);let c=null;function h(x){var w,O;const C={edit:t.edit,tagName:t.tagName??"",closable:t.closable??!1,size:t.size??"",color:t.color??"",type:t.type??"",...x};(w=t.onToolChange)==null||w.call(t,C),(O=t.onChange)==null||O.call(t,C)}function T(){h({closable:t.closable??!1})}function M(){c!==null&&(window.clearTimeout(c),c=null)}function E(){var N;const x=s.value;if(!x)return;const C=x.closest(".ce-block"),w=(N=x.closest(".codex-editor"))==null?void 0:N.querySelector(".ce-toolbar"),O=w==null?void 0:w.querySelector(".ce-toolbar__plus");if(!C||!w||!O)return;const V=C.getBoundingClientRect(),J=x.getBoundingClientRect(),b=O.getBoundingClientRect().height||26,y=C.offsetTop+(J.top-V.top)+(J.height-b)/2;w.style.top=`${Math.round(y)}px`}function k(){M(),c=window.setTimeout(()=>{E()},0)}return xe(()=>{ue(()=>{var x,C;(x=s.value)==null||x.addEventListener("mouseenter",k),(C=s.value)==null||C.addEventListener("mousemove",k)})}),Te(()=>{var x,C;M(),(x=s.value)==null||x.removeEventListener("mouseenter",k),(C=s.value)==null||C.removeEventListener("mousemove",k)}),(x,C)=>(f(),g("div",{ref_key:"rootRef",ref:s,class:"ce-tag-tool","data-testid":"editor-tag-tool"},[Fe(Y(Ue),{"data-testid":"editor-tag-value",closable:e.closable,size:e.size||void 0,color:e.color||void 0,type:e.type||void 0,onClose:T},{default:De(()=>[Ie(z(e.tagName),1)]),_:1},8,["closable","size","color","type"])],512))}}),dt=oe(ct,[["__scopeId","data-v-ee7d9d5d"]]),Je={MInput:{component:he(ot),...tt},MLink:{component:he(it),...lt},MTag:{component:he(dt),...st}};function ut(){return Object.entries(Je)}function I(e){return Je[e]}function Le(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID().slice(0,10):Math.random().toString(36).slice(2,12)}function Z(e,t=Le()){return{id:t,type:"paragraph",data:{text:e}}}function j(e){return typeof e.data.text=="string"?e.data.text:""}function fe(){return[Z("")]}function pt(e){return JSON.parse(JSON.stringify(e))}function pe(e){return typeof e!="object"||e===null||Array.isArray(e)?{}:pt(e)}function de(e){return{id:e.id,type:e.type,data:pe(e.data)}}function ye(e){const t=[];for(const s of e){if(s.type==="paragraph"){const c=t[t.length-1];(c==null?void 0:c.type)==="paragraph"?c.data.text=j(c)+j(s):t.push(Z(j(s),s.id));continue}t.push(de(s))}return t.length?t:fe()}function X(e){if(!Array.isArray(e))return fe();const t=[];return e.forEach(s=>{if(typeof s!="object"||s===null)return;const c=s;if(typeof c.id!="string"||typeof c.type!="string"||typeof c.data!="object"||c.data===null||Array.isArray(c.data))return;const h={id:c.id,type:c.type,data:pe(c.data)};t.push(h.type==="paragraph"?Z(j(h),h.id):h)}),ye(t)}const ft={class:"ce-advance-input-tool","data-testid":"editor-advance-input-tool"},mt={key:0,class:"ce-advance-input-tool__editor-shell"},gt=["data-testid","onMousedown"],ht={key:1,class:"ce-advance-input-tool__preview","data-testid":"preview-advance-input-value"},vt={key:0,class:"ce-advance-input-tool__preview-text"},yt={key:1,class:"ce-advance-input-tool__preview-token"},bt={class:"ce-advance-input-tool__dialog-header"},kt={class:"ce-advance-input-tool__dialog-title","data-testid":"advance-input-embedded-property-title"},_t={type:"submit",class:"ce-advance-input-tool__dialog-close","data-testid":"advance-input-embedded-property-close"},xt={key:0,class:"ce-advance-input-tool__dialog-body"},Tt=["checked","data-testid","onChange"],Ct={class:"ce-advance-input-tool__dialog-label"},St={class:"ce-advance-input-tool__dialog-label"},wt=["value","data-testid","onChange"],Nt=["value"],Pt={class:"ce-advance-input-tool__dialog-label"},Et=["value","placeholder","data-testid","onInput"],ea={toolbox:{get title(){return r.t("advanceInput.toolboxTitle")},icon:'<svg width="18" height="18" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><rect x="3" y="5" width="18" height="14" rx="3" ry="3" fill="none" stroke="currentColor" stroke-width="2"/><path d="M7 10h5M7 14h3M14 10h3M14 14h3" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg>'},createInitialProps:()=>({value:fe()}),normalizeProps:e=>({edit:e.edit??!1,value:X(e.value)}),serialize:e=>({value:X(e.value)})},Rt=ae({__name:"MAdvanceInput",props:{edit:{type:Boolean},value:{},onChange:{type:Function},onToolChange:{type:Function}},setup(e){const t=e,{t:s}=Ce(),c=F(null),h=F(null),T=F(!1),M=F({left:0,top:0}),E=F(null),k=new Map;let x=!1,C="";function w(l){return ye(l)}function O(l){return JSON.stringify(w(l))}function V(l){var a;const o=I(l);if(!o)throw new Error(`Unknown inline component "${l}".`);const n=o.normalizeProps({...((a=o.createInitialProps)==null?void 0:a.call(o))??{},edit:!1});return{id:Le(),type:l,data:pe(o.serialize(n))}}function J(){k.forEach(l=>{l.app.unmount()}),k.clear()}function b(l){var P;const o=de(l),n=I(o.type);if(!n){const R=document.createElement("span");return R.className="ce-advance-input-tool__token ce-advance-input-tool__token--unknown",R.dataset.segmentType="component",R.dataset.blockId=o.id,R.dataset.block=JSON.stringify(o),R.textContent=o.type,R}const a=document.createElement("span");a.className="ce-advance-input-tool__token",a.dataset.segmentType="component",a.dataset.blockId=o.id,a.dataset.block=JSON.stringify(o),a.contentEditable="false",a.setAttribute("data-testid",`editor-advance-input-token-${o.type}`);const d=document.createElement("span");d.className="ce-advance-input-tool__token-mount",a.appendChild(d);const _=n.normalizeProps({...((P=n.createInitialProps)==null?void 0:P.call(n))??{},...o.data,edit:!1}),v=Pe(n.component,_);return v.mount(d),a.addEventListener("click",R=>{R.preventDefault(),R.stopPropagation(),ge(o.id)}),k.set(o.id,{app:v,block:de(o),mountPoint:d,wrapper:a}),a}function y(l,o=!1){const n=c.value;if(!n)return;x=!0,J(),n.innerHTML="";const a=X(l);for(const d of a){if(d.type==="paragraph"){n.appendChild(document.createTextNode(j(d)));continue}n.appendChild(b(d)),n.appendChild(document.createTextNode("​"))}n.childNodes.length||n.appendChild(document.createTextNode("")),C=O(a),x=!1,o&&ue(()=>{H(n)})}function N(){const l=c.value;if(!l)return fe();const o=[];return l.childNodes.forEach(n=>{if(n.nodeType===Node.TEXT_NODE){const a=(n.textContent??"").replace(/\u200B/g,"");o.push(Z(a));return}if(n instanceof HTMLElement){if(n.dataset.segmentType==="component"){const a=n.dataset.blockId??"",d=k.get(a),_=n.dataset.block?JSON.parse(n.dataset.block):null,v=(d==null?void 0:d.block)??_;v&&o.push(de(v));return}o.push(Z((n.textContent??"").replace(/\u200B/g,"")))}}),ye(o)}function L(l){var n,a;C=O(l);const o={edit:t.edit,value:l};(n=t.onToolChange)==null||n.call(t,o),(a=t.onChange)==null||a.call(t,o)}function $(){if(x)return;const l=w(N());O(l)!==C&&L(l)}function H(l){const o=window.getSelection();if(!o)return;const n=document.createRange();n.selectNodeContents(l),n.collapse(!1),o.removeAllRanges(),o.addRange(n)}function ee(){const l=c.value;l&&l.focus()}function W(){const l=c.value,o=window.getSelection();if(!l||!o||o.rangeCount===0)return null;const n=o.getRangeAt(0);return l.contains(n.startContainer)?{root:l,selection:o,range:n}:null}function B(){const l=W();if(!l||!l.selection.isCollapsed){T.value=!1;return}const{range:o,root:n}=l;let a="";if(o.startContainer.nodeType===Node.TEXT_NODE){const v=o.startContainer.textContent??"";o.startOffset>0&&(a=v[o.startOffset-1]??"")}else if(o.startContainer instanceof HTMLElement&&o.startOffset>0){const v=o.startContainer.childNodes[o.startOffset-1];if((v==null?void 0:v.nodeType)===Node.TEXT_NODE){const P=v.textContent??"";a=P[P.length-1]??""}}if(a!=="/"){T.value=!1;return}const d=o.getBoundingClientRect(),_=n.getBoundingClientRect();M.value={left:Math.max(0,d.left-_.left),top:Math.max(_.height+8,d.bottom-_.top+8)},T.value=!0}function ne(){$(),B()}function le(){B()}function re(){window.setTimeout(()=>{T.value=!1},120)}function ie(l){var a,d;if(l.key==="Enter"){l.preventDefault();return}if(l.key!=="Backspace")return;const o=W();if(!o||!o.selection.isCollapsed)return;const{range:n}=o;if(n.startContainer.nodeType===Node.TEXT_NODE){const _=n.startContainer;if(n.startOffset<=0||_.data[n.startOffset-1]!=="​")return;const v=_.previousSibling;if(!(v instanceof HTMLElement)||v.dataset.segmentType!=="component")return;l.preventDefault();const P=v.dataset.blockId??"";(a=k.get(P))==null||a.app.unmount(),k.delete(P),v.remove(),_.deleteData(n.startOffset-1,1),$();return}if(n.startContainer instanceof HTMLElement&&n.startOffset>0){const _=n.startContainer.childNodes[n.startOffset-1];if(!(_ instanceof HTMLElement)||_.dataset.segmentType!=="component")return;l.preventDefault();const v=_.dataset.blockId??"";(d=k.get(v))==null||d.app.unmount(),k.delete(v),_.remove(),$()}}function me(l){var n;l.preventDefault();const o=((n=l.clipboardData)==null?void 0:n.getData("text/plain"))??"";document.execCommand("insertText",!1,o.replace(/\n/g," "))}function se(l){const o=W();if(!o)return;const{selection:n,range:a}=o,d=V(l);if(a.startContainer.nodeType===Node.TEXT_NODE){const R=a.startContainer;a.startOffset>0&&R.data[a.startOffset-1]==="/"&&(R.deleteData(a.startOffset-1,1),a.setStart(R,a.startOffset-1),a.collapse(!0))}const _=b(d),v=document.createTextNode("​");a.insertNode(v),a.insertNode(_);const P=document.createRange();P.setStart(v,1),P.collapse(!0),n.removeAllRanges(),n.addRange(P),T.value=!1,$(),ee()}function ge(l){var _,v,P,R;const o=k.get(l);if(!o)return;const n=I(o.block.type),a=((_=n==null?void 0:n.propertyPanel)==null?void 0:_.fields)??[];if(!n||!a.length)return;const d=n.normalizeProps({...((v=n.createInitialProps)==null?void 0:v.call(n))??{},...o.block.data,edit:!1});E.value={blockId:l,title:((P=n.propertyPanel)==null?void 0:P.title)||s("editor.propertyDialogTitle"),type:o.block.type,fields:a,values:Object.fromEntries(a.map(Se=>[Se.key,d[Se.key]??""]))},(R=h.value)==null||R.showModal()}function i(){var l;(l=h.value)==null||l.close(),E.value=null}function u(l,o){var P;const n=E.value;if(!n)return;n.values[l]=o,E.value={...n,values:{...n.values}};const a=k.get(n.blockId),d=I(n.type);if(!a||!d)return;const _=d.normalizeProps({...((P=d.createInitialProps)==null?void 0:P.call(d))??{},...n.values,edit:!1});a.block={...a.block,data:pe(d.serialize(_))},a.wrapper.dataset.block=JSON.stringify(a.block),a.app.unmount();const v=Pe(d.component,_);v.mount(a.mountPoint),a.app=v,$()}function m(){return X(t.value)}function p(l){var o;return((o=I(l))==null?void 0:o.component)??null}function G(l){return j(l)}function Q(l){var n;const o=I(l.type);return o?o.normalizeProps({...((n=o.createInitialProps)==null?void 0:n.call(o))??{},...l.data,edit:!1}):{edit:!1}}return xe(()=>{t.edit&&y(t.value)}),Te(()=>{J()}),we(()=>t.edit,l=>{if(!l){T.value=!1;return}ue(()=>{y(t.value)})}),we(()=>t.value,l=>{if(!t.edit)return;const o=X(l);O(o)!==C&&y(o)}),(l,o)=>{var n;return f(),g("div",ft,[e.edit?(f(),g("div",mt,[S("div",{ref_key:"editableRef",ref:c,class:"ce-advance-input-tool__editor","data-testid":"editor-advance-input-content",contenteditable:"true",spellcheck:"false",onInput:ne,onClick:le,onKeyup:B,onKeydown:ie,onPaste:me,onBlur:re},null,544),T.value?(f(),g("div",{key:0,class:"ce-advance-input-tool__menu","data-testid":"editor-advance-input-menu",style:q({left:`${M.value.left}px`,top:`${M.value.top}px`})},[(f(!0),g(A,null,U(Y(ut)(),([a,d])=>(f(),g("button",{key:a,type:"button",class:"ce-advance-input-tool__menu-item","data-testid":`editor-advance-input-menu-item-${a}`,onMousedown:Ne(_=>se(a),["prevent"])},z(d.toolbox.title),41,gt))),128))],4)):K("",!0)])):(f(),g("div",ht,[(f(!0),g(A,null,U(m(),(a,d)=>(f(),g(A,{key:`${a.id}-${a.type}-${d}`},[a.type==="paragraph"?(f(),g("span",vt,z(G(a)),1)):(f(),g("span",yt,[(f(),Ee(Oe(p(a.type)),Re({ref_for:!0},Q(a)),null,16))]))],64))),128))])),S("dialog",{ref_key:"embeddedDialogRef",ref:h,class:"ce-advance-input-tool__dialog","data-testid":"advance-input-embedded-property-dialog",onClose:o[0]||(o[0]=a=>E.value=null)},[S("form",{method:"dialog",class:"ce-advance-input-tool__dialog-panel",onSubmit:Ne(i,["prevent"])},[S("div",bt,[S("h3",kt,z((n=E.value)==null?void 0:n.title),1),S("button",_t,z(Y(s)("editor.close")),1)]),E.value?(f(),g("div",xt,[(f(!0),g(A,null,U(E.value.fields,a=>(f(),g("label",{key:a.key,class:ce(["ce-advance-input-tool__dialog-field",{"ce-advance-input-tool__dialog-field--checkbox":a.type==="checkbox"}])},[a.type==="checkbox"?(f(),g(A,{key:0},[S("input",{class:"ce-advance-input-tool__dialog-checkbox",type:"checkbox",checked:E.value.values[a.key]===!0,"data-testid":`advance-input-embedded-property-input-${a.key}`,onChange:d=>u(a.key,d.target.checked)},null,40,Tt),S("span",Ct,z(a.label),1)],64)):a.type==="select"?(f(),g(A,{key:1},[S("span",St,z(a.label),1),S("select",{class:"ce-advance-input-tool__dialog-input",value:String(E.value.values[a.key]??""),"data-testid":`advance-input-embedded-property-input-${a.key}`,onChange:d=>u(a.key,d.target.value)},[(f(!0),g(A,null,U(a.options??[],d=>(f(),g("option",{key:d.value,value:d.value},z(d.label),9,Nt))),128))],40,wt)],64)):(f(),g(A,{key:2},[S("span",Pt,z(a.label),1),S("input",{class:"ce-advance-input-tool__dialog-input",type:"text",value:String(E.value.values[a.key]??""),placeholder:a.placeholder,"data-testid":`advance-input-embedded-property-input-${a.key}`,onInput:d=>u(a.key,d.target.value)},null,40,Et)],64))],2))),128))])):K("",!0)],32)],544)])}}}),ta=oe(Rt,[["__scopeId","data-v-5ab6cc48"]]),Ot={class:"ce-advance-table-tool","data-testid":"editor-advance-table-tool"},Mt={class:"ce-advance-table-tool__scroller"},zt={class:"ce-advance-table-tool__table","data-testid":"advance-table"},At=["checked","aria-label"],Jt=["data-testid"],Lt=["data-testid"],$t=["data-testid"],Bt=["checked","aria-label","onChange"],Ft=["data-testid"],Dt=["data-testid"],It={key:0,class:"ce-advance-table-tool__cell-text"},Ut={key:1,class:"ce-advance-table-tool__cell-token"},jt={key:0},Vt=["colspan"];function ve(e,t){return[Z(e,t)]}function Ht(){return[{id:"advance-table-default-tag",type:"MTag",data:{tagName:"{{tag}}",type:"{{tagType}}",size:"small",color:"",closable:!1}}]}function Wt(){return[{id:"advance-table-default-link",type:"MLink",data:{text:"{{linkText}}",url:"{{linkUrl}}",open:!1}}]}function be(){return[{columnName:r.t("advanceTable.defaultColumns.name"),columnContent:ve("{{name}}","advance-table-default-name"),width:180,fixed:"left"},{columnName:r.t("advanceTable.defaultColumns.status"),columnContent:ve("{{status}}","advance-table-default-status"),width:140,fixed:null},{columnName:r.t("advanceTable.defaultColumns.tag"),columnContent:Ht(),width:120,fixed:null},{columnName:r.t("advanceTable.defaultColumns.owner"),columnContent:ve("{{owner}}","advance-table-default-owner"),width:160,fixed:null},{columnName:r.t("advanceTable.defaultColumns.link"),columnContent:Wt(),width:180,fixed:null}]}function $e(){return[{name:r.t("advanceTable.defaultRows.first.name"),status:r.t("advanceTable.defaultRows.first.status"),tag:r.t("advanceTable.defaultRows.first.tag"),tagType:"warning",owner:r.t("advanceTable.defaultRows.first.owner"),linkText:r.t("advanceTable.defaultRows.first.linkText"),linkUrl:r.t("advanceTable.defaultRows.first.linkUrl")},{name:r.t("advanceTable.defaultRows.second.name"),status:r.t("advanceTable.defaultRows.second.status"),tag:r.t("advanceTable.defaultRows.second.tag"),tagType:"success",owner:r.t("advanceTable.defaultRows.second.owner"),linkText:r.t("advanceTable.defaultRows.second.linkText"),linkUrl:r.t("advanceTable.defaultRows.second.linkUrl")}]}const aa={toolbox:{get title(){return r.t("advanceTable.toolboxTitle")},icon:'<svg width="18" height="18" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><rect x="3" y="5" width="18" height="14" rx="2" fill="none" stroke="currentColor" stroke-width="2"/><path d="M3 10h18M8 5v14M16 5v14" stroke="currentColor" stroke-width="2"/></svg>'},propertyPanel:{get title(){return r.t("advanceTable.propertyPanelTitle")},get fields(){return[{key:"index",label:r.t("advanceTable.properties.index"),type:"checkbox"},{key:"selection",label:r.t("advanceTable.properties.selection"),type:"checkbox"}]}},createInitialProps:()=>({index:!1,selection:!1,columns:be(),data:$e()}),normalizeProps:e=>({edit:e.edit??!1,index:e.index===!0,selection:e.selection===!0,columns:ke(e.columns),data:_e(e.data)}),serialize:e=>({index:e.index===!0,selection:e.selection===!0,columns:ke(e.columns),data:_e(e.data)})};function ke(e){if(!Array.isArray(e)||!e.length)return be();const t=e.filter(s=>typeof s=="object"&&s!==null).map((s,c)=>{var h;return{columnName:((h=s.columnName)==null?void 0:h.trim())||`${r.t("advanceTable.defaultColumnName")}${c+1}`,columnContent:X(s.columnContent),width:qt(s.width),fixed:Kt(s.fixed)}});return t.length?t:be()}function _e(e){return Array.isArray(e)?e.filter(t=>typeof t=="object"&&t!==null&&!Array.isArray(t)):$e()}function qt(e){return typeof e!="number"||!Number.isFinite(e)||e<=0?null:Math.round(e)}function Kt(e){return e==="left"||e==="right"?e:null}const Xt=ae({__name:"MAdvanceTable",props:{edit:{type:Boolean},index:{type:Boolean},selection:{type:Boolean},columns:{},data:{},onChange:{type:Function},onToolChange:{type:Function}},setup(e){const t=e,{t:s}=Ce(),c=F(new Set),h=D(()=>ke(t.columns)),T=D(()=>_e(t.data)),M=D(()=>t.selection===!0),E=D(()=>t.index===!0),k=44,x=56,C=160;function w(i){if(i==null)return"";if(typeof i=="string")return i;if(typeof i=="number"||typeof i=="boolean")return String(i);try{return JSON.stringify(i)}catch{return String(i)}}function O(i,u){return i.replace(/\{\{\s*([\w.-]+)\s*\}\}/g,(m,p)=>w(V(u,p)))}function V(i,u){return u.split(".").reduce((m,p)=>typeof m!="object"||m===null||!(p in m)?"":m[p],i)}function J(i,u){return typeof i=="string"?O(i,u):Array.isArray(i)?i.map(m=>J(m,u)):typeof i=="object"&&i!==null?Object.fromEntries(Object.entries(i).map(([m,p])=>[m,J(p,u)])):i}function b(i,u){return X(u.columnContent).map(m=>m.type==="paragraph"?{...m,data:{text:O(j(m),i)}}:{...m,data:J(m.data,i)})}function y(i){var u;return((u=I(i))==null?void 0:u.component)??null}function N(i){var m;const u=I(i.type);return u?u.normalizeProps({...((m=u.createInitialProps)==null?void 0:m.call(u))??{},...i.data,edit:!1}):{edit:!1}}function L(i){return j(i)}function $(i){return i.width??null}function H(i){return $(i)??C}function ee(i){let u=0;M.value&&(u+=k),E.value&&(u+=x);for(let m=0;m<i;m+=1){const p=h.value[m];(p==null?void 0:p.fixed)==="left"&&(u+=H(p))}return u}function W(i){let u=0;for(let m=h.value.length-1;m>i;m-=1){const p=h.value[m];(p==null?void 0:p.fixed)==="right"&&(u+=H(p))}return u}function B(i,u){const m=$(i),p={};return m&&(p.width=`${m}px`,p.minWidth=`${m}px`),i.fixed==="left"&&(p.position="sticky",p.left=`${ee(u)}px`),i.fixed==="right"&&(p.position="sticky",p.right=`${W(u)}px`),p}function ne(i){return{"ce-advance-table-tool__cell--fixed-left":i.fixed==="left","ce-advance-table-tool__cell--fixed-right":i.fixed==="right"}}function le(){return{width:`${k}px`,minWidth:`${k}px`,left:"0px"}}function re(){return{width:`${x}px`,minWidth:`${x}px`,left:`${M.value?k:0}px`}}function ie(i){return c.value.has(i)}function me(i){const u=new Set(c.value);u.has(i)?u.delete(i):u.add(i),c.value=u}function se(){return T.value.length>0&&T.value.every((i,u)=>c.value.has(u))}function ge(){if(se()){c.value=new Set;return}c.value=new Set(T.value.map((i,u)=>u))}return(i,u)=>(f(),g("div",Ot,[S("div",Mt,[S("table",zt,[S("thead",null,[S("tr",null,[e.selection?(f(),g("th",{key:0,class:"ce-advance-table-tool__cell ce-advance-table-tool__cell--header ce-advance-table-tool__cell--control ce-advance-table-tool__cell--fixed-left",style:q(le()),"data-testid":"advance-table-selection-header"},[S("input",{class:"ce-advance-table-tool__checkbox",type:"checkbox",checked:se(),"aria-label":Y(s)("advanceTable.selectAll"),onChange:ge},null,40,At)],4)):K("",!0),e.index?(f(),g("th",{key:1,class:"ce-advance-table-tool__cell ce-advance-table-tool__cell--header ce-advance-table-tool__cell--control ce-advance-table-tool__cell--fixed-left",style:q(re()),"data-testid":"advance-table-index-header"}," # ",4)):K("",!0),(f(!0),g(A,null,U(h.value,(m,p)=>(f(),g("th",{key:`header-${p}`,class:ce(["ce-advance-table-tool__cell ce-advance-table-tool__cell--header",ne(m)]),style:q(B(m,p)),"data-testid":`advance-table-header-${p}`},z(m.columnName),15,Jt))),128))])]),S("tbody",null,[(f(!0),g(A,null,U(T.value,(m,p)=>(f(),g("tr",{key:`row-${p}`,class:ce(["ce-advance-table-tool__row",{"ce-advance-table-tool__row--selected":ie(p)}]),"data-testid":`advance-table-row-${p}`},[e.selection?(f(),g("td",{key:0,class:"ce-advance-table-tool__cell ce-advance-table-tool__cell--control ce-advance-table-tool__cell--fixed-left",style:q(le()),"data-testid":`advance-table-selection-cell-${p}`},[S("input",{class:"ce-advance-table-tool__checkbox",type:"checkbox",checked:ie(p),"aria-label":Y(s)("advanceTable.selectRow"),onChange:G=>me(p)},null,40,Bt)],12,$t)):K("",!0),e.index?(f(),g("td",{key:1,class:"ce-advance-table-tool__cell ce-advance-table-tool__cell--control ce-advance-table-tool__cell--fixed-left",style:q(re()),"data-testid":`advance-table-index-cell-${p}`},z(p+1),13,Ft)):K("",!0),(f(!0),g(A,null,U(h.value,(G,Q)=>(f(),g("td",{key:`cell-${p}-${Q}`,class:ce(["ce-advance-table-tool__cell",ne(G)]),style:q(B(G,Q)),"data-testid":`advance-table-cell-${p}-${Q}`},[(f(!0),g(A,null,U(b(m,G),(l,o)=>(f(),g(A,{key:`${p}-${Q}-${l.id}-${l.type}-${o}`},[l.type==="paragraph"?(f(),g("span",It,z(L(l)),1)):(f(),g("span",Ut,[(f(),Ee(Oe(y(l.type)),Re({ref_for:!0},N(l)),null,16))]))],64))),128))],14,Dt))),128))],10,Lt))),128)),T.value.length?K("",!0):(f(),g("tr",jt,[S("td",{class:"ce-advance-table-tool__cell ce-advance-table-tool__empty",colspan:h.value.length+(e.selection?1:0)+(e.index?1:0)},z(Y(s)("advanceTable.empty")),9,Vt)]))])])])]))}}),oa=oe(Xt,[["__scopeId","data-v-6eb0809a"]]);export{dt as M,oe as _,aa as a,ea as b,lt as c,Zt as d,tt as e,oa as f,ta as g,it as h,r as i,ot as j,Yt as k,I as l,st as m,X as n,j as o,Ce as u};
@@ -0,0 +1 @@
1
+ .ce-input-tool[data-v-38751236]{display:flex;flex-direction:column;gap:8px}.ce-input-tool__control[data-v-38751236]{width:100%;border:1px solid rgb(148 163 184 / .6);border-radius:8px;padding:8px 10px;background-color:#fff;color:#0f172a;font-size:14px;line-height:20px}.ce-input-tool__control[data-v-38751236]:focus{outline:none;border-color:#6366f1;box-shadow:0 0 0 2px #6366f126}.dark{background-color:#0f172a;color:#e2e8f0;border-color:#475569e6}.ce-link-tool[data-v-e56db1bc]{display:inline-flex;align-items:center;max-width:100%;min-height:32px;vertical-align:middle}.ce-link-tool__anchor[data-v-e56db1bc]{display:inline-flex;align-items:center;min-width:0;max-width:100%;color:#2563eb;font-size:14px;line-height:20px;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px;overflow-wrap:anywhere}.ce-link-tool__anchor[data-v-e56db1bc]:hover{color:#1d4ed8}.ce-link-tool__anchor[data-v-e56db1bc]:focus-visible{outline:2px solid rgb(96 165 250);outline-offset:2px;border-radius:4px}.dark{color:#60a5fa}.dark{color:#93c5fd}.ce-tag-tool[data-v-ee7d9d5d]{display:inline-flex;align-items:center;min-height:32px;max-width:100%}.ce-tag-tool[data-v-ee7d9d5d] .el-tag{max-width:100%;line-height:20px}.ce-tag-tool[data-v-ee7d9d5d] .el-tag__content{display:inline-flex;align-items:center;min-width:0}.ce-advance-input-tool[data-v-5ab6cc48]{position:relative}.ce-advance-input-tool__editor-shell[data-v-5ab6cc48],.ce-advance-input-tool__preview[data-v-5ab6cc48]{position:relative;display:flex;align-items:center;min-height:42px;width:100%;border:1px solid rgb(148 163 184 / .6);border-radius:10px;background:#fff}.ce-advance-input-tool__editor[data-v-5ab6cc48]{width:100%;min-height:42px;padding:9px 12px;white-space:pre;overflow-x:auto;overflow-y:hidden;line-height:22px;outline:none;cursor:text}.ce-advance-input-tool__preview[data-v-5ab6cc48]{padding:9px 12px;white-space:pre;overflow-x:auto;overflow-y:hidden}.ce-advance-input-tool__editor-shell[data-v-5ab6cc48]:focus-within{border-color:#6366f1;box-shadow:0 0 0 2px #6366f126}.ce-advance-input-tool__menu[data-v-5ab6cc48]{position:absolute;z-index:20;min-width:168px;padding:6px;border:1px solid rgb(226 232 240);border-radius:12px;background:#fff;box-shadow:0 16px 40px #0f172a2e}.ce-advance-input-tool__menu-item[data-v-5ab6cc48]{display:flex;width:100%;border:0;border-radius:8px;padding:8px 10px;background:transparent;color:#0f172a;cursor:pointer;text-align:left}.ce-advance-input-tool__menu-item[data-v-5ab6cc48]:hover{background:#f1f5f9}.ce-advance-input-tool__preview-token[data-v-5ab6cc48],.ce-advance-input-tool__token[data-v-5ab6cc48]{display:inline-flex;align-items:center;margin:0 2px;vertical-align:middle}.ce-advance-input-tool__token[data-v-5ab6cc48]{border-radius:10px;cursor:pointer}.ce-advance-input-tool__token[data-v-5ab6cc48]:hover{box-shadow:0 0 0 2px #6366f12e}.ce-advance-input-tool__token--unknown[data-v-5ab6cc48]{padding:2px 8px;background:#f8fafc;color:#475569;font-size:12px}.ce-advance-input-tool__dialog[data-v-5ab6cc48]{width:min(100%,480px);border:0;border-radius:16px;padding:0;box-shadow:0 24px 80px #0f172a52}.ce-advance-input-tool__dialog[data-v-5ab6cc48]::backdrop{background:#0f172a73}.ce-advance-input-tool__dialog-panel[data-v-5ab6cc48]{margin:0;padding:20px;background:#fff}.ce-advance-input-tool__dialog-header[data-v-5ab6cc48]{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:16px}.ce-advance-input-tool__dialog-title[data-v-5ab6cc48]{margin:0;color:#0f172a;font-size:18px;font-weight:600}.ce-advance-input-tool__dialog-close[data-v-5ab6cc48]{border:0;border-radius:10px;padding:8px 12px;background:#e2e8f0;color:#334155;cursor:pointer}.ce-advance-input-tool__dialog-body[data-v-5ab6cc48]{display:flex;flex-direction:column;gap:14px}.ce-advance-input-tool__dialog-field[data-v-5ab6cc48]{display:flex;flex-direction:column;gap:6px}.ce-advance-input-tool__dialog-field--checkbox[data-v-5ab6cc48]{flex-direction:row;align-items:center;gap:10px}.ce-advance-input-tool__dialog-label[data-v-5ab6cc48]{color:#334155;font-size:13px;font-weight:600}.ce-advance-input-tool__dialog-checkbox[data-v-5ab6cc48]{width:16px;height:16px;margin:0}.ce-advance-input-tool__dialog-input[data-v-5ab6cc48]{width:100%;border:1px solid rgb(148 163 184 / .65);border-radius:10px;padding:10px 12px;background:#fff;color:#0f172a;font-size:14px;line-height:20px}.ce-advance-input-tool__dialog-input[data-v-5ab6cc48]:focus{outline:none;border-color:#6366f1;box-shadow:0 0 0 2px #6366f126}.dark{background:#0f172a;border-color:#475569e6}.dark{background:#1e293b}.dark{background:#0f172a}.dark{color:#f1f5f9}.dark{background:#334155;color:#f1f5f9}.dark{color:#cbd5e1}.dark{background:#0f172a;color:#e2e8f0;border-color:#475569e6}.ce-advance-table-tool[data-v-6eb0809a]{width:100%;color:#0f172a}.ce-advance-table-tool__scroller[data-v-6eb0809a]{width:100%;overflow:auto;border:1px solid rgb(226 232 240);border-radius:8px;background:#fff}.ce-advance-table-tool__table[data-v-6eb0809a]{width:100%;min-width:520px;border-collapse:separate;border-spacing:0;font-size:14px;line-height:20px}.ce-advance-table-tool__cell[data-v-6eb0809a]{border-right:1px solid rgb(226 232 240);border-bottom:1px solid rgb(226 232 240);padding:10px 12px;background:#fff;text-align:left;vertical-align:middle;white-space:nowrap}.ce-advance-table-tool__cell[data-v-6eb0809a]:last-child{border-right:0}.ce-advance-table-tool__cell--header[data-v-6eb0809a]{position:sticky;top:0;z-index:3;background:#f8fafc;color:#334155;font-weight:600}.ce-advance-table-tool__cell--control[data-v-6eb0809a]{padding:10px;text-align:center}.ce-advance-table-tool__cell--fixed-left[data-v-6eb0809a],.ce-advance-table-tool__cell--fixed-right[data-v-6eb0809a]{z-index:2}.ce-advance-table-tool__cell--header.ce-advance-table-tool__cell--fixed-left[data-v-6eb0809a],.ce-advance-table-tool__cell--header.ce-advance-table-tool__cell--fixed-right[data-v-6eb0809a]{z-index:4}.ce-advance-table-tool__cell--fixed-left[data-v-6eb0809a]{box-shadow:1px 0 #e2e8f0}.ce-advance-table-tool__cell--fixed-right[data-v-6eb0809a]{box-shadow:-1px 0 #e2e8f0}.ce-advance-table-tool__row--selected .ce-advance-table-tool__cell[data-v-6eb0809a]{background:#eff6ff}.ce-advance-table-tool__checkbox[data-v-6eb0809a]{width:16px;height:16px;margin:0;vertical-align:middle;accent-color:rgb(37 99 235)}.ce-advance-table-tool__cell-token[data-v-6eb0809a]{display:inline-flex;align-items:center;margin:0 2px;vertical-align:middle}.ce-advance-table-tool__empty[data-v-6eb0809a]{color:#64748b;text-align:center}.dark{color:#e2e8f0}.dark{border-color:#334155;background:#0f172a}.dark{background:#1e293b;color:#f1f5f9}.dark{box-shadow:1px 0 #334155}.dark{box-shadow:-1px 0 #334155}.dark{background:#1e3a8a59}.dark{color:#94a3b8}
@@ -0,0 +1 @@
1
+ .ce-chart-tool[data-v-c412345a]{width:100%;color:#0f172a}.ce-chart-tool__canvas[data-v-c412345a]{width:100%;height:320px;min-height:240px}.dark{color:#e2e8f0}
@@ -0,0 +1 @@
1
+ import{d as j,i as a,_ as O}from"./block-advanced-CdUL2rGG.js";import{u as V,i as q,a as I,b as J,c as W,d as X,e as H,f as U,g as G}from"./echarts-BN_iJMI5.js";import{f as K,z as Q,F as Y,B as Z,o as P,j as ee,l as te,r as A,e as z,A as ne}from"./vue-vendor-CGusfGYN.js";function v(){return a.locale==="en"?["Mon","Tue","Wed","Thu","Fri"]:["周一","周二","周三","周四","周五"]}function C(){return[{name:a.t("chart.defaultSeriesName"),data:[120,200,150,80,70]}]}function re(e){return e.map(r=>({name:r.name,data:[...r.data]}))}function oe(e){return e==="bar"||e==="pie"?e:"line"}function ie(e){if(!Array.isArray(e))return v();const r=e.filter(n=>typeof n=="string").map(n=>n.trim()).filter(Boolean);return r.length?r:v()}function ae(e){if(typeof e=="number"&&Number.isFinite(e))return e;if(typeof e=="string"&&e.trim()){const r=Number(e);return Number.isFinite(r)?r:0}return 0}function se(e){if(!Array.isArray(e))return C();const r=e.filter(n=>typeof n=="object"&&n!==null&&!Array.isArray(n)).map((n,u)=>{const x=Array.isArray(n.data)?n.data.map(h=>ae(h)):[];return{name:typeof n.name=="string"&&n.name.trim()?n.name.trim():`${a.t("chart.defaultSeriesName")}${u+1}`,data:x}}).filter(n=>n.data.length>0);return r.length?r:C()}function T(e){return{edit:e.edit??!1,type:oe(e.type),xAxis:ie(e.xAxis),series:re(se(e.series))}}const pe=j({toolbox:{get title(){return a.t("chart.toolboxTitle")},icon:'<svg width="18" height="18" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><rect x="4" y="4" width="16" height="16" rx="2" fill="none" stroke="currentColor" stroke-width="2"/><path d="M8 16V11M12 16V8M16 16v-6" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg>'},propertyPanel:{get title(){return a.t("chart.propertyPanelTitle")},get fields(){return[{key:"type",label:a.t("chart.properties.type"),type:"select",options:[{label:a.t("chart.types.line"),value:"line"},{label:a.t("chart.types.bar"),value:"bar"},{label:a.t("chart.types.pie"),value:"pie"}]},{key:"xAxis",label:a.t("chart.properties.xAxis"),type:"textarea",valueType:"json",validationMessage:a.t("chart.validation.invalidJson")},{key:"series",label:a.t("chart.properties.series"),type:"textarea",valueType:"json",validationMessage:a.t("chart.validation.invalidJson")}]}},createInitialProps:()=>({type:"line",xAxis:v(),series:C()}),normalizeProps:T,serialize:e=>{const r=T(e);return{type:r.type,xAxis:r.xAxis,series:r.series}}}),le=K({__name:"MChart",props:{edit:{type:Boolean},type:{},xAxis:{},series:{},onChange:{type:Function},onToolChange:{type:Function}},setup(e){V([I,J,W,X,H,U,G]);const r=e,n=A(null),u=A(null),x=A(!1),h=z(()=>T(r)),M=z(()=>N(h.value,x.value));let s=null,d=null,p=null,m=null;function B(t,i){return Array.from({length:i},(o,c)=>t[c]??0)}function S(t){return t?"#cbd5e1":"#475569"}function L(t){return t?"#475569":"#cbd5e1"}function $(t){return t?"rgba(71, 85, 105, 0.55)":"rgba(203, 213, 225, 0.72)"}function F(t,i){if(i<=1)return["0%","68%"];const o=18,f=(72-o)/i,l=o+t*f,y=l+f*.78;return[`${Math.round(l)}%`,`${Math.round(y)}%`]}function N(t,i){const o=S(i),c=L(i),f=$(i);return t.type==="pie"?{color:["#2563eb","#16a34a","#f59e0b","#dc2626","#7c3aed","#0891b2"],tooltip:{trigger:"item"},legend:{top:0,textStyle:{color:o}},series:t.series.map((l,y)=>({name:l.name,type:"pie",radius:F(y,t.series.length),center:["50%","56%"],data:t.xAxis.map((b,g)=>({name:b,value:l.data[g]??0})),emphasis:{focus:"self"}}))}:{color:["#2563eb","#16a34a","#f59e0b","#dc2626","#7c3aed","#0891b2"],tooltip:{trigger:"axis"},legend:{top:0,textStyle:{color:o}},grid:{top:44,right:24,bottom:32,left:44,containLabel:!0},xAxis:{type:"category",data:t.xAxis,axisLabel:{color:o},axisLine:{lineStyle:{color:c}}},yAxis:{type:"value",axisLabel:{color:o},axisLine:{lineStyle:{color:c}},splitLine:{lineStyle:{color:f}}},series:t.series.map(l=>({name:l.name,type:t.type,data:B(l.data,t.xAxis.length),smooth:t.type==="line",emphasis:{focus:"series"}}))}}function w(){x.value=document.documentElement.classList.contains("dark")}function D(){u.value&&(s||(s=q(u.value,void 0,{renderer:"canvas"})),s.setOption(M.value,!0),s.resize())}async function R(){await ne(),D()}function _(){m!==null&&(window.clearTimeout(m),m=null)}function E(){var g;m=null;const t=n.value;if(!t)return;const i=t.closest(".ce-block"),o=(g=t.closest(".codex-editor"))==null?void 0:g.querySelector(".ce-toolbar"),c=o==null?void 0:o.querySelector(".ce-toolbar__plus");if(!i||!o||!c)return;const f=i.getBoundingClientRect(),l=t.getBoundingClientRect(),y=c.getBoundingClientRect().height||26,b=i.offsetTop+(l.top-f.top)+(l.height-y)/2;o.style.top=`${Math.max(0,Math.round(b))}px`}function k(){_(),m=window.setTimeout(()=>{E()},0)}return Q(async()=>{w(),await R(),u.value&&typeof ResizeObserver<"u"&&(d=new ResizeObserver(()=>{s==null||s.resize()}),d.observe(u.value)),p=new MutationObserver(()=>{w()}),p.observe(document.documentElement,{attributes:!0,attributeFilter:["class"]})}),Y(M,()=>{R()}),Z(()=>{_(),d==null||d.disconnect(),d=null,p==null||p.disconnect(),p=null,s==null||s.dispose(),s=null}),(t,i)=>(P(),ee("div",{ref_key:"rootRef",ref:n,class:"ce-chart-tool","data-testid":"editor-chart-tool",onMouseenter:k,onMousemove:k},[te("div",{ref_key:"chartRef",ref:u,class:"ce-chart-tool__canvas","data-testid":"editor-chart-canvas"},null,512)],544))}}),fe=O(le,[["__scopeId","data-v-c412345a"]]);export{fe as M,pe as m};
@@ -0,0 +1 @@
1
+ var Ft=Object.defineProperty;var Pt=(e,t,a)=>t in e?Ft(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a;var se=(e,t,a)=>Pt(e,typeof t!="symbol"?t+"":t,a);import{f as Et,r as J,K as he,L as Mt,F as xt,o as l,j as p,l as c,C as u,u as y,n as G,p as D,t as k,G as F,H as P,v as zt,e as I}from"./vue-vendor-CGusfGYN.js";import{u as Lt,d as Bt,i as Rt,_ as Kt}from"./block-advanced-CdUL2rGG.js";function T(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function x(e){return e===null||typeof e=="string"||typeof e=="boolean"?!0:typeof e=="number"?Number.isFinite(e):Array.isArray(e)?e.every(t=>x(t)):T(e)?Object.values(e).every(t=>x(t)):!1}function Xe(e){return T(e)&&x(e)}function B(e){return JSON.parse(JSON.stringify(e))}function _e(e){return JSON.parse(JSON.stringify(e))}function Oe(e){return JSON.parse(JSON.stringify(e))}function L(e,t){return Object.keys(e).every(a=>t.includes(a))}function K(e,t){if(t===void 0)return e;if(typeof t=="string")return{...e,description:t}}function Q(e){if(T(e)){if(e.anyOf!==void 0){if(!L(e,["anyOf","description"])||!Array.isArray(e.anyOf)||!e.anyOf.length)return;const t=[];for(const a of e.anyOf){const n=Q(a);if(!n)return;t.push(n)}return K({anyOf:t},e.description)}if(typeof e.type=="string"){if(e.type==="object"){if(!L(e,["type","properties","required","description"])||!T(e.properties))return;const t={};for(const[n,d]of Object.entries(e.properties)){const f=Q(d);if(!f)return;t[n]=f}const a={type:"object",properties:t};if(e.required!==void 0){if(!Array.isArray(e.required)||!e.required.every(n=>typeof n=="string"))return;a.required=[...e.required]}return K(a,e.description)}if(e.type==="array"){if(!L(e,["type","items","description"]))return;const t=Q(e.items);return t?K({type:"array",items:t},e.description):void 0}if(e.type==="string"){if(!L(e,["type","enum","description"]))return;const t={type:"string"};if(e.enum!==void 0){if(!Array.isArray(e.enum)||!e.enum.every(a=>typeof a=="string"))return;t.enum=[...e.enum]}return K(t,e.description)}if(e.type==="number"){if(!L(e,["type","minimum","maximum","description"]))return;const t={type:"number"};if(e.minimum!==void 0){if(typeof e.minimum!="number"||!Number.isFinite(e.minimum))return;t.minimum=e.minimum}if(e.maximum!==void 0){if(typeof e.maximum!="number"||!Number.isFinite(e.maximum))return;t.maximum=e.maximum}return K(t,e.description)}if(e.type==="boolean")return L(e,["type","description"])?K({type:"boolean"},e.description):void 0;if(e.type==="null"&&L(e,["type"]))return{type:"null"}}}}function be(e){return"type"in e&&e.type==="unknown"}function A(e){return"anyOf"in e}function ne(e){return"anyOf"in e}function W(e){return Oe(e)}function Ht(){return{type:"unknown"}}function Vt(){return{type:"object",properties:{}}}function re(e){if(be(e))return Vt();if(ne(e))return{anyOf:e.anyOf.map(t=>re(t))};if(e.type==="array")return{...e,items:re(e.items)};if(e.type==="object"){const t={};return Object.entries(e.properties).forEach(([a,n])=>{t[a]=re(n)}),{...e,properties:t}}return _e(e)}function Ye(e){return ne(e)?e.anyOf.flatMap(t=>Ye(t)):[e]}function ve(e,t){if(be(e))return W(t);if(be(t))return W(e);if(!(ne(e)||ne(t))&&e.type===t.type){if(e.type==="object"&&t.type==="object"){const a={},n=new Set([...Object.keys(e.properties),...Object.keys(t.properties)]);for(const d of n){const f=e.properties[d],_=t.properties[d];if(f&&_){const h=Se(f,_);a[d]=h;continue}a[d]=W(f??_)}return{type:"object",properties:a}}return e.type==="array"&&t.type==="array"?{type:"array",items:Se(e.items,t.items)}:W(e)}}function Ut(e){const t=[];return e.flatMap(a=>Ye(a)).forEach(a=>{const n=t.findIndex(d=>ve(d,a)!==void 0);if(n>=0){t[n]=ve(t[n],a);return}t.push(W(a))}),t.length===1?t[0]:{anyOf:t}}function Se(e,t){const a=ve(e,t);return a||Ut([e,t])}function ge(e){if(e===null)return{ok:!0,schema:{type:"null"}};if(typeof e=="string")return{ok:!0,schema:{type:"string"}};if(typeof e=="number")return{ok:!0,schema:{type:"number"}};if(typeof e=="boolean")return{ok:!0,schema:{type:"boolean"}};if(Array.isArray(e)){if(!e.length)return{ok:!0,schema:{type:"array",items:Ht()}};let a;for(const n of e){const d=ge(n);if(!d.ok)return d;if(!a){a=d.schema;continue}a=Se(a,d.schema)}return{ok:!0,schema:{type:"array",items:a}}}const t={};for(const[a,n]of Object.entries(e)){const d=ge(n);if(!d.ok)return d;t[a]=d.schema}return{ok:!0,schema:{type:"object",properties:t}}}function Gt(e){if(Array.isArray(e)&&!e.length)return{ok:!1,reason:"emptyArray"};const t=ge(e);return t.ok?{ok:!0,schema:re(t.schema)}:t}function De(e,t){return e?`${e}.${t}`:t}function Ze(e){return e?`${e}[]`:"[]"}function ue(e){return e.replace(/\[\]/g,"").split(".").filter(Boolean).pop()||e||"root"}function je(e){return e==="number"?"number":e==="boolean"?"switch":e==="object"?"object":e==="array"?"array":"text"}function Ge(e){return e==="string"||e==="number"||e==="boolean"||e==="null"}function Wt(e){return A(e)?"union":e.type}function et(e,t){if(!A(e))return e.type===t?e:void 0;const a=e.anyOf.filter(d=>!(!A(d)&&d.type==="null"));if(a.length!==1)return;const[n]=a;return!A(n)&&n.type===t?n:void 0}function ie(e){if(!e)return;const t=et(e,"object");return t&&!A(t)&&t.type==="object"?t:void 0}function ce(e){if(!e)return;const t=et(e,"array");return t&&!A(t)&&t.type==="array"?t:void 0}function tt(e){if(!A(e))return Ge(e.type)?e.type:void 0;const t=e.anyOf.filter(n=>!(!A(n)&&n.type==="null"));if(t.length!==1)return;const[a]=t;return!A(a)&&Ge(a.type)?a.type:void 0}function at(e,t,a=ue(e.path)){const n=e.selectionType??(e.type==="union"?void 0:e.type);if(!n)throw new TypeError("Schema tree node is not selectable.");return{path:e.path,label:a,type:n,required:e.required,enabled:t,componentHint:e.componentHint}}function ot(e){return{...e,selectable:!1,selectionType:void 0,children:e.children.map(t=>ot(t))}}function X(e,t="",a=0,n=!1){if(!e)return[];const d=tt(e),f=Wt(e),_=t?ue(t):"root",h={path:t,displayPath:t||"root",name:_,type:f,...d?{selectionType:d}:{},required:n,selectable:!!d,componentHint:je(d??(f==="union"?"string":f)),depth:a,children:[]};if(A(e))h.children=e.anyOf.flatMap((g,m)=>X(g,`${t||"root"}.anyOf[${m}]`,a+1,n).map(O=>ot(O)));else if(e.type==="object"){const g=new Set(e.required??[]);h.children=Object.entries(e.properties).flatMap(([m,O])=>X(O,De(t,m),a+1,g.has(m)))}else if(e.type==="array"){const g=Ze(t);h.children=X(e.items,g,a+1,n)}return[h]}function Ie(e){return e.flatMap(t=>[t,...Ie(t.children)])}function Ne(e){if(!e)return[];const t=[],a=new Set;function n(f){a.has(f)||(a.add(f),t.push({path:f,label:f?`${f}[]`:"root[]"}))}function d(f,_){const h=ce(f);if(h){n(_),d(h.items,Ze(_));return}const g=ie(f);g&&Object.entries(g.properties).forEach(([m,O])=>{d(O,De(_,m))})}return d(e,""),t}function Qt(e,t){var d,f;if(!e)return;if(!t)return(d=ce(e))==null?void 0:d.items;const a=t.split(".").filter(Boolean);let n=e;for(const _ of a){const h=ie(n);if(!h)return;n=h.properties[_]}return(f=ce(n))==null?void 0:f.items}function Xt(e,t="",a=!1){return Ie(X(e,t)).filter(n=>(a||n.path!==t)&&n.selectable)}function st(e,t){const a=Qt(e,t),n=t?`${t}[]`:"[]";return Xt(a,n,!0).map(d=>at(d,!0))}function Yt(e){var f;const t=((f=ce(e))==null?void 0:f.items)??e,a=ie(t);if(!a)return[];const n=[];function d(_,h,g){const m=tt(_);if(m){n.push(at({path:h,name:ue(h),type:A(_)?"union":_.type,selectionType:m,required:g,componentHint:je(m)},!0));return}const O=ie(_);if(!O)return;const j=new Set(O.required??[]);Object.entries(O.properties).forEach(([q,w])=>{d(w,De(h,q),j.has(q))})}return Object.entries(a.properties).forEach(([_,h])=>{d(h,_,(a.required??[]).includes(_))}),n}function ke(e,t){if(!T(e))return t?Oe(t):void 0;const a=typeof e.path=="string"&&e.path?e.path:t==null?void 0:t.path;if(!a)return;const n=e.type==="object"||e.type==="array"||e.type==="string"||e.type==="number"||e.type==="boolean"||e.type==="null"?e.type:(t==null?void 0:t.type)??"string",d=typeof e.label=="string"&&e.label.trim()?e.label.trim():(t==null?void 0:t.label)??ue(a),f=typeof e.required=="boolean"?e.required:(t==null?void 0:t.required)??!1,_=typeof e.enabled=="boolean"?e.enabled:(t==null?void 0:t.enabled)??!0,h=e.componentHint==="text"||e.componentHint==="number"||e.componentHint==="switch"||e.componentHint==="object"||e.componentHint==="array"?e.componentHint:(t==null?void 0:t.componentHint)??je(n);return{path:a,label:d,type:n,required:f,enabled:_,componentHint:h}}function We(e,t){const a=new Map;return Array.isArray(t)&&t.forEach(n=>{const d=ke(n);d&&a.set(d.path,d)}),e.map(n=>{const d=a.get(n.path);return d?{...n,label:d.label||n.label,enabled:d.enabled}:Oe(n)})}function Zt(e){var n;const t=Ne(e),a=t.find(d=>st(e,d.path).length>0);return(a==null?void 0:a.path)??((n=t[0])==null?void 0:n.path)??""}function Y(e,t){var g,m,O;if(!e)return;const a=Ne(e),n=((g=t==null?void 0:t.list)==null?void 0:g.recordPath)??"",d=a.some(j=>j.path===n)?n:Zt(e),f=a.length?We(st(e,d),(m=t==null?void 0:t.list)==null?void 0:m.fields):[],_=We(Yt(e),(O=t==null?void 0:t.form)==null?void 0:O.fields),h={};return a.length&&(h.list={recordPath:d,fields:f}),_.length&&(h.form={fields:_}),h.list||h.form?h:void 0}function we(e,t){if(!T(e))return t?Y(t):void 0;const a={};return T(e.list)&&(a.list={recordPath:typeof e.list.recordPath=="string"?e.list.recordPath:"",fields:Array.isArray(e.list.fields)?e.list.fields.map(n=>ke(n)).filter(n=>n!==void 0):[]}),T(e.form)&&(a.form={fields:Array.isArray(e.form.fields)?e.form.fields.map(n=>ke(n)).filter(n=>n!==void 0):[]}),t?Y(t,a):a.list||a.form?a:void 0}class M extends Error{constructor(a,n,d){super(n);se(this,"code");se(this,"status");se(this,"statusText");this.name="DatasourceError",this.code=a,this.status=d==null?void 0:d.status,this.statusText=d==null?void 0:d.statusText}}const rt=["string","number","boolean","null","object","array"];function H(e){return typeof e=="string"?e:""}function nt(e){return e==="POST"?"POST":"GET"}function it(e){return rt.includes(e)?e:"string"}function ct(e,t={}){return x(e)?B(e):t}function ea(e){return e==="number"?0:e==="boolean"?!1:e==="null"?null:e==="object"?{}:e==="array"?[]:""}function de(e,t){return e==="string"?typeof t=="string"?t:H(t):e==="number"?typeof t=="number"&&Number.isFinite(t)?t:0:e==="boolean"?typeof t=="boolean"?t:!1:e==="null"?null:e==="object"?Xe(t)?B(t):{}:Array.isArray(t)&&x(t)?B(t):[]}function Qe(e){return Array.isArray(e)?e.filter(t=>T(t)).map(t=>({key:H(t.key),mock:H(t.mock)})):[]}function ta(e){return Array.isArray(e)?e.filter(t=>T(t)).map(t=>{const a=it(t.dataType);return{key:H(t.key),dataType:a,mock:de(a,t.mock)}}):[]}function aa(){return{type:"API",domain:"",path:"",method:"GET",headerData:[],bodyData:[],queryData:[]}}function dt(){return{type:"JSON",rawData:{}}}function E(e){if(!T(e))return dt();const t=Q(e.jsonSchema),a=we(e.schemaSelections,t);if(e.type==="API"){const d={type:"API",domain:H(e.domain),path:H(e.path),method:nt(e.method),headerData:Qe(e.headerData),bodyData:ta(e.bodyData),queryData:Qe(e.queryData)};return t&&(d.jsonSchema=t),a&&(d.schemaSelections=a),d}const n={type:"JSON",rawData:ct(e.rawData,{})};return t&&(n.jsonSchema=t),a&&(n.schemaSelections=a),n}function oa(e){const t=e.domain.trim(),a=e.path.trim(),n=/^[a-z][a-z\d+\-.]*:/i.test(a),d=t||(typeof window<"u"?window.location.origin:"");if(!d&&!n)throw new TypeError("API domain is required when calling a relative datasource path outside the browser.");const f=d?new URL(a||"/",d.endsWith("/")?d:`${d}/`):new URL(a||"/");return e.queryData.forEach(_=>{const h=_.key.trim();h&&f.searchParams.append(h,_.mock)}),f.toString()}function sa(e){const t=new Headers;return e.headerData.forEach(a=>{const n=a.key.trim();n&&t.set(n,a.mock)}),e.method==="POST"&&!t.has("Content-Type")&&t.set("Content-Type","application/json"),t}function ra(e){if(e.method!=="POST")return;const t=e.bodyData.reduce((a,n)=>{const d=n.key.trim();return d&&(a[d]=de(n.dataType,n.mock)),a},{});return JSON.stringify(t)}async function na(e){if(!(e.headers.get("content-type")??"").toLowerCase().includes("json"))throw new M("nonJsonResponse","The API response is not JSON.");try{const a=await e.json();if(!x(a))throw new M("invalidJsonResponse","The API response is not valid JSON.");return a}catch(a){throw a instanceof M?a:new M("invalidJsonResponse","The API response is not valid JSON.")}}const ia=async e=>{const t=E(e);if(t.type==="JSON")return B(t.rawData);const a=await fetch(oa(t),{method:t.method,headers:sa(t),body:ra(t)});if(!a.ok)throw new M("apiRequestFailed",`API request failed: ${a.status} ${a.statusText}`.trim(),{status:a.status,statusText:a.statusText});return await na(a)},ca=async e=>{const t=await ia(e),a=Gt(t);if(a.ok)return a.schema;throw a.reason==="emptyArray"?new M("emptyArraySchema","Cannot infer JSON Schema from an empty array."):new M("mixedArraySchema","The array contains incompatible types, so JSON Schema cannot be inferred.")},da={class:"ce-datasource-tool","data-testid":"editor-datasource-tool"},ua={class:"ce-datasource-tool__header"},la={class:"ce-datasource-tool__title"},pa=["aria-label"],ya=["disabled"],fa=["disabled"],ma={key:0,class:"ce-datasource-tool__panel","data-testid":"datasource-json-panel"},ha={class:"ce-datasource-tool__field"},_a={class:"ce-datasource-tool__label"},ba=["readonly","value"],va={key:0,class:"ce-datasource-tool__error","data-testid":"datasource-json-error"},Sa={key:1,class:"ce-datasource-tool__panel","data-testid":"datasource-api-panel"},ga={class:"ce-datasource-tool__grid"},ka={class:"ce-datasource-tool__field"},wa={class:"ce-datasource-tool__label"},Oa=["readonly","value"],Da={class:"ce-datasource-tool__field"},ja={class:"ce-datasource-tool__label"},Ia=["readonly","value"],Na={class:"ce-datasource-tool__field"},Ta={class:"ce-datasource-tool__label"},Aa=["disabled","value"],Ja={open:"",class:"ce-datasource-tool__list","data-testid":"datasource-header-list"},$a={class:"ce-datasource-tool__list-header"},qa={class:"ce-datasource-tool__list-title"},Ca={key:0,class:"ce-datasource-tool__empty"},Fa=["data-testid","readonly","placeholder","value","onInput"],Pa=["data-testid","readonly","placeholder","value","onInput"],Ea=["data-testid","aria-label","onClick"],Ma={open:"",class:"ce-datasource-tool__list","data-testid":"datasource-query-list"},xa={class:"ce-datasource-tool__list-header"},za={class:"ce-datasource-tool__list-title"},La={key:0,class:"ce-datasource-tool__empty"},Ba=["data-testid","readonly","placeholder","value","onInput"],Ra=["data-testid","readonly","placeholder","value","onInput"],Ka=["data-testid","aria-label","onClick"],Ha={open:"",class:"ce-datasource-tool__list","data-testid":"datasource-body-list"},Va={class:"ce-datasource-tool__list-header"},Ua={class:"ce-datasource-tool__list-title"},Ga={key:0,class:"ce-datasource-tool__empty"},Wa=["data-testid","readonly","placeholder","value","onInput"],Qa=["data-testid","disabled","value","onChange"],Xa=["value"],Ya=["data-testid","disabled","value","onChange"],Za=["data-testid"],eo=["data-testid","readonly","value","onInput"],to=["data-testid","type","readonly","placeholder","value","onInput"],ao=["data-testid","aria-label","onClick"],oo=["data-testid"],so={class:"ce-datasource-tool__generate-panel","data-testid":"datasource-schema-generate-panel"},ro={class:"ce-datasource-tool__section-title"},no={class:"ce-datasource-tool__section-copy"},io={class:"ce-datasource-tool__generate-actions"},co=["disabled"],uo={key:1,class:"ce-datasource-tool__schema-summary","data-testid":"datasource-schema-summary"},lo={key:0,class:"ce-datasource-tool__error","data-testid":"datasource-json-schema-error"},po={class:"ce-datasource-tool__schema-panel","data-testid":"datasource-json-schema-panel"},yo={class:"ce-datasource-tool__schema-header"},fo={class:"ce-datasource-tool__section-title"},mo={class:"ce-datasource-tool__section-copy"},ho=["placeholder","value"],_o={class:"ce-datasource-tool__tabs","data-testid":"datasource-schema-tabs"},bo={key:0,class:"ce-datasource-tool__schema-tab-panel","data-testid":"datasource-list-schema-panel"},vo={key:0,class:"ce-datasource-tool__empty","data-testid":"datasource-schema-empty"},So={key:1,class:"ce-datasource-tool__field"},go={class:"ce-datasource-tool__label"},ko=["disabled","value"],wo=["value"],Oo={key:2,class:"ce-datasource-tool__empty","data-testid":"datasource-list-schema-empty"},Do={key:3,class:"ce-datasource-tool__field-list","data-testid":"datasource-list-fields"},jo={class:"ce-datasource-tool__field-list-summary"},Io=["data-testid"],No=["disabled","checked","data-testid","onChange"],To={class:"ce-datasource-tool__schema-field-main"},Ao=["readonly","value","data-testid","onInput"],Jo={class:"ce-datasource-tool__schema-path"},$o={class:"ce-datasource-tool__schema-badges"},qo={class:"ce-datasource-tool__schema-badge"},Co={class:"ce-datasource-tool__schema-badge"},Fo={key:0,class:"ce-datasource-tool__schema-badge ce-datasource-tool__schema-badge--required"},Po={key:1,class:"ce-datasource-tool__schema-tab-panel","data-testid":"datasource-form-schema-panel"},Eo={key:0,class:"ce-datasource-tool__field-list","data-testid":"datasource-form-fields"},Mo={class:"ce-datasource-tool__field-list-summary"},xo=["data-testid"],zo=["disabled","checked","data-testid","onChange"],Lo={class:"ce-datasource-tool__schema-field-main"},Bo=["readonly","value","data-testid","onInput"],Ro={class:"ce-datasource-tool__schema-path"},Ko={class:"ce-datasource-tool__schema-badges"},Ho={class:"ce-datasource-tool__schema-badge"},Vo={class:"ce-datasource-tool__schema-badge"},Uo={key:0,class:"ce-datasource-tool__schema-badge ce-datasource-tool__schema-badge--required"},Go={key:1,class:"ce-datasource-tool__empty","data-testid":"datasource-form-schema-empty"},Wo={key:2,class:"ce-datasource-tool__schema-tab-panel","data-testid":"datasource-advanced-schema-panel"},Qo={key:0,class:"ce-datasource-tool__schema-tree","data-testid":"datasource-schema-tree"},Xo=["data-testid"],Yo={class:"ce-datasource-tool__schema-node-name"},Zo={class:"ce-datasource-tool__schema-path"},es={class:"ce-datasource-tool__schema-badge"},ts={key:0,class:"ce-datasource-tool__schema-badge ce-datasource-tool__schema-badge--required"},as={class:"ce-datasource-tool__field"},os={class:"ce-datasource-tool__label"},ss=["readonly","value"],ds=Bt({toolbox:{get title(){return Rt.t("datasource.toolboxTitle")},icon:'<svg width="18" height="18" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><ellipse cx="12" cy="6" rx="7" ry="3" fill="none" stroke="currentColor" stroke-width="2"/><path d="M5 6v6c0 1.7 3.1 3 7 3s7-1.3 7-3V6M5 12v6c0 1.7 3.1 3 7 3s7-1.3 7-3v-6" fill="none" stroke="currentColor" stroke-width="2"/><path d="M8 12c1.1.5 2.5.8 4 .8s2.9-.3 4-.8" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg>'},createInitialProps:()=>({value:dt()}),normalizeProps:e=>({edit:e.edit??!1,value:E(e.value)}),serialize:e=>({value:E(e.value)})}),rs=Et({__name:"MDatasourceEditor",props:{edit:{type:Boolean},value:{},onChange:{type:Function},onToolChange:{type:Function}},setup(e){const t=e,{t:a}=Lt(),n=E(t.value),d=rt,f=J(n.type),_=he(n.type==="JSON"?n.rawData:{}),h=J(le(_.value)),g=J(""),m=he(n.jsonSchema),O=J(pe(m.value)),j=J(""),q=J(!1),w=he(n.schemaSelections),C=J("list"),V=J(""),v=Mt(n.type==="API"?n:aa()),z=J(v.bodyData.map(o=>R(o))),$=J(v.bodyData.map(()=>"")),S=I(()=>!t.edit),ut=I(()=>X(m.value)),Te=I(()=>Ie(ut.value)),Ae=I(()=>Ne(m.value)),Je=I(()=>{var o,s;return((s=(o=w.value)==null?void 0:o.list)==null?void 0:s.fields)??[]}),$e=I(()=>{var o,s;return((s=(o=w.value)==null?void 0:o.form)==null?void 0:s.fields)??[]}),lt=I(()=>mt(Te.value,V.value)),qe=I(()=>Ee(Je.value,V.value)),Ce=I(()=>Ee($e.value,V.value)),pt=I(()=>{var o,s;return((s=(o=w.value)==null?void 0:o.list)==null?void 0:s.recordPath)??""}),yt=I(()=>Je.value.filter(o=>o.enabled).length),ft=I(()=>$e.value.filter(o=>o.enabled).length);function le(o){return JSON.stringify(o,null,2)}function pe(o){return o?JSON.stringify(o,null,2):""}function ye(o){return a(`datasource.schemaTypes.${o}`)}function Fe(o){return a(`datasource.componentHints.${o}`)}function Pe(o){return o.trim().toLowerCase()}function mt(o,s){const r=Pe(s);return r?o.filter(i=>i.name.toLowerCase().includes(r)||i.displayPath.toLowerCase().includes(r)):o}function Ee(o,s){const r=Pe(s);return r?o.filter(i=>i.label.toLowerCase().includes(r)||i.path.toLowerCase().includes(r)):o}function ht(o){return o||"root"}function _t(o){return o?`${o}[]`:a("datasource.fields.rootRecordPath")}function bt(o){return{edit:t.edit,value:E(o)}}function Z(o){var r,i;if(!t.edit)return;const s=bt(o);(r=t.onToolChange)==null||r.call(t,s),(i=t.onChange)==null||i.call(t,s)}function ee(){return E({type:"JSON",rawData:ct(_.value,{}),jsonSchema:m.value,schemaSelections:w.value})}function fe(){return E({type:"API",domain:v.domain,path:v.path,method:v.method,headerData:v.headerData,bodyData:v.bodyData,queryData:v.queryData,jsonSchema:m.value,schemaSelections:w.value})}function U(){Z(f.value==="JSON"?ee():fe())}function N(){Z(fe())}function vt(){z.value=v.bodyData.map(o=>R(o)),$.value=v.bodyData.map(()=>"")}function St(o,s){m.value=o?_e(o):void 0,O.value=pe(m.value),w.value=we(s,m.value),j.value=""}function gt(o){Object.assign(v,{type:"API",domain:o.domain,path:o.path,method:o.method,headerData:o.headerData.map(s=>({...s})),bodyData:o.bodyData.map(s=>({key:s.key,dataType:s.dataType,mock:de(s.dataType,s.mock)})),queryData:o.queryData.map(s=>({...s}))}),vt()}function kt(o){const s=E(o);if(f.value=s.type,St(s.jsonSchema,s.schemaSelections),s.type==="JSON"){_.value=s.rawData,h.value=le(s.rawData),g.value="";return}gt(s)}function Me(o){if(!(!t.edit||f.value===o)){if(f.value=o,o==="JSON"){Z(ee());return}N()}}function wt(o){if(!t.edit)return;const s=o.target.value;h.value=s;try{const r=JSON.parse(s);if(!x(r))throw new Error("Invalid JSON value.");_.value=B(r),g.value="",Z(ee())}catch{g.value=a("datasource.validation.invalidJson")}}function Ot(o){if(!t.edit)return;const s=o.target.value;if(O.value=s,!s.trim()){m.value=void 0,w.value=void 0,j.value="",U();return}try{const r=JSON.parse(s),i=Q(r);if(!i)throw new Error("Invalid JSON Schema.");m.value=i,w.value=Y(i,w.value),j.value="",U()}catch{j.value=a("datasource.validation.invalidJsonSchema")}}function xe(o,s){t.edit&&(v[o]=s,N())}function Dt(o){t.edit&&(v.method=nt(o),N())}function te(o){return v[o]}function ze(o){t.edit&&(v[o].push({key:"",mock:""}),N())}function ae(o,s,r,i){if(!t.edit)return;const b=v[o][s];b&&(b[r]=i,N())}function Le(o,s){t.edit&&(v[o].splice(s,1),N())}function jt(){if(!t.edit)return;const o={key:"",dataType:"string",mock:""};v.bodyData.push(o),z.value.push(R(o)),$.value.push(""),N()}function It(o,s){if(!t.edit)return;const r=v.bodyData[o];r&&(r.key=s,N())}function Nt(o,s){if(!t.edit)return;const r=v.bodyData[o];r&&(r.dataType=it(s),r.mock=ea(r.dataType),z.value[o]=R(r),$.value[o]="",N())}function me(o,s){if(!t.edit)return;const r=v.bodyData[o];if(!r)return;z.value[o]=s;const i=Ct(r.dataType,s);if(!i.ok){$.value[o]=i.error;return}r.mock=i.value,$.value[o]="",N()}function Tt(o){t.edit&&(v.bodyData.splice(o,1),z.value.splice(o,1),$.value.splice(o,1),N())}function At(o){return o instanceof M?o.code==="apiRequestFailed"?`${a("datasource.validation.apiRequestFailed")} ${o.status??""} ${o.statusText??""}`.trim():a(`datasource.validation.${o.code}`):o instanceof Error?o.message:String(o)}function Jt(o){m.value=_e(o),O.value=pe(m.value),w.value=Y(m.value,w.value),j.value="",U()}function $t(o){var s,r;!t.edit||!m.value||(w.value=Y(m.value,{...w.value,list:{recordPath:o,fields:((r=(s=w.value)==null?void 0:s.list)==null?void 0:r.fields)??[]}}),U())}function Be(o,s,r){var Ve,Ue;if(!t.edit)return;const i=we(w.value,m.value),b=o==="list"?(Ve=i==null?void 0:i.list)==null?void 0:Ve.fields:(Ue=i==null?void 0:i.form)==null?void 0:Ue.fields;if(!b)return;const He=b.map(oe=>oe.path===s?{...oe,...r,label:r.label!==void 0?r.label:oe.label}:oe);w.value={...i,...o==="list"&&(i!=null&&i.list)?{list:{...i.list,fields:He}}:{},...o==="form"?{form:{fields:He}}:{}},U()}function Re(o,s,r){Be(o,s,{label:r.trim()||s})}function Ke(o,s,r){Be(o,s,{enabled:r})}async function qt(){if(!(!t.edit||q.value)){if(j.value="",f.value==="JSON"){if(g.value){j.value=a("datasource.validation.fixJsonBeforeSchema");return}}else if($.value.findIndex(s=>!!s)>=0){j.value=a("datasource.validation.fixBodyBeforeSchema");return}q.value=!0;try{const o=await ca(f.value==="JSON"?ee():fe());Jt(o)}catch(o){j.value=At(o)}finally{q.value=!1}}}function Ct(o,s){if(o==="string")return{ok:!0,value:s};if(o==="number"){const r=s.trim(),i=Number(r);return!r||!Number.isFinite(i)?{ok:!1,error:a("datasource.validation.invalidNumber")}:{ok:!0,value:i}}if(o==="boolean")return{ok:!0,value:s==="true"};if(o==="null")return{ok:!0,value:null};try{const r=JSON.parse(s);return o==="object"?Xe(r)?{ok:!0,value:B(r)}:{ok:!1,error:a("datasource.validation.invalidObject")}:!Array.isArray(r)||!x(r)?{ok:!1,error:a("datasource.validation.invalidArray")}:{ok:!0,value:B(r)}}catch{return{ok:!1,error:a(o==="object"?"datasource.validation.invalidObject":"datasource.validation.invalidArray")}}}function R(o){const s=de(o.dataType,o.mock);return o.dataType==="object"||o.dataType==="array"?le(s):o.dataType==="null"?"null":String(s)}return xt(()=>t.value,o=>{kt(o)},{deep:!0}),(o,s)=>(l(),p("div",da,[c("div",ua,[c("div",la,u(y(a)("datasource.title")),1),c("div",{class:"ce-datasource-tool__type-switch","aria-label":y(a)("datasource.fields.type")},[c("button",{type:"button",class:G(["ce-datasource-tool__type-button",{"ce-datasource-tool__type-button--active":f.value==="JSON"}]),disabled:S.value,"data-testid":"datasource-type-json",onClick:s[0]||(s[0]=r=>Me("JSON"))}," JSON ",10,ya),c("button",{type:"button",class:G(["ce-datasource-tool__type-button",{"ce-datasource-tool__type-button--active":f.value==="API"}]),disabled:S.value,"data-testid":"datasource-type-api",onClick:s[1]||(s[1]=r=>Me("API"))}," API ",10,fa)],8,pa)]),f.value==="JSON"?(l(),p("div",ma,[c("label",ha,[c("span",_a,u(y(a)("datasource.fields.rawData")),1),c("textarea",{class:"ce-datasource-tool__textarea ce-datasource-tool__textarea--json","data-testid":"datasource-raw-data",spellcheck:"false",readonly:S.value,value:h.value,onInput:wt,onKeydown:s[2]||(s[2]=D(()=>{},["stop"]))},null,40,ba)]),g.value?(l(),p("p",va,u(g.value),1)):k("",!0)])):(l(),p("div",Sa,[c("div",ga,[c("label",ka,[c("span",wa,u(y(a)("datasource.fields.domain")),1),c("input",{class:"ce-datasource-tool__input","data-testid":"datasource-domain",type:"text",readonly:S.value,value:v.domain,onInput:s[3]||(s[3]=r=>xe("domain",r.target.value)),onKeydown:s[4]||(s[4]=D(()=>{},["stop"]))},null,40,Oa)]),c("label",Da,[c("span",ja,u(y(a)("datasource.fields.path")),1),c("input",{class:"ce-datasource-tool__input","data-testid":"datasource-path",type:"text",readonly:S.value,value:v.path,onInput:s[5]||(s[5]=r=>xe("path",r.target.value)),onKeydown:s[6]||(s[6]=D(()=>{},["stop"]))},null,40,Ia)]),c("label",Na,[c("span",Ta,u(y(a)("datasource.fields.method")),1),c("select",{class:"ce-datasource-tool__input","data-testid":"datasource-method",disabled:S.value,value:v.method,onChange:s[7]||(s[7]=r=>Dt(r.target.value))},[...s[26]||(s[26]=[c("option",{value:"GET"},"GET",-1),c("option",{value:"POST"},"POST",-1)])],40,Aa)])]),c("details",Ja,[c("summary",$a,[c("span",qa,u(y(a)("datasource.sections.headers")),1),e.edit?(l(),p("button",{key:0,class:"ce-datasource-tool__action",type:"button","data-testid":"datasource-header-add",onClick:s[8]||(s[8]=D(r=>ze("headerData"),["stop","prevent"]))},u(y(a)("datasource.actions.add")),1)):k("",!0)]),te("headerData").length?k("",!0):(l(),p("p",Ca,u(y(a)("datasource.empty")),1)),(l(!0),p(F,null,P(te("headerData"),(r,i)=>(l(),p("div",{key:`header-${i}`,class:"ce-datasource-tool__row"},[c("input",{class:"ce-datasource-tool__input","data-testid":`datasource-header-key-${i}`,type:"text",readonly:S.value,placeholder:y(a)("datasource.fields.key"),value:r.key,onInput:b=>ae("headerData",i,"key",b.target.value),onKeydown:s[9]||(s[9]=D(()=>{},["stop"]))},null,40,Fa),c("input",{class:"ce-datasource-tool__input","data-testid":`datasource-header-mock-${i}`,type:"text",readonly:S.value,placeholder:y(a)("datasource.fields.mock"),value:r.mock,onInput:b=>ae("headerData",i,"mock",b.target.value),onKeydown:s[10]||(s[10]=D(()=>{},["stop"]))},null,40,Pa),e.edit?(l(),p("button",{key:0,class:"ce-datasource-tool__remove",type:"button","data-testid":`datasource-header-remove-${i}`,"aria-label":y(a)("datasource.actions.remove"),onClick:b=>Le("headerData",i)},u(y(a)("datasource.actions.remove")),9,Ea)):k("",!0)]))),128))]),c("details",Ma,[c("summary",xa,[c("span",za,u(y(a)("datasource.sections.queries")),1),e.edit?(l(),p("button",{key:0,class:"ce-datasource-tool__action",type:"button","data-testid":"datasource-query-add",onClick:s[11]||(s[11]=D(r=>ze("queryData"),["stop","prevent"]))},u(y(a)("datasource.actions.add")),1)):k("",!0)]),te("queryData").length?k("",!0):(l(),p("p",La,u(y(a)("datasource.empty")),1)),(l(!0),p(F,null,P(te("queryData"),(r,i)=>(l(),p("div",{key:`query-${i}`,class:"ce-datasource-tool__row"},[c("input",{class:"ce-datasource-tool__input","data-testid":`datasource-query-key-${i}`,type:"text",readonly:S.value,placeholder:y(a)("datasource.fields.key"),value:r.key,onInput:b=>ae("queryData",i,"key",b.target.value),onKeydown:s[12]||(s[12]=D(()=>{},["stop"]))},null,40,Ba),c("input",{class:"ce-datasource-tool__input","data-testid":`datasource-query-mock-${i}`,type:"text",readonly:S.value,placeholder:y(a)("datasource.fields.mock"),value:r.mock,onInput:b=>ae("queryData",i,"mock",b.target.value),onKeydown:s[13]||(s[13]=D(()=>{},["stop"]))},null,40,Ra),e.edit?(l(),p("button",{key:0,class:"ce-datasource-tool__remove",type:"button","data-testid":`datasource-query-remove-${i}`,"aria-label":y(a)("datasource.actions.remove"),onClick:b=>Le("queryData",i)},u(y(a)("datasource.actions.remove")),9,Ka)):k("",!0)]))),128))]),c("details",Ha,[c("summary",Va,[c("span",Ua,u(y(a)("datasource.sections.body")),1),e.edit?(l(),p("button",{key:0,class:"ce-datasource-tool__action",type:"button","data-testid":"datasource-body-add",onClick:D(jt,["stop","prevent"])},u(y(a)("datasource.actions.add")),1)):k("",!0)]),v.bodyData.length?k("",!0):(l(),p("p",Ga,u(y(a)("datasource.empty")),1)),(l(!0),p(F,null,P(v.bodyData,(r,i)=>(l(),p("div",{key:`body-${i}`,class:"ce-datasource-tool__body-row"},[c("input",{class:"ce-datasource-tool__input","data-testid":`datasource-body-key-${i}`,type:"text",readonly:S.value,placeholder:y(a)("datasource.fields.key"),value:r.key,onInput:b=>It(i,b.target.value),onKeydown:s[14]||(s[14]=D(()=>{},["stop"]))},null,40,Wa),c("select",{class:"ce-datasource-tool__input","data-testid":`datasource-body-type-${i}`,disabled:S.value,value:r.dataType,onChange:b=>Nt(i,b.target.value)},[(l(!0),p(F,null,P(y(d),b=>(l(),p("option",{key:b,value:b},u(b),9,Xa))),128))],40,Qa),r.dataType==="boolean"?(l(),p("select",{key:0,class:"ce-datasource-tool__input","data-testid":`datasource-body-mock-${i}`,disabled:S.value,value:String(r.mock===!0),onChange:b=>me(i,b.target.value)},[...s[27]||(s[27]=[c("option",{value:"false"},"false",-1),c("option",{value:"true"},"true",-1)])],40,Ya)):r.dataType==="null"?(l(),p("input",{key:1,class:"ce-datasource-tool__input","data-testid":`datasource-body-mock-${i}`,type:"text",readonly:"",value:"null"},null,8,Za)):r.dataType==="object"||r.dataType==="array"?(l(),p("textarea",{key:2,class:"ce-datasource-tool__textarea ce-datasource-tool__textarea--mock","data-testid":`datasource-body-mock-${i}`,spellcheck:"false",readonly:S.value,value:z.value[i]??R(r),onInput:b=>me(i,b.target.value),onKeydown:s[15]||(s[15]=D(()=>{},["stop"]))},null,40,eo)):(l(),p("input",{key:3,class:"ce-datasource-tool__input","data-testid":`datasource-body-mock-${i}`,type:r.dataType==="number"?"number":"text",readonly:S.value,placeholder:y(a)("datasource.fields.mock"),value:z.value[i]??R(r),onInput:b=>me(i,b.target.value),onKeydown:s[16]||(s[16]=D(()=>{},["stop"]))},null,40,to)),e.edit?(l(),p("button",{key:4,class:"ce-datasource-tool__remove",type:"button","data-testid":`datasource-body-remove-${i}`,"aria-label":y(a)("datasource.actions.remove"),onClick:b=>Tt(i)},u(y(a)("datasource.actions.remove")),9,ao)):k("",!0),$.value[i]?(l(),p("p",{key:5,class:"ce-datasource-tool__body-error","data-testid":`datasource-body-error-${i}`},u($.value[i]),9,oo)):k("",!0)]))),128))])])),c("div",so,[c("div",null,[c("div",ro,u(y(a)("datasource.sections.generateFields")),1),c("p",no,u(y(a)("datasource.help.generateFields")),1)]),c("div",io,[e.edit?(l(),p("button",{key:0,class:"ce-datasource-tool__schema-button",type:"button","data-testid":"datasource-json-schema-parse-button",disabled:q.value,onClick:qt},u(q.value?y(a)("datasource.actions.generatingFields"):y(a)("datasource.actions.generateFields")),9,co)):k("",!0),m.value?(l(),p("span",uo,u(y(a)("datasource.fields.generatedFields"))+": "+u(Te.value.length),1)):k("",!0)]),j.value?(l(),p("p",lo,u(j.value),1)):k("",!0)]),c("div",po,[c("div",yo,[c("div",null,[c("div",fo,u(y(a)("datasource.sections.fieldSelection")),1),c("p",mo,u(y(a)("datasource.help.fieldSelection")),1)]),m.value?(l(),p("input",{key:0,class:"ce-datasource-tool__input ce-datasource-tool__schema-search","data-testid":"datasource-schema-search",type:"search",placeholder:y(a)("datasource.fields.searchFields"),value:V.value,onInput:s[17]||(s[17]=r=>V.value=r.target.value),onKeydown:s[18]||(s[18]=D(()=>{},["stop"]))},null,40,ho)):k("",!0)]),c("div",_o,[c("button",{type:"button",class:G(["ce-datasource-tool__tab",{"ce-datasource-tool__tab--active":C.value==="list"}]),"data-testid":"datasource-schema-tab-list",onClick:s[19]||(s[19]=r=>C.value="list")},u(y(a)("datasource.tabs.list")),3),c("button",{type:"button",class:G(["ce-datasource-tool__tab",{"ce-datasource-tool__tab--active":C.value==="form"}]),"data-testid":"datasource-schema-tab-form",onClick:s[20]||(s[20]=r=>C.value="form")},u(y(a)("datasource.tabs.form")),3),c("button",{type:"button",class:G(["ce-datasource-tool__tab",{"ce-datasource-tool__tab--active":C.value==="advanced"}]),"data-testid":"datasource-schema-tab-advanced",onClick:s[21]||(s[21]=r=>C.value="advanced")},u(y(a)("datasource.tabs.advanced")),3)]),C.value==="list"?(l(),p("div",bo,[m.value?Ae.value.length?(l(),p("label",So,[c("span",go,u(y(a)("datasource.fields.recordPath")),1),c("select",{class:"ce-datasource-tool__input","data-testid":"datasource-list-record-path",disabled:S.value,value:pt.value,onChange:s[22]||(s[22]=r=>$t(r.target.value))},[(l(!0),p(F,null,P(Ae.value,r=>(l(),p("option",{key:r.path||"root",value:r.path},u(_t(r.path)),9,wo))),128))],40,ko)])):(l(),p("p",Oo,u(y(a)("datasource.noListRecord")),1)):(l(),p("p",vo,u(y(a)("datasource.emptySchema")),1)),qe.value.length?(l(),p("div",Do,[c("div",jo,u(y(a)("datasource.fields.selectedFields"))+": "+u(yt.value),1),(l(!0),p(F,null,P(qe.value,r=>(l(),p("label",{key:r.path,class:"ce-datasource-tool__schema-field","data-testid":`datasource-list-field-${r.path}`},[c("input",{class:"ce-datasource-tool__checkbox",type:"checkbox",disabled:S.value,checked:r.enabled,"data-testid":`datasource-list-field-enabled-${r.path}`,onChange:i=>Ke("list",r.path,i.target.checked)},null,40,No),c("span",To,[c("input",{class:"ce-datasource-tool__input ce-datasource-tool__field-label-input",type:"text",readonly:S.value,value:r.label,"data-testid":`datasource-list-field-label-${r.path}`,onInput:i=>Re("list",r.path,i.target.value),onKeydown:s[23]||(s[23]=D(()=>{},["stop"]))},null,40,Ao),c("span",Jo,u(r.path),1)]),c("span",$o,[c("span",qo,u(ye(r.type)),1),c("span",Co,u(Fe(r.componentHint)),1),r.required?(l(),p("span",Fo,u(y(a)("datasource.fields.required")),1)):k("",!0)])],8,Io))),128))])):k("",!0)])):C.value==="form"?(l(),p("div",Po,[Ce.value.length?(l(),p("div",Eo,[c("div",Mo,u(y(a)("datasource.fields.selectedFields"))+": "+u(ft.value),1),(l(!0),p(F,null,P(Ce.value,r=>(l(),p("label",{key:r.path,class:"ce-datasource-tool__schema-field","data-testid":`datasource-form-field-${r.path}`},[c("input",{class:"ce-datasource-tool__checkbox",type:"checkbox",disabled:S.value,checked:r.enabled,"data-testid":`datasource-form-field-enabled-${r.path}`,onChange:i=>Ke("form",r.path,i.target.checked)},null,40,zo),c("span",Lo,[c("input",{class:"ce-datasource-tool__input ce-datasource-tool__field-label-input",type:"text",readonly:S.value,value:r.label,"data-testid":`datasource-form-field-label-${r.path}`,onInput:i=>Re("form",r.path,i.target.value),onKeydown:s[24]||(s[24]=D(()=>{},["stop"]))},null,40,Bo),c("span",Ro,u(r.path),1)]),c("span",Ko,[c("span",Ho,u(ye(r.type)),1),c("span",Vo,u(Fe(r.componentHint)),1),r.required?(l(),p("span",Uo,u(y(a)("datasource.fields.required")),1)):k("",!0)])],8,xo))),128))])):(l(),p("p",Go,u(y(a)("datasource.noFormFields")),1))])):(l(),p("div",Wo,[m.value?(l(),p("div",Qo,[(l(!0),p(F,null,P(lt.value,r=>(l(),p("div",{key:r.path||"root",class:"ce-datasource-tool__schema-node",style:zt({paddingLeft:`${r.depth*18}px`}),"data-testid":`datasource-schema-node-${ht(r.path)}`},[c("span",Yo,u(r.name),1),c("span",Zo,u(r.displayPath),1),c("span",es,u(ye(r.type)),1),r.required?(l(),p("span",ts,u(y(a)("datasource.fields.required")),1)):k("",!0)],12,Xo))),128))])):k("",!0),c("label",as,[c("span",os,u(y(a)("datasource.fields.jsonSchema")),1),c("textarea",{class:"ce-datasource-tool__textarea ce-datasource-tool__textarea--schema","data-testid":"datasource-json-schema",spellcheck:"false",readonly:S.value,value:O.value,onInput:Ot,onKeydown:s[25]||(s[25]=D(()=>{},["stop"]))},null,40,ss)])]))])]))}}),us=Kt(rs,[["__scopeId","data-v-ab5bf27d"]]);export{ia as $,us as M,ca as a,ds as m};
@@ -0,0 +1 @@
1
+ .ce-datasource-tool[data-v-ab5bf27d]{width:100%;border:1px solid rgb(226 232 240);border-radius:8px;background:#fff;color:#0f172a;font-size:14px;line-height:20px}.ce-datasource-tool__header[data-v-ab5bf27d]{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px;border-bottom:1px solid rgb(226 232 240)}.ce-datasource-tool__title[data-v-ab5bf27d]{font-size:15px;font-weight:650;color:#0f172a}.ce-datasource-tool__type-switch[data-v-ab5bf27d]{display:inline-grid;grid-template-columns:repeat(2,minmax(64px,1fr));overflow:hidden;border:1px solid rgb(203 213 225);border-radius:8px;background:#f8fafc}.ce-datasource-tool__type-button[data-v-ab5bf27d]{min-height:32px;border:0;border-right:1px solid rgb(203 213 225);padding:6px 12px;background:transparent;color:#475569;font:inherit;font-weight:600;cursor:pointer}.ce-datasource-tool__type-button[data-v-ab5bf27d]:last-child{border-right:0}.ce-datasource-tool__type-button--active[data-v-ab5bf27d]{background:#2563eb;color:#fff}.ce-datasource-tool__type-button[data-v-ab5bf27d]:disabled{cursor:default}.ce-datasource-tool__panel[data-v-ab5bf27d]{display:flex;flex-direction:column;gap:14px;padding:12px}.ce-datasource-tool__schema-panel[data-v-ab5bf27d]{display:flex;flex-direction:column;gap:12px;border-top:1px solid rgb(226 232 240);padding:12px}.ce-datasource-tool__generate-panel[data-v-ab5bf27d]{display:flex;flex-direction:column;gap:10px;border-top:1px solid rgb(226 232 240);padding:12px;background:#f8fafc}.ce-datasource-tool__schema-header[data-v-ab5bf27d]{display:flex;align-items:center;justify-content:space-between;gap:10px}.ce-datasource-tool__section-title[data-v-ab5bf27d]{color:#0f172a;font-size:14px;font-weight:700}.ce-datasource-tool__section-copy[data-v-ab5bf27d]{margin:2px 0 0;color:#64748b;font-size:13px}.ce-datasource-tool__generate-actions[data-v-ab5bf27d]{display:flex;align-items:center;flex-wrap:wrap;gap:10px}.ce-datasource-tool__schema-summary[data-v-ab5bf27d]{color:#334155;font-size:13px;font-weight:600}.ce-datasource-tool__schema-search[data-v-ab5bf27d]{max-width:260px}.ce-datasource-tool__grid[data-v-ab5bf27d]{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr) minmax(120px,.4fr);gap:10px}.ce-datasource-tool__field[data-v-ab5bf27d]{display:flex;min-width:0;flex-direction:column;gap:6px}.ce-datasource-tool__label[data-v-ab5bf27d],.ce-datasource-tool__list-title[data-v-ab5bf27d]{margin:0;color:#334155;font-size:13px;font-weight:650}.ce-datasource-tool__input[data-v-ab5bf27d],.ce-datasource-tool__textarea[data-v-ab5bf27d]{width:100%;min-width:0;border:1px solid rgb(148 163 184 / .65);border-radius:8px;background:#fff;color:#0f172a;font:inherit}.ce-datasource-tool__input[data-v-ab5bf27d]{height:36px;padding:7px 10px}.ce-datasource-tool__textarea[data-v-ab5bf27d]{resize:vertical;padding:9px 10px}.ce-datasource-tool__textarea--json[data-v-ab5bf27d]{min-height:150px;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,monospace;font-size:13px;line-height:19px}.ce-datasource-tool__textarea--schema[data-v-ab5bf27d]{min-height:130px;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,monospace;font-size:13px;line-height:19px}.ce-datasource-tool__textarea--mock[data-v-ab5bf27d]{min-height:70px;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,monospace;font-size:13px;line-height:18px}.ce-datasource-tool__input[data-v-ab5bf27d]:focus,.ce-datasource-tool__textarea[data-v-ab5bf27d]:focus{outline:none;border-color:#2563eb;box-shadow:0 0 0 2px #2563eb26}.ce-datasource-tool__input[data-v-ab5bf27d]:-moz-read-only,.ce-datasource-tool__textarea[data-v-ab5bf27d]:-moz-read-only{background:#f8fafc}.ce-datasource-tool__input[data-v-ab5bf27d]:read-only,.ce-datasource-tool__textarea[data-v-ab5bf27d]:read-only,.ce-datasource-tool__input[data-v-ab5bf27d]:disabled{background:#f8fafc}.ce-datasource-tool__error[data-v-ab5bf27d],.ce-datasource-tool__body-error[data-v-ab5bf27d]{margin:0;color:#b91c1c;font-size:13px}.ce-datasource-tool__list[data-v-ab5bf27d]{display:flex;flex-direction:column;gap:8px}.ce-datasource-tool__list[open][data-v-ab5bf27d]{gap:8px}.ce-datasource-tool__list-header[data-v-ab5bf27d]{display:flex;align-items:center;justify-content:space-between;gap:10px;cursor:pointer;list-style:none}.ce-datasource-tool__list-header[data-v-ab5bf27d]::-webkit-details-marker{display:none}.ce-datasource-tool__action[data-v-ab5bf27d],.ce-datasource-tool__remove[data-v-ab5bf27d],.ce-datasource-tool__schema-button[data-v-ab5bf27d]{min-height:32px;border:1px solid rgb(203 213 225);border-radius:8px;background:#fff;color:#1e40af;font:inherit;font-weight:650;cursor:pointer}.ce-datasource-tool__action[data-v-ab5bf27d]{padding:5px 12px}.ce-datasource-tool__schema-button[data-v-ab5bf27d]{padding:5px 12px;white-space:nowrap}.ce-datasource-tool__remove[data-v-ab5bf27d]{padding:5px 10px;color:#b91c1c}.ce-datasource-tool__action[data-v-ab5bf27d]:hover,.ce-datasource-tool__remove[data-v-ab5bf27d]:hover,.ce-datasource-tool__schema-button[data-v-ab5bf27d]:hover{background:#f8fafc}.ce-datasource-tool__schema-button[data-v-ab5bf27d]:disabled{cursor:wait;opacity:.7}.ce-datasource-tool__tabs[data-v-ab5bf27d]{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));overflow:hidden;border:1px solid rgb(203 213 225);border-radius:8px;background:#f8fafc}.ce-datasource-tool__tab[data-v-ab5bf27d]{min-height:34px;border:0;border-right:1px solid rgb(203 213 225);padding:6px 10px;background:transparent;color:#475569;font:inherit;font-weight:650;cursor:pointer}.ce-datasource-tool__tab[data-v-ab5bf27d]:last-child{border-right:0}.ce-datasource-tool__tab--active[data-v-ab5bf27d]{background:#2563eb;color:#fff}.ce-datasource-tool__schema-tab-panel[data-v-ab5bf27d]{display:flex;flex-direction:column;gap:10px}.ce-datasource-tool__field-list[data-v-ab5bf27d]{display:flex;flex-direction:column;gap:8px}.ce-datasource-tool__field-list-summary[data-v-ab5bf27d]{color:#334155;font-size:13px;font-weight:650}.ce-datasource-tool__schema-field[data-v-ab5bf27d]{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:10px;align-items:center;border:1px solid rgb(226 232 240);border-radius:8px;padding:8px;background:#fff}.ce-datasource-tool__checkbox[data-v-ab5bf27d]{width:16px;height:16px;margin:0;accent-color:rgb(37 99 235)}.ce-datasource-tool__schema-field-main[data-v-ab5bf27d]{display:flex;min-width:0;flex-direction:column;gap:4px}.ce-datasource-tool__field-label-input[data-v-ab5bf27d]{height:32px}.ce-datasource-tool__schema-path[data-v-ab5bf27d]{overflow:hidden;color:#64748b;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,monospace;font-size:12px;line-height:16px;text-overflow:ellipsis;white-space:nowrap}.ce-datasource-tool__schema-badges[data-v-ab5bf27d]{display:flex;justify-content:flex-end;flex-wrap:wrap;gap:6px}.ce-datasource-tool__schema-badge[data-v-ab5bf27d]{display:inline-flex;align-items:center;min-height:24px;border-radius:999px;padding:3px 8px;background:#eff6ff;color:#1e40af;font-size:12px;font-weight:650;white-space:nowrap}.ce-datasource-tool__schema-badge--required[data-v-ab5bf27d]{background:#fef2f2;color:#b91c1c}.ce-datasource-tool__schema-tree[data-v-ab5bf27d]{display:flex;flex-direction:column;gap:6px;border:1px solid rgb(226 232 240);border-radius:8px;padding:8px;background:#f8fafc}.ce-datasource-tool__schema-node[data-v-ab5bf27d]{display:grid;grid-template-columns:minmax(90px,.5fr) minmax(0,1fr) auto auto;gap:8px;align-items:center;min-height:30px}.ce-datasource-tool__schema-node-name[data-v-ab5bf27d]{min-width:0;color:#0f172a;font-size:13px;font-weight:650;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ce-datasource-tool__empty[data-v-ab5bf27d]{margin:0;border:1px dashed rgb(203 213 225);border-radius:8px;padding:9px 10px;color:#64748b;font-size:13px}.ce-datasource-tool__row[data-v-ab5bf27d]{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr) auto;gap:8px;align-items:start}.ce-datasource-tool__body-row[data-v-ab5bf27d]{display:grid;grid-template-columns:minmax(120px,.8fr) minmax(110px,.4fr) minmax(0,1fr) auto;gap:8px;align-items:start}.ce-datasource-tool__body-error[data-v-ab5bf27d]{grid-column:3 / 5}@media(max-width:720px){.ce-datasource-tool__header[data-v-ab5bf27d],.ce-datasource-tool__schema-header[data-v-ab5bf27d]{align-items:stretch;flex-direction:column}.ce-datasource-tool__schema-search[data-v-ab5bf27d]{max-width:none}.ce-datasource-tool__grid[data-v-ab5bf27d],.ce-datasource-tool__row[data-v-ab5bf27d],.ce-datasource-tool__body-row[data-v-ab5bf27d],.ce-datasource-tool__schema-field[data-v-ab5bf27d],.ce-datasource-tool__schema-node[data-v-ab5bf27d]{grid-template-columns:1fr}.ce-datasource-tool__body-error[data-v-ab5bf27d]{grid-column:1}}.dark{border-color:#334155;background:#0f172a;color:#e2e8f0}.dark{border-bottom-color:#334155}.dark{border-top-color:#334155}.dark{border-top-color:#334155;background:#1e293b73}.dark{color:#f1f5f9}.dark{color:#94a3b8}.dark{color:#cbd5e1}.dark{border-color:#475569;background:#1e293b}.dark{border-right-color:#475569;color:#cbd5e1}.dark{background:#3b82f6;color:#fff}.dark{border-color:#475569e6;background:#0f172a;color:#e2e8f0}.dark{border-color:#475569;background:#0f172a}.dark{background:#1e293b}.dark{border-color:#475569;color:#94a3b8}.dark{border-color:#334155;background:#0f172a}.dark{background:#1e40af57;color:#bfdbfe}.dark{background:#7f1d1d59;color:#fecaca}.dark{color:#f87171}