import { Locale, Language } from '@onefootprint/request-types';
import * as CSS from 'csstype';

type BankLinkingProps = {
    onboardingSessionToken: string;
    onCancel?: () => void;
    onError?: (error: string) => void;
    onComplete: (validationToken: string) => void;
    onClose?: () => void;
    redirectUri?: string;
};

declare const _default$1: {
    initialize: ({ onboardingSessionToken, redirectUri, onComplete, onError, onClose, }: BankLinkingProps) => Promise<void>;
    continue: () => Promise<void>;
};

type AppearanceVariables = Partial<{
    borderRadius: CSS.Property.BorderRadius;
    colorError: CSS.Property.Color;
    colorWarning: CSS.Property.Color;
    colorSuccess: CSS.Property.Color;
    colorAccent: CSS.Property.Color;
    borderColorError: CSS.Property.BorderColor;
    containerBg: CSS.Property.Background;
    containerElevation: CSS.Property.BoxShadow;
    containerBorder: CSS.Property.Border;
    containerBorderRadius: CSS.Property.BorderRadius;
    /** @deprecated Use the container element's own CSS width instead. For inline, style the containerId element. For modal/drawer, width is predetermined. */
    containerWidth: CSS.Property.Width;
    containerMaxWidth: CSS.Property.MaxWidth;
    linkColor: CSS.Property.Color;
    fontFamily: CSS.Property.FontFamily;
    labelColor: CSS.Property.Color;
    labelFont: CSS.Property.Font;
    inputBorderRadius: CSS.Property.BorderRadius;
    inputBorderWidth: CSS.Property.BorderWidth;
    inputFont: CSS.Property.Font;
    inputHeight: CSS.Property.Height;
    inputPlaceholderColor: CSS.Property.Color;
    inputColor: CSS.Property.Color;
    inputBg: CSS.Property.Background;
    inputBorderColor: CSS.Property.BorderColor;
    inputElevation: CSS.Property.BoxShadow;
    inputHoverBg: CSS.Property.Background;
    inputHoverBorderColor: CSS.Property.BorderColor;
    inputHoverElevation: CSS.Property.BoxShadow;
    inputFocusBg: CSS.Property.Background;
    inputFocusBorderColor: CSS.Property.BorderColor;
    inputFocusElevation: CSS.Property.BoxShadow;
    inputErrorBg: CSS.Property.Background;
    inputErrorBorderColor: CSS.Property.BorderColor;
    inputErrorElevation: CSS.Property.BoxShadow;
    inputErrorHoverBg: CSS.Property.Background;
    inputErrorHoverBorderColor: CSS.Property.BorderColor;
    inputErrorHoverElevation: CSS.Property.BoxShadow;
    inputErrorFocusBg: CSS.Property.Background;
    inputErrorFocusBorderColor: CSS.Property.BorderColor;
    inputErrorFocusElevation: CSS.Property.BoxShadow;
    hintColor: CSS.Property.Color;
    hintErrorColor: CSS.Property.Color;
    hintFont: CSS.Property.Font;
    linkButtonColor: CSS.Property.Color;
    linkButtonHoverColor: CSS.Property.Color;
    linkButtonActiveColor: CSS.Property.Color;
    linkButtonDestructiveColor: CSS.Property.Color;
    linkButtonDestructiveHoverColor: CSS.Property.Color;
    linkButtonDestructiveActiveColor: CSS.Property.Color;
    buttonBorderRadius: CSS.Property.BorderRadius;
    buttonBorderWidth: CSS.Property.BorderWidth;
    buttonElevation: CSS.Property.BoxShadow;
    buttonElevationHover: CSS.Property.BoxShadow;
    buttonElevationActive: CSS.Property.BoxShadow;
    buttonOutlineOffset: CSS.Property.OutlineOffset;
    buttonPrimaryBg: CSS.Property.Background;
    buttonPrimaryColor: CSS.Property.Color;
    buttonPrimaryBorderColor: CSS.Property.BorderColor;
    buttonPrimaryHoverBg: CSS.Property.Background;
    buttonPrimaryHoverColor: CSS.Property.Color;
    buttonPrimaryHoverBorderColor: CSS.Property.BorderColor;
    buttonPrimaryActiveBg: CSS.Property.Background;
    buttonPrimaryActiveColor: CSS.Property.Color;
    buttonPrimaryActiveBorderColor: CSS.Property.BorderColor;
    buttonPrimaryDisabledBg: CSS.Property.Background;
    buttonPrimaryDisabledColor: CSS.Property.Color;
    buttonPrimaryDisabledBorderColor: CSS.Property.BorderColor;
    buttonPrimaryLoadingBg: CSS.Property.Background;
    buttonPrimaryLoadingColor: CSS.Property.Color;
    buttonsPrimaryLoadingBorderColor: CSS.Property.BorderColor;
    buttonSecondaryBg: CSS.Property.Background;
    buttonSecondaryColor: CSS.Property.Color;
    buttonSecondaryBorderColor: CSS.Property.BorderColor;
    buttonSecondaryHoverBg: CSS.Property.Background;
    buttonSecondaryHoverColor: CSS.Property.Color;
    buttonSecondaryHoverBorderColor: CSS.Property.BorderColor;
    buttonSecondaryActiveBg: CSS.Property.Background;
    buttonSecondaryActiveColor: CSS.Property.Color;
    buttonSecondaryActiveBorderColor: CSS.Property.BorderColor;
    buttonSecondaryDisabledBg: CSS.Property.Background;
    buttonSecondaryDisabledColor: CSS.Property.Color;
    buttonSecondaryDisabledBorderColor: CSS.Property.BorderColor;
    buttonSecondaryLoadingBg: CSS.Property.Background;
    buttonSecondaryLoadingColor: CSS.Property.Color;
    dropdownBg: CSS.Property.Background;
    dropdownHoverBg: CSS.Property.Background;
    dropdownBorderColor: CSS.Property.BorderColor;
    dropdownBorderWidth: CSS.Property.BorderWidth;
    dropdownBorderRadius: CSS.Property.BorderRadius;
    dropdownElevation: CSS.Property.BoxShadow;
    dropdownColorPrimary: CSS.Property.Color;
    dropdownColorSecondary: CSS.Property.Color;
    dropdownFooterBg: CSS.Property.Background;
    radioSelectBg: CSS.Property.Background;
    radioSelectColor: CSS.Property.Color;
    radioSelectHoverColor: CSS.Property.Color;
    radioSelectSelectedColor: CSS.Property.Color;
    radioSelectSelectedHoverColor: CSS.Property.Color;
    radioSelectBorderRadius: CSS.Property.BorderRadius;
    radioSelectBorderWidth: CSS.Property.BorderWidth;
    radioSelectBorderColor: CSS.Property.BorderColor;
    radioSelectHoverBg: CSS.Property.Background;
    radioSelectHoverBorderColor: CSS.Property.BorderColor;
    radioSelectSelectedBg: CSS.Property.Background;
    radioSelectSelectedBorderColor: CSS.Property.BorderColor;
    radioSelectComponentsIconBg: CSS.Property.Background;
    radioSelectComponentsIconHoverBg: CSS.Property.Background;
    radioSelectComponentsIconSelectedBg: CSS.Property.Background;
    radioSelectComponentsIconColor: CSS.Property.Color;
    radioSelectComponentsIconHoverColor: CSS.Property.Color;
    radioSelectComponentsIconSelectedColor: CSS.Property.Color;
    radioSelectComponentsIconSelectedHoverColor: CSS.Property.Color;
    checkboxBg: CSS.Property.Background;
    checkboxBorderRadius: CSS.Property.BorderRadius;
    checkboxBorderWidth: CSS.Property.BorderWidth;
    checkboxBorderColor: CSS.Property.BorderColor;
    checkboxCheckedBg: CSS.Property.Background;
    checkboxCheckedBorderColor: CSS.Property.BorderColor;
    checkboxCheckedCheckmarkColor: CSS.Property.Color;
    checkboxHoverBg: CSS.Property.Background;
    checkboxHoverBorderColor: CSS.Property.BorderColor;
    checkboxDisabledBg: CSS.Property.Background;
    checkboxDisabledBorderColor: CSS.Property.BorderColor;
    checkboxErrorBorderColor: CSS.Property.BorderColor;
}>;
type AppearanceRules = Partial<{
    button: CSS.Properties;
    'button:hover': CSS.Properties;
    'button:focus': CSS.Properties;
    'button:active': CSS.Properties;
    input: CSS.Properties;
    'input:hover': CSS.Properties;
    'input:focus': CSS.Properties;
    'input:active': CSS.Properties;
    pinInput: CSS.Properties;
    'pinInput:hover': CSS.Properties;
    'pinInput:focus': CSS.Properties;
    'pinInput:active': CSS.Properties;
    label: CSS.Properties;
    hint: CSS.Properties;
    link: CSS.Properties;
    'link:hover': CSS.Properties;
    'link:active': CSS.Properties;
    linkButton: CSS.Properties;
    'linkButton:hover': CSS.Properties;
    'linkButton:focus': CSS.Properties;
    'linkButton:active': CSS.Properties;
    checkbox: CSS.Properties;
    'checkbox:hover': CSS.Properties;
    'checkbox:checked': CSS.Properties;
    'checkbox:disabled': CSS.Properties;
    pageHeader: CSS.Properties;
    pageHeaderTitle: CSS.Properties;
    pageHeaderSubtitle: CSS.Properties;
}>;
type AppearanceTheme = 'light' | 'dark' | 'system';
type Appearance = {
    fontSrc?: string;
    rules?: AppearanceRules;
    variables?: AppearanceVariables;
    variant?: 'modal' | 'inline';
    theme?: AppearanceTheme;
};

