6 lines
19 KiB
JavaScript
6 lines
19 KiB
JavaScript
import{j as e,a as l}from"./vendor-react-YMhRUmcb.js";import{d as U,j as ne,B as A,D as ce,l as de,C as ue,k as me}from"./index-D2uzyr9g.js";import{E as xe,G as Q}from"./vendor-fFnFILYR.js";import{u as pe,a as he}from"./vendor-tanstack-CoFNL2zy.js";import{g as fe,t as ge}from"./tracks-C_h6xkxF.js";import{u as be,D as je,a as ye,b as ve,c as B}from"./useIsRateLimited-C43yhDlJ.js";import{ai as F,X as Ne,A as we,R as ke,f as q,aj as Ce,ak as Se,Y as $,e as Ae,a9 as De,al as Me,T as Pe,S as Ue,am as Le,L as Te,aa as Ee}from"./vendor-icons-DINCNwpk.js";import{P as _e}from"./progress-CWjxseYI.js";import{A as Fe}from"./alert-COAUu9KR.js";import{L as _,I as P}from"./input-DL1WY4HG.js";import{p as Re,i as ze,f as Ie}from"./vendor-utils-4BWoYre8.js";import{c as Ve}from"./vendor-router-DX94Iu-2.js";import"./dropdown-DLDDI8f2.js";function Ge({children:s,variant:r="default",className:t}){return e.jsx("div",{className:U("p-8",r==="alert"&&"text-destructive",t),children:s})}function Oe({children:s,className:r}){return e.jsx("div",{className:U("flex items-center justify-end gap-2 p-8 border-t border-border",r),children:s})}const G={all:["library"],tracks:s=>[...G.all,"tracks",{userId:s}]};function Qe(s=1,r=50){const{user:t}=ne();return pe({queryKey:[...G.tracks(t?.id),{page:s,limit:r}],queryFn:()=>fe({userId:t?.id,page:s,limit:r}),enabled:!!t?.id,placeholderData:c=>c})}const Be=100*1024*1024,qe={"audio/mpeg":[".mp3"],"audio/wav":[".wav"],"audio/ogg":[".ogg"],"audio/flac":[".flac"],"audio/mp4":[".m4a"],"audio/aac":[".aac"]},V=3;function $e({onClose:s}){const[r,t]=l.useState(null),[c,a]=l.useState(0),[d,f]=l.useState(!1),[y,i]=l.useState(null),[h,g]=l.useState(null),[v,x]=l.useState(!1),[N,w]=l.useState(0),[D,b]=l.useState(!1),[m,S]=l.useState({file:null,title:"",artist:"",album:"",genre:""}),[u,k]=l.useState({}),j=be(),R=he(),O=l.useCallback(()=>{S({file:null,title:"",artist:"",album:"",genre:""}),k({})},[]),z=l.useCallback(()=>{d||(t(null),a(0),i(null),g(null),x(!1),w(0),b(!1),O(),s())},[d,O,s]),M=l.useCallback((o,n)=>{S(p=>({...p,[o]:n}))},[]),I=l.useCallback(()=>m,[m]),L=l.useCallback(async(o,n=1)=>{if(!o.file){i("Veuillez sélectionner un fichier"),g(null),x(!1);return}f(!0),i(null),g(null),x(!1),b(!1),a(0);try{const p={title:o.title||o.file.name.replace(/\.[^/.]+$/,""),artist:o.artist,album:o.album,genre:o.genre,is_public:!1};await ge.create(o.file,p,C=>{a(C)}),b(!0),a(100),w(0),R.invalidateQueries({queryKey:G.all}),R.invalidateQueries({queryKey:["tracks"]}),setTimeout(()=>z(),1500)}catch(p){let C="Erreur lors de l'upload",T=null,E=!1;if(p instanceof Error){C=p.message;const le=/network|réseau|timeout|econnaborted|etimedout|se connecter/i.test(C),oe=/serveur|server|500|503|502/i.test(C),ie=/format|taille|invalide|trop volumineux|non supporté|400|413|415/i.test(C);le?(T="NETWORK",E=n<V):oe?(T="SERVER",E=n<V):ie&&(T="VALIDATION",E=!1)}i(C),g(T),x(E),a(0),w(n)}finally{f(!1)}},[R,z]),X=l.useCallback(o=>{const n=o[0];if(n){t(n),i(null),b(!1),M("file",n);const p=n.name.replace(/\.[^/.]+$/,"");m.title||M("title",p)}},[M,m.title]),{getRootProps:Z,getInputProps:H,isDragActive:J}=xe({onDrop:X,accept:qe,maxSize:Be,multiple:!1,onError:o=>i(`Erreur lors de la sélection du fichier: ${o.message}`),onDropRejected:o=>{const n=o[0];n?.errors[0]?.code==="file-too-large"?i("Le fichier est trop volumineux (max 100 MB)"):n?.errors[0]?.code==="file-invalid-type"?i("Format de fichier non supporté. Formats acceptés: MP3, WAV, OGG, FLAC, M4A, AAC"):i(n?.errors[0]?.message||"Erreur lors de la sélection du fichier")}}),ee=o=>({value:m[o]instanceof File?"":m[o]||"",onChange:n=>{S(p=>({...p,[o]:n.target.value}))}}),se=l.useCallback((o,n)=>p=>{if(p.preventDefault(),!m.file){k({file:"Veuillez sélectionner un fichier"}),n?.({file:{message:"Veuillez sélectionner un fichier"}});return}k({}),o(m)},[m]),re=l.useCallback(async o=>{await L(o,1)},[L]),te=l.useCallback(()=>{L(I(),N+1)},[N,I,L]),ae=l.useCallback(()=>{t(null),i(null),b(!1),a(0),M("file",null)},[M]);return{file:r,uploadProgress:c,isUploading:d,error:y,errorCode:h,isRetryable:v,retryCount:N,success:D,formData:m,formErrors:u,register:ee,handleSubmit:se,onSubmit:re,getValues:I,getRootProps:Z,getInputProps:H,isDragActive:J,handleClose:z,handleRetry:te,handleRemoveFile:ae,isRateLimited:j}}function Ke({getRootProps:s,getInputProps:r,isDragActive:t}){return e.jsxs("div",{...s(),className:`
|
|
border-2 border-dashed rounded-lg p-12 text-center cursor-pointer
|
|
transition-colors
|
|
${t?"border-primary bg-primary/5":"border-muted-foreground/25"}
|
|
hover:border-primary hover:bg-primary/5
|
|
`,children:[e.jsx("input",{...r()}),e.jsx(F,{className:"mx-auto h-12 w-12 text-muted-foreground mb-4"}),e.jsx("p",{className:"text-lg font-medium mb-2",children:t?"Déposez le fichier ici":"Glissez-déposez un fichier audio"}),e.jsx("p",{className:"text-sm text-muted-foreground mb-4",children:"ou cliquez pour sélectionner"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Formats acceptés: MP3, WAV, OGG, FLAC, M4A, AAC (max 100 MB)"})]})}function Ye({file:s,isUploading:r,onRemove:t}){return e.jsx("div",{className:"border rounded-lg p-4","data-testid":"upload-file-display",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx(F,{className:"h-8 w-8 text-primary"}),e.jsxs("div",{children:[e.jsx("p",{className:"font-medium","data-testid":"upload-file-name",children:s.name}),e.jsxs("p",{className:"text-sm text-muted-foreground",children:[(s.size/1024/1024).toFixed(2)," MB"]})]})]}),!r&&e.jsx(A,{type:"button",variant:"ghost",size:"icon",onClick:t,className:"h-8 w-8",children:e.jsx(Ne,{className:"h-4 w-4"})})]})})}function We({progress:s}){return e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex items-center justify-between text-sm",children:[e.jsx("span",{children:"Upload en cours..."}),e.jsxs("span",{children:[s,"%"]})]}),e.jsx(_e,{value:s})]})}function Xe({error:s,errorCode:r,retryCount:t,isRetryable:c,isUploading:a,onRetry:d}){return e.jsx(Fe,{variant:"destructive","data-testid":"upload-error",children:e.jsxs("div",{className:"flex items-start gap-4",children:[e.jsx(we,{className:"h-4 w-4 mt-0.5 shrink-0"}),e.jsxs("div",{className:"flex-1 space-y-2",children:[e.jsxs("div",{children:[e.jsx("p",{className:"font-medium",children:s}),r&&e.jsxs("p",{className:"text-xs text-muted-foreground mt-1",children:["Code d'erreur: ",r]}),t>0&&e.jsxs("p",{className:"text-xs text-muted-foreground mt-1",children:["Tentative ",t,"/",V]})]}),c&&e.jsxs(A,{type:"button",variant:"outline",size:"sm",onClick:d,disabled:a,className:"mt-2",children:[e.jsx(ke,{className:"h-4 w-4 mr-2"}),"Réessayer"]})]})]})})}function Ze({register:s,errors:r}){return e.jsxs("div",{className:"space-y-4 border-t pt-4",children:[e.jsx("h3",{className:"font-medium",children:"Métadonnées (optionnel)"}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(_,{htmlFor:"title",children:"Titre *"}),e.jsx(P,{id:"title",...s("title"),placeholder:"Titre du morceau"}),r.title&&e.jsx("p",{className:"text-sm text-destructive",children:r.title})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(_,{htmlFor:"artist",children:"Artiste"}),e.jsx(P,{id:"artist",...s("artist"),placeholder:"Nom de l'artiste"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(_,{htmlFor:"album",children:"Album"}),e.jsx(P,{id:"album",...s("album"),placeholder:"Nom de l'album"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(_,{htmlFor:"genre",children:"Genre"}),e.jsx(P,{id:"genre",...s("genre"),placeholder:"Genre musical"})]})]})]})}function He({open:s,onClose:r}){const{file:t,uploadProgress:c,isUploading:a,error:d,errorCode:f,isRetryable:y,retryCount:i,success:h,formErrors:g,register:v,handleSubmit:x,onSubmit:N,getRootProps:w,getInputProps:D,isDragActive:b,handleClose:m,handleRetry:S,handleRemoveFile:u,isRateLimited:k}=$e({onClose:r});return e.jsx(ce,{open:s,onClose:m,title:"Uploader un fichier audio",size:"lg",children:e.jsxs("form",{id:"upload-track-form",onSubmit:x(N,j=>{de.warn("Form validation errors:",{errors:j})}),children:[e.jsx(Ge,{children:e.jsxs("div",{className:"space-y-6",children:[t?e.jsx(Ye,{file:t,isUploading:a,onRemove:u}):e.jsx(Ke,{getRootProps:w,getInputProps:D,isDragActive:b}),a&&e.jsx(We,{progress:c}),d&&e.jsx(Xe,{error:d,errorCode:f,retryCount:i,isRetryable:y,isUploading:a,onRetry:S}),h&&e.jsxs("div",{className:"rounded-lg border bg-success/10 border-success p-4 flex items-center gap-2 text-success",children:[e.jsx(q,{className:"h-4 w-4 shrink-0"}),e.jsx("span",{children:"Fichier uploadé avec succès !"})]}),t&&!a&&!h&&e.jsx(Ze,{register:v,errors:g})]})}),e.jsxs(Oe,{children:[e.jsx(A,{variant:"outline",onClick:m,disabled:a,type:"button",children:h?"Fermer":"Annuler"}),!h&&e.jsxs(A,{type:"submit",form:"upload-track-form",disabled:!t||a||k,className:"gap-2",children:[e.jsx(Ce,{className:"h-4 w-4"}),a?"Upload en cours...":"Uploader"]})]})]})})}function Je({onUploadClick:s}){return e.jsxs("div",{className:"flex-1 flex flex-col items-center justify-center text-center opacity-60 min-h-layout-page-sm",children:[e.jsx("div",{className:"w-24 h-24 bg-muted/10 rounded-full flex items-center justify-center mb-6 border border-border",children:e.jsx(F,{className:"w-10 h-10 text-muted-foreground"})}),e.jsx("h3",{className:"text-xl font-display font-bold text-foreground mb-2",children:"It's empty here"}),e.jsx("p",{className:"text-muted-foreground max-w-sm mx-auto mb-8",children:"Start by uploading your first audio files to populate your library."}),e.jsx(A,{variant:"outline",onClick:s,className:"border-primary/50 text-primary hover:bg-primary/10",children:"Upload File"})]})}function K(s,r){try{let t;if(typeof s=="string")t=Re(s);else if(s instanceof Date)t=s;else if(typeof s=="number")t=new Date(s);else return"";return ze(t)?Ie(t,r):"unknown time"}catch{return""}}function Y(s){const r=s.artist;return typeof r=="string"?r:r?.name??"Unknown Artist"}function W(s){const r=typeof s=="number"?s:0;return r===0&&typeof s=="string"?s:`${Math.floor(r/60)}:${String(r%60).padStart(2,"0")}`}const es={visible:{transition:{staggerChildren:.03,delayChildren:.02}}},ss={hidden:{opacity:0,y:8},visible:{opacity:1,y:0}};function rs({tracks:s,selectedTracks:r,onToggleSelection:t,onPlayTrack:c}){return e.jsx(Q.div,{className:"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5 2xl:grid-cols-6 gap-6",variants:es,initial:"hidden",animate:"visible",children:s.map(a=>{const d=r.has(a.id);return e.jsx(Q.div,{variants:ss,children:e.jsxs(ue,{variant:"glass",className:U("group relative aspect-[4/5] overflow-hidden cursor-pointer hover:-translate-y-2 transition-all duration-300 border-white/5 bg-black/20 backdrop-blur-xl hover-glow-cyan",d?"border-primary ring-1 ring-primary shadow-[0_0_20px_rgba(var(--cyan-500),0.2)]":"hover:border-primary/30"),onClick:()=>t(a.id),children:[e.jsx("div",{className:"absolute top-3 left-3 z-10 opacity-0 group-hover:opacity-100 transition-opacity",children:d?e.jsx(q,{className:"w-6 h-6 text-primary fill-background drop-shadow-[0_0_5px_rgba(0,0,0,0.5)]"}):e.jsx(Se,{className:"w-6 h-6 text-white/70 hover:text-white drop-shadow-[0_0_5px_rgba(0,0,0,0.5)]"})}),e.jsxs("div",{className:"h-3/5 w-full bg-gradient-to-br from-background to-black/40 flex items-center justify-center relative group-hover:from-background/80 group-hover:to-black/60 transition-all",children:[a.coverUrl?e.jsx("img",{src:a.coverUrl,alt:a.title,className:"w-full h-full object-cover transition-transform duration-700 group-hover:scale-110"}):e.jsx(F,{className:"w-12 h-12 text-muted-foreground/30 group-hover:text-primary/50 transition-colors duration-300"}),e.jsx("button",{type:"button",onClick:f=>{f.stopPropagation(),c(a)},className:"absolute inset-0 flex items-center justify-center opacity-0 group-hover:opacity-100 transition-all scale-90 group-hover:scale-100",children:e.jsx("div",{className:"w-14 h-14 rounded-full bg-primary text-primary-foreground flex items-center justify-center shadow-[0_0_30px_rgba(var(--cyan-500),0.6)] hover:scale-110 transition-transform",children:e.jsx($,{className:"w-6 h-6 ml-1 fill-current"})})})]}),e.jsxs("div",{className:"p-4 flex flex-col justify-between h-2/5 bg-black/20 backdrop-blur-sm",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"font-bold text-sm text-foreground truncate mb-1 group-hover:text-primary transition-colors",title:a.title,children:a.title}),e.jsx("p",{className:"text-xs text-muted-foreground truncate",children:Y(a)})]}),e.jsxs("div",{className:"flex items-center justify-between text-xs text-muted-foreground/70 font-mono mt-2",children:[e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(Ae,{className:"w-3 h-3"}),W(a.duration)]}),e.jsx("span",{children:K(a.created_at)})]})]})]})},a.id)})})}function ts({tracks:s,onPlayTrack:r}){return e.jsx("div",{className:"glass rounded-2xl overflow-hidden shadow-lg",children:e.jsxs("table",{className:"w-full text-left text-sm",children:[e.jsx("thead",{className:"bg-black/20 text-xs uppercase font-mono text-muted-foreground",children:e.jsxs("tr",{children:[e.jsx("th",{className:"px-6 py-4 w-12 text-center",children:"#"}),e.jsx("th",{className:"px-6 py-4",children:"Title"}),e.jsx("th",{className:"px-6 py-4 hidden md:table-cell",children:"Artist"}),e.jsx("th",{className:"px-6 py-4 hidden sm:table-cell",children:"Date"}),e.jsx("th",{className:"px-6 py-4 text-right",children:"Duration"}),e.jsx("th",{className:"px-6 py-4 w-12"})]})}),e.jsx("tbody",{className:"divide-y divide-border/50",children:s.map((t,c)=>e.jsxs("tr",{className:"group hover:bg-white/5 transition-colors cursor-pointer",onClick:()=>r(t),children:[e.jsxs("td",{className:"px-6 py-4 text-center text-muted-foreground group-hover:text-primary",children:[e.jsx("span",{className:"group-hover:hidden",children:c+1}),e.jsx($,{className:"w-4 h-4 hidden group-hover:inline-block fill-current"})]}),e.jsx("td",{className:"px-6 py-4 font-medium text-foreground group-hover:text-primary transition-colors",children:t.title}),e.jsx("td",{className:"px-6 py-4 text-muted-foreground hidden md:table-cell",children:Y(t)}),e.jsx("td",{className:"px-6 py-4 text-muted-foreground hidden sm:table-cell font-mono text-xs",children:K(t.created_at,{addSuffix:!0})}),e.jsx("td",{className:"px-6 py-4 text-right text-muted-foreground font-mono text-xs",children:W(t.duration)}),e.jsx("td",{className:"px-6 py-4",children:e.jsxs(je,{children:[e.jsx(ye,{asChild:!0,children:e.jsx("button",{type:"button",className:"p-2 hover:bg-white/10 rounded-full transition-colors opacity-0 group-hover:opacity-100 text-muted-foreground",onClick:a=>a.stopPropagation(),children:e.jsx(De,{className:"w-4 h-4"})})}),e.jsxs(ve,{align:"end",className:"bg-background/90 backdrop-blur-xl border-border",children:[e.jsxs(B,{className:"cursor-pointer gap-2 focus:bg-primary/20",children:[e.jsx(Me,{className:"w-4 h-4"})," Download"]}),e.jsxs(B,{className:"cursor-pointer gap-2 text-destructive focus:bg-destructive/10 focus:text-destructive",children:[e.jsx(Pe,{className:"w-4 h-4"})," Delete"]})]})]})})]},t.id))})]})})}function as(){return e.jsxs("div",{className:"h-full flex flex-col space-y-6 animate-fade-in pb-24",children:[e.jsxs("div",{className:"sticky top-0 z-20 bg-background/80 backdrop-blur-xl border-b border-border py-4 -mx-4 px-4 md:-mx-8 md:px-8 flex flex-col md:flex-row gap-4 justify-between items-center",children:[e.jsxs("div",{className:"flex items-center gap-4 w-full md:w-auto",children:[e.jsx("div",{className:"h-8 w-24 bg-muted/20 rounded-lg animate-pulse hidden md:block"}),e.jsx("div",{className:"flex-1 md:w-80 h-10 bg-muted/20 rounded-xl animate-pulse"})]}),e.jsxs("div",{className:"flex items-center gap-3 w-full md:w-auto justify-end",children:[e.jsx("div",{className:"h-10 w-20 bg-muted/20 rounded-lg animate-pulse"}),e.jsx("div",{className:"h-10 w-24 bg-muted/20 rounded-lg animate-pulse"})]})]}),e.jsx("div",{className:"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5 2xl:grid-cols-6 gap-6",children:Array.from({length:10},(s,r)=>e.jsx("div",{className:"aspect-[4/5] bg-muted/10 rounded-[var(--radius-xl)] animate-pulse"},r))})]})}function ls({viewMode:s,onViewModeChange:r,searchQuery:t,onSearchChange:c,onNewClick:a}){return e.jsxs("div",{className:"sticky top-0 z-20 bg-background/80 backdrop-blur-xl border-b border-border py-4 -mx-4 px-4 md:-mx-8 md:px-8 flex flex-col md:flex-row gap-4 justify-between items-center transition-all",children:[e.jsxs("div",{className:"flex items-center gap-4 w-full md:w-auto",children:[e.jsx("h1",{className:"text-2xl font-display font-bold text-foreground hidden md:block",children:"Library"}),e.jsxs("div",{className:"relative flex-1 md:w-80",children:[e.jsx(Ue,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground"}),e.jsx(P,{placeholder:"Search...",value:t,onChange:d=>c(d.target.value),className:"pl-9 bg-muted/20 border-transparent focus:bg-background focus:ring-1 focus:ring-primary/50 transition-all rounded-xl"})]})]}),e.jsxs("div",{className:"flex items-center gap-3 w-full md:w-auto justify-end",children:[e.jsxs("div",{className:"bg-muted/20 p-1 rounded-lg border border-border flex items-center h-10",children:[e.jsx("button",{type:"button",onClick:()=>r("grid"),className:U("h-8 w-8 flex items-center justify-center rounded-md transition-all",s==="grid"?"bg-background text-primary shadow-sm":"text-muted-foreground hover:text-foreground"),"aria-label":"Grid view",children:e.jsx(Le,{className:"w-4 h-4"})}),e.jsx("button",{type:"button",onClick:()=>r("list"),className:U("h-8 w-8 flex items-center justify-center rounded-md transition-all",s==="list"?"bg-background text-primary shadow-sm":"text-muted-foreground hover:text-foreground"),"aria-label":"List view",children:e.jsx(Te,{className:"w-4 h-4"})})]}),e.jsxs(A,{onClick:a,className:"shadow-[0_0_20px_rgba(var(--cyan-500),0.3)] hover:shadow-[0_0_30px_rgba(var(--cyan-500),0.5)] transition-all bg-primary text-primary-foreground",children:[e.jsx(Ee,{className:"w-4 h-4 mr-2"})," New"]})]})]})}function os(s={}){const{initialTracks:r}=s,[t,c]=l.useState("grid"),[a,d]=l.useState(""),[f,y]=l.useState(new Set),[i,h]=Ve(),{data:g,isLoading:v}=Qe(1,100),x=r!==void 0?r??[]:g?.tracks??[],N=r!==void 0?!1:v,w=l.useMemo(()=>x.length?x.filter(u=>(u.title??"").toLowerCase().includes(a.toLowerCase())||String(typeof u.artist=="string"?u.artist:u.artist?.name??"").toLowerCase().includes(a.toLowerCase())):[],[x,a]),D=u=>{y(k=>{const j=new Set(k);return j.has(u)?j.delete(u):j.add(u),j})},b=i.get("action")==="upload";return{viewMode:t,setViewMode:c,searchQuery:a,setSearchQuery:d,selectedTracks:f,toggleSelection:D,filteredTracks:w,isLoading:N,isUploadOpen:b,closeUpload:()=>{const u=new URLSearchParams(i);u.delete("action"),h(u)},openUpload:()=>h({action:"upload"})}}function ys(s={}){const{playTrack:r}=me(),{viewMode:t,setViewMode:c,searchQuery:a,setSearchQuery:d,selectedTracks:f,toggleSelection:y,filteredTracks:i,isLoading:h,isUploadOpen:g,closeUpload:v,openUpload:x}=os(s);return h?e.jsx(as,{}):e.jsxs("div",{className:"h-full flex flex-col space-y-6 animate-fade-in pb-24 min-h-layout-page",children:[e.jsx(ls,{viewMode:t,onViewModeChange:c,searchQuery:a,onSearchChange:d,onNewClick:x}),i.length===0?e.jsx(Je,{onUploadClick:x}):t==="grid"?e.jsx(rs,{tracks:i,selectedTracks:f,onToggleSelection:y,onPlayTrack:r}):e.jsx(ts,{tracks:i,onPlayTrack:r}),g&&e.jsx(He,{isOpen:!0,onClose:v})]})}export{ys as LibraryPage};
|