import { Component } from 'vue'; import { Cluster } from '@propeller-commerce/propeller-sdk-v2'; export interface ClusterCardProps { /** The cluster object to display */ cluster: Cluster; /** Currency symbol to display. Defaults to '€'. */ currency?: string; /** Show the cluster name. Defaults to true. */ showName?: boolean; /** Show the default product image. Defaults to true. */ showImage?: boolean; /** Show the cluster short description. Defaults to false. */ showShortDescription?: boolean; /** * Show the SKU. Displays the cluster SKU; falls back to the default product SKU * if the cluster SKU is empty. Defaults to true. */ showSku?: boolean; /** Show the default product manufacturer. Defaults to false. */ showManufacturer?: boolean; /** * Show default product stock information (quantity badge). * Reads `defaultProduct.inventory.totalQuantity`. Defaults to true. */ showStock?: boolean; /** * Show only the availability indicator (Available / Not available) inside ItemStock. * Only relevant when `showStock` is true. * Defaults to true. */ showAvailability?: boolean; /** * Show the price below the product name. * Defaults to true. */ showPrice?: boolean; /** * Label overrides forwarded to the embedded ItemStock component. * Keys: inStock, outOfStock, lowStock, available, notAvailable, pieces */ stockLabels?: Record; /** * Attribute codes/names to look up on the default product and display as * badge overlays on the image. Resolved against * `defaultProduct.attributes.items[].attributeDescription.name`. * Attributes with no matching value are silently omitted. * Example: ['new', 'sale'] */ imageLabels?: string[]; /** * Attribute codes/names to look up on the default product and display as * extra text rows below the cluster name. Resolved the same way as `imageLabels`. * Example: ['brand', 'color'] */ textLabels?: string[]; /** Renders a heart-icon toggle button on the cluster image. Defaults to false. */ enableAddFavorite?: boolean; /** * Called whenever the favourite state is toggled. * The second argument indicates the new state: `true` = added, `false` = removed. */ onToggleFavorite?: (cluster: Cluster, isFavorite: boolean) => void; /** * Called when the cluster name, image, or "View cluster" button is clicked. * When provided, the default `` navigation is prevented so the consumer * can use framework-specific routing (e.g. Next.js `router.push`). */ onClusterClick?: (cluster: Cluster) => void; /** * Override any UI string. * Available keys: addToFavorites, removeFromFavorites, viewCluster, * inStock, lowStock, outOfStock */ labels?: Record; /** Number of grid columns — when 1 the card renders as a compact horizontal row. */ columns?: number; /** Extra CSS class applied to the root element. */ className?: string; /** Configuration object passed to the component */ configuration?: any; /** Include tax in the price display */ includeTax?: boolean; /** Language code used to resolve localised names and slugs. Defaults to 'NL'. */ language?: string; priceComponent?: Component; stockComponent?: Component; imageComponent?: Component; badgesComponent?: Component; favoriteComponent?: Component; } interface ClusterCardState { isFavorite: boolean; isRow: () => boolean; getClusterName: () => string; getClusterSku: () => string; getClusterImageUrl: () => string; getClusterUrl: () => string; getClusterShortDescription: () => string; getClusterManufacturer: () => string; getStockQuantity: () => number; getStockStatusLabel: () => string; getStockStatusClass: () => string; getClusterPrice: () => string; getLabel: (key: string, fallback: string) => string; handleClusterClick: (e: any) => void; handleToggleFavorite: (e: any) => void; computedImageLabels: () => string[]; computedTextLabels: () => { name: string; value: string; }[]; } declare function handleClusterClick(e: any): ReturnType; declare function handleToggleFavorite(e: any): ReturnType; declare function __VLS_template(): { attrs: Partial<{}>; slots: { image?(_: { cluster: Cluster; language: string | undefined; imageUrl: string; imageSearchFilters: any; imageVariantFilters: any; onNavigate: typeof handleClusterClick; }): any; badges?(_: { cluster: Cluster; imageLabels: string[]; labels: Record | undefined; }): any; favorite?(_: { cluster: Cluster; isFavorite: boolean; toggle: typeof handleToggleFavorite; labels: Record | undefined; }): any; sku?(_: { cluster: Cluster; sku: string; }): any; sku?(_: { cluster: Cluster; sku: string; }): any; name?(_: { cluster: Cluster; clusterUrl: string; handleClusterClick: typeof handleClusterClick; linkable: boolean; name: string; }): any; name?(_: { cluster: Cluster; clusterUrl: string; handleClusterClick: typeof handleClusterClick; linkable: boolean; name: string; }): any; textLabels?(_: { cluster: Cluster; values: { name: string; value: string; }[]; }): any; textLabels?(_: { cluster: Cluster; values: { name: string; value: string; }[]; }): any; manufacturer?(_: { cluster: Cluster; manufacturer: string; }): any; manufacturer?(_: { cluster: Cluster; manufacturer: string; }): any; shortDescription?(_: { cluster: Cluster; text: string; }): any; shortDescription?(_: { cluster: Cluster; text: string; }): any; stock?(_: { cluster: Cluster; inventory: import('@propeller-commerce/propeller-sdk-v2').ProductInventory; showAvailability: boolean; labels: Record | undefined; }): any; stock?(_: { cluster: Cluster; inventory: import('@propeller-commerce/propeller-sdk-v2').ProductInventory; showAvailability: boolean; labels: Record | undefined; }): any; stock?(_: { cluster: Cluster; inventory: import('@propeller-commerce/propeller-sdk-v2').ProductInventory; showAvailability: boolean; labels: Record | undefined; }): any; price?(_: { cluster: Cluster; price: import('@propeller-commerce/propeller-sdk-v2').ProductPrice | undefined; includeTax: boolean; currency: string | undefined; labels: Record | undefined; }): any; price?(_: { cluster: Cluster; price: import('@propeller-commerce/propeller-sdk-v2').ProductPrice | undefined; includeTax: boolean; currency: string | undefined; labels: Record | undefined; }): any; price?(_: { cluster: Cluster; price: import('@propeller-commerce/propeller-sdk-v2').ProductPrice | undefined; includeTax: boolean; currency: string | undefined; labels: Record | undefined; }): any; viewClusterLink?(_: { cluster: Cluster; clusterUrl: string; handleClusterClick: typeof handleClusterClick; label: string; }): any; viewClusterLink?(_: { cluster: Cluster; clusterUrl: string; handleClusterClick: typeof handleClusterClick; label: string; }): any; }; refs: {}; rootEl: HTMLDivElement; }; type __VLS_TemplateResult = ReturnType; declare const __VLS_component: import('vue').DefineComponent & Readonly<{}>, { showPrice: boolean; showStock: boolean; showAvailability: boolean; enableAddFavorite: boolean; showSku: boolean; showName: boolean; showImage: boolean; showShortDescription: boolean; showManufacturer: boolean; }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>; declare const _default: __VLS_WithTemplateSlots; export default _default; type __VLS_WithTemplateSlots = T & { new (): { $slots: S; }; };