{"version":3,"file":"shared-lib.Zudn3w_T.mjs","names":["e","t","r","n","l","p","e"],"sources":["https:/ga.jspm.io/npm:zustand@3.7.1/esm/index.js","https:/framerusercontent.com/modules/znmeN2mKRItnf7zyDZ26/49QFzFB7TtH07r2lIb7I/ShopifyStore.js","https:/framerusercontent.com/modules/yE0b0hlG3VS4LJFTDOlw/KwXZEo7gJXkGfAGhvwUR/Cropped_Text_1.js"],"sourcesContent":["import{useEffect as t,useLayoutEffect as e,useReducer as n,useRef as r,useDebugValue as c}from\"react\";function createStore(t){let e;const n=new Set;const setState=(t,r)=>{const c=\"function\"===typeof t?t(e):t;if(c!==e){const t=e;e=r?c:Object.assign({},e,c);n.forEach((n=>n(e,t)))}};const getState=()=>e;const subscribeWithSelector=(t,r=getState,c=Object.is)=>{console.warn(\"[DEPRECATED] Please use `subscribeWithSelector` middleware\");let o=r(e);function listenerToAdd(){const n=r(e);if(!c(o,n)){const e=o;t(o=n,e)}}n.add(listenerToAdd);return()=>n.delete(listenerToAdd)};const subscribe=(t,e,r)=>{if(e||r)return subscribeWithSelector(t,e,r);n.add(t);return()=>n.delete(t)};const destroy=()=>n.clear();const r={setState:setState,getState:getState,subscribe:subscribe,destroy:destroy};e=t(setState,getState,r);return r}const o=\"undefined\"===typeof window||!window.navigator||/ServerSideRendering|^Deno\\//.test(window.navigator.userAgent);const s=o?t:e;function create(t){const e=\"function\"===typeof t?createStore(t):t;const useStore=(t=e.getState,o=Object.is)=>{const[,u]=n((t=>t+1),0);const i=e.getState();const a=r(i);const d=r(t);const l=r(o);const f=r(false);const S=r();void 0===S.current&&(S.current=t(i));let b;let g=false;if(a.current!==i||d.current!==t||l.current!==o||f.current){b=t(i);g=!o(S.current,b)}s((()=>{g&&(S.current=b);a.current=i;d.current=t;l.current=o;f.current=false}));const w=r(i);s((()=>{const listener=()=>{try{const t=e.getState();const n=d.current(t);if(!l.current(S.current,n)){a.current=t;S.current=n;u()}}catch(t){f.current=true;u()}};const t=e.subscribe(listener);e.getState()!==w.current&&listener();return t}),[]);const p=g?b:S.current;c(p);return p};Object.assign(useStore,e);useStore[Symbol.iterator]=function(){console.warn(\"[useStore, api] = create() is deprecated and will be removed in v4\");const t=[useStore,e];return{next(){const e=t.length<=0;return{value:t.shift(),done:e}}}};return useStore}export{create as default};\n\n//# sourceMappingURL=index.js.map","import{jsx as _jsx,Fragment as _Fragment}from\"react/jsx-runtime\";import React from\"react\";import create from\"zustand\";import{addPropertyControls,ControlType}from\"framer\";// ============================================================================\n// PKCE Utilities for OAuth2\n// ============================================================================\nfunction generateCodeVerifier(){const array=new Uint8Array(32);crypto.getRandomValues(array);return base64UrlEncode(array);}async function generateCodeChallenge(verifier){const encoder=new TextEncoder;const data=encoder.encode(verifier);const digest=await crypto.subtle.digest(\"SHA-256\",data);return base64UrlEncode(new Uint8Array(digest));}function base64UrlEncode(buffer){let binary=\"\";for(let i=0;i<buffer.byteLength;i++){binary+=String.fromCharCode(buffer[i]);}return btoa(binary).replace(/\\+/g,\"-\").replace(/\\//g,\"_\").replace(/=+$/,\"\");}function generateState(){const array=new Uint8Array(16);crypto.getRandomValues(array);return base64UrlEncode(array);}function generateNonce(){const array=new Uint8Array(16);crypto.getRandomValues(array);return base64UrlEncode(array);}function storePKCEParams(params){sessionStorage.setItem(\"shopify_pkce_verifier\",params.codeVerifier);sessionStorage.setItem(\"shopify_pkce_state\",params.state);sessionStorage.setItem(\"shopify_pkce_nonce\",params.nonce);}function getPKCEParams(){return{codeVerifier:sessionStorage.getItem(\"shopify_pkce_verifier\"),state:sessionStorage.getItem(\"shopify_pkce_state\"),nonce:sessionStorage.getItem(\"shopify_pkce_nonce\")};}function clearPKCEParams(){sessionStorage.removeItem(\"shopify_pkce_verifier\");sessionStorage.removeItem(\"shopify_pkce_state\");sessionStorage.removeItem(\"shopify_pkce_nonce\");}// ============================================================================\n// Token Storage Helpers\n// ============================================================================\nfunction storeOAuthTokens(tokens){localStorage.setItem(\"shopify_oauth_access_token\",tokens.accessToken);localStorage.setItem(\"shopify_oauth_refresh_token\",tokens.refreshToken);localStorage.setItem(\"shopify_oauth_token_expiry\",tokens.expiresAt);if(tokens.idToken){localStorage.setItem(\"shopify_oauth_id_token\",tokens.idToken);}localStorage.setItem(\"isAuthenticated\",\"true\");}function getOAuthTokens(){const accessToken=localStorage.getItem(\"shopify_oauth_access_token\");const refreshToken=localStorage.getItem(\"shopify_oauth_refresh_token\");const expiresAt=localStorage.getItem(\"shopify_oauth_token_expiry\");const idToken=localStorage.getItem(\"shopify_oauth_id_token\");if(!accessToken||!refreshToken||!expiresAt)return null;return{accessToken,refreshToken,expiresAt,idToken:idToken||undefined};}function clearOAuthTokens(){localStorage.removeItem(\"shopify_oauth_access_token\");localStorage.removeItem(\"shopify_oauth_refresh_token\");localStorage.removeItem(\"shopify_oauth_token_expiry\");localStorage.removeItem(\"shopify_oauth_id_token\");}function isOAuthAuthenticated(){const tokens=getOAuthTokens();return tokens!==null;}// ============================================================================\n// Zustand Store\n// ============================================================================\nexport const useShopifyStore=create((set,get)=>({// Initial state\n    product:null,cart:(()=>{try{const stored=localStorage.getItem(\"cart\");if(!stored)return[];const parsed=JSON.parse(stored);// Filter out any invalid items on load\n    return Array.isArray(parsed)?parsed.filter(item=>item&&item.product&&item.product.variantId&&item.quantity>0):[];}catch{return[];}})(),cartCount:(()=>{try{const stored=localStorage.getItem(\"cart\");if(!stored)return 0;const parsed=JSON.parse(stored);if(!Array.isArray(parsed))return 0;return parsed.filter(item=>item&&item.quantity>0).reduce((total,item)=>total+item.quantity,0);}catch{return 0;}})(),selectedQuantity:1,storefrontUrl:\"\",accessToken:\"\",// Customer Account API credentials\n    shopId:\"\",clientId:\"\",redirectUri:\"\",customer:null,isAuthenticated:(()=>{// Check OAuth tokens first\n    if(typeof window!==\"undefined\"){const oauthToken=localStorage.getItem(\"shopify_oauth_access_token\");if(oauthToken)return true;}// Fall back to legacy check\n    return Boolean(localStorage.getItem(\"isAuthenticated\")===\"true\");})(),customerAccessToken:localStorage.getItem(\"customerAccessToken\")||null,tokenExpiry:localStorage.getItem(\"tokenExpiry\")||null,isLoading:false,lastEmailUsed:localStorage.getItem(\"lastEmailUsed\")||null,authError:null,// Credential setters\n    setStorefrontUrl:url=>set({storefrontUrl:url}),setAccessToken:token=>set({accessToken:token}),setCustomerAccountCredentials:(shopId,clientId,redirectUri)=>{set({shopId,clientId,redirectUri});// If already authenticated via OAuth, fetch the customer profile now that we have shopId\n    if(isOAuthAuthenticated()){set({isAuthenticated:true});get().fetchOAuthCustomerProfile();}},// ========================================================================\n    // Product & Cart Actions\n    // ========================================================================\n    fetchProduct:async()=>{const{storefrontUrl,accessToken}=get();if(!storefrontUrl||!accessToken){console.error(\"Shopify credentials are not set!\");return;}const query=`\n        {\n            products(first: 1) {\n                edges {\n                    node {\n                        id\n                        title\n                        description\n                        totalInventory\n                        priceRange {\n                            minVariantPrice {\n                                amount\n                                currencyCode\n                            }\n                        }\n                        images(first: 10) {\n                            edges {\n                                node {\n                                    src\n                                }\n                            }\n                        }\n                        variants(first: 5) {\n                            edges {\n                                node {\n                                    id\n                                    title\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n        }\n        `;try{const response=await fetch(storefrontUrl,{method:\"POST\",headers:{\"Content-Type\":\"application/json\",\"X-Shopify-Storefront-Access-Token\":accessToken},body:JSON.stringify({query})});const data=await response.json();const productData=data.data.products.edges[0].node;set({product:{id:productData.id,title:productData.title,description:productData.description,price:productData.priceRange.minVariantPrice.amount,currency:productData.priceRange.minVariantPrice.currencyCode,stock:productData.totalInventory,variantId:productData.variants.edges[0]?.node.id||\"\",images:productData.images.edges.map(img=>img.node.src),variants:productData.variants.edges.map(variant=>({id:variant.node.id,title:variant.node.title}))}});}catch(error){console.error(\"Error fetching product:\",error);}},setSelectedQuantity:quantity=>set({selectedQuantity:quantity}),addToCart:()=>{const{product,cart,selectedQuantity}=get();if(!product)return;const existingItemIndex=cart.findIndex(item=>item.product.variantId===product.variantId);let updatedCart;if(existingItemIndex>=0){updatedCart=cart.map((item,index)=>{if(index===existingItemIndex){return{...item,quantity:item.quantity+selectedQuantity};}return item;});}else{updatedCart=[...cart,{product,quantity:selectedQuantity}];}const updatedCount=updatedCart.reduce((total,item)=>total+item.quantity,0);set({cart:updatedCart,cartCount:updatedCount});localStorage.setItem(\"cart\",JSON.stringify(updatedCart));localStorage.setItem(\"cartCount\",JSON.stringify(updatedCount));},updateQuantity:(productId,quantity)=>{const{cart}=get();// If quantity is 0 or less, filter out the item entirely\n    const updatedCart=cart.map(item=>item.product.id===productId?{...item,quantity}:item).filter(item=>item.quantity>0);const updatedCartCount=updatedCart.reduce((total,item)=>total+item.quantity,0);set({cart:updatedCart,cartCount:updatedCartCount});localStorage.setItem(\"cart\",JSON.stringify(updatedCart));localStorage.setItem(\"cartCount\",JSON.stringify(updatedCartCount));},removeFromCart:productId=>{const{cart}=get();const updatedCart=cart.filter(item=>item.product.id!==productId);const updatedCartCount=updatedCart.reduce((total,item)=>total+item.quantity,0);set({cart:updatedCart,cartCount:updatedCartCount});localStorage.setItem(\"cart\",JSON.stringify(updatedCart));localStorage.setItem(\"cartCount\",JSON.stringify(updatedCartCount));},clearCart:()=>{set({cart:[],cartCount:0});localStorage.setItem(\"cart\",JSON.stringify([]));localStorage.setItem(\"cartCount\",JSON.stringify(0));},createCheckout:async()=>{const{cart,storefrontUrl,accessToken,customer,isAuthenticated}=get();if(!storefrontUrl||!accessToken){console.error(\"Shopify credentials missing:\",{storefrontUrl,accessToken});alert(\"Shopify credentials are missing!\");return;}// Filter cart to only include valid items with quantity > 0\n    const validCartItems=cart.filter(item=>item&&item.product&&item.product.variantId&&item.quantity>0);if(validCartItems.length===0){alert(\"Your cart is empty. Please add items to the cart first.\");return;}// Build line items for Cart API\n    const lines=validCartItems.map(item=>({merchandiseId:item.product.variantId,quantity:item.quantity}));// Build buyer identity if authenticated\n    const buyerIdentity=isAuthenticated&&customer?.email?{email:customer.email}:null;const mutation=`\n        mutation cartCreate($input: CartInput!) {\n            cartCreate(input: $input) {\n                cart {\n                    id\n                    checkoutUrl\n                }\n                userErrors {\n                    field\n                    message\n                }\n            }\n        }\n        `;const variables={input:{lines,...buyerIdentity&&{buyerIdentity}}};console.log(\"Creating cart with variables:\",JSON.stringify(variables,null,2));try{const response=await fetch(storefrontUrl,{method:\"POST\",headers:{\"Content-Type\":\"application/json\",\"X-Shopify-Storefront-Access-Token\":accessToken},body:JSON.stringify({query:mutation,variables})});if(!response.ok){console.error(\"Cart response not OK:\",response.status);alert(\"Failed to connect to Shopify. Please try again.\");return;}const result=await response.json();console.log(\"Cart response:\",JSON.stringify(result,null,2));// Check for GraphQL errors\n    if(result.errors&&result.errors.length>0){console.error(\"GraphQL errors:\",result.errors);alert(\"Checkout error: \"+result.errors.map(e=>e.message).join(\", \"));return;}if(!result?.data?.cartCreate){console.error(\"No cartCreate in response:\",result);alert(\"Failed to create checkout. Please try again.\");return;}const cartData=result.data.cartCreate.cart;const userErrors=result.data.cartCreate.userErrors;if(userErrors&&userErrors.length>0){console.error(\"Cart userErrors:\",userErrors);alert(\"Failed to create checkout: \"+userErrors.map(err=>err.message).join(\", \"));return;}if(cartData?.checkoutUrl){// Clear cart after successful checkout creation\n    set({cart:[],cartCount:0});localStorage.setItem(\"cart\",JSON.stringify([]));localStorage.setItem(\"cartCount\",JSON.stringify(0));window.location.href=cartData.checkoutUrl;}else{console.error(\"No checkoutUrl in cart:\",cartData);alert(\"Failed to create checkout. Please try again.\");}}catch(error){console.error(\"Error creating checkout:\",error);alert(\"An unexpected error occurred. Please try again later.\");}},// ========================================================================\n    // Customer Account API OAuth2 Actions\n    // ========================================================================\n    initiateOAuthLogin:async()=>{const{shopId,clientId,redirectUri}=get();if(!shopId||!clientId||!redirectUri){set({authError:\"Customer Account API credentials not configured\"});throw new Error(\"Customer Account API credentials not configured\");}set({isLoading:true,authError:null});try{const codeVerifier=generateCodeVerifier();const codeChallenge=await generateCodeChallenge(codeVerifier);const state=generateState();const nonce=generateNonce();// Store PKCE params for callback\n    storePKCEParams({codeVerifier,state,nonce});// Build authorization URL\n    const authUrl=new URL(`https://shopify.com/authentication/${shopId}/oauth/authorize`);authUrl.searchParams.set(\"client_id\",clientId);authUrl.searchParams.set(\"response_type\",\"code\");authUrl.searchParams.set(\"redirect_uri\",redirectUri);authUrl.searchParams.set(\"scope\",\"openid email customer-account-api:full\");authUrl.searchParams.set(\"state\",state);authUrl.searchParams.set(\"nonce\",nonce);authUrl.searchParams.set(\"code_challenge\",codeChallenge);authUrl.searchParams.set(\"code_challenge_method\",\"S256\");authUrl.searchParams.set(\"prompt\",\"login\");authUrl.searchParams.set(\"max_age\",\"0\");// Redirect to Shopify login\n    window.location.href=authUrl.toString();}catch(error){const message=error instanceof Error?error.message:\"Failed to initiate login\";set({isLoading:false,authError:message});throw error;}},handleOAuthCallback:async(code,state)=>{const{shopId,clientId,redirectUri}=get();if(!shopId||!clientId||!redirectUri){set({authError:\"Customer Account API credentials not configured\"});return false;}set({isLoading:true,authError:null});const stored=getPKCEParams();// Validate state\n    if(stored.state!==state){clearPKCEParams();set({isLoading:false,authError:\"State mismatch - please try again\"});return false;}if(!stored.codeVerifier){set({isLoading:false,authError:\"Session expired - please try again\"});return false;}try{// Exchange code for tokens\n    const tokenUrl=`https://shopify.com/authentication/${shopId}/oauth/token`;const body=new URLSearchParams({grant_type:\"authorization_code\",client_id:clientId,redirect_uri:redirectUri,code:code,code_verifier:stored.codeVerifier});const response=await fetch(tokenUrl,{method:\"POST\",headers:{\"Content-Type\":\"application/x-www-form-urlencoded\"},body:body.toString()});if(!response.ok){clearPKCEParams();const errorData=await response.json().catch(()=>({}));throw new Error(errorData.error_description||\"Token exchange failed\");}const data=await response.json();clearPKCEParams();const tokens={accessToken:data.access_token,refreshToken:data.refresh_token,expiresAt:new Date(Date.now()+data.expires_in*1e3).toISOString(),idToken:data.id_token};storeOAuthTokens(tokens);// Fetch customer profile\n    await get().fetchOAuthCustomerProfile();set({isAuthenticated:true,isLoading:false});return true;}catch(error){clearPKCEParams();const message=error instanceof Error?error.message:\"Authentication failed\";set({isLoading:false,authError:message,isAuthenticated:false});return false;}},fetchOAuthCustomerProfile:async()=>{const{shopId}=get();const tokens=getOAuthTokens();if(!tokens?.accessToken||!shopId)return;const query=`\n            query CustomerProfile {\n                customer {\n                    id\n                    emailAddress { emailAddress }\n                    firstName\n                    lastName\n                    displayName\n                }\n            }\n        `;const apiUrl=`https://shopify.com/${shopId}/account/customer/api/2025-04/graphql`;try{const response=await fetch(apiUrl,{method:\"POST\",headers:{\"Content-Type\":\"application/json\",Authorization:tokens.accessToken},body:JSON.stringify({query})});if(!response.ok){throw new Error(\"Failed to fetch customer profile\");}const data=await response.json();if(data.data?.customer){const c=data.data.customer;set({customer:{id:c.id,email:c.emailAddress?.emailAddress||\"\",firstName:c.firstName||\"\",lastName:c.lastName||\"\"}});}}catch(error){console.error(\"Error fetching OAuth customer profile:\",error);}},oauthLogout:async()=>{const{shopId}=get();set({isLoading:true});try{const tokens=getOAuthTokens();// Clear local tokens first\n    clearOAuthTokens();localStorage.removeItem(\"isAuthenticated\");set({customer:null,isAuthenticated:false,isLoading:false,authError:null});// Redirect to Shopify logout to clear their session cookies\n    if(tokens?.idToken&&shopId){const logoutUrl=new URL(`https://shopify.com/authentication/${shopId}/logout`);logoutUrl.searchParams.set(\"id_token_hint\",tokens.idToken);// Redirect browser to actually clear Shopify's session\n    window.location.href=logoutUrl.toString();}}catch(error){clearOAuthTokens();localStorage.removeItem(\"isAuthenticated\");set({customer:null,isAuthenticated:false,isLoading:false});}},// ========================================================================\n    // Legacy Storefront API Auth (kept for backwards compatibility)\n    // ========================================================================\n    registerCustomer:async input=>{const{storefrontUrl,accessToken}=get();const mutation=`\n        mutation customerCreate($input: CustomerCreateInput!) {\n            customerCreate(input: $input) {\n                customer {\n                    id\n                    email\n                    firstName\n                    lastName\n                }\n                customerUserErrors {\n                    code\n                    field\n                    message\n                }\n            }\n        }\n        `;try{set({isLoading:true});const response=await fetch(storefrontUrl,{method:\"POST\",headers:{\"Content-Type\":\"application/json\",\"X-Shopify-Storefront-Access-Token\":accessToken},body:JSON.stringify({query:mutation,variables:{input}})});const{data,errors}=await response.json();if(errors)throw new Error(errors[0].message);if(data?.customerCreate?.customerUserErrors?.length){throw new Error(data.customerCreate.customerUserErrors[0].message);}await get().initiateLogin(input.email,input.password);return true;}catch(error){console.error(\"Error registering customer:\",error);throw error;}finally{set({isLoading:false});}},initiateLogin:async(email,password)=>{const{storefrontUrl,accessToken}=get();const mutation=`\n        mutation customerAccess($input: CustomerAccessTokenCreateInput!) {\n            customerAccessTokenCreate(input: $input) {\n                customerUserErrors {\n                    code\n                    field\n                    message\n                }\n                customerAccessToken {\n                    accessToken\n                    expiresAt\n                }\n            }\n        }\n        `;try{set({isLoading:true});const response=await fetch(storefrontUrl,{method:\"POST\",headers:{\"Content-Type\":\"application/json\",\"X-Shopify-Storefront-Access-Token\":accessToken},body:JSON.stringify({query:mutation,variables:{input:{email,password}}})});const{data,errors}=await response.json();if(errors?.length>0)throw new Error(errors[0].message);if(data?.customerAccessTokenCreate?.customerUserErrors?.length>0){throw new Error(data.customerAccessTokenCreate.customerUserErrors[0].message);}const customerToken=data.customerAccessTokenCreate.customerAccessToken.accessToken;const tokenExpiry=data.customerAccessTokenCreate.customerAccessToken.expiresAt;set({customerAccessToken:customerToken,tokenExpiry,isAuthenticated:true,lastEmailUsed:email});localStorage.setItem(\"customerAccessToken\",customerToken);localStorage.setItem(\"tokenExpiry\",tokenExpiry);localStorage.setItem(\"isAuthenticated\",\"true\");localStorage.setItem(\"lastEmailUsed\",email);await get().fetchCustomerDetails();return true;}catch(error){console.error(\"Error logging in:\",error);throw error;}finally{set({isLoading:false});}},fetchCustomerDetails:async()=>{const{storefrontUrl,accessToken,customerAccessToken}=get();if(!customerAccessToken){console.error(\"Customer is not authenticated\");return;}const query=`\n        query CustomerDetails($customerAccessToken: String!) {\n            customer(customerAccessToken: $customerAccessToken) {\n                id\n                email\n                firstName\n                lastName\n                addresses(first: 5) {\n                    edges {\n                        node {\n                            id\n                            address1\n                            address2\n                            city\n                            province\n                            country\n                            zip\n                        }\n                    }\n                }\n                orders(first: 5) {\n                    edges {\n                        node {\n                            id\n                            name\n                            orderNumber\n                            processedAt\n                            statusUrl\n                            totalPrice {\n                                amount\n                                currencyCode\n                            }\n                            lineItems(first: 5) {\n                                edges {\n                                    node {\n                                        title\n                                        quantity\n                                    }\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n        }\n        `;try{const response=await fetch(storefrontUrl,{method:\"POST\",headers:{\"Content-Type\":\"application/json\",\"X-Shopify-Storefront-Access-Token\":accessToken},body:JSON.stringify({query,variables:{customerAccessToken}})});const{data,errors}=await response.json();if(errors?.length)throw new Error(errors[0].message);if(!data?.customer)throw new Error(\"Customer data not found\");const customer=data.customer;const addresses=customer.addresses.edges.map(edge=>edge.node);set({customer:{...customer,addresses}});}catch(error){console.error(\"Error fetching customer details:\",error);}},restoreSession:()=>{// Try OAuth tokens first\n    const oauthTokens=getOAuthTokens();if(oauthTokens){console.log(\"[ShopifyStore] OAuth tokens found, setting authenticated\");set({isAuthenticated:true});// Try to fetch profile if shopId is available\n    const{shopId}=get();if(shopId){get().fetchOAuthCustomerProfile();}return;}// Fall back to legacy tokens\n    const customerAccessToken=localStorage.getItem(\"customerAccessToken\");const tokenExpiry=localStorage.getItem(\"tokenExpiry\");if(customerAccessToken&&tokenExpiry){const isExpired=new Date>new Date(tokenExpiry);if(!isExpired){set({customerAccessToken,tokenExpiry,isAuthenticated:true});get().fetchCustomerDetails();}else{get().logout();}}},refreshToken:async()=>{const{customerAccessToken,storefrontUrl,accessToken}=get();if(!customerAccessToken)return;const mutation=`\n        mutation customerAccessTokenRenew($customerAccessToken: String!) {\n            customerAccessTokenRenew(customerAccessToken: $customerAccessToken) {\n                customerAccessToken {\n                    accessToken\n                    expiresAt\n                }\n                userErrors {\n                    field\n                    message\n                }\n            }\n        }\n        `;try{const response=await fetch(storefrontUrl,{method:\"POST\",headers:{\"Content-Type\":\"application/json\",\"X-Shopify-Storefront-Access-Token\":accessToken},body:JSON.stringify({query:mutation,variables:{customerAccessToken}})});const{data,errors}=await response.json();if(errors?.length>0)throw new Error(errors[0].message);const newAccessToken=data?.customerAccessTokenRenew?.customerAccessToken?.accessToken;const newExpiry=data?.customerAccessTokenRenew?.customerAccessToken?.expiresAt;set({customerAccessToken:newAccessToken,tokenExpiry:newExpiry});localStorage.setItem(\"customerAccessToken\",newAccessToken);localStorage.setItem(\"tokenExpiry\",newExpiry);}catch(error){console.error(\"Error refreshing access token:\",error);}},logout:()=>{// Clear OAuth tokens\n    clearOAuthTokens();// Clear legacy tokens\n    localStorage.removeItem(\"customerAccessToken\");localStorage.removeItem(\"tokenExpiry\");localStorage.removeItem(\"isAuthenticated\");localStorage.removeItem(\"lastEmailUsed\");set({customer:null,isAuthenticated:false,customerAccessToken:null,tokenExpiry:null,lastEmailUsed:null});}}));// ============================================================================\n// Provider Component\n// ============================================================================\nexport const ShopifyProvider=({children})=>{React.useEffect(()=>{const store=useShopifyStore.getState();store.restoreSession();},[]);return /*#__PURE__*/_jsx(_Fragment,{children:children});};// ============================================================================\n// Framer Configuration Component\n// ============================================================================\nexport function ShopifyStoreComponent({storefrontUrl=\"\",accessToken=\"\",shopId=\"\",clientId=\"\",redirectUri=\"\"}){const setStorefrontUrl=useShopifyStore(state=>state.setStorefrontUrl);const setAccessToken=useShopifyStore(state=>state.setAccessToken);const setCustomerAccountCredentials=useShopifyStore(state=>state.setCustomerAccountCredentials);const restoreSession=useShopifyStore(state=>state.restoreSession);React.useEffect(()=>{if(storefrontUrl)setStorefrontUrl(storefrontUrl);if(accessToken)setAccessToken(accessToken);if(shopId&&clientId&&redirectUri){setCustomerAccountCredentials(shopId,clientId,redirectUri);}restoreSession();},[storefrontUrl,accessToken,shopId,clientId,redirectUri]);return /*#__PURE__*/_jsx(\"div\",{});}addPropertyControls(ShopifyStoreComponent,{storefrontUrl:{type:ControlType.String,title:\"Storefront URL\",defaultValue:\"\",description:\"Your Shopify Storefront API URL\"},accessToken:{type:ControlType.String,title:\"Storefront Token\",defaultValue:\"\",description:\"Storefront API access token\"},shopId:{type:ControlType.String,title:\"Shop ID\",defaultValue:\"\",description:\"For OAuth login (e.g., 62039818313)\"},clientId:{type:ControlType.String,title:\"Client ID\",defaultValue:\"\",description:\"Customer Account API Client ID\"},redirectUri:{type:ControlType.String,title:\"Redirect URI\",defaultValue:\"\",description:\"OAuth callback URL\"}});export default ShopifyStoreComponent;\nexport const __FramerMetadata__ = {\"exports\":{\"ShopifyProvider\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"reactComponent\",\"name\":\"ShopifyStoreComponent\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"useShopifyStore\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"ShopifyStoreComponent\":{\"type\":\"reactComponent\",\"name\":\"ShopifyStoreComponent\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./ShopifyStore.map","import{jsx as _jsx}from\"react/jsx-runtime\";import{addPropertyControls,ControlType,motion}from\"framer\";// This is the custom text cropping component for Framer\nexport function CroppedTextComponent({text,textColor,textSize,cropHeight,textAlign}){// Splitting the text into individual letters\nconst letters=text.split(\"\");return /*#__PURE__*/_jsx(\"div\",{style:{width:\"100%\",height:`${cropHeight}px`,overflow:\"hidden\",position:\"relative\",display:\"flex\",justifyContent:textAlign===\"left\"?\"flex-start\":textAlign===\"right\"?\"flex-end\":\"center\",alignItems:\"flex-start\",userSelect:\"none\",cursor:\"default\"},children:letters.map((letter,index)=>/*#__PURE__*/_jsx(motion.span,{style:{whiteSpace:\"nowrap\",fontSize:`${textSize}vw`,color:textColor,fontFamily:\"sans-serif\",fontWeight:\"bold\",textTransform:\"uppercase\",lineHeight:\"1\",display:\"inline-block\",transform:`translateY(calc(100% - ${cropHeight}px))`,transformOrigin:\"bottom\",userSelect:\"none\",cursor:\"default\"},initial:{scaleY:1},whileHover:{scaleY:.7},onTap:{scaleY:.7},transition:{type:\"spring\",stiffness:100,damping:40},children:letter},index))});}// Setting up property controls for Framer's UI\naddPropertyControls(CroppedTextComponent,{text:{type:ControlType.String,title:\"Text\",defaultValue:\"MoodWare\"},textColor:{type:ControlType.Color,title:\"Text Color\",defaultValue:\"#000000\"},textSize:{type:ControlType.Number,title:\"Text Size (vw)\",defaultValue:15,min:1,max:50},cropHeight:{type:ControlType.Number,title:\"Crop Height (px)\",defaultValue:100,min:10,max:300},textAlign:{type:ControlType.Enum,title:\"Text Align\",defaultValue:\"center\",options:[\"left\",\"center\",\"right\"],optionTitles:[\"Left\",\"Center\",\"Right\"]}});\nexport const __FramerMetadata__ = {\"exports\":{\"CroppedTextComponent\":{\"type\":\"reactComponent\",\"name\":\"CroppedTextComponent\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Cropped_Text_1.map"],"mappings":"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"}