1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[49921],{6780:(e,t,s)=>{s.d(t,{W:()=>f});var i=s(95155),a=s(12115),r=s(47650),l=s(20063),n=s(17740),c=s(10512),o=s(65229),d=s(26617),x=s(95740),u=s(78519),m=s(71360),h=s(7125),p=s(6191);function f(){let[e,t]=(0,a.useState)(!1),s=(0,l.useRouter)(),{items:f,removeFromCart:y,updateQuantity:g,clearCart:b,getSubtotal:j,getDiscounts:v,getTotal:N,itemCount:w}=(0,n._)(),[S,C]=(0,a.useState)(!1);return(0,a.useEffect)(()=>C(!0),[]),(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)("button",{onClick:()=>t(!0),className:"relative p-2 text-gray-400 hover:text-white transition-colors","aria-label":w>0?"Shopping cart, ".concat(w," ").concat(1===w?"item":"items"):"Shopping cart",children:[(0,i.jsx)(c.A,{className:"w-6 h-6"}),w>0&&(0,i.jsx)("span",{"aria-hidden":"true",className:"absolute -top-1 -right-1 bg-purple-600 text-white text-xs rounded-full h-5 w-5 flex items-center justify-center",children:w})]}),S&&(0,r.createPortal)((0,i.jsxs)("div",{className:"fixed inset-0 z-50 ".concat(e?"pointer-events-auto":"pointer-events-none"),children:[(0,i.jsx)("div",{className:"absolute inset-0 bg-black transition-[opacity,visibility] duration-300 ".concat(e?"opacity-50 visible":"opacity-0 invisible"),onClick:()=>t(!1)}),(0,i.jsxs)("div",{role:"dialog","aria-modal":"true","aria-label":"Shopping cart",className:"absolute right-0 top-0 h-full w-full max-w-md bg-gray-900 shadow-xl transform transition-transform duration-300 flex flex-col overflow-hidden ".concat(e?"translate-x-0":"translate-x-full"),children:[(0,i.jsxs)("div",{className:"flex items-center justify-between p-6 border-b border-gray-800",children:[(0,i.jsx)("h2",{className:"text-xl font-semibold text-white",children:"Shopping Cart"}),(0,i.jsx)("button",{onClick:()=>t(!1),className:"text-gray-400 hover:text-white transition-colors","aria-label":"Close cart",children:(0,i.jsx)(o.A,{className:"w-5 h-5"})})]}),(0,i.jsx)("div",{className:"flex-1 overflow-y-auto p-6",children:0===f.length?(0,i.jsxs)("div",{className:"text-center py-12",children:[(0,i.jsx)(c.A,{className:"w-16 h-16 text-gray-600 mx-auto mb-4"}),(0,i.jsx)("p",{className:"text-gray-400",children:"Your cart is empty"}),(0,i.jsx)("button",{onClick:()=>{t(!1),s.push("/pricing")},className:"mt-4 text-purple-400 hover:text-purple-300 transition-colors",children:"Browse products"})]}):(0,i.jsxs)("div",{className:"space-y-4",children:[f.map(e=>(0,i.jsxs)("div",{className:"bg-gray-800 rounded-lg p-4",children:[(0,i.jsxs)("div",{className:"flex items-start justify-between mb-2",children:[(0,i.jsxs)("div",{className:"flex-1",children:[(0,i.jsxs)("h3",{className:"font-medium text-white flex items-center gap-2",children:["module"===e.type&&(0,i.jsx)(d.A,{className:"w-4 h-4 text-blue-400"}),"subscription"===e.type&&(0,i.jsx)(x.A,{className:"w-4 h-4 text-purple-400"}),"credits"===e.type&&(0,i.jsx)(u.A,{className:"w-4 h-4 text-yellow-400"}),e.name]}),e.description&&(0,i.jsx)("p",{className:"text-sm text-gray-400 mt-1",children:e.description}),e.interval&&(0,i.jsxs)("p",{className:"text-sm text-gray-500 mt-1",children:["Billed ",e.interval,"ly"]}),e.credits&&(0,i.jsxs)("p",{className:"text-sm text-green-400 mt-1",children:[e.credits," credits"]})]}),(0,i.jsx)("button",{onClick:()=>y(e.id),className:"text-gray-400 hover:text-red-400 transition-colors",children:(0,i.jsx)(m.A,{className:"w-4 h-4"})})]}),(0,i.jsxs)("div",{className:"flex items-center justify-between",children:[(0,i.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,i.jsx)("button",{onClick:()=>g(e.id,e.quantity-1),className:"p-1 rounded bg-gray-700 hover:bg-gray-600 transition-colors",disabled:"subscription"===e.type,children:(0,i.jsx)(h.A,{className:"w-4 h-4"})}),(0,i.jsx)("span",{className:"w-8 text-center text-white",children:e.quantity}),(0,i.jsx)("button",{onClick:()=>g(e.id,e.quantity+1),className:"p-1 rounded bg-gray-700 hover:bg-gray-600 transition-colors",disabled:"subscription"===e.type,children:(0,i.jsx)(p.A,{className:"w-4 h-4"})})]}),(0,i.jsxs)("div",{className:"text-right",children:[(0,i.jsxs)("p",{className:"text-white font-medium",children:["$",(e.price*e.quantity).toLocaleStr
1ing("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})]}),e.quantity>1&&(0,i.jsxs)("p",{className:"text-xs text-gray-400",children:["$",e.price," each"]})]})]})]},e.id)),(0,i.jsx)("button",{onClick:b,className:"w-full text-center text-sm text-gray-400 hover:text-red-400 transition-colors py-2",children:"Clear cart"})]})}),f.length>0&&(0,i.jsxs)("div",{className:"border-t border-gray-800 p-6",children:[(0,i.jsxs)("div",{className:"space-y-2 mb-4",children:[(0,i.jsxs)("div",{className:"flex justify-between text-sm",children:[(0,i.jsx)("span",{className:"text-gray-400",children:"Subtotal"}),(0,i.jsxs)("span",{className:"text-white",children:["$",j().toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})]})]}),v()>0&&(0,i.jsxs)("div",{className:"flex justify-between text-sm",children:[(0,i.jsx)("span",{className:"text-green-400",children:"Discounts"}),(0,i.jsxs)("span",{className:"text-green-400",children:["-$",v().toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})]})]}),(0,i.jsxs)("div",{className:"flex justify-between text-lg font-semibold pt-2 border-t border-gray-700",children:[(0,i.jsx)("span",{className:"text-white",children:"Total"}),(0,i.jsxs)("span",{className:"text-white",children:["$",N().toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})]})]})]}),(0,i.jsxs)("button",{onClick:()=>{t(!1),s.push("/checkout")},className:"w-full bg-purple-600 hover:bg-purple-700 text-white font-medium py-3 rounded-lg transition-colors flex items-center justify-center space-x-2",children:[(0,i.jsx)(u.A,{className:"w-5 h-5"}),(0,i.jsx)("span",{children:"Proceed to Checkout"})]})]})]})]}),document.body)]})}},17740:(e,t,s)=>{s.d(t,{_:()=>d,e:()=>o});var i=s(95155),a=s(12115),r=s(65380),l=s(32464),n=s(98290);let c=(0,a.createContext)(void 0);function o(e){let{children:t}=e,{userId:s,isLoaded:o,isSignedIn:d}=(0,r.As)(),[x,u]=(0,a.useState)([]),[m,h]=(0,a.useState)(null),[p,f]=(0,a.useState)(!0),[y,g]=(0,a.useState)(!1);(0,a.useEffect)(()=>{let e=localStorage.getItem("vibelux_cart");if(e)try{let t=JSON.parse(e);u(t.map(e=>"module"===e.type&&e.quantity>1?{...e,quantity:1}:e))}catch(e){n.vF.error("system","Error loading cart:",e)}f(!1),g(!0)},[]),(0,a.useEffect)(()=>{y&&localStorage.setItem("vibelux_cart",JSON.stringify(x))},[x,y]);let b=(0,a.useRef)(null);(0,a.useEffect)(()=>{if(o&&y){if(!0===b.current&&!d){u([]);try{localStorage.removeItem("vibelux_cart")}catch(e){}}b.current=d}},[o,d,y]);let j=e=>{u(t=>t.filter(t=>t.id!==e))},v=()=>x.reduce((e,t)=>e+t.price*t.quantity,0),N=()=>{let e=0;return x.filter(e=>"module"===e.type).length>=3&&(e+=.1*v()),x.filter(e=>"subscription"===e.type&&"year"===e.interval).forEach(t=>{var s;let i=12*((null==(s=l.i9[t.id])?void 0:s.price)||0)-t.price;e+=i*t.quantity}),e},w=x.reduce((e,t)=>e+t.quantity,0);return(0,i.jsx)(c.Provider,{value:{items:x,addToCart:e=>{y&&(u(t=>{let s=t.findIndex(t=>t.id===e.id);if(s>-1){if("module"===e.type)return t;let i=[...t];return i[s].quantity+=1,i}return[...t,{...e,quantity:1}]}),h(e.id),setTimeout(()=>h(null),1e3))},removeFromCart:j,updateQuantity:(e,t)=>{let s=x.find(t=>t.id===e);if(s&&"module"===s.type&&(t=Math.min(t,1)),t<=0)return void j(e);u(s=>s.map(s=>s.id===e?{...s,quantity:t}:s))},clearCart:()=>{u([])},getSubtotal:v,getDiscounts:N,getTotal:()=>v()-N(),itemCount:w,isLoading:p,recentlyAdded:m},children:t})}function d(){let e=(0,a.useContext)(c);if(!e)throw Error("useCart must be used within a CartProvider");return e}},81800:(e,t,s)=>{s.d(t,{y:()=>a});var i=s(30926);let a=(0,i.createServerReference)("7f9f2f312e9065b60f60733c06c5b83d7ff1b070c9",i.callServer,void 0,i.findSourceMapURL,"invalidateCacheAction")}}]);
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.