type L10n = {
    locale?: Locale;
    language: Language;
};
type PropsBase = {
    onboardingSessionToken: string;
    appearance?: Appearance;
    l10n?: L10n;
    onError?: (error: string) => void;
};
type SdkKind = 'onboarding' | 'bank_linking';
type InlineProps = {
    containerId: string;
};

type OnboardingProps = PropsBase & {
    onCancel?: () => void;
    onClose?: () => void;
    onAuth?: (validationToken: string) => void;
    onComplete: (validationToken: string) => void;
    onRelayToComponents?: (response: {
        authToken: string;
        vaultingToken: string;
    }) => void;
    shouldRelayToComponents?: boolean;
};
type OnboardingInlineProps = OnboardingProps & InlineProps & {
    onBackButtonVisibilityChange?: (isVisible: boolean) => void;
};

type Session = {
    destroy: () => Promise<void>;
};
type InlineSession = Session & {
    back: () => void;
};

declare const _default: {
    initialize: (props: OnboardingProps) => Promise<Session>;
    initializeInline: (props: OnboardingInlineProps) => Promise<InlineSession>;
};

declare enum PublicEvent {
    auth = "auth",
    backButtonVisibilityChange = "backButtonVisibilityChange",
    canceled = "canceled",
    clicked = "clicked",
    closed = "closed",
    completed = "completed",
    relayToComponents = "relayToComponents"
}
declare enum PrivateEvent {
    propsReceived = "propsReceived",
    started = "started"
}

export { Appearance as FootprintAppearance, AppearanceRules as FootprintAppearanceRules, AppearanceTheme as FootprintAppearanceTheme, AppearanceVariables as FootprintAppearanceVariables, SdkKind as FootprintComponentKind, InlineSession as FootprintInlineSession, L10n as FootprintL10n, OnboardingProps as FootprintOnboarding, OnboardingInlineProps as FootprintOnboardingInline, PrivateEvent as FootprintPrivateEvent, PropsBase as FootprintPropsBase, PublicEvent as FootprintPublicEvent, Session as FootprintSession, _default$1 as bankLinking, _default as onboarding };
