PageSourceSearch

https://vizops360.ai/assets/finance.subscriptions-CdR9ijd5.js

js vizops360.ai collected 2026-10-05 13:52:40 UTC 7,675 bytes, 1 lines download raw bytes

1import{y as f,ax as v,d4 as y,r as s,j as e,b4 as j,cf as w,cg as S,ch as C,ci as N,cj as r,b3 as k,bN as A,bO as T,ao as D,bP as I,as as i,aI as M}from"./index-CpeGhXo5.js";const d=f("PowerOff",[["path",{d:"M18.36 6.64A9 9 0 0 1 20.77 15",key:"dxknvb"}],["path",{d:"M6.16 6.16a9 9 0 1 0 12.68 12.68",key:"1x7qb5"}],["path",{d:"M12 2v4",key:"3427ic"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]),R=[{id:"sub-aws",name:"AWS Cloud Sandbox & Staging Infrastructure",vendor:"Amazon Web Services",category:"Dev & Cloud",billingCycle:"Monthly",costAmount:48e3,currency:"INR",renewalDate:"2026-08-31",autoRenew:!0,status:"Flagged for Cancellation",ownerTeam:"DevOps & Cloud Team",notes:"Review unused Staging EC2 sandbox servers to save ₹48K/mo."},{id:"sub-figma",name:"Figma Organization Enterprise Seats",vendor:"Figma Inc.",category:"Design & UX",billingCycle:"Annual",costAmount:12e4,currency:"INR",renewalDate:"2026-09-15",autoRenew:!0,status:"Active",ownerTeam:"UI/UX Design Studio",notes:"Deactivate inactive contractor seats before annual renewal."},{id:"sub-github",name:"GitHub Enterprise Organization Plan",vendor:"GitHub Inc.",category:"Dev & Cloud",billingCycle:"Monthly",costAmount:28e3,currency:"INR",renewalDate:"2026-09-01",autoRenew:!0,status:"Active",ownerTeam:"Engineering Team"},{id:"sub-gsuite",name:"Google Workspace Enterprise Email & Drive",vendor:"Google LLC",category:"Productivity",billingCycle:"Monthly",costAmount:65e3,currency:"INR",renewalDate:"2026-09-05",autoRenew:!0,status:"Active",ownerTeam:"HR & IT Operations"},{id:"sub-zoom",name:"Zoom Business Video Conference Plan",vendor:"Zoom Video Communications",category:"Productivity",billingCycle:"Annual",costAmount:35e3,currency:"INR",renewalDate:"2026-10-10",autoRenew:!0,status:"Active",ownerTeam:"Sales & Client Success"}];function L(){v(),y();const[l,u]=s.useState(R),[o,x]=s.useState("All Categories"),[P,g]=s.useState(!1),[F,E]=s.useState({name:"",vendor:"",category:"Dev & Cloud",billingCycle:"Monthly",costAmount:"",renewalDate:new Date().toISOString().split("T")[0],ownerTeam:"Engineering",notes:""}),m=s.useMemo(()=>l.filter(t=>!(o!=="All Categories"&&t.category!==o)),[l,o]),p=s.useMemo(()=>l.filter(t=>t.status!=="Cancelled").reduce((t,a)=>t+(a.billingCycle==="Monthly"?a.costAmount:Math.round(a.costAmount/12)),0),[l]),b=s.useMemo(()=>l.filter(t=>t.status==="Flagged for Cancellation").reduce((t,a)=>t+(a.billingCycle==="Monthly"?a.costAmount*12:a.costAmount),0),[l]),h=t=>{u(a=>a.map(n=>{if(n.id===t){const c=n.status==="Flagged for Cancellation"?"Active":"Flagged for Cancellation";return M.success(`Subscription ${n.name} ${c==="Active"?"re-activated":"flagged for cancellation review!"}`),{...n,status:c}}return n}))};return e.jsxs("div",{className:"flex flex-col flex-1 h-full min-h-0 overflow-y-auto custom-scrollbar bg-slate-50/50 dark:bg-slate-950/50 pb-16",children:[e.jsx(j,{title:"SaaS & Client Tool Subscriptions Cost Control",subtitle:"Manage software tool licenses, monthly cloud bills, and cancellation alerts to optimize operational expenses",accentVar:"--mod-finance",showMonthYearFilter:!1}),e.jsxs("div",{className:"shrink-0 bg-surface/50 border-b border-slate-200 dark:border-slate-800 px-4 py-2 flex items-center justify-between flex-wrap gap-2",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs("span",{className:"text-xs font-bold text-slate-700 dark:text-slate-200",children:["Total Monthly SaaS Spend: ",e.jsxs("strong",{className:"text-purple-600 font-data",children:["₹ ",p.toLocaleString("en-IN")," / mo"]})]}),e.jsx("span",{className:"text-xs font-bold text-slate-400",children:"|"}),e.jsxs("span",{className:"text-xs font-bold text-rose-600 flex items-center gap-1",children:[e.jsx(d,{className:"w-3.5 h-3.5"})," Savings Potential from Flagged Tools: ",e.jsxs("strong",{className:"font-data",children:["₹ ",b.toLocaleString("en-IN")," / yr"]})]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(w,{value:o,onValueChange:x,children:[e.jsx(S,{className:"w-[180px] h-8 text-xs font-semibold bg-white dark:bg-slate-900 border-slate-200 dark:border-slate-800",children:e.jsx(C,{placeholder:"Category"})}),e.jsxs(N,{children:[e.jsx(r,{value:"All Categories",children:"All Categories"}),e.jsx(r,{value:"Dev & Cloud",children:"Dev & Cloud"}),e.jsx(r,{value:"Design & UX",children:"Design & UX"}),e.jsx(r,{value:"Productivity",children:"Productivity"}),e.jsx(r,{value:"Marketing & Sales",children:"Marketing & Sales"})]})]}),e.jsx(k,{delayDuration:150,children:e.jsxs(A,{children:[e.jsx(T,{asChild:!0,children:e.jsx("button",{type:"button",onClick:()=>g(!0),className:"h-8 w-8 p-0 rounded-lg bg-blue-600 hover:bg-blue-700 text-white inline-flex items-center justify-center shadow-2xs transition-colors shrink-0 cursor-pointer",children:e.jsx(D,{className:"w-4 h-4"})})}),e.jsx(I,{side:"bottom",align:"end",children:e.jsx("p",{children:"Add Tool Subscription"})})]})})]})]}),e.jsx("div",{className:"p-4 grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",children:m.map(t=>{const a=t.status==="Flagged for Cancellation";return e.jsxs("div",{className:i("p-4 bg-white dark:bg-slate-900 border rounded-2xl shadow-2xs space-y-3 transition-all flex flex-col justify-between",a?"border-rose-400 bg-rose-50/20 dark:bg-rose-950/20":"border-slate-200 dark:border-slate-800"),children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex items-start justify-between gap-2",children:[e.jsx("span",{className:"px-2.5 py-0.5 rounded-full text-[10px] font-bold bg-purple-50 text-purple-700 dark:bg-purple-950 dar
1k:text-purple-300 border border-purple-200",children:t.category}),e.jsx("span",{className:i("px-2 py-0.5 rounded text-[10px] font-bold",a?"bg-rose-100 text-rose-800 dark:bg-rose-950 dark:text-rose-300 animate-pulse":"bg-emerald-100 text-emerald-800 dark:bg-emerald-950 dark:text-emerald-300"),children:t.status})]}),e.jsx("h4",{className:"text-sm font-bold text-slate-900 dark:text-slate-100",children:t.name}),e.jsxs("p",{className:"text-[11px] text-slate-500",children:["Vendor: ",e.jsx("span",{className:"font-semibold text-slate-700 dark:text-slate-300",children:t.vendor})," | Team: ",e.jsx("span",{className:"font-semibold text-blue-600",children:t.ownerTeam})]})]}),e.jsxs("div",{className:"p-2.5 rounded-xl bg-slate-50 dark:bg-slate-800/60 border border-slate-100 dark:border-slate-800 flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("span",{className:"text-[10px] text-slate-400 uppercase font-bold block",children:"Renewal Date"}),e.jsx("span",{className:"text-xs font-bold text-slate-800 dark:text-slate-200 font-data",children:t.renewalDate})]}),e.jsxs("div",{className:"text-right",children:[e.jsxs("span",{className:"text-[10px] text-slate-400 uppercase font-bold block",children:["Cost (",t.billingCycle,")"]}),e.jsxs("span",{className:"text-sm font-black text-purple-600 dark:text-purple-400 font-data",children:["₹ ",t.costAmount.toLocaleString("en-IN")]})]})]}),t.notes&&e.jsx("p",{className:"text-[11px] text-slate-500 italic",children:t.notes}),e.jsx("div",{className:"pt-2 border-t border-slate-100 dark:border-slate-800 flex items-center justify-between",children:e.jsxs("button",{type:"button",onClick:()=>h(t.id),className:i("px-3 py-1.5 rounded-lg text-xs font-bold transition-all flex items-center gap-1 shadow-2xs w-full justify-center",a?"bg-slate-200 text-slate-700 hover:bg-slate-300":"bg-rose-600 hover:bg-rose-700 text-white"),children:[e.jsx(d,{className:"w-3.5 h-3.5"}),a?"Re-Activate Subscription":"Flag for Cancellation / Review"]})})]},t.id)})})]})}export{R as INITIAL_SUBSCRIPTIONS,L as SubscriptionsPage,L 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.