opacacms 0.1.19 → 0.1.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/webcomponent.js +2 -2
- package/dist/{chunk-9rqm0emy.js → chunk-9y3m1xkx.js} +1 -1
- package/dist/{chunk-b5qdy72a.js → chunk-erh6x75p.js} +2 -1
- package/dist/index.js +1 -1
- package/dist/runtimes/bun.js +2 -2
- package/dist/runtimes/cloudflare-workers.js +2 -2
- package/dist/runtimes/next.js +2 -2
- package/dist/runtimes/node.js +2 -2
- package/dist/server.js +2 -2
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
var lt=Object.defineProperty;var Rt=(r)=>r;function ht(r,n){this[r]=Rt.bind(null,n)}var uo=(r,n)=>{for(var a in n)lt(r,a,{get:n[a],enumerable:!0,configurable:!0,set:ht.bind(n,a)})};var Ha=(r,n)=>()=>(r&&(n=r(r=0)),n);import{createAuthClient as ut}from"better-auth/client";import{adminClient as zt}from"better-auth/client/plugins";var jn=null,zo=null,wo=(r)=>{if(!r||!r.startsWith("http"))return;let a=r.replace(/\/$/,"")+"/api/auth";if(jn&&zo===a)return;zo=a,jn=ut({baseURL:a,autoRefresh:!0,fetchOptions:{credentials:"include"},plugins:[zt()]})},on;var Dn=Ha(()=>{on=new Proxy({},{get(r,n){if(!jn)throw Error("Auth client not configured. Did you provide a valid serverUrl?");return jn[n]}})});var To={};uo(To,{toggleSidebar:()=>fa,notify:()=>S,clearToast:()=>La,$toasts:()=>dr,$isSidebarCollapsed:()=>Hn});import{persistentAtom as wt}from"@nanostores/persistent";import{atom as Tt}from"nanostores";function fa(){Hn.set(!Hn.get())}function S(r,n="success"){let a=Math.random().toString(36).substring(2,9);dr.set([...dr.get(),{id:a,message:r,type:n}])}function La(r){dr.set(dr.get().filter((n)=>n.id!==r))}var dr,Hn;var Tr=Ha(()=>{dr=Tt([]),Hn=wt("opaca-sidebar-collapsed",!1,{encode:JSON.stringify,decode:JSON.parse})});var Lo={};uo(Lo,{syncSession:()=>ra,logout:()=>Wa,login:()=>Ca,$user:()=>Ht,$session:()=>er,$isAuthenticated:()=>ft,$isAuthPending:()=>Hr});import{atom as Ho,computed as fo}from"nanostores";async function ra(){Hr.set(!0);try{let r=await on.getSession();er.set(r.data)}catch(r){console.error("[OpacaCMS] Failed to sync session:",r)}finally{Hr.set(!1)}}async function Ca(r){Hr.set(!0);try{let n=await on.signIn.email({email:r.email,password:r.password});if(n.error)throw Error(n.error.message||"Invalid credentials");return await ra(),S("Logged in successfully","success"),n}catch(n){throw S(n instanceof Error?n.message:"Login failed","error"),n}finally{Hr.set(!1)}}async function Wa(){Hr.set(!0);try{await on.signOut(),er.set(null),S("Logged out successfully")}catch{S("Logout failed","error")}finally{Hr.set(!1)}}var er,Hr,Ht,ft;var Ga=Ha(()=>{Dn();Tr();er=Ho(null),Hr=Ho(!0),Ht=fo(er,(r)=>r?.user??null),ft=fo(er,(r)=>!!r)});import $y from"@r2wc/react-to-web-component";import{useStore as wn}from"@nanostores/react";import{Loader2 as Xy}from"lucide-react";import{useCallback as Ay,useEffect as Qy,useState as By}from"react";import Lt from"ky";var fn=null,na=null,Co=(r)=>{if(!r||!r.startsWith("http"))return;let a=r.replace(/\/$/,"");if(fn&&na===a)return;na=a,fn=Lt.create({prefixUrl:a,credentials:"include",retry:0,hooks:{afterResponse:[async(o,p,m)=>{if(m.status===401||m.status===403)try{let{$session:c}=await Promise.resolve().then(() => (Ga(),Lo)),{notify:v}=await Promise.resolve().then(() => (Tr(),To));c.set(null),v("Session expired. Please log in again.","error")}catch(c){}}]}})},cr=()=>{if(!na)throw Error("API client not configured. Did you provide a valid serverUrl?");return na},M=new Proxy({},{get(r,n){if(!fn)throw Error("API client not configured. Did you provide a valid serverUrl?");if(!fn)throw Error("API client not configured");let a=fn;if(a)return a[n];return}});Dn();import{createRouter as Ct}from"@nanostores/router";var Yr=Ct({dashboard:"/admin",collections:"/admin/collections/:slug",document:"/admin/collections/:slug/:id",globals:"/admin/globals/:slug",settings:"/admin/settings"});Ga();import{atom as aa}from"nanostores";var Rr=aa(null),Ka=aa(!1),nb=aa(!1),ab=aa(!1);function Pa(r){Rr.set(r)}function oa(r){Ka.set(r)}Tr();import{useStore as Bo}from"@nanostores/react";import*as ba from"lucide-react";import{ChevronLeft as At,ChevronRight as Qt,Database as Bt,Globe as kt,Image as $t,LayoutDashboard as Mt,LogOut as Ut,Settings as It}from"lucide-react";Tr();import{jsxDEV as Wt}from"react/jsx-dev-runtime";function ir({href:r,params:n,search:a,children:o,onClick:p,...m}){return Wt("a",{href:r,onClick:(v)=>{if(p)p(v);if(!v.defaultPrevented&&v.button===0&&!v.metaKey&&!v.ctrlKey&&!v.shiftKey&&!v.altKey&&!m.target)if(v.preventDefault(),r.startsWith("/admin"))Yr.open(r);else window.location.href=r},...m,children:o},void 0,!1,void 0,this)}import*as Wo from"react";function Y(...r){return r.filter(Boolean).join(" ")}import{jsxDEV as _r}from"react/jsx-dev-runtime";var pa=({title:r,children:n,defaultOpen:a=!0,className:o,isCollapsed:p=!1})=>{let[m,c]=Wo.useState(a);return _r("div",{className:Y("opaca-sidebar-accordion",o),children:[_r("button",{type:"button",className:"opaca-sidebar-accordion-trigger",onClick:()=>c(!m),"aria-expanded":m,style:{opacity:p?0:1,pointerEvents:p?"none":"auto"},title:r,children:[_r("span",{className:"opaca-sidebar-accordion-title",children:r},void 0,!1,void 0,this),_r("svg",{className:"opaca-sidebar-accordion-icon",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:[_r("title",{children:"Toggle accordion"},void 0,!1,void 0,this),_r("polyline",{points:"6 9 12 15 18 9"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),_r("div",{className:"opaca-sidebar-accordion-content","data-state":m?"open":"closed",children:_r("div",{className:"opaca-sidebar-accordion-content-inner",children:n},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import*as Go from"react";import{jsxDEV as Ja}from"react/jsx-dev-runtime";var Ya=Go.forwardRef(({className:r,label:n,children:a,...o},p)=>{return Ja("div",{ref:p,className:Y("opaca-ui-blocks",r),...o,children:[n&&Ja("div",{style:{marginBottom:"1.25rem",fontSize:"0.75rem",fontWeight:500,color:"var(--opaca-text-muted)",textTransform:"uppercase",letterSpacing:"0.03em"},children:n},void 0,!1,void 0,this),Ja("div",{style:{display:"flex",flexDirection:"column",gap:"1.5rem"},children:a},void 0,!1,void 0,this)]},void 0,!0,void 0,this)});Ya.displayName="Blocks";import*as Ko from"react";import{jsxDEV as Gt}from"react/jsx-dev-runtime";var d=Ko.forwardRef(({className:r,variant:n="default",size:a="default",...o},p)=>{return Gt("button",{ref:p,className:Y("opaca-ui-btn",`opaca-ui-btn-${n}`,`opaca-ui-btn-size-${a}`,r),...o},void 0,!1,void 0,this)});d.displayName="Button";import*as ar from"react";import{jsxDEV as pn}from"react/jsx-dev-runtime";var _a=ar.createContext({}),qa=ar.forwardRef(({className:r,open:n,defaultOpen:a,onOpenChange:o,disabled:p,children:m,...c},v)=>{let[g,i]=ar.useState(a??!1),N=n!==void 0,b=N?n:g,y=ar.useCallback((R)=>{if(!N)i(R);if(o)o(R)},[N,o]),l=ar.useMemo(()=>({open:b,onOpenChange:y,disabled:p}),[b,y,p]);return pn(_a.Provider,{value:l,children:pn("div",{ref:v,className:Y("opaca-ui-collapsible",r),...c,children:m},void 0,!1,void 0,this)},void 0,!1,void 0,this)});qa.displayName="Collapsible";var Za=ar.forwardRef(({className:r,disabled:n,children:a,...o},p)=>{let m=ar.useContext(_a),c=n||m.disabled,v=m.open,g=ar.useCallback((i)=>{if(!c&&m.onOpenChange)m.onOpenChange(!v);if(o.onClick)o.onClick(i)},[c,v,m.onOpenChange,o.onClick]);return pn("button",{type:"button","aria-expanded":v,disabled:c,onClick:g,ref:p,className:Y("opaca-ui-collapsible-trigger",r),...o,children:[a,pn("svg",{className:"opaca-ui-collapsible-icon",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",children:pn("polyline",{points:"6 9 12 15 18 9"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)});Za.displayName="CollapsibleTrigger";var Xa=ar.forwardRef(({className:r,children:n,...a},o)=>{let m=ar.useContext(_a).open;if(!m)return null;return pn("div",{"data-state":m?"open":"closed",ref:o,className:Y("opaca-ui-collapsible-content",r),...a,children:n},void 0,!1,void 0,this)});Xa.displayName="CollapsibleContent";import{createPortal as Kt}from"react-dom";import{jsxDEV as qr}from"react/jsx-dev-runtime";function Ln({open:r,onOpenChange:n,children:a}){if(!r)return null;return Kt(qr("div",{className:"opaca-ui-dialog-portal",children:[qr("button",{type:"button",className:"opaca-ui-dialog-overlay",onClick:()=>n(!1),tabIndex:-1,"aria-hidden":"true"},void 0,!1,void 0,this),qr("div",{className:"opaca-ui-dialog-wrapper",children:a},void 0,!1,void 0,this)]},void 0,!0,void 0,this),document.body)}function Cn({children:r,className:n}){return qr("div",{className:Y("opaca-ui-dialog-content",n),children:r},void 0,!1,void 0,this)}function Wn({children:r,className:n}){return qr("div",{className:Y("opaca-ui-dialog-header",n),children:r},void 0,!1,void 0,this)}function Gn({children:r,className:n}){return qr("h2",{className:Y("opaca-ui-dialog-title",n),children:r},void 0,!1,void 0,this)}function ta({children:r,className:n}){return qr("p",{className:Y("opaca-ui-dialog-description",n),children:r},void 0,!1,void 0,this)}function Kn({children:r,className:n}){return qr("div",{className:Y("opaca-ui-dialog-footer",n),children:r},void 0,!1,void 0,this)}import*as Jo from"react";import{jsxDEV as Po}from"react/jsx-dev-runtime";var Aa=Jo.forwardRef(({className:r,label:n,children:a,...o},p)=>{return Po("div",{ref:p,className:Y("opaca-ui-group",r),...o,children:[n&&Po("h3",{className:"opaca-ui-group-header",children:n},void 0,!1,void 0,this),a]},void 0,!0,void 0,this)});Aa.displayName="Group";import*as Yo from"react";import{jsxDEV as Pt}from"react/jsx-dev-runtime";var fr=Yo.forwardRef(({className:r,type:n,...a},o)=>{return Pt("input",{type:n,className:Y("opaca-ui-input",r),ref:o,...a},void 0,!1,void 0,this)});fr.displayName="Input";import*as _o from"react";import{jsxDEV as tn}from"react/jsx-dev-runtime";var Qa=_o.forwardRef(({className:r,label:n,collection:a,children:o,...p},m)=>{return tn("div",{ref:m,className:Y("opaca-ui-join",r),...p,children:[n&&tn("div",{style:{display:"block",marginBottom:"0.5rem",fontSize:"0.75rem",fontWeight:500,color:"var(--opaca-text-muted)",textTransform:"uppercase",letterSpacing:"0.03em"},children:n},void 0,!1,void 0,this),tn("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"0.75rem",border:"1px solid var(--opaca-border)",borderRadius:"var(--opaca-radius)",backgroundColor:"rgba(255, 255, 255, 0.02)",color:"var(--opaca-text-dim)",fontSize:"0.8125rem"},children:[tn("span",{children:["Virtually joined from: ",tn("strong",{children:a},void 0,!1,void 0,this)]},void 0,!0,void 0,this),tn("span",{style:{fontSize:"0.7rem",opacity:0.5},children:["On: ",p.on||"dynamic"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)});Qa.displayName="Join";import*as qo from"react";import{jsxDEV as Jt}from"react/jsx-dev-runtime";var Zr=qo.forwardRef(({className:r,...n},a)=>Jt("label",{ref:a,className:Y("opaca-ui-label",r),...n},void 0,!1,void 0,this));Zr.displayName="Label";import*as Lr from"react";import{jsxDEV as ma}from"react/jsx-dev-runtime";var Ba=Lr.forwardRef(({className:r,value:n,onValueChange:a,disabled:o,name:p,children:m,...c},v)=>{let g=Lr.useMemo(()=>({value:n,onValueChange:a,disabled:o,name:p}),[n,a,o,p]);return ma(Zo.Provider,{value:g,children:ma("div",{ref:v,className:Y("opaca-ui-radio-group",r),...c,children:m},void 0,!1,void 0,this)},void 0,!1,void 0,this)});Ba.displayName="RadioGroup";var Zo=Lr.createContext({}),ka=Lr.forwardRef(({className:r,value:n,disabled:a,id:o,...p},m)=>{let c=Lr.useContext(Zo),v=a||c.disabled,g=c.value===n,i=c.name;return ma("div",{className:"opaca-ui-radio-item",children:ma("input",{type:"radio",ref:m,id:o,name:i,value:n,checked:g,disabled:v,onChange:()=>{if(!v&&c.onValueChange)c.onValueChange(n)},className:Y(r),...p},void 0,!1,void 0,this)},void 0,!1,void 0,this)});ka.displayName="RadioGroupItem";import*as Xo from"react";import{jsxDEV as Pn}from"react/jsx-dev-runtime";var $a=Xo.forwardRef(({className:r,label:n,relationTo:a,children:o,onClick:p,...m},c)=>{return Pn("div",{ref:c,className:Y("opaca-ui-relationship",r),...m,onClick:p,style:{cursor:p?"pointer":"default",...m.style},children:[n&&Pn("div",{style:{display:"block",marginBottom:"0.5rem",fontSize:"0.75rem",fontWeight:500,color:"var(--opaca-text-muted)",textTransform:"uppercase",letterSpacing:"0.03em"},children:n},void 0,!1,void 0,this),Pn("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"0.75rem",border:"1px solid var(--opaca-border)",borderRadius:"var(--opaca-radius)",backgroundColor:"rgba(255, 255, 255, 0.02)",transition:"all 0.2s ease",fontSize:"0.8125rem"},className:"opaca-ui-relationship-trigger",children:[Pn("span",{children:o||`Select ${a}...`},void 0,!1,void 0,this),Pn("span",{style:{fontSize:"0.7rem",opacity:0.5},children:["Link: ",a]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)});$a.displayName="Relationship";import{jsxDEV as Yt}from"react/jsx-dev-runtime";function mn({children:r,className:n,maxHeight:a,...o}){return Yt("div",{className:Y("opaca-scroll-area",n),style:{maxHeight:a,overflowY:"auto",...o.style},...o,children:r},void 0,!1,void 0,this)}import{ChevronDown as _t}from"lucide-react";import*as or from"react";import{createPortal as qt}from"react-dom";import{jsxDEV as Nr}from"react/jsx-dev-runtime";var Jn=or.createContext(null);function cn({value:r,onValueChange:n,children:a,open:o,onOpenChange:p}){let[m,c]=or.useState(!1),v=o??m,g=p??c,i=or.useRef(null);return Nr(Jn.Provider,{value:{value:r,onValueChange:n,open:v,setOpen:g,triggerRef:i},children:Nr("div",{className:"opaca-ui-select",children:a},void 0,!1,void 0,this)},void 0,!1,void 0,this)}function yn({children:r,className:n}){let a=or.useContext(Jn);if(!a)throw Error("SelectTrigger must be used within a Select");return Nr("button",{ref:a.triggerRef,type:"button",className:Y("opaca-ui-select-trigger",n),onClick:()=>a.setOpen(!a.open),"data-state":a.open?"open":"closed",children:[Nr("span",{className:"trigger-content",children:r},void 0,!1,void 0,this),Nr(_t,{size:14,className:"trigger-icon"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function bn({placeholder:r}){let n=or.useContext(Jn);if(!n)throw Error("SelectValue must be used within a Select");return Nr("span",{className:!n.value?"trigger-placeholder":"",children:n.value||r},void 0,!1,void 0,this)}function gn({children:r,className:n}){let a=or.useContext(Jn);if(!a)throw Error("SelectContent must be used within a Select");let[o,p]=or.useState({top:0,left:0,width:0}),m=or.useCallback(()=>{if(a.open&&a.triggerRef.current){let c=a.triggerRef.current.getBoundingClientRect();p({top:c.bottom,left:c.left,width:c.width})}},[a.open,a.triggerRef]);if(or.useEffect(()=>{if(a.open)return m(),window.addEventListener("scroll",m,!0),window.addEventListener("resize",m),()=>{window.removeEventListener("scroll",m,!0),window.removeEventListener("resize",m)}},[a.open,m]),!a.open)return null;return qt(Nr("div",{className:"opaca-ui-select-portal",style:{top:o.top+4,left:o.left,width:o.width},children:[Nr("button",{type:"button",className:"opaca-ui-select-content-overlay",style:{position:"fixed",inset:0,zIndex:-1,background:"transparent",border:"none",padding:0,width:"100%",height:"100%",cursor:"default"},onClick:()=>a.setOpen(!1),tabIndex:-1,"aria-hidden":"true"},void 0,!1,void 0,this),Nr("div",{className:Y("opaca-ui-select-content",n),children:r},void 0,!1,void 0,this)]},void 0,!0,void 0,this),document.body)}function Xr({value:r,children:n,className:a}){let o=or.useContext(Jn);if(!o)throw Error("SelectItem must be used within a Select");let p=o.value===r;return Nr("button",{type:"button",className:Y("opaca-ui-select-item",a),"data-selected":p,onClick:()=>{o.onValueChange?.(r),o.setOpen(!1)},children:n},void 0,!1,void 0,this)}function ca({children:r}){return Nr("div",{className:"opaca-ui-select-label",children:r},void 0,!1,void 0,this)}function ia(){return Nr("div",{className:"opaca-ui-select-separator"},void 0,!1,void 0,this)}import{jsxDEV as Zt}from"react/jsx-dev-runtime";var Ao=({className:r="",orientation:n="horizontal",margin:a})=>{return Zt("div",{className:`opaca-separator ${n} ${r}`,style:a?{margin:a}:void 0,role:"none"},void 0,!1,void 0,this)};import{createPortal as Xt}from"react-dom";import{jsxDEV as gr}from"react/jsx-dev-runtime";function Ar({open:r,onOpenChange:n,children:a}){if(!r)return null;return Xt(gr("div",{className:"opaca-ui-sheet-portal",children:[gr("button",{type:"button",className:"opaca-ui-sheet-overlay",onClick:()=>n(!1),tabIndex:-1,"aria-hidden":"true"},void 0,!1,void 0,this),gr("div",{className:"opaca-ui-sheet-wrapper",children:a},void 0,!1,void 0,this)]},void 0,!0,void 0,this),document.body)}function Qr({children:r,className:n,onClose:a}){return gr("div",{className:Y("opaca-ui-sheet-content",n),children:[r,a&&gr("button",{type:"button",onClick:a,className:"opaca-ui-sheet-close",children:[gr("svg",{"aria-hidden":"true",xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"opaca-ui-sheet-close-icon",children:[gr("line",{x1:"18",x2:"6",y1:"6",y2:"18"},void 0,!1,void 0,this),gr("line",{x1:"6",x2:"18",y1:"6",y2:"18"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),gr("span",{className:"opaca-ui-sr-only",children:"Close"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}function Br({children:r,className:n}){return gr("div",{className:Y("opaca-ui-sheet-header",n),children:r},void 0,!1,void 0,this)}function kr({children:r,className:n}){return gr("h2",{className:Y("opaca-ui-sheet-title",n),children:r},void 0,!1,void 0,this)}function ya({children:r,className:n}){return gr("p",{className:Y("opaca-ui-sheet-description",n),children:r},void 0,!1,void 0,this)}function Qo({children:r,className:n}){return gr("div",{className:Y("opaca-ui-sheet-footer",n),children:r},void 0,!1,void 0,this)}import*as pr from"react";import{jsxDEV as Yn}from"react/jsx-dev-runtime";var Ma=pr.createContext({}),Ua=pr.forwardRef(({className:r,value:n,defaultValue:a,onValueChange:o,children:p,...m},c)=>{let[v,g]=pr.useState(a),i=n!==void 0,N=i?n:v,b=pr.useCallback((l)=>{if(!i)g(l);if(o)o(l)},[i,o]),y=pr.useMemo(()=>({value:N,onValueChange:b}),[N,b]);return Yn(Ma.Provider,{value:y,children:Yn("div",{ref:c,className:Y("opaca-ui-tabs",r),...m,children:p},void 0,!1,void 0,this)},void 0,!1,void 0,this)});Ua.displayName="Tabs";var Ia=pr.forwardRef(({className:r,...n},a)=>Yn("div",{ref:a,className:Y("opaca-ui-tabs-list",r),role:"tablist",...n},void 0,!1,void 0,this));Ia.displayName="TabsList";var Oa=pr.forwardRef(({className:r,value:n,disabled:a,...o},p)=>{let m=pr.useContext(Ma),c=m.value===n;return Yn("button",{type:"button",role:"tab","aria-selected":c,"data-state":c?"active":"inactive",disabled:a,onClick:()=>{if(!a&&m.onValueChange)m.onValueChange(n)},ref:p,className:Y("opaca-ui-tabs-trigger",r),...o},void 0,!1,void 0,this)});Oa.displayName="TabsTrigger";var Sa=pr.forwardRef(({className:r,value:n,...a},o)=>{let m=pr.useContext(Ma).value===n;if(!m)return null;return Yn("div",{role:"tabpanel","data-state":m?"active":"inactive",ref:o,className:Y("opaca-ui-tabs-content",r),...a},void 0,!1,void 0,this)});Sa.displayName="TabsContent";import{jsxDEV as X}from"react/jsx-dev-runtime";function ko({children:r,config:n,user:a,onLogout:o}){let p=Bo(Hn),c=Bo(Yr)?.path||"/admin";return X("div",{className:"opaca-admin",children:[X("aside",{className:`opaca-sidebar ${p?"collapsed":""}`,children:[X("button",{type:"button",className:"opaca-sidebar-toggle",onClick:fa,title:p?"Expand Sidebar":"Collapse Sidebar",children:p?X(Qt,{size:14},void 0,!1,void 0,this):X(At,{size:14},void 0,!1,void 0,this)},void 0,!1,void 0,this),X("div",{className:"opaca-sidebar-inner",children:[X("div",{className:"opaca-logo",title:n.appName||"OpacaCMS",children:p?X("div",{className:"opaca-logo-mini",children:(n.appName||"OpacaCMS").charAt(0).toUpperCase()},void 0,!1,void 0,this):n.appName||"OpacaCMS"},void 0,!1,void 0,this),X("nav",{className:"opaca-nav",children:[X(ir,{href:"/admin",className:`opaca-nav-item ${c==="/admin"?"active":""}`,title:"Dashboard",children:[X(Mt,{size:16},void 0,!1,void 0,this),X("span",{className:"opaca-nav-label",children:"Dashboard"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),(()=>{let v=n.collections.filter((b)=>!b.hidden).sort((b,y)=>b.admin===y.admin?0:b.admin?-1:1),g=v.filter((b)=>!b.slug.startsWith("_")),i=v.filter((b)=>b.slug.startsWith("_")),N=(b)=>{let y=`/admin/collections/${b.slug}`,l=b.label||b.slug.replace(/^_+/,"").replace(/_/g," ").replace(/\b\w/g,(h)=>h.toUpperCase()),R=b.slug==="_opaca_assets",u=b.icon&&b.icon in ba?ba[b.icon]:R?$t:Bt;return X(ir,{href:y,className:`opaca-nav-item ${c.includes(y)?"active":""}`,title:l,children:[X(u,{size:16},void 0,!1,void 0,this),X("span",{className:"opaca-nav-label",children:l},void 0,!1,void 0,this),b.admin&&!p&&X("div",{style:{width:"4px",height:"4px",borderRadius:"50%",backgroundColor:"var(--opaca-accent)",marginLeft:"auto",opacity:0.8},title:"Universal Collection"},void 0,!1,void 0,this)]},b.slug,!0,void 0,this)};return X(mn,{className:"opaca-nav-scroll",style:{flex:1},children:[g.length>0&&X(pa,{title:"Collections",isCollapsed:p,children:g.map(N)},void 0,!1,void 0,this),g.length>0&&i.length>0&&X("div",{style:{margin:"0.75rem 0.75rem"},children:X(Ao,{},void 0,!1,void 0,this)},void 0,!1,void 0,this),i.length>0&&X(pa,{title:"System Collections",isCollapsed:p,children:i.map(N)},void 0,!1,void 0,this),n.globals&&n.globals.length>0&&X(pa,{title:"Globals",isCollapsed:p,children:n.globals.map((b)=>{let y=`/admin/globals/${b.slug}`,l=b.label||b.slug.charAt(0).toUpperCase()+b.slug.slice(1),R=b.icon&&b.icon in ba?ba[b.icon]:kt;return X(ir,{href:y,className:`opaca-nav-item ${c===y?"active":""}`,title:l,children:[X(R,{size:16},void 0,!1,void 0,this),X("span",{className:"opaca-nav-label",children:l},void 0,!1,void 0,this)]},b.slug,!0,void 0,this)})},void 0,!1,void 0,this)]},void 0,!0,void 0,this)})()]},void 0,!0,void 0,this),X("div",{className:"opaca-nav-footer",children:[a&&X("div",{className:"opaca-user-profile",style:{padding:"0.75rem",borderBottom:"1px solid var(--opaca-border)",marginBottom:"0.5rem",display:"flex",alignItems:"center",gap:"0.75rem",justifyContent:p?"center":"flex-start"},title:`${a.name} (${a.email})`,children:[a.image?X("img",{src:a.image,alt:a.name,style:{width:"32px",height:"32px",borderRadius:"50%",objectFit:"cover"}},void 0,!1,void 0,this):X("div",{style:{width:"32px",height:"32px",minWidth:"32px",borderRadius:"50%",background:"var(--opaca-accent)",color:"white",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"0.75rem",fontWeight:"600"},children:a.name.charAt(0).toUpperCase()},void 0,!1,void 0,this),!p&&X("div",{style:{overflow:"hidden"},children:[X("div",{style:{fontSize:"0.8125rem",fontWeight:"500",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:a.name},void 0,!1,void 0,this),X("div",{style:{fontSize:"0.6875rem",color:"var(--opaca-text-dim)",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:a.email},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),X(ir,{href:"/admin/settings",className:`opaca-nav-item ${c==="/admin/settings"?"active":""}`,title:"Settings",children:[X(It,{size:16},void 0,!1,void 0,this),X("span",{className:"opaca-nav-label",children:"Settings"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X("button",{type:"button",onClick:o,className:"opaca-nav-item",title:"Logout",style:{width:"100%",background:"none",border:"none",cursor:"pointer",textAlign:"left",fontFamily:"inherit",fontSize:"inherit",color:"var(--opaca-error)"},children:[X(Ut,{size:16},void 0,!1,void 0,this),X("span",{className:"opaca-nav-label",children:"Logout"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),X("main",{className:"opaca-content",children:X("div",{className:"opaca-content-inner",children:r},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}import{ChevronRight as Ot,Home as St}from"lucide-react";import Ft from"react";import{jsxDEV as sr}from"react/jsx-dev-runtime";function $o({items:r}){return sr("nav",{"aria-label":"Breadcrumb",style:{display:"flex",alignItems:"center",gap:"0.5rem",marginBottom:"1.5rem",fontSize:"0.8125rem",color:"var(--opaca-text-dim)"},children:[sr(ir,{href:"/admin",style:{display:"flex",alignItems:"center",color:"inherit",textDecoration:"none",transition:"color var(--opaca-transition)"},children:sr(St,{size:14},void 0,!1,void 0,this)},void 0,!1,void 0,this),r.map((n,a)=>sr(Ft.Fragment,{children:[sr(Ot,{size:12,style:{opacity:0.5}},void 0,!1,void 0,this),n.href?sr(ir,{href:n.href,style:{color:"inherit",textDecoration:"none",transition:"color var(--opaca-transition)"},children:n.label},void 0,!1,void 0,this):sr("span",{style:{color:"var(--opaca-text)",fontWeight:"500"},children:n.label},void 0,!1,void 0,this)]},n.label||a,!0,void 0,this))]},void 0,!0,void 0,this)}import{CheckCircle as dt,Info as et,X as st,XCircle as xt}from"lucide-react";import{useEffect as Et,useState as Vt}from"react";import{jsxDEV as xr}from"react/jsx-dev-runtime";function jt({id:r,message:n,type:a,onClear:o}){let[p,m]=Vt(!1);Et(()=>{let g=setTimeout(()=>{m(!0),setTimeout(()=>o(r),200)},4000);return()=>clearTimeout(g)},[r,o]);let c=a==="success"?dt:a==="error"?xt:et,v=a==="success"?"var(--opaca-success)":a==="error"?"var(--opaca-error)":"var(--opaca-accent)";return xr("div",{className:`opaca-toast opaca-toast-${a} ${p?"exit":""}`,children:[xr(c,{size:18,style:{color:v}},void 0,!1,void 0,this),xr("span",{className:"opaca-toast-message",children:n},void 0,!1,void 0,this),xr("button",{type:"button",onClick:()=>{m(!0),setTimeout(()=>o(r),200)},style:{background:"none",border:"none",padding:"4px",marginLeft:"auto",cursor:"pointer",color:"var(--opaca-text-dim)",display:"flex",alignItems:"center",justifyContent:"center"},children:xr(st,{size:14},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function Mo({toasts:r,onClear:n}){if(r.length===0)return null;return xr("div",{className:"opaca-toast-container",children:r.map((a)=>xr(jt,{...a,onClear:n},a.id,!1,void 0,this))},void 0,!1,void 0,this)}import{useStore as up}from"@nanostores/react";import{ArrowDownAZ as vi,ArrowUpZA as Ni,ChevronLeft as li,ChevronRight as Ri,Edit2 as hi,Inbox as ui,Loader2 as zi,Image as wi,Plus as zp,Search as Ti}from"lucide-react";import{useEffect as wp,useMemo as co,useState as Dr}from"react";function Fa(r){if(!r)return"";try{let n=JSON.parse(r);if(!n.root||!n.root.children)return"";return Uo(n.root.children)}catch(n){if(typeof r==="string"&&!r.startsWith("{"))return r;return""}}function Uo(r){let n="";for(let a of r){if(a.text)n+=a.text;else if(a.children)n+=Uo(a.children);if(a.type==="paragraph"||a.type==="heading"||a.type==="listitem")n+=" "}return n.trim()}import{atom as da,computed as ea}from"nanostores";import{nanoquery as Dt}from"@nanostores/query";var[$r,_n,{invalidateKeys:W0,revalidateKeys:G0,mutateCache:K0}]=Dt({fetcher:(...r)=>{let n=r.join("");return M.get(n).json()}});var qn=da(null),rm=ea(qn,(r)=>{if(!r)return null;let n=new URLSearchParams;if(r.page)n.set("page",r.page.toString());if(r.limit)n.set("limit",r.limit.toString());if(r.sort)n.set("sort",r.sort);if(r.filter)for(let[o,p]of Object.entries(r.filter))if(typeof p==="object"&&p!==null)for(let[m,c]of Object.entries(p))n.set(`${o}[${m}]`,String(c));else n.set(`${o}[equals]`,String(p));if(r.search&&r.searchField)n.set(`${r.searchField}[like]`,`%${r.search}%`);else if(r.search)n.set("search",r.search);if(r.populate)n.set("populate",r.populate);let a=n.toString();return`api/${r.slug}${a?`?${a}`:""}`}),Io=$r([rm]),nm=da(null),am=ea(nm,(r)=>{if(!r)return null;return`api/${r.slug}/${r.id}`}),q0=$r([am]),Z0=_n(async({data:r,revalidate:n})=>{let{slug:a,id:o,body:p}=r,m=o==="create"?"post":"patch",c=`api/${a}${o==="create"?"":`/${o}`}`,v=await M[m](c,{json:p}).json();return n(`api/${a}`),n(`api/${a}/${o}`),v}),sa=da(null),om=ea(sa,(r)=>{if(!r)return null;return`api/globals/${r}`}),Oo=$r([om]),So=_n(async({data:r,revalidate:n})=>{let{slug:a,body:o}=r,p=await M.patch(`api/globals/${a}`,{json:o}).json();return n(`api/globals/${a}`),p});import{persistentAtom as pm}from"@nanostores/persistent";var Mr=pm("opaca-column-visibility",{},{encode:JSON.stringify,decode:JSON.parse});function Fo(r,n){let a=Mr.get(),o=a[r]||[],p=o.includes(n)?o.filter((m)=>m!==n):[...o,n];Mr.set({...a,[r]:p})}function eo(r,n,a){let o=Mr.get();if(o[r])return;let p=a&&a.length>0?a:n.filter((m)=>m.name).map((m)=>m.name);Mr.set({...o,[r]:p})}Tr();import{useStore as tm}from"@nanostores/react";import{Check as mm,ChevronDown as cm,Settings2 as im}from"lucide-react";import{useEffect as ym,useRef as bm,useState as gm}from"react";import{jsxDEV as hr}from"react/jsx-dev-runtime";var so=({slug:r,fields:n})=>{let[a,o]=gm(!1),p=bm(null),c=tm(Mr)[r]||[],v=n.filter((g)=>g.name);return ym(()=>{let g=(i)=>{if(p.current&&!p.current.contains(i.target))o(!1)};return document.addEventListener("mousedown",g),()=>document.removeEventListener("mousedown",g)},[]),hr("div",{className:"opaca-column-toggle",ref:p,style:{position:"relative"},children:[hr("button",{type:"button",onClick:()=>o(!a),className:"opaca-btn opaca-btn-outline",style:{display:"flex",alignItems:"center",gap:"0.5rem",padding:"0.5rem 0.75rem",fontSize:"0.875rem"},children:[hr(im,{size:16},void 0,!1,void 0,this),"Columns",hr(cm,{size:14,style:{opacity:0.5,transform:a?"rotate(180deg)":"none",transition:"transform 0.2s"}},void 0,!1,void 0,this)]},void 0,!0,void 0,this),a&&hr("div",{className:"opaca-card shadow-lg",style:{position:"absolute",top:"calc(100% + 0.5rem)",right:0,zIndex:100,minWidth:"200px",padding:"0.5rem",maxHeight:"300px",overflowY:"auto",border:"1px solid var(--opaca-border)",backgroundColor:"var(--opaca-card-bg)",borderRadius:"var(--opaca-radius)"},children:[hr("div",{style:{padding:"0.5rem",fontSize:"0.75rem",fontWeight:600,color:"var(--opaca-text-dim)",borderBottom:"1px solid var(--opaca-border)",marginBottom:"0.25rem"},children:"Toggle Columns"},void 0,!1,void 0,this),v.map((g)=>{let i=c.includes(g.name);return hr("button",{type:"button",onClick:()=>Fo(r,g.name),style:{width:"100%",display:"flex",alignItems:"center",gap:"0.75rem",padding:"0.5rem 0.75rem",fontSize:"0.875rem",textAlign:"left",background:"none",border:"none",color:i?"var(--opaca-text)":"var(--opaca-text-dim)",cursor:"pointer",borderRadius:"calc(var(--opaca-radius) - 4px)",transition:"background 0.2s"},className:"hover-bg",children:[hr("div",{style:{width:"16px",height:"16px",display:"flex",alignItems:"center",justifyContent:"center",border:i?"1px solid var(--opaca-primary)":"1px solid var(--opaca-border)",backgroundColor:i?"var(--opaca-primary)":"transparent",borderRadius:"4px",color:"white"},children:i&&hr(mm,{size:12,strokeWidth:3},void 0,!1,void 0,this)},void 0,!1,void 0,this),hr("span",{style:{flex:1},children:g.label||g.name},void 0,!1,void 0,this)]},g.name,!0,void 0,this)})]},void 0,!0,void 0,this),hr("style",{children:`
|
|
1
|
+
var Rt=Object.defineProperty;var lt=(r)=>r;function ht(r,n){this[r]=lt.bind(null,n)}var up=(r,n)=>{for(var a in n)Rt(r,a,{get:n[a],enumerable:!0,configurable:!0,set:ht.bind(n,a)})};var Ha=(r,n)=>()=>(r&&(n=r(r=0)),n);import{createAuthClient as ut}from"better-auth/client";import{adminClient as zt}from"better-auth/client/plugins";var jn=null,zp=null,wp=(r)=>{if(!r||!r.startsWith("http"))return;let a=r.replace(/\/$/,"")+"/api/auth";if(jn&&zp===a)return;zp=a,jn=ut({baseURL:a,autoRefresh:!0,fetchOptions:{credentials:"include"},plugins:[zt()]})},pn;var Dn=Ha(()=>{pn=new Proxy({},{get(r,n){if(!jn)throw Error("Auth client not configured. Did you provide a valid serverUrl?");return jn[n]}})});var Tp={};up(Tp,{toggleSidebar:()=>fa,notify:()=>S,clearToast:()=>La,$toasts:()=>dr,$isSidebarCollapsed:()=>Hn});import{persistentAtom as wt}from"@nanostores/persistent";import{atom as Tt}from"nanostores";function fa(){Hn.set(!Hn.get())}function S(r,n="success"){let a=Math.random().toString(36).substring(2,9);dr.set([...dr.get(),{id:a,message:r,type:n}])}function La(r){dr.set(dr.get().filter((n)=>n.id!==r))}var dr,Hn;var Tr=Ha(()=>{dr=Tt([]),Hn=wt("opaca-sidebar-collapsed",!1,{encode:JSON.stringify,decode:JSON.parse})});var Lp={};up(Lp,{syncSession:()=>ra,logout:()=>Ca,login:()=>Wa,$user:()=>Ht,$session:()=>er,$isAuthenticated:()=>ft,$isAuthPending:()=>Hr});import{atom as Hp,computed as fp}from"nanostores";async function ra(){Hr.set(!0);try{let r=await pn.getSession();er.set(r.data)}catch(r){console.error("[OpacaCMS] Failed to sync session:",r)}finally{Hr.set(!1)}}async function Wa(r){Hr.set(!0);try{let n=await pn.signIn.email({email:r.email,password:r.password});if(n.error)throw Error(n.error.message||"Invalid credentials");return await ra(),S("Logged in successfully","success"),n}catch(n){throw S(n instanceof Error?n.message:"Login failed","error"),n}finally{Hr.set(!1)}}async function Ca(){Hr.set(!0);try{await pn.signOut(),er.set(null),S("Logged out successfully")}catch{S("Logout failed","error")}finally{Hr.set(!1)}}var er,Hr,Ht,ft;var Ga=Ha(()=>{Dn();Tr();er=Hp(null),Hr=Hp(!0),Ht=fp(er,(r)=>r?.user??null),ft=fp(er,(r)=>!!r)});import ki from"@r2wc/react-to-web-component";import{useStore as wn}from"@nanostores/react";import{Loader2 as Xi}from"lucide-react";import{useCallback as Qi,useEffect as Ai,useState as Bi}from"react";import Lt from"ky";var fn=null,na=null,Wp=(r)=>{if(!r||!r.startsWith("http"))return;let a=r.replace(/\/$/,"");if(fn&&na===a)return;na=a,fn=Lt.create({prefixUrl:a,credentials:"include",retry:0,hooks:{afterResponse:[async(p,o,m)=>{if(m.status===401||m.status===403)try{let{$session:c}=await Promise.resolve().then(() => (Ga(),Lp)),{notify:v}=await Promise.resolve().then(() => (Tr(),Tp));c.set(null),v("Session expired. Please log in again.","error")}catch(c){}}]}})},cr=()=>{if(!na)throw Error("API client not configured. Did you provide a valid serverUrl?");return na},M=new Proxy({},{get(r,n){if(!fn)throw Error("API client not configured. Did you provide a valid serverUrl?");if(!fn)throw Error("API client not configured");let a=fn;if(a)return a[n];return}});Dn();import{createRouter as Wt}from"@nanostores/router";var Pr=Wt({dashboard:"/admin",collections:"/admin/collections/:slug",document:"/admin/collections/:slug/:id",globals:"/admin/globals/:slug",settings:"/admin/settings"});Ga();import{atom as aa}from"nanostores";var lr=aa(null),Ka=aa(!1),nb=aa(!1),ab=aa(!1);function Ja(r){lr.set(r)}function pa(r){Ka.set(r)}Tr();import{useStore as Bp}from"@nanostores/react";import*as ba from"lucide-react";import{ChevronLeft as Qt,ChevronRight as At,Database as Bt,Globe as $t,Image as kt,LayoutDashboard as Mt,LogOut as Ut,Settings as It}from"lucide-react";Tr();import{jsxDEV as Ct}from"react/jsx-dev-runtime";function yr({href:r,params:n,search:a,children:p,onClick:o,...m}){return Ct("a",{href:r,onClick:(v)=>{if(o)o(v);if(!v.defaultPrevented&&v.button===0&&!v.metaKey&&!v.ctrlKey&&!v.shiftKey&&!v.altKey&&!m.target)if(v.preventDefault(),r.startsWith("/admin"))Pr.open(r);else window.location.href=r},...m,children:p},void 0,!1,void 0,this)}import*as Cp from"react";function P(...r){return r.filter(Boolean).join(" ")}import{jsxDEV as _r}from"react/jsx-dev-runtime";var oa=({title:r,children:n,defaultOpen:a=!0,className:p,isCollapsed:o=!1})=>{let[m,c]=Cp.useState(a);return _r("div",{className:P("opaca-sidebar-accordion",p),children:[_r("button",{type:"button",className:"opaca-sidebar-accordion-trigger",onClick:()=>c(!m),"aria-expanded":m,style:{opacity:o?0:1,pointerEvents:o?"none":"auto"},title:r,children:[_r("span",{className:"opaca-sidebar-accordion-title",children:r},void 0,!1,void 0,this),_r("svg",{className:"opaca-sidebar-accordion-icon",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:[_r("title",{children:"Toggle accordion"},void 0,!1,void 0,this),_r("polyline",{points:"6 9 12 15 18 9"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),_r("div",{className:"opaca-sidebar-accordion-content","data-state":m?"open":"closed",children:_r("div",{className:"opaca-sidebar-accordion-content-inner",children:n},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import*as Gp from"react";import{jsxDEV as Ya}from"react/jsx-dev-runtime";var Pa=Gp.forwardRef(({className:r,label:n,children:a,...p},o)=>{return Ya("div",{ref:o,className:P("opaca-ui-blocks",r),...p,children:[n&&Ya("div",{style:{marginBottom:"1.25rem",fontSize:"0.75rem",fontWeight:500,color:"var(--opaca-text-muted)",textTransform:"uppercase",letterSpacing:"0.03em"},children:n},void 0,!1,void 0,this),Ya("div",{style:{display:"flex",flexDirection:"column",gap:"1.5rem"},children:a},void 0,!1,void 0,this)]},void 0,!0,void 0,this)});Pa.displayName="Blocks";import*as Kp from"react";import{jsxDEV as Gt}from"react/jsx-dev-runtime";var d=Kp.forwardRef(({className:r,variant:n="default",size:a="default",...p},o)=>{return Gt("button",{ref:o,className:P("opaca-ui-btn",`opaca-ui-btn-${n}`,`opaca-ui-btn-size-${a}`,r),...p},void 0,!1,void 0,this)});d.displayName="Button";import*as ar from"react";import{jsxDEV as on}from"react/jsx-dev-runtime";var _a=ar.createContext({}),qa=ar.forwardRef(({className:r,open:n,defaultOpen:a,onOpenChange:p,disabled:o,children:m,...c},v)=>{let[g,y]=ar.useState(a??!1),N=n!==void 0,b=N?n:g,i=ar.useCallback((l)=>{if(!N)y(l);if(p)p(l)},[N,p]),R=ar.useMemo(()=>({open:b,onOpenChange:i,disabled:o}),[b,i,o]);return on(_a.Provider,{value:R,children:on("div",{ref:v,className:P("opaca-ui-collapsible",r),...c,children:m},void 0,!1,void 0,this)},void 0,!1,void 0,this)});qa.displayName="Collapsible";var Za=ar.forwardRef(({className:r,disabled:n,children:a,...p},o)=>{let m=ar.useContext(_a),c=n||m.disabled,v=m.open,g=ar.useCallback((y)=>{if(!c&&m.onOpenChange)m.onOpenChange(!v);if(p.onClick)p.onClick(y)},[c,v,m.onOpenChange,p.onClick]);return on("button",{type:"button","aria-expanded":v,disabled:c,onClick:g,ref:o,className:P("opaca-ui-collapsible-trigger",r),...p,children:[a,on("svg",{className:"opaca-ui-collapsible-icon",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",children:on("polyline",{points:"6 9 12 15 18 9"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)});Za.displayName="CollapsibleTrigger";var Xa=ar.forwardRef(({className:r,children:n,...a},p)=>{let m=ar.useContext(_a).open;if(!m)return null;return on("div",{"data-state":m?"open":"closed",ref:p,className:P("opaca-ui-collapsible-content",r),...a,children:n},void 0,!1,void 0,this)});Xa.displayName="CollapsibleContent";import{createPortal as Kt}from"react-dom";import{jsxDEV as qr}from"react/jsx-dev-runtime";function Ln({open:r,onOpenChange:n,children:a}){if(!r)return null;return Kt(qr("div",{className:"opaca-ui-dialog-portal",children:[qr("button",{type:"button",className:"opaca-ui-dialog-overlay",onClick:()=>n(!1),tabIndex:-1,"aria-hidden":"true"},void 0,!1,void 0,this),qr("div",{className:"opaca-ui-dialog-wrapper",children:a},void 0,!1,void 0,this)]},void 0,!0,void 0,this),document.body)}function Wn({children:r,className:n}){return qr("div",{className:P("opaca-ui-dialog-content",n),children:r},void 0,!1,void 0,this)}function Cn({children:r,className:n}){return qr("div",{className:P("opaca-ui-dialog-header",n),children:r},void 0,!1,void 0,this)}function Gn({children:r,className:n}){return qr("h2",{className:P("opaca-ui-dialog-title",n),children:r},void 0,!1,void 0,this)}function ta({children:r,className:n}){return qr("p",{className:P("opaca-ui-dialog-description",n),children:r},void 0,!1,void 0,this)}function Kn({children:r,className:n}){return qr("div",{className:P("opaca-ui-dialog-footer",n),children:r},void 0,!1,void 0,this)}import*as Yp from"react";import{jsxDEV as Jp}from"react/jsx-dev-runtime";var Qa=Yp.forwardRef(({className:r,label:n,children:a,...p},o)=>{return Jp("div",{ref:o,className:P("opaca-ui-group",r),...p,children:[n&&Jp("h3",{className:"opaca-ui-group-header",children:n},void 0,!1,void 0,this),a]},void 0,!0,void 0,this)});Qa.displayName="Group";import*as Pp from"react";import{jsxDEV as Jt}from"react/jsx-dev-runtime";var fr=Pp.forwardRef(({className:r,type:n,...a},p)=>{return Jt("input",{type:n,className:P("opaca-ui-input",r),ref:p,...a},void 0,!1,void 0,this)});fr.displayName="Input";import*as _p from"react";import{jsxDEV as tn}from"react/jsx-dev-runtime";var Aa=_p.forwardRef(({className:r,label:n,collection:a,children:p,...o},m)=>{return tn("div",{ref:m,className:P("opaca-ui-join",r),...o,children:[n&&tn("div",{style:{display:"block",marginBottom:"0.5rem",fontSize:"0.75rem",fontWeight:500,color:"var(--opaca-text-muted)",textTransform:"uppercase",letterSpacing:"0.03em"},children:n},void 0,!1,void 0,this),tn("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"0.75rem",border:"1px solid var(--opaca-border)",borderRadius:"var(--opaca-radius)",backgroundColor:"rgba(255, 255, 255, 0.02)",color:"var(--opaca-text-dim)",fontSize:"0.8125rem"},children:[tn("span",{children:["Virtually joined from: ",tn("strong",{children:a},void 0,!1,void 0,this)]},void 0,!0,void 0,this),tn("span",{style:{fontSize:"0.7rem",opacity:0.5},children:["On: ",o.on||"dynamic"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)});Aa.displayName="Join";import*as qp from"react";import{jsxDEV as Yt}from"react/jsx-dev-runtime";var Zr=qp.forwardRef(({className:r,...n},a)=>Yt("label",{ref:a,className:P("opaca-ui-label",r),...n},void 0,!1,void 0,this));Zr.displayName="Label";import*as Lr from"react";import{jsxDEV as ma}from"react/jsx-dev-runtime";var Ba=Lr.forwardRef(({className:r,value:n,onValueChange:a,disabled:p,name:o,children:m,...c},v)=>{let g=Lr.useMemo(()=>({value:n,onValueChange:a,disabled:p,name:o}),[n,a,p,o]);return ma(Zp.Provider,{value:g,children:ma("div",{ref:v,className:P("opaca-ui-radio-group",r),...c,children:m},void 0,!1,void 0,this)},void 0,!1,void 0,this)});Ba.displayName="RadioGroup";var Zp=Lr.createContext({}),$a=Lr.forwardRef(({className:r,value:n,disabled:a,id:p,...o},m)=>{let c=Lr.useContext(Zp),v=a||c.disabled,g=c.value===n,y=c.name;return ma("div",{className:"opaca-ui-radio-item",children:ma("input",{type:"radio",ref:m,id:p,name:y,value:n,checked:g,disabled:v,onChange:()=>{if(!v&&c.onValueChange)c.onValueChange(n)},className:P(r),...o},void 0,!1,void 0,this)},void 0,!1,void 0,this)});$a.displayName="RadioGroupItem";import*as Xp from"react";import{jsxDEV as Jn}from"react/jsx-dev-runtime";var ka=Xp.forwardRef(({className:r,label:n,relationTo:a,children:p,onClick:o,...m},c)=>{return Jn("div",{ref:c,className:P("opaca-ui-relationship",r),...m,onClick:o,style:{cursor:o?"pointer":"default",...m.style},children:[n&&Jn("div",{style:{display:"block",marginBottom:"0.5rem",fontSize:"0.75rem",fontWeight:500,color:"var(--opaca-text-muted)",textTransform:"uppercase",letterSpacing:"0.03em"},children:n},void 0,!1,void 0,this),Jn("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"0.75rem",border:"1px solid var(--opaca-border)",borderRadius:"var(--opaca-radius)",backgroundColor:"rgba(255, 255, 255, 0.02)",transition:"all 0.2s ease",fontSize:"0.8125rem"},className:"opaca-ui-relationship-trigger",children:[Jn("span",{children:p||`Select ${a}...`},void 0,!1,void 0,this),Jn("span",{style:{fontSize:"0.7rem",opacity:0.5},children:["Link: ",a]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)});ka.displayName="Relationship";import{jsxDEV as Pt}from"react/jsx-dev-runtime";function mn({children:r,className:n,maxHeight:a,...p}){return Pt("div",{className:P("opaca-scroll-area",n),style:{maxHeight:a,overflowY:"auto",...p.style},...p,children:r},void 0,!1,void 0,this)}import{ChevronDown as _t}from"lucide-react";import*as pr from"react";import{createPortal as qt}from"react-dom";import{jsxDEV as Nr}from"react/jsx-dev-runtime";var Yn=pr.createContext(null);function cn({value:r,onValueChange:n,children:a,open:p,onOpenChange:o}){let[m,c]=pr.useState(!1),v=p??m,g=o??c,y=pr.useRef(null);return Nr(Yn.Provider,{value:{value:r,onValueChange:n,open:v,setOpen:g,triggerRef:y},children:Nr("div",{className:"opaca-ui-select",children:a},void 0,!1,void 0,this)},void 0,!1,void 0,this)}function yn({children:r,className:n}){let a=pr.useContext(Yn);if(!a)throw Error("SelectTrigger must be used within a Select");return Nr("button",{ref:a.triggerRef,type:"button",className:P("opaca-ui-select-trigger",n),onClick:()=>a.setOpen(!a.open),"data-state":a.open?"open":"closed",children:[Nr("span",{className:"trigger-content",children:r},void 0,!1,void 0,this),Nr(_t,{size:14,className:"trigger-icon"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function bn({placeholder:r}){let n=pr.useContext(Yn);if(!n)throw Error("SelectValue must be used within a Select");return Nr("span",{className:!n.value?"trigger-placeholder":"",children:n.value||r},void 0,!1,void 0,this)}function gn({children:r,className:n}){let a=pr.useContext(Yn);if(!a)throw Error("SelectContent must be used within a Select");let[p,o]=pr.useState({top:0,left:0,width:0}),m=pr.useCallback(()=>{if(a.open&&a.triggerRef.current){let c=a.triggerRef.current.getBoundingClientRect();o({top:c.bottom,left:c.left,width:c.width})}},[a.open,a.triggerRef]);if(pr.useEffect(()=>{if(a.open)return m(),window.addEventListener("scroll",m,!0),window.addEventListener("resize",m),()=>{window.removeEventListener("scroll",m,!0),window.removeEventListener("resize",m)}},[a.open,m]),!a.open)return null;return qt(Nr("div",{className:"opaca-ui-select-portal",style:{top:p.top+4,left:p.left,width:p.width},children:[Nr("button",{type:"button",className:"opaca-ui-select-content-overlay",style:{position:"fixed",inset:0,zIndex:-1,background:"transparent",border:"none",padding:0,width:"100%",height:"100%",cursor:"default"},onClick:()=>a.setOpen(!1),tabIndex:-1,"aria-hidden":"true"},void 0,!1,void 0,this),Nr("div",{className:P("opaca-ui-select-content",n),children:r},void 0,!1,void 0,this)]},void 0,!0,void 0,this),document.body)}function Xr({value:r,children:n,className:a}){let p=pr.useContext(Yn);if(!p)throw Error("SelectItem must be used within a Select");let o=p.value===r;return Nr("button",{type:"button",className:P("opaca-ui-select-item",a),"data-selected":o,onClick:()=>{p.onValueChange?.(r),p.setOpen(!1)},children:n},void 0,!1,void 0,this)}function ca({children:r}){return Nr("div",{className:"opaca-ui-select-label",children:r},void 0,!1,void 0,this)}function ya(){return Nr("div",{className:"opaca-ui-select-separator"},void 0,!1,void 0,this)}import{jsxDEV as Zt}from"react/jsx-dev-runtime";var Qp=({className:r="",orientation:n="horizontal",margin:a})=>{return Zt("div",{className:`opaca-separator ${n} ${r}`,style:a?{margin:a}:void 0,role:"none"},void 0,!1,void 0,this)};import{createPortal as Xt}from"react-dom";import{jsxDEV as gr}from"react/jsx-dev-runtime";function Qr({open:r,onOpenChange:n,children:a}){if(!r)return null;return Xt(gr("div",{className:"opaca-ui-sheet-portal",children:[gr("button",{type:"button",className:"opaca-ui-sheet-overlay",onClick:()=>n(!1),tabIndex:-1,"aria-hidden":"true"},void 0,!1,void 0,this),gr("div",{className:"opaca-ui-sheet-wrapper",children:a},void 0,!1,void 0,this)]},void 0,!0,void 0,this),document.body)}function Ar({children:r,className:n,onClose:a}){return gr("div",{className:P("opaca-ui-sheet-content",n),children:[r,a&&gr("button",{type:"button",onClick:a,className:"opaca-ui-sheet-close",children:[gr("svg",{"aria-hidden":"true",xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"opaca-ui-sheet-close-icon",children:[gr("line",{x1:"18",x2:"6",y1:"6",y2:"18"},void 0,!1,void 0,this),gr("line",{x1:"6",x2:"18",y1:"6",y2:"18"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),gr("span",{className:"opaca-ui-sr-only",children:"Close"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}function Br({children:r,className:n}){return gr("div",{className:P("opaca-ui-sheet-header",n),children:r},void 0,!1,void 0,this)}function $r({children:r,className:n}){return gr("h2",{className:P("opaca-ui-sheet-title",n),children:r},void 0,!1,void 0,this)}function ia({children:r,className:n}){return gr("p",{className:P("opaca-ui-sheet-description",n),children:r},void 0,!1,void 0,this)}function Ap({children:r,className:n}){return gr("div",{className:P("opaca-ui-sheet-footer",n),children:r},void 0,!1,void 0,this)}import*as or from"react";import{jsxDEV as Pn}from"react/jsx-dev-runtime";var Ma=or.createContext({}),Ua=or.forwardRef(({className:r,value:n,defaultValue:a,onValueChange:p,children:o,...m},c)=>{let[v,g]=or.useState(a),y=n!==void 0,N=y?n:v,b=or.useCallback((R)=>{if(!y)g(R);if(p)p(R)},[y,p]),i=or.useMemo(()=>({value:N,onValueChange:b}),[N,b]);return Pn(Ma.Provider,{value:i,children:Pn("div",{ref:c,className:P("opaca-ui-tabs",r),...m,children:o},void 0,!1,void 0,this)},void 0,!1,void 0,this)});Ua.displayName="Tabs";var Ia=or.forwardRef(({className:r,...n},a)=>Pn("div",{ref:a,className:P("opaca-ui-tabs-list",r),role:"tablist",...n},void 0,!1,void 0,this));Ia.displayName="TabsList";var Oa=or.forwardRef(({className:r,value:n,disabled:a,...p},o)=>{let m=or.useContext(Ma),c=m.value===n;return Pn("button",{type:"button",role:"tab","aria-selected":c,"data-state":c?"active":"inactive",disabled:a,onClick:()=>{if(!a&&m.onValueChange)m.onValueChange(n)},ref:o,className:P("opaca-ui-tabs-trigger",r),...p},void 0,!1,void 0,this)});Oa.displayName="TabsTrigger";var Sa=or.forwardRef(({className:r,value:n,...a},p)=>{let m=or.useContext(Ma).value===n;if(!m)return null;return Pn("div",{role:"tabpanel","data-state":m?"active":"inactive",ref:p,className:P("opaca-ui-tabs-content",r),...a},void 0,!1,void 0,this)});Sa.displayName="TabsContent";import{jsxDEV as X}from"react/jsx-dev-runtime";function $p({children:r,config:n,user:a,onLogout:p}){let o=Bp(Hn),c=Bp(Pr)?.path||"/admin";return X("div",{className:"opaca-admin",children:[X("aside",{className:`opaca-sidebar ${o?"collapsed":""}`,children:[X("button",{type:"button",className:"opaca-sidebar-toggle",onClick:fa,title:o?"Expand Sidebar":"Collapse Sidebar",children:o?X(At,{size:14},void 0,!1,void 0,this):X(Qt,{size:14},void 0,!1,void 0,this)},void 0,!1,void 0,this),X("div",{className:"opaca-sidebar-inner",children:[X("div",{className:"opaca-logo",title:n.appName||"OpacaCMS",children:o?X("div",{className:"opaca-logo-mini",children:(n.appName||"OpacaCMS").charAt(0).toUpperCase()},void 0,!1,void 0,this):n.appName||"OpacaCMS"},void 0,!1,void 0,this),X("nav",{className:"opaca-nav",children:[X(yr,{href:"/admin",className:`opaca-nav-item ${c==="/admin"?"active":""}`,title:"Dashboard",children:[X(Mt,{size:16},void 0,!1,void 0,this),X("span",{className:"opaca-nav-label",children:"Dashboard"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),(()=>{let v=n.collections.filter((b)=>!b.hidden).sort((b,i)=>b.admin===i.admin?0:b.admin?-1:1),g=v.filter((b)=>!b.slug.startsWith("_")),y=v.filter((b)=>b.slug.startsWith("_")),N=(b)=>{let i=`/admin/collections/${b.slug}`,R=b.label||b.slug.replace(/^_+/,"").replace(/_/g," ").replace(/\b\w/g,(h)=>h.toUpperCase()),l=b.slug==="_opaca_assets",u=b.icon&&b.icon in ba?ba[b.icon]:l?kt:Bt;return X(yr,{href:i,className:`opaca-nav-item ${c.includes(i)?"active":""}`,title:R,children:[X(u,{size:16},void 0,!1,void 0,this),X("span",{className:"opaca-nav-label",children:R},void 0,!1,void 0,this),b.admin&&!o&&X("div",{style:{width:"4px",height:"4px",borderRadius:"50%",backgroundColor:"var(--opaca-accent)",marginLeft:"auto",opacity:0.8},title:"Universal Collection"},void 0,!1,void 0,this)]},b.slug,!0,void 0,this)};return X(mn,{className:"opaca-nav-scroll",style:{flex:1},children:[g.length>0&&X(oa,{title:"Collections",isCollapsed:o,children:g.map(N)},void 0,!1,void 0,this),g.length>0&&y.length>0&&X("div",{style:{margin:"0.75rem 0.75rem"},children:X(Qp,{},void 0,!1,void 0,this)},void 0,!1,void 0,this),y.length>0&&X(oa,{title:"System Collections",isCollapsed:o,children:y.map(N)},void 0,!1,void 0,this),n.globals&&n.globals.length>0&&X(oa,{title:"Globals",isCollapsed:o,children:n.globals.map((b)=>{let i=`/admin/globals/${b.slug}`,R=b.label||b.slug.charAt(0).toUpperCase()+b.slug.slice(1),l=b.icon&&b.icon in ba?ba[b.icon]:$t;return X(yr,{href:i,className:`opaca-nav-item ${c===i?"active":""}`,title:R,children:[X(l,{size:16},void 0,!1,void 0,this),X("span",{className:"opaca-nav-label",children:R},void 0,!1,void 0,this)]},b.slug,!0,void 0,this)})},void 0,!1,void 0,this)]},void 0,!0,void 0,this)})()]},void 0,!0,void 0,this),X("div",{className:"opaca-nav-footer",children:[a&&X("div",{className:"opaca-user-profile",style:{padding:"0.75rem",borderBottom:"1px solid var(--opaca-border)",marginBottom:"0.5rem",display:"flex",alignItems:"center",gap:"0.75rem",justifyContent:o?"center":"flex-start"},title:`${a.name} (${a.email})`,children:[a.image?X("img",{src:a.image,alt:a.name,style:{width:"32px",height:"32px",borderRadius:"50%",objectFit:"cover"}},void 0,!1,void 0,this):X("div",{style:{width:"32px",height:"32px",minWidth:"32px",borderRadius:"50%",background:"var(--opaca-accent)",color:"white",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"0.75rem",fontWeight:"600"},children:a.name.charAt(0).toUpperCase()},void 0,!1,void 0,this),!o&&X("div",{style:{overflow:"hidden"},children:[X("div",{style:{fontSize:"0.8125rem",fontWeight:"500",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:a.name},void 0,!1,void 0,this),X("div",{style:{fontSize:"0.6875rem",color:"var(--opaca-text-dim)",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:a.email},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),X(yr,{href:"/admin/settings",className:`opaca-nav-item ${c==="/admin/settings"?"active":""}`,title:"Settings",children:[X(It,{size:16},void 0,!1,void 0,this),X("span",{className:"opaca-nav-label",children:"Settings"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X("button",{type:"button",onClick:p,className:"opaca-nav-item",title:"Logout",style:{width:"100%",background:"none",border:"none",cursor:"pointer",textAlign:"left",fontFamily:"inherit",fontSize:"inherit",color:"var(--opaca-error)"},children:[X(Ut,{size:16},void 0,!1,void 0,this),X("span",{className:"opaca-nav-label",children:"Logout"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),X("main",{className:"opaca-content",children:X("div",{className:"opaca-content-inner",children:r},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}import{ChevronRight as Ot,Home as St}from"lucide-react";import Ft from"react";import{jsxDEV as sr}from"react/jsx-dev-runtime";function kp({items:r}){return sr("nav",{"aria-label":"Breadcrumb",style:{display:"flex",alignItems:"center",gap:"0.5rem",marginBottom:"1.5rem",fontSize:"0.8125rem",color:"var(--opaca-text-dim)"},children:[sr(yr,{href:"/admin",style:{display:"flex",alignItems:"center",color:"inherit",textDecoration:"none",transition:"color var(--opaca-transition)"},children:sr(St,{size:14},void 0,!1,void 0,this)},void 0,!1,void 0,this),r.map((n,a)=>sr(Ft.Fragment,{children:[sr(Ot,{size:12,style:{opacity:0.5}},void 0,!1,void 0,this),n.href?sr(yr,{href:n.href,style:{color:"inherit",textDecoration:"none",transition:"color var(--opaca-transition)"},children:n.label},void 0,!1,void 0,this):sr("span",{style:{color:"var(--opaca-text)",fontWeight:"500"},children:n.label},void 0,!1,void 0,this)]},n.label||a,!0,void 0,this))]},void 0,!0,void 0,this)}import{CheckCircle as dt,Info as et,X as st,XCircle as xt}from"lucide-react";import{useEffect as Et,useState as Vt}from"react";import{jsxDEV as xr}from"react/jsx-dev-runtime";function jt({id:r,message:n,type:a,onClear:p}){let[o,m]=Vt(!1);Et(()=>{let g=setTimeout(()=>{m(!0),setTimeout(()=>p(r),200)},4000);return()=>clearTimeout(g)},[r,p]);let c=a==="success"?dt:a==="error"?xt:et,v=a==="success"?"var(--opaca-success)":a==="error"?"var(--opaca-error)":"var(--opaca-accent)";return xr("div",{className:`opaca-toast opaca-toast-${a} ${o?"exit":""}`,children:[xr(c,{size:18,style:{color:v}},void 0,!1,void 0,this),xr("span",{className:"opaca-toast-message",children:n},void 0,!1,void 0,this),xr("button",{type:"button",onClick:()=>{m(!0),setTimeout(()=>p(r),200)},style:{background:"none",border:"none",padding:"4px",marginLeft:"auto",cursor:"pointer",color:"var(--opaca-text-dim)",display:"flex",alignItems:"center",justifyContent:"center"},children:xr(st,{size:14},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function Mp({toasts:r,onClear:n}){if(r.length===0)return null;return xr("div",{className:"opaca-toast-container",children:r.map((a)=>xr(jt,{...a,onClear:n},a.id,!1,void 0,this))},void 0,!1,void 0,this)}import{useStore as ho}from"@nanostores/react";import{ArrowDownAZ as vy,ArrowUpZA as Ny,ChevronLeft as Ry,ChevronRight as ly,Edit2 as hy,Inbox as uy,Loader2 as zy,Image as wy,Plus as uo,Search as Ty}from"lucide-react";import{useEffect as zo,useMemo as cp,useState as Dr}from"react";function Fa(r){if(!r)return"";try{let n=JSON.parse(r);if(!n.root||!n.root.children)return"";return Up(n.root.children)}catch(n){if(typeof r==="string"&&!r.startsWith("{"))return r;return""}}function Up(r){let n="";for(let a of r){if(a.text)n+=a.text;else if(a.children)n+=Up(a.children);if(a.type==="paragraph"||a.type==="heading"||a.type==="listitem")n+=" "}return n.trim()}import{atom as da,computed as ea}from"nanostores";import{nanoquery as Dt}from"@nanostores/query";var[kr,_n,{invalidateKeys:Cg,revalidateKeys:Gg,mutateCache:Kg}]=Dt({fetcher:(...r)=>{let n=r.join("");return M.get(n).json()}});var qn=da(null),rm=ea(qn,(r)=>{if(!r)return null;let n=new URLSearchParams;if(r.page)n.set("page",r.page.toString());if(r.limit)n.set("limit",r.limit.toString());if(r.sort)n.set("sort",r.sort);if(r.filter)for(let[p,o]of Object.entries(r.filter))if(typeof o==="object"&&o!==null)for(let[m,c]of Object.entries(o))n.set(`${p}[${m}]`,String(c));else n.set(`${p}[equals]`,String(o));if(r.search&&r.searchField)n.set(`${r.searchField}[like]`,`%${r.search}%`);else if(r.search)n.set("search",r.search);if(r.populate)n.set("populate",r.populate);let a=n.toString();return`api/${r.slug}${a?`?${a}`:""}`}),Ip=kr([rm]),nm=da(null),am=ea(nm,(r)=>{if(!r)return null;return`api/${r.slug}/${r.id}`}),qg=kr([am]),Zg=_n(async({data:r,revalidate:n})=>{let{slug:a,id:p,body:o}=r,m=p==="create"?"post":"patch",c=`api/${a}${p==="create"?"":`/${p}`}`,v=await M[m](c,{json:o}).json();return n(`api/${a}`),n(`api/${a}/${p}`),v}),sa=da(null),pm=ea(sa,(r)=>{if(!r)return null;return`api/globals/${r}`}),Op=kr([pm]),Sp=_n(async({data:r,revalidate:n})=>{let{slug:a,body:p}=r,o=await M.patch(`api/globals/${a}`,{json:p}).json();return n(`api/globals/${a}`),o});import{persistentAtom as om}from"@nanostores/persistent";var Mr=om("opaca-column-visibility",{},{encode:JSON.stringify,decode:JSON.parse});function Fp(r,n){let a=Mr.get(),p=a[r]||[],o=p.includes(n)?p.filter((m)=>m!==n):[...p,n];Mr.set({...a,[r]:o})}function dp(r,n,a){let p=Mr.get();if(p[r])return;let o=a&&a.length>0?a:n.filter((m)=>m.name).map((m)=>m.name);Mr.set({...p,[r]:o})}Tr();import{useStore as tm}from"@nanostores/react";import{Check as mm,ChevronDown as cm,Settings2 as ym}from"lucide-react";import{useEffect as im,useRef as bm,useState as gm}from"react";import{jsxDEV as hr}from"react/jsx-dev-runtime";var ep=({slug:r,fields:n})=>{let[a,p]=gm(!1),o=bm(null),c=tm(Mr)[r]||[],v=n.filter((g)=>g.name);return im(()=>{let g=(y)=>{if(o.current&&!o.current.contains(y.target))p(!1)};return document.addEventListener("mousedown",g),()=>document.removeEventListener("mousedown",g)},[]),hr("div",{className:"opaca-column-toggle",ref:o,style:{position:"relative"},children:[hr("button",{type:"button",onClick:()=>p(!a),className:"opaca-btn opaca-btn-outline",style:{display:"flex",alignItems:"center",gap:"0.5rem",padding:"0.5rem 0.75rem",fontSize:"0.875rem"},children:[hr(ym,{size:16},void 0,!1,void 0,this),"Columns",hr(cm,{size:14,style:{opacity:0.5,transform:a?"rotate(180deg)":"none",transition:"transform 0.2s"}},void 0,!1,void 0,this)]},void 0,!0,void 0,this),a&&hr("div",{className:"opaca-card shadow-lg",style:{position:"absolute",top:"calc(100% + 0.5rem)",right:0,zIndex:100,minWidth:"200px",padding:"0.5rem",maxHeight:"300px",overflowY:"auto",border:"1px solid var(--opaca-border)",backgroundColor:"var(--opaca-card-bg)",borderRadius:"var(--opaca-radius)"},children:[hr("div",{style:{padding:"0.5rem",fontSize:"0.75rem",fontWeight:600,color:"var(--opaca-text-dim)",borderBottom:"1px solid var(--opaca-border)",marginBottom:"0.25rem"},children:"Toggle Columns"},void 0,!1,void 0,this),v.map((g)=>{let y=c.includes(g.name);return hr("button",{type:"button",onClick:()=>Fp(r,g.name),style:{width:"100%",display:"flex",alignItems:"center",gap:"0.75rem",padding:"0.5rem 0.75rem",fontSize:"0.875rem",textAlign:"left",background:"none",border:"none",color:y?"var(--opaca-text)":"var(--opaca-text-dim)",cursor:"pointer",borderRadius:"calc(var(--opaca-radius) - 4px)",transition:"background 0.2s"},className:"hover-bg",children:[hr("div",{style:{width:"16px",height:"16px",display:"flex",alignItems:"center",justifyContent:"center",border:y?"1px solid var(--opaca-primary)":"1px solid var(--opaca-border)",backgroundColor:y?"var(--opaca-primary)":"transparent",borderRadius:"4px",color:"white"},children:y&&hr(mm,{size:12,strokeWidth:3},void 0,!1,void 0,this)},void 0,!1,void 0,this),hr("span",{style:{flex:1},children:g.label||g.name},void 0,!1,void 0,this)]},g.name,!0,void 0,this)})]},void 0,!0,void 0,this),hr("style",{children:`
|
|
2
2
|
.hover-bg:hover {
|
|
3
3
|
background-color: var(--opaca-panel-bg) !important;
|
|
4
4
|
}
|
|
5
|
-
`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import{Edit2 as ai,Save as oi,X as pi}from"lucide-react";import{useEffect as ti,useState as oo}from"react";import{CodeNode as Bc}from"@lexical/code";import{AutoLinkNode as kc,LinkNode as $c}from"@lexical/link";import{ListItemNode as Mc,ListNode as Uc}from"@lexical/list";import{MarkNode as Ic}from"@lexical/mark";import{LexicalComposer as Oc}from"@lexical/react/LexicalComposer";import{ContentEditable as Sc}from"@lexical/react/LexicalContentEditable";import{LexicalErrorBoundary as Fc}from"@lexical/react/LexicalErrorBoundary";import{HistoryPlugin as dc}from"@lexical/react/LexicalHistoryPlugin";import{LinkPlugin as ec}from"@lexical/react/LexicalLinkPlugin";import{ListPlugin as sc}from"@lexical/react/LexicalListPlugin";import{OnChangePlugin as xc}from"@lexical/react/LexicalOnChangePlugin";import{RichTextPlugin as Ec}from"@lexical/react/LexicalRichTextPlugin";import{HeadingNode as Vc,QuoteNode as jc}from"@lexical/rich-text";import{useState as Dc}from"react";import{DecoratorNode as zm}from"lexical";import{useLexicalComposerContext as vm}from"@lexical/react/LexicalComposerContext";import{useLexicalNodeSelection as Nm}from"@lexical/react/useLexicalNodeSelection";import{$getNodeByKey as xo}from"lexical";import{Trash2 as lm}from"lucide-react";import{useCallback as Rm,useEffect as Eo,useRef as hm,useState as Vo}from"react";import{jsxDEV as vn,Fragment as um}from"react/jsx-dev-runtime";function xa({src:r,altText:n,nodeKey:a,width:o,height:p}){let[m]=vm(),[c,v]=Nm(a),[g,i]=Vo(!1),N=hm(null),[b,y]=Vo(o),l=Rm(()=>{m.update(()=>{let u=xo(a);if(u)u.remove()})},[m,a]),R=(u)=>{u.preventDefault(),u.stopPropagation(),i(!0)};return Eo(()=>{if(!g)return;let u=(G)=>{if(N.current){let{left:C}=N.current.getBoundingClientRect(),W=Math.max(50,G.clientX-C);y(W)}},h=()=>{if(i(!1),b!==void 0)m.update(()=>{let G=xo(a);if(G&&typeof G.setWidth==="function")G.setWidth(b)})};return document.addEventListener("mousemove",u),document.addEventListener("mouseup",h),()=>{document.removeEventListener("mousemove",u),document.removeEventListener("mouseup",h)}},[g,b,m,a]),Eo(()=>{y(o)},[o]),vn("div",{role:"button",tabIndex:-1,className:`editor-image-wrapper ${c?"is-selected":""}`,onClick:(u)=>{u.preventDefault(),u.stopPropagation(),v(!c)},onKeyDown:(u)=>{if(u.key==="Enter"||u.key===" ")u.preventDefault(),v(!c)},style:{display:"inline-block",position:"relative",cursor:"default",lineHeight:0,zIndex:c?10:1},children:[vn("img",{ref:N,src:r,alt:n,style:{width:b||(o?`${o}px`:"auto"),height:p?`${p}px`:"auto",maxWidth:"100%",display:"block"},className:"editor-image-img"},void 0,!1,void 0,this),c&&vn(um,{children:[vn("button",{type:"button",className:"editor-image-resizer",onMouseDown:R,"aria-label":"Resize image"},void 0,!1,void 0,this),vn("button",{type:"button",className:"editor-image-delete",onClick:(u)=>{u.stopPropagation(),l()},"aria-label":"Delete image",children:vn(lm,{size:14},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}import{jsxDEV as wm}from"react/jsx-dev-runtime";class Zn extends zm{__src;__altText;__height;__width;static getType(){return"image"}static clone(r){return new Zn(r.__src,r.__altText,r.__height,r.__width,r.__key)}constructor(r,n,a,o,p){super(p);this.__src=r,this.__altText=n,this.__height=a,this.__width=o}exportJSON(){return{altText:this.__altText,height:this.__height,src:this.__src,type:"image",version:1,width:this.__width}}static importJSON(r){let{altText:n,height:a,width:o,src:p}=r;return Er(p,n,a,o)}createDOM(r){let n=document.createElement("span");return n.className="editor-image",n}updateDOM(){return!1}setWidth(r){let n=this.getWritable();n.__width=r}setHeight(r){let n=this.getWritable();n.__height=r}decorate(){return wm(xa,{src:this.__src,altText:this.__altText,nodeKey:this.__key,width:this.__width,height:this.__height},void 0,!1,void 0,this)}}function Er(r,n,a,o){return new Zn(r,n,a,o)}import{$createCodeNode as Pm}from"@lexical/code";import{INSERT_ORDERED_LIST_COMMAND as Jm,INSERT_UNORDERED_LIST_COMMAND as Ym}from"@lexical/list";import{useLexicalComposerContext as _m}from"@lexical/react/LexicalComposerContext";import{LexicalTypeaheadMenuPlugin as qm,MenuOption as Zm,useBasicTypeaheadTriggerMatch as Xm}from"@lexical/react/LexicalTypeaheadMenuPlugin";import{$createHeadingNode as la,$createQuoteNode as Am}from"@lexical/rich-text";import{$setBlocksType as hn}from"@lexical/selection";import{$getSelection as An,$insertNodes as Qm,$isRangeSelection as Qn}from"lexical";import{Code as Bm,Heading1 as km,Heading2 as $m,Image as Mm,List as Um,ListOrdered as Im,Quote as Om,Type as Sm}from"lucide-react";import{useCallback as Fm,useMemo as dm,useState as tp}from"react";import*as mp from"react-dom";import{useStore as Xn}from"@nanostores/react";import{ChevronRight as Tm,File as rp,FileText as np,FolderPlus as Hm,Image as ap,Loader2 as op,Upload as fm,X as Lm}from"lucide-react";import Cm,{useMemo as Wm,useRef as Gm,useState as pp}from"react";import{persistentAtom as Ea}from"@nanostores/persistent";import{atom as Va}from"nanostores";var Nn=Ea("opaca-media-view-mode","grid"),ln=Ea("opaca-media-selected-bucket","all"),ga=Ea("opaca-bucket-colors",{},{encode:JSON.stringify,decode:JSON.parse}),Vr=Va(""),va=Va(""),jr=Va(1),Rn=$r(["api/__system/assets",ln,Vr,va,jr],{fetcher:(r,n,a,o,p)=>{let m=new URLSearchParams({bucket:String(n),folder:String(a),search:String(o),page:String(p),limit:"20"});return M.get(`${r}?${m.toString()}`).json()}}),Na=(r)=>{ln.set(r),Vr.set(""),jr.set(1)},Cr=(r)=>{Vr.set(r),jr.set(1)},jo=(r)=>{va.set(r),jr.set(1)},ja=(r)=>{jr.set(r)},Do=(r,n)=>{let a=ga.get();ga.set({...a,[r]:n})};import{jsxDEV as J,Fragment as Km}from"react/jsx-dev-runtime";var Ur=({onSelect:r,onClose:n,allowedmime_types:a,maxFileSize:o,bucket:p="default"})=>{let{data:m,loading:c}=Xn(Rn),v=Xn(ln),g=Xn(Vr),i=Xn(Nn),N=Xn(Rr),[b,y]=pp(!1),[l,R]=pp(!1),u=Gm(null),h=Wm(()=>{return Object.keys(N?.storages||{})},[N?.storages]),G=m?.docs||[],C=m?.folders||[],W=async(f)=>{if(a&&!a.includes(f.type)){alert(`Invalid file type. Allowed: ${a.join(", ")}`);return}if(o&&f.size>o){alert(`File too large. Max size: ${o/1024/1024}MB`);return}y(!0);let U=new FormData;U.append("file",f);try{let T=v==="all"?"default":v,_=await M.post(`api/__system/assets/upload?bucket=${T}&folder=${g}`,{body:U,onDownloadProgress:(w)=>{}}).json();y(!1),Rn.revalidate(),r({assetId:_.id,url:_.url||`${cr()}/api/assets/${_.id}/view`,filename:_.filename,mimeType:_.mimeType||_.mime_type||"",filesize:_.filesize})}catch(T){alert(`Upload failed: ${T instanceof Error?T.message:"Unknown error"}`),y(!1)}},A=(f)=>{if(f.preventDefault(),R(!1),f.dataTransfer.files&&f.dataTransfer.files.length>0&&f.dataTransfer.files[0])W(f.dataTransfer.files[0])},s=(f)=>{if(!f)return J(rp,{size:40,className:"text-gray-400"},void 0,!1,void 0,this);if(f.startsWith("image/"))return J(ap,{size:40,className:"text-blue-400"},void 0,!1,void 0,this);if(f.startsWith("video/"))return J(np,{size:40,className:"text-purple-400"},void 0,!1,void 0,this);if(f.includes("pdf"))return J(np,{size:40,className:"text-red-400"},void 0,!1,void 0,this);return J(rp,{size:40,className:"text-gray-400"},void 0,!1,void 0,this)};return J("div",{className:"asset-manager-overlay",children:J("div",{className:"asset-manager-container",children:[J("div",{className:"asset-manager-header",children:[J("div",{children:[J("h2",{children:"Media Library"},void 0,!1,void 0,this),J("div",{className:"asset-manager-breadcrumbs",children:[J("button",{type:"button",onClick:()=>Cr(""),children:"Home"},void 0,!1,void 0,this),g.split("/").filter(Boolean).map((f,U,T)=>J(Cm.Fragment,{children:[J(Tm,{size:14,className:"breadcrumb-separator"},void 0,!1,void 0,this),J("button",{type:"button",onClick:()=>Cr(T.slice(0,U+1).join("/")),children:f},void 0,!1,void 0,this)]},f||U,!0,void 0,this))]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),J("div",{className:"header-actions",children:[J(cn,{value:v,onValueChange:(f)=>Na(f),children:[J(yn,{className:"bucket-selector",children:J(bn,{placeholder:"Bucket"},void 0,!1,void 0,this)},void 0,!1,void 0,this),J(gn,{children:[J(Xr,{value:"all",children:"All Buckets"},void 0,!1,void 0,this),J(ia,{},void 0,!1,void 0,this),J(ca,{children:"Storage"},void 0,!1,void 0,this),h.map((f)=>J(Xr,{value:f,children:f.toUpperCase()},f,!1,void 0,this))]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),J("button",{type:"button",onClick:n,className:"close-button",children:J(Lm,{size:20},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),J("button",{type:"button",onDragOver:(f)=>{f.preventDefault(),R(!0)},onDragLeave:()=>R(!1),onDrop:A,onClick:()=>!b&&u.current?.click(),"aria-label":"Upload file",className:`asset-manager-upload-zone ${l?"is-drag-active":""} ${b?"uploading":""}`,children:[J("input",{type:"file",ref:u,style:{display:"none"},accept:a?.join(","),onChange:(f)=>{if(f.target.files&&f.target.files.length>0&&f.target.files[0])W(f.target.files[0])}},void 0,!1,void 0,this),b?J("div",{className:"uploading-status",children:[J(op,{className:"opaca-spin",size:24},void 0,!1,void 0,this),J("span",{className:"status-text",children:"Uploading..."},void 0,!1,void 0,this)]},void 0,!0,void 0,this):J(Km,{children:[J(fm,{size:24,className:"upload-icon"},void 0,!1,void 0,this),J("p",{className:"upload-prompt",children:["Drag & drop a file here, or ",J("span",{children:"click to browse"},void 0,!1,void 0,this),"."]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),J("div",{className:"asset-manager-grid-container",children:c?J("div",{className:"loading-assets",children:[J(op,{className:"opaca-spin",size:32},void 0,!1,void 0,this),J("p",{children:"Loading assets..."},void 0,!1,void 0,this)]},void 0,!0,void 0,this):G.length===0&&C.length===0?J("div",{className:"no-assets",children:[J(ap,{size:48,className:"empty-icon"},void 0,!1,void 0,this),J("p",{children:"No assets found here."},void 0,!1,void 0,this)]},void 0,!0,void 0,this):J("div",{className:`asset-manager-grid mode-${i}`,children:[C.map((f)=>J("button",{type:"button",className:"asset-manager-card folder-card",onClick:()=>Cr(g?`${g}/${f.name}`:f.name),children:[J("div",{className:"asset-thumb",children:J(Hm,{size:40,className:"folder-icon"},void 0,!1,void 0,this)},void 0,!1,void 0,this),J("div",{className:"asset-info",children:[J("span",{className:"filename",children:f.name},void 0,!1,void 0,this),J("span",{className:"file-meta",children:"Folder"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},`folder-${f.name}`,!0,void 0,this)),G.map((f)=>J("button",{type:"button",className:"asset-manager-card asset-card",onClick:()=>{let U=cr();r({assetId:f.id,url:`${U}/api/assets/${f.id}/view`,filename:f.filename,mimeType:f.mimeType||f.mime_type||"",filesize:f.filesize})},children:[J("div",{className:"asset-thumb",children:(()=>{let U=f.mimeType||f.mime_type;return U?.startsWith("image/")?J("img",{src:`${cr()}/api/assets/${f.id}/view`,alt:f.filename},void 0,!1,void 0,this):s(U||"")})()},void 0,!1,void 0,this),J("div",{className:"asset-info",children:[J("span",{className:"filename",title:f.filename,children:f.filename},void 0,!1,void 0,this),J("span",{className:"file-meta",children:[(f.mimeType||f.mime_type||"").split("/")[1]?.toUpperCase()||"FILE"," ","• ",((f.filesize||0)/1024).toFixed(1)," KB"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),J("div",{className:"selection-overlay",children:J("div",{className:"select-badge",children:"Select"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},f.id,!0,void 0,this))]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)};import{jsxDEV as rr,Fragment as em}from"react/jsx-dev-runtime";class Wr extends Zm{title;icon;description;onSelect;constructor(r,n){super(r);this.title=r,this.icon=n.icon,this.description=n.description,this.onSelect=n.onSelect}}function cp(){let[r]=_m(),[n,a]=tp(null),[o,p]=tp(!1),m=Xm("/",{minLength:0}),c=(i)=>{let N=i.url||`${cr()}/api/assets/${i.id||i.assetId}/view`;r.update(()=>{let b=Er(N,i.filename||"Image");Qm([b])}),p(!1)},v=dm(()=>{let i=[new Wr("Paragraph",{icon:rr(Sm,{size:18},void 0,!1,void 0,this),description:"Just start typing with plain text.",onSelect:()=>{r.update(()=>{let N=An();if(Qn(N))hn(N,()=>la("h1")),hn(N,()=>la("h1"))})}}),new Wr("Heading 1",{icon:rr(km,{size:18},void 0,!1,void 0,this),description:"Large section heading.",onSelect:()=>{r.update(()=>{let N=An();if(Qn(N))hn(N,()=>la("h1"))})}}),new Wr("Heading 2",{icon:rr($m,{size:18},void 0,!1,void 0,this),description:"Medium section heading.",onSelect:()=>{r.update(()=>{let N=An();if(Qn(N))hn(N,()=>la("h2"))})}}),new Wr("Bullet List",{icon:rr(Um,{size:18},void 0,!1,void 0,this),description:"Create a simple bullet list.",onSelect:()=>{r.dispatchCommand(Ym,void 0)}}),new Wr("Numbered List",{icon:rr(Im,{size:18},void 0,!1,void 0,this),description:"Create a list with numbering.",onSelect:()=>{r.dispatchCommand(Jm,void 0)}}),new Wr("Quote",{icon:rr(Om,{size:18},void 0,!1,void 0,this),description:"Capture a quotation.",onSelect:()=>{r.update(()=>{let N=An();if(Qn(N))hn(N,()=>Am())})}}),new Wr("Code Block",{icon:rr(Bm,{size:18},void 0,!1,void 0,this),description:"Write code snippets.",onSelect:()=>{r.update(()=>{let N=An();if(Qn(N))hn(N,()=>Pm())})}}),new Wr("Image",{icon:rr(Mm,{size:18},void 0,!1,void 0,this),description:"Insert an image from media library.",onSelect:()=>{p(!0)}})];if(!n)return i;return i.filter((N)=>N.title.toLowerCase().includes(n.toLowerCase()))},[r,n]),g=Fm((i,N,b)=>{r.update(()=>{if(N)N.remove();i.onSelect(n||""),b()})},[r,n]);return rr(em,{children:[rr(qm,{onQueryChange:a,onSelectOption:g,triggerFn:m,options:v,menuRenderFn:(i,{selectedIndex:N,selectOptionAndCleanUp:b,setHighlightedIndex:y})=>i.current&&v.length>0?mp.createPortal(rr(mn,{className:"opaca-slash-menu",maxHeight:"300px",children:v.map((l,R)=>rr("button",{className:`opaca-slash-menu-item ${N===R?"is-selected":""}`,onClick:()=>b(l),onMouseEnter:()=>y(R),children:[rr("div",{className:"opaca-slash-menu-icon",children:l.icon},void 0,!1,void 0,this),rr("div",{className:"opaca-slash-menu-text",children:[rr("span",{className:"opaca-slash-menu-title",children:l.title},void 0,!1,void 0,this),rr("span",{className:"opaca-slash-menu-desc",children:l.description},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},l.key,!0,void 0,this))},void 0,!1,void 0,this),i.current):null},void 0,!1,void 0,this),o&&rr(Ur,{bucket:"default",onClose:()=>p(!1),onSelect:c},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}import{useLexicalComposerContext as sm}from"@lexical/react/LexicalComposerContext";import{useEffect as xm}from"react";function ip({isEditable:r}){let[n]=sm();return xm(()=>{n.setEditable(r)},[n,r]),null}import{TOGGLE_LINK_COMMAND as Em}from"@lexical/link";import{useLexicalComposerContext as Vm}from"@lexical/react/LexicalComposerContext";import{$getSelection as jm,$insertNodes as Dm,$isRangeSelection as rc,COMMAND_PRIORITY_CRITICAL as nc,FORMAT_TEXT_COMMAND as Da,SELECTION_CHANGE_COMMAND as ac}from"lexical";import{Bold as oc,Image as pc,Italic as tc,LinkIcon as mc,Strikethrough as cc}from"lucide-react";import{useCallback as ic,useEffect as ro,useRef as yc,useState as un}from"react";import*as yp from"react-dom";import{jsxDEV as vr,Fragment as bc}from"react/jsx-dev-runtime";function bp(){let[r,n]=un(!1),[a]=Vm(),[o,p]=un(!1),[m,c]=un(!1),[v,g]=un(!1),[i,N]=un(!1),b=yc(null),[y,l]=un({top:0,left:0}),R=ic(()=>{let h=jm();if(rc(h)){p(h.hasFormat("bold")),c(h.hasFormat("italic")),g(h.hasFormat("strikethrough"));let G=window.getSelection(),C=a.getRootElement();if(G!==null&&!G.isCollapsed&&C!==null&&C.contains(G.anchorNode)){let A=G.getRangeAt(0).getBoundingClientRect();l({top:A.top-45,left:A.left+A.width/2}),N(!0)}else N(!1)}else N(!1)},[a]);ro(()=>{return a.registerUpdateListener(({editorState:h})=>{h.read(()=>{R()})})},[a,R]),ro(()=>{return a.registerCommand(ac,(h)=>{return R(),!1},nc)},[a,R]),ro(()=>{let h=()=>{if(i)R()};return window.addEventListener("resize",h),window.addEventListener("scroll",h),()=>{window.removeEventListener("resize",h),window.removeEventListener("scroll",h)}},[i,R]);let u=(h)=>{let G=h.url||`${cr()}/api/assets/${h.id||h.assetId}/view`;a.update(()=>{let C=Er(G,h.filename||"Image");Dm([C])}),n(!1)};if(!i&&!r)return null;return vr(bc,{children:[i&&yp.createPortal(vr("div",{ref:b,className:"opaca-lexical-bubble-menu",style:{position:"fixed",top:y.top-(typeof window<"u"?window.scrollY:0),left:y.left,transform:"translateX(-50%)",zIndex:1000,pointerEvents:"auto"},children:[vr("button",{type:"button",onClick:()=>{a.dispatchCommand(Da,"bold")},className:`opaca-lexical-btn ${o?"is-active":""}`,children:vr(oc,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),vr("button",{type:"button",onClick:()=>{a.dispatchCommand(Da,"italic")},className:`opaca-lexical-btn ${m?"is-active":""}`,children:vr(tc,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),vr("button",{type:"button",onClick:()=>{a.dispatchCommand(Da,"strikethrough")},className:`opaca-lexical-btn ${v?"is-active":""}`,children:vr(cc,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),vr("button",{type:"button",onClick:()=>{a.dispatchCommand(Em,"https://")},className:"opaca-lexical-btn",children:vr(mc,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),vr("button",{type:"button",onClick:()=>n(!0),className:"opaca-lexical-btn",children:vr(pc,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),document.body),r&&vr(Ur,{bucket:"default",onClose:()=>n(!1),onSelect:u},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}import{$createCodeNode as gc}from"@lexical/code";import{TOGGLE_LINK_COMMAND as vc}from"@lexical/link";import{INSERT_ORDERED_LIST_COMMAND as Nc,INSERT_UNORDERED_LIST_COMMAND as lc}from"@lexical/list";import{useLexicalComposerContext as Rc}from"@lexical/react/LexicalComposerContext";import{$createHeadingNode as gp,$createQuoteNode as hc,$isHeadingNode as uc}from"@lexical/rich-text";import{$setBlocksType as Ra}from"@lexical/selection";import{$getSelection as Bn,$insertNodes as zc,$isRangeSelection as kn,COMMAND_PRIORITY_CRITICAL as wc,FORMAT_TEXT_COMMAND as no,SELECTION_CHANGE_COMMAND as Tc}from"lexical";import{Bold as Hc,Code as fc,Heading1 as Lc,Heading2 as Cc,Image as Wc,Italic as Gc,Link as Kc,List as Pc,ListOrdered as Jc,Quote as Yc,Strikethrough as _c}from"lucide-react";import{useCallback as vp,useEffect as qc,useState as $n}from"react";import{jsxDEV as e,Fragment as Zc}from"react/jsx-dev-runtime";function Np(){let[r,n]=$n(!1),[a]=Rc(),[o,p]=$n(!1),[m,c]=$n(!1),[v,g]=$n(!1),[i,N]=$n("paragraph"),b=vp(()=>{let C=Bn();if(kn(C)){p(C.hasFormat("bold")),c(C.hasFormat("italic")),g(C.hasFormat("strikethrough"));let W=C.anchor.getNode(),A=W.getKey()==="root"?W:W.getTopLevelElementOrThrow(),s=A.getKey();if(a.getElementByKey(s)!==null)if(uc(A)){let U=A.getTag();N(U)}else{let U=A.getType();N(U)}}},[a]);qc(()=>{return a.registerCommand(Tc,(C)=>{return b(),!1},wc)},[a,b]);let y=(C)=>{if(i!==C)a.update(()=>{let W=Bn();if(kn(W))Ra(W,()=>gp(C))});else a.update(()=>{let W=Bn();if(kn(W))Ra(W,()=>gp("h1"))})},l=()=>{if(i!=="quote")a.update(()=>{let C=Bn();if(kn(C))Ra(C,()=>hc())})},R=()=>{if(i!=="code")a.update(()=>{let C=Bn();if(kn(C))Ra(C,()=>gc())})},u=(C)=>{if(C==="bullet")a.dispatchCommand(lc,void 0);else a.dispatchCommand(Nc,void 0)},h=vp(()=>{a.dispatchCommand(vc,"https://")},[a]);return e(Zc,{children:[e("div",{className:"opaca-lexical-toolbar",children:[e("button",{type:"button",onClick:()=>{a.dispatchCommand(no,"bold")},className:`opaca-lexical-btn ${o?"is-active":""}`,children:e(Hc,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),e("button",{type:"button",onClick:()=>{a.dispatchCommand(no,"italic")},className:`opaca-lexical-btn ${m?"is-active":""}`,children:e(Gc,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),e("button",{type:"button",onClick:()=>{a.dispatchCommand(no,"strikethrough")},className:`opaca-lexical-btn ${v?"is-active":""}`,children:e(_c,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),e("div",{className:"opaca-lexical-divider"},void 0,!1,void 0,this),e("button",{type:"button",onClick:()=>y("h1"),className:`opaca-lexical-btn ${i==="h1"?"is-active":""}`,children:e(Lc,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),e("button",{type:"button",onClick:()=>y("h2"),className:`opaca-lexical-btn ${i==="h2"?"is-active":""}`,children:e(Cc,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),e("button",{type:"button",onClick:()=>u("bullet"),className:`opaca-lexical-btn ${i==="ul"?"is-active":""}`,children:e(Pc,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),e("button",{type:"button",onClick:()=>u("number"),className:`opaca-lexical-btn ${i==="ol"?"is-active":""}`,children:e(Jc,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),e("button",{type:"button",onClick:l,className:`opaca-lexical-btn ${i==="quote"?"is-active":""}`,children:e(Yc,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),e("button",{type:"button",onClick:R,className:`opaca-lexical-btn ${i==="code"?"is-active":""}`,children:e(fc,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),e("div",{className:"opaca-lexical-divider"},void 0,!1,void 0,this),e("button",{type:"button",onClick:h,className:"opaca-lexical-btn",children:e(Kc,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),e("button",{type:"button",onClick:()=>n(!0),className:"opaca-lexical-btn",children:e(Wc,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),r&&e(Ur,{bucket:"default",onClose:()=>n(!1),onSelect:(C)=>{let W=C.url||`${cr()}/api/assets/${C.id||C.assetId}/view`;a.update(()=>{let A=Er(W,C.filename||"Image");zc([A])}),n(!1)}},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}import{useLexicalComposerContext as Xc}from"@lexical/react/LexicalComposerContext";import{useEffect as Ac,useRef as Qc}from"react";function lp({value:r}){let[n]=Xc(),a=Qc(!0);return Ac(()=>{if(a.current){a.current=!1;return}if(ao(r))n.update(()=>{if(JSON.stringify(n.getEditorState().toJSON())!==r)try{let p=n.parseEditorState(r);n.setEditorState(p)}catch(p){console.error("Failed to parse editor state in ValueSyncPlugin:",p)}})},[n,r]),null}import{jsxDEV as D}from"react/jsx-dev-runtime";var ri={ltr:"ltr",rtl:"rtl",placeholder:"editor-placeholder",paragraph:"editor-paragraph",quote:"editor-quote",heading:{h1:"editor-heading-h1",h2:"editor-heading-h2",h3:"editor-heading-h3",h4:"editor-heading-h4",h5:"editor-heading-h5",h6:"editor-heading-h6"},list:{nested:{listitem:"editor-nested-listitem"},ol:"editor-list-ol",ul:"editor-list-ul",listitem:"editor-listitem",listitemChecked:"editor-listitem-checked",listitemUnchecked:"editor-listitem-unchecked"},image:"editor-image",link:"editor-link",text:{bold:"editor-text-bold",italic:"editor-text-italic",overflowed:"editor-text-overflowed",hashtag:"editor-text-hashtag",underline:"editor-text-underline",strikethrough:"editor-text-strikethrough",underlineStrikethrough:"editor-text-underlineStrikethrough",code:"editor-text-code"},code:"editor-code",codeHighlight:{atrule:"editor-tokenAttr",attr:"editor-tokenAttr",boolean:"editor-tokenProperty",builtin:"editor-tokenSelector",cdata:"editor-tokenComment",char:"editor-tokenSelector",class:"editor-tokenFunction","class-name":"editor-tokenFunction",comment:"editor-tokenComment",constant:"editor-tokenProperty",deleted:"editor-tokenProperty",doctype:"editor-tokenComment",entity:"editor-tokenOperator",function:"editor-tokenFunction",important:"editor-tokenVariable",inserted:"editor-tokenSelector",keyword:"editor-tokenAttr",namespace:"editor-tokenVariable",number:"editor-tokenProperty",operator:"editor-tokenOperator",prolog:"editor-tokenComment",property:"editor-tokenProperty",punctuation:"editor-tokenPunctuation",regex:"editor-tokenVariable",selector:"editor-tokenSelector",string:"editor-tokenSelector",symbol:"editor-tokenProperty",tag:"editor-tokenProperty",url:"editor-tokenOperator",variable:"editor-tokenVariable"}};function ni(){return D("div",{className:"opaca-lexical-placeholder",children:'Press "/" for commands, or start typing...'},void 0,!1,void 0,this)}var ao=(r)=>{if(!r)return;if(typeof r==="string"){let n=r.trim();return n.startsWith("{")?n:void 0}if(typeof r==="object")try{return JSON.stringify(r)}catch{return}return};function ha({value:r,onChange:n,defaultMode:a="simple",disabled:o,readOnly:p}){let[m,c]=Dc(a),v=!o&&!p,g={namespace:"OpacaLexical",theme:ri,editable:v,nodes:[Vc,Uc,Mc,jc,Bc,$c,kc,Ic,Zn],onError:(N)=>{console.error(N)},editorState:ao(r)},i=(N)=>{let b=JSON.stringify(N.toJSON());n(b)};return D("div",{className:"opaca-lexical-wrapper",children:[v&&D("div",{className:"opaca-lexical-modes",children:[D("button",{type:"button",className:`opaca-btn ${m==="simple"?"opaca-btn-primary":"opaca-btn-outline"}`,onClick:()=>c("simple"),children:"Simple"},void 0,!1,void 0,this),D("button",{type:"button",className:`opaca-btn ${m==="notion"?"opaca-btn-primary":"opaca-btn-outline"}`,onClick:()=>c("notion"),children:"Notion-like"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),D("div",{className:`opaca-lexical-container mode-${m} ${!v?"is-readonly":""}`,children:D(Oc,{initialConfig:g,children:[m==="simple"&&v&&D(Np,{},void 0,!1,void 0,this),m==="notion"&&v&&D(bp,{},void 0,!1,void 0,this),D("div",{className:"opaca-lexical-editor-inner",children:[D(Ec,{contentEditable:D(Sc,{className:"opaca-lexical-content"},void 0,!1,void 0,this),placeholder:D(ni,{},void 0,!1,void 0,this),ErrorBoundary:Fc},void 0,!1,void 0,this),D(xc,{onChange:i,ignoreSelectionChange:!0},void 0,!1,void 0,this),D(lp,{value:r},void 0,!1,void 0,this),D(ip,{isEditable:v},void 0,!1,void 0,this),D(dc,{},void 0,!1,void 0,this),D(sc,{},void 0,!1,void 0,this),D(ec,{},void 0,!1,void 0,this),D(cp,{},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}import{jsxDEV as V}from"react/jsx-dev-runtime";var ua=({data:r,label:n,depth:a=0,isEditing:o,onChange:p})=>{if(r===null||r===void 0)return V("span",{className:"opaca-text-muted",children:"None"},void 0,!1,void 0,this);if(Array.isArray(r)){if(r.length===0)return V("span",{className:"opaca-text-muted",children:"Empty"},void 0,!1,void 0,this);return V("div",{className:"opaca-detail-list",children:r.map((c,v)=>V("div",{className:"opaca-detail-item-card",children:[c?.blockType&&V("div",{className:"opaca-detail-item-header",children:V("span",{className:"opaca-badge",children:c.blockType},void 0,!1,void 0,this)},void 0,!1,void 0,this),V("div",{className:"opaca-detail-item-content",children:typeof c==="object"?V(ua,{data:c,depth:a+1,isEditing:o,onChange:(g)=>{let i=[...r];i[v]=g,p?.(i)}},void 0,!1,void 0,this):o?V(fr,{value:String(c),onChange:(g)=>{let i=[...r];i[v]=g.target.value,p?.(i)}},void 0,!1,void 0,this):V("span",{className:"opaca-detail-value",children:String(c)},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},c||v,!0,void 0,this))},void 0,!1,void 0,this)}if(((c)=>{if(!c)return!1;if(typeof c==="object")return c!==null&&"root"in c;if(typeof c==="string"){let v=c.trim();if(!v.startsWith("{"))return!1;try{let g=JSON.parse(v);return g&&typeof g==="object"&&"root"in g}catch{return!1}}return!1})(r)&&a===0){let c=r;if(typeof r==="object")try{c=JSON.stringify(r)}catch(v){}return V("div",{className:"opaca-detail-richtext-preview",children:V(ha,{value:c,onChange:(v)=>{try{p?.(JSON.parse(v))}catch(g){p?.(v)}},readOnly:!o},void 0,!1,void 0,this)},void 0,!1,void 0,this)}if(typeof r==="object"&&r!==null){let c=Object.keys(r).filter((v)=>v!=="blockType"&&v!=="id"&&v!=="_order"&&!v.startsWith("_"));if(c.length===0)return V("span",{className:"opaca-text-muted",children:"Empty Object"},void 0,!1,void 0,this);return V("div",{className:Y("opaca-detail-grid",a>0&&"nested"),children:c.map((v)=>V("div",{className:"opaca-detail-row",children:[V("span",{className:"opaca-detail-label",children:v.replace(/([A-Z])/g," $1").replace(/^./,(g)=>g.toUpperCase())},void 0,!1,void 0,this),V("div",{className:"opaca-detail-value-container",children:typeof r[v]==="object"&&r[v]!==null?V(ua,{data:r[v],depth:a+1,isEditing:o,onChange:(g)=>{p?.({...r,[v]:g})}},void 0,!1,void 0,this):o?V(fr,{value:r[v]===!0?"true":r[v]===!1?"false":String(r[v]??""),onChange:(g)=>{let i=g.target.value;if(i==="true")i=!0;if(i==="false")i=!1;p?.({...r,[v]:i})}},void 0,!1,void 0,this):V("span",{className:"opaca-detail-value",children:r[v]===!0?"Yes":r[v]===!1?"No":String(r[v]??"-")},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},v,!0,void 0,this))},void 0,!1,void 0,this)}return V("span",{className:"opaca-detail-value",children:String(r)},void 0,!1,void 0,this)};import{useStore as mi}from"@nanostores/react";import{jsxDEV as E,Fragment as ci}from"react/jsx-dev-runtime";var Rp=({open:r,onOpenChange:n,title:a,description:o,data:p,onSave:m,field:c})=>{let[v,g]=oo(!1),[i,N]=oo(p),y=mi(Rr)?.i18n,[l,R]=oo(y?.defaultLocale||"default");ti(()=>{if(N(p),g(!1),y)R(y.defaultLocale)},[p,r,y]);let u=()=>{if(m)m(i);g(!1)};return E(Ar,{open:r,onOpenChange:n,children:E(Qr,{onClose:()=>n(!1),className:"opaca-data-detail-sheet",children:E("div",{style:{display:"flex",flexDirection:"column",height:"100%"},children:[E(Br,{children:E("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center"},children:[E("div",{children:[E(kr,{children:a},void 0,!1,void 0,this),o&&E(ya,{children:o},void 0,!1,void 0,this)]},void 0,!0,void 0,this),m&&E("div",{style:{display:"flex",gap:"0.5rem",alignItems:"center"},children:[v&&y&&y.locales.length>0&&E("div",{style:{display:"flex",borderRight:"1px solid var(--border)",paddingRight:"0.5rem",marginRight:"0.5rem",gap:"0.25rem"},children:y.locales.map((h)=>E(d,{variant:l===h?"default":"outline",size:"sm",onClick:()=>R(h),style:{height:"32px",fontSize:"12px"},children:h.toUpperCase()},h,!1,void 0,this))},void 0,!1,void 0,this),!v?E(d,{variant:"outline",size:"sm",onClick:()=>g(!0),style:{height:"32px",gap:"4px"},children:[E(ai,{size:14},void 0,!1,void 0,this),"Edit"]},void 0,!0,void 0,this):E(ci,{children:[E(d,{variant:"ghost",size:"sm",onClick:()=>{N(p),g(!1)},style:{height:"32px",gap:"4px"},children:[E(pi,{size:14},void 0,!1,void 0,this),"Cancel"]},void 0,!0,void 0,this),E(d,{variant:"default",size:"sm",onClick:u,style:{height:"32px",gap:"4px"},children:[E(oi,{size:14},void 0,!1,void 0,this),"Save"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),E("div",{style:{flex:1,minHeight:0,marginTop:"1.5rem"},children:E(mn,{style:{height:"100%"},children:E("div",{style:{paddingRight:"1rem",paddingBottom:"2rem"},children:E(ua,{data:i,isEditing:v,onChange:N},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)};import Ir from"react";import{jsxDEV as Gr}from"react/jsx-dev-runtime";var po=Ir.forwardRef(({className:r,...n},a)=>Gr("div",{className:"opaca-table-wrapper",children:Gr("table",{ref:a,className:`opaca-new-table ${r||""}`,...n},void 0,!1,void 0,this)},void 0,!1,void 0,this));po.displayName="Table";var to=Ir.forwardRef(({className:r,...n},a)=>Gr("thead",{ref:a,className:`opaca-table-header ${r||""}`,...n},void 0,!1,void 0,this));to.displayName="TableHeader";var mo=Ir.forwardRef(({className:r,...n},a)=>Gr("tbody",{ref:a,className:`opaca-table-body ${r||""}`,...n},void 0,!1,void 0,this));mo.displayName="TableBody";var ii=Ir.forwardRef(({className:r,...n},a)=>Gr("tfoot",{ref:a,className:`opaca-table-footer ${r||""}`,...n},void 0,!1,void 0,this));ii.displayName="TableFooter";var za=Ir.forwardRef(({className:r,...n},a)=>Gr("tr",{ref:a,className:`opaca-table-row ${r||""}`,...n},void 0,!1,void 0,this));za.displayName="TableRow";var Mn=Ir.forwardRef(({className:r,...n},a)=>Gr("th",{ref:a,className:`opaca-table-head ${r||""}`,...n},void 0,!1,void 0,this));Mn.displayName="TableHead";var Un=Ir.forwardRef(({className:r,...n},a)=>Gr("td",{ref:a,className:`opaca-table-cell ${r||""}`,...n},void 0,!1,void 0,this));Un.displayName="TableCell";var yi=Ir.forwardRef(({className:r,...n},a)=>Gr("caption",{ref:a,className:`opaca-table-caption ${r||""}`,...n},void 0,!1,void 0,this));yi.displayName="TableCaption";import{useEffect as bi,useState as gi}from"react";function hp(r,n){let[a,o]=gi(r);return bi(()=>{let p=setTimeout(()=>o(r),n||500);return()=>{clearTimeout(p)}},[r,n]),a}import{jsxDEV as L,Fragment as fi}from"react/jsx-dev-runtime";function Hi(r){return r.replace(/([A-Z])/g,"_$1").toLowerCase().replace(/^_/,"")}function Tp(r,n=!1){if(!r)return"-";let a=new Date(r);if(Number.isNaN(a.getTime()))return String(r);return n?a.toLocaleString():a.toLocaleDateString()}function Hp({collection:r}){let[n,a]=Dr(1),[o,p]=Dr(10),[m,c]=Dr(""),[v,g]=Dr(""),[i,N]=Dr(null),[b,y]=Dr({open:!1,title:"",data:null}),[l,R]=Dr({open:!1,relationTo:"",id:""}),u=hp(v,400),h=up(Mr),G=co(()=>r.fields.filter((w)=>w.name),[r.fields]);wp(()=>{let w=typeof r.admin==="object"?r.admin?.defaultColumns:void 0;eo(r.slug,G,w)},[r.slug,G,typeof r.admin==="object"?r.admin?.defaultColumns:void 0]);let C=co(()=>{let w=h[r.slug];return w?G.filter((K)=>w.includes(K.name)):G},[h,r.slug,G]);wp(()=>{let K=(typeof r.admin==="object"&&r.admin!==null?r.admin.useAsTitle:void 0)||G.find((q)=>q.name==="title"||q.name==="name"||q.name==="slug")?.name||"id",P=r.fields.filter((q)=>q.type==="relationship"&&q.displayField).map((q)=>q.name).join(",");qn.set({slug:r.apiPath||r.slug,page:n,limit:o,sort:m,search:u,searchField:K,filter:i!==null&&typeof r.admin==="object"?r.admin?.views?.[i]?.filter:void 0,populate:P||void 0})},[r.slug,r.apiPath,r.admin,G,n,o,m,u,i]);let{data:W,loading:A}=up(Io),s=(w)=>{if(m===w)c(`-${w}`);else if(m===`-${w}`)c("");else c(w);a(1)},f=async(w)=>{if(!b.field||!b.docId)return;try{let K={[b.field]:w};await M.patch(`api/${r.apiPath||r.slug}/${b.docId}`,{json:K}).json();let P=qn.get();if(P)qn.set({...P,slug:P.slug});S("Document updated successfully","success"),y({...b,open:!1})}catch(K){console.error(K),S("Failed to update document","error")}},U=(w)=>{if(m===w)return L(vi,{size:14,style:{marginLeft:"4px",opacity:0.7}},void 0,!1,void 0,this);if(m===`-${w}`)return L(Ni,{size:14,style:{marginLeft:"4px",opacity:0.7}},void 0,!1,void 0,this);return null},T=W?.docs||[],_=co(()=>{if(typeof r.timestamps==="object"&&r.timestamps?.createdAt)return Hi(r.timestamps.createdAt);return"created_at"},[r.timestamps]);return L("div",{className:`opaca-view-container ${A?"loading":""}`,children:[L("div",{className:"opaca-header",children:[L("div",{children:[L("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem"},children:[L("h1",{className:"opaca-title",children:r.label||(r.slug.startsWith("_")?r.slug.replace(/^_+/,"").replace(/_/g," ").replace(/\b\w/g,(w)=>w.toUpperCase()):r.slug.charAt(0).toUpperCase()+r.slug.slice(1))},void 0,!1,void 0,this),W&&L("span",{className:"opaca-badge",children:[W.totalDocs," ",W.totalDocs===1?"document":"documents"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),L("p",{className:"opaca-subtitle",children:["Manage your ",r.slug," entries."]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),L("div",{style:{display:"flex",gap:"0.75rem",alignItems:"center"},children:[L("div",{style:{position:"relative",width:"240px"},children:[L(Ti,{size:16,style:{position:"absolute",left:"10px",top:"50%",transform:"translateY(-50%)",color:"var(--opaca-text-muted)"}},void 0,!1,void 0,this),L("input",{type:"text",className:"opaca-input",placeholder:"Search documents...",value:v,onChange:(w)=>{g(w.target.value),a(1)},style:{paddingLeft:"36px"}},void 0,!1,void 0,this)]},void 0,!0,void 0,this),L(so,{slug:r.slug,fields:G},void 0,!1,void 0,this),L(ir,{href:`/admin/collections/${r.slug}/create`,className:"opaca-btn opaca-btn-primary",style:{textDecoration:"none"},children:[L(zp,{size:18},void 0,!1,void 0,this),"Create New"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),typeof r.admin==="object"&&r.admin?.views&&r.admin.views.length>0&&L("div",{style:{display:"flex",gap:"0.5rem",marginBottom:"1.25rem",overflowX:"auto",paddingBottom:"0.5rem"},children:[L("button",{type:"button",className:`opaca-btn ${i===null?"opaca-btn-primary":"opaca-btn-outline"}`,onClick:()=>{N(null),a(1)},style:{padding:"0.4rem 1rem",fontSize:"0.875rem"},children:"All"},void 0,!1,void 0,this),r.admin.views.map((w,K)=>L("button",{type:"button",className:`opaca-btn ${i===K?"opaca-btn-primary":"opaca-btn-outline"}`,onClick:()=>{N(K),a(1)},style:{padding:"0.4rem 1rem",fontSize:"0.875rem"},children:w.name},w.name,!1,void 0,this))]},void 0,!0,void 0,this),L("div",{className:"opaca-table-container",children:[A&&L("div",{className:"opaca-loading-overlay",children:L(zi,{size:24,className:"opaca-spin"},void 0,!1,void 0,this)},void 0,!1,void 0,this),L(Rp,{open:b.open,onOpenChange:(w)=>y({...b,open:w}),title:b.title,data:b.data,onSave:f,field:b.field},void 0,!1,void 0,this),T.length>0?L(fi,{children:[L(po,{children:[L(to,{children:L(za,{children:[C.map((w)=>L(Mn,{onClick:()=>s(w.name),style:{cursor:"pointer",userSelect:"none"},children:L("div",{style:{display:"flex",alignItems:"center"},children:[w.label||w.name,U(w.name)]},void 0,!0,void 0,this)},w.name,!1,void 0,this)),r.timestamps&&L(Mn,{onClick:()=>s("createdAt"),style:{cursor:"pointer",userSelect:"none"},children:L("div",{style:{display:"flex",alignItems:"center"},children:["Created At",U("createdAt")]},void 0,!0,void 0,this)},void 0,!1,void 0,this),L(Mn,{style:{width:"50px"}},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),L(mo,{children:T.map((w)=>L(za,{children:[C.map((K)=>{let P=w[K.name];return L(Un,{className:["richtext","json","group","relationship"].includes(K.type)?"opaca-cell-interactive":"",onClick:(q)=>{if(!["richtext","json","group","relationship"].includes(K.type))return;q.stopPropagation(),y({open:!0,title:K.label||K.name||"Details",data:P,field:K.name,docId:w.id})},children:K.type==="boolean"?P?L("span",{className:"opaca-badge",style:{color:"var(--opaca-success)"},children:"Yes"},void 0,!1,void 0,this):L("span",{className:"opaca-badge",style:{color:"var(--opaca-text-dim)"},children:"No"},void 0,!1,void 0,this):r.slug==="_opaca_assets"&&K.name==="filename"?L("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem"},children:[L("div",{style:{width:"32px",height:"32px",borderRadius:"6px",background:"var(--opaca-surface)",overflow:"hidden",display:"flex",alignItems:"center",justifyContent:"center",border:"1px solid var(--opaca-border)"},children:(()=>{return String(w.mimeType||w.mime_type).startsWith("image/")?L("img",{src:`${cr()}/api/${r.apiPath||r.slug}/${w.id}/view`,style:{width:"100%",height:"100%",objectFit:"cover"},alt:""},void 0,!1,void 0,this):L(wi,{size:14,style:{opacity:0.5}},void 0,!1,void 0,this)})()},void 0,!1,void 0,this),L("span",{style:{fontWeight:500},children:String(P??"-")},void 0,!1,void 0,this)]},void 0,!0,void 0,this):K.type==="blocks"&&Array.isArray(P)?L("button",{type:"button",onClick:(q)=>{q.stopPropagation(),y({open:!0,title:K.label||K.name||"Blocks",data:P,field:K.name,docId:w.id})},className:"opaca-badge opaca-badge-interactive",style:{color:"var(--opaca-text-dim)"},children:[P.length," block",P.length!==1?"s":""]},void 0,!0,void 0,this):K.type==="relationship"?L("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem"},children:[(()=>{let q=Array.isArray(P)?P[0]:P;if(q&&typeof q==="object"&&q.filename)return L("div",{style:{width:"24px",height:"24px",borderRadius:"4px",overflow:"hidden",border:"1px solid var(--opaca-border)",flexShrink:0},children:L("img",{src:`${cr()}/api/_opaca_assets/${q.id}/view`,style:{width:"100%",height:"100%",objectFit:"cover"},alt:""},void 0,!1,void 0,this)},void 0,!1,void 0,this);return null})(),(()=>{let q=Array.isArray(P)?P[0]:P;return L("button",{type:"button",className:"opaca-badge opaca-badge-interactive",style:{color:"var(--opaca-text-dim)"},onClick:(br)=>{br.stopPropagation();let ur=q?.id||(typeof q==="string"?q:"");if(ur)R({open:!0,relationTo:K.relationTo||"",id:ur})},children:K.hasMany&&Array.isArray(P)?`${P.length} item${P.length!==1?"s":""}`:typeof q==="object"&&q!==null?q[K.displayField||"id"]||q.id||"[Object]":String(P??"-")},void 0,!1,void 0,this)})()]},void 0,!0,void 0,this):K.type==="group"&&typeof P==="object"&&P!==null?L("span",{className:"opaca-badge",style:{background:"rgba(255, 255, 255, 0.05)",border:"1px solid var(--opaca-border)",color:"var(--opaca-text-dim)"},children:`{ ${Object.keys(P).length} keys }`},void 0,!1,void 0,this):K.type==="json"&&typeof P==="object"&&P!==null?L("span",{style:{color:"var(--opaca-text-dim)",fontFamily:"monospace",fontSize:"0.85em"},children:[JSON.stringify(P).slice(0,30),JSON.stringify(P).length>30?"...":""]},void 0,!0,void 0,this):K.type==="date"?L("span",{style:{color:"var(--opaca-text)",opacity:0.9},children:Tp(P)},void 0,!1,void 0,this):typeof P==="object"&&P!==null?L("span",{className:"opaca-badge",style:{background:"rgba(255, 255, 255, 0.05)",border:"1px solid var(--opaca-border)",color:"var(--opaca-text-dim)"},children:"[Object]"},void 0,!1,void 0,this):L("span",{style:{color:"var(--opaca-text)",opacity:0.9},children:K.type==="richtext"?Fa(P).slice(0,30)+(Fa(P).length>30?"...":""):typeof P==="string"&&P.length>30?`${P.slice(0,30)}...`:String(P??"-")},void 0,!1,void 0,this)},K.name,!1,void 0,this)}),r.timestamps&&L(Un,{style:{color:"var(--opaca-text-muted)",fontSize:"12px"},children:Tp(w[_],!0)},void 0,!1,void 0,this),L(Un,{children:L(ir,{href:`/admin/collections/${r.slug}/${w.id}`,className:"opaca-btn opaca-btn-outline",style:{padding:"0.4rem"},title:"Edit Document",children:L(hi,{size:14},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},w.id,!0,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this),W&&L("div",{className:"opaca-pagination",style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginTop:"1rem"},children:[L("div",{className:"opaca-pagination-info",style:{color:"var(--opaca-text-muted)",fontSize:"0.875rem"},children:["Showing ",(W.page-1)*W.limit+1," to"," ",Math.min(W.page*W.limit,W.totalDocs)," of ",W.totalDocs," documents"]},void 0,!0,void 0,this),L("div",{style:{display:"flex",alignItems:"center",gap:"1.5rem"},children:[L("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem"},children:[L("span",{style:{fontSize:"0.875rem",color:"var(--opaca-text-muted)"},children:"Rows per page:"},void 0,!1,void 0,this),L("select",{value:o,onChange:(w)=>{p(Number(w.target.value)),a(1)},className:"opaca-input",style:{padding:"0.25rem 0.5rem",height:"auto",width:"auto"},children:[L("option",{value:"10",children:"10"},void 0,!1,void 0,this),L("option",{value:"25",children:"25"},void 0,!1,void 0,this),L("option",{value:"50",children:"50"},void 0,!1,void 0,this),L("option",{value:"100",children:"100"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),L("div",{className:"opaca-pagination-actions",style:{display:"flex",gap:"0.5rem"},children:[L("button",{type:"button",className:"opaca-btn opaca-btn-outline",disabled:!W.hasPrevPage||A,onClick:()=>a(n-1),style:{padding:"0.4rem"},children:L(li,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),L("button",{type:"button",className:"opaca-btn opaca-btn-outline",disabled:!W.hasNextPage||A,onClick:()=>a(n+1),style:{padding:"0.4rem"},children:L(Ri,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this):!A?L("div",{className:"opaca-empty",children:[L("div",{className:"opaca-empty-icon",children:L(ui,{size:32},void 0,!1,void 0,this)},void 0,!1,void 0,this),L("h3",{style:{fontSize:"1.125rem",fontWeight:"600"},children:"No documents found"},void 0,!1,void 0,this),L("p",{className:"opaca-subtitle",style:{maxWidth:"300px"},children:"This collection is currently empty. Start by creating your first document."},void 0,!1,void 0,this),L(ir,{href:`/admin/collections/${r.slug}/create`,className:"opaca-btn opaca-btn-primary",style:{textDecoration:"none",marginTop:"0.5rem"},children:[L(zp,{size:18},void 0,!1,void 0,this),"Create First ",r.label||r.slug]},void 0,!0,void 0,this)]},void 0,!0,void 0,this):L("div",{style:{height:"200px"}},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}import{Activity as Li,ArrowUpRight as Ci,Database as Wi}from"lucide-react";import{jsxDEV as k}from"react/jsx-dev-runtime";function fp({config:r,user:n}){let a=r.collections.filter((o)=>!o.slug.startsWith("_"));return k("div",{children:[k("div",{className:"opaca-header",style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"2rem"},children:[k("div",{children:[k("h1",{className:"opaca-title",style:{marginBottom:"0.25rem"},children:r.appName||"OpacaCMS"},void 0,!1,void 0,this),k("p",{className:"opaca-subtitle",children:"Overview of your content management system"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),n&&k("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem",padding:"0.625rem 1rem",background:"rgba(255, 255, 255, 0.03)",borderRadius:"12px",border:"1px solid rgba(255, 255, 255, 0.08)",backdropFilter:"blur(10px)",boxShadow:"0 4px 12px rgba(0, 0, 0, 0.1)"},children:[k("div",{style:{width:"36px",height:"36px",borderRadius:"10px",background:"linear-gradient(135deg, var(--opaca-accent) 0%, #a78bfa 100%)",color:"white",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"0.875rem",fontWeight:"600",boxShadow:"0 2px 8px rgba(124, 58, 237, 0.3)"},children:n.name.charAt(0).toUpperCase()},void 0,!1,void 0,this),k("div",{style:{lineHeight:"1.3"},children:[k("div",{style:{fontSize:"0.875rem",fontWeight:"600",color:"var(--opaca-text)"},children:n.name},void 0,!1,void 0,this),k("div",{style:{fontSize:"0.75rem",color:"var(--opaca-text-dim)"},children:n.email},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),k("div",{className:"opaca-grid",style:{marginBottom:"2.5rem"},children:[k("div",{className:"opaca-card",children:[k("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem",marginBottom:"0.75rem"},children:[k("div",{style:{padding:"0.5rem",background:"var(--opaca-primary-glow)",color:"var(--opaca-accent)",borderRadius:"var(--opaca-radius)"},children:k(Wi,{size:18},void 0,!1,void 0,this)},void 0,!1,void 0,this),k("div",{children:[k("div",{style:{fontSize:"1.25rem",fontWeight:"600",lineHeight:"1.2"},children:a.length},void 0,!1,void 0,this),k("div",{style:{fontSize:"0.6875rem",color:"var(--opaca-text-dim)",textTransform:"uppercase",letterSpacing:"0.05em"},children:"Collections"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),k("p",{style:{fontSize:"0.75rem",color:"var(--opaca-text-muted)"},children:"Schema defined by Drizzle and synced automatically."},void 0,!1,void 0,this)]},void 0,!0,void 0,this),k("div",{className:"opaca-card",children:[k("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem",marginBottom:"0.75rem"},children:[k("div",{style:{padding:"0.5rem",background:"rgba(52, 211, 153, 0.1)",color:"var(--opaca-success)",borderRadius:"var(--opaca-radius)"},children:k(Li,{size:18},void 0,!1,void 0,this)},void 0,!1,void 0,this),k("div",{children:[k("div",{style:{fontSize:"1.25rem",fontWeight:"600",lineHeight:"1.2"},children:"Online"},void 0,!1,void 0,this),k("div",{style:{fontSize:"0.6875rem",color:"var(--opaca-text-dim)",textTransform:"uppercase",letterSpacing:"0.05em"},children:"API Status"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),k("p",{style:{fontSize:"0.75rem",color:"var(--opaca-text-muted)"},children:["Hono-powered API on ",r.serverURL||"localhost","."]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),k("div",{style:{fontSize:"0.6875rem",fontWeight:"500",color:"var(--opaca-text-dim)",textTransform:"uppercase",letterSpacing:"0.05em",marginBottom:"0.75rem"},children:"Collections"},void 0,!1,void 0,this),k("div",{className:"opaca-grid",children:a.filter((o)=>!o.hidden).sort((o,p)=>o.admin===p.admin?0:o.admin?-1:1).map((o)=>{let p=o.label||o.slug.replace(/^_+/,"").replace(/_/g," ").replace(/\b\w/g,(m)=>m.toUpperCase());return k(ir,{href:`/admin/collections/${o.slug}`,className:"opaca-card",style:{textDecoration:"none",color:"inherit",cursor:"pointer"},children:[k("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:"0.25rem"},children:[k("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem"},children:[k("span",{style:{fontWeight:"500",fontSize:"0.875rem"},children:p},void 0,!1,void 0,this),o.admin&&k("div",{style:{width:"5px",height:"5px",borderRadius:"50%",backgroundColor:"var(--opaca-accent)",opacity:0.8,boxShadow:"0 0 5px var(--opaca-accent)"},title:o.slug==="_opaca_assets"?"System Assets Registry":"Universal Collection"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),k(Ci,{size:14,color:"var(--opaca-text-dim)"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),k("div",{style:{fontSize:"0.75rem",color:"var(--opaca-text-muted)"},children:[o.fields.length," fields"]},void 0,!0,void 0,this)]},o.slug,!0,void 0,this)})},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}import{useStore as bo}from"@nanostores/react";import{useForm as Vi}from"@tanstack/react-form";import{AlertCircle as ji,ArrowLeft as Fp,Loader2 as go,Save as dp,Trash2 as Di}from"lucide-react";import{useEffect as ry,useMemo as ep,useState as ny}from"react";Tr();import Ii,{useEffect as Oi,useRef as Si}from"react";import{Plus as Gi,Trash2 as Ki}from"lucide-react";var zr=(r)=>r.charAt(0).toUpperCase()+r.slice(1);import{jsxDEV as lr}from"react/jsx-dev-runtime";var Lp=({name:r,label:n,fields:a=[],value:o=[],onChange:p,disabled:m,readOnly:c,renderField:v})=>{let g=()=>{let y=Array.isArray(o)?o:[],l={};a.forEach((R)=>{if(R.name)if(R.defaultValue!==void 0)l[R.name]=R.defaultValue;else if(R.type==="boolean")l[R.name]=!1;else if(R.type==="number")l[R.name]=0;else if(R.type==="relationship"&&R.hasMany)l[R.name]=[];else if(R.type==="blocks")l[R.name]=[];else if(R.type==="array")l[R.name]=[];else l[R.name]=""}),p([...y,l])},i=(y)=>{let R=[...Array.isArray(o)?o:[]];R.splice(y,1),p(R)},N=(y,l,R)=>{let h=[...Array.isArray(o)?o:[]];h[y]={...h[y],[l]:R},p(h)},b=(y,l)=>{let u=[...Array.isArray(o)?o:[]];u[y]=l,p(u)};return lr("div",{className:"opaca-array-field",children:[lr("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"0.75rem"},children:lr("label",{htmlFor:r,className:"opaca-label",style:{marginBottom:0},children:n||zr(r)},void 0,!1,void 0,this)},void 0,!1,void 0,this),lr("div",{style:{display:"flex",flexDirection:"column",gap:"1rem"},children:[(Array.isArray(o)?o:[]).map((y,l)=>lr("div",{style:{border:"1px solid var(--opaca-border)",borderRadius:"var(--opaca-radius-lg)",backgroundColor:"rgba(255, 255, 255, 0.02)",padding:"1rem",position:"relative"},children:[lr("div",{style:{display:"flex",justifyContent:"flex-end",marginBottom:"0.5rem"},children:!m&&!c&&lr(d,{type:"button",variant:"ghost",size:"icon",onClick:()=>i(l),style:{color:"var(--opaca-text-dim)",height:"24px",width:"24px"},children:lr(Ki,{size:14},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this),lr("div",{style:{display:"flex",flexDirection:"column",gap:"1rem"},children:a.map((R,u)=>lr("div",{className:"array-field-item",children:v(R,R.name?y[R.name]:y,(h)=>{if(R.name)N(l,R.name,h);else b(l,h)})},R.name||u,!1,void 0,this))},void 0,!1,void 0,this)]},y||l,!0,void 0,this)),!m&&!c&&lr(d,{type:"button",variant:"outline",size:"sm",onClick:g,style:{display:"flex",alignItems:"center",gap:"6px",fontSize:"0.75rem",width:"fit-content"},children:[lr(Gi,{size:12},void 0,!1,void 0,this),"Add Item"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)};import{Plus as Pi,Trash2 as Ji}from"lucide-react";import{jsxDEV as tr}from"react/jsx-dev-runtime";var Cp=({name:r,label:n,blocks:a,value:o=[],onChange:p,disabled:m,readOnly:c,renderField:v})=>{let g=(b)=>{let y=Array.isArray(o)?o:[],l=a.find((u)=>u.slug===b),R={blockType:b};if(l)l.fields.forEach((u)=>{if(u.name)if(u.defaultValue!==void 0)R[u.name]=u.defaultValue;else if(u.type==="boolean")R[u.name]=!1;else if(u.type==="number")R[u.name]=0;else if(u.type==="relationship"&&u.hasMany)R[u.name]=[];else if(u.type==="blocks")R[u.name]=[];else R[u.name]=""});p([...y,R])},i=(b)=>{let l=[...Array.isArray(o)?o:[]];l.splice(b,1),p(l)},N=(b,y,l)=>{let u=[...Array.isArray(o)?o:[]];u[b]={...u[b],[y]:l},p(u)};return tr(Ya,{label:n||r,className:"opaca-blocks-field",children:tr("div",{style:{display:"flex",flexDirection:"column",gap:"24px"},children:[(Array.isArray(o)?o:[]).map((b,y)=>{let l=a.find((R)=>R.slug===b.blockType);if(!l)return null;return tr("div",{style:{border:"1px solid var(--opaca-border)",borderRadius:"var(--opaca-radius-lg)",backgroundColor:"rgba(255, 255, 255, 0.02)",padding:"1.25rem",position:"relative",transition:"border-color var(--opaca-transition)"},className:"opaca-block-item",children:[tr("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"1.25rem",borderBottom:"1px solid var(--opaca-border)",paddingBottom:"0.75rem"},children:[tr("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[tr("div",{style:{width:"8px",height:"8px",borderRadius:"50%",backgroundColor:"var(--opaca-primary)"}},void 0,!1,void 0,this),tr("h4",{style:{margin:0,fontSize:"0.8125rem",fontWeight:600,color:"var(--opaca-text)"},children:l.label||zr(l.slug)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),!m&&!c&&tr(d,{type:"button",variant:"ghost",size:"icon",onClick:()=>i(y),style:{color:"var(--opaca-text-dim)",height:"24px",width:"24px"},children:tr(Ji,{size:14},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),tr("div",{style:{display:"flex",flexDirection:"column",gap:"1.25rem"},children:l.fields.map((R)=>tr("div",{className:"block-field-item",children:v(R,b[R.name],(u)=>N(y,R.name,u))},R.name,!1,void 0,this))},void 0,!1,void 0,this)]},`${b.blockType}-${y}`,!0,void 0,this)}),!m&&!c&&tr("div",{style:{marginTop:"0.5rem",padding:"1.25rem",border:"1px dashed var(--opaca-border)",borderRadius:"var(--opaca-radius-lg)",textAlign:"center"},children:[tr("p",{style:{fontSize:"0.75rem",fontWeight:500,color:"var(--opaca-text-muted)",textTransform:"uppercase",letterSpacing:"0.03em",marginBottom:"1rem"},children:"Add a new block:"},void 0,!1,void 0,this),tr("div",{style:{display:"flex",flexWrap:"wrap",gap:"0.75rem",justifyContent:"center"},children:a.map((b)=>tr(d,{type:"button",variant:"outline",size:"sm",onClick:()=>g(b.slug),style:{display:"flex",alignItems:"center",gap:"6px",fontSize:"0.75rem"},children:[tr(Pi,{size:12},void 0,!1,void 0,this),b.label||zr(b.slug)]},b.slug,!0,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)};import{jsxDEV as Or}from"react/jsx-dev-runtime";var Wp=({name:r,label:n,value:a,onChange:o,disabled:p,readOnly:m,error:c,renderType:v="switch"})=>{let g=p||m;return Or("div",{className:"opaca-form-group",children:[Or("label",{className:"opaca-label",htmlFor:`field-${r}`,children:n||r},void 0,!1,void 0,this),Or("label",{className:"opaca-switch",children:[Or("input",{id:`field-${r}`,type:"checkbox",checked:!!a,disabled:g,onChange:(i)=>o(i.target.checked)},void 0,!1,void 0,this),Or("div",{className:"opaca-switch-track",children:Or("div",{className:"opaca-switch-thumb"},void 0,!1,void 0,this)},void 0,!1,void 0,this),Or("span",{className:"opaca-switch-label",style:{minWidth:"60px"},children:a?"Enabled":"Disabled"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),c&&Or("span",{className:"opaca-field-error",children:c},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import{jsxDEV as In}from"react/jsx-dev-runtime";var Gp=({label:r,fields:n,parentData:a,disabled:o,readOnly:p,options:m,onChange:c,renderField:v})=>{let g=(b,y)=>{return y.split(".").reduce((l,R)=>l?.[R],b)},i=(b,y)=>{if(!b.includes("{{"))return g(y,b);return b.replace(/\{\{(.+?)\}\}/g,(l,R)=>{let u=g(y,R.trim());return u!==void 0&&u!==null?String(u):""})},N=m?.useAsTitle?i(m.useAsTitle,a):void 0;return In(qa,{defaultOpen:!m?.initiallyCollapsed,className:"opaca-collapsible-field",disabled:o,children:[In(Za,{className:"opaca-collapsible-field-trigger",children:N||r||"Section"},void 0,!1,void 0,this),In(Xa,{children:In("div",{style:{padding:"0",display:"flex",flexDirection:"column",gap:"1.25rem"},children:(n||[]).map((b,y)=>In("div",{className:"collapsible-field-item",children:v(b,b.name?a?.[b.name]:void 0,(l)=>b.name&&c(b.name,l))},b.name||`collapsible-item-${y}`,!1,void 0,this))},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import{jsxDEV as On}from"react/jsx-dev-runtime";var Kp=({name:r,label:n,value:a,onChange:o,required:p,disabled:m,readOnly:c,error:v})=>{let g=a?new Date(a).toISOString().split("T")[0]:"";return On("div",{className:"opaca-form-group",children:[On("label",{className:"opaca-label",htmlFor:`field-${r}`,children:[n||r,p&&On("span",{style:{color:"var(--opaca-error)",marginLeft:"4px"},children:"*"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),On("input",{id:`field-${r}`,type:"date",className:`opaca-input ${v?"error":""}`,value:g,readOnly:c,disabled:m,onChange:(i)=>o(i.target.value),required:p},void 0,!1,void 0,this),v&&On("span",{className:"opaca-field-error",children:v},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import{useEffect as Pp,useState as Sn}from"react";import{jsxDEV as Z,Fragment as Yi}from"react/jsx-dev-runtime";var Jp=({name:r,label:n,value:a,onChange:o,options:p,disabled:m,readOnly:c,bucket:v="default"})=>{let[g,i]=Sn(!1),[N,b]=Sn(null),[y,l]=Sn(!1),[R,u]=Sn(null),[h,G]=Sn(null),C=m||c,W=typeof a==="string"?a:a?.assetId;Pp(()=>{if(W&&(!a||typeof a==="string"||!a.filename))l(!0),M.get(`api/assets/${W}`).json().then((T)=>{b(T)}).catch((T)=>{console.error("Failed to fetch asset metadata",T)}).finally(()=>{l(!1)});else if(a&&typeof a==="object"&&a.filename)b(a);else b(null)},[W,a]),Pp(()=>{return()=>{if(R?.url)URL.revokeObjectURL(R.url)}},[R]);let A=async(T)=>{if(T.preventDefault(),C)return;let _=T.dataTransfer.files[0];if(!_)return;if(p?.allowedmime_types&&!p.allowedmime_types.includes(_.type)){G(`Invalid file type. Allowed: ${p.allowedmime_types.join(", ")}`);return}if(p?.maxFileSize&&_.size>p.maxFileSize){G(`File too large. Max size: ${p.maxFileSize/1024/1024}MB`);return}let w=URL.createObjectURL(_);u({url:w,file:_,progress:0}),G(null);let K=new FormData;K.append("file",_);try{let P=await M.post(`api/__system/assets/upload?bucket=${v}`,{body:K}).json(),q=P.id||P.assetId;u(null),o(q)}catch(P){u(null),G(P.message)}},s=()=>{if(C)return;o(null)},f=(T,_)=>{if(C)return;let w=typeof a==="object"?a.meta||{}:{};o({assetId:W,meta:{...w,[T]:_}})},U=(T)=>{if(!T)return"";if(T.url)return T.url;return`${cr()}/api/assets/${T.id||T.assetId}/view`};return Z("div",{className:`file-field-container ${C?"is-restricted":""}`,onDragOver:(T)=>!C&&T.preventDefault(),onDrop:A,children:[Z("div",{className:"file-field-label-row",children:[Z("label",{children:n||r},void 0,!1,void 0,this),h&&Z("span",{className:"upload-error",children:h},void 0,!1,void 0,this)]},void 0,!0,void 0,this),R?Z("div",{className:"file-field-optimistic-card",children:Z("div",{className:"optimistic-info",children:[R.file.type.startsWith("image/")?Z("img",{src:R.url,alt:"Uploading..."},void 0,!1,void 0,this):Z("div",{className:"file-icon-placeholder",children:Z("span",{children:"FILE"},void 0,!1,void 0,this)},void 0,!1,void 0,this),Z("div",{className:"optimistic-details",children:[Z("span",{className:"filename",children:R.file.name},void 0,!1,void 0,this),Z("span",{className:"progress-text",children:"Uploading..."},void 0,!1,void 0,this),Z("div",{className:"progress-bar-bg",children:Z("div",{className:"progress-bar-fill",style:{width:"50%"}},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this):N?Z(Yi,{children:[Z("div",{className:"file-field-asset-card",children:[Z("div",{className:"file-field-asset-info",children:[Z("div",{className:"asset-preview",children:(()=>{let T=N.mimeType||N.mime_type;if(T?.startsWith("image/"))return Z("img",{src:U(N),alt:N.filename},void 0,!1,void 0,this);return Z("div",{className:"file-icon-placeholder",children:Z("span",{children:T?.split("/")[1]?.toUpperCase()||"FILE"},void 0,!1,void 0,this)},void 0,!1,void 0,this)})()},void 0,!1,void 0,this),Z("div",{className:"asset-details",children:[Z("span",{className:"filename",title:N.filename,children:N.filename},void 0,!1,void 0,this),Z("span",{className:"filesize",children:N.filesize?`${(N.filesize/1024).toFixed(1)} KB`:"..."},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),!C&&Z("div",{className:"asset-actions",children:[Z("button",{type:"button",onClick:()=>i(!0),className:"replace-button",children:"Replace"},void 0,!1,void 0,this),Z("button",{type:"button",onClick:s,className:"remove-button",children:"Remove"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),p?.metaFields&&p.metaFields.length>0&&Z("div",{className:"file-field-metadata",children:[Z("h4",{children:"Contextual Metadata"},void 0,!1,void 0,this),p.metaFields.map((T)=>Z("div",{className:"metadata-field",children:[Z("label",{htmlFor:T.name,children:[T.label||T.name," ",T.required&&Z("span",{className:"required",children:"*"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),T.type==="textarea"?Z("textarea",{id:T.name,rows:3,value:(a?.meta||{})[T.name]||"",onChange:(_)=>f(T.name,_.target.value),readOnly:c,disabled:m,placeholder:C?"":`Enter ${T.label?.toLowerCase()||T.name}...`},void 0,!1,void 0,this):Z("input",{type:T.type==="number"?"number":"text",value:(a?.meta||{})[T.name]||"",onChange:(_)=>f(T.name,T.type==="number"?Number(_.target.value):_.target.value),readOnly:c,disabled:m,placeholder:C?"":`Enter ${T.label?.toLowerCase()||T.name}...`},void 0,!1,void 0,this)]},T.name,!0,void 0,this))]},void 0,!0,void 0,this)]},void 0,!0,void 0,this):y?Z("div",{className:"file-field-optimistic-card",children:Z("div",{className:"status-text",children:"Loading asset details..."},void 0,!1,void 0,this)},void 0,!1,void 0,this):Z("button",{type:"button",onClick:()=>!C&&i(!0),disabled:C,className:`file-field-empty-button ${C?"disabled":""}`,children:[Z("svg",{fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:Z("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"2",d:"M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-8l-4-4m0 0L8 8m4-4v12"},void 0,!1,void 0,this)},void 0,!1,void 0,this),Z("span",{children:C?"No file selected":"Drag a file here or click to select"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),g&&!C&&Z(Ur,{bucket:v,onClose:()=>i(!1),onSelect:(T)=>{if(!C)o(T.assetId),i(!1)},allowedmime_types:p?.allowedmime_types,maxFileSize:p?.maxFileSize},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import{jsxDEV as io}from"react/jsx-dev-runtime";var Yp=({name:r,label:n,fields:a,value:o,onChange:p,disabled:m,readOnly:c,renderField:v})=>{let g=(i,N)=>{p({...o||{},[i]:N})};return io(Aa,{label:n||r,className:"opaca-group-field",children:io("div",{className:"opaca-group-fields-container",style:{display:"flex",flexDirection:"column",gap:"16px"},children:(a||[]).map((i,N)=>io("div",{className:"group-field-item",children:v(i,i.name?o?.[i.name]:void 0,(b)=>i.name&&g(i.name,b))},i.name||`group-item-${N}`,!1,void 0,this))},void 0,!1,void 0,this)},void 0,!1,void 0,this)};import{jsxDEV as _p}from"react/jsx-dev-runtime";var qp=({name:r,label:n,collection:a,value:o,on:p})=>{return _p("div",{className:"opaca-form-group",children:_p(Qa,{label:n||r,collection:a,on:p},void 0,!1,void 0,this)},void 0,!1,void 0,this)};import{jsxDEV as Fn}from"react/jsx-dev-runtime";var Zp=({name:r,label:n,value:a,onChange:o,required:p,disabled:m,readOnly:c,placeholder:v,error:g})=>{return Fn("div",{className:"opaca-form-group",children:[Fn("label",{className:"opaca-label",htmlFor:`field-${r}`,children:[n||r,p&&Fn("span",{style:{color:"var(--opaca-error)",marginLeft:"4px"},children:"*"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),Fn("input",{id:`field-${r}`,type:"number",className:`opaca-input ${g?"error":""}`,value:a??"",readOnly:c,disabled:m,onChange:(i)=>o(i.target.valueAsNumber||0),placeholder:v||`Enter ${n||r}...`,required:p},void 0,!1,void 0,this),g&&Fn("span",{className:"opaca-field-error",children:g},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import{jsxDEV as Kr}from"react/jsx-dev-runtime";var Xp=({name:r,label:n,value:a,onChange:o,choices:p,required:m,disabled:c,readOnly:v,error:g})=>{let i=(p||[]).map((N)=>typeof N==="string"?{label:N,value:N}:N);return Kr("div",{className:"opaca-form-group",children:[Kr("label",{className:"opaca-label",children:[n||r,m&&Kr("span",{style:{color:"var(--opaca-error)",marginLeft:"4px"},children:"*"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),Kr(Ba,{value:a,onValueChange:o,disabled:c||v,name:r,className:"opaca-radio-field-group",children:Kr("div",{style:{display:"flex",flexDirection:"column",gap:"8px",padding:"8px 0"},children:i.map((N)=>Kr("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[Kr(ka,{value:N.value,id:`radio-${r}-${N.value}`},void 0,!1,void 0,this),Kr(Zr,{htmlFor:`radio-${r}-${N.value}`,style:{cursor:c||v?"not-allowed":"pointer"},children:N.label},void 0,!1,void 0,this)]},N.value,!0,void 0,this))},void 0,!1,void 0,this)},void 0,!1,void 0,this),g&&Kr("span",{className:"opaca-field-error",children:g},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import{Check as Qi,Info as Qp,Loader2 as Bi,Search as ki}from"lucide-react";import{useCallback as $i,useEffect as Mi,useState as dn}from"react";import{useStore as _i}from"@nanostores/react";import{AlertCircle as qi,Loader2 as Zi}from"lucide-react";import{useEffect as Xi,useMemo as Ai,useState as yo}from"react";import{jsxDEV as mr}from"react/jsx-dev-runtime";var Ap=({isOpen:r,onOpenChange:n,relationTo:a,id:o})=>{let[p,m]=yo(null),[c,v]=yo(!1),[g,i]=yo(null),N=_i(Rr),b=Ai(()=>{return N?.collections.find((y)=>y.slug===a||y.apiPath===a)},[N,a]);return Xi(()=>{if(r&&o&&a)v(!0),i(null),M.get(`api/${a}/${o}`).json().then((y)=>{m(y),v(!1)}).catch((y)=>{console.error("Failed to fetch relation details:",y),i("Failed to load document details."),v(!1)});else m(null)},[r,o,a]),mr(Ar,{open:r,onOpenChange:n,children:mr(Qr,{className:"p-0 sm:max-w-[500px]",onClose:()=>n(!1),children:mr("div",{style:{display:"flex",flexDirection:"column",height:"100%"},children:[mr("div",{style:{padding:"1.5rem 1.5rem 1rem"},children:[mr(Br,{children:mr(kr,{children:[b?.label||a," Details"]},void 0,!0,void 0,this)},void 0,!1,void 0,this),mr("div",{style:{fontSize:"0.875rem",color:"var(--opaca-text-dim)",marginTop:"0.25rem"},children:["ID: ",o]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),mr("div",{style:{flex:1,overflowY:"auto",padding:"1.5rem"},children:c?mr("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",padding:"3rem",gap:"0.75rem"},children:[mr(Zi,{size:20,className:"opaca-spin"},void 0,!1,void 0,this),mr("span",{style:{color:"var(--opaca-text-dim)"},children:"Loading details..."},void 0,!1,void 0,this)]},void 0,!0,void 0,this):g?mr("div",{style:{padding:"1rem",backgroundColor:"rgba(239, 68, 68, 0.1)",border:"1px solid var(--opaca-error)",color:"var(--opaca-error)",borderRadius:"var(--opaca-radius)",display:"flex",alignItems:"center",gap:"0.75rem"},children:[mr(qi,{size:18},void 0,!1,void 0,this),g]},void 0,!0,void 0,this):p&&b?mr("div",{style:{display:"grid",gap:"1.5rem"},children:b.fields.map((y,l)=>mr(yr,{field:y,value:y.name?p[y.name]:void 0,onChange:()=>{},readOnly:!0,disabled:!0,parentData:p},y.name||l,!1,void 0,this))},void 0,!1,void 0,this):mr("div",{style:{textAlign:"center",padding:"2rem",opacity:0.5},children:"No details found for this document."},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)};import{jsxDEV as I}from"react/jsx-dev-runtime";var Bp=({name:r,label:n,relationTo:a,value:o,onChange:p,disabled:m,readOnly:c,error:v,displayField:g,hasMany:i})=>{let[N,b]=dn(!1),[y,l]=dn([]),[R,u]=dn(!1),[h,G]=dn(""),[C,W]=dn({open:!1,id:""}),A=$i(async()=>{u(!0);try{let T=await M.get(`api/${a}`).json(),_=T.docs||T;l(Array.isArray(_)?_:[])}catch(T){console.error("Failed to fetch relation items:",T)}finally{u(!1)}},[a]);Mi(()=>{if(N&&y.length===0)A()},[N,y.length,A]);let s=(T)=>{if(i||Array.isArray(o)){let _=Array.isArray(o)?o:[],w=String(T),K=_.map(String),P=K.includes(w)?K.filter((q)=>q!==w):[...K,w];p(P)}else p(String(T)===String(o)?null:String(T)),b(!1)},f=(T)=>{if(i||Array.isArray(o))return(Array.isArray(o)?o:[]).map(String).includes(String(T));return String(o)===String(T)},U=y.filter((T)=>{return(T[g||""]||T.name||T.title||T.id||"").toLowerCase().includes(h.toLowerCase())});return I("div",{className:"opaca-form-group",children:[I($a,{label:n||r,relationTo:a,className:v?"error":"",onClick:()=>!m&&!c&&b(!0),children:I("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",width:"100%"},children:[o?I("div",{style:{display:"flex",gap:"4px",flexWrap:"wrap",alignItems:"center"},children:Array.isArray(o)||i?I("span",{className:"opaca-badge",children:[(Array.isArray(o)?o:[]).length," items linked"]},void 0,!0,void 0,this):I("span",{className:"opaca-text-primary",children:y.find((T)=>String(T.id)===String(o))?.[g||""]||o},void 0,!1,void 0,this)},void 0,!1,void 0,this):I("span",{style:{opacity:0.5},children:["Select ",a,"..."]},void 0,!0,void 0,this),o&&!Array.isArray(o)&&!i&&I("button",{type:"button",className:"opaca-btn-ghost opaca-btn-sm",style:{padding:"2px",marginLeft:"auto",borderRadius:"50%",minWidth:"24px",height:"24px"},onClick:(T)=>{T.stopPropagation(),W({open:!0,id:o})},title:"View Details",children:I(Qp,{size:14},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),v&&I("span",{className:"opaca-field-error",children:v},void 0,!1,void 0,this),I(Ar,{open:N,onOpenChange:b,children:I(Qr,{onClose:()=>b(!1),children:I("div",{style:{width:"100%",display:"flex",flexDirection:"column",height:"100%"},children:[I(Br,{children:I(kr,{children:["Select ",a]},void 0,!0,void 0,this)},void 0,!1,void 0,this),I("div",{style:{marginTop:"1.5rem",marginBottom:"1rem"},children:I("div",{className:"opaca-input-wrapper",style:{position:"relative"},children:[I(ki,{size:16,style:{position:"absolute",left:"12px",top:"50%",transform:"translateY(-50%)",opacity:0.5}},void 0,!1,void 0,this),I("input",{type:"text",placeholder:"Search...",className:"opaca-input",style:{paddingLeft:"36px"},value:h,onChange:(T)=>G(T.target.value)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),I("div",{style:{overflowY:"auto",flex:1,minHeight:0},children:R?I("div",{style:{display:"flex",justifyContent:"center",padding:"2rem"},children:I(Bi,{className:"opaca-spin",size:24},void 0,!1,void 0,this)},void 0,!1,void 0,this):U.length===0?I("div",{style:{textAlign:"center",padding:"2rem",opacity:0.5},children:"No items found."},void 0,!1,void 0,this):I("div",{style:{display:"flex",flexDirection:"column",gap:"4px"},children:U.map((T)=>I("div",{style:{position:"relative"},children:[I("button",{type:"button",onClick:()=>s(T.id),className:Y("opaca-item-button",f(T.id)&&"active"),style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"0.75rem 2.5rem 0.75rem 1rem",borderRadius:"var(--opaca-radius)",border:"1px solid var(--opaca-border)",background:f(T.id)?"var(--opaca-primary-glow)":"var(--opaca-surface)",color:"var(--opaca-text)",textAlign:"left",cursor:"pointer",transition:"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)",width:"100%",marginBottom:"0.5rem",boxShadow:"0 1px 2px rgba(0,0,0,0.05)"},children:[I("div",{children:[I("div",{style:{fontWeight:500,color:f(T.id)?"var(--opaca-accent)":"var(--opaca-text)"},children:T[g||""]||T.name||T.title||T.id},void 0,!1,void 0,this),(T.name||T.title||g)&&T.id&&I("div",{style:{fontSize:"0.75rem",color:"var(--opaca-text-dim)"},children:["ID: ",T.id]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),f(T.id)&&I(Qi,{size:16,style:{color:"var(--opaca-accent)"}},void 0,!1,void 0,this)]},void 0,!0,void 0,this),I("button",{type:"button",className:"opaca-btn-ghost opaca-btn-sm",style:{position:"absolute",right:"10px",top:"50%",transform:"translateY(-50%)",padding:"4px",borderRadius:"50%",zIndex:2},onClick:(_)=>{_.stopPropagation(),W({open:!0,id:T.id})},children:I(Qp,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},T.id,!0,void 0,this))},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this),I(Ap,{isOpen:C.open,onOpenChange:(T)=>W((_)=>({..._,open:T})),relationTo:a,id:C.id},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import{jsxDEV as kp}from"react/jsx-dev-runtime";var $p=({fields:r,parentData:n,onChange:a,renderField:o})=>{return kp("div",{className:"opaca-row-field",children:r.map((p,m)=>kp("div",{className:"row-item",style:p.admin?.width?{flex:`0 0 ${p.admin.width}`,width:p.admin.width}:void 0,children:o(p,p.name?n?.[p.name]:void 0,(c)=>p.name&&a(p.name,c))},p.name||`row-item-${m}`,!1,void 0,this))},void 0,!1,void 0,this)};import{jsxDEV as Pr}from"react/jsx-dev-runtime";var Mp=({name:r,label:n,value:a,onChange:o,choices:p,required:m,disabled:c,readOnly:v,placeholder:g,error:i})=>{return Pr("div",{className:"opaca-form-group",children:[Pr("label",{className:"opaca-label",htmlFor:`field-${r}`,children:[n||r,m&&Pr("span",{style:{color:"var(--opaca-error)",marginLeft:"4px"},children:"*"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),Pr(cn,{value:a,onValueChange:o,disabled:c||v,placeholder:g||`Select ${n||r}...`,children:[Pr(yn,{className:i?"error":"",children:Pr(bn,{},void 0,!1,void 0,this)},void 0,!1,void 0,this),Pr(gn,{children:(p||[]).map((N)=>{let b=typeof N==="string"?{label:N,value:N}:N;return Pr(Xr,{value:b.value,children:b.label},b.value,!1,void 0,this)})},void 0,!1,void 0,this)]},void 0,!0,void 0,this),i&&Pr("span",{className:"opaca-field-error",children:i},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import Ui from"react";import{jsxDEV as Sr}from"react/jsx-dev-runtime";var Up=({tabs:r,value:n,onChange:a,disabled:o,readOnly:p,renderField:m})=>{let[c,v]=Ui.useState(r?.[0]?.label||""),g=(i,N)=>{if(n!==void 0)a({...n||{},[i]:N});else a(i,N)};if(!r||r.length===0)return null;return Sr("div",{className:"opaca-tabs-field",children:Sr(Ua,{value:c,onValueChange:v,children:[Sr(Ia,{children:r.map((i)=>Sr(Oa,{value:i.label,children:i.label},i.label,!1,void 0,this))},void 0,!1,void 0,this),Sr("div",{children:r.map((i)=>Sr(Sa,{value:i.label,children:Sr("div",{style:{display:"flex",flexDirection:"column",gap:"1.25rem"},children:i.fields.map((N,b)=>{let y=n!==void 0&&N.name?n[N.name]:void 0;return Sr("div",{className:"tab-field-item",children:m(N,y,(l)=>{if(n!==void 0&&N.name)g(N.name,l);else if(N.name)a(N.name,l);else a(l)})},N.name||`tab-item-${i.label}-${b}`,!1,void 0,this)})},void 0,!1,void 0,this)},i.label,!1,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)};import{jsxDEV as en}from"react/jsx-dev-runtime";var Ip=({name:r,label:n,value:a,onChange:o,required:p,disabled:m,readOnly:c,placeholder:v,error:g})=>{return en("div",{className:"opaca-form-group",children:[en("label",{className:"opaca-label",htmlFor:`field-${r}`,children:[n||r,p&&en("span",{style:{color:"var(--opaca-error)",marginLeft:"4px"},children:"*"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),en("textarea",{id:`field-${r}`,className:`opaca-input ${g?"error":""}`,style:{minHeight:"160px",resize:"vertical",padding:"1rem",lineHeight:"1.5"},value:a||"",readOnly:c,disabled:m,onChange:(i)=>{let N=i.target.value;o(N===""&&!p?null:N)},placeholder:v||`Enter ${n||r}...`,required:p},void 0,!1,void 0,this),g&&en("span",{className:"opaca-field-error",children:g},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import{jsxDEV as sn}from"react/jsx-dev-runtime";var Op=({name:r,label:n,value:a,onChange:o,required:p,disabled:m,readOnly:c,placeholder:v,error:g})=>{return sn("div",{className:"opaca-form-group",children:[sn("label",{className:"opaca-label",htmlFor:`field-${r}`,children:[n||r,p&&sn("span",{style:{color:"var(--opaca-error)",marginLeft:"4px"},children:"*"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),sn("input",{id:`field-${r}`,type:"text",className:`opaca-input ${g?"error":""}`,value:a||"",readOnly:c,disabled:m,onChange:(i)=>{let N=i.target.value;o(N===""&&!p?null:N)},placeholder:v||`Enter ${n||r}...`,required:p},void 0,!1,void 0,this),g&&sn("span",{className:"opaca-field-error",children:g},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import{jsxDEV as wa}from"react/jsx-dev-runtime";var Sp=({name:r,label:n,value:a})=>{let o=a===null||a===void 0?"":typeof a==="object"?JSON.stringify(a):String(a);return wa("div",{className:"opaca-form-group",children:[wa("label",{className:"opaca-label",htmlFor:`field-${r}`,children:[n||r,wa("span",{style:{color:"rgba(255, 255, 255, 0.4)",marginLeft:"8px",fontSize:"11px",fontWeight:"normal",textTransform:"uppercase",letterSpacing:"0.5px"},children:"(Computed)"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),wa("div",{className:"opaca-input read-only virtual",style:{backgroundColor:"rgba(255, 255, 255, 0.03)",minHeight:"42px",display:"flex",alignItems:"center",padding:"0 12px",borderRadius:"8px",border:"1px solid rgba(255, 255, 255, 0.05)",color:"rgba(255, 255, 255, 0.7)",fontSize:"14px",fontFamily:"monospace"},children:o},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import{jsxDEV as $}from"react/jsx-dev-runtime";var Fi=({tagName:r,field:n,value:a,onChange:o,isDisabled:p,isReadOnly:m,error:c,parentData:v})=>{let g=Si(null);return Oi(()=>{let i=g.current;if(i){i.value=a,i.fieldConfig=n,i.error=c,i.parentData=v;let N=(b)=>{let y=b.detail;if(y&&"value"in y)o(y.value)};return i.addEventListener("opacachange",N),()=>{i.removeEventListener("opacachange",N)}}},[a,n,o,c,v]),$("div",{className:"opaca-form-group",children:[$("label",{htmlFor:n.name,className:"opaca-label",children:[n.label||(n.name?zr(n.name):void 0),n.required&&$("span",{style:{color:"var(--opaca-error)",marginLeft:"4px"},children:"*"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),Ii.createElement(r,{ref:g,id:n.name,"data-name":n.name,"data-disabled":p?"true":void 0,"data-readonly":m?"true":void 0,className:"opaca-custom-field"}),c&&$("span",{className:"opaca-field-error",children:c},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},yr=({field:r,value:n,onChange:a,disabled:o,readOnly:p,error:m,parentData:c})=>{let v=r.name?c?._access?.[r.name]||{}:{},g=p||v.readOnly||(typeof r.access?.readOnly==="boolean"?r.access.readOnly:!1),i=o||v.disabled||(typeof r.access?.disabled==="boolean"?r.access.disabled:!1)||g;if(r.type==="slug"||v.hidden||(typeof r.access?.hidden==="boolean"?r.access.hidden:!1))return null;let b={name:r.name,label:r.label||(r.name?zr(r.name):void 0),value:n,onChange:a,required:r.required,disabled:i,readOnly:g,error:m,placeholder:r.placeholder};if(r.admin?.components?.Field&&typeof r.admin.components.Field==="string")return $(Fi,{tagName:r.admin.components.Field,field:r,value:n,onChange:a,isDisabled:i,isReadOnly:g,error:m,parentData:c},void 0,!1,void 0,this);switch(r.type){case"text":return $(Op,{...b},void 0,!1,void 0,this);case"virtual":return $(Sp,{name:b.name,label:b.label,value:n},void 0,!1,void 0,this);case"textarea":return $(Ip,{...b},void 0,!1,void 0,this);case"number":return $(Zp,{...b},void 0,!1,void 0,this);case"date":return $(Kp,{...b},void 0,!1,void 0,this);case"boolean":return $(Wp,{...b},void 0,!1,void 0,this);case"select":return $(Mp,{...b,choices:r.choices||r.options?.choices||[]},void 0,!1,void 0,this);case"file":return $(Jp,{...b,options:r.options,bucket:r.bucket},void 0,!1,void 0,this);case"radio":return $(Xp,{...b,choices:r.choices||r.options?.choices||[]},void 0,!1,void 0,this);case"row":return $($p,{fields:r.fields||[],parentData:c,disabled:i,readOnly:g,onChange:(y,l)=>{if(c&&typeof c==="object"&&!Array.isArray(c))a({...c,[y]:l});else a(l)},renderField:(y,l,R)=>$(yr,{field:y,value:y.name&&l===void 0?c?.[y.name]:l,onChange:R,disabled:i,readOnly:g,parentData:c},void 0,!1,void 0,this)},void 0,!1,void 0,this);case"group":return $(Yp,{...b,fields:r.fields||[],renderField:(y,l,R)=>$(yr,{field:y,value:y.name&&l===void 0?c?.[y.name]:l,onChange:R,disabled:i,readOnly:g,parentData:n},void 0,!1,void 0,this)},void 0,!1,void 0,this);case"tabs":return $(Up,{...b,tabs:r.tabs||[],parentData:c,onChange:(y,l)=>{if(c&&typeof c==="object"&&!Array.isArray(c))a({...c,[y]:l});else a(l)},renderField:(y,l,R)=>$(yr,{field:y,value:y.name&&n===void 0?c?.[y.name]:l,onChange:R,disabled:i,readOnly:g,parentData:c},void 0,!1,void 0,this)},void 0,!1,void 0,this);case"collapsible":return $(Gp,{...b,fields:r.fields||[],parentData:c,options:r.options,onChange:(y,l)=>{if(c&&typeof c==="object"&&!Array.isArray(c))a({...c,[y]:l});else a(l)},renderField:(y,l,R)=>$(yr,{field:y,value:l,onChange:R,disabled:i,readOnly:g,parentData:c},void 0,!1,void 0,this)},void 0,!1,void 0,this);case"blocks":return $(Cp,{...b,blocks:r.blocks||r.options?.blocks||[],renderField:(y,l,R)=>$(yr,{field:y,value:l,onChange:R,disabled:i,readOnly:g,parentData:l},void 0,!1,void 0,this)},void 0,!1,void 0,this);case"relationship":return $(Bp,{...b,relationTo:r.relationTo||r.options?.relationTo,displayField:r.displayField||r.options?.displayField,hasMany:r.hasMany},void 0,!1,void 0,this);case"join":return $(qp,{...b,collection:r.collection||r.options?.collection},void 0,!1,void 0,this);case"array":return $(Lp,{...b,fields:r.fields||[],renderField:(y,l,R)=>$(yr,{field:y,value:l,onChange:R,disabled:i,readOnly:g,parentData:l},void 0,!1,void 0,this)},void 0,!1,void 0,this);case"richtext":return $("div",{className:"opaca-form-group",children:[$("label",{htmlFor:r.name,className:"opaca-label",children:[r.label||(r.name?zr(r.name):void 0),r.required&&$("span",{style:{color:"var(--opaca-error)",marginLeft:"4px"},children:"*"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),$(ha,{value:n||"",onChange:a,disabled:i,readOnly:g,defaultMode:r.options?.defaultMode},void 0,!1,void 0,this),m&&$("span",{className:"opaca-field-error",children:m},void 0,!1,void 0,this)]},void 0,!0,void 0,this);default:return console.warn("FieldRenderer: fallback to default for type:",r.type,r),$("div",{className:"opaca-form-group",children:[$("label",{htmlFor:r.name,className:"opaca-label",children:[r.label||(r.name?zr(r.name):void 0)," (Unknown Type:"," ",r.type,") "]},void 0,!0,void 0,this),$("input",{type:"text",className:"opaca-input",value:n||"",readOnly:!0,disabled:!0},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}};import{Children as di,cloneElement as ei,isValidElement as si,useState as xi}from"react";import{jsxDEV as wr,Fragment as Ei}from"react/jsx-dev-runtime";function xn({children:r,trigger:n,title:a,description:o,onConfirm:p,confirmText:m="Continue",cancelText:c="Cancel",variant:v="default"}){let[g,i]=xi(!1),N=()=>{p(),i(!1)},b=n||r;return wr(Ei,{children:[(()=>{if(di.count(b)===1&&si(b)){let l=b;return ei(l,{onClick:(R)=>{let u=l.props.onClick;if(u)u(R);i(!0)}})}return wr("span",{role:"button",tabIndex:0,onClick:()=>i(!0),onKeyDown:(l)=>{if(l.key==="Enter"||l.key===" ")l.preventDefault(),i(!0)},style:{display:"inline-block",cursor:"pointer"},children:b},void 0,!1,void 0,this)})(),wr(Ln,{open:g,onOpenChange:i,children:wr(Cn,{className:"opaca-dialog-max-w",children:[wr(Wn,{children:[wr(Gn,{children:a},void 0,!1,void 0,this),wr(ta,{children:o},void 0,!1,void 0,this)]},void 0,!0,void 0,this),wr(Kn,{children:[wr(d,{variant:"outline",onClick:()=>i(!1),children:c},void 0,!1,void 0,this),wr(d,{variant:v,onClick:N,children:m},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}import{jsxDEV as Q}from"react/jsx-dev-runtime";var ay=async(r,n,a)=>{if(n==="create")return{};let o={};if(a)o["x-opaca-locale"]=a;return await M.get(`api/${r}/${n}`,{headers:o}).json()},oy=async(r,n,a,o)=>{let p={...a};for(let c in p)if(p[c]==="")p[c]=null;let m={};if(o)m["x-opaca-locale"]=o;if(n&&n!=="create")return M.patch(`api/${r}/${n}`,{json:p,headers:m}).json();return M.post(`api/${r}`,{json:p,headers:m}).json()};function sp({collection:r,id:n,onBack:a}){let o=r.apiPath||r.slug,p=o,m=bo(Rr),[c,v]=ny(m?.i18n?.defaultLocale||"en"),g=ep(()=>$r([o,n,c],{fetcher:()=>ay(o,n,c)}),[o,n,c]),i=ep(()=>_n(async({data:W})=>{return oy(o,n,W,c)}),[o,n,c]),N=bo(g),b=bo(i),y=N.loading,l=b.loading,R=N.error||b.error,u=!!r.versions?.drafts,h=Vi({defaultValues:N.data||{},onSubmit:async({value:W})=>{try{await i.mutate(W),S(`Document ${n==="create"?"created":"updated"} successfully`,"success"),a()}catch(A){let s="Failed to save document";if(A.response)try{let f=await A.response.json();if(s=f.message||s,f.errors)Object.keys(f.errors).forEach((U)=>{if(U==="_errors")return;h.setErrorMap({onChange:f.errors[U]._errors.join(", ")})})}catch(f){}S(s,"error")}}});ry(()=>{if(N.data&&!N.loading)h.reset(N.data)},[N.data,N.loading,h,c]);let G=async(W,A="published")=>{if(W)W.preventDefault();if(W?.stopPropagation(),u)h.setFieldValue("_status",A);await h.handleSubmit()},C=()=>{if(!h.state.isDirty)a()};if(y)return Q("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem",marginTop:"2rem",padding:"0 2.5rem"},children:[Q(go,{size:18,className:"opaca-spin"},void 0,!1,void 0,this),Q("span",{className:"opaca-subtitle",children:"Loading document..."},void 0,!1,void 0,this)]},void 0,!0,void 0,this);return Q("div",{className:"opaca-admin-form",children:[Q("div",{className:"opaca-header",children:[Q("div",{style:{display:"flex",alignItems:"center",gap:"1rem"},children:[h.state.isDirty?Q(xn,{title:"Unsaved Changes",description:"You have unsaved changes. Are you sure you want to discard them and leave?",onConfirm:a,variant:"destructive",children:Q("button",{type:"button",className:"opaca-btn opaca-btn-outline",style:{padding:"0.5rem"},title:"Go Back",children:Q(Fp,{size:18},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this):Q("button",{type:"button",onClick:C,className:"opaca-btn opaca-btn-outline",style:{padding:"0.5rem"},title:"Go Back",children:Q(Fp,{size:18},void 0,!1,void 0,this)},void 0,!1,void 0,this),Q("div",{children:[Q("h1",{className:"opaca-title",children:n==="create"?`Create ${r.label||r.slug}`:`Edit ${r.label||r.slug}`},void 0,!1,void 0,this),Q("p",{className:"opaca-subtitle",children:n==="create"?"Add a new entry to the collection.":`ID: ${n}`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),Q("div",{style:{display:"flex",gap:"0.75rem"},children:[m?.i18n&&m.i18n.locales.length>1&&Q("div",{className:"opaca-locale-switcher",children:m.i18n.locales.map((W)=>Q("button",{type:"button",className:`opaca-locale-btn ${c===W?"active":""}`,onClick:()=>{if(h.state.isDirty){if(confirm("Unsaved changes will be lost. Continue?"))v(W)}else v(W)},children:W.toUpperCase()},W,!1,void 0,this))},void 0,!1,void 0,this),n!=="create"&&Q(xn,{title:"Delete Document",description:"Are you sure you want to delete this document? This action cannot be undone.",onConfirm:async()=>{try{await M.delete(`api/${p}/${n}`),S("Document deleted successfully","success"),a()}catch(W){console.error(W),S("Failed to delete document","error")}},variant:"destructive",confirmText:"Delete",children:Q("button",{type:"button",className:"opaca-btn opaca-btn-outline",style:{color:"var(--opaca-error)",borderColor:"var(--opaca-error)"},title:"Delete Document",children:[Q(Di,{size:18},void 0,!1,void 0,this),"Delete"]},void 0,!0,void 0,this)},void 0,!1,void 0,this),Q(h.Subscribe,{selector:(W)=>[W.isDirty],children:([W])=>Q("div",{style:{display:"flex",gap:"0.75rem"},children:[u&&Q("button",{type:"button",onClick:(A)=>G(A,"draft"),disabled:l,className:"opaca-btn opaca-btn-outline",title:"Save as Draft",children:[l?Q(go,{size:18,className:"opaca-spin"},void 0,!1,void 0,this):Q(dp,{size:18},void 0,!1,void 0,this),"Save Draft"]},void 0,!0,void 0,this),Q("button",{type:"button",onClick:(A)=>G(A,"published"),disabled:l,className:"opaca-btn opaca-btn-primary",style:{position:"relative"},title:u?"Publish":"Save Changes",children:[l?Q(go,{size:18,className:"opaca-spin"},void 0,!1,void 0,this):Q(dp,{size:18},void 0,!1,void 0,this),n==="create"?u?"Publish":"Create":u?"Publish":"Save",W&&!l&&Q("span",{style:{position:"absolute",top:"-4px",right:"-4px",width:"10px",height:"10px",borderRadius:"50%",background:"var(--opaca-warning)",border:"2px solid var(--opaca-card-bg)",boxShadow:"0 1px 2px rgba(0,0,0,0.2)"},title:"Unsaved changes"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),R&&Q("div",{style:{padding:"1rem",backgroundColor:"rgba(239, 68, 68, 0.1)",border:"1px solid var(--opaca-error)",color:"var(--opaca-error)",borderRadius:"var(--opaca-radius)",marginBottom:"2rem",display:"flex",alignItems:"center",gap:"0.75rem",fontSize:"0.875rem"},children:[Q(ji,{size:18},void 0,!1,void 0,this),R]},void 0,!0,void 0,this),Q("div",{className:"opaca-card",style:{padding:"2.5rem"},children:Q("form",{id:"opaca-doc-form",onSubmit:(W)=>G(W),children:Q("div",{style:{display:"grid",gap:"2rem"},children:r.fields.map((W,A)=>{let s=W.name,f=s?N.data?._access?.[s]:{hidden:!1,readOnly:!1,disabled:!1};if(f?.hidden)return null;let U=f?.readOnly,T=f?.disabled||U;if(!s)return Q(h.Subscribe,{selector:(_)=>_.values,children:(_)=>Q(yr,{field:W,value:void 0,disabled:T,readOnly:U,onChange:(w,K)=>{if(typeof w==="string")h.setFieldValue(w,K)},parentData:_},void 0,!1,void 0,this)},A,!1,void 0,this);return Q(h.Field,{name:s,children:(_)=>Q(yr,{field:W,value:_.state.value,disabled:T,readOnly:U,onChange:(w)=>_.handleChange(w),parentData:h.state.values},void 0,!1,void 0,this)},s,!1,void 0,this)})},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}import{useStore as xp}from"@nanostores/react";import{AlertCircle as py,Loader2 as Ep,Save as ty}from"lucide-react";import{useEffect as vo,useState as No}from"react";Tr();import{jsxDEV as j}from"react/jsx-dev-runtime";function Vp({global:r}){let[n,a]=No({}),[o,p]=No({}),[m,c]=No(null),{data:v,loading:g,error:i}=xp(Oo),{mutate:N,loading:b}=xp(So),y=JSON.stringify(n)!==JSON.stringify(o);vo(()=>{sa.set(r.slug)},[r.slug]),vo(()=>{if(v){let R={...v};delete R.id,delete R.createdAt,delete R.updatedAt;let u={...R};if(Object.keys(R).length===0)r.fields.forEach((h)=>{if(!h.name)return;if(h.defaultValue!==void 0)u[h.name]=h.defaultValue;else if(h.type==="boolean")u[h.name]=!1;else if(h.type==="number")u[h.name]=0;else if(h.type==="array"||h.type==="blocks"||h.type==="relationship"&&h.hasMany)u[h.name]=[];else u[h.name]=""});a(u),p(u),c(null)}},[v,r.fields]),vo(()=>{if(i)c("Failed to load global document."),S("Error loading global document","error")},[i]);let l=async(R)=>{if(R)R.preventDefault();c(null);try{await N({slug:r.slug,body:n}),S("Changes saved successfully","success"),p(n)}catch(u){console.error(u),c(u instanceof Error?u.message:"Failed to save document."),S("Failed to save changes","error")}};if(g)return j("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem",marginTop:"2rem",padding:"0 2.5rem"},children:[j(Ep,{size:18,className:"opaca-spin"},void 0,!1,void 0,this),j("span",{className:"opaca-subtitle",children:"Loading settings..."},void 0,!1,void 0,this)]},void 0,!0,void 0,this);return j("div",{className:"opaca-admin-form",children:[j("div",{className:"opaca-header",children:[j("div",{style:{display:"flex",alignItems:"center",gap:"1rem"},children:j("div",{children:[j("h1",{className:"opaca-title",children:r.label||r.slug.charAt(0).toUpperCase()+r.slug.slice(1)},void 0,!1,void 0,this),j("p",{className:"opaca-subtitle",children:"Manage global settings."},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),j("div",{style:{display:"flex",gap:"0.75rem"},children:j("button",{type:"button",onClick:()=>l(),disabled:b,className:"opaca-btn opaca-btn-primary",style:{position:"relative"},title:"Save Changes",children:[b?j(Ep,{size:18,className:"opaca-spin"},void 0,!1,void 0,this):j(ty,{size:18},void 0,!1,void 0,this),"Save",y&&!b&&j("span",{style:{position:"absolute",top:"-4px",right:"-4px",width:"10px",height:"10px",borderRadius:"50%",background:"var(--opaca-warning)",border:"2px solid var(--opaca-card-bg)",boxShadow:"0 1px 2px rgba(0,0,0,0.2)"},title:"Unsaved changes"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),m&&j("div",{style:{padding:"1rem",backgroundColor:"rgba(239, 68, 68, 0.1)",border:"1px solid var(--opaca-error)",color:"var(--opaca-error)",borderRadius:"var(--opaca-radius)",marginBottom:"2rem",display:"flex",alignItems:"center",gap:"0.75rem",fontSize:"0.875rem"},children:[j(py,{size:18},void 0,!1,void 0,this),m]},void 0,!0,void 0,this),j("div",{className:"opaca-card",style:{padding:"2.5rem"},children:j("form",{id:"opaca-doc-form",onSubmit:l,children:j("div",{style:{display:"grid",gap:"2rem"},children:r.fields.map((R,u)=>{let h=R.name;if(!h)return j(yr,{field:R,value:void 0,onChange:(G,C)=>{if(typeof G==="string")a({...n,[G]:C});else Object.assign(n,C),a({...n})},parentData:n},R.name||u,!1,void 0,this);return j(yr,{field:R,value:n[h],onChange:(G)=>{a({...n,[h]:G})},parentData:n},h,!1,void 0,this)})},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}Dn();import{AlertCircle as my,Loader2 as cy,Lock as jp,ShieldCheck as iy,User as yy}from"lucide-react";import{useState as En}from"react";import{jsxDEV as F,Fragment as by}from"react/jsx-dev-runtime";function Dp({onSuccess:r}){let[n,a]=En(""),[o,p]=En(""),[m,c]=En(""),[v,g]=En(!1),[i,N]=En(null);return F("div",{className:"opaca-login-container",children:F("div",{className:"opaca-login-card",children:[F("div",{className:"opaca-login-header",children:[F("div",{className:"opaca-login-logo",children:F(iy,{size:24,color:"white"},void 0,!1,void 0,this)},void 0,!1,void 0,this),F("h1",{className:"opaca-title",children:"Welcome to OpacaCMS"},void 0,!1,void 0,this),F("p",{className:"opaca-subtitle",children:"Create the first administrator account to get started."},void 0,!1,void 0,this)]},void 0,!0,void 0,this),i&&F("div",{className:"opaca-login-error",children:[F(my,{size:14},void 0,!1,void 0,this),i]},void 0,!0,void 0,this),F("form",{onSubmit:async(y)=>{if(y.preventDefault(),g(!0),N(null),o!==m){N("Passwords do not match"),g(!1);return}try{let l=await on.signUp.email({email:n,password:o,name:"Admin"});if(l.error)throw Error(l.error.message||"Failed to create admin user");r()}catch(l){console.error(l),N(l instanceof Error?l.message:"Initialization failed")}finally{g(!1)}},children:[F("div",{className:"opaca-form-group",children:[F("label",{htmlFor:"init-email",className:"opaca-label",children:"Admin Email"},void 0,!1,void 0,this),F("div",{style:{position:"relative"},children:[F(yy,{size:14,style:{position:"absolute",left:"0.75rem",top:"50%",transform:"translateY(-50%)",color:"var(--opaca-text-dim)"}},void 0,!1,void 0,this),F("input",{id:"init-email",type:"email",className:"opaca-input",style:{paddingLeft:"2.25rem"},placeholder:"admin@example.com",value:n,onChange:(y)=>a(y.target.value),required:!0},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),F("div",{className:"opaca-form-group",children:[F("label",{htmlFor:"init-password",className:"opaca-label",children:"Password"},void 0,!1,void 0,this),F("div",{style:{position:"relative"},children:[F(jp,{size:14,style:{position:"absolute",left:"0.75rem",top:"50%",transform:"translateY(-50%)",color:"var(--opaca-text-dim)"}},void 0,!1,void 0,this),F("input",{id:"init-password",type:"password",className:"opaca-input",style:{paddingLeft:"2.25rem"},placeholder:"••••••••",value:o,onChange:(y)=>p(y.target.value),required:!0,minLength:8},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),F("div",{className:"opaca-form-group",children:[F("label",{htmlFor:"init-confirm",className:"opaca-label",children:"Confirm Password"},void 0,!1,void 0,this),F("div",{style:{position:"relative"},children:[F(jp,{size:14,style:{position:"absolute",left:"0.75rem",top:"50%",transform:"translateY(-50%)",color:"var(--opaca-text-dim)"}},void 0,!1,void 0,this),F("input",{id:"init-confirm",type:"password",className:"opaca-input",style:{paddingLeft:"2.25rem"},placeholder:"••••••••",value:m,onChange:(y)=>c(y.target.value),required:!0,minLength:8},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),F("button",{type:"submit",className:"opaca-btn opaca-btn-primary",style:{width:"100%",marginTop:"0.5rem"},disabled:v,children:v?F(by,{children:[F(cy,{className:"opaca-spin",size:14},void 0,!1,void 0,this),"Initializing..."]},void 0,!0,void 0,this):"Create Admin Account"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),F("p",{className:"opaca-subtitle",style:{fontSize:"0.6875rem",textAlign:"center",marginTop:"1.25rem"},children:"This account will have full access to manage OpacaCMS."},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}import{AlertCircle as gy,Loader2 as vy,Lock as rt,User as Ny}from"lucide-react";import{useState as Ta}from"react";import{jsxDEV as x,Fragment as ly}from"react/jsx-dev-runtime";function nt({onLogin:r}){let[n,a]=Ta(""),[o,p]=Ta(""),[m,c]=Ta(!1),[v,g]=Ta(null);return x("div",{className:"opaca-login-container",children:x("div",{className:"opaca-login-card",children:[x("div",{style:{textAlign:"center",marginBottom:"1.5rem"},children:[x("div",{className:"opaca-logo-circle",style:{margin:"0 auto 1rem"},children:x(rt,{size:22},void 0,!1,void 0,this)},void 0,!1,void 0,this),x("h1",{className:"opaca-title",children:"Admin Login"},void 0,!1,void 0,this),x("p",{className:"opaca-subtitle",children:"Authenticate to access the dashboard"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),v&&x("div",{className:"opaca-login-error",children:[x(gy,{size:14},void 0,!1,void 0,this),v]},void 0,!0,void 0,this),x("form",{onSubmit:async(N)=>{N.preventDefault(),c(!0),g(null);try{await r({email:n,password:o})}catch(b){console.error(b),g(b instanceof Error?b.message:"Invalid email or password")}finally{c(!1)}},children:[x("div",{className:"opaca-form-group",children:[x("label",{htmlFor:"login-email",className:"opaca-label",children:"Email"},void 0,!1,void 0,this),x("div",{style:{position:"relative"},children:[x(Ny,{size:14,style:{position:"absolute",left:"0.75rem",top:"50%",transform:"translateY(-50%)",color:"var(--opaca-text-dim)"}},void 0,!1,void 0,this),x("input",{id:"login-email",type:"email",className:"opaca-input",style:{paddingLeft:"2.25rem"},placeholder:"admin@example.com",value:n,onChange:(N)=>a(N.target.value),required:!0},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),x("div",{className:"opaca-form-group",children:[x("label",{htmlFor:"login-password",className:"opaca-label",children:"Password"},void 0,!1,void 0,this),x("div",{style:{position:"relative"},children:[x(rt,{size:14,style:{position:"absolute",left:"0.75rem",top:"50%",transform:"translateY(-50%)",color:"var(--opaca-text-dim)"}},void 0,!1,void 0,this),x("input",{id:"login-password",type:"password",className:"opaca-input",style:{paddingLeft:"2.25rem"},placeholder:"••••••••",value:o,onChange:(N)=>p(N.target.value),required:!0},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),x("button",{type:"submit",className:"opaca-btn opaca-btn-primary",style:{width:"100%",marginTop:"0.5rem"},disabled:m,children:m?x(ly,{children:[x(vy,{size:14,className:"opaca-spin"},void 0,!1,void 0,this),"Logging in..."]},void 0,!0,void 0,this):"Sign In"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}import{useStore as rn}from"@nanostores/react";import{Check as Ry,ChevronLeft as hy,ChevronRight as at,Download as uy,Eye as lo,File as ot,FileText as pt,FolderPlus as Ro,Grid as zy,Image as tt,LayoutList as wy,Loader2 as mt,Plus as Ty,Save as Hy,Search as fy,Settings2 as Ly,Trash2 as Cy,X as Wy}from"lucide-react";import{useMemo as Gy,useRef as Ky,useState as zn}from"react";import{createPortal as Py}from"react-dom";Tr();import{jsxDEV as t}from"react/jsx-dev-runtime";var ct=(r)=>{if(!r)return"-";let n=new Date(r);return Number.isNaN(n.getTime())?"-":n.toLocaleDateString()},ho=["#7c3aed","#047857","#b91c1c","#0369a1","#a21caf","#c2410c","#eab308","#10b981","#ec4899","#6366f1"],nn=(r,n)=>{if(n&&n[r])return n[r];let a=0;for(let o=0;o<r.length;o++)a=r.charCodeAt(o)+((a<<5)-a);return ho[Math.abs(a)%ho.length]};function it({collection:r,config:n}){let{data:a,loading:o}=rn(Rn),p=rn(Nn),m=rn(ln),c=rn(Vr),v=rn(va),g=rn(jr),i=rn(ga),[N,b]=zn(!1),[y,l]=zn(null),[R,u]=zn(!1),[h,G]=zn(""),[C,W]=zn(!1),[A,s]=zn(!1),f=Ky(null),U=Gy(()=>{return[...Object.keys(n.storages||{})]},[n.storages]),T=()=>{Rn.revalidate()},_=async(z)=>{let B=z.target.files?.[0];if(!B)return;b(!0);let nr=new FormData;nr.append("file",B);try{let Jr=m==="all"?"default":m;await M.post(`api/__system/assets/upload?bucket=${Jr}&folder=${c}`,{body:nr}),S("File uploaded successfully","success"),T()}catch(Jr){console.error("Upload failed",Jr),S("Upload failed","error")}finally{if(b(!1),f.current)f.current.value=""}},w=async()=>{if(!h)return;try{let z=m==="all"?"default":m,B=new Blob([""],{type:"text/plain"}),nr=new FormData,Jr=c?`${c}/${h}`:h;nr.append("file",B,".keep"),await M.post(`api/__system/assets/upload?bucket=${z}&folder=${Jr}`,{body:nr}),S("Folder created","success"),G(""),W(!1),T()}catch(z){console.error("Failed to create folder",z),S("Failed to create folder","error")}},K=async()=>{if(!y)return;try{await M.patch(`api/${r.slug}/${y.id}`,{json:{filename:y.filename,altText:y.altText||y.alt_text,caption:y.caption}}),S("Metadata updated","success"),T()}catch(z){console.error("Failed to update metadata",z),S("Failed to update metadata","error")}},P=async(z)=>{try{if(await M.delete(`api/${r.slug}/${z}`),S("Asset deleted","success"),y?.id===z)l(null);T()}catch(B){console.error("Delete failed",B),S("Failed to delete asset","error")}},q=a?.docs||[],br=a?.folders||[],ur=(z)=>{if(z===0)return"0 Bytes";let B=1024,nr=["Bytes","KB","MB","GB"],Jr=Math.floor(Math.log(z)/Math.log(B));return parseFloat((z/B**Jr).toFixed(1))+" "+nr[Jr]},an=(z)=>{if(!z)return t(ot,{size:p==="grid"?48:20,className:"text-gray-400"},void 0,!1,void 0,this);if(z.startsWith("image/"))return t(tt,{size:p==="grid"?48:20,className:"text-blue-400"},void 0,!1,void 0,this);if(z.startsWith("video/"))return t(pt,{size:p==="grid"?48:20,className:"text-purple-400"},void 0,!1,void 0,this);if(z.includes("pdf"))return t(pt,{size:p==="grid"?48:20,className:"text-red-400"},void 0,!1,void 0,this);return t(ot,{size:p==="grid"?48:20,className:"text-gray-400"},void 0,!1,void 0,this)},Tn=q.filter((z)=>{return(z.originalFilename||z.original_filename)?.toLowerCase().includes(v.toLowerCase())||z.filename.toLowerCase().includes(v.toLowerCase())}),Vn=br.filter((z)=>z.name.toLowerCase().includes(v.toLowerCase()));return t("div",{className:`opaca-view-container media-registry-view ${o?"loading":""}`,children:[t("input",{type:"file",ref:f,style:{display:"none"},onChange:_},void 0,!1,void 0,this),t("div",{className:"opaca-header media-registry-header",children:[t("div",{children:[t("h1",{className:"opaca-title",children:"Media Library"},void 0,!1,void 0,this),t("p",{className:"opaca-subtitle",children:"Manage your global asset registry across all buckets."},void 0,!1,void 0,this)]},void 0,!0,void 0,this),t("div",{className:"media-registry-header-actions",children:[t(d,{variant:"outline",onClick:()=>W(!0),disabled:m==="all",title:m==="all"?"Select a specific bucket to create folders":"",children:[t(Ro,{size:16,className:"media-registry-icon-mr"},void 0,!1,void 0,this),"New Folder"]},void 0,!0,void 0,this),t(d,{variant:"default",disabled:N||m==="all",onClick:()=>f.current?.click(),title:m==="all"?"Select a specific bucket to upload files":"",children:[N?t(mt,{size:16,className:"opaca-spin media-registry-icon-mr"},void 0,!1,void 0,this):t(Ty,{size:16,className:"media-registry-icon-mr"},void 0,!1,void 0,this),N?"Uploading...":"Upload New"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),t("div",{style:{display:"flex",flex:1,minHeight:0,gap:"1.5rem",marginBottom:"1.5rem"},children:t("div",{style:{flex:1,display:"flex",flexDirection:"column",minWidth:0},children:[t("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem",marginBottom:"1rem",color:"var(--opaca-text-dim)",fontSize:"0.875rem"},children:[t("button",{type:"button",onClick:()=>Cr(""),style:{background:"none",border:"none",color:c===""?"var(--opaca-text)":"inherit",cursor:"pointer",fontWeight:c===""?600:400},children:"Home"},void 0,!1,void 0,this),c.split("/").filter(Boolean).map((z,B,nr)=>t("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem"},children:[t(at,{size:14},void 0,!1,void 0,this),t("button",{type:"button",onClick:()=>Cr(nr.slice(0,B+1).join("/")),style:{background:"none",border:"none",color:B===nr.length-1?"var(--opaca-text)":"inherit",cursor:"pointer",fontWeight:B===nr.length-1?600:400},children:z},void 0,!1,void 0,this)]},z,!0,void 0,this))]},void 0,!0,void 0,this),t("div",{className:"opaca-card media-registry-body",children:[t("div",{className:"media-registry-toolbar",children:[t("div",{className:"media-registry-filters",children:[t("div",{className:"media-registry-search",children:[t(fy,{size:16,className:"search-icon"},void 0,!1,void 0,this),t(fr,{type:"text",placeholder:"Search assets...",value:v,onChange:(z)=>jo(z.target.value)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),t(cn,{value:m,onValueChange:(z)=>Na(z),children:[t(yn,{className:"media-registry-select-trigger",children:t("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[m!=="all"&&t("div",{style:{width:"8px",height:"8px",borderRadius:"50%",backgroundColor:nn(m,i)}},void 0,!1,void 0,this),t(bn,{placeholder:"All Buckets"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),t(gn,{children:[t(Xr,{value:"all",children:t("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[t("div",{style:{width:"8px",height:"8px",borderRadius:"50%",border:"1px dashed var(--opaca-text-dim)"}},void 0,!1,void 0,this),"All Buckets"]},void 0,!0,void 0,this)},void 0,!1,void 0,this),t(ia,{},void 0,!1,void 0,this),t(ca,{children:"Storage Buckets"},void 0,!1,void 0,this),U.map((z)=>t(Xr,{value:z.toLowerCase(),children:t("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[t("div",{style:{width:"8px",height:"8px",borderRadius:"50%",backgroundColor:nn(z,i)}},void 0,!1,void 0,this),z.toUpperCase()]},void 0,!0,void 0,this)},z,!1,void 0,this))]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),t("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[t(d,{variant:"ghost",size:"icon",onClick:()=>s(!0),title:"Bucket Settings",children:t(Ly,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),t("div",{className:"media-registry-view-toggles",children:[t("button",{type:"button",onClick:()=>Nn.set("grid"),className:`media-registry-toggle-btn ${p==="grid"?"active":""}`,children:t(zy,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),t("button",{type:"button",onClick:()=>Nn.set("list"),className:`media-registry-toggle-btn ${p==="list"?"active":""}`,children:t(wy,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),o&&t("div",{style:{display:"flex",justifyContent:"center",padding:"4rem"},children:t(mt,{size:32,className:"opaca-spin",style:{color:"var(--opaca-accent)"}},void 0,!1,void 0,this)},void 0,!1,void 0,this),!o&&Tn.length===0&&t("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",textAlign:"center",padding:"4rem",background:"rgba(255,255,255,0.01)",borderRadius:"12px",border:"1px dashed var(--opaca-border)"},children:[t(tt,{size:48,style:{color:"var(--opaca-text-dim)",marginBottom:"1rem",opacity:0.3}},void 0,!1,void 0,this),t("h3",{style:{fontSize:"1.25rem",fontWeight:600},children:"No assets found"},void 0,!1,void 0,this),t("p",{style:{color:"var(--opaca-text-muted)"},children:"Upload some files to get started."},void 0,!1,void 0,this)]},void 0,!0,void 0,this),!o&&p==="grid"&&(Vn.length>0||Tn.length>0)&&t("div",{className:"media-registry-grid",children:[Vn.map((z)=>t("div",{className:"media-registry-card",onClick:()=>Cr(c?`${c}/${z.name}`:z.name),children:[t("div",{className:"media-registry-card-thumb",style:{position:"relative"},children:[t(Ro,{size:54,className:"folder-icon"},void 0,!1,void 0,this),m==="all"&&t("div",{style:{position:"absolute",bottom:"8px",right:"8px",display:"flex",gap:"2px"},children:z.buckets.map((B)=>t("div",{title:B,style:{width:"8px",height:"8px",borderRadius:"50%",backgroundColor:nn(B,i)}},B,!1,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this),t("div",{className:"media-registry-card-body",children:[t("div",{className:"media-registry-card-title",children:z.name},void 0,!1,void 0,this),t("div",{className:"media-registry-card-meta",children:"Folder"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},`folder-${z.name}`,!0,void 0,this)),Tn.map((z)=>t("div",{className:`media-registry-card ${y?.id===z.id?"active":""}`,onClick:()=>l(z),children:[t("div",{className:"media-registry-card-thumb",style:{position:"relative"},children:[(()=>{let B=z.mimeType||z.mime_type;return B?.startsWith("image/")?t("img",{src:`${n.serverURL||""}/api/assets/${z.id}/view`,alt:z.originalFilename||z.original_filename||"",onError:(nr)=>nr.currentTarget.style.display="none"},void 0,!1,void 0,this):an(B||"")})(),m==="all"&&t("div",{title:`Bucket: ${z.bucket}`,style:{position:"absolute",top:"8px",left:"8px",width:"12px",height:"12px",borderRadius:"50%",backgroundColor:nn(z.bucket,i),border:"2px solid rgba(0,0,0,0.5)",zIndex:2}},void 0,!1,void 0,this),t("div",{className:"media-registry-overlay",children:t("button",{className:"media-registry-overlay-btn",onClick:(B)=>{B.stopPropagation(),l(z),u(!0)},children:t(lo,{size:20},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),t("div",{className:"media-registry-card-body",children:[t("div",{className:"media-registry-card-title",title:z.original_filename,children:z.original_filename},void 0,!1,void 0,this),t("div",{className:"media-registry-card-meta",children:[t("span",{className:"meta-type",children:(z.mimeType||z.mime_type)?.split("/")[1]||"FILE"},void 0,!1,void 0,this),t("span",{children:ur(z.filesize)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},z.id,!0,void 0,this))]},void 0,!0,void 0,this),!o&&p==="list"&&(Vn.length>0||Tn.length>0)&&t("div",{className:"opaca-table-container",children:t("table",{className:"opaca-table",children:[t("thead",{children:t("tr",{children:[t("th",{style:{width:"40px"}},void 0,!1,void 0,this),t("th",{children:"Name"},void 0,!1,void 0,this),t("th",{children:"Type"},void 0,!1,void 0,this),t("th",{children:"Size"},void 0,!1,void 0,this),t("th",{children:"Date"},void 0,!1,void 0,this),t("th",{style:{width:"40px"}},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),t("tbody",{children:[Vn.map((z)=>t("tr",{onClick:()=>Cr(c?`${c}/${z.name}`:z.name),style:{cursor:"pointer"},children:[t("td",{children:t("div",{style:{position:"relative",display:"inline-block"},children:[t(Ro,{size:20,style:{color:"#eab308"}},void 0,!1,void 0,this),m==="all"&&t("div",{style:{position:"absolute",bottom:"-2px",right:"-2px",display:"flex",gap:"1px"},children:z.buckets.map((B)=>t("div",{style:{width:"6px",height:"6px",borderRadius:"50%",backgroundColor:nn(B,i)}},B,!1,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),t("td",{style:{fontWeight:600},children:z.name},void 0,!1,void 0,this),t("td",{children:"Folder"},void 0,!1,void 0,this),t("td",{children:"-"},void 0,!1,void 0,this),t("td",{children:"-"},void 0,!1,void 0,this),t("td",{},void 0,!1,void 0,this)]},`folder-${z.name}`,!0,void 0,this)),Tn.map((z)=>t("tr",{onClick:()=>l(z),style:{cursor:"pointer",background:y?.id===z.id?"rgba(var(--opaca-accent-rgb), 0.1)":"inherit"},children:[t("td",{children:t("div",{style:{width:"32px",height:"32px",borderRadius:"4px",background:"var(--opaca-bg-alt)",display:"flex",alignItems:"center",justifyContent:"center",overflow:"hidden"},children:(()=>{let B=z.mimeType||z.mime_type||"";return B.startsWith("image/")?t("img",{src:`${n.serverURL||""}/api/assets/${z.id}/view`,style:{width:"100%",height:"100%",objectFit:"cover"},alt:""},void 0,!1,void 0,this):an(B)})()},void 0,!1,void 0,this)},void 0,!1,void 0,this),t("td",{children:[t("div",{style:{fontWeight:500},children:z.original_filename},void 0,!1,void 0,this),t("div",{style:{fontSize:"0.75rem",color:"var(--opaca-text-dim)"},children:z.filename},void 0,!1,void 0,this)]},void 0,!0,void 0,this),t("td",{style:{fontSize:"0.875rem"},children:z.mimeType||z.mime_type||""},void 0,!1,void 0,this),t("td",{style:{fontSize:"0.875rem"},children:ur(z.filesize)},void 0,!1,void 0,this),t("td",{style:{fontSize:"0.75rem",color:"var(--opaca-text-muted)"},children:ct(z.createdAt||z.created_at)},void 0,!1,void 0,this),t("td",{children:t("button",{onClick:(B)=>{B.stopPropagation(),l(z),u(!0)},style:{background:"none",border:"none",color:"var(--opaca-text-dim)",cursor:"pointer"},children:t(lo,{size:18},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},z.id,!0,void 0,this))]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),a&&a.totalPages>1&&t("div",{className:"media-registry-pagination",children:[t("div",{className:"info",children:["Showing ",(a.page-1)*a.limit+1," to"," ",Math.min(a.page*a.limit,a.totalDocs)," of ",a.totalDocs]},void 0,!0,void 0,this),t("div",{className:"actions",children:[t(d,{variant:"outline",size:"sm",disabled:a.page===1||o,onClick:()=>ja(g-1),children:t(hy,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),t(d,{variant:"outline",size:"sm",disabled:a.page===a.totalPages||o,onClick:()=>ja(g+1),children:t(at,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),t(Ar,{open:!!y&&!R,onOpenChange:(z)=>!z&&l(null),children:t(Qr,{onClose:()=>l(null),children:[t(Br,{children:[t(kr,{children:"Asset Details"},void 0,!1,void 0,this),t(ya,{children:"View and manage asset metadata."},void 0,!1,void 0,this)]},void 0,!0,void 0,this),y&&t("div",{className:"media-sheet-flex",children:t("div",{className:"media-sheet-body opaca-scrollbar-hidden",children:[t("div",{className:"media-sheet-preview",children:[(()=>{let z=y.mimeType||y.mime_type||"";return z.startsWith("image/")?t("img",{src:`${n.serverURL||""}/api/assets/${y.id}/view`,alt:y.filename},void 0,!1,void 0,this):an(z)})(),t("div",{className:"overlay",children:t(d,{variant:"secondary",onClick:()=>u(!0),children:[t(lo,{size:16,className:"media-registry-icon-mr"},void 0,!1,void 0,this),"Preview Full"]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),t("div",{className:"media-sheet-form",children:[t("div",{className:"media-sheet-group",children:[t(Zr,{htmlFor:"filename",children:"Display Name"},void 0,!1,void 0,this),t(fr,{id:"filename",value:y.filename,onChange:(z)=>l({...y,filename:z.target.value})},void 0,!1,void 0,this)]},void 0,!0,void 0,this),t("div",{className:"media-sheet-group",children:[t(Zr,{htmlFor:"alt_text",children:"Alt Text"},void 0,!1,void 0,this),t(fr,{id:"alt_text",value:y.alt_text||"",onChange:(z)=>l({...y,alt_text:z.target.value}),placeholder:"SEO friendly description"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),t("div",{className:"media-sheet-group",children:[t(Zr,{htmlFor:"caption",children:"Caption"},void 0,!1,void 0,this),t("textarea",{id:"caption",value:y.caption||"",onChange:(z)=>l({...y,caption:z.target.value}),className:"media-sheet-textarea",placeholder:"Write a short caption..."},void 0,!1,void 0,this)]},void 0,!0,void 0,this),t("div",{className:"media-sheet-meta-box",children:[t("div",{className:"media-sheet-meta-row",children:[t("span",{className:"label",children:"File Size"},void 0,!1,void 0,this),t("span",{className:"value",children:ur(y.filesize)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),t("div",{className:"media-sheet-meta-row",children:[t("span",{className:"label",children:"Internal Key"},void 0,!1,void 0,this),t("span",{className:"value value-mono",title:y.key,children:y.key},void 0,!1,void 0,this)]},void 0,!0,void 0,this),t("div",{className:"media-sheet-meta-row",children:[t("span",{className:"label",children:"Bucket"},void 0,!1,void 0,this),t("span",{className:"value",children:y.bucket},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),y&&t(Qo,{className:"media-sheet-actions",children:[t(xn,{title:"Delete Asset",description:"Are you sure you want to delete this asset? This action cannot be undone and may break links in your content.",onConfirm:()=>P(y.id),variant:"destructive",confirmText:"Delete Asset",children:t(d,{variant:"destructive",children:[t(Cy,{size:16,className:"media-registry-icon-mr"},void 0,!1,void 0,this),"Delete"]},void 0,!0,void 0,this)},void 0,!1,void 0,this),t(d,{variant:"default",onClick:K,children:[t(Hy,{size:16,className:"media-registry-icon-mr"},void 0,!1,void 0,this),"Save Changes"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),t(Ln,{open:C,onOpenChange:W,children:t(Cn,{className:"opaca-dialog-max-w",children:[t(Wn,{children:[t(Gn,{children:"Create New Folder"},void 0,!1,void 0,this),t(ta,{children:"Organize your assets into folders."},void 0,!1,void 0,this)]},void 0,!0,void 0,this),t("div",{className:"media-dialog-create-body",children:[t(Zr,{htmlFor:"newFolderName",children:"Folder Name"},void 0,!1,void 0,this),t(fr,{id:"newFolderName",placeholder:"e.g. products",value:h,onChange:(z)=>G(z.target.value),style:{marginTop:"0.5rem"},onKeyDown:(z)=>z.key==="Enter"&&w()},void 0,!1,void 0,this)]},void 0,!0,void 0,this),t(Kn,{children:[t(d,{variant:"outline",onClick:()=>W(!1),children:"Cancel"},void 0,!1,void 0,this),t(d,{onClick:w,children:"Create"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),R&&y&&typeof document<"u"&&Py(t("div",{className:"opaca-ui-dialog-portal",children:[t("div",{className:"opaca-ui-dialog-overlay",onClick:()=>{u(!1),l(null)}},void 0,!1,void 0,this),t("div",{className:"opaca-ui-dialog-wrapper",children:t("div",{className:"media-preview-container",children:[t("div",{className:"media-preview-header",children:[t("div",{className:"media-preview-title-group",children:[t("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem"},children:[m==="all"&&t("div",{title:`Bucket: ${y.bucket}`,style:{width:"12px",height:"12px",borderRadius:"50%",backgroundColor:nn(y.bucket,i)}},void 0,!1,void 0,this),t("h2",{children:y.original_filename},void 0,!1,void 0,this)]},void 0,!0,void 0,this),t("span",{className:"badge",children:y.mimeType||y.mime_type||""},void 0,!1,void 0,this)]},void 0,!0,void 0,this),t("button",{className:"media-preview-close-btn",onClick:()=>{u(!1),l(null)},children:t(Wy,{size:24},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),t("div",{className:"media-preview-body",children:(()=>{let z=y.mimeType||y.mime_type||"";return z.startsWith("image/")?t("img",{src:`${n.serverURL||""}/api/assets/${y.id}/view`,alt:y.altText||y.alt_text||y.originalFilename||y.original_filename||""},void 0,!1,void 0,this):t("div",{className:"media-preview-no-rich",children:[t("div",{className:"icon-wrapper",children:an(z)},void 0,!1,void 0,this),t("p",{children:"No rich preview available for this file type."},void 0,!1,void 0,this),t(d,{variant:"default",onClick:()=>window.location.href=`${n.serverURL||""}/api/assets/${y.id}/view`,children:[t(uy,{size:16,className:"media-registry-icon-mr"},void 0,!1,void 0,this),"Download Original"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)})()},void 0,!1,void 0,this),t("div",{className:"media-preview-footer",children:[t("div",{className:"media-preview-stat",children:[t("div",{className:"label",children:"Size"},void 0,!1,void 0,this),t("div",{className:"value",children:ur(y.filesize)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),t("div",{className:"media-preview-stat",children:[t("div",{className:"label",children:"Created"},void 0,!1,void 0,this),t("div",{className:"value",children:ct(y.createdAt||y.created_at)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),t("div",{className:"media-preview-stat",children:[t("div",{className:"label",children:"Bucket"},void 0,!1,void 0,this),t("div",{className:"value",children:y.bucket},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),document.body),t(Ln,{open:A,onOpenChange:s,children:t(Cn,{className:"media-registry-dialog-sm",children:[t(Wn,{children:t(Gn,{children:"Bucket Colors"},void 0,!1,void 0,this)},void 0,!1,void 0,this),t("div",{className:"media-bucket-settings",children:U.map((z)=>t("div",{className:"bucket-setting-row",children:[t("span",{className:"bucket-name",children:z},void 0,!1,void 0,this),t("div",{className:"color-presets",children:ho.map((B)=>{let nr=nn(z,i)===B;return t("button",{className:`color-bubble ${nr?"active":""}`,style:{backgroundColor:B},onClick:()=>Do(z,B),children:nr&&t(Ry,{size:12,color:"white"},void 0,!1,void 0,this)},B,!1,void 0,this)})},void 0,!1,void 0,this)]},z,!0,void 0,this))},void 0,!1,void 0,this),t(Kn,{children:t(d,{onClick:()=>s(!1),children:"Close"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}import{Check as yt,Copy as Jy,Key as Yy,Loader2 as bt,Plus as gt,Trash2 as _y}from"lucide-react";import{useCallback as qy,useEffect as Zy,useState as Fr}from"react";import{jsxDEV as H}from"react/jsx-dev-runtime";function vt({notify:r,config:n}){let[a,o]=Fr([]),[p,m]=Fr(!0),[c,v]=Fr(!1),[g,i]=Fr(null),[N,b]=Fr(""),[y,l]=Fr("31536000"),[R,u]=Fr(!1),[h,G]=Fr({}),C=qy(async()=>{try{m(!0);let w=await M.get("api/auth/api-key/list").json();o(w.apiKeys||[])}catch(w){console.error(w),r?.("Failed to load API keys","error")}finally{m(!1)}},[r]);Zy(()=>{C()},[C]);let W=(w,K)=>{G((P)=>{let q=P[w]||[],br={...P};if(q.includes(K)){let ur=q.filter((an)=>an!==K);if(ur.length===0)delete br[w];else br[w]=ur}else br[w]=[...q,K];return br})},A=(w)=>{G((K)=>({...K,[w]:_}))},s=(w)=>{G((K)=>{let P={...K};return delete P[w],P})},f=async(w)=>{if(w.preventDefault(),!N.trim())return;try{v(!0);let K=await M.post("api/__admin/api-key/create",{json:{name:N,expiresIn:y?Number(y):void 0,permissions:h}}).json();i(K.key),b(""),l("31536000"),G({}),await C(),r?.("API Key generated successfully")}catch(K){console.error("API Key Creation Error:",K);let P=K.response?.json?await K.response.json().catch(()=>({})):{};r?.(P.message||K.message||"Failed to generate API key","error")}finally{v(!1)}},U=async(w)=>{if(!confirm("Are you sure you want to delete this API key? This action cannot be undone."))return;try{await M.post("api/auth/api-key/delete",{json:{keyId:w}}),await C(),r?.("API Key deleted successfully")}catch(K){console.error(K),r?.("Failed to delete API key","error")}},T=()=>{if(g)navigator.clipboard.writeText(g),u(!0),setTimeout(()=>u(!1),2000),r?.("API Key copied to clipboard")},_=["read","create","update","delete"];return H("div",{className:"opaca-admin-form",children:[H("div",{className:"opaca-header",children:H("div",{children:[H("h1",{className:"opaca-title",children:"Settings"},void 0,!1,void 0,this),H("p",{className:"opaca-subtitle",children:"Manage project settings and API Keys."},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),H("div",{style:{display:"grid",gap:"2.5rem"},children:[H("div",{className:"opaca-card",style:{padding:"2.5rem",border:"1px solid var(--opaca-border-strong)"},children:[H("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem",marginBottom:"1rem"},children:[H("div",{style:{width:"32px",height:"32px",borderRadius:"8px",background:"rgba(var(--opaca-accent-rgb), 0.1)",display:"flex",alignItems:"center",justifyContent:"center"},children:H(gt,{size:18,color:"var(--opaca-accent)"},void 0,!1,void 0,this)},void 0,!1,void 0,this),H("h2",{style:{fontSize:"1.25rem",fontWeight:"600",margin:0},children:"Create New API Key"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),H("p",{style:{fontSize:"0.925rem",color:"var(--opaca-text-dim)",marginBottom:"2.5rem",maxWidth:"600px"},children:"Generate a secure token for external systems. Define granular permissions to control which data can be accessed or modified."},void 0,!1,void 0,this),H("form",{onSubmit:f,style:{display:"grid",gap:"2rem"},children:[H("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"1rem"},children:[H("div",{className:"opaca-form-group",style:{margin:0},children:[H("label",{className:"opaca-label",htmlFor:"key-name",children:"Key Name"},void 0,!1,void 0,this),H("input",{id:"key-name",type:"text",className:"opaca-input",style:{fontSize:"1rem",padding:"0.875rem 1rem"},value:N,onChange:(w)=>b(w.target.value),placeholder:"e.g. Production Mobile App",required:!0},void 0,!1,void 0,this),H("span",{style:{fontSize:"0.75rem",color:"var(--opaca-text-muted)",marginTop:"0.5rem",display:"block"},children:"A descriptive name to help you identify where this key is used."},void 0,!1,void 0,this)]},void 0,!0,void 0,this),H("div",{className:"opaca-form-group",style:{margin:0},children:[H("label",{className:"opaca-label",htmlFor:"expires-in",children:"Expiration"},void 0,!1,void 0,this),H("select",{id:"expires-in",className:"opaca-input",style:{fontSize:"1rem",padding:"0.875rem 1rem",height:"auto"},value:y,onChange:(w)=>l(w.target.value),children:[H("option",{value:"2592000",children:"30 days"},void 0,!1,void 0,this),H("option",{value:"7776000",children:"90 days"},void 0,!1,void 0,this),H("option",{value:"31536000",children:"1 year"},void 0,!1,void 0,this),H("option",{value:"",children:"Never expire"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),H("span",{style:{fontSize:"0.75rem",color:"var(--opaca-text-muted)",marginTop:"0.5rem",display:"block"},children:"How long until this key automatically expires."},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),H("div",{style:{background:"rgba(var(--opaca-card-bg-rgb), 0.5)",border:"1px solid var(--opaca-border)",borderRadius:"12px",overflow:"hidden"},children:[H("div",{style:{padding:"1rem 1.25rem",background:"rgba(0,0,0,0.2)",borderBottom:"1px solid var(--opaca-border)",display:"flex",justifyContent:"space-between",alignItems:"center"},children:[H("label",{htmlFor:"permissions-matrix",className:"opaca-label",style:{margin:0,fontWeight:"600"},children:"Permissions Matrix"},void 0,!1,void 0,this),H("span",{style:{fontSize:"0.75rem",color:"var(--opaca-text-muted)"},children:["Actions for ",n.collections.length," ",n.collections.length===1?"collection":"collections"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),H("div",{style:{overflowX:"auto"},children:H("table",{style:{width:"100%",borderCollapse:"collapse",textAlign:"left"},children:[H("thead",{children:H("tr",{style:{borderBottom:"1px solid var(--opaca-border)",background:"rgba(255,255,255,0.02)"},children:[H("th",{style:{padding:"1rem 1.25rem",fontSize:"0.75rem",fontWeight:"600",color:"var(--opaca-text-muted)",textTransform:"uppercase"},children:"Collection"},void 0,!1,void 0,this),_.map((w)=>H("th",{style:{padding:"1rem",fontSize:"0.75rem",fontWeight:"600",color:"var(--opaca-text-muted)",textAlign:"center",textTransform:"uppercase"},children:w},w,!1,void 0,this)),H("th",{style:{padding:"1rem 1.25rem",fontSize:"0.75rem",fontWeight:"600",color:"var(--opaca-text-muted)",textAlign:"right",textTransform:"uppercase"},children:"Full Access"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),H("tbody",{children:n.collections.map((w)=>{let K=h[w.slug]||[],P=_.every((q)=>K.includes(q));return H("tr",{style:{borderBottom:"1px solid var(--opaca-border)",transition:"background 0.2s"},children:[H("td",{style:{padding:"1rem 1.25rem"},children:H("span",{style:{fontSize:"0.875rem",fontWeight:"600"},children:w.slug},void 0,!1,void 0,this)},void 0,!1,void 0,this),_.map((q)=>{let br=K.includes(q);return H("td",{style:{padding:"0.5rem",textAlign:"center"},children:H("button",{type:"button",onClick:()=>W(w.slug,q),style:{width:"32px",height:"32px",borderRadius:"6px",border:"1px solid",borderColor:br?"var(--opaca-accent)":"var(--opaca-border)",background:br?"rgba(var(--opaca-accent-rgb), 0.15)":"transparent",color:br?"var(--opaca-accent)":"var(--opaca-text-muted)",display:"inline-flex",alignItems:"center",justifyContent:"center",cursor:"pointer",transition:"all 0.2s"},title:`${q.charAt(0).toUpperCase()+q.slice(1)} ${w.slug}`,children:H(yt,{size:14,style:{opacity:br?1:0.1},strokeWidth:3},void 0,!1,void 0,this)},void 0,!1,void 0,this)},q,!1,void 0,this)}),H("td",{style:{padding:"1rem 1.25rem",textAlign:"right"},children:H("button",{type:"button",onClick:()=>P?s(w.slug):A(w.slug),style:{fontSize:"0.75rem",color:P?"var(--opaca-accent)":"var(--opaca-text-dim)",background:"transparent",border:"1px solid",borderColor:P?"var(--opaca-accent)":"var(--opaca-border)",padding:"0.3rem 0.75rem",borderRadius:"6px",cursor:"pointer",transition:"all 0.2s"},children:P?"All Actions":"Full Access?"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},w.slug,!0,void 0,this)})},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),n.collections.length===0&&H("div",{style:{padding:"3rem 1rem",textAlign:"center"},children:H("p",{style:{fontSize:"0.875rem",color:"var(--opaca-text-dim)"},children:"No collections available to configure."},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),H("button",{type:"submit",className:"opaca-btn opaca-btn-primary",disabled:c||!N.trim(),style:{width:"100%",height:"48px",fontSize:"1rem",fontWeight:"600",boxShadow:"0 4px 12px rgba(var(--opaca-accent-rgb), 0.2)",marginTop:"0.5rem"},children:[c?H(bt,{size:18,className:"opaca-spin"},void 0,!1,void 0,this):H(gt,{size:18,strokeWidth:2.5},void 0,!1,void 0,this),"Generate API Key"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),H("div",{style:{padding:"0 0.5rem"},children:[H("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem",marginBottom:"1.5rem"},children:[H(Yy,{size:18,color:"var(--opaca-text-dim)"},void 0,!1,void 0,this),H("h2",{style:{fontSize:"1.125rem",fontWeight:"500",margin:0},children:"Existing Keys"},void 0,!1,void 0,this),H("div",{style:{height:"1px",flex:1,background:"var(--opaca-border)",marginLeft:"0.5rem"}},void 0,!1,void 0,this)]},void 0,!0,void 0,this),g&&H("div",{style:{marginBottom:"2.5rem",padding:"1.75rem",background:"linear-gradient(135deg, rgba(52, 211, 153, 0.1) 0%, rgba(52, 211, 153, 0.02) 100%)",border:"1px solid rgba(52, 211, 153, 0.3)",borderRadius:"16px",position:"relative",overflow:"hidden"},children:[H("div",{style:{position:"absolute",top:0,left:0,width:"4px",height:"100%",background:"var(--opaca-success)"}},void 0,!1,void 0,this),H("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"flex-start",marginBottom:"1.25rem"},children:[H("div",{children:[H("h3",{style:{fontSize:"1rem",fontWeight:"600",color:"var(--opaca-success)",margin:"0 0 0.4rem 0"},children:"Key Generated Successfully"},void 0,!1,void 0,this),H("p",{style:{fontSize:"0.875rem",color:"var(--opaca-text-dim)",margin:0},children:"Copy this key now. For security reasons, it cannot be displayed again."},void 0,!1,void 0,this)]},void 0,!0,void 0,this),H("div",{style:{padding:"0.4rem 0.8rem",borderRadius:"20px",background:"rgba(52, 211, 153, 0.2)",color:"var(--opaca-success)",fontSize:"0.7rem",fontWeight:"700",textTransform:"uppercase"},children:"Confidential"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),H("div",{style:{display:"flex",gap:"0.75rem"},children:[H("code",{style:{flex:1,padding:"1rem 1.25rem",background:"rgba(0,0,0,0.4)",border:"1px solid rgba(255,255,255,0.1)",borderRadius:"10px",fontFamily:"monospace",fontSize:"1rem",color:"#fff",letterSpacing:"0.5px"},children:g},void 0,!1,void 0,this),H("button",{type:"button",onClick:T,className:"opaca-btn",style:{background:"white",color:"#000",width:"48px",height:"48px",borderRadius:"10px"},children:R?H(yt,{size:18},void 0,!1,void 0,this):H(Jy,{size:18},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),p?H("div",{style:{display:"flex",justifyContent:"center",padding:"2rem"},children:H(bt,{size:24,className:"opaca-spin",color:"var(--opaca-text-muted)"},void 0,!1,void 0,this)},void 0,!1,void 0,this):a.length===0?H("div",{style:{textAlign:"center",padding:"2rem",color:"var(--opaca-text-muted)",fontSize:"0.875rem",background:"rgba(0,0,0,0.1)",borderRadius:"var(--opaca-radius)"},children:"No API keys generated yet."},void 0,!1,void 0,this):H("div",{style:{display:"grid",gap:"0.5rem"},children:a.map((w)=>H("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"1rem",background:"var(--opaca-card-bg)",border:"1px solid var(--opaca-border)",borderRadius:"var(--opaca-radius)"},children:[H("div",{children:[H("div",{style:{fontWeight:"500",fontSize:"0.875rem",marginBottom:"0.25rem"},children:w.name},void 0,!1,void 0,this),H("div",{style:{display:"flex",gap:"1rem",fontSize:"0.75rem",color:"var(--opaca-text-dim)"},children:[H("span",{children:["Created: ",new Date(w.createdAt).toLocaleDateString()]},void 0,!0,void 0,this),H("span",{children:["Prefix: ",w.prefix,"..."]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),w.permissions&&Object.keys(w.permissions).length>0&&H("div",{style:{marginTop:"0.75rem",display:"flex",flexWrap:"wrap",gap:"0.375rem"},children:Object.entries(w.permissions).map(([K,P])=>H("div",{style:{fontSize:"10px",background:"rgba(255,255,255,0.05)",padding:"0.125rem 0.5rem",borderRadius:"4px",border:"1px solid var(--opaca-border)",color:"var(--opaca-text-dim)"},children:[H("strong",{style:{color:"var(--opaca-text)"},children:[K,":"]},void 0,!0,void 0,this)," ",P.join(", ")]},K,!0,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this),H("button",{type:"button",onClick:()=>U(w.id),className:"opaca-btn",style:{color:"var(--opaca-error)",background:"transparent",border:"none",padding:"0.5rem"},title:"Revoke Key",children:H(_y,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},w.id,!0,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}import{jsxDEV as O,Fragment as ky}from"react/jsx-dev-runtime";function Nt({config:r,serverUrl:n,initialNeedsInit:a}){let[o,p]=By(!0);Qy(()=>{if(!n||!n.startsWith("http"))return;Co(n),wo(n),ra(),(async()=>{try{try{if(a!==void 0)oa(a);else{let G=await M.get("api/__admin/setup").json();console.log("[OpacaCMS] Setup status:",G.initialized),oa(!G.initialized)}}catch(G){console.warn("[OpacaCMS] Failed to check setup status:",G)}try{if(r)Pa(r);else{let G=await M.get("api/__admin/metadata").json();Pa(G)}}catch(G){console.warn("[OpacaCMS] Metadata fetch failed (expected if not logged in):",G)}}catch(G){console.error("[OpacaCMS] Unexpected initialization error:",G)}finally{p(!1)}})()},[r,a,n]);let m=wn(Rr),c=wn(Ka),v=wn(dr),g=wn(Yr),i=wn(er),N=wn(Hr),b=async(h)=>{await Ca(h)},y=async()=>{await Wa()},l=Ay((h)=>{Yr.open(`/admin/collections/${h}`)},[]);if(!n||!n.startsWith("http"))return O("div",{className:"opaca-admin",children:O("div",{className:"opaca-loading-screen",children:O("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem"},children:[O(Xy,{size:24,className:"opaca-spin"},void 0,!1,void 0,this),O("span",{style:{fontWeight:500},children:"Waiting for server configuration..."},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this);if(c)return O("div",{className:"opaca-admin",children:O(Dp,{onSuccess:()=>{oa(!1),S("Welcome! System initialized successfully")}},void 0,!1,void 0,this)},void 0,!1,void 0,this);if(!N&&!i)return O("div",{className:"opaca-admin",children:O(nt,{onLogin:b},void 0,!1,void 0,this)},void 0,!1,void 0,this);if(o||N||!m)return O("div",{className:"opaca-admin",children:O("div",{className:"opaca-loading-screen",children:O("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem"},children:[O("svg",{className:"opaca-spin",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[O("title",{children:"Loading"},void 0,!1,void 0,this),O("path",{d:"M12 2V6M12 18V22M6 12H2M22 12H18M18.36 5.64L15.53 8.47M8.47 15.53L5.64 18.36M18.36 18.36L15.53 15.53M8.47 8.47L5.64 5.64",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),O("span",{style:{fontWeight:500},children:"Loading OpacaCMS..."},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this);let R=[];if(g){if(g.route==="collections"){R.push({label:"Collections"});let h=g.params.slug,G=m.collections.find((C)=>C.slug===h);R.push({label:G?.label||h.charAt(0).toUpperCase()+h.slice(1)})}else if(g.route==="document"){R.push({label:"Collections"});let h=g.params.slug,G=m.collections.find((C)=>C.slug===h);R.push({label:G?.label||h.charAt(0).toUpperCase()+h.slice(1),href:`/admin/collections/${h}`}),R.push({label:g.params.id==="create"?"Create":"Edit"})}else if(g.route==="globals"){R.push({label:"Globals"});let h=g.params.slug;R.push({label:h.charAt(0).toUpperCase()+h.slice(1)})}else if(g.route==="settings")R.push({label:"Settings"})}let u=()=>{if(!g||g.route==="dashboard")return O(fp,{config:m,user:i?.user},void 0,!1,void 0,this);if(g.route==="collections"){let h=g.params.slug,G=m.collections.find((C)=>C.slug===h);if(!G)return O("div",{children:"Not Found"},void 0,!1,void 0,this);if(G.slug==="_opaca_assets")return O(it,{collection:G,config:m},void 0,!1,void 0,this);return O(Hp,{collection:G},void 0,!1,void 0,this)}if(g.route==="document"){let{slug:h,id:G}=g.params,C=m.collections.find((W)=>W.slug===h);if(!C)return O("div",{children:"Not Found"},void 0,!1,void 0,this);return O(sp,{collection:C,id:G,onBack:()=>l(h)},void 0,!1,void 0,this)}if(g.route==="globals"){let h=g.params.slug,G=m.globals?.find((C)=>C.slug===h);if(!G)return O("div",{children:"Not Found"},void 0,!1,void 0,this);return O(Vp,{global:G,onBack:()=>Yr.open("/admin")},void 0,!1,void 0,this)}if(g.route==="settings")return O(vt,{config:m},void 0,!1,void 0,this);return O("div",{children:"404"},void 0,!1,void 0,this)};return O(ky,{children:[O(ko,{config:m,user:i?.user,onLogout:y,children:O("div",{style:{maxWidth:"70vw",margin:"0 auto",width:"100%",paddingBottom:"4rem"},children:[R.length>0&&O($o,{items:R},void 0,!1,void 0,this),u()]},void 0,!0,void 0,this)},void 0,!1,void 0,this),O(Mo,{toasts:v,onClear:La},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var My=$y(Nt,{props:{serverUrl:"string",config:"json",initialNeedsInit:"boolean"}});if(typeof window<"u"&&!customElements.get("opaca-admin"))customElements.define("opaca-admin",My);export{My as OpacaAdminWebComponent};
|
|
5
|
+
`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import{Edit2 as ay,Save as py,X as oy}from"lucide-react";import{useEffect as ty,useState as pp}from"react";import{CodeNode as Bc}from"@lexical/code";import{AutoLinkNode as $c,LinkNode as kc}from"@lexical/link";import{ListItemNode as Mc,ListNode as Uc}from"@lexical/list";import{MarkNode as Ic}from"@lexical/mark";import{LexicalComposer as Oc}from"@lexical/react/LexicalComposer";import{ContentEditable as Sc}from"@lexical/react/LexicalContentEditable";import{LexicalErrorBoundary as Fc}from"@lexical/react/LexicalErrorBoundary";import{HistoryPlugin as dc}from"@lexical/react/LexicalHistoryPlugin";import{LinkPlugin as ec}from"@lexical/react/LexicalLinkPlugin";import{ListPlugin as sc}from"@lexical/react/LexicalListPlugin";import{OnChangePlugin as xc}from"@lexical/react/LexicalOnChangePlugin";import{RichTextPlugin as Ec}from"@lexical/react/LexicalRichTextPlugin";import{HeadingNode as Vc,QuoteNode as jc}from"@lexical/rich-text";import{useState as Dc}from"react";import{DecoratorNode as zm}from"lexical";import{useLexicalComposerContext as vm}from"@lexical/react/LexicalComposerContext";import{useLexicalNodeSelection as Nm}from"@lexical/react/useLexicalNodeSelection";import{$getNodeByKey as sp}from"lexical";import{Trash2 as Rm}from"lucide-react";import{useCallback as lm,useEffect as xp,useRef as hm,useState as Ep}from"react";import{jsxDEV as vn,Fragment as um}from"react/jsx-dev-runtime";function xa({src:r,altText:n,nodeKey:a,width:p,height:o}){let[m]=vm(),[c,v]=Nm(a),[g,y]=Ep(!1),N=hm(null),[b,i]=Ep(p),R=lm(()=>{m.update(()=>{let u=sp(a);if(u)u.remove()})},[m,a]),l=(u)=>{u.preventDefault(),u.stopPropagation(),y(!0)};return xp(()=>{if(!g)return;let u=(G)=>{if(N.current){let{left:W}=N.current.getBoundingClientRect(),C=Math.max(50,G.clientX-W);i(C)}},h=()=>{if(y(!1),b!==void 0)m.update(()=>{let G=sp(a);if(G&&typeof G.setWidth==="function")G.setWidth(b)})};return document.addEventListener("mousemove",u),document.addEventListener("mouseup",h),()=>{document.removeEventListener("mousemove",u),document.removeEventListener("mouseup",h)}},[g,b,m,a]),xp(()=>{i(p)},[p]),vn("div",{role:"button",tabIndex:-1,className:`editor-image-wrapper ${c?"is-selected":""}`,onClick:(u)=>{u.preventDefault(),u.stopPropagation(),v(!c)},onKeyDown:(u)=>{if(u.key==="Enter"||u.key===" ")u.preventDefault(),v(!c)},style:{display:"inline-block",position:"relative",cursor:"default",lineHeight:0,zIndex:c?10:1},children:[vn("img",{ref:N,src:r,alt:n,style:{width:b||(p?`${p}px`:"auto"),height:o?`${o}px`:"auto",maxWidth:"100%",display:"block"},className:"editor-image-img"},void 0,!1,void 0,this),c&&vn(um,{children:[vn("button",{type:"button",className:"editor-image-resizer",onMouseDown:l,"aria-label":"Resize image"},void 0,!1,void 0,this),vn("button",{type:"button",className:"editor-image-delete",onClick:(u)=>{u.stopPropagation(),R()},"aria-label":"Delete image",children:vn(Rm,{size:14},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}import{jsxDEV as wm}from"react/jsx-dev-runtime";class Zn extends zm{__src;__altText;__height;__width;static getType(){return"image"}static clone(r){return new Zn(r.__src,r.__altText,r.__height,r.__width,r.__key)}constructor(r,n,a,p,o){super(o);this.__src=r,this.__altText=n,this.__height=a,this.__width=p}exportJSON(){return{altText:this.__altText,height:this.__height,src:this.__src,type:"image",version:1,width:this.__width}}static importJSON(r){let{altText:n,height:a,width:p,src:o}=r;return Er(o,n,a,p)}createDOM(r){let n=document.createElement("span");return n.className="editor-image",n}updateDOM(){return!1}setWidth(r){let n=this.getWritable();n.__width=r}setHeight(r){let n=this.getWritable();n.__height=r}decorate(){return wm(xa,{src:this.__src,altText:this.__altText,nodeKey:this.__key,width:this.__width,height:this.__height},void 0,!1,void 0,this)}}function Er(r,n,a,p){return new Zn(r,n,a,p)}import{$createCodeNode as Jm}from"@lexical/code";import{INSERT_ORDERED_LIST_COMMAND as Ym,INSERT_UNORDERED_LIST_COMMAND as Pm}from"@lexical/list";import{useLexicalComposerContext as _m}from"@lexical/react/LexicalComposerContext";import{LexicalTypeaheadMenuPlugin as qm,MenuOption as Zm,useBasicTypeaheadTriggerMatch as Xm}from"@lexical/react/LexicalTypeaheadMenuPlugin";import{$createHeadingNode as Ra,$createQuoteNode as Qm}from"@lexical/rich-text";import{$setBlocksType as hn}from"@lexical/selection";import{$getSelection as Qn,$insertNodes as Am,$isRangeSelection as An}from"lexical";import{Code as Bm,Heading1 as $m,Heading2 as km,Image as Mm,List as Um,ListOrdered as Im,Quote as Om,Type as Sm}from"lucide-react";import{useCallback as Fm,useMemo as dm,useState as oo}from"react";import*as to from"react-dom";import{useStore as Xn}from"@nanostores/react";import{ChevronRight as Tm,File as Dp,FileText as ro,FolderPlus as Hm,Image as no,Loader2 as ao,Upload as fm,X as Lm}from"lucide-react";import Wm,{useMemo as Cm,useRef as Gm,useState as po}from"react";import{persistentAtom as Ea}from"@nanostores/persistent";import{atom as Va}from"nanostores";var Nn=Ea("opaca-media-view-mode","grid"),Rn=Ea("opaca-media-selected-bucket","all"),ga=Ea("opaca-bucket-colors",{},{encode:JSON.stringify,decode:JSON.parse}),Vr=Va(""),va=Va(""),jr=Va(1),ln=kr(["api/__system/assets",Rn,Vr,va,jr],{fetcher:(r,n,a,p,o)=>{let m=new URLSearchParams({bucket:String(n),folder:String(a),search:String(p),page:String(o),limit:"20"});return M.get(`${r}?${m.toString()}`).json()}}),Na=(r)=>{Rn.set(r),Vr.set(""),jr.set(1)},Wr=(r)=>{Vr.set(r),jr.set(1)},Vp=(r)=>{va.set(r),jr.set(1)},ja=(r)=>{jr.set(r)},jp=(r,n)=>{let a=ga.get();ga.set({...a,[r]:n})};import{jsxDEV as Y,Fragment as Km}from"react/jsx-dev-runtime";var Ur=({onSelect:r,onClose:n,allowedmime_types:a,maxFileSize:p,bucket:o="default"})=>{let{data:m,loading:c}=Xn(ln),v=Xn(Rn),g=Xn(Vr),y=Xn(Nn),N=Xn(lr),[b,i]=po(!1),[R,l]=po(!1),u=Gm(null),h=Cm(()=>{return Object.keys(N?.storages||{})},[N?.storages]),G=m?.docs||[],W=m?.folders||[],C=async(f)=>{if(a&&!a.includes(f.type)){alert(`Invalid file type. Allowed: ${a.join(", ")}`);return}if(p&&f.size>p){alert(`File too large. Max size: ${p/1024/1024}MB`);return}i(!0);let U=new FormData;U.append("file",f);try{let T=v==="all"?"default":v,_=await M.post(`api/__system/assets/upload?bucket=${T}&folder=${g}`,{body:U,onDownloadProgress:(w)=>{}}).json();i(!1),ln.revalidate(),r({assetId:_.id,url:_.url||`${cr()}/api/assets/${_.id}/view`,filename:_.filename,mimeType:_.mimeType||_.mime_type||"",filesize:_.filesize})}catch(T){alert(`Upload failed: ${T instanceof Error?T.message:"Unknown error"}`),i(!1)}},Q=(f)=>{if(f.preventDefault(),l(!1),f.dataTransfer.files&&f.dataTransfer.files.length>0&&f.dataTransfer.files[0])C(f.dataTransfer.files[0])},s=(f)=>{if(!f)return Y(Dp,{size:40,className:"text-gray-400"},void 0,!1,void 0,this);if(f.startsWith("image/"))return Y(no,{size:40,className:"text-blue-400"},void 0,!1,void 0,this);if(f.startsWith("video/"))return Y(ro,{size:40,className:"text-purple-400"},void 0,!1,void 0,this);if(f.includes("pdf"))return Y(ro,{size:40,className:"text-red-400"},void 0,!1,void 0,this);return Y(Dp,{size:40,className:"text-gray-400"},void 0,!1,void 0,this)};return Y("div",{className:"asset-manager-overlay",children:Y("div",{className:"asset-manager-container",children:[Y("div",{className:"asset-manager-header",children:[Y("div",{children:[Y("h2",{children:"Media Library"},void 0,!1,void 0,this),Y("div",{className:"asset-manager-breadcrumbs",children:[Y("button",{type:"button",onClick:()=>Wr(""),children:"Home"},void 0,!1,void 0,this),g.split("/").filter(Boolean).map((f,U,T)=>Y(Wm.Fragment,{children:[Y(Tm,{size:14,className:"breadcrumb-separator"},void 0,!1,void 0,this),Y("button",{type:"button",onClick:()=>Wr(T.slice(0,U+1).join("/")),children:f},void 0,!1,void 0,this)]},f||U,!0,void 0,this))]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),Y("div",{className:"header-actions",children:[Y(cn,{value:v,onValueChange:(f)=>Na(f),children:[Y(yn,{className:"bucket-selector",children:Y(bn,{placeholder:"Bucket"},void 0,!1,void 0,this)},void 0,!1,void 0,this),Y(gn,{children:[Y(Xr,{value:"all",children:"All Buckets"},void 0,!1,void 0,this),Y(ya,{},void 0,!1,void 0,this),Y(ca,{children:"Storage"},void 0,!1,void 0,this),h.map((f)=>Y(Xr,{value:f,children:f.toUpperCase()},f,!1,void 0,this))]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),Y("button",{type:"button",onClick:n,className:"close-button",children:Y(Lm,{size:20},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),Y("button",{type:"button",onDragOver:(f)=>{f.preventDefault(),l(!0)},onDragLeave:()=>l(!1),onDrop:Q,onClick:()=>!b&&u.current?.click(),"aria-label":"Upload file",className:`asset-manager-upload-zone ${R?"is-drag-active":""} ${b?"uploading":""}`,children:[Y("input",{type:"file",ref:u,style:{display:"none"},accept:a?.join(","),onChange:(f)=>{if(f.target.files&&f.target.files.length>0&&f.target.files[0])C(f.target.files[0])}},void 0,!1,void 0,this),b?Y("div",{className:"uploading-status",children:[Y(ao,{className:"opaca-spin",size:24},void 0,!1,void 0,this),Y("span",{className:"status-text",children:"Uploading..."},void 0,!1,void 0,this)]},void 0,!0,void 0,this):Y(Km,{children:[Y(fm,{size:24,className:"upload-icon"},void 0,!1,void 0,this),Y("p",{className:"upload-prompt",children:["Drag & drop a file here, or ",Y("span",{children:"click to browse"},void 0,!1,void 0,this),"."]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),Y("div",{className:"asset-manager-grid-container",children:c?Y("div",{className:"loading-assets",children:[Y(ao,{className:"opaca-spin",size:32},void 0,!1,void 0,this),Y("p",{children:"Loading assets..."},void 0,!1,void 0,this)]},void 0,!0,void 0,this):G.length===0&&W.length===0?Y("div",{className:"no-assets",children:[Y(no,{size:48,className:"empty-icon"},void 0,!1,void 0,this),Y("p",{children:"No assets found here."},void 0,!1,void 0,this)]},void 0,!0,void 0,this):Y("div",{className:`asset-manager-grid mode-${y}`,children:[W.map((f)=>Y("button",{type:"button",className:"asset-manager-card folder-card",onClick:()=>Wr(g?`${g}/${f.name}`:f.name),children:[Y("div",{className:"asset-thumb",children:Y(Hm,{size:40,className:"folder-icon"},void 0,!1,void 0,this)},void 0,!1,void 0,this),Y("div",{className:"asset-info",children:[Y("span",{className:"filename",children:f.name},void 0,!1,void 0,this),Y("span",{className:"file-meta",children:"Folder"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},`folder-${f.name}`,!0,void 0,this)),G.map((f)=>Y("button",{type:"button",className:"asset-manager-card asset-card",onClick:()=>{let U=cr();r({assetId:f.id,url:`${U}/api/assets/${f.id}/view`,filename:f.filename,mimeType:f.mimeType||f.mime_type||"",filesize:f.filesize})},children:[Y("div",{className:"asset-thumb",children:(()=>{let U=f.mimeType||f.mime_type;return U?.startsWith("image/")?Y("img",{src:`${cr()}/api/assets/${f.id}/view`,alt:f.filename},void 0,!1,void 0,this):s(U||"")})()},void 0,!1,void 0,this),Y("div",{className:"asset-info",children:[Y("span",{className:"filename",title:f.filename,children:f.filename},void 0,!1,void 0,this),Y("span",{className:"file-meta",children:[(f.mimeType||f.mime_type||"").split("/")[1]?.toUpperCase()||"FILE"," ","• ",((f.filesize||0)/1024).toFixed(1)," KB"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),Y("div",{className:"selection-overlay",children:Y("div",{className:"select-badge",children:"Select"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},f.id,!0,void 0,this))]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)};import{jsxDEV as rr,Fragment as em}from"react/jsx-dev-runtime";class Cr extends Zm{title;icon;description;onSelect;constructor(r,n){super(r);this.title=r,this.icon=n.icon,this.description=n.description,this.onSelect=n.onSelect}}function mo(){let[r]=_m(),[n,a]=oo(null),[p,o]=oo(!1),m=Xm("/",{minLength:0}),c=(y)=>{let N=y.url||`${cr()}/api/assets/${y.id||y.assetId}/view`;r.update(()=>{let b=Er(N,y.filename||"Image");Am([b])}),o(!1)},v=dm(()=>{let y=[new Cr("Paragraph",{icon:rr(Sm,{size:18},void 0,!1,void 0,this),description:"Just start typing with plain text.",onSelect:()=>{r.update(()=>{let N=Qn();if(An(N))hn(N,()=>Ra("h1")),hn(N,()=>Ra("h1"))})}}),new Cr("Heading 1",{icon:rr($m,{size:18},void 0,!1,void 0,this),description:"Large section heading.",onSelect:()=>{r.update(()=>{let N=Qn();if(An(N))hn(N,()=>Ra("h1"))})}}),new Cr("Heading 2",{icon:rr(km,{size:18},void 0,!1,void 0,this),description:"Medium section heading.",onSelect:()=>{r.update(()=>{let N=Qn();if(An(N))hn(N,()=>Ra("h2"))})}}),new Cr("Bullet List",{icon:rr(Um,{size:18},void 0,!1,void 0,this),description:"Create a simple bullet list.",onSelect:()=>{r.dispatchCommand(Pm,void 0)}}),new Cr("Numbered List",{icon:rr(Im,{size:18},void 0,!1,void 0,this),description:"Create a list with numbering.",onSelect:()=>{r.dispatchCommand(Ym,void 0)}}),new Cr("Quote",{icon:rr(Om,{size:18},void 0,!1,void 0,this),description:"Capture a quotation.",onSelect:()=>{r.update(()=>{let N=Qn();if(An(N))hn(N,()=>Qm())})}}),new Cr("Code Block",{icon:rr(Bm,{size:18},void 0,!1,void 0,this),description:"Write code snippets.",onSelect:()=>{r.update(()=>{let N=Qn();if(An(N))hn(N,()=>Jm())})}}),new Cr("Image",{icon:rr(Mm,{size:18},void 0,!1,void 0,this),description:"Insert an image from media library.",onSelect:()=>{o(!0)}})];if(!n)return y;return y.filter((N)=>N.title.toLowerCase().includes(n.toLowerCase()))},[r,n]),g=Fm((y,N,b)=>{r.update(()=>{if(N)N.remove();y.onSelect(n||""),b()})},[r,n]);return rr(em,{children:[rr(qm,{onQueryChange:a,onSelectOption:g,triggerFn:m,options:v,menuRenderFn:(y,{selectedIndex:N,selectOptionAndCleanUp:b,setHighlightedIndex:i})=>y.current&&v.length>0?to.createPortal(rr(mn,{className:"opaca-slash-menu",maxHeight:"300px",children:v.map((R,l)=>rr("button",{className:`opaca-slash-menu-item ${N===l?"is-selected":""}`,onClick:()=>b(R),onMouseEnter:()=>i(l),children:[rr("div",{className:"opaca-slash-menu-icon",children:R.icon},void 0,!1,void 0,this),rr("div",{className:"opaca-slash-menu-text",children:[rr("span",{className:"opaca-slash-menu-title",children:R.title},void 0,!1,void 0,this),rr("span",{className:"opaca-slash-menu-desc",children:R.description},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},R.key,!0,void 0,this))},void 0,!1,void 0,this),y.current):null},void 0,!1,void 0,this),p&&rr(Ur,{bucket:"default",onClose:()=>o(!1),onSelect:c},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}import{useLexicalComposerContext as sm}from"@lexical/react/LexicalComposerContext";import{useEffect as xm}from"react";function co({isEditable:r}){let[n]=sm();return xm(()=>{n.setEditable(r)},[n,r]),null}import{TOGGLE_LINK_COMMAND as Em}from"@lexical/link";import{useLexicalComposerContext as Vm}from"@lexical/react/LexicalComposerContext";import{$getSelection as jm,$insertNodes as Dm,$isRangeSelection as rc,COMMAND_PRIORITY_CRITICAL as nc,FORMAT_TEXT_COMMAND as Da,SELECTION_CHANGE_COMMAND as ac}from"lexical";import{Bold as pc,Image as oc,Italic as tc,LinkIcon as mc,Strikethrough as cc}from"lucide-react";import{useCallback as yc,useEffect as rp,useRef as ic,useState as un}from"react";import*as yo from"react-dom";import{jsxDEV as vr,Fragment as bc}from"react/jsx-dev-runtime";function io(){let[r,n]=un(!1),[a]=Vm(),[p,o]=un(!1),[m,c]=un(!1),[v,g]=un(!1),[y,N]=un(!1),b=ic(null),[i,R]=un({top:0,left:0}),l=yc(()=>{let h=jm();if(rc(h)){o(h.hasFormat("bold")),c(h.hasFormat("italic")),g(h.hasFormat("strikethrough"));let G=window.getSelection(),W=a.getRootElement();if(G!==null&&!G.isCollapsed&&W!==null&&W.contains(G.anchorNode)){let Q=G.getRangeAt(0).getBoundingClientRect();R({top:Q.top-45,left:Q.left+Q.width/2}),N(!0)}else N(!1)}else N(!1)},[a]);rp(()=>{return a.registerUpdateListener(({editorState:h})=>{h.read(()=>{l()})})},[a,l]),rp(()=>{return a.registerCommand(ac,(h)=>{return l(),!1},nc)},[a,l]),rp(()=>{let h=()=>{if(y)l()};return window.addEventListener("resize",h),window.addEventListener("scroll",h),()=>{window.removeEventListener("resize",h),window.removeEventListener("scroll",h)}},[y,l]);let u=(h)=>{let G=h.url||`${cr()}/api/assets/${h.id||h.assetId}/view`;a.update(()=>{let W=Er(G,h.filename||"Image");Dm([W])}),n(!1)};if(!y&&!r)return null;return vr(bc,{children:[y&&yo.createPortal(vr("div",{ref:b,className:"opaca-lexical-bubble-menu",style:{position:"fixed",top:i.top-(typeof window<"u"?window.scrollY:0),left:i.left,transform:"translateX(-50%)",zIndex:1000,pointerEvents:"auto"},children:[vr("button",{type:"button",onClick:()=>{a.dispatchCommand(Da,"bold")},className:`opaca-lexical-btn ${p?"is-active":""}`,children:vr(pc,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),vr("button",{type:"button",onClick:()=>{a.dispatchCommand(Da,"italic")},className:`opaca-lexical-btn ${m?"is-active":""}`,children:vr(tc,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),vr("button",{type:"button",onClick:()=>{a.dispatchCommand(Da,"strikethrough")},className:`opaca-lexical-btn ${v?"is-active":""}`,children:vr(cc,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),vr("button",{type:"button",onClick:()=>{a.dispatchCommand(Em,"https://")},className:"opaca-lexical-btn",children:vr(mc,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),vr("button",{type:"button",onClick:()=>n(!0),className:"opaca-lexical-btn",children:vr(oc,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),document.body),r&&vr(Ur,{bucket:"default",onClose:()=>n(!1),onSelect:u},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}import{$createCodeNode as gc}from"@lexical/code";import{TOGGLE_LINK_COMMAND as vc}from"@lexical/link";import{INSERT_ORDERED_LIST_COMMAND as Nc,INSERT_UNORDERED_LIST_COMMAND as Rc}from"@lexical/list";import{useLexicalComposerContext as lc}from"@lexical/react/LexicalComposerContext";import{$createHeadingNode as bo,$createQuoteNode as hc,$isHeadingNode as uc}from"@lexical/rich-text";import{$setBlocksType as la}from"@lexical/selection";import{$getSelection as Bn,$insertNodes as zc,$isRangeSelection as $n,COMMAND_PRIORITY_CRITICAL as wc,FORMAT_TEXT_COMMAND as np,SELECTION_CHANGE_COMMAND as Tc}from"lexical";import{Bold as Hc,Code as fc,Heading1 as Lc,Heading2 as Wc,Image as Cc,Italic as Gc,Link as Kc,List as Jc,ListOrdered as Yc,Quote as Pc,Strikethrough as _c}from"lucide-react";import{useCallback as go,useEffect as qc,useState as kn}from"react";import{jsxDEV as e,Fragment as Zc}from"react/jsx-dev-runtime";function vo(){let[r,n]=kn(!1),[a]=lc(),[p,o]=kn(!1),[m,c]=kn(!1),[v,g]=kn(!1),[y,N]=kn("paragraph"),b=go(()=>{let W=Bn();if($n(W)){o(W.hasFormat("bold")),c(W.hasFormat("italic")),g(W.hasFormat("strikethrough"));let C=W.anchor.getNode(),Q=C.getKey()==="root"?C:C.getTopLevelElementOrThrow(),s=Q.getKey();if(a.getElementByKey(s)!==null)if(uc(Q)){let U=Q.getTag();N(U)}else{let U=Q.getType();N(U)}}},[a]);qc(()=>{return a.registerCommand(Tc,(W)=>{return b(),!1},wc)},[a,b]);let i=(W)=>{if(y!==W)a.update(()=>{let C=Bn();if($n(C))la(C,()=>bo(W))});else a.update(()=>{let C=Bn();if($n(C))la(C,()=>bo("h1"))})},R=()=>{if(y!=="quote")a.update(()=>{let W=Bn();if($n(W))la(W,()=>hc())})},l=()=>{if(y!=="code")a.update(()=>{let W=Bn();if($n(W))la(W,()=>gc())})},u=(W)=>{if(W==="bullet")a.dispatchCommand(Rc,void 0);else a.dispatchCommand(Nc,void 0)},h=go(()=>{a.dispatchCommand(vc,"https://")},[a]);return e(Zc,{children:[e("div",{className:"opaca-lexical-toolbar",children:[e("button",{type:"button",onClick:()=>{a.dispatchCommand(np,"bold")},className:`opaca-lexical-btn ${p?"is-active":""}`,children:e(Hc,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),e("button",{type:"button",onClick:()=>{a.dispatchCommand(np,"italic")},className:`opaca-lexical-btn ${m?"is-active":""}`,children:e(Gc,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),e("button",{type:"button",onClick:()=>{a.dispatchCommand(np,"strikethrough")},className:`opaca-lexical-btn ${v?"is-active":""}`,children:e(_c,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),e("div",{className:"opaca-lexical-divider"},void 0,!1,void 0,this),e("button",{type:"button",onClick:()=>i("h1"),className:`opaca-lexical-btn ${y==="h1"?"is-active":""}`,children:e(Lc,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),e("button",{type:"button",onClick:()=>i("h2"),className:`opaca-lexical-btn ${y==="h2"?"is-active":""}`,children:e(Wc,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),e("button",{type:"button",onClick:()=>u("bullet"),className:`opaca-lexical-btn ${y==="ul"?"is-active":""}`,children:e(Jc,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),e("button",{type:"button",onClick:()=>u("number"),className:`opaca-lexical-btn ${y==="ol"?"is-active":""}`,children:e(Yc,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),e("button",{type:"button",onClick:R,className:`opaca-lexical-btn ${y==="quote"?"is-active":""}`,children:e(Pc,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),e("button",{type:"button",onClick:l,className:`opaca-lexical-btn ${y==="code"?"is-active":""}`,children:e(fc,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),e("div",{className:"opaca-lexical-divider"},void 0,!1,void 0,this),e("button",{type:"button",onClick:h,className:"opaca-lexical-btn",children:e(Kc,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),e("button",{type:"button",onClick:()=>n(!0),className:"opaca-lexical-btn",children:e(Cc,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),r&&e(Ur,{bucket:"default",onClose:()=>n(!1),onSelect:(W)=>{let C=W.url||`${cr()}/api/assets/${W.id||W.assetId}/view`;a.update(()=>{let Q=Er(C,W.filename||"Image");zc([Q])}),n(!1)}},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}import{useLexicalComposerContext as Xc}from"@lexical/react/LexicalComposerContext";import{useEffect as Qc,useRef as Ac}from"react";function No({value:r}){let[n]=Xc(),a=Ac(!0);return Qc(()=>{if(a.current){a.current=!1;return}if(ap(r))n.update(()=>{if(JSON.stringify(n.getEditorState().toJSON())!==r)try{let o=n.parseEditorState(r);n.setEditorState(o)}catch(o){console.error("Failed to parse editor state in ValueSyncPlugin:",o)}})},[n,r]),null}import{jsxDEV as D}from"react/jsx-dev-runtime";var ry={ltr:"ltr",rtl:"rtl",placeholder:"editor-placeholder",paragraph:"editor-paragraph",quote:"editor-quote",heading:{h1:"editor-heading-h1",h2:"editor-heading-h2",h3:"editor-heading-h3",h4:"editor-heading-h4",h5:"editor-heading-h5",h6:"editor-heading-h6"},list:{nested:{listitem:"editor-nested-listitem"},ol:"editor-list-ol",ul:"editor-list-ul",listitem:"editor-listitem",listitemChecked:"editor-listitem-checked",listitemUnchecked:"editor-listitem-unchecked"},image:"editor-image",link:"editor-link",text:{bold:"editor-text-bold",italic:"editor-text-italic",overflowed:"editor-text-overflowed",hashtag:"editor-text-hashtag",underline:"editor-text-underline",strikethrough:"editor-text-strikethrough",underlineStrikethrough:"editor-text-underlineStrikethrough",code:"editor-text-code"},code:"editor-code",codeHighlight:{atrule:"editor-tokenAttr",attr:"editor-tokenAttr",boolean:"editor-tokenProperty",builtin:"editor-tokenSelector",cdata:"editor-tokenComment",char:"editor-tokenSelector",class:"editor-tokenFunction","class-name":"editor-tokenFunction",comment:"editor-tokenComment",constant:"editor-tokenProperty",deleted:"editor-tokenProperty",doctype:"editor-tokenComment",entity:"editor-tokenOperator",function:"editor-tokenFunction",important:"editor-tokenVariable",inserted:"editor-tokenSelector",keyword:"editor-tokenAttr",namespace:"editor-tokenVariable",number:"editor-tokenProperty",operator:"editor-tokenOperator",prolog:"editor-tokenComment",property:"editor-tokenProperty",punctuation:"editor-tokenPunctuation",regex:"editor-tokenVariable",selector:"editor-tokenSelector",string:"editor-tokenSelector",symbol:"editor-tokenProperty",tag:"editor-tokenProperty",url:"editor-tokenOperator",variable:"editor-tokenVariable"}};function ny(){return D("div",{className:"opaca-lexical-placeholder",children:'Press "/" for commands, or start typing...'},void 0,!1,void 0,this)}var ap=(r)=>{if(!r)return;if(typeof r==="string"){let n=r.trim();return n.startsWith("{")?n:void 0}if(typeof r==="object")try{return JSON.stringify(r)}catch{return}return};function ha({value:r,onChange:n,defaultMode:a="simple",disabled:p,readOnly:o}){let[m,c]=Dc(a),v=!p&&!o,g={namespace:"OpacaLexical",theme:ry,editable:v,nodes:[Vc,Uc,Mc,jc,Bc,kc,$c,Ic,Zn],onError:(N)=>{console.error(N)},editorState:ap(r)},y=(N)=>{let b=JSON.stringify(N.toJSON());n(b)};return D("div",{className:"opaca-lexical-wrapper",children:[v&&D("div",{className:"opaca-lexical-modes",children:[D("button",{type:"button",className:`opaca-btn ${m==="simple"?"opaca-btn-primary":"opaca-btn-outline"}`,onClick:()=>c("simple"),children:"Simple"},void 0,!1,void 0,this),D("button",{type:"button",className:`opaca-btn ${m==="notion"?"opaca-btn-primary":"opaca-btn-outline"}`,onClick:()=>c("notion"),children:"Notion-like"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),D("div",{className:`opaca-lexical-container mode-${m} ${!v?"is-readonly":""}`,children:D(Oc,{initialConfig:g,children:[m==="simple"&&v&&D(vo,{},void 0,!1,void 0,this),m==="notion"&&v&&D(io,{},void 0,!1,void 0,this),D("div",{className:"opaca-lexical-editor-inner",children:[D(Ec,{contentEditable:D(Sc,{className:"opaca-lexical-content"},void 0,!1,void 0,this),placeholder:D(ny,{},void 0,!1,void 0,this),ErrorBoundary:Fc},void 0,!1,void 0,this),D(xc,{onChange:y,ignoreSelectionChange:!0},void 0,!1,void 0,this),D(No,{value:r},void 0,!1,void 0,this),D(co,{isEditable:v},void 0,!1,void 0,this),D(dc,{},void 0,!1,void 0,this),D(sc,{},void 0,!1,void 0,this),D(ec,{},void 0,!1,void 0,this),D(mo,{},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}import{jsxDEV as V}from"react/jsx-dev-runtime";var ua=({data:r,label:n,depth:a=0,isEditing:p,onChange:o})=>{if(r===null||r===void 0)return V("span",{className:"opaca-text-muted",children:"None"},void 0,!1,void 0,this);if(Array.isArray(r)){if(r.length===0)return V("span",{className:"opaca-text-muted",children:"Empty"},void 0,!1,void 0,this);return V("div",{className:"opaca-detail-list",children:r.map((c,v)=>V("div",{className:"opaca-detail-item-card",children:[c?.blockType&&V("div",{className:"opaca-detail-item-header",children:V("span",{className:"opaca-badge",children:c.blockType},void 0,!1,void 0,this)},void 0,!1,void 0,this),V("div",{className:"opaca-detail-item-content",children:typeof c==="object"?V(ua,{data:c,depth:a+1,isEditing:p,onChange:(g)=>{let y=[...r];y[v]=g,o?.(y)}},void 0,!1,void 0,this):p?V(fr,{value:String(c),onChange:(g)=>{let y=[...r];y[v]=g.target.value,o?.(y)}},void 0,!1,void 0,this):V("span",{className:"opaca-detail-value",children:String(c)},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},c||v,!0,void 0,this))},void 0,!1,void 0,this)}if(((c)=>{if(!c)return!1;if(typeof c==="object")return c!==null&&"root"in c;if(typeof c==="string"){let v=c.trim();if(!v.startsWith("{"))return!1;try{let g=JSON.parse(v);return g&&typeof g==="object"&&"root"in g}catch{return!1}}return!1})(r)&&a===0){let c=r;if(typeof r==="object")try{c=JSON.stringify(r)}catch(v){}return V("div",{className:"opaca-detail-richtext-preview",children:V(ha,{value:c,onChange:(v)=>{try{o?.(JSON.parse(v))}catch(g){o?.(v)}},readOnly:!p},void 0,!1,void 0,this)},void 0,!1,void 0,this)}if(typeof r==="object"&&r!==null){let c=Object.keys(r).filter((v)=>v!=="blockType"&&v!=="id"&&v!=="_order"&&!v.startsWith("_"));if(c.length===0)return V("span",{className:"opaca-text-muted",children:"Empty Object"},void 0,!1,void 0,this);return V("div",{className:P("opaca-detail-grid",a>0&&"nested"),children:c.map((v)=>V("div",{className:"opaca-detail-row",children:[V("span",{className:"opaca-detail-label",children:v.replace(/([A-Z])/g," $1").replace(/^./,(g)=>g.toUpperCase())},void 0,!1,void 0,this),V("div",{className:"opaca-detail-value-container",children:typeof r[v]==="object"&&r[v]!==null?V(ua,{data:r[v],depth:a+1,isEditing:p,onChange:(g)=>{o?.({...r,[v]:g})}},void 0,!1,void 0,this):p?V(fr,{value:r[v]===!0?"true":r[v]===!1?"false":String(r[v]??""),onChange:(g)=>{let y=g.target.value;if(y==="true")y=!0;if(y==="false")y=!1;o?.({...r,[v]:y})}},void 0,!1,void 0,this):V("span",{className:"opaca-detail-value",children:r[v]===!0?"Yes":r[v]===!1?"No":String(r[v]??"-")},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},v,!0,void 0,this))},void 0,!1,void 0,this)}return V("span",{className:"opaca-detail-value",children:String(r)},void 0,!1,void 0,this)};import{useStore as my}from"@nanostores/react";import{jsxDEV as E,Fragment as cy}from"react/jsx-dev-runtime";var Ro=({open:r,onOpenChange:n,title:a,description:p,data:o,onSave:m,field:c})=>{let[v,g]=pp(!1),[y,N]=pp(o),i=my(lr)?.i18n,[R,l]=pp(i?.defaultLocale||"default");ty(()=>{if(N(o),g(!1),i)l(i.defaultLocale)},[o,r,i]);let u=()=>{if(m)m(y);g(!1)};return E(Qr,{open:r,onOpenChange:n,children:E(Ar,{onClose:()=>n(!1),className:"opaca-data-detail-sheet",children:E("div",{style:{display:"flex",flexDirection:"column",height:"100%"},children:[E(Br,{children:E("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center"},children:[E("div",{children:[E($r,{children:a},void 0,!1,void 0,this),p&&E(ia,{children:p},void 0,!1,void 0,this)]},void 0,!0,void 0,this),m&&E("div",{style:{display:"flex",gap:"0.5rem",alignItems:"center"},children:[v&&i&&i.locales.length>0&&E("div",{style:{display:"flex",borderRight:"1px solid var(--border)",paddingRight:"0.5rem",marginRight:"0.5rem",gap:"0.25rem"},children:i.locales.map((h)=>E(d,{variant:R===h?"default":"outline",size:"sm",onClick:()=>l(h),style:{height:"32px",fontSize:"12px"},children:h.toUpperCase()},h,!1,void 0,this))},void 0,!1,void 0,this),!v?E(d,{variant:"outline",size:"sm",onClick:()=>g(!0),style:{height:"32px",gap:"4px"},children:[E(ay,{size:14},void 0,!1,void 0,this),"Edit"]},void 0,!0,void 0,this):E(cy,{children:[E(d,{variant:"ghost",size:"sm",onClick:()=>{N(o),g(!1)},style:{height:"32px",gap:"4px"},children:[E(oy,{size:14},void 0,!1,void 0,this),"Cancel"]},void 0,!0,void 0,this),E(d,{variant:"default",size:"sm",onClick:u,style:{height:"32px",gap:"4px"},children:[E(py,{size:14},void 0,!1,void 0,this),"Save"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),E("div",{style:{flex:1,minHeight:0,marginTop:"1.5rem"},children:E(mn,{style:{height:"100%"},children:E("div",{style:{paddingRight:"1rem",paddingBottom:"2rem"},children:E(ua,{data:y,isEditing:v,onChange:N},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)};import Ir from"react";import{jsxDEV as Gr}from"react/jsx-dev-runtime";var op=Ir.forwardRef(({className:r,...n},a)=>Gr("div",{className:"opaca-table-wrapper",children:Gr("table",{ref:a,className:`opaca-new-table ${r||""}`,...n},void 0,!1,void 0,this)},void 0,!1,void 0,this));op.displayName="Table";var tp=Ir.forwardRef(({className:r,...n},a)=>Gr("thead",{ref:a,className:`opaca-table-header ${r||""}`,...n},void 0,!1,void 0,this));tp.displayName="TableHeader";var mp=Ir.forwardRef(({className:r,...n},a)=>Gr("tbody",{ref:a,className:`opaca-table-body ${r||""}`,...n},void 0,!1,void 0,this));mp.displayName="TableBody";var yy=Ir.forwardRef(({className:r,...n},a)=>Gr("tfoot",{ref:a,className:`opaca-table-footer ${r||""}`,...n},void 0,!1,void 0,this));yy.displayName="TableFooter";var za=Ir.forwardRef(({className:r,...n},a)=>Gr("tr",{ref:a,className:`opaca-table-row ${r||""}`,...n},void 0,!1,void 0,this));za.displayName="TableRow";var Mn=Ir.forwardRef(({className:r,...n},a)=>Gr("th",{ref:a,className:`opaca-table-head ${r||""}`,...n},void 0,!1,void 0,this));Mn.displayName="TableHead";var Un=Ir.forwardRef(({className:r,...n},a)=>Gr("td",{ref:a,className:`opaca-table-cell ${r||""}`,...n},void 0,!1,void 0,this));Un.displayName="TableCell";var iy=Ir.forwardRef(({className:r,...n},a)=>Gr("caption",{ref:a,className:`opaca-table-caption ${r||""}`,...n},void 0,!1,void 0,this));iy.displayName="TableCaption";import{useEffect as by,useState as gy}from"react";function lo(r,n){let[a,p]=gy(r);return by(()=>{let o=setTimeout(()=>p(r),n||500);return()=>{clearTimeout(o)}},[r,n]),a}import{jsxDEV as L,Fragment as fy}from"react/jsx-dev-runtime";function Hy(r){return r.replace(/([A-Z])/g,"_$1").toLowerCase().replace(/^_/,"")}function wo(r,n=!1){if(!r)return"-";let a=new Date(r);if(Number.isNaN(a.getTime()))return String(r);return n?a.toLocaleString():a.toLocaleDateString()}function To({collection:r}){let[n,a]=Dr(1),[p,o]=Dr(10),[m,c]=Dr(""),[v,g]=Dr(""),[y,N]=Dr(null),[b,i]=Dr({open:!1,title:"",data:null}),[R,l]=Dr({open:!1,relationTo:"",id:""}),u=lo(v,400),h=ho(Mr),G=cp(()=>r.fields.filter((w)=>w.name),[r.fields]);zo(()=>{let w=typeof r.admin==="object"?r.admin?.defaultColumns:void 0;dp(r.slug,G,w)},[r.slug,G,typeof r.admin==="object"?r.admin?.defaultColumns:void 0]);let W=cp(()=>{let w=h[r.slug];return w?G.filter((K)=>w.includes(K.name)):G},[h,r.slug,G]);zo(()=>{let K=(typeof r.admin==="object"&&r.admin!==null?r.admin.useAsTitle:void 0)||G.find((q)=>q.name==="title"||q.name==="name"||q.name==="slug")?.name||"id",J=r.fields.filter((q)=>q.type==="relationship"&&q.displayField).map((q)=>q.name).join(",");qn.set({slug:r.apiPath||r.slug,page:n,limit:p,sort:m,search:u,searchField:K,filter:y!==null&&typeof r.admin==="object"?r.admin?.views?.[y]?.filter:void 0,populate:J||void 0})},[r.slug,r.apiPath,r.admin,G,n,p,m,u,y]);let{data:C,loading:Q}=ho(Ip),s=(w)=>{if(m===w)c(`-${w}`);else if(m===`-${w}`)c("");else c(w);a(1)},f=async(w)=>{if(!b.field||!b.docId)return;try{let K={[b.field]:w};await M.patch(`api/${r.apiPath||r.slug}/${b.docId}`,{json:K}).json();let J=qn.get();if(J)qn.set({...J,slug:J.slug});S("Document updated successfully","success"),i({...b,open:!1})}catch(K){console.error(K),S("Failed to update document","error")}},U=(w)=>{if(m===w)return L(vy,{size:14,style:{marginLeft:"4px",opacity:0.7}},void 0,!1,void 0,this);if(m===`-${w}`)return L(Ny,{size:14,style:{marginLeft:"4px",opacity:0.7}},void 0,!1,void 0,this);return null},T=C?.docs||[],_=cp(()=>{if(typeof r.timestamps==="object"&&r.timestamps?.createdAt)return Hy(r.timestamps.createdAt);return"created_at"},[r.timestamps]);return L("div",{className:`opaca-view-container ${Q?"loading":""}`,children:[L("div",{className:"opaca-header",children:[L("div",{children:[L("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem"},children:[L("h1",{className:"opaca-title",children:r.label||(r.slug.startsWith("_")?r.slug.replace(/^_+/,"").replace(/_/g," ").replace(/\b\w/g,(w)=>w.toUpperCase()):r.slug.charAt(0).toUpperCase()+r.slug.slice(1))},void 0,!1,void 0,this),C&&L("span",{className:"opaca-badge",children:[C.totalDocs," ",C.totalDocs===1?"document":"documents"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),L("p",{className:"opaca-subtitle",children:["Manage your ",r.slug," entries."]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),L("div",{style:{display:"flex",gap:"0.75rem",alignItems:"center"},children:[L("div",{style:{position:"relative",width:"240px"},children:[L(Ty,{size:16,style:{position:"absolute",left:"10px",top:"50%",transform:"translateY(-50%)",color:"var(--opaca-text-muted)"}},void 0,!1,void 0,this),L("input",{type:"text",className:"opaca-input",placeholder:"Search documents...",value:v,onChange:(w)=>{g(w.target.value),a(1)},style:{paddingLeft:"36px"}},void 0,!1,void 0,this)]},void 0,!0,void 0,this),L(ep,{slug:r.slug,fields:G},void 0,!1,void 0,this),L(yr,{href:`/admin/collections/${r.slug}/create`,className:"opaca-btn opaca-btn-primary",style:{textDecoration:"none"},children:[L(uo,{size:18},void 0,!1,void 0,this),"Create New"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),typeof r.admin==="object"&&r.admin?.views&&r.admin.views.length>0&&L("div",{style:{display:"flex",gap:"0.5rem",marginBottom:"1.25rem",overflowX:"auto",paddingBottom:"0.5rem"},children:[L("button",{type:"button",className:`opaca-btn ${y===null?"opaca-btn-primary":"opaca-btn-outline"}`,onClick:()=>{N(null),a(1)},style:{padding:"0.4rem 1rem",fontSize:"0.875rem"},children:"All"},void 0,!1,void 0,this),r.admin.views.map((w,K)=>L("button",{type:"button",className:`opaca-btn ${y===K?"opaca-btn-primary":"opaca-btn-outline"}`,onClick:()=>{N(K),a(1)},style:{padding:"0.4rem 1rem",fontSize:"0.875rem"},children:w.name},w.name,!1,void 0,this))]},void 0,!0,void 0,this),L("div",{className:"opaca-table-container",children:[Q&&L("div",{className:"opaca-loading-overlay",children:L(zy,{size:24,className:"opaca-spin"},void 0,!1,void 0,this)},void 0,!1,void 0,this),L(Ro,{open:b.open,onOpenChange:(w)=>i({...b,open:w}),title:b.title,data:b.data,onSave:f,field:b.field},void 0,!1,void 0,this),T.length>0?L(fy,{children:[L(op,{children:[L(tp,{children:L(za,{children:[W.map((w)=>L(Mn,{onClick:()=>s(w.name),style:{cursor:"pointer",userSelect:"none"},children:L("div",{style:{display:"flex",alignItems:"center"},children:[w.label||w.name,U(w.name)]},void 0,!0,void 0,this)},w.name,!1,void 0,this)),r.timestamps&&L(Mn,{onClick:()=>s("createdAt"),style:{cursor:"pointer",userSelect:"none"},children:L("div",{style:{display:"flex",alignItems:"center"},children:["Created At",U("createdAt")]},void 0,!0,void 0,this)},void 0,!1,void 0,this),L(Mn,{style:{width:"50px"}},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),L(mp,{children:T.map((w)=>L(za,{children:[W.map((K)=>{let J=w[K.name];return L(Un,{className:["richtext","json","group","relationship"].includes(K.type)?"opaca-cell-interactive":"",onClick:(q)=>{if(!["richtext","json","group","relationship"].includes(K.type))return;q.stopPropagation(),i({open:!0,title:K.label||K.name||"Details",data:J,field:K.name,docId:w.id})},children:K.type==="boolean"?J?L("span",{className:"opaca-badge",style:{color:"var(--opaca-success)"},children:"Yes"},void 0,!1,void 0,this):L("span",{className:"opaca-badge",style:{color:"var(--opaca-text-dim)"},children:"No"},void 0,!1,void 0,this):r.slug==="_opaca_assets"&&K.name==="filename"?L("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem"},children:[L("div",{style:{width:"32px",height:"32px",borderRadius:"6px",background:"var(--opaca-surface)",overflow:"hidden",display:"flex",alignItems:"center",justifyContent:"center",border:"1px solid var(--opaca-border)"},children:(()=>{return String(w.mimeType||w.mime_type).startsWith("image/")?L("img",{src:`${cr()}/api/${r.apiPath||r.slug}/${w.id}/view`,style:{width:"100%",height:"100%",objectFit:"cover"},alt:""},void 0,!1,void 0,this):L(wy,{size:14,style:{opacity:0.5}},void 0,!1,void 0,this)})()},void 0,!1,void 0,this),L("span",{style:{fontWeight:500},children:String(J??"-")},void 0,!1,void 0,this)]},void 0,!0,void 0,this):K.type==="blocks"&&Array.isArray(J)?L("button",{type:"button",onClick:(q)=>{q.stopPropagation(),i({open:!0,title:K.label||K.name||"Blocks",data:J,field:K.name,docId:w.id})},className:"opaca-badge opaca-badge-interactive",style:{color:"var(--opaca-text-dim)"},children:[J.length," block",J.length!==1?"s":""]},void 0,!0,void 0,this):K.type==="relationship"?L("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem"},children:[(()=>{let q=Array.isArray(J)?J[0]:J;if(q&&typeof q==="object"&&q.filename)return L("div",{style:{width:"24px",height:"24px",borderRadius:"4px",overflow:"hidden",border:"1px solid var(--opaca-border)",flexShrink:0},children:L("img",{src:`${cr()}/api/_opaca_assets/${q.id}/view`,style:{width:"100%",height:"100%",objectFit:"cover"},alt:""},void 0,!1,void 0,this)},void 0,!1,void 0,this);return null})(),(()=>{let q=Array.isArray(J)?J[0]:J;return L("button",{type:"button",className:"opaca-badge opaca-badge-interactive",style:{color:"var(--opaca-text-dim)"},onClick:(br)=>{br.stopPropagation();let ur=q?.id||(typeof q==="string"?q:"");if(ur)l({open:!0,relationTo:K.relationTo||"",id:ur})},children:K.hasMany&&Array.isArray(J)?`${J.length} item${J.length!==1?"s":""}`:typeof q==="object"&&q!==null?q[K.displayField||"id"]||q.id||"[Object]":String(J??"-")},void 0,!1,void 0,this)})()]},void 0,!0,void 0,this):K.type==="group"&&typeof J==="object"&&J!==null?L("span",{className:"opaca-badge",style:{background:"rgba(255, 255, 255, 0.05)",border:"1px solid var(--opaca-border)",color:"var(--opaca-text-dim)"},children:`{ ${Object.keys(J).length} keys }`},void 0,!1,void 0,this):K.type==="json"&&typeof J==="object"&&J!==null?L("span",{style:{color:"var(--opaca-text-dim)",fontFamily:"monospace",fontSize:"0.85em"},children:[JSON.stringify(J).slice(0,30),JSON.stringify(J).length>30?"...":""]},void 0,!0,void 0,this):K.type==="date"?L("span",{style:{color:"var(--opaca-text)",opacity:0.9},children:wo(J)},void 0,!1,void 0,this):typeof J==="object"&&J!==null?L("span",{className:"opaca-badge",style:{background:"rgba(255, 255, 255, 0.05)",border:"1px solid var(--opaca-border)",color:"var(--opaca-text-dim)"},children:"[Object]"},void 0,!1,void 0,this):L("span",{style:{color:"var(--opaca-text)",opacity:0.9},children:K.type==="richtext"?Fa(J).slice(0,30)+(Fa(J).length>30?"...":""):typeof J==="string"&&J.length>30?`${J.slice(0,30)}...`:String(J??"-")},void 0,!1,void 0,this)},K.name,!1,void 0,this)}),r.timestamps&&L(Un,{style:{color:"var(--opaca-text-muted)",fontSize:"12px"},children:wo(w[_],!0)},void 0,!1,void 0,this),L(Un,{children:L(yr,{href:`/admin/collections/${r.slug}/${w.id}`,className:"opaca-btn opaca-btn-outline",style:{padding:"0.4rem"},title:"Edit Document",children:L(hy,{size:14},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},w.id,!0,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this),C&&L("div",{className:"opaca-pagination",style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginTop:"1rem"},children:[L("div",{className:"opaca-pagination-info",style:{color:"var(--opaca-text-muted)",fontSize:"0.875rem"},children:["Showing ",(C.page-1)*C.limit+1," to"," ",Math.min(C.page*C.limit,C.totalDocs)," of ",C.totalDocs," documents"]},void 0,!0,void 0,this),L("div",{style:{display:"flex",alignItems:"center",gap:"1.5rem"},children:[L("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem"},children:[L("span",{style:{fontSize:"0.875rem",color:"var(--opaca-text-muted)"},children:"Rows per page:"},void 0,!1,void 0,this),L("select",{value:p,onChange:(w)=>{o(Number(w.target.value)),a(1)},className:"opaca-input",style:{padding:"0.25rem 0.5rem",height:"auto",width:"auto"},children:[L("option",{value:"10",children:"10"},void 0,!1,void 0,this),L("option",{value:"25",children:"25"},void 0,!1,void 0,this),L("option",{value:"50",children:"50"},void 0,!1,void 0,this),L("option",{value:"100",children:"100"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),L("div",{className:"opaca-pagination-actions",style:{display:"flex",gap:"0.5rem"},children:[L("button",{type:"button",className:"opaca-btn opaca-btn-outline",disabled:!C.hasPrevPage||Q,onClick:()=>a(n-1),style:{padding:"0.4rem"},children:L(Ry,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),L("button",{type:"button",className:"opaca-btn opaca-btn-outline",disabled:!C.hasNextPage||Q,onClick:()=>a(n+1),style:{padding:"0.4rem"},children:L(ly,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this):!Q?L("div",{className:"opaca-empty",children:[L("div",{className:"opaca-empty-icon",children:L(uy,{size:32},void 0,!1,void 0,this)},void 0,!1,void 0,this),L("h3",{style:{fontSize:"1.125rem",fontWeight:"600"},children:"No documents found"},void 0,!1,void 0,this),L("p",{className:"opaca-subtitle",style:{maxWidth:"300px"},children:"This collection is currently empty. Start by creating your first document."},void 0,!1,void 0,this),L(yr,{href:`/admin/collections/${r.slug}/create`,className:"opaca-btn opaca-btn-primary",style:{textDecoration:"none",marginTop:"0.5rem"},children:[L(uo,{size:18},void 0,!1,void 0,this),"Create First ",r.label||r.slug]},void 0,!0,void 0,this)]},void 0,!0,void 0,this):L("div",{style:{height:"200px"}},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}import{Activity as Ly,ArrowUpRight as Wy,Database as Cy}from"lucide-react";import{jsxDEV as $}from"react/jsx-dev-runtime";function Ho({config:r,user:n}){let a=r.collections.filter((p)=>!p.slug.startsWith("_"));return $("div",{children:[$("div",{className:"opaca-header",style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"2rem"},children:[$("div",{children:[$("h1",{className:"opaca-title",style:{marginBottom:"0.25rem"},children:r.appName||"OpacaCMS"},void 0,!1,void 0,this),$("p",{className:"opaca-subtitle",children:"Overview of your content management system"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),n&&$("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem",padding:"0.625rem 1rem",background:"rgba(255, 255, 255, 0.03)",borderRadius:"12px",border:"1px solid rgba(255, 255, 255, 0.08)",backdropFilter:"blur(10px)",boxShadow:"0 4px 12px rgba(0, 0, 0, 0.1)"},children:[$("div",{style:{width:"36px",height:"36px",borderRadius:"10px",background:"linear-gradient(135deg, var(--opaca-accent) 0%, #a78bfa 100%)",color:"white",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"0.875rem",fontWeight:"600",boxShadow:"0 2px 8px rgba(124, 58, 237, 0.3)"},children:n.name.charAt(0).toUpperCase()},void 0,!1,void 0,this),$("div",{style:{lineHeight:"1.3"},children:[$("div",{style:{fontSize:"0.875rem",fontWeight:"600",color:"var(--opaca-text)"},children:n.name},void 0,!1,void 0,this),$("div",{style:{fontSize:"0.75rem",color:"var(--opaca-text-dim)"},children:n.email},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),$("div",{className:"opaca-grid",style:{marginBottom:"2.5rem"},children:[$("div",{className:"opaca-card",children:[$("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem",marginBottom:"0.75rem"},children:[$("div",{style:{padding:"0.5rem",background:"var(--opaca-primary-glow)",color:"var(--opaca-accent)",borderRadius:"var(--opaca-radius)"},children:$(Cy,{size:18},void 0,!1,void 0,this)},void 0,!1,void 0,this),$("div",{children:[$("div",{style:{fontSize:"1.25rem",fontWeight:"600",lineHeight:"1.2"},children:a.length},void 0,!1,void 0,this),$("div",{style:{fontSize:"0.6875rem",color:"var(--opaca-text-dim)",textTransform:"uppercase",letterSpacing:"0.05em"},children:"Collections"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),$("p",{style:{fontSize:"0.75rem",color:"var(--opaca-text-muted)"},children:"Schema defined by Drizzle and synced automatically."},void 0,!1,void 0,this)]},void 0,!0,void 0,this),$("div",{className:"opaca-card",children:[$("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem",marginBottom:"0.75rem"},children:[$("div",{style:{padding:"0.5rem",background:"rgba(52, 211, 153, 0.1)",color:"var(--opaca-success)",borderRadius:"var(--opaca-radius)"},children:$(Ly,{size:18},void 0,!1,void 0,this)},void 0,!1,void 0,this),$("div",{children:[$("div",{style:{fontSize:"1.25rem",fontWeight:"600",lineHeight:"1.2"},children:"Online"},void 0,!1,void 0,this),$("div",{style:{fontSize:"0.6875rem",color:"var(--opaca-text-dim)",textTransform:"uppercase",letterSpacing:"0.05em"},children:"API Status"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),$("p",{style:{fontSize:"0.75rem",color:"var(--opaca-text-muted)"},children:["Hono-powered API on ",r.serverURL||"localhost","."]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),$("div",{style:{fontSize:"0.6875rem",fontWeight:"500",color:"var(--opaca-text-dim)",textTransform:"uppercase",letterSpacing:"0.05em",marginBottom:"0.75rem"},children:"Collections"},void 0,!1,void 0,this),$("div",{className:"opaca-grid",children:a.filter((p)=>!p.hidden).sort((p,o)=>p.admin===o.admin?0:p.admin?-1:1).map((p)=>{let o=p.label||p.slug.replace(/^_+/,"").replace(/_/g," ").replace(/\b\w/g,(m)=>m.toUpperCase());return $(yr,{href:`/admin/collections/${p.slug}`,className:"opaca-card",style:{textDecoration:"none",color:"inherit",cursor:"pointer"},children:[$("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:"0.25rem"},children:[$("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem"},children:[$("span",{style:{fontWeight:"500",fontSize:"0.875rem"},children:o},void 0,!1,void 0,this),p.admin&&$("div",{style:{width:"5px",height:"5px",borderRadius:"50%",backgroundColor:"var(--opaca-accent)",opacity:0.8,boxShadow:"0 0 5px var(--opaca-accent)"},title:p.slug==="_opaca_assets"?"System Assets Registry":"Universal Collection"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),$(Wy,{size:14,color:"var(--opaca-text-dim)"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),$("div",{style:{fontSize:"0.75rem",color:"var(--opaca-text-muted)"},children:[p.fields.length," fields"]},void 0,!0,void 0,this)]},p.slug,!0,void 0,this)})},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}import{useStore as bp}from"@nanostores/react";import{useForm as Vy}from"@tanstack/react-form";import{AlertCircle as jy,ArrowLeft as So,Loader2 as gp,Save as Fo,Trash2 as Dy}from"lucide-react";import{useEffect as ri,useMemo as eo,useState as ni}from"react";Tr();import Iy,{useEffect as Oy,useRef as Sy}from"react";import{Plus as Gy,Trash2 as Ky}from"lucide-react";var zr=(r)=>r.charAt(0).toUpperCase()+r.slice(1);import{jsxDEV as Rr}from"react/jsx-dev-runtime";var fo=({name:r,label:n,fields:a=[],value:p=[],onChange:o,disabled:m,readOnly:c,renderField:v})=>{let g=()=>{let i=Array.isArray(p)?p:[],R={};a.forEach((l)=>{if(l.name)if(l.defaultValue!==void 0)R[l.name]=l.defaultValue;else if(l.type==="boolean")R[l.name]=!1;else if(l.type==="number")R[l.name]=0;else if(l.type==="relationship"&&l.hasMany)R[l.name]=[];else if(l.type==="blocks")R[l.name]=[];else if(l.type==="array")R[l.name]=[];else R[l.name]=""}),o([...i,R])},y=(i)=>{let l=[...Array.isArray(p)?p:[]];l.splice(i,1),o(l)},N=(i,R,l)=>{let h=[...Array.isArray(p)?p:[]];h[i]={...h[i],[R]:l},o(h)},b=(i,R)=>{let u=[...Array.isArray(p)?p:[]];u[i]=R,o(u)};return Rr("div",{className:"opaca-array-field",children:[Rr("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"0.75rem"},children:Rr("label",{htmlFor:r,className:"opaca-label",style:{marginBottom:0},children:n||zr(r)},void 0,!1,void 0,this)},void 0,!1,void 0,this),Rr("div",{style:{display:"flex",flexDirection:"column",gap:"1rem"},children:[(Array.isArray(p)?p:[]).map((i,R)=>Rr("div",{style:{border:"1px solid var(--opaca-border)",borderRadius:"var(--opaca-radius-lg)",backgroundColor:"rgba(255, 255, 255, 0.02)",padding:"1rem",position:"relative"},children:[Rr("div",{style:{display:"flex",justifyContent:"flex-end",marginBottom:"0.5rem"},children:!m&&!c&&Rr(d,{type:"button",variant:"ghost",size:"icon",onClick:()=>y(R),style:{color:"var(--opaca-text-dim)",height:"24px",width:"24px"},children:Rr(Ky,{size:14},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this),Rr("div",{style:{display:"flex",flexDirection:"column",gap:"1rem"},children:a.map((l,u)=>Rr("div",{className:"array-field-item",children:v(l,l.name?i[l.name]:i,(h)=>{if(l.name)N(R,l.name,h);else b(R,h)})},l.name||u,!1,void 0,this))},void 0,!1,void 0,this)]},i||R,!0,void 0,this)),!m&&!c&&Rr(d,{type:"button",variant:"outline",size:"sm",onClick:g,style:{display:"flex",alignItems:"center",gap:"6px",fontSize:"0.75rem",width:"fit-content"},children:[Rr(Gy,{size:12},void 0,!1,void 0,this),"Add Item"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)};import{Plus as Jy,Trash2 as Yy}from"lucide-react";import{jsxDEV as tr}from"react/jsx-dev-runtime";var Lo=({name:r,label:n,blocks:a,value:p=[],onChange:o,disabled:m,readOnly:c,renderField:v})=>{let g=(b)=>{let i=Array.isArray(p)?p:[],R=a.find((u)=>u.slug===b),l={blockType:b};if(R)R.fields.forEach((u)=>{if(u.name)if(u.defaultValue!==void 0)l[u.name]=u.defaultValue;else if(u.type==="boolean")l[u.name]=!1;else if(u.type==="number")l[u.name]=0;else if(u.type==="relationship"&&u.hasMany)l[u.name]=[];else if(u.type==="blocks")l[u.name]=[];else l[u.name]=""});o([...i,l])},y=(b)=>{let R=[...Array.isArray(p)?p:[]];R.splice(b,1),o(R)},N=(b,i,R)=>{let u=[...Array.isArray(p)?p:[]];u[b]={...u[b],[i]:R},o(u)};return tr(Pa,{label:n||r,className:"opaca-blocks-field",children:tr("div",{style:{display:"flex",flexDirection:"column",gap:"24px"},children:[(Array.isArray(p)?p:[]).map((b,i)=>{let R=a.find((l)=>l.slug===b.blockType);if(!R)return null;return tr("div",{style:{border:"1px solid var(--opaca-border)",borderRadius:"var(--opaca-radius-lg)",backgroundColor:"rgba(255, 255, 255, 0.02)",padding:"1.25rem",position:"relative",transition:"border-color var(--opaca-transition)"},className:"opaca-block-item",children:[tr("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"1.25rem",borderBottom:"1px solid var(--opaca-border)",paddingBottom:"0.75rem"},children:[tr("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[tr("div",{style:{width:"8px",height:"8px",borderRadius:"50%",backgroundColor:"var(--opaca-primary)"}},void 0,!1,void 0,this),tr("h4",{style:{margin:0,fontSize:"0.8125rem",fontWeight:600,color:"var(--opaca-text)"},children:R.label||zr(R.slug)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),!m&&!c&&tr(d,{type:"button",variant:"ghost",size:"icon",onClick:()=>y(i),style:{color:"var(--opaca-text-dim)",height:"24px",width:"24px"},children:tr(Yy,{size:14},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),tr("div",{style:{display:"flex",flexDirection:"column",gap:"1.25rem"},children:R.fields.map((l)=>tr("div",{className:"block-field-item",children:v(l,b[l.name],(u)=>N(i,l.name,u))},l.name,!1,void 0,this))},void 0,!1,void 0,this)]},`${b.blockType}-${i}`,!0,void 0,this)}),!m&&!c&&tr("div",{style:{marginTop:"0.5rem",padding:"1.25rem",border:"1px dashed var(--opaca-border)",borderRadius:"var(--opaca-radius-lg)",textAlign:"center"},children:[tr("p",{style:{fontSize:"0.75rem",fontWeight:500,color:"var(--opaca-text-muted)",textTransform:"uppercase",letterSpacing:"0.03em",marginBottom:"1rem"},children:"Add a new block:"},void 0,!1,void 0,this),tr("div",{style:{display:"flex",flexWrap:"wrap",gap:"0.75rem",justifyContent:"center"},children:a.map((b)=>tr(d,{type:"button",variant:"outline",size:"sm",onClick:()=>g(b.slug),style:{display:"flex",alignItems:"center",gap:"6px",fontSize:"0.75rem"},children:[tr(Jy,{size:12},void 0,!1,void 0,this),b.label||zr(b.slug)]},b.slug,!0,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)};import{jsxDEV as Or}from"react/jsx-dev-runtime";var Wo=({name:r,label:n,value:a,onChange:p,disabled:o,readOnly:m,error:c,renderType:v="switch"})=>{let g=o||m;return Or("div",{className:"opaca-form-group",children:[Or("label",{className:"opaca-label",htmlFor:`field-${r}`,children:n||r},void 0,!1,void 0,this),Or("label",{className:"opaca-switch",children:[Or("input",{id:`field-${r}`,type:"checkbox",checked:!!a,disabled:g,onChange:(y)=>p(y.target.checked)},void 0,!1,void 0,this),Or("div",{className:"opaca-switch-track",children:Or("div",{className:"opaca-switch-thumb"},void 0,!1,void 0,this)},void 0,!1,void 0,this),Or("span",{className:"opaca-switch-label",style:{minWidth:"60px"},children:a?"Enabled":"Disabled"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),c&&Or("span",{className:"opaca-field-error",children:c},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import{jsxDEV as In}from"react/jsx-dev-runtime";var Co=({label:r,fields:n,parentData:a,disabled:p,readOnly:o,options:m,onChange:c,renderField:v})=>{let g=(b,i)=>{return i.split(".").reduce((R,l)=>R?.[l],b)},y=(b,i)=>{if(!b.includes("{{"))return g(i,b);return b.replace(/\{\{(.+?)\}\}/g,(R,l)=>{let u=g(i,l.trim());return u!==void 0&&u!==null?String(u):""})},N=m?.useAsTitle?y(m.useAsTitle,a):void 0;return In(qa,{defaultOpen:!m?.initiallyCollapsed,className:"opaca-collapsible-field",disabled:p,children:[In(Za,{className:"opaca-collapsible-field-trigger",children:N||r||"Section"},void 0,!1,void 0,this),In(Xa,{children:In("div",{style:{padding:"0",display:"flex",flexDirection:"column",gap:"1.25rem"},children:(n||[]).map((b,i)=>In("div",{className:"collapsible-field-item",children:v(b,b.name?a?.[b.name]:void 0,(R)=>b.name&&c(b.name,R))},b.name||`collapsible-item-${i}`,!1,void 0,this))},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import{jsxDEV as On}from"react/jsx-dev-runtime";var Go=({name:r,label:n,value:a,onChange:p,required:o,disabled:m,readOnly:c,error:v})=>{let g=a?new Date(a).toISOString().split("T")[0]:"";return On("div",{className:"opaca-form-group",children:[On("label",{className:"opaca-label",htmlFor:`field-${r}`,children:[n||r,o&&On("span",{style:{color:"var(--opaca-error)",marginLeft:"4px"},children:"*"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),On("input",{id:`field-${r}`,type:"date",className:`opaca-input ${v?"error":""}`,value:g,readOnly:c,disabled:m,onChange:(y)=>p(y.target.value),required:o},void 0,!1,void 0,this),v&&On("span",{className:"opaca-field-error",children:v},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import{useEffect as Ko,useState as Sn}from"react";import{jsxDEV as Z,Fragment as Py}from"react/jsx-dev-runtime";var Jo=({name:r,label:n,value:a,onChange:p,options:o,disabled:m,readOnly:c,bucket:v="default"})=>{let[g,y]=Sn(!1),[N,b]=Sn(null),[i,R]=Sn(!1),[l,u]=Sn(null),[h,G]=Sn(null),W=m||c,C=typeof a==="string"?a:a?.assetId;Ko(()=>{if(C&&(!a||typeof a==="string"||!a.filename))R(!0),M.get(`api/assets/${C}`).json().then((T)=>{b(T)}).catch((T)=>{console.error("Failed to fetch asset metadata",T)}).finally(()=>{R(!1)});else if(a&&typeof a==="object"&&a.filename)b(a);else b(null)},[C,a]),Ko(()=>{return()=>{if(l?.url)URL.revokeObjectURL(l.url)}},[l]);let Q=async(T)=>{if(T.preventDefault(),W)return;let _=T.dataTransfer.files[0];if(!_)return;if(o?.allowedmime_types&&!o.allowedmime_types.includes(_.type)){G(`Invalid file type. Allowed: ${o.allowedmime_types.join(", ")}`);return}if(o?.maxFileSize&&_.size>o.maxFileSize){G(`File too large. Max size: ${o.maxFileSize/1024/1024}MB`);return}let w=URL.createObjectURL(_);u({url:w,file:_,progress:0}),G(null);let K=new FormData;K.append("file",_);try{let J=await M.post(`api/__system/assets/upload?bucket=${v}`,{body:K}).json(),q=J.id||J.assetId;u(null),p(q)}catch(J){u(null),G(J.message)}},s=()=>{if(W)return;p(null)},f=(T,_)=>{if(W)return;let w=typeof a==="object"?a.meta||{}:{};p({assetId:C,meta:{...w,[T]:_}})},U=(T)=>{if(!T)return"";if(T.url)return T.url;return`${cr()}/api/assets/${T.id||T.assetId}/view`};return Z("div",{className:`file-field-container ${W?"is-restricted":""}`,onDragOver:(T)=>!W&&T.preventDefault(),onDrop:Q,children:[Z("div",{className:"file-field-label-row",children:[Z("label",{children:n||r},void 0,!1,void 0,this),h&&Z("span",{className:"upload-error",children:h},void 0,!1,void 0,this)]},void 0,!0,void 0,this),l?Z("div",{className:"file-field-optimistic-card",children:Z("div",{className:"optimistic-info",children:[l.file.type.startsWith("image/")?Z("img",{src:l.url,alt:"Uploading..."},void 0,!1,void 0,this):Z("div",{className:"file-icon-placeholder",children:Z("span",{children:"FILE"},void 0,!1,void 0,this)},void 0,!1,void 0,this),Z("div",{className:"optimistic-details",children:[Z("span",{className:"filename",children:l.file.name},void 0,!1,void 0,this),Z("span",{className:"progress-text",children:"Uploading..."},void 0,!1,void 0,this),Z("div",{className:"progress-bar-bg",children:Z("div",{className:"progress-bar-fill",style:{width:"50%"}},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this):N?Z(Py,{children:[Z("div",{className:"file-field-asset-card",children:[Z("div",{className:"file-field-asset-info",children:[Z("div",{className:"asset-preview",children:(()=>{let T=N.mimeType||N.mime_type;if(T?.startsWith("image/"))return Z("img",{src:U(N),alt:N.filename},void 0,!1,void 0,this);return Z("div",{className:"file-icon-placeholder",children:Z("span",{children:T?.split("/")[1]?.toUpperCase()||"FILE"},void 0,!1,void 0,this)},void 0,!1,void 0,this)})()},void 0,!1,void 0,this),Z("div",{className:"asset-details",children:[Z("span",{className:"filename",title:N.filename,children:N.filename},void 0,!1,void 0,this),Z("span",{className:"filesize",children:N.filesize?`${(N.filesize/1024).toFixed(1)} KB`:"..."},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),!W&&Z("div",{className:"asset-actions",children:[Z("button",{type:"button",onClick:()=>y(!0),className:"replace-button",children:"Replace"},void 0,!1,void 0,this),Z("button",{type:"button",onClick:s,className:"remove-button",children:"Remove"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),o?.metaFields&&o.metaFields.length>0&&Z("div",{className:"file-field-metadata",children:[Z("h4",{children:"Contextual Metadata"},void 0,!1,void 0,this),o.metaFields.map((T)=>Z("div",{className:"metadata-field",children:[Z("label",{htmlFor:T.name,children:[T.label||T.name," ",T.required&&Z("span",{className:"required",children:"*"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),T.type==="textarea"?Z("textarea",{id:T.name,rows:3,value:(a?.meta||{})[T.name]||"",onChange:(_)=>f(T.name,_.target.value),readOnly:c,disabled:m,placeholder:W?"":`Enter ${T.label?.toLowerCase()||T.name}...`},void 0,!1,void 0,this):Z("input",{type:T.type==="number"?"number":"text",value:(a?.meta||{})[T.name]||"",onChange:(_)=>f(T.name,T.type==="number"?Number(_.target.value):_.target.value),readOnly:c,disabled:m,placeholder:W?"":`Enter ${T.label?.toLowerCase()||T.name}...`},void 0,!1,void 0,this)]},T.name,!0,void 0,this))]},void 0,!0,void 0,this)]},void 0,!0,void 0,this):i?Z("div",{className:"file-field-optimistic-card",children:Z("div",{className:"status-text",children:"Loading asset details..."},void 0,!1,void 0,this)},void 0,!1,void 0,this):Z("button",{type:"button",onClick:()=>!W&&y(!0),disabled:W,className:`file-field-empty-button ${W?"disabled":""}`,children:[Z("svg",{fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:Z("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"2",d:"M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-8l-4-4m0 0L8 8m4-4v12"},void 0,!1,void 0,this)},void 0,!1,void 0,this),Z("span",{children:W?"No file selected":"Drag a file here or click to select"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),g&&!W&&Z(Ur,{bucket:v,onClose:()=>y(!1),onSelect:(T)=>{if(!W)p(T.assetId),y(!1)},allowedmime_types:o?.allowedmime_types,maxFileSize:o?.maxFileSize},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import{jsxDEV as yp}from"react/jsx-dev-runtime";var Yo=({name:r,label:n,fields:a,value:p,onChange:o,disabled:m,readOnly:c,renderField:v})=>{let g=(y,N)=>{o({...p||{},[y]:N})};return yp(Qa,{label:n||r,className:"opaca-group-field",children:yp("div",{className:"opaca-group-fields-container",style:{display:"flex",flexDirection:"column",gap:"16px"},children:(a||[]).map((y,N)=>yp("div",{className:"group-field-item",children:v(y,y.name?p?.[y.name]:void 0,(b)=>y.name&&g(y.name,b))},y.name||`group-item-${N}`,!1,void 0,this))},void 0,!1,void 0,this)},void 0,!1,void 0,this)};import{jsxDEV as Po}from"react/jsx-dev-runtime";var _o=({name:r,label:n,collection:a,value:p,on:o})=>{return Po("div",{className:"opaca-form-group",children:Po(Aa,{label:n||r,collection:a,on:o},void 0,!1,void 0,this)},void 0,!1,void 0,this)};import{jsxDEV as Fn}from"react/jsx-dev-runtime";var qo=({name:r,label:n,value:a,onChange:p,required:o,disabled:m,readOnly:c,placeholder:v,error:g})=>{return Fn("div",{className:"opaca-form-group",children:[Fn("label",{className:"opaca-label",htmlFor:`field-${r}`,children:[n||r,o&&Fn("span",{style:{color:"var(--opaca-error)",marginLeft:"4px"},children:"*"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),Fn("input",{id:`field-${r}`,type:"number",className:`opaca-input ${g?"error":""}`,value:a??"",readOnly:c,disabled:m,onChange:(y)=>p(y.target.valueAsNumber||0),placeholder:v||`Enter ${n||r}...`,required:o},void 0,!1,void 0,this),g&&Fn("span",{className:"opaca-field-error",children:g},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import{jsxDEV as Kr}from"react/jsx-dev-runtime";var Zo=({name:r,label:n,value:a,onChange:p,choices:o,required:m,disabled:c,readOnly:v,error:g})=>{let y=(o||[]).map((N)=>typeof N==="string"?{label:N,value:N}:N);return Kr("div",{className:"opaca-form-group",children:[Kr("label",{className:"opaca-label",children:[n||r,m&&Kr("span",{style:{color:"var(--opaca-error)",marginLeft:"4px"},children:"*"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),Kr(Ba,{value:a,onValueChange:p,disabled:c||v,name:r,className:"opaca-radio-field-group",children:Kr("div",{style:{display:"flex",flexDirection:"column",gap:"8px",padding:"8px 0"},children:y.map((N)=>Kr("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[Kr($a,{value:N.value,id:`radio-${r}-${N.value}`},void 0,!1,void 0,this),Kr(Zr,{htmlFor:`radio-${r}-${N.value}`,style:{cursor:c||v?"not-allowed":"pointer"},children:N.label},void 0,!1,void 0,this)]},N.value,!0,void 0,this))},void 0,!1,void 0,this)},void 0,!1,void 0,this),g&&Kr("span",{className:"opaca-field-error",children:g},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import{Check as Ay,Info as Qo,Loader2 as By,Search as $y}from"lucide-react";import{useCallback as ky,useEffect as My,useState as dn}from"react";import{useStore as _y}from"@nanostores/react";import{AlertCircle as qy,Loader2 as Zy}from"lucide-react";import{useEffect as Xy,useMemo as Qy,useState as ip}from"react";import{jsxDEV as mr}from"react/jsx-dev-runtime";var Xo=({isOpen:r,onOpenChange:n,relationTo:a,id:p})=>{let[o,m]=ip(null),[c,v]=ip(!1),[g,y]=ip(null),N=_y(lr),b=Qy(()=>{return N?.collections.find((i)=>i.slug===a||i.apiPath===a)},[N,a]);return Xy(()=>{if(r&&p&&a)v(!0),y(null),M.get(`api/${a}/${p}`).json().then((i)=>{m(i),v(!1)}).catch((i)=>{console.error("Failed to fetch relation details:",i),y("Failed to load document details."),v(!1)});else m(null)},[r,p,a]),mr(Qr,{open:r,onOpenChange:n,children:mr(Ar,{className:"p-0 sm:max-w-[500px]",onClose:()=>n(!1),children:mr("div",{style:{display:"flex",flexDirection:"column",height:"100%"},children:[mr("div",{style:{padding:"1.5rem 1.5rem 1rem"},children:[mr(Br,{children:mr($r,{children:[b?.label||a," Details"]},void 0,!0,void 0,this)},void 0,!1,void 0,this),mr("div",{style:{fontSize:"0.875rem",color:"var(--opaca-text-dim)",marginTop:"0.25rem"},children:["ID: ",p]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),mr("div",{style:{flex:1,overflowY:"auto",padding:"1.5rem"},children:c?mr("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",padding:"3rem",gap:"0.75rem"},children:[mr(Zy,{size:20,className:"opaca-spin"},void 0,!1,void 0,this),mr("span",{style:{color:"var(--opaca-text-dim)"},children:"Loading details..."},void 0,!1,void 0,this)]},void 0,!0,void 0,this):g?mr("div",{style:{padding:"1rem",backgroundColor:"rgba(239, 68, 68, 0.1)",border:"1px solid var(--opaca-error)",color:"var(--opaca-error)",borderRadius:"var(--opaca-radius)",display:"flex",alignItems:"center",gap:"0.75rem"},children:[mr(qy,{size:18},void 0,!1,void 0,this),g]},void 0,!0,void 0,this):o&&b?mr("div",{style:{display:"grid",gap:"1.5rem"},children:b.fields.map((i,R)=>mr(ir,{field:i,value:i.name?o[i.name]:void 0,onChange:()=>{},readOnly:!0,disabled:!0,parentData:o},i.name||R,!1,void 0,this))},void 0,!1,void 0,this):mr("div",{style:{textAlign:"center",padding:"2rem",opacity:0.5},children:"No details found for this document."},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)};import{jsxDEV as I}from"react/jsx-dev-runtime";var Ao=({name:r,label:n,relationTo:a,value:p,onChange:o,disabled:m,readOnly:c,error:v,displayField:g,hasMany:y})=>{let[N,b]=dn(!1),[i,R]=dn([]),[l,u]=dn(!1),[h,G]=dn(""),[W,C]=dn({open:!1,id:""}),Q=ky(async()=>{u(!0);try{let T=await M.get(`api/${a}`).json(),_=T.docs||T;R(Array.isArray(_)?_:[])}catch(T){console.error("Failed to fetch relation items:",T)}finally{u(!1)}},[a]);My(()=>{if(N&&i.length===0)Q()},[N,i.length,Q]);let s=(T)=>{if(y||Array.isArray(p)){let _=Array.isArray(p)?p:[],w=String(T),K=_.map(String),J=K.includes(w)?K.filter((q)=>q!==w):[...K,w];o(J)}else o(String(T)===String(p)?null:String(T)),b(!1)},f=(T)=>{if(y||Array.isArray(p))return(Array.isArray(p)?p:[]).map(String).includes(String(T));return String(p)===String(T)},U=i.filter((T)=>{return(T[g||""]||T.name||T.title||T.id||"").toLowerCase().includes(h.toLowerCase())});return I("div",{className:"opaca-form-group",children:[I(ka,{label:n||r,relationTo:a,className:v?"error":"",onClick:()=>!m&&!c&&b(!0),children:I("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",width:"100%"},children:[p?I("div",{style:{display:"flex",gap:"4px",flexWrap:"wrap",alignItems:"center"},children:Array.isArray(p)||y?I("span",{className:"opaca-badge",children:[(Array.isArray(p)?p:[]).length," items linked"]},void 0,!0,void 0,this):I("span",{className:"opaca-text-primary",children:i.find((T)=>String(T.id)===String(p))?.[g||""]||p},void 0,!1,void 0,this)},void 0,!1,void 0,this):I("span",{style:{opacity:0.5},children:["Select ",a,"..."]},void 0,!0,void 0,this),p&&!Array.isArray(p)&&!y&&I("button",{type:"button",className:"opaca-btn-ghost opaca-btn-sm",style:{padding:"2px",marginLeft:"auto",borderRadius:"50%",minWidth:"24px",height:"24px"},onClick:(T)=>{T.stopPropagation(),C({open:!0,id:p})},title:"View Details",children:I(Qo,{size:14},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),v&&I("span",{className:"opaca-field-error",children:v},void 0,!1,void 0,this),I(Qr,{open:N,onOpenChange:b,children:I(Ar,{onClose:()=>b(!1),children:I("div",{style:{width:"100%",display:"flex",flexDirection:"column",height:"100%"},children:[I(Br,{children:I($r,{children:["Select ",a]},void 0,!0,void 0,this)},void 0,!1,void 0,this),I("div",{style:{marginTop:"1.5rem",marginBottom:"1rem"},children:I("div",{className:"opaca-input-wrapper",style:{position:"relative"},children:[I($y,{size:16,style:{position:"absolute",left:"12px",top:"50%",transform:"translateY(-50%)",opacity:0.5}},void 0,!1,void 0,this),I("input",{type:"text",placeholder:"Search...",className:"opaca-input",style:{paddingLeft:"36px"},value:h,onChange:(T)=>G(T.target.value)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),I("div",{style:{overflowY:"auto",flex:1,minHeight:0},children:l?I("div",{style:{display:"flex",justifyContent:"center",padding:"2rem"},children:I(By,{className:"opaca-spin",size:24},void 0,!1,void 0,this)},void 0,!1,void 0,this):U.length===0?I("div",{style:{textAlign:"center",padding:"2rem",opacity:0.5},children:"No items found."},void 0,!1,void 0,this):I("div",{style:{display:"flex",flexDirection:"column",gap:"4px"},children:U.map((T)=>I("div",{style:{position:"relative"},children:[I("button",{type:"button",onClick:()=>s(T.id),className:P("opaca-item-button",f(T.id)&&"active"),style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"0.75rem 2.5rem 0.75rem 1rem",borderRadius:"var(--opaca-radius)",border:"1px solid var(--opaca-border)",background:f(T.id)?"var(--opaca-primary-glow)":"var(--opaca-surface)",color:"var(--opaca-text)",textAlign:"left",cursor:"pointer",transition:"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)",width:"100%",marginBottom:"0.5rem",boxShadow:"0 1px 2px rgba(0,0,0,0.05)"},children:[I("div",{children:[I("div",{style:{fontWeight:500,color:f(T.id)?"var(--opaca-accent)":"var(--opaca-text)"},children:T[g||""]||T.name||T.title||T.id},void 0,!1,void 0,this),(T.name||T.title||g)&&T.id&&I("div",{style:{fontSize:"0.75rem",color:"var(--opaca-text-dim)"},children:["ID: ",T.id]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),f(T.id)&&I(Ay,{size:16,style:{color:"var(--opaca-accent)"}},void 0,!1,void 0,this)]},void 0,!0,void 0,this),I("button",{type:"button",className:"opaca-btn-ghost opaca-btn-sm",style:{position:"absolute",right:"10px",top:"50%",transform:"translateY(-50%)",padding:"4px",borderRadius:"50%",zIndex:2},onClick:(_)=>{_.stopPropagation(),C({open:!0,id:T.id})},children:I(Qo,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},T.id,!0,void 0,this))},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this),I(Xo,{isOpen:W.open,onOpenChange:(T)=>C((_)=>({..._,open:T})),relationTo:a,id:W.id},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import{jsxDEV as Bo}from"react/jsx-dev-runtime";var $o=({fields:r,parentData:n,onChange:a,renderField:p})=>{return Bo("div",{className:"opaca-row-field",children:r.map((o,m)=>Bo("div",{className:"row-item",style:o.admin?.width?{flex:`0 0 ${o.admin.width}`,width:o.admin.width}:void 0,children:p(o,o.name?n?.[o.name]:void 0,(c)=>o.name&&a(o.name,c))},o.name||`row-item-${m}`,!1,void 0,this))},void 0,!1,void 0,this)};import{jsxDEV as Jr}from"react/jsx-dev-runtime";var ko=({name:r,label:n,value:a,onChange:p,choices:o,required:m,disabled:c,readOnly:v,placeholder:g,error:y})=>{return Jr("div",{className:"opaca-form-group",children:[Jr("label",{className:"opaca-label",htmlFor:`field-${r}`,children:[n||r,m&&Jr("span",{style:{color:"var(--opaca-error)",marginLeft:"4px"},children:"*"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),Jr(cn,{value:a,onValueChange:p,disabled:c||v,placeholder:g||`Select ${n||r}...`,children:[Jr(yn,{className:y?"error":"",children:Jr(bn,{},void 0,!1,void 0,this)},void 0,!1,void 0,this),Jr(gn,{children:(o||[]).map((N)=>{let b=typeof N==="string"?{label:N,value:N}:N;return Jr(Xr,{value:b.value,children:b.label},b.value,!1,void 0,this)})},void 0,!1,void 0,this)]},void 0,!0,void 0,this),y&&Jr("span",{className:"opaca-field-error",children:y},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import Uy from"react";import{jsxDEV as Sr}from"react/jsx-dev-runtime";var Mo=({tabs:r,value:n,onChange:a,disabled:p,readOnly:o,renderField:m})=>{let[c,v]=Uy.useState(r?.[0]?.label||""),g=(y,N)=>{if(n!==void 0)a({...n||{},[y]:N});else a(y,N)};if(!r||r.length===0)return null;return Sr("div",{className:"opaca-tabs-field",children:Sr(Ua,{value:c,onValueChange:v,children:[Sr(Ia,{children:r.map((y)=>Sr(Oa,{value:y.label,children:y.label},y.label,!1,void 0,this))},void 0,!1,void 0,this),Sr("div",{children:r.map((y)=>Sr(Sa,{value:y.label,children:Sr("div",{style:{display:"flex",flexDirection:"column",gap:"1.25rem"},children:y.fields.map((N,b)=>{let i=n!==void 0&&N.name?n[N.name]:void 0;return Sr("div",{className:"tab-field-item",children:m(N,i,(R)=>{if(n!==void 0&&N.name)g(N.name,R);else if(N.name)a(N.name,R);else a(R)})},N.name||`tab-item-${y.label}-${b}`,!1,void 0,this)})},void 0,!1,void 0,this)},y.label,!1,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)};import{jsxDEV as en}from"react/jsx-dev-runtime";var Uo=({name:r,label:n,value:a,onChange:p,required:o,disabled:m,readOnly:c,placeholder:v,error:g})=>{return en("div",{className:"opaca-form-group",children:[en("label",{className:"opaca-label",htmlFor:`field-${r}`,children:[n||r,o&&en("span",{style:{color:"var(--opaca-error)",marginLeft:"4px"},children:"*"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),en("textarea",{id:`field-${r}`,className:`opaca-input ${g?"error":""}`,style:{minHeight:"160px",resize:"vertical",padding:"1rem",lineHeight:"1.5"},value:a||"",readOnly:c,disabled:m,onChange:(y)=>{let N=y.target.value;p(N===""&&!o?null:N)},placeholder:v||`Enter ${n||r}...`,required:o},void 0,!1,void 0,this),g&&en("span",{className:"opaca-field-error",children:g},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import{jsxDEV as sn}from"react/jsx-dev-runtime";var Io=({name:r,label:n,value:a,onChange:p,required:o,disabled:m,readOnly:c,placeholder:v,error:g})=>{return sn("div",{className:"opaca-form-group",children:[sn("label",{className:"opaca-label",htmlFor:`field-${r}`,children:[n||r,o&&sn("span",{style:{color:"var(--opaca-error)",marginLeft:"4px"},children:"*"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),sn("input",{id:`field-${r}`,type:"text",className:`opaca-input ${g?"error":""}`,value:a||"",readOnly:c,disabled:m,onChange:(y)=>{let N=y.target.value;p(N===""&&!o?null:N)},placeholder:v||`Enter ${n||r}...`,required:o},void 0,!1,void 0,this),g&&sn("span",{className:"opaca-field-error",children:g},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import{jsxDEV as wa}from"react/jsx-dev-runtime";var Oo=({name:r,label:n,value:a})=>{let p=a===null||a===void 0?"":typeof a==="object"?JSON.stringify(a):String(a);return wa("div",{className:"opaca-form-group",children:[wa("label",{className:"opaca-label",htmlFor:`field-${r}`,children:[n||r,wa("span",{style:{color:"rgba(255, 255, 255, 0.4)",marginLeft:"8px",fontSize:"11px",fontWeight:"normal",textTransform:"uppercase",letterSpacing:"0.5px"},children:"(Computed)"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),wa("div",{className:"opaca-input read-only virtual",style:{backgroundColor:"rgba(255, 255, 255, 0.03)",minHeight:"42px",display:"flex",alignItems:"center",padding:"0 12px",borderRadius:"8px",border:"1px solid rgba(255, 255, 255, 0.05)",color:"rgba(255, 255, 255, 0.7)",fontSize:"14px",fontFamily:"monospace"},children:p},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import{jsxDEV as k}from"react/jsx-dev-runtime";var Fy=({tagName:r,field:n,value:a,onChange:p,isDisabled:o,isReadOnly:m,error:c,parentData:v})=>{let g=Sy(null);return Oy(()=>{let y=g.current;if(y){y.value=a,y.fieldConfig=n,y.error=c,y.parentData=v;let N=(b)=>{let i=b.detail;if(i&&"value"in i)p(i.value)};return y.addEventListener("opacachange",N),()=>{y.removeEventListener("opacachange",N)}}},[a,n,p,c,v]),k("div",{className:"opaca-form-group",children:[k("label",{htmlFor:n.name,className:"opaca-label",children:[n.label||(n.name?zr(n.name):void 0),n.required&&k("span",{style:{color:"var(--opaca-error)",marginLeft:"4px"},children:"*"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),Iy.createElement(r,{ref:g,id:n.name,"data-name":n.name,"data-disabled":o?"true":void 0,"data-readonly":m?"true":void 0,className:"opaca-custom-field"}),c&&k("span",{className:"opaca-field-error",children:c},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},ir=({field:r,value:n,onChange:a,disabled:p,readOnly:o,error:m,parentData:c})=>{let v=r.name?c?._access?.[r.name]||{}:{},g=o||v.readOnly||(typeof r.access?.readOnly==="boolean"?r.access.readOnly:!1),y=p||v.disabled||(typeof r.access?.disabled==="boolean"?r.access.disabled:!1)||g;if(r.type==="slug"||v.hidden||(typeof r.access?.hidden==="boolean"?r.access.hidden:!1))return null;let b={name:r.name,label:r.label||(r.name?zr(r.name):void 0),value:n,onChange:a,required:r.required,disabled:y,readOnly:g,error:m,placeholder:r.placeholder};if(r.admin?.components?.Field&&typeof r.admin.components.Field==="string")return k(Fy,{tagName:r.admin.components.Field,field:r,value:n,onChange:a,isDisabled:y,isReadOnly:g,error:m,parentData:c},void 0,!1,void 0,this);switch(r.type){case"text":return k(Io,{...b},void 0,!1,void 0,this);case"virtual":return k(Oo,{name:b.name,label:b.label,value:n},void 0,!1,void 0,this);case"textarea":return k(Uo,{...b},void 0,!1,void 0,this);case"number":return k(qo,{...b},void 0,!1,void 0,this);case"date":return k(Go,{...b},void 0,!1,void 0,this);case"boolean":return k(Wo,{...b},void 0,!1,void 0,this);case"select":return k(ko,{...b,choices:r.choices||r.options?.choices||[]},void 0,!1,void 0,this);case"file":return k(Jo,{...b,options:r.options,bucket:r.bucket},void 0,!1,void 0,this);case"radio":return k(Zo,{...b,choices:r.choices||r.options?.choices||[]},void 0,!1,void 0,this);case"row":return k($o,{fields:r.fields||[],parentData:c,disabled:y,readOnly:g,onChange:(i,R)=>{if(c&&typeof c==="object"&&!Array.isArray(c))a({...c,[i]:R});else a(R)},renderField:(i,R,l)=>k(ir,{field:i,value:i.name&&R===void 0?c?.[i.name]:R,onChange:l,disabled:y,readOnly:g,parentData:c},void 0,!1,void 0,this)},void 0,!1,void 0,this);case"group":return k(Yo,{...b,fields:r.fields||[],renderField:(i,R,l)=>k(ir,{field:i,value:i.name&&R===void 0?c?.[i.name]:R,onChange:l,disabled:y,readOnly:g,parentData:n},void 0,!1,void 0,this)},void 0,!1,void 0,this);case"tabs":return k(Mo,{...b,tabs:r.tabs||[],parentData:c,onChange:(i,R)=>{if(c&&typeof c==="object"&&!Array.isArray(c))a({...c,[i]:R});else a(R)},renderField:(i,R,l)=>k(ir,{field:i,value:i.name&&n===void 0?c?.[i.name]:R,onChange:l,disabled:y,readOnly:g,parentData:c},void 0,!1,void 0,this)},void 0,!1,void 0,this);case"collapsible":return k(Co,{...b,fields:r.fields||[],parentData:c,options:r.options,onChange:(i,R)=>{if(c&&typeof c==="object"&&!Array.isArray(c))a({...c,[i]:R});else a(R)},renderField:(i,R,l)=>k(ir,{field:i,value:R,onChange:l,disabled:y,readOnly:g,parentData:c},void 0,!1,void 0,this)},void 0,!1,void 0,this);case"blocks":return k(Lo,{...b,blocks:r.blocks||r.options?.blocks||[],renderField:(i,R,l)=>k(ir,{field:i,value:R,onChange:l,disabled:y,readOnly:g,parentData:R},void 0,!1,void 0,this)},void 0,!1,void 0,this);case"relationship":return k(Ao,{...b,relationTo:r.relationTo||r.options?.relationTo,displayField:r.displayField||r.options?.displayField,hasMany:r.hasMany},void 0,!1,void 0,this);case"join":return k(_o,{...b,collection:r.collection||r.options?.collection},void 0,!1,void 0,this);case"array":return k(fo,{...b,fields:r.fields||[],renderField:(i,R,l)=>k(ir,{field:i,value:R,onChange:l,disabled:y,readOnly:g,parentData:R},void 0,!1,void 0,this)},void 0,!1,void 0,this);case"richtext":return k("div",{className:"opaca-form-group",children:[k("label",{htmlFor:r.name,className:"opaca-label",children:[r.label||(r.name?zr(r.name):void 0),r.required&&k("span",{style:{color:"var(--opaca-error)",marginLeft:"4px"},children:"*"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),k(ha,{value:n||"",onChange:a,disabled:y,readOnly:g,defaultMode:r.options?.defaultMode},void 0,!1,void 0,this),m&&k("span",{className:"opaca-field-error",children:m},void 0,!1,void 0,this)]},void 0,!0,void 0,this);default:return console.warn("FieldRenderer: fallback to default for type:",r.type,r),k("div",{className:"opaca-form-group",children:[k("label",{htmlFor:r.name,className:"opaca-label",children:[r.label||(r.name?zr(r.name):void 0)," (Unknown Type:"," ",r.type,") "]},void 0,!0,void 0,this),k("input",{type:"text",className:"opaca-input",value:n||"",readOnly:!0,disabled:!0},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}};import{Children as dy,cloneElement as ey,isValidElement as sy,useState as xy}from"react";import{jsxDEV as wr,Fragment as Ey}from"react/jsx-dev-runtime";function xn({children:r,trigger:n,title:a,description:p,onConfirm:o,confirmText:m="Continue",cancelText:c="Cancel",variant:v="default"}){let[g,y]=xy(!1),N=()=>{o(),y(!1)},b=n||r;return wr(Ey,{children:[(()=>{if(dy.count(b)===1&&sy(b)){let R=b;return ey(R,{onClick:(l)=>{let u=R.props.onClick;if(u)u(l);y(!0)}})}return wr("span",{role:"button",tabIndex:0,onClick:()=>y(!0),onKeyDown:(R)=>{if(R.key==="Enter"||R.key===" ")R.preventDefault(),y(!0)},style:{display:"inline-block",cursor:"pointer"},children:b},void 0,!1,void 0,this)})(),wr(Ln,{open:g,onOpenChange:y,children:wr(Wn,{className:"opaca-dialog-max-w",children:[wr(Cn,{children:[wr(Gn,{children:a},void 0,!1,void 0,this),wr(ta,{children:p},void 0,!1,void 0,this)]},void 0,!0,void 0,this),wr(Kn,{children:[wr(d,{variant:"outline",onClick:()=>y(!1),children:c},void 0,!1,void 0,this),wr(d,{variant:v,onClick:N,children:m},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}import{jsxDEV as A}from"react/jsx-dev-runtime";var ai=async(r,n,a)=>{if(n==="create")return{};let p={};if(a)p["x-opaca-locale"]=a;return await M.get(`api/${r}/${n}`,{headers:p}).json()},pi=async(r,n,a,p)=>{let o={...a};for(let c in o)if(o[c]==="")o[c]=null;let m={};if(p)m["x-opaca-locale"]=p;if(n&&n!=="create")return M.patch(`api/${r}/${n}`,{json:o,headers:m}).json();return M.post(`api/${r}`,{json:o,headers:m}).json()};function so({collection:r,id:n,onBack:a}){let p=r.apiPath||r.slug,o=p,m=bp(lr),[c,v]=ni(m?.i18n?.defaultLocale||"en"),g=eo(()=>kr([p,n,c],{fetcher:()=>ai(p,n,c)}),[p,n,c]),y=eo(()=>_n(async({data:C})=>{return pi(p,n,C,c)}),[p,n,c]),N=bp(g),b=bp(y),i=N.loading,R=b.loading,l=N.error||b.error,u=!!r.versions?.drafts,h=Vy({defaultValues:N.data||{},onSubmit:async({value:C})=>{try{await y.mutate(C),S(`Document ${n==="create"?"created":"updated"} successfully`,"success"),a()}catch(Q){let s="Failed to save document";if(Q.response)try{let f=await Q.response.json();if(s=f.message||s,f.errors)Object.keys(f.errors).forEach((U)=>{if(U==="_errors")return;h.setErrorMap({onChange:f.errors[U]._errors.join(", ")})})}catch(f){}S(s,"error")}}});ri(()=>{if(N.data&&!N.loading)h.reset(N.data)},[N.data,N.loading,h,c]);let G=async(C,Q="published")=>{if(C)C.preventDefault();if(C?.stopPropagation(),u)h.setFieldValue("_status",Q);await h.handleSubmit()},W=()=>{if(!h.state.isDirty)a()};if(i)return A("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem",marginTop:"2rem",padding:"0 2.5rem"},children:[A(gp,{size:18,className:"opaca-spin"},void 0,!1,void 0,this),A("span",{className:"opaca-subtitle",children:"Loading document..."},void 0,!1,void 0,this)]},void 0,!0,void 0,this);return A("div",{className:"opaca-admin-form",children:[A("div",{className:"opaca-header",children:[A("div",{style:{display:"flex",alignItems:"center",gap:"1rem"},children:[h.state.isDirty?A(xn,{title:"Unsaved Changes",description:"You have unsaved changes. Are you sure you want to discard them and leave?",onConfirm:a,variant:"destructive",children:A("button",{type:"button",className:"opaca-btn opaca-btn-outline",style:{padding:"0.5rem"},title:"Go Back",children:A(So,{size:18},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this):A("button",{type:"button",onClick:W,className:"opaca-btn opaca-btn-outline",style:{padding:"0.5rem"},title:"Go Back",children:A(So,{size:18},void 0,!1,void 0,this)},void 0,!1,void 0,this),A("div",{children:[A("h1",{className:"opaca-title",children:n==="create"?`Create ${r.label||r.slug}`:`Edit ${r.label||r.slug}`},void 0,!1,void 0,this),A("p",{className:"opaca-subtitle",children:n==="create"?"Add a new entry to the collection.":`ID: ${n}`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),A("div",{style:{display:"flex",gap:"0.75rem"},children:[m?.i18n&&m.i18n.locales.length>1&&A("div",{className:"opaca-locale-switcher",children:m.i18n.locales.map((C)=>A("button",{type:"button",className:`opaca-locale-btn ${c===C?"active":""}`,onClick:()=>{if(h.state.isDirty){if(confirm("Unsaved changes will be lost. Continue?"))v(C)}else v(C)},children:C.toUpperCase()},C,!1,void 0,this))},void 0,!1,void 0,this),n!=="create"&&A(xn,{title:"Delete Document",description:"Are you sure you want to delete this document? This action cannot be undone.",onConfirm:async()=>{try{await M.delete(`api/${o}/${n}`),S("Document deleted successfully","success"),a()}catch(C){console.error(C),S("Failed to delete document","error")}},variant:"destructive",confirmText:"Delete",children:A("button",{type:"button",className:"opaca-btn opaca-btn-outline",style:{color:"var(--opaca-error)",borderColor:"var(--opaca-error)"},title:"Delete Document",children:[A(Dy,{size:18},void 0,!1,void 0,this),"Delete"]},void 0,!0,void 0,this)},void 0,!1,void 0,this),A(h.Subscribe,{selector:(C)=>[C.isDirty],children:([C])=>A("div",{style:{display:"flex",gap:"0.75rem"},children:[u&&A("button",{type:"button",onClick:(Q)=>G(Q,"draft"),disabled:R,className:"opaca-btn opaca-btn-outline",title:"Save as Draft",children:[R?A(gp,{size:18,className:"opaca-spin"},void 0,!1,void 0,this):A(Fo,{size:18},void 0,!1,void 0,this),"Save Draft"]},void 0,!0,void 0,this),A("button",{type:"button",onClick:(Q)=>G(Q,"published"),disabled:R,className:"opaca-btn opaca-btn-primary",style:{position:"relative"},title:u?"Publish":"Save Changes",children:[R?A(gp,{size:18,className:"opaca-spin"},void 0,!1,void 0,this):A(Fo,{size:18},void 0,!1,void 0,this),n==="create"?u?"Publish":"Create":u?"Publish":"Save",C&&!R&&A("span",{style:{position:"absolute",top:"-4px",right:"-4px",width:"10px",height:"10px",borderRadius:"50%",background:"var(--opaca-warning)",border:"2px solid var(--opaca-card-bg)",boxShadow:"0 1px 2px rgba(0,0,0,0.2)"},title:"Unsaved changes"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),l&&A("div",{style:{padding:"1rem",backgroundColor:"rgba(239, 68, 68, 0.1)",border:"1px solid var(--opaca-error)",color:"var(--opaca-error)",borderRadius:"var(--opaca-radius)",marginBottom:"2rem",display:"flex",alignItems:"center",gap:"0.75rem",fontSize:"0.875rem"},children:[A(jy,{size:18},void 0,!1,void 0,this),l]},void 0,!0,void 0,this),A("div",{className:"opaca-card",style:{padding:"2.5rem"},children:A("form",{id:"opaca-doc-form",onSubmit:(C)=>G(C),children:A("div",{style:{display:"grid",gap:"2rem"},children:r.fields.map((C,Q)=>{let s=C.name,f=s?N.data?._access?.[s]:{hidden:!1,readOnly:!1,disabled:!1};if(f?.hidden)return null;let U=f?.readOnly,T=f?.disabled||U;if(!s)return A(h.Subscribe,{selector:(_)=>_.values,children:(_)=>A(ir,{field:C,value:void 0,disabled:T,readOnly:U,onChange:(w,K)=>{if(typeof w==="string")h.setFieldValue(w,K)},parentData:_},void 0,!1,void 0,this)},Q,!1,void 0,this);return A(h.Field,{name:s,children:(_)=>A(ir,{field:C,value:_.state.value,disabled:T,readOnly:U,onChange:(w)=>_.handleChange(w),parentData:h.state.values},void 0,!1,void 0,this)},s,!1,void 0,this)})},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}import{useStore as xo}from"@nanostores/react";import{AlertCircle as oi,Loader2 as Eo,Save as ti}from"lucide-react";import{useEffect as vp,useState as Np}from"react";Tr();import{jsxDEV as j}from"react/jsx-dev-runtime";function Vo({global:r}){let[n,a]=Np({}),[p,o]=Np({}),[m,c]=Np(null),{data:v,loading:g,error:y}=xo(Op),{mutate:N,loading:b}=xo(Sp),i=JSON.stringify(n)!==JSON.stringify(p);vp(()=>{sa.set(r.slug)},[r.slug]),vp(()=>{if(v){let l={...v};delete l.id,delete l.createdAt,delete l.updatedAt;let u={...l};if(Object.keys(l).length===0)r.fields.forEach((h)=>{if(!h.name)return;if(h.defaultValue!==void 0)u[h.name]=h.defaultValue;else if(h.type==="boolean")u[h.name]=!1;else if(h.type==="number")u[h.name]=0;else if(h.type==="array"||h.type==="blocks"||h.type==="relationship"&&h.hasMany)u[h.name]=[];else u[h.name]=""});a(u),o(u),c(null)}},[v,r.fields]),vp(()=>{if(y)c("Failed to load global document."),S("Error loading global document","error")},[y]);let R=async(l)=>{if(l)l.preventDefault();c(null);try{await N({slug:r.slug,body:n}),S("Changes saved successfully","success"),o(n)}catch(u){console.error(u),c(u instanceof Error?u.message:"Failed to save document."),S("Failed to save changes","error")}};if(g)return j("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem",marginTop:"2rem",padding:"0 2.5rem"},children:[j(Eo,{size:18,className:"opaca-spin"},void 0,!1,void 0,this),j("span",{className:"opaca-subtitle",children:"Loading settings..."},void 0,!1,void 0,this)]},void 0,!0,void 0,this);return j("div",{className:"opaca-admin-form",children:[j("div",{className:"opaca-header",children:[j("div",{style:{display:"flex",alignItems:"center",gap:"1rem"},children:j("div",{children:[j("h1",{className:"opaca-title",children:r.label||r.slug.charAt(0).toUpperCase()+r.slug.slice(1)},void 0,!1,void 0,this),j("p",{className:"opaca-subtitle",children:"Manage global settings."},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),j("div",{style:{display:"flex",gap:"0.75rem"},children:j("button",{type:"button",onClick:()=>R(),disabled:b,className:"opaca-btn opaca-btn-primary",style:{position:"relative"},title:"Save Changes",children:[b?j(Eo,{size:18,className:"opaca-spin"},void 0,!1,void 0,this):j(ti,{size:18},void 0,!1,void 0,this),"Save",i&&!b&&j("span",{style:{position:"absolute",top:"-4px",right:"-4px",width:"10px",height:"10px",borderRadius:"50%",background:"var(--opaca-warning)",border:"2px solid var(--opaca-card-bg)",boxShadow:"0 1px 2px rgba(0,0,0,0.2)"},title:"Unsaved changes"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),m&&j("div",{style:{padding:"1rem",backgroundColor:"rgba(239, 68, 68, 0.1)",border:"1px solid var(--opaca-error)",color:"var(--opaca-error)",borderRadius:"var(--opaca-radius)",marginBottom:"2rem",display:"flex",alignItems:"center",gap:"0.75rem",fontSize:"0.875rem"},children:[j(oi,{size:18},void 0,!1,void 0,this),m]},void 0,!0,void 0,this),j("div",{className:"opaca-card",style:{padding:"2.5rem"},children:j("form",{id:"opaca-doc-form",onSubmit:R,children:j("div",{style:{display:"grid",gap:"2rem"},children:r.fields.map((l,u)=>{let h=l.name;if(!h)return j(ir,{field:l,value:void 0,onChange:(G,W)=>{if(typeof G==="string")a({...n,[G]:W});else Object.assign(n,W),a({...n})},parentData:n},l.name||u,!1,void 0,this);return j(ir,{field:l,value:n[h],onChange:(G)=>{a({...n,[h]:G})},parentData:n},h,!1,void 0,this)})},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}Dn();import{AlertCircle as mi,Loader2 as ci,Lock as jo,ShieldCheck as yi,User as ii}from"lucide-react";import{useState as En}from"react";import{jsxDEV as F,Fragment as bi}from"react/jsx-dev-runtime";function Do({onSuccess:r}){let[n,a]=En(""),[p,o]=En(""),[m,c]=En(""),[v,g]=En(!1),[y,N]=En(null);return F("div",{className:"opaca-login-container",children:F("div",{className:"opaca-login-card",children:[F("div",{className:"opaca-login-header",children:[F("div",{className:"opaca-login-logo",children:F(yi,{size:24,color:"white"},void 0,!1,void 0,this)},void 0,!1,void 0,this),F("h1",{className:"opaca-title",children:"Welcome to OpacaCMS"},void 0,!1,void 0,this),F("p",{className:"opaca-subtitle",children:"Create the first administrator account to get started."},void 0,!1,void 0,this)]},void 0,!0,void 0,this),y&&F("div",{className:"opaca-login-error",children:[F(mi,{size:14},void 0,!1,void 0,this),y]},void 0,!0,void 0,this),F("form",{onSubmit:async(i)=>{if(i.preventDefault(),g(!0),N(null),p!==m){N("Passwords do not match"),g(!1);return}try{let R=await pn.signUp.email({email:n,password:p,name:"Admin"});if(R.error)throw Error(R.error.message||"Failed to create admin user");r()}catch(R){console.error(R),N(R instanceof Error?R.message:"Initialization failed")}finally{g(!1)}},children:[F("div",{className:"opaca-form-group",children:[F("label",{htmlFor:"init-email",className:"opaca-label",children:"Admin Email"},void 0,!1,void 0,this),F("div",{style:{position:"relative"},children:[F(ii,{size:14,style:{position:"absolute",left:"0.75rem",top:"50%",transform:"translateY(-50%)",color:"var(--opaca-text-dim)"}},void 0,!1,void 0,this),F("input",{id:"init-email",type:"email",className:"opaca-input",style:{paddingLeft:"2.25rem"},placeholder:"admin@example.com",value:n,onChange:(i)=>a(i.target.value),required:!0},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),F("div",{className:"opaca-form-group",children:[F("label",{htmlFor:"init-password",className:"opaca-label",children:"Password"},void 0,!1,void 0,this),F("div",{style:{position:"relative"},children:[F(jo,{size:14,style:{position:"absolute",left:"0.75rem",top:"50%",transform:"translateY(-50%)",color:"var(--opaca-text-dim)"}},void 0,!1,void 0,this),F("input",{id:"init-password",type:"password",className:"opaca-input",style:{paddingLeft:"2.25rem"},placeholder:"••••••••",value:p,onChange:(i)=>o(i.target.value),required:!0,minLength:8},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),F("div",{className:"opaca-form-group",children:[F("label",{htmlFor:"init-confirm",className:"opaca-label",children:"Confirm Password"},void 0,!1,void 0,this),F("div",{style:{position:"relative"},children:[F(jo,{size:14,style:{position:"absolute",left:"0.75rem",top:"50%",transform:"translateY(-50%)",color:"var(--opaca-text-dim)"}},void 0,!1,void 0,this),F("input",{id:"init-confirm",type:"password",className:"opaca-input",style:{paddingLeft:"2.25rem"},placeholder:"••••••••",value:m,onChange:(i)=>c(i.target.value),required:!0,minLength:8},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),F("button",{type:"submit",className:"opaca-btn opaca-btn-primary",style:{width:"100%",marginTop:"0.5rem"},disabled:v,children:v?F(bi,{children:[F(ci,{className:"opaca-spin",size:14},void 0,!1,void 0,this),"Initializing..."]},void 0,!0,void 0,this):"Create Admin Account"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),F("p",{className:"opaca-subtitle",style:{fontSize:"0.6875rem",textAlign:"center",marginTop:"1.25rem"},children:"This account will have full access to manage OpacaCMS."},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}import{AlertCircle as gi,Loader2 as vi,Lock as rt,User as Ni}from"lucide-react";import{useState as Ta}from"react";import{jsxDEV as x,Fragment as Ri}from"react/jsx-dev-runtime";function nt({onLogin:r}){let[n,a]=Ta(""),[p,o]=Ta(""),[m,c]=Ta(!1),[v,g]=Ta(null);return x("div",{className:"opaca-login-container",children:x("div",{className:"opaca-login-card",children:[x("div",{style:{textAlign:"center",marginBottom:"1.5rem"},children:[x("div",{className:"opaca-logo-circle",style:{margin:"0 auto 1rem"},children:x(rt,{size:22},void 0,!1,void 0,this)},void 0,!1,void 0,this),x("h1",{className:"opaca-title",children:"Admin Login"},void 0,!1,void 0,this),x("p",{className:"opaca-subtitle",children:"Authenticate to access the dashboard"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),v&&x("div",{className:"opaca-login-error",children:[x(gi,{size:14},void 0,!1,void 0,this),v]},void 0,!0,void 0,this),x("form",{onSubmit:async(N)=>{N.preventDefault(),c(!0),g(null);try{await r({email:n,password:p})}catch(b){console.error(b),g(b instanceof Error?b.message:"Invalid email or password")}finally{c(!1)}},children:[x("div",{className:"opaca-form-group",children:[x("label",{htmlFor:"login-email",className:"opaca-label",children:"Email"},void 0,!1,void 0,this),x("div",{style:{position:"relative"},children:[x(Ni,{size:14,style:{position:"absolute",left:"0.75rem",top:"50%",transform:"translateY(-50%)",color:"var(--opaca-text-dim)"}},void 0,!1,void 0,this),x("input",{id:"login-email",type:"email",className:"opaca-input",style:{paddingLeft:"2.25rem"},placeholder:"admin@example.com",value:n,onChange:(N)=>a(N.target.value),required:!0},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),x("div",{className:"opaca-form-group",children:[x("label",{htmlFor:"login-password",className:"opaca-label",children:"Password"},void 0,!1,void 0,this),x("div",{style:{position:"relative"},children:[x(rt,{size:14,style:{position:"absolute",left:"0.75rem",top:"50%",transform:"translateY(-50%)",color:"var(--opaca-text-dim)"}},void 0,!1,void 0,this),x("input",{id:"login-password",type:"password",className:"opaca-input",style:{paddingLeft:"2.25rem"},placeholder:"••••••••",value:p,onChange:(N)=>o(N.target.value),required:!0},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),x("button",{type:"submit",className:"opaca-btn opaca-btn-primary",style:{width:"100%",marginTop:"0.5rem"},disabled:m,children:m?x(Ri,{children:[x(vi,{size:14,className:"opaca-spin"},void 0,!1,void 0,this),"Logging in..."]},void 0,!0,void 0,this):"Sign In"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}import{useStore as rn}from"@nanostores/react";import{Check as li,ChevronLeft as hi,ChevronRight as at,Download as ui,Eye as Rp,File as pt,FileText as ot,FolderPlus as lp,Grid as zi,Image as tt,LayoutList as wi,Loader2 as mt,Plus as Ti,Save as Hi,Search as fi,Settings2 as Li,Trash2 as Wi,X as Ci}from"lucide-react";import{useMemo as Gi,useRef as Ki,useState as zn}from"react";import{createPortal as Ji}from"react-dom";Tr();import{jsxDEV as t}from"react/jsx-dev-runtime";var ct=(r)=>{if(!r)return"-";let n=new Date(r);return Number.isNaN(n.getTime())?"-":n.toLocaleDateString()},hp=["#7c3aed","#047857","#b91c1c","#0369a1","#a21caf","#c2410c","#eab308","#10b981","#ec4899","#6366f1"],nn=(r,n)=>{if(n&&n[r])return n[r];let a=0;for(let p=0;p<r.length;p++)a=r.charCodeAt(p)+((a<<5)-a);return hp[Math.abs(a)%hp.length]};function yt({collection:r,config:n}){let{data:a,loading:p}=rn(ln),o=rn(Nn),m=rn(Rn),c=rn(Vr),v=rn(va),g=rn(jr),y=rn(ga),[N,b]=zn(!1),[i,R]=zn(null),[l,u]=zn(!1),[h,G]=zn(""),[W,C]=zn(!1),[Q,s]=zn(!1),f=Ki(null),U=Gi(()=>{return[...Object.keys(n.storages||{})]},[n.storages]),T=()=>{ln.revalidate()},_=async(z)=>{let B=z.target.files?.[0];if(!B)return;b(!0);let nr=new FormData;nr.append("file",B);try{let Yr=m==="all"?"default":m;await M.post(`api/__system/assets/upload?bucket=${Yr}&folder=${c}`,{body:nr}),S("File uploaded successfully","success"),T()}catch(Yr){console.error("Upload failed",Yr),S("Upload failed","error")}finally{if(b(!1),f.current)f.current.value=""}},w=async()=>{if(!h)return;try{let z=m==="all"?"default":m,B=new Blob([""],{type:"text/plain"}),nr=new FormData,Yr=c?`${c}/${h}`:h;nr.append("file",B,".keep"),await M.post(`api/__system/assets/upload?bucket=${z}&folder=${Yr}`,{body:nr}),S("Folder created","success"),G(""),C(!1),T()}catch(z){console.error("Failed to create folder",z),S("Failed to create folder","error")}},K=async()=>{if(!i)return;try{await M.patch(`api/${r.slug}/${i.id}`,{json:{filename:i.filename,altText:i.altText||i.alt_text,caption:i.caption}}),S("Metadata updated","success"),T()}catch(z){console.error("Failed to update metadata",z),S("Failed to update metadata","error")}},J=async(z)=>{try{if(await M.delete(`api/${r.slug}/${z}`),S("Asset deleted","success"),i?.id===z)R(null);T()}catch(B){console.error("Delete failed",B),S("Failed to delete asset","error")}},q=a?.docs||[],br=a?.folders||[],ur=(z)=>{if(z===0)return"0 Bytes";let B=1024,nr=["Bytes","KB","MB","GB"],Yr=Math.floor(Math.log(z)/Math.log(B));return parseFloat((z/B**Yr).toFixed(1))+" "+nr[Yr]},an=(z)=>{if(!z)return t(pt,{size:o==="grid"?48:20,className:"text-gray-400"},void 0,!1,void 0,this);if(z.startsWith("image/"))return t(tt,{size:o==="grid"?48:20,className:"text-blue-400"},void 0,!1,void 0,this);if(z.startsWith("video/"))return t(ot,{size:o==="grid"?48:20,className:"text-purple-400"},void 0,!1,void 0,this);if(z.includes("pdf"))return t(ot,{size:o==="grid"?48:20,className:"text-red-400"},void 0,!1,void 0,this);return t(pt,{size:o==="grid"?48:20,className:"text-gray-400"},void 0,!1,void 0,this)},Tn=q.filter((z)=>{return(z.originalFilename||z.original_filename)?.toLowerCase().includes(v.toLowerCase())||z.filename.toLowerCase().includes(v.toLowerCase())}),Vn=br.filter((z)=>z.name.toLowerCase().includes(v.toLowerCase()));return t("div",{className:`opaca-view-container media-registry-view ${p?"loading":""}`,children:[t("input",{type:"file",ref:f,style:{display:"none"},onChange:_},void 0,!1,void 0,this),t("div",{className:"opaca-header media-registry-header",children:[t("div",{children:[t("h1",{className:"opaca-title",children:"Media Library"},void 0,!1,void 0,this),t("p",{className:"opaca-subtitle",children:"Manage your global asset registry across all buckets."},void 0,!1,void 0,this)]},void 0,!0,void 0,this),t("div",{className:"media-registry-header-actions",children:[t(d,{variant:"outline",onClick:()=>C(!0),disabled:m==="all",title:m==="all"?"Select a specific bucket to create folders":"",children:[t(lp,{size:16,className:"media-registry-icon-mr"},void 0,!1,void 0,this),"New Folder"]},void 0,!0,void 0,this),t(d,{variant:"default",disabled:N||m==="all",onClick:()=>f.current?.click(),title:m==="all"?"Select a specific bucket to upload files":"",children:[N?t(mt,{size:16,className:"opaca-spin media-registry-icon-mr"},void 0,!1,void 0,this):t(Ti,{size:16,className:"media-registry-icon-mr"},void 0,!1,void 0,this),N?"Uploading...":"Upload New"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),t("div",{style:{display:"flex",flex:1,minHeight:0,gap:"1.5rem",marginBottom:"1.5rem"},children:t("div",{style:{flex:1,display:"flex",flexDirection:"column",minWidth:0},children:[t("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem",marginBottom:"1rem",color:"var(--opaca-text-dim)",fontSize:"0.875rem"},children:[t("button",{type:"button",onClick:()=>Wr(""),style:{background:"none",border:"none",color:c===""?"var(--opaca-text)":"inherit",cursor:"pointer",fontWeight:c===""?600:400},children:"Home"},void 0,!1,void 0,this),c.split("/").filter(Boolean).map((z,B,nr)=>t("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem"},children:[t(at,{size:14},void 0,!1,void 0,this),t("button",{type:"button",onClick:()=>Wr(nr.slice(0,B+1).join("/")),style:{background:"none",border:"none",color:B===nr.length-1?"var(--opaca-text)":"inherit",cursor:"pointer",fontWeight:B===nr.length-1?600:400},children:z},void 0,!1,void 0,this)]},z,!0,void 0,this))]},void 0,!0,void 0,this),t("div",{className:"opaca-card media-registry-body",children:[t("div",{className:"media-registry-toolbar",children:[t("div",{className:"media-registry-filters",children:[t("div",{className:"media-registry-search",children:[t(fi,{size:16,className:"search-icon"},void 0,!1,void 0,this),t(fr,{type:"text",placeholder:"Search assets...",value:v,onChange:(z)=>Vp(z.target.value)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),t(cn,{value:m,onValueChange:(z)=>Na(z),children:[t(yn,{className:"media-registry-select-trigger",children:t("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[m!=="all"&&t("div",{style:{width:"8px",height:"8px",borderRadius:"50%",backgroundColor:nn(m,y)}},void 0,!1,void 0,this),t(bn,{placeholder:"All Buckets"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),t(gn,{children:[t(Xr,{value:"all",children:t("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[t("div",{style:{width:"8px",height:"8px",borderRadius:"50%",border:"1px dashed var(--opaca-text-dim)"}},void 0,!1,void 0,this),"All Buckets"]},void 0,!0,void 0,this)},void 0,!1,void 0,this),t(ya,{},void 0,!1,void 0,this),t(ca,{children:"Storage Buckets"},void 0,!1,void 0,this),U.map((z)=>t(Xr,{value:z.toLowerCase(),children:t("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[t("div",{style:{width:"8px",height:"8px",borderRadius:"50%",backgroundColor:nn(z,y)}},void 0,!1,void 0,this),z.toUpperCase()]},void 0,!0,void 0,this)},z,!1,void 0,this))]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),t("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[t(d,{variant:"ghost",size:"icon",onClick:()=>s(!0),title:"Bucket Settings",children:t(Li,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),t("div",{className:"media-registry-view-toggles",children:[t("button",{type:"button",onClick:()=>Nn.set("grid"),className:`media-registry-toggle-btn ${o==="grid"?"active":""}`,children:t(zi,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),t("button",{type:"button",onClick:()=>Nn.set("list"),className:`media-registry-toggle-btn ${o==="list"?"active":""}`,children:t(wi,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),p&&t("div",{style:{display:"flex",justifyContent:"center",padding:"4rem"},children:t(mt,{size:32,className:"opaca-spin",style:{color:"var(--opaca-accent)"}},void 0,!1,void 0,this)},void 0,!1,void 0,this),!p&&Tn.length===0&&t("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",textAlign:"center",padding:"4rem",background:"rgba(255,255,255,0.01)",borderRadius:"12px",border:"1px dashed var(--opaca-border)"},children:[t(tt,{size:48,style:{color:"var(--opaca-text-dim)",marginBottom:"1rem",opacity:0.3}},void 0,!1,void 0,this),t("h3",{style:{fontSize:"1.25rem",fontWeight:600},children:"No assets found"},void 0,!1,void 0,this),t("p",{style:{color:"var(--opaca-text-muted)"},children:"Upload some files to get started."},void 0,!1,void 0,this)]},void 0,!0,void 0,this),!p&&o==="grid"&&(Vn.length>0||Tn.length>0)&&t("div",{className:"media-registry-grid",children:[Vn.map((z)=>t("div",{className:"media-registry-card",onClick:()=>Wr(c?`${c}/${z.name}`:z.name),children:[t("div",{className:"media-registry-card-thumb",style:{position:"relative"},children:[t(lp,{size:54,className:"folder-icon"},void 0,!1,void 0,this),m==="all"&&t("div",{style:{position:"absolute",bottom:"8px",right:"8px",display:"flex",gap:"2px"},children:z.buckets.map((B)=>t("div",{title:B,style:{width:"8px",height:"8px",borderRadius:"50%",backgroundColor:nn(B,y)}},B,!1,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this),t("div",{className:"media-registry-card-body",children:[t("div",{className:"media-registry-card-title",children:z.name},void 0,!1,void 0,this),t("div",{className:"media-registry-card-meta",children:"Folder"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},`folder-${z.name}`,!0,void 0,this)),Tn.map((z)=>t("div",{className:`media-registry-card ${i?.id===z.id?"active":""}`,onClick:()=>R(z),children:[t("div",{className:"media-registry-card-thumb",style:{position:"relative"},children:[(()=>{let B=z.mimeType||z.mime_type;return B?.startsWith("image/")?t("img",{src:`${n.serverURL||""}/api/assets/${z.id}/view`,alt:z.originalFilename||z.original_filename||"",onError:(nr)=>nr.currentTarget.style.display="none"},void 0,!1,void 0,this):an(B||"")})(),m==="all"&&t("div",{title:`Bucket: ${z.bucket}`,style:{position:"absolute",top:"8px",left:"8px",width:"12px",height:"12px",borderRadius:"50%",backgroundColor:nn(z.bucket,y),border:"2px solid rgba(0,0,0,0.5)",zIndex:2}},void 0,!1,void 0,this),t("div",{className:"media-registry-overlay",children:t("button",{className:"media-registry-overlay-btn",onClick:(B)=>{B.stopPropagation(),R(z),u(!0)},children:t(Rp,{size:20},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),t("div",{className:"media-registry-card-body",children:[t("div",{className:"media-registry-card-title",title:z.original_filename,children:z.original_filename},void 0,!1,void 0,this),t("div",{className:"media-registry-card-meta",children:[t("span",{className:"meta-type",children:(z.mimeType||z.mime_type)?.split("/")[1]||"FILE"},void 0,!1,void 0,this),t("span",{children:ur(z.filesize)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},z.id,!0,void 0,this))]},void 0,!0,void 0,this),!p&&o==="list"&&(Vn.length>0||Tn.length>0)&&t("div",{className:"opaca-table-container",children:t("table",{className:"opaca-table",children:[t("thead",{children:t("tr",{children:[t("th",{style:{width:"40px"}},void 0,!1,void 0,this),t("th",{children:"Name"},void 0,!1,void 0,this),t("th",{children:"Type"},void 0,!1,void 0,this),t("th",{children:"Size"},void 0,!1,void 0,this),t("th",{children:"Date"},void 0,!1,void 0,this),t("th",{style:{width:"40px"}},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),t("tbody",{children:[Vn.map((z)=>t("tr",{onClick:()=>Wr(c?`${c}/${z.name}`:z.name),style:{cursor:"pointer"},children:[t("td",{children:t("div",{style:{position:"relative",display:"inline-block"},children:[t(lp,{size:20,style:{color:"#eab308"}},void 0,!1,void 0,this),m==="all"&&t("div",{style:{position:"absolute",bottom:"-2px",right:"-2px",display:"flex",gap:"1px"},children:z.buckets.map((B)=>t("div",{style:{width:"6px",height:"6px",borderRadius:"50%",backgroundColor:nn(B,y)}},B,!1,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),t("td",{style:{fontWeight:600},children:z.name},void 0,!1,void 0,this),t("td",{children:"Folder"},void 0,!1,void 0,this),t("td",{children:"-"},void 0,!1,void 0,this),t("td",{children:"-"},void 0,!1,void 0,this),t("td",{},void 0,!1,void 0,this)]},`folder-${z.name}`,!0,void 0,this)),Tn.map((z)=>t("tr",{onClick:()=>R(z),style:{cursor:"pointer",background:i?.id===z.id?"rgba(var(--opaca-accent-rgb), 0.1)":"inherit"},children:[t("td",{children:t("div",{style:{width:"32px",height:"32px",borderRadius:"4px",background:"var(--opaca-bg-alt)",display:"flex",alignItems:"center",justifyContent:"center",overflow:"hidden"},children:(()=>{let B=z.mimeType||z.mime_type||"";return B.startsWith("image/")?t("img",{src:`${n.serverURL||""}/api/assets/${z.id}/view`,style:{width:"100%",height:"100%",objectFit:"cover"},alt:""},void 0,!1,void 0,this):an(B)})()},void 0,!1,void 0,this)},void 0,!1,void 0,this),t("td",{children:[t("div",{style:{fontWeight:500},children:z.original_filename},void 0,!1,void 0,this),t("div",{style:{fontSize:"0.75rem",color:"var(--opaca-text-dim)"},children:z.filename},void 0,!1,void 0,this)]},void 0,!0,void 0,this),t("td",{style:{fontSize:"0.875rem"},children:z.mimeType||z.mime_type||""},void 0,!1,void 0,this),t("td",{style:{fontSize:"0.875rem"},children:ur(z.filesize)},void 0,!1,void 0,this),t("td",{style:{fontSize:"0.75rem",color:"var(--opaca-text-muted)"},children:ct(z.createdAt||z.created_at)},void 0,!1,void 0,this),t("td",{children:t("button",{onClick:(B)=>{B.stopPropagation(),R(z),u(!0)},style:{background:"none",border:"none",color:"var(--opaca-text-dim)",cursor:"pointer"},children:t(Rp,{size:18},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},z.id,!0,void 0,this))]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),a&&a.totalPages>1&&t("div",{className:"media-registry-pagination",children:[t("div",{className:"info",children:["Showing ",(a.page-1)*a.limit+1," to"," ",Math.min(a.page*a.limit,a.totalDocs)," of ",a.totalDocs]},void 0,!0,void 0,this),t("div",{className:"actions",children:[t(d,{variant:"outline",size:"sm",disabled:a.page===1||p,onClick:()=>ja(g-1),children:t(hi,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),t(d,{variant:"outline",size:"sm",disabled:a.page===a.totalPages||p,onClick:()=>ja(g+1),children:t(at,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),t(Qr,{open:!!i&&!l,onOpenChange:(z)=>!z&&R(null),children:t(Ar,{onClose:()=>R(null),children:[t(Br,{children:[t($r,{children:"Asset Details"},void 0,!1,void 0,this),t(ia,{children:"View and manage asset metadata."},void 0,!1,void 0,this)]},void 0,!0,void 0,this),i&&t("div",{className:"media-sheet-flex",children:t("div",{className:"media-sheet-body opaca-scrollbar-hidden",children:[t("div",{className:"media-sheet-preview",children:[(()=>{let z=i.mimeType||i.mime_type||"";return z.startsWith("image/")?t("img",{src:`${n.serverURL||""}/api/assets/${i.id}/view`,alt:i.filename},void 0,!1,void 0,this):an(z)})(),t("div",{className:"overlay",children:t(d,{variant:"secondary",onClick:()=>u(!0),children:[t(Rp,{size:16,className:"media-registry-icon-mr"},void 0,!1,void 0,this),"Preview Full"]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),t("div",{className:"media-sheet-form",children:[t("div",{className:"media-sheet-group",children:[t(Zr,{htmlFor:"filename",children:"Display Name"},void 0,!1,void 0,this),t(fr,{id:"filename",value:i.filename,onChange:(z)=>R({...i,filename:z.target.value})},void 0,!1,void 0,this)]},void 0,!0,void 0,this),t("div",{className:"media-sheet-group",children:[t(Zr,{htmlFor:"alt_text",children:"Alt Text"},void 0,!1,void 0,this),t(fr,{id:"alt_text",value:i.alt_text||"",onChange:(z)=>R({...i,alt_text:z.target.value}),placeholder:"SEO friendly description"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),t("div",{className:"media-sheet-group",children:[t(Zr,{htmlFor:"caption",children:"Caption"},void 0,!1,void 0,this),t("textarea",{id:"caption",value:i.caption||"",onChange:(z)=>R({...i,caption:z.target.value}),className:"media-sheet-textarea",placeholder:"Write a short caption..."},void 0,!1,void 0,this)]},void 0,!0,void 0,this),t("div",{className:"media-sheet-meta-box",children:[t("div",{className:"media-sheet-meta-row",children:[t("span",{className:"label",children:"File Size"},void 0,!1,void 0,this),t("span",{className:"value",children:ur(i.filesize)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),t("div",{className:"media-sheet-meta-row",children:[t("span",{className:"label",children:"Internal Key"},void 0,!1,void 0,this),t("span",{className:"value value-mono",title:i.key,children:i.key},void 0,!1,void 0,this)]},void 0,!0,void 0,this),t("div",{className:"media-sheet-meta-row",children:[t("span",{className:"label",children:"Bucket"},void 0,!1,void 0,this),t("span",{className:"value",children:i.bucket},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),i&&t(Ap,{className:"media-sheet-actions",children:[t(xn,{title:"Delete Asset",description:"Are you sure you want to delete this asset? This action cannot be undone and may break links in your content.",onConfirm:()=>J(i.id),variant:"destructive",confirmText:"Delete Asset",children:t(d,{variant:"destructive",children:[t(Wi,{size:16,className:"media-registry-icon-mr"},void 0,!1,void 0,this),"Delete"]},void 0,!0,void 0,this)},void 0,!1,void 0,this),t(d,{variant:"default",onClick:K,children:[t(Hi,{size:16,className:"media-registry-icon-mr"},void 0,!1,void 0,this),"Save Changes"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),t(Ln,{open:W,onOpenChange:C,children:t(Wn,{className:"opaca-dialog-max-w",children:[t(Cn,{children:[t(Gn,{children:"Create New Folder"},void 0,!1,void 0,this),t(ta,{children:"Organize your assets into folders."},void 0,!1,void 0,this)]},void 0,!0,void 0,this),t("div",{className:"media-dialog-create-body",children:[t(Zr,{htmlFor:"newFolderName",children:"Folder Name"},void 0,!1,void 0,this),t(fr,{id:"newFolderName",placeholder:"e.g. products",value:h,onChange:(z)=>G(z.target.value),style:{marginTop:"0.5rem"},onKeyDown:(z)=>z.key==="Enter"&&w()},void 0,!1,void 0,this)]},void 0,!0,void 0,this),t(Kn,{children:[t(d,{variant:"outline",onClick:()=>C(!1),children:"Cancel"},void 0,!1,void 0,this),t(d,{onClick:w,children:"Create"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),l&&i&&typeof document<"u"&&Ji(t("div",{className:"opaca-ui-dialog-portal",children:[t("div",{className:"opaca-ui-dialog-overlay",onClick:()=>{u(!1),R(null)}},void 0,!1,void 0,this),t("div",{className:"opaca-ui-dialog-wrapper",children:t("div",{className:"media-preview-container",children:[t("div",{className:"media-preview-header",children:[t("div",{className:"media-preview-title-group",children:[t("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem"},children:[m==="all"&&t("div",{title:`Bucket: ${i.bucket}`,style:{width:"12px",height:"12px",borderRadius:"50%",backgroundColor:nn(i.bucket,y)}},void 0,!1,void 0,this),t("h2",{children:i.original_filename},void 0,!1,void 0,this)]},void 0,!0,void 0,this),t("span",{className:"badge",children:i.mimeType||i.mime_type||""},void 0,!1,void 0,this)]},void 0,!0,void 0,this),t("button",{className:"media-preview-close-btn",onClick:()=>{u(!1),R(null)},children:t(Ci,{size:24},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),t("div",{className:"media-preview-body",children:(()=>{let z=i.mimeType||i.mime_type||"";return z.startsWith("image/")?t("img",{src:`${n.serverURL||""}/api/assets/${i.id}/view`,alt:i.altText||i.alt_text||i.originalFilename||i.original_filename||""},void 0,!1,void 0,this):t("div",{className:"media-preview-no-rich",children:[t("div",{className:"icon-wrapper",children:an(z)},void 0,!1,void 0,this),t("p",{children:"No rich preview available for this file type."},void 0,!1,void 0,this),t(d,{variant:"default",onClick:()=>window.location.href=`${n.serverURL||""}/api/assets/${i.id}/view`,children:[t(ui,{size:16,className:"media-registry-icon-mr"},void 0,!1,void 0,this),"Download Original"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)})()},void 0,!1,void 0,this),t("div",{className:"media-preview-footer",children:[t("div",{className:"media-preview-stat",children:[t("div",{className:"label",children:"Size"},void 0,!1,void 0,this),t("div",{className:"value",children:ur(i.filesize)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),t("div",{className:"media-preview-stat",children:[t("div",{className:"label",children:"Created"},void 0,!1,void 0,this),t("div",{className:"value",children:ct(i.createdAt||i.created_at)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),t("div",{className:"media-preview-stat",children:[t("div",{className:"label",children:"Bucket"},void 0,!1,void 0,this),t("div",{className:"value",children:i.bucket},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),document.body),t(Ln,{open:Q,onOpenChange:s,children:t(Wn,{className:"media-registry-dialog-sm",children:[t(Cn,{children:t(Gn,{children:"Bucket Colors"},void 0,!1,void 0,this)},void 0,!1,void 0,this),t("div",{className:"media-bucket-settings",children:U.map((z)=>t("div",{className:"bucket-setting-row",children:[t("span",{className:"bucket-name",children:z},void 0,!1,void 0,this),t("div",{className:"color-presets",children:hp.map((B)=>{let nr=nn(z,y)===B;return t("button",{className:`color-bubble ${nr?"active":""}`,style:{backgroundColor:B},onClick:()=>jp(z,B),children:nr&&t(li,{size:12,color:"white"},void 0,!1,void 0,this)},B,!1,void 0,this)})},void 0,!1,void 0,this)]},z,!0,void 0,this))},void 0,!1,void 0,this),t(Kn,{children:t(d,{onClick:()=>s(!1),children:"Close"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}import{Check as it,Copy as Yi,Key as Pi,Loader2 as bt,Plus as gt,Trash2 as _i}from"lucide-react";import{useCallback as qi,useEffect as Zi,useState as Fr}from"react";import{jsxDEV as H}from"react/jsx-dev-runtime";function vt({notify:r,config:n}){let[a,p]=Fr([]),[o,m]=Fr(!0),[c,v]=Fr(!1),[g,y]=Fr(null),[N,b]=Fr(""),[i,R]=Fr("31536000"),[l,u]=Fr(!1),[h,G]=Fr({}),W=qi(async()=>{try{m(!0);let w=await M.get("api/auth/api-key/list").json();p(w.apiKeys||[])}catch(w){console.error(w),r?.("Failed to load API keys","error")}finally{m(!1)}},[r]);Zi(()=>{W()},[W]);let C=(w,K)=>{G((J)=>{let q=J[w]||[],br={...J};if(q.includes(K)){let ur=q.filter((an)=>an!==K);if(ur.length===0)delete br[w];else br[w]=ur}else br[w]=[...q,K];return br})},Q=(w)=>{G((K)=>({...K,[w]:_}))},s=(w)=>{G((K)=>{let J={...K};return delete J[w],J})},f=async(w)=>{if(w.preventDefault(),!N.trim())return;try{v(!0);let K=await M.post("api/__admin/api-key/create",{json:{name:N,expiresIn:i?Number(i):void 0,permissions:h}}).json();y(K.key),b(""),R("31536000"),G({}),await W(),r?.("API Key generated successfully")}catch(K){console.error("API Key Creation Error:",K);let J=K.response?.json?await K.response.json().catch(()=>({})):{};r?.(J.message||K.message||"Failed to generate API key","error")}finally{v(!1)}},U=async(w)=>{if(!confirm("Are you sure you want to delete this API key? This action cannot be undone."))return;try{await M.post("api/auth/api-key/delete",{json:{keyId:w}}),await W(),r?.("API Key deleted successfully")}catch(K){console.error(K),r?.("Failed to delete API key","error")}},T=()=>{if(g)navigator.clipboard.writeText(g),u(!0),setTimeout(()=>u(!1),2000),r?.("API Key copied to clipboard")},_=["read","create","update","delete"];return H("div",{className:"opaca-admin-form",children:[H("div",{className:"opaca-header",children:H("div",{children:[H("h1",{className:"opaca-title",children:"Settings"},void 0,!1,void 0,this),H("p",{className:"opaca-subtitle",children:"Manage project settings and API Keys."},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),H("div",{style:{display:"grid",gap:"2.5rem"},children:[H("div",{className:"opaca-card",style:{padding:"2.5rem",border:"1px solid var(--opaca-border-strong)"},children:[H("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem",marginBottom:"1rem"},children:[H("div",{style:{width:"32px",height:"32px",borderRadius:"8px",background:"rgba(var(--opaca-accent-rgb), 0.1)",display:"flex",alignItems:"center",justifyContent:"center"},children:H(gt,{size:18,color:"var(--opaca-accent)"},void 0,!1,void 0,this)},void 0,!1,void 0,this),H("h2",{style:{fontSize:"1.25rem",fontWeight:"600",margin:0},children:"Create New API Key"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),H("p",{style:{fontSize:"0.925rem",color:"var(--opaca-text-dim)",marginBottom:"2.5rem",maxWidth:"600px"},children:"Generate a secure token for external systems. Define granular permissions to control which data can be accessed or modified."},void 0,!1,void 0,this),H("form",{onSubmit:f,style:{display:"grid",gap:"2rem"},children:[H("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"1rem"},children:[H("div",{className:"opaca-form-group",style:{margin:0},children:[H("label",{className:"opaca-label",htmlFor:"key-name",children:"Key Name"},void 0,!1,void 0,this),H("input",{id:"key-name",type:"text",className:"opaca-input",style:{fontSize:"1rem",padding:"0.875rem 1rem"},value:N,onChange:(w)=>b(w.target.value),placeholder:"e.g. Production Mobile App",required:!0},void 0,!1,void 0,this),H("span",{style:{fontSize:"0.75rem",color:"var(--opaca-text-muted)",marginTop:"0.5rem",display:"block"},children:"A descriptive name to help you identify where this key is used."},void 0,!1,void 0,this)]},void 0,!0,void 0,this),H("div",{className:"opaca-form-group",style:{margin:0},children:[H("label",{className:"opaca-label",htmlFor:"expires-in",children:"Expiration"},void 0,!1,void 0,this),H("select",{id:"expires-in",className:"opaca-input",style:{fontSize:"1rem",padding:"0.875rem 1rem",height:"auto"},value:i,onChange:(w)=>R(w.target.value),children:[H("option",{value:"2592000",children:"30 days"},void 0,!1,void 0,this),H("option",{value:"7776000",children:"90 days"},void 0,!1,void 0,this),H("option",{value:"31536000",children:"1 year"},void 0,!1,void 0,this),H("option",{value:"",children:"Never expire"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),H("span",{style:{fontSize:"0.75rem",color:"var(--opaca-text-muted)",marginTop:"0.5rem",display:"block"},children:"How long until this key automatically expires."},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),H("div",{style:{background:"rgba(var(--opaca-card-bg-rgb), 0.5)",border:"1px solid var(--opaca-border)",borderRadius:"12px",overflow:"hidden"},children:[H("div",{style:{padding:"1rem 1.25rem",background:"rgba(0,0,0,0.2)",borderBottom:"1px solid var(--opaca-border)",display:"flex",justifyContent:"space-between",alignItems:"center"},children:[H("label",{htmlFor:"permissions-matrix",className:"opaca-label",style:{margin:0,fontWeight:"600"},children:"Permissions Matrix"},void 0,!1,void 0,this),H("span",{style:{fontSize:"0.75rem",color:"var(--opaca-text-muted)"},children:["Actions for ",n.collections.length," ",n.collections.length===1?"collection":"collections"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),H("div",{style:{overflowX:"auto"},children:H("table",{style:{width:"100%",borderCollapse:"collapse",textAlign:"left"},children:[H("thead",{children:H("tr",{style:{borderBottom:"1px solid var(--opaca-border)",background:"rgba(255,255,255,0.02)"},children:[H("th",{style:{padding:"1rem 1.25rem",fontSize:"0.75rem",fontWeight:"600",color:"var(--opaca-text-muted)",textTransform:"uppercase"},children:"Collection"},void 0,!1,void 0,this),_.map((w)=>H("th",{style:{padding:"1rem",fontSize:"0.75rem",fontWeight:"600",color:"var(--opaca-text-muted)",textAlign:"center",textTransform:"uppercase"},children:w},w,!1,void 0,this)),H("th",{style:{padding:"1rem 1.25rem",fontSize:"0.75rem",fontWeight:"600",color:"var(--opaca-text-muted)",textAlign:"right",textTransform:"uppercase"},children:"Full Access"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),H("tbody",{children:n.collections.map((w)=>{let K=h[w.slug]||[],J=_.every((q)=>K.includes(q));return H("tr",{style:{borderBottom:"1px solid var(--opaca-border)",transition:"background 0.2s"},children:[H("td",{style:{padding:"1rem 1.25rem"},children:H("span",{style:{fontSize:"0.875rem",fontWeight:"600"},children:w.slug},void 0,!1,void 0,this)},void 0,!1,void 0,this),_.map((q)=>{let br=K.includes(q);return H("td",{style:{padding:"0.5rem",textAlign:"center"},children:H("button",{type:"button",onClick:()=>C(w.slug,q),style:{width:"32px",height:"32px",borderRadius:"6px",border:"1px solid",borderColor:br?"var(--opaca-accent)":"var(--opaca-border)",background:br?"rgba(var(--opaca-accent-rgb), 0.15)":"transparent",color:br?"var(--opaca-accent)":"var(--opaca-text-muted)",display:"inline-flex",alignItems:"center",justifyContent:"center",cursor:"pointer",transition:"all 0.2s"},title:`${q.charAt(0).toUpperCase()+q.slice(1)} ${w.slug}`,children:H(it,{size:14,style:{opacity:br?1:0.1},strokeWidth:3},void 0,!1,void 0,this)},void 0,!1,void 0,this)},q,!1,void 0,this)}),H("td",{style:{padding:"1rem 1.25rem",textAlign:"right"},children:H("button",{type:"button",onClick:()=>J?s(w.slug):Q(w.slug),style:{fontSize:"0.75rem",color:J?"var(--opaca-accent)":"var(--opaca-text-dim)",background:"transparent",border:"1px solid",borderColor:J?"var(--opaca-accent)":"var(--opaca-border)",padding:"0.3rem 0.75rem",borderRadius:"6px",cursor:"pointer",transition:"all 0.2s"},children:J?"All Actions":"Full Access?"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},w.slug,!0,void 0,this)})},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),n.collections.length===0&&H("div",{style:{padding:"3rem 1rem",textAlign:"center"},children:H("p",{style:{fontSize:"0.875rem",color:"var(--opaca-text-dim)"},children:"No collections available to configure."},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),H("button",{type:"submit",className:"opaca-btn opaca-btn-primary",disabled:c||!N.trim(),style:{width:"100%",height:"48px",fontSize:"1rem",fontWeight:"600",boxShadow:"0 4px 12px rgba(var(--opaca-accent-rgb), 0.2)",marginTop:"0.5rem"},children:[c?H(bt,{size:18,className:"opaca-spin"},void 0,!1,void 0,this):H(gt,{size:18,strokeWidth:2.5},void 0,!1,void 0,this),"Generate API Key"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),H("div",{style:{padding:"0 0.5rem"},children:[H("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem",marginBottom:"1.5rem"},children:[H(Pi,{size:18,color:"var(--opaca-text-dim)"},void 0,!1,void 0,this),H("h2",{style:{fontSize:"1.125rem",fontWeight:"500",margin:0},children:"Existing Keys"},void 0,!1,void 0,this),H("div",{style:{height:"1px",flex:1,background:"var(--opaca-border)",marginLeft:"0.5rem"}},void 0,!1,void 0,this)]},void 0,!0,void 0,this),g&&H("div",{style:{marginBottom:"2.5rem",padding:"1.75rem",background:"linear-gradient(135deg, rgba(52, 211, 153, 0.1) 0%, rgba(52, 211, 153, 0.02) 100%)",border:"1px solid rgba(52, 211, 153, 0.3)",borderRadius:"16px",position:"relative",overflow:"hidden"},children:[H("div",{style:{position:"absolute",top:0,left:0,width:"4px",height:"100%",background:"var(--opaca-success)"}},void 0,!1,void 0,this),H("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"flex-start",marginBottom:"1.25rem"},children:[H("div",{children:[H("h3",{style:{fontSize:"1rem",fontWeight:"600",color:"var(--opaca-success)",margin:"0 0 0.4rem 0"},children:"Key Generated Successfully"},void 0,!1,void 0,this),H("p",{style:{fontSize:"0.875rem",color:"var(--opaca-text-dim)",margin:0},children:"Copy this key now. For security reasons, it cannot be displayed again."},void 0,!1,void 0,this)]},void 0,!0,void 0,this),H("div",{style:{padding:"0.4rem 0.8rem",borderRadius:"20px",background:"rgba(52, 211, 153, 0.2)",color:"var(--opaca-success)",fontSize:"0.7rem",fontWeight:"700",textTransform:"uppercase"},children:"Confidential"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),H("div",{style:{display:"flex",gap:"0.75rem"},children:[H("code",{style:{flex:1,padding:"1rem 1.25rem",background:"rgba(0,0,0,0.4)",border:"1px solid rgba(255,255,255,0.1)",borderRadius:"10px",fontFamily:"monospace",fontSize:"1rem",color:"#fff",letterSpacing:"0.5px"},children:g},void 0,!1,void 0,this),H("button",{type:"button",onClick:T,className:"opaca-btn",style:{background:"white",color:"#000",width:"48px",height:"48px",borderRadius:"10px"},children:l?H(it,{size:18},void 0,!1,void 0,this):H(Yi,{size:18},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),o?H("div",{style:{display:"flex",justifyContent:"center",padding:"2rem"},children:H(bt,{size:24,className:"opaca-spin",color:"var(--opaca-text-muted)"},void 0,!1,void 0,this)},void 0,!1,void 0,this):a.length===0?H("div",{style:{textAlign:"center",padding:"2rem",color:"var(--opaca-text-muted)",fontSize:"0.875rem",background:"rgba(0,0,0,0.1)",borderRadius:"var(--opaca-radius)"},children:"No API keys generated yet."},void 0,!1,void 0,this):H("div",{style:{display:"grid",gap:"0.5rem"},children:a.map((w)=>H("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"1rem",background:"var(--opaca-card-bg)",border:"1px solid var(--opaca-border)",borderRadius:"var(--opaca-radius)"},children:[H("div",{children:[H("div",{style:{fontWeight:"500",fontSize:"0.875rem",marginBottom:"0.25rem"},children:w.name},void 0,!1,void 0,this),H("div",{style:{display:"flex",gap:"1rem",fontSize:"0.75rem",color:"var(--opaca-text-dim)"},children:[H("span",{children:["Created: ",new Date(w.createdAt).toLocaleDateString()]},void 0,!0,void 0,this),H("span",{children:["Prefix: ",w.prefix,"..."]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),w.permissions&&Object.keys(w.permissions).length>0&&H("div",{style:{marginTop:"0.75rem",display:"flex",flexWrap:"wrap",gap:"0.375rem"},children:Object.entries(w.permissions).map(([K,J])=>H("div",{style:{fontSize:"10px",background:"rgba(255,255,255,0.05)",padding:"0.125rem 0.5rem",borderRadius:"4px",border:"1px solid var(--opaca-border)",color:"var(--opaca-text-dim)"},children:[H("strong",{style:{color:"var(--opaca-text)"},children:[K,":"]},void 0,!0,void 0,this)," ",J.join(", ")]},K,!0,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this),H("button",{type:"button",onClick:()=>U(w.id),className:"opaca-btn",style:{color:"var(--opaca-error)",background:"transparent",border:"none",padding:"0.5rem"},title:"Revoke Key",children:H(_i,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},w.id,!0,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}import{jsxDEV as O,Fragment as $i}from"react/jsx-dev-runtime";function Nt({config:r,serverUrl:n,initialNeedsInit:a}){let[p,o]=Bi(!0);Ai(()=>{if(!n||!n.startsWith("http"))return;Wp(n),wp(n),ra(),(async()=>{try{try{if(a!==void 0)pa(a);else{let G=await M.get("api/__admin/setup").json();console.log("[OpacaCMS] Setup status:",G.initialized),pa(!G.initialized)}}catch(G){console.warn("[OpacaCMS] Failed to check setup status:",G)}try{if(r)Ja(r);else{let G=await M.get("api/__admin/metadata").json();Ja(G)}}catch(G){console.warn("[OpacaCMS] Metadata fetch failed (expected if not logged in):",G)}}catch(G){console.error("[OpacaCMS] Unexpected initialization error:",G)}finally{o(!1)}})()},[r,a,n]);let m=wn(lr),c=wn(Ka),v=wn(dr),g=wn(Pr),y=wn(er),N=wn(Hr),b=async(h)=>{await Wa(h)},i=async()=>{await Ca()},R=Qi((h)=>{Pr.open(`/admin/collections/${h}`)},[]);if(!n||!n.startsWith("http"))return O("div",{className:"opaca-admin",children:O("div",{className:"opaca-loading-screen",children:O("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem"},children:[O(Xi,{size:24,className:"opaca-spin"},void 0,!1,void 0,this),O("span",{style:{fontWeight:500},children:"Waiting for server configuration..."},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this);if(c)return O("div",{className:"opaca-admin",children:O(Do,{onSuccess:()=>{pa(!1),S("Welcome! System initialized successfully")}},void 0,!1,void 0,this)},void 0,!1,void 0,this);if(!N&&!y)return O("div",{className:"opaca-admin",children:O(nt,{onLogin:b},void 0,!1,void 0,this)},void 0,!1,void 0,this);if(p||N||!m)return O("div",{className:"opaca-admin",children:O("div",{className:"opaca-loading-screen",children:O("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem"},children:[O("svg",{className:"opaca-spin",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[O("title",{children:"Loading"},void 0,!1,void 0,this),O("path",{d:"M12 2V6M12 18V22M6 12H2M22 12H18M18.36 5.64L15.53 8.47M8.47 15.53L5.64 18.36M18.36 18.36L15.53 15.53M8.47 8.47L5.64 5.64",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),O("span",{style:{fontWeight:500},children:"Loading OpacaCMS..."},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this);let l=[];if(g){if(g.route==="collections"){l.push({label:"Collections"});let h=g.params.slug,G=m.collections.find((W)=>W.slug===h);l.push({label:G?.label||h.charAt(0).toUpperCase()+h.slice(1)})}else if(g.route==="document"){l.push({label:"Collections"});let h=g.params.slug,G=m.collections.find((W)=>W.slug===h);l.push({label:G?.label||h.charAt(0).toUpperCase()+h.slice(1),href:`/admin/collections/${h}`}),l.push({label:g.params.id==="create"?"Create":"Edit"})}else if(g.route==="globals"){l.push({label:"Globals"});let h=g.params.slug;l.push({label:h.charAt(0).toUpperCase()+h.slice(1)})}else if(g.route==="settings")l.push({label:"Settings"})}let u=()=>{if(!g||g.route==="dashboard")return O(Ho,{config:m,user:y?.user},void 0,!1,void 0,this);if(g.route==="collections"){let h=g.params.slug,G=m.collections.find((W)=>W.slug===h);if(!G)return O("div",{children:"Not Found"},void 0,!1,void 0,this);if(G.slug==="_opaca_assets")return O(yt,{collection:G,config:m},void 0,!1,void 0,this);return O(To,{collection:G},void 0,!1,void 0,this)}if(g.route==="document"){let{slug:h,id:G}=g.params,W=m.collections.find((C)=>C.slug===h);if(!W)return O("div",{children:"Not Found"},void 0,!1,void 0,this);return O(so,{collection:W,id:G,onBack:()=>R(h)},void 0,!1,void 0,this)}if(g.route==="globals"){let h=g.params.slug,G=m.globals?.find((W)=>W.slug===h);if(!G)return O("div",{children:"Not Found"},void 0,!1,void 0,this);return O(Vo,{global:G,onBack:()=>Pr.open("/admin")},void 0,!1,void 0,this)}if(g.route==="settings")return O(vt,{config:m},void 0,!1,void 0,this);return O("div",{children:"404"},void 0,!1,void 0,this)};return O($i,{children:[O($p,{config:m,user:y?.user,onLogout:i,children:O("div",{style:{maxWidth:"70vw",margin:"0 auto",width:"100%",paddingBottom:"4rem"},children:[l.length>0&&O(kp,{items:l},void 0,!1,void 0,this),u()]},void 0,!0,void 0,this)},void 0,!1,void 0,this),O(Mp,{toasts:v,onClear:La},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var Mi=ki(Nt,{props:{serverUrl:"string",config:"json",initialNeedsInit:"boolean"}});if(typeof window<"u"&&!customElements.get("opaca-admin"))customElements.define("opaca-admin",Mi);export{Mi as OpacaAdminWebComponent};
|
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
import { apiKey } from "@better-auth/api-key";
|
|
8
8
|
import { betterAuth } from "better-auth";
|
|
9
9
|
import { admin } from "better-auth/plugins";
|
|
10
|
+
import { CamelCasePlugin } from "kysely";
|
|
10
11
|
|
|
11
12
|
// src/auth/premissions.ts
|
|
12
13
|
import { createAccessControl } from "better-auth/plugins/access";
|
|
@@ -65,7 +66,7 @@ async function createAuth(config) {
|
|
|
65
66
|
const kysely = config.db.db;
|
|
66
67
|
if (kysely && typeof kysely.selectFrom === "function") {
|
|
67
68
|
databaseConfig = {
|
|
68
|
-
db: kysely,
|
|
69
|
+
db: kysely.withPlugin(new CamelCasePlugin),
|
|
69
70
|
type: config.db.name === "postgres" ? "pg" : "sqlite"
|
|
70
71
|
};
|
|
71
72
|
} else {
|
package/dist/index.js
CHANGED
package/dist/runtimes/bun.js
CHANGED
package/dist/runtimes/next.js
CHANGED
package/dist/runtimes/node.js
CHANGED
package/dist/server.js
CHANGED
|
@@ -4,11 +4,11 @@ import {
|
|
|
4
4
|
createGlobalHandlers,
|
|
5
5
|
createHandlers,
|
|
6
6
|
hydrateDoc
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-9y3m1xkx.js";
|
|
8
8
|
import {
|
|
9
9
|
defineConfig
|
|
10
10
|
} from "./chunk-zvwb67nd.js";
|
|
11
|
-
import"./chunk-
|
|
11
|
+
import"./chunk-erh6x75p.js";
|
|
12
12
|
import {
|
|
13
13
|
BaseDatabaseAdapter
|
|
14
14
|
} from "./chunk-s8mqwnm1.js";
|
package/package.json
CHANGED