import { Observable } from 'rxjs';
/**
 * Configuration for the Service Navigation.
 *
 * This configuration includes a mapping of the properties of the originally Service Navigation web component in camelCase notation.
 *
 * You can find the documentation in Confluence
 * * @see https://oblique.bit.admin.ch/guidelines/service-navigation-web-component
 *
 */
export interface QdShellServiceNavigationConfig {
    /**
     * @description Set if the service navigation should not be rendered.
     *
     * * @default: false
     */
    isDisabled?: boolean;
    /**
     * List of all possible languages that can be selected.
     * The e-portal language or language from url will only be adopted if it is contained in the language list.
     *
     * * web component: 'language-list'
     *
     * * @default: ['de', 'fr', 'it', 'en']
     */
    languageList?: QdShellServiceNavigationLanguage[];
    /**
     * Language that is preselected initially. Must be one of the languages listed in languageList.
     * If no defaultLanguage is defined, the e-portal language will be taken.
     * If the e-portal language cannot be determined, the defaultLanguage is 'de'.
     * A language is only set automatically if it is included in the languageList.
     *
     * * web component: 'default-language'
     *
     * * @default: e-portal language or 'de'
     */
    defaultLanguage?: QdShellServiceNavigationLanguage;
    /**
     * Use this property to update the language in the service navigation.
     * Must be one of the languages listed in languageList.
     *
     * * web component: 'language'
     *
     * * @default: e-portal language or 'de'
     */
    language?: QdShellServiceNavigationLanguage;
    /**
     * @description PAMS API environment that is used for login status requests.
     * If not provided, it will be determined automatically through the QD Auth config service if QD Auth is used.
     *
     * * Note: The type 'ABN' has been added here.
     *
     * * web component: 'environment'
     */
    pamsEnvironment?: QdShellServiceNavigationEnvironment | '';
    /**
     * @description Set if the icon with the info panel should be displayed. The Info panel can contain info,
     * links and contact information.
     *
     * * web component: 'display-info'
     *
     * * @default: false
     */
    isInfoActive?: boolean;
    /**
     * @description Additional links that are displayed in the info panel.
     *
     * * web component: 'info-links' (modified)
     *
     * * @example
     * ```ts
     * [
     *  {
     * 		i18n: "i18n.error.success",
     * 		href: "/success"
     * 	},
     *  {
     * 		i18n: "i18n.error.info",
     * 		hrefs: {
     * 			de: "/info/de",
     * 			fr: "/info/fr",
     * 			it: "/info/it",
     * 			en: "/info/en"
     * 		}
     * 	}
     * ]
     * ```
     */
    infoLinks?: QdShellServiceNavigationInfoLink[];
    /**
     * @description Contact information that are displayed in the info panel. It can contain an email address and a
     * telephone number.
     *
     * * web component: 'info-contact' (modified)
     *
     * * @example
     * ```ts
     * {
     *    emailAddress: "support@bazg.admin.ch",
     *    telephoneNumber: "+41 800 757 123"
     * }
     * ```
     */
    contactInfo?: QdShellServiceNavigationContactInfo;
    /**
     * @description Show or hide the language selector.
     *
     * * web component: 'display-languages'
     *
     * * @default: true
     */
    showLanguages?: boolean;
    /**
     * @description Show or hide the notification button.
     *
     * * web component: 'display-message'
     *
     * * @default: true
     */
    showNotifications?: boolean;
    /**
     * @description Show or hide the services button.
     *
     * * web component: 'display-applications'
     *
     * * @default: true
     */
    showEportalServices?: boolean;
    /**
     * @description Show or hide the settings option.
     *
     * * web component: 'show-settings'
     *
     * * @default: true
     */
    showProfile?: boolean;
    /**
     * @description Show or hide login and logout button.
     *
     * * web component: 'display-authentication'
     *
     * * @default: true
     */
    showAuthentication?: boolean;
    /**
     * @description The url that will be called once the login process is complete.
     *
     * * web component: 'return-url'
     */
    returnUrl?: string;
    /**
     * @description The app id in which the service-navigation is used.
     * Service Navigation requires an appId for step-up logins to work.
     * For example, it allows PAMS to know which login level is required.
     * The appId can be found on the application configuration page on ePortal.
     *
     * * web component: 'pams-app-id'
     */
    pamsAppId: string;
    /**
     * @description Determines if the logout should be handled in the service-navigation or not.
     * If set to false, then the application must perform the logout itself.
     * To perform the logout by yourself, a logoutHandler can be configured that will be called with the logoutUrl.
     *
     * * web component: 'handle-logout'
     *
     * * @default: true
     */
    handleLogout?: boolean;
    /**
     * @description Will be called when the logout is triggered if handleLogout is set to false. Then you can perform
     * the logout by yourself in the handler. The logoutUrl will be passed to the logoutHandler.
     *
     * * web component: 'logoutTriggered' output
     *
     * * @default: true
     */
    logoutHandler?: (logoutUrl: string) => void;
    /**
     * @description Links displayed in the profile menu. You can also add a badge for each input, and they also handle different languages.
     *
     * * web component: 'profile-links'
     *
     * * @example
     * ```ts
     * [
     *  {
     * 		i18n: "i18n.profile.one",
     * 		href: "/profile-one"
     * 	},
     *  {
     * 		i18n: "i18n.profile.two",
     * 		hrefs: {
     * 			de: "/profile-two/de",
     * 			fr: "/profile-two/fr",
     * 			it: "/profile-two/it",
     * 			en: "/profile-two/en"
     * 		},
     * 		batch: 2
     * 	},
     *  {
     * 		i18n: "i18n.profile.three",
     * 		href: "/profile-three",
     * 		batch: 3
     * 	}
     * ]
     * ```
     */
    profileLinks?: QdShellServiceNavigationProfileLink[];
    /**
     * @description Custom button links as icons.
     *
     * * Note: The custom buttons are displayed only if the user is logged onto the correct environment - for "DEV": "https://eportal-d.admin.ch".
     *
     * For the specific characteristics and documentation:
     * * @see https://confluence.bit.admin.ch/display/EN4/Header+widget+documentation
     *
     * * web component: 'custom-buttons'
     *
     * * @example
     * ```ts
     * [
     *  {
     * 		obliqueIconName: 'calendar',
     * 		isVisibleInMobile: true,
     * 		iconLink: {
     * 			i18n: 'i18n.customButtons.calendar.ariaLabel',
     * 			hrefs: {
     * 				de: '/custom-buttons/calendar/de',
     * 				fr: '/custom-buttons/calendar/fr',
     * 				it: '/custom-buttons/calendar/it',
     * 				en: '/custom-buttons/calendar/en'
     * 			},
     * 			badge: 5
     * 		},
     * 		childLinks: [{
     * 				i18n: 'i18n.customButtons.childLinkText.one',
     * 				href: '/custom-buttons-child-link-one',
     * 				badge: 1
     * 			},
     * 			{
     * 				i18n: 'i18n.customButtons.childLinkText.two',
     * 				hrefs: {
     * 					de: '/custom-buttons/child-link-two/de',
     * 					fr: '/custom-buttons/child-link-two/fr',
     * 					it: '/custom-buttons/child-link-two/it',
     * 					en: '/custom-buttons/child-link-two/en'
     * 				},
     * 				badge: 2
     * 			}
     * 		]
     * 	},
     *  {
     * 		obliqueIconName: 'archive',
     * 		isVisibleInMobile: false,
     * 		iconLink: {
     * 			i18n: 'i18n.customButtons.archive.ariaLabel',
     * 			badge: 5
     * 		}
     * 	},
     *  {
     * 		obliqueIconName: 'apps',
     * 		isVisibleInMobile: true,
     * 		iconLink: {
     * 			i18n: 'i18n.customButtons.apps.ariaLabel',
     * 			href: '/custom-buttons/apps',
     * 			badge: 8
     * 		}
     * 	}
     * ]
     * ```
     */
    customButtonsLinks?: QdShellServiceNavigationCustomButtonLinks[];
    /**
     * @description Path to the header widget javascript asset.
     *
     * * @default: 'assets/service-navigation-web-component.js'
     */
    javascriptAssetPath?: string;
}
type QdShellServiceNavigationUnmappedConfigKeys = 'javascriptAssetPath' | 'isDisabled' | 'openLinksInNewTab' | 'languageList' | 'pamsAppId' | 'pamsEnvironment' | 'logoutHandler';
export type QdShellServiceNavigationLanguage = 'de' | 'en' | 'fr' | 'it';
export type QdShellServiceNavigationEnvironment = 'DEV' | 'TEST' | 'REF' | 'ABN' | 'PROD';
export type QdShellServiceNavigationInfoLink = QdShellServiceNavigationSingleHref | QdShellServiceNavigationMultiHrefs;
type QdShellServiceNavigationProfileLink = QdShellServiceNavigationSingleHrefBadge | QdShellServiceNavigationMultiHrefBadge;
export interface QdShellServiceNavigationCustomButtonLinks {
    obliqueIconName: string;
    /**
     * * web component: 'fixedMobileView'
     * * @default: true
     */
    iconLink?: QdShellServiceNavigationSingleHref | (QdShellServiceNavigationMultiHrefs & QdShellServiceNavigationBadge);
}
export interface QdShellServiceNavigationSingleHref {
    i18n: string;
    href?: string;
}
export interface QdShellServiceNavigationMultiHrefs {
    i18n: string;
    hrefs?: QdShellServiceNavigationHrefs;
}
type QdShellServiceNavigationSingleHrefBadge = QdShellServiceNavigationSingleHref & QdShellServiceNavigationBadge;
type QdShellServiceNavigationMultiHrefBadge = QdShellServiceNavigationMultiHrefs & QdShellServiceNavigationBadge;
interface QdShellServiceNavigationBadge {
    badge?: number;
}
interface QdShellServiceNavigationHrefs {
    de?: string;
    fr?: string;
    it?: string;
    en?: string;
}
interface QdShellServiceNavigationContactInfo {
    emailAddress?: string;
    telephoneNumber?: string;
}
/**
 * @description Attributes Mapping as key value pairs.
 */
export type QdHeaderWidgetAttributeMapping = {
    [configProperty in keyof Omit<QdShellServiceNavigationConfig, QdShellServiceNavigationUnmappedConfigKeys>]-?: string;
};
/**
 * @description Attributes Mapping as key value pairs.
 */
export type QdServiceNavigationAttributeMapping = {
    [configProperty in keyof Omit<QdShellServiceNavigationConfig, QdShellServiceNavigationUnmappedConfigKeys>]-?: string;
};
/**
 * @description Result object passing into header widget web component.
 */
export type QdShellServiceNavigationMappedAttributes = {
    [attributeName: string]: string;
} & {
    links?: Observable<string>;
} & {
    'profile-links'?: Observable<string>;
} & {
    'custom-buttons'?: Observable<string>;
};
export {};
//# sourceMappingURL=shell-service-navigation-config.interface.d.ts.map