{"version":3,"file":"fundamental-ngx-platform-message-popover.mjs","sources":["../../../../libs/platform/message-popover/default-config.ts","../../../../libs/platform/message-popover/directives/message-popover-form-item.directive.ts","../../../../libs/platform/message-popover/utils.ts","../../../../libs/platform/message-popover/components/message-popover-form-wrapper/message-popover-form-wrapper.component.ts","../../../../libs/platform/message-popover/components/message-view/message-view.component.ts","../../../../libs/platform/message-popover/components/message-view/message-view.component.html","../../../../libs/platform/message-popover/message-popover.component.ts","../../../../libs/platform/message-popover/message-popover.component.html","../../../../libs/platform/message-popover/platform-message-popover.module.ts","../../../../libs/platform/message-popover/fundamental-ngx-platform-message-popover.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { FormStates } from '@fundamental-ngx/cdk/forms';\n\nexport interface MessagePopoverErrorConfig {\n    heading: string;\n    description?: string;\n    type: FormStates;\n}\n\nexport interface MessagePopoverConfig {\n    /**\n     * Errors object where key is error type and value is i18n string.\n     */\n    errors: Record<string, string | MessagePopoverErrorConfig>;\n}\n\nexport const FDP_MESSAGE_POPOVER_DEFAULT_CONFIG: MessagePopoverConfig = {\n    errors: {\n        email: 'platformMessagePopover.defaultErrors.email',\n        max: 'platformMessagePopover.defaultErrors.max',\n        maxlength: 'platformMessagePopover.defaultErrors.maxLength',\n        min: 'platformMessagePopover.defaultErrors.min',\n        minlength: 'platformMessagePopover.defaultErrors.minLength',\n        pattern: 'platformMessagePopover.defaultErrors.pattern',\n        required: 'platformMessagePopover.defaultErrors.required',\n        requiredTrue: 'platformMessagePopover.defaultErrors.requiredTrue'\n    }\n};\n\nexport const FDP_MESSAGE_POPOVER_CONFIG = new InjectionToken<MessagePopoverConfig>('FdpMessagePopoverConfig');\n","import { Directive, ElementRef, Input, Optional } from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { MessagePopoverConfig } from '../default-config';\n\n@Directive({\n    selector: '[fdpMessagePopoverFormItem]',\n    standalone: true\n})\nexport class MessagePopoverFormItemDirective {\n    /** Form item name. */\n    @Input('fdpMessagePopoverFormItem')\n    label: string;\n\n    /** Error type definition. */\n    @Input()\n    errorTypes: MessagePopoverConfig['errors'];\n\n    /** @hidden */\n    constructor(\n        public readonly elementRef: ElementRef,\n        @Optional() public readonly control: NgControl\n    ) {}\n}\n","import { FormStates } from '@fundamental-ngx/cdk/forms';\nimport { ObjectStatus } from '@fundamental-ngx/core/object-status';\nimport { MessagePopoverState } from './models/message-popover.interface';\n\n/**\n * Converts Object Status into Message Popover State\n * @param status Object status\n * @returns Message Popover State.\n */\nexport function convertFormStateToMessagePopoverState(state: FormStates): MessagePopoverState {\n    switch (state) {\n        case 'error':\n            return 'negative';\n        case 'warning':\n            return 'critical';\n        case 'default':\n            return 'neutral';\n        default:\n            return state;\n    }\n}\n\n/**\n * Converts Form State into Object status type.\n * @param type Form state.\n * @returns `ObjectStatus` type.\n */\nexport function convertFormState(type: FormStates): ObjectStatus {\n    switch (type) {\n        case 'success':\n            return 'positive';\n        case 'error':\n            return 'negative';\n        case 'warning':\n            return 'critical';\n        case 'information':\n            return 'informative';\n        default:\n            return 'neutral';\n    }\n}\n","import {\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    Component,\n    ContentChildren,\n    DestroyRef,\n    Inject,\n    Input,\n    OnDestroy,\n    QueryList,\n    ViewEncapsulation,\n    signal\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { AbstractControl, ControlContainer, FormGroup, FormGroupDirective, NgForm } from '@angular/forms';\nimport { FD_FORM_FIELD_CONTROL, FormStates } from '@fundamental-ngx/cdk/forms';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport {\n    FormFieldErrorDirectiveContext,\n    PlatformFormField,\n    PlatformFormFieldControl\n} from '@fundamental-ngx/platform/shared';\nimport { Subject, Subscription, filter, startWith, switchMap, zip } from 'rxjs';\nimport { FDP_MESSAGE_POPOVER_CONFIG, MessagePopoverConfig, MessagePopoverErrorConfig } from '../../default-config';\nimport { MessagePopoverFormItemDirective } from '../../directives/message-popover-form-item.directive';\nimport {\n    MessagePopoverEntry,\n    MessagePopoverErrorGroup,\n    MessagePopoverErrorText\n} from '../../models/message-popover-entry.interface';\nimport { MessagePopoverWrapper } from '../../models/message-popover-wrapper.interface';\nimport { MessagePopover } from '../../models/message-popover.interface';\nimport { convertFormState } from '../../utils';\n\nexport type MessagePopoverForm = NgForm | FormGroupDirective;\n\n@Component({\n    selector: 'fdp-message-popover-form-wrapper',\n    template: `<ng-content></ng-content>`,\n    exportAs: 'messagePopoverWrapper',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    standalone: true\n})\nexport class MessagePopoverFormWrapperComponent implements MessagePopoverWrapper, AfterViewInit, OnDestroy {\n    /** @hidden */\n    @ContentChildren(ControlContainer, { descendants: true })\n    private readonly _projectedForm: QueryList<MessagePopoverForm>;\n\n    /** @hidden */\n    @ContentChildren(FD_FORM_FIELD_CONTROL, { descendants: true })\n    private readonly _projectedFormFieldControls!: QueryList<PlatformFormFieldControl>;\n\n    /** @hidden */\n    @ContentChildren(MessagePopoverFormItemDirective, { descendants: true })\n    private readonly _directiveItems!: QueryList<MessagePopoverFormItemDirective>;\n\n    /** Message Popover instance. */\n    messagePopover$ = new Subject<MessagePopover>();\n\n    /**\n     * User-passed forms.\n     */\n    @Input()\n    set forms(forms: MessagePopoverForm | MessagePopoverForm[]) {\n        if (!forms) {\n            return;\n        }\n        if (!Array.isArray(forms)) {\n            forms = [forms];\n        }\n        this._ngForms = forms;\n        this._startListeningForErrors();\n    }\n\n    /** User-passed form fields. */\n    @Input()\n    set formFields(value: PlatformFormFieldControl[]) {\n        this._formFields = value;\n        this._listenToFormFieldErrors(value);\n    }\n\n    get formFields(): PlatformFormFieldControl[] {\n        return this._formFields;\n    }\n\n    /**\n     * Error models Signal. Emitted when form submitted and contains invalid fields.\n     */\n    readonly errors$ = signal<MessagePopoverErrorGroup[]>([]);\n\n    /** @hidden */\n    private _formFields: PlatformFormFieldControl[] = [];\n\n    /** @hidden */\n    private _formErrorsSubscription: Subscription | undefined;\n\n    /** @hidden */\n    private _ngForms: (NgForm | FormGroupDirective)[] = [];\n\n    /** @hidden */\n    private _formItemErrorsSubscription = new Subscription();\n\n    /** @hidden */\n    private _formSubmitted = false;\n\n    /** @hidden */\n    constructor(\n        private readonly _destroyRef: DestroyRef,\n        @Inject(FDP_MESSAGE_POPOVER_CONFIG) private readonly _config: MessagePopoverConfig\n    ) {}\n\n    /** @hidden */\n    ngAfterViewInit(): void {\n        // Forms are passed via input property.\n        if (this._ngForms.length > 0) {\n            return;\n        }\n        this._projectedForm?.changes.pipe(startWith(null), takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n            this._ngForms = this._projectedForm.toArray();\n            this._startListeningForErrors();\n        });\n    }\n\n    /**\n     * Sets Message Popover component instance.\n     */\n    setMessagePopover(messagePopover: MessagePopover): void {\n        this.messagePopover$.next(messagePopover);\n        // this.messagePopover = messagePopover;\n    }\n\n    /**\n     * Programmatically add new form to array of forms.\n     * @param forms\n     */\n    addForms(forms: MessagePopoverForm | MessagePopoverForm[]): void {\n        const formsArray = Array.isArray(forms) ? forms : [forms];\n        this._ngForms.push(...formsArray);\n        this._startListeningForErrors();\n    }\n\n    /**\n     * Programmatically add new form fields to array of listened form fields.\n     * @param formFields\n     */\n    addFormFields(formFields: PlatformFormFieldControl[]): void {\n        this._formFields.push(...formFields);\n        this._listenToFormFieldErrors(this._formFields);\n    }\n\n    /** @hidden */\n    ngOnDestroy(): void {\n        this._formItemErrorsSubscription.unsubscribe();\n    }\n\n    /**\n     * @hidden\n     * Listens to the form submission and collects form control errors.\n     */\n    private _startListeningForErrors(): void {\n        if (!this._ngForms) {\n            return;\n        }\n        this._formErrorsSubscription?.unsubscribe();\n        this.errors$.set([]);\n\n        const formSubmitEvents = this._ngForms.map((form) =>\n            form.ngSubmit.pipe(\n                switchMap(() =>\n                    form.statusChanges!.pipe(\n                        startWith(form.status),\n                        filter((status: string) => status.toLowerCase() !== 'pending')\n                    )\n                )\n            )\n        );\n\n        this._formErrorsSubscription = zip(...formSubmitEvents)\n            .pipe(takeUntilDestroyed(this._destroyRef))\n            .subscribe(() => {\n                this._formSubmitted = true;\n                const errors =\n                    this._directiveItems.length > 0 ? this._collectPlainFormData() : this._collectAdvancedFormData();\n\n                this.errors$.set(errors);\n            });\n\n        this._listenToFormFieldErrors(this._projectedFormFieldControls.toArray());\n\n        this._projectedFormFieldControls?.changes.subscribe(() => {\n            this._listenToFormFieldErrors(this._projectedFormFieldControls.toArray());\n        });\n    }\n\n    /** @hidden */\n    private _listenToFormFieldErrors(fields: PlatformFormFieldControl[]): void {\n        this._formItemErrorsSubscription.unsubscribe();\n\n        this._formItemErrorsSubscription = new Subscription();\n\n        fields?.forEach((field) => {\n            this._formItemErrorsSubscription.add(\n                field.formField?.errorsChange$.subscribe(() => {\n                    if (!this._formSubmitted) {\n                        return;\n                    }\n                    const errors =\n                        this._directiveItems.length > 0\n                            ? this._collectPlainFormData()\n                            : this._collectAdvancedFormData();\n                    this.errors$.set(errors);\n                })\n            );\n        });\n    }\n\n    /** @hidden */\n    private _collectPlainFormData(): MessagePopoverErrorGroup[] {\n        const errors: MessagePopoverErrorGroup[] = [\n            {\n                errors: []\n            }\n        ];\n\n        const fields = this._directiveItems.toArray();\n\n        this._ngForms.forEach((form) => {\n            Object.keys(form.form.controls).forEach((controlName) => {\n                const control = form.form.get(controlName);\n                const field = fields.find((formField) => formField.control?.name === controlName);\n\n                if (!control?.errors || !field) {\n                    return;\n                }\n\n                const configErrors = Object.keys(this._config.errors);\n\n                Object.keys(control.errors)\n                    .filter((error) => configErrors.includes(error))\n                    .forEach((errorKey) => {\n                        const errorObj = control.errors![errorKey];\n\n                        const errorTextModel = this._getConfigErrorModel(errorKey, field.errorTypes);\n                        const errorConfig = field?.errorTypes ? field?.errorTypes[errorKey] : null;\n                        const errorState =\n                            errorConfig && this._isAdvancedError(errorConfig) && errorConfig.type\n                                ? errorConfig.type\n                                : 'error';\n                        const error: MessagePopoverEntry = {\n                            name: controlName,\n                            type: errorTextModel.type,\n                            state: convertFormState(errorState),\n                            fieldName: field?.label ?? '',\n                            element: field?.elementRef,\n                            heading: {\n                                type: 'string',\n                                error: errorObj,\n                                message: errorTextModel.heading\n                            },\n                            description: {\n                                type: 'string',\n                                error: errorObj,\n                                message: errorTextModel.description\n                            },\n                            errors: control!.errors\n                        };\n\n                        errors[0].errors.push(error);\n                    });\n            });\n        });\n\n        return errors;\n    }\n\n    /** @hidden */\n    private _collectAdvancedFormData(): MessagePopoverErrorGroup[] {\n        let errors: MessagePopoverErrorGroup[] = [];\n        const fields = this.formFields.length > 0 ? this.formFields : this._projectedFormFieldControls.toArray();\n\n        /**\n         * Iterates over form controls to collect their errors.\n         * @param form Form Group or a collection of Form Groups.\n         */\n        const iterateOverForm = (form: FormGroup | FormGroup[]): MessagePopoverErrorGroup[] => {\n            if (Array.isArray(form)) {\n                form.forEach((formGroup) => {\n                    errors = iterateOverForm(formGroup);\n                });\n                return errors;\n            }\n            Object.keys(form.controls).forEach((controlName) => {\n                const control = form.get(controlName);\n                const field = fields.find((formField) => formField.id === controlName);\n\n                if (control instanceof FormGroup) {\n                    errors = iterateOverForm(control);\n                }\n\n                if (!control?.errors || !field) {\n                    return;\n                }\n\n                Object.keys(control.errors).forEach((errorKey) => {\n                    const errorDirective = field.formField?.groupedErrors.find(\n                        (groupedError) => groupedError.directive.error === errorKey\n                    );\n\n                    const groupName = this._getGroupName(field?.formField);\n                    const error = this._getErrorModel(\n                        controlName,\n                        groupName,\n                        control,\n                        field,\n                        errorKey,\n                        errorDirective,\n                        control.errors![errorKey]\n                    );\n\n                    let errorGroupIndex = errors.findIndex((errorGroup) => errorGroup.group === groupName);\n\n                    if (errorGroupIndex === -1) {\n                        errorGroupIndex =\n                            errors.push({\n                                group: groupName,\n                                errors: []\n                            }) - 1;\n                    }\n\n                    const group = errors[errorGroupIndex];\n\n                    group.errors.push(error);\n                });\n            });\n\n            return errors;\n        };\n\n        return iterateOverForm(this._ngForms.map((form) => form.form));\n    }\n\n    /**\n     * @hidden\n     * Creates error model\n     */\n    private _getErrorModel(\n        controlName: string,\n        groupName: string,\n        control: AbstractControl,\n        field: PlatformFormFieldControl,\n        errorKey: string,\n        errorDirective?: FormFieldErrorDirectiveContext,\n        error?: any\n    ): MessagePopoverEntry {\n        let state: FormStates = 'error';\n        const configError = this._config.errors[errorKey];\n\n        if (errorDirective?.directive.type) {\n            state = errorDirective.directive.type;\n        } else if (this._isAdvancedError(configError)) {\n            state = configError.type;\n        }\n\n        return {\n            name: controlName,\n            type: state,\n            state: convertFormState(state),\n            group: groupName,\n            fieldName: field?.formField?.label ?? '',\n            heading: this._getErrorText(field, errorDirective, 'heading', errorKey, error),\n            description: this._getErrorText(field, errorDirective, 'description', errorKey, error),\n            errors: control!.errors,\n            formField: field,\n            element: field?.elementRef\n        };\n    }\n\n    /**\n     * @hidden\n     * Creates error text based on the type of the error.\n     * @param field Form Field Control.\n     * @param errorDirective Optional Error directive\n     * @param section Section where text should be rendered.\n     * @param errorKey\n     * @param error\n     */\n    private _getErrorText(\n        field: PlatformFormFieldControl,\n        errorDirective: Nullable<FormFieldErrorDirectiveContext>,\n        section: 'heading' | 'description' = 'heading',\n        errorKey: string,\n        error?: any\n    ): MessagePopoverErrorText {\n        const errorTextObj: MessagePopoverErrorText = {\n            error: errorDirective?.error,\n            type: errorDirective?.directive ? 'directive' : field?.formField?.i18Strings ? 'templateRef' : 'string'\n        };\n\n        if (errorTextObj.type === 'string') {\n            const errorTextModel = this._getConfigErrorModel(errorKey);\n\n            errorTextObj.error = error;\n            errorTextObj.message = errorTextModel[section];\n            return errorTextObj;\n        }\n\n        if (errorDirective?.directive) {\n            errorTextObj.message =\n                section === 'heading'\n                    ? (errorDirective.directive._headingTemplateRef ?? errorDirective.directive._descriptionTemplateRef)\n                    : errorDirective.directive._descriptionTemplateRef;\n            return errorTextObj;\n        }\n\n        errorTextObj.message = field?.formField?.i18Strings ?? null;\n        return errorTextObj;\n    }\n\n    /** @hidden */\n    private _getGroupName(formField: Nullable<PlatformFormField>): string {\n        const parts: string[] = [];\n\n        if (formField?.formGroupContainer?.mainTitle) {\n            parts.push(formField.formGroupContainer.mainTitle);\n        }\n\n        if (formField?.formFieldGroup?.label) {\n            parts.push(formField.formFieldGroup.label);\n        }\n\n        return parts.join(', ');\n    }\n\n    /** @hidden */\n    private _getConfigErrorModel(\n        errorKey: string,\n        customErrorTypes?: MessagePopoverConfig['errors']\n    ): MessagePopoverErrorConfig {\n        const configError =\n            customErrorTypes && customErrorTypes[errorKey] ? customErrorTypes[errorKey] : this._config.errors[errorKey];\n        const isPlainError = !this._isAdvancedError(configError);\n        const errorType = isPlainError ? 'error' : configError.type;\n        const headingMessage = isPlainError ? configError : configError.heading;\n        const descriptionMessage = isPlainError ? undefined : configError.description;\n\n        return {\n            type: errorType,\n            heading: headingMessage,\n            description: descriptionMessage\n        };\n    }\n\n    /** @hidden */\n    private _isAdvancedError(error: string | MessagePopoverErrorConfig): error is MessagePopoverErrorConfig {\n        return !!error && typeof error !== 'string';\n    }\n}\n","import { CdkScrollable } from '@angular/cdk/overlay';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    Component,\n    DOCUMENT,\n    DestroyRef,\n    ElementRef,\n    EventEmitter,\n    Inject,\n    Input,\n    Output,\n    ViewChild,\n    ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Nullable, TabbableElementService, resizeObservable } from '@fundamental-ngx/cdk/utils';\nimport { LinkComponent } from '@fundamental-ngx/core/link';\nimport { ListModule } from '@fundamental-ngx/core/list';\nimport { ObjectStatusComponent } from '@fundamental-ngx/core/object-status';\nimport { ScrollbarDirective } from '@fundamental-ngx/core/scrollbar';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { debounceTime } from 'rxjs';\nimport { MessagePopoverEntry, MessagePopoverErrorGroup } from '../../models/message-popover-entry.interface';\n\nconst ANIMATION_EASING = 'cubic-bezier(0, 0, 0.2, 1)';\nconst ANIMATION_DURATION = 100;\n\n@Component({\n    selector: 'fdp-message-view',\n    templateUrl: './message-view.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    providers: [TabbableElementService],\n    host: {\n        class: 'fd-message-popover__view-container'\n    },\n    imports: [\n        NgTemplateOutlet,\n        CdkScrollable,\n        ScrollbarDirective,\n        ListModule,\n        ObjectStatusComponent,\n        LinkComponent,\n        FdTranslatePipe\n    ]\n})\nexport class MessageViewComponent implements AfterViewInit {\n    /** Current Message Popover screen. Can be either `list` or `details`. */\n    @Input()\n    set currentScreen(value: 'list' | 'details') {\n        const prev = this._currentScreen;\n        this._currentScreen = value;\n        if (prev && prev !== value) {\n            this._animateScreenTransition(value);\n        }\n    }\n    get currentScreen(): 'list' | 'details' {\n        return this._currentScreen;\n    }\n\n    /** Filtered errors to render. */\n    @Input()\n    filteredErrors: MessagePopoverErrorGroup[];\n\n    /** Current error entry. Used for details view. */\n    @Input()\n    currentEntry: Nullable<MessagePopoverEntry>;\n\n    /** Event emitted when user clicks on error entry containing additional description. */\n    @Output()\n    openDetails = new EventEmitter<MessagePopoverEntry>();\n\n    /** Event emitted when user clicks on error entry and item's element should be focused. */\n    @Output()\n    focusItem = new EventEmitter<MessagePopoverEntry>();\n\n    /** Event emitted when user clicks on the field link to focus on the field itself. */\n    @Output()\n    closePopover = new EventEmitter<boolean>();\n\n    /** @hidden */\n    @ViewChild('listView', { read: ElementRef })\n    protected _listView: ElementRef;\n\n    /** @hidden */\n    @ViewChild('detailsView', { read: ElementRef })\n    protected _detailsView: ElementRef;\n\n    /** @hidden */\n    @ViewChild('listSection', { read: ElementRef })\n    protected _listSection: ElementRef;\n\n    /** @hidden */\n    @ViewChild('detailsSection', { read: ElementRef })\n    protected _detailsSection: ElementRef;\n\n    /** @hidden */\n    private _currentScreen: 'list' | 'details' = 'list';\n\n    /** @hidden */\n    private _activeListElement: Nullable<HTMLElement> = null;\n\n    /** @hidden */\n    private _listAnimation: Animation | null = null;\n\n    /** @hidden */\n    private _detailsAnimation: Animation | null = null;\n\n    /** @hidden */\n    constructor(\n        private readonly _destroyRef: DestroyRef,\n        private readonly _tabbableService: TabbableElementService,\n        @Inject(DOCUMENT) private readonly _document: Document\n    ) {\n        this._destroyRef.onDestroy(() => {\n            this._listAnimation?.cancel();\n            this._listAnimation = null;\n            this._detailsAnimation?.cancel();\n            this._detailsAnimation = null;\n        });\n    }\n\n    /** @hidden */\n    ngAfterViewInit(): void {\n        resizeObservable(this._detailsView.nativeElement)\n            .pipe(debounceTime(20), takeUntilDestroyed(this._destroyRef))\n            .subscribe(() => {\n                const { height } = this._detailsView.nativeElement.getBoundingClientRect();\n                this._listSection.nativeElement.style.minHeight = `${height}px`;\n            });\n    }\n\n    /** @hidden */\n    _showDetails(entry: MessagePopoverEntry): void {\n        this._activeListElement = this._document.activeElement as HTMLElement;\n        if (!entry.description.message) {\n            this._focusElement(undefined, entry);\n            return;\n        }\n        this.currentScreen = 'details';\n        this.openDetails.emit(entry);\n    }\n\n    /** @hidden */\n    _focusElement(event?: MouseEvent, item?: MessagePopoverEntry): void {\n        if (!item?.element?.nativeElement) {\n            return;\n        }\n        event?.stopImmediatePropagation();\n        this.closePopover.emit(false);\n        this.focusItem.emit(item);\n        setTimeout(() => {\n            const tabbableElement = this._tabbableService.getTabbableElement(item.element?.nativeElement);\n            tabbableElement?.focus();\n        });\n    }\n\n    /** @hidden Animate the transition between list and details screens. */\n    private _animateScreenTransition(screen: 'list' | 'details'): void {\n        const listEl = this._listSection?.nativeElement;\n        const detailsEl = this._detailsSection?.nativeElement;\n\n        if (!listEl || !detailsEl) {\n            return;\n        }\n\n        this._listAnimation?.cancel();\n        this._detailsAnimation?.cancel();\n\n        if (screen === 'details') {\n            this._animateListToDetails(listEl, detailsEl);\n        } else {\n            this._animateDetailsToList(listEl, detailsEl);\n        }\n    }\n\n    /** @hidden Slide list out left, details in from right. */\n    private _animateListToDetails(listEl: HTMLElement, detailsEl: HTMLElement): void {\n        if (typeof listEl.animate !== 'function') {\n            return;\n        }\n\n        this._listAnimation = listEl.animate(\n            [\n                { transform: 'translateX(0)', opacity: 1 },\n                { transform: 'translateX(-50px)', opacity: 0 }\n            ],\n            { duration: ANIMATION_DURATION, easing: ANIMATION_EASING, fill: 'forwards' }\n        );\n\n        this._detailsAnimation = detailsEl.animate(\n            [\n                { transform: 'translateX(50px)', opacity: 0 },\n                { transform: 'translateX(0)', opacity: 1 }\n            ],\n            { duration: ANIMATION_DURATION, easing: ANIMATION_EASING, fill: 'forwards', delay: ANIMATION_DURATION }\n        );\n\n        this._detailsAnimation.finished\n            .then(() => {\n                this._detailsAnimation = null;\n            })\n            .catch(() => {\n                this._detailsAnimation = null;\n            });\n    }\n\n    /** @hidden Slide details out right, list in from left. */\n    private _animateDetailsToList(listEl: HTMLElement, detailsEl: HTMLElement): void {\n        if (typeof listEl.animate !== 'function') {\n            return;\n        }\n\n        this._detailsAnimation = detailsEl.animate(\n            [\n                { transform: 'translateX(0)', opacity: 1 },\n                { transform: 'translateX(50px)', opacity: 0 }\n            ],\n            { duration: ANIMATION_DURATION, easing: ANIMATION_EASING, fill: 'forwards' }\n        );\n\n        this._listAnimation = listEl.animate(\n            [\n                { transform: 'translateX(-50px)', opacity: 0 },\n                { transform: 'translateX(0)', opacity: 1 }\n            ],\n            { duration: ANIMATION_DURATION, easing: ANIMATION_EASING, fill: 'forwards', delay: ANIMATION_DURATION }\n        );\n\n        this._listAnimation.finished\n            .then(() => {\n                this._listAnimation = null;\n                if (this._activeListElement) {\n                    this._activeListElement.focus();\n                    this._activeListElement = null;\n                }\n            })\n            .catch(() => {\n                this._listAnimation = null;\n            });\n    }\n}\n","<ng-template #headingTemplate let-item>\n    <ng-template #directiveHeading>\n        <ng-template\n            [ngTemplateOutlet]=\"item.heading.message || item.description.message\"\n            [ngTemplateOutletContext]=\"{ $implicit: item.heading.error }\"\n        ></ng-template>\n    </ng-template>\n    <ng-template #i18nHeading>\n        <ng-template\n            [ngTemplateOutlet]=\"item.heading.message\"\n            [ngTemplateOutletContext]=\"{ $implicit: item.errors }\"\n        ></ng-template>\n    </ng-template>\n    <ng-template #stringHeading>\n        {{ (item.heading.message | fdTranslate: { error: item.heading.error } : item.heading.message)() }}\n    </ng-template>\n    <ng-template\n        [ngTemplateOutlet]=\"\n            item.heading.type === 'directive'\n                ? directiveHeading\n                : item.heading.type === 'string'\n                  ? stringHeading\n                  : i18nHeading\n        \"\n    ></ng-template>\n</ng-template>\n<ng-template #descriptionTemplate let-item>\n    <ng-template #directiveDescription>\n        <ng-template\n            [ngTemplateOutlet]=\"item.description.message!\"\n            [ngTemplateOutletContext]=\"{ $implicit: item.description.error }\"\n        ></ng-template>\n    </ng-template>\n    <ng-template #i18nDescription>\n        <ng-template\n            [ngTemplateOutlet]=\"item.description.message!\"\n            [ngTemplateOutletContext]=\"{ $implicit: item.errors }\"\n        ></ng-template>\n    </ng-template>\n    <ng-template #stringDescription>\n        {{ (item.description.message | fdTranslate: { error: item.description.error } : item.description.message)() }}\n    </ng-template>\n    <ng-template\n        [ngTemplateOutlet]=\"\n            item.heading.type === 'directive'\n                ? directiveDescription\n                : item.heading.type === 'string'\n                  ? stringDescription\n                  : i18nDescription\n        \"\n    ></ng-template>\n</ng-template>\n<div class=\"fd-message-view\">\n    <section #listSection class=\"fd-message-view__list\" tabindex=\"-1\" fd-scrollbar>\n        <ul #listView fd-list class=\"message-popover__list fd-list--message-view\" [navigationIndicator]=\"true\">\n            @for (group of filteredErrors; track group) {\n                @if (group.group) {\n                    <li fd-list-group-header>\n                        <span fd-list-title>{{ group.group }}</span>\n                    </li>\n                }\n                @for (item of group.errors; track item; let i = $index) {\n                    <li fd-list-item [tabindex]=\"i === 0 ? 0 : -1\" [byline]=\"true\" (click)=\"_showDetails(item)\">\n                        <ng-template #itemIcon>\n                            <span\n                                fd-object-status\n                                class=\"fd-list__icon\"\n                                [status]=\"item.state\"\n                                [glyph]=\"'message-' + item.type\"\n                            ></span>\n                        </ng-template>\n                        <ng-template #listSubtitle>\n                            <span class=\"fd-list__subtitle\">\n                                <ng-template\n                                    [ngTemplateOutlet]=\"headingTemplate\"\n                                    [ngTemplateOutletContext]=\"{ $implicit: item }\"\n                                ></ng-template>\n                            </span>\n                        </ng-template>\n                        @if (item.element && !!item.description.message) {\n                            <span fd-list-link [navigationIndicator]=\"!!item.description.message\">\n                                <ng-template [ngTemplateOutlet]=\"itemIcon\"></ng-template>\n                                <span fd-list-content>\n                                    <span fd-list-title>\n                                        <a tabindex=\"0\" fd-link (click)=\"_focusElement($event, item)\">\n                                            {{ item.fieldName }}\n                                        </a>\n                                    </span>\n                                    <ng-template [ngTemplateOutlet]=\"listSubtitle\"></ng-template>\n                                </span>\n                            </span>\n                        } @else {\n                            <a fd-list-link [navigationIndicator]=\"!!item.description.message\">\n                                <ng-template [ngTemplateOutlet]=\"itemIcon\"></ng-template>\n                                <span fd-list-content>\n                                    <span fd-list-title>{{ item.fieldName }}</span>\n                                    <ng-template [ngTemplateOutlet]=\"listSubtitle\"></ng-template>\n                                </span>\n                            </a>\n                        }\n                    </li>\n                }\n            }\n        </ul>\n    </section>\n    <section #detailsSection class=\"fd-message-view__details\">\n        <div #detailsView>\n            @if (currentEntry) {\n                <span class=\"fd-message-view__details-title\">\n                    <span\n                        fd-object-status\n                        class=\"fd-message-view__icon\"\n                        [status]=\"currentEntry.state\"\n                        [glyph]=\"'message-' + currentEntry.type\"\n                    ></span>\n                    <ng-template\n                        [ngTemplateOutlet]=\"headingTemplate\"\n                        [ngTemplateOutletContext]=\"{ $implicit: currentEntry }\"\n                    ></ng-template>\n                </span>\n                @if (currentEntry.description.message) {\n                    <span class=\"fd-message-view__details-description\">\n                        <ng-template\n                            [ngTemplateOutlet]=\"descriptionTemplate\"\n                            [ngTemplateOutletContext]=\"{ $implicit: currentEntry }\"\n                        ></ng-template>\n                    </span>\n                }\n            }\n        </div>\n    </section>\n</div>\n","import { NgClass } from '@angular/common';\nimport {\n    ChangeDetectionStrategy,\n    Component,\n    EventEmitter,\n    Input,\n    Output,\n    ViewChild,\n    ViewEncapsulation,\n    WritableSignal,\n    computed,\n    signal\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FormStates } from '@fundamental-ngx/cdk/forms';\nimport { InitialFocusDirective, Nullable, countBy, flatten } from '@fundamental-ngx/cdk/utils';\nimport { BarModule } from '@fundamental-ngx/core/bar';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { ObjectStatusComponent } from '@fundamental-ngx/core/object-status';\nimport { PopoverComponent, PopoverModule } from '@fundamental-ngx/core/popover';\nimport { SegmentedButtonComponent } from '@fundamental-ngx/core/segmented-button';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { getFormState } from '@fundamental-ngx/platform/form';\nimport { MessageViewComponent } from './components/message-view/message-view.component';\nimport {\n    MessagePopoverEntry,\n    MessagePopoverError,\n    MessagePopoverErrorGroup\n} from './models/message-popover-entry.interface';\nimport { MessagePopoverWrapper } from './models/message-popover-wrapper.interface';\nimport { MessagePopover, MessagePopoverState } from './models/message-popover.interface';\nimport { convertFormState, convertFormStateToMessagePopoverState } from './utils';\n\n@Component({\n    selector: 'fdp-message-popover',\n    templateUrl: './message-popover.component.html',\n    styleUrl: './message-popover.component.scss',\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [\n        PopoverModule,\n        ButtonComponent,\n        NgClass,\n        BarModule,\n        SegmentedButtonComponent,\n        FormsModule,\n        ObjectStatusComponent,\n        InitialFocusDirective,\n        MessageViewComponent,\n        FdTranslatePipe\n    ]\n})\nexport class MessagePopoverComponent implements MessagePopover {\n    /** @hidden */\n    @ViewChild('popover')\n    readonly _popover: PopoverComponent;\n\n    /** Message Popover Wrapper component. */\n    @Input()\n    set wrapper(value: Nullable<MessagePopoverWrapper>) {\n        value?.setMessagePopover(this);\n        this._wrapper$.set(value);\n    }\n    get wrapper(): Nullable<MessagePopoverWrapper> {\n        return this._wrapper$();\n    }\n\n    /** Event emits when user clicks on error entry and item's element needs to be focused. */\n    @Output()\n    focusItem = new EventEmitter<MessagePopoverEntry>();\n\n    /** Current message popover screen. Can be `list` or `details`. */\n    currentScreen: 'list' | 'details' = 'list';\n\n    /** Current error entry. */\n    currentEntry: Nullable<MessagePopoverEntry>;\n\n    /** @hidden */\n    _currentErrorType$: WritableSignal<MessagePopoverError['group']> = signal('all');\n\n    /** @hidden */\n    _errorTypes$ = computed<MessagePopoverError[]>(() => {\n        const countedErrors = this._countedErrors$();\n        const errorTypes = Object.keys(countedErrors) as FormStates[];\n        return errorTypes.map((errorType) => ({\n            group: errorType,\n            count: countedErrors[errorType],\n            state: convertFormState(errorType)\n        }));\n    });\n\n    /** @hidden */\n    _priorityStateItemsCount$ = computed(() => this._countedErrors$()[this._priorityFormState$()!] || 0);\n\n    /** @hidden */\n    _priorityFormState$ = computed<FormStates>(() => {\n        const countedErrors = this._countedErrors$();\n        const errorTypes = Object.keys(countedErrors) as FormStates[];\n        return getFormState(errorTypes);\n    });\n\n    /** @hidden */\n    _priorityState$ = computed<Nullable<MessagePopoverState>>(() =>\n        convertFormStateToMessagePopoverState(this._priorityFormState$())\n    );\n\n    /** @hidden */\n    readonly _filteredErrors$ = computed(() => {\n        const groupedErrors = this._groupedErrors$();\n        const errorType = this._currentErrorType$();\n\n        if (errorType === 'all') {\n            return groupedErrors;\n        }\n\n        const filteredErrors: MessagePopoverErrorGroup[] = [];\n        groupedErrors.forEach((group) => {\n            const errors = group.errors.filter((error) => error.type === errorType);\n\n            if (errors.length === 0) {\n                return;\n            }\n\n            filteredErrors.push({\n                group: group.group,\n                errors\n            });\n        });\n\n        return filteredErrors;\n    });\n\n    private readonly _groupedErrors$ = computed(() => this._wrapper$()?.errors$() || []);\n\n    private readonly _wrapper$ = signal<Nullable<MessagePopoverWrapper>>(null);\n\n    private readonly _countedErrors$ = computed(() =>\n        countBy(flatten(Object.values(this._groupedErrors$().map((group) => group.errors))), 'type')\n    );\n\n    /** @hidden */\n    _showList(): void {\n        this.currentScreen = 'list';\n        this.currentEntry = null;\n    }\n\n    /** @hidden */\n    _showDetails(entry: MessagePopoverEntry): void {\n        this.currentScreen = 'details';\n        this.currentEntry = entry;\n    }\n\n    /** @hidden */\n    _closePopover(focusLast = true): void {\n        this._popover.close(focusLast);\n    }\n}\n","@if (_errorTypes$().length > 0) {\n    <fd-popover\n        #popover\n        placement=\"top-start\"\n        [focusTrapped]=\"true\"\n        [focusAutoCapture]=\"true\"\n        [disableScrollbar]=\"true\"\n    >\n        <fd-popover-control>\n            <button\n                fd-button\n                type=\"button\"\n                class=\"fd-message-popover__trigger fd-message-popover__trigger\"\n                [ngClass]=\"'fd-message-popover__trigger--' + _priorityState$()\"\n                [glyph]=\"'message-' + _priorityFormState$()\"\n                [label]=\"_priorityStateItemsCount$().toString()\"\n            ></button>\n        </fd-popover-control>\n        <div>\n            <div fd-popover-body-header>\n                <div fd-bar barDesign=\"header\" class=\"fd-bar--growing\">\n                    <div fd-bar-left>\n                        @if (currentScreen === 'list') {\n                            <fd-segmented-button\n                                [ngModel]=\"_currentErrorType$()\"\n                                (ngModelChange)=\"_currentErrorType$.set($event)\"\n                            >\n                                <button\n                                    fd-button\n                                    [label]=\"('platformMessagePopover.allErrors' | fdTranslate)()\"\n                                    value=\"all\"\n                                ></button>\n                                @for (type of _errorTypes$(); track type) {\n                                    <button fd-button [value]=\"type.group\">\n                                        <span\n                                            fd-object-status\n                                            [status]=\"type.state\"\n                                            [glyph]=\"'message-' + type.group\"\n                                        ></span>\n                                        <span class=\"fd-button__text\">{{ type.count }}</span>\n                                    </button>\n                                }\n                            </fd-segmented-button>\n                        }\n                        @if (currentScreen === 'details') {\n                            <button\n                                fd-button\n                                fdkInitialFocus\n                                fdType=\"transparent\"\n                                glyph=\"navigation-left-arrow\"\n                                [title]=\"('platformMessagePopover.backButton' | fdTranslate)()\"\n                                (click)=\"_showList()\"\n                            ></button>\n                        }\n                    </div>\n                    <div fd-bar-right>\n                        <button fd-button fdType=\"transparent\" (click)=\"popover.close()\" glyph=\"decline\"></button>\n                    </div>\n                </div>\n            </div>\n            <fdp-message-view\n                [currentScreen]=\"currentScreen\"\n                [filteredErrors]=\"_filteredErrors$()\"\n                [currentEntry]=\"currentEntry\"\n                (openDetails)=\"_showDetails($event)\"\n                (closePopover)=\"_closePopover($event)\"\n                (focusItem)=\"focusItem.emit($event)\"\n            ></fdp-message-view>\n        </div>\n    </fd-popover>\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { mergeWith } from '@fundamental-ngx/cdk/utils';\nimport { MessagePopoverFormWrapperComponent } from './components/message-popover-form-wrapper/message-popover-form-wrapper.component';\nimport { MessageViewComponent } from './components/message-view/message-view.component';\nimport { FDP_MESSAGE_POPOVER_CONFIG, FDP_MESSAGE_POPOVER_DEFAULT_CONFIG, MessagePopoverConfig } from './default-config';\nimport { MessagePopoverFormItemDirective } from './directives/message-popover-form-item.directive';\nimport { MessagePopoverComponent } from './message-popover.component';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n    imports: [\n        MessagePopoverComponent,\n        MessagePopoverFormWrapperComponent,\n        MessageViewComponent,\n        MessagePopoverFormItemDirective\n    ],\n    exports: [\n        MessagePopoverComponent,\n        MessagePopoverFormWrapperComponent,\n        MessageViewComponent,\n        MessagePopoverFormItemDirective\n    ],\n    providers: [\n        {\n            provide: FDP_MESSAGE_POPOVER_CONFIG,\n            useValue: FDP_MESSAGE_POPOVER_DEFAULT_CONFIG\n        }\n    ]\n})\nexport class PlatformMessagePopoverModule {\n    /**\n     * Method allows users to apply custom configuration.\n     * @param config Object containing error definitions.\n     */\n    static withConfig(config: MessagePopoverConfig): ModuleWithProviders<PlatformMessagePopoverModule> {\n        const customConfig = mergeWith(FDP_MESSAGE_POPOVER_DEFAULT_CONFIG, config, (obj, src) => {\n            if (typeof obj === 'object' && !Array.isArray(obj)) {\n                return Object.assign(obj, src);\n            } else if (Array.isArray(obj)) {\n                return obj.concat(src);\n            } else {\n                return src;\n            }\n        });\n\n        return {\n            ngModule: PlatformMessagePopoverModule,\n            providers: [\n                {\n                    provide: FDP_MESSAGE_POPOVER_CONFIG,\n                    useValue: customConfig\n                }\n            ]\n        };\n    }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i3"],"mappings":"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"}