opacacms 0.1.21 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/README.md +792 -50
  2. package/dist/admin/auth-client.d.ts +39 -39
  3. package/dist/admin/index.js +2360 -1392
  4. package/dist/admin/react.d.ts +1 -1
  5. package/dist/admin/react.js +8 -0
  6. package/dist/admin/router.d.ts +1 -0
  7. package/dist/admin/stores/ui.d.ts +10 -0
  8. package/dist/admin/ui/admin-layout.d.ts +4 -4
  9. package/dist/admin/ui/components/DataDetailView.d.ts +1 -1
  10. package/dist/admin/ui/components/DetailSheet.d.ts +19 -0
  11. package/dist/admin/ui/components/PluginSettingsForm.d.ts +11 -0
  12. package/dist/admin/ui/components/fields/BooleanField.d.ts +2 -1
  13. package/dist/admin/ui/components/fields/DateField.d.ts +1 -1
  14. package/dist/admin/ui/components/fields/FieldLabel.d.ts +11 -0
  15. package/dist/admin/ui/components/fields/FileField.d.ts +1 -1
  16. package/dist/admin/ui/components/fields/NumberField.d.ts +1 -1
  17. package/dist/admin/ui/components/fields/RadioField.d.ts +1 -1
  18. package/dist/admin/ui/components/fields/RelationshipField.d.ts +3 -1
  19. package/dist/admin/ui/components/fields/SelectField.d.ts +1 -1
  20. package/dist/admin/ui/components/fields/TextAreaField.d.ts +1 -1
  21. package/dist/admin/ui/components/fields/TextField.d.ts +1 -1
  22. package/dist/admin/ui/components/fields/VirtualField.d.ts +1 -0
  23. package/dist/admin/ui/components/fields/index.d.ts +16 -16
  24. package/dist/admin/ui/components/fields/richtext-editor/index.d.ts +1 -1
  25. package/dist/admin/ui/components/media/AssetManagerModal.d.ts +1 -1
  26. package/dist/admin/ui/components/toast.d.ts +1 -1
  27. package/dist/admin/ui/components/ui/accordion.d.ts +1 -1
  28. package/dist/admin/ui/components/ui/button.d.ts +1 -1
  29. package/dist/admin/ui/components/ui/collapsible.d.ts +1 -1
  30. package/dist/admin/ui/components/ui/dialog.d.ts +1 -1
  31. package/dist/admin/ui/components/ui/group.d.ts +1 -1
  32. package/dist/admin/ui/components/ui/index.d.ts +17 -17
  33. package/dist/admin/ui/components/ui/input.d.ts +1 -1
  34. package/dist/admin/ui/components/ui/label.d.ts +1 -1
  35. package/dist/admin/ui/components/ui/radio-group.d.ts +1 -1
  36. package/dist/admin/ui/components/ui/relationship.d.ts +4 -4
  37. package/dist/admin/ui/components/ui/select.d.ts +1 -1
  38. package/dist/admin/ui/components/ui/sheet.d.ts +1 -1
  39. package/dist/admin/ui/components/ui/tabs.d.ts +1 -1
  40. package/dist/admin/ui/components/versions-sheet.d.ts +11 -0
  41. package/dist/admin/ui/views/media-registry-view.d.ts +1 -1
  42. package/dist/admin/ui/views/settings-view.d.ts +2 -2
  43. package/dist/admin/vue.js +8 -0
  44. package/dist/admin/webcomponent.js +2 -2
  45. package/dist/admin.css +1 -1
  46. package/dist/auth/index.d.ts +101 -41
  47. package/dist/{chunk-0sdceeys.js → chunk-0bq155dy.js} +86 -6
  48. package/dist/{chunk-59sg3pw9.js → chunk-0gtxnxmd.js} +90 -7
  49. package/dist/{chunk-v521d72w.js → chunk-3rdhbedb.js} +1 -1
  50. package/dist/chunk-51z3x7kq.js +20 -0
  51. package/dist/{chunk-7fyepksb.js → chunk-526a3gqx.js} +1 -1
  52. package/dist/{chunk-wmvjvn7b.js → chunk-6qq3ne6b.js} +39 -1
  53. package/dist/{chunk-0am1m47g.js → chunk-6v1fw7q7.js} +5 -5
  54. package/dist/{chunk-t9v845m2.js → chunk-7y1nbmw6.js} +34 -3
  55. package/dist/chunk-8scgdznr.js +44 -0
  56. package/dist/{chunk-mycmsjd9.js → chunk-b3kr8w41.js} +57 -6
  57. package/dist/chunk-bexcv7xe.js +36 -0
  58. package/dist/{chunk-16vgcf3k.js → chunk-byq8g0rd.js} +1 -1
  59. package/dist/{chunk-fqastxq9.js → chunk-d1asgtke.js} +86 -6
  60. package/dist/{chunk-cpw2y3pn.js → chunk-dykn5hr6.js} +7 -7
  61. package/dist/{chunk-61kwqve4.js → chunk-esrg9qj0.js} +90 -9
  62. package/dist/chunk-fj19qccp.js +78 -0
  63. package/dist/{chunk-ekxkvqjm.js → chunk-gmee4mdc.js} +90 -9
  64. package/dist/{chunk-xa7rjsn2.js → chunk-j53pz21t.js} +2 -2
  65. package/dist/{chunk-xrfhhz85.js → chunk-kc4jfnv7.js} +480 -85
  66. package/dist/chunk-mkn49zmy.js +102 -0
  67. package/dist/{chunk-n1xraw7j.js → chunk-qb6ztvw9.js} +1 -1
  68. package/dist/{chunk-2kyhqvhc.js → chunk-qxt9vge8.js} +1 -1
  69. package/dist/chunk-r39em4yj.js +29 -0
  70. package/dist/chunk-rqyjjqgy.js +91 -0
  71. package/dist/chunk-rsf0tpy1.js +8 -0
  72. package/dist/chunk-swtcpvhf.js +2442 -0
  73. package/dist/chunk-t0zg026p.js +71 -0
  74. package/dist/chunk-twpvxfce.js +64 -0
  75. package/dist/{chunk-ybbbqj63.js → chunk-v9z61v3g.js} +15 -0
  76. package/dist/{chunk-jwjk85ze.js → chunk-ywm4t2gm.js} +6 -2
  77. package/dist/cli/commands/plugin-build.d.ts +1 -0
  78. package/dist/cli/commands/plugin-init.d.ts +1 -0
  79. package/dist/cli/commands/plugin-sync.d.ts +1 -0
  80. package/dist/cli/index.js +24 -6
  81. package/dist/config-utils.d.ts +1 -1
  82. package/dist/config.d.ts +21 -4
  83. package/dist/db/better-sqlite.d.ts +1 -1
  84. package/dist/db/better-sqlite.js +5 -5
  85. package/dist/db/bun-sqlite.d.ts +1 -1
  86. package/dist/db/bun-sqlite.js +5 -5
  87. package/dist/db/d1.d.ts +1 -1
  88. package/dist/db/d1.js +5 -5
  89. package/dist/db/index.js +9 -9
  90. package/dist/db/postgres.d.ts +1 -1
  91. package/dist/db/postgres.js +5 -5
  92. package/dist/db/sqlite.d.ts +1 -1
  93. package/dist/db/sqlite.js +5 -5
  94. package/dist/index.js +4 -3
  95. package/dist/plugins/index.d.ts +1 -0
  96. package/dist/plugins/ui-bridge.d.ts +12 -0
  97. package/dist/plugins/utils.d.ts +5 -0
  98. package/dist/runtimes/bun.js +13 -7
  99. package/dist/runtimes/cloudflare-workers.js +5 -5
  100. package/dist/runtimes/next.js +5 -5
  101. package/dist/runtimes/node.js +13 -7
  102. package/dist/schema/collection.d.ts +9 -26
  103. package/dist/schema/fields/base.d.ts +3 -2
  104. package/dist/schema/fields/index.d.ts +12 -0
  105. package/dist/schema/fields/validation.test.d.ts +1 -0
  106. package/dist/schema/global.d.ts +10 -7
  107. package/dist/schema/index.js +22 -6
  108. package/dist/server/admin-router.d.ts +2 -2
  109. package/dist/server/admin.d.ts +2 -1
  110. package/dist/server/collection-router.d.ts +1 -1
  111. package/dist/server/handlers.d.ts +10 -0
  112. package/dist/server/middlewares/admin.d.ts +2 -2
  113. package/dist/server/middlewares/auth.d.ts +1 -1
  114. package/dist/server/middlewares/context.d.ts +2 -0
  115. package/dist/server/middlewares/rate-limit.d.ts +1 -1
  116. package/dist/server/openapi.d.ts +2 -0
  117. package/dist/server/plugins-loader.d.ts +6 -0
  118. package/dist/server/router.d.ts +3 -3
  119. package/dist/server/routers/admin.d.ts +2 -2
  120. package/dist/server/routers/auth.d.ts +1 -1
  121. package/dist/server/routers/collections.d.ts +1 -1
  122. package/dist/server/routers/plugins.d.ts +18 -0
  123. package/dist/server/setup-middlewares.d.ts +2 -2
  124. package/dist/server/system-router.d.ts +1 -1
  125. package/dist/server.js +11 -7
  126. package/dist/storage/adapters/local.d.ts +1 -1
  127. package/dist/storage/adapters/s3.d.ts +1 -1
  128. package/dist/types.d.ts +222 -15
  129. package/dist/utils/logger.d.ts +13 -35
  130. package/dist/validation.d.ts +40 -0
  131. package/dist/validator.d.ts +1 -1
  132. package/package.json +21 -7
  133. package/dist/admin/ui/components/DataDetailSheet.d.ts +0 -13
  134. package/dist/admin/ui/components/ui/relationship-detail-sheet.d.ts +0 -9
  135. package/dist/chunk-62ev8gnc.js +0 -41
  136. package/dist/chunk-j4d50hrx.js +0 -20
  137. package/dist/chunk-nb7ctdg8.js +0 -311
