@famgia/omnify-gui 1.0.6 → 1.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.
@@ -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(Gr,{image:Gr.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:er}=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]=wt.useForm(),[h]=wt.useForm(),[b]=wt.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]=wt.useForm(),[ne,se]=s.useState([]),re=e&&e!=="new"?n[e]:null,oe=Object.keys(n).filter(ue=>ue!==e),Se=S.map(ue=>ue.name).filter(Boolean),ge=(ue,be)=>{const xe=R.map(Ae=>Ae.value),Te=JJ(ue,xe,be);return Te.valid?null:Te.error??"Invalid value"};s.useEffect(()=>{var ue,be,xe,Te,Ae,Fe,et,vt,pt,Pt,tt;if(e==="new"){M(!0);const Xe={name:"",kind:"object",id:!0,idType:"BigInt",timestamps:!0,softDelete:!1,authenticatableLoginIdField:"email",authenticatablePasswordField:"password",authenticatableGuardName:"web"};C(Xe),x([]),E([]),N([]),v.setFieldsValue(Xe),D(!0)}else if(re){M(!1);const Xe={name:re.name,kind:re.kind,displayName:re.displayName,singular:re.singular,plural:re.plural,titleIndex:re.titleIndex,group:re.group,id:((ue=re.options)==null?void 0:ue.id)??!0,idType:((be=re.options)==null?void 0:be.idType)??"BigInt",timestamps:((xe=re.options)==null?void 0:xe.timestamps)??!1,softDelete:((Te=re.options)==null?void 0:Te.softDelete)??!1,tableName:(Ae=re.options)==null?void 0:Ae.tableName,translations:((Fe=re.options)==null?void 0:Fe.translations)??!1,authenticatable:((et=re.options)==null?void 0:et.authenticatable)??!1,authenticatableLoginIdField:((vt=re.options)==null?void 0:vt.authenticatableLoginIdField)??"email",authenticatablePasswordField:((pt=re.options)==null?void 0:pt.authenticatablePasswordField)??"password",authenticatableGuardName:((Pt=re.options)==null?void 0:Pt.authenticatableGuardName)??"web"};C(Xe);const St=Object.entries(re.properties??{}).map(([Ut,Tt])=>({name:Ut,type:Tt.type,nullable:Tt.nullable,unique:Tt.unique,default:Tt.default!==void 0?String(Tt.default):void 0,displayName:Tt.displayName,description:Tt.description,relation:Tt.relation,target:Tt.target,targets:Tt.targets,morphName:Tt.morphName,inversedBy:Tt.inversedBy,mappedBy:Tt.mappedBy,onDelete:Tt.onDelete,onUpdate:Tt.onUpdate,owning:Tt.owning,joinTable:Tt.joinTable,length:Tt.length,precision:Tt.precision,scale:Tt.scale,unsigned:Tt.unsigned,enum:Tt.enum,options:Tt.options,source:Tt.source}));x(St);const Wt=(((tt=re.options)==null?void 0:tt.indexes)??[]).map(Ut=>({name:Ut.name,columns:[...Ut.columns],unique:Ut.unique,type:Ut.type}));E(Wt),N(re.values?[...re.values]:[])}},[e,re,v]);const ie=async()=>{try{if(y.kind==="enum"){for(let xe=0;xe<R.length;xe++){const Te=ge(R[xe].value,xe);if(Te){m.error(`Enum value ${xe+1}: ${Te}`);return}}if(R.length===0){m.error("Enum must have at least one value");return}}const ue={};for(const xe of S){const Te={type:xe.type};xe.nullable&&(Te.nullable=xe.nullable),xe.unique&&(Te.unique=xe.unique),xe.default!==void 0&&xe.default!==""&&(Te.default=xe.default),xe.displayName&&(Te.displayName=xe.displayName),xe.description&&(Te.description=xe.description),xe.relation&&(Te.relation=xe.relation),xe.target&&(Te.target=xe.target),xe.targets&&xe.targets.length>0&&(Te.targets=xe.targets),xe.morphName&&(Te.morphName=xe.morphName),xe.inversedBy&&(Te.inversedBy=xe.inversedBy),xe.mappedBy&&(Te.mappedBy=xe.mappedBy),xe.onDelete&&(Te.onDelete=xe.onDelete),xe.onUpdate&&(Te.onUpdate=xe.onUpdate),xe.owning!==void 0&&(Te.owning=xe.owning),xe.joinTable&&(Te.joinTable=xe.joinTable),xe.length!==void 0&&(Te.length=xe.length),xe.precision!==void 0&&(Te.precision=xe.precision),xe.scale!==void 0&&(Te.scale=xe.scale),xe.unsigned&&(Te.unsigned=xe.unsigned),xe.enum&&(Te.enum=xe.enum),xe.options&&xe.options.length>0&&(Te.options=xe.options),xe.source&&(Te.source=xe.source),ue[xe.name]=Te}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=ue,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(xe=>({columns:xe.columns,unique:xe.unique,name:xe.name,type:xe.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(ue){m.error(ue.message)}},ve=()=>{v.setFieldsValue(y),D(!0)},de=async()=>{try{const ue=await v.validateFields();C({...y,...ue}),D(!1)}catch{}},ae=()=>{P(null),h.resetFields(),h.setFieldsValue({type:"String",nullable:!1,unique:!1}),_(!0)},ce=ue=>{P(ue);const be=S[ue];h.setFieldsValue(be),_(!0)},ye=async()=>{try{const ue=await h.validateFields(),be={name:ue.name,type:ue.type,nullable:ue.nullable,unique:ue.unique,default:ue.default,displayName:ue.displayName,description:ue.description,relation:ue.relation,target:ue.target,targets:ue.targets,morphName:ue.morphName,inversedBy:ue.inversedBy,mappedBy:ue.mappedBy,onDelete:ue.onDelete,onUpdate:ue.onUpdate,owning:ue.owning,joinTable:ue.joinTable,length:ue.length,precision:ue.precision,scale:ue.scale,unsigned:ue.unsigned,enum:ue.enum,options:ue.options,source:ue.source};if(k!==null){const xe=[...S];xe[k]=be,x(xe)}else x([...S,be]);_(!1)}catch{}},Ce=ue=>{x(S.filter((be,xe)=>xe!==ue))},Pe=()=>{Q(null),b.resetFields(),b.setFieldsValue({unique:!1}),K(!0)},_e=ue=>{Q(ue);const be=w[ue];b.setFieldsValue(be),K(!0)},pe=async()=>{try{const ue=await b.validateFields(),be={name:ue.name||void 0,columns:ue.columns,unique:ue.unique,type:ue.type||void 0};if(G!==null){const xe=[...w];xe[G]=be,E(xe)}else E([...w,be]);K(!1)}catch{}},Ie=ue=>{E(w.filter((be,xe)=>xe!==ue))},Ee=()=>{X(null),J.resetFields(),J.setFieldsValue({value:"",label:""}),se([]),U(!0)},$e=ue=>{X(ue);const be=R[ue];J.setFieldsValue({value:be.value,label:be.label??""});const xe=be.extra?Object.entries(be.extra).map(([Te,Ae])=>({key:Te,value:String(Ae)})):[];se(xe),U(!0)},Ve=async()=>{try{const ue=await J.validateFields(),be=ge(ue.value,W??R.length);if(be){m.error(be);return}const xe={};for(const Ae of ne)Ae.key.trim()&&(xe[Ae.key.trim()]=Ae.value);const Te={value:ue.value,label:ue.label||void 0,extra:Object.keys(xe).length>0?xe:void 0};if(W!==null){const Ae=[...R];Ae[W]=Te,N(Ae)}else N([...R,Te]);U(!1)}catch{}},Ge=ue=>{N(R.filter((be,xe)=>xe!==ue))},ot=()=>{se([...ne,{key:"",value:""}])},rt=(ue,be,xe)=>{const Te=[...ne];Te[ue]={...Te[ue],[be]:xe},se(Te)},Ye=ue=>{se(ne.filter((be,xe)=>xe!==ue))},Ze=wt.useWatch("type",h),De=wt.useWatch("relation",h),Me=wt.useWatch("kind",v),Ke=wt.useWatch("authenticatable",v),He=wt.useWatch("id",v),qe=tee.includes(Ze),je=nee.includes(Ze),Qe=Ze==="Decimal",it=Ze==="Enum",ft=Ze==="Select"||Ze==="Lookup",_t=Ze==="Association",At=De==="MorphTo",Je=["MorphOne","MorphMany","MorphedByMany"].includes(De??""),st=["ManyToMany","MorphToMany"].includes(De??""),mt=IM.includes(De);if(r&&!re&&e!=="new")return V.jsx("div",{style:{textAlign:"center",padding:d.paddingXL},children:V.jsx(ki,{size:"large"})});const at=ue=>{const be=ue.type;if(be==="String"||be==="Email"||be==="Password")return ue.length?`VARCHAR(${ue.length})`:"VARCHAR(255)";if(be==="Text")return"TEXT";if(be==="Int")return ue.unsigned?"INT UNSIGNED":"INT";if(be==="BigInt")return ue.unsigned?"BIGINT UNSIGNED":"BIGINT";if(be==="Float")return ue.unsigned?"FLOAT UNSIGNED":"FLOAT";if(be==="Decimal"){const xe=ue.precision??8,Te=ue.scale??2;return ue.unsigned?`DECIMAL(${xe},${Te}) UNSIGNED`:`DECIMAL(${xe},${Te})`}return be==="Boolean"?"BOOLEAN":be==="Date"?"DATE":be==="Timestamp"?"TIMESTAMP":be==="Json"?"JSON":be==="Uuid"?"UUID":be==="Enum"?"ENUM":be==="Association"?ue.relation??"RELATION":be.toUpperCase()},gt=[{title:"Name",dataIndex:"name",key:"name",width:200,render:(ue,be)=>V.jsxs("div",{children:[V.jsx(er,{strong:!0,children:ue}),be.displayName&&V.jsx("div",{children:V.jsx(er,{type:"secondary",children:be.displayName})})]})},{title:"Type",dataIndex:"type",key:"type",width:150,render:(ue,be)=>V.jsx(er,{code:!0,children:at(be)})},{title:"Settings",key:"settings",width:180,render:(ue,be)=>V.jsxs(Un,{size:4,wrap:!0,children:[!be.nullable&&V.jsx(dr,{children:"not_null"}),be.unique&&V.jsx(dr,{color:"blue",children:"unique"}),be.unsigned&&V.jsx(dr,{children:"unsigned"})]})},{title:"References",key:"references",width:180,render:(ue,be)=>be.type!=="Association"?V.jsx(er,{type:"secondary",children:"-"}):be.target?V.jsxs(er,{type:"secondary",children:["→ ",be.target]}):be.targets&&be.targets.length>0?V.jsxs(er,{type:"secondary",children:["→ [",be.targets.join(", "),"]"]}):V.jsx(er,{type:"secondary",children:"-"})},{title:"Default",key:"default",width:120,render:(ue,be)=>be.default!==void 0&&be.default!==""?V.jsx(er,{code:!0,children:be.default}):V.jsx(er,{type:"secondary",children:"-"})},{title:"Actions",key:"actions",width:80,render:(ue,be,xe)=>V.jsxs(Un,{children:[V.jsx(Sn,{type:"text",size:"small",icon:V.jsx(Mi,{}),onClick:()=>ce(xe)}),V.jsx(vu,{title:"Delete this property?",onConfirm:()=>Ce(xe),okText:"Yes",cancelText:"No",children:V.jsx(Sn,{type:"text",size:"small",danger:!0,icon:V.jsx(nm,{})})})]})}],Dt=[{title:"Name",dataIndex:"name",key:"name",render:(ue,be)=>V.jsx(er,{strong:!0,children:ue||`index_${be._idx+1}`})},{title:"Columns",dataIndex:"columns",key:"columns",render:ue=>V.jsx(Un,{size:"small",children:ue.map(be=>V.jsx(dr,{color:"cyan",children:be},be))})},{title:"Options",key:"options",render:(ue,be)=>V.jsxs(Un,{size:"small",children:[be.unique&&V.jsx(dr,{color:"orange",children:"Unique"}),be.type&&V.jsx(dr,{color:"geekblue",children:be.type})]})},{title:"Actions",key:"actions",width:100,render:(ue,be)=>V.jsxs(Un,{children:[V.jsx(Sn,{type:"text",size:"small",icon:V.jsx(Mi,{}),onClick:()=>_e(be._idx)}),V.jsx(vu,{title:"Delete this index?",onConfirm:()=>Ie(be._idx),okText:"Yes",cancelText:"No",children:V.jsx(Sn,{type:"text",size:"small",danger:!0,icon:V.jsx(nm,{})})})]})}],Nt=[];return y.id&&Nt.push(V.jsxs(dr,{color:"blue",children:["ID: ",y.idType]},"id")),y.timestamps&&Nt.push(V.jsx(dr,{color:"green",children:"Timestamps"},"ts")),y.softDelete&&Nt.push(V.jsx(dr,{color:"orange",children:"Soft Delete"},"sd")),y.translations&&Nt.push(V.jsx(dr,{color:"purple",children:"Translations"},"tr")),y.authenticatable&&Nt.push(V.jsx(dr,{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:ve,children:"Edit"}),children:V.jsxs(Pn,{column:3,size:"small",children:[V.jsx(Pn.Item,{label:"Name",children:V.jsx(er,{strong:!0,children:y.name||"-"})}),V.jsx(Pn.Item,{label:"Display Name",children:y.displayName||"-"}),V.jsx(Pn.Item,{label:"Kind",children:V.jsx(dr,{color:y.kind==="enum"?"purple":"blue",children:y.kind})}),V.jsx(Pn.Item,{label:"Singular",children:y.singular||V.jsxs(er,{type:"secondary",children:[j||"-"," (auto)"]})}),V.jsx(Pn.Item,{label:"Plural",children:y.plural||V.jsxs(er,{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(er,{code:!0,children:y.tableName}):V.jsxs(er,{type:"secondary",children:[V.jsx(er,{code:!0,children:z||"-"})," (auto)"]})}),V.jsx(Pn.Item,{label:"Title Field",children:y.titleIndex||"-"}),V.jsx(Pn.Item,{label:" ",children:" "}),V.jsx(Pn.Item,{label:"Options",span:3,children:Nt.length>0?V.jsx(Un,{size:"small",children:Nt}):"-"}),y.authenticatable&&V.jsx(Pn.Item,{label:"Auth Config",span:3,children:V.jsxs(Un,{children:[V.jsx(er,{type:"secondary",children:"Login:"})," ",y.authenticatableLoginIdField,V.jsx(er,{type:"secondary",children:"Password:"})," ",y.authenticatablePasswordField,V.jsx(er,{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((ue,be)=>({...ue,_idx:be,_key:`enum_${be}_${ue.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:ue=>V.jsx(er,{strong:!0,code:!0,children:ue})},{title:"Label",dataIndex:"label",key:"label",render:ue=>ue||V.jsx(er,{type:"secondary",children:"-"})},{title:"Extra",key:"extra",width:120,render:(ue,be)=>{const xe=be.extra?Object.keys(be.extra).length:0;return xe>0?V.jsx(io,{title:Object.entries(be.extra).map(([Te,Ae])=>`${Te}: ${Ae}`).join(", "),children:V.jsxs(dr,{color:"blue",children:[xe," props"]})}):V.jsx(er,{type:"secondary",children:"-"})}},{title:"Actions",key:"actions",width:100,render:(ue,be)=>V.jsxs(Un,{children:[V.jsx(Sn,{type:"text",size:"small",icon:V.jsx(Mi,{}),onClick:()=>$e(be._idx)}),V.jsx(vu,{title:"Delete this value?",onConfirm:()=>Ge(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:gt,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:Pe,disabled:Se.length===0,children:"Add Index"}),children:V.jsx(Ma,{dataSource:w.map((ue,be)=>({...ue,_idx:be,_key:`idx_${be}_${ue.columns.join("_")}`})),columns:Dt,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(Xr,{title:"Edit Schema",open:L,onOk:de,onCancel:()=>D(!1),okText:"Apply",width:700,children:V.jsxs(wt,{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(wt.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(wt.Item,{name:"displayName",label:"Display Name",children:V.jsx(Fn,{placeholder:"e.g., User Account"})}),V.jsx(wt.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(wt.Item,{name:"singular",label:"Singular Name",children:V.jsx(Fn,{placeholder:j?`${j} (auto)`:"e.g., user"})}),V.jsx(wt.Item,{name:"plural",label:"Plural Name",children:V.jsx(Fn,{placeholder:T?`${T} (auto)`:"e.g., users"})}),V.jsx(wt.Item,{name:"group",label:"Group",children:V.jsx(Fn,{placeholder:"e.g., auth, content"})})]}),Me==="object"&&V.jsxs(V.Fragment,{children:[V.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:d.margin},children:[V.jsx(wt.Item,{name:"tableName",label:"Custom Table Name",children:V.jsx(Fn,{placeholder:z?`${z} (auto)`:"e.g., users"})}),V.jsx(wt.Item,{name:"titleIndex",label:"Title Field",children:V.jsx(tr,{allowClear:!0,options:Se.map(ue=>({value:ue,label:ue})),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(wt.Item,{name:"id",valuePropName:"checked",noStyle:!0,children:V.jsx(ta,{children:"Auto ID"})}),V.jsx(wt.Item,{name:"idType",label:"ID Type",style:{marginBottom:0,minWidth:100},children:V.jsx(tr,{disabled:!He,options:[{value:"BigInt",label:"BigInt"},{value:"Int",label:"Int"},{value:"Uuid",label:"UUID"},{value:"String",label:"String"}]})}),V.jsx(wt.Item,{name:"timestamps",valuePropName:"checked",noStyle:!0,children:V.jsx(ta,{children:"Timestamps"})}),V.jsx(wt.Item,{name:"softDelete",valuePropName:"checked",noStyle:!0,children:V.jsx(ta,{children:"Soft Delete"})}),V.jsx(wt.Item,{name:"translations",valuePropName:"checked",noStyle:!0,children:V.jsx(ta,{children:"Translations"})}),V.jsx(wt.Item,{name:"authenticatable",valuePropName:"checked",noStyle:!0,children:V.jsx(ta,{children:"Authenticatable"})})]}),Ke&&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(wt.Item,{name:"authenticatableLoginIdField",label:"Login ID Field",style:{marginBottom:0},children:V.jsx(Fn,{placeholder:"email"})}),V.jsx(wt.Item,{name:"authenticatablePasswordField",label:"Password Field",style:{marginBottom:0},children:V.jsx(Fn,{placeholder:"password"})}),V.jsx(wt.Item,{name:"authenticatableGuardName",label:"Guard Name",style:{marginBottom:0},children:V.jsx(Fn,{placeholder:"web"})})]})]})]})}),V.jsx(Xr,{title:k!==null?"Edit Property":"Add Property",open:A,onOk:ye,onCancel:()=>_(!1),okText:k!==null?"Update":"Add",width:600,children:V.jsxs(wt,{form:h,layout:"vertical",style:{marginTop:d.margin},children:[V.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:d.margin},children:[V.jsx(wt.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(wt.Item,{name:"type",label:"Type",rules:[{required:!0,message:"Type is required"}],children:V.jsx(tr,{options:[...YJ.map(ue=>({value:ue,label:ue})),{value:"Association",label:"Association (Relation)"}],showSearch:!0})})]}),qe&&V.jsx(wt.Item,{name:"length",label:"Max Length",children:V.jsx(em,{min:1,max:65535,placeholder:"255",style:{width:"100%"}})}),je&&V.jsxs("div",{style:{display:"grid",gridTemplateColumns:Qe?"1fr 1fr 1fr":"1fr",gap:d.margin},children:[Qe&&V.jsxs(V.Fragment,{children:[V.jsx(wt.Item,{name:"precision",label:"Precision (Total Digits)",children:V.jsx(em,{min:1,max:65,placeholder:"8",style:{width:"100%"}})}),V.jsx(wt.Item,{name:"scale",label:"Scale (Decimal Places)",children:V.jsx(em,{min:0,max:30,placeholder:"2",style:{width:"100%"}})})]}),V.jsx(wt.Item,{name:"unsigned",valuePropName:"checked",style:{alignSelf:"end"},children:V.jsx(ta,{children:"Unsigned (positive only)"})})]}),it&&V.jsx(wt.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(ue=>{var be;return((be=n[ue])==null?void 0:be.kind)==="enum"}).map(ue=>({value:ue,label:`${ue} (Enum)`}))})}),ft&&V.jsxs(V.Fragment,{children:[V.jsx(wt.Item,{name:"options",label:"Options (for Select)",children:V.jsx(tr,{mode:"tags",placeholder:"Add options"})}),V.jsx(wt.Item,{name:"source",label:"Source Schema (for Lookup)",children:V.jsx(tr,{allowClear:!0,options:oe.map(ue=>({value:ue,label:ue})),placeholder:"Select source schema"})})]}),_t&&V.jsxs(V.Fragment,{children:[V.jsx(wt.Item,{name:"relation",label:"Relation Type",rules:[{required:!0,message:"Relation is required"}],children:V.jsx(tr,{options:eee})}),mt&&V.jsx(wt.Item,{name:"target",label:"Target Schema",rules:[{required:!0,message:"Target is required"}],children:V.jsx(tr,{options:oe.map(ue=>({value:ue,label:ue})),placeholder:"Select target schema",showSearch:!0})}),At&&V.jsx(wt.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(ue=>({value:ue,label:ue})),placeholder:"Select possible target schemas"})}),Je&&V.jsxs(V.Fragment,{children:[V.jsx(wt.Item,{name:"target",label:"Target Schema",rules:[{required:!0,message:"Target is required"}],children:V.jsx(tr,{options:oe.map(ue=>({value:ue,label:ue})),placeholder:"Select target schema",showSearch:!0})}),V.jsx(wt.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"})})]}),De==="MorphToMany"&&V.jsxs(V.Fragment,{children:[V.jsx(wt.Item,{name:"target",label:"Target Schema",rules:[{required:!0,message:"Target is required"}],children:V.jsx(tr,{options:oe.map(ue=>({value:ue,label:ue})),placeholder:"Select target schema",showSearch:!0})}),V.jsx(wt.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(wt.Item,{name:"inversedBy",label:"Inversed By",children:V.jsx(Fn,{placeholder:"Property on target"})}),V.jsx(wt.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(wt.Item,{name:"onDelete",label:"On Delete",children:V.jsx(tr,{allowClear:!0,options:YO.map(ue=>({value:ue,label:ue})),placeholder:"CASCADE"})}),V.jsx(wt.Item,{name:"onUpdate",label:"On Update",children:V.jsx(tr,{allowClear:!0,options:YO.map(ue=>({value:ue,label:ue})),placeholder:"CASCADE"})})]}),st&&V.jsx(wt.Item,{name:"joinTable",label:"Custom Join Table Name",children:V.jsx(Fn,{placeholder:"Auto-generated if empty"})}),V.jsx(wt.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(Un,{size:"large",children:[V.jsx(wt.Item,{name:"nullable",valuePropName:"checked",noStyle:!0,children:V.jsx(ta,{children:"Nullable"})}),V.jsx(wt.Item,{name:"unique",valuePropName:"checked",noStyle:!0,children:V.jsx(ta,{children:"Unique"})})]}),V.jsx(wt.Item,{name:"default",label:"Default Value",style:{marginTop:d.margin},children:V.jsx(Fn,{placeholder:"Leave empty for no default"})}),V.jsx(wt.Item,{name:"displayName",label:"Display Name",children:V.jsx(Fn,{placeholder:"Human readable name for forms"})}),V.jsx(wt.Item,{name:"description",label:"Description",children:V.jsx(Fn.TextArea,{placeholder:"Field description/comment",rows:2})})]})}),V.jsx(Xr,{title:G!==null?"Edit Index":"Add Index",open:B,onOk:pe,onCancel:()=>K(!1),okText:G!==null?"Update":"Add",width:500,children:V.jsxs(wt,{form:b,layout:"vertical",style:{marginTop:d.margin},children:[V.jsx(wt.Item,{name:"columns",label:"Columns",rules:[{required:!0,message:"Select at least one column"}],children:V.jsx(tr,{mode:"multiple",options:Se.map(ue=>({value:ue,label:ue})),placeholder:"Select columns for this index"})}),V.jsx(wt.Item,{name:"name",label:"Index Name (optional)",children:V.jsx(Fn,{placeholder:"Auto-generated if empty"})}),g.length>0&&V.jsx(wt.Item,{name:"type",label:`Index Type (${u})`,children:V.jsx(tr,{allowClear:!0,options:g.map(ue=>({value:ue,label:ue.toUpperCase()})),placeholder:"Default: btree"})}),V.jsx(wt.Item,{name:"unique",valuePropName:"checked",noStyle:!0,children:V.jsx(ta,{children:"Unique Index"})})]})}),V.jsx(Xr,{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(wt,{form:J,layout:"vertical",style:{marginTop:d.margin},children:[V.jsx(wt.Item,{name:"value",label:"Value",normalize:ue=>(ue==null?void 0:ue.trim())??ue,rules:[{required:!0,message:"Value is required"},{validator:(ue,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(wt.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(er,{type:"secondary",children:"Extra Properties (for UI customization)"}),V.jsx(Sn,{size:"small",icon:V.jsx(vl,{}),onClick:ot,children:"Add Property"})]}),ne.length===0?V.jsx(er,{type:"secondary",style:{fontStyle:"italic",display:"block"},children:"No extra properties. Add custom fields like bgColor, textColor, icon, order, etc."}):V.jsx(Un,{direction:"vertical",style:{width:"100%"},children:ne.map((ue,be)=>V.jsxs(Un,{style:{width:"100%"},children:[V.jsx(Fn,{value:ue.key,onChange:xe=>rt(be,"key",xe.target.value),placeholder:"Key (e.g., bgColor)",style:{width:150}}),V.jsx(Fn,{value:ue.value,onChange:xe=>rt(be,"value",xe.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(dr,{children:N})},{title:"Changes",dataIndex:"changeCount",key:"changeCount",width:100,align:"center",render:N=>V.jsx(dr,{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(Un,{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(Gr,{image:Gr.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(Xr,{title:V.jsxs(Un,{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(Un,{children:[V.jsx(oc,{}),V.jsx(iu,{strong:!0,children:N}),V.jsx(dr,{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(Xr,{title:V.jsxs(Un,{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(Gr,{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-DNYwlmny.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(Gr,{image:Gr.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:er}=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]=wt.useForm(),[h]=wt.useForm(),[b]=wt.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||"",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]=wt.useForm(),[ne,se]=s.useState([]),re=e&&e!=="new"?n[e]:null,oe=Object.keys(n).filter(ue=>ue!==e),Se=S.map(ue=>ue.name).filter(Boolean),ge=(ue,be)=>{const xe=R.map(Ae=>Ae.value),Te=JJ(ue,xe,be);return Te.valid?null:Te.error??"Invalid value"};s.useEffect(()=>{var ue,be,xe,Te,Ae,Fe,et,vt,pt,Pt,tt;if(e==="new"){M(!0);const Xe={name:"",kind:"object",id:!0,idType:"BigInt",timestamps:!0,softDelete:!1,authenticatableLoginIdField:"email",authenticatablePasswordField:"password",authenticatableGuardName:"web"};C(Xe),x([]),E([]),N([]),v.setFieldsValue(Xe),D(!0)}else if(re){M(!1);const Xe={name:re.name,kind:re.kind,displayName:re.displayName,singular:re.singular,plural:re.plural,titleIndex:re.titleIndex,group:re.group,id:((ue=re.options)==null?void 0:ue.id)??!0,idType:((be=re.options)==null?void 0:be.idType)??"BigInt",timestamps:((xe=re.options)==null?void 0:xe.timestamps)??!1,softDelete:((Te=re.options)==null?void 0:Te.softDelete)??!1,tableName:(Ae=re.options)==null?void 0:Ae.tableName,translations:((Fe=re.options)==null?void 0:Fe.translations)??!1,authenticatable:((et=re.options)==null?void 0:et.authenticatable)??!1,authenticatableLoginIdField:((vt=re.options)==null?void 0:vt.authenticatableLoginIdField)??"email",authenticatablePasswordField:((pt=re.options)==null?void 0:pt.authenticatablePasswordField)??"password",authenticatableGuardName:((Pt=re.options)==null?void 0:Pt.authenticatableGuardName)??"web"};C(Xe);const St=Object.entries(re.properties??{}).map(([Ut,Tt])=>({name:Ut,type:Tt.type,nullable:Tt.nullable,unique:Tt.unique,default:Tt.default!==void 0?String(Tt.default):void 0,displayName:Tt.displayName,description:Tt.description,relation:Tt.relation,target:Tt.target,targets:Tt.targets,morphName:Tt.morphName,inversedBy:Tt.inversedBy,mappedBy:Tt.mappedBy,onDelete:Tt.onDelete,onUpdate:Tt.onUpdate,owning:Tt.owning,joinTable:Tt.joinTable,length:Tt.length,precision:Tt.precision,scale:Tt.scale,unsigned:Tt.unsigned,enum:Tt.enum,options:Tt.options,source:Tt.source}));x(St);const Wt=(((tt=re.options)==null?void 0:tt.indexes)??[]).map(Ut=>({name:Ut.name,columns:[...Ut.columns],unique:Ut.unique,type:Ut.type}));E(Wt),N(re.values?[...re.values]:[])}},[e,re,v]);const ie=async()=>{try{if(y.kind==="enum"){for(let xe=0;xe<R.length;xe++){const Te=ge(R[xe].value,xe);if(Te){m.error(`Enum value ${xe+1}: ${Te}`);return}}if(R.length===0){m.error("Enum must have at least one value");return}}const ue={};for(const xe of S){const Te={type:xe.type};xe.nullable&&(Te.nullable=xe.nullable),xe.unique&&(Te.unique=xe.unique),xe.default!==void 0&&xe.default!==""&&(Te.default=xe.default),xe.displayName&&(Te.displayName=xe.displayName),xe.description&&(Te.description=xe.description),xe.relation&&(Te.relation=xe.relation),xe.target&&(Te.target=xe.target),xe.targets&&xe.targets.length>0&&(Te.targets=xe.targets),xe.morphName&&(Te.morphName=xe.morphName),xe.inversedBy&&(Te.inversedBy=xe.inversedBy),xe.mappedBy&&(Te.mappedBy=xe.mappedBy),xe.onDelete&&(Te.onDelete=xe.onDelete),xe.onUpdate&&(Te.onUpdate=xe.onUpdate),xe.owning!==void 0&&(Te.owning=xe.owning),xe.joinTable&&(Te.joinTable=xe.joinTable),xe.length!==void 0&&(Te.length=xe.length),xe.precision!==void 0&&(Te.precision=xe.precision),xe.scale!==void 0&&(Te.scale=xe.scale),xe.unsigned&&(Te.unsigned=xe.unsigned),xe.enum&&(Te.enum=xe.enum),xe.options&&xe.options.length>0&&(Te.options=xe.options),xe.source&&(Te.source=xe.source),ue[xe.name]=Te}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=ue,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(xe=>({columns:xe.columns,unique:xe.unique,name:xe.name,type:xe.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(ue){m.error(ue.message)}},ve=()=>{v.setFieldsValue(y),D(!0)},de=async()=>{try{const ue=await v.validateFields();C({...y,...ue}),D(!1)}catch{}},ae=()=>{P(null),h.resetFields(),h.setFieldsValue({type:"String",nullable:!1,unique:!1}),_(!0)},ce=ue=>{P(ue);const be=S[ue];h.setFieldsValue(be),_(!0)},ye=async()=>{try{const ue=await h.validateFields(),be={name:ue.name,type:ue.type,nullable:ue.nullable,unique:ue.unique,default:ue.default,displayName:ue.displayName,description:ue.description,relation:ue.relation,target:ue.target,targets:ue.targets,morphName:ue.morphName,inversedBy:ue.inversedBy,mappedBy:ue.mappedBy,onDelete:ue.onDelete,onUpdate:ue.onUpdate,owning:ue.owning,joinTable:ue.joinTable,length:ue.length,precision:ue.precision,scale:ue.scale,unsigned:ue.unsigned,enum:ue.enum,options:ue.options,source:ue.source};if(k!==null){const xe=[...S];xe[k]=be,x(xe)}else x([...S,be]);_(!1)}catch{}},Ce=ue=>{x(S.filter((be,xe)=>xe!==ue))},Pe=()=>{Q(null),b.resetFields(),b.setFieldsValue({unique:!1}),K(!0)},_e=ue=>{Q(ue);const be=w[ue];b.setFieldsValue(be),K(!0)},pe=async()=>{try{const ue=await b.validateFields(),be={name:ue.name||void 0,columns:ue.columns,unique:ue.unique,type:ue.type||void 0};if(G!==null){const xe=[...w];xe[G]=be,E(xe)}else E([...w,be]);K(!1)}catch{}},Ie=ue=>{E(w.filter((be,xe)=>xe!==ue))},Ee=()=>{X(null),J.resetFields(),J.setFieldsValue({value:"",label:""}),se([]),U(!0)},$e=ue=>{X(ue);const be=R[ue];J.setFieldsValue({value:be.value,label:be.label??""});const xe=be.extra?Object.entries(be.extra).map(([Te,Ae])=>({key:Te,value:String(Ae)})):[];se(xe),U(!0)},Ve=async()=>{try{const ue=await J.validateFields(),be=ge(ue.value,W??R.length);if(be){m.error(be);return}const xe={};for(const Ae of ne)Ae.key.trim()&&(xe[Ae.key.trim()]=Ae.value);const Te={value:ue.value,label:ue.label||void 0,extra:Object.keys(xe).length>0?xe:void 0};if(W!==null){const Ae=[...R];Ae[W]=Te,N(Ae)}else N([...R,Te]);U(!1)}catch{}},Ge=ue=>{N(R.filter((be,xe)=>xe!==ue))},ot=()=>{se([...ne,{key:"",value:""}])},rt=(ue,be,xe)=>{const Te=[...ne];Te[ue]={...Te[ue],[be]:xe},se(Te)},Ye=ue=>{se(ne.filter((be,xe)=>xe!==ue))},Ze=wt.useWatch("type",h),De=wt.useWatch("relation",h),Me=wt.useWatch("kind",v),Ke=wt.useWatch("authenticatable",v),He=wt.useWatch("id",v),qe=tee.includes(Ze),je=nee.includes(Ze),Qe=Ze==="Decimal",it=Ze==="Enum",ft=Ze==="Select"||Ze==="Lookup",_t=Ze==="Association",At=De==="MorphTo",Je=["MorphOne","MorphMany","MorphedByMany"].includes(De??""),st=["ManyToMany","MorphToMany"].includes(De??""),mt=IM.includes(De);if(r&&!re&&e!=="new")return V.jsx("div",{style:{textAlign:"center",padding:d.paddingXL},children:V.jsx(ki,{size:"large"})});const at=ue=>{const be=ue.type;if(be==="String"||be==="Email"||be==="Password")return ue.length?`VARCHAR(${ue.length})`:"VARCHAR(255)";if(be==="Text")return"TEXT";if(be==="Int")return ue.unsigned?"INT UNSIGNED":"INT";if(be==="BigInt")return ue.unsigned?"BIGINT UNSIGNED":"BIGINT";if(be==="Float")return ue.unsigned?"FLOAT UNSIGNED":"FLOAT";if(be==="Decimal"){const xe=ue.precision??8,Te=ue.scale??2;return ue.unsigned?`DECIMAL(${xe},${Te}) UNSIGNED`:`DECIMAL(${xe},${Te})`}return be==="Boolean"?"BOOLEAN":be==="Date"?"DATE":be==="Timestamp"?"TIMESTAMP":be==="Json"?"JSON":be==="Uuid"?"UUID":be==="Enum"?"ENUM":be==="Association"?ue.relation??"RELATION":be.toUpperCase()},gt=[{title:"Name",dataIndex:"name",key:"name",width:200,render:(ue,be)=>V.jsxs("div",{children:[V.jsx(er,{strong:!0,children:ue}),be.displayName&&V.jsx("div",{children:V.jsx(er,{type:"secondary",children:be.displayName})})]})},{title:"Type",dataIndex:"type",key:"type",width:150,render:(ue,be)=>V.jsx(er,{code:!0,children:at(be)})},{title:"Settings",key:"settings",width:180,render:(ue,be)=>V.jsxs(Un,{size:4,wrap:!0,children:[!be.nullable&&V.jsx(dr,{children:"not_null"}),be.unique&&V.jsx(dr,{color:"blue",children:"unique"}),be.unsigned&&V.jsx(dr,{children:"unsigned"})]})},{title:"References",key:"references",width:180,render:(ue,be)=>be.type!=="Association"?V.jsx(er,{type:"secondary",children:"-"}):be.target?V.jsxs(er,{type:"secondary",children:["→ ",be.target]}):be.targets&&be.targets.length>0?V.jsxs(er,{type:"secondary",children:["→ [",be.targets.join(", "),"]"]}):V.jsx(er,{type:"secondary",children:"-"})},{title:"Default",key:"default",width:120,render:(ue,be)=>be.default!==void 0&&be.default!==""?V.jsx(er,{code:!0,children:be.default}):V.jsx(er,{type:"secondary",children:"-"})},{title:"Actions",key:"actions",width:80,render:(ue,be,xe)=>V.jsxs(Un,{children:[V.jsx(Sn,{type:"text",size:"small",icon:V.jsx(Mi,{}),onClick:()=>ce(xe)}),V.jsx(vu,{title:"Delete this property?",onConfirm:()=>Ce(xe),okText:"Yes",cancelText:"No",children:V.jsx(Sn,{type:"text",size:"small",danger:!0,icon:V.jsx(nm,{})})})]})}],Dt=[{title:"Name",dataIndex:"name",key:"name",render:(ue,be)=>V.jsx(er,{strong:!0,children:ue||`index_${be._idx+1}`})},{title:"Columns",dataIndex:"columns",key:"columns",render:ue=>V.jsx(Un,{size:"small",children:ue.map(be=>V.jsx(dr,{color:"cyan",children:be},be))})},{title:"Options",key:"options",render:(ue,be)=>V.jsxs(Un,{size:"small",children:[be.unique&&V.jsx(dr,{color:"orange",children:"Unique"}),be.type&&V.jsx(dr,{color:"geekblue",children:be.type})]})},{title:"Actions",key:"actions",width:100,render:(ue,be)=>V.jsxs(Un,{children:[V.jsx(Sn,{type:"text",size:"small",icon:V.jsx(Mi,{}),onClick:()=>_e(be._idx)}),V.jsx(vu,{title:"Delete this index?",onConfirm:()=>Ie(be._idx),okText:"Yes",cancelText:"No",children:V.jsx(Sn,{type:"text",size:"small",danger:!0,icon:V.jsx(nm,{})})})]})}],Nt=[];return y.id&&Nt.push(V.jsxs(dr,{color:"blue",children:["ID: ",y.idType]},"id")),y.timestamps&&Nt.push(V.jsx(dr,{color:"green",children:"Timestamps"},"ts")),y.softDelete&&Nt.push(V.jsx(dr,{color:"orange",children:"Soft Delete"},"sd")),y.translations&&Nt.push(V.jsx(dr,{color:"purple",children:"Translations"},"tr")),y.authenticatable&&Nt.push(V.jsx(dr,{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:ve,children:"Edit"}),children:V.jsxs(Pn,{column:3,size:"small",children:[V.jsx(Pn.Item,{label:"Name",children:V.jsx(er,{strong:!0,children:y.name||"-"})}),V.jsx(Pn.Item,{label:"Display Name",children:y.displayName||"-"}),V.jsx(Pn.Item,{label:"Kind",children:V.jsx(dr,{color:y.kind==="enum"?"purple":"blue",children:y.kind})}),V.jsx(Pn.Item,{label:"Singular",children:y.singular||V.jsxs(er,{type:"secondary",children:[j||"-"," (auto)"]})}),V.jsx(Pn.Item,{label:"Plural",children:y.plural||V.jsxs(er,{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(er,{code:!0,children:y.tableName}):V.jsxs(er,{type:"secondary",children:[V.jsx(er,{code:!0,children:z||"-"})," (auto)"]})}),V.jsx(Pn.Item,{label:"Title Field",children:y.titleIndex||"-"}),V.jsx(Pn.Item,{label:" ",children:" "}),V.jsx(Pn.Item,{label:"Options",span:3,children:Nt.length>0?V.jsx(Un,{size:"small",children:Nt}):"-"}),y.authenticatable&&V.jsx(Pn.Item,{label:"Auth Config",span:3,children:V.jsxs(Un,{children:[V.jsx(er,{type:"secondary",children:"Login:"})," ",y.authenticatableLoginIdField,V.jsx(er,{type:"secondary",children:"Password:"})," ",y.authenticatablePasswordField,V.jsx(er,{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((ue,be)=>({...ue,_idx:be,_key:`enum_${be}_${ue.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:ue=>V.jsx(er,{strong:!0,code:!0,children:ue})},{title:"Label",dataIndex:"label",key:"label",render:ue=>ue||V.jsx(er,{type:"secondary",children:"-"})},{title:"Extra",key:"extra",width:120,render:(ue,be)=>{const xe=be.extra?Object.keys(be.extra).length:0;return xe>0?V.jsx(io,{title:Object.entries(be.extra).map(([Te,Ae])=>`${Te}: ${Ae}`).join(", "),children:V.jsxs(dr,{color:"blue",children:[xe," props"]})}):V.jsx(er,{type:"secondary",children:"-"})}},{title:"Actions",key:"actions",width:100,render:(ue,be)=>V.jsxs(Un,{children:[V.jsx(Sn,{type:"text",size:"small",icon:V.jsx(Mi,{}),onClick:()=>$e(be._idx)}),V.jsx(vu,{title:"Delete this value?",onConfirm:()=>Ge(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:gt,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:Pe,disabled:Se.length===0,children:"Add Index"}),children:V.jsx(Ma,{dataSource:w.map((ue,be)=>({...ue,_idx:be,_key:`idx_${be}_${ue.columns.join("_")}`})),columns:Dt,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(Xr,{title:"Edit Schema",open:L,onOk:de,onCancel:()=>D(!1),okText:"Apply",width:700,children:V.jsxs(wt,{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(wt.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(wt.Item,{name:"displayName",label:"Display Name",children:V.jsx(Fn,{placeholder:"e.g., User Account"})}),V.jsx(wt.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(wt.Item,{name:"singular",label:"Singular Name",children:V.jsx(Fn,{placeholder:j?`${j} (auto)`:"e.g., user"})}),V.jsx(wt.Item,{name:"plural",label:"Plural Name",children:V.jsx(Fn,{placeholder:T?`${T} (auto)`:"e.g., users"})}),V.jsx(wt.Item,{name:"group",label:"Group",children:V.jsx(Fn,{placeholder:"e.g., auth, content"})})]}),Me==="object"&&V.jsxs(V.Fragment,{children:[V.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:d.margin},children:[V.jsx(wt.Item,{name:"tableName",label:"Custom Table Name",children:V.jsx(Fn,{placeholder:z?`${z} (auto)`:"e.g., users"})}),V.jsx(wt.Item,{name:"titleIndex",label:"Title Field",children:V.jsx(tr,{allowClear:!0,options:Se.map(ue=>({value:ue,label:ue})),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(wt.Item,{name:"id",valuePropName:"checked",noStyle:!0,children:V.jsx(ta,{children:"Auto ID"})}),V.jsx(wt.Item,{name:"idType",label:"ID Type",style:{marginBottom:0,minWidth:100},children:V.jsx(tr,{disabled:!He,options:[{value:"BigInt",label:"BigInt"},{value:"Int",label:"Int"},{value:"Uuid",label:"UUID"},{value:"String",label:"String"}]})}),V.jsx(wt.Item,{name:"timestamps",valuePropName:"checked",noStyle:!0,children:V.jsx(ta,{children:"Timestamps"})}),V.jsx(wt.Item,{name:"softDelete",valuePropName:"checked",noStyle:!0,children:V.jsx(ta,{children:"Soft Delete"})}),V.jsx(wt.Item,{name:"translations",valuePropName:"checked",noStyle:!0,children:V.jsx(ta,{children:"Translations"})}),V.jsx(wt.Item,{name:"authenticatable",valuePropName:"checked",noStyle:!0,children:V.jsx(ta,{children:"Authenticatable"})})]}),Ke&&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(wt.Item,{name:"authenticatableLoginIdField",label:"Login ID Field",style:{marginBottom:0},children:V.jsx(Fn,{placeholder:"email"})}),V.jsx(wt.Item,{name:"authenticatablePasswordField",label:"Password Field",style:{marginBottom:0},children:V.jsx(Fn,{placeholder:"password"})}),V.jsx(wt.Item,{name:"authenticatableGuardName",label:"Guard Name",style:{marginBottom:0},children:V.jsx(Fn,{placeholder:"web"})})]})]})]})}),V.jsx(Xr,{title:k!==null?"Edit Property":"Add Property",open:A,onOk:ye,onCancel:()=>_(!1),okText:k!==null?"Update":"Add",width:600,children:V.jsxs(wt,{form:h,layout:"vertical",style:{marginTop:d.margin},children:[V.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:d.margin},children:[V.jsx(wt.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(wt.Item,{name:"type",label:"Type",rules:[{required:!0,message:"Type is required"}],children:V.jsx(tr,{options:[...YJ.map(ue=>({value:ue,label:ue})),{value:"Association",label:"Association (Relation)"}],showSearch:!0})})]}),qe&&V.jsx(wt.Item,{name:"length",label:"Max Length",children:V.jsx(em,{min:1,max:65535,placeholder:"255",style:{width:"100%"}})}),je&&V.jsxs("div",{style:{display:"grid",gridTemplateColumns:Qe?"1fr 1fr 1fr":"1fr",gap:d.margin},children:[Qe&&V.jsxs(V.Fragment,{children:[V.jsx(wt.Item,{name:"precision",label:"Precision (Total Digits)",children:V.jsx(em,{min:1,max:65,placeholder:"8",style:{width:"100%"}})}),V.jsx(wt.Item,{name:"scale",label:"Scale (Decimal Places)",children:V.jsx(em,{min:0,max:30,placeholder:"2",style:{width:"100%"}})})]}),V.jsx(wt.Item,{name:"unsigned",valuePropName:"checked",style:{alignSelf:"end"},children:V.jsx(ta,{children:"Unsigned (positive only)"})})]}),it&&V.jsx(wt.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(ue=>{var be;return((be=n[ue])==null?void 0:be.kind)==="enum"}).map(ue=>({value:ue,label:`${ue} (Enum)`}))})}),ft&&V.jsxs(V.Fragment,{children:[V.jsx(wt.Item,{name:"options",label:"Options (for Select)",children:V.jsx(tr,{mode:"tags",placeholder:"Add options"})}),V.jsx(wt.Item,{name:"source",label:"Source Schema (for Lookup)",children:V.jsx(tr,{allowClear:!0,options:oe.map(ue=>({value:ue,label:ue})),placeholder:"Select source schema"})})]}),_t&&V.jsxs(V.Fragment,{children:[V.jsx(wt.Item,{name:"relation",label:"Relation Type",rules:[{required:!0,message:"Relation is required"}],children:V.jsx(tr,{options:eee})}),mt&&V.jsx(wt.Item,{name:"target",label:"Target Schema",rules:[{required:!0,message:"Target is required"}],children:V.jsx(tr,{options:oe.map(ue=>({value:ue,label:ue})),placeholder:"Select target schema",showSearch:!0})}),At&&V.jsx(wt.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(ue=>({value:ue,label:ue})),placeholder:"Select possible target schemas"})}),Je&&V.jsxs(V.Fragment,{children:[V.jsx(wt.Item,{name:"target",label:"Target Schema",rules:[{required:!0,message:"Target is required"}],children:V.jsx(tr,{options:oe.map(ue=>({value:ue,label:ue})),placeholder:"Select target schema",showSearch:!0})}),V.jsx(wt.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"})})]}),De==="MorphToMany"&&V.jsxs(V.Fragment,{children:[V.jsx(wt.Item,{name:"target",label:"Target Schema",rules:[{required:!0,message:"Target is required"}],children:V.jsx(tr,{options:oe.map(ue=>({value:ue,label:ue})),placeholder:"Select target schema",showSearch:!0})}),V.jsx(wt.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(wt.Item,{name:"inversedBy",label:"Inversed By",children:V.jsx(Fn,{placeholder:"Property on target"})}),V.jsx(wt.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(wt.Item,{name:"onDelete",label:"On Delete",children:V.jsx(tr,{allowClear:!0,options:YO.map(ue=>({value:ue,label:ue})),placeholder:"CASCADE"})}),V.jsx(wt.Item,{name:"onUpdate",label:"On Update",children:V.jsx(tr,{allowClear:!0,options:YO.map(ue=>({value:ue,label:ue})),placeholder:"CASCADE"})})]}),st&&V.jsx(wt.Item,{name:"joinTable",label:"Custom Join Table Name",children:V.jsx(Fn,{placeholder:"Auto-generated if empty"})}),V.jsx(wt.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(Un,{size:"large",children:[V.jsx(wt.Item,{name:"nullable",valuePropName:"checked",noStyle:!0,children:V.jsx(ta,{children:"Nullable"})}),V.jsx(wt.Item,{name:"unique",valuePropName:"checked",noStyle:!0,children:V.jsx(ta,{children:"Unique"})})]}),V.jsx(wt.Item,{name:"default",label:"Default Value",style:{marginTop:d.margin},children:V.jsx(Fn,{placeholder:"Leave empty for no default"})}),V.jsx(wt.Item,{name:"displayName",label:"Display Name",children:V.jsx(Fn,{placeholder:"Human readable name for forms"})}),V.jsx(wt.Item,{name:"description",label:"Description",children:V.jsx(Fn.TextArea,{placeholder:"Field description/comment",rows:2})})]})}),V.jsx(Xr,{title:G!==null?"Edit Index":"Add Index",open:B,onOk:pe,onCancel:()=>K(!1),okText:G!==null?"Update":"Add",width:500,children:V.jsxs(wt,{form:b,layout:"vertical",style:{marginTop:d.margin},children:[V.jsx(wt.Item,{name:"columns",label:"Columns",rules:[{required:!0,message:"Select at least one column"}],children:V.jsx(tr,{mode:"multiple",options:Se.map(ue=>({value:ue,label:ue})),placeholder:"Select columns for this index"})}),V.jsx(wt.Item,{name:"name",label:"Index Name (optional)",children:V.jsx(Fn,{placeholder:"Auto-generated if empty"})}),g.length>0&&V.jsx(wt.Item,{name:"type",label:`Index Type (${u})`,children:V.jsx(tr,{allowClear:!0,options:g.map(ue=>({value:ue,label:ue.toUpperCase()})),placeholder:"Default: btree"})}),V.jsx(wt.Item,{name:"unique",valuePropName:"checked",noStyle:!0,children:V.jsx(ta,{children:"Unique Index"})})]})}),V.jsx(Xr,{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(wt,{form:J,layout:"vertical",style:{marginTop:d.margin},children:[V.jsx(wt.Item,{name:"value",label:"Value",normalize:ue=>(ue==null?void 0:ue.trim())??ue,rules:[{required:!0,message:"Value is required"},{validator:(ue,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(wt.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(er,{type:"secondary",children:"Extra Properties (for UI customization)"}),V.jsx(Sn,{size:"small",icon:V.jsx(vl,{}),onClick:ot,children:"Add Property"})]}),ne.length===0?V.jsx(er,{type:"secondary",style:{fontStyle:"italic",display:"block"},children:"No extra properties. Add custom fields like bgColor, textColor, icon, order, etc."}):V.jsx(Un,{direction:"vertical",style:{width:"100%"},children:ne.map((ue,be)=>V.jsxs(Un,{style:{width:"100%"},children:[V.jsx(Fn,{value:ue.key,onChange:xe=>rt(be,"key",xe.target.value),placeholder:"Key (e.g., bgColor)",style:{width:150}}),V.jsx(Fn,{value:ue.value,onChange:xe=>rt(be,"value",xe.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(dr,{children:N})},{title:"Changes",dataIndex:"changeCount",key:"changeCount",width:100,align:"center",render:N=>V.jsx(dr,{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(Un,{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(Gr,{image:Gr.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(Xr,{title:V.jsxs(Un,{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(Un,{children:[V.jsx(oc,{}),V.jsx(iu,{strong:!0,children:N}),V.jsx(dr,{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(Xr,{title:V.jsxs(Un,{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(Gr,{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-DFdsCkyy.js.map