import { Cart, Contact, Customer, GraphQLClient, MediaImageProductSearchInput, TransformationsInput } from '@propeller-commerce/propeller-sdk-v2'; /** A parsed spreadsheet line: a product code and a desired quantity. */ export interface QuickOrderUploadLine { code: string; quantity: number; } export interface QuickOrderProps { /** The authenticated user. Resolved from PropellerProvider when omitted. */ user?: Contact | Customer | null; /** GraphQL client. Resolved from PropellerProvider when omitted. */ graphqlClient?: GraphQLClient; /** Active company id — scopes cart + pricing for B2B users. */ companyId?: number; /** Language for search/cart queries. Defaults to `'NL'`. */ language?: string; /** Currency symbol/code shown next to prices. Defaults to `'€'`. */ currency?: string; /** * Image filters forwarded to the typeahead + cart queries so results carry * thumbnails (same values the SearchBar uses). Without them the API returns * no image variants and the dropdown shows no product images. */ configuration?: { imageSearchFiltersGrid?: MediaImageProductSearchInput; imageVariantFiltersSmall?: TransformationsInput; /** * Catalog root the code search is scoped to. Required: without it the * typeahead and the upload resolve nothing, since searching outside a * category ignores orderlist scoping and would surface products the user * has no access to. */ baseCategoryId?: number; /** The channel's anonymous user — logged-out listings are scoped to it. */ anonymousUserId?: number; }; /** Tax zone for price calculation. Defaults to `'NL'`. */ taxZone?: string; /** Show tax-inclusive prices. Resolves from the Propeller provider. */ includeTax?: boolean; /** Orderlist (contract) ids to scope the catalogue by. */ orderlistIds?: number[]; /** Set `false` to ignore `orderlistIds`. Defaults to true when ids are given. */ applyOrderlists?: boolean; /** Number of blank rows to start with. Defaults to 5. */ initialRows?: number; /** Minimum characters before the typeahead fires. Defaults to 3. */ searchThreshold?: number; /** Typeahead debounce in ms. Defaults to 300. */ debounceMs?: number; /** * Optional spreadsheet parser. When supplied, the XLSX upload panel is shown; * the app parses the file (e.g. via SheetJS) and returns code+quantity lines. * Kept as a prop so the package stays free of a heavy xlsx dependency. */ parseSpreadsheet?: (file: File) => Promise; /** URL to a downloadable XLSX template. */ templateUrl?: string; /** * Called when the template link is clicked. Navigation is untouched — this * is a notification, not a handler: a buyer fetching the template is a * quick-order intent signal that otherwise leaves no trace at all. */ onTemplateDownload?: () => void; /** Max upload file size in bytes. Defaults to 2 MB. */ maxUploadBytes?: number; /** Max rows accepted from an upload. Defaults to 500. */ maxUploadRows?: number; /** Format a price. Defaults to the shared helper (renders the symbol). */ formatPrice?: (price: number) => string; /** Fires when the bulk add creates a fresh cart — persist the cart id. */ onCartCreated?: (cart: Cart) => void; /** Fires after a successful add — receives the resulting cart. */ afterAddToCart?: (cart: Cart) => void; /** Fires when some uploaded/entered codes could not be resolved. */ onMissingCodes?: (codes: string[]) => void; /** Override base container styles. */ className?: string; /** Localization label overrides. */ labels?: Record; } declare const _default: import('vue').DefineComponent & Readonly<{}>, { includeTax: boolean; applyOrderlists: boolean; }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, { fileInput: HTMLInputElement; }, HTMLDivElement>; export default _default;