convex-cms 0.0.8 → 0.0.9-alpha.3

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 (158) hide show
  1. package/README.md +11 -1
  2. package/admin/src/components/BulkActionBar.tsx +6 -5
  3. package/admin/src/components/ContentEntryEditor.tsx +10 -9
  4. package/admin/src/components/ContentTypeFormModal.tsx +4 -3
  5. package/admin/src/components/Header.tsx +1 -1
  6. package/admin/src/components/RouteGuard.tsx +1 -1
  7. package/admin/src/components/Sidebar.tsx +3 -2
  8. package/admin/src/components/TaxonomyEditor.tsx +4 -3
  9. package/admin/src/components/TermTree.tsx +8 -6
  10. package/admin/src/components/VersionCompare.tsx +3 -2
  11. package/admin/src/components/VersionHistory.tsx +4 -3
  12. package/admin/src/components/fields/CategoryField.tsx +3 -2
  13. package/admin/src/components/fields/MediaField.tsx +6 -5
  14. package/admin/src/components/fields/ReferenceField.tsx +6 -5
  15. package/admin/src/components/fields/TagField.tsx +5 -4
  16. package/admin/src/components/filters/TaxonomyFilter.tsx +4 -3
  17. package/admin/src/components/media/MediaAssetEditDialog.tsx +4 -3
  18. package/admin/src/components/media/MediaFolderEditDialog.tsx +3 -2
  19. package/admin/src/components/media/MediaMoveModal.tsx +4 -3
  20. package/admin/src/components/media/MediaTaxonomyPicker.tsx +6 -5
  21. package/admin/src/contexts/AuthContext.tsx +1 -1
  22. package/admin/src/contexts/SettingsConfigContext.tsx +19 -5
  23. package/admin/src/embed/contexts/ApiContext.tsx +6 -2
  24. package/admin/src/hooks/usePermissions.ts +1 -1
  25. package/admin/src/routes/__root.tsx +7 -3
  26. package/admin-dist/nitro.json +1 -1
  27. package/admin-dist/public/assets/{CmsEmptyState-6-PLaXtD.js → CmsEmptyState-BM4e6N83.js} +1 -1
  28. package/admin-dist/public/assets/{CmsPageHeader-SoF4Epu9.js → CmsPageHeader-uor3DPIk.js} +1 -1
  29. package/admin-dist/public/assets/{CmsStatusBadge-D7kYaohx.js → CmsStatusBadge-D8N18LJx.js} +1 -1
  30. package/admin-dist/public/assets/{CmsSurface-BvksBm6W.js → CmsSurface-BEcY-WpI.js} +1 -1
  31. package/admin-dist/public/assets/{CmsToolbar-DlZPMe2B.js → CmsToolbar-DE-bu3W8.js} +1 -1
  32. package/admin-dist/public/assets/ContentEntryEditor-BdkIMCUk.js +4 -0
  33. package/admin-dist/public/assets/TaxonomyFilter-a1-O9DPs.js +1 -0
  34. package/admin-dist/public/assets/{_contentTypeId-DTv8UoTp.js → _contentTypeId-XIkYOLyY.js} +1 -1
  35. package/admin-dist/public/assets/{_entryId-D3lr5Dvy.js → _entryId-DyP15QpI.js} +1 -1
  36. package/admin-dist/public/assets/{alert-BAHTL6ao.js → alert-DHBQuuib.js} +1 -1
  37. package/admin-dist/public/assets/{badge-oJv4Eai8.js → badge-BOhWFWzb.js} +1 -1
  38. package/admin-dist/public/assets/{circle-check-big-3OHxNDhO.js → circle-check-big-DjTNapen.js} +1 -1
  39. package/admin-dist/public/assets/{command-DwgQs69u.js → command-BIc5_8gL.js} +1 -1
  40. package/admin-dist/public/assets/content-C3N8Ugra.js +1 -0
  41. package/admin-dist/public/assets/content-types-D0wh1eUF.js +1 -0
  42. package/admin-dist/public/assets/{index-DOkgTSx0.js → index-B-g3F_ri.js} +1 -1
  43. package/admin-dist/public/assets/main-BapBJgQD.js +102 -0
  44. package/admin-dist/public/assets/media-8uh1MwDi.js +1 -0
  45. package/admin-dist/public/assets/{new._contentTypeId-VF63rpic.js → new._contentTypeId-S96rFbgY.js} +1 -1
  46. package/admin-dist/public/assets/{pencil-CX1CiTDD.js → pencil-DgaZav4e.js} +1 -1
  47. package/admin-dist/public/assets/{refresh-cw-Cm-YOeFI.js → refresh-cw-BBut4hAU.js} +1 -1
  48. package/admin-dist/public/assets/{rotate-ccw-B45JsL5f.js → rotate-ccw-DVCkojZZ.js} +1 -1
  49. package/admin-dist/public/assets/{scroll-area-b3A1HHR7.js → scroll-area-DPC4uXzf.js} +1 -1
  50. package/admin-dist/public/assets/{search-DKKh_DdH.js → search-CSyHHglh.js} +1 -1
  51. package/admin-dist/public/assets/{settings-CGVDEV1r.js → settings-cEqPsoJ0.js} +1 -1
  52. package/admin-dist/public/assets/{switch-BTMY8Qnk.js → switch-O2BviO8Q.js} +1 -1
  53. package/admin-dist/public/assets/{tabs-DUQwUoIb.js → tabs-p1MWhOqY.js} +1 -1
  54. package/admin-dist/public/assets/{tanstack-adapter-f7AHmQ5L.js → tanstack-adapter-CDrxoPZD.js} +1 -1
  55. package/admin-dist/public/assets/taxonomies-DJ9UbjXW.js +1 -0
  56. package/admin-dist/public/assets/{trash-D7e0uKd9.js → trash-RnpP6lXF.js} +1 -1
  57. package/admin-dist/public/assets/{useBreadcrumbLabel-CF2KYwsw.js → useBreadcrumbLabel-zbIWXlkc.js} +1 -1
  58. package/admin-dist/public/assets/{usePermissions-DWBImEOW.js → usePermissions-4CTlK-vU.js} +1 -1
  59. package/admin-dist/server/_chunks/_libs/@floating-ui/core.mjs +71 -65
  60. package/admin-dist/server/_chunks/_libs/@floating-ui/dom.mjs +1 -1
  61. package/admin-dist/server/_chunks/_libs/@floating-ui/utils.mjs +8 -8
  62. package/admin-dist/server/_chunks/_libs/@tanstack/react-router.mjs +12 -30
  63. package/admin-dist/server/_chunks/_libs/@tanstack/react-store.mjs +1 -56
  64. package/admin-dist/server/_chunks/_libs/@tanstack/router-core.mjs +130 -114
  65. package/admin-dist/server/_chunks/_libs/@tanstack/store.mjs +1 -134
  66. package/admin-dist/server/_chunks/_libs/react-dom.mjs +5 -5
  67. package/admin-dist/server/_chunks/_libs/react.mjs +1 -1
  68. package/admin-dist/server/_libs/isbot.mjs +1 -1
  69. package/admin-dist/server/_libs/use-sync-external-store.mjs +1 -76
  70. package/admin-dist/server/_ssr/{CmsEmptyState-BM8DghTl.mjs → CmsEmptyState-BA0Lc5xs.mjs} +1 -1
  71. package/admin-dist/server/_ssr/{CmsPageHeader-BHUmrIWD.mjs → CmsPageHeader-PMyecILZ.mjs} +1 -1
  72. package/admin-dist/server/_ssr/{CmsStatusBadge-D0Zb0oRl.mjs → CmsStatusBadge-CInuN2bZ.mjs} +2 -2
  73. package/admin-dist/server/_ssr/{CmsSurface-B2eBr-47.mjs → CmsSurface-CH1PIfcS.mjs} +1 -1
  74. package/admin-dist/server/_ssr/{CmsToolbar-BCrwg7OL.mjs → CmsToolbar-IuhSA7gR.mjs} +1 -1
  75. package/admin-dist/server/_ssr/{ContentEntryEditor-Cjfm0uhr.mjs → ContentEntryEditor-Bzhir4fQ.mjs} +38 -31
  76. package/admin-dist/server/_ssr/{TaxonomyFilter-C4pD0kfM.mjs → TaxonomyFilter-r4izSMBh.mjs} +6 -5
  77. package/admin-dist/server/_ssr/{_contentTypeId-CiDiX-p7.mjs → _contentTypeId-BWEbjqxY.mjs} +11 -13
  78. package/admin-dist/server/_ssr/{_entryId-9GxatOkL.mjs → _entryId-B5xoXoJf.mjs} +12 -14
  79. package/admin-dist/server/_ssr/_tanstack-start-manifest_v-CBTan6ii.mjs +4 -0
  80. package/admin-dist/server/_ssr/{badge-EI998zba.mjs → badge-DXrjBRqZ.mjs} +1 -1
  81. package/admin-dist/server/_ssr/{command-BLAWQhUw.mjs → command-Cj90OdCX.mjs} +1 -1
  82. package/admin-dist/server/_ssr/config.server-BOr7Jxr4.mjs +0 -3
  83. package/admin-dist/server/_ssr/{content-BHX39L4D.mjs → content-DKRI-YqL.mjs} +14 -15
  84. package/admin-dist/server/_ssr/{content-types-DCzrBhTH.mjs → content-types-BzgRcS8K.mjs} +7 -9
  85. package/admin-dist/server/_ssr/{index-DwM_5VNP.mjs → index-BPf6_agY.mjs} +4 -6
  86. package/admin-dist/server/_ssr/index.mjs +11 -10
  87. package/admin-dist/server/_ssr/{media-CbzgTRRQ.mjs → media-MpjxOZL8.mjs} +23 -21
  88. package/admin-dist/server/_ssr/{new._contentTypeId-6Ph-Gtlw.mjs → new._contentTypeId-DSb4qR9j.mjs} +11 -13
  89. package/admin-dist/server/_ssr/{router-vd1nySeP.mjs → router-Dk9ikPNc.mjs} +61 -47
  90. package/admin-dist/server/_ssr/{scroll-area--B9snFTJ.mjs → scroll-area-JwVD_6MZ.mjs} +1 -1
  91. package/admin-dist/server/_ssr/{settings-DlTO2JSj.mjs → settings-KVJNe0GM.mjs} +8 -10
  92. package/admin-dist/server/_ssr/{switch-C05NgNW0.mjs → switch-DvREvRv4.mjs} +1 -1
  93. package/admin-dist/server/_ssr/{tabs-DAk2J5xy.mjs → tabs-B0h57pFf.mjs} +1 -1
  94. package/admin-dist/server/_ssr/{tanstack-adapter-DWbaPByn.mjs → tanstack-adapter-gmM64LnW.mjs} +1 -1
  95. package/admin-dist/server/_ssr/{taxonomies-B8nqce6u.mjs → taxonomies-BbBNx260.mjs} +17 -16
  96. package/admin-dist/server/_ssr/{trash-zdlZgpTo.mjs → trash-JAzYGh7A.mjs} +8 -10
  97. package/admin-dist/server/_ssr/{useBreadcrumbLabel-DpEKyG1h.mjs → useBreadcrumbLabel-BWIujj97.mjs} +1 -1
  98. package/admin-dist/server/_ssr/{usePermissions-olYRd9S9.mjs → usePermissions-CcLDCSwa.mjs} +1 -1
  99. package/admin-dist/server/index.mjs +162 -162
  100. package/dist/cli/commands/init.d.ts.map +1 -1
  101. package/dist/cli/commands/init.js +18 -29
  102. package/dist/cli/commands/init.js.map +1 -1
  103. package/dist/cli/templates/admin.d.ts +4 -3
  104. package/dist/cli/templates/admin.d.ts.map +1 -1
  105. package/dist/cli/templates/admin.js +152 -195
  106. package/dist/cli/templates/admin.js.map +1 -1
  107. package/dist/cli/templates/cmsClient.d.ts +2 -2
  108. package/dist/cli/templates/cmsClient.d.ts.map +1 -1
  109. package/dist/cli/templates/cmsClient.js +58 -27
  110. package/dist/cli/templates/cmsClient.js.map +1 -1
  111. package/dist/cli/templates/content.d.ts +10 -0
  112. package/dist/cli/templates/content.d.ts.map +1 -0
  113. package/dist/cli/templates/content.js +257 -0
  114. package/dist/cli/templates/content.js.map +1 -0
  115. package/dist/cli/templates/index.d.ts +3 -2
  116. package/dist/cli/templates/index.d.ts.map +1 -1
  117. package/dist/cli/templates/index.js +3 -2
  118. package/dist/cli/templates/index.js.map +1 -1
  119. package/dist/cli/templates/schemas/blog.d.ts +4 -3
  120. package/dist/cli/templates/schemas/blog.d.ts.map +1 -1
  121. package/dist/cli/templates/schemas/blog.js +44 -13
  122. package/dist/cli/templates/schemas/blog.js.map +1 -1
  123. package/dist/cli/templates/schemas/docs.d.ts +4 -3
  124. package/dist/cli/templates/schemas/docs.d.ts.map +1 -1
  125. package/dist/cli/templates/schemas/docs.js +43 -12
  126. package/dist/cli/templates/schemas/docs.js.map +1 -1
  127. package/dist/cli/templates/schemas/index.d.ts +6 -4
  128. package/dist/cli/templates/schemas/index.d.ts.map +1 -1
  129. package/dist/cli/templates/schemas/index.js +6 -4
  130. package/dist/cli/templates/schemas/index.js.map +1 -1
  131. package/dist/cli/templates/schemas/landing.d.ts +4 -3
  132. package/dist/cli/templates/schemas/landing.d.ts.map +1 -1
  133. package/dist/cli/templates/schemas/landing.js +62 -15
  134. package/dist/cli/templates/schemas/landing.js.map +1 -1
  135. package/dist/cli/utils/fileUtils.d.ts.map +1 -1
  136. package/dist/cli/utils/fileUtils.js +6 -5
  137. package/dist/cli/utils/fileUtils.js.map +1 -1
  138. package/dist/client/admin/index.d.ts +2 -1
  139. package/dist/client/admin/index.d.ts.map +1 -1
  140. package/dist/client/admin/index.js.map +1 -1
  141. package/dist/client/admin/types.d.ts +14 -1
  142. package/dist/client/admin/types.d.ts.map +1 -1
  143. package/dist/client/index.d.ts +1 -1
  144. package/dist/client/index.d.ts.map +1 -1
  145. package/dist/client/index.js.map +1 -1
  146. package/dist/react/index.d.ts +176 -0
  147. package/dist/react/index.d.ts.map +1 -1
  148. package/dist/react/index.js +162 -0
  149. package/dist/react/index.js.map +1 -1
  150. package/package.json +1 -1
  151. package/admin-dist/public/assets/ContentEntryEditor-C6n9xLS9.js +0 -4
  152. package/admin-dist/public/assets/TaxonomyFilter-CFX1_g8s.js +0 -1
  153. package/admin-dist/public/assets/content-CKQ4QwW2.js +0 -1
  154. package/admin-dist/public/assets/content-types-BrttaLpc.js +0 -1
  155. package/admin-dist/public/assets/main-DV6oxWnU.js +0 -102
  156. package/admin-dist/public/assets/media-B2i-mCbx.js +0 -1
  157. package/admin-dist/public/assets/taxonomies-DvMppdiD.js +0 -1
  158. package/admin-dist/server/_ssr/_tanstack-start-manifest_v-CC7UrHKE.mjs +0 -4
