import { Cart, CartItem, CartItemGroups, CartLevels, CartItemOption, CartOwner, CheckoutConfig, CheckoutFormAddress, CheckoutFormCustomer, CheckoutPromoCodes, CheckoutTenders, DisplayItem, DisplayItems, Favorites, GroupOrderGuest, GroupOrderGuests, MenuCategories, MenuItem, MenuItems, Money, NutritionalInfo, NutritionalInfoCalcs, Order, OrderCreate, OrderCreateDiscounts, OrderCreateSurcharges, OrderData, OrderItem, OrderItemGroups, Orders, SimpleCart, SimpleCartGroups, SimpleCartItem, SoldOut, Images, CartErrors, BaseItem, FavoritesLookup, RequestedAt } from '@open-tender/types';
export declare const getItemOptions: <T extends BaseItem>(item: T) => BaseItem[];
export declare const makeModifierNames: <T extends BaseItem>(item: T) => string;
export declare const makeModifierNamesForGroups: (groups: CartItemGroups) => string;
export declare const hasGroupsBelowMin: (option: CartItemOption | null, groups: CartItemGroups) => boolean;
export declare const makeModifierGroups: (groups: CartItemGroups) => [CartItemGroups, CartLevels];
export declare const makeUpsellItems: (itemIds: number[], itemLookup: Record<string, MenuItem>) => (CartItemOption | CartItem)[];
export declare const makeUpsellItemIds: (item: CartItem, cartIds: number[], soldOut: number[]) => number[];
export declare const makeUpsellItemsForCart: (categories: MenuCategories, cartIds: number[], soldOut: number[]) => (CartItemOption | CartItem)[];
export declare const calcNutrition: (item: CartItem | CartItemOption) => NutritionalInfoCalcs;
export declare const calcNutritionalInfo: (item: CartItem | CartItemOption) => NutritionalInfo;
export declare const calcPrices: (item: CartItem | CartItemOption) => CartItem | CartItemOption;
export declare const checkSoldOut: (id: number, suspendUntil: number | null, soldOut: number[] | undefined, requestedAt: RequestedAt | null) => boolean;
export declare const makeOrderItem: (item: MenuItem, isEdit?: boolean, soldOut?: SoldOut, simpleItem?: SimpleCartItem, hasPoints?: boolean, requestedAt?: RequestedAt | null) => CartItemOption | CartItem;
export declare const calcCartCounts: (cart: Cart) => Record<string, number>;
export declare const rehydrateOrderItem: (menuItem: MenuItem, simpleCartItem: SimpleCartItem, soldOut?: number[], requestedAt?: RequestedAt | null) => CartItem;
export declare const rehydrateCart: (menuItems: MenuItems, simpleCartItems: SimpleCart, soldOut?: number[]) => {
    cart: {
        index: number;
        cartGuestId: number | null;
        customerId: number | null;
        madeFor: string | null;
        notes: string | null;
        signature?: string | undefined;
        similarItems: number[];
        upsellItems: number[];
        list_name: string | null;
        list_id: string | null;
        menu_position: number | null;
        allergens: string[];
        allergens_list?: import("@open-tender/types").MenuItemAllergens | undefined;
        cals: number | null;
        description: string | null;
        groups: CartItemGroups;
        id: number;
        imageUrl: string | null;
        appImageUrl?: string | null | undefined;
        increment: number;
        ingredients: string | null;
        isSoldOut: boolean;
        max: number;
        min: number;
        name: string;
        nutritionalInfo: NutritionalInfo | null;
        points: number | null;
        pos_ext_id: string | null;
        price: number;
        quantity: number;
        shorthand: string | null;
        shortDescription: string | null;
        shortName: string;
        slug: string;
        suspend_until: number | null;
        tags: string[];
        tags_list?: import("@open-tender/types").MenuItemTags | undefined;
        totalAllergens: string[];
        totalCals: number | null;
        totalPoints: number | null;
        totalPrice: number | null;
        itemShape: import("@open-tender/types").PizzaShape | null;
        excludeFromBuilder: boolean;
    }[];
    cartCounts: Record<string, number>;
};
export declare const rehydrateCheckoutForm: (order: Order) => {
    details: {
        cart_id: number | null | undefined;
        eating_utensils: boolean | undefined;
        notes: string | null | undefined;
        person_count: number | null | undefined;
        serving_utensils: boolean | undefined;
        tax_exempt_id: string | null | undefined;
    };
    customer: CheckoutFormCustomer;
    address: CheckoutFormAddress;
    surcharges: OrderCreateSurcharges;
    discounts: OrderCreateDiscounts;
    promoCodes: CheckoutPromoCodes;
    tenders: (import("@open-tender/types").OrderTenderGiftCard | {
        card_type: import("@open-tender/types").CardType;
        card_type_name: import("@open-tender/types").CardTypeName;
        customer_card_id: number;
        has_profile?: boolean | undefined;
        is_default: boolean;
        last4: string;
        masked: string;
        credit_card: import("@open-tender/types").CreditCard;
        amount: `${number}.${number}`;
        created_at?: `${number}${number}${number}${number}-${number}${number}-${number}${number}T${number}${number}:${number}${number}:${number}${number}-${number}${number}:${number}${number}` | `${number}${number}${number}${number}-${number}${number}-${number}${number}T${number}${number}:${number}${number}:${number}${number}+${number}${number}:${number}${number}` | undefined;
        is_replaced?: boolean | undefined;
        parent_tender_uuid?: string | undefined;
        tender_index?: number | undefined;
        tender_status: import("@open-tender/types").TenderStatus;
        tender_type: import("@open-tender/types").TenderType;
        tender_uuid?: string | undefined;
    } | {
        house_account_id: number;
        name: string;
        house_account: {
            house_account_id: number;
            name: string;
        };
        amount: `${number}.${number}`;
        created_at?: `${number}${number}${number}${number}-${number}${number}-${number}${number}T${number}${number}:${number}${number}:${number}${number}-${number}${number}:${number}${number}` | `${number}${number}${number}${number}-${number}${number}-${number}${number}T${number}${number}:${number}${number}:${number}${number}+${number}${number}:${number}${number}` | undefined;
        is_replaced?: boolean | undefined;
        parent_tender_uuid?: string | undefined;
        tender_index?: number | undefined;
        tender_status: import("@open-tender/types").TenderStatus;
        tender_type: import("@open-tender/types").TenderType;
        tender_uuid?: string | undefined;
    })[] | undefined;
    tip: `${number}.${number}`;
};
export declare const makeGuestLookup: (cartGuests: GroupOrderGuests) => Record<string, GroupOrderGuest>;
export declare const compareCarts: (cart: Cart | null) => CartItem[] | null;
export declare const combineCarts: (cart: Cart, guestCart: Cart, cartOwner: CartOwner, cartGuests: GroupOrderGuests) => {
    madeFor: string | null;
    cartGuestId: number | null;
    customerId: number | null;
    index?: number | undefined;
    notes: string | null;
    signature?: string | undefined;
    similarItems: number[];
    upsellItems: number[];
    list_name: string | null;
    list_id: string | null;
    menu_position: number | null;
    allergens: string[];
    allergens_list?: import("@open-tender/types").MenuItemAllergens | undefined;
    cals: number | null;
    description: string | null;
    groups: CartItemGroups;
    id: number;
    imageUrl: string | null;
    appImageUrl?: string | null | undefined;
    increment: number;
    ingredients: string | null;
    isSoldOut: boolean;
    max: number;
    min: number;
    name: string;
    nutritionalInfo: NutritionalInfo | null;
    points: number | null;
    pos_ext_id: string | null;
    price: number;
    quantity: number;
    shorthand: string | null;
    shortDescription: string | null;
    shortName: string;
    slug: string;
    suspend_until: number | null;
    tags: string[];
    tags_list?: import("@open-tender/types").MenuItemTags | undefined;
    totalAllergens: string[];
    totalCals: number | null;
    totalPoints: number | null;
    totalPrice: number | null;
    itemShape: import("@open-tender/types").PizzaShape | null;
    excludeFromBuilder: boolean;
}[];
export declare const makeItemImageUrl: (images: Images) => any;
export declare const makeDisplayItemGroups: (optionGroups: OrderItemGroups) => {
    options: DisplayItem[];
    id: number;
    name: string;
    short_name: string;
}[];
export declare const makeDisplayItem: (item: OrderItem, isOption?: boolean) => DisplayItem;
export declare const makeDisplayItems: (orders: Orders) => DisplayItem[];
export declare const makeUniqueDisplayItems: (orders: Orders) => DisplayItems;
export declare const makeFavoritesLookup: (favorites: Favorites) => FavoritesLookup;
export declare const makeItemSignature: (item: SimpleCartItem) => string;
export declare const makeCartItemSignature: (item: CartItem) => string;
export declare const addItem: (cart: Cart, item: CartItem) => {
    cart: Cart;
    cartCounts: Record<string, number>;
};
export declare const removeItem: (cart: Cart, index: number) => {
    cart: Cart;
    cartCounts: Record<string, number>;
};
export declare const incrementItem: (cart: Cart, index: number) => {
    cart: Cart;
    cartCounts: Record<string, number>;
};
export declare const decrementItem: (cart: Cart, index: number) => {
    cart: Cart;
    cartCounts: Record<string, number>;
};
export declare const makeSimpleCart: <C extends {
    id: number;
    quantity: number;
    groups: T[];
    madeFor?: string | null | undefined;
    made_for?: string | null | undefined;
    notes?: string | null | undefined;
}[], T extends {
    id: number;
    options: K[];
}, K extends {
    id: number;
    quantity: number;
    groups: T[];
}>(cart: C) => {
    id: number;
    quantity: number;
    groups: SimpleCartGroups;
    made_for: string;
    notes: string;
}[];
export declare const validateCart: (cart: Cart, categories: MenuCategories, soldOut: SoldOut, requestedAt: RequestedAt) => {
    newCart: Cart;
    errors: CartErrors | null;
};
export declare const getDefaultTip: (config: CheckoutConfig) => string | null;
export declare const prepareOrder: (data: OrderData) => OrderCreate;
export declare const checkAmountRemaining: (total: Money, tenders: CheckoutTenders) => number;
export declare const makeDeviceType: (deviceType: string, deviceId?: string) => "DESKTOP" | "MOBILE" | "TABLET";
