import * as React$1 from 'react'; import React__default, { ReactNode, PointerEvent, MouseEvent } from 'react'; import { d as AdSlot, c as AdPosition, a as AdContextValue, S as SignInOptions } from './sign-in-DQlIdqsi.mjs'; export { A as AdConfig, g as getVariantDisplayName } from './sign-in-DQlIdqsi.mjs'; import { C as CimplifyClient, aj as EnrichedOrderItem, ai as EnrichedOrder, u as Business, aN as Location, bQ as ReorderResult, be as OrderStatus, aV as Order, bC as QuoteBundleSelectionInput, bD as QuoteCompositeSelectionInput, bs as PriceQuote, bG as QuoteUiMessage, c8 as Service, p as AvailableSlot, a8 as DayAvailability, a5 as CustomerBooking, F as CancelBookingResult, h as ActivityStateResponse, ci as SessionMessage, A as ActivityRecommendation, aa as DeliveryFeeResponse, ae as DeliveryOptionsResponse, aw as FxRateResponse, cs as StoreCreditBalance, cu as StorefrontBootstrap, W as ChatWidgetStarter, T as ChatMessage, V as ChatUploadAttachment, a1 as CimplifyElements, O as ChatAttachment, aG as LineItem, cm as Staff, c2 as Room, U as ChatReplyContext } from './catalogue-OT89_Ifs.mjs'; import { j as CheckoutTermsView, cR as OrderType, dL as ProcessCheckoutResult, aY as CheckoutStatus, aZ as CheckoutStatusContext, C as CurrencyCode, P as Product, de as Pagination, c as CimplifyError, e as ProductWithDetails, b as Category, cJ as Money, a as ChosenPrice, a3 as BundleSelectionInput, b8 as ComponentSelectionInput, a2 as BundleSelectionData, bh as CompositeSelectionData, d as Collection, dU as ProductTaxonomy, eL as TaxonomyWithChildren, dV as ProductTimeProfile, bz as Deal, dQ as ProductDealInfo, bJ as DiscountValidation, a5 as BundleSummary, bf as CompositePriceResult, eG as SubscriptionWithDetails, eF as SubscriptionStatus, eC as Subscription, bn as CustomAttributeDefinition, dZ as PropertyFacet, dP as ProductBillingPlan, f3 as VariantView, eZ as VariantAxisWithValues, y as AddressInfo, L as AuthenticatedData, c5 as ElementsOptions, dp as PaymentMethodInfo, c3 as ElementsCheckoutResult, dK as ProcessCheckoutOptions, u as AddOnWithOptions, $ as BundleComponentView, a0 as BundlePriceType, bd as CompositeGroupView, bM as DisplayCart, dR as ProductInputField, z as AddressValue, S as SaleInfo, U as UpcomingSale, D as DurationUnit, W as BoundaryKind, et as SchedulingMode, bB as DepositType, bo as CustomAttributeValue, dS as ProductProperty, ei as QuantityPricingTier } from './elements-Bty6Qs_N.mjs'; import * as react_jsx_runtime from 'react/jsx-runtime'; import { P as ProductWithPrice } from './price-CSztR02F.mjs'; import { ClassValue } from 'clsx'; import { Matcher } from 'react-day-picker'; interface UserIdentity { uid: string; isAuthenticated: boolean; fingerprint: string; signals: DeviceSignals; } interface DeviceSignals { userAgent: string; language: string; languages: string[]; platform: string; screenWidth: number; screenHeight: number; colorDepth: number; pixelRatio: number; timezone: string; timezoneOffset: number; touchSupport: boolean; cookiesEnabled: boolean; doNotTrack: boolean; } interface AdContextValueExtended extends AdContextValue { identity: UserIdentity | null; apiBase: string; } declare function useAds(): AdContextValueExtended; interface AdProviderProps { siteId: string; apiBase?: string; authenticatedAccountId?: string; children: ReactNode; } declare function AdProvider({ siteId, apiBase, authenticatedAccountId, children, }: AdProviderProps): React__default.ReactElement; interface AdProps { slot: AdSlot; position?: AdPosition; className?: string; style?: React__default.CSSProperties; fallback?: ReactNode; onImpression?: (adId: string) => void; onClick?: (adId: string) => void; } declare function Ad({ slot, position, className, style, fallback, onImpression, onClick, }: AdProps): React__default.ReactElement | null; type CheckoutOrderType = OrderType; interface CimplifyCheckoutProps { client: CimplifyClient; businessId?: string; cartId?: string; /** Confirm this hosted/durable intent instead of minting a new cart intent. */ intentId?: string; /** Bind hosted calls to the checkout-session owner rather than the API session. */ hostedSessionId?: string; /** Initial render hint; server authority is re-read before confirmation. */ initialTerms?: CheckoutTermsView; locationId?: string; linkUrl?: string; orderTypes?: CheckoutOrderType[]; defaultOrderType?: CheckoutOrderType; submitLabel?: string; enrollInLink?: boolean; onComplete: (result: ProcessCheckoutResult) => void; onError?: (error: { code: string; message: string; }) => void; onStatusChange?: (status: CheckoutStatus, context: CheckoutStatusContext) => void; appearance?: { theme?: "light" | "dark"; variables?: { primaryColor?: string; fontFamily?: string; borderRadius?: string; }; }; className?: string; } declare function CimplifyCheckout({ client, businessId, cartId, intentId, hostedSessionId, initialTerms, locationId, linkUrl, orderTypes, defaultOrderType, submitLabel, enrollInLink, onComplete, onError, onStatusChange, appearance, className, }: CimplifyCheckoutProps): React__default.ReactElement; interface NavItem { label: string; href: string; icon?: ReactNode; external?: boolean; } interface IdentitySummary { addresses?: number; paymentMethods?: number; shops?: number; } interface TimelineStep { label: string; time?: string; state: "done" | "current" | "pending"; icon?: ReactNode; } interface OrderRowData { id: string; href?: string; summary: string; meta: string; status: OrderRowStatus; total: string; thumbnails?: string[]; } type OrderRowStatus = { kind: "preparing"; label: string; } | { kind: "delivered"; label?: string; } | { kind: "completed"; label?: string; } | { kind: "cancelled"; label?: string; } | { kind: "active"; label: string; } | { kind: "paused"; label?: string; }; interface SubscriptionRowData { id: string; href?: string; title: string; meta: string; status: OrderRowStatus; price: string; unit: string; paused?: boolean; cancelled?: boolean; } interface FilterTabItem { label: string; count?: number; value: T; } interface ButtonProps extends React__default.ButtonHTMLAttributes { variant?: "primary" | "secondary" | "ghost" | "danger"; size?: "sm" | "md"; asChild?: boolean; } declare const Button: React__default.ForwardRefExoticComponent>; interface StatusProps { status: OrderRowStatus; className?: string; } declare function Status({ status, className }: StatusProps): react_jsx_runtime.JSX.Element; interface BackLinkProps extends React__default.AnchorHTMLAttributes { label?: string; } declare function BackLink({ label, className, ...props }: BackLinkProps): react_jsx_runtime.JSX.Element; interface FilterTabsProps { items: FilterTabItem[]; value: T; onChange?: (value: T) => void; className?: string; } declare function FilterTabs({ items, value, onChange, className, }: FilterTabsProps): react_jsx_runtime.JSX.Element; interface EmptyStateProps { glyph?: React__default.ReactNode; title: string; description?: string; action?: React__default.ReactNode; className?: string; } declare function EmptyState({ glyph, title, description, action, className }: EmptyStateProps): react_jsx_runtime.JSX.Element; interface ErrorStateProps { title?: string; message?: string; onRetry?: () => void; className?: string; } declare function ErrorState({ title, message, onRetry, className, }: ErrorStateProps): react_jsx_runtime.JSX.Element; interface SkeletonProps { className?: string; variant?: "row" | "block"; } declare function Skeleton({ className, variant }: SkeletonProps): react_jsx_runtime.JSX.Element; interface ToastProps { title: string; description?: string; onUndo?: () => void; onDismiss?: () => void; className?: string; } declare function Toast({ title, description, onUndo, onDismiss, className }: ToastProps): react_jsx_runtime.JSX.Element; interface AccountShellProps { sidebar: React__default.ReactNode; children: React__default.ReactNode; className?: string; } declare function AccountShell({ sidebar, children, className }: AccountShellProps): react_jsx_runtime.JSX.Element; interface AccountSidebarProps { children: React__default.ReactNode; scopeNote?: React__default.ReactNode; className?: string; } declare function AccountSidebar({ children, scopeNote, className }: AccountSidebarProps): react_jsx_runtime.JSX.Element; interface AccountIdentityStripProps { name: string; email?: string; customerId?: string; className?: string; } declare function AccountIdentityStrip({ name, email, customerId, className, }: AccountIdentityStripProps): react_jsx_runtime.JSX.Element; interface AccountNavProps { items: NavItem[]; activeHref?: string; className?: string; } declare function AccountNav({ items, activeHref, className }: AccountNavProps): react_jsx_runtime.JSX.Element; interface AccountHeroProps { eyebrow?: string; title: string; subtitle?: React__default.ReactNode; className?: string; } declare function AccountHero({ eyebrow, title, subtitle, className }: AccountHeroProps): react_jsx_runtime.JSX.Element; interface AccountContentProps { children: React__default.ReactNode; className?: string; } declare function AccountContent({ children, className }: AccountContentProps): react_jsx_runtime.JSX.Element; interface SectionProps { title?: string; meta?: React__default.ReactNode; action?: React__default.ReactNode; children: React__default.ReactNode; className?: string; } declare function Section({ title, meta, action, children, className }: SectionProps): react_jsx_runtime.JSX.Element; interface SectionMoreProps extends React__default.AnchorHTMLAttributes { } declare function SectionMore({ children, className, ...props }: SectionMoreProps): react_jsx_runtime.JSX.Element; interface HappeningPaneData { label: string; variant: "live" | "next"; title: string; when: React__default.ReactNode; actions?: React__default.ReactNode; } interface HappeningCardProps { left?: HappeningPaneData; right?: HappeningPaneData; className?: string; } declare function HappeningCard({ left, right, className }: HappeningCardProps): react_jsx_runtime.JSX.Element | null; interface ContinuityCardProps { glyph?: React__default.ReactNode; title: React__default.ReactNode; description?: React__default.ReactNode; badge?: string; className?: string; } declare function ContinuityCard({ glyph, title, description, badge, className }: ContinuityCardProps): react_jsx_runtime.JSX.Element; interface WelcomeCardProps { title: string; description: string; action: React__default.ReactNode; className?: string; } declare function WelcomeCard({ title, description, action, className }: WelcomeCardProps): react_jsx_runtime.JSX.Element; interface IdentityOfframpProps extends Omit, "title"> { title?: string; summary?: IdentitySummary; className?: string; } declare function IdentityOfframp({ title, summary, href, className, ...props }: IdentityOfframpProps): react_jsx_runtime.JSX.Element; interface OrderRowProps { order: OrderRowData; onSelect?: (id: string) => void; className?: string; } declare function OrderRow({ order, onSelect, className }: OrderRowProps): react_jsx_runtime.JSX.Element; interface OrderListProps { orders: OrderRowData[]; onSelect?: (id: string) => void; className?: string; } declare function OrderList({ orders, onSelect, className }: OrderListProps): react_jsx_runtime.JSX.Element; interface OrderDetailHeaderProps { title: string; meta?: React__default.ReactNode; className?: string; } declare function OrderDetailHeader({ title, meta, className }: OrderDetailHeaderProps): react_jsx_runtime.JSX.Element; declare function OrderDetailMetaPipe(): react_jsx_runtime.JSX.Element; interface OrderTimelineProps { steps: TimelineStep[]; className?: string; } declare function OrderTimeline({ steps, className }: OrderTimelineProps): react_jsx_runtime.JSX.Element; interface OrderItemData { id: string; name: string; meta?: string; qty: number | string; price: string; thumbnail?: string; } interface ItemsCardProps { title: string; rightLabel?: string; items: OrderItemData[]; totals?: TotalsData; className?: string; } interface TotalsData { rows: { label: string; value: string; }[]; grandLabel: string; grandValue: string; } declare function ItemsCard({ title, rightLabel, items, totals, className }: ItemsCardProps): react_jsx_runtime.JSX.Element; interface OrderTotalsProps { data: TotalsData; className?: string; } declare function OrderTotals({ data, className }: OrderTotalsProps): react_jsx_runtime.JSX.Element; interface ContextRow { label: string; value: React__default.ReactNode; manageHref?: string; manageLabel?: string; } interface ContextCardProps { rows: ContextRow[]; className?: string; } declare function ContextCard({ rows, className }: ContextCardProps): react_jsx_runtime.JSX.Element; interface DeliveryRider { name: string; photoUrl?: string; vehicle?: string; rating?: number; etaLabel?: string; distanceLabel?: string; } interface DeliveryLive { /** * The live map node from the consumer's map provider (tiles + the streamed * driver marker). The tracker overlays the ETA / "live" pills and the rider * sheet on top of it. Only pass this once the delivery provider is actually * streaming the rider's location — otherwise omit it and the step view shows. */ map: React__default.ReactNode; etaLabel?: string; } interface DeliveryTrackerProps { /** Journey steps, derived from order history. */ steps: TimelineStep[]; statusLabel?: string; etaLabel?: string; rider?: DeliveryRider; /** Present only when live driver tracking is available; swaps steps for the map. */ live?: DeliveryLive; onTrackLive?: () => void; onContactRider?: () => void; /** `card` (default) draws its own border; `plain` sits flush inside a page section. */ variant?: "card" | "plain"; className?: string; } declare function DeliveryTracker({ steps, statusLabel, etaLabel, rider, live, onTrackLive, onContactRider, variant, className, }: DeliveryTrackerProps): React__default.ReactElement; type CustomerInputType = "text" | "textarea" | "number" | "select" | "radio" | "multi_select" | "checkbox" | "color" | "date" | "date_time" | "date_range" | "time" | "file" | "image" | "url" | "email" | "phone" | "address" | "location" | "signature"; type LineItemSemanticKind = "allergen" | "dietary_preference" | "sensitivity" | "consent"; interface CustomerInput { fieldId: string; fieldName: string; fieldType: CustomerInputType | string; value: unknown; semanticKind?: LineItemSemanticKind; } interface LineSelection { quantity?: number; name: string; variantName?: string; /** Pre-formatted, e.g. "+GHS 120.00". */ priceLabel?: string; } interface LineScheduling { /** Pre-formatted window, e.g. "Sat, Apr 4 · 9:00–11:00 AM". */ whenLabel: string; staffName?: string; confirmationCode?: string; } type LineStateTone = "preparing" | "ready" | "delivered" | "booked" | "cancelled" | "default"; interface DigitalFulfillment { statusLabel: string; tone?: "ready" | "accessed" | "revoked" | "pending"; usageSummary?: string; onDownload?: () => void; } interface AccountLineItemData { id: string; name: string; imageUrl?: string; /** One quiet line under the name (variant · qty · add-ons). Auto-composed if omitted. */ subtitle?: string; /** Pre-formatted, e.g. "GHS 150.00". */ priceLabel: string; lineType?: "product" | "service" | "bundle" | "composite" | "digital"; stateLabel?: string; stateTone?: LineStateTone; scheduling?: LineScheduling; digital?: DigitalFulfillment; variant?: string; addOns?: { name: string; priceLabel?: string; }[]; /** Bundle components. */ includes?: LineSelection[]; /** Composite / build-your-own selections. */ customisations?: LineSelection[]; customerInputs?: CustomerInput[]; } interface AccountLineItemProps { item: AccountLineItemData; className?: string; } declare function AccountLineItem({ item, className }: AccountLineItemProps): React__default.ReactElement; declare function LineItemDetails({ item, className, }: { item: AccountLineItemData; className?: string; }): React__default.ReactElement; interface AccountLineItemsProps { items: AccountLineItemData[]; className?: string; } declare function AccountLineItems({ items, className }: AccountLineItemsProps): React__default.ReactElement; interface OrderViewPaymentRow { label: string; value: string; /** `positive` renders the value in the success colour (discounts, free delivery). */ tone?: "default" | "positive"; } interface OrderViewDelivery { label?: string; note?: string; steps: TimelineStep[]; statusLabel?: string; etaLabel?: string; rider?: DeliveryRider; live?: DeliveryLive; onTrackLive?: () => void; onContactRider?: () => void; } interface OrderViewPayment { stateLabel?: string; stateTone?: "positive" | "warning" | "muted"; rows: OrderViewPaymentRow[]; total: { label: string; value: string; }; /** Method line — e.g. a brand chip + masked number. */ method?: React__default.ReactNode; } type OrderStatusTone = "progress" | "positive" | "muted"; interface AccountOrderViewProps { /** Human order number (user_friendly_id), not the UUID. */ orderNumber: string; /** Sub-line, e.g. "Placed today at 10:02 AM · 5 items". */ placedLabel?: string; statusLabel?: string; statusTone?: OrderStatusTone; items: AccountLineItemData[]; itemsLabel?: string; delivery?: OrderViewDelivery; payment: OrderViewPayment; shipTo?: { heading?: string; name?: string; lines: React__default.ReactNode; }; actions?: React__default.ReactNode; onBack?: () => void; backLabel?: string; className?: string; } declare function AccountOrderView({ orderNumber, placedLabel, statusLabel, statusTone, items, itemsLabel, delivery, payment, shipTo, actions, onBack, backLabel, className, }: AccountOrderViewProps): React__default.ReactElement; /** Map one enriched order line to the `` view-model. */ declare function toAccountLineItem(item: EnrichedOrderItem, currency: CurrencyCode): AccountLineItemData; declare function toAccountLineItems(items: EnrichedOrderItem[], currency: CurrencyCode): AccountLineItemData[]; interface ToAccountOrderViewOptions { placedLabel?: string; onBack?: () => void; } /** Map the storefront `EnrichedOrder` to `` props. */ declare function toAccountOrderView(order: EnrichedOrder, opts?: ToAccountOrderViewOptions): AccountOrderViewProps; interface SubscriptionRowProps { subscription: SubscriptionRowData; onSelect?: (id: string) => void; iconTile?: React__default.ReactNode; className?: string; } declare function SubscriptionRow({ subscription, onSelect, iconTile, className, }: SubscriptionRowProps): react_jsx_runtime.JSX.Element; interface SubscriptionListProps { subscriptions: SubscriptionRowData[]; onSelect?: (id: string) => void; renderIcon?: (s: SubscriptionRowData) => React__default.ReactNode; className?: string; } declare function SubscriptionList({ subscriptions, onSelect, renderIcon, className, }: SubscriptionListProps): react_jsx_runtime.JSX.Element; interface NextDeliveryCardProps { label: string; date: string; meta?: React__default.ReactNode; actions?: React__default.ReactNode; footnote?: React__default.ReactNode; rightFootnote?: React__default.ReactNode; paused?: boolean; className?: string; } declare function NextDeliveryCard({ label, date, meta, actions, footnote, rightFootnote, paused, className, }: NextDeliveryCardProps): react_jsx_runtime.JSX.Element; interface AccountSignedOutPromptProps { eyebrow?: string; title?: string; description?: string; clientId: string; redirectUri: string; lastEmail?: string; onSuccess?: () => void; className?: string; } declare function AccountSignedOutPrompt({ eyebrow, title, description, clientId, redirectUri, lastEmail, onSuccess, className, }: AccountSignedOutPromptProps): react_jsx_runtime.JSX.Element; interface MobileAccountShellProps { storeName: React__default.ReactNode; leading?: React__default.ReactNode; trailing?: React__default.ReactNode; tabBar?: React__default.ReactNode; children: React__default.ReactNode; className?: string; } declare function MobileAccountShell({ storeName, leading, trailing, tabBar, children, className, }: MobileAccountShellProps): react_jsx_runtime.JSX.Element; interface MobileTabBarProps { items: NavItem[]; activeHref?: string; className?: string; } declare function MobileTabBar({ items, activeHref, className }: MobileTabBarProps): react_jsx_runtime.JSX.Element; declare function MobileBackButton({ href, label }: { href: string; label?: string; }): react_jsx_runtime.JSX.Element; declare function MobileMoreButton({ onClick }: { onClick?: () => void; }): react_jsx_runtime.JSX.Element; interface AccountPageBaseProps { customerName: string; customerEmail?: string; customerId?: string; merchantName: string; nav?: NavItem[]; activeHref?: string; scopeNote?: React__default.ReactNode; } interface AccountDashboardPageProps extends AccountPageBaseProps { greeting?: string; activePane?: { label: string; title: string; when: React__default.ReactNode; actions?: React__default.ReactNode; }; upcomingPane?: { label: string; title: string; when: React__default.ReactNode; actions?: React__default.ReactNode; }; continuity?: { glyph?: React__default.ReactNode; title: React__default.ReactNode; description?: React__default.ReactNode; badge?: string; }; recentOrders?: OrderRowData[]; identitySummary?: IdentitySummary; welcomeCta?: React__default.ReactNode; } declare function AccountDashboardPage({ customerName, customerEmail, customerId, merchantName, nav, activeHref, scopeNote, greeting, activePane, upcomingPane, continuity, recentOrders, identitySummary, welcomeCta, }: AccountDashboardPageProps): react_jsx_runtime.JSX.Element; interface AccountOrdersPageProps extends AccountPageBaseProps { title?: string; description?: React__default.ReactNode; orders: OrderRowData[]; filterTabs?: React__default.ReactNode; loadMore?: React__default.ReactNode; emptyAction?: React__default.ReactNode; emptyTitle?: string; emptyDescription?: string; } declare function AccountOrdersPage({ customerName, customerEmail, customerId, merchantName, nav, activeHref, scopeNote, title, description, orders, filterTabs, loadMore, emptyAction, emptyTitle, emptyDescription, }: AccountOrdersPageProps): react_jsx_runtime.JSX.Element; interface AccountOrderDetailPageProps extends AccountPageBaseProps { title: string; metaText: string; orderId: string; status: OrderRowStatus; timelineSteps: TimelineStep[]; itemsTitle?: string; itemsRightLabel?: string; items: OrderItemData[]; totals: TotalsData; contextRows?: { label: string; value: React__default.ReactNode; manageHref?: string; }[]; primaryAction?: React__default.ReactNode; secondaryAction?: React__default.ReactNode; continuity?: { glyph?: React__default.ReactNode; title: React__default.ReactNode; description?: React__default.ReactNode; }; } declare function AccountOrderDetailPage({ customerName, customerEmail, customerId, merchantName, nav, activeHref, scopeNote, title, metaText, orderId, status, timelineSteps, itemsTitle, itemsRightLabel, items, totals, contextRows, primaryAction, secondaryAction, continuity, }: AccountOrderDetailPageProps): react_jsx_runtime.JSX.Element; interface AccountSubscriptionsPageProps extends AccountPageBaseProps { active?: SubscriptionRowData[]; paused?: SubscriptionRowData[]; past?: SubscriptionRowData[]; emptyAction?: React__default.ReactNode; emptyTitle?: string; emptyDescription?: string; } declare function AccountSubscriptionsPage({ customerName, customerEmail, customerId, merchantName, nav, activeHref, scopeNote, active, paused, past, emptyAction, emptyTitle, emptyDescription, }: AccountSubscriptionsPageProps): react_jsx_runtime.JSX.Element; interface AccountSubscriptionDetailPageProps extends AccountPageBaseProps { title: string; metaText: string; status: OrderRowStatus; paused?: boolean; nextDeliveryLabel: string; nextDeliveryDate: string; nextDeliveryMeta?: React__default.ReactNode; nextDeliveryActions?: React__default.ReactNode; nextDeliveryFootnote?: React__default.ReactNode; nextDeliveryRightFootnote?: React__default.ReactNode; itemsTitle?: string; items: OrderItemData[]; totals?: TotalsData; contextRows?: { label: string; value: React__default.ReactNode; manageHref?: string; }[]; toast?: React__default.ReactNode; cancelAction?: React__default.ReactNode; } declare function AccountSubscriptionDetailPage({ customerName, customerEmail, customerId, merchantName, nav, activeHref, scopeNote, title, metaText, status, paused, nextDeliveryLabel, nextDeliveryDate, nextDeliveryMeta, nextDeliveryActions, nextDeliveryFootnote, nextDeliveryRightFootnote, itemsTitle, items, totals, contextRows, toast, cancelAction, }: AccountSubscriptionDetailPageProps): react_jsx_runtime.JSX.Element; declare const DashboardIcon: () => react_jsx_runtime.JSX.Element; declare const OrdersIcon: () => react_jsx_runtime.JSX.Element; declare const SubscriptionsIcon: () => react_jsx_runtime.JSX.Element; declare const IdentityIcon: () => react_jsx_runtime.JSX.Element; declare const SignOutIcon: () => react_jsx_runtime.JSX.Element; declare const DashboardIcon20: () => react_jsx_runtime.JSX.Element; declare const OrdersIcon20: () => react_jsx_runtime.JSX.Element; declare const SubscriptionsIcon20: () => react_jsx_runtime.JSX.Element; declare const CheckIcon: () => react_jsx_runtime.JSX.Element; declare const OvenIcon: () => react_jsx_runtime.JSX.Element; declare const DeliveryTruckIcon: () => react_jsx_runtime.JSX.Element; declare const PackageIcon: () => react_jsx_runtime.JSX.Element; declare const BoxIcon24: () => react_jsx_runtime.JSX.Element; interface CimplifySignInButtonProps extends Omit { variant?: "primary" | "outline" | "dark" | "text"; label?: string; className?: string; disabled?: boolean; onSuccess?: () => void; onError?: (err: { error: string; description?: string; }) => void; fullWidth?: boolean; } declare function CimplifySignInButton({ variant, label, className, disabled, fullWidth, onSuccess, onError, ...signInOpts }: CimplifySignInButtonProps): React__default.ReactElement; interface CimplifyClientSession { sub: string; name?: string; email?: string; emailVerified?: boolean; phoneNumber?: string; phoneNumberVerified?: boolean; exp: number; iat: number; } interface UseCimplifySessionOptions { sessionUri?: string; } interface UseCimplifySessionResult { session: CimplifyClientSession | null; loading: boolean; refresh: () => Promise; } declare function useCimplifySession(options?: UseCimplifySessionOptions): UseCimplifySessionResult; interface UserButtonLink { label: string; href: string; icon?: React__default.ReactNode; external?: boolean; } interface CimplifyUserButtonProps { /** Controlled session. When omitted, the component reads it from `sessionUri`. */ session?: CimplifyClientSession | null; /** Session endpoint for the uncontrolled case. Defaults to `/auth/session`. */ sessionUri?: string; /** * Storefront-scoped quick links shown in the menu. These resolve against the * merchant's own pages (the business-scoped token already in the page reads * the data). Defaults to the native `/account/*` routes. */ links?: UserButtonLink[]; /** * Cross-merchant identity home. Profile, security, passkeys and devices live * on the root session at `link.cimplify.io` — never in the merchant frame — * so this is always an external link. */ identityUrl?: string; /** Sign-out target. A `
` POST is used so the BFF can clear cookies. */ signOutHref?: string; onSignOut?: () => void; /** Signed-out state delegates to the hosted OAuth flow. */ clientId?: string; redirectUri?: string; signInLabel?: string; onSignIn?: () => void; /** Hide the name beside the avatar (avatar-only trigger). */ hideName?: boolean; /** Menu alignment relative to the trigger. */ align?: "start" | "end"; className?: string; } declare function CimplifyUserButton({ session: controlledSession, sessionUri, links, identityUrl, signOutHref, onSignOut, clientId, redirectUri, signInLabel, onSignIn, hideName, align, className, }: CimplifyUserButtonProps): React__default.ReactElement | null; interface PriceProps { /** The amount, denominated in `currency` (or the business base currency). */ amount: number | string; /** * Currency the `amount` is denominated in. Pass the product/order currency * so the value renders correctly during SSR — before the provider has * loaded the business client-side. Falls back to the provider's base * currency, then USD. */ currency?: CurrencyCode; /** Optional CSS class name for the wrapping span. */ className?: string; /** Optional prefix rendered before the formatted price (e.g. "+"). */ prefix?: string; /** * Apply the provider's FX display-currency override when one is active. * Default true. The conversion is a post-hydration enhancement: it only * engages once an FX rate has loaded client-side, so SSR and first-paint * output always match and no currency flash occurs. */ convert?: boolean; } /** * Price — renders a formatted price value. * * Currency is resolved from the `currency` prop (the amount's source currency), * falling back to the provider's base currency, then USD. Because the source * currency comes from data rather than the client-only provider bootstrap, an * explicit `currency` renders correctly during SSR. * * FX display-currency conversion (when a user picks a non-base display * currency) is layered on top after hydration, and only when the source is the * base currency the FX rate is computed from. It never affects the server or * first-paint render, so there is no hydration mismatch. */ declare function Price({ amount, currency, className, prefix, convert, }: PriceProps): React__default.ReactElement; type PrefetchMode = "aggressive" | "hover" | "off"; interface PrefetchOptions { mode?: PrefetchMode; rootMargin?: string; images?: boolean; } interface ResolvedPrefetchOptions { mode: PrefetchMode; rootMargin: string; images: boolean; } interface CimplifyLinkProps { href: string; className?: string; children: ReactNode; onPointerEnter?: React__default.PointerEventHandler; onFocus?: React__default.FocusEventHandler; } type CimplifyLinkComponent = React__default.ComponentType; interface CimplifyClientContextValue { client: CimplifyClient; business: Business | null; currency: string; country: string; locations: Location[]; isReady: boolean; prefetch: ResolvedPrefetchOptions; linkComponent: CimplifyLinkComponent | null; /** The business's pricing currency (always the base, for API calls). */ baseCurrency: string; /** * When false, collection-backed hooks (`useCart`, etc.) skip optimistic * updates and fall back to fire-and-refetch. Default true. Mainly useful * for e2e test environments where deterministic UI is preferred over * perceived speed. */ optimistic: boolean; } interface CimplifyStateContextValue { currentLocation: Location | null; setCurrentLocation: (location: Location) => void; /** The currency prices are displayed in. Equals baseCurrency when no FX override is set. */ displayCurrency: string; /** Set a display currency override for FX conversion. Pass null to reset to base currency. */ setDisplayCurrency: (currency: string | null) => void; /** Convert a base-currency amount to the display currency. No-op when currencies match. */ convertPrice: (amount: number | string) => number; /** Current FX rate (baseCurrency → displayCurrency). Null when no conversion is active. */ fxRate: number | null; } interface CimplifyContextValue extends CimplifyClientContextValue, CimplifyStateContextValue { } interface CimplifyProviderProps { client?: CimplifyClient; children: ReactNode; onLocationChange?: (location: Location) => void; /** * Server-fetched business to seed the provider. When provided, `business` * and `baseCurrency` are correct on the first (server) render, so prices * render in the right currency during SSR with no loading flash. Pass from * a Server Component via `getServerClient().business.getInfo()`. Passing * `null` marks "no business" as resolved (still skips the loading state). */ initialBusiness?: Business | null; /** Server-fetched locations to seed the provider alongside `initialBusiness`. */ initialLocations?: Location[]; /** * Toggle hidden optimistic UI for collection-backed hooks. Default true. * Set to false to disable optimistic updates app-wide (e.g. e2e tests). */ optimistic?: boolean; prefetch?: PrefetchOptions; linkComponent?: CimplifyLinkComponent; } declare function CimplifyProvider({ client, children, onLocationChange, initialBusiness, initialLocations, optimistic, prefetch, linkComponent, }: CimplifyProviderProps): React__default.ReactElement; declare function useCimplify(): CimplifyContextValue; declare function useOptionalCimplify(): CimplifyContextValue | null; declare function useCimplifyClient(): CimplifyClientContextValue; interface CachedQueryBaseOptions { enabled?: boolean; client?: CimplifyClient; } interface UseProductsOptions extends CachedQueryBaseOptions { category?: string; taxonomy?: string; search?: string; featured?: boolean; limit?: number; sort_by?: "name" | "price" | "created_at" | "updated_at"; sort_order?: "asc" | "desc"; tags?: string[]; in_stock?: boolean; min_price?: number; max_price?: number; page?: number; properties?: Record; } interface UseProductsResult { products: Product[]; is_complete: boolean; total_available?: number; pagination?: Pagination; isLoading: boolean; error: CimplifyError | null; refetch: () => Promise; } declare function prefetchProducts(client: CimplifyClient, options: UseProductsOptions): Promise | undefined; declare function useProducts(options?: UseProductsOptions): UseProductsResult; interface UseProductOptions extends CachedQueryBaseOptions { } interface UseProductResult { product: ProductWithDetails | null; isLoading: boolean; error: CimplifyError | null; refetch: () => Promise; } declare function prefetchProduct(client: CimplifyClient, slugOrId: string): Promise | undefined; declare function useProduct(slugOrId: string | null | undefined, options?: UseProductOptions): UseProductResult; interface UseCategoriesOptions extends CachedQueryBaseOptions { } interface UseCategoriesResult { categories: Category[]; isLoading: boolean; error: CimplifyError | null; refetch: () => Promise; } declare function useCategories(options?: UseCategoriesOptions): UseCategoriesResult; interface CartVariantSelection { id: string; name: string; price_adjustment?: Money; /** Canonical evaluated variant price in the active shopper scope. */ price_info?: ChosenPrice; } interface CartAddOnOptionSelection { id: string; name: string; add_on_id?: string; default_price?: Money; } interface UseCartItem { id: string; product: Product; quantity: number; locationId?: string; variantId?: string; variant?: CartVariantSelection; quoteId?: string; addOnOptionIds?: string[]; addOnOptions?: CartAddOnOptionSelection[]; bundleSelections?: BundleSelectionInput[]; compositeSelections?: ComponentSelectionInput[]; specialInstructions?: string; scheduledStart?: string; scheduledEnd?: string; staffId?: string; units?: number; lineType?: "simple" | "service" | "bundle" | "composite" | "digital"; confirmationCode?: string; serviceStatus?: string; bundleResolved?: BundleSelectionData; compositeResolved?: CompositeSelectionData; customerInputs?: Array<{ field_id: string; field_name: string; field_type: string; value: unknown; }>; } interface AddToCartOptions { locationId?: string; variantId?: string; variant?: CartVariantSelection; quoteId?: string; /** Shopper-payable unit amount used until the authoritative cart returns. */ quotedUnitPrice?: Money; addOnOptionIds?: string[]; addOnOptions?: CartAddOnOptionSelection[]; bundleSelections?: BundleSelectionInput[]; compositeSelections?: ComponentSelectionInput[]; specialInstructions?: string; scheduledStart?: string; scheduledEnd?: string; staffId?: string; resourceId?: string; units?: number; billingPlanId?: string; customerInputs?: Array<{ field_id: string; value: unknown; }>; } interface UseCartOptions { client?: CimplifyClient; locationId?: string; currency?: string; } interface UseCartResult { items: UseCartItem[]; itemCount: number; subtotal: number; tax: number; taxRate: number | null; taxInclusive: boolean; /** Present totals gross: inclusive arithmetic or a gross_required policy. */ displayGross: boolean; taxJurisdictionLabel: string | null; total: number; currency: string; isEmpty: boolean; isLoading: boolean; /** Any pending optimistic op is in flight. */ isOptimistic: boolean; /** Number of pending ops contributing to the rendered view. */ pendingOpCount: number; addItem: (product: Product, quantity?: number, options?: AddToCartOptions) => Promise; removeItem: (itemId: string) => Promise; updateQuantity: (itemId: string, quantity: number) => Promise; clearCart: () => Promise; sync: () => Promise; reorder: (orderId: string) => Promise; } declare function useCart(options?: UseCartOptions): UseCartResult; declare function isTerminalOrderStatus(status: string): boolean; interface UseOrderOptions { poll?: boolean; pollInterval?: number; enabled?: boolean; client?: CimplifyClient; onStatusChange?: (previousStatus: OrderStatus, newStatus: OrderStatus, order: Order) => void; } interface UseOrderResult { order: Order | null; isLoading: boolean; error: CimplifyError | null; refetch: () => Promise; isTerminal: boolean; } declare function useOrder(orderId: string | null | undefined, options?: UseOrderOptions): UseOrderResult; interface UseLocationsOptions { client?: CimplifyClient; } interface UseLocationsResult { locations: Location[]; currentLocation: Location | null; setCurrentLocation: (location: Location) => void; isLoading: boolean; } declare function useLocations(options?: UseLocationsOptions): UseLocationsResult; interface UseCollectionsOptions extends CachedQueryBaseOptions { } interface UseCollectionsResult { collections: Collection[]; isLoading: boolean; error: CimplifyError | null; refetch: () => Promise; } declare function useCollections(options?: UseCollectionsOptions): UseCollectionsResult; interface UseCollectionOptions extends CachedQueryBaseOptions { } interface UseCollectionResult { collection: Collection | null; products: Product[]; isLoading: boolean; error: CimplifyError | null; refetch: () => Promise; } declare function useCollection(idOrSlug: string | null | undefined, options?: UseCollectionOptions): UseCollectionResult; interface UseSearchOptions { client?: CimplifyClient; minLength?: number; debounceMs?: number; limit?: number; category?: string; taxonomy?: string; tags?: string[]; featured?: boolean; in_stock?: boolean; min_price?: number; max_price?: number; sort_by?: "name" | "price" | "created_at" | "updated_at"; sort_order?: "asc" | "desc"; } interface UseSearchResult { results: Product[]; isLoading: boolean; error: CimplifyError | null; query: string; setQuery: (query: string) => void; clear: () => void; } declare function useSearch(options?: UseSearchOptions): UseSearchResult; interface UseQuoteOptions { client?: CimplifyClient; enabled?: boolean; autoRefresh?: boolean; refreshBeforeExpiryMs?: number; } interface UseQuoteInput { productId: string; variantId?: string; locationId?: string; quantity?: number; addOnOptionIds?: string[]; bundleSelections?: QuoteBundleSelectionInput[]; compositeSelections?: QuoteCompositeSelectionInput[]; } interface UseQuoteResult { quote: PriceQuote | null; isLoading: boolean; error: CimplifyError | null; refresh: () => Promise; isExpired: boolean; messages: QuoteUiMessage[]; } declare function useQuote(input: UseQuoteInput | null | undefined, options?: UseQuoteOptions): UseQuoteResult; interface UseTaxonomiesOptions extends CachedQueryBaseOptions { parentId?: string; } interface UseTaxonomiesResult { taxonomies: ProductTaxonomy[]; isLoading: boolean; error: CimplifyError | null; refetch: () => Promise; } declare function useTaxonomies(options?: UseTaxonomiesOptions): UseTaxonomiesResult; interface UseTaxonomyOptions extends CachedQueryBaseOptions { } interface UseTaxonomyResult { taxonomy: TaxonomyWithChildren | null; isLoading: boolean; error: CimplifyError | null; refetch: () => Promise; } declare function useTaxonomy(id: string, options?: UseTaxonomyOptions): UseTaxonomyResult; interface UseTaxonomyPathOptions extends CachedQueryBaseOptions { } interface UseTaxonomyPathResult { path: ProductTaxonomy[]; isLoading: boolean; error: CimplifyError | null; refetch: () => Promise; } declare function useTaxonomyPath(id: string, options?: UseTaxonomyPathOptions): UseTaxonomyPathResult; interface UseProductSchedulesOptions extends CachedQueryBaseOptions { } interface UseProductSchedulesResult { schedules: ProductTimeProfile[]; isLoading: boolean; error: CimplifyError | null; refetch: () => Promise; } declare function useProductSchedules(productId: string, options?: UseProductSchedulesOptions): UseProductSchedulesResult; interface UseProductAvailabilityOptions extends CachedQueryBaseOptions { locationId?: string; } interface UseProductAvailabilityResult { isAvailable: boolean | null; schedulesToday: ProductTimeProfile[]; isLoading: boolean; error: CimplifyError | null; refetch: () => Promise; } declare function useProductAvailability(productId: string, options?: UseProductAvailabilityOptions): UseProductAvailabilityResult; interface UseDealsOptions extends CachedQueryBaseOptions { locationId?: string; } interface UseDealsResult { deals: Deal[]; isLoading: boolean; error: CimplifyError | null; refetch: () => Promise; } declare function useDeals(options?: UseDealsOptions): UseDealsResult; interface UseProductsOnSaleOptions extends CachedQueryBaseOptions { } interface UseProductsOnSaleResult { products: ProductDealInfo[]; isLoading: boolean; error: CimplifyError | null; refetch: () => Promise; } declare function useProductsOnSale(options?: UseProductsOnSaleOptions): UseProductsOnSaleResult; interface UseProductDealsOptions extends CachedQueryBaseOptions { } interface UseProductDealsResult { deals: Deal[]; isLoading: boolean; error: CimplifyError | null; refetch: () => Promise; } declare function useProductDeals(productId: string, options?: UseProductDealsOptions): UseProductDealsResult; interface UseValidateDiscountOptions { client?: CimplifyClient; } interface UseValidateDiscountResult { validate: (code: string, orderSubtotal: string, locationId?: string) => Promise; isValidating: boolean; error: CimplifyError | null; } declare function useValidateDiscount(options?: UseValidateDiscountOptions): UseValidateDiscountResult; interface UseBundlesOptions extends CachedQueryBaseOptions { } interface UseBundlesResult { bundles: BundleSummary[]; isLoading: boolean; error: CimplifyError | null; refetch: () => Promise; } declare function useBundles(options?: UseBundlesOptions): UseBundlesResult; interface UseProductPriceInput { product: Product | ProductWithDetails; quantity?: number; variant?: { price_adjustment?: number | string; price_info?: ChosenPrice; }; addOnOptions?: Array<{ default_price?: number | string; }>; compositePrice?: CompositePriceResult | null; bundleTotalPrice?: number | null; } interface UseProductPriceResult { unitPrice: number; totalPrice: number; displayTotalPrice: number; } declare function useProductPrice(input: UseProductPriceInput): UseProductPriceResult; interface UseOrdersOptions extends CachedQueryBaseOptions { status?: OrderStatus; limit?: number; } interface UseOrdersResult { orders: Order[]; isLoading: boolean; error: CimplifyError | null; refetch: () => Promise; } declare function useOrders(options?: UseOrdersOptions): UseOrdersResult; /** * Drop every cached orders list so the next mount refetches. Call after * placing an order — the cache would otherwise serve the stale list until GC. */ declare function clearOrdersCache(): void; interface UseSubscriptionsOptions { status?: SubscriptionStatus; enabled?: boolean; } interface UseSubscriptionsResult { subscriptions: Subscription[]; isLoading: boolean; error: CimplifyError | null; refetch: () => Promise; } declare function useSubscriptions(options?: UseSubscriptionsOptions): UseSubscriptionsResult; interface UseSubscriptionOptions { enabled?: boolean; } interface UseSubscriptionResult { subscription: SubscriptionWithDetails | null; isLoading: boolean; error: CimplifyError | null; cancel: (reason?: string) => Promise; pause: () => Promise; resume: () => Promise; skipNext: () => Promise; refetch: () => Promise; } declare function useSubscription(id: string | null | undefined, options?: UseSubscriptionOptions): UseSubscriptionResult; interface UseServicesOptions extends CachedQueryBaseOptions { } interface UseServicesResult { services: Service[]; isLoading: boolean; error: CimplifyError | null; refetch: () => Promise; } declare function useServices(options?: UseServicesOptions): UseServicesResult; interface UseAvailableSlotsOptions extends CachedQueryBaseOptions { participantCount?: number; units?: number; } interface UseAvailableSlotsResult { slots: AvailableSlot[]; isLoading: boolean; error: CimplifyError | null; refetch: () => Promise; } declare function useAvailableSlots(serviceId: string | null, date: string | null, options?: UseAvailableSlotsOptions): UseAvailableSlotsResult; interface UseServiceAvailabilityOptions extends CachedQueryBaseOptions { participantCount?: number; units?: number; locationId?: string; } interface UseServiceAvailabilityResult { days: DayAvailability[]; isLoading: boolean; error: CimplifyError | null; refetch: () => Promise; } declare function useServiceAvailability(serviceId: string | null, startDate: string | null, endDate: string | null, options?: UseServiceAvailabilityOptions): UseServiceAvailabilityResult; interface UseBookingsOptions extends CachedQueryBaseOptions { filter?: "all" | "upcoming" | "past"; } interface UseBookingsResult { bookings: CustomerBooking[]; isLoading: boolean; error: CimplifyError | null; refetch: () => Promise; cancelBooking: (bookingId: string, reason?: string) => Promise; } declare function useBookings(options?: UseBookingsOptions): UseBookingsResult; interface UseAttributeDefinitionsOptions extends CachedQueryBaseOptions { namespace?: string; } interface UseAttributeDefinitionsResult { definitions: CustomAttributeDefinition[]; isLoading: boolean; error: CimplifyError | null; refetch: () => Promise; } declare function useAttributeDefinitions(options?: UseAttributeDefinitionsOptions): UseAttributeDefinitionsResult; interface UsePropertyFacetsOptions extends CachedQueryBaseOptions { category_id?: string; product_type?: string; } interface UsePropertyFacetsResult { facets: PropertyFacet[]; isLoading: boolean; error: CimplifyError | null; refetch: () => Promise; } declare function usePropertyFacets(options?: UsePropertyFacetsOptions): UsePropertyFacetsResult; interface UseBillingPlansOptions { enabled?: boolean; client?: CimplifyClient; customerId?: string; quantity?: number; orderValue?: number; } interface UseBillingPlansResult { plans: ProductBillingPlan[]; subscriptionPlans: ProductBillingPlan[]; installmentPlans: ProductBillingPlan[]; isLoading: boolean; error: CimplifyError | null; refetch: () => Promise; } /** * Fetch eligible billing plans for a product, filtered by customer/quantity/order value. * * For unfiltered plans, use `product.billing_plans` directly from `useProduct` instead — * they are included in the product response and require no extra API call. */ declare function useBillingPlans(productId: string | null | undefined, options?: UseBillingPlansOptions): UseBillingPlansResult; interface UseVariantSelectorOptions { variants: VariantView[]; axes: VariantAxisWithValues[]; } interface UseVariantSelectorResult { selectedValues: Record; selectedVariant: VariantView | null; variantImage: string | null; availableValues: Record>; selectValue: (axisId: string, valueId: string) => void; reset: () => void; } /** * Multi-axis variant selector. Resolves a variant from axis selections * and computes which values remain available as the user narrows choices. * * ```tsx * const { selectedValues, selectedVariant, availableValues, selectValue } = * useVariantSelector({ variants: product.variants, axes: product.variant_axes }); * * // Render axes * axes.map(axis => axis.values.map(value => ( *