import { type ProductQuery, type ProductResult, type ProductVariant } from './product-search'; /** A pickable row: a product, or one concrete variant of it. */ export interface ProductHit { product: ProductResult; variant?: ProductVariant; } export type ProductSearchFn = (query: Exclude, signal: AbortSignal) => Promise; /** Products with variants expand to one row per variant. */ export declare function flattenProductHits(results: readonly ProductResult[]): ProductHit[]; export declare const productHitKey: (h: ProductHit) => string; export declare const productHitLabel: (h: ProductHit) => string; export declare const productHitMeta: (h: ProductHit) => string; /** * Classified product search: a barcode is exact (8+ digits, no debounce), the * rest waits for 2 characters and 250ms. `search` needn't be memoized. */ export declare function useProductSearch(text: string, search: ProductSearchFn, enabled?: boolean): { parsed: ProductQuery; results: ProductResult[]; hits: ProductHit[]; loading: boolean; error: boolean; minChars: number; }; /** Stock + price at the right of a product row. `compact` → bare stock count (table cell). */ export declare function ProductHitTrailing({ hit, warehouseId, currency, compact, }: { hit: ProductHit; warehouseId?: string; currency?: string; compact?: boolean; }): import("react").JSX.Element; /** * Option body: bold name (· variant), muted meta line, stock/price right. A * product whose catalog declares an `option_display` (the server resolved it, * see `withOptionDisplays`) paints that row instead: avatar, two-line title, * subtitle and toned metrics (price + stock contributed by inventory). */ export declare function ProductHitRow({ hit, warehouseId, currency, compact }: { hit: ProductHit; warehouseId?: string; currency?: string; compact?: boolean; }): import("react").JSX.Element; //# sourceMappingURL=product-options.d.ts.map