@jacshuo/onyx 1.4.0 → 1.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Extras/CinePlayer.cjs +1 -1
- package/dist/Extras/CinePlayer.js +1 -1
- package/dist/Extras/FileExplorer.cjs +9 -2
- package/dist/Extras/FileExplorer.js +9 -2
- package/dist/Extras/MiniPlayer.cjs +2 -2
- package/dist/Extras/MiniPlayer.js +2 -2
- package/dist/Extras/index.cjs +11 -4
- package/dist/Extras/index.js +11 -4
- package/dist/Forms/Form.cjs +1 -1
- package/dist/Forms/Form.js +1 -1
- package/dist/Forms/index.cjs +1 -1
- package/dist/Forms/index.js +1 -1
- package/dist/index.cjs +12 -5
- package/dist/index.js +12 -5
- package/dist/styles/base.css +9 -18
- package/dist/styles.css +9 -18
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
'use strict';var Pe=require('react'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),lucideReact=require('lucide-react'),jsxRuntime=require('react/jsx-runtime');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var Pe__default=/*#__PURE__*/_interopDefault(Pe);function i(...r){return tailwindMerge.twMerge(clsx.clsx(r))}function j(r){if(!isFinite(r)||r<0)return "0:00";let p=Math.floor(r/3600),M=Math.floor(r%3600/60),L=Math.floor(r%60);return p>0?`${p}:${M.toString().padStart(2,"0")}:${L.toString().padStart(2,"0")}`:`${M}:${L.toString().padStart(2,"0")}`}var ze={title:(r,p)=>r.title.localeCompare(p.title),type:(r,p)=>(r.type??"").localeCompare(p.type??""),duration:(r,p)=>(r.duration??0)-(p.duration??0)};function Je({playlist:r,initialTrack:p=0,autoPlay:M=false,shuffle:L=false,loop:se=false,onTrackChange:q,onPlayChange:oe,accent:le="#8b5cf6",className:ce}){let[f,ie]=Pe.useState(p),[l,y]=Pe.useState(false),[E,H]=Pe.useState(0),[u,ue]=Pe.useState(0),[de,me]=Pe.useState(0),[S,V]=Pe.useState(.8),[k,G]=Pe.useState(false),[P,pe]=Pe.useState(L),[A,fe]=Pe.useState(se),[J,ve]=Pe.useState(false),[w,be]=Pe.useState("title"),[N,Q]=Pe.useState(true),[v,W]=Pe.useState(false),[he,Y]=Pe.useState(false),[C,xe]=Pe.useState(false),[Z,R]=Pe.useState(true),[K,ee]=Pe.useState(false),[O,te]=Pe.useState(null),d=Pe.useRef(null),z=Pe.useRef(null),x=Pe.useRef(void 0),ne=Pe.useRef(false),c=r[f],ge=Pe__default.default.useMemo(()=>{let e=r.map((n,a)=>({media:n,originalIndex:a}));return e.sort((n,a)=>{let m=ze[w](n.media,a.media);return N?m:-m}),e},[r,w,N]);Pe.useEffect(()=>{let e=d.current;if(!e)return;ee(true),e.src=c.src,c.poster&&(e.poster=c.poster),e.load();let n=()=>{ee(false),l&&e.play().catch(()=>{});};return e.addEventListener("loadeddata",n,{once:true}),()=>e.removeEventListener("loadeddata",n)},[f,c.src]),Pe.useEffect(()=>{if(!M||ne.current)return;let e=d.current;if(!e)return;let n=()=>{ne.current=true,y(true),e.play().catch(()=>{});};return e.addEventListener("canplaythrough",n,{once:true}),()=>e.removeEventListener("canplaythrough",n)},[M]),Pe.useEffect(()=>{let e=d.current;e&&(l?e.play().catch(()=>{}):e.pause(),oe?.(l));},[l]),Pe.useEffect(()=>{let e=d.current;e&&(e.volume=k?0:S);},[S,k]),Pe.useEffect(()=>{let e=d.current;if(!e)return;let n=()=>H(e.currentTime),a=()=>ue(e.duration),m=()=>{e.buffered.length>0&&me(e.buffered.end(e.buffered.length-1));},ae=()=>{A?(e.currentTime=0,e.play().catch(()=>{})):D();};return e.addEventListener("timeupdate",n),e.addEventListener("loadedmetadata",a),e.addEventListener("progress",m),e.addEventListener("ended",ae),()=>{e.removeEventListener("timeupdate",n),e.removeEventListener("loadedmetadata",a),e.removeEventListener("progress",m),e.removeEventListener("ended",ae);}},[f,r.length,A]);let B=Pe.useCallback(()=>{R(true),x.current&&clearTimeout(x.current),x.current=setTimeout(()=>{l&&R(false);},3e3);},[l]);Pe.useEffect(()=>{l?B():(R(true),x.current&&clearTimeout(x.current));},[l,B]),Pe.useEffect(()=>()=>{x.current&&clearTimeout(x.current);},[]);let g=Pe.useCallback(e=>{let n=(e%r.length+r.length)%r.length;ie(n),H(0),y(true),q?.(n,r[n]);},[r,q]),D=Pe.useCallback(()=>{if(P){let e;do e=Math.floor(Math.random()*r.length);while(e===f&&r.length>1);g(e);}else g(f+1);},[g,f,P,r.length]),I=Pe.useCallback(()=>{if(P){let e;do e=Math.floor(Math.random()*r.length);while(e===f&&r.length>1);g(e);}else g(f-1);},[g,f,P,r.length]),ye=Pe.useCallback(e=>{let n=e.currentTarget.getBoundingClientRect(),m=Math.max(0,Math.min(1,(e.clientX-n.left)/n.width))*u;d.current&&(d.current.currentTime=m),H(m);},[u]),ke=Pe.useCallback(e=>{let n=e.currentTarget.getBoundingClientRect(),a=Math.max(0,Math.min(1,(e.clientX-n.left)/n.width));te(a*u);},[u]),X=Pe.useCallback(()=>{z.current&&(document.fullscreenElement?document.exitFullscreen():z.current.requestFullscreen());},[]);Pe.useEffect(()=>{let e=()=>xe(!!document.fullscreenElement);return document.addEventListener("fullscreenchange",e),()=>document.removeEventListener("fullscreenchange",e)},[]);let T=Pe.useCallback(()=>{v?(Y(true),setTimeout(()=>{W(false),Y(false);},500)):W(true);},[v]),_=Pe.useCallback(()=>{ve(e=>!e);},[]),we=Pe.useCallback(()=>{let e=["title","type","duration"],n=e.indexOf(w);N?Q(false):(Q(true),be(e[(n+1)%e.length]));},[w,N]);Pe.useEffect(()=>{let e=n=>{if(!(n.target instanceof HTMLInputElement||n.target instanceof HTMLTextAreaElement))switch(n.key){case " ":case "k":n.preventDefault(),y(a=>!a);break;case "f":n.preventDefault(),X();break;case "t":n.preventDefault(),T();break;case "ArrowLeft":n.preventDefault(),d.current&&(d.current.currentTime=Math.max(0,E-5));break;case "ArrowRight":n.preventDefault(),d.current&&(d.current.currentTime=Math.min(u,E+5));break;case "ArrowUp":n.preventDefault(),V(a=>Math.min(1,a+.05));break;case "ArrowDown":n.preventDefault(),V(a=>Math.max(0,a-.05));break;case "Escape":v&&T();break;case "n":n.preventDefault(),D();break;case "p":n.preventDefault(),I();break;case "l":n.preventDefault(),_();break}};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[X,T,_,D,I,E,u,v]);let re=u>0?E/u*100:0,Ne=u>0?de/u*100:0,$="text-(--accent)",Ce=jsxRuntime.jsxs("div",{ref:z,className:i("group flex overflow-hidden",C?"h-full w-full":"aspect-video w-full",!C&&"rounded-xl",!C&&l&&"shadow-2xl",!C&&!l&&"animate-[cp-glow-pulse_4s_ease-in-out_infinite] will-change-[box-shadow]",ce),style:{"--accent":le,background:"var(--cp-bg)"},tabIndex:0,children:[jsxRuntime.jsxs("div",{className:i("relative flex-1 min-w-0 h-full overflow-hidden",K&&"animate-[cp-track-transition_0.6s_ease-out]"),onMouseMove:B,onMouseLeave:()=>{l&&R(false);},children:[jsxRuntime.jsx("video",{ref:d,className:"h-full w-full object-contain",poster:c.poster,playsInline:true,preload:"metadata",onClick:()=>y(e=>!e)}),!l&&!K&&jsxRuntime.jsx("div",{className:"absolute inset-0 flex cursor-pointer items-center justify-center",style:{background:"var(--cp-overlay)"},onClick:()=>y(true),children:jsxRuntime.jsx("div",{className:"flex h-20 w-20 items-center justify-center rounded-full backdrop-blur-md transition-transform hover:scale-110 active:scale-95",style:{background:"var(--cp-surface-hover)"},children:jsxRuntime.jsx(lucideReact.Play,{className:"h-10 w-10 translate-x-0.5",fill:"currentColor",style:{color:"var(--cp-text-strong)"}})})}),K&&jsxRuntime.jsx("div",{className:"absolute left-6 top-6 z-20 animate-[fade-in_0.4s_ease-out]",children:jsxRuntime.jsxs("div",{className:"rounded-lg px-4 py-2 backdrop-blur-md",style:{background:"var(--cp-panel-bg)"},children:[jsxRuntime.jsx("div",{className:"text-sm font-semibold",style:{color:"var(--cp-text-strong)"},children:c.title}),c.subtitle&&jsxRuntime.jsx("div",{className:"text-xs",style:{color:"var(--cp-text-muted)"},children:c.subtitle})]})}),jsxRuntime.jsx("div",{className:i("absolute inset-x-0 top-0 z-10 bg-linear-to-b from-black/70 to-transparent px-5 pb-8 pt-4 transition-opacity duration-500",Z?"opacity-100":"pointer-events-none opacity-0"),children:jsxRuntime.jsxs("div",{className:"flex items-center justify-between",children:[jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("h3",{className:"text-sm font-semibold drop-shadow-md",style:{color:"var(--cp-text-strong)"},children:c.title}),c.subtitle&&jsxRuntime.jsx("p",{className:"text-xs",style:{color:"var(--cp-text-muted)"},children:c.subtitle})]}),c.type&&jsxRuntime.jsx("span",{className:"rounded-full bg-(--accent)/70 px-2.5 py-0.5 text-[10px] font-semibold uppercase tracking-wider backdrop-blur-sm",style:{color:"var(--cp-text-strong)"},children:c.type})]})}),jsxRuntime.jsxs("div",{className:i("absolute inset-x-0 bottom-0 z-10 bg-linear-to-t from-black/80 via-black/40 to-transparent px-4 pb-3 pt-10 transition-all duration-500",Z?"translate-y-0 opacity-100":"pointer-events-none translate-y-2 opacity-0"),children:[jsxRuntime.jsxs("div",{className:"group/seek relative mb-3 h-1 cursor-pointer rounded-full transition-[height] duration-200 hover:h-1.5",style:{background:"var(--cp-seek-track)"},onClick:ye,onMouseMove:ke,onMouseLeave:()=>te(null),children:[jsxRuntime.jsx("div",{className:"absolute inset-y-0 left-0 rounded-full",style:{width:`${Ne}%`,background:"var(--cp-seek-buffer)"}}),jsxRuntime.jsx("div",{className:"absolute inset-y-0 left-0 rounded-full bg-(--accent) transition-[width] duration-100",style:{width:`${re}%`}}),O!==null&&jsxRuntime.jsx("div",{className:"absolute -top-8 -translate-x-1/2 rounded px-2 py-0.5 text-[10px] font-mono",style:{left:`${O/u*100}%`,background:"var(--cp-panel-bg)",color:"var(--cp-text-strong)"},children:j(O)}),jsxRuntime.jsx("div",{className:"absolute top-1/2 h-3.5 w-3.5 -translate-y-1/2 rounded-full border-2 border-(--accent) bg-white opacity-0 shadow-lg transition-opacity group-hover/seek:opacity-100",style:{left:`calc(${re}% - 7px)`}})]}),jsxRuntime.jsxs("div",{className:"flex items-center gap-1",children:[jsxRuntime.jsx("button",{className:"cp-btn",onClick:()=>y(e=>!e),title:l?"Pause (k)":"Play (k)",children:l?jsxRuntime.jsx(lucideReact.Pause,{className:"h-5 w-5",fill:"currentColor"}):jsxRuntime.jsx(lucideReact.Play,{className:"h-5 w-5 translate-x-px",fill:"currentColor"})}),jsxRuntime.jsx("button",{className:"cp-btn",onClick:I,title:"Previous (p)",children:jsxRuntime.jsx(lucideReact.SkipBack,{className:"h-4 w-4",fill:"currentColor"})}),jsxRuntime.jsx("button",{className:"cp-btn",onClick:D,title:"Next (n)",children:jsxRuntime.jsx(lucideReact.SkipForward,{className:"h-4 w-4",fill:"currentColor"})}),jsxRuntime.jsxs("div",{className:"group/vol ml-1 flex items-center",children:[jsxRuntime.jsx("button",{className:"cp-btn",onClick:()=>G(e=>!e),title:k?"Unmute":"Mute",children:k||S===0?jsxRuntime.jsx(lucideReact.VolumeX,{className:"h-4 w-4"}):jsxRuntime.jsx(lucideReact.Volume2,{className:"h-4 w-4"})}),jsxRuntime.jsx("div",{className:"flex w-0 items-center overflow-hidden transition-all duration-300 group-hover/vol:w-20",children:jsxRuntime.jsx("input",{type:"range",min:0,max:1,step:.01,value:k?0:S,onChange:e=>{V(Number(e.target.value)),k&&G(false);},className:"h-1 w-full cursor-pointer appearance-none rounded-full accent-(--accent)",style:{background:"var(--cp-seek-track)"}})})]}),jsxRuntime.jsxs("span",{className:"ml-2 min-w-0 shrink-0 font-mono text-xs",style:{color:"var(--cp-text-muted)"},children:[j(E)," / ",j(u)]}),jsxRuntime.jsx("div",{className:"flex-1"}),jsxRuntime.jsx("button",{className:i("cp-btn",P&&$),onClick:()=>pe(e=>!e),title:"Shuffle",children:jsxRuntime.jsx(lucideReact.Shuffle,{className:"h-4 w-4"})}),jsxRuntime.jsx("button",{className:i("cp-btn",A&&$),onClick:()=>fe(e=>!e),title:"Loop",children:jsxRuntime.jsx(lucideReact.Repeat1,{className:"h-4 w-4"})}),jsxRuntime.jsx("button",{className:i("cp-btn",J&&$),onClick:_,title:"Playlist",children:jsxRuntime.jsx(lucideReact.ListVideo,{className:"h-4 w-4"})}),jsxRuntime.jsx("button",{className:i("cp-btn",v&&$),onClick:T,title:"Cinema mode (t)",children:jsxRuntime.jsx(lucideReact.Theater,{className:"h-4 w-4"})}),jsxRuntime.jsx("button",{className:"cp-btn",onClick:X,title:"Fullscreen (f)",children:C?jsxRuntime.jsx(lucideReact.Minimize,{className:"h-4 w-4"}):jsxRuntime.jsx(lucideReact.Maximize,{className:"h-4 w-4"})})]})]})]}),jsxRuntime.jsx("div",{className:i("h-full shrink-0 overflow-hidden transition-[width] duration-300 ease-out",J?"w-72":"w-0"),children:jsxRuntime.jsxs("div",{className:"flex h-full w-72 flex-col backdrop-blur-xl",style:{borderLeft:"1px solid var(--cp-border)",background:"var(--cp-panel-bg)"},children:[jsxRuntime.jsxs("div",{className:"flex items-center justify-between px-4 py-3",style:{borderBottom:"1px solid var(--cp-border)"},children:[jsxRuntime.jsx("span",{className:"text-xs font-semibold uppercase tracking-wider",style:{color:"var(--cp-text)"},children:"Playlist"}),jsxRuntime.jsxs("div",{className:"flex items-center gap-1",children:[jsxRuntime.jsxs("button",{className:"flex items-center gap-1 rounded px-2 py-1 text-[10px] font-medium transition-colors",style:{color:"var(--cp-text-muted)"},onClick:we,title:`Sort: ${w} ${N?"\u2191":"\u2193"}`,children:[jsxRuntime.jsx(lucideReact.ArrowUpDown,{className:"h-3 w-3"}),w,N?" \u2191":" \u2193"]}),jsxRuntime.jsx("button",{className:"cp-btn p-1!",onClick:_,title:"Close",children:jsxRuntime.jsx(lucideReact.X,{className:"h-3.5 w-3.5"})})]})]}),jsxRuntime.jsx("div",{className:"flex-1 overflow-y-auto",children:ge.map(({media:e,originalIndex:n})=>{let a=n===f;return jsxRuntime.jsxs("button",{className:i("flex w-full items-center gap-3 px-4 py-2.5 text-left transition-all duration-200",a?"bg-(--accent)/20 text-(--accent)":"hover:text-(--cp-text-strong)"),style:a?void 0:{color:"var(--cp-text)"},onClick:()=>{g(n);},children:[jsxRuntime.jsxs("div",{className:"relative h-10 w-16 shrink-0 overflow-hidden rounded",style:{background:"var(--cp-surface)"},children:[e.poster?jsxRuntime.jsx("img",{src:e.poster,alt:"",className:"h-full w-full object-cover",draggable:false}):jsxRuntime.jsx("div",{className:"flex h-full w-full items-center justify-center",children:jsxRuntime.jsx(lucideReact.Play,{className:"h-4 w-4",style:{color:"var(--cp-seek-track)"}})}),a&&l&&jsxRuntime.jsx("div",{className:"absolute inset-0 flex items-center justify-center",style:{background:"var(--cp-overlay)"},children:jsxRuntime.jsx("div",{className:"flex items-end gap-px",children:[1,2,3,4].map(m=>jsxRuntime.jsx("div",{className:"w-0.5 rounded-full bg-(--accent)",style:{height:`${6+m*3}px`,animation:`mp-eq-bar ${.3+m*.12}s ease-in-out infinite alternate`}},m))})})]}),jsxRuntime.jsxs("div",{className:"min-w-0 flex-1",children:[jsxRuntime.jsx("div",{className:"truncate text-xs font-medium",children:e.title}),jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[e.type&&jsxRuntime.jsx("span",{className:"text-[10px] uppercase tracking-wide opacity-50",children:e.type}),e.duration!=null&&jsxRuntime.jsx("span",{className:"font-mono text-[10px] opacity-40",children:j(e.duration)})]})]}),a&&jsxRuntime.jsx(lucideReact.ChevronRight,{className:"h-3.5 w-3.5 shrink-0 text-(--accent)"})]},n)})})]})}),jsxRuntime.jsx("style",{children:`
|
|
1
|
+
'use strict';var Pe=require('react'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),lucideReact=require('lucide-react'),jsxRuntime=require('react/jsx-runtime');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var Pe__default=/*#__PURE__*/_interopDefault(Pe);function i(...r){return tailwindMerge.twMerge(clsx.clsx(r))}function j(r){if(!isFinite(r)||r<0)return "0:00";let p=Math.floor(r/3600),M=Math.floor(r%3600/60),L=Math.floor(r%60);return p>0?`${p}:${M.toString().padStart(2,"0")}:${L.toString().padStart(2,"0")}`:`${M}:${L.toString().padStart(2,"0")}`}var ze={title:(r,p)=>r.title.localeCompare(p.title),type:(r,p)=>(r.type??"").localeCompare(p.type??""),duration:(r,p)=>(r.duration??0)-(p.duration??0)};function Je({playlist:r,initialTrack:p=0,autoPlay:M=false,shuffle:L=false,loop:se=false,onTrackChange:G,onPlayChange:oe,accent:le="#8b5cf6",className:ce}){let[f,ie]=Pe.useState(p),[l,y]=Pe.useState(false),[E,H]=Pe.useState(0),[u,ue]=Pe.useState(0),[de,me]=Pe.useState(0),[S,V]=Pe.useState(.8),[k,J]=Pe.useState(false),[P,pe]=Pe.useState(L),[A,fe]=Pe.useState(se),[Q,ve]=Pe.useState(false),[w,be]=Pe.useState("title"),[N,W]=Pe.useState(true),[v,Y]=Pe.useState(false),[he,Z]=Pe.useState(false),[C,xe]=Pe.useState(false),[K,R]=Pe.useState(true),[O,ee]=Pe.useState(false),[z,te]=Pe.useState(null),d=Pe.useRef(null),B=Pe.useRef(null),x=Pe.useRef(void 0),ne=Pe.useRef(false),c=r[f],ge=Pe__default.default.useMemo(()=>{let e=r.map((n,a)=>({media:n,originalIndex:a}));return e.sort((n,a)=>{let m=ze[w](n.media,a.media);return N?m:-m}),e},[r,w,N]);Pe.useEffect(()=>{let e=d.current;if(!e)return;ee(true),e.src=c.src,c.poster&&(e.poster=c.poster),e.load();let n=()=>{ee(false),l&&e.play().catch(()=>{});};return e.addEventListener("loadeddata",n,{once:true}),()=>e.removeEventListener("loadeddata",n)},[f,c.src]),Pe.useEffect(()=>{if(!M||ne.current)return;let e=d.current;if(!e)return;let n=()=>{ne.current=true,y(true),e.play().catch(()=>{});};return e.addEventListener("canplaythrough",n,{once:true}),()=>e.removeEventListener("canplaythrough",n)},[M]),Pe.useEffect(()=>{let e=d.current;e&&(l?e.play().catch(()=>{}):e.pause(),oe?.(l));},[l]),Pe.useEffect(()=>{let e=d.current;e&&(e.volume=k?0:S);},[S,k]),Pe.useEffect(()=>{let e=d.current;if(!e)return;let n=()=>H(e.currentTime),a=()=>ue(e.duration),m=()=>{e.buffered.length>0&&me(e.buffered.end(e.buffered.length-1));},ae=()=>{A?(e.currentTime=0,e.play().catch(()=>{})):D();};return e.addEventListener("timeupdate",n),e.addEventListener("loadedmetadata",a),e.addEventListener("progress",m),e.addEventListener("ended",ae),()=>{e.removeEventListener("timeupdate",n),e.removeEventListener("loadedmetadata",a),e.removeEventListener("progress",m),e.removeEventListener("ended",ae);}},[f,r.length,A]);let I=Pe.useCallback(()=>{R(true),x.current&&clearTimeout(x.current),x.current=setTimeout(()=>{l&&R(false);},3e3);},[l]);Pe.useEffect(()=>{l?I():(R(true),x.current&&clearTimeout(x.current));},[l,I]),Pe.useEffect(()=>()=>{x.current&&clearTimeout(x.current);},[]);let g=Pe.useCallback(e=>{let n=(e%r.length+r.length)%r.length;ie(n),H(0),y(true),G?.(n,r[n]);},[r,G]),D=Pe.useCallback(()=>{if(P){let e;do e=Math.floor(Math.random()*r.length);while(e===f&&r.length>1);g(e);}else g(f+1);},[g,f,P,r.length]),X=Pe.useCallback(()=>{if(P){let e;do e=Math.floor(Math.random()*r.length);while(e===f&&r.length>1);g(e);}else g(f-1);},[g,f,P,r.length]),ye=Pe.useCallback(e=>{let n=e.currentTarget.getBoundingClientRect(),m=Math.max(0,Math.min(1,(e.clientX-n.left)/n.width))*u;d.current&&(d.current.currentTime=m),H(m);},[u]),ke=Pe.useCallback(e=>{let n=e.currentTarget.getBoundingClientRect(),a=Math.max(0,Math.min(1,(e.clientX-n.left)/n.width));te(a*u);},[u]),U=Pe.useCallback(()=>{B.current&&(document.fullscreenElement?document.exitFullscreen():B.current.requestFullscreen());},[]);Pe.useEffect(()=>{let e=()=>xe(!!document.fullscreenElement);return document.addEventListener("fullscreenchange",e),()=>document.removeEventListener("fullscreenchange",e)},[]);let T=Pe.useCallback(()=>{v?(Z(true),setTimeout(()=>{Y(false),Z(false);},500)):Y(true);},[v]),_=Pe.useCallback(()=>{ve(e=>!e);},[]),we=Pe.useCallback(()=>{let e=["title","type","duration"],n=e.indexOf(w);N?W(false):(W(true),be(e[(n+1)%e.length]));},[w,N]);Pe.useEffect(()=>{let e=n=>{if(!(n.target instanceof HTMLInputElement||n.target instanceof HTMLTextAreaElement))switch(n.key){case " ":case "k":n.preventDefault(),y(a=>!a);break;case "f":n.preventDefault(),U();break;case "t":n.preventDefault(),T();break;case "ArrowLeft":n.preventDefault(),d.current&&(d.current.currentTime=Math.max(0,E-5));break;case "ArrowRight":n.preventDefault(),d.current&&(d.current.currentTime=Math.min(u,E+5));break;case "ArrowUp":n.preventDefault(),V(a=>Math.min(1,a+.05));break;case "ArrowDown":n.preventDefault(),V(a=>Math.max(0,a-.05));break;case "Escape":v&&T();break;case "n":n.preventDefault(),D();break;case "p":n.preventDefault(),X();break;case "l":n.preventDefault(),_();break}};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[U,T,_,D,X,E,u,v]);let re=u>0?E/u*100:0,Ne=u>0?de/u*100:0,$="text-(--accent)",Ce=jsxRuntime.jsxs("div",{ref:B,className:i("group flex overflow-hidden",C?"h-full w-full":"aspect-video w-full",!C&&"rounded-xl",!C&&l&&"shadow-2xl",!C&&!l&&"animate-[cp-glow-pulse_4s_ease-in-out_infinite] will-change-[box-shadow]",ce),style:{"--accent":le,background:"var(--cp-bg)"},tabIndex:0,children:[jsxRuntime.jsxs("div",{className:i("relative flex-1 min-w-0 h-full overflow-hidden",O&&"animate-[cp-track-transition_0.6s_ease-out]"),onMouseMove:I,onMouseLeave:()=>{l&&R(false);},children:[jsxRuntime.jsx("video",{ref:d,className:"h-full w-full object-contain",poster:c.poster,playsInline:true,preload:"metadata",onClick:()=>y(e=>!e)}),!l&&!O&&jsxRuntime.jsx("div",{className:"absolute inset-0 flex cursor-pointer items-center justify-center",style:{background:"var(--cp-overlay)"},onClick:()=>y(true),children:jsxRuntime.jsx("div",{className:"flex h-20 w-20 items-center justify-center rounded-full backdrop-blur-md transition-transform hover:scale-110 active:scale-95",style:{background:"var(--cp-surface-hover)"},children:jsxRuntime.jsx(lucideReact.Play,{className:"h-10 w-10 translate-x-0.5",fill:"currentColor",style:{color:"var(--cp-text-strong)"}})})}),O&&!K&&jsxRuntime.jsx("div",{className:"absolute left-6 top-6 z-20 animate-[fade-in_0.4s_ease-out]",children:jsxRuntime.jsxs("div",{className:"rounded-lg px-4 py-2 backdrop-blur-md",style:{background:"var(--cp-panel-bg)"},children:[jsxRuntime.jsx("div",{className:"text-sm font-semibold",style:{color:"var(--cp-text-strong)"},children:c.title}),c.subtitle&&jsxRuntime.jsx("div",{className:"text-xs",style:{color:"var(--cp-text-muted)"},children:c.subtitle})]})}),jsxRuntime.jsx("div",{className:i("absolute inset-x-0 top-0 z-10 bg-linear-to-b from-black/70 to-transparent px-5 pb-8 pt-4 transition-opacity duration-500",K?"opacity-100":"pointer-events-none opacity-0"),children:jsxRuntime.jsxs("div",{className:"flex items-center justify-between",children:[jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("h3",{className:"text-sm font-semibold drop-shadow-md",style:{color:"var(--cp-text-strong)"},children:c.title}),c.subtitle&&jsxRuntime.jsx("p",{className:"text-xs",style:{color:"var(--cp-text-muted)"},children:c.subtitle})]}),c.type&&jsxRuntime.jsx("span",{className:"rounded-full bg-(--accent)/70 px-2.5 py-0.5 text-[10px] font-semibold uppercase tracking-wider backdrop-blur-sm",style:{color:"var(--cp-text-strong)"},children:c.type})]})}),jsxRuntime.jsxs("div",{className:i("absolute inset-x-0 bottom-0 z-10 bg-linear-to-t from-black/80 via-black/40 to-transparent px-4 pb-3 pt-10 transition-all duration-500",K?"translate-y-0 opacity-100":"pointer-events-none translate-y-2 opacity-0"),children:[jsxRuntime.jsxs("div",{className:"group/seek relative mb-3 h-1 cursor-pointer rounded-full transition-[height] duration-200 hover:h-1.5",style:{background:"var(--cp-seek-track)"},onClick:ye,onMouseMove:ke,onMouseLeave:()=>te(null),children:[jsxRuntime.jsx("div",{className:"absolute inset-y-0 left-0 rounded-full",style:{width:`${Ne}%`,background:"var(--cp-seek-buffer)"}}),jsxRuntime.jsx("div",{className:"absolute inset-y-0 left-0 rounded-full bg-(--accent) transition-[width] duration-100",style:{width:`${re}%`}}),z!==null&&jsxRuntime.jsx("div",{className:"absolute -top-8 -translate-x-1/2 rounded px-2 py-0.5 text-[10px] font-mono",style:{left:`${z/u*100}%`,background:"var(--cp-panel-bg)",color:"var(--cp-text-strong)"},children:j(z)}),jsxRuntime.jsx("div",{className:"absolute top-1/2 h-3.5 w-3.5 -translate-y-1/2 rounded-full border-2 border-(--accent) bg-white opacity-0 shadow-lg transition-opacity group-hover/seek:opacity-100",style:{left:`calc(${re}% - 7px)`}})]}),jsxRuntime.jsxs("div",{className:"flex items-center gap-1",children:[jsxRuntime.jsx("button",{className:"cp-btn",onClick:()=>y(e=>!e),title:l?"Pause (k)":"Play (k)",children:l?jsxRuntime.jsx(lucideReact.Pause,{className:"h-5 w-5",fill:"currentColor"}):jsxRuntime.jsx(lucideReact.Play,{className:"h-5 w-5 translate-x-px",fill:"currentColor"})}),jsxRuntime.jsx("button",{className:"cp-btn",onClick:X,title:"Previous (p)",children:jsxRuntime.jsx(lucideReact.SkipBack,{className:"h-4 w-4",fill:"currentColor"})}),jsxRuntime.jsx("button",{className:"cp-btn",onClick:D,title:"Next (n)",children:jsxRuntime.jsx(lucideReact.SkipForward,{className:"h-4 w-4",fill:"currentColor"})}),jsxRuntime.jsxs("div",{className:"group/vol ml-1 flex items-center",children:[jsxRuntime.jsx("button",{className:"cp-btn",onClick:()=>J(e=>!e),title:k?"Unmute":"Mute",children:k||S===0?jsxRuntime.jsx(lucideReact.VolumeX,{className:"h-4 w-4"}):jsxRuntime.jsx(lucideReact.Volume2,{className:"h-4 w-4"})}),jsxRuntime.jsx("div",{className:"flex w-0 items-center overflow-hidden transition-all duration-300 group-hover/vol:w-20",children:jsxRuntime.jsx("input",{type:"range",min:0,max:1,step:.01,value:k?0:S,onChange:e=>{V(Number(e.target.value)),k&&J(false);},className:"h-1 w-full cursor-pointer appearance-none rounded-full accent-(--accent)",style:{background:"var(--cp-seek-track)"}})})]}),jsxRuntime.jsxs("span",{className:"ml-2 min-w-0 shrink-0 font-mono text-xs",style:{color:"var(--cp-text-muted)"},children:[j(E)," / ",j(u)]}),jsxRuntime.jsx("div",{className:"flex-1"}),jsxRuntime.jsx("button",{className:i("cp-btn",P&&$),onClick:()=>pe(e=>!e),title:"Shuffle",children:jsxRuntime.jsx(lucideReact.Shuffle,{className:"h-4 w-4"})}),jsxRuntime.jsx("button",{className:i("cp-btn",A&&$),onClick:()=>fe(e=>!e),title:"Loop",children:jsxRuntime.jsx(lucideReact.Repeat1,{className:"h-4 w-4"})}),jsxRuntime.jsx("button",{className:i("cp-btn",Q&&$),onClick:_,title:"Playlist",children:jsxRuntime.jsx(lucideReact.ListVideo,{className:"h-4 w-4"})}),jsxRuntime.jsx("button",{className:i("cp-btn",v&&$),onClick:T,title:"Cinema mode (t)",children:jsxRuntime.jsx(lucideReact.Theater,{className:"h-4 w-4"})}),jsxRuntime.jsx("button",{className:"cp-btn",onClick:U,title:"Fullscreen (f)",children:C?jsxRuntime.jsx(lucideReact.Minimize,{className:"h-4 w-4"}):jsxRuntime.jsx(lucideReact.Maximize,{className:"h-4 w-4"})})]})]})]}),jsxRuntime.jsx("div",{className:i("h-full shrink-0 overflow-hidden transition-[width] duration-300 ease-out",Q?"w-72":"w-0"),children:jsxRuntime.jsxs("div",{className:"flex h-full w-72 flex-col backdrop-blur-xl",style:{borderLeft:"1px solid var(--cp-border)",background:"var(--cp-panel-bg)"},children:[jsxRuntime.jsxs("div",{className:"flex items-center justify-between px-4 py-3",style:{borderBottom:"1px solid var(--cp-border)"},children:[jsxRuntime.jsx("span",{className:"text-xs font-semibold uppercase tracking-wider",style:{color:"var(--cp-text)"},children:"Playlist"}),jsxRuntime.jsxs("div",{className:"flex items-center gap-1",children:[jsxRuntime.jsxs("button",{className:"flex items-center gap-1 rounded px-2 py-1 text-[10px] font-medium transition-colors",style:{color:"var(--cp-text-muted)"},onClick:we,title:`Sort: ${w} ${N?"\u2191":"\u2193"}`,children:[jsxRuntime.jsx(lucideReact.ArrowUpDown,{className:"h-3 w-3"}),w,N?" \u2191":" \u2193"]}),jsxRuntime.jsx("button",{className:"cp-btn p-1!",onClick:_,title:"Close",children:jsxRuntime.jsx(lucideReact.X,{className:"h-3.5 w-3.5"})})]})]}),jsxRuntime.jsx("div",{className:"flex-1 overflow-y-auto",children:ge.map(({media:e,originalIndex:n})=>{let a=n===f;return jsxRuntime.jsxs("button",{className:i("flex w-full items-center gap-3 px-4 py-2.5 text-left transition-all duration-200",a?"bg-(--accent)/20 text-(--accent)":"hover:text-(--cp-text-strong)"),style:a?void 0:{color:"var(--cp-text)"},onClick:()=>{g(n);},children:[jsxRuntime.jsxs("div",{className:"relative h-10 w-16 shrink-0 overflow-hidden rounded",style:{background:"var(--cp-surface)"},children:[e.poster?jsxRuntime.jsx("img",{src:e.poster,alt:"",className:"h-full w-full object-cover",draggable:false}):jsxRuntime.jsx("div",{className:"flex h-full w-full items-center justify-center",children:jsxRuntime.jsx(lucideReact.Play,{className:"h-4 w-4",style:{color:"var(--cp-seek-track)"}})}),a&&l&&jsxRuntime.jsx("div",{className:"absolute inset-0 flex items-center justify-center",style:{background:"var(--cp-overlay)"},children:jsxRuntime.jsx("div",{className:"flex items-end gap-px",children:[1,2,3,4].map(m=>jsxRuntime.jsx("div",{className:"w-0.5 rounded-full bg-(--accent)",style:{height:`${6+m*3}px`,animation:`mp-eq-bar ${.3+m*.12}s ease-in-out infinite alternate`}},m))})})]}),jsxRuntime.jsxs("div",{className:"min-w-0 flex-1",children:[jsxRuntime.jsx("div",{className:"truncate text-xs font-medium",children:e.title}),jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[e.type&&jsxRuntime.jsx("span",{className:"text-[10px] uppercase tracking-wide opacity-50",children:e.type}),e.duration!=null&&jsxRuntime.jsx("span",{className:"font-mono text-[10px] opacity-40",children:j(e.duration)})]})]}),a&&jsxRuntime.jsx(lucideReact.ChevronRight,{className:"h-3.5 w-3.5 shrink-0 text-(--accent)"})]},n)})})]})}),jsxRuntime.jsx("style",{children:`
|
|
2
2
|
.cp-btn {
|
|
3
3
|
display: flex;
|
|
4
4
|
align-items: center;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import Pe,{useState,useRef,useEffect,useCallback}from'react';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {Play,Pause,SkipBack,SkipForward,VolumeX,Volume2,Shuffle,Repeat1,ListVideo,Theater,Minimize,Maximize,ArrowUpDown,X,ChevronRight}from'lucide-react';import {jsxs,jsx}from'react/jsx-runtime';function i(...r){return twMerge(clsx(r))}function j(r){if(!isFinite(r)||r<0)return "0:00";let p=Math.floor(r/3600),M=Math.floor(r%3600/60),L=Math.floor(r%60);return p>0?`${p}:${M.toString().padStart(2,"0")}:${L.toString().padStart(2,"0")}`:`${M}:${L.toString().padStart(2,"0")}`}var ze={title:(r,p)=>r.title.localeCompare(p.title),type:(r,p)=>(r.type??"").localeCompare(p.type??""),duration:(r,p)=>(r.duration??0)-(p.duration??0)};function Je({playlist:r,initialTrack:p=0,autoPlay:M=false,shuffle:L=false,loop:se=false,onTrackChange:q,onPlayChange:oe,accent:le="#8b5cf6",className:ce}){let[f,ie]=useState(p),[l,y]=useState(false),[E,H]=useState(0),[u,ue]=useState(0),[de,me]=useState(0),[S,V]=useState(.8),[k,G]=useState(false),[P,pe]=useState(L),[A,fe]=useState(se),[J,ve]=useState(false),[w,be]=useState("title"),[N,Q]=useState(true),[v,W]=useState(false),[he,Y]=useState(false),[C,xe]=useState(false),[Z,R]=useState(true),[K,ee]=useState(false),[O,te]=useState(null),d=useRef(null),z=useRef(null),x=useRef(void 0),ne=useRef(false),c=r[f],ge=Pe.useMemo(()=>{let e=r.map((n,a)=>({media:n,originalIndex:a}));return e.sort((n,a)=>{let m=ze[w](n.media,a.media);return N?m:-m}),e},[r,w,N]);useEffect(()=>{let e=d.current;if(!e)return;ee(true),e.src=c.src,c.poster&&(e.poster=c.poster),e.load();let n=()=>{ee(false),l&&e.play().catch(()=>{});};return e.addEventListener("loadeddata",n,{once:true}),()=>e.removeEventListener("loadeddata",n)},[f,c.src]),useEffect(()=>{if(!M||ne.current)return;let e=d.current;if(!e)return;let n=()=>{ne.current=true,y(true),e.play().catch(()=>{});};return e.addEventListener("canplaythrough",n,{once:true}),()=>e.removeEventListener("canplaythrough",n)},[M]),useEffect(()=>{let e=d.current;e&&(l?e.play().catch(()=>{}):e.pause(),oe?.(l));},[l]),useEffect(()=>{let e=d.current;e&&(e.volume=k?0:S);},[S,k]),useEffect(()=>{let e=d.current;if(!e)return;let n=()=>H(e.currentTime),a=()=>ue(e.duration),m=()=>{e.buffered.length>0&&me(e.buffered.end(e.buffered.length-1));},ae=()=>{A?(e.currentTime=0,e.play().catch(()=>{})):D();};return e.addEventListener("timeupdate",n),e.addEventListener("loadedmetadata",a),e.addEventListener("progress",m),e.addEventListener("ended",ae),()=>{e.removeEventListener("timeupdate",n),e.removeEventListener("loadedmetadata",a),e.removeEventListener("progress",m),e.removeEventListener("ended",ae);}},[f,r.length,A]);let B=useCallback(()=>{R(true),x.current&&clearTimeout(x.current),x.current=setTimeout(()=>{l&&R(false);},3e3);},[l]);useEffect(()=>{l?B():(R(true),x.current&&clearTimeout(x.current));},[l,B]),useEffect(()=>()=>{x.current&&clearTimeout(x.current);},[]);let g=useCallback(e=>{let n=(e%r.length+r.length)%r.length;ie(n),H(0),y(true),q?.(n,r[n]);},[r,q]),D=useCallback(()=>{if(P){let e;do e=Math.floor(Math.random()*r.length);while(e===f&&r.length>1);g(e);}else g(f+1);},[g,f,P,r.length]),I=useCallback(()=>{if(P){let e;do e=Math.floor(Math.random()*r.length);while(e===f&&r.length>1);g(e);}else g(f-1);},[g,f,P,r.length]),ye=useCallback(e=>{let n=e.currentTarget.getBoundingClientRect(),m=Math.max(0,Math.min(1,(e.clientX-n.left)/n.width))*u;d.current&&(d.current.currentTime=m),H(m);},[u]),ke=useCallback(e=>{let n=e.currentTarget.getBoundingClientRect(),a=Math.max(0,Math.min(1,(e.clientX-n.left)/n.width));te(a*u);},[u]),X$1=useCallback(()=>{z.current&&(document.fullscreenElement?document.exitFullscreen():z.current.requestFullscreen());},[]);useEffect(()=>{let e=()=>xe(!!document.fullscreenElement);return document.addEventListener("fullscreenchange",e),()=>document.removeEventListener("fullscreenchange",e)},[]);let T=useCallback(()=>{v?(Y(true),setTimeout(()=>{W(false),Y(false);},500)):W(true);},[v]),_=useCallback(()=>{ve(e=>!e);},[]),we=useCallback(()=>{let e=["title","type","duration"],n=e.indexOf(w);N?Q(false):(Q(true),be(e[(n+1)%e.length]));},[w,N]);useEffect(()=>{let e=n=>{if(!(n.target instanceof HTMLInputElement||n.target instanceof HTMLTextAreaElement))switch(n.key){case " ":case "k":n.preventDefault(),y(a=>!a);break;case "f":n.preventDefault(),X$1();break;case "t":n.preventDefault(),T();break;case "ArrowLeft":n.preventDefault(),d.current&&(d.current.currentTime=Math.max(0,E-5));break;case "ArrowRight":n.preventDefault(),d.current&&(d.current.currentTime=Math.min(u,E+5));break;case "ArrowUp":n.preventDefault(),V(a=>Math.min(1,a+.05));break;case "ArrowDown":n.preventDefault(),V(a=>Math.max(0,a-.05));break;case "Escape":v&&T();break;case "n":n.preventDefault(),D();break;case "p":n.preventDefault(),I();break;case "l":n.preventDefault(),_();break}};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[X$1,T,_,D,I,E,u,v]);let re=u>0?E/u*100:0,Ne=u>0?de/u*100:0,$="text-(--accent)",Ce=jsxs("div",{ref:z,className:i("group flex overflow-hidden",C?"h-full w-full":"aspect-video w-full",!C&&"rounded-xl",!C&&l&&"shadow-2xl",!C&&!l&&"animate-[cp-glow-pulse_4s_ease-in-out_infinite] will-change-[box-shadow]",ce),style:{"--accent":le,background:"var(--cp-bg)"},tabIndex:0,children:[jsxs("div",{className:i("relative flex-1 min-w-0 h-full overflow-hidden",K&&"animate-[cp-track-transition_0.6s_ease-out]"),onMouseMove:B,onMouseLeave:()=>{l&&R(false);},children:[jsx("video",{ref:d,className:"h-full w-full object-contain",poster:c.poster,playsInline:true,preload:"metadata",onClick:()=>y(e=>!e)}),!l&&!K&&jsx("div",{className:"absolute inset-0 flex cursor-pointer items-center justify-center",style:{background:"var(--cp-overlay)"},onClick:()=>y(true),children:jsx("div",{className:"flex h-20 w-20 items-center justify-center rounded-full backdrop-blur-md transition-transform hover:scale-110 active:scale-95",style:{background:"var(--cp-surface-hover)"},children:jsx(Play,{className:"h-10 w-10 translate-x-0.5",fill:"currentColor",style:{color:"var(--cp-text-strong)"}})})}),K&&jsx("div",{className:"absolute left-6 top-6 z-20 animate-[fade-in_0.4s_ease-out]",children:jsxs("div",{className:"rounded-lg px-4 py-2 backdrop-blur-md",style:{background:"var(--cp-panel-bg)"},children:[jsx("div",{className:"text-sm font-semibold",style:{color:"var(--cp-text-strong)"},children:c.title}),c.subtitle&&jsx("div",{className:"text-xs",style:{color:"var(--cp-text-muted)"},children:c.subtitle})]})}),jsx("div",{className:i("absolute inset-x-0 top-0 z-10 bg-linear-to-b from-black/70 to-transparent px-5 pb-8 pt-4 transition-opacity duration-500",Z?"opacity-100":"pointer-events-none opacity-0"),children:jsxs("div",{className:"flex items-center justify-between",children:[jsxs("div",{children:[jsx("h3",{className:"text-sm font-semibold drop-shadow-md",style:{color:"var(--cp-text-strong)"},children:c.title}),c.subtitle&&jsx("p",{className:"text-xs",style:{color:"var(--cp-text-muted)"},children:c.subtitle})]}),c.type&&jsx("span",{className:"rounded-full bg-(--accent)/70 px-2.5 py-0.5 text-[10px] font-semibold uppercase tracking-wider backdrop-blur-sm",style:{color:"var(--cp-text-strong)"},children:c.type})]})}),jsxs("div",{className:i("absolute inset-x-0 bottom-0 z-10 bg-linear-to-t from-black/80 via-black/40 to-transparent px-4 pb-3 pt-10 transition-all duration-500",Z?"translate-y-0 opacity-100":"pointer-events-none translate-y-2 opacity-0"),children:[jsxs("div",{className:"group/seek relative mb-3 h-1 cursor-pointer rounded-full transition-[height] duration-200 hover:h-1.5",style:{background:"var(--cp-seek-track)"},onClick:ye,onMouseMove:ke,onMouseLeave:()=>te(null),children:[jsx("div",{className:"absolute inset-y-0 left-0 rounded-full",style:{width:`${Ne}%`,background:"var(--cp-seek-buffer)"}}),jsx("div",{className:"absolute inset-y-0 left-0 rounded-full bg-(--accent) transition-[width] duration-100",style:{width:`${re}%`}}),O!==null&&jsx("div",{className:"absolute -top-8 -translate-x-1/2 rounded px-2 py-0.5 text-[10px] font-mono",style:{left:`${O/u*100}%`,background:"var(--cp-panel-bg)",color:"var(--cp-text-strong)"},children:j(O)}),jsx("div",{className:"absolute top-1/2 h-3.5 w-3.5 -translate-y-1/2 rounded-full border-2 border-(--accent) bg-white opacity-0 shadow-lg transition-opacity group-hover/seek:opacity-100",style:{left:`calc(${re}% - 7px)`}})]}),jsxs("div",{className:"flex items-center gap-1",children:[jsx("button",{className:"cp-btn",onClick:()=>y(e=>!e),title:l?"Pause (k)":"Play (k)",children:l?jsx(Pause,{className:"h-5 w-5",fill:"currentColor"}):jsx(Play,{className:"h-5 w-5 translate-x-px",fill:"currentColor"})}),jsx("button",{className:"cp-btn",onClick:I,title:"Previous (p)",children:jsx(SkipBack,{className:"h-4 w-4",fill:"currentColor"})}),jsx("button",{className:"cp-btn",onClick:D,title:"Next (n)",children:jsx(SkipForward,{className:"h-4 w-4",fill:"currentColor"})}),jsxs("div",{className:"group/vol ml-1 flex items-center",children:[jsx("button",{className:"cp-btn",onClick:()=>G(e=>!e),title:k?"Unmute":"Mute",children:k||S===0?jsx(VolumeX,{className:"h-4 w-4"}):jsx(Volume2,{className:"h-4 w-4"})}),jsx("div",{className:"flex w-0 items-center overflow-hidden transition-all duration-300 group-hover/vol:w-20",children:jsx("input",{type:"range",min:0,max:1,step:.01,value:k?0:S,onChange:e=>{V(Number(e.target.value)),k&&G(false);},className:"h-1 w-full cursor-pointer appearance-none rounded-full accent-(--accent)",style:{background:"var(--cp-seek-track)"}})})]}),jsxs("span",{className:"ml-2 min-w-0 shrink-0 font-mono text-xs",style:{color:"var(--cp-text-muted)"},children:[j(E)," / ",j(u)]}),jsx("div",{className:"flex-1"}),jsx("button",{className:i("cp-btn",P&&$),onClick:()=>pe(e=>!e),title:"Shuffle",children:jsx(Shuffle,{className:"h-4 w-4"})}),jsx("button",{className:i("cp-btn",A&&$),onClick:()=>fe(e=>!e),title:"Loop",children:jsx(Repeat1,{className:"h-4 w-4"})}),jsx("button",{className:i("cp-btn",J&&$),onClick:_,title:"Playlist",children:jsx(ListVideo,{className:"h-4 w-4"})}),jsx("button",{className:i("cp-btn",v&&$),onClick:T,title:"Cinema mode (t)",children:jsx(Theater,{className:"h-4 w-4"})}),jsx("button",{className:"cp-btn",onClick:X$1,title:"Fullscreen (f)",children:C?jsx(Minimize,{className:"h-4 w-4"}):jsx(Maximize,{className:"h-4 w-4"})})]})]})]}),jsx("div",{className:i("h-full shrink-0 overflow-hidden transition-[width] duration-300 ease-out",J?"w-72":"w-0"),children:jsxs("div",{className:"flex h-full w-72 flex-col backdrop-blur-xl",style:{borderLeft:"1px solid var(--cp-border)",background:"var(--cp-panel-bg)"},children:[jsxs("div",{className:"flex items-center justify-between px-4 py-3",style:{borderBottom:"1px solid var(--cp-border)"},children:[jsx("span",{className:"text-xs font-semibold uppercase tracking-wider",style:{color:"var(--cp-text)"},children:"Playlist"}),jsxs("div",{className:"flex items-center gap-1",children:[jsxs("button",{className:"flex items-center gap-1 rounded px-2 py-1 text-[10px] font-medium transition-colors",style:{color:"var(--cp-text-muted)"},onClick:we,title:`Sort: ${w} ${N?"\u2191":"\u2193"}`,children:[jsx(ArrowUpDown,{className:"h-3 w-3"}),w,N?" \u2191":" \u2193"]}),jsx("button",{className:"cp-btn p-1!",onClick:_,title:"Close",children:jsx(X,{className:"h-3.5 w-3.5"})})]})]}),jsx("div",{className:"flex-1 overflow-y-auto",children:ge.map(({media:e,originalIndex:n})=>{let a=n===f;return jsxs("button",{className:i("flex w-full items-center gap-3 px-4 py-2.5 text-left transition-all duration-200",a?"bg-(--accent)/20 text-(--accent)":"hover:text-(--cp-text-strong)"),style:a?void 0:{color:"var(--cp-text)"},onClick:()=>{g(n);},children:[jsxs("div",{className:"relative h-10 w-16 shrink-0 overflow-hidden rounded",style:{background:"var(--cp-surface)"},children:[e.poster?jsx("img",{src:e.poster,alt:"",className:"h-full w-full object-cover",draggable:false}):jsx("div",{className:"flex h-full w-full items-center justify-center",children:jsx(Play,{className:"h-4 w-4",style:{color:"var(--cp-seek-track)"}})}),a&&l&&jsx("div",{className:"absolute inset-0 flex items-center justify-center",style:{background:"var(--cp-overlay)"},children:jsx("div",{className:"flex items-end gap-px",children:[1,2,3,4].map(m=>jsx("div",{className:"w-0.5 rounded-full bg-(--accent)",style:{height:`${6+m*3}px`,animation:`mp-eq-bar ${.3+m*.12}s ease-in-out infinite alternate`}},m))})})]}),jsxs("div",{className:"min-w-0 flex-1",children:[jsx("div",{className:"truncate text-xs font-medium",children:e.title}),jsxs("div",{className:"flex items-center gap-2",children:[e.type&&jsx("span",{className:"text-[10px] uppercase tracking-wide opacity-50",children:e.type}),e.duration!=null&&jsx("span",{className:"font-mono text-[10px] opacity-40",children:j(e.duration)})]})]}),a&&jsx(ChevronRight,{className:"h-3.5 w-3.5 shrink-0 text-(--accent)"})]},n)})})]})}),jsx("style",{children:`
|
|
1
|
+
import Pe,{useState,useRef,useEffect,useCallback}from'react';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {Play,Pause,SkipBack,SkipForward,VolumeX,Volume2,Shuffle,Repeat1,ListVideo,Theater,Minimize,Maximize,ArrowUpDown,X,ChevronRight}from'lucide-react';import {jsxs,jsx}from'react/jsx-runtime';function i(...r){return twMerge(clsx(r))}function j(r){if(!isFinite(r)||r<0)return "0:00";let p=Math.floor(r/3600),M=Math.floor(r%3600/60),L=Math.floor(r%60);return p>0?`${p}:${M.toString().padStart(2,"0")}:${L.toString().padStart(2,"0")}`:`${M}:${L.toString().padStart(2,"0")}`}var ze={title:(r,p)=>r.title.localeCompare(p.title),type:(r,p)=>(r.type??"").localeCompare(p.type??""),duration:(r,p)=>(r.duration??0)-(p.duration??0)};function Je({playlist:r,initialTrack:p=0,autoPlay:M=false,shuffle:L=false,loop:se=false,onTrackChange:G,onPlayChange:oe,accent:le="#8b5cf6",className:ce}){let[f,ie]=useState(p),[l,y]=useState(false),[E,H]=useState(0),[u,ue]=useState(0),[de,me]=useState(0),[S,V]=useState(.8),[k,J]=useState(false),[P,pe]=useState(L),[A,fe]=useState(se),[Q,ve]=useState(false),[w,be]=useState("title"),[N,W]=useState(true),[v,Y]=useState(false),[he,Z]=useState(false),[C,xe]=useState(false),[K,R]=useState(true),[O,ee]=useState(false),[z,te]=useState(null),d=useRef(null),B=useRef(null),x=useRef(void 0),ne=useRef(false),c=r[f],ge=Pe.useMemo(()=>{let e=r.map((n,a)=>({media:n,originalIndex:a}));return e.sort((n,a)=>{let m=ze[w](n.media,a.media);return N?m:-m}),e},[r,w,N]);useEffect(()=>{let e=d.current;if(!e)return;ee(true),e.src=c.src,c.poster&&(e.poster=c.poster),e.load();let n=()=>{ee(false),l&&e.play().catch(()=>{});};return e.addEventListener("loadeddata",n,{once:true}),()=>e.removeEventListener("loadeddata",n)},[f,c.src]),useEffect(()=>{if(!M||ne.current)return;let e=d.current;if(!e)return;let n=()=>{ne.current=true,y(true),e.play().catch(()=>{});};return e.addEventListener("canplaythrough",n,{once:true}),()=>e.removeEventListener("canplaythrough",n)},[M]),useEffect(()=>{let e=d.current;e&&(l?e.play().catch(()=>{}):e.pause(),oe?.(l));},[l]),useEffect(()=>{let e=d.current;e&&(e.volume=k?0:S);},[S,k]),useEffect(()=>{let e=d.current;if(!e)return;let n=()=>H(e.currentTime),a=()=>ue(e.duration),m=()=>{e.buffered.length>0&&me(e.buffered.end(e.buffered.length-1));},ae=()=>{A?(e.currentTime=0,e.play().catch(()=>{})):D();};return e.addEventListener("timeupdate",n),e.addEventListener("loadedmetadata",a),e.addEventListener("progress",m),e.addEventListener("ended",ae),()=>{e.removeEventListener("timeupdate",n),e.removeEventListener("loadedmetadata",a),e.removeEventListener("progress",m),e.removeEventListener("ended",ae);}},[f,r.length,A]);let I=useCallback(()=>{R(true),x.current&&clearTimeout(x.current),x.current=setTimeout(()=>{l&&R(false);},3e3);},[l]);useEffect(()=>{l?I():(R(true),x.current&&clearTimeout(x.current));},[l,I]),useEffect(()=>()=>{x.current&&clearTimeout(x.current);},[]);let g=useCallback(e=>{let n=(e%r.length+r.length)%r.length;ie(n),H(0),y(true),G?.(n,r[n]);},[r,G]),D=useCallback(()=>{if(P){let e;do e=Math.floor(Math.random()*r.length);while(e===f&&r.length>1);g(e);}else g(f+1);},[g,f,P,r.length]),X$1=useCallback(()=>{if(P){let e;do e=Math.floor(Math.random()*r.length);while(e===f&&r.length>1);g(e);}else g(f-1);},[g,f,P,r.length]),ye=useCallback(e=>{let n=e.currentTarget.getBoundingClientRect(),m=Math.max(0,Math.min(1,(e.clientX-n.left)/n.width))*u;d.current&&(d.current.currentTime=m),H(m);},[u]),ke=useCallback(e=>{let n=e.currentTarget.getBoundingClientRect(),a=Math.max(0,Math.min(1,(e.clientX-n.left)/n.width));te(a*u);},[u]),U=useCallback(()=>{B.current&&(document.fullscreenElement?document.exitFullscreen():B.current.requestFullscreen());},[]);useEffect(()=>{let e=()=>xe(!!document.fullscreenElement);return document.addEventListener("fullscreenchange",e),()=>document.removeEventListener("fullscreenchange",e)},[]);let T=useCallback(()=>{v?(Z(true),setTimeout(()=>{Y(false),Z(false);},500)):Y(true);},[v]),_=useCallback(()=>{ve(e=>!e);},[]),we=useCallback(()=>{let e=["title","type","duration"],n=e.indexOf(w);N?W(false):(W(true),be(e[(n+1)%e.length]));},[w,N]);useEffect(()=>{let e=n=>{if(!(n.target instanceof HTMLInputElement||n.target instanceof HTMLTextAreaElement))switch(n.key){case " ":case "k":n.preventDefault(),y(a=>!a);break;case "f":n.preventDefault(),U();break;case "t":n.preventDefault(),T();break;case "ArrowLeft":n.preventDefault(),d.current&&(d.current.currentTime=Math.max(0,E-5));break;case "ArrowRight":n.preventDefault(),d.current&&(d.current.currentTime=Math.min(u,E+5));break;case "ArrowUp":n.preventDefault(),V(a=>Math.min(1,a+.05));break;case "ArrowDown":n.preventDefault(),V(a=>Math.max(0,a-.05));break;case "Escape":v&&T();break;case "n":n.preventDefault(),D();break;case "p":n.preventDefault(),X$1();break;case "l":n.preventDefault(),_();break}};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[U,T,_,D,X$1,E,u,v]);let re=u>0?E/u*100:0,Ne=u>0?de/u*100:0,$="text-(--accent)",Ce=jsxs("div",{ref:B,className:i("group flex overflow-hidden",C?"h-full w-full":"aspect-video w-full",!C&&"rounded-xl",!C&&l&&"shadow-2xl",!C&&!l&&"animate-[cp-glow-pulse_4s_ease-in-out_infinite] will-change-[box-shadow]",ce),style:{"--accent":le,background:"var(--cp-bg)"},tabIndex:0,children:[jsxs("div",{className:i("relative flex-1 min-w-0 h-full overflow-hidden",O&&"animate-[cp-track-transition_0.6s_ease-out]"),onMouseMove:I,onMouseLeave:()=>{l&&R(false);},children:[jsx("video",{ref:d,className:"h-full w-full object-contain",poster:c.poster,playsInline:true,preload:"metadata",onClick:()=>y(e=>!e)}),!l&&!O&&jsx("div",{className:"absolute inset-0 flex cursor-pointer items-center justify-center",style:{background:"var(--cp-overlay)"},onClick:()=>y(true),children:jsx("div",{className:"flex h-20 w-20 items-center justify-center rounded-full backdrop-blur-md transition-transform hover:scale-110 active:scale-95",style:{background:"var(--cp-surface-hover)"},children:jsx(Play,{className:"h-10 w-10 translate-x-0.5",fill:"currentColor",style:{color:"var(--cp-text-strong)"}})})}),O&&!K&&jsx("div",{className:"absolute left-6 top-6 z-20 animate-[fade-in_0.4s_ease-out]",children:jsxs("div",{className:"rounded-lg px-4 py-2 backdrop-blur-md",style:{background:"var(--cp-panel-bg)"},children:[jsx("div",{className:"text-sm font-semibold",style:{color:"var(--cp-text-strong)"},children:c.title}),c.subtitle&&jsx("div",{className:"text-xs",style:{color:"var(--cp-text-muted)"},children:c.subtitle})]})}),jsx("div",{className:i("absolute inset-x-0 top-0 z-10 bg-linear-to-b from-black/70 to-transparent px-5 pb-8 pt-4 transition-opacity duration-500",K?"opacity-100":"pointer-events-none opacity-0"),children:jsxs("div",{className:"flex items-center justify-between",children:[jsxs("div",{children:[jsx("h3",{className:"text-sm font-semibold drop-shadow-md",style:{color:"var(--cp-text-strong)"},children:c.title}),c.subtitle&&jsx("p",{className:"text-xs",style:{color:"var(--cp-text-muted)"},children:c.subtitle})]}),c.type&&jsx("span",{className:"rounded-full bg-(--accent)/70 px-2.5 py-0.5 text-[10px] font-semibold uppercase tracking-wider backdrop-blur-sm",style:{color:"var(--cp-text-strong)"},children:c.type})]})}),jsxs("div",{className:i("absolute inset-x-0 bottom-0 z-10 bg-linear-to-t from-black/80 via-black/40 to-transparent px-4 pb-3 pt-10 transition-all duration-500",K?"translate-y-0 opacity-100":"pointer-events-none translate-y-2 opacity-0"),children:[jsxs("div",{className:"group/seek relative mb-3 h-1 cursor-pointer rounded-full transition-[height] duration-200 hover:h-1.5",style:{background:"var(--cp-seek-track)"},onClick:ye,onMouseMove:ke,onMouseLeave:()=>te(null),children:[jsx("div",{className:"absolute inset-y-0 left-0 rounded-full",style:{width:`${Ne}%`,background:"var(--cp-seek-buffer)"}}),jsx("div",{className:"absolute inset-y-0 left-0 rounded-full bg-(--accent) transition-[width] duration-100",style:{width:`${re}%`}}),z!==null&&jsx("div",{className:"absolute -top-8 -translate-x-1/2 rounded px-2 py-0.5 text-[10px] font-mono",style:{left:`${z/u*100}%`,background:"var(--cp-panel-bg)",color:"var(--cp-text-strong)"},children:j(z)}),jsx("div",{className:"absolute top-1/2 h-3.5 w-3.5 -translate-y-1/2 rounded-full border-2 border-(--accent) bg-white opacity-0 shadow-lg transition-opacity group-hover/seek:opacity-100",style:{left:`calc(${re}% - 7px)`}})]}),jsxs("div",{className:"flex items-center gap-1",children:[jsx("button",{className:"cp-btn",onClick:()=>y(e=>!e),title:l?"Pause (k)":"Play (k)",children:l?jsx(Pause,{className:"h-5 w-5",fill:"currentColor"}):jsx(Play,{className:"h-5 w-5 translate-x-px",fill:"currentColor"})}),jsx("button",{className:"cp-btn",onClick:X$1,title:"Previous (p)",children:jsx(SkipBack,{className:"h-4 w-4",fill:"currentColor"})}),jsx("button",{className:"cp-btn",onClick:D,title:"Next (n)",children:jsx(SkipForward,{className:"h-4 w-4",fill:"currentColor"})}),jsxs("div",{className:"group/vol ml-1 flex items-center",children:[jsx("button",{className:"cp-btn",onClick:()=>J(e=>!e),title:k?"Unmute":"Mute",children:k||S===0?jsx(VolumeX,{className:"h-4 w-4"}):jsx(Volume2,{className:"h-4 w-4"})}),jsx("div",{className:"flex w-0 items-center overflow-hidden transition-all duration-300 group-hover/vol:w-20",children:jsx("input",{type:"range",min:0,max:1,step:.01,value:k?0:S,onChange:e=>{V(Number(e.target.value)),k&&J(false);},className:"h-1 w-full cursor-pointer appearance-none rounded-full accent-(--accent)",style:{background:"var(--cp-seek-track)"}})})]}),jsxs("span",{className:"ml-2 min-w-0 shrink-0 font-mono text-xs",style:{color:"var(--cp-text-muted)"},children:[j(E)," / ",j(u)]}),jsx("div",{className:"flex-1"}),jsx("button",{className:i("cp-btn",P&&$),onClick:()=>pe(e=>!e),title:"Shuffle",children:jsx(Shuffle,{className:"h-4 w-4"})}),jsx("button",{className:i("cp-btn",A&&$),onClick:()=>fe(e=>!e),title:"Loop",children:jsx(Repeat1,{className:"h-4 w-4"})}),jsx("button",{className:i("cp-btn",Q&&$),onClick:_,title:"Playlist",children:jsx(ListVideo,{className:"h-4 w-4"})}),jsx("button",{className:i("cp-btn",v&&$),onClick:T,title:"Cinema mode (t)",children:jsx(Theater,{className:"h-4 w-4"})}),jsx("button",{className:"cp-btn",onClick:U,title:"Fullscreen (f)",children:C?jsx(Minimize,{className:"h-4 w-4"}):jsx(Maximize,{className:"h-4 w-4"})})]})]})]}),jsx("div",{className:i("h-full shrink-0 overflow-hidden transition-[width] duration-300 ease-out",Q?"w-72":"w-0"),children:jsxs("div",{className:"flex h-full w-72 flex-col backdrop-blur-xl",style:{borderLeft:"1px solid var(--cp-border)",background:"var(--cp-panel-bg)"},children:[jsxs("div",{className:"flex items-center justify-between px-4 py-3",style:{borderBottom:"1px solid var(--cp-border)"},children:[jsx("span",{className:"text-xs font-semibold uppercase tracking-wider",style:{color:"var(--cp-text)"},children:"Playlist"}),jsxs("div",{className:"flex items-center gap-1",children:[jsxs("button",{className:"flex items-center gap-1 rounded px-2 py-1 text-[10px] font-medium transition-colors",style:{color:"var(--cp-text-muted)"},onClick:we,title:`Sort: ${w} ${N?"\u2191":"\u2193"}`,children:[jsx(ArrowUpDown,{className:"h-3 w-3"}),w,N?" \u2191":" \u2193"]}),jsx("button",{className:"cp-btn p-1!",onClick:_,title:"Close",children:jsx(X,{className:"h-3.5 w-3.5"})})]})]}),jsx("div",{className:"flex-1 overflow-y-auto",children:ge.map(({media:e,originalIndex:n})=>{let a=n===f;return jsxs("button",{className:i("flex w-full items-center gap-3 px-4 py-2.5 text-left transition-all duration-200",a?"bg-(--accent)/20 text-(--accent)":"hover:text-(--cp-text-strong)"),style:a?void 0:{color:"var(--cp-text)"},onClick:()=>{g(n);},children:[jsxs("div",{className:"relative h-10 w-16 shrink-0 overflow-hidden rounded",style:{background:"var(--cp-surface)"},children:[e.poster?jsx("img",{src:e.poster,alt:"",className:"h-full w-full object-cover",draggable:false}):jsx("div",{className:"flex h-full w-full items-center justify-center",children:jsx(Play,{className:"h-4 w-4",style:{color:"var(--cp-seek-track)"}})}),a&&l&&jsx("div",{className:"absolute inset-0 flex items-center justify-center",style:{background:"var(--cp-overlay)"},children:jsx("div",{className:"flex items-end gap-px",children:[1,2,3,4].map(m=>jsx("div",{className:"w-0.5 rounded-full bg-(--accent)",style:{height:`${6+m*3}px`,animation:`mp-eq-bar ${.3+m*.12}s ease-in-out infinite alternate`}},m))})})]}),jsxs("div",{className:"min-w-0 flex-1",children:[jsx("div",{className:"truncate text-xs font-medium",children:e.title}),jsxs("div",{className:"flex items-center gap-2",children:[e.type&&jsx("span",{className:"text-[10px] uppercase tracking-wide opacity-50",children:e.type}),e.duration!=null&&jsx("span",{className:"font-mono text-[10px] opacity-40",children:j(e.duration)})]})]}),a&&jsx(ChevronRight,{className:"h-3.5 w-3.5 shrink-0 text-(--accent)"})]},n)})})]})}),jsx("style",{children:`
|
|
2
2
|
.cp-btn {
|
|
3
3
|
display: flex;
|
|
4
4
|
align-items: center;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
'use strict';var je=require('react'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),reactDom=require('react-dom'),lucideReact=require('lucide-react'),classVarianceAuthority=require('class-variance-authority'),jsxRuntime=require('react/jsx-runtime');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var je__default=/*#__PURE__*/_interopDefault(je);function c(...r){return tailwindMerge.twMerge(clsx.clsx(r))}var be=classVarianceAuthority.cva("rounded-lg bg-white p-6 shadow-xl dark:bg-primary-900",{variants:{size:{sm:"w-full max-w-sm",md:"w-full max-w-lg",lg:"w-full max-w-2xl",xl:"w-full max-w-4xl",full:"h-[calc(100vh-4rem)] w-[calc(100vw-4rem)]"}},defaultVariants:{size:"md"}});classVarianceAuthority.cva("absolute z-50 rounded px-2 py-1 text-xs shadow-md animate-fade-in",{variants:{intent:{default:"bg-primary-900 text-white dark:bg-primary-100 dark:text-primary-900",light:"border border-primary-200 bg-white text-primary-700 dark:border-primary-600 dark:bg-primary-800 dark:text-primary-200"}},defaultVariants:{intent:"default"}});var N=[];function pt(r){N.push(r);}function ft(r){let a=N.indexOf(r);a!==-1&&N.splice(a,1);}function he(r){return N.length>0&&N[N.length-1]===r}function gt(r){let a=N.indexOf(r);return a!==-1?a:N.length}var Te=je.createContext(null);function Re({open:r,onOpenChange:a,modal:m=true,closeOnOutsideClick:v=false,children:L}){let d=je.useId();return je.useEffect(()=>{if(r)return pt(d),()=>ft(d)},[r,d]),je.useEffect(()=>{if(!r||!m)return;let z=S=>{S.key==="Escape"&&he(d)&&a(false);};return document.addEventListener("keydown",z),()=>document.removeEventListener("keydown",z)},[r,m,a,d]),je.useEffect(()=>{if(!r||!m)return;let z=document.body.style.overflow;return document.body.style.overflow="hidden",()=>{document.body.style.overflow=z;}},[r,m]),r?jsxRuntime.jsx(Te.Provider,{value:{id:d,onOpenChange:a,modal:m,closeOnOutsideClick:v},children:reactDom.createPortal(L,document.body)}):null}function _e({size:r,position:a="center",className:m,children:v,...L}){let d=je.useContext(Te);if(!d)return null;let S=200+gt(d.id)*10,B=()=>{d.closeOnOutsideClick&&he(d.id)&&d.onOpenChange(false);},M=a==="bottom";return d.modal?jsxRuntime.jsx("div",{className:c("animate-fade-in fixed inset-0 bg-black/50",M?"flex items-end justify-center":"flex items-center justify-center p-4"),style:{zIndex:S},onClick:B,children:jsxRuntime.jsx("div",{className:c(be({size:r}),M?"animate-slide-in-bottom w-full rounded-b-none rounded-t-(--dialog-sheet-radius) max-h-[85vh] overflow-y-auto":"animate-scale-in",m),role:"dialog","aria-modal":"true",onClick:T=>T.stopPropagation(),...L,children:v})}):jsxRuntime.jsx("div",{className:c("fixed inset-0 flex items-center justify-center p-4",d.closeOnOutsideClick?"pointer-events-auto":"pointer-events-none"),style:{zIndex:S},onClick:d.closeOnOutsideClick&&he(d.id)?()=>d.onOpenChange(false):void 0,children:jsxRuntime.jsx("div",{className:c(be({size:r}),"animate-scale-in pointer-events-auto shadow-2xl",m),role:"dialog",onClick:d.closeOnOutsideClick?T=>T.stopPropagation():void 0,...L,children:v})})}function Ie({className:r,...a}){return jsxRuntime.jsx("div",{className:c("mb-4 space-y-1",r),...a})}function Ae({className:r,...a}){return jsxRuntime.jsx("h2",{className:c("text-primary-900 dark:text-primary-100 flex items-center gap-1.5 text-lg font-semibold [&_svg]:h-5 [&_svg]:w-5 [&_svg]:shrink-0",r),...a})}function Oe({className:r,...a}){return jsxRuntime.jsx("p",{className:c("text-primary-500 dark:text-primary-400 text-sm",r),...a})}function He({className:r,...a}){return jsxRuntime.jsx("div",{className:c("mt-6 flex justify-end gap-2",r),...a})}var Pe=classVarianceAuthority.cva("inline-flex cursor-pointer items-center justify-center gap-1.5 rounded font-medium transition-colors disabled:pointer-events-none disabled:opacity-50 [&_svg]:shrink-0",{variants:{intent:{primary:"bg-primary-500 text-white hover:bg-primary-600 active:bg-primary-700",secondary:"bg-secondary-500 text-white hover:bg-secondary-600 active:bg-secondary-700",danger:"bg-danger-500 text-white hover:bg-danger-600 active:bg-danger-700",warning:"bg-warning-500 text-white hover:bg-warning-600 active:bg-warning-700",ghost:"bg-transparent text-primary-700 hover:bg-primary-100 active:bg-primary-200 dark:text-primary-300 dark:hover:bg-primary-800",outline:"border border-primary-300 bg-transparent text-primary-700 hover:bg-primary-50 dark:border-primary-600 dark:text-primary-300 dark:hover:bg-primary-800"},size:{sm:"h-7 px-3 text-xs [&_svg]:h-3.5 [&_svg]:w-3.5",md:"h-9 px-4 text-sm [&_svg]:h-4 [&_svg]:w-4",lg:"h-11 px-6 text-base [&_svg]:h-5 [&_svg]:w-5"}},defaultVariants:{intent:"primary",size:"md"}});classVarianceAuthority.cva("inline-flex items-center gap-1 rounded border font-semibold [&_svg]:shrink-0",{variants:{intent:{success:"border-success-200 bg-success-100 text-success-800 dark:border-success-800 dark:bg-success-900/30 dark:text-success-400",warning:"border-warning-200 bg-warning-100 text-warning-800 dark:border-warning-800 dark:bg-warning-900/30 dark:text-warning-400",error:"border-danger-200 bg-danger-100 text-danger-800 dark:border-danger-800 dark:bg-danger-900/30 dark:text-danger-400",info:"border-primary-200 bg-primary-100 text-primary-800 dark:border-primary-800 dark:bg-primary-900/30 dark:text-primary-400",primary:"border-secondary-200 bg-secondary-100 text-secondary-700 dark:border-secondary-700 dark:bg-secondary-800 dark:text-secondary-300"},size:{sm:"px-1.5 py-0 text-[0.625rem] [&_svg]:h-2.5 [&_svg]:w-2.5",md:"px-2.5 py-0.5 text-xs [&_svg]:h-3 [&_svg]:w-3",lg:"px-3 py-1 text-sm [&_svg]:h-3.5 [&_svg]:w-3.5"}},defaultVariants:{intent:"primary",size:"md"}});classVarianceAuthority.cva("absolute flex items-center justify-center rounded-full font-bold leading-none ring-2 ring-white select-none pointer-events-none z-10 dark:ring-primary-900",{variants:{intent:{danger:"bg-danger-500 text-white",success:"bg-success-500 text-white",warning:"bg-warning-500 text-white",info:"bg-primary-500 text-white",primary:"bg-secondary-500 text-white"},size:{sm:"text-[0.5rem]",md:"text-[0.625rem]",lg:"text-xs"},dot:{true:"",false:""},placement:{"top-right":"top-0 right-0 translate-x-1/2 -translate-y-1/2","top-left":"top-0 left-0 -translate-x-1/2 -translate-y-1/2","bottom-right":"bottom-0 right-0 translate-x-1/2 translate-y-1/2","bottom-left":"bottom-0 left-0 -translate-x-1/2 translate-y-1/2"}},compoundVariants:[{dot:true,size:"sm",class:"h-1.5 w-1.5 min-w-0 ring-1"},{dot:true,size:"md",class:"h-2 w-2 min-w-0"},{dot:true,size:"lg",class:"h-2.5 w-2.5 min-w-0"},{dot:false,size:"sm",class:"h-4 min-w-4 px-1"},{dot:false,size:"md",class:"h-5 min-w-5 px-1.5"},{dot:false,size:"lg",class:"h-6 min-w-6 px-2"}],defaultVariants:{intent:"danger",size:"md",dot:false,placement:"top-right"}});classVarianceAuthority.cva("w-full rounded-md border bg-white text-secondary-900 transition-colors placeholder:text-secondary-400 focus:outline-none focus:ring-2 dark:bg-secondary-900 dark:text-secondary-100 dark:placeholder:text-secondary-600",{variants:{state:{default:"border-secondary-300 focus:border-primary-500 focus:ring-primary-500/20 dark:border-secondary-600",error:"border-danger-400 focus:border-danger-500 focus:ring-danger-500/20"},size:{sm:"h-7 px-2 text-xs",md:"h-9 px-3 py-2 text-sm",lg:"h-11 px-4 py-2.5 text-base"}},defaultVariants:{state:"default",size:"md"}});classVarianceAuthority.cva("inline-flex items-center gap-1 font-medium [&_svg]:shrink-0",{variants:{size:{sm:"text-xs [&_svg]:h-3 [&_svg]:w-3",md:"text-sm [&_svg]:h-3.5 [&_svg]:w-3.5",lg:"text-base [&_svg]:h-4 [&_svg]:w-4"},intent:{default:"text-primary-700 dark:text-primary-300",muted:"text-primary-400 dark:text-primary-500",required:"text-primary-700 dark:text-primary-300 after:ml-0.5 after:text-danger-500 after:content-['*']"}},defaultVariants:{size:"md",intent:"default"}});classVarianceAuthority.cva("relative inline-flex shrink-0 items-center justify-center rounded border-2 transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2",{variants:{intent:{primary:"border-primary-300 dark:border-primary-600 focus-visible:ring-primary-500/40",secondary:"border-secondary-300 dark:border-secondary-600 focus-visible:ring-secondary-500/40",danger:"border-danger-300 dark:border-danger-600 focus-visible:ring-danger-500/40",warning:"border-warning-300 dark:border-warning-600 focus-visible:ring-warning-500/40",success:"border-success-300 dark:border-success-600 focus-visible:ring-success-500/40"},size:{sm:"h-4 w-4 rounded-[3px]",md:"h-5 w-5 rounded",lg:"h-6 w-6 rounded-[5px]"},checked:{on:"",off:"bg-white dark:bg-primary-900"}},compoundVariants:[{intent:"primary",checked:"on",class:"border-primary-500 bg-primary-500 dark:border-primary-500 dark:bg-primary-500"},{intent:"secondary",checked:"on",class:"border-secondary-500 bg-secondary-500 dark:border-secondary-500 dark:bg-secondary-500"},{intent:"danger",checked:"on",class:"border-danger-500 bg-danger-500 dark:border-danger-500 dark:bg-danger-500"},{intent:"warning",checked:"on",class:"border-warning-500 bg-warning-500 dark:border-warning-500 dark:bg-warning-500"},{intent:"success",checked:"on",class:"border-success-500 bg-success-500 dark:border-success-500 dark:bg-success-500"}],defaultVariants:{intent:"primary",size:"md",checked:"off"}});classVarianceAuthority.cva("relative inline-flex shrink-0 items-center justify-center rounded-full border-2 transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2",{variants:{intent:{primary:"border-primary-300 dark:border-primary-600 focus-visible:ring-primary-500/40",secondary:"border-secondary-300 dark:border-secondary-600 focus-visible:ring-secondary-500/40",danger:"border-danger-300 dark:border-danger-600 focus-visible:ring-danger-500/40",warning:"border-warning-300 dark:border-warning-600 focus-visible:ring-warning-500/40",success:"border-success-300 dark:border-success-600 focus-visible:ring-success-500/40"},size:{sm:"h-4 w-4",md:"h-5 w-5",lg:"h-6 w-6"},checked:{on:"",off:"bg-white dark:bg-primary-900"}},compoundVariants:[{intent:"primary",checked:"on",class:"border-primary-500 bg-primary-500 dark:border-primary-500 dark:bg-primary-500"},{intent:"secondary",checked:"on",class:"border-secondary-500 bg-secondary-500 dark:border-secondary-500 dark:bg-secondary-500"},{intent:"danger",checked:"on",class:"border-danger-500 bg-danger-500 dark:border-danger-500 dark:bg-danger-500"},{intent:"warning",checked:"on",class:"border-warning-500 bg-warning-500 dark:border-warning-500 dark:bg-warning-500"},{intent:"success",checked:"on",class:"border-success-500 bg-success-500 dark:border-success-500 dark:bg-success-500"}],defaultVariants:{intent:"primary",size:"md",checked:"off"}});classVarianceAuthority.cva("",{variants:{intent:{primary:"",secondary:"",danger:"",warning:"",success:""},size:{sm:"",md:"",lg:""},checked:{on:"",off:"bg-primary-300 dark:bg-primary-800"}},compoundVariants:[{intent:"primary",checked:"on",class:"bg-primary-500 dark:bg-primary-500"},{intent:"secondary",checked:"on",class:"bg-secondary-500 dark:bg-secondary-500"},{intent:"danger",checked:"on",class:"bg-danger-500 dark:bg-danger-500"},{intent:"warning",checked:"on",class:"bg-warning-500 dark:bg-warning-500"},{intent:"success",checked:"on",class:"bg-success-500 dark:bg-success-500"}],defaultVariants:{intent:"primary",size:"md",checked:"off"}});function ye({intent:r,size:a,className:m,...v}){return jsxRuntime.jsx("button",{className:c(Pe({intent:r,size:a}),m),...v})}function re(r){let a=r.lastIndexOf(".");return a>0?r.slice(a).toLowerCase():""}function Ke(r){return r==null?"\u2014":r<1024?`${r} B`:r<1024*1024?`${(r/1024).toFixed(1)} KB`:r<1024*1024*1024?`${(r/(1024*1024)).toFixed(1)} MB`:`${(r/(1024*1024*1024)).toFixed(2)} GB`}function Ne(r){return r?(typeof r=="string"?new Date(r):r).toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):"\u2014"}var Ft={".png":lucideReact.Image,".jpg":lucideReact.Image,".jpeg":lucideReact.Image,".gif":lucideReact.Image,".svg":lucideReact.Image,".webp":lucideReact.Image,".ico":lucideReact.Image,".bmp":lucideReact.Image,".mp3":lucideReact.Music,".wav":lucideReact.Music,".flac":lucideReact.Music,".ogg":lucideReact.Music,".aac":lucideReact.Music,".m4a":lucideReact.Music,".mp4":lucideReact.Video,".mkv":lucideReact.Video,".avi":lucideReact.Video,".mov":lucideReact.Video,".wmv":lucideReact.Video,".webm":lucideReact.Video,".ts":lucideReact.FileCode,".tsx":lucideReact.FileCode,".js":lucideReact.FileCode,".jsx":lucideReact.FileCode,".json":lucideReact.FileCode,".html":lucideReact.FileCode,".css":lucideReact.FileCode,".scss":lucideReact.FileCode,".py":lucideReact.FileCode,".rs":lucideReact.FileCode,".go":lucideReact.FileCode,".java":lucideReact.FileCode,".c":lucideReact.FileCode,".cpp":lucideReact.FileCode,".h":lucideReact.FileCode,".sh":lucideReact.Terminal,".bat":lucideReact.Terminal,".ps1":lucideReact.Terminal,".md":lucideReact.FileText,".txt":lucideReact.FileText,".pdf":lucideReact.FileText,".doc":lucideReact.FileText,".docx":lucideReact.FileText,".rtf":lucideReact.FileText,".csv":lucideReact.FileSpreadsheet,".xls":lucideReact.FileSpreadsheet,".xlsx":lucideReact.FileSpreadsheet,".db":lucideReact.Database,".sqlite":lucideReact.Database,".sql":lucideReact.Database,".zip":lucideReact.FileArchive,".tar":lucideReact.FileArchive,".gz":lucideReact.FileArchive,".rar":lucideReact.FileArchive,".7z":lucideReact.FileArchive};function Ce(r){if(r.type==="directory")return lucideReact.Folder;let a=r.extension||re(r.name);return Ft[a]||lucideReact.File}function $e(r,a,m){return Math.max(a,Math.min(m,r))}function gr({files:r,title:a="File Explorer",accent:m="#8b5cf6",defaultView:v="list",initialPosition:L,initialSize:d,dockable:z=false,dockSide:S="right",visible:B=true,onFileOpen:M,onSelectionChange:T,onNavigate:Q,onDelete:ne,onClose:qe,onMinimize:De,onPathSubmit:ze,defaultInputMode:Ge="search",actions:Ue,resizable:Qe=true,minSize:X={width:400,height:300},className:We}){let[ae,Je]=je.useState(v),[f,K]=je.useState(new Set),[Me,W]=je.useState(null),[u,se]=je.useState(false),[$,oe]=je.useState(false),[E,Ze]=je.useState(""),[V,et]=je.useState(Ge),[tt,rt]=je.useState(B),[nt,J]=je.useState(false),ie=d??{width:720,height:520},[h,Z]=je.useState(L??{x:Math.max(0,Math.round((window.innerWidth-ie.width)/2)),y:Math.max(0,Math.round((window.innerHeight-ie.height)/2))}),[F,le]=je.useState(ie),[w,at]=je.useState(null),ce=je.useRef(false),de=je.useRef({x:0,y:0}),ue=je.useRef(null),Y=je.useRef(false),ee=je.useRef({x:0,y:0,w:0,h:0,px:0,py:0}),me=B!==void 0?B:tt,pe=je.useMemo(()=>{let e=r.filter(l=>l.type==="directory"),n=r.filter(l=>l.type==="file");return e.sort((l,o)=>l.name.localeCompare(o.name)),n.sort((l,o)=>l.name.localeCompare(o.name)),[...e,...n]},[r]),g=je.useMemo(()=>{if(V!=="search"||!E.trim())return pe;let e=E.toLowerCase();return pe.filter(n=>n.name.toLowerCase().includes(e))},[pe,E,V]),i=Me!=null?g[Me]:null,Ee=je.useCallback((e,n)=>{K(l=>{let o=new Set(l);return n.ctrlKey||n.metaKey?o.has(e)?o.delete(e):o.add(e):(o.clear(),o.add(e)),o}),W(e);},[]);je.useEffect(()=>{if(!T)return;let e=Array.from(f).map(n=>g[n]).filter(Boolean);T(e);},[f]);let Ve=je.useCallback(e=>{let n=g[e];n&&(n.type==="directory"?Q?.(n.path):M?.(n));},[g,M,Q]),st=je.useCallback(e=>{u||e.target.closest("button")||(ce.current=true,de.current={x:e.clientX-h.x,y:e.clientY-h.y},e.preventDefault());},[h,u]);je.useEffect(()=>{let e=l=>{if(!ce.current)return;let o=window.innerWidth-100,b=window.innerHeight-40;Z({x:$e(l.clientX-de.current.x,0,o),y:$e(l.clientY-de.current.y,0,b)});},n=()=>{ce.current=false,Y.current=false,document.body.style.cursor="",document.body.style.userSelect="";};return window.addEventListener("mousemove",e),window.addEventListener("mouseup",n),()=>{window.removeEventListener("mousemove",e),window.removeEventListener("mouseup",n);}},[]);let k=je.useCallback((e,n)=>{u||(n.preventDefault(),n.stopPropagation(),Y.current=e,ee.current={x:n.clientX,y:n.clientY,w:F.width,h:F.height,px:h.x,py:h.y},document.body.style.cursor=e==="e"||e==="w"?"ew-resize":e==="n"||e==="s"?"ns-resize":e==="nw"||e==="se"?"nwse-resize":"nesw-resize",document.body.style.userSelect="none");},[u,F,h]);je.useEffect(()=>{let e=l=>{if(!Y.current)return;let o=Y.current,b=l.clientX-ee.current.x,R=l.clientY-ee.current.y,{w:_,h:I,px:fe,py:ge}=ee.current;if(o.includes("e")&&(_=Math.max(X.width,_+b)),o.includes("w")){let q=Math.max(X.width,_-b);fe=fe+(_-q),_=q;}if(o.includes("s")&&(I=Math.max(X.height,I+R)),o.includes("n")){let q=Math.max(X.height,I-R);ge=ge+(I-q),I=q;}le({width:_,height:I}),Z({x:fe,y:ge});},n=()=>{Y.current=false,document.body.style.cursor="",document.body.style.userSelect="";};return window.addEventListener("mousemove",e),window.addEventListener("mouseup",n),()=>{window.removeEventListener("mousemove",e),window.removeEventListener("mouseup",n);}},[X]);let Fe=je.useCallback(()=>{u?(w&&(Z(w.pos),le(w.size)),se(false)):(at({pos:h,size:F}),se(true));},[u,h,F,w]),ot=je.useCallback(()=>{$?oe(false):(u&&(se(false),w&&(Z(w.pos),le(w.size))),oe(true),De?.());},[$,u,w,De]);je.useEffect(()=>{if(!me||$)return;let e=n=>{if(!(!ue.current?.contains(document.activeElement)&&document.activeElement!==ue.current)){if(n.key==="Escape"&&(W(null),K(new Set)),n.ctrlKey&&n.key==="a"){n.preventDefault();let l=new Set(g.map((o,b)=>b));K(l);}n.key==="Delete"&&f.size>0&&ne&&(n.preventDefault(),J(true));}};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[me,$,g,f,ne]);let Le={"--fe-accent":m};return $?jsxRuntime.jsx("div",{className:c("fixed z-100 cursor-pointer transition-all duration-300",S==="right"?"right-0 top-1/2 -translate-y-1/2":"left-0 top-1/2 -translate-y-1/2"),style:Le,onClick:()=>oe(false),title:`Restore ${a}`,children:jsxRuntime.jsxs("div",{className:"fe-dock flex items-center gap-1.5 rounded-l-lg px-2 py-3 backdrop-blur-md",style:{writingMode:"vertical-rl",textOrientation:"mixed"},children:[jsxRuntime.jsx(lucideReact.HardDrive,{className:"h-3.5 w-3.5 text-(--fe-accent)"}),jsxRuntime.jsx("span",{className:"text-[10px] font-bold uppercase tracking-widest text-(--fe-text)",children:a})]})}):me?jsxRuntime.jsxs("div",{ref:ue,className:c("fe-window fixed z-100 flex flex-col overflow-hidden","rounded-xl border border-(--fe-border)","animate-[fe-window-in_0.35s_cubic-bezier(0.16,1,0.3,1)_both]",u&&"rounded-none",We),style:{...Le,left:u?0:h.x,top:u?0:h.y,width:u?"100vw":F.width,height:u?"100vh":F.height,transition:u?"left 0.3s, top 0.3s, width 0.3s, height 0.3s":void 0},tabIndex:0,children:[jsxRuntime.jsxs("div",{className:"fe-titlebar group/titlebar flex h-10 shrink-0 cursor-grab items-center justify-between px-3 select-none active:cursor-grabbing",onMouseDown:st,onDoubleClick:Fe,children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx("div",{className:"flex h-5 w-5 items-center justify-center rounded",style:{background:"color-mix(in srgb, var(--fe-accent) 25%, transparent)"},children:jsxRuntime.jsx(lucideReact.HardDrive,{className:"h-3 w-3 text-(--fe-accent)"})}),jsxRuntime.jsx("span",{className:"text-xs font-bold uppercase tracking-widest text-(--fe-text)",children:a}),jsxRuntime.jsx("div",{className:"ml-2 hidden h-px w-20 md:block",style:{background:"linear-gradient(90deg, var(--fe-accent), transparent)",opacity:.3}})]}),jsxRuntime.jsxs("div",{className:"flex items-center gap-0.5",children:[jsxRuntime.jsx("button",{className:"fe-btn mr-1",onClick:()=>Je(e=>e==="list"?"grid":"list"),title:ae==="list"?"Grid view":"List view",children:ae==="list"?jsxRuntime.jsx(lucideReact.LayoutGrid,{className:"h-3.5 w-3.5"}):jsxRuntime.jsx(lucideReact.LayoutList,{className:"h-3.5 w-3.5"})}),z&&jsxRuntime.jsx("button",{className:"fe-btn",onClick:ot,title:"Dock to edge",children:jsxRuntime.jsx(lucideReact.Minus,{className:"h-3.5 w-3.5"})}),jsxRuntime.jsx("button",{className:"fe-btn",onClick:Fe,title:u?"Restore":"Maximize",children:u?jsxRuntime.jsx(lucideReact.Minimize2,{className:"h-3.5 w-3.5"}):jsxRuntime.jsx(lucideReact.Maximize2,{className:"h-3.5 w-3.5"})}),jsxRuntime.jsx("button",{className:"fe-btn hover:bg-red-500/40! hover:text-red-300!",onClick:()=>{qe?.(),rt(false);},title:"Close",children:jsxRuntime.jsx(lucideReact.X,{className:"h-3.5 w-3.5"})})]})]}),jsxRuntime.jsxs("div",{className:"fe-toolbar flex h-9 shrink-0 items-center gap-2 px-3",children:[jsxRuntime.jsx("button",{className:"fe-btn p-1",onClick:()=>Q?.(".."),title:"Go up",children:jsxRuntime.jsx(lucideReact.FolderUp,{className:"h-3.5 w-3.5"})}),jsxRuntime.jsx("button",{className:"fe-btn shrink-0 px-1.5 py-0.5 text-[9px] font-bold uppercase tracking-wider",style:V==="navigate"?{color:"var(--fe-accent)",background:"color-mix(in srgb, var(--fe-accent) 15%, transparent)"}:void 0,onClick:()=>et(e=>e==="search"?"navigate":"search"),title:V==="search"?"Switch to path navigation":"Switch to file search",children:V==="search"?jsxRuntime.jsx(lucideReact.Search,{className:"h-3 w-3"}):jsxRuntime.jsx(lucideReact.CornerRightDown,{className:"h-3 w-3"})}),jsxRuntime.jsx("div",{className:"relative flex-1",children:jsxRuntime.jsx("input",{type:"text",value:E,onChange:e=>Ze(e.target.value),onKeyDown:e=>{e.key==="Enter"&&E.trim()&&V==="navigate"&&(ze?ze(E.trim()):Q?.(E.trim()));},placeholder:V==="search"?"Search files\u2026":"Enter path and press Enter\u2026",className:"h-6 w-full rounded border border-(--fe-input-border) bg-(--fe-input-bg) px-2 text-[11px] text-(--fe-text-strong) placeholder:text-(--fe-text-muted) outline-none transition-colors focus:border-(--fe-accent)/40 focus:bg-(--fe-input-bg)"})}),jsxRuntime.jsxs("span",{className:"shrink-0 font-mono text-[10px] text-(--fe-text-muted)",children:[g.length," item",g.length!==1?"s":"",f.size>0&&` \xB7 ${f.size} selected`]})]}),jsxRuntime.jsxs("div",{className:"flex flex-1 min-h-0",children:[jsxRuntime.jsx("div",{className:"flex-1 overflow-y-auto overflow-x-hidden p-1.5",onClick:e=>{e.target===e.currentTarget&&(K(new Set),W(null));},children:g.length===0?jsxRuntime.jsxs("div",{className:"flex h-full flex-col items-center justify-center text-(--fe-text-muted)",children:[jsxRuntime.jsx(lucideReact.Folder,{className:"mb-2 h-10 w-10"}),jsxRuntime.jsx("span",{className:"text-xs",children:"No files found"})]}):ae==="list"?jsxRuntime.jsx("div",{className:"space-y-px",children:g.map((e,n)=>{let l=Ce(e),o=f.has(n),b=e.extension||re(e.name);return jsxRuntime.jsxs("div",{className:c("fe-item group/item flex items-center gap-2.5 rounded-lg px-2.5 py-1.5 text-(--fe-text) transition-all duration-150 cursor-pointer",o?"bg-(--fe-accent)/15 text-(--fe-text-strong)":"hover:bg-(--fe-surface-hover) hover:text-(--fe-text-strong)"),style:o?{boxShadow:"inset 2px 0 0 var(--fe-accent)"}:void 0,onClick:R=>Ee(n,R),onDoubleClick:()=>Ve(n),children:[jsxRuntime.jsx(l,{className:c("h-4 w-4 shrink-0",e.type==="directory"?"text-(--fe-accent)":"text-(--fe-text-muted)")}),jsxRuntime.jsx("span",{className:"flex-1 truncate text-xs font-medium",children:e.name}),b&&e.type==="file"&&jsxRuntime.jsx("span",{className:"shrink-0 rounded bg-(--fe-badge-bg) px-1.5 py-0.5 font-mono text-[9px] uppercase text-(--fe-text-muted)",children:b}),e.size!=null&&jsxRuntime.jsx("span",{className:"shrink-0 font-mono text-[10px] text-(--fe-text-muted)",children:Ke(e.size)}),e.modifiedAt&&jsxRuntime.jsx("span",{className:"hidden shrink-0 font-mono text-[10px] text-(--fe-text-muted) lg:inline",children:Ne(e.modifiedAt)})]},e.path+n)})}):jsxRuntime.jsx("div",{className:"grid grid-cols-[repeat(auto-fill,minmax(90px,1fr))] gap-1.5 p-1",children:g.map((e,n)=>{let l=Ce(e),o=f.has(n),b=e.extension||re(e.name);return jsxRuntime.jsxs("div",{className:c("fe-item group/item flex cursor-pointer flex-col items-center gap-1 rounded-lg px-2 py-2.5 text-center transition-all duration-150",o?"bg-(--fe-accent)/15 text-(--fe-text-strong) ring-1 ring-(--fe-accent)/30":"text-(--fe-text) hover:bg-(--fe-surface-hover) hover:text-(--fe-text-strong)"),onClick:R=>Ee(n,R),onDoubleClick:()=>Ve(n),children:[jsxRuntime.jsx(l,{className:c("h-7 w-7",e.type==="directory"?"text-(--fe-accent)":"text-(--fe-text-muted)")}),jsxRuntime.jsx("span",{className:"w-full truncate text-[10px] font-medium leading-tight",children:e.name}),b&&e.type==="file"&&jsxRuntime.jsx("span",{className:"font-mono text-[8px] uppercase text-(--fe-text-muted)",children:b})]},e.path+n)})})}),jsxRuntime.jsx("div",{className:c("shrink-0 overflow-hidden transition-[width] duration-300 ease-out",i?"w-56":"w-0"),children:i&&jsxRuntime.jsxs("div",{className:"fe-panel flex h-full w-56 flex-col border-l border-(--fe-border) p-4",children:[jsxRuntime.jsxs("div",{className:"mb-3 flex flex-col items-center",children:[je__default.default.createElement(Ce(i),{className:c("h-10 w-10 mb-2",i.type==="directory"?"text-(--fe-accent)":"text-(--fe-text-muted)")}),jsxRuntime.jsx("span",{className:"w-full text-center text-xs font-semibold text-(--fe-text-strong) break-all leading-tight",children:i.name})]}),jsxRuntime.jsxs("div",{className:"space-y-2.5 text-[10px]",children:[jsxRuntime.jsx(j,{label:"Type",value:i.type==="directory"?"Directory":i.mimeType||i.extension||re(i.name)||"File"}),i.size!=null&&jsxRuntime.jsx(j,{label:"Size",value:Ke(i.size)}),jsxRuntime.jsx(j,{label:"Path",value:i.path,mono:true}),i.extension&&jsxRuntime.jsx(j,{label:"Extension",value:i.extension}),i.modifiedAt&&jsxRuntime.jsx(j,{label:"Modified",value:Ne(i.modifiedAt)}),i.createdAt&&jsxRuntime.jsx(j,{label:"Created",value:Ne(i.createdAt)})]}),jsxRuntime.jsxs("div",{className:"mt-auto flex flex-col gap-1.5",children:[i.type==="file"&&M&&jsxRuntime.jsxs("button",{className:"flex items-center justify-center gap-1.5 rounded-lg py-1.5 text-[10px] font-semibold uppercase tracking-wider text-(--fe-text-strong) transition-colors",style:{background:"color-mix(in srgb, var(--fe-accent) 20%, transparent)",border:"1px solid color-mix(in srgb, var(--fe-accent) 30%, transparent)"},onClick:()=>M(i),children:[jsxRuntime.jsx(lucideReact.ArrowUp,{className:"h-3 w-3 rotate-45"}),"Open"]}),Ue?.map(e=>jsxRuntime.jsxs("button",{className:"fe-action flex items-center justify-center gap-1.5 rounded-lg py-1.5 text-[10px] font-semibold uppercase tracking-wider text-(--fe-text) transition-colors hover:text-(--fe-text-strong)",onClick:()=>e.onClick(i),children:[e.icon&&je__default.default.createElement(e.icon,{className:"h-3 w-3"}),e.label]},e.key))]})]})})]}),jsxRuntime.jsxs("div",{className:"fe-statusbar flex h-6 shrink-0 items-center justify-between px-3 text-[9px] font-mono text-(--fe-text-muted)",children:[jsxRuntime.jsxs("span",{children:[g.length," items"]}),jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[f.size>0&&jsxRuntime.jsxs("span",{className:"text-(--fe-accent)/70",children:[f.size," selected"]}),jsxRuntime.jsx("span",{className:"opacity-50",children:"Ctrl+Click multi-select \xB7 Esc clear"})]})]}),Qe&&!u&&jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("div",{className:"absolute top-0 left-2 right-2 h-1.5 cursor-ns-resize",onMouseDown:e=>k("n",e)}),jsxRuntime.jsx("div",{className:"absolute bottom-0 left-2 right-2 h-1.5 cursor-ns-resize",onMouseDown:e=>k("s",e)}),jsxRuntime.jsx("div",{className:"absolute top-2 left-0 bottom-2 w-1.5 cursor-ew-resize",onMouseDown:e=>k("w",e)}),jsxRuntime.jsx("div",{className:"absolute top-2 right-0 bottom-2 w-1.5 cursor-ew-resize",onMouseDown:e=>k("e",e)}),jsxRuntime.jsx("div",{className:"absolute top-0 left-0 h-3 w-3 cursor-nwse-resize",onMouseDown:e=>k("nw",e)}),jsxRuntime.jsx("div",{className:"absolute top-0 right-0 h-3 w-3 cursor-nesw-resize",onMouseDown:e=>k("ne",e)}),jsxRuntime.jsx("div",{className:"absolute bottom-0 left-0 h-3 w-3 cursor-nesw-resize",onMouseDown:e=>k("sw",e)}),jsxRuntime.jsx("div",{className:"absolute bottom-0 right-0 h-3 w-3 cursor-nwse-resize",onMouseDown:e=>k("se",e)})]}),jsxRuntime.jsx("style",{children:`
|
|
1
|
+
'use strict';var Qe=require('react'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),reactDom=require('react-dom'),lucideReact=require('lucide-react'),classVarianceAuthority=require('class-variance-authority'),jsxRuntime=require('react/jsx-runtime');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var Qe__default=/*#__PURE__*/_interopDefault(Qe);function u(...t){return tailwindMerge.twMerge(clsx.clsx(t))}var ke=classVarianceAuthority.cva("rounded-lg bg-white p-6 shadow-xl dark:bg-primary-900",{variants:{size:{sm:"w-full max-w-sm",md:"w-full max-w-lg",lg:"w-full max-w-2xl",xl:"w-full max-w-4xl",full:"h-[calc(100vh-4rem)] w-[calc(100vw-4rem)]"}},defaultVariants:{size:"md"}});classVarianceAuthority.cva("absolute z-50 rounded px-2 py-1 text-xs shadow-md animate-fade-in",{variants:{intent:{default:"bg-primary-900 text-white dark:bg-primary-100 dark:text-primary-900",light:"border border-primary-200 bg-white text-primary-700 dark:border-primary-600 dark:bg-primary-800 dark:text-primary-200"}},defaultVariants:{intent:"default"}});var C=[];function St(t){C.push(t);}function Lt(t){let o=C.indexOf(t);o!==-1&&C.splice(o,1);}function ze(t){return C.length>0&&C[C.length-1]===t}function Vt(t){let o=C.indexOf(t);return o!==-1?o:C.length}var Xe=Qe.createContext(null);function Ye({open:t,onOpenChange:o,modal:p=true,closeOnOutsideClick:y=false,children:v}){let c=Qe.useId();return Qe.useEffect(()=>{if(t)return St(c),()=>Lt(c)},[t,c]),Qe.useEffect(()=>{if(!t||!p)return;let L=A=>{A.key==="Escape"&&ze(c)&&o(false);};return document.addEventListener("keydown",L),()=>document.removeEventListener("keydown",L)},[t,p,o,c]),Qe.useEffect(()=>{if(!t||!p)return;let L=document.body.style.overflow;return document.body.style.overflow="hidden",()=>{document.body.style.overflow=L;}},[t,p]),t?jsxRuntime.jsx(Xe.Provider,{value:{id:c,onOpenChange:o,modal:p,closeOnOutsideClick:y},children:reactDom.createPortal(v,document.body)}):null}function Ke({size:t,position:o="center",className:p,children:y,...v}){let c=Qe.useContext(Xe);if(!c)return null;let A=200+Vt(c.id)*10,J=()=>{c.closeOnOutsideClick&&ze(c.id)&&c.onOpenChange(false);},V=o==="bottom";return c.modal?jsxRuntime.jsx("div",{className:u("animate-fade-in fixed inset-0 bg-black/50",V?"flex items-end justify-center":"flex items-center justify-center p-4"),style:{zIndex:A},onClick:J,children:jsxRuntime.jsx("div",{className:u(ke({size:t}),V?"animate-slide-in-bottom w-full rounded-b-none rounded-t-(--dialog-sheet-radius) max-h-[85vh] overflow-y-auto":"animate-scale-in",p),role:"dialog","aria-modal":"true",onClick:O=>O.stopPropagation(),...v,children:y})}):jsxRuntime.jsx("div",{className:u("fixed inset-0 flex items-center justify-center p-4",c.closeOnOutsideClick?"pointer-events-auto":"pointer-events-none"),style:{zIndex:A},onClick:c.closeOnOutsideClick&&ze(c.id)?()=>c.onOpenChange(false):void 0,children:jsxRuntime.jsx("div",{className:u(ke({size:t}),"animate-scale-in pointer-events-auto shadow-2xl",p),role:"dialog",onClick:c.closeOnOutsideClick?O=>O.stopPropagation():void 0,...v,children:y})})}function $e({className:t,...o}){return jsxRuntime.jsx("div",{className:u("mb-4 space-y-1",t),...o})}function We({className:t,...o}){return jsxRuntime.jsx("h2",{className:u("text-primary-900 dark:text-primary-100 flex items-center gap-1.5 text-lg font-semibold [&_svg]:h-5 [&_svg]:w-5 [&_svg]:shrink-0",t),...o})}function qe({className:t,...o}){return jsxRuntime.jsx("p",{className:u("text-primary-500 dark:text-primary-400 text-sm",t),...o})}function Ge({className:t,...o}){return jsxRuntime.jsx("div",{className:u("mt-6 flex justify-end gap-2",t),...o})}var Ue=classVarianceAuthority.cva("inline-flex cursor-pointer items-center justify-center gap-1.5 rounded font-medium transition-colors disabled:pointer-events-none disabled:opacity-50 [&_svg]:shrink-0",{variants:{intent:{primary:"bg-primary-500 text-white hover:bg-primary-600 active:bg-primary-700",secondary:"bg-secondary-500 text-white hover:bg-secondary-600 active:bg-secondary-700",danger:"bg-danger-500 text-white hover:bg-danger-600 active:bg-danger-700",warning:"bg-warning-500 text-white hover:bg-warning-600 active:bg-warning-700",ghost:"bg-transparent text-primary-700 hover:bg-primary-100 active:bg-primary-200 dark:text-primary-300 dark:hover:bg-primary-800",outline:"border border-primary-300 bg-transparent text-primary-700 hover:bg-primary-50 dark:border-primary-600 dark:text-primary-300 dark:hover:bg-primary-800"},size:{sm:"h-7 px-3 text-xs [&_svg]:h-3.5 [&_svg]:w-3.5",md:"h-9 px-4 text-sm [&_svg]:h-4 [&_svg]:w-4",lg:"h-11 px-6 text-base [&_svg]:h-5 [&_svg]:w-5"}},defaultVariants:{intent:"primary",size:"md"}});classVarianceAuthority.cva("inline-flex items-center gap-1 rounded border font-semibold [&_svg]:shrink-0",{variants:{intent:{success:"border-success-200 bg-success-100 text-success-800 dark:border-success-800 dark:bg-success-900/30 dark:text-success-400",warning:"border-warning-200 bg-warning-100 text-warning-800 dark:border-warning-800 dark:bg-warning-900/30 dark:text-warning-400",error:"border-danger-200 bg-danger-100 text-danger-800 dark:border-danger-800 dark:bg-danger-900/30 dark:text-danger-400",info:"border-primary-200 bg-primary-100 text-primary-800 dark:border-primary-800 dark:bg-primary-900/30 dark:text-primary-400",primary:"border-secondary-200 bg-secondary-100 text-secondary-700 dark:border-secondary-700 dark:bg-secondary-800 dark:text-secondary-300"},size:{sm:"px-1.5 py-0 text-[0.625rem] [&_svg]:h-2.5 [&_svg]:w-2.5",md:"px-2.5 py-0.5 text-xs [&_svg]:h-3 [&_svg]:w-3",lg:"px-3 py-1 text-sm [&_svg]:h-3.5 [&_svg]:w-3.5"}},defaultVariants:{intent:"primary",size:"md"}});classVarianceAuthority.cva("absolute flex items-center justify-center rounded-full font-bold leading-none ring-2 ring-white select-none pointer-events-none z-10 dark:ring-primary-900",{variants:{intent:{danger:"bg-danger-500 text-white",success:"bg-success-500 text-white",warning:"bg-warning-500 text-white",info:"bg-primary-500 text-white",primary:"bg-secondary-500 text-white"},size:{sm:"text-[0.5rem]",md:"text-[0.625rem]",lg:"text-xs"},dot:{true:"",false:""},placement:{"top-right":"top-0 right-0 translate-x-1/2 -translate-y-1/2","top-left":"top-0 left-0 -translate-x-1/2 -translate-y-1/2","bottom-right":"bottom-0 right-0 translate-x-1/2 translate-y-1/2","bottom-left":"bottom-0 left-0 -translate-x-1/2 translate-y-1/2"}},compoundVariants:[{dot:true,size:"sm",class:"h-1.5 w-1.5 min-w-0 ring-1"},{dot:true,size:"md",class:"h-2 w-2 min-w-0"},{dot:true,size:"lg",class:"h-2.5 w-2.5 min-w-0"},{dot:false,size:"sm",class:"h-4 min-w-4 px-1"},{dot:false,size:"md",class:"h-5 min-w-5 px-1.5"},{dot:false,size:"lg",class:"h-6 min-w-6 px-2"}],defaultVariants:{intent:"danger",size:"md",dot:false,placement:"top-right"}});classVarianceAuthority.cva("w-full rounded-md border bg-white text-secondary-900 transition-colors placeholder:text-secondary-400 focus:outline-none focus:ring-2 dark:bg-secondary-900 dark:text-secondary-100 dark:placeholder:text-secondary-600",{variants:{state:{default:"border-secondary-300 focus:border-primary-500 focus:ring-primary-500/20 dark:border-secondary-600",error:"border-danger-400 focus:border-danger-500 focus:ring-danger-500/20"},size:{sm:"h-7 px-2 text-xs",md:"h-9 px-3 py-2 text-sm",lg:"h-11 px-4 py-2.5 text-base"}},defaultVariants:{state:"default",size:"md"}});classVarianceAuthority.cva("inline-flex items-center gap-1 font-medium [&_svg]:shrink-0",{variants:{size:{sm:"text-xs [&_svg]:h-3 [&_svg]:w-3",md:"text-sm [&_svg]:h-3.5 [&_svg]:w-3.5",lg:"text-base [&_svg]:h-4 [&_svg]:w-4"},intent:{default:"text-primary-700 dark:text-primary-300",muted:"text-primary-400 dark:text-primary-500",required:"text-primary-700 dark:text-primary-300 after:ml-0.5 after:text-danger-500 after:content-['*']"}},defaultVariants:{size:"md",intent:"default"}});classVarianceAuthority.cva("relative inline-flex shrink-0 items-center justify-center rounded border-2 transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2",{variants:{intent:{primary:"border-primary-300 dark:border-primary-600 focus-visible:ring-primary-500/40",secondary:"border-secondary-300 dark:border-secondary-600 focus-visible:ring-secondary-500/40",danger:"border-danger-300 dark:border-danger-600 focus-visible:ring-danger-500/40",warning:"border-warning-300 dark:border-warning-600 focus-visible:ring-warning-500/40",success:"border-success-300 dark:border-success-600 focus-visible:ring-success-500/40"},size:{sm:"h-4 w-4 rounded-[3px]",md:"h-5 w-5 rounded",lg:"h-6 w-6 rounded-[5px]"},checked:{on:"",off:"bg-white dark:bg-primary-900"}},compoundVariants:[{intent:"primary",checked:"on",class:"border-primary-500 bg-primary-500 dark:border-primary-500 dark:bg-primary-500"},{intent:"secondary",checked:"on",class:"border-secondary-500 bg-secondary-500 dark:border-secondary-500 dark:bg-secondary-500"},{intent:"danger",checked:"on",class:"border-danger-500 bg-danger-500 dark:border-danger-500 dark:bg-danger-500"},{intent:"warning",checked:"on",class:"border-warning-500 bg-warning-500 dark:border-warning-500 dark:bg-warning-500"},{intent:"success",checked:"on",class:"border-success-500 bg-success-500 dark:border-success-500 dark:bg-success-500"}],defaultVariants:{intent:"primary",size:"md",checked:"off"}});classVarianceAuthority.cva("relative inline-flex shrink-0 items-center justify-center rounded-full border-2 transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2",{variants:{intent:{primary:"border-primary-300 dark:border-primary-600 focus-visible:ring-primary-500/40",secondary:"border-secondary-300 dark:border-secondary-600 focus-visible:ring-secondary-500/40",danger:"border-danger-300 dark:border-danger-600 focus-visible:ring-danger-500/40",warning:"border-warning-300 dark:border-warning-600 focus-visible:ring-warning-500/40",success:"border-success-300 dark:border-success-600 focus-visible:ring-success-500/40"},size:{sm:"h-4 w-4",md:"h-5 w-5",lg:"h-6 w-6"},checked:{on:"",off:"bg-white dark:bg-primary-900"}},compoundVariants:[{intent:"primary",checked:"on",class:"border-primary-500 bg-primary-500 dark:border-primary-500 dark:bg-primary-500"},{intent:"secondary",checked:"on",class:"border-secondary-500 bg-secondary-500 dark:border-secondary-500 dark:bg-secondary-500"},{intent:"danger",checked:"on",class:"border-danger-500 bg-danger-500 dark:border-danger-500 dark:bg-danger-500"},{intent:"warning",checked:"on",class:"border-warning-500 bg-warning-500 dark:border-warning-500 dark:bg-warning-500"},{intent:"success",checked:"on",class:"border-success-500 bg-success-500 dark:border-success-500 dark:bg-success-500"}],defaultVariants:{intent:"primary",size:"md",checked:"off"}});classVarianceAuthority.cva("",{variants:{intent:{primary:"",secondary:"",danger:"",warning:"",success:""},size:{sm:"",md:"",lg:""},checked:{on:"",off:"bg-primary-300 dark:bg-primary-800"}},compoundVariants:[{intent:"primary",checked:"on",class:"bg-primary-500 dark:bg-primary-500"},{intent:"secondary",checked:"on",class:"bg-secondary-500 dark:bg-secondary-500"},{intent:"danger",checked:"on",class:"bg-danger-500 dark:bg-danger-500"},{intent:"warning",checked:"on",class:"bg-warning-500 dark:bg-warning-500"},{intent:"success",checked:"on",class:"bg-success-500 dark:bg-success-500"}],defaultVariants:{intent:"primary",size:"md",checked:"off"}});function Me({intent:t,size:o,className:p,...y}){return jsxRuntime.jsx("button",{className:u(Ue({intent:t,size:o}),p),...y})}function de(t){let o=t.lastIndexOf(".");return o>0?t.slice(o).toLowerCase():""}function tt(t){return t==null?"\u2014":t<1024?`${t} B`:t<1024*1024?`${(t/1024).toFixed(1)} KB`:t<1024*1024*1024?`${(t/(1024*1024)).toFixed(1)} MB`:`${(t/(1024*1024*1024)).toFixed(2)} GB`}function Te(t){return t?(typeof t=="string"?new Date(t):t).toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):"\u2014"}var $t={".png":lucideReact.Image,".jpg":lucideReact.Image,".jpeg":lucideReact.Image,".gif":lucideReact.Image,".svg":lucideReact.Image,".webp":lucideReact.Image,".ico":lucideReact.Image,".bmp":lucideReact.Image,".mp3":lucideReact.Music,".wav":lucideReact.Music,".flac":lucideReact.Music,".ogg":lucideReact.Music,".aac":lucideReact.Music,".m4a":lucideReact.Music,".mp4":lucideReact.Video,".mkv":lucideReact.Video,".avi":lucideReact.Video,".mov":lucideReact.Video,".wmv":lucideReact.Video,".webm":lucideReact.Video,".ts":lucideReact.FileCode,".tsx":lucideReact.FileCode,".js":lucideReact.FileCode,".jsx":lucideReact.FileCode,".json":lucideReact.FileCode,".html":lucideReact.FileCode,".css":lucideReact.FileCode,".scss":lucideReact.FileCode,".py":lucideReact.FileCode,".rs":lucideReact.FileCode,".go":lucideReact.FileCode,".java":lucideReact.FileCode,".c":lucideReact.FileCode,".cpp":lucideReact.FileCode,".h":lucideReact.FileCode,".sh":lucideReact.Terminal,".bat":lucideReact.Terminal,".ps1":lucideReact.Terminal,".md":lucideReact.FileText,".txt":lucideReact.FileText,".pdf":lucideReact.FileText,".doc":lucideReact.FileText,".docx":lucideReact.FileText,".rtf":lucideReact.FileText,".csv":lucideReact.FileSpreadsheet,".xls":lucideReact.FileSpreadsheet,".xlsx":lucideReact.FileSpreadsheet,".db":lucideReact.Database,".sqlite":lucideReact.Database,".sql":lucideReact.Database,".zip":lucideReact.FileArchive,".tar":lucideReact.FileArchive,".gz":lucideReact.FileArchive,".rar":lucideReact.FileArchive,".7z":lucideReact.FileArchive};function Se(t){if(t.type==="directory")return lucideReact.Folder;let o=t.extension||de(t.name);return $t[o]||lucideReact.File}function U(t,o,p){return Math.max(o,Math.min(p,t))}function rt(t){return t<480?"xs":t<640?"sm":t<1024?"md":"lg"}function nt(t,o){if(t<480)return {size:{width:t-16,height:o-48},pos:{x:8,y:24}};if(t<640){let v=t-24,c=Math.min(o-64,540);return {size:{width:v,height:c},pos:{x:12,y:32}}}if(t<1024){let v=Math.min(640,t-32),c=Math.min(480,o-64);return {size:{width:v,height:c},pos:{x:Math.max(0,Math.round((t-v)/2)),y:Math.max(0,Math.round((o-c)/2))}}}let p=720,y=520;return {size:{width:p,height:y},pos:{x:Math.max(0,Math.round((t-p)/2)),y:Math.max(0,Math.round((o-y)/2))}}}function Lr({files:t,title:o="File Explorer",accent:p="#8b5cf6",defaultView:y="list",initialPosition:v,initialSize:c,dockable:L=false,dockSide:A="right",visible:J=true,onFileOpen:V,onSelectionChange:O,onNavigate:ie,onDelete:ue,onClose:at,onMinimize:Le,onPathSubmit:Ve,defaultInputMode:st="search",actions:it,resizable:ct=true,minSize:Z={width:400,height:300},className:lt}){let[me,dt]=Qe.useState(y),[b,P]=Qe.useState(new Set),[Fe,ee]=Qe.useState(null),[l,pe]=Qe.useState(false),[te,fe]=Qe.useState(false),[F,ut]=Qe.useState(""),[R,mt]=Qe.useState(st),[pt,ft]=Qe.useState(J),[gt,ce]=Qe.useState(false),[B,bt]=Qe.useState({w:window.innerWidth,h:window.innerHeight}),Re=nt(window.innerWidth,window.innerHeight),[f,j]=Qe.useState(v??Re.pos),[k,le]=Qe.useState(c??Re.size),[z,xt]=Qe.useState(null),re=Qe.useRef(false),X=Qe.useRef({x:0,y:0}),ge=Qe.useRef(null),_=Qe.useRef(false),ne=Qe.useRef({x:0,y:0,w:0,h:0,px:0,py:0}),oe=Qe.useRef(false),_e=Qe.useRef(l);Qe.useEffect(()=>{_e.current=l;},[l]);let be=J!==void 0?J:pt,xe=Qe.useMemo(()=>{let e=t.filter(a=>a.type==="directory"),n=t.filter(a=>a.type==="file");return e.sort((a,s)=>a.name.localeCompare(s.name)),n.sort((a,s)=>a.name.localeCompare(s.name)),[...e,...n]},[t]),x=Qe.useMemo(()=>{if(R!=="search"||!F.trim())return xe;let e=F.toLowerCase();return xe.filter(n=>n.name.toLowerCase().includes(e))},[xe,F,R]),m=Fe!=null?x[Fe]:null;Qe.useEffect(()=>{let e=rt(window.innerWidth),n=()=>{let a=window.innerWidth,s=window.innerHeight;if(bt({w:a,h:s}),_e.current)return;let d=rt(a);if(d!==e&&!oe.current&&!c){let w=nt(a,s);le(w.size),j(w.pos);}e=d;};return window.addEventListener("resize",n),()=>window.removeEventListener("resize",n)},[c]);let Ie=Qe.useCallback((e,n)=>{P(a=>{let s=new Set(a);return n.ctrlKey||n.metaKey?s.has(e)?s.delete(e):s.add(e):(s.clear(),s.add(e)),s}),ee(e);},[]);Qe.useEffect(()=>{if(!O)return;let e=Array.from(b).map(n=>x[n]).filter(Boolean);O(e);},[b]);let He=Qe.useCallback(e=>{let n=x[e];n&&(n.type==="directory"?ie?.(n.path):V?.(n));},[x,V,ie]),ht=Qe.useCallback(e=>{l||e.target.closest("button")||(oe.current=true,re.current=true,X.current={x:e.clientX-f.x,y:e.clientY-f.y},e.preventDefault());},[f,l]),wt=Qe.useCallback(e=>{if(l||e.target.closest("button"))return;oe.current=true;let n=e.touches[0];re.current=true,X.current={x:n.clientX-f.x,y:n.clientY-f.y};},[f,l]);Qe.useEffect(()=>{let e=s=>{if(!re.current)return;let d=window.innerWidth-100,w=window.innerHeight-40;j({x:U(s.clientX-X.current.x,0,d),y:U(s.clientY-X.current.y,0,w)});},n=s=>{if(!re.current)return;s.preventDefault();let d=s.touches[0],w=window.innerWidth-100,I=window.innerHeight-40;j({x:U(d.clientX-X.current.x,0,w),y:U(d.clientY-X.current.y,0,I)});},a=()=>{re.current=false,_.current=false,document.body.style.cursor="",document.body.style.userSelect="";};return window.addEventListener("mousemove",e),window.addEventListener("mouseup",a),window.addEventListener("touchmove",n,{passive:false}),window.addEventListener("touchend",a),()=>{window.removeEventListener("mousemove",e),window.removeEventListener("mouseup",a),window.removeEventListener("touchmove",n),window.removeEventListener("touchend",a);}},[]);let M=Qe.useCallback((e,n)=>{l||(n.preventDefault(),n.stopPropagation(),oe.current=true,_.current=e,ne.current={x:n.clientX,y:n.clientY,w:k.width,h:k.height,px:f.x,py:f.y},document.body.style.cursor=e==="e"||e==="w"?"ew-resize":e==="n"||e==="s"?"ns-resize":e==="nw"||e==="se"?"nwse-resize":"nesw-resize",document.body.style.userSelect="none");},[l,k,f]),D=Qe.useCallback((e,n)=>{if(l)return;n.preventDefault(),n.stopPropagation(),oe.current=true;let a=n.touches[0];_.current=e,ne.current={x:a.clientX,y:a.clientY,w:k.width,h:k.height,px:f.x,py:f.y},document.body.style.userSelect="none";},[l,k,f]);Qe.useEffect(()=>{let e=(d,w)=>{let I=_.current;if(!I)return;let Pe=d-ne.current.x,Be=w-ne.current.y,{w:Y,h:K,px:ye,py:ve}=ne.current;if(I.includes("e")&&(Y=Math.max(Z.width,Y+Pe)),I.includes("w")){let ae=Math.max(Z.width,Y-Pe);ye=ye+(Y-ae),Y=ae;}if(I.includes("s")&&(K=Math.max(Z.height,K+Be)),I.includes("n")){let ae=Math.max(Z.height,K-Be);ve=ve+(K-ae),K=ae;}le({width:Y,height:K}),j({x:ye,y:ve});},n=d=>{_.current&&e(d.clientX,d.clientY);},a=d=>{_.current&&(d.preventDefault(),e(d.touches[0].clientX,d.touches[0].clientY));},s=()=>{_.current=false,document.body.style.cursor="",document.body.style.userSelect="";};return window.addEventListener("mousemove",n),window.addEventListener("mouseup",s),window.addEventListener("touchmove",a,{passive:false}),window.addEventListener("touchend",s),()=>{window.removeEventListener("mousemove",n),window.removeEventListener("mouseup",s),window.removeEventListener("touchmove",a),window.removeEventListener("touchend",s);}},[Z]);let Ae=Qe.useCallback(()=>{l?(z&&(j(z.pos),le(z.size)),pe(false)):(xt({pos:f,size:k}),pe(true));},[l,f,k,z]),yt=Qe.useCallback(()=>{te?fe(false):(l&&(pe(false),z&&(j(z.pos),le(z.size))),fe(true),Le?.());},[te,l,z,Le]);Qe.useEffect(()=>{if(!be||te)return;let e=n=>{if(!(!ge.current?.contains(document.activeElement)&&document.activeElement!==ge.current)){if(n.key==="Escape"&&(ee(null),P(new Set)),n.ctrlKey&&n.key==="a"){n.preventDefault();let a=new Set(x.map((s,d)=>d));P(a);}n.key==="Delete"&&b.size>0&&ue&&(n.preventDefault(),ce(true));}};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[be,te,x,b,ue]);let Oe={"--fe-accent":p};if(te)return jsxRuntime.jsx("div",{className:u("fixed z-100 cursor-pointer transition-all duration-300",A==="right"?"right-0 top-1/2 -translate-y-1/2":"left-0 top-1/2 -translate-y-1/2"),style:Oe,onClick:()=>fe(false),title:`Restore ${o}`,children:jsxRuntime.jsxs("div",{className:"fe-dock flex items-center gap-1.5 rounded-l-lg px-2 py-3 backdrop-blur-md",style:{writingMode:"vertical-rl",textOrientation:"mixed"},children:[jsxRuntime.jsx(lucideReact.HardDrive,{className:"h-3.5 w-3.5 text-(--fe-accent)"}),jsxRuntime.jsx("span",{className:"text-[10px] font-bold uppercase tracking-widest text-(--fe-text)",children:o})]})});if(!be)return null;let he=l?B.w:Math.min(k.width,B.w-8),vt=l?B.h:Math.min(k.height,B.h-8),kt=l?0:U(f.x,0,Math.max(0,B.w-he)),Nt=l?0:U(f.y,0,Math.max(0,B.h-40)),we=he<500;return jsxRuntime.jsxs("div",{ref:ge,className:u("fe-window fixed z-100 flex flex-col overflow-hidden","rounded-xl border border-(--fe-border)","animate-[fe-window-in_0.35s_cubic-bezier(0.16,1,0.3,1)_both]",l&&"rounded-none",lt),style:{...Oe,left:kt,top:Nt,width:he,height:vt,transition:l?"left 0.3s, top 0.3s, width 0.3s, height 0.3s":void 0},tabIndex:0,children:[jsxRuntime.jsxs("div",{className:"fe-titlebar group/titlebar flex h-10 shrink-0 cursor-grab items-center justify-between px-3 select-none active:cursor-grabbing",onMouseDown:ht,onTouchStart:wt,onDoubleClick:Ae,children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx("div",{className:"flex h-5 w-5 items-center justify-center rounded",style:{background:"color-mix(in srgb, var(--fe-accent) 25%, transparent)"},children:jsxRuntime.jsx(lucideReact.HardDrive,{className:"h-3 w-3 text-(--fe-accent)"})}),jsxRuntime.jsx("span",{className:"text-xs font-bold uppercase tracking-widest text-(--fe-text)",children:o}),jsxRuntime.jsx("div",{className:"ml-2 hidden h-px w-20 md:block",style:{background:"linear-gradient(90deg, var(--fe-accent), transparent)",opacity:.3}})]}),jsxRuntime.jsxs("div",{className:"flex items-center gap-0.5",children:[jsxRuntime.jsx("button",{className:"fe-btn mr-1",onClick:()=>dt(e=>e==="list"?"grid":"list"),title:me==="list"?"Grid view":"List view",children:me==="list"?jsxRuntime.jsx(lucideReact.LayoutGrid,{className:"h-3.5 w-3.5"}):jsxRuntime.jsx(lucideReact.LayoutList,{className:"h-3.5 w-3.5"})}),L&&jsxRuntime.jsx("button",{className:"fe-btn",onClick:yt,title:"Dock to edge",children:jsxRuntime.jsx(lucideReact.Minus,{className:"h-3.5 w-3.5"})}),jsxRuntime.jsx("button",{className:"fe-btn",onClick:Ae,title:l?"Restore":"Maximize",children:l?jsxRuntime.jsx(lucideReact.Minimize2,{className:"h-3.5 w-3.5"}):jsxRuntime.jsx(lucideReact.Maximize2,{className:"h-3.5 w-3.5"})}),jsxRuntime.jsx("button",{className:"fe-btn hover:bg-red-500/40! hover:text-red-300!",onClick:()=>{at?.(),ft(false);},title:"Close",children:jsxRuntime.jsx(lucideReact.X,{className:"h-3.5 w-3.5"})})]})]}),jsxRuntime.jsxs("div",{className:"fe-toolbar flex h-9 shrink-0 items-center gap-2 px-3",children:[jsxRuntime.jsx("button",{className:"fe-btn p-1",onClick:()=>ie?.(".."),title:"Go up",children:jsxRuntime.jsx(lucideReact.FolderUp,{className:"h-3.5 w-3.5"})}),jsxRuntime.jsx("button",{className:"fe-btn shrink-0 px-1.5 py-0.5 text-[9px] font-bold uppercase tracking-wider",style:R==="navigate"?{color:"var(--fe-accent)",background:"color-mix(in srgb, var(--fe-accent) 15%, transparent)"}:void 0,onClick:()=>mt(e=>e==="search"?"navigate":"search"),title:R==="search"?"Switch to path navigation":"Switch to file search",children:R==="search"?jsxRuntime.jsx(lucideReact.Search,{className:"h-3 w-3"}):jsxRuntime.jsx(lucideReact.CornerRightDown,{className:"h-3 w-3"})}),jsxRuntime.jsx("div",{className:"relative flex-1",children:jsxRuntime.jsx("input",{type:"text",value:F,onChange:e=>ut(e.target.value),onKeyDown:e=>{e.key==="Enter"&&F.trim()&&R==="navigate"&&(Ve?Ve(F.trim()):ie?.(F.trim()));},placeholder:R==="search"?"Search files\u2026":"Enter path and press Enter\u2026",className:"h-6 w-full rounded border border-(--fe-input-border) bg-(--fe-input-bg) px-2 text-[11px] text-(--fe-text-strong) placeholder:text-(--fe-text-muted) outline-none transition-colors focus:border-(--fe-accent)/40 focus:bg-(--fe-input-bg)"})}),jsxRuntime.jsxs("span",{className:"shrink-0 font-mono text-[10px] text-(--fe-text-muted)",children:[x.length," item",x.length!==1?"s":"",b.size>0&&` \xB7 ${b.size} selected`]})]}),jsxRuntime.jsxs("div",{className:"relative flex flex-1 min-h-0",children:[jsxRuntime.jsx("div",{className:"flex-1 overflow-y-auto overflow-x-hidden p-1.5",onClick:e=>{e.target===e.currentTarget&&(P(new Set),ee(null));},children:x.length===0?jsxRuntime.jsxs("div",{className:"flex h-full flex-col items-center justify-center text-(--fe-text-muted)",children:[jsxRuntime.jsx(lucideReact.Folder,{className:"mb-2 h-10 w-10"}),jsxRuntime.jsx("span",{className:"text-xs",children:"No files found"})]}):me==="list"?jsxRuntime.jsx("div",{className:"space-y-px",children:x.map((e,n)=>{let a=Se(e),s=b.has(n),d=e.extension||de(e.name);return jsxRuntime.jsxs("div",{className:u("fe-item group/item flex items-center gap-2.5 rounded-lg px-2.5 py-1.5 text-(--fe-text) transition-all duration-150 cursor-pointer",s?"bg-(--fe-accent)/15 text-(--fe-text-strong)":"hover:bg-(--fe-surface-hover) hover:text-(--fe-text-strong)"),style:s?{boxShadow:"inset 2px 0 0 var(--fe-accent)"}:void 0,onClick:w=>Ie(n,w),onDoubleClick:()=>He(n),children:[jsxRuntime.jsx(a,{className:u("h-4 w-4 shrink-0",e.type==="directory"?"text-(--fe-accent)":"text-(--fe-text-muted)")}),jsxRuntime.jsx("span",{className:"flex-1 truncate text-xs font-medium",children:e.name}),d&&e.type==="file"&&jsxRuntime.jsx("span",{className:"shrink-0 rounded bg-(--fe-badge-bg) px-1.5 py-0.5 font-mono text-[9px] uppercase text-(--fe-text-muted)",children:d}),e.size!=null&&jsxRuntime.jsx("span",{className:"shrink-0 font-mono text-[10px] text-(--fe-text-muted)",children:tt(e.size)}),e.modifiedAt&&jsxRuntime.jsx("span",{className:"hidden shrink-0 font-mono text-[10px] text-(--fe-text-muted) lg:inline",children:Te(e.modifiedAt)})]},e.path+n)})}):jsxRuntime.jsx("div",{className:"grid grid-cols-[repeat(auto-fill,minmax(90px,1fr))] gap-1.5 p-1",children:x.map((e,n)=>{let a=Se(e),s=b.has(n),d=e.extension||de(e.name);return jsxRuntime.jsxs("div",{className:u("fe-item group/item flex cursor-pointer flex-col items-center gap-1 rounded-lg px-2 py-2.5 text-center transition-all duration-150",s?"bg-(--fe-accent)/15 text-(--fe-text-strong) ring-1 ring-(--fe-accent)/30":"text-(--fe-text) hover:bg-(--fe-surface-hover) hover:text-(--fe-text-strong)"),onClick:w=>Ie(n,w),onDoubleClick:()=>He(n),children:[jsxRuntime.jsx(a,{className:u("h-7 w-7",e.type==="directory"?"text-(--fe-accent)":"text-(--fe-text-muted)")}),jsxRuntime.jsx("span",{className:"w-full truncate text-[10px] font-medium leading-tight",children:e.name}),d&&e.type==="file"&&jsxRuntime.jsx("span",{className:"font-mono text-[8px] uppercase text-(--fe-text-muted)",children:d})]},e.path+n)})})}),jsxRuntime.jsx("div",{className:u("overflow-hidden transition-[width,opacity] duration-300 ease-out",we?u("absolute right-0 top-0 bottom-0 z-10",m?"w-44 opacity-100":"w-0 opacity-0 pointer-events-none"):u("shrink-0",m?"w-56":"w-0")),children:m&&jsxRuntime.jsxs("div",{className:u("flex h-full flex-col p-4",we?"fe-panel-narrow w-44":"fe-panel w-56 border-l border-(--fe-border)"),children:[we&&jsxRuntime.jsx("button",{className:"fe-btn mb-2 self-end",onClick:()=>{ee(null),P(new Set);},title:"Close panel",children:jsxRuntime.jsx(lucideReact.X,{className:"h-3.5 w-3.5"})}),jsxRuntime.jsxs("div",{className:"mb-3 flex flex-col items-center",children:[Qe__default.default.createElement(Se(m),{className:u("h-10 w-10 mb-2",m.type==="directory"?"text-(--fe-accent)":"text-(--fe-text-muted)")}),jsxRuntime.jsx("span",{className:"w-full text-center text-xs font-semibold text-(--fe-text-strong) break-all leading-tight",children:m.name})]}),jsxRuntime.jsxs("div",{className:"space-y-2.5 text-[10px]",children:[jsxRuntime.jsx(Q,{label:"Type",value:m.type==="directory"?"Directory":m.mimeType||m.extension||de(m.name)||"File"}),m.size!=null&&jsxRuntime.jsx(Q,{label:"Size",value:tt(m.size)}),jsxRuntime.jsx(Q,{label:"Path",value:m.path,mono:true}),m.extension&&jsxRuntime.jsx(Q,{label:"Extension",value:m.extension}),m.modifiedAt&&jsxRuntime.jsx(Q,{label:"Modified",value:Te(m.modifiedAt)}),m.createdAt&&jsxRuntime.jsx(Q,{label:"Created",value:Te(m.createdAt)})]}),jsxRuntime.jsxs("div",{className:"mt-auto flex flex-col gap-1.5",children:[m.type==="file"&&V&&jsxRuntime.jsxs("button",{className:"flex items-center justify-center gap-1.5 rounded-lg py-1.5 text-[10px] font-semibold uppercase tracking-wider text-(--fe-text-strong) transition-colors",style:{background:"color-mix(in srgb, var(--fe-accent) 20%, transparent)",border:"1px solid color-mix(in srgb, var(--fe-accent) 30%, transparent)"},onClick:()=>V(m),children:[jsxRuntime.jsx(lucideReact.ArrowUp,{className:"h-3 w-3 rotate-45"}),"Open"]}),it?.map(e=>jsxRuntime.jsxs("button",{className:"fe-action flex items-center justify-center gap-1.5 rounded-lg py-1.5 text-[10px] font-semibold uppercase tracking-wider text-(--fe-text) transition-colors hover:text-(--fe-text-strong)",onClick:()=>e.onClick(m),children:[e.icon&&Qe__default.default.createElement(e.icon,{className:"h-3 w-3"}),e.label]},e.key))]})]})})]}),jsxRuntime.jsxs("div",{className:"fe-statusbar flex h-6 shrink-0 items-center justify-between px-3 text-[9px] font-mono text-(--fe-text-muted)",children:[jsxRuntime.jsxs("span",{children:[x.length," items"]}),jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[b.size>0&&jsxRuntime.jsxs("span",{className:"text-(--fe-accent)/70",children:[b.size," selected"]}),jsxRuntime.jsx("span",{className:"opacity-50",children:"Ctrl+Click multi-select \xB7 Esc clear"})]})]}),ct&&!l&&jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("div",{className:"absolute top-0 left-4 right-4 h-3 cursor-ns-resize",onMouseDown:e=>M("n",e),onTouchStart:e=>D("n",e)}),jsxRuntime.jsx("div",{className:"absolute bottom-0 left-4 right-4 h-3 cursor-ns-resize",onMouseDown:e=>M("s",e),onTouchStart:e=>D("s",e)}),jsxRuntime.jsx("div",{className:"absolute top-4 left-0 bottom-4 w-3 cursor-ew-resize",onMouseDown:e=>M("w",e),onTouchStart:e=>D("w",e)}),jsxRuntime.jsx("div",{className:"absolute top-4 right-0 bottom-4 w-3 cursor-ew-resize",onMouseDown:e=>M("e",e),onTouchStart:e=>D("e",e)}),jsxRuntime.jsx("div",{className:"absolute top-0 left-0 h-6 w-6 cursor-nwse-resize",onMouseDown:e=>M("nw",e),onTouchStart:e=>D("nw",e)}),jsxRuntime.jsx("div",{className:"absolute top-0 right-0 h-6 w-6 cursor-nesw-resize",onMouseDown:e=>M("ne",e),onTouchStart:e=>D("ne",e)}),jsxRuntime.jsx("div",{className:"absolute bottom-0 left-0 h-6 w-6 cursor-nesw-resize",onMouseDown:e=>M("sw",e),onTouchStart:e=>D("sw",e)}),jsxRuntime.jsx("div",{className:"absolute bottom-0 right-0 h-6 w-6 cursor-nwse-resize",onMouseDown:e=>M("se",e),onTouchStart:e=>D("se",e)})]}),jsxRuntime.jsx("style",{children:`
|
|
2
2
|
.fe-window {
|
|
3
3
|
background: var(--fe-bg);
|
|
4
4
|
box-shadow: var(--fe-shadow);
|
|
@@ -14,6 +14,13 @@
|
|
|
14
14
|
.fe-panel {
|
|
15
15
|
background: var(--fe-surface);
|
|
16
16
|
}
|
|
17
|
+
.fe-panel-narrow {
|
|
18
|
+
background: color-mix(in srgb, var(--fe-bg) 82%, transparent);
|
|
19
|
+
backdrop-filter: blur(20px) saturate(160%);
|
|
20
|
+
-webkit-backdrop-filter: blur(20px) saturate(160%);
|
|
21
|
+
border-left: 1px solid color-mix(in srgb, var(--fe-border) 80%, transparent);
|
|
22
|
+
box-shadow: -6px 0 32px rgba(0,0,0,0.35), inset 1px 0 0 color-mix(in srgb, var(--fe-accent) 10%, transparent);
|
|
23
|
+
}
|
|
17
24
|
.fe-statusbar {
|
|
18
25
|
border-top: 1px solid var(--fe-border);
|
|
19
26
|
background: var(--fe-surface);
|
|
@@ -52,4 +59,4 @@
|
|
|
52
59
|
from { opacity: 0; transform: translateX(-4px); }
|
|
53
60
|
to { opacity: 1; transform: translateX(0); }
|
|
54
61
|
}
|
|
55
|
-
`}),jsxRuntime.jsx(
|
|
62
|
+
`}),jsxRuntime.jsx(Ye,{open:gt,onOpenChange:ce,children:jsxRuntime.jsxs(Ke,{size:"sm",children:[jsxRuntime.jsxs($e,{children:[jsxRuntime.jsxs(We,{children:[jsxRuntime.jsx(lucideReact.AlertTriangle,{className:"text-danger-500"}),"Confirm Deletion"]}),jsxRuntime.jsxs(qe,{children:[b.size===1?`Are you sure you want to delete "${x[Array.from(b)[0]]?.name}"?`:`Are you sure you want to delete ${b.size} selected items?`," ","This action cannot be undone."]})]}),jsxRuntime.jsxs(Ge,{children:[jsxRuntime.jsx(Me,{intent:"ghost",onClick:()=>ce(false),children:"Cancel"}),jsxRuntime.jsxs(Me,{intent:"danger",onClick:()=>{let e=Array.from(b).map(n=>x[n]).filter(Boolean);ue?.(e),P(new Set),ee(null),ce(false);},children:[jsxRuntime.jsx(lucideReact.Trash2,{className:"h-4 w-4"}),"Delete"]})]})]})})]})}function Q({label:t,value:o,mono:p}){return jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("div",{className:"mb-0.5 font-semibold uppercase tracking-wider text-(--fe-text-muted)",children:t}),jsxRuntime.jsx("div",{className:u("text-(--fe-text) break-all leading-snug",p&&"font-mono text-[9px]"),children:o})]})}exports.FileExplorer=Lr;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import je,{createContext,useState,useRef,useMemo,useCallback,useEffect,useId,useContext}from'react';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {createPortal}from'react-dom';import {HardDrive,LayoutGrid,LayoutList,Minus,Minimize2,Maximize2,X,FolderUp,Search,CornerRightDown,Folder,ArrowUp,AlertTriangle,Trash2,FileArchive,Database,FileSpreadsheet,FileText,Terminal,FileCode,Video,Music,Image,File}from'lucide-react';import {cva}from'class-variance-authority';import {jsx,jsxs,Fragment}from'react/jsx-runtime';function c(...r){return twMerge(clsx(r))}var be=cva("rounded-lg bg-white p-6 shadow-xl dark:bg-primary-900",{variants:{size:{sm:"w-full max-w-sm",md:"w-full max-w-lg",lg:"w-full max-w-2xl",xl:"w-full max-w-4xl",full:"h-[calc(100vh-4rem)] w-[calc(100vw-4rem)]"}},defaultVariants:{size:"md"}});cva("absolute z-50 rounded px-2 py-1 text-xs shadow-md animate-fade-in",{variants:{intent:{default:"bg-primary-900 text-white dark:bg-primary-100 dark:text-primary-900",light:"border border-primary-200 bg-white text-primary-700 dark:border-primary-600 dark:bg-primary-800 dark:text-primary-200"}},defaultVariants:{intent:"default"}});var N=[];function pt(r){N.push(r);}function ft(r){let a=N.indexOf(r);a!==-1&&N.splice(a,1);}function he(r){return N.length>0&&N[N.length-1]===r}function gt(r){let a=N.indexOf(r);return a!==-1?a:N.length}var Te=createContext(null);function Re({open:r,onOpenChange:a,modal:m=true,closeOnOutsideClick:v=false,children:L}){let d=useId();return useEffect(()=>{if(r)return pt(d),()=>ft(d)},[r,d]),useEffect(()=>{if(!r||!m)return;let z=S=>{S.key==="Escape"&&he(d)&&a(false);};return document.addEventListener("keydown",z),()=>document.removeEventListener("keydown",z)},[r,m,a,d]),useEffect(()=>{if(!r||!m)return;let z=document.body.style.overflow;return document.body.style.overflow="hidden",()=>{document.body.style.overflow=z;}},[r,m]),r?jsx(Te.Provider,{value:{id:d,onOpenChange:a,modal:m,closeOnOutsideClick:v},children:createPortal(L,document.body)}):null}function _e({size:r,position:a="center",className:m,children:v,...L}){let d=useContext(Te);if(!d)return null;let S=200+gt(d.id)*10,B=()=>{d.closeOnOutsideClick&&he(d.id)&&d.onOpenChange(false);},M=a==="bottom";return d.modal?jsx("div",{className:c("animate-fade-in fixed inset-0 bg-black/50",M?"flex items-end justify-center":"flex items-center justify-center p-4"),style:{zIndex:S},onClick:B,children:jsx("div",{className:c(be({size:r}),M?"animate-slide-in-bottom w-full rounded-b-none rounded-t-(--dialog-sheet-radius) max-h-[85vh] overflow-y-auto":"animate-scale-in",m),role:"dialog","aria-modal":"true",onClick:T=>T.stopPropagation(),...L,children:v})}):jsx("div",{className:c("fixed inset-0 flex items-center justify-center p-4",d.closeOnOutsideClick?"pointer-events-auto":"pointer-events-none"),style:{zIndex:S},onClick:d.closeOnOutsideClick&&he(d.id)?()=>d.onOpenChange(false):void 0,children:jsx("div",{className:c(be({size:r}),"animate-scale-in pointer-events-auto shadow-2xl",m),role:"dialog",onClick:d.closeOnOutsideClick?T=>T.stopPropagation():void 0,...L,children:v})})}function Ie({className:r,...a}){return jsx("div",{className:c("mb-4 space-y-1",r),...a})}function Ae({className:r,...a}){return jsx("h2",{className:c("text-primary-900 dark:text-primary-100 flex items-center gap-1.5 text-lg font-semibold [&_svg]:h-5 [&_svg]:w-5 [&_svg]:shrink-0",r),...a})}function Oe({className:r,...a}){return jsx("p",{className:c("text-primary-500 dark:text-primary-400 text-sm",r),...a})}function He({className:r,...a}){return jsx("div",{className:c("mt-6 flex justify-end gap-2",r),...a})}var Pe=cva("inline-flex cursor-pointer items-center justify-center gap-1.5 rounded font-medium transition-colors disabled:pointer-events-none disabled:opacity-50 [&_svg]:shrink-0",{variants:{intent:{primary:"bg-primary-500 text-white hover:bg-primary-600 active:bg-primary-700",secondary:"bg-secondary-500 text-white hover:bg-secondary-600 active:bg-secondary-700",danger:"bg-danger-500 text-white hover:bg-danger-600 active:bg-danger-700",warning:"bg-warning-500 text-white hover:bg-warning-600 active:bg-warning-700",ghost:"bg-transparent text-primary-700 hover:bg-primary-100 active:bg-primary-200 dark:text-primary-300 dark:hover:bg-primary-800",outline:"border border-primary-300 bg-transparent text-primary-700 hover:bg-primary-50 dark:border-primary-600 dark:text-primary-300 dark:hover:bg-primary-800"},size:{sm:"h-7 px-3 text-xs [&_svg]:h-3.5 [&_svg]:w-3.5",md:"h-9 px-4 text-sm [&_svg]:h-4 [&_svg]:w-4",lg:"h-11 px-6 text-base [&_svg]:h-5 [&_svg]:w-5"}},defaultVariants:{intent:"primary",size:"md"}});cva("inline-flex items-center gap-1 rounded border font-semibold [&_svg]:shrink-0",{variants:{intent:{success:"border-success-200 bg-success-100 text-success-800 dark:border-success-800 dark:bg-success-900/30 dark:text-success-400",warning:"border-warning-200 bg-warning-100 text-warning-800 dark:border-warning-800 dark:bg-warning-900/30 dark:text-warning-400",error:"border-danger-200 bg-danger-100 text-danger-800 dark:border-danger-800 dark:bg-danger-900/30 dark:text-danger-400",info:"border-primary-200 bg-primary-100 text-primary-800 dark:border-primary-800 dark:bg-primary-900/30 dark:text-primary-400",primary:"border-secondary-200 bg-secondary-100 text-secondary-700 dark:border-secondary-700 dark:bg-secondary-800 dark:text-secondary-300"},size:{sm:"px-1.5 py-0 text-[0.625rem] [&_svg]:h-2.5 [&_svg]:w-2.5",md:"px-2.5 py-0.5 text-xs [&_svg]:h-3 [&_svg]:w-3",lg:"px-3 py-1 text-sm [&_svg]:h-3.5 [&_svg]:w-3.5"}},defaultVariants:{intent:"primary",size:"md"}});cva("absolute flex items-center justify-center rounded-full font-bold leading-none ring-2 ring-white select-none pointer-events-none z-10 dark:ring-primary-900",{variants:{intent:{danger:"bg-danger-500 text-white",success:"bg-success-500 text-white",warning:"bg-warning-500 text-white",info:"bg-primary-500 text-white",primary:"bg-secondary-500 text-white"},size:{sm:"text-[0.5rem]",md:"text-[0.625rem]",lg:"text-xs"},dot:{true:"",false:""},placement:{"top-right":"top-0 right-0 translate-x-1/2 -translate-y-1/2","top-left":"top-0 left-0 -translate-x-1/2 -translate-y-1/2","bottom-right":"bottom-0 right-0 translate-x-1/2 translate-y-1/2","bottom-left":"bottom-0 left-0 -translate-x-1/2 translate-y-1/2"}},compoundVariants:[{dot:true,size:"sm",class:"h-1.5 w-1.5 min-w-0 ring-1"},{dot:true,size:"md",class:"h-2 w-2 min-w-0"},{dot:true,size:"lg",class:"h-2.5 w-2.5 min-w-0"},{dot:false,size:"sm",class:"h-4 min-w-4 px-1"},{dot:false,size:"md",class:"h-5 min-w-5 px-1.5"},{dot:false,size:"lg",class:"h-6 min-w-6 px-2"}],defaultVariants:{intent:"danger",size:"md",dot:false,placement:"top-right"}});cva("w-full rounded-md border bg-white text-secondary-900 transition-colors placeholder:text-secondary-400 focus:outline-none focus:ring-2 dark:bg-secondary-900 dark:text-secondary-100 dark:placeholder:text-secondary-600",{variants:{state:{default:"border-secondary-300 focus:border-primary-500 focus:ring-primary-500/20 dark:border-secondary-600",error:"border-danger-400 focus:border-danger-500 focus:ring-danger-500/20"},size:{sm:"h-7 px-2 text-xs",md:"h-9 px-3 py-2 text-sm",lg:"h-11 px-4 py-2.5 text-base"}},defaultVariants:{state:"default",size:"md"}});cva("inline-flex items-center gap-1 font-medium [&_svg]:shrink-0",{variants:{size:{sm:"text-xs [&_svg]:h-3 [&_svg]:w-3",md:"text-sm [&_svg]:h-3.5 [&_svg]:w-3.5",lg:"text-base [&_svg]:h-4 [&_svg]:w-4"},intent:{default:"text-primary-700 dark:text-primary-300",muted:"text-primary-400 dark:text-primary-500",required:"text-primary-700 dark:text-primary-300 after:ml-0.5 after:text-danger-500 after:content-['*']"}},defaultVariants:{size:"md",intent:"default"}});cva("relative inline-flex shrink-0 items-center justify-center rounded border-2 transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2",{variants:{intent:{primary:"border-primary-300 dark:border-primary-600 focus-visible:ring-primary-500/40",secondary:"border-secondary-300 dark:border-secondary-600 focus-visible:ring-secondary-500/40",danger:"border-danger-300 dark:border-danger-600 focus-visible:ring-danger-500/40",warning:"border-warning-300 dark:border-warning-600 focus-visible:ring-warning-500/40",success:"border-success-300 dark:border-success-600 focus-visible:ring-success-500/40"},size:{sm:"h-4 w-4 rounded-[3px]",md:"h-5 w-5 rounded",lg:"h-6 w-6 rounded-[5px]"},checked:{on:"",off:"bg-white dark:bg-primary-900"}},compoundVariants:[{intent:"primary",checked:"on",class:"border-primary-500 bg-primary-500 dark:border-primary-500 dark:bg-primary-500"},{intent:"secondary",checked:"on",class:"border-secondary-500 bg-secondary-500 dark:border-secondary-500 dark:bg-secondary-500"},{intent:"danger",checked:"on",class:"border-danger-500 bg-danger-500 dark:border-danger-500 dark:bg-danger-500"},{intent:"warning",checked:"on",class:"border-warning-500 bg-warning-500 dark:border-warning-500 dark:bg-warning-500"},{intent:"success",checked:"on",class:"border-success-500 bg-success-500 dark:border-success-500 dark:bg-success-500"}],defaultVariants:{intent:"primary",size:"md",checked:"off"}});cva("relative inline-flex shrink-0 items-center justify-center rounded-full border-2 transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2",{variants:{intent:{primary:"border-primary-300 dark:border-primary-600 focus-visible:ring-primary-500/40",secondary:"border-secondary-300 dark:border-secondary-600 focus-visible:ring-secondary-500/40",danger:"border-danger-300 dark:border-danger-600 focus-visible:ring-danger-500/40",warning:"border-warning-300 dark:border-warning-600 focus-visible:ring-warning-500/40",success:"border-success-300 dark:border-success-600 focus-visible:ring-success-500/40"},size:{sm:"h-4 w-4",md:"h-5 w-5",lg:"h-6 w-6"},checked:{on:"",off:"bg-white dark:bg-primary-900"}},compoundVariants:[{intent:"primary",checked:"on",class:"border-primary-500 bg-primary-500 dark:border-primary-500 dark:bg-primary-500"},{intent:"secondary",checked:"on",class:"border-secondary-500 bg-secondary-500 dark:border-secondary-500 dark:bg-secondary-500"},{intent:"danger",checked:"on",class:"border-danger-500 bg-danger-500 dark:border-danger-500 dark:bg-danger-500"},{intent:"warning",checked:"on",class:"border-warning-500 bg-warning-500 dark:border-warning-500 dark:bg-warning-500"},{intent:"success",checked:"on",class:"border-success-500 bg-success-500 dark:border-success-500 dark:bg-success-500"}],defaultVariants:{intent:"primary",size:"md",checked:"off"}});cva("",{variants:{intent:{primary:"",secondary:"",danger:"",warning:"",success:""},size:{sm:"",md:"",lg:""},checked:{on:"",off:"bg-primary-300 dark:bg-primary-800"}},compoundVariants:[{intent:"primary",checked:"on",class:"bg-primary-500 dark:bg-primary-500"},{intent:"secondary",checked:"on",class:"bg-secondary-500 dark:bg-secondary-500"},{intent:"danger",checked:"on",class:"bg-danger-500 dark:bg-danger-500"},{intent:"warning",checked:"on",class:"bg-warning-500 dark:bg-warning-500"},{intent:"success",checked:"on",class:"bg-success-500 dark:bg-success-500"}],defaultVariants:{intent:"primary",size:"md",checked:"off"}});function ye({intent:r,size:a,className:m,...v}){return jsx("button",{className:c(Pe({intent:r,size:a}),m),...v})}function re(r){let a=r.lastIndexOf(".");return a>0?r.slice(a).toLowerCase():""}function Ke(r){return r==null?"\u2014":r<1024?`${r} B`:r<1024*1024?`${(r/1024).toFixed(1)} KB`:r<1024*1024*1024?`${(r/(1024*1024)).toFixed(1)} MB`:`${(r/(1024*1024*1024)).toFixed(2)} GB`}function Ne(r){return r?(typeof r=="string"?new Date(r):r).toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):"\u2014"}var Ft={".png":Image,".jpg":Image,".jpeg":Image,".gif":Image,".svg":Image,".webp":Image,".ico":Image,".bmp":Image,".mp3":Music,".wav":Music,".flac":Music,".ogg":Music,".aac":Music,".m4a":Music,".mp4":Video,".mkv":Video,".avi":Video,".mov":Video,".wmv":Video,".webm":Video,".ts":FileCode,".tsx":FileCode,".js":FileCode,".jsx":FileCode,".json":FileCode,".html":FileCode,".css":FileCode,".scss":FileCode,".py":FileCode,".rs":FileCode,".go":FileCode,".java":FileCode,".c":FileCode,".cpp":FileCode,".h":FileCode,".sh":Terminal,".bat":Terminal,".ps1":Terminal,".md":FileText,".txt":FileText,".pdf":FileText,".doc":FileText,".docx":FileText,".rtf":FileText,".csv":FileSpreadsheet,".xls":FileSpreadsheet,".xlsx":FileSpreadsheet,".db":Database,".sqlite":Database,".sql":Database,".zip":FileArchive,".tar":FileArchive,".gz":FileArchive,".rar":FileArchive,".7z":FileArchive};function Ce(r){if(r.type==="directory")return Folder;let a=r.extension||re(r.name);return Ft[a]||File}function $e(r,a,m){return Math.max(a,Math.min(m,r))}function gr({files:r,title:a="File Explorer",accent:m="#8b5cf6",defaultView:v="list",initialPosition:L,initialSize:d,dockable:z=false,dockSide:S="right",visible:B=true,onFileOpen:M,onSelectionChange:T,onNavigate:Q,onDelete:ne,onClose:qe,onMinimize:De,onPathSubmit:ze,defaultInputMode:Ge="search",actions:Ue,resizable:Qe=true,minSize:X$1={width:400,height:300},className:We}){let[ae,Je]=useState(v),[f,K]=useState(new Set),[Me,W]=useState(null),[u,se]=useState(false),[$,oe]=useState(false),[E,Ze]=useState(""),[V,et]=useState(Ge),[tt,rt]=useState(B),[nt,J]=useState(false),ie=d??{width:720,height:520},[h,Z]=useState(L??{x:Math.max(0,Math.round((window.innerWidth-ie.width)/2)),y:Math.max(0,Math.round((window.innerHeight-ie.height)/2))}),[F,le]=useState(ie),[w,at]=useState(null),ce=useRef(false),de=useRef({x:0,y:0}),ue=useRef(null),Y=useRef(false),ee=useRef({x:0,y:0,w:0,h:0,px:0,py:0}),me=B!==void 0?B:tt,pe=useMemo(()=>{let e=r.filter(l=>l.type==="directory"),n=r.filter(l=>l.type==="file");return e.sort((l,o)=>l.name.localeCompare(o.name)),n.sort((l,o)=>l.name.localeCompare(o.name)),[...e,...n]},[r]),g=useMemo(()=>{if(V!=="search"||!E.trim())return pe;let e=E.toLowerCase();return pe.filter(n=>n.name.toLowerCase().includes(e))},[pe,E,V]),i=Me!=null?g[Me]:null,Ee=useCallback((e,n)=>{K(l=>{let o=new Set(l);return n.ctrlKey||n.metaKey?o.has(e)?o.delete(e):o.add(e):(o.clear(),o.add(e)),o}),W(e);},[]);useEffect(()=>{if(!T)return;let e=Array.from(f).map(n=>g[n]).filter(Boolean);T(e);},[f]);let Ve=useCallback(e=>{let n=g[e];n&&(n.type==="directory"?Q?.(n.path):M?.(n));},[g,M,Q]),st=useCallback(e=>{u||e.target.closest("button")||(ce.current=true,de.current={x:e.clientX-h.x,y:e.clientY-h.y},e.preventDefault());},[h,u]);useEffect(()=>{let e=l=>{if(!ce.current)return;let o=window.innerWidth-100,b=window.innerHeight-40;Z({x:$e(l.clientX-de.current.x,0,o),y:$e(l.clientY-de.current.y,0,b)});},n=()=>{ce.current=false,Y.current=false,document.body.style.cursor="",document.body.style.userSelect="";};return window.addEventListener("mousemove",e),window.addEventListener("mouseup",n),()=>{window.removeEventListener("mousemove",e),window.removeEventListener("mouseup",n);}},[]);let k=useCallback((e,n)=>{u||(n.preventDefault(),n.stopPropagation(),Y.current=e,ee.current={x:n.clientX,y:n.clientY,w:F.width,h:F.height,px:h.x,py:h.y},document.body.style.cursor=e==="e"||e==="w"?"ew-resize":e==="n"||e==="s"?"ns-resize":e==="nw"||e==="se"?"nwse-resize":"nesw-resize",document.body.style.userSelect="none");},[u,F,h]);useEffect(()=>{let e=l=>{if(!Y.current)return;let o=Y.current,b=l.clientX-ee.current.x,R=l.clientY-ee.current.y,{w:_,h:I,px:fe,py:ge}=ee.current;if(o.includes("e")&&(_=Math.max(X$1.width,_+b)),o.includes("w")){let q=Math.max(X$1.width,_-b);fe=fe+(_-q),_=q;}if(o.includes("s")&&(I=Math.max(X$1.height,I+R)),o.includes("n")){let q=Math.max(X$1.height,I-R);ge=ge+(I-q),I=q;}le({width:_,height:I}),Z({x:fe,y:ge});},n=()=>{Y.current=false,document.body.style.cursor="",document.body.style.userSelect="";};return window.addEventListener("mousemove",e),window.addEventListener("mouseup",n),()=>{window.removeEventListener("mousemove",e),window.removeEventListener("mouseup",n);}},[X$1]);let Fe=useCallback(()=>{u?(w&&(Z(w.pos),le(w.size)),se(false)):(at({pos:h,size:F}),se(true));},[u,h,F,w]),ot=useCallback(()=>{$?oe(false):(u&&(se(false),w&&(Z(w.pos),le(w.size))),oe(true),De?.());},[$,u,w,De]);useEffect(()=>{if(!me||$)return;let e=n=>{if(!(!ue.current?.contains(document.activeElement)&&document.activeElement!==ue.current)){if(n.key==="Escape"&&(W(null),K(new Set)),n.ctrlKey&&n.key==="a"){n.preventDefault();let l=new Set(g.map((o,b)=>b));K(l);}n.key==="Delete"&&f.size>0&&ne&&(n.preventDefault(),J(true));}};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[me,$,g,f,ne]);let Le={"--fe-accent":m};return $?jsx("div",{className:c("fixed z-100 cursor-pointer transition-all duration-300",S==="right"?"right-0 top-1/2 -translate-y-1/2":"left-0 top-1/2 -translate-y-1/2"),style:Le,onClick:()=>oe(false),title:`Restore ${a}`,children:jsxs("div",{className:"fe-dock flex items-center gap-1.5 rounded-l-lg px-2 py-3 backdrop-blur-md",style:{writingMode:"vertical-rl",textOrientation:"mixed"},children:[jsx(HardDrive,{className:"h-3.5 w-3.5 text-(--fe-accent)"}),jsx("span",{className:"text-[10px] font-bold uppercase tracking-widest text-(--fe-text)",children:a})]})}):me?jsxs("div",{ref:ue,className:c("fe-window fixed z-100 flex flex-col overflow-hidden","rounded-xl border border-(--fe-border)","animate-[fe-window-in_0.35s_cubic-bezier(0.16,1,0.3,1)_both]",u&&"rounded-none",We),style:{...Le,left:u?0:h.x,top:u?0:h.y,width:u?"100vw":F.width,height:u?"100vh":F.height,transition:u?"left 0.3s, top 0.3s, width 0.3s, height 0.3s":void 0},tabIndex:0,children:[jsxs("div",{className:"fe-titlebar group/titlebar flex h-10 shrink-0 cursor-grab items-center justify-between px-3 select-none active:cursor-grabbing",onMouseDown:st,onDoubleClick:Fe,children:[jsxs("div",{className:"flex items-center gap-2",children:[jsx("div",{className:"flex h-5 w-5 items-center justify-center rounded",style:{background:"color-mix(in srgb, var(--fe-accent) 25%, transparent)"},children:jsx(HardDrive,{className:"h-3 w-3 text-(--fe-accent)"})}),jsx("span",{className:"text-xs font-bold uppercase tracking-widest text-(--fe-text)",children:a}),jsx("div",{className:"ml-2 hidden h-px w-20 md:block",style:{background:"linear-gradient(90deg, var(--fe-accent), transparent)",opacity:.3}})]}),jsxs("div",{className:"flex items-center gap-0.5",children:[jsx("button",{className:"fe-btn mr-1",onClick:()=>Je(e=>e==="list"?"grid":"list"),title:ae==="list"?"Grid view":"List view",children:ae==="list"?jsx(LayoutGrid,{className:"h-3.5 w-3.5"}):jsx(LayoutList,{className:"h-3.5 w-3.5"})}),z&&jsx("button",{className:"fe-btn",onClick:ot,title:"Dock to edge",children:jsx(Minus,{className:"h-3.5 w-3.5"})}),jsx("button",{className:"fe-btn",onClick:Fe,title:u?"Restore":"Maximize",children:u?jsx(Minimize2,{className:"h-3.5 w-3.5"}):jsx(Maximize2,{className:"h-3.5 w-3.5"})}),jsx("button",{className:"fe-btn hover:bg-red-500/40! hover:text-red-300!",onClick:()=>{qe?.(),rt(false);},title:"Close",children:jsx(X,{className:"h-3.5 w-3.5"})})]})]}),jsxs("div",{className:"fe-toolbar flex h-9 shrink-0 items-center gap-2 px-3",children:[jsx("button",{className:"fe-btn p-1",onClick:()=>Q?.(".."),title:"Go up",children:jsx(FolderUp,{className:"h-3.5 w-3.5"})}),jsx("button",{className:"fe-btn shrink-0 px-1.5 py-0.5 text-[9px] font-bold uppercase tracking-wider",style:V==="navigate"?{color:"var(--fe-accent)",background:"color-mix(in srgb, var(--fe-accent) 15%, transparent)"}:void 0,onClick:()=>et(e=>e==="search"?"navigate":"search"),title:V==="search"?"Switch to path navigation":"Switch to file search",children:V==="search"?jsx(Search,{className:"h-3 w-3"}):jsx(CornerRightDown,{className:"h-3 w-3"})}),jsx("div",{className:"relative flex-1",children:jsx("input",{type:"text",value:E,onChange:e=>Ze(e.target.value),onKeyDown:e=>{e.key==="Enter"&&E.trim()&&V==="navigate"&&(ze?ze(E.trim()):Q?.(E.trim()));},placeholder:V==="search"?"Search files\u2026":"Enter path and press Enter\u2026",className:"h-6 w-full rounded border border-(--fe-input-border) bg-(--fe-input-bg) px-2 text-[11px] text-(--fe-text-strong) placeholder:text-(--fe-text-muted) outline-none transition-colors focus:border-(--fe-accent)/40 focus:bg-(--fe-input-bg)"})}),jsxs("span",{className:"shrink-0 font-mono text-[10px] text-(--fe-text-muted)",children:[g.length," item",g.length!==1?"s":"",f.size>0&&` \xB7 ${f.size} selected`]})]}),jsxs("div",{className:"flex flex-1 min-h-0",children:[jsx("div",{className:"flex-1 overflow-y-auto overflow-x-hidden p-1.5",onClick:e=>{e.target===e.currentTarget&&(K(new Set),W(null));},children:g.length===0?jsxs("div",{className:"flex h-full flex-col items-center justify-center text-(--fe-text-muted)",children:[jsx(Folder,{className:"mb-2 h-10 w-10"}),jsx("span",{className:"text-xs",children:"No files found"})]}):ae==="list"?jsx("div",{className:"space-y-px",children:g.map((e,n)=>{let l=Ce(e),o=f.has(n),b=e.extension||re(e.name);return jsxs("div",{className:c("fe-item group/item flex items-center gap-2.5 rounded-lg px-2.5 py-1.5 text-(--fe-text) transition-all duration-150 cursor-pointer",o?"bg-(--fe-accent)/15 text-(--fe-text-strong)":"hover:bg-(--fe-surface-hover) hover:text-(--fe-text-strong)"),style:o?{boxShadow:"inset 2px 0 0 var(--fe-accent)"}:void 0,onClick:R=>Ee(n,R),onDoubleClick:()=>Ve(n),children:[jsx(l,{className:c("h-4 w-4 shrink-0",e.type==="directory"?"text-(--fe-accent)":"text-(--fe-text-muted)")}),jsx("span",{className:"flex-1 truncate text-xs font-medium",children:e.name}),b&&e.type==="file"&&jsx("span",{className:"shrink-0 rounded bg-(--fe-badge-bg) px-1.5 py-0.5 font-mono text-[9px] uppercase text-(--fe-text-muted)",children:b}),e.size!=null&&jsx("span",{className:"shrink-0 font-mono text-[10px] text-(--fe-text-muted)",children:Ke(e.size)}),e.modifiedAt&&jsx("span",{className:"hidden shrink-0 font-mono text-[10px] text-(--fe-text-muted) lg:inline",children:Ne(e.modifiedAt)})]},e.path+n)})}):jsx("div",{className:"grid grid-cols-[repeat(auto-fill,minmax(90px,1fr))] gap-1.5 p-1",children:g.map((e,n)=>{let l=Ce(e),o=f.has(n),b=e.extension||re(e.name);return jsxs("div",{className:c("fe-item group/item flex cursor-pointer flex-col items-center gap-1 rounded-lg px-2 py-2.5 text-center transition-all duration-150",o?"bg-(--fe-accent)/15 text-(--fe-text-strong) ring-1 ring-(--fe-accent)/30":"text-(--fe-text) hover:bg-(--fe-surface-hover) hover:text-(--fe-text-strong)"),onClick:R=>Ee(n,R),onDoubleClick:()=>Ve(n),children:[jsx(l,{className:c("h-7 w-7",e.type==="directory"?"text-(--fe-accent)":"text-(--fe-text-muted)")}),jsx("span",{className:"w-full truncate text-[10px] font-medium leading-tight",children:e.name}),b&&e.type==="file"&&jsx("span",{className:"font-mono text-[8px] uppercase text-(--fe-text-muted)",children:b})]},e.path+n)})})}),jsx("div",{className:c("shrink-0 overflow-hidden transition-[width] duration-300 ease-out",i?"w-56":"w-0"),children:i&&jsxs("div",{className:"fe-panel flex h-full w-56 flex-col border-l border-(--fe-border) p-4",children:[jsxs("div",{className:"mb-3 flex flex-col items-center",children:[je.createElement(Ce(i),{className:c("h-10 w-10 mb-2",i.type==="directory"?"text-(--fe-accent)":"text-(--fe-text-muted)")}),jsx("span",{className:"w-full text-center text-xs font-semibold text-(--fe-text-strong) break-all leading-tight",children:i.name})]}),jsxs("div",{className:"space-y-2.5 text-[10px]",children:[jsx(j,{label:"Type",value:i.type==="directory"?"Directory":i.mimeType||i.extension||re(i.name)||"File"}),i.size!=null&&jsx(j,{label:"Size",value:Ke(i.size)}),jsx(j,{label:"Path",value:i.path,mono:true}),i.extension&&jsx(j,{label:"Extension",value:i.extension}),i.modifiedAt&&jsx(j,{label:"Modified",value:Ne(i.modifiedAt)}),i.createdAt&&jsx(j,{label:"Created",value:Ne(i.createdAt)})]}),jsxs("div",{className:"mt-auto flex flex-col gap-1.5",children:[i.type==="file"&&M&&jsxs("button",{className:"flex items-center justify-center gap-1.5 rounded-lg py-1.5 text-[10px] font-semibold uppercase tracking-wider text-(--fe-text-strong) transition-colors",style:{background:"color-mix(in srgb, var(--fe-accent) 20%, transparent)",border:"1px solid color-mix(in srgb, var(--fe-accent) 30%, transparent)"},onClick:()=>M(i),children:[jsx(ArrowUp,{className:"h-3 w-3 rotate-45"}),"Open"]}),Ue?.map(e=>jsxs("button",{className:"fe-action flex items-center justify-center gap-1.5 rounded-lg py-1.5 text-[10px] font-semibold uppercase tracking-wider text-(--fe-text) transition-colors hover:text-(--fe-text-strong)",onClick:()=>e.onClick(i),children:[e.icon&&je.createElement(e.icon,{className:"h-3 w-3"}),e.label]},e.key))]})]})})]}),jsxs("div",{className:"fe-statusbar flex h-6 shrink-0 items-center justify-between px-3 text-[9px] font-mono text-(--fe-text-muted)",children:[jsxs("span",{children:[g.length," items"]}),jsxs("div",{className:"flex items-center gap-2",children:[f.size>0&&jsxs("span",{className:"text-(--fe-accent)/70",children:[f.size," selected"]}),jsx("span",{className:"opacity-50",children:"Ctrl+Click multi-select \xB7 Esc clear"})]})]}),Qe&&!u&&jsxs(Fragment,{children:[jsx("div",{className:"absolute top-0 left-2 right-2 h-1.5 cursor-ns-resize",onMouseDown:e=>k("n",e)}),jsx("div",{className:"absolute bottom-0 left-2 right-2 h-1.5 cursor-ns-resize",onMouseDown:e=>k("s",e)}),jsx("div",{className:"absolute top-2 left-0 bottom-2 w-1.5 cursor-ew-resize",onMouseDown:e=>k("w",e)}),jsx("div",{className:"absolute top-2 right-0 bottom-2 w-1.5 cursor-ew-resize",onMouseDown:e=>k("e",e)}),jsx("div",{className:"absolute top-0 left-0 h-3 w-3 cursor-nwse-resize",onMouseDown:e=>k("nw",e)}),jsx("div",{className:"absolute top-0 right-0 h-3 w-3 cursor-nesw-resize",onMouseDown:e=>k("ne",e)}),jsx("div",{className:"absolute bottom-0 left-0 h-3 w-3 cursor-nesw-resize",onMouseDown:e=>k("sw",e)}),jsx("div",{className:"absolute bottom-0 right-0 h-3 w-3 cursor-nwse-resize",onMouseDown:e=>k("se",e)})]}),jsx("style",{children:`
|
|
1
|
+
import Qe,{createContext,useState,useRef,useEffect,useMemo,useCallback,useId,useContext}from'react';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {createPortal}from'react-dom';import {HardDrive,LayoutGrid,LayoutList,Minus,Minimize2,Maximize2,X,FolderUp,Search,CornerRightDown,Folder,ArrowUp,AlertTriangle,Trash2,FileArchive,Database,FileSpreadsheet,FileText,Terminal,FileCode,Video,Music,Image,File}from'lucide-react';import {cva}from'class-variance-authority';import {jsx,jsxs,Fragment}from'react/jsx-runtime';function u(...t){return twMerge(clsx(t))}var ke=cva("rounded-lg bg-white p-6 shadow-xl dark:bg-primary-900",{variants:{size:{sm:"w-full max-w-sm",md:"w-full max-w-lg",lg:"w-full max-w-2xl",xl:"w-full max-w-4xl",full:"h-[calc(100vh-4rem)] w-[calc(100vw-4rem)]"}},defaultVariants:{size:"md"}});cva("absolute z-50 rounded px-2 py-1 text-xs shadow-md animate-fade-in",{variants:{intent:{default:"bg-primary-900 text-white dark:bg-primary-100 dark:text-primary-900",light:"border border-primary-200 bg-white text-primary-700 dark:border-primary-600 dark:bg-primary-800 dark:text-primary-200"}},defaultVariants:{intent:"default"}});var C=[];function St(t){C.push(t);}function Lt(t){let o=C.indexOf(t);o!==-1&&C.splice(o,1);}function ze(t){return C.length>0&&C[C.length-1]===t}function Vt(t){let o=C.indexOf(t);return o!==-1?o:C.length}var Xe=createContext(null);function Ye({open:t,onOpenChange:o,modal:p=true,closeOnOutsideClick:y=false,children:v}){let c=useId();return useEffect(()=>{if(t)return St(c),()=>Lt(c)},[t,c]),useEffect(()=>{if(!t||!p)return;let L=A=>{A.key==="Escape"&&ze(c)&&o(false);};return document.addEventListener("keydown",L),()=>document.removeEventListener("keydown",L)},[t,p,o,c]),useEffect(()=>{if(!t||!p)return;let L=document.body.style.overflow;return document.body.style.overflow="hidden",()=>{document.body.style.overflow=L;}},[t,p]),t?jsx(Xe.Provider,{value:{id:c,onOpenChange:o,modal:p,closeOnOutsideClick:y},children:createPortal(v,document.body)}):null}function Ke({size:t,position:o="center",className:p,children:y,...v}){let c=useContext(Xe);if(!c)return null;let A=200+Vt(c.id)*10,J=()=>{c.closeOnOutsideClick&&ze(c.id)&&c.onOpenChange(false);},V=o==="bottom";return c.modal?jsx("div",{className:u("animate-fade-in fixed inset-0 bg-black/50",V?"flex items-end justify-center":"flex items-center justify-center p-4"),style:{zIndex:A},onClick:J,children:jsx("div",{className:u(ke({size:t}),V?"animate-slide-in-bottom w-full rounded-b-none rounded-t-(--dialog-sheet-radius) max-h-[85vh] overflow-y-auto":"animate-scale-in",p),role:"dialog","aria-modal":"true",onClick:O=>O.stopPropagation(),...v,children:y})}):jsx("div",{className:u("fixed inset-0 flex items-center justify-center p-4",c.closeOnOutsideClick?"pointer-events-auto":"pointer-events-none"),style:{zIndex:A},onClick:c.closeOnOutsideClick&&ze(c.id)?()=>c.onOpenChange(false):void 0,children:jsx("div",{className:u(ke({size:t}),"animate-scale-in pointer-events-auto shadow-2xl",p),role:"dialog",onClick:c.closeOnOutsideClick?O=>O.stopPropagation():void 0,...v,children:y})})}function $e({className:t,...o}){return jsx("div",{className:u("mb-4 space-y-1",t),...o})}function We({className:t,...o}){return jsx("h2",{className:u("text-primary-900 dark:text-primary-100 flex items-center gap-1.5 text-lg font-semibold [&_svg]:h-5 [&_svg]:w-5 [&_svg]:shrink-0",t),...o})}function qe({className:t,...o}){return jsx("p",{className:u("text-primary-500 dark:text-primary-400 text-sm",t),...o})}function Ge({className:t,...o}){return jsx("div",{className:u("mt-6 flex justify-end gap-2",t),...o})}var Ue=cva("inline-flex cursor-pointer items-center justify-center gap-1.5 rounded font-medium transition-colors disabled:pointer-events-none disabled:opacity-50 [&_svg]:shrink-0",{variants:{intent:{primary:"bg-primary-500 text-white hover:bg-primary-600 active:bg-primary-700",secondary:"bg-secondary-500 text-white hover:bg-secondary-600 active:bg-secondary-700",danger:"bg-danger-500 text-white hover:bg-danger-600 active:bg-danger-700",warning:"bg-warning-500 text-white hover:bg-warning-600 active:bg-warning-700",ghost:"bg-transparent text-primary-700 hover:bg-primary-100 active:bg-primary-200 dark:text-primary-300 dark:hover:bg-primary-800",outline:"border border-primary-300 bg-transparent text-primary-700 hover:bg-primary-50 dark:border-primary-600 dark:text-primary-300 dark:hover:bg-primary-800"},size:{sm:"h-7 px-3 text-xs [&_svg]:h-3.5 [&_svg]:w-3.5",md:"h-9 px-4 text-sm [&_svg]:h-4 [&_svg]:w-4",lg:"h-11 px-6 text-base [&_svg]:h-5 [&_svg]:w-5"}},defaultVariants:{intent:"primary",size:"md"}});cva("inline-flex items-center gap-1 rounded border font-semibold [&_svg]:shrink-0",{variants:{intent:{success:"border-success-200 bg-success-100 text-success-800 dark:border-success-800 dark:bg-success-900/30 dark:text-success-400",warning:"border-warning-200 bg-warning-100 text-warning-800 dark:border-warning-800 dark:bg-warning-900/30 dark:text-warning-400",error:"border-danger-200 bg-danger-100 text-danger-800 dark:border-danger-800 dark:bg-danger-900/30 dark:text-danger-400",info:"border-primary-200 bg-primary-100 text-primary-800 dark:border-primary-800 dark:bg-primary-900/30 dark:text-primary-400",primary:"border-secondary-200 bg-secondary-100 text-secondary-700 dark:border-secondary-700 dark:bg-secondary-800 dark:text-secondary-300"},size:{sm:"px-1.5 py-0 text-[0.625rem] [&_svg]:h-2.5 [&_svg]:w-2.5",md:"px-2.5 py-0.5 text-xs [&_svg]:h-3 [&_svg]:w-3",lg:"px-3 py-1 text-sm [&_svg]:h-3.5 [&_svg]:w-3.5"}},defaultVariants:{intent:"primary",size:"md"}});cva("absolute flex items-center justify-center rounded-full font-bold leading-none ring-2 ring-white select-none pointer-events-none z-10 dark:ring-primary-900",{variants:{intent:{danger:"bg-danger-500 text-white",success:"bg-success-500 text-white",warning:"bg-warning-500 text-white",info:"bg-primary-500 text-white",primary:"bg-secondary-500 text-white"},size:{sm:"text-[0.5rem]",md:"text-[0.625rem]",lg:"text-xs"},dot:{true:"",false:""},placement:{"top-right":"top-0 right-0 translate-x-1/2 -translate-y-1/2","top-left":"top-0 left-0 -translate-x-1/2 -translate-y-1/2","bottom-right":"bottom-0 right-0 translate-x-1/2 translate-y-1/2","bottom-left":"bottom-0 left-0 -translate-x-1/2 translate-y-1/2"}},compoundVariants:[{dot:true,size:"sm",class:"h-1.5 w-1.5 min-w-0 ring-1"},{dot:true,size:"md",class:"h-2 w-2 min-w-0"},{dot:true,size:"lg",class:"h-2.5 w-2.5 min-w-0"},{dot:false,size:"sm",class:"h-4 min-w-4 px-1"},{dot:false,size:"md",class:"h-5 min-w-5 px-1.5"},{dot:false,size:"lg",class:"h-6 min-w-6 px-2"}],defaultVariants:{intent:"danger",size:"md",dot:false,placement:"top-right"}});cva("w-full rounded-md border bg-white text-secondary-900 transition-colors placeholder:text-secondary-400 focus:outline-none focus:ring-2 dark:bg-secondary-900 dark:text-secondary-100 dark:placeholder:text-secondary-600",{variants:{state:{default:"border-secondary-300 focus:border-primary-500 focus:ring-primary-500/20 dark:border-secondary-600",error:"border-danger-400 focus:border-danger-500 focus:ring-danger-500/20"},size:{sm:"h-7 px-2 text-xs",md:"h-9 px-3 py-2 text-sm",lg:"h-11 px-4 py-2.5 text-base"}},defaultVariants:{state:"default",size:"md"}});cva("inline-flex items-center gap-1 font-medium [&_svg]:shrink-0",{variants:{size:{sm:"text-xs [&_svg]:h-3 [&_svg]:w-3",md:"text-sm [&_svg]:h-3.5 [&_svg]:w-3.5",lg:"text-base [&_svg]:h-4 [&_svg]:w-4"},intent:{default:"text-primary-700 dark:text-primary-300",muted:"text-primary-400 dark:text-primary-500",required:"text-primary-700 dark:text-primary-300 after:ml-0.5 after:text-danger-500 after:content-['*']"}},defaultVariants:{size:"md",intent:"default"}});cva("relative inline-flex shrink-0 items-center justify-center rounded border-2 transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2",{variants:{intent:{primary:"border-primary-300 dark:border-primary-600 focus-visible:ring-primary-500/40",secondary:"border-secondary-300 dark:border-secondary-600 focus-visible:ring-secondary-500/40",danger:"border-danger-300 dark:border-danger-600 focus-visible:ring-danger-500/40",warning:"border-warning-300 dark:border-warning-600 focus-visible:ring-warning-500/40",success:"border-success-300 dark:border-success-600 focus-visible:ring-success-500/40"},size:{sm:"h-4 w-4 rounded-[3px]",md:"h-5 w-5 rounded",lg:"h-6 w-6 rounded-[5px]"},checked:{on:"",off:"bg-white dark:bg-primary-900"}},compoundVariants:[{intent:"primary",checked:"on",class:"border-primary-500 bg-primary-500 dark:border-primary-500 dark:bg-primary-500"},{intent:"secondary",checked:"on",class:"border-secondary-500 bg-secondary-500 dark:border-secondary-500 dark:bg-secondary-500"},{intent:"danger",checked:"on",class:"border-danger-500 bg-danger-500 dark:border-danger-500 dark:bg-danger-500"},{intent:"warning",checked:"on",class:"border-warning-500 bg-warning-500 dark:border-warning-500 dark:bg-warning-500"},{intent:"success",checked:"on",class:"border-success-500 bg-success-500 dark:border-success-500 dark:bg-success-500"}],defaultVariants:{intent:"primary",size:"md",checked:"off"}});cva("relative inline-flex shrink-0 items-center justify-center rounded-full border-2 transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2",{variants:{intent:{primary:"border-primary-300 dark:border-primary-600 focus-visible:ring-primary-500/40",secondary:"border-secondary-300 dark:border-secondary-600 focus-visible:ring-secondary-500/40",danger:"border-danger-300 dark:border-danger-600 focus-visible:ring-danger-500/40",warning:"border-warning-300 dark:border-warning-600 focus-visible:ring-warning-500/40",success:"border-success-300 dark:border-success-600 focus-visible:ring-success-500/40"},size:{sm:"h-4 w-4",md:"h-5 w-5",lg:"h-6 w-6"},checked:{on:"",off:"bg-white dark:bg-primary-900"}},compoundVariants:[{intent:"primary",checked:"on",class:"border-primary-500 bg-primary-500 dark:border-primary-500 dark:bg-primary-500"},{intent:"secondary",checked:"on",class:"border-secondary-500 bg-secondary-500 dark:border-secondary-500 dark:bg-secondary-500"},{intent:"danger",checked:"on",class:"border-danger-500 bg-danger-500 dark:border-danger-500 dark:bg-danger-500"},{intent:"warning",checked:"on",class:"border-warning-500 bg-warning-500 dark:border-warning-500 dark:bg-warning-500"},{intent:"success",checked:"on",class:"border-success-500 bg-success-500 dark:border-success-500 dark:bg-success-500"}],defaultVariants:{intent:"primary",size:"md",checked:"off"}});cva("",{variants:{intent:{primary:"",secondary:"",danger:"",warning:"",success:""},size:{sm:"",md:"",lg:""},checked:{on:"",off:"bg-primary-300 dark:bg-primary-800"}},compoundVariants:[{intent:"primary",checked:"on",class:"bg-primary-500 dark:bg-primary-500"},{intent:"secondary",checked:"on",class:"bg-secondary-500 dark:bg-secondary-500"},{intent:"danger",checked:"on",class:"bg-danger-500 dark:bg-danger-500"},{intent:"warning",checked:"on",class:"bg-warning-500 dark:bg-warning-500"},{intent:"success",checked:"on",class:"bg-success-500 dark:bg-success-500"}],defaultVariants:{intent:"primary",size:"md",checked:"off"}});function Me({intent:t,size:o,className:p,...y}){return jsx("button",{className:u(Ue({intent:t,size:o}),p),...y})}function de(t){let o=t.lastIndexOf(".");return o>0?t.slice(o).toLowerCase():""}function tt(t){return t==null?"\u2014":t<1024?`${t} B`:t<1024*1024?`${(t/1024).toFixed(1)} KB`:t<1024*1024*1024?`${(t/(1024*1024)).toFixed(1)} MB`:`${(t/(1024*1024*1024)).toFixed(2)} GB`}function Te(t){return t?(typeof t=="string"?new Date(t):t).toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):"\u2014"}var $t={".png":Image,".jpg":Image,".jpeg":Image,".gif":Image,".svg":Image,".webp":Image,".ico":Image,".bmp":Image,".mp3":Music,".wav":Music,".flac":Music,".ogg":Music,".aac":Music,".m4a":Music,".mp4":Video,".mkv":Video,".avi":Video,".mov":Video,".wmv":Video,".webm":Video,".ts":FileCode,".tsx":FileCode,".js":FileCode,".jsx":FileCode,".json":FileCode,".html":FileCode,".css":FileCode,".scss":FileCode,".py":FileCode,".rs":FileCode,".go":FileCode,".java":FileCode,".c":FileCode,".cpp":FileCode,".h":FileCode,".sh":Terminal,".bat":Terminal,".ps1":Terminal,".md":FileText,".txt":FileText,".pdf":FileText,".doc":FileText,".docx":FileText,".rtf":FileText,".csv":FileSpreadsheet,".xls":FileSpreadsheet,".xlsx":FileSpreadsheet,".db":Database,".sqlite":Database,".sql":Database,".zip":FileArchive,".tar":FileArchive,".gz":FileArchive,".rar":FileArchive,".7z":FileArchive};function Se(t){if(t.type==="directory")return Folder;let o=t.extension||de(t.name);return $t[o]||File}function U(t,o,p){return Math.max(o,Math.min(p,t))}function rt(t){return t<480?"xs":t<640?"sm":t<1024?"md":"lg"}function nt(t,o){if(t<480)return {size:{width:t-16,height:o-48},pos:{x:8,y:24}};if(t<640){let v=t-24,c=Math.min(o-64,540);return {size:{width:v,height:c},pos:{x:12,y:32}}}if(t<1024){let v=Math.min(640,t-32),c=Math.min(480,o-64);return {size:{width:v,height:c},pos:{x:Math.max(0,Math.round((t-v)/2)),y:Math.max(0,Math.round((o-c)/2))}}}let p=720,y=520;return {size:{width:p,height:y},pos:{x:Math.max(0,Math.round((t-p)/2)),y:Math.max(0,Math.round((o-y)/2))}}}function Lr({files:t,title:o="File Explorer",accent:p="#8b5cf6",defaultView:y="list",initialPosition:v,initialSize:c,dockable:L=false,dockSide:A="right",visible:J=true,onFileOpen:V,onSelectionChange:O,onNavigate:ie,onDelete:ue,onClose:at,onMinimize:Le,onPathSubmit:Ve,defaultInputMode:st="search",actions:it,resizable:ct=true,minSize:Z={width:400,height:300},className:lt}){let[me,dt]=useState(y),[b,P]=useState(new Set),[Fe,ee]=useState(null),[l,pe]=useState(false),[te,fe]=useState(false),[F,ut]=useState(""),[R,mt]=useState(st),[pt,ft]=useState(J),[gt,ce]=useState(false),[B,bt]=useState({w:window.innerWidth,h:window.innerHeight}),Re=nt(window.innerWidth,window.innerHeight),[f,j]=useState(v??Re.pos),[k,le]=useState(c??Re.size),[z,xt]=useState(null),re=useRef(false),X$1=useRef({x:0,y:0}),ge=useRef(null),_=useRef(false),ne=useRef({x:0,y:0,w:0,h:0,px:0,py:0}),oe=useRef(false),_e=useRef(l);useEffect(()=>{_e.current=l;},[l]);let be=J!==void 0?J:pt,xe=useMemo(()=>{let e=t.filter(a=>a.type==="directory"),n=t.filter(a=>a.type==="file");return e.sort((a,s)=>a.name.localeCompare(s.name)),n.sort((a,s)=>a.name.localeCompare(s.name)),[...e,...n]},[t]),x=useMemo(()=>{if(R!=="search"||!F.trim())return xe;let e=F.toLowerCase();return xe.filter(n=>n.name.toLowerCase().includes(e))},[xe,F,R]),m=Fe!=null?x[Fe]:null;useEffect(()=>{let e=rt(window.innerWidth),n=()=>{let a=window.innerWidth,s=window.innerHeight;if(bt({w:a,h:s}),_e.current)return;let d=rt(a);if(d!==e&&!oe.current&&!c){let w=nt(a,s);le(w.size),j(w.pos);}e=d;};return window.addEventListener("resize",n),()=>window.removeEventListener("resize",n)},[c]);let Ie=useCallback((e,n)=>{P(a=>{let s=new Set(a);return n.ctrlKey||n.metaKey?s.has(e)?s.delete(e):s.add(e):(s.clear(),s.add(e)),s}),ee(e);},[]);useEffect(()=>{if(!O)return;let e=Array.from(b).map(n=>x[n]).filter(Boolean);O(e);},[b]);let He=useCallback(e=>{let n=x[e];n&&(n.type==="directory"?ie?.(n.path):V?.(n));},[x,V,ie]),ht=useCallback(e=>{l||e.target.closest("button")||(oe.current=true,re.current=true,X$1.current={x:e.clientX-f.x,y:e.clientY-f.y},e.preventDefault());},[f,l]),wt=useCallback(e=>{if(l||e.target.closest("button"))return;oe.current=true;let n=e.touches[0];re.current=true,X$1.current={x:n.clientX-f.x,y:n.clientY-f.y};},[f,l]);useEffect(()=>{let e=s=>{if(!re.current)return;let d=window.innerWidth-100,w=window.innerHeight-40;j({x:U(s.clientX-X$1.current.x,0,d),y:U(s.clientY-X$1.current.y,0,w)});},n=s=>{if(!re.current)return;s.preventDefault();let d=s.touches[0],w=window.innerWidth-100,I=window.innerHeight-40;j({x:U(d.clientX-X$1.current.x,0,w),y:U(d.clientY-X$1.current.y,0,I)});},a=()=>{re.current=false,_.current=false,document.body.style.cursor="",document.body.style.userSelect="";};return window.addEventListener("mousemove",e),window.addEventListener("mouseup",a),window.addEventListener("touchmove",n,{passive:false}),window.addEventListener("touchend",a),()=>{window.removeEventListener("mousemove",e),window.removeEventListener("mouseup",a),window.removeEventListener("touchmove",n),window.removeEventListener("touchend",a);}},[]);let M=useCallback((e,n)=>{l||(n.preventDefault(),n.stopPropagation(),oe.current=true,_.current=e,ne.current={x:n.clientX,y:n.clientY,w:k.width,h:k.height,px:f.x,py:f.y},document.body.style.cursor=e==="e"||e==="w"?"ew-resize":e==="n"||e==="s"?"ns-resize":e==="nw"||e==="se"?"nwse-resize":"nesw-resize",document.body.style.userSelect="none");},[l,k,f]),D=useCallback((e,n)=>{if(l)return;n.preventDefault(),n.stopPropagation(),oe.current=true;let a=n.touches[0];_.current=e,ne.current={x:a.clientX,y:a.clientY,w:k.width,h:k.height,px:f.x,py:f.y},document.body.style.userSelect="none";},[l,k,f]);useEffect(()=>{let e=(d,w)=>{let I=_.current;if(!I)return;let Pe=d-ne.current.x,Be=w-ne.current.y,{w:Y,h:K,px:ye,py:ve}=ne.current;if(I.includes("e")&&(Y=Math.max(Z.width,Y+Pe)),I.includes("w")){let ae=Math.max(Z.width,Y-Pe);ye=ye+(Y-ae),Y=ae;}if(I.includes("s")&&(K=Math.max(Z.height,K+Be)),I.includes("n")){let ae=Math.max(Z.height,K-Be);ve=ve+(K-ae),K=ae;}le({width:Y,height:K}),j({x:ye,y:ve});},n=d=>{_.current&&e(d.clientX,d.clientY);},a=d=>{_.current&&(d.preventDefault(),e(d.touches[0].clientX,d.touches[0].clientY));},s=()=>{_.current=false,document.body.style.cursor="",document.body.style.userSelect="";};return window.addEventListener("mousemove",n),window.addEventListener("mouseup",s),window.addEventListener("touchmove",a,{passive:false}),window.addEventListener("touchend",s),()=>{window.removeEventListener("mousemove",n),window.removeEventListener("mouseup",s),window.removeEventListener("touchmove",a),window.removeEventListener("touchend",s);}},[Z]);let Ae=useCallback(()=>{l?(z&&(j(z.pos),le(z.size)),pe(false)):(xt({pos:f,size:k}),pe(true));},[l,f,k,z]),yt=useCallback(()=>{te?fe(false):(l&&(pe(false),z&&(j(z.pos),le(z.size))),fe(true),Le?.());},[te,l,z,Le]);useEffect(()=>{if(!be||te)return;let e=n=>{if(!(!ge.current?.contains(document.activeElement)&&document.activeElement!==ge.current)){if(n.key==="Escape"&&(ee(null),P(new Set)),n.ctrlKey&&n.key==="a"){n.preventDefault();let a=new Set(x.map((s,d)=>d));P(a);}n.key==="Delete"&&b.size>0&&ue&&(n.preventDefault(),ce(true));}};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[be,te,x,b,ue]);let Oe={"--fe-accent":p};if(te)return jsx("div",{className:u("fixed z-100 cursor-pointer transition-all duration-300",A==="right"?"right-0 top-1/2 -translate-y-1/2":"left-0 top-1/2 -translate-y-1/2"),style:Oe,onClick:()=>fe(false),title:`Restore ${o}`,children:jsxs("div",{className:"fe-dock flex items-center gap-1.5 rounded-l-lg px-2 py-3 backdrop-blur-md",style:{writingMode:"vertical-rl",textOrientation:"mixed"},children:[jsx(HardDrive,{className:"h-3.5 w-3.5 text-(--fe-accent)"}),jsx("span",{className:"text-[10px] font-bold uppercase tracking-widest text-(--fe-text)",children:o})]})});if(!be)return null;let he=l?B.w:Math.min(k.width,B.w-8),vt=l?B.h:Math.min(k.height,B.h-8),kt=l?0:U(f.x,0,Math.max(0,B.w-he)),Nt=l?0:U(f.y,0,Math.max(0,B.h-40)),we=he<500;return jsxs("div",{ref:ge,className:u("fe-window fixed z-100 flex flex-col overflow-hidden","rounded-xl border border-(--fe-border)","animate-[fe-window-in_0.35s_cubic-bezier(0.16,1,0.3,1)_both]",l&&"rounded-none",lt),style:{...Oe,left:kt,top:Nt,width:he,height:vt,transition:l?"left 0.3s, top 0.3s, width 0.3s, height 0.3s":void 0},tabIndex:0,children:[jsxs("div",{className:"fe-titlebar group/titlebar flex h-10 shrink-0 cursor-grab items-center justify-between px-3 select-none active:cursor-grabbing",onMouseDown:ht,onTouchStart:wt,onDoubleClick:Ae,children:[jsxs("div",{className:"flex items-center gap-2",children:[jsx("div",{className:"flex h-5 w-5 items-center justify-center rounded",style:{background:"color-mix(in srgb, var(--fe-accent) 25%, transparent)"},children:jsx(HardDrive,{className:"h-3 w-3 text-(--fe-accent)"})}),jsx("span",{className:"text-xs font-bold uppercase tracking-widest text-(--fe-text)",children:o}),jsx("div",{className:"ml-2 hidden h-px w-20 md:block",style:{background:"linear-gradient(90deg, var(--fe-accent), transparent)",opacity:.3}})]}),jsxs("div",{className:"flex items-center gap-0.5",children:[jsx("button",{className:"fe-btn mr-1",onClick:()=>dt(e=>e==="list"?"grid":"list"),title:me==="list"?"Grid view":"List view",children:me==="list"?jsx(LayoutGrid,{className:"h-3.5 w-3.5"}):jsx(LayoutList,{className:"h-3.5 w-3.5"})}),L&&jsx("button",{className:"fe-btn",onClick:yt,title:"Dock to edge",children:jsx(Minus,{className:"h-3.5 w-3.5"})}),jsx("button",{className:"fe-btn",onClick:Ae,title:l?"Restore":"Maximize",children:l?jsx(Minimize2,{className:"h-3.5 w-3.5"}):jsx(Maximize2,{className:"h-3.5 w-3.5"})}),jsx("button",{className:"fe-btn hover:bg-red-500/40! hover:text-red-300!",onClick:()=>{at?.(),ft(false);},title:"Close",children:jsx(X,{className:"h-3.5 w-3.5"})})]})]}),jsxs("div",{className:"fe-toolbar flex h-9 shrink-0 items-center gap-2 px-3",children:[jsx("button",{className:"fe-btn p-1",onClick:()=>ie?.(".."),title:"Go up",children:jsx(FolderUp,{className:"h-3.5 w-3.5"})}),jsx("button",{className:"fe-btn shrink-0 px-1.5 py-0.5 text-[9px] font-bold uppercase tracking-wider",style:R==="navigate"?{color:"var(--fe-accent)",background:"color-mix(in srgb, var(--fe-accent) 15%, transparent)"}:void 0,onClick:()=>mt(e=>e==="search"?"navigate":"search"),title:R==="search"?"Switch to path navigation":"Switch to file search",children:R==="search"?jsx(Search,{className:"h-3 w-3"}):jsx(CornerRightDown,{className:"h-3 w-3"})}),jsx("div",{className:"relative flex-1",children:jsx("input",{type:"text",value:F,onChange:e=>ut(e.target.value),onKeyDown:e=>{e.key==="Enter"&&F.trim()&&R==="navigate"&&(Ve?Ve(F.trim()):ie?.(F.trim()));},placeholder:R==="search"?"Search files\u2026":"Enter path and press Enter\u2026",className:"h-6 w-full rounded border border-(--fe-input-border) bg-(--fe-input-bg) px-2 text-[11px] text-(--fe-text-strong) placeholder:text-(--fe-text-muted) outline-none transition-colors focus:border-(--fe-accent)/40 focus:bg-(--fe-input-bg)"})}),jsxs("span",{className:"shrink-0 font-mono text-[10px] text-(--fe-text-muted)",children:[x.length," item",x.length!==1?"s":"",b.size>0&&` \xB7 ${b.size} selected`]})]}),jsxs("div",{className:"relative flex flex-1 min-h-0",children:[jsx("div",{className:"flex-1 overflow-y-auto overflow-x-hidden p-1.5",onClick:e=>{e.target===e.currentTarget&&(P(new Set),ee(null));},children:x.length===0?jsxs("div",{className:"flex h-full flex-col items-center justify-center text-(--fe-text-muted)",children:[jsx(Folder,{className:"mb-2 h-10 w-10"}),jsx("span",{className:"text-xs",children:"No files found"})]}):me==="list"?jsx("div",{className:"space-y-px",children:x.map((e,n)=>{let a=Se(e),s=b.has(n),d=e.extension||de(e.name);return jsxs("div",{className:u("fe-item group/item flex items-center gap-2.5 rounded-lg px-2.5 py-1.5 text-(--fe-text) transition-all duration-150 cursor-pointer",s?"bg-(--fe-accent)/15 text-(--fe-text-strong)":"hover:bg-(--fe-surface-hover) hover:text-(--fe-text-strong)"),style:s?{boxShadow:"inset 2px 0 0 var(--fe-accent)"}:void 0,onClick:w=>Ie(n,w),onDoubleClick:()=>He(n),children:[jsx(a,{className:u("h-4 w-4 shrink-0",e.type==="directory"?"text-(--fe-accent)":"text-(--fe-text-muted)")}),jsx("span",{className:"flex-1 truncate text-xs font-medium",children:e.name}),d&&e.type==="file"&&jsx("span",{className:"shrink-0 rounded bg-(--fe-badge-bg) px-1.5 py-0.5 font-mono text-[9px] uppercase text-(--fe-text-muted)",children:d}),e.size!=null&&jsx("span",{className:"shrink-0 font-mono text-[10px] text-(--fe-text-muted)",children:tt(e.size)}),e.modifiedAt&&jsx("span",{className:"hidden shrink-0 font-mono text-[10px] text-(--fe-text-muted) lg:inline",children:Te(e.modifiedAt)})]},e.path+n)})}):jsx("div",{className:"grid grid-cols-[repeat(auto-fill,minmax(90px,1fr))] gap-1.5 p-1",children:x.map((e,n)=>{let a=Se(e),s=b.has(n),d=e.extension||de(e.name);return jsxs("div",{className:u("fe-item group/item flex cursor-pointer flex-col items-center gap-1 rounded-lg px-2 py-2.5 text-center transition-all duration-150",s?"bg-(--fe-accent)/15 text-(--fe-text-strong) ring-1 ring-(--fe-accent)/30":"text-(--fe-text) hover:bg-(--fe-surface-hover) hover:text-(--fe-text-strong)"),onClick:w=>Ie(n,w),onDoubleClick:()=>He(n),children:[jsx(a,{className:u("h-7 w-7",e.type==="directory"?"text-(--fe-accent)":"text-(--fe-text-muted)")}),jsx("span",{className:"w-full truncate text-[10px] font-medium leading-tight",children:e.name}),d&&e.type==="file"&&jsx("span",{className:"font-mono text-[8px] uppercase text-(--fe-text-muted)",children:d})]},e.path+n)})})}),jsx("div",{className:u("overflow-hidden transition-[width,opacity] duration-300 ease-out",we?u("absolute right-0 top-0 bottom-0 z-10",m?"w-44 opacity-100":"w-0 opacity-0 pointer-events-none"):u("shrink-0",m?"w-56":"w-0")),children:m&&jsxs("div",{className:u("flex h-full flex-col p-4",we?"fe-panel-narrow w-44":"fe-panel w-56 border-l border-(--fe-border)"),children:[we&&jsx("button",{className:"fe-btn mb-2 self-end",onClick:()=>{ee(null),P(new Set);},title:"Close panel",children:jsx(X,{className:"h-3.5 w-3.5"})}),jsxs("div",{className:"mb-3 flex flex-col items-center",children:[Qe.createElement(Se(m),{className:u("h-10 w-10 mb-2",m.type==="directory"?"text-(--fe-accent)":"text-(--fe-text-muted)")}),jsx("span",{className:"w-full text-center text-xs font-semibold text-(--fe-text-strong) break-all leading-tight",children:m.name})]}),jsxs("div",{className:"space-y-2.5 text-[10px]",children:[jsx(Q,{label:"Type",value:m.type==="directory"?"Directory":m.mimeType||m.extension||de(m.name)||"File"}),m.size!=null&&jsx(Q,{label:"Size",value:tt(m.size)}),jsx(Q,{label:"Path",value:m.path,mono:true}),m.extension&&jsx(Q,{label:"Extension",value:m.extension}),m.modifiedAt&&jsx(Q,{label:"Modified",value:Te(m.modifiedAt)}),m.createdAt&&jsx(Q,{label:"Created",value:Te(m.createdAt)})]}),jsxs("div",{className:"mt-auto flex flex-col gap-1.5",children:[m.type==="file"&&V&&jsxs("button",{className:"flex items-center justify-center gap-1.5 rounded-lg py-1.5 text-[10px] font-semibold uppercase tracking-wider text-(--fe-text-strong) transition-colors",style:{background:"color-mix(in srgb, var(--fe-accent) 20%, transparent)",border:"1px solid color-mix(in srgb, var(--fe-accent) 30%, transparent)"},onClick:()=>V(m),children:[jsx(ArrowUp,{className:"h-3 w-3 rotate-45"}),"Open"]}),it?.map(e=>jsxs("button",{className:"fe-action flex items-center justify-center gap-1.5 rounded-lg py-1.5 text-[10px] font-semibold uppercase tracking-wider text-(--fe-text) transition-colors hover:text-(--fe-text-strong)",onClick:()=>e.onClick(m),children:[e.icon&&Qe.createElement(e.icon,{className:"h-3 w-3"}),e.label]},e.key))]})]})})]}),jsxs("div",{className:"fe-statusbar flex h-6 shrink-0 items-center justify-between px-3 text-[9px] font-mono text-(--fe-text-muted)",children:[jsxs("span",{children:[x.length," items"]}),jsxs("div",{className:"flex items-center gap-2",children:[b.size>0&&jsxs("span",{className:"text-(--fe-accent)/70",children:[b.size," selected"]}),jsx("span",{className:"opacity-50",children:"Ctrl+Click multi-select \xB7 Esc clear"})]})]}),ct&&!l&&jsxs(Fragment,{children:[jsx("div",{className:"absolute top-0 left-4 right-4 h-3 cursor-ns-resize",onMouseDown:e=>M("n",e),onTouchStart:e=>D("n",e)}),jsx("div",{className:"absolute bottom-0 left-4 right-4 h-3 cursor-ns-resize",onMouseDown:e=>M("s",e),onTouchStart:e=>D("s",e)}),jsx("div",{className:"absolute top-4 left-0 bottom-4 w-3 cursor-ew-resize",onMouseDown:e=>M("w",e),onTouchStart:e=>D("w",e)}),jsx("div",{className:"absolute top-4 right-0 bottom-4 w-3 cursor-ew-resize",onMouseDown:e=>M("e",e),onTouchStart:e=>D("e",e)}),jsx("div",{className:"absolute top-0 left-0 h-6 w-6 cursor-nwse-resize",onMouseDown:e=>M("nw",e),onTouchStart:e=>D("nw",e)}),jsx("div",{className:"absolute top-0 right-0 h-6 w-6 cursor-nesw-resize",onMouseDown:e=>M("ne",e),onTouchStart:e=>D("ne",e)}),jsx("div",{className:"absolute bottom-0 left-0 h-6 w-6 cursor-nesw-resize",onMouseDown:e=>M("sw",e),onTouchStart:e=>D("sw",e)}),jsx("div",{className:"absolute bottom-0 right-0 h-6 w-6 cursor-nwse-resize",onMouseDown:e=>M("se",e),onTouchStart:e=>D("se",e)})]}),jsx("style",{children:`
|
|
2
2
|
.fe-window {
|
|
3
3
|
background: var(--fe-bg);
|
|
4
4
|
box-shadow: var(--fe-shadow);
|
|
@@ -14,6 +14,13 @@ import je,{createContext,useState,useRef,useMemo,useCallback,useEffect,useId,use
|
|
|
14
14
|
.fe-panel {
|
|
15
15
|
background: var(--fe-surface);
|
|
16
16
|
}
|
|
17
|
+
.fe-panel-narrow {
|
|
18
|
+
background: color-mix(in srgb, var(--fe-bg) 82%, transparent);
|
|
19
|
+
backdrop-filter: blur(20px) saturate(160%);
|
|
20
|
+
-webkit-backdrop-filter: blur(20px) saturate(160%);
|
|
21
|
+
border-left: 1px solid color-mix(in srgb, var(--fe-border) 80%, transparent);
|
|
22
|
+
box-shadow: -6px 0 32px rgba(0,0,0,0.35), inset 1px 0 0 color-mix(in srgb, var(--fe-accent) 10%, transparent);
|
|
23
|
+
}
|
|
17
24
|
.fe-statusbar {
|
|
18
25
|
border-top: 1px solid var(--fe-border);
|
|
19
26
|
background: var(--fe-surface);
|
|
@@ -52,4 +59,4 @@ import je,{createContext,useState,useRef,useMemo,useCallback,useEffect,useId,use
|
|
|
52
59
|
from { opacity: 0; transform: translateX(-4px); }
|
|
53
60
|
to { opacity: 1; transform: translateX(0); }
|
|
54
61
|
}
|
|
55
|
-
`}),jsx(
|
|
62
|
+
`}),jsx(Ye,{open:gt,onOpenChange:ce,children:jsxs(Ke,{size:"sm",children:[jsxs($e,{children:[jsxs(We,{children:[jsx(AlertTriangle,{className:"text-danger-500"}),"Confirm Deletion"]}),jsxs(qe,{children:[b.size===1?`Are you sure you want to delete "${x[Array.from(b)[0]]?.name}"?`:`Are you sure you want to delete ${b.size} selected items?`," ","This action cannot be undone."]})]}),jsxs(Ge,{children:[jsx(Me,{intent:"ghost",onClick:()=>ce(false),children:"Cancel"}),jsxs(Me,{intent:"danger",onClick:()=>{let e=Array.from(b).map(n=>x[n]).filter(Boolean);ue?.(e),P(new Set),ee(null),ce(false);},children:[jsx(Trash2,{className:"h-4 w-4"}),"Delete"]})]})]})})]})}function Q({label:t,value:o,mono:p}){return jsxs("div",{children:[jsx("div",{className:"mb-0.5 font-semibold uppercase tracking-wider text-(--fe-text-muted)",children:t}),jsx("div",{className:u("text-(--fe-text) break-all leading-snug",p&&"font-mono text-[9px]"),children:o})]})}export{Lr as FileExplorer};
|