convex-cms 0.0.9-alpha.9 → 0.0.10

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 (117) hide show
  1. package/admin/src/components/Header.tsx +1 -1
  2. package/admin/src/components/RouteGuard.tsx +1 -1
  3. package/admin/src/components/UploadDropzone.tsx +1 -1
  4. package/admin/src/components/ui/sidebar.tsx +1 -1
  5. package/admin/src/contexts/AuthContext.tsx +1 -1
  6. package/admin/src/embed/components/EmbedSidebar.tsx +10 -10
  7. package/admin/src/embed/contexts/ApiContext.tsx +1 -1
  8. package/admin/src/hooks/usePermissions.ts +1 -1
  9. package/admin/src/index.css +432 -0
  10. package/admin/src/lib/cmsExports.ts +6 -0
  11. package/admin/src/pages/DashboardPage.tsx +2 -3
  12. package/admin/src/routes/__root.tsx +1 -1
  13. package/admin-dist/nitro.json +1 -1
  14. package/admin-dist/public/assets/{CmsEmptyState-DTlpzjOI.js → CmsEmptyState-BKeL4DBB.js} +1 -1
  15. package/admin-dist/public/assets/CmsFilterBar-CEpMHd_c.js +1 -0
  16. package/admin-dist/public/assets/{CmsPageHeader-0REGRH4X.js → CmsPageHeader-CIEkTbyH.js} +1 -1
  17. package/admin-dist/public/assets/{CmsStatusBadge-D_n8u8xa.js → CmsStatusBadge-BFMOsfMW.js} +1 -1
  18. package/admin-dist/public/assets/{CmsSurface-BHmvNai4.js → CmsSurface-kqqaFKUI.js} +1 -1
  19. package/admin-dist/public/assets/CmsTable-Db53Exq0.js +1 -0
  20. package/admin-dist/public/assets/ContentEntryEditor-Ct7cHayy.js +4 -0
  21. package/admin-dist/public/assets/TaxonomyFilter-Bm1DI1A7.js +1 -0
  22. package/admin-dist/public/assets/_contentTypeId-BekeCblX.js +1 -0
  23. package/admin-dist/public/assets/{_entryId-jPXz4z9T.js → _entryId-CoZDE0l0.js} +1 -1
  24. package/admin-dist/public/assets/{alert-CG97cMfC.js → alert-CpLdsTGU.js} +1 -1
  25. package/admin-dist/public/assets/{badge-C6qt24oj.js → badge-BQAotc5B.js} +1 -1
  26. package/admin-dist/public/assets/{circle-check-big-PltpxuB1.js → circle-check-big-BF3Y5nES.js} +1 -1
  27. package/admin-dist/public/assets/{command-CJ8i86fd.js → command-lEq6f_Ee.js} +1 -1
  28. package/admin-dist/public/assets/content-DH6k0dN6.js +1 -0
  29. package/admin-dist/public/assets/content-types-DHr9tc2V.js +1 -0
  30. package/admin-dist/public/assets/index-Cf0lbl0G.js +1 -0
  31. package/admin-dist/public/assets/index-D-4wFfgU.css +1 -0
  32. package/admin-dist/public/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  33. package/admin-dist/public/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  34. package/admin-dist/public/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  35. package/admin-dist/public/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  36. package/admin-dist/public/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  37. package/admin-dist/public/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  38. package/admin-dist/public/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  39. package/admin-dist/public/assets/jetbrains-mono-cyrillic-400-normal-BEIGL1Tu.woff2 +0 -0
  40. package/admin-dist/public/assets/jetbrains-mono-cyrillic-400-normal-ugxPyKxw.woff +0 -0
  41. package/admin-dist/public/assets/jetbrains-mono-greek-400-normal-B9oWc5Lo.woff +0 -0
  42. package/admin-dist/public/assets/jetbrains-mono-greek-400-normal-C190GLew.woff2 +0 -0
  43. package/admin-dist/public/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff +0 -0
  44. package/admin-dist/public/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2 +0 -0
  45. package/admin-dist/public/assets/jetbrains-mono-latin-ext-400-normal-Bc8Ftmh3.woff2 +0 -0
  46. package/admin-dist/public/assets/jetbrains-mono-latin-ext-400-normal-fXTG6kC5.woff +0 -0
  47. package/admin-dist/public/assets/jetbrains-mono-vietnamese-400-normal-CqNFfHCs.woff +0 -0
  48. package/admin-dist/public/assets/main-B-6700eG.js +137 -0
  49. package/admin-dist/public/assets/media-DY5zD52L.js +1 -0
  50. package/admin-dist/public/assets/{new._contentTypeId-qsvo01mH.js → new._contentTypeId-Dq_NqTQV.js} +1 -1
  51. package/admin-dist/public/assets/{pencil-gAL0R34f.js → pencil-CI_KfxSx.js} +1 -1
  52. package/admin-dist/public/assets/refresh-cw-BrXg9a2r.js +1 -0
  53. package/admin-dist/public/assets/rotate-ccw-PwzxdPxd.js +1 -0
  54. package/admin-dist/public/assets/{scroll-area-CJBhf9pf.js → scroll-area-DX_nZYp8.js} +1 -1
  55. package/admin-dist/public/assets/{search-WXp6KxDJ.js → search-DlwBH4C5.js} +1 -1
  56. package/admin-dist/public/assets/settings-2mx3_ORG.js +1 -0
  57. package/admin-dist/public/assets/{switch-Ck9ecqEX.js → switch-CjPi4DKH.js} +1 -1
  58. package/admin-dist/public/assets/{tabs-vQYu8rjC.js → tabs-B5X37GEM.js} +1 -1
  59. package/admin-dist/public/assets/tanstack-adapter-KSm-nO5L.js +1 -0
  60. package/admin-dist/public/assets/{taxonomies-DvILUNvr.js → taxonomies-CHjJKNlR.js} +1 -1
  61. package/admin-dist/public/assets/trash-Cle-tcqq.js +1 -0
  62. package/admin-dist/public/assets/{useBreadcrumbLabel-tlSh7dtO.js → useBreadcrumbLabel-yZQG_N_3.js} +1 -1
  63. package/admin-dist/public/assets/{usePermissions-BTGdTOJS.js → usePermissions-D6vsoaJf.js} +1 -1
  64. package/admin-dist/server/_libs/convex-helpers.mjs +1077 -2
  65. package/admin-dist/server/_libs/convex.mjs +222 -13
  66. package/admin-dist/server/_libs/lucide-react.mjs +57 -51
  67. package/admin-dist/server/_ssr/{CmsEmptyState-CB6e53i5.mjs → CmsEmptyState-DzzuQG0S.mjs} +1 -1
  68. package/admin-dist/server/_ssr/CmsFilterBar-C5XADS12.mjs +81 -0
  69. package/admin-dist/server/_ssr/{CmsPageHeader-COUHuECp.mjs → CmsPageHeader-DZ6h7smh.mjs} +1 -1
  70. package/admin-dist/server/_ssr/{CmsStatusBadge-kMTL6koE.mjs → CmsStatusBadge-D-YFSAa1.mjs} +3 -3
  71. package/admin-dist/server/_ssr/{CmsSurface-D1HDYjRg.mjs → CmsSurface-Cv51NBLZ.mjs} +1 -1
  72. package/admin-dist/server/_ssr/CmsTable-DG88C5nO.mjs +189 -0
  73. package/admin-dist/server/_ssr/{ContentEntryEditor-Bq8FR_uK.mjs → ContentEntryEditor-CRjwXB17.mjs} +10 -10
  74. package/admin-dist/server/_ssr/{TaxonomyFilter-bm_p4ADg.mjs → TaxonomyFilter-xGwcgtjr.mjs} +3 -3
  75. package/admin-dist/server/_ssr/{_contentTypeId-B7obLmi_.mjs → _contentTypeId-DRCfeKkm.mjs} +53 -12
  76. package/admin-dist/server/_ssr/{_entryId-B4zhQqFg.mjs → _entryId-DULm2TDy.mjs} +11 -11
  77. package/admin-dist/server/_ssr/_tanstack-start-manifest_v-iX3K33p1.mjs +4 -0
  78. package/admin-dist/server/_ssr/{badge-NOEC9bkk.mjs → badge-CbjIvhb6.mjs} +1 -1
  79. package/admin-dist/server/_ssr/{command-h4-OYNBo.mjs → command-xB2uiYps.mjs} +2 -2
  80. package/admin-dist/server/_ssr/{content-CShtLuhK.mjs → content-BfLBaJCZ.mjs} +108 -138
  81. package/admin-dist/server/_ssr/{content-types-PeyRyfbc.mjs → content-types-DZbF6O2q.mjs} +130 -119
  82. package/admin-dist/server/_ssr/{index-CplFXpGg.mjs → index-Cfe8sZv5.mjs} +65 -39
  83. package/admin-dist/server/_ssr/index.mjs +2 -2
  84. package/admin-dist/server/_ssr/{media-QAkNdX54.mjs → media-Bds2AnPC.mjs} +36 -56
  85. package/admin-dist/server/_ssr/{new._contentTypeId-DEJyMphJ.mjs → new._contentTypeId-DGvz_tlW.mjs} +10 -10
  86. package/admin-dist/server/_ssr/{router-CQXMuGMF.mjs → router-DxF7GBcO.mjs} +8804 -4995
  87. package/admin-dist/server/_ssr/{scroll-area-B7zoNyWB.mjs → scroll-area-DLDlXI07.mjs} +1 -1
  88. package/admin-dist/server/_ssr/{settings-CNaqVa4D.mjs → settings-BbaiS6z9.mjs} +13 -10
  89. package/admin-dist/server/_ssr/{switch-BKZhvryc.mjs → switch-Bl89Pfxu.mjs} +1 -1
  90. package/admin-dist/server/_ssr/{tabs-DtIIQxiD.mjs → tabs-QkbR0iir.mjs} +3 -3
  91. package/admin-dist/server/_ssr/{tanstack-adapter-CLavdbUY.mjs → tanstack-adapter-CKknPtcU.mjs} +19 -1
  92. package/admin-dist/server/_ssr/{taxonomies-vIZYICzr.mjs → taxonomies-S_Ontd0z.mjs} +9 -9
  93. package/admin-dist/server/_ssr/{trash-7yGR4-dF.mjs → trash-BzAIsbbN.mjs} +109 -132
  94. package/admin-dist/server/_ssr/{useBreadcrumbLabel-DR5FaAMf.mjs → useBreadcrumbLabel-BjiR1fM_.mjs} +1 -1
  95. package/admin-dist/server/_ssr/{usePermissions-DKkpETj_.mjs → usePermissions-CDHN95Nz.mjs} +1 -1
  96. package/admin-dist/server/index.mjs +284 -165
  97. package/package.json +3 -2
  98. package/admin/src/styles/globals.css +0 -82
  99. package/admin/src/styles/tailwind-config.css +0 -111
  100. package/admin/src/styles/theme.css +0 -384
  101. package/admin-dist/public/assets/CmsToolbar-CY6GV2L8.js +0 -1
  102. package/admin-dist/public/assets/ContentEntryEditor-CRgcRkk5.js +0 -4
  103. package/admin-dist/public/assets/TaxonomyFilter-Ohv5Jg9c.js +0 -1
  104. package/admin-dist/public/assets/_contentTypeId-C_vJq22X.js +0 -1
  105. package/admin-dist/public/assets/content-pKaIL2ru.js +0 -1
  106. package/admin-dist/public/assets/content-types-Bl_8I1Re.js +0 -1
  107. package/admin-dist/public/assets/globals-CoCRjt0K.css +0 -1
  108. package/admin-dist/public/assets/index-CtHq_P5q.js +0 -1
  109. package/admin-dist/public/assets/main-CA-4LyFT.js +0 -107
  110. package/admin-dist/public/assets/media-Bl1tBbJQ.js +0 -1
  111. package/admin-dist/public/assets/refresh-cw-sdVUGJNs.js +0 -1
  112. package/admin-dist/public/assets/rotate-ccw-6OcXCcxb.js +0 -1
  113. package/admin-dist/public/assets/settings-D8crrFCn.js +0 -1
  114. package/admin-dist/public/assets/tanstack-adapter-BRt2CUCw.js +0 -1
  115. package/admin-dist/public/assets/trash-YyYaC3L9.js +0 -1
  116. package/admin-dist/server/_ssr/CmsToolbar-NB014hsd.mjs +0 -48
  117. package/admin-dist/server/_ssr/_tanstack-start-manifest_v-DndoqCo7.mjs +0 -4
