import { Component } from 'vue'; import { Cart, CartMainItem, Cluster, Contact, CrossupsellType, Customer, GraphQLClient, Product } from '@propeller-commerce/propeller-sdk-v2'; export interface ProductSliderProps { /** * Propeller SDK GraphQL client. * Optional — resolved from the `propellerVue` plugin scope via `useInfraProps` * when omitted. An explicit prop still wins. */ graphqlClient?: GraphQLClient; /** Pre-loaded products or clusters to display. When provided, skips internal fetching. */ products?: (Product | Cluster)[]; /** Product IDs to fetch internally when `products` is not provided */ productIds?: number[]; /** Cluster IDs to fetch internally when `products` is not provided */ clusterIds?: number[]; /** * Cross-upsell types to fetch. When provided, fetches cross-upsells for the given * productId/clusterId instead of fetching products by IDs. * Values: 'ACCESSORIES' | 'ALTERNATIVES' | 'RELATED' | 'OPTIONS' | 'PARTS' */ crossUpsellTypes?: CrossupsellType[]; /** Source product ID for cross-upsell lookup. Required when crossUpsellTypes is set. */ productId?: number; /** Source cluster ID for cross-upsell lookup. Required when crossUpsellTypes is set. */ clusterId?: number; /** * Language code for API requests and localized content. * Optional — resolved from `` scope via `useInfraProps` * when omitted. An explicit prop still wins. */ language?: string; /** Tax zone for price calculations */ taxZone?: string; /** * When true, net price (incl. tax) is the leading price. * Forwarded to each ProductCard / ClusterCard. */ includeTax?: boolean; /** * Controls portal visibility mode. * 'open' — AddToCart is shown on product cards. * 'semi-closed' — AddToCart is hidden (catalog-only view). * Defaults to 'open'. */ portalMode?: string; /** Authenticated user for cart operations */ user?: Contact | Customer | null; /** * Show the add-to-cart control on each card. Defaults to true; a semi-closed * portal still withholds it from anonymous visitors regardless. */ allowAddToCart?: boolean; /** * Active company ID from the company switcher. * Overrides the user's default company for price calculation in cross-upsell fetches * and is forwarded to each embedded ProductCard / AddToCart. * Triggers a re-fetch when changed. */ companyId?: number; /** Items visible per breakpoint */ itemsPerView?: { mobile?: number; tablet?: number; desktop?: number; }; /** Slider title displayed above the track */ title?: string; /** Additional CSS class for the outer container */ containerClassName?: string; /** * Show the stock / availability widget on each product card. * Forwarded to `ProductCard.showStock`. * Defaults to false. */ showStock?: boolean; /** * Show only the availability indicator (Available / Not available) inside the stock widget. * Forwarded to `ProductCard.showAvailability`. * Defaults to true. */ showAvailability?: boolean; /** * Label overrides forwarded to the embedded ItemStock component inside each card. * Keys: inStock, outOfStock, lowStock, available, notAvailable, pieces */ stockLabels?: Record; /** Translated labels forwarded to the embedded `` display * inside each ``. See `ProductPriceProps.labels` for slugs. */ priceLabels?: Record; /** Show a heart-icon favourite toggle on each card. Defaults to false. */ enableAddFavorite?: boolean; /** * Called when a favourite is toggled on any card. * Receives the full Product or Cluster object and the new favourite state. */ onToggleFavorite?: (item: Product | Cluster, isFavorite: boolean) => void; /** Called when a product card is clicked — use for SPA-style routing. */ onProductClick?: (product: Product) => void; /** Called when a cluster card is clicked — use for SPA-style routing. */ onClusterClick?: (cluster: Cluster) => void; /** Validate stock before adding to cart. Defaults to false. */ stockValidation?: boolean; /** Show increment/decrement stepper buttons in AddToCart. Defaults to true. */ showIncrDecr?: boolean; /** ID of an existing cart to add items to. */ cartId?: string; /** Auto-create a cart when none is available. Pair with onCartCreated. */ createCart?: boolean; /** Called after AddToCart creates a new cart internally. */ onCartCreated?: (cart: Cart) => void; /** Called after every successful add-to-cart. Receives the updated cart and the added item. */ afterAddToCart?: (cart: Cart, item?: CartMainItem) => void; /** * When true, AddToCart shows a success modal instead of a toast. * Defaults to false. */ showModal?: boolean; /** Called when "Proceed to checkout" is clicked in the AddToCart modal. */ onProceedToCheckout?: () => void; /** Called when "Request a Quote" is clicked in the AddToCart modal. */ onRequestQuoteClick?: (cart: Cart) => void; /** * Called when an anonymous visitor clicks the log-in action that replaces * add-to-cart in a semi-closed portal. The host owns navigation. */ onLoginClick?: () => void; /** * Label overrides forwarded to the embedded AddToCart component. * Keys: add, adding, addedToCart, outOfStock, noCartId, errorAdding, * modalTitle, quantity, continueShopping, proceedToCheckout */ addToCartLabels?: Record; /** Configuration object providing imageSearchFiltersGrid, imageVariantFiltersMedium, urls */ configuration?: any; /** * Label overrides for the slider UI. * Available keys: scrollLeft, scrollRight, noProducts, viewCluster, * ACCESSORIES, ALTERNATIVES, RELATED, OPTIONS, PARTS */ labels?: Record; /** Translated labels forwarded to embedded `` instances. */ productCardLabels?: Record; /** Translated labels forwarded to embedded `` instances. */ clusterCardLabels?: Record; priceComponent?: Component; stockComponent?: Component; addToCartComponent?: Component; imageComponent?: Component; badgesComponent?: Component; favoriteComponent?: Component; productCardComponent?: Component; clusterCardComponent?: Component; } declare function __VLS_template(): { attrs: Partial<{}>; slots: { beforeItem?(_: { item: Product | Cluster; index: number; }): any; afterItem?(_: { item: Product | Cluster; index: number; }): any; }; refs: { sliderRef: HTMLDivElement; }; rootEl: any; }; type __VLS_TemplateResult = ReturnType; declare const __VLS_component: import('vue').DefineComponent & Readonly<{}>, { showStock: boolean; showAvailability: boolean; enableAddFavorite: boolean; allowAddToCart: boolean; showIncrDecr: boolean; }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, { sliderRef: HTMLDivElement; }, any>; declare const _default: __VLS_WithTemplateSlots; export default _default; type __VLS_WithTemplateSlots = T & { new (): { $slots: S; }; };