@famgia/omnify-gui 1.0.4 → 1.0.5

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.
@@ -465,5 +465,5 @@ Please change the parent <Route path="${E}"> to <Route path="${E==="/"?"*":`${E}
465
465
  .row-has-changes:hover > td {
466
466
  background-color: ${a.colorWarningBgHover} !important;
467
467
  }
468
- `})]})}function XJ({schemaName:e}){const{previews:t,loadPreview:n,loading:r}=Vi(),{token:a}=ja.useToken(),[l,c]=s.useState("laravel");s.useEffect(()=>{n(l,e)},[l,e,n]);const u=d=>{c(d)};return r?V.jsx(Ia,{children:V.jsx("div",{style:{textAlign:"center",padding:a.paddingXL},children:V.jsx(ki,{size:"large"})})}):V.jsx(Ia,{children:V.jsx(yg,{activeKey:l,onChange:u,items:[{key:"laravel",label:"Laravel Migration",children:V.jsx(Vh,{previews:t,type:"laravel"})},{key:"typescript",label:"TypeScript",children:V.jsx(Vh,{previews:t,type:"typescript"})},{key:"sql",label:"Raw SQL",children:V.jsx(Vh,{previews:t,type:"sql"})}]})})}function Vh({previews:e,type:t}){const{token:n}=ja.useToken(),a=(Array.isArray(e)?e:[]).filter(l=>l.type===t);return a.length===0?V.jsx(qr,{image:qr.PRESENTED_IMAGE_SIMPLE,description:"No preview available"}):V.jsx("div",{style:{display:"flex",flexDirection:"column",gap:n.margin},children:a.map((l,c)=>V.jsxs("div",{children:[V.jsxs("div",{style:{display:"flex",alignItems:"center",gap:n.marginXS,marginBottom:n.marginXS},children:[V.jsx(tZ,{}),V.jsx("strong",{children:l.fileName})]}),V.jsx("pre",{style:{background:n.colorBgLayout,padding:n.padding,borderRadius:n.borderRadius,overflow:"auto",maxHeight:400,fontSize:13,lineHeight:1.5},children:V.jsx("code",{children:l.content})})]},c))})}const YJ=["String","Int","BigInt","Float","Decimal","Boolean","Text","LongText","Date","Time","Timestamp","Json","Email","Password","File","MultiFile","Point","Coordinates","Enum","Select","Lookup"],IM=["OneToOne","OneToMany","ManyToOne","ManyToMany"],QJ=["MorphTo","MorphOne","MorphMany","MorphToMany","MorphedByMany"],YO=["CASCADE","SET NULL","SET DEFAULT","RESTRICT","NO ACTION"];function MM(e){return!e||!e.trim()?!1:/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e.trim())}function ZJ(e,t,n){const r=t.trim();return e.some((a,l)=>l!==n&&a===r)}function JJ(e,t,n){const r=(e==null?void 0:e.trim())??"";return r?MM(r)?ZJ(t,r,n)?{valid:!1,error:"Duplicate value"}:{valid:!0}:{valid:!1,error:"Must be a valid identifier (a-z, A-Z, 0-9, _)"}:{valid:!1,error:"Value is required"}}const{Text:Jr}=Oo,eee=[{label:"Standard Relations",options:IM.map(e=>({value:e,label:e.replace(/([A-Z])/g," $1").trim()}))},{label:"Polymorphic Relations",options:QJ.map(e=>({value:e,label:e.replace(/([A-Z])/g," $1").trim()}))}],tee=["String","Email","Password"],nee=["Int","BigInt","Float","Decimal"];function ree(){const{name:e}=YY(),t=sd(),{schemas:n,loading:r,createSchema:a,updateSchema:l,validateSchema:c}=Vi(),{databaseType:u}=cc(),{token:d}=ja.useToken(),{message:m}=Jb.useApp(),g=_J[u],[v]=Et.useForm(),[h]=Et.useForm(),[b]=Et.useForm(),[y,C]=s.useState({name:"",kind:"object",id:!0,idType:"BigInt",timestamps:!0,softDelete:!1}),[S,x]=s.useState([]),[w,E]=s.useState([]),[R,N]=s.useState([]),[I,M]=s.useState(!1),j=y.name?y.name.charAt(0).toLowerCase()+y.name.slice(1):"",T=j?j.endsWith("y")?j.slice(0,-1)+"ies":j.endsWith("s")?j+"es":j+"s":"",z=T?T.replace(/([A-Z])/g,"_$1").toLowerCase().replace(/^_/,""):"",[L,D]=s.useState(!1),[A,_]=s.useState(!1),[k,P]=s.useState(null),[B,K]=s.useState(!1),[G,Q]=s.useState(null),[F,U]=s.useState(!1),[W,X]=s.useState(null),[J]=Et.useForm(),[ne,se]=s.useState([]),re=e&&e!=="new"?n[e]:null,oe=Object.keys(n).filter(pe=>pe!==e),Se=S.map(pe=>pe.name).filter(Boolean),me=(pe,be)=>{const we=R.map(ke=>ke.value),Ke=JJ(pe,we,be);return Ke.valid?null:Ke.error??"Invalid value"};s.useEffect(()=>{var pe,be,we,Ke,ke,He,Le,nt,pt,ht,zt;if(e==="new"){M(!0);const tt={name:"",kind:"object",id:!0,idType:"BigInt",timestamps:!0,softDelete:!1,authenticatableLoginIdField:"email",authenticatablePasswordField:"password",authenticatableGuardName:"web"};C(tt),x([]),E([]),N([]),v.setFieldsValue(tt),D(!0)}else if(re){M(!1);const tt={name:re.name,kind:re.kind,displayName:re.displayName,singular:re.singular,plural:re.plural,titleIndex:re.titleIndex,group:re.group,id:((pe=re.options)==null?void 0:pe.id)??!0,idType:((be=re.options)==null?void 0:be.idType)??"BigInt",timestamps:((we=re.options)==null?void 0:we.timestamps)??!1,softDelete:((Ke=re.options)==null?void 0:Ke.softDelete)??!1,tableName:(ke=re.options)==null?void 0:ke.tableName,translations:((He=re.options)==null?void 0:He.translations)??!1,authenticatable:((Le=re.options)==null?void 0:Le.authenticatable)??!1,authenticatableLoginIdField:((nt=re.options)==null?void 0:nt.authenticatableLoginIdField)??"email",authenticatablePasswordField:((pt=re.options)==null?void 0:pt.authenticatablePasswordField)??"password",authenticatableGuardName:((ht=re.options)==null?void 0:ht.authenticatableGuardName)??"web"};C(tt);const Ze=Object.entries(re.properties??{}).map(([Ft,Nt])=>({name:Ft,type:Nt.type,nullable:Nt.nullable,unique:Nt.unique,default:Nt.default!==void 0?String(Nt.default):void 0,displayName:Nt.displayName,description:Nt.description,relation:Nt.relation,target:Nt.target,targets:Nt.targets,morphName:Nt.morphName,inversedBy:Nt.inversedBy,mappedBy:Nt.mappedBy,onDelete:Nt.onDelete,onUpdate:Nt.onUpdate,owning:Nt.owning,joinTable:Nt.joinTable,length:Nt.length,precision:Nt.precision,scale:Nt.scale,unsigned:Nt.unsigned,enum:Nt.enum,options:Nt.options,source:Nt.source}));x(Ze);const Ct=(((zt=re.options)==null?void 0:zt.indexes)??[]).map(Ft=>({name:Ft.name,columns:[...Ft.columns],unique:Ft.unique,type:Ft.type}));E(Ct),N(re.values?[...re.values]:[])}},[e,re,v]);const ie=async()=>{try{if(y.kind==="enum"){for(let we=0;we<R.length;we++){const Ke=me(R[we].value,we);if(Ke){m.error(`Enum value ${we+1}: ${Ke}`);return}}if(R.length===0){m.error("Enum must have at least one value");return}}const pe={};for(const we of S){const Ke={type:we.type};we.nullable&&(Ke.nullable=we.nullable),we.unique&&(Ke.unique=we.unique),we.default!==void 0&&we.default!==""&&(Ke.default=we.default),we.displayName&&(Ke.displayName=we.displayName),we.description&&(Ke.description=we.description),we.relation&&(Ke.relation=we.relation),we.target&&(Ke.target=we.target),we.targets&&we.targets.length>0&&(Ke.targets=we.targets),we.morphName&&(Ke.morphName=we.morphName),we.inversedBy&&(Ke.inversedBy=we.inversedBy),we.mappedBy&&(Ke.mappedBy=we.mappedBy),we.onDelete&&(Ke.onDelete=we.onDelete),we.onUpdate&&(Ke.onUpdate=we.onUpdate),we.owning!==void 0&&(Ke.owning=we.owning),we.joinTable&&(Ke.joinTable=we.joinTable),we.length!==void 0&&(Ke.length=we.length),we.precision!==void 0&&(Ke.precision=we.precision),we.scale!==void 0&&(Ke.scale=we.scale),we.unsigned&&(Ke.unsigned=we.unsigned),we.enum&&(Ke.enum=we.enum),we.options&&we.options.length>0&&(Ke.options=we.options),we.source&&(Ke.source=we.source),pe[we.name]=Ke}const be={name:y.name,kind:y.kind,filePath:(re==null?void 0:re.filePath)??""};y.displayName&&(be.displayName=y.displayName),y.singular&&(be.singular=y.singular),y.plural&&(be.plural=y.plural),y.titleIndex&&(be.titleIndex=y.titleIndex),y.group&&(be.group=y.group),y.kind==="enum"?be.values=R:be.properties=pe,be.options={id:y.id,idType:y.idType,timestamps:y.timestamps,softDelete:y.softDelete},y.tableName&&(be.options.tableName=y.tableName),y.translations&&(be.options.translations=y.translations),y.authenticatable&&(be.options.authenticatable=!0,y.authenticatableLoginIdField&&(be.options.authenticatableLoginIdField=y.authenticatableLoginIdField),y.authenticatablePasswordField&&(be.options.authenticatablePasswordField=y.authenticatablePasswordField),y.authenticatableGuardName&&(be.options.authenticatableGuardName=y.authenticatableGuardName)),w.length>0&&(be.options.indexes=w.map(we=>({columns:we.columns,unique:we.unique,name:we.name,type:we.type}))),await c(be),I?(await a(be),m.success(`Schema "${y.name}" created`),t(`/schema/${y.name}`)):(await l(e,be),m.success(`Schema "${y.name}" saved`))}catch(pe){m.error(pe.message)}},ge=()=>{v.setFieldsValue(y),D(!0)},ue=async()=>{try{const pe=await v.validateFields();C({...y,...pe}),D(!1)}catch{}},ae=()=>{P(null),h.resetFields(),h.setFieldsValue({type:"String",nullable:!1,unique:!1}),_(!0)},ce=pe=>{P(pe);const be=S[pe];h.setFieldsValue(be),_(!0)},ye=async()=>{try{const pe=await h.validateFields(),be={name:pe.name,type:pe.type,nullable:pe.nullable,unique:pe.unique,default:pe.default,displayName:pe.displayName,description:pe.description,relation:pe.relation,target:pe.target,targets:pe.targets,morphName:pe.morphName,inversedBy:pe.inversedBy,mappedBy:pe.mappedBy,onDelete:pe.onDelete,onUpdate:pe.onUpdate,owning:pe.owning,joinTable:pe.joinTable,length:pe.length,precision:pe.precision,scale:pe.scale,unsigned:pe.unsigned,enum:pe.enum,options:pe.options,source:pe.source};if(k!==null){const we=[...S];we[k]=be,x(we)}else x([...S,be]);_(!1)}catch{}},Ce=pe=>{x(S.filter((be,we)=>we!==pe))},je=()=>{Q(null),b.resetFields(),b.setFieldsValue({unique:!1}),K(!0)},ze=pe=>{Q(pe);const be=w[pe];b.setFieldsValue(be),K(!0)},ve=async()=>{try{const pe=await b.validateFields(),be={name:pe.name||void 0,columns:pe.columns,unique:pe.unique,type:pe.type||void 0};if(G!==null){const we=[...w];we[G]=be,E(we)}else E([...w,be]);K(!1)}catch{}},Te=pe=>{E(w.filter((be,we)=>we!==pe))},Ee=()=>{X(null),J.resetFields(),J.setFieldsValue({value:"",label:""}),se([]),U(!0)},xe=pe=>{X(pe);const be=R[pe];J.setFieldsValue({value:be.value,label:be.label??""});const we=be.extra?Object.entries(be.extra).map(([Ke,ke])=>({key:Ke,value:String(ke)})):[];se(we),U(!0)},Ve=async()=>{try{const pe=await J.validateFields(),be=me(pe.value,W??R.length);if(be){m.error(be);return}const we={};for(const ke of ne)ke.key.trim()&&(we[ke.key.trim()]=ke.value);const Ke={value:pe.value,label:pe.label||void 0,extra:Object.keys(we).length>0?we:void 0};if(W!==null){const ke=[...R];ke[W]=Ke,N(ke)}else N([...R,Ke]);U(!1)}catch{}},Xe=pe=>{N(R.filter((be,we)=>we!==pe))},it=()=>{se([...ne,{key:"",value:""}])},at=(pe,be,we)=>{const Ke=[...ne];Ke[pe]={...Ke[pe],[be]:we},se(Ke)},Ye=pe=>{se(ne.filter((be,we)=>we!==pe))},Je=Et.useWatch("type",h),_e=Et.useWatch("relation",h),Ie=Et.useWatch("kind",v),We=Et.useWatch("authenticatable",v),Be=Et.useWatch("id",v),Ge=tee.includes(Je),Me=nee.includes(Je),Qe=Je==="Decimal",lt=Je==="Enum",mt=Je==="Select"||Je==="Lookup",Dt=Je==="Association",At=_e==="MorphTo",et=["MorphOne","MorphMany","MorphedByMany"].includes(_e??""),ct=["ManyToMany","MorphToMany"].includes(_e??""),gt=IM.includes(_e);if(r&&!re&&e!=="new")return V.jsx("div",{style:{textAlign:"center",padding:d.paddingXL},children:V.jsx(ki,{size:"large"})});const ot=[{title:"Name",dataIndex:"name",key:"name",render:pe=>V.jsx(Jr,{strong:!0,children:pe})},{title:"Type",dataIndex:"type",key:"type",render:(pe,be)=>V.jsxs(Vn,{children:[V.jsx(kn,{color:"blue",children:pe}),pe==="Association"&&be.target&&V.jsxs(kn,{color:"purple",children:[be.relation," → ",be.target]}),pe==="Association"&&be.targets&&be.targets.length>0&&V.jsxs(kn,{color:"magenta",children:[be.relation," → [",be.targets.join(", "),"]"]}),be.length!==void 0&&V.jsxs(kn,{color:"cyan",children:["len:",be.length]}),be.precision!==void 0&&V.jsxs(kn,{color:"cyan",children:["(",be.precision,",",be.scale??2,")"]})]})},{title:"Options",key:"options",render:(pe,be)=>V.jsxs(Vn,{size:"small",children:[be.nullable&&V.jsx(kn,{children:"Nullable"}),be.unique&&V.jsx(kn,{color:"orange",children:"Unique"}),be.unsigned&&V.jsx(kn,{color:"red",children:"Unsigned"}),be.default!==void 0&&be.default!==""&&V.jsx(Xa,{title:`Default: ${be.default}`,children:V.jsx(kn,{color:"green",children:"Default"})})]})},{title:"Actions",key:"actions",width:100,render:(pe,be,we)=>V.jsxs(Vn,{children:[V.jsx(Sn,{type:"text",icon:V.jsx(Mi,{}),onClick:()=>ce(we)}),V.jsx(vu,{title:"Delete this property?",onConfirm:()=>Ce(we),okText:"Yes",cancelText:"No",children:V.jsx(Sn,{type:"text",danger:!0,icon:V.jsx(nm,{})})})]})}],vt=[{title:"Name",dataIndex:"name",key:"name",render:(pe,be)=>V.jsx(Jr,{strong:!0,children:pe||`index_${be._idx+1}`})},{title:"Columns",dataIndex:"columns",key:"columns",render:pe=>V.jsx(Vn,{size:"small",children:pe.map(be=>V.jsx(kn,{color:"cyan",children:be},be))})},{title:"Options",key:"options",render:(pe,be)=>V.jsxs(Vn,{size:"small",children:[be.unique&&V.jsx(kn,{color:"orange",children:"Unique"}),be.type&&V.jsx(kn,{color:"geekblue",children:be.type})]})},{title:"Actions",key:"actions",width:100,render:(pe,be)=>V.jsxs(Vn,{children:[V.jsx(Sn,{type:"text",icon:V.jsx(Mi,{}),onClick:()=>ze(be._idx)}),V.jsx(vu,{title:"Delete this index?",onConfirm:()=>Te(be._idx),okText:"Yes",cancelText:"No",children:V.jsx(Sn,{type:"text",danger:!0,icon:V.jsx(nm,{})})})]})}],Mt=[];return y.id&&Mt.push(V.jsxs(kn,{color:"blue",children:["ID: ",y.idType]},"id")),y.timestamps&&Mt.push(V.jsx(kn,{color:"green",children:"Timestamps"},"ts")),y.softDelete&&Mt.push(V.jsx(kn,{color:"orange",children:"Soft Delete"},"sd")),y.translations&&Mt.push(V.jsx(kn,{color:"purple",children:"Translations"},"tr")),y.authenticatable&&Mt.push(V.jsx(kn,{color:"red",children:"Authenticatable"},"auth")),V.jsxs("div",{children:[V.jsxs("div",{style:{marginBottom:d.margin,display:"flex",justifyContent:"space-between"},children:[V.jsx(Sn,{icon:V.jsx(XQ,{}),onClick:()=>t("/"),children:"Back"}),V.jsx(Sn,{type:"primary",icon:V.jsx(OZ,{}),onClick:ie,size:"large",children:I?"Create Schema":"Save Changes"})]}),V.jsx(yg,{items:[{key:"editor",label:"Editor",children:V.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:d.margin},children:[V.jsx(Ia,{title:I?"New Schema":y.name,size:"small",extra:V.jsx(Sn,{icon:V.jsx(Mi,{}),onClick:ge,children:"Edit"}),children:V.jsxs(Pn,{column:3,size:"small",children:[V.jsx(Pn.Item,{label:"Name",children:V.jsx(Jr,{strong:!0,children:y.name||"-"})}),V.jsx(Pn.Item,{label:"Display Name",children:y.displayName||"-"}),V.jsx(Pn.Item,{label:"Kind",children:V.jsx(kn,{color:y.kind==="enum"?"purple":"blue",children:y.kind})}),V.jsx(Pn.Item,{label:"Singular",children:y.singular||V.jsxs(Jr,{type:"secondary",children:[j||"-"," (auto)"]})}),V.jsx(Pn.Item,{label:"Plural",children:y.plural||V.jsxs(Jr,{type:"secondary",children:[T||"-"," (auto)"]})}),V.jsx(Pn.Item,{label:"Group",children:y.group||"-"}),y.kind==="object"&&V.jsxs(V.Fragment,{children:[V.jsx(Pn.Item,{label:"Table Name",children:y.tableName?V.jsx(Jr,{code:!0,children:y.tableName}):V.jsxs(Jr,{type:"secondary",children:[V.jsx(Jr,{code:!0,children:z||"-"})," (auto)"]})}),V.jsx(Pn.Item,{label:"Title Field",children:y.titleIndex||"-"}),V.jsx(Pn.Item,{label:""}),V.jsx(Pn.Item,{label:"Options",span:3,children:Mt.length>0?V.jsx(Vn,{size:"small",children:Mt}):"-"}),y.authenticatable&&V.jsx(Pn.Item,{label:"Auth Config",span:3,children:V.jsxs(Vn,{children:[V.jsx(Jr,{type:"secondary",children:"Login:"})," ",y.authenticatableLoginIdField,V.jsx(Jr,{type:"secondary",children:"Password:"})," ",y.authenticatablePasswordField,V.jsx(Jr,{type:"secondary",children:"Guard:"})," ",y.authenticatableGuardName]})})]})]})}),y.kind==="enum"&&V.jsx(Ia,{title:"Enum Values",size:"small",extra:V.jsx(Sn,{type:"primary",icon:V.jsx(vl,{}),onClick:Ee,children:"Add Value"}),children:V.jsx(Ma,{dataSource:R.map((pe,be)=>({...pe,_idx:be,_key:`enum_${be}_${pe.value||"new"}`})),rowKey:"_key",pagination:!1,size:"small",locale:{emptyText:'No enum values defined. Click "Add Value" to start.'},columns:[{title:"Value",dataIndex:"value",key:"value",render:pe=>V.jsx(Jr,{strong:!0,code:!0,children:pe})},{title:"Label",dataIndex:"label",key:"label",render:pe=>pe||V.jsx(Jr,{type:"secondary",children:"-"})},{title:"Extra",key:"extra",width:120,render:(pe,be)=>{const we=be.extra?Object.keys(be.extra).length:0;return we>0?V.jsx(Xa,{title:Object.entries(be.extra).map(([Ke,ke])=>`${Ke}: ${ke}`).join(", "),children:V.jsxs(kn,{color:"blue",children:[we," props"]})}):V.jsx(Jr,{type:"secondary",children:"-"})}},{title:"Actions",key:"actions",width:100,render:(pe,be)=>V.jsxs(Vn,{children:[V.jsx(Sn,{type:"text",icon:V.jsx(Mi,{}),onClick:()=>xe(be._idx)}),V.jsx(vu,{title:"Delete this value?",onConfirm:()=>Xe(be._idx),okText:"Yes",cancelText:"No",children:V.jsx(Sn,{type:"text",danger:!0,icon:V.jsx(nm,{})})})]})}]})}),y.kind==="object"&&V.jsx(Ia,{title:"Properties",size:"small",extra:V.jsx(Sn,{type:"primary",icon:V.jsx(vl,{}),onClick:ae,children:"Add Property"}),children:V.jsx(Ma,{dataSource:S,columns:ot,rowKey:"name",pagination:!1,size:"small",locale:{emptyText:'No properties defined. Click "Add Property" to start.'}})}),y.kind==="object"&&V.jsx(Ia,{title:"Indexes",size:"small",extra:V.jsx(Sn,{type:"primary",icon:V.jsx(vl,{}),onClick:je,disabled:Se.length===0,children:"Add Index"}),children:V.jsx(Ma,{dataSource:w.map((pe,be)=>({...pe,_idx:be,_key:`idx_${be}_${pe.columns.join("_")}`})),columns:vt,rowKey:"_key",pagination:!1,size:"small",locale:{emptyText:'No indexes defined. Click "Add Index" to optimize queries.'}})})]})},{key:"preview",label:"Code Preview",children:V.jsx(XJ,{schemaName:e==="new"?void 0:e})}]}),V.jsx(Gr,{title:"Edit Schema",open:L,onOk:ue,onCancel:()=>D(!1),okText:"Apply",width:700,children:V.jsxs(Et,{form:v,layout:"vertical",style:{marginTop:d.margin},children:[V.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gap:d.margin},children:[V.jsx(Et.Item,{name:"name",label:"Schema Name",rules:[{required:!0,message:"Name is required"}],children:V.jsx(Fn,{placeholder:"e.g., User, Post",disabled:!I})}),V.jsx(Et.Item,{name:"displayName",label:"Display Name",children:V.jsx(Fn,{placeholder:"e.g., User Account"})}),V.jsx(Et.Item,{name:"kind",label:"Kind",children:V.jsx(tr,{disabled:!I,options:[{value:"object",label:"Object"},{value:"enum",label:"Enum"}]})})]}),V.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gap:d.margin},children:[V.jsx(Et.Item,{name:"singular",label:"Singular Name",children:V.jsx(Fn,{placeholder:j?`${j} (auto)`:"e.g., user"})}),V.jsx(Et.Item,{name:"plural",label:"Plural Name",children:V.jsx(Fn,{placeholder:T?`${T} (auto)`:"e.g., users"})}),V.jsx(Et.Item,{name:"group",label:"Group",children:V.jsx(Fn,{placeholder:"e.g., auth, content"})})]}),Ie==="object"&&V.jsxs(V.Fragment,{children:[V.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:d.margin},children:[V.jsx(Et.Item,{name:"tableName",label:"Custom Table Name",children:V.jsx(Fn,{placeholder:z?`${z} (auto)`:"e.g., users"})}),V.jsx(Et.Item,{name:"titleIndex",label:"Title Field",children:V.jsx(tr,{allowClear:!0,options:Se.map(pe=>({value:pe,label:pe})),placeholder:"Field to use as title"})})]}),V.jsx(dh,{style:{margin:`${d.marginSM}px 0`}}),V.jsxs("div",{style:{display:"flex",gap:d.marginLG,flexWrap:"wrap",alignItems:"flex-end"},children:[V.jsx(Et.Item,{name:"id",valuePropName:"checked",noStyle:!0,children:V.jsx(ta,{children:"Auto ID"})}),V.jsx(Et.Item,{name:"idType",label:"ID Type",style:{marginBottom:0,minWidth:100},children:V.jsx(tr,{disabled:!Be,options:[{value:"BigInt",label:"BigInt"},{value:"Int",label:"Int"},{value:"Uuid",label:"UUID"},{value:"String",label:"String"}]})}),V.jsx(Et.Item,{name:"timestamps",valuePropName:"checked",noStyle:!0,children:V.jsx(ta,{children:"Timestamps"})}),V.jsx(Et.Item,{name:"softDelete",valuePropName:"checked",noStyle:!0,children:V.jsx(ta,{children:"Soft Delete"})}),V.jsx(Et.Item,{name:"translations",valuePropName:"checked",noStyle:!0,children:V.jsx(ta,{children:"Translations"})}),V.jsx(Et.Item,{name:"authenticatable",valuePropName:"checked",noStyle:!0,children:V.jsx(ta,{children:"Authenticatable"})})]}),We&&V.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gap:d.margin,marginTop:d.margin,background:d.colorBgTextHover,padding:d.padding,borderRadius:d.borderRadius},children:[V.jsx(Et.Item,{name:"authenticatableLoginIdField",label:"Login ID Field",style:{marginBottom:0},children:V.jsx(Fn,{placeholder:"email"})}),V.jsx(Et.Item,{name:"authenticatablePasswordField",label:"Password Field",style:{marginBottom:0},children:V.jsx(Fn,{placeholder:"password"})}),V.jsx(Et.Item,{name:"authenticatableGuardName",label:"Guard Name",style:{marginBottom:0},children:V.jsx(Fn,{placeholder:"web"})})]})]})]})}),V.jsx(Gr,{title:k!==null?"Edit Property":"Add Property",open:A,onOk:ye,onCancel:()=>_(!1),okText:k!==null?"Update":"Add",width:600,children:V.jsxs(Et,{form:h,layout:"vertical",style:{marginTop:d.margin},children:[V.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:d.margin},children:[V.jsx(Et.Item,{name:"name",label:"Property Name",rules:[{required:!0,message:"Name is required"},{pattern:/^[a-zA-Z_][a-zA-Z0-9_]*$/,message:"Invalid property name"}],children:V.jsx(Fn,{placeholder:"e.g., email, firstName"})}),V.jsx(Et.Item,{name:"type",label:"Type",rules:[{required:!0,message:"Type is required"}],children:V.jsx(tr,{options:[...YJ.map(pe=>({value:pe,label:pe})),{value:"Association",label:"Association (Relation)"}],showSearch:!0})})]}),Ge&&V.jsx(Et.Item,{name:"length",label:"Max Length",children:V.jsx(em,{min:1,max:65535,placeholder:"255",style:{width:"100%"}})}),Me&&V.jsxs("div",{style:{display:"grid",gridTemplateColumns:Qe?"1fr 1fr 1fr":"1fr",gap:d.margin},children:[Qe&&V.jsxs(V.Fragment,{children:[V.jsx(Et.Item,{name:"precision",label:"Precision (Total Digits)",children:V.jsx(em,{min:1,max:65,placeholder:"8",style:{width:"100%"}})}),V.jsx(Et.Item,{name:"scale",label:"Scale (Decimal Places)",children:V.jsx(em,{min:0,max:30,placeholder:"2",style:{width:"100%"}})})]}),V.jsx(Et.Item,{name:"unsigned",valuePropName:"checked",style:{alignSelf:"end"},children:V.jsx(ta,{children:"Unsigned (positive only)"})})]}),lt&&V.jsx(Et.Item,{name:"enum",label:"Enum Reference or Values",rules:[{required:!0,message:"Enum is required"}],children:V.jsx(tr,{mode:"tags",placeholder:"Type enum name or add values",options:oe.filter(pe=>{var be;return((be=n[pe])==null?void 0:be.kind)==="enum"}).map(pe=>({value:pe,label:`${pe} (Enum)`}))})}),mt&&V.jsxs(V.Fragment,{children:[V.jsx(Et.Item,{name:"options",label:"Options (for Select)",children:V.jsx(tr,{mode:"tags",placeholder:"Add options"})}),V.jsx(Et.Item,{name:"source",label:"Source Schema (for Lookup)",children:V.jsx(tr,{allowClear:!0,options:oe.map(pe=>({value:pe,label:pe})),placeholder:"Select source schema"})})]}),Dt&&V.jsxs(V.Fragment,{children:[V.jsx(Et.Item,{name:"relation",label:"Relation Type",rules:[{required:!0,message:"Relation is required"}],children:V.jsx(tr,{options:eee})}),gt&&V.jsx(Et.Item,{name:"target",label:"Target Schema",rules:[{required:!0,message:"Target is required"}],children:V.jsx(tr,{options:oe.map(pe=>({value:pe,label:pe})),placeholder:"Select target schema",showSearch:!0})}),At&&V.jsx(Et.Item,{name:"targets",label:"Target Schemas (Polymorphic)",rules:[{required:!0,message:"At least one target is required"}],children:V.jsx(tr,{mode:"multiple",options:oe.map(pe=>({value:pe,label:pe})),placeholder:"Select possible target schemas"})}),et&&V.jsxs(V.Fragment,{children:[V.jsx(Et.Item,{name:"target",label:"Target Schema",rules:[{required:!0,message:"Target is required"}],children:V.jsx(tr,{options:oe.map(pe=>({value:pe,label:pe})),placeholder:"Select target schema",showSearch:!0})}),V.jsx(Et.Item,{name:"morphName",label:"Morph Name",rules:[{required:!0,message:"Morph name is required for polymorphic inverse"}],children:V.jsx(Fn,{placeholder:"e.g., commentable, taggable"})})]}),_e==="MorphToMany"&&V.jsxs(V.Fragment,{children:[V.jsx(Et.Item,{name:"target",label:"Target Schema",rules:[{required:!0,message:"Target is required"}],children:V.jsx(tr,{options:oe.map(pe=>({value:pe,label:pe})),placeholder:"Select target schema",showSearch:!0})}),V.jsx(Et.Item,{name:"morphName",label:"Morph Name",children:V.jsx(Fn,{placeholder:"e.g., taggable"})})]}),V.jsx(Wb,{ghost:!0,items:[{key:"advanced",label:"Advanced Options",children:V.jsxs(V.Fragment,{children:[V.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:d.margin},children:[V.jsx(Et.Item,{name:"inversedBy",label:"Inversed By",children:V.jsx(Fn,{placeholder:"Property on target"})}),V.jsx(Et.Item,{name:"mappedBy",label:"Mapped By",children:V.jsx(Fn,{placeholder:"Property on target"})})]}),V.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:d.margin},children:[V.jsx(Et.Item,{name:"onDelete",label:"On Delete",children:V.jsx(tr,{allowClear:!0,options:YO.map(pe=>({value:pe,label:pe})),placeholder:"CASCADE"})}),V.jsx(Et.Item,{name:"onUpdate",label:"On Update",children:V.jsx(tr,{allowClear:!0,options:YO.map(pe=>({value:pe,label:pe})),placeholder:"CASCADE"})})]}),ct&&V.jsx(Et.Item,{name:"joinTable",label:"Custom Join Table Name",children:V.jsx(Fn,{placeholder:"Auto-generated if empty"})}),V.jsx(Et.Item,{name:"owning",valuePropName:"checked",children:V.jsx(ta,{children:"Owning Side (has foreign key)"})})]})}]})]}),V.jsx(dh,{style:{margin:`${d.marginSM}px 0`}}),V.jsxs(Vn,{size:"large",children:[V.jsx(Et.Item,{name:"nullable",valuePropName:"checked",noStyle:!0,children:V.jsx(ta,{children:"Nullable"})}),V.jsx(Et.Item,{name:"unique",valuePropName:"checked",noStyle:!0,children:V.jsx(ta,{children:"Unique"})})]}),V.jsx(Et.Item,{name:"default",label:"Default Value",style:{marginTop:d.margin},children:V.jsx(Fn,{placeholder:"Leave empty for no default"})}),V.jsx(Et.Item,{name:"displayName",label:"Display Name",children:V.jsx(Fn,{placeholder:"Human readable name for forms"})}),V.jsx(Et.Item,{name:"description",label:"Description",children:V.jsx(Fn.TextArea,{placeholder:"Field description/comment",rows:2})})]})}),V.jsx(Gr,{title:G!==null?"Edit Index":"Add Index",open:B,onOk:ve,onCancel:()=>K(!1),okText:G!==null?"Update":"Add",width:500,children:V.jsxs(Et,{form:b,layout:"vertical",style:{marginTop:d.margin},children:[V.jsx(Et.Item,{name:"columns",label:"Columns",rules:[{required:!0,message:"Select at least one column"}],children:V.jsx(tr,{mode:"multiple",options:Se.map(pe=>({value:pe,label:pe})),placeholder:"Select columns for this index"})}),V.jsx(Et.Item,{name:"name",label:"Index Name (optional)",children:V.jsx(Fn,{placeholder:"Auto-generated if empty"})}),g.length>0&&V.jsx(Et.Item,{name:"type",label:`Index Type (${u})`,children:V.jsx(tr,{allowClear:!0,options:g.map(pe=>({value:pe,label:pe.toUpperCase()})),placeholder:"Default: btree"})}),V.jsx(Et.Item,{name:"unique",valuePropName:"checked",noStyle:!0,children:V.jsx(ta,{children:"Unique Index"})})]})}),V.jsx(Gr,{title:W!==null?"Edit Enum Value":"Add Enum Value",open:F,onOk:Ve,onCancel:()=>U(!1),okText:W!==null?"Update":"Add",width:500,children:V.jsxs(Et,{form:J,layout:"vertical",style:{marginTop:d.margin},children:[V.jsx(Et.Item,{name:"value",label:"Value",normalize:pe=>(pe==null?void 0:pe.trim())??pe,rules:[{required:!0,message:"Value is required"},{validator:(pe,be)=>be?MM(be)?Promise.resolve():Promise.reject(new Error("Must be a valid identifier (a-z, A-Z, 0-9, _)")):Promise.resolve()}],children:V.jsx(Fn,{placeholder:"e.g., ACTIVE, pending, InProgress"})}),V.jsx(Et.Item,{name:"label",label:"Display Label (for forms)",children:V.jsx(Fn,{placeholder:"e.g., Active Status, In Progress"})}),V.jsx(dh,{style:{margin:`${d.marginSM}px 0`}}),V.jsxs("div",{style:{marginBottom:d.marginSM},children:[V.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:d.marginXS},children:[V.jsx(Jr,{type:"secondary",children:"Extra Properties (for UI customization)"}),V.jsx(Sn,{size:"small",icon:V.jsx(vl,{}),onClick:it,children:"Add Property"})]}),ne.length===0?V.jsx(Jr,{type:"secondary",style:{fontStyle:"italic",display:"block"},children:"No extra properties. Add custom fields like bgColor, textColor, icon, order, etc."}):V.jsx(Vn,{direction:"vertical",style:{width:"100%"},children:ne.map((pe,be)=>V.jsxs(Vn,{style:{width:"100%"},children:[V.jsx(Fn,{value:pe.key,onChange:we=>at(be,"key",we.target.value),placeholder:"Key (e.g., bgColor)",style:{width:150}}),V.jsx(Fn,{value:pe.value,onChange:we=>at(be,"value",we.target.value),placeholder:"Value (e.g., #ff0000)",style:{width:200}}),V.jsx(Sn,{type:"text",danger:!0,icon:V.jsx(Tm,{}),onClick:()=>Ye(be)})]},be))})]})]})})]})}const{Title:aee,Text:iu}=Oo,{Panel:oee}=Wb;function iee(){const{token:e}=ja.useToken(),[t,n]=s.useState([]),[r,a]=s.useState(!0),[l,c]=s.useState(null),[u,d]=s.useState(null),[m,g]=s.useState(!1),[v,h]=s.useState(!1),[b,y]=s.useState(null),[C,S]=s.useState(null);s.useEffect(()=>{x()},[]);const x=async()=>{a(!0),c(null);try{const N=await yu.getAll();n(N.reverse())}catch(N){c(N.message)}finally{a(!1)}},w=async N=>{try{const I=await yu.get(N);d(I),g(!0)}catch(I){c(I.message)}},E=async(N,I)=>{try{const M=await yu.getDiff(N,I);y(M),S({from:N,to:I}),h(!0)}catch(M){c(M.message)}},R=[{title:"Version",dataIndex:"version",key:"version",width:100,render:N=>V.jsx(Ks,{count:`v${N}`,style:{backgroundColor:e.colorPrimary}})},{title:"Migration",dataIndex:"migration",key:"migration",ellipsis:!0,render:N=>N||V.jsx(iu,{type:"secondary",children:"-"})},{title:"Description",dataIndex:"description",key:"description",ellipsis:!0,render:N=>N||V.jsx(iu,{type:"secondary",children:"-"})},{title:"Schemas",dataIndex:"schemaCount",key:"schemaCount",width:100,align:"center",render:N=>V.jsx(kn,{children:N})},{title:"Changes",dataIndex:"changeCount",key:"changeCount",width:100,align:"center",render:N=>V.jsx(kn,{color:N>0?"blue":"default",children:N})},{title:"Timestamp",dataIndex:"timestamp",key:"timestamp",width:180,render:N=>new Date(N).toLocaleString()},{title:"Actions",key:"actions",width:150,render:(N,I)=>V.jsxs(Vn,{children:[V.jsx(Sn,{type:"text",icon:V.jsx(fI,{}),onClick:()=>w(I.version)}),I.version>1&&V.jsx(Sn,{type:"text",icon:V.jsx(Bu,{}),onClick:()=>E(I.version-1,I.version)})]})}];return r?V.jsx("div",{style:{textAlign:"center",padding:e.paddingXL},children:V.jsx(ki,{size:"large"})}):V.jsxs("div",{children:[V.jsx("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:e.margin},children:V.jsxs(aee,{level:3,style:{margin:0},children:[V.jsx(cb,{style:{marginRight:8}}),"Version History"]})}),l&&V.jsx(Tu,{message:"Error",description:l,type:"error",showIcon:!0,closable:!0,style:{marginBottom:e.margin},onClose:()=>c(null)}),t.length===0?V.jsx(qr,{image:qr.PRESENTED_IMAGE_SIMPLE,description:"No versions found. Generate a migration to create the first version."}):V.jsx(Ma,{columns:R,dataSource:t,rowKey:"version",pagination:{pageSize:10}}),V.jsx(Gr,{title:V.jsxs(Vn,{children:[V.jsx(cb,{}),V.jsxs("span",{children:["Version ",u==null?void 0:u.version]})]}),open:m,onCancel:()=>g(!1),footer:null,width:800,children:u&&V.jsxs("div",{children:[V.jsxs(Pn,{column:2,size:"small",style:{marginBottom:16},children:[V.jsx(Pn.Item,{label:"Version",children:u.version}),V.jsx(Pn.Item,{label:"Driver",children:u.driver}),V.jsx(Pn.Item,{label:"Migration",children:u.migration||"-"}),V.jsx(Pn.Item,{label:"Timestamp",children:new Date(u.timestamp).toLocaleString()}),u.description&&V.jsx(Pn.Item,{label:"Description",span:2,children:u.description})]}),V.jsx(Ia,{title:"Changes",size:"small",style:{marginBottom:16},children:u.changes.length===0?V.jsx(iu,{type:"secondary",children:"No changes recorded"}):V.jsx(pb,{changes:u.changes,compact:!0})}),V.jsx(Ia,{title:"Schema Snapshot",size:"small",children:V.jsx(Wb,{ghost:!0,children:Object.entries(u.snapshot).map(([N,I])=>V.jsx(oee,{header:V.jsxs(Vn,{children:[V.jsx(oc,{}),V.jsx(iu,{strong:!0,children:N}),V.jsx(kn,{children:I.kind})]}),children:V.jsx("pre",{style:{fontSize:12,background:e.colorBgLayout,padding:12,borderRadius:e.borderRadius,overflow:"auto",maxHeight:300},children:JSON.stringify(I,null,2)})},N))})})]})}),V.jsx(Gr,{title:V.jsxs(Vn,{children:[V.jsx(Bu,{}),V.jsxs("span",{children:["Diff: v",C==null?void 0:C.from," → v",C==null?void 0:C.to]})]}),open:v,onCancel:()=>h(!1),footer:null,width:700,children:b&&V.jsx("div",{children:b.changes.length===0?V.jsx(qr,{description:"No changes between versions"}):V.jsxs("div",{children:[V.jsxs(iu,{type:"secondary",style:{marginBottom:16,display:"block"},children:[b.changes.length," change(s) detected"]}),V.jsx(pb,{changes:b.changes})]})})})]})}const{Title:lee,Text:Lf}=Oo,see=[{value:"mysql",label:"MySQL / MariaDB"},{value:"postgresql",label:"PostgreSQL"},{value:"sqlite",label:"SQLite"},{value:"sqlserver",label:"SQL Server"}];function cee(){const{t:e}=NJ(),{darkMode:t,toggleDarkMode:n,previewPanelOpen:r,togglePreviewPanel:a,databaseType:l,setDatabaseType:c,language:u,setLanguage:d}=cc(),{token:m}=ja.useToken(),[g,v]=s.useState(null),[h,b]=s.useState(!0);return s.useEffect(()=>{va.get("/api/config").then(v).catch(console.error).finally(()=>b(!1))},[]),h?V.jsx("div",{style:{textAlign:"center",padding:m.paddingXL},children:V.jsx(ki,{size:"large"})}):V.jsxs("div",{children:[V.jsx(lee,{level:3,children:e("settings.title")}),V.jsxs(Ia,{title:e("settings.database"),style:{marginBottom:m.margin},children:[V.jsx(Pn,{column:1,children:V.jsx(Pn.Item,{label:e("settings.databaseType"),children:V.jsx(tr,{value:l,onChange:c,options:see,style:{width:200}})})}),V.jsx(Lf,{type:"secondary",style:{marginTop:m.marginSM,display:"block"},children:e("settings.databaseHint")})]}),V.jsx(Ia,{title:e("settings.appearance"),style:{marginBottom:m.margin},children:V.jsxs(Pn,{column:1,children:[V.jsx(Pn.Item,{label:e("settings.language"),children:V.jsx(tr,{value:u,onChange:y=>d(y),options:zJ,style:{width:200}})}),V.jsx(Pn.Item,{label:e("settings.darkMode"),children:V.jsx(Om,{checked:t,onChange:n})}),V.jsx(Pn.Item,{label:e("settings.showPreview"),children:V.jsx(Om,{checked:r,onChange:a})})]})}),V.jsx(Ia,{title:e("settings.serverConfig"),children:V.jsxs(Pn,{column:1,children:[V.jsx(Pn.Item,{label:e("settings.schemasDir"),children:V.jsx(Lf,{code:!0,children:(g==null?void 0:g.schemasDir)??"N/A"})}),V.jsx(Pn.Item,{label:e("settings.serverPort"),children:V.jsx(Lf,{code:!0,children:(g==null?void 0:g.port)??"N/A"})}),V.jsx(Pn.Item,{label:e("settings.host"),children:V.jsx(Lf,{code:!0,children:(g==null?void 0:g.host)??"N/A"})})]})})]})}function uee(){const{loadSchemas:e}=Vi(),{darkMode:t}=cc();return s.useEffect(()=>{e()},[e]),V.jsx(uo,{theme:{algorithm:t?ja.darkAlgorithm:ja.defaultAlgorithm,token:{colorPrimary:"#1677ff",borderRadius:6}},children:V.jsx(Jb,{children:V.jsx(AQ,{children:V.jsx(mQ,{children:V.jsxs(ul,{element:V.jsx(VJ,{}),children:[V.jsx(ul,{path:"/",element:V.jsx(GJ,{})}),V.jsx(ul,{path:"/schema/:name",element:V.jsx(ree,{})}),V.jsx(ul,{path:"/history",element:V.jsx(iee,{})}),V.jsx(ul,{path:"/settings",element:V.jsx(cee,{})}),V.jsx(ul,{path:"*",element:V.jsx(uQ,{to:"/",replace:!0})})]})})})})})}const jM=document.getElementById("root");if(!jM)throw new Error("Root element not found");nM.createRoot(jM).render(V.jsx(s.StrictMode,{children:V.jsx(uee,{})}));
469
- //# sourceMappingURL=index-DSUtWpU_.js.map
468
+ `})]})}function XJ({schemaName:e}){const{previews:t,loadPreview:n,loading:r}=Vi(),{token:a}=ja.useToken(),[l,c]=s.useState("laravel");s.useEffect(()=>{n(l,e)},[l,e,n]);const u=d=>{c(d)};return r?V.jsx(Ia,{children:V.jsx("div",{style:{textAlign:"center",padding:a.paddingXL},children:V.jsx(ki,{size:"large"})})}):V.jsx(Ia,{children:V.jsx(yg,{activeKey:l,onChange:u,items:[{key:"laravel",label:"Laravel Migration",children:V.jsx(Vh,{previews:t,type:"laravel"})},{key:"typescript",label:"TypeScript",children:V.jsx(Vh,{previews:t,type:"typescript"})},{key:"sql",label:"Raw SQL",children:V.jsx(Vh,{previews:t,type:"sql"})}]})})}function Vh({previews:e,type:t}){const{token:n}=ja.useToken(),a=(Array.isArray(e)?e:[]).filter(l=>l.type===t);return a.length===0?V.jsx(qr,{image:qr.PRESENTED_IMAGE_SIMPLE,description:"No preview available"}):V.jsx("div",{style:{display:"flex",flexDirection:"column",gap:n.margin},children:a.map((l,c)=>V.jsxs("div",{children:[V.jsxs("div",{style:{display:"flex",alignItems:"center",gap:n.marginXS,marginBottom:n.marginXS},children:[V.jsx(tZ,{}),V.jsx("strong",{children:l.fileName})]}),V.jsx("pre",{style:{background:n.colorBgLayout,padding:n.padding,borderRadius:n.borderRadius,overflow:"auto",maxHeight:400,fontSize:13,lineHeight:1.5},children:V.jsx("code",{children:l.content})})]},c))})}const YJ=["String","Int","BigInt","Float","Decimal","Boolean","Text","LongText","Date","Time","Timestamp","Json","Email","Password","File","MultiFile","Point","Coordinates","Enum","Select","Lookup"],IM=["OneToOne","OneToMany","ManyToOne","ManyToMany"],QJ=["MorphTo","MorphOne","MorphMany","MorphToMany","MorphedByMany"],YO=["CASCADE","SET NULL","SET DEFAULT","RESTRICT","NO ACTION"];function MM(e){return!e||!e.trim()?!1:/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e.trim())}function ZJ(e,t,n){const r=t.trim();return e.some((a,l)=>l!==n&&a===r)}function JJ(e,t,n){const r=(e==null?void 0:e.trim())??"";return r?MM(r)?ZJ(t,r,n)?{valid:!1,error:"Duplicate value"}:{valid:!0}:{valid:!1,error:"Must be a valid identifier (a-z, A-Z, 0-9, _)"}:{valid:!1,error:"Value is required"}}const{Text:Jr}=Oo,eee=[{label:"Standard Relations",options:IM.map(e=>({value:e,label:e.replace(/([A-Z])/g," $1").trim()}))},{label:"Polymorphic Relations",options:QJ.map(e=>({value:e,label:e.replace(/([A-Z])/g," $1").trim()}))}],tee=["String","Email","Password"],nee=["Int","BigInt","Float","Decimal"];function ree(){const{name:e}=YY(),t=sd(),{schemas:n,loading:r,createSchema:a,updateSchema:l,validateSchema:c}=Vi(),{databaseType:u}=cc(),{token:d}=ja.useToken(),{message:m}=Jb.useApp(),g=_J[u],[v]=Et.useForm(),[h]=Et.useForm(),[b]=Et.useForm(),[y,C]=s.useState({name:"",kind:"object",id:!0,idType:"BigInt",timestamps:!0,softDelete:!1}),[S,x]=s.useState([]),[w,E]=s.useState([]),[R,N]=s.useState([]),[I,M]=s.useState(!1),j=y.name?y.name.charAt(0).toLowerCase()+y.name.slice(1):"",T=j?j.endsWith("y")?j.slice(0,-1)+"ies":j.endsWith("s")?j+"es":j+"s":"",z=T?T.replace(/([A-Z])/g,"_$1").toLowerCase().replace(/^_/,""):"",[L,D]=s.useState(!1),[A,_]=s.useState(!1),[k,P]=s.useState(null),[B,K]=s.useState(!1),[G,Q]=s.useState(null),[F,U]=s.useState(!1),[W,X]=s.useState(null),[J]=Et.useForm(),[ne,se]=s.useState([]),re=e&&e!=="new"?n[e]:null,oe=Object.keys(n).filter(pe=>pe!==e),Se=S.map(pe=>pe.name).filter(Boolean),me=(pe,be)=>{const we=R.map(ke=>ke.value),Ke=JJ(pe,we,be);return Ke.valid?null:Ke.error??"Invalid value"};s.useEffect(()=>{var pe,be,we,Ke,ke,He,Le,nt,pt,ht,zt;if(e==="new"){M(!0);const tt={name:"",kind:"object",id:!0,idType:"BigInt",timestamps:!0,softDelete:!1,authenticatableLoginIdField:"email",authenticatablePasswordField:"password",authenticatableGuardName:"web"};C(tt),x([]),E([]),N([]),v.setFieldsValue(tt),D(!0)}else if(re){M(!1);const tt={name:re.name,kind:re.kind,displayName:re.displayName,singular:re.singular,plural:re.plural,titleIndex:re.titleIndex,group:re.group,id:((pe=re.options)==null?void 0:pe.id)??!0,idType:((be=re.options)==null?void 0:be.idType)??"BigInt",timestamps:((we=re.options)==null?void 0:we.timestamps)??!1,softDelete:((Ke=re.options)==null?void 0:Ke.softDelete)??!1,tableName:(ke=re.options)==null?void 0:ke.tableName,translations:((He=re.options)==null?void 0:He.translations)??!1,authenticatable:((Le=re.options)==null?void 0:Le.authenticatable)??!1,authenticatableLoginIdField:((nt=re.options)==null?void 0:nt.authenticatableLoginIdField)??"email",authenticatablePasswordField:((pt=re.options)==null?void 0:pt.authenticatablePasswordField)??"password",authenticatableGuardName:((ht=re.options)==null?void 0:ht.authenticatableGuardName)??"web"};C(tt);const Ze=Object.entries(re.properties??{}).map(([Ft,Nt])=>({name:Ft,type:Nt.type,nullable:Nt.nullable,unique:Nt.unique,default:Nt.default!==void 0?String(Nt.default):void 0,displayName:Nt.displayName,description:Nt.description,relation:Nt.relation,target:Nt.target,targets:Nt.targets,morphName:Nt.morphName,inversedBy:Nt.inversedBy,mappedBy:Nt.mappedBy,onDelete:Nt.onDelete,onUpdate:Nt.onUpdate,owning:Nt.owning,joinTable:Nt.joinTable,length:Nt.length,precision:Nt.precision,scale:Nt.scale,unsigned:Nt.unsigned,enum:Nt.enum,options:Nt.options,source:Nt.source}));x(Ze);const Ct=(((zt=re.options)==null?void 0:zt.indexes)??[]).map(Ft=>({name:Ft.name,columns:[...Ft.columns],unique:Ft.unique,type:Ft.type}));E(Ct),N(re.values?[...re.values]:[])}},[e,re,v]);const ie=async()=>{try{if(y.kind==="enum"){for(let we=0;we<R.length;we++){const Ke=me(R[we].value,we);if(Ke){m.error(`Enum value ${we+1}: ${Ke}`);return}}if(R.length===0){m.error("Enum must have at least one value");return}}const pe={};for(const we of S){const Ke={type:we.type};we.nullable&&(Ke.nullable=we.nullable),we.unique&&(Ke.unique=we.unique),we.default!==void 0&&we.default!==""&&(Ke.default=we.default),we.displayName&&(Ke.displayName=we.displayName),we.description&&(Ke.description=we.description),we.relation&&(Ke.relation=we.relation),we.target&&(Ke.target=we.target),we.targets&&we.targets.length>0&&(Ke.targets=we.targets),we.morphName&&(Ke.morphName=we.morphName),we.inversedBy&&(Ke.inversedBy=we.inversedBy),we.mappedBy&&(Ke.mappedBy=we.mappedBy),we.onDelete&&(Ke.onDelete=we.onDelete),we.onUpdate&&(Ke.onUpdate=we.onUpdate),we.owning!==void 0&&(Ke.owning=we.owning),we.joinTable&&(Ke.joinTable=we.joinTable),we.length!==void 0&&(Ke.length=we.length),we.precision!==void 0&&(Ke.precision=we.precision),we.scale!==void 0&&(Ke.scale=we.scale),we.unsigned&&(Ke.unsigned=we.unsigned),we.enum&&(Ke.enum=we.enum),we.options&&we.options.length>0&&(Ke.options=we.options),we.source&&(Ke.source=we.source),pe[we.name]=Ke}const be={name:y.name,kind:y.kind,filePath:(re==null?void 0:re.filePath)??""};y.displayName&&(be.displayName=y.displayName),y.singular&&(be.singular=y.singular),y.plural&&(be.plural=y.plural),y.titleIndex&&(be.titleIndex=y.titleIndex),y.group&&(be.group=y.group),y.kind==="enum"?be.values=R:be.properties=pe,be.options={id:y.id,idType:y.idType,timestamps:y.timestamps,softDelete:y.softDelete},y.tableName&&(be.options.tableName=y.tableName),y.translations&&(be.options.translations=y.translations),y.authenticatable&&(be.options.authenticatable=!0,y.authenticatableLoginIdField&&(be.options.authenticatableLoginIdField=y.authenticatableLoginIdField),y.authenticatablePasswordField&&(be.options.authenticatablePasswordField=y.authenticatablePasswordField),y.authenticatableGuardName&&(be.options.authenticatableGuardName=y.authenticatableGuardName)),w.length>0&&(be.options.indexes=w.map(we=>({columns:we.columns,unique:we.unique,name:we.name,type:we.type}))),await c(be),I?(await a(be),m.success(`Schema "${y.name}" created`),t(`/schema/${y.name}`)):(await l(e,be),m.success(`Schema "${y.name}" saved`))}catch(pe){m.error(pe.message)}},ge=()=>{v.setFieldsValue(y),D(!0)},ue=async()=>{try{const pe=await v.validateFields();C({...y,...pe}),D(!1)}catch{}},ae=()=>{P(null),h.resetFields(),h.setFieldsValue({type:"String",nullable:!1,unique:!1}),_(!0)},ce=pe=>{P(pe);const be=S[pe];h.setFieldsValue(be),_(!0)},ye=async()=>{try{const pe=await h.validateFields(),be={name:pe.name,type:pe.type,nullable:pe.nullable,unique:pe.unique,default:pe.default,displayName:pe.displayName,description:pe.description,relation:pe.relation,target:pe.target,targets:pe.targets,morphName:pe.morphName,inversedBy:pe.inversedBy,mappedBy:pe.mappedBy,onDelete:pe.onDelete,onUpdate:pe.onUpdate,owning:pe.owning,joinTable:pe.joinTable,length:pe.length,precision:pe.precision,scale:pe.scale,unsigned:pe.unsigned,enum:pe.enum,options:pe.options,source:pe.source};if(k!==null){const we=[...S];we[k]=be,x(we)}else x([...S,be]);_(!1)}catch{}},Ce=pe=>{x(S.filter((be,we)=>we!==pe))},je=()=>{Q(null),b.resetFields(),b.setFieldsValue({unique:!1}),K(!0)},ze=pe=>{Q(pe);const be=w[pe];b.setFieldsValue(be),K(!0)},ve=async()=>{try{const pe=await b.validateFields(),be={name:pe.name||void 0,columns:pe.columns,unique:pe.unique,type:pe.type||void 0};if(G!==null){const we=[...w];we[G]=be,E(we)}else E([...w,be]);K(!1)}catch{}},Te=pe=>{E(w.filter((be,we)=>we!==pe))},Ee=()=>{X(null),J.resetFields(),J.setFieldsValue({value:"",label:""}),se([]),U(!0)},xe=pe=>{X(pe);const be=R[pe];J.setFieldsValue({value:be.value,label:be.label??""});const we=be.extra?Object.entries(be.extra).map(([Ke,ke])=>({key:Ke,value:String(ke)})):[];se(we),U(!0)},Ve=async()=>{try{const pe=await J.validateFields(),be=me(pe.value,W??R.length);if(be){m.error(be);return}const we={};for(const ke of ne)ke.key.trim()&&(we[ke.key.trim()]=ke.value);const Ke={value:pe.value,label:pe.label||void 0,extra:Object.keys(we).length>0?we:void 0};if(W!==null){const ke=[...R];ke[W]=Ke,N(ke)}else N([...R,Ke]);U(!1)}catch{}},Xe=pe=>{N(R.filter((be,we)=>we!==pe))},it=()=>{se([...ne,{key:"",value:""}])},at=(pe,be,we)=>{const Ke=[...ne];Ke[pe]={...Ke[pe],[be]:we},se(Ke)},Ye=pe=>{se(ne.filter((be,we)=>we!==pe))},Je=Et.useWatch("type",h),_e=Et.useWatch("relation",h),Ie=Et.useWatch("kind",v),We=Et.useWatch("authenticatable",v),Be=Et.useWatch("id",v),Ge=tee.includes(Je),Me=nee.includes(Je),Qe=Je==="Decimal",lt=Je==="Enum",mt=Je==="Select"||Je==="Lookup",Dt=Je==="Association",At=_e==="MorphTo",et=["MorphOne","MorphMany","MorphedByMany"].includes(_e??""),ct=["ManyToMany","MorphToMany"].includes(_e??""),gt=IM.includes(_e);if(r&&!re&&e!=="new")return V.jsx("div",{style:{textAlign:"center",padding:d.paddingXL},children:V.jsx(ki,{size:"large"})});const ot=[{title:"Name",dataIndex:"name",key:"name",render:pe=>V.jsx(Jr,{strong:!0,children:pe})},{title:"Type",dataIndex:"type",key:"type",render:(pe,be)=>V.jsxs(Vn,{children:[V.jsx(kn,{color:"blue",children:pe}),pe==="Association"&&be.target&&V.jsxs(kn,{color:"purple",children:[be.relation," → ",be.target]}),pe==="Association"&&be.targets&&be.targets.length>0&&V.jsxs(kn,{color:"magenta",children:[be.relation," → [",be.targets.join(", "),"]"]}),be.length!==void 0&&V.jsxs(kn,{color:"cyan",children:["len:",be.length]}),be.precision!==void 0&&V.jsxs(kn,{color:"cyan",children:["(",be.precision,",",be.scale??2,")"]})]})},{title:"Options",key:"options",render:(pe,be)=>V.jsxs(Vn,{size:"small",children:[be.nullable&&V.jsx(kn,{children:"Nullable"}),be.unique&&V.jsx(kn,{color:"orange",children:"Unique"}),be.unsigned&&V.jsx(kn,{color:"red",children:"Unsigned"}),be.default!==void 0&&be.default!==""&&V.jsx(Xa,{title:`Default: ${be.default}`,children:V.jsx(kn,{color:"green",children:"Default"})})]})},{title:"Actions",key:"actions",width:100,render:(pe,be,we)=>V.jsxs(Vn,{children:[V.jsx(Sn,{type:"text",size:"small",icon:V.jsx(Mi,{}),onClick:()=>ce(we)}),V.jsx(vu,{title:"Delete this property?",onConfirm:()=>Ce(we),okText:"Yes",cancelText:"No",children:V.jsx(Sn,{type:"text",size:"small",danger:!0,icon:V.jsx(nm,{})})})]})}],vt=[{title:"Name",dataIndex:"name",key:"name",render:(pe,be)=>V.jsx(Jr,{strong:!0,children:pe||`index_${be._idx+1}`})},{title:"Columns",dataIndex:"columns",key:"columns",render:pe=>V.jsx(Vn,{size:"small",children:pe.map(be=>V.jsx(kn,{color:"cyan",children:be},be))})},{title:"Options",key:"options",render:(pe,be)=>V.jsxs(Vn,{size:"small",children:[be.unique&&V.jsx(kn,{color:"orange",children:"Unique"}),be.type&&V.jsx(kn,{color:"geekblue",children:be.type})]})},{title:"Actions",key:"actions",width:100,render:(pe,be)=>V.jsxs(Vn,{children:[V.jsx(Sn,{type:"text",size:"small",icon:V.jsx(Mi,{}),onClick:()=>ze(be._idx)}),V.jsx(vu,{title:"Delete this index?",onConfirm:()=>Te(be._idx),okText:"Yes",cancelText:"No",children:V.jsx(Sn,{type:"text",size:"small",danger:!0,icon:V.jsx(nm,{})})})]})}],Mt=[];return y.id&&Mt.push(V.jsxs(kn,{color:"blue",children:["ID: ",y.idType]},"id")),y.timestamps&&Mt.push(V.jsx(kn,{color:"green",children:"Timestamps"},"ts")),y.softDelete&&Mt.push(V.jsx(kn,{color:"orange",children:"Soft Delete"},"sd")),y.translations&&Mt.push(V.jsx(kn,{color:"purple",children:"Translations"},"tr")),y.authenticatable&&Mt.push(V.jsx(kn,{color:"red",children:"Authenticatable"},"auth")),V.jsxs("div",{children:[V.jsxs("div",{style:{marginBottom:d.margin,display:"flex",justifyContent:"space-between"},children:[V.jsx(Sn,{size:"small",icon:V.jsx(XQ,{}),onClick:()=>t("/"),children:"Back"}),V.jsx(Sn,{type:"primary",size:"small",icon:V.jsx(OZ,{}),onClick:ie,children:I?"Create Schema":"Save Changes"})]}),V.jsx(yg,{items:[{key:"editor",label:"Editor",children:V.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:d.margin},children:[V.jsx(Ia,{title:I?"New Schema":y.name,size:"small",extra:V.jsx(Sn,{size:"small",icon:V.jsx(Mi,{}),onClick:ge,children:"Edit"}),children:V.jsxs(Pn,{column:3,size:"small",children:[V.jsx(Pn.Item,{label:"Name",children:V.jsx(Jr,{strong:!0,children:y.name||"-"})}),V.jsx(Pn.Item,{label:"Display Name",children:y.displayName||"-"}),V.jsx(Pn.Item,{label:"Kind",children:V.jsx(kn,{color:y.kind==="enum"?"purple":"blue",children:y.kind})}),V.jsx(Pn.Item,{label:"Singular",children:y.singular||V.jsxs(Jr,{type:"secondary",children:[j||"-"," (auto)"]})}),V.jsx(Pn.Item,{label:"Plural",children:y.plural||V.jsxs(Jr,{type:"secondary",children:[T||"-"," (auto)"]})}),V.jsx(Pn.Item,{label:"Group",children:y.group||"-"}),y.kind==="object"&&V.jsxs(V.Fragment,{children:[V.jsx(Pn.Item,{label:"Table Name",children:y.tableName?V.jsx(Jr,{code:!0,children:y.tableName}):V.jsxs(Jr,{type:"secondary",children:[V.jsx(Jr,{code:!0,children:z||"-"})," (auto)"]})}),V.jsx(Pn.Item,{label:"Title Field",children:y.titleIndex||"-"}),V.jsx(Pn.Item,{label:""}),V.jsx(Pn.Item,{label:"Options",span:3,children:Mt.length>0?V.jsx(Vn,{size:"small",children:Mt}):"-"}),y.authenticatable&&V.jsx(Pn.Item,{label:"Auth Config",span:3,children:V.jsxs(Vn,{children:[V.jsx(Jr,{type:"secondary",children:"Login:"})," ",y.authenticatableLoginIdField,V.jsx(Jr,{type:"secondary",children:"Password:"})," ",y.authenticatablePasswordField,V.jsx(Jr,{type:"secondary",children:"Guard:"})," ",y.authenticatableGuardName]})})]})]})}),y.kind==="enum"&&V.jsx(Ia,{title:"Enum Values",size:"small",extra:V.jsx(Sn,{type:"primary",size:"small",icon:V.jsx(vl,{}),onClick:Ee,children:"Add Value"}),children:V.jsx(Ma,{dataSource:R.map((pe,be)=>({...pe,_idx:be,_key:`enum_${be}_${pe.value||"new"}`})),rowKey:"_key",pagination:!1,size:"small",locale:{emptyText:'No enum values defined. Click "Add Value" to start.'},columns:[{title:"Value",dataIndex:"value",key:"value",render:pe=>V.jsx(Jr,{strong:!0,code:!0,children:pe})},{title:"Label",dataIndex:"label",key:"label",render:pe=>pe||V.jsx(Jr,{type:"secondary",children:"-"})},{title:"Extra",key:"extra",width:120,render:(pe,be)=>{const we=be.extra?Object.keys(be.extra).length:0;return we>0?V.jsx(Xa,{title:Object.entries(be.extra).map(([Ke,ke])=>`${Ke}: ${ke}`).join(", "),children:V.jsxs(kn,{color:"blue",children:[we," props"]})}):V.jsx(Jr,{type:"secondary",children:"-"})}},{title:"Actions",key:"actions",width:100,render:(pe,be)=>V.jsxs(Vn,{children:[V.jsx(Sn,{type:"text",size:"small",icon:V.jsx(Mi,{}),onClick:()=>xe(be._idx)}),V.jsx(vu,{title:"Delete this value?",onConfirm:()=>Xe(be._idx),okText:"Yes",cancelText:"No",children:V.jsx(Sn,{type:"text",size:"small",danger:!0,icon:V.jsx(nm,{})})})]})}]})}),y.kind==="object"&&V.jsx(Ia,{title:"Properties",size:"small",extra:V.jsx(Sn,{type:"primary",size:"small",icon:V.jsx(vl,{}),onClick:ae,children:"Add Property"}),children:V.jsx(Ma,{dataSource:S,columns:ot,rowKey:"name",pagination:!1,size:"small",locale:{emptyText:'No properties defined. Click "Add Property" to start.'}})}),y.kind==="object"&&V.jsx(Ia,{title:"Indexes",size:"small",extra:V.jsx(Sn,{type:"primary",size:"small",icon:V.jsx(vl,{}),onClick:je,disabled:Se.length===0,children:"Add Index"}),children:V.jsx(Ma,{dataSource:w.map((pe,be)=>({...pe,_idx:be,_key:`idx_${be}_${pe.columns.join("_")}`})),columns:vt,rowKey:"_key",pagination:!1,size:"small",locale:{emptyText:'No indexes defined. Click "Add Index" to optimize queries.'}})})]})},{key:"preview",label:"Code Preview",children:V.jsx(XJ,{schemaName:e==="new"?void 0:e})}]}),V.jsx(Gr,{title:"Edit Schema",open:L,onOk:ue,onCancel:()=>D(!1),okText:"Apply",width:700,children:V.jsxs(Et,{form:v,layout:"vertical",style:{marginTop:d.margin},children:[V.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gap:d.margin},children:[V.jsx(Et.Item,{name:"name",label:"Schema Name",rules:[{required:!0,message:"Name is required"}],children:V.jsx(Fn,{placeholder:"e.g., User, Post",disabled:!I})}),V.jsx(Et.Item,{name:"displayName",label:"Display Name",children:V.jsx(Fn,{placeholder:"e.g., User Account"})}),V.jsx(Et.Item,{name:"kind",label:"Kind",children:V.jsx(tr,{disabled:!I,options:[{value:"object",label:"Object"},{value:"enum",label:"Enum"}]})})]}),V.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gap:d.margin},children:[V.jsx(Et.Item,{name:"singular",label:"Singular Name",children:V.jsx(Fn,{placeholder:j?`${j} (auto)`:"e.g., user"})}),V.jsx(Et.Item,{name:"plural",label:"Plural Name",children:V.jsx(Fn,{placeholder:T?`${T} (auto)`:"e.g., users"})}),V.jsx(Et.Item,{name:"group",label:"Group",children:V.jsx(Fn,{placeholder:"e.g., auth, content"})})]}),Ie==="object"&&V.jsxs(V.Fragment,{children:[V.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:d.margin},children:[V.jsx(Et.Item,{name:"tableName",label:"Custom Table Name",children:V.jsx(Fn,{placeholder:z?`${z} (auto)`:"e.g., users"})}),V.jsx(Et.Item,{name:"titleIndex",label:"Title Field",children:V.jsx(tr,{allowClear:!0,options:Se.map(pe=>({value:pe,label:pe})),placeholder:"Field to use as title"})})]}),V.jsx(dh,{style:{margin:`${d.marginSM}px 0`}}),V.jsxs("div",{style:{display:"flex",gap:d.marginLG,flexWrap:"wrap",alignItems:"flex-end"},children:[V.jsx(Et.Item,{name:"id",valuePropName:"checked",noStyle:!0,children:V.jsx(ta,{children:"Auto ID"})}),V.jsx(Et.Item,{name:"idType",label:"ID Type",style:{marginBottom:0,minWidth:100},children:V.jsx(tr,{disabled:!Be,options:[{value:"BigInt",label:"BigInt"},{value:"Int",label:"Int"},{value:"Uuid",label:"UUID"},{value:"String",label:"String"}]})}),V.jsx(Et.Item,{name:"timestamps",valuePropName:"checked",noStyle:!0,children:V.jsx(ta,{children:"Timestamps"})}),V.jsx(Et.Item,{name:"softDelete",valuePropName:"checked",noStyle:!0,children:V.jsx(ta,{children:"Soft Delete"})}),V.jsx(Et.Item,{name:"translations",valuePropName:"checked",noStyle:!0,children:V.jsx(ta,{children:"Translations"})}),V.jsx(Et.Item,{name:"authenticatable",valuePropName:"checked",noStyle:!0,children:V.jsx(ta,{children:"Authenticatable"})})]}),We&&V.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gap:d.margin,marginTop:d.margin,background:d.colorBgTextHover,padding:d.padding,borderRadius:d.borderRadius},children:[V.jsx(Et.Item,{name:"authenticatableLoginIdField",label:"Login ID Field",style:{marginBottom:0},children:V.jsx(Fn,{placeholder:"email"})}),V.jsx(Et.Item,{name:"authenticatablePasswordField",label:"Password Field",style:{marginBottom:0},children:V.jsx(Fn,{placeholder:"password"})}),V.jsx(Et.Item,{name:"authenticatableGuardName",label:"Guard Name",style:{marginBottom:0},children:V.jsx(Fn,{placeholder:"web"})})]})]})]})}),V.jsx(Gr,{title:k!==null?"Edit Property":"Add Property",open:A,onOk:ye,onCancel:()=>_(!1),okText:k!==null?"Update":"Add",width:600,children:V.jsxs(Et,{form:h,layout:"vertical",style:{marginTop:d.margin},children:[V.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:d.margin},children:[V.jsx(Et.Item,{name:"name",label:"Property Name",rules:[{required:!0,message:"Name is required"},{pattern:/^[a-zA-Z_][a-zA-Z0-9_]*$/,message:"Invalid property name"}],children:V.jsx(Fn,{placeholder:"e.g., email, firstName"})}),V.jsx(Et.Item,{name:"type",label:"Type",rules:[{required:!0,message:"Type is required"}],children:V.jsx(tr,{options:[...YJ.map(pe=>({value:pe,label:pe})),{value:"Association",label:"Association (Relation)"}],showSearch:!0})})]}),Ge&&V.jsx(Et.Item,{name:"length",label:"Max Length",children:V.jsx(em,{min:1,max:65535,placeholder:"255",style:{width:"100%"}})}),Me&&V.jsxs("div",{style:{display:"grid",gridTemplateColumns:Qe?"1fr 1fr 1fr":"1fr",gap:d.margin},children:[Qe&&V.jsxs(V.Fragment,{children:[V.jsx(Et.Item,{name:"precision",label:"Precision (Total Digits)",children:V.jsx(em,{min:1,max:65,placeholder:"8",style:{width:"100%"}})}),V.jsx(Et.Item,{name:"scale",label:"Scale (Decimal Places)",children:V.jsx(em,{min:0,max:30,placeholder:"2",style:{width:"100%"}})})]}),V.jsx(Et.Item,{name:"unsigned",valuePropName:"checked",style:{alignSelf:"end"},children:V.jsx(ta,{children:"Unsigned (positive only)"})})]}),lt&&V.jsx(Et.Item,{name:"enum",label:"Enum Reference or Values",rules:[{required:!0,message:"Enum is required"}],children:V.jsx(tr,{mode:"tags",placeholder:"Type enum name or add values",options:oe.filter(pe=>{var be;return((be=n[pe])==null?void 0:be.kind)==="enum"}).map(pe=>({value:pe,label:`${pe} (Enum)`}))})}),mt&&V.jsxs(V.Fragment,{children:[V.jsx(Et.Item,{name:"options",label:"Options (for Select)",children:V.jsx(tr,{mode:"tags",placeholder:"Add options"})}),V.jsx(Et.Item,{name:"source",label:"Source Schema (for Lookup)",children:V.jsx(tr,{allowClear:!0,options:oe.map(pe=>({value:pe,label:pe})),placeholder:"Select source schema"})})]}),Dt&&V.jsxs(V.Fragment,{children:[V.jsx(Et.Item,{name:"relation",label:"Relation Type",rules:[{required:!0,message:"Relation is required"}],children:V.jsx(tr,{options:eee})}),gt&&V.jsx(Et.Item,{name:"target",label:"Target Schema",rules:[{required:!0,message:"Target is required"}],children:V.jsx(tr,{options:oe.map(pe=>({value:pe,label:pe})),placeholder:"Select target schema",showSearch:!0})}),At&&V.jsx(Et.Item,{name:"targets",label:"Target Schemas (Polymorphic)",rules:[{required:!0,message:"At least one target is required"}],children:V.jsx(tr,{mode:"multiple",options:oe.map(pe=>({value:pe,label:pe})),placeholder:"Select possible target schemas"})}),et&&V.jsxs(V.Fragment,{children:[V.jsx(Et.Item,{name:"target",label:"Target Schema",rules:[{required:!0,message:"Target is required"}],children:V.jsx(tr,{options:oe.map(pe=>({value:pe,label:pe})),placeholder:"Select target schema",showSearch:!0})}),V.jsx(Et.Item,{name:"morphName",label:"Morph Name",rules:[{required:!0,message:"Morph name is required for polymorphic inverse"}],children:V.jsx(Fn,{placeholder:"e.g., commentable, taggable"})})]}),_e==="MorphToMany"&&V.jsxs(V.Fragment,{children:[V.jsx(Et.Item,{name:"target",label:"Target Schema",rules:[{required:!0,message:"Target is required"}],children:V.jsx(tr,{options:oe.map(pe=>({value:pe,label:pe})),placeholder:"Select target schema",showSearch:!0})}),V.jsx(Et.Item,{name:"morphName",label:"Morph Name",children:V.jsx(Fn,{placeholder:"e.g., taggable"})})]}),V.jsx(Wb,{ghost:!0,items:[{key:"advanced",label:"Advanced Options",children:V.jsxs(V.Fragment,{children:[V.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:d.margin},children:[V.jsx(Et.Item,{name:"inversedBy",label:"Inversed By",children:V.jsx(Fn,{placeholder:"Property on target"})}),V.jsx(Et.Item,{name:"mappedBy",label:"Mapped By",children:V.jsx(Fn,{placeholder:"Property on target"})})]}),V.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:d.margin},children:[V.jsx(Et.Item,{name:"onDelete",label:"On Delete",children:V.jsx(tr,{allowClear:!0,options:YO.map(pe=>({value:pe,label:pe})),placeholder:"CASCADE"})}),V.jsx(Et.Item,{name:"onUpdate",label:"On Update",children:V.jsx(tr,{allowClear:!0,options:YO.map(pe=>({value:pe,label:pe})),placeholder:"CASCADE"})})]}),ct&&V.jsx(Et.Item,{name:"joinTable",label:"Custom Join Table Name",children:V.jsx(Fn,{placeholder:"Auto-generated if empty"})}),V.jsx(Et.Item,{name:"owning",valuePropName:"checked",children:V.jsx(ta,{children:"Owning Side (has foreign key)"})})]})}]})]}),V.jsx(dh,{style:{margin:`${d.marginSM}px 0`}}),V.jsxs(Vn,{size:"large",children:[V.jsx(Et.Item,{name:"nullable",valuePropName:"checked",noStyle:!0,children:V.jsx(ta,{children:"Nullable"})}),V.jsx(Et.Item,{name:"unique",valuePropName:"checked",noStyle:!0,children:V.jsx(ta,{children:"Unique"})})]}),V.jsx(Et.Item,{name:"default",label:"Default Value",style:{marginTop:d.margin},children:V.jsx(Fn,{placeholder:"Leave empty for no default"})}),V.jsx(Et.Item,{name:"displayName",label:"Display Name",children:V.jsx(Fn,{placeholder:"Human readable name for forms"})}),V.jsx(Et.Item,{name:"description",label:"Description",children:V.jsx(Fn.TextArea,{placeholder:"Field description/comment",rows:2})})]})}),V.jsx(Gr,{title:G!==null?"Edit Index":"Add Index",open:B,onOk:ve,onCancel:()=>K(!1),okText:G!==null?"Update":"Add",width:500,children:V.jsxs(Et,{form:b,layout:"vertical",style:{marginTop:d.margin},children:[V.jsx(Et.Item,{name:"columns",label:"Columns",rules:[{required:!0,message:"Select at least one column"}],children:V.jsx(tr,{mode:"multiple",options:Se.map(pe=>({value:pe,label:pe})),placeholder:"Select columns for this index"})}),V.jsx(Et.Item,{name:"name",label:"Index Name (optional)",children:V.jsx(Fn,{placeholder:"Auto-generated if empty"})}),g.length>0&&V.jsx(Et.Item,{name:"type",label:`Index Type (${u})`,children:V.jsx(tr,{allowClear:!0,options:g.map(pe=>({value:pe,label:pe.toUpperCase()})),placeholder:"Default: btree"})}),V.jsx(Et.Item,{name:"unique",valuePropName:"checked",noStyle:!0,children:V.jsx(ta,{children:"Unique Index"})})]})}),V.jsx(Gr,{title:W!==null?"Edit Enum Value":"Add Enum Value",open:F,onOk:Ve,onCancel:()=>U(!1),okText:W!==null?"Update":"Add",width:500,children:V.jsxs(Et,{form:J,layout:"vertical",style:{marginTop:d.margin},children:[V.jsx(Et.Item,{name:"value",label:"Value",normalize:pe=>(pe==null?void 0:pe.trim())??pe,rules:[{required:!0,message:"Value is required"},{validator:(pe,be)=>be?MM(be)?Promise.resolve():Promise.reject(new Error("Must be a valid identifier (a-z, A-Z, 0-9, _)")):Promise.resolve()}],children:V.jsx(Fn,{placeholder:"e.g., ACTIVE, pending, InProgress"})}),V.jsx(Et.Item,{name:"label",label:"Display Label (for forms)",children:V.jsx(Fn,{placeholder:"e.g., Active Status, In Progress"})}),V.jsx(dh,{style:{margin:`${d.marginSM}px 0`}}),V.jsxs("div",{style:{marginBottom:d.marginSM},children:[V.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:d.marginXS},children:[V.jsx(Jr,{type:"secondary",children:"Extra Properties (for UI customization)"}),V.jsx(Sn,{size:"small",icon:V.jsx(vl,{}),onClick:it,children:"Add Property"})]}),ne.length===0?V.jsx(Jr,{type:"secondary",style:{fontStyle:"italic",display:"block"},children:"No extra properties. Add custom fields like bgColor, textColor, icon, order, etc."}):V.jsx(Vn,{direction:"vertical",style:{width:"100%"},children:ne.map((pe,be)=>V.jsxs(Vn,{style:{width:"100%"},children:[V.jsx(Fn,{value:pe.key,onChange:we=>at(be,"key",we.target.value),placeholder:"Key (e.g., bgColor)",style:{width:150}}),V.jsx(Fn,{value:pe.value,onChange:we=>at(be,"value",we.target.value),placeholder:"Value (e.g., #ff0000)",style:{width:200}}),V.jsx(Sn,{type:"text",danger:!0,icon:V.jsx(Tm,{}),onClick:()=>Ye(be)})]},be))})]})]})})]})}const{Title:aee,Text:iu}=Oo,{Panel:oee}=Wb;function iee(){const{token:e}=ja.useToken(),[t,n]=s.useState([]),[r,a]=s.useState(!0),[l,c]=s.useState(null),[u,d]=s.useState(null),[m,g]=s.useState(!1),[v,h]=s.useState(!1),[b,y]=s.useState(null),[C,S]=s.useState(null);s.useEffect(()=>{x()},[]);const x=async()=>{a(!0),c(null);try{const N=await yu.getAll();n(N.reverse())}catch(N){c(N.message)}finally{a(!1)}},w=async N=>{try{const I=await yu.get(N);d(I),g(!0)}catch(I){c(I.message)}},E=async(N,I)=>{try{const M=await yu.getDiff(N,I);y(M),S({from:N,to:I}),h(!0)}catch(M){c(M.message)}},R=[{title:"Version",dataIndex:"version",key:"version",width:100,render:N=>V.jsx(Ks,{count:`v${N}`,style:{backgroundColor:e.colorPrimary}})},{title:"Migration",dataIndex:"migration",key:"migration",ellipsis:!0,render:N=>N||V.jsx(iu,{type:"secondary",children:"-"})},{title:"Description",dataIndex:"description",key:"description",ellipsis:!0,render:N=>N||V.jsx(iu,{type:"secondary",children:"-"})},{title:"Schemas",dataIndex:"schemaCount",key:"schemaCount",width:100,align:"center",render:N=>V.jsx(kn,{children:N})},{title:"Changes",dataIndex:"changeCount",key:"changeCount",width:100,align:"center",render:N=>V.jsx(kn,{color:N>0?"blue":"default",children:N})},{title:"Timestamp",dataIndex:"timestamp",key:"timestamp",width:180,render:N=>new Date(N).toLocaleString()},{title:"Actions",key:"actions",width:150,render:(N,I)=>V.jsxs(Vn,{children:[V.jsx(Sn,{type:"text",icon:V.jsx(fI,{}),onClick:()=>w(I.version)}),I.version>1&&V.jsx(Sn,{type:"text",icon:V.jsx(Bu,{}),onClick:()=>E(I.version-1,I.version)})]})}];return r?V.jsx("div",{style:{textAlign:"center",padding:e.paddingXL},children:V.jsx(ki,{size:"large"})}):V.jsxs("div",{children:[V.jsx("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:e.margin},children:V.jsxs(aee,{level:3,style:{margin:0},children:[V.jsx(cb,{style:{marginRight:8}}),"Version History"]})}),l&&V.jsx(Tu,{message:"Error",description:l,type:"error",showIcon:!0,closable:!0,style:{marginBottom:e.margin},onClose:()=>c(null)}),t.length===0?V.jsx(qr,{image:qr.PRESENTED_IMAGE_SIMPLE,description:"No versions found. Generate a migration to create the first version."}):V.jsx(Ma,{columns:R,dataSource:t,rowKey:"version",pagination:{pageSize:10}}),V.jsx(Gr,{title:V.jsxs(Vn,{children:[V.jsx(cb,{}),V.jsxs("span",{children:["Version ",u==null?void 0:u.version]})]}),open:m,onCancel:()=>g(!1),footer:null,width:800,children:u&&V.jsxs("div",{children:[V.jsxs(Pn,{column:2,size:"small",style:{marginBottom:16},children:[V.jsx(Pn.Item,{label:"Version",children:u.version}),V.jsx(Pn.Item,{label:"Driver",children:u.driver}),V.jsx(Pn.Item,{label:"Migration",children:u.migration||"-"}),V.jsx(Pn.Item,{label:"Timestamp",children:new Date(u.timestamp).toLocaleString()}),u.description&&V.jsx(Pn.Item,{label:"Description",span:2,children:u.description})]}),V.jsx(Ia,{title:"Changes",size:"small",style:{marginBottom:16},children:u.changes.length===0?V.jsx(iu,{type:"secondary",children:"No changes recorded"}):V.jsx(pb,{changes:u.changes,compact:!0})}),V.jsx(Ia,{title:"Schema Snapshot",size:"small",children:V.jsx(Wb,{ghost:!0,children:Object.entries(u.snapshot).map(([N,I])=>V.jsx(oee,{header:V.jsxs(Vn,{children:[V.jsx(oc,{}),V.jsx(iu,{strong:!0,children:N}),V.jsx(kn,{children:I.kind})]}),children:V.jsx("pre",{style:{fontSize:12,background:e.colorBgLayout,padding:12,borderRadius:e.borderRadius,overflow:"auto",maxHeight:300},children:JSON.stringify(I,null,2)})},N))})})]})}),V.jsx(Gr,{title:V.jsxs(Vn,{children:[V.jsx(Bu,{}),V.jsxs("span",{children:["Diff: v",C==null?void 0:C.from," → v",C==null?void 0:C.to]})]}),open:v,onCancel:()=>h(!1),footer:null,width:700,children:b&&V.jsx("div",{children:b.changes.length===0?V.jsx(qr,{description:"No changes between versions"}):V.jsxs("div",{children:[V.jsxs(iu,{type:"secondary",style:{marginBottom:16,display:"block"},children:[b.changes.length," change(s) detected"]}),V.jsx(pb,{changes:b.changes})]})})})]})}const{Title:lee,Text:Lf}=Oo,see=[{value:"mysql",label:"MySQL / MariaDB"},{value:"postgresql",label:"PostgreSQL"},{value:"sqlite",label:"SQLite"},{value:"sqlserver",label:"SQL Server"}];function cee(){const{t:e}=NJ(),{darkMode:t,toggleDarkMode:n,previewPanelOpen:r,togglePreviewPanel:a,databaseType:l,setDatabaseType:c,language:u,setLanguage:d}=cc(),{token:m}=ja.useToken(),[g,v]=s.useState(null),[h,b]=s.useState(!0);return s.useEffect(()=>{va.get("/api/config").then(v).catch(console.error).finally(()=>b(!1))},[]),h?V.jsx("div",{style:{textAlign:"center",padding:m.paddingXL},children:V.jsx(ki,{size:"large"})}):V.jsxs("div",{children:[V.jsx(lee,{level:3,children:e("settings.title")}),V.jsxs(Ia,{title:e("settings.database"),style:{marginBottom:m.margin},children:[V.jsx(Pn,{column:1,children:V.jsx(Pn.Item,{label:e("settings.databaseType"),children:V.jsx(tr,{value:l,onChange:c,options:see,style:{width:200}})})}),V.jsx(Lf,{type:"secondary",style:{marginTop:m.marginSM,display:"block"},children:e("settings.databaseHint")})]}),V.jsx(Ia,{title:e("settings.appearance"),style:{marginBottom:m.margin},children:V.jsxs(Pn,{column:1,children:[V.jsx(Pn.Item,{label:e("settings.language"),children:V.jsx(tr,{value:u,onChange:y=>d(y),options:zJ,style:{width:200}})}),V.jsx(Pn.Item,{label:e("settings.darkMode"),children:V.jsx(Om,{checked:t,onChange:n})}),V.jsx(Pn.Item,{label:e("settings.showPreview"),children:V.jsx(Om,{checked:r,onChange:a})})]})}),V.jsx(Ia,{title:e("settings.serverConfig"),children:V.jsxs(Pn,{column:1,children:[V.jsx(Pn.Item,{label:e("settings.schemasDir"),children:V.jsx(Lf,{code:!0,children:(g==null?void 0:g.schemasDir)??"N/A"})}),V.jsx(Pn.Item,{label:e("settings.serverPort"),children:V.jsx(Lf,{code:!0,children:(g==null?void 0:g.port)??"N/A"})}),V.jsx(Pn.Item,{label:e("settings.host"),children:V.jsx(Lf,{code:!0,children:(g==null?void 0:g.host)??"N/A"})})]})})]})}function uee(){const{loadSchemas:e}=Vi(),{darkMode:t}=cc();return s.useEffect(()=>{e()},[e]),V.jsx(uo,{theme:{algorithm:t?ja.darkAlgorithm:ja.defaultAlgorithm,token:{colorPrimary:"#1677ff",borderRadius:6}},children:V.jsx(Jb,{children:V.jsx(AQ,{children:V.jsx(mQ,{children:V.jsxs(ul,{element:V.jsx(VJ,{}),children:[V.jsx(ul,{path:"/",element:V.jsx(GJ,{})}),V.jsx(ul,{path:"/schema/:name",element:V.jsx(ree,{})}),V.jsx(ul,{path:"/history",element:V.jsx(iee,{})}),V.jsx(ul,{path:"/settings",element:V.jsx(cee,{})}),V.jsx(ul,{path:"*",element:V.jsx(uQ,{to:"/",replace:!0})})]})})})})})}const jM=document.getElementById("root");if(!jM)throw new Error("Root element not found");nM.createRoot(jM).render(V.jsx(s.StrictMode,{children:V.jsx(uee,{})}));
469
+ //# sourceMappingURL=index-D9dvqgo4.js.map