import { Component } from 'vue'; import { BundleItem, Cart, CartBaseItem, CartMainItem, Cluster, Contact, Crossupsell, Customer, GraphQLClient, MediaImageProductSearchInput, Product, ProductInventory, TransformationsInput } from '@propeller-commerce/propeller-sdk-v2'; export interface CartItemProps { /** GraphQL client for the Propeller SDK. Resolved from PropellerProvider when omitted. */ graphqlClient?: GraphQLClient; /** The shopping cart unique identifier */ cartId: string; /** Tax zone for price calculations */ taxZone?: string; /** Authenticated user for cart operations */ user?: Contact | Customer | null; /** A shopping cart item */ cartItem: CartMainItem; /** Currency symbol to display. Defaults to '€'. */ currency?: string; /** Should the item title be a link to the PDP. Defaults to true. */ titleLinkable?: boolean; /** Should the stock be displayed in the cart item. Defaults to false. */ showStockComponent?: boolean; /** Display the SKU of the cart item beneath the item name. Defaults to true. */ showSku?: boolean; /** +/- buttons on left and right of quantity input. Defaults to true. */ enableIncrementDecrement?: boolean; /** Should the cart item notes field be displayed. Defaults to false. */ showCartItemNotesField?: boolean; /** Action callback when a cart item quantity is changed */ onQuantityChange?: (item: CartMainItem, quantity: number) => void; /** Action callback when a cart item note is changed */ onNoteChange?: (item: CartMainItem, note: string) => void; /** Action callback when a cart item is deleted */ onDelete?: (item: CartMainItem) => void; /** Callback with the updated cart after any cart mutation */ afterCartUpdate?: (cart: Cart) => void; /** Label overrides for UI strings * * Available keys: remove, notes, notesPlaceholder, includedOptions, updating, deleting */ labels?: Record; /** Language code for CartService operations. Defaults to 'NL'. */ language?: string; /** Configuration object for image filters and URL generation */ configuration?: { language?: string; imageSearchFiltersGrid?: MediaImageProductSearchInput; imageVariantFiltersSmall?: TransformationsInput; imageVariantFiltersMedium?: TransformationsInput; urls?: { getProductUrl: (product: Product, language?: string) => string; }; }; /** Show cross-sell/upsell product suggestions below the item. Defaults to false. */ showCrossupsells?: boolean; /** Which cross-sell types to fetch. Defaults to ['ACCESSORIES']. Values: 'ACCESSORIES', 'ALTERNATIVES', 'OPTIONS', 'PARTS', 'RELATED' */ crossupsellTypes?: string[]; /** Maximum number of cross-sell products to display. Defaults to 3. */ crossupsellLimit?: number; /** Callback when a cross-sell product is clicked */ onCrossupsellClick?: (product: Product | Cluster) => void; /** Additional CSS class for the root element */ className?: string; /** Include tax in price. Defaults to false. */ includeTax?: boolean; /** Active company ID for PAC lookup. */ companyId?: number; priceComponent?: Component; stockComponent?: Component; surchargesComponent?: Component; /** When false, root element drops the card frame * ('bg-card p-4 rounded-[var(--radius-container)] shadow-sm border border-border'), * leaving only the flex layout. Default: true. Used by drawer / summary * widgets. */ cardFrame?: boolean; /** When false, the delete button (and #delete slot in compound mode) * returns null. Default: true. */ showDelete?: boolean; /** When true, quantity renders as 'Qty: {n}' text — no stepper, no * input. Default: false. Independent from enableIncrementDecrement. */ readOnlyQuantity?: boolean; /** Optional title click callback. Fires BEFORE default navigation; the * consumer may call event.preventDefault() to suppress nav. Used by * the cart drawer to close the sidebar on title click. */ onTitleClick?: (event: MouseEvent, item: CartMainItem) => void; } declare function handleDelete(): Promise; declare function __VLS_template(): { attrs: Partial<{}>; slots: { image?(_: { cartItem: CartMainItem; imageUrl: string; productUrl: string; name: string; }): any; sku?(_: { cartItem: CartMainItem; sku: string; }): any; title?(_: { cartItem: CartMainItem; isBundle: boolean; name: string; bundleName: string; productUrl: string; linkable: boolean; handleTitleClick: (e: any) => void | undefined; }): any; surcharges?(_: { cartItem: CartMainItem; surcharges: string[]; includeTax: boolean | undefined; labels: Record | undefined; }): any; stock?(_: { cartItem: CartMainItem; inventory: ProductInventory | null; labels: Record | undefined; }): any; bundleItems?(_: { cartItem: CartMainItem; leaderName: string; leaderPrice: string; nonLeaders: BundleItem[]; }): any; childItems?(_: { cartItem: CartMainItem; childItems: CartBaseItem[]; }): any; notes?(_: { cartItem: CartMainItem; notes: string; onNoteChange: (value: any) => void; }): any; crossupsells?(_: { cartItem: CartMainItem; crossupsells: Crossupsell[]; }): any; price?(_: { cartItem: CartMainItem; isBundle: boolean; price: import('@propeller-commerce/propeller-sdk-v2').ProductPrice | undefined; formattedPrice: string; bundlePrice: string; includeTax: boolean | undefined; currency: string | undefined; labels: Record | undefined; }): any; quantity?(_: { cartItem: CartMainItem; quantity: number; readOnly: boolean | undefined; minQuantity: number; step: number; onChange: (newQty: any) => Promise; labels: Record | undefined; }): any; delete?(_: { cartItem: CartMainItem; deleting: boolean; onDelete: typeof handleDelete; labels: Record | undefined; }): any; }; refs: {}; rootEl: HTMLDivElement; }; type __VLS_TemplateResult = ReturnType; declare const __VLS_component: import('vue').DefineComponent & Readonly<{}>, { titleLinkable: boolean; showSku: boolean; enableIncrementDecrement: boolean; cardFrame: boolean; showDelete: boolean; }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>; declare const _default: __VLS_WithTemplateSlots; export default _default; type __VLS_WithTemplateSlots = T & { new (): { $slots: S; }; };