Phase 2 stabilisation: code mort, Modal→Dialog, feature flags, tests, router split, Rust legacy
Bloc A - Code mort:
- Suppression Studio (components, views, features)
- Suppression gamification + services mock (projectService, storageService, gamificationService)
- Mise à jour Sidebar, Navbar, locales
Bloc B - Frontend:
- Suppression modal.tsx deprecated, Modal.stories (doublon Dialog)
- Feature flags: PLAYLIST_SEARCH, PLAYLIST_RECOMMENDATIONS, ROLE_MANAGEMENT = true
- Suppression 19 tests orphelins, retrait exclusions vitest.config
Bloc C - Backend:
- Extraction routes_auth.go depuis router.go
Bloc D - Rust:
- Suppression security_legacy.rs (code mort, patterns déjà dans security/)
2026-02-14 16:23:32 +00:00
|
|
|
import{a as r,j as e}from"./vendor-react-yWUy5XPk.js";import{t as N}from"./trackService-B9PLsYbw.js";import{j as y,l as w,C as b,B as f,S as x}from"./index-CYK_b1Uz.js";import{T as k,U as S,m as T,r as C,o as E,Y as A,C as V,af as F,j as P,g as L,ag as R}from"./vendor-icons-DJFb1Tiw.js";import{A as U}from"./avatar-iUZRi_fz.js";import{m as p,A as z}from"./vendor-motion-B3XPS3Jc.js";import"./vendor-CveO81sn.js";import"./vendor-security-DsrNJhpn.js";import"./vendor-http-Cz8wfb0q.js";import"./vendor-router-BNNHboN9.js";import"./vendor-tanstack-kPY9uK0s.js";import"./vendor-utils-DtoSyhX2.js";import"./vendor-i18n-CMcqpBLz.js";function H(){const{playTrack:s}=y(),[n,t]=r.useState("feed"),[o,l]=r.useState([]),[c,i]=r.useState(!0),[u,d]=r.useState(!1),m=r.useCallback(async()=>{i(!0),d(!1);try{const a=await N.list({limit:10,sort_by:"created_at"});l(a.tracks)}catch(a){w.error("Error loading feed tracks",{error:a instanceof Error?a.message:String(a),stack:a instanceof Error?a.stack:void 0}),d(!0)}finally{i(!1)}},[]);return r.useEffect(()=>{m()},[m]),{activeTab:n,setActiveTab:t,feedTracks:o,loading:c,error:u,retry:m,playTrack:s}}function I({activeTab:s,onTabChange:n,onProfileClick:t}){return e.jsxs("div",{className:"hidden lg:block lg:col-span-3 space-y-8",children:[e.jsxs(b,{variant:"glass",className:"p-0 overflow-hidden border-white/5 bg-black/20 backdrop-blur-xl transition-shadow duration-[var(--sumi-duration-normal)]",children:[e.jsx("div",{className:"h-20 bg-gradient-gaming"}),e.jsxs("div",{className:"px-4 pb-4",children:[e.jsx("button",{type:"button",className:"appearance-none bg-transparent border-0 p-0 block w-full text-left relative -mt-10 mb-3 cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background rounded-full",onClick:t,children:e.jsx("div",{className:"w-20 h-20 rounded-full border-4 border-border overflow-hidden bg-muted",children:e.jsx("img",{src:"https://picsum.photos/id/237/200/200",alt:"",className:"w-full h-full object-cover"})})}),e.jsx("h3",{className:"font-bold text-foreground text-lg tracking-tight",children:"My Profile"}),e.jsx("p",{className:"text-sm text-muted-foreground mb-4",children:"View your stats"})]})]}),e.jsx(b,{variant:"glass",className:"p-2 border-white/5 bg-black/20 backdrop-blur-xl",children:e.jsxs("nav",{className:"space-y-1",children:[e.jsxs(f,{variant:s==="feed"?"outline":"ghost",size:"sm",className:"w-full justify-start",onClick:()=>n("feed"),children:[e.jsx(k,{className:"w-4 h-4"})," Fresh Tracks"]}),e.jsxs(f,{variant:"ghost",size:"sm",className:"w-full justify-start",onClick:()=>n("communities"),children:[e.jsx(S,{className:"w-4 h-4"})," Communities"]})]})})]})}function M({track:s,onPlay:n}){const[t,o]=r.useState(!1),[l,c]=r.useState(s.like_count??0),[i,u]=r.useState(!1),[d,m]=r.useState(!1),a=r.useRef(null),h=r.useRef(null);r.useEffect(()=>()=>{a.current&&clearTimeout(a.current),h.current&&clearTimeout(h.current)},[]);const j=r.useCallback(()=>{o(g=>!g),c(g=>t?g-1:g+1),t||(u(!0),a.current&&clearTimeout(a.current),a.current=setTimeout(()=>u(!1),400))},[t]),v=r.useCallback(()=>{m(!0),h.current&&clearTimeout(h.current),h.current=setTimeout(()=>m(!1),1500)},[]);return e.jsx(p.div,{whileHover:{scale:1.005},transition:{duration:.2},className:"mb-4",children:e.jsxs(b,{variant:"glass",className:"p-0 overflow-hidden border-white/5 bg-black/20 backdrop-blur-xl hover:border-primary/20 transition-all duration-[var(--sumi-duration-normal)]",children:[e.jsxs("div",{className:"p-4 flex items-center gap-3",children:[e.jsx(U,{src:s.coverUrl,alt:s.artist,fallback:s.artist,size:"md",status:"online"}),e.jsxs("div",{children:[e.jsx("button",{className:"font-bold text-foreground text-sm hover:underline transition-colors text-left",children:s.artist}),e.jsx("div",{className:"text-xs text-muted-foreground",children:"uploaded a new track"})]}),e.jsx(f,{variant:"ghost",size:"sm",className:"ml-auto text-muted-foreground hover:text-foreground",children:e.jsx(T,{className:"w-4 h-4"})})]}),e.jsx("div",{className:"px-4 pb-4",c
|