{"version":3,"file":"sinequa-components-advanced.mjs","sources":["../../../projects/components/advanced/advanced.service.ts","../../../projects/components/advanced/bootstrap/advanced-form-validation.directive.ts","../../../projects/components/advanced/bootstrap/advanced-form-checkbox/advanced-form-checkbox.ts","../../../projects/components/advanced/bootstrap/advanced-form-checkbox/advanced-form-checkbox.html","../../../projects/components/advanced/bootstrap/advanced-form-autocomplete.directive.ts","../../../projects/components/advanced/bootstrap/advanced-form-input/advanced-form-input.ts","../../../projects/components/advanced/bootstrap/advanced-form-input/advanced-form-input.html","../../../projects/components/advanced/bootstrap/advanced-form-multi-input/advanced-form-autocomplete-multi-input.directive.ts","../../../projects/components/advanced/bootstrap/advanced-form-multi-input/advanced-form-multi-input.ts","../../../projects/components/advanced/bootstrap/advanced-form-multi-input/advanced-form-multi-input.html","../../../projects/components/advanced/bootstrap/advanced-form-range/date-range-picker/date-range-picker.ts","../../../projects/components/advanced/bootstrap/advanced-form-range/advanced-form-range.ts","../../../projects/components/advanced/bootstrap/advanced-form-range/advanced-form-range.html","../../../projects/components/advanced/bootstrap/advanced-form-select/select/select.ts","../../../projects/components/advanced/bootstrap/advanced-form-select/select/select.html","../../../projects/components/advanced/bootstrap/advanced-form-select/advanced-form-select.ts","../../../projects/components/advanced/bootstrap/advanced-form-select/advanced-form-select.html","../../../projects/components/advanced/bootstrap/advanced-form-range/date-picker/date-picker.ts","../../../projects/components/advanced/bootstrap/advanced.module.ts","../../../projects/components/advanced/messages/en.ts","../../../projects/components/advanced/messages/fr.ts","../../../projects/components/advanced/messages/de.ts","../../../projects/components/advanced/messages/index.ts","../../../projects/components/advanced/sinequa-components-advanced.ts"],"sourcesContent":["/* Dépendences fonctionnelles internes d'Angular */\nimport { Injectable } from \"@angular/core\";\nimport {\n    UntypedFormControl,\n    ValidatorFn,\n    AsyncValidatorFn,\n    Validators,\n    AbstractControl,\n} from \"@angular/forms\";\n\n/* Services */\nimport { Utils } from \"@sinequa/core/base\";\nimport { SearchService } from \"@sinequa/components/search\";\nimport {\n    AppService,\n    FormatService,\n    Query,\n    ValueItem,\n} from \"@sinequa/core/app-utils\";\nimport { ValidationService } from \"@sinequa/core/validation\";\nimport { CCColumn, Filter, getFieldPredicate, isValueFilter } from \"@sinequa/core/web-services\";\nimport { FacetService } from \"@sinequa/components/facet\";\n\n/**\n * Defines the possible basic types of an advanced value\n */\nexport type BaseAdvancedValue = string | number | Date | boolean | undefined;\n\n/**\n * Defines an advanced value type as either a single basic advanced value or an array of basic advanced values\n */\nexport type AdvancedValue = BaseAdvancedValue | BaseAdvancedValue[];\n\nexport interface AdvancedFormValidators {\n    min: (min: string | number | Date, field: string) => ValidatorFn;\n    max: (max: string | number | Date, field: string) => ValidatorFn;\n    required: ValidatorFn;\n    email: ValidatorFn;\n    pattern: (pattern: string | RegExp) => ValidatorFn;\n    integer: (field: string) => ValidatorFn;\n    number: (field: string) => ValidatorFn;\n    date: (field: string) => ValidatorFn;\n    range: (field: string) => ValidatorFn;\n}\n\n@Injectable({\n    providedIn: \"root\",\n})\nexport class AdvancedService {\n    /**\n     * Default form validators packaged within SBA to standardize advanced-search validation\n     */\n    public readonly validators: AdvancedFormValidators = {\n        min: (min, field) =>\n            this.validationService.minValidator(min, this._parser(field)),\n        max: (max, field) =>\n            this.validationService.maxValidator(max, this._parser(field)),\n        required: Validators.required,\n        email: Validators.email,\n        pattern: (pattern: string | RegExp) => Validators.pattern(pattern),\n        integer: (field) =>\n            this.validationService.integerValidator(this._parser(field)),\n        number: (field) =>\n            this.validationService.numberValidator(this._parser(field)),\n        date: (field) =>\n            this.validationService.dateValidator(this._parser(field)),\n        range: (field) =>\n            this.validationService.rangeValidator(\n                this._rangeType(field),\n                this._parser(field)\n            ),\n    };\n\n    constructor(\n        public appService: AppService,\n        public searchService: SearchService,\n        public facetService: FacetService,\n        public validationService: ValidationService,\n        public formatService: FormatService,\n    ) {}\n\n    /**\n     * Return a standard FormControl compatible with a select component\n     * @param field\n     * @param validators optional validators to be added to the returned FormControl\n     * @param asyncValidators optional asyncValidators to be added to the returned FormControl\n     * @param query Query where to fetch advanced values, if omitted, use searchService.query\n     */\n    public createSelectControl(\n        field: string,\n        validators?: ValidatorFn[],\n        asyncValidators?: AsyncValidatorFn[],\n        query = this.searchService.query\n    ): UntypedFormControl {\n        const value = this.getValue(field, query);\n        return this.createControl(value, validators, asyncValidators);\n    }\n\n    /**\n     * Return a standard FormControl compatible with a range-input component\n     * @param field\n     * @param validators optional validators to be added to the returned FormControl\n     * @param asyncValidators optional asyncValidators to be added to the returned FormControl\n     * @param query Query where to fetch advanced values, if omitted, use searchService.query\n     */\n    public createRangeControl(\n        field: string,\n        validators?: ValidatorFn[],\n        asyncValidators?: AsyncValidatorFn[],\n        query = this.searchService.query\n    ): UntypedFormControl {\n        const value = this.getRangeValue(field, query);\n        return this.createControl(value, validators, asyncValidators);\n    }\n\n    /**\n     * Return a standard FormControl compatible with a text input component\n     * @param field\n     * @param validators optional validators to be added to the returned FormControl\n     * @param asyncValidators optional asyncValidators to be added to the returned FormControl\n     * @param query Query where to fetch advanced values, if omitted, use searchService.query\n     */\n    public createInputControl(\n        field: string,\n        validators?: ValidatorFn[],\n        asyncValidators?: AsyncValidatorFn[],\n        query = this.searchService.query\n    ): UntypedFormControl {\n        const value = this.getValue(field, query);\n        return this.createControl(value, validators, asyncValidators);\n    }\n\n    /**\n     * Return a standard FormControl compatible with a multi-value text input component\n     * @param field\n     * @param validators optional validators to be added to the returned FormControl\n     * @param asyncValidators optional asyncValidators to be added to the returned FormControl\n     * @param query Query where to fetch advanced values, if omitted, use searchService.query\n     */\n    public createMultiInputControl(\n        field: string,\n        validators?: ValidatorFn[],\n        asyncValidators?: AsyncValidatorFn[],\n        query = this.searchService.query\n    ): UntypedFormControl {\n        const value = this.getValue(field, query);\n        return this.createControl(value, validators, asyncValidators);\n    }\n\n    /**\n     * Return a standard FormControl compatible with a checkbox component\n     * @param field\n     * @param validators optional validators to be added to the returned FormControl\n     * @param asyncValidators optional asyncValidators to be added to the returned FormControl\n     * @param query Query where to fetch advanced values, if omitted, use searchService.query\n     */\n    public createCheckboxControl(\n        field: string,\n        validators?: ValidatorFn[],\n        asyncValidators?: AsyncValidatorFn[],\n        query = this.searchService.query\n    ): UntypedFormControl {\n        const value = this.getBooleanValue(field, query);\n        return this.createControl(value, validators, asyncValidators);\n    }\n\n    /**\n     * Reset the supplied AbstractControl (and its validation) and sets its value to undefined\n     * @param control\n     */\n    public resetControl(control: AbstractControl) {\n        control.reset();\n        control.setValue(undefined);\n    }\n\n    /**\n     * Reset the supplied AbstractControl (and its validation) and sets its value to [undefined, undefined]\n     * @param control\n     */\n    public resetRangeControl(control: AbstractControl) {\n        control.reset();\n        control.setValue([undefined, undefined]);\n    }\n\n    /**\n     * Retrieve the value (ValueItem | ValueItem[] | undefined) to be set to the FormControl from the Query\n     * @param field\n     * @param query Query where to fetch advanced values, if omitted, use searchService.query\n     */\n    public getValue(\n        field: string,\n        query = this.searchService.query\n    ): ValueItem | ValueItem[] | undefined {\n        const filter = this.getAdvancedFilter(field, query);\n        if (filter) {\n            let value: ValueItem | ValueItem[] = this.extractValues(filter);\n            if(value.length > 0) {\n                if(value.length === 1) {\n                    value = value[0];\n                }\n                return this.formatValueItems(field, value);\n            }\n        }\n        return undefined;\n    }\n\n    extractValues(filter: Filter): ValueItem[] {\n        if(filter.operator === 'and' || filter.operator === 'or' || filter.operator === 'not') {\n            return filter.filters.map(f => this.extractValues(f)).flat();\n        }\n        else if(isValueFilter(filter)) {\n            return [{value: filter.value, display: filter.display}];\n        }\n        return [];\n    }\n\n    /**\n     * Retrieve the boolean value to be set to the FormControl from the Query\n     * @param field\n     * @param query Query where to fetch advanced values, if omitted, use searchService.query\n     */\n    public getBooleanValue(\n        field: string,\n        query = this.searchService.query\n    ): boolean | undefined {\n        const filter = this.getAdvancedFilter(field, query);\n        if (isValueFilter(filter)) {\n            return this.formatAdvancedValue(field, filter.value) as boolean;\n        }\n        return undefined;\n    }\n\n    /**\n     * Retrieve the range value to be set to the FormControl from the Query\n     * @param field\n     * @param query Query where to fetch advanced values, if omitted, use searchService.query\n     */\n    public getRangeValue(\n        field: string,\n        query = this.searchService.query\n    ): AdvancedValue {\n        const filter = this.getAdvancedFilter(field, query);\n        if (filter) {\n            if (filter.operator === 'between') {\n                return [filter.start, filter.end].map(value => this.formatAdvancedValue(field, value)) as AdvancedValue;\n            } else if(filter.operator === 'gte' || filter.operator === 'lte'){\n                const _value = this.formatAdvancedValue(field, filter.value) as BaseAdvancedValue;\n                return filter.operator === 'gte'? [_value, undefined] : [undefined, _value];\n            }\n        }\n        return [undefined, undefined];\n    }\n\n    /**\n     * Return the filter of an advanced filter\n     * @param field\n     * @param query Query where to fetch advanced values, if omitted, use searchService.query\n     */\n    protected getAdvancedFilter(\n        field: string,\n        query = this.searchService.query\n    ): Filter | undefined {\n        return query.findFilter(getFieldPredicate(field));\n    }\n\n    /**\n     * Sets a select on a query (defaults to searchService.query) for a given\n     * field and value(s)\n     * @param field\n     * @param value\n     * @param query Query where to fetch advanced values, if omitted, use searchService.query\n     * @param combineWithAnd\n     */\n    public setSelect(\n        field: string,\n        value: ValueItem | ValueItem[] | undefined,\n        query?: Query,\n        combineWithAnd?: boolean,\n        fieldOperator?: 'contains'\n    ): void;\n    public setSelect(\n        field: string,\n        value: ValueItem | ValueItem[] | undefined,\n        options?: { query?: Query, combineWithAnd?: boolean, fieldOperator?: 'contains' }\n    ): void;\n    public setSelect(\n        field: string,\n        value: ValueItem | ValueItem[] | undefined,\n        queryOptions?: any | { query?: Query, combineWithAnd?: boolean, fieldOperator?: 'contains' },\n        combineWithAnd?: boolean,\n        fieldOperator?: 'contains',\n    ): void {\n        let query: Query;\n        if (typeof queryOptions === 'object' && queryOptions !== null) {\n            query = queryOptions.query;;\n            combineWithAnd = queryOptions.combineWithAnd ?? combineWithAnd;\n            fieldOperator = queryOptions.fieldOperator ?? fieldOperator;\n        } else {\n            query = queryOptions;\n            combineWithAnd = combineWithAnd ?? false;\n        }\n\n        let filter: Filter | undefined;\n        if (value !== undefined) {\n            const _value = this.asValueItems(value, field);\n            filter = {\n                operator: combineWithAnd ? 'and' : 'or',\n                filters: _value.map(v => {\n                    if (Array.isArray(v.value)) { // Not sure this case can actually ever happen, but just in case...\n                        return {\n                            operator: 'and',\n                            display: v.display,\n                            filters: v.value.map(fieldValue => ({\n                                field,\n                                value: Utils.isString(fieldValue) ? fieldValue : fieldValue.value.toString(),\n                                display: Utils.isString(fieldValue) ? undefined : fieldValue.display\n                            }))\n                        };\n                    }\n                    const newValue = v.value instanceof Date ? Utils.toSysDateStr(v.value) : v.value.toString();\n                    return { field, value: newValue, display: v.display, operator: fieldOperator };\n                })\n            };\n        }\n        // When filter is not defined, this simply removes the selection\n        this.setAdvancedSelect(field, filter, query);\n    }\n\n    /**\n     * Sets a select on a query (defaults to searchService.query) for a given\n     * field and a boolean value\n     * @param field\n     * @param value\n     * @param discardFalsy by default it is 'false', so a false value is used to be undefined\n     * @param query\n     */\n    public setBooleanSelect(\n        field: string,\n        value: boolean | undefined,\n        allowFalsy: boolean = false,\n        query?: Query\n    ) {\n        let filter: Filter | undefined;\n        if (value === true || (value === false || allowFalsy)) {\n            value = !!value;\n            filter = {field, value};\n        }\n        // When filter is not defined, this simply removes the selection\n        this.setAdvancedSelect(field, filter, query);\n    }\n\n    /**\n     * Sets a select on a query (defaults to searchService.query) for a given\n     * field, operator and value\n     * @param field\n     * @param value\n     * @param operator\n     * @param query\n     */\n    public setNumericalSelect(\n        field: string,\n        value: string | Date | number | ValueItem | undefined,\n        operator: \"gt\" | \"gte\" | \"lt\" | \"lte\" | \"eq\" | \"neq\",\n        query?: Query\n    ) {\n        let filter: Filter | undefined;\n        if (value !== undefined) {\n            if (this._isValueItem(value)) {\n                value = value.value as string | Date | number;\n            }\n            value = this.parse(value, field);\n            if(value instanceof Date) {\n                value = Utils.toSysDateStr(value);\n            }\n            filter = {field, operator, value};\n        }\n        // When filter is not defined, this simply removes the selection\n        this.setAdvancedSelect(field, filter, query);\n    }\n\n    /**\n     * Sets a select on a query (defaults to searchService.query) for a given\n     * field and range of values\n     * @param field\n     * @param range\n     * @param query\n     */\n    public setRangeSelect(\n        field: string,\n        range: (string | Date | number)[] | undefined,\n        query?: Query\n    ) {\n        let filter: Filter | undefined;\n        if (range && range.length === 2) {\n            const from = this.parse(range[0] || undefined, field);\n            const to = this.parse(range[1] || undefined, field);\n            filter = this.facetService.makeRangeFilter(field, from, to);\n        }\n        // When filter is not defined, this simply removes the selection\n        this.setAdvancedSelect(field, filter, query);\n    }\n\n    /**\n     * Sets a select for a given field and filter on the query (defaults to searchService.query)\n     * @param query Query where to fetch advanced values, if omitted, use searchService.query\n     * @param field\n     * @param filter\n     */\n    protected setAdvancedSelect(\n        field: string,\n        filter: Filter | undefined,\n        query = this.searchService.query\n    ) {\n        query.removeFieldFilters(field);\n        if (filter) {\n            query.addFilter(filter);\n        }\n    }\n\n    /**\n     * Remove a specific advanced value by its field name.\n     * By default, Trigger search() action\n     * @param field\n     * @param query Query from which will remove the specific advanced value, if omitted, use searchService.query\n     * @param search\n     */\n    public removeAdvancedValue(\n        field: string,\n        search: boolean = true,\n        query: Query = this.searchService.query\n    ): void {\n        query.removeFieldFilters(field);\n        this.searchService.setQuery(query, false);\n        if (search) {\n            this.searchService.search();\n        }\n    }\n\n    /**\n     * Transforms a value to a parsed ValueItem[]\n     * @param value\n     * @param field\n     */\n    protected asValueItems(\n        value: ValueItem | ValueItem[],\n        field: string\n    ): ValueItem[] {\n        if (this._isValueItemArray(value)) {\n            return value.map((val) => ({\n                value: this.parse(val.value, field) as\n                    | string\n                    | Date\n                    | number\n                    | boolean,\n                display: val.display,\n            }));\n        }\n        return [\n            {\n                value: this.parse(value.value, field) as\n                    | string\n                    | Date\n                    | number\n                    | boolean,\n                display: value.display,\n            },\n        ];\n    }\n\n    public formatValueItems(\n        field: string,\n        value: ValueItem | ValueItem[]\n    ): ValueItem | ValueItem[] {\n        if (this._isValueItemArray(value)) {\n            return value.map((val) => this.formatValueItem(field, val));\n        }\n        return this.formatValueItem(field, value);\n    }\n\n    /**\n     * Format the display property of the ValueItem according its related column definition\n     * @param field\n     * @param value\n     */\n    protected formatValueItem(field: string, value: ValueItem): ValueItem {\n        const column = this.appService.getColumn(field);\n        if (column) {\n            value.display = (this.formatBaseAdvancedValue(\n                value.display!,\n                column\n            ) as string | Date | number | boolean).toString();\n        }\n        return value;\n    }\n\n    /**\n     * Format a given advanced value according to its column definition\n     * @param field\n     * @param value\n     */\n    public formatAdvancedValue(\n        field: string,\n        value: AdvancedValue\n    ): AdvancedValue {\n        if (value) {\n            const column = this.appService.getColumn(field);\n            if (column) {\n                if (Array.isArray(value)) {\n                    return value.map((v) =>\n                        v ? this.formatBaseAdvancedValue(v, column) : v\n                    );\n                }\n                return this.formatBaseAdvancedValue(value, column);\n            }\n        }\n        return value;\n    }\n\n    protected formatBaseAdvancedValue(\n        value: BaseAdvancedValue,\n        column: CCColumn\n    ): BaseAdvancedValue {\n        if (value) {\n            value = this.castAdvancedValue(value, column);\n            return column.formatter ? this.formatService.formatValue(value!, column) : value;\n        }\n        return value;\n    }\n\n    /**\n     * Cast a given value as per its column definition\n     * @param value\n     * @param column\n     */\n    public castAdvancedValue(\n        value: BaseAdvancedValue,\n        column: CCColumn | undefined\n    ): BaseAdvancedValue {\n        if (column) {\n            if (Utils.isString(value)) {\n                if (AppService.isDate(column)) {\n                    value = Utils.toDate(value);\n                } else if (AppService.isInteger(column)) {\n                    if (Utils.testInteger(value)) {\n                        value = Utils.toInt(value);\n                    }\n                } else if (AppService.isDouble(column)) {\n                    if (Utils.testFloat(value)) {\n                        value = Utils.toNumber(value);\n                    }\n                } else if (AppService.isBoolean(column)) {\n                    value = Utils.isTrue(value);\n                }\n            }\n        }\n        return value;\n    }\n\n    /**\n     * Create a generic FormControl\n     * @param value value of the FormControl\n     * @param validators optional validators to be added to the returned FormControl\n     * @param asyncValidators optional asyncValidators to be added to the returned FormControl\n     */\n    protected createControl(\n        value: AdvancedValue | ValueItem | ValueItem[],\n        validators?: ValidatorFn[],\n        asyncValidators?: AsyncValidatorFn[]\n    ): UntypedFormControl {\n        return new UntypedFormControl(\n            {\n                value,\n                disabled: false,\n            },\n            {\n                validators: !!validators ? validators : [],\n                asyncValidators: !!asyncValidators ? asyncValidators : [],\n                updateOn: \"change\",\n            }\n        );\n    }\n\n    /**\n     * Parse a value according to its column definition\n     * @param value\n     * @param field\n     */\n    protected parse<T>(value: T, field: string): T | string {\n        const parser = this._parser(field);\n        if (parser && Utils.isString(value)) {\n            return this.formatService.parseValue(value, parser);\n        }\n        return value;\n    }\n\n    /**\n     * Return the parser if existing in the given field\n     * @param field\n     */\n    protected _parser(field: string): string | undefined {\n        const column = this.appService.getColumn(field);\n        return column ? column.parser : undefined;\n    }\n\n    protected _rangeType(field: string): string | number | Date {\n        const column = this.appService.getColumn(field);\n        let rangeType;\n        if (\n            column &&\n            (AppService.isInteger(column) || AppService.isDouble(column))\n        ) {\n            rangeType = 0;\n        } else if (column && AppService.isDate(column)) {\n            rangeType = new Date();\n        } else {\n            rangeType = \"\";\n        }\n        return rangeType;\n    }\n\n    /**\n     * Return `true` if the passed value is an `ValueItem[]`\n     */\n    protected _isValueItemArray(value: any): value is ValueItem[] {\n        if (Array.isArray(value)) {\n            const condition = (element) => this._isValueItem(element);\n            return value.every(condition);\n        }\n        return false;\n    }\n\n    /**\n     * Return `true` if the passed value is an `ValueItem`\n     */\n    protected _isValueItem(value: any): value is ValueItem {\n        if (\n            Utils.isObject(value) &&\n            !Array.isArray(value) &&\n            !Utils.isDate(value)\n        ) {\n            if (value.hasOwnProperty(\"value\")) {\n                return true;\n            }\n        }\n        return false;\n    }\n}\n","import { Directive, Input, OnInit } from \"@angular/core\";\nimport { UntypedFormGroup } from \"@angular/forms\";\nimport { ValidationDirective } from \"@sinequa/core/validation\";\n\n@Directive({\n    selector: \"[sqAdvancedFormValidation]\",\n    standalone: false\n})\nexport class BsAdvancedFormValidation extends ValidationDirective implements OnInit {\n    @Input() field: string;\n    @Input() validationForm: UntypedFormGroup;\n    \n    override ngOnInit() {\n        this.options = {\n            form: this.validationForm,\n            controlName: this.field,\n        };\n        super.ngOnInit();\n    }\n}\n","import { Component, Input, OnChanges } from \"@angular/core\";\nimport { UntypedFormGroup } from \"@angular/forms\";\nimport { AppService } from '@sinequa/core/app-utils';\n\n@Component({\n    selector: \"sq-advanced-form-checkbox\",\n    templateUrl: \"./advanced-form-checkbox.html\",\n    standalone: false\n})\nexport class BsAdvancedFormCheckbox implements OnChanges {\n    @Input() form: UntypedFormGroup;\n    @Input() field: string;\n    @Input() label: string;\n\n    constructor(public appService: AppService) {}\n\n    ngOnChanges() {\n        if(this.label === undefined) {\n            this.label = this.appService.getLabel(this.field);\n        }\n    }\n}\n","<div class=\"mb-3\" [formGroup]=\"form\">\n    <div class=\"form-check\">\n        <input\n            id=\"check_{{field}}\"\n            class=\"form-check-input\"\n            type=\"checkbox\"\n            sqAdvancedFormValidation\n            [field]=\"field\"\n            [validationForm]=\"form\"\n            [formControlName]=\"field\">\n        <label role=\"button\" for=\"check_{{field}}\" class=\"form-check-label\">{{label | sqMessage}}</label>\n    </div>\n</div>\n","import { Observable } from 'rxjs';\n\nimport { Directive, EventEmitter, HostListener, Input, OnInit, Output } from \"@angular/core\";\n\nimport { Autocomplete, AutocompleteItem, AutocompleteState } from \"@sinequa/components/autocomplete\";\n\n@Directive({\n    selector: \"[sqAdvancedFormAutocomplete]\",\n    standalone: false\n})\nexport class BsAdvancedFormAutocomplete extends Autocomplete implements OnInit {\n    @Output() UpdateItem = new EventEmitter<AutocompleteItem | undefined>();\n    @Input() field: string;\n\n    /**\n     * The ngOnInit() method from the original directive is overridden\n     * On initialization, we listen to the autocomplete component for\n     * selection events\n     */\n    override ngOnInit() {\n        this._dropdownSubscription = this.dropdown.clicked.subscribe((item) => {\n            this.select(item, false); // An item was selected from the autocomplete => take the value\n        });\n        this.start();\n    }\n\n    protected override getSuggests() {\n        const value = this.getInputValue();\n        if (value) {\n            // If there is text, make a call to the suggest API\n            this.processSuggests(\n                this.getSuggestsObs(value, [this.field])\n            );\n        } else {\n            // If empty input, restart autocomplete\n            this.start();\n        }\n    }\n\n    protected override processSuggests(obs: Observable<AutocompleteItem[]>){\n        obs.subscribe(\n            suggests => {\n                if(this.getState() === AutocompleteState.ACTIVE || this.getState() === AutocompleteState.OPENED){\n                    this.dropdown.update(true, suggests\n                        .filter(item => item.category !== \"$field$\")  // Filter out fields\n                        .map(item => {\n                            if(!item.label){\n                                item.label = this.appService.getLabel(item.category);\n                            }\n                            if (!item.normalized) {\n                                item.normalized = item.display;\n                            }\n                            return item;\n                        }));\n                }\n            },\n            () => {\n                this.dropdown.update(false);\n            },\n            () => {\n                if(this.dropdown.hasItems && this.getState() === AutocompleteState.ACTIVE){\n                    this.open();    // Switch from ACTIVE to OPENED (if not already)\n                }\n                else if(!this.dropdown.hasItems && this.getState() === AutocompleteState.OPENED){   // No data\n                    this.active();  // Switch from OPENED to ACTIVE (if not already)\n                }\n            });\n    }\n\n    protected override setAutocompleteItem(item: AutocompleteItem): boolean {\n        if(item) {\n            this.setInputValue(item.display);\n            this.UpdateItem.next({\n                ...item,\n                normalized: item.normalized ? item.normalized : item.display\n            });\n            return true;\n        }\n        return false;\n    }\n\n    /**\n     * Listen to blur events on the <input> host and overrides the autocomplete blur events\n     */\n    @HostListener(\"blur\", [\"$event\"]) override blur(event: FocusEvent) {\n        /** If there is text in the <input/> and not selected from the dropdown ==> set the item manually */\n        if (this.getState() !== AutocompleteState.SELECTED) {\n            if (!!this.getInputValue() && this.getInputValue() !== \"\") {\n                const item = {\n                    display: this.getInputValue(),\n                    normalized: this.getInputValue(),\n                    category: \"\",\n                }\n                this.setAutocompleteItem(item);\n            } else {\n                this.UpdateItem.next(undefined);\n            }\n        }\n        this.init();\n    }\n\n    /**\n     * Overrides the parent inputChanged method, so that it is possible to reinitialize the autocomplete\n     * @param event\n     */\n    @HostListener(\"input\", [\"$event\"]) override inputChanged(event: Event) {\n        // If there is text in the <input/> and not selected from the dropdown ==> set the item manually\n        if (!!this.getInputValue() && this.getInputValue() !== \"\") {\n            const item = {\n                display: this.getInputValue(),\n                normalized: this.getInputValue(),\n                category: \"\",\n            }\n            this.UpdateItem.next(item);\n        } else {\n            this.UpdateItem.next(undefined);\n        }\n\n        switch (this.getState()) {\n            case AutocompleteState.OPENED:\n                this.suggest(); // Just request more data, but no state change\n                break;\n            case AutocompleteState.START:\n            case AutocompleteState.ACTIVE:\n                this.active(); // get more data, and change state if not already ACTIVE\n                break;\n            case AutocompleteState.SELECTED:\n                this.start(); // The model changed because we selected a value ==> we restart in case the user keeps typing\n                this.active();\n                break;\n            case AutocompleteState.INIT:\n                break;\n        }\n    }\n}\n","import { Component, Input, OnChanges, OnDestroy } from \"@angular/core\";\nimport { UntypedFormGroup, AbstractControl } from \"@angular/forms\";\nimport { AppService } from \"@sinequa/core/app-utils\";\nimport { Utils } from '@sinequa/core/base';\nimport { Subscription } from 'rxjs';\nimport { AutocompleteItem } from '@sinequa/components/autocomplete';\n\n@Component({\n    selector: \"sq-advanced-form-input\",\n    templateUrl: \"./advanced-form-input.html\",\n    standalone: false\n})\nexport class BsAdvancedFormInput implements OnChanges, OnDestroy {\n    @Input() form: UntypedFormGroup;\n    @Input() field: string;\n    @Input() suggestQuery: string;\n    @Input() label: string;\n\n    control: AbstractControl | null;\n    viewValue: string | number | undefined | null;\n\n    private _valueChangesSubscription: Subscription;\n\n    constructor(public appService: AppService) {}\n\n    ngOnChanges() {\n        if(this.label === undefined) {\n            this.label = this.appService.getLabel(this.field);\n        }\n        this.control = this.form.get(this.field);\n        if (this.control) {\n            if (this.control.value) {\n                this.viewValue = this.control.value.display\n                    ? this.control.value.display\n                    : this.control.value.value.toString();\n            }\n\n            this._valueChangesSubscription = Utils.subscribe(\n                this.control.valueChanges,\n                (val) => {\n                  if (val) {\n                      this.viewValue = val.display ? val.display : val.value.toString();\n                  }\n                }\n            );\n        }\n        else {\n            throw new Error(\"No form control named \"+this.field);\n        }\n    }\n\n    ngOnDestroy() {\n        if (this._valueChangesSubscription) {\n            this._valueChangesSubscription.unsubscribe();\n        }\n    }\n\n    onItemChange(item: AutocompleteItem) {\n        this.viewValue = item?.display;\n        this._updateControl(item);\n    }\n\n    private _updateControl(item: AutocompleteItem): void {\n        const value = item\n        ? {\n            value: item.normalized!,\n            display: item.display\n        } : undefined;\n        this.control?.markAsDirty();\n        this.control?.setValue(value, {emitEvent: true});\n    }\n}\n","<div class=\"mb-3\">\n    <label class=\"form-label\" for=\"{{field}}\">{{label | sqMessage}}</label>\n    <div class=\"d-flex flex-column\">\n        <input\n            sqAdvancedFormAutocomplete\n            [off]=\"!suggestQuery\"\n            [suggestQuery]=\"suggestQuery\"\n            [dropdown]=\"dropdown\"\n            sqAdvancedFormValidation\n            [validationForm]=\"form\"\n            [field]=\"field\"\n            type=\"text\"\n            class=\"form-control\"\n            [id]=\"field\"\n            autocomplete=\"off\"\n            spellcheck=\"off\"\n            [(ngModel)]=\"viewValue\"\n            (UpdateItem)=\"onItemChange($event)\">\n        <sq-autocomplete-list #dropdown>\n            <ng-template #itemTpl let-item>\n                <div class=\"py-2\">{{item.display}}</div>\n            </ng-template>\n        </sq-autocomplete-list>\n    </div>\n</div>\n","import {\n    Directive,\n    EventEmitter,\n    HostListener,\n    Input,\n    Output,\n} from \"@angular/core\";\n\nimport { AutocompleteItem } from \"@sinequa/components/autocomplete\";\nimport { Keys } from \"@sinequa/core/base\";\n\nimport { BsAdvancedFormAutocomplete } from \"../advanced-form-autocomplete.directive\";\n\n@Directive({\n    selector: \"[sqAdvancedFormAutocompleteMultiInput]\",\n    standalone: false\n})\nexport class BsAdvancedFormAutocompleteMultiInput extends BsAdvancedFormAutocomplete {\n    /** Event synchronizing the list of search terms in the parent component */\n    @Output() itemsUpdate = new EventEmitter<AutocompleteItem[]>();\n\n    /** Stores the selected search terms selected via Tab */\n    @Input() items: AutocompleteItem[] = [];\n\n    /**\n     * The setAutocompleteItem() method from the original directive is overriden to\n     * Sets the content of the <input> based on the given\n     * Autocomplete Item.\n     * @returns false since we don't need trigger search at this point of time\n     */\n    protected override setAutocompleteItem(item: AutocompleteItem): boolean {\n        if (item) {\n            // Store the autocomplete items that will be used to create a selection\n            this.items.push(item);\n            this.itemsUpdate.next(this.items);\n            this.setInputValue(\"\");\n        }\n        return false;\n    }\n\n    /**\n     * Listen to user's keyboard actions in the <input>, in order to navigate\n     * and select the autocomplete suggestions.\n     * Overrides the parent keydown method, adds the management of the backspace key\n     * to remove items, enhance the enter key to support adding new items.\n     * @param event the keyboard\n     */\n    override keydown(event: KeyboardEvent) {\n        const keydown = super.keydown(event);\n\n        if (keydown === undefined) {\n            /** We can remove selections by typing <backspace> when the input is empty */\n            if (event.key === Keys.backspace) {\n                if (this.getInputValue() === \"\") {\n                    this.items.pop();\n                    this.itemsUpdate.next(this.items);\n                }\n            }\n            /** Allow the selection one of new item */\n            if (event.key === Keys.enter) {\n                this._manageSetAutocompleteItem();\n            }\n        }\n        return keydown;\n    }\n\n    /**\n     * Listens to blur events (out of focus) on the <input> host and overrides the parent blur events\n     */\n    @HostListener(\"blur\", [\"$event\"]) override blur() {\n        this._manageSetAutocompleteItem();\n        this.init();\n    }\n\n    private _manageSetAutocompleteItem(): void {\n        /** Always consider if there is text in the <input> and that it is not yet added in items  */\n        if (!!this.getInputValue() && this.getInputValue() !== \"\") {\n            this.setAutocompleteItem({\n                display: this.getInputValue(),\n                normalized: this.getInputValue(),\n                category: \"\",\n            });\n        }\n    }\n}\n","import { Component, Input, OnChanges, ElementRef, OnDestroy } from \"@angular/core\";\nimport { UntypedFormGroup, AbstractControl } from \"@angular/forms\";\nimport { Keys, Utils } from \"@sinequa/core/base\";\nimport { AutocompleteItem } from \"@sinequa/components/autocomplete\";\nimport { Subscription } from \"rxjs\";\nimport { AppService, ValueItem } from '@sinequa/core/app-utils';\n\n/**\n * Component representing a text input that accepts multiple entries.\n * This component also performs value validation on each entry.\n *\n */\n@Component({\n    selector: \"sq-advanced-form-multi-input\",\n    templateUrl: \"./advanced-form-multi-input.html\",\n    styleUrls: [\"./advanced-form-multi-input.scss\"],\n    standalone: false\n})\nexport class BsAdvancedFormMultiInput implements OnChanges, OnDestroy {\n    @Input() form: UntypedFormGroup;\n    @Input() field: string;\n    @Input() suggestQuery: string;\n    @Input() label: string;\n\n    items: AutocompleteItem[] = []; /** List of items already existing in the advanced search */\n    private _valueChangesSubscription: Subscription;\n\n    control: AbstractControl | null;\n\n    constructor(\n        private elementRef: ElementRef,\n        public appService: AppService) {}\n\n    ngOnChanges(): void {\n        if(this.label === undefined) {\n            this.label = this.appService.getPluralLabel(this.field);\n        }\n        this.control = this.form.get(this.field);\n        if (this.control) {\n            this.items = this.control.value ?\n                Utils.asArray(this.control.value).map((item: ValueItem) => ({\n                    display: item.display ? item.display : item.value.toString(),\n                    normalized: item.value.toString(),\n                    category: this.field,\n                }))\n                : [];\n\n            this._valueChangesSubscription = this.control.valueChanges.subscribe(\n                (value) => {\n                    this.items = value ?\n                        Utils.asArray(value).map((item: ValueItem) => ({\n                            display: item.display ? item.display : item.value.toString(),\n                            normalized: item.value.toString(),\n                            category: this.field,\n                        }))\n                        : [];\n                }\n            );\n        }\n        else {\n            throw new Error(\"No form control named \"+this.field);\n        }\n    }\n\n    ngOnDestroy() {\n        if (this._valueChangesSubscription) {\n            this._valueChangesSubscription.unsubscribe();\n        }\n    }\n\n    removeItem(item: AutocompleteItem) {\n        this.items.splice(this.items.indexOf(item), 1);\n        this._updateControl();\n    }\n\n    onItemsChanged(items: AutocompleteItem[]) {\n        this.items = items;\n        this._updateControl();\n    }\n\n    keydown(event: KeyboardEvent) {\n        // Intercept tab and set focus to surrounding dropdown-item\n        if (event.key === Keys.tab) {\n            const dropdownItem = this._getDropdownItem();\n            if (dropdownItem) {\n                dropdownItem.focus();\n                event.preventDefault();\n                return false;\n            }\n        }\n        return undefined;\n    }\n\n    keypress(event: KeyboardEvent) {\n        if (event.key === Keys.enter) {\n            // Stop click event firing on surrounding anchor (Firefox)\n            event.preventDefault();\n            return false;\n        }\n        return undefined;\n    }\n\n    private _updateControl(): void {\n        const value = this.items.length > 0\n            ? this.items.map((item) => (\n                {\n                    value: item.normalized!,\n                    display: item.display\n                }\n            ))\n            : undefined\n        this.control?.markAsDirty();\n        this.control?.setValue(value, {emitEvent: true});\n    }\n\n    private _getDropdownItem(): HTMLElement | null {\n        if (this.elementRef) {\n            let current: HTMLElement | null = this.elementRef\n                .nativeElement as HTMLElement;\n            while (current && !current.classList.contains(\"dropdown-item\")) {\n                current = current.parentElement;\n            }\n            return current;\n        }\n        return null;\n    }\n}\n","<!--<div class=\"d-inline\">-->\n<div class=\"mb-3\">\n    <label class=\"form-label\">{{label | sqMessage}}</label>\n    <section class=\"sq-dropdown-form\">\n        <div class=\"form-control d-flex flex-wrap gap-1 align-items-baseline\"\n            sqAdvancedFormValidation\n            [field]=\"field\"\n            [validationForm]=\"form\">\n            <span\n                *ngFor=\"let item of items\"\n                class=\"badge rounded-pill bg-secondary ms-1 cursor-default\" [ngClass]=\"item.category\">\n                {{ item.display }}\n                <span class=\"fas fa-times-circle ms-1 clickable\" (click)=\"removeItem(item)\"></span>\n            </span>\n            <input\n                class=\"input-autocomplete flex-grow-1 rounded-2\"\n                type=\"text\"\n                autocomplete=\"off\"\n                spellcheck=\"off\"\n                sqAdvancedFormAutocompleteMultiInput\n                [field]=\"field\"\n                [off]=\"!suggestQuery\"\n                [suggestQuery]=\"suggestQuery\"\n                (itemsUpdate)=\"onItemsChanged($event)\"\n                [items]=\"items\"\n                [dropdown]=\"dropdown\"\n                (keydown)=\"keydown($event)\"\n                (keypress)=\"keypress($event)\">\n        </div>\n        <sq-autocomplete-list #dropdown>\n            <ng-template #itemTpl let-item>\n                <div class=\"autocomplete-item p-2\">{{item.display}}\n                </div>\n            </ng-template>\n        </sq-autocomplete-list>\n    </section>\n</div>\n","import {Component, Input, OnInit, AfterViewInit, OnDestroy, ViewChild, forwardRef} from \"@angular/core\";\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from \"@angular/forms\";\nimport {Subscription} from \"rxjs\";\nimport {Utils} from \"@sinequa/core/base\";\nimport {IntlService} from \"@sinequa/core/intl\";\nimport {BsDaterangepickerConfig, BsDatepickerDirective, BsDatepickerConfig, BsDaterangepickerDirective} from \"ngx-bootstrap/datepicker\";\nimport { DatePickerOptions } from '../date-picker/date-picker';\nimport { getDefaultOptions, toDate } from \"date-fns\";\n\nexport const DATE_RANGE_PICKER_VALUE_ACCESSOR: any = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(() => BsDateRangePicker),\n    multi: true\n};\n\nexport interface DateRangePickerOptions extends DatePickerOptions {\n  closedRange?: boolean;\n}\n\n@Component({\n    selector: \"sq-date-range-picker\",\n    template: `\n        <div *ngIf=\"options.closedRange\" class=\"sq-date-range-picker\">\n            <div class=\"col\">\n                <input type=\"text\" autocomplete=\"off\" class=\"form-control\" bsDaterangepicker triggers=\"click\" #fromTo=\"bsDaterangepicker\" [bsConfig]=\"bsFromToConfig()\" [ngModel]=\"value\" (ngModelChange)=\"updateFromTo($event)\" [placeholder]=\"dateFormat\"/>\n            </div>\n        </div>\n        <div *ngIf=\"!options.closedRange\" class=\"d-flex align-items-stretch justify-content-between gap-2 sq-date-range-picker\" [ngClass]=\"{'flex-column': display === 'column'}\">\n            <div class=\"flex-grow-1 d-flex align-items-center justify-content-between position-relative\">\n                <div *ngIf=\"displayLabel\" class=\"text-muted {{display === 'column' ? 'col-md-3 col-lg-3' : 'me-2'}}\">{{'msg#advanced.dateRangePicker.from' | sqMessage}}</div>\n                <input type=\"text\" autocomplete=\"off\" [id]=\"fromName\" class=\"form-control form-control-{{size}} sq-range-from pe-4\" bsDatepicker triggers=\"click\" #from=\"bsDatepicker\" [bsConfig]=\"bsFromConfig()\" [ngModel]=\"value[0]\" (ngModelChange)=\"updateFrom($event)\" [placeholder]=\"dateFormat\"/>\n                <button class=\"btn btn-outline btn-sm text-black-50 position-absolute\" style=\"right: 0.25rem;\" (click)=\"toggleFromOperator()\" aria-label=\"toggle From operator between greater than or equal and equal\">\n                    <i *ngIf=\"fromOperator === 'eq'\" class=\"fas fa-equals\"></i>\n                    <i *ngIf=\"fromOperator === 'gte'\" class=\"fas fa-greater-than-equal\"></i>\n                </button>\n            </div>\n            <div *ngIf=\"displaySeparator\" class=\"sq-separator\">{{'msg#advanced.dateRangePicker.separator' | sqMessage}}</div>\n            <div class=\"flex-grow-1 d-flex align-items-center justify-content-between position-relative\">\n                <div *ngIf=\"displayLabel\" class=\"text-muted {{display === 'column' ? 'col-md-3 col-lg-3' : 'me-2'}}\">{{'msg#advanced.dateRangePicker.to' | sqMessage}}</div>\n                <input type=\"text\" autocomplete=\"off\" [id]=\"toName\" class=\"form-control form-control-{{size}} sq-range-to pe-4\" bsDatepicker triggers=\"click\" #to=\"bsDatepicker\" [bsConfig]=\"bsToConfig()\" [ngModel]=\"value[1]\" (ngModelChange)=\"updateTo($event)\" [placeholder]=\"dateFormat\"/>\n            </div>\n        </div>\n    `,\n    providers: [DATE_RANGE_PICKER_VALUE_ACCESSOR],\n    standalone: false\n})\nexport class BsDateRangePicker implements OnInit, AfterViewInit, OnDestroy, ControlValueAccessor {\n\n    private readonly SystemFormat: string = 'YYYY-MM-DD';\n\n    @Input() options: DateRangePickerOptions;\n    @Input() display: 'row' | 'column' = 'row';\n    @Input() displaySeparator = true;\n    @Input() displayLabel = false;\n    @Input() size: '' | 'sm' | 'lg' = '';\n    value: (Date | undefined)[];\n    private onChangeCallback: (_: any) => void = () => {};\n    private localeChange: Subscription;\n    @ViewChild(\"fromTo\", {static: false}) fromToPicker?: BsDaterangepickerDirective;\n    @ViewChild(\"from\", {static: false}) fromPicker?: BsDatepickerDirective;\n    @ViewChild(\"to\", {static: false}) toPicker?: BsDatepickerDirective;\n    fromName: string;\n    toName: string;\n    fromOperator: 'gte' | 'eq' = 'gte';\n\n    constructor(\n        public intlService: IntlService) {\n    }\n\n    ngOnInit() {\n        if (!this.options) {\n            this.options = {};\n        }\n        this.fromName = \"from_\" + this.options.name;\n        this.toName = \"to_\" + this.options.name;\n\n        if (!this.value) {\n            this.value = [undefined, undefined];\n        }\n    }\n\n    public get dateFormat(): string {\n        const { locale } = getDefaultOptions() as {locale: Locale};\n        return this.options.system\n            ? this.SystemFormat\n            : locale\n                ? locale?.formatLong?.date({ width: 'short' }).toUpperCase()\n                : \"MM/DD/YYYY\"\n    }\n    setLocale() {\n        if (this.fromToPicker?.isOpen) {\n            this.fromToPicker.hide();\n            this.fromToPicker.show();\n        }\n        if (this.fromPicker?.isOpen) {\n            this.fromPicker.hide();\n            this.fromPicker.show();\n        }\n        if (this.toPicker?.isOpen) {\n            this.toPicker.hide();\n            this.toPicker.show();\n        }\n    }\n\n    ngAfterViewInit() {\n        this.setLocale();\n        this.localeChange = Utils.subscribe(this.intlService.events,\n            (value) => {\n                this.setLocale();\n            });\n    }\n\n    ngOnDestroy() {\n        if (this.localeChange) {\n            this.localeChange.unsubscribe();\n        }\n    }\n\n    //#region closedRange\n    bsFromToConfig(): BsDaterangepickerConfig {\n        return <any>{\n            minDate: this.options.minDate,\n            maxDate: this.options.maxDate,\n            containerClass:'theme-default',\n            showWeekNumbers: false,\n            rangeInputFormat: this.dateFormat\n        };\n    }\n\n    updateFromTo(fromTo: Date[]) {\n        this.setValue([!!fromTo ? fromTo[0] : undefined, !!fromTo ? fromTo[1] : undefined]);\n        this.onChangeCallback(this.value);\n    }\n    //#endregion closedRange\n\n    //#region !closedRange\n    maxDate: Date | undefined;\n    minDate: Date | undefined;\n    bsFromConfig(): BsDatepickerConfig {\n        return <any>{\n            minDate: this.options.minDate,\n            maxDate: this.maxDate,\n            containerClass:'theme-default',\n            showWeekNumbers: false,\n            dateInputFormat: this.dateFormat\n        };\n    }\n\n    bsToConfig(): BsDatepickerConfig {\n        return <any>{\n            minDate: this.minDate,\n            maxDate: this.options.maxDate,\n            containerClass:'theme-default',\n            showWeekNumbers: false,\n            dateInputFormat: this.dateFormat\n        };\n    }\n\n    setMinMaxDate() {\n        this.maxDate = this.value[1] || this.options.maxDate;\n        this.minDate = this.value[0] || this.options.minDate;\n    }\n\n    resetMinMaxDate() {\n        this.maxDate = this.options.maxDate;\n        this.minDate = this.options.minDate;\n    }\n\n    updateFrom(from: Date) {\n        this.setValue([from, this.value[1]]);\n        this.onChangeCallback(this.value);\n    }\n\n    updateTo(to: Date) {\n        this.setValue([this./* The `value` property in the `BsDateRangePicker`\n        component is used to store the selected date range.\n        It is an array of two elements, each representing a\n        date in the range. The first element corresponds to\n        the start date, and the second element corresponds\n        to the end date of the range. */\n        value[0], to]);\n        this.onChangeCallback(this.value);\n    }\n    //#endregion !closedRange\n\n    zeroTimes() {\n        if (this.value) {\n            if (Utils.isDate(this.value[0])) {\n                const date = this.value[0];\n                date.setHours(0);\n                date.setMinutes(0);\n                date.setSeconds(0);\n                date.setMilliseconds(0);\n            }\n            if (Utils.isDate(this.value[1])) {\n                const date = this.value[1];\n                date.setHours(0);\n                date.setMinutes(0);\n                date.setSeconds(0);\n                date.setMilliseconds(0);\n            }\n        }\n    }\n\n    setValue(value: (Date | undefined)[] | undefined) {\n        if (!this.value || !value || !Utils.equals(this.value[0], value[0]) || !Utils.equals(this.value[1], value[1])) {\n            if (!value) {\n                value = [undefined, undefined];\n            } else {\n                value[0] = !!value[0] ? toDate(value[0]) : value[0];\n                value[1] = !!value[1] ? toDate(value[1]) : value[1];\n            }\n            if (this.options.closedRange) {\n                this.value = value;\n                this.zeroTimes();\n            } else {\n                this.resetMinMaxDate();\n                this.value = value;\n                this.zeroTimes();\n                this.setMinMaxDate();\n            }\n        }\n    }\n\n    //#region ControlValueAccessor\n    writeValue(value: Date[]): void {\n        this.setValue(value);\n    }\n\n    registerOnChange(fn: any): void {\n        this.onChangeCallback = fn;\n    }\n\n    registerOnTouched(fn: any): void {\n    }\n    //#endregion\n\n    toggleFromOperator() {\n        if (this.fromOperator === 'gte') {\n            this.fromOperator = 'eq';\n        } else {\n            this.fromOperator = 'gte';\n        }\n    }\n}\n","import {\n    Component,\n    Input,\n    OnInit,\n    OnDestroy,\n} from \"@angular/core\";\nimport { UntypedFormGroup, AbstractControl } from \"@angular/forms\";\nimport { Subscription } from \"rxjs\";\nimport { Utils } from \"@sinequa/core/base\";\nimport { CCColumn } from \"@sinequa/core/web-services\";\nimport { AppService } from \"@sinequa/core/app-utils\";\n\n@Component({\n    selector: \"sq-advanced-form-range\",\n    templateUrl: \"./advanced-form-range.html\",\n    standalone: false\n})\nexport class BsAdvancedFormRange implements OnInit, OnDestroy {\n    @Input() form: UntypedFormGroup;\n    @Input() field: string;\n    @Input() min: Date | number | string;\n    @Input() max: Date | number | string;\n    @Input() label: string;\n\n    fromName: string;\n    toName: string;\n    forName: string;\n    column: CCColumn | undefined;\n    minDate: Date | undefined;\n    maxDate: Date | undefined;\n    control: AbstractControl | null;\n    value: (string | number | Date)[];\n    isDate: boolean;\n    private _valueChangesSubscription: Subscription;\n\n    constructor(private appService: AppService) {}\n\n    ngOnInit() {\n        this.fromName = \"from_\" + this.field;\n        this.toName = \"to_\" + this.field;\n        this.forName = this.fromName;\n        this.column = this.appService.getColumn(this.field);\n        if(this.label === undefined) {\n            this.label = this.appService.getPluralLabel(this.field);\n        }\n        this.isDate = !!this.column && AppService.isDate(this.column);\n        if (this.isDate) {\n            this.minDate = Utils.isDate(this.min)\n                ? this.min\n                : undefined;\n            this.maxDate = Utils.isDate(this.max)\n                ? this.max\n                : undefined;\n        }\n        this.control = this.form.get(this.field);\n        if (this.control) {\n            this.value = this.control.value;\n            this._valueChangesSubscription = Utils.subscribe(\n                this.control.valueChanges,\n                (value) => {\n                    this.value = value;\n                }\n            );\n        }\n        else {\n            throw new Error(\"No form control named \"+this.field);\n        }\n    }\n\n    ngOnDestroy() {\n        if (this._valueChangesSubscription) {\n            this._valueChangesSubscription.unsubscribe();\n        }\n    }\n\n    ensureValue(value: string): string | number | Date {\n        if (this.isDate) {\n            const value1 = Utils.toDate(value);\n            if (value1 !== undefined) {\n                return value1;\n            }\n        } else if (this.column && AppService.isNumber(this.column)) {\n            if (Utils.testFloat(value)) {\n                return Utils.toNumber(value);\n            }\n        }\n        return value;\n    }\n\n    updateFrom(from: string) {\n        this.value[0] = this.ensureValue(from);\n        if (this.control) {\n            this.control.markAsDirty();\n            this.control.setValue(this.value);\n        }\n    }\n\n    updateTo(to: string) {\n        this.value[1] = this.ensureValue(to);\n        if (this.control) {\n            this.control.markAsDirty();\n            this.control.setValue(this.value);\n        }\n    }\n}\n","<div class=\"mb-3\" [formGroup]=\"form\">\n    <label class=\"form-label\" for=\"{{forName}}\">{{label | sqMessage}}</label>\n    <div *ngIf=\"!isDate\"\n        class=\"d-flex align-items-center justify-content-between gap-2 sq-advanced-form-range\"\n        sqAdvancedFormValidation\n        [field]=\"field\"\n        [validationForm]=\"form\"\n        [id]=\"field\">\n        <div class=\"flex-grow-1\">\n            <input\n                type=\"text\"\n                autocomplete=\"off\"\n                spellcheck=\"off\"\n                class=\"form-control sq-range-from\"\n                [id]=\"fromName\"\n                [ngModel]=\"value[0]\"\n                (ngModelChange)=\"updateFrom($event)\"\n                [ngModelOptions]=\"{standalone: true}\"/>\n        </div>\n        <div class=\"sq-separator\">{{'msg#advanced.rangeSeparator' | sqMessage}}</div>\n        <div class=\"flex-grow-1\">\n            <input\n                type=\"text\"\n                autocomplete=\"off\"\n                spellcheck=\"off\"\n                class=\"form-control sq-range-to\"\n                [id]=\"toName\"\n                [ngModel]=\"value[1]\"\n                (ngModelChange)=\"updateTo($event)\"\n                [ngModelOptions]=\"{standalone: true}\"/>\n        </div>\n    </div>\n    <sq-date-range-picker *ngIf=\"isDate\"\n        [options]=\"{name: field, system: false, closedRange: false, minDate: minDate, maxDate: maxDate}\"\n        [formControlName]=\"field\"\n        [id]=\"field\"\n        sqAdvancedFormValidation\n        [field]=\"field\"\n        [validationForm]=\"form\">\n    </sq-date-range-picker>\n</div>\n","import { Component, forwardRef, Input, OnInit, ViewChild, ElementRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Utils, Keys } from \"@sinequa/core/base\";\nimport { ValueItem } from '@sinequa/core/app-utils';\n\n@Component({\n    selector: \"sq-select\",\n    templateUrl: \"./select.html\",\n    providers: [{\n            provide: NG_VALUE_ACCESSOR,\n            multi: true,\n            useExisting: forwardRef(() => BsSelectComponent),\n        }],\n    standalone: false\n})\nexport class BsSelectComponent implements ControlValueAccessor, OnInit {\n    @Input() items: ValueItem[];\n    @Input() disabled: boolean;\n    @Input() multiple: boolean;\n    @ViewChild(\"button\", {static: false}) buttonElement: ElementRef;\n    opened: boolean = false;\n    isOpen: boolean = false;\n    activeItem: number = -1;\n    private cancelBlur: boolean = false; // For IE which takes focus when clicking on dropdown scrollbar despite the mousedown handling\n    public names: string[];\n    private selectedItems: number[]; //stores indices of selected items\n    private onChangeCallback: (_: any) => void = () => {};\n\n    ngOnInit() {\n        this.clearSelected();\n        if (this.items.length === 0) {\n          this.disabled = false;\n        }\n        this.names = [];\n        this.items.forEach(item => this.names.push(item.display!));\n    }\n\n    setOpen(value: boolean): void {\n        if (!this.opened) {\n            if (this.disabled || !value) {\n                return;\n            }\n            this.opened = true;\n        }\n        this.isOpen = value;\n        if (!value) {\n            this.activeItem = -1;\n        }\n    }\n\n    mousedown(event: Event): void {\n        event.preventDefault();\n        this.cancelBlur = true;\n        Utils.delay().then(() => this.cancelBlur = false);\n    }\n\n    blur(event: FocusEvent): void {\n        if (this.cancelBlur) {\n            event.preventDefault();\n            event.stopImmediatePropagation();\n            Utils.delay().then(() => {\n                this.buttonElement.nativeElement.focus();\n            });\n            return;\n        }\n        this.setOpen(false);\n    }\n\n    toggleOpen(): void {\n        if (this.disabled) {\n            return;\n        }\n        this.setOpen(!this.isOpen);\n    }\n\n    keydown($event: KeyboardEvent): void {\n        if (this.disabled) {\n            return;\n        }\n        // arrow down\n        if ($event.key === Keys.down) {\n            if (!this.isOpen) {\n                this.setOpen(true);\n            }\n            this.activeItem++;\n            if (this.activeItem >= this.items.length) {\n                this.activeItem = 0;\n            }\n            $event.preventDefault();\n            $event.stopPropagation();\n        }\n        // arrow up\n        else if ($event.key === Keys.up) {\n            if (!this.isOpen) {\n                this.setOpen(true);\n            }\n            this.activeItem--;\n            if (this.activeItem < 0) {\n                this.activeItem = this.items.length - 1;\n            }\n            $event.preventDefault();\n            $event.stopPropagation();\n        }\n        // enter or space\n        else if (($event.key === Keys.enter || $event.key === Keys.space) &&\n            this.activeItem >= 0 && this.activeItem < this.items.length) {\n            this.toggleItemSelected(this.activeItem);\n            $event.preventDefault();\n            $event.stopPropagation();\n        }\n        // escape\n        else if ($event.key === Keys.esc && this.isOpen) {\n            this.setOpen(false);\n            $event.preventDefault();\n            $event.stopPropagation();\n        }\n    }\n\n    private clearSelected() {\n        this.selectedItems = [];\n    }\n\n    private countSelected(): number {\n        return this.selectedItems.length;\n    }\n\n    isItemSelected(itemIndex: number) : boolean {\n        return this.selectedItems.includes(itemIndex);\n    }\n\n    toggleItemSelected(itemIndex: number): void {\n        const idx: number = this.selectedItems.indexOf(itemIndex);\n        // Remove item if it was already selected\n        if (idx > -1) {\n            this.selectedItems.splice(idx, 1);\n        }\n        // regular case: just add the index, and update the active item if it exists\n        else if (this.multiple) {\n            this.selectedItems.push(itemIndex);\n            if (this.activeItem >= 0)\n                this.activeItem = itemIndex;\n        }\n        // single-item case: ensure there is only one selected item, and close the menu\n        else {\n            this.selectedItems = [itemIndex];\n            this.setOpen(false);\n        }\n        this.triggerOnChange();\n    }\n\n    /* Template properties */\n    get buttonTitleMessageParams(): any {\n        return {\n            values: {\n                count: this.countSelected()\n            }\n        };\n    }\n\n    get buttonTitle(): string {\n        const selectCount = this.countSelected();\n\n        if (selectCount === 0) {\n            return \"msg#advanced.select.noItems\";\n        }\n        if (!this.multiple) {\n            return this.items[this.selectedItems[0]].display!;\n        }\n        if (selectCount === this.items.length) {\n            return \"msg#advanced.select.allItems\";\n        }\n\n        //Get list of items names corresponding to selected indices\n        return this.selectedItems\n            .map(index => this.items[index].display!)\n            .sort()\n            .join(\", \");\n    }\n\n    get itemListHeight(): string {\n        // use 10 as default\n        return (10 * 4) + \"ex\";\n    }\n    /* End Template properties */\n\n    /* Change event */\n    private triggerOnChange() {\n        // Gather selected item values\n        let values: ValueItem | ValueItem[] | undefined;\n        // We can not pass an empty array, when empty use undefined instead\n        if (this.selectedItems.length === 0) {\n            values = undefined;\n        }\n        // return an array if multiple\n        else if (this.multiple) {\n            values = this.selectedItems.map(index => this.items[index]);\n        }\n        // directly pass the value if not multiple\n        else {\n            values = this.items[this.selectedItems[0]];\n        }\n\n        this.onChangeCallback(values);\n    }\n    /* End Change event */\n\n    /* ControlValueAccessor methods */\n    writeValue(value: ValueItem | ValueItem[]): void {\n        this.clearSelected();\n        if (value) {\n            // the value may not be an array if this select is not multiple\n            const asArray = Utils.asArray(value);\n            //Mark items as selected based on input values\n            this.items.forEach((item, index) => {\n                if (asArray.find((el) => el.value === item.value) && index !== undefined) {\n                    this.selectedItems.push(index);\n                }\n            });\n        }\n    }\n\n    registerOnChange(fn: any): void {\n        this.onChangeCallback = fn;\n    }\n\n    registerOnTouched(fn: any): void {\n    }\n    /* End ControlValueAccessor methods */\n}\n","<div class=\"dropdown\">\n    <!-- item-list toggle -->\n    <button #button [ngClass]=\"{'disabled': disabled}\" class=\"btn btn-light dropdown-toggle form-control\" data-bs-toggle=\"dropdown\" type=\"button\" role=\"button\" (click)=\"toggleOpen()\" (blur)=\"blur($event)\" (keydown)=\"keydown($event)\" tabindex=\"0\"><span class=\"sq-button-text\">{{buttonTitle | sqMessage:buttonTitleMessageParams}}</span></button>\n    <!-- item-list view -->\n    <div *ngIf=\"opened\" [hidden]=\"!isOpen\" class=\"dropdown-menu dropdown-menu-end show overflow-auto\" [style.max-height]=\"itemListHeight\" role=\"combobox\" (mousedown)=\"mousedown($event)\">\n        <!-- items -->\n        <a *ngFor=\"let itemName of names; let i = index\" class=\"dropdown-item{{activeItem === i ? ' active' : ''}}\"\n            (click)=\"toggleItemSelected(i)\" (keydown)=\"keydown($event)\" tabindex=\"-1\"\n            [sqScrollIntoView]=\"{active: i === activeItem, first: i === 0}\">\n            <span class=\"fas fa-check {{isItemSelected(i) ? '' : ' invisible'}} left\"></span>\n            <span>{{itemName}}</span>\n        </a>\n    </div>\n</div>\n","import {Component, Input, OnInit, OnDestroy} from \"@angular/core\";\nimport {UntypedFormGroup} from \"@angular/forms\";\nimport {AppService, ValueItem} from \"@sinequa/core/app-utils\";\nimport {CCColumn, Aggregation} from \"@sinequa/core/web-services\";\nimport {Utils} from \"@sinequa/core/base\";\nimport {Subscription} from \"rxjs\";\nimport {FirstPageService} from \"@sinequa/components/search\";\n\n@Component({\n    selector: \"sq-advanced-form-select\",\n    templateUrl: \"./advanced-form-select.html\",\n    standalone: false\n})\nexport class BsAdvancedFormSelect implements OnInit, OnDestroy {\n    @Input() form: UntypedFormGroup;\n    @Input() field: string;\n    /** Optional label: the component looks for the label in the Query web service configuration for the given field */\n    @Input() label: string;\n    /** Whether the component supports multiple selection */\n    @Input() multiple: boolean;\n    /** Optional input. The component automatically looks for an aggregation with the name equal to the field */\n    @Input() aggregation: string;\n\n    column: CCColumn | undefined;\n    items: ValueItem[];\n\n    private _valueChangesSubscription: Subscription;\n\n    constructor(\n        private appService: AppService,\n        private firstPageService: FirstPageService) {\n    }\n\n    ngOnInit() {\n        const control = this.form.get(this.field);\n        if(!control) {\n            throw new Error(\"No control in search-form named \"+this.field);\n        }\n        this.column = this.appService.getColumn(this.field);\n        this.items = this.getItems();\n        if(this.label === undefined) {\n            if(this.multiple) {\n                this.label = this.appService.getPluralLabel(this.field);\n            }\n            else {\n                this.label = this.appService.getLabel(this.field);\n            }\n        }\n    }\n\n    ngOnDestroy() {\n        if (this._valueChangesSubscription) {\n            this._valueChangesSubscription.unsubscribe();\n        }\n    }\n\n    private getItems(): ValueItem[] {\n        const firstPage = this.firstPageService.firstPage;\n        if (firstPage) {\n            // Find aggregation for field\n            const condition = (this.aggregation) ?\n                (aggr: Aggregation) => Utils.eqNC(aggr.name, this.aggregation) :\n                (aggr: Aggregation) => this.column && Utils.eqNC(aggr.column, this.column.name);\n            const aggregation = firstPage.aggregations.find(condition);\n\n            if (aggregation?.items) {\n                if(aggregation.isTree) {\n                    return aggregation.items\n                        .filter(item => item.value)\n                        .map(item => ({\n                            value: `/${item.value}/*`,\n                            display: item.display ? item.display : String(item.value)\n                        }));\n                }\n\n                return aggregation.items\n                    .filter(item => item.value)\n                    .map(item => ({\n                        value: item.value!,\n                        display: item.display ? item.display : String(item.value)\n                    }));\n            }\n        }\n        return [];\n    }\n}\n","<div class=\"mb-3\" [formGroup]=\"form\">\n    <label class=\"form-label\" for=\"{{field}}\">{{label | sqMessage}}</label>\n    <sq-select\n        [items]=\"items\"\n        [multiple]=\"multiple\"\n        [formControlName]=\"field\"\n        [id]=\"field\"\n        sqAdvancedFormValidation\n        [field]=\"field\"\n        [validationForm]=\"form\">\n    </sq-select>\n</div>\n","import {Component, Input, OnInit, AfterViewInit, OnDestroy, ViewChild, forwardRef, ElementRef} from \"@angular/core\";\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from \"@angular/forms\";\nimport {Subscription} from \"rxjs\";\nimport {Utils} from \"@sinequa/core/base\";\nimport {IntlService} from \"@sinequa/core/intl\";\nimport {BsDatepickerDirective, BsDatepickerConfig} from \"ngx-bootstrap/datepicker\";\nimport { getDefaultOptions, Locale } from \"date-fns\";\n\nexport const DATE_PICKER_VALUE_ACCESSOR: any = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(() => BsDatePicker),\n    multi: true\n};\n\nexport interface DatePickerOptions {\n    name?: string;\n    system?: boolean; // default false\n    minDate?: Date;\n    maxDate?: Date;\n}\n\n@Component({\n    selector: \"sq-date-picker\",\n    template: `\n        <div class=\"sq-date-picker form-row\">\n            <div class=\"col\">\n                <input type=\"text\" #input class=\"form-control\" autocomplete=\"off\" bsDatepicker triggers=\"click\" #picker=\"bsDatepicker\" [bsConfig]=\"bsConfig()\" [ngModel]=\"value\" (ngModelChange)=\"updateValue($event)\" [placeholder]=\"dateFormat\" />\n            </div>\n        </div>\n    `,\n    providers: [DATE_PICKER_VALUE_ACCESSOR],\n    standalone: false\n})\nexport class BsDatePicker implements OnInit, AfterViewInit, OnDestroy, ControlValueAccessor {\n\n    private readonly SystemFormat: string = 'YYYY-MM-DD';\n\n    @Input() options: DatePickerOptions;\n    value: Date;\n    private onChangeCallback: (_: any) => void = () => {};\n    private localeChange: Subscription;\n    @ViewChild(\"picker\", {static: false}) picker: BsDatepickerDirective;\n    @ViewChild('input', {static: false}) input: ElementRef;\n\n    constructor(\n        public intlService: IntlService) {\n    }\n\n    ngOnInit() {\n        if (!this.options) {\n            this.options = {};\n        }\n    }\n\n    public get dateFormat(): string {\n        const { locale } = getDefaultOptions() as {locale: Locale};\n        return this.options.system\n            ? this.SystemFormat\n            : locale\n                ? locale?.formatLong?.date({ width: 'short' }).toUpperCase()\n                : \"MM/DD/YYYY\"\n    }\n\n    setLocale() {\n        if (!!this.picker && this.picker.isOpen) {\n            this.picker.hide();\n            this.picker.show();\n        }\n    }\n\n    ngAfterViewInit() {\n        this.setLocale();\n        this.localeChange = Utils.subscribe(this.intlService.events,\n            (value) => {\n                this.setLocale();\n            });\n    }\n\n    ngOnDestroy() {\n        if (this.localeChange) {\n            this.localeChange.unsubscribe();\n        }\n    }\n\n    bsConfig(): BsDatepickerConfig {\n        return <any>{\n            minDate: this.options.minDate,\n            maxDate: this.options.maxDate,\n            containerClass:'theme-default',\n            showWeekNumbers: false,\n            dateInputFormat: this.dateFormat\n        };\n    }\n\n    updateValue(value: Date) {\n        this.value = value;\n        this.zeroTimes(this.value);\n        this.onChangeCallback(this.value);\n        this.focus();\n    }\n\n    private zeroTimes(value: Date): void {\n        if (Utils.isDate(value)) { // includes null checking\n            value.setHours(0, 0, 0, 0);\n        }\n    }\n\n    public focus(): void {\n        if (this.input) {\n            this.input.nativeElement.focus();\n        }\n    }\n\n    //#region ControlValueAccessor\n    writeValue(value: Date): void {\n        this.value = value;\n    }\n\n    registerOnChange(fn: any): void {\n        this.onChangeCallback = fn;\n    }\n\n    registerOnTouched(fn: any): void {\n    }\n    //#endregion\n}\n","import {NgModule} from \"@angular/core\";\nimport {CommonModule} from \"@angular/common\";\nimport {FormsModule, ReactiveFormsModule} from \"@angular/forms\";\n\nimport {IntlModule} from \"@sinequa/core/intl\";\n\nimport {BsDatepickerModule} from \"ngx-bootstrap/datepicker\";\n\nimport {UtilsModule} from \"@sinequa/components/utils\";\nimport {BsAutocompleteModule} from \"@sinequa/components/autocomplete\";\n\nimport {BsAdvancedFormCheckbox} from \"./advanced-form-checkbox/advanced-form-checkbox\";\nimport {BsAdvancedFormRange} from \"./advanced-form-range/advanced-form-range\";\nimport {BsAdvancedFormSelect} from \"./advanced-form-select/advanced-form-select\";\nimport { BsAdvancedFormMultiInput } from './advanced-form-multi-input/advanced-form-multi-input';\nimport { BsAdvancedFormInput } from './advanced-form-input/advanced-form-input';\nimport { BsDatePicker } from './advanced-form-range/date-picker/date-picker';\nimport { BsDateRangePicker } from './advanced-form-range/date-range-picker/date-range-picker';\nimport { BsSelectComponent } from './advanced-form-select/select/select';\n\n// Directives\nimport {BsAdvancedFormAutocomplete} from \"./advanced-form-autocomplete.directive\";\nimport {BsAdvancedFormValidation} from \"./advanced-form-validation.directive\";\nimport { BsAdvancedFormAutocompleteMultiInput } from './advanced-form-multi-input/advanced-form-autocomplete-multi-input.directive';\n\n\n@NgModule({\n    imports: [\n        CommonModule,\n        FormsModule,\n        ReactiveFormsModule,\n\n        IntlModule,\n\n        // ngx-bootstrap\n        BsDatepickerModule.forRoot(),\n\n        UtilsModule,\n        BsAutocompleteModule\n    ],\n    declarations: [\n        BsAdvancedFormCheckbox,\n        BsAdvancedFormInput,\n        BsAdvancedFormRange,\n        BsAdvancedFormSelect,\n        BsAdvancedFormMultiInput,\n        BsDatePicker,\n        BsDateRangePicker,\n        BsSelectComponent,\n\n        BsAdvancedFormAutocompleteMultiInput,\n        BsAdvancedFormAutocomplete,\n        BsAdvancedFormValidation,\n    ],\n    exports: [\n        BsAdvancedFormCheckbox,\n        BsAdvancedFormInput,\n        BsAdvancedFormRange,\n        BsAdvancedFormSelect,\n        BsAdvancedFormMultiInput,\n        BsDatePicker,\n        BsDateRangePicker,\n        BsSelectComponent,\n\n        BsAdvancedFormAutocompleteMultiInput,\n        BsAdvancedFormAutocomplete,\n        BsAdvancedFormValidation,\n    ]\n})\nexport class BsAdvancedModule {\n}\n","export default {\n    \"advanced\": {\n        \"rangeSeparator\": \" / \",\n        \"dateRangePicker\": {\n            \"separator\": \" / \",\n            \"from\": \"From\",\n            \"to\": \"To\"\n        },\n        \"rangeInput\": {\n            \"separator\": \"/\"\n        },\n        \"select\": {\n            \"nItems\": \"{count} items selected\",\n            \"allItems\": \"All items selected\",\n            \"noItems\": \"No items selected\"\n        }\n    }\n};\n","export default {\n    \"advanced\": {\n        \"rangeSeparator\": \" / \",\n        \"dateRangePicker\": {\n            \"separator\": \" / \",\n            \"from\": \"Du\",\n            \"to\": \"Au\"\n        },\n        \"rangeInput\": {\n            \"separator\": \"/\"\n        },\n        \"select\": {\n            \"nItems\": \"{count} éléments sélectionnés\",\n            \"allItems\": \"Tous les éléments\",\n            \"noItems\": \"Aucun élément\"\n        }\n    }\n};\n","export default {\n    \"advanced\": {\n        \"rangeSeparator\": \" / \",\n        \"dateRangePicker\": {\n            \"separator\": \" / \",\n            \"from\": \"Vom\",\n            \"to\": \"Bis\"\n        },\n        \"rangeInput\": {\n            \"separator\": \"/\"\n        },\n        \"select\": {\n            \"nItems\": \"{count} Elemente ausgewählt\",\n            \"allItems\": \"Alle Elemenente ausgewählt\",\n            \"noItems\": \"Keine Elemente ausgewählt\"\n        }\n    }\n};\n","import {Utils} from \"@sinequa/core/base\";\nimport {enSearch, frSearch, deSearch} from \"@sinequa/components/search\";\nimport _enAdvanced from \"./en\";\nimport _frAdvanced from \"./fr\";\nimport _deAdvanced from \"./de\";\n\nconst enAdvanced = Utils.merge({}, _enAdvanced, enSearch);\nconst frAdvanced = Utils.merge({}, _frAdvanced, frSearch);\nconst deAdvanced = Utils.merge({}, _deAdvanced, deSearch);\n\nexport {enAdvanced, frAdvanced, deAdvanced};\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i3.BsAdvancedFormValidation","i4","i3","i4.BsAdvancedFormAutocomplete","i5.BsAdvancedFormValidation","i6","i4.BsAdvancedFormAutocompleteMultiInput","i1","i4.BsDateRangePicker","i4.BsSelectComponent"],"mappings":"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"}