import { InitOptions } from '@elliemae/pui-micro-frontend-base';
import { Events, ScriptingObjectTypes } from '@elliemae/pui-scripting-object';
import { IFrameSandboxValues, WindowFeatures, OpenMode } from '@elliemae/ssf-host';
/**
 * Files specific to the mode of the micro-frontend application.
 */
type EnvConfig = {
    /**
     * Array of file paths specific to the environment (development or production).
     * relative or absolute URLs
     */
    files: Array<string>;
};
/**
 * Modes in which a micro-frontend application can operate.
 */
export declare enum LaunchMode {
    DEVELOPMENT = "development",
    PRODUCTION = "production"
}
/**
 * Library that manages the micro-frontend application.
 */
export declare enum MicroAppManager {
    SSF = "ssf",
    APPSDK = "appsdk"
}
/**
 * additional options for ssf based micro-frontend applications.
 */
export type SSFAppOptions<SearchParams> = {
    /**
     * individual query parameters indicating guest application's url parameter string
     */
    searchParams?: SearchParams;
    /**
     * mode of opening the guest application, popup or embed
     * @default OpenMode.Embed
     */
    openMode?: OpenMode;
    /**
     * flag to disable sandboxing for iframe
     * @default false
     */
    disableSandbox?: boolean;
    /**
     * sandbox values for iframe
     * @default [IFrameSandboxValues.AllowScripts, IFrameSandboxValues.AllowPopups, IFrameSandboxValues.AllowModals, IFrameSandboxValues.AllowForms, IFrameSandboxValues.AllowDownloads, IFrameSandboxValues.AllowSameOrigin ]
     */
    sandboxValues?: Array<IFrameSandboxValues>;
    /**
     * resize the iframe to fit the content inside
     * @default true
     */
    fitToContent?: boolean;
    /**
     * css style for the microapp iframe
     */
    style?: string;
    /**
     * features for the popup window
     * @default { width: 800, height: 600, top: 100, left: 100 }
     */
    popupWindowFeatures?: WindowFeatures;
    /**
     * permission policy for the guest iframe
     * check https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/iframe#allow for more details
     * @example "microphone 'self' https://example.com; geolocation 'none'"
     */
    permissionPolicy?: string;
};
/**
 * Configuration object for a micro-frontend application.
 */
export type MicroAppConfig = {
    /**
     * Unique identifier for the micro-frontend application.
     */
    id: string;
    /**
     * Human-readable name for the micro-frontend application.
     */
    name: string;
    /**
     * Optional title for the micro-frontend application.
     */
    title?: string;
    /**
     * Mode in which the micro-frontend operates (e.g., 'development', 'production').
     */
    mode?: LaunchMode;
    /**
     * Base URL where the micro-frontend is hosted.
     */
    hostUrl?: string;
    /**
     * Path to the manifest file for the micro-frontend.
     */
    manifestPath?: string;
    /**
     * Route to the home page of the micro-frontend application.
     */
    homeRoute: string;
    /**
     * If true, the micro-frontend is treated as a JavaScript module.
     */
    isJsModule?: boolean;
    /**
     * Library that manages the micro-frontend application (e.g., 'ssf', 'appsdk').
     * @default 'appsdk'
     */
    microappManager?: MicroAppManager;
    /**
     * Array of file paths required by the micro-frontend application.
     * relative or absolute URLs
     */
    files?: Array<string>;
    /**
     * files specific to the development build.
     */
    development?: EnvConfig;
    /**
     * files specific to the production build.
     */
    production?: EnvConfig;
    /**
     * options for ssf based micro-frontend applications.
     */
    ssfAppOptions?: SSFAppOptions<Record<string, string | number | boolean>>;
    /**
     * The Document object associated with the micro-frontend application.
     */
    documentEle: Document;
} & InitOptions<Partial<ScriptingObjectTypes>, Events>;
export {};
