{"version":3,"file":"fundamental-ngx-platform-form.mjs","sources":["../../../../libs/platform/form/form-group/constants.ts","../../../../libs/platform/form/helpers.ts","../../../../libs/platform/form/input-message-group-with-template/input-message-group-with-template.component.ts","../../../../libs/platform/form/input-message-group-with-template/input-message-group-with-template.component.html","../../../../libs/platform/form/form-group/config/default-form-field-hint-options.ts","../../../../libs/platform/form/form-group/fdp-form.tokens.ts","../../../../libs/platform/form/form-group/form-field-error/tokens.ts","../../../../libs/platform/form/form-group/form-field-error/form-field-error.directive.ts","../../../../libs/platform/form/form-group/form-field-extras/form-field-extras.component.ts","../../../../libs/platform/form/form-group/helpers.ts","../../../../libs/platform/form/form-group/services/form-field-layout.service.ts","../../../../libs/platform/form/form-group/form-field/form-field.component.ts","../../../../libs/platform/form/form-group/form-field/form-field.component.html","../../../../libs/platform/form/form-generator/dynamic-form-control.ts","../../../../libs/platform/form/form-generator/config/default-validation-errors.ts","../../../../libs/platform/form/checkbox/checkbox.component.ts","../../../../libs/platform/form/checkbox/checkbox.component.html","../../../../libs/platform/form/checkbox-group/checkbox-group.component.ts","../../../../libs/platform/form/checkbox-group/checkbox-group.component.html","../../../../libs/platform/form/checkbox-group/checkbox-group.module.ts","../../../../libs/platform/form/form-generator/providers/providers.ts","../../../../libs/platform/form/form-generator/base-dynamic-form-generator-control.ts","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-checkbox/dynamic-form-generator-checkbox.component.ts","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-checkbox/dynamic-form-generator-checkbox.component.html","../../../../libs/platform/form/date-picker/date-picker.component.ts","../../../../libs/platform/form/date-picker/date-picker.component.html","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-datepicker/dynamic-form-generator-datepicker.component.ts","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-datepicker/dynamic-form-generator-datepicker.component.html","../../../../libs/platform/form/text-area/text-area.config.ts","../../../../libs/platform/form/text-area/text-area.component.ts","../../../../libs/platform/form/text-area/text-area.component.html","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-editor/dynamic-form-generator-editor.component.ts","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-editor/dynamic-form-generator-editor.component.html","../../../../libs/platform/form/input/input.component.ts","../../../../libs/platform/form/input/input.component.html","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-input/dynamic-form-generator-input.component.ts","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-input/dynamic-form-generator-input.component.html","../../../../libs/platform/form/multi-input/multi-input.config.ts","../../../../libs/platform/form/multi-input/base-multi-input.ts","../../../../libs/platform/form/multi-input/multi-input.interface.ts","../../../../libs/platform/form/multi-input/multi-input-mobile/multi-input-mobile.component.ts","../../../../libs/platform/form/multi-input/multi-input-mobile/multi-input-mobile.component.html","../../../../libs/platform/form/multi-input/multi-input-mobile/multi-input-mobile.module.ts","../../../../libs/platform/form/auto-complete/auto-complete.directive.ts","../../../../libs/platform/form/multi-input/multi-input.component.ts","../../../../libs/platform/form/multi-input/multi-input.component.html","../../../../libs/platform/form/multi-input/multi-input.module.ts","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-multi-input/dynamic-form-generator-multi-input.component.ts","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-multi-input/dynamic-form-generator-multi-input.component.html","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-object-status/dynamic-form-generator-object-status.component.ts","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-object-status/dynamic-form-generator-object-status.component.html","../../../../libs/platform/form/radio-group/radio/radio.component.ts","../../../../libs/platform/form/radio-group/radio/radio.component.html","../../../../libs/platform/form/radio-group/radio-group.component.ts","../../../../libs/platform/form/radio-group/radio-group.component.html","../../../../libs/platform/form/radio-group/radio-group.module.ts","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-radio/dynamic-form-generator-radio.component.ts","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-radio/dynamic-form-generator-radio.component.html","../../../../libs/platform/form/select/select.config.ts","../../../../libs/platform/form/select/commons/base-select.ts","../../../../libs/platform/form/select/select/select.component.ts","../../../../libs/platform/form/select/select/select.component.html","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-select/dynamic-form-generator-select.component.ts","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-select/dynamic-form-generator-select.component.html","../../../../libs/platform/form/switch/switch/switch.config.ts","../../../../libs/platform/form/switch/switch/switch.component.ts","../../../../libs/platform/form/switch/switch/switch.component.html","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-switch/dynamic-form-generator-switch.component.ts","../../../../libs/platform/form/form-generator/controls/dynamic-form-generator-switch/dynamic-form-generator-switch.component.html","../../../../libs/platform/form/form-generator/config/default-components-list.ts","../../../../libs/platform/form/form-generator/form-generator-components-accessor.service.ts","../../../../libs/platform/form/form-generator/helpers.ts","../../../../libs/platform/form/form-generator/form-generator.service.ts","../../../../libs/platform/form/form-generator/dynamic-form-control.directive.ts","../../../../libs/platform/form/form-group/form-field-error/form-field-error-description.directive.ts","../../../../libs/platform/form/form-group/form-field-error/form-field-error-heading.directive.ts","../../../../libs/platform/form/form-group/form-field-group/form-field-group.component.ts","../../../../libs/platform/form/form-group/form-group-header/form-group-header.component.ts","../../../../libs/platform/form/form-group/form-group-header/form-group-header.component.html","../../../../libs/platform/form/models/field.model.ts","../../../../libs/platform/form/form-group/pipes/field-group-row-value.pipe.ts","../../../../libs/platform/form/form-group/form-group.component.ts","../../../../libs/platform/form/form-group/form-group.component.html","../../../../libs/platform/form/form-group/fdp-form.module.ts","../../../../libs/platform/form/form-generator/form-generator-field/form-generator-field.component.ts","../../../../libs/platform/form/form-generator/form-generator-field/form-generator-field.component.html","../../../../libs/platform/form/form-helpers.ts","../../../../libs/platform/form/auto-complete/auto-complete.module.ts","../../../../libs/platform/form/checkbox/checkbox.module.ts","../../../../libs/platform/form/combobox/combobox.interface.ts","../../../../libs/platform/form/combobox/combobox-mobile/combobox/combobox-mobile.component.ts","../../../../libs/platform/form/combobox/combobox-mobile/combobox/combobox-mobile.component.html","../../../../libs/platform/form/combobox/combobox-mobile/combobox-mobile.module.ts","../../../../libs/platform/form/combobox/combobox.config.ts","../../../../libs/platform/form/combobox/directives/combobox-item.directive.ts","../../../../libs/platform/form/combobox/commons/base-combobox.ts","../../../../libs/platform/form/combobox/combobox/combobox.component.ts","../../../../libs/platform/form/combobox/combobox/combobox.component.html","../../../../libs/platform/form/combobox/combobox.module.ts","../../../../libs/platform/form/date-picker/date-picker.module.ts","../../../../libs/platform/form/datetime-picker/errors.ts","../../../../libs/platform/form/datetime-picker/datetime-picker.component.ts","../../../../libs/platform/form/datetime-picker/datetime-picker.component.html","../../../../libs/platform/form/datetime-picker/datetime-picker.module.ts","../../../../libs/platform/form/form-generator/config/default-form-generator-hint-options.ts","../../../../libs/platform/form/form-generator/dynamic-form-control-field.directive.ts","../../../../libs/platform/form/form-generator/form-generator.tokens.ts","../../../../libs/platform/form/form-generator/pipes/get-hint-options.pipe.ts","../../../../libs/platform/form/form-generator/pipes/get-ordered-form-controls.pipe.ts","../../../../libs/platform/form/form-generator/form-generator/form-generator.component.ts","../../../../libs/platform/form/form-generator/form-generator/form-generator.component.html","../../../../libs/platform/form/form-generator/fdp-form-generator.module.ts","../../../../libs/platform/form/input/fdp-input.module.ts","../../../../libs/platform/form/input-group/constants.ts","../../../../libs/platform/form/input-group/addon-body.component.ts","../../../../libs/platform/form/input-group/addon.component.ts","../../../../libs/platform/form/input-group/input-group.config.ts","../../../../libs/platform/form/input-group/input.component.ts","../../../../libs/platform/form/input-group/input-group.component.ts","../../../../libs/platform/form/input-group/input-group.component.html","../../../../libs/platform/form/input-group/input-group.module.ts","../../../../libs/platform/form/multi-combobox/multi-combobox.config.ts","../../../../libs/platform/form/multi-combobox/commons/base-multi-combobox.ts","../../../../libs/platform/form/multi-combobox/multi-combobox.interface.ts","../../../../libs/platform/form/multi-combobox/multi-combobox-mobile/multi-combobox/multi-combobox-mobile.component.ts","../../../../libs/platform/form/multi-combobox/multi-combobox-mobile/multi-combobox/multi-combobox-mobile.component.html","../../../../libs/platform/form/multi-combobox/multi-combobox-mobile/multi-combobox-mobile.module.ts","../../../../libs/platform/form/multi-combobox/multi-combobox/multi-combobox.component.ts","../../../../libs/platform/form/multi-combobox/multi-combobox/multi-combobox.component.html","../../../../libs/platform/form/multi-combobox/multi-combobox.module.ts","../../../../libs/platform/form/select/select.module.ts","../../../../libs/platform/form/step-input/step-input.config.ts","../../../../libs/platform/form/step-input/step-input.util.ts","../../../../libs/platform/form/step-input/base.step-input.ts","../../../../libs/platform/form/step-input/step-input-control.directive.ts","../../../../libs/platform/form/step-input/step-input-action-button.ts","../../../../libs/platform/form/step-input/step-input-decrement.directive.ts","../../../../libs/platform/form/step-input/step-input-increment.directive.ts","../../../../libs/platform/form/step-input/number/number-step-input.component.ts","../../../../libs/platform/form/step-input/number/number-step-input.component.html","../../../../libs/platform/form/step-input/step-input.module.ts","../../../../libs/platform/form/switch/switch.module.ts","../../../../libs/platform/form/text-area/text-area.module.ts","../../../../libs/platform/form/time-picker/time-picker.component.ts","../../../../libs/platform/form/time-picker/time-picker.component.html","../../../../libs/platform/form/time-picker/time-picker.module.ts","../../../../libs/platform/form/fundamental-ngx-platform-form.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { ColumnLayout } from '@fundamental-ngx/platform/shared';\n\nexport const FORM_GROUP_CHILD_FIELD_TOKEN = new InjectionToken<string>('FORM_GROUP_CHILD_FIELD_TOKEN');\n\nexport const DefaultHorizontalLabelLayout: ColumnLayout = {\n    XL: 4,\n    L: 4,\n    M: 4,\n    S: 12\n};\n\nexport const DefaultVerticalLabelLayout: ColumnLayout = {\n    S: 12\n};\n\nexport const DefaultHorizontalFieldLayout: ColumnLayout = {\n    XL: 8,\n    L: 8,\n    M: 8,\n    S: 12\n};\n\nexport const DefaultVerticalFieldLayout: ColumnLayout = {\n    S: 12\n};\n\nexport const DefaultGapLayout: ColumnLayout = {\n    S: 0\n};\n","import { FormStates } from '@fundamental-ngx/cdk/forms';\n\n/**\n * Returns form state based on priority.\n * @param states Error states of the form fields.\n * @param priorityStates Array of prioritized states.\n * @returns first found form state of `priorityStates`.\n */\nexport function getFormState(\n    states: FormStates[],\n    priorityStates: FormStates[] = ['error', 'warning', 'information', 'success', 'default']\n): FormStates {\n    let priorityState: FormStates = 'default';\n\n    priorityStates.some((state) => {\n        const firstErrorState = states.find((formState) => formState === state);\n\n        if (!firstErrorState) {\n            return false;\n        }\n\n        priorityState = firstErrorState;\n        return true;\n    });\n\n    return priorityState;\n}\n","import { ChangeDetectionStrategy, Component, ContentChild, Input, TemplateRef, ViewEncapsulation } from '@angular/core';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport { FormInputMessageGroupComponent } from '@fundamental-ngx/core/form';\nimport {\n    PopoverBodyComponent,\n    PopoverComponent,\n    PopoverControlComponent,\n    TriggerConfig\n} from '@fundamental-ngx/core/popover';\n\n/**\n * This extends core implementation  to support richer extensibility and instead of relying\n * only on ng-content selector this will allow you to put any content as trigger.\n *\n * Let's think of u\n */\n@Component({\n    selector: 'fdp-input-message-group',\n    templateUrl: './input-message-group-with-template.component.html',\n    styleUrl: './input-message-group-with-template.component.scss',\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [PopoverComponent, PopoverControlComponent, NgTemplateOutlet, PopoverBodyComponent]\n})\n// eslint-disable-next-line @angular-eslint/component-class-suffix\nexport class InputMessageGroupWithTemplate extends FormInputMessageGroupComponent {\n    /**\n     * To allow user to determine what event he wants to trigger the messages to show\n     * Accepts any [HTML DOM Events](https://www.w3schools.com/jsref/dom_obj_event.asp).\n     */\n    @Input()\n    triggers: (string | TriggerConfig)[] = [\n        {\n            trigger: 'focusin',\n            openAction: true,\n            closeAction: false\n        },\n        {\n            trigger: 'focusout',\n            openAction: false,\n            closeAction: true\n        }\n    ];\n    /**\n     * Custom trigger element.\n     */\n    @ContentChild('triggerItem', { static: false })\n    triggerItemTemplate: TemplateRef<any>;\n}\n","<fd-popover\n    #popover\n    (isOpenChange)=\"openChanged($event)\"\n    additionalBodyClass=\"fd-popover__body--input-message-group\"\n    [closeOnOutsideClick]=\"closeOnOutsideClick\"\n    [closeOnEscapeKey]=\"closeOnEscapeKey\"\n    [fillControlMode]=\"fillControlMode\"\n    [isOpen]=\"isOpen\"\n    [placement]=\"placement\"\n    [triggers]=\"triggers\"\n    [disableScrollbar]=\"true\"\n    class=\"fd-form-input-message-group fd-popover--input-message-group\"\n>\n    <fd-popover-control>\n        <ng-template [ngTemplateOutlet]=\"triggerItemTemplate\"></ng-template>\n    </fd-popover-control>\n    <fd-popover-body>\n        <ng-content></ng-content>\n    </fd-popover-body>\n</fd-popover>\n","import { FieldHintOptions } from '@fundamental-ngx/platform/shared';\n\nexport const defaultFormFieldHintOptions: Omit<FieldHintOptions, 'content'> = {\n    placement: 'right',\n    position: 'after',\n    trigger: [\n        { trigger: 'mouseenter', openAction: true, closeAction: false },\n        { trigger: 'mouseleave', openAction: false, closeAction: true },\n        { trigger: 'focusin', openAction: true, closeAction: false },\n        { trigger: 'focusout', openAction: false, closeAction: true }\n    ],\n    glyph: 'hint',\n    target: 'auto'\n};\n","import { InjectionToken } from '@angular/core';\nimport { Column, ColumnLayout, FieldHintOptions } from '@fundamental-ngx/platform/shared';\nimport { defaultFormFieldHintOptions } from './config/default-form-field-hint-options';\n\nexport const FDP_FORM_FIELD_HINT_OPTIONS_DEFAULT = new InjectionToken<Omit<FieldHintOptions, 'content'>>(\n    'Form field default hint options',\n    {\n        factory: () => defaultFormFieldHintOptions\n    }\n);\n\nexport interface HintLayoutConfig {\n    hintOnInputBreakpoints: Array<keyof ColumnLayout>;\n    hintPlaceMinSize: Column;\n}\n\nexport const FDP_FORM_FIELD_HINT_LAYOUT_CONFIG = new InjectionToken<HintLayoutConfig>(\n    'Configuration for setting default values for configuring how places for inline help are coming',\n    {\n        factory: () => ({\n            hintOnInputBreakpoints: ['M', 'L', 'XL'],\n            hintPlaceMinSize: 1\n        })\n    }\n);\n","import { InjectionToken } from '@angular/core';\n\nexport const FDP_FORM_ERROR_DIRECTIVE = new InjectionToken('FdpFormErrorDirective');\n","import { ChangeDetectorRef, Directive, Input, OnInit, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { FormStates } from '@fundamental-ngx/cdk/forms';\nimport {\n    FormError,\n    FormErrorDescription,\n    FormErrorHeading,\n    FormFieldErrorContext\n} from '@fundamental-ngx/platform/shared';\nimport { Subject } from 'rxjs';\nimport { FDP_FORM_ERROR_DIRECTIVE } from './tokens';\n\n@Directive({\n    selector: '[fdpFormFieldError]',\n    providers: [\n        {\n            provide: FDP_FORM_ERROR_DIRECTIVE,\n            useExisting: FormFieldErrorDirective\n        }\n    ],\n    standalone: true\n})\nexport class FormFieldErrorDirective<T = any> implements FormError<T>, OnInit {\n    /** Used to connect data with model for typings support. */\n    @Input()\n    fdpFormFieldErrorAs: T;\n\n    /** Error name */\n    @Input('fdpFormFieldError')\n    error: string;\n\n    /** Error type */\n    @Input()\n    fdpFormFieldErrorType: FormStates = 'error';\n\n    /** @hidden */\n    detectChanges$ = new Subject<void>();\n\n    /** Error type. Defines which type to return. Either self, or from heading directive. */\n    get type(): FormStates {\n        return this._headingDirective?.fdpFormFieldErrorHeadingType ?? this.fdpFormFieldErrorType;\n    }\n\n    /** @hidden */\n    private _headingDirective: FormErrorHeading | undefined;\n\n    /** @hidden */\n    private _descriptionDirective: FormErrorDescription | undefined;\n\n    /** @hidden */\n    private _detectTimeout: ReturnType<typeof setTimeout>;\n\n    /** @hidden */\n    get _headingTemplateRef(): TemplateRef<FormFieldErrorContext<T>> {\n        return this._headingDirective?.templateRef ?? this.templateRef;\n    }\n\n    /** @hidden */\n    get _descriptionTemplateRef(): TemplateRef<FormFieldErrorContext<T>> | null {\n        return this._descriptionDirective?.templateRef ?? null;\n    }\n\n    /** @hidden */\n    constructor(\n        public templateRef: TemplateRef<FormFieldErrorContext<T>>,\n        private _viewContainer: ViewContainerRef,\n        private _cdr: ChangeDetectorRef\n    ) {}\n\n    /** @hidden */\n    static ngTemplateContextGuard(\n        dir: FormFieldErrorDirective,\n        ctx: FormFieldErrorContext<any>\n    ): ctx is FormFieldErrorContext<any> {\n        return true;\n    }\n\n    /** @hidden */\n    ngOnInit(): void {\n        // We need to create view in order to initialize child directives immediately.\n        this._createView();\n    }\n\n    /** Registers child heading directive. */\n    registerHeading(directive: FormErrorHeading): void {\n        this._headingDirective = directive;\n        this._detectChanges();\n    }\n\n    /** Registers child description directive. */\n    registerDescription(directive: FormErrorDescription): void {\n        this._descriptionDirective = directive;\n        this._detectChanges();\n    }\n\n    /** @hidden */\n    private _createView(): void {\n        this._viewContainer.createEmbeddedView(this.templateRef);\n        this._viewContainer.detach();\n    }\n\n    /** @hidden */\n    private _detectChanges(): void {\n        // Since child directives can register itself almost instantly, we need to trigger detect changes only one time,\n        // in order to bypass error with expected/actual directives count.\n        clearTimeout(this._detectTimeout);\n        this._detectTimeout = setTimeout(() => {\n            this._cdr.detectChanges();\n            this.detectChanges$.next();\n        }, 5);\n    }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n    selector: 'fdp-form-field-extras',\n    template: '<ng-content></ng-content>',\n    // \"display: flex\" is used in order to have margin included in control's dimensions\n    styles: [':host { display: flex; white-space: normal; }'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: true\n})\nexport class FormFieldControlExtrasComponent {}\n","import { ColumnLayout, ColumnLayoutGridClass } from '@fundamental-ngx/platform/shared';\n\n/** @hidden */\nexport function normalizeColumnLayout(layout: ColumnLayout, defaultColumn = 12): Required<ColumnLayout> {\n    layout['S'] = layout['S'] !== undefined ? layout['S'] : defaultColumn;\n    layout['M'] = layout['M'] || layout['S'];\n    layout['L'] = layout['L'] || layout['M'];\n    layout['XL'] = layout['XL'] || layout['L'];\n\n    return layout as Required<ColumnLayout>;\n}\n\n/** @hidden */\nexport function generateColumnClass(layout: ColumnLayout): string {\n    return Object.entries(layout)\n        .reduce((overall, value) => {\n            overall.push(`fd-col-${ColumnLayoutGridClass[value[0]]}--${value[1]}`);\n            return overall;\n        }, [] as string[])\n        .join(' ');\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { GRID_COLUMNS_NUMBER as maxColumnsPerRow } from '@fundamental-ngx/core/layout-grid';\nimport { ColumnLayout } from '@fundamental-ngx/platform/shared';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { distinctUntilChanged } from 'rxjs/operators';\nimport { FDP_FORM_FIELD_HINT_LAYOUT_CONFIG, HintLayoutConfig } from '../fdp-form.tokens';\nimport { normalizeColumnLayout } from '../helpers';\n\ntype Layouts = {\n    labelColumnLayout: ColumnLayout;\n    fieldColumnLayout: ColumnLayout;\n    gapColumnLayout: ColumnLayout;\n};\n\n/**\n * Should be used in component level. Ideally placed on container component,\n * so that every it's child FormField can have shared information about peers'\n * need about inline help place.\n */\n@Injectable()\nexport class FormFieldLayoutService {\n    /**\n     * Will notify if inline help place is needed. If any of the FormFields in group have\n     * hintOptions config set the way that it might end up on 'input', then it will emit true\n     */\n    readonly needsInlineHelpPlace: Observable<boolean>;\n    /** @hidden */\n    private _needsInlineHelpPlace$ = new BehaviorSubject<boolean>(false);\n    /** @hidden */\n    private _elementsMap: Map<Record<string, any>, boolean> = new Map();\n\n    /** @hidden */\n    constructor(@Inject(FDP_FORM_FIELD_HINT_LAYOUT_CONFIG) private _hintLayoutConfig: HintLayoutConfig) {\n        this.needsInlineHelpPlace = this._needsInlineHelpPlace$.pipe(distinctUntilChanged());\n    }\n\n    /**\n     * Notify service about target component's requirement for the place for inline help\n     */\n    setNeedsInlineHelp(target: Record<string, any>, isNeeded: boolean): void {\n        this._elementsMap.set(target, isNeeded);\n        this._updateCombinedValue();\n    }\n\n    /**\n     * Function will give place for hint in case it does not have it yet,\n     * if combined needsInlineHelpPlace value is true\n     */\n    getFixedLayouts(layouts: Layouts): Layouts {\n        const fieldColumnLayout = normalizeColumnLayout({ ...layouts.fieldColumnLayout });\n        const labelColumnLayout = normalizeColumnLayout({ ...layouts.labelColumnLayout });\n        const gapColumnLayout = normalizeColumnLayout({\n            ...(layouts.gapColumnLayout ? layouts.gapColumnLayout : { S: 0 })\n        });\n        if (this._needsInlineHelpPlace$.value) {\n            this._hintLayoutConfig.hintOnInputBreakpoints.forEach((sizeName) => {\n                const shouldFitInOneLine =\n                    labelColumnLayout[sizeName] + fieldColumnLayout[sizeName] + gapColumnLayout[sizeName] <=\n                    maxColumnsPerRow;\n                if (gapColumnLayout[sizeName] < this._hintLayoutConfig.hintPlaceMinSize) {\n                    gapColumnLayout[sizeName] = this._hintLayoutConfig.hintPlaceMinSize;\n                }\n                if (gapColumnLayout[sizeName] + fieldColumnLayout[sizeName] > maxColumnsPerRow) {\n                    const diff = gapColumnLayout[sizeName] + fieldColumnLayout[sizeName] - maxColumnsPerRow;\n                    fieldColumnLayout[sizeName] -= diff;\n                }\n                if (shouldFitInOneLine) {\n                    const maxAllocatedPlaceForFieldAndLabel = maxColumnsPerRow - gapColumnLayout[sizeName];\n                    while (\n                        labelColumnLayout[sizeName] + fieldColumnLayout[sizeName] >\n                        maxAllocatedPlaceForFieldAndLabel\n                    ) {\n                        fieldColumnLayout[sizeName] -= 1;\n                    }\n                }\n            });\n        }\n        return { fieldColumnLayout, labelColumnLayout, gapColumnLayout };\n    }\n\n    /**\n     * Remove component from the combined value calculations\n     */\n    removeEntry(target: Record<string, any>): void {\n        this._elementsMap.delete(target);\n        this._updateCombinedValue();\n    }\n\n    /**\n     * Will loop through all registered components and if any of them has need for\n     * inline help place, then it will notify listeners about it and also will set\n     * local variable\n     * @hidden\n     */\n    private _updateCombinedValue(): void {\n        for (const [, needed] of this._elementsMap) {\n            if (needed) {\n                return this._needsInlineHelpPlace$.next(true);\n            }\n        }\n        this._needsInlineHelpPlace$.next(false);\n    }\n}\n","import {\n    AfterContentInit,\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    ContentChild,\n    ContentChildren,\n    DestroyRef,\n    ElementRef,\n    EventEmitter,\n    Inject,\n    Input,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    Optional,\n    Output,\n    Provider,\n    QueryList,\n    Self,\n    Signal,\n    SimpleChanges,\n    SkipSelf,\n    TemplateRef,\n    ViewChild,\n    ViewChildren,\n    booleanAttribute,\n    forwardRef,\n    inject\n} from '@angular/core';\nimport { AbstractControl, FormControl, ValidatorFn, Validators } from '@angular/forms';\nimport { FD_FORM_FIELD, FormFieldControl, FormStates } from '@fundamental-ngx/cdk/forms';\nimport { uniqBy } from '@fundamental-ngx/cdk/utils';\nimport { BehaviorSubject, Observable, Subject, Subscription, combineLatest, filter, tap } from 'rxjs';\nimport { map, startWith, switchMap } from 'rxjs/operators';\n\nimport { CommonModule, NgTemplateOutlet } from '@angular/common';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { FormItemComponent, FormLabelComponent, FormMessageComponent } from '@fundamental-ngx/core/form';\nimport { IconComponent } from '@fundamental-ngx/core/icon';\nimport { InlineHelpDirective } from '@fundamental-ngx/core/inline-help';\nimport { LinkComponent } from '@fundamental-ngx/core/link';\nimport {\n    Column,\n    ColumnLayout,\n    FieldHintInput,\n    FieldHintOptions,\n    FormError,\n    FormFieldErrorDirectiveContext,\n    FormFieldGroup,\n    FormGroupContainer,\n    HintContent,\n    PlatformFormField,\n    PlatformFormFieldControl,\n    RESPONSIVE_BREAKPOINTS_CONFIG,\n    ResponsiveBreakPointConfig,\n    ResponsiveBreakpointsService\n} from '@fundamental-ngx/platform/shared';\nimport { getFormState } from '../../helpers';\nimport { InputMessageGroupWithTemplate } from '../../input-message-group-with-template/input-message-group-with-template.component';\nimport { defaultFormFieldHintOptions } from '../config/default-form-field-hint-options';\nimport { FORM_GROUP_CHILD_FIELD_TOKEN } from '../constants';\nimport {\n    FDP_FORM_FIELD_HINT_LAYOUT_CONFIG,\n    FDP_FORM_FIELD_HINT_OPTIONS_DEFAULT,\n    HintLayoutConfig\n} from '../fdp-form.tokens';\nimport { FormFieldErrorDirective } from '../form-field-error/form-field-error.directive';\nimport { FormFieldControlExtrasComponent } from '../form-field-extras/form-field-extras.component';\nimport { generateColumnClass, normalizeColumnLayout } from '../helpers';\nimport { FormFieldLayoutService } from '../services/form-field-layout.service';\n\nlet defaultId = 0;\n\nconst formFieldProvider: Provider = {\n    provide: FD_FORM_FIELD,\n    useExisting: forwardRef(() => FormFieldComponent)\n};\n\nconst formGroupChildProvider: Provider = {\n    provide: FORM_GROUP_CHILD_FIELD_TOKEN,\n    useExisting: forwardRef(() => FormFieldComponent)\n};\n\nfunction columnTransformer(v: Column | `${Column}`): Column {\n    return parseInt(v + '', 10) as Column;\n}\n\nfunction rankTransformer(v: string | number): number {\n    return parseInt(v + '', 10);\n}\n\n/**\n * Form Field represent actual row and aggregates common behavior for the input field such as\n * error, label or hint.\n * Hint is also responsible for listening for FieldControl changes and trigger necessary\n * change detection\n *\n */\n@Component({\n    selector: 'fdp-form-field',\n    templateUrl: 'form-field.component.html',\n    styleUrl: './form-field.component.scss',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [formFieldProvider, formGroupChildProvider, FormFieldLayoutService],\n    imports: [\n        CommonModule,\n        FormItemComponent,\n        NgTemplateOutlet,\n        InputMessageGroupWithTemplate,\n        FormMessageComponent,\n        FormLabelComponent,\n        LinkComponent,\n        IconComponent,\n        InlineHelpDirective\n    ]\n})\nexport class FormFieldComponent\n    implements PlatformFormField, AfterContentInit, AfterViewInit, OnDestroy, OnInit, OnChanges\n{\n    /** Form field label */\n    @Input()\n    label: string;\n\n    /**\n     * Suffix for ids of control elements inside this form field\n     */\n    @Input()\n    id: string = (++defaultId).toString();\n\n    /** Hint to be placed next to label */\n    @Input()\n    hint: Nullable<FieldHintInput>;\n\n    /**\n     * Indicates when form field label should not be displayed\n     */\n    @Input()\n    noLabelLayout = false;\n\n    /**\n     * The list of validators applied to the form field.\n     */\n    @Input()\n    validators: Array<ValidatorFn> = [Validators.nullValidator];\n\n    /**\n     * Rank is used for ordering.\n     * First lower number, then - higher\n     */\n    @Input({ transform: rankTransformer })\n    rank: number;\n\n    /**\n     * Placeholder for the field\n     */\n    @Input()\n    placeholder: string;\n\n    /** Form Container column it belongs to */\n    @Input()\n    column: number;\n\n    /** object for placing field in column in each screen layout */\n    @Input()\n    set columnLayout(layout: ColumnLayout | undefined) {\n        if (!layout) {\n            return;\n        }\n        this._columnLayout = layout;\n        this._isColumnLayoutEnabled = true;\n        this._setLayout();\n    }\n\n    get columnLayout(): ColumnLayout {\n        return this._columnLayout;\n    }\n\n    /**\n     * Defines label's column layout.\n     */\n    @Input()\n    set labelColumnLayout(value: ColumnLayout | undefined) {\n        if (!value) {\n            return;\n        }\n        this._labelColumnLayout = normalizeColumnLayout(value);\n        this._labelColumnLayoutClass = generateColumnClass(this._labelColumnLayout);\n        this._labelColumnLayout$.next(this._labelColumnLayout);\n    }\n\n    get labelColumnLayout(): ColumnLayout {\n        return this._labelColumnLayout;\n    }\n\n    /**\n     * Defines field's column layout.\n     */\n    @Input()\n    set fieldColumnLayout(value: ColumnLayout | undefined) {\n        if (!value) {\n            return;\n        }\n\n        this._fieldColumnLayout = normalizeColumnLayout(value);\n        this._fieldColumnLayoutClass = generateColumnClass(this._fieldColumnLayout);\n        this._fieldColumnLayout$.next(this._fieldColumnLayout);\n    }\n\n    get fieldColumnLayout(): ColumnLayout {\n        return this._fieldColumnLayout;\n    }\n\n    /**\n     * Defines gap column layout.\n     */\n    @Input()\n    set gapColumnLayout(value: ColumnLayout | undefined) {\n        if (!value) {\n            return;\n        }\n\n        this._gapColumnLayout = normalizeColumnLayout(value);\n        this._gapColumnLayoutClass = generateColumnClass(this._gapColumnLayout);\n        this._gapColumnLayout$.next(this._gapColumnLayout);\n    }\n\n    get gapColumnLayout(): ColumnLayout {\n        return this._gapColumnLayout;\n    }\n\n    /**\n     * Translations template reference.\n     * This is in most of the cases set from parent container (form-group)\n     */\n    @Input()\n    i18Strings: TemplateRef<any>;\n\n    /** Set when form field is a mandatory one. */\n    @Input({ transform: booleanAttribute })\n    required = false;\n\n    /**\n     * Indicates if field is editable\n     */\n    @Input({ transform: booleanAttribute })\n    set editable(value: boolean) {\n        if (this._editable === value) {\n            return;\n        }\n        this._editable = value;\n        this._updateControlProperties();\n    }\n\n    get editable(): boolean {\n        return this._editable;\n    }\n\n    /**\n     * Form field custom width in columns must be between 1 - 12\n     */\n    @Input({ transform: columnTransformer })\n    columns: Column = 6;\n\n    /**\n     * marks field as disabled. used in reactive form approach.\n     */\n    @Input()\n    disabled = false;\n\n    /** Whether label text should be appended with colon. */\n    @Input()\n    colon = false;\n\n    /**\n     * Form Group Container to bind the Form-Field to.\n     * This will override default value injected by constructor\n     */\n    @Input()\n    formGroupContainer: FormGroupContainer;\n\n    /** Emits whenever formFieldControl's state changes */\n    @Output()\n    // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n    onChange: EventEmitter<string> = new EventEmitter<string>();\n\n    /** Emits whenever column layout is changed */\n    @Output()\n    // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n    onColumnChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n    /**\n     * @hidden\n     * Form field template reference\n     */\n    @ViewChild('renderer', { static: true })\n    renderer: TemplateRef<any>;\n\n    /** @hidden */\n    @ContentChild(FormFieldControlExtrasComponent, { read: ElementRef })\n    formFieldExtras?: ElementRef<HTMLElement>;\n\n    /** @hidden */\n    @ViewChild('labelCol') labelCol?: ElementRef<HTMLDivElement>;\n\n    /** @hidden */\n    @ViewChild(InputMessageGroupWithTemplate, { read: ElementRef })\n    inputMessageGroup: ElementRef<HTMLElement>;\n\n    /** @hidden */\n    @ViewChild('innerErrorRenderers')\n    innerErrorRenderers: TemplateRef<any>;\n\n    /** @hidden */\n    @ContentChildren(FormFieldErrorDirective)\n    private _errorDirectiveQuery: QueryList<FormError>;\n\n    /** @hidden */\n    @ViewChildren(InputMessageGroupWithTemplate)\n    private readonly _inputMessageGroupCmp: QueryList<InputMessageGroupWithTemplate>;\n\n    /** Combined Error directives from field itself and parent form container. */\n    get errorDirectives(): FormError[] {\n        return uniqBy([...this._errorDirectives, ...this._formGroupErrorDirectives], 'error');\n    }\n\n    /** @hidden */\n    isHorizontal$: Signal<boolean | undefined>;\n\n    /**\n     * Child FormFieldControl\n     */\n    control: PlatformFormFieldControl | null;\n\n    /** @hidden */\n    _labelColumnLayoutClass: string;\n\n    /** @hidden */\n    _fieldColumnLayoutClass: string;\n\n    /** @hidden */\n    _gapColumnLayoutClass: string;\n\n    /**\n     * hint and hint placement coerced to the FieldHintOptions\n     */\n    hintOptions: FieldHintOptions = defaultFormFieldHintOptions as unknown as FieldHintOptions;\n\n    /** @hidden */\n    _errorDirectives: FormError[] = [];\n\n    /** Grouped errors. */\n    groupedErrors: FormFieldErrorDirectiveContext[] = [];\n\n    /** Event emited when errors object being changed. */\n    errorsChange$ = new Subject<void>();\n\n    /**\n     * @hidden\n     * Optional FormControl\n     */\n    formControl: FormControl;\n\n    /** @hidden */\n    get _groupHost(): FormGroupContainer | FormFieldGroup {\n        return this.formFieldGroup ? this.formFieldGroup : this.formGroupContainer;\n    }\n\n    /**\n     * Will be updated during onChanges and resize, resulting correct placement of the\n     * hint respecting passed configs and given breakpoint of screen.\n     */\n    hintTarget?: string;\n\n    /** @hidden */\n    protected _editable = true;\n\n    /** @hidden */\n    private _isColumnLayoutEnabled = false;\n\n    /** @hidden column number for different screen sizes */\n    private _xlColumnNumber: number;\n\n    /** @hidden */\n    private _lgColumnNumber: number;\n\n    /** @hidden */\n    private _mdColumnNumber: number;\n\n    /** @hidden */\n    private _sColumnNumber = 1;\n\n    /** @hidden */\n    private _columnLayout: ColumnLayout;\n\n    /** @hidden */\n    private readonly _responsiveBreakPointConfig: ResponsiveBreakPointConfig;\n\n    /** @hidden */\n    private _labelColumnLayout: ColumnLayout;\n\n    /** @hidden */\n    private _fieldColumnLayout: ColumnLayout;\n    /** @hidden */\n    private _gapColumnLayout: ColumnLayout;\n\n    /** @hidden */\n    private _formGroupErrorDirectives: FormError[] = [];\n\n    /** @hidden */\n    private _formGroupErrorDirectivesSubscription: Subscription;\n\n    /** @hidden */\n    private _errorDirectivesCdr: Subscription;\n\n    /** @hidden whether label and control are vertically aligned */\n    private get _isHorizontalAlignment(): boolean {\n        if (!this.inputMessageGroup || !this.labelCol) {\n            return false;\n        }\n        const inputMessageGroupY = this.inputMessageGroup.nativeElement.getBoundingClientRect().y;\n        const labelColRect = this.labelCol.nativeElement.getBoundingClientRect();\n        const labelColBottomY = labelColRect.y + labelColRect.height;\n        return labelColBottomY > inputMessageGroupY;\n    }\n\n    /**\n     * @hidden\n     * Sum of extra heights inside form control and formFieldExtras.\n     * Label will be shifted by this number in order to be properly aligned with the control\n     */\n    get _controlExtrasHeightPx(): number | null {\n        if (this.noLabelLayout || !this._isHorizontalAlignment) {\n            // proceed only if 1. there's a label; 2. control has vertical alignment\n            return null;\n        }\n        return (\n            (this.formFieldExtras?.nativeElement.offsetHeight ?? 0) + (this.control?.extraContentHeightPx ?? 0) || null\n        );\n    }\n\n    /** @hidden */\n    private _labelColumnLayout$: BehaviorSubject<ColumnLayout>;\n    /** @hidden */\n    private _fieldColumnLayout$: BehaviorSubject<ColumnLayout>;\n    /** @hidden */\n    private _gapColumnLayout$: BehaviorSubject<ColumnLayout>;\n    /** @hidden */\n    private _needsInlineHelpPlaceSubscription?: Subscription;\n\n    /** @hidden */\n    private _breakPointObserver: Observable<any>;\n\n    /** @hidden */\n    private _formFieldLayoutService: FormFieldLayoutService;\n    /** @hidden */\n    private readonly _defaultHintOptions: FieldHintOptions;\n\n    /** @hidden */\n    private readonly _destroyRef = inject(DestroyRef);\n\n    /** @hidden */\n    constructor(\n        private _cd: ChangeDetectorRef,\n        @Optional() formGroupContainer: FormGroupContainer,\n        @Optional() readonly formFieldGroup: FormFieldGroup,\n        @Optional()\n        @Inject(RESPONSIVE_BREAKPOINTS_CONFIG)\n        readonly _defaultResponsiveBreakPointConfig: ResponsiveBreakPointConfig,\n        readonly _responsiveBreakpointsService: ResponsiveBreakpointsService,\n        @Inject(FDP_FORM_FIELD_HINT_OPTIONS_DEFAULT) _providedHintOptions: FieldHintOptions,\n        @Inject(FDP_FORM_FIELD_HINT_LAYOUT_CONFIG) private _hintLayoutConfig: HintLayoutConfig,\n        @Self() _selfFormFieldLayoutService: FormFieldLayoutService,\n        @Optional() @SkipSelf() _parentFormFieldLayoutService: FormFieldLayoutService\n    ) {\n        this._defaultHintOptions = {\n            ...defaultFormFieldHintOptions,\n            ..._providedHintOptions\n        };\n        this._formFieldLayoutService = _parentFormFieldLayoutService || _selfFormFieldLayoutService;\n        this._labelColumnLayout$ = new BehaviorSubject(this._labelColumnLayout);\n        this._fieldColumnLayout$ = new BehaviorSubject(this._fieldColumnLayout);\n        this._gapColumnLayout$ = new BehaviorSubject(this._gapColumnLayout);\n        // formGroupContainer can be injected only if current form-field is located\n        // insight formGroupContainer content.\n        // If this is not the case the formGroupContainer\n        // will be undefined (known angular issue),\n        // in such case formGroupContainer can be pointed explicitly using\n        // component input annotation\n        this.formGroupContainer = formGroupContainer;\n        this._responsiveBreakPointConfig = _defaultResponsiveBreakPointConfig || new ResponsiveBreakPointConfig();\n        this._breakPointObserver = this._responsiveBreakpointsService.observeBreakpointByConfig(\n            this._responsiveBreakPointConfig\n        );\n\n        this.isHorizontal$ = toSignal(\n            combineLatest([\n                this._labelColumnLayout$.pipe(filter(Boolean), map(normalizeColumnLayout)),\n                this._fieldColumnLayout$.pipe(filter(Boolean), map(normalizeColumnLayout)),\n                this._gapColumnLayout$.pipe(map((g) => normalizeColumnLayout(g || { S: 0 })))\n            ]).pipe(\n                switchMap(([label, field, gap]) =>\n                    this._breakPointObserver.pipe(\n                        map(\n                            (breakpointName) =>\n                                label[breakpointName] + field[breakpointName] + gap[breakpointName] <= 12\n                        )\n                    )\n                )\n            )\n        );\n    }\n\n    /**\n     * Sets initial values for label, field and gap columns\n     */\n    setDefaultColumnLayout(): void {\n        // If layout already defined, no need to set default one.\n        if (this.labelColumnLayout) {\n            return;\n        }\n        this.listenToInlineHelpPlaceRequirementChanges(() => (this.labelColumnLayout ? this : this._groupHost));\n    }\n\n    /** @hidden */\n    listenToInlineHelpPlaceRequirementChanges(getSource: () => any): void {\n        if (this._needsInlineHelpPlaceSubscription) {\n            this._needsInlineHelpPlaceSubscription.unsubscribe();\n            this._needsInlineHelpPlaceSubscription = void 0;\n        }\n        const setLayouts = (source: any): void => {\n            this.labelColumnLayout = source.labelColumnLayout;\n            this.fieldColumnLayout = source.fieldColumnLayout;\n            this.gapColumnLayout = source.gapColumnLayout;\n        };\n        this._needsInlineHelpPlaceSubscription = this._formFieldLayoutService.needsInlineHelpPlace\n            .pipe(\n                map(() => this._formFieldLayoutService.getFixedLayouts(getSource())),\n                tap(setLayouts),\n                takeUntilDestroyed(this._destroyRef)\n            )\n            .subscribe();\n    }\n\n    /** @hidden */\n    ngOnInit(): void {\n        // provides capability to make a field disabled. useful in reactive form approach.\n        this.formControl =\n            (this.formGroupContainer?.formGroup?.get(this.id) as FormControl) ??\n            new FormControl({ value: null, disabled: this.disabled });\n\n        if (this.columns && (this.columns < 1 || this.columns > 12)) {\n            throw new Error('[columns] accepts numbers between 1 - 12');\n        }\n\n        if (this._isColumnLayoutEnabled) {\n            this._breakPointObserver\n                .pipe(takeUntilDestroyed(this._destroyRef))\n                .subscribe((breakPointName) => this._updateLayout(breakPointName));\n        }\n\n        this._addToFormGroup();\n\n        this.listenToInlineHelpPlaceRequirementChanges(() => this);\n    }\n\n    /** @hidden */\n    ngOnChanges(changes: SimpleChanges): void {\n        if (changes.hint) {\n            this._updateHintOptions();\n            this._formFieldLayoutService.setNeedsInlineHelp(\n                this,\n                (this.hintOptions.target === 'input' || this.hintOptions.target === 'auto') && !!this.hint\n            );\n        }\n        if (changes.hint && changes.hint.firstChange) {\n            this._breakPointObserver\n                .pipe(\n                    tap((sizeName) => {\n                        if (this.hintOptions.target === 'auto') {\n                            this.hintTarget = this._hintLayoutConfig.hintOnInputBreakpoints.includes(sizeName)\n                                ? 'input'\n                                : 'label';\n                        } else {\n                            this.hintTarget = this.hintOptions.target;\n                        }\n                    }),\n                    takeUntilDestroyed(this._destroyRef)\n                )\n                .subscribe();\n        }\n    }\n\n    /** @hidden */\n    ngAfterContentInit(): void {\n        this._cd.markForCheck();\n    }\n\n    /** @hidden */\n    ngAfterViewInit(): void {\n        this._assignErrorDirectives();\n\n        this._errorDirectiveQuery.changes.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n            this._assignErrorDirectives();\n        });\n        this._updateControlProperties();\n        this._validateErrorHandler();\n        this._listenToFormMessage();\n        this._cd.detectChanges();\n    }\n\n    /** @hidden */\n    ngOnDestroy(): void {\n        this._formFieldLayoutService.removeEntry(this);\n        this._removeFromFormGroup();\n        this._errorDirectivesCdr?.unsubscribe();\n        this._formGroupErrorDirectivesSubscription?.unsubscribe();\n    }\n\n    /** @hidden */\n    hasErrors(): boolean {\n        return this._editable && !!this.control?.controlInvalid;\n    }\n\n    /**\n     * Register underlying form control\n     * @param formFieldControl\n     */\n    registerFormFieldControl(formFieldControl: FormFieldControl): void {\n        if (this.control) {\n            throw Error('Form field can contain only one FormFieldControl');\n        }\n\n        this.control = formFieldControl as PlatformFormFieldControl;\n\n        formFieldControl.stateChanges.pipe(startWith(null), takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n            this._updateControlProperties();\n            // need to call explicitly detectChanges() instead of markForCheck before the\n            // modified validation state of the control passes over checked phase\n            this.onChange.emit('stateChanges');\n            this.groupErrors();\n            this._cd.detectChanges();\n        });\n\n        // Refresh UI when value changes\n        if (formFieldControl?.ngControl?.valueChanges) {\n            formFieldControl.ngControl.valueChanges.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n                this.onChange.emit('valueChanges');\n                this.groupErrors();\n                this._cd.markForCheck();\n            });\n        }\n\n        if (formFieldControl?.ngControl?.control) {\n            const control = formFieldControl.ngControl.control;\n\n            const hasRequiredValidator =\n                this.validators.includes(Validators.required) || this.validators.includes(Validators.requiredTrue);\n\n            if (this.required && !hasRequiredValidator) {\n                this.validators.push(Validators.required);\n            }\n\n            if (hasRequiredValidator) {\n                this.required = true;\n            }\n\n            // if form control is disabled, in reactive form approach\n            if (this.disabled) {\n                control.disable();\n            }\n\n            /**\n             * There is a case when a \"form-group\" initial state is VALID,\n             * and on the next loop a child form-filed extends it and make\n             * the form-group INVALID.\n             * In such case we get the error\n             * \"ExpressionChangedAfterItHasBeenCheckedError. Previous value is ng-valid, current value is ng-invalid\".\n             * To fix it we have to postpone adding form-field validators\n             *\n             */\n            Promise.resolve().then(() => {\n                control.setValidators(Validators.compose(this.validators));\n                control.updateValueAndValidity({ emitEvent: false });\n            });\n\n            this._addControlToFormGroup(formFieldControl?.ngControl?.control);\n        }\n\n        this._cd.markForCheck();\n    }\n\n    /**\n     * Unregister underlying form control\n     * @param formFieldControl\n     */\n    unregisterFormFieldControl(formFieldControl: FormFieldControl): void {\n        if (formFieldControl !== this.control) {\n            return;\n        }\n\n        this.control = null;\n\n        this._removeControlFromFormGroup();\n    }\n\n    /**\n     * Groups\n     */\n    groupErrors(): void {\n        // Queue task because firing it right away may cause error with showing empty message.\n        setTimeout(() => {\n            this.groupedErrors = [];\n            const errors = this.control?.ngControl?.errors;\n            if (!errors) {\n                return [];\n            }\n\n            this.errorDirectives.forEach((directive) => {\n                if (!errors[directive.error]) {\n                    return;\n                }\n\n                this.groupedErrors.push({\n                    directive,\n                    error: errors[directive.error]\n                });\n            });\n            this.errorsChange$.next();\n            this._cd.markForCheck();\n        });\n    }\n\n    /**\n     * Gets prioritized control state based on the error types it has.\n     */\n    getPriorityState(): FormStates {\n        if (this.groupedErrors.length === 0) {\n            return this.hasErrors() ? 'error' : 'default';\n        }\n\n        return getFormState(this.groupedErrors.map((error) => error.directive.type));\n    }\n\n    /**\n     * Sets error directives.\n     */\n    setErrorDirectives(directives: QueryList<FormError>): void {\n        this._formGroupErrorDirectivesSubscription?.unsubscribe();\n\n        if (!directives) {\n            return;\n        }\n\n        this._formGroupErrorDirectives = directives.toArray();\n\n        this._formGroupErrorDirectivesSubscription = directives.changes\n            .pipe(takeUntilDestroyed(this._destroyRef))\n            .subscribe(() => {\n                this._formGroupErrorDirectives = directives.toArray();\n            });\n    }\n\n    /**\n     * Returns whether content of the provided hint is a string.\n     * @hidden\n     */\n    isStringHint(hintOptions: HintContent): hintOptions is string {\n        return typeof hintOptions === 'string';\n    }\n\n    /** @hidden */\n    _getLabelledBy(): string {\n        let retVal = 'fdp-form-label-' + this.id;\n        if (this.hasErrors() && this.groupedErrors.length > 0) {\n            retVal = retVal + ' fdp-form-message-grouped-errors-' + this.id;\n        }\n        if (this.groupedErrors.length === 0 && this.hasErrors() && this.i18Strings) {\n            retVal = retVal + ' fdp-form-message-error-' + this.id;\n        }\n\n        return retVal;\n    }\n\n    /**\n     * @hidden\n     * Listens to form message component changes and passes its instance to the form control component.\n     */\n    private _listenToFormMessage(): void {\n        this._inputMessageGroupCmp.changes\n            .pipe(\n                startWith(null),\n                map(() => this._inputMessageGroupCmp.first),\n                takeUntilDestroyed(this._destroyRef)\n            )\n            .subscribe((component) => {\n                if (!this.control) {\n                    return;\n                }\n                this.control!.formMessage = component;\n            });\n    }\n\n    /** @hidden */\n    private _validateErrorHandler(): void {\n        if (\n            this._editable &&\n            this.control &&\n            this._hasValidators() &&\n            !this.i18Strings &&\n            this.errorDirectives.length === 0\n        ) {\n            throw new Error('Validation strings are required for the any provided validations.');\n        }\n    }\n\n    /** @hidden */\n    private _hasValidators(): boolean {\n        return this.validators && this.validators.length > 1;\n    }\n\n    /**\n     * @hidden\n     * Add FormField to FormGroup\n     */\n    private _addToFormGroup(): void {\n        if (!this.formGroupContainer || this.formFieldGroup) {\n            return;\n        }\n\n        this.formGroupContainer.addFormField(this);\n    }\n\n    /**\n     * @hidden\n     * Remove FormField from FormGroup\n     */\n    private _removeFromFormGroup(): void {\n        if (!this.formGroupContainer) {\n            return;\n        }\n        this.formGroupContainer.removeFormField(this);\n    }\n\n    /**\n     * @hidden\n     * Add FormControl from FormGroup\n     */\n    private _addControlToFormGroup(control: AbstractControl): void {\n        if (!this.formGroupContainer || !!this.formFieldGroup?.formName) {\n            return;\n        }\n        this.formGroupContainer.addFormControl(this.id, control);\n    }\n\n    /**\n     * @hidden\n     * Remove FormControl from FormGroup\n     */\n    private _removeControlFromFormGroup(): void {\n        if (!this.formGroupContainer) {\n            return;\n        }\n        this.formGroupContainer.removeFormControl(this.id);\n    }\n\n    /**\n     * @hidden\n     * Need to be able to set these properties on every level.\n     *  - Global FormGroup Level as well each field\n     *\n     *  Todo: use more elegant way to set these properties.\n     */\n    private _updateControlProperties(): void {\n        if (this.control && this._editable) {\n            this.control.id = this.id;\n            this.control.required = this.required;\n\n            if (this.placeholder) {\n                this.control.placeholder = this.placeholder;\n            }\n        }\n    }\n\n    /** @hidden */\n    private _setLayout(): void {\n        try {\n            const normalized = normalizeColumnLayout(this.columnLayout, 1);\n            this.columnLayout = normalized;\n            this._sColumnNumber = normalized['S'];\n            this._mdColumnNumber = normalized['M'];\n            this._lgColumnNumber = normalized['L'];\n            this._xlColumnNumber = normalized['XL'];\n        } catch {\n            this._isColumnLayoutEnabled = false;\n        }\n    }\n\n    /** @hidden */\n    private _updateLayout(currentBreakingPointName: string): void {\n        if (this._isColumnLayoutEnabled) {\n            switch (currentBreakingPointName) {\n                case 'S':\n                    this.column = this._sColumnNumber;\n                    break;\n                case 'M':\n                    this.column = this._mdColumnNumber;\n                    break;\n                case 'L':\n                    this.column = this._lgColumnNumber;\n                    break;\n                case 'XL':\n                    this.column = this._xlColumnNumber;\n                    break;\n                default:\n                    this.column = this._xlColumnNumber;\n            }\n        }\n\n        // emit column change, so form-group knows it and re-arranges the fields\n        this.onColumnChange.emit(true);\n    }\n\n    /** @hidden */\n    private _updateHintOptions(): void {\n        // placement is here set up because hintPlacement is deprecated\n        if (typeof this.hint === 'string' || this.hint instanceof TemplateRef) {\n            this.hintOptions = {\n                ...this._defaultHintOptions,\n                content: this.hint\n            };\n        } else if (typeof this.hint === 'object') {\n            this.hintOptions = {\n                ...this._defaultHintOptions,\n                ...this.hint\n            };\n        }\n    }\n\n    /** @hidden */\n    private _assignErrorDirectives(): void {\n        this._errorDirectivesCdr?.unsubscribe();\n        this._errorDirectives = this._errorDirectiveQuery.toArray();\n        this._errorDirectivesCdr = new Subscription();\n\n        this._errorDirectives.forEach((directive) => {\n            this._errorDirectivesCdr.add(\n                directive.detectChanges$.subscribe(() => {\n                    this.groupErrors();\n                    this._cd.detectChanges();\n                })\n            );\n        });\n    }\n}\n","<ng-template #renderer>\n    <div [horizontal]=\"true\" fd-form-item class=\"fd-row\">\n        @if (!noLabelLayout) {\n            <div\n                class=\"fd-col\"\n                #labelCol\n                [class]=\"_labelColumnLayoutClass\"\n                [style.margin-bottom.px]=\"_controlExtrasHeightPx\"\n            >\n                <ng-template [ngTemplateOutlet]=\"labelTemplate\"></ng-template>\n            </div>\n        }\n        <ng-template [ngTemplateOutlet]=\"withFormMessage\"></ng-template>\n        <ng-template [ngTemplateOutlet]=\"gapTemplate\"></ng-template>\n    </div>\n    <span aria-hidden=\"true\" [style.display]=\"'none'\" [id]=\"'fdp-form-hint-' + id\">\n        @if (isStringHint(hintOptions.content)) {\n            {{ hintOptions.content }}\n        } @else {\n            <ng-template [ngTemplateOutlet]=\"$any(hintOptions.content)\"></ng-template>\n        }\n    </span>\n</ng-template>\n<ng-template #withFormMessage>\n    <fdp-input-message-group class=\"fd-col\" [class]=\"_fieldColumnLayoutClass\" [attr.aria-labelledby]=\"_getLabelledBy()\">\n        <ng-template #triggerItem>\n            <ng-content></ng-content>\n        </ng-template>\n\n        @if (hasErrors() && groupedErrors.length > 0) {\n            @for (error of groupedErrors; track error) {\n                <fd-form-message [type]=\"error.directive.type\" [attr.id]=\"'fdp-form-message-grouped-errors-' + id\">\n                    <div>\n                        @if (error.directive._headingTemplateRef) {\n                            <ng-template\n                                [ngTemplateOutlet]=\"error.directive._headingTemplateRef\"\n                                [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n                            >\n                            </ng-template>\n                        }\n                        @if (error.directive._headingTemplateRef && error.directive._descriptionTemplateRef) {\n                            <br />\n                        }\n                        @if (error.directive._descriptionTemplateRef) {\n                            <ng-template\n                                [ngTemplateOutlet]=\"error.directive._descriptionTemplateRef\"\n                                [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n                            >\n                            </ng-template>\n                        }\n                    </div>\n                </fd-form-message>\n            }\n        }\n\n        @if (groupedErrors.length === 0 && hasErrors() && i18Strings) {\n            <fd-form-message type=\"error\" [attr.id]=\"'fdp-form-message-error-' + id\">\n                <ng-template\n                    [ngTemplateOutlet]=\"i18Strings\"\n                    [ngTemplateOutletContext]=\"{ $implicit: control?.ngControl?.errors }\"\n                >\n                </ng-template>\n            </fd-form-message>\n        }\n    </fdp-input-message-group>\n</ng-template>\n\n<ng-template #innerErrorRenderers>\n    @if (hasErrors() && groupedErrors.length > 0) {\n        @for (error of groupedErrors; track error) {\n            <div>\n                @if (error.directive._headingTemplateRef) {\n                    <ng-template\n                        [ngTemplateOutlet]=\"error.directive._headingTemplateRef\"\n                        [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n                    >\n                    </ng-template>\n                }\n                @if (error.directive._headingTemplateRef && error.directive._descriptionTemplateRef) {\n                    <br />\n                }\n                @if (error.directive._descriptionTemplateRef) {\n                    <ng-template\n                        [ngTemplateOutlet]=\"error.directive._descriptionTemplateRef\"\n                        [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n                    >\n                    </ng-template>\n                }\n            </div>\n        }\n    }\n\n    @if (groupedErrors.length === 0 && hasErrors() && i18Strings) {\n        <ng-template\n            [ngTemplateOutlet]=\"i18Strings\"\n            [ngTemplateOutletContext]=\"{ $implicit: control?.ngControl?.errors }\"\n        >\n        </ng-template>\n    }\n</ng-template>\n\n<ng-template #labelTemplate>\n    @if (hintTarget === 'label') {\n        <label\n            [id]=\"'fdp-form-label-' + id\"\n            [required]=\"editable && required\"\n            fd-form-label\n            [inlineHelpContent]=\"hintOptions.content\"\n            [inlineHelpBodyPlacement]=\"hintOptions.placement || 'top'\"\n            [inlineHelpPlacement]=\"hintOptions.position || 'after'\"\n            [inlineHelpGlyph]=\"hintOptions.glyph || ''\"\n            [inlineHelpTriggers]=\"hintOptions.trigger || []\"\n            [alignLabelEnd]=\"!!isHorizontal$()\"\n            [colon]=\"colon\"\n        >\n            <span [id]=\"'fdp-form-label-content-' + id\">{{ label }}</span>\n        </label>\n    } @else {\n        <label\n            [id]=\"'fdp-form-label-' + id\"\n            [required]=\"editable && required\"\n            fd-form-label\n            [colon]=\"colon\"\n            [alignLabelEnd]=\"!!isHorizontal$()\"\n        >\n            <span [id]=\"'fdp-form-label-content-' + id\">{{ label }}</span>\n        </label>\n    }\n</ng-template>\n\n<ng-template #gapTemplate>\n    @if (hintTarget === 'input' && hintOptions.content) {\n        <div class=\"fd-col fd-form-field-inline-help-container\" [class]=\"_gapColumnLayoutClass\">\n            <span fd-link [undecorated]=\"true\">\n                <fd-icon\n                    [fd-inline-help]=\"hintOptions.content\"\n                    [glyph]=\"hintOptions.glyph\"\n                    [placement]=\"hintOptions.placement ?? null\"\n                    [triggers]=\"hintOptions.trigger ?? []\"\n                    tabindex=\"0\"\n                >\n                </fd-icon>\n            </span>\n        </div>\n    } @else {\n        <div class=\"fd-col\" [class]=\"_gapColumnLayoutClass\"></div>\n    }\n</ng-template>\n","import { AbstractControlOptions, AsyncValidatorFn, FormControl, FormGroup, ValidatorFn } from '@angular/forms';\n\nimport { DynamicAbstractControlOptions } from './interfaces/dynamic-abstract-control';\nimport { DynamicFormFieldGroupMap, PreparedDynamicFormFieldItem } from './interfaces/dynamic-form-item';\n\nexport type DynamicFormGroupControl = DynamicFormControl | DynamicFormControlGroup;\n\nexport interface DynamicFormGroupControls {\n    [key: string]: DynamicFormGroupControl;\n}\n\nexport class DynamicFormControlGroup extends FormGroup {\n    /** @hidden */\n    public formItem: DynamicFormFieldGroupMap;\n    /** @hidden */\n    public type = 'group';\n    /** @hidden */\n    declare public controls: DynamicFormGroupControls;\n\n    /** @hidden */\n    constructor(\n        formItem: DynamicFormFieldGroupMap,\n        controls: DynamicFormGroupControls,\n        validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null,\n        asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null\n    ) {\n        super(controls, validatorOrOpts, asyncValidator);\n        this.formItem = formItem;\n    }\n}\n\nexport class DynamicFormControl extends FormControl {\n    /** @hidden */\n    public formItem: PreparedDynamicFormFieldItem;\n    /** @hidden */\n    public type = 'field';\n\n    /**\n     * @description Creates a new `DynamicFormControl` instance.\n     *\n     * @param formState Initializes the control with an initial value,\n     * or an object that defines the initial value and disabled state.\n     *\n     * @param validatorOrOpts A synchronous validator function, or an array of\n     * such functions, or an `AbstractControlOptions` object that contains validation functions\n     * and a validation trigger.\n     *\n     * @param asyncValidator A single async validator or array of async validator functions\n     *\n     * @param formItem `DynamicFormItem` object\n     *\n     */\n    constructor(formState: any, validatorOrOpts: DynamicAbstractControlOptions) {\n        super(formState, validatorOrOpts);\n        this.formItem = validatorOrOpts.dynamicFormItem;\n    }\n}\n","export const DEFAULT_VALIDATION_ERRORS = {\n    required: 'This field is required',\n    validator: 'This field is invalid'\n};\n","import {\n    AfterViewInit,\n    Attribute,\n    ChangeDetectionStrategy,\n    Component,\n    EventEmitter,\n    forwardRef,\n    Input,\n    Output,\n    ViewChild,\n    ViewEncapsulation\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FD_FORM_FIELD_CONTROL } from '@fundamental-ngx/cdk/forms';\n\nimport {\n    CheckboxComponent as CoreCheckboxComponent,\n    CheckboxComponent as FdCheckboxComponent,\n    FdCheckboxValues\n} from '@fundamental-ngx/core/checkbox';\nimport { FormItemComponent } from '@fundamental-ngx/core/form';\nimport { BaseInput } from '@fundamental-ngx/platform/shared';\n\n/** Change event object emitted by Platform Checkbox. */\nexport class PlatformCheckboxChange {\n    /** The source Checkbox of the event. */\n    source: CheckboxComponent;\n    /**\n     * The new `checked` value of the checkbox.\n     * possible value: true/false and array of checkbox values.\n     */\n    checked: any;\n}\n\nlet nextUniqueId = 0;\n\n@Component({\n    selector: 'fdp-checkbox',\n    templateUrl: './checkbox.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    providers: [{ provide: FD_FORM_FIELD_CONTROL, useExisting: forwardRef(() => CheckboxComponent), multi: true }],\n    imports: [FormItemComponent, CoreCheckboxComponent, FormsModule]\n})\nexport class CheckboxComponent extends BaseInput implements AfterViewInit {\n    /**\n     * Checkbox tooltip\n     */\n    @Input()\n    title: string;\n\n    /** Sets label for checkbox. */\n    @Input()\n    label: string;\n\n    /** true when checkbox has indeterminate state */\n    @Input()\n    tristate = false;\n\n    // this is undesired to have \"checked\" input instead of \"value\"\n    // but it was done this way initially and we have to keep this in order to not break anything\n    /**\n     * Checked state of the checkbox control.\n     */\n    // eslint-disable-next-line @angular-eslint/no-input-rename\n    @Input('checked')\n    set value(selectValue: any) {\n        this.setValue(selectValue);\n    }\n    get value(): any {\n        return this.getValue();\n    }\n\n    /** when true indeterminate state can be selected */\n    @Input()\n    tristateSelectable = false;\n\n    /** Values returned by control. */\n    @Input()\n    values: FdCheckboxValues;\n\n    /** Whether checkbox should be rendered standalone (without any text). */\n    @Input()\n    standalone = false;\n\n    /** Whether the checkbox should be rendered in display-only mode. */\n    @Input()\n    displayOnly = false;\n\n    /**\n     * Emitting checked event for non-form checkbox\n     */\n    @Output()\n    readonly checkedChange = new EventEmitter<any>();\n\n    /**\n     * @hidden\n     * is needed for the checkbox group to access component values\n     */\n    @ViewChild(FdCheckboxComponent)\n    coreCheckbox: FdCheckboxComponent;\n\n    /** @hidden */\n    constructor(@Attribute('tabIndexValue') public tabIndexValue: number = 0) {\n        super();\n        // necessary to fulfill baseInput check.\n        // case: fdp-checkbox passed in declarative fdp-checkbox-group without id and name.\n        this.name = `fdp-checkbox-${nextUniqueId++}`;\n        this.tabIndexValue = tabIndexValue;\n    }\n    /** update controller on checkbox state change */\n    public onModelChange(value: any): void {\n        this.value = value;\n        this._emitChangeEvent();\n        this.stateChanges.next('checkbox: onModelChange');\n    }\n\n    /**\n     * Method to emit change event\n     */\n    private _emitChangeEvent(): void {\n        this.checkedChange.emit(this.value);\n\n        const event = new PlatformCheckboxChange();\n        event.source = this;\n        event.checked = this.value;\n    }\n}\n","<div fd-form-item>\n    <fd-checkbox\n        [inputId]=\"id\"\n        [name]=\"name\"\n        [disabled]=\"disabled\"\n        [readonly]=\"readonly\"\n        [label]=\"label\"\n        [tristate]=\"tristate\"\n        [values]=\"values\"\n        [tristateSelectable]=\"tristateSelectable\"\n        [state]=\"state\"\n        [title]=\"title\"\n        [required]=\"required\"\n        [ariaLabel]=\"ariaLabel || null\"\n        [ariaLabelledBy]=\"ariaLabelledBy\"\n        [ariaDescribedBy]=\"ariaDescribedBy\"\n        [ngModel]=\"value\"\n        [standalone]=\"standalone\"\n        [displayOnly]=\"displayOnly\"\n        (ngModelChange)=\"onModelChange($event)\"\n        (focusChange)=\"_onFocusChanged($event)\"\n    >\n        <ng-content></ng-content>\n    </fd-checkbox>\n</div>\n","import { SelectionModel } from '@angular/cdk/collections';\nimport {\n    ChangeDetectionStrategy,\n    Component,\n    ContentChildren,\n    EventEmitter,\n    forwardRef,\n    Input,\n    Output,\n    QueryList,\n    ViewChildren,\n    ViewEncapsulation\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FD_FORM_FIELD_CONTROL } from '@fundamental-ngx/cdk/forms';\nimport { RangeSelector } from '@fundamental-ngx/cdk/utils';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport { FormGroupComponent } from '@fundamental-ngx/core/form';\nimport { coerceArraySafe, InLineLayoutCollectionBaseInput, SelectItem } from '@fundamental-ngx/platform/shared';\nimport { CheckboxComponent } from '../checkbox/checkbox.component';\n\n/**\n * Checkbox group implementation based on the\n * https://github.com/SAP/fundamental-ngx/wiki/Platform:-CheckboxGroup-Technical-Design\n * documents.\n */\n@Component({\n    selector: 'fdp-checkbox-group',\n    templateUrl: './checkbox-group.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    providers: [{ provide: FD_FORM_FIELD_CONTROL, useExisting: forwardRef(() => CheckboxGroupComponent), multi: true }],\n    imports: [FormGroupComponent, NgTemplateOutlet, CheckboxComponent, FormsModule]\n})\nexport class CheckboxGroupComponent extends InLineLayoutCollectionBaseInput {\n    /**\n     * value for selected checkboxes.\n     */\n    @Input()\n    set value(selectedValue: any[]) {\n        this.setValue(selectedValue);\n        this._updateSelectionModelByValue();\n    }\n    get value(): any[] {\n        return this.getValue();\n    }\n\n    /**\n     * To Display multiple checkboxes in a line\n     */\n    @Input()\n    set isInline(inline: boolean) {\n        this._inlineCurrentValue$.next(inline);\n    }\n    get isInline(): boolean {\n        return this._inlineCurrentValue$.value;\n    }\n\n    /** Children checkboxes passed as content */\n    @ContentChildren(CheckboxComponent)\n    contentCheckboxes: QueryList<CheckboxComponent>;\n\n    /** Children checkboxes created from passed list values. */\n    @ViewChildren(CheckboxComponent)\n    viewCheckboxes: QueryList<CheckboxComponent>;\n\n    /** Emits checked change event */\n    @Output()\n    readonly valueChange: EventEmitter<string[]> = new EventEmitter<string[]>();\n\n    /** @hidden */\n    readonly _selectionModel = new SelectionModel(true);\n\n    /** @hidden */\n    private readonly _rangeSelector = new RangeSelector();\n\n    /**\n     * @hidden\n     * @param selectionState actual value of the checkbox\n     * @param checkboxTrueValue thuthy value to compare the \"selectionState\" with\n     */\n    onModelChanged(selectionState: any, checkboxTrueValue: any): void {\n        const isSelected = selectionState === checkboxTrueValue;\n        if (isSelected) {\n            this._selectionModel.select(checkboxTrueValue);\n        } else {\n            this._selectionModel.deselect(checkboxTrueValue);\n        }\n        this._setValueBySelectionModel();\n        this.onTouched();\n        this.valueChange.emit(this.value);\n    }\n\n    /** @hidden */\n    onCheckboxClick(index: number, source: 'contentChildren' | 'list', event?: MouseEvent): void {\n        // this handler will be invoked after \"valueChange\"\n        const queryList = source === 'list' ? this.viewCheckboxes : this.contentCheckboxes;\n        const target = queryList.get(index);\n\n        const isChecked = this._selectionModel.isSelected(target?.values.trueValue);\n        this._rangeSelector.onRangeElementToggled(index, event);\n\n        if (!this._rangeSelector.lastRangeSelectionState?.isRangeSelection) {\n            // no need to proceed, if it's not a range selection - current checkbox is already updated\n            return;\n        }\n\n        this._rangeSelector.applyValueToEachInRange((idx) => {\n            const checkbox = queryList.get(idx);\n            if (checkbox?.disabled) {\n                return;\n            }\n            const checkboxValue = checkbox?.values.trueValue;\n            if (isChecked) {\n                this._selectionModel.select(checkboxValue);\n            } else {\n                this._selectionModel.deselect(checkboxValue);\n            }\n        });\n        this._setValueBySelectionModel();\n        this.valueChange.emit(this.value);\n    }\n\n    /** @hidden */\n    writeValue(selectedValue: any): void {\n        super.writeValue(coerceArraySafe(selectedValue));\n        this._updateSelectionModelByValue();\n    }\n\n    /**\n     * access display value for objects, acts as checkbox label.\n     */\n    getDisplayValue(item: any): string {\n        return this.displayValue(item);\n    }\n\n    /**\n     * access lookup value for objects, acts as checkbox value.\n     */\n    getLookupValue(item: any): string {\n        return this.lookupValue(item);\n    }\n\n    /** @hidden */\n    getListItemDisabledValue(item: CheckboxGroupComponent['list'][number]): boolean {\n        return this.disabled || !!(<SelectItem>item)?.disabled;\n    }\n\n    /** @inheritdoc */\n    protected setValue(value: any, emitOnChange = true): void {\n        super.setValue(coerceArraySafe(value), emitOnChange);\n    }\n\n    /** @hidden */\n    private _setValueBySelectionModel(): void {\n        super.setValue(this._selectionModel.selected);\n        this.markForCheck();\n    }\n\n    /** @hidden */\n    private _updateSelectionModelByValue(): void {\n        this._selectionModel.clear();\n        this.value.forEach((v) => this._selectionModel.select(v));\n        this.markForCheck();\n    }\n}\n","<fd-form-group\n    [isInline]=\"isInline\"\n    role=\"group\"\n    [attr.aria-label]=\"ariaLabel\"\n    [attr.aria-labelledby]=\"ariaLabelledBy\"\n    [attr.aria-required]=\"required\"\n>\n    @if (!list) {\n        @for (checkbox of contentCheckboxes; track checkbox; let i = $index) {\n            <ng-template\n                [ngTemplateOutlet]=\"checkboxtmpt\"\n                [ngTemplateOutletContext]=\"{\n                    id: id + i,\n                    idx: i,\n                    source: 'contentChildren',\n                    name: name,\n                    checkboxValue: checkbox.coreCheckbox?.values?.trueValue,\n                    labeltext: checkbox.label,\n                    disabled: disabled || checkbox.disabled,\n                    ariaLabel: checkbox.ariaLabel,\n                    ariaLabelledBy: checkbox.ariaLabelledBy,\n                    ariaDescribedBy: checkbox.ariaDescribedBy,\n                    title: checkbox.title\n                }\"\n            >\n            </ng-template>\n        }\n    } @else {\n        <ng-template [ngTemplateOutlet]=\"listvalues\"></ng-template>\n    }\n</fd-form-group>\n<ng-template #listvalues>\n    @for (item of list; track item; let i = $index) {\n        <ng-template\n            [ngTemplateOutlet]=\"checkboxtmpt\"\n            [ngTemplateOutletContext]=\"{\n                id: id + i,\n                idx: i,\n                source: 'list',\n                name: name,\n                checkboxValue: getLookupValue(item),\n                labeltext: getDisplayValue(item),\n                disabled: getListItemDisabledValue(item)\n            }\"\n        >\n        </ng-template>\n    }\n</ng-template>\n<ng-template\n    #checkboxtmpt\n    let-id=\"id\"\n    let-idx=\"idx\"\n    let-source=\"source\"\n    let-name=\"name\"\n    let-checkboxValue=\"checkboxValue\"\n    let-labeltext=\"labeltext\"\n    let-checkboxDisabled=\"disabled\"\n    let-ariaLabel=\"ariaLabel\"\n    let-ariaLabelledBy=\"ariaLabelledBy\"\n    let-ariaDescribedBy=\"ariaDescribedBy\"\n    let-title=\"title\"\n>\n    <fdp-checkbox\n        [id]=\"id\"\n        [name]=\"name\"\n        [values]=\"{ trueValue: checkboxValue }\"\n        [label]=\"labeltext\"\n        [ariaLabel]=\"ariaLabel\"\n        [ariaLabelledBy]=\"ariaLabelledBy\"\n        [ariaDescribedBy]=\"ariaDescribedBy\"\n        [title]=\"title\"\n        [disabled]=\"checkboxDisabled\"\n        [state]=\"state\"\n        [ngModel]=\"_selectionModel.isSelected(checkboxValue) ? checkboxValue : false\"\n        (ngModelChange)=\"onModelChanged($event, checkboxValue)\"\n        (click)=\"onCheckboxClick(idx, source, $event)\"\n    >\n    </fdp-checkbox>\n</ng-template>\n","import { NgModule } from '@angular/core';\n\nimport { CheckboxGroupComponent } from './checkbox-group.component';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n    imports: [CheckboxGroupComponent],\n    exports: [CheckboxGroupComponent]\n})\nexport class PlatformCheckboxGroupModule {}\n","import { forwardRef, InjectionToken, Provider, StaticProvider } from '@angular/core';\nimport { Validators } from '@angular/forms';\nimport { FD_FORM_FIELD } from '@fundamental-ngx/cdk/forms';\n\nimport { FORM_GROUP_CHILD_FIELD_TOKEN } from '../../form-group/constants';\nimport { FormFieldComponent } from '../../form-group/form-field/form-field.component';\nimport { DynamicFormFieldItem } from '../interfaces/dynamic-form-item';\nimport { FormGeneratorConfig } from '../interfaces/form-generator-module-config';\n\nexport const dynamicFormFieldProvider: StaticProvider = {\n    provide: FD_FORM_FIELD,\n    useExisting: forwardRef(() => FormFieldComponent)\n};\n\nexport const dynamicFormGroupChildProvider: StaticProvider = {\n    provide: FORM_GROUP_CHILD_FIELD_TOKEN,\n    useExisting: forwardRef(() => FormFieldComponent)\n};\n\nexport const FORM_GENERATOR_ITEM_CONFIG = new InjectionToken<DynamicFormFieldItem>('FormGeneratorItemConfig');\n\nexport const FORM_GENERATOR_CONFIG = new InjectionToken<FormGeneratorConfig>('FormGeneratorConfig');\n\nexport const defaultFormGeneratorConfig: FormGeneratorConfig = {\n    controlNameSeparator: '|',\n    ungroupedControlsName: 'ungrouped'\n};\n\nexport const defaultFormGeneratorConfigProvider: Provider = {\n    provide: FORM_GENERATOR_CONFIG,\n    useValue: defaultFormGeneratorConfig\n};\n\nexport const defaultFormGeneratorItemConfig: Partial<DynamicFormFieldItem> = {\n    useMessageAsPlaceholder: true,\n    required: false,\n    validators: [Validators.nullValidator]\n};\n\nexport const defaultFormGeneratorItemConfigProvider: Provider = {\n    provide: FORM_GENERATOR_ITEM_CONFIG,\n    useValue: defaultFormGeneratorItemConfig\n};\n","import { Directive, Input } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\n\nimport { PlatformFormField, SelectItem } from '@fundamental-ngx/platform/shared';\nimport { BaseDynamicFormFieldItem, PreparedDynamicFormFieldItem } from './interfaces/dynamic-form-item';\nimport { dynamicFormFieldProvider, dynamicFormGroupChildProvider } from './providers/providers';\n\nexport interface BaseDynamicFormGeneratorControlInterface {\n    formItem: PreparedDynamicFormFieldItem;\n    name: string;\n    id: string;\n    form: FormGroup;\n    formField: PlatformFormField;\n}\n\n/**\n * Abstract class that used as a base for the Dynamic Form Generator components.\n */\n@Directive({\n    providers: [dynamicFormFieldProvider, dynamicFormGroupChildProvider]\n})\nexport abstract class BaseDynamicFormGeneratorControl<T extends BaseDynamicFormFieldItem = BaseDynamicFormFieldItem>\n    implements BaseDynamicFormGeneratorControlInterface\n{\n    /**\n     * @description @see DynamicFormItem.\n     */\n    @Input() formItem: PreparedDynamicFormFieldItem<T>;\n\n    /**\n     * @description Id of the control.\n     */\n    @Input() id: string;\n\n    /**\n     * @description Represents form control name.\n     */\n    @Input() name: string;\n\n    /**\n     * @description Reference to the @see FormGroup class.\n     */\n    @Input() form: FormGroup;\n\n    /**\n     * @description Reference to the @see FormFieldComponent.\n     */\n    @Input() formField: PlatformFormField;\n\n    /** @description Inner form group name */\n    @Input() formGroupName: string;\n\n    /** @description Returns form item choices. */\n    get choices(): SelectItem[] {\n        return this.formItem.choices ?? [];\n    }\n\n    /** @description Returns form item placeholder. */\n    get placeholder(): string {\n        if (!this.formItem) {\n            return '';\n        }\n        if (this.formItem?.placeholder) {\n            return this.formItem?.placeholder;\n        }\n        return (this.formItem?.useMessageAsPlaceholder && this.formItem?.message) || '';\n    }\n\n    /** @hidden */\n    get readonly(): boolean {\n        return this.formItem?.readonly ?? false;\n    }\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { PlatformCheckboxGroupModule } from '../../../checkbox-group/checkbox-group.module';\nimport { BaseDynamicFormGeneratorControl } from '../../base-dynamic-form-generator-control';\nimport { dynamicFormFieldProvider, dynamicFormGroupChildProvider } from '../../providers/providers';\n\n@Component({\n    selector: 'fdp-dynamic-form-generator-checkbox',\n    templateUrl: './dynamic-form-generator-checkbox.component.html',\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    viewProviders: [dynamicFormFieldProvider, dynamicFormGroupChildProvider],\n    imports: [FormsModule, ReactiveFormsModule, PlatformCheckboxGroupModule]\n})\nexport class DynamicFormGeneratorCheckboxComponent extends BaseDynamicFormGeneratorControl {}\n","<ng-container [formGroup]=\"form\">\n    <ng-container [formGroupName]=\"formGroupName\">\n        <fdp-checkbox-group\n            [id]=\"id\"\n            [isInline]=\"formItem.guiOptions?.inline || false\"\n            [inlineLayout]=\"formItem.guiOptions?.inlineLayout\"\n            [name]=\"name\"\n            [list]=\"choices\"\n            [formControlName]=\"name\"\n        ></fdp-checkbox-group>\n    </ng-container>\n</ng-container>\n","import {\n    booleanAttribute,\n    ChangeDetectionStrategy,\n    Component,\n    ElementRef,\n    EventEmitter,\n    inject,\n    input,\n    Input,\n    Output,\n    ViewChild,\n    ViewEncapsulation\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FD_FORM_FIELD_CONTROL, FormStates } from '@fundamental-ngx/cdk/forms';\n\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport {\n    CalendarType,\n    CalendarYearGrid,\n    DateRange,\n    DaysOfWeek,\n    FdCalendarView,\n    FdCalendarViewEnum\n} from '@fundamental-ngx/core/calendar';\nimport { DatePickerComponent, DatePickerComponent as FdDatePickerComponent } from '@fundamental-ngx/core/date-picker';\nimport { DATE_TIME_FORMATS, DatetimeAdapter, DateTimeFormats } from '@fundamental-ngx/core/datetime';\nimport { MobileModeConfig } from '@fundamental-ngx/core/mobile-mode';\nimport { Placement, SpecialDayRule } from '@fundamental-ngx/core/shared';\nimport { BaseInput } from '@fundamental-ngx/platform/shared';\n\n/**\n * The Platform date picker component is a wrapper around fd-date-picker using platform form.\n * It is able to provide form field functionalities as well along with fd-date-picker functions.\n *\n * <fdp-form-group #ffg [formGroup]=\"datePickerForm\">\n *      <fdp-form-field #ffl1 id=\"birthday\">\n *          <fdp-date-picker name=\"birthday\" type=\"single\" [formControl]=\"ffl1.formControl\"></fdp-date-picker>\n *      </fdp-form-field>\n * </fdp-form-group>\n *\n */\n\n@Component({\n    selector: 'fdp-date-picker',\n    templateUrl: './date-picker.component.html',\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [{ provide: FD_FORM_FIELD_CONTROL, useExisting: PlatformDatePickerComponent, multi: true }],\n    host: {\n        '(blur)': 'onTouched()'\n    },\n    imports: [DatePickerComponent, FormsModule]\n})\nexport class PlatformDatePickerComponent<D> extends BaseInput {\n    /**\n     * date-picker value set as controller value\n     */\n    @Input()\n    set value(value: D | Array<D> | DateRange<D> | Array<DateRange<D>>) {\n        super.setValue(value);\n    }\n    get value(): DateRange<D> | D {\n        return super.getValue();\n    }\n\n    /** below code taken from core/date-picker */\n    /** The type of calendar, 'single' for single date selection or 'range' for a range of dates. */\n    @Input()\n    type: CalendarType = 'single';\n\n    /** The currently selected date model in single mode. */\n    @Input()\n    selectedDate: Nullable<D>;\n\n    /** The currently selected date model in multiple mode. */\n    @Input()\n    selectedMultipleDates: Array<D> = [];\n\n    /** The currently selected date model with start and end in range mode. */\n    @Input()\n    selectedRangeDate: DateRange<D>;\n\n    /** The currently selected date model with multiple ranges. */\n    @Input()\n    selectedMultipleDateRanges: Array<DateRange<D>> = [];\n\n    /** The day of the week the calendar should start on. 1 represents Sunday, 2 is Monday, 3 is Tuesday, and so on. */\n    @Input()\n    startingDayOfWeek: DaysOfWeek;\n\n    /**\n     * Whether user wants to mark day cells on hover.\n     * Works only on range mode, when start date is selected on Day View.\n     */\n    @Input()\n    rangeHoverEffect = false;\n\n    /** Whether to validate the date picker input. */\n    @Input()\n    useValidation = true;\n\n    /** Enables Today-Selection-Button if true */\n    @Input()\n    showTodayButton = false;\n\n    /** Label for Today-Selection-Button */\n    @Input()\n    todayButtonLabel = 'Today';\n\n    /** Whether a null input is considered valid. */\n    @Input()\n    allowNull = true;\n\n    /** Actually shown active view one of 'day' | 'month' | 'year' in calendar component*/\n    @Input()\n    activeView: FdCalendarView = FdCalendarViewEnum.Day;\n\n    /**\n     *  The placement of the popover. It can be one of: top, top-start, top-end, bottom,\n     *  bottom-start, bottom-end, right, right-start, right-end, left, left-start, left-end.\n     */\n    @Input()\n    placement: Placement = 'bottom-start';\n\n    /** The element to which the popover should be appended. */\n    @Input()\n    appendTo: ElementRef;\n\n    /** Defines if date picker should be closed after date choose */\n    @Input()\n    closeOnDateChoose = true;\n\n    /**\n     *  The state of the form control - applies css classes.\n     *  Can be `success`, `error`, `warning`, `information` or blank for default.\n     */\n    @Input()\n    set state(state: FormStates) {\n        super.state = state;\n    }\n    get state(): FormStates {\n        if (this.fdDatePickerComponent?._isInvalidDateInput || !this._datePickerValid) {\n            return 'error';\n        }\n\n        return super.state;\n    }\n\n    /**\n     * Whether AddOn Button should be focusable\n     * @default true\n     */\n    @Input()\n    buttonFocusable = true;\n\n    /**\n     * Special days mark, it can be used by passing array of object with\n     * Special day number, list 1-20 [class:`fd-calendar__item--legend-{{number}}`] is available there:\n     * https://sap.github.io/fundamental-styles/components/calendar.html calendar special days section\n     * Rule accepts method with FdDate object as a parameter. ex:\n     * `rule: (fdDate: FdDate) => fdDate.getDay() === 1`, which will mark all sundays as special day.\n     */\n    @Input()\n    specialDaysRules: SpecialDayRule<D>[] = [];\n\n    /**\n     * Object to customize year grid,\n     * Row, Columns and method to display year can be modified\n     */\n    @Input()\n    yearGrid: CalendarYearGrid = {\n        rows: 4,\n        cols: 5,\n        yearMapping: (num: number) => num.toString()\n    };\n\n    /**\n     * Object to customize aggregated year grid,\n     * Row, Columns and method to display year can be modified\n     */\n    @Input()\n    aggregatedYearGrid: CalendarYearGrid = {\n        rows: 4,\n        cols: 3,\n        yearMapping: (num: number) => num.toString()\n    };\n\n    /**\n     * Whether user wants to mark sunday/saturday with `fd-calendar__item--weekend` class\n     */\n    @Input()\n    markWeekends = true;\n\n    /**\n     * Whether user wants to show week numbers next to days\n     */\n    @Input()\n    showWeekNumbers = true;\n\n    /**\n     * Whether the user wants to select multiple days or multiple range dates.\n     * If `displayWeekNumbers` is true, the user can click on the week number to mark the related row.\n     * The user can click on week days to mark the related column.\n     * Note: Clickable selection for week row or column does not work for range selections.\n     */\n    @Input()\n    allowMultipleSelection = false;\n\n    /** Whether the date picker is open. Can be used through two-way binding. */\n    @Input()\n    isOpen = false;\n\n    /** Should date picker be inlined. */\n    @Input()\n    inline = true;\n\n    /**\n     * Whether to recalculate value from the input as user types or on blur.\n     * By default, updates the value as user types.\n     * @default false\n     */\n    @Input()\n    processInputOnBlur = false;\n\n    /**\n     * Whether to prevent page scrolling when focusing date picker input field after calendar has been closed.\n     */\n    @Input()\n    preventScrollOnFocus = false;\n\n    /** Whether date picker should rendered in mobile mode. */\n    @Input()\n    mobile = false;\n\n    /** Mobile mode configuration. */\n    @Input()\n    mobileConfig: MobileModeConfig;\n\n    /** Whether calendar is used inside mobile in landscape mode, it also adds close button on right side */\n    @Input()\n    mobileLandscape = false;\n\n    /** Whether calendar is used inside mobile in portrait mode */\n    @Input()\n    mobilePortrait = false;\n\n    /** Event emitted when the state of the isOpen property changes. */\n    @Output()\n    readonly isOpenChange = new EventEmitter<boolean>();\n\n    /** Event thrown every time selected date in single mode is changed */\n    @Output()\n    readonly selectedDateChange: EventEmitter<Nullable<D>> = new EventEmitter<Nullable<D>>();\n\n    /** Event thrown every time the selected dates in multiple mode are changed. */\n    @Output()\n    readonly selectedMultipleDatesChange: EventEmitter<Array<D>> = new EventEmitter<Array<D>>();\n\n    /** Event thrown every time selected first or last date in range mode is changed */\n    @Output()\n    readonly selectedRangeDateChange: EventEmitter<DateRange<D>> = new EventEmitter<DateRange<D>>();\n\n    /** Event thrown every time the first or last date in multiple range mode is changed. */\n    @Output()\n    readonly selectedMultipleDateRangesChange: EventEmitter<Array<DateRange<D>>> = new EventEmitter<\n        Array<DateRange<D>>\n    >();\n\n    /** Event thrown every time calendar active view is changed */\n    @Output()\n    readonly activeViewChange = new EventEmitter<FdCalendarView>();\n\n    /**\n     * @hidden core date-picker as child\n     */\n    @ViewChild(FdDatePickerComponent)\n    fdDatePickerComponent: FdDatePickerComponent<D>;\n\n    /**\n     * Whether to show the calendar legend for special days.\n     * When enabled, displays a legend below the calendar showing the special day markers and their descriptions.\n     * @default false\n     */\n    showCalendarLegend = input(false, { transform: booleanAttribute });\n\n    /**\n     * Whether to display the calendar legend in column layout.\n     * When true, legend items are displayed vertically in a single column.\n     * When false, legend items are displayed horizontally in rows.\n     * @default false\n     */\n    legendCol = input(false, { transform: booleanAttribute });\n\n    /** @hidden */\n    private _datePickerValid = true;\n\n    /** @hidden */\n    private readonly _dateTimeAdapter = inject<DatetimeAdapter<D>>(DatetimeAdapter, {\n        optional: true\n    });\n\n    /** @hidden */\n    private readonly _dateTimeFormats = inject<DateTimeFormats>(DATE_TIME_FORMATS, {\n        optional: true\n    });\n\n    /** @hidden */\n    constructor() {\n        super();\n\n        if (!this._dateTimeAdapter) {\n            throw createMissingDateImplementationError('DateTimeAdapter');\n        }\n        if (!this._dateTimeFormats) {\n            throw createMissingDateImplementationError('DATE_TIME_FORMATS');\n        }\n    }\n\n    /**\n     * Function used to disable certain dates in the calendar.\n     */\n    @Input()\n    disableFunction: (value: D) => boolean = () => false;\n\n    /**\n     * Function used to disable certain dates in the calendar for the range start selection.\n     */\n    @Input()\n    disableRangeStartFunction: (value: D) => boolean = () => false;\n\n    /**\n     * Function used to disable certain dates in the calendar for the range end selection.\n     */\n    @Input()\n    disableRangeEndFunction: (value: D) => boolean = () => false;\n\n    /** @hidden */\n    writeValue(value: D | Array<D> | DateRange<D> | Array<DateRange<D>> | null): void {\n        super.writeValue(value);\n        this.detectChanges();\n    }\n\n    /**\n     * validates date on date change.\n     * @param value D | DateRange<D>\n     */\n    handleDateChange(value: D | Array<D> | DateRange<D> | Array<DateRange<D>>): void {\n        this.value = value;\n\n        if (this.allowMultipleSelection) {\n            if (this.type === 'single' && !this.value && !this.allowNull) {\n                this._datePickerValid = false;\n            } else if (this.type === 'range' && !this.allowNull) {\n                const dateRanges = this.value as Array<DateRange<D>>;\n                this._datePickerValid = dateRanges.every((range) => !!range.start);\n            } else {\n                this._datePickerValid = true;\n            }\n\n            this.stateChanges.next('date picker: handleDateInputChange');\n\n            if (this.type === 'single') {\n                this.handleSelectedMultipleDatesChange(this.selectedMultipleDates);\n            } else if (this.type === 'range') {\n                this.handleSelectedMultipleDateRangesChange(this.selectedMultipleDateRanges);\n            }\n        } else {\n            if (this.type === 'single' && !this.value && !this.allowNull) {\n                this._datePickerValid = false;\n            } else if (this.type === 'range' && !this.allowNull) {\n                const dateRange = this.value as DateRange<D>;\n                this._datePickerValid = !!dateRange.start;\n            } else {\n                this._datePickerValid = true;\n            }\n\n            this.stateChanges.next('date picker: handleDateInputChange');\n\n            if (this.type === 'single') {\n                this.handleSelectedDateChange(this.selectedDate);\n            } else if (this.type === 'range') {\n                this.handleSelectedRangeDateChange(this.selectedRangeDate);\n            }\n        }\n        this.markForCheck();\n    }\n\n    /**\n     * Method that handles changes when popover is opened or closed.\n     */\n    handleOpenChange = (open: boolean): void => {\n        this.isOpenChange.emit(open);\n    };\n\n    /** @hidden */\n    handleSelectedDateChange = (fdDate: Nullable<D>): void => {\n        this.selectedDateChange.emit(fdDate);\n    };\n\n    /** @hidden */\n    handleSelectedMultipleDatesChange = (fdDate: Array<D>): void => {\n        this.selectedMultipleDatesChange.emit(fdDate);\n    };\n\n    /** @hidden */\n    handleSelectedRangeDateChange = (fdRangeDate: DateRange<D>): void => {\n        this.selectedRangeDateChange.emit(fdRangeDate);\n    };\n\n    /** @hidden */\n    handleSelectedMultipleDateRangesChange = (fdRangeDate: Array<DateRange<D>>): void => {\n        this.selectedMultipleDateRangesChange.emit(fdRangeDate);\n    };\n\n    /** @hidden */\n    handleActiveViewChange = (fdCalendarView: FdCalendarView): void => {\n        this.activeViewChange.emit(fdCalendarView);\n    };\n}\n\n/** @hidden */\nexport function createMissingDateImplementationError(provider: string): Error {\n    return Error(\n        `FdpDatePicker: No provider found for ${provider}. You must import one of the following ` +\n            `modules at your application root: FdDateModule, or provide a ` +\n            `custom implementation.`\n    );\n}\n","<fd-date-picker\n    [inputId]=\"id\"\n    [attr.aria-label]=\"ariaLabel\"\n    [attr.ariaLabelledBy]=\"ariaLabelledBy\"\n    [attr.ariaDescribedBy]=\"ariaDescribedBy\"\n    [type]=\"type\"\n    [state]=\"state\"\n    [placeholder]=\"placeholder\"\n    [required]=\"required\"\n    [selectedDate]=\"selectedDate\"\n    [selectedMultipleDates]=\"selectedMultipleDates\"\n    [selectedRangeDate]=\"selectedRangeDate\"\n    [selectedMultipleDateRanges]=\"selectedMultipleDateRanges\"\n    [showTodayButton]=\"showTodayButton\"\n    [todayButtonLabel]=\"todayButtonLabel\"\n    [startingDayOfWeek]=\"startingDayOfWeek\"\n    [rangeHoverEffect]=\"rangeHoverEffect\"\n    [useValidation]=\"useValidation\"\n    [allowNull]=\"allowNull\"\n    [activeView]=\"activeView\"\n    [placement]=\"placement\"\n    [appendTo]=\"appendTo\"\n    [disabled]=\"disabled\"\n    [closeOnDateChoose]=\"closeOnDateChoose\"\n    [buttonFocusable]=\"buttonFocusable\"\n    [specialDaysRules]=\"specialDaysRules\"\n    [showCalendarLegend]=\"showCalendarLegend()\"\n    [legendCol]=\"legendCol()\"\n    [yearGrid]=\"yearGrid\"\n    [aggregatedYearGrid]=\"aggregatedYearGrid\"\n    [markWeekends]=\"markWeekends\"\n    [showWeekNumbers]=\"showWeekNumbers\"\n    [allowMultipleSelection]=\"allowMultipleSelection\"\n    [isOpen]=\"isOpen\"\n    [disableFunction]=\"disableFunction\"\n    [disableRangeStartFunction]=\"disableRangeStartFunction\"\n    [disableRangeEndFunction]=\"disableRangeEndFunction\"\n    [inline]=\"inline\"\n    [processInputOnBlur]=\"processInputOnBlur\"\n    [preventScrollOnFocus]=\"preventScrollOnFocus\"\n    [mobile]=\"mobile\"\n    [mobileConfig]=\"mobileConfig\"\n    [mobileLandscape]=\"mobileLandscape\"\n    [mobilePortrait]=\"mobilePortrait\"\n    [(ngModel)]=\"value\"\n    (ngModelChange)=\"handleDateChange($event)\"\n    (isOpenChange)=\"handleOpenChange($event)\"\n    (activeViewChange)=\"handleActiveViewChange($event)\"\n    (selectedDateChange)=\"handleSelectedDateChange($event)\"\n    (selectedMultipleDatesChange)=\"handleSelectedMultipleDatesChange($event)\"\n    (selectedRangeDateChange)=\"handleSelectedRangeDateChange($event)\"\n    (selectedMultipleDateRangesChange)=\"handleSelectedMultipleDateRangesChange($event)\"\n>\n    <ng-content></ng-content>\n</fd-date-picker>\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { PlatformDatePickerComponent } from '../../../date-picker/date-picker.component';\nimport { BaseDynamicFormGeneratorControl } from '../../base-dynamic-form-generator-control';\nimport { dynamicFormFieldProvider, dynamicFormGroupChildProvider } from '../../providers/providers';\n\n@Component({\n    selector: 'fdp-dynamic-form-generator-datepicker',\n    templateUrl: './dynamic-form-generator-datepicker.component.html',\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    viewProviders: [dynamicFormFieldProvider, dynamicFormGroupChildProvider],\n    imports: [FormsModule, ReactiveFormsModule, PlatformDatePickerComponent]\n})\nexport class DynamicFormGeneratorDatepickerComponent extends BaseDynamicFormGeneratorControl {}\n","<ng-container [formGroup]=\"form\">\n    <ng-container [formGroupName]=\"formGroupName\">\n        <fdp-date-picker\n            [id]=\"id\"\n            [placeholder]=\"placeholder\"\n            [name]=\"name\"\n            [formControlName]=\"name\"\n            [inline]=\"formItem.guiOptions?.inline !== false\"\n            [allowNull]=\"false\"\n        ></fdp-date-picker>\n    </ng-container>\n</ng-container>\n","import { Injectable } from '@angular/core';\n\nimport { ContentDensity } from '@fundamental-ngx/cdk/utils';\n\n/**\n * Default options for platform Text Area\n */\n@Injectable({ providedIn: 'root' })\nexport class TextAreaConfig {\n    /**\n     * Content Density of element. 'cozy' | 'compact'\n     */\n    contentDensity: ContentDensity;\n\n    /**\n     * Create Provider factory function\n     */\n    static createProviderFactory(obj: Partial<TextAreaConfig>): () => TextAreaConfig {\n        const useFactory = (): TextAreaConfig => Object.assign(new TextAreaConfig(), obj);\n        return useFactory;\n    }\n}\n","import { BACKSPACE, DELETE } from '@angular/cdk/keycodes';\nimport {\n    AfterViewChecked,\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    Component,\n    ElementRef,\n    HostListener,\n    Input,\n    OnInit,\n    ViewChild,\n    ViewEncapsulation\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { FD_FORM_FIELD_CONTROL, FormStates } from '@fundamental-ngx/cdk/forms';\nimport { KeyUtil, Nullable } from '@fundamental-ngx/cdk/utils';\nimport { FormControlComponent } from '@fundamental-ngx/core/form';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { BaseInput } from '@fundamental-ngx/platform/shared';\nimport { TextAreaConfig } from './text-area.config';\n\nconst VALID_WRAP_TYPES = ['hard', 'soft', 'off'];\n\nexport type WrapType = 'hard' | 'soft' | 'off';\n\n/**\n * Textarea field implementation that is compliant with Platform's FormGroup/FormField design\n *\n */\n@Component({\n    selector: 'fdp-textarea',\n    templateUrl: 'text-area.component.html',\n    styleUrl: 'text-area.component.scss',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    providers: [\n        {\n            provide: FD_FORM_FIELD_CONTROL,\n            useExisting: TextAreaComponent,\n            multi: true\n        }\n    ],\n    imports: [FormControlComponent, FormsModule, FdTranslatePipe]\n})\nexport class TextAreaComponent extends BaseInput implements AfterViewChecked, OnInit, AfterViewInit {\n    /**\n     * The height to which the textarea will grow when `growing` is set.\n     */\n    @Input()\n    height: Nullable<string>;\n\n    /**\n     * The number of rows that will be visible when `growing` is set.\n     * If both `growingMaxLines` and `height` are provided, `height` value takes precedence.\n     */\n    @Input()\n    growingMaxLines: Nullable<number>;\n\n    /**\n     * The textarea `cols` attribute wrapped- the number of letters visible per line.\n     * If width is set to auto, this attribute has no effect.\n     */\n    @Input()\n    cols: number;\n\n    /**\n     * The textarea `wrap` attribute - can be one of three: 'off', 'hard' or 'soft'.\n     */\n    @Input()\n    wrapType: WrapType = 'soft';\n\n    /** The maximum number of characters allowed to enter.\n     * If `showExceededText` is false, `maxLength` has native textarea's behavior of disallowing typing beyond `maxLength`.\n     * If `showExceededText` is true, user is allowed to type beyond `maxLength`, but error states and counter messages showing\n     * the exceeded count is displayed.\n     */\n    @Input()\n    maxLength: number;\n\n    /**\n     * Whether counter message should be shown.\n     * If `showExceededText` is false, no state changes or error messages are shown. User is simply not allowed to type\n     * beyond the `maxLength` characters.\n     */\n    @Input()\n    showExceededText = false;\n\n    /**\n     * Whether this textarea can grow.\n     */\n    @Input()\n    growing = false;\n\n    /**\n     * The textarea's value\n     */\n    @Input()\n    set value(value: any) {\n        if (value) {\n            super.setValue(value);\n        } else {\n            // when custom value not set, we should set/reset counter to maxlength value when it becomes undefined\n            this.exceededCharCount = this.maxLength ? this.maxLength : 0;\n            // reset state by resetting value\n            super.setValue('');\n        }\n    }\n    get value(): any {\n        return super.getValue();\n    }\n\n    /** @hidden */\n    @ViewChild('counter')\n    _textareaCounter?: ElementRef<HTMLDivElement>;\n\n    /** @hidden */\n    hasTextExceeded = false;\n\n    /** @hidden excess character count */\n    exceededCharCount = 0;\n\n    /** @hidden a string placeholder that toggles between 'remaining' and 'excess' for the select ICU expression */\n    counterExcessOrRemaining = 'remaining';\n\n    /** @hidden flag to check if there is an initial value set */\n    isValueCustomSet = false;\n\n    /** @hidden */\n    /** to keep track of number of characters in the textarea */\n    private _textAreaCharCount = 0;\n\n    /** @hidden */\n    private _isPasted = false;\n\n    /** for i18n counter message translation */\n    private readonly remainingText = 'remaining';\n    /** for i18n counter message translation */\n    private readonly excessText = 'excess';\n\n    /**\n     * @hidden\n     * @see PlatformFormFieldControl.extraContentHeightPx\n     */\n    get extraContentHeightPx(): number | undefined {\n        return this._textareaCounter?.nativeElement.offsetHeight;\n    }\n\n    /** @hidden */\n    private get _shouldTrackTextLimit(): boolean {\n        return this.maxLength > 0 && !this.showExceededText;\n    }\n\n    /** @hidden */\n    constructor(protected _textAreaConfig: TextAreaConfig) {\n        super();\n        if (this.ngControl) {\n            this.ngControl.valueAccessor = this;\n        }\n    }\n\n    /** when backpress or delete key is pressed when showExceededText field is not set, simply remove excess characters,\n     /* else handle autogrow case\n     */\n    @HostListener('keyup', ['$event'])\n    handleBackPress(event: KeyboardEvent): void {\n        // if not showing exceeded text message/interactions or growing, and custom value set\n        if (this.growing) {\n            this.autoGrowTextArea();\n            this.isValueCustomSet = false; // set it to false first time it comes here\n        }\n        if (this._shouldTrackTextLimit && KeyUtil.isKeyCode(event, [DELETE, BACKSPACE])) {\n            // for the custom value set and showExceededText=false case, on any key press, remove excess characters\n            if (this.value) {\n                this._textAreaCharCount = this.value.length;\n                if (this._textAreaCharCount > this.maxLength) {\n                    // remove excess characters\n                    this.value = this.value.substring(0, this.maxLength);\n                    this.isValueCustomSet = false; // since value is now changed, it is no longer custom set\n                }\n            }\n        }\n    }\n\n    /** @hidden */\n    ngOnInit(): void {\n        if (!this.wrapType || VALID_WRAP_TYPES.indexOf(this.wrapType) === -1) {\n            throw new Error(`Textarea wrap type ${this.wrapType} is not supported`);\n        }\n        // if not custom set, set counter to max length value, else it calculates remaining/exceeded characters.\n        if (!this.value) {\n            this.exceededCharCount = this.maxLength || 0;\n        } else {\n            this.isValueCustomSet = true;\n        }\n        super.ngOnInit();\n    }\n\n    /** @hidden */\n    ngAfterViewInit(): void {\n        // set max height\n        this._setMaxHeight();\n\n        // don't set any error state if we are not showing counter message\n        if (!this._shouldTrackTextLimit) {\n            this.state = undefined;\n        }\n\n        super.ngAfterViewInit();\n    }\n\n    /** @hidden */\n    ngAfterViewChecked(): void {\n        // when value is custom set(initial value is present), the heights don't get\n        // set to show the full text in the ngAfterViewInit immediately. therefore, we call autoGrowTextArea in\n        // ngAfterViewChecked and detect changes again.\n        if (this.value && this.isValueCustomSet) {\n            this.autoGrowTextArea(); // if applicable, grow the textarea when value is custom set\n            this.stateChanges.next('textarea: ngAfterViewChecked');\n        }\n    }\n\n    /** write value for ControlValueAccessor */\n    writeValue(value: any): void {\n        super.writeValue(value ?? '');\n        this.updateCounterInteractions();\n        this.stateChanges.next('textarea: writeValue');\n    }\n\n    /** update the counter message and related interactions */\n    updateCounterInteractions(): void {\n        this._textAreaCharCount = this.value?.length ?? 0;\n\n        if (this.maxLength) {\n            // newly added to avoid unnecessary iteration, remove if issue found\n            this.validateLengthOnCustomSet();\n        }\n    }\n\n    /** if exceeded maxlength when set as a value in code, highlight the exceeded text. */\n    validateLengthOnCustomSet(): void {\n        if (this._textAreaCharCount > this.maxLength) {\n            if (this._isPasted) {\n                this._targetElement.focus();\n                this._targetElement.setSelectionRange(this.maxLength, this._textAreaCharCount);\n            }\n\n            this.counterExcessOrRemaining = this.excessText;\n            this.exceededCharCount = this._textAreaCharCount - this.maxLength;\n        } else {\n            this.counterExcessOrRemaining = this.remainingText;\n            this.exceededCharCount = this.maxLength - this._textAreaCharCount;\n        }\n\n        this._isPasted = false;\n    }\n\n    /** handle exceeded maxlength case when text is pasted */\n    handlePasteInteraction(): void {\n        this._isPasted = true;\n\n        // Wrapped in timeout to make selecting range working\n        setTimeout(() => this.updateCounterInteractions());\n    }\n\n    /** handle auto growing of textarea */\n    autoGrowTextArea(): void {\n        if (this.growing) {\n            this._targetElement.style.height = 'inherit';\n            const textareaTotalHeight = this._getTextareaTotalHeight();\n            const maxHeight = parseInt(this._targetElement.style.maxHeight as string, 10);\n            if (maxHeight) {\n                if (textareaTotalHeight <= maxHeight) {\n                    this._targetElement.style.height = textareaTotalHeight + 'px';\n                } else {\n                    if (this.height) {\n                        this._targetElement.style.height = this.height;\n                    } else {\n                        this._targetElement.style.height = maxHeight + 'px';\n                    }\n                }\n            } else {\n                // no bound max height, keep growing\n                this._targetElement.style.height = textareaTotalHeight + 'px';\n            }\n        }\n    }\n\n    /**\n     * get line height of textarea\n     */\n    getTextareaLineHeight(): number {\n        // Get the computed styles for the element\n        if (this._targetElement) {\n            const computed = window.getComputedStyle(this._targetElement);\n\n            // Calculate the height\n            return parseInt(computed.getPropertyValue('line-height'), 10);\n        }\n        return 20; // default line height if nothing is defined\n    }\n\n    /**\n     * get the updated state when character count breaches `maxLength`\n     */\n    getUpdatedState(): FormStates {\n        if (this._getContentLength() > this.maxLength) {\n            this.hasTextExceeded = true; // set flag for error message to also change accordingly\n            this.counterExcessOrRemaining = this.excessText;\n\n            return this.state;\n        }\n        this.hasTextExceeded = false;\n        this.counterExcessOrRemaining = this.remainingText;\n\n        return this.state; // return any other errors found by parent form field\n    }\n\n    /** @hidden Native element  */\n    get _targetElement(): HTMLTextAreaElement {\n        return this._elementRef?.nativeElement;\n    }\n\n    /** @hidden get the length of the textarea content */\n    private _getContentLength(): number {\n        let contentLength;\n        if (this._targetElement) {\n            contentLength = this._targetElement.value.length;\n        }\n        if (this.value) {\n            contentLength = this.value.length;\n        }\n        return contentLength;\n    }\n\n    /** @hidden get the total height including borders and scroll height */\n    private _getTextareaTotalHeight(): number {\n        // Get the computed styles for the element\n        const computed = window.getComputedStyle(this._targetElement);\n        // Calculate the height\n        return (\n            parseInt(computed.getPropertyValue('border-top-width'), 10) +\n            this._targetElement.scrollHeight +\n            parseInt(computed.getPropertyValue('border-bottom-width'), 10)\n        );\n    }\n\n    /** @hidden set initial max height **/\n    private _setMaxHeight(): void {\n        if (this.growing && this._targetElement) {\n            if (this.growingMaxLines) {\n                this._targetElement.style.maxHeight = this.growingMaxLines * this.getTextareaLineHeight() + 'px';\n            }\n            if (this.height) {\n                this._targetElement.style.maxHeight = this.height;\n            }\n        } else {\n            if (this.growingMaxLines) {\n                // nothing to do here. rows attribute takes care.\n            }\n            if (this.height) {\n                this._targetElement.style.height = this.height;\n            }\n        }\n    }\n}\n","<textarea\n    #inputElementRef\n    fd-form-control\n    [disabled]=\"disabled\"\n    [attr.id]=\"id\"\n    [attr.aria-label]=\"ariaLabel\"\n    [attr.aria-labelledby]=\"ariaLabelledBy\"\n    [attr.aria-describedby]=\"id + '-counter'\"\n    [attr.aria-required]=\"required\"\n    [attr.placeholder]=\"placeholder\"\n    [attr.rows]=\"growing ? 2 : height ? 2 : growingMaxLines\"\n    [attr.cols]=\"cols\"\n    [attr.wrap]=\"wrapType\"\n    [attr.maxlength]=\"!showExceededText ? maxLength : null\"\n    [attr.readonly]=\"readonly ? true : null\"\n    [(ngModel)]=\"value\"\n    [state]=\"getUpdatedState()\"\n    (paste)=\"handlePasteInteraction()\"\n    (blur)=\"_onFocusChanged(false)\"\n    (focus)=\"_onFocusChanged(true)\"\n></textarea>\n<!-- ICU recommends full text in format -->\n@if (showExceededText) {\n    <div class=\"fd-textarea-counter\" aria-live=\"polite\" aria-atomic=\"true\" [attr.id]=\"id + '-counter'\" #counter>\n        <!-- render spaces instead of the actual value while translation string is loading in order to avoid content jumps -->\n        @if (counterExcessOrRemaining === 'excess') {\n            <span\n                [innerHtml]=\"\n                    (\n                        (exceededCharCount === 1\n                            ? 'platformTextarea.counterMessageCharactersOverTheLimitSingular'\n                            : 'platformTextarea.counterMessageCharactersOverTheLimitPlural'\n                        ) | fdTranslate: { count: exceededCharCount } : '&nbsp;&nbsp;'\n                    )()\n                \"\n            ></span>\n        } @else {\n            <span\n                [innerHtml]=\"\n                    (\n                        (exceededCharCount === 1\n                            ? 'platformTextarea.counterMessageCharactersRemainingSingular'\n                            : 'platformTextarea.counterMessageCharactersRemainingPlural'\n                        ) | fdTranslate: { count: exceededCharCount } : '&nbsp;&nbsp;'\n                    )()\n                \"\n            ></span>\n        }\n    </div>\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { TextAreaComponent } from '../../../text-area/text-area.component';\nimport { BaseDynamicFormGeneratorControl } from '../../base-dynamic-form-generator-control';\nimport { dynamicFormFieldProvider, dynamicFormGroupChildProvider } from '../../providers/providers';\n\n@Component({\n    selector: 'fdp-dynamic-form-generator-editor',\n    templateUrl: './dynamic-form-generator-editor.component.html',\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    viewProviders: [dynamicFormFieldProvider, dynamicFormGroupChildProvider],\n    imports: [FormsModule, ReactiveFormsModule, TextAreaComponent]\n})\nexport class DynamicFormGeneratorEditorComponent extends BaseDynamicFormGeneratorControl {}\n","<ng-container [formGroup]=\"form\">\n    <ng-container [formGroupName]=\"formGroupName\">\n        <fdp-textarea [id]=\"id\" [placeholder]=\"placeholder\" [name]=\"name\" [formControlName]=\"name\"></fdp-textarea>\n    </ng-container>\n</ng-container>\n","/**\n * @license\n * F. Kolar\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n *\n */\nimport {\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    Component,\n    ElementRef,\n    EventEmitter,\n    Input,\n    OnInit,\n    Output\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FD_FORM_FIELD_CONTROL } from '@fundamental-ngx/cdk/forms';\n\nimport { FormControlComponent } from '@fundamental-ngx/core/form';\nimport { BaseInput } from '@fundamental-ngx/platform/shared';\n\nconst VALID_INPUT_TYPES = ['text', 'number', 'email', 'password'];\n\nexport type InputType = 'text' | 'number' | 'email' | 'password';\n\n/**\n * Input field implementation to be compliant with our FormGroup/FormField design and also to\n * achieve certain this in Angular this component is re-using several ideas from MatDesign\n *\n */\n@Component({\n    selector: 'fdp-input',\n    templateUrl: 'input.component.html',\n    styleUrl: './input.component.scss',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [{ provide: FD_FORM_FIELD_CONTROL, useExisting: InputComponent, multi: true }],\n    imports: [FormControlComponent, FormsModule]\n})\nexport class InputComponent extends BaseInput implements OnInit, AfterViewInit {\n    /** Input type */\n    @Input()\n    type: InputType = 'text';\n\n    /**\n     * @hidden\n     * This `required` field is used internally by other components such as Input Group.\n     * Input group will not be able to set required value to input, until `required` is input through the`@Input` property.\n     */\n    @Input()\n    declare required: boolean;\n\n    /** return the value in the text box */\n    @Input()\n    set value(value: any) {\n        super.setValue(value);\n    }\n    get value(): any {\n        return super.getValue();\n    }\n\n    /** Emits event on focus change */\n    @Output() focusChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n    /** @hidden */\n    get inputElementRef(): ElementRef {\n        return this._elementRef;\n    }\n\n    /** @hidden */\n    ngOnInit(): void {\n        super.ngOnInit();\n        if (!this.type || VALID_INPUT_TYPES.indexOf(this.type) === -1) {\n            throw new Error(` Input type ${this.type} is not supported`);\n        }\n    }\n\n    /** @hidden */\n    _onFocus(): void {\n        this._onFocusChanged(true);\n        // propagate event\n        this.focusChange.emit(true);\n    }\n\n    /** @hidden */\n    _onBlur(): void {\n        this._onFocusChanged(false);\n        // propagate event\n        this.focusChange.emit(false);\n    }\n}\n","<!--\n  Does it make sense to have some other state than error?\n-->\n<input\n    #inputElementRef\n    fd-form-control\n    [(ngModel)]=\"value\"\n    [ngModelOptions]=\"{ standalone: true }\"\n    [attr.id]=\"id\"\n    [attr.name]=\"name\"\n    [type]=\"type\"\n    [attr.placeholder]=\"placeholder\"\n    [disabled]=\"disabled\"\n    [state]=\"state\"\n    [readOnly]=\"readonly\"\n    (blur)=\"_onBlur()\"\n    (focus)=\"_onFocus()\"\n    [ariaLabel]=\"ariaLabel\"\n    [ariaLabelledBy]=\"ariaLabelledBy\"\n    [attr.aria-required]=\"required\"\n/>\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { InputComponent } from '../../../input/input.component';\nimport { BaseDynamicFormGeneratorControl } from '../../base-dynamic-form-generator-control';\nimport { InputDynamicFormFieldItem } from '../../interfaces/dynamic-form-item';\nimport { dynamicFormFieldProvider, dynamicFormGroupChildProvider } from '../../providers/providers';\n\n@Component({\n    selector: 'fdp-dynamic-form-generator-input',\n    templateUrl: './dynamic-form-generator-input.component.html',\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    viewProviders: [dynamicFormFieldProvider, dynamicFormGroupChildProvider],\n    imports: [FormsModule, ReactiveFormsModule, InputComponent]\n})\nexport class DynamicFormGeneratorInputComponent extends BaseDynamicFormGeneratorControl<InputDynamicFormFieldItem> {}\n","@if (formField) {\n    <ng-container [formGroup]=\"form\">\n        <ng-container [formGroupName]=\"formGroupName\">\n            <fdp-input\n                [id]=\"id\"\n                [placeholder]=\"placeholder\"\n                [name]=\"name\"\n                [type]=\"formItem.controlType || 'text'\"\n                [formControlName]=\"name\"\n                [readonly]=\"readonly\"\n            ></fdp-input>\n        </ng-container>\n    </ng-container>\n}\n","import { Injectable } from '@angular/core';\n\nimport { ContentDensity } from '@fundamental-ngx/cdk/utils';\nimport { DataProvider, MatchingStrategy, PlatformConfig } from '@fundamental-ngx/platform/shared';\n\n/**\n * Default options for Multi-Input\n */\n@Injectable({ providedIn: 'root' })\nexport class MultiInputConfig {\n    /**\n     * Content Density of element. 'cozy' | 'compact'\n     */\n    contentDensity: ContentDensity;\n\n    /**\n     * String matching strategy for typeahead list. Default: 'starts with per term'\n     */\n    matchingStrategy: MatchingStrategy = MatchingStrategy.STARTS_WITH;\n\n    /**\n     * Maps data providers\n     */\n    providers: Map<string, DataProvider<any>> | null = new Map();\n\n    /** @hidden */\n    constructor(platformConfig: PlatformConfig) {\n        this.contentDensity = platformConfig.contentDensity;\n    }\n\n    /**\n     * Create Provider factory function\n     */\n    static createProviderFactory(obj: Partial<MultiInputConfig>): (platformConfig: PlatformConfig) => MultiInputConfig {\n        const useFactory = (platformConfig: PlatformConfig): MultiInputConfig =>\n            Object.assign(new MultiInputConfig(platformConfig), obj);\n        return useFactory;\n    }\n}\n","import {\n    ALT,\n    BACKSPACE,\n    CONTROL,\n    DOWN_ARROW,\n    ENTER,\n    ESCAPE,\n    LEFT_ARROW,\n    RIGHT_ARROW,\n    SHIFT,\n    TAB,\n    UP_ARROW\n} from '@angular/cdk/keycodes';\nimport {\n    AfterViewInit,\n    ContentChildren,\n    Directive,\n    ElementRef,\n    EventEmitter,\n    inject,\n    Input,\n    OnChanges,\n    OnDestroy,\n    Output,\n    QueryList,\n    SimpleChanges,\n    TemplateRef,\n    ViewChild\n} from '@angular/core';\n\nimport { combineLatest, fromEvent, isObservable, Observable, Subject, Subscription } from 'rxjs';\nimport { startWith } from 'rxjs/operators';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FocusEscapeDirection, KeyUtil, TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport { DialogConfig } from '@fundamental-ngx/core/dialog';\nimport { MobileModeConfig } from '@fundamental-ngx/core/mobile-mode';\nimport { FdpListComponent, ListComponent } from '@fundamental-ngx/platform/list';\nimport {\n    ArrayMultiInputDataSource,\n    CollectionBaseInput,\n    isDataSource,\n    isFunction,\n    isJsObject,\n    isOptionItem,\n    isString,\n    MatchingBy,\n    MatchingStrategy,\n    MultiInputDataSource,\n    MultiInputOption,\n    ObservableMultiInputDataSource\n} from '@fundamental-ngx/platform/shared';\nimport { TextAlignment } from '../combobox';\nimport { MultiInputConfig } from './multi-input.config';\n\nexport type FdpMultiInputDataSource<T> = MultiInputDataSource<T> | Observable<T[]> | T[];\n\n@Directive()\nexport abstract class BaseMultiInput extends CollectionBaseInput implements AfterViewInit, OnChanges, OnDestroy {\n    /** @hidden */\n    abstract controlTemplate: TemplateRef<any>;\n\n    /** @hidden */\n    abstract listTemplate: TemplateRef<any>;\n\n    /**\n     * @hidden\n     * Define is this item selected\n     */\n    abstract isSelectedOptionItem(selectedItem: MultiInputOption): boolean;\n\n    /**\n     * @hidden\n     * Emit select OptionItem\n     * */\n    abstract selectOptionItem(item: MultiInputOption): void;\n\n    /**\n     * @hidden\n     * Define value as selected\n     * */\n    abstract setAsSelected(item: MultiInputOption[]): void;\n\n    /**\n     * @hidden\n     * Mathod for marking list option as selected.\n     */\n    abstract _markListItemsAsSelected(): void;\n\n    /** Provides maximum height for the optionPanel */\n    @Input()\n    maxHeight = '250px';\n\n    /** Datasource for suggestion list */\n    @Input()\n    set dataSource(value: FdpMultiInputDataSource<any>) {\n        if (value) {\n            this._initializeDataSource(value);\n        }\n    }\n\n    get dataSource(): FdpMultiInputDataSource<any> {\n        return this._dataSource;\n    }\n\n    /** Whether the autocomplete should be enabled; Enabled by default */\n    @Input()\n    autoComplete = true;\n\n    /**\n     * Todo: Name of the entity for which DataProvider will be loaded. You can either pass list of\n     * items or use this entityClass and internally we should be able to do lookup to some registry\n     * and retrieve the best matching DataProvider that is set on application level\n     */\n    @Input()\n    entityClass: string;\n\n    /** Whether the Multi Input should be built on mobile mode */\n    @Input()\n    mobile = false;\n\n    /** Multi Input Mobile Configuration, it's applied only, when mobile is enabled */\n    @Input()\n    mobileConfig: MobileModeConfig;\n\n    /**\n     * Whether AddOn Button should be focusable\n     * @default false\n     */\n    @Input()\n    buttonFocusable = false;\n\n    /** Tells the multi input if we need to group items */\n    @Input()\n    group = false;\n\n    /** A field name to use to group data by (support dotted notation) */\n    @Input()\n    groupKey?: string;\n\n    /** The field to show data in secondary column */\n    @Input()\n    description?: string;\n\n    /** The field to show avatar image data in secondary column */\n    @Input()\n    avatarsrc?: string;\n\n    /** Show the second column (Applicable for two columns layout) */\n    @Input()\n    showSecondaryText = false;\n\n    /** Horizontally align text inside the second column (Applicable for two columns layout) */\n    @Input()\n    secondaryTextAlignment: TextAlignment = 'right';\n\n    /** Turns on/off Adjustable Width feature */\n    @Input()\n    autoResize = false;\n    /** Whether to open the dropdown when the addon button is clicked. */\n    @Input()\n    openDropdownOnAddOnClicked = true;\n\n    /** Value of the multi input */\n    @Input()\n    set value(value: any) {\n        const selectedItems = Array.isArray(value) ? value : [value];\n        this.setAsSelected(this._convertToOptionItems(selectedItems));\n        super.setValue(value);\n    }\n\n    get value(): any {\n        return super.getValue();\n    }\n\n    /** @hidden Emits event when the menu is opened/closed */\n    @Output()\n    readonly isOpenChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n    /** Event emitted when data loading is started. */\n    @Output()\n    // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n    readonly onDataRequested = new EventEmitter<void>();\n\n    /** Event emitted when data loading is finished. */\n    @Output()\n    // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n    readonly onDataReceived = new EventEmitter<void>();\n\n    /** Event emitted when the search term changes. Use *$event* to access the new term. */\n    @Output()\n    readonly searchTermChange: EventEmitter<string> = new EventEmitter<string>();\n\n    /** Emits event when the addon button is clicked. */\n    @Output()\n    readonly addOnButtonClicked: EventEmitter<Event> = new EventEmitter<Event>();\n\n    /** @hidden */\n    @ViewChild(FdpListComponent)\n    listComponent: ListComponent<MultiInputOption>;\n\n    /** @hidden */\n    @ContentChildren(TemplateDirective)\n    customTemplates: QueryList<TemplateDirective>;\n\n    /** @hidden */\n    @ViewChild('searchInputElement', { read: ElementRef })\n    searchInputElement: ElementRef;\n\n    /** @hidden\n     * Custom Option item Template\n     * */\n    optionItemTemplate: TemplateRef<any>;\n\n    /** @hidden\n     * Custom Group Header item Template\n     * */\n    groupItemTemplate: TemplateRef<any>;\n\n    /** @hidden\n     * Custom Secondary item Template\n     * */\n    secondaryItemTemplate: TemplateRef<any>;\n\n    /** @hidden\n     * Custom Selected option item Template\n     * */\n    selectedItemTemplate: TemplateRef<any>;\n\n    /** input text of the input. */\n    inputText: string;\n\n    /** Whether the Multi Input is opened. */\n    isOpen = false;\n\n    /** @hidden */\n    get canClose(): boolean {\n        return !(this.mobile && this.mobileConfig.approveButtonText);\n    }\n\n    /**\n     * @hidden\n     * List of matched suggestions\n     * */\n    _suggestions: MultiInputOption[];\n\n    /** @hidden\n     * List of matched suggestions\n     * */\n    _newSuggestions: MultiInputOption[];\n\n    /** @hidden\n     * Max width of list container\n     * */\n    maxWidth?: number;\n\n    /** @hidden\n     * Min width of list container\n     * */\n    minWidth?: number;\n\n    /**\n     * Need for opening mobile version\n     *\n     * @hidden\n     */\n    openChange = new Subject<boolean>();\n\n    /** @hidden */\n    protected readonly multiInputConfig = inject(MultiInputConfig);\n\n    /** @hidden */\n    protected _dataSource: FdpMultiInputDataSource<any>;\n\n    /** @hidden */\n    protected readonly dialogConfig = inject(DialogConfig, { optional: true });\n    /** @hidden emits whenever there're changes to the inputs, that affect the data creation from data source */\n    private readonly _updateDataSourceValues$ = new Subject<void>();\n    /** @hidden */\n    private _matchingStrategy: MatchingStrategy = this.multiInputConfig.matchingStrategy;\n    /** @hidden */\n    private _dsSubscription?: Subscription;\n\n    /** @hidden */\n    private _element: HTMLElement = this.elementRef.nativeElement;\n\n    /** Keys, that won't trigger the popover's open state, when dispatched on search input */\n    private readonly _nonOpeningKeys: number[] = [\n        ESCAPE,\n        ENTER,\n        CONTROL,\n        TAB,\n        SHIFT,\n        UP_ARROW,\n        RIGHT_ARROW,\n        DOWN_ARROW,\n        LEFT_ARROW,\n        ALT,\n        BACKSPACE\n    ];\n\n    /** @hidden */\n    private _originalSuggestions: any[] = [];\n\n    /** @hidden */\n    ngAfterViewInit(): void {\n        this._initWindowResize();\n        this._assignCustomTemplates();\n        super.ngAfterViewInit();\n    }\n\n    /** @hidden */\n    ngOnChanges(changes: SimpleChanges): void {\n        if ('group' in changes || 'groupKey' in changes) {\n            this._updateDataSourceValues$.next();\n        }\n        if ('avatarSrc' in changes || 'description' in changes || 'title' in changes || 'value' in changes) {\n            this._suggestions = this._convertToOptionItems(this._originalSuggestions);\n        }\n    }\n    /** @hidden */\n    ngOnDestroy(): void {\n        super.ngOnDestroy();\n\n        if (isDataSource(this.dataSource)) {\n            (this.dataSource as MultiInputDataSource<any>).close();\n        }\n\n        if (this._dsSubscription) {\n            this._dsSubscription.unsubscribe();\n        }\n    }\n\n    /** write value for ControlValueAccessor */\n    writeValue(value: any): void {\n        const selectedItems = Array.isArray(value) ? value : [value];\n        this.setAsSelected(this._convertToOptionItems(selectedItems));\n        super.writeValue(value);\n    }\n\n    /** @hidden */\n    _popoverOpenChangeHandle(isOpen: boolean): void {\n        if (!isOpen) {\n            this.close();\n        }\n    }\n\n    /** Opens the select popover body. */\n    open(): void {\n        this.isOpen = true;\n        this.isOpenChange.emit(this.isOpen);\n        this.openChange.next(this.isOpen);\n        this.markForCheck();\n        setTimeout(() => {\n            this._markListItemsAsSelected();\n            if (this.inputText) {\n                return;\n            }\n        });\n    }\n    /** Closes the select popover body. */\n    close(): void {\n        this.isOpen = false;\n        this.inputText = '';\n        this.searchTermChanged();\n        this.isOpenChange.emit(false);\n        this.openChange.next(false);\n        this.searchInputElement.nativeElement.focus();\n        this.markForCheck();\n    }\n\n    /** @hidden */\n    convertObjectToMultiInputOption(items: any[]): MultiInputOption[] {\n        return this._convertObjectsToOptionItems(items);\n    }\n\n    /** @hidden */\n    searchTermChanged(text: string = this.inputText): void {\n        if (text) {\n            this.open();\n        }\n        const map = new Map();\n        map.set('query', text);\n        map.set('limit', 12);\n        this.ds?.match(map);\n\n        this.searchTermChange.emit(text);\n\n        this.detectChanges();\n    }\n\n    /** @hidden */\n    showList(isOpen: boolean): void {\n        if (this.isOpen !== isOpen) {\n            if (isOpen) {\n                this.open();\n            } else {\n                this.searchTermChanged('');\n                this.close();\n            }\n        }\n    }\n\n    /** @hidden */\n    handleOptionItem(value: MultiInputOption): void {\n        if (value) {\n            this.selectOptionItem(value);\n        }\n    }\n\n    /** @hidden */\n    handlePressEnter(event: KeyboardEvent, value: MultiInputOption): void {\n        if (!KeyUtil.isKeyCode(event, ENTER)) {\n            return;\n        }\n\n        this.handleOptionItem(value);\n    }\n\n    /**\n     * Handle Keydown on Input\n     * @hidden\n     */\n    onInputKeydownHandler(event: KeyboardEvent): void {\n        if (this.readonly) {\n            return;\n        }\n\n        if (KeyUtil.isKeyCode(event, TAB) && this.isOpen) {\n            this.close();\n            return;\n        }\n\n        if (KeyUtil.isKeyCode(event, DOWN_ARROW)) {\n            event.preventDefault();\n\n            if (event.altKey) {\n                this.showList(true);\n            }\n\n            if (this.isOpen) {\n                this.listComponent?._setCurrentActiveItemIndex(0);\n                this.listComponent?.listItems.first.focus();\n            } else {\n                this._chooseOtherItem(1);\n            }\n        } else if (KeyUtil.isKeyCode(event, UP_ARROW)) {\n            event.preventDefault();\n\n            this._chooseOtherItem(-1);\n        } else if (!event.ctrlKey && !KeyUtil.isKeyCode(event, this._nonOpeningKeys)) {\n            this.showList(true);\n        }\n    }\n\n    /** Method passed to list component */\n    handleListFocusEscape(direction: FocusEscapeDirection): void {\n        if (direction === 'up') {\n            this.searchInputElement.nativeElement.focus();\n        }\n    }\n\n    /** @hidden */\n    private _displayFn = (value: any): string => this.displayValue(value);\n\n    /** @hidden */\n    private _secondaryFn = (value: any): string => {\n        if (isOptionItem(value)) {\n            return value.secondaryText ?? '';\n        } else if (isJsObject(value) && this.description) {\n            const currentItem = this.objectGet(value, this.description);\n\n            return isFunction(currentItem) ? currentItem() : currentItem;\n        } else {\n            return value;\n        }\n    };\n\n    /** @hidden */\n    protected get ds(): MultiInputDataSource<any> {\n        return this.dataSource as MultiInputDataSource<any>;\n    }\n\n    /** @hidden\n     * Method that picks other value moved from current one by offset, called only when Multi Input is closed */\n    private _chooseOtherItem(offset: number): void {\n        const index: number = this._suggestions.findIndex((value) => value.label === this.inputText);\n\n        if (this._suggestions[index + offset]) {\n            this.handleOptionItem(this._suggestions[index + offset]);\n        }\n    }\n\n    /** @hidden */\n    private _initializeDataSource(ds: FdpMultiInputDataSource<any>): void {\n        this._suggestions = [];\n\n        if (isDataSource(this.dataSource)) {\n            (this.dataSource as MultiInputDataSource<any>).close();\n\n            if (this._dsSubscription) {\n                this._dsSubscription.unsubscribe();\n                this._dsSubscription = undefined;\n            }\n        }\n        // Convert whatever comes in as DataSource so we can work with it identically\n        this._dataSource = this._openDataStream(ds);\n    }\n\n    /** @hidden */\n    private _openDataStream(ds: FdpMultiInputDataSource<any>): MultiInputDataSource<any> {\n        const initDataSource = this._toDataStream(ds);\n\n        if (initDataSource === undefined) {\n            throw new Error(`[dataSource] source did not match an array, Observable, or DataSource`);\n        }\n        /**\n         * This is single point of data entry to the component. We dont want to set data on different\n         * places. If any new data comes in either you do a search and you want to pass initial data\n         * its here.\n         */\n        this._dsSubscription = new Subscription();\n        const dsSub = combineLatest([initDataSource.open(), this._updateDataSourceValues$.pipe(startWith(null))])\n            .pipe(takeUntilDestroyed(this._destroyed))\n            .subscribe(([data]) => {\n                this._originalSuggestions = data;\n                this._suggestions = this._convertToOptionItems(data);\n                this.stateChanges.next('initDataSource.open().');\n\n                this.detectChanges();\n            });\n        this._dsSubscription.add(dsSub);\n\n        this._dsSubscription.add(initDataSource.onDataRequested().subscribe(this.onDataRequested));\n        this._dsSubscription.add(initDataSource.onDataReceived().subscribe(this.onDataReceived));\n\n        initDataSource.dataProvider.setLookupKey(this.lookupKey);\n        const matchingBy: MatchingBy = {\n            firstBy: this._displayFn\n        };\n\n        if (this.description) {\n            matchingBy.secondaryBy = this._secondaryFn;\n        }\n\n        initDataSource.dataProvider.setMatchingBy(matchingBy);\n        initDataSource.dataProvider.setMatchingStrategy(this._matchingStrategy);\n\n        // initial data fetch\n        const map = new Map();\n        map.set('query', '*');\n        map.set('limit', 12);\n        initDataSource.match(map);\n\n        return initDataSource;\n    }\n\n    /** @hidden */\n    private _toDataStream(source: FdpMultiInputDataSource<any>): MultiInputDataSource<any> | undefined {\n        if (isDataSource(source)) {\n            return source as MultiInputDataSource<any>;\n        }\n\n        if (Array.isArray(source)) {\n            // default implementation to work on top of arrays\n            return new ArrayMultiInputDataSource<any>(source);\n        }\n\n        if (isObservable(source)) {\n            return new ObservableMultiInputDataSource<any>(source);\n        }\n\n        return undefined;\n    }\n\n    /** @hidden */\n    private _initWindowResize(): void {\n        this._getOptionsListWidth();\n\n        if (!this.autoResize) {\n            return;\n        }\n\n        fromEvent(window, 'resize')\n            .pipe(takeUntilDestroyed(this._destroyed))\n            .subscribe(() => this._getOptionsListWidth());\n    }\n\n    /** @hidden */\n    private _getOptionsListWidth(): void {\n        const body = document.body;\n        const rect = (this._element.querySelector('fd-input-group') as HTMLElement).getBoundingClientRect();\n        const scrollBarWidth = body.offsetWidth - body.clientWidth;\n        this.maxWidth = window.innerWidth - scrollBarWidth - rect.left;\n        this.minWidth = rect.width - 2;\n    }\n\n    /**\n     * Convert original data to OptionItems Interface\n     * @hidden\n     */\n    private _convertToOptionItems(items: any[]): MultiInputOption[] {\n        const item = items[0];\n\n        const elementTypeIsOptionItem = isOptionItem(item);\n        if (elementTypeIsOptionItem) {\n            return items as MultiInputOption[];\n        }\n\n        const elementTypeIsObject = isJsObject(item);\n        if (elementTypeIsObject) {\n            return this._convertObjectsToOptionItems(items);\n        }\n\n        const elementTypeIsString = isString(item);\n        if (elementTypeIsString) {\n            return this._convertPrimitiveToOptionItems(items);\n        }\n\n        return [];\n    }\n\n    /**\n     * Convert data to OptionItems Interface\n     * @hidden\n     */\n    private _convertObjectsToOptionItems(items: any[]): MultiInputOption[] {\n        if (this.group && this.groupKey) {\n            return this._convertObjectsToGroupOptionItems(items);\n        } else if (this.showSecondaryText && this.description) {\n            return this._convertObjectsToSecondaryOptionItems(items);\n        } else {\n            return this._convertObjectsToDefaultOptionItems(items);\n        }\n    }\n\n    /**\n     * Convert object[] data to Group OptionItems Interface\n     * @hidden\n     */\n    private _convertObjectsToGroupOptionItems<K>(items: K[]): MultiInputOption[] {\n        const group: { [key: string]: K[] } = {};\n\n        for (let i = 0; i < items.length; i++) {\n            const item = items[i];\n            const keyValue = this.groupKey && item[this.groupKey];\n            if (!keyValue) {\n                continue;\n            }\n\n            if (!group[keyValue]) {\n                group[keyValue] = [];\n            }\n\n            group[keyValue].push(item);\n        }\n\n        return Object.keys(group).map((key) => {\n            const selectItem: MultiInputOption = {\n                label: key,\n                value: null,\n                isGroup: true\n            };\n\n            const currentGroup = group[key];\n\n            if (this.showSecondaryText && this.description) {\n                selectItem.children = this._convertObjectsToSecondaryOptionItems(currentGroup);\n            } else {\n                selectItem.children = this._convertObjectsToDefaultOptionItems(currentGroup);\n            }\n            return selectItem;\n        });\n    }\n\n    /**\n     * Convert object[] data to Secondary OptionItems Interface\n     * @hidden\n     */\n    private _convertObjectsToSecondaryOptionItems<K>(items: K[]): MultiInputOption[] {\n        const selectItems: MultiInputOption[] = [];\n\n        for (let i = 0; i < items.length; i++) {\n            const value = items[i];\n            selectItems.push({\n                label: this.displayValue(value),\n                avatarSrc: this.avatarsrc ? this.objectGet(value, this.avatarsrc) : null,\n                description: this.description ? this.objectGet(value, this.description) : null,\n                value\n            });\n        }\n\n        return selectItems;\n    }\n\n    /**\n     * Convert Primitive data(Boolean, String, Number) to OptionItems Interface\n     * @hidden\n     */\n    private _convertPrimitiveToOptionItems(items: any[]): MultiInputOption[] {\n        const selectItems: MultiInputOption[] = [];\n        for (let i = 0; i < items.length; i++) {\n            const value = items[i];\n            selectItems.push({ label: value, value });\n        }\n\n        return selectItems;\n    }\n\n    /**\n     * Convert object[] to OptionItems Interface (Default)\n     * @hidden\n     */\n    private _convertObjectsToDefaultOptionItems(items: any[]): MultiInputOption[] {\n        const selectItems: MultiInputOption[] = [];\n\n        for (let i = 0; i < items.length; i++) {\n            const value = items[i];\n            selectItems.push({\n                label: this.displayValue(value),\n                value\n            });\n        }\n\n        return selectItems;\n    }\n\n    /** @hidden\n     * Assign custom templates\n     * */\n    private _assignCustomTemplates(): void {\n        this.customTemplates.forEach((template) => {\n            switch (template.name()) {\n                case 'optionItemTemplate':\n                    this.optionItemTemplate = template.templateRef;\n                    break;\n                case 'groupItemTemplate':\n                    this.groupItemTemplate = template.templateRef;\n                    break;\n                case 'secondaryItemTemplate':\n                    this.secondaryItemTemplate = template.templateRef;\n                    break;\n                case 'selectedItemTemplate':\n                    this.selectedItemTemplate = template.templateRef;\n                    break;\n            }\n        });\n    }\n}\n","import { InjectionToken } from '@angular/core';\nimport { Subject } from 'rxjs';\n\nimport { MobileMode } from '@fundamental-ngx/core/mobile-mode';\n\nexport const MULTIINPUT_COMPONENT = new InjectionToken<string[]>('PlatformMultiInputInterface');\n\nexport interface PlatformMultiInputInterface extends MobileMode {\n    _selected: any[];\n    openChange: Subject<boolean>;\n\n    _dialogApprove(): void;\n    _dialogDismiss(selectedBackup: any[]): void;\n}\n","import {\n    ChangeDetectionStrategy,\n    Component,\n    Inject,\n    OnInit,\n    TemplateRef,\n    ViewChild,\n    ViewEncapsulation\n} from '@angular/core';\nimport { distinctUntilChanged } from 'rxjs/operators';\n\nimport { CdkScrollable } from '@angular/cdk/overlay';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Nullable, TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport { BarModule } from '@fundamental-ngx/core/bar';\nimport { DialogModule } from '@fundamental-ngx/core/dialog';\nimport { MobileModeBase, MobileModeControl } from '@fundamental-ngx/core/mobile-mode';\nimport { ScrollbarDirective } from '@fundamental-ngx/core/scrollbar';\nimport { MULTIINPUT_COMPONENT, PlatformMultiInputInterface } from '../multi-input.interface';\n\n@Component({\n    selector: 'fdp-multi-input-mobile',\n    templateUrl: './multi-input-mobile.component.html',\n    styleUrl: './multi-input-mobile.component.scss',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    imports: [DialogModule, TemplateDirective, BarModule, NgTemplateOutlet, CdkScrollable, ScrollbarDirective]\n})\nexport class PlatformMultiInputMobileComponent extends MobileModeBase<PlatformMultiInputInterface> implements OnInit {\n    /** @hidden */\n    @ViewChild('dialogTemplate') dialogTemplate: TemplateRef<any>;\n\n    /** @hidden\n     * For internal usage\n     * Control element, which will be rendered inside dialog.\n     * List element, which will be rendered inside dialog.\n     */\n    childContent: Nullable<{\n        listTemplate: TemplateRef<any>;\n        controlTemplate: TemplateRef<any>;\n    }> = null;\n\n    /** @hidden */\n    private _selectedBackup: any[];\n\n    /** @hidden */\n    constructor(@Inject(MULTIINPUT_COMPONENT) multiInputComponent: PlatformMultiInputInterface) {\n        super(multiInputComponent, MobileModeControl.MULTI_INPUT);\n    }\n\n    /** @hidden */\n    ngOnInit(): void {\n        this._listenOnMultiInputOpenChange();\n    }\n\n    /** @hidden */\n    _handleApprove(): void {\n        this.dialogRef.close();\n        this._component._dialogApprove();\n    }\n\n    /** @hidden */\n    _handleDismiss(): void {\n        this.dialogRef.dismiss();\n        this._component._dialogDismiss(this._selectedBackup);\n    }\n\n    /** @hidden */\n    private _listenOnMultiInputOpenChange(): void {\n        this._component.openChange\n            .pipe(distinctUntilChanged(), takeUntilDestroyed(this._destroyRef))\n            .subscribe((isOpen) => this._toggleDialog(isOpen));\n    }\n\n    /** @hidden */\n    private _toggleDialog(open: boolean): void {\n        if (!open) {\n            this._handleApprove();\n            return;\n        }\n\n        this._selectedBackup = [...this._component._selected];\n        if (!this._dialogService.hasOpenDialogs()) {\n            this._open();\n        }\n    }\n\n    /** @hidden */\n    private _open(): void {\n        this.dialogRef = this._dialogService.open(this.dialogTemplate, {\n            mobile: true,\n            disablePaddings: true,\n            ...this.dialogConfig,\n            backdropClickCloseable: false,\n            escKeyCloseable: false,\n            container: this._elementRef.nativeElement\n        });\n    }\n}\n","<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\n    <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n        <fd-dialog-header>\n            @if (mobileConfig.title) {\n                <h1 fd-dialog-title>{{ mobileConfig.title }}</h1>\n            }\n            @if (mobileConfig.hasCloseButton) {\n                <button fd-dialog-close-button [mobile]=\"true\" (click)=\"_handleDismiss()\"></button>\n            }\n            <ng-template fdkTemplate=\"subheader\">\n                <div fd-bar-middle>\n                    <fd-bar-element [fullWidth]=\"true\" class=\"fdp-multi-dialog-input\">\n                        <ng-template [ngTemplateOutlet]=\"childContent?.controlTemplate || null\"></ng-template>\n                    </fd-bar-element>\n                </div>\n            </ng-template>\n        </fd-dialog-header>\n        <fd-dialog-body>\n            <ng-template [ngTemplateOutlet]=\"childContent?.listTemplate || null\"></ng-template>\n        </fd-dialog-body>\n        <fd-dialog-footer>\n            @if (mobileConfig.approveButtonText) {\n                <fd-button-bar fdType=\"emphasized\" [label]=\"mobileConfig.approveButtonText!\" (click)=\"_handleApprove()\">\n                </fd-button-bar>\n            }\n            @if (mobileConfig.cancelButtonText) {\n                <fd-button-bar [label]=\"mobileConfig.cancelButtonText!\" (click)=\"_handleDismiss()\"> </fd-button-bar>\n            }\n        </fd-dialog-footer>\n    </fd-dialog>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { PlatformMultiInputMobileComponent } from './multi-input-mobile.component';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n    imports: [PlatformMultiInputMobileComponent],\n    exports: [PlatformMultiInputMobileComponent]\n})\nexport class PlatformMultiInputMobileModule {}\n","import { BACKSPACE, CONTROL, DELETE, ENTER, ESCAPE, LEFT_ARROW, RIGHT_ARROW } from '@angular/cdk/keycodes';\nimport { DestroyRef, Directive, ElementRef, EventEmitter, HostListener, Input, Output, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { KeyUtil } from '@fundamental-ngx/cdk/utils';\nimport { OptionItem } from '@fundamental-ngx/platform/shared';\nimport { fromEvent } from 'rxjs';\n\nexport interface AutoCompleteEvent {\n    term: string;\n    forceClose: boolean;\n}\n\n@Directive({\n    // eslint-disable-next-line @angular-eslint/directive-selector\n    selector: '[fdp-auto-complete]',\n    standalone: true\n})\nexport class AutoCompleteDirective {\n    /** Values that will fill missing text in the input. */\n    @Input()\n    options: OptionItem[];\n\n    /**\n     * Input text, that is taken from ngModel of formControl,\n     * there has to be difference between native input value and model value\n     */\n    @Input()\n    inputText: string;\n\n    /** Check is directive use in mobile view to prevent additional blur events */\n    @Input()\n    mobile: boolean;\n\n    /** Event thrown, when the auto ahead text is accepted */\n    @Output()\n    // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n    readonly onComplete: EventEmitter<AutoCompleteEvent> = new EventEmitter<AutoCompleteEvent>();\n\n    /** @hidden */\n    private readonly _completeKeys: number[] = [ENTER];\n\n    /** @hidden */\n    private readonly _fillKeys: number[] = [LEFT_ARROW, RIGHT_ARROW];\n\n    /** @hidden */\n    private readonly _stopKeys: number[] = [BACKSPACE, DELETE, ESCAPE];\n\n    /** @hidden */\n    private _oldValue: string;\n\n    /** @hidden */\n    private _lastKeyUpEvent: KeyboardEvent;\n\n    /** @hidden */\n    private get _element(): HTMLInputElement {\n        return this._elementRef.nativeElement;\n    }\n\n    /** @hidden */\n    private _isComposing = false;\n\n    /** @hidden */\n    private readonly _destroyRef = inject(DestroyRef);\n\n    /** @hidden */\n    constructor(private readonly _elementRef: ElementRef<HTMLInputElement>) {\n        /**\n         * Fixes #10710 / #12983\n         * With chinese characters inputText property update was triggered after the keyup event trigger.\n         * By ensuring that we set all properties we can proceed with stable data.\n         */\n        const keyupEvent = fromEvent<KeyboardEvent>(this._elementRef.nativeElement, 'keyup');\n        const compositionStartEvent = fromEvent<CompositionEvent>(this._elementRef.nativeElement, 'compositionstart');\n        const compositionEndEvent = fromEvent<CompositionEvent>(this._elementRef.nativeElement, 'compositionend');\n\n        keyupEvent.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((evt) => this.handleKeyboardEvent(evt));\n\n        compositionStartEvent.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n            this._isComposing = true;\n        });\n\n        compositionEndEvent.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n            this._isComposing = false;\n            this.inputText = this._elementRef.nativeElement.value;\n        });\n    }\n\n    /** @hidden */\n    @HostListener('blur')\n    handleBlur(): void {\n        if (Boolean(this.inputText) && !this.mobile) {\n            this._element.value = this.inputText;\n        }\n    }\n\n    /** @hidden */\n    handleKeyboardEvent(event: KeyboardEvent): void {\n        if (!this._isComposing) {\n            if (KeyUtil.isKeyCode(event, this._stopKeys)) {\n                this._element.value = this.inputText;\n            } else if (KeyUtil.isKeyCode(event, this._completeKeys)) {\n                this._sendCompleteEvent(true);\n            } else if (KeyUtil.isKeyCode(event, this._fillKeys)) {\n                this._sendCompleteEvent(false);\n            } else if (!this._isControlKey(event) && this.inputText) {\n                /** Prevention from triggering typeahead, when having crtl/cmd + keys */\n                if (!this._triggerTypeAhead()) {\n                    return;\n                }\n\n                // Check if this is a new typing session after programmatic input modification\n                const currentNativeValue = this._element.value;\n\n                if (this.inputText.length > currentNativeValue.length + 1) {\n                    // Reset inputText to current value and don't do typeahead\n                    this.inputText = currentNativeValue;\n                    return;\n                }\n\n                this._oldValue = this.inputText;\n                const item = this._searchByStrategy();\n\n                if (item) {\n                    this._typeahead(item.label);\n                }\n            }\n        }\n\n        this._lastKeyUpEvent = event;\n    }\n\n    /** @hidden */\n    private _typeahead(displayedValue: string): void {\n        const selectionStartIndex = this.inputText.length;\n        this._element.value = displayedValue;\n\n        this._setSelectionRange(selectionStartIndex, displayedValue.length);\n    }\n\n    /** @hidden */\n    private _setSelectionRange(selectionStart: number, selectionEnd: number): void {\n        const direction = this._element.selectionDirection;\n\n        this._element.setSelectionRange(selectionStart, selectionEnd, direction ?? undefined);\n    }\n\n    /** @hidden */\n    private _isControlKey(event: KeyboardEvent): boolean {\n        return KeyUtil.isKeyCode(event, CONTROL) || event.ctrlKey;\n    }\n\n    /** @hidden */\n    private _triggerTypeAhead(): boolean {\n        return !(\n            this._lastKeyUpEvent &&\n            KeyUtil.isKeyCode(this._lastKeyUpEvent, CONTROL) &&\n            this.inputText === this._oldValue\n        );\n    }\n\n    /** @hidden */\n    private _sendCompleteEvent(forceClose: boolean): void {\n        this.onComplete.emit({\n            term: this._element.value,\n            forceClose\n        });\n\n        if (this.inputText !== this._oldValue) {\n            const inputTextLength = this.inputText.length;\n            this._element.setSelectionRange(inputTextLength, inputTextLength);\n        }\n    }\n\n    /** @hidden */\n    private _searchByStrategy(): OptionItem | undefined {\n        const [firstItem] = this.options;\n        if (!firstItem) {\n            return;\n        }\n\n        if (firstItem.isGroup) {\n            let matchedSelectItem: OptionItem | undefined;\n\n            for (const option of this.options) {\n                if (!option.children) {\n                    continue;\n                }\n                matchedSelectItem = this._findByStrategyStartsWith(option.children, this.inputText);\n\n                if (matchedSelectItem) {\n                    break;\n                }\n            }\n\n            if (matchedSelectItem) {\n                return matchedSelectItem;\n            }\n        }\n\n        return this._findByStrategyStartsWith(this.options, this.inputText);\n    }\n\n    /** @hidden */\n    private _findByStrategyStartsWith(options: OptionItem[], inputText: string): OptionItem | undefined {\n        return options.find((option) => option.label.toLocaleLowerCase().startsWith(inputText.toLocaleLowerCase()));\n    }\n}\n","/* eslint-disable @typescript-eslint/member-ordering */\nimport { DOWN_ARROW, UP_ARROW } from '@angular/cdk/keycodes';\nimport {\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    Component,\n    EventEmitter,\n    Inject,\n    Injector,\n    Input,\n    OnInit,\n    Optional,\n    Output,\n    QueryList,\n    TemplateRef,\n    ViewChild,\n    ViewChildren,\n    ViewContainerRef,\n    ViewEncapsulation,\n    forwardRef\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FD_FORM_FIELD_CONTROL } from '@fundamental-ngx/cdk/forms';\nimport { DisplayFnPipe, DynamicComponentService, InitialFocusDirective, KeyUtil } from '@fundamental-ngx/cdk/utils';\nimport { TokenComponent, TokenizerComponent } from '@fundamental-ngx/core/token';\nimport {\n    BaseListItem,\n    ListComponent,\n    ModifyItemEvent,\n    PlatformListModule,\n    SelectionType,\n    StandardListItemComponent\n} from '@fundamental-ngx/platform/list';\nimport {\n    DATA_PROVIDERS,\n    DataProvider,\n    MultiInputDataSource,\n    MultiInputOption,\n    isFunction\n} from '@fundamental-ngx/platform/shared';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n    ContentDensityModule,\n    ContentDensityObserver,\n    contentDensityObserverProviders\n} from '@fundamental-ngx/core/content-density';\nimport { FormControlComponent } from '@fundamental-ngx/core/form';\nimport { InputGroupModule } from '@fundamental-ngx/core/input-group';\nimport { MultiAnnouncerDirective } from '@fundamental-ngx/core/multi-combobox';\nimport { PopoverBodyComponent, PopoverComponent, PopoverControlComponent } from '@fundamental-ngx/core/popover';\nimport { PopoverFillMode } from '@fundamental-ngx/core/shared';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { shallowEqual } from 'fast-equals';\nimport { AutoCompleteDirective, AutoCompleteEvent } from '../auto-complete/auto-complete.directive';\nimport { InputType } from '../input/input.component';\nimport { BaseMultiInput } from './base-multi-input';\nimport { PlatformMultiInputMobileComponent } from './multi-input-mobile/multi-input-mobile.component';\nimport { MULTIINPUT_COMPONENT } from './multi-input.interface';\n\nlet uniqueHiddenLabel = 0;\n\nexport class MultiInputSelectionChangeEvent {\n    /**\n     * Multi Input selection change event\n     * @param source Multi Input component\n     * @param payload Selected value\n     */\n    constructor(\n        public source: PlatformMultiInputComponent,\n        public payload: any // Contains selected item\n    ) {}\n}\n\n@Component({\n    selector: 'fdp-multi-input',\n    templateUrl: './multi-input.component.html',\n    styleUrl: './multi-input.component.scss',\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [\n        {\n            provide: FD_FORM_FIELD_CONTROL,\n            useExisting: forwardRef(() => PlatformMultiInputComponent),\n            multi: true\n        },\n        contentDensityObserverProviders()\n    ],\n    imports: [\n        NgTemplateOutlet,\n        PopoverComponent,\n        PopoverControlComponent,\n        PopoverBodyComponent,\n        InputGroupModule,\n        TokenComponent,\n        TokenizerComponent,\n        FormControlComponent,\n        FormsModule,\n        AutoCompleteDirective,\n        InitialFocusDirective,\n        PlatformListModule,\n        StandardListItemComponent,\n        DisplayFnPipe,\n        ContentDensityModule,\n        FdTranslatePipe,\n        MultiAnnouncerDirective\n    ]\n})\nexport class PlatformMultiInputComponent extends BaseMultiInput implements OnInit, AfterViewInit {\n    /** @hidden TODO: remove when permanently deleting the deprecated tokenHiddenId input */\n    protected tokenCountHiddenLabel = `fdp-multi-input-token-count-id-${uniqueHiddenLabel++}`;\n\n    /** @deprecated Now handled internally by tokenizer. */\n    @Input()\n    tokenHiddenId: string = this.tokenCountHiddenLabel;\n\n    /** type Represent the type of input used for the multi Input */\n    @Input()\n    type: InputType;\n\n    /** boolean type represents the focus set for the respective multi input */\n    @Input()\n    autofocus = false;\n\n    /**  */\n    @Input()\n    glyphAriaLabel: string;\n\n    /** Title text for the add-on icon button. */\n    @Input()\n    addonIconTitle: string;\n\n    /** @hidden */\n    @ViewChild(ListComponent)\n    listTemplateDD: ListComponent<MultiInputOption>;\n\n    /** Selected values from the list items. */\n    _selected: any[] = [];\n\n    /** Selected items of the multi input. */\n    @Input()\n    set selected(selectedValue: any[]) {\n        this.value = selectedValue;\n    }\n    get selected(): any[] {\n        return this._selected;\n    }\n\n    /**\n     *\n     */\n    @Input()\n    selectionMode: SelectionType = 'none';\n\n    /** Whether the list in byline mode. */\n    @Input()\n    hasByLine = false;\n\n    /** @hidden */\n    selectedValue?: MultiInputOption;\n\n    /** @hidden */\n    get isGroup(): boolean {\n        return !!(this.group && this.groupKey);\n    }\n\n    /** @hidden Whether the input is disabled. */\n    protected _disabled = false;\n\n    /** Whether the multi input is disabled. */\n    @Input()\n    set disabled(value) {\n        this._disabled = value;\n    }\n    get disabled(): boolean {\n        return this._disabled;\n    }\n\n    /**\n     * Preset options for the Select body width, whatever is chosen, the body has a 600px limit.\n     * `at-least` will apply a minimum width to the body equivalent to the width of the control. - Default\n     * `equal` will apply a width to the body equivalent to the width of the control.\n     * 'fit-content' will apply width needed to properly display items inside, independent of control.\n     */\n    @Input()\n    fillControlMode: PopoverFillMode = 'at-least';\n\n    /**\n     * The trigger events that will open/close the options popover.\n     * Accepts any [HTML DOM Events](https://www.w3schools.com/jsref/dom_obj_event.asp).\n     */\n    @Input()\n    triggers: string[] = [];\n\n    /** Whether the combobox should close, when a click is performed outside its boundaries. True by default */\n    @Input()\n    closeOnOutsideClick = true;\n\n    /** Callback function when add-on button clicked. */\n    @Input()\n    addOnButtonClickFn: () => void;\n\n    /** Event emitted when item is selected. */\n    @Output()\n    readonly selectionChange = new EventEmitter<MultiInputSelectionChangeEvent>();\n\n    /** @hidden */\n    @ViewChild(TokenizerComponent)\n    tokenizer: TokenizerComponent;\n\n    /** @hidden */\n    @ViewChild('controlTemplate')\n    controlTemplate: TemplateRef<any>;\n\n    /** @hidden */\n    @ViewChild('listTemplate')\n    listTemplate: TemplateRef<any>;\n\n    /** @hidden */\n    @ViewChildren(BaseListItem)\n    private readonly _listItems: QueryList<BaseListItem>;\n\n    /** @hidden */\n    constructor(\n        /** @hidden */\n        readonly _dynamicComponentService: DynamicComponentService,\n        /** @hidden */\n        private readonly _viewContainerRef: ViewContainerRef,\n        /** @hidden */\n        private readonly _injector: Injector,\n        /** @hidden */\n        @Optional() @Inject(DATA_PROVIDERS) private _providers: Map<string, DataProvider<any>>,\n        readonly contentDensityObserver: ContentDensityObserver\n    ) {\n        super();\n    }\n\n    /** Display function. Accepts an object of the same type as the\n     * items passed to dropdownValues as argument, and outputs a string.\n     * An arrow function can be used to access the *this* keyword in the calling component.\n     * See multi input examples for details. */\n    @Input()\n    displayFn = (str: string): string => str;\n\n    /** @hidden */\n    ngOnInit(): void {\n        super.ngOnInit();\n\n        const providers = this._providers?.size === 0 ? this.multiInputConfig.providers : this._providers;\n        // if we have both prefer dataSource\n        if (!this.dataSource && this.entityClass && providers?.has(this.entityClass)) {\n            this.dataSource = new MultiInputDataSource(providers.get(this.entityClass)!);\n        }\n    }\n\n    /** @hidden */\n    ngAfterViewInit(): void {\n        super.ngAfterViewInit();\n\n        if (this.mobile) {\n            this._setUpMobileMode();\n        }\n    }\n\n    /** @hidden Method to emit change event */\n    emitChangeEvent<T>(modelValue: T): void {\n        const event = new MultiInputSelectionChangeEvent(this, modelValue);\n\n        this.selectionChange.emit(event);\n    }\n\n    /** @hidden */\n    _checkboxSelected(value: any, event: ModifyItemEvent): void {\n        const isSelected = event.source._selected;\n        const index = this.selected.findIndex((selectvalue) => shallowEqual(selectvalue, value));\n\n        if (isSelected && index > -1) {\n            return;\n        }\n\n        this.addToArray(value, false);\n    }\n\n    /** @hidden */\n    addToArray(value: any, focusOnInput = true): void {\n        const index = this.selected.findIndex((selectvalue) => shallowEqual(selectvalue, value));\n        if (index === -1) {\n            this.selected.push(value);\n        } else {\n            this.selected.splice(index, 1);\n        }\n        if (!this.mobile && focusOnInput) {\n            this.close();\n        }\n        this._updateModel(this.selected);\n        if (focusOnInput) {\n            this.searchInputElement.nativeElement.focus();\n        }\n        this.emitChangeEvent(value ? this.selected : null);\n        this.detectChanges();\n    }\n\n    /** @hidden */\n    addOnButtonClick(event: Event): void {\n        if (isFunction(this.addOnButtonClickFn)) {\n            this.addOnButtonClickFn();\n            return;\n        }\n        if (!this.openDropdownOnAddOnClicked && this.isOpen) {\n            this.showList(false);\n        } else if (this.openDropdownOnAddOnClicked) {\n            this.showList(!this.isOpen);\n            this.searchInputElement?.nativeElement.focus();\n        }\n\n        this.addOnButtonClicked.emit(event);\n    }\n\n    /** @hidden */\n    onInputGroupClicked(): void {\n        if (this.mobile && !this.isOpen) {\n            this.open();\n        }\n    }\n\n    /** @hidden */\n    moreClicked(): void {\n        this.open();\n        this._suggestions = this.selected;\n        this.markForCheck();\n    }\n\n    /** @hidden */\n    deleteToken(selectedValue: MultiInputOption): void {\n        if (this.tokenizer.tokenList.length > 0) {\n            this.tokenizer.tokenList.forEach((token) => {\n                if (token.tokenWrapperElement()?.nativeElement.textContent === selectedValue.label) {\n                    this.selected.splice(this.selected.indexOf(selectedValue), 1);\n                }\n            });\n        }\n        this._updateModel(this.selected);\n        this.searchInputElement.nativeElement.focus();\n        this.close();\n        this.markForCheck();\n    }\n\n    /** @hidden */\n    removeToken(token: any): void {\n        this.selected.splice(this.selected.indexOf(token), 1);\n        this.emitChangeEvent(token ? this.selected : null);\n        this.searchInputElement.nativeElement.focus();\n        if (this.selected.length === 0) {\n            this._selected = [];\n        }\n        this._updateModel(this.selected);\n        this.markForCheck();\n    }\n\n    /** @hidden */\n    removeSelectedTokens(event: KeyboardEvent): void {\n        if (KeyUtil.isKeyCode(event, [DOWN_ARROW, UP_ARROW])) {\n            if (this.isOpen) {\n                this.listComponent._setCurrentActiveItemIndex(0);\n                this.listTemplateDD.listItems.first.focus();\n            } else {\n                this.showList(!this.isOpen);\n                this.searchInputElement.nativeElement.focus();\n            }\n        }\n        this.markForCheck();\n    }\n\n    /** @hidden Define is selected item selected */\n    isSelectedOptionItem(selectedItem: any): boolean {\n        return (\n            (this.lookupKey && this.lookupValue(this.selected) === this.lookupValue(selectedItem)) ||\n            this.displayValue(this.selected) === this.displayValue(selectedItem)\n        );\n    }\n\n    /** @hidden Method to set selected item */\n    selectOptionItem(item: MultiInputOption): void {\n        if (this.mobile) {\n            this.selectedValue = item;\n            this.inputText = item.label;\n            this.detectChanges();\n\n            return;\n        }\n\n        this.inputText = item.label;\n        this._checkAndUpdate(item);\n        this.showList(false);\n    }\n\n    /** @hidden Method to set as selected */\n    setAsSelected(item: MultiInputOption[]): void {\n        this._selected = item;\n        this.inputText = '';\n        this._markListItemsAsSelected();\n    }\n\n    /**\n     * @hidden\n     * Mathod for marking items in dropdown as selected.\n     */\n    _markListItemsAsSelected(): void {\n        this._listItems?.forEach((listItem) => {\n            const isSelected = !!this._selected.find((value) => shallowEqual(value.value, listItem.value));\n            listItem.setSelected(isSelected);\n        });\n    }\n\n    /** @hidden */\n    _onAutoComplete(event: AutoCompleteEvent): void {\n        if (!event.forceClose || !this._suggestions) {\n            return;\n        }\n\n        const [item] = this.isGroup ? this._suggestions[0]?.children || [] : this._suggestions;\n        if (item && item.label === event.term) {\n            this.addToArray(item);\n        }\n    }\n\n    /** @hidden */\n    _onKeydownEnter(event: Event): void {\n        if (this.inputText) {\n            event.preventDefault();\n        }\n    }\n\n    /** @hidden Handle dialog dismissing, closes popover and sets backup data. */\n    _dialogDismiss(selected: any[]): void {\n        this._selected = selected;\n        this.showList(false);\n    }\n\n    /** @hidden Handle dialog approval, closes popover and propagates data changes. */\n    _dialogApprove(): void {\n        this.onChange(this.selected);\n        this._updateModel(this.selected);\n        this.showList(false);\n    }\n\n    /** @hidden if not selected update model */\n    private _checkAndUpdate(modelValue: MultiInputOption): void {\n        if (this.isSelectedOptionItem(modelValue)) {\n            return;\n        }\n\n        const optionItem = this._getSelectedOptionItem(this.inputText);\n\n        this._updateModel(optionItem ? optionItem.value : this.inputText);\n    }\n\n    /** @hidden */\n    private _getSelectedOptionItem(text: string): MultiInputOption | undefined {\n        if (!this.isGroup) {\n            return this._suggestions.find((item) => item.label === text);\n        }\n\n        return this._suggestions\n            .reduce((result: MultiInputOption[], item: MultiInputOption) => {\n                item.children && result.push(...item.children);\n\n                return result;\n            }, [])\n            .find((item) => item.label === text);\n    }\n\n    /** @hidden Update model */\n    private _updateModel(value: any): void {\n        // setting value, it will call setValue()\n        this.value = value;\n    }\n\n    /** @hidden */\n    private async _setUpMobileMode(): Promise<void> {\n        const injector = Injector.create({\n            providers: [{ provide: MULTIINPUT_COMPONENT, useValue: this }],\n            parent: this._injector\n        });\n\n        this._dynamicComponentService.createDynamicComponent(\n            { listTemplate: this.listTemplate, controlTemplate: this.controlTemplate },\n            PlatformMultiInputMobileComponent,\n            {\n                containerRef: this._viewContainerRef\n            },\n            { injector }\n        );\n    }\n}\n","<div class=\"fd-multi-input\">\n    <ng-template [ngTemplateOutlet]=\"mobile ? controlTemplate : desktopTemplate\"></ng-template>\n</div>\n<ng-template #desktopTemplate>\n    <fd-popover\n        additionalBodyClass=\"fdp-multi-input__list-container\"\n        [isOpen]=\"isOpen && _suggestions.length > 0\"\n        (isOpenChange)=\"_popoverOpenChangeHandle($event)\"\n        [fillControlMode]=\"fillControlMode\"\n        [focusTrapped]=\"true\"\n        [triggers]=\"triggers\"\n        [disabled]=\"disabled || readonly\"\n        [maxWidth]=\"autoResize ? (maxWidth ?? null) : (minWidth ?? null)\"\n        [closeOnOutsideClick]=\"closeOnOutsideClick\"\n    >\n        <fd-popover-control>\n            <ng-template [ngTemplateOutlet]=\"controlTemplate\"></ng-template>\n        </fd-popover-control>\n        <fd-popover-body>\n            <ng-template [ngTemplateOutlet]=\"listTemplate\"></ng-template>\n            <ng-content></ng-content>\n        </fd-popover-body>\n    </fd-popover>\n</ng-template>\n<ng-template #controlTemplate>\n    <fd-input-group\n        [button]=\"true\"\n        [buttonFocusable]=\"buttonFocusable\"\n        [isControl]=\"true\"\n        glyph=\"value-help\"\n        [state]=\"state\"\n        [disabled]=\"disabled\"\n        (keydown)=\"removeSelectedTokens($event)\"\n        (addOnButtonClicked)=\"addOnButtonClick($event)\"\n        (click)=\"onInputGroupClicked()\"\n        [glyphAriaLabel]=\"glyphAriaLabel\"\n        [iconTitle]=\"addonIconTitle\"\n    >\n        <fd-tokenizer\n            [tokenizerFocusable]=\"false\"\n            [compactCollapse]=\"true\"\n            [showOverflowPopover]=\"false\"\n            #tokenizer\n            class=\"fd-multi-input-tokenizer-custom\"\n            (moreClickedEvent)=\"moreClicked()\"\n            tabindex=\"-1\"\n            role=\"listbox\"\n            fdMultiAnnouncer\n            [multiAnnouncerOptions]=\"isOpen ? _suggestions : []\"\n        >\n            @for (token of selected; track token; let i = $index) {\n                <fd-token\n                    [readOnly]=\"disabled\"\n                    (onCloseClick)=\"removeToken(token)\"\n                    [attr.aria-posinset]=\"i\"\n                    [attr.aria-setsize]=\"selected.length\"\n                >\n                    <span>{{ token.label | displayFnPipe: displayFn }}</span>\n                </fd-token>\n            }\n            <input\n                #searchInputElement\n                type=\"text\"\n                class=\"fd-input fd-multi-input-tokenizer-input fd-tokenizer__input fd-input-group__input\"\n                fdp-auto-complete\n                autocomplete=\"off\"\n                (onComplete)=\"_onAutoComplete($event)\"\n                (keydown.enter)=\"_onKeydownEnter($event)\"\n                (keydown)=\"onInputKeydownHandler($event)\"\n                [inputText]=\"inputText\"\n                [options]=\"_suggestions\"\n                fd-input-group-input\n                fd-form-control\n                [attr.id]=\"id\"\n                [disabled]=\"disabled\"\n                [(ngModel)]=\"inputText\"\n                (ngModelChange)=\"searchTermChanged()\"\n                [ngModelOptions]=\"{ standalone: true }\"\n                [attr.placeholder]=\"selected.length ? null : placeholder\"\n                (focus)=\"onTouched(); tokenizer._showAllTokens()\"\n                (blur)=\"tokenizer._hideTokens()\"\n                [attr.aria-expanded]=\"isOpen && _suggestions.length > 0\"\n                [readonly]=\"readonly\"\n                aria-haspopup=\"listbox\"\n                [attr.aria-readonly]=\"readonly\"\n                [ariaLabel]=\"ariaLabel || ('coreMultiInput.multiInputAriaLabel' | fdTranslate)()\"\n                [ariaLabelledBy]=\"ariaLabelledBy\"\n                [attr.aria-required]=\"required\"\n                aria-roledescription=\"Multi Value Input\"\n                fdkInitialFocus\n                [enabled]=\"autofocus\"\n            />\n        </fd-tokenizer>\n    </fd-input-group>\n</ng-template>\n<ng-template #listTemplate>\n    @if (_suggestions && _suggestions.length) {\n        <fdp-list\n            [noBorder]=\"true\"\n            #listTemplateDD\n            [hasByLine]=\"hasByLine\"\n            [selectionMode]=\"selectionMode\"\n            role=\"listbox\"\n            aria-multiselectable=\"true\"\n            [interceptTabKey]=\"false\"\n            (keydown.tab)=\"close()\"\n            (keydown.escape)=\"close()\"\n        >\n            @if (!isGroup) {\n                @for (listItem of _suggestions; track listItem) {\n                    <fdp-standard-list-item\n                        [title]=\"listItem.label\"\n                        [description]=\"listItem.description || ''\"\n                        [avatar]=\"listItem.avatarSrc\"\n                        [value]=\"listItem.value\"\n                        (itemSelected)=\"selectionMode !== 'multi' && addToArray(listItem, true)\"\n                        (itemCheckboxSelected)=\"_checkboxSelected(listItem, $event)\"\n                        (buttonClicked)=\"deleteToken(listItem)\"\n                        role=\"option\"\n                    >\n                    </fdp-standard-list-item>\n                }\n            }\n            @if (isGroup) {\n                @for (group of _suggestions; track group) {\n                    @if (!groupItemTemplate) {\n                        <fdp-list-group-header [groupHeaderTitle]=\"group.label\"></fdp-list-group-header>\n                    }\n                    @if (groupItemTemplate) {\n                        <ng-template\n                            [ngTemplateOutlet]=\"groupItemTemplate\"\n                            [ngTemplateOutletContext]=\"{ $implicit: { label: group.label } }\"\n                        ></ng-template>\n                    }\n                    @for (optionItem of group.children; track optionItem; let i = $index) {\n                        <fdp-standard-list-item\n                            [title]=\"optionItem.label\"\n                            [value]=\"optionItem.value\"\n                            (itemSelected)=\"addToArray(optionItem, true)\"\n                            (itemCheckboxSelected)=\"addToArray(optionItem, false)\"\n                            (buttonClicked)=\"deleteToken(optionItem)\"\n                            role=\"option\"\n                        >\n                        </fdp-standard-list-item>\n                    }\n                }\n            }\n        </fdp-list>\n    }\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { PlatformMultiInputComponent } from './multi-input.component';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n    imports: [PlatformMultiInputComponent],\n    exports: [PlatformMultiInputComponent]\n})\nexport class PlatformMultiInputModule {}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { PlatformMultiInputComponent } from '../../../multi-input';\nimport { BaseDynamicFormGeneratorControl } from '../../base-dynamic-form-generator-control';\nimport { dynamicFormFieldProvider, dynamicFormGroupChildProvider } from '../../providers/providers';\n\n@Component({\n    selector: 'fdp-dynamic-form-generator-multi-input',\n    templateUrl: './dynamic-form-generator-multi-input.component.html',\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    viewProviders: [dynamicFormFieldProvider, dynamicFormGroupChildProvider],\n    imports: [FormsModule, ReactiveFormsModule, PlatformMultiInputComponent]\n})\nexport class DynamicFormGeneratorMultiInputComponent extends BaseDynamicFormGeneratorControl {}\n","<ng-container [formGroup]=\"form\">\n    <ng-container [formGroupName]=\"formGroupName\">\n        <fdp-multi-input\n            [id]=\"id\"\n            [formControlName]=\"name\"\n            [placeholder]=\"placeholder\"\n            type=\"text\"\n            [name]=\"name\"\n            [dataSource]=\"choices\"\n            displayKey=\"label\"\n            lookupKey=\"label\"\n            [autofocus]=\"true\"\n        >\n        </fdp-multi-input>\n    </ng-container>\n</ng-container>\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { ObjectStatusComponent } from '@fundamental-ngx/platform/object-status';\nimport { BaseDynamicFormGeneratorControl } from '../../base-dynamic-form-generator-control';\nimport { ObjectStatusDynamicFormFieldItem } from '../../interfaces/dynamic-form-item';\nimport { dynamicFormFieldProvider, dynamicFormGroupChildProvider } from '../../providers/providers';\n\n@Component({\n    selector: 'fdp-dynamic-form-generator-object-status',\n    templateUrl: './dynamic-form-generator-object-status.component.html',\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    viewProviders: [dynamicFormFieldProvider, dynamicFormGroupChildProvider],\n    imports: [FormsModule, ReactiveFormsModule, ObjectStatusComponent]\n})\nexport class DynamicFormGeneratorObjectStatusComponent extends BaseDynamicFormGeneratorControl<ObjectStatusDynamicFormFieldItem> {}\n","<ng-container [formGroup]=\"form\">\n    <ng-container [formGroupName]=\"formGroupName\">\n        <fdp-object-status\n            [label]=\"formItem.default\"\n            [status]=\"formItem.guiOptions?.status\"\n            [glyph]=\"formItem.guiOptions?.icon\"\n        ></fdp-object-status>\n    </ng-container>\n</ng-container>\n","import { FocusableOption } from '@angular/cdk/a11y';\nimport {\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    Component,\n    EventEmitter,\n    Input,\n    Output,\n    TemplateRef,\n    ViewChild\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport { RadioButtonComponent as CoreRadioButtonComponent } from '@fundamental-ngx/core/radio';\nimport { BaseInput } from '@fundamental-ngx/platform/shared';\n\nlet uniqueId = 0;\n\n@Component({\n    selector: 'fdp-radio-button',\n    templateUrl: './radio.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [CoreRadioButtonComponent, FormsModule, NgTemplateOutlet]\n})\nexport class RadioButtonComponent extends BaseInput implements AfterViewInit, FocusableOption {\n    /** sets radio button tooltip */\n    @Input()\n    title: string;\n\n    /**\n     * Includes the Radio in the page tab sequence.\n     */\n    @Input()\n    tabIndex = -1;\n\n    /** value for Radio button */\n    @Input()\n    set value(newValue: any) {\n        this._value = newValue;\n    }\n    get value(): any {\n        return super.getValue();\n    }\n\n    /** used for radio button creation if list value present */\n    @Input()\n    forceRender = false;\n\n    /** reference of template */\n    @ViewChild('renderer')\n    renderer: TemplateRef<any>;\n\n    /** click event to emit */\n    @Output()\n    readonly checked: EventEmitter<RadioButtonComponent> = new EventEmitter();\n\n    /** Access radio button child element passed as content of radio button group */\n    @ViewChild(CoreRadioButtonComponent, { static: false })\n    private coreRadioButton: CoreRadioButtonComponent;\n\n    /** @hidden */\n    _currentValue: any;\n\n    /** @hidden Radio checked status */\n    _isChecked = false;\n\n    /** @hidden */\n    constructor() {\n        super();\n\n        if (this.ngControl) {\n            this.ngControl.valueAccessor = this;\n        }\n        // @hidden have to set default initial values as base class has check and throws error\n        this.id = `fdp-radio-id-${uniqueId}`;\n        this.name = `fdp-radio-name-${uniqueId}`;\n        uniqueId++;\n    }\n\n    /** @hidden Controlvalue accessor */\n    writeValue(value: any): void {\n        this._valueChange(value);\n    }\n\n    /** @hidden */\n    ngAfterViewInit(): void {\n        super.ngAfterViewInit();\n    }\n\n    /** @hidden */\n    _valueChange(value: any, emitEvent = false): void {\n        if (this.disabled) {\n            emitEvent = false;\n        }\n\n        this._currentValue = value;\n        this._isChecked = this._currentValue === super.getValue();\n        if (this._isChecked && emitEvent) {\n            this.checked.emit(this);\n        }\n        this.tabIndex = this._isChecked ? 0 : -1;\n        this.detectChanges();\n        if (emitEvent) {\n            this.onChange(value);\n            this.onTouched();\n        }\n    }\n\n    /** method for cdk FocusKeymanager */\n    focus(): void {\n        this.coreRadioButton?.inputElement.nativeElement.focus();\n    }\n\n    /** method to select radio button */\n    select(): void {\n        this._valueChange(super.getValue());\n    }\n\n    /** method to uncheck radio button */\n    unselect(): void {\n        this._valueChange(undefined);\n    }\n\n    /** Setting tabIndex for radio accessibility */\n    setTabIndex(index: 0 | -1): void {\n        this.tabIndex = index;\n        this.markForCheck();\n    }\n}\n","<ng-template #renderer>\n    <fd-radio-button\n        [id]=\"id\"\n        [name]=\"name\"\n        [value]=\"value\"\n        [state]=\"state\"\n        [disabled]=\"disabled\"\n        [tabIndex]=\"_isChecked ? 0 : tabIndex\"\n        [title]=\"title\"\n        [ariaLabel]=\"ariaLabel\"\n        [ariaLabelledBy]=\"ariaLabelledBy\"\n        [ariaDescribedBy]=\"ariaDescribedBy\"\n        [ngModel]=\"_currentValue\"\n        (ngModelChange)=\"_valueChange($event, true)\"\n    >\n        <ng-content></ng-content>\n    </fd-radio-button>\n</ng-template>\n@if (forceRender) {\n    <ng-template [ngTemplateOutlet]=\"renderer\"></ng-template>\n}\n","import { FocusKeyManager } from '@angular/cdk/a11y';\nimport { DOWN_ARROW, LEFT_ARROW, RIGHT_ARROW, UP_ARROW } from '@angular/cdk/keycodes';\nimport {\n    AfterContentChecked,\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    Component,\n    ContentChildren,\n    DestroyRef,\n    EventEmitter,\n    HostListener,\n    Input,\n    OnDestroy,\n    Output,\n    QueryList,\n    ViewChildren,\n    ViewEncapsulation,\n    forwardRef,\n    inject\n} from '@angular/core';\nimport { FD_FORM_FIELD_CONTROL } from '@fundamental-ngx/cdk/forms';\nimport { merge } from 'rxjs';\nimport { startWith, switchMap } from 'rxjs/operators';\n\nimport { KeyUtil } from '@fundamental-ngx/cdk/utils';\nimport { InLineLayoutCollectionBaseInput, SelectItem } from '@fundamental-ngx/platform/shared';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormGroupComponent, FormItemComponent } from '@fundamental-ngx/core/form';\nimport { RadioButtonComponent } from './radio/radio.component';\n\n/**\n * Radio group implementation based on the\n * https://github.com/SAP/fundamental-ngx/wiki/Platform:-RadioGroup-Technical-Design\n * documents.\n */\n\n// Increasing integer for generating unique ids for radio components.\nlet nextUniqueId = 0;\n\n@Component({\n    selector: 'fdp-radio-group',\n    templateUrl: './radio-group.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    providers: [{ provide: FD_FORM_FIELD_CONTROL, useExisting: forwardRef(() => RadioGroupComponent), multi: true }],\n    imports: [FormGroupComponent, FormItemComponent, NgTemplateOutlet, RadioButtonComponent]\n})\nexport class RadioGroupComponent\n    extends InLineLayoutCollectionBaseInput\n    implements AfterViewInit, AfterContentChecked, OnDestroy\n{\n    /** Value of selected radio button */\n    // eslint-disable-next-line @angular-eslint/no-input-rename\n    @Input('selected')\n    set value(newValue: any) {\n        super.setValue(newValue);\n    }\n    get value(): any {\n        return super.getValue();\n    }\n\n    /** To Display Radio buttons in a line */\n    @Input()\n    set isInline(inline: boolean) {\n        this._inlineCurrentValue$.next(inline);\n    }\n    get isInline(): boolean {\n        return this._inlineCurrentValue$.value;\n    }\n\n    /** None value radio button created */\n    @Input()\n    hasNoValue = false;\n\n    /** Label for None value radio button */\n    @Input()\n    noValueLabel = 'None';\n\n    /** Children radio buttons part of Group radio button, passed as content */\n    @ContentChildren(RadioButtonComponent)\n    contentRadioButtons: QueryList<RadioButtonComponent>;\n\n    /** Children radio buttons part of Group radio button, created from list of values */\n    @ViewChildren(RadioButtonComponent)\n    viewRadioButtons: QueryList<RadioButtonComponent>;\n\n    /** Selected radio button change event raised */\n    @Output()\n    // eslint-disable-next-line @angular-eslint/no-output-native\n    change: EventEmitter<RadioButtonComponent> = new EventEmitter<RadioButtonComponent>();\n\n    /** @hidden */\n    private _activeItemSet = false;\n\n    /** @hidden The currently selected radio button. Should match value. */\n    private _selected: RadioButtonComponent | null = null;\n\n    /** @hidden */\n    private readonly _destroyRef = inject(DestroyRef);\n\n    /** @hidden FocusKeyManager instance */\n    private _keyboardEventsManager: FocusKeyManager<RadioButtonComponent>;\n\n    /** @hidden */\n    constructor() {\n        super();\n        this.id = `radio-group-${nextUniqueId++}`;\n    }\n\n    /** @hidden */\n    @HostListener('keydown', ['$event'])\n    _handleKeydown(event: KeyboardEvent): void {\n        event.stopImmediatePropagation();\n        if (this._keyboardEventsManager) {\n            // sets Active item. so arrow key starts after the active item.\n            // Need to do only once, when one radio is already selected\n            if (this._selected && !this._activeItemSet) {\n                this._keyboardEventsManager.setActiveItem(this._selected);\n                this._activeItemSet = true;\n            }\n\n            if (KeyUtil.isKeyCode(event, [DOWN_ARROW, UP_ARROW, LEFT_ARROW, RIGHT_ARROW])) {\n                // passing the event to key manager so we get a change fired\n                this._keyboardEventsManager.onKeydown(event);\n            }\n        }\n    }\n\n    /** Control Value Accessor */\n    writeValue(value: any): void {\n        super.writeValue(value);\n        this.contentRadioButtons?.forEach((b) => this._selectUnselect(b));\n        this.viewRadioButtons?.forEach((b) => this._selectUnselect(b));\n    }\n\n    /** Access display value for objects, acts as checkbox label. */\n    getDisplayValue(item: any): string {\n        return this.displayValue(item);\n    }\n\n    /**\n     * Called on button click for view radio button, created from list of values\n     * @param event\n     */\n    selected(event: RadioButtonComponent): void {\n        this._selectedValueChanged(event);\n    }\n\n    /** @hidden Selecting default button as provided as input */\n    ngAfterContentChecked(): void {\n        if (!this._validateRadioButtons()) {\n            throw new Error('fdp-radio-button-group must contain a fdp-radio-button');\n        }\n        this.contentRadioButtons.forEach((button) => (button.state = this.state));\n        this.markForCheck();\n    }\n\n    /**\n     * @hidden\n     * Initialize properties once fd-radio-buttons are available.\n     * This allows us to propagate relevant attributes to associated buttons.\n     */\n    ngAfterViewInit(): void {\n        setTimeout(() => {\n            this._initialSetup(this.contentRadioButtons);\n            this._initialSetup(this.viewRadioButtons);\n        });\n        super.ngAfterViewInit();\n    }\n\n    /** @hidden Destroys event subscription. */\n    ngOnDestroy(): void {\n        this._keyboardEventsManager?.destroy();\n    }\n\n    /** @hidden */\n    _getListItemDisabledValue(item: RadioGroupComponent['list'][number]): boolean {\n        return this.disabled || (typeof item === 'object' && !!(<SelectItem>item).disabled);\n    }\n\n    /** @hidden */\n    private _initialSetup(radioButtons: QueryList<RadioButtonComponent>): void {\n        if (!radioButtons || radioButtons?.length === 0) {\n            return;\n        }\n\n        this._keyboardEventsManager?.destroy();\n        this._keyboardEventsManager = new FocusKeyManager(radioButtons).withWrap().withHorizontalOrientation('ltr');\n\n        radioButtons.changes\n            .pipe(\n                startWith(radioButtons),\n                switchMap(() => {\n                    let firstEnabledButtonIndex = -1;\n                    const checkedEvents = radioButtons.map((button, i) => {\n                        if (this.list) {\n                            button.state = this.state;\n                        } else {\n                            this._setProperties(button);\n                        }\n\n                        this._selectUnselect(button);\n\n                        // finding first enabled button to set tabIndex=0\n                        if (!button.disabled && !this._disabled && firstEnabledButtonIndex < 0) {\n                            firstEnabledButtonIndex = i;\n                        }\n\n                        return button.checked.asObservable();\n                    });\n\n                    // accessibility requirement\n                    if (!this._selected && radioButtons && firstEnabledButtonIndex > -1) {\n                        radioButtons.toArray()[firstEnabledButtonIndex].setTabIndex(0);\n                    }\n                    return merge(...checkedEvents);\n                }),\n                takeUntilDestroyed(this._destroyRef)\n            )\n            .subscribe((ev) => this._selectedValueChanged(ev));\n    }\n\n    /**\n     * @hidden\n     * Selects given button, if value matches\n     * @param button\n     */\n    private _selectUnselect(button: RadioButtonComponent): void {\n        if (button.value !== this.value) {\n            button.unselect();\n\n            return;\n        }\n\n        // selected button\n        if (this._selected !== button) {\n            this._selected = button;\n        }\n\n        if (!button._isChecked) {\n            button.select();\n        }\n    }\n\n    /** @hidden Called every time a radio button is clicked, In content child as well as viewchild */\n    private _selectedValueChanged(button: RadioButtonComponent): void {\n        if (this._selected !== button) {\n            this._resetTabIndex(button);\n\n            if (this._selected) {\n                this._selected.unselect();\n            }\n\n            this._selected = button;\n            button.select();\n        }\n\n        this.value = button.value;\n        this.change.emit(button);\n        this.onTouched();\n    }\n\n    /** @hidden resets tabIndex for first radio in radio group. for accessibility tabIndex was set */\n    private _resetTabIndex(selectedRadio: RadioButtonComponent): void {\n        if (this.viewRadioButtons || this.contentRadioButtons) {\n            const radios = this.viewRadioButtons.length > 0 ? this.viewRadioButtons : this.contentRadioButtons;\n            radios.forEach((radio) => {\n                if (radio !== selectedRadio && radio.tabIndex === 0) {\n                    radio.tabIndex = -1;\n                }\n            });\n        }\n    }\n\n    /**\n     * @hidden\n     * @param button Set initial values, used while content children creation\n     */\n    private _setProperties(button: RadioButtonComponent): void {\n        if (button) {\n            button.name = this.name;\n            button.state = this.state;\n            button.disabled = button.disabled ? button.disabled : this._disabled;\n        }\n    }\n\n    /** @hidden Make sure we have expected child. */\n    private _validateRadioButtons(): boolean {\n        return (\n            this.contentRadioButtons.filter((item) => !(item instanceof RadioButtonComponent || item['renderer']))\n                .length === 0\n        );\n    }\n}\n","<fd-form-group\n    [isInline]=\"isInline\"\n    role=\"radiogroup\"\n    [attr.aria-label]=\"ariaLabel\"\n    [attr.aria-labelledby]=\"ariaLabelledBy\"\n    [attr.aria-orientation]=\"isInline ? 'horizontal' : 'vertical'\"\n    [attr.aria-required]=\"required\"\n>\n    @if (!list) {\n        @for (radio of contentRadioButtons; track radio) {\n            <div fd-form-item>\n                <ng-template\n                    [ngTemplateOutlet]=\"radio?.renderer || null\"\n                    [ngTemplateOutletContext]=\"{\n                        name: name,\n                        value: radio.value,\n                        state: state,\n                        disabled: disabled || radio.disabled,\n                        ariaLabel: radio.ariaLabel,\n                        ariaLabelledBy: radio.ariaLabelledBy,\n                        ariaDescribedBy: radio.ariaDescribedBy,\n                        title: radio.title\n                    }\"\n                ></ng-template>\n            </div>\n        }\n    } @else {\n        <ng-template [ngTemplateOutlet]=\"listvalues\"></ng-template>\n    }\n</fd-form-group>\n<ng-template #listvalues>\n    @if (hasNoValue) {\n        <div fd-form-item>\n            <fdp-radio-button [name]=\"name\" value=\"None\" [state]=\"state\" [disabled]=\"disabled\" [forceRender]=\"true\">\n                {{ noValueLabel }}\n            </fdp-radio-button>\n        </div>\n    }\n    @for (item of list; track item) {\n        <div fd-form-item>\n            <fdp-radio-button\n                [name]=\"name\"\n                [value]=\"lookupValue(item)\"\n                [state]=\"state\"\n                [disabled]=\"_getListItemDisabledValue(item)\"\n                [forceRender]=\"true\"\n            >\n                {{ getDisplayValue(item) }}\n            </fdp-radio-button>\n        </div>\n    }\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { RadioGroupComponent } from './radio-group.component';\nimport { RadioButtonComponent } from './radio/radio.component';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n    imports: [RadioGroupComponent, RadioButtonComponent],\n    exports: [RadioGroupComponent, RadioButtonComponent]\n})\nexport class PlatformRadioGroupModule {}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { PlatformRadioGroupModule } from '../../../radio-group/radio-group.module';\nimport { BaseDynamicFormGeneratorControl } from '../../base-dynamic-form-generator-control';\nimport { dynamicFormFieldProvider, dynamicFormGroupChildProvider } from '../../providers/providers';\n\n@Component({\n    selector: 'fdp-dynamic-form-generator-radio',\n    templateUrl: './dynamic-form-generator-radio.component.html',\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    viewProviders: [dynamicFormFieldProvider, dynamicFormGroupChildProvider],\n    imports: [FormsModule, ReactiveFormsModule, PlatformRadioGroupModule]\n})\nexport class DynamicFormGeneratorRadioComponent extends BaseDynamicFormGeneratorControl {}\n","<ng-container [formGroup]=\"form\">\n    <ng-container [formGroupName]=\"formGroupName\">\n        <fdp-radio-group\n            [id]=\"id\"\n            [isInline]=\"formItem.guiOptions?.inline || false\"\n            [inlineLayout]=\"formItem.guiOptions?.inlineLayout\"\n            [name]=\"name\"\n            [list]=\"choices\"\n            [formControlName]=\"name\"\n        ></fdp-radio-group>\n    </ng-container>\n</ng-container>\n","import { Injectable } from '@angular/core';\n\nimport { ContentDensity } from '@fundamental-ngx/cdk/utils';\nimport { PlatformConfig } from '@fundamental-ngx/platform/shared';\n\n/**\n * Default options for Combobox\n */\n@Injectable({ providedIn: 'root' })\nexport class SelectConfig {\n    /**\n     * Content Density of element. 'cozy' | 'compact'\n     */\n    contentDensity: ContentDensity;\n\n    /** @hidden */\n    constructor(platformConfig: PlatformConfig) {\n        this.contentDensity = platformConfig.contentDensity;\n    }\n\n    /**\n     * Create Provider factory function\n     */\n    static createProviderFactory(obj: Partial<SelectConfig>): (platformConfig: PlatformConfig) => SelectConfig {\n        const useFactory = (platformConfig: PlatformConfig): SelectConfig =>\n            Object.assign(new SelectConfig(platformConfig), obj);\n        return useFactory;\n    }\n}\n","import { coerceNumberProperty } from '@angular/cdk/coercion';\nimport { ENTER } from '@angular/cdk/keycodes';\nimport {\n    AfterViewInit,\n    ContentChildren,\n    Directive,\n    ElementRef,\n    EventEmitter,\n    inject,\n    Input,\n    OnDestroy,\n    Output,\n    QueryList,\n    TemplateRef,\n    ViewChild\n} from '@angular/core';\n\nimport { fromEvent, Observable, Subject, Subscription } from 'rxjs';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { SingleDropdownValueControl } from '@fundamental-ngx/cdk/forms';\nimport {\n    ContentDensityService,\n    FocusEscapeDirection,\n    KeyUtil,\n    TemplateDirective,\n    warnOnce\n} from '@fundamental-ngx/cdk/utils';\nimport { FD_DEFAULT_ICON_FONT_FAMILY, IconFont } from '@fundamental-ngx/core/icon';\nimport { ListComponent } from '@fundamental-ngx/core/list';\nimport { MobileModeConfig } from '@fundamental-ngx/core/mobile-mode';\nimport { PopoverFillMode } from '@fundamental-ngx/core/shared';\nimport { CollectionBaseInput, isJsObject, isOptionItem, isString } from '@fundamental-ngx/platform/shared';\nimport { TextAlignment } from '../../combobox';\nimport { SelectOptionItem } from '../models/select.models';\nimport { SelectConfig } from '../select.config';\n\nexport type FdpSelectData<T> = SelectOptionItem[] | Observable<T[]> | T[];\n\n/**\n * @deprecated\n * `FdpSelectionChangeEvent` will be removed in future versions in favour of plain value emission\n */\nexport class FdpSelectionChangeEvent {\n    /**\n     * Select selection change event\n     * @param payload selected value\n     */\n    constructor(\n        public payload: any // Contains selected item\n    ) {\n        warnOnce('FdpSelectionChangeEvent will be removed in future versions in favour of plain value emission');\n    }\n}\n\n@Directive()\nexport abstract class BaseSelect\n    extends CollectionBaseInput\n    implements SingleDropdownValueControl, AfterViewInit, OnDestroy\n{\n    /** Provides maximum default height for the optionPanel */\n    @Input()\n    maxHeight = '250px';\n\n    /** Whether the select should be built on mobile mode */\n    @Input()\n    mobile = false;\n\n    /** Tells the select if we need to group items */\n    @Input()\n    group = false;\n\n    /** A field name to use to group data by (support dotted notation) */\n    @Input()\n    groupKey?: string;\n\n    /** The field to show data in secondary column */\n    @Input()\n    secondaryKey?: string;\n\n    /** Show the second column (Applicable for two columns layout) */\n    @Input()\n    showSecondaryText = false;\n\n    /** Glyph to add icon in the select component. */\n    @Input()\n    glyph = 'slim-arrow-down';\n\n    /** Glyph font family */\n    @Input()\n    glyphFont: IconFont = FD_DEFAULT_ICON_FONT_FAMILY;\n\n    /** The element to which the popover should be appended. */\n    @Input()\n    appendTo: ElementRef;\n\n    /** Trigger value */\n    @Input()\n    triggerValue: string;\n\n    /**\n     * Preset options for the select body width.\n     * * `at-least` will apply a minimum width to the body equivalent to the width of the control.\n     * * `equal` will apply a width to the body equivalent to the width of the control.\n     * * Leave blank for no effect.\n     */\n    @Input()\n    fillControlMode: PopoverFillMode = 'at-least';\n\n    /** Horizontally align text inside the second column (Applicable for two columns layout) */\n    @Input()\n    secondaryTextAlignment: TextAlignment = 'right';\n\n    /**\n     * Max width of list container\n     * */\n    @Input()\n    declare width: string;\n\n    /** Whether the select component is readonly. */\n    @Input()\n    readonly = false;\n\n    /** Placeholder for the select. Appears in the\n     * triggerbox if no option is selected. */\n    @Input()\n    declare placeholder: string;\n\n    /** Whether close the popover on outside click. */\n    @Input()\n    closeOnOutsideClick = true;\n\n    /** Custom template used to build control body. */\n    @Input()\n    controlTemplate: TemplateRef<any> | undefined;\n\n    /** Select Input Mobile Configuration */\n    @Input()\n    mobileConfig: MobileModeConfig = { hasCloseButton: true };\n\n    /**\n     * String rendered as first value in the popup which let the user to make 'no selection' from\n     * available list of values. When this option is active and use make this selection we save a\n     * NULL value\n     */\n    @Input()\n    noValueLabel: string;\n\n    /** Whether not to wrap text */\n    @Input()\n    noWrapText = false;\n\n    /** Turns on/off Adjustable Width feature */\n    @Input()\n    autoResize = false;\n\n    /** First Column ratio */\n    @Input()\n    set firstColumnRatio(value: number) {\n        this._firstColumnRatio = coerceNumberProperty(value);\n    }\n\n    get firstColumnRatio(): number {\n        return this._firstColumnRatio;\n    }\n\n    /** Secoond Column ratio */\n    @Input()\n    set secondColumnRatio(value: number) {\n        this._secondColumnRatio = coerceNumberProperty(value);\n    }\n\n    get secondColumnRatio(): number {\n        return this._secondColumnRatio;\n    }\n\n    /**\n     * Min width of list container\n     *\n     * */\n    @Input()\n    minWidth?: number;\n\n    /**\n     * Max width of list container\n     * */\n    @Input()\n    maxWidth?: number;\n\n    /**\n     * Action to perform when user shifts focus from the dropdown.\n     * - `close` will close the dropdown preserving previously selected value.\n     * - `closeAndSelect` will close the dropdown and select last focused dropdown item.\n     */\n    @Input()\n    tabOutStrategy: 'close' | 'closeAndSelect' = 'close';\n\n    /** Data for suggestion list */\n    @Input()\n    set list(value: any) {\n        if (value) {\n            this._optionItems = this._convertToOptionItems(value);\n        }\n    }\n    get list(): any {\n        return this._optionItems;\n    }\n\n    /** @hidden */\n    get canClose(): boolean {\n        return !(this.mobile && this.mobileConfig.approveButtonText);\n    }\n\n    /** Event emitted when item is selected. */\n    @Output()\n    selectionChange = new EventEmitter<FdpSelectionChangeEvent>();\n\n    /** @hidden */\n    @ViewChild(ListComponent)\n    listComponent: ListComponent;\n\n    /** @hidden */\n    @ContentChildren(TemplateDirective)\n    customTemplates: QueryList<TemplateDirective>;\n\n    /** Custom Option item Template\n     * * @hidden\n     * */\n    _optionItemTemplate: TemplateRef<any>;\n\n    /**\n     * Custom Secondary item Template\n     * @hidden\n     * */\n    _secondaryItemTemplate: TemplateRef<any>;\n\n    /**\n     * Custom Selected option item Template\n     * @hidden\n     * */\n    _selectedItemTemplate: TemplateRef<any>;\n\n    /** @hidden */\n    _contentDensityService: ContentDensityService;\n\n    /**\n     * List of option items\n     * @hidden\n     * */\n    _optionItems: SelectOptionItem[];\n\n    /** @hidden */\n    _subscriptions = new Subscription();\n\n    /** @hidden */\n    protected readonly selectConfig = inject(SelectConfig);\n\n    /** @hidden */\n    private _searchInputElement: ElementRef;\n\n    /** Whether the select is opened. */\n    private _isOpen = false;\n\n    /**\n     * Need for opening mobile version\n     *\n     * @hidden\n     */\n    private _openChange = new Subject<boolean>();\n\n    /** @hidden */\n    private _dsSubscription?: Subscription;\n\n    /** @hidden */\n    private _element: HTMLElement = this.elementRef.nativeElement;\n\n    /** @hidden */\n    private _firstColumnRatio: number;\n\n    /** @hidden */\n    private _secondColumnRatio: number;\n\n    /** @hidden */\n    ngAfterViewInit(): void {\n        this._initWindowResize();\n        this._assignCustomTemplates();\n        super.ngAfterViewInit();\n    }\n\n    /** @hidden */\n    ngOnDestroy(): void {\n        super.ngOnDestroy();\n\n        this._subscriptions.unsubscribe();\n\n        if (this._dsSubscription) {\n            this._dsSubscription.unsubscribe();\n        }\n    }\n\n    /** Is empty search field */\n    get isEmptyValue(): boolean {\n        return this.value.trim().length === 0;\n    }\n\n    /** @hidden\n     * Close list * */\n    close(event: MouseEvent | null = null, forceClose: boolean = false): void {\n        if (event) {\n            const target = event.target as HTMLInputElement;\n            if (target && target.id === this.id) {\n                return;\n            }\n        }\n\n        if (this._isOpen && (forceClose || this.canClose)) {\n            this._isOpen = false;\n            this._openChange.next(this._isOpen);\n            this.markForCheck();\n            this.onTouched();\n        }\n    }\n\n    /** @hidden */\n    showList(isOpen: boolean): void {\n        if (this._isOpen !== isOpen) {\n            this._isOpen = isOpen;\n            this.onTouched();\n            this._openChange.next(isOpen);\n        }\n\n        this.detectChanges();\n    }\n\n    /** @hidden */\n    handlePressEnter(event: KeyboardEvent, value: SelectOptionItem): void {\n        if (!KeyUtil.isKeyCode(event, ENTER)) {\n            return;\n        }\n\n        this.setValue(value);\n    }\n\n    /** Method passed to list component */\n    handleListFocusEscape(direction: FocusEscapeDirection): void {\n        if (direction === 'up') {\n            this._searchInputElement.nativeElement.focus();\n        }\n    }\n\n    /** @hidden */\n    protected setValue(newValue: any, emitOnChange = true): void {\n        if (newValue !== this._value) {\n            this.writeValue(newValue);\n            if (emitOnChange) {\n                this.onChange(this.value);\n                this.onTouched();\n                this.selectionChange.emit({ payload: this.value });\n            }\n            this.markForCheck();\n        }\n    }\n\n    /** @hidden */\n    private _initWindowResize(): void {\n        this._getOptionsListWidth();\n\n        if (!this.autoResize) {\n            return;\n        }\n\n        fromEvent(window, 'resize')\n            .pipe(takeUntilDestroyed(this._destroyed))\n            .subscribe(() => this._getOptionsListWidth());\n    }\n\n    /** @hidden */\n    private _getOptionsListWidth(): void {\n        const body = document.body;\n        const rect = this._element.getBoundingClientRect();\n        const scrollBarWidth = body.offsetWidth - body.clientWidth;\n        this.maxWidth = window.innerWidth - scrollBarWidth - rect.left;\n        this.minWidth = rect.width - 2;\n    }\n\n    /**\n     * Convert original data to OptionItems Interface\n     * @hidden\n     */\n    private _convertToOptionItems(items: any[]): SelectOptionItem[] {\n        const item = items[0];\n\n        const elementTypeIsOptionItem = isOptionItem(item);\n        if (elementTypeIsOptionItem) {\n            return items as SelectOptionItem[];\n        }\n\n        const elementTypeIsObject = isJsObject(item);\n        if (elementTypeIsObject) {\n            return this._convertObjectsToOptionItems(items);\n        }\n\n        const elementTypeIsString = isString(item);\n        if (elementTypeIsString) {\n            return this._convertPrimitiveToOptionItems(items);\n        }\n\n        return [];\n    }\n\n    /**\n     * Convert data to OptionItems Interface\n     * @hidden\n     */\n    private _convertObjectsToOptionItems(items: any[]): SelectOptionItem[] {\n        if (this.showSecondaryText && this.secondaryKey) {\n            return this._convertObjectsToSecondaryOptionItems(items);\n        } else {\n            return this._convertObjectsToDefaultOptionItems(items);\n        }\n    }\n\n    /**\n     * Convert object[] data to Secondary OptionItems Interface\n     * @hidden\n     */\n    private _convertObjectsToSecondaryOptionItems<K>(items: K[]): SelectOptionItem[] {\n        const selectItems: SelectOptionItem[] = [];\n\n        for (let i = 0; i < items.length; i++) {\n            const value = items[i];\n            selectItems.push({\n                label: this.displayValue(value),\n                secondaryText: this.objectGet(value, this.secondaryKey),\n                value: this.lookupValue(value)\n            });\n        }\n\n        return selectItems;\n    }\n\n    /**\n     * Convert Primitive data(Boolean, String, Number) to OptionItems Interface\n     * @hidden\n     */\n    private _convertPrimitiveToOptionItems(items: string[]): SelectOptionItem[] {\n        const selectItems: SelectOptionItem[] = [];\n\n        for (let i = 0; i < items.length; i++) {\n            const value = items[i];\n            selectItems.push({ label: value, value });\n        }\n\n        return selectItems;\n    }\n\n    /**\n     * Convert object[] to OptionItems Interface (Default)\n     * @hidden\n     */\n    private _convertObjectsToDefaultOptionItems(items: any[]): SelectOptionItem[] {\n        const selectItems: SelectOptionItem[] = [];\n\n        for (let i = 0; i < items.length; i++) {\n            const value = items[i];\n            selectItems.push({\n                label: this.displayValue(value),\n                value\n            });\n        }\n\n        return selectItems;\n    }\n\n    /** @hidden\n     * Assign custom templates\n     * */\n    private _assignCustomTemplates(): void {\n        this.customTemplates.forEach((template) => {\n            switch (template.name()) {\n                case '_optionItemTemplate':\n                    this._optionItemTemplate = template.templateRef;\n                    break;\n                case '_secondaryItemTemplate':\n                    this._secondaryItemTemplate = template.templateRef;\n                    break;\n                case '_selectedItemTemplate':\n                    this._selectedItemTemplate = template.templateRef;\n                    break;\n            }\n        });\n    }\n}\n","import {\n    AfterViewChecked,\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    Component,\n    Input,\n    ViewChild,\n    ViewEncapsulation\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FD_FORM_FIELD_CONTROL } from '@fundamental-ngx/cdk/forms';\n\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { DynamicComponentService } from '@fundamental-ngx/cdk/utils';\nimport { IconComponent } from '@fundamental-ngx/core/icon';\nimport { ListSecondaryDirective } from '@fundamental-ngx/core/list';\nimport { SelectComponent as CoreSelect, SelectModule } from '@fundamental-ngx/core/select';\nimport { BaseSelect } from '../commons/base-select';\n\n@Component({\n    selector: 'fdp-select',\n    templateUrl: './select.component.html',\n    styleUrl: './select.component.scss',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    providers: [DynamicComponentService, { provide: FD_FORM_FIELD_CONTROL, useExisting: SelectComponent, multi: true }],\n    imports: [SelectModule, FormsModule, IconComponent, NgTemplateOutlet, NgClass, ListSecondaryDirective]\n})\nexport class SelectComponent extends BaseSelect implements AfterViewInit, AfterViewChecked {\n    /**\n     * Directly sets value to the component that at the ends up at writeValue as well fires\n     * change detections\n     */\n    @Input()\n    set value(newValue: any) {\n        this.setValue(newValue);\n    }\n    get value(): any {\n        return this._value;\n    }\n\n    /** Should select be inlined. */\n    @Input()\n    inline = true;\n\n    /** @hidden */\n    @ViewChild(CoreSelect, { static: true })\n    select: CoreSelect;\n\n    /** @hidden */\n    ngAfterViewInit(): void {\n        super.ngAfterViewInit();\n\n        // set columns ratio for 2\n        if (this.firstColumnRatio && this.secondColumnRatio) {\n            this._setColumnsRatio(this.firstColumnRatio, this.secondColumnRatio);\n        }\n\n        // set width to avoid resize\n        if (this.width) {\n            const controlItem = this.elementRef.nativeElement.querySelector('.fd-select__text-content') as HTMLElement;\n            controlItem.style.width = this.width;\n        }\n\n        // setting option items\n        this.select._options.forEach((option) => {\n            const optionItem = option._getHtmlElement();\n\n            // set maxWidth default is 40rem\n            if (this.maxWidth) {\n                optionItem.setAttribute('style', 'max-width: ' + this.maxWidth + 'px');\n            }\n            // by default text will be overlapped, below it will help to truncate\n            if (this.noWrapText) {\n                const listTitle = optionItem.querySelector('.fd-list__title');\n                if (listTitle) {\n                    const listTitleInnerHTML = listTitle.innerHTML;\n                    listTitle.setAttribute('title', listTitleInnerHTML);\n                    listTitle.setAttribute('aria-label', listTitleInnerHTML);\n                    listTitle.classList.add('fd-list__title--no-wrap');\n                }\n            }\n        });\n    }\n\n    /** @hidden */\n    ngAfterViewChecked(): void {\n        this.detectChanges();\n    }\n\n    /**\n     * Define is selected item selected\n     * @hidden\n     */\n    _isSelectedOptionItem(selectedItem: any): boolean {\n        return this.value === this.lookupValue(selectedItem);\n    }\n\n    /** @hidden */\n    _onSelection(value: any): void {\n        this.setValue(value);\n    }\n\n    /** @hidden */\n    _onOpenChange(isOpen: boolean): void {\n        if (isOpen) {\n            this.formMessage?._popover?.close();\n        }\n        this.formMessage?._popover?.setIgnoreTriggers(isOpen);\n    }\n\n    /** @hidden */\n    private _setColumnsRatio(firstColumnRatio: number, secondColumnRatio: number): void {\n        const totalProportions = firstColumnRatio + secondColumnRatio;\n        const firstColumnProportion = Math.round((firstColumnRatio / totalProportions) * 100);\n        const secondColumnProportion = 100 - firstColumnProportion;\n\n        // setting option items\n        this.select._options.forEach((option) => {\n            const optionItem = option._getHtmlElement();\n            const titleElement = <HTMLElement>optionItem.querySelector('[fd-list-title]');\n            this._setOptionAttribute(titleElement, firstColumnProportion);\n\n            const secondaryElement = <HTMLElement>optionItem.querySelector('[fd-list-secondary]');\n            this._setOptionAttribute(secondaryElement, secondColumnProportion);\n        });\n    }\n\n    /** @hidden */\n    private _setOptionAttribute(element: HTMLElement, proportion: number): void {\n        element.setAttribute('style', 'width: ' + proportion + '%; max-width: ' + proportion + '%');\n    }\n}\n","<fd-select\n    [placeholder]=\"placeholder\"\n    [glyph]=\"glyph\"\n    [glyphFont]=\"glyphFont\"\n    [disabled]=\"disabled\"\n    [readonly]=\"readonly\"\n    [required]=\"required\"\n    [closeOnOutsideClick]=\"closeOnOutsideClick\"\n    [controlTemplate]=\"controlTemplate\"\n    [appendTo]=\"appendTo\"\n    [fillControlMode]=\"fillControlMode\"\n    [maxHeight]=\"maxHeight\"\n    [attr.aria-disabled]=\"disabled || readonly\"\n    [attr.aria-labelledby]=\"ariaLabelledBy\"\n    [attr.tooltip]=\"value\"\n    [attr.aria-readonly]=\"readonly\"\n    [attr.role]=\"'listbox'\"\n    [value]=\"value\"\n    [state]=\"state\"\n    [stateMessage]=\"stateMessage\"\n    [advancedStateMessage]=\"advancedStateMessage\"\n    [mobile]=\"mobile\"\n    [mobileConfig]=\"mobileConfig\"\n    [inline]=\"inline\"\n    [(ngModel)]=\"value\"\n    [tabOutStrategy]=\"tabOutStrategy\"\n    (valueChange)=\"_onSelection($event)\"\n    (isOpenChange)=\"_onOpenChange($event)\"\n>\n    <ng-content></ng-content>\n    @if (noValueLabel) {\n        <li fd-option [disabled]=\"false\" [value]=\"null\">\n            {{ noValueLabel }}\n        </li>\n    }\n    @for (item of _optionItems; track item; let index = $index) {\n        <li\n            fd-option\n            [disabled]=\"!!item.disabled\"\n            [value]=\"item.value\"\n            [attr.aria-labelledby]=\"ariaLabel\"\n            [attr.aria-disabled]=\"disabled\"\n        >\n            @if (item.icon) {\n                <fd-icon [glyph]=\"item.icon\" class=\"fd-template-icon icon-margin\"></fd-icon>\n            }\n            <ng-template\n                [ngTemplateOutlet]=\"listItem\"\n                [ngTemplateOutletContext]=\"{ optionItem: item, index: index }\"\n            ></ng-template>\n            <ng-template\n                secondary\n                [ngTemplateOutlet]=\"secondaryTextSource\"\n                [ngTemplateOutletContext]=\"{ optionItem: item }\"\n            ></ng-template>\n        </li>\n    }\n</fd-select>\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #listItem>\n    @if (_isSelectedOptionItem(optionItem) && !!_selectedItemTemplate) {\n        <ng-template\n            [ngTemplateOutlet]=\"_selectedItemTemplate\"\n            [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n        ></ng-template>\n    }\n    @if (!(_isSelectedOptionItem(optionItem) && _selectedItemTemplate)) {\n        <ng-template\n            [ngTemplateOutlet]=\"optionItemSource\"\n            [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: index }\"\n        ></ng-template>\n    }\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #optionItemSource>\n    @if (!_optionItemTemplate) {\n        <span [innerHTML]=\"optionItem.label\"></span>\n    } @else {\n        <ng-template\n            [ngTemplateOutlet]=\"_optionItemTemplate\"\n            [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n        ></ng-template>\n    }\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" #secondaryTextSource>\n    @if (showSecondaryText) {\n        @if (!_secondaryItemTemplate) {\n            <span\n                [style.text-align]=\"secondaryTextAlignment\"\n                fd-list-secondary\n                [innerHTML]=\"optionItem.secondaryText\"\n            ></span>\n        } @else {\n            <ng-template\n                [ngTemplateOutlet]=\"_secondaryItemTemplate\"\n                [ngTemplateOutletContext]=\"{ $implicit: optionItem.value }\"\n            ></ng-template>\n        }\n    }\n</ng-template>\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { SelectComponent } from '../../../select/select/select.component';\nimport { BaseDynamicFormGeneratorControl } from '../../base-dynamic-form-generator-control';\nimport { SelectDynamicFormFieldItem } from '../../interfaces/dynamic-form-item';\nimport { dynamicFormFieldProvider, dynamicFormGroupChildProvider } from '../../providers/providers';\n\n@Component({\n    selector: 'fdp-dynamic-form-generator-select',\n    templateUrl: './dynamic-form-generator-select.component.html',\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    viewProviders: [dynamicFormFieldProvider, dynamicFormGroupChildProvider],\n    imports: [FormsModule, ReactiveFormsModule, SelectComponent]\n})\nexport class DynamicFormGeneratorSelectComponent extends BaseDynamicFormGeneratorControl<SelectDynamicFormFieldItem> {}\n","<ng-container [formGroup]=\"form\">\n    <ng-container [formGroupName]=\"formGroupName\">\n        <fdp-select\n            [width]=\"formItem.guiOptions?.additionalData?.width\"\n            [id]=\"id\"\n            [placeholder]=\"placeholder\"\n            [inline]=\"formItem.guiOptions?.inline !== false\"\n            [name]=\"name\"\n            [list]=\"formItem.choices\"\n            [formControlName]=\"name\"\n            [secondaryKey]=\"formItem.secondaryKey\"\n            [showSecondaryText]=\"formItem.showSecondaryText ? formItem.showSecondaryText : false\"\n            [secondaryTextAlignment]=\"formItem.secondaryTextAlignment ? formItem.secondaryTextAlignment : 'right'\"\n            [controlTemplate]=\"formItem.controlTemplate\"\n        ></fdp-select>\n    </ng-container>\n</ng-container>\n","import { Injectable } from '@angular/core';\n\nimport { ContentDensity } from '@fundamental-ngx/cdk/utils';\n\n/**\n * Default options for platform Switch\n */\n@Injectable({ providedIn: 'root' })\nexport class SwitchConfig {\n    /**\n     * Content Density of element. 'cozy' | 'compact'\n     */\n    contentDensity: ContentDensity;\n\n    /**\n     * Create Provider factory function\n     */\n    static createProviderFactory(obj: Partial<SwitchConfig>): () => SwitchConfig {\n        const useFactory = (): SwitchConfig => Object.assign(new SwitchConfig(), obj);\n        return useFactory;\n    }\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FD_FORM_FIELD_CONTROL } from '@fundamental-ngx/cdk/forms';\nimport { SwitchComponent as CoreSwitchComponent } from '@fundamental-ngx/core/switch';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { BaseInput } from '@fundamental-ngx/platform/shared';\nimport { SwitchConfig } from './switch.config';\n\n/** Switch change event instance */\nexport class SwitchChangeEvent {\n    /** The source Switch of the event. */\n    source: SwitchComponent;\n    /** The new `payload` value of the switch. */\n    payload: boolean;\n}\n\n@Component({\n    selector: 'fdp-switch',\n    templateUrl: './switch.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [{ provide: FD_FORM_FIELD_CONTROL, useExisting: SwitchComponent, multi: true }],\n    imports: [CoreSwitchComponent, FdTranslatePipe]\n})\nexport class SwitchComponent extends BaseInput {\n    /** Whether the switch is semantic */\n    @Input()\n    semantic = false;\n\n    /**\n     * Event fired when the state of the switch changes.\n     * *$event* can be used to retrieve the new state of the switch.\n     */\n    @Output()\n    readonly switchChange: EventEmitter<SwitchChangeEvent> = new EventEmitter<SwitchChangeEvent>();\n\n    /** value for switch control */\n    set value(selectValue: any) {\n        this.setValue(selectValue);\n    }\n    get value(): any {\n        return this.getValue();\n    }\n\n    /** @hidden\n     * tracking switch current value\n     */\n    switchCurrentValue = false;\n\n    /** @hidden */\n    constructor(protected _switchConfig: SwitchConfig) {\n        super();\n    }\n\n    /** update controller on switch state change */\n    onValueChange(modelValue: boolean): void {\n        this._updateModel(modelValue);\n        this.onTouched();\n        this.stateChanges.next('switch: onValueChange');\n    }\n\n    /** write value for ControlValueAccessor */\n    writeValue(value: any): void {\n        this.switchCurrentValue = value;\n        super.writeValue(value);\n    }\n\n    /** @hidden\n     * update model\n     */\n    private _updateModel(modelValue: boolean): void {\n        this._emitChangeEvent(modelValue);\n    }\n\n    /** @hidden\n     * Method to emit change event\n     */\n    private _emitChangeEvent(modelValue: boolean): void {\n        const event = new SwitchChangeEvent();\n        event.source = this;\n        event.payload = modelValue;\n\n        // setting value, it will call setValue()\n        this.value = modelValue;\n        this.switchChange.emit(event);\n    }\n}\n","<fd-switch\n    [id]=\"id\"\n    [required]=\"required\"\n    [name]=\"name\"\n    [disabled]=\"disabled\"\n    [semantic]=\"semantic\"\n    [ariaLabel]=\"ariaLabel || ('platformSwitch.ariaLabel' | fdTranslate)()\"\n    [ariaLabelledBy]=\"ariaLabelledBy\"\n    [checked]=\"switchCurrentValue\"\n    (checkedChange)=\"onValueChange($event)\"\n></fd-switch>\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { SwitchComponent } from '../../../switch/switch';\nimport { BaseDynamicFormGeneratorControl } from '../../base-dynamic-form-generator-control';\nimport { dynamicFormFieldProvider, dynamicFormGroupChildProvider } from '../../providers/providers';\n\n@Component({\n    selector: 'fdp-dynamic-form-generator-switch',\n    templateUrl: './dynamic-form-generator-switch.component.html',\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    viewProviders: [dynamicFormFieldProvider, dynamicFormGroupChildProvider],\n    imports: [FormsModule, ReactiveFormsModule, SwitchComponent]\n})\nexport class DynamicFormGeneratorSwitchComponent extends BaseDynamicFormGeneratorControl {}\n","<ng-container [formGroup]=\"form\">\n    <ng-container [formGroupName]=\"formGroupName\">\n        <fdp-switch\n            [id]=\"id\"\n            [name]=\"name\"\n            [semantic]=\"formItem.guiOptions?.additionalData?.semantic\"\n            [formControlName]=\"name\"\n        ></fdp-switch>\n    </ng-container>\n</ng-container>\n","import { DynamicFormGeneratorCheckboxComponent } from '../controls/dynamic-form-generator-checkbox/dynamic-form-generator-checkbox.component';\nimport { DynamicFormGeneratorDatepickerComponent } from '../controls/dynamic-form-generator-datepicker/dynamic-form-generator-datepicker.component';\nimport { DynamicFormGeneratorEditorComponent } from '../controls/dynamic-form-generator-editor/dynamic-form-generator-editor.component';\nimport { DynamicFormGeneratorInputComponent } from '../controls/dynamic-form-generator-input/dynamic-form-generator-input.component';\nimport { DynamicFormGeneratorMultiInputComponent } from '../controls/dynamic-form-generator-multi-input/dynamic-form-generator-multi-input.component';\nimport { DynamicFormGeneratorObjectStatusComponent } from '../controls/dynamic-form-generator-object-status/dynamic-form-generator-object-status.component';\nimport { DynamicFormGeneratorRadioComponent } from '../controls/dynamic-form-generator-radio/dynamic-form-generator-radio.component';\nimport { DynamicFormGeneratorSelectComponent } from '../controls/dynamic-form-generator-select/dynamic-form-generator-select.component';\nimport { DynamicFormGeneratorSwitchComponent } from '../controls/dynamic-form-generator-switch/dynamic-form-generator-switch.component';\nimport { FormComponentDefinition } from '../interfaces/form-component-definition';\n\nexport const DEFAULT_COMPONENTS_LIST: FormComponentDefinition[] = [\n    {\n        types: ['input', 'email', 'number', 'password'],\n        component: DynamicFormGeneratorInputComponent\n    },\n    {\n        types: ['checkbox'],\n        component: DynamicFormGeneratorCheckboxComponent\n    },\n    {\n        types: ['radio', 'confirm'],\n        component: DynamicFormGeneratorRadioComponent\n    },\n    {\n        types: ['editor', 'textarea'],\n        component: DynamicFormGeneratorEditorComponent\n    },\n    {\n        types: ['select', 'list'],\n        component: DynamicFormGeneratorSelectComponent\n    },\n    {\n        types: ['datepicker'],\n        component: DynamicFormGeneratorDatepickerComponent\n    },\n    {\n        types: ['switch'],\n        component: DynamicFormGeneratorSwitchComponent\n    },\n    {\n        types: ['multi-input'],\n        component: DynamicFormGeneratorMultiInputComponent\n    },\n    {\n        types: ['object-status'],\n        component: DynamicFormGeneratorObjectStatusComponent\n    }\n];\n","import { Injectable, Type } from '@angular/core';\nimport { BaseDynamicFormGeneratorControl } from './base-dynamic-form-generator-control';\nimport { DEFAULT_COMPONENTS_LIST } from './config/default-components-list';\nimport { FormComponentDefinition } from './interfaces/form-component-definition';\n\n/**\n * Since form generator service most probably will be provided by parent component,\n * so that forms map does not interfere with other form generators,\n * Components Accessor is a separate service with a global scope, which can be also provided per component.\n */\n@Injectable({\n    providedIn: 'root'\n})\nexport class FormGeneratorComponentsAccessorService {\n    /**\n     * @hidden\n     */\n    private _formComponentDefinitions: FormComponentDefinition[] = DEFAULT_COMPONENTS_LIST;\n\n    /**\n     * @description Adds custom component to the list of available components for the form generator items.\n     * @param component Angular component.\n     * @param types types of the form item.\n     */\n    addComponent(component: Type<BaseDynamicFormGeneratorControl>, types: string[]): boolean {\n        const bestMatchComponentIndex = this._formComponentDefinitions.findIndex((c) =>\n            c.types?.every((t) => types.includes(t))\n        );\n\n        if (bestMatchComponentIndex > -1) {\n            this._formComponentDefinitions[bestMatchComponentIndex].component = component;\n            return true;\n        }\n\n        // Try to find component in types key. There might be some unique cases when new component might replace multiple.\n        const existingComponents = this._formComponentDefinitions.filter((c) =>\n            c.types?.filter((t) => types.includes(t))\n        );\n\n        existingComponents.forEach((existingComponent, index) => {\n            existingComponent.types = existingComponent.types?.filter((t) => !types.includes(t));\n            this._formComponentDefinitions[index] = existingComponent;\n        });\n\n        this._formComponentDefinitions.push({\n            types,\n            component\n        });\n\n        return true;\n    }\n\n    /**\n     * @description Returns best-matched component based on provided `type` argument\n     * @param type form item type\n     * @returns @see FormComponentDefinition Component definition for the form item\n     */\n    getComponentDefinitionByType(type: string): FormComponentDefinition | undefined {\n        return this._formComponentDefinitions.find((c) => c.types?.includes(type));\n    }\n}\n","import { HintOptions } from '@fundamental-ngx/platform/shared';\nimport {\n    DynamicFormFieldGroup,\n    DynamicFormFieldGroupMap,\n    DynamicFormFieldItem,\n    DynamicFormItem,\n    DynamicFormItemMap\n} from './interfaces/dynamic-form-item';\n\n/** @hidden */\nexport function isHintOptions(opts: string | HintOptions): opts is HintOptions {\n    return !!opts && typeof opts !== 'string';\n}\n\n/** @hidden */\nexport function mapFormItems(formItems?: DynamicFormItem[]): Map<string, DynamicFormItemMap> {\n    const mappedItems: Map<string, DynamicFormItemMap> = new Map();\n\n    if (!formItems) {\n        return mappedItems;\n    }\n\n    formItems.forEach((item, index) => {\n        const mappedItem = transformFormItem(item, index);\n\n        mappedItems.set(mappedItem.name, mappedItem);\n    });\n\n    return mappedItems;\n}\n\n/** @hidden */\nexport function transformFormItem(\n    item: DynamicFormItem,\n    index: number\n): DynamicFormFieldGroupMap | DynamicFormFieldItem {\n    if (isFormGroupItem(item)) {\n        const mappedItem = Object.assign({}, item, { items: mapFormItems(item.items) });\n        mappedItem.rank = mappedItem.rank || index;\n        return mappedItem;\n    } else {\n        item.rank = item.rank || index;\n    }\n    return item;\n}\n\n/**\n * Is current form item is a field item.\n * @param item form item.\n * @returns is current form item is a field.\n */\nexport function isFormFieldItem(item: any): item is DynamicFormFieldItem {\n    return !!(item as DynamicFormFieldItem).type;\n}\n\n/**\n * Is current form item is a group item.\n * @param item form item.\n * @returns is current form item is a group.\n */\n/** @hidden */\nexport function isFormGroupItem(item: any): item is DynamicFormFieldGroup {\n    return !!(item as DynamicFormFieldGroup).items;\n}\n\n/** @hidden */\nexport function getParentItem(path: string[], rootItems: Map<string, DynamicFormItemMap>): DynamicFormItemMap | null {\n    return path.reduce((acc: DynamicFormItemMap | null, chunk) => {\n        const parent = acc === null ? rootItems : acc.items;\n        return parent.get(chunk) || null;\n    }, null);\n}\n","import { DestroyRef, Inject, Injectable, Optional, SkipSelf, Type, inject } from '@angular/core';\nimport { AsyncValidatorFn, FormBuilder, Validators } from '@angular/forms';\nimport { cloneDeep, isFunction, merge, selectStrategy } from '@fundamental-ngx/cdk/utils';\n\nimport { debounceTime } from 'rxjs/operators';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { SelectItem } from '@fundamental-ngx/platform/shared';\nimport { BaseDynamicFormGeneratorControl } from './base-dynamic-form-generator-control';\nimport { DEFAULT_VALIDATION_ERRORS } from './config/default-validation-errors';\nimport { DynamicFormControl, DynamicFormControlGroup, DynamicFormGroupControl } from './dynamic-form-control';\nimport { FormGeneratorComponentsAccessorService } from './form-generator-components-accessor.service';\nimport { isFormFieldItem } from './helpers';\nimport { DynamicFormGroup } from './interfaces/dynamic-form-group';\nimport {\n    DynamicFormFieldItem,\n    DynamicFormItem,\n    DynamicFormItemChoiceTypes,\n    DynamicFormItemMap,\n    DynamicFormValue,\n    PreparedDynamicFormFieldItem\n} from './interfaces/dynamic-form-item';\nimport { FormComponentDefinition } from './interfaces/form-component-definition';\nimport { FormGeneratorConfig } from './interfaces/form-generator-module-config';\nimport { FORM_GENERATOR_CONFIG, FORM_GENERATOR_ITEM_CONFIG, defaultFormGeneratorConfig } from './providers/providers';\n\n/**\n * @description Form generator service\n */\n@Injectable()\nexport class FormGeneratorService {\n    /**\n     * Map of generated forms to access later.\n     */\n    readonly forms: Map<string, DynamicFormGroup> = new Map<string, DynamicFormGroup>();\n\n    /**\n     * Predefined validation error messages.\n     */\n    validationErrorHints = DEFAULT_VALIDATION_ERRORS;\n\n    /** @hidden */\n    private readonly _config: FormGeneratorConfig = defaultFormGeneratorConfig;\n\n    /**\n     * @hidden\n     * An RxJS Subject that will kill the data stream upon component’s destruction (for unsubscribing)\n     */\n    private readonly _destroyRef = inject(DestroyRef);\n\n    /** @hidden */\n    constructor(\n        private _fb: FormBuilder,\n        private _componentsAccessor: FormGeneratorComponentsAccessorService,\n        @Optional()\n        @SkipSelf()\n        @Inject(FORM_GENERATOR_ITEM_CONFIG)\n        private _defaultItemConfig: Partial<DynamicFormFieldItem>,\n        @Optional()\n        @SkipSelf()\n        @Inject(FORM_GENERATOR_CONFIG)\n        private _providedConfig: Partial<FormGeneratorConfig>\n    ) {\n        this._config = merge(cloneDeep(this._config), cloneDeep(this._providedConfig));\n    }\n\n    /**\n     * @description Generates `FormGroup` class with the list of `DynamicFormControl` control classes\n     * defined in `formItems` argument.\n     * @param formName Form name.\n     * @param formItems the list of form items which used for form control generation.\n     * @returns `FormGroup` class with the list of `DynamicFormControl` control classes.\n     */\n    async generateForm(formName: string, formItems: Map<string, DynamicFormItemMap>): Promise<DynamicFormGroup> {\n        const existingForm = this.forms.get(formName);\n        const form = this._fb.group({}) as DynamicFormGroup;\n\n        const defaultFormGroup = new DynamicFormControlGroup(\n            {\n                name: this._config.ungroupedControlsName\n            },\n            {}\n        );\n\n        defaultFormGroup.formItem.items = new Map();\n\n        formItems = this._transformFormItems(formItems);\n\n        formItems.forEach((formItem) => {\n            if (!isFormFieldItem(formItem)) {\n                if (!formItem.items || formItem.items.size === 0) {\n                    return;\n                }\n\n                const group = new DynamicFormControlGroup(formItem, {});\n\n                formItem.items.forEach((groupFormItem) => {\n                    const groupFormControl = this._generateDynamicFormItem(\n                        groupFormItem as PreparedDynamicFormFieldItem,\n                        form\n                    );\n\n                    if (!groupFormControl) {\n                        return;\n                    }\n\n                    group.addControl(groupFormItem.name, groupFormControl);\n\n                    groupFormControl.updateValueAndValidity({ emitEvent: false });\n                });\n\n                form.addControl(formItem.name, group);\n                return;\n            }\n\n            const formControl = this._generateDynamicFormItem(formItem as PreparedDynamicFormFieldItem, form);\n\n            if (!formControl) {\n                return;\n            }\n\n            defaultFormGroup.addControl(formItem.name, formControl);\n\n            defaultFormGroup.formItem.items?.set(formItem.name, formItem);\n\n            formControl.updateValueAndValidity({ emitEvent: false });\n        });\n\n        const formControlNames = Object.keys(defaultFormGroup.controls);\n\n        form.addControl(this._config.ungroupedControlsName, defaultFormGroup);\n\n        // After we created initial form, we need to get dynamic labels, choices and value\n        for (const key of formControlNames) {\n            const formItem = formItems.get(key);\n\n            if (!isFormFieldItem(formItem)) {\n                continue;\n            }\n\n            const [[message, placeholder, defaultValue], choices] = await Promise.all([\n                this._getFormItemProperties<[string, string, any]>(formItem, defaultFormGroup, [\n                    'message',\n                    'placeholder',\n                    'default'\n                ]),\n                this._getFormItemChoices(formItem, defaultFormGroup)\n            ]);\n\n            formItem.message = message;\n            formItem.placeholder = placeholder;\n            formItem.default = defaultValue;\n            formItem.choices = choices;\n\n            // Update form value since it might be changed\n            defaultFormGroup.controls[formItem.name].setValue(formItem.default);\n\n            defaultFormGroup.controls[key].formItem = formItem as PreparedDynamicFormFieldItem;\n        }\n\n        Object.keys(form.controls).forEach((controlName) => {\n            const newControl = form.get(controlName) as DynamicFormControlGroup;\n            const oldControl = existingForm?.get(controlName) as DynamicFormControlGroup;\n            this._cloneOldFormGroup(newControl, oldControl);\n        });\n\n        this.forms.set(formName, form);\n\n        return form;\n    }\n\n    /**\n     * Adds new control to a form.\n     * @param control Control to add\n     * @param form Form of the control to be added.\n     * @param path Group path.\n     */\n    async addControl(control: DynamicFormItem, form: DynamicFormGroup, path: string[] = []): Promise<void> {\n        const formGroup = this.getFormControl(form, ...path);\n\n        if (formGroup instanceof DynamicFormControlGroup) {\n            const formControl = this._generateDynamicFormItem(control as PreparedDynamicFormFieldItem, form);\n            formGroup.addControl(control.name, formControl);\n            return;\n        }\n    }\n\n    /**\n     * Removes the control with given name from the form.\n     * @param controlName\n     * @param path\n     */\n    removeControl(controlName: string, form: DynamicFormGroup, path: string[] = []): void {\n        const formGroup = this.getFormControl(form, ...path);\n\n        if (formGroup instanceof DynamicFormControlGroup) {\n            formGroup.removeControl(controlName);\n        }\n    }\n\n    /**\n     * @description Returns form value with applied filters and transformers.\n     * @param form Form generator form\n     * @param renderValue Whether or not form value will be used for rendering purposes.\n     * @returns form value object.\n     */\n    async getFormValue(\n        form: DynamicFormGroup | DynamicFormControlGroup,\n        renderValue = false\n    ): Promise<DynamicFormValue> {\n        await this._triggerFieldsOnchange(form);\n\n        const formValue = structuredClone(form.value);\n\n        for (const [i, control] of Object.entries(form.controls)) {\n            const formItem = control.formItem;\n\n            if (!isFormFieldItem(formItem)) {\n                formValue[i] = await this.getFormValue(control as DynamicFormControlGroup, renderValue);\n                continue;\n            }\n\n            if (formItem.shouldShow === false) {\n                delete formValue[i];\n                continue;\n            }\n\n            if (formItem.transformer) {\n                const obj = formItem.transformer(formValue[i], formValue, formItem);\n                formValue[i] = await this._getFunctionValue(obj);\n            }\n\n            if (renderValue && formItem.valueRenderer) {\n                const obj = formItem.valueRenderer(formValue[i], formValue, formItem);\n                formValue[i] = await this._getFunctionValue(obj);\n            }\n\n            if (renderValue && formItem['controlType'] === 'password') {\n                formValue[i] = this._formatPasswordValue(formValue[i]);\n            }\n        }\n\n        return this._getFormValueWithoutUngrouped(formValue);\n    }\n\n    /**\n     * @description Adds custom component to the list of available components for the form generator items.\n     * @param component Angular component.\n     * @param types types of the form item.\n     */\n    addComponent(component: Type<BaseDynamicFormGeneratorControl>, types: string[]): boolean {\n        return this._componentsAccessor.addComponent(component, types);\n    }\n\n    /**\n     * @description Returns best-matched component based on provided `type` argument\n     * @param type form item type\n     * @returns @see FormComponentDefinition Component definition for the form item\n     */\n    getComponentDefinitionByType(type: string): FormComponentDefinition | undefined {\n        return this._componentsAccessor.getComponentDefinitionByType(type);\n    }\n\n    /**\n     * @returns Object of available errors, where key is an error type,\n     * and it's value is a display text.\n     */\n    getValidationErrorHints(key: string): string {\n        return this.validationErrorHints[key];\n    }\n\n    /**\n     * @description Adds custom error hint defined by user.\n     * @param type error type from validator.\n     * @param value display text.\n     */\n    addValidationErrorHint(type: string, value: string): void {\n        this.validationErrorHints[type] = value;\n    }\n\n    /**\n     * @description Checks if some items of the form should be hidden,\n     * or visible based on `when` method result.\n     * @param form\n     * @returns `Set` where key is item name, and boolean value if field needs to be shown.\n     */\n    async checkVisibleFormItems(form: DynamicFormGroup): Promise<{ [key: string]: boolean }> {\n        const formValue = this._getFormValueWithoutUngrouped(structuredClone(form.value));\n        return await this._checkFormControlsVisibility(form, formValue);\n    }\n\n    /**\n     * Method for searching a form control inside form group. Can also search inside ungrouped form group.\n     * @param form Form group.\n     * @param controlNames Name of the form control.\n     * @returns Found form control.\n     */\n    getFormControl(form: DynamicFormGroup, ...controlNames: string[]): DynamicFormGroupControl {\n        controlNames = controlNames.reduce((names: string[], name) => {\n            names = [...names, ...name.split(this._config.controlNameSeparator)];\n\n            return names;\n        }, []);\n\n        let control = form?.get(controlNames);\n\n        // If no control found, try to find it in ungrouped group\n        if (!control) {\n            control = form?.get([this._config.ungroupedControlsName, ...controlNames]);\n        }\n\n        return control as DynamicFormGroupControl;\n    }\n\n    /** Resets the form to it's initial state. */\n    resetForm(form: DynamicFormGroup): void {\n        for (const control of Object.values(form.controls)) {\n            if (control instanceof DynamicFormControlGroup) {\n                this.resetForm(control);\n                return;\n            }\n            // Get default value\n            control.setValue(control.formItem.default);\n        }\n    }\n\n    /** @hidden */\n    _getFormValueWithoutUngrouped(value: any): any {\n        if (value[this._config.ungroupedControlsName]) {\n            const ungroupedGroupValue: Record<string, any> = value[this._config.ungroupedControlsName];\n            for (const [fieldName, fieldValue] of Object.entries(ungroupedGroupValue)) {\n                value[fieldName] = fieldValue;\n            }\n        }\n        delete value[this._config.ungroupedControlsName];\n\n        return value;\n    }\n\n    /** @hidden */\n    private _assignFormItemValidators(\n        formItem: PreparedDynamicFormFieldItem,\n        form: DynamicFormGroup\n    ): PreparedDynamicFormFieldItem {\n        let validator: AsyncValidatorFn | null = null;\n\n        if (isFunction(formItem.validate)) {\n            validator = async (control) => {\n                const obj = formItem.validate!(control.value, this._getFormValueWithoutUngrouped(form));\n\n                const result = await this._getFunctionValue(obj);\n\n                const returnObj = {};\n\n                returnObj[`${(<DynamicFormControl>control).formItem.name}Validator`] =\n                    typeof result === 'boolean' ? true : result;\n\n                return result === null ? result : returnObj;\n            };\n\n            formItem.asyncValidators = formItem.asyncValidators || [];\n            formItem.asyncValidators =\n                typeof formItem.asyncValidators === 'function' ? [formItem.asyncValidators] : formItem.asyncValidators;\n\n            formItem.asyncValidators.push(validator);\n        }\n\n        formItem.validators = formItem.validators || [Validators.nullValidator];\n\n        formItem.required = formItem.required || formItem.validators.includes(Validators.required);\n\n        return formItem;\n    }\n\n    /** @hidden */\n    private _generateDynamicFormItem(\n        formItem: PreparedDynamicFormFieldItem,\n        form: DynamicFormGroup\n    ): DynamicFormControl | undefined {\n        const formItemComponentType = this.getComponentDefinitionByType(formItem.type);\n\n        if (!formItemComponentType) {\n            console.warn(`Form item '${formItem.name}' with type '${formItem.type}' has no defined component.\n            Please use 'addComponent' method in ${FormGeneratorService.name} to define appropriate relations.`);\n\n            return;\n        }\n\n        formItem = this._assignFormItemValidators(formItem, form);\n\n        const formControl = new DynamicFormControl(formItem.default, {\n            validators: formItem.validators,\n            asyncValidators: formItem.asyncValidators,\n            dynamicFormItem: formItem,\n            updateOn: 'change'\n        });\n\n        if (isFunction(formItem.onchange)) {\n            formControl.valueChanges\n                .pipe(debounceTime(50), takeUntilDestroyed(this._destroyRef))\n                .subscribe(async (value) => {\n                    const obj = formItem.onchange!(value, this.forms, formControl);\n\n                    await this._getFunctionValue(obj);\n                });\n        }\n\n        formControl.updateValueAndValidity({ emitEvent: false });\n\n        return formControl;\n    }\n\n    /** @hidden */\n    private async _checkFormControlsVisibility(\n        form: DynamicFormGroup | DynamicFormControlGroup,\n        formValue: any\n    ): Promise<{ [key: string]: boolean }> {\n        let shouldShowFields: { [key: string]: boolean } = {};\n        form = form instanceof DynamicFormControlGroup ? form : form;\n\n        for (const [key, control] of Object.entries(form.controls)) {\n            const formItem = control.formItem;\n\n            if (!isFormFieldItem(formItem)) {\n                const groupVisibleItems = await this._checkFormControlsVisibility(\n                    control as DynamicFormControlGroup,\n                    formValue\n                );\n\n                shouldShowFields = Object.assign(shouldShowFields, groupVisibleItems);\n                continue;\n            }\n\n            if (!formItem.when) {\n                shouldShowFields[key] = true;\n                continue;\n            }\n\n            const obj = formItem.when(formValue, this.forms, control);\n            shouldShowFields[key] = await this._getFunctionValue(obj);\n        }\n\n        return shouldShowFields;\n    }\n\n    /**\n     * @hidden\n     * @param formItem\n     * @param form\n     * @param key\n     * @returns\n     */\n    private async _getFormItemPropertyValue<T = string>(\n        formItem: DynamicFormFieldItem,\n        form: DynamicFormGroup,\n        key: keyof DynamicFormFieldItem\n    ): Promise<T> {\n        let value = formItem[key];\n\n        if (typeof value === 'function') {\n            const obj = value(this._getFormValueWithoutUngrouped(form));\n\n            value = await this._getFunctionValue(obj);\n        }\n\n        return (await this._getFunctionValue(value)) as T;\n    }\n\n    /** @hidden */\n    private async _getFormItemProperties<TTypes extends any[] = any[]>(\n        formItem: DynamicFormFieldItem,\n        form: DynamicFormGroup,\n        keys: string[]\n    ): Promise<TTypes> {\n        const promises: Promise<any>[] = [];\n        keys.forEach((key) => {\n            promises.push(this._getFormItemPropertyValue(formItem, form, key));\n        });\n        return (await Promise.all(promises)) as TTypes;\n    }\n\n    /**\n     * @hidden\n     * @param formItem\n     * @param form\n     * @returns\n     */\n    private async _getFormItemChoices(formItem: DynamicFormFieldItem, form: DynamicFormGroup): Promise<SelectItem[]> {\n        const defaultChoices = await this._getFormItemPropertyValue<DynamicFormItemChoiceTypes[]>(\n            formItem,\n            form,\n            'choices'\n        );\n\n        if (!defaultChoices) {\n            return [];\n        }\n\n        return defaultChoices.map((c: string | number | SelectItem) =>\n            typeof c === 'object' ? c : ({ label: c, value: c } as SelectItem)\n        ) as SelectItem[];\n    }\n\n    /**\n     * @hidden\n     * @description Returns value from Promise-like, Observable-like, simple function or just some object.\n     * @param obj\n     * @returns\n     */\n    private async _getFunctionValue(obj: any): Promise<any> {\n        const strategy = selectStrategy(obj);\n\n        let result: any;\n\n        await strategy.createSubscription(obj, (value: any) => {\n            result = value;\n        });\n\n        if (isFunction(result)) {\n            await this._getFunctionValue(result);\n        }\n\n        return result;\n    }\n\n    /** @hidden */\n    private _formatPasswordValue(password: string): string {\n        return '*'.repeat(password?.length);\n    }\n\n    /** @hidden */\n    private _getMergedFormFieldItemConfig(formItem: DynamicFormItemMap): DynamicFormItemMap {\n        return merge(cloneDeep(this._defaultItemConfig), formItem) as DynamicFormItemMap;\n    }\n\n    /** @hidden */\n    private _transformFormItems(formItems: Map<string, DynamicFormItemMap>): Map<string, DynamicFormItemMap> {\n        formItems.forEach((item, index) => {\n            if (!isFormFieldItem(item)) {\n                return;\n            }\n\n            formItems.set(index, this._getMergedFormFieldItemConfig(item));\n        });\n\n        return formItems;\n    }\n\n    /** @hidden */\n    private async _triggerFieldsOnchange(form: DynamicFormGroup | DynamicFormControlGroup): Promise<void> {\n        for (const control of Object.values(form.controls)) {\n            const formItem = control.formItem;\n\n            if (!isFormFieldItem(formItem)) {\n                await this._triggerFieldsOnchange(control as DynamicFormControlGroup);\n                continue;\n            }\n\n            if (formItem.onchange) {\n                const obj = formItem.onchange(control.value as any, this.forms, control as DynamicFormControl);\n                await this._getFunctionValue(obj);\n            }\n        }\n    }\n\n    /** @hidden */\n    private _cloneOldFormGroup(newGroup: DynamicFormControlGroup, oldGroup?: DynamicFormControlGroup): void {\n        Object.keys(newGroup.controls).forEach((controlName) => {\n            const control = newGroup.get(controlName);\n            const oldControl = oldGroup?.get(controlName) as DynamicFormControlGroup;\n            if (!oldControl) {\n                return;\n            }\n            if (control instanceof DynamicFormControlGroup) {\n                this._cloneOldFormGroup(control, oldControl);\n                return;\n            }\n\n            control?.setValue(oldControl.value, { emitEvent: false });\n\n            if (oldControl.touched) {\n                control?.markAsTouched();\n            }\n        });\n    }\n}\n","import { Directive, Inject, Injector, Input, OnInit, Optional, ViewContainerRef } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\n\nimport {\n    CONTENT_DENSITY_DIRECTIVE,\n    ContentDensityGlobalKeyword,\n    ContentDensityMode\n} from '@fundamental-ngx/core/content-density';\nimport { PlatformFormField, PlatformFormFieldControl } from '@fundamental-ngx/platform/shared';\nimport { Observable, of } from 'rxjs';\nimport { BaseDynamicFormGeneratorControl } from './base-dynamic-form-generator-control';\nimport { FormGeneratorService } from './form-generator.service';\nimport { PreparedDynamicFormFieldItem } from './interfaces/dynamic-form-item';\n\n/**\n * Dynamic form control directive represents a renderer of the dynamic components\n * based on the information provided in `formItem` input\n */\n@Directive({\n    selector: '[fdpDynamicFormControl]',\n    standalone: true\n})\nexport class DynamicFormControlDirective implements OnInit {\n    /**\n     * @description @see DynamicFormItem\n     */\n    @Input() formItem: PreparedDynamicFormFieldItem;\n\n    /**\n     * @description Represents form control id.\n     */\n    @Input()\n    id: string;\n\n    /**\n     * @description Represents form control name.\n     */\n    @Input() name: string;\n\n    /**\n     * @description Reference to the @see FormGroup class.\n     */\n    @Input() form: FormGroup;\n\n    /** Form group name path */\n    @Input() formGroupNamePath: string;\n\n    /**\n     * @description Reference to the @see FormFieldComponent\n     */\n    @Input() formField: PlatformFormField;\n\n    /**\n     * Control field instance.\n     */\n    formFieldControl: PlatformFormFieldControl;\n\n    /** @hidden */\n    constructor(\n        private readonly _formGeneratorService: FormGeneratorService,\n        private readonly _vcRef: ViewContainerRef,\n        private readonly _injector: Injector,\n        @Optional() @Inject(CONTENT_DENSITY_DIRECTIVE) private contentDensityDirective: Observable<ContentDensityMode>\n    ) {}\n\n    /** @hidden */\n    ngOnInit(): void {\n        const foundComponent = this._formGeneratorService.getComponentDefinitionByType(this.formItem.type);\n\n        if (!foundComponent) {\n            return;\n        }\n\n        this._vcRef.clear();\n\n        const componentRef = this._vcRef.createComponent<BaseDynamicFormGeneratorControl>(foundComponent.component, {\n            injector: Injector.create({\n                providers: [\n                    {\n                        provide: CONTENT_DENSITY_DIRECTIVE,\n                        useFactory: () => {\n                            if (this.formItem?.guiOptions?.contentDensity) {\n                                return of(this.formItem.guiOptions.contentDensity);\n                            }\n                            if (this.contentDensityDirective) {\n                                return this.contentDensityDirective;\n                            }\n                            return of(ContentDensityGlobalKeyword);\n                        }\n                    }\n                ],\n                parent: this._injector\n            })\n        });\n\n        componentRef.instance.formItem = this.formItem;\n        componentRef.instance.id = this.id; // This is also done from fdp-form-field\n        componentRef.instance.name = this.name;\n        componentRef.instance.form = this.form;\n        componentRef.instance.formField = this.formField;\n        componentRef.instance.formGroupName = this.formGroupNamePath;\n\n        this.formFieldControl = componentRef.instance as unknown as PlatformFormFieldControl;\n    }\n}\n","import { Directive, Inject, Input, Optional, TemplateRef } from '@angular/core';\nimport { FormError, FormErrorDescription, FormFieldErrorContext } from '@fundamental-ngx/platform/shared';\nimport { FDP_FORM_ERROR_DIRECTIVE } from './tokens';\n\n@Directive({\n    selector: '[fdpFormFieldErrorDescription]',\n    standalone: true\n})\nexport class FormFieldErrorDescriptionDirective<T = any> implements FormErrorDescription {\n    /** Used to connect data with model for typings support. */\n    @Input()\n    fdpFormFieldErrorDescriptionAs: T;\n\n    /** @hidden */\n    constructor(\n        public templateRef: TemplateRef<FormFieldErrorContext<T>>,\n        @Optional() @Inject(FDP_FORM_ERROR_DIRECTIVE) private _formFieldErrorDirective: FormError\n    ) {\n        this._formFieldErrorDirective?.registerDescription(this);\n    }\n\n    /** @hidden */\n    static ngTemplateContextGuard(\n        dir: FormFieldErrorDescriptionDirective,\n        ctx: FormFieldErrorContext<any>\n    ): ctx is FormFieldErrorContext<any> {\n        return true;\n    }\n}\n","import { Directive, Inject, Input, Optional, TemplateRef } from '@angular/core';\nimport { FormStates } from '@fundamental-ngx/cdk/forms';\nimport { FormError, FormErrorHeading, FormFieldErrorContext } from '@fundamental-ngx/platform/shared';\nimport { FDP_FORM_ERROR_DIRECTIVE } from './tokens';\n\n@Directive({\n    selector: '[fdpFormFieldErrorHeading]',\n    standalone: true\n})\nexport class FormFieldErrorHeadingDirective<T = any> implements FormErrorHeading {\n    /** Used to connect data with model for typings support. */\n    @Input()\n    fdpFormFieldErrorHeadingAs: T;\n\n    /** Error type. */\n    @Input()\n    fdpFormFieldErrorHeadingType: FormStates | undefined;\n\n    /** @hidden */\n    constructor(\n        public templateRef: TemplateRef<FormFieldErrorContext<T>>,\n        @Optional() @Inject(FDP_FORM_ERROR_DIRECTIVE) private _formFieldErrorDirective: FormError\n    ) {\n        this._formFieldErrorDirective?.registerHeading(this);\n    }\n\n    /** @hidden */\n    static ngTemplateContextGuard(\n        dir: FormFieldErrorHeadingDirective,\n        ctx: FormFieldErrorContext<any>\n    ): ctx is FormFieldErrorContext<any> {\n        return true;\n    }\n}\n","import {\n    ChangeDetectionStrategy,\n    Component,\n    ContentChildren,\n    forwardRef,\n    inject,\n    Input,\n    OnDestroy,\n    OnInit,\n    Provider,\n    QueryList,\n    ViewEncapsulation\n} from '@angular/core';\nimport { FD_FORM_FIELD } from '@fundamental-ngx/cdk/forms';\n\nimport {\n    ColumnLayout,\n    FormFieldGroup,\n    FormGroupContainer,\n    HintOptions,\n    PlatformFormField\n} from '@fundamental-ngx/platform/shared';\nimport { FORM_GROUP_CHILD_FIELD_TOKEN } from '../constants';\n\nconst formFieldGroupProvider: Provider = {\n    provide: FormFieldGroup,\n    useExisting: forwardRef(() => FormFieldGroupComponent)\n};\n\nconst formGroupChildProvider: Provider = {\n    provide: FORM_GROUP_CHILD_FIELD_TOKEN,\n    useExisting: forwardRef(() => FormFieldGroupComponent)\n};\n\n@Component({\n    selector: 'fdp-form-field-group',\n    template: ` <ng-content></ng-content>`,\n    styleUrl: './form-field-group.component.scss',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    providers: [formFieldGroupProvider, formGroupChildProvider],\n    standalone: true\n})\nexport class FormFieldGroupComponent implements FormFieldGroup, OnInit, OnDestroy {\n    /**\n     * Group header title\n     */\n    @Input()\n    label: string;\n\n    /** Group's form name */\n    @Input()\n    formName: string;\n\n    /**\n     * Form Group Container to bind the Form-Field-Group to.\n     * This will override default value injected by constructor\n     */\n    @Input()\n    formGroupContainer: FormGroupContainer | null = inject(FormGroupContainer, { optional: true });\n\n    /**\n     * Defines label's column layout.\n     */\n    @Input()\n    set labelColumnLayout(value: ColumnLayout | undefined) {\n        if (value) {\n            this._labelColumnLayout = value;\n        }\n    }\n    get labelColumnLayout(): ColumnLayout {\n        return this._labelColumnLayout;\n    }\n    /**\n     * Defines field's column layout.\n     */\n    @Input()\n    set fieldColumnLayout(value: ColumnLayout | undefined) {\n        if (value) {\n            this._fieldColumnLayout = value;\n        }\n    }\n\n    get fieldColumnLayout(): ColumnLayout {\n        return this._fieldColumnLayout;\n    }\n    /**\n     * Defines gap column layout.\n     */\n    @Input()\n    set gapColumnLayout(value: ColumnLayout | undefined) {\n        if (value) {\n            this._gapColumnLayout = value;\n        }\n    }\n    get gapColumnLayout(): ColumnLayout {\n        return this._gapColumnLayout;\n    }\n    /**\n     * Describes hint options for group header\n     */\n    @Input()\n    hintOptions?: HintOptions;\n    /**\n     * Get form fields wrapped into form field group\n     */\n    @ContentChildren(FD_FORM_FIELD, { descendants: true })\n    fields: QueryList<PlatformFormField>;\n\n    /** @hidden */\n    private _labelColumnLayout: ColumnLayout;\n\n    /** @hidden */\n    private _fieldColumnLayout: ColumnLayout;\n\n    /** @hidden */\n    private _gapColumnLayout: ColumnLayout;\n\n    /** @hidden */\n    ngOnInit(): void {\n        this._addToFormGroup();\n        this._setDefaultLayout();\n    }\n\n    /** @hidden */\n    ngOnDestroy(): void {\n        this._removeFromFormGroup();\n    }\n\n    /** @hidden */\n    private _setDefaultLayout(): void {\n        // If layout already defined, no need to set default one.\n        if (this.labelColumnLayout) {\n            return;\n        }\n\n        this.labelColumnLayout = this.formGroupContainer?.labelColumnLayout;\n        this.fieldColumnLayout = this.formGroupContainer?.fieldColumnLayout;\n        this.gapColumnLayout = this.formGroupContainer?.gapColumnLayout;\n    }\n\n    /** @hidden */\n    private _addToFormGroup(): void {\n        if (!this.formGroupContainer) {\n            return;\n        }\n        this.formGroupContainer.addFormFieldGroup(this);\n    }\n\n    /** @hidden */\n    private _removeFromFormGroup(): void {\n        if (!this.formGroupContainer) {\n            return;\n        }\n        this.formGroupContainer.removeFormFieldGroup(this);\n    }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n    booleanAttribute,\n    ChangeDetectionStrategy,\n    Component,\n    computed,\n    input,\n    ViewEncapsulation\n} from '@angular/core';\nimport { IconComponent } from '@fundamental-ngx/core/icon';\nimport { InlineHelpDirective } from '@fundamental-ngx/core/inline-help';\nimport { LinkComponent } from '@fundamental-ngx/core/link';\nimport { FieldGroup } from '../../models/field.model';\n\n@Component({\n    // eslint-disable-next-line @angular-eslint/component-selector\n    selector: '[fdp-form-group-header]',\n    templateUrl: './form-group-header.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    host: {\n        class: 'fd-form-group__header'\n    },\n    imports: [NgTemplateOutlet, LinkComponent, IconComponent, InlineHelpDirective]\n})\nexport class FormGroupHeaderComponent {\n    /** Whether the header should wrap on multiple lines */\n    readonly allowWrap = input(false, { transform: booleanAttribute });\n\n    /** Fields Group */\n    fieldGroup = input<FieldGroup | null | undefined>(null);\n\n    /** Hint options */\n    protected readonly hintOptions = computed(() => this.fieldGroup()?.hintOptions);\n}\n","@if (fieldGroup() && hintOptions()?.position === 'before') {\n    <ng-template [ngTemplateOutlet]=\"inlineHelpRef\"></ng-template>\n}\n<h6 class=\"fd-form-group__header-text\" [class.fd-form-group__header-text--wrap]=\"allowWrap()\">\n    {{ fieldGroup()?.label }}\n</h6>\n@if (fieldGroup() && hintOptions()?.position === 'after') {\n    <ng-template [ngTemplateOutlet]=\"inlineHelpRef\"></ng-template>\n}\n<ng-template #inlineHelpRef>\n    @if (hintOptions(); as options) {\n        <span fd-link [undecorated]=\"true\">\n            <fd-icon\n                [style.vertical-align]=\"'middle'\"\n                [fd-inline-help]=\"options.content\"\n                [glyph]=\"options.glyph\"\n                [placement]=\"options.placement ?? null\"\n                [triggers]=\"options.trigger ?? []\"\n                tabindex=\"0\"\n            ></fd-icon>\n        </span>\n    }\n</ng-template>\n","import { TemplateRef } from '@angular/core';\nimport { HintOptions } from '@fundamental-ngx/platform/shared';\n\nexport interface FieldColumn {\n    [key: number]: Array<Field>;\n}\n\nexport class Field {\n    /** @hidden */\n    constructor(\n        public name?: string,\n        public rank?: number,\n        public renderer?: TemplateRef<any>,\n        public column?: number\n    ) {}\n}\n\nexport class FieldGroup {\n    /** @hidden */\n    constructor(\n        public label: string,\n        public fields: FieldColumn,\n        public hintOptions?: HintOptions\n    ) {}\n}\n","import { KeyValue } from '@angular/common';\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { FieldColumn, FieldGroup } from '../../models/field.model';\n\n@Pipe({\n    name: 'fieldGroupRowValue',\n    standalone: true\n})\nexport class FieldGroupRowValuePipe implements PipeTransform {\n    /** @hidden */\n    transform(row: KeyValue<any, FieldColumn | FieldGroup>): FieldColumn {\n        return row.value instanceof FieldGroup ? row.value.fields : row.value;\n    }\n}\n","/**\n * @license\n * F. Kolar\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n *\n */\nimport {\n    AfterContentInit,\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    ContentChild,\n    ContentChildren,\n    DestroyRef,\n    ElementRef,\n    EventEmitter,\n    Input,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    Output,\n    Provider,\n    QueryList,\n    SimpleChanges,\n    TemplateRef,\n    ViewChild,\n    ViewEncapsulation,\n    booleanAttribute,\n    forwardRef,\n    inject\n} from '@angular/core';\nimport { AbstractControl, ControlContainer, FormGroup, FormsModule, NgForm } from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\nimport { KeyValuePipe, NgTemplateOutlet } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormField } from '@fundamental-ngx/cdk/forms';\nimport { Nullable, resizeObservable } from '@fundamental-ngx/cdk/utils';\nimport {\n    ContentDensityModule,\n    ContentDensityObserver,\n    contentDensityObserverProviders\n} from '@fundamental-ngx/core/content-density';\nimport { IconComponent } from '@fundamental-ngx/core/icon';\nimport { InlineHelpDirective } from '@fundamental-ngx/core/inline-help';\nimport { LinkComponent } from '@fundamental-ngx/core/link';\nimport {\n    ColumnLayout,\n    FieldHintOptions,\n    FormFieldGroup,\n    FormGroupContainer,\n    HintInput,\n    HintOptions,\n    PlatformFormField\n} from '@fundamental-ngx/platform/shared';\nimport { getField, getFormField, isFieldChild, isFieldGroupChild, isFieldGroupWrapperChild } from '../form-helpers';\nimport { Field, FieldColumn, FieldGroup } from '../models/field.model';\nimport {\n    DefaultGapLayout,\n    DefaultHorizontalFieldLayout,\n    DefaultHorizontalLabelLayout,\n    DefaultVerticalFieldLayout,\n    FORM_GROUP_CHILD_FIELD_TOKEN\n} from './constants';\nimport { FDP_FORM_FIELD_HINT_OPTIONS_DEFAULT } from './fdp-form.tokens';\nimport { FormFieldErrorDirective } from './form-field-error/form-field-error.directive';\nimport { FormFieldComponent } from './form-field/form-field.component';\nimport { FormGroupHeaderComponent } from './form-group-header/form-group-header.component';\nimport { generateColumnClass, normalizeColumnLayout } from './helpers';\nimport { FieldGroupRowValuePipe } from './pipes/field-group-row-value.pipe';\nimport { FormFieldLayoutService } from './services/form-field-layout.service';\n\nexport const formGroupProvider: Provider = {\n    provide: FormGroupContainer,\n    useExisting: forwardRef(() => FormGroupComponent)\n};\n\ntype FormGroupField = (FormField | FormFieldGroup) & { hintOptions?: HintOptions };\n\nlet formGroupUniqueId = 0;\n\n/**\n *\n * FormGroup represent high order container aggregating FormFields and ability to distribute these\n * fields into columns. It mainly hides implementation details that we need to deal with every\n * time we are building a form. We have input fields , error managements, different states,\n * hints and many more.\n *\n * Well behaved form that has information side by side in multiple\n * columns needs to also know how to merge properly.\n *\n * Just to get the idea about the structure without actual input components inside\n *\n * ```html\n * <fdp-form-group [hintPlacement]=\"'inline'\" columnLayout=\"XL2-L2-M1-S1\">\n *    <fdp-form-field [id]=\"'Field A'\" [rank]=\"10\" column=\"1\">\n *    </fdp-form-field>\n *\n *    <fdp-form-field [id]=\"'Field B'\" [rank]=\"30\" column=\"1\">\n *    </fdp-form-field>\n *\n *    <fdp-form-field [id]=\"'Field C'\"  [rank]=\"20\" column=\"1\">\n *    </fdp-form-field>\n *\n *    <fdp-form-field [id]=\"Field D\"  [rank]=\"20\" column=\"2\">\n *    </fdp-form-field>\n *\n *\n *    <fdp-form-field [id]=\"'Field E'\" [rank]=\"30\" column=\"2\">\n *    </fdp-form-field>\n * </fdp-form-group>\n\n *\n * ````\n *\n *\n * Which can be translated like this\n * [Field A] - First column, rank 10\n * [Field B] - First column, rank 30\n * [Field C] - First column, rank 20\n * [Field D] - Second column, rank 20\n * [Field E] - Second column, rank 30\n *\n * What we expect that it creates following form with two column layout:\n * [Field A]      [Field D]\n * [Field C]      [Field E]\n * [Field B]\n *\n * You can see all is sorted accordingly by rank (C goes before B).\n *\n * When you move into smaller device and all is merged into one columns the naive solution would be:\n *\n * [Field A]\n * [Field C]\n * [Field B]\n * [Field D]\n * [Field E]\n *\n * The fields needs to restructure according to their original positioning. When Field D was on the\n * top why we should move it to the bottom? The more correct solution should be following.\n *\n * [Field A]\n * [Field D]\n * [Field C]\n * [Field E]\n * [Field B]\n *\n * Fields nicely merge together. they don't wrap.\n *\n *\n * Besides this layout support it also wraps form functionality and it can work with FormGroup.\n * You can also decide if you want your form with <form> element or without it.\n *\n *\n */\n@Component({\n    selector: 'fdp-form-group',\n    templateUrl: 'form-group.component.html',\n    styleUrl: './form-group.component.scss',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    providers: [formGroupProvider, FormFieldLayoutService, contentDensityObserverProviders()],\n    imports: [\n        FormsModule,\n        NgTemplateOutlet,\n        FormGroupHeaderComponent,\n        LinkComponent,\n        IconComponent,\n        InlineHelpDirective,\n        KeyValuePipe,\n        FieldGroupRowValuePipe,\n        ContentDensityModule\n    ]\n})\nexport class FormGroupComponent\n    implements FormGroupContainer, OnInit, AfterContentInit, AfterViewInit, OnDestroy, OnChanges\n{\n    /** Id for the form group element */\n    @Input()\n    id = `fdp-form-group-${formGroupUniqueId++}`;\n\n    /** Name property to be set on a form. Will be used if `useForm` is set to true */\n    @Input()\n    name: string;\n\n    /** Indicates if group is editable */\n    @Input()\n    editable = true;\n\n    /** Indicates when labels should not be displayed */\n    @Input()\n    noLabelLayout = false;\n\n    /** User's custom classes */\n    @Input()\n    class: string;\n\n    /**\n     * Form group hint options\n     */\n    @Input()\n    hint: HintInput;\n\n    /**\n     * Defines column layout for inline items.\n     */\n    @Input()\n    set inlineColumnLayout(value: ColumnLayout) {\n        this._inlineColumnLayout = normalizeColumnLayout(value);\n        this._updateInlineColumnLayout();\n    }\n\n    get inlineColumnLayout(): ColumnLayout {\n        return this._inlineColumnLayout;\n    }\n\n    /**\n     * Defines label's column layout.\n     */\n    @Input()\n    labelColumnLayout: ColumnLayout = DefaultHorizontalLabelLayout;\n\n    /**\n     * Defines field's column layout.\n     */\n    @Input()\n    fieldColumnLayout: ColumnLayout = DefaultHorizontalFieldLayout;\n\n    /**\n     * Defines gap column layout.\n     */\n    @Input()\n    gapColumnLayout: ColumnLayout = DefaultGapLayout;\n\n    /** Angular FormGroup where all underlying controls will be attached to. */\n    @Input()\n    formGroup: FormGroup;\n\n    /** This is rather simple for now just to have some Section Title if needed */\n    @Input()\n    topTitle: string;\n\n    /** Form's main title. */\n    @Input()\n    mainTitle: Nullable<string>;\n\n    /** Whether to hide form's main title. Default is false. */\n    @Input()\n    hideMainTItle = false;\n\n    /**\n     * Convenient way to initialize internal FormControls from object\n     */\n    @Input()\n    object: any;\n\n    /**\n     * Translations template reference.\n     *\n     * This is just here to support several ways to pass translation.\n     *\n     * One way is to provide ng-template #i18n inside the form-group tag and the other one\n     * some global one as binding\n     */\n    @Input()\n    i18Strings: TemplateRef<any>;\n\n    /** Whether to wrap all the provided content in a `<form>` */\n    @Input({ transform: booleanAttribute })\n    useForm = false;\n\n    /**\n     * Specify the column layout in the format `XLn-Ln-Mn-Sn` where n is the number of columns and can be different for each size.\n     * eg: XL2-L2-M2-S1 would create 2-column layouts for XL, L, and M sizes and single-column layout for S size.\n     */\n    @Input()\n    columnLayout: Nullable<string>;\n\n    /** Whether all form items should have identical layout provided for form group */\n    @Input()\n    unifiedLayout = true;\n\n    /**\n     * onSubmit event\n     */\n    @Output()\n    // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n    onSubmit: EventEmitter<any> = new EventEmitter<any>();\n\n    /**\n     * Native form element. Available with `[useForm]=\"true\"` input property.\n     */\n    @ViewChild('nativeForm', { read: NgForm })\n    nativeForm: NgForm;\n\n    /** @hidden */\n    @ContentChild('i18n', { static: true })\n    i18Template: TemplateRef<any>;\n\n    /**\n     * @hidden\n     *\n     * Keep track of added form fields children in correct order.\n     *\n     * Since \"descendants: true\" includes fields of nested form group as well.\n     *\n     * We are forced to use \"ContentChildren\" so FormField children can be used\n     * with optional rendering (ngIf) safely.\n     *\n     * Form fields within the formGroup is driven by multi-zone layout support. We need to be\n     * able to add number of FormFields, and based on given configuration (zone, rank) render them\n     * under correct zone  (top, bottom, left, right).\n     *\n     * We want to make sure that we don't include content and then try to somehow position it as it\n     * would lead to the UI where user can see elementing moving as you try to position it.\n     *\n     */\n    @ContentChildren(FORM_GROUP_CHILD_FIELD_TOKEN as any, { descendants: true })\n    protected formGroupChildren: QueryList<FormGroupField>;\n\n    /** @hidden */\n    @ContentChildren(FormFieldErrorDirective)\n    private _errorDirectives: QueryList<FormFieldErrorDirective>;\n\n    /** @hidden */\n    xlColumnsNumber: number;\n    /** @hidden */\n    lgColumnsNumber: number;\n    /** @hidden */\n    mdColumnsNumber: number;\n\n    /**\n     * @hidden\n     * User responsive layout\n     */\n    xlCol: string;\n\n    /**\n     * @hidden\n     * Packed fields which should be rendered\n     */\n    formRows: { [key: number]: FieldColumn | FieldGroup } = {};\n\n    /** @hidden */\n    _hintOptions: Nullable<HintOptions>;\n\n    /** @hidden */\n    readonly contentDensityObserver = inject(ContentDensityObserver);\n\n    /** @hidden */\n    _inlineColumnLayoutClass: string;\n\n    /** @hidden */\n    protected _destroyRef = inject(DestroyRef);\n\n    /** @hidden */\n    private _inlineColumnLayout = DefaultVerticalFieldLayout;\n\n    /**\n     * @hidden\n     *\n     * List of direct FdpFormGroup's children.\n     *\n     * Since \"formGroupChildren\" uses \"{ descendants: true }\" option that means\n     * \"formGroupChildren\" will keep track of nested FdpFormGroup fields as well.\n     * This list relies on the injection mechanism so nested FdpFormGroup's fields/fieldGroups\n     * will be omitted\n     */\n    private _formGroupDirectChildren: Array<FormGroupField> = [];\n\n    /** @hidden */\n    private readonly _subscriptions = new Subscription();\n\n    /** @hidden */\n    private readonly _cd = inject(ChangeDetectorRef);\n    /** @hidden */\n    private readonly _elementRef = inject(ElementRef);\n    /** @hidden */\n    private readonly _formContainer = inject(ControlContainer, { optional: true });\n    /** @hidden */\n    private readonly _defaultHintOptions = inject<FieldHintOptions>(FDP_FORM_FIELD_HINT_OPTIONS_DEFAULT);\n\n    /** @hidden */\n    constructor() {\n        this.formGroup = <FormGroup>(this._formContainer ? this._formContainer.control : new FormGroup({}));\n    }\n\n    /** @hidden */\n    ngOnChanges(changes: SimpleChanges): void {\n        this.buildComponentCssClass();\n        if (changes.hint) {\n            if (typeof this.hint === 'string' || this.hint instanceof TemplateRef) {\n                this._hintOptions = {\n                    ...this._defaultHintOptions,\n                    content: this.hint\n                };\n            } else {\n                this._hintOptions = {\n                    ...this._defaultHintOptions,\n                    ...this.hint\n                };\n            }\n        }\n    }\n\n    /** @hidden */\n    ngOnInit(): void {\n        if (!this.formGroup) {\n            this.formGroup = new FormGroup({});\n        }\n        this.buildComponentCssClass();\n        this._updateInlineColumnLayout();\n    }\n\n    /** @hidden */\n    ngAfterContentInit(): void {\n        this.i18Strings = this.i18Strings ? this.i18Strings : this.i18Template;\n\n        this._setUserLayout();\n        this._updateFieldByColumn();\n        this._updateFormFieldsProperties();\n        this._listenToFormGroupChildren();\n        this._listenFormFieldColumnChange();\n        this._cd.markForCheck();\n    }\n\n    /** @hidden */\n    ngAfterViewInit(): void {\n        this.i18Strings = this.i18Strings ? this.i18Strings : this.i18Template;\n\n        this._setUserLayout();\n        this._updateFieldByColumn();\n        this._updateFormFieldsProperties();\n        this._listenToFormGroupChildren();\n        this._listenFormFieldColumnChange();\n        this._trackFormGroupResize();\n        this._cd.markForCheck();\n\n        this._cd.detectChanges();\n    }\n\n    /** @hidden */\n    ngOnDestroy(): void {\n        this._subscriptions.unsubscribe();\n    }\n\n    /** @hidden */\n    addFormField(formField: PlatformFormField): void {\n        // It's needed to set default FormField properties\n        // on early stage otherwise validation errors\n        // will be thrown on FormField level (e.g. i18string are not defined)\n        this._updateFormFieldProperties(formField);\n        // keep track of directly registered children\n        this._addDirectFormGroupChild(formField);\n    }\n\n    /** @hidden */\n    removeFormField(formField: PlatformFormField): void {\n        this._removeDirectFormGroupChild(formField);\n    }\n\n    /** @hidden */\n    addFormFieldGroup(formFieldGroup: FormFieldGroup): void {\n        this._addDirectFormGroupChild(formFieldGroup);\n    }\n\n    /** @hidden */\n    removeFormFieldGroup(formFieldGroup: FormFieldGroup): void {\n        this._removeDirectFormGroupChild(formFieldGroup);\n    }\n\n    /** @hidden */\n    addFormControl(name: string, control: AbstractControl): void {\n        this.formGroup.setControl(name, control);\n        // letting control to set value. when provided value is 'false'.\n        if (this.object) {\n            control.patchValue(this.object[name]);\n        }\n    }\n\n    /** @hidden */\n    removeFormControl(name: string): void {\n        this.formGroup.removeControl(name);\n    }\n\n    /** @hidden */\n    trackByFn(index: number): number {\n        return index;\n    }\n\n    /** @hidden */\n    trackByFieldName(index: number, field: Field): string | undefined {\n        return field ? field.name : undefined;\n    }\n\n    /** @hidden */\n    buildComponentCssClass(): string[] {\n        return ['fd-container', this.class];\n    }\n\n    /** @hidden used for template side Type correction */\n    $fieldGroup = (f: any): FieldGroup => f;\n\n    /** @hidden */\n    private _listenToFormGroupChildren(): void {\n        this.formGroupChildren.changes.subscribe(() => {\n            this._updateFieldByColumn();\n            this._cd.markForCheck();\n        });\n    }\n\n    /** @hidden */\n    private _listenFormFieldColumnChange(): void {\n        this.formGroupChildren.forEach((field: FormGroupField) =>\n            (<FormFieldComponent>field).onColumnChange?.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n                this._updateFieldByColumn();\n                this._cd.markForCheck();\n            })\n        );\n    }\n\n    /**\n     * @hidden\n     * Assign a fields or field group to specified columns with rank.\n     * if `columnLayoutType` is given a fields without column property will set on last column.\n     * Otherwise the fields set 1 column.\n     */\n    private _updateFieldByColumn(): void {\n        const formChildren = this._getFormGroupChildren();\n        const rows: { [key: number]: FieldColumn | FieldGroup } = {};\n        let rowNumber = 0;\n        let columns: FieldColumn = {};\n\n        for (const child of formChildren) {\n            if (isFieldChild(child)) {\n                const field = getField(child);\n                const columnNumber = this._validateFieldColumn(child.column);\n\n                if (!columns[columnNumber]) {\n                    columns[columnNumber] = [];\n                }\n                columns[columnNumber].push(field);\n            }\n\n            if (isFieldGroupChild(child)) {\n                const fieldGroupColumns: FieldColumn = {};\n                if (Object.keys(columns).length) {\n                    rows[rowNumber] = columns;\n                    columns = {};\n                    rowNumber++;\n                }\n\n                const groupFields = child.fields.map((field) => getField(field));\n                groupFields.forEach((groupField) => {\n                    const columnNumber = this._validateFieldColumn(groupField.column);\n\n                    if (!fieldGroupColumns[columnNumber]) {\n                        fieldGroupColumns[columnNumber] = [];\n                    }\n                    fieldGroupColumns[columnNumber].push(groupField);\n                });\n\n                rows[rowNumber] = new FieldGroup(child.label, fieldGroupColumns, child.hintOptions);\n                rowNumber++;\n            }\n        }\n        rows[rowNumber] = columns;\n        this.formRows = rows;\n    }\n\n    /** @hidden Validate column number */\n    private _validateFieldColumn(columnNumber: number | undefined): number {\n        if (this.columnLayout && columnNumber) {\n            if (isNaN(columnNumber)) {\n                throw new Error('Input a valid column number');\n            }\n\n            if (columnNumber > this.xlColumnsNumber) {\n                throw new Error(`Columns cannot be more than ${this.xlColumnsNumber}`);\n            }\n\n            return columnNumber;\n        }\n\n        return this.xlColumnsNumber;\n    }\n\n    /** @hidden */\n    private _updateFormFieldsProperties(): void {\n        this._getFormGroupChildren().forEach((formField: FormGroupField) => {\n            if (isFieldChild(formField)) {\n                this._updateFormFieldProperties(formField);\n            }\n\n            if (isFieldGroupChild(formField)) {\n                formField.fields.forEach((field) => this._updateFormFieldProperties(getFormField(field)));\n            }\n        });\n    }\n\n    /**\n     * @hidden\n     * Pass some global properties to each field. Even formGroup cna be inject directly inside form\n     * field we are using here a setter method to initialize the\n     *\n     */\n    private _updateFormFieldProperties(formField: PlatformFormField): void {\n        if (this.unifiedLayout) {\n            formField.editable = this.editable;\n            formField.noLabelLayout = this.noLabelLayout;\n        }\n        formField.setDefaultColumnLayout();\n        formField.i18Strings = formField.i18Strings ? formField.i18Strings : this.i18Strings;\n        formField.setErrorDirectives(this._errorDirectives);\n    }\n\n    /**\n     * @hidden\n     * if `columnLayoutType` is given, set those column layouts appropriately. Otherwise, a layout will set on 1 column\n     */\n    private _setUserLayout(): void {\n        if (this.columnLayout) {\n            this._getColumnNumbers(this.columnLayout);\n            if (isNaN(this.xlColumnsNumber) || isNaN(this.lgColumnsNumber) || isNaN(this.mdColumnsNumber)) {\n                throw new Error('Input a valid number for columns');\n            }\n            if (this.xlColumnsNumber > 12 || this.lgColumnsNumber > 12 || this.mdColumnsNumber > 12) {\n                throw new Error('Columns cannot be more than 12');\n            }\n            const lgColumns = 12 / this.lgColumnsNumber;\n            const mdColumns = 12 / this.mdColumnsNumber;\n            const xlColumns = 12 / this.xlColumnsNumber;\n\n            // for `lg` single-column layout, Styles does not use any class, and providing `fd-col-lg--12` has unintended side-effects\n            // therefore, we remove the lg class for single-column layout\n            if (lgColumns === 12) {\n                this.xlCol = `fd-col-xl--${xlColumns} fd-col-md--${mdColumns}`;\n            } else {\n                this.xlCol = `fd-col-xl--${xlColumns} fd-col-md--${mdColumns} fd-col-lg--${lgColumns}`;\n            }\n        } else {\n            this.xlCol = `fd-col-xl--12 fd-col-md--12 fd-col-lg--12`;\n        }\n    }\n\n    /** @hidden */\n    private _getColumnNumbers(layout: string): void {\n        const [xl, lg, md] = layout.split('-');\n        this.xlColumnsNumber = parseInt(xl.slice(2, xl.length), 10);\n        this.lgColumnsNumber = parseInt(lg.slice(1, lg.length), 10);\n        this.mdColumnsNumber = parseInt(md.slice(1, md.length), 10);\n    }\n\n    /** @hidden */\n    private _addDirectFormGroupChild(child: FormGroupField): void {\n        if (this._formGroupDirectChildren.indexOf(child) > -1) {\n            return;\n        }\n        this._formGroupDirectChildren.push(child);\n    }\n\n    /** @hidden */\n    private _removeDirectFormGroupChild(child: PlatformFormField | FormFieldGroup): void {\n        this._formGroupDirectChildren = this._formGroupDirectChildren.filter((_child) => _child !== child);\n    }\n\n    /**\n     * @hidden\n     * Get direct form group children in the original order\n     */\n    private _getFormGroupChildren(): FormGroupField[] {\n        if (!this.formGroupChildren) {\n            return [];\n        }\n        const children = this.formGroupChildren\n            .toArray()\n            .map((child) => (isFieldGroupWrapperChild(child) ? child.fieldRenderer : child));\n\n        return children.filter((child) => this._formGroupDirectChildren.includes(child));\n    }\n\n    /** @hidden */\n    private _updateInlineColumnLayout(): void {\n        this._inlineColumnLayoutClass = generateColumnClass(this.inlineColumnLayout);\n    }\n\n    /**\n     * @hidden\n     * have to trigger change detection here in order to re-check contents\n     * inside \"FormField.renderer\" template every time component's dimensions changed\n     */\n    private _trackFormGroupResize(): void {\n        this._subscriptions.add(\n            resizeObservable(this._elementRef.nativeElement)\n                .pipe(debounceTime(20))\n                .subscribe(() => this._cd.markForCheck())\n        );\n    }\n}\n","@if (useForm) {\n    <form #nativeForm (ngSubmit)=\"onSubmit.emit($event)\" [id]=\"id\" [name]=\"name\">\n        <ng-template [ngTemplateOutlet]=\"body\"></ng-template>\n    </form>\n} @else {\n    <!--  Render fields and field groups with assigned columns -->\n    <ng-template [ngTemplateOutlet]=\"fields\"></ng-template>\n}\n<ng-template #body>\n    <!--  Render fields and field groups with assigned columns -->\n    <ng-template [ngTemplateOutlet]=\"fields\"></ng-template>\n</ng-template>\n<ng-template #fields>\n    @if (mainTitle && !hideMainTItle) {\n        <div class=\"fd-form-header\">\n            <ng-template [ngTemplateOutlet]=\"mainTitleTemplate\"></ng-template>\n        </div>\n    }\n    <div\n        class=\"fd-container fd-form-layout-grid-container\"\n        [class.is-compact]=\"contentDensityObserver.isCompactSignal()\"\n    >\n        @for (column of formRows | keyvalue; track $index) {\n            <div class=\"fd-row\">\n                @for (fields of column | fieldGroupRowValue | keyvalue; track $index) {\n                    @if ($fieldGroup(column.value); as value) {\n                        @if (value.label && $index === 0) {\n                            <div class=\"fd-row fd-form-item\">\n                                <div class=\"fd-col\" [class]=\"xlCol\">\n                                    <div fdp-form-group-header [fieldGroup]=\"$index === 0 ? value : null\"></div>\n                                </div>\n                            </div>\n                        }\n                    }\n\n                    <div class=\"fd-col fd-form-group\" [class]=\"xlCol\">\n                        @for (field of fields.value; track trackByFieldName($index, field)) {\n                            <div class=\"fd-row fd-form-item\">\n                                <div class=\"fd-col\" [class]=\"_inlineColumnLayoutClass\" [style.order]=\"field.rank\">\n                                    <ng-template [ngTemplateOutlet]=\"field?.renderer || null\"></ng-template>\n                                </div>\n                            </div>\n                        }\n                    </div>\n                }\n            </div>\n        }\n    </div>\n</ng-template>\n<!-- For nested form-group -->\n<ng-content select=\"fdp-form-group\"></ng-content>\n<ng-template #mainTitleTemplate>\n    @if (_hintOptions && _hintOptions.content && _hintOptions.position === 'before') {\n        <ng-template [ngTemplateOutlet]=\"hintTemplate\"></ng-template>\n    }\n    <h5 class=\"fd-form-header__text\">\n        {{ mainTitle }}\n    </h5>\n    @if (_hintOptions && _hintOptions.content && _hintOptions.position === 'after') {\n        <ng-template [ngTemplateOutlet]=\"hintTemplate\"></ng-template>\n    }\n    <ng-template #hintTemplate>\n        <span fd-link [undecorated]=\"true\">\n            <fd-icon\n                [fd-inline-help]=\"_hintOptions!.content\"\n                [glyph]=\"_hintOptions!.glyph\"\n                [placement]=\"_hintOptions!.placement ?? null\"\n                [triggers]=\"_hintOptions!.trigger ?? []\"\n                tabindex=\"0\"\n            ></fd-icon>\n        </span>\n    </ng-template>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { InputMessageGroupWithTemplate } from '../input-message-group-with-template/input-message-group-with-template.component';\nimport { FormFieldErrorDescriptionDirective } from './form-field-error/form-field-error-description.directive';\nimport { FormFieldErrorHeadingDirective } from './form-field-error/form-field-error-heading.directive';\nimport { FormFieldErrorDirective } from './form-field-error/form-field-error.directive';\nimport { FormFieldControlExtrasComponent } from './form-field-extras/form-field-extras.component';\nimport { FormFieldGroupComponent } from './form-field-group/form-field-group.component';\nimport { FormFieldComponent } from './form-field/form-field.component';\nimport { FormGroupHeaderComponent } from './form-group-header/form-group-header.component';\nimport { FormGroupComponent } from './form-group.component';\nimport { FieldGroupRowValuePipe } from './pipes/field-group-row-value.pipe';\n\nconst EXPORTABLE_DECLARATIONS = [\n    FormGroupComponent,\n    FormFieldComponent,\n    InputMessageGroupWithTemplate,\n    FormFieldGroupComponent,\n    FormFieldControlExtrasComponent,\n    FormGroupHeaderComponent,\n    FieldGroupRowValuePipe,\n    FormFieldErrorDirective,\n    FormFieldErrorHeadingDirective,\n    FormFieldErrorDescriptionDirective\n];\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n    imports: [...EXPORTABLE_DECLARATIONS],\n    exports: [...EXPORTABLE_DECLARATIONS]\n})\nexport class FdpFormGroupModule {}\n","import {\n    ChangeDetectionStrategy,\n    Component,\n    forwardRef,\n    Input,\n    OnInit,\n    Provider,\n    TemplateRef,\n    ViewChild,\n    ViewEncapsulation\n} from '@angular/core';\nimport { FD_FORM_FIELD } from '@fundamental-ngx/cdk/forms';\nimport { FieldHintOptions, PlatformFormField } from '@fundamental-ngx/platform/shared';\nimport { FORM_GROUP_CHILD_FIELD_TOKEN } from '../../form-group/constants';\nimport { FormFieldComponent } from '../../form-group/form-field/form-field.component';\nimport { DynamicFormControl } from '../dynamic-form-control';\nimport { DynamicFormControlDirective } from '../dynamic-form-control.directive';\nimport { FormGeneratorService } from '../form-generator.service';\nimport { DynamicFormGroup } from '../interfaces/dynamic-form-group';\nimport { DynamicFormItemValidationObject } from '../interfaces/dynamic-form-item';\n\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { FdpFormGroupModule } from '../../form-group/fdp-form.module';\n\nconst formFieldProvider: Provider = {\n    provide: FD_FORM_FIELD,\n    useExisting: forwardRef(() => FormGeneratorFieldComponent)\n};\n\nconst formGroupChildProvider: Provider = {\n    provide: FORM_GROUP_CHILD_FIELD_TOKEN,\n    useExisting: forwardRef(() => FormGeneratorFieldComponent)\n};\n\n@Component({\n    selector: 'fdp-form-generator-field',\n    templateUrl: './form-generator-field.component.html',\n    providers: [formFieldProvider, formGroupChildProvider],\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [FdpFormGroupModule, FormsModule, ReactiveFormsModule, DynamicFormControlDirective]\n})\nexport class FormGeneratorFieldComponent implements OnInit {\n    /**\n     * Form control.\n     */\n    @Input() field: DynamicFormControl;\n\n    /**\n     * Form generator's form.\n     */\n    @Input() form: DynamicFormGroup;\n\n    /**\n     * Translations template reference.\n     */\n    @Input() i18n: TemplateRef<any>;\n\n    /**\n     * Form control name\n     */\n    @Input() formFieldName: string;\n\n    /**\n     * Path of the form group.\n     */\n    @Input() formGroupNamePath: string;\n\n    /**\n     * Rank is used for ordering.\n     * The lower number the higher priority.\n     */\n    @Input() rank: number;\n\n    /**\n     * Whether this field should be visible.\n     */\n    @Input() shouldShow: boolean;\n\n    /**\n     * Describes hint options for field label\n     */\n    @Input() hintOptions?: FieldHintOptions;\n\n    /**\n     * Form field component.\n     */\n    @ViewChild(forwardRef(() => FormFieldComponent)) fieldRenderer: PlatformFormField;\n\n    /** @hidden */\n    get _placeholder(): string {\n        if (!this.field) {\n            return '';\n        }\n        if (this.field.formItem?.placeholder) {\n            return this.field.formItem?.placeholder as string;\n        }\n        if (this.field.formItem?.useMessageAsPlaceholder) {\n            return this.field.formItem?.message as string;\n        }\n        return '';\n    }\n\n    /** @hidden */\n    _errorModels: { type: string; value: any }[] = [];\n\n    /** @hidden */\n    constructor(private _fgService: FormGeneratorService) {}\n\n    /** @hidden */\n    ngOnInit(): void {\n        this._errorModels = this._getErrors();\n    }\n\n    /** @hidden */\n    _errorsTrackBy(_: number, error: { type: string; value: any }): string {\n        return error.type;\n    }\n\n    /** @hidden */\n    _isAdvancedError(error: any): error is DynamicFormItemValidationObject {\n        return error.heading && error.description && error.type;\n    }\n\n    /** @hidden */\n    private _getErrors(): { type: string; value: any }[] {\n        const registeredErrors = this._fgService.validationErrorHints;\n\n        const returnErrors: { type: string; value: any }[] = [\n            {\n                type: `${this.field.formItem.name}Validator`,\n                value: null\n            }\n        ];\n\n        Object.entries(registeredErrors).forEach((type) => {\n            const [errorType, errorValue] = type;\n\n            returnErrors.push({\n                type: errorType,\n                value: errorValue\n            });\n        });\n\n        return returnErrors;\n    }\n}\n","<fdp-form-field\n    [hint]=\"hintOptions\"\n    [placeholder]=\"_placeholder\"\n    [id]=\"field.formItem.id || formFieldName\"\n    [column]=\"field.formItem.guiOptions?.column || 1\"\n    [columnLayout]=\"field.formItem.guiOptions?.columnLayout\"\n    [colon]=\"field.formItem.guiOptions?.appendColon === true\"\n    [label]=\"field.formItem.message\"\n    [validators]=\"field.formItem.validators || []\"\n    [required]=\"field.formItem.required\"\n    [rank]=\"rank\"\n    [labelColumnLayout]=\"field.formItem.guiOptions?.labelColumnLayout\"\n    [fieldColumnLayout]=\"field.formItem.guiOptions?.fieldColumnLayout\"\n    [gapColumnLayout]=\"field.formItem.guiOptions?.gapColumnLayout\"\n    [noLabelLayout]=\"field.formItem.guiOptions?.noLabelLayout || false\"\n    [formGroup]=\"form\"\n    #formField\n>\n    @for (error of _errorModels; track _errorsTrackBy($index, error)) {\n        <span *fdpFormFieldError=\"error.type; let directiveError\">\n            @if (_isAdvancedError(directiveError)) {\n                @if (directiveError.heading) {\n                    <span *fdpFormFieldErrorHeading=\"let validationError; type: directiveError.type\">\n                        {{ validationError.heading }}\n                    </span>\n                }\n                @if (directiveError.description) {\n                    <span *fdpFormFieldErrorDescription=\"let validationError\">\n                        {{ validationError.description }}\n                    </span>\n                }\n            } @else {\n                <span *fdpFormFieldErrorHeading=\"let validationError\">\n                    {{ error.value ? error.value : validationError }}\n                </span>\n            }\n        </span>\n    }\n    <ng-container\n        [formField]=\"formField\"\n        [form]=\"form\"\n        [formGroupNamePath]=\"formGroupNamePath\"\n        fdpDynamicFormControl\n        [id]=\"field.formItem.id || formFieldName\"\n        [name]=\"formFieldName\"\n        [formItem]=\"field.formItem\"\n    >\n    </ng-container>\n</fdp-form-field>\n","import { PlatformFormField } from '@fundamental-ngx/platform/shared';\nimport { FormGeneratorFieldComponent } from './form-generator/form-generator-field/form-generator-field.component';\nimport { FormFieldGroupComponent } from './form-group/form-field-group/form-field-group.component';\nimport { FormFieldComponent } from './form-group/form-field/form-field.component';\nimport { Field } from './models/field.model';\n\n/** @hidden */\nexport function isFieldChild(child: unknown): child is PlatformFormField {\n    return child instanceof FormFieldComponent;\n}\n\n/** @hidden */\nexport function isFieldGroupWrapperChild(child: unknown): child is FormGeneratorFieldComponent {\n    return child instanceof FormGeneratorFieldComponent;\n}\n\n/** @hidden */\nexport function isFieldGroupChild(child: unknown): child is FormFieldGroupComponent {\n    return child instanceof FormFieldGroupComponent;\n}\n\n/** @hidden */\nexport function getFormField(field: PlatformFormField | FormGeneratorFieldComponent): PlatformFormField {\n    return isFieldGroupWrapperChild(field) ? field.fieldRenderer : field;\n}\n\n/** @hidden */\nexport function getField(field: PlatformFormField): Field {\n    field = isFieldGroupWrapperChild(field) ? field.fieldRenderer : field;\n\n    return new Field(field.id, field.rank, field.renderer, field.column);\n}\n","import { NgModule } from '@angular/core';\n\nimport { AutoCompleteDirective } from './auto-complete.directive';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n    imports: [AutoCompleteDirective],\n    exports: [AutoCompleteDirective]\n})\nexport class PlatformAutoCompleteModule {}\n","import { NgModule } from '@angular/core';\nimport { CheckboxComponent } from './checkbox.component';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n    imports: [CheckboxComponent],\n    exports: [CheckboxComponent]\n})\nexport class PlatformCheckboxModule {}\n","import { InjectionToken } from '@angular/core';\nimport { Subject } from 'rxjs';\n\nimport { MobileMode } from '@fundamental-ngx/core/mobile-mode';\n\nexport const COMBOBOX_COMPONENT = new InjectionToken<string[]>('ComboboxInterface');\n\n/**\n * Combobox Interface to have typing and avoid circular dependency between\n * ComboboxComponent <==> ComboboxMobileComponent\n */\nexport interface ComboboxInterface extends MobileMode {\n    inputText: string;\n    openChange: Subject<boolean>;\n\n    dialogApprove(): void;\n    dialogDismiss(backup: string): void;\n    detectChanges(): void;\n}\n","import {\n    ChangeDetectionStrategy,\n    Component,\n    Inject,\n    OnInit,\n    TemplateRef,\n    ViewChild,\n    ViewEncapsulation\n} from '@angular/core';\n\nimport { CdkScrollable } from '@angular/cdk/overlay';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Nullable, TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport { BarModule } from '@fundamental-ngx/core/bar';\nimport { DialogModule } from '@fundamental-ngx/core/dialog';\nimport { MobileModeBase, MobileModeControl } from '@fundamental-ngx/core/mobile-mode';\nimport { ScrollbarDirective } from '@fundamental-ngx/core/scrollbar';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { COMBOBOX_COMPONENT, ComboboxInterface } from '../../combobox.interface';\n\n@Component({\n    selector: 'fdp-combobox-mobile',\n    templateUrl: './combobox-mobile.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    imports: [\n        DialogModule,\n        TitleComponent,\n        TemplateDirective,\n        BarModule,\n        NgTemplateOutlet,\n        CdkScrollable,\n        ScrollbarDirective\n    ]\n})\nexport class ComboboxMobileComponent extends MobileModeBase<ComboboxInterface> implements OnInit {\n    /** @hidden */\n    @ViewChild('dialogTemplate') dialogTemplate: TemplateRef<any>;\n\n    /** @hidden\n     * For internal usage\n     * Control element, which will be rendered inside dialog.\n     * List element, which will be rendered inside dialog.\n     */\n    childContent: Nullable<{\n        listTemplate: TemplateRef<any>;\n        controlTemplate: TemplateRef<any>;\n    }> = null;\n\n    /** @hidden */\n    private _selectedBackup: string;\n\n    /** @hidden */\n    constructor(@Inject(COMBOBOX_COMPONENT) comboboxComponent: ComboboxInterface) {\n        super(comboboxComponent, MobileModeControl.COMBOBOX);\n    }\n\n    /** @hidden */\n    ngOnInit(): void {\n        this._listenOnMultiInputOpenChange();\n    }\n\n    /** @hidden */\n    handleDismiss(): void {\n        this.dialogRef.dismiss();\n        this._component.dialogDismiss(this._selectedBackup);\n    }\n\n    /** @hidden */\n    handleApprove(): void {\n        this.dialogRef.close();\n        this._component.dialogApprove();\n    }\n\n    /** @hidden */\n    private _toggleDialog(open: boolean): void {\n        if (!open) {\n            return;\n        }\n\n        this._selectedBackup = this._component.inputText;\n        if (!this._dialogService.hasOpenDialogs()) {\n            this._open();\n        }\n    }\n\n    /** @hidden */\n    private _listenOnMultiInputOpenChange(): void {\n        this._component.openChange\n            .pipe(takeUntilDestroyed(this._destroyRef))\n            .subscribe((isOpen) => this._toggleDialog(isOpen));\n    }\n\n    /** @hidden */\n    private _open(): void {\n        this.dialogRef = this._dialogService.open(this.dialogTemplate, {\n            mobile: true,\n            disablePaddings: true,\n            ...this.dialogConfig,\n            backdropClickCloseable: false,\n            container: this._elementRef.nativeElement\n        });\n\n        // Have to fire \"detectChanges\" to fix \"ExpressionChangedAfterItHasBeenCheckedError\"\n        this.dialogRef.afterLoaded.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n            this._component.detectChanges();\n        });\n\n        const refSub = this.dialogRef.afterClosed.subscribe({\n            error: (type) => {\n                if (type === 'escape') {\n                    this._component.dialogDismiss(this._selectedBackup);\n                    refSub.unsubscribe();\n                }\n            }\n        });\n    }\n}\n","<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\n    <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n        <fd-dialog-header>\n            @if (mobileConfig.title) {\n                <h1 fd-title>{{ mobileConfig.title }}</h1>\n            }\n            @if (mobileConfig.hasCloseButton) {\n                <button fd-dialog-close-button [mobile]=\"true\" (click)=\"handleDismiss()\"></button>\n            }\n            <ng-template fdkTemplate=\"subheader\">\n                <div fd-bar-middle>\n                    <fd-bar-element [fullWidth]=\"true\">\n                        <ng-template [ngTemplateOutlet]=\"childContent?.controlTemplate || null\"></ng-template>\n                    </fd-bar-element>\n                </div>\n            </ng-template>\n        </fd-dialog-header>\n        <fd-dialog-body>\n            <ng-template [ngTemplateOutlet]=\"childContent?.listTemplate || null\"></ng-template>\n        </fd-dialog-body>\n        <fd-dialog-footer>\n            @if (mobileConfig.approveButtonText) {\n                <fd-button-bar fdType=\"emphasized\" [label]=\"mobileConfig.approveButtonText!\" (click)=\"handleApprove()\">\n                </fd-button-bar>\n            }\n            @if (mobileConfig.cancelButtonText) {\n                <fd-button-bar [label]=\"mobileConfig.cancelButtonText!\" (click)=\"handleDismiss()\"> </fd-button-bar>\n            }\n        </fd-dialog-footer>\n    </fd-dialog>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { ComboboxMobileComponent } from './combobox/combobox-mobile.component';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n    imports: [ComboboxMobileComponent],\n    exports: [ComboboxMobileComponent]\n})\nexport class PlatformComboboxMobileModule {}\n","import { Injectable } from '@angular/core';\n\nimport { ContentDensity } from '@fundamental-ngx/cdk/utils';\nimport { DataProvider, MatchingStrategy, PlatformConfig } from '@fundamental-ngx/platform/shared';\n\n/**\n * Default options for Combobox\n */\n@Injectable({ providedIn: 'root' })\nexport class ComboboxConfig {\n    /**\n     * Content Density of element. 'cozy' | 'compact'\n     */\n    contentDensity: ContentDensity;\n\n    /**\n     * String matching strategy for typeahead list. Default: 'starts with per term'\n     */\n    matchingStrategy: MatchingStrategy = MatchingStrategy.STARTS_WITH_PER_TERM;\n\n    /**\n     * Maps data providers\n     */\n    providers: Map<string, DataProvider<any>> | null = new Map();\n\n    /** @hidden */\n    constructor(platformConfig: PlatformConfig) {\n        this.contentDensity = platformConfig.contentDensity;\n    }\n\n    /**\n     * Create Provider factory function\n     */\n    static createProviderFactory(obj: Partial<ComboboxConfig>): (platformConfig: PlatformConfig) => ComboboxConfig {\n        const useFactory = (platformConfig: PlatformConfig): ComboboxConfig =>\n            Object.assign(new ComboboxConfig(platformConfig), obj);\n        return useFactory;\n    }\n}\n","import { Directive, InjectionToken, Input, TemplateRef, inject } from '@angular/core';\n\nexport const FDP_COMBOBOX_ITEM_DEF = new InjectionToken<FdpComboboxItemDef>('FdpComboboxItemDefinition');\n\nexport type FdoComboboxItemDefType =\n    | 'optionItemTemplate'\n    | 'groupItemTemplate'\n    | 'secondaryItemTemplate'\n    | 'selectedItemTemplate';\n\n@Directive()\nexport abstract class FdpComboboxItemDef<T = unknown> {\n    /** @hidden */\n    abstract name: FdoComboboxItemDefType;\n    /** @hidden */\n    templateRef = inject(TemplateRef<T>);\n}\n\n@Directive({\n    selector: '[fdpComboboxItem]',\n    standalone: true,\n    providers: [\n        {\n            provide: FDP_COMBOBOX_ITEM_DEF,\n            useExisting: ComboboxItemDirective\n        }\n    ]\n})\nexport class ComboboxItemDirective<T = unknown> extends FdpComboboxItemDef<{ $implicit: T; index: number }> {\n    /** @hidden */\n    // eslint-disable-next-line @angular-eslint/no-input-rename\n    @Input('fdpComboboxItemUse')\n    useModel: T;\n    /** @hidden */\n    name: FdoComboboxItemDefType = 'optionItemTemplate';\n\n    /** @hidden */\n    static ngTemplateContextGuard<T>(\n        dir: ComboboxItemDirective<T>,\n        ctx: { $implicit: T; index: number }\n    ): ctx is { $implicit: T; index: number } {\n        return true;\n    }\n}\n\n@Directive({\n    selector: '[fdpComboboxSelectedItem]',\n    standalone: true,\n    providers: [\n        {\n            provide: FDP_COMBOBOX_ITEM_DEF,\n            useExisting: ComboboxSelectedItemDirective\n        }\n    ]\n})\nexport class ComboboxSelectedItemDirective<T = unknown> extends FdpComboboxItemDef<{ $implicit: T; index: number }> {\n    /** @hidden */\n    // eslint-disable-next-line @angular-eslint/no-input-rename\n    @Input('fdpComboboxSelectedItemUse')\n    useModel: T;\n    /** @hidden */\n    name: FdoComboboxItemDefType = 'selectedItemTemplate';\n\n    /** @hidden */\n    static ngTemplateContextGuard<T>(\n        dir: ComboboxSelectedItemDirective<T>,\n        ctx: { $implicit: T; index: number }\n    ): ctx is { $implicit: T; index: number } {\n        return true;\n    }\n}\n\n@Directive({\n    selector: '[fdpComboboxGroup]',\n    standalone: true,\n    providers: [\n        {\n            provide: FDP_COMBOBOX_ITEM_DEF,\n            useExisting: ComboboxItemGroupDirective\n        }\n    ]\n})\nexport class ComboboxItemGroupDirective extends FdpComboboxItemDef<{ $implicit: { label: string } }> {\n    /** @hidden */\n    name: FdoComboboxItemDefType = 'groupItemTemplate';\n\n    /** @hidden */\n    static ngTemplateContextGuard(\n        dir: ComboboxItemGroupDirective,\n        ctx: { $implicit: { label: string } }\n    ): ctx is { $implicit: { label: string } } {\n        return true;\n    }\n}\n\n@Directive({\n    selector: '[fdpComboboxSecondaryItem]',\n    standalone: true,\n    providers: [\n        {\n            provide: FDP_COMBOBOX_ITEM_DEF,\n            useExisting: ComboboxSecondaryItemDirective\n        }\n    ]\n})\nexport class ComboboxSecondaryItemDirective<T = unknown> extends FdpComboboxItemDef<{ $implicit: T }> {\n    /** @hidden */\n    // eslint-disable-next-line @angular-eslint/no-input-rename\n    @Input('fdpComboboxSecondaryItemUse')\n    useModel: T;\n\n    /** @hidden */\n    name: FdoComboboxItemDefType = 'secondaryItemTemplate';\n\n    /** @hidden */\n    static ngTemplateContextGuard<T>(\n        dir: ComboboxSelectedItemDirective<T>,\n        ctx: { $implicit: T }\n    ): ctx is { $implicit: T } {\n        return true;\n    }\n}\n","import {\n    ALT,\n    CONTROL,\n    DOWN_ARROW,\n    ENTER,\n    ESCAPE,\n    LEFT_ARROW,\n    NUMPAD_EIGHT,\n    NUMPAD_FIVE,\n    NUMPAD_FOUR,\n    NUMPAD_NINE,\n    NUMPAD_ONE,\n    NUMPAD_SEVEN,\n    NUMPAD_SIX,\n    NUMPAD_THREE,\n    NUMPAD_TWO,\n    NUMPAD_ZERO,\n    RIGHT_ARROW,\n    SHIFT,\n    TAB,\n    UP_ARROW\n} from '@angular/cdk/keycodes';\nimport {\n    AfterViewInit,\n    ContentChildren,\n    Directive,\n    ElementRef,\n    EventEmitter,\n    Input,\n    OnDestroy,\n    Optional,\n    Output,\n    QueryList,\n    TemplateRef,\n    ViewChild,\n    inject\n} from '@angular/core';\nimport { Observable, Subject, Subscription, combineLatest, fromEvent, isObservable } from 'rxjs';\nimport { map, startWith } from 'rxjs/operators';\n\nimport { FocusEscapeDirection, FocusTrapService, KeyUtil, TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport { DialogConfig } from '@fundamental-ngx/core/dialog';\nimport { ListComponent } from '@fundamental-ngx/core/list';\nimport { MobileModeConfig } from '@fundamental-ngx/core/mobile-mode';\nimport { PopoverFillMode } from '@fundamental-ngx/core/shared';\nimport {\n    ArrayComboBoxDataSource,\n    CollectionBaseInput,\n    ComboBoxDataSource,\n    MatchingBy,\n    MatchingStrategy,\n    ObservableComboBoxDataSource,\n    OptionItem,\n    coerceArraySafe,\n    isDataSource,\n    isFunction,\n    isJsObject,\n    isOptionItem,\n    isString\n} from '@fundamental-ngx/platform/shared';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { SingleDropdownValueControl } from '@fundamental-ngx/cdk/forms';\nimport { AutoCompleteEvent } from '../../auto-complete/auto-complete.directive';\nimport { ComboboxConfig } from '../combobox.config';\nimport { FDP_COMBOBOX_ITEM_DEF, FdpComboboxItemDef } from '../directives/combobox-item.directive';\n\nexport type TextAlignment = 'left' | 'right';\nexport type FdpComboBoxDataSource<T> = ComboBoxDataSource<T> | Observable<T[]> | T[];\n\n@Directive()\nexport abstract class BaseCombobox\n    extends CollectionBaseInput\n    implements SingleDropdownValueControl, AfterViewInit, OnDestroy\n{\n    /** @hidden Method to emit change event */\n    abstract emitChangeEvent<K>(value: K): void;\n\n    /** @hidden Define is this item selected */\n    abstract isSelectedOptionItem(selectedItem: OptionItem): boolean;\n\n    /** @hidden Emit select OptionItem */\n    abstract selectOptionItem(item: OptionItem): void;\n\n    /** @hidden Define value as selected */\n    abstract setAsSelected(item: OptionItem[]): void;\n    /** Provides maximum height for the optionPanel */\n    @Input()\n    maxHeight = '250px';\n\n    /** Whether the autocomplete should be enabled; Enabled by default */\n    @Input()\n    autoComplete = true;\n\n    /**\n     * Todo: Name of the entity for which DataProvider will be loaded. You can either pass list of\n     * items or use this entityClass and internally we should be able to do lookup to some registry\n     * and retrieve the best matching DataProvider that is set on application level\n     */\n    @Input()\n    entityClass: string;\n\n    /** Whether the combobox should be built on mobile mode */\n    @Input()\n    mobile = false;\n\n    /** Multi Input Mobile Configuration, it's applied only, when mobile is enabled */\n    @Input()\n    mobileConfig: MobileModeConfig;\n\n    /** Tells the combo if we need to group items */\n    @Input()\n    group = false;\n\n    /** A field name to use to group data by (support dotted notation) */\n    @Input()\n    groupKey?: string;\n\n    /** The field to show data in secondary column */\n    @Input()\n    secondaryKey?: string;\n\n    /** Show the second column (Applicable for two columns layout) */\n    @Input()\n    showSecondaryText = false;\n\n    /** Horizontally align text inside the second column (Applicable for two columns layout) */\n    @Input()\n    secondaryTextAlignment: TextAlignment;\n\n    /** Turns on/off Adjustable Width feature */\n    @Input()\n    autoResize = false;\n\n    /**\n     * Preset options for the Select body width, whatever is chosen, the body has a 600px limit.\n     * `at-least` will apply a minimum width to the body equivalent to the width of the control. - Default\n     * `equal` will apply a width to the body equivalent to the width of the control.\n     * 'fit-content' will apply width needed to properly display items inside, independent of control.\n     */\n    @Input()\n    fillControlMode: PopoverFillMode = 'at-least';\n\n    /**\n     * Whether AddOn Button should be focusable\n     * @default true\n     */\n    @Input()\n    buttonFocusable = false;\n\n    /**\n     * The trigger events that will open/close the options popover.\n     * Accepts any [HTML DOM Events](https://www.w3schools.com/jsref/dom_obj_event.asp).\n     */\n    @Input()\n    triggers: string[] = [];\n\n    /** Whether the combobox should close, when a click is performed outside its boundaries. True by default */\n    @Input()\n    closeOnOutsideClick = true;\n\n    /** Whether list item options should be rendered as byline. */\n    @Input()\n    byline = false;\n\n    /** Datasource for suggestion list */\n    @Input()\n    set dataSource(value: FdpComboBoxDataSource<any>) {\n        if (value) {\n            this._initializeDataSource(value);\n        }\n    }\n\n    get dataSource(): FdpComboBoxDataSource<any> {\n        return this._dataSource;\n    }\n\n    /** Value of the combobox */\n    @Input()\n    set value(value: any) {\n        const selectedItems = coerceArraySafe(value);\n        this.setAsSelected(this._convertToOptionItems(selectedItems));\n        super.setValue(value);\n    }\n\n    get value(): any {\n        return super.getValue();\n    }\n\n    /**\n     * Action to perform when user shifts focus from the dropdown.\n     * - `close` will close the dropdown preserving previously selected value.\n     * - `closeAndSelect` will close the dropdown and select last focused dropdown item.\n     */\n    @Input()\n    tabOutStrategy: 'close' | 'closeAndSelect' = 'closeAndSelect';\n\n    /** Event emitted when data loading is started. */\n    // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n    @Output() onDataRequested = new EventEmitter<void>();\n\n    /** Event emitted when data loading is finished. */\n    // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n    @Output() onDataReceived = new EventEmitter<void>();\n\n    /** @hidden */\n    @ViewChild(ListComponent)\n    listComponent: ListComponent;\n\n    /** @hidden */\n    @ContentChildren(TemplateDirective)\n    private readonly _customTemplates: QueryList<TemplateDirective>;\n\n    /** @hidden */\n    @ContentChildren(FDP_COMBOBOX_ITEM_DEF)\n    private readonly _customItemDef: QueryList<FdpComboboxItemDef>;\n\n    /** @hidden Custom Option item Template */\n    optionItemTemplate: TemplateRef<any>;\n\n    /** @hidden Custom Group Header item Template */\n    groupItemTemplate: TemplateRef<any>;\n\n    /** @hidden Custom Secondary item Template */\n    secondaryItemTemplate: TemplateRef<any>;\n\n    /** @hidden Custom Selected option item Template */\n    selectedItemTemplate: TemplateRef<any>;\n\n    /** @hidden */\n    searchInputElement: ElementRef<HTMLInputElement>;\n\n    /** Input text of the input. */\n    set inputText(value: string) {\n        this._inputTextValue = value;\n\n        this.onTouched();\n    }\n\n    get inputText(): string {\n        return this._inputTextValue || '';\n    }\n\n    /** Whether the combobox is opened. */\n    isOpen = false;\n\n    /** Whether a combobox can be closed */\n    get canClose(): boolean {\n        return !(this.mobile && this.mobileConfig.approveButtonText);\n    }\n\n    /** @hidden List of matched suggestions */\n    _suggestions: OptionItem[] = [];\n\n    /** @hidden Max width of list container */\n    maxWidth: number | null = null;\n\n    /** @hidden Min width of list container */\n    minWidth: number | null = null;\n\n    /** @hidden Need for opening mobile version */\n    openChange = new Subject<boolean>();\n\n    /** @hidden */\n    get isGroup(): boolean {\n        return !!(this.group && this.groupKey);\n    }\n\n    /** Is suggestions list empty */\n    get isSuggestionsListEmpty(): boolean {\n        return this._suggestions.length === 0;\n    }\n\n    /** @hidden */\n    _flatSuggestions: OptionItem[] = [];\n\n    /** @hidden */\n    protected _dataSource: FdpComboBoxDataSource<any>;\n\n    /** @hidden */\n    private _inputTextValue: string;\n\n    /** @hidden */\n    private readonly _matchingStrategy: MatchingStrategy;\n\n    /** @hidden */\n    private _dsSubscription?: Subscription;\n\n    /** @hidden */\n    private _element: HTMLElement = this.elementRef.nativeElement;\n\n    /** @hidden */\n    private readonly _focusTrapService = inject(FocusTrapService);\n\n    /** Keys, that won't trigger the popover's open state, when dispatched on search input */\n    private readonly _nonOpeningKeys: number[] = [\n        ESCAPE,\n        ENTER,\n        CONTROL,\n        TAB,\n        SHIFT,\n        UP_ARROW,\n        RIGHT_ARROW,\n        DOWN_ARROW,\n        LEFT_ARROW,\n        ALT\n    ];\n\n    /** Keys, that are numbers from number keypad */\n    private readonly _numberPadNumberKeys: number[] = [\n        NUMPAD_ZERO,\n        NUMPAD_ONE,\n        NUMPAD_TWO,\n        NUMPAD_THREE,\n        NUMPAD_FOUR,\n        NUMPAD_FIVE,\n        NUMPAD_SIX,\n        NUMPAD_SEVEN,\n        NUMPAD_SEVEN,\n        NUMPAD_EIGHT,\n        NUMPAD_NINE\n    ];\n\n    /** @hidden */\n    protected constructor(\n        @Optional() readonly dialogConfig: DialogConfig,\n        protected comboboxConfig: ComboboxConfig\n    ) {\n        super();\n        this._matchingStrategy = this.comboboxConfig.matchingStrategy;\n    }\n\n    /** @hidden */\n    ngAfterViewInit(): void {\n        this._initWindowResize();\n        this._assignCustomTemplates();\n        super.ngAfterViewInit();\n    }\n\n    /** @hidden */\n    ngOnDestroy(): void {\n        super.ngOnDestroy();\n\n        if (isDataSource(this.dataSource)) {\n            (this.dataSource as ComboBoxDataSource<any>).close();\n        }\n\n        if (this._dsSubscription) {\n            this._dsSubscription.unsubscribe();\n        }\n    }\n\n    /** Is empty search field */\n    get isEmptyValue(): boolean {\n        return this.inputText.trim().length === 0;\n    }\n\n    /** write value for ControlValueAccessor */\n    writeValue(value: any): void {\n        const selectedItems = coerceArraySafe(value);\n        this.setAsSelected(this._convertToOptionItems(selectedItems));\n        super.writeValue(value);\n    }\n\n    /** @hidden */\n    searchTermChanged(text: string): void {\n        if (this.inputText === text) {\n            return;\n        }\n        this.inputText = text;\n\n        const queryMap = new Map();\n        queryMap.set('query', text);\n        queryMap.set('limit', 12);\n\n        this.ds.match(queryMap);\n    }\n\n    /** @hidden */\n    isOpenChangeHandle(isOpen: boolean): void {\n        if (this.isOpen === isOpen) {\n            return;\n        }\n\n        this.isOpen = isOpen;\n        this.onTouched();\n        this.openChange.next(isOpen);\n        this._onOpenChange(this.isOpen);\n\n        if (!this.isOpen && !this.mobile) {\n            this.searchInputElement.nativeElement.focus({ preventScroll: true });\n        }\n\n        this.detectChanges();\n    }\n\n    /** @hidden */\n    _onOpenChange(isOpen: boolean): void {\n        if (isOpen) {\n            this.formMessage?._popover.close();\n            /** Allow combobox arrow keys to work properly when combobox is inside a dialog with a trapped focus */\n            this._focusTrapService.pauseCurrentFocusTrap();\n        } else {\n            this._focusTrapService.unpauseCurrentFocusTrap();\n        }\n        this.formMessage?._popover.setIgnoreTriggers(isOpen);\n    }\n\n    /** @hidden */\n    handleOptionItem(value: OptionItem): void {\n        if (value) {\n            this.selectOptionItem(value);\n        }\n\n        this.searchInputElement.nativeElement.focus();\n    }\n\n    /** @hidden */\n    handlePressEnter(event: KeyboardEvent, value: OptionItem): void {\n        if (!KeyUtil.isKeyCode(event, ENTER)) {\n            return;\n        }\n\n        this.handleOptionItem(value);\n    }\n\n    /**\n     * Handle Click on Button\n     * @hidden\n     */\n    onPrimaryButtonClick(): void {\n        // if it's mobile mode ignore this click\n        if (this.mobile) {\n            return;\n        }\n\n        this.isOpenChangeHandle(!this.isOpen);\n\n        if (this.isOpen) {\n            this.searchInputElement?.nativeElement.focus();\n        }\n    }\n\n    /**\n     * Handle click on input group in mobile mode\n     * @hidden\n     */\n    openInMobileMode(): void {\n        // if it's already opened just ignore this click\n        // if it's not mobile mode just ignore this click\n        if (this.isOpen || !this.mobile) {\n            return;\n        }\n\n        // otherwise show options\n        this.isOpenChangeHandle(true);\n    }\n\n    /**\n     * Handle Keydown on Input\n     * @hidden\n     */\n    onInputKeydownHandler(event: KeyboardEvent): void {\n        if (this.readonly) {\n            return;\n        }\n\n        if (KeyUtil.isKeyCode(event, TAB)) {\n            this._close();\n            return;\n        }\n\n        if (KeyUtil.isKeyCode(event, DOWN_ARROW)) {\n            event.preventDefault();\n\n            if (event.altKey) {\n                this.isOpenChangeHandle(true);\n            }\n\n            if (this.isOpen && this.listComponent) {\n                this.listComponent.setItemActive(0);\n            } else if (!this.isOpen) {\n                this._chooseOtherItem(1);\n            }\n        } else if (KeyUtil.isKeyCode(event, UP_ARROW)) {\n            event.preventDefault();\n\n            this._chooseOtherItem(-1);\n        } else if (!event.ctrlKey && !KeyUtil.isKeyCode(event, this._nonOpeningKeys)) {\n            if (!KeyUtil.isKeyCode(event, this._numberPadNumberKeys)) {\n                this.isOpenChangeHandle(true);\n            }\n        }\n    }\n\n    /** Method passed to list component */\n    handleListFocusEscape(direction: FocusEscapeDirection): void {\n        if (direction === 'up') {\n            this.searchInputElement.nativeElement.focus();\n        }\n    }\n\n    /** @hidden */\n    _onCompleteTerm(event: AutoCompleteEvent): void {\n        if (event.forceClose) {\n            this.toggleSelectionByInputText(event.term);\n            this.isOpenChangeHandle(false);\n        }\n    }\n\n    /** @hidden */\n    toggleSelectionByInputText(text = this.inputText): void {\n        let optionItem = this._getSelectItemByInputValue(text);\n        if (!optionItem) {\n            optionItem = {\n                label: text,\n                value: text\n            };\n        }\n\n        this.selectOptionItem(optionItem);\n    }\n\n    /** @hidden */\n    _close(): void {\n        if (this.tabOutStrategy === 'closeAndSelect') {\n            const focusedItem = this.listComponent.getActiveItem();\n            if (focusedItem) {\n                this.handleOptionItem(focusedItem.value);\n                return;\n            }\n        }\n        this.inputText = this.value ? this.inputText : '';\n        this.searchInputElement.nativeElement.focus();\n        this.isOpenChangeHandle(false);\n        this.markForCheck();\n    }\n\n    /** @hidden */\n    protected _getSelectItemByInputValue(displayValue: string): OptionItem | undefined {\n        return this._flatSuggestions.find((value) => value.label === displayValue);\n    }\n\n    /** @hidden */\n    protected get ds(): ComboBoxDataSource<any> {\n        return this.dataSource as ComboBoxDataSource<any>;\n    }\n\n    /** @hidden Map grouped values to array. */\n    protected _flatGroups(items: OptionItem[]): OptionItem[] {\n        return items.reduce((result: OptionItem[], item: OptionItem) => result.concat(item.children ?? []), []);\n    }\n\n    /** @hidden */\n    private _displayFn = (value: any): string => this.displayValue(value);\n\n    /** @hidden */\n    private _secondaryFn = (value: any): string => {\n        if (isOptionItem(value)) {\n            return value.secondaryText ?? '';\n        }\n\n        if (isJsObject(value) && this.secondaryKey) {\n            const currentItem = this.objectGet(value, this.secondaryKey);\n\n            return isFunction(currentItem) ? currentItem() : currentItem;\n        }\n\n        return value;\n    };\n\n    /**\n     * @hidden\n     * Method that picks other value moved from current one by offset, called only when combobox is closed\n     */\n    private _chooseOtherItem(offset: number): void {\n        const activeValue = this._getSelectItemByValue(this.inputText);\n        const index: number = this._suggestions.findIndex((value) => value === activeValue);\n\n        if (this._suggestions[index + offset]) {\n            this.handleOptionItem(this._suggestions[index + offset]);\n        }\n    }\n\n    /** @hidden */\n    private _getSelectItemByValue(displayValue: string): OptionItem | undefined {\n        return this._suggestions.find((value) => value.label === displayValue);\n    }\n\n    /** @hidden */\n    private async _initializeDataSource(ds: FdpComboBoxDataSource<any>): Promise<void> {\n        this._suggestions = [];\n\n        if (isDataSource(this.dataSource)) {\n            (this.dataSource as ComboBoxDataSource<any>).close();\n\n            if (this._dsSubscription) {\n                this._dsSubscription.unsubscribe();\n                this._dsSubscription = undefined;\n            }\n        }\n\n        // initializing data source in the seperate microtask to let all config options to be set before it\n        // for example, \"isGroup\" input is needed for initialization logic and it might not be set at this point\n        await Promise.resolve();\n        // Convert whatever comes in as DataSource so we can work with it identically\n        this._dataSource = this._openDataStream(ds);\n    }\n\n    /** @hidden */\n    private _openDataStream(ds: FdpComboBoxDataSource<any>): ComboBoxDataSource<any> {\n        const initDataSource = this._toDataStream(ds);\n\n        if (initDataSource === undefined) {\n            throw new Error(`[dataSource] source did not match an array, Observable, or DataSource`);\n        }\n        this._dsSubscription = new Subscription();\n        /**\n         * This is single point of data entry to the component. We dont want to set data on different\n         * places. If any new data comes in either you do a search and you want to pass initial data\n         * its here.\n         */\n        const dsSub = initDataSource\n            .open()\n            .pipe(takeUntilDestroyed(this._destroyed))\n            .subscribe((data) => {\n                this._suggestions = this._convertToOptionItems(data);\n                this._flatSuggestions = this.isGroup ? this._flatGroups(this._suggestions) : this._suggestions;\n\n                this.stateChanges.next('initDataSource.open().');\n\n                this.markForCheck();\n            });\n        this._dsSubscription.add(dsSub);\n\n        this._dsSubscription.add(initDataSource.onDataRequested().subscribe(this.onDataRequested));\n        this._dsSubscription.add(initDataSource.onDataReceived().subscribe(this.onDataReceived));\n\n        initDataSource.dataProvider.setLookupKey(this.lookupKey);\n        const matchingBy: MatchingBy = {\n            firstBy: this._displayFn\n        };\n\n        if (this.secondaryKey) {\n            matchingBy.secondaryBy = this._secondaryFn;\n        }\n\n        initDataSource.dataProvider.setMatchingBy(matchingBy);\n        initDataSource.dataProvider.setMatchingStrategy(this._matchingStrategy);\n\n        // initial data fetch\n        const queryMap = new Map();\n        queryMap.set('query', '*');\n        queryMap.set('limit', 12);\n        initDataSource.match(queryMap);\n\n        return initDataSource;\n    }\n\n    /** @hidden */\n    private _toDataStream(source: FdpComboBoxDataSource<any>): ComboBoxDataSource<any> | undefined {\n        if (isDataSource(source)) {\n            return source as ComboBoxDataSource<any>;\n        }\n\n        if (Array.isArray(source)) {\n            // default implementation to work on top of arrays\n            return new ArrayComboBoxDataSource<any>(source);\n        }\n\n        if (isObservable(source)) {\n            return new ObservableComboBoxDataSource<any>(source);\n        }\n\n        return undefined;\n    }\n\n    /** @hidden */\n    private _initWindowResize(): void {\n        this._getOptionsListWidth();\n\n        fromEvent(window, 'resize')\n            .pipe(takeUntilDestroyed(this._destroyed))\n            .subscribe(() => this._getOptionsListWidth());\n    }\n\n    /** @hidden */\n    private _getOptionsListWidth(): void {\n        const gap = 5;\n        const { offsetWidth, clientWidth } = document.body;\n        const { width, left } = (this._element.querySelector('fd-input-group') as HTMLElement).getBoundingClientRect();\n        const scrollBarWidth = offsetWidth - clientWidth;\n\n        this.maxWidth = this.autoResize ? window.innerWidth - scrollBarWidth - left - gap : this.minWidth;\n        this.minWidth = width - 2;\n\n        this.detectChanges();\n    }\n\n    /**\n     * Convert original data to OptionItems Interface\n     * @hidden\n     */\n    private _convertToOptionItems(items: any[]): OptionItem[] {\n        const item = items[0];\n\n        const elementTypeIsOptionItem = isOptionItem(item);\n        if (elementTypeIsOptionItem) {\n            return items as OptionItem[];\n        }\n\n        const elementTypeIsObject = isJsObject(item);\n        if (elementTypeIsObject) {\n            return this._convertObjectsToOptionItems(items);\n        }\n\n        const elementTypeIsString = isString(item);\n        if (elementTypeIsString) {\n            return this._convertPrimitiveToOptionItems(items);\n        }\n\n        return [];\n    }\n\n    /**\n     * Convert data to OptionItems Interface\n     * @hidden\n     */\n    private _convertObjectsToOptionItems(items: any[]): OptionItem[] {\n        if (this.group && this.groupKey) {\n            return this._convertObjectsToGroupOptionItems(items);\n        } else if (this.showSecondaryText && this.secondaryKey) {\n            return this._convertObjectsToSecondaryOptionItems(items);\n        } else {\n            return this._convertObjectsToDefaultOptionItems(items);\n        }\n    }\n\n    /**\n     * Convert object[] data to Group OptionItems Interface\n     * @hidden\n     */\n    private _convertObjectsToGroupOptionItems<K>(items: K[]): OptionItem[] {\n        const group: { [key: string]: K[] } = {};\n\n        for (let i = 0; i < items.length; i++) {\n            const item = items[i];\n            const keyValue = this.groupKey && item[this.groupKey];\n            if (!keyValue) {\n                continue;\n            }\n\n            if (!group[keyValue]) {\n                group[keyValue] = [];\n            }\n\n            group[keyValue].push(item);\n        }\n\n        return Object.keys(group).map((key) => {\n            const selectItem: OptionItem = {\n                label: key,\n                value: null,\n                isGroup: true\n            };\n\n            const currentGroup = group[key];\n\n            if (this.showSecondaryText && this.secondaryKey) {\n                selectItem.children = this._convertObjectsToSecondaryOptionItems(currentGroup);\n            } else {\n                selectItem.children = this._convertObjectsToDefaultOptionItems(currentGroup);\n            }\n\n            return selectItem;\n        });\n    }\n\n    /**\n     * Convert object[] data to Secondary OptionItems Interface\n     * @hidden\n     */\n    private _convertObjectsToSecondaryOptionItems<K>(items: K[]): OptionItem[] {\n        const selectItems: OptionItem[] = [];\n\n        for (let i = 0; i < items.length; i++) {\n            const value = items[i];\n            selectItems.push({\n                label: this.displayValue(value),\n                secondaryText: this.objectGet(value, this.secondaryKey),\n                value\n            });\n        }\n\n        return selectItems;\n    }\n\n    /**\n     * Convert Primitive data(Boolean, String, Number) to OptionItems Interface\n     * @hidden\n     */\n    private _convertPrimitiveToOptionItems(items: any[]): OptionItem[] {\n        const selectItems: OptionItem[] = [];\n\n        for (let i = 0; i < items.length; i++) {\n            const value = items[i];\n            selectItems.push({ label: value, value });\n        }\n\n        return selectItems;\n    }\n\n    /**\n     * Convert object[] to OptionItems Interface (Default)\n     * @hidden\n     */\n    private _convertObjectsToDefaultOptionItems(items: any[]): OptionItem[] {\n        const selectItems: OptionItem[] = [];\n\n        for (let i = 0; i < items.length; i++) {\n            const value = items[i];\n            selectItems.push({\n                label: this.displayValue(value),\n                value\n            });\n        }\n\n        return selectItems;\n    }\n\n    /** @hidden Assign custom templates */\n    private _assignCustomTemplates(): void {\n        combineLatest([this._customTemplates.changes, this._customItemDef.changes])\n            .pipe(\n                startWith(null),\n                map(() =>\n                    this._customItemDef.length > 0 ? this._customItemDef.toArray() : this._customTemplates.toArray()\n                ),\n                takeUntilDestroyed(this._destroyed)\n            )\n            .subscribe((data) => {\n                data.forEach((template: FdpComboboxItemDef | TemplateDirective) => {\n                    const templateName = template instanceof TemplateDirective ? template.name() : template.name;\n                    switch (templateName) {\n                        case 'optionItemTemplate':\n                            this.optionItemTemplate = template.templateRef;\n                            break;\n                        case 'groupItemTemplate':\n                            this.groupItemTemplate = template.templateRef;\n                            break;\n                        case 'secondaryItemTemplate':\n                            this.secondaryItemTemplate = template.templateRef;\n                            break;\n                        case 'selectedItemTemplate':\n                            this.selectedItemTemplate = template.templateRef;\n                            break;\n                    }\n                });\n            });\n    }\n}\n","import {\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    Component,\n    ElementRef,\n    EventEmitter,\n    Inject,\n    Injector,\n    OnInit,\n    Optional,\n    Output,\n    TemplateRef,\n    ViewChild,\n    ViewContainerRef,\n    ViewEncapsulation\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FD_FORM_FIELD_CONTROL } from '@fundamental-ngx/cdk/forms';\n\nimport { DynamicComponentService, Nullable } from '@fundamental-ngx/cdk/utils';\nimport { ContentDensityModule, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\nimport { DialogConfig } from '@fundamental-ngx/core/dialog';\nimport { ComboBoxDataSource, DATA_PROVIDERS, DataProvider, OptionItem } from '@fundamental-ngx/platform/shared';\n\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { SearchHighlightPipe } from '@fundamental-ngx/cdk/utils';\nimport { FormInputMessageGroupComponent, FormMessageComponent } from '@fundamental-ngx/core/form';\nimport { InputGroupModule } from '@fundamental-ngx/core/input-group';\nimport { ListModule, ListSecondaryDirective } from '@fundamental-ngx/core/list';\nimport { PopoverBodyComponent, PopoverComponent, PopoverControlComponent } from '@fundamental-ngx/core/popover';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { AutoCompleteDirective } from '../../auto-complete/auto-complete.directive';\nimport { ComboboxMobileComponent } from '../combobox-mobile/combobox/combobox-mobile.component';\nimport { ComboboxConfig } from '../combobox.config';\nimport { COMBOBOX_COMPONENT, ComboboxInterface } from '../combobox.interface';\nimport { BaseCombobox } from '../commons/base-combobox';\n\nexport class ComboboxSelectionChangeEvent {\n    /**\n     * Combobox selection event\n     * @param source Combobox component\n     * @param payload Selected option\n     */\n    constructor(\n        public source: ComboboxComponent,\n        public payload: any // Contains selected item\n    ) {}\n}\n\n@Component({\n    selector: 'fdp-combobox',\n    templateUrl: './combobox.component.html',\n    styleUrl: './combobox.component.scss',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    providers: [\n        { provide: FD_FORM_FIELD_CONTROL, useExisting: ComboboxComponent, multi: true },\n        contentDensityObserverProviders()\n    ],\n    imports: [\n        NgTemplateOutlet,\n        PopoverComponent,\n        PopoverControlComponent,\n        PopoverBodyComponent,\n        FormInputMessageGroupComponent,\n        InputGroupModule,\n        FormsModule,\n        AutoCompleteDirective,\n        FormMessageComponent,\n        ListModule,\n        NgClass,\n        ListSecondaryDirective,\n        SearchHighlightPipe,\n        FdTranslatePipe,\n        ContentDensityModule\n    ]\n})\nexport class ComboboxComponent extends BaseCombobox implements ComboboxInterface, OnInit, AfterViewInit {\n    /** Event emitted when item is selected. */\n    @Output()\n    selectionChange = new EventEmitter<ComboboxSelectionChangeEvent>();\n    /** @hidden */\n    @ViewChild('searchInputElement')\n    declare searchInputElement: ElementRef<HTMLInputElement>;\n\n    /** @hidden */\n    @ViewChild('controlTemplate')\n    controlTemplate: TemplateRef<any>;\n\n    /** @hidden */\n    @ViewChild('listTemplate')\n    listTemplate: TemplateRef<any>;\n\n    /** @hidden */\n    _selectedElement?: OptionItem;\n\n    /** @hidden */\n    _itemMousedown = false;\n\n    /** @hidden */\n    constructor(\n        @Optional() _dialogConfig: DialogConfig,\n        readonly _dynamicComponentService: DynamicComponentService,\n        private readonly _viewContainerRef: ViewContainerRef,\n        private readonly _injector: Injector,\n        @Optional() @Inject(DATA_PROVIDERS) private providers: Map<string, DataProvider<any>>,\n        _comboboxConfig: ComboboxConfig\n    ) {\n        super(_dialogConfig, _comboboxConfig);\n    }\n    /** @hidden */\n    ngOnInit(): void {\n        super.ngOnInit();\n        const providers = this.providers?.size === 0 ? this.comboboxConfig.providers : this.providers;\n        // if we have both prefer dataSource\n        if (!this.dataSource && this.entityClass && providers?.has(this.entityClass)) {\n            this.dataSource = new ComboBoxDataSource(providers.get(this.entityClass)!);\n        }\n    }\n\n    /** @hidden */\n    ngAfterViewInit(): void {\n        super.ngAfterViewInit();\n\n        if (this.mobile) {\n            this._setUpMobileMode();\n        }\n    }\n\n    /** @hidden */\n    _onBlur(event: FocusEvent): void {\n        if (this.mobile) {\n            return;\n        }\n\n        const target = event.relatedTarget as HTMLElement;\n        if (target) {\n            const isList = !!target.closest('.fdp-combobox__list-container');\n            const isListItem = !!target.closest('.fd-list__item');\n            if (isList || isListItem) {\n                return;\n            }\n        }\n\n        if ((!this._selectedElement && !this.inputText) || this._selectedElement?.label === this.inputText) {\n            return;\n        }\n\n        const optionItem = this._getSelectedOptionItem(this.inputText);\n\n        this._updateModel(optionItem ? optionItem.value : this.inputText);\n    }\n\n    /** @hidden Method to emit change event */\n    emitChangeEvent<T>(modelValue: T): void {\n        const event = new ComboboxSelectionChangeEvent(this, modelValue);\n\n        this.selectionChange.emit(event);\n    }\n\n    /** @hidden Method to set selected item */\n    selectOptionItem(item: OptionItem, shouldClosePopover = true): void {\n        if (this.mobile) {\n            this._selectedElement = item;\n            this.inputText = item.label;\n            this.detectChanges();\n\n            return;\n        }\n\n        this.inputText = item.label;\n        this._checkAndUpdate(item);\n        if (shouldClosePopover) {\n            this.isOpenChangeHandle(false);\n        }\n    }\n\n    /** @hidden Method to set as selected */\n    setAsSelected(item: OptionItem[]): void {\n        const selectedItem = item[0];\n\n        if (this.isSelectedOptionItem(selectedItem)) {\n            return;\n        }\n\n        this._selectedElement = (this.isGroup && selectedItem?.children?.[0]) || selectedItem;\n        this.inputText = this.displayValue(this._selectedElement);\n    }\n\n    /** @hidden Define is selected item selected */\n    isSelectedOptionItem(selectedItem: any): boolean {\n        if (!!this._selectedElement && !!selectedItem) {\n            if (this.lookupKey) {\n                return this.lookupValue(this._selectedElement) === this.lookupValue(selectedItem);\n            } else {\n                return selectedItem.value === this._selectedElement.value;\n            }\n        } else {\n            return false;\n        }\n    }\n\n    /** @hidden Define is selected item selected by display value */\n    isSelectedOptionItemByDisplayValue(selectedItem: any): boolean {\n        return this._selectedElement?.label === selectedItem;\n    }\n\n    /** Handle dialog dismissing, closes popover and sets backup data. */\n    dialogDismiss(term: string): void {\n        if (this._selectedElement?.label !== term) {\n            this._selectedElement = this._getSelectedOptionItem(term);\n        }\n\n        this.inputText = term;\n        this.isOpenChangeHandle(false);\n    }\n\n    /** Handle dialog approval, closes popover and propagates data changes. */\n    dialogApprove(): void {\n        if (this._selectedElement?.label === this.inputText) {\n            this._updateModel(this._selectedElement.value);\n        } else {\n            const optionItem = this._getSelectedOptionItem(this.inputText);\n\n            this._updateModel(optionItem ? optionItem.value : this.inputText);\n        }\n\n        this.isOpenChangeHandle(false);\n    }\n\n    /** @hidden */\n    onItemFocused(value: OptionItem): void {\n        if (!this._itemMousedown && !this.mobile) {\n            this.selectOptionItem(value, false);\n        }\n        this._itemMousedown = false;\n    }\n\n    /** @hidden */\n    _getLabelledBy(): Nullable<string> {\n        let retVal = this.ariaLabelledBy;\n\n        if (this.stateMessage) {\n            retVal = retVal + ' fdp-list-message-combobox-state-message-' + this.id;\n        }\n\n        if (this.advancedStateMessage?.hasErrors && this.advancedStateMessage?.template) {\n            retVal = retVal + ' fdp-list-message-combobox-error-message-' + this.id;\n        }\n\n        return retVal;\n    }\n\n    /** @hidden if not selected update model */\n    private _checkAndUpdate(modelValue: OptionItem): void {\n        if (this.isSelectedOptionItem(modelValue)) {\n            return;\n        }\n\n        this._updateModel(modelValue.value);\n    }\n\n    /** @hidden Update model */\n    private _updateModel(value: any): void {\n        // setting value, it will call setValue()\n        this.value = value;\n\n        this.emitChangeEvent(value ? value : null);\n    }\n\n    /** @hidden */\n    private async _setUpMobileMode(): Promise<void> {\n        const injector = Injector.create({\n            providers: [{ provide: COMBOBOX_COMPONENT, useValue: this }],\n            parent: this._injector\n        });\n\n        this._dynamicComponentService.createDynamicComponent(\n            { listTemplate: this.listTemplate, controlTemplate: this.controlTemplate },\n            ComboboxMobileComponent,\n            {\n                containerRef: this._viewContainerRef\n            },\n            { injector }\n        );\n    }\n\n    /** @hidden */\n    private _getSelectedOptionItem(text: string): OptionItem | undefined {\n        if (!this.isGroup) {\n            return this._suggestions.find((item) => item.label === text);\n        }\n\n        return this._suggestions\n            .reduce((result: OptionItem[], item: OptionItem) => {\n                result.push(...(item.children ?? []));\n\n                return result;\n            }, [])\n            .find((item) => item.label === text);\n    }\n}\n","<ng-template [ngTemplateOutlet]=\"mobile ? controlTemplate : desktopTemplate\"></ng-template>\n<ng-template #desktopTemplate>\n    <fd-popover\n        [isOpen]=\"isOpen && _suggestions.length > 0\"\n        (isOpenChange)=\"isOpenChangeHandle($event)\"\n        [fillControlMode]=\"fillControlMode\"\n        [focusTrapped]=\"true\"\n        [triggers]=\"triggers\"\n        [disabled]=\"disabled || readonly\"\n        [maxWidth]=\"autoResize ? null : minWidth\"\n        [closeOnOutsideClick]=\"closeOnOutsideClick\"\n        additionalBodyClass=\"fdp-combobox__popover\"\n    >\n        <fd-popover-control>\n            <ng-template [ngTemplateOutlet]=\"controlTemplate\"></ng-template>\n        </fd-popover-control>\n        <fd-popover-body [hidden]=\"_suggestions.length === 0\">\n            <ng-template [ngTemplateOutlet]=\"listTemplate\"></ng-template>\n            <ng-content></ng-content>\n        </fd-popover-body>\n    </fd-popover>\n</ng-template>\n<ng-template #controlTemplate>\n    <fd-form-input-message-group>\n        <fd-input-group\n            [id]=\"id + '-input-group-container'\"\n            [button]=\"!readonly\"\n            [glyph]=\"!readonly ? 'navigation-down-arrow' : ' '\"\n            [state]=\"mobile && isOpen ? null : state\"\n            [buttonFocusable]=\"buttonFocusable\"\n            [disabled]=\"disabled\"\n            [readonly]=\"readonly\"\n            [isControl]=\"true\"\n            (addOnButtonClicked)=\"onPrimaryButtonClick()\"\n            [isExpanded]=\"!mobile && isOpen && _suggestions.length > 0\"\n            [attr.aria-disabled]=\"disabled\"\n            [glyphAriaLabel]=\"ariaLabel\"\n            (click)=\"openInMobileMode()\"\n        >\n            <input\n                #searchInputElement\n                fdp-auto-complete\n                [options]=\"_suggestions\"\n                [inputText]=\"inputText\"\n                [mobile]=\"mobile\"\n                (onComplete)=\"_onCompleteTerm($event)\"\n                type=\"text\"\n                role=\"combobox\"\n                autocomplete=\"off\"\n                [attr.aria-label]=\"ariaLabel\"\n                [attr.aria-labelledby]=\"_getLabelledBy()\"\n                [attr.aria-autocomplete]=\"autoComplete && !mobile ? 'list' : null\"\n                [attr.aria-haspopup]=\"autoComplete && !mobile\"\n                [attr.aria-required]=\"required\"\n                fd-input-group-input\n                tabindex=\"0\"\n                [id]=\"id\"\n                [name]=\"name\"\n                (keydown)=\"onInputKeydownHandler($event)\"\n                [disabled]=\"disabled\"\n                [ngModel]=\"inputText\"\n                (ngModelChange)=\"searchTermChanged($event)\"\n                [placeholder]=\"placeholder\"\n                (focus)=\"onTouched()\"\n                (blur)=\"_onBlur($event)\"\n                [attr.aria-expanded]=\"isOpen && _suggestions.length > 0\"\n                [readonly]=\"readonly\"\n                [attr.aria-readonly]=\"readonly\"\n            />\n        </fd-input-group>\n        @if (isOpen) {\n            <div class=\"fdp-combobox__count-list-results\" role=\"status\">\n                @if (_flatSuggestions.length || '0'; as count) {\n                    {{\n                        (\n                            (count === 1\n                                ? 'platformCombobox.countListResultsSingular'\n                                : 'platformCombobox.countListResultsPlural'\n                            ) | fdTranslate: { count: count }\n                        )()\n                    }}\n                }\n            </div>\n        }\n        @if (mobile || isOpen ? null : !!stateMessage) {\n            <fd-form-message [type]=\"state\" [innerHtml]=\"stateMessage\"></fd-form-message>\n        }\n    </fd-form-input-message-group>\n</ng-template>\n<ng-template #listTemplate>\n    <ul\n        fd-list\n        [hasMessage]=\"!!stateMessage\"\n        (focusEscapeList)=\"handleListFocusEscape($event)\"\n        [dropdownMode]=\"true\"\n        class=\"fdp-combobox__list\"\n        [hasMessage]=\"!!stateMessage || (!!advancedStateMessage?.hasErrors && !!advancedStateMessage?.template)\"\n        [id]=\"id + '-result'\"\n        role=\"listbox\"\n        [byline]=\"byline\"\n        [attr.aria-labelledby]=\"id + '-search'\"\n        [style.maxHeight]=\"!mobile && maxHeight\"\n        [style.maxWidth]=\"autoResize && maxWidth + 'px'\"\n        (keydown.tab)=\"_close()\"\n        (keydown.shift.tab)=\"_close()\"\n    >\n        @if (stateMessage) {\n            <li\n                [attr.aria-label]=\"stateMessage\"\n                fd-list-message\n                tabindex=\"-1\"\n                role=\"presentation\"\n                [type]=\"state || 'default'\"\n                [innerHtml]=\"stateMessage\"\n                [attr.id]=\"'fdp-list-message-combobox-state-message-' + id\"\n            ></li>\n        }\n        @if (advancedStateMessage?.hasErrors && advancedStateMessage?.template) {\n            <li\n                fd-list-message\n                tabindex=\"-1\"\n                role=\"presentation\"\n                [type]=\"state || 'default'\"\n                [attr.id]=\"'fdp-list-message-combobox-error-message-' + id\"\n            >\n                <ng-template [ngTemplateOutlet]=\"advancedStateMessage!.template!\"></ng-template>\n            </li>\n        }\n        <ng-content></ng-content>\n        @if (isGroup) {\n            @for (group of _suggestions; track group) {\n                @if (!groupItemTemplate) {\n                    <li fd-list-group-header role=\"option\">\n                        <span fd-list-title [attr.title]=\"group.label\">{{ group.label }}</span>\n                    </li>\n                } @else {\n                    <ng-template\n                        [ngTemplateOutlet]=\"groupItemTemplate\"\n                        [ngTemplateOutletContext]=\"{ $implicit: { label: group.label } }\"\n                    ></ng-template>\n                }\n                @for (optionItem of group.children; track optionItem; let i = $index) {\n                    <li\n                        (click)=\"handleOptionItem(optionItem)\"\n                        (mousedown)=\"_itemMousedown = true\"\n                        (focus)=\"onItemFocused(optionItem)\"\n                        fd-list-item\n                        ariaRole=\"option\"\n                        [tabindex]=\"0\"\n                        (keyDown)=\"handlePressEnter($event, optionItem)\"\n                        [selected]=\"isSelectedOptionItem(optionItem)\"\n                        [value]=\"optionItem\"\n                    >\n                        <ng-template\n                            [ngTemplateOutlet]=\"listItem\"\n                            [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: i }\"\n                        ></ng-template>\n                    </li>\n                }\n            }\n        } @else {\n            @for (optionItem of _suggestions; track optionItem; let i = $index) {\n                <li\n                    (click)=\"handleOptionItem(optionItem)\"\n                    (mousedown)=\"_itemMousedown = true\"\n                    (focus)=\"onItemFocused(optionItem)\"\n                    fd-list-item\n                    ariaRole=\"option\"\n                    [tabindex]=\"0\"\n                    (keyDown)=\"handlePressEnter($event, optionItem)\"\n                    [selected]=\"isSelectedOptionItem(optionItem)\"\n                    [value]=\"optionItem\"\n                >\n                    <ng-template\n                        [ngTemplateOutlet]=\"listItem\"\n                        [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: i }\"\n                    ></ng-template>\n                </li>\n            }\n        }\n    </ul>\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #listItem>\n    @if (isSelectedOptionItem(optionItem) && !!selectedItemTemplate) {\n        <ng-template\n            [ngTemplateOutlet]=\"selectedItemTemplate\"\n            [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n        ></ng-template>\n    }\n    @if (!(isSelectedOptionItem(optionItem) && selectedItemTemplate)) {\n        <ng-template\n            [ngTemplateOutlet]=\"optionItemSource\"\n            [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: index }\"\n        ></ng-template>\n        <ng-template\n            [ngTemplateOutlet]=\"secondaryTextSource\"\n            [ngTemplateOutletContext]=\"{ optionItem: optionItem }\"\n        ></ng-template>\n    }\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #optionItemSource>\n    @if (!optionItemTemplate) {\n        <span [attr.title]=\"optionItem.label\" [innerHTML]=\"optionItem.label | highlight: inputText\"></span>\n    } @else {\n        <ng-template\n            [ngTemplateOutlet]=\"optionItemTemplate\"\n            [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n        ></ng-template>\n    }\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" #secondaryTextSource>\n    @if (showSecondaryText) {\n        @if (!secondaryItemTemplate) {\n            <span\n                [style.text-align]=\"secondaryTextAlignment\"\n                fd-list-secondary\n                [attr.title]=\"optionItem.secondaryText\"\n                [innerHTML]=\"optionItem.secondaryText | highlight: inputText\"\n            ></span>\n        } @else {\n            <ng-template\n                [ngTemplateOutlet]=\"secondaryItemTemplate\"\n                [ngTemplateOutletContext]=\"{ $implicit: optionItem.value }\"\n            ></ng-template>\n        }\n    }\n</ng-template>\n","import { NgModule } from '@angular/core';\n\nimport { ComboboxComponent } from './combobox/combobox.component';\nimport {\n    ComboboxItemDirective,\n    ComboboxItemGroupDirective,\n    ComboboxSecondaryItemDirective,\n    ComboboxSelectedItemDirective\n} from './directives/combobox-item.directive';\n\nconst EXPORTABLE_COMPONENTS = [\n    ComboboxComponent,\n    ComboboxItemDirective,\n    ComboboxSelectedItemDirective,\n    ComboboxItemGroupDirective,\n    ComboboxSecondaryItemDirective\n];\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n    imports: [...EXPORTABLE_COMPONENTS],\n    exports: [...EXPORTABLE_COMPONENTS]\n})\nexport class PlatformComboboxModule {}\n","import { NgModule } from '@angular/core';\nimport { PlatformDatePickerComponent } from './date-picker.component';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n    imports: [PlatformDatePickerComponent],\n    exports: [PlatformDatePickerComponent]\n})\nexport class PlatformDatePickerModule {}\n","/** @hidden */\nexport function createMissingDateImplementationError(provider: string): Error {\n    return Error(\n        `FdpDatetimePicker: No provider found for ${provider}. You must import one of the following ` +\n            `modules at your application root: FdDatetimeModule, or provide a ` +\n            `custom implementation.`\n    );\n}\n","import {\n    AfterViewInit,\n    booleanAttribute,\n    ChangeDetectionStrategy,\n    Component,\n    ElementRef,\n    EventEmitter,\n    inject,\n    input,\n    Input,\n    Output,\n    ViewChild\n} from '@angular/core';\nimport { FormsModule, NgControl } from '@angular/forms';\nimport { FD_FORM_FIELD_CONTROL, FormStates } from '@fundamental-ngx/cdk/forms';\n\nimport { CalendarYearGrid, DaysOfWeek, FdCalendarView, FdCalendarViewEnum } from '@fundamental-ngx/core/calendar';\nimport { DATE_TIME_FORMATS, DatetimeAdapter, DateTimeFormats } from '@fundamental-ngx/core/datetime';\nimport { DatetimePickerComponent } from '@fundamental-ngx/core/datetime-picker';\nimport { MobileModeConfig } from '@fundamental-ngx/core/mobile-mode';\nimport { Placement, SpecialDayRule } from '@fundamental-ngx/core/shared';\nimport { BaseInput } from '@fundamental-ngx/platform/shared';\nimport { createMissingDateImplementationError } from './errors';\n\n@Component({\n    selector: 'fdp-datetime-picker',\n    templateUrl: './datetime-picker.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [{ provide: FD_FORM_FIELD_CONTROL, useExisting: PlatformDatetimePickerComponent, multi: true }],\n    imports: [DatetimePickerComponent, FormsModule]\n})\nexport class PlatformDatetimePickerComponent<D> extends BaseInput implements AfterViewInit {\n    /**\n     * value for datetime\n     */\n    @Input()\n    set value(value: D) {\n        super.setValue(value);\n    }\n    get value(): D {\n        return super.getValue();\n    }\n\n    /**\n     *  The placement of the popover. It can be one of: top, top-start, top-end, bottom,\n     *  bottom-start, bottom-end, right, right-start, right-end, left, left-start, left-end.\n     */\n    @Input()\n    placement: Placement = 'bottom-start';\n\n    /** The element to which the popover should be appended. */\n    @Input()\n    appendTo: ElementRef;\n\n    /**\n     * Whether the time component should be meridian (am/pm).\n     * Default value is based on the current locale format option\n     * */\n    @Input()\n    meridian: boolean;\n\n    /**\n     * Whether the time component shows seconds.\n     * Default value is based on the current locale format option\n     * */\n    @Input()\n    displaySeconds: boolean;\n\n    /**\n     * Whether the time component shows minutes.\n     * Default value is based on the current locale format option\n     * */\n    @Input()\n    displayMinutes: boolean;\n\n    /**\n     * Whether the time component shows hours.\n     * Default value is based on the current locale format option\n     * */\n    @Input()\n    displayHours: boolean;\n\n    /** Whether to perform visual validation on the picker input. */\n    @Input()\n    useValidation = true;\n\n    /** Whether the popover is open. Two-way binding is supported. */\n    @Input()\n    isOpen = false;\n\n    /** The starting day of week for the calendar. */\n    @Input()\n    startingDayOfWeek: DaysOfWeek;\n\n    /** Actually shown active view one of 'day' | 'month' | 'year' in calendar component*/\n    @Input()\n    activeView: FdCalendarView = FdCalendarViewEnum.Day;\n\n    /** Whether a null input is considered valid. */\n    @Input()\n    allowNull = true;\n\n    /**\n     * @Input when set to true time component will use 2 digits for each number.\n     * For example 9 will become 09\n     * but 12 will be kept as 12.\n     * Only uses by time component and does not change input format\n     */\n    @Input() keepTwoDigitsTime = false;\n\n    /**\n     *  The state of the form control - applies css classes.\n     *  Can be `success`, `error`, `warning`, `information` or blank for default.\n     */\n    @Input()\n    set state(state: FormStates | undefined) {\n        super.state = state;\n    }\n\n    get state(): FormStates {\n        if (this.dateTimePickerComponent?.isInvalidDateInput) {\n            // if any other error from core dtp\n            return 'error';\n        }\n        return super.state;\n    }\n\n    /**\n     * Whether AddOn Button should be focusable\n     * @default true\n     */\n    @Input()\n    buttonFocusable = true;\n\n    /**\n     * Special days mark, it can be used by passing array of object with\n     * Special day number, list 1-20 [class:`fd-calendar__item--legend-{{number}}`] is available there:\n     * https://sap.github.io/fundamental-styles/components/calendar.html calendar special days section\n     * Rule accepts method with FdDate object as a parameter. ex:\n     * `rule: (fdDate: FdDate) => fdDate.getDay() === 1`, which will mark all sundays as special day.\n     */\n    @Input()\n    specialDaysRules: SpecialDayRule<D>[] = [];\n\n    /**\n     * Object to customize year grid,\n     * Row, Columns and method to display year can be modified\n     */\n    @Input()\n    yearGrid: CalendarYearGrid = {\n        rows: 4,\n        cols: 5\n    };\n\n    /**\n     * Object to customize aggregated year grid,\n     * Row, Columns and method to display year can be modified\n     */\n    @Input()\n    aggregatedYearGrid: CalendarYearGrid = {\n        rows: 4,\n        cols: 3\n    };\n\n    /**\n     * Whether user wants to mark sunday/saturday with `fd-calendar__item--weekend` class\n     */\n    @Input()\n    markWeekends = true;\n\n    /** @Input Whether to show spinner buttons */\n    @Input()\n    spinnerButtons = true;\n\n    /**\n     * Whether user wants to show week numbers next to days\n     */\n    @Input()\n    showWeekNumbers = true;\n\n    /** Whether or not to show the datetime picker footer with submit/cancel buttons. */\n    @Input()\n    showFooter = true;\n\n    /**\n     * Whether to recalculate value from the input as user types or on blur.\n     * By default, updates the value as user types.\n     * @default false\n     */\n    @Input()\n    processInputOnBlur = false;\n\n    /**\n     * Whether to prevent page scrolling when focusing date picker input field after calendar has been closed.\n     */\n    @Input()\n    preventScrollOnFocus = false;\n\n    /** Whether date picker should rendered in mobile mode. */\n    @Input()\n    mobile = false;\n\n    /** Mobile mode configuration. */\n    @Input()\n    mobileConfig: MobileModeConfig;\n\n    /** Whether calendar is used inside mobile in landscape mode, it also adds close button on right side */\n    @Input()\n    mobileLandscape = false;\n\n    /** Whether calendar is used inside mobile in portrait mode */\n    @Input()\n    mobilePortrait = false;\n\n    /** Event emitted when the state of the isOpen property changes. */\n    @Output()\n    readonly isOpenChange = new EventEmitter<boolean>();\n\n    /** Event thrown every time calendar active view is changed */\n    @Output()\n    readonly activeViewChange: EventEmitter<FdCalendarView> = new EventEmitter<FdCalendarView>();\n\n    /** Event emitted when the date changes. This can be a time or day change. */\n    @Output()\n    readonly datetimeChange: EventEmitter<D> = new EventEmitter<D>();\n\n    /** Event emitted when popover closes. */\n    @Output()\n    // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n    readonly onClose: EventEmitter<void> = new EventEmitter<void>();\n\n    /** @hidden */\n    @ViewChild(DatetimePickerComponent)\n    dateTimePickerComponent: DatetimePickerComponent<D>;\n\n    /** @hidden */\n    @ViewChild(DatetimePickerComponent, { static: true, read: ElementRef })\n    protected _elRef: ElementRef;\n\n    /** @hidden */\n    @ViewChild(DatetimePickerComponent, { static: true, read: NgControl })\n    protected _control: NgControl;\n\n    /**\n     * Whether to show the calendar legend for special days.\n     * When enabled, displays a legend below the calendar showing the special day markers and their descriptions.\n     * @default false\n     */\n    showCalendarLegend = input(false, { transform: booleanAttribute });\n\n    /**\n     * Whether to display the calendar legend in column layout.\n     * When true, legend items are displayed vertically in a single column.\n     * When false, legend items are displayed horizontally in rows.\n     * @default false\n     */\n    legendCol = input(false, { transform: booleanAttribute });\n\n    /** @hidden */\n    get _isRequired(): boolean {\n        return !!this.formField?.required;\n    }\n\n    /** @hidden */\n    private readonly _dateTimeAdapter = inject<DatetimeAdapter<D>>(DatetimeAdapter, {\n        optional: true\n    });\n\n    /** @hidden */\n    private readonly _dateTimeFormats = inject<DateTimeFormats>(DATE_TIME_FORMATS, {\n        optional: true\n    });\n\n    /** @hidden */\n    constructor() {\n        super();\n\n        if (!this._dateTimeAdapter) {\n            throw createMissingDateImplementationError('DateTimeAdapter');\n        }\n        if (!this._dateTimeFormats) {\n            throw createMissingDateImplementationError('DATE_TIME_FORMATS');\n        }\n\n        // default model value\n        this.value = this._dateTimeAdapter.now();\n    }\n\n    /**\n     * Function used to disable certain dates in the calendar.\n     * @param fdDate FdDate\n     */\n    @Input()\n    disableFunction: (value: D) => boolean = () => false;\n\n    /**\n     * @hidden\n     */\n    ngAfterViewInit(): void {\n        // if used with platform forms, adjust width of datetimepicker to take 100% container space\n        if (this.formField) {\n            this._adjustPickerWidth();\n        }\n    }\n\n    /** @hidden */\n    writeValue(value: D): void {\n        super.writeValue(value);\n        this.markForCheck();\n    }\n\n    /**\n     * @hidden\n     * override base functionality to catch new disabled state\n     */\n    setDisabledState(disabled: boolean): void {\n        super.setDisabledState(disabled);\n        this.dateTimePickerComponent?.setDisabledState(disabled);\n    }\n\n    /**\n     * @hidden\n     * logic to handle validation from both platform forms and core datetiimepicker\n     * @param datetime inputted\n     */\n    handleDatetimeInputChange(datetime: D): void {\n        if (this.dateTimePickerComponent) {\n            if (this.dateTimePickerComponent._isInvalidDateInput) {\n                if (this.ngControl?.control && this._control.value) {\n                    this.ngControl.control.setErrors(this._control.errors);\n                }\n                this.state = 'error';\n            } else {\n                if (!this.dateTimePickerComponent._inputFieldDate && !this.allowNull) {\n                    this.state = 'error'; // null value in not allowNull should throw error\n                } else {\n                    this.state = undefined; // resetting to default state\n                }\n            }\n            // only set the value if it is a valid datetime object\n            if (this.dateTimePickerComponent._inputFieldDate) {\n                this.value = datetime;\n            }\n\n            this.stateChanges.next('datetime picker: handleDatetimeInputChange');\n        }\n\n        this.datetimeChange.emit(datetime);\n\n        this.onTouched();\n    }\n\n    /**\n     * Method that handles changes when popover is opened or closed.\n     */\n    handleOpenChange = (open: boolean): void => {\n        this.isOpenChange.emit(open);\n    };\n    /**\n     * Method that handle calendar active view change and throws event.\n     */\n    handleActiveViewChange = (fdCalendarView: FdCalendarView): void => {\n        this.activeViewChange.emit(fdCalendarView);\n    };\n\n    /**\n     * @hidden\n     * method that adjusts width of datetimepicker to take 100% container space\n     */\n    private _adjustPickerWidth(): void {\n        const customPopoverEl = this._elRef.nativeElement.querySelector('.fd-datetime .fd-popover-custom');\n        if (!customPopoverEl) {\n            return;\n        }\n        customPopoverEl.style.display = 'inline';\n    }\n}\n","<fd-datetime-picker\n    [attr.aria-label]=\"ariaLabel\"\n    [attr.aria-required]=\"_isRequired\"\n    [ariaLabelledBy]=\"ariaLabelledBy\"\n    [attr.ariaDescribedBy]=\"ariaDescribedBy\"\n    [inputId]=\"id\"\n    [placeholder]=\"placeholder\"\n    [required]=\"required\"\n    [placement]=\"placement\"\n    [appendTo]=\"appendTo\"\n    [meridian]=\"meridian\"\n    [disabled]=\"disabled\"\n    [displaySeconds]=\"displaySeconds\"\n    [displayMinutes]=\"displayMinutes\"\n    [displayHours]=\"displayHours\"\n    [useValidation]=\"useValidation\"\n    [isOpen]=\"isOpen\"\n    [startingDayOfWeek]=\"startingDayOfWeek\"\n    [activeView]=\"activeView\"\n    [allowNull]=\"allowNull && !_isRequired\"\n    [keepTwoDigitsTime]=\"keepTwoDigitsTime\"\n    [state]=\"state\"\n    [buttonFocusable]=\"buttonFocusable\"\n    [specialDaysRules]=\"specialDaysRules\"\n    [showCalendarLegend]=\"showCalendarLegend()\"\n    [legendCol]=\"legendCol()\"\n    [yearGrid]=\"yearGrid\"\n    [aggregatedYearGrid]=\"aggregatedYearGrid\"\n    [markWeekends]=\"markWeekends\"\n    [spinnerButtons]=\"spinnerButtons\"\n    [showWeekNumbers]=\"showWeekNumbers\"\n    [showFooter]=\"showFooter\"\n    [disableFunction]=\"disableFunction\"\n    [processInputOnBlur]=\"processInputOnBlur\"\n    [preventScrollOnFocus]=\"preventScrollOnFocus\"\n    [mobile]=\"mobile\"\n    [mobileConfig]=\"mobileConfig\"\n    [mobileLandscape]=\"mobileLandscape\"\n    [mobilePortrait]=\"mobilePortrait\"\n    [(ngModel)]=\"value\"\n    (ngModelChange)=\"handleDatetimeInputChange($event)\"\n    (activeViewChange)=\"handleActiveViewChange($event)\"\n    (isOpenChange)=\"handleOpenChange($event)\"\n    (touched)=\"onTouched()\"\n>\n    <ng-content></ng-content>\n</fd-datetime-picker>\n","import { NgModule } from '@angular/core';\nimport { PlatformDatetimePickerComponent } from './datetime-picker.component';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n    imports: [PlatformDatetimePickerComponent],\n    exports: [PlatformDatetimePickerComponent]\n})\nexport class PlatformDatetimePickerModule {}\n","import { FieldHintOptions } from '@fundamental-ngx/platform/shared';\n\nexport const defaultFormGeneratorHintOptions: Omit<FieldHintOptions, 'content'> = {\n    placement: 'right',\n    position: 'after',\n    trigger: [\n        { trigger: 'mouseenter', openAction: true, closeAction: false },\n        { trigger: 'mouseleave', openAction: false, closeAction: true },\n        { trigger: 'focusin', openAction: true, closeAction: false },\n        { trigger: 'focusout', openAction: false, closeAction: true }\n    ],\n    glyph: 'hint',\n    target: 'auto'\n};\n","import { Directive, Input, OnInit, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { AsyncValidatorFn, ValidatorFn } from '@angular/forms';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\n\nimport { DynamicFormControl } from './dynamic-form-control';\n\n/**\n * @description\n * Structural directive, which hides current form item and toggles validation rules for it.\n */\n@Directive({\n    selector: '[fdpDynamicFormControlField]',\n    standalone: true\n})\nexport class DynamicFormControlFieldDirective implements OnInit {\n    /**\n     * @description Form control instance.\n     */\n    @Input()\n    set fdpDynamicFormControlField(value: DynamicFormControl) {\n        this._control = value;\n\n        this._originalValidators = this._control.formItem.validators;\n        this._originalAsyncValidators = this._control.formItem.asyncValidators;\n\n        this._updateView();\n    }\n\n    /**\n     * @description boolean flag representing if current item should be shown.\n     */\n    @Input()\n    set fdpDynamicFormControlFieldShow(value: boolean) {\n        this.shouldShowFormItem = value;\n        this._updateView();\n    }\n\n    /**\n     * @hidden\n     */\n    private _control: DynamicFormControl;\n\n    /**\n     * @hidden\n     */\n    private _originalValidators?: Nullable<ValidatorFn | ValidatorFn[]>;\n\n    /**\n     * @hidden\n     */\n    private _originalAsyncValidators: Nullable<AsyncValidatorFn | AsyncValidatorFn[]>;\n\n    /**\n     * @hidden\n     */\n    private _componentRemoved = true;\n\n    /**\n     * @hidden\n     */\n    private _shouldShowFormItem: boolean;\n\n    /** @hidden */\n    constructor(\n        private readonly _templateRef: TemplateRef<any>,\n        private readonly _viewContainer: ViewContainerRef\n    ) {}\n\n    /** @hidden */\n    ngOnInit(): void {\n        this._updateView();\n    }\n\n    /**\n     * @description If false, validation will be skipped from the form item control\n     */\n    set shouldShowFormItem(value: boolean) {\n        if (value === this._shouldShowFormItem) {\n            return;\n        }\n\n        this._shouldShowFormItem = value;\n\n        if (!value) {\n            this._control.clearValidators();\n            this._control.clearAsyncValidators();\n        } else {\n            this._control.setValidators(this._originalValidators ?? []);\n            this._control.setAsyncValidators(this._originalAsyncValidators ?? []);\n        }\n\n        this._control.updateValueAndValidity({ emitEvent: false });\n    }\n\n    /** @hidden */\n    private _updateView(): void {\n        if (this._shouldShowFormItem && this._componentRemoved) {\n            this._viewContainer.createEmbeddedView(this._templateRef);\n            this._componentRemoved = false;\n        } else if (!this._shouldShowFormItem) {\n            this._viewContainer.clear();\n            this._componentRemoved = true;\n        }\n    }\n}\n","import { InjectionToken } from '@angular/core';\nimport { FieldHintOptions } from '@fundamental-ngx/platform/shared';\nimport { defaultFormGeneratorHintOptions } from './config/default-form-generator-hint-options';\n\nexport const FDP_FORM_GENERATOR_DEFAULT_HINT_OPTIONS = new InjectionToken<Omit<FieldHintOptions, 'content'>>(\n    'Default options for form-generator hint',\n    {\n        factory: () => defaultFormGeneratorHintOptions\n    }\n);\n","import { Inject, Pipe, PipeTransform, TemplateRef } from '@angular/core';\nimport { FieldHintOptions } from '@fundamental-ngx/platform/shared';\nimport { defaultFormGeneratorHintOptions } from '../config/default-form-generator-hint-options';\nimport { FDP_FORM_GENERATOR_DEFAULT_HINT_OPTIONS } from '../form-generator.tokens';\nimport { BaseDynamicFormItemGuiOptions, DynamicFormItemGuiOptions } from '../interfaces/dynamic-form-item';\n\n@Pipe({\n    name: 'getHintOptions',\n    standalone: true\n})\nexport class GetHintOptionsPipe implements PipeTransform {\n    /** @hidden */\n    private readonly _defaultHintOptions: FieldHintOptions;\n\n    /** @hidden */\n    constructor(@Inject(FDP_FORM_GENERATOR_DEFAULT_HINT_OPTIONS) _providedHintOptions: FieldHintOptions) {\n        this._defaultHintOptions = {\n            ...defaultFormGeneratorHintOptions,\n            ..._providedHintOptions\n        };\n    }\n\n    /**\n     * Used for extracting hintOptions from GuiOptions. This will coerce string | HintOptions to FieldHintOptions,\n     * will combine default value of hints for form generator with provided options.\n     */\n    transform(\n        hintOptions: BaseDynamicFormItemGuiOptions | DynamicFormItemGuiOptions | undefined\n    ): FieldHintOptions | undefined {\n        if (!hintOptions?.hint) {\n            return;\n        }\n        const formItemHintOptions = hintOptions.hint;\n        if (typeof formItemHintOptions === 'string' || formItemHintOptions instanceof TemplateRef) {\n            return {\n                ...this._defaultHintOptions,\n                content: formItemHintOptions\n            };\n        }\n        return {\n            ...this._defaultHintOptions,\n            ...formItemHintOptions\n        };\n    }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DynamicFormControl, DynamicFormControlGroup, DynamicFormGroupControl } from '../dynamic-form-control';\n\n@Pipe({\n    name: 'getOrderedFieldControls',\n    pure: false,\n    standalone: true\n})\nexport class GetOrderedFieldControlsPipe implements PipeTransform {\n    /** @hidden */\n    transform(field: DynamicFormGroupControl): DynamicFormControl[] {\n        // casting type explicity to the DynamicFormControl[] as this pipe will be used specifically with this data type\n        return Object.values((field as DynamicFormControlGroup).controls).sort((a, b) =>\n            (a.formItem.rank ?? -Infinity) > (b.formItem.rank ?? -Infinity) ? 1 : -1\n        ) as DynamicFormControl[];\n    }\n}\n","import {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    DestroyRef,\n    EventEmitter,\n    Inject,\n    Input,\n    OnChanges,\n    OnDestroy,\n    Output,\n    QueryList,\n    SimpleChanges,\n    TemplateRef,\n    ViewChild,\n    ViewChildren,\n    ViewEncapsulation,\n    inject\n} from '@angular/core';\nimport { FormControlStatus, FormGroupDirective, FormsModule, NgForm, ReactiveFormsModule } from '@angular/forms';\nimport { Nullable, destroyObservable } from '@fundamental-ngx/cdk/utils';\nimport {\n    ColumnLayout,\n    FDP_DO_CHECK,\n    FDP_FORM_SUBMIT,\n    FieldHintOptions,\n    HintInput,\n    HintOptions,\n    PlatformFormFieldControl\n} from '@fundamental-ngx/platform/shared';\nimport { BehaviorSubject, Observable, Subject, Subscription, isObservable, merge, of } from 'rxjs';\nimport { debounceTime, filter, startWith, switchMap, take, takeUntil, tap } from 'rxjs/operators';\nimport { FormGeneratorFieldComponent } from '../form-generator-field/form-generator-field.component';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { BusyIndicatorComponent } from '@fundamental-ngx/core/busy-indicator';\nimport { SkeletonComponent } from '@fundamental-ngx/core/skeleton';\nimport { DefaultGapLayout, DefaultVerticalFieldLayout, DefaultVerticalLabelLayout } from '../../form-group/constants';\nimport { FdpFormGroupModule } from '../../form-group/fdp-form.module';\nimport { defaultFormGeneratorHintOptions } from '../config/default-form-generator-hint-options';\nimport {\n    DynamicFormControl,\n    DynamicFormControlGroup,\n    DynamicFormGroupControl,\n    DynamicFormGroupControls\n} from '../dynamic-form-control';\nimport { DynamicFormControlFieldDirective } from '../dynamic-form-control-field.directive';\nimport { FormGeneratorService } from '../form-generator.service';\nimport { FDP_FORM_GENERATOR_DEFAULT_HINT_OPTIONS } from '../form-generator.tokens';\nimport { getParentItem, isFormFieldItem, mapFormItems, transformFormItem } from '../helpers';\nimport { DynamicFormGroup } from '../interfaces/dynamic-form-group';\nimport {\n    DynamicFormItem,\n    DynamicFormItemMap,\n    DynamicFormItemValidationObject,\n    DynamicFormValue\n} from '../interfaces/dynamic-form-item';\nimport { GetHintOptionsPipe } from '../pipes/get-hint-options.pipe';\nimport { GetOrderedFieldControlsPipe } from '../pipes/get-ordered-form-controls.pipe';\n\nlet formUniqueId = 0;\n\nexport type FormGeneratorAcceptableItems = DynamicFormItem[] | Observable<DynamicFormItem[]>;\n\nexport const FDP_FORM_IGNORED_STATUSES: FormControlStatus[] = ['INVALID', 'PENDING', 'DISABLED'];\n\nexport interface SubmitFormEventResult {\n    /**\n     * @description Indicator if validation has been passed.\n     */\n    success: boolean;\n    /**\n     * @description Formatted form value.\n     */\n    value: DynamicFormValue | null;\n}\n\n/**\n * @description Form Generator component represents a high-level component\n * which includes @see FormGroup inside.\n */\n@Component({\n    selector: 'fdp-form-generator',\n    templateUrl: './form-generator.component.html',\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [\n        {\n            provide: FDP_DO_CHECK,\n            useFactory: (formGenerator: FormGeneratorComponent) => formGenerator.doCheck$,\n            deps: [FormGeneratorComponent]\n        },\n        {\n            provide: FDP_FORM_SUBMIT,\n            useFactory: (formGenerator: FormGeneratorComponent) => formGenerator.ngSubmit$,\n            deps: [FormGeneratorComponent]\n        }\n    ],\n    imports: [\n        BusyIndicatorComponent,\n        FdpFormGroupModule,\n        FormsModule,\n        ReactiveFormsModule,\n        NgTemplateOutlet,\n        DynamicFormControlFieldDirective,\n        FormGeneratorFieldComponent,\n        SkeletonComponent,\n        GetOrderedFieldControlsPipe,\n        GetHintOptionsPipe\n    ]\n})\nexport class FormGeneratorComponent implements OnDestroy, OnChanges {\n    /** @description Unique form name */\n    @Input()\n    formName = `fdp-form-generator-${formUniqueId++}`;\n\n    /**\n     * @description List of @see DynamicFormItem representing the list of items\n     * to be rendered in the form.\n     */\n    @Input()\n    set formItems(formItems: FormGeneratorAcceptableItems) {\n        if (!formItems) {\n            return;\n        }\n\n        formItems = isObservable(formItems) ? formItems : of(formItems);\n\n        this._onFormItemsChange(formItems);\n    }\n    get formItems(): FormGeneratorAcceptableItems {\n        return this._formItems;\n    }\n\n    /**\n     * @description Form main title.\n     */\n    @Input()\n    mainTitle: Nullable<string>;\n\n    /**\n     * Whether to hide main title. Default is false.\n     */\n    @Input()\n    hideMainTItle = false;\n\n    /**\n     * @description\n     * Hint for the main title\n     */\n    @Input()\n    hint: HintInput;\n\n    /**\n     * @description Specify the column layout in the format `XLn-Ln-Mn-Sn`\n     * where n is the number of columns and can be different for each size.\n     * eg: XL2-L2-M2-S1 would create 2-column layouts for XL, L,\n     * and M sizes and single-column layout for S size.\n     */\n    @Input()\n    columnLayout: Nullable<string>;\n\n    /**\n     * Defines label's column layout.\n     */\n    @Input()\n    labelColumnLayout: ColumnLayout = DefaultVerticalLabelLayout;\n\n    /**\n     * Defines field's column layout.\n     */\n    @Input()\n    fieldColumnLayout: ColumnLayout = DefaultVerticalFieldLayout;\n\n    /**\n     * Defines gap column layout.\n     */\n    @Input()\n    gapColumnLayout: ColumnLayout = DefaultGapLayout;\n\n    /** Whether all form items should have identical layout provided for form group. */\n    @Input()\n    unifiedLayout = true;\n\n    /** Inline column layout */\n    @Input()\n    inlineColumnLayout: ColumnLayout = DefaultVerticalFieldLayout;\n\n    /**\n     * @hidden\n     * Removes extra empty row.\n     * TODO: remove after #7533 has been fixed.\n     */\n    @Input()\n    noAdditionalContent = false;\n\n    /**\n     * @description Event which notifies parent component that the form has been successfully created\n     * and all controls are in place.\n     */\n    @Output()\n    formCreated = new EventEmitter<DynamicFormGroup>();\n\n    /**\n     * @description Event which notifies parent component that the form has been successfully validated\n     * and submitted. Contains form\n     */\n    @Output()\n    formSubmitted = new EventEmitter<DynamicFormValue>();\n\n    /**\n     * @description Event which notifies parent component that the form was submitted.\n     */\n    @Output()\n    formSubmittedStatus = new EventEmitter<SubmitFormEventResult>();\n\n    /**\n     * @description Represents the form instance. @see NgForm\n     */\n    @ViewChild(NgForm)\n    ngForm: NgForm;\n\n    /** Inner form group directive. */\n    @ViewChild(FormGroupDirective)\n    formGroup: FormGroupDirective;\n\n    /** Inner form fields */\n    @ViewChildren(FormGeneratorFieldComponent)\n    fields: QueryList<FormGeneratorFieldComponent>;\n\n    /** @hidden */\n    doCheck$ = new Subject<void>();\n\n    /** @hidden */\n    ngSubmit$ = new Subject<void>();\n\n    /** Array of form field controls. */\n    get formFields(): PlatformFormFieldControl[] {\n        return this.fields\n            ?.toArray()\n            .filter((field) => !!field.fieldRenderer?.control)\n            .map((field) => field.fieldRenderer.control!);\n    }\n\n    /**\n     * @description Dynamically generated form. @see FormGeneratorService\n     */\n    form: DynamicFormGroup;\n    /**\n     * @description List of the form controls.\n     */\n    formControlItems: DynamicFormGroupControl[];\n\n    /**\n     * Set of flags representing if particular form item should be visible to the user.\n     */\n    shouldShowFields: { [key: string]: boolean } = {};\n\n    /**\n     * Flag representing that form is loading\n     */\n    formLoading = true;\n\n    /**\n     * Stream of form loading state.\n     */\n    loading$ = new BehaviorSubject<boolean>(this.formLoading);\n\n    /**\n     * Stream of last form submission status.\n     */\n    formSubmittedStatus$ = new Subject<SubmitFormEventResult>();\n\n    /**\n     * Stream of last form submission value.\n     */\n    formValue$ = new BehaviorSubject<DynamicFormValue>({});\n\n    /**\n     * @hidden\n     * To differentiate between first loading when skeletons be shown and subsequent loadings when busy indicator be shown\n     */\n    _firstLoadingDone = false;\n\n    /**\n     * @hidden\n     */\n    hintOptions: HintOptions;\n\n    /** @hidden */\n    _errorModels: { type: string; value: any }[] = [];\n\n    /**\n     * @hidden\n     */\n    private _formItems: FormGeneratorAcceptableItems;\n\n    /**\n     * @hidden\n     */\n    private _formValueSubscription: Subscription;\n\n    /** @hidden */\n    private _refresh$ = new Subject<void>();\n\n    /**\n     * @hidden\n     * An RxJS Subject that will kill the data stream upon component’s destruction (for unsubscribing)\n     */\n    private readonly _destroyRef = inject(DestroyRef);\n\n    /** @hidden */\n    private readonly _defaultHintOptions: FieldHintOptions;\n\n    /** @hidden */\n    private _ngSubmitSubscription: Subscription | undefined;\n\n    /** @hidden */\n    private _mappedFormitems: Map<string, DynamicFormItemMap> = new Map();\n\n    /** @hidden */\n    constructor(\n        private _fgService: FormGeneratorService,\n        private _cd: ChangeDetectorRef,\n        @Inject(FDP_FORM_GENERATOR_DEFAULT_HINT_OPTIONS) _providedHintOptions: FieldHintOptions\n    ) {\n        this._defaultHintOptions = {\n            ...defaultFormGeneratorHintOptions,\n            ..._providedHintOptions\n        };\n\n        this._errorModels = this._getErrors();\n    }\n\n    /** @hidden */\n    ngOnChanges(changes: SimpleChanges): void {\n        if (changes.hint) {\n            if (typeof this.hint === 'string' || this.hint instanceof TemplateRef) {\n                this.hintOptions = {\n                    ...this._defaultHintOptions,\n                    content: this.hint\n                };\n            } else {\n                this.hintOptions = {\n                    ...this._defaultHintOptions,\n                    ...this.hint\n                };\n            }\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    ngOnDestroy(): void {\n        this._ngSubmitSubscription?.unsubscribe();\n    }\n\n    /**\n     * Refreshes form items visibility with 'when' condition.\n     */\n    async refreshStepsVisibility(): Promise<void> {\n        this.shouldShowFields = await this._fgService.checkVisibleFormItems(this.form);\n        this._cd.markForCheck();\n    }\n\n    /**\n     * @hidden\n     */\n    async _onSubmit(): Promise<void> {\n        this.form.markAllAsTouched();\n        this._cd.detectChanges();\n        this.doCheck$.next();\n\n        const formValue = await this._fgService.getFormValue(this.form);\n\n        this.formSubmittedStatus.emit({ success: !this.form.invalid, value: formValue });\n        this.formSubmittedStatus$.next({ success: !this.form.invalid, value: formValue });\n\n        if (this.form.invalid) {\n            return;\n        }\n        this.formSubmitted.emit(formValue);\n        this.formValue$.next(formValue);\n\n        this.form.markAsPristine();\n    }\n\n    /**\n     * Adds new control to an existing form.\n     * @param control Control configuration to add.\n     * @param path Path of the control.\n     */\n    async addControl(control: DynamicFormItem, path?: string[]): Promise<void> {\n        this._addControlToFormItems(control, path);\n        this._fgService.addControl(control, this.form, path);\n\n        this.formControlItems = this._getOrderedControls(this.form.controls);\n\n        this.shouldShowFields = await this._fgService.checkVisibleFormItems(this.form);\n    }\n\n    /**\n     * Removes the control with the given name by the given path.\n     * @param name Name of the control.\n     * @param path Path of the control.\n     */\n    async removeControl(name: string, path: string[]): Promise<void> {\n        this._removeControlFromItems(name, path);\n        this._fgService.removeControl(name, this.form, path);\n        this.formControlItems = this._getOrderedControls(this.form.controls);\n\n        this.shouldShowFields = await this._fgService.checkVisibleFormItems(this.form);\n    }\n\n    /**\n     *\n     * @hidden\n     */\n    _trackFn(index: number, value: DynamicFormGroupControl): string {\n        return `${index}_${value.formItem.name}`;\n    }\n\n    /** @hidden */\n    _groupTrackFn(index: number, value: DynamicFormGroupControl): string {\n        return (value as DynamicFormControlGroup).formItem.name;\n    }\n\n    /**\n     *\n     * @description Programmatically submit form.\n     * This method also calls validation for the form items.\n     */\n    submit(): void {\n        this.formGroup.onSubmit(new Event('submit'));\n    }\n\n    /** @hidden */\n    _isAdvancedError(error: any): error is DynamicFormItemValidationObject {\n        return error.heading && error.description && error.type;\n    }\n\n    /** @hidden */\n    _errorsTrackBy(_: number, error: { type: string; value: any }): string {\n        return error.type;\n    }\n\n    /**\n     * @hidden\n     */\n    private async _generateForm(): Promise<void> {\n        this.formLoading = true;\n        this.loading$.next(this.formLoading);\n\n        const form = await this._fgService.generateForm(this.formName, this._mappedFormitems);\n\n        this._formValueSubscription?.unsubscribe();\n\n        this.form = form;\n\n        this.formControlItems = this._getOrderedControls(form.controls);\n\n        this.shouldShowFields = await this._fgService.checkVisibleFormItems(this.form);\n\n        this._formValueSubscription = this.form.valueChanges\n            .pipe(debounceTime(50), takeUntilDestroyed(this._destroyRef))\n            .subscribe(async () => {\n                this.shouldShowFields = await this._fgService.checkVisibleFormItems(this.form);\n                this._cd.markForCheck();\n            });\n\n        this.formLoading = false;\n        this._firstLoadingDone = true;\n\n        this._cd.detectChanges();\n\n        this.formCreated.emit(this.form);\n        this.loading$.next(this.formLoading);\n\n        if (!this.formGroup) {\n            return;\n        }\n\n        this._listenToSubmit();\n    }\n\n    /** @hidden */\n    private _getOrderedControls(controls: DynamicFormGroupControls): (DynamicFormControl | DynamicFormControlGroup)[] {\n        return Object.values(controls).sort(\n            (a, b) => (a.formItem?.rank ?? -Infinity) - (b.formItem?.rank ?? -Infinity)\n        );\n    }\n\n    /** @hidden */\n    private _getErrors(): { type: string; value: any }[] {\n        const returnErrors: { type: string; value: any }[] = [];\n        const registeredErrors = this._fgService.validationErrorHints;\n        Object.entries(registeredErrors).forEach((type) => {\n            const [errorType, errorValue] = type;\n\n            returnErrors.push({\n                type: errorType,\n                value: errorValue\n            });\n        });\n\n        return returnErrors;\n    }\n\n    /** @hidden */\n    private _listenToSubmit(): void {\n        this._ngSubmitSubscription?.unsubscribe();\n        this._ngSubmitSubscription = this.formGroup.ngSubmit\n            .pipe(\n                tap(() => {\n                    this.ngSubmit$.next();\n                }),\n                switchMap(() =>\n                    this.formGroup.statusChanges!.pipe(\n                        startWith(this.formGroup.status),\n                        filter((status: FormControlStatus) => status !== 'PENDING'),\n                        take(1),\n                        takeUntilDestroyed(this._destroyRef)\n                    )\n                )\n            )\n            .subscribe(async () => {\n                await this._onSubmit();\n                this._listenToSubmit();\n            });\n    }\n\n    /** @hidden */\n    private _onFormItemsChange(items: Observable<DynamicFormItem[]>): void {\n        this._refresh$.next();\n        this._refresh$.complete();\n\n        this._refresh$ = new Subject();\n\n        items.pipe(takeUntil(merge(this._refresh$, destroyObservable(this._destroyRef)))).subscribe((formItems) => {\n            this._mappedFormitems = mapFormItems(formItems);\n            this._generateForm();\n        });\n    }\n\n    /** @hidden */\n    private _applyRank(items: DynamicFormItem[]): DynamicFormItem[] {\n        items = items.map((item, index) => {\n            item.rank = item.rank || index;\n            if (item.items) {\n                item.items = this._applyRank(item.items);\n            }\n            return item;\n        });\n\n        return items;\n    }\n\n    /** @hidden */\n    private _addControlToFormItems(item: DynamicFormItem, path?: string[]): void {\n        if (!path) {\n            this._mappedFormitems.set(item.name, transformFormItem(item, this._mappedFormitems.size));\n            return;\n        }\n\n        const parentItem = getParentItem(path, this._mappedFormitems);\n\n        if (!parentItem || isFormFieldItem(parentItem)) {\n            return;\n        }\n\n        parentItem.items = parentItem.items || new Map();\n        parentItem.items.set(item.name, transformFormItem(item, parentItem.items.size));\n    }\n\n    /** @hidden */\n    private _removeControlFromItems(name: string, path?: string[]): void {\n        if (!path) {\n            this._mappedFormitems.delete(name);\n            return;\n        }\n\n        const parentItem = getParentItem(path, this._mappedFormitems);\n\n        if (!parentItem || isFormFieldItem(parentItem)) {\n            return;\n        }\n\n        parentItem.items?.delete(name);\n    }\n}\n","@if (_firstLoadingDone) {\n    <fd-busy-indicator [loading]=\"formLoading\" [block]=\"true\">\n        @if (form) {\n            <fdp-form-group\n                [hint]=\"hint\"\n                [mainTitle]=\"mainTitle\"\n                [hideMainTItle]=\"hideMainTItle\"\n                [formGroup]=\"form\"\n                [columnLayout]=\"columnLayout\"\n                [labelColumnLayout]=\"labelColumnLayout\"\n                [fieldColumnLayout]=\"fieldColumnLayout\"\n                [gapColumnLayout]=\"gapColumnLayout\"\n                [unifiedLayout]=\"unifiedLayout\"\n                [inlineColumnLayout]=\"inlineColumnLayout\"\n                [useForm]=\"true\"\n            >\n                @for (error of _errorModels; track _errorsTrackBy($index, error)) {\n                    <span *fdpFormFieldError=\"error.type; let directiveError\">\n                        @if (_isAdvancedError(directiveError)) {\n                            @if (directiveError.heading) {\n                                <span *fdpFormFieldErrorHeading=\"let validationError; type: directiveError.type\">\n                                    {{ validationError.heading }}\n                                </span>\n                            }\n                            @if (directiveError.description) {\n                                <span *fdpFormFieldErrorDescription=\"let validationError\">\n                                    {{ validationError.description }}\n                                </span>\n                            }\n                        } @else {\n                            <span *fdpFormFieldErrorHeading=\"let validationError\">\n                                {{ error.value ? error.value : validationError }}\n                            </span>\n                        }\n                    </span>\n                }\n                @for (field of formControlItems; track _trackFn($index, field)) {\n                    <ng-template\n                        [ngTemplateOutlet]=\"field.type === 'field' ? fieldRenderer : groupRenderer\"\n                        [ngTemplateOutletContext]=\"{\n                            field: field,\n                            formFieldName: field.formItem.name,\n                            rank: field.formItem?.rank || 0\n                        }\"\n                    ></ng-template>\n                    <ng-template\n                        #fieldRenderer\n                        let-field=\"field\"\n                        let-formFieldName=\"formFieldName\"\n                        let-formGroupName=\"formGroupName\"\n                        let-rank=\"rank\"\n                    >\n                        <ng-container\n                            *fdpDynamicFormControlField=\"field; show: shouldShowFields[field.formItem.name] !== false\"\n                        >\n                            <fdp-form-generator-field\n                                [hintOptions]=\"field.formItem.guiOptions | getHintOptions\"\n                                [form]=\"form\"\n                                [shouldShow]=\"shouldShowFields[field.formItem.name] !== false\"\n                                [field]=\"field\"\n                                [formFieldName]=\"formFieldName\"\n                                [formGroupNamePath]=\"formGroupName\"\n                                [rank]=\"rank\"\n                            ></fdp-form-generator-field>\n                        </ng-container>\n                    </ng-template>\n                    <ng-template #groupRenderer>\n                        <fdp-form-field-group\n                            [hintOptions]=\"field.formItem.guiOptions | getHintOptions\"\n                            [label]=\"field.formItem.message || ''\"\n                            [labelColumnLayout]=\"field.formItem.guiOptions?.labelColumnLayout\"\n                            [fieldColumnLayout]=\"field.formItem.guiOptions?.fieldColumnLayout\"\n                            [gapColumnLayout]=\"field.formItem.guiOptions?.gapColumnLayout\"\n                            [formName]=\"field.formItem.name\"\n                        >\n                            @for (\n                                groupField of field | getOrderedFieldControls;\n                                track _groupTrackFn($index, groupField)\n                            ) {\n                                <ng-container\n                                    *fdpDynamicFormControlField=\"\n                                        groupField;\n                                        show: shouldShowFields[groupField.formItem.name!] !== false\n                                    \"\n                                >\n                                    <fdp-form-generator-field\n                                        [hintOptions]=\"groupField.formItem.guiOptions | getHintOptions\"\n                                        [form]=\"form\"\n                                        [field]=\"groupField\"\n                                        [shouldShow]=\"shouldShowFields[groupField.formItem.name!] !== false\"\n                                        [formFieldName]=\"groupField.formItem.name\"\n                                        [formGroupNamePath]=\"field.formItem.name\"\n                                        [rank]=\"groupField.formItem.rank || 0\"\n                                    ></fdp-form-generator-field>\n                                </ng-container>\n                            }\n                        </fdp-form-field-group>\n                    </ng-template>\n                }\n                @if (!noAdditionalContent) {\n                    <fdp-form-field [column]=\"1\" [rank]=\"formControlItems.length + 1\">\n                        <!-- For user-defined elements, like submit button -->\n                        <ng-content></ng-content>\n                    </fdp-form-field>\n                }\n            </fdp-form-group>\n        }\n    </fd-busy-indicator>\n} @else {\n    <fd-skeleton width=\"100%\" height=\"100px\" [style.padding.rem]=\"1\">\n        <svg:rect x=\"0\" y=\"0\" rx=\"4\" width=\"15%\" height=\"8\" />\n        <svg:rect x=\"0\" y=\"20\" rx=\"4\" width=\"25%\" height=\"16\" />\n        <svg:rect x=\"35%\" y=\"0\" rx=\"4\" width=\"15%\" height=\"8\" />\n        <svg:rect x=\"35%\" y=\"20\" rx=\"4\" width=\"25%\" height=\"16\" />\n        <svg:rect x=\"0\" y=\"60\" rx=\"4\" width=\"15%\" height=\"8\" />\n        <svg:rect x=\"0\" y=\"80\" rx=\"4\" width=\"25%\" height=\"16\" />\n    </fd-skeleton>\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { ContentDensityModule } from '@fundamental-ngx/core/content-density';\nimport { DynamicFormGeneratorCheckboxComponent } from './controls/dynamic-form-generator-checkbox/dynamic-form-generator-checkbox.component';\nimport { DynamicFormGeneratorDatepickerComponent } from './controls/dynamic-form-generator-datepicker/dynamic-form-generator-datepicker.component';\nimport { DynamicFormGeneratorEditorComponent } from './controls/dynamic-form-generator-editor/dynamic-form-generator-editor.component';\nimport { DynamicFormGeneratorInputComponent } from './controls/dynamic-form-generator-input/dynamic-form-generator-input.component';\nimport { DynamicFormGeneratorMultiInputComponent } from './controls/dynamic-form-generator-multi-input/dynamic-form-generator-multi-input.component';\nimport { DynamicFormGeneratorObjectStatusComponent } from './controls/dynamic-form-generator-object-status/dynamic-form-generator-object-status.component';\nimport { DynamicFormGeneratorRadioComponent } from './controls/dynamic-form-generator-radio/dynamic-form-generator-radio.component';\nimport { DynamicFormGeneratorSelectComponent } from './controls/dynamic-form-generator-select/dynamic-form-generator-select.component';\nimport { DynamicFormGeneratorSwitchComponent } from './controls/dynamic-form-generator-switch/dynamic-form-generator-switch.component';\nimport { DynamicFormControlFieldDirective } from './dynamic-form-control-field.directive';\nimport { DynamicFormControlDirective } from './dynamic-form-control.directive';\nimport { FormGeneratorComponentsAccessorService } from './form-generator-components-accessor.service';\nimport { FormGeneratorFieldComponent } from './form-generator-field/form-generator-field.component';\nimport { FormGeneratorService } from './form-generator.service';\nimport { FormGeneratorComponent } from './form-generator/form-generator.component';\nimport { FormGeneratorModuleConfig } from './interfaces/form-generator-module-config';\nimport { GetHintOptionsPipe } from './pipes/get-hint-options.pipe';\nimport { GetOrderedFieldControlsPipe } from './pipes/get-ordered-form-controls.pipe';\nimport {\n    FORM_GENERATOR_CONFIG,\n    FORM_GENERATOR_ITEM_CONFIG,\n    defaultFormGeneratorConfigProvider,\n    defaultFormGeneratorItemConfigProvider\n} from './providers/providers';\n\n/**\n * Adds Form Generator functionality to your application.\n *\n * Can be imported in two ways:\n * * Plain PlatformFormGeneratorModule with default configuration\n * * With `withConfig()` method which allows passing custom default configuration.\n */\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n    imports: [\n        FormGeneratorComponent,\n        DynamicFormControlFieldDirective,\n        DynamicFormControlDirective,\n        DynamicFormGeneratorCheckboxComponent,\n        DynamicFormGeneratorInputComponent,\n        DynamicFormGeneratorEditorComponent,\n        DynamicFormGeneratorSelectComponent,\n        DynamicFormGeneratorRadioComponent,\n        DynamicFormGeneratorDatepickerComponent,\n        DynamicFormGeneratorSwitchComponent,\n        FormGeneratorFieldComponent,\n        DynamicFormGeneratorMultiInputComponent,\n        GetOrderedFieldControlsPipe,\n        DynamicFormGeneratorObjectStatusComponent,\n        GetHintOptionsPipe\n    ],\n    providers: [\n        FormGeneratorService,\n        FormGeneratorComponentsAccessorService,\n        defaultFormGeneratorItemConfigProvider,\n        defaultFormGeneratorConfigProvider\n    ],\n    exports: [\n        FormGeneratorComponent,\n        DynamicFormControlFieldDirective,\n        DynamicFormControlDirective,\n        DynamicFormGeneratorCheckboxComponent,\n        DynamicFormGeneratorInputComponent,\n        DynamicFormGeneratorEditorComponent,\n        DynamicFormGeneratorSelectComponent,\n        DynamicFormGeneratorRadioComponent,\n        DynamicFormGeneratorDatepickerComponent,\n        DynamicFormGeneratorSwitchComponent,\n        FormGeneratorFieldComponent,\n        ContentDensityModule,\n        DynamicFormGeneratorObjectStatusComponent,\n        GetHintOptionsPipe\n    ]\n})\nexport class PlatformFormGeneratorModule {\n    /**\n     * Allows configuring module on a global level with custom configuration.\n     * @param config User's custom configuration.\n     */\n    static withConfig(config: Partial<FormGeneratorModuleConfig>): ModuleWithProviders<PlatformFormGeneratorModule> {\n        return {\n            ngModule: PlatformFormGeneratorModule,\n            providers: [\n                {\n                    provide: FORM_GENERATOR_ITEM_CONFIG,\n                    useValue: config.itemConfig\n                },\n                {\n                    provide: FORM_GENERATOR_CONFIG,\n                    useValue: config.formConfig\n                }\n            ]\n        };\n    }\n}\n","import { NgModule } from '@angular/core';\nimport { InputComponent } from './input.component';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n    imports: [InputComponent],\n    exports: [InputComponent]\n})\nexport class PlatformInputModule {}\n","import { InjectionToken } from '@angular/core';\n\nexport const CSS_CLASS_NAME = {\n    host: 'fdp-input-group',\n    input: 'fd-input-group__input',\n    addon: 'fd-input-group__addon',\n    addonButton: 'fd-input-group__addon--button',\n    button: 'fd-input-group__button'\n} as const;\n\nexport const INPUT_GROUP_CHILD_TOKEN = new InjectionToken<string>('INPUT_GROUP_CHILD_TOKEN');\n","import { ChangeDetectionStrategy, Component, ElementRef, Input, OnInit, Renderer2 } from '@angular/core';\nimport {\n    ContentDensityModule,\n    ContentDensityObserver,\n    contentDensityObserverProviders\n} from '@fundamental-ngx/core/content-density';\nimport { CSS_CLASS_NAME } from './constants';\n\n/**\n * Fundamental input group addon body component\n */\n@Component({\n    selector: 'fdp-input-group-addon-body',\n    template: '<ng-content></ng-content>',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [contentDensityObserverProviders()],\n    imports: [ContentDensityModule]\n})\nexport class InputGroupAddonBodyComponent implements OnInit {\n    /**\n     * indicates if addon contains a button\n     */\n    @Input()\n    set hasButton(hasButton: boolean) {\n        if (hasButton) {\n            this._addClassNameToHostElement(CSS_CLASS_NAME.addonButton);\n        } else {\n            this._removeClassNameFromHostElement(CSS_CLASS_NAME.addonButton);\n        }\n    }\n\n    /** @hidden */\n    constructor(\n        private _elementRef: ElementRef<HTMLElement>,\n        private _renderer: Renderer2,\n        contentDensityObserver: ContentDensityObserver\n    ) {\n        contentDensityObserver.subscribe();\n    }\n\n    /** @hidden */\n    ngOnInit(): void {\n        this._addClassNameToHostElement(CSS_CLASS_NAME.addon);\n    }\n\n    /** @hidden */\n    private _addClassNameToHostElement(className: string): void {\n        this._renderer.addClass(this._elementRef.nativeElement, className);\n    }\n\n    /** @hidden */\n    private _removeClassNameFromHostElement(className: string): void {\n        this._renderer.removeClass(this._elementRef.nativeElement, className);\n    }\n}\n","import {\n    AfterContentInit,\n    ChangeDetectionStrategy,\n    Component,\n    ContentChild,\n    ElementRef,\n    Provider,\n    Renderer2,\n    TemplateRef,\n    ViewChild,\n    forwardRef\n} from '@angular/core';\n\nimport { ButtonComponent, ButtonModel, FDP_BUTTON } from '@fundamental-ngx/platform/button';\n\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { BaseButton, FD_BUTTON_COMPONENT } from '@fundamental-ngx/core/button';\nimport { CSS_CLASS_NAME, INPUT_GROUP_CHILD_TOKEN } from './constants';\n\nexport const inputGroupAddonChildProvider: Provider = {\n    provide: INPUT_GROUP_CHILD_TOKEN,\n    useExisting: forwardRef(() => InputGroupAddonComponent)\n};\n\n/**\n * Fundamental input group addon component\n *\n * This component is intended to be used inside `<fdp-input-group>`\n *\n *\n * Input group addon can contain a plain text:\n * ```\n * <fdp-input-group-addon>$</fdp-input-group-addon>\n * ```\n * Icon:\n * ```\n * <fdp-input-group-addon><i class=\"sap-icon--employee\"></i></fdp-input-group-addon>\n * ```\n * Button component:\n * ```\n * <fdp-input-group-addon><fdp-button label=\"Action\"></fdp-button></fdp-input-group-addon>\n * ```\n *\n */\n@Component({\n    selector: 'fdp-input-group-addon',\n    template: '<ng-template><ng-content></ng-content></ng-template>',\n    providers: [inputGroupAddonChildProvider],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: true\n})\nexport class InputGroupAddonComponent implements AfterContentInit {\n    /** @hidden */\n    set disabled(disabled: boolean) {\n        this._disabled = disabled;\n        this._setButtonControlOptions();\n    }\n    get disabled(): boolean {\n        return this._disabled;\n    }\n\n    /** @hidden */\n    @ViewChild(TemplateRef)\n    contentTemplateRef: TemplateRef<any>;\n\n    /** @hidden */\n    @ContentChild(FDP_BUTTON)\n    platformButton: Nullable<ButtonModel>;\n\n    /** @hidden */\n    @ContentChild(FD_BUTTON_COMPONENT)\n    coreButton: Nullable<BaseButton>;\n\n    /** @hidden */\n    @ContentChild(ButtonComponent, { read: ElementRef })\n    set buttonElementRef(buttonComponentElementRef: ElementRef<HTMLElement>) {\n        this._setButtonElementClass(buttonComponentElementRef?.nativeElement);\n    }\n\n    /** @hidden */\n    get button(): Nullable<ButtonModel> {\n        return this.platformButton || this.coreButton;\n    }\n\n    /** @hidden */\n    private _disabled = false;\n\n    /** @hidden */\n    constructor(private _renderer: Renderer2) {}\n\n    /** @hidden */\n    ngAfterContentInit(): void {\n        this._setButtonControlOptions();\n    }\n\n    /** @hidden */\n    private _setButtonControlOptions(): void {\n        const button = this.platformButton || this.coreButton;\n\n        if (!button) {\n            return;\n        }\n\n        button.setFdType('transparent');\n        button.setDisabled(this._disabled);\n\n        button.markForCheck();\n    }\n\n    /** @hidden */\n    private _setButtonElementClass(buttonComponentElement: HTMLElement): void {\n        if (!buttonComponentElement) {\n            return;\n        }\n        const button = buttonComponentElement.querySelector('button');\n        this._renderer.addClass(button, CSS_CLASS_NAME.button);\n    }\n}\n","import { Injectable } from '@angular/core';\n\nimport { ContentDensity } from '@fundamental-ngx/cdk/utils';\nimport { PlatformConfig } from '@fundamental-ngx/platform/shared';\n\n/**\n * Default options for platform input group\n */\n@Injectable({ providedIn: 'root' })\nexport class InputGroupConfig {\n    /**\n     * Content Density of element. 'cozy' | 'compact'\n     */\n    contentDensity: ContentDensity;\n\n    /** @hidden */\n    constructor(platformConfig: PlatformConfig) {\n        this.contentDensity = platformConfig.contentDensity;\n    }\n\n    /**\n     * Create Provider factory function\n     */\n    static createProviderFactory(obj: Partial<InputGroupConfig>): (platformConfig: PlatformConfig) => InputGroupConfig {\n        const useFactory = (platformConfig: PlatformConfig): InputGroupConfig =>\n            Object.assign(new InputGroupConfig(platformConfig), obj);\n        return useFactory;\n    }\n}\n","import { ChangeDetectionStrategy, Component, Input, Provider, forwardRef } from '@angular/core';\n\nimport { InputType } from '../input/input.component';\nimport { INPUT_GROUP_CHILD_TOKEN } from './constants';\n\n/**\n * fdp-input-group needs it's own input component to\n * register INPUT_GROUP_CHILD in order to render\n * input group content children in the order that they are placed\n *\n */\n\nexport const inputGroupInputChildProvider: Provider = {\n    provide: INPUT_GROUP_CHILD_TOKEN,\n    useExisting: forwardRef(() => InputGroupInputComponent)\n};\n\n/**\n * Fundamental input group input component\n *\n * This component is intended to be used inside `<fdp-input-group>`\n *\n * Example:\n * ```\n * <fdp-input-group name=\"group\">\n *   <fdp-input-group-input type=\"email\"></fdp-input-group-input>\n * </fdp-input-group>\n * ```\n *\n */\n@Component({\n    selector: 'fdp-input-group-input',\n    template: '',\n    providers: [inputGroupInputChildProvider],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: true\n})\nexport class InputGroupInputComponent {\n    /** InputType 'text' | 'number' | 'email' | 'password' */\n    @Input()\n    type: InputType = 'text';\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n    AfterContentInit,\n    ChangeDetectionStrategy,\n    Component,\n    ContentChild,\n    ContentChildren,\n    ElementRef,\n    forwardRef,\n    Input,\n    OnInit,\n    QueryList,\n    Renderer2,\n    ViewChild,\n    ViewEncapsulation\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { CvaControl, CvaDirective, FD_FORM_FIELD_CONTROL } from '@fundamental-ngx/cdk/forms';\nimport { warnOnce } from '@fundamental-ngx/cdk/utils';\nimport { contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\nimport { FormControlComponent } from '@fundamental-ngx/core/form';\nimport { InputGroupModule } from '@fundamental-ngx/core/input-group';\nimport { startWith } from 'rxjs/operators';\nimport { InputComponent } from '../input/input.component';\nimport { InputGroupAddonComponent } from './addon.component';\nimport { CSS_CLASS_NAME, INPUT_GROUP_CHILD_TOKEN } from './constants';\nimport { InputGroupConfig } from './input-group.config';\nimport { InputGroupInputComponent } from './input.component';\n\n/**\n * Fundamental input group component\n *\n * ```html\n * <fdp-input-group>\n *   <fdp-input-group-addon>$</fdp-input-group-addon>\n *   <fdp-input-group-input type=\"number\"></fdp-input-group-input>\n *   <fdp-input-group-addon>0.00</fdp-input-group-addon>\n * </fdp-input-group>\n * ```\n *\n */\n@Component({\n    selector: 'fdp-input-group',\n    templateUrl: './input-group.component.html',\n    styleUrl: './input-group.component.scss',\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    hostDirectives: [\n        {\n            directive: CvaDirective,\n            inputs: ['placeholder', 'disabled', 'readonly', 'state', 'name', 'stateMessage']\n        }\n    ],\n    providers: [\n        CvaControl,\n        { provide: FD_FORM_FIELD_CONTROL, useExisting: forwardRef(() => InputGroupComponent), multi: true },\n        contentDensityObserverProviders()\n    ],\n    imports: [NgTemplateOutlet, InputGroupModule, FormControlComponent, FormsModule]\n})\nexport class InputGroupComponent implements OnInit, AfterContentInit {\n    /** Input value */\n    @Input()\n    set value(value: any) {\n        this._cvaControl.cvaDirective?.setValue(value);\n    }\n    get value(): any {\n        return this._cvaControl.cvaDirective?.value;\n    }\n\n    /** @hidden */\n    @ContentChildren(INPUT_GROUP_CHILD_TOKEN)\n    _children: QueryList<InputGroupInputComponent | InputGroupAddonComponent>;\n\n    /** @hidden */\n    @ContentChild(InputGroupInputComponent)\n    _input: InputGroupInputComponent;\n\n    /** @hidden */\n    @ViewChild(InputComponent, { read: ElementRef })\n    set _inputComponentElement(inputComponentElementRef: ElementRef<HTMLElement>) {\n        this._setInputElementClass(inputComponentElementRef?.nativeElement);\n    }\n\n    /** @hidden */\n    _beforeInputAddons: InputGroupAddonComponent[] = [];\n\n    /** @hidden */\n    _afterInputAddons: InputGroupAddonComponent[] = [];\n\n    /** @hidden */\n    constructor(\n        readonly _cvaControl: CvaControl<string | number>,\n        private _renderer: Renderer2,\n        protected _hostElementRef: ElementRef<HTMLElement>,\n        protected _inputGroupConfig: InputGroupConfig\n    ) {\n        warnOnce(\n            `[Deprecated] Platform Input Group Component is deprecated and will be removed in the next major version.\n             Please use Core implementation of Input Group Component instead.`\n        );\n    }\n\n    /** @hidden */\n    ngOnInit(): void {\n        this._cvaControl.listenToChanges();\n        /**\n         * Assign predefined className to host element\n         * to make css selector stronger\n         */\n        this._addClassNameToHostElement(CSS_CLASS_NAME.host);\n    }\n\n    /** @hidden */\n    ngAfterContentInit(): void {\n        this._listenToChildrenQueryListChanges();\n    }\n\n    /**\n     * @hidden\n     * override base functionality to catch new disabled state\n     */\n    setDisabledState(disabled: boolean): void {\n        this._cvaControl.cvaDirective?.setDisabledState(disabled);\n        this._setAddonsOptions();\n    }\n\n    /** @hidden */\n    _onChangeInputValue(value: string): void {\n        this.value = value;\n    }\n\n    /** @hidden */\n    _onKeyPress(event: KeyboardEvent): void {\n        // prevent typing non-digit chars\n        if (this._input.type === 'number') {\n            if (!event.key.match(/([0-9]|[-]|[,]|[.])/)) {\n                event.preventDefault();\n            }\n        }\n    }\n\n    /** @hidden */\n    private _listenToChildrenQueryListChanges(): void {\n        this._children.changes.pipe(startWith(this._children)).subscribe(() => {\n            this._createAddonsGroups();\n            this._setAddonsOptions();\n        });\n    }\n\n    /** @hidden */\n    private _setInputElementClass(inputComponentElement: HTMLElement): void {\n        if (!inputComponentElement) {\n            return;\n        }\n\n        const inputElement = inputComponentElement.querySelector('input');\n        this._renderer.addClass(inputElement, CSS_CLASS_NAME.input);\n    }\n\n    /** @hidden */\n    private _createAddonsGroups(): void {\n        const childrenList = this._children.toArray();\n        const inputChildIndex = childrenList.findIndex((child) => this._isInputChild(child));\n\n        // reset group's containers\n        this._beforeInputAddons = [];\n        this._afterInputAddons = [];\n\n        childrenList.forEach((child, index) => {\n            if (!this._isAddonChild(child)) {\n                return;\n            }\n            if (index < inputChildIndex) {\n                this._beforeInputAddons.push(child);\n            }\n            if (index > inputChildIndex) {\n                this._afterInputAddons.push(child);\n            }\n        });\n    }\n\n    /** @hidden */\n    private _isInputChild(child: unknown): child is InputGroupInputComponent {\n        return child instanceof InputGroupInputComponent;\n    }\n\n    /** @hidden */\n    private _isAddonChild(child: unknown): child is InputGroupAddonComponent {\n        return child instanceof InputGroupAddonComponent;\n    }\n\n    /** @hidden */\n    private _setAddonsOptions(): void {\n        const before = this._beforeInputAddons || [];\n        const after = this._afterInputAddons || [];\n        [...before, ...after].forEach((addon) => {\n            addon.disabled = this._cvaControl.cvaDirective?.disabled === true;\n        });\n    }\n\n    /** @hidden */\n    private _addClassNameToHostElement(className: string): void {\n        this._renderer.addClass(this._hostElementRef.nativeElement, className);\n    }\n}\n","<fd-input-group\n    [disabled]=\"!!_cvaControl.cvaDirective?.disabled\"\n    [(ngModel)]=\"value\"\n    [state]=\"_cvaControl?.cvaDirective?.normalizedState$() || 'default'\"\n    [stateMessage]=\"_cvaControl.cvaDirective?.stateMessage\"\n>\n    <!-- Before input addons area -->\n    @for (addon of _beforeInputAddons; track addon) {\n        <span fd-input-group-addon [button]=\"!!addon.button\">\n            <ng-template [ngTemplateOutlet]=\"addon.contentTemplateRef\"></ng-template>\n        </span>\n    }\n    @if (_input) {\n        <input\n            [attr.name]=\"_cvaControl.cvaDirective?.name\"\n            [attr.id]=\"_cvaControl.cvaDirective?.id\"\n            [attr.placeholder]=\"_cvaControl.cvaDirective?.placeholder\"\n            [type]=\"_input.type\"\n            [disabled]=\"!!_cvaControl.cvaDirective?.disabled\"\n            [class.is-disabled]=\"!!_cvaControl.cvaDirective?.disabled\"\n            [(ngModel)]=\"value\"\n            [ariaLabel]=\"_cvaControl.cvaDirective?.ariaLabel\"\n            [ariaLabelledBy]=\"_cvaControl.cvaDirective?.ariaLabelledBy\"\n            [attr.required]=\"_cvaControl.cvaDirective?.required\"\n            (input)=\"_onChangeInputValue($any($event.target)?.value)\"\n            (focus)=\"_cvaControl.cvaDirective?._onFocusChanged(true)\"\n            (blur)=\"_cvaControl.cvaDirective?._onFocusChanged(false)\"\n            (keypress)=\"_onKeyPress($event)\"\n            fd-input-group-input\n            fd-form-control\n        />\n    }\n    <!-- Before input addons area -->\n    @for (addon of _afterInputAddons; track addon) {\n        <span fd-input-group-addon [button]=\"!!addon.button\">\n            <ng-template [ngTemplateOutlet]=\"addon.contentTemplateRef\"></ng-template>\n        </span>\n    }\n</fd-input-group>\n","import { NgModule } from '@angular/core';\n\nimport { InputGroupAddonBodyComponent } from './addon-body.component';\nimport { InputGroupAddonComponent } from './addon.component';\nimport { InputGroupComponent } from './input-group.component';\nimport { InputGroupInputComponent } from './input.component';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n    imports: [InputGroupComponent, InputGroupAddonComponent, InputGroupAddonBodyComponent, InputGroupInputComponent],\n    exports: [InputGroupComponent, InputGroupAddonComponent, InputGroupInputComponent]\n})\nexport class PlatformInputGroupModule {}\n","import { Injectable } from '@angular/core';\n\nimport { ContentDensity } from '@fundamental-ngx/cdk/utils';\nimport { DataProvider, MatchingStrategy, PlatformConfig } from '@fundamental-ngx/platform/shared';\n\n/**\n * Default options for Multi-Combobox\n */\n@Injectable({ providedIn: 'root' })\nexport class MultiComboboxConfig {\n    /**\n     * Content Density of element. 'cozy' | 'compact'\n     */\n    contentDensity: ContentDensity;\n\n    /**\n     * String matching strategy for typeahead list. Default: 'starts with per term'\n     */\n    matchingStrategy: MatchingStrategy = MatchingStrategy.STARTS_WITH_PER_TERM;\n\n    /**\n     * Maps data providers\n     */\n    providers: Map<string, DataProvider<any>> | null = new Map();\n\n    /** @hidden */\n    constructor(platformConfig: PlatformConfig) {\n        this.contentDensity = platformConfig.contentDensity;\n    }\n\n    /**\n     * Create Provider factory function\n     */\n    static createProviderFactory(\n        obj: Partial<MultiComboboxConfig>\n    ): (platformConfig: PlatformConfig) => MultiComboboxConfig {\n        const useFactory = (platformConfig: PlatformConfig): MultiComboboxConfig =>\n            Object.assign(new MultiComboboxConfig(platformConfig), obj);\n        return useFactory;\n    }\n}\n","import {\n    ALT,\n    BACKSPACE,\n    CONTROL,\n    DOWN_ARROW,\n    ENTER,\n    ESCAPE,\n    LEFT_ARROW,\n    RIGHT_ARROW,\n    SHIFT,\n    TAB,\n    UP_ARROW\n} from '@angular/cdk/keycodes';\nimport {\n    AfterViewInit,\n    ContentChildren,\n    Directive,\n    effect,\n    ElementRef,\n    EventEmitter,\n    inject,\n    InjectionToken,\n    Input,\n    OnChanges,\n    OnDestroy,\n    Output,\n    QueryList,\n    signal,\n    SimpleChanges,\n    TemplateRef,\n    ViewChild\n} from '@angular/core';\n\nimport { fromEvent, isObservable, Observable, Subject, Subscription, timer } from 'rxjs';\nimport { skip } from 'rxjs/operators';\n\nimport { FormStates } from '@fundamental-ngx/cdk/forms';\nimport {\n    ContentDensity,\n    FocusEscapeDirection,\n    KeyUtil,\n    Nullable,\n    RangeSelector,\n    TemplateDirective\n} from '@fundamental-ngx/cdk/utils';\nimport { DialogConfig } from '@fundamental-ngx/core/dialog';\nimport { ListComponent } from '@fundamental-ngx/core/list';\nimport { MobileModeConfig } from '@fundamental-ngx/core/mobile-mode';\nimport { PopoverFillMode } from '@fundamental-ngx/core/shared';\nimport {\n    ArrayMultiComboBoxDataSource,\n    coerceArraySafe,\n    CollectionBaseInput,\n    isDataSource,\n    isFunction,\n    isJsObject,\n    isOptionItem,\n    isSelectableOptionItem,\n    isString,\n    MatchingBy,\n    MatchingStrategy,\n    MultiComboBoxDataSource,\n    ObservableMultiComboBoxDataSource,\n    SelectableOptionItem\n} from '@fundamental-ngx/platform/shared';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FD_LANGUAGE_SIGNAL, TranslationResolver } from '@fundamental-ngx/i18n';\nimport { shallowEqual } from 'fast-equals';\nimport { TextAlignment } from '../../combobox';\nimport { MultiComboboxConfig } from '../multi-combobox.config';\n\nexport const MAP_LIMIT = new InjectionToken<number>('Map limit≥', { factory: () => 12 });\n\nexport type FdpMultiComboboxDataSource<T> = MultiComboBoxDataSource<T> | Observable<T[]> | T[];\n\nexport class MultiComboboxSelectionChangeEvent {\n    /**\n     * Multi Combobox selection change event\n     * @param source Multi Combobox component\n     * @param selectedItems Selected items\n     */\n    constructor(\n        public source: BaseMultiCombobox,\n        public selectedItems: SelectableOptionItem['value'] // Contains selected items\n    ) {}\n}\n\n@Directive()\nexport abstract class BaseMultiCombobox extends CollectionBaseInput implements OnChanges, AfterViewInit, OnDestroy {\n    /**\n     * @hidden\n     * Method to set input text as item label.\n     */\n    abstract setInputTextFromOptionItem(item: SelectableOptionItem): void;\n\n    /**\n     * @hidden\n     * Toggle item selection.\n     */\n    abstract toggleSelection(item: SelectableOptionItem): void;\n\n    /**\n     * @hidden\n     * Toggle item selection by input text value.\n     */\n    abstract toggleSelectionByInputText(): void;\n\n    /** Provides selected items. */\n    @Input()\n    selectedItems: any[] = [];\n\n    /** Provides maximum height for the optionPanel. */\n    @Input()\n    maxHeight = '250px';\n\n    /**\n     * Whether AddOn Button should be focusable\n     * @default true\n     */\n    @Input()\n    buttonFocusable = false;\n    /** Datasource for suggestion list. */\n    @Input()\n    set dataSource(value: FdpMultiComboboxDataSource<any>) {}\n\n    get dataSource(): FdpMultiComboboxDataSource<any> {\n        return this._dataSource;\n    }\n\n    /** Whether the autocomplete should be enabled; Enabled by default. */\n    @Input()\n    autoComplete = true;\n\n    /**\n     * TODO: Name of the entity for which DataProvider will be loaded. You can either pass list of\n     * items or use this entityClass and internally we should be able to do lookup to some registry\n     * and retrieve the best matching DataProvider that is set on application level\n     */\n    @Input()\n    entityClass: string;\n\n    /** Whether the multi-combobox should be built on mobile mode. */\n    @Input()\n    mobile = false;\n\n    /** Multi Combobox Mobile Configuration, it's applied only, when mobile is enabled. */\n    @Input()\n    mobileConfig: MobileModeConfig;\n\n    /** Tells the multi-combobox if we need to group items. */\n    @Input()\n    group = false;\n\n    /** A field name to use to group data by (support dotted notation). */\n    @Input()\n    groupKey: string;\n\n    /** The field to show data in secondary column. */\n    @Input()\n    secondaryKey: string;\n\n    /** Show the second column (applicable for two columns layout). */\n    @Input()\n    showSecondaryText = false;\n\n    /** Horizontally align text inside the second column (applicable for two columns layout). */\n    @Input()\n    secondaryTextAlignment: TextAlignment = 'right';\n\n    /** Turns on/off Adjustable Width feature. */\n    @Input()\n    autoResize = false;\n    /** Value of the multi combobox */\n    @Input()\n    set value(value: any) {\n        super.setValue(value, true);\n    }\n\n    get value(): any {\n        return super.getValue();\n    }\n\n    /**\n     * Preset options for the Select body width, whatever is chosen, the body has a 600px limit.\n     * * `at-least` will apply a minimum width to the body equivalent to the width of the control. - Default\n     * * `equal` will apply a width to the body equivalent to the width of the control.\n     * * 'fit-content' will apply width needed to properly display items inside, independent of control.\n     */\n    @Input()\n    fillControlMode: PopoverFillMode = 'at-least';\n\n    /** Sets title attribute to addon button. */\n    @Input()\n    addonIconTitle: string;\n\n    /**\n     * @deprecated Use the i18n module to modify the translation for this string.\n     * Sets invalid entry message.\n     * */\n    @Input()\n    invalidEntryMessage: Nullable<string>;\n\n    /** Turns limitless mode, ON or OFF */\n    @Input()\n    limitless: boolean;\n\n    /** Whether to open the dropdown when the addon button is clicked. */\n    @Input()\n    openDropdownOnAddOnClicked = true;\n\n    /** Event emitted when item is selected. */\n    @Output()\n    selectionChange = new EventEmitter<MultiComboboxSelectionChangeEvent>();\n\n    /** @hidden Emits event when the menu is opened/closed. */\n    @Output()\n    isOpenChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n    /** Event emitted when data loading is started. */\n    // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n    @Output() onDataRequested = new EventEmitter<void>();\n\n    /** Event emitted when data loading is finished. */\n    // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n    @Output() onDataReceived = new EventEmitter<void>();\n\n    /** Emits event when the addon button is clicked. */\n    @Output()\n    addOnButtonClicked: EventEmitter<Event> = new EventEmitter<Event>();\n\n    /** @hidden */\n    @ViewChild(ListComponent)\n    listComponent: ListComponent;\n\n    /** @hidden */\n    @ViewChild('searchInputElement', { read: ElementRef })\n    searchInputElement: ElementRef;\n\n    /** @hidden */\n    @ContentChildren(TemplateDirective)\n    customTemplates: QueryList<TemplateDirective>;\n\n    /**\n     * @hidden\n     * Custom Option item Template.\n     */\n    optionItemTemplate: TemplateRef<any>;\n\n    /**\n     * @hidden\n     * Custom Group Header item Template.\n     */\n    groupItemTemplate: TemplateRef<any>;\n\n    /**\n     * @hidden\n     * Custom Secondary item Template.\n     */\n    secondaryItemTemplate: TemplateRef<any>;\n\n    /**\n     * @hidden\n     * Custom Selected option item Template.\n     */\n    selectedItemTemplate: TemplateRef<any>;\n\n    /** @hidden */\n    _contentDensity: ContentDensity;\n\n    /** @hidden */\n    listTemplate: TemplateRef<any>;\n\n    /** Set the input text of the input. */\n    set inputText(value: string) {\n        this._inputTextValue = value;\n\n        this.onTouched();\n    }\n\n    /** Get the input text of the input. */\n    get inputText(): string {\n        return this._inputTextValue || '';\n    }\n\n    /** Is empty search field. */\n    get isEmptyValue(): boolean {\n        return this.inputText.trim().length === 0;\n    }\n\n    /** @hidden */\n    get isGroup(): boolean {\n        return !!(this.group && this.groupKey);\n    }\n\n    /** Whether the Multi Input is opened. */\n    isOpen = false;\n\n    /**\n     * @hidden\n     * List of matched suggestions\n     */\n    _suggestions: SelectableOptionItem[];\n\n    /**\n     * @hidden\n     * Grouped suggestions mapped to array.\n     */\n    _flatSuggestions: SelectableOptionItem[] = [];\n\n    /** @hidden */\n    _fullFlatSuggestions: SelectableOptionItem[] = [];\n\n    /**\n     * @hidden\n     * List of selected suggestions\n     */\n    _selectedSuggestions: SelectableOptionItem[];\n\n    /**\n     * @hidden\n     * Max width of list container\n     */\n    maxWidth: number;\n\n    /**\n     * @hidden\n     * Min width of list container\n     */\n    minWidth: number;\n\n    /**\n     * @hidden\n     * Need for opening mobile version\n     */\n    openChange = new Subject<boolean>();\n\n    /** @hidden */\n    selectedShown$ = signal(false);\n\n    /** @hidden */\n    protected readonly multiComboboxConfig = inject(MultiComboboxConfig);\n\n    /** @hidden */\n    protected readonly _rangeSelector = new RangeSelector();\n\n    /** @hidden */\n    protected readonly dialogConfig = inject(DialogConfig, { optional: true });\n\n    /** @hidden */\n    protected _dataSource: FdpMultiComboboxDataSource<any>;\n\n    /** @hidden */\n    private _inputTextValue: string;\n\n    /** @hidden */\n    private _previousInputText: string;\n\n    /** @hidden */\n    private _matchingStrategy: MatchingStrategy = this.multiComboboxConfig.matchingStrategy;\n\n    /** @hidden */\n    private _dsSubscription: Subscription | null = null;\n\n    /** @hidden */\n    private _element: HTMLElement = this.elementRef.nativeElement;\n\n    /**\n     * @hidden\n     * Keys, that won't trigger the popover's open state, when dispatched on search input.\n     */\n    private readonly _nonOpeningKeys: number[] = [\n        BACKSPACE,\n        ESCAPE,\n        ENTER,\n        CONTROL,\n        TAB,\n        SHIFT,\n        UP_ARROW,\n        RIGHT_ARROW,\n        DOWN_ARROW,\n        LEFT_ARROW,\n        ALT\n    ];\n\n    /** @hidden */\n    private _timerSub$: Subscription;\n\n    /** @hidden */\n    private _previousState?: FormStates;\n\n    /** @hidden */\n    private _previousStateMessage: Nullable<string>;\n\n    /** @hidden */\n    private readonly _mapLimit = inject(MAP_LIMIT);\n\n    /** @hidden */\n    private readonly _langSignal = inject(FD_LANGUAGE_SIGNAL);\n\n    /** @hidden */\n    private _translationResolver = new TranslationResolver();\n\n    /** @hidden */\n    protected constructor() {\n        super();\n        this._contentDensity = this.multiComboboxConfig.contentDensity;\n\n        effect(() => {\n            const lang = this._langSignal();\n            this.invalidEntryMessage = this._translationResolver.resolve(\n                lang,\n                'platformMultiCombobox.invalidEntryError'\n            );\n        });\n    }\n\n    /** @hidden */\n    ngOnChanges(changes: SimpleChanges): void {\n        const dataSourceChange = changes['dataSource'];\n\n        if (dataSourceChange) {\n            this._initializeDataSource(dataSourceChange.currentValue);\n        }\n    }\n\n    /** @hidden */\n    ngAfterViewInit(): void {\n        this._initWindowResize();\n        this._assignCustomTemplates();\n        this._previousInputText = this.inputText;\n        super.ngAfterViewInit();\n    }\n\n    /** @hidden */\n    ngOnDestroy(): void {\n        super.ngOnDestroy();\n\n        if (isDataSource(this.dataSource)) {\n            (this.dataSource as MultiComboBoxDataSource<any>).close();\n        }\n\n        if (this._dsSubscription) {\n            this._dsSubscription.unsubscribe();\n        }\n    }\n\n    /** write value for ControlValueAccessor */\n    writeValue(value: any): void {\n        this.selectedItems = coerceArraySafe(value);\n        super.writeValue(this.selectedItems);\n        this._setSelectedSuggestions();\n        this._emitChangeEvent();\n    }\n\n    /** @hidden */\n    popoverOpenChangeHandle(isOpen: boolean): void {\n        this.isOpen = isOpen;\n        this._rangeSelector.reset();\n        if (!isOpen) {\n            this.onTouched();\n        }\n        this._onOpenChange(this.isOpen);\n    }\n\n    /** @hidden */\n    _onOpenChange(isOpen: boolean): void {\n        if (isOpen) {\n            this.formMessage?._popover.close();\n        }\n        this.formMessage?._popover.setIgnoreTriggers(isOpen);\n    }\n\n    /** Opens the select popover body. */\n    open(): void {\n        this.isOpen = true;\n        this.isOpenChange.emit(this.isOpen);\n        this.markForCheck();\n    }\n\n    /** Closes the select popover body. */\n    close(): void {\n        this._rangeSelector.reset();\n        this.selectedShown$.set(false);\n        this.inputText = '';\n        this._focusToSearchField();\n\n        this.isOpen = false;\n        this.isOpenChange.emit(this.isOpen);\n        this.markForCheck();\n    }\n\n    /** @hidden */\n    showList(isOpen: boolean): void {\n        if (this.isOpen !== isOpen) {\n            this.isOpen = isOpen;\n            this.onTouched();\n            this.openChange.next(isOpen);\n        }\n\n        if (!this.isOpen) {\n            this.searchTermChanged('');\n        }\n\n        this.markForCheck();\n    }\n\n    /** @hidden */\n    searchTermChanged(text: string = this.inputText): void {\n        if (text) {\n            this.open();\n        }\n\n        const map = new Map();\n        map.set('query', text);\n\n        if (!this.limitless) {\n            map.set('limit', this._mapLimit);\n        } else {\n            map.set('limit', Number.MAX_SAFE_INTEGER);\n        }\n\n        this.ds.match(map);\n\n        this.markForCheck();\n    }\n\n    /**\n     * Handle Click on Button\n     * @hidden\n     */\n    onPrimaryButtonClick(isOpen: boolean): void {\n        if (!isOpen) {\n            this.searchTermChanged('');\n        }\n\n        if (this.openDropdownOnAddOnClicked) {\n            this.showList(!isOpen);\n        } else if (this.isOpen) {\n            this.showList(false);\n        }\n\n        this.searchInputElement?.nativeElement.focus();\n    }\n\n    /**\n     * Handle Keydown on Input\n     * @hidden\n     */\n    onInputKeydownHandler(event: KeyboardEvent): void {\n        if (this.readonly) {\n            return;\n        }\n\n        if (KeyUtil.isKeyCode(event, DOWN_ARROW)) {\n            event.preventDefault();\n\n            if (event.altKey) {\n                this.showList(true);\n            }\n\n            if (this.isOpen && this.listComponent) {\n                this.listComponent.setItemActive(0);\n            } else if (!this.isOpen) {\n                this._chooseOtherItem(1);\n            }\n        } else if (KeyUtil.isKeyCode(event, UP_ARROW)) {\n            event.preventDefault();\n\n            this._chooseOtherItem(-1);\n        } else if (KeyUtil.isKeyCode(event, ENTER)) {\n            this.toggleSelectionByInputText();\n        } else if (!KeyUtil.isKeyCode(event, [...this._nonOpeningKeys, CONTROL])) {\n            this.showList(true);\n            const acceptedKeys =\n                !KeyUtil.isKeyType(event, 'alphabetical') &&\n                !KeyUtil.isKeyType(event, 'numeric') &&\n                !KeyUtil.isKeyType(event, 'ime');\n            if (acceptedKeys) {\n                // SetTimeout is needed for input to receive new value.\n                setTimeout(() => {\n                    if (this.isEmptyValue) {\n                        this.listComponent?.setItemActive(0);\n                    }\n                });\n            }\n        }\n    }\n\n    /** Method passed to list component */\n    handleListFocusEscape(direction: FocusEscapeDirection): void {\n        if (direction === 'up') {\n            this.searchInputElement?.nativeElement.focus();\n        }\n    }\n\n    /** @hidden */\n    setLimitless(limitless: boolean): void {\n        this.limitless = limitless;\n    }\n\n    /** @hidden */\n    getMapLimit(): number {\n        return this.limitless ? (this.dataSource as any[]).length : this._mapLimit;\n    }\n\n    /**\n     * @hidden\n     * Method to emit change event\n     */\n    _emitChangeEvent(): void {\n        const event = new MultiComboboxSelectionChangeEvent(this, this.value);\n\n        this.selectionChange.emit(event);\n    }\n\n    /**\n     * Used to change the value of a control.\n     * @param value the value to be applied\n     * @param emitOnChange whether to emit \"onChange\" event.\n     * Should be \"false\", if the change is made programmatically (internally) by the control, \"true\" otherwise\n     */\n    protected setValue(value: any, emitOnChange = true): void {\n        this.selectedItems = coerceArraySafe(value);\n        super.setValue(this.selectedItems, emitOnChange);\n        this._setSelectedSuggestions();\n        this._emitChangeEvent();\n    }\n\n    /** @hidden */\n    protected _setSelectedSuggestions(): void {\n        this._selectedSuggestions = [];\n\n        if (!this.selectedItems?.length) {\n            return;\n        }\n\n        for (let i = 0; i < this.selectedItems.length; i++) {\n            const selectedItem = this.selectedItems[i];\n            const finder = (item: SelectableOptionItem): boolean =>\n                item.label === selectedItem || item.value === selectedItem;\n            const idFromFullFlatSuggestions = this._fullFlatSuggestions.findIndex(finder);\n            const idFromSuggestions = (this._suggestions || []).findIndex(finder);\n            const itemIndex = Math.max(idFromFullFlatSuggestions, idFromSuggestions);\n            const collection = idFromFullFlatSuggestions !== -1 ? this._fullFlatSuggestions : this._suggestions;\n            if (idFromFullFlatSuggestions === -1 && idFromSuggestions === -1) {\n                this._convertToOptionItems([selectedItem]).forEach((optionItem: SelectableOptionItem) => {\n                    optionItem.selected = true;\n                    this._selectedSuggestions.push(optionItem);\n                });\n            } else if (\n                this._suggestions &&\n                collection === this._suggestions &&\n                !this._fullFlatSuggestions.includes(collection[itemIndex])\n            ) {\n                this._fullFlatSuggestions.push(collection[itemIndex]);\n            }\n            if (itemIndex > -1) {\n                this._selectedSuggestions.push(collection[itemIndex]);\n                collection[itemIndex].selected = true;\n            }\n        }\n\n        this.detectChanges();\n    }\n\n    /** @hidden */\n    protected get ds(): MultiComboBoxDataSource<any> {\n        return this.dataSource as MultiComboBoxDataSource<any>;\n    }\n\n    /** @hidden */\n    protected _focusToSearchField(): void {\n        this.searchInputElement?.nativeElement.focus();\n    }\n\n    /** @hidden */\n    protected _getSelectItemByInputValue(displayValue: string): SelectableOptionItem | undefined {\n        return this._flatSuggestions.find((value) => value.label === displayValue);\n    }\n\n    /** @hidden\n     *  Map grouped values to array. */\n    protected _flattenGroups(items: SelectableOptionItem[]): SelectableOptionItem[] {\n        return items.reduce((result, item) => result.concat(item.children ?? []), <SelectableOptionItem[]>[]);\n    }\n\n    /**\n     * Convert object[] data to Group OptionItems Interface\n     * @hidden\n     */\n    protected _convertObjectsToGroupOptionItems<K>(items: K[]): SelectableOptionItem[] {\n        const group: { [key: string]: K[] } = {};\n\n        for (let i = 0; i < items.length; i++) {\n            const item = items[i];\n            const keyValue = item[this.groupKey];\n            if (!keyValue) {\n                continue;\n            }\n\n            if (!group[keyValue]) {\n                group[keyValue] = [];\n            }\n\n            group[keyValue].push(item);\n        }\n\n        return Object.keys(group).map((key) => {\n            const selectItem: SelectableOptionItem = {\n                label: key,\n                value: null,\n                isGroup: true\n            };\n\n            const currentGroup = group[key];\n\n            if (this.showSecondaryText && this.secondaryKey) {\n                selectItem.children = this._convertObjectsToSecondaryOptionItems(currentGroup);\n            } else {\n                selectItem.children = this._convertObjectsToDefaultOptionItems(currentGroup);\n            }\n\n            return selectItem;\n        });\n    }\n\n    /** @hidden */\n    private _displayFn = (value: any): string => this.displayValue(value);\n\n    /** @hidden */\n    private _secondaryFn = (value: any): string => {\n        if (isOptionItem(value)) {\n            return value.secondaryText ?? '';\n        } else if (isJsObject(value) && this.secondaryKey) {\n            const currentItem = this.objectGet(value, this.secondaryKey);\n\n            return isFunction(currentItem) ? currentItem() : currentItem;\n        } else {\n            return value;\n        }\n    };\n\n    /** @hidden\n     * Method that picks other value moved from current one by offset, called only when Multi Combobox is closed */\n    private _chooseOtherItem(offset: number): void {\n        if (this._selectedSuggestions?.length === this._flatSuggestions.length) {\n            this.inputText = '';\n            return;\n        }\n\n        const activeValue = this._getSelectItemByInputValue(this.inputText);\n        const index = this._flatSuggestions.findIndex((value) => value === activeValue);\n        const position = !this.inputText && offset === -1 ? this._flatSuggestions.length - 1 : index + offset;\n        const item = this._flatSuggestions[position];\n\n        if (item) {\n            this.setInputTextFromOptionItem(item);\n        }\n\n        const selectedIndex = this._selectedSuggestions.findIndex((value) => value.label === item?.label);\n        if (selectedIndex !== -1) {\n            this._chooseOtherItem(offset);\n        }\n    }\n\n    /** @hidden */\n    private _initializeDataSource(ds: FdpMultiComboboxDataSource<any>): void {\n        this._suggestions = [];\n        this._flatSuggestions = [];\n\n        if (isDataSource(this.dataSource)) {\n            (this.dataSource as MultiComboBoxDataSource<any>).close();\n\n            if (this._dsSubscription) {\n                this._dsSubscription.unsubscribe();\n                this._dsSubscription = null;\n            }\n        }\n        // Convert whatever comes in as DataSource so we can work with it identically\n        this._dataSource = this._openDataStream(ds);\n    }\n\n    /** @hidden */\n    private _openDataStream(ds: FdpMultiComboboxDataSource<any>): MultiComboBoxDataSource<any> {\n        const initDataSource = this._toDataStream(ds);\n        let isInitDataSource = true;\n\n        if (initDataSource === undefined) {\n            throw new Error(`[dataSource] source did not match an array, Observable, or DataSource`);\n        }\n\n        initDataSource.limitless = this.limitless;\n\n        /**\n         * This is single point of data entry to the component. We dont want to set data on different\n         * places. If any new data comes in either you do a search and you want to pass initial data\n         * its here.\n         */\n        this._dsSubscription = new Subscription();\n        const dsSub = initDataSource\n            .open()\n            .pipe(skip(1), takeUntilDestroyed(this._destroyed))\n            .subscribe((data) => {\n                if (data.length === 0) {\n                    this._processingEmptyData();\n\n                    return;\n                } else {\n                    this._previousInputText = this.inputText;\n                }\n\n                this._suggestions = this._convertToOptionItems(data).map((optionItem: SelectableOptionItem) => {\n                    const selectedElement = this._selectedSuggestions.find(\n                        (selectedItem: SelectableOptionItem) => selectedItem.id === optionItem.id\n                    );\n                    if (selectedElement) {\n                        optionItem.selected = selectedElement.selected;\n                    }\n                    return optionItem;\n                });\n\n                this._flatSuggestions = this.isGroup ? this._flattenGroups(this._suggestions) : this._suggestions;\n\n                if (isInitDataSource) {\n                    this._fullFlatSuggestions = this._flatSuggestions;\n                    isInitDataSource = false;\n                }\n\n                const selectedSuggestionsLength = this._selectedSuggestions.length;\n                if (selectedSuggestionsLength > 0) {\n                    for (let i = 0; i < selectedSuggestionsLength; i++) {\n                        const selectedSuggestion = this._selectedSuggestions[i];\n                        const idx = this._suggestions.findIndex((item) =>\n                            shallowEqual(item.value, selectedSuggestion.value)\n                        );\n\n                        if (idx !== -1) {\n                            this._suggestions[idx].selected = true;\n                        }\n                    }\n                }\n\n                this.stateChanges.next('initDataSource.open().');\n\n                this.markForCheck();\n            });\n        this._dsSubscription.add(dsSub);\n\n        this._dsSubscription.add(initDataSource.onDataRequested().subscribe(this.onDataRequested));\n        this._dsSubscription.add(initDataSource.onDataReceived().subscribe(this.onDataReceived));\n\n        initDataSource.dataProvider.setLookupKey(this.lookupKey);\n        const matchingBy: MatchingBy = {\n            firstBy: this._displayFn\n        };\n\n        if (this.secondaryKey) {\n            matchingBy.secondaryBy = this._secondaryFn;\n        }\n\n        initDataSource.dataProvider.setMatchingBy(matchingBy);\n        initDataSource.dataProvider.setMatchingStrategy(this._matchingStrategy);\n\n        // initial data fetch\n        const map = new Map();\n        map.set('query', '*');\n\n        if (!this.limitless) {\n            map.set('limit', MAP_LIMIT);\n        } else {\n            map.set('limit', Number.MAX_SAFE_INTEGER);\n        }\n\n        initDataSource.match(map);\n\n        return initDataSource;\n    }\n\n    /** @hidden */\n    private _processingEmptyData(): void {\n        this.detectChanges();\n\n        this.inputText = this._previousInputText;\n\n        this._setInvalidEntry();\n\n        if (this._timerSub$) {\n            this._timerSub$.unsubscribe();\n        }\n\n        this._timerSub$ = timer(3000).subscribe(() => this._unsetInvalidEntry());\n    }\n\n    /** @hidden */\n    private _setInvalidEntry(): void {\n        if (this._previousState || this._previousStateMessage) {\n            return;\n        }\n\n        this._previousState = this.state;\n        this.state = 'error';\n\n        this._previousStateMessage = this.stateMessage;\n        this.stateMessage = this.invalidEntryMessage;\n\n        this.markForCheck();\n    }\n\n    /** @hidden */\n    private _unsetInvalidEntry(): void {\n        this.state = this._previousState;\n        this._previousState = undefined;\n\n        this.stateMessage = this._previousStateMessage;\n        this._previousStateMessage = undefined;\n\n        this.markForCheck();\n    }\n\n    /** @hidden */\n    private _toDataStream(source: FdpMultiComboboxDataSource<any>): MultiComboBoxDataSource<any> | undefined {\n        if (isDataSource(source)) {\n            return source as MultiComboBoxDataSource<any>;\n        }\n\n        if (Array.isArray(source)) {\n            return new ArrayMultiComboBoxDataSource<any>(source);\n        }\n\n        if (isObservable(source)) {\n            return new ObservableMultiComboBoxDataSource<any>(source);\n        }\n\n        return undefined;\n    }\n\n    /** @hidden */\n    private _initWindowResize(): void {\n        this._getOptionsListWidth();\n\n        if (!this.autoResize) {\n            return;\n        }\n\n        fromEvent(window, 'resize')\n            .pipe(takeUntilDestroyed(this._destroyed))\n            .subscribe(() => this._getOptionsListWidth());\n    }\n\n    /** @hidden */\n    private _getOptionsListWidth(): void {\n        const body = document.body;\n        const rect = (this._element.querySelector('fd-input-group') as HTMLElement).getBoundingClientRect();\n        const scrollBarWidth = body.offsetWidth - body.clientWidth;\n        this.maxWidth = this.autoResize ? window.innerWidth - scrollBarWidth - rect.left : this.minWidth;\n        this.minWidth = rect.width - 2;\n        this.markForCheck();\n    }\n\n    /**\n     * Convert original data to SelectableOptionItems Interface\n     * @hidden\n     */\n    private _convertToOptionItems(items: any[]): SelectableOptionItem[] {\n        const item = items[0];\n\n        const elementTypeIsOptionItem = isSelectableOptionItem(item);\n        if (elementTypeIsOptionItem) {\n            return items as SelectableOptionItem[];\n        }\n\n        const elementTypeIsObject = isJsObject(item);\n        if (elementTypeIsObject) {\n            return this._convertObjectsToOptionItems(items);\n        }\n\n        const elementTypeIsString = isString(item);\n        if (elementTypeIsString) {\n            return this._convertPrimitiveToOptionItems(items);\n        }\n\n        return [];\n    }\n\n    /**\n     * Convert data to SelectableOptionItems Interface\n     * @hidden\n     */\n    private _convertObjectsToOptionItems(items: any[]): SelectableOptionItem[] {\n        if (this.isGroup) {\n            return this._convertObjectsToGroupOptionItems(items);\n        } else if (this.showSecondaryText && this.secondaryKey) {\n            return this._convertObjectsToSecondaryOptionItems(items);\n        } else {\n            return this._convertObjectsToDefaultOptionItems(items);\n        }\n    }\n\n    /**\n     * Convert object[] data to Secondary SelectableOptionItems Interface\n     * @hidden\n     */\n    private _convertObjectsToSecondaryOptionItems<K>(items: K[]): SelectableOptionItem[] {\n        const selectItems: SelectableOptionItem[] = [];\n\n        for (let i = 0; i < items.length; i++) {\n            const value = items[i];\n            selectItems.push({\n                label: this.displayValue(value),\n                id: this.lookupValue(value),\n                secondaryText: this.objectGet(value, this.secondaryKey),\n                value,\n                selected: this.selectedItems?.includes(value) || false\n            });\n        }\n\n        return selectItems;\n    }\n\n    /**\n     * Convert Primitive data(Boolean, String, Number) to SelectableOptionItems Interface\n     * @hidden\n     */\n    private _convertPrimitiveToOptionItems(items: any[]): SelectableOptionItem[] {\n        const selectItems: SelectableOptionItem[] = [];\n        for (let i = 0; i < items.length; i++) {\n            const value = items[i];\n            selectItems.push({\n                label: value,\n                id: this.lookupValue(value),\n                value,\n                selected: this.selectedItems?.includes(value) || false\n            });\n        }\n\n        return selectItems;\n    }\n\n    /**\n     * Convert object[] to SelectableOptionItems Interface (Default)\n     * @hidden\n     */\n    private _convertObjectsToDefaultOptionItems(items: any[]): SelectableOptionItem[] {\n        const selectItems: SelectableOptionItem[] = [];\n\n        for (let i = 0; i < items.length; i++) {\n            const value = items[i];\n            selectItems.push({\n                label: this.displayValue(value),\n                id: this.lookupValue(value),\n                value,\n                selected: this.selectedItems?.includes(value) || false\n            });\n        }\n\n        return selectItems;\n    }\n\n    /**\n     * @hidden\n     * Assign custom templates\n     */\n    private _assignCustomTemplates(): void {\n        this.customTemplates.forEach((template) => {\n            switch (template.name()) {\n                case 'optionItemTemplate':\n                    this.optionItemTemplate = template.templateRef;\n                    break;\n                case 'groupItemTemplate':\n                    this.groupItemTemplate = template.templateRef;\n                    break;\n                case 'secondaryItemTemplate':\n                    this.secondaryItemTemplate = template.templateRef;\n                    break;\n                case 'selectedItemTemplate':\n                    this.selectedItemTemplate = template.templateRef;\n                    break;\n            }\n        });\n    }\n}\n","import { InjectionToken, WritableSignal } from '@angular/core';\nimport { Subject } from 'rxjs';\n\nimport { MobileMode } from '@fundamental-ngx/core/mobile-mode';\nimport { SelectableOptionItem } from '@fundamental-ngx/platform/shared';\n\nexport const MULTICOMBOBOX_COMPONENT = new InjectionToken<string[]>('MultiComboboxInterface');\n\n/**\n * Combobox Interface to have typing and avoid circular dependency between\n * MultiComboboxComponent <==> MultiComboboxMobileComponent\n */\nexport interface MultiComboboxInterface extends MobileMode {\n    _suggestions: SelectableOptionItem[];\n    _selectedSuggestions: SelectableOptionItem[];\n    selectedShown$: WritableSignal<boolean>;\n    openChange: Subject<boolean>;\n\n    moreClicked(): void;\n    dialogApprove(): void;\n    dialogDismiss(backup: SelectableOptionItem[]): void;\n    searchTermChanged(term?: string): void;\n}\n","import { ChangeDetectionStrategy, Component, Inject, OnInit, TemplateRef, ViewChild } from '@angular/core';\n\nimport { CdkScrollable } from '@angular/cdk/overlay';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Nullable, TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport { BarModule } from '@fundamental-ngx/core/bar';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { DialogModule } from '@fundamental-ngx/core/dialog';\nimport { MobileModeBase, MobileModeControl } from '@fundamental-ngx/core/mobile-mode';\nimport { ScrollbarDirective } from '@fundamental-ngx/core/scrollbar';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { SelectableOptionItem } from '@fundamental-ngx/platform/shared';\nimport { MULTICOMBOBOX_COMPONENT, MultiComboboxInterface } from '../../multi-combobox.interface';\n\n@Component({\n    selector: 'fdp-multi-combobox-mobile',\n    templateUrl: './multi-combobox-mobile.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [\n        DialogModule,\n        TitleComponent,\n        TemplateDirective,\n        BarModule,\n        NgTemplateOutlet,\n        ButtonComponent,\n        CdkScrollable,\n        ScrollbarDirective,\n        FdTranslatePipe\n    ]\n})\nexport class MultiComboboxMobileComponent extends MobileModeBase<MultiComboboxInterface> implements OnInit {\n    /** @hidden */\n    @ViewChild('dialogTemplate') dialogTemplate: TemplateRef<any>;\n\n    /** @hidden\n     * For internal usage\n     * Control element, which will be rendered inside dialog.\n     * List element, which will be rendered inside dialog.\n     */\n    childContent: Nullable<{\n        listTemplate: TemplateRef<any>;\n        controlTemplate: TemplateRef<any>;\n    }> = null;\n\n    /** @hidden */\n    selectedShown$ = this._component.selectedShown$;\n\n    /** @hidden */\n    private _selectedBackup: SelectableOptionItem[];\n\n    /** @hidden */\n    constructor(@Inject(MULTICOMBOBOX_COMPONENT) multiComboboxComponent: MultiComboboxInterface) {\n        super(multiComboboxComponent, MobileModeControl.MULTI_COMBOBOX);\n    }\n\n    /** @hidden */\n    ngOnInit(): void {\n        this._listenOnMultiComboboxOpenChange();\n    }\n\n    /** @hidden */\n    showSelected(): void {\n        const isSelectedShown = this.selectedShown$();\n\n        if (isSelectedShown) {\n            this._component.searchTermChanged();\n            this.selectedShown$.set(false);\n            return;\n        }\n\n        this._component.moreClicked();\n    }\n\n    /** @hidden */\n    handleDismiss(): void {\n        this.dialogRef.dismiss();\n        this._component.dialogDismiss(this._selectedBackup);\n    }\n\n    /** @hidden */\n    handleApprove(): void {\n        this.dialogRef.close();\n        this._component.dialogApprove();\n    }\n\n    /** @hidden */\n    private _toggleDialog(open: boolean): void {\n        if (!open) {\n            return;\n        }\n\n        this._selectedBackup = this._component._selectedSuggestions?.length\n            ? [...this._component._selectedSuggestions]\n            : [];\n        if (!this._dialogService.hasOpenDialogs()) {\n            this._open();\n        }\n    }\n\n    /** @hidden */\n    private _listenOnMultiComboboxOpenChange(): void {\n        this._component.openChange\n            .pipe(takeUntilDestroyed(this._destroyRef))\n            .subscribe((isOpen) => this._toggleDialog(isOpen));\n    }\n\n    /** @hidden */\n    private _open(): void {\n        this.dialogRef = this._dialogService.open(this.dialogTemplate, {\n            mobile: true,\n            disablePaddings: true,\n            ...this.dialogConfig,\n            backdropClickCloseable: false,\n            escKeyCloseable: false,\n            container: this._elementRef.nativeElement\n        });\n    }\n}\n","<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\n    <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n        <fd-dialog-header>\n            @if (mobileConfig.title) {\n                <h1 fd-title fd-dialog-title>{{ mobileConfig.title }}</h1>\n            }\n            @if (mobileConfig.hasCloseButton) {\n                <button fd-dialog-close-button [mobile]=\"true\" (click)=\"handleDismiss()\"></button>\n            }\n            <ng-template fdkTemplate=\"subheader\">\n                <div fd-bar-middle>\n                    <fd-bar-element [fullWidth]=\"true\">\n                        <ng-template [ngTemplateOutlet]=\"childContent?.controlTemplate || null\"></ng-template>\n                        @if (selectedShown$()) {\n                            <button\n                                fd-button\n                                glyph=\"multiselect-all\"\n                                fdType=\"emphasized\"\n                                [title]=\"('platformMultiCombobox.mobileShowAllItemsButton' | fdTranslate)()\"\n                                [attr.aria-label]=\"('platformMultiCombobox.mobileShowAllItemsButton' | fdTranslate)()\"\n                                class=\"fd-margin-begin--tiny\"\n                                (click)=\"showSelected()\"\n                            ></button>\n                        } @else {\n                            <button\n                                fd-button\n                                glyph=\"multiselect-all\"\n                                fdType=\"transparent\"\n                                [title]=\"('platformMultiCombobox.mobileShowSelectedItemsButton' | fdTranslate)()\"\n                                [attr.aria-label]=\"\n                                    ('platformMultiCombobox.mobileShowSelectedItemsButton' | fdTranslate)()\n                                \"\n                                class=\"fd-margin-begin--tiny\"\n                                (click)=\"showSelected()\"\n                            ></button>\n                        }\n                    </fd-bar-element>\n                </div>\n            </ng-template>\n        </fd-dialog-header>\n        <fd-dialog-body>\n            <ng-template [ngTemplateOutlet]=\"childContent?.listTemplate || null\"></ng-template>\n        </fd-dialog-body>\n        <fd-dialog-footer>\n            @if (mobileConfig.approveButtonText) {\n                <fd-button-bar fdType=\"emphasized\" [label]=\"mobileConfig.approveButtonText!\" (click)=\"handleApprove()\">\n                </fd-button-bar>\n            }\n            @if (mobileConfig.cancelButtonText) {\n                <fd-button-bar [label]=\"mobileConfig.cancelButtonText!\" (click)=\"handleDismiss()\"> </fd-button-bar>\n            }\n        </fd-dialog-footer>\n    </fd-dialog>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { MultiComboboxMobileComponent } from './multi-combobox/multi-combobox-mobile.component';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n    imports: [MultiComboboxMobileComponent],\n    exports: [MultiComboboxMobileComponent]\n})\nexport class PlatformMultiComboboxMobileModule {}\n","import { A, DOWN_ARROW, ENTER, ESCAPE, SPACE, UP_ARROW } from '@angular/cdk/keycodes';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport {\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    Component,\n    Inject,\n    Injector,\n    OnInit,\n    Optional,\n    TemplateRef,\n    ViewChild,\n    ViewContainerRef,\n    ViewEncapsulation,\n    isDevMode\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FD_FORM_FIELD_CONTROL } from '@fundamental-ngx/cdk/forms';\nimport { DynamicComponentService, KeyUtil, SearchHighlightPipe, warnOnce } from '@fundamental-ngx/cdk/utils';\nimport { CheckboxComponent } from '@fundamental-ngx/core/checkbox';\nimport { ContentDensityObserver, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\nimport { FormControlComponent, FormInputMessageGroupComponent, FormMessageComponent } from '@fundamental-ngx/core/form';\nimport { InputGroupModule } from '@fundamental-ngx/core/input-group';\nimport { ListModule, ListSecondaryDirective } from '@fundamental-ngx/core/list';\nimport { MultiAnnouncerDirective } from '@fundamental-ngx/core/multi-combobox';\nimport { PopoverBodyComponent, PopoverComponent, PopoverControlComponent } from '@fundamental-ngx/core/popover';\nimport { TokenComponent, TokenizerComponent } from '@fundamental-ngx/core/token';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport {\n    DATA_PROVIDERS,\n    DataProvider,\n    MultiComboBoxDataSource,\n    OptionItem,\n    SelectableOptionItem\n} from '@fundamental-ngx/platform/shared';\nimport { shallowEqual } from 'fast-equals';\nimport { AutoCompleteDirective, AutoCompleteEvent } from '../../auto-complete/auto-complete.directive';\nimport { BaseMultiCombobox } from '../commons/base-multi-combobox';\nimport { MultiComboboxMobileComponent } from '../multi-combobox-mobile/multi-combobox/multi-combobox-mobile.component';\nimport { MULTICOMBOBOX_COMPONENT } from '../multi-combobox.interface';\n\nlet deprecationWarningShown = false;\n\n/**\n * This component can work with both string primitives as well as with complex objects. In order\n * to use objects user must provide an unique ID to lookupkey, which will be used in comparing\n * each items of array. It is important to provide lookupkey value as there might be multiple\n * items with same name but different properties which is to be differently identified otherwise\n * it will be treated as same objects.\n */\n\n@Component({\n    selector: 'fdp-multi-combobox',\n    templateUrl: './multi-combobox.component.html',\n    styleUrl: './multi-combobox.component.scss',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    providers: [\n        {\n            provide: FD_FORM_FIELD_CONTROL,\n            useExisting: MultiComboboxComponent,\n            multi: true\n        },\n        contentDensityObserverProviders()\n    ],\n    imports: [\n        NgTemplateOutlet,\n        PopoverComponent,\n        PopoverControlComponent,\n        PopoverBodyComponent,\n        FormInputMessageGroupComponent,\n        InputGroupModule,\n        TokenComponent,\n        TokenizerComponent,\n        FormControlComponent,\n        FormsModule,\n        AutoCompleteDirective,\n        FormMessageComponent,\n        ListModule,\n        CheckboxComponent,\n        NgClass,\n        ListSecondaryDirective,\n        SearchHighlightPipe,\n        FdTranslatePipe,\n        MultiAnnouncerDirective\n    ]\n})\nexport class MultiComboboxComponent extends BaseMultiCombobox implements OnInit, AfterViewInit {\n    /** @hidden */\n    @ViewChild('mobileControlTemplate')\n    mobileControlTemplate: TemplateRef<any>;\n\n    /** @hidden */\n    @ViewChild('listTemplate')\n    declare listTemplate: TemplateRef<any>;\n\n    /** @hidden */\n    @ViewChild(TokenizerComponent)\n    _tokenizer: TokenizerComponent;\n\n    /**\n     * @hidden\n     * List of selected suggestions\n     */\n    _selectedSuggestions: SelectableOptionItem[] = [];\n\n    /** @hidden */\n    constructor(\n        readonly _dynamicComponentService: DynamicComponentService,\n        @Optional() @Inject(DATA_PROVIDERS) private _providers: Map<string, DataProvider<any>>,\n        private readonly _viewContainerRef: ViewContainerRef,\n        private readonly _injector: Injector,\n        readonly contentDensityObserver: ContentDensityObserver\n    ) {\n        super();\n\n        if (!deprecationWarningShown && isDevMode()) {\n            warnOnce(\n                `[DEPRECATION] Platform Multi Combobox component is deprecated since v0.39.0. Please migrate to Core's version.`\n            );\n            deprecationWarningShown = true;\n        }\n    }\n\n    /** @hidden */\n    ngOnInit(): void {\n        super.ngOnInit();\n\n        const providers = this._providers?.size === 0 ? this.multiComboboxConfig.providers : this._providers;\n        // if we have both prefer dataSource\n        if (!this.dataSource && this.entityClass && providers?.has(this.entityClass)) {\n            this.dataSource = new MultiComboBoxDataSource(providers.get(this.entityClass)!);\n        }\n    }\n\n    /** @hidden */\n    ngAfterViewInit(): void {\n        super.ngAfterViewInit();\n\n        if (this.mobile) {\n            this._setUpMobileMode();\n        }\n\n        this._setSelectedSuggestions();\n    }\n\n    /** @hidden */\n    toggleSelection(item: SelectableOptionItem): void {\n        const idx = this._getTokenIndexByIdlOrValue(item);\n\n        if (idx === -1) {\n            this._selectedSuggestions.push(item);\n        } else {\n            this._selectedSuggestions.splice(idx, 1);\n        }\n\n        item.selected = !item.selected;\n\n        this._propagateChange();\n\n        this.detectChanges();\n    }\n\n    /** @hidden */\n    onOptionCheckboxClicked(event: MouseEvent, index: number): void {\n        event.stopPropagation();\n        this._onListElementClicked(event, index);\n        this.inputText = '';\n        this.searchTermChanged('');\n    }\n\n    /** @hidden */\n    onCompleteTerm(event: AutoCompleteEvent): void {\n        if (event.forceClose) {\n            this.toggleSelectionByInputText(event.term);\n            this.close();\n        }\n    }\n\n    /** @hidden */\n    toggleSelectionByInputText(text = this.inputText): void {\n        const item = this._getSelectItemByInputValue(text);\n        if (item) {\n            this.toggleSelection(item);\n            this.inputText = '';\n        }\n    }\n\n    /**\n     * @hidden\n     * Method that selects all possible options.\n     * *select* attribute – if *true* select all, if *false* unselect all\n     * */\n    handleSelectAllItems(select: boolean): void {\n        this._flatSuggestions.forEach((item) => (item.selected = select));\n        this._selectedSuggestions = select ? [...this._flatSuggestions] : [];\n        this._rangeSelector.reset();\n\n        this._propagateChange();\n    }\n\n    /** @hidden */\n    navigateByTokens(event: KeyboardEvent): void {\n        if (KeyUtil.isKeyCode(event, [DOWN_ARROW, UP_ARROW]) && this.isOpen) {\n            this.listComponent.items?.first.focus();\n        }\n    }\n\n    /** @hidden */\n    removeToken(token: SelectableOptionItem, event?: MouseEvent): void {\n        if (event) {\n            event.preventDefault();\n        }\n        this.toggleSelection(token);\n        this._rangeSelector.reset();\n    }\n\n    /** @hidden */\n    moreClicked(): void {\n        this._suggestions = this.isGroup\n            ? this._convertObjectsToGroupOptionItems(this._selectedSuggestions.map(({ value }) => value))\n            : this._suggestions.filter((value) =>\n                  this._selectedSuggestions.some((item) => shallowEqual(item.value, value.value))\n              );\n\n        this.showList(true);\n        this.selectedShown$.set(true);\n        this.markForCheck();\n    }\n\n    /** @hidden */\n    onBlur(event: FocusEvent): void {\n        const target = event.relatedTarget as HTMLElement;\n        if (target) {\n            const isList = !!target.closest('.fdp-multi-combobox__list-container');\n            if (isList) {\n                return;\n            }\n            if (\n                this._suggestions?.length === 1 &&\n                this._suggestions[0].label === this.inputText &&\n                !this._suggestions[0].selected\n            ) {\n                this.toggleSelection(this._suggestions[0]);\n            }\n            this.showList(false);\n            this.inputText = '';\n        }\n    }\n\n    /**\n     * @hidden\n     * Method to set input text as item label.\n     */\n    setInputTextFromOptionItem(item: OptionItem): void {\n        this.inputText = item.label;\n\n        if (this.mobile) {\n            return;\n        }\n\n        this.showList(false);\n    }\n\n    /** @hidden */\n    onItemKeyDownHandler(event: KeyboardEvent): void {\n        if (KeyUtil.isKeyCode(event, ESCAPE)) {\n            this._focusToSearchField();\n        } else if ((event.ctrlKey || event.metaKey) && event.shiftKey && KeyUtil.isKeyCode(event, A)) {\n            event.preventDefault();\n            this.handleSelectAllItems(false);\n        } else if ((event.ctrlKey || event.metaKey) && KeyUtil.isKeyCode(event, A)) {\n            event.preventDefault();\n            this.handleSelectAllItems(true);\n        } else if (KeyUtil.isKeyCode(event, ENTER)) {\n            if (!this.mobile) {\n                this.close();\n            }\n            this._rangeSelector.reset();\n        } else if (KeyUtil.isKeyCode(event, SPACE)) {\n            this._rangeSelector.reset();\n        }\n    }\n\n    /** @hidden */\n    onOptionClicked(event: MouseEvent, index: number): void {\n        this._onListElementClicked(event, index);\n        this.close();\n    }\n\n    /** @hidden */\n    _addOnClicked(event: Event): void {\n        this.addOnButtonClicked.emit(event);\n        if (!this.mobile) {\n            this.onPrimaryButtonClick(this.isOpen);\n        }\n    }\n\n    /** @hidden Handle dialog dismissing, closes popover and sets backup data. */\n    dialogDismiss(backup: SelectableOptionItem[]): void {\n        this._selectedSuggestions = [...backup];\n        this.inputText = '';\n        this.showList(false);\n        this.selectedShown$.set(false);\n    }\n\n    /** @hidden Handle dialog approval, closes popover and propagates data changes. */\n    dialogApprove(): void {\n        this.inputText = '';\n        this.showList(false);\n        this._propagateChange(true);\n    }\n\n    /**\n     * @hidden\n     * applying range selection. Note, that this function will be invoked after combobox item's value has been changed\n     */\n    private _onListElementClicked(event: MouseEvent, index: number): void {\n        // value has been changed at this point, so it can be safely used\n        const selectionState = this._suggestions[index].selected;\n        this._rangeSelector.onRangeElementToggled(index, event);\n        const toRemoveSet = new Set();\n        this._rangeSelector.applyValueToEachInRange((idx) => {\n            const current = this._suggestions[idx];\n            if (current.selected !== selectionState) {\n                if (current.selected) {\n                    // removing from \"_selectedSuggestions\" list\n                    toRemoveSet.add(current.value);\n                } else {\n                    // adding current item to \"_selectedSuggestions\"\n                    this._selectedSuggestions.push(current);\n                }\n                current.selected = selectionState;\n            }\n        });\n        this._selectedSuggestions = this._selectedSuggestions.filter((s) => !toRemoveSet.has(s.value));\n        // selected items should be displayed in the same order as options\n        const valueIndexes = new Map<any, number>(this._suggestions.map((s, i) => [s.value, i]));\n        this._selectedSuggestions.sort((a, b) => valueIndexes.get(a.value)! - valueIndexes.get(b.value)!);\n        this._tokenizer.onResize();\n\n        this._tokenizer.tokenizerInnerEl.nativeElement.scrollLeft =\n            this._tokenizer.tokenizerInnerEl.nativeElement.scrollWidth;\n    }\n\n    /** @hidden */\n    private _getTokenIndexByIdlOrValue(item: SelectableOptionItem): number {\n        return this._selectedSuggestions.findIndex(\n            (token) => token.id === item.id || shallowEqual(token.value, item.value)\n        );\n    }\n\n    /** @hidden */\n    private _mapAndUpdateModel(): void {\n        const selectedItems = this._selectedSuggestions.map(({ value }) => value);\n\n        // setting value, it will call setValue()\n        this.value = selectedItems;\n    }\n\n    /** @hidden */\n    private _propagateChange(emitInMobile?: boolean): void {\n        if (!this.mobile || emitInMobile) {\n            this.onChange(this._selectedSuggestions);\n            this._mapAndUpdateModel();\n        }\n    }\n\n    /** @hidden */\n    private async _setUpMobileMode(): Promise<void> {\n        const injector = Injector.create({\n            providers: [{ provide: MULTICOMBOBOX_COMPONENT, useValue: this }],\n            parent: this._injector\n        });\n\n        this._dynamicComponentService.createDynamicComponent(\n            { listTemplate: this.listTemplate, controlTemplate: this.mobileControlTemplate },\n            MultiComboboxMobileComponent,\n            {\n                containerRef: this._viewContainerRef\n            },\n            { injector }\n        );\n    }\n}\n","<div class=\"fdp-multi-combobox\">\n    @if (mobile) {\n        <ng-template [ngTemplateOutlet]=\"controlTemplate\"></ng-template>\n    } @else {\n        <fd-popover\n            additionalBodyClass=\"fd-popover-custom-list fdp-multi-combobox__list-container\"\n            (isOpenChange)=\"popoverOpenChangeHandle($event)\"\n            [isOpen]=\"isOpen\"\n            [triggers]=\"[]\"\n            [disabled]=\"disabled\"\n            [fillControlMode]=\"fillControlMode\"\n        >\n            <fd-popover-control>\n                <ng-template [ngTemplateOutlet]=\"controlTemplate\"></ng-template>\n            </fd-popover-control>\n            <fd-popover-body [style.width.%]=\"!autoResize && 100\">\n                <ng-template [ngTemplateOutlet]=\"listTemplate\"></ng-template>\n                <ng-content></ng-content>\n            </fd-popover-body>\n        </fd-popover>\n    }\n</div>\n<ng-template #controlTemplate>\n    <fd-form-input-message-group>\n        <fd-input-group\n            [id]=\"id + '-input-group-container'\"\n            class=\"fdp-multi-combobox-input-group-custom\"\n            [state]=\"state\"\n            [buttonFocusable]=\"buttonFocusable\"\n            [button]=\"!readonly\"\n            [glyph]=\"!readonly ? 'navigation-down-arrow' : ' '\"\n            [isControl]=\"true\"\n            [disabled]=\"disabled || readonly\"\n            [isExpanded]=\"!mobile && isOpen && _suggestions.length > 0\"\n            [attr.aria-disabled]=\"disabled || readonly\"\n            [attr.aria-readonly]=\"readonly\"\n            [glyphAriaLabel]=\"ariaLabel || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)()\"\n            [iconTitle]=\"addonIconTitle || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)()\"\n            (addOnButtonClicked)=\"_addOnClicked($event)\"\n            (click)=\"mobile && !isOpen && onPrimaryButtonClick(false)\"\n            (keydown)=\"navigateByTokens($event)\"\n        >\n            <fd-tokenizer\n                #tokenizer\n                [compactCollapse]=\"true\"\n                [tokenizerFocusable]=\"false\"\n                [showOverflowPopover]=\"false\"\n                class=\"fdp-multi-combobox-tokenizer-custom\"\n                (moreClickedEvent)=\"moreClicked()\"\n                fdMultiAnnouncer\n                [multiAnnouncerOptions]=\"_suggestions\"\n            >\n                @for (token of _selectedSuggestions; track token) {\n                    <fd-token [readOnly]=\"disabled\" (onCloseClick)=\"removeToken(token, $event)\">\n                        {{ token.label }}\n                    </fd-token>\n                }\n                <input\n                    #searchInputElement\n                    fdp-auto-complete\n                    (onComplete)=\"onCompleteTerm($event)\"\n                    [options]=\"_suggestions\"\n                    [inputText]=\"inputText\"\n                    [mobile]=\"mobile\"\n                    type=\"text\"\n                    role=\"combobox\"\n                    autocomplete=\"off\"\n                    [ariaLabel]=\"ariaLabel || ('coreMultiComboBox.multiComboBoxAriaLabel' | fdTranslate)()\"\n                    [attr.aria-labelledby]=\"ariaLabelledBy\"\n                    [attr.aria-autocomplete]=\"autoComplete && !mobile ? 'list' : null\"\n                    [attr.aria-owns]=\"autoComplete && !mobile ? id + '-result' : null\"\n                    [attr.aria-haspopup]=\"autoComplete && !mobile\"\n                    fd-form-control\n                    fd-input-group-input\n                    tabindex=\"0\"\n                    [id]=\"id\"\n                    [name]=\"name\"\n                    (keydown)=\"onInputKeydownHandler($event)\"\n                    [disabled]=\"disabled\"\n                    [(ngModel)]=\"inputText\"\n                    (ngModelChange)=\"searchTermChanged()\"\n                    [attr.placeholder]=\"_selectedSuggestions.length ? null : placeholder\"\n                    (focus)=\"onTouched(); tokenizer._showAllTokens()\"\n                    (blur)=\"!mobile && onBlur($event); tokenizer._hideTokens()\"\n                    [attr.aria-expanded]=\"isOpen\"\n                    [readonly]=\"readonly\"\n                    [attr.aria-readonly]=\"readonly\"\n                    [attr.aria-required]=\"required\"\n                    class=\"fd-tokenizer__input fd-input-group__input\"\n                />\n            </fd-tokenizer>\n        </fd-input-group>\n        @if (mobile && isOpen ? false : !!stateMessage) {\n            <fd-form-message [type]=\"state\" [innerHtml]=\"stateMessage\"></fd-form-message>\n        }\n    </fd-form-input-message-group>\n</ng-template>\n<ng-template #mobileControlTemplate>\n    <fd-input-group\n        [id]=\"id + '-input-group-container'\"\n        class=\"fdp-multi-combobox-input-group-custom\"\n        [state]=\"state\"\n        [buttonFocusable]=\"false\"\n        [isControl]=\"true\"\n        [disabled]=\"disabled || readonly\"\n        [isExpanded]=\"!mobile && isOpen && _suggestions.length > 0\"\n        [attr.aria-disabled]=\"disabled || readonly\"\n        [attr.aria-readonly]=\"readonly\"\n        [glyphAriaLabel]=\"ariaLabel\"\n    >\n        <input\n            fdp-auto-complete\n            (onComplete)=\"onCompleteTerm($event)\"\n            [options]=\"_suggestions\"\n            [inputText]=\"inputText\"\n            [mobile]=\"mobile\"\n            type=\"text\"\n            role=\"combobox\"\n            autocomplete=\"off\"\n            [ariaLabel]=\"ariaLabel || ('coreMultiComboBox.multiComboBoxAriaLabel' | fdTranslate)()\"\n            [attr.aria-labelledby]=\"ariaLabelledBy\"\n            [attr.aria-autocomplete]=\"autoComplete && !mobile ? 'list' : null\"\n            [attr.aria-owns]=\"autoComplete && !mobile ? id + '-result' : null\"\n            [attr.aria-haspopup]=\"autoComplete && !mobile\"\n            fd-form-control\n            fd-input-group-input\n            tabindex=\"0\"\n            [id]=\"id\"\n            [name]=\"name\"\n            (keydown)=\"onInputKeydownHandler($event)\"\n            [disabled]=\"disabled\"\n            [(ngModel)]=\"inputText\"\n            (ngModelChange)=\"searchTermChanged()\"\n            [placeholder]=\"placeholder\"\n            (focus)=\"onTouched()\"\n            (blur)=\"!mobile && onBlur($event)\"\n            [attr.aria-expanded]=\"isOpen\"\n            [readonly]=\"readonly\"\n            [attr.aria-readonly]=\"readonly\"\n        />\n    </fd-input-group>\n</ng-template>\n<ng-template #listTemplate>\n    <ul\n        fd-list\n        (focusEscapeList)=\"handleListFocusEscape($event)\"\n        [dropdownMode]=\"true\"\n        class=\"fdp-multi-combobox__list fd-list--multi-input\"\n        [hasMessage]=\"!!stateMessage || (!!advancedStateMessage?.hasErrors && !!advancedStateMessage?.template)\"\n        [id]=\"id + '-result'\"\n        role=\"listbox\"\n        [style.max-height]=\"!mobile && maxHeight\"\n        [style.min-width]=\"!mobile && minWidth + 'px'\"\n        [style.max-width]=\"autoResize && maxWidth + 'px'\"\n        [attr.aria-labelledby]=\"id + '-search'\"\n        aria-multiselectable=\"true\"\n        (keydown.tab)=\"close()\"\n        (keydown.escape)=\"close()\"\n    >\n        @if (stateMessage) {\n            <li\n                [attr.aria-label]=\"stateMessage\"\n                fd-list-message\n                tabindex=\"-1\"\n                role=\"presentation\"\n                [type]=\"state || 'default'\"\n                [innerHtml]=\"stateMessage\"\n            ></li>\n        }\n        @if (advancedStateMessage?.hasErrors && advancedStateMessage?.template) {\n            <li fd-list-message tabindex=\"-1\" role=\"presentation\" [type]=\"state || 'default'\">\n                <ng-template [ngTemplateOutlet]=\"advancedStateMessage!.template!\"></ng-template>\n            </li>\n        }\n        <ng-content></ng-content>\n        @if (isGroup) {\n            @for (group of _suggestions; track group) {\n                @if (!groupItemTemplate) {\n                    <label fd-list-item fd-list-group-header role=\"group\">\n                        <span fd-list-title>{{ group.label }}</span>\n                    </label>\n                }\n                @if (groupItemTemplate) {\n                    <ng-template\n                        [ngTemplateOutlet]=\"groupItemTemplate\"\n                        [ngTemplateOutletContext]=\"{ $implicit: { label: group.label } }\"\n                    ></ng-template>\n                }\n                @for (optionItem of group.children; track optionItem) {\n                    <li\n                        fd-list-item\n                        role=\"option\"\n                        (click)=\"!mobile && onOptionClicked($event, $index)\"\n                        (keyDown)=\"onItemKeyDownHandler($event)\"\n                        [selected]=\"!!optionItem.selected\"\n                    >\n                        <fd-checkbox\n                            (click)=\"onOptionCheckboxClicked($event, $index)\"\n                            (ngModelChange)=\"toggleSelection(optionItem)\"\n                            [ngModel]=\"optionItem.selected\"\n                        >\n                        </fd-checkbox>\n                        <ng-template\n                            [ngTemplateOutlet]=\"listItem\"\n                            [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: $index }\"\n                        ></ng-template>\n                    </li>\n                }\n            }\n        } @else {\n            @for (optionItem of _suggestions; track optionItem) {\n                <li\n                    fd-list-item\n                    role=\"option\"\n                    (click)=\"!mobile && onOptionClicked($event, $index)\"\n                    (keydown)=\"onItemKeyDownHandler($event)\"\n                    [selected]=\"!!optionItem.selected\"\n                >\n                    <fd-checkbox\n                        (click)=\"onOptionCheckboxClicked($event, $index)\"\n                        (ngModelChange)=\"toggleSelection(optionItem)\"\n                        [ngModel]=\"optionItem.selected\"\n                    >\n                    </fd-checkbox>\n                    <ng-template\n                        [ngTemplateOutlet]=\"listItem\"\n                        [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: $index }\"\n                    ></ng-template>\n                </li>\n            }\n        }\n    </ul>\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #listItem>\n    @if (optionItem.selected && !!selectedItemTemplate) {\n        <ng-template\n            [ngTemplateOutlet]=\"selectedItemTemplate\"\n            [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n        ></ng-template>\n    }\n    @if (!(optionItem.selected && selectedItemTemplate)) {\n        <ng-template\n            [ngTemplateOutlet]=\"optionItemSource\"\n            [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: index }\"\n        ></ng-template>\n        <ng-template\n            [ngTemplateOutlet]=\"secondaryTextSource\"\n            [ngTemplateOutletContext]=\"{ optionItem: optionItem }\"\n        ></ng-template>\n    }\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #optionItemSource>\n    @if (!optionItemTemplate) {\n        <span\n            fd-list-title\n            [attr.title]=\"optionItem.label\"\n            [innerHTML]=\"optionItem.label | highlight: inputText\"\n        ></span>\n    } @else {\n        <ng-template\n            [ngTemplateOutlet]=\"optionItemTemplate\"\n            [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n        ></ng-template>\n    }\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" #secondaryTextSource>\n    @if (showSecondaryText) {\n        @if (!secondaryItemTemplate) {\n            <span\n                [style.text-align]=\"secondaryTextAlignment\"\n                fd-list-secondary\n                [attr.title]=\"optionItem.secondaryText\"\n                [innerHTML]=\"optionItem.secondaryText | highlight: inputText\"\n            ></span>\n        } @else {\n            <ng-template\n                [ngTemplateOutlet]=\"secondaryItemTemplate\"\n                [ngTemplateOutletContext]=\"{ $implicit: optionItem.value }\"\n            ></ng-template>\n        }\n    }\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { MultiComboboxComponent } from './multi-combobox/multi-combobox.component';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n    imports: [MultiComboboxComponent],\n    exports: [MultiComboboxComponent]\n})\nexport class PlatformMultiComboboxModule {}\n","import { NgModule } from '@angular/core';\n\nimport { SelectComponent } from './select/select.component';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n    imports: [SelectComponent],\n    exports: [SelectComponent]\n})\nexport class PlatformSelectModule {}\n","import { Injectable } from '@angular/core';\n\nimport { ContentDensity } from '@fundamental-ngx/cdk/utils';\n\n/**\n * Default options for platform step input\n */\n\n@Injectable({ providedIn: 'root' })\nexport class StepInputConfig {\n    /**\n     * ARIA label for increment button\n     */\n    incrementLabel = 'Increment';\n\n    /**\n     * ARIA label for decrement button\n     */\n    decrementLabel = 'Decrement';\n\n    /**\n     * Content Density of element. 'cozy' | 'compact'\n     */\n    contentDensity: ContentDensity;\n}\n","export const addAndCutFloatingNumberDistortion = (value: number | null, step: number): number => {\n    value = value || 0;\n    const stepDecimals = `${step}`.split('.')[1];\n    const valueDecimals = `${value}`.split('.')[1];\n    const stepDecimalsLength = stepDecimals ? stepDecimals.length : 0;\n    const valueDecimalsLength = valueDecimals ? valueDecimals.length : 0;\n    const longestDecimal = Math.max(valueDecimalsLength, stepDecimalsLength);\n\n    return Number((value + step).toFixed(longestDecimal));\n};\n\nexport const getNumberDecimalLength = (value: number): number => {\n    const numberStr = (value || 0).toString();\n    return (numberStr.split('.')[0] || '').length;\n};\n","import { computed, Directive, EventEmitter, inject, Input, OnInit, Output, Renderer2, signal } from '@angular/core';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Nullable, RtlService } from '@fundamental-ngx/cdk/utils';\nimport { BaseInput } from '@fundamental-ngx/platform/shared';\nimport { StepInputConfig } from './step-input.config';\nimport { addAndCutFloatingNumberDistortion, getNumberDecimalLength } from './step-input.util';\n\n/** Change event object emitted by Platform Step Input component */\nexport class StepInputChangeEvent<T extends StepInputComponent = StepInputComponent, K = number> {\n    /**\n     * Step input selection change event\n     * @param source Step input component\n     * @param payload Selected value\n     */\n    constructor(\n        /** The source Step Input of the event. */\n        public source: T,\n        /** The new value of a control. */\n        public payload: K\n    ) {}\n}\n\nexport enum StepInputAlign {\n    Left = 'left',\n    Center = 'center',\n    Right = 'right'\n}\n\nexport type StepInputStepFunctionAction = 'increase' | 'decrease';\nexport type StepInputStepFunction = (value: number, action: StepInputStepFunctionAction) => number;\n\nconst ALIGN_INPUT_OPTIONS_LIST = [StepInputAlign.Left, StepInputAlign.Center, StepInputAlign.Right];\n\n/**\n * StepInputComponent is a base abstract class that should be used\n * to create type specific StepInput components such as number, money, unitOfMeasure\n * This holds base Step Input functionality that can be abstracted\n */\n@Directive()\nexport abstract class StepInputComponent extends BaseInput implements OnInit {\n    /** Create valueChange event */\n    abstract createChangeEvent(value: number): StepInputChangeEvent;\n\n    /** Format value for view presentation */\n    abstract formatValue(value: number | null): string;\n\n    /** Format value for \"in focus\" mode */\n    abstract formatValueInFocusMode(value: number): string;\n\n    /** Parse value entered \"in focus\" mode */\n    abstract parseValueInFocusMode(value: string): number | null;\n    /** Sets input value */\n    @Input()\n    set value(value: Nullable<number>) {\n        if (value !== this._value) {\n            super.setValue(value);\n            this._calculateCanDecrementIncrement();\n        }\n    }\n    get value(): Nullable<number> {\n        return super.getValue();\n    }\n\n    /** Sets minimum value boundary */\n    @Input()\n    set min(min: number) {\n        this._min = !isNaN(min) ? min : -Number.MAX_VALUE;\n        this._calculateCanDecrement();\n    }\n    get min(): number {\n        return this._min;\n    }\n\n    /** Sets maximum value boundary */\n    @Input()\n    set max(max: number) {\n        this._max = !isNaN(max) ? max : Number.MAX_VALUE;\n        this._calculateCanIncrement();\n    }\n    get max(): number {\n        return this._max;\n    }\n\n    /** Sets input step value */\n    @Input()\n    set step(step: number) {\n        this._checkAndThrowErrorIfStepDoesntMatchPrecision(this.precision, step);\n        this._step = step;\n        this._calculateCanDecrementIncrement();\n    }\n    get step(): number {\n        return this._step;\n    }\n\n    /** Custom function to calculate step dynamically */\n    @Input()\n    set stepFn(stepFn: StepInputStepFunction) {\n        this._stepFn = stepFn;\n        this._calculateCanDecrementIncrement();\n    }\n\n    /** Number of digits after the decimal point */\n    @Input()\n    set precision(precision: number) {\n        this._checkAndThrowErrorIfStepDoesntMatchPrecision(precision, this.step);\n        this._precision = precision;\n    }\n    get precision(): number {\n        return this._precision;\n    }\n\n    /** Sets largeStep multiplier */\n    @Input()\n    largerStep = 2;\n\n    /** Hides -/+ icons and shows labels */\n    @Input()\n    showLabels = false;\n\n    /** Horizontally aligns value inside input */\n    @Input()\n    set align(align: StepInputAlign | null) {\n        this._align$.set(align);\n    }\n    get align(): StepInputAlign | null {\n        return this._align$();\n    }\n\n    /**\n     * ARIA label for increment button\n     */\n    @Input()\n    incrementLabel: string = inject(StepInputConfig).incrementLabel;\n\n    /**\n     * ARIA label for decrement button\n     */\n    @Input()\n    decrementLabel: string = inject(StepInputConfig).decrementLabel;\n\n    /** Emits new value when control value has changed */\n    @Output()\n    valueChange = new EventEmitter<StepInputChangeEvent>();\n\n    /** @hidden */\n    lastEmittedValue: number;\n\n    /** @hidden */\n    canIncrement = true;\n\n    /** @hidden */\n    canDecrement = true;\n\n    /** @hidden\n     * Indicates if control has an error\n     */\n    isErrorState = false;\n\n    /** @hidden */\n    get canChangeValue(): boolean {\n        return !(this.disabled || !this.editable);\n    }\n\n    /** @hidden */\n    readonly _align$ = signal<StepInputAlign | null>(null);\n\n    /** @hidden */\n    readonly _textAlign$ = computed(() => {\n        const align = this._align$();\n\n        const isRtl = this._rtlService?.rtl() ?? false;\n\n        if (!ALIGN_INPUT_OPTIONS_LIST.includes(align!)) {\n            return null;\n        }\n        if (isRtl && align === StepInputAlign.Left) {\n            return StepInputAlign.Right;\n        }\n        if (isRtl && align === StepInputAlign.Right) {\n            return StepInputAlign.Left;\n        }\n        return align;\n    });\n\n    /** @hidden */\n    private _max: number = Number.MAX_VALUE;\n\n    /** @hidden */\n    private _min: number = -Number.MAX_VALUE;\n\n    /** @hidden */\n    private _step = 1;\n\n    /** @hidden */\n    private _stepFn: StepInputStepFunction;\n\n    /** @hidden */\n    private _precision: number;\n\n    /** @hidden */\n    private _pendingEnteredValue: number | Error | null = null;\n\n    /** @hidden */\n    private get _currentValue(): number | null {\n        const pendingValue = this._pendingEnteredValue;\n\n        if (pendingValue instanceof Error) {\n            return null;\n        }\n\n        if (pendingValue === null) {\n            return this._value;\n        }\n\n        return pendingValue;\n    }\n    /** @hidden */\n    private readonly _renderer = inject(Renderer2);\n\n    /** @hidden */\n    private readonly _rtlService = inject(RtlService, { optional: true });\n\n    /** @hidden */\n    ngOnInit(): void {\n        super.ngOnInit();\n\n        this._calculateCanDecrementIncrement();\n\n        this._updateViewValue();\n\n        this.lastEmittedValue = this._value;\n\n        this._listenToFormErrorState();\n    }\n\n    /** @hidden\n     * Override writeValue method to keep input view value up to date\n     */\n    writeValue(value: number): void {\n        super.writeValue(value);\n        this._updateViewValue();\n        this._resetPendingEnteredValue();\n    }\n\n    /** Increase value */\n    increase(step = this._getStepValueForIncrease()): void {\n        if (!this.canIncrement) {\n            return;\n        }\n        const value = addAndCutFloatingNumberDistortion(this._currentValue, step);\n        this.value = this._validateValueByLimits(value);\n        this._emitChangedValue();\n    }\n\n    /** Decrease value */\n    decrease(step = this._getStepValueForDecrease()): void {\n        if (!this.canDecrement) {\n            return;\n        }\n        const value = addAndCutFloatingNumberDistortion(this._currentValue, -step);\n        this.value = this._validateValueByLimits(value);\n        this._emitChangedValue();\n    }\n\n    /** Increase value by large step */\n    largeStepIncrease(): void {\n        const step = this._getStepValueForIncrease() * this.largerStep;\n        this.increase(step);\n    }\n\n    /** Decrease value by large step */\n    largeStepDecrease(): void {\n        const step = this._getStepValueForDecrease() * this.largerStep;\n        this.decrease(step);\n    }\n\n    /** @hidden\n     * catch value during entering from view.\n     */\n    onEnterValue(value: string): void {\n        let pendingValue = this.parseValueInFocusMode(value);\n\n        if (pendingValue !== null) {\n            pendingValue = this._validateValueByLimits(pendingValue);\n        }\n\n        // could not parse value, value is invalid\n        if (pendingValue === null) {\n            this._setPendingEnteredValue(new Error('value is invalid'));\n        } else {\n            this._setPendingEnteredValue(pendingValue);\n        }\n    }\n\n    /** @hidden\n     * Commit entered value from view.\n     */\n    commitEnteredValue(): void {\n        const newValue = this._currentValue;\n\n        const needToUpdateView = this._value === newValue;\n\n        this.value = newValue;\n\n        if (needToUpdateView) {\n            this._updateViewValue();\n        }\n\n        if (this._value !== this.lastEmittedValue) {\n            this._emitChangedValue();\n        }\n    }\n\n    /** @hidden\n     * Indicates when input gets focused\n     */\n    onFocus(): void {\n        super._onFocusChanged(true);\n        // When focus happens by \"Tab\" key an input field value gets selected by default.\n        // In cases when new_formatted_value !== previous_value the selection gets lost.\n        // So it's needed to track selection before new value rendering and restore it.\n        const { selectionStart, selectionEnd } = this._getValueSelection();\n        this._updateViewValue();\n        if (selectionEnd - selectionStart > 0) {\n            this._setValueSelection(selectionStart, selectionEnd);\n        }\n    }\n\n    /** @hidden\n     * Indicates when input loses focus\n     */\n    onBlur(): void {\n        super._onFocusChanged(false);\n        this._updateViewValue();\n    }\n\n    /** @hidden */\n    private _listenToFormErrorState(): void {\n        this.stateChanges\n            .asObservable()\n            .pipe(takeUntilDestroyed(this._destroyed))\n            .subscribe(() => {\n                const oldValue = this.isErrorState;\n                this.isErrorState = this.state === 'error';\n                if (this.isErrorState !== oldValue) {\n                    this.markForCheck();\n                }\n            });\n    }\n\n    /** @hidden */\n    private _emitChangedValue(): void {\n        const value = this._value;\n        this.lastEmittedValue = value;\n        this.valueChange.emit(this.createChangeEvent(value));\n    }\n\n    /** @hidden */\n    private _getStepValueForIncrease(): number {\n        return this._getStepValue('increase');\n    }\n\n    /** @hidden */\n    private _getStepValueForDecrease(): number {\n        return this._getStepValue('decrease');\n    }\n\n    /** @hidden\n     * Get step value based either on \"stepFn\" or \"step\"\n     */\n    private _getStepValue(action: StepInputStepFunctionAction): number {\n        // steFn has precedence\n        if (typeof this._stepFn === 'function') {\n            return this._stepFn(this._currentValue ?? this.min, action);\n        }\n        return this.step;\n    }\n\n    /** @hidden */\n    private _updateViewValue(): void {\n        const formatted = this._formatValue();\n        this._renderValue(formatted);\n    }\n\n    /** @hidden */\n    private _formatValue(value = this._value): string {\n        if (this.focused) {\n            return this.formatValueInFocusMode(value);\n        }\n        return this.formatValue(value);\n    }\n\n    /** @hidden */\n    private _renderValue(value: string): void {\n        const inputEl = this._getInputNativeElement();\n        this._renderer.setProperty(inputEl, 'value', value);\n    }\n\n    /** @hidden */\n    private _getInputNativeElement(): HTMLInputElement | null {\n        return this._elementRef.nativeElement as HTMLInputElement | null;\n    }\n\n    /** @hidden */\n    private _getValueSelection(): { selectionStart: number; selectionEnd: number } {\n        const inputEl = this._getInputNativeElement();\n        const selectionStart = inputEl?.selectionStart || 0;\n        const selectionEnd = inputEl?.selectionEnd || 0;\n        return { selectionStart, selectionEnd };\n    }\n\n    /** @hidden */\n    private _setValueSelection(selectionStart: number, selectionEnd: number): void {\n        const inputEl = this._getInputNativeElement();\n        if (!inputEl) {\n            return;\n        }\n        inputEl.setSelectionRange(selectionStart, selectionEnd);\n    }\n\n    /** @hidden */\n    private _calculateCanIncrement(): void {\n        const step = this._getStepValueForIncrease();\n        this.canIncrement = (this._value || 0) + step <= this._max;\n    }\n\n    /** @hidden */\n    private _calculateCanDecrement(): void {\n        const step = this._getStepValueForDecrease();\n        this.canDecrement = (this._value || 0) - step >= this._min;\n    }\n\n    /** @hidden */\n    private _calculateCanDecrementIncrement(): void {\n        this._calculateCanDecrement();\n        this._calculateCanIncrement();\n    }\n\n    /** @hidden */\n    private _validateValueByLimits(value: number): number {\n        return Math.min(Math.max(value, this._min), this._max);\n    }\n\n    /** @hidden */\n    private _checkAndThrowErrorIfStepDoesntMatchPrecision(precision: number, step: number): void {\n        // Check if \"precision\" is valid comparing to \"step\"\n        const stepDecimalLength = getNumberDecimalLength(step);\n        const precisionDecimalLength = getNumberDecimalLength(precision);\n        if (stepDecimalLength > precisionDecimalLength) {\n            throw Error(\n                `Step input: The value of step property can not contain more digits after the decimal point than what is set to the precision property`\n            );\n        }\n    }\n\n    /** @hidden */\n    private _setPendingEnteredValue(value: number | Error): void {\n        this._pendingEnteredValue = value;\n    }\n\n    /** @hidden */\n    private _resetPendingEnteredValue(): void {\n        this._pendingEnteredValue = null;\n    }\n}\n","import { DOWN_ARROW, PAGE_DOWN, PAGE_UP, UP_ARROW } from '@angular/cdk/keycodes';\nimport { Directive, HostListener, SkipSelf } from '@angular/core';\n\nimport { KeyUtil } from '@fundamental-ngx/cdk/utils';\nimport { StepInputComponent } from './base.step-input';\n\n/**\n * This directive is intendant to be a bridge between input control and BaseStepInput Component.\n */\n@Directive({\n    selector: '[fdpStepInputControl]',\n    standalone: true\n})\nexport class StepInputControlDirective {\n    /** @hidden */\n    constructor(@SkipSelf() private stepInput: StepInputComponent) {}\n\n    /**\n     * @hidden\n     * Handle \"input\" event to keep track of what user is entering\n     */\n    @HostListener('input', ['$event'])\n    onInput(event: Event): void {\n        if (!this.stepInput.canChangeValue) {\n            return;\n        }\n\n        const value: string = ((event.target as HTMLInputElement).value || '').trim();\n        this.stepInput.onEnterValue(value);\n    }\n\n    /**\n     * @hidden\n     * Handle \"change\" event to commit entered value\n     */\n    @HostListener('change')\n    onChange(): void {\n        if (!this.stepInput.canChangeValue) {\n            return;\n        }\n        this.stepInput.commitEnteredValue();\n    }\n\n    /**\n     * @hidden\n     * Handle \"focus\" event\n     */\n    @HostListener('focus')\n    onFocus(): void {\n        this.stepInput.onFocus();\n    }\n\n    /**\n     * @hidden\n     * Handle \"blur\" event\n     */\n    @HostListener('blur')\n    onBlur(): void {\n        this.stepInput.onBlur();\n    }\n\n    /**\n     * @hidden\n     * Handle \"keydown\" event\n     */\n    @HostListener('keydown', ['$event'])\n    onKeyDown(event: KeyboardEvent): void {\n        if (!this.stepInput.canChangeValue) {\n            return;\n        }\n        if (KeyUtil.isKeyCode(event, UP_ARROW)) {\n            this.stepInput.increase();\n            this._muteEvent(event);\n        }\n        if (KeyUtil.isKeyCode(event, DOWN_ARROW)) {\n            this.stepInput.decrease();\n            this._muteEvent(event);\n        }\n        if (KeyUtil.isKeyCode(event, PAGE_UP)) {\n            this.stepInput.largeStepIncrease();\n            this._muteEvent(event);\n        }\n        if (KeyUtil.isKeyCode(event, PAGE_DOWN)) {\n            this.stepInput.largeStepDecrease();\n            this._muteEvent(event);\n        }\n    }\n\n    /**\n     * @hidden\n     * Handle mouse wheel\n     */\n    @HostListener('wheel', ['$event'])\n    onMouseWheel(event: WheelEvent): void {\n        if (!this.stepInput.canChangeValue || !this.stepInput.focused) {\n            return;\n        }\n        event.preventDefault();\n        if (event.deltaY > 0) {\n            this.stepInput.decrease();\n        } else {\n            this.stepInput.increase();\n        }\n    }\n\n    /**\n     * @hidden\n     * Mute event\n     */\n    private _muteEvent(e: Event): void {\n        e.stopPropagation();\n        e.preventDefault();\n    }\n}\n","import { DestroyRef, Directive, HostListener, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { fromEvent, interval, timer } from 'rxjs';\nimport { switchMap, takeUntil } from 'rxjs/operators';\n\n/**\n * This is a base step input directive to be used for increase/decrease buttons.\n */\n@Directive()\nexport abstract class StepInputActionButton {\n    /**\n     * @hidden\n     * Indicates if action can be handled\n     */\n    abstract canHandleAction(): boolean;\n\n    /**\n     * @hidden\n     * Step input button action handler\n     */\n    abstract runAction(): void;\n    /** @hidden */\n    protected _destroyed = inject(DestroyRef);\n\n    /** @hidden */\n    @HostListener('mousedown')\n    click(): void {\n        if (!this.canHandleAction()) {\n            return;\n        }\n\n        // Run action while button is pressed\n        timer(500)\n            .pipe(\n                switchMap(() => interval(40)),\n                takeUntil(fromEvent(window, 'mouseup', { capture: true, once: true }))\n            )\n            .pipe(takeUntilDestroyed(this._destroyed))\n            .subscribe(() => this.runAction());\n\n        this.runAction();\n    }\n}\n","import { Directive, inject } from '@angular/core';\n\nimport { StepInputComponent } from './base.step-input';\nimport { StepInputActionButton } from './step-input-action-button';\n\n/**\n * This Directive is used to be assigned to decrement button.\n */\n@Directive({\n    selector: '[fdpStepInputDecrement]',\n    standalone: true\n})\nexport class StepInputDecrementDirective extends StepInputActionButton {\n    private readonly stepInput = inject(StepInputComponent, { skipSelf: true });\n\n    /** @hidden */\n    canHandleAction(): boolean {\n        return !!this.stepInput.canChangeValue;\n    }\n\n    /** @hidden */\n    runAction(): void {\n        this.stepInput.decrease();\n    }\n}\n","import { Directive, inject } from '@angular/core';\n\nimport { StepInputComponent } from './base.step-input';\nimport { StepInputActionButton } from './step-input-action-button';\n\n/**\n * This Directive is used to be assigned to increment button.\n */\n@Directive({\n    selector: '[fdpStepInputIncrement]',\n    standalone: true\n})\nexport class StepInputIncrementDirective extends StepInputActionButton {\n    private readonly stepInput = inject(StepInputComponent, { skipSelf: true });\n\n    /** @hidden */\n    canHandleAction(): boolean {\n        return !!this.stepInput.canChangeValue;\n    }\n\n    /** @hidden */\n    runAction(): void {\n        this.stepInput.increase();\n    }\n}\n","import { formatNumber } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Inject, Input, LOCALE_ID, ViewEncapsulation } from '@angular/core';\nimport { FD_FORM_FIELD_CONTROL } from '@fundamental-ngx/cdk/forms';\n\nimport { OnlyDigitsDirective } from '@fundamental-ngx/cdk/utils';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport {\n    ContentDensityModule,\n    ContentDensityObserver,\n    contentDensityObserverProviders\n} from '@fundamental-ngx/core/content-density';\nimport { FormInputMessageGroupComponent, FormMessageComponent } from '@fundamental-ngx/core/form';\nimport { StepInputChangeEvent, StepInputComponent } from '../base.step-input';\nimport { StepInputControlDirective } from '../step-input-control.directive';\nimport { StepInputDecrementDirective } from '../step-input-decrement.directive';\nimport { StepInputIncrementDirective } from '../step-input-increment.directive';\n\n/**\n * Fundamental number-step-input component\n *\n * Example of usage\n * ```html\n * <fdp-number-step-input\n *   name=\"number\"\n *   [value]=\"value\"\n *   (valueChange)=\"onValueChange($event)\"\n * ></fdp-number-step-input>\n * ```\n *\n * */\n@Component({\n    selector: 'fdp-number-step-input',\n    templateUrl: 'number-step-input.component.html',\n    styleUrl: 'number-step-input.component.scss',\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [\n        { provide: FD_FORM_FIELD_CONTROL, useExisting: NumberStepInputComponent, multi: true },\n        { provide: StepInputComponent, useExisting: NumberStepInputComponent },\n        contentDensityObserverProviders()\n    ],\n    imports: [\n        FormInputMessageGroupComponent,\n        ButtonComponent,\n        StepInputDecrementDirective,\n        StepInputControlDirective,\n        OnlyDigitsDirective,\n        StepInputIncrementDirective,\n        FormMessageComponent,\n        ContentDensityModule\n    ]\n})\nexport class NumberStepInputComponent extends StepInputComponent {\n    /** Set description */\n    @Input() description: string;\n\n    /** @hidden */\n    constructor(\n        @Inject(LOCALE_ID) readonly localeId: string,\n        readonly contentDensityObserver: ContentDensityObserver\n    ) {\n        super();\n    }\n\n    /** @hidden\n     * Create change event instance\n     */\n    createChangeEvent(value: number): StepInputChangeEvent {\n        return new StepInputChangeEvent(this, value);\n    }\n\n    /** @hidden\n     * Format value taking into account LOCALE_ID\n     */\n    formatValue(value: number | null): string {\n        const precision = this.precision;\n        const digitsInfo = !isNaN(precision) ? `1.${precision}-${precision}` : undefined;\n        return formatNumber(value || 0, this.localeId, digitsInfo);\n    }\n\n    /** @hidden\n     * In order to avoid issues trying to parse formatted number\n     * (potentially specific for each local)\n     * we have to simplify number format once it's in focus mode.\n     * In this case we deal with a regular float number\n     */\n    formatValueInFocusMode(value: number | null): string {\n        const precision = this.precision;\n        value = value || 0;\n        if (!isNaN(precision)) {\n            return value.toFixed(precision);\n        }\n        return value.toString(10);\n    }\n\n    /** @hidden\n     * Used to parse entered value\n     */\n    parseValueInFocusMode(value: string | null): number | null {\n        // if user leaves input empty we should consider it as '0' by default\n        value = value || '0';\n        const parsedValue = Number.parseFloat(value);\n        return isNaN(parsedValue) ? null : parsedValue;\n    }\n}\n","<fd-form-input-message-group>\n    <div\n        class=\"fd-step-input\"\n        [class.is-focus]=\"focused\"\n        [class.is-readonly]=\"!editable\"\n        [class.is-disabled]=\"disabled\"\n        [class.fd-step-input--without-buttons]=\"showLabels\"\n        [class]=\"state ? 'is-' + state : ''\"\n    >\n        <button\n            class=\"fd-step-input__button\"\n            tabindex=\"-1\"\n            type=\"button\"\n            fd-button\n            fdType=\"transparent\"\n            [glyph]=\"showLabels ? null : 'less'\"\n            fdpStepInputDecrement\n            [attr.aria-disabled]=\"disabled || !canDecrement\"\n            [attr.title]=\"decrementLabel\"\n            [attr.aria-label]=\"decrementLabel\"\n            [attr.aria-controls]=\"id\"\n        >\n            {{ showLabels ? decrementLabel : '' }}\n        </button>\n        <input\n            #inputElementRef\n            class=\"fd-input fd-input--no-number-spinner fd-step-input__input\"\n            [id]=\"id\"\n            [name]=\"name\"\n            [disabled]=\"disabled\"\n            [readonly]=\"!editable\"\n            [attr.placeholder]=\"placeholder || ''\"\n            [attr.aria-label]=\"ariaLabel\"\n            [attr.aria-labelledby]=\"ariaLabelledBy\"\n            [attr.aria-describedby]=\"description ? id + '__description' : ''\"\n            [attr.aria-required]=\"required\"\n            [style.textAlign]=\"_textAlign$()\"\n            fdpStepInputControl\n            type=\"text\"\n            inputmode=\"numeric\"\n            fdkOnlyDigits\n            [decimal]=\"true\"\n        />\n        <button\n            class=\"fd-step-input__button\"\n            tabindex=\"-1\"\n            type=\"button\"\n            fd-button\n            fdType=\"transparent\"\n            [glyph]=\"showLabels ? null : 'add'\"\n            fdpStepInputIncrement\n            [attr.aria-disabled]=\"disabled || !canIncrement\"\n            [attr.title]=\"incrementLabel\"\n            [attr.aria-label]=\"incrementLabel\"\n            [attr.aria-controls]=\"id\"\n        >\n            {{ showLabels ? incrementLabel : '' }}\n        </button>\n    </div>\n    @if (stateMessage) {\n        <fd-form-message [type]=\"state\" [innerHTML]=\"stateMessage\"></fd-form-message>\n    }\n</fd-form-input-message-group>\n@if (description) {\n    <span [id]=\"id + '__description'\" class=\"fd-form-label fd-form-label--unit-description\">\n        {{ description }}\n    </span>\n}\n","import { NgModule } from '@angular/core';\nimport { NumberStepInputComponent } from './number/number-step-input.component';\nimport { StepInputControlDirective } from './step-input-control.directive';\nimport { StepInputDecrementDirective } from './step-input-decrement.directive';\nimport { StepInputIncrementDirective } from './step-input-increment.directive';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n    imports: [\n        StepInputDecrementDirective,\n        StepInputIncrementDirective,\n        StepInputControlDirective,\n        NumberStepInputComponent\n    ],\n    exports: [\n        StepInputDecrementDirective,\n        StepInputIncrementDirective,\n        StepInputControlDirective,\n        NumberStepInputComponent\n    ]\n})\nexport class PlatformStepInputModule {}\n","import { NgModule } from '@angular/core';\nimport { SwitchComponent } from './switch/switch.component';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n    imports: [SwitchComponent],\n    exports: [SwitchComponent]\n})\nexport class PlatformSwitchModule {}\n","import { NgModule } from '@angular/core';\nimport { TextAreaComponent } from './text-area.component';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n    imports: [TextAreaComponent],\n    exports: [TextAreaComponent]\n})\nexport class PlatformTextAreaModule {}\n","import {\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    Component,\n    EventEmitter,\n    Input,\n    OnDestroy,\n    OnInit,\n    Output,\n    ViewChild,\n    input\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FD_FORM_FIELD_CONTROL, FormStates } from '@fundamental-ngx/cdk/forms';\n\nimport { warnOnce } from '@fundamental-ngx/cdk/utils';\nimport { Placement } from '@fundamental-ngx/core/shared';\nimport { TimePickerComponent } from '@fundamental-ngx/core/time-picker';\nimport { BaseInput } from '@fundamental-ngx/platform/shared';\n\n@Component({\n    selector: 'fdp-time-picker',\n    templateUrl: './time-picker.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [{ provide: FD_FORM_FIELD_CONTROL, useExisting: PlatformTimePickerComponent, multi: true }],\n    imports: [TimePickerComponent, FormsModule]\n})\nexport class PlatformTimePickerComponent<D> extends BaseInput implements OnInit, AfterViewInit, OnDestroy {\n    /**\n     * @Input date time object representation\n     */\n    @Input()\n    set value(value: D | null) {\n        super.setValue(value);\n    }\n    get value(): D | null {\n        return super.getValue();\n    }\n\n    /**\n     * @Input date time object representation\n     */\n    @Input()\n    time: D;\n\n    /** @Input Whether to show spinner buttons */\n    @Input()\n    spinnerButtons = true;\n\n    /** @deprecated\n     * Meridian is deprecated. Use displayFormat and parseFormat inputs or\n     * DateTimeFormats.display.timeInput and DateTimeFormats.parse.timeInput instead.\n     * @Input When set to false, uses the 24 hour clock (hours ranging from 0 to 23).\n     * Default value based on the current locale format option\n     */\n    @Input()\n    set meridian(value: boolean) {\n        warnOnce(\n            'Property meridian is deprecated.' +\n                ' Use Meridian is deprecated.' +\n                ' Use displayFormat and parseFormat inputs or DateTimeFormats.display.timeInput and DateTimeFormats.parse.timeInput instead. instead.'\n        );\n        this._meridian = value;\n    }\n\n    get meridian(): boolean {\n        return this._meridian;\n    }\n\n    /**\n     * @Input When set to false, hides the input for seconds.\n     * Default value based on the current locale format option\n     * */\n    @Input()\n    displaySeconds: boolean;\n\n    /**\n     * @Input When set to false, hides the input for minutes.\n     * Default value based on the current locale format option\n     * */\n    @Input()\n    displayMinutes: boolean;\n\n    /**\n     * @Input When set to false, hides the input for hours.\n     * Default value based on the current locale format option\n     * */\n    @Input()\n    displayHours: boolean;\n\n    /** @Input Default time picker placeholder which is set dependant on the hours, minutes and seconds.\n     * Otherwise, It can be set to a default value\n     */\n    @Input()\n    declare placeholder: string;\n\n    /** Aria label for the time picker input. */\n    @Input()\n    timePickerInputLabel: string;\n\n    /** Whether a null input is considered valid(success). */\n    @Input()\n    allowNull = true;\n\n    /** Defines if time component should be used with tablet mode */\n    @Input()\n    tablet = false;\n\n    /**\n     *  The placement of the popover. It can be one of: top, top-start, top-end, bottom,\n     *  bottom-start, bottom-end, right, right-start, right-end, left, left-start, left-end.\n     */\n    @Input()\n    placement: Placement = 'bottom-start';\n\n    /**\n     *  The state of the form control - applies css classes.\n     *  Can be `success`, `error`, `warning`, `information` or blank for default.\n     */\n    @Input()\n    set state(state: FormStates | undefined) {\n        super.state = state;\n    }\n\n    get state(): FormStates {\n        if (this.timePickerComponent && this.timePickerComponent._isInvalidTimeInput) {\n            // if any other error from core timePicker\n            return 'error';\n        }\n        return super.state;\n    }\n\n    /**\n     * Whether AddOn Button should be focusable\n     * @default true\n     */\n    @Input()\n    buttonFocusable = true;\n\n    /** Whether to validate the time picker input. */\n    @Input()\n    useValidation = true;\n\n    /**\n     * @Input when set to true, time inputs won't allow to have 1 digit\n     * for example 9 will become 09\n     * but 12 will be kept as 12.\n     */\n    @Input()\n    keepTwoDigitsTime = false;\n\n    /**\n     * Display format option to customize time format in input control.\n     * Must be a format option that is understandable by DatetimeAdapter.\n     */\n    @Input()\n    displayFormat: unknown;\n\n    /**\n     * Parse format option to customize time format in input control.\n     * Must be a format option that is understandable by DatetimeAdapter.\n     */\n    @Input()\n    parseFormat: unknown;\n\n    /** Event emitted when the state of the isOpen property changes. */\n    @Output()\n    readonly isOpenChange = new EventEmitter<boolean>();\n\n    /** @hidden */\n    @ViewChild(TimePickerComponent)\n    timePickerComponent: TimePickerComponent<D>;\n\n    /**\n     * The interval between selectable minutes (e.g., 1 for every minute, 5 for 5-minute intervals, 15 for 15-minute intervals).\n     * Defaults to 1 (every minute).\n     */\n    readonly minuteStep = input<number>(1);\n\n    /** @hidden */\n    private _meridian: boolean;\n\n    /** @hidden */\n    constructor() {\n        super();\n        if (this.ngControl) {\n            this.ngControl.valueAccessor = this;\n        }\n    }\n\n    /**\n     * Method that handles changes when popover is opened or closed.\n     */\n    handleOpenChange(open: boolean): void {\n        this.isOpenChange.emit(open);\n    }\n\n    /**\n     * logic to handle validation from both platform forms and core datetiimepicker\n     * @param value inputted\n     */\n    handleTimeChange(value: D): void {\n        if (this.timePickerComponent) {\n            if (this.timePickerComponent._isInvalidTimeInput) {\n                this.state = 'error';\n            } else {\n                this.state = !this.timePickerComponent.time && !this.allowNull ? 'error' : undefined;\n            }\n            this.value = value;\n            this.stateChanges.next('time picker: handleTimeInputChange');\n        }\n        this.onTouched();\n    }\n}\n","<fd-time-picker\n    [attr.aria-label]=\"ariaLabel\"\n    [attr.ariaLabelledBy]=\"ariaLabelledBy\"\n    [attr.ariaDescribedBy]=\"ariaDescribedBy\"\n    [inputId]=\"id\"\n    [required]=\"required\"\n    [time]=\"time\"\n    [meridian]=\"meridian\"\n    [disabled]=\"disabled\"\n    [displayFormat]=\"displayFormat\"\n    [spinnerButtons]=\"spinnerButtons\"\n    [displaySeconds]=\"displaySeconds\"\n    [displayMinutes]=\"displayMinutes\"\n    [displayHours]=\"displayHours\"\n    [minuteStep]=\"minuteStep()\"\n    [placeholder]=\"placeholder\"\n    [timePickerInputLabel]=\"timePickerInputLabel\"\n    [allowNull]=\"allowNull\"\n    [tablet]=\"tablet\"\n    [placement]=\"placement\"\n    [parseFormat]=\"parseFormat\"\n    [state]=\"state\"\n    [buttonFocusable]=\"buttonFocusable\"\n    [useValidation]=\"useValidation\"\n    [keepTwoDigitsTime]=\"keepTwoDigitsTime\"\n    (isOpenChange)=\"handleOpenChange($event)\"\n    (ngModelChange)=\"handleTimeChange($event)\"\n    [(ngModel)]=\"value\"\n>\n    <ng-content></ng-content>\n</fd-time-picker>\n","import { NgModule } from '@angular/core';\nimport { PlatformTimePickerComponent } from './time-picker.component';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n    imports: [PlatformTimePickerComponent],\n    exports: [PlatformTimePickerComponent]\n})\nexport class PlatformTimePickerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["maxColumnsPerRow","formFieldProvider","formGroupChildProvider","i2.FormFieldLayoutService","nextUniqueId","FdCheckboxComponent","CoreCheckboxComponent","i1","FormGroupComponent","i2.CheckboxGroupComponent","createMissingDateImplementationError","FdDatePickerComponent","i1.TextAreaConfig","i3","i2","i4","CoreRadioButtonComponent","i2.RadioGroupComponent","ListComponent","CoreSelect","i1.SwitchConfig","CoreSwitchComponent","merge","isFunction","i2.FormGeneratorComponentsAccessorService","i1.FormGeneratorService","i2.FormFieldComponent","i3.FormFieldErrorDirective","i4.FormFieldErrorHeadingDirective","i5.FormFieldErrorDescriptionDirective","i6","i2.ComboboxConfig","i3.ComboboxConfig","i5","tap","filter","i2.FormGroupComponent","i3.FormFieldComponent","i4.FormFieldGroupComponent","i5.FormFieldErrorDirective","i6.FormFieldErrorHeadingDirective","i7.FormFieldErrorDescriptionDirective","i8","i2.InputGroupConfig","ButtonComponent","CheckboxComponent","i1.StepInputComponent"],"mappings":"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"}