import { UrlTree } from '@angular/router';
import { BehaviorSubject } from 'rxjs';
import { LogConfig } from './logging/log-config';
import { SocialSignIn, SocialSignInItem } from './sign-in/social-sign-in';
export declare const DEFAULT_ROUTES: ComponentRoutes;
interface BaseSupabaseConfigProperties {
    apiKey: string;
    mainRoute?: string;
    signIn?: SignInConfigProperties;
    logging?: LogConfig;
    register?: RegisterProperties;
    setPassword?: SetPasswordProperties;
    routes?: Partial<ComponentRoutes>;
    profile?: ProfileProperties;
}
interface SupabaseConfigPropertiesByUrl extends BaseSupabaseConfigProperties {
    apiUrl: string;
}
interface SupabaseConfigPropertiesByProject extends BaseSupabaseConfigProperties {
    project: string;
}
export type SupabaseConfigProperties = SupabaseConfigPropertiesByUrl | SupabaseConfigPropertiesByProject;
interface ComponentRoutes {
    main: string;
    signIn: string;
    register: string;
    registerOrSignIn: string;
    setPassword: string;
    resetPassword: string;
    userProfile?: string;
    postSignOut?: string;
}
interface UserRegistrationMetadata {
    label: string;
    field: string;
    type?: 'text' | 'number';
    required?: boolean;
    defaultValue?: string | number;
}
interface RegisterProperties {
    title?: string;
    metadata?: UserRegistrationMetadata[];
}
interface ProfileProperties {
    table?: string;
    avatarField?: string;
    firstNameField?: string;
    lastNameField?: string;
}
type SocialSignInFn = (social: SocialSignIn) => boolean | void;
interface SignInConfigProperties {
    title?: string;
    magicLinks?: boolean;
    rememberMe?: boolean;
    socials?: SocialSignIn[];
    socialIconsRoot?: string;
    rememberMeStorageKey?: string;
    otpEnabled?: boolean;
    otpLength?: number;
    redirectTo?: string | string[] | UrlTree | null | undefined;
    onSocialSignIn?: SocialSignInFn;
}
interface SetPasswordProperties {
    title?: string;
    requireConfirm?: boolean;
    showMessageOnSave?: boolean;
    redirectTo?: string | string[] | UrlTree | null | undefined;
}
declare class SetPasswordConfig implements SetPasswordProperties {
    title: string;
    requireConfirm: boolean;
    showMessageOnSave: boolean;
    constructor(init?: Partial<SetPasswordProperties>);
}
declare class ProfileConfig implements ProfileProperties {
    table: string;
    userIdField: string;
    firstNameField: string;
    lastNameField: string;
    avatarField: string;
    constructor(init?: Partial<ProfileProperties>);
}
declare class RegisterConfig implements RegisterConfig {
    title: string;
    metadata: UserRegistrationMetadata[];
    constructor(init?: Partial<RegisterProperties>);
}
export declare class SignInConfig implements SignInConfigProperties {
    title: string;
    magicLinks: boolean;
    socials: SocialSignIn[];
    rememberMe: boolean;
    socialIconsRoot: string;
    socialSignInItems: SocialSignInItem[];
    redirectTo?: string | string[] | UrlTree | null | undefined;
    rememberMeStorageKey: string;
    otpEnabled: boolean;
    otpLength: number;
    onSocialSignIn?: SocialSignInFn;
    constructor(init?: Partial<SignInConfig>);
    private setSocialSignInItems;
}
export declare class SupabaseConfig {
    signIn: SignInConfig;
    api: BehaviorSubject<{
        url: string;
        key: string;
    }>;
    logging?: LogConfig;
    mainRoute: string;
    setPassword: SetPasswordConfig;
    register: RegisterConfig;
    routes: ComponentRoutes;
    redirectParamName: string | null | undefined;
    profile: ProfileConfig;
    constructor(init: SupabaseConfigProperties);
    static toApiUrl(urlOrProjectId: string): string;
}
export {};