@@ -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 pY=Object.defineProperty;var vY=(Y)=>Y;function gY(Y,q){this[Y]=vY.bind(null,q)}var I2=(Y,q)=>{for(var W in q)pY(Y,W,{get:q[W],enumerable:!0,configurable:!0,set:gY.bind(q,W)})};var p1=(Y,q)=>()=>(Y&&(q=Y(Y=0)),q);import{createAuthClient as mY}from"better-auth/client";import{adminClient as fY}from"better-auth/client/plugins";var H1=null,S2=null,h2=(Y)=>{if(!Y||!Y.startsWith("http"))return;let W=Y.replace(/\/$/,"")+"/api/auth";if(H1&&S2===W)return;S2=W,H1=mY({baseURL:W,autoRefresh:!0,fetchOptions:{credentials:"include"},plugins:[fY()]})},$0;var X1=p1(()=>{$0=new Proxy({},{get(Y,q){if(!H1)throw Error("Auth client not configured. Did you provide a valid serverUrl?");return H1[q]}})});var v2={};I2(v2,{toggleSidebar:()=>v1,registerSidebarItem:()=>C0,notify:()=>l,clearToast:()=>g1,$toasts:()=>q0,$isSidebarCollapsed:()=>b0,$customSidebarItems:()=>W0});import{persistentAtom as uY}from"@nanostores/persistent";import{atom as p2}from"nanostores";function v1(){b0.set(!b0.get())}function l(Y,q="success"){let W=Math.random().toString(36).substring(2,9);q0.set([...q0.get(),{id:W,message:Y,type:q}])}function g1(Y){q0.set(q0.get().filter((q)=>q.id!==Y))}function C0(Y){let q=W0.get();if(!q.find((W)=>W.path===Y.path)){if(Y.render&&!Y.component){if(Y.component=`opaca-plugin-render-${Math.random().toString(36).substring(2,9)}`,typeof customElements<"u"&&!customElements.get(Y.component)){let{component:W,render:Z}=Y;class J extends HTMLElement{connectedCallback(){let H=this.getAttribute("server-url")||"",G=JSON.parse(this.getAttribute("config")||"{}"),$=JSON.parse(this.getAttribute("user")||"{}");this.innerHTML=Z(H,G,$)}}customElements.define(W,J)}}W0.set([...q,Y])}}var q0,b0,W0;var F5=p1(()=>{q0=p2([]),b0=uY("opaca-sidebar-collapsed",!1,{encode:JSON.stringify,decode:JSON.parse});W0=p2([])});var f2={};I2(f2,{syncSession:()=>J1,logout:()=>f1,login:()=>m1,$user:()=>EY,$session:()=>Z0,$isAuthenticated:()=>jY,$isAuthPending:()=>b5});import{atom as g2,computed as m2}from"nanostores";async function J1(){b5.set(!0);try{let Y=await $0.getSession();Z0.set(Y.data)}catch(Y){console.error("[OpacaCMS] Failed to sync session:",Y)}finally{b5.set(!1)}}async function m1(Y){b5.set(!0);try{let q=await $0.signIn.email({email:Y.email,password:Y.password});if(q.error)throw Error(q.error.message||"Invalid credentials");return await J1(),l("Logged in successfully","success"),q}catch(q){throw l(q instanceof Error?q.message:"Login failed","error"),q}finally{b5.set(!1)}}async function f1(){b5.set(!0);try{await $0.signOut(),Z0.set(null),l("Logged out successfully")}catch{l("Logout failed","error")}finally{b5.set(!1)}}var Z0,b5,EY,jY;var u1=p1(()=>{X1();F5();Z0=g2(null),b5=g2(!0),EY=m2(Z0,(Y)=>Y?.user??null),jY=m2(Z0,(Y)=>!!Y)});import LW from"@r2wc/react-to-web-component";var b2={debug:0,info:1,warn:2,error:3};class C2{config;constructor(Y={}){this.config=Y}shouldLog(Y){if(this.config.disabled)return!1;let q=this.config.level||"info";return b2[Y]>=b2[q]}info(Y,...q){if(!this.shouldLog("info"))return;console.log(`\x1B[34m[OpacaCMS]\x1B[0m ${Y}`,...q)}success(Y,...q){if(!this.shouldLog("info"))return;console.log(`\x1B[34m[OpacaCMS]\x1B[0m \x1B[32m${Y}\x1B[0m`,...q)}debug(Y,...q){if(!this.shouldLog("debug"))return;console.log(`\x1B[34m[OpacaCMS]\x1B[0m \x1B[90m${Y}\x1B[0m`,...q)}warn(Y,...q){if(!this.shouldLog("warn"))return;console.warn(`\x1B[34m[OpacaCMS]\x1B[0m \x1B[33mWarning: ${Y}\x1B[0m`,...q)}error(Y,...q){if(!this.shouldLog("error"))return;console.error(`\x1B[34m[OpacaCMS]\x1B[0m \x1B[31mError: ${Y}\x1B[0m`,...q)}format(Y,q){if(this.config.disableColors)return q;switch(Y){case"green":return`\x1B[32m${q}\x1B[0m`;case"red":return`\x1B[31m${q}\x1B[0m`;case"yellow":return`\x1B[33m${q}\x1B[0m`;case"gray":return`\x1B[90m${q}\x1B[0m`;default:return q}}}var m5=new C2;import{useStore as _0}from"@nanostores/react";import{Loader2 as QW}from"lucide-react";import KW,{useCallback as _W,useEffect as SY,useState as $W}from"react";import VY from"ky";var S0=null,z1=null,u2=(Y)=>{if(!Y||!Y.startsWith("http"))return;let W=Y.replace(/\/$/,"");if(S0&&z1===W)return;z1=W,S0=VY.create({prefixUrl:W,credentials:"include",retry:0,hooks:{afterResponse:[async(Z,J,H)=>{if(H.status===401||H.status===403)try{let{$session:G}=await Promise.resolve().then(() => (u1(),f2)),{notify:$}=await Promise.resolve().then(() => (F5(),v2));G.set(null),$("Session expired. Please log in again.","error")}catch(G){}}]}})},w5=()=>{if(!z1)throw Error("API client not configured. Did you provide a valid serverUrl?");return z1},j=new Proxy({},{get(Y,q){if(!S0)throw Error("API client not configured. Did you provide a valid serverUrl?");if(!S0)throw Error("API client not configured");let W=S0;if(W)return W[q];return}});X1();import{createRouter as xY}from"@nanostores/router";var f5=xY({dashboard:"/admin",collections:"/admin/collections/:slug",document:"/admin/collections/:slug/:id",globals:"/admin/globals/:slug",settings:"/admin/settings",plugin:"/admin/:path"});u1();import{atom as G1}from"nanostores";var N5=G1(null),E1=G1(!1),hW=G1(!1),pW=G1(!1);function j1(Y){N5.set(Y)}function Q1(Y){E1.set(Y)}F5();import{useStore as W2}from"@nanostores/react";import*as T0 from"lucide-react";import{ChevronLeft as sY,ChevronRight as eY,Database as Y7,Globe as i2,Image as q7,LayoutDashboard as W7,LogOut as Z7,Settings as H7}from"lucide-react";F5();import{jsxDEV as DY}from"react/jsx-dev-runtime";function K5({href:Y,params:q,search:W,children:Z,onClick:J,...H}){return DY("a",{href:Y,onClick:($)=>{if(J)J($);if(!$.defaultPrevented&&$.button===0&&!$.metaKey&&!$.ctrlKey&&!$.shiftKey&&!$.altKey&&!H.target)if($.preventDefault(),Y.startsWith("/admin"))f5.open(Y);else window.location.href=Y},...H,children:Z},void 0,!1,void 0,this)}import*as E2 from"react";function g(...Y){return Y.filter(Boolean).join(" ")}import{jsxDEV as u5}from"react/jsx-dev-runtime";var h0=({title:Y,children:q,defaultOpen:W=!0,className:Z,isCollapsed:J=!1})=>{let[H,G]=E2.useState(W);return u5("div",{className:g("opaca-sidebar-accordion",Z),children:[u5("button",{type:"button",className:"opaca-sidebar-accordion-trigger",onClick:()=>G(!H),"aria-expanded":H,style:{opacity:J?0:1,pointerEvents:J?"none":"auto"},title:Y,children:[u5("span",{className:"opaca-sidebar-accordion-title",children:Y},void 0,!1,void 0,this),u5("svg",{className:"opaca-sidebar-accordion-icon",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:[u5("title",{children:"Toggle accordion"},void 0,!1,void 0,this),u5("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),u5("div",{className:"opaca-sidebar-accordion-content","data-state":H?"open":"closed",children:u5("div",{className:"opaca-sidebar-accordion-content-inner",children:q},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import*as j2 from"react";import{jsxDEV as V1}from"react/jsx-dev-runtime";var x1=j2.forwardRef(({className:Y,label:q,children:W,...Z},J)=>{return V1("div",{ref:J,className:g("opaca-ui-blocks",Y),...Z,children:[q&&V1("div",{style:{marginBottom:"1.25rem",fontSize:"0.75rem",fontWeight:500,color:"var(--opaca-text-muted)",textTransform:"uppercase",letterSpacing:"0.03em"},children:q},void 0,!1,void 0,this),V1("div",{style:{display:"flex",flexDirection:"column",gap:"1.5rem"},children:W},void 0,!1,void 0,this)]},void 0,!0,void 0,this)});x1.displayName="Blocks";import*as V2 from"react";import{jsxDEV as rY}from"react/jsx-dev-runtime";var e=V2.forwardRef(({className:Y,variant:q="default",size:W="default",...Z},J)=>{return rY("button",{ref:J,className:g("opaca-ui-btn",`opaca-ui-btn-${q}`,`opaca-ui-btn-size-${W}`,Y),...Z},void 0,!1,void 0,this)});e.displayName="Button";import*as _5 from"react";import{jsxDEV as U0}from"react/jsx-dev-runtime";var D1=_5.createContext({}),r1=_5.forwardRef(({className:Y,open:q,defaultOpen:W,onOpenChange:Z,disabled:J,children:H,...G},$)=>{let[K,Q]=_5.useState(W??!1),U=q!==void 0,_=U?q:K,X=_5.useCallback((L)=>{if(!U)Q(L);if(Z)Z(L)},[U,Z]),w=_5.useMemo(()=>({open:_,onOpenChange:X,disabled:J}),[_,X,J]);return U0(D1.Provider,{value:w,children:U0("div",{ref:$,className:g("opaca-ui-collapsible",Y),...G,children:H},void 0,!1,void 0,this)},void 0,!1,void 0,this)});r1.displayName="Collapsible";var c1=_5.forwardRef(({className:Y,disabled:q,children:W,...Z},J)=>{let H=_5.useContext(D1),G=q||H.disabled,$=H.open,K=_5.useCallback((Q)=>{if(!G&&H.onOpenChange)H.onOpenChange(!$);if(Z.onClick)Z.onClick(Q)},[G,$,H.onOpenChange,Z.onClick]);return U0("button",{type:"button","aria-expanded":$,disabled:G,onClick:K,ref:J,className:g("opaca-ui-collapsible-trigger",Y),...Z,children:[W,U0("svg",{className:"opaca-ui-collapsible-icon",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",children:U0("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)});c1.displayName="CollapsibleTrigger";var d1=_5.forwardRef(({className:Y,children:q,...W},Z)=>{let H=_5.useContext(D1).open;if(!H)return null;return U0("div",{"data-state":H?"open":"closed",ref:Z,className:g("opaca-ui-collapsible-content",Y),...W,children:q},void 0,!1,void 0,this)});d1.displayName="CollapsibleContent";import{createPortal as cY}from"react-dom";import{jsxDEV as E5}from"react/jsx-dev-runtime";function p0({open:Y,onOpenChange:q,children:W}){if(!Y)return null;return cY(E5("div",{className:"opaca-ui-dialog-portal",children:[E5("button",{type:"button",className:"opaca-ui-dialog-overlay",onClick:()=>q(!1),tabIndex:-1,"aria-hidden":"true"},void 0,!1,void 0,this),E5("div",{className:"opaca-ui-dialog-wrapper",children:W},void 0,!1,void 0,this)]},void 0,!0,void 0,this),document.body)}function v0({children:Y,className:q}){return E5("div",{className:g("opaca-ui-dialog-content",q),children:Y},void 0,!1,void 0,this)}function g0({children:Y,className:q}){return E5("div",{className:g("opaca-ui-dialog-header",q),children:Y},void 0,!1,void 0,this)}function m0({children:Y,className:q}){return E5("h2",{className:g("opaca-ui-dialog-title",q),children:Y},void 0,!1,void 0,this)}function K1({children:Y,className:q}){return E5("p",{className:g("opaca-ui-dialog-description",q),children:Y},void 0,!1,void 0,this)}function f0({children:Y,className:q}){return E5("div",{className:g("opaca-ui-dialog-footer",q),children:Y},void 0,!1,void 0,this)}import*as D2 from"react";import{jsxDEV as x2}from"react/jsx-dev-runtime";var n1=D2.forwardRef(({className:Y,label:q,children:W,...Z},J)=>{return x2("div",{ref:J,className:g("opaca-ui-group",Y),...Z,children:[q&&x2("h3",{className:"opaca-ui-group-header",children:q},void 0,!1,void 0,this),W]},void 0,!0,void 0,this)});n1.displayName="Group";import*as r2 from"react";import{jsxDEV as dY}from"react/jsx-dev-runtime";var C5=r2.forwardRef(({className:Y,type:q,...W},Z)=>{return dY("input",{type:q,className:g("opaca-ui-input",Y),ref:Z,...W},void 0,!1,void 0,this)});C5.displayName="Input";import*as c2 from"react";import{jsxDEV as L0}from"react/jsx-dev-runtime";var o1=c2.forwardRef(({className:Y,label:q,collection:W,children:Z,...J},H)=>{return L0("div",{ref:H,className:g("opaca-ui-join",Y),...J,children:[q&&L0("div",{style:{display:"block",marginBottom:"0.5rem",fontSize:"0.75rem",fontWeight:500,color:"var(--opaca-text-muted)",textTransform:"uppercase",letterSpacing:"0.03em"},children:q},void 0,!1,void 0,this),L0("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:[L0("span",{children:["Virtually joined from: ",L0("strong",{children:W},void 0,!1,void 0,this)]},void 0,!0,void 0,this),L0("span",{style:{fontSize:"0.7rem",opacity:0.5},children:["On: ",J.on||"dynamic"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)});o1.displayName="Join";import*as d2 from"react";import{jsxDEV as nY}from"react/jsx-dev-runtime";var j5=d2.forwardRef(({className:Y,...q},W)=>nY("label",{ref:W,className:g("opaca-ui-label",Y),...q},void 0,!1,void 0,this));j5.displayName="Label";import*as S5 from"react";import{jsxDEV as _1}from"react/jsx-dev-runtime";var a1=S5.forwardRef(({className:Y,value:q,onValueChange:W,disabled:Z,name:J,children:H,...G},$)=>{let K=S5.useMemo(()=>({value:q,onValueChange:W,disabled:Z,name:J}),[q,W,Z,J]);return _1(n2.Provider,{value:K,children:_1("div",{ref:$,className:g("opaca-ui-radio-group",Y),...G,children:H},void 0,!1,void 0,this)},void 0,!1,void 0,this)});a1.displayName="RadioGroup";var n2=S5.createContext({}),l1=S5.forwardRef(({className:Y,value:q,disabled:W,id:Z,...J},H)=>{let G=S5.useContext(n2),$=W||G.disabled,K=G.value===q,Q=G.name;return _1("div",{className:"opaca-ui-radio-item",children:_1("input",{type:"radio",ref:H,id:Z,name:Q,value:q,checked:K,disabled:$,onChange:()=>{if(!$&&G.onValueChange)G.onValueChange(q)},className:g(Y),...J},void 0,!1,void 0,this)},void 0,!1,void 0,this)});l1.displayName="RadioGroupItem";import*as o2 from"react";import{jsxDEV as $1}from"react/jsx-dev-runtime";var i1=o2.forwardRef(({className:Y,relationTo:q,children:W,hasError:Z,style:J,...H},G)=>{return $1("button",{ref:G,type:"button",className:g("opaca-ui-relationship",Y),...H,children:$1("div",{className:g("opaca-ui-relationship-trigger",Z&&"error"),children:$1("div",{className:"opaca-relationship-trigger-content",children:W||$1("span",{className:"opaca-relationship-placeholder",children:["Select ",q,"..."]},void 0,!0,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)});i1.displayName="Relationship";import{jsxDEV as oY}from"react/jsx-dev-runtime";function w0({children:Y,className:q,maxHeight:W,...Z}){return oY("div",{className:g("opaca-scroll-area",q),style:{maxHeight:W,overflowY:"auto",...Z.style},...Z,children:Y},void 0,!1,void 0,this)}import{ChevronDown as aY}from"lucide-react";import*as $5 from"react";import{createPortal as lY}from"react-dom";import{jsxDEV as T5}from"react/jsx-dev-runtime";var u0=$5.createContext(null);function V5({value:Y,onValueChange:q,children:W,open:Z,onOpenChange:J}){let[H,G]=$5.useState(!1),$=Z??H,K=J??G,Q=$5.useRef(null);return T5(u0.Provider,{value:{value:Y,onValueChange:q,open:$,setOpen:K,triggerRef:Q},children:T5("div",{className:"opaca-ui-select",children:W},void 0,!1,void 0,this)},void 0,!1,void 0,this)}function x5({children:Y,className:q}){let W=$5.useContext(u0);if(!W)throw Error("SelectTrigger must be used within a Select");return T5("button",{ref:W.triggerRef,type:"button",className:g("opaca-ui-select-trigger",q),onClick:()=>W.setOpen(!W.open),"data-state":W.open?"open":"closed",children:[T5("span",{className:"trigger-content",children:Y},void 0,!1,void 0,this),T5(aY,{size:14,className:"trigger-icon"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function D5({placeholder:Y}){let q=$5.useContext(u0);if(!q)throw Error("SelectValue must be used within a Select");return T5("span",{className:!q.value?"trigger-placeholder":"",children:q.value||Y},void 0,!1,void 0,this)}function r5({children:Y,className:q}){let W=$5.useContext(u0);if(!W)throw Error("SelectContent must be used within a Select");let[Z,J]=$5.useState({top:0,left:0,width:0}),H=$5.useCallback(()=>{if(W.open&&W.triggerRef.current){let G=W.triggerRef.current.getBoundingClientRect();J({top:G.bottom,left:G.left,width:G.width})}},[W.open,W.triggerRef]);if($5.useEffect(()=>{if(W.open)return H(),window.addEventListener("scroll",H,!0),window.addEventListener("resize",H),()=>{window.removeEventListener("scroll",H,!0),window.removeEventListener("resize",H)}},[W.open,H]),!W.open)return null;return lY(T5("div",{className:"opaca-ui-select-portal",style:{top:Z.top+4,left:Z.left,width:Z.width},children:[T5("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:()=>W.setOpen(!1),tabIndex:-1,"aria-hidden":"true"},void 0,!1,void 0,this),T5("div",{className:g("opaca-ui-select-content",q),children:Y},void 0,!1,void 0,this)]},void 0,!0,void 0,this),document.body)}function y5({value:Y,children:q,className:W}){let Z=$5.useContext(u0);if(!Z)throw Error("SelectItem must be used within a Select");let J=Z.value===Y;return T5("button",{type:"button",className:g("opaca-ui-select-item",W),"data-selected":J,onClick:()=>{Z.onValueChange?.(Y),Z.setOpen(!1)},children:q},void 0,!1,void 0,this)}function U1({children:Y}){return T5("div",{className:"opaca-ui-select-label",children:Y},void 0,!1,void 0,this)}function L1(){return T5("div",{className:"opaca-ui-select-separator"},void 0,!1,void 0,this)}import{jsxDEV as iY}from"react/jsx-dev-runtime";var a2=({className:Y="",orientation:q="horizontal",margin:W})=>{return iY("div",{className:`opaca-separator ${q} ${Y}`,style:W?{margin:W}:void 0,role:"none"},void 0,!1,void 0,this)};import{createPortal as tY}from"react-dom";import{jsxDEV as R5}from"react/jsx-dev-runtime";function c5({open:Y,onOpenChange:q,children:W}){if(!Y)return null;return tY(R5("div",{className:"opaca-ui-sheet-portal",children:[R5("button",{type:"button",className:"opaca-ui-sheet-overlay",onClick:()=>q(!1),tabIndex:-1,"aria-hidden":"true"},void 0,!1,void 0,this),R5("div",{className:"opaca-ui-sheet-wrapper",children:W},void 0,!1,void 0,this)]},void 0,!0,void 0,this),document.body)}function d5({children:Y,className:q,onClose:W}){return R5("div",{className:g("opaca-ui-sheet-content",q),children:[Y,W&&R5("button",{type:"button",onClick:W,className:"opaca-ui-sheet-close",children:[R5("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:[R5("line",{x1:"18",x2:"6",y1:"6",y2:"18"},void 0,!1,void 0,this),R5("line",{x1:"6",x2:"18",y1:"6",y2:"18"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),R5("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 B0({children:Y,className:q}){return R5("div",{className:g("opaca-ui-sheet-header",q),children:Y},void 0,!1,void 0,this)}function R0({children:Y,className:q}){return R5("h2",{className:g("opaca-ui-sheet-title",q),children:Y},void 0,!1,void 0,this)}function P0({children:Y,className:q}){return R5("p",{className:g("opaca-ui-sheet-description",q),children:Y},void 0,!1,void 0,this)}function l2({children:Y,className:q}){return R5("div",{className:g("opaca-ui-sheet-footer",q),children:Y},void 0,!1,void 0,this)}import*as U5 from"react";import{jsxDEV as E0}from"react/jsx-dev-runtime";var t1=U5.createContext({}),s1=U5.forwardRef(({className:Y,value:q,defaultValue:W,onValueChange:Z,children:J,...H},G)=>{let[$,K]=U5.useState(W),Q=q!==void 0,U=Q?q:$,_=U5.useCallback((w)=>{if(!Q)K(w);if(Z)Z(w)},[Q,Z]),X=U5.useMemo(()=>({value:U,onValueChange:_}),[U,_]);return E0(t1.Provider,{value:X,children:E0("div",{ref:G,className:g("opaca-ui-tabs",Y),...H,children:J},void 0,!1,void 0,this)},void 0,!1,void 0,this)});s1.displayName="Tabs";var e1=U5.forwardRef(({className:Y,...q},W)=>E0("div",{ref:W,className:g("opaca-ui-tabs-list",Y),role:"tablist",...q},void 0,!1,void 0,this));e1.displayName="TabsList";var Y2=U5.forwardRef(({className:Y,value:q,disabled:W,...Z},J)=>{let H=U5.useContext(t1),G=H.value===q;return E0("button",{type:"button",role:"tab","aria-selected":G,"data-state":G?"active":"inactive",disabled:W,onClick:()=>{if(!W&&H.onValueChange)H.onValueChange(q)},ref:J,className:g("opaca-ui-tabs-trigger",Y),...Z},void 0,!1,void 0,this)});Y2.displayName="TabsTrigger";var q2=U5.forwardRef(({className:Y,value:q,...W},Z)=>{let H=U5.useContext(t1).value===q;if(!H)return null;return E0("div",{role:"tabpanel","data-state":H?"active":"inactive",ref:Z,className:g("opaca-ui-tabs-content",Y),...W},void 0,!1,void 0,this)});q2.displayName="TabsContent";import{jsxDEV as u}from"react/jsx-dev-runtime";function t2({children:Y,config:q,user:W,onLogout:Z}){let J=W2(b0),H=W2(W0),$=W2(f5)?.path||"/admin";return u("div",{className:"opaca-admin",children:[u("aside",{className:`opaca-sidebar ${J?"collapsed":""}`,children:[u("button",{type:"button",className:"opaca-sidebar-toggle",onClick:v1,title:J?"Expand Sidebar":"Collapse Sidebar",children:J?u(eY,{size:14},void 0,!1,void 0,this):u(sY,{size:14},void 0,!1,void 0,this)},void 0,!1,void 0,this),u("div",{className:"opaca-sidebar-inner",children:[u("div",{className:"opaca-logo",title:q.appName||"OpacaCMS",children:J?u("div",{className:"opaca-logo-mini",children:(q.appName||"OpacaCMS").charAt(0).toUpperCase()},void 0,!1,void 0,this):q.appName||"OpacaCMS"},void 0,!1,void 0,this),u("nav",{className:"opaca-nav",children:[u(K5,{href:"/admin",className:`opaca-nav-item ${$==="/admin"?"active":""}`,title:"Dashboard",children:[u(W7,{size:16},void 0,!1,void 0,this),u("span",{className:"opaca-nav-label",children:"Dashboard"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),(()=>{let K=q.collections.filter((X)=>{if(X.hidden)return!1;if(typeof X.admin==="object"){if(X.admin.hidden||X.admin.disableAdmin)return!1}if(X.admin===!1)return!1;return!0}).sort((X,w)=>X.admin===w.admin?0:X.admin?-1:1),Q=K.filter((X)=>!X.slug.startsWith("_")),U=K.filter((X)=>X.slug.startsWith("_")),_=(X)=>{let w=X.slug.startsWith("_")?X.slug.replace(/^_/,""):X.slug,L=`/admin/collections/${w}`,B=X.label||X.slug.replace(/^_+/,"").replace(/_/g," ").replace(/\b\w/g,(R)=>R.toUpperCase()),y=X.slug==="_opaca_assets",M=X.icon&&X.icon in T0?T0[X.icon]:y?q7:Y7;return u(K5,{href:L,className:`opaca-nav-item ${$.includes(`/admin/collections/${w}`)?"active":""}`,title:B,children:[u(M,{size:16},void 0,!1,void 0,this),u("span",{className:"opaca-nav-label",children:B},void 0,!1,void 0,this),X.admin&&!J&&u("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)]},X.slug,!0,void 0,this)};return u(w0,{className:"opaca-nav-scroll",style:{flex:1},children:[Q.length>0&&u(h0,{title:"Collections",isCollapsed:J,children:Q.map(_)},void 0,!1,void 0,this),Q.length>0&&U.length>0&&u("div",{style:{margin:"0.75rem 0.75rem"},children:u(a2,{},void 0,!1,void 0,this)},void 0,!1,void 0,this),U.length>0&&u(h0,{title:"System Collections",isCollapsed:J,children:U.map(_)},void 0,!1,void 0,this),q.globals&&q.globals.length>0&&u(h0,{title:"Globals",isCollapsed:J,children:q.globals.map((X)=>{let w=`/admin/globals/${X.slug}`,L=X.label||X.slug.charAt(0).toUpperCase()+X.slug.slice(1),B=X.icon&&X.icon in T0?T0[X.icon]:i2;return u(K5,{href:w,className:`opaca-nav-item ${$===w?"active":""}`,title:L,children:[u(B,{size:16},void 0,!1,void 0,this),u("span",{className:"opaca-nav-label",children:L},void 0,!1,void 0,this)]},X.slug,!0,void 0,this)})},void 0,!1,void 0,this),H.length>0&&u(h0,{title:"Plugins",isCollapsed:J,children:H.map((X)=>{let w=X.icon&&X.icon in T0?T0[X.icon]:null,L=typeof X.icon==="string"&&X.icon.length<=2;return u(K5,{href:X.path,className:`opaca-nav-item ${$===X.path?"active":""}`,title:X.label,children:[w?u(w,{size:16},void 0,!1,void 0,this):L?u("span",{style:{fontSize:"16px",width:"16px",textAlign:"center"},children:X.icon},void 0,!1,void 0,this):u(i2,{size:16},void 0,!1,void 0,this),u("span",{className:"opaca-nav-label",children:X.label},void 0,!1,void 0,this)]},X.path,!0,void 0,this)})},void 0,!1,void 0,this)]},void 0,!0,void 0,this)})()]},void 0,!0,void 0,this),u("div",{className:"opaca-nav-footer",children:[W&&u("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:J?"center":"flex-start"},title:`${W.name} (${W.email})`,children:[W.image?u("img",{src:W.image,alt:W.name,style:{width:"32px",height:"32px",borderRadius:"50%",objectFit:"cover"}},void 0,!1,void 0,this):u("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:W.name.charAt(0).toUpperCase()},void 0,!1,void 0,this),!J&&u("div",{style:{overflow:"hidden"},children:[u("div",{style:{fontSize:"0.8125rem",fontWeight:"500",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:W.name},void 0,!1,void 0,this),u("div",{style:{fontSize:"0.6875rem",color:"var(--opaca-text-dim)",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:W.email},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),u(K5,{href:"/admin/settings",className:`opaca-nav-item ${$==="/admin/settings"?"active":""}`,title:"Settings",children:[u(H7,{size:16},void 0,!1,void 0,this),u("span",{className:"opaca-nav-label",children:"Settings"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),u("button",{type:"button",onClick:Z,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:[u(Z7,{size:16},void 0,!1,void 0,this),u("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),u("main",{className:"opaca-content",children:u("div",{className:"opaca-content-inner",children:Y},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}import{ChevronRight as X7,Home as J7}from"lucide-react";import z7 from"react";import{jsxDEV as H0}from"react/jsx-dev-runtime";function s2({items:Y}){return H0("nav",{"aria-label":"Breadcrumb",style:{display:"flex",alignItems:"center",gap:"0.5rem",marginBottom:"1.5rem",fontSize:"0.8125rem",color:"var(--opaca-text-dim)"},children:[H0(K5,{href:"/admin",style:{display:"flex",alignItems:"center",color:"inherit",textDecoration:"none",transition:"color var(--opaca-transition)"},children:H0(J7,{size:14},void 0,!1,void 0,this)},void 0,!1,void 0,this),Y.map((q,W)=>H0(z7.Fragment,{children:[H0(X7,{size:12,style:{opacity:0.5}},void 0,!1,void 0,this),q.href?H0(K5,{href:q.href,style:{color:"inherit",textDecoration:"none",transition:"color var(--opaca-transition)"},children:q.label},void 0,!1,void 0,this):H0("span",{style:{color:"var(--opaca-text)",fontWeight:"500"},children:q.label},void 0,!1,void 0,this)]},q.label||W,!0,void 0,this))]},void 0,!0,void 0,this)}import{CheckCircle as G7,Info as Q7,X as K7,XCircle as _7}from"lucide-react";import{useEffect as $7,useState as U7}from"react";import{jsxDEV as X0}from"react/jsx-dev-runtime";function L7({id:Y,message:q,type:W,onClear:Z}){let[J,H]=U7(!1);$7(()=>{let K=setTimeout(()=>{H(!0),setTimeout(()=>Z(Y),200)},4000);return()=>clearTimeout(K)},[Y,Z]);let G=W==="success"?G7:W==="error"?_7:Q7,$=W==="success"?"var(--opaca-success)":W==="error"?"var(--opaca-error)":"var(--opaca-accent)";return X0("div",{className:`opaca-toast opaca-toast-${W} ${J?"exit":""}`,children:[X0(G,{size:18,style:{color:$}},void 0,!1,void 0,this),X0("span",{className:"opaca-toast-message",children:q},void 0,!1,void 0,this),X0("button",{type:"button",onClick:()=>{H(!0),setTimeout(()=>Z(Y),200)},style:{background:"none",border:"none",padding:"4px",marginLeft:"auto",cursor:"pointer",color:"var(--opaca-text-dim)",display:"flex",alignItems:"center",justifyContent:"center"},children:X0(K7,{size:14},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function e2({toasts:Y,onClear:q}){if(Y.length===0)return null;return X0("div",{className:"opaca-toast-container",children:Y.map((W)=>X0(L7,{...W,onClear:q},W.id,!1,void 0,this))},void 0,!1,void 0,this)}import{useStore as b4}from"@nanostores/react";import{ArrowDownAZ as g6,ArrowUpZA as m6,ChevronLeft as f6,ChevronRight as u6,Edit2 as E6,Inbox as j6,Loader2 as V6,Image as x6,Plus as C4,Search as D6}from"lucide-react";import{useEffect as S4,useMemo as y1,useState as k0}from"react";function n5(Y){if(!Y)return"";try{let q=JSON.parse(Y);if(!q.root||!q.root.children)return"";return Y4(q.root.children)}catch(q){if(typeof Y==="string"&&!Y.startsWith("{"))return Y;return""}}function Y4(Y){let q="";for(let W of Y){if(W.text)q+=W.text;else if(W.children)q+=Y4(W.children);if(W.type==="paragraph"||W.type==="heading"||W.type==="listitem")q+=" "}return q.trim()}import{atom as Z2,computed as H2}from"nanostores";import{nanoquery as w7}from"@nanostores/query";var[o5,j0,{invalidateKeys:qX,revalidateKeys:WX,mutateCache:ZX}]=w7({fetcher:(...Y)=>{let q=Y.join("");return j.get(q).json()}});var V0=Z2(null),B7=H2(V0,(Y)=>{if(!Y)return null;let q=new URLSearchParams;if(Y.page)q.set("page",Y.page.toString());if(Y.limit)q.set("limit",Y.limit.toString());if(Y.sort)q.set("sort",Y.sort);if(Y.filter)for(let[Z,J]of Object.entries(Y.filter))if(typeof J==="object"&&J!==null)for(let[H,G]of Object.entries(J))q.set(`${Z}[${H}]`,String(G));else q.set(`${Z}[equals]`,String(J));if(Y.search&&Y.searchField)q.set(`${Y.searchField}[like]`,`%${Y.search}%`);else if(Y.search)q.set("search",Y.search);if(Y.populate)q.set("populate",Y.populate);let W=q.toString();return`api/${Y.slug}${W?`?${W}`:""}`}),q4=o5([B7]),R7=Z2(null),P7=H2(R7,(Y)=>{if(!Y)return null;return`api/${Y.slug}/${Y.id}`}),GX=o5([P7]),QX=j0(async({data:Y,revalidate:q})=>{let{slug:W,id:Z,body:J}=Y,H=Z==="create"?"post":"patch",G=`api/${W}${Z==="create"?"":`/${Z}`}`,$=await j[H](G,{json:J}).json();return q(`api/${W}`),q(`api/${W}/${Z}`),$}),X2=Z2(null),T7=H2(X2,(Y)=>{if(!Y)return null;return`api/globals/${Y}`}),W4=o5([T7]),Z4=j0(async({data:Y,revalidate:q})=>{let{slug:W,body:Z}=Y,J=await j.patch(`api/globals/${W}`,{json:Z}).json();return q(`api/globals/${W}`),J});import{persistentAtom as M7}from"@nanostores/persistent";var a5=M7("opaca-column-visibility",{},{encode:JSON.stringify,decode:JSON.parse});function H4(Y,q){let W=a5.get(),Z=W[Y]||[],J=Z.includes(q)?Z.filter((H)=>H!==q):[...Z,q];a5.set({...W,[Y]:J})}function X4(Y,q,W){let Z=a5.get();if(Z[Y])return;let J=W&&W.length>0?W:q.filter((H)=>H.name).map((H)=>H.name);a5.set({...Z,[Y]:J})}F5();import{useStore as N7}from"@nanostores/react";import{Check as A7,ChevronDown as F7,Settings2 as y7}from"lucide-react";import{useEffect as O7,useRef as k7,useState as I7}from"react";import{jsxDEV as A5}from"react/jsx-dev-runtime";var J4=({slug:Y,fields:q})=>{let[W,Z]=I7(!1),J=k7(null),G=N7(a5)[Y]||[],$=q.filter((K)=>K.name);return O7(()=>{let K=(Q)=>{if(J.current&&!J.current.contains(Q.target))Z(!1)};return document.addEventListener("mousedown",K),()=>document.removeEventListener("mousedown",K)},[]),A5("div",{className:"opaca-column-toggle",ref:J,style:{position:"relative"},children:[A5("button",{type:"button",onClick:()=>Z(!W),className:"opaca-btn opaca-btn-outline",style:{display:"flex",alignItems:"center",gap:"0.5rem",padding:"0.5rem 0.75rem",fontSize:"0.875rem"},children:[A5(y7,{size:16},void 0,!1,void 0,this),"Columns",A5(F7,{size:14,style:{opacity:0.5,transform:W?"rotate(180deg)":"none",transition:"transform 0.2s"}},void 0,!1,void 0,this)]},void 0,!0,void 0,this),W&&A5("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:[A5("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),$.map((K)=>{let Q=G.includes(K.name);return A5("button",{type:"button",onClick:()=>H4(Y,K.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:Q?"var(--opaca-text)":"var(--opaca-text-dim)",cursor:"pointer",borderRadius:"calc(var(--opaca-radius) - 4px)",transition:"background 0.2s"},className:"hover-bg",children:[A5("div",{style:{width:"16px",height:"16px",display:"flex",alignItems:"center",justifyContent:"center",border:Q?"1px solid var(--opaca-primary)":"1px solid var(--opaca-border)",backgroundColor:Q?"var(--opaca-primary)":"transparent",borderRadius:"4px",color:"white"},children:Q&&A5(A7,{size:12,strokeWidth:3},void 0,!1,void 0,this)},void 0,!1,void 0,this),A5("span",{style:{flex:1},children:K.label||K.name},void 0,!1,void 0,this)]},K.name,!0,void 0,this)})]},void 0,!0,void 0,this),A5("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 A6,Save as F6,X as y6,Loader2 as O6,AlertCircle as k6}from"lucide-react";import{useEffect as I6,useState as a0}from"react";import{CodeNode as e8}from"@lexical/code";import{AutoLinkNode as Y6,LinkNode as q6}from"@lexical/link";import{ListItemNode as W6,ListNode as Z6}from"@lexical/list";import{MarkNode as H6}from"@lexical/mark";import{LexicalComposer as X6}from"@lexical/react/LexicalComposer";import{ContentEditable as J6}from"@lexical/react/LexicalContentEditable";import{LexicalErrorBoundary as z6}from"@lexical/react/LexicalErrorBoundary";import{HistoryPlugin as G6}from"@lexical/react/LexicalHistoryPlugin";import{LinkPlugin as Q6}from"@lexical/react/LexicalLinkPlugin";import{ListPlugin as K6}from"@lexical/react/LexicalListPlugin";import{OnChangePlugin as _6}from"@lexical/react/LexicalOnChangePlugin";import{RichTextPlugin as $6}from"@lexical/react/LexicalRichTextPlugin";import{HeadingNode as U6,QuoteNode as L6}from"@lexical/rich-text";import{useMemo as w6,useState as B6}from"react";import{DecoratorNode as g7}from"lexical";import{useLexicalComposerContext as b7}from"@lexical/react/LexicalComposerContext";import{useLexicalNodeSelection as C7}from"@lexical/react/useLexicalNodeSelection";import{$getNodeByKey as z4}from"lexical";import{Trash2 as S7}from"lucide-react";import{useCallback as h7,useEffect as G4,useRef as p7,useState as Q4}from"react";import{jsxDEV as M0,Fragment as v7}from"react/jsx-dev-runtime";function J2({src:Y,altText:q,nodeKey:W,width:Z,height:J}){let[H]=b7(),[G,$]=C7(W),[K,Q]=Q4(!1),U=p7(null),[_,X]=Q4(Z),w=h7(()=>{H.update(()=>{let B=z4(W);if(B)B.remove()})},[H,W]),L=(B)=>{B.preventDefault(),B.stopPropagation(),Q(!0)};return G4(()=>{if(!K)return;let B=(M)=>{if(U.current){let{left:R}=U.current.getBoundingClientRect(),O=Math.max(50,M.clientX-R);X(O)}},y=()=>{if(Q(!1),_!==void 0)H.update(()=>{let M=z4(W);if(M&&typeof M.setWidth==="function")M.setWidth(_)})};return document.addEventListener("mousemove",B),document.addEventListener("mouseup",y),()=>{document.removeEventListener("mousemove",B),document.removeEventListener("mouseup",y)}},[K,_,H,W]),G4(()=>{X(Z)},[Z]),M0("div",{role:"button",tabIndex:-1,className:`editor-image-wrapper ${G?"is-selected":""}`,onClick:(B)=>{B.preventDefault(),B.stopPropagation(),$(!G)},onKeyDown:(B)=>{if(B.key==="Enter"||B.key===" ")B.preventDefault(),$(!G)},style:{display:"inline-block",position:"relative",cursor:"default",lineHeight:0,zIndex:G?10:1},children:[M0("img",{ref:U,src:Y,alt:q,style:{width:_||(Z?`${Z}px`:"auto"),height:J?`${J}px`:"auto",maxWidth:"100%",display:"block"},className:"editor-image-img"},void 0,!1,void 0,this),G&&M0(v7,{children:[M0("button",{type:"button",className:"editor-image-resizer",onMouseDown:L,"aria-label":"Resize image"},void 0,!1,void 0,this),M0("button",{type:"button",className:"editor-image-delete",onClick:(B)=>{B.stopPropagation(),w()},"aria-label":"Delete image",children:M0(S7,{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 m7}from"react/jsx-dev-runtime";class x0 extends g7{__src;__altText;__height;__width;static getType(){return"image"}static clone(Y){return new x0(Y.__src,Y.__altText,Y.__height,Y.__width,Y.__key)}constructor(Y,q,W,Z,J){super(J);this.__src=Y,this.__altText=q,this.__height=W,this.__width=Z}exportJSON(){return{altText:this.__altText,height:this.__height,src:this.__src,type:"image",version:1,width:this.__width}}static importJSON(Y){let{altText:q,height:W,width:Z,src:J}=Y;return J0(J,q,W,Z)}createDOM(Y){let q=document.createElement("span");return q.className="editor-image",q}updateDOM(){return!1}setWidth(Y){let q=this.getWritable();q.__width=Y}setHeight(Y){let q=this.getWritable();q.__height=Y}decorate(){return m7(J2,{src:this.__src,altText:this.__altText,nodeKey:this.__key,width:this.__width,height:this.__height},void 0,!1,void 0,this)}}function J0(Y,q,W,Z){return new x0(Y,q,W,Z)}import{$createCodeNode as c7}from"@lexical/code";import{INSERT_ORDERED_LIST_COMMAND as d7,INSERT_UNORDERED_LIST_COMMAND as n7}from"@lexical/list";import{useLexicalComposerContext as o7}from"@lexical/react/LexicalComposerContext";import{LexicalTypeaheadMenuPlugin as a7,MenuOption as l7,useBasicTypeaheadTriggerMatch as i7}from"@lexical/react/LexicalTypeaheadMenuPlugin";import{$createHeadingNode as P1,$createQuoteNode as t7}from"@lexical/rich-text";import{$setBlocksType as y0}from"@lexical/selection";import{$getSelection as r0,$insertNodes as s7,$isRangeSelection as c0}from"lexical";import{Code as e7,Heading1 as Y8,Heading2 as q8,Image as W8,List as Z8,ListOrdered as H8,Quote as X8,Type as J8}from"lucide-react";import{useCallback as z8,useMemo as G8,useState as R4}from"react";import*as P4 from"react-dom";import{useStore as D0}from"@nanostores/react";import{ChevronRight as f7,File as $4,FileText as U4,FolderPlus as u7,Image as L4,Loader2 as w4,Upload as E7,X as j7}from"lucide-react";import V7,{useMemo as x7,useRef as D7,useState as B4}from"react";import{persistentAtom as z2}from"@nanostores/persistent";import{atom as G2}from"nanostores";var N0=z2("opaca-media-view-mode","grid"),A0=z2("opaca-media-selected-bucket","all"),w1=z2("opaca-bucket-colors",{},{encode:JSON.stringify,decode:JSON.parse}),z0=G2(""),B1=G2(""),G0=G2(1),F0=o5(["api/__system/assets",A0,z0,B1,G0],{fetcher:(Y,q,W,Z,J)=>{let H=new URLSearchParams({bucket:String(q),folder:String(W),search:String(Z),page:String(J),limit:"20"});return j.get(`${Y}?${H.toString()}`).json()}}),R1=(Y)=>{A0.set(Y),z0.set(""),G0.set(1)},h5=(Y)=>{z0.set(Y),G0.set(1)},K4=(Y)=>{B1.set(Y),G0.set(1)},Q2=(Y)=>{G0.set(Y)},_4=(Y,q)=>{let W=w1.get();w1.set({...W,[Y]:q})};import{jsxDEV as h,Fragment as r7}from"react/jsx-dev-runtime";var l5=({onSelect:Y,onClose:q,allowedmime_types:W,maxFileSize:Z,bucket:J="default"})=>{let{data:H,loading:G}=D0(F0),$=D0(A0),K=D0(z0),Q=D0(N0),U=D0(N5),[_,X]=B4(!1),[w,L]=B4(!1),B=D7(null),y=x7(()=>{return Object.keys(U?.storages||{})},[U?.storages]),M=H?.docs||[],R=H?.folders||[],O=async(F)=>{if(W&&!W.includes(F.type)){alert(`Invalid file type. Allowed: ${W.join(", ")}`);return}if(Z&&F.size>Z){alert(`File too large. Max size: ${Z/1024/1024}MB`);return}X(!0);let E=new FormData;E.append("file",F);try{let T=$==="all"?"default":$,A=await j.post(`api/__system/assets/upload?bucket=${T}&folder=${K}`,{body:E,onDownloadProgress:(b)=>{}}).json();X(!1),F0.revalidate(),Y({assetId:A.id,url:A.url||`${w5()}/api/assets/${A.id}/view`,filename:A.filename,mimeType:A.mimeType||A.mime_type||"",filesize:A.filesize})}catch(T){alert(`Upload failed: ${T instanceof Error?T.message:"Unknown error"}`),X(!1)}},m=(F)=>{if(F.preventDefault(),L(!1),F.dataTransfer.files&&F.dataTransfer.files.length>0&&F.dataTransfer.files[0])O(F.dataTransfer.files[0])},p=(F)=>{if(!F)return h($4,{size:40,className:"text-gray-400"},void 0,!1,void 0,this);if(F.startsWith("image/"))return h(L4,{size:40,className:"text-blue-400"},void 0,!1,void 0,this);if(F.startsWith("video/"))return h(U4,{size:40,className:"text-purple-400"},void 0,!1,void 0,this);if(F.includes("pdf"))return h(U4,{size:40,className:"text-red-400"},void 0,!1,void 0,this);return h($4,{size:40,className:"text-gray-400"},void 0,!1,void 0,this)};return h("div",{className:"asset-manager-overlay",children:h("div",{className:"asset-manager-container",children:[h("div",{className:"asset-manager-header",children:[h("div",{children:[h("h2",{children:"Media Library"},void 0,!1,void 0,this),h("div",{className:"asset-manager-breadcrumbs",children:[h("button",{type:"button",onClick:()=>h5(""),children:"Home"},void 0,!1,void 0,this),K.split("/").filter(Boolean).map((F,E,T)=>h(V7.Fragment,{children:[h(f7,{size:14,className:"breadcrumb-separator"},void 0,!1,void 0,this),h("button",{type:"button",onClick:()=>h5(T.slice(0,E+1).join("/")),children:F},void 0,!1,void 0,this)]},F||E,!0,void 0,this))]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),h("div",{className:"header-actions",children:[h(V5,{value:$,onValueChange:(F)=>R1(F),children:[h(x5,{className:"bucket-selector",children:h(D5,{placeholder:"Bucket"},void 0,!1,void 0,this)},void 0,!1,void 0,this),h(r5,{children:[h(y5,{value:"all",children:"All Buckets"},void 0,!1,void 0,this),h(L1,{},void 0,!1,void 0,this),h(U1,{children:"Storage"},void 0,!1,void 0,this),y.map((F)=>h(y5,{value:F,children:F.toUpperCase()},F,!1,void 0,this))]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),h("button",{type:"button",onClick:q,className:"close-button",children:h(j7,{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),h("button",{type:"button",onDragOver:(F)=>{F.preventDefault(),L(!0)},onDragLeave:()=>L(!1),onDrop:m,onClick:()=>!_&&B.current?.click(),"aria-label":"Upload file",className:`asset-manager-upload-zone ${w?"is-drag-active":""} ${_?"uploading":""}`,children:[h("input",{type:"file",ref:B,style:{display:"none"},accept:W?.join(","),onChange:(F)=>{if(F.target.files&&F.target.files.length>0&&F.target.files[0])O(F.target.files[0])}},void 0,!1,void 0,this),_?h("div",{className:"uploading-status",children:[h(w4,{className:"opaca-spin",size:24},void 0,!1,void 0,this),h("span",{className:"status-text",children:"Uploading..."},void 0,!1,void 0,this)]},void 0,!0,void 0,this):h(r7,{children:[h(E7,{size:24,className:"upload-icon"},void 0,!1,void 0,this),h("p",{className:"upload-prompt",children:["Drag & drop a file here, or ",h("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),h("div",{className:"asset-manager-grid-container",children:G?h("div",{className:"loading-assets",children:[h(w4,{className:"opaca-spin",size:32},void 0,!1,void 0,this),h("p",{children:"Loading assets..."},void 0,!1,void 0,this)]},void 0,!0,void 0,this):M.length===0&&R.length===0?h("div",{className:"no-assets",children:[h(L4,{size:48,className:"empty-icon"},void 0,!1,void 0,this),h("p",{children:"No assets found here."},void 0,!1,void 0,this)]},void 0,!0,void 0,this):h("div",{className:`asset-manager-grid mode-${Q}`,children:[R.map((F)=>h("button",{type:"button",className:"asset-manager-card folder-card",onClick:()=>h5(K?`${K}/${F.name}`:F.name),children:[h("div",{className:"asset-thumb",children:h(u7,{size:40,className:"folder-icon"},void 0,!1,void 0,this)},void 0,!1,void 0,this),h("div",{className:"asset-info",children:[h("span",{className:"filename",children:F.name},void 0,!1,void 0,this),h("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)),M.map((F)=>h("button",{type:"button",className:"asset-manager-card asset-card",onClick:()=>{let E=w5();Y({assetId:F.id,url:`${E}/api/assets/${F.id}/view`,filename:F.filename,mimeType:F.mimeType||F.mime_type||"",filesize:F.filesize})},children:[h("div",{className:"asset-thumb",children:(()=>{let E=F.mimeType||F.mime_type;return E?.startsWith("image/")?h("img",{src:`${w5()}/api/assets/${F.id}/view`,alt:F.filename},void 0,!1,void 0,this):p(E||"")})()},void 0,!1,void 0,this),h("div",{className:"asset-info",children:[h("span",{className:"filename",title:F.filename,children:F.filename},void 0,!1,void 0,this),h("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),h("div",{className:"selection-overlay",children:h("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 Q5,Fragment as Q8}from"react/jsx-dev-runtime";class p5 extends l7{title;icon;description;onSelect;constructor(Y,q){super(Y);this.title=Y,this.icon=q.icon,this.description=q.description,this.onSelect=q.onSelect}}function T4(){let[Y]=o7(),[q,W]=R4(null),[Z,J]=R4(!1),H=i7("/",{minLength:0}),G=(Q)=>{let U=Q.url||`${w5()}/api/assets/${Q.id||Q.assetId}/view`;Y.update(()=>{let _=J0(U,Q.filename||"Image");s7([_])}),J(!1)},$=G8(()=>{let Q=[new p5("Paragraph",{icon:Q5(J8,{size:18},void 0,!1,void 0,this),description:"Just start typing with plain text.",onSelect:()=>{Y.update(()=>{let U=r0();if(c0(U))y0(U,()=>P1("h1")),y0(U,()=>P1("h1"))})}}),new p5("Heading 1",{icon:Q5(Y8,{size:18},void 0,!1,void 0,this),description:"Large section heading.",onSelect:()=>{Y.update(()=>{let U=r0();if(c0(U))y0(U,()=>P1("h1"))})}}),new p5("Heading 2",{icon:Q5(q8,{size:18},void 0,!1,void 0,this),description:"Medium section heading.",onSelect:()=>{Y.update(()=>{let U=r0();if(c0(U))y0(U,()=>P1("h2"))})}}),new p5("Bullet List",{icon:Q5(Z8,{size:18},void 0,!1,void 0,this),description:"Create a simple bullet list.",onSelect:()=>{Y.dispatchCommand(n7,void 0)}}),new p5("Numbered List",{icon:Q5(H8,{size:18},void 0,!1,void 0,this),description:"Create a list with numbering.",onSelect:()=>{Y.dispatchCommand(d7,void 0)}}),new p5("Quote",{icon:Q5(X8,{size:18},void 0,!1,void 0,this),description:"Capture a quotation.",onSelect:()=>{Y.update(()=>{let U=r0();if(c0(U))y0(U,()=>t7())})}}),new p5("Code Block",{icon:Q5(e7,{size:18},void 0,!1,void 0,this),description:"Write code snippets.",onSelect:()=>{Y.update(()=>{let U=r0();if(c0(U))y0(U,()=>c7())})}}),new p5("Image",{icon:Q5(W8,{size:18},void 0,!1,void 0,this),description:"Insert an image from media library.",onSelect:()=>{J(!0)}})];if(!q)return Q;return Q.filter((U)=>U.title.toLowerCase().includes(q.toLowerCase()))},[Y,q]),K=z8((Q,U,_)=>{Y.update(()=>{if(U)U.remove();Q.onSelect(q||""),_()})},[Y,q]);return Q5(Q8,{children:[Q5(a7,{onQueryChange:W,onSelectOption:K,triggerFn:H,options:$,menuRenderFn:(Q,{selectedIndex:U,selectOptionAndCleanUp:_,setHighlightedIndex:X})=>Q.current&&$.length>0?P4.createPortal(Q5(w0,{className:"opaca-slash-menu",maxHeight:"300px",children:$.map((w,L)=>Q5("button",{className:`opaca-slash-menu-item ${U===L?"is-selected":""}`,onClick:()=>_(w),onMouseEnter:()=>X(L),children:[Q5("div",{className:"opaca-slash-menu-icon",children:w.icon},void 0,!1,void 0,this),Q5("div",{className:"opaca-slash-menu-text",children:[Q5("span",{className:"opaca-slash-menu-title",children:w.title},void 0,!1,void 0,this),Q5("span",{className:"opaca-slash-menu-desc",children:w.description},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},w.key,!0,void 0,this))},void 0,!1,void 0,this),Q.current):null},void 0,!1,void 0,this),Z&&Q5(l5,{bucket:"default",onClose:()=>J(!1),onSelect:G},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}import{useLexicalComposerContext as K8}from"@lexical/react/LexicalComposerContext";import{useEffect as _8}from"react";function M4({isEditable:Y}){let[q]=K8();return _8(()=>{q.setEditable(Y)},[q,Y]),null}import{TOGGLE_LINK_COMMAND as $8}from"@lexical/link";import{useLexicalComposerContext as U8}from"@lexical/react/LexicalComposerContext";import{$getSelection as L8,$insertNodes as w8,$isRangeSelection as B8,COMMAND_PRIORITY_CRITICAL as R8,FORMAT_TEXT_COMMAND as K2,SELECTION_CHANGE_COMMAND as P8}from"lexical";import{Bold as T8,Image as M8,Italic as N8,LinkIcon as A8,Strikethrough as F8}from"lucide-react";import{useCallback as y8,useEffect as _2,useRef as O8,useState as O0}from"react";import*as N4 from"react-dom";import{jsxDEV as P5,Fragment as k8}from"react/jsx-dev-runtime";function A4(){let[Y,q]=O0(!1),[W]=U8(),[Z,J]=O0(!1),[H,G]=O0(!1),[$,K]=O0(!1),[Q,U]=O0(!1),_=O8(null),[X,w]=O0({top:0,left:0}),L=y8(()=>{let y=L8();if(B8(y)){J(y.hasFormat("bold")),G(y.hasFormat("italic")),K(y.hasFormat("strikethrough"));let M=window.getSelection(),R=W.getRootElement();if(M!==null&&!M.isCollapsed&&R!==null&&R.contains(M.anchorNode)){let m=M.getRangeAt(0).getBoundingClientRect();w({top:m.top-45,left:m.left+m.width/2}),U(!0)}else U(!1)}else U(!1)},[W]);_2(()=>{return W.registerUpdateListener(({editorState:y})=>{y.read(()=>{L()})})},[W,L]),_2(()=>{return W.registerCommand(P8,(y)=>{return L(),!1},R8)},[W,L]),_2(()=>{let y=()=>{if(Q)L()};return window.addEventListener("resize",y),window.addEventListener("scroll",y),()=>{window.removeEventListener("resize",y),window.removeEventListener("scroll",y)}},[Q,L]);let B=(y)=>{let M=y.url||`${w5()}/api/assets/${y.id||y.assetId}/view`;W.update(()=>{let R=J0(M,y.filename||"Image");w8([R])}),q(!1)};if(!Q&&!Y)return null;return P5(k8,{children:[Q&&N4.createPortal(P5("div",{ref:_,className:"opaca-lexical-bubble-menu",style:{position:"fixed",top:X.top-(typeof window<"u"?window.scrollY:0),left:X.left,transform:"translateX(-50%)",zIndex:1000,pointerEvents:"auto"},children:[P5("button",{type:"button",onClick:()=>{W.dispatchCommand(K2,"bold")},className:`opaca-lexical-btn ${Z?"is-active":""}`,children:P5(T8,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),P5("button",{type:"button",onClick:()=>{W.dispatchCommand(K2,"italic")},className:`opaca-lexical-btn ${H?"is-active":""}`,children:P5(N8,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),P5("button",{type:"button",onClick:()=>{W.dispatchCommand(K2,"strikethrough")},className:`opaca-lexical-btn ${$?"is-active":""}`,children:P5(F8,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),P5("button",{type:"button",onClick:()=>{W.dispatchCommand($8,"https://")},className:"opaca-lexical-btn",children:P5(A8,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),P5("button",{type:"button",onClick:()=>q(!0),className:"opaca-lexical-btn",children:P5(M8,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),document.body),Y&&P5(l5,{bucket:"default",onClose:()=>q(!1),onSelect:B},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}import{$createCodeNode as I8}from"@lexical/code";import{TOGGLE_LINK_COMMAND as b8}from"@lexical/link";import{INSERT_ORDERED_LIST_COMMAND as C8,INSERT_UNORDERED_LIST_COMMAND as S8}from"@lexical/list";import{useLexicalComposerContext as h8}from"@lexical/react/LexicalComposerContext";import{$createHeadingNode as F4,$createQuoteNode as p8,$isHeadingNode as v8}from"@lexical/rich-text";import{$setBlocksType as T1}from"@lexical/selection";import{$getSelection as d0,$insertNodes as g8,$isRangeSelection as n0,COMMAND_PRIORITY_CRITICAL as m8,FORMAT_TEXT_COMMAND as $2,SELECTION_CHANGE_COMMAND as f8}from"lexical";import{Bold as u8,Code as E8,Heading1 as j8,Heading2 as V8,Image as x8,Italic as D8,Link as r8,List as c8,ListOrdered as d8,Quote as n8,Strikethrough as o8}from"lucide-react";import{useCallback as y4,useEffect as a8,useState as o0}from"react";import{jsxDEV as W5,Fragment as l8}from"react/jsx-dev-runtime";function O4(){let[Y,q]=o0(!1),[W]=h8(),[Z,J]=o0(!1),[H,G]=o0(!1),[$,K]=o0(!1),[Q,U]=o0("paragraph"),_=y4(()=>{let R=d0();if(n0(R)){J(R.hasFormat("bold")),G(R.hasFormat("italic")),K(R.hasFormat("strikethrough"));let O=R.anchor.getNode(),m=O.getKey()==="root"?O:O.getTopLevelElementOrThrow(),p=m.getKey();if(W.getElementByKey(p)!==null)if(v8(m)){let E=m.getTag();U(E)}else{let E=m.getType();U(E)}}},[W]);a8(()=>{return W.registerCommand(f8,(R)=>{return _(),!1},m8)},[W,_]);let X=(R)=>{if(Q!==R)W.update(()=>{let O=d0();if(n0(O))T1(O,()=>F4(R))});else W.update(()=>{let O=d0();if(n0(O))T1(O,()=>F4("h1"))})},w=()=>{if(Q!=="quote")W.update(()=>{let R=d0();if(n0(R))T1(R,()=>p8())})},L=()=>{if(Q!=="code")W.update(()=>{let R=d0();if(n0(R))T1(R,()=>I8())})},B=(R)=>{if(R==="bullet")W.dispatchCommand(S8,void 0);else W.dispatchCommand(C8,void 0)},y=y4(()=>{W.dispatchCommand(b8,"https://")},[W]);return W5(l8,{children:[W5("div",{className:"opaca-lexical-toolbar",children:[W5("button",{type:"button",onClick:()=>{W.dispatchCommand($2,"bold")},className:`opaca-lexical-btn ${Z?"is-active":""}`,children:W5(u8,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),W5("button",{type:"button",onClick:()=>{W.dispatchCommand($2,"italic")},className:`opaca-lexical-btn ${H?"is-active":""}`,children:W5(D8,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),W5("button",{type:"button",onClick:()=>{W.dispatchCommand($2,"strikethrough")},className:`opaca-lexical-btn ${$?"is-active":""}`,children:W5(o8,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),W5("div",{className:"opaca-lexical-divider"},void 0,!1,void 0,this),W5("button",{type:"button",onClick:()=>X("h1"),className:`opaca-lexical-btn ${Q==="h1"?"is-active":""}`,children:W5(j8,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),W5("button",{type:"button",onClick:()=>X("h2"),className:`opaca-lexical-btn ${Q==="h2"?"is-active":""}`,children:W5(V8,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),W5("button",{type:"button",onClick:()=>B("bullet"),className:`opaca-lexical-btn ${Q==="ul"?"is-active":""}`,children:W5(c8,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),W5("button",{type:"button",onClick:()=>B("number"),className:`opaca-lexical-btn ${Q==="ol"?"is-active":""}`,children:W5(d8,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),W5("button",{type:"button",onClick:w,className:`opaca-lexical-btn ${Q==="quote"?"is-active":""}`,children:W5(n8,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),W5("button",{type:"button",onClick:L,className:`opaca-lexical-btn ${Q==="code"?"is-active":""}`,children:W5(E8,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),W5("div",{className:"opaca-lexical-divider"},void 0,!1,void 0,this),W5("button",{type:"button",onClick:y,className:"opaca-lexical-btn",children:W5(r8,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),W5("button",{type:"button",onClick:()=>q(!0),className:"opaca-lexical-btn",children:W5(x8,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),Y&&W5(l5,{bucket:"default",onClose:()=>q(!1),onSelect:(R)=>{let O=R.url||`${w5()}/api/assets/${R.id||R.assetId}/view`;W.update(()=>{let m=J0(O,R.filename||"Image");g8([m])}),q(!1)}},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}import{useLexicalComposerContext as i8}from"@lexical/react/LexicalComposerContext";import{useEffect as t8,useRef as s8}from"react";function k4({value:Y}){let[q]=i8(),W=s8(!0);return t8(()=>{if(W.current){W.current=!1;return}if(U2(Y)){if(JSON.stringify(q.getEditorState().toJSON())!==Y)try{let H=q.parseEditorState(Y);q.setEditorState(H)}catch(H){console.error("Failed to parse editor state in ValueSyncPlugin:",H)}}},[q,Y]),null}import{jsxDEV as J5}from"react/jsx-dev-runtime";var R6={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 P6(){return J5("div",{className:"opaca-lexical-placeholder",children:'Press "/" for commands, or start typing...'},void 0,!1,void 0,this)}var U2=(Y)=>{if(!Y)return;let q;if(typeof Y==="string")q=Y.trim();else try{q=JSON.stringify(Y)}catch{return}if(q.startsWith("{")&&q.includes('"root"'))return q;return};function M1({value:Y,onChange:q,defaultMode:W="simple",disabled:Z,readOnly:J}){let[H,G]=B6(W),$=!Z&&!J,K=w6(()=>({namespace:"OpacaLexical",theme:R6,editable:$,nodes:[U6,Z6,W6,L6,e8,q6,Y6,H6,x0],onError:(U)=>{console.error(U)},editorState:U2(Y)}),[$]),Q=(U)=>{let _=JSON.stringify(U.toJSON());q(_)};return J5("div",{className:"opaca-lexical-wrapper",children:[$&&J5("div",{className:"opaca-lexical-modes",children:[J5("button",{type:"button",className:`opaca-btn ${H==="simple"?"opaca-btn-primary":"opaca-btn-outline"}`,onClick:()=>G("simple"),children:"Simple"},void 0,!1,void 0,this),J5("button",{type:"button",className:`opaca-btn ${H==="notion"?"opaca-btn-primary":"opaca-btn-outline"}`,onClick:()=>G("notion"),children:"Notion-like"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),J5("div",{className:`opaca-lexical-container mode-${H} ${!$?"is-readonly":""}`,children:J5(X6,{initialConfig:K,children:[H==="simple"&&$&&J5(O4,{},void 0,!1,void 0,this),H==="notion"&&$&&J5(A4,{},void 0,!1,void 0,this),J5("div",{className:"opaca-lexical-editor-inner",children:[J5($6,{contentEditable:J5(J6,{className:"opaca-lexical-content"},void 0,!1,void 0,this),placeholder:J5(P6,{},void 0,!1,void 0,this),ErrorBoundary:z6},void 0,!1,void 0,this),J5(_6,{onChange:Q,ignoreSelectionChange:!0},void 0,!1,void 0,this),J5(k4,{value:Y},void 0,!1,void 0,this),J5(M4,{isEditable:$},void 0,!1,void 0,this),J5(G6,{},void 0,!1,void 0,this),J5(K6,{},void 0,!1,void 0,this),J5(Q6,{},void 0,!1,void 0,this),J5(T4,{},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 o}from"react/jsx-dev-runtime";var T6=(Y)=>{let q=new Date,W=Math.floor((Y.getTime()-q.getTime())/1000),Z=new Intl.RelativeTimeFormat("en",{numeric:"auto"});if(Math.abs(W)<60)return Z.format(W,"second");let J=Math.floor(W/60);if(Math.abs(J)<60)return Z.format(J,"minute");let H=Math.floor(J/60);if(Math.abs(H)<24)return Z.format(H,"hour");let G=Math.floor(H/24);if(Math.abs(G)<30)return Z.format(G,"day");let $=Math.floor(G/30);if(Math.abs($)<12)return Z.format($,"month");return Z.format(Math.floor(G/365),"year")},M6=(Y)=>{if(typeof Y!=="string"||Y.length<10)return!1;return/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/.test(Y)||/^\d{4}-\d{2}-\d{2}$/.test(Y)&&!Number.isNaN(Date.parse(Y))},N6=(Y)=>{if(typeof Y!=="string")return!1;return/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(Y)||Y.length>20&&/^[a-zA-Z0-9_-]{20,}$/.test(Y)},N1=({data:Y,depth:q=0,isEditing:W,onChange:Z})=>{if(Y===null||Y===void 0)return o("span",{className:"opaca-text-muted",children:"None"},void 0,!1,void 0,this);if(Array.isArray(Y)){if(Y.length===0)return o("span",{className:"opaca-text-muted italic",children:"Empty"},void 0,!1,void 0,this);return o("div",{className:"opaca-detail-list",children:Y.map((H,G)=>{let $=Y[G];return o("div",{className:"opaca-detail-item-card",children:[$?.blockType&&o("div",{className:"opaca-detail-item-header",children:[o("span",{className:"opaca-badge",style:{background:"var(--opaca-primary)",color:"white"},children:$.blockType},void 0,!1,void 0,this),o("span",{style:{marginLeft:"auto",opacity:0.5},children:["#",G+1]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),o("div",{className:"opaca-detail-item-content",children:typeof $==="object"&&$!==null?o(N1,{data:$,depth:q+1,isEditing:W,onChange:(K)=>{let Q=[...Y];Q[G]=K,Z?.(Q)}},void 0,!1,void 0,this):W?o(C5,{value:String($),onChange:(K)=>{let Q=[...Y];Q[G]=K.target.value,Z?.(Q)}},void 0,!1,void 0,this):o("span",{className:"opaca-detail-value",children:String($)},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},$?.id||String(G),!0,void 0,this)})},void 0,!1,void 0,this)}let J=(H)=>{if(!H)return!1;if(typeof H==="object")return H!==null&&"root"in H;if(typeof H==="string"){let G=H.trim();if(!G.startsWith("{"))return!1;try{let $=JSON.parse(G);return $&&typeof $==="object"&&"root"in $}catch{return!1}}return!1};if(J(Y)&&q===0){if(W){let G=typeof Y==="object"?JSON.stringify(Y):Y;return o("div",{className:"opaca-detail-richtext-preview",children:o(M1,{value:G,onChange:($)=>{try{Z?.(JSON.parse($))}catch(K){Z?.($)}},readOnly:!1},void 0,!1,void 0,this)},void 0,!1,void 0,this)}let H=n5(typeof Y==="string"?Y:JSON.stringify(Y));return o("div",{className:"opaca-detail-value italic text-muted",children:H.length>150?`${H.slice(0,150)}...`:H||"(Empty RichText)"},void 0,!1,void 0,this)}if(typeof Y==="object"&&Y!==null){let H=Object.keys(Y).filter(($)=>$!=="blockType"&&$!=="id"&&$!=="_order"&&!$.startsWith("_"));if(H.length===0)return o("span",{className:"opaca-text-muted italic",children:"Empty Object"},void 0,!1,void 0,this);let G=Y.id;return o("div",{className:g("opaca-detail-grid",q>0&&"nested"),children:[G&&q===0&&o("div",{className:"opaca-detail-row",children:[o("span",{className:"opaca-detail-label",children:"ID"},void 0,!1,void 0,this),o("div",{className:"opaca-detail-value-container",children:o("span",{className:"opaca-detail-value monospace",children:G},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),H.map(($)=>{let K=Y[$],Q=$.replace(/([A-Z])/g," $1").replace(/^./,(U)=>U.toUpperCase());return o("div",{className:"opaca-detail-row",children:[o("span",{className:"opaca-detail-label",children:Q},void 0,!1,void 0,this),o("div",{className:"opaca-detail-value-container",children:J(K)?o("div",{className:"opaca-detail-value italic text-muted",children:(()=>{let U=n5(typeof K==="string"?K:JSON.stringify(K));return U.length>80?`${U.slice(0,80)}...`:U||"(Empty RichText)"})()},void 0,!1,void 0,this):typeof K==="object"&&K!==null?o(N1,{data:K,depth:q+1,isEditing:W,onChange:(U)=>{Z?.({...Y,[$]:U})}},void 0,!1,void 0,this):W?o(C5,{value:K===!0?"true":K===!1?"false":String(K??""),onChange:(U)=>{let _=U.target.value;if(_==="true")_=!0;if(_==="false")_=!1;Z?.({...Y,[$]:_})}},void 0,!1,void 0,this):o("div",{className:"opaca-detail-value",children:(()=>{if(typeof K==="boolean"||typeof K==="number"&&(K===0||K===1)&&/active|enabled|status|hidden|public|featured|verified|draft/i.test($)){let U=typeof K==="boolean"?K:K===1;return o("span",{className:g("boolean",U?"true":"false"),children:U?"Yes":"No"},void 0,!1,void 0,this)}if(typeof K==="string"){if(M6(K)){let U=new Date(K);if(!Number.isNaN(U.getTime()))return o("div",{className:"date",children:[o("span",{className:"absolute",children:U.toLocaleString(void 0,{dateStyle:"full",timeStyle:"short"})},void 0,!1,void 0,this),o("span",{className:"relative",children:T6(U)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}if(N6(K)||$.toLowerCase().includes("id"))return o("span",{className:"monospace",children:K},void 0,!1,void 0,this);if($.toLowerCase().includes("email")&&K.includes("@"))return o("span",{style:{color:"var(--opaca-primary)",textDecoration:"underline"},children:K},void 0,!1,void 0,this)}return String(K??"-")})()},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},$,!0,void 0,this)})]},void 0,!0,void 0,this)}return o("span",{className:"opaca-detail-value",children:String(Y)},void 0,!1,void 0,this)};import{useStore as b6}from"@nanostores/react";import{jsxDEV as Y5,Fragment as C6}from"react/jsx-dev-runtime";var A1=({open:Y,onOpenChange:q,title:W,description:Z,data:J,relationTo:H,id:G,onSave:$,field:K})=>{let[Q,U]=a0(!1),[_,X]=a0(J),[w,L]=a0(!1),[B,y]=a0(null),R=b6(N5)?.i18n,[O,m]=a0(R?.defaultLocale||"default");I6(()=>{if(!Y){U(!1);return}if(H&&G&&!J)L(!0),y(null),j.get(`api/${H}/${G}`).json().then((F)=>{X(F),L(!1)}).catch((F)=>{console.error("Failed to fetch details:",F),y("Failed to load details."),L(!1)});else X(J),L(!1),y(null);if(U(!1),R)m(R.defaultLocale)},[Y,H,G,J,R]);let p=()=>{if($)$(_);U(!1)};return Y5(c5,{open:Y,onOpenChange:q,children:Y5(d5,{onClose:()=>q(!1),className:"opaca-data-detail-sheet",children:Y5("div",{style:{display:"flex",flexDirection:"column",height:"100%"},children:[Y5(B0,{className:"opaca-sheet-header",children:Y5("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",width:"100%"},children:[Y5("div",{style:{display:"flex",flexDirection:"column",gap:"4px"},children:[Y5(R0,{className:"opaca-sheet-title",children:typeof W==="string"?W:String(W||"Details")},void 0,!1,void 0,this),(Z||G)&&Y5(P0,{className:"opaca-sheet-description",children:Z||(G?`ID: ${G}`:"")},void 0,!1,void 0,this)]},void 0,!0,void 0,this),$&&Y5("div",{style:{display:"flex",gap:"0.5rem",alignItems:"center"},children:[R&&R.locales.length>1&&Y5("div",{style:{display:"flex",borderRight:"1px solid var(--opaca-border)",paddingRight:"0.5rem",marginRight:"0.5rem",gap:"0.25rem"},children:R.locales.map((F)=>Y5(e,{variant:O===F?"default":"outline",size:"sm",onClick:()=>m(F),style:{height:"32px",fontSize:"12px"},children:F.toUpperCase()},F,!1,void 0,this))},void 0,!1,void 0,this),!Q?Y5(e,{variant:"outline",size:"sm",onClick:()=>U(!0),style:{height:"32px",gap:"4px"},children:[Y5(A6,{size:14},void 0,!1,void 0,this),"Edit"]},void 0,!0,void 0,this):Y5(C6,{children:[Y5(e,{variant:"ghost",size:"sm",onClick:()=>{X(J||_),U(!1)},style:{height:"32px",gap:"4px"},children:[Y5(y6,{size:14},void 0,!1,void 0,this),"Cancel"]},void 0,!0,void 0,this),Y5(e,{variant:"default",size:"sm",onClick:p,style:{height:"32px",gap:"4px"},children:[Y5(F6,{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),Y5("div",{style:{flex:1,minHeight:0,marginTop:"1.5rem"},children:w?Y5("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",height:"100%",gap:"1rem"},children:[Y5(O6,{className:"opaca-spin",size:24},void 0,!1,void 0,this),Y5("span",{className:"opaca-text-muted",children:"Loading details..."},void 0,!1,void 0,this)]},void 0,!0,void 0,this):B?Y5("div",{style:{padding:"3rem",textAlign:"center",color:"var(--opaca-error)"},children:[Y5(k6,{size:32,style:{margin:"0 auto 1rem"}},void 0,!1,void 0,this),Y5("p",{style:{fontWeight:500},children:B},void 0,!1,void 0,this),Y5(e,{variant:"outline",size:"sm",onClick:()=>q(!1),style:{marginTop:"1rem"},children:"Close"},void 0,!1,void 0,this)]},void 0,!0,void 0,this):Y5(w0,{style:{height:"100%"},children:Y5("div",{style:{paddingRight:"1rem",paddingBottom:"2rem"},children:Y5(N1,{data:_,isEditing:Q,onChange:X,label:K},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 i5 from"react";import{jsxDEV as v5}from"react/jsx-dev-runtime";var L2=i5.forwardRef(({className:Y,...q},W)=>v5("div",{className:"opaca-table-wrapper",children:v5("table",{ref:W,className:`opaca-new-table ${Y||""}`,...q},void 0,!1,void 0,this)},void 0,!1,void 0,this));L2.displayName="Table";var w2=i5.forwardRef(({className:Y,...q},W)=>v5("thead",{ref:W,className:`opaca-table-header ${Y||""}`,...q},void 0,!1,void 0,this));w2.displayName="TableHeader";var B2=i5.forwardRef(({className:Y,...q},W)=>v5("tbody",{ref:W,className:`opaca-table-body ${Y||""}`,...q},void 0,!1,void 0,this));B2.displayName="TableBody";var S6=i5.forwardRef(({className:Y,...q},W)=>v5("tfoot",{ref:W,className:`opaca-table-footer ${Y||""}`,...q},void 0,!1,void 0,this));S6.displayName="TableFooter";var F1=i5.forwardRef(({className:Y,...q},W)=>v5("tr",{ref:W,className:`opaca-table-row ${Y||""}`,...q},void 0,!1,void 0,this));F1.displayName="TableRow";var l0=i5.forwardRef(({className:Y,...q},W)=>v5("th",{ref:W,className:`opaca-table-head ${Y||""}`,...q},void 0,!1,void 0,this));l0.displayName="TableHead";var i0=i5.forwardRef(({className:Y,...q},W)=>v5("td",{ref:W,className:`opaca-table-cell ${Y||""}`,...q},void 0,!1,void 0,this));i0.displayName="TableCell";var h6=i5.forwardRef(({className:Y,...q},W)=>v5("caption",{ref:W,className:`opaca-table-caption ${Y||""}`,...q},void 0,!1,void 0,this));h6.displayName="TableCaption";import{useEffect as p6,useState as v6}from"react";function I4(Y,q){let[W,Z]=v6(Y);return p6(()=>{let J=setTimeout(()=>Z(Y),q||500);return()=>{clearTimeout(J)}},[Y,q]),W}import{jsxDEV as k,Fragment as r6}from"react/jsx-dev-runtime";function h4(Y,q=!1){if(!Y)return"-";let W=new Date(Y);if(Number.isNaN(W.getTime()))return String(Y);return q?W.toLocaleString():W.toLocaleDateString()}function p4({collection:Y}){let[q,W]=k0(1),[Z,J]=k0(10),[H,G]=k0(""),[$,K]=k0(""),[Q,U]=k0(null),[_,X]=k0({open:!1,title:"",data:null}),w=I4($,400),L=b4(a5),B=y1(()=>Y.fields.filter((A)=>A.name),[Y.fields]);S4(()=>{let A=typeof Y.admin==="object"?Y.admin?.defaultColumns:void 0;X4(Y.slug,B,A)},[Y.slug,B,typeof Y.admin==="object"?Y.admin?.defaultColumns:void 0]);let y=y1(()=>{let A=L[Y.slug];return A?B.filter((b)=>A.includes(b.name)):B},[L,Y.slug,B]);S4(()=>{let b=(typeof Y.admin==="object"&&Y.admin!==null?Y.admin.useAsTitle:void 0)||B.find((f)=>f.name==="title"||f.name==="name"||f.name==="slug")?.name||"id",S=Y.fields.filter((f)=>f.type==="relationship"&&f.displayField).map((f)=>f.name).join(",");V0.set({slug:Y.apiPath||Y.slug,page:q,limit:Z,sort:H,search:w,searchField:b,filter:Q!==null&&typeof Y.admin==="object"?Y.admin?.views?.[Q]?.filter:void 0,populate:S||void 0})},[Y.slug,Y.apiPath,Y.admin,B,q,Z,H,w,Q]);let{data:M,loading:R}=b4(q4),O=(A)=>{if(H===A)G(`-${A}`);else if(H===`-${A}`)G("");else G(A);W(1)},m=async(A)=>{if(!_.field||!_.docId)return;try{let b={[_.field]:A};await j.patch(`api/${Y.apiPath||Y.slug}/${_.docId}`,{json:b}).json();let S=V0.get();if(S)V0.set({...S,slug:S.slug});l("Document updated successfully","success"),X({..._,open:!1})}catch(b){console.error(b),l("Failed to update document","error")}},p=(A)=>{if(H===A)return k(g6,{size:14,style:{marginLeft:"4px",opacity:0.7}},void 0,!1,void 0,this);if(H===`-${A}`)return k(m6,{size:14,style:{marginLeft:"4px",opacity:0.7}},void 0,!1,void 0,this);return null},F=M?.docs||[],E=y1(()=>{if(typeof Y.timestamps==="object"&&Y.timestamps?.createdAt)return Y.timestamps.createdAt;return"createdAt"},[Y.timestamps]),T=y1(()=>{return Y.slug.startsWith("_")?Y.slug.replace(/^_/,""):Y.slug},[Y.slug]);return k("div",{className:`opaca-view-container ${R?"loading":""}`,children:[k("div",{className:"opaca-header",children:[k("div",{children:[k("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem"},children:[k("h1",{className:"opaca-title",children:Y.label||(Y.slug.startsWith("_")?Y.slug.replace(/^_+/,"").replace(/_/g," ").replace(/\b\w/g,(A)=>A.toUpperCase()):Y.slug.charAt(0).toUpperCase()+Y.slug.slice(1))},void 0,!1,void 0,this),M&&k("span",{className:"opaca-badge",children:[M.totalDocs," ",M.totalDocs===1?"document":"documents"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),k("p",{className:"opaca-subtitle",children:["Manage your ",Y.slug," entries."]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),k("div",{style:{display:"flex",gap:"0.75rem",alignItems:"center"},children:[k("div",{style:{position:"relative",width:"240px"},children:[k(D6,{size:16,style:{position:"absolute",left:"10px",top:"50%",transform:"translateY(-50%)",color:"var(--opaca-text-muted)"}},void 0,!1,void 0,this),k("input",{type:"text",className:"opaca-input",placeholder:"Search documents...",value:$,onChange:(A)=>{K(A.target.value),W(1)},style:{paddingLeft:"36px"}},void 0,!1,void 0,this)]},void 0,!0,void 0,this),k(J4,{slug:Y.slug,fields:B},void 0,!1,void 0,this),k(K5,{href:`/admin/collections/${T}/create`,className:"opaca-btn opaca-btn-primary",style:{textDecoration:"none"},children:[k(C4,{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 Y.admin==="object"&&Y.admin?.views&&Y.admin.views.length>0&&k("div",{style:{display:"flex",gap:"0.5rem",marginBottom:"1.25rem",overflowX:"auto",paddingBottom:"0.5rem"},children:[k("button",{type:"button",className:`opaca-btn ${Q===null?"opaca-btn-primary":"opaca-btn-outline"}`,onClick:()=>{U(null),W(1)},style:{padding:"0.4rem 1rem",fontSize:"0.875rem"},children:"All"},void 0,!1,void 0,this),Y.admin.views.map((A,b)=>k("button",{type:"button",className:`opaca-btn ${Q===b?"opaca-btn-primary":"opaca-btn-outline"}`,onClick:()=>{U(b),W(1)},style:{padding:"0.4rem 1rem",fontSize:"0.875rem"},children:A.name},A.name,!1,void 0,this))]},void 0,!0,void 0,this),k("div",{className:"opaca-table-container",children:[R&&k("div",{className:"opaca-loading-overlay",children:k(V6,{size:24,className:"opaca-spin"},void 0,!1,void 0,this)},void 0,!1,void 0,this),k(A1,{open:_.open,onOpenChange:(A)=>X({..._,open:A}),title:_.title,data:_.data,onSave:m,field:_.field},void 0,!1,void 0,this),F.length>0?k(r6,{children:[k(L2,{children:[k(w2,{children:k(F1,{children:[y.map((A)=>k(l0,{onClick:()=>O(A.name),style:{cursor:"pointer",userSelect:"none"},children:k("div",{style:{display:"flex",alignItems:"center"},children:[A.label||A.name,p(A.name)]},void 0,!0,void 0,this)},A.name,!1,void 0,this)),Y.timestamps&&k(l0,{onClick:()=>O("createdAt"),style:{cursor:"pointer",userSelect:"none"},children:k("div",{style:{display:"flex",alignItems:"center"},children:["Created At",p("createdAt")]},void 0,!0,void 0,this)},void 0,!1,void 0,this),k(l0,{style:{width:"50px"}},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),k(B2,{children:F.map((A)=>k(F1,{children:[y.map((b)=>{let S=A[b.name];return k(i0,{className:["richtext","json","group","relationship"].includes(b.type)?"opaca-cell-interactive":"",onClick:(f)=>{if(!["richtext","json","group","relationship"].includes(b.type))return;f.stopPropagation(),X({open:!0,title:b.label||b.name||"Details",data:S,field:b.name,docId:A.id})},children:b.type==="boolean"?S?k("span",{className:"opaca-badge",style:{color:"var(--opaca-success)"},children:"Yes"},void 0,!1,void 0,this):k("span",{className:"opaca-badge",style:{color:"var(--opaca-text-dim)"},children:"No"},void 0,!1,void 0,this):Y.slug==="_opaca_assets"&&b.name==="filename"?k("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem"},children:[k("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(A.mimeType||A.mime_type).startsWith("image/")?k("img",{src:`${w5()}/api/${Y.apiPath||Y.slug}/${A.id}/view`,style:{width:"100%",height:"100%",objectFit:"cover"},alt:""},void 0,!1,void 0,this):k(x6,{size:14,style:{opacity:0.5}},void 0,!1,void 0,this)})()},void 0,!1,void 0,this),k("span",{style:{fontWeight:500},children:String(S??"-")},void 0,!1,void 0,this)]},void 0,!0,void 0,this):b.type==="blocks"&&Array.isArray(S)?k("button",{type:"button",onClick:(f)=>{f.stopPropagation(),X({open:!0,title:b.label||b.name||"Blocks",data:S,field:b.name,docId:A.id})},className:"opaca-badge opaca-badge-interactive",style:{color:"var(--opaca-text-dim)"},children:[S.length," block",S.length!==1?"s":""]},void 0,!0,void 0,this):b.type==="relationship"?k("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem"},children:[(()=>{let f=Array.isArray(S)?S[0]:S;if(f&&typeof f==="object"&&f.filename)return k("div",{style:{width:"24px",height:"24px",borderRadius:"4px",overflow:"hidden",border:"1px solid var(--opaca-border)",flexShrink:0},children:k("img",{src:`${w5()}/api/_opaca_assets/${f.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 f=Array.isArray(S)?S[0]:S,C=f?.id||(typeof f==="string"?f:"");return k(K5,{href:`/admin/collections/${b.relationTo?.startsWith("_")?b.relationTo.replace(/^_/,""):b.relationTo||""}/${C}`,className:"opaca-relationship-chip opaca-relationship-interactive",style:{textDecoration:"none"},children:[k("div",{className:"opaca-relationship-dot"},void 0,!1,void 0,this),k("span",{className:"opaca-relationship-value",children:b.hasMany&&Array.isArray(S)?`${S.length} item${S.length!==1?"s":""}`:typeof f==="object"&&f!==null?f[b.displayField||"id"]||f.name||f.title||f.id||"[Object]":String(S??"-")},void 0,!1,void 0,this)]},void 0,!0,void 0,this)})()]},void 0,!0,void 0,this):b.type==="group"&&typeof S==="object"&&S!==null?k("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(S).length} keys }`},void 0,!1,void 0,this):b.type==="json"&&typeof S==="object"&&S!==null?k("span",{style:{color:"var(--opaca-text-dim)",fontFamily:"monospace",fontSize:"0.85em"},children:[JSON.stringify(S).slice(0,30),JSON.stringify(S).length>30?"...":""]},void 0,!0,void 0,this):b.type==="date"?k("span",{style:{color:"var(--opaca-text)",opacity:0.9},children:h4(S)},void 0,!1,void 0,this):typeof S==="object"&&S!==null?k("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):k("span",{style:{color:"var(--opaca-text)",opacity:0.9},children:b.type==="richtext"?n5(S).slice(0,30)+(n5(S).length>30?"...":""):typeof S==="string"&&S.length>30?`${S.slice(0,30)}...`:String(S??"-")},void 0,!1,void 0,this)},b.name,!1,void 0,this)}),Y.timestamps&&k(i0,{style:{color:"var(--opaca-text-muted)",fontSize:"12px"},children:h4(A[E],!0)},void 0,!1,void 0,this),k(i0,{children:k(K5,{href:`/admin/collections/${T}/${A.id}`,className:"opaca-btn opaca-btn-outline",style:{padding:"0.4rem"},title:"Edit Document",children:k(E6,{size:14},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},A.id,!0,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this),M&&k("div",{className:"opaca-pagination",style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginTop:"1rem"},children:[k("div",{className:"opaca-pagination-info",style:{color:"var(--opaca-text-muted)",fontSize:"0.875rem"},children:["Showing ",(M.page-1)*M.limit+1," to"," ",Math.min(M.page*M.limit,M.totalDocs)," of ",M.totalDocs," documents"]},void 0,!0,void 0,this),k("div",{style:{display:"flex",alignItems:"center",gap:"1.5rem"},children:[k("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem"},children:[k("span",{style:{fontSize:"0.875rem",color:"var(--opaca-text-muted)"},children:"Rows per page:"},void 0,!1,void 0,this),k("select",{value:Z,onChange:(A)=>{J(Number(A.target.value)),W(1)},className:"opaca-input",style:{padding:"0.25rem 0.5rem",height:"auto",width:"auto"},children:[k("option",{value:"10",children:"10"},void 0,!1,void 0,this),k("option",{value:"25",children:"25"},void 0,!1,void 0,this),k("option",{value:"50",children:"50"},void 0,!1,void 0,this),k("option",{value:"100",children:"100"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),k("div",{className:"opaca-pagination-actions",style:{display:"flex",gap:"0.5rem"},children:[k("button",{type:"button",className:"opaca-btn opaca-btn-outline",disabled:!M.hasPrevPage||R,onClick:()=>W(q-1),style:{padding:"0.4rem"},children:k(f6,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),k("button",{type:"button",className:"opaca-btn opaca-btn-outline",disabled:!M.hasNextPage||R,onClick:()=>W(q+1),style:{padding:"0.4rem"},children:k(u6,{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):!R?k("div",{className:"opaca-empty",children:[k("div",{className:"opaca-empty-icon",children:k(j6,{size:32},void 0,!1,void 0,this)},void 0,!1,void 0,this),k("h3",{style:{fontSize:"1.125rem",fontWeight:"600"},children:"No documents found"},void 0,!1,void 0,this),k("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),k(K5,{href:`/admin/collections/${T}/create`,className:"opaca-btn opaca-btn-primary",style:{textDecoration:"none",marginTop:"0.5rem"},children:[k(C4,{size:18},void 0,!1,void 0,this),"Create First ",Y.label||Y.slug]},void 0,!0,void 0,this)]},void 0,!0,void 0,this):k("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 c6,ArrowUpRight as d6,Database as n6}from"lucide-react";import{jsxDEV as d}from"react/jsx-dev-runtime";function v4({config:Y,user:q}){let W=Y.collections.filter((Z)=>!Z.slug.startsWith("_"));return d("div",{children:[d("div",{className:"opaca-header",style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"2rem"},children:[d("div",{children:[d("h1",{className:"opaca-title",style:{marginBottom:"0.25rem"},children:Y.appName||"OpacaCMS"},void 0,!1,void 0,this),d("p",{className:"opaca-subtitle",children:"Overview of your content management system"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),q&&d("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:[d("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:q.name.charAt(0).toUpperCase()},void 0,!1,void 0,this),d("div",{style:{lineHeight:"1.3"},children:[d("div",{style:{fontSize:"0.875rem",fontWeight:"600",color:"var(--opaca-text)"},children:q.name},void 0,!1,void 0,this),d("div",{style:{fontSize:"0.75rem",color:"var(--opaca-text-dim)"},children:q.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),d("div",{className:"opaca-grid",style:{marginBottom:"2.5rem"},children:[d("div",{className:"opaca-card",children:[d("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem",marginBottom:"0.75rem"},children:[d("div",{style:{padding:"0.5rem",background:"var(--opaca-primary-glow)",color:"var(--opaca-accent)",borderRadius:"var(--opaca-radius)"},children:d(n6,{size:18},void 0,!1,void 0,this)},void 0,!1,void 0,this),d("div",{children:[d("div",{style:{fontSize:"1.25rem",fontWeight:"600",lineHeight:"1.2"},children:W.length},void 0,!1,void 0,this),d("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),d("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),d("div",{className:"opaca-card",children:[d("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem",marginBottom:"0.75rem"},children:[d("div",{style:{padding:"0.5rem",background:"rgba(52, 211, 153, 0.1)",color:"var(--opaca-success)",borderRadius:"var(--opaca-radius)"},children:d(c6,{size:18},void 0,!1,void 0,this)},void 0,!1,void 0,this),d("div",{children:[d("div",{style:{fontSize:"1.25rem",fontWeight:"600",lineHeight:"1.2"},children:"Online"},void 0,!1,void 0,this),d("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),d("p",{style:{fontSize:"0.75rem",color:"var(--opaca-text-muted)"},children:["Hono-powered API on ",Y.serverURL||"localhost","."]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),d("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),d("div",{className:"opaca-grid",children:W.filter((Z)=>!Z.hidden).sort((Z,J)=>Z.admin===J.admin?0:Z.admin?-1:1).map((Z)=>{let J=Z.label||Z.slug.replace(/^_+/,"").replace(/_/g," ").replace(/\b\w/g,(H)=>H.toUpperCase());return d(K5,{href:`/admin/collections/${Z.slug}`,className:"opaca-card",style:{textDecoration:"none",color:"inherit",cursor:"pointer"},children:[d("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:"0.25rem"},children:[d("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem"},children:[d("span",{style:{fontWeight:"500",fontSize:"0.875rem"},children:J},void 0,!1,void 0,this),Z.admin&&d("div",{style:{width:"5px",height:"5px",borderRadius:"50%",backgroundColor:"var(--opaca-accent)",opacity:0.8,boxShadow:"0 0 5px var(--opaca-accent)"},title:Z.slug==="_opaca_assets"?"System Assets Registry":"Universal Collection"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),d(d6,{size:14,color:"var(--opaca-text-dim)"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),d("div",{style:{fontSize:"0.75rem",color:"var(--opaca-text-muted)"},children:[Z.fields.length," fields"]},void 0,!0,void 0,this)]},Z.slug,!0,void 0,this)})},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}import{useStore as P2}from"@nanostores/react";import{useForm as Tq}from"@tanstack/react-form";import{AlertCircle as Mq,ArrowLeft as JY,Loader2 as T2,Save as zY,Trash2 as Nq,History as Aq}from"lucide-react";import{useEffect as Fq,useMemo as GY,useState as QY}from"react";F5();import Xq,{useEffect as Jq,useRef as zq}from"react";import{Plus as o6,Trash2 as a6}from"lucide-react";var O5=(Y)=>Y.charAt(0).toUpperCase()+Y.slice(1);import{jsxDEV as M5}from"react/jsx-dev-runtime";var g4=({name:Y,label:q,fields:W=[],value:Z=[],onChange:J,disabled:H,readOnly:G,renderField:$})=>{let K=()=>{let X=Array.isArray(Z)?Z:[],w={};W.forEach((L)=>{if(L.name)if(L.defaultValue!==void 0)w[L.name]=L.defaultValue;else if(L.type==="boolean")w[L.name]=!1;else if(L.type==="number")w[L.name]=0;else if(L.type==="relationship"&&L.hasMany)w[L.name]=[];else if(L.type==="blocks")w[L.name]=[];else if(L.type==="array")w[L.name]=[];else w[L.name]=""}),J([...X,w])},Q=(X)=>{let L=[...Array.isArray(Z)?Z:[]];L.splice(X,1),J(L)},U=(X,w,L)=>{let y=[...Array.isArray(Z)?Z:[]];y[X]={...y[X],[w]:L},J(y)},_=(X,w)=>{let B=[...Array.isArray(Z)?Z:[]];B[X]=w,J(B)};return M5("div",{className:"opaca-array-field",children:[M5("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"0.75rem"},children:M5("label",{htmlFor:Y,className:"opaca-label",style:{marginBottom:0},children:q||O5(Y)},void 0,!1,void 0,this)},void 0,!1,void 0,this),M5("div",{style:{display:"flex",flexDirection:"column",gap:"1rem"},children:[(Array.isArray(Z)?Z:[]).map((X,w)=>M5("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:[M5("div",{style:{display:"flex",justifyContent:"flex-end",marginBottom:"0.5rem"},children:!H&&!G&&M5(e,{type:"button",variant:"ghost",size:"icon",onClick:()=>Q(w),style:{color:"var(--opaca-text-dim)",height:"24px",width:"24px"},children:M5(a6,{size:14},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this),M5("div",{style:{display:"flex",flexDirection:"column",gap:"1rem"},children:W.map((L,B)=>M5("div",{className:"array-field-item",children:$(L,L.name?X[L.name]:X,(y)=>{if(L.name)U(w,L.name,y);else _(w,y)})},L.name||B,!1,void 0,this))},void 0,!1,void 0,this)]},X||w,!0,void 0,this)),!H&&!G&&M5(e,{type:"button",variant:"outline",size:"sm",onClick:K,style:{display:"flex",alignItems:"center",gap:"6px",fontSize:"0.75rem",width:"fit-content"},children:[M5(o6,{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 l6,Trash2 as i6}from"lucide-react";import{jsxDEV as L5}from"react/jsx-dev-runtime";var m4=({name:Y,label:q,blocks:W,value:Z=[],onChange:J,disabled:H,readOnly:G,renderField:$})=>{let K=(_)=>{let X=Array.isArray(Z)?Z:[],w=W.find((B)=>B.slug===_),L={blockType:_};if(w)w.fields.forEach((B)=>{if(B.name)if(B.defaultValue!==void 0)L[B.name]=B.defaultValue;else if(B.type==="boolean")L[B.name]=!1;else if(B.type==="number")L[B.name]=0;else if(B.type==="relationship"&&B.hasMany)L[B.name]=[];else if(B.type==="blocks")L[B.name]=[];else L[B.name]=""});J([...X,L])},Q=(_)=>{let w=[...Array.isArray(Z)?Z:[]];w.splice(_,1),J(w)},U=(_,X,w)=>{let B=[...Array.isArray(Z)?Z:[]];B[_]={...B[_],[X]:w},J(B)};return L5(x1,{label:q||Y,className:"opaca-blocks-field",children:L5("div",{style:{display:"flex",flexDirection:"column",gap:"24px"},children:[(Array.isArray(Z)?Z:[]).map((_,X)=>{let w=W.find((L)=>L.slug===_.blockType);if(!w)return null;return L5("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:[L5("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"1.25rem",borderBottom:"1px solid var(--opaca-border)",paddingBottom:"0.75rem"},children:[L5("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[L5("div",{style:{width:"8px",height:"8px",borderRadius:"50%",backgroundColor:"var(--opaca-primary)"}},void 0,!1,void 0,this),L5("h4",{style:{margin:0,fontSize:"0.8125rem",fontWeight:600,color:"var(--opaca-text)"},children:w.label||O5(w.slug)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),!H&&!G&&L5(e,{type:"button",variant:"ghost",size:"icon",onClick:()=>Q(X),style:{color:"var(--opaca-text-dim)",height:"24px",width:"24px"},children:L5(i6,{size:14},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),L5("div",{style:{display:"flex",flexDirection:"column",gap:"1.25rem"},children:w.fields.map((L)=>L5("div",{className:"block-field-item",children:$(L,_[L.name],(B)=>U(X,L.name,B))},L.name,!1,void 0,this))},void 0,!1,void 0,this)]},`${_.blockType}-${X}`,!0,void 0,this)}),!H&&!G&&L5("div",{style:{marginTop:"0.5rem",padding:"1.25rem",border:"1px dashed var(--opaca-border)",borderRadius:"var(--opaca-radius-lg)",textAlign:"center"},children:[L5("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),L5("div",{style:{display:"flex",flexWrap:"wrap",gap:"0.75rem",justifyContent:"center"},children:W.map((_)=>L5(e,{type:"button",variant:"outline",size:"sm",onClick:()=>K(_.slug),style:{display:"flex",alignItems:"center",gap:"6px",fontSize:"0.75rem"},children:[L5(l6,{size:12},void 0,!1,void 0,this),_.label||O5(_.slug)]},_.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{Globe as t6}from"lucide-react";import{jsxDEV as t0}from"react/jsx-dev-runtime";var H5=({name:Y,label:q,required:W,localized:Z,htmlFor:J,suffix:H})=>{return t0("label",{className:"opaca-label",htmlFor:J||`field-${Y}`,children:[t0("span",{style:{display:"inline-flex",alignItems:"center",gap:"0.5rem"},children:[q||O5(Y),H&&H,Z&&t0("span",{title:"Localized Field",style:{display:"inline-flex",alignItems:"center",opacity:0.5,color:"var(--opaca-accent)",marginLeft:"2px"},children:t0(t6,{size:11,strokeWidth:2.5},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),W&&t0("span",{style:{color:"var(--opaca-error)",marginLeft:"4px"},children:"*"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import{jsxDEV as t5}from"react/jsx-dev-runtime";var f4=({name:Y,label:q,value:W,onChange:Z,required:J,localized:H,disabled:G,readOnly:$,error:K,renderType:Q="switch"})=>{let U=G||$;return t5("div",{className:"opaca-form-group",children:[t5(H5,{name:Y,label:q,required:J,localized:H,htmlFor:`field-${Y}`},void 0,!1,void 0,this),t5("label",{className:"opaca-switch",children:[t5("input",{id:`field-${Y}`,type:"checkbox",checked:!!W,disabled:U,onChange:(_)=>Z(_.target.checked)},void 0,!1,void 0,this),t5("div",{className:"opaca-switch-track",children:t5("div",{className:"opaca-switch-thumb"},void 0,!1,void 0,this)},void 0,!1,void 0,this),t5("span",{className:"opaca-switch-label",style:{minWidth:"60px"},children:W?"Enabled":"Disabled"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),K&&t5("span",{className:"opaca-field-error",children:K},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import{jsxDEV as s0}from"react/jsx-dev-runtime";var u4=({label:Y,fields:q,parentData:W,disabled:Z,readOnly:J,options:H,onChange:G,renderField:$})=>{let K=(_,X)=>{return X.split(".").reduce((w,L)=>w?.[L],_)},Q=(_,X)=>{if(!_.includes("{{"))return K(X,_);return _.replace(/\{\{(.+?)\}\}/g,(w,L)=>{let B=K(X,L.trim());return B!==void 0&&B!==null?String(B):""})},U=H?.useAsTitle?Q(H.useAsTitle,W):void 0;return s0(r1,{defaultOpen:!H?.initiallyCollapsed,className:"opaca-collapsible-field",disabled:Z,children:[s0(c1,{className:"opaca-collapsible-field-trigger",children:U||Y||"Section"},void 0,!1,void 0,this),s0(d1,{children:s0("div",{style:{padding:"0",display:"flex",flexDirection:"column",gap:"1.25rem"},children:(q||[]).map((_,X)=>s0("div",{className:"collapsible-field-item",children:$(_,_.name?W?.[_.name]:void 0,(w)=>_.name&&G(_.name,w))},_.name||`collapsible-item-${X}`,!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 O1}from"react/jsx-dev-runtime";var E4=({name:Y,label:q,value:W,onChange:Z,required:J,localized:H,disabled:G,readOnly:$,error:K})=>{let Q=W?new Date(W).toISOString().split("T")[0]:"";return O1("div",{className:"opaca-form-group",children:[O1(H5,{name:Y,label:q,required:J,localized:H,htmlFor:`field-${Y}`},void 0,!1,void 0,this),O1("input",{id:`field-${Y}`,type:"date",className:`opaca-input ${K?"error":""}`,value:Q,readOnly:$,disabled:G,onChange:(U)=>Z(U.target.value),required:J},void 0,!1,void 0,this),K&&O1("span",{className:"opaca-field-error",children:K},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import{useEffect as j4,useState as e0}from"react";import{jsxDEV as D,Fragment as s6}from"react/jsx-dev-runtime";var V4=({name:Y,label:q,value:W,onChange:Z,options:J,disabled:H,readOnly:G,bucket:$="default"})=>{let[K,Q]=e0(!1),[U,_]=e0(null),[X,w]=e0(!1),[L,B]=e0(null),[y,M]=e0(null),R=H||G,O=typeof W==="string"?W:W?.assetId;j4(()=>{if(O&&(!W||typeof W==="string"||!W.filename))w(!0),j.get(`api/assets/${O}`).json().then((T)=>{_(T)}).catch((T)=>{console.error("Failed to fetch asset metadata",T)}).finally(()=>{w(!1)});else if(W&&typeof W==="object"&&W.filename)_(W);else _(null)},[O,W]),j4(()=>{return()=>{if(L?.url)URL.revokeObjectURL(L.url)}},[L]);let m=async(T)=>{if(T.preventDefault(),R)return;let A=T.dataTransfer.files[0];if(!A)return;if(J?.allowedmime_types&&!J.allowedmime_types.includes(A.type)){M(`Invalid file type. Allowed: ${J.allowedmime_types.join(", ")}`);return}if(J?.maxFileSize&&A.size>J.maxFileSize){M(`File too large. Max size: ${J.maxFileSize/1024/1024}MB`);return}let b=URL.createObjectURL(A);B({url:b,file:A,progress:0}),M(null);let S=new FormData;S.append("file",A);try{let f=await j.post(`api/__system/assets/upload?bucket=${$}`,{body:S}).json(),C=f.id||f.assetId;B(null),Z(C)}catch(f){B(null),M(f.message)}},p=()=>{if(R)return;Z(null)},F=(T,A)=>{if(R)return;let b=typeof W==="object"?W.meta||{}:{};Z({assetId:O,meta:{...b,[T]:A}})},E=(T)=>{if(!T)return"";if(T.url)return T.url;return`${w5()}/api/assets/${T.id||T.assetId}/view`};return D("div",{className:`file-field-container ${R?"is-restricted":""}`,onDragOver:(T)=>!R&&T.preventDefault(),onDrop:m,children:[D("div",{className:"file-field-label-row",children:[D("label",{children:q||Y},void 0,!1,void 0,this),y&&D("span",{className:"upload-error",children:y},void 0,!1,void 0,this)]},void 0,!0,void 0,this),L?D("div",{className:"file-field-optimistic-card",children:D("div",{className:"optimistic-info",children:[L.file.type.startsWith("image/")?D("img",{src:L.url,alt:"Uploading..."},void 0,!1,void 0,this):D("div",{className:"file-icon-placeholder",children:D("span",{children:"FILE"},void 0,!1,void 0,this)},void 0,!1,void 0,this),D("div",{className:"optimistic-details",children:[D("span",{className:"filename",children:L.file.name},void 0,!1,void 0,this),D("span",{className:"progress-text",children:"Uploading..."},void 0,!1,void 0,this),D("div",{className:"progress-bar-bg",children:D("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):U?D(s6,{children:[D("div",{className:"file-field-asset-card",children:[D("div",{className:"file-field-asset-info",children:[D("div",{className:"asset-preview",children:(()=>{let T=U.mimeType||U.mime_type;if(T?.startsWith("image/"))return D("img",{src:E(U),alt:U.filename},void 0,!1,void 0,this);return D("div",{className:"file-icon-placeholder",children:D("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),D("div",{className:"asset-details",children:[D("span",{className:"filename",title:U.filename,children:U.filename},void 0,!1,void 0,this),D("span",{className:"filesize",children:U.filesize?`${(U.filesize/1024).toFixed(1)} KB`:"..."},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),!R&&D("div",{className:"asset-actions",children:[D("button",{type:"button",onClick:()=>Q(!0),className:"replace-button",children:"Replace"},void 0,!1,void 0,this),D("button",{type:"button",onClick:p,className:"remove-button",children:"Remove"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),J?.metaFields&&J.metaFields.length>0&&D("div",{className:"file-field-metadata",children:[D("h4",{children:"Contextual Metadata"},void 0,!1,void 0,this),J.metaFields.map((T)=>D("div",{className:"metadata-field",children:[D("label",{htmlFor:T.name,children:[T.label||T.name," ",T.required&&D("span",{className:"required",children:"*"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),T.type==="textarea"?D("textarea",{id:T.name,rows:3,value:(W?.meta||{})[T.name]||"",onChange:(A)=>F(T.name,A.target.value),readOnly:G,disabled:H,placeholder:R?"":`Enter ${T.label?.toLowerCase()||T.name}...`},void 0,!1,void 0,this):D("input",{type:T.type==="number"?"number":"text",value:(W?.meta||{})[T.name]||"",onChange:(A)=>F(T.name,T.type==="number"?Number(A.target.value):A.target.value),readOnly:G,disabled:H,placeholder:R?"":`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):X?D("div",{className:"file-field-optimistic-card",children:D("div",{className:"status-text",children:"Loading asset details..."},void 0,!1,void 0,this)},void 0,!1,void 0,this):D("button",{type:"button",onClick:()=>!R&&Q(!0),disabled:R,className:`file-field-empty-button ${R?"disabled":""}`,children:[D("svg",{fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:D("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),D("span",{children:R?"No file selected":"Drag a file here or click to select"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),K&&!R&&D(l5,{bucket:$,onClose:()=>Q(!1),onSelect:(T)=>{if(!R)Z(T.assetId),Q(!1)},allowedmime_types:J?.allowedmime_types,maxFileSize:J?.maxFileSize},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import{jsxDEV as R2}from"react/jsx-dev-runtime";var x4=({name:Y,label:q,fields:W,value:Z,onChange:J,disabled:H,readOnly:G,renderField:$})=>{let K=(Q,U)=>{J({...Z||{},[Q]:U})};return R2(n1,{label:q||Y,className:"opaca-group-field",children:R2("div",{className:"opaca-group-fields-container",style:{display:"flex",flexDirection:"column",gap:"16px"},children:(W||[]).map((Q,U)=>R2("div",{className:"group-field-item",children:$(Q,Q.name?Z?.[Q.name]:void 0,(_)=>Q.name&&K(Q.name,_))},Q.name||`group-item-${U}`,!1,void 0,this))},void 0,!1,void 0,this)},void 0,!1,void 0,this)};import{jsxDEV as D4}from"react/jsx-dev-runtime";var r4=({name:Y,label:q,collection:W,value:Z,on:J})=>{return D4("div",{className:"opaca-form-group",children:D4(o1,{label:q||Y,collection:W,on:J},void 0,!1,void 0,this)},void 0,!1,void 0,this)};import{jsxDEV as k1}from"react/jsx-dev-runtime";var c4=({name:Y,label:q,value:W,onChange:Z,required:J,localized:H,disabled:G,readOnly:$,placeholder:K,error:Q})=>{return k1("div",{className:"opaca-form-group",children:[k1(H5,{name:Y,label:q,required:J,localized:H,htmlFor:`field-${Y}`},void 0,!1,void 0,this),k1("input",{id:`field-${Y}`,type:"number",className:`opaca-input ${Q?"error":""}`,value:W??"",readOnly:$,disabled:G,onChange:(U)=>Z(U.target.valueAsNumber||0),placeholder:K||`Enter ${q||Y}...`,required:J},void 0,!1,void 0,this),Q&&k1("span",{className:"opaca-field-error",children:Q},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import{jsxDEV as s5}from"react/jsx-dev-runtime";var d4=({name:Y,label:q,value:W,onChange:Z,choices:J,required:H,localized:G,disabled:$,readOnly:K,error:Q})=>{let U=(J||[]).map((_)=>typeof _==="string"?{label:_,value:_}:_);return s5("div",{className:"opaca-form-group",children:[s5(H5,{name:Y,label:q,required:H,localized:G},void 0,!1,void 0,this),s5(a1,{value:W,onValueChange:Z,disabled:$||K,name:Y,className:"opaca-radio-field-group",children:s5("div",{style:{display:"flex",flexDirection:"column",gap:"8px",padding:"8px 0"},children:U.map((_)=>s5("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[s5(l1,{value:_.value,id:`radio-${Y}-${_.value}`},void 0,!1,void 0,this),s5(j5,{htmlFor:`radio-${Y}-${_.value}`,style:{cursor:$||K?"not-allowed":"pointer"},children:_.label},void 0,!1,void 0,this)]},_.value,!0,void 0,this))},void 0,!1,void 0,this)},void 0,!1,void 0,this),Q&&s5("span",{className:"opaca-field-error",children:Q},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import{Check as e6,Info as n4,Loader2 as Yq,Search as qq,X as o4,Link as Wq}from"lucide-react";import{useCallback as Zq,useEffect as a4,useState as Y1}from"react";import{jsxDEV as V,Fragment as l4}from"react/jsx-dev-runtime";var i4=({name:Y,label:q,relationTo:W,value:Z,onChange:J,required:H,localized:G,disabled:$,readOnly:K,error:Q,displayField:U,hasMany:_})=>{let[X,w]=Y1(!1),[L,B]=Y1([]),[y,M]=Y1(!1),[R,O]=Y1(""),[m,p]=Y1({open:!1,id:""}),F=Zq(async()=>{M(!0);try{let C=await j.get(`api/${W}`).json(),I=C.docs||C;B(Array.isArray(I)?I:[])}catch(C){console.error("Failed to fetch relation items:",C)}finally{M(!1)}},[W]);a4(()=>{if(X&&L.length===0)F()},[X,L.length,F]),a4(()=>{(async()=>{if(!Z)return;let I=[];if(Array.isArray(Z))for(let v of Z){let n=typeof v==="object"?v.id:v;if(n&&!L.find((t)=>String(t.id)===String(n)))I.push(String(n))}else{let v=typeof Z==="object"?Z.id:Z;if(v&&!L.find((n)=>String(n.id)===String(v)))I.push(String(v))}if(I.length>0)try{let v=I.map((t)=>j.get(`api/${W}/${t}`).json()),n=await Promise.all(v);B((t)=>{let s=[...t];for(let N of n){let x=N.doc||N;if(x?.id&&!s.find((z5)=>String(z5.id)===String(x.id)))s.push(x)}return s})}catch(v){console.error("Failed to resolve relationship labels:",v)}})()},[Z,W]);let E=(C)=>{if(_||Array.isArray(Z)){let I=Array.isArray(Z)?Z:[],v=String(C),n=I.map((s)=>typeof s==="object"&&s!==null?String(s.id):String(s)),t=n.includes(v)?n.filter((s)=>s!==v):[...n,v];J(t)}else J(String(C)===String(Z)?null:String(C)),w(!1)},T=(C)=>{if(_||Array.isArray(Z))return(Array.isArray(Z)?Z:[]).some((v)=>typeof v==="object"&&v!==null?String(v.id)===String(C):String(v)===String(C));return typeof Z==="object"&&Z!==null?String(Z?.id)===String(C):String(Z)===String(C)},A=(C)=>{if(!C)return"";return C[U||""]||C.name||C.title||C.id||""},b=(C)=>{let I=typeof C==="object"&&C!==null?C.id:C,v=L.find((s)=>String(s.id)===String(I)),n=typeof C==="object"&&C!==null?C:v,t=n?A(n):String(I);return typeof t==="string"&&t.length>24?`${t.slice(0,24)}…`:String(t)},S=L.filter((C)=>{return A(C).toLowerCase().includes(R.toLowerCase())}),f=Array.isArray(Z)?Z.length:0;return V("div",{className:"opaca-form-group",children:[V(H5,{name:Y,label:q,required:H,localized:G},void 0,!1,void 0,this),V(i1,{relationTo:W,hasError:!!Q,onClick:()=>!$&&!K&&w(!0),children:Z?V(l4,{children:Array.isArray(Z)||_?V("div",{children:(Array.isArray(Z)?Z:[]).map((C)=>{let I=typeof C==="object"&&C!==null?C.id:C;return V("div",{className:"opaca-relationship-chip",children:[V(Wq,{size:10},void 0,!1,void 0,this),V("span",{className:"opaca-relationship-value",children:b(C)},void 0,!1,void 0,this),V("button",{type:"button",onClick:(v)=>{v.stopPropagation();let t=(Array.isArray(Z)?Z:[]).filter((s)=>{let N=typeof s==="object"&&s!==null?s.id:s;return String(N)!==String(I)});J(t)},className:"opaca-relationship-clear",title:"Remove",children:V(o4,{size:10},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},String(I),!0,void 0,this)})},void 0,!1,void 0,this):V(l4,{children:[V("div",{className:"opaca-relationship-chip",children:[V("div",{className:"opaca-relationship-dot"},void 0,!1,void 0,this),V("span",{className:"opaca-relationship-prefix",children:W},void 0,!1,void 0,this),V("span",{className:"opaca-relationship-value",children:b(Z)},void 0,!1,void 0,this),V("button",{type:"button",onClick:(C)=>{C.stopPropagation(),J(null)},className:"opaca-relationship-clear",title:"Clear",children:V(o4,{size:10},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),V("button",{type:"button",className:"opaca-relationship-info-btn",onClick:(C)=>{C.stopPropagation();let I=typeof Z==="object"&&Z!==null?Z.id:Z;p({open:!0,id:I})},title:"View Details",style:{marginLeft:"auto"},children:V(n4,{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):null},void 0,!1,void 0,this),Q&&V("span",{className:"opaca-field-error",children:Q},void 0,!1,void 0,this),V(c5,{open:X,onOpenChange:w,children:V(d5,{onClose:()=>w(!1),children:V("div",{style:{display:"flex",flexDirection:"column",height:"100%",width:"100%"},children:[V("div",{className:"opaca-relationship-sheet-header",children:[V("div",{className:"opaca-relationship-sheet-title",children:["Select ",W]},void 0,!0,void 0,this),V("div",{className:"opaca-relationship-sheet-subtitle",children:_?`${f} item${f!==1?"s":""} selected`:"Choose an item to link"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),V("div",{className:"opaca-relationship-search",children:[V(qq,{size:16,className:"opaca-relationship-search-icon"},void 0,!1,void 0,this),V("input",{type:"text",placeholder:"Search items...",className:"opaca-input",value:R,onChange:(C)=>O(C.target.value)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),V("div",{style:{overflowY:"auto",flex:1,minHeight:0},children:y?V("div",{className:"opaca-relationship-loading",children:V(Yq,{className:"opaca-spin",size:24},void 0,!1,void 0,this)},void 0,!1,void 0,this):S.length===0?V("div",{className:"opaca-relationship-empty",children:"No items found."},void 0,!1,void 0,this):V("div",{className:"opaca-relationship-list",children:S.map((C)=>V("button",{type:"button",onClick:()=>E(C.id),className:g("opaca-relationship-item",T(C.id)&&"active"),children:[V("div",{className:"avatar",children:A(C).charAt(0).toUpperCase()},void 0,!1,void 0,this),V("div",{className:"content",children:[V("div",{className:"title",children:A(C)},void 0,!1,void 0,this),C.id&&V("div",{className:"subtitle",children:C.id},void 0,!1,void 0,this)]},void 0,!0,void 0,this),T(C.id)&&V(e6,{size:16,className:"opaca-relationship-item-check"},void 0,!1,void 0,this),V("button",{type:"button",className:"opaca-relationship-item-info",onClick:(I)=>{I.stopPropagation(),p({open:!0,id:C.id})},title:"View Details",children:V(n4,{size:14},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},C.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),V(A1,{open:m.open,onOpenChange:(C)=>p((I)=>({...I,open:C})),title:`${W} Details`,relationTo:W,id:m.id},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import{jsxDEV as t4}from"react/jsx-dev-runtime";var s4=({fields:Y,parentData:q,onChange:W,renderField:Z})=>{return t4("div",{className:"opaca-row-field",children:Y.map((J,H)=>t4("div",{className:"row-item",style:J.admin?.width?{flex:`0 0 ${J.admin.width}`,width:J.admin.width}:void 0,children:Z(J,J.name?q?.[J.name]:void 0,(G)=>J.name&&W(J.name,G))},J.name||`row-item-${H}`,!1,void 0,this))},void 0,!1,void 0,this)};import{jsxDEV as e5}from"react/jsx-dev-runtime";var e4=({name:Y,label:q,value:W,onChange:Z,choices:J,required:H,localized:G,disabled:$,readOnly:K,placeholder:Q,error:U})=>{return e5("div",{className:"opaca-form-group",children:[e5(H5,{name:Y,label:q,required:H,localized:G,htmlFor:`field-${Y}`},void 0,!1,void 0,this),e5(V5,{value:W,onValueChange:Z,disabled:$||K,placeholder:Q||`Select ${q||Y}...`,children:[e5(x5,{className:U?"error":"",children:e5(D5,{},void 0,!1,void 0,this)},void 0,!1,void 0,this),e5(r5,{children:(J||[]).map((_)=>{let X=typeof _==="string"?{label:_,value:_}:_;return e5(y5,{value:X.value,children:X.label},X.value,!1,void 0,this)})},void 0,!1,void 0,this)]},void 0,!0,void 0,this),U&&e5("span",{className:"opaca-field-error",children:U},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import Hq from"react";import{jsxDEV as Y0}from"react/jsx-dev-runtime";var YY=({tabs:Y,value:q,onChange:W,disabled:Z,readOnly:J,renderField:H})=>{let[G,$]=Hq.useState(Y?.[0]?.label||""),K=(Q,U)=>{if(q!==void 0)W({...q||{},[Q]:U});else W(Q,U)};if(!Y||Y.length===0)return null;return Y0("div",{className:"opaca-tabs-field",children:Y0(s1,{value:G,onValueChange:$,children:[Y0(e1,{children:Y.map((Q)=>Y0(Y2,{value:Q.label,children:Q.label},Q.label,!1,void 0,this))},void 0,!1,void 0,this),Y0("div",{children:Y.map((Q)=>Y0(q2,{value:Q.label,children:Y0("div",{style:{display:"flex",flexDirection:"column",gap:"1.25rem"},children:Q.fields.map((U,_)=>{let X=q!==void 0&&U.name?q[U.name]:void 0;return Y0("div",{className:"tab-field-item",children:H(U,X,(w)=>{if(q!==void 0&&U.name)K(U.name,w);else if(U.name)W(U.name,w);else W(w)})},U.name||`tab-item-${Q.label}-${_}`,!1,void 0,this)})},void 0,!1,void 0,this)},Q.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 I1}from"react/jsx-dev-runtime";var qY=({name:Y,label:q,value:W,onChange:Z,required:J,localized:H,disabled:G,readOnly:$,placeholder:K,error:Q})=>{return I1("div",{className:"opaca-form-group",children:[I1(H5,{name:Y,label:q,required:J,localized:H,htmlFor:`field-${Y}`},void 0,!1,void 0,this),I1("textarea",{id:`field-${Y}`,className:`opaca-input ${Q?"error":""}`,style:{minHeight:"160px",resize:"vertical",padding:"1rem",lineHeight:"1.5"},value:W||"",readOnly:$,disabled:G,onChange:(U)=>{let _=U.target.value;Z(_===""&&!J?null:_)},placeholder:K||`Enter ${q||Y}...`,required:J},void 0,!1,void 0,this),Q&&I1("span",{className:"opaca-field-error",children:Q},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import{jsxDEV as b1}from"react/jsx-dev-runtime";var WY=({name:Y,label:q,value:W,onChange:Z,required:J,localized:H,disabled:G,readOnly:$,placeholder:K,error:Q})=>{return b1("div",{className:"opaca-form-group",children:[b1(H5,{name:Y,label:q,required:J,localized:H,htmlFor:`field-${Y}`},void 0,!1,void 0,this),b1("input",{id:`field-${Y}`,type:"text",className:`opaca-input ${Q?"error":""}`,value:W||"",readOnly:$,disabled:G,onChange:(U)=>{let _=U.target.value;Z(_===""&&!J?null:_)},placeholder:K||`Enter ${q||Y}...`,required:J},void 0,!1,void 0,this),Q&&b1("span",{className:"opaca-field-error",children:Q},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import{jsxDEV as C1}from"react/jsx-dev-runtime";var ZY=({name:Y,label:q,value:W,localized:Z})=>{let J=W===null||W===void 0?"":typeof W==="object"?JSON.stringify(W):String(W);return C1("div",{className:"opaca-form-group",children:[C1(H5,{name:Y,label:q,localized:Z,suffix:C1("span",{style:{color:"rgba(255, 255, 255, 0.4)",marginLeft:"4px",fontSize:"10px",fontWeight:"normal",textTransform:"uppercase",letterSpacing:"0.5px"},children:"(Computed)"},void 0,!1,void 0,this)},void 0,!1,void 0,this),C1("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:J},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import{jsxDEV as a}from"react/jsx-dev-runtime";var Gq=({tagName:Y,field:q,value:W,onChange:Z,isDisabled:J,isReadOnly:H,error:G,parentData:$})=>{let K=zq(null);return Jq(()=>{let Q=K.current;if(Q){Q.value=W,Q.fieldConfig=q,Q.error=G,Q.parentData=$;let U=(_)=>{let X=_.detail;if(X&&"value"in X)Z(X.value)};return Q.addEventListener("opacachange",U),()=>{Q.removeEventListener("opacachange",U)}}},[W,q,Z,G,$]),a("div",{className:"opaca-form-group",children:[a(H5,{name:q.name,label:q.label,required:q.required,localized:q.localized,htmlFor:q.name},void 0,!1,void 0,this),Xq.createElement(Y,{ref:K,id:q.name,"data-name":q.name,"data-disabled":J?"true":void 0,"data-readonly":H?"true":void 0,className:"opaca-custom-field"}),G&&a("span",{className:"opaca-field-error",children:G},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},B5=({field:Y,value:q,onChange:W,disabled:Z,readOnly:J,error:H,parentData:G})=>{let $=Y.name?G?._access?.[Y.name]||{}:{},K=J||$.readOnly||(typeof Y.access?.readOnly==="boolean"?Y.access.readOnly:!1),Q=Z||$.disabled||(typeof Y.access?.disabled==="boolean"?Y.access.disabled:!1)||K;if(Y.type==="slug"||$.hidden||(typeof Y.access?.hidden==="boolean"?Y.access.hidden:!1))return null;let _={name:Y.name,label:Y.label||(Y.name?O5(Y.name):void 0),value:q,onChange:W,required:Y.required,localized:Y.localized,disabled:Q,readOnly:K,error:H,placeholder:Y.placeholder};if(Y.admin?.components?.Field&&typeof Y.admin.components.Field==="string")return a(Gq,{tagName:Y.admin.components.Field,field:Y,value:q,onChange:W,isDisabled:Q,isReadOnly:K,error:H,parentData:G},void 0,!1,void 0,this);switch(Y.type){case"text":return a(WY,{..._},void 0,!1,void 0,this);case"virtual":return a(ZY,{name:_.name,label:_.label,value:q},void 0,!1,void 0,this);case"textarea":return a(qY,{..._},void 0,!1,void 0,this);case"number":return a(c4,{..._},void 0,!1,void 0,this);case"date":return a(E4,{..._},void 0,!1,void 0,this);case"boolean":return a(f4,{..._},void 0,!1,void 0,this);case"select":return a(e4,{..._,choices:Y.choices||Y.options?.choices||[]},void 0,!1,void 0,this);case"file":return a(V4,{..._,options:Y.options,bucket:Y.bucket},void 0,!1,void 0,this);case"radio":return a(d4,{..._,choices:Y.choices||Y.options?.choices||[]},void 0,!1,void 0,this);case"row":return a(s4,{fields:Y.fields||[],parentData:G,disabled:Q,readOnly:K,onChange:(X,w)=>{if(G&&typeof G==="object"&&!Array.isArray(G))W({...G,[X]:w});else W(w)},renderField:(X,w,L)=>a(B5,{field:X,value:X.name&&w===void 0?G?.[X.name]:w,onChange:L,disabled:Q,readOnly:K,parentData:G},void 0,!1,void 0,this)},void 0,!1,void 0,this);case"group":return a(x4,{..._,fields:Y.fields||[],renderField:(X,w,L)=>a(B5,{field:X,value:X.name&&w===void 0?G?.[X.name]:w,onChange:L,disabled:Q,readOnly:K,parentData:q},void 0,!1,void 0,this)},void 0,!1,void 0,this);case"tabs":return a(YY,{..._,tabs:Y.tabs||[],parentData:G,onChange:(X,w)=>{if(G&&typeof G==="object"&&!Array.isArray(G))W({...G,[X]:w});else W(w)},renderField:(X,w,L)=>a(B5,{field:X,value:X.name&&q===void 0?G?.[X.name]:w,onChange:L,disabled:Q,readOnly:K,parentData:G},void 0,!1,void 0,this)},void 0,!1,void 0,this);case"collapsible":return a(u4,{..._,fields:Y.fields||[],parentData:G,options:Y.options,onChange:(X,w)=>{if(G&&typeof G==="object"&&!Array.isArray(G))W({...G,[X]:w});else W(w)},renderField:(X,w,L)=>a(B5,{field:X,value:w,onChange:L,disabled:Q,readOnly:K,parentData:G},void 0,!1,void 0,this)},void 0,!1,void 0,this);case"blocks":return a(m4,{..._,blocks:Y.blocks||Y.options?.blocks||[],renderField:(X,w,L)=>a(B5,{field:X,value:w,onChange:L,disabled:Q,readOnly:K,parentData:w},void 0,!1,void 0,this)},void 0,!1,void 0,this);case"relationship":return a(i4,{..._,relationTo:Y.relationTo||Y.options?.relationTo,displayField:Y.displayField||Y.options?.displayField,hasMany:Y.hasMany},void 0,!1,void 0,this);case"join":return a(r4,{..._,collection:Y.collection||Y.options?.collection},void 0,!1,void 0,this);case"array":return a(g4,{..._,fields:Y.fields||[],renderField:(X,w,L)=>a(B5,{field:X,value:w,onChange:L,disabled:Q,readOnly:K,parentData:w},void 0,!1,void 0,this)},void 0,!1,void 0,this);case"richtext":return a("div",{className:"opaca-form-group",children:[a(H5,{name:Y.name,label:Y.label,required:Y.required,localized:Y.localized,htmlFor:Y.name},void 0,!1,void 0,this),a(M1,{value:q||"",onChange:W,disabled:Q,readOnly:K,defaultMode:Y.options?.defaultMode},void 0,!1,void 0,this),H&&a("span",{className:"opaca-field-error",children:H},void 0,!1,void 0,this)]},void 0,!0,void 0,this);default:return console.warn("FieldRenderer: fallback to default for type:",Y.type,Y),a("div",{className:"opaca-form-group",children:[a("label",{htmlFor:Y.name,className:"opaca-label",children:[Y.label||(Y.name?O5(Y.name):void 0)," (Unknown Type:"," ",Y.type,") "]},void 0,!0,void 0,this),a("input",{type:"text",className:"opaca-input",value:q||"",readOnly:!0,disabled:!0},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}};import{History as Qq,Loader2 as HY,RotateCcw as Kq}from"lucide-react";import{useEffect as _q,useMemo as $q,useState as q1}from"react";F5();import{useStore as Uq}from"@nanostores/react";import{jsxDEV as i}from"react/jsx-dev-runtime";function XY({collection:Y,parentId:q,open:W,onOpenChange:Z,onRestore:J}){let H=Uq(N5),G=H?.i18n?.locales||[],$=H?.i18n?.defaultLocale||"en",[K,Q]=q1([]),[U,_]=q1(!1),[X,w]=q1(null),[L,B]=q1($),[y,M]=q1(!1),R=async()=>{_(!0);try{let T=Y.apiPath||Y.slug,A=await j.get(`api/${T}/versions`,{searchParams:{parentId:q}}).json();Q(A.docs||[])}catch(T){console.error(T),l("Failed to fetch versions","error")}finally{_(!1)}};_q(()=>{if(W&&q)R()},[W,q]);let O=async(T)=>{M(!0);try{let A=Y.apiPath||Y.slug,b=await j.post(`api/${A}/versions/${T}/restore`).json();J(b.doc),l("Version restored successfully","success"),Z(!1)}catch(A){console.error(A),l("Failed to restore version","error")}finally{M(!1)}},m=K.find((T)=>T.id===X),p=$q(()=>{if(!m?._version_data)return null;try{return JSON.parse(m._version_data)}catch(T){return console.error("Failed to parse version data:",T),null}},[m]),F=(T,A)=>{if(T&&typeof T==="object"&&!Array.isArray(T)&&!T.root)return T[A]||T[$]||Object.values(T)[0]||"";return T},E=(T,A)=>{let b=F(A,L);if(b===null||b===void 0)return"-";if(T.type==="richtext"||typeof b==="object"&&b?.root){let f=n5(typeof b==="string"?b:JSON.stringify(b));return f.length>120?`${f.slice(0,120)}...`:f||"(Empty RichText)"}if(T.type==="boolean")return i("span",{className:`opaca-badge ${b?"true":"false"}`,style:{fontSize:"0.7rem",padding:"2px 8px",borderRadius:"12px",background:b?"rgba(34, 197, 94, 0.2)":"rgba(239, 68, 68, 0.2)",color:b?"#22c55e":"#ef4444",fontWeight:600,textTransform:"uppercase"},children:b?"Yes":"No"},void 0,!1,void 0,this);if(T.type==="relationship"){if(Array.isArray(b))return`${b.length} items`;return typeof b==="object"?b.id||JSON.stringify(b):String(b)}if(Array.isArray(b))return`${b.length} items`;if(typeof b==="object")return"{...}";let S=String(b);return S.length>100?`${S.slice(0,100)}...`:S};return i(c5,{open:W,onOpenChange:Z,children:i(d5,{className:"opaca-versions-sheet",children:[i(B0,{className:"opaca-versions-header",children:[i("div",{className:"opaca-versions-header-main",style:{width:"100%"},children:[i("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem"},children:[i(Qq,{size:20,className:"opaca-text-primary"},void 0,!1,void 0,this),i(R0,{children:"Version History"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),G.length>1&&i(V5,{value:L,onValueChange:B,children:[i(x5,{className:"opaca-locale-trigger",children:i(D5,{placeholder:"Locale"},void 0,!1,void 0,this)},void 0,!1,void 0,this),i(r5,{children:G.map((T)=>i(y5,{value:T,children:T.toUpperCase()},T,!1,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),i(P0,{children:"View and restore previous versions of this document."},void 0,!1,void 0,this)]},void 0,!0,void 0,this),U?i("div",{style:{display:"flex",justifyContent:"center",padding:"3rem"},children:i(HY,{className:"opaca-spin"},void 0,!1,void 0,this)},void 0,!1,void 0,this):K.length===0?i("div",{style:{textAlign:"center",padding:"3rem",color:"var(--opaca-text-muted)"},children:"No versions found."},void 0,!1,void 0,this):i("div",{className:"opaca-version-list",children:K.map((T)=>i("button",{type:"button",className:`opaca-version-item ${X===T.id?"active":""}`,onClick:()=>w(X===T.id?null:T.id),children:[i("div",{className:"opaca-version-meta",children:[i("div",{className:"opaca-version-info",children:[i("span",{className:"opaca-version-date",children:new Date(T.created_at).toLocaleString(void 0,{month:"short",day:"numeric",year:"numeric",hour:"2-digit",minute:"2-digit"})},void 0,!1,void 0,this),i("span",{className:"opaca-version-id",children:["ID: ",T.id.slice(0,8)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),T._status&&i("span",{className:`opaca-version-status ${T._status}`,children:T._status},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X===T.id&&i("div",{className:"opaca-version-preview",children:[i("div",{className:"opaca-version-summary",children:Y.fields.filter((A)=>A.name&&!A.name.startsWith("_")).map((A)=>i("div",{className:"opaca-summary-row",children:[i("span",{className:"opaca-summary-label",children:A.label||A.name},void 0,!1,void 0,this),i("div",{className:"opaca-summary-value",children:E(A,p[A.name])},void 0,!1,void 0,this)]},A.name,!0,void 0,this))},void 0,!1,void 0,this),i("div",{className:"opaca-version-actions",children:i("button",{type:"button",className:"opaca-btn opaca-btn-primary",disabled:y,onClick:(A)=>{A.stopPropagation(),O(T.id)},children:[y?i(HY,{className:"opaca-spin",size:16},void 0,!1,void 0,this):i(Kq,{size:16},void 0,!1,void 0,this),"Restore this version"]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},T.id,!0,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}import{Children as Lq,cloneElement as wq,isValidElement as Bq,useState as Rq}from"react";import{jsxDEV as k5,Fragment as Pq}from"react/jsx-dev-runtime";function W1({children:Y,trigger:q,title:W,description:Z,onConfirm:J,confirmText:H="Continue",cancelText:G="Cancel",variant:$="default"}){let[K,Q]=Rq(!1),U=()=>{J(),Q(!1)},_=q||Y;return k5(Pq,{children:[(()=>{if(Lq.count(_)===1&&Bq(_)){let w=_;return wq(w,{onClick:(L)=>{let B=w.props.onClick;if(B)B(L);Q(!0)}})}return k5("span",{role:"button",tabIndex:0,onClick:()=>Q(!0),onKeyDown:(w)=>{if(w.key==="Enter"||w.key===" ")w.preventDefault(),Q(!0)},style:{display:"inline-block",cursor:"pointer"},children:_},void 0,!1,void 0,this)})(),k5(p0,{open:K,onOpenChange:Q,children:k5(v0,{className:"opaca-dialog-max-w",children:[k5(g0,{children:[k5(m0,{children:W},void 0,!1,void 0,this),k5(K1,{children:Z},void 0,!1,void 0,this)]},void 0,!0,void 0,this),k5(f0,{children:[k5(e,{variant:"outline",onClick:()=>Q(!1),children:G},void 0,!1,void 0,this),k5(e,{variant:$,onClick:U,children:H},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 r}from"react/jsx-dev-runtime";var yq=async(Y,q,W)=>{if(q==="create")return{};let Z={};if(W)Z["x-opaca-locale"]=W;return await j.get(`api/${Y}/${q}`,{headers:Z}).json()},Oq=async(Y,q,W,Z)=>{let J={...W};for(let G in J)if(J[G]==="")J[G]=null;let H={};if(Z)H["x-opaca-locale"]=Z;if(q&&q!=="create")return j.patch(`api/${Y}/${q}`,{json:J,headers:H}).json();return j.post(`api/${Y}`,{json:J,headers:H}).json()};function KY({collection:Y,id:q,onBack:W}){let Z=Y.apiPath||Y.slug,J=Z,H=P2(N5),[G,$]=QY(H?.i18n?.defaultLocale||"en"),[K,Q]=QY(!1),U=GY(()=>o5([Z,q,G],{fetcher:()=>yq(Z,q,G)}),[Z,q,G]),_=GY(()=>j0(async({data:p})=>{return Oq(Z,q,p,G)}),[Z,q,G]),X=P2(U),w=P2(_),L=X.loading,B=w.loading,y=X.error||w.error,M=!!Y.versions?.drafts,R=Tq({defaultValues:X.data||{},onSubmit:async({value:p})=>{try{await _.mutate(p),l(`Document ${q==="create"?"created":"updated"} successfully`,"success"),W()}catch(F){let E="Failed to save document";if(F.response)try{let T=await F.response.json();if(E=T.message||E,T.errors)Object.keys(T.errors).forEach((A)=>{if(A==="_errors")return;R.setErrorMap({onChange:T.errors[A]._errors.join(", ")})})}catch(T){}l(E,"error")}}});Fq(()=>{if(X.data&&!X.loading)R.reset(X.data)},[X.data,X.loading,R,G]);let O=async(p,F="published")=>{if(p)p.preventDefault();if(p?.stopPropagation(),M)R.setFieldValue("_status",F);await R.handleSubmit()},m=()=>{if(!R.state.isDirty)W()};if(L)return r("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem",marginTop:"2rem",padding:"0 2.5rem"},children:[r(T2,{size:18,className:"opaca-spin"},void 0,!1,void 0,this),r("span",{className:"opaca-subtitle",children:"Loading document..."},void 0,!1,void 0,this)]},void 0,!0,void 0,this);return r("div",{className:"opaca-admin-form",children:[r("div",{className:"opaca-header",children:[r("div",{style:{display:"flex",alignItems:"center",gap:"1rem"},children:[R.state.isDirty?r(W1,{title:"Unsaved Changes",description:"You have unsaved changes. Are you sure you want to discard them and leave?",onConfirm:W,variant:"destructive",children:r("button",{type:"button",className:"opaca-btn opaca-btn-outline",style:{padding:"0.5rem"},title:"Go Back",children:r(JY,{size:18},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this):r("button",{type:"button",onClick:m,className:"opaca-btn opaca-btn-outline",style:{padding:"0.5rem"},title:"Go Back",children:r(JY,{size:18},void 0,!1,void 0,this)},void 0,!1,void 0,this),r("div",{children:[r("h1",{className:"opaca-title",children:q==="create"?`Create ${Y.label||Y.slug}`:`Edit ${Y.label||Y.slug}`},void 0,!1,void 0,this),r("p",{className:"opaca-subtitle",children:q==="create"?"Add a new entry to the collection.":`ID: ${q}`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),r("div",{style:{display:"flex",gap:"0.75rem"},children:[H?.i18n&&H.i18n.locales.length>1&&r("div",{className:"opaca-locale-switcher",children:H.i18n.locales.map((p)=>r("button",{type:"button",className:`opaca-locale-btn ${G===p?"active":""}`,onClick:()=>{if(R.state.isDirty){if(confirm("Unsaved changes will be lost. Continue?"))$(p)}else $(p)},children:p.toUpperCase()},p,!1,void 0,this))},void 0,!1,void 0,this),q!=="create"&&r(W1,{title:"Delete Document",description:"Are you sure you want to delete this document? This action cannot be undone.",onConfirm:async()=>{try{await j.delete(`api/${J}/${q}`),l("Document deleted successfully","success"),W()}catch(p){console.error(p),l("Failed to delete document","error")}},variant:"destructive",confirmText:"Delete",children:r("button",{type:"button",className:"opaca-btn opaca-btn-outline",style:{color:"var(--opaca-error)",borderColor:"var(--opaca-error)"},title:"Delete Document",children:[r(Nq,{size:18},void 0,!1,void 0,this),"Delete"]},void 0,!0,void 0,this)},void 0,!1,void 0,this),q!=="create"&&Y.versions&&r("button",{type:"button",className:"opaca-btn opaca-btn-outline",onClick:()=>Q(!0),title:"Version History",children:[r(Aq,{size:18},void 0,!1,void 0,this),"History"]},void 0,!0,void 0,this),r(R.Subscribe,{selector:(p)=>[p.isDirty],children:([p])=>r("div",{style:{display:"flex",gap:"0.75rem"},children:[M&&r("button",{type:"button",onClick:(F)=>O(F,"draft"),disabled:B,className:"opaca-btn opaca-btn-outline",title:"Save as Draft",children:[B?r(T2,{size:18,className:"opaca-spin"},void 0,!1,void 0,this):r(zY,{size:18},void 0,!1,void 0,this),"Save Draft"]},void 0,!0,void 0,this),r("button",{type:"button",onClick:(F)=>O(F,"published"),disabled:B,className:"opaca-btn opaca-btn-primary",style:{position:"relative"},title:M?"Publish":"Save Changes",children:[B?r(T2,{size:18,className:"opaca-spin"},void 0,!1,void 0,this):r(zY,{size:18},void 0,!1,void 0,this),q==="create"?M?"Publish":"Create":M?"Publish":"Save",p&&!B&&r("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),y&&r("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:[r(Mq,{size:18},void 0,!1,void 0,this),y]},void 0,!0,void 0,this),r("div",{className:"opaca-card",style:{padding:"2.5rem"},children:r("form",{id:"opaca-doc-form",onSubmit:(p)=>O(p),children:r("div",{style:{display:"grid",gap:"2rem"},children:Y.fields.map((p,F)=>{let E=p.name,T=E?X.data?._access?.[E]:{hidden:!1,readOnly:!1,disabled:!1};if(T?.hidden)return null;let A=T?.readOnly,b=T?.disabled||A;if(!E)return r(R.Subscribe,{selector:(S)=>S.values,children:(S)=>r(B5,{field:p,value:void 0,disabled:b,readOnly:A,onChange:(f,C)=>{if(typeof f==="string")R.setFieldValue(f,C)},parentData:S},void 0,!1,void 0,this)},F,!1,void 0,this);return r(R.Field,{name:E,children:(S)=>r(B5,{field:p,value:S.state.value,disabled:b,readOnly:A,onChange:(f)=>S.handleChange(f),parentData:R.state.values},void 0,!1,void 0,this)},E,!1,void 0,this)})},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this),q!=="create"&&Y.versions&&r(XY,{collection:Y,parentId:q,open:K,onOpenChange:Q,onRestore:(p)=>{R.reset(p)}},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}import{useStore as _Y}from"@nanostores/react";import{AlertCircle as kq,Loader2 as $Y,Save as Iq}from"lucide-react";import{useEffect as M2,useState as N2}from"react";F5();import{jsxDEV as X5}from"react/jsx-dev-runtime";function UY({global:Y}){let[q,W]=N2({}),[Z,J]=N2({}),[H,G]=N2(null),{data:$,loading:K,error:Q}=_Y(W4),{mutate:U,loading:_}=_Y(Z4),X=JSON.stringify(q)!==JSON.stringify(Z);M2(()=>{X2.set(Y.slug)},[Y.slug]),M2(()=>{if($){let L={...$};delete L.id,delete L.createdAt,delete L.updatedAt;let B={...L};if(Object.keys(L).length===0)Y.fields.forEach((y)=>{if(!y.name)return;if(y.defaultValue!==void 0)B[y.name]=y.defaultValue;else if(y.type==="boolean")B[y.name]=!1;else if(y.type==="number")B[y.name]=0;else if(y.type==="array"||y.type==="blocks"||y.type==="relationship"&&y.hasMany)B[y.name]=[];else B[y.name]=""});W(B),J(B),G(null)}},[$,Y.fields]),M2(()=>{if(Q)G("Failed to load global document."),l("Error loading global document","error")},[Q]);let w=async(L)=>{if(L)L.preventDefault();G(null);try{await U({slug:Y.slug,body:q}),l("Changes saved successfully","success"),J(q)}catch(B){console.error(B),G(B instanceof Error?B.message:"Failed to save document."),l("Failed to save changes","error")}};if(K)return X5("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem",marginTop:"2rem",padding:"0 2.5rem"},children:[X5($Y,{size:18,className:"opaca-spin"},void 0,!1,void 0,this),X5("span",{className:"opaca-subtitle",children:"Loading settings..."},void 0,!1,void 0,this)]},void 0,!0,void 0,this);return X5("div",{className:"opaca-admin-form",children:[X5("div",{className:"opaca-header",children:[X5("div",{style:{display:"flex",alignItems:"center",gap:"1rem"},children:X5("div",{children:[X5("h1",{className:"opaca-title",children:Y.label||Y.slug.charAt(0).toUpperCase()+Y.slug.slice(1)},void 0,!1,void 0,this),X5("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),X5("div",{style:{display:"flex",gap:"0.75rem"},children:X5("button",{type:"button",onClick:()=>w(),disabled:_,className:"opaca-btn opaca-btn-primary",style:{position:"relative"},title:"Save Changes",children:[_?X5($Y,{size:18,className:"opaca-spin"},void 0,!1,void 0,this):X5(Iq,{size:18},void 0,!1,void 0,this),"Save",X&&!_&&X5("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),H&&X5("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:[X5(kq,{size:18},void 0,!1,void 0,this),H]},void 0,!0,void 0,this),X5("div",{className:"opaca-card",style:{padding:"2.5rem"},children:X5("form",{id:"opaca-doc-form",onSubmit:w,children:X5("div",{style:{display:"grid",gap:"2rem"},children:Y.fields.map((L,B)=>{let y=L.name;if(!y)return X5(B5,{field:L,value:void 0,onChange:(M,R)=>{if(typeof M==="string")W({...q,[M]:R});else Object.assign(q,R),W({...q})},parentData:q},L.name||B,!1,void 0,this);return X5(B5,{field:L,value:q[y],onChange:(M)=>{W({...q,[y]:M})},parentData:q},y,!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)}X1();import{AlertCircle as bq,Loader2 as Cq,Lock as LY,ShieldCheck as Sq,User as hq}from"lucide-react";import{useState as Z1}from"react";import{jsxDEV as q5,Fragment as pq}from"react/jsx-dev-runtime";function wY({onSuccess:Y}){let[q,W]=Z1(""),[Z,J]=Z1(""),[H,G]=Z1(""),[$,K]=Z1(!1),[Q,U]=Z1(null);return q5("div",{className:"opaca-login-container",children:q5("div",{className:"opaca-login-card",children:[q5("div",{className:"opaca-login-header",children:[q5("div",{className:"opaca-login-logo",children:q5(Sq,{size:24,color:"white"},void 0,!1,void 0,this)},void 0,!1,void 0,this),q5("h1",{className:"opaca-title",children:"Welcome to OpacaCMS"},void 0,!1,void 0,this),q5("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),Q&&q5("div",{className:"opaca-login-error",children:[q5(bq,{size:14},void 0,!1,void 0,this),Q]},void 0,!0,void 0,this),q5("form",{onSubmit:async(X)=>{if(X.preventDefault(),K(!0),U(null),Z!==H){U("Passwords do not match"),K(!1);return}try{let w=await $0.signUp.email({email:q,password:Z,name:"Admin"});if(w.error)throw Error(w.error.message||"Failed to create admin user");Y()}catch(w){console.error(w),U(w instanceof Error?w.message:"Initialization failed")}finally{K(!1)}},children:[q5("div",{className:"opaca-form-group",children:[q5("label",{htmlFor:"init-email",className:"opaca-label",children:"Admin Email"},void 0,!1,void 0,this),q5("div",{style:{position:"relative"},children:[q5(hq,{size:14,style:{position:"absolute",left:"0.75rem",top:"50%",transform:"translateY(-50%)",color:"var(--opaca-text-dim)"}},void 0,!1,void 0,this),q5("input",{id:"init-email",type:"email",className:"opaca-input",style:{paddingLeft:"2.25rem"},placeholder:"admin@example.com",value:q,onChange:(X)=>W(X.target.value),required:!0},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),q5("div",{className:"opaca-form-group",children:[q5("label",{htmlFor:"init-password",className:"opaca-label",children:"Password"},void 0,!1,void 0,this),q5("div",{style:{position:"relative"},children:[q5(LY,{size:14,style:{position:"absolute",left:"0.75rem",top:"50%",transform:"translateY(-50%)",color:"var(--opaca-text-dim)"}},void 0,!1,void 0,this),q5("input",{id:"init-password",type:"password",className:"opaca-input",style:{paddingLeft:"2.25rem"},placeholder:"••••••••",value:Z,onChange:(X)=>J(X.target.value),required:!0,minLength:8},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),q5("div",{className:"opaca-form-group",children:[q5("label",{htmlFor:"init-confirm",className:"opaca-label",children:"Confirm Password"},void 0,!1,void 0,this),q5("div",{style:{position:"relative"},children:[q5(LY,{size:14,style:{position:"absolute",left:"0.75rem",top:"50%",transform:"translateY(-50%)",color:"var(--opaca-text-dim)"}},void 0,!1,void 0,this),q5("input",{id:"init-confirm",type:"password",className:"opaca-input",style:{paddingLeft:"2.25rem"},placeholder:"••••••••",value:H,onChange:(X)=>G(X.target.value),required:!0,minLength:8},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),q5("button",{type:"submit",className:"opaca-btn opaca-btn-primary",style:{width:"100%",marginTop:"0.5rem"},disabled:$,children:$?q5(pq,{children:[q5(Cq,{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),q5("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 vq,Loader2 as gq,Lock as BY,User as mq}from"lucide-react";import{useState as S1}from"react";import{jsxDEV as Z5,Fragment as fq}from"react/jsx-dev-runtime";function RY({onLogin:Y}){let[q,W]=S1(""),[Z,J]=S1(""),[H,G]=S1(!1),[$,K]=S1(null);return Z5("div",{className:"opaca-login-container",children:Z5("div",{className:"opaca-login-card",children:[Z5("div",{style:{textAlign:"center",marginBottom:"1.5rem"},children:[Z5("div",{className:"opaca-logo-circle",style:{margin:"0 auto 1rem"},children:Z5(BY,{size:22},void 0,!1,void 0,this)},void 0,!1,void 0,this),Z5("h1",{className:"opaca-title",children:"Admin Login"},void 0,!1,void 0,this),Z5("p",{className:"opaca-subtitle",children:"Authenticate to access the dashboard"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),$&&Z5("div",{className:"opaca-login-error",children:[Z5(vq,{size:14},void 0,!1,void 0,this),$]},void 0,!0,void 0,this),Z5("form",{onSubmit:async(U)=>{U.preventDefault(),G(!0),K(null);try{await Y({email:q,password:Z})}catch(_){console.error(_),K(_ instanceof Error?_.message:"Invalid email or password")}finally{G(!1)}},children:[Z5("div",{className:"opaca-form-group",children:[Z5("label",{htmlFor:"login-email",className:"opaca-label",children:"Email"},void 0,!1,void 0,this),Z5("div",{style:{position:"relative"},children:[Z5(mq,{size:14,style:{position:"absolute",left:"0.75rem",top:"50%",transform:"translateY(-50%)",color:"var(--opaca-text-dim)"}},void 0,!1,void 0,this),Z5("input",{id:"login-email",type:"email",className:"opaca-input",style:{paddingLeft:"2.25rem"},placeholder:"admin@example.com",value:q,onChange:(U)=>W(U.target.value),required:!0},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),Z5("div",{className:"opaca-form-group",children:[Z5("label",{htmlFor:"login-password",className:"opaca-label",children:"Password"},void 0,!1,void 0,this),Z5("div",{style:{position:"relative"},children:[Z5(BY,{size:14,style:{position:"absolute",left:"0.75rem",top:"50%",transform:"translateY(-50%)",color:"var(--opaca-text-dim)"}},void 0,!1,void 0,this),Z5("input",{id:"login-password",type:"password",className:"opaca-input",style:{paddingLeft:"2.25rem"},placeholder:"••••••••",value:Z,onChange:(U)=>J(U.target.value),required:!0},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),Z5("button",{type:"submit",className:"opaca-btn opaca-btn-primary",style:{width:"100%",marginTop:"0.5rem"},disabled:H,children:H?Z5(fq,{children:[Z5(gq,{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 Q0}from"@nanostores/react";import{Check as uq,ChevronLeft as Eq,ChevronRight as PY,Download as jq,Eye as A2,File as TY,FileText as MY,FolderPlus as F2,Grid as Vq,Image as NY,LayoutList as xq,Loader2 as AY,Plus as Dq,Save as rq,Search as cq,Settings2 as dq,Trash2 as nq,X as oq}from"lucide-react";import{useMemo as aq,useRef as lq,useState as I0}from"react";import{createPortal as iq}from"react-dom";F5();import{jsxDEV as z}from"react/jsx-dev-runtime";var FY=(Y)=>{if(!Y)return"-";let q=new Date(Y);return Number.isNaN(q.getTime())?"-":q.toLocaleDateString()},y2=["#7c3aed","#047857","#b91c1c","#0369a1","#a21caf","#c2410c","#eab308","#10b981","#ec4899","#6366f1"],K0=(Y,q)=>{if(q&&q[Y])return q[Y];let W=0;for(let Z=0;Z<Y.length;Z++)W=Y.charCodeAt(Z)+((W<<5)-W);return y2[Math.abs(W)%y2.length]};function yY({collection:Y,config:q}){let{data:W,loading:Z}=Q0(F0),J=Q0(N0),H=Q0(A0),G=Q0(z0),$=Q0(B1),K=Q0(G0),Q=Q0(w1),[U,_]=I0(!1),[X,w]=I0(null),[L,B]=I0(!1),[y,M]=I0(""),[R,O]=I0(!1),[m,p]=I0(!1),F=lq(null),E=aq(()=>{return[...Object.keys(q.storages||{})]},[q.storages]),T=()=>{F0.revalidate()},A=async(N)=>{let x=N.target.files?.[0];if(!x)return;_(!0);let z5=new FormData;z5.append("file",x);try{let g5=H==="all"?"default":H;await j.post(`api/__system/assets/upload?bucket=${g5}&folder=${G}`,{body:z5}),l("File uploaded successfully","success"),T()}catch(g5){console.error("Upload failed",g5),l("Upload failed","error")}finally{if(_(!1),F.current)F.current.value=""}},b=async()=>{if(!y)return;try{let N=H==="all"?"default":H,x=new Blob([""],{type:"text/plain"}),z5=new FormData,g5=G?`${G}/${y}`:y;z5.append("file",x,".keep"),await j.post(`api/__system/assets/upload?bucket=${N}&folder=${g5}`,{body:z5}),l("Folder created","success"),M(""),O(!1),T()}catch(N){console.error("Failed to create folder",N),l("Failed to create folder","error")}},S=async()=>{if(!X)return;try{await j.patch(`api/${Y.slug}/${X.id}`,{json:{filename:X.filename,altText:X.altText||X.alt_text,caption:X.caption}}),l("Metadata updated","success"),T()}catch(N){console.error("Failed to update metadata",N),l("Failed to update metadata","error")}},f=async(N)=>{try{if(await j.delete(`api/${Y.slug}/${N}`),l("Asset deleted","success"),X?.id===N)w(null);T()}catch(x){console.error("Delete failed",x),l("Failed to delete asset","error")}},C=W?.docs||[],I=W?.folders||[],v=(N)=>{if(N===0)return"0 Bytes";let x=1024,z5=["Bytes","KB","MB","GB"],g5=Math.floor(Math.log(N)/Math.log(x));return parseFloat((N/x**g5).toFixed(1))+" "+z5[g5]},n=(N)=>{if(!N)return z(TY,{size:J==="grid"?48:20,className:"text-gray-400"},void 0,!1,void 0,this);if(N.startsWith("image/"))return z(NY,{size:J==="grid"?48:20,className:"text-blue-400"},void 0,!1,void 0,this);if(N.startsWith("video/"))return z(MY,{size:J==="grid"?48:20,className:"text-purple-400"},void 0,!1,void 0,this);if(N.includes("pdf"))return z(MY,{size:J==="grid"?48:20,className:"text-red-400"},void 0,!1,void 0,this);return z(TY,{size:J==="grid"?48:20,className:"text-gray-400"},void 0,!1,void 0,this)},t=C.filter((N)=>{return(N.originalFilename||N.original_filename)?.toLowerCase().includes($.toLowerCase())||N.filename.toLowerCase().includes($.toLowerCase())}),s=I.filter((N)=>N.name.toLowerCase().includes($.toLowerCase()));return z("div",{className:`opaca-view-container media-registry-view ${Z?"loading":""}`,children:[z("input",{type:"file",ref:F,style:{display:"none"},onChange:A},void 0,!1,void 0,this),z("div",{className:"opaca-header media-registry-header",children:[z("div",{children:[z("h1",{className:"opaca-title",children:"Media Library"},void 0,!1,void 0,this),z("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),z("div",{className:"media-registry-header-actions",children:[z(e,{variant:"outline",onClick:()=>O(!0),disabled:H==="all",title:H==="all"?"Select a specific bucket to create folders":"",children:[z(F2,{size:16,className:"media-registry-icon-mr"},void 0,!1,void 0,this),"New Folder"]},void 0,!0,void 0,this),z(e,{variant:"default",disabled:U||H==="all",onClick:()=>F.current?.click(),title:H==="all"?"Select a specific bucket to upload files":"",children:[U?z(AY,{size:16,className:"opaca-spin media-registry-icon-mr"},void 0,!1,void 0,this):z(Dq,{size:16,className:"media-registry-icon-mr"},void 0,!1,void 0,this),U?"Uploading...":"Upload New"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),z("div",{style:{display:"flex",flex:1,minHeight:0,gap:"1.5rem",marginBottom:"1.5rem"},children:z("div",{style:{flex:1,display:"flex",flexDirection:"column",minWidth:0},children:[z("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem",marginBottom:"1rem",color:"var(--opaca-text-dim)",fontSize:"0.875rem"},children:[z("button",{type:"button",onClick:()=>h5(""),style:{background:"none",border:"none",color:G===""?"var(--opaca-text)":"inherit",cursor:"pointer",fontWeight:G===""?600:400},children:"Home"},void 0,!1,void 0,this),G.split("/").filter(Boolean).map((N,x,z5)=>z("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem"},children:[z(PY,{size:14},void 0,!1,void 0,this),z("button",{type:"button",onClick:()=>h5(z5.slice(0,x+1).join("/")),style:{background:"none",border:"none",color:x===z5.length-1?"var(--opaca-text)":"inherit",cursor:"pointer",fontWeight:x===z5.length-1?600:400},children:N},void 0,!1,void 0,this)]},N,!0,void 0,this))]},void 0,!0,void 0,this),z("div",{className:"opaca-card media-registry-body",children:[z("div",{className:"media-registry-toolbar",children:[z("div",{className:"media-registry-filters",children:[z("div",{className:"media-registry-search",children:[z(cq,{size:16,className:"search-icon"},void 0,!1,void 0,this),z(C5,{type:"text",placeholder:"Search assets...",value:$,onChange:(N)=>K4(N.target.value)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),z(V5,{value:H,onValueChange:(N)=>R1(N),children:[z(x5,{className:"media-registry-select-trigger",children:z("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[H!=="all"&&z("div",{style:{width:"8px",height:"8px",borderRadius:"50%",backgroundColor:K0(H,Q)}},void 0,!1,void 0,this),z(D5,{placeholder:"All Buckets"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),z(r5,{children:[z(y5,{value:"all",children:z("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[z("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),z(L1,{},void 0,!1,void 0,this),z(U1,{children:"Storage Buckets"},void 0,!1,void 0,this),E.map((N)=>z(y5,{value:N.toLowerCase(),children:z("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[z("div",{style:{width:"8px",height:"8px",borderRadius:"50%",backgroundColor:K0(N,Q)}},void 0,!1,void 0,this),N.toUpperCase()]},void 0,!0,void 0,this)},N,!1,void 0,this))]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),z("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[z(e,{variant:"ghost",size:"icon",onClick:()=>p(!0),title:"Bucket Settings",children:z(dq,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),z("div",{className:"media-registry-view-toggles",children:[z("button",{type:"button",onClick:()=>N0.set("grid"),className:`media-registry-toggle-btn ${J==="grid"?"active":""}`,children:z(Vq,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),z("button",{type:"button",onClick:()=>N0.set("list"),className:`media-registry-toggle-btn ${J==="list"?"active":""}`,children:z(xq,{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),Z&&z("div",{style:{display:"flex",justifyContent:"center",padding:"4rem"},children:z(AY,{size:32,className:"opaca-spin",style:{color:"var(--opaca-accent)"}},void 0,!1,void 0,this)},void 0,!1,void 0,this),!Z&&t.length===0&&z("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:[z(NY,{size:48,style:{color:"var(--opaca-text-dim)",marginBottom:"1rem",opacity:0.3}},void 0,!1,void 0,this),z("h3",{style:{fontSize:"1.25rem",fontWeight:600},children:"No assets found"},void 0,!1,void 0,this),z("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),!Z&&J==="grid"&&(s.length>0||t.length>0)&&z("div",{className:"media-registry-grid",children:[s.map((N)=>z("div",{className:"media-registry-card",onClick:()=>h5(G?`${G}/${N.name}`:N.name),children:[z("div",{className:"media-registry-card-thumb",style:{position:"relative"},children:[z(F2,{size:54,className:"folder-icon"},void 0,!1,void 0,this),H==="all"&&z("div",{style:{position:"absolute",bottom:"8px",right:"8px",display:"flex",gap:"2px"},children:N.buckets.map((x)=>z("div",{title:x,style:{width:"8px",height:"8px",borderRadius:"50%",backgroundColor:K0(x,Q)}},x,!1,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this),z("div",{className:"media-registry-card-body",children:[z("div",{className:"media-registry-card-title",children:N.name},void 0,!1,void 0,this),z("div",{className:"media-registry-card-meta",children:"Folder"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},`folder-${N.name}`,!0,void 0,this)),t.map((N)=>z("div",{className:`media-registry-card ${X?.id===N.id?"active":""}`,onClick:()=>w(N),children:[z("div",{className:"media-registry-card-thumb",style:{position:"relative"},children:[(()=>{let x=N.mimeType||N.mime_type;return x?.startsWith("image/")?z("img",{src:`${q.serverURL||""}/api/assets/${N.id}/view`,alt:N.originalFilename||N.original_filename||"",onError:(z5)=>z5.currentTarget.style.display="none"},void 0,!1,void 0,this):n(x||"")})(),H==="all"&&z("div",{title:`Bucket: ${N.bucket}`,style:{position:"absolute",top:"8px",left:"8px",width:"12px",height:"12px",borderRadius:"50%",backgroundColor:K0(N.bucket,Q),border:"2px solid rgba(0,0,0,0.5)",zIndex:2}},void 0,!1,void 0,this),z("div",{className:"media-registry-overlay",children:z("button",{className:"media-registry-overlay-btn",onClick:(x)=>{x.stopPropagation(),w(N),B(!0)},children:z(A2,{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),z("div",{className:"media-registry-card-body",children:[z("div",{className:"media-registry-card-title",title:N.original_filename,children:N.original_filename},void 0,!1,void 0,this),z("div",{className:"media-registry-card-meta",children:[z("span",{className:"meta-type",children:(N.mimeType||N.mime_type)?.split("/")[1]||"FILE"},void 0,!1,void 0,this),z("span",{children:v(N.filesize)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},N.id,!0,void 0,this))]},void 0,!0,void 0,this),!Z&&J==="list"&&(s.length>0||t.length>0)&&z("div",{className:"opaca-table-container",children:z("table",{className:"opaca-table",children:[z("thead",{children:z("tr",{children:[z("th",{style:{width:"40px"}},void 0,!1,void 0,this),z("th",{children:"Name"},void 0,!1,void 0,this),z("th",{children:"Type"},void 0,!1,void 0,this),z("th",{children:"Size"},void 0,!1,void 0,this),z("th",{children:"Date"},void 0,!1,void 0,this),z("th",{style:{width:"40px"}},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),z("tbody",{children:[s.map((N)=>z("tr",{onClick:()=>h5(G?`${G}/${N.name}`:N.name),style:{cursor:"pointer"},children:[z("td",{children:z("div",{style:{position:"relative",display:"inline-block"},children:[z(F2,{size:20,style:{color:"#eab308"}},void 0,!1,void 0,this),H==="all"&&z("div",{style:{position:"absolute",bottom:"-2px",right:"-2px",display:"flex",gap:"1px"},children:N.buckets.map((x)=>z("div",{style:{width:"6px",height:"6px",borderRadius:"50%",backgroundColor:K0(x,Q)}},x,!1,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),z("td",{style:{fontWeight:600},children:N.name},void 0,!1,void 0,this),z("td",{children:"Folder"},void 0,!1,void 0,this),z("td",{children:"-"},void 0,!1,void 0,this),z("td",{children:"-"},void 0,!1,void 0,this),z("td",{},void 0,!1,void 0,this)]},`folder-${N.name}`,!0,void 0,this)),t.map((N)=>z("tr",{onClick:()=>w(N),style:{cursor:"pointer",background:X?.id===N.id?"rgba(var(--opaca-accent-rgb), 0.1)":"inherit"},children:[z("td",{children:z("div",{style:{width:"32px",height:"32px",borderRadius:"4px",background:"var(--opaca-bg-alt)",display:"flex",alignItems:"center",justifyContent:"center",overflow:"hidden"},children:(()=>{let x=N.mimeType||N.mime_type||"";return x.startsWith("image/")?z("img",{src:`${q.serverURL||""}/api/assets/${N.id}/view`,style:{width:"100%",height:"100%",objectFit:"cover"},alt:""},void 0,!1,void 0,this):n(x)})()},void 0,!1,void 0,this)},void 0,!1,void 0,this),z("td",{children:[z("div",{style:{fontWeight:500},children:N.original_filename},void 0,!1,void 0,this),z("div",{style:{fontSize:"0.75rem",color:"var(--opaca-text-dim)"},children:N.filename},void 0,!1,void 0,this)]},void 0,!0,void 0,this),z("td",{style:{fontSize:"0.875rem"},children:N.mimeType||N.mime_type||""},void 0,!1,void 0,this),z("td",{style:{fontSize:"0.875rem"},children:v(N.filesize)},void 0,!1,void 0,this),z("td",{style:{fontSize:"0.75rem",color:"var(--opaca-text-muted)"},children:FY(N.createdAt||N.created_at)},void 0,!1,void 0,this),z("td",{children:z("button",{onClick:(x)=>{x.stopPropagation(),w(N),B(!0)},style:{background:"none",border:"none",color:"var(--opaca-text-dim)",cursor:"pointer"},children:z(A2,{size:18},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},N.id,!0,void 0,this))]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),W&&W.totalPages>1&&z("div",{className:"media-registry-pagination",children:[z("div",{className:"info",children:["Showing ",(W.page-1)*W.limit+1," to"," ",Math.min(W.page*W.limit,W.totalDocs)," of ",W.totalDocs]},void 0,!0,void 0,this),z("div",{className:"actions",children:[z(e,{variant:"outline",size:"sm",disabled:W.page===1||Z,onClick:()=>Q2(K-1),children:z(Eq,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),z(e,{variant:"outline",size:"sm",disabled:W.page===W.totalPages||Z,onClick:()=>Q2(K+1),children:z(PY,{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),z(c5,{open:!!X&&!L,onOpenChange:(N)=>!N&&w(null),children:z(d5,{onClose:()=>w(null),children:[z(B0,{children:[z(R0,{children:"Asset Details"},void 0,!1,void 0,this),z(P0,{children:"View and manage asset metadata."},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X&&z("div",{className:"media-sheet-flex",children:z("div",{className:"media-sheet-body opaca-scrollbar-hidden",children:[z("div",{className:"media-sheet-preview",children:[(()=>{let N=X.mimeType||X.mime_type||"";return N.startsWith("image/")?z("img",{src:`${q.serverURL||""}/api/assets/${X.id}/view`,alt:X.filename},void 0,!1,void 0,this):n(N)})(),z("div",{className:"overlay",children:z(e,{variant:"secondary",onClick:()=>B(!0),children:[z(A2,{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),z("div",{className:"media-sheet-form",children:[z("div",{className:"media-sheet-group",children:[z(j5,{htmlFor:"filename",children:"Display Name"},void 0,!1,void 0,this),z(C5,{id:"filename",value:X.filename,onChange:(N)=>w({...X,filename:N.target.value})},void 0,!1,void 0,this)]},void 0,!0,void 0,this),z("div",{className:"media-sheet-group",children:[z(j5,{htmlFor:"alt_text",children:"Alt Text"},void 0,!1,void 0,this),z(C5,{id:"alt_text",value:X.alt_text||"",onChange:(N)=>w({...X,alt_text:N.target.value}),placeholder:"SEO friendly description"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),z("div",{className:"media-sheet-group",children:[z(j5,{htmlFor:"caption",children:"Caption"},void 0,!1,void 0,this),z("textarea",{id:"caption",value:X.caption||"",onChange:(N)=>w({...X,caption:N.target.value}),className:"media-sheet-textarea",placeholder:"Write a short caption..."},void 0,!1,void 0,this)]},void 0,!0,void 0,this),z("div",{className:"media-sheet-meta-box",children:[z("div",{className:"media-sheet-meta-row",children:[z("span",{className:"label",children:"File Size"},void 0,!1,void 0,this),z("span",{className:"value",children:v(X.filesize)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),z("div",{className:"media-sheet-meta-row",children:[z("span",{className:"label",children:"Internal Key"},void 0,!1,void 0,this),z("span",{className:"value value-mono",title:X.key,children:X.key},void 0,!1,void 0,this)]},void 0,!0,void 0,this),z("div",{className:"media-sheet-meta-row",children:[z("span",{className:"label",children:"Bucket"},void 0,!1,void 0,this),z("span",{className:"value",children:X.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),X&&z(l2,{className:"media-sheet-actions",children:[z(W1,{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:()=>f(X.id),variant:"destructive",confirmText:"Delete Asset",children:z(e,{variant:"destructive",children:[z(nq,{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),z(e,{variant:"default",onClick:S,children:[z(rq,{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),z(p0,{open:R,onOpenChange:O,children:z(v0,{className:"opaca-dialog-max-w",children:[z(g0,{children:[z(m0,{children:"Create New Folder"},void 0,!1,void 0,this),z(K1,{children:"Organize your assets into folders."},void 0,!1,void 0,this)]},void 0,!0,void 0,this),z("div",{className:"media-dialog-create-body",children:[z(j5,{htmlFor:"newFolderName",children:"Folder Name"},void 0,!1,void 0,this),z(C5,{id:"newFolderName",placeholder:"e.g. products",value:y,onChange:(N)=>M(N.target.value),style:{marginTop:"0.5rem"},onKeyDown:(N)=>N.key==="Enter"&&b()},void 0,!1,void 0,this)]},void 0,!0,void 0,this),z(f0,{children:[z(e,{variant:"outline",onClick:()=>O(!1),children:"Cancel"},void 0,!1,void 0,this),z(e,{onClick:b,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&&X&&typeof document<"u"&&iq(z("div",{className:"opaca-ui-dialog-portal",children:[z("div",{className:"opaca-ui-dialog-overlay",onClick:()=>{B(!1),w(null)}},void 0,!1,void 0,this),z("div",{className:"opaca-ui-dialog-wrapper",children:z("div",{className:"media-preview-container",children:[z("div",{className:"media-preview-header",children:[z("div",{className:"media-preview-title-group",children:[z("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem"},children:[H==="all"&&z("div",{title:`Bucket: ${X.bucket}`,style:{width:"12px",height:"12px",borderRadius:"50%",backgroundColor:K0(X.bucket,Q)}},void 0,!1,void 0,this),z("h2",{children:X.original_filename},void 0,!1,void 0,this)]},void 0,!0,void 0,this),z("span",{className:"badge",children:X.mimeType||X.mime_type||""},void 0,!1,void 0,this)]},void 0,!0,void 0,this),z("button",{className:"media-preview-close-btn",onClick:()=>{B(!1),w(null)},children:z(oq,{size:24},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),z("div",{className:"media-preview-body",children:(()=>{let N=X.mimeType||X.mime_type||"";return N.startsWith("image/")?z("img",{src:`${q.serverURL||""}/api/assets/${X.id}/view`,alt:X.altText||X.alt_text||X.originalFilename||X.original_filename||""},void 0,!1,void 0,this):z("div",{className:"media-preview-no-rich",children:[z("div",{className:"icon-wrapper",children:n(N)},void 0,!1,void 0,this),z("p",{children:"No rich preview available for this file type."},void 0,!1,void 0,this),z(e,{variant:"default",onClick:()=>window.location.href=`${q.serverURL||""}/api/assets/${X.id}/view`,children:[z(jq,{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),z("div",{className:"media-preview-footer",children:[z("div",{className:"media-preview-stat",children:[z("div",{className:"label",children:"Size"},void 0,!1,void 0,this),z("div",{className:"value",children:v(X.filesize)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),z("div",{className:"media-preview-stat",children:[z("div",{className:"label",children:"Created"},void 0,!1,void 0,this),z("div",{className:"value",children:FY(X.createdAt||X.created_at)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),z("div",{className:"media-preview-stat",children:[z("div",{className:"label",children:"Bucket"},void 0,!1,void 0,this),z("div",{className:"value",children:X.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),z(p0,{open:m,onOpenChange:p,children:z(v0,{className:"media-registry-dialog-sm",children:[z(g0,{children:z(m0,{children:"Bucket Colors"},void 0,!1,void 0,this)},void 0,!1,void 0,this),z("div",{className:"media-bucket-settings",children:E.map((N)=>z("div",{className:"bucket-setting-row",children:[z("span",{className:"bucket-name",children:N},void 0,!1,void 0,this),z("div",{className:"color-presets",children:y2.map((x)=>{let z5=K0(N,Q)===x;return z("button",{className:`color-bubble ${z5?"active":""}`,style:{backgroundColor:x},onClick:()=>_4(N,x),children:z5&&z(uq,{size:12,color:"white"},void 0,!1,void 0,this)},x,!1,void 0,this)})},void 0,!1,void 0,this)]},N,!0,void 0,this))},void 0,!1,void 0,this),z(f0,{children:z(e,{onClick:()=>p(!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 IY,Copy as WW,ExternalLink as ZW,Key as HW,Loader2 as bY,Package as O2,Plus as CY,Settings as XW,Trash2 as JW}from"lucide-react";import{useCallback as zW,useEffect as GW,useState as I5}from"react";import{useState as h1,useEffect as tq,useCallback as sq}from"react";import{Loader2 as OY,Save as eq,ArrowLeft as YW,Package as qW}from"lucide-react";import{jsxDEV as G5}from"react/jsx-dev-runtime";function kY({plugin:Y,onBack:q,notify:W}){let[Z,J]=h1({}),[H,G]=h1(!0),[$,K]=h1(!1),[Q,U]=h1(null),_=sq(async()=>{try{G(!0);let B=(await j.get(`api/plugin-settings?pluginName=${Y.name}`).json()).docs?.find((y)=>y.pluginName===Y.name);if(B)J(B.config||{}),U(B.id);else{let y=(Y.configSchema||[]).reduce((M,R)=>{if(R.defaultValue!==void 0)M[R.name]=R.defaultValue;return M},{});J(y)}}catch(L){console.error("Failed to load plugin settings:",L),W?.("Failed to load plugin settings","error")}finally{G(!1)}},[Y,W]);tq(()=>{_()},[_]);let X=async(L)=>{L.preventDefault();try{K(!0);let B={pluginName:Y.name,config:Z};if(Q)await j.patch(`api/plugin-settings/${Q}`,{json:B});else await j.post("api/plugin-settings",{json:B});W?.("Settings saved successfully. Restart the server to apply changes."),_()}catch(B){console.error("Failed to save settings:",B),W?.("Failed to save settings","error")}finally{K(!1)}},w=(L,B)=>{J((y)=>({...y,[L]:B}))};if(H)return G5("div",{style:{display:"flex",justifyContent:"center",padding:"4rem"},children:G5(OY,{className:"opaca-spin",size:32,color:"var(--opaca-text-muted)"},void 0,!1,void 0,this)},void 0,!1,void 0,this);return G5("div",{className:"opaca-card",style:{padding:"2.5rem",border:"1px solid var(--opaca-border-strong)"},children:[G5("button",{onClick:q,style:{display:"flex",alignItems:"center",gap:"0.5rem",background:"none",border:"none",color:"var(--opaca-text-dim)",cursor:"pointer",fontSize:"0.875rem",marginBottom:"1.5rem",padding:0},children:[G5(YW,{size:16},void 0,!1,void 0,this),"Back to Plugins"]},void 0,!0,void 0,this),G5("div",{style:{display:"flex",alignItems:"center",gap:"1rem",marginBottom:"2.5rem"},children:[G5("div",{style:{width:"48px",height:"48px",borderRadius:"12px",background:"rgba(var(--opaca-accent-rgb), 0.1)",display:"flex",alignItems:"center",justifyContent:"center",color:"var(--opaca-accent)"},children:G5(qW,{size:24},void 0,!1,void 0,this)},void 0,!1,void 0,this),G5("div",{children:[G5("h2",{style:{fontSize:"1.5rem",fontWeight:"600",margin:0},children:[Y.label||Y.name," Settings"]},void 0,!0,void 0,this),G5("p",{style:{color:"var(--opaca-text-dim)",margin:"0.25rem 0 0 0"},children:"Configure your plugin parameters below."},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),G5("form",{onSubmit:X,style:{display:"grid",gap:"2rem"},children:[G5("div",{style:{display:"grid",gap:"1.5rem"},children:Y.configSchema?.map((L)=>G5(B5,{field:L,value:Z[L.name],onChange:(B)=>w(L.name,B),parentData:Z},L.name,!1,void 0,this))},void 0,!1,void 0,this),G5("div",{style:{display:"flex",gap:"1rem",marginTop:"1rem"},children:G5("button",{type:"submit",className:"opaca-btn opaca-btn-primary",disabled:$,style:{padding:"0.75rem 2rem",fontSize:"1rem"},children:[$?G5(OY,{size:18,className:"opaca-spin"},void 0,!1,void 0,this):G5(eq,{size:18},void 0,!1,void 0,this),"Save Settings"]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}import{jsxDEV as P}from"react/jsx-dev-runtime";function k2({notify:Y,config:q}){let[W,Z]=I5([]),[J,H]=I5(!0),[G,$]=I5(!1),[K,Q]=I5(null),[U,_]=I5(""),[X,w]=I5("31536000"),[L,B]=I5(!1),[y,M]=I5({}),[R,O]=I5("general"),[m,p]=I5(null),F=zW(async()=>{try{H(!0);let I=await j.get("api/auth/api-key/list").json();Z(I.apiKeys||[])}catch(I){console.error(I),Y?.("Failed to load API keys","error")}finally{H(!1)}},[Y]);GW(()=>{F()},[F]);let E=(I,v)=>{M((n)=>{let t=n[I]||[],s={...n};if(t.includes(v)){let N=t.filter((x)=>x!==v);if(N.length===0)delete s[I];else s[I]=N}else s[I]=[...t,v];return s})},T=(I)=>{M((v)=>({...v,[I]:C}))},A=(I)=>{M((v)=>{let n={...v};return delete n[I],n})},b=async(I)=>{if(I.preventDefault(),!U.trim())return;try{$(!0);let v=await j.post("api/__admin/api-key/create",{json:{name:U,expiresIn:X?Number(X):void 0,permissions:y}}).json();Q(v.key),_(""),w("31536000"),M({}),await F(),Y?.("API Key generated successfully")}catch(v){console.error("API Key Creation Error:",v);let n=v.response?.json?await v.response.json().catch(()=>({})):{};Y?.(n.message||v.message||"Failed to generate API key","error")}finally{$(!1)}},S=async(I)=>{if(!confirm("Are you sure you want to delete this API key? This action cannot be undone."))return;try{await j.post("api/auth/api-key/delete",{json:{keyId:I}}),await F(),Y?.("API Key deleted successfully")}catch(v){console.error(v),Y?.("Failed to delete API key","error")}},f=()=>{if(K)navigator.clipboard.writeText(K),B(!0),setTimeout(()=>B(!1),2000),Y?.("API Key copied to clipboard")},C=["read","create","update","delete"];return P("div",{className:"opaca-admin-form",children:[P("div",{className:"opaca-header",children:P("div",{children:[P("h1",{className:"opaca-title",children:"Settings"},void 0,!1,void 0,this),P("p",{className:"opaca-subtitle",children:"Manage project settings, API Keys and Plugins."},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),P("div",{style:{display:"flex",gap:"2rem",marginBottom:"2.5rem",borderBottom:"1px solid var(--opaca-border)",padding:"0 0.5rem"},children:[P("button",{onClick:()=>O("general"),style:{padding:"1rem 0.5rem",fontSize:"0.925rem",fontWeight:R==="general"?"600":"500",color:R==="general"?"var(--opaca-text)":"var(--opaca-text-dim)",borderBottom:"2px solid",borderColor:R==="general"?"var(--opaca-accent)":"transparent",background:"transparent",cursor:"pointer",transition:"all 0.2s"},children:"General & Keys"},void 0,!1,void 0,this),P("button",{onClick:()=>O("plugins"),style:{padding:"1rem 0.5rem",fontSize:"0.925rem",fontWeight:R==="plugins"?"600":"500",color:R==="plugins"?"var(--opaca-text)":"var(--opaca-text-dim)",borderBottom:"2px solid",borderColor:R==="plugins"?"var(--opaca-accent)":"transparent",background:"transparent",cursor:"pointer",transition:"all 0.2s",display:"flex",alignItems:"center",gap:"0.5rem"},children:["Plugins",q.plugins&&q.plugins.length>0&&P("span",{style:{fontSize:"0.65rem",background:"var(--opaca-accent)",color:"white",padding:"1px 6px",borderRadius:"10px",fontWeight:"700"},children:q.plugins.length},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),P("div",{style:{display:R==="general"?"grid":"none",gap:"2.5rem"},children:[P("div",{className:"opaca-card",style:{padding:"2.5rem",border:"1px solid var(--opaca-border-strong)"},children:[P("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem",marginBottom:"1rem"},children:[P("div",{style:{width:"32px",height:"32px",borderRadius:"8px",background:"rgba(var(--opaca-accent-rgb), 0.1)",display:"flex",alignItems:"center",justifyContent:"center"},children:P(CY,{size:18,color:"var(--opaca-accent)"},void 0,!1,void 0,this)},void 0,!1,void 0,this),P("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),P("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),P("form",{onSubmit:b,style:{display:"grid",gap:"2rem"},children:[P("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"1rem"},children:[P("div",{className:"opaca-form-group",style:{margin:0},children:[P("label",{className:"opaca-label",htmlFor:"key-name",children:"Key Name"},void 0,!1,void 0,this),P("input",{id:"key-name",type:"text",className:"opaca-input",style:{fontSize:"1rem",padding:"0.875rem 1rem"},value:U,onChange:(I)=>_(I.target.value),placeholder:"e.g. Production Mobile App",required:!0},void 0,!1,void 0,this),P("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),P("div",{className:"opaca-form-group",style:{margin:0},children:[P("label",{className:"opaca-label",htmlFor:"expires-in",children:"Expiration"},void 0,!1,void 0,this),P("select",{id:"expires-in",className:"opaca-input",style:{fontSize:"1rem",padding:"0.875rem 1rem",height:"auto"},value:X,onChange:(I)=>w(I.target.value),children:[P("option",{value:"2592000",children:"30 days"},void 0,!1,void 0,this),P("option",{value:"7776000",children:"90 days"},void 0,!1,void 0,this),P("option",{value:"31536000",children:"1 year"},void 0,!1,void 0,this),P("option",{value:"",children:"Never expire"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),P("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),P("div",{style:{background:"rgba(var(--opaca-card-bg-rgb), 0.5)",border:"1px solid var(--opaca-border)",borderRadius:"12px",overflow:"hidden"},children:[P("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:[P("label",{htmlFor:"permissions-matrix",className:"opaca-label",style:{margin:0,fontWeight:"600"},children:"Permissions Matrix"},void 0,!1,void 0,this),P("span",{style:{fontSize:"0.75rem",color:"var(--opaca-text-muted)"},children:["Actions for ",q.collections.length," ",q.collections.length===1?"collection":"collections"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),P("div",{style:{overflowX:"auto"},children:P("table",{style:{width:"100%",borderCollapse:"collapse",textAlign:"left"},children:[P("thead",{children:P("tr",{style:{borderBottom:"1px solid var(--opaca-border)",background:"rgba(255,255,255,0.02)"},children:[P("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),C.map((I)=>P("th",{style:{padding:"1rem",fontSize:"0.75rem",fontWeight:"600",color:"var(--opaca-text-muted)",textAlign:"center",textTransform:"uppercase"},children:I},I,!1,void 0,this)),P("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),P("tbody",{children:q.collections.map((I)=>{let v=y[I.slug]||[],n=C.every((t)=>v.includes(t));return P("tr",{style:{borderBottom:"1px solid var(--opaca-border)",transition:"background 0.2s"},children:[P("td",{style:{padding:"1rem 1.25rem"},children:P("span",{style:{fontSize:"0.875rem",fontWeight:"600"},children:I.slug},void 0,!1,void 0,this)},void 0,!1,void 0,this),C.map((t)=>{let s=v.includes(t);return P("td",{style:{padding:"0.5rem",textAlign:"center"},children:P("button",{type:"button",onClick:()=>E(I.slug,t),style:{width:"32px",height:"32px",borderRadius:"6px",border:"1px solid",borderColor:s?"var(--opaca-accent)":"var(--opaca-border)",background:s?"rgba(var(--opaca-accent-rgb), 0.15)":"transparent",color:s?"var(--opaca-accent)":"var(--opaca-text-muted)",display:"inline-flex",alignItems:"center",justifyContent:"center",cursor:"pointer",transition:"all 0.2s"},title:`${t.charAt(0).toUpperCase()+t.slice(1)} ${I.slug}`,children:P(IY,{size:14,style:{opacity:s?1:0.1},strokeWidth:3},void 0,!1,void 0,this)},void 0,!1,void 0,this)},t,!1,void 0,this)}),P("td",{style:{padding:"1rem 1.25rem",textAlign:"right"},children:P("button",{type:"button",onClick:()=>n?A(I.slug):T(I.slug),style:{fontSize:"0.75rem",color:n?"var(--opaca-accent)":"var(--opaca-text-dim)",background:"transparent",border:"1px solid",borderColor:n?"var(--opaca-accent)":"var(--opaca-border)",padding:"0.3rem 0.75rem",borderRadius:"6px",cursor:"pointer",transition:"all 0.2s"},children:n?"All Actions":"Full Access?"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},I.slug,!0,void 0,this)})},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),q.collections.length===0&&P("div",{style:{padding:"3rem 1rem",textAlign:"center"},children:P("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),P("button",{type:"submit",className:"opaca-btn opaca-btn-primary",disabled:G||!U.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:[G?P(bY,{size:18,className:"opaca-spin"},void 0,!1,void 0,this):P(CY,{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),P("div",{style:{padding:"0 0.5rem"},children:[P("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem",marginBottom:"1.5rem"},children:[P(HW,{size:18,color:"var(--opaca-text-dim)"},void 0,!1,void 0,this),P("h2",{style:{fontSize:"1.125rem",fontWeight:"500",margin:0},children:"Existing Keys"},void 0,!1,void 0,this),P("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),K&&P("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:[P("div",{style:{position:"absolute",top:0,left:0,width:"4px",height:"100%",background:"var(--opaca-success)"}},void 0,!1,void 0,this),P("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"flex-start",marginBottom:"1.25rem"},children:[P("div",{children:[P("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),P("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),P("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),P("div",{style:{display:"flex",gap:"0.75rem"},children:[P("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:K},void 0,!1,void 0,this),P("button",{type:"button",onClick:f,className:"opaca-btn",style:{background:"white",color:"#000",width:"48px",height:"48px",borderRadius:"10px"},children:L?P(IY,{size:18},void 0,!1,void 0,this):P(WW,{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),J?P("div",{style:{display:"flex",justifyContent:"center",padding:"2rem"},children:P(bY,{size:24,className:"opaca-spin",color:"var(--opaca-text-muted)"},void 0,!1,void 0,this)},void 0,!1,void 0,this):W.length===0?P("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):P("div",{style:{display:"grid",gap:"0.5rem"},children:W.map((I)=>P("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:[P("div",{children:[P("div",{style:{fontWeight:"500",fontSize:"0.875rem",marginBottom:"0.25rem"},children:I.name},void 0,!1,void 0,this),P("div",{style:{display:"flex",gap:"1rem",fontSize:"0.75rem",color:"var(--opaca-text-dim)"},children:[P("span",{children:["Created: ",new Date(I.createdAt).toLocaleDateString()]},void 0,!0,void 0,this),P("span",{children:["Prefix: ",I.prefix,"..."]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),I.permissions&&Object.keys(I.permissions).length>0&&P("div",{style:{marginTop:"0.75rem",display:"flex",flexWrap:"wrap",gap:"0.375rem"},children:Object.entries(I.permissions).map(([v,n])=>P("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:[P("strong",{style:{color:"var(--opaca-text)"},children:[v,":"]},void 0,!0,void 0,this)," ",n.join(", ")]},v,!0,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this),P("button",{type:"button",onClick:()=>S(I.id),className:"opaca-btn",style:{color:"var(--opaca-error)",background:"transparent",border:"none",padding:"0.5rem"},title:"Revoke Key",children:P(JW,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},I.id,!0,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),P("div",{style:{display:R==="plugins"?"grid":"none",gap:"2.5rem"},children:m?P(kY,{plugin:m,onBack:()=>p(null),notify:Y},void 0,!1,void 0,this):P("div",{style:{padding:"0 0.5rem"},children:[P("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem",marginBottom:"1.5rem"},children:[P(O2,{size:18,color:"var(--opaca-text-dim)"},void 0,!1,void 0,this),P("h2",{style:{fontSize:"1.125rem",fontWeight:"500",margin:0},children:"Installed Plugins"},void 0,!1,void 0,this),P("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),P("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(350px, 1fr))",gap:"1.25rem"},children:[q.plugins?.map((I)=>P("div",{className:"opaca-card",style:{padding:"1.5rem",display:"flex",flexDirection:"column",gap:"1rem",border:"1px solid var(--opaca-border-strong)",position:"relative",overflow:"hidden"},children:[P("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"flex-start"},children:[P("div",{style:{display:"flex",gap:"1rem",alignItems:"center"},children:[P("div",{style:{width:"42px",height:"42px",borderRadius:"10px",background:"rgba(var(--opaca-accent-rgb), 0.1)",display:"flex",alignItems:"center",justifyContent:"center",color:"var(--opaca-accent)"},children:P(O2,{size:22},void 0,!1,void 0,this)},void 0,!1,void 0,this),P("div",{children:[P("h3",{style:{fontSize:"1rem",fontWeight:"600",margin:0},children:I.label||I.name},void 0,!1,void 0,this),P("div",{style:{display:"flex",gap:"0.5rem",alignItems:"center",marginTop:"0.25rem"},children:[P("span",{style:{fontSize:"0.75rem",color:"var(--opaca-text-muted)"},children:["v",I.version||"1.0.0"]},void 0,!0,void 0,this),I.author&&P("span",{style:{fontSize:"0.75rem",color:"var(--opaca-text-muted)"},children:["• by ",I.author]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),I.homepage&&P("a",{href:I.homepage,target:"_blank",rel:"noopener noreferrer",style:{color:"var(--opaca-text-dim)"},children:P(ZW,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),P("p",{style:{fontSize:"0.875rem",color:"var(--opaca-text-dim)",lineHeight:"1.5",margin:0},children:I.description||"No description provided for this plugin."},void 0,!1,void 0,this),P("div",{style:{marginTop:"0.5rem",paddingTop:"1rem",borderTop:"1px solid var(--opaca-border)",display:"flex",justifyContent:"space-between",alignItems:"center"},children:[P("div",{style:{display:"flex",gap:"0.5rem"},children:[P("span",{style:{fontSize:"0.7rem",padding:"0.125rem 0.5rem",borderRadius:"100px",background:"rgba(52, 211, 153, 0.1)",color:"var(--opaca-success)",fontWeight:"600"},children:"Active"},void 0,!1,void 0,this),I.configSchema&&P("button",{onClick:()=>p(I),style:{fontSize:"0.7rem",padding:"0.125rem 0.6rem",borderRadius:"100px",background:"rgba(var(--opaca-accent-rgb), 0.1)",color:"var(--opaca-accent)",fontWeight:"700",border:"1px solid var(--opaca-accent)",cursor:"pointer",display:"flex",alignItems:"center",gap:"3px",transition:"all 0.2s"},children:[P(XW,{size:10},void 0,!1,void 0,this),"Configure"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),P("span",{style:{fontSize:"0.75rem",color:"var(--opaca-text-dim)"},children:["ID: ",I.name]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},I.name,!0,void 0,this)),(!q.plugins||q.plugins.length===0)&&P("div",{style:{gridColumn:"1 / -1",textAlign:"center",padding:"3rem",background:"rgba(0,0,0,0.05)",borderRadius:"12px",border:"2px dashed var(--opaca-border)"},children:[P(O2,{size:32,style:{opacity:0.2,marginBottom:"1rem"}},void 0,!1,void 0,this),P("p",{style:{color:"var(--opaca-text-muted)",margin:0},children:"No plugins installed in this project."},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)}import{jsxDEV as c,Fragment as UW}from"react/jsx-dev-runtime";function hY({config:Y,serverUrl:q,initialNeedsInit:W}){let[Z,J]=$W(!0);SY(()=>{if(typeof window<"u")window.opaca={ui:{registerSidebarItem:C0,registerAdminRoute:C0}}},[]),SY(()=>{if(!q||!q.startsWith("http"))return;u2(q),h2(q),J1(),(async()=>{try{try{if(W!==void 0)Q1(W);else{let O=await j.get("api/__admin/setup").json();m5.debug("Setup status:",O.initialized),Q1(!O.initialized)}}catch(O){m5.warn("Failed to check setup status:",O)}let R=null;try{if(Y)R=Y,j1(Y);else{let O=await j.get("api/__admin/metadata").json();R=O,j1(O)}}catch(O){m5.error("Failed to fetch metadata:",O)}if(R?.plugins){for(let O of R.plugins)if(O.adminUI?.component)C0({label:O.label||O.name,icon:O.icon||"Puzzle",path:`/admin/${O.name.toLowerCase()}`,component:O.adminUI.component})}if(R&&R.plugins){let O=[];for(let m of R.plugins){if(m.adminUI?.source&&m.adminUI.component){if(typeof customElements<"u"&&!customElements.get(m.adminUI.component))try{Function(m.adminUI.source)(),m5.debug(`Inlined source executed for ${m.name}`)}catch(p){m5.error(`Failed to execute inlined source for ${m.name}:`,p)}}if(m.adminAssets){let p=m.adminAssets;p.styles?.forEach((F)=>{let E=F.startsWith("/")?`${q}${F}`:F;if(!document.querySelector(`link[href="${E}"]`)){let T=document.createElement("link");T.rel="stylesheet",T.href=E,document.head.appendChild(T)}}),p.scripts?.forEach((F)=>{let E=F.startsWith("/")?`${q}${F}`:F;if(!document.querySelector(`script[src="${E}"]`))O.push(new Promise((T)=>{let A=document.createElement("script");A.src=E,A.onload=()=>T(),A.onerror=()=>{m5.error(`Failed to load script: ${E}`),T()},document.body.appendChild(A)}))})}}if(O.length>0)await Promise.all(O)}}catch(R){m5.error("Unexpected initialization error:",R)}finally{J(!1)}})()},[Y,W,q]);let H=_0(N5),G=_0(E1),$=_0(q0),K=_0(f5),Q=_0(Z0),U=_0(b5),_=_0(W0),X=async(M)=>{await m1(M)},w=async()=>{await f1()},L=_W((M)=>{let R=M.startsWith("_")?M.replace(/^_/,""):M;f5.open(`/admin/collections/${R}`)},[]);if(!q||!q.startsWith("http"))return c("div",{className:"opaca-admin",children:c("div",{className:"opaca-loading-screen",children:c("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem"},children:[c(QW,{size:24,className:"opaca-spin"},void 0,!1,void 0,this),c("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(G)return c("div",{className:"opaca-admin",children:c(wY,{onSuccess:()=>{Q1(!1),l("Welcome! System initialized successfully")}},void 0,!1,void 0,this)},void 0,!1,void 0,this);if(!U&&!Q)return c("div",{className:"opaca-admin",children:c(RY,{onLogin:X},void 0,!1,void 0,this)},void 0,!1,void 0,this);if(Z||U||!H)return c("div",{className:"opaca-admin",children:c("div",{className:"opaca-loading-screen",children:c("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem"},children:[c("svg",{className:"opaca-spin",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[c("title",{children:"Loading"},void 0,!1,void 0,this),c("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),c("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 B=[];if(K){if(K.route==="collections"){B.push({label:"Collections"});let M=K.params.slug,R=H.collections.find((O)=>O.slug===M||O.slug===`_${M}`);B.push({label:R?.label||(M.startsWith("_")?M.replace(/^_/,""):M).charAt(0).toUpperCase()+(M.startsWith("_")?M.replace(/^_/,""):M).slice(1)})}else if(K.route==="document"){B.push({label:"Collections"});let M=K.params.slug,R=H.collections.find((O)=>O.slug===M||O.slug===`_${M}`);B.push({label:R?.label||(M.startsWith("_")?M.replace(/^_/,""):M).charAt(0).toUpperCase()+(M.startsWith("_")?M.replace(/^_/,""):M).slice(1),href:`/admin/collections/${M.startsWith("_")?M.replace(/^_/,""):M}`}),B.push({label:K.params.id==="create"?"Create":"Edit"})}else if(K.route==="globals"){B.push({label:"Globals"});let M=K.params.slug;B.push({label:M.charAt(0).toUpperCase()+M.slice(1)})}else if(K.route==="settings")B.push({label:"Settings"});else if(K.route==="plugin"){let M=K.params.path,R=M==="settings"?"/admin/settings":`/admin/${M}`,O=_.find((m)=>m.path===R);if(O)B.push({label:O.label})}}let y=()=>{if(!K||K.route==="dashboard")return c(v4,{config:H,user:Q?.user},void 0,!1,void 0,this);if(K.route==="collections"){let M=K.params.slug,R=H.collections.find((O)=>O.slug===M||O.slug===`_${M}`);if(!R)return c("div",{children:"Not Found"},void 0,!1,void 0,this);if(typeof R.admin==="object"&&R.admin.disableAdmin)return c("div",{children:"Not Found"},void 0,!1,void 0,this);if(R.admin===!1)return c("div",{children:"Not Found"},void 0,!1,void 0,this);if(R.slug==="_opaca_assets")return c(yY,{collection:R,config:H},void 0,!1,void 0,this);return c(p4,{collection:R},void 0,!1,void 0,this)}if(K.route==="document"){let{slug:M,id:R}=K.params,O=H.collections.find((m)=>m.slug===M||m.slug===`_${M}`);if(!O)return c("div",{children:"Not Found"},void 0,!1,void 0,this);return c(KY,{collection:O,id:R,onBack:()=>L(M)},void 0,!1,void 0,this)}if(K.route==="globals"){let M=K.params.slug,R=H.globals?.find((O)=>O.slug===M);if(!R)return c("div",{children:"Not Found"},void 0,!1,void 0,this);return c(UY,{global:R,onBack:()=>f5.open("/admin")},void 0,!1,void 0,this)}if(K.route==="settings")return c(k2,{config:H},void 0,!1,void 0,this);if(K.route==="plugin"){let M=K.params.path;if(M==="settings")return c(k2,{config:H},void 0,!1,void 0,this);let R=`/admin/${M.toLowerCase()}`,O=_.find((m)=>m.path.toLowerCase()===R);if(O){if(O.component&&customElements.get(O.component))return KW.createElement(O.component,{"server-url":q,"plugin-name":M.toLowerCase()});return c("div",{style:{padding:"4rem",textAlign:"center",display:"flex",flexDirection:"column",alignItems:"center",gap:"1rem"},children:[c("div",{className:"opaca-spin",children:c("svg",{viewBox:"0 0 24 24",width:"32",height:"32",stroke:"currentColor",strokeWidth:"2",fill:"none",children:c("path",{d:"M12 2v4M12 18v4M4.93 4.93l2.83 2.83M16.24 16.24l2.83 2.83M2 12h4M18 12h4M4.93 19.07l2.83-2.83M16.24 7.76l2.83-2.83"},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this),c("p",{style:{fontWeight:500},children:"Loading plugin UI..."},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}}return c("div",{children:"404"},void 0,!1,void 0,this)};return c(UW,{children:[c(t2,{config:H,user:Q?.user,onLogout:w,children:c("div",{style:{maxWidth:"100%",margin:"0 auto",width:"100%",paddingBottom:"4rem"},children:[B.length>0&&c(s2,{items:B},void 0,!1,void 0,this),y()]},void 0,!0,void 0,this)},void 0,!1,void 0,this),c(e2,{toasts:$,onClear:g1},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var wW=LW(hY,{props:{serverUrl:"string",config:"json",initialNeedsInit:"boolean"}});if(typeof window<"u"&&!customElements.get("opaca-admin"))customElements.define("opaca-admin",wW);export{wW as OpacaAdminWebComponent};