1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[74862],{474862:(e,t,a)=>{a.r(t),a.d(t,{MediaLibraryPicker:()=>K});var r=a(695155),i=a(212115),l=a(5772),s=a(980642),n=a(745399),o=a(476527),d=a(754332),c=a(117243),u=a(810029),m=a(948368),f=a(545752),h=a(332211),b=a(511526),x=a(161878),p=a(833210),g=a(494290),y=a(238798),w=a(272140),v=a(121975),j=a(506296),N=a(94514),k=a(34152),S=a(20232),A=a(541641),C=a(521362),T=a(394537),E=a(442763),M=a(562840),P=a(929991),$=a(467760),U=a(813210),F=a(140980);let z=[{value:"all",label:"All",icon:o.A},{value:"video",label:"Videos",icon:d.A},{value:"image",label:"Images",icon:c.A},{value:"audio",label:"Audio",icon:u.A},{value:"file",label:"Files",icon:m.A}],I=[{value:"all",label:"Any time"},{value:"7d",label:"7 days"},{value:"30d",label:"30 days"},{value:"90d",label:"90 days"}],B=[{value:"all",label:"All assets"},{value:"recent",label:"Recently used"},{value:"favorites",label:"Favorites"}],D=[{value:"newest",label:"Newest",icon:f.A},{value:"oldest",label:"Oldest",icon:f.A},{value:"name-asc",label:"A-Z",icon:h.A},{value:"name-desc",label:"Z-A",icon:b.A}],L={zIndex:0x7fffffbc},O={zIndex:0x7fffffc6},R={"data-media-library-layer":""},q={enter:e=>({opacity:0,x:0===e?0:e>0?28:-28,scale:.99}),center:{opacity:1,x:0,scale:1},exit:e=>({opacity:0,x:0===e?0:e>0?-28:28,scale:.99})},V={enter:e=>({opacity:0,y:e>=0?8:-8}),center:{opacity:1,y:0},exit:e=>({opacity:0,y:e>=0?-8:8})},_={duration:.22,ease:[.22,1,.36,1]};function H(e){return"image"===e.mediaType?e.thumbnailUrl||e.url:"video"===e.mediaType?e.thumbnailUrl||(0,U.L5)(e.url):void 0}function W(e){let t=e.fileSizeBytes??(e.fileSizeMb?1024*e.fileSizeMb*1024:0);return t?t<1048576?`${(t/1024).toFixed(1)} KB`:t<0x40000000?`${(t/1048576).toFixed(1)} MB`:`${(t/0x40000000).toFixed(1)} GB`:""}function J(e){if(!e)return"";let t=Math.round(e),a=Math.floor(t/60);return`${a}:${(t%60).toString().padStart(2,"0")}`}function K({open:e,onOpenChange:t,type:a="image",folder:f,uploadEndpoint:h="/api/coach/org-upload-media",title:b="Media Library",zIndex:G="z-[2147483590]",allowMultiple:X=!1,onSelect:Z,onSelectMultiple:Y,footerActions:Q}){let ee=(0,T.U)("(min-width: 768px)"),et=(0,i.useRef)(null),ea=(0,i.useRef)(new Set),er=(0,i.useRef)(!1),[ei,el]=(0,i.useState)([]),[es,en]=(0,i.useState)([]),[eo,ed]=(0,i.useState)(!1),[ec,eu]=(0,i.useState)(!1),[em,ef]=(0,i.useState)(""),[eh,eb]=(0,i.useState)(!1),ex=(0,i.useMemo)(()=>(function(e){switch(e){case"image":return["image"];case"video":return["video"];case"visual":return["image","video"];case"audio":return["audio"];case"media":return["image","video","audio"];default:return["image","video","audio","file"]}})(a),[a]),[ep,eg]=(0,i.useState)(()=>1===ex.length?ex[0]:"all"),[ey,ew]=(0,i.useState)("all"),[ev,ej]=(0,i.useState)("all"),[eN,ek]=(0,i.useState)("all"),[eS,eA]=(0,i.useState)("newest"),[eC,eT]=(0,i.useState)(1),[eE,eM]=(0,i.useState)(0),[eP,e$]=(0,i.useState)(new Set),[eU,eF]=(0,i.useState)([]),[ez,eI]=(0,i.useState)([]),[eB,eD]=(0,i.useState)(!1),[eL,eO]=(0,i.useState)(null),eR=(0,i.useMemo)(()=>`${ex.join(",")}|${ep}|${ey}|${ev}|${eN}|${eS}`,[ex,ey,eN,eS,ep,ev]),eq=(0,i.useRef)(eR);(0,i.useEffect)(()=>{eq.current=eR},[eR]),(0,i.useEffect)(()=>{eg(1===ex.length?ex[0]:"all")},[ex]);let eV=(0,i.useCallback)(async t=>{if(e){t?.silent||ed(!0);try{let e=new URLSearchParams;e.set("limit","2000"),t?.bootstrap&&e.set("bootstrap","1");let a="all"===ep?ex:[ep];e.set("mediaTypes",a.join(","));let r=function(e){if("all"===e)return;let t=new Date;return t.setDate(t.getDate()-("7d"===e?7:"30d"===e?30:90)),t.toISOString()}(ey);r&&e.set("dateFrom",r),"favorites"===ev&&e.set("favorite","true"),"all"!==eN&&e.set("folderId",eN);let i="recent"===ev?{sortBy:"lastUsedAt",sortDirection:"desc"}:function(e){switch(e){case"oldest":return{sortBy:"createdAt",sortDirection:"asc"};case"name-asc":return{sortBy:"filename",sortDirection:"asc"};case"name-desc":return{sortBy:"filename",sortDirection:"desc"};default:return{sortBy:"createdAt",sortDirection:"desc"}}}(eS);e.set("sortBy",i.sortBy),e.set("sortDirection",i.sortDirection);let l=await fetch(`/api/content/library?${e.toString()}`);if(!l.ok)throw Error("Failed to load media library");let s=await l.json();eq.current===eR&&el(s.items||[])}catch(e){console.warn("[MediaLibraryPicker] Failed to load items:",e),t?.silent||el([])}
1finally{t?.silent||ed(!1)}}},[ex,ey,eN,eR,e,eS,ep,ev]);(0,i.useEffect)(()=>{eV()},[eV]),(0,i.useEffect)(()=>{e&&fetch("/api/content/library/folders").then(e=>e.ok?e.json():Promise.reject(Error("Failed to load folders"))).then(e=>en(e.folders||[])).catch(e=>console.warn("[MediaLibraryPicker] Failed to load folders:",e))},[e]),(0,i.useEffect)(()=>{if(!e||er.current)return;er.current=!0;let t=!1;return eu(!0),eV({bootstrap:!0,silent:!0}).catch(e=>{console.warn("[MediaLibraryPicker] Existing media bootstrap failed:",e)}).finally(()=>{t||eu(!1)}),()=>{t=!0}},[eV,e]),(0,i.useEffect)(()=>{e||(e$(new Set),eF([]),eI([]),ea.current.clear(),er.current=!1,eu(!1),ef(""),eb(!1),eT(1),eO(null))},[e]);let e_=(0,i.useMemo)(()=>{let e=em.trim().toLowerCase();return ei.filter(t=>("recent"!==ev||!!t.lastUsedAt)&&(!e||`${t.filename} ${(t.tags||[]).join(" ")}`.toLowerCase().includes(e)))},[ei,em,ev]);(0,i.useEffect)(()=>{eM(0),eT(1),eO(null)},[ey,e_.length,eN,em,eS,ep,ev]),(0,i.useEffect)(()=>{eO(null)},[eC]);let eH=Math.max(1,Math.ceil(e_.length/12));(0,i.useEffect)(()=>{eT(e=>Math.min(e,eH))},[eH]);let eW=(0,i.useMemo)(()=>{let e=(Math.min(eC,eH)-1)*12;return e_.slice(e,e+12)},[e_,eC,eH]),eJ=(0,i.useMemo)(()=>{let e=new Map(ei.map(e=>[e.id,e]));return eU.map(t=>e.get(t)).filter(e=>!!e)},[ei,eU]),eK=(0,i.useCallback)(e=>{eT(t=>{let a=Math.min(Math.max(e,1),eH);return a!==t&&eM(a>t?1:-1),a})},[eH]),eG=(0,i.useCallback)(e=>{e.forEach(e=>{fetch(`/api/content/library/${e.id}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({incrementUsage:!0})}).catch(()=>{})})},[]),eX=(0,i.useCallback)((e,t)=>{eI(a=>a.map(a=>a.id===e?{...a,...t}:a))},[]),eZ=(0,i.useCallback)(async e=>{let t=Array.from(e).filter(e=>ex.includes((0,U.rr)(e)));if(0===t.length)return;let a=t.map(e=>({id:`${Date.now()}-${Math.random().toString(36).slice(2)}`,file:e,progress:0,status:"queued"}));for(let e of(a.forEach(e=>ea.current.delete(e.id)),eI(e=>[...a,...e]),a)){eX(e.id,{status:"uploading",progress:1});try{let t=await (0,U.uploadCoachMediaFile)({file:e.file,folder:f,uploadEndpoint:h,source:"library_upload",onProgress:t=>eX(e.id,{progress:t}),onAbortReady:t=>eX(e.id,{abort:t})});if(!t.libraryItem)throw Error("Upload completed but library record was not saved");eX(e.id,{status:"done",progress:100,item:t.libraryItem,abort:void 0}),el(e=>[t.libraryItem,...e.filter(e=>e.id!==t.libraryItem.id)]),X&&(e$(e=>new Set([...e,t.libraryItem.id])),eF(e=>e.includes(t.libraryItem.id)?e:[...e,t.libraryItem.id]))}catch(t){if(ea.current.has(e.id)){eX(e.id,{status:"cancelled",progress:0,error:void 0,abort:void 0});continue}eX(e.id,{status:"error",error:t instanceof Error?t.message:"Upload failed",abort:void 0})}}et.current&&(et.current.value="")},[X,ex,f,eX,h]),eY=()=>{if(X){if(0===eJ.length)return;eG(eJ),Y?.(eJ),t(!1);return}let e=eJ[0];e&&(eG([e]),Z(e),t(!1))},eQ=e=>{if(!X){e$(new Set([e.id])),eF([e.id]),eG([e]),Z(e),t(!1);return}e$(t=>{let a=new Set(t);return a.has(e.id)?a.delete(e.id):a.add(e.id),a}),eF(t=>eP.has(e.id)?t.filter(t=>t!==e.id):[...t,e.id])},e0=z.filter(e=>"all"===e.value||ex.includes(e.value)),e1=e0.find(e=>e.value===ep)||e0[0],e2=e1?.icon||o.A,e5=I.find(e=>e.value===ey)||I[0],e6=B.find(e=>e.value===ev)||B[0],e8=D.find(e=>e.value===eS)||D[0],e4=e8.icon,e3=Math.min(eC,eH),e9=0===e_.length?0:(e3-1)*12+1,e7=Math.min(e_.length,12*e3),te=(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{onDragOver:e=>{e.preventDefault(),eD(!0)},onDragLeave:e=>{e.preventDefault(),eD(!1)},onDrop:e=>{e.preventDefault(),eD(!1),e.dataTransfer.files?.length&&eZ(e.dataTransfer.files)},className:(0,F.cn)("space-y-5 pt-6",eB&&"rounded-2xl ring-2 ring-brand-accent/30 ring-offset-4 ring-offset-white dark:ring-offset-[#171b22]"),children:[(0,r.jsxs)("div",{className:"flex flex-col gap-3 md:flex-row md:items-center md:justify-between",children:[(0,r.jsxs)("div",{className:"flex min-w-0 flex-wrap items-center gap-2",children:[(0,r.jsx)(s.N,{mode:"wait",initial:!1,children:eh||em?(0,r.jsxs)(n.P.div,{initial:{width:44,opacity:0,scale:.96},animate:{width:ee?256:"100%",opacity:1,scale:1},exit:{width:44,opacity:0,scale:.96},transition:_,className:"relative flex h-11 min-w-0 items-center overflow-hidden rounded-full border border-[#e1ddd8] bg-white shadow-sm dark:border-[#262b35] dark:bg-[#11141b]",children:[(0,r.jsx)(x.A,{className:"pointer-events-none ml-3 h-4 w-4 shrink-0 text-[#8f8a85]"}),(0,r.jsx)(n.P.input,{autoFocus:!0,value:em,onChange:e=>ef(e.target.value),onKeyDown:e=>{"Escape"===e.key&&(ef(""),eb(!1))},placeholder:"Search",initial:{opacity:0,x:-6}
1,animate:{opacity:1,x:0},exit:{opacity:0,x:-6},transition:{duration:.14,ease:[.22,1,.36,1]},className:"min-w-0 flex-1 bg-transparent px-2 text-sm font-albert text-[#1a1a1a] placeholder:text-[#9a958f] focus:border-brand-accent focus:outline-none transition-colors dark:text-[#f5f5f8]"}),(0,r.jsx)(n.P.button,{type:"button",onClick:()=>{ef(""),eb(!1)},initial:{opacity:0,scale:.85},animate:{opacity:1,scale:1},exit:{opacity:0,scale:.85},transition:{duration:.14,ease:[.22,1,.36,1]},className:"mr-2 flex h-7 w-7 shrink-0 items-center justify-center rounded-full text-[#8f8a85] hover:bg-[#f3f1ef] hover:text-[#1a1a1a] dark:hover:bg-[#262b35] dark:hover:text-white","aria-label":"Close search",children:(0,r.jsx)(p.A,{className:"h-3.5 w-3.5"})})]},"search-input"):(0,r.jsx)(n.P.button,{type:"button",onClick:()=>eb(!0),initial:{opacity:0,scale:.92},animate:{opacity:1,scale:1},exit:{opacity:0,scale:.92},whileTap:{scale:.94},transition:_,className:"flex h-11 w-11 items-center justify-center rounded-full border border-[#e1ddd8] bg-white text-[#6b6560] shadow-sm transition-colors hover:border-brand-accent hover:text-brand-accent dark:border-[#262b35] dark:bg-[#11141b] dark:text-[#b2b6c2]","aria-label":"Search media",children:(0,r.jsx)(x.A,{className:"h-4 w-4"})},"search-icon")}),(0,r.jsxs)(P.l6,{value:ev,onValueChange:e=>ej(e),children:[(0,r.jsxs)(P.bq,{className:"h-11 w-auto rounded-full px-3 text-sm shadow-sm",children:[(0,r.jsx)(g.A,{className:"h-4 w-4 text-[#6b6560] dark:text-[#b2b6c2]",fill:"favorites"===ev?"currentColor":"none"}),(0,r.jsx)("span",{className:"hidden sm:inline",children:e6.label})]}),(0,r.jsx)(P.gC,{children:B.map(e=>(0,r.jsx)(P.eb,{value:e.value,children:e.label},e.value))})]}),es.length>0&&(0,r.jsxs)(P.l6,{value:eN,onValueChange:ek,children:[(0,r.jsxs)(P.bq,{className:"h-11 w-auto rounded-full px-3 text-sm shadow-sm",children:[(0,r.jsx)(y.A,{className:"h-4 w-4 text-[#6b6560] dark:text-[#b2b6c2]"}),(0,r.jsx)("span",{className:"hidden sm:inline",children:"all"===eN?"All folders":"root"===eN?"No folder":es.find(e=>e.id===eN)?.name||"Folder"})]}),(0,r.jsxs)(P.gC,{children:[(0,r.jsx)(P.eb,{value:"all",children:"All folders"}),(0,r.jsx)(P.eb,{value:"root",children:"No folder"}),es.map(e=>(0,r.jsx)(P.eb,{value:e.id,children:e.name},e.id))]})]}),(0,r.jsxs)(P.l6,{value:ep,onValueChange:e=>eg(e),children:[(0,r.jsxs)(P.bq,{className:"h-11 w-auto rounded-full px-3 text-sm shadow-sm",children:[(0,r.jsx)(e2,{className:"h-4 w-4 text-[#6b6560] dark:text-[#b2b6c2]"}),(0,r.jsx)("span",{className:"hidden sm:inline",children:e1?.label||"Type"})]}),(0,r.jsx)(P.gC,{children:e0.map(e=>{let t=e.icon;return(0,r.jsx)(P.eb,{value:e.value,children:(0,r.jsxs)("span",{className:"flex items-center gap-2",children:[(0,r.jsx)(t,{className:"h-4 w-4 text-[#8f8a85]"}),e.label]})},e.value)})})]}),(0,r.jsxs)(P.l6,{value:ey,onValueChange:e=>ew(e),children:[(0,r.jsxs)(P.bq,{className:"h-11 w-auto rounded-full px-3 text-sm shadow-sm",children:[(0,r.jsx)(w.A,{className:"h-4 w-4 text-[#6b6560] dark:text-[#b2b6c2]"}),(0,r.jsx)("span",{className:"hidden sm:inline",children:e5.label})]}),(0,r.jsx)(P.gC,{children:I.map(e=>(0,r.jsx)(P.eb,{value:e.value,children:e.label},e.value))})]}),(0,r.jsxs)(P.l6,{value:eS,onValueChange:e=>eA(e),children:[(0,r.jsxs)(P.bq,{className:"h-11 w-auto rounded-full px-3 text-sm shadow-sm",children:[(0,r.jsx)(e4,{className:"h-4 w-4 text-[#6b6560] dark:text-[#b2b6c2]"}),(0,r.jsx)("span",{className:"hidden sm:inline",children:e8.label})]}),(0,r.jsx)(P.gC,{children:D.map(e=>{let t=e.icon;return(0,r.jsx)(P.eb,{value:e.value,children:(0,r.jsxs)("span",{className:"flex items-center gap-2",children:[(0,r.jsx)(t,{className:"h-4 w-4 text-[#8f8a85]"}),e.label]})},e.value)})})]})]}),(0,r.jsxs)("button",{type:"button",onClick:()=>et.current?.click(),className:"flex h-11 shrink-0 items-center justify-center gap-2 rounded-full bg-brand-accent px-4 text-sm font-semibold text-white shadow-sm transition-colors hover:bg-brand-accent/90 font-albert",children:[(0,r.jsx)(v.A,{className:"h-4 w-4"}),"Upload media"]})]}),ec&&(0,r.jsxs)("div",{className:"flex items-center gap-2 rounded-full bg-brand-accent/10 px-3 py-2 text-xs font-semibold text-[#6b6560] dark:text-[#d6d8df] font-albert",children:[(0,r.jsx)(j.A,{className:"h-3.5 w-3.5 animate-spin text-brand-accent"}),"Finding existing media..."]}),ez.length>0&&(0,r.jsxs)("div",{className:"space-y-2 rounded-2xl border border-[#e1ddd8] bg-[#fbfaf9] p-3 dark:border-[#262b35] dark:bg-[#11141b]/70",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between",children:[(0,r.jsx)("p",{className:"text-xs font-semibold uppercase tracking-[0.08em] text-[#8f8a85] font-albert",children:"Uploads"}),(0,r.jsxs)("p",{className:"text-xs text-[#8f8a85] font-albert",children:[ez.filter(e=>"done"===e.status).length,"/",ez.length," complete"]})]}),ez.map(e=>{let t=e.item?H(e.item):void 0;return(0,r.jsxs)("div",{className:"flex items-center gap-3 rounded-xl border border-[#e8e4df] bg-white p-3 dark:border-[#262b35] dark:bg-[#171b22]",children:[(0,r.jsx)("div",{className:"flex h-12 w-12 shrink-0 items-center justify-center overflow-hidden rounded-lg bg-[#f3f1ef] dar
1k:bg-[#262b35]",children:t?(0,r.jsx)(l.default,{src:t,alt:"",width:48,height:48,className:"h-full w-full object-cover"}):e.file.type.startsWith("video/")?(0,r.jsx)(d.A,{className:"h-5 w-5 text-[#6b6560]"}):e.file.type.startsWith("audio/")?(0,r.jsx)(u.A,{className:"h-5 w-5 text-[#6b6560]"}):e.file.type.startsWith("image/")?(0,r.jsx)(c.A,{className:"h-5 w-5 text-[#6b6560]"}):(0,r.jsx)(m.A,{className:"h-5 w-5 text-[#6b6560]"})}),(0,r.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,r.jsx)("p",{className:"truncate text-sm font-semibold text-[#1a1a1a] dark:text-[#f5f5f8] font-albert",children:e.file.name}),"error"===e.status?(0,r.jsx)("p",{className:"text-xs text-red-500 font-albert",children:e.error}):"cancelled"===e.status?(0,r.jsx)("p",{className:"text-xs text-[#8f8a85] dark:text-[#8f929e] font-albert",children:"Cancelled"}):(0,r.jsx)("div",{className:"mt-1 h-1.5 overflow-hidden rounded-full bg-[#e1ddd8] dark:bg-[#262b35]",children:(0,r.jsx)("div",{className:"h-full rounded-full bg-brand-accent transition-all",style:{width:`${e.progress}%`}})})]}),"uploading"===e.status?(0,r.jsx)("button",{type:"button",onClick:()=>{ea.current.add(e.id),e.abort?.(),eX(e.id,{status:"cancelled",progress:0})},className:"flex h-8 w-8 items-center justify-center rounded-full text-[#8f8a85] hover:bg-red-50 hover:text-red-500 dark:hover:bg-red-500/10","aria-label":"Cancel upload",children:(0,r.jsx)(p.A,{className:"h-4 w-4"})}):"done"===e.status?(0,r.jsx)(N.A,{className:"h-5 w-5 text-brand-accent"}):"error"===e.status||"cancelled"===e.status?(0,r.jsx)("button",{type:"button",onClick:()=>void eZ([e.file]),className:"rounded-full px-3 py-1.5 text-xs font-semibold text-brand-accent hover:bg-brand-accent/10 font-albert",children:"Retry"}):(0,r.jsx)(j.A,{className:"h-4 w-4 animate-spin text-[#8f8a85]"})]},e.id)})]}),eo?(0,r.jsx)("div",{className:"flex min-h-[280px] items-center justify-center",children:(0,r.jsx)(j.A,{className:"h-6 w-6 animate-spin text-brand-accent"})}):0===e_.length?(0,r.jsxs)("div",{className:"flex min-h-[280px] flex-col items-center justify-center rounded-2xl border border-dashed border-[#e1ddd8] bg-[#fbfaf9] px-6 text-center dark:border-[#262b35] dark:bg-[#11141b]/60",children:[(0,r.jsx)("div",{className:"mb-3 flex h-12 w-12 items-center justify-center rounded-full bg-white text-brand-accent shadow-sm dark:bg-white/10",children:ec?(0,r.jsx)(j.A,{className:"h-5 w-5 animate-spin"}):em?(0,r.jsx)(x.A,{className:"h-5 w-5"}):(0,r.jsx)(v.A,{className:"h-5 w-5"})}),(0,r.jsx)("p",{className:"text-sm font-semibold text-[#1a1a1a] dark:text-[#f5f5f8] font-albert",children:ec?"Finding existing media":em?"No matches":"Library is empty"}),(0,r.jsx)("p",{className:"mt-1 max-w-xs text-sm text-[#8f8a85] dark:text-[#8f929e] font-albert",children:ec?"You can keep uploading while this finishes.":em?"Try another search or filter.":"Upload media once, reuse it everywhere."})]}):(0,r.jsxs)("div",{className:"space-y-4",children:[(0,r.jsx)("div",{className:"overflow-hidden",children:(0,r.jsx)(s.N,{mode:"wait",initial:!1,custom:eE,children:(0,r.jsx)(n.P.div,{custom:eE,variants:q,initial:"enter",animate:"center",exit:"exit",transition:{duration:.22,ease:[.22,1,.36,1]},className:"grid grid-cols-2 gap-3 md:grid-cols-3",children:eW.map(e=>{let t=H(e),a=eP.has(e.id),i=eL===e.id,s="video"===e.mediaType?d.A:"image"===e.mediaType?c.A:"audio"===e.mediaType?u.A:m.A;return(0,r.jsxs)(n.P.div,{role:"button",tabIndex:0,"aria-pressed":a,onClick:()=>eQ(e),onKeyDown:t=>{t.target!==t.currentTarget||("Enter"===t.key||" "===t.key)&&(t.preventDefault(),eQ(e))},whileHover:{y:-2},whileTap:{scale:.985},transition:{duration:.18,ease:[.22,1,.36,1]},className:(0,F.cn)("group cursor-pointer overflow-hidden rounded-xl border bg-white text-left shadow-sm transition-colors focus:border-brand-accent focus:outline-none dark:bg-[#11141b]",a?"border-brand-accent ring-2 ring-brand-accent/20":"border-[#e1ddd8] hover:border-brand-accent/60 hover:shadow-md dark:border-[#262b35]"),children:[(0,r.jsxs)("div",{className:"relative aspect-video bg-[#f3f1ef] dark:bg-[#262b35]",children:["video"===e.mediaType&&i?(0,r.jsx)($.VideoPlayer,{src:e.url,poster:t,autoPlay:!0,hideControls:!0,compact:!0,objectFit:"cover",className:"h-full w-full rounded-none"}):t?(0,r.jsx)(l.default,{src:t,alt:"",fill:!0,className:"object-cover",sizes:"220px"}):(0,r.jsx)("div",{className:"flex h-full w-full items-center justify-center",children:(0,r.jsx)(s,{className:"h-7 w-7 text-[#8f8a85]"})}),"video"===e.mediaType&&(0,r.jsx)("button",{type:"button",onClick:t=>{t.stopPropagation(),eO(t=>t===e.id?null:e.id)},className:"absolute right-2 top-2 z-20 flex h-7 w-7 items-center justify-center rounded-full border border-white/70 bg-white/45 text-[#3b3631] shadow-[0_6px_18px_rgba(26,26,26,0.16)] backdrop-blur-xl transition-all hover:scale-105 hover:bg-white/65 hover:text-[#1a1a1a] dark:hover:text-[#f5f5f8] focus:border-white focus:outline-none dark:border-white/20 dark:bg-white/15 dark:text-white dark:hover:bg-white/25","aria-label":i?`Pause ${e.filename}`:`Preview ${e.filename}
1`,children:i?(0,r.jsx)(k.A,{className:"h-3 w-3",fill:"currentColor"}):(0,r.jsx)(S.A,{className:"ml-0.5 h-3 w-3",fill:"currentColor"})}),a&&(0,r.jsx)("span",{className:(0,F.cn)("absolute top-2 z-20 flex h-6 w-6 items-center justify-center rounded-full bg-brand-accent text-white shadow-sm","video"===e.mediaType?"left-2":"right-2"),children:(0,r.jsx)(N.A,{className:"h-3.5 w-3.5"})})]}),(0,r.jsxs)("div",{className:"p-3",children:[(0,r.jsx)("p",{className:"truncate text-sm font-semibold text-[#1a1a1a] dark:text-[#f5f5f8] font-albert",children:e.filename}),(0,r.jsxs)("p",{className:"mt-0.5 truncate text-xs text-[#8f8a85] dark:text-[#8f929e] font-albert",children:[function(e){switch(e){case"video":return"Video";case"image":return"Image";case"audio":return"Audio";default:return"File"}}(e.mediaType),W(e)?` \xb7 ${W(e)}`:"",J(e.durationSeconds||e.durationSec)?` \xb7 ${J(e.durationSeconds||e.durationSec)}`:""]})]})]},e.id)})},`${eR}-${e3}`)})}),eH>1&&(0,r.jsxs)("div",{className:"flex items-center justify-between border-t border-[#e1ddd8]/70 pt-3 dark:border-[#262b35]",children:[(0,r.jsxs)("p",{className:"text-xs text-[#8f8a85] font-albert",children:[e9,"-",e7," of ",e_.length]}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("button",{type:"button",onClick:()=>eK(e3-1),disabled:e3<=1,className:"flex h-9 w-9 items-center justify-center rounded-full border border-[#e1ddd8] bg-white text-[#6b6560] transition-colors hover:border-brand-accent hover:text-brand-accent disabled:cursor-not-allowed disabled:opacity-40 dark:border-[#262b35] dark:bg-[#11141b] dark:text-[#b2b6c2]","aria-label":"Previous page",children:(0,r.jsx)(A.A,{className:"h-4 w-4"})}),(0,r.jsx)("span",{className:"relative flex min-w-16 justify-center overflow-hidden text-xs font-semibold text-[#6b6560] dark:text-[#b2b6c2] font-albert",children:(0,r.jsx)(s.N,{mode:"wait",initial:!1,custom:eE,children:(0,r.jsxs)(n.P.span,{custom:eE,variants:V,initial:"enter",animate:"center",exit:"exit",transition:{duration:.16,ease:[.22,1,.36,1]},children:[e3," / ",eH]},`${e3}-${eH}`)})}),(0,r.jsx)("button",{type:"button",onClick:()=>eK(e3+1),disabled:e3>=eH,className:"flex h-9 w-9 items-center justify-center rounded-full border border-[#e1ddd8] bg-white text-[#6b6560] transition-colors hover:border-brand-accent hover:text-brand-accent disabled:cursor-not-allowed disabled:opacity-40 dark:border-[#262b35] dark:bg-[#11141b] dark:text-[#b2b6c2]","aria-label":"Next page",children:(0,r.jsx)(C.A,{className:"h-4 w-4"})})]})]})]})]}),(0,r.jsx)("input",{ref:et,type:"file",multiple:!0,accept:function(e){switch(e){case"image":return"image/jpeg,image/jpg,image/png,image/webp,image/gif";case"video":return"video/mp4,video/webm,video/quicktime";case"visual":return"image/jpeg,image/jpg,image/png,image/webp,image/gif,video/mp4,video/webm,video/quicktime";case"audio":return"audio/mpeg,audio/mp3,audio/wav,audio/x-wav,audio/ogg,audio/mp4,audio/aac,audio/webm,audio/m4a,audio/x-m4a";case"media":return"image/jpeg,image/jpg,image/png,image/webp,image/gif,video/mp4,video/webm,video/quicktime,audio/mpeg,audio/mp3,audio/wav,audio/x-wav,audio/ogg,audio/mp4,audio/aac,audio/webm,audio/m4a,audio/x-m4a";default:return"*/*"}}(a),className:"hidden",onChange:e=>{e.target.files?.length&&eZ(e.target.files)}})]});return ee?(0,r.jsx)(E.lG,{open:e,onOpenChange:t,children:(0,r.jsxs)(E.Cf,{"data-media-library-layer":"",className:"!flex max-h-[85vh] max-w-4xl flex-col gap-0 overflow-hidden p-0",hideCloseButton:!0,zIndex:G,overlayStyle:L,overlayProps:R,style:O,children:[(0,r.jsxs)(E.c7,{className:"!flex-row items-center justify-between gap-3 space-y-0 px-6 py-5",children:[(0,r.jsx)(E.L3,{className:"font-albert",children:b}),(0,r.jsx)("button",{type:"button",onClick:()=>t(!1),className:"flex h-9 w-9 shrink-0 items-center justify-center rounded-full text-[#6b6560] transition-colors hover:bg-[#f3f1ef] hover:text-[#1a1a1a] dark:text-[#b2b6c2] dark:hover:bg-[#262b35] dark:hover:text-white","aria-label":"Close media library",children:(0,r.jsx)(p.A,{className:"h-4 w-4"})})]}),(0,r.jsx)(E.FE,{className:"px-6",children:te}),!X&&Q&&(0,r.jsx)(E.Es,{className:"shrink-0 flex-row flex-wrap items-center justify-between font-albert",children:Q}),X&&(0,r.jsxs)(E.Es,{className:"flex-row items-center justify-between",children:[(0,r.jsx)("p",{className:"text-sm text-[#8f8a85] font-albert",children:eJ.length?`${eJ.length} selected`:"Select media to continue"}),(0,r.jsxs)("button",{type:"button",onClick:eY,disabled:0===eJ.length,className:"h-10 rounded-xl bg-brand-accent px-4 text-sm font-semibold text-white disabled:opacity-50 font-albert",children:["Use Selected",eJ.length?` (${eJ.length})`:""]})]})]})}):(0,r.jsx)(M._s,{open:e,onOpenChange:t,children:(0,r.jsxs)(M.zj,{"data-media-library-layer":"",className:"h-[90vh] max-h-[90vh]",zIndex:G,overlayStyle:L,overlayProps:R,style:O,children:[(0,r.jsx)(M.BE,{className:"!flex !flex-row items-center justify-between gap-3 text-left",children:(0,r.jsx)(M.gk,{className:"font-albert",children:b})}),(0,r.jsx)(M.oF,{className:"px-4",children:te}),!X&&Q&&(0,r.jsx)(M.tb,{className:"flex-row flex-wrap items-center justify-between font-albert",children:Q}),X&&(0,r.jsxs)(M.tb,{className:"flex-row items-center justify-between",children:[(0,r.jsx)("p",{className:"text-sm text-[#8f8a85] font-albert",children:eJ.length?`${eJ.length} selected`:"Select media to continue"}),(0,r.jsxs)("button",{type:"button",onClick:eY,disabled:0===eJ.length,className:"h-10 rounded-xl bg-brand-accent px-4 text-sm font-semibold text-white disabled:opacity-50 font-albert",children:["Use Selected",eJ.length?` (${eJ.length})`:""]})]})]})})}},813210:(e,t,a)=>{a.d(t,{L5:()=>o,rr:()=>s,sF:()=>n,u$:()=>d,uploadCoachMediaFile:()=>m});var r=a(466542),i=a(969120);function l(e,t){let a=new Headers(e);return Object.entries(t).forEach(([e,t])=>a.set(e,t)),a}function s(e){let t=(0,i.JI)(e.name,e.type);return"video"===t||"image"===t||"audio"===t?t:"file"}function n(e){let t=e.split("?")[0].match(/\/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})(?:\/|$)/i);return t?.[1]}function o(e){let t=e.split("?")[0];if(/\/playlist\.m3u8$/i.test(t))return t.replace(/\/playlist\.m3u8$/i,"/thumbnail.jpg");let a=n(t);if(a)return`https://vz-0775a2c7-585.b-cdn.net/${a}/thumbnail.jpg`}async function d(e){try{let t=await fetch("/api/content/library",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({url:e.url,filename:e.filename,mediaType:e.mediaType,contentType:e.contentType,fileSizeBytes:e.fileSizeBytes,durationSeconds:e.durationSeconds,durationSec:e.durationSeconds,bunnyVideoId:e.bunnyVideoId,thumbnailUrl:e.thumbnailUrl,source:e.source||"upload",externalProvider:e.externalProvider,externalId:e.externalId,attributionName:e.attributionName,attributionUrl:e.attributionUrl,sourcePageUrl:e.sourcePageUrl,fileSizeMb:e.fileSizeBytes?Number((e.fileSizeBytes/1048576).toFixed(2)):void 0})});if(!t.ok)return;return(await t.json()).item}catch(e){console.warn("[MediaLibrary] Failed to record upload:",e);return}}async function c(e,t,a,r,i,l){let s=new FormData;s.append("file",e),s.append("folder",t);let n=new XMLHttpRequest;l?.(()=>n.abort());let o=await new Promise((e,t)=>
1{n.upload.onprogress=e=>{e.lengthComputable&&i?.(Math.round(e.loaded/e.total*95))},n.onload=()=>{if(n.status>=200&&n.status<300)try{e(JSON.parse(n.responseText))}catch{t(Error("Upload response was invalid"))}else{let e=`Upload failed with status ${n.status}`;try{let t=JSON.parse(n.responseText);e=t.error||t.details||e}catch{}t(Error(e))}},n.onerror=()=>t(Error("Network error during upload")),n.onabort=()=>t(Error("Upload cancelled")),n.open("POST",a),new Headers(r).forEach((e,t)=>n.setRequestHeader(t,e)),n.send(s)});return i?.(100),o}async function u(e,t,a,r,i){let s=new XMLHttpRequest;i?.(()=>s.abort()),await new Promise((a,i)=>{s.upload.onprogress=e=>{e.lengthComputable&&r?.(Math.round(e.loaded/e.total*90))},s.onload=()=>{s.status>=200&&s.status<300?a():i(Error(`Upload failed with status ${s.status}`))},s.onerror=()=>i(Error("Network error during upload")),s.onabort=()=>i(Error("Upload cancelled")),s.open("PUT",t.uploadUrl),s.setRequestHeader("Content-Type",e.type),s.send(e)}),r?.(95);let n=await fetch("/api/coach/org-make-public",{method:"POST",headers:l(a,{"Content-Type":"application/json"}),body:JSON.stringify({storagePath:t.storagePath})});if(!n.ok)throw Error((await n.json().catch(()=>({}))).error||"Failed to make file public");return r?.(100),t.publicUrl}async function m({file:e,folder:t,uploadEndpoint:a="/api/coach/org-upload-media",requestHeaders:n,preserveOriginal:o,source:f="library_upload",skipLibraryRecord:h,onProgress:b,onRetrying:x,onUploadCreated:p,onBunnyVideoCreated:g,onAbortReady:y}){let w,v=(0,i.m3)(e.name,e.type);v!==e.type&&(e=new File([e],e.name,{type:v,lastModified:e.lastModified}));var j,N,k=e;let S=s(k),A="image"===S?0xa00000:"video"===S?0x80000000:"audio"===S?524288e3:0x6400000;if(k.size>A)throw Error(`File size must be less than ${Math.floor(A/1048576)}MB`);let C=s(e),T=await (!(j=e).type.startsWith("video/")&&!j.type.startsWith("audio/")?Promise.resolve(void 0):new Promise(e=>{let t=document.createElement(j.type.startsWith("audio/")?"audio":"video"),a=URL.createObjectURL(j),r=!1,i=i=>{r||(r=!0,URL.revokeObjectURL(a),t.removeAttribute("src"),t.load(),e(Number.isFinite(i)&&i&&i>0?i:void 0))};t.preload="metadata",t.onloadedmetadata=()=>i(t.duration),t.onerror=()=>i(void 0),window.setTimeout(()=>i(void 0),5e3),t.src=a})),E="",M=e.type||"application/octet-stream",P=e.size;if(b?.(1),N=e,a.includes("/api/coach/")?!o&&(N.type.startsWith("video/")||N.type.startsWith("audio/"))?0:!(N.size>4718592):1){let r=await c(e,t,a,n,b,y);E=r.url,M=r.contentType||M,P=r.fileSizeBytes??P}else{let i=await fetch("/api/coach/org-upload-url",{method:"POST",headers:l(n,{"Content-Type":"application/json"}),body:JSON.stringify({filename:e.name,contentType:e.type,fileSize:e.size,folder:t,preserveOriginal:!0===o})});if(!i.ok)throw Error((await i.json().catch(()=>({}))).error||"Failed to get upload URL");let s=await i.json();if("bunny"===s.uploadType){if(!(w=String(s.videoId||"")))throw Error("Video upload could not be created");g?.(w);let t=null;y?.(()=>t?.abort()),await (0,r.W)({file:e,endpoint:s.tusEndpoint,headers:s.tusHeaders,metadata:{filetype:e.type,title:e.name},onUploadCreated:e=>{t=e,p?.(e)},onRetrying:x,onProgress:(e,t)=>{b?.(Math.round(e/t*100))}}),E=s.playbackUrl||`https://vz-0775a2c7-585.b-cdn.net/${w}/playlist.m3u8`}else if("firebase"===s.uploadType)E=await u(e,s,n,b,y);else if("bunny-storage"===s.uploadType){let r=await c(e,t,a,n,b,y);E=r.url,M=r.contentType||M,P=r.fileSizeBytes??P}else throw Error("Unexpected upload type")}let $={url:E,filename:e.name,mediaType:C,contentType:M,fileSizeBytes:P,fileSizeMb:Number((P/1048576).toFixed(2)),durationSeconds:T,bunnyVideoId:w};return h||($.libraryItem=await d({url:E,filename:e.name,mediaType:C,contentType:$.contentType,fileSizeBytes:P,durationSeconds:T,bunnyVideoId:w,source:f})),$}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.