{"version":3,"file":"fundamental-ngx-cdk-forms.mjs","sources":["../../../../libs/cdk/forms/models/form-state.ts","../../../../libs/cdk/forms/helpers/state.ts","../../../../libs/cdk/forms/tokens/form-field-control.token.ts","../../../../libs/cdk/forms/tokens/form-field.token.ts","../../../../libs/cdk/forms/cva/cva.directive.ts","../../../../libs/cdk/forms/forms.module.ts","../../../../libs/cdk/forms/cva/cva-control.class.ts","../../../../libs/cdk/forms/models/form-field.ts","../../../../libs/cdk/forms/models/select-item.ts","../../../../libs/cdk/forms/fundamental-ngx-cdk-forms.ts"],"sourcesContent":["export const formStates = ['success', 'error', 'warning', 'default', 'information'] as const;\n\nexport type FormStates = (typeof formStates)[number];\n","import { formStates, FormStates } from '../models/form-state';\n\nconst stateSet = new Set<FormStates>(formStates);\n\n/** Checks if the given state is a valid control state. */\nexport function isValidControlState(value: any): value is FormStates {\n    return stateSet.has(value);\n}\n","import { InjectionToken } from '@angular/core';\nimport { FormFieldControl } from '../models/form-field';\n\nexport const FD_FORM_FIELD_CONTROL = new InjectionToken<FormFieldControl>('FdFormFieldControl');\n","import { InjectionToken } from '@angular/core';\nimport { FormField } from '../models/form-field';\n\nexport const FD_FORM_FIELD = new InjectionToken<FormField>('FdFormField');\n","import { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n    AfterViewInit,\n    Directive,\n    DoCheck,\n    ElementRef,\n    EventEmitter,\n    Input,\n    OnDestroy,\n    OnInit,\n    Output,\n    ViewChild,\n    computed,\n    inject,\n    isDevMode,\n    signal\n} from '@angular/core';\nimport { ControlContainer, ControlValueAccessor, FormControl, NgControl, NgForm } from '@angular/forms';\nimport { HasElementRef, Nullable } from '@fundamental-ngx/cdk/utils';\nimport { Subject, Subscription } from 'rxjs';\nimport { isValidControlState } from '../helpers/state';\nimport { BaseCVA } from '../models/cva';\nimport { FormField, FormFieldControl } from '../models/form-field';\nimport { FormStates } from '../models/form-state';\nimport { FD_FORM_FIELD_CONTROL } from '../tokens/form-field-control.token';\nimport { FD_FORM_FIELD } from '../tokens/form-field.token';\n\nlet randomId = 0;\n\n@Directive({\n    selector: '[fdkCva]',\n    standalone: true\n})\nexport class CvaDirective<T = any>\n    implements HasElementRef, BaseCVA, FormFieldControl, OnInit, DoCheck, AfterViewInit, OnDestroy, ControlValueAccessor\n{\n    /** Input placeholder */\n    @Input()\n    placeholder: string;\n\n    /** Input type */\n    @Input()\n    type: string;\n\n    /**\n     *  The state of the form control - applies css classes.\n     *  Can be 'success', 'error', 'warning', 'default', 'information'.\n     *\n     * @default 'default'\n     */\n    @Input()\n    set state(state: Nullable<FormStates>) {\n        if (!state || isValidControlState(state)) {\n            this._state$.set(state);\n        } else if (isDevMode()) {\n            console.warn(`Provided value \"${state}\" is not a valid option for FormStates type`);\n        }\n    }\n    get state(): FormStates {\n        return this.normalizedState$();\n    }\n\n    /** Holds the message with respect to state */\n    @Input()\n    stateMessage: Nullable<string>;\n\n    /** Whether the input is disabled */\n    @Input()\n    set disabled(value: boolean) {\n        this.setDisabledState(value);\n    }\n    get disabled(): boolean {\n        if (this.ngControl && this.ngControl.disabled !== null) {\n            return this.ngControl.disabled;\n        }\n        return this._disabled;\n    }\n\n    /**\n     * readOnly Value to Mark component read only\n     */\n    @Input()\n    readonly: boolean;\n\n    /** Binds to control aria-labelledBy attribute */\n    @Input()\n    ariaLabelledBy: Nullable<string>;\n\n    /** Sets control aria-label attribute value */\n    @Input()\n    ariaLabel: Nullable<string>;\n\n    /**\n     * Tell the component if we are in editing mode.\n     */\n    @Input()\n    set editable(value: BooleanInput) {\n        const newVal = coerceBooleanProperty(value);\n        if (this._editable !== newVal) {\n            this._editable = newVal;\n            this._markForCheck();\n            this.stateChanges.next('editable');\n        }\n    }\n    get editable(): boolean {\n        return this._editable;\n    }\n\n    /**\n     * Name of the control.\n     */\n    @Input()\n    name: string;\n\n    /**\n     * Emits when change detection is needed.\n     */\n    @Output()\n    detectChanges = new EventEmitter<void>();\n\n    /**\n     * Emits when mark for changes detection is needed.\n     */\n    @Output()\n    markForCheck = new EventEmitter<void>();\n\n    /**\n     * Reference to internal Input element\n     */\n    @ViewChild('inputElementRef', { static: true, read: ElementRef })\n    protected _elementRef: ElementRef;\n\n    /** @hidden */\n    value: T;\n\n    /** set when input field is mandatory form field */\n    required: boolean;\n\n    /**\n     * See @FormFieldControl\n     */\n    focused = false;\n\n    /** Whether control has errors */\n    get controlInvalid(): boolean {\n        return this._controlInvalid$();\n    }\n\n    /**\n     * See @FormFieldControl\n     */\n    readonly stateChanges: Subject<any> = new Subject<any>();\n\n    /** @hidden */\n    readonly formField: FormField | null = inject(FD_FORM_FIELD, {\n        skipSelf: true,\n        optional: true\n    });\n\n    /**\n     * NgControl instance.\n     */\n    readonly ngControl = inject(NgControl, {\n        optional: true,\n        host: true\n    });\n\n    /**\n     * Form container instance. Usually ngForm or FormGroup directives.\n     */\n    readonly controlContainer = inject(ControlContainer, {\n        optional: true,\n        skipSelf: true\n    });\n\n    /**\n     * Separate NgForm instance. For cases when formGroup is used with the form itself.\n     */\n    readonly ngForm = inject(NgForm, {\n        optional: true,\n        skipSelf: true\n    });\n\n    /** @hidden */\n    readonly normalizedState$ = computed(() => {\n        const storedState = this._state$();\n        if (storedState) {\n            return storedState;\n        }\n\n        if (!this._controlInvalid$()) {\n            return 'default';\n        }\n\n        return this.formField?.getPriorityState() || 'default';\n    });\n\n    /** @hidden */\n    protected _subscriptions = new Subscription();\n\n    /**\n     * A private property to hold the ElementRef which might be null\n     */\n    private _elementRefOrNull: ElementRef | null = inject(ElementRef, { optional: true });\n\n    /**\n     * Element reference.\n     */\n    get elementRef(): ElementRef {\n        // Return a fallback ElementRef if _elementRefOrNull is null\n        return this._elementRefOrNull || (this._elementRef as ElementRef);\n    }\n\n    /** @hidden */\n    private _defaultId = `fd-input-id-${randomId++}`;\n\n    /** ID for the Element */\n    // eslint-disable-next-line @typescript-eslint/member-ordering\n    @Input()\n    id: string = this._defaultId;\n\n    /** @hidden */\n    private _disabled: boolean;\n    /** @hidden */\n    private _editable = true;\n\n    /**\n     * @hidden\n     */\n    private readonly _controlInvalid$ = signal(false);\n\n    /** @hidden */\n    private readonly _parentControl = inject(FD_FORM_FIELD_CONTROL, {\n        skipSelf: true,\n        optional: true\n    });\n\n    /**\n     * @hidden\n     * The state of the form control - applies css classes.\n     * Can be `success`, `error`, `warning`, `information` or 'default'\n     */\n    private readonly _state$ = signal<Nullable<FormStates>>(null);\n\n    /** @hidden */\n    constructor() {\n        if (this.ngControl) {\n            this.ngControl.valueAccessor = this;\n        }\n    }\n\n    /** @hidden */\n    onChange: (value: any) => void = () => {};\n\n    /** @hidden */\n    onTouched = (): void => {};\n\n    /** @hidden */\n    ngOnInit(): void {\n        // There may be cases when one form control is used as a base to build another form control.\n        if (!this._parentControl) {\n            this.formField?.registerFormFieldControl(this);\n        }\n    }\n\n    /**\n     * Re-validate and emit event to parent container on every CD cycle as they are some errors\n     * that we can't subscribe to.\n     */\n    ngDoCheck(): void {\n        if (this.ngControl) {\n            this.updateErrorState();\n        }\n    }\n\n    /** @hidden */\n    ngAfterViewInit(): void {\n        if (this.ngControl) {\n            this._subscriptions.add(\n                this.ngControl.statusChanges?.subscribe(() => {\n                    this._markForCheck();\n                })\n            );\n        }\n\n        const labelAndHelpId = `fdp-form-label-content-${this.id}`;\n        // if not specified, associate label and inline help ids with the input,\n        // else add these ids to the specified ones\n        if (!this.ariaLabelledBy) {\n            this.ariaLabelledBy = labelAndHelpId;\n        } else {\n            this.ariaLabelledBy += ' ' + labelAndHelpId;\n        }\n        this._markForCheck();\n    }\n\n    /** @hidden */\n    registerOnChange(fn: (_: any) => void): void {\n        this.onChange = fn;\n    }\n\n    /** @hidden */\n    registerOnTouched(fn: () => void): void {\n        this.onTouched = fn;\n    }\n\n    /** @hidden */\n    ngOnDestroy(): void {\n        this._subscriptions.unsubscribe();\n        this.stateChanges.complete();\n        this.formField?.unregisterFormFieldControl(this);\n    }\n\n    /** @hidden */\n    setDisabledState(isDisabled: BooleanInput): void {\n        const newState = coerceBooleanProperty(isDisabled);\n        this._markForCheck();\n        if (newState !== this._disabled) {\n            this._disabled = newState;\n            this.stateChanges.next('setDisabledState');\n        }\n    }\n\n    /**\n     * Method for setting the value\n     * @param value\n     */\n    writeValue(value: T): void {\n        this.value = value;\n        this.stateChanges.next('writeValue');\n        this._markForCheck();\n    }\n\n    /**\n     *\n     * Keeps track of element focus\n     */\n    _onFocusChanged(isFocused: boolean): void {\n        if (isFocused !== this.focused && (!this.disabled || !isFocused)) {\n            this.focused = isFocused;\n            this.stateChanges.next('_onFocusChanged');\n        }\n\n        if (!isFocused) {\n            this.onTouched();\n        }\n    }\n\n    /**\n     * Handles even when we click on parent container which is the FormField Wrapping this\n     * control\n     */\n    onContainerClick(event: MouseEvent): void {\n        this.focus(event);\n    }\n\n    /**\n     * In most of the cases when working with input element directly you should be just find to assign\n     * variable to this element\n     *\n     * ```\n     * <input #inputElementRef fd-form-control ...>\n     * ```\n     *\n     * and this default behavior used. For other cases implement focus.\n     *\n     */\n    focus(event?: MouseEvent): void {\n        if (this._elementRef && !this.focused) {\n            this._elementRef.nativeElement.focus(event);\n        }\n    }\n\n    /**\n     *  Need re-validates errors on every CD iteration to make sure we are also\n     *  covering non-control errors, errors that happens outside of this control\n     */\n    updateErrorState(): void {\n        const parent = this.ngForm;\n        const parentControlContainer = this.controlContainer;\n        const control = this.ngControl ? (this.ngControl.control as FormControl) : null;\n        const newStatusIsError = !!(\n            control?.invalid &&\n            (control.dirty || control.touched || parent?.submitted || (parentControlContainer as any)?.submitted)\n        );\n\n        if (newStatusIsError !== this._controlInvalid$()) {\n            this._controlInvalid$.set(newStatusIsError);\n            this.stateChanges.next('updateErrorState');\n            this._markForCheck();\n        }\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    setValue(value: T, emitOnChange = true): void {\n        let coercedValue: any = value;\n\n        if (this.type === 'number') {\n            coercedValue = value === '' || value === null || value === undefined ? null : Number(value);\n        }\n\n        if (coercedValue !== this.value) {\n            this.writeValue(coercedValue);\n            if (emitOnChange) {\n                this.onChange(coercedValue);\n            }\n            this._markForCheck();\n        }\n    }\n\n    /** @hidden */\n    private _markForCheck(): void {\n        this.markForCheck.emit();\n    }\n}\n","import { NgModule } from '@angular/core';\nimport { CvaDirective } from './cva/cva.directive';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n    imports: [CvaDirective],\n    exports: [CvaDirective]\n})\nexport class FormsModule {}\n","import { ChangeDetectorRef, DestroyRef, inject, Injectable } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { CvaDirective } from './cva.directive';\n\n/**\n * Base ControlValueAccessor control class.\n * Used in conjunction with CvaDirective.\n *\n * This class performs generic change detection based on `CvaDirective` outputs.\n */\n@Injectable()\nexport class CvaControl<T> {\n    /**\n     * Control value accessor directive instance.\n     */\n    public cvaDirective = inject<CvaDirective<T>>(CvaDirective, {\n        self: true,\n        optional: true\n    });\n\n    /**\n     * Change detector instance.\n     */\n    protected _changeDetector = inject(ChangeDetectorRef);\n\n    /** @Hidden */\n    protected _destroyRef = inject(DestroyRef);\n\n    /** @hidden */\n    listenToChanges(): void {\n        this.cvaDirective?.markForCheck.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n            this._changeDetector.detectChanges();\n        });\n\n        this.cvaDirective?.detectChanges.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n            this._changeDetector.detectChanges();\n        });\n    }\n}\n","import { ElementRef, QueryList } from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { Observable } from 'rxjs';\nimport { FormError } from './form-error';\nimport { FormStates } from './form-state';\n\n/**\n * FormField base class.\n *\n * This class is used to create form field components.\n *\n */\nexport abstract class FormField {\n    /**\n     * Register underlying form control\n     */\n    registerFormFieldControl: (control: FormFieldControl) => void;\n    /**\n     * Unregister underlying form control\n     */\n    unregisterFormFieldControl: (control: FormFieldControl) => void;\n\n    /**\n     * Set default columns layout\n     */\n    setDefaultColumnLayout: () => void;\n\n    /** Gets field error priority state. */\n    getPriorityState: () => FormStates;\n\n    /** Groups errors. */\n    groupErrors: () => void;\n\n    /** Sets error directives from parent container */\n    setErrorDirectives: (directives: QueryList<FormError>) => void;\n}\n\nexport interface FormFieldControl<T = any> {\n    /**\n     * Each input control has always a value. Need to make sure we keep a convention for\n     * input fields\n     */\n    value: T | null;\n\n    /**\n     * Need to have a way to set placeholder to the input\n     */\n    placeholder: string;\n\n    /**\n     * Need to have a way to set Mandatory to the input field\n     */\n    required: boolean;\n\n    /**\n     * Sets id from FF to Input\n     */\n    id: string;\n\n    /**\n     * This should be coming from Parent.\n     */\n    editable: boolean;\n\n    /**\n     * The height of the extra content at the bottom of the form control,\n     * which should not affect the alignment of form control and it's label\n     */\n    extraContentHeightPx?: number;\n\n    /**\n     *\n     * Form Field listen for all the changes happening inside the input\n     */\n    stateChanges: Observable<void>;\n\n    /**\n     *  Each input should inject its own ngControl and we should retrieve it\n     */\n    ngControl: NgControl | null;\n\n    /** Whether the control is disabled. */\n    disabled: boolean;\n\n    /**\n     * Keeps track if the form element is in focus\n     */\n    focused: boolean;\n\n    /** Whether control has errors */\n    controlInvalid: boolean;\n\n    /** Corresponding element reference. */\n    elementRef: ElementRef;\n\n    /** Form field instance. */\n    formField: Nullable<FormField>;\n\n    /** Method for focusing on the element */\n    focus(event?: MouseEvent): void;\n\n    /**\n     * Handles even when we click on parent container which is the FormField Wrapping this\n     * control\n     */\n    onContainerClick(event: MouseEvent): void;\n}\n","/**\n * Interface SelectItem is used to deal with complex object in order to be able to format\n * custom label that is shown in the options.\n *\n * Used in various controls: Select, RadioGroup, CheckboxGroup, Combobox\n */\nexport interface SelectItem<T = any> {\n    /**\n     * Item text shown in the popup\n     */\n    label: string;\n\n    /**\n     * References to the object instance\n     */\n    value: T;\n    disabled?: boolean;\n\n    icon?: string;\n    /**\n     * Trigger values is a text for selected item\n     */\n    triggerValue?: string;\n\n    isGroup?: boolean;\n    secondaryText?: string;\n    children?: SelectItem[];\n}\n\nexport interface OptionItem<T = any> {\n    /** Item text */\n    label: string;\n\n    /**\n     * References to the object instance\n     */\n    value: T;\n    id?: string;\n    isGroup?: boolean;\n    secondaryText?: string;\n    children?: OptionItem[];\n}\n\nexport interface SelectableOptionItem<T = any> extends OptionItem<T> {\n    selected?: boolean;\n    children?: SelectableOptionItem[];\n}\n\n/** @hidden */\nexport function isSelectableItem(item: SelectItem | any): item is SelectItem {\n    return (\n        item &&\n        item.label !== undefined &&\n        item.value !== undefined &&\n        Object.prototype.hasOwnProperty.call(item, 'selected')\n    );\n}\n\n/** @hidden */\nexport function isSelectItem(item: SelectItem | any): item is SelectItem {\n    return item && item.label !== undefined && item.value !== undefined;\n}\n\nexport const isOptionItem = isSelectItem;\nexport const isSelectableOptionItem = isSelectableItem;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}