import { CustomerAddressGraphql, Address } from '@evershop/evershop/types/customerAddress'; import React, { ReactNode } from 'react'; export declare enum CartSyncTrigger { ADD_ITEM = "addItem", REMOVE_ITEM = "removeItem", UPDATE_ITEM = "updateItem", ADD_PAYMENT_METHOD = "addPaymentMethod", ADD_SHIPPING_METHOD = "addShippingMethod", ADD_SHIPPING_ADDRESS = "addShippingAddress", ADD_BILLING_ADDRESS = "addBillingAddress", ADD_CONTACT_INFO = "addContactInfo", APPLY_COUPON = "applyCoupon", REMOVE_COUPON = "removeCoupon" } export interface CartItem { cartItemId: string; uuid: string; productId: string; qty: number; productSku: string; productName: string; productUrl: string; thumbnail?: string; noShippingRequired: boolean; productWeight: { value: number; unit: string; }; variantOptions?: { attributeCode: string; attributeName: string; attributeId: number; optionId: number; optionText: string; }[]; productPrice: { value: number; text: string; }; productPriceInclTax: { value: number; text: string; }; finalPrice: { value: number; text: string; }; finalPriceInclTax: { value: number; text: string; }; taxPercent: number; taxAmount: { value: number; text: string; }; taxAmountBeforeDiscount: { value: number; text: string; }; discountAmount: { value: number; text: string; }; lineTotal: { value: number; text: string; }; subTotal: { value: number; text: string; }; lineTotalWithDiscount: { value: number; text: string; }; lineTotalWithDiscountInclTax: { value: number; text: string; }; lineTotalInclTax: { value: number; text: string; }; total: { value: number; text: string; }; variantGroupId?: number; removeApi: string; updateQtyApi: string; errors?: string[]; } export interface PaymentMethod { id: string; name: string; code: string; } export interface ShippingMethod { id: string; name: string; code: string; price: number; } export interface ShippingAddressParams { country: string; province?: string; postcode?: string; } export interface CartError { field?: string; message: string; code?: string; } export interface CartData { uuid?: string; currency: string; totalQty: number; totalWeight: { value: number; unit: string; }; customerId?: number; customerGroupId?: number; customerEmail?: string; customerFullName?: string; coupon?: string; noShippingRequired: boolean; shippingMethod?: string; shippingMethodName?: string; paymentMethod?: string; paymentMethodName?: string; shippingNote?: string; items: CartItem[]; taxAmount: { value: number; text: string; }; totalTaxAmount: { value: number; text: string; }; taxAmountBeforeDiscount: { value: number; text: string; }; discountAmount: { value: number; text: string; }; shippingFeeExclTax: { value: number; text: string; }; shippingFeeInclTax: { value: number; text: string; }; shippingTaxAmount: { value: number; text: string; }; subTotal: { value: number; text: string; }; subTotalInclTax: { value: number; text: string; }; subTotalWithDiscount: { value: number; text: string; }; subTotalWithDiscountInclTax: { value: number; text: string; }; grandTotal: { value: number; text: string; }; billingAddress?: CustomerAddressGraphql; shippingAddress?: CustomerAddressGraphql; createdAt: { value: string; text: string; }; updatedAt: { value: string; text: string; }; addItemApi: string; addPaymentMethodApi: string; addShippingMethodApi: string; addContactInfoApi: string; addAddressApi: string; addNoteApi: string; applyCouponApi: string; checkoutApi: string; removeCouponApi?: string; availablePaymentMethods: { code: string; name: string; }[]; availableShippingMethods: { code: string; name: string; cost?: { value: number; text: string; }; }[]; errors: CartError[]; error: string | null; [extendedFields: string]: unknown; } export interface CartState { data: CartData; loading: boolean; loadingStates: { addingItem: boolean; removingItem: string | null; updatingItem: string | null; addingPaymentMethod: boolean; addingShippingMethod: boolean; addingShippingAddress: boolean; addingBillingAddress: boolean; addingContactInfo: boolean; applyingCoupon: boolean; removingCoupon: boolean; fetchingShippingMethods: boolean; }; syncStatus: { syncing: boolean; synced: boolean; trigger?: string; }; } interface CartDispatch { addItem: (payload: { sku: string; qty: number; }) => Promise; removeItem: (itemId: string) => Promise; updateItem: (itemId: string, payload: { qty: number; action: 'increase' | 'decrease'; }) => Promise; addPaymentMethod: (code: string, name: string) => Promise; addShippingMethod: (code: string, name: string) => Promise; addShippingAddress: (address: Address) => Promise; addBillingAddress: (address: Address) => Promise; addContactInfo: (contactInfo: { email: string; }) => Promise; applyCoupon: (couponCode: string) => Promise; removeCoupon: () => Promise; clearError: () => void; isShippingRequired: () => boolean; isReadyForCheckout: () => boolean; getErrors: () => CartError[]; getId: () => string | null; fetchAvailableShippingMethods: (params: ShippingAddressParams) => Promise; syncCartWithServer: (trigger?: string) => Promise; } interface CartProviderProps { children: ReactNode; query: string; cart?: CartData; addMineCartItemApi: string; } export declare const CartProvider: ({ children, query, cart, addMineCartItemApi }: CartProviderProps) => React.JSX.Element; export declare const useCartState: () => CartState; export declare const useCartDispatch: () => CartDispatch; export {};