1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5],{105:(e,t,s)=>{"use strict";s.d(t,{default:()=>i});var a=s(5155),r=s(2115);function i(){let[e,t]=(0,r.useState)(!1);return((0,r.useEffect)(()=>{let e=localStorage.getItem("aura_session"),s=localStorage.getItem("aura_user");t(!!(e&&s))},[]),e)?(0,a.jsx)("div",{className:"bg-amber-50 border border-amber-200 rounded-lg px-4 py-3 mb-6",children:(0,a.jsxs)("p",{className:"text-sm text-amber-900",children:[(0,a.jsx)("span",{className:"font-semibold",children:"Important:"})," AuraCamera\xae module counters must be purchased directly from Aura Imaging. Counters obtained elsewhere are unauthorized and may cause equipment damage and void your license terms."]})}):null}},7600:(e,t,s)=>{"use strict";s.d(t,{W:()=>r});class a{static getInstance(){return a.instance||(a.instance=new a),a.instance}async loadCart(){try{let e=localStorage.getItem("aura_cart");e?(this.cart=JSON.parse(e),console.log("\uD83D\uDED2 Loaded cart from localStorage:",this.cart)):(this.cart=this.createEmptyCart(),console.log("\uD83D\uDED2 Created new empty cart")),await this.syncFromServer()}catch(e){console.error("â Failed to load cart:",e),this.cart=this.createEmptyCart()}}saveCart(){if(this.cart)try{this.cart.updated_at=new Date().toISOString(),localStorage.setItem("aura_cart",JSON.stringify(this.cart)),console.log("\uD83D\uDCBE Saved cart to localStorage"),this.notifyListeners(),this.syncToServer().catch(e=>{console.error("â ï¸ Background cart sync failed:",e)})}catch(e){console.error("â Failed to save cart:",e)}}createEmptyCart(){return{id:"local-cart-"+Date.now(),items:[],total:0,item_count:0,created_at:new Date().toISOString(),updated_at:new Date().toISOString()}}calculateTotals(){this.cart&&(this.cart.total=this.cart.items.reduce((e,t)=>e+t.price*t.quantity,0),this.cart.item_count=this.cart.items.reduce((e,t)=>e+t.quantity,0))}getCart(){return this.cart||(this.cart=this.createEmptyCart()),this.cart}addItem(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;this.cart||(this.cart=this.createEmptyCart());let s=this.cart.items.find(t=>t.product_id===e.id);if(s)s.quantity+=t,console.log("\uD83D\uDED2 Updated quantity for ".concat(e.title,": ").concat(s.quantity));else{let s={id:"item-"+Date.now(),product_id:e.id,title:e.title,price:e.price,quantity:t,image:e.image,description:e.description,stripe_price_id:e.stripe_price_id,zoho_item_id:e.zoho_item_id,sku:e.sku};this.cart.items.push(s),console.log("\uD83D\uDED2 Added new item to cart: ".concat(e.title))}
1this.calculateTotals(),this.saveCart()}updateItemQuantity(e,t){if(!this.cart)return;let s=this.cart.items.find(t=>t.id===e);s&&(t<=0?this.removeItem(e):(s.quantity=t,console.log("\uD83D\uDED2 Updated quantity for item ".concat(e,": ").concat(t)),this.calculateTotals(),this.saveCart()))}removeItem(e){if(!this.cart)return;let t=this.cart.items.length;this.cart.items=this.cart.items.filter(t=>t.id!==e),this.cart.items.length<t&&(console.log("\uD83D\uDED2 Removed item from cart: ".concat(e)),this.calculateTotals(),this.saveCart())}getItemCount(){var e;return(null==(e=this.cart)?void 0:e.item_count)||0}getTotal(){var e;return(null==(e=this.cart)?void 0:e.total)||0}subscribe(e){return this.listeners.push(e),()=>{this.listeners=this.listeners.filter(t=>t!==e)}}notifyListeners(){this.cart&&this.listeners.forEach(e=>e(this.cart))}dispatchCartEvent(){window.dispatchEvent(new CustomEvent("cartUpdated",{detail:this.cart}))}reloadCart(){try{let e=localStorage.getItem("aura_cart");e&&(this.cart=JSON.parse(e),console.log("\uD83D\uDD04 Reloaded cart from storage:",this.cart),this.notifyListeners(),this.dispatchCartEvent())}catch(e){console.error("â Failed to reload cart:",e)}}
1clearCart(){this.cart=this.createEmptyCart(),this.saveCart(),this.notifyListeners(),this.dispatchCartEvent(),console.log("\uD83D\uDED2 Cart cleared")}async syncFromServer(){try{var e,t,s;let a=localStorage.getItem("aura_user"),r=a?JSON.parse(a).email:null,i=new URLSearchParams;if(r)i.append("email",r);else{if(null==(e=this.cart)||!e.id)return;i.append("cartId",this.cart.id)}let l=await fetch("/api/cart?".concat(i));if(l.ok){let e=await l.json();if(e.success&&e.cart){let a=e.cart,r=(null==(t=this.cart)?void 0:t.items.length)||0,i=a.items.length,l=new Date(a.updated_at)>new Date((null==(s=this.cart)?void 0:s.updated_at)||0);i>r||i===r&&l?(console.log("\uD83D\uDD04 Syncing cart from server (server has newer/more items)"),this.cart=a,localStorage.setItem("aura_cart",JSON.stringify(this.cart)),this.notifyListeners(),this.dispatchCartEvent()):console.log("â
Local cart is up-to-date")}}else 404===l.status?console.log("â¹ï¸ No server cart found (this is normal for new carts)"):405===l.status||502===l.status?console.log("â¹ï¸ Cart API not available (local dev mode) - using localStorage only"):console.warn("â ï¸ Failed to sync cart from server:",l.status,l.statusText)}catch(e){console.error("â ï¸ Cart sync error:",e)}}async syncToServer(){if(this.cart)try{let e=localStorage.getItem("aura_user"),t=e?JSON.parse(e).email:null,s=await fetch("/api/cart",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({cart:this.cart,email:t})});s.ok?console.log("âï¸ Cart synced to server"):405===s.status||502===s.status?console.log("â¹ï¸ Cart API not available in dev mode - localStorage only"):console.warn("â ï¸ Failed to sync cart to server:",s.status)}catch(e){console.error("â ï¸ Cart sync error:",e)}}constructor(){this.cart=null,this.listeners=[],this.loadCart()}}let r=a.getInstance()},9119:(e,t,s)=>{"use strict";s.d(t,{default:()=>l});var a=s(5155),r=s(2115),i=s(7600);function l(){let[e,t]=(0,r.useState)(null),[s,l]=(0,r.useState)(!0),[c,n]=(0,r.useState)(new Set),[o,d]=(0,r.useState)(null);(0,r.useEffect)(()=>(t(i.W.getCart()),l(!1),i.W.subscribe(e=>{t(e)})),[]);let u=(t,s)=>{n(e=>new Set(e).add(t));let a=null==e?void 0:e.items.find(e=>e.id===t);i.W.updateItemQuantity(t,s),a&&(d({message:"Updated quantity for ".concat(a.title),type:"success"}),setTimeout(()=>d(null),2e3)),setTimeout(()=>{n(e=>{let s=new Set(e);return s.delete(t),s})},300)},m=e=>new Intl.NumberFormat("en-US",{style:"currency",currency:"USD"}).format(e);return s?(0,a.jsx)("div",{className:"flex items-center justify-center py-12",children:(0,a.jsxs)("div",{className:"text-center",children:[(0,a.jsx)("div",{className:"animate-spin rounded-full h-8 w-8 border-b-2 border-ui-fg-interactive mx-auto mb-4"}),(0,a.jsx)("p",{className:"text-base-regular text-ui-fg-subtle",children:"Loading cart..."})]})}):e&&0!==e.items.length?(0,a.jsxs)("div",{className:"grid grid-cols-1 large:grid-cols-3 gap-8",children:[(0,a.jsx)("div",{className:"large:col-span-2",children:(0,a.jsxs)("div",{className:"bg-white rounded-lg border border-ui-border-base",children:[(0,a.jsx)("div",{className:"p-6 border-b border-ui-border-base",children:(0,a.jsxs)("h3",{className:"text-large-semi",children:["Cart Items (",e.item_count,")"]})}),(0,a.jsx)("div",{className:"divide-y divide-ui-border-base",children:e.items.map(t=>(0,a.jsxs)("div",{className:"p-6",children:[(0,a.jsxs)("div",{className:"flex gap-4",children:[(0,a.jsx)("div",{className:"w-20 h-20 bg-white rounded-lg flex items-center justify-center flex-shrink-0 p-1",children:t.image?(0,a.jsx)("img",{src:t.image,alt:t.title,className:"max-w-full max-h-full object-contain"}):(0,a.jsx)("div",{className:"text-ui-fg-subtle text-xl",children:"\uD83D\uDCF7"})}),(0,a.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,a.jsx)("h4",{className:"text-base-semi text-ui-fg-base mb-1",children:t.title}),t.description&&(0,a.jsx)("p",{className:"text-small-regular text-ui-fg-subtle mb-2 line-clamp-2",children:t.description}),(0,a.jsx)("p",{className:"text-base-semi text-ui-fg-base",children:m(t.price)})]}),(0,a.jsxs)("div",{className:"flex items-center gap-3 flex-shrink-0",children:[(0,a.jsxs)("div",{className:"flex items-center border border-ui-border-base rounded",children:[(0,a.jsx)("button",{onClick:()=>u(t.id,t.quantity-1),disabled:c.has(t.id)||t.quantity<=1,className:"px-3 py-2 hover:bg-ui-bg-subtle disabled:opacity-50 disabled:cursor-not-allowed",children:"â"}),(0,a.jsx)("span",{className:"px-3 py-2 min-w-[50px] text-center",children:c.has(t.id)?(0,a.jsx)("div",{className:"w-4 h-4 border-2 border-current border-t-transparent roun
1ded-full animate-spin mx-auto"}):t.quantity}),(0,a.jsx)("button",{onClick:()=>u(t.id,t.quantity+1),disabled:c.has(t.id),className:"px-3 py-2 hover:bg-ui-bg-subtle disabled:opacity-50 disabled:cursor-not-allowed",children:"+"})]}),(0,a.jsx)("button",{onClick:()=>(t=>{n(e=>new Set(e).add(t));let s=null==e?void 0:e.items.find(e=>e.id===t);i.W.removeItem(t),s&&(d({message:"Removed ".concat(s.title," from cart"),type:"success"}),setTimeout(()=>d(null),2e3))})(t.id),disabled:c.has(t.id),className:"text-ui-fg-error hover:text-red-600 disabled:opacity-50 disabled:cursor-not-allowed p-2",title:"Remove item",children:"\uD83D\uDDD1ï¸"})]})]}),(0,a.jsx)("div",{className:"mt-3 text-right",children:(0,a.jsxs)("span",{className:"text-base-semi text-ui-fg-base",children:["Subtotal: ",m(t.price*t.quantity)]})})]},t.id))})]})}),(0,a.jsx)("div",{className:"large:col-span-1",children:(0,a.jsxs)("div",{className:"bg-white rounded-lg border border-ui-border-base p-6 sticky top-24",children:[(0,a.jsx)("h3",{className:"text-large-semi mb-4",children:"Order Summary"}),(0,a.jsxs)("div",{className:"space-y-3 mb-6",children:[(0,a.jsxs)("div",{className:"flex justify-between",children:[(0,a.jsxs)("span",{className:"text-base-regular text-ui-fg-subtle",children:["Items (",e.item_count,")"]}),(0,a.jsx)("span",{className:"text-base-regular text-ui-fg-base",children:m(e.total)})]}),(0,a.jsxs)("div",{className:"flex justify-between",children:[(0,a.jsx)("span",{className:"text-base-regular text-ui-fg-subtle",children:"Shipping"}),(0,a.jsx)("span",{className:"text-base-regular text-ui-fg-base",children:"Calculated at checkout"})]}),(0,a.jsx)("div",{className:"border-t border-ui-border-base pt-3",children:(0,a.jsxs)("div",{className:"flex justify-between",children:[(0,a.jsx)("span",{className:"text-large-semi text-ui-fg-base",children:"Total"}),(0,a.jsx)("span",{className:"text-large-semi text-ui-fg-base",children:m(e.total)})]})})]}),(0,a.jsxs)("div",{className:"space-y-3",children:[(0,a.jsx)("a",{href:"/checkout",className:"w-full block text-center bg-ui-button-inverted text-ui-fg-on-inverted py-3 px-4 rounded hover:bg-ui-button-inverted-hover transition-colors",children:"Proceed to Checkout"}),(0,a.jsx)("a",{href:"/store",className:"w-full block text-center border border-ui-border-base text-ui-fg-base py-3 px-4 rounded hover:bg-ui-bg-subtle transition-colors",children:"Continue Shopping"})]})]})}),o&&(0,a.jsx)("div",{className:"fixed bottom-4 right-4 z-50 px-6 py-4 rounded-lg shadow-lg transform transition-all duration-300 ".concat("success"===o.type?"bg-green-600 text-white":"bg-red-600 text-white"),children:(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("span",{className:"text-xl",children:"success"===o.type?"â":"â"}),(0,a.jsx)("p",{className:"text-base-semi",children:o.message})]})})]}):(0,a.jsx)("div",{className:"bg-white rounded-lg border border-ui-border-base p-6",children:(0,a.jsxs)("div",{className:"text-center py-8",children:[(0,a.jsx)("div",{className:"text-4xl mb-4",children:"\uD83D\uDED2"}),(0,a.jsx)("h3",{className:"text-large-semi mb-2",children:"Your cart is empty"}),(0,a.jsx)("p",{className:"text-base-regular text-ui-fg-subtle mb-4",children:"Add some aura photography products to get started."}),(0,a.jsx)("a",{href:"/store",className:"inline-flex items-center bg-ui-button-inverted text-ui-fg-on-inverted px-6 py-2 rounded hover:bg-ui-button-inverted-hover",children:"Browse Products"})]})})}},9963:(e,t,s)=>{Promise.resolve().then(s.bind(s,9119)),Promise.resolve().then(s.bind(s,105))}},e=>{e.O(0,[441,255,358],()=>e(e.s=9963)),_N_E=e.O()}]);
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.