@@ -1 +0,0 @@
1
- import{l as se,j as e,L as ss,h as I,r as a,z as Is,D as be,A as ye,B as Ne,C as h,T as Q,X as ae,s as ts,F as as,E as de,m as ue,u as A,a as E,t as Ps,G as Rs,I as K,H as Ye,P as Bs,n as Se,o as ls,J as is,K as rs,M as ns,N as H,O as Ls,Q as Ce,U as Us,V as os,W as ke,S as $s,b as Vs,c as Hs,d as qs,e as ee,g as Ge,Y as Ze,Z as Je,i as je,_ as Ws,k as Os}from"./main-CA-4LyFT.js";import{C as cs,F as ds,M as us,V as ms,T as Ks,a as Qs,b as Xe,U as Ys,c as Gs}from"./tabs-vQYu8rjC.js";import{C as Zs}from"./CmsPageHeader-0REGRH4X.js";import{C as Js}from"./CmsToolbar-CY6GV2L8.js";import{C as ve}from"./CmsEmptyState-DTlpzjOI.js";import{T as Xs}from"./TaxonomyFilter-Ohv5Jg9c.js";import{P as Fe}from"./pencil-gAL0R34f.js";import{B as xs}from"./badge-C6qt24oj.js";import{R as we}from"./rotate-ccw-6OcXCcxb.js";import{S as es}from"./search-WXp6KxDJ.js";import{u as et}from"./tanstack-adapter-BRt2CUCw.js";import"./refresh-cw-sdVUGJNs.js";import"./command-CJ8i86fd.js";const st=[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]],tt=se("copy",st);const at=[["path",{d:"M12 15V3",key:"m9g1x1"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["path",{d:"m7 10 5 5 5-5",key:"brsn70"}]],ze=se("download",at);const lt=[["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}],["circle",{cx:"12",cy:"5",r:"1",key:"gxeob9"}],["circle",{cx:"12",cy:"19",r:"1",key:"lyex9k"}]],it=se("ellipsis-vertical",lt);const rt=[["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}],["circle",{cx:"19",cy:"12",r:"1",key:"1wjl8i"}],["circle",{cx:"5",cy:"12",r:"1",key:"1pcz8c"}]],nt=se("ellipsis",rt);const ot=[["path",{d:"M2 9V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2v-1",key:"fm4g5t"}],["path",{d:"M2 13h10",key:"pgb2dq"}],["path",{d:"m9 16 3-3-3-3",key:"6m91ic"}]],Me=se("folder-input",ot);const ct=[["path",{d:"M12 10v6",key:"1bos4e"}],["path",{d:"M9 13h6",key:"1uhe8q"}],["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]],dt=se("folder-plus",ct);function G({label:s,description:i,error:l,required:r,htmlFor:u,className:m,children:p}){return e.jsxs("div",{className:I("space-y-2",m),children:[s&&e.jsxs(ss,{htmlFor:u,className:I("text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",l&&"text-destructive"),children:[s,r&&e.jsx("span",{className:"ml-1 text-destructive",children:"*"})]}),p,i&&!l&&e.jsx("p",{className:"text-[13px] text-muted-foreground",children:i}),l&&e.jsx("p",{className:"text-[13px] font-medium text-destructive",children:l})]})}var ut=Object.freeze({position:"absolute",border:0,width:1,height:1,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",wordWrap:"normal"}),mt="VisuallyHidden",hs=a.forwardRef((s,i)=>e.jsx(Is.span,{...s,ref:i,style:{...ut,...s.style}}));hs.displayName=mt;function xt(s){return s?s.startsWith("image/")?"image":s.startsWith("video/")?"video":s.startsWith("audio/")?"audio":s==="application/pdf"||s.includes("document")||s.includes("sheet")||s.includes("presentation")||s.startsWith("text/")?"document":"other":"other"}function ht(s){if(!s||s===0)return"0 B";const i=1024,l=["B","KB","MB","GB"],r=Math.floor(Math.log(s)/Math.log(i));return`${parseFloat((s/Math.pow(i,r)).toFixed(1))} ${l[r]}`}function ft(s){return new Date(s).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric",hour:"numeric",minute:"2-digit"})}function pt(s,i="size-16"){const l={className:i};switch(s){case"image":return e.jsx(de,{...l});case"video":return e.jsx(ms,{...l});case"audio":return e.jsx(us,{...l});case"document":return e.jsx(as,{...l});default:return e.jsx(ds,{...l})}}function gt({asset:s,assets:i,currentIndex:l,open:r,onOpenChange:u,onNavigate:m,onEdit:p,onDelete:d}){const S=l>0,g=l<i.length-1,y=a.useCallback(()=>{S&&m(l-1)},[S,l,m]),o=a.useCallback(()=>{g&&m(l+1)},[g,l,m]),x=a.useCallback(c=>{if(r)switch(c.key){case"ArrowLeft":c.preventDefault(),y();break;case"ArrowRight":c.preventDefault(),o();break;case"Escape":c.preventDefault(),u(!1);break}},[r,y,o,u]);a.useEffect(()=>(window.addEventListener("keydown",x),()=>window.removeEventListener("keydown",x)),[x]);const v=a.useCallback(()=>{if(!s?.url)return;const c=document.createElement("a");c.href=s.url,c.download=s.name,c.target="_blank",document.body.appendChild(c),c.click(),document.body.removeChild(c)},[s]),k=a.useCallback(async()=>{s?.url&&await navigator.clipboard.writeText(s.url)},[s]);if(!s)return null;const b=xt(s.mimeType),F=b==="image",D=!!s.url;return e.jsx(be,{open:r,onOpenChange:u,children:e.jsxs(ye,{className:"flex h-[90vh] w-[95vw] max-w-[1400px] flex-col gap-0 overflow-hidden p-0 sm:max-w-[1400px]",showCloseButton:!1,children:[e.jsx(hs,{children:e.jsxs(Ne,{children:["Preview: ",s.name]})}),e.jsxs("div",{className:"flex items-center justify-between border-b px-4 py-3",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("h2",{className:"truncate text-lg font-semibold",title:s.name,children:s.name}),e.jsxs("span",{className:"text-sm text-muted-foreground",children:[l+1," of ",i.length]})]}),e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx(h,{variant:"ghost",size:"icon",onClick:k,disabled:!s.url,title:"Copy URL",children:e.jsx(tt,{className:"size-4"})}),e.jsx(h,{variant:"ghost",size:"icon",onClick:v,disabled:!s.url,title:"Download",children:e.jsx(ze,{className:"size-4"})}),p&&e.jsx(h,{variant:"ghost",size:"icon",onClick:()=>p(s),title:"Edit",children:e.jsx(Fe,{className:"size-4"})}),d&&e.jsx(h,{variant:"ghost",size:"icon",onClick:()=>d(s),title:"Delete",className:"text-destructive hover:text-destructive",children:e.jsx(Q,{className:"size-4"})}),e.jsx(h,{variant:"ghost",size:"icon",onClick:()=>u(!1),title:"Close (Esc)",children:e.jsx(ae,{className:"size-4"})})]})]}),e.jsxs("div",{className:"flex min-h-0 flex-1",children:[e.jsxs("div",{className:"relative flex flex-1 items-center justify-center bg-zinc-950",children:[S&&e.jsx("button",{onClick:y,className:"absolute left-4 z-10 flex size-10 items-center justify-center rounded-full bg-black/50 text-white transition-colors hover:bg-black/70",title:"Previous (←)",children:e.jsx(cs,{className:"size-6"})}),g&&e.jsx("button",{onClick:o,className:"absolute right-4 z-10 flex size-10 items-center justify-center rounded-full bg-black/50 text-white transition-colors hover:bg-black/70",title:"Next (→)",children:e.jsx(ts,{className:"size-6"})}),F&&D?e.jsx("img",{src:s.url,alt:s.altText||s.title||s.name,className:"max-h-full max-w-full object-contain"}):e.jsxs("div",{className:"flex flex-col items-center gap-4 text-zinc-400",children:[pt(b),e.jsx("p",{className:"text-sm",children:F&&!D?"Image URL not available":"Preview not available for this file type"}),D&&e.jsxs(h,{variant:"secondary",onClick:v,children:[e.jsx(ze,{className:"mr-2 size-4"}),"Download to view"]})]})]}),e.jsx("div",{className:"w-72 shrink-0 overflow-y-auto border-l bg-background",children:e.jsxs("div",{className:"space-y-4 p-4",children:[e.jsx("h3",{className:"font-semibold",children:"File Information"}),e.jsx(V,{label:"Filename",value:s.name}),s.title&&e.jsx(V,{label:"Title",value:s.title}),s.description&&e.jsx(V,{label:"Description",value:s.description}),s.altText&&e.jsx(V,{label:"Alt Text",value:s.altText}),e.jsxs("div",{className:"border-t pt-4",children:[e.jsx(V,{label:"Type",value:b,capitalize:!0}),s.mimeType&&e.jsx(V,{label:"MIME Type",value:s.mimeType}),e.jsx(V,{label:"Size",value:ht(s.size)}),s.width&&s.height&&e.jsx(V,{label:"Dimensions",value:`${s.width} × ${s.height} px`})]}),e.jsx("div",{className:"border-t pt-4",children:e.jsx(V,{label:"Uploaded",value:ft(s._creationTime)})}),s.tags&&s.tags.length>0&&e.jsxs("div",{className:"border-t pt-4",children:[e.jsx("p",{className:"mb-2 text-xs font-medium text-muted-foreground",children:"Tags"}),e.jsx("div",{className:"flex flex-wrap gap-1",children:s.tags.map(c=>e.jsx("span",{className:"rounded-full bg-muted px-2 py-0.5 text-xs",children:c},c))})]})]})})]})]})})}function V({label:s,value:i,capitalize:l}){return e.jsxs("div",{className:"space-y-0.5",children:[e.jsx("p",{className:"text-xs font-medium text-muted-foreground",children:s}),e.jsx("p",{className:I("break-words text-sm",l&&"capitalize"),children:i})]})}function jt({mediaId:s,taxonomyId:i,taxonomyName:l="Tags",allowCreate:r=!0,disabled:u=!1,className:m=""}){const p=ue(),[d,S]=a.useState(""),[g,y]=a.useState(!1),[o,x]=a.useState(0),[v,k]=a.useState(!1),[b,F]=a.useState(!1),D=a.useRef(null),c=a.useRef(null),M=a.useRef(null),P=A(p.getTermsByMedia,{mediaId:s,taxonomyId:i}),N=P?.map(n=>n._id)??[],f=A(p.suggestTerms,{taxonomyId:i,query:d,limit:10,excludeIds:N})??[],R=E(p.setMediaTerms),q=E(p.createTermAndAddToMedia);a.useEffect(()=>{function n(C){M.current&&!M.current.contains(C.target)&&y(!1)}return document.addEventListener("mousedown",n),()=>document.removeEventListener("mousedown",n)},[]);const Y=a.useCallback(async n=>{if(!N.includes(n)){F(!0);try{await R({mediaId:s,taxonomyId:i,termIds:[...N,n]})}catch(C){console.error("Failed to add tag:",C)}finally{F(!1),S(""),y(!1),x(0),D.current?.focus()}}},[s,i,N,R]),te=a.useCallback(async n=>{F(!0);try{await R({mediaId:s,taxonomyId:i,termIds:N.filter(C=>C!==n)})}catch(C){console.error("Failed to remove tag:",C)}finally{F(!1)}},[s,i,N,R]),Z=a.useCallback(async()=>{if(!(!d.trim()||!r)){k(!0);try{await q({taxonomyId:i,name:d.trim(),mediaId:s}),S(""),y(!1),x(0)}catch(n){console.error("Failed to create tag:",n)}finally{k(!1)}}},[d,r,i,s,q]),le=n=>{if(!u)switch(n.key){case"ArrowDown":n.preventDefault(),x(C=>C<f.length-1?C+1:C);break;case"ArrowUp":n.preventDefault(),x(C=>C>0?C-1:0);break;case"Enter":n.preventDefault(),f.length>0&&o<f.length?Y(f[o]._id):d.trim()&&r&&Z();break;case"Escape":y(!1);break;case"Backspace":d===""&&N.length>0&&te(N[N.length-1]);break}};a.useEffect(()=>{if(c.current&&g){const n=c.current.querySelector(`[data-index="${o}"]`);n&&n.scrollIntoView({block:"nearest"})}},[o,g]);const $=f.filter(n=>!N.includes(n._id)),T=r&&d.trim()&&!$.some(n=>n.name.toLowerCase()===d.trim().toLowerCase());return e.jsxs("div",{className:I("space-y-2",m),children:[e.jsxs("div",{className:"flex items-center gap-2 text-sm font-medium text-muted-foreground",children:[e.jsx(Ps,{className:"size-4"}),l]}),e.jsxs("div",{ref:M,className:I("relative rounded-md border border-input bg-background",u&&"opacity-50"),children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-1.5 p-2",children:[(P??[]).map(n=>e.jsxs(xs,{variant:"secondary",className:"gap-1 pr-1",style:n.color?{backgroundColor:n.color,color:"#fff"}:void 0,children:[n.name,!u&&e.jsx(Rs,{type:"button",variant:"ghost",size:"icon",className:"size-4 hover:bg-transparent",onClick:()=>te(n._id),disabled:b,"aria-label":`Remove ${n.name}`,children:e.jsx(ae,{className:"size-3"})})]},n._id)),!u&&e.jsx(K,{ref:D,type:"text",className:"h-7 min-w-[120px] flex-1 border-0 bg-transparent px-1 shadow-none focus-visible:ring-0",value:d,onChange:n=>{S(n.target.value),y(!0),x(0)},onFocus:()=>y(!0),onKeyDown:le,placeholder:N.length===0?"Add tags...":"",disabled:u||v||b})]}),g&&($.length>0||T)&&e.jsxs("div",{ref:c,className:"absolute left-0 right-0 top-full z-50 mt-1 max-h-48 overflow-auto rounded-md border bg-popover shadow-lg",role:"listbox",children:[$.map((n,C)=>e.jsxs("div",{"data-index":C,className:I("flex cursor-pointer items-center gap-2 px-3 py-2 text-sm",C===o&&"bg-accent"),onClick:()=>Y(n._id),role:"option","aria-selected":C===o,children:[n.color&&e.jsx("span",{className:"size-2.5 rounded-full",style:{backgroundColor:n.color}}),e.jsx("span",{className:"flex-1",children:n.name}),e.jsxs("span",{className:"text-xs text-muted-foreground",children:[n.usageCount," uses"]})]},n._id)),T&&e.jsxs("div",{"data-index":$.length,className:I("flex cursor-pointer items-center gap-2 px-3 py-2 text-sm",$.length===o&&"bg-accent"),onClick:Z,role:"option","aria-selected":$.length===o,children:[v?e.jsx(Ye,{className:"size-4 animate-spin"}):e.jsx(Bs,{className:"size-4"}),e.jsxs("span",{children:['Create "',d.trim(),'"']})]})]}),(b||v)&&e.jsx("div",{className:"absolute inset-0 flex items-center justify-center bg-background/50",children:e.jsx(Ye,{className:"size-4 animate-spin"})})]})]})}function vt({asset:s,open:i,onOpenChange:l,onSaved:r}){const u=ue(),[m,p]=a.useState(""),[d,S]=a.useState(""),[g,y]=a.useState(""),[o,x]=a.useState(""),[v,k]=a.useState(""),[b,F]=a.useState(!1),[D,c]=a.useState(""),M=E(u.updateMediaAsset),N=A(u.listTaxonomies,{isActive:!0,paginationOpts:{numItems:50,cursor:null}})?.page??[];a.useEffect(()=>{s&&(p(s.name),S(s.title||""),y(s.description||""),x(s.altText||""),k(s.tags?.join(", ")||""),c(""))},[s]);const L=a.useCallback(async()=>{if(s){if(!m.trim()){c("Filename is required");return}F(!0),c("");try{const f=v.split(",").map(R=>R.trim()).filter(Boolean);await M({id:s._id,name:m.trim(),title:d.trim()||void 0,description:g.trim()||void 0,altText:o.trim()||void 0,tags:f.length>0?f:void 0}),r?.(),l(!1)}catch(f){c(f instanceof Error?f.message:"Failed to update asset")}finally{F(!1)}}},[s,m,d,g,o,v,M,r,l]);return s?e.jsx(Se,{open:i,onOpenChange:l,title:"Edit File",size:"md",footer:e.jsxs(e.Fragment,{children:[e.jsx(h,{variant:"outline",onClick:()=>l(!1),disabled:b,children:"Cancel"}),e.jsx(h,{onClick:L,loading:b,children:"Save Changes"})]}),children:e.jsxs("div",{className:"space-y-4",children:[D&&e.jsx("div",{className:"rounded-md bg-destructive/10 p-3 text-sm text-destructive",children:D}),e.jsx(G,{label:"Filename",required:!0,htmlFor:"asset-name",children:e.jsx(K,{id:"asset-name",value:m,onChange:f=>p(f.target.value),placeholder:"Enter filename"})}),e.jsx(G,{label:"Title",description:"A human-readable title for the file",htmlFor:"asset-title",children:e.jsx(K,{id:"asset-title",value:d,onChange:f=>S(f.target.value),placeholder:"Enter title (optional)"})}),e.jsx(G,{label:"Description",description:"A brief description of the file",htmlFor:"asset-description",children:e.jsx(ls,{id:"asset-description",value:g,onChange:f=>y(f.target.value),placeholder:"Enter description (optional)",rows:3})}),e.jsx(G,{label:"Alt Text",description:"Alternative text for accessibility (important for images)",htmlFor:"asset-alt",children:e.jsx(K,{id:"asset-alt",value:o,onChange:f=>x(f.target.value),placeholder:"Describe the image content"})}),e.jsx(G,{label:"Quick Tags",description:"Comma-separated tags for simple organization",htmlFor:"asset-tags",children:e.jsx(K,{id:"asset-tags",value:v,onChange:f=>k(f.target.value),placeholder:"e.g., hero, blog, product"})}),N.length>0&&s&&e.jsxs("div",{className:"space-y-4 pt-2 border-t",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Organize with taxonomy terms"}),N.map(f=>e.jsx(jt,{mediaId:s._id,taxonomyId:f._id,taxonomyName:f.displayName,allowCreate:f.allowInlineCreation,disabled:b},f._id))]})]})}):null}function bt({folder:s,open:i,onOpenChange:l,onSaved:r}){const u=ue(),[m,p]=a.useState(""),[d,S]=a.useState(""),[g,y]=a.useState(!1),[o,x]=a.useState(""),v=E(u.updateMediaFolder);a.useEffect(()=>{s&&(p(s.name),S(s.description||""),x(""))},[s]);const k=a.useCallback(async()=>{if(s){if(!m.trim()){x("Folder name is required");return}y(!0),x("");try{await v({id:s._id,name:m.trim(),description:d.trim()||void 0}),r?.(),l(!1)}catch(b){x(b instanceof Error?b.message:"Failed to update folder")}finally{y(!1)}}},[s,m,d,v,r,l]);return s?e.jsx(Se,{open:i,onOpenChange:l,title:"Edit Folder",size:"sm",footer:e.jsxs(e.Fragment,{children:[e.jsx(h,{variant:"outline",onClick:()=>l(!1),disabled:g,children:"Cancel"}),e.jsx(h,{onClick:k,loading:g,children:"Save Changes"})]}),children:e.jsxs("div",{className:"space-y-4",children:[o&&e.jsx("div",{className:"rounded-md bg-destructive/10 p-3 text-sm text-destructive",children:o}),e.jsx(G,{label:"Folder Name",required:!0,htmlFor:"folder-name",children:e.jsx(K,{id:"folder-name",value:m,onChange:b=>p(b.target.value),placeholder:"Enter folder name"})}),e.jsx(G,{label:"Description",description:"A brief description of the folder contents",htmlFor:"folder-description",children:e.jsx(ls,{id:"folder-description",value:d,onChange:b=>S(b.target.value),placeholder:"Enter description (optional)",rows:3})})]})}):null}function yt({asset:s,onView:i,onEdit:l,onMove:r,onDelete:u}){const m=()=>{if(!s.url)return;const d=document.createElement("a");d.href=s.url,d.download=s.name,d.target="_blank",document.body.appendChild(d),d.click(),document.body.removeChild(d)},p=async()=>{s.url&&await navigator.clipboard.writeText(s.url)};return e.jsxs(is,{children:[e.jsx(rs,{asChild:!0,children:e.jsx(h,{variant:"ghost",size:"icon-sm",className:"opacity-0 group-hover:opacity-100",onClick:d=>d.stopPropagation(),children:e.jsx(it,{className:"size-4"})})}),e.jsxs(ns,{side:"bottom",onClick:d=>d.stopPropagation(),children:[i&&e.jsxs(H,{onClick:i,children:[e.jsx(Ls,{className:"mr-2 size-4"}),"View Details"]}),l&&e.jsxs(H,{onClick:l,children:[e.jsx(Fe,{className:"mr-2 size-4"}),"Edit"]}),r&&e.jsxs(H,{onClick:r,children:[e.jsx(Me,{className:"mr-2 size-4"}),"Move to..."]}),e.jsx(Ce,{}),e.jsxs(H,{onClick:m,disabled:!s.url,children:[e.jsx(ze,{className:"mr-2 size-4"}),"Download"]}),e.jsxs(H,{onClick:p,disabled:!s.url,children:[e.jsx(Us,{className:"mr-2 size-4"}),"Copy URL"]}),u&&e.jsxs(e.Fragment,{children:[e.jsx(Ce,{}),e.jsxs(H,{onClick:u,className:"text-destructive focus:text-destructive",children:[e.jsx(Q,{className:"mr-2 size-4"}),"Delete"]})]})]})]})}function Nt({folder:s,onEdit:i,onMove:l,onDelete:r}){return e.jsxs(is,{children:[e.jsx(rs,{asChild:!0,children:e.jsx(h,{variant:"ghost",size:"icon-sm",className:"opacity-0 group-hover:opacity-100",onClick:u=>u.stopPropagation(),children:e.jsx(nt,{className:"size-4"})})}),e.jsxs(ns,{align:"end",onClick:u=>u.stopPropagation(),children:[i&&e.jsxs(H,{onClick:i,children:[e.jsx(Fe,{className:"mr-2 size-4"}),"Rename"]}),l&&e.jsxs(H,{onClick:l,children:[e.jsx(Me,{className:"mr-2 size-4"}),"Move to..."]}),r&&e.jsxs(e.Fragment,{children:[e.jsx(Ce,{}),e.jsxs(H,{onClick:r,className:"text-destructive focus:text-destructive",children:[e.jsx(Q,{className:"mr-2 size-4"}),"Delete"]})]})]})]})}function Ct({selectedCount:s,onClear:i,onMove:l,onDelete:r,isDeleting:u}){return s===0?null:e.jsx("div",{className:"fixed inset-x-0 bottom-0 z-50 border-t bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/80",children:e.jsxs("div",{className:"mx-auto flex max-w-7xl items-center justify-between px-6 py-3",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs("span",{className:"text-sm font-medium",children:[s," ",s===1?"file":"files"," selected"]}),e.jsxs(h,{variant:"ghost",size:"sm",onClick:i,children:[e.jsx(ae,{className:"mr-1 size-4"}),"Clear"]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(h,{variant:"secondary",onClick:l,disabled:u,children:[e.jsx(Me,{className:"mr-2 size-4"}),"Move to..."]}),e.jsxs(h,{variant:"danger",onClick:r,loading:u,children:[e.jsx(Q,{className:"mr-2 size-4"}),"Delete"]})]})]})})}function kt({selectedCount:s,onClear:i,onRestore:l,onPermanentDelete:r,isRestoring:u,isDeleting:m}){return s===0?null:e.jsx("div",{className:"fixed inset-x-0 bottom-0 z-50 border-t bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/80",children:e.jsxs("div",{className:"mx-auto flex max-w-7xl items-center justify-between px-6 py-3",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs("span",{className:"text-sm font-medium",children:[s," ",s===1?"file":"files"," selected"]}),e.jsxs(h,{variant:"ghost",size:"sm",onClick:i,children:[e.jsx(ae,{className:"mr-1 size-4"}),"Clear"]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(h,{variant:"secondary",onClick:l,loading:u,disabled:m,children:[e.jsx(we,{className:"mr-2 size-4"}),"Restore"]}),e.jsxs(h,{variant:"danger",onClick:r,loading:m,disabled:u,children:[e.jsx(Q,{className:"mr-2 size-4"}),"Delete Forever"]})]})]})})}function wt({open:s,onOpenChange:i,assetIds:l,currentFolderId:r,onMoved:u}){const m=ue(),[p,d]=a.useState(void 0),[S,g]=a.useState(!1),[y,o]=a.useState(""),x=A(m.getMediaFolderTree,{}),v=E(m.moveMediaAssets),k=a.useMemo(()=>{if(!x)return[];const c=(M,P)=>x.filter(L=>L.parentId===M).flatMap(L=>[{...L,depth:P},...c(L._id,P+1)]);return c(void 0,0)},[x]),b=async()=>{if(l.length!==0){g(!0),o("");try{await v({assetIds:l,targetFolderId:p}),u?.(),i(!1)}catch(c){o(c instanceof Error?c.message:"Failed to move files")}finally{g(!1)}}},F=p===r,D=p===void 0;return e.jsx(Se,{open:s,onOpenChange:i,title:"Move Files",description:`Select a destination folder for ${l.length} ${l.length===1?"file":"files"}`,size:"sm",footer:e.jsxs(e.Fragment,{children:[e.jsx(h,{variant:"outline",onClick:()=>i(!1),disabled:S,children:"Cancel"}),e.jsx(h,{onClick:b,loading:S,disabled:F,children:"Move Here"})]}),children:e.jsxs("div",{className:"space-y-2",children:[y&&e.jsx("div",{className:"rounded-md bg-destructive/10 p-3 text-sm text-destructive",children:y}),e.jsxs("div",{className:"max-h-[300px] overflow-y-auto rounded-md border",children:[e.jsxs("button",{type:"button",className:I("flex w-full items-center gap-2 px-3 py-2 text-left text-sm transition-colors hover:bg-muted",D&&"bg-primary/10 text-primary",r===void 0&&"opacity-50"),onClick:()=>d(void 0),children:[e.jsx(os,{className:"size-4"}),e.jsx("span",{className:"font-medium",children:"Root (All Files)"}),r===void 0&&e.jsx("span",{className:"ml-auto text-xs text-muted-foreground",children:"Current"})]}),k.map(c=>{const M=c._id===r,P=c._id===p;return e.jsxs("button",{type:"button",className:I("flex w-full items-center gap-2 px-3 py-2 text-left text-sm transition-colors hover:bg-muted",P&&"bg-primary/10 text-primary",M&&"opacity-50"),style:{paddingLeft:`${12+c.depth*20}px`},onClick:()=>d(c._id),children:[c.depth>0&&e.jsx(ts,{className:"size-3 text-muted-foreground"}),e.jsx(ke,{className:"size-4 text-amber-500"}),e.jsx("span",{className:"truncate",children:c.name}),M&&e.jsx("span",{className:"ml-auto text-xs text-muted-foreground",children:"Current"})]},c._id)}),k.length===0&&e.jsx("div",{className:"px-3 py-6 text-center text-sm text-muted-foreground",children:"No folders yet. Create folders to organize your files."})]}),F&&e.jsx("p",{className:"text-xs text-muted-foreground",children:"Files are already in this folder"})]})})}function zt(s){if(s===0)return"0 B";const i=1024,l=["B","KB","MB","GB"],r=Math.floor(Math.log(s)/Math.log(i));return`${parseFloat((s/Math.pow(i,r)).toFixed(1))} ${l[r]}`}function St(s){return new Date(s).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"})}function Ft(s,i="size-6"){const l={className:i};switch(s){case"image":return e.jsx(de,{...l});case"video":return e.jsx(ms,{...l});case"audio":return e.jsx(us,{...l});case"document":return e.jsx(as,{...l});default:return e.jsx(ds,{...l})}}function Mt(s){return s?s.startsWith("image/")?"image":s.startsWith("video/")?"video":s.startsWith("audio/")?"audio":s==="application/pdf"||s.includes("document")||s.includes("sheet")||s.includes("presentation")||s.startsWith("text/")?"document":"other":"other"}function Dt({api:s,navigation:i,settings:l}){a.useEffect(()=>{l&&!l.features.mediaManagement&&i.navigate("/")},[l,i]);const[r,u]=a.useState(void 0),[m,p]=a.useState(""),[d,S]=a.useState(""),[g,y]=a.useState([]),[o,x]=a.useState(new Set),[v,k]=a.useState(!1),[b,F]=a.useState(!1),[D,c]=a.useState(!1),[M,P]=a.useState(""),[N,L]=a.useState(!1),[f,R]=a.useState(""),[q,Y]=a.useState(null),[te,Z]=a.useState(null),[le,$]=a.useState(null),[T,n]=a.useState(null),[C,De]=a.useState(!1),[fs,Te]=a.useState(!1),[ps,me]=a.useState(!1),[_e,Ae]=a.useState(!1),[Ee,gs]=a.useState("library"),[Ie,J]=a.useState(!1),[Pe,Re]=a.useState(!1),[js,ie]=a.useState(!1),[X,re]=a.useState(null),w=Ee==="trash",_=A(s.listMediaAssets,{folderId:w?void 0:r,type:d||void 0,search:m||void 0,deletedOnly:w?!0:void 0,paginationOpts:{numItems:100,cursor:null}}),xe=A(s.getMediaTrashCount,{}),Be=A(s.getMediaByTerm,g[0]?{termId:g[0]}:"skip"),Le=A(s.getMediaByTerm,g[1]?{termId:g[1]}:"skip"),Ue=A(s.getMediaByTerm,g[2]?{termId:g[2]}:"skip"),he=a.useMemo(()=>{if(g.length===0)return null;const t=new Set,j=[Be,Le,Ue];for(let z=0;z<g.length&&z<3;z++){const O=j[z];if(O?.page)for(const U of O.page)t.add(U)}return t},[g,Be,Le,Ue]),B=A(s.listMediaFolders,{parentId:w?void 0:r,deletedOnly:w||void 0}),fe=A(s.getMediaFolder,r?{id:r}:"skip"),ne=A(s.getMediaFolderTree,{}),$e=E(s.createMediaFolder),oe=E(s.deleteMediaAsset),Ve=E(s.deleteMediaFolder),ce=E(s.restoreMediaAsset),He=E(s.restoreMediaFolder),qe=E(s.permanentDeleteMediaAsset),We=E(s.bulkPermanentDeleteMediaAssets),Oe=a.useMemo(()=>{if(!r||!ne)return[];const t=[];let j=ne.find(z=>z._id===r);for(;j;){t.unshift(j);const z=j.parentId;j=z?ne.find(O=>O._id===z):void 0}return t},[r,ne]),Ke=a.useCallback(t=>{u(t),p("")},[]),vs=a.useCallback(()=>{fe?.parentId?u(fe.parentId):u(void 0)},[fe]),bs=a.useCallback(()=>{u(void 0),p("")},[]),pe=a.useCallback(t=>{x(j=>{const z=new Set(j);return z.has(t)?z.delete(t):z.add(t),z})},[]),ys=a.useCallback(()=>{_?.page&&x(new Set(_.page.map(t=>t._id)))},[_?.page]),ge=a.useCallback(()=>{x(new Set)},[]),Ns=a.useCallback(t=>{gs(t),x(new Set),k(!1)},[]),Cs=a.useCallback(t=>{if(v)pe(t);else{const j=_?.page?.findIndex(z=>z._id===t)??-1;j!==-1&&Y(j)}},[v,pe,_?.page]),ks=a.useCallback(t=>{Y(t)},[]),ws=a.useCallback(async()=>{if(T){De(!0);try{T.type==="asset"?await oe({id:T.id}):await Ve({id:T.id}),n(null)}catch(t){console.error("Delete failed:",t)}finally{De(!1)}}},[T,oe,Ve]),zs=a.useCallback(async()=>{if(o.size!==0){Ae(!0);try{const t=Array.from(o).map(j=>oe({id:j}));await Promise.all(t),x(new Set),k(!1),me(!1)}catch(t){console.error("Bulk delete failed:",t)}finally{Ae(!1)}}},[o,oe]),Ss=a.useCallback(()=>{x(new Set),k(!1)},[]),Fs=a.useCallback(async t=>{J(!0);try{await ce({id:t})}catch(j){console.error("Restore failed:",j)}finally{J(!1)}},[ce]),Ms=a.useCallback(async()=>{if(o.size!==0){J(!0);try{const t=Array.from(o).map(j=>ce({id:j}));await Promise.all(t),x(new Set),k(!1)}catch(t){console.error("Bulk restore failed:",t)}finally{J(!1)}}},[o,ce]),Ds=a.useCallback(async t=>{J(!0);try{await He({id:t})}catch(j){console.error("Restore folder failed:",j)}finally{J(!1)}},[He]),Ts=a.useCallback(async()=>{if(X){Re(!0);try{X==="bulk"?(await We({ids:Array.from(o)}),x(new Set),k(!1)):await qe({id:X}),ie(!1),re(null)}catch(t){console.error("Permanent delete failed:",t)}finally{Re(!1)}}},[X,qe,We,o]),Qe=a.useCallback(async()=>{if(!M.trim()){R("Folder name is required");return}L(!0),R("");try{await $e({name:M.trim(),parentId:r}),F(!1),P("")}catch(t){R(t instanceof Error?t.message:"Failed to create folder")}finally{L(!1)}},[M,r,$e]),_s=a.useCallback(t=>{c(!1)},[]),As=_===void 0||B===void 0,W=a.useMemo(()=>{const t=_?.page??[];return he===null?t:t.filter(j=>he.has(j._id))},[_?.page,he]);return e.jsxs("div",{className:"space-y-6 p-6",children:[e.jsx(Zs,{title:"Media Library",description:"Upload, organize, and manage media assets for your content."}),e.jsx(Ks,{value:Ee,onValueChange:t=>Ns(t),children:e.jsxs(Qs,{children:[e.jsxs(Xe,{value:"library",children:[e.jsx(de,{className:"mr-1.5 size-4"}),"Library"]}),e.jsxs(Xe,{value:"trash",children:[e.jsx(Q,{className:"mr-1.5 size-4"}),"Trash",xe&&xe.total>0&&e.jsx(xs,{variant:"secondary",className:"ml-1.5",children:xe.total})]})]})}),!w&&e.jsxs("nav",{className:"flex items-center gap-1","aria-label":"Folder navigation",children:[e.jsxs("button",{className:I("flex items-center gap-1.5 rounded-md px-2 py-1 text-sm transition-colors",r?"text-muted-foreground hover:bg-muted hover:text-foreground":"bg-primary/10 font-medium text-primary"),onClick:bs,children:[e.jsx(os,{className:"size-4"}),e.jsx("span",{children:"All Files"})]}),Oe.map((t,j)=>e.jsxs("span",{className:"flex items-center",children:[e.jsx("span",{className:"mx-1 text-muted-foreground",children:"/"}),e.jsx("button",{className:I("rounded-md px-2 py-1 text-sm transition-colors",j===Oe.length-1?"bg-primary/10 font-medium text-primary":"text-muted-foreground hover:bg-muted hover:text-foreground"),onClick:()=>Ke(t._id),children:t.name})]},t._id))]}),e.jsx(Js,{left:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs("div",{className:"relative",children:[e.jsx(es,{className:"absolute left-3 top-1/2 size-4 -translate-y-1/2 text-muted-foreground"}),e.jsx(K,{type:"search",placeholder:"Search files...",value:m,onChange:t=>p(t.target.value),className:"w-64 pl-9"}),m&&e.jsx("button",{className:"absolute right-2 top-1/2 -translate-y-1/2 rounded p-0.5 hover:bg-muted",onClick:()=>p(""),"aria-label":"Clear search",children:e.jsx(ae,{className:"size-4 text-muted-foreground"})})]}),e.jsxs($s,{value:d||"all",onValueChange:t=>S(t==="all"?"":t),children:[e.jsx(Vs,{className:"w-36",children:e.jsx(Hs,{placeholder:"All Types"})}),e.jsxs(qs,{children:[e.jsx(ee,{value:"all",children:"All Types"}),e.jsx(ee,{value:"image",children:"Images"}),e.jsx(ee,{value:"video",children:"Videos"}),e.jsx(ee,{value:"audio",children:"Audio"}),e.jsx(ee,{value:"document",children:"Documents"}),e.jsx(ee,{value:"other",children:"Other"})]})]}),e.jsx(Xs,{selectedTermIds:g,onChange:y,placeholder:"Tags"}),_?.page&&_.page.length>0&&e.jsxs("label",{className:"flex cursor-pointer items-center gap-2 text-sm",children:[e.jsx(Ge,{checked:v,onCheckedChange:t=>{k(t),t||x(new Set)}}),"Selection Mode"]})]}),right:e.jsxs("div",{className:"flex items-center gap-2",children:[v&&o.size>0&&e.jsxs("span",{className:"text-sm text-muted-foreground",children:[o.size," selected"]}),v&&e.jsxs(e.Fragment,{children:[e.jsx(h,{variant:"secondary",size:"sm",onClick:ys,children:"Select All"}),e.jsx(h,{variant:"secondary",size:"sm",onClick:ge,children:"Clear"})]}),r&&!w&&e.jsxs(h,{variant:"secondary",onClick:vs,children:[e.jsx(cs,{className:"size-4"}),"Up"]}),!w&&e.jsxs(e.Fragment,{children:[e.jsxs(h,{variant:"secondary",onClick:()=>F(!0),children:[e.jsx(dt,{className:"size-4"}),"New Folder"]}),e.jsxs(h,{onClick:()=>c(!0),children:[e.jsx(Ys,{className:"size-4"}),"Upload Files"]})]})]})}),As?e.jsxs("div",{className:"flex flex-col items-center justify-center py-12",children:[e.jsx("div",{className:"size-8 animate-spin rounded-full border-2 border-muted border-t-primary"}),e.jsx("p",{className:"mt-4 text-sm text-muted-foreground",children:"Loading media library..."})]}):e.jsxs(e.Fragment,{children:[!w&&B&&B.length>0&&!m&&e.jsxs("section",{children:[e.jsx("h3",{className:"mb-3 text-sm font-medium text-muted-foreground",children:"Folders"}),e.jsx("div",{className:"grid grid-cols-2 gap-3 sm:grid-cols-4 md:grid-cols-6",children:B.map(t=>e.jsxs("div",{className:"group relative flex cursor-pointer flex-col items-center gap-2 rounded-lg border bg-card p-4 text-center transition-colors hover:border-primary/50 hover:bg-muted/50",onClick:()=>Ke(t._id),children:[e.jsx("div",{className:"absolute right-2 top-2",children:e.jsx(Nt,{folder:{_id:t._id,name:t.name},onEdit:()=>$({_id:t._id,name:t.name,description:t.description}),onDelete:()=>n({type:"folder",id:t._id,name:t.name})})}),e.jsx(ke,{className:"size-10 text-amber-500"}),e.jsx("span",{className:"truncate text-sm font-medium",children:t.name})]},t._id))})]}),w&&B&&B.length>0&&e.jsxs("section",{children:[e.jsxs("h3",{className:"mb-3 text-sm font-medium text-muted-foreground",children:["Deleted Folders (",B.length,")"]}),e.jsx("div",{className:"grid grid-cols-2 gap-3 sm:grid-cols-4 md:grid-cols-6",children:B.map(t=>e.jsxs("div",{className:"group relative flex flex-col items-center gap-2 rounded-lg border border-destructive/20 bg-card p-4 text-center opacity-60",children:[e.jsx(ke,{className:"size-10 text-amber-500/50"}),e.jsx("span",{className:"truncate text-sm font-medium",children:t.name}),e.jsxs(h,{variant:"secondary",size:"sm",onClick:()=>Ds(t._id),disabled:Ie,children:[e.jsx(we,{className:"mr-1 size-3"}),"Restore"]})]},t._id))})]}),W.length>0?e.jsxs("section",{children:[!w&&B&&B.length>0&&!m&&e.jsx("h3",{className:"mb-3 text-sm font-medium text-muted-foreground",children:"Files"}),w&&e.jsxs("h3",{className:"mb-3 text-sm font-medium text-muted-foreground",children:["Deleted Files (",W.length,")"]}),e.jsx("div",{className:"grid grid-cols-2 gap-3 sm:grid-cols-4 md:grid-cols-6",children:W.map(t=>{const j=t._id,z=o.has(j),O=Mt(t.mimeType);return e.jsxs("div",{className:I("group relative flex cursor-pointer flex-col overflow-hidden rounded-lg border bg-card transition-all hover:border-primary/50",z&&"border-primary ring-2 ring-primary/20"),onClick:()=>Cs(j),children:[v&&e.jsx("div",{className:"absolute left-2 top-2 z-10",children:e.jsx(Ge,{checked:z,onCheckedChange:()=>pe(j),onClick:U=>U.stopPropagation(),className:"bg-white/80"})}),!v&&!w&&e.jsx("div",{className:"absolute right-2 top-2 z-10",children:e.jsx(yt,{asset:{_id:t._id,name:t.name,url:t.url},onView:()=>{const U=W.findIndex(Es=>Es._id===t._id);U!==-1&&Y(U)},onEdit:()=>Z({_id:t._id,name:t.name,title:t.title,description:t.description,altText:t.altText,tags:t.tags}),onDelete:()=>n({type:"asset",id:t._id,name:t.name})})}),!v&&w&&e.jsxs("div",{className:"absolute right-2 top-2 z-10 flex gap-1 opacity-0 group-hover:opacity-100",children:[e.jsx(h,{variant:"secondary",size:"icon-sm",onClick:U=>{U.stopPropagation(),Fs(t._id)},title:"Restore",children:e.jsx(we,{className:"size-4"})}),e.jsx(h,{variant:"danger",size:"icon-sm",onClick:U=>{U.stopPropagation(),re(t._id),ie(!0)},title:"Delete Forever",children:e.jsx(Q,{className:"size-4"})})]}),e.jsx("div",{className:"aspect-square overflow-hidden bg-muted",children:O==="image"&&t.url?e.jsx("img",{src:t.url,alt:t.title||t.name,className:"h-full w-full object-cover"}):e.jsx("div",{className:"flex size-full items-center justify-center text-muted-foreground",children:Ft(O,"size-10")})}),e.jsxs("div",{className:"p-2",children:[e.jsx("p",{className:"truncate text-sm font-medium",title:t.name,children:t.name}),e.jsxs("div",{className:"mt-0.5 flex items-center gap-1 text-xs text-muted-foreground",children:[e.jsx("span",{className:"capitalize",children:O}),e.jsx("span",{children:"•"}),e.jsx("span",{children:zt(t.size??0)})]}),e.jsx("p",{className:"mt-0.5 text-xs text-muted-foreground",children:St(t._creationTime)})]})]},t._id)})}),!_.isDone&&e.jsxs("p",{className:"mt-4 text-center text-sm text-muted-foreground",children:["Showing ",_.page.length," files. More files available."]})]}):w?e.jsx(ve,{icon:e.jsx(Q,{className:"size-8"}),title:"Trash is empty",description:"Deleted files will appear here. You can restore them or permanently delete them."}):!B?.length&&e.jsx(ve,{icon:e.jsx(de,{className:"size-8"}),title:"No media assets yet",description:"Upload images, videos, documents, and other files to use in your content.",action:{label:"Upload Files",onClick:()=>c(!0)}}),m&&W.length===0&&!w&&e.jsx(ve,{icon:e.jsx(es,{className:"size-8"}),title:"No results found",description:`No files match "${m}". Try a different search term.`,action:{label:"Clear Search",onClick:()=>p(""),variant:"secondary"}})]}),e.jsx(be,{open:b,onOpenChange:F,children:e.jsxs(ye,{children:[e.jsx(Ze,{children:e.jsx(Ne,{children:"Create New Folder"})}),e.jsx("div",{className:"space-y-4 py-4",children:e.jsxs("div",{className:"space-y-2",children:[e.jsx(ss,{htmlFor:"folder-name",children:"Folder Name"}),e.jsx(K,{id:"folder-name",value:M,onChange:t=>{P(t.target.value),R("")},placeholder:"Enter folder name",autoFocus:!0,onKeyDown:t=>{t.key==="Enter"&&!N&&Qe()}}),f&&e.jsx("p",{className:"text-sm text-destructive",children:f})]})}),e.jsxs(Je,{children:[e.jsx(h,{variant:"secondary",onClick:()=>F(!1),disabled:N,children:"Cancel"}),e.jsx(h,{onClick:Qe,disabled:N||!M.trim(),loading:N,children:"Create Folder"})]})]})}),e.jsx(be,{open:D,onOpenChange:c,children:e.jsxs(ye,{className:"max-w-lg",children:[e.jsx(Ze,{children:e.jsx(Ne,{children:"Upload Files"})}),e.jsx("div",{className:"py-4",children:e.jsx(Gs,{currentFolderId:r,generateUploadUrl:s.generateUploadUrl,createAsset:s.createMediaAsset,onUploadComplete:_s,maxFileSize:50*1024*1024,maxConcurrentUploads:3})}),e.jsx(Je,{children:e.jsx(h,{variant:"secondary",onClick:()=>c(!1),children:"Close"})})]})}),e.jsx(gt,{asset:q!==null&&W[q]?W[q]:null,assets:W,currentIndex:q??0,open:q!==null,onOpenChange:t=>{t||Y(null)},onNavigate:ks,onEdit:w?void 0:t=>Z({_id:t._id,name:t.name,title:t.title,description:t.description,altText:t.altText,tags:t.tags}),onDelete:w?void 0:t=>n({type:"asset",id:t._id,name:t.name})}),e.jsx(vt,{asset:te,open:te!==null,onOpenChange:t=>{t||Z(null)}}),e.jsx(bt,{folder:le,open:le!==null,onOpenChange:t=>{t||$(null)}}),e.jsx(je,{open:T!==null,onOpenChange:t=>{t||n(null)},title:`Delete ${T?.type==="folder"?"Folder":"File"}?`,description:`Are you sure you want to delete "${T?.name}"? ${T?.type==="folder"?"This will also delete all files inside the folder.":"This action can be undone from the trash."}`,confirmLabel:"Delete",onConfirm:ws,variant:"danger",loading:C}),e.jsx(je,{open:ps,onOpenChange:me,title:"Delete Selected Files?",description:`Are you sure you want to delete ${o.size} ${o.size===1?"file":"files"}? This action can be undone from the trash.`,confirmLabel:"Delete All",onConfirm:zs,variant:"danger",loading:_e}),e.jsx(je,{open:js,onOpenChange:t=>{ie(t),t||re(null)},title:X==="bulk"?`Delete ${o.size} ${o.size===1?"File":"Files"} Forever?`:"Delete Forever?",description:X==="bulk"?`This will permanently delete ${o.size} ${o.size===1?"file":"files"}. This action cannot be undone.`:"This will permanently delete this file. This action cannot be undone.",confirmLabel:"Delete Forever",onConfirm:Ts,variant:"danger",loading:Pe}),e.jsx(wt,{open:fs,onOpenChange:Te,assetIds:Array.from(o),currentFolderId:r,onMoved:Ss}),v&&!w&&e.jsx(Ct,{selectedCount:o.size,onClear:ge,onMove:()=>Te(!0),onDelete:()=>me(!0),isDeleting:_e}),v&&w&&e.jsx(kt,{selectedCount:o.size,onClear:ge,onRestore:Ms,onPermanentDelete:()=>{re("bulk"),ie(!0)},isRestoring:Ie,isDeleting:Pe})]})}function qt(){const s=et(),{settings:i}=Ws();return e.jsx(Dt,{api:Os.admin,navigation:s,settings:i})}export{qt as component};
@@ -1 +0,0 @@
1
- import{l as e}from"./main-CA-4LyFT.js";const t=[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]],c=e("refresh-cw",t);export{c as R};
@@ -1 +0,0 @@
1
- import{l as t}from"./main-CA-4LyFT.js";const e=[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]],a=t("rotate-ccw",e);export{a as R};
@@ -1 +0,0 @@
1
- import{l as S,j as e,v as U,u as q,a as z,r as t,R as C,w as B,X as O,C as k,L as i,S as G,b as V,c as $,d as H,e as J,x as _,y as Q,h as X,k as Z}from"./main-CA-4LyFT.js";import{u as K}from"./usePermissions-BTGdTOJS.js";import{C as L}from"./CmsPageHeader-0REGRH4X.js";import{C as m}from"./CmsSurface-BHmvNai4.js";import{S as v}from"./switch-Ck9ecqEX.js";import{B as N}from"./badge-C6qt24oj.js";import{A as W,a as Y}from"./alert-CG97cMfC.js";import{u as ee}from"./tanstack-adapter-BRt2CUCw.js";const se=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]],te=S("info",se);const ae=[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]],ne=S("monitor",ae);const ie=[["path",{d:"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401",key:"kfwtm"}]],le=S("moon",ie);const ce=[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]],re=S("sun",ce),p={versioning:!0,scheduling:!0,localization:!1,mediaManagement:!0},h={_id:null,defaultLocale:"en",availableLocales:["en","es","fr","de"],features:p},de=[{value:"en",label:"English (en)"},{value:"es",label:"Spanish (es)"},{value:"fr",label:"French (fr)"},{value:"de",label:"German (de)"},{value:"it",label:"Italian (it)"},{value:"pt",label:"Portuguese (pt)"},{value:"zh",label:"Chinese (zh)"},{value:"ja",label:"Japanese (ja)"}],oe=[{value:"light",label:"Light",icon:e.jsx(re,{className:"size-4"})},{value:"dark",label:"Dark",icon:e.jsx(le,{className:"size-4"})},{value:"system",label:"System",icon:e.jsx(ne,{className:"size-4"})}];function D(){const{theme:s,setTheme:b}=Q();return e.jsxs(m,{elevation:"base",className:"p-6",children:[e.jsx("h2",{className:"mb-4 text-lg font-semibold text-foreground",children:"Appearance"}),e.jsx("div",{className:"space-y-4",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx(i,{className:"text-sm font-medium",children:"Theme"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Choose your preferred color theme for the admin interface."})]}),e.jsx("div",{className:"flex gap-1 rounded-lg border bg-muted/50 p-1",children:oe.map(l=>e.jsxs("button",{type:"button",onClick:()=>b(l.value),className:X("flex items-center gap-2 rounded-md px-3 py-1.5 text-sm font-medium transition-colors",s===l.value?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"),children:[l.icon,l.label]},l.value))})]})})]})}function me(){return e.jsx(C,{requiredPermission:{resource:"settings",action:"manage"},children:e.jsxs("div",{className:"space-y-6 p-6",children:[e.jsx(L,{title:"Settings",description:"Configure your CMS settings and preferences."}),e.jsxs("div",{className:"space-y-6",children:[e.jsx(D,{}),e.jsxs(W,{children:[e.jsx(te,{className:"size-4"}),e.jsxs(Y,{children:[e.jsx("strong",{children:"Settings not configured."})," To enable CMS settings, export"," ",e.jsx("code",{className:"rounded bg-muted px-1 py-0.5 text-xs",children:"getSettings"}),","," ",e.jsx("code",{className:"rounded bg-muted px-1 py-0.5 text-xs",children:"updateSettings"}),", and"," ",e.jsx("code",{className:"rounded bg-muted px-1 py-0.5 text-xs",children:"resetSettings"})," ","from your"," ",e.jsx("code",{className:"rounded bg-muted px-1 py-0.5 text-xs",children:"convex/admin.ts"})," ","file."]})]}),e.jsxs(m,{elevation:"base",className:"p-6",children:[e.jsxs("div",{className:"mb-4 flex items-center gap-2",children:[e.jsx("h2",{className:"text-lg font-semibold text-foreground",children:"Features"}),e.jsxs(N,{variant:"secondary",className:"gap-1",children:[e.jsx(_,{className:"size-3"}),"Default values"]})]}),e.jsx("p",{className:"mb-4 text-sm text-muted-foreground",children:"Showing default feature flags. Configure settings in your admin API to customize."}),e.jsx("div",{className:"space-y-4",children:["versioning","scheduling","localization","mediaManagement"].map(s=>e.jsxs("div",{className:"flex items-center justify-between opacity-75",children:[e.jsx("div",{children:e.jsx(i,{className:"text-sm font-medium capitalize",children:s})}),e.jsx(v,{checked:p[s],disabled:!0})]},s))})]}),e.jsxs(m,{elevation:"base",className:"p-6",children:[e.jsx("h2",{className:"mb-4 text-lg font-semibold text-foreground",children:"API"}),e.jsx("div",{className:"space-y-4",children:e.jsxs("div",{children:[e.jsx(i,{className:"text-sm font-medium",children:"Convex Deployment URL"}),e.jsx("code",{className:"mt-1 block rounded-md bg-muted px-3 py-2 text-sm",children:"https://majestic-beagle-49.convex.cloud"})]})})]})]})]})})}function ue({api:s}){const{canManageSettings:b}=K(),l=b(),E=U(),c=q(s.getSettings,{}),M=z(s.updateSettings??(()=>{})),w=z(s.resetSettings??(()=>{})),[r,g]=t.useState(null),[u,y]=t.useState(!1),[x,a]=t.useState("idle"),[A,f]=t.useState(null),n=t.useMemo(()=>c?{_id:c._id??null,defaultLocale:c.defaultLocale??h.defaultLocale,availableLocales:c.availableLocales??h.availableLocales,features:{...p,...c.features??{}},updatedBy:c.updatedBy,_creationTime:c._creationTime}:null,[c]);t.useEffect(()=>{n&&!r&&g(n)},[n,r]),t.useEffect(()=>{n&&!u&&g(n)},[n,u]);const P=t.useCallback(d=>{r&&(g({...r,defaultLocale:d}),y(!0),a("idle"))},[r]),I=t.useCallback(async()=>{if(!(!r||!u||!s.updateSettings)){a("saving"),f(null);try{await M({defaultLocale:r.defaultLocale}),a("saved"),y(!1),setTimeout(()=>{a("idle")},3e3)}catch(d){a("error"),f(d instanceof Error?d.message:"Failed to save settings")}}},[r,u,s.updateSettings,M]),F=t.useCallback(async()=>{if(!(!s.resetSettings||!window.confirm("Are you sure you want to reset all settings to their defaults? This action cannot be undone."))){a("saving"),f(null);try{const o=await w({});g({...h,_id:o?._id??null,defaultLocale:o?.defaultLocale??h.defaultLocale,availableLocales:o?.availableLocales??h.availableLocales,features:{...p,...o?.features??{}}}),a("saved"),y(!1),setTimeout(()=>{a("idle")},3e3)}catch(o){a("error"),f(o instanceof Error?o.message:"Failed to reset settings")}}},[s.resetSettings,w]),R=t.useCallback(()=>{n&&(g(n),y(!1),a("idle"),f(null))},[n]);if(c===void 0)return e.jsx(C,{requiredPermission:{resource:"settings",action:"manage"},children:e.jsxs("div",{className:"space-y-6 p-6",children:[e.jsx(L,{title:"Settings",description:"Configure your CMS settings and preferences."}),e.jsxs("div",{className:"flex flex-col items-center justify-center py-12",children:[e.jsx("div",{className:"size-8 animate-spin rounded-full border-2 border-muted border-t-primary"}),e.jsx("p",{className:"mt-4 text-sm text-muted-foreground",children:"Loading settings..."})]})]})});const T=r??n??h,j=T.features??p;return e.jsx(C,{requiredPermission:{resource:"settings",action:"manage"},children:e.jsxs("div",{className:"space-y-6 p-6",children:[e.jsxs("div",{className:"flex items-start justify-between",children:[e.jsx(L,{title:"Settings",description:"Configure your CMS settings and preferences."}),l&&s.updateSettings&&e.jsxs("div",{className:"flex items-center gap-3",children:[x==="saved"&&e.jsxs(N,{variant:"secondary",className:"gap-1 bg-diff-added-bg text-diff-added-foreground",children:[e.jsx(B,{className:"size-3"}),"Settings saved successfully"]}),x==="error"&&e.jsxs(N,{variant:"destructive",className:"gap-1",children:[e.jsx(O,{className:"size-3"}),A||"An error occurred"]}),u&&e.jsx(k,{variant:"secondary",onClick:R,disabled:x==="saving",children:"Discard Changes"}),e.jsx(k,{onClick:I,disabled:!u,loading:x==="saving",children:"Save Changes"})]})]}),e.jsxs("div",{className:"space-y-6",children:[e.jsx(D,{}),j.localization&&e.jsxs(m,{elevation:"base",className:"p-6",children:[e.jsx("h2",{className:"mb-4 text-lg font-semibold text-foreground",children:"General"}),e.jsx("div",{className:"space-y-4",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx(i,{className:"text-sm font-medium",children:"Default Locale"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"The default language for new content entries."})]}),e.jsxs(G,{value:T.defaultLocale,onValueChange:P,disabled:!l||x==="saving"||!s.updateSettings,children:[e.jsx(V,{className:"w-48",children:e.jsx($,{})}),e.jsx(H,{children:de.map(d=>e.jsx(J,{value:d.value,children:d.label},d.value))})]})]})})]}),e.jsxs(m,{elevation:"base",className:"p-6",children:[e.jsxs("div",{className:"mb-4 flex items-center gap-2",children:[e.jsx("h2",{className:"text-lg font-semibold text-foreground",children:"Features"}),e.jsxs(N,{variant:"secondary",className:"gap-1",children:[e.jsx(_,{className:"size-3"}),"Configured in code"]})]}),e.jsx("p",{className:"mb-4 text-sm text-muted-foreground",children:"Feature flags are defined in your Convex configuration and cannot be changed from the UI."}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-center justify-between opacity-75",children:[e.jsxs("div",{children:[e.jsx(i,{className:"text-sm font-medium",children:"Versioning"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Track content history and enable rollback to previous versions"})]}),e.jsx(v,{checked:j.versioning,disabled:!0})]}),e.jsxs("div",{className:"flex items-center justify-between opacity-75",children:[e.jsxs("div",{children:[e.jsx(i,{className:"text-sm font-medium",children:"Scheduling"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Schedule content to publish at a future date and time"})]}),e.jsx(v,{checked:j.scheduling,disabled:!0})]}),e.jsxs("div",{className:"flex items-center justify-between opacity-75",children:[e.jsxs("div",{children:[e.jsx(i,{className:"text-sm font-medium",children:"Localization"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Support multiple languages for content entries"})]}),e.jsx(v,{checked:j.localization,disabled:!0})]}),E.navigation.showMedia&&e.jsxs("div",{className:"flex items-center justify-between opacity-75",children:[e.jsxs("div",{children:[e.jsx(i,{className:"text-sm font-medium",children:"Media Management"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Use the built-in media library for image and file uploads"})]}),e.jsx(v,{checked:j.mediaManagement,disabled:!0})]})]})]}),e.jsxs(m,{elevation:"base",className:"p-6",children:[e.jsx("h2",{className:"mb-4 text-lg font-semibold text-foreground",children:"API"}),e.jsx("div",{className:"space-y-4",children:e.jsxs("div",{children:[e.jsx(i,{className:"text-sm font-medium",children:"Convex Deployment URL"}),e.jsx("code",{className:"mt-1 block rounded-md bg-muted px-3 py-2 text-sm",children:"https://majestic-beagle-49.convex.cloud"})]})})]}),l&&s.resetSettings&&e.jsxs(m,{elevation:"base",className:"border-destructive/50 p-6",children:[e.jsx("h2",{className:"mb-4 text-lg font-semibold text-destructive",children:"Danger Zone"}),e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx(i,{className:"text-sm font-medium",children:"Reset to Defaults"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Reset all settings to their default values. This cannot be undone."})]}),e.jsx(k,{variant:"danger",onClick:F,disabled:x==="saving",children:"Reset Settings"})]})]})]})]})})}function xe({api:s,navigation:b}){return s.getSettings?e.jsx(ue,{api:s}):e.jsx(me,{})}function Ne(){const s=ee();return e.jsx(xe,{api:Z.admin,navigation:s})}export{Ne as component};
@@ -1 +0,0 @@
1
- import{ad as m,ae as y,af as v,r as e}from"./main-CA-4LyFT.js";function f(a){return m({select:n=>n.location})}function d(){const a=y(),n=f(),s=v({strict:!1}),c=e.useCallback((t,p)=>{let o=t;if(p)for(const[g,k]of Object.entries(p))o=o.replace(`:${g}`,k).replace(`$${g}`,k);a({to:o})},[a]),r=e.useCallback(t=>{a({to:"/entries/$entryId",params:{entryId:t}})},[a]),i=e.useCallback(t=>{a({to:"/entries/type/$contentTypeId",params:{contentTypeId:t}})},[a]),l=e.useCallback(t=>{a({to:"/entries/new/$contentTypeId",params:{contentTypeId:t}})},[a]),u=e.useCallback(()=>{window.history.back()},[]);return e.useMemo(()=>({navigate:c,currentRoute:n.pathname,params:s??{},canGoBack:window.history.length>1,goBack:u,navigateToEntry:r,navigateToContentType:i,navigateToNewEntry:l}),[c,n.pathname,s,u,r,i,l])}export{d as u};
@@ -1 +0,0 @@
1
- import{r as a,u as m,a as E,j as e,C as c,T as D,I as Y,S as Z,b as ee,c as se,d as te,e as I,f as A,X as R,g as _,h as ae,i as ne,k as re}from"./main-CA-4LyFT.js";import{C as le}from"./CmsPageHeader-0REGRH4X.js";import{C as oe}from"./CmsToolbar-CY6GV2L8.js";import{C as ie}from"./CmsEmptyState-DTlpzjOI.js";import{C as Q}from"./CmsSurface-BHmvNai4.js";import{B as ce}from"./badge-C6qt24oj.js";import{A as L,a as B}from"./alert-CG97cMfC.js";import{S as de}from"./search-WXp6KxDJ.js";import{R as M}from"./rotate-ccw-6OcXCcxb.js";import{u as me}from"./tanstack-adapter-BRt2CUCw.js";function xe({api:l,navigation:ue}){const[g,F]=a.useState(""),[j,O]=a.useState(""),[r,i]=a.useState(new Set),[y,x]=a.useState(null),[N,C]=a.useState(!1),[P,u]=a.useState(!1),[b,v]=a.useState(!1),[S,h]=a.useState(null),T=m(l.listTrash,{contentTypeId:g||void 0,search:j||void 0,paginationOpts:{numItems:50,cursor:null}}),U=m(l.getTrashConfig,{}),V=m(l.getTrashStats,{}),H=m(l.listContentTypes,{})?.page??[],w=E(l.bulkRestore),k=E(l.emptyTrash),o=T?.page??[],X=T===void 0,p=U,f=V,$=a.useCallback((s,t)=>{i(n=>{const d=new Set(n);return t?d.add(s):d.delete(s),d})},[]),q=a.useCallback(()=>{r.size===o.length?i(new Set):i(new Set(o.map(s=>s._id)))},[r.size,o]),z=a.useCallback(async s=>{C(!0),x(null);try{await w({ids:s}),i(t=>{const n=new Set(t);return s.forEach(d=>n.delete(d)),n})}catch(t){const n=t instanceof Error?t.message:"Failed to restore";x(n)}finally{C(!1)}},[w]),G=a.useCallback(async()=>{v(!0),h(null);try{await k({}),u(!1),i(new Set)}catch(s){const t=s instanceof Error?s.message:"Failed to empty trash";h(t)}finally{v(!1)}},[k]),J=s=>new Date(s).toLocaleString(void 0,{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}),K=s=>{if(!p?.retentionDays)return null;const t=s+p.retentionDays*24*60*60*1e3,n=Math.ceil((t-Date.now())/(1440*60*1e3));return Math.max(0,n)},W=s=>{if(s.title)return s.title;if(s.name)return s.name;if(s.data){const t=s.data.title||s.data.name;if(t&&typeof t=="string")return t}return s.slug||s._id};return e.jsxs("div",{className:"space-y-6 p-6",children:[e.jsxs("div",{className:"flex items-start justify-between",children:[e.jsx(le,{title:"Trash",description:`Deleted items are kept for ${p?.retentionDays??30} days before permanent deletion`}),o.length>0&&e.jsxs(c,{variant:"danger",onClick:()=>u(!0),children:[e.jsx(D,{className:"size-4"}),"Empty Trash"]})]}),f&&e.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[e.jsxs(Q,{elevation:"base",className:"p-4",children:[e.jsx("p",{className:"text-2xl font-semibold text-foreground",children:f.totalCount??0}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Items in Trash"})]}),e.jsxs(Q,{elevation:"base",className:"p-4",children:[e.jsx("p",{className:"text-2xl font-semibold text-foreground",children:f.expiredCount??0}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Expired"})]})]}),e.jsx(oe,{left:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs("div",{className:"relative",children:[e.jsx(de,{className:"absolute left-3 top-1/2 size-4 -translate-y-1/2 text-muted-foreground"}),e.jsx(Y,{type:"text",placeholder:"Search deleted items...",value:j,onChange:s=>O(s.target.value),className:"w-64 pl-9"})]}),e.jsxs(Z,{value:g||"all",onValueChange:s=>F(s==="all"?"":s),children:[e.jsx(ee,{className:"w-48",children:e.jsx(se,{placeholder:"All Content Types"})}),e.jsxs(te,{children:[e.jsx(I,{value:"all",children:"All Content Types"}),H.map(s=>e.jsx(I,{value:s._id,children:s.displayName},s._id))]})]})]})}),y&&e.jsxs(L,{variant:"destructive",children:[e.jsx(A,{className:"size-4"}),e.jsxs(B,{className:"flex items-center justify-between",children:[y,e.jsx(c,{variant:"ghost",size:"icon-sm",onClick:()=>x(null),children:e.jsx(R,{className:"size-4"})})]})]}),S&&e.jsxs(L,{variant:"destructive",children:[e.jsx(A,{className:"size-4"}),e.jsxs(B,{className:"flex items-center justify-between",children:[S,e.jsx(c,{variant:"ghost",size:"icon-sm",onClick:()=>h(null),children:e.jsx(R,{className:"size-4"})})]})]}),r.size>0&&e.jsxs("div",{className:"flex items-center gap-3 rounded-lg border border-primary/20 bg-primary/5 p-3",children:[e.jsxs("span",{className:"text-sm font-medium",children:[r.size," ",r.size===1?"item":"items"," ","selected"]}),e.jsxs(c,{variant:"primary",size:"sm",onClick:()=>z(Array.from(r)),loading:N,children:[e.jsx(M,{className:"size-4"}),"Restore Selected"]}),e.jsx(c,{variant:"secondary",size:"sm",onClick:()=>i(new Set),children:"Clear Selection"})]}),X?e.jsxs("div",{className:"flex flex-col items-center justify-center py-12",children:[e.jsx("div",{className:"size-8 animate-spin rounded-full border-2 border-muted border-t-primary"}),e.jsx("p",{className:"mt-4 text-sm text-muted-foreground",children:"Loading trash..."})]}):o.length===0?e.jsx(ie,{icon:e.jsx(D,{className:"size-6"}),title:"Trash is empty",description:"Deleted items will appear here"}):e.jsx("div",{className:"rounded-lg border bg-card",children:e.jsxs("table",{className:"w-full",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b",children:[e.jsx("th",{className:"w-10 p-3 text-left",children:e.jsx(_,{checked:r.size===o.length&&o.length>0,onCheckedChange:q})}),e.jsx("th",{className:"p-3 text-left text-sm font-medium text-muted-foreground",children:"Name"}),e.jsx("th",{className:"p-3 text-left text-sm font-medium text-muted-foreground",children:"Type"}),e.jsx("th",{className:"p-3 text-left text-sm font-medium text-muted-foreground",children:"Deleted"}),e.jsx("th",{className:"p-3 text-left text-sm font-medium text-muted-foreground",children:"Expires In"}),e.jsx("th",{className:"p-3 text-left text-sm font-medium text-muted-foreground",children:"Actions"})]})}),e.jsx("tbody",{children:o.map(s=>{const t=K(s.deletedAt);return e.jsxs("tr",{className:ae("border-b last:border-0 transition-colors hover:bg-muted/50",r.has(s._id)&&"bg-primary/5"),children:[e.jsx("td",{className:"p-3",children:e.jsx(_,{checked:r.has(s._id),onCheckedChange:n=>$(s._id,n)})}),e.jsxs("td",{className:"p-3",children:[e.jsx("span",{className:"font-medium text-foreground",children:W(s)}),s.slug&&e.jsx("span",{className:"block text-xs text-muted-foreground",children:s.slug})]}),e.jsx("td",{className:"p-3 text-sm text-muted-foreground",children:s.contentTypeName||"Unknown"}),e.jsxs("td",{className:"p-3",children:[e.jsx("span",{className:"text-sm text-muted-foreground",children:J(s.deletedAt)}),s.deletedBy&&e.jsxs("span",{className:"block text-xs text-muted-foreground",children:["by ",s.deletedBy]})]}),e.jsx("td",{className:"p-3",children:t!==null&&e.jsxs(ce,{variant:t<=3?"destructive":"secondary",className:"font-normal",children:[t," ",t===1?"day":"days"]})}),e.jsx("td",{className:"p-3",children:e.jsxs(c,{variant:"outline",size:"sm",onClick:()=>z([s._id]),loading:N,children:[e.jsx(M,{className:"size-4"}),"Restore"]})})]},s._id)})})]})}),e.jsx(ne,{open:P,onOpenChange:u,title:"Empty Trash",description:"This will permanently delete all items in the trash. This action cannot be undone.",confirmLabel:b?"Deleting...":"Empty Trash",onConfirm:G,variant:"danger",loading:b})]})}function Te(){const l=me();return e.jsx(xe,{api:re.admin,navigation:l})}export{Te as component};
@@ -1,48 +0,0 @@
1
- import { j as jsxRuntimeExports } from "../_chunks/_libs/react.mjs";
2
- import { I as Input, f as cn } from "./router-CQXMuGMF.mjs";
3
- import { a1 as Search } from "../_libs/lucide-react.mjs";
4
- function CmsToolbar({
5
- left,
6
- right,
7
- search,
8
- filters,
9
- actions,
10
- className,
11
- children,
12
- ...props
13
- }) {
14
- return /* @__PURE__ */ jsxRuntimeExports.jsxs(
15
- "div",
16
- {
17
- className: cn(
18
- "flex flex-wrap items-center justify-between gap-3 pb-4",
19
- className
20
- ),
21
- ...props,
22
- children: [
23
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-1 flex-wrap items-center gap-2", children: [
24
- search && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative w-full max-w-xs", children: [
25
- /* @__PURE__ */ jsxRuntimeExports.jsx(Search, { className: "absolute left-3 top-1/2 size-4 -translate-y-1/2 text-muted-foreground" }),
26
- /* @__PURE__ */ jsxRuntimeExports.jsx(
27
- Input,
28
- {
29
- type: "search",
30
- placeholder: search.placeholder ?? "Search...",
31
- value: search.value,
32
- onChange: (e) => search.onChange(e.target.value),
33
- className: "pl-9"
34
- }
35
- )
36
- ] }),
37
- filters,
38
- left,
39
- children
40
- ] }),
41
- (right || actions) && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex items-center gap-2", children: right ?? actions })
42
- ]
43
- }
44
- );
45
- }
46
- export {
47
- CmsToolbar as C
48
- };
@@ -1,4 +0,0 @@
1
- const tsrStartManifest = () => ({ "routes": { "__root__": { "filePath": "/Users/home/Developer/projects/convex-cms/admin/src/routes/__root.tsx", "children": ["/", "/content", "/content-types", "/media", "/settings", "/taxonomies", "/trash", "/entries/$entryId", "/entries/new/$contentTypeId", "/entries/type/$contentTypeId"], "preloads": ["/assets/main-CA-4LyFT.js"], "assets": [] }, "/": { "filePath": "/Users/home/Developer/projects/convex-cms/admin/src/routes/index.tsx", "assets": [], "preloads": ["/assets/index-CtHq_P5q.js", "/assets/CmsPageHeader-0REGRH4X.js", "/assets/alert-CG97cMfC.js", "/assets/refresh-cw-sdVUGJNs.js", "/assets/tanstack-adapter-BRt2CUCw.js"] }, "/content": { "filePath": "/Users/home/Developer/projects/convex-cms/admin/src/routes/content.tsx", "assets": [], "preloads": ["/assets/content-pKaIL2ru.js", "/assets/usePermissions-BTGdTOJS.js", "/assets/circle-check-big-PltpxuB1.js", "/assets/badge-C6qt24oj.js", "/assets/CmsPageHeader-0REGRH4X.js", "/assets/CmsToolbar-CY6GV2L8.js", "/assets/CmsEmptyState-DTlpzjOI.js", "/assets/CmsStatusBadge-D_n8u8xa.js", "/assets/search-WXp6KxDJ.js", "/assets/tanstack-adapter-BRt2CUCw.js"] }, "/content-types": { "filePath": "/Users/home/Developer/projects/convex-cms/admin/src/routes/content-types.tsx", "assets": [], "preloads": ["/assets/content-types-Bl_8I1Re.js", "/assets/CmsPageHeader-0REGRH4X.js", "/assets/CmsToolbar-CY6GV2L8.js", "/assets/CmsEmptyState-DTlpzjOI.js", "/assets/badge-C6qt24oj.js", "/assets/search-WXp6KxDJ.js", "/assets/pencil-gAL0R34f.js", "/assets/tanstack-adapter-BRt2CUCw.js"] }, "/media": { "filePath": "/Users/home/Developer/projects/convex-cms/admin/src/routes/media.tsx", "assets": [], "preloads": ["/assets/media-Bl1tBbJQ.js", "/assets/tabs-vQYu8rjC.js", "/assets/CmsPageHeader-0REGRH4X.js", "/assets/CmsToolbar-CY6GV2L8.js", "/assets/CmsEmptyState-DTlpzjOI.js", "/assets/TaxonomyFilter-Ohv5Jg9c.js", "/assets/pencil-gAL0R34f.js", "/assets/badge-C6qt24oj.js", "/assets/rotate-ccw-6OcXCcxb.js", "/assets/search-WXp6KxDJ.js", "/assets/tanstack-adapter-BRt2CUCw.js", "/assets/refresh-cw-sdVUGJNs.js", "/assets/command-CJ8i86fd.js"] }, "/settings": { "filePath": "/Users/home/Developer/projects/convex-cms/admin/src/routes/settings.tsx", "assets": [], "preloads": ["/assets/settings-D8crrFCn.js", "/assets/usePermissions-BTGdTOJS.js", "/assets/CmsPageHeader-0REGRH4X.js", "/assets/CmsSurface-BHmvNai4.js", "/assets/switch-Ck9ecqEX.js", "/assets/badge-C6qt24oj.js", "/assets/alert-CG97cMfC.js", "/assets/tanstack-adapter-BRt2CUCw.js"] }, "/taxonomies": { "filePath": "/Users/home/Developer/projects/convex-cms/admin/src/routes/taxonomies.tsx", "assets": [], "preloads": ["/assets/taxonomies-DvILUNvr.js", "/assets/CmsEmptyState-DTlpzjOI.js", "/assets/pencil-gAL0R34f.js", "/assets/CmsPageHeader-0REGRH4X.js", "/assets/CmsSurface-BHmvNai4.js", "/assets/badge-C6qt24oj.js", "/assets/scroll-area-CJBhf9pf.js", "/assets/tanstack-adapter-BRt2CUCw.js"] }, "/trash": { "filePath": "/Users/home/Developer/projects/convex-cms/admin/src/routes/trash.tsx", "assets": [], "preloads": ["/assets/trash-YyYaC3L9.js", "/assets/CmsPageHeader-0REGRH4X.js", "/assets/CmsToolbar-CY6GV2L8.js", "/assets/CmsEmptyState-DTlpzjOI.js", "/assets/CmsSurface-BHmvNai4.js", "/assets/badge-C6qt24oj.js", "/assets/alert-CG97cMfC.js", "/assets/search-WXp6KxDJ.js", "/assets/rotate-ccw-6OcXCcxb.js", "/assets/tanstack-adapter-BRt2CUCw.js"] }, "/entries/$entryId": { "filePath": "/Users/home/Developer/projects/convex-cms/admin/src/routes/entries/$entryId.tsx", "assets": [], "preloads": ["/assets/_entryId-jPXz4z9T.js", "/assets/ContentEntryEditor-CRgcRkk5.js", "/assets/usePermissions-BTGdTOJS.js", "/assets/useBreadcrumbLabel-tlSh7dtO.js", "/assets/CmsEmptyState-DTlpzjOI.js", "/assets/switch-Ck9ecqEX.js", "/assets/tabs-vQYu8rjC.js", "/assets/refresh-cw-sdVUGJNs.js", "/assets/pencil-gAL0R34f.js", "/assets/search-WXp6KxDJ.js", "/assets/command-CJ8i86fd.js", "/assets/badge-C6qt24oj.js", "/assets/CmsStatusBadge-D_n8u8xa.js", "/assets/scroll-area-CJBhf9pf.js", "/assets/circle-check-big-PltpxuB1.js"] }, "/entries/new/$contentTypeId": { "filePath": "/Users/home/Developer/projects/convex-cms/admin/src/routes/entries/new.$contentTypeId.tsx", "assets": [], "preloads": ["/assets/new._contentTypeId-qsvo01mH.js", "/assets/ContentEntryEditor-CRgcRkk5.js", "/assets/useBreadcrumbLabel-tlSh7dtO.js", "/assets/CmsEmptyState-DTlpzjOI.js", "/assets/switch-Ck9ecqEX.js", "/assets/tabs-vQYu8rjC.js", "/assets/refresh-cw-sdVUGJNs.js", "/assets/pencil-gAL0R34f.js", "/assets/search-WXp6KxDJ.js", "/assets/command-CJ8i86fd.js", "/assets/badge-C6qt24oj.js", "/assets/CmsStatusBadge-D_n8u8xa.js", "/assets/scroll-area-CJBhf9pf.js", "/assets/circle-check-big-PltpxuB1.js"] }, "/entries/type/$contentTypeId": { "filePath": "/Users/home/Developer/projects/convex-cms/admin/src/routes/entries/type/$contentTypeId.tsx", "assets": [], "preloads": ["/assets/_contentTypeId-C_vJq22X.js", "/assets/usePermissions-BTGdTOJS.js", "/assets/useBreadcrumbLabel-tlSh7dtO.js", "/assets/CmsPageHeader-0REGRH4X.js", "/assets/CmsToolbar-CY6GV2L8.js", "/assets/CmsStatusBadge-D_n8u8xa.js", "/assets/CmsEmptyState-DTlpzjOI.js", "/assets/TaxonomyFilter-Ohv5Jg9c.js", "/assets/search-WXp6KxDJ.js", "/assets/badge-C6qt24oj.js", "/assets/command-CJ8i86fd.js"] } }, "clientEntry": "/assets/main-CA-4LyFT.js" });
2
- export {
3
- tsrStartManifest
4
- };