import { ElementStyles } from '@microsoft/fast-element';
import { Container } from '@microsoft/fast-foundation';
/**
 * @public
 */
export declare const defaultOrganisation: string;
/**
 * @public
 */
export declare const defaultUser: string;
/**
 * @public
 */
export declare const defaultPassword: string;
/**
 * @public
 */
export declare const defaultApiHost: string;
/**
 * @public
 */
export declare const defaultSocketExt: string;
/**
 * @public
 */
export declare const hostEnv: string;
/**
 * @public
 */
export declare const hostUrl: string;
/**
 * @public
 */
export declare const Routes: {
    readonly login: "login";
    readonly 'request-account': "request-account";
    readonly 'reset-password': "reset-password";
    readonly 'forgot-password': "forgot-password";
    readonly verify: "verify";
    readonly protected: "protected";
    readonly 'not-found': "not-found";
};
/**
 * @public
 */
export type Routes = (typeof Routes)[keyof typeof Routes];
/**
 * A utility to check if a pathname is a route of this micro frontend.
 *
 * @param pathname - A pathname string to check, typically location.pathname, which is used when a value is omitted.
 *
 * @public
 * @privateRemarks
 * I've just put this util in for now given there's some app level direction code in place which needs review.
 */
export declare function isMFRoute(pathname?: string): boolean;
/**
 * @public
 * Could be expanded to allow field ViewTemplates.
 */
export type FieldConfig = {
    label: string;
    /**
     * @privateRemarks
     * Added for now to apply defaults, but I'm not convinced we should do this. Could be made reactive after upgrade.
     */
    value?: any;
};
/**
 * @public
 * @privateRemarks
 * Using null to exclude the organisation field rather than boolean, as it affords cleaner value lookups in the templates.
 */
export type FieldConfigMap = {
    organisation: FieldConfig | null;
    username: FieldConfig;
    email: FieldConfig;
    password: FieldConfig;
};
/**
 * @public
 */
export type SSOConfig = {
    /**
     * Optionally toggle the SSO journey on/off by default.
     */
    toggled?: boolean;
    /**
     * The identity providers path under the current host.
     *
     * @example
     * ```ts
     * identityProvidersPath: 'sso/list'
     * ```
     */
    identityProvidersPath: string;
};
/**
 * LoginConfig DI interface.
 *
 * @public
 */
export interface LoginConfig {
    /**
     * Connect automatically or require user to click a connect button.
     */
    autoConnect: boolean;
    /**
     * Login automatically or require user to click a login button after a connection is established.
     *
     * @remarks
     * Needs to manually be enabled in the NavigationContributor (see [2] in the example in the {@link Login} class).
     */
    autoAuth: boolean;
    /**
     * Logo styles.
     *
     * @remarks
     * Providing `null` will hide the logo. Use content: url(...); to set source.
     *
     * @example Setting a custom logo
     * ```ts
     * logo: css`
     *     content: url(${customLogoImport});
     * `,
     * ```
     */
    logo: ElementStyles | null;
    /**
     * Background styles.
     *
     * @remarks
     * See {@link https://developer.mozilla.org/en-US/docs/Web/CSS/background} for more information.
     *
     * @example Setting a custom background image
     * ```ts
     * background: css`
     *     :host {
     *         background-image: url(${customBGImport});
     *     }
     * `,
     * ```
     */
    background: ElementStyles;
    /**
     * Omit any of the internal routes except 'login' and 'not-found'.
     *
     * @remarks
     * Routes specified here will not be configured nor will any internal cross-links to them be displayed.
     *
     * @example
     * ```ts
     * omitRoutes: ['request-account'],
     * ```
     */
    omitRoutes: Exclude<Routes, 'login' | 'not-found'>[];
    /**
     * Map of configuration for each of the primary form fields.
     *
     * @remarks
     * Use to drive inclusion / exclusion, tailor labels etc.
     */
    fields: FieldConfigMap;
    /**
     * Show or hide the connection status indicator.
     */
    showConnectionIndicator: boolean;
    /**
     * The default URL to route the user to after a successful login.
     *
     * @remarks
     * Session.returnUrl set via Session.captureReturnUrl() trumps this value.
     */
    defaultRedirectUrl: string;
    /**
     * Omit certain return urls which the session service may have captured.
     *
     * @example
     * ```ts
     * omitRedirectUrls: ['/not-found'],
     * ```
     */
    omitRedirectUrls: string[];
    /**
     * SSO configuration.
     *
     * @remarks
     * Providing `null` excludes the SSO journey option completely.
     */
    sso: SSOConfig | null;
    /**
     * Display arbitrary version information.
     *
     * @remarks
     * Applications may choose to set this to display their Application release version on the login form.
     *
     * @example
     * ```ts
     * versionInformation: 'Version 3.0.0',
     * ```
     */
    versionInformation?: string;
}
/**
 * Default LoginConfig DI implementation.
 * @public
 */
export declare const defaultLoginConfig: LoginConfig;
/**
 * LoginConfig DI key.
 *
 * @internal
 * @privateRemarks
 * Marked as internal to stop api-extractor becoming confused cross-linking tokens with the same name.
 */
export declare const LoginConfig: import("@microsoft/fast-foundation").InterfaceSymbol<LoginConfig>;
/**
 * Configure the login micro frontend settings.
 *
 * @remarks
 * This is primarily for general settings, rather than re-defining the element, static templating / style changes.
 *
 * @param container - DI container.
 * @param config - A partial LoginConfig.
 *
 * @example Configuring login on lazy load
 * ```ts
 * name: 'login',
 * path: 'login',
 * title: 'Login',
 * element: async () => {
 *   const { configure, define, defaultLoginConfig } = await import('@genesislcap/foundation-login');
 *   configure(this.container, {
 *     autoConnect: true,
 *     omitRoutes: ['request-account'],
 *     fields: {
 *       ...defaultLoginConfig.fields,
 *       organisation: {
 *         label: 'CompID',
 *       },
 *     },
 *     defaultRedirectUrl: 'dashboard',
 *     logo: loginLogo,
 *     background: loginBG,
 *   });
 *   // You can import and return `Login` directly here or re-define it completely via `define`.
 *   return define({
 *     name: `nexus-login`,
 *   });
 * },
 * layout: loginLayout,
 * settings: { public: true },
 * childRouters: true,
 * ```
 *
 * @public
 * @privateRemarks
 * We can tailor the spreading logic after we put it to use. Keeping it simple for now.
 */
export declare function configure(container: Container, config: Partial<LoginConfig>): void;
//# sourceMappingURL=config.d.ts.map