declare function getVariantDisplayName(variant: {
    name?: string;
    display_attributes?: Array<{
        value_name: string;
    }>;
    is_default?: boolean;
}, productName?: string): string;

type AdSlot = "banner" | "sidebar" | "in-content" | "native" | "footer";
type AdPosition = "static" | "sticky" | "fixed";
type AdTheme = "light" | "dark" | "auto";
interface AdConfig {
    enabled: boolean;
    theme: AdTheme;
    excludePaths?: string[];
}
interface AdCreative {
    id: string;
    html: string;
    clickUrl: string;
}
interface AdContextValue {
    siteId: string | null;
    config: AdConfig | null;
    isLoading: boolean;
}

interface SignInOptions {
    clientId: string;
    redirectUri: string;
    callbackUri?: string;
    scope?: string;
    /** OIDC issuer. The authorize host is resolved from its discovery document.
     *  Defaults to https://api.cimplify.io. */
    issuer?: string;
    /** @deprecated Pass `issuer`. If set, used directly as the authorize host. */
    authUrl?: string;
    loginHint?: string;
    prompt?: "none" | "login" | "consent";
    uiMode?: "checkout" | "default";
    /**
     * "redirect" (default) navigates the top-level window to the IdP and back —
     * works in every browser, on any domain, because the IdP is first-party
     * during the hop. "modal" opens an iframe and only works where third-party
     * cookies are allowed (Chrome today; not Safari/Firefox).
     */
    mode?: "redirect" | "modal";
    /**
     * In modal mode, first try a hidden prompt=none authorize request. If the
     * shopper already has a valid Cimplify SSO session, the caller receives the
     * access token without showing UI; otherwise the regular modal opens.
     */
    silentFirst?: boolean;
    silentTimeoutMs?: number;
    /** Where to land after a successful redirect sign-in. Defaults to the current path. */
    returnTo?: string;
    onError?: (err: {
        error: string;
        description?: string;
    }) => void;
    onSuccess?: (result: SignInSuccess) => void;
}
interface SignInSuccess {
    accessToken?: string;
    expiresIn?: number;
    scope?: string;
}
declare function startSignIn(opts: SignInOptions): Promise<void>;

export { type AdConfig as A, type SignInOptions as S, type AdContextValue as a, type AdCreative as b, type AdPosition as c, type AdSlot as d, type AdTheme as e, getVariantDisplayName as g, startSignIn as s };
