1import{j as e,A as U,m as z,d as y,t as g}from"./index-BwS8jYOZ.js";import{a as n,T as E,L,aM as F,ah as M,an as O,s as _}from"./lucide-icons-B2YBELY1.js";import{C as H}from"./CheckoutModal-DFFCNNNm.js";import{C,b as S,e as D,M as R}from"./shared-CZkCCbZ2.js";import"./confetti.module-C94ZD2ww.js";import"./countries-DVnaKN46.js";import"./indiaStates-BPjO21ge.js";import"./index-N9PLHKnT.js";const B=({isOpen:i,onClose:r,onConfirm:s,title:c,message:a,confirmText:l="Confirm",cancelText:u="Cancel",isLoading:o=!1,isDangerous:d=!1})=>(n.useEffect(()=>(i?document.body.style.overflow="hidden":document.body.style.overflow="unset",()=>{document.body.style.overflow="unset"}),[i]),e.jsx(U,{children:i&&e.jsxs("div",{className:"fixed inset-0 z-[9999] flex items-center justify-center p-4",children:[e.jsx(z.div,{initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},transition:{duration:.2},className:"fixed inset-0 bg-black/50 backdrop-blur-sm",onClick:o?void 0:r}),e.jsx(z.div,{initial:{opacity:0,scale:.95,y:10},animate:{opacity:1,scale:1,y:0},exit:{opacity:0,scale:.95,y:10},transition:{duration:.2},className:"relative w-full max-w-md bg-white dark:bg-zinc-900 border border-zinc-200 dark:border-zinc-800 rounded-2xl shadow-xl overflow-hidden",children:e.jsxs("div",{className:"p-6",children:[e.jsxs("div",{className:"flex items-start gap-4",children:[e.jsx("div",{className:`shrink-0 w-12 h-12 rounded-full flex items-center justify-center ${d?"bg-red-50 text-red-600 dark:bg-red-900/10 dark:text-red-500":"bg-zinc-100 text-zinc-600 dark:bg-zinc-800 dark:text-zinc-400"}`,children:e.jsx(E,{className:"w-6 h-6"})}),e.jsxs("div",{className:"flex-1",children:[e.jsx("h3",{className:"text-lg font-bold text-zinc-900 dark:text-white leading-6",children:c}),e.jsx("div",{className:"mt-2",children:e.jsx("p",{className:"text-sm text-zinc-500 dark:text-zinc-400",children:a})})]})]}),e.jsxs("div",{className:"mt-6 flex flex-col-reverse sm:flex-row gap-3 sm:justify-end",children:[e.jsx("button",{type:"button",className:"inline-flex justify-center rounded-xl border border-zinc-200 dark:border-zinc-700 bg-white dark:bg-zinc-800 px-4 py-2.5 text-sm font-medium text-zinc-700 dark:text-zinc-200 hover:bg-zinc-50 dark:hover:bg-zinc-700 focus:outline-none transition-colors disabled:opacity-50",onClick:r,disabled:o,children:u}),e.jsxs("button",{type:"button",className:`inline-flex justify-center items-center gap-2 rounded-xl px-4 py-2.5 text-sm font-medium text-white shadow-sm focus:outline-none transition-colors disabled:opacity-50 ${d?"bg-red-600 hover:bg-red-700":"bg-zinc-900 dark:bg-zinc-100 dark:text-zinc-900 hover:bg-zinc-800 dark:hover:bg-zinc-200"}`,onClick:s,disabled:o,children:[o&&e.jsx(L,{className:"w-4 h-4 animate-spin"}),l]})]})]})})]})})),Y={mobile:_,tablet:O,desktop:M},q=i=>{if(!i)return"Unknown";const r=Date.now()-new Date(i).getTime();if(Number.isNaN(r))return"Unknown";const s=Math.floor(r/6e4);if(s<1)return"Active now";if(s<60)return`${s}m ago`;const c=Math.floor(s/60);if(c<24)return`${c}h ago`;const a=Math.floor(c/24);return a<30?`${a}d ago`:new Date(i).toLocaleDateString()},G=()=>{const[i,r]=n.useState([]),[s,c]=n.useState(null),[a,l]=n.useState(null),[u,o]=n.useState(!0),[d,h]=n.useState(null),[A,k]=n.useState(!1),[I,f]=n.useState(!1),[N,v]=n.useState("USD"),p=async()=>{try{const t=await y.get("/users/devices");r(t.data.devices),c(t.data.usage),l(t.data.addonEligibility)}catch(t){console.error("Failed to load devices",t),g.error("Failed to load active devices")}finally{o(!1)}};n.useEffect(()=>{p()},[]),n.useEffect(()=>{(async()=>{try{const j=await y.get("/payments/location");v(j.data.country_code==="IN"?"INR":"USD")}catch{v("USD")}})()},[]);const T=async()=>{if(d){k(!0);try{await y.delete(`/users/devices/${d}`),g.success("Device removed"),p(),h(null)}catch{g.error("Failed to remove device")}finally{k(!1)}}},m=(a==null?void 0:a.canPurchase)??!1,w=(a==null?void 0:a.reason)||"Cannot add device slots";if(u)return e.jsxs("div",{className:"space-y-5",children:[e.jsx("div",{className:`${C} p-5`,children:e.jsx(S,{rows:2})}),e.jsx("div",{className:`${C} p-5`,children:e.jsx(S,{rows:3})})]});const b=(s==null?void 0:s.current)??0,x=(s==null?void 0:s.max)??1,$=x>0?Math.min(100,Math.round(b/x*100)):0;return e.jsxs("div",{className:"space-y-5 ss-rise",children:[e.jsx(D,{title:"Device limit",description:"How many devices can be signed in to your account at once.",children:e.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-end gap-4",children:[e.jsxs("div",{className:"min-w-0 sm:flex-1",children:[e.jsxs("p",{className:"font-mono tabular-nums text-2xl font-semibold text-zinc-900 dark:text-zinc-100",children:[b,e.jsxs("span",{className:"text-zinc-400 dark:text-zinc-500",children:[" / ",x]})]}),e.jsx("div",{className:"mt-2 h-1.5 rounded-full bg-zinc-200 dark:bg-white/10 overflow-hidden",role:"progressbar","aria-valuenow":b,"aria-valuemin":0,"aria-valuemax":x,"aria-label":"Devices used",children:e.jsx("div",{className:"h-full rounded-full bg-[color:var(--accent-ink)] dark:bg-[color:var(--accent-ink-dark)]",style:{width:`${$}%`}})})]}),e.jsxs("div",{className:"shrink-0",children:[e.jsxs("button",{onClick:()=>m&&f(!0),disabled:!m,title:m?void 0:w,className:"min-h-[44px] px-4 roun
1ded-xl bg-zinc-900 dark:bg-zinc-100 text-white dark:text-zinc-900 text-sm font-medium hover:opacity-90 transition-opacity disabled:opacity-40 disabled:cursor-not-allowed inline-flex items-center gap-2",children:[e.jsx(F,{className:"w-4 h-4","aria-hidden":"true"}),"Add slot"]}),!m&&e.jsx("p",{className:`${R} mt-2 max-w-[16rem]`,children:w})]})]})}),e.jsx(D,{title:"Your devices",description:"Remove a device to sign it out immediately.",children:i.length===0?e.jsx("p",{className:"text-sm text-zinc-500 dark:text-zinc-400",children:"No active devices found."}):e.jsx("ul",{className:"divide-y divide-zinc-200 dark:divide-white/10",children:i.map(t=>{const j=Y[t.deviceType]??M,P=[t.browser,t.os].filter(Boolean).join(" · ");return e.jsxs("li",{className:"flex flex-col sm:flex-row sm:items-center gap-3 sm:gap-4 py-3.5",children:[e.jsx("span",{className:"w-9 h-9 shrink-0 rounded-lg bg-zinc-100 dark:bg-white/5 flex items-center justify-center text-zinc-500 dark:text-zinc-400",children:e.jsx(j,{className:"w-4 h-4","aria-hidden":"true"})}),e.jsxs("div",{className:"min-w-0 sm:flex-1",children:[e.jsx("p",{className:"text-sm font-medium text-zinc-900 dark:text-zinc-100 truncate",children:t.deviceName||P||"Unknown device"}),e.jsxs("p",{className:`${R} mt-0.5 truncate`,children:[t.lastIpAddress||"Unknown IP"," ·"," ",q(t.lastActiveAt)
1]})]}),e.jsx("button",{onClick:()=>h(t.id),className:"shrink-0 min-h-[44px] px-4 rounded-xl text-sm font-medium text-red-600 dark:text-red-400 hover:bg-red-50 dark:hover:bg-red-500/10 transition-colors",children:"Remove"})]},t.id)})})}),e.jsx(J,{isOpen:I,onClose:()=>f(!1),onSuccess:()=>{f(!1),p()},currency:N,price:N==="INR"?83.9:2,onCountryChange:t=>v(t==="IN"?"INR":"USD")}),e.jsx(B,{isOpen:!!d,onClose:()=>h(null),onConfirm:T,title:"Remove device",message:"This device will be signed out immediately.",confirmText:"Remove device",isDangerous:!0,isLoading:A})]})},J=({isOpen:i,onClose:r,onSuccess:s,currency:c,price:a,onCountryChange:l})=>e.jsx(H,{isOpen:i,onClose:r,planId:"device-slot",billingPeriod:"one-time",price:a,currency:c,orderType:"device_addon",onCountryChange:l,onSuccess:s}),se=()=>e.jsx(G,{});export{se as default};
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.