@@ -1 +0,0 @@
1
- import{l as ee,j as e,L as es,h as I,r as a,y as Is,D as ve,z as be,A as ye,C as x,T as K,X as le,q as ss,F as ts,B as de,u as A,k as B,a as E,s as Ps,E as Rs,I as O,G as Qe,P as Bs,m as ze,n as as,H as ls,J as is,K as rs,M as V,N as Ls,O as Ne,Q as Us,U as ns,V as Ce,S as $s,b as Vs,c as Hs,d as qs,e as X,g as Ye,W as Ge,Y as Ze,i as ge,Z as Ws}from"./main-DV6oxWnU.js";import{C as os,F as cs,M as ds,V as ms,T as Os,a as Ks,b as Je,U as Qs,c as Ys}from"./tabs-DUQwUoIb.js";import{C as Gs}from"./CmsPageHeader-SoF4Epu9.js";import{C as Zs}from"./CmsToolbar-DlZPMe2B.js";import{C as je}from"./CmsEmptyState-6-PLaXtD.js";import{T as Js}from"./TaxonomyFilter-CFX1_g8s.js";import{P as Se}from"./pencil-CX1CiTDD.js";import{B as us}from"./badge-oJv4Eai8.js";import{R as ke}from"./rotate-ccw-B45JsL5f.js";import{S as Xe}from"./search-DKKh_DdH.js";import{u as Xs}from"./tanstack-adapter-f7AHmQ5L.js";import"./refresh-cw-Cm-YOeFI.js";import"./command-DwgQs69u.js";const et=[["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"}]],st=ee("copy",et);const tt=[["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"}]],we=ee("download",tt);const at=[["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"}]],lt=ee("ellipsis-vertical",at);const it=[["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"}]],rt=ee("ellipsis",it);const nt=[["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"}]],Fe=ee("folder-input",nt);const ot=[["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"}]],ct=ee("folder-plus",ot);function G({label:s,description:i,error:l,required:r,htmlFor:o,className:m,children:d}){return e.jsxs("div",{className:I("space-y-2",m),children:[s&&e.jsxs(es,{htmlFor:o,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:"*"})]}),d,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 dt=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",xs=a.forwardRef((s,i)=>e.jsx(Is.span,{...s,ref:i,style:{...dt,...s.style}}));xs.displayName=mt;function ut(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 xt(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 ht(s){return new Date(s).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric",hour:"numeric",minute:"2-digit"})}function ft(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(ds,{...l});case"document":return e.jsx(ts,{...l});default:return e.jsx(cs,{...l})}}function pt({asset:s,assets:i,currentIndex:l,open:r,onOpenChange:o,onNavigate:m,onEdit:d,onDelete:f}){const k=l>0,h=l<i.length-1,y=a.useCallback(()=>{k&&m(l-1)},[k,l,m]),c=a.useCallback(()=>{h&&m(l+1)},[h,l,m]),v=a.useCallback(u=>{if(r)switch(u.key){case"ArrowLeft":u.preventDefault(),y();break;case"ArrowRight":u.preventDefault(),c();break;case"Escape":u.preventDefault(),o(!1);break}},[r,y,c,o]);a.useEffect(()=>(window.addEventListener("keydown",v),()=>window.removeEventListener("keydown",v)),[v]);const N=a.useCallback(()=>{if(!s?.url)return;const u=document.createElement("a");u.href=s.url,u.download=s.name,u.target="_blank",document.body.appendChild(u),u.click(),document.body.removeChild(u)},[s]),b=a.useCallback(async()=>{s?.url&&await navigator.clipboard.writeText(s.url)},[s]);if(!s)return null;const F=ut(s.mimeType),M=F==="image",g=!!s.url;return e.jsx(ve,{open:r,onOpenChange:o,children:e.jsxs(be,{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(xs,{children:e.jsxs(ye,{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(x,{variant:"ghost",size:"icon",onClick:b,disabled:!s.url,title:"Copy URL",children:e.jsx(st,{className:"size-4"})}),e.jsx(x,{variant:"ghost",size:"icon",onClick:N,disabled:!s.url,title:"Download",children:e.jsx(we,{className:"size-4"})}),d&&e.jsx(x,{variant:"ghost",size:"icon",onClick:()=>d(s),title:"Edit",children:e.jsx(Se,{className:"size-4"})}),f&&e.jsx(x,{variant:"ghost",size:"icon",onClick:()=>f(s),title:"Delete",className:"text-destructive hover:text-destructive",children:e.jsx(K,{className:"size-4"})}),e.jsx(x,{variant:"ghost",size:"icon",onClick:()=>o(!1),title:"Close (Esc)",children:e.jsx(le,{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:[k&&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(os,{className:"size-6"})}),h&&e.jsx("button",{onClick:c,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(ss,{className:"size-6"})}),M&&g?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:[ft(F),e.jsx("p",{className:"text-sm",children:M&&!g?"Image URL not available":"Preview not available for this file type"}),g&&e.jsxs(x,{variant:"secondary",onClick:N,children:[e.jsx(we,{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($,{label:"Filename",value:s.name}),s.title&&e.jsx($,{label:"Title",value:s.title}),s.description&&e.jsx($,{label:"Description",value:s.description}),s.altText&&e.jsx($,{label:"Alt Text",value:s.altText}),e.jsxs("div",{className:"border-t pt-4",children:[e.jsx($,{label:"Type",value:F,capitalize:!0}),s.mimeType&&e.jsx($,{label:"MIME Type",value:s.mimeType}),e.jsx($,{label:"Size",value:xt(s.size)}),s.width&&s.height&&e.jsx($,{label:"Dimensions",value:`${s.width} × ${s.height} px`})]}),e.jsx("div",{className:"border-t pt-4",children:e.jsx($,{label:"Uploaded",value:ht(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(u=>e.jsx("span",{className:"rounded-full bg-muted px-2 py-0.5 text-xs",children:u},u))})]})]})})]})]})})}function $({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 gt({mediaId:s,taxonomyId:i,taxonomyName:l="Tags",allowCreate:r=!0,disabled:o=!1,className:m=""}){const[d,f]=a.useState(""),[k,h]=a.useState(!1),[y,c]=a.useState(0),[v,N]=a.useState(!1),[b,F]=a.useState(!1),M=a.useRef(null),g=a.useRef(null),u=a.useRef(null),D=A(B.admin.getTermsByMedia,{mediaId:s,taxonomyId:i}),S=D?.map(n=>n._id)??[],p=A(B.admin.suggestTerms,{taxonomyId:i,query:d,limit:10,excludeIds:S})??[],L=E(B.admin.setMediaTerms),Q=E(B.admin.createTermAndAddToMedia);a.useEffect(()=>{function n(C){u.current&&!u.current.contains(C.target)&&h(!1)}return document.addEventListener("mousedown",n),()=>document.removeEventListener("mousedown",n)},[]);const H=a.useCallback(async n=>{if(!S.includes(n)){F(!0);try{await L({mediaId:s,taxonomyId:i,termIds:[...S,n]})}catch(C){console.error("Failed to add tag:",C)}finally{F(!1),f(""),h(!1),c(0),M.current?.focus()}}},[s,i,S,L]),Y=a.useCallback(async n=>{F(!0);try{await L({mediaId:s,taxonomyId:i,termIds:S.filter(C=>C!==n)})}catch(C){console.error("Failed to remove tag:",C)}finally{F(!1)}},[s,i,S,L]),se=a.useCallback(async()=>{if(!(!d.trim()||!r)){N(!0);try{await Q({taxonomyId:i,name:d.trim(),mediaId:s}),f(""),h(!1),c(0)}catch(n){console.error("Failed to create tag:",n)}finally{N(!1)}}},[d,r,i,s,Q]),te=n=>{if(!o)switch(n.key){case"ArrowDown":n.preventDefault(),c(C=>C<p.length-1?C+1:C);break;case"ArrowUp":n.preventDefault(),c(C=>C>0?C-1:0);break;case"Enter":n.preventDefault(),p.length>0&&y<p.length?H(p[y]._id):d.trim()&&r&&se();break;case"Escape":h(!1);break;case"Backspace":d===""&&S.length>0&&Y(S[S.length-1]);break}};a.useEffect(()=>{if(g.current&&k){const n=g.current.querySelector(`[data-index="${y}"]`);n&&n.scrollIntoView({block:"nearest"})}},[y,k]);const U=p.filter(n=>!S.includes(n._id)),ae=r&&d.trim()&&!U.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:u,className:I("relative rounded-md border border-input bg-background",o&&"opacity-50"),children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-1.5 p-2",children:[(D??[]).map(n=>e.jsxs(us,{variant:"secondary",className:"gap-1 pr-1",style:n.color?{backgroundColor:n.color,color:"#fff"}:void 0,children:[n.name,!o&&e.jsx(Rs,{type:"button",variant:"ghost",size:"icon",className:"size-4 hover:bg-transparent",onClick:()=>Y(n._id),disabled:b,"aria-label":`Remove ${n.name}`,children:e.jsx(le,{className:"size-3"})})]},n._id)),!o&&e.jsx(O,{ref:M,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=>{f(n.target.value),h(!0),c(0)},onFocus:()=>h(!0),onKeyDown:te,placeholder:S.length===0?"Add tags...":"",disabled:o||v||b})]}),k&&(U.length>0||ae)&&e.jsxs("div",{ref:g,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:[U.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===y&&"bg-accent"),onClick:()=>H(n._id),role:"option","aria-selected":C===y,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)),ae&&e.jsxs("div",{"data-index":U.length,className:I("flex cursor-pointer items-center gap-2 px-3 py-2 text-sm",U.length===y&&"bg-accent"),onClick:se,role:"option","aria-selected":U.length===y,children:[v?e.jsx(Qe,{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(Qe,{className:"size-4 animate-spin"})})]})]})}function jt({asset:s,open:i,onOpenChange:l,onSaved:r}){const[o,m]=a.useState(""),[d,f]=a.useState(""),[k,h]=a.useState(""),[y,c]=a.useState(""),[v,N]=a.useState(""),[b,F]=a.useState(!1),[M,g]=a.useState(""),u=E(B.admin.updateMediaAsset),S=A(B.admin.listTaxonomies,{isActive:!0,paginationOpts:{numItems:50,cursor:null}})?.page??[];a.useEffect(()=>{s&&(m(s.name),f(s.title||""),h(s.description||""),c(s.altText||""),N(s.tags?.join(", ")||""),g(""))},[s]);const T=a.useCallback(async()=>{if(s){if(!o.trim()){g("Filename is required");return}F(!0),g("");try{const p=v.split(",").map(L=>L.trim()).filter(Boolean);await u({id:s._id,name:o.trim(),title:d.trim()||void 0,description:k.trim()||void 0,altText:y.trim()||void 0,tags:p.length>0?p:void 0}),r?.(),l(!1)}catch(p){g(p instanceof Error?p.message:"Failed to update asset")}finally{F(!1)}}},[s,o,d,k,y,v,u,r,l]);return s?e.jsx(ze,{open:i,onOpenChange:l,title:"Edit File",size:"md",footer:e.jsxs(e.Fragment,{children:[e.jsx(x,{variant:"outline",onClick:()=>l(!1),disabled:b,children:"Cancel"}),e.jsx(x,{onClick:T,loading:b,children:"Save Changes"})]}),children:e.jsxs("div",{className:"space-y-4",children:[M&&e.jsx("div",{className:"rounded-md bg-destructive/10 p-3 text-sm text-destructive",children:M}),e.jsx(G,{label:"Filename",required:!0,htmlFor:"asset-name",children:e.jsx(O,{id:"asset-name",value:o,onChange:p=>m(p.target.value),placeholder:"Enter filename"})}),e.jsx(G,{label:"Title",description:"A human-readable title for the file",htmlFor:"asset-title",children:e.jsx(O,{id:"asset-title",value:d,onChange:p=>f(p.target.value),placeholder:"Enter title (optional)"})}),e.jsx(G,{label:"Description",description:"A brief description of the file",htmlFor:"asset-description",children:e.jsx(as,{id:"asset-description",value:k,onChange:p=>h(p.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(O,{id:"asset-alt",value:y,onChange:p=>c(p.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(O,{id:"asset-tags",value:v,onChange:p=>N(p.target.value),placeholder:"e.g., hero, blog, product"})}),S.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"}),S.map(p=>e.jsx(gt,{mediaId:s._id,taxonomyId:p._id,taxonomyName:p.displayName,allowCreate:p.allowInlineCreation,disabled:b},p._id))]})]})}):null}function vt({folder:s,open:i,onOpenChange:l,onSaved:r}){const[o,m]=a.useState(""),[d,f]=a.useState(""),[k,h]=a.useState(!1),[y,c]=a.useState(""),v=E(B.admin.updateMediaFolder);a.useEffect(()=>{s&&(m(s.name),f(s.description||""),c(""))},[s]);const N=a.useCallback(async()=>{if(s){if(!o.trim()){c("Folder name is required");return}h(!0),c("");try{await v({id:s._id,name:o.trim(),description:d.trim()||void 0}),r?.(),l(!1)}catch(b){c(b instanceof Error?b.message:"Failed to update folder")}finally{h(!1)}}},[s,o,d,v,r,l]);return s?e.jsx(ze,{open:i,onOpenChange:l,title:"Edit Folder",size:"sm",footer:e.jsxs(e.Fragment,{children:[e.jsx(x,{variant:"outline",onClick:()=>l(!1),disabled:k,children:"Cancel"}),e.jsx(x,{onClick:N,loading:k,children:"Save Changes"})]}),children:e.jsxs("div",{className:"space-y-4",children:[y&&e.jsx("div",{className:"rounded-md bg-destructive/10 p-3 text-sm text-destructive",children:y}),e.jsx(G,{label:"Folder Name",required:!0,htmlFor:"folder-name",children:e.jsx(O,{id:"folder-name",value:o,onChange:b=>m(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(as,{id:"folder-description",value:d,onChange:b=>f(b.target.value),placeholder:"Enter description (optional)",rows:3})})]})}):null}function bt({asset:s,onView:i,onEdit:l,onMove:r,onDelete:o}){const m=()=>{if(!s.url)return;const f=document.createElement("a");f.href=s.url,f.download=s.name,f.target="_blank",document.body.appendChild(f),f.click(),document.body.removeChild(f)},d=async()=>{s.url&&await navigator.clipboard.writeText(s.url)};return e.jsxs(ls,{children:[e.jsx(is,{asChild:!0,children:e.jsx(x,{variant:"ghost",size:"icon-sm",className:"opacity-0 group-hover:opacity-100",onClick:f=>f.stopPropagation(),children:e.jsx(lt,{className:"size-4"})})}),e.jsxs(rs,{side:"bottom",onClick:f=>f.stopPropagation(),children:[i&&e.jsxs(V,{onClick:i,children:[e.jsx(Ls,{className:"mr-2 size-4"}),"View Details"]}),l&&e.jsxs(V,{onClick:l,children:[e.jsx(Se,{className:"mr-2 size-4"}),"Edit"]}),r&&e.jsxs(V,{onClick:r,children:[e.jsx(Fe,{className:"mr-2 size-4"}),"Move to..."]}),e.jsx(Ne,{}),e.jsxs(V,{onClick:m,disabled:!s.url,children:[e.jsx(we,{className:"mr-2 size-4"}),"Download"]}),e.jsxs(V,{onClick:d,disabled:!s.url,children:[e.jsx(Us,{className:"mr-2 size-4"}),"Copy URL"]}),o&&e.jsxs(e.Fragment,{children:[e.jsx(Ne,{}),e.jsxs(V,{onClick:o,className:"text-destructive focus:text-destructive",children:[e.jsx(K,{className:"mr-2 size-4"}),"Delete"]})]})]})]})}function yt({folder:s,onEdit:i,onMove:l,onDelete:r}){return e.jsxs(ls,{children:[e.jsx(is,{asChild:!0,children:e.jsx(x,{variant:"ghost",size:"icon-sm",className:"opacity-0 group-hover:opacity-100",onClick:o=>o.stopPropagation(),children:e.jsx(rt,{className:"size-4"})})}),e.jsxs(rs,{align:"end",onClick:o=>o.stopPropagation(),children:[i&&e.jsxs(V,{onClick:i,children:[e.jsx(Se,{className:"mr-2 size-4"}),"Rename"]}),l&&e.jsxs(V,{onClick:l,children:[e.jsx(Fe,{className:"mr-2 size-4"}),"Move to..."]}),r&&e.jsxs(e.Fragment,{children:[e.jsx(Ne,{}),e.jsxs(V,{onClick:r,className:"text-destructive focus:text-destructive",children:[e.jsx(K,{className:"mr-2 size-4"}),"Delete"]})]})]})]})}function Nt({selectedCount:s,onClear:i,onMove:l,onDelete:r,isDeleting:o}){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(x,{variant:"ghost",size:"sm",onClick:i,children:[e.jsx(le,{className:"mr-1 size-4"}),"Clear"]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(x,{variant:"secondary",onClick:l,disabled:o,children:[e.jsx(Fe,{className:"mr-2 size-4"}),"Move to..."]}),e.jsxs(x,{variant:"danger",onClick:r,loading:o,children:[e.jsx(K,{className:"mr-2 size-4"}),"Delete"]})]})]})})}function Ct({selectedCount:s,onClear:i,onRestore:l,onPermanentDelete:r,isRestoring:o,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(x,{variant:"ghost",size:"sm",onClick:i,children:[e.jsx(le,{className:"mr-1 size-4"}),"Clear"]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(x,{variant:"secondary",onClick:l,loading:o,disabled:m,children:[e.jsx(ke,{className:"mr-2 size-4"}),"Restore"]}),e.jsxs(x,{variant:"danger",onClick:r,loading:m,disabled:o,children:[e.jsx(K,{className:"mr-2 size-4"}),"Delete Forever"]})]})]})})}function kt({open:s,onOpenChange:i,assetIds:l,currentFolderId:r,onMoved:o}){const[m,d]=a.useState(void 0),[f,k]=a.useState(!1),[h,y]=a.useState(""),c=A(B.admin.getMediaFolderTree,{}),v=E(B.admin.moveMediaAssets),N=a.useMemo(()=>{if(!c)return[];const g=(u,D)=>c.filter(T=>T.parentId===u).flatMap(T=>[{...T,depth:D},...g(T._id,D+1)]);return g(void 0,0)},[c]),b=async()=>{if(l.length!==0){k(!0),y("");try{await v({assetIds:l,targetFolderId:m}),o?.(),i(!1)}catch(g){y(g instanceof Error?g.message:"Failed to move files")}finally{k(!1)}}},F=m===r,M=m===void 0;return e.jsx(ze,{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(x,{variant:"outline",onClick:()=>i(!1),disabled:f,children:"Cancel"}),e.jsx(x,{onClick:b,loading:f,disabled:F,children:"Move Here"})]}),children:e.jsxs("div",{className:"space-y-2",children:[h&&e.jsx("div",{className:"rounded-md bg-destructive/10 p-3 text-sm text-destructive",children:h}),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",M&&"bg-primary/10 text-primary",r===void 0&&"opacity-50"),onClick:()=>d(void 0),children:[e.jsx(ns,{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"})]}),N.map(g=>{const u=g._id===r,D=g._id===m;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",D&&"bg-primary/10 text-primary",u&&"opacity-50"),style:{paddingLeft:`${12+g.depth*20}px`},onClick:()=>d(g._id),children:[g.depth>0&&e.jsx(ss,{className:"size-3 text-muted-foreground"}),e.jsx(Ce,{className:"size-4 text-amber-500"}),e.jsx("span",{className:"truncate",children:g.name}),u&&e.jsx("span",{className:"ml-auto text-xs text-muted-foreground",children:"Current"})]},g._id)}),N.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 wt(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 zt(s){return new Date(s).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"})}function St(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(ds,{...l});case"document":return e.jsx(ts,{...l});default:return e.jsx(cs,{...l})}}function Ft(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 Mt({api:s,navigation:i,settings:l}){a.useEffect(()=>{l&&!l.features.mediaManagement&&i.navigate("/")},[l,i]);const[r,o]=a.useState(void 0),[m,d]=a.useState(""),[f,k]=a.useState(""),[h,y]=a.useState([]),[c,v]=a.useState(new Set),[N,b]=a.useState(!1),[F,M]=a.useState(!1),[g,u]=a.useState(!1),[D,S]=a.useState(""),[T,p]=a.useState(!1),[L,Q]=a.useState(""),[H,Y]=a.useState(null),[se,te]=a.useState(null),[U,ae]=a.useState(null),[n,C]=a.useState(null),[hs,Me]=a.useState(!1),[fs,De]=a.useState(!1),[ps,me]=a.useState(!1),[Te,_e]=a.useState(!1),[Ae,gs]=a.useState("library"),[Ee,Z]=a.useState(!1),[Ie,Pe]=a.useState(!1),[js,ie]=a.useState(!1),[J,re]=a.useState(null),w=Ae==="trash",_=A(s.listMediaAssets,{folderId:w?void 0:r,type:f||void 0,search:m||void 0,deletedOnly:w?!0:void 0,paginationOpts:{numItems:100,cursor:null}}),ue=A(s.getMediaTrashCount,{}),Re=A(s.getMediaByTerm,h[0]?{termId:h[0]}:"skip"),Be=A(s.getMediaByTerm,h[1]?{termId:h[1]}:"skip"),Le=A(s.getMediaByTerm,h[2]?{termId:h[2]}:"skip"),xe=a.useMemo(()=>{if(h.length===0)return null;const t=new Set,j=[Re,Be,Le];for(let z=0;z<h.length&&z<3;z++){const W=j[z];if(W?.page)for(const R of W.page)t.add(R)}return t},[h,Re,Be,Le]),P=A(s.listMediaFolders,{parentId:w?void 0:r,deletedOnly:w||void 0}),he=A(s.getMediaFolder,r?{id:r}:"skip"),ne=A(s.getMediaFolderTree,{}),Ue=E(s.createMediaFolder),oe=E(s.deleteMediaAsset),$e=E(s.deleteMediaFolder),ce=E(s.restoreMediaAsset),Ve=E(s.restoreMediaFolder),He=E(s.permanentDeleteMediaAsset),qe=E(s.bulkPermanentDeleteMediaAssets),We=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(W=>W._id===z):void 0}return t},[r,ne]),Oe=a.useCallback(t=>{o(t),d("")},[]),vs=a.useCallback(()=>{he?.parentId?o(he.parentId):o(void 0)},[he]),bs=a.useCallback(()=>{o(void 0),d("")},[]),fe=a.useCallback(t=>{v(j=>{const z=new Set(j);return z.has(t)?z.delete(t):z.add(t),z})},[]),ys=a.useCallback(()=>{_?.page&&v(new Set(_.page.map(t=>t._id)))},[_?.page]),pe=a.useCallback(()=>{v(new Set)},[]),Ns=a.useCallback(t=>{gs(t),v(new Set),b(!1)},[]),Cs=a.useCallback(t=>{if(N)fe(t);else{const j=_?.page?.findIndex(z=>z._id===t)??-1;j!==-1&&Y(j)}},[N,fe,_?.page]),ks=a.useCallback(t=>{Y(t)},[]),ws=a.useCallback(async()=>{if(n){Me(!0);try{n.type==="asset"?await oe({id:n.id}):await $e({id:n.id}),C(null)}catch(t){console.error("Delete failed:",t)}finally{Me(!1)}}},[n,oe,$e]),zs=a.useCallback(async()=>{if(c.size!==0){_e(!0);try{const t=Array.from(c).map(j=>oe({id:j}));await Promise.all(t),v(new Set),b(!1),me(!1)}catch(t){console.error("Bulk delete failed:",t)}finally{_e(!1)}}},[c,oe]),Ss=a.useCallback(()=>{v(new Set),b(!1)},[]),Fs=a.useCallback(async t=>{Z(!0);try{await ce({id:t})}catch(j){console.error("Restore failed:",j)}finally{Z(!1)}},[ce]),Ms=a.useCallback(async()=>{if(c.size!==0){Z(!0);try{const t=Array.from(c).map(j=>ce({id:j}));await Promise.all(t),v(new Set),b(!1)}catch(t){console.error("Bulk restore failed:",t)}finally{Z(!1)}}},[c,ce]),Ds=a.useCallback(async t=>{Z(!0);try{await Ve({id:t})}catch(j){console.error("Restore folder failed:",j)}finally{Z(!1)}},[Ve]),Ts=a.useCallback(async()=>{if(J){Pe(!0);try{J==="bulk"?(await qe({ids:Array.from(c)}),v(new Set),b(!1)):await He({id:J}),ie(!1),re(null)}catch(t){console.error("Permanent delete failed:",t)}finally{Pe(!1)}}},[J,He,qe,c]),Ke=a.useCallback(async()=>{if(!D.trim()){Q("Folder name is required");return}p(!0),Q("");try{await Ue({name:D.trim(),parentId:r}),M(!1),S("")}catch(t){Q(t instanceof Error?t.message:"Failed to create folder")}finally{p(!1)}},[D,r,Ue]),_s=a.useCallback(t=>{u(!1)},[]),As=_===void 0||P===void 0,q=a.useMemo(()=>{const t=_?.page??[];return xe===null?t:t.filter(j=>xe.has(j._id))},[_?.page,xe]);return e.jsxs("div",{className:"space-y-6 p-6",children:[e.jsx(Gs,{title:"Media Library",description:"Upload, organize, and manage media assets for your content."}),e.jsx(Os,{value:Ae,onValueChange:t=>Ns(t),children:e.jsxs(Ks,{children:[e.jsxs(Je,{value:"library",children:[e.jsx(de,{className:"mr-1.5 size-4"}),"Library"]}),e.jsxs(Je,{value:"trash",children:[e.jsx(K,{className:"mr-1.5 size-4"}),"Trash",ue&&ue.total>0&&e.jsx(us,{variant:"secondary",className:"ml-1.5",children:ue.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(ns,{className:"size-4"}),e.jsx("span",{children:"All Files"})]}),We.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===We.length-1?"bg-primary/10 font-medium text-primary":"text-muted-foreground hover:bg-muted hover:text-foreground"),onClick:()=>Oe(t._id),children:t.name})]},t._id))]}),e.jsx(Zs,{left:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs("div",{className:"relative",children:[e.jsx(Xe,{className:"absolute left-3 top-1/2 size-4 -translate-y-1/2 text-muted-foreground"}),e.jsx(O,{type:"search",placeholder:"Search files...",value:m,onChange:t=>d(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:()=>d(""),"aria-label":"Clear search",children:e.jsx(le,{className:"size-4 text-muted-foreground"})})]}),e.jsxs($s,{value:f||"all",onValueChange:t=>k(t==="all"?"":t),children:[e.jsx(Vs,{className:"w-36",children:e.jsx(Hs,{placeholder:"All Types"})}),e.jsxs(qs,{children:[e.jsx(X,{value:"all",children:"All Types"}),e.jsx(X,{value:"image",children:"Images"}),e.jsx(X,{value:"video",children:"Videos"}),e.jsx(X,{value:"audio",children:"Audio"}),e.jsx(X,{value:"document",children:"Documents"}),e.jsx(X,{value:"other",children:"Other"})]})]}),e.jsx(Js,{selectedTermIds:h,onChange:y,placeholder:"Tags"}),_?.page&&_.page.length>0&&e.jsxs("label",{className:"flex cursor-pointer items-center gap-2 text-sm",children:[e.jsx(Ye,{checked:N,onCheckedChange:t=>{b(t),t||v(new Set)}}),"Selection Mode"]})]}),right:e.jsxs("div",{className:"flex items-center gap-2",children:[N&&c.size>0&&e.jsxs("span",{className:"text-sm text-muted-foreground",children:[c.size," selected"]}),N&&e.jsxs(e.Fragment,{children:[e.jsx(x,{variant:"secondary",size:"sm",onClick:ys,children:"Select All"}),e.jsx(x,{variant:"secondary",size:"sm",onClick:pe,children:"Clear"})]}),r&&!w&&e.jsxs(x,{variant:"secondary",onClick:vs,children:[e.jsx(os,{className:"size-4"}),"Up"]}),!w&&e.jsxs(e.Fragment,{children:[e.jsxs(x,{variant:"secondary",onClick:()=>M(!0),children:[e.jsx(ct,{className:"size-4"}),"New Folder"]}),e.jsxs(x,{onClick:()=>u(!0),children:[e.jsx(Qs,{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&&P&&P.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:P.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:()=>Oe(t._id),children:[e.jsx("div",{className:"absolute right-2 top-2",children:e.jsx(yt,{folder:{_id:t._id,name:t.name},onEdit:()=>ae({_id:t._id,name:t.name,description:t.description}),onDelete:()=>C({type:"folder",id:t._id,name:t.name})})}),e.jsx(Ce,{className:"size-10 text-amber-500"}),e.jsx("span",{className:"truncate text-sm font-medium",children:t.name})]},t._id))})]}),w&&P&&P.length>0&&e.jsxs("section",{children:[e.jsxs("h3",{className:"mb-3 text-sm font-medium text-muted-foreground",children:["Deleted Folders (",P.length,")"]}),e.jsx("div",{className:"grid grid-cols-2 gap-3 sm:grid-cols-4 md:grid-cols-6",children:P.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(Ce,{className:"size-10 text-amber-500/50"}),e.jsx("span",{className:"truncate text-sm font-medium",children:t.name}),e.jsxs(x,{variant:"secondary",size:"sm",onClick:()=>Ds(t._id),disabled:Ee,children:[e.jsx(ke,{className:"mr-1 size-3"}),"Restore"]})]},t._id))})]}),q.length>0?e.jsxs("section",{children:[!w&&P&&P.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 (",q.length,")"]}),e.jsx("div",{className:"grid grid-cols-2 gap-3 sm:grid-cols-4 md:grid-cols-6",children:q.map(t=>{const j=t._id,z=c.has(j),W=Ft(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:[N&&e.jsx("div",{className:"absolute left-2 top-2 z-10",children:e.jsx(Ye,{checked:z,onCheckedChange:()=>fe(j),onClick:R=>R.stopPropagation(),className:"bg-white/80"})}),!N&&!w&&e.jsx("div",{className:"absolute right-2 top-2 z-10",children:e.jsx(bt,{asset:{_id:t._id,name:t.name,url:t.url},onView:()=>{const R=q.findIndex(Es=>Es._id===t._id);R!==-1&&Y(R)},onEdit:()=>te({_id:t._id,name:t.name,title:t.title,description:t.description,altText:t.altText,tags:t.tags}),onDelete:()=>C({type:"asset",id:t._id,name:t.name})})}),!N&&w&&e.jsxs("div",{className:"absolute right-2 top-2 z-10 flex gap-1 opacity-0 group-hover:opacity-100",children:[e.jsx(x,{variant:"secondary",size:"icon-sm",onClick:R=>{R.stopPropagation(),Fs(t._id)},title:"Restore",children:e.jsx(ke,{className:"size-4"})}),e.jsx(x,{variant:"danger",size:"icon-sm",onClick:R=>{R.stopPropagation(),re(t._id),ie(!0)},title:"Delete Forever",children:e.jsx(K,{className:"size-4"})})]}),e.jsx("div",{className:"aspect-square overflow-hidden bg-muted",children:W==="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:St(W,"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:W}),e.jsx("span",{children:"•"}),e.jsx("span",{children:wt(t.size??0)})]}),e.jsx("p",{className:"mt-0.5 text-xs text-muted-foreground",children:zt(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(je,{icon:e.jsx(K,{className:"size-8"}),title:"Trash is empty",description:"Deleted files will appear here. You can restore them or permanently delete them."}):!P?.length&&e.jsx(je,{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:()=>u(!0)}}),m&&q.length===0&&!w&&e.jsx(je,{icon:e.jsx(Xe,{className:"size-8"}),title:"No results found",description:`No files match "${m}". Try a different search term.`,action:{label:"Clear Search",onClick:()=>d(""),variant:"secondary"}})]}),e.jsx(ve,{open:F,onOpenChange:M,children:e.jsxs(be,{children:[e.jsx(Ge,{children:e.jsx(ye,{children:"Create New Folder"})}),e.jsx("div",{className:"space-y-4 py-4",children:e.jsxs("div",{className:"space-y-2",children:[e.jsx(es,{htmlFor:"folder-name",children:"Folder Name"}),e.jsx(O,{id:"folder-name",value:D,onChange:t=>{S(t.target.value),Q("")},placeholder:"Enter folder name",autoFocus:!0,onKeyDown:t=>{t.key==="Enter"&&!T&&Ke()}}),L&&e.jsx("p",{className:"text-sm text-destructive",children:L})]})}),e.jsxs(Ze,{children:[e.jsx(x,{variant:"secondary",onClick:()=>M(!1),disabled:T,children:"Cancel"}),e.jsx(x,{onClick:Ke,disabled:T||!D.trim(),loading:T,children:"Create Folder"})]})]})}),e.jsx(ve,{open:g,onOpenChange:u,children:e.jsxs(be,{className:"max-w-lg",children:[e.jsx(Ge,{children:e.jsx(ye,{children:"Upload Files"})}),e.jsx("div",{className:"py-4",children:e.jsx(Ys,{currentFolderId:r,generateUploadUrl:s.generateUploadUrl,createAsset:s.createMediaAsset,onUploadComplete:_s,maxFileSize:50*1024*1024,maxConcurrentUploads:3})}),e.jsx(Ze,{children:e.jsx(x,{variant:"secondary",onClick:()=>u(!1),children:"Close"})})]})}),e.jsx(pt,{asset:H!==null&&q[H]?q[H]:null,assets:q,currentIndex:H??0,open:H!==null,onOpenChange:t=>{t||Y(null)},onNavigate:ks,onEdit:w?void 0:t=>te({_id:t._id,name:t.name,title:t.title,description:t.description,altText:t.altText,tags:t.tags}),onDelete:w?void 0:t=>C({type:"asset",id:t._id,name:t.name})}),e.jsx(jt,{asset:se,open:se!==null,onOpenChange:t=>{t||te(null)}}),e.jsx(vt,{folder:U,open:U!==null,onOpenChange:t=>{t||ae(null)}}),e.jsx(ge,{open:n!==null,onOpenChange:t=>{t||C(null)},title:`Delete ${n?.type==="folder"?"Folder":"File"}?`,description:`Are you sure you want to delete "${n?.name}"? ${n?.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:hs}),e.jsx(ge,{open:ps,onOpenChange:me,title:"Delete Selected Files?",description:`Are you sure you want to delete ${c.size} ${c.size===1?"file":"files"}? This action can be undone from the trash.`,confirmLabel:"Delete All",onConfirm:zs,variant:"danger",loading:Te}),e.jsx(ge,{open:js,onOpenChange:t=>{ie(t),t||re(null)},title:J==="bulk"?`Delete ${c.size} ${c.size===1?"File":"Files"} Forever?`:"Delete Forever?",description:J==="bulk"?`This will permanently delete ${c.size} ${c.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:Ie}),e.jsx(kt,{open:fs,onOpenChange:De,assetIds:Array.from(c),currentFolderId:r,onMoved:Ss}),N&&!w&&e.jsx(Nt,{selectedCount:c.size,onClear:pe,onMove:()=>De(!0),onDelete:()=>me(!0),isDeleting:Te}),N&&w&&e.jsx(Ct,{selectedCount:c.size,onClear:pe,onRestore:Ms,onPermanentDelete:()=>{re("bulk"),ie(!0)},isRestoring:Ee,isDeleting:Ie})]})}function Ht(){const s=Xs(),{settings:i}=Ws();return e.jsx(Mt,{api:B.admin,navigation:s,settings:i})}export{Ht as component};
@@ -1 +0,0 @@
1
- import{l as K,r as t,a as I,k as F,j as e,m as Q,L as f,I as D,n as R,g as _,C as y,u as M,P as L,o as W,i as Z,p as X,q as Y,h as P,T as U,s as H}from"./main-DV6oxWnU.js";import{C as V}from"./CmsEmptyState-6-PLaXtD.js";import{P as G}from"./pencil-CX1CiTDD.js";import{C as ee}from"./CmsPageHeader-SoF4Epu9.js";import{C as $}from"./CmsSurface-BvksBm6W.js";import{B}from"./badge-oJv4Eai8.js";import{S as se}from"./scroll-area-b3A1HHR7.js";import{u as ae}from"./tanstack-adapter-f7AHmQ5L.js";const te=[["path",{d:"M20 10a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1h-2.5a1 1 0 0 1-.8-.4l-.9-1.2A1 1 0 0 0 15 3h-2a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1Z",key:"hod4my"}],["path",{d:"M20 21a1 1 0 0 0 1-1v-3a1 1 0 0 0-1-1h-2.9a1 1 0 0 1-.88-.55l-.42-.85a1 1 0 0 0-.92-.6H13a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1Z",key:"w4yl2u"}],["path",{d:"M3 5a2 2 0 0 0 2 2h3",key:"f2jnh7"}],["path",{d:"M3 3v13a2 2 0 0 0 2 2h3",key:"k8epm1"}]],re=K("folder-tree",te);function ie({taxonomy:r,onSave:o,onCancel:c}){const x=!!r,[n,b]=t.useState({name:r?.name??"",displayName:r?.displayName??"",description:r?.description??"",isHierarchical:r?.isHierarchical??!1,allowInlineCreation:r?.allowInlineCreation??!0,isActive:r?.isActive??!0,icon:r?.icon??"",sortOrder:r?.sortOrder??0}),[m,l]=t.useState({}),[d,v]=t.useState(!1),[T,u]=t.useState(null),[S,E]=t.useState(!1),w=I(F.admin.createTaxonomy),z=I(F.admin.updateTaxonomy);t.useEffect(()=>{r&&b({name:r.name,displayName:r.displayName,description:r.description??"",isHierarchical:r.isHierarchical,allowInlineCreation:r.allowInlineCreation,isActive:r.isActive,icon:r.icon??"",sortOrder:r.sortOrder??0})},[r]);const h=t.useCallback((s,p)=>{b(C=>({...C,[s]:p})),l(C=>{const{[s]:i,...a}=C;return a})},[]),N=t.useCallback(s=>s.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,""),[]),A=t.useCallback(s=>{h("displayName",s),!x&&!S&&h("name",N(s))},[h,x,S,N]),j=t.useCallback(()=>{const s={};return n.name.trim()?/^[a-z][a-z0-9-]*$/.test(n.name)||(s.name="Slug must start with a letter and contain only lowercase letters, numbers, and hyphens"):s.name="Slug is required",n.displayName.trim()||(s.displayName="Display name is required"),l(s),Object.keys(s).length===0},[n]),k=t.useCallback(async s=>{if(s.preventDefault(),!!j()){v(!0),u(null);try{x&&r?await z({id:r._id,displayName:n.displayName,description:n.description||void 0,allowInlineCreation:n.allowInlineCreation,icon:n.icon||void 0,sortOrder:n.sortOrder,isActive:n.isActive}):await w({name:n.name,displayName:n.displayName,description:n.description||void 0,isHierarchical:n.isHierarchical,allowInlineCreation:n.allowInlineCreation,icon:n.icon||void 0,sortOrder:n.sortOrder}),o()}catch(p){const C=p instanceof Error?p.message:"Failed to save taxonomy";u(C)}finally{v(!1)}}},[j,x,r,n,w,z,o]);return e.jsx(Q,{open:!0,onOpenChange:s=>!s&&!d&&c(),title:x?"Edit Taxonomy":"Create Taxonomy",size:"lg",footer:e.jsxs(e.Fragment,{children:[e.jsx(y,{variant:"outline",onClick:c,disabled:d,children:"Cancel"}),e.jsx(y,{variant:"primary",onClick:k,loading:d,children:x?"Save Changes":"Create Taxonomy"})]}),children:e.jsxs("form",{onSubmit:k,className:"space-y-4",children:[T&&e.jsx("div",{className:"diff-removed rounded-lg border px-3 py-2 text-sm",children:T}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(f,{htmlFor:"displayName",children:["Display Name ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(D,{id:"displayName",value:n.displayName,onChange:s=>A(s.target.value),placeholder:"e.g., Categories, Tags",disabled:d,className:m.displayName?"border-destructive":""}),m.displayName&&e.jsx("p",{className:"text-xs text-destructive",children:m.displayName})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(f,{htmlFor:"name",children:["Slug ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(D,{id:"name",value:n.name,onChange:s=>{h("name",s.target.value.toLowerCase()),E(!0)},placeholder:"e.g., categories, tags",disabled:d||x,className:m.name?"border-destructive":""}),m.name&&e.jsx("p",{className:"text-xs text-destructive",children:m.name}),x&&e.jsx("p",{className:"text-xs text-muted-foreground",children:"Slug cannot be changed after creation"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(f,{htmlFor:"description",children:"Description"}),e.jsx(R,{id:"description",value:n.description,onChange:s=>h("description",s.target.value),placeholder:"Optional description",rows:2,disabled:d})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(f,{htmlFor:"icon",children:"Icon"}),e.jsx(D,{id:"icon",value:n.icon,onChange:s=>h("icon",s.target.value),placeholder:"e.g., 🏷️ or folder",disabled:d}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Emoji or icon name"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(f,{htmlFor:"sortOrder",children:"Sort Order"}),e.jsx(D,{id:"sortOrder",type:"number",value:n.sortOrder,onChange:s=>h("sortOrder",parseInt(s.target.value)||0),disabled:d})]})]}),e.jsxs("div",{className:"space-y-4 pt-2",children:[e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx(_,{id:"isHierarchical",checked:n.isHierarchical,onCheckedChange:s=>h("isHierarchical",s),disabled:d||x}),e.jsxs("div",{className:"space-y-0.5",children:[e.jsx(f,{htmlFor:"isHierarchical",className:"cursor-pointer font-medium",children:"Hierarchical"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Terms can have parent-child relationships (like categories)"}),x&&e.jsx("p",{className:"text-xs text-warning",children:"Hierarchy type cannot be changed after creation"})]})]}),e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx(_,{id:"allowInlineCreation",checked:n.allowInlineCreation,onCheckedChange:s=>h("allowInlineCreation",s),disabled:d}),e.jsxs("div",{className:"space-y-0.5",children:[e.jsx(f,{htmlFor:"allowInlineCreation",className:"cursor-pointer font-medium",children:"Allow inline creation"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Users can create new terms while editing content"})]})]}),e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx(_,{id:"isActive",checked:n.isActive,onCheckedChange:s=>h("isActive",s),disabled:d}),e.jsxs("div",{className:"space-y-0.5",children:[e.jsx(f,{htmlFor:"isActive",className:"cursor-pointer font-medium",children:"Active"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Inactive taxonomies are hidden from content editors"})]})]})]})]})})}function ne({taxonomyId:r,isHierarchical:o,allowInlineCreation:c}){const[x,n]=t.useState(new Set),[b,m]=t.useState(null),[l,d]=t.useState(!1),[v,T]=t.useState(),[u,S]=t.useState(null),[E,w]=t.useState(null),z=o?M(F.admin.getTermsHierarchy,{taxonomyId:r}):M(F.admin.listTerms,{taxonomyId:r}),h=I(F.admin.deleteTerm),N=o?z:z?.page,A=N===void 0,j=t.useCallback(i=>{n(a=>{const g=new Set(a);return g.has(i)?g.delete(i):g.add(i),g})},[]),k=t.useCallback(i=>{T(i),m(null),d(!0)},[]),s=t.useCallback(i=>{m(i),d(!0)},[]),p=t.useCallback(async i=>{w(null);try{await h({id:i,cascade:!0}),S(null)}catch(a){const g=a instanceof Error?a.message:"Failed to delete term";w(g)}},[h]),C=(i,a=0)=>{const g=i.children&&i.children.length>0,O=x.has(i._id);return e.jsxs("div",{className:"border-b border-border/50 last:border-0",children:[e.jsxs("div",{className:P("group flex items-center gap-2 py-2 pr-2 transition-colors hover:bg-muted/50",a>0&&"border-l-2 border-muted"),style:{paddingLeft:`${a*24+8}px`},children:[o&&e.jsx("button",{type:"button",onClick:()=>j(i._id),disabled:!g,className:P("flex size-5 items-center justify-center rounded transition-colors",g?"text-muted-foreground hover:bg-muted hover:text-foreground":"invisible"),"aria-expanded":O,children:g&&(O?e.jsx(X,{className:"size-4"}):e.jsx(Y,{className:"size-4"}))}),e.jsxs("div",{className:"flex min-w-0 flex-1 items-center gap-2",children:[i.color&&e.jsx("span",{className:"size-3 shrink-0 rounded-full",style:{backgroundColor:i.color}}),i.icon&&e.jsx("span",{className:"shrink-0 text-sm",children:i.icon}),e.jsx("span",{className:"truncate font-medium text-foreground",children:i.name}),e.jsxs("span",{className:"shrink-0 text-xs text-muted-foreground",children:["(",i.slug,")"]}),e.jsxs("span",{className:"ml-auto shrink-0 rounded bg-muted px-1.5 py-0.5 text-xs text-muted-foreground",children:[i.usageCount," ",i.usageCount===1?"use":"uses"]})]}),e.jsxs("div",{className:"flex shrink-0 items-center gap-1 opacity-0 transition-opacity group-hover:opacity-100",children:[o&&c&&e.jsx(y,{variant:"ghost",size:"sm",onClick:()=>k(i._id),title:"Add child term",className:"size-7 p-0",children:e.jsx(L,{className:"size-3.5"})}),e.jsx(y,{variant:"ghost",size:"sm",onClick:()=>s(i),title:"Edit term",className:"size-7 p-0",children:e.jsx(G,{className:"size-3.5"})}),e.jsx(y,{variant:"ghost",size:"sm",onClick:()=>S(i._id),title:"Delete term",className:"size-7 p-0 text-destructive hover:text-destructive",children:e.jsx(U,{className:"size-3.5"})})]})]}),o&&g&&O&&e.jsx("div",{children:i.children.map(q=>C(q,a+1))})]},i._id)};return e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("h3",{className:"text-sm font-medium text-foreground",children:"Terms"}),e.jsxs(y,{variant:"secondary",size:"sm",onClick:()=>k(),children:[e.jsx(L,{className:"size-3.5"}),"Add Term"]})]}),E&&e.jsxs("div",{className:"diff-removed flex items-center justify-between rounded-lg border px-3 py-2 text-sm",children:[E,e.jsx("button",{type:"button",onClick:()=>w(null),className:"text-diff-removed hover:text-diff-removed-foreground",children:"×"})]}),e.jsx("div",{className:"rounded-lg border bg-card",children:A?e.jsx("div",{className:"flex items-center justify-center py-8",children:e.jsx("div",{className:"size-6 animate-spin rounded-full border-2 border-muted border-t-primary"})}):!N||N.length===0?e.jsx(V,{icon:e.jsx(W,{className:"size-8"}),title:"No terms yet",description:"Add your first term to start organizing content.",action:c?{label:"Add your first term",onClick:()=>k(),variant:"secondary"}:void 0}):e.jsx("div",{className:"divide-y divide-border/50",children:N.map(i=>C(i))})}),l&&e.jsx(le,{taxonomyId:r,term:b,parentId:v,isHierarchical:o,onSave:()=>{d(!1),m(null),T(void 0)},onCancel:()=>{d(!1),m(null),T(void 0)}}),e.jsx(Z,{open:!!u,onOpenChange:i=>!i&&S(null),title:"Delete Term",description:o?"Are you sure you want to delete this term? All child terms will also be deleted.":"Are you sure you want to delete this term?",confirmLabel:"Delete",variant:"danger",onConfirm:()=>u&&p(u)})]})}function le({taxonomyId:r,term:o,parentId:c,isHierarchical:x,onSave:n,onCancel:b}){const m=!!o,[l,d]=t.useState({name:o?.name??"",slug:o?.slug??"",description:o?.description??"",color:o?.color??"",icon:o?.icon??"",sortOrder:o?.sortOrder??0}),[v,T]=t.useState({}),[u,S]=t.useState(!1),[E,w]=t.useState(null),[z,h]=t.useState(!1),N=I(F.admin.createTerm),A=I(F.admin.updateTerm),j=t.useCallback((a,g)=>{d(O=>({...O,[a]:g})),T(O=>{const{[a]:q,...J}=O;return J})},[]),k=t.useCallback(a=>a.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,""),[]),s=t.useCallback(a=>{j("name",a),!m&&!z&&j("slug",k(a))},[j,m,z,k]),p=t.useCallback(()=>{const a={};return l.name.trim()||(a.name="Name is required"),l.slug.trim()?/^[a-z0-9-]+$/.test(l.slug)||(a.slug="Slug must contain only lowercase letters, numbers, and hyphens"):a.slug="Slug is required",T(a),Object.keys(a).length===0},[l]),C=t.useCallback(async a=>{if(a.preventDefault(),!!p()){S(!0),w(null);try{m&&o?await A({id:o._id,name:l.name,slug:l.slug,description:l.description||void 0,color:l.color||void 0,icon:l.icon||void 0,sortOrder:l.sortOrder}):await N({taxonomyId:r,name:l.name,slug:l.slug,description:l.description||void 0,parentId:c,color:l.color||void 0,icon:l.icon||void 0,sortOrder:l.sortOrder}),n()}catch(g){const O=g instanceof Error?g.message:"Failed to save term";w(O)}finally{S(!1)}}},[p,m,o,l,r,c,N,A,n]),i=m?"Edit Term":c?"Create Child Term":"Create Term";return e.jsx(Q,{open:!0,onOpenChange:a=>!a&&!u&&b(),title:i,size:"md",footer:e.jsxs(e.Fragment,{children:[e.jsx(y,{variant:"outline",onClick:b,disabled:u,children:"Cancel"}),e.jsx(y,{variant:"primary",onClick:C,loading:u,children:m?"Save Changes":"Create Term"})]}),children:e.jsxs("form",{onSubmit:C,className:"space-y-4",children:[E&&e.jsx("div",{className:"diff-removed rounded-lg border px-3 py-2 text-sm",children:E}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(f,{htmlFor:"termName",children:["Name ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(D,{id:"termName",value:l.name,onChange:a=>s(a.target.value),placeholder:"e.g., Technology",disabled:u,className:v.name?"border-destructive":""}),v.name&&e.jsx("p",{className:"text-xs text-destructive",children:v.name})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(f,{htmlFor:"termSlug",children:["Slug ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(D,{id:"termSlug",value:l.slug,onChange:a=>{j("slug",a.target.value.toLowerCase()),h(!0)},placeholder:"e.g., technology",disabled:u,className:v.slug?"border-destructive":""}),v.slug&&e.jsx("p",{className:"text-xs text-destructive",children:v.slug})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(f,{htmlFor:"termDescription",children:"Description"}),e.jsx(R,{id:"termDescription",value:l.description,onChange:a=>j("description",a.target.value),placeholder:"Optional description",rows:2,disabled:u})]}),e.jsxs("div",{className:"grid grid-cols-3 gap-3",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(f,{htmlFor:"termColor",children:"Color"}),e.jsx(D,{id:"termColor",type:"color",value:l.color||"#6b7280",onChange:a=>j("color",a.target.value),disabled:u,className:"h-9 p-1"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(f,{htmlFor:"termIcon",children:"Icon"}),e.jsx(D,{id:"termIcon",value:l.icon,onChange:a=>j("icon",a.target.value),placeholder:"e.g., 💻",disabled:u})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(f,{htmlFor:"termSortOrder",children:"Sort Order"}),e.jsx(D,{id:"termSortOrder",type:"number",value:l.sortOrder,onChange:a=>j("sortOrder",parseInt(a.target.value)||0),disabled:u})]})]})]})})}function oe({api:r,navigation:o}){const[c,x]=t.useState(null),[n,b]=t.useState(!1),[m,l]=t.useState(null),[d,v]=t.useState(null),[T,u]=t.useState(null),S=M(r.listTaxonomies,{isActive:void 0,includeDeleted:!1}),E=I(r.deleteTaxonomy),w=S?.page??[],z=S===void 0,h=t.useCallback(()=>{l(null),b(!0)},[]),N=t.useCallback(s=>{l(s),b(!0)},[]),A=t.useCallback(async s=>{u(null);try{await E({id:s}),v(null),c?._id===s&&x(null)}catch(p){const C=p instanceof Error?p.message:"Failed to delete taxonomy";u(C)}},[E,c]),j=t.useCallback(()=>{b(!1),l(null)},[]),k=s=>s.isHierarchical?e.jsx(re,{className:"size-5"}):e.jsx(H,{className:"size-5"});return e.jsxs("div",{className:"flex h-[calc(100vh-4rem)] flex-col p-6",children:[e.jsxs("div",{className:"mb-6 flex items-start justify-between",children:[e.jsx(ee,{title:"Taxonomies",description:"Manage tags, categories, and other classification systems"}),e.jsxs(y,{onClick:h,children:[e.jsx(L,{className:"size-4"}),"Create Taxonomy"]})]}),e.jsxs("div",{className:"flex min-h-0 flex-1 gap-6",children:[e.jsx($,{elevation:"base",className:"w-80 shrink-0 overflow-hidden",children:z?e.jsxs("div",{className:"flex flex-col items-center justify-center py-12",children:[e.jsx("div",{className:"size-6 animate-spin rounded-full border-2 border-muted border-t-primary"}),e.jsx("p",{className:"mt-3 text-sm text-muted-foreground",children:"Loading taxonomies..."})]}):w.length===0?e.jsxs("div",{className:"flex flex-col items-center justify-center p-6 text-center",children:[e.jsx(H,{className:"mb-3 size-8 text-muted-foreground"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"No taxonomies created yet."}),e.jsx(y,{variant:"secondary",className:"mt-4",onClick:h,children:"Create your first taxonomy"})]}):e.jsx(se,{className:"h-full",children:e.jsx("div",{className:"divide-y",children:w.map(s=>e.jsxs("div",{className:P("group flex cursor-pointer items-center gap-3 p-3 transition-colors hover:bg-muted/50",c?._id===s._id&&"bg-primary/5",!s.isActive&&"opacity-60"),onClick:()=>x(s),children:[e.jsx("div",{className:"flex size-9 shrink-0 items-center justify-center rounded-md bg-muted text-muted-foreground",children:k(s)}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("p",{className:"truncate text-sm font-medium text-foreground",children:s.displayName}),e.jsx("p",{className:"truncate text-xs text-muted-foreground",children:s.name})]}),e.jsxs("div",{className:"flex shrink-0 items-center gap-2",children:[e.jsx(B,{variant:"secondary",className:"text-xs font-normal",children:s.isHierarchical?"Hierarchical":"Flat"}),!s.isActive&&e.jsx(B,{variant:"outline",className:"text-xs font-normal",children:"Inactive"})]}),e.jsxs("div",{className:"flex shrink-0 items-center gap-1 opacity-0 transition-opacity group-hover:opacity-100",children:[e.jsx(y,{variant:"ghost",size:"icon-sm",onClick:p=>{p.stopPropagation(),N(s)},title:"Edit taxonomy",children:e.jsx(G,{className:"size-4"})}),e.jsx(y,{variant:"ghost",size:"icon-sm",onClick:p=>{p.stopPropagation(),v(s._id)},title:"Delete taxonomy",className:"text-destructive hover:bg-destructive/10 hover:text-destructive",children:e.jsx(U,{className:"size-4"})})]})]},s._id))})})}),e.jsx($,{elevation:"base",className:"min-w-0 flex-1 overflow-hidden",children:c?e.jsxs("div",{className:"flex h-full flex-col",children:[e.jsxs("div",{className:"flex items-start justify-between border-b p-4",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"flex size-10 items-center justify-center rounded-md bg-muted text-muted-foreground",children:k(c)}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-semibold text-foreground",children:c.displayName}),c.description&&e.jsx("p",{className:"text-sm text-muted-foreground",children:c.description})]})]}),e.jsx(y,{variant:"secondary",onClick:()=>N(c),children:"Edit Taxonomy"})]}),e.jsx("div",{className:"flex-1 overflow-auto p-4",children:e.jsx(ne,{taxonomyId:c._id,isHierarchical:c.isHierarchical,allowInlineCreation:c.allowInlineCreation})})]}):e.jsx(V,{icon:e.jsx(H,{className:"size-6"}),title:"Select a taxonomy",description:"Select a taxonomy to view and manage its terms",className:"h-full"})})]}),n&&e.jsx(ie,{taxonomy:m,onSave:j,onCancel:()=>{b(!1),l(null)}}),e.jsx(Z,{open:d!==null,onOpenChange:s=>{s||(v(null),u(null))},title:"Delete Taxonomy",description:"Are you sure you want to delete this taxonomy? All associated terms will also be deleted.",confirmLabel:"Delete",onConfirm:()=>d&&A(d),variant:"danger",error:T})]})}function ve(){const r=ae();return e.jsx(oe,{api:F.admin,navigation:r})}export{ve as component};
@@ -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-DV6oxWnU.js"], "assets": [] }, "/": { "filePath": "/Users/home/Developer/projects/convex-cms/admin/src/routes/index.tsx", "assets": [], "preloads": ["/assets/index-DOkgTSx0.js", "/assets/CmsPageHeader-SoF4Epu9.js", "/assets/alert-BAHTL6ao.js", "/assets/refresh-cw-Cm-YOeFI.js", "/assets/tanstack-adapter-f7AHmQ5L.js"] }, "/content": { "filePath": "/Users/home/Developer/projects/convex-cms/admin/src/routes/content.tsx", "assets": [], "preloads": ["/assets/content-CKQ4QwW2.js", "/assets/usePermissions-DWBImEOW.js", "/assets/circle-check-big-3OHxNDhO.js", "/assets/badge-oJv4Eai8.js", "/assets/CmsPageHeader-SoF4Epu9.js", "/assets/CmsToolbar-DlZPMe2B.js", "/assets/CmsEmptyState-6-PLaXtD.js", "/assets/CmsStatusBadge-D7kYaohx.js", "/assets/search-DKKh_DdH.js", "/assets/tanstack-adapter-f7AHmQ5L.js"] }, "/content-types": { "filePath": "/Users/home/Developer/projects/convex-cms/admin/src/routes/content-types.tsx", "assets": [], "preloads": ["/assets/content-types-BrttaLpc.js", "/assets/CmsPageHeader-SoF4Epu9.js", "/assets/CmsToolbar-DlZPMe2B.js", "/assets/CmsEmptyState-6-PLaXtD.js", "/assets/badge-oJv4Eai8.js", "/assets/search-DKKh_DdH.js", "/assets/pencil-CX1CiTDD.js", "/assets/tanstack-adapter-f7AHmQ5L.js"] }, "/media": { "filePath": "/Users/home/Developer/projects/convex-cms/admin/src/routes/media.tsx", "assets": [], "preloads": ["/assets/media-B2i-mCbx.js", "/assets/tabs-DUQwUoIb.js", "/assets/CmsPageHeader-SoF4Epu9.js", "/assets/CmsToolbar-DlZPMe2B.js", "/assets/CmsEmptyState-6-PLaXtD.js", "/assets/TaxonomyFilter-CFX1_g8s.js", "/assets/pencil-CX1CiTDD.js", "/assets/badge-oJv4Eai8.js", "/assets/rotate-ccw-B45JsL5f.js", "/assets/search-DKKh_DdH.js", "/assets/tanstack-adapter-f7AHmQ5L.js", "/assets/refresh-cw-Cm-YOeFI.js", "/assets/command-DwgQs69u.js"] }, "/settings": { "filePath": "/Users/home/Developer/projects/convex-cms/admin/src/routes/settings.tsx", "assets": [], "preloads": ["/assets/settings-CGVDEV1r.js", "/assets/usePermissions-DWBImEOW.js", "/assets/CmsPageHeader-SoF4Epu9.js", "/assets/CmsSurface-BvksBm6W.js", "/assets/switch-BTMY8Qnk.js", "/assets/badge-oJv4Eai8.js", "/assets/alert-BAHTL6ao.js", "/assets/tanstack-adapter-f7AHmQ5L.js"] }, "/taxonomies": { "filePath": "/Users/home/Developer/projects/convex-cms/admin/src/routes/taxonomies.tsx", "assets": [], "preloads": ["/assets/taxonomies-DvMppdiD.js", "/assets/CmsEmptyState-6-PLaXtD.js", "/assets/pencil-CX1CiTDD.js", "/assets/CmsPageHeader-SoF4Epu9.js", "/assets/CmsSurface-BvksBm6W.js", "/assets/badge-oJv4Eai8.js", "/assets/scroll-area-b3A1HHR7.js", "/assets/tanstack-adapter-f7AHmQ5L.js"] }, "/trash": { "filePath": "/Users/home/Developer/projects/convex-cms/admin/src/routes/trash.tsx", "assets": [], "preloads": ["/assets/trash-D7e0uKd9.js", "/assets/CmsPageHeader-SoF4Epu9.js", "/assets/CmsToolbar-DlZPMe2B.js", "/assets/CmsEmptyState-6-PLaXtD.js", "/assets/CmsSurface-BvksBm6W.js", "/assets/badge-oJv4Eai8.js", "/assets/alert-BAHTL6ao.js", "/assets/search-DKKh_DdH.js", "/assets/rotate-ccw-B45JsL5f.js", "/assets/tanstack-adapter-f7AHmQ5L.js"] }, "/entries/$entryId": { "filePath": "/Users/home/Developer/projects/convex-cms/admin/src/routes/entries/$entryId.tsx", "assets": [], "preloads": ["/assets/_entryId-D3lr5Dvy.js", "/assets/ContentEntryEditor-C6n9xLS9.js", "/assets/usePermissions-DWBImEOW.js", "/assets/useBreadcrumbLabel-CF2KYwsw.js", "/assets/CmsEmptyState-6-PLaXtD.js", "/assets/switch-BTMY8Qnk.js", "/assets/tabs-DUQwUoIb.js", "/assets/refresh-cw-Cm-YOeFI.js", "/assets/pencil-CX1CiTDD.js", "/assets/search-DKKh_DdH.js", "/assets/command-DwgQs69u.js", "/assets/badge-oJv4Eai8.js", "/assets/CmsStatusBadge-D7kYaohx.js", "/assets/scroll-area-b3A1HHR7.js", "/assets/circle-check-big-3OHxNDhO.js"] }, "/entries/new/$contentTypeId": { "filePath": "/Users/home/Developer/projects/convex-cms/admin/src/routes/entries/new.$contentTypeId.tsx", "assets": [], "preloads": ["/assets/new._contentTypeId-VF63rpic.js", "/assets/ContentEntryEditor-C6n9xLS9.js", "/assets/useBreadcrumbLabel-CF2KYwsw.js", "/assets/CmsEmptyState-6-PLaXtD.js", "/assets/switch-BTMY8Qnk.js", "/assets/tabs-DUQwUoIb.js", "/assets/refresh-cw-Cm-YOeFI.js", "/assets/pencil-CX1CiTDD.js", "/assets/search-DKKh_DdH.js", "/assets/command-DwgQs69u.js", "/assets/badge-oJv4Eai8.js", "/assets/CmsStatusBadge-D7kYaohx.js", "/assets/scroll-area-b3A1HHR7.js", "/assets/circle-check-big-3OHxNDhO.js"] }, "/entries/type/$contentTypeId": { "filePath": "/Users/home/Developer/projects/convex-cms/admin/src/routes/entries/type/$contentTypeId.tsx", "assets": [], "preloads": ["/assets/_contentTypeId-DTv8UoTp.js", "/assets/usePermissions-DWBImEOW.js", "/assets/useBreadcrumbLabel-CF2KYwsw.js", "/assets/CmsPageHeader-SoF4Epu9.js", "/assets/CmsToolbar-DlZPMe2B.js", "/assets/CmsStatusBadge-D7kYaohx.js", "/assets/CmsEmptyState-6-PLaXtD.js", "/assets/TaxonomyFilter-CFX1_g8s.js", "/assets/search-DKKh_DdH.js", "/assets/badge-oJv4Eai8.js", "/assets/command-DwgQs69u.js"] } }, "clientEntry": "/assets/main-DV6oxWnU.js" });
2
- export {
3
- tsrStartManifest
4
- };