import { Product, LineItemCreate as SDKLineItemCreate } from "@betterstore/sdk";
type LineItemOptionalParams = {
    quantity?: number;
    variantOptions?: {
        name: string;
        value: string;
    }[];
    metadata?: Record<string, any>;
};
export interface CartLineItem extends Pick<SDKLineItemCreate, "metadata" | "quantity" | "variantOptions" | "productId" | "product"> {
    id: string;
    selectedVariant: Product["productVariants"][number] | null;
}
export interface Cart {
    lineItems: CartLineItem[];
    addItem: (product: CartLineItem["product"] & {
        productVariants?: Product["productVariants"];
    }, additionalParams?: LineItemOptionalParams) => void;
    removeItem: (id: string) => void;
    updateQuantity: (id: string, quantity: number) => void;
    getProductQuantity: (productId: string) => number;
    clearCart: () => void;
}
export declare const useCart: import("zustand").UseBoundStore<Omit<import("zustand").StoreApi<Cart>, "persist"> & {
    persist: {
        setOptions: (options: Partial<import("zustand/middleware").PersistOptions<Cart, Cart>>) => void;
        clearStorage: () => void;
        rehydrate: () => Promise<void> | void;
        hasHydrated: () => boolean;
        onHydrate: (fn: (state: Cart) => void) => () => void;
        onFinishHydration: (fn: (state: Cart) => void) => () => void;
        getOptions: () => Partial<import("zustand/middleware").PersistOptions<Cart, Cart>>;
    };
}>;
export